commit d559c1d41448bb194b00979c9cf8f0d690f95ba8 Author: InfinityLoader Date: Fri Oct 27 03:47:01 2023 -0400 Added MW3 Scripts diff --git a/MW3/PC/MP/1216.gsc b/MW3/PC/MP/1216.gsc new file mode 100644 index 0000000..b13bed7 --- /dev/null +++ b/MW3/PC/MP/1216.gsc @@ -0,0 +1,42 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1216.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:15:21 AM +*******************************************************************/ + +//Function Number: 1 +main(param_00,param_01,param_02) +{ + maps\_vehicle::build_template("pavelow_noai",param_00,param_01,param_02); + maps\_vehicle::build_localinit(::init_local); + maps\_vehicle::build_deathmodel("vehicle_pavelow"); + maps\_vehicle::build_deathfx("explosions/helicopter_explosion_secondary_small","tag_engine_left","pavelow_helicopter_secondary_exp",undefined,undefined,undefined,0,1); + maps\_vehicle::build_deathfx("fire/fire_smoke_trail_L","tag_engine_left","pavelow_helicopter_dying_loop",1,0.05,1,0.5,1); + maps\_vehicle::build_deathfx("explosions/helicopter_explosion_secondary_small","tag_engine_right","pavelow_helicopter_secondary_exp",undefined,undefined,undefined,2.5,1); + maps\_vehicle::build_deathfx("explosions/helicopter_explosion_pavelow",undefined,"pavelow_helicopter_crash",undefined,undefined,undefined,-1,undefined,"stop_crash_loop_sound"); + maps\_vehicle::build_rocket_deathfx("explosions/aerial_explosion_pavelow_mp","tag_deathfx","pavelow_helicopter_crash",undefined,undefined,undefined,undefined,1,undefined,0); + maps\_vehicle::build_treadfx(); + maps\_vehicle::build_life(999,500,1500); + maps\_vehicle::build_team("allies"); + maps\_vehicle::build_drive(%bh_rotors,undefined,0); + var_03 = maps\_vehicle::get_light_model(param_00,param_02); + maps\_vehicle::build_light(var_03,"cockpit_red_cargo02","tag_light_cargo02","misc/aircraft_light_cockpit_red","interior",0); + maps\_vehicle::build_light(var_03,"cockpit_blue_cockpit01","tag_light_cockpit01","misc/aircraft_light_cockpit_blue","interior",0.1); + maps\_vehicle::build_light(var_03,"white_blink","tag_light_belly","misc/aircraft_light_white_blink","running",0.15); + maps\_vehicle::build_light(var_03,"wingtip_green1","tag_light_L_wing1","misc/aircraft_light_wingtip_green","running",0.3); + maps\_vehicle::build_light(var_03,"wingtip_red1","tag_light_R_wing1","misc/aircraft_light_wingtip_red","running",0.2); + maps\_vehicle::build_light(var_03,"solid_tail","tag_light_tail2","misc/aircraft_light_wingtip_red","running",0.25); + maps\_vehicle::build_light(var_03,"white_blink_tail","tag_light_tail","misc/aircraft_light_red_blink","running",0.05); +} + +//Function Number: 2 +init_local() +{ + self.originheightoffset = distance(self gettagorigin("tag_origin"),self gettagorigin("tag_ground")); + self.script_badplace = 0; + thread maps\_vehicle::lights_on("running"); +} \ No newline at end of file diff --git a/MW3/PC/MP/1219.gsc b/MW3/PC/MP/1219.gsc new file mode 100644 index 0000000..2642ea7 --- /dev/null +++ b/MW3/PC/MP/1219.gsc @@ -0,0 +1,14 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1219.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:15:22 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ +} \ No newline at end of file diff --git a/MW3/PC/MP/1220.gsc b/MW3/PC/MP/1220.gsc new file mode 100644 index 0000000..0d626c3 --- /dev/null +++ b/MW3/PC/MP/1220.gsc @@ -0,0 +1,653 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1220.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 36 + * Decompile Time: 21 ms + * Timestamp: 10/27/2023 2:15:22 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + precacheshellshock("frag_grenade_mp"); + func_3831(); + func_3832(); + func_385A(); + player_init(); +} + +//Function Number: 2 +func_3831() +{ + func_383E("main","player_view1_start","player_view1_end"); + var_00 = func_3840("main","Primary Weapon","radial_weapons_primary",::func_3855); + var_01 = func_3840("main","Secondary Weapon","radial_weapons_secondary",::func_3856); + var_02 = func_3840("main","Gears","radial_gears",::func_3857); + var_03 = func_3840("main","Kill Streaks","radial_killstreaks",::func_3858); + var_04 = func_3840("main","Leaderboards","radial_leaderboards",::func_3859); + func_383E("gears","player_view2_start","player_view2_end"); + func_383E("weapons_primary","player_view3_start","player_view3_end"); + func_383E("weapons_secondary","player_view3_start","player_view3_end"); + func_383E("killstreak","player_view4_start","player_view4_end"); + func_383E("leaderboards","player_view5_start","player_view5_end"); +} + +//Function Number: 3 +func_3832() +{ + foreach(var_01 in level.var_3833) + { + func_384A(var_01); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + if(isdefined(var_01[var_02 + 1])) + { + var_03 = func_3852(var_01[var_02].var_3834,var_01[var_02 + 1].var_3834); + var_01[var_02].var_3835 = var_03; + var_01[var_02 + 1].var_3836 = var_03; + continue; + } + + var_03 = func_3852(var_01[var_02].var_3834,var_01[0].var_3834) + 180; + if(var_03 > 360) + { + var_03 = var_03 - 360; + } + + var_01[var_02].var_3835 = var_03; + var_01[0].var_3836 = var_03; + } + } + + thread func_3845(); + thread func_3848(); + thread func_3849(); + thread func_3837(); +} + +//Function Number: 4 +func_3837() +{ + level endon("game_ended"); + level.var_3838 = 1; + for(;;) + { + if(!isdefined(level.var_3839)) + { + wait 0.05; + continue; + } + + var_00 = 1; + while(!level.var_3839 buttonpressed("BUTTON_Y")) + { + wait 0.05; + } + + level.var_3839 playsound("mouse_click"); + if(var_00) + { + level.var_3838 = level.var_3838 * -1; + var_00 = 0; + } + + while(level.var_3839 buttonpressed("BUTTON_Y")) + { + wait 0.05; + } + } +} + +//Function Number: 5 +player_init() +{ + level thread onplayerconnect(); + level thread func_383A(); +} + +//Function Number: 6 +func_383A() +{ + level waittill("game_ended"); + setdvar("cg_draw2d",1); +} + +//Function Number: 7 +onplayerconnect() +{ + level waittill("connected",var_00); + var_00 thread func_383B(); + var_00 waittill("spawned_player"); + wait 1; + var_00 takeallweapons(); + setdvar("cg_draw2d",0); + if(!isdefined(var_00)) + { + return; + } + else + { + level.var_3839 = var_00; + } + + var_00 thread func_383C(); + func_384E("main"); +} + +//Function Number: 8 +func_383B() +{ + self endon("disconnect"); + var_00 = "autoassign"; + while(!isdefined(self.pers["team"])) + { + wait 0.05; + } + + self notify("menuresponse",game["menu_team"],var_00); + wait 0.5; + var_01 = getarraykeys(level.classmap); + var_02 = []; + for(var_03 = 0;var_03 < var_01.size;var_03++) + { + if(!issubstr(var_01[var_03],"custom")) + { + var_02[var_02.size] = var_01[var_03]; + } + } + + for(;;) + { + var_04 = var_02[0]; + self notify("menuresponse","changeclass",var_04); + self waittill("spawned_player"); + wait 0.1; + } +} + +//Function Number: 9 +func_383C() +{ + level endon("game_ended"); + self endon("disconnect"); + for(;;) + { + var_00 = self getnormalizedmovement(); + var_01 = vectortoangles(var_00); + level.var_383D = int(var_01[1]); + wait 0.05; + } +} + +//Function Number: 10 +func_383E(param_00,param_01,param_02) +{ + if(isdefined(level.var_3833) && level.var_3833.size) + { + } + + var_03 = getent(param_02,"targetname"); + var_04 = vectornormalize(anglestoforward(var_03.angles)) * 40; + level.var_3833[param_00] = []; + level.var_383F[param_00]["view_start"] = param_01; + level.var_383F[param_00]["view_pos"] = var_03.origin + var_04; + level.var_383F[param_00]["player_view_pos"] = var_03.origin; + level.var_383F[param_00]["view_angles"] = var_03.angles; +} + +//Function Number: 11 +func_3840(param_00,param_01,param_02,param_03) +{ + var_04 = getent(param_02,"targetname"); + var_05 = func_3850(param_00,var_04); + var_06 = spawnstruct(); + var_06.pos = var_04.origin; + var_06.label = param_01; + var_06.var_3841 = 1; + var_06.var_3842 = (0.5,0.5,1); + var_06.var_3834 = var_05; + var_06.var_3843 = param_03; + var_06.var_3844 = 8; + level.var_3833[param_00][level.var_3833[param_00].size] = var_06; + return var_06; +} + +//Function Number: 12 +func_3845() +{ + level endon("game_ended"); + for(;;) + { + if(!isdefined(level.var_3846)) + { + wait 0.05; + continue; + } + + var_00 = level.var_3847; + foreach(var_02 in level.var_3833[level.var_3846]) + { + if(func_3853(var_02.var_3836,var_02.var_3835)) + { + level.var_3847 = var_02; + continue; + } + + var_02.var_3842 = (0.5,0.5,1); + } + + if(isdefined(level.var_3847)) + { + level.var_3847.var_3842 = (1,1,0.5); + if(isdefined(var_00) && var_00 != level.var_3847) + { + level.var_3839 playsound("mouse_over"); + } + } + + wait 0.05; + } +} + +//Function Number: 13 +func_3848() +{ + level endon("game_ended"); + for(;;) + { + if(!isdefined(level.var_3839)) + { + wait 0.05; + continue; + } + + var_00 = 1; + while(!level.var_3839 buttonpressed("BUTTON_A")) + { + wait 0.05; + } + + level.var_3839 playsound("mouse_click"); + if(isdefined(level.var_3847) && var_00) + { + level.var_3847 notify("select_button_pressed"); + [[ level.var_3847.var_3843 ]](); + var_00 = 0; + } + + while(level.var_3839 buttonpressed("BUTTON_A")) + { + wait 0.05; + } + } +} + +//Function Number: 14 +func_3849() +{ + level endon("game_ended"); + for(;;) + { + if(!isdefined(level.var_3839)) + { + wait 0.05; + continue; + } + + var_00 = 1; + while(!level.var_3839 buttonpressed("BUTTON_X")) + { + wait 0.05; + } + + level.var_3839 playsound("mouse_click"); + if(var_00) + { + func_3854(); + var_00 = 0; + } + + while(level.var_3839 buttonpressed("BUTTON_X")) + { + wait 0.05; + } + } +} + +//Function Number: 15 +func_384A(param_00) +{ + for(var_01 = 0;var_01 < param_00.size - 1;var_01++) + { + for(var_02 = 0;var_02 < param_00.size - 1 - var_01;var_02++) + { + if(param_00[var_02 + 1].var_3834 < param_00[var_02].var_3834) + { + func_384B(param_00[var_02],param_00[var_02 + 1]); + } + } + } +} + +//Function Number: 16 +func_384B(param_00,param_01) +{ + var_02 = param_00.pos; + var_03 = param_00.label; + var_04 = param_00.var_3834; + var_05 = param_00.var_3843; + var_06 = param_00.var_3844; + param_00.pos = param_01.pos; + param_00.label = param_01.label; + param_00.var_3834 = param_01.var_3834; + param_00.var_3843 = param_01.var_3843; + param_00.var_3844 = param_01.var_3844; + param_01.pos = var_02; + param_01.label = var_03; + param_01.var_3834 = var_04; + param_01.var_3843 = var_05; + param_01.var_3844 = var_06; +} + +//Function Number: 17 +func_384C(param_00) +{ + foreach(var_02 in level.var_3833[param_00]) + { + var_02 thread func_384D(param_00); + } +} + +//Function Number: 18 +func_384D(param_00) +{ + level endon("game_ended"); + self endon("remove_button"); + var_01 = level.var_383F[param_00]["view_pos"]; + var_02 = var_01 + func_3851(self.var_3834,4); + for(;;) + { + var_03 = (1,0,0); + if(func_3853(self.var_3836,self.var_3835)) + { + var_03 = (1,1,0); + } + + if(isdefined(level.var_3838) && level.var_3838 > 0) + { + var_04 = var_01 + func_3851(level.var_383D,2); + } + + wait 0.05; + } +} + +//Function Number: 19 +func_384E(param_00,param_01) +{ + level.var_3847 = undefined; + if(isdefined(level.var_3846) && level.var_3846 != "") + { + level.var_384F = level.var_3846; + } + else + { + level.var_384F = "main"; + level.var_3846 = "main"; + } + + foreach(var_03 in level.var_3833[level.var_384F]) + { + var_03 notify("remove_button"); + } + + if(isdefined(param_01) && param_01) + { + level.var_3839 func_385F(level.var_383F[level.var_384F]["view_start"],param_00); + } + else + { + level.var_3839 func_385D(level.var_383F[param_00]["view_start"]); + } + + level thread func_384C(param_00); + level.var_3846 = param_00; +} + +//Function Number: 20 +func_3850(param_00,param_01) +{ + var_02 = level.var_383F[param_00]["view_angles"]; + var_03 = level.var_383F[param_00]["view_pos"]; + var_03 = var_03 + vectornormalize(anglestoforward(var_02)) * 40; + var_04 = anglestoforward(var_02); + var_05 = vectornormalize(anglestoup(var_02)); + var_06 = param_01.angles; + var_07 = param_01.origin; + var_08 = vectornormalize(vectorfromlinetopoint(var_03,var_03 + var_04,var_07)); + var_09 = acos(vectordot(var_08,var_05)); + if(vectordot(anglestoright(var_02),var_08) < 0) + { + var_09 = 360 - var_09; + } + + return var_09; +} + +//Function Number: 21 +func_3851(param_00,param_01) +{ + var_02 = (270 - param_00,0,0); + var_03 = anglestoforward(var_02); + var_04 = vectornormalize(var_03); + var_05 = var_04 * param_01; + return var_05; +} + +//Function Number: 22 +func_3852(param_00,param_01) +{ + var_02 = param_00 + param_01 + 720 / 2 - 360; + return var_02; +} + +//Function Number: 23 +func_3853(param_00,param_01) +{ + var_02 = level.var_383D > param_00 && level.var_383D < 360; + var_03 = level.var_383D > 0 && level.var_383D < param_01; + if(param_00 > param_01) + { + var_04 = var_02 || var_03; + } + else + { + var_04 = level.var_383D > param_01 && level.var_383D < var_02; + } + + return var_04; +} + +//Function Number: 24 +func_3854() +{ + if(isdefined(level.var_3846) && level.var_3846 != "main") + { + func_384E("main",1); + return; + } +} + +//Function Number: 25 +func_3855() +{ + iprintlnbold("action_weapons_primary"); + func_384E("weapons_primary"); +} + +//Function Number: 26 +func_3856() +{ + iprintlnbold("action_weapons_secondary"); + func_384E("weapons_secondary"); +} + +//Function Number: 27 +func_3857() +{ + iprintlnbold("action_gears"); + func_384E("gears"); +} + +//Function Number: 28 +func_3858() +{ + iprintlnbold("action_killstreak"); + func_384E("killstreak"); +} + +//Function Number: 29 +func_3859() +{ + iprintlnbold("action_leaderboards"); + func_384E("leaderboards"); +} + +//Function Number: 30 +func_385A() +{ + level.var_385B = []; + func_385C("player_view1_start"); + func_385C("player_view2_start"); + func_385C("player_view3_start"); + func_385C("player_view4_start"); + func_385C("player_view5_start"); +} + +//Function Number: 31 +func_385C(param_00) +{ + level.var_385B[param_00] = []; + var_01 = getent(param_00,"targetname"); + level.var_385B[param_00][level.var_385B[param_00].size] = var_01; + while(isdefined(var_01) && isdefined(var_01.target)) + { + var_02 = getent(var_01.target,"targetname"); + level.var_385B[param_00][level.var_385B[param_00].size] = var_02; + var_01 = var_02; + } +} + +//Function Number: 32 +func_385D(param_00) +{ + if(!isdefined(level.var_385E)) + { + var_01 = level.var_385B[param_00][0]; + level.var_385E = spawn("script_model",var_01.origin); + level.var_385E.angles = var_01.angles; + self setorigin(level.var_385E.origin - (0,0,65)); + self linkto(level.var_385E); + wait 0.05; + self setplayerangles(level.var_385E.angles); + thread func_3862(); + } + + var_02 = 1; + var_03 = abs(distance(level.var_385E.origin,level.var_385B[param_00][level.var_385B[param_00].size - 1].origin)); + var_02 = var_02 * var_03 / 1200; + var_02 = max(var_02,0.1); + var_04 = var_02; + if(!1) + { + var_04 = var_04 * var_02 * level.var_385B[param_00].size + 1; + } + + thread func_3861(3,var_04); + foreach(var_07, var_06 in level.var_385B[param_00]) + { + if(1) + { + if(var_07 != level.var_385B[param_00].size - 1) + { + continue; + } + } + + level.var_385E moveto(var_06.origin,var_02,var_02 * 0.5,0); + level.var_385E rotateto(var_06.angles,var_02,var_02 * 0.5,0); + wait var_02; + } +} + +//Function Number: 33 +func_385F(param_00,param_01) +{ + var_02 = 1; + var_03 = abs(distance(level.var_385E.origin,level.var_383F[param_01]["player_view_pos"])); + var_02 = var_02 * var_03 / 1200; + var_02 = max(var_02,0.1); + var_04 = var_02; + if(!1) + { + var_04 = var_04 * var_02 * level.var_385B[param_00].size + 1; + } + + thread func_3861(3,var_04); + if(!1) + { + for(var_05 = level.var_385B[param_00].size - 1;var_05 >= 0;var_05--) + { + var_06 = level.var_385B[param_00][var_05]; + level.var_385E moveto(var_06.origin,var_02); + level.var_385E rotateto(var_06.angles,var_02); + wait var_02; + } + } + + thread func_3861(3,var_02); + var_07 = level.var_383F[param_01]["player_view_pos"]; + var_08 = level.var_383F[param_01]["view_angles"]; + level.var_385E moveto(var_07,var_02,var_02 * 0.5,0); + level.var_385E rotateto(var_08,var_02,var_02 * 0.5,0); + wait var_02; +} + +//Function Number: 34 +func_3860(param_00) +{ + self setblurforplayer(20,param_00 + 0.2 / 2); + self setblurforplayer(0,param_00 + 0.2 / 2); + self shellshock("frag_grenade_mp",param_00 + 0.2); +} + +//Function Number: 35 +func_3861(param_00,param_01) +{ + var_02 = int(param_01 / 0.05); + for(var_03 = 0;var_03 < var_02;var_03++) + { + var_04 = var_03 / var_02; + var_05 = sin(180 * var_04); + var_06 = param_00 * var_05; + setdvar("r_blur",var_06); + wait 0.05; + } + + setdvar("r_blur",0); +} + +//Function Number: 36 +func_3862() +{ + level endon("game_ended"); + self endon("disconnect"); + level.var_385E endon("remove_dummy"); + for(;;) + { + self setplayerangles(level.var_385E.angles); + wait 0.05; + } +} \ No newline at end of file diff --git a/MW3/PC/MP/1227.gsc b/MW3/PC/MP/1227.gsc new file mode 100644 index 0000000..5eb9ebe --- /dev/null +++ b/MW3/PC/MP/1227.gsc @@ -0,0 +1,69 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1227.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 11 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:15:27 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ +} + +//Function Number: 2 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_00 thread func_3926(); + } +} + +//Function Number: 3 +func_3921(param_00,param_01,param_02) +{ +} + +//Function Number: 4 +func_3922() +{ +} + +//Function Number: 5 +func_3923(param_00,param_01,param_02,param_03,param_04) +{ +} + +//Function Number: 6 +func_3924(param_00,param_01,param_02,param_03) +{ +} + +//Function Number: 7 +func_3925() +{ +} + +//Function Number: 8 +func_3926() +{ +} + +//Function Number: 9 +func_3927() +{ +} + +//Function Number: 10 +func_3928() +{ +} + +//Function Number: 11 +func_3929() +{ +} \ No newline at end of file diff --git a/MW3/PC/MP/1232.gsc b/MW3/PC/MP/1232.gsc new file mode 100644 index 0000000..d0f58c1 --- /dev/null +++ b/MW3/PC/MP/1232.gsc @@ -0,0 +1,53 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1232.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 4 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:15:27 AM +*******************************************************************/ + +//Function Number: 1 +main(param_00,param_01,param_02) +{ + maps\_vehicle::build_template("c130",param_00,param_01,param_02); + maps\_vehicle::build_localinit(::init_local); + maps\_vehicle::build_deathmodel("vehicle_ac130_low"); + maps\_vehicle::build_deathfx("explosions/large_vehicle_explosion",undefined,"explo_metal_rand"); + maps\_vehicle::build_life(999,500,1500); + maps\_vehicle::build_team("allies"); + maps\_vehicle::build_mainturret(); + var_03 = maps\_vehicle::get_light_model(param_00,param_02); + maps\_vehicle::build_light(var_03,"wingtip_green","tag_light_L_wing","misc/aircraft_light_wingtip_green","running",0); + maps\_vehicle::build_light(var_03,"wingtip_red","tag_light_R_wing","misc/aircraft_light_wingtip_red","running",0.05); + maps\_vehicle::build_light(var_03,"tail_red","tag_light_tail","misc/aircraft_light_white_blink","running",0.05); + maps\_vehicle::build_light(var_03,"white_blink","tag_light_belly","misc/aircraft_light_red_blink","running",1); +} + +//Function Number: 2 +init_local() +{ + maps\_vehicle::lights_on("running"); + self hidepart("tag_25mm"); + self hidepart("tag_40mm"); + self hidepart("tag_105mm"); +} + +//Function Number: 3 +func_3A9C(param_00) +{ + return param_00; +} + +//Function Number: 4 +func_3A9D() +{ + var_00 = []; + for(var_01 = 0;var_01 < 1;var_01++) + { + var_00[var_01] = spawnstruct(); + } + + return var_00; +} \ No newline at end of file diff --git a/MW3/PC/MP/1343.gsc b/MW3/PC/MP/1343.gsc new file mode 100644 index 0000000..98a07cf --- /dev/null +++ b/MW3/PC/MP/1343.gsc @@ -0,0 +1,16 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1343.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:15:27 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + var_00[0] = "head_gign_a"; + return var_7B; +} \ No newline at end of file diff --git a/MW3/PC/MP/1344.gsc b/MW3/PC/MP/1344.gsc new file mode 100644 index 0000000..fa57c29 --- /dev/null +++ b/MW3/PC/MP/1344.gsc @@ -0,0 +1,19 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1344.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:15:28 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + wait 0; + if(isdefined(self)) + { + self delete(); + } +} \ No newline at end of file diff --git a/MW3/PC/MP/324.gsc b/MW3/PC/MP/324.gsc new file mode 100644 index 0000000..1309964 --- /dev/null +++ b/MW3/PC/MP/324.gsc @@ -0,0 +1,258 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 324.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 13 + * Decompile Time: 3 ms + * Timestamp: 10/27/2023 2:15:49 AM +*******************************************************************/ + +//Function Number: 1 +func_1E55(param_00) +{ + self setmodel(param_00[randomint(param_00.size)]); +} + +//Function Number: 2 +func_1E56(param_00) +{ + for(var_01 = 0;var_01 < param_00.size;var_01++) + { + precachemodel(param_00[var_01]); + } +} + +//Function Number: 3 +func_1E57(param_00,param_01) +{ + if(!isdefined(level.var_1E58)) + { + level.var_1E58 = []; + } + + if(!isdefined(level.var_1E58[param_00])) + { + level.var_1E58[param_00] = randomint(param_01.size); + } + + var_02 = level.var_1E58[param_00] + 1 % param_01.size; + if(isdefined(self.script_char_index)) + { + var_02 = self.script_char_index % param_01.size; + } + + level.var_1E58[param_00] = var_02; + self attach(param_01[var_02],"",1); + self.var_1E5A = param_01[var_02]; +} + +//Function Number: 4 +func_1E5B(param_00,param_01) +{ + if(!isdefined(level.var_1E5C)) + { + level.var_1E5C = []; + } + + if(!isdefined(level.var_1E5C[param_00])) + { + level.var_1E5C[param_00] = randomint(param_01.size); + } + + var_02 = level.var_1E5C[param_00] + 1 % param_01.size; + level.var_1E5C[param_00] = var_02; + self attach(param_01[var_02]); + self.hatmodel = param_01[var_02]; +} + +//Function Number: 5 +func_1E5D() +{ + self detachall(); + var_00 = self.var_1E5E; + if(!isdefined(var_00)) + { + return; + } + + self.var_1E5E = "none"; + self [[ level.var_1E5F ]](var_00); +} + +//Function Number: 6 +func_1E60() +{ + var_00["gunHand"] = self.var_1E5E; + if(isdefined(self.name)) + { + } + else + { + } + + var_01 = self getattachsize(); + for(var_02 = 0;var_02 < var_01;var_02++ = var_7B["name"]) + { + var_7B["attach"][var_02]["model"] = self getattachmodelname(var_02); + var_7B["attach"][var_02]["tag"] = self getattachtagname(var_02); + } + + return var_7B; +} + +//Function Number: 7 +func_1E62(param_00) +{ + self detachall(); + self.var_1E5E = param_00["gunHand"]; + self.var_1E61 = param_00["gunInHand"]; + self setmodel(param_00["model"]); + self.hatmodel = param_00["hatModel"]; + if(isdefined(param_00["name"])) + { + self.name = param_00["name"]; + } + else + { + } + + var_01 = param_00["attach"]; + var_02 = var_01.size; + for(var_03 = 0;var_03 < var_02;var_03++) + { + self attach(var_01[var_03]["model"],var_01[var_03]["tag"]); + } +} + +//Function Number: 8 +precache(param_00) +{ + if(isdefined(param_00["name"])) + { + } + else + { + } + + precachemodel(param_00["model"]); + var_01 = param_00["attach"]; + var_02 = var_01.size; + for(var_03 = 0;var_03 < var_02;var_03++) + { + precachemodel(var_01[var_03]["model"]); + } +} + +//Function Number: 9 +func_1E63(param_00) +{ + var_01 = strtok(self.classname,"_"); + if(!common_scripts\utility::issp()) + { + if(isdefined(self.pers["modelIndex"]) && self.pers["modelIndex"] < param_00) + { + return self.pers["modelIndex"]; + } + + var_02 = randomint(param_00); + self.pers["modelIndex"] = var_02; + return var_02; + } + else if(var_02.size <= 2) + { + return randomint(var_01); + } + + var_03 = "auto"; + var_02 = undefined; + var_04 = var_01[2]; + if(isdefined(self.script_char_index)) + { + var_03 = self.script_char_index; + } + + if(isdefined(self.script_char_group)) + { + var_05 = "grouped"; + var_02 = "group_" + self.script_char_group; + } + + if(!isdefined(level.var_1E65)) + { + level.var_1E65 = []; + } + + if(!isdefined(level.var_1E65[var_04])) + { + level.var_1E65[var_04] = []; + } + + if(!isdefined(level.var_1E65[var_04][var_02])) + { + func_1E67(var_04,var_02,param_00); + } + + if(!isdefined(var_03)) + { + var_03 = func_1E66(var_04,var_02); + if(!isdefined(var_03)) + { + var_03 = randomint(5000); + } + } + + while(var_03 >= param_00) + { + var_03 = var_03 - param_00; + } + + level.var_1E65[var_04][var_02][var_03]++; + return var_03; +} + +//Function Number: 10 +func_1E66(param_00,param_01) +{ + var_02 = []; + var_03 = level.var_1E65[param_00][param_01][0]; + var_02[0] = 0; + for(var_04 = 1;var_04 < level.var_1E65[param_00][param_01].size;var_04++) + { + if(level.var_1E65[param_00][param_01][var_04] > var_03) + { + continue; + } + + if(level.var_1E65[param_00][param_01][var_04] < var_03) + { + var_02 = []; + var_03 = level.var_1E65[param_00][param_01][var_04]; + } + + var_02[var_02.size] = var_04; + } + + return random(var_02); +} + +//Function Number: 11 +func_1E67(param_00,param_01,param_02) +{ + for(var_03 = 0;var_03 < param_02;var_03++) + { + level.var_1E65[param_00][param_01][var_03] = 0; + } +} + +//Function Number: 12 +func_1E68(param_00) +{ + return randomint(param_00); +} + +//Function Number: 13 +random(param_00) +{ + return param_00[randomint(param_00.size)]; +} \ No newline at end of file diff --git a/MW3/PC/MP/404.gsc b/MW3/PC/MP/404.gsc new file mode 100644 index 0000000..6ab2fd5 --- /dev/null +++ b/MW3/PC/MP/404.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 404.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:15:49 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_ally_ghillie_desert_sniper"); + self attach("head_ally_delta_sniper","",1); + self.var_1E5A = "head_ally_delta_sniper"; + self setviewmodel("viewhands_iw5_ghillie_desert"); + self.voice = "delta"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_ally_ghillie_desert_sniper"); + precachemodel("head_ally_delta_sniper"); + precachemodel("viewhands_iw5_ghillie_desert"); +} \ No newline at end of file diff --git a/MW3/PC/MP/405.gsc b/MW3/PC/MP/405.gsc new file mode 100644 index 0000000..d77d495 --- /dev/null +++ b/MW3/PC/MP/405.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 405.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:15:49 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_opforce_ghillie_desert_sniper"); + self attach("head_opforce_russian_air_sniper","",1); + self.var_1E5A = "head_opforce_russian_air_sniper"; + self setviewmodel("viewhands_iw5_ghillie_desert"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_opforce_ghillie_desert_sniper"); + precachemodel("head_opforce_russian_air_sniper"); + precachemodel("viewhands_iw5_ghillie_desert"); +} \ No newline at end of file diff --git a/MW3/PC/MP/406.gsc b/MW3/PC/MP/406.gsc new file mode 100644 index 0000000..fd95bbf --- /dev/null +++ b/MW3/PC/MP/406.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 406.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 1 ms + * Timestamp: 10/27/2023 2:15:50 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_ally_ghillie_desert_sniper"); + self attach("head_ally_arctic_sniper","",1); + self.var_1E5A = "head_ally_arctic_sniper"; + self setviewmodel("viewhands_iw5_ghillie_arctic"); + self.voice = "delta"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_ally_ghillie_desert_sniper"); + precachemodel("head_ally_arctic_sniper"); + precachemodel("viewhands_iw5_ghillie_arctic"); +} \ No newline at end of file diff --git a/MW3/PC/MP/407.gsc b/MW3/PC/MP/407.gsc new file mode 100644 index 0000000..464a75d --- /dev/null +++ b/MW3/PC/MP/407.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 407.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:15:50 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_opforce_ghillie_arctic_sniper"); + self attach("head_opforce_russian_arctic_sniper","",1); + self.var_1E5A = "head_opforce_russian_arctic_sniper"; + self setviewmodel("viewhands_iw5_ghillie_arctic"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_opforce_ghillie_arctic_sniper"); + precachemodel("head_opforce_russian_arctic_sniper"); + precachemodel("viewhands_iw5_ghillie_arctic"); +} \ No newline at end of file diff --git a/MW3/PC/MP/408.gsc b/MW3/PC/MP/408.gsc new file mode 100644 index 0000000..3117ba6 --- /dev/null +++ b/MW3/PC/MP/408.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 408.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:15:50 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_ally_ghillie_urban_sniper"); + self attach("head_ally_delta_sniper","",1); + self.var_1E5A = "head_ally_delta_sniper"; + self setviewmodel("viewhands_iw5_ghillie_urban"); + self.voice = "delta"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_ally_ghillie_urban_sniper"); + precachemodel("head_ally_delta_sniper"); + precachemodel("viewhands_iw5_ghillie_urban"); +} \ No newline at end of file diff --git a/MW3/PC/MP/409.gsc b/MW3/PC/MP/409.gsc new file mode 100644 index 0000000..399d8a8 --- /dev/null +++ b/MW3/PC/MP/409.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 409.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:15:51 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_opforce_ghillie_urban_sniper"); + self attach("head_opforce_russian_urban_sniper","",1); + self.var_1E5A = "head_opforce_russian_urban_sniper"; + self setviewmodel("viewhands_iw5_ghillie_urban"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_opforce_ghillie_urban_sniper"); + precachemodel("head_opforce_russian_urban_sniper"); + precachemodel("viewhands_iw5_ghillie_urban"); +} \ No newline at end of file diff --git a/MW3/PC/MP/410.gsc b/MW3/PC/MP/410.gsc new file mode 100644 index 0000000..c8d73e4 --- /dev/null +++ b/MW3/PC/MP/410.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 410.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:15:51 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_ally_ghillie_woodland_sniper"); + self attach("head_ally_delta_sniper","",1); + self.var_1E5A = "head_ally_delta_sniper"; + self setviewmodel("viewhands_iw5_ghillie_woodland"); + self.voice = "pmc"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_ally_ghillie_woodland_sniper"); + precachemodel("head_ally_delta_sniper"); + precachemodel("viewhands_iw5_ghillie_woodland"); +} \ No newline at end of file diff --git a/MW3/PC/MP/411.gsc b/MW3/PC/MP/411.gsc new file mode 100644 index 0000000..6ea6afb --- /dev/null +++ b/MW3/PC/MP/411.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 411.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 4 ms + * Timestamp: 10/27/2023 2:15:51 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_opforce_ghillie_woodland_sniper"); + self attach("head_opforce_russian_woodland_sniper","",1); + self.var_1E5A = "head_opforce_russian_woodland_sniper"; + self setviewmodel("viewhands_iw5_ghillie_woodland"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_opforce_ghillie_woodland_sniper"); + precachemodel("head_opforce_russian_woodland_sniper"); + precachemodel("viewhands_iw5_ghillie_woodland"); +} \ No newline at end of file diff --git a/MW3/PC/MP/412.gsc b/MW3/PC/MP/412.gsc new file mode 100644 index 0000000..78213c8 --- /dev/null +++ b/MW3/PC/MP/412.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 412.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:15:52 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_opforce_ghillie_africa_militia_sniper"); + self attach("head_ghillie_africa_militia_sniper","",1); + self.var_1E5A = "head_ghillie_africa_militia_sniper"; + self setviewmodel("viewhands_african_militia"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_opforce_ghillie_africa_militia_sniper"); + precachemodel("head_ghillie_africa_militia_sniper"); + precachemodel("viewhands_african_militia"); +} \ No newline at end of file diff --git a/MW3/PC/MP/413.gsc b/MW3/PC/MP/413.gsc new file mode 100644 index 0000000..2c003a4 --- /dev/null +++ b/MW3/PC/MP/413.gsc @@ -0,0 +1,16 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 413.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:15:52 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + var_00[0] = "head_delta_elite_a"; + return var_7B; +} \ No newline at end of file diff --git a/MW3/PC/MP/450.gsc b/MW3/PC/MP/450.gsc new file mode 100644 index 0000000..b94939a --- /dev/null +++ b/MW3/PC/MP/450.gsc @@ -0,0 +1,16 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 450.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:15:52 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + var_00[0] = "head_delta_elite_a"; + return var_7B; +} \ No newline at end of file diff --git a/MW3/PC/MP/451.gsc b/MW3/PC/MP/451.gsc new file mode 100644 index 0000000..54d4b6f --- /dev/null +++ b/MW3/PC/MP/451.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 451.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:15:52 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_delta_elite_assault_aa"); + lib_0144::func_1E57("alias_delta_elite_heads",lib_019D::main()); + self setviewmodel("viewhands_delta"); + self.voice = "delta"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_delta_elite_assault_aa"); + lib_0144::func_1E56(lib_019D::main()); + precachemodel("viewhands_delta"); +} \ No newline at end of file diff --git a/MW3/PC/MP/452.gsc b/MW3/PC/MP/452.gsc new file mode 100644 index 0000000..4be479d --- /dev/null +++ b/MW3/PC/MP/452.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 452.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:15:53 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_delta_elite_assault_ab"); + lib_0144::func_1E57("alias_delta_elite_heads_longsleeves",lib_01C2::main()); + self setviewmodel("viewhands_delta"); + self.voice = "delta"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_delta_elite_assault_ab"); + lib_0144::func_1E56(lib_01C2::main()); + precachemodel("viewhands_delta"); +} \ No newline at end of file diff --git a/MW3/PC/MP/453.gsc b/MW3/PC/MP/453.gsc new file mode 100644 index 0000000..380e359 --- /dev/null +++ b/MW3/PC/MP/453.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 453.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:15:53 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_delta_elite_assault_ba"); + lib_0144::func_1E57("alias_delta_elite_heads",lib_019D::main()); + self setviewmodel("viewhands_delta"); + self.voice = "delta"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_delta_elite_assault_ba"); + lib_0144::func_1E56(lib_019D::main()); + precachemodel("viewhands_delta"); +} \ No newline at end of file diff --git a/MW3/PC/MP/454.gsc b/MW3/PC/MP/454.gsc new file mode 100644 index 0000000..3d6a603 --- /dev/null +++ b/MW3/PC/MP/454.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 454.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:15:53 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_delta_elite_assault_bb"); + lib_0144::func_1E57("alias_delta_elite_heads_longsleeves",lib_01C2::main()); + self setviewmodel("viewhands_delta"); + self.voice = "delta"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_delta_elite_assault_bb"); + lib_0144::func_1E56(lib_01C2::main()); + precachemodel("viewhands_delta"); +} \ No newline at end of file diff --git a/MW3/PC/MP/455.gsc b/MW3/PC/MP/455.gsc new file mode 100644 index 0000000..0ccd6ad --- /dev/null +++ b/MW3/PC/MP/455.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 455.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:15:54 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_delta_elite_lmg_a"); + lib_0144::func_1E57("alias_delta_elite_heads",lib_019D::main()); + self setviewmodel("viewhands_delta"); + self.voice = "delta"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_delta_elite_lmg_a"); + lib_0144::func_1E56(lib_019D::main()); + precachemodel("viewhands_delta"); +} \ No newline at end of file diff --git a/MW3/PC/MP/456.gsc b/MW3/PC/MP/456.gsc new file mode 100644 index 0000000..4fdb31c --- /dev/null +++ b/MW3/PC/MP/456.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 456.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:15:54 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_delta_elite_lmg_b"); + lib_0144::func_1E57("alias_delta_elite_heads_longsleeves",lib_01C2::main()); + self setviewmodel("viewhands_delta"); + self.voice = "delta"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_delta_elite_lmg_b"); + lib_0144::func_1E56(lib_01C2::main()); + precachemodel("viewhands_delta"); +} \ No newline at end of file diff --git a/MW3/PC/MP/457.gsc b/MW3/PC/MP/457.gsc new file mode 100644 index 0000000..9180b87 --- /dev/null +++ b/MW3/PC/MP/457.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 457.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:15:54 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_delta_elite_smg_a"); + lib_0144::func_1E57("alias_delta_elite_heads",lib_019D::main()); + self setviewmodel("viewhands_delta"); + self.voice = "delta"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_delta_elite_smg_a"); + lib_0144::func_1E56(lib_019D::main()); + precachemodel("viewhands_delta"); +} \ No newline at end of file diff --git a/MW3/PC/MP/458.gsc b/MW3/PC/MP/458.gsc new file mode 100644 index 0000000..8591e64 --- /dev/null +++ b/MW3/PC/MP/458.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 458.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:15:55 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_delta_elite_smg_b"); + lib_0144::func_1E57("alias_delta_elite_heads_longsleeves",lib_01C2::main()); + self setviewmodel("viewhands_delta"); + self.voice = "delta"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_delta_elite_smg_b"); + lib_0144::func_1E56(lib_01C2::main()); + precachemodel("viewhands_delta"); +} \ No newline at end of file diff --git a/MW3/PC/MP/488.gsc b/MW3/PC/MP/488.gsc new file mode 100644 index 0000000..7e4ed93 --- /dev/null +++ b/MW3/PC/MP/488.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 488.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:15:55 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_delta_elite_shotgun_a"); + lib_0144::func_1E57("alias_delta_elite_heads_longsleeves",lib_01C2::main()); + self setviewmodel("viewhands_delta"); + self.voice = "delta"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_delta_elite_shotgun_a"); + lib_0144::func_1E56(lib_01C2::main()); + precachemodel("viewhands_delta"); +} \ No newline at end of file diff --git a/MW3/PC/MP/489.gsc b/MW3/PC/MP/489.gsc new file mode 100644 index 0000000..1393090 --- /dev/null +++ b/MW3/PC/MP/489.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 489.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:15:55 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_ally_delta_sniper"); + self attach("head_ally_delta_sniper","",1); + self.var_1E5A = "head_ally_delta_sniper"; + self setviewmodel("viewhands_delta"); + self.voice = "delta"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_ally_delta_sniper"); + precachemodel("head_ally_delta_sniper"); + precachemodel("viewhands_delta"); +} \ No newline at end of file diff --git a/MW3/PC/MP/490.gsc b/MW3/PC/MP/490.gsc new file mode 100644 index 0000000..6b4dcb6 --- /dev/null +++ b/MW3/PC/MP/490.gsc @@ -0,0 +1,16 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 490.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:15:56 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + var_00[0] = "head_sas_a"; + return var_7B; +} \ No newline at end of file diff --git a/MW3/PC/MP/491.gsc b/MW3/PC/MP/491.gsc new file mode 100644 index 0000000..d779a53 --- /dev/null +++ b/MW3/PC/MP/491.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 491.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:15:56 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_sas_urban_assault"); + lib_0144::func_1E57("alias_sas_heads",lib_01EA::main()); + self setviewmodel("viewhands_sas"); + self.voice = "british"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_sas_urban_assault"); + lib_0144::func_1E56(lib_01EA::main()); + precachemodel("viewhands_sas"); +} \ No newline at end of file diff --git a/MW3/PC/MP/532.gsc b/MW3/PC/MP/532.gsc new file mode 100644 index 0000000..81dddb5 --- /dev/null +++ b/MW3/PC/MP/532.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 532.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:01 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_sas_urban_lmg"); + lib_0144::func_1E57("alias_sas_heads",lib_01EA::main()); + self setviewmodel("viewhands_sas"); + self.voice = "british"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_sas_urban_lmg"); + lib_0144::func_1E56(lib_01EA::main()); + precachemodel("viewhands_sas"); +} \ No newline at end of file diff --git a/MW3/PC/MP/533.gsc b/MW3/PC/MP/533.gsc new file mode 100644 index 0000000..2f023b8 --- /dev/null +++ b/MW3/PC/MP/533.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 533.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:01 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_sas_urban_shotgun"); + lib_0144::func_1E57("alias_sas_heads",lib_01EA::main()); + self setviewmodel("viewhands_sas"); + self.voice = "british"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_sas_urban_shotgun"); + lib_0144::func_1E56(lib_01EA::main()); + precachemodel("viewhands_sas"); +} \ No newline at end of file diff --git a/MW3/PC/MP/534.gsc b/MW3/PC/MP/534.gsc new file mode 100644 index 0000000..cb9b62b --- /dev/null +++ b/MW3/PC/MP/534.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 534.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:01 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_sas_urban_smg"); + lib_0144::func_1E57("alias_sas_heads",lib_01EA::main()); + self setviewmodel("viewhands_sas"); + self.voice = "british"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_sas_urban_smg"); + lib_0144::func_1E56(lib_01EA::main()); + precachemodel("viewhands_sas"); +} \ No newline at end of file diff --git a/MW3/PC/MP/535.gsc b/MW3/PC/MP/535.gsc new file mode 100644 index 0000000..b9ba2f5 --- /dev/null +++ b/MW3/PC/MP/535.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 535.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:02 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_ally_sas_sniper"); + self attach("head_ally_sas_sniper","",1); + self.var_1E5A = "head_ally_sas_sniper"; + self setviewmodel("viewhands_sas"); + self.voice = "british"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_ally_sas_sniper"); + precachemodel("head_ally_sas_sniper"); + precachemodel("viewhands_sas"); +} \ No newline at end of file diff --git a/MW3/PC/MP/536.gsc b/MW3/PC/MP/536.gsc new file mode 100644 index 0000000..5902dd8 --- /dev/null +++ b/MW3/PC/MP/536.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 536.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:02 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_gign_paris_assault"); + self attach("head_gign_c","",1); + self.var_1E5A = "head_gign_c"; + self setviewmodel("viewhands_sas"); + self.voice = "french"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_gign_paris_assault"); + precachemodel("head_gign_c"); + precachemodel("viewhands_sas"); +} \ No newline at end of file diff --git a/MW3/PC/MP/537.gsc b/MW3/PC/MP/537.gsc new file mode 100644 index 0000000..a85caf6 --- /dev/null +++ b/MW3/PC/MP/537.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 537.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:02 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_gign_paris_lmg"); + self attach("head_gign_d","",1); + self.var_1E5A = "head_gign_d"; + self setviewmodel("viewhands_sas"); + self.voice = "french"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_gign_paris_lmg"); + precachemodel("head_gign_d"); + precachemodel("viewhands_sas"); +} \ No newline at end of file diff --git a/MW3/PC/MP/538.gsc b/MW3/PC/MP/538.gsc new file mode 100644 index 0000000..24201ee --- /dev/null +++ b/MW3/PC/MP/538.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 538.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:03 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_gign_paris_shotgun"); + self attach("head_gign_b","",1); + self.var_1E5A = "head_gign_b"; + self setviewmodel("viewhands_sas"); + self.voice = "french"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_gign_paris_shotgun"); + precachemodel("head_gign_b"); + precachemodel("viewhands_sas"); +} \ No newline at end of file diff --git a/MW3/PC/MP/539.gsc b/MW3/PC/MP/539.gsc new file mode 100644 index 0000000..e043559 --- /dev/null +++ b/MW3/PC/MP/539.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 539.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:03 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_gign_paris_smg"); + self attach("head_gign_saber_gasmask","",1); + self.var_1E5A = "head_gign_saber_gasmask"; + self setviewmodel("viewhands_sas"); + self.voice = "french"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_gign_paris_smg"); + precachemodel("head_gign_saber_gasmask"); + precachemodel("viewhands_sas"); +} \ No newline at end of file diff --git a/MW3/PC/MP/540.gsc b/MW3/PC/MP/540.gsc new file mode 100644 index 0000000..bb6fb8b --- /dev/null +++ b/MW3/PC/MP/540.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 540.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:03 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_gign_paris_lmg"); + self attach("head_gign_a","",1); + self.var_1E5A = "head_gign_a"; + self setviewmodel("viewhands_sas"); + self.voice = "french"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_gign_paris_lmg"); + precachemodel("head_gign_a"); + precachemodel("viewhands_sas"); +} \ No newline at end of file diff --git a/MW3/PC/MP/541.gsc b/MW3/PC/MP/541.gsc new file mode 100644 index 0000000..abf0eef --- /dev/null +++ b/MW3/PC/MP/541.gsc @@ -0,0 +1,16 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 541.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:03 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + var_00[0] = "head_pmc_africa_a"; + return var_7B; +} \ No newline at end of file diff --git a/MW3/PC/MP/542.gsc b/MW3/PC/MP/542.gsc new file mode 100644 index 0000000..6e012cc --- /dev/null +++ b/MW3/PC/MP/542.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 542.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:04 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_pmc_africa_assault_a"); + lib_0144::func_1E57("alias_pmc_africa_heads",lib_021D::main()); + self setviewmodel("viewhands_pmc"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_pmc_africa_assault_a"); + lib_0144::func_1E56(lib_021D::main()); + precachemodel("viewhands_pmc"); +} \ No newline at end of file diff --git a/MW3/PC/MP/543.gsc b/MW3/PC/MP/543.gsc new file mode 100644 index 0000000..87401b5 --- /dev/null +++ b/MW3/PC/MP/543.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 543.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:04 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_pmc_africa_assault_aa"); + lib_0144::func_1E57("alias_pmc_africa_heads",lib_021D::main()); + self setviewmodel("viewhands_pmc"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_pmc_africa_assault_aa"); + lib_0144::func_1E56(lib_021D::main()); + precachemodel("viewhands_pmc"); +} \ No newline at end of file diff --git a/MW3/PC/MP/544.gsc b/MW3/PC/MP/544.gsc new file mode 100644 index 0000000..db7c366 --- /dev/null +++ b/MW3/PC/MP/544.gsc @@ -0,0 +1,24 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 544.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:05 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_fullbody_ally_juggernaut"); + self setviewmodel("viewhands_juggernaut_ally"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_fullbody_ally_juggernaut"); + precachemodel("viewhands_juggernaut_ally"); +} \ No newline at end of file diff --git a/MW3/PC/MP/545.gsc b/MW3/PC/MP/545.gsc new file mode 100644 index 0000000..f6a554c --- /dev/null +++ b/MW3/PC/MP/545.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 545.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:05 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_pmc_africa_lmg_a"); + lib_0144::func_1E57("alias_pmc_africa_heads",lib_021D::main()); + self setviewmodel("viewhands_pmc"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_pmc_africa_lmg_a"); + lib_0144::func_1E56(lib_021D::main()); + precachemodel("viewhands_pmc"); +} \ No newline at end of file diff --git a/MW3/PC/MP/546.gsc b/MW3/PC/MP/546.gsc new file mode 100644 index 0000000..9b0936f --- /dev/null +++ b/MW3/PC/MP/546.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 546.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:05 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_pmc_africa_lmg_aa"); + lib_0144::func_1E57("alias_pmc_africa_heads",lib_021D::main()); + self setviewmodel("viewhands_pmc"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_pmc_africa_lmg_aa"); + lib_0144::func_1E56(lib_021D::main()); + precachemodel("viewhands_pmc"); +} \ No newline at end of file diff --git a/MW3/PC/MP/547.gsc b/MW3/PC/MP/547.gsc new file mode 100644 index 0000000..f27419d --- /dev/null +++ b/MW3/PC/MP/547.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 547.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:05 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_pmc_africa_smg_aa"); + lib_0144::func_1E57("alias_pmc_africa_heads",lib_021D::main()); + self setviewmodel("viewhands_pmc"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_pmc_africa_smg_aa"); + lib_0144::func_1E56(lib_021D::main()); + precachemodel("viewhands_pmc"); +} \ No newline at end of file diff --git a/MW3/PC/MP/548.gsc b/MW3/PC/MP/548.gsc new file mode 100644 index 0000000..952a5e6 --- /dev/null +++ b/MW3/PC/MP/548.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 548.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:06 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_pmc_africa_shotgun_a"); + lib_0144::func_1E57("alias_pmc_africa_heads",lib_021D::main()); + self setviewmodel("viewhands_pmc"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_pmc_africa_shotgun_a"); + lib_0144::func_1E56(lib_021D::main()); + precachemodel("viewhands_pmc"); +} \ No newline at end of file diff --git a/MW3/PC/MP/591.gsc b/MW3/PC/MP/591.gsc new file mode 100644 index 0000000..97b452e --- /dev/null +++ b/MW3/PC/MP/591.gsc @@ -0,0 +1,24 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 591.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:06 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_ally_pmc_sniper"); + self setviewmodel("viewhands_pmc"); + self.voice = "taskforce"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_ally_pmc_sniper"); + precachemodel("viewhands_pmc"); +} \ No newline at end of file diff --git a/MW3/PC/MP/592.gsc b/MW3/PC/MP/592.gsc new file mode 100644 index 0000000..1127003 --- /dev/null +++ b/MW3/PC/MP/592.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 592.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:06 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_russian_military_assault_a_airborne"); + self attach("head_russian_military_aa","",1); + self.var_1E5A = "head_russian_military_aa"; + self setviewmodel("viewhands_russian_b"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_russian_military_assault_a_airborne"); + precachemodel("head_russian_military_aa"); + precachemodel("viewhands_russian_b"); +} \ No newline at end of file diff --git a/MW3/PC/MP/593.gsc b/MW3/PC/MP/593.gsc new file mode 100644 index 0000000..a8501ce --- /dev/null +++ b/MW3/PC/MP/593.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 593.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:07 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_russian_military_lmg_a_airborne"); + self attach("head_russian_military_bb","",1); + self.var_1E5A = "head_russian_military_bb"; + self setviewmodel("viewhands_russian_b"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_russian_military_lmg_a_airborne"); + precachemodel("head_russian_military_bb"); + precachemodel("viewhands_russian_b"); +} \ No newline at end of file diff --git a/MW3/PC/MP/594.gsc b/MW3/PC/MP/594.gsc new file mode 100644 index 0000000..696b5ba --- /dev/null +++ b/MW3/PC/MP/594.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 594.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:07 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_russian_military_shotgun_a_airborne"); + self attach("head_russian_military_d","",1); + self.var_1E5A = "head_russian_military_d"; + self setviewmodel("viewhands_russian_b"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_russian_military_shotgun_a_airborne"); + precachemodel("head_russian_military_d"); + precachemodel("viewhands_russian_b"); +} \ No newline at end of file diff --git a/MW3/PC/MP/595.gsc b/MW3/PC/MP/595.gsc new file mode 100644 index 0000000..dc667c2 --- /dev/null +++ b/MW3/PC/MP/595.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 595.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:07 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_russian_military_smg_a_airborne"); + self attach("head_russian_military_f","",1); + self.var_1E5A = "head_russian_military_f"; + self setviewmodel("viewhands_russian_b"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_russian_military_smg_a_airborne"); + precachemodel("head_russian_military_f"); + precachemodel("viewhands_russian_b"); +} \ No newline at end of file diff --git a/MW3/PC/MP/596.gsc b/MW3/PC/MP/596.gsc new file mode 100644 index 0000000..e32cbd8 --- /dev/null +++ b/MW3/PC/MP/596.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 596.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:08 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_opforce_russian_air_sniper"); + self attach("head_opforce_russian_air_sniper","",1); + self.var_1E5A = "head_opforce_russian_air_sniper"; + self setviewmodel("viewhands_russian_b"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_opforce_russian_air_sniper"); + precachemodel("head_opforce_russian_air_sniper"); + precachemodel("viewhands_russian_b"); +} \ No newline at end of file diff --git a/MW3/PC/MP/597.gsc b/MW3/PC/MP/597.gsc new file mode 100644 index 0000000..626b2d3 --- /dev/null +++ b/MW3/PC/MP/597.gsc @@ -0,0 +1,24 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 597.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:08 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_fullbody_opforce_juggernaut"); + self setviewmodel("viewhands_juggernaut_opforce"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_fullbody_opforce_juggernaut"); + precachemodel("viewhands_juggernaut_opforce"); +} \ No newline at end of file diff --git a/MW3/PC/MP/598.gsc b/MW3/PC/MP/598.gsc new file mode 100644 index 0000000..dcb6378 --- /dev/null +++ b/MW3/PC/MP/598.gsc @@ -0,0 +1,16 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 598.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:08 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + var_00[0] = "head_russian_military_a"; + return var_7B; +} \ No newline at end of file diff --git a/MW3/PC/MP/599.gsc b/MW3/PC/MP/599.gsc new file mode 100644 index 0000000..900aeea --- /dev/null +++ b/MW3/PC/MP/599.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 599.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:09 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_russian_military_assault_a_arctic"); + lib_0144::func_1E57("alias_russian_military_arctic_heads",lib_0256::main()); + self setviewmodel("viewhands_russian_d"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_russian_military_assault_a_arctic"); + lib_0144::func_1E56(lib_0256::main()); + precachemodel("viewhands_russian_d"); +} \ No newline at end of file diff --git a/MW3/PC/MP/600.gsc b/MW3/PC/MP/600.gsc new file mode 100644 index 0000000..87b5db8 --- /dev/null +++ b/MW3/PC/MP/600.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 600.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:09 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_russian_military_lmg_a_arctic"); + lib_0144::func_1E57("alias_russian_military_arctic_heads",lib_0256::main()); + self setviewmodel("viewhands_russian_d"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_russian_military_lmg_a_arctic"); + lib_0144::func_1E56(lib_0256::main()); + precachemodel("viewhands_russian_d"); +} \ No newline at end of file diff --git a/MW3/PC/MP/621.gsc b/MW3/PC/MP/621.gsc new file mode 100644 index 0000000..e70d128 --- /dev/null +++ b/MW3/PC/MP/621.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 621.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:09 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_russian_military_shotgun_a_arctic"); + lib_0144::func_1E57("alias_russian_military_arctic_heads",lib_0256::main()); + self setviewmodel("viewhands_russian_d"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_russian_military_shotgun_a_arctic"); + lib_0144::func_1E56(lib_0256::main()); + precachemodel("viewhands_russian_d"); +} \ No newline at end of file diff --git a/MW3/PC/MP/622.gsc b/MW3/PC/MP/622.gsc new file mode 100644 index 0000000..d692a03 --- /dev/null +++ b/MW3/PC/MP/622.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 622.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:10 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_russian_military_smg_a_arctic"); + self attach("head_russian_military_f","",1); + self.var_1E5A = "head_russian_military_f"; + self setviewmodel("viewhands_russian_d"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_russian_military_smg_a_arctic"); + precachemodel("head_russian_military_f"); + precachemodel("viewhands_russian_d"); +} \ No newline at end of file diff --git a/MW3/PC/MP/623.gsc b/MW3/PC/MP/623.gsc new file mode 100644 index 0000000..aadb4dc --- /dev/null +++ b/MW3/PC/MP/623.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 623.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:10 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_opforce_russian_arctic_sniper"); + self attach("head_opforce_russian_arctic_sniper","",1); + self.var_1E5A = "head_opforce_russian_arctic_sniper"; + self setviewmodel("viewhands_russian_d"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_opforce_russian_arctic_sniper"); + precachemodel("head_opforce_russian_arctic_sniper"); + precachemodel("viewhands_russian_d"); +} \ No newline at end of file diff --git a/MW3/PC/MP/624.gsc b/MW3/PC/MP/624.gsc new file mode 100644 index 0000000..2aa20f7 --- /dev/null +++ b/MW3/PC/MP/624.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 624.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:10 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_russian_military_assault_a"); + self attach("head_russian_military_aa","",1); + self.var_1E5A = "head_russian_military_aa"; + self setviewmodel("viewhands_russian_a"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_russian_military_assault_a"); + precachemodel("head_russian_military_aa"); + precachemodel("viewhands_russian_a"); +} \ No newline at end of file diff --git a/MW3/PC/MP/625.gsc b/MW3/PC/MP/625.gsc new file mode 100644 index 0000000..3c9cfeb --- /dev/null +++ b/MW3/PC/MP/625.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 625.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:11 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_russian_military_lmg_a"); + self attach("head_russian_military_b","",1); + self.var_1E5A = "head_russian_military_b"; + self setviewmodel("viewhands_russian_a"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_russian_military_lmg_a"); + precachemodel("head_russian_military_b"); + precachemodel("viewhands_russian_a"); +} \ No newline at end of file diff --git a/MW3/PC/MP/626.gsc b/MW3/PC/MP/626.gsc new file mode 100644 index 0000000..f5c5dbe --- /dev/null +++ b/MW3/PC/MP/626.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 626.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:11 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_russian_military_shotgun_a"); + self attach("head_russian_military_dd","",1); + self.var_1E5A = "head_russian_military_dd"; + self setviewmodel("viewhands_russian_a"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_russian_military_shotgun_a"); + precachemodel("head_russian_military_dd"); + precachemodel("viewhands_russian_a"); +} \ No newline at end of file diff --git a/MW3/PC/MP/627.gsc b/MW3/PC/MP/627.gsc new file mode 100644 index 0000000..2b8d990 --- /dev/null +++ b/MW3/PC/MP/627.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 627.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:11 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_russian_military_smg_a"); + self attach("head_russian_military_f","",1); + self.var_1E5A = "head_russian_military_f"; + self setviewmodel("viewhands_russian_a"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_russian_military_smg_a"); + precachemodel("head_russian_military_f"); + precachemodel("viewhands_russian_a"); +} \ No newline at end of file diff --git a/MW3/PC/MP/628.gsc b/MW3/PC/MP/628.gsc new file mode 100644 index 0000000..e3b173e --- /dev/null +++ b/MW3/PC/MP/628.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 628.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:12 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_opforce_russian_urban_sniper"); + self attach("head_opforce_russian_urban_sniper","",1); + self.var_1E5A = "head_opforce_russian_urban_sniper"; + self setviewmodel("viewhands_russian_a"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_opforce_russian_urban_sniper"); + precachemodel("head_opforce_russian_urban_sniper"); + precachemodel("viewhands_russian_a"); +} \ No newline at end of file diff --git a/MW3/PC/MP/629.gsc b/MW3/PC/MP/629.gsc new file mode 100644 index 0000000..59baa94 --- /dev/null +++ b/MW3/PC/MP/629.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 629.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:12 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_russian_military_assault_a_woodland"); + self attach("head_russian_military_b","",1); + self.var_1E5A = "head_russian_military_b"; + self setviewmodel("viewhands_russian_c"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_russian_military_assault_a_woodland"); + precachemodel("head_russian_military_b"); + precachemodel("viewhands_russian_c"); +} \ No newline at end of file diff --git a/MW3/PC/MP/651.gsc b/MW3/PC/MP/651.gsc new file mode 100644 index 0000000..f9a5021 --- /dev/null +++ b/MW3/PC/MP/651.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 651.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:12 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_russian_military_lmg_a_woodland"); + self attach("head_russian_military_a","",1); + self.var_1E5A = "head_russian_military_a"; + self setviewmodel("viewhands_russian_c"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_russian_military_lmg_a_woodland"); + precachemodel("head_russian_military_a"); + precachemodel("viewhands_russian_c"); +} \ No newline at end of file diff --git a/MW3/PC/MP/652.gsc b/MW3/PC/MP/652.gsc new file mode 100644 index 0000000..e9c6327 --- /dev/null +++ b/MW3/PC/MP/652.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 652.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:13 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_russian_military_shotgun_a_woodland"); + self attach("head_russian_military_cc","",1); + self.var_1E5A = "head_russian_military_cc"; + self setviewmodel("viewhands_russian_c"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_russian_military_shotgun_a_woodland"); + precachemodel("head_russian_military_cc"); + precachemodel("viewhands_russian_c"); +} \ No newline at end of file diff --git a/MW3/PC/MP/653.gsc b/MW3/PC/MP/653.gsc new file mode 100644 index 0000000..87322d8 --- /dev/null +++ b/MW3/PC/MP/653.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 653.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:13 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_russian_military_smg_a_woodland"); + self attach("head_russian_military_e","",1); + self.var_1E5A = "head_russian_military_e"; + self setviewmodel("viewhands_russian_c"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_russian_military_smg_a_woodland"); + precachemodel("head_russian_military_e"); + precachemodel("viewhands_russian_c"); +} \ No newline at end of file diff --git a/MW3/PC/MP/654.gsc b/MW3/PC/MP/654.gsc new file mode 100644 index 0000000..0289893 --- /dev/null +++ b/MW3/PC/MP/654.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 654.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:13 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_opforce_russian_woodland_sniper"); + self attach("head_opforce_russian_woodland_sniper","",1); + self.var_1E5A = "head_opforce_russian_woodland_sniper"; + self setviewmodel("viewhands_russian_c"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_opforce_russian_woodland_sniper"); + precachemodel("head_opforce_russian_woodland_sniper"); + precachemodel("viewhands_russian_c"); +} \ No newline at end of file diff --git a/MW3/PC/MP/655.gsc b/MW3/PC/MP/655.gsc new file mode 100644 index 0000000..84917e7 --- /dev/null +++ b/MW3/PC/MP/655.gsc @@ -0,0 +1,16 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 655.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:14 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + var_00[0] = "head_africa_militia_a_mp"; + return var_7B; +} \ No newline at end of file diff --git a/MW3/PC/MP/656.gsc b/MW3/PC/MP/656.gsc new file mode 100644 index 0000000..9d88597 --- /dev/null +++ b/MW3/PC/MP/656.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 656.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:14 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_africa_militia_assault_a"); + lib_0144::func_1E57("alias_africa_militia_heads_mp",lib_028F::main()); + self setviewmodel("viewhands_african_militia"); + self.voice = "african"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_africa_militia_assault_a"); + lib_0144::func_1E56(lib_028F::main()); + precachemodel("viewhands_african_militia"); +} \ No newline at end of file diff --git a/MW3/PC/MP/660.gsc b/MW3/PC/MP/660.gsc new file mode 100644 index 0000000..2df3047 --- /dev/null +++ b/MW3/PC/MP/660.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 660.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:14 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_africa_militia_lmg_b"); + lib_0144::func_1E57("alias_africa_militia_heads_mp",lib_028F::main()); + self setviewmodel("viewhands_african_militia"); + self.voice = "african"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_africa_militia_lmg_b"); + lib_0144::func_1E56(lib_028F::main()); + precachemodel("viewhands_african_militia"); +} \ No newline at end of file diff --git a/MW3/PC/MP/662.gsc b/MW3/PC/MP/662.gsc new file mode 100644 index 0000000..8e23d29 --- /dev/null +++ b/MW3/PC/MP/662.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 662.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:15 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_africa_militia_shotgun_b"); + lib_0144::func_1E57("alias_africa_militia_heads_mp",lib_028F::main()); + self setviewmodel("viewhands_african_militia"); + self.voice = "african"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_africa_militia_shotgun_b"); + lib_0144::func_1E56(lib_028F::main()); + precachemodel("viewhands_african_militia"); +} \ No newline at end of file diff --git a/MW3/PC/MP/664.gsc b/MW3/PC/MP/664.gsc new file mode 100644 index 0000000..c6a8739 --- /dev/null +++ b/MW3/PC/MP/664.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 664.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:15 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_africa_militia_smg_b"); + lib_0144::func_1E57("alias_africa_militia_heads_mp",lib_028F::main()); + self setviewmodel("viewhands_african_militia"); + self.voice = "african"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_africa_militia_smg_b"); + lib_0144::func_1E56(lib_028F::main()); + precachemodel("viewhands_african_militia"); +} \ No newline at end of file diff --git a/MW3/PC/MP/666.gsc b/MW3/PC/MP/666.gsc new file mode 100644 index 0000000..540f9a8 --- /dev/null +++ b/MW3/PC/MP/666.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 666.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:15 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_opforce_africa_militia_sniper"); + self attach("head_opforce_africa_sniper","",1); + self.var_1E5A = "head_opforce_africa_sniper"; + self setviewmodel("viewhands_african_militia"); + self.voice = "african"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_opforce_africa_militia_sniper"); + precachemodel("head_opforce_africa_sniper"); + precachemodel("viewhands_african_militia"); +} \ No newline at end of file diff --git a/MW3/PC/MP/667.gsc b/MW3/PC/MP/667.gsc new file mode 100644 index 0000000..cea1475 --- /dev/null +++ b/MW3/PC/MP/667.gsc @@ -0,0 +1,16 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 667.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:16 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + var_00[0] = "head_henchmen_a"; + return var_7B; +} \ No newline at end of file diff --git a/MW3/PC/MP/668.gsc b/MW3/PC/MP/668.gsc new file mode 100644 index 0000000..a5bd2eb --- /dev/null +++ b/MW3/PC/MP/668.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 668.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:16 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_henchmen_assault_a"); + lib_0144::func_1E57("alias_henchmen_heads_mp",lib_029B::main()); + self setviewmodel("viewhands_henchmen"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_henchmen_assault_a"); + lib_0144::func_1E56(lib_029B::main()); + precachemodel("viewhands_henchmen"); +} \ No newline at end of file diff --git a/MW3/PC/MP/669.gsc b/MW3/PC/MP/669.gsc new file mode 100644 index 0000000..a5912dd --- /dev/null +++ b/MW3/PC/MP/669.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 669.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:16 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_henchmen_assault_b"); + lib_0144::func_1E57("alias_henchmen_heads_mp",lib_029B::main()); + self setviewmodel("viewhands_henchmen"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_henchmen_assault_b"); + lib_0144::func_1E56(lib_029B::main()); + precachemodel("viewhands_henchmen"); +} \ No newline at end of file diff --git a/MW3/PC/MP/670.gsc b/MW3/PC/MP/670.gsc new file mode 100644 index 0000000..a105885 --- /dev/null +++ b/MW3/PC/MP/670.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 670.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:17 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_henchmen_assault_c"); + lib_0144::func_1E57("alias_henchmen_heads_mp",lib_029B::main()); + self setviewmodel("viewhands_henchmen"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_henchmen_assault_c"); + lib_0144::func_1E56(lib_029B::main()); + precachemodel("viewhands_henchmen"); +} \ No newline at end of file diff --git a/MW3/PC/MP/671.gsc b/MW3/PC/MP/671.gsc new file mode 100644 index 0000000..15552ee --- /dev/null +++ b/MW3/PC/MP/671.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 671.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:17 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_henchmen_assault_d"); + lib_0144::func_1E57("alias_henchmen_heads_mp",lib_029B::main()); + self setviewmodel("viewhands_henchmen"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_henchmen_assault_d"); + lib_0144::func_1E56(lib_029B::main()); + precachemodel("viewhands_henchmen"); +} \ No newline at end of file diff --git a/MW3/PC/MP/672.gsc b/MW3/PC/MP/672.gsc new file mode 100644 index 0000000..1d414ce --- /dev/null +++ b/MW3/PC/MP/672.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 672.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:17 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_henchmen_lmg_a"); + lib_0144::func_1E57("alias_henchmen_heads_mp",lib_029B::main()); + self setviewmodel("viewhands_henchmen"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_henchmen_lmg_a"); + lib_0144::func_1E56(lib_029B::main()); + precachemodel("viewhands_henchmen"); +} \ No newline at end of file diff --git a/MW3/PC/MP/673.gsc b/MW3/PC/MP/673.gsc new file mode 100644 index 0000000..263b6f9 --- /dev/null +++ b/MW3/PC/MP/673.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 673.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:18 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_henchmen_lmg_b"); + lib_0144::func_1E57("alias_henchmen_heads_mp",lib_029B::main()); + self setviewmodel("viewhands_henchmen"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_henchmen_lmg_b"); + lib_0144::func_1E56(lib_029B::main()); + precachemodel("viewhands_henchmen"); +} \ No newline at end of file diff --git a/MW3/PC/MP/674.gsc b/MW3/PC/MP/674.gsc new file mode 100644 index 0000000..883afcb --- /dev/null +++ b/MW3/PC/MP/674.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 674.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:18 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_henchmen_shotgun_a"); + lib_0144::func_1E57("alias_henchmen_heads_mp",lib_029B::main()); + self setviewmodel("viewhands_henchmen"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_henchmen_shotgun_a"); + lib_0144::func_1E56(lib_029B::main()); + precachemodel("viewhands_henchmen"); +} \ No newline at end of file diff --git a/MW3/PC/MP/675.gsc b/MW3/PC/MP/675.gsc new file mode 100644 index 0000000..cbc450d --- /dev/null +++ b/MW3/PC/MP/675.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 675.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:18 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_henchmen_shotgun_b"); + lib_0144::func_1E57("alias_henchmen_heads_mp",lib_029B::main()); + self setviewmodel("viewhands_henchmen"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_henchmen_shotgun_b"); + lib_0144::func_1E56(lib_029B::main()); + precachemodel("viewhands_henchmen"); +} \ No newline at end of file diff --git a/MW3/PC/MP/690.gsc b/MW3/PC/MP/690.gsc new file mode 100644 index 0000000..62a6c82 --- /dev/null +++ b/MW3/PC/MP/690.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 690.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:19 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_pmc_africa_smg_a"); + lib_0144::func_1E57("alias_pmc_africa_heads",lib_021D::main()); + self setviewmodel("viewhands_pmc"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_pmc_africa_smg_a"); + lib_0144::func_1E56(lib_021D::main()); + precachemodel("viewhands_pmc"); +} \ No newline at end of file diff --git a/MW3/PC/MP/709.gsc b/MW3/PC/MP/709.gsc new file mode 100644 index 0000000..0bc366e --- /dev/null +++ b/MW3/PC/MP/709.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 709.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:25 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_henchmen_smg_a"); + lib_0144::func_1E57("alias_henchmen_heads_mp",lib_029B::main()); + self setviewmodel("viewhands_henchmen"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_henchmen_smg_a"); + lib_0144::func_1E56(lib_029B::main()); + precachemodel("viewhands_henchmen"); +} \ No newline at end of file diff --git a/MW3/PC/MP/710.gsc b/MW3/PC/MP/710.gsc new file mode 100644 index 0000000..ca40778 --- /dev/null +++ b/MW3/PC/MP/710.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 710.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:25 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_henchmen_smg_b"); + lib_0144::func_1E57("alias_henchmen_heads_mp",lib_029B::main()); + self setviewmodel("viewhands_henchmen"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_henchmen_smg_b"); + lib_0144::func_1E56(lib_029B::main()); + precachemodel("viewhands_henchmen"); +} \ No newline at end of file diff --git a/MW3/PC/MP/711.gsc b/MW3/PC/MP/711.gsc new file mode 100644 index 0000000..1b3c67d --- /dev/null +++ b/MW3/PC/MP/711.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 711.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:26 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_opforce_henchmen_sniper"); + self attach("head_opforce_henchmen_sniper","",1); + self.var_1E5A = "head_opforce_henchmen_sniper"; + self setviewmodel("viewhands_henchmen"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_opforce_henchmen_sniper"); + precachemodel("head_opforce_henchmen_sniper"); + precachemodel("viewhands_henchmen"); +} \ No newline at end of file diff --git a/MW3/PC/MP/713.gsc b/MW3/PC/MP/713.gsc new file mode 100644 index 0000000..c895267 --- /dev/null +++ b/MW3/PC/MP/713.gsc @@ -0,0 +1,21 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 713.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:26 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_0194::main(); +} + +//Function Number: 2 +precache() +{ + lib_0194::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/714.gsc b/MW3/PC/MP/714.gsc new file mode 100644 index 0000000..b60546b --- /dev/null +++ b/MW3/PC/MP/714.gsc @@ -0,0 +1,21 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 714.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:26 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_0195::main(); +} + +//Function Number: 2 +precache() +{ + lib_0195::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/715.gsc b/MW3/PC/MP/715.gsc new file mode 100644 index 0000000..00e3294 --- /dev/null +++ b/MW3/PC/MP/715.gsc @@ -0,0 +1,21 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 715.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:27 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_0196::main(); +} + +//Function Number: 2 +precache() +{ + lib_0196::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/716.gsc b/MW3/PC/MP/716.gsc new file mode 100644 index 0000000..30dc3a3 --- /dev/null +++ b/MW3/PC/MP/716.gsc @@ -0,0 +1,21 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 716.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:27 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_0197::main(); +} + +//Function Number: 2 +precache() +{ + lib_0197::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/717.gsc b/MW3/PC/MP/717.gsc new file mode 100644 index 0000000..1c23464 --- /dev/null +++ b/MW3/PC/MP/717.gsc @@ -0,0 +1,21 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 717.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:27 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_0198::main(); +} + +//Function Number: 2 +precache() +{ + lib_0198::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/718.gsc b/MW3/PC/MP/718.gsc new file mode 100644 index 0000000..531ac53 --- /dev/null +++ b/MW3/PC/MP/718.gsc @@ -0,0 +1,21 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 718.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:28 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_0199::main(); +} + +//Function Number: 2 +precache() +{ + lib_0199::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/719.gsc b/MW3/PC/MP/719.gsc new file mode 100644 index 0000000..4563917 --- /dev/null +++ b/MW3/PC/MP/719.gsc @@ -0,0 +1,21 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 719.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:28 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_019A::main(); +} + +//Function Number: 2 +precache() +{ + lib_019A::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/720.gsc b/MW3/PC/MP/720.gsc new file mode 100644 index 0000000..0add9c2 --- /dev/null +++ b/MW3/PC/MP/720.gsc @@ -0,0 +1,21 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 720.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:28 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_019B::main(); +} + +//Function Number: 2 +precache() +{ + lib_019B::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/721.gsc b/MW3/PC/MP/721.gsc new file mode 100644 index 0000000..b9278e1 --- /dev/null +++ b/MW3/PC/MP/721.gsc @@ -0,0 +1,21 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 721.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:29 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_019C::main(); +} + +//Function Number: 2 +precache() +{ + lib_019C::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/722.gsc b/MW3/PC/MP/722.gsc new file mode 100644 index 0000000..9faa9be --- /dev/null +++ b/MW3/PC/MP/722.gsc @@ -0,0 +1,41 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 722.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:30 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + switch(lib_0144::func_1E63(4)) + { + case 0: + lib_01C3::main(); + break; + + case 1: + lib_01C4::main(); + break; + + case 2: + lib_01C5::main(); + break; + + case 3: + lib_01C6::main(); + break; + } +} + +//Function Number: 2 +precache() +{ + lib_01C3::precache(); + lib_01C4::precache(); + lib_01C5::precache(); + lib_01C6::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/723.gsc b/MW3/PC/MP/723.gsc new file mode 100644 index 0000000..dbba56a --- /dev/null +++ b/MW3/PC/MP/723.gsc @@ -0,0 +1,31 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 723.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:30 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + switch(lib_0144::func_1E63(2)) + { + case 0: + lib_01C7::main(); + break; + + case 1: + lib_01C8::main(); + break; + } +} + +//Function Number: 2 +precache() +{ + lib_01C7::precache(); + lib_01C8::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/724.gsc b/MW3/PC/MP/724.gsc new file mode 100644 index 0000000..b0357bb --- /dev/null +++ b/MW3/PC/MP/724.gsc @@ -0,0 +1,31 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 724.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:30 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + switch(lib_0144::func_1E63(2)) + { + case 0: + lib_01C9::main(); + break; + + case 1: + lib_01CA::main(); + break; + } +} + +//Function Number: 2 +precache() +{ + lib_01C9::precache(); + lib_01CA::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/725.gsc b/MW3/PC/MP/725.gsc new file mode 100644 index 0000000..4323f51 --- /dev/null +++ b/MW3/PC/MP/725.gsc @@ -0,0 +1,21 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 725.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:30 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_01E8::main(); +} + +//Function Number: 2 +precache() +{ + lib_01E8::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/726.gsc b/MW3/PC/MP/726.gsc new file mode 100644 index 0000000..c23d98a --- /dev/null +++ b/MW3/PC/MP/726.gsc @@ -0,0 +1,21 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 726.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:31 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_01C8::main(); +} + +//Function Number: 2 +precache() +{ + lib_01C8::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/727.gsc b/MW3/PC/MP/727.gsc new file mode 100644 index 0000000..6833b99 --- /dev/null +++ b/MW3/PC/MP/727.gsc @@ -0,0 +1,21 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 727.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:31 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_0220::main(); +} + +//Function Number: 2 +precache() +{ + lib_0220::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/728.gsc b/MW3/PC/MP/728.gsc new file mode 100644 index 0000000..5e3fcc4 --- /dev/null +++ b/MW3/PC/MP/728.gsc @@ -0,0 +1,21 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 728.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:31 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_01EB::main(); +} + +//Function Number: 2 +precache() +{ + lib_01EB::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/729.gsc b/MW3/PC/MP/729.gsc new file mode 100644 index 0000000..f6c0be9 --- /dev/null +++ b/MW3/PC/MP/729.gsc @@ -0,0 +1,21 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 729.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:32 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_0214::main(); +} + +//Function Number: 2 +precache() +{ + lib_0214::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/730.gsc b/MW3/PC/MP/730.gsc new file mode 100644 index 0000000..df1b08e --- /dev/null +++ b/MW3/PC/MP/730.gsc @@ -0,0 +1,21 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 730.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:32 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_0215::main(); +} + +//Function Number: 2 +precache() +{ + lib_0215::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/731.gsc b/MW3/PC/MP/731.gsc new file mode 100644 index 0000000..f080604 --- /dev/null +++ b/MW3/PC/MP/731.gsc @@ -0,0 +1,21 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 731.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:32 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_0216::main(); +} + +//Function Number: 2 +precache() +{ + lib_0216::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/732.gsc b/MW3/PC/MP/732.gsc new file mode 100644 index 0000000..eaed700 --- /dev/null +++ b/MW3/PC/MP/732.gsc @@ -0,0 +1,21 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 732.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:33 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_0217::main(); +} + +//Function Number: 2 +precache() +{ + lib_0217::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/733.gsc b/MW3/PC/MP/733.gsc new file mode 100644 index 0000000..9aab7ea --- /dev/null +++ b/MW3/PC/MP/733.gsc @@ -0,0 +1,21 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 733.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:33 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_0218::main(); +} + +//Function Number: 2 +precache() +{ + lib_0218::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/734.gsc b/MW3/PC/MP/734.gsc new file mode 100644 index 0000000..1e9a6f2 --- /dev/null +++ b/MW3/PC/MP/734.gsc @@ -0,0 +1,21 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 734.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:34 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_0219::main(); +} + +//Function Number: 2 +precache() +{ + lib_0219::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/735.gsc b/MW3/PC/MP/735.gsc new file mode 100644 index 0000000..b3534e0 --- /dev/null +++ b/MW3/PC/MP/735.gsc @@ -0,0 +1,21 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 735.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:34 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_021A::main(); +} + +//Function Number: 2 +precache() +{ + lib_021A::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/736.gsc b/MW3/PC/MP/736.gsc new file mode 100644 index 0000000..9924ce8 --- /dev/null +++ b/MW3/PC/MP/736.gsc @@ -0,0 +1,21 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 736.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:34 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_021B::main(); +} + +//Function Number: 2 +precache() +{ + lib_021B::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/767.gsc b/MW3/PC/MP/767.gsc new file mode 100644 index 0000000..ccf89be --- /dev/null +++ b/MW3/PC/MP/767.gsc @@ -0,0 +1,21 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 767.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:35 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_0217::main(); +} + +//Function Number: 2 +precache() +{ + lib_0217::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/768.gsc b/MW3/PC/MP/768.gsc new file mode 100644 index 0000000..92815d0 --- /dev/null +++ b/MW3/PC/MP/768.gsc @@ -0,0 +1,21 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 768.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:35 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_021C::main(); +} + +//Function Number: 2 +precache() +{ + lib_021C::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/769.gsc b/MW3/PC/MP/769.gsc new file mode 100644 index 0000000..44672af --- /dev/null +++ b/MW3/PC/MP/769.gsc @@ -0,0 +1,31 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 769.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:35 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + switch(lib_0144::func_1E63(2)) + { + case 0: + lib_021E::main(); + break; + + case 1: + lib_021F::main(); + break; + } +} + +//Function Number: 2 +precache() +{ + lib_021E::precache(); + lib_021F::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/770.gsc b/MW3/PC/MP/770.gsc new file mode 100644 index 0000000..6761904 --- /dev/null +++ b/MW3/PC/MP/770.gsc @@ -0,0 +1,31 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 770.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:36 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + switch(lib_0144::func_1E63(2)) + { + case 0: + lib_0221::main(); + break; + + case 1: + lib_0222::main(); + break; + } +} + +//Function Number: 2 +precache() +{ + lib_0221::precache(); + lib_0222::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/771.gsc b/MW3/PC/MP/771.gsc new file mode 100644 index 0000000..5f6247d --- /dev/null +++ b/MW3/PC/MP/771.gsc @@ -0,0 +1,31 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 771.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:36 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + switch(lib_0144::func_1E63(2)) + { + case 0: + lib_02B2::main(); + break; + + case 1: + lib_0223::main(); + break; + } +} + +//Function Number: 2 +precache() +{ + lib_02B2::precache(); + lib_0223::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/772.gsc b/MW3/PC/MP/772.gsc new file mode 100644 index 0000000..49005c7 --- /dev/null +++ b/MW3/PC/MP/772.gsc @@ -0,0 +1,21 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 772.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:36 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_0224::main(); +} + +//Function Number: 2 +precache() +{ + lib_0224::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/773.gsc b/MW3/PC/MP/773.gsc new file mode 100644 index 0000000..65938c1 --- /dev/null +++ b/MW3/PC/MP/773.gsc @@ -0,0 +1,21 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 773.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:37 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_024F::main(); +} + +//Function Number: 2 +precache() +{ + lib_024F::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/774.gsc b/MW3/PC/MP/774.gsc new file mode 100644 index 0000000..8041b6f --- /dev/null +++ b/MW3/PC/MP/774.gsc @@ -0,0 +1,21 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 774.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:37 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_0221::main(); +} + +//Function Number: 2 +precache() +{ + lib_0221::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/775.gsc b/MW3/PC/MP/775.gsc new file mode 100644 index 0000000..877cf13 --- /dev/null +++ b/MW3/PC/MP/775.gsc @@ -0,0 +1,21 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 775.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:37 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_0250::main(); +} + +//Function Number: 2 +precache() +{ + lib_0250::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/776.gsc b/MW3/PC/MP/776.gsc new file mode 100644 index 0000000..21b9754 --- /dev/null +++ b/MW3/PC/MP/776.gsc @@ -0,0 +1,21 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 776.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:38 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_0251::main(); +} + +//Function Number: 2 +precache() +{ + lib_0251::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/777.gsc b/MW3/PC/MP/777.gsc new file mode 100644 index 0000000..0d454dd --- /dev/null +++ b/MW3/PC/MP/777.gsc @@ -0,0 +1,21 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 777.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:38 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_0252::main(); +} + +//Function Number: 2 +precache() +{ + lib_0252::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/778.gsc b/MW3/PC/MP/778.gsc new file mode 100644 index 0000000..4cb2dbf --- /dev/null +++ b/MW3/PC/MP/778.gsc @@ -0,0 +1,21 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 778.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:38 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_0253::main(); +} + +//Function Number: 2 +precache() +{ + lib_0253::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/779.gsc b/MW3/PC/MP/779.gsc new file mode 100644 index 0000000..c54b97b --- /dev/null +++ b/MW3/PC/MP/779.gsc @@ -0,0 +1,21 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 779.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:39 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_0254::main(); +} + +//Function Number: 2 +precache() +{ + lib_0254::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/780.gsc b/MW3/PC/MP/780.gsc new file mode 100644 index 0000000..03a56d4 --- /dev/null +++ b/MW3/PC/MP/780.gsc @@ -0,0 +1,21 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 780.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:39 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_0251::main(); +} + +//Function Number: 2 +precache() +{ + lib_0251::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/781.gsc b/MW3/PC/MP/781.gsc new file mode 100644 index 0000000..bcd994a --- /dev/null +++ b/MW3/PC/MP/781.gsc @@ -0,0 +1,21 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 781.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:39 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_0255::main(); +} + +//Function Number: 2 +precache() +{ + lib_0255::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/782.gsc b/MW3/PC/MP/782.gsc new file mode 100644 index 0000000..98fbd01 --- /dev/null +++ b/MW3/PC/MP/782.gsc @@ -0,0 +1,21 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 782.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:40 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_0257::main(); +} + +//Function Number: 2 +precache() +{ + lib_0257::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/783.gsc b/MW3/PC/MP/783.gsc new file mode 100644 index 0000000..e7680aa --- /dev/null +++ b/MW3/PC/MP/783.gsc @@ -0,0 +1,21 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 783.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:40 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_0258::main(); +} + +//Function Number: 2 +precache() +{ + lib_0258::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/784.gsc b/MW3/PC/MP/784.gsc new file mode 100644 index 0000000..bcd98e2 --- /dev/null +++ b/MW3/PC/MP/784.gsc @@ -0,0 +1,21 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 784.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:41 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_026D::main(); +} + +//Function Number: 2 +precache() +{ + lib_026D::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/785.gsc b/MW3/PC/MP/785.gsc new file mode 100644 index 0000000..516b55f --- /dev/null +++ b/MW3/PC/MP/785.gsc @@ -0,0 +1,21 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 785.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:41 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_026E::main(); +} + +//Function Number: 2 +precache() +{ + lib_026E::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/786.gsc b/MW3/PC/MP/786.gsc new file mode 100644 index 0000000..a6d4d44 --- /dev/null +++ b/MW3/PC/MP/786.gsc @@ -0,0 +1,21 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 786.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:41 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_026F::main(); +} + +//Function Number: 2 +precache() +{ + lib_026F::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/787.gsc b/MW3/PC/MP/787.gsc new file mode 100644 index 0000000..8f4c5bf --- /dev/null +++ b/MW3/PC/MP/787.gsc @@ -0,0 +1,21 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 787.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:42 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_0258::main(); +} + +//Function Number: 2 +precache() +{ + lib_0258::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/788.gsc b/MW3/PC/MP/788.gsc new file mode 100644 index 0000000..bed5873 --- /dev/null +++ b/MW3/PC/MP/788.gsc @@ -0,0 +1,21 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 788.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:42 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_0270::main(); +} + +//Function Number: 2 +precache() +{ + lib_0270::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/789.gsc b/MW3/PC/MP/789.gsc new file mode 100644 index 0000000..9a31ec7 --- /dev/null +++ b/MW3/PC/MP/789.gsc @@ -0,0 +1,21 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 789.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:42 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_0271::main(); +} + +//Function Number: 2 +precache() +{ + lib_0271::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/790.gsc b/MW3/PC/MP/790.gsc new file mode 100644 index 0000000..1fed63c --- /dev/null +++ b/MW3/PC/MP/790.gsc @@ -0,0 +1,21 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 790.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:43 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_0272::main(); +} + +//Function Number: 2 +precache() +{ + lib_0272::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/791.gsc b/MW3/PC/MP/791.gsc new file mode 100644 index 0000000..892aeb6 --- /dev/null +++ b/MW3/PC/MP/791.gsc @@ -0,0 +1,21 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 791.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:43 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_0273::main(); +} + +//Function Number: 2 +precache() +{ + lib_0273::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/792.gsc b/MW3/PC/MP/792.gsc new file mode 100644 index 0000000..21375ef --- /dev/null +++ b/MW3/PC/MP/792.gsc @@ -0,0 +1,21 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 792.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:43 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_0274::main(); +} + +//Function Number: 2 +precache() +{ + lib_0274::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/793.gsc b/MW3/PC/MP/793.gsc new file mode 100644 index 0000000..d281b67 --- /dev/null +++ b/MW3/PC/MP/793.gsc @@ -0,0 +1,21 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 793.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:44 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_0271::main(); +} + +//Function Number: 2 +precache() +{ + lib_0271::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/794.gsc b/MW3/PC/MP/794.gsc new file mode 100644 index 0000000..eb1dfbe --- /dev/null +++ b/MW3/PC/MP/794.gsc @@ -0,0 +1,21 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 794.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:44 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_0275::main(); +} + +//Function Number: 2 +precache() +{ + lib_0275::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/795.gsc b/MW3/PC/MP/795.gsc new file mode 100644 index 0000000..96b5109 --- /dev/null +++ b/MW3/PC/MP/795.gsc @@ -0,0 +1,21 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 795.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:44 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_028B::main(); +} + +//Function Number: 2 +precache() +{ + lib_028B::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/796.gsc b/MW3/PC/MP/796.gsc new file mode 100644 index 0000000..2255a28 --- /dev/null +++ b/MW3/PC/MP/796.gsc @@ -0,0 +1,21 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 796.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:45 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_028C::main(); +} + +//Function Number: 2 +precache() +{ + lib_028C::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/819.gsc b/MW3/PC/MP/819.gsc new file mode 100644 index 0000000..3642386 --- /dev/null +++ b/MW3/PC/MP/819.gsc @@ -0,0 +1,21 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 819.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:45 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_028D::main(); +} + +//Function Number: 2 +precache() +{ + lib_028D::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/820.gsc b/MW3/PC/MP/820.gsc new file mode 100644 index 0000000..33172bd --- /dev/null +++ b/MW3/PC/MP/820.gsc @@ -0,0 +1,21 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 820.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:45 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_028E::main(); +} + +//Function Number: 2 +precache() +{ + lib_028E::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/821.gsc b/MW3/PC/MP/821.gsc new file mode 100644 index 0000000..df394ed --- /dev/null +++ b/MW3/PC/MP/821.gsc @@ -0,0 +1,21 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 821.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:46 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_028B::main(); +} + +//Function Number: 2 +precache() +{ + lib_028B::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/822.gsc b/MW3/PC/MP/822.gsc new file mode 100644 index 0000000..88e6b96 --- /dev/null +++ b/MW3/PC/MP/822.gsc @@ -0,0 +1,21 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 822.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:46 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_0290::main(); +} + +//Function Number: 2 +precache() +{ + lib_0290::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/823.gsc b/MW3/PC/MP/823.gsc new file mode 100644 index 0000000..c4130d6 --- /dev/null +++ b/MW3/PC/MP/823.gsc @@ -0,0 +1,21 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 823.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:46 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_0294::main(); +} + +//Function Number: 2 +precache() +{ + lib_0294::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/824.gsc b/MW3/PC/MP/824.gsc new file mode 100644 index 0000000..a922b11 --- /dev/null +++ b/MW3/PC/MP/824.gsc @@ -0,0 +1,21 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 824.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:47 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_0296::main(); +} + +//Function Number: 2 +precache() +{ + lib_0296::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/825.gsc b/MW3/PC/MP/825.gsc new file mode 100644 index 0000000..7879f4f --- /dev/null +++ b/MW3/PC/MP/825.gsc @@ -0,0 +1,21 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 825.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:47 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_0298::main(); +} + +//Function Number: 2 +precache() +{ + lib_0298::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/826.gsc b/MW3/PC/MP/826.gsc new file mode 100644 index 0000000..58d7ed8 --- /dev/null +++ b/MW3/PC/MP/826.gsc @@ -0,0 +1,21 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 826.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:47 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_029A::main(); +} + +//Function Number: 2 +precache() +{ + lib_029A::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/827.gsc b/MW3/PC/MP/827.gsc new file mode 100644 index 0000000..d428de2 --- /dev/null +++ b/MW3/PC/MP/827.gsc @@ -0,0 +1,21 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 827.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:48 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_0298::main(); +} + +//Function Number: 2 +precache() +{ + lib_0298::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/828.gsc b/MW3/PC/MP/828.gsc new file mode 100644 index 0000000..b2d79a4 --- /dev/null +++ b/MW3/PC/MP/828.gsc @@ -0,0 +1,41 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 828.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:48 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + switch(lib_0144::func_1E63(4)) + { + case 0: + lib_029C::main(); + break; + + case 1: + lib_029D::main(); + break; + + case 2: + lib_029E::main(); + break; + + case 3: + lib_029F::main(); + break; + } +} + +//Function Number: 2 +precache() +{ + lib_029C::precache(); + lib_029D::precache(); + lib_029E::precache(); + lib_029F::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/829.gsc b/MW3/PC/MP/829.gsc new file mode 100644 index 0000000..a59672c --- /dev/null +++ b/MW3/PC/MP/829.gsc @@ -0,0 +1,21 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 829.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:48 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_01E9::main(); +} + +//Function Number: 2 +precache() +{ + lib_01E9::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/830.gsc b/MW3/PC/MP/830.gsc new file mode 100644 index 0000000..8ff4130 --- /dev/null +++ b/MW3/PC/MP/830.gsc @@ -0,0 +1,31 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 830.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:49 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + switch(lib_0144::func_1E63(2)) + { + case 0: + lib_02A0::main(); + break; + + case 1: + lib_02A1::main(); + break; + } +} + +//Function Number: 2 +precache() +{ + lib_02A0::precache(); + lib_02A1::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/831.gsc b/MW3/PC/MP/831.gsc new file mode 100644 index 0000000..3f95d1a --- /dev/null +++ b/MW3/PC/MP/831.gsc @@ -0,0 +1,31 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 831.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:49 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + switch(lib_0144::func_1E63(2)) + { + case 0: + lib_02A2::main(); + break; + + case 1: + lib_02A3::main(); + break; + } +} + +//Function Number: 2 +precache() +{ + lib_02A2::precache(); + lib_02A3::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/832.gsc b/MW3/PC/MP/832.gsc new file mode 100644 index 0000000..759795e --- /dev/null +++ b/MW3/PC/MP/832.gsc @@ -0,0 +1,31 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 832.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:49 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + switch(lib_0144::func_1E63(2)) + { + case 0: + lib_02C5::main(); + break; + + case 1: + lib_02C6::main(); + break; + } +} + +//Function Number: 2 +precache() +{ + lib_02C5::precache(); + lib_02C6::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/833.gsc b/MW3/PC/MP/833.gsc new file mode 100644 index 0000000..3447111 --- /dev/null +++ b/MW3/PC/MP/833.gsc @@ -0,0 +1,21 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 833.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:50 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_02C7::main(); +} + +//Function Number: 2 +precache() +{ + lib_02C7::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/834.gsc b/MW3/PC/MP/834.gsc new file mode 100644 index 0000000..87feac8 --- /dev/null +++ b/MW3/PC/MP/834.gsc @@ -0,0 +1,21 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 834.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:50 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_02A1::main(); +} + +//Function Number: 2 +precache() +{ + lib_02A1::precache(); +} \ No newline at end of file diff --git a/MW3/PC/MP/840.gsc b/MW3/PC/MP/840.gsc new file mode 100644 index 0000000..6e058c8 --- /dev/null +++ b/MW3/PC/MP/840.gsc @@ -0,0 +1,167 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 840.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 9 + * Decompile Time: 1 ms + * Timestamp: 10/27/2023 2:16:50 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + precacheshellshock("flashbang_mp"); + thread onplayerconnect(); +} + +//Function Number: 2 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_00 thread onplayerspawned(); + } +} + +//Function Number: 3 +onplayerspawned() +{ + self endon("disconnect"); + for(;;) + { + self waittill("spawned_player"); + thread func_2C55(); + } +} + +//Function Number: 4 +func_2C55() +{ + self endon("death"); + self endon("disconnect"); + self endon("faux_spawn"); + self.empendtime = 0; + for(;;) + { + self waittill("emp_grenaded",var_00); + if(!isalive(self)) + { + continue; + } + + if(isdefined(self.usingremote)) + { + continue; + } + + if(maps\mp\_utility::_hasperk("specialty_empimmune")) + { + continue; + } + + var_01 = 1; + var_02 = 0; + if(level.teambased && isdefined(var_00) && isdefined(var_00.pers["team"]) && var_00.pers["team"] == self.pers["team"] && var_00 != self) + { + if(level.friendlyfire == 0) + { + continue; + } + else if(level.friendlyfire == 1) + { + var_02 = 0; + var_01 = 1; + } + else if(level.friendlyfire == 2) + { + var_01 = 0; + var_02 = 1; + } + else if(level.friendlyfire == 3) + { + var_02 = 1; + var_01 = 1; + } + } + else if(isdefined(var_00)) + { + var_00 notify("emp_hit"); + if(var_00 != self) + { + var_00 maps\mp\gametypes\_missions::processchallenge("ch_onthepulse"); + } + } + + if(var_01 && isdefined(self)) + { + thread func_2C58(); + } + + if(var_02 && isdefined(var_00)) + { + var_00 thread func_2C58(); + } + } +} + +//Function Number: 5 +func_2C58() +{ + self notify("applyEmp"); + self endon("applyEmp"); + self endon("death"); + wait 0.05; + self.var_2C59 = 10; + self.empgrenaded = 1; + self shellshock("flashbang_mp",1); + self.empendtime = gettime() + self.var_2C59 * 1000; + thread func_2C5F(0.75); + self setempjammed(1); + thread func_2C5B(); + wait self.var_2C59; + self notify("empGrenadeTimedOut"); + func_2C5C(); +} + +//Function Number: 6 +func_2C5B() +{ + self notify("empGrenadeDeathWaiter"); + self endon("empGrenadeDeathWaiter"); + self endon("empGrenadeTimedOut"); + self waittill("death"); + func_2C5C(); +} + +//Function Number: 7 +func_2C5C() +{ + self.empgrenaded = 0; + if((level.teambased && level.teamemped[self.team] || level.teamnukeemped[self.team]) || !level.teambased && isdefined(level.empplayer) && level.empplayer != self || !level.teambased && isdefined(level.nukeinfo.player) && level.nukeinfo.player != self) + { + return; + } + + self setempjammed(0); +} + +//Function Number: 8 +func_2C5F(param_00) +{ + self endon("emp_rumble_loop"); + self notify("emp_rumble_loop"); + var_01 = gettime() + param_00 * 1000; + while(gettime() < var_01) + { + self playrumbleonentity("damage_heavy"); + wait 0.05; + } +} + +//Function Number: 9 +func_2C60() +{ + return isdefined(self.empendtime) && gettime() < self.empendtime; +} \ No newline at end of file diff --git a/MW3/PC/MP/878.gsc b/MW3/PC/MP/878.gsc new file mode 100644 index 0000000..486f5ea --- /dev/null +++ b/MW3/PC/MP/878.gsc @@ -0,0 +1,443 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 878.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 20 + * Decompile Time: 18 ms + * Timestamp: 10/27/2023 2:16:50 AM +*******************************************************************/ + +//Function Number: 1 +func_2B78() +{ + func_2B9C(); + if(!level.placement["all"].size) + { + return undefined; + } + + return level.placement["all"][0]; +} + +//Function Number: 2 +func_2B7A() +{ + func_2B9C(); + var_00 = level.placement["all"]; + var_01 = []; + foreach(var_03 in var_00) + { + if(var_03 == level.placement["all"][0]) + { + continue; + } + + var_01[var_01.size] = var_03; + } + + return var_01; +} + +//Function Number: 3 +func_2B7B(param_00,param_01,param_02,param_03,param_04) +{ + if(!isdefined(param_03)) + { + param_03 = 0; + } + + if(!isdefined(param_04)) + { + param_04 = 0; + } + + var_05 = param_01.pers["score"]; + func_2B84(param_00,param_01,param_02); + if(var_05 == param_01.pers["score"]) + { + return; + } + + if(!param_01 maps\mp\_utility::rankingenabled() && !level.hardcoremode && !param_04) + { + param_01 thread maps\mp\gametypes\_rank::xppointspopup(param_01.pers["score"] - var_05,0,(0.85,0.85,0.85),0); + } + + param_01 maps\mp\gametypes\_persistance::statadd("score",param_01.pers["score"] - var_05); + param_01.score = param_01.pers["score"]; + param_01 maps\mp\gametypes\_persistance::statsetchild("round","score",param_01.score); + if(!level.teambased) + { + thread func_2B99(); + } + + if(!param_03) + { + param_01 maps\mp\gametypes\_gamelogic::checkplayerscorelimitsoon(); + } + + var_06 = param_01 maps\mp\gametypes\_gamelogic::checkscorelimit(); +} + +//Function Number: 4 +func_2B84(param_00,param_01,param_02) +{ + var_03 = maps\mp\gametypes\_rank::getscoreinfovalue(param_00); + param_01.pers["score"] = param_01.pers["score"] + var_03 * level.objectivepointsmod; +} + +//Function Number: 5 +func_2B86(param_00,param_01) +{ + if(param_01 == param_00.pers["score"]) + { + return; + } + + param_00.pers["score"] = param_01; + param_00.score = param_00.pers["score"]; + param_00 thread maps\mp\gametypes\_gamelogic::checkscorelimit(); +} + +//Function Number: 6 +func_2B87(param_00) +{ + return param_00.pers["score"]; +} + +//Function Number: 7 +func_2B88(param_00,param_01) +{ + param_01 = param_01 * level.objectivepointsmod; + var_02 = game["teamScores"][param_00]; + var_03 = level.otherteam[param_00]; + if(game["teamScores"][param_00] > game["teamScores"][var_03]) + { + level.waswinning = param_00; + } + else if(game["teamScores"][var_03] > game["teamScores"][param_00]) + { + level.waswinning = var_03; + } + + func_2B8F(param_00,func_2B96(param_00) + param_01); + var_04 = "none"; + if(game["teamScores"][param_00] > game["teamScores"][var_03]) + { + var_04 = param_00; + } + else if(game["teamScores"][var_03] > game["teamScores"][param_00]) + { + var_04 = var_03; + } + + if(!level.splitscreen && var_04 != "none" && var_04 != level.waswinning && gettime() - level.laststatustime > 5000 && maps\mp\_utility::getscorelimit() != 1) + { + level.laststatustime = gettime(); + maps\mp\_utility::leaderdialog("lead_taken",var_04,"status"); + if(level.waswinning != "none") + { + maps\mp\_utility::leaderdialog("lead_lost",level.waswinning,"status"); + } + } + + if(var_04 != "none") + { + level.waswinning = var_04; + } +} + +//Function Number: 8 +func_2B8E() +{ + if(game["teamScores"]["allies"] > game["teamScores"]["axis"]) + { + return "allies"; + } + else if(game["teamScores"]["allies"] < game["teamScores"]["axis"]) + { + return "axis"; + } + + return "none"; +} + +//Function Number: 9 +func_2B8F(param_00,param_01) +{ + if(param_01 == game["teamScores"][param_00]) + { + return; + } + + game["teamScores"][param_00] = param_01; + func_2B93(param_00); + if((game["status"] == "overtime" && !isdefined(level.overtimescorewinoverride)) || isdefined(level.overtimescorewinoverride) && !level.overtimescorewinoverride) + { + thread maps\mp\gametypes\_gamelogic::onscorelimit(); + return; + } + + thread maps\mp\gametypes\_gamelogic::checkteamscorelimitsoon(param_00); + thread maps\mp\gametypes\_gamelogic::checkscorelimit(); +} + +//Function Number: 10 +func_2B93(param_00) +{ + var_01 = 0; + if(!maps\mp\_utility::isroundbased() || !maps\mp\_utility::isobjectivebased()) + { + var_01 = func_2B96(param_00); + } + else + { + var_01 = game["roundsWon"][param_00]; + } + + setteamscore(param_00,var_01); +} + +//Function Number: 11 +func_2B96(param_00) +{ + return game["teamScores"][param_00]; +} + +//Function Number: 12 +func_2B97() +{ + level notify("updating_scores"); + level endon("updating_scores"); + wait 0.05; + maps\mp\_utility::waittillslowprocessallowed(); + foreach(var_01 in level.players) + { + var_01 updatescores(); + } +} + +//Function Number: 13 +func_2B99() +{ + level notify("updating_dm_scores"); + level endon("updating_dm_scores"); + wait 0.05; + maps\mp\_utility::waittillslowprocessallowed(); + for(var_00 = 0;var_00 < level.players.size;var_00++) + { + level.players[var_00] updatedmscores(); + level.players[var_00].var_2B9A = 1; + } +} + +//Function Number: 14 +func_2B9B() +{ + var_00 = 0; + var_01 = level.placement["all"].size; + var_02 = 0; + for(var_03 = 0;var_03 < var_01;var_03++) + { + if(level.placement["all"][var_03] == self) + { + var_02 = 1; + } + + if(var_02) + { + level.placement["all"][var_03] = level.placement["all"][var_03 + 1]; + } + } + + if(!var_02) + { + return; + } + + level.placement["all"][var_01 - 1] = undefined; + if(level.teambased) + { + func_2B9F(); + return; + } + + var_01 = level.placement["all"].size; + for(var_03 = 0;var_03 < var_01;var_03++) + { + var_04 = level.placement["all"][var_03]; + var_04 notify("update_outcome"); + } +} + +//Function Number: 15 +func_2B9C() +{ + var_00 = []; + foreach(var_02 in level.players) + { + if(isdefined(var_02.connectedpostgame) || var_02.pers["team"] != "allies" && var_02.pers["team"] != "axis") + { + continue; + } + + var_00[var_00.size] = var_02; + } + + for(var_04 = 1;var_04 < var_00.size;var_04++) + { + var_02 = var_00[var_04]; + var_05 = var_02.score; + for(var_06 = var_04 - 1;var_06 >= 0 && func_2B9E(var_02,var_00[var_06]) == var_02;var_06--) + { + var_00[var_06 + 1] = var_00[var_06]; + } + + var_00[var_06 + 1] = var_02; + } + + level.placement["all"] = var_00; + if(level.teambased) + { + func_2B9F(); + } +} + +//Function Number: 16 +func_2B9E(param_00,param_01) +{ + if(param_00.score > param_01.score) + { + return param_00; + } + + if(param_01.score > param_00.score) + { + return param_01; + } + + if(param_00.deaths < param_01.deaths) + { + return param_00; + } + + if(param_01.deaths < param_00.deaths) + { + return param_01; + } + + if(common_scripts\utility::cointoss()) + { + return param_00; + } + + return param_01; +} + +//Function Number: 17 +func_2B9F() +{ + var_00["allies"] = []; + var_01 = level.placement["all"]; + var_02 = var_01.size; + for(var_03 = 0;var_03 < var_02;var_03++ = var_7B["spectator"]) + { + var_04 = var_01[var_03]; + var_05 = var_04.pers["team"]; + var_7B[var_05][var_7B[var_05].size] = var_04; + } + + level.placement["allies"] = var_7B["allies"]; + level.placement["axis"] = var_7B["axis"]; +} + +//Function Number: 18 +func_2BA0() +{ + wait 0.2; + var_00 = 0; + for(;;) + { + var_01 = 0; + var_02 = level.players; + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + var_04 = var_02[var_03]; + if(!isdefined(var_04)) + { + continue; + } + + if(isdefined(var_04.var_2B9A)) + { + continue; + } + + var_04.var_2B9A = 1; + var_04 updatedmscores(); + var_01 = 1; + wait 0.5; + } + + if(!var_01) + { + wait 3; + } + } +} + +//Function Number: 19 +func_2BA1(param_00) +{ + self endon("disconnect"); + param_00 endon("disconnect"); + wait 0.05; + maps\mp\_utility::waittillslowprocessallowed(); + if(self.pers["team"] != "axis" && self.pers["team"] != "allies") + { + return; + } + + if(self.pers["team"] == param_00.pers["team"]) + { + return; + } + + self thread [[ level.onxpevent ]]("assist"); + maps\mp\_utility::incpersstat("assists",1); + self.assists = maps\mp\_utility::getpersstat("assists"); + maps\mp\_utility::incplayerstat("assists",1); + maps\mp\gametypes\_persistance::statsetchild("round","assists",self.assists); + func_2B7B("assist",self,param_00); + maps\mp\killstreaks\_killstreaks::giveadrenaline("assist"); + thread maps\mp\gametypes\_missions::playerassist(); +} + +//Function Number: 20 +func_2BA8(param_00) +{ + self endon("disconnect"); + param_00 endon("disconnect"); + wait 0.05; + maps\mp\_utility::waittillslowprocessallowed(); + if(self.pers["team"] != "axis" && self.pers["team"] != "allies") + { + return; + } + + if(self.pers["team"] == param_00.pers["team"]) + { + return; + } + + self thread [[ level.onxpevent ]]("assist"); + self thread [[ level.onxpevent ]]("assist"); + maps\mp\_utility::incpersstat("assists",1); + self.assists = maps\mp\_utility::getpersstat("assists"); + maps\mp\_utility::incplayerstat("assists",1); + maps\mp\gametypes\_persistance::statsetchild("round","assists",self.assists); + func_2B7B("assist",self,param_00); + thread maps\mp\gametypes\_hud_message::splashnotifydelayed("shield_assist"); + thread maps\mp\gametypes\_missions::playerassist(); +} \ No newline at end of file diff --git a/MW3/PC/MP/885.gsc b/MW3/PC/MP/885.gsc new file mode 100644 index 0000000..fb8a6a9 --- /dev/null +++ b/MW3/PC/MP/885.gsc @@ -0,0 +1,29 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 885.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 4 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:52 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ +} + +//Function Number: 2 +tweakart() +{ +} + +//Function Number: 3 +fovslidercheck() +{ +} + +//Function Number: 4 +dumpsettings() +{ +} \ No newline at end of file diff --git a/MW3/PC/MP/890.gsc b/MW3/PC/MP/890.gsc new file mode 100644 index 0000000..7bcf398 --- /dev/null +++ b/MW3/PC/MP/890.gsc @@ -0,0 +1,61 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 890.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 6 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:16:52 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level thread onplayerconnect(); + level thread func_3066(); +} + +//Function Number: 2 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_00.var_3064 = gettime(); + var_00.var_3065 = []; + var_00 thread func_3067(); + var_00 thread ondeath(); + } +} + +//Function Number: 3 +func_3066() +{ + for(;;) + { + level waittill("disconnected",var_00); + var_00.var_3065 = []; + } +} + +//Function Number: 4 +func_3067() +{ + level endon("game_ended"); + self endon("disconnected"); + self waittill("weapon_fired"); +} + +//Function Number: 5 +ondeath() +{ + level endon("game_ended"); + self endon("disconnected"); + self waittill("death"); +} + +//Function Number: 6 +func_3068(param_00,param_01) +{ + updateskill(param_00,param_01,"war",1); +} \ No newline at end of file diff --git a/MW3/PC/MP/common_scripts/_artcommon.gsc b/MW3/PC/MP/common_scripts/_artcommon.gsc new file mode 100644 index 0000000..0f55438 --- /dev/null +++ b/MW3/PC/MP/common_scripts/_artcommon.gsc @@ -0,0 +1,128 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: common_scripts\_artcommon.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 10 + * Decompile Time: 147 ms + * Timestamp: 10/27/2023 2:15:29 AM +*******************************************************************/ + +//Function Number: 1 +artstartvisionfileexport() +{ + common_scripts\utility::fileprint_launcher_start_file(); +} + +//Function Number: 2 +artendvisionfileexport() +{ + return common_scripts\utility::fileprint_launcher_end_file("\\share\\raw\\vision\\" + level.script + ".vision",1); +} + +//Function Number: 3 +artstartfogfileexport() +{ + common_scripts\utility::fileprint_launcher_start_file(); +} + +//Function Number: 4 +artendfogfileexport() +{ + return common_scripts\utility::fileprint_launcher_end_file("\\share\\raw\\maps\\createart\\" + level.script + "_art.gsc",1); +} + +//Function Number: 5 +artcommonfxprintln(param_00) +{ + common_scripts\utility::fileprint_launcher(param_00); +} + +//Function Number: 6 +setfogsliders() +{ +} + +//Function Number: 7 +translatefogsliderstoscript() +{ + level.fogexphalfplane = getdvarfloat("scr_fog_exp_halfplane"); + level.fognearplane = getdvarfloat("scr_fog_nearplane"); + level.fogcolor = getdvarvector("scr_fog_color"); + level.fogmaxopacity = getdvarfloat("scr_fog_max_opacity"); + level.sunfogenabled = getdvarint("scr_sunFogEnabled"); + level.sunfogcolor = getdvarvector("scr_sunFogColor"); + level.sunfogdir = getdvarvector("scr_sunFogDir"); + level.sunfogbeginfadeangle = getdvarfloat("scr_sunFogBeginFadeAngle"); + level.sunfogendfadeangle = getdvarfloat("scr_sunFogEndFadeAngle"); + level.sunfogscale = getdvarfloat("scr_sunFogScale"); + level.fogexphalfplane = limit(level.fogexphalfplane); + level.fognearplane = limit(level.fognearplane); + var_00 = limit(level.fogcolor[0]); + var_01 = limit(level.fogcolor[1]); + var_02 = limit(level.fogcolor[2]); + level.fogcolor = (var_00,var_01,var_02); + level.fogmaxopacity = limit(level.fogmaxopacity); + level.sunfogenabled = limit(level.sunfogenabled); + var_00 = limit(level.sunfogcolor[0]); + var_01 = limit(level.sunfogcolor[1]); + var_02 = limit(level.sunfogcolor[2]); + level.sunfogcolor = (var_00,var_01,var_02); + var_03 = limit(level.sunfogdir[0]); + var_04 = limit(level.sunfogdir[1]); + var_05 = limit(level.sunfogdir[2]); + level.sunfogdir = (var_03,var_04,var_05); + level.sunfogbeginfadeangle = limit(level.sunfogbeginfadeangle); + level.sunfogendfadeangle = limit(level.sunfogendfadeangle); + level.sunfogscale = limit(level.sunfogscale); +} + +//Function Number: 8 +limit(param_00) +{ + var_01 = 0.001; + if(param_00 < var_01 && param_00 > var_01 * -1) + { + param_00 = 0; + } + + return param_00; +} + +//Function Number: 9 +updatefogfromscript() +{ + if(!getdvarint("scr_fog_disable")) + { + if(level.sunfogenabled) + { + setexpfog(level.fognearplane,level.fogexphalfplane,level.fogcolor[0],level.fogcolor[1],level.fogcolor[2],level.fogmaxopacity,0,level.sunfogcolor[0],level.sunfogcolor[1],level.sunfogcolor[2],level.sunfogdir,level.sunfogbeginfadeangle,level.sunfogendfadeangle,level.sunfogscale); + return; + } + + setexpfog(level.fognearplane,level.fogexphalfplane,level.fogcolor[0],level.fogcolor[1],level.fogcolor[2],level.fogmaxopacity,0); + return; + } + + setexpfog(1215752192,1215752193,0,0,0,0,0); +} + +//Function Number: 10 +artfxprintlnfog() +{ + common_scripts\utility::fileprint_launcher(""); + common_scripts\utility::fileprint_launcher("\t//* Fog section * "); + common_scripts\utility::fileprint_launcher(""); + common_scripts\utility::fileprint_launcher("\tsetDevDvar( \"scr_fog_disable\", \" + getdvarint("scr_fog_disable") + "\" + " );"); + common_scripts\utility::fileprint_launcher(""); + if(!getdvarint("scr_fog_disable")) + { + if(level.sunfogenabled) + { + common_scripts\utility::fileprint_launcher("\tsetExpFog( " + level.fognearplane + ", " + level.fogexphalfplane + ", " + level.fogcolor[0] + ", " + level.fogcolor[1] + ", " + level.fogcolor[2] + ", " + level.fogmaxopacity + ", 0, " + level.sunfogcolor[0] + ", " + level.sunfogcolor[1] + ", " + level.sunfogcolor[2] + ", (" + level.sunfogdir[0] + ", " + level.sunfogdir[1] + ", " + level.sunfogdir[2] + "), " + level.sunfogbeginfadeangle + ", " + level.sunfogendfadeangle + ", " + level.sunfogscale + " );"); + return; + } + + common_scripts\utility::fileprint_launcher("\tsetExpFog( " + level.fognearplane + ", " + level.fogexphalfplane + ", " + level.fogcolor[0] + ", " + level.fogcolor[1] + ", " + level.fogcolor[2] + ", " + level.fogmaxopacity + ", 0 );"); + } +} \ No newline at end of file diff --git a/MW3/PC/MP/common_scripts/_createfx.gsc b/MW3/PC/MP/common_scripts/_createfx.gsc new file mode 100644 index 0000000..8270dae --- /dev/null +++ b/MW3/PC/MP/common_scripts/_createfx.gsc @@ -0,0 +1,1939 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: common_scripts\_createfx.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 83 + * Decompile Time: 1398 ms + * Timestamp: 10/27/2023 2:16:00 AM +*******************************************************************/ + +//Function Number: 1 +createeffect(param_00,param_01) +{ + var_02 = spawnstruct(); + if(!isdefined(level.createfxent)) + { + level.createfxent = []; + } + + level.createfxent[level.createfxent.size] = var_02; + var_02.v = []; + var_02.v["type"] = param_00; + var_02.v["fxid"] = param_01; + var_02.v["angles"] = (0,0,0); + var_02.v["origin"] = (0,0,0); + var_02.var_845 = 1; + if(isdefined(param_01) && isdefined(level.createfxbyfxid)) + { + var_03 = level.createfxbyfxid[param_01]; + if(!isdefined(var_03)) + { + var_03 = []; + } + + level.createfxbyfxid[var_02] = var_7B; + } + + return var_03; +} + +//Function Number: 2 +getloopeffectdelaydefault() +{ + return 0.5; +} + +//Function Number: 3 +getoneshoteffectdelaydefault() +{ + return -15; +} + +//Function Number: 4 +getexploderdelaydefault() +{ + return 0; +} + +//Function Number: 5 +getintervalsounddelaymindefault() +{ + return 0.75; +} + +//Function Number: 6 +getintervalsounddelaymaxdefault() +{ + return 2; +} + +//Function Number: 7 +add_effect(param_00,param_01) +{ + if(!isdefined(level._effect)) + { + level._effect = []; + } + + level._effect[param_00] = loadfx(param_01); +} + +//Function Number: 8 +createloopsound() +{ + var_00 = spawnstruct(); + if(!isdefined(level.createfxent)) + { + level.createfxent = []; + } + + level.createfxent[level.createfxent.size] = var_00; + var_00.v = []; + var_00.v["type"] = "soundfx"; + var_00.v["fxid"] = "No FX"; + var_00.v["soundalias"] = "nil"; + var_00.v["angles"] = (0,0,0); + var_00.v["origin"] = (0,0,0); + var_00.v["server_culled"] = 1; + if(getdvar("serverCulledSounds") != "1") + { + var_00.v["server_culled"] = 0; + } + + var_00.var_845 = 1; + return var_00; +} + +//Function Number: 9 +createintervalsound() +{ + var_00 = createloopsound(); + var_00.v["type"] = "soundfx_interval"; + var_00.v["delay_min"] = getintervalsounddelaymindefault(); + var_00.v["delay_max"] = getintervalsounddelaymaxdefault(); + return var_00; +} + +//Function Number: 10 +createnewexploder() +{ + var_00 = spawnstruct(); + if(!isdefined(level.createfxent)) + { + level.createfxent = []; + } + + level.createfxent[level.createfxent.size] = var_00; + var_00.v = []; + var_00.v["type"] = "exploder"; + var_00.v["fxid"] = "No FX"; + var_00.v["soundalias"] = "nil"; + var_00.v["loopsound"] = "nil"; + var_00.v["angles"] = (0,0,0); + var_00.v["origin"] = (0,0,0); + var_00.v["exploder"] = 1; + var_00.v["flag"] = "nil"; + var_00.v["exploder_type"] = "normal"; + var_00.var_845 = 1; + return var_00; +} + +//Function Number: 11 +createexploderex(param_00,param_01) +{ + var_02 = common_scripts\utility::createexploder(param_00); + var_02.v["exploder"] = param_01; + return var_02; +} + +//Function Number: 12 +set_origin_and_angles(param_00,param_01) +{ + self.v["origin"] = param_00; + self.v["angles"] = param_01; +} + +//Function Number: 13 +set_forward_and_up_vectors() +{ + self.v["up"] = anglestoup(self.v["angles"]); + self.v["forward"] = anglestoforward(self.v["angles"]); +} + +//Function Number: 14 +createfx_common() +{ + precacheshader("black"); + if(level.mp_createfx) + { + hack_start("painter_mp"); + } + else + { + hack_start("painter"); + } + + common_scripts\utility::flag_init("createfx_saving"); + if(!isdefined(level.createfx)) + { + level.createfx = []; + } + + level.var_852 = 0; + var_00 = getentarray(); + foreach(var_02 in var_00) + { + if(isspawner(var_02)) + { + var_02 delete(); + } + } + + var_04 = getentarray("trigger_multiple","classname"); + for(var_05 = 0;var_05 < var_04.size;var_05++) + { + var_04[var_05] delete(); + } + + var_04 = getentarray("trigger_radius","classname"); + for(var_05 = 0;var_05 < var_04.size;var_05++) + { + var_04[var_05] delete(); + } + + level notify("createfx_common_done"); +} + +//Function Number: 15 +createfxlogic() +{ + waittillframeend; + common_scripts\_createfxmenu::menu_init(); + if(!isdefined(level._effect)) + { + level._effect = []; + } + + if(getdvar("createfx_map") == "") + { + } + else if(getdvar("createfx_map") == common_scripts\utility::get_template_level()) + { + [[ level.func_position_player ]](); + } + + level.var_833 = []; + level.var_83E = 30; + var_00 = []; + var_01 = []; + var_00[0] = 0; + var_01[1] = 1; + var_01[2] = -2; + var_01[3] = 1; + var_01[4] = -2; + var_02 = newhudelem(); + var_02.location = 0; + var_02.alignx = "center"; + var_02.aligny = "middle"; + var_02.foreground = 1; + var_02.fontscale = 2; + var_02.sort = 20; + var_02.alpha = 1; + var_02.x = 320; + var_02.y = 233; + var_02 settext("."); + level.var_857 = newhudelem(); + level.var_857.alpha = 0; + level.var_857 settext("marker"); + for(var_03 = 0;var_03 < level.var_83E;var_03++ = -1) + { + var_04 = []; + for(var_05 = 0;var_05 < 1;var_05++ = var_7B[4]) + { + var_06 = newhudelem(); + var_06.alignx = "left"; + var_06.location = 0; + var_06.foreground = 1; + var_06.fontscale = 1.4; + var_06.sort = 20 - var_05; + var_06.alpha = 1; + var_06.x = 0 + var_01[var_05]; + var_06.y = 60 + var_7B[var_05] + var_03 * 15; + if(var_05 > 0) + { + var_06.color = (0,0,0); + } + + var_04[var_04.size] = var_06; + } + + level.var_833[var_03] = var_04; + } + + var_04 = []; + for(var_05 = 0;var_05 < 5;var_05++ = var_7B[3]) + { + var_06 = newhudelem(); + var_06.alignx = "center"; + var_06.location = 0; + var_06.foreground = 1; + var_06.fontscale = 1.4; + var_06.sort = 20 - var_05; + var_06.alpha = 1; + var_06.x = 320 + var_01[var_05]; + var_06.y = 80 + var_7B[var_05]; + if(var_05 > 0) + { + var_06.color = (0,0,0); + } + + var_04[var_04.size] = var_06; + } + + level.createfx_centerprint = var_04; + level.var_858 = 0; + level.var_859 = 0; + level.var_85A = 0; + level.var_85B = 0; + level.var_85C = 0; + level.var_85D = 0; + level.var_85E = []; + level.var_81F = []; + level.var_85F = []; + level.var_85F["escape"] = 1; + level.var_85F["BUTTON_LSHLDR"] = 1; + level.var_85F["BUTTON_RSHLDR"] = 1; + level.var_85F["mouse1"] = 1; + level.var_85F["ctrl"] = 1; + level.var_860 = 1; + level.var_818 = undefined; + level.var_861 = []; + var_07 = 0; + var_08 = (0,0,0); + if(!level.mp_createfx) + { + var_08 = level.player.origin; + } + + var_09 = []; + var_1C["loopfx"] = "selected"; + var_1C["loopfx"] = "highlighted"; + var_1C["loopfx"] = "default"; + var_1C["oneshotfx"] = "selected"; + var_1C["oneshotfx"] = "highlighted"; + var_1C["oneshotfx"] = "default"; + var_1C["exploder"] = "selected"; + var_1C["exploder"] = "highlighted"; + var_1C["exploder"] = "default"; + var_1C["rainfx"] = "selected"; + var_1C["rainfx"] = "highlighted"; + var_1C["rainfx"] = "default"; + var_1C["soundfx"] = "selected"; + var_1C["soundfx"] = "highlighted"; + var_1C["soundfx"] = "default"; + var_1C["soundfx_interval"] = "selected"; + var_1C["soundfx_interval"] = "highlighted"; + var_1C["soundfx_interval"] = "default"; + var_0A = undefined; + level.var_863 = 0; + common_scripts\_createfxmenu::setmenu("none"); + level.var_864 = 0; + var_0B = newhudelem(); + var_0B.x = -120; + var_0B.y = 200; + var_0B.foreground = 0; + var_0B setshader("black",250,160); + var_0B.alpha = 0; + level.var_832 = 0; + var_04 = 0; + while(var_04 < level.createfxent.size) + { + var_0C = level.createfxent[var_04]; + var_0C post_entity_creation_function(); + var_04++ = (0.2,0.9,0.2); + } + + thread draw_distance(); + var_0D = undefined; + thread createfx_autosave(); + for(;;) + { + var_0E = 0; + var_0F = anglestoright(level.player getplayerangles()); + var_10 = anglestoforward(level.player getplayerangles()); + var_11 = anglestoup(level.player getplayerangles()); + var_12 = 0.85; + var_13 = var_10 * 750; + level.var_865 = bullettrace(level.player geteye(),level.player geteye() + var_13,0,undefined); + var_14 = undefined; + level.var_866 = []; + level.var_867 = []; + process_button_held_and_clicked(); + var_15 = button_is_held("ctrl","BUTTON_LSHLDR"); + var_16 = button_is_clicked("mouse1","BUTTON_A"); + var_17 = button_is_held("mouse1","BUTTON_A"); + common_scripts\_createfxmenu::create_fx_menu(); + if(button_is_clicked("shift","BUTTON_X")) + { + var_08 = !var_08; + } + + if(button_is_clicked("F5")) + { + } + + if(getdvarint("scr_createfx_dump")) + { + generate_fx_log(); + } + + if(button_is_clicked("F2")) + { + toggle_createfx_drawing(); + } + + if(button_is_clicked("ins")) + { + insert_effect(); + } + + if(button_is_clicked("del")) + { + delete_pressed(); + } + + if(button_is_clicked("end","l")) + { + drop_selection_to_ground(); + var_0E = 1; + } + + if(button_is_clicked("escape")) + { + reset_fx_hud_colors(); + } + + if(button_is_clicked("space")) + { + turn_off_exploders(); + } + + if(button_is_clicked("g")) + { + select_all_exploders_of_currently_selected("exploder"); + select_all_exploders_of_currently_selected("flag"); + } + + if(button_is_clicked("tab","BUTTON_RSHLDR")) + { + move_selection_to_cursor(); + var_0E = 1; + } + + if(button_is_held("h","F1")) + { + show_help(); + wait 0.05; + continue; + } + + if(button_is_clicked("BUTTON_LSTICK")) + { + copy_ents(); + } + + if(button_is_clicked("BUTTON_RSTICK")) + { + paste_ents(); + } + + if(var_15) + { + if(button_is_clicked("c")) + { + copy_ents(); + } + + if(button_is_clicked("v")) + { + paste_ents(); + } + } + + if(isdefined(level.var_837)) + { + common_scripts\_createfxmenu::menu_fx_option_set(); + } + + var_04 = 0; + while(var_04 < level.createfxent.size) + { + var_0C = level.createfxent[var_04]; + var_18 = vectornormalize(var_0C.v["origin"] - level.player.origin + (0,0,55)); + var_19 = vectordot(var_10,var_18); + if(var_19 < var_12) + { + continue; + } + + var_12 = var_19; + var_14 = var_0C; + var_04++ = (0.5,1,0.75); + } + + level.var_868 = var_14; + if(isdefined(var_14)) + { + if(isdefined(var_0A)) + { + if(var_0A != var_14) + { + if(!ent_is_selected(var_0A)) + { + var_0A thread entity_highlight_disable(); + } + + if(!ent_is_selected(var_14)) + { + var_14 thread entity_highlight_enable(); + } + } + } + else if(!ent_is_selected(var_14)) + { + var_14 thread entity_highlight_enable(); + } + } + + manipulate_createfx_ents(var_14,var_16,var_17,var_15,var_1C,var_0F); + if(var_08 && level.var_81F.size > 0) + { + thread [[ level.func_process_fx_rotater ]](); + if(button_is_clicked("enter","p")) + { + reset_axis_of_selected_ents(); + } + + if(button_is_clicked("v")) + { + copy_angles_of_selected_ents(); + } + + var_04 = 0; + while(var_04 < level.var_81F.size) + { + level.var_81F[var_04] draw_axis(); + var_04++ = (1,1,0.2); + } + + if(level.var_85B != 0 || level.var_85D != 0 || level.var_85C != 0) + { + var_0E = 1; + } + + wait 0.05; + } + else + { + var_1A = get_selected_move_vector(); + var_04 = 0; + while(var_04 < level.var_81F.size) + { + var_0C = level.var_81F[var_04]; + if(isdefined(var_0C.model)) + { + continue; + } + + var_0C.v["origin"] = var_0C.v["origin"] + var_1A; + var_04++ = (0.2,0.9,0.2); + } + + if(distance((0,0,0),var_1A) > 0) + { + var_0E = 1; + } + + wait 0.05; + } + + if(var_0E) + { + update_selected_entities(); + } + + if(!level.mp_createfx) + { + var_09 = [[ level.func_position_player_get ]](var_09); + } + + var_0A = var_14; + if(last_selected_entity_has_changed(var_0D)) + { + level.var_822 = 0; + reset_fx_hud_colors(); + common_scripts\_createfxmenu::setmenu("none"); + } + + if(level.var_81F.size) + { + var_0D = level.var_81F[level.var_81F.size - 1]; + continue; + } + + var_0D = undefined; + } +} + +//Function Number: 16 +copy_angles_of_selected_ents() +{ + level notify("new_ent_selection"); + for(var_00 = 0;var_00 < level.var_81F.size;var_00++) + { + var_01 = level.var_81F[var_00]; + var_01.v["angles"] = level.var_81F[level.var_81F.size - 1].v["angles"]; + var_01 set_forward_and_up_vectors(); + } + + update_selected_entities(); +} + +//Function Number: 17 +reset_axis_of_selected_ents() +{ + level notify("new_ent_selection"); + for(var_00 = 0;var_00 < level.var_81F.size;var_00++) + { + var_01 = level.var_81F[var_00]; + var_01.v["angles"] = (0,0,0); + var_01 set_forward_and_up_vectors(); + } + + update_selected_entities(); +} + +//Function Number: 18 +last_selected_entity_has_changed(param_00) +{ + if(isdefined(param_00)) + { + if(!common_scripts\_createfxmenu::entities_are_selected()) + { + return 1; + } + } + else + { + return common_scripts\_createfxmenu::entities_are_selected(); + } + + return param_00 != level.var_81F[level.var_81F.size - 1]; +} + +//Function Number: 19 +createfx_showorigin(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,param_0D,param_0E,param_0F,param_10,param_11,param_12) +{ +} + +//Function Number: 20 +drop_selection_to_ground() +{ + for(var_00 = 0;var_00 < level.var_81F.size;var_00++) + { + var_01 = level.var_81F[var_00]; + var_02 = bullettrace(var_01.v["origin"],var_01.v["origin"] + (0,0,-2048),0,undefined); + var_01.v["origin"] = var_02["position"]; + } +} + +//Function Number: 21 +turn_off_exploders() +{ + level notify("createfx_exploder_reset"); + var_00 = []; + for(var_01 = 0;var_01 < level.var_81F.size;var_01++) + { + var_02 = level.var_81F[var_01]; + if(isdefined(var_02.v["exploder"])) + { + var_00[var_02.v["exploder"]] = 1; + } + } + + var_03 = getarraykeys(var_00); + for(var_01 = 0;var_01 < var_03.size;var_01++) + { + common_scripts\utility::exploder(var_03[var_01]); + } +} + +//Function Number: 22 +draw_distance() +{ + var_00 = 0; + if(getdvarint("createfx_drawdist") == 0) + { + } + + for(;;) + { + var_01 = getdvarint("createfx_drawdist"); + for(var_02 = 0;var_02 < level.createfxent.size;var_02++) + { + var_03 = level.createfxent[var_02]; + var_03.var_845 = distance(level.player.origin,var_03.v["origin"]) <= var_01; + var_00++; + if(var_00 > 100) + { + var_00 = 0; + wait 0.05; + } + } + + if(level.createfxent.size == 0) + { + wait 0.05; + } + } +} + +//Function Number: 23 +createfx_autosave() +{ + for(;;) + { + wait 300; + common_scripts\utility::flag_waitopen("createfx_saving"); + generate_fx_log(1); + } +} + +//Function Number: 24 +rotate_over_time(param_00,param_01) +{ + level endon("new_ent_selection"); + var_02 = 0.1; + for(var_03 = 0;var_03 < var_02 * 20;var_03++) + { + if(level.var_85B != 0) + { + param_00 addpitch(level.var_85B); + } + else if(level.var_85D != 0) + { + param_00 addyaw(level.var_85D); + } + else + { + param_00 addroll(level.var_85C); + } + + wait 0.05; + param_00 draw_axis(); + for(var_04 = 0;var_04 < level.var_81F.size;var_04++) + { + var_05 = level.var_81F[var_04]; + if(isdefined(var_05.model)) + { + continue; + } + + var_05.v["origin"] = param_01[var_04].origin; + var_05.v["angles"] = param_01[var_04].angles; + } + } +} + +//Function Number: 25 +delete_pressed() +{ + if(level.var_832) + { + remove_selected_option(); + return; + } + + delete_selection(); +} + +//Function Number: 26 +remove_selected_option() +{ + if(!isdefined(level.var_837)) + { + return; + } + + var_00 = level.var_82A[level.var_837]["name"]; + for(var_01 = 0;var_01 < level.createfxent.size;var_01++) + { + var_02 = level.createfxent[var_01]; + if(!ent_is_selected(var_02)) + { + continue; + } + + var_02 remove_option(var_00); + } + + update_selected_entities(); + reset_fx_hud_colors(); +} + +//Function Number: 27 +remove_option(param_00) +{ + self.v[param_00] = undefined; +} + +//Function Number: 28 +delete_selection() +{ + var_00 = []; + for(var_01 = 0;var_01 < level.createfxent.size;var_01++) + { + var_02 = level.createfxent[var_01]; + if(ent_is_selected(var_02)) + { + if(isdefined(var_02.looper)) + { + var_02.looper delete(); + } + + var_02 notify("stop_loop"); + continue; + } + + var_00[var_00.size] = var_02; + } + + level.createfxent = var_00; + level.var_85E = []; + level.var_81F = []; + clear_fx_hudelements(); +} + +//Function Number: 29 +move_selection_to_cursor() +{ + var_00 = level.var_865["position"]; + if(level.var_81F.size <= 0) + { + return; + } + + var_01 = get_center_of_array(level.var_81F); + var_02 = var_01 - var_00; + for(var_03 = 0;var_03 < level.var_81F.size;var_03++) + { + var_04 = level.var_81F[var_03]; + if(isdefined(var_04.model)) + { + continue; + } + + var_04.v["origin"] = var_04.v["origin"] - var_02; + } +} + +//Function Number: 30 +insert_effect() +{ + common_scripts\_createfxmenu::setmenu("creation"); + level.var_822 = 0; + clear_fx_hudelements(); + set_fx_hudelement("Pick effect type to create:"); + set_fx_hudelement("1. One Shot fx"); + set_fx_hudelement("2. Looping fx"); + set_fx_hudelement("3. Looping sound"); + set_fx_hudelement("4. Exploder"); + set_fx_hudelement("5. One Shot Sound"); + set_fx_hudelement("(c) Cancel"); + set_fx_hudelement("(x) Exit"); +} + +//Function Number: 31 +show_help() +{ + clear_fx_hudelements(); + set_fx_hudelement("Help:"); + set_fx_hudelement("Insert Insert entity"); + set_fx_hudelement("L Drop selected entities to the ground"); + set_fx_hudelement("A Add option to the selected entities"); + set_fx_hudelement("P Reset the rotation of the selected entities"); + set_fx_hudelement("V Copy the angles from the most recently selected fx onto all selected fx."); + set_fx_hudelement("Delete Kill the selected entities"); + set_fx_hudelement("ESCAPE Cancel out of option-modify-mode, must have console open"); + set_fx_hudelement("Ctrl-C Copy"); + set_fx_hudelement("Ctrl-V Paste"); + set_fx_hudelement("F2 Toggle createfx dot and text drawing"); + set_fx_hudelement("F5 SAVES your work"); + set_fx_hudelement("Dpad Move selected entitise on X/Y or rotate pitch/yaw"); + set_fx_hudelement("A button Toggle the selection of the current entity"); + set_fx_hudelement("X button Toggle entity rotation mode"); + set_fx_hudelement("Y button Move selected entites up or rotate roll"); + set_fx_hudelement("B button Move selected entites down or rotate roll"); + set_fx_hudelement("R Shoulder Move selected entities to the cursor"); + set_fx_hudelement("L Shoulder Hold to select multiple entites"); + set_fx_hudelement("L JoyClick Copy"); + set_fx_hudelement("R JoyClick Paste"); + set_fx_hudelement("N UFO"); + set_fx_hudelement("T Toggle Timescale FAST"); + set_fx_hudelement("Y Toggle Timescale SLOW"); + set_fx_hudelement("[ Toggle FX Visibility"); + set_fx_hudelement("] Toggle ShowTris"); + set_fx_hudelement("F11 Toggle FX Profile"); +} + +//Function Number: 32 +select_last_entity() +{ + select_entity(level.createfxent.size - 1,level.createfxent[level.createfxent.size - 1]); +} + +//Function Number: 33 +select_all_exploders_of_currently_selected(param_00) +{ + var_01 = []; + foreach(var_03 in level.var_81F) + { + if(!isdefined(var_03.v[param_00])) + { + continue; + } + + var_04 = var_03.v[param_00]; + var_01[var_04] = 1; + } + + foreach(var_04, var_07 in var_01) + { + foreach(var_09, var_03 in level.createfxent) + { + if(index_is_selected(var_09)) + { + continue; + } + + if(!isdefined(var_03.v[param_00])) + { + continue; + } + + if(var_03.v[param_00] != var_04) + { + continue; + } + + select_entity(var_09,var_03); + } + } + + update_selected_entities(); +} + +//Function Number: 34 +copy_ents() +{ + if(level.var_81F.size <= 0) + { + return; + } + + var_00 = []; + for(var_01 = 0;var_01 < level.var_81F.size;var_01++) + { + var_02 = level.var_81F[var_01]; + var_03 = spawnstruct(); + var_03.v = var_02.v; + var_03 post_entity_creation_function(); + var_00[var_00.size] = var_03; + } + + level.var_87D = var_00; +} + +//Function Number: 35 +post_entity_creation_function() +{ + self.var_87E = 0; + self.var_845 = 1; +} + +//Function Number: 36 +paste_ents() +{ + if(!isdefined(level.var_87D)) + { + return; + } + + clear_entity_selection(); + for(var_00 = 0;var_00 < level.var_87D.size;var_00++) + { + add_and_select_entity(level.var_87D[var_00]); + } + + move_selection_to_cursor(); + update_selected_entities(); + level.var_87D = []; + copy_ents(); +} + +//Function Number: 37 +add_and_select_entity(param_00) +{ + level.createfxent[level.createfxent.size] = param_00; + select_last_entity(); +} + +//Function Number: 38 +get_center_of_array(param_00) +{ + var_01 = (0,0,0); + for(var_02 = 0;var_02 < param_00.size;var_02++) + { + var_01 = (var_01[0] + param_00[var_02].v["origin"][0],var_01[1] + param_00[var_02].v["origin"][1],var_01[2] + param_00[var_02].v["origin"][2]); + } + + return (var_01[0] / param_00.size,var_01[1] / param_00.size,var_01[2] / param_00.size); +} + +//Function Number: 39 +ent_draw_axis() +{ + self endon("death"); + for(;;) + { + draw_axis(); + wait 0.05; + } +} + +//Function Number: 40 +rotation_is_occuring() +{ + if(level.var_85C != 0) + { + return 1; + } + + if(level.var_85B != 0) + { + return 1; + } + + return level.var_85D != 0; +} + +//Function Number: 41 +print_fx_options(param_00,param_01,param_02,param_03) +{ + for(var_04 = 0;var_04 < level.var_82A.size;var_04++) + { + var_05 = level.var_82A[var_04]; + var_06 = var_05["name"]; + if(!isdefined(param_00.v[var_06])) + { + continue; + } + + if(!common_scripts\_createfxmenu::mask(var_05["mask"],param_00.v["type"])) + { + continue; + } + + if(!level.mp_createfx) + { + if(common_scripts\_createfxmenu::mask("fx",param_00.v["type"]) && var_06 == "fxid") + { + continue; + } + + if(param_00.v["type"] == "exploder" && var_06 == "exploder") + { + continue; + } + + var_07 = param_00.v["type"] + "/" + var_06; + if(isdefined(level.var_885[var_07]) && level.var_885[var_07] == param_00.v[var_06]) + { + continue; + } + } + + if(var_05["type"] == "string") + { + var_08 = param_00.v[var_06] + ""; + if(var_08 == "nil") + { + continue; + } + + cfxprintln(param_02,param_01 + "ent.v[ \" + var_06 + "\" ] = \" + param_00.v[var_06] + "\";"); + continue; + } + + cfxprintln(param_02,param_01 + "ent.v[ \" + var_06 + "\" ] = " + param_00.v[var_06] + ";"); + } +} + +//Function Number: 42 +entity_highlight_disable() +{ + self notify("highlight change"); + self endon("highlight change"); + for(;;) + { + self.var_87E = self.var_87E * 0.85; + self.var_87E = self.var_87E - 0.05; + if(self.var_87E < 0) + { + break; + } + + wait 0.05; + } + + self.var_87E = 0; +} + +//Function Number: 43 +entity_highlight_enable() +{ + self notify("highlight change"); + self endon("highlight change"); + for(;;) + { + self.var_87E = self.var_87E + 0.05; + self.var_87E = self.var_87E * 1.25; + if(self.var_87E > 1) + { + break; + } + + wait 0.05; + } + + self.var_87E = 1; +} + +//Function Number: 44 +toggle_createfx_drawing() +{ + level.var_860 = !level.var_860; +} + +//Function Number: 45 +manipulate_createfx_ents(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if(!level.var_860) + { + return; + } + + for(var_06 = 0;var_06 < level.createfxent.size;var_06++) + { + var_07 = level.createfxent[var_06]; + if(!var_07.var_845) + { + continue; + } + + var_08 = getdvarfloat("createfx_scaleid"); + if(isdefined(param_00) && var_07 == param_00) + { + if(!common_scripts\_createfxmenu::entities_are_selected()) + { + common_scripts\_createfxmenu::display_fx_info(var_07); + } + + if(param_01) + { + var_09 = index_is_selected(var_06); + level.var_864 = !var_09; + if(!param_03) + { + var_0A = level.var_81F.size; + clear_entity_selection(); + if(var_09 && var_0A == 1) + { + select_entity(var_06,var_07); + } + } + + toggle_entity_selection(var_06,var_07); + } + else if(param_02) + { + if(param_03) + { + if(level.var_864) + { + select_entity(var_06,var_07); + } + + if(!level.var_864) + { + deselect_entity(var_06,var_07); + } + } + } + + var_0B = "highlighted"; + if(index_is_selected(var_06)) + { + var_0B = "selected"; + } + + if(var_07.var_87E > 0) + { + var_0C = param_05 * var_07.v["fxid"].size * -2.93 * var_08; + } + + continue; + } + + var_0B = "default"; + if(index_is_selected(var_06)) + { + var_0B = "selected"; + } + + if(var_07.var_87E > 0) + { + var_0C = param_05 * var_07.v["fxid"].size * -2.93; + } + } +} + +//Function Number: 46 +reset_fx_hud_colors() +{ + level.var_832 = 0; + level.var_837 = undefined; + show_hud_elements(); +} + +//Function Number: 47 +show_hud_elements() +{ + for(var_00 = 0;var_00 < level.var_83E;var_00++) + { + level.var_833[var_00][0].color = (1,1,1); + } +} + +//Function Number: 48 +button_is_held(param_00,param_01) +{ + if(isdefined(param_01)) + { + if(isdefined(level.var_861[param_01])) + { + return 1; + } + } + + return isdefined(level.var_861[param_00]); +} + +//Function Number: 49 +button_is_clicked(param_00,param_01) +{ + if(isdefined(param_01)) + { + if(isdefined(level.var_866[param_01])) + { + return 1; + } + } + + return isdefined(level.var_866[param_00]); +} + +//Function Number: 50 +toggle_entity_selection(param_00,param_01) +{ + if(isdefined(level.var_85E[param_00])) + { + deselect_entity(param_00,param_01); + return; + } + + select_entity(param_00,param_01); +} + +//Function Number: 51 +select_entity(param_00,param_01) +{ + if(isdefined(level.var_85E[param_00])) + { + return; + } + + reset_fx_hud_colors(); + level notify("new_ent_selection"); + param_01 thread entity_highlight_enable(); + level.var_85E[param_00] = 1; + level.var_81F[level.var_81F.size] = param_01; +} + +//Function Number: 52 +ent_is_highlighted(param_00) +{ + if(!isdefined(level.var_868)) + { + return 0; + } + + return param_00 == level.var_868; +} + +//Function Number: 53 +deselect_entity(param_00,param_01) +{ + if(!isdefined(level.var_85E[param_00])) + { + return; + } + + reset_fx_hud_colors(); + level notify("new_ent_selection"); + level.var_85E[param_00] = undefined; + if(!ent_is_highlighted(param_01)) + { + param_01 thread entity_highlight_disable(); + } + + var_02 = []; + for(var_03 = 0;var_03 < level.var_81F.size;var_03++) + { + if(level.var_81F[var_03] != param_01) + { + var_02[var_02.size] = level.var_81F[var_03]; + } + } + + level.var_81F = var_02; +} + +//Function Number: 54 +index_is_selected(param_00) +{ + return isdefined(level.var_85E[param_00]); +} + +//Function Number: 55 +ent_is_selected(param_00) +{ + for(var_01 = 0;var_01 < level.var_81F.size;var_01++) + { + if(level.var_81F[var_01] == param_00) + { + return 1; + } + } + + return 0; +} + +//Function Number: 56 +clear_entity_selection() +{ + for(var_00 = 0;var_00 < level.var_81F.size;var_00++) + { + if(!ent_is_highlighted(level.var_81F[var_00])) + { + level.var_81F[var_00] thread entity_highlight_disable(); + } + } + + level.var_85E = []; + level.var_81F = []; +} + +//Function Number: 57 +draw_axis() +{ + var_00 = 25 * getdvarfloat("createfx_scaleid"); + var_01 = anglestoforward(self.v["angles"]); + var_01 = var_01 * var_00; + var_02 = anglestoright(self.v["angles"]); + var_02 = var_02 * var_00; + var_03 = anglestoup(self.v["angles"]); + var_03 = var_03 * var_00; +} + +//Function Number: 58 +clear_fx_hudelements() +{ + level.var_857 clearalltextafterhudelem(); + for(var_00 = 0;var_00 < level.var_83E;var_00++) + { + for(var_01 = 0;var_01 < 1;var_01++) + { + level.var_833[var_00][var_01] settext(""); + } + } + + level.var_893 = 0; +} + +//Function Number: 59 +set_fx_hudelement(param_00) +{ + for(var_01 = 0;var_01 < 1;var_01++) + { + level.var_833[level.var_893][var_01] settext(param_00); + } + + level.var_893++; +} + +//Function Number: 60 +createfx_centerprint(param_00) +{ + thread createfx_centerprint_thread(param_00); +} + +//Function Number: 61 +createfx_centerprint_thread(param_00) +{ + level notify("new_createfx_centerprint"); + level endon("new_createfx_centerprint"); + for(var_01 = 0;var_01 < 5;var_01++) + { + level.createfx_centerprint[var_01] settext(param_00); + } + + wait 4.5; + for(var_01 = 0;var_01 < 5;var_01++) + { + level.createfx_centerprint[var_01] settext(""); + } +} + +//Function Number: 62 +buttondown(param_00,param_01) +{ + return buttonpressed_internal(param_00) || buttonpressed_internal(param_01); +} + +//Function Number: 63 +buttonpressed_internal(param_00) +{ + if(!isdefined(param_00)) + { + return 0; + } + + if(kb_locked(param_00)) + { + return 0; + } + + return level.player buttonpressed(param_00); +} + +//Function Number: 64 +get_selected_move_vector() +{ + var_00 = level.player getplayerangles()[1]; + var_01 = (0,var_00,0); + var_02 = anglestoright(var_01); + var_03 = anglestoforward(var_01); + var_04 = anglestoup(var_01); + var_05 = 0; + var_06 = 1; + if(buttondown("kp_uparrow","DPAD_UP")) + { + if(level.var_859 < 0) + { + level.var_859 = 0; + } + + level.var_859 = level.var_859 + var_06; + } + else if(buttondown("kp_downarrow","DPAD_DOWN")) + { + if(level.var_859 > 0) + { + level.var_859 = 0; + } + + level.var_859 = level.var_859 - var_06; + } + else + { + level.var_859 = 0; + } + + if(buttondown("kp_rightarrow","DPAD_RIGHT")) + { + if(level.var_85A < 0) + { + level.var_85A = 0; + } + + level.var_85A = level.var_85A + var_06; + } + else if(buttondown("kp_leftarrow","DPAD_LEFT")) + { + if(level.var_85A > 0) + { + level.var_85A = 0; + } + + level.var_85A = level.var_85A - var_06; + } + else + { + level.var_85A = 0; + } + + if(buttondown("BUTTON_Y")) + { + if(level.var_858 < 0) + { + level.var_858 = 0; + } + + level.var_858 = level.var_858 + var_06; + } + else if(buttondown("BUTTON_B")) + { + if(level.var_858 > 0) + { + level.var_858 = 0; + } + + level.var_858 = level.var_858 - var_06; + } + else + { + level.var_858 = 0; + } + + var_07 = (0,0,0); + var_07 = var_07 + var_03 * level.var_859; + var_07 = var_07 + var_02 * level.var_85A; + var_07 = var_07 + var_04 * level.var_858; + return var_07; +} + +//Function Number: 65 +process_button_held_and_clicked() +{ + add_button("mouse1"); + add_kb_button("shift"); + add_kb_button("ctrl"); + add_button("BUTTON_RSHLDR"); + add_button("BUTTON_LSHLDR"); + add_button("BUTTON_RSTICK"); + add_button("BUTTON_LSTICK"); + add_button("BUTTON_A"); + add_button("BUTTON_B"); + add_button("BUTTON_X"); + add_button("BUTTON_Y"); + add_button("DPAD_UP"); + add_button("DPAD_LEFT"); + add_button("DPAD_RIGHT"); + add_button("DPAD_DOWN"); + add_kb_button("escape"); + add_kb_button("a"); + add_kb_button("g"); + add_button("F1"); + add_button("F5"); + add_button("F2"); + add_kb_button("c"); + add_kb_button("h"); + add_kb_button("i"); + add_kb_button("k"); + add_kb_button("l"); + add_kb_button("m"); + add_kb_button("p"); + add_kb_button("x"); + add_button("del"); + add_kb_button("end"); + add_kb_button("tab"); + add_kb_button("ins"); + add_kb_button("add"); + add_kb_button("space"); + add_kb_button("enter"); + add_kb_button("v"); + add_kb_button("1"); + add_kb_button("2"); + add_kb_button("3"); + add_kb_button("4"); + add_kb_button("5"); + add_kb_button("6"); + add_kb_button("7"); + add_kb_button("8"); + add_kb_button("9"); + add_kb_button("0"); +} + +//Function Number: 66 +locked(param_00) +{ + if(isdefined(level.var_85F[param_00])) + { + return 0; + } + + return kb_locked(param_00); +} + +//Function Number: 67 +kb_locked(param_00) +{ + return level.var_832 && isdefined(level.var_867[param_00]); +} + +//Function Number: 68 +add_button(param_00) +{ + if(locked(param_00)) + { + return; + } + + if(!isdefined(level.var_861[param_00])) + { + if(level.player buttonpressed(param_00)) + { + level.var_861[param_00] = 1; + level.var_866[param_00] = 1; + return; + } + + return; + } + + if(!level.player buttonpressed(param_00)) + { + level.var_861[param_00] = undefined; + } +} + +//Function Number: 69 +add_kb_button(param_00) +{ + level.var_867[param_00] = 1; + add_button(param_00); +} + +//Function Number: 70 +set_anglemod_move_vector() +{ + var_00 = 2; + if(buttondown("kp_uparrow","DPAD_UP")) + { + if(level.var_85B < 0) + { + level.var_85B = 0; + } + + level.var_85B = level.var_85B + var_00; + } + else if(buttondown("kp_downarrow","DPAD_DOWN")) + { + if(level.var_85B > 0) + { + level.var_85B = 0; + } + + level.var_85B = level.var_85B - var_00; + } + else + { + level.var_85B = 0; + } + + if(buttondown("kp_leftarrow","DPAD_LEFT")) + { + if(level.var_85D < 0) + { + level.var_85D = 0; + } + + level.var_85D = level.var_85D + var_00; + } + else if(buttondown("kp_rightarrow","DPAD_RIGHT")) + { + if(level.var_85D > 0) + { + level.var_85D = 0; + } + + level.var_85D = level.var_85D - var_00; + } + else + { + level.var_85D = 0; + } + + if(buttondown("BUTTON_Y")) + { + if(level.var_85C < 0) + { + level.var_85C = 0; + } + + level.var_85C = level.var_85C + var_00; + return; + } + + if(buttondown("BUTTON_B")) + { + if(level.var_85C > 0) + { + level.var_85C = 0; + } + + level.var_85C = level.var_85C - var_00; + return; + } + + level.var_85C = 0; +} + +//Function Number: 71 +cfxprintlnstart() +{ + common_scripts\utility::fileprint_launcher_start_file(); +} + +//Function Number: 72 +cfxprintln(param_00,param_01) +{ + common_scripts\utility::fileprint_launcher(param_01); + if(param_00 == -1) + { + } +} + +//Function Number: 73 +cfxprintlnend(param_00,param_01,param_02) +{ + var_03 = 1; + if(param_02 != "" || param_01) + { + var_03 = 0; + } + + var_04 = common_scripts\utility::get_template_level() + param_02 + "_fx.gsc"; + if(param_01) + { + var_04 = "backup.gsc"; + } + + common_scripts\utility::fileprint_launcher_end_file("/share/raw/maps/createfx/" + var_04,var_03); +} + +//Function Number: 74 +update_selected_entities() +{ + for(var_00 = 0;var_00 < level.var_81F.size;var_00++) + { + var_01 = level.var_81F[var_00]; + var_01 [[ level.func_updatefx ]](); + } +} + +//Function Number: 75 +hack_start(param_00) +{ + if(!isdefined(param_00)) + { + param_00 = "painter_mp"; + } + + precachemenu(param_00); + wait 0.05; + if(param_00 == "painter_mp") + { + return; + } + + level.player openpopupmenu(param_00); + level.player closepopupmenu(param_00); +} + +//Function Number: 76 +get_player() +{ + return getentarray("player","classname")[0]; +} + +//Function Number: 77 +createfx_orgranize_array() +{ + var_00 = []; + var_01 = []; + foreach(var_04, var_03 in var_7B) + { + var_01[var_04] = []; + } + + foreach(var_06 in level.createfxent) + { + var_07 = 0; + foreach(var_04, var_09 in var_7B) + { + if(var_06.v["type"] != var_09) + { + continue; + } + + var_07 = 1; + var_01[var_04][var_01[var_04].size] = var_06; + break; + } + } + + var_0B = []; + for(var_0C = 0;var_0C < var_7B.size;var_0C++ = var_7B[4]) + { + foreach(var_06 in var_01[var_0C]) + { + var_0B[var_0B.size] = var_06; + } + } + + level.createfxent = var_0B; +} + +//Function Number: 78 +stop_fx_looper() +{ + if(isdefined(self.looper)) + { + self.looper delete(); + } + + stop_loopsound(); +} + +//Function Number: 79 +stop_loopsound() +{ + self notify("stop_loop"); +} + +//Function Number: 80 +func_get_level_fx() +{ + if(!isdefined(level.var_8AA)) + { + var_00 = getarraykeys(level._effect); + } + else + { + var_00 = getarraykeys(level._effect); + if(var_00.size == level.var_8AA.size) + { + return level.var_8AA; + } + } + + var_00 = common_scripts\utility::alphabetize(var_00); + level.var_8AA = var_00; + return var_00; +} + +//Function Number: 81 +restart_fx_looper() +{ + stop_fx_looper(); + set_forward_and_up_vectors(); + if(self.v["type"] == "loopfx") + { + common_scripts\_fx::create_looper(); + } + + if(self.v["type"] == "oneshotfx") + { + common_scripts\_fx::create_triggerfx(); + } + + if(self.v["type"] == "soundfx") + { + common_scripts\_fx::create_loopsound(); + } + + if(self.v["type"] == "soundfx_interval") + { + common_scripts\_fx::create_interval_sound(); + } +} + +//Function Number: 82 +process_fx_rotater() +{ + if(level.var_863) + { + return; + } + + set_anglemod_move_vector(); + if(!rotation_is_occuring()) + { + return; + } + + level.var_863 = 1; + if(level.var_81F.size > 1) + { + var_00 = get_center_of_array(level.var_81F); + var_01 = spawn("script_origin",var_00); + var_01.v["angles"] = level.var_81F[0].v["angles"]; + var_01.v["origin"] = var_00; + var_02 = []; + for(var_03 = 0;var_03 < level.var_81F.size;var_03++) + { + var_02[var_03] = spawn("script_origin",level.var_81F[var_03].v["origin"]); + var_02[var_03].angles = level.var_81F[var_03].v["angles"]; + var_02[var_03] linkto(var_01); + } + + rotate_over_time(var_01,var_02); + var_01 delete(); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + var_02[var_03] delete(); + } + } + else if(level.var_81F.size == 1) + { + var_04 = level.var_81F[0]; + var_02 = spawn("script_origin",(0,0,0)); + var_02.angles = var_04.v["angles"]; + if(level.var_85B != 0) + { + var_02 addpitch(level.var_85B); + } + else if(level.var_85D != 0) + { + var_02 addyaw(level.var_85D); + } + else + { + var_02 addroll(level.var_85C); + } + + var_04.v["angles"] = var_02.angles; + var_02 delete(); + wait 0.05; + } + + level.var_863 = 0; +} + +//Function Number: 83 +generate_fx_log(param_00) +{ +} \ No newline at end of file diff --git a/MW3/PC/MP/common_scripts/_createfxmenu.gsc b/MW3/PC/MP/common_scripts/_createfxmenu.gsc new file mode 100644 index 0000000..2a3bf51 --- /dev/null +++ b/MW3/PC/MP/common_scripts/_createfxmenu.gsc @@ -0,0 +1,634 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: common_scripts\_createfxmenu.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 25 + * Decompile Time: 423 ms + * Timestamp: 10/27/2023 2:15:42 AM +*******************************************************************/ + +//Function Number: 1 +menu(param_00) +{ + return level.create_fx_menu == param_00; +} + +//Function Number: 2 +setmenu(param_00) +{ + level.create_fx_menu = param_00; +} + +//Function Number: 3 +create_fx_menu() +{ + if(common_scripts\_createfx::button_is_clicked("escape","x")) + { + _exit_menu(); + return; + } + + if(menu("creation")) + { + if(common_scripts\_createfx::button_is_clicked("1")) + { + setmenu("create_oneshot"); + draw_effects_list(); + return; + } + + if(common_scripts\_createfx::button_is_clicked("2")) + { + setmenu("create_loopfx"); + draw_effects_list(); + return; + } + + if(common_scripts\_createfx::button_is_clicked("3")) + { + setmenu("create_loopsound"); + var_00 = common_scripts\_createfx::createloopsound(); + finish_creating_entity(var_00); + return; + } + + if(common_scripts\_createfx::button_is_clicked("4")) + { + setmenu("create_exploder"); + var_00 = common_scripts\_createfx::createnewexploder(); + finish_creating_entity(var_00); + return; + } + + if(common_scripts\_createfx::button_is_clicked("5")) + { + setmenu("create_interval_sound"); + var_00 = common_scripts\_createfx::createintervalsound(); + finish_creating_entity(var_00); + return; + } + + return; + } + + if(menu("create_oneshot") || menu("create_loopfx") || menu("change_fxid")) + { + if(common_scripts\_createfx::button_is_clicked("m")) + { + increment_list_offset(); + draw_effects_list(); + } + + menu_fx_creation(); + return; + } + + if(menu("none")) + { + if(common_scripts\_createfx::button_is_clicked("m")) + { + increment_list_offset(); + } + + menu_change_selected_fx(); + if(entities_are_selected()) + { + var_01 = get_last_selected_entity(); + if(!isdefined(level.var_818) || var_01 != level.var_818) + { + display_fx_info(var_01); + level.var_818 = var_01; + } + + if(common_scripts\_createfx::button_is_clicked("a")) + { + common_scripts\_createfx::reset_fx_hud_colors(); + setmenu("add_options"); + return; + } + + return; + } + + return; + } + + if(menu("add_options")) + { + if(!entities_are_selected()) + { + common_scripts\_createfx::clear_fx_hudelements(); + setmenu("none"); + return; + } + + display_fx_add_options(get_last_selected_entity()); + if(common_scripts\_createfx::button_is_clicked("m")) + { + increment_list_offset(); + return; + } + + return; + } +} + +//Function Number: 4 +_exit_menu() +{ + common_scripts\_createfx::clear_fx_hudelements(); + common_scripts\_createfx::clear_entity_selection(); + common_scripts\_createfx::update_selected_entities(); + setmenu("none"); +} + +//Function Number: 5 +get_last_selected_entity() +{ + return level.var_81F[level.var_81F.size - 1]; +} + +//Function Number: 6 +menu_fx_creation() +{ + var_00 = 0; + var_01 = undefined; + var_02 = common_scripts\_createfx::func_get_level_fx(); + for(var_03 = level.var_822;var_03 < var_02.size;var_03++) + { + var_00 = var_00 + 1; + var_04 = var_00; + if(var_04 == 10) + { + var_04 = 0; + } + + if(common_scripts\_createfx::button_is_clicked(var_04 + "")) + { + var_01 = var_02[var_03]; + break; + } + + if(var_00 > level.var_823) + { + break; + } + } + + if(!isdefined(var_01)) + { + return; + } + + if(menu("change_fxid")) + { + apply_option_to_selected_fx(get_option("fxid"),var_01); + level.var_822 = 0; + common_scripts\_createfx::clear_fx_hudelements(); + setmenu("none"); + return; + } + + var_05 = undefined; + if(menu("create_loopfx")) + { + var_05 = common_scripts\utility::createloopeffect(var_01); + } + + if(menu("create_oneshot")) + { + var_05 = common_scripts\utility::createoneshoteffect(var_01); + } + + finish_creating_entity(var_05); +} + +//Function Number: 7 +finish_creating_entity(param_00) +{ + param_00.v["angles"] = vectortoangles(param_00.v["origin"] + (0,0,100) - param_00.v["origin"]); + param_00 common_scripts\_createfx::post_entity_creation_function(); + common_scripts\_createfx::clear_entity_selection(); + common_scripts\_createfx::select_last_entity(); + common_scripts\_createfx::move_selection_to_cursor(); + common_scripts\_createfx::update_selected_entities(); + setmenu("none"); +} + +//Function Number: 8 +menu_init() +{ + level.var_82A = []; + addoption("string","fxid","The FX","nil","fx"); + addoption("float","delay","Repeat rate/start delay",0.5,"fx"); + addoption("float","fire_range","Fire damage range",0,"fx"); + addoption("string","flag","Flag","nil","exploder"); + addoption("string","firefx","2nd FX id","nil","exploder"); + addoption("float","firefxdelay","2nd FX id repeat rate",0.5,"exploder"); + addoption("float","firefxtimeout","2nd FX timeout",5,"exploder"); + addoption("string","firefxsound","2nd FX soundalias","nil","exploder"); + addoption("float","damage","Radius damage",150,"exploder"); + addoption("float","damage_radius","Radius of radius damage",250,"exploder"); + addoption("float","delay_min","Minimimum time between repeats",1,"soundfx_interval"); + addoption("float","delay_max","Maximum time between repeats",2,"soundfx_interval"); + addoption("int","repeat","Number of times to repeat",5,"exploder"); + addoption("string","exploder","Exploder","1","exploder"); + addoption("string","earthquake","Earthquake","nil","exploder"); + if(!level.mp_createfx) + { + addoption("string","rumble","Rumble","nil","exploder"); + } + + addoption("string","ender","Level notify for ending 2nd FX","nil","exploder"); + addoption("string","soundalias","Soundalias","nil","all"); + addoption("string","loopsound","Loopsound","nil","exploder"); + if(!level.mp_createfx) + { + addoption("int","stoppable","Can be stopped from script","1","all"); + } + + level.var_822 = 0; + level.var_823 = 10; + level.var_82C = []; + level.var_82C["all"] = []; + level.var_82C["all"]["exploder"] = 1; + level.var_82C["all"]["oneshotfx"] = 1; + level.var_82C["all"]["loopfx"] = 1; + level.var_82C["all"]["soundfx"] = 1; + level.var_82C["all"]["soundfx_interval"] = 1; + level.var_82C["fx"] = []; + level.var_82C["fx"]["exploder"] = 1; + level.var_82C["fx"]["oneshotfx"] = 1; + level.var_82C["fx"]["loopfx"] = 1; + level.var_82C["exploder"] = []; + level.var_82C["exploder"]["exploder"] = 1; + level.var_82C["loopfx"] = []; + level.var_82C["loopfx"]["loopfx"] = 1; + level.var_82C["oneshotfx"] = []; + level.var_82C["oneshotfx"]["oneshotfx"] = 1; + level.var_82C["soundfx"] = []; + level.var_82C["soundfx"]["soundalias"] = 1; + level.var_82C["soundfx_interval"] = []; + level.var_82C["soundfx_interval"]["soundfx_interval"] = 1; +} + +//Function Number: 9 +get_last_selected_ent() +{ + return level.var_81F[level.var_81F.size - 1]; +} + +//Function Number: 10 +entities_are_selected() +{ + return level.var_81F.size > 0; +} + +//Function Number: 11 +menu_change_selected_fx() +{ + if(!level.var_81F.size) + { + return; + } + + var_00 = 0; + var_01 = 0; + var_02 = get_last_selected_ent(); + for(var_03 = 0;var_03 < level.var_82A.size;var_03++) + { + var_04 = level.var_82A[var_03]; + if(!isdefined(var_02.v[var_04["name"]])) + { + continue; + } + + var_00++; + if(var_00 < level.var_822) + { + continue; + } + + var_01++; + var_05 = var_01; + if(var_05 == 10) + { + var_05 = 0; + } + + if(common_scripts\_createfx::button_is_clicked(var_05 + "")) + { + prepare_option_for_change(var_04,var_01); + break; + } + + if(var_01 > level.var_823) + { + var_06 = 1; + break; + } + } +} + +//Function Number: 12 +prepare_option_for_change(param_00,param_01) +{ + if(param_00["name"] == "fxid") + { + setmenu("change_fxid"); + draw_effects_list(); + return; + } + + common_scripts\_createfx::createfx_centerprint("To change " + param_00["description"] + " on selected entities, type /fx newvalue"); + level.var_832 = 1; + set_option_index(param_00["name"]); + setdvar("fx","nil"); + level.var_833[param_01 + 3][0].color = (1,1,0); +} + +//Function Number: 13 +menu_fx_option_set() +{ + if(getdvar("fx") == "nil") + { + return; + } + + var_00 = get_selected_option(); + var_01 = undefined; + if(var_00["type"] == "string") + { + var_01 = getdvar("fx"); + } + + if(var_00["type"] == "int") + { + var_01 = getdvarint("fx"); + } + + if(var_00["type"] == "float") + { + var_01 = getdvarfloat("fx"); + } + + apply_option_to_selected_fx(var_00,var_01); +} + +//Function Number: 14 +apply_option_to_selected_fx(param_00,param_01) +{ + for(var_02 = 0;var_02 < level.var_81F.size;var_02++) + { + var_03 = level.var_81F[var_02]; + if(mask(param_00["mask"],var_03.v["type"])) + { + var_03.v[param_00["name"]] = param_01; + } + } + + level.var_818 = undefined; + common_scripts\_createfx::update_selected_entities(); + common_scripts\_createfx::reset_fx_hud_colors(); +} + +//Function Number: 15 +set_option_index(param_00) +{ + for(var_01 = 0;var_01 < level.var_82A.size;var_01++) + { + if(level.var_82A[var_01]["name"] != param_00) + { + continue; + } + + level.var_837 = var_01; + return; + } +} + +//Function Number: 16 +get_selected_option() +{ + return level.var_82A[level.var_837]; +} + +//Function Number: 17 +mask(param_00,param_01) +{ + return isdefined(level.var_82C[param_00][param_01]); +} + +//Function Number: 18 +addoption(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = []; + level.var_82A[level.var_82A.size] = var_7B; +} + +//Function Number: 19 +get_option(param_00) +{ + for(var_01 = 0;var_01 < level.var_82A.size;var_01++) + { + if(level.var_82A[var_01]["name"] == param_00) + { + return level.var_82A[var_01]; + } + } +} + +//Function Number: 20 +display_fx_info(param_00) +{ + if(!menu("none")) + { + return; + } + + common_scripts\_createfx::clear_fx_hudelements(); + common_scripts\_createfx::set_fx_hudelement("Name: " + param_00.v["fxid"]); + common_scripts\_createfx::set_fx_hudelement("Type: " + param_00.v["type"]); + common_scripts\_createfx::set_fx_hudelement("Origin: " + param_00.v["origin"]); + common_scripts\_createfx::set_fx_hudelement("Angles: " + param_00.v["angles"]); + if(entities_are_selected()) + { + var_01 = 0; + var_02 = 0; + var_03 = 0; + for(var_04 = 0;var_04 < level.var_82A.size;var_04++) + { + var_05 = level.var_82A[var_04]; + if(!isdefined(param_00.v[var_05["name"]])) + { + continue; + } + + var_01++; + if(var_01 < level.var_822) + { + continue; + } + + var_02++; + common_scripts\_createfx::set_fx_hudelement(var_02 + ". " + var_05["description"] + ": " + param_00.v[var_05["name"]]); + if(var_02 > level.var_823) + { + var_03 = 1; + break; + } + } + + if(var_01 > level.var_823) + { + common_scripts\_createfx::set_fx_hudelement("(m) More >"); + } + + common_scripts\_createfx::set_fx_hudelement("(a) Add >"); + common_scripts\_createfx::set_fx_hudelement("(x) Exit >"); + return; + } + + var_01 = 0; + var_03 = 0; + for(var_04 = 0;var_04 < level.var_82A.size;var_04++) + { + var_05 = level.var_82A[var_04]; + if(!isdefined(param_00.v[var_05["name"]])) + { + continue; + } + + var_01++; + common_scripts\_createfx::set_fx_hudelement(var_05["description"] + ": " + param_00.v[var_05["name"]]); + if(var_01 > level.var_83E) + { + break; + } + } +} + +//Function Number: 21 +display_fx_add_options(param_00) +{ + common_scripts\_createfx::clear_fx_hudelements(); + common_scripts\_createfx::set_fx_hudelement("Name: " + param_00.v["fxid"]); + common_scripts\_createfx::set_fx_hudelement("Type: " + param_00.v["type"]); + common_scripts\_createfx::set_fx_hudelement("Origin: " + param_00.v["origin"]); + common_scripts\_createfx::set_fx_hudelement("Angles: " + param_00.v["angles"]); + var_01 = 0; + var_02 = 0; + var_03 = 0; + if(level.var_822 >= level.var_82A.size) + { + level.var_822 = 0; + } + + for(var_04 = 0;var_04 < level.var_82A.size;var_04++) + { + var_05 = level.var_82A[var_04]; + if(isdefined(param_00.v[var_05["name"]])) + { + continue; + } + + if(!mask(var_05["mask"],param_00.v["type"])) + { + continue; + } + + var_01++; + if(var_01 < level.var_822) + { + continue; + } + + if(var_02 >= level.var_823) + { + continue; + } + + var_02++; + var_06 = var_02; + if(var_06 == 10) + { + var_06 = 0; + } + + if(common_scripts\_createfx::button_is_clicked(var_06 + "")) + { + add_option_to_selected_entities(var_05); + menunone(); + level.var_818 = undefined; + return; + } + + common_scripts\_createfx::set_fx_hudelement(var_06 + ". " + var_05["description"]); + } + + if(var_01 > level.var_823) + { + common_scripts\_createfx::set_fx_hudelement("(m) More >"); + } + + common_scripts\_createfx::set_fx_hudelement("(x) Exit >"); +} + +//Function Number: 22 +add_option_to_selected_entities(param_00) +{ + var_01 = undefined; + for(var_02 = 0;var_02 < level.var_81F.size;var_02++) + { + var_03 = level.var_81F[var_02]; + if(mask(param_00["mask"],var_03.v["type"])) + { + var_03.v[param_00["name"]] = param_00["default"]; + } + } +} + +//Function Number: 23 +menunone() +{ + level.var_822 = 0; + common_scripts\_createfx::clear_fx_hudelements(); + setmenu("none"); +} + +//Function Number: 24 +draw_effects_list() +{ + common_scripts\_createfx::clear_fx_hudelements(); + common_scripts\_createfx::set_fx_hudelement("Pick an effect:"); + var_00 = 0; + var_01 = 0; + var_02 = common_scripts\_createfx::func_get_level_fx(); + if(level.var_822 >= var_02.size) + { + level.var_822 = 0; + } + + for(var_03 = level.var_822;var_03 < var_02.size;var_03++) + { + var_00 = var_00 + 1; + common_scripts\_createfx::set_fx_hudelement(var_00 + ". " + var_02[var_03]); + if(var_00 >= level.var_823) + { + var_01 = 1; + break; + } + } + + if(var_02.size > level.var_823) + { + common_scripts\_createfx::set_fx_hudelement("(m) More >"); + } +} + +//Function Number: 25 +increment_list_offset() +{ + level.var_822 = level.var_822 + level.var_823; +} \ No newline at end of file diff --git a/MW3/PC/MP/common_scripts/_destructible.gsc b/MW3/PC/MP/common_scripts/_destructible.gsc new file mode 100644 index 0000000..0517b0c --- /dev/null +++ b/MW3/PC/MP/common_scripts/_destructible.gsc @@ -0,0 +1,3187 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: common_scripts\_destructible.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 99 + * Decompile Time: 1913 ms + * Timestamp: 10/27/2023 2:16:25 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level.var_E38 = 50; + level.var_E39 = []; + level.var_E3A = 0; + level.var_E3B = gettime(); + if(!isdefined(level.var_E3C)) + { + level.var_E3C = 0; + } + + if(!isdefined(level.func)) + { + level.func = []; + } + + var_00 = 1; + if(var_00) + { + find_destructibles(); + } + + var_01 = getentarray("delete_on_load","targetname"); + foreach(var_03 in var_01) + { + var_03 delete(); + } + + init_destroyed_count(); + init_destructible_frame_queue(); +} + +//Function Number: 2 +warn_about_old_destructible() +{ + wait 1; + var_00 = getentarray("destructible","targetname"); + if(var_00.size != 0) + { + foreach(var_02 in var_00) + { + } + } +} + +//Function Number: 3 +find_destructibles() +{ + var_00 = []; + switch(getdvar("mapname")) + { + case "mp_interchange": + break; + var_7B[var_7B.size] + (3.4,-912.9,646.9) + var_7B[var_7B.size] + (2096,1042.5,580.4) + var_7B[var_7B.size] + (2061.6,643.2,597.7) + var_7B[var_7B.size] + (1662.3,687.5,599.9) + var_7B[var_7B.size] + (1418.6,311.3,602.1) + var_7B[var_7B.size] + (-29.3,695.7,349) + var_7B[var_7B.size] + (-1030.6,2989.5,445.5) + var_7B[var_7B.size] + (-1347.8,2905.9,445.9) + var_7B[var_7B.size] + (-2966.6,1288.5,378) + var_7B[var_7B.size] + (-2038.3,613,378) + var_7B[var_7B.size] + (845.6,-1766.3,400.6) + var_7B[var_7B.size] + (1276.2,-1882.9,403) + var_7B[var_7B.size] + (1497.2,-2220.9,449.5) + var_7B[var_7B.size] + (2694.9,-3433,414.4) + var_7B[var_7B.size] + (2920.1,-3423.3,416.6) + var_7B[var_7B.size] + (1719.8,-711,328.5) + var_7B[var_7B.size] + (2451.2,-1034.6,345.6) + var_7B[var_7B.size] + (2852.6,-1220.7,345.6) + var_7B[var_7B.size] + (3503.7,-1634.5,345.6) + var_7B[var_7B.size] + (3333.3,-1743.4,345.6) + var_7B[var_7B.size] + (4070.5,-2049.2,349.2) + var_7B[var_00.size] + (4172.8,-1887,345.9) + break; + } + + var_01 = getentarray("destructible_vehicle","targetname"); + foreach(var_03 in var_01) + { + switch(getdvar("mapname")) + { + case "mp_interchange": + if(var_03.origin[2] > 150) + { + var_04 = 0; + foreach(var_06 in var_7B) + { + if(int(var_03.origin[0]) == int(var_06[0]) && int(var_03.origin[1]) == int(var_06[1]) && int(var_03.origin[2]) == int(var_06[2])) + { + var_04 = 1; + break; + } + } + + if(var_04) + { + break; + } + } + break; + } + + var_03 setup_destructibles(); + } + + var_09 = getentarray("destructible_toy","targetname"); + foreach(var_0B in var_09) + { + var_0B setup_destructibles(); + } +} + +//Function Number: 4 +setup_destructibles(param_00) +{ + if(!isdefined(param_00)) + { + param_00 = 0; + } + + var_01 = undefined; + self.modeldummyon = 0; + add_damage_owner_recorder(); + self.destructibleinfo = common_scripts\_destructible_types::maketype(self.destructible_type); + if(self.destructibleinfo < 0) + { + return; + } + + if(!param_00) + { + precache_destructibles(); + } + + add_destructible_fx(); + if(isdefined(level.destructible_type[self.destructibleinfo].var_E42)) + { + self.var_E43 = []; + for(var_03 = 0;var_03 < level.destructible_type[self.destructibleinfo].var_E42.size;var_03++) + { + self.var_E43[var_03] = spawnstruct(); + self.var_E43[var_03].v["currentState"] = 0; + if(isdefined(level.destructible_type[self.destructibleinfo].var_E42[var_03][0].v["health"])) + { + self.var_E43[var_03].v["health"] = level.destructible_type[self.destructibleinfo].var_E42[var_03][0].v["health"]; + } + + if(isdefined(level.destructible_type[self.destructibleinfo].var_E42[var_03][0].v["random_dynamic_attachment_1"])) + { + var_04 = randomint(level.destructible_type[self.destructibleinfo].var_E42[var_03][0].v["random_dynamic_attachment_1"].size); + var_05 = level.destructible_type[self.destructibleinfo].var_E42[var_03][0].v["random_dynamic_attachment_tag"][var_04]; + var_06 = level.destructible_type[self.destructibleinfo].var_E42[var_03][0].v["random_dynamic_attachment_1"][var_04]; + var_07 = level.destructible_type[self.destructibleinfo].var_E42[var_03][0].v["random_dynamic_attachment_2"][var_04]; + var_08 = level.destructible_type[self.destructibleinfo].var_E42[var_03][0].v["clipToRemove"][var_04]; + thread do_random_dynamic_attachment(var_05,var_06,var_07,var_08); + } + + if(var_03 == 0) + { + continue; + } + + var_09 = level.destructible_type[self.destructibleinfo].var_E42[var_03][0].v["modelName"]; + var_0A = level.destructible_type[self.destructibleinfo].var_E42[var_03][0].v["tagName"]; + for(var_0B = 1;isdefined(level.destructible_type[self.destructibleinfo].var_E42[var_03][var_0B]);var_0B++) + { + var_0C = level.destructible_type[self.destructibleinfo].var_E42[var_03][var_0B].v["tagName"]; + var_0D = level.destructible_type[self.destructibleinfo].var_E42[var_03][var_0B].v["modelName"]; + if(isdefined(var_0C) && var_0C != var_0A) + { + hideapart(var_0C); + if(self.modeldummyon) + { + self.modeldummy hideapart(var_0C); + } + } + } + } + } + + if(isdefined(self.target)) + { + thread destructible_handles_collision_brushes(); + } + + if(self.code_classname != "script_vehicle") + { + self setcandamage(1); + } + + if(common_scripts\utility::issp()) + { + thread connecttraverses(); + } + + thread destructible_think(); +} + +//Function Number: 5 +destructible_create(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if(!isdefined(level.destructible_type)) + { + level.destructible_type = []; + } + + var_06 = level.destructible_type.size; + var_06 = level.destructible_type.size; + level.destructible_type[var_06] = spawnstruct(); + level.destructible_type[var_06].v["type"] = param_00; + level.destructible_type[var_06].var_E42 = []; + level.destructible_type[var_06].var_E42[0][0] = spawnstruct(); + level.destructible_type[var_06].var_E42[0][0].v["modelName"] = self.model; + level.destructible_type[var_06].var_E42[0][0].v["tagName"] = param_01; + level.destructible_type[var_06].var_E42[0][0].v["health"] = param_02; + level.destructible_type[var_06].var_E42[0][0].v["validAttackers"] = param_03; + level.destructible_type[var_06].var_E42[0][0].v["validDamageZone"] = param_04; + level.destructible_type[var_06].var_E42[0][0].v["validDamageCause"] = param_05; + level.destructible_type[var_06].var_E42[0][0].v["godModeAllowed"] = 1; + level.destructible_type[var_06].var_E42[0][0].v["rotateTo"] = self.angles; + level.destructible_type[var_06].var_E42[0][0].v["vehicle_exclude_anim"] = 0; +} + +//Function Number: 6 +destructible_part(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09) +{ + var_0A = level.destructible_type.size - 1; + var_0B = level.destructible_type[var_0A].var_E42.size; + var_0C = 0; + destructible_info(var_0B,var_0C,param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,undefined,param_09); +} + +//Function Number: 7 +destructible_state(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07) +{ + var_08 = level.destructible_type.size - 1; + var_09 = level.destructible_type[var_08].var_E42.size - 1; + var_0A = level.destructible_type[var_08].var_E42[var_09].size; + if(!isdefined(param_00) && var_09 == 0) + { + param_00 = level.destructible_type[var_08].var_E42[var_09][0].v["tagName"]; + } + + destructible_info(var_09,var_0A,param_00,param_01,param_02,param_03,param_04,param_05,undefined,undefined,param_06,param_07); +} + +//Function Number: 8 +destructible_fx(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if(!isdefined(param_02)) + { + param_02 = 1; + } + + if(!isdefined(param_04)) + { + param_04 = 0; + } + + if(!isdefined(param_05)) + { + param_05 = 0; + } + + var_06 = level.destructible_type.size - 1; + var_07 = level.destructible_type[var_06].var_E42.size - 1; + var_08 = level.destructible_type[var_06].var_E42[var_07].size - 1; + var_09 = 0; + if(isdefined(level.destructible_type[var_06].var_E42[var_07][var_08].v["fx_filename"])) + { + if(isdefined(level.destructible_type[var_06].var_E42[var_07][var_08].v["fx_filename"][param_04])) + { + var_09 = level.destructible_type[var_06].var_E42[var_07][var_08].v["fx_filename"][param_04].size; + } + } + + if(isdefined(param_03)) + { + level.destructible_type[var_06].var_E42[var_07][var_08].v["fx_valid_damagetype"][param_04][var_09] = param_03; + } + + level.destructible_type[var_06].var_E42[var_07][var_08].v["fx_filename"][param_04][var_09] = param_01; + level.destructible_type[var_06].var_E42[var_07][var_08].v["fx_tag"][param_04][var_09] = param_00; + level.destructible_type[var_06].var_E42[var_07][var_08].v["fx_useTagAngles"][param_04][var_09] = param_02; + level.destructible_type[var_06].var_E42[var_07][var_08].v["fx_cost"][param_04][var_09] = param_05; +} + +//Function Number: 9 +destructible_loopfx(param_00,param_01,param_02,param_03) +{ + if(!isdefined(param_03)) + { + param_03 = 0; + } + + var_04 = level.destructible_type.size - 1; + var_05 = level.destructible_type[var_04].var_E42.size - 1; + var_06 = level.destructible_type[var_04].var_E42[var_05].size - 1; + var_07 = 0; + if(isdefined(level.destructible_type[var_04].var_E42[var_05][var_06].v["loopfx_filename"])) + { + var_07 = level.destructible_type[var_04].var_E42[var_05][var_06].v["loopfx_filename"].size; + } + + level.destructible_type[var_04].var_E42[var_05][var_06].v["loopfx_filename"][var_07] = param_01; + level.destructible_type[var_04].var_E42[var_05][var_06].v["loopfx_tag"][var_07] = param_00; + level.destructible_type[var_04].var_E42[var_05][var_06].v["loopfx_rate"][var_07] = param_02; + level.destructible_type[var_04].var_E42[var_05][var_06].v["loopfx_cost"][var_07] = param_03; +} + +//Function Number: 10 +destructible_healthdrain(param_00,param_01,param_02,param_03) +{ + var_04 = level.destructible_type.size - 1; + var_05 = level.destructible_type[var_04].var_E42.size - 1; + var_06 = level.destructible_type[var_04].var_E42[var_05].size - 1; + level.destructible_type[var_04].var_E42[var_05][var_06].v["healthdrain_amount"] = param_00; + level.destructible_type[var_04].var_E42[var_05][var_06].v["healthdrain_interval"] = param_01; + level.destructible_type[var_04].var_E42[var_05][var_06].v["badplace_radius"] = param_02; + level.destructible_type[var_04].var_E42[var_05][var_06].v["badplace_team"] = param_03; +} + +//Function Number: 11 +destructible_sound(param_00,param_01,param_02) +{ + var_03 = level.destructible_type.size - 1; + var_04 = level.destructible_type[var_03].var_E42.size - 1; + var_05 = level.destructible_type[var_03].var_E42[var_04].size - 1; + if(!isdefined(param_02)) + { + param_02 = 0; + } + + if(!isdefined(level.destructible_type[var_03].var_E42[var_04][var_05].v["sound"])) + { + level.destructible_type[var_03].var_E42[var_04][var_05].v["sound"] = []; + level.destructible_type[var_03].var_E42[var_04][var_05].v["soundCause"] = []; + } + + if(!isdefined(level.destructible_type[var_03].var_E42[var_04][var_05].v["sound"][param_02])) + { + level.destructible_type[var_03].var_E42[var_04][var_05].v["sound"][param_02] = []; + level.destructible_type[var_03].var_E42[var_04][var_05].v["soundCause"][param_02] = []; + } + + var_06 = level.destructible_type[var_03].var_E42[var_04][var_05].v["sound"][param_02].size; + level.destructible_type[var_03].var_E42[var_04][var_05].v["sound"][param_02][var_06] = param_00; + level.destructible_type[var_03].var_E42[var_04][var_05].v["soundCause"][param_02][var_06] = param_01; +} + +//Function Number: 12 +destructible_loopsound(param_00,param_01) +{ + var_02 = level.destructible_type.size - 1; + var_03 = level.destructible_type[var_02].var_E42.size - 1; + var_04 = level.destructible_type[var_02].var_E42[var_03].size - 1; + if(!isdefined(level.destructible_type[var_02].var_E42[var_03][var_04].v["loopsound"])) + { + level.destructible_type[var_02].var_E42[var_03][var_04].v["loopsound"] = []; + level.destructible_type[var_02].var_E42[var_03][var_04].v["loopsoundCause"] = []; + } + + var_05 = level.destructible_type[var_02].var_E42[var_03][var_04].v["loopsound"].size; + level.destructible_type[var_02].var_E42[var_03][var_04].v["loopsound"][var_05] = param_00; + level.destructible_type[var_02].var_E42[var_03][var_04].v["loopsoundCause"][var_05] = param_01; +} + +//Function Number: 13 +destructible_anim(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08) +{ + if(!isdefined(param_03)) + { + param_03 = 0; + } + + if(!isdefined(param_04)) + { + param_04 = 0; + } + + var_09 = []; + add_array_to_destructible("animation",var_7B); +} + +//Function Number: 14 +destructible_spotlight(param_00) +{ + var_01 = []; + var_02 = []; + var_7B["dvars"] = var_02; + add_keypairs_to_destructible(var_7B); +} + +//Function Number: 15 +add_key_to_destructible(param_00,param_01) +{ + var_02 = []; + add_keypairs_to_destructible(var_7B); +} + +//Function Number: 16 +add_keypairs_to_destructible(param_00) +{ + var_01 = level.destructible_type.size - 1; + var_02 = level.destructible_type[var_01].var_E42.size - 1; + var_03 = level.destructible_type[var_01].var_E42[var_02].size - 1; + foreach(var_06, var_05 in param_00) + { + level.destructible_type[var_01].var_E42[var_02][var_03].v[var_06] = var_05; + } +} + +//Function Number: 17 +add_array_to_destructible(param_00,param_01) +{ + var_02 = level.destructible_type.size - 1; + var_03 = level.destructible_type[var_02].var_E42.size - 1; + var_04 = level.destructible_type[var_02].var_E42[var_03].size - 1; + var_05 = level.destructible_type[var_02].var_E42[var_03][var_04].v; + if(!isdefined(var_05[param_00])) + { + } + + var_1C[param_01] = var_7B[param_01].size; + level.destructible_type[var_04].var_E42[var_05][var_7B].v = var_1C; +} + +//Function Number: 18 +destructible_car_alarm() +{ + var_00 = level.destructible_type.size - 1; + var_01 = level.destructible_type[var_00].var_E42.size - 1; + var_02 = level.destructible_type[var_00].var_E42[var_01].size - 1; + level.destructible_type[var_00].var_E42[var_01][var_02].v["triggerCarAlarm"] = 1; +} + +//Function Number: 19 +destructible_lights_out(param_00) +{ + if(!isdefined(param_00)) + { + param_00 = 256; + } + + var_01 = level.destructible_type.size - 1; + var_02 = level.destructible_type[var_01].var_E42.size - 1; + var_03 = level.destructible_type[var_01].var_E42[var_02].size - 1; + level.destructible_type[var_01].var_E42[var_02][var_03].v["break_nearby_lights"] = param_00; +} + +//Function Number: 20 +random_dynamic_attachment(param_00,param_01,param_02,param_03) +{ + if(!isdefined(param_02)) + { + param_02 = ""; + } + + var_04 = level.destructible_type.size - 1; + var_05 = level.destructible_type[var_04].var_E42.size - 1; + var_06 = 0; + if(!isdefined(level.destructible_type[var_04].var_E42[var_05][var_06].v["random_dynamic_attachment_1"])) + { + level.destructible_type[var_04].var_E42[var_05][var_06].v["random_dynamic_attachment_1"] = []; + level.destructible_type[var_04].var_E42[var_05][var_06].v["random_dynamic_attachment_2"] = []; + level.destructible_type[var_04].var_E42[var_05][var_06].v["random_dynamic_attachment_tag"] = []; + } + + var_07 = level.destructible_type[var_04].var_E42[var_05][var_06].v["random_dynamic_attachment_1"].size; + level.destructible_type[var_04].var_E42[var_05][var_06].v["random_dynamic_attachment_1"][var_07] = param_01; + level.destructible_type[var_04].var_E42[var_05][var_06].v["random_dynamic_attachment_2"][var_07] = param_02; + level.destructible_type[var_04].var_E42[var_05][var_06].v["random_dynamic_attachment_tag"][var_07] = param_00; + level.destructible_type[var_04].var_E42[var_05][var_06].v["clipToRemove"][var_07] = param_03; +} + +//Function Number: 21 +destructible_physics(param_00,param_01) +{ + var_02 = level.destructible_type.size - 1; + var_03 = level.destructible_type[var_02].var_E42.size - 1; + var_04 = level.destructible_type[var_02].var_E42[var_03].size - 1; + if(!isdefined(level.destructible_type[var_02].var_E42[var_03][var_04].v["physics"])) + { + level.destructible_type[var_02].var_E42[var_03][var_04].v["physics"] = []; + level.destructible_type[var_02].var_E42[var_03][var_04].v["physics_tagName"] = []; + level.destructible_type[var_02].var_E42[var_03][var_04].v["physics_velocity"] = []; + } + + var_05 = level.destructible_type[var_02].var_E42[var_03][var_04].v["physics"].size; + level.destructible_type[var_02].var_E42[var_03][var_04].v["physics"][var_05] = 1; + level.destructible_type[var_02].var_E42[var_03][var_04].v["physics_tagName"][var_05] = param_00; + level.destructible_type[var_02].var_E42[var_03][var_04].v["physics_velocity"][var_05] = param_01; +} + +//Function Number: 22 +destructible_splash_damage_scaler(param_00) +{ + var_01 = level.destructible_type.size - 1; + var_02 = level.destructible_type[var_01].var_E42.size - 1; + var_03 = level.destructible_type[var_01].var_E42[var_02].size - 1; + level.destructible_type[var_01].var_E42[var_02][var_03].v["splash_damage_scaler"] = param_00; +} + +//Function Number: 23 +destructible_explode(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A,param_0B) +{ + var_0C = level.destructible_type.size - 1; + var_0D = level.destructible_type[var_0C].var_E42.size - 1; + var_0E = level.destructible_type[var_0C].var_E42[var_0D].size - 1; + if(common_scripts\utility::issp()) + { + level.destructible_type[var_0C].var_E42[var_0D][var_0E].v["explode_range"] = param_02; + } + else + { + level.destructible_type[var_0C].var_E42[var_0D][var_0E].v["explode_range"] = param_03; + } + + level.destructible_type[var_0C].var_E42[var_0D][var_0E].v["explode"] = 1; + level.destructible_type[var_0C].var_E42[var_0D][var_0E].v["explode_force_min"] = param_00; + level.destructible_type[var_0C].var_E42[var_0D][var_0E].v["explode_force_max"] = param_01; + level.destructible_type[var_0C].var_E42[var_0D][var_0E].v["explode_mindamage"] = param_04; + level.destructible_type[var_0C].var_E42[var_0D][var_0E].v["explode_maxdamage"] = param_05; + level.destructible_type[var_0C].var_E42[var_0D][var_0E].v["continueDamage"] = param_06; + level.destructible_type[var_0C].var_E42[var_0D][var_0E].v["originOffset"] = param_07; + level.destructible_type[var_0C].var_E42[var_0D][var_0E].v["earthQuakeScale"] = param_08; + level.destructible_type[var_0C].var_E42[var_0D][var_0E].v["earthQuakeRadius"] = param_09; + level.destructible_type[var_0C].var_E42[var_0D][var_0E].v["originOffset3d"] = param_0A; + level.destructible_type[var_0C].var_E42[var_0D][var_0E].v["delaytime"] = param_0B; +} + +//Function Number: 24 +destructible_info(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(param_03)) + { + param_03 = tolower(param_03); + } + + var_0D = level.destructible_type.size - 1; + level.destructible_type[var_0D].var_E42[param_00][param_01] = spawnstruct(); + level.destructible_type[var_0D].var_E42[param_00][param_01].v["modelName"] = param_03; + level.destructible_type[var_0D].var_E42[param_00][param_01].v["tagName"] = param_02; + level.destructible_type[var_0D].var_E42[param_00][param_01].v["health"] = param_04; + level.destructible_type[var_0D].var_E42[param_00][param_01].v["validAttackers"] = param_05; + level.destructible_type[var_0D].var_E42[param_00][param_01].v["validDamageZone"] = param_06; + level.destructible_type[var_0D].var_E42[param_00][param_01].v["validDamageCause"] = param_07; + level.destructible_type[var_0D].var_E42[param_00][param_01].v["alsoDamageParent"] = param_08; + level.destructible_type[var_0D].var_E42[param_00][param_01].v["physicsOnExplosion"] = param_09; + level.destructible_type[var_0D].var_E42[param_00][param_01].v["grenadeImpactDeath"] = param_0A; + level.destructible_type[var_0D].var_E42[param_00][param_01].v["godModeAllowed"] = 0; + level.destructible_type[var_0D].var_E42[param_00][param_01].v["splashRotation"] = param_0B; + level.destructible_type[var_0D].var_E42[param_00][param_01].v["receiveDamageFromParent"] = param_0C; +} + +//Function Number: 25 +precache_destructibles() +{ + if(!isdefined(level.destructible_type[self.destructibleinfo].var_E42)) + { + return; + } + + for(var_00 = 0;var_00 < level.destructible_type[self.destructibleinfo].var_E42.size;var_00++) + { + for(var_01 = 0;var_01 < level.destructible_type[self.destructibleinfo].var_E42[var_00].size;var_01++) + { + if(level.destructible_type[self.destructibleinfo].var_E42[var_00].size <= var_01) + { + continue; + } + + if(isdefined(level.destructible_type[self.destructibleinfo].var_E42[var_00][var_01].v["modelName"])) + { + precachemodel(level.destructible_type[self.destructibleinfo].var_E42[var_00][var_01].v["modelName"]); + } + + if(isdefined(level.destructible_type[self.destructibleinfo].var_E42[var_00][var_01].v["animation"])) + { + var_02 = level.destructible_type[self.destructibleinfo].var_E42[var_00][var_01].v["animation"]; + foreach(var_04 in var_02) + { + if(isdefined(var_04["mpAnim"])) + { + common_scripts\utility::noself_func("precacheMpAnim",var_04["mpAnim"]); + } + } + } + + if(isdefined(level.destructible_type[self.destructibleinfo].var_E42[var_00][var_01].v["random_dynamic_attachment_1"])) + { + foreach(var_07 in level.destructible_type[self.destructibleinfo].var_E42[var_00][var_01].v["random_dynamic_attachment_1"]) + { + if(isdefined(var_07) && var_07 != "") + { + precachemodel(var_07); + precachemodel(var_07 + "_destroy"); + } + } + + foreach(var_07 in level.destructible_type[self.destructibleinfo].var_E42[var_00][var_01].v["random_dynamic_attachment_2"]) + { + if(isdefined(var_07) && var_07 != "") + { + precachemodel(var_07); + precachemodel(var_07 + "_destroy"); + } + } + } + } + } +} + +//Function Number: 26 +add_destructible_fx() +{ + if(!isdefined(level.destructible_type[self.destructibleinfo].var_E42)) + { + return; + } + + for(var_00 = 0;var_00 < level.destructible_type[self.destructibleinfo].var_E42.size;var_00++) + { + for(var_01 = 0;var_01 < level.destructible_type[self.destructibleinfo].var_E42[var_00].size;var_01++) + { + if(level.destructible_type[self.destructibleinfo].var_E42[var_00].size <= var_01) + { + continue; + } + + var_02 = level.destructible_type[self.destructibleinfo].var_E42[var_00][var_01]; + if(isdefined(var_02.v["fx_filename"])) + { + for(var_03 = 0;var_03 < var_02.v["fx_filename"].size;var_03++) + { + var_04 = var_02.v["fx_filename"][var_03]; + if(isdefined(var_04)) + { + if(isdefined(var_02.v["fx"]) && isdefined(var_02.v["fx"][var_03]) && var_02.v["fx"][var_03].size == var_04.size) + { + continue; + } + + foreach(var_07, var_06 in var_04) + { + level.destructible_type[self.destructibleinfo].var_E42[var_00][var_01].v["fx"][var_03][var_07] = common_scripts\utility::_loadfx(var_06); + } + } + } + } + + var_08 = level.destructible_type[self.destructibleinfo].var_E42[var_00][var_01].v["loopfx_filename"]; + if(isdefined(var_08)) + { + if(isdefined(var_02.v["loopfx"]) && var_02.v["loopfx"].size == var_08.size) + { + continue; + } + + foreach(var_07, var_0A in var_08) + { + level.destructible_type[self.destructibleinfo].var_E42[var_00][var_01].v["loopfx"][var_07] = common_scripts\utility::_loadfx(var_0A); + } + } + } + } +} + +//Function Number: 27 +candamagedestructible(param_00) +{ + foreach(var_02 in self.destructibles) + { + if(var_02 == param_00) + { + return 1; + } + } + + return 0; +} + +//Function Number: 28 +destructible_think() +{ + var_00 = 0; + var_01 = self.model; + var_02 = undefined; + var_03 = self.origin; + var_04 = undefined; + var_05 = undefined; + var_06 = undefined; + destructible_update_part(var_00,var_01,var_02,var_03,var_04,var_05,var_06); + self endon("stop_taking_damage"); + for(;;) + { + var_00 = undefined; + var_05 = undefined; + var_04 = undefined; + var_03 = undefined; + var_07 = undefined; + var_01 = undefined; + var_02 = undefined; + var_08 = undefined; + var_09 = undefined; + self waittill("damage",var_00,var_05,var_04,var_03,var_07,var_01,var_02,var_08,var_09); + if(!isdefined(var_00)) + { + continue; + } + + if(isdefined(var_05) && isdefined(var_05.type) && var_05.type == "soft_landing" && !var_05 candamagedestructible(self)) + { + continue; + } + + if(common_scripts\utility::issp()) + { + var_00 = var_00 * 0.5; + } + else + { + var_00 = var_00 * 1; + } + + if(var_00 <= 0) + { + continue; + } + + if(common_scripts\utility::issp()) + { + if(isdefined(var_05) && isplayer(var_05)) + { + self.damageowner = var_05; + } + } + else if(isdefined(var_05) && isplayer(var_05)) + { + self.damageowner = var_05; + } + else if(isdefined(var_05) && isdefined(var_05.gunner) && isplayer(var_05.gunner)) + { + self.damageowner = var_05.gunner; + } + + var_07 = getdamagetype(var_07); + if(is_shotgun_damage(var_05,var_07)) + { + if(common_scripts\utility::issp()) + { + var_00 = var_00 * 8; + } + else + { + var_00 = var_00 * 4; + } + } + + if(!isdefined(var_01) || var_01 == "") + { + var_01 = self.model; + } + + if(isdefined(var_02) && var_02 == "") + { + if(isdefined(var_08) && var_08 != "" && var_08 != "tag_body" && var_08 != "body_animate_jnt") + { + var_02 = var_08; + } + else + { + var_02 = undefined; + } + + var_0A = level.destructible_type[self.destructibleinfo].var_E42[0][0].v["tagName"]; + if(isdefined(var_0A) && isdefined(var_08) && var_0A == var_08) + { + var_02 = undefined; + } + } + + if(var_07 == "splash") + { + if(isdefined(level.destructible_type[self.destructibleinfo].var_E42[0][0].v["splash_damage_scaler"])) + { + var_00 = var_00 * level.destructible_type[self.destructibleinfo].var_E42[0][0].v["splash_damage_scaler"]; + } + else if(common_scripts\utility::issp()) + { + var_00 = var_00 * 9; + } + else + { + var_00 = var_00 * 13; + } + + destructible_splash_damage(int(var_00),var_03,var_04,var_05,var_07); + continue; + } + + thread destructible_update_part(int(var_00),var_01,var_02,var_03,var_04,var_05,var_07); + } +} + +//Function Number: 29 +is_shotgun_damage(param_00,param_01) +{ + if(param_01 != "bullet") + { + return 0; + } + + if(!isdefined(param_00)) + { + return 0; + } + + var_02 = undefined; + if(isplayer(param_00)) + { + var_02 = param_00 getcurrentweapon(); + } + else if(isdefined(level.var_E51) && level.var_E51) + { + if(isdefined(param_00.weapon)) + { + var_02 = param_00.weapon; + } + } + + if(!isdefined(var_02)) + { + return 0; + } + + var_03 = weaponclass(var_02); + if(isdefined(var_03) && var_03 == "spread") + { + return 1; + } + + return 0; +} + +//Function Number: 30 +getpartandstateindex(param_00,param_01) +{ + var_02 = spawnstruct(); + var_02.v = []; + var_03 = -1; + var_04 = -1; + if(tolower(param_00) == tolower(self.model) && !isdefined(param_01)) + { + param_00 = self.model; + param_01 = undefined; + var_03 = 0; + var_04 = 0; + } + + for(var_05 = 0;var_05 < level.destructible_type[self.destructibleinfo].var_E42.size;var_05++) + { + var_04 = self.var_E43[var_05].v["currentState"]; + if(level.destructible_type[self.destructibleinfo].var_E42[var_05].size <= var_04) + { + continue; + } + + if(!isdefined(param_01)) + { + continue; + } + + if(isdefined(level.destructible_type[self.destructibleinfo].var_E42[var_05][var_04].v["tagName"])) + { + var_06 = level.destructible_type[self.destructibleinfo].var_E42[var_05][var_04].v["tagName"]; + if(tolower(var_06) == tolower(param_01)) + { + var_03 = var_05; + break; + } + } + } + + var_02.v["stateIndex"] = var_04; + var_02.v["partIndex"] = var_03; + return var_02; +} + +//Function Number: 31 +destructible_update_part(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07) +{ + if(!isdefined(self.var_E43)) + { + return; + } + + if(self.var_E43.size == 0) + { + return; + } + + if(level.var_E3C) + { + self endon("destroyed"); + } + + var_08 = getpartandstateindex(param_01,param_02); + var_09 = var_08.v["stateIndex"]; + var_0A = var_08.v["partIndex"]; + if(var_0A < 0) + { + return; + } + + var_0B = var_09; + var_0C = 0; + var_0D = 0; + for(;;) + { + var_09 = self.var_E43[var_0A].v["currentState"]; + if(!isdefined(level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_09])) + { + break; + } + + if(isdefined(level.destructible_type[self.destructibleinfo].var_E42[var_0A][0].v["alsoDamageParent"])) + { + if(getdamagetype(param_06) != "splash") + { + var_0E = level.destructible_type[self.destructibleinfo].var_E42[var_0A][0].v["alsoDamageParent"]; + var_0F = int(param_00 * var_0E); + thread notifydamageafterframe(var_0F,param_05,param_04,param_03,param_06,"",""); + } + } + + if(getdamagetype(param_06) != "splash") + { + foreach(var_11 in level.destructible_type[self.destructibleinfo].var_E42) + { + if(!isdefined(var_11[0].v["receiveDamageFromParent"])) + { + continue; + } + + if(!isdefined(var_11[0].v["tagName"])) + { + continue; + } + + var_0E = var_11[0].v["receiveDamageFromParent"]; + var_12 = int(param_00 * var_0E); + var_13 = var_11[0].v["tagName"]; + thread notifydamageafterframe(var_12,param_05,param_04,param_03,param_06,"",var_13); + } + } + + if(!isdefined(level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_09].v["health"])) + { + break; + } + + if(!isdefined(self.var_E43[var_0A].v["health"])) + { + break; + } + + if(var_0C) + { + self.var_E43[var_0A].v["health"] = level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_09].v["health"]; + } + + var_0C = 0; + if(isdefined(level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_09].v["grenadeImpactDeath"]) && param_06 == "impact") + { + param_00 = 100000000; + } + + var_15 = self.var_E43[var_0A].v["health"]; + var_16 = isattackervalid(var_0A,var_09,param_05); + if(var_16) + { + var_17 = isvaliddamagecause(var_0A,var_09,param_06); + if(var_17) + { + if(isdefined(param_05)) + { + if(isplayer(param_05)) + { + self.player_damage = self.player_damage + param_00; + } + else if(param_05 != self) + { + self.non_player_damage = self.non_player_damage + param_00; + } + } + + if(isdefined(param_06)) + { + if(param_06 == "melee" || param_06 == "impact") + { + param_00 = 100000; + } + } + + self.var_E43[var_0A].v["health"] = self.var_E43[var_0A].v["health"] - param_00; + } + } + + if(self.var_E43[var_0A].v["health"] > 0) + { + return; + } + + if(isdefined(param_07)) + { + param_07.v["fxcost"] = get_part_fx_cost_for_action_state(var_0A,self.var_E43[var_0A].v["currentState"]); + add_destructible_to_frame_queue(self,param_07,param_00); + if(!isdefined(self.var_E55)) + { + self.var_E55 = 1; + } + else + { + self.var_E55++; + } + + self waittill("queue_processed",var_18); + self.var_E55--; + if(self.var_E55 == 0) + { + self.var_E55 = undefined; + } + + if(!var_18) + { + self.var_E43[var_0A].v["health"] = var_15; + return; + } + } + + param_00 = int(abs(self.var_E43[var_0A].v["health"])); + if(param_00 < 0) + { + return; + } + + self.var_E43[var_0A].v["currentState"]++; + var_09 = self.var_E43[var_0A].v["currentState"]; + var_19 = var_09 - 1; + var_1A = undefined; + if(isdefined(level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19])) + { + var_1A = level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v; + } + + var_1B = undefined; + if(isdefined(level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_09])) + { + var_1B = level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_09].v; + } + + if(!isdefined(level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19])) + { + return; + } + + if(isdefined(level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["explode"])) + { + self.var_E56 = 1; + } + + if(isdefined(self.var_E57) && isdefined(self.var_E57[tostring(var_0A)])) + { + for(var_1C = 0;var_1C < self.var_E57[tostring(var_0A)].size;var_1C++) + { + self notify(self.var_E57[tostring(var_0A)][var_1C]); + if(common_scripts\utility::issp() && self.modeldummyon) + { + self.modeldummy notify(self.var_E57[tostring(var_0A)][var_1C]); + } + } + + self.var_E57[tostring(var_0A)] = undefined; + } + + if(isdefined(var_1A["break_nearby_lights"])) + { + destructible_get_my_breakable_light(var_1A["break_nearby_lights"]); + } + + if(isdefined(level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_09])) + { + if(var_0A == 0) + { + var_1D = var_1B["modelName"]; + if(isdefined(var_1D) && var_1D != self.model) + { + self setmodel(var_1D); + if(common_scripts\utility::issp() && self.modeldummyon) + { + self.modeldummy setmodel(var_1D); + } + + destructible_splash_rotatation(var_1B); + } + } + else + { + hideapart(param_02); + if(common_scripts\utility::issp() && self.modeldummyon) + { + self.modeldummy hideapart(param_02); + } + + param_02 = var_1B["tagName"]; + if(isdefined(param_02)) + { + showapart(param_02); + if(common_scripts\utility::issp() && self.modeldummyon) + { + self.modeldummy showapart(param_02); + } + } + } + } + + var_1E = get_dummy(); + if(isdefined(self.var_E56)) + { + clear_anims(var_1E); + } + + var_1F = destructible_animation_think(var_1A,var_1E,param_06,var_0A); + var_1F = destructible_fx_think(var_1A,var_1E,param_06,var_0A,var_1F); + var_1F = destructible_sound_think(var_1A,var_1E,param_06,var_1F); + if(isdefined(level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["loopfx"])) + { + var_20 = level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["loopfx_filename"].size; + if(var_20 > 0) + { + self notify("FX_State_Change" + var_0A); + } + + for(var_21 = 0;var_21 < var_20;var_21++) + { + var_22 = level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["loopfx"][var_21]; + var_23 = level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["loopfx_tag"][var_21]; + var_24 = level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["loopfx_rate"][var_21]; + thread loopfx_ontag(var_22,var_23,var_24,var_0A); + } + } + + if(isdefined(level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["loopsound"])) + { + for(var_1C = 0;var_1C < level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["loopsound"].size;var_1C++) + { + var_25 = isvalidsoundcause("loopsoundCause",var_1A,var_1C,param_06); + if(var_25) + { + var_26 = level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["loopsound"][var_1C]; + var_27 = level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["tagName"]; + thread play_loop_sound_on_destructible(var_26,var_27); + if(!isdefined(self.var_E57)) + { + self.var_E57 = []; + } + + if(!isdefined(self.var_E57[tostring(var_0A)])) + { + self.var_E57[tostring(var_0A)] = []; + } + + var_28 = self.var_E57[tostring(var_0A)].size; + self.var_E57[tostring(var_0A)][var_28] = "stop sound" + var_26; + } + } + } + + if(isdefined(level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["triggerCarAlarm"])) + { + thread do_car_alarm(); + } + + if(isdefined(level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["break_nearby_lights"])) + { + thread break_nearest_light(); + } + + if(isdefined(level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["healthdrain_amount"])) + { + self notify("Health_Drain_State_Change" + var_0A); + var_29 = level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["healthdrain_amount"]; + var_2A = level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["healthdrain_interval"]; + var_2B = level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["modelName"]; + var_2C = level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["tagName"]; + var_2D = level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["badplace_radius"]; + var_2E = level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["badplace_team"]; + if(var_29 > 0) + { + thread health_drain(var_29,var_2A,var_0A,var_2B,var_2C,var_2D,var_2E); + } + } + + if(isdefined(level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["explode"])) + { + var_0D = 1; + var_2F = level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["explode_force_min"]; + var_30 = level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["explode_force_max"]; + var_31 = level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["explode_range"]; + var_32 = level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["explode_mindamage"]; + var_33 = level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["explode_maxdamage"]; + var_34 = level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["continueDamage"]; + var_35 = level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["originOffset"]; + var_36 = level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["earthQuakeScale"]; + var_37 = level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["earthQuakeRadius"]; + var_38 = level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["originOffset3d"]; + var_39 = level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["delaytime"]; + if(isdefined(param_05) && param_05 != self) + { + self.attacker = param_05; + if(self.code_classname == "script_vehicle") + { + self.damage_type = param_06; + } + } + + thread explode(var_0A,var_2F,var_30,var_31,var_32,var_33,var_34,var_35,var_36,var_37,param_05,var_38,var_39); + } + + var_3A = undefined; + if(isdefined(level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["physics"])) + { + for(var_1C = 0;var_1C < level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["physics"].size;var_1C++) + { + var_3A = undefined; + var_3B = level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["physics_tagName"][var_1C]; + var_3C = level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["physics_velocity"][var_1C]; + var_3D = undefined; + if(isdefined(var_3C)) + { + var_3E = undefined; + if(isdefined(var_3B)) + { + var_3E = self gettagangles(var_3B); + } + else if(isdefined(param_02)) + { + var_3E = self gettagangles(param_02); + } + + var_3A = undefined; + if(isdefined(var_3B)) + { + var_3A = self gettagorigin(var_3B); + } + else if(isdefined(param_02)) + { + var_3A = self gettagorigin(param_02); + } + + var_3F = var_3C[0] - 5 + randomfloat(10); + var_40 = var_3C[1] - 5 + randomfloat(10); + var_41 = var_3C[2] - 5 + randomfloat(10); + var_42 = anglestoforward(var_3E) * var_3F * randomfloatrange(80,110); + var_43 = anglestoright(var_3E) * var_40 * randomfloatrange(80,110); + var_44 = anglestoup(var_3E) * var_41 * randomfloatrange(80,110); + var_3D = var_42 + var_43 + var_44; + } + else + { + var_3D = param_03; + var_45 = (0,0,0); + if(isdefined(param_05)) + { + var_45 = param_05.origin; + var_3D = vectornormalize(param_03 - var_45); + var_3D = var_3D * 200; + } + } + + if(isdefined(var_3B)) + { + var_46 = undefined; + for(var_47 = 0;var_47 < level.destructible_type[self.destructibleinfo].var_E42.size;var_47++) + { + if(!isdefined(level.destructible_type[self.destructibleinfo].var_E42[var_47][0].v["tagName"])) + { + continue; + } + + if(level.destructible_type[self.destructibleinfo].var_E42[var_47][0].v["tagName"] != var_3B) + { + continue; + } + + var_46 = var_47; + break; + } + + if(isdefined(var_3A)) + { + thread physics_launch(var_46,0,var_3A,var_3D); + } + else + { + thread physics_launch(var_46,0,param_03,var_3D); + } + + continue; + } + + if(isdefined(var_3A)) + { + thread physics_launch(var_0A,var_19,var_3A,var_3D); + } + else + { + thread physics_launch(var_0A,var_19,param_03,var_3D); + } + + return; + } + } + + var_0C = 1; + } +} + +//Function Number: 32 +destructible_splash_rotatation(param_00) +{ + var_01 = param_00["splashRotation"]; + var_02 = param_00["rotateTo"]; + if(!isdefined(var_02)) + { + return; + } + + if(!isdefined(var_01)) + { + return; + } + + if(!var_01) + { + return; + } + + self.angles = (self.angles[0],var_02[1],self.angles[2]); +} + +//Function Number: 33 +damage_not(param_00) +{ + var_01 = strtok(param_00," "); + var_02 = strtok("splash melee bullet splash impact unknown"," "); + var_03 = ""; + foreach(var_05 in var_01) + { + var_02 = common_scripts\utility::array_remove(var_02,var_05); + } + + foreach(var_08 in var_02) + { + var_03 = var_03 + var_08 + " "; + } + + return var_03; +} + +//Function Number: 34 +destructible_splash_damage(param_00,param_01,param_02,param_03,param_04) +{ + if(param_00 <= 0) + { + return; + } + + if(isdefined(self.var_946)) + { + return; + } + + if(!isdefined(level.destructible_type[self.destructibleinfo].var_E42)) + { + return; + } + + var_05 = getallactiveparts(param_02); + if(var_05.size <= 0) + { + return; + } + + var_05 = setdistanceonparts(var_05,param_01); + var_06 = getlowestpartdistance(var_05); + foreach(var_08 in var_05) + { + var_09 = var_08.v["distance"] * 1.4; + var_0A = param_00 - var_09 - var_06; + if(var_0A <= 0) + { + continue; + } + + if(isdefined(self.var_946)) + { + continue; + } + + thread destructible_update_part(var_0A,var_08.v["modelName"],var_08.v["tagName"],param_01,param_02,param_03,param_04,var_08); + } +} + +//Function Number: 35 +getallactiveparts(param_00) +{ + var_01 = []; + if(!isdefined(level.destructible_type[self.destructibleinfo].var_E42)) + { + return var_01; + } + + for(var_02 = 0;var_02 < level.destructible_type[self.destructibleinfo].var_E42.size;var_02++) + { + var_03 = var_02; + var_04 = self.var_E43[var_03].v["currentState"]; + for(var_05 = 0;var_05 < level.destructible_type[self.destructibleinfo].var_E42[var_03].size;var_05++) + { + var_06 = level.destructible_type[self.destructibleinfo].var_E42[var_03][var_05].v["splashRotation"]; + if(isdefined(var_06) && var_06) + { + var_07 = vectortoangles(param_00); + var_08 = var_07[1] - 90; + level.destructible_type[self.destructibleinfo].var_E42[var_03][var_05].v["rotateTo"] = (0,var_08,0); + } + } + + if(!isdefined(level.destructible_type[self.destructibleinfo].var_E42[var_03][var_04])) + { + continue; + } + + var_09 = level.destructible_type[self.destructibleinfo].var_E42[var_03][var_04].v["tagName"]; + if(!isdefined(var_09)) + { + var_09 = ""; + } + + if(var_09 == "") + { + continue; + } + + var_0A = level.destructible_type[self.destructibleinfo].var_E42[var_03][var_04].v["modelName"]; + if(!isdefined(var_0A)) + { + var_0A = ""; + } + + var_0B = var_01.size; + var_01[var_0B] = spawnstruct(); + var_01[var_0B].v["modelName"] = var_0A; + var_01[var_0B].v["tagName"] = var_09; + } + + return var_01; +} + +//Function Number: 36 +setdistanceonparts(param_00,param_01) +{ + for(var_02 = 0;var_02 < param_00.size;var_02++) + { + var_03 = distance(param_01,self gettagorigin(param_00[var_02].v["tagName"])); + param_00[var_02].v["distance"] = var_03; + } + + return param_00; +} + +//Function Number: 37 +getlowestpartdistance(param_00) +{ + var_01 = undefined; + foreach(var_03 in param_00) + { + var_04 = var_03.v["distance"]; + if(!isdefined(var_01)) + { + var_01 = var_04; + } + + if(var_04 < var_01) + { + var_01 = var_04; + } + } + + return var_01; +} + +//Function Number: 38 +isvalidsoundcause(param_00,param_01,param_02,param_03,param_04) +{ + if(isdefined(param_04)) + { + var_05 = param_01[param_00][param_04][param_02]; + } + else + { + var_05 = param_02[param_01][param_03]; + } + + if(!isdefined(var_05)) + { + return 1; + } + + if(var_05 == param_03) + { + return 1; + } + + return 0; +} + +//Function Number: 39 +isattackervalid(param_00,param_01,param_02) +{ + if(isdefined(self.var_E60)) + { + return 1; + } + + if(isdefined(level.destructible_type[self.destructibleinfo].var_E42[param_00][param_01].v["explode"])) + { + if(isdefined(self.var_E61)) + { + return 0; + } + } + + if(!isdefined(param_02)) + { + return 1; + } + + if(param_02 == self) + { + return 1; + } + + var_03 = level.destructible_type[self.destructibleinfo].var_E42[param_00][param_01].v["validAttackers"]; + if(!isdefined(var_03)) + { + return 1; + } + + if(var_03 == "no_player") + { + if(!isplayer(param_02)) + { + return 1; + } + + if(!isdefined(param_02.var_E62)) + { + return 1; + } + + if(param_02.var_E62 == 0) + { + return 1; + } + } + else if(var_03 == "player_only") + { + if(isplayer(param_02)) + { + return 1; + } + + if(isdefined(param_02.var_E62) && param_02.var_E62) + { + return 1; + } + } + else if(var_03 == "no_ai" && isdefined(level.isaifunc)) + { + if(![[ level.isaifunc ]](param_02)) + { + return 1; + } + } + else if(var_03 == "ai_only" && isdefined(level.isaifunc)) + { + if([[ level.isaifunc ]](param_02)) + { + return 1; + } + } + else + { + } + + return 0; +} + +//Function Number: 40 +isvaliddamagecause(param_00,param_01,param_02) +{ + if(!isdefined(param_02)) + { + return 1; + } + + var_03 = level.destructible_type[self.destructibleinfo].var_E42[param_00][param_01].v["godModeAllowed"]; + if(var_03 && (isdefined(self.godmode) && self.godmode) || isdefined(self.script_bulletshield) && self.script_bulletshield && param_02 == "bullet") + { + return 0; + } + + var_04 = level.destructible_type[self.destructibleinfo].var_E42[param_00][param_01].v["validDamageCause"]; + if(!isdefined(var_04)) + { + return 1; + } + + if(var_04 == "splash" && param_02 != "splash") + { + return 0; + } + + if(var_04 == "no_splash" && param_02 == "splash") + { + return 0; + } + + if((var_04 == "no_melee" && param_02 == "melee") || param_02 == "impact") + { + return 0; + } + + return 1; +} + +//Function Number: 41 +getdamagetype(param_00) +{ + if(!isdefined(param_00)) + { + return "unknown"; + } + + param_00 = tolower(param_00); + switch(param_00) + { + case "mod_crush": + case "mod_melee": + case "melee": + return "melee"; + + case "mod_rifle_bullet": + case "mod_pistol_bullet": + case "bullet": + return "bullet"; + + case "mod_explosive": + case "mod_projectile_splash": + case "mod_projectile": + case "mod_grenade_splash": + case "mod_grenade": + case "splash": + return "splash"; + + case "mod_impact": + return "impact"; + + case "unknown": + return "unknown"; + + default: + return "unknown"; + } +} + +//Function Number: 42 +damage_mirror(param_00,param_01,param_02) +{ + self notify("stop_damage_mirror"); + self endon("stop_damage_mirror"); + param_00 endon("stop_taking_damage"); + self setcandamage(1); + for(;;) + { + self waittill("damage",var_03,var_04,var_05,var_06,var_07); + param_00 notify("damage",var_03,var_04,var_05,var_06,var_07,param_01,param_02); + var_03 = undefined; + var_04 = undefined; + var_05 = undefined; + var_06 = undefined; + var_07 = undefined; + } +} + +//Function Number: 43 +add_damage_owner_recorder() +{ + self.player_damage = 0; + self.non_player_damage = 0; + self.car_damage_owner_recorder = 1; +} + +//Function Number: 44 +loopfx_ontag(param_00,param_01,param_02,param_03) +{ + self endon("FX_State_Change" + param_03); + self endon("delete_destructible"); + level endon("putout_fires"); + while(isdefined(self)) + { + var_04 = get_dummy(); + playfxontag(param_00,var_04,param_01); + wait param_02; + } +} + +//Function Number: 45 +health_drain(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + self endon("Health_Drain_State_Change" + param_02); + level endon("putout_fires"); + self endon("destroyed"); + if(isdefined(param_05) && isdefined(level.var_E6D)) + { + param_05 = param_05 * level.var_E6D; + } + + if(isdefined(param_00) && isdefined(level.var_E6E)) + { + param_00 = param_00 * level.var_E6E; + } + + wait param_01; + self.healthdrain = 1; + var_07 = undefined; + if(isdefined(level.var_E70) && level.var_E70) + { + param_05 = undefined; + } + + if(isdefined(param_05) && isdefined(param_06) && common_scripts\utility::issp()) + { + var_07 = "" + gettime(); + if(!isdefined(self.var_E71)) + { + if(isdefined(self.script_radius)) + { + param_05 = self.script_radius; + } + + if(param_06 == "both") + { + [[ level.badplace_cylinder_func ]](var_07,0,self.origin,param_05,128,"allies","bad_guys"); + } + else + { + [[ level.badplace_cylinder_func ]](var_07,0,self.origin,param_05,128,param_06); + } + + thread badplace_remove(var_07); + } + } + + while(isdefined(self) && self.var_E43[param_02].v["health"] > 0) + { + self notify("damage",param_00,self,(0,0,0),(0,0,0),"MOD_UNKNOWN",param_03,param_04); + wait param_01; + } + + self notify("remove_badplace"); +} + +//Function Number: 46 +badplace_remove(param_00) +{ + common_scripts\utility::waittill_any("destroyed","remove_badplace"); + [[ level.badplace_delete_func ]](param_00); +} + +//Function Number: 47 +physics_launch(param_00,param_01,param_02,param_03) +{ + var_04 = level.destructible_type[self.destructibleinfo].var_E42[param_00][param_01].v["modelName"]; + var_05 = level.destructible_type[self.destructibleinfo].var_E42[param_00][param_01].v["tagName"]; + hideapart(var_05); + if(level.var_E39.size >= level.var_E38) + { + physics_object_remove(level.var_E39[0]); + } + + var_06 = spawn("script_model",self gettagorigin(var_05)); + var_06.angles = self gettagangles(var_05); + var_06 setmodel(var_04); + level.var_E39[level.var_E39.size] = var_06; + var_06 physicslaunchclient(param_02,param_03); +} + +//Function Number: 48 +physics_object_remove(param_00) +{ + var_01 = []; + for(var_02 = 0;var_02 < level.var_E39.size;var_02++) + { + if(level.var_E39[var_02] == param_00) + { + continue; + } + + var_01[var_01.size] = level.var_E39[var_02]; + } + + level.var_E39 = var_01; + if(isdefined(param_00)) + { + param_00 delete(); + } +} + +//Function Number: 49 +explode(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(param_03) && isdefined(level.var_E78)) + { + param_03 = param_03 * level.var_E78; + } + + if(!isdefined(param_07)) + { + param_07 = 80; + } + + if(!isdefined(param_0B)) + { + param_0B = (0,0,0); + } + + if(!isdefined(param_06) || isdefined(param_06) && !param_06) + { + if(isdefined(self.var_946)) + { + return; + } + + self.var_946 = 1; + } + + if(!isdefined(param_0C)) + { + param_0C = 0; + } + + self notify("exploded",param_0A); + level notify("destructible_exploded"); + if(self.code_classname == "script_vehicle") + { + self notify("death",param_0A,self.damage_type); + } + + if(common_scripts\utility::issp()) + { + thread disconnecttraverses(); + } + + if(!level.var_E3C) + { + wait 0.05; + } + + if(!isdefined(self)) + { + return; + } + + var_0D = self.var_E43[param_00].v["currentState"]; + var_0E = undefined; + if(isdefined(level.destructible_type[self.destructibleinfo].var_E42[param_00][var_0D])) + { + var_0E = level.destructible_type[self.destructibleinfo].var_E42[param_00][var_0D].v["tagName"]; + } + + if(isdefined(var_0E)) + { + var_0F = self gettagorigin(var_0E); + } + else + { + var_0F = self.origin; + } + + self notify("damage",param_05,self,(0,0,0),var_0F,"MOD_EXPLOSIVE","",""); + self notify("stop_car_alarm"); + waittillframeend; + if(isdefined(level.destructible_type[self.destructibleinfo].var_E42)) + { + for(var_10 = level.destructible_type[self.destructibleinfo].var_E42.size - 1;var_10 >= 0;var_10--) + { + if(var_10 == param_00) + { + continue; + } + + var_11 = self.var_E43[var_10].v["currentState"]; + if(var_11 >= level.destructible_type[self.destructibleinfo].var_E42[var_10].size) + { + var_11 = level.destructible_type[self.destructibleinfo].var_E42[var_10].size - 1; + } + + var_12 = level.destructible_type[self.destructibleinfo].var_E42[var_10][var_11].v["modelName"]; + var_0E = level.destructible_type[self.destructibleinfo].var_E42[var_10][var_11].v["tagName"]; + if(!isdefined(var_12)) + { + continue; + } + + if(!isdefined(var_0E)) + { + continue; + } + + if(isdefined(level.destructible_type[self.destructibleinfo].var_E42[var_10][0].v["physicsOnExplosion"])) + { + if(level.destructible_type[self.destructibleinfo].var_E42[var_10][0].v["physicsOnExplosion"] > 0) + { + var_13 = level.destructible_type[self.destructibleinfo].var_E42[var_10][0].v["physicsOnExplosion"]; + var_14 = self gettagorigin(var_0E); + var_15 = vectornormalize(var_14 - var_0F); + var_15 = var_15 * randomfloatrange(param_01,param_02) * var_13; + thread physics_launch(var_10,var_11,var_14,var_15); + continue; + } + } + } + } + + var_16 = !isdefined(param_06) || isdefined(param_06) && !param_06; + if(var_16) + { + self notify("stop_taking_damage"); + } + + if(!level.var_E3C) + { + wait 0.05; + } + + if(!isdefined(self)) + { + return; + } + + var_17 = var_0F + (0,0,param_07) + param_0B; + var_18 = getsubstr(level.destructible_type[self.destructibleinfo].v["type"],0,7) == "vehicle"; + if(var_18) + { + anim.var_D20 = gettime(); + anim.var_D22 = var_17; + anim.var_D23 = var_0F; + anim.var_D21 = param_03; + } + + level thread set_disable_friendlyfire_value_delayed(1); + if(param_0C > 0) + { + wait param_0C; + } + + if(isdefined(level.var_E79)) + { + thread [[ level.var_E79 ]](); + } + + if(common_scripts\utility::issp()) + { + if(level.gameskill == 0 && !player_touching_post_clip()) + { + self radiusdamage(var_17,param_03,param_05,param_04,self,"MOD_RIFLE_BULLET"); + } + else + { + self radiusdamage(var_17,param_03,param_05,param_04,self); + } + + if(isdefined(self.damageowner) && var_18) + { + self.damageowner notify("destroyed_car"); + level notify("player_destroyed_car",self.damageowner,var_17); + } + } + else + { + var_19 = "destructible_toy"; + if(var_18) + { + var_19 = "destructible_car"; + } + + if(!isdefined(self.damageowner)) + { + self radiusdamage(var_17,param_03,param_05,param_04,self,"MOD_EXPLOSIVE",var_19); + } + else + { + self radiusdamage(var_17,param_03,param_05,param_04,self.damageowner,"MOD_EXPLOSIVE",var_19); + if(var_18) + { + self.damageowner notify("destroyed_car"); + level notify("player_destroyed_car",self.damageowner,var_17); + } + } + } + + if(isdefined(param_08) && isdefined(param_09)) + { + earthquake(param_08,2,var_17,param_09); + } + + level thread set_disable_friendlyfire_value_delayed(0,0.05); + var_1A = 0.01; + var_1B = param_03 * var_1A; + param_03 = param_03 * 0.99; + physicsexplosionsphere(var_17,param_03,0,var_1B); + if(var_16) + { + self setcandamage(0); + thread cleanupvars(); + } + + self notify("destroyed"); +} + +//Function Number: 50 +cleanupvars() +{ + wait 0.05; + while(isdefined(self) && isdefined(self.var_E55)) + { + self waittill("queue_processed"); + wait 0.05; + } + + if(!isdefined(self)) + { + return; + } + + self.var_E7B = undefined; + self.attacker = undefined; + self.car_damage_owner_recorder = undefined; + self.var_E7C = undefined; + self.damageowner = undefined; + self.var_E43 = undefined; + self.destructible_type = undefined; + self.destructibleinfo = undefined; + self.healthdrain = undefined; + self.non_player_damage = undefined; + self.player_damage = undefined; + if(!isdefined(level.var_E7D)) + { + return; + } + + self.script_noflip = undefined; + self.var_E56 = undefined; + self.var_E57 = undefined; + self.var_E7F = undefined; +} + +//Function Number: 51 +set_disable_friendlyfire_value_delayed(param_00,param_01) +{ + level notify("set_disable_friendlyfire_value_delayed"); + level endon("set_disable_friendlyfire_value_delayed"); + if(isdefined(param_01)) + { + wait param_01; + } + + level.friendlyfiredisabledfordestructible = param_00; +} + +//Function Number: 52 +connecttraverses() +{ + var_00 = get_traverse_disconnect_brush(); + if(!isdefined(var_00)) + { + return; + } + + var_00 [[ level.connectpathsfunction ]](); + var_00.origin = var_00.origin - (0,0,10000); +} + +//Function Number: 53 +disconnecttraverses() +{ + var_00 = get_traverse_disconnect_brush(); + if(!isdefined(var_00)) + { + return; + } + + var_00.origin = var_00.origin + (0,0,10000); + var_00 [[ level.disconnectpathsfunction ]](); + var_00.origin = var_00.origin - (0,0,10000); +} + +//Function Number: 54 +get_traverse_disconnect_brush() +{ + if(!isdefined(self.target)) + { + return undefined; + } + + var_00 = getentarray(self.target,"targetname"); + foreach(var_02 in var_00) + { + if(isspawner(var_02)) + { + continue; + } + + if(isdefined(var_02.var_E85)) + { + continue; + } + + if(var_02.code_classname == "light") + { + continue; + } + + if(!var_02.spawnflags & 1) + { + continue; + } + + return var_02; + } +} + +//Function Number: 55 +hideapart(param_00) +{ + self hidepart(param_00); +} + +//Function Number: 56 +showapart(param_00) +{ + self showpart(param_00); +} + +//Function Number: 57 +disable_explosion() +{ + self.var_E61 = 1; +} + +//Function Number: 58 +force_explosion() +{ + self.var_E61 = undefined; + self.var_E60 = 1; + self notify("damage",100000,self,self.origin,self.origin,"MOD_EXPLOSIVE","",""); +} + +//Function Number: 59 +get_dummy() +{ + if(!common_scripts\utility::issp()) + { + return self; + } + + if(self.modeldummyon) + { + var_00 = self.modeldummy; + } + else + { + var_00 = self; + } + + return var_00; +} + +//Function Number: 60 +play_loop_sound_on_destructible(param_00,param_01) +{ + var_02 = get_dummy(); + var_03 = spawn("script_origin",(0,0,0)); + if(isdefined(param_01)) + { + var_03.origin = var_02 gettagorigin(param_01); + } + else + { + var_03.origin = var_02.origin; + } + + var_03 playloopsound(param_00); + var_02 thread force_stop_sound(param_00); + var_02 waittill("stop sound" + param_00); + if(!isdefined(var_03)) + { + return; + } + + var_03 stoploopsound(param_00); + var_03 delete(); +} + +//Function Number: 61 +force_stop_sound(param_00) +{ + self endon("stop sound" + param_00); + level waittill("putout_fires"); + self notify("stop sound" + param_00); +} + +//Function Number: 62 +notifydamageafterframe(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + if(isdefined(level.notifydamageafterframe)) + { + return; + } + + level.notifydamageafterframe = 1; + waittillframeend; + if(isdefined(self.var_946)) + { + level.notifydamageafterframe = undefined; + return; + } + + if(common_scripts\utility::issp()) + { + param_00 = param_00 / 0.5; + } + else + { + param_00 = param_00 / 1; + } + + self notify("damage",param_00,param_01,param_02,param_03,param_04,param_05,param_06); + level.notifydamageafterframe = undefined; +} + +//Function Number: 63 +play_sound(param_00,param_01) +{ + if(isdefined(param_01)) + { + var_02 = spawn("script_origin",self gettagorigin(param_01)); + var_02 hide(); + var_02 linkto(self,param_01,(0,0,0),(0,0,0)); + } + else + { + var_02 = spawn("script_origin",(0,0,0)); + var_02 hide(); + var_02.origin = self.origin; + var_02.angles = self.angles; + var_02 linkto(self); + } + + var_02 playsound(param_00); + wait 5; + if(isdefined(var_02)) + { + var_02 delete(); + } +} + +//Function Number: 64 +tostring(param_00) +{ + return "" + param_00; +} + +//Function Number: 65 +do_car_alarm() +{ + if(isdefined(self.var_E7C)) + { + return; + } + + self.var_E7C = 1; + if(!should_do_car_alarm()) + { + return; + } + + self.var_E7F = spawn("script_model",self.origin); + self.var_E7F hide(); + self.var_E7F playloopsound("car_alarm"); + level.var_E3A++; + thread car_alarm_timeout(); + self waittill("stop_car_alarm"); + level.var_E91 = gettime(); + level.var_E3A--; + self.var_E7F stoploopsound("car_alarm"); + self.var_E7F delete(); +} + +//Function Number: 66 +car_alarm_timeout() +{ + self endon("stop_car_alarm"); + wait 25; + if(!isdefined(self)) + { + return; + } + + thread play_sound("car_alarm_off"); + self notify("stop_car_alarm"); +} + +//Function Number: 67 +should_do_car_alarm() +{ + if(level.var_E3A >= 2) + { + return 0; + } + + var_00 = undefined; + if(!isdefined(level.var_E91)) + { + if(common_scripts\utility::cointoss()) + { + return 1; + } + + var_00 = gettime() - level.var_E3B; + } + else + { + var_00 = gettime() - level.var_E91; + } + + if(level.var_E3A == 0 && var_00 >= 120) + { + return 1; + } + + if(randomint(100) <= 33) + { + return 1; + } + + return 0; +} + +//Function Number: 68 +do_random_dynamic_attachment(param_00,param_01,param_02,param_03) +{ + var_04 = []; + if(common_scripts\utility::issp()) + { + self attach(param_01,param_00,0); + if(isdefined(param_02) && param_02 != "") + { + self attach(param_02,param_00,0); + } + } + else + { + var_7B[0].angles = self gettagangles(param_01); + var_7B[0] setmodel(param_02); + var_7B[0] linkto(self,param_01); + if(isdefined(param_03) && param_03 != "") + { + var_7B[1].angles = self gettagangles(param_01); + var_7B[1] setmodel(param_03); + var_7B[1] linkto(self,param_01); + } + } + + if(isdefined(var_04)) + { + var_05 = self gettagorigin(param_01); + var_06 = get_closest_with_targetname(var_05,var_04); + if(isdefined(var_06)) + { + var_06 delete(); + } + } + + self waittill(spawn("script_model",self gettagorigin(param_00)),var_7B[0],spawn("script_model",self gettagorigin(param_01)),var_7B[1],"exploded"); + if(common_scripts\utility::issp()) + { + self detach(param_02,param_01); + self attach(param_02 + "_destroy",param_01,0); + if(isdefined(param_03) && param_03 != "") + { + self detach(param_03,param_01); + self attach(param_03 + "_destroy",param_01,0); + return; + } + + return; + } + + var_7B[0] setmodel(param_02 + "_destroy"); + if(isdefined(param_03) && param_03 != "") + { + var_7B[1] setmodel(param_03 + "_destroy"); + } +} + +//Function Number: 69 +get_closest_with_targetname(param_00,param_01) +{ + var_02 = undefined; + var_03 = undefined; + var_04 = getentarray(param_01,"targetname"); + foreach(var_06 in var_04) + { + var_07 = distancesquared(param_00,var_06.origin); + if(!isdefined(var_02) || var_07 < var_02) + { + var_02 = var_07; + var_03 = var_06; + } + } + + return var_03; +} + +//Function Number: 70 +player_touching_post_clip() +{ + var_00 = undefined; + if(!isdefined(self.target)) + { + return 0; + } + + var_01 = getentarray(self.target,"targetname"); + foreach(var_03 in var_01) + { + if(isdefined(var_03.var_E85) && var_03.var_E85 == "post") + { + var_00 = var_03; + break; + } + } + + if(!isdefined(var_00)) + { + return 0; + } + + var_05 = get_player_touching(var_00); + if(isdefined(var_05)) + { + return 1; + } + + return 0; +} + +//Function Number: 71 +get_player_touching(param_00) +{ + foreach(var_02 in level.players) + { + if(!isalive(var_02)) + { + continue; + } + + if(param_00 istouching(var_02)) + { + return var_02; + } + } + + return undefined; +} + +//Function Number: 72 +is_so() +{ + return getdvar("specialops") == "1"; +} + +//Function Number: 73 +destructible_handles_collision_brushes() +{ + var_00 = getentarray(self.target,"targetname"); + var_01 = []; + foreach(var_03 in var_01) + { + if(!isdefined(var_03.var_E85)) + { + continue; + } + + self thread [[ var_7B[var_03.var_E85] ]](var_03); + } +} + +//Function Number: 74 +collision_brush_pre_explosion(param_00) +{ + waittillframeend; + if(common_scripts\utility::issp() && param_00.spawnflags & 1) + { + param_00 [[ level.disconnectpathsfunction ]](); + } + + self waittill("exploded"); + if(common_scripts\utility::issp() && param_00.spawnflags & 1) + { + param_00 [[ level.connectpathsfunction ]](); + } + + param_00 delete(); +} + +//Function Number: 75 +collision_brush_post_explosion(param_00) +{ + param_00 notsolid(); + if(common_scripts\utility::issp() && param_00.spawnflags & 1) + { + param_00 [[ level.connectpathsfunction ]](); + } + + self waittill("exploded"); + waittillframeend; + if(common_scripts\utility::issp()) + { + if(param_00.spawnflags & 1) + { + param_00 [[ level.disconnectpathsfunction ]](); + } + + if(is_so()) + { + var_01 = get_player_touching(param_00); + if(isdefined(var_01)) + { + self thread [[ level.func_destructible_crush_player ]](var_01); + } + } + else + { + } + } + + param_00 solid(); +} + +//Function Number: 76 +debug_player_in_post_clip(param_00) +{ +} + +//Function Number: 77 +destructible_get_my_breakable_light(param_00) +{ + var_01 = getentarray("light_destructible","targetname"); + if(common_scripts\utility::issp()) + { + var_02 = getentarray("light_destructible","script_noteworthy"); + var_01 = common_scripts\utility::array_combine(var_01,var_02); + } + + if(!var_01.size) + { + return; + } + + var_03 = param_00 * param_00; + var_04 = undefined; + foreach(var_06 in var_01) + { + var_07 = distancesquared(self.origin,var_06.origin); + if(var_07 < var_03) + { + var_04 = var_06; + var_03 = var_07; + } + } + + if(!isdefined(var_04)) + { + return; + } + + self.var_E9F = var_04; +} + +//Function Number: 78 +break_nearest_light(param_00) +{ + if(!isdefined(self.var_E9F)) + { + return; + } + + self.var_E9F setlightintensity(0); +} + +//Function Number: 79 +debug_radiusdamage_circle(param_00,param_01,param_02,param_03) +{ + var_04 = 16; + var_05 = 360 / var_04; + var_06 = []; + for(var_07 = 0;var_07 < var_04;var_07++) + { + var_08 = var_05 * var_07; + var_09 = cos(var_08) * param_01; + var_0A = sin(var_08) * param_01; + var_0B = param_00[0] + var_09; + var_0C = param_00[1] + var_0A; + var_0D = param_00[2]; + var_06[var_06.size] = (var_0B,var_0C,var_0D); + } + + thread debug_circle_drawlines(var_06,5,(1,0,0),param_00); + var_06 = []; + for(var_07 = 0;var_07 < var_04;var_07++) + { + var_08 = var_05 * var_07; + var_09 = cos(var_08) * param_01; + var_0A = sin(var_08) * param_01; + var_0B = param_00[0]; + var_0C = param_00[1] + var_09; + var_0D = param_00[2] + var_0A; + var_06[var_06.size] = (var_0B,var_0C,var_0D); + } + + thread debug_circle_drawlines(var_06,5,(1,0,0),param_00); + var_06 = []; + for(var_07 = 0;var_07 < var_04;var_07++) + { + var_08 = var_05 * var_07; + var_09 = cos(var_08) * param_01; + var_0A = sin(var_08) * param_01; + var_0B = param_00[0] + var_0A; + var_0C = param_00[1]; + var_0D = param_00[2] + var_09; + var_06[var_06.size] = (var_0B,var_0C,var_0D); + } + + thread debug_circle_drawlines(var_06,5,(1,0,0),param_00); +} + +//Function Number: 80 +debug_circle_drawlines(param_00,param_01,param_02,param_03) +{ + for(var_04 = 0;var_04 < param_00.size;var_04++) + { + var_05 = param_00[var_04]; + if(var_04 + 1 >= param_00.size) + { + var_06 = param_00[0]; + } + else + { + var_06 = param_00[var_04 + 1]; + } + + thread debug_line(var_05,var_06,param_01,param_02); + thread debug_line(param_03,var_05,param_01,param_02); + } +} + +//Function Number: 81 +debug_line(param_00,param_01,param_02,param_03) +{ + if(!isdefined(param_03)) + { + param_03 = (1,1,1); + } + + for(var_04 = 0;var_04 < param_02 * 20;var_04++) + { + wait 0.05; + } +} + +//Function Number: 82 +spotlight_tag_origin_cleanup(param_00) +{ + param_00 endon("death"); + level waittill("new_destructible_spotlight"); + param_00 delete(); +} + +//Function Number: 83 +spotlight_fizzles_out(param_00,param_01,param_02,param_03,param_04) +{ + level endon("new_destructible_spotlight"); + thread spotlight_tag_origin_cleanup(param_04); + var_05 = param_00["spotlight_brightness"]; + common_scripts\utility::noself_func("setsaveddvar","r_spotlightbrightness",var_05); + wait randomfloatrange(2,5); + var_06 = randomintrange(5,11); + for(var_07 = 0;var_07 < var_06;var_07++) + { + common_scripts\utility::noself_func("setsaveddvar","r_spotlightbrightness",var_05 * 0.65); + wait 0.05; + common_scripts\utility::noself_func("setsaveddvar","r_spotlightbrightness",var_05); + wait 0.05; + } + + destructible_fx_think(param_00,param_01,param_02,param_03); + level.destructible_spotlight delete(); + param_04 delete(); +} + +//Function Number: 84 +destructible_spotlight_think(param_00,param_01,param_02,param_03) +{ + if(!common_scripts\utility::issp()) + { + return; + } + + if(!isdefined(self.var_E9F)) + { + return; + } + + param_01 common_scripts\utility::self_func("startignoringspotLight"); + foreach(var_06, var_05 in param_00["dvars"]) + { + common_scripts\utility::noself_func("setsaveddvar",var_06,var_05); + } + + if(!isdefined(level.destructible_spotlight)) + { + level.destructible_spotlight = common_scripts\utility::spawn_tag_origin(); + var_07 = common_scripts\utility::getfx(param_00["spotlight_fx"]); + playfxontag(var_07,level.destructible_spotlight,"tag_origin"); + } + + level notify("new_destructible_spotlight"); + level.destructible_spotlight unlink(); + var_08 = common_scripts\utility::spawn_tag_origin(); + var_08 linkto(self,param_00["spotlight_tag"],(0,0,0),(0,0,0)); + level.destructible_spotlight.origin = self.var_E9F.origin; + level.destructible_spotlight.angles = self.var_E9F.angles; + level.destructible_spotlight thread spotlight_fizzles_out(param_00,param_01,param_02,param_03,var_08); + wait 0.05; + if(isdefined(var_08)) + { + level.destructible_spotlight linkto(var_08); + } +} + +//Function Number: 85 +is_valid_damagetype(param_00,param_01,param_02,param_03) +{ + var_04 = undefined; + if(isdefined(param_01["fx_valid_damagetype"])) + { + var_04 = param_01["fx_valid_damagetype"][param_03][param_02]; + } + + if(!isdefined(var_04)) + { + return 1; + } + + return issubstr(var_04,param_00); +} + +//Function Number: 86 +destructible_sound_think(param_00,param_01,param_02,param_03) +{ + if(isdefined(self.var_946)) + { + return undefined; + } + + if(!isdefined(param_00["sound"])) + { + return undefined; + } + + if(!isdefined(param_03)) + { + param_03 = 0; + } + + for(var_04 = 0;var_04 < param_00["sound"][param_03].size;var_04++) + { + var_05 = isvalidsoundcause("soundCause",param_00,var_04,param_02,param_03); + if(!var_05) + { + continue; + } + + var_06 = param_00["sound"][param_03][var_04]; + var_07 = param_00["tagName"]; + param_01 thread play_sound(var_06,var_07); + } + + return param_03; +} + +//Function Number: 87 +destructible_fx_think(param_00,param_01,param_02,param_03,param_04) +{ + if(!isdefined(param_00["fx"])) + { + return undefined; + } + + if(!isdefined(param_04)) + { + param_04 = randomint(param_00["fx_filename"].size); + } + + if(!isdefined(param_00["fx"][param_04])) + { + param_04 = randomint(param_00["fx_filename"].size); + } + + var_05 = param_00["fx_filename"][param_04].size; + for(var_06 = 0;var_06 < var_05;var_06++) + { + if(!is_valid_damagetype(param_02,param_00,var_06,param_04)) + { + continue; + } + + var_07 = param_00["fx"][param_04][var_06]; + if(isdefined(param_00["fx_tag"][param_04][var_06])) + { + var_08 = param_00["fx_tag"][param_04][var_06]; + self notify("FX_State_Change" + param_03); + if(param_00["fx_useTagAngles"][param_04][var_06]) + { + playfxontag(var_07,param_01,var_08); + } + else + { + var_09 = param_01 gettagorigin(var_08); + var_0A = var_09 + (0,0,100) - var_09; + playfx(var_07,var_09,var_0A); + } + + continue; + } + + var_09 = param_01.origin; + var_0A = var_09 + (0,0,100) - var_09; + playfx(var_07,var_09,var_0A); + } + + return param_04; +} + +//Function Number: 88 +destructible_animation_think(param_00,param_01,param_02,param_03) +{ + if(isdefined(self.var_946)) + { + return undefined; + } + + if(!isdefined(param_00["animation"])) + { + return undefined; + } + + if(isdefined(self.var_EAB)) + { + return undefined; + } + + if(isdefined(param_00["randomly_flip"]) && !isdefined(self.script_noflip)) + { + if(common_scripts\utility::cointoss()) + { + self.angles = self.angles + (0,180,0); + } + } + + if(isdefined(param_00["spotlight_tag"])) + { + thread destructible_spotlight_think(param_00,param_01,param_02,param_03); + wait 0.05; + } + + var_04 = common_scripts\utility::random(param_00["animation"]); + var_05 = var_04["anim"]; + var_06 = var_04["animTree"]; + var_07 = var_04["groupNum"]; + var_08 = var_04["mpAnim"]; + var_09 = var_04["maxStartDelay"]; + var_0A = var_04["animRateMin"]; + var_0B = var_04["animRateMax"]; + if(!isdefined(var_0A)) + { + var_0A = 1; + } + + if(!isdefined(var_0B)) + { + var_0B = 1; + } + + if(var_0A == var_0B) + { + var_0C = var_0A; + } + else + { + var_0C = randomfloatrange(var_0B,var_0C); + } + + var_0D = var_04["vehicle_exclude_anim"]; + if(self.code_classname == "script_vehicle" && var_0D) + { + return undefined; + } + + param_01 common_scripts\utility::self_func("useanimtree",var_06); + var_0E = var_04["animType"]; + if(!isdefined(self.var_E7B)) + { + self.var_E7B = []; + } + + self.var_E7B[self.var_E7B.size] = var_05; + if(isdefined(self.var_E56)) + { + clear_anims(param_01); + } + + if(isdefined(var_09) && var_09 > 0) + { + wait randomfloat(var_09); + } + + if(!common_scripts\utility::issp()) + { + if(isdefined(var_08)) + { + common_scripts\utility::self_func("scriptModelPlayAnim",var_08); + } + + return var_07; + } + + if(var_0E == "setanim") + { + param_01 common_scripts\utility::self_func("setanim",var_05,1,1,var_0C); + return var_07; + } + + if(var_0E == "setanimknob") + { + param_01 common_scripts\utility::self_func("setanimknob",var_05,1,0,var_0C); + return var_07; + } + + return undefined; +} + +//Function Number: 89 +clear_anims(param_00) +{ + if(isdefined(self.var_E7B)) + { + foreach(var_02 in self.var_E7B) + { + if(common_scripts\utility::issp()) + { + param_00 common_scripts\utility::self_func("clearanim",var_02,0); + continue; + } + + param_00 common_scripts\utility::self_func("scriptModelClearAnim"); + } + } +} + +//Function Number: 90 +init_destroyed_count() +{ + level.var_EAE = 0; + level.var_EAF = 0.5; + if(common_scripts\utility::issp()) + { + level.var_EB0 = 20; + return; + } + + level.var_EB0 = 2; +} + +//Function Number: 91 +add_to_destroyed_count() +{ + level.var_EAE++; + wait level.var_EAF; + level.var_EAE--; +} + +//Function Number: 92 +get_destroyed_count() +{ + return level.var_EAE; +} + +//Function Number: 93 +get_max_destroyed_count() +{ + return level.var_EB0; +} + +//Function Number: 94 +init_destructible_frame_queue() +{ + level.var_EB5 = []; +} + +//Function Number: 95 +add_destructible_to_frame_queue(param_00,param_01,param_02) +{ + var_03 = self getentitynumber(); + if(!isdefined(level.var_EB5[var_03])) + { + level.var_EB5[var_03] = spawnstruct(); + level.var_EB5[var_03].entnum = var_03; + level.var_EB5[var_03].destructible = param_00; + level.var_EB5[var_03].var_EB9 = 0; + level.var_EB5[var_03].var_EBA = 9999999; + level.var_EB5[var_03].var_EBB = 0; + } + + level.var_EB5[var_03].var_EBB = level.var_EB5[var_03].var_EBB + param_01.v["fxcost"]; + level.var_EB5[var_03].var_EB9 = level.var_EB5[var_03].var_EB9 + param_02; + if(param_01.v["distance"] < level.var_EB5[var_03].var_EBA) + { + level.var_EB5[var_03].var_EBA = param_01.v["distance"]; + } + + thread handle_destructible_frame_queue(); +} + +//Function Number: 96 +handle_destructible_frame_queue() +{ + level notify("handle_destructible_frame_queue"); + level endon("handle_destructible_frame_queue"); + wait 0.05; + var_00 = level.var_EB5; + level.var_EB5 = []; + var_01 = sort_destructible_frame_queue(var_00); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + if(get_destroyed_count() < get_max_destroyed_count()) + { + if(var_01[var_02].var_EBB) + { + thread add_to_destroyed_count(); + } + + var_01[var_02].destructible notify("queue_processed",1); + continue; + } + + var_01[var_02].destructible notify("queue_processed",0); + } +} + +//Function Number: 97 +sort_destructible_frame_queue(param_00) +{ + var_01 = []; + foreach(var_03 in param_00) + { + var_01[var_01.size] = var_03; + } + + for(var_05 = 1;var_05 < var_01.size;var_05++) + { + var_06 = var_01[var_05]; + for(var_07 = var_05 - 1;var_07 >= 0 && get_better_destructible(var_06,var_01[var_07]) == var_06;var_07--) + { + var_01[var_07 + 1] = var_01[var_07]; + } + + var_01[var_07 + 1] = var_06; + } + + return var_01; +} + +//Function Number: 98 +get_better_destructible(param_00,param_01) +{ + if(param_00.var_EB9 > param_01.var_EB9) + { + return param_00; + } + + return param_01; +} + +//Function Number: 99 +get_part_fx_cost_for_action_state(param_00,param_01) +{ + var_02 = 0; + if(!isdefined(level.destructible_type[self.destructibleinfo].var_E42[param_00][param_01])) + { + return var_02; + } + + var_03 = level.destructible_type[self.destructibleinfo].var_E42[param_00][param_01].v; + if(isdefined(var_03["fx"])) + { + foreach(var_05 in var_03["fx_cost"]) + { + foreach(var_07 in var_05) + { + var_02 = var_02 + var_07; + } + } + } + + return var_02; +} \ No newline at end of file diff --git a/MW3/PC/MP/common_scripts/_destructible_types.gsc b/MW3/PC/MP/common_scripts/_destructible_types.gsc new file mode 100644 index 0000000..5d5ea3e --- /dev/null +++ b/MW3/PC/MP/common_scripts/_destructible_types.gsc @@ -0,0 +1,6201 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: common_scripts\_destructible_types.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 161 + * Decompile Time: 2627 ms + * Timestamp: 10/27/2023 2:17:01 AM +*******************************************************************/ + +//Function Number: 1 +maketype(param_00) +{ + var_01 = getinfoindex(param_00); + if(var_01 >= 0) + { + return var_01; + } + + switch(param_00) + { + case "rus_vx_gas_canister": + dest_pb_planter(param_00); + break; + + case "prop_ac_prs_enm_barge_a_1": + prop_ac_prs_enm_barge_a_1(); + break; + + case "prop_ac_prs_enm_barge_a_2": + prop_ac_prs_enm_barge_a_2(); + break; + + case "prop_ac_prs_enm_con_digger_a": + prop_ac_prs_enm_con_digger_a(); + break; + + case "prop_ac_prs_enm_con_dump_truck_a": + prop_ac_prs_enm_con_dump_truck_a(); + break; + + case "prop_ac_prs_enm_fuel_tank_a": + prop_ac_prs_enm_fuel_tank_a(); + break; + + case "vehicle_jeep": + vehicle_uaz_fabric(param_00); + break; + + case "vehicle_uaz_van_destructible": + vehicle_subcompact(param_00); + break; + + case "prop_ac_prs_enm_hanger_a": + prop_ac_prs_enm_hanger_a(); + break; + + case "prop_ac_prs_enm_maz_a": + prop_ac_prs_enm_maz_a(); + break; + + case "prop_ac_prs_enm_mi26_halo_a": + prop_ac_prs_enm_mi26_halo_a(); + break; + + case "prop_ac_prs_enm_mstas_a": + prop_ac_prs_enm_mstas_a(); + break; + + case "prop_ac_prs_enm_radar_maz_a": + prop_ac_prs_enm_radar_maz_a(); + break; + + case "prop_ac_prs_enm_s300v_a": + prop_ac_prs_enm_s300v_a(); + break; + + case "prop_ac_prs_enm_storage_bld_a_1": + prop_ac_prs_enm_storage_bld_a_1(); + break; + + case "prop_ac_prs_enm_storage_bld_a_2": + prop_ac_prs_enm_storage_bld_a_2(); + break; + + case "prop_ac_prs_enm_storage_bld_b": + prop_ac_prs_enm_storage_bld_b(); + break; + + case "vehicle_semi_truck": + vehicle_mig29_landed(); + break; + + case "prop_ac_prs_enm_tent_a": + prop_ac_prs_enm_tent_a(); + break; + + case "prop_ac_prs_enm_tent_b": + prop_ac_prs_enm_tent_b(); + break; + + case "prop_ac_prs_enm_tent_c": + prop_ac_prs_enm_tent_c(); + break; + + case "prop_ac_prs_enm_truck_a": + prop_ac_prs_enm_truck_a(); + break; + + case "prop_ac_prs_enm_cargo_crate_a_1": + prop_ac_prs_enm_cargo_crate_a_1(); + break; + + case "prop_ac_prs_enm_cargo_crate_a_2": + prop_ac_prs_enm_cargo_crate_a_2(); + break; + + case "prop_ac_prs_enm_crates_a_1": + prop_ac_prs_enm_crates_a_1(); + break; + + case "prop_ac_prs_enm_crates_a_2": + prop_ac_prs_enm_crates_a_2(); + break; + + case "prop_ac_prs_enm_crates_b_1": + prop_ac_prs_enm_crates_b_1(); + break; + + case "prop_ac_prs_enm_crates_b_2": + prop_ac_prs_enm_crates_b_2(); + break; + + case "prop_ac_prs_enm_mobile_crane_a": + prop_ac_prs_enm_mobile_crane_a(); + break; + + case "prop_ac_prs_enm_landing_craft_a": + prop_ac_prs_enm_landing_craft_a(); + break; + + case "prop_ac_prs_enm_speed_boat_a": + prop_ac_prs_enm_speed_boat_a(); + break; + + case "prop_ac_prs_prp_satellite_dish_a_dish": + prop_ac_prs_prp_satellite_dish_a_dish(); + break; + + case "prop_ac_prs_fps_hc_extc_balcony_a1": + prop_ac_prs_fps_hc_extc_balcony_a1(); + break; + + case "prop_ac_prs_fps_hc_extc_balcony_a2": + prop_ac_prs_fps_hc_extc_balcony_a2(); + break; + + case "prop_ac_prs_fps_hc_extc_balcony_a3": + prop_ac_prs_fps_hc_extc_balcony_a3(); + break; + + case "prop_ac_prs_fps_hc_extc_balcony_b1": + prop_ac_prs_fps_hc_extc_balcony_b1(); + break; + + case "prop_ac_prs_fps_hc_extc_balcony_b2": + prop_ac_prs_fps_hc_extc_balcony_b2(); + break; + + case "prop_ac_prs_fps_hc_extc_balcony_b3": + prop_ac_prs_fps_hc_extc_balcony_b3(); + break; + + case "prop_ac_prs_fps_hc_extc_balcony_c1": + prop_ac_prs_fps_hc_extc_balcony_c1(); + break; + + case "prop_ac_prs_fps_hc_extc_balcony_c2": + prop_ac_prs_fps_hc_extc_balcony_c2(); + break; + + case "prop_ac_prs_fps_hc_extc_column_b_a1": + prop_ac_prs_fps_hc_extc_column_b_a1(); + break; + + case "prop_ac_prs_fps_hc_extc_column_b_a2": + prop_ac_prs_fps_hc_extc_column_b_a2(); + break; + + case "prop_ac_prs_fps_hc_extc_column_b_a3": + prop_ac_prs_fps_hc_extc_column_b_a3(); + break; + + case "prop_ac_prs_fps_hc_extc_column_t_a1": + prop_ac_prs_fps_hc_extc_column_t_a1(); + break; + + case "prop_ac_prs_fps_hc_extc_column_t_a2": + prop_ac_prs_fps_hc_extc_column_t_a2(); + break; + + case "prop_ac_prs_fps_hc_extc_column_t_a3": + prop_ac_prs_fps_hc_extc_column_t_a3(); + break; + + case "prop_ac_prs_enm_missile_boat_a": + prop_ac_prs_enm_missile_boat_a(); + break; + + case "toy_glass120x110": + toy_glass("120x110"); + break; + + case "vehicle_mini_destructible_blue": + get_precached_animtree("blue"); + break; + + case "vehicle_mini_destructible_gray": + get_precached_animtree("gray"); + break; + + case "vehicle_mini_destructible_white": + get_precached_animtree("white"); + break; + + case "vehicle_mini_destructible_red": + get_precached_animtree("red"); + break; + + case "toy_glass120x44": + toy_glass("120x44"); + break; + + case "toy_glass56x59": + toy_glass("56x59"); + break; + + case "toy_glass74x110": + toy_glass("74x110"); + break; + + case "toy_glass74x44": + toy_glass("74x44"); + break; + + case "toy_dt_mirror": + toy_dt_mirror(""); + break; + + case "toy_dt_mirror_large": + toy_dt_mirror("_large"); + break; + + case "toy_icbm_consolemonitor1": + toy_icbm_consolemonitor("1"); + break; + + case "toy_icbm_consolemonitor2": + toy_icbm_consolemonitor("2"); + break; + + case "toy_icbm_consolemonitor3": + toy_icbm_consolemonitor("3"); + break; + + case "toy_icbm_consolemonitor4": + toy_icbm_consolemonitor("4"); + break; + + case "toy_icbm_consolemonitor5": + toy_icbm_consolemonitor("5"); + break; + + case "toy_icbm_consolemonitor6": + toy_icbm_consolemonitor("6"); + break; + + case "toy_tubetv_tv1": + toy_tubetv_("tv1"); + break; + + case "toy_tubetv_tv2": + toy_tubetv_("tv2"); + break; + + case "toy_tv_flatscreen_01": + toy_tvs_flatscreen("01",""); + break; + + case "toy_tv_flatscreen_02": + toy_tvs_flatscreen("02",""); + break; + + case "toy_tv_flatscreen_wallmount_01": + toy_tvs_flatscreen("01","wallmount_"); + break; + + case "toy_tv_flatscreen_wallmount_01_sturdy": + toy_tvs_flatscreen_sturdy("01","wallmount_"); + break; + + case "toy_tv_flatscreen_wallmount_02": + toy_tvs_flatscreen("02","wallmount_"); + break; + + case "toy_transformer_ratnest01": + toy_transformer_ratnest01(param_00); + break; + + case "toy_transformer_small01": + toy_transformer_small01(param_00); + break; + + case "toy_generator": + toy_generator(param_00); + break; + + case "toy_generator_on": + toy_generator_on(param_00); + break; + + case "toy_oxygen_tank_01": + toy_oxygen_tank("01"); + break; + + case "toy_oxygen_tank_02": + toy_oxygen_tank("02"); + break; + + case "toy_electricbox2": + toy_electricbox2(param_00); + break; + + case "toy_electricbox4": + toy_electricbox4(param_00); + break; + + case "toy_airconditioner": + toy_airconditioner(param_00); + break; + + case "toy_ceiling_fan": + toy_ceiling_fan(param_00); + break; + + case "toy_wall_fan": + toy_wall_fan(param_00); + break; + + case "toy_propane_tank02": + toy_propane_tank02(param_00); + break; + + case "toy_propane_tank02_small": + toy_propane_tank02_small(param_00); + break; + + case "toy_copier": + toy_copier(param_00); + break; + + case "toy_firehydrant": + toy_firehydrant(param_00); + break; + + case "toy_parkingmeter": + toy_parkingmeter(param_00); + break; + + case "toy_mailbox": + toy_mailbox(param_00); + break; + + case "toy_mailbox2_black": + toy_mailbox2("black"); + break; + + case "toy_mailbox2_green": + toy_mailbox2("green"); + break; + + case "toy_mailbox2_yellow": + toy_mailbox2("yellow"); + break; + + case "toy_newspaper_stand_red": + toy_newspaper_stand_red(param_00); + break; + + case "toy_newspaper_stand_blue": + toy_newspaper_stand_blue(param_00); + break; + + case "toy_filecabinet": + toy_filecabinet(param_00); + break; + + case "toy_trashbin_01": + toy_trashbin_01(param_00); + break; + + case "toy_trashbin_02": + toy_trashbin_02(param_00); + break; + + case "toy_trashbag1_white": + toy_trashbag1("white"); + break; + + case "toy_trashbag1_black": + toy_trashbag1("black"); + break; + + case "toy_trashbag1_green": + toy_trashbag1("green"); + break; + + case "toy_recyclebin_01": + toy_recyclebin_01(param_00); + break; + + case "toy_trashcan_metal_closed": + toy_trashcan_metal_closed(param_00); + break; + + case "toy_water_collector": + toy_water_collector(param_00); + break; + + case "toy_foliage_tree_oak_1": + toy_foliage_tree_oak_1(param_00); + break; + + case "toy_paris_tree_plane_large": + toy_paris_tree_plane_large(param_00); + break; + + case "toy_usa_gas_station_trash_bin_01": + toy_usa_gas_station_trash_bin_01(param_00); + break; + + case "toy_usa_gas_station_trash_bin_02": + toy_usa_gas_station_trash_bin_02(param_00); + break; + + case "toy_light_ceiling_round": + toy_light_ceiling_round(param_00); + break; + + case "toy_light_ceiling_fluorescent": + toy_light_ceiling_fluorescent(param_00); + break; + + case "toy_light_ceiling_fluorescent_spotlight": + toy_light_ceiling_fluorescent_spotlight(param_00); + break; + + case "toy_light_ceiling_fluorescent_single": + toy_light_ceiling_fluorescent_single(param_00); + break; + + case "toy_light_ceiling_fluorescent_single_spotlight": + toy_light_ceiling_fluorescent_single_spotlight(param_00); + break; + + case "toy_bookstore_bookstand4_books": + toy_bookstore_bookstand4_books(param_00); + break; + + case "toy_locker_double": + toy_locker_double(param_00); + break; + + case "toy_chicken": + toy_chicken(""); + break; + + case "toy_chicken_white": + toy_chicken("_white"); + break; + + case "toy_chicken_black_white": + toy_chicken("_black_white"); + break; + + case "toy_luggage_01": + toy_hide_with_fx("toy_luggage_01","luggage1_lod0","maps/hijack/luggage_1_des_hjk",120); + break; + + case "toy_luggage_02": + toy_hide_with_fx("toy_luggage_02","luggage2_lod0","maps/hijack/luggage_2_des_hjk",120); + break; + + case "toy_luggage_03": + toy_hide_with_fx("toy_luggage_03","luggage3_lod0","maps/hijack/luggage_3_des_hjk",120); + break; + + case "toy_luggage_04": + toy_hide_with_fx("toy_luggage_04","luggage4_lod0","maps/hijack/luggage_4_des_hjk",120); + break; + + case "toy_com_cardboardbox_dusty_05": + toy_hide_with_fx("toy_com_cardboardbox_dusty_05","cardboardbox_5_lod0","props/cardboardbox01_snacks_exp",30); + break; + + case "toy_com_cardboardboxshortclosed_1": + toy_hide_with_fx("toy_com_cardboardboxshortclosed_1","cardboardboxshortclosed_1_lod0","props/cardboardboxshortclosed_snacks_exp",30); + break; + + case "intro_gate_column_02_dest_01": + toy_intro_concrete_chipaway("intro_gate_column_02_dest_01",12); + break; + + case "intro_concrete_junkyardwall_01": + toy_intro_concrete_chipaway("intro_concrete_junkyardwall_01",9); + break; + + case "intro_concrete_kneehighwall_01": + toy_intro_concrete_chipaway("intro_concrete_kneehighwall_01",8); + break; + + case "dub_lobby_fish_sculpture_left_orange": + toy_dubai_fish_sculpture("dub_lobby_fish_sculpture_left_orange","orange",40); + break; + + case "dub_lobby_fish_sculpture_right_orange": + toy_dubai_fish_sculpture("dub_lobby_fish_sculpture_right_orange","orange",40); + break; + + case "dub_lobby_fish_sculpture_left_blue": + toy_dubai_fish_sculpture("dub_lobby_fish_sculpture_left_blue","blue",45); + break; + + case "dub_lobby_fish_sculpture_right_blue": + toy_dubai_fish_sculpture("dub_lobby_fish_sculpture_right_blue","blue",45); + break; + + case "dub_lobby_fish_sculpture_left_purple": + toy_dubai_fish_sculpture("dub_lobby_fish_sculpture_left_purple","purple",39); + break; + + case "dub_lobby_fish_sculpture_right_purple": + toy_dubai_fish_sculpture("dub_lobby_fish_sculpture_right_purple","purple",39); + break; + + case "vehicle_ac130_80s_sedan1_yel": + vehicle_ac130_80s_sedan1("yel"); + break; + + case "vehicle_bus_destructible": + vehicle_bus_destructible(param_00); + break; + + case "vehicle_80s_sedan1_green": + vehicle_80s_sedan1("green"); + break; + + case "vehicle_80s_sedan1_red": + vehicle_80s_sedan1("red"); + break; + + case "vehicle_80s_sedan1_silv": + vehicle_80s_sedan1("silv"); + break; + + case "vehicle_80s_sedan1_tan": + vehicle_80s_sedan1("tan"); + break; + + case "vehicle_80s_sedan1_yel": + vehicle_80s_sedan1("yel"); + break; + + case "vehicle_80s_sedan1_brn": + vehicle_80s_sedan1("brn"); + break; + + case "vehicle_80s_hatch1_green": + vehicle_80s_hatch1("green"); + break; + + case "vehicle_80s_hatch1_red": + vehicle_80s_hatch1("red"); + break; + + case "vehicle_80s_hatch1_silv": + vehicle_80s_hatch1("silv"); + break; + + case "vehicle_80s_hatch1_tan": + vehicle_80s_hatch1("tan"); + break; + + case "vehicle_80s_hatch1_yel": + vehicle_80s_hatch1("yel"); + break; + + case "vehicle_80s_hatch1_brn": + vehicle_80s_hatch1("brn"); + break; + + case "vehicle_80s_hatch2_green": + vehicle_80s_hatch2("green"); + break; + + case "vehicle_80s_hatch2_red": + vehicle_80s_hatch2("red"); + break; + + case "vehicle_80s_hatch2_silv": + vehicle_80s_hatch2("silv"); + break; + + case "vehicle_80s_hatch2_tan": + vehicle_80s_hatch2("tan"); + break; + + case "vehicle_80s_hatch2_yel": + vehicle_80s_hatch2("yel"); + break; + + case "vehicle_80s_hatch2_brn": + vehicle_80s_hatch2("brn"); + break; + + case "vehicle_80s_wagon1_green": + vehicle_80s_wagon1("green"); + break; + + case "vehicle_80s_wagon1_red": + vehicle_80s_wagon1("red"); + break; + + case "vehicle_80s_wagon1_silv": + vehicle_80s_wagon1("silv"); + break; + + case "vehicle_80s_wagon1_tan": + vehicle_80s_wagon1("tan"); + break; + + case "vehicle_80s_wagon1_yel": + vehicle_80s_wagon1("yel"); + break; + + case "vehicle_80s_wagon1_brn": + vehicle_80s_wagon1("brn"); + break; + + case "vehicle_civ_car_a_1": + vehicle_civ_car_a(1); + break; + + case "vehicle_civ_car_a_2": + vehicle_civ_car_a(2); + break; + + case "vehicle_civ_car_a_3": + vehicle_civ_car_a(3); + break; + + case "vehicle_civ_car_a_4": + vehicle_civ_car_a(4); + break; + + case "vehicle_civ_car_a_5": + vehicle_civ_car_a(5); + break; + + case "vehicle_civ_car_a_6": + vehicle_civ_car_a(6); + break; + + case "vehicle_civ_car_a_7": + vehicle_civ_car_a(7); + break; + + case "vehicle_civ_car_a_8": + vehicle_civ_car_a(8); + break; + + case "vehicle_civ_car_a_9": + vehicle_civ_car_a(9); + break; + + case "vehicle_civ_car_a_10": + vehicle_civ_car_a(10); + break; + + case "vehicle_civ_car_a_11": + vehicle_civ_car_a(11); + break; + + case "vehicle_civ_car_a_12": + vehicle_civ_car_a(12); + break; + + case "vehicle_civ_car_a_13": + vehicle_civ_car_a(13); + break; + + case "vehicle_small_hatch_blue": + vehicle_small_hatch("blue"); + break; + + case "vehicle_london_cab_black": + vehicle_london_cab_black(); + break; + + case "vehicle_small_hatch_green": + vehicle_small_hatch("green"); + break; + + case "vehicle_small_hatch_turq": + vehicle_small_hatch("turq"); + break; + + case "vehicle_small_hatch_white": + vehicle_small_hatch("white"); + break; + + case "vehicle_pickup": + vehicle_pickup(param_00); + break; + + case "vehicle_hummer": + vehicle_hummer(param_00); + break; + + case "vehicle_gaz": + vehicle_t72(param_00); + break; + + case "vehicle_gaz_harbor": + vehicle_btr(param_00); + break; + + case "vehicle_moving_truck_thai": + case "vehicle_moving_truck": + vehicle_gaz_harbor(param_00); + break; + + case "vehicle_subway_cart": + vehicle_bm21(param_00); + break; + + case "vehicle_subway_cart_windows": + vehicle_subway_cart(param_00); + break; + + case "vehicle_subway_cart_windows_small": + create_vehicle_subway_cart_window_single(param_00); + break; + + case "vehicle_bm21_mobile_bed": + vehicle_gaz(param_00,"vehicle_bm21_mobile_bed_dstry"); + break; + + case "vehicle_bm21_cover": + vehicle_gaz(param_00,"vehicle_bm21_mobile_cover_dstry"); + break; + + case "vehicle_luxurysedan_2008": + vehicle_subway_cart_windows(""); + break; + + case "vehicle_luxurysedan_2008_gray": + vehicle_subway_cart_windows("_gray"); + break; + + case "vehicle_luxurysedan_2008_white": + vehicle_subway_cart_windows("_white"); + break; + + case "vehicle_uk_truck": + vehicle_coupe(param_00); + break; + + case "vehicle_uk_police_estate": + vehicle_mini(param_00); + break; + + case "vehicle_uaz_winter": + vehicle_uk_truck(param_00); + break; + + case "vehicle_uaz_fabric": + vehicle_uk_police_estate(param_00); + break; + + case "vehicle_uaz_hardtop": + vehicle_uaz_winter(param_00); + break; + + case "vehicle_uaz_open": + vehicle_jeep(param_00); + break; + + case "vehicle_india_suv_w": + vehicle_india_rickshaw("w"); + break; + + case "vehicle_india_suv_b": + vehicle_india_rickshaw("b"); + break; + + case "vehicle_india_compact_destructible_gray": + vehicle_jeep_dusty("gray"); + break; + + case "vehicle_india_compact_destructible_red": + vehicle_jeep_dusty("red"); + break; + + case "vehicle_india_compact_destructible_brown": + vehicle_jeep_dusty("brown"); + break; + + case "vehicle_india_compact_destructible_blue": + vehicle_jeep_dusty("blue"); + break; + + case "vehicle_tuk_tuk": + vehicle_india_compact_destructible(param_00); + break; + + case "vehicle_india_rickshaw": + vehicle_uaz_open(param_00); + break; + + case "vehicle_policecar": + vehicle_tuk_tuk(param_00); + break; + + case "vehicle_policecar_russia": + vehicle_india_suv(param_00); + break; + + case "vehicle_taxi": + vehicle_policecar(param_00); + break; + + case "vehicle_taxi_dubai": + vehicle_policecar_russia(param_00); + break; + + case "vehicle_mig29_landed": + vehicle_subway_cart_windows_small(param_00); + break; + + case "vehicle_mack_truck_short_snow": + vehicle_luxurysedan("snow"); + break; + + case "vehicle_mack_truck_short_green": + vehicle_luxurysedan("green"); + break; + + case "vehicle_mack_truck_short_white": + vehicle_luxurysedan("white"); + break; + + case "vehicle_motorcycle_01": + vehicle_mack_truck_short("01"); + break; + + case "vehicle_motorcycle_02": + vehicle_mack_truck_short("02"); + break; + + case "vehicle_scooter_vespa": + vehicle_semi_truck("vehicle_scooter_vespa"); + break; + + case "vehicle_subcompact_black": + vehicle_motorcycle("black"); + break; + + case "vehicle_subcompact_blue": + vehicle_motorcycle("blue"); + break; + + case "vehicle_subcompact_dark_gray": + vehicle_motorcycle("dark_gray"); + break; + + case "vehicle_subcompact_deep_blue": + vehicle_motorcycle("deep_blue"); + break; + + case "vehicle_subcompact_gold": + vehicle_motorcycle("gold"); + break; + + case "vehicle_subcompact_gray": + vehicle_motorcycle("gray"); + break; + + case "vehicle_subcompact_green": + vehicle_motorcycle("green"); + break; + + case "vehicle_subcompact_mica": + vehicle_motorcycle("mica"); + break; + + case "vehicle_subcompact_slate": + vehicle_motorcycle("slate"); + break; + + case "vehicle_subcompact_tan": + vehicle_motorcycle("tan"); + break; + + case "vehicle_subcompact_white": + vehicle_motorcycle("white"); + break; + + case "vehicle_coupe_black": + get_precached_anim("black"); + break; + + case "vehicle_coupe_blue": + get_precached_anim("blue"); + break; + + case "vehicle_coupe_dark_gray": + get_precached_anim("dark_gray"); + break; + + case "vehicle_coupe_deep_blue": + get_precached_anim("deep_blue"); + break; + + case "vehicle_coupe_gold": + get_precached_anim("gold"); + break; + + case "vehicle_coupe_gray": + get_precached_anim("gray"); + break; + + case "vehicle_coupe_green": + get_precached_anim("green"); + break; + + case "vehicle_coupe_mica": + get_precached_anim("mica"); + break; + + case "vehicle_coupe_slate": + get_precached_anim("slate"); + break; + + case "vehicle_coupe_tan": + get_precached_anim("tan"); + break; + + case "vehicle_coupe_white": + get_precached_anim("white"); + break; + + case "vehicle_van_black": + vehicle_scooter("black"); + break; + + case "vehicle_van_blue": + vehicle_scooter("blue"); + break; + + case "vehicle_van_dark_gray": + vehicle_scooter("dark_gray"); + break; + + case "vehicle_van_deep_blue": + vehicle_scooter("deep_blue"); + break; + + case "vehicle_van_gold": + vehicle_scooter("gold"); + break; + + case "vehicle_van_gray": + vehicle_scooter("gray"); + break; + + case "vehicle_van_green": + vehicle_scooter("green"); + break; + + case "vehicle_van_mica": + vehicle_scooter("mica"); + break; + + case "vehicle_van_slate": + vehicle_scooter("slate"); + break; + + case "vehicle_van_tan": + vehicle_scooter("tan"); + break; + + case "vehicle_van_white": + vehicle_scooter("white"); + break; + + case "vehicle_suburban": + vehicle_van_iw5(param_00,""); + break; + + case "vehicle_suburban_beige": + vehicle_van_iw5(param_00,"_beige"); + break; + + case "vehicle_suburban_dull": + vehicle_van_iw5(param_00,"_dull"); + break; + + case "vehicle_suburban_red": + vehicle_van_iw5(param_00,"_red"); + break; + + case "vehicle_snowmobile": + vehicle_delivery_theme_park_truck_destructible(param_00); + break; + + case "destructible_gaspump": + vehicle_suburban(param_00); + break; + + case "destructible_electrical_transformer_large": + vehicle_snowmobile(param_00); + break; + + case "toy_new_dlc_destructible": + toy_glass("120x110"); + break; + + case "toy_security_camera": + vehicle_taxi(param_00); + break; + + case "toy_building_collapse_paris_ac130": + vehicle_taxi_dubai(param_00); + break; + + case "toy_poison_gas_attack": + toy_security_camera(param_00); + break; + + case "toy_arcade_machine_1": + toy_building_collapse_paris_ac130("_1"); + break; + + case "toy_arcade_machine_2": + toy_building_collapse_paris_ac130("_2"); + break; + + case "toy_pinball_machine_1": + toy_poison_gas_attack("_1"); + break; + + case "toy_pinball_machine_2": + toy_poison_gas_attack("_2"); + break; + + case "toy_fortune_machine": + toy_arcade_machine(param_00); + break; + + case "toy_trashcan_clown": + toy_pinball_machine(param_00); + break; + + case "toy_afrShanty1": + toy_fortune_machine(param_00); + break; + + case "vehicle_slava_ny_harbor_zonea": + toy_trashcan_clown(param_00); + break; + + case "rooftop_skylight_destructible": + toy_afrshanty1(param_00); + break; + + case "satellite_dish_big_destructible": + vehicle_slava_ny_harbor_zonea(param_00); + break; + + case "berlin_hotel_lights_ceiling1": + dest_onestate(param_00,"berlin_hotel_lights_ceiling1_destroyed"); + break; + + case "berlin_hotel_lights_ceiling1_off": + dest_onestate(param_00,"berlin_hotel_lights_ceiling1_destroyed"); + break; + + case "berlin_hotel_lights_wall1": + rooftop_skylight_destructible(param_00,"berlin_hotel_lights_wall1_destroyed","misc/light_blowout_wall2_runner"); + break; + + case "berlin_hotel_lights_wall1_off": + rooftop_skylight_destructible(param_00,"berlin_hotel_lights_wall1_destroyed","misc/light_blowout_wall2_runner"); + break; + + case "berlin_hotel_lights_wall2": + rooftop_skylight_destructible(param_00,"berlin_hotel_lights_wall2_destroyed","misc/light_blowout_wall_runner"); + break; + + case "berlin_hotel_lights_wall2_off": + rooftop_skylight_destructible(param_00,"berlin_hotel_lights_wall2_destroyed","misc/light_blowout_wall_runner"); + break; + + case "pb_cubical_planter": + satellite_dish_big_destructible(param_00,"pb_cubical_planter_dam","explosions/brick_chunk"); + break; + + case "vehicle_delivery_theme_park_truck_destructible": + vehicle_uaz_van(param_00); + break; + + case "vehicle_van_sas_dark_destructable": + vehicle_van("vehicle_van_sas_dark"); + break; + + case "vehicle_uk_police_van_destructable": + vehicle_van("vehicle_uk_police_van"); + break; + + case "vehicle_jeep_dusty": + vehicle_uaz_hardtop(param_00); + break; + + default: + break; + } + + var_01 = getinfoindex(param_00); + return var_01; +} + +//Function Number: 2 +getinfoindex(param_00) +{ + if(!isdefined(level.destructible_type)) + { + return -1; + } + + if(level.destructible_type.size == 0) + { + return -1; + } + + for(var_01 = 0;var_01 < level.destructible_type.size;var_01++) + { + if(param_00 == level.destructible_type[var_01].v["type"]) + { + return var_01; + } + } + + return -1; +} + +//Function Number: 3 +prop_ac_prs_enm_barge_a_1() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_barge_a_1","tag_origin",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("tag_origin","ac_prs_enm_barge_a_1_dam_animated",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_anim(destructible_gaspump("paris_ac130_barge_sink"),destructible_electrical_transformer_large("paris_ac130_barge_sink"),"setanim"); + common_scripts\_destructible::destructible_fx(undefined,"impacts/105mm_water_impact_fast",0); + common_scripts\_destructible::destructible_explode(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 4 +prop_ac_prs_enm_barge_a_2() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_barge_a_2","tag_origin",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("tag_origin","ac_prs_enm_barge_a_2_dam_animated",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_anim(destructible_gaspump("paris_ac130_barge_sink"),destructible_electrical_transformer_large("paris_ac130_barge_sink"),"setanim"); + common_scripts\_destructible::destructible_fx(undefined,"impacts/105mm_water_impact_fast",0); + common_scripts\_destructible::destructible_explode(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 5 +prop_ac_prs_enm_con_digger_a() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_con_digger_a","ac_prs_enm_con_digger_a_lod_0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_enm_con_digger_a_dam_lod0","ac_prs_enm_con_digger_a_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/building_explosion_paris_ac130",0); + common_scripts\_destructible::destructible_explode(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 6 +prop_ac_prs_enm_con_dump_truck_a() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_con_dump_truck_a","ac_prs_enm_con_dump_truck_a_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_enm_con_dump_truck_a_destroyed_lod0","ac_prs_enm_con_dump_truck_a_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/building_explosion_paris_ac130",0); + common_scripts\_destructible::destructible_explode(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 7 +prop_ac_prs_enm_fuel_tank_a() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_fuel_tank_a","ac_prs_enm_fuel_tank_a_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_enm_fuel_tank_a_dam_lod0","ac_prs_enm_fuel_tank_a_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/fuel_storage",0); + common_scripts\_destructible::destructible_explode(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 8 +prop_ac_prs_enm_hanger_a() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_hanger_a","ac_prs_enm_hanger_a_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_enm_hanger_a_dam_lod0","ac_prs_enm_hanger_a_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/building_explosion_paris_ac130",0); +} + +//Function Number: 9 +prop_ac_prs_enm_maz_a() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_maz_a","ac_prs_enm_maz_a",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_enm_maz_a_dam3","ac_prs_enm_maz_a_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/building_explosion_paris_ac130",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_flir_debris_explosion_a",0); + common_scripts\_destructible::destructible_explode(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 10 +prop_ac_prs_enm_mi26_halo_a() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_mi26_halo_a","ac_prs_enm_mi26_halo_a_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("polySurface80","ac_prs_enm_mi26_halo_a_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/helicopter_explosion_mi26_halo",0); + common_scripts\_destructible::destructible_explode(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 11 +prop_ac_prs_enm_mstas_a() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_mstas_a","ac_prs_enm_mstas_a_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_enm_mstas_a_dam_lod0","ac_prs_enm_mstas_a_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_flir_debris_explosion_a",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_debris_explosion_fire_a",0); + common_scripts\_destructible::destructible_explode(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 12 +prop_ac_prs_enm_radar_maz_a() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_radar_maz_a","tag_origin",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("tag_origin","ac_prs_enm_radar_maz_a",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_anim(destructible_gaspump("ac130_radartower_crash"),destructible_electrical_transformer_large("ac130_radartower_crash"),"setanim"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/building_explosion_paris_ac130",0); + common_scripts\_destructible::destructible_explode(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 13 +prop_ac_prs_enm_s300v_a() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_s300v_a","ac_prs_enm_s300v",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_enm_s300v_dam","ac_prs_enm_s300v_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/vehicle_explosion_sam",0); + common_scripts\_destructible::destructible_explode(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 14 +prop_ac_prs_enm_storage_bld_a_1() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_storage_bld_a_1","p_ac_prs_enm_storage_bld_a_1",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("p_ac_prs_enm_storage_bld_a_1_dam","ac_prs_enm_storage_bld_a_1_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/building_explosion_paris_ac130",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_flir_debris_explosion_a",0); +} + +//Function Number: 15 +prop_ac_prs_enm_storage_bld_a_2() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_storage_bld_a_2","p_ac_prs_enm_storage_bld_a_2",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("p_ac_prs_enm_storage_bld_a_2_dam","ac_prs_enm_storage_bld_a_2_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/building_explosion_paris_ac130",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_flir_debris_explosion_a",0); +} + +//Function Number: 16 +prop_ac_prs_enm_storage_bld_b() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_storage_bld_b","p_ac_prs_enm_storage_bld_b",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("p_ac_prs_enm_storage_bld_b_dam","ac_prs_enm_storage_bld_b_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/building_explosion_paris_ac130",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_flir_debris_explosion_max_a",0); +} + +//Function Number: 17 +prop_ac_prs_enm_tent_a() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_tent_a","ac_prs_enm_tent_a_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("polySurface1","ac_prs_enm_tent_a_dam1",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/tent_collapse",0); +} + +//Function Number: 18 +prop_ac_prs_enm_tent_b() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_tent_b","ac_prs_enm_tent_b_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_enm_tent_b_lod1","ac_prs_enm_tent_b_dam1",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/tent_collapse",0); +} + +//Function Number: 19 +prop_ac_prs_enm_tent_c() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_tent_c","ac_prs_enm_tent_c_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_enm_tent_c_lod1","ac_prs_enm_tent_c_dam1",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/tent_collapse",0); +} + +//Function Number: 20 +prop_ac_prs_enm_truck_a() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_truck_a","ac_prs_enm_truck_a_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_enm_truck_a_dam_lod0","ac_prs_enm_truck_a_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/building_explosion_paris_ac130",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_flir_debris_explosion_a",0); + common_scripts\_destructible::destructible_explode(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 21 +prop_ac_prs_enm_cargo_crate_a_1() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_cargo_crate_a_1","ac_prs_enm_cargo_crate_a_1_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_enm_cargo_crate_a_1_lod0","ac_prs_enm_cargo_crate_a_1_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/building_explosion_paris_ac130",0); + common_scripts\_destructible::destructible_explode(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 22 +prop_ac_prs_enm_cargo_crate_a_2() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_cargo_crate_a_2","ac_prs_enm_cargo_crate_a_2_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_enm_cargo_crate_a_2_lod0","ac_prs_enm_cargo_crate_a_2_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/building_explosion_paris_ac130",0); + common_scripts\_destructible::destructible_explode(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 23 +prop_ac_prs_enm_crates_a_1() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_crates_a_1","ac_prs_enm_crates_a_1_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_enm_crates_a_1_dam_lod0","ac_prs_enm_crates_a_1_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_enm_crates_a_explosion_1",0); +} + +//Function Number: 24 +prop_ac_prs_enm_crates_a_2() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_crates_a_2","ac_prs_enm_crates_a_2_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_enm_crates_a_2_dam_lod0","ac_prs_enm_crates_a_2_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_enm_crates_a_explosion_1",0); +} + +//Function Number: 25 +prop_ac_prs_enm_crates_b_1() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_crates_b_1","ac_prs_enm_crates_b_1_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_enm_crates_b_1_dam_lod0","ac_prs_enm_crates_b_1_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_enm_crates_b_explosion_1",0); +} + +//Function Number: 26 +prop_ac_prs_enm_crates_b_2() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_crates_b_2","ac_prs_enm_crates_b_2_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_enm_crates_b_2_dam_lod0","ac_prs_enm_crates_b_2_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_enm_crates_b_explosion_1",0); +} + +//Function Number: 27 +prop_ac_prs_enm_mobile_crane_a() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_mobile_crane_a","ac_prs_enm_mobile_crane_a_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_enm_mobile_crane_a_dam_lod0","ac_prs_enm_mobile_crane_a_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/building_explosion_paris_ac130",0); + common_scripts\_destructible::destructible_explode(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 28 +prop_ac_prs_enm_landing_craft_a() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_landing_craft_a","ac_prs_enm_landing_craft_a_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("tag_origin","ac_prs_enm_landing_craft_a_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/building_explosion_paris_ac130",0); + common_scripts\_destructible::destructible_explode(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 29 +prop_ac_prs_enm_speed_boat_a() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_speed_boat_a","ac_prs_enm_speed_boat_a",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_prp_metal_debris_a_01_lod0","ac_prs_prp_metal_debris_a_01",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/building_explosion_paris_ac130",0); + common_scripts\_destructible::destructible_explode(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 30 +prop_ac_prs_prp_satellite_dish_a_dish() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_prp_satellite_dish_a_dish","ac_prs_prp_satellite_dish_a_dish_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_prp_metal_debris_a_01_lod0","ac_prs_prp_metal_debris_a_01",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_dust_explosion_a",0); + common_scripts\_destructible::destructible_explode(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 31 +prop_ac_prs_fps_hc_extc_balcony_a1() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_fps_hc_extc_balcony_a1","ac_prs_fps_hc_extc_balcony_a_lod0",80,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_fps_hc_extc_balcony_a_dam1_lod0","ac_prs_fps_hc_extc_balcony_a_dam1",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_dust_explosion_a",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fps_extc_balcony_a_explosion_1",0); +} + +//Function Number: 32 +prop_ac_prs_fps_hc_extc_balcony_a2() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_fps_hc_extc_balcony_a2","ac_prs_fps_hc_extc_balcony_a_lod0",80,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_fps_hc_extc_balcony_a_dam2_lod0","ac_prs_fps_hc_extc_balcony_a_dam2",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_dust_explosion_a",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fps_extc_balcony_a_explosion_1",0); +} + +//Function Number: 33 +prop_ac_prs_fps_hc_extc_balcony_a3() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_fps_hc_extc_balcony_a3","ac_prs_fps_hc_extc_balcony_a_lod0",80,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_fps_hc_extc_balcony_a_dam3_lod0","ac_prs_fps_hc_extc_balcony_a_dam3",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_dust_explosion_a",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fps_extc_balcony_a_explosion_1",0); +} + +//Function Number: 34 +prop_ac_prs_fps_hc_extc_balcony_b1() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_fps_hc_extc_balcony_b1","ac_prs_fps_hc_extc_balcony_b_lod0",80,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_fps_hc_extc_balcony_b_dam1_lod0","ac_prs_fps_hc_extc_balcony_b_dam1",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_dust_explosion_a",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fps_extc_balcony_b_explosion_1",0); +} + +//Function Number: 35 +prop_ac_prs_fps_hc_extc_balcony_b2() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_fps_hc_extc_balcony_b2","ac_prs_fps_hc_extc_balcony_b_lod0",80,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_fps_hc_extc_balcony_b_dam2_lod0","ac_prs_fps_hc_extc_balcony_b_dam2",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_dust_explosion_a",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fps_extc_balcony_b_explosion_1",0); +} + +//Function Number: 36 +prop_ac_prs_fps_hc_extc_balcony_b3() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_fps_hc_extc_balcony_b3","ac_prs_fps_hc_extc_balcony_b_lod0",80,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_fps_hc_extc_balcony_b_dam3_lod0","ac_prs_fps_hc_extc_balcony_b_dam3",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_dust_explosion_a",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fps_extc_balcony_b_explosion_1",0); +} + +//Function Number: 37 +prop_ac_prs_fps_hc_extc_balcony_c1() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_fps_hc_extc_balcony_c1","ac_prs_fps_hc_extc_balcony_c_lod0",80,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_fps_hc_extc_balcony_c_dam1_lod0","ac_prs_fps_hc_extc_balcony_c_dam1",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_dust_explosion_a",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fps_extc_balcony_c_explosion_1",0); +} + +//Function Number: 38 +prop_ac_prs_fps_hc_extc_balcony_c2() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_fps_hc_extc_balcony_c2","ac_prs_fps_hc_extc_balcony_c_lod0",80,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_fps_hc_extc_balcony_c_dam2_lod0","ac_prs_fps_hc_extc_balcony_c_dam2",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_dust_explosion_a",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fps_extc_balcony_c_explosion_2",0); +} + +//Function Number: 39 +prop_ac_prs_fps_hc_extc_column_b_a1() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_fps_hc_extc_column_b_a1","ac_prs_fps_hc_extc_column_b_a_lod0",80,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_fps_hc_extc_column_b_a_dam1_lod0","ac_prs_fps_hc_extc_column_b_a_dam1",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_dust_explosion_a",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fps_extc_balcony_c_explosion_2",0); +} + +//Function Number: 40 +prop_ac_prs_fps_hc_extc_column_b_a2() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_fps_hc_extc_column_b_a2","ac_prs_fps_hc_extc_column_b_a_lod0",80,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_fps_hc_extc_column_b_a_dam2_lod0","ac_prs_fps_hc_extc_column_b_a_dam2",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_dust_explosion_a",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fps_extc_balcony_c_explosion_2",0); +} + +//Function Number: 41 +prop_ac_prs_fps_hc_extc_column_b_a3() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_fps_hc_extc_column_b_a3","ac_prs_fps_hc_extc_column_b_a_lod0",80,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_fps_hc_extc_column_b_a_dam3_lod0","ac_prs_fps_hc_extc_column_b_a_dam3",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_dust_explosion_a",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fps_extc_balcony_c_explosion_2",0); +} + +//Function Number: 42 +prop_ac_prs_fps_hc_extc_column_t_a1() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_fps_hc_extc_column_t_a1","ac_prs_fps_hc_extc_column_t_a_lod0",80,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_fps_hc_extc_column_t_a_dam1_lod0","ac_prs_fps_hc_extc_column_t_a_dam1",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_dust_explosion_a",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fps_extc_balcony_c_explosion_2",0); +} + +//Function Number: 43 +prop_ac_prs_fps_hc_extc_column_t_a2() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_fps_hc_extc_column_t_a2","ac_prs_fps_hc_extc_column_t_a_lod0",80,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_fps_hc_extc_column_t_a_dam2_lod0","ac_prs_fps_hc_extc_column_t_a_dam2",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_dust_explosion_a",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fps_extc_balcony_c_explosion_2",0); +} + +//Function Number: 44 +prop_ac_prs_fps_hc_extc_column_t_a3() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_fps_hc_extc_column_t_a3","ac_prs_fps_hc_extc_column_t_a_lod0",80,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_fps_hc_extc_column_t_a_dam3_lod0","ac_prs_fps_hc_extc_column_t_a_dam3",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_dust_explosion_a",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fps_extc_balcony_c_explosion_2",0); +} + +//Function Number: 45 +prop_ac_prs_enm_missile_boat_a() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_missile_boat_a","tag_origin",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("tag_origin","ac_prs_enm_missile_boat_a",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_anim(destructible_gaspump("paris_ac130_ship_sink"),destructible_electrical_transformer_large("paris_ac130_ship_sink"),"setanim"); + common_scripts\_destructible::destructible_fx(undefined,"impacts/105mm_water_impact_fast",0); + common_scripts\_destructible::destructible_explode(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 46 +toy_glass(param_00) +{ + common_scripts\_destructible::destructible_create("toy_glass" + param_00,"tag_origin",50); + common_scripts\_destructible::destructible_splash_damage_scaler(5); + common_scripts\_destructible::destructible_sound("building_glass_shatter"); + var_01 = "tag_glass"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/highrise_glass_" + param_00); + common_scripts\_destructible::destructible_sound("building_glass_blowout"); + common_scripts\_destructible::destructible_state(var_01 + "_des",undefined,100,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/highrise_glass_" + param_00 + "_edge"); + common_scripts\_destructible::destructible_sound("building_glass_blowout"); + common_scripts\_destructible::destructible_state(undefined); +} + +//Function Number: 47 +toy_dt_mirror(param_00) +{ + common_scripts\_destructible::destructible_create("toy_dt_mirror" + param_00,"tag_origin",150,undefined,32); + common_scripts\_destructible::destructible_splash_damage_scaler(5); + common_scripts\_destructible::destructible_fx("tag_fx","props/mirror_shatter" + param_00); + common_scripts\_destructible::destructible_sound("mirror_shatter"); + common_scripts\_destructible::destructible_state("tag_origin","dt_mirror" + param_00 + "_dam",150,undefined); + common_scripts\_destructible::destructible_fx("tag_fx","props/mirror_dt_panel" + param_00 + "_broken"); + common_scripts\_destructible::destructible_explode(1000,2000,32,32,32,48,undefined,0); + common_scripts\_destructible::destructible_state("tag_origin","dt_mirror" + param_00 + "_des",150,undefined); +} + +//Function Number: 48 +toy_icbm_consolemonitor(param_00) +{ + common_scripts\_destructible::destructible_create("toy_icbm_consolemonitor" + param_00,"television2_lod04",1,undefined,32); + common_scripts\_destructible::destructible_splash_damage_scaler(1); + common_scripts\_destructible::destructible_fx("television2_lod04","explosions/tv_explosion"); + common_scripts\_destructible::destructible_sound("tv_shot_burst","television2_lod04"); + common_scripts\_destructible::destructible_explode(20,2000,9,9,3,3,undefined,12); + common_scripts\_destructible::destructible_state("television2_lod04","hjk_icbm_consolemonitor7",undefined,undefined,"no_melee"); +} + +//Function Number: 49 +toy_tubetv_(param_00) +{ + common_scripts\_destructible::destructible_create("toy_tubetv_" + param_00,"tag_origin",1,undefined,32); + common_scripts\_destructible::destructible_splash_damage_scaler(1); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/tv_explosion"); + common_scripts\_destructible::destructible_sound("tv_shot_burst"); + common_scripts\_destructible::destructible_explode(20,2000,9,9,3,3,undefined,12); + common_scripts\_destructible::destructible_state(undefined,"com_" + param_00 + "_d",undefined,undefined,"no_melee"); +} + +//Function Number: 50 +toy_tvs_flatscreen(param_00,param_01) +{ + common_scripts\_destructible::destructible_create("toy_tv_flatscreen_" + param_01 + param_00,"tag_origin",1,undefined,32); + common_scripts\_destructible::destructible_splash_damage_scaler(1); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/tv_flatscreen_explosion"); + common_scripts\_destructible::destructible_sound("tv_shot_burst"); + common_scripts\_destructible::destructible_explode(20,2000,10,10,3,3,undefined,15); + common_scripts\_destructible::destructible_state(undefined,"ma_flatscreen_tv_" + param_01 + "broken_" + param_00,200,undefined,"no_melee"); +} + +//Function Number: 51 +toy_tvs_flatscreen_sturdy(param_00,param_01) +{ + common_scripts\_destructible::destructible_create("toy_tv_flatscreen_" + param_01 + param_00 + "_sturdy","tag_origin",1,undefined,1280); + common_scripts\_destructible::destructible_splash_damage_scaler(0.5); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/tv_flatscreen_explosion_cheap"); + common_scripts\_destructible::destructible_sound("tv_shot_burst"); + common_scripts\_destructible::destructible_explode(20,2000,10,10,3,3,undefined,15); + common_scripts\_destructible::destructible_state(undefined,"ma_flatscreen_tv_" + param_01 + "broken_" + param_00,200,undefined,"no_melee"); +} + +//Function Number: 52 +toy_transformer_ratnest01(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",75,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(15); + common_scripts\_destructible::destructible_loopfx("tag_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,75,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,150,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_sparks","explosions/transformer_spark_runner",0.5); + common_scripts\_destructible::destructible_loopsound("transformer_spark_loop"); + common_scripts\_destructible::destructible_healthdrain(24,0.2); + common_scripts\_destructible::destructible_state(undefined,undefined,250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_sparks","explosions/transformer_spark_runner",0.5); + common_scripts\_destructible::destructible_loopfx("tag_fx","fire/transformer_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("transformer01_flareup_med"); + common_scripts\_destructible::destructible_loopsound("transformer_spark_loop"); + common_scripts\_destructible::destructible_healthdrain(24,0.2,150,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,5,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/transformer_explosion",0); + common_scripts\_destructible::destructible_fx("tag_fx","fire/firelp_small_pm"); + common_scripts\_destructible::destructible_sound("transformer01_explode"); + common_scripts\_destructible::destructible_explode(7000,8000,150,256,16,100,undefined,0); + common_scripts\_destructible::destructible_state(undefined,"utility_transformer_ratnest01_dest",undefined,undefined,"no_melee"); +} + +//Function Number: 53 +toy_transformer_small01(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",75,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(15); + common_scripts\_destructible::destructible_loopfx("tag_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,75,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,150,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_fx","explosions/transformer_spark_runner",0.5); + common_scripts\_destructible::destructible_loopsound("transformer_spark_loop"); + common_scripts\_destructible::destructible_healthdrain(24,0.2); + common_scripts\_destructible::destructible_state(undefined,undefined,250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_fx","explosions/transformer_spark_runner",0.5); + common_scripts\_destructible::destructible_loopfx("tag_fx","fire/transformer_small_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("transformer01_flareup_med"); + common_scripts\_destructible::destructible_loopsound("transformer_spark_loop"); + common_scripts\_destructible::destructible_healthdrain(24,0.2,150,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,5,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/transformer_explosion",0); + common_scripts\_destructible::destructible_fx("tag_fx","fire/firelp_small_pm"); + common_scripts\_destructible::destructible_sound("transformer01_explode"); + common_scripts\_destructible::destructible_explode(7000,8000,150,256,16,100,undefined,0); + common_scripts\_destructible::destructible_state(undefined,"utility_transformer_small01_dest",undefined,undefined,"no_melee"); +} + +//Function Number: 54 +toy_generator(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_bounce",75,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(15); + common_scripts\_destructible::destructible_loopfx("tag_fx2","smoke/generator_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,75,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_fx2","smoke/generator_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_fx2","smoke/generator_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_loopfx("tag_fx4","explosions/generator_spark_runner",0.9); + common_scripts\_destructible::destructible_loopfx("tag_fx3","explosions/generator_spark_runner",0.6123); + common_scripts\_destructible::destructible_loopsound("generator_spark_loop"); + common_scripts\_destructible::destructible_healthdrain(24,0.2,64,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,5,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/generator_explosion",1); + common_scripts\_destructible::destructible_fx("tag_fx","fire/generator_des_fire",1); + common_scripts\_destructible::destructible_sound("generator01_explode"); + common_scripts\_destructible::destructible_explode(7000,8000,128,128,16,50,undefined,0); + common_scripts\_destructible::destructible_anim(destructible_gaspump("enerator_explode"),#animtree,"setanimknob",undefined,undefined,"generator_explode"); + common_scripts\_destructible::destructible_state(undefined,"machinery_generator_des",undefined,undefined,"no_melee"); +} + +//Function Number: 55 +toy_generator_on(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_bounce",0,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(15); + common_scripts\_destructible::destructible_loopfx("tag_fx2","smoke/generator_exhaust",0.4); + common_scripts\_destructible::destructible_anim(destructible_gaspump("enerator_vibration"),#animtree,"setanimknob",undefined,undefined,"generator_vibration"); + common_scripts\_destructible::destructible_loopsound("generator_running"); + common_scripts\_destructible::destructible_state("tag_origin","machinery_generator",150); + common_scripts\_destructible::destructible_loopfx("tag_fx2","smoke/generator_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_loopsound("generator_running"); + common_scripts\_destructible::destructible_state(undefined,undefined,75,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_fx2","smoke/generator_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_loopsound("generator_damage_loop"); + common_scripts\_destructible::destructible_state(undefined,undefined,250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_fx2","smoke/generator_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_loopfx("tag_fx4","explosions/generator_spark_runner",0.9); + common_scripts\_destructible::destructible_loopfx("tag_fx3","explosions/generator_spark_runner",0.6123); + common_scripts\_destructible::destructible_loopsound("generator_spark_loop"); + common_scripts\_destructible::destructible_loopsound("generator_damage_loop"); + common_scripts\_destructible::destructible_healthdrain(24,0.2,64,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,5,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/generator_explosion",0); + common_scripts\_destructible::destructible_fx("tag_fx","fire/generator_des_fire"); + common_scripts\_destructible::destructible_sound("generator01_explode"); + common_scripts\_destructible::destructible_explode(7000,8000,128,128,16,50,undefined,0); + common_scripts\_destructible::destructible_anim(destructible_gaspump("enerator_explode"),#animtree,"setanimknob",undefined,0,"generator_explode"); + common_scripts\_destructible::destructible_anim(destructible_gaspump("enerator_explode_02"),#animtree,"setanimknob",undefined,0,"generator_explode_02"); + common_scripts\_destructible::destructible_anim(destructible_gaspump("enerator_explode_03"),#animtree,"setanimknob",undefined,0,"generator_explode_03"); + common_scripts\_destructible::destructible_state(undefined,"machinery_generator_des",undefined,undefined,"no_melee"); +} + +//Function Number: 56 +toy_oxygen_tank(param_00) +{ + common_scripts\_destructible::destructible_create("toy_oxygen_tank_" + param_00,"tag_origin",150,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,64,"allies"); + common_scripts\_destructible::destructible_loopsound("oxygen_tank_leak_loop"); + common_scripts\_destructible::destructible_fx("tag_cap","props/oxygen_tank" + param_00 + "_cap"); + common_scripts\_destructible::destructible_loopfx("tag_cap","distortion/oxygen_tank_leak",0.4); + common_scripts\_destructible::destructible_state(undefined,"machinery_oxygen_tank" + param_00 + "_dam",300,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/oxygen_tank" + param_00 + "_explosion",0); + common_scripts\_destructible::destructible_sound("oxygen_tank_explode"); + common_scripts\_destructible::destructible_explode(7000,8000,150,256,16,150,undefined,32); + common_scripts\_destructible::destructible_state(undefined,"machinery_oxygen_tank" + param_00 + "_des",undefined,undefined,"no_melee"); +} + +//Function Number: 57 +toy_electricbox2(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",150,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(15); + common_scripts\_destructible::destructible_fx("tag_fx","props/electricbox4_explode",undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_sound("exp_fusebox_sparks"); + common_scripts\_destructible::destructible_explode(1000,2000,32,32,32,48,undefined,0); + common_scripts\_destructible::destructible_state(undefined,"me_electricbox2_dest",undefined,undefined,"no_melee"); + common_scripts\_destructible::destructible_part("tag_fx","me_electricbox2_door",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_door_upper","me_electricbox2_door_upper",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 58 +toy_electricbox4(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",150,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(15); + common_scripts\_destructible::destructible_fx("tag_fx","props/electricbox4_explode",undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_sound("exp_fusebox_sparks"); + common_scripts\_destructible::destructible_explode(20,2000,32,32,32,48,undefined,0); + common_scripts\_destructible::destructible_state(undefined,"me_electricbox4_dest",undefined,undefined,"no_melee"); + common_scripts\_destructible::destructible_part("tag_fx","me_electricbox4_door",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 59 +toy_airconditioner(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",0,undefined,32); + common_scripts\_destructible::destructible_anim(destructible_gaspump("x_airconditioner_fan"),#animtree,"setanimknob",undefined,undefined,"ex_airconditioner_fan"); + common_scripts\_destructible::destructible_loopsound("airconditioner_running_loop"); + common_scripts\_destructible::destructible_state("tag_origin","com_ex_airconditioner",300); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/airconditioner_ex_explode",undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_sound("airconditioner_burst"); + common_scripts\_destructible::destructible_explode(1000,2000,32,32,32,48,undefined,0); + common_scripts\_destructible::destructible_state(undefined,"com_ex_airconditioner_dam",undefined,undefined,"no_melee"); + common_scripts\_destructible::destructible_part("tag_fx","com_ex_airconditioner_fan",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 60 +toy_ceiling_fan(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",0,undefined,32); + common_scripts\_destructible::destructible_anim(destructible_gaspump("e_fanceil1_spin"),#animtree,"setanimknob",undefined,undefined,"me_fanceil1_spin"); + common_scripts\_destructible::destructible_state("tag_origin","me_fanceil1",150); + common_scripts\_destructible::destructible_anim(destructible_gaspump("e_fanceil1_spin_stop"),#animtree,"setanimknob",undefined,undefined,"me_fanceil1_spin_stop"); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/ceiling_fan_explosion"); + common_scripts\_destructible::destructible_sound("ceiling_fan_sparks"); + common_scripts\_destructible::destructible_explode(1000,2000,32,32,5,32,undefined,0); + common_scripts\_destructible::destructible_state(undefined,"me_fanceil1_des",undefined,undefined,"no_melee"); + common_scripts\_destructible::destructible_part("tag_fx",undefined,150,undefined,undefined,undefined,1); +} + +//Function Number: 61 +toy_wall_fan(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_swivel",0,undefined,32); + common_scripts\_destructible::destructible_anim(destructible_gaspump("all_fan_rotate"),#animtree,"setanimknob",undefined,undefined,"wall_fan_rotate"); + common_scripts\_destructible::destructible_loopsound("wall_fan_fanning"); + common_scripts\_destructible::destructible_state("tag_wobble","cs_wallfan1",150); + common_scripts\_destructible::destructible_anim(destructible_gaspump("all_fan_stop"),#animtree,"setanimknob",undefined,undefined,"wall_fan_wobble"); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/wallfan_explosion_dmg"); + common_scripts\_destructible::destructible_sound("wall_fan_sparks"); + common_scripts\_destructible::destructible_state("tag_wobble","cs_wallfan1",150,undefined,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/wallfan_explosion_des"); + common_scripts\_destructible::destructible_sound("wall_fan_break"); + common_scripts\_destructible::destructible_state(undefined,"cs_wallfan1_dmg",undefined,undefined,"no_melee"); +} + +//Function Number: 62 +toy_propane_tank02(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",50,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(5); + common_scripts\_destructible::destructible_state(undefined,undefined,350,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("propanetank02_gas_leak_loop"); + common_scripts\_destructible::destructible_loopfx("tag_cap","distortion/propane_cap_distortion",0.1); + common_scripts\_destructible::destructible_state(undefined,undefined,350,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_cap","fire/propane_capfire_leak",0.1); + common_scripts\_destructible::destructible_sound("propanetank02_flareup_med"); + common_scripts\_destructible::destructible_loopsound("propanetank02_fire_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,300,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,150,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_physics("tag_cap",(50,0,0)); + common_scripts\_destructible::destructible_loopfx("tag_cap","fire/propane_capfire",0.6); + common_scripts\_destructible::destructible_fx("tag_valve","fire/propane_valvefire_flareup"); + common_scripts\_destructible::destructible_physics("tag_valve",(50,0,0)); + common_scripts\_destructible::destructible_fx("tag_cap","fire/propane_capfire_flareup"); + common_scripts\_destructible::destructible_loopfx("tag_valve","fire/propane_valvefire",0.1); + common_scripts\_destructible::destructible_sound("propanetank02_flareup2_med"); + common_scripts\_destructible::destructible_loopsound("propanetank02_fire_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,150,undefined,5,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","fire/propane_small_fire"); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/propane_large_exp_fireball"); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/propane_large_exp",0); + common_scripts\_destructible::destructible_sound("propanetank02_explode"); + common_scripts\_destructible::destructible_loopsound("propanetank02_fire_blown_med"); + common_scripts\_destructible::destructible_explode(7000,8000,600,600,32,300); + common_scripts\_destructible::destructible_state(undefined,"com_propane_tank02_DES",undefined,undefined,"no_melee"); + common_scripts\_destructible::destructible_part("tag_valve","com_propane_tank02_valve"); + common_scripts\_destructible::destructible_part("tag_cap","com_propane_tank02_cap"); +} + +//Function Number: 63 +toy_propane_tank02_small(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",50,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(10); + common_scripts\_destructible::destructible_state(undefined,undefined,350,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("propanetank02_gas_leak_loop"); + common_scripts\_destructible::destructible_loopfx("tag_cap","distortion/propane_cap_distortion",0.1); + common_scripts\_destructible::destructible_state(undefined,undefined,350,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_cap","fire/propane_capfire_leak",0.1); + common_scripts\_destructible::destructible_sound("propanetank02_flareup_med"); + common_scripts\_destructible::destructible_loopsound("propanetank02_fire_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_physics("tag_cap",(50,0,0)); + common_scripts\_destructible::destructible_loopfx("tag_cap","fire/propane_capfire",0.6); + common_scripts\_destructible::destructible_fx("tag_valve","fire/propane_valvefire_flareup"); + common_scripts\_destructible::destructible_physics("tag_valve",(50,0,0)); + common_scripts\_destructible::destructible_fx("tag_cap","fire/propane_capfire_flareup"); + common_scripts\_destructible::destructible_loopfx("tag_valve","fire/propane_valvefire",0.1); + common_scripts\_destructible::destructible_sound("propanetank02_flareup_med"); + common_scripts\_destructible::destructible_loopsound("propanetank02_fire_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,5,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","fire/propane_small_fire"); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/propane_large_exp",0); + common_scripts\_destructible::destructible_sound("propanetank02_explode"); + common_scripts\_destructible::destructible_explode(7000,8000,400,400,32,100); + common_scripts\_destructible::destructible_state(undefined,"com_propane_tank02_small_DES",undefined,undefined,"no_melee"); + common_scripts\_destructible::destructible_part("tag_valve","com_propane_tank02_small_valve"); + common_scripts\_destructible::destructible_part("tag_cap","com_propane_tank02_small_cap"); +} + +//Function Number: 64 +toy_copier(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(15); + common_scripts\_destructible::destructible_loopfx("tag_left_feeder","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_left_feeder","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,500,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_fx","props/photocopier_sparks",3); + common_scripts\_destructible::destructible_loopsound("copier_spark_loop"); + common_scripts\_destructible::destructible_healthdrain(12,0.2); + common_scripts\_destructible::destructible_state(undefined,undefined,800,undefined,5,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","props/photocopier_exp",0); + common_scripts\_destructible::destructible_fx("tag_fx","props/photocopier_fire"); + common_scripts\_destructible::destructible_sound("copier_exp"); + common_scripts\_destructible::destructible_loopsound("copier_fire_loop"); + common_scripts\_destructible::destructible_explode(7000,8000,96,96,32,48); + common_scripts\_destructible::destructible_state(undefined,"prop_photocopier_destroyed",undefined,undefined,"no_melee"); + common_scripts\_destructible::destructible_part("tag_left_feeder","prop_photocopier_destroyed_left_feeder",4,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_right_shelf","prop_photocopier_destroyed_right_shelf",4,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_top","prop_photocopier_destroyed_top",4,undefined,undefined,undefined,1,1); +} + +//Function Number: 65 +toy_firehydrant(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(11); + common_scripts\_destructible::destructible_state(undefined,undefined,500,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_cap","props/firehydrant_leak",0.1); + common_scripts\_destructible::destructible_loopsound("firehydrant_spray_loop"); + common_scripts\_destructible::destructible_healthdrain(12,0.2); + common_scripts\_destructible::destructible_state(undefined,undefined,800,undefined,5,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","props/firehydrant_exp",0); + common_scripts\_destructible::destructible_fx("tag_fx","props/firehydrant_spray_10sec",0); + common_scripts\_destructible::destructible_sound("firehydrant_burst"); + common_scripts\_destructible::destructible_explode(17000,18000,96,96,32,48); + common_scripts\_destructible::destructible_state(undefined,"com_firehydrant_dest",undefined,undefined,"no_melee"); + common_scripts\_destructible::destructible_part("tag_fx","com_firehydrant_dam",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_cap","com_firehydrant_cap",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 66 +toy_parkingmeter(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_meter",120); + common_scripts\_destructible::destructible_fx("tag_fx","props/parking_meter_coins",1,common_scripts\_destructible::damage_not("splash")); + common_scripts\_destructible::destructible_fx("tag_fx","props/parking_meter_coins_exploded",1,"splash"); + common_scripts\_destructible::destructible_sound("exp_parking_meter_sweet"); + common_scripts\_destructible::destructible_explode(2800,3000,64,64,0,0,1); + common_scripts\_destructible::destructible_state(undefined,"com_parkingmeter_damaged",20,undefined,undefined,"splash"); + common_scripts\_destructible::destructible_state(undefined,"com_parkingmeter_destroyed",undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_cap","com_parkingmeter_cap",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 67 +toy_mailbox(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",200); + common_scripts\_destructible::destructible_fx("tag_fx","props/mail_box_explode",1); + common_scripts\_destructible::destructible_sound("exp_mailbox_sweet"); + common_scripts\_destructible::destructible_explode(100,2000,64,64,0,0); + common_scripts\_destructible::destructible_state("tag_origin","com_mailbox_dam"); + common_scripts\_destructible::destructible_part("tag_door","com_mailbox_door",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_flag","com_mailbox_flag",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 68 +toy_mailbox2(param_00) +{ + common_scripts\_destructible::destructible_create("toy_mailbox2_" + param_00,"tag_origin",120); + common_scripts\_destructible::destructible_fx("tag_fx","props/mail_box_explode",1,common_scripts\_destructible::damage_not("splash")); + common_scripts\_destructible::destructible_fx("tag_fx","props/mail_box_explode",1,"splash"); + common_scripts\_destructible::destructible_sound("exp_mailbox_sweet"); + common_scripts\_destructible::destructible_explode(2800,3000,64,64,0,0,1); + common_scripts\_destructible::destructible_state(undefined,"mailbox_" + param_00 + "_dam",20,undefined,undefined,"splash"); + common_scripts\_destructible::destructible_state(undefined,"mailbox_black_dest",undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_door","mailbox_" + param_00 + "_door",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_flag","mailbox_black_flag",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 69 +toy_newspaper_stand_red(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",120); + common_scripts\_destructible::destructible_fx("tag_door","props/news_stand_paper_spill",1,common_scripts\_destructible::damage_not("splash")); + common_scripts\_destructible::destructible_sound("exp_newspaper_box"); + common_scripts\_destructible::destructible_explode(2500,2501,64,64,0,0,1); + common_scripts\_destructible::destructible_state(undefined,"com_newspaperbox_red_dam",20,undefined,undefined,"splash"); + common_scripts\_destructible::destructible_fx("tag_fx","props/news_stand_explosion",1,"splash"); + common_scripts\_destructible::destructible_state(undefined,"com_newspaperbox_red_des",undefined,undefined,undefined,undefined,undefined,0); + common_scripts\_destructible::destructible_part("tag_door","com_newspaperbox_red_door",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 70 +toy_newspaper_stand_blue(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",120); + common_scripts\_destructible::destructible_fx("tag_door","props/news_stand_paper_spill_shatter",1,common_scripts\_destructible::damage_not("splash")); + common_scripts\_destructible::destructible_sound("exp_newspaper_box"); + common_scripts\_destructible::destructible_explode(800,2001,64,64,0,0,1); + common_scripts\_destructible::destructible_state(undefined,"com_newspaperbox_blue_dam",20,undefined,undefined,"splash"); + common_scripts\_destructible::destructible_fx("tag_fx","props/news_stand_explosion",1,"splash"); + common_scripts\_destructible::destructible_state(undefined,"com_newspaperbox_blue_des",undefined,undefined,undefined,undefined,undefined,0); + common_scripts\_destructible::destructible_part("tag_door","com_newspaperbox_blue_door",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 71 +toy_filecabinet(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",120); + common_scripts\_destructible::destructible_fx("tag_drawer_lower","props/filecabinet_dam",1,common_scripts\_destructible::damage_not("splash")); + common_scripts\_destructible::destructible_sound("exp_filecabinet"); + common_scripts\_destructible::destructible_state(undefined,"com_filecabinetblackclosed_dam",20,undefined,undefined,"splash"); + common_scripts\_destructible::destructible_fx("tag_drawer_upper","props/filecabinet_des",1,"splash"); + common_scripts\_destructible::destructible_sound("exp_filecabinet"); + common_scripts\_destructible::destructible_physics("tag_drawer_upper",(50,-10,5)); + common_scripts\_destructible::destructible_state(undefined,"com_filecabinetblackclosed_des",undefined,undefined,undefined,undefined,undefined,0); + common_scripts\_destructible::destructible_part("tag_drawer_upper","com_filecabinetblackclosed_drawer",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 72 +toy_trashbin_01(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",120,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","props/garbage_spew_des",1,"splash"); + common_scripts\_destructible::destructible_fx("tag_fx","props/garbage_spew",1,common_scripts\_destructible::damage_not("splash")); + common_scripts\_destructible::destructible_sound("exp_trashcan_sweet"); + common_scripts\_destructible::destructible_explode(1300,1351,1,1,10,20); + common_scripts\_destructible::destructible_state(undefined,"com_trashbin01_dmg",undefined,undefined,undefined,undefined,undefined,0); + common_scripts\_destructible::destructible_part("tag_fx","com_trashbin01_lid",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 73 +toy_trashbin_02(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",120,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","props/garbage_spew_des",1,"splash"); + common_scripts\_destructible::destructible_fx("tag_fx","props/garbage_spew",1,common_scripts\_destructible::damage_not("splash")); + common_scripts\_destructible::destructible_sound("exp_trashcan_sweet"); + common_scripts\_destructible::destructible_explode(600,800,1,1,10,20); + common_scripts\_destructible::destructible_state(undefined,"com_trashbin02_dmg",undefined,undefined,undefined,undefined,undefined,0); + common_scripts\_destructible::destructible_part("tag_fx","com_trashbin02_lid",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 74 +toy_trashbag1(param_00) +{ + common_scripts\_destructible::destructible_create("toy_trashbag1_" + param_00,"tag_origin",120,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","props/trashbag_" + param_00); + common_scripts\_destructible::destructible_state(undefined,"com_trashbag1_" + param_00 + "_dsr",undefined,undefined,undefined,undefined,undefined,0); +} + +//Function Number: 75 +toy_recyclebin_01(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",120,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","props/garbage_spew_des",1,"splash"); + common_scripts\_destructible::destructible_fx("tag_fx","props/garbage_spew",1,common_scripts\_destructible::damage_not("splash")); + common_scripts\_destructible::destructible_sound("exp_trashcan_sweet"); + common_scripts\_destructible::destructible_explode(600,651,1,1,10,20); + common_scripts\_destructible::destructible_state(undefined,"com_recyclebin01_dmg",undefined,undefined,undefined,undefined,undefined,0); + common_scripts\_destructible::destructible_part("tag_fx","com_recyclebin01_lid",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 76 +toy_trashcan_metal_closed(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",120,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","props/garbage_spew_des",1,"splash"); + common_scripts\_destructible::destructible_fx("tag_fx","props/garbage_spew",1,common_scripts\_destructible::damage_not("splash")); + common_scripts\_destructible::destructible_sound("exp_trashcan_sweet"); + common_scripts\_destructible::destructible_explode(600,651,1,1,10,20); + common_scripts\_destructible::destructible_state(undefined,"com_trashcan_metal_with_trash",undefined,undefined,undefined,undefined,undefined,0); + common_scripts\_destructible::destructible_part("tag_fx","com_trashcan_metalLID",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 77 +toy_water_collector(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",220,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/water_collector_explosion"); + common_scripts\_destructible::destructible_sound("water_collector_splash"); + common_scripts\_destructible::destructible_explode(500,800,32,32,1,10,undefined,32); + common_scripts\_destructible::destructible_state(undefined,"utility_water_collector_base_dest",undefined,undefined,"no_melee",undefined,undefined,0); + common_scripts\_destructible::destructible_part("tag_lid",undefined,220,undefined,undefined,"no_melee",1); + common_scripts\_destructible::destructible_state(undefined); +} + +//Function Number: 78 +toy_foliage_tree_oak_1(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",120,undefined,32,"splash"); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/tree_trunk_explosion_oak_1",1,"splash"); + common_scripts\_destructible::destructible_sound("large_oak_tree_impact"); + common_scripts\_destructible::destructible_sound("large_oak_tree_fall"); + common_scripts\_destructible::destructible_explode(600,651,1,1,10,20); + common_scripts\_destructible::destructible_state(undefined,"foliage_tree_oak_1_destroyed_trunk",undefined,undefined,undefined,undefined,undefined,0); +} + +//Function Number: 79 +toy_paris_tree_plane_large(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",250,undefined,32,"splash"); + common_scripts\_destructible::destructible_fx("tag_origin","props/paris_tree_plane_destruct"); + common_scripts\_destructible::destructible_explode(100,351,150,350,100,200,undefined,undefined,undefined,undefined,(-400,0,80),0.7); + common_scripts\_destructible::destructible_state(undefined,"foliage_paris_tree_plane_broken",undefined,undefined,undefined,undefined,undefined,0); +} + +//Function Number: 80 +toy_usa_gas_station_trash_bin_01(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",120,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","props/garbage_spew_des",1,"splash"); + common_scripts\_destructible::destructible_fx("tag_fx","props/garbage_spew",1,common_scripts\_destructible::damage_not("splash")); + common_scripts\_destructible::destructible_explode(600,651,1,1,10,20); + common_scripts\_destructible::destructible_state(undefined,"usa_gas_station_trash_bin_01_base",undefined,undefined,undefined,undefined,undefined,0); + common_scripts\_destructible::destructible_part("tag_fx","usa_gas_station_trash_bin_01_lid",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 81 +toy_usa_gas_station_trash_bin_02(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",120,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx_high","props/garbage_spew_des",1,"splash"); + common_scripts\_destructible::destructible_fx("tag_fx_high","props/garbage_spew",1,common_scripts\_destructible::damage_not("splash")); + common_scripts\_destructible::destructible_explode(600,651,1,1,10,20); + common_scripts\_destructible::destructible_state(undefined,"usa_gas_station_trash_bin_02_base",undefined,undefined,undefined,undefined,undefined,0); + common_scripts\_destructible::destructible_part("tag_fx_high","usa_gas_station_trash_bin_02_lid",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 82 +toy_light_ceiling_round(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",150,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(15); + common_scripts\_destructible::destructible_lights_out(16); + common_scripts\_destructible::destructible_fx("tag_fx","misc/light_blowout_runner"); + common_scripts\_destructible::destructible_state(undefined,"com_light_ceiling_round_off",undefined,undefined,"no_melee"); +} + +//Function Number: 83 +toy_light_ceiling_fluorescent(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",150,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(15); + common_scripts\_destructible::destructible_fx("tag_fx","misc/light_fluorescent_blowout_runner"); + common_scripts\_destructible::destructible_fx("tag_swing_fx","misc/light_blowout_swinging_runner"); + common_scripts\_destructible::destructible_lights_out(16); + common_scripts\_destructible::destructible_explode(20,2000,64,64,40,80); + common_scripts\_destructible::destructible_anim(destructible_gaspump("ight_fluorescent_swing"),#animtree,"setanimknob",undefined,0,"light_fluorescent_swing"); + common_scripts\_destructible::destructible_sound("fluorescent_light_fall",undefined,0); + common_scripts\_destructible::destructible_sound("fluorescent_light_bulb",undefined,0); + common_scripts\_destructible::destructible_anim(destructible_gaspump("ight_fluorescent_swing_02"),#animtree,"setanimknob",undefined,1,"light_fluorescent_swing_02"); + common_scripts\_destructible::destructible_sound("fluorescent_light_fall",undefined,1); + common_scripts\_destructible::destructible_sound("fluorescent_light_bulb",undefined,1); + common_scripts\_destructible::destructible_anim(destructible_gaspump("ight_fluorescent_null"),#animtree,"setanimknob",undefined,2,"light_fluorescent_null"); + common_scripts\_destructible::destructible_state(undefined,"me_lightfluohang_double_destroyed",undefined,undefined,"no_melee"); +} + +//Function Number: 84 +toy_light_ceiling_fluorescent_spotlight(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",150,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(15); + common_scripts\_destructible::destructible_sound("fluorescent_light_bulb"); + common_scripts\_destructible::destructible_fx("tag_fx","misc/light_fluorescent_blowout_runner"); + common_scripts\_destructible::destructible_fx("tag_swing_fx","misc/light_blowout_swinging_runner"); + common_scripts\_destructible::destructible_lights_out(16); + common_scripts\_destructible::destructible_explode(20,2000,64,64,40,80); + common_scripts\_destructible::destructible_anim(destructible_gaspump("ight_fluorescent_swing"),#animtree,"setanimknob",undefined,0,"light_fluorescent_swing"); + common_scripts\_destructible::destructible_sound("fluorescent_light_fall",undefined,0); + common_scripts\_destructible::destructible_sound("fluorescent_light_bulb",undefined,0); + common_scripts\_destructible::destructible_spotlight("tag_swing_r_far"); + common_scripts\_destructible::destructible_sound("fluorescent_light_fall"); + common_scripts\_destructible::destructible_state(undefined,"me_lightfluohang_double_destroyed",undefined,undefined,"no_melee"); +} + +//Function Number: 85 +toy_light_ceiling_fluorescent_single(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",150,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(15); + common_scripts\_destructible::destructible_fx("tag_fx","misc/light_fluorescent_single_blowout_runner"); + common_scripts\_destructible::destructible_fx("tag_swing_center_fx","misc/light_blowout_swinging_runner"); + common_scripts\_destructible::destructible_fx("tag_swing_center_fx_far","misc/light_blowout_swinging_runner"); + common_scripts\_destructible::destructible_lights_out(32); + common_scripts\_destructible::destructible_explode(20,2000,64,64,40,80); + common_scripts\_destructible::destructible_anim(destructible_gaspump("ight_fluorescent_single_swing"),#animtree,"setanimknob",undefined,0,"light_fluorescent_single_swing"); + common_scripts\_destructible::destructible_sound("fluorescent_light_fall",undefined,0); + common_scripts\_destructible::destructible_sound("fluorescent_light_bulb",undefined,0); + common_scripts\_destructible::destructible_anim(destructible_gaspump("ight_fluorescent_single_swing_02"),#animtree,"setanimknob",undefined,1,"light_fluorescent_single_swing_02"); + common_scripts\_destructible::destructible_sound("fluorescent_light_hinge",undefined,1); + common_scripts\_destructible::destructible_sound("fluorescent_light_bulb",undefined,1); + common_scripts\_destructible::destructible_anim(destructible_gaspump("ight_fluorescent_single_swing_03"),#animtree,"setanimknob",undefined,2,"light_fluorescent_single_swing_03"); + common_scripts\_destructible::destructible_sound("fluorescent_light_fall",undefined,2); + common_scripts\_destructible::destructible_sound("fluorescent_light_bulb",undefined,2); + common_scripts\_destructible::destructible_anim(destructible_gaspump("ight_fluorescent_single_null"),#animtree,"setanimknob",undefined,3,"light_fluorescent_single_null"); + common_scripts\_destructible::destructible_state(undefined,"me_lightfluohang_single_destroyed",undefined,undefined,"no_melee"); +} + +//Function Number: 86 +toy_light_ceiling_fluorescent_single_spotlight(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",150,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(15); + common_scripts\_destructible::destructible_lights_out(16); + common_scripts\_destructible::destructible_sound("fluorescent_light_bulb"); + common_scripts\_destructible::destructible_fx("tag_fx","misc/light_fluorescent_single_blowout_runner"); + common_scripts\_destructible::destructible_fx("tag_swing_center_fx","misc/light_blowout_swinging_runner"); + common_scripts\_destructible::destructible_fx("tag_swing_center_fx_far","misc/light_blowout_swinging_runner"); + common_scripts\_destructible::destructible_explode(20,2000,64,64,40,80); + common_scripts\_destructible::destructible_anim(destructible_gaspump("ight_fluorescent_single_swing_02"),#animtree,"setanimknob",undefined,undefined,"light_fluorescent_single_swing_02"); + common_scripts\_destructible::destructible_sound("fluorescent_light_fall"); + common_scripts\_destructible::destructible_spotlight("tag_swing_center_fx_far"); + common_scripts\_destructible::destructible_state(undefined,"me_lightfluohang_single_destroyed",undefined,undefined,"no_melee"); +} + +//Function Number: 87 +toy_bookstore_bookstand4_books(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(7); + common_scripts\_destructible::destructible_fx("tag_fx","props/bookshelf4_dmg",1,common_scripts\_destructible::damage_not("splash")); + common_scripts\_destructible::destructible_state(undefined,"bookstore_bookstand4",100,undefined,undefined,"splash"); + common_scripts\_destructible::destructible_fx("tag_fx","props/bookshelf4_des",1,"splash"); + common_scripts\_destructible::destructible_explode(2000,3800,32,32,1,5,undefined,0); + common_scripts\_destructible::destructible_state(undefined,"bookstore_bookstand4_null",undefined,undefined,undefined,undefined,undefined,0); +} + +//Function Number: 88 +toy_locker_double(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",150,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_anim(destructible_gaspump("ocker_broken_both_doors_1"),#animtree,"setanimknob",undefined,0,"locker_broken_both_doors_1"); + common_scripts\_destructible::destructible_fx("tag_fx","props/locker_double_des_02_right",undefined,undefined,0); + common_scripts\_destructible::destructible_sound("lockers_fast",undefined,0); + common_scripts\_destructible::destructible_anim(destructible_gaspump("ocker_broken_both_doors_2"),#animtree,"setanimknob",undefined,1,"locker_broken_both_doors_2"); + common_scripts\_destructible::destructible_fx("tag_fx","props/locker_double_des_01_left",undefined,undefined,1); + common_scripts\_destructible::destructible_sound("lockers_fast",undefined,1); + common_scripts\_destructible::destructible_anim(destructible_gaspump("ocker_broken_both_doors_4"),#animtree,"setanimknob",undefined,2,"locker_broken_both_doors_4"); + common_scripts\_destructible::destructible_fx("tag_fx","props/locker_double_des_03_both",undefined,undefined,2); + common_scripts\_destructible::destructible_sound("lockers_double",undefined,2); + common_scripts\_destructible::destructible_anim(destructible_gaspump("ocker_broken_door1_fast"),#animtree,"setanimknob",undefined,3,"locker_broken_door1_fast"); + common_scripts\_destructible::destructible_fx("tag_fx","props/locker_double_des_01_left",undefined,undefined,3); + common_scripts\_destructible::destructible_sound("lockers_fast",undefined,3); + common_scripts\_destructible::destructible_anim(destructible_gaspump("ocker_broken_door2_fast"),#animtree,"setanimknob",undefined,4,"locker_broken_door2_fast"); + common_scripts\_destructible::destructible_fx("tag_fx","props/locker_double_des_02_right",undefined,undefined,4); + common_scripts\_destructible::destructible_sound("lockers_fast",undefined,4); + common_scripts\_destructible::destructible_anim(destructible_gaspump("ocker_broken_both_doors_3"),#animtree,"setanimknob",undefined,5,"locker_broken_both_doors_3"); + common_scripts\_destructible::destructible_fx("tag_fx","misc/no_effect",undefined,undefined,5); + common_scripts\_destructible::destructible_sound("lockers_minor",undefined,5); + common_scripts\_destructible::destructible_anim(destructible_gaspump("ocker_broken_door1_slow"),#animtree,"setanimknob",undefined,6,"locker_broken_door1_slow"); + common_scripts\_destructible::destructible_fx("tag_fx","misc/no_effect",undefined,undefined,6); + common_scripts\_destructible::destructible_sound("lockers_minor",undefined,6); + common_scripts\_destructible::destructible_anim(destructible_gaspump("ocker_broken_door2_slow"),#animtree,"setanimknob",undefined,7,"locker_broken_door2_slow"); + common_scripts\_destructible::destructible_fx("tag_fx","misc/no_effect",undefined,undefined,7); + common_scripts\_destructible::destructible_sound("lockers_minor",undefined,7); + common_scripts\_destructible::destructible_state(undefined,"com_locker_double_destroyed",undefined,undefined,"no_melee"); +} + +//Function Number: 89 +toy_dubai_fish_sculpture(param_00,param_01,param_02) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",200000000,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(2); + for(var_03 = 1;var_03 <= param_02;var_03++) + { + common_scripts\_destructible::destructible_part("tag_" + param_01 + "_" + var_03,param_00,10); + common_scripts\_destructible::destructible_fx("tag_" + param_01 + "_" + var_03,"props/dub_fish_" + param_01 + "_shatter"); + common_scripts\_destructible::destructible_state(undefined); + } +} + +//Function Number: 90 +toy_intro_concrete_chipaway(param_00,param_01) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",200000000,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("tag_origin",param_00,undefined,undefined,"no_melee"); + for(var_02 = 1;var_02 <= param_01;var_02++) + { + common_scripts\_destructible::destructible_part("tag_chunk_" + var_02,param_00,200,undefined,undefined,"no_splash"); + common_scripts\_destructible::destructible_splash_damage_scaler(0.01); + common_scripts\_destructible::destructible_fx("tag_chunk_" + var_02,"props/intro_wall_chunk_exp"); + common_scripts\_destructible::destructible_state(undefined); + } +} + +//Function Number: 91 +toy_chicken(param_00) +{ + common_scripts\_destructible::destructible_create("toy_chicken" + param_00,"tag_origin",0,undefined,32); + common_scripts\_destructible::destructible_anim(destructible_gaspump("hicken_cage_loop_01"),#animtree,"setanimknob",undefined,0,"chicken_cage_loop_01",1.6); + common_scripts\_destructible::destructible_anim(destructible_gaspump("hicken_cage_loop_02"),#animtree,"setanimknob",undefined,1,"chicken_cage_loop_02",1.6); + common_scripts\_destructible::destructible_loopsound("animal_chicken_idle_loop"); + common_scripts\_destructible::destructible_state("tag_origin","chicken" + param_00,25); + common_scripts\_destructible::destructible_fx("tag_origin","props/chicken_exp" + param_00); + common_scripts\_destructible::destructible_anim(destructible_gaspump("hicken_cage_death"),#animtree,"setanimknob",undefined,0,"chicken_cage_death"); + common_scripts\_destructible::destructible_anim(destructible_gaspump("hicken_cage_death_02"),#animtree,"setanimknob",undefined,1,"chicken_cage_death_02"); + common_scripts\_destructible::destructible_sound("animal_chicken_death"); + common_scripts\_destructible::destructible_state(undefined,"chicken" + param_00,undefined,undefined,"no_melee"); +} + +//Function Number: 92 +toy_hide_with_fx(param_00,param_01,param_02,param_03) +{ + common_scripts\_destructible::destructible_create(param_00,param_01,param_03); + common_scripts\_destructible::destructible_fx("tag_origin",param_02); + common_scripts\_destructible::destructible_state("tag_origin","generic_prop_raven"); +} + +//Function Number: 93 +vehicle_ac130_80s_sedan1(param_00) +{ + common_scripts\_destructible::destructible_create("vehicle_ac130_80s_sedan1_" + param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,150,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_80s_sedan1_" + param_00 + "_destroyed",undefined,32,"_melee"); + var_01 = "tag_hood"; + common_scripts\_destructible::destructible_part(var_01,"vehicle_80s_sedan1_" + param_00 + "_hood",undefined,undefined,undefined,undefined,1,2.5); + var_01 = "tag_trunk"; + common_scripts\_destructible::destructible_part(var_01,"vehicle_80s_sedan1_" + param_00 + "_trunk",undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_80s_sedan1_" + param_00 + "_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","vehicle_80s_sedan1_" + param_00 + "_wheel_LF",20,undefined,undefined,"no_melee",undefined,2.3); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("tag_door_left_front",undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_door_left_back",undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_door_right_front","vehicle_80s_sedan1_" + param_00 + "_door_RF",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_door_right_back","vehicle_80s_sedan1_" + param_00 + "_door_RB",undefined,undefined,undefined,undefined,1,1); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_bumper_front","vehicle_80s_sedan1_" + param_00 + "_bumper_F",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_bumper_back","vehicle_80s_sedan1_" + param_00 + "_bumper_B",undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_80s_sedan1_" + param_00 + "_mirror_L",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_80s_sedan1_" + param_00 + "_mirror_R",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 94 +vehicle_bus_destructible(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + var_01 = "tag_window_front_left"; + common_scripts\_destructible::destructible_part(var_01,undefined,99,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_window_front_right"; + common_scripts\_destructible::destructible_part(var_01,undefined,99,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_window_driver"; + common_scripts\_destructible::destructible_part(var_01,undefined,99,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_window_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,99,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_window_side_1"; + common_scripts\_destructible::destructible_part(var_01,undefined,99,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_window_side_2"; + common_scripts\_destructible::destructible_part(var_01,undefined,99,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_window_side_3"; + common_scripts\_destructible::destructible_part(var_01,undefined,99,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_window_side_4"; + common_scripts\_destructible::destructible_part(var_01,undefined,99,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_window_side_5"; + common_scripts\_destructible::destructible_part(var_01,undefined,99,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_window_side_6"; + common_scripts\_destructible::destructible_part(var_01,undefined,99,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_window_side_7"; + common_scripts\_destructible::destructible_part(var_01,undefined,99,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_window_side_8"; + common_scripts\_destructible::destructible_part(var_01,undefined,99,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_window_side_9"; + common_scripts\_destructible::destructible_part(var_01,undefined,99,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_window_side_10"; + common_scripts\_destructible::destructible_part(var_01,undefined,99,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_window_side_11"; + common_scripts\_destructible::destructible_part(var_01,undefined,99,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); +} + +//Function Number: 95 +vehicle_80s_sedan1(param_00) +{ + common_scripts\_destructible::destructible_create("vehicle_80s_sedan1_" + param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,150,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,150,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_80s_sedan1_" + param_00 + "_destroyed",undefined,32,"_melee"); + var_01 = "tag_hood"; + common_scripts\_destructible::destructible_part(var_01,"vehicle_80s_sedan1_" + param_00 + "_hood",undefined,undefined,undefined,undefined,1,2.5); + var_01 = "tag_trunk"; + common_scripts\_destructible::destructible_part(var_01,"vehicle_80s_sedan1_" + param_00 + "_trunk",undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_80s_sedan1_" + param_00 + "_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","vehicle_80s_sedan1_" + param_00 + "_wheel_LF",20,undefined,undefined,"no_melee",undefined,2.3); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("tag_door_left_front",undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_door_left_back",undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_door_right_front","vehicle_80s_sedan1_" + param_00 + "_door_RF",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_door_right_back","vehicle_80s_sedan1_" + param_00 + "_door_RB",undefined,undefined,undefined,undefined,1,1); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_bumper_front","vehicle_80s_sedan1_" + param_00 + "_bumper_F",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_bumper_back","vehicle_80s_sedan1_" + param_00 + "_bumper_B",undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_80s_sedan1_" + param_00 + "_mirror_L",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_80s_sedan1_" + param_00 + "_mirror_R",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 96 +vehicle_80s_hatch1(param_00) +{ + common_scripts\_destructible::destructible_create("vehicle_80s_hatch1_" + param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,150,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,150,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_80s_hatch1_" + param_00 + "_destroyed",undefined,32,"_melee"); + var_01 = "tag_hood"; + common_scripts\_destructible::destructible_part(var_01,"vehicle_80s_hatch1_" + param_00 + "_hood",800,undefined,undefined,undefined,1,1.5); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_80s_hatch1_" + param_00 + "_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_80s_hatch1_" + param_00 + "_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("tag_door_left_front",undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_door_right_front","vehicle_80s_hatch1_" + param_00 + "_door_RF",undefined,undefined,undefined,undefined,1,1); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,10,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,10,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,10,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,10,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,10,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,10,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_bumper_front"); + common_scripts\_destructible::destructible_part("tag_bumper_back"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_80s_hatch1_" + param_00 + "_mirror_L",40); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_80s_hatch1_" + param_00 + "_mirror_R",40); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 97 +vehicle_80s_hatch2(param_00) +{ + common_scripts\_destructible::destructible_create("vehicle_80s_hatch2_" + param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,150,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,150,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_80s_hatch2_" + param_00 + "_destroyed",undefined,32,"_melee"); + var_01 = "tag_hood"; + common_scripts\_destructible::destructible_part(var_01,"vehicle_80s_hatch2_" + param_00 + "_hood",800,undefined,undefined,undefined,1,1.5); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_80s_hatch2_" + param_00 + "_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_80s_hatch2_" + param_00 + "_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("tag_door_left_front",undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_door_right_front","vehicle_80s_hatch2_" + param_00 + "_door_RF",undefined,undefined,undefined,undefined,1,1); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_bumper_front"); + common_scripts\_destructible::destructible_part("tag_bumper_back"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_80s_hatch2_" + param_00 + "_mirror_L",40); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_80s_hatch2_" + param_00 + "_mirror_R",40); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 98 +vehicle_80s_wagon1(param_00) +{ + common_scripts\_destructible::destructible_create("vehicle_80s_wagon1_" + param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,150,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,150,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_80s_wagon1_" + param_00 + "_destroyed",undefined,32,"_melee"); + var_01 = "tag_hood"; + common_scripts\_destructible::destructible_part(var_01,"vehicle_80s_wagon1_" + param_00 + "_hood",800,undefined,undefined,undefined,1,1.5); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_80s_wagon1_" + param_00 + "_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","vehicle_80s_wagon1_" + param_00 + "_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("tag_door_left_front",undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_door_left_back",undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_door_right_front",undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_door_right_back","vehicle_80s_wagon1_" + param_00 + "_door_RB",undefined,undefined,undefined,undefined,1,1); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back2"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back2_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back2"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back2_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_bumper_front","vehicle_80s_wagon1_" + param_00 + "_bumper_F",undefined,undefined,undefined,undefined,1,0.7); + common_scripts\_destructible::destructible_part("tag_bumper_back",undefined,undefined,undefined,undefined,undefined,undefined,0.6); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_80s_wagon1_" + param_00 + "_mirror_L",40); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_80s_wagon1_" + param_00 + "_mirror_R",40); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 99 +vehicle_civ_car_a(param_00) +{ + common_scripts\_destructible::destructible_create("vehicle_civ_car_a_" + param_00,"ac_prs_veh_civ_car_a_" + param_00 + "_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_veh_civ_car_a_dam" + param_00 + "_lod0","ac_prs_veh_civ_car_a_dam" + param_00,250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/small_vehicle_explosion_ac130",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 100 +vehicle_small_hatch(param_00) +{ + common_scripts\_destructible::destructible_create("vehicle_small_hatch_" + param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,150,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,150,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_small_hatch_" + param_00 + "_destroyed",undefined,32,"_melee"); + var_01 = "tag_hood"; + common_scripts\_destructible::destructible_part(var_01,"vehicle_small_hatch_" + param_00 + "_hood",800,undefined,undefined,undefined,1,1.5); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("tag_door_left_front","vehicle_small_hatch_" + param_00 + "_door_LF",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_door_right_front","vehicle_small_hatch_" + param_00 + "_door_RF",undefined,undefined,undefined,undefined,1,1); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_bumper_front",undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_bumper_back",undefined,undefined,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_small_hatch_" + param_00 + "_mirror_L",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_small_hatch_" + param_00 + "_mirror_R",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 101 +vehicle_london_cab_black() +{ + common_scripts\_destructible::destructible_create("vehicle_london_cab_black","tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,150,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,150,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_london_cab_destroyed",undefined,32,"_melee"); + var_00 = "tag_hood"; + common_scripts\_destructible::destructible_part(var_00,"vehicle_london_cab_hood",800,undefined,undefined,undefined,1,1.5); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_london_cab_wheel_lf",20,undefined,undefined,"no_melee",undefined,1); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_london_cab_wheel_lf",20,undefined,undefined,"no_melee",undefined,1); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","vehicle_london_cab_wheel_lf",20,undefined,undefined,"no_melee",undefined,1); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("tag_door_left_front","vehicle_london_cab_door_lb",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_door_right_front","vehicle_london_cab_door_lb",undefined,undefined,undefined,undefined,1,1); + var_00 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_00,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_00 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_00 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_00 = "tag_center_glass"; + common_scripts\_destructible::destructible_part(var_00,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_00 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_00 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_00 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_00,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_00 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_00 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_00 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_00,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_00 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_00 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_00 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_00,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_00 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_00 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_00 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_00,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_00 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_00 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_00 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_00,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_00 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_00 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_00 = "tag_glass_left_back_02"; + common_scripts\_destructible::destructible_part(var_00,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_00 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_00 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_00 = "tag_glass_right_back_02"; + common_scripts\_destructible::destructible_part(var_00,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_00 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_00 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_00 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_00,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_00,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_00 + "_d"); + var_00 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_00,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_00,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_00 + "_d"); + common_scripts\_destructible::destructible_part("tag_bumper_front",undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_bumper_back",undefined,undefined,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_london_cab_mirror_l",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_london_cab_mirror_r",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 102 +vehicle_pickup(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",300,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,210,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_pickup_destroyed",undefined,32,"_melee"); + var_01 = "tag_hood"; + common_scripts\_destructible::destructible_part(var_01,"vehicle_pickup_hood",800,undefined,undefined,undefined,1,2.5); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("tag_door_left_front","vehicle_pickup_door_LF",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_door_right_front","vehicle_pickup_door_RF",undefined,undefined,undefined,undefined,1,1); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_bumper_front",undefined,undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_bumper_back",undefined,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_pickup_mirror_L",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_pickup_mirror_R",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 103 +vehicle_hummer(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_deathfx","explosions/vehicle_explosion_hummer",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,210,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_hummer_destroyed",undefined,32,"_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); +} + +//Function Number: 104 +vehicle_t72(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire_gaz",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_deathfx","explosions/vehicle_explosion_gaz",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,210,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_gaz_tigr_harbor_destroyed",undefined,32,"_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_mid"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_mid_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_mid"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_mid_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back_left"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_left_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back_right"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_right_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); +} + +//Function Number: 105 +vehicle_btr(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke_moving",0.1); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire_gaz_moving",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(25,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,1000,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_deathfx","explosions/vehicle_explosion_gaz",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,210,250,50,300,undefined,undefined,0.3,500); + common_scripts\_destructible::destructible_state(undefined,"vehicle_gaz_tigr_paris_destroyed",undefined,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_part("tag_frontbumper",undefined,50,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_hood_fx","props/vehicle_gaz_frontBumper",0); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_moving",0.1); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,10,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large_moving"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med_moving"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med_moving"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_mid"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_mid_fx","props/car_glass_med_moving"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_mid"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_mid_fx","props/car_glass_med_moving"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med_moving"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med_moving"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back_left"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_left_fx","props/car_glass_med_moving"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back_right"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_right_fx","props/car_glass_med_moving"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); +} + +//Function Number: 106 +vehicle_gaz(param_00,param_01) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",300,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_deathfx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,210,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,param_01,undefined,32,"_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + var_02 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_02,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_02 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_02 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_02,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_02 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_02 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_02,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_02 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_02 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_02,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_02 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); +} + +//Function Number: 107 +vehicle_gaz_harbor(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",300,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/vehicle_explosion_medium",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,210,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6576(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + if(param_00 == "hicle_moving_truck") + { + common_scripts\_destructible::destructible_state(undefined,"vehicle_moving_truck_dst",undefined,32,"no_melee"); + } + else + { + common_scripts\_destructible::destructible_state(undefined,"vehicle_moving_truck_thai_dst",undefined,32,"no_melee"); + } + + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); +} + +//Function Number: 108 +vehicle_bm21(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",undefined,undefined,32,"no_melee"); + vehicle_moving_truck("TAG_WINDOW_SMALL_02_RI",1,"props/car_glass_subway_tall"); + vehicle_moving_truck("TAG_WINDOW_SMALL_03_RI",1,"props/car_glass_subway_tall"); + vehicle_moving_truck("TAG_WINDOW_SMALL_04_RI",1,"props/car_glass_subway_tall"); + vehicle_moving_truck("TAG_WINDOW_SMALL_05_RI",1,"props/car_glass_subway_tall"); + vehicle_moving_truck("TAG_WINDOW_SMALL_02_LE",1,"props/car_glass_subway_tall"); + vehicle_moving_truck("TAG_WINDOW_SMALL_03_LE",1,"props/car_glass_subway_tall"); + vehicle_moving_truck("TAG_WINDOW_SMALL_04_LE",1,"props/car_glass_subway_tall"); + vehicle_moving_truck("TAG_WINDOW_SMALL_05_LE",1,"props/car_glass_subway_tall"); +} + +//Function Number: 109 +vehicle_moving_truck(param_00,param_01,param_02) +{ + common_scripts\_destructible::destructible_part(param_00,undefined,140,undefined,undefined,undefined,undefined,undefined,1); + if(param_01) + { + common_scripts\_destructible::destructible_state(param_00 + "_D",undefined,80,undefined,undefined,undefined,1); + } + + common_scripts\_destructible::destructible_fx(param_00,param_02); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); +} + +//Function Number: 110 +vehicle_subway_cart(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",undefined,undefined,32,"no_melee"); + vehicle_moving_truck("TAG_FRONT_WINDOW",1,"props/car_glass_subway_tall"); + vehicle_moving_truck("TAG_WINDOW_01_LE",1,"props/car_glass_subway_large"); + vehicle_moving_truck("TAG_WINDOW_03_LE",1,"props/car_glass_subway_large"); + vehicle_moving_truck("TAG_WINDOW_04_LE",1,"props/car_glass_subway_large"); + vehicle_moving_truck("TAG_WINDOW_07_LE",1,"props/car_glass_subway_large"); + vehicle_moving_truck("TAG_WINDOW_08_LE",1,"props/car_glass_subway_large"); + vehicle_moving_truck("TAG_WINDOW_011_LE",1,"props/car_glass_subway_large"); + vehicle_moving_truck("TAG_WINDOW_012_LE",1,"props/car_glass_subway_large"); + vehicle_moving_truck("TAG_WINDOW_014_LE",1,"props/car_glass_subway_tall"); + vehicle_moving_truck("TAG_WINDOW_01_RI",1,"props/car_glass_subway_large"); + vehicle_moving_truck("TAG_WINDOW_03_RI",1,"props/car_glass_subway_large"); + vehicle_moving_truck("TAG_WINDOW_04_RI",1,"props/car_glass_subway_large"); + vehicle_moving_truck("TAG_WINDOW_07_RI",1,"props/car_glass_subway_large"); + vehicle_moving_truck("TAG_WINDOW_08_RI",1,"props/car_glass_subway_large"); + vehicle_moving_truck("TAG_WINDOW_011_RI",1,"props/car_glass_subway_large"); + vehicle_moving_truck("TAG_WINDOW_012_RI",1,"props/car_glass_subway_large"); + vehicle_moving_truck("TAG_WINDOW_014_RI",1,"props/car_glass_subway_tall"); +} + +//Function Number: 111 +create_vehicle_subway_cart_window_single(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",undefined,undefined,32,"no_melee"); + vehicle_moving_truck("TAG_WINDOW_SMALL_01_LE",1,"props/car_glass_subway_large"); + vehicle_moving_truck("TAG_WINDOW_SMALL_06_LE",1,"props/car_glass_subway_large"); + vehicle_moving_truck("TAG_WINDOW_SMALL_01_RI",1,"props/car_glass_subway_large"); + vehicle_moving_truck("TAG_WINDOW_SMALL_06_RI",1,"props/car_glass_subway_large"); +} + +//Function Number: 112 +vehicle_subway_cart_windows(param_00) +{ + common_scripts\_destructible::destructible_create("vehicle_luxurysedan_2008" + param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,210,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_luxurysedan_2008" + param_00 + "_destroy",undefined,32,"_melee"); + var_01 = "tag_hood"; + common_scripts\_destructible::destructible_part(var_01,"vehicle_luxurysedan_2008" + param_00 + "_hood",800,undefined,undefined,undefined,1,2.5); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_luxurysedan_2008" + param_00 + "_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_luxurysedan_2008" + param_00 + "_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_luxurysedan_2008" + param_00 + "_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","vehicle_luxurysedan_2008" + param_00 + "_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_part("tag_door_left_front","vehicle_luxurysedan_2008" + param_00 + "_door_LF",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_door_right_front","vehicle_luxurysedan_2008" + param_00 + "_door_RF",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_door_left_back","vehicle_luxurysedan_2008" + param_00 + "_door_LB",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_door_right_back","vehicle_luxurysedan_2008" + param_00 + "_door_RB",undefined,undefined,undefined,undefined,1,1); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_luxurysedan_2008" + param_00 + "_mirror_L",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_luxurysedan_2008" + param_00 + "_mirror_R",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 113 +vehicle_subway_cart_windows_small(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"TAG_ORIGIN",250,undefined,32,"splash"); + common_scripts\_destructible::destructible_splash_damage_scaler(11); + common_scripts\_destructible::destructible_loopfx("TAG_front_fire","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_loopfx("TAG_rear_fire","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"splash"); + common_scripts\_destructible::destructible_loopfx("TAG_front_fire","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_loopfx("TAG_rear_fire","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"splash"); + common_scripts\_destructible::destructible_loopfx("TAG_front_fire","smoke/airplane_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_loopfx("TAG_rear_fire","smoke/airplane_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,512,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"splash"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"splash"); + common_scripts\_destructible::destructible_fx("TAG_FX","explosions/vehicle_explosion_mig29",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(8000,10000,512,512,50,300,undefined,undefined,0.4,1000); + lib_0D89::func_7073(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_mig29_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_mig29_v2_dest",undefined,32,"lash"); + common_scripts\_destructible::destructible_part("TAG_COCKPIT","vehicle_mig29_dest_cockpit",40,undefined,undefined,undefined,undefined,1); +} + +//Function Number: 114 +vehicle_luxurysedan(param_00) +{ + common_scripts\_destructible::destructible_create("vehicle_mack_truck_short_" + param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/mack_truck_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_loopfx("tag_gastank","smoke/motorcycle_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("mack_truck_flareup_med"); + common_scripts\_destructible::destructible_loopsound("mack_truck_fire_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,300,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("mack_truck_fire_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_gastank","smoke/motorcycle_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_fx("tag_cab_fire","fire/firelp_med_pm"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/propane_large_exp",0); + common_scripts\_destructible::destructible_sound("mack_truck_explode"); + common_scripts\_destructible::destructible_loopsound("mack_truck_fire_med"); + common_scripts\_destructible::destructible_explode(8000,10000,512,512,100,400,undefined,undefined,0.4,1000); + common_scripts\_destructible::destructible_state(undefined,"vehicle_mack_truck_short_" + param_00 + "_destroy",undefined,32,"no_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_mack_truck_short_" + param_00 + "_wheel_lf",20,undefined,undefined,"no_melee",undefined,8); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_mack_truck_short_" + param_00 + "_wheel_lf",20,undefined,undefined,"no_melee",undefined,81); + common_scripts\_destructible::destructible_part("left_wheel_03_jnt","vehicle_mack_truck_short_" + param_00 + "_wheel_lf",20,undefined,undefined,"no_melee",undefined,8); + common_scripts\_destructible::destructible_part("tag_door_left_front","vehicle_mack_truck_short_" + param_00 + "_door_lf",undefined,undefined,undefined,undefined,1,1); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("mack_truck_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("mack_truck_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("mack_truck_glass_break_small"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("mack_truck_glass_break_small"); + common_scripts\_destructible::destructible_state(undefined); +} + +//Function Number: 115 +vehicle_mig29_landed() +{ + common_scripts\_destructible::destructible_create("vehicle_semi_truck","tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/mack_truck_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_loopfx("tag_gastank","smoke/motorcycle_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("mack_truck_flareup_med"); + common_scripts\_destructible::destructible_loopsound("mack_truck_fire_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,300,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("mack_truck_fire_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_gastank","smoke/motorcycle_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_fx("tag_cab_fire","fire/firelp_med_pm"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/propane_large_exp",0); + common_scripts\_destructible::destructible_sound("mack_truck_explode"); + common_scripts\_destructible::destructible_loopsound("mack_truck_fire_med"); + common_scripts\_destructible::destructible_explode(8000,10000,512,512,100,400,undefined,undefined,0.4,1000); + common_scripts\_destructible::destructible_state(undefined,"vehicle_semi_truck_destroyed",undefined,32,"no_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_semi_truck_wheel_lf",20,undefined,undefined,"no_melee",undefined,81); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_semi_truck_wheel_lf",20,undefined,undefined,"no_melee",undefined,81); + common_scripts\_destructible::destructible_part("left_wheel_03_jnt","vehicle_semi_truck_wheel_lf",20,undefined,undefined,"no_melee",undefined,81); + common_scripts\_destructible::destructible_part("tag_door_left_front","vehicle_semi_truck_door_lf",undefined,undefined,undefined,undefined,1,1); + var_00 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_00,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_00 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_00 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("mack_truck_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_00 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_00,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_00 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_00 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("mack_truck_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_00 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_00,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_00 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_00 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("mack_truck_glass_break_small"); + common_scripts\_destructible::destructible_state(undefined); + var_00 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_00,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_00 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("mack_truck_glass_break_small"); + common_scripts\_destructible::destructible_state(undefined); + var_00 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_00,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_00 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_00 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("mack_truck_glass_break_small"); + common_scripts\_destructible::destructible_state(undefined); + var_00 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_00,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_00 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("mack_truck_glass_break_small"); + common_scripts\_destructible::destructible_state(undefined); +} + +//Function Number: 116 +vehicle_mack_truck_short(param_00) +{ + var_01 = undefined; + var_01 = destructible_gaspump("vehicle_motorcycle_destroy_" + param_00); + common_scripts\_destructible::destructible_create("vehicle_motorcycle_" + param_00,"body_animate_jnt",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_death_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_death_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_death_fx","smoke/motorcycle_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,128,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(3000,4000,128,150,50,300); + lib_8900::func_6E0D(var_01,#animtree,"setanimknob",undefined,undefined,"vehicle_motorcycle_destroy_" + param_00); + common_scripts\_destructible::destructible_state(undefined,"vehicle_motorcycle_" + param_00 + "_destroy",undefined,32,"o_melee"); + common_scripts\_destructible::destructible_part("front_wheel","vehicle_motorcycle_01_front_wheel_d",20,undefined,undefined,"no_melee",undefined,1.7); + common_scripts\_destructible::destructible_part("rear_wheel","vehicle_motorcycle_01_rear_wheel_d",20,undefined,undefined,"no_melee",undefined,1.7); +} + +//Function Number: 117 +vehicle_semi_truck(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_engine","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_engine","smoke/scooter_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,128,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,150,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/vehicle_explosion_scooter",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(3000,4000,128,150,50,300); + common_scripts\_destructible::destructible_state(undefined,"vehicle_scooter_vespa_destroyed",undefined,32,"no_melee"); +} + +//Function Number: 118 +vehicle_motorcycle(param_00) +{ + common_scripts\_destructible::destructible_create("vehicle_subcompact_" + param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,150,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,150,250,50,300,undefined,0,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_subcompact_" + param_00 + "_destroyed",undefined,32,"_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_subcompact_wheel_lf",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","vehicle_subcompact_wheel_lf",20,undefined,undefined,"no_melee",undefined,2.3); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("tag_door_left_back","vehicle_subcompact_" + param_00 + "_door_LB",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_door_right_back","vehicle_subcompact_" + param_00 + "_door_RB",undefined,undefined,undefined,undefined,1,1); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_subcompact_" + param_00 + "_mirror_L",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_subcompact_" + param_00 + "_mirror_R",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 119 +vehicle_scooter(param_00) +{ + common_scripts\_destructible::destructible_create("vehicle_van_" + param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_van_" + param_00 + "_destroyed",undefined,32,"_melee"); + var_01 = "tag_hood"; + common_scripts\_destructible::destructible_part(var_01,"vehicle_van_" + param_00 + "_hood",undefined,undefined,undefined,undefined,1,2.5); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_van_wheel_lf",20,undefined,undefined,"no_melee",undefined,2.3); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_van_wheel_lf",20,undefined,undefined,"no_melee",undefined,2.3); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("tag_door_right_back","vehicle_van_" + param_00 + "_door_RB",undefined,undefined,undefined,undefined,1,1); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_van_" + param_00 + "_mirror_L",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_van_" + param_00 + "_mirror_R",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 120 +vehicle_subcompact(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_uaz_van_destroyed",undefined,32,"_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_uaz_van_wheel_lf",20,undefined,undefined,"no_melee",undefined,2.3); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","vehicle_uaz_van_wheel_lf",20,undefined,undefined,"no_melee",undefined,1.6); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); +} + +//Function Number: 121 +vehicle_van(param_00) +{ + common_scripts\_destructible::destructible_create(param_00 + "_destructable","tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("TAG_DEATH_FX","explosions/vehicle_explosion_medium",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,param_00 + "_destroyed",undefined,32,"_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",param_00 + "_wheel_lf",20,undefined,undefined,"no_melee",1,1); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",param_00 + "_wheel_lf",20,undefined,undefined,"no_melee",1,1); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",param_00 + "_wheel_lf",20,undefined,undefined,"no_melee",1,1); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",param_00 + "_wheel_lf",20,undefined,undefined,"no_melee",1,1); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + common_scripts\_destructible::destructible_part("tag_mirror_left",param_00 + "_mirror_lf",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right",param_00 + "_mirror_rf",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 122 +vehicle_uaz_van(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("TAG_HOOD_FX","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("TAG_HOOD_FX","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("TAG_HOOD_FX","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("TAG_DEATH_FX","explosions/vehicle_explosion_medium",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_delivery_theme_park_truck_destroyed",undefined,32,"_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_van_sas_dark_wheel_lf",20,undefined,undefined,"no_melee",1,2.7); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee",1,1); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee",1,1); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee",1,1); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + var_01 = "TAG_GLASS_FRONT1"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "TAG_GLASS_FRONT2"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "TAG_GLASS_LEFT_BACK"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "TAG_GLASS_LEFT_FRONT"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "TAG_GLASS_RIGHT_FRONT"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "TAG_GLASS_RIGHT_BACK"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); +} + +//Function Number: 123 +vehicle_van_iw5(param_00,param_01) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,300,300,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_suburban_destroyed" + param_01,undefined,32,"_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_suburban_wheel_rf",20,undefined,undefined,"no_melee",undefined,2.3); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_suburban_wheel_rf",20,undefined,undefined,"no_melee",undefined,2.3); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_part("tag_door_left_back","vehicle_suburban_door_lb" + param_01,undefined,undefined,undefined,undefined,1,1); + var_02 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_02,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_02 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_02 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_02 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_02,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_02 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_02 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_02 = "tag_center_glass"; + common_scripts\_destructible::destructible_part(var_02,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_02 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_02 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_02 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_02,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_02 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_02 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_02 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_02,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_02 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_02 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_02 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_02,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_02 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_02 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_02 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_02,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_02 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_02 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_02 = "tag_glass_left_back_02"; + common_scripts\_destructible::destructible_part(var_02,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_02 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_02 = "tag_glass_right_back_02"; + common_scripts\_destructible::destructible_part(var_02,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_02 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_02 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_02,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_02,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(var_02 + "_d"); + var_02 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_02,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_02 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_02,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(var_02 + "_d"); +} + +//Function Number: 124 +vehicle_delivery_theme_park_truck_destructible(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/snowmobile_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,150,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,150,150,50,300,undefined,undefined,0.3,500); + common_scripts\_destructible::destructible_anim(destructible_gaspump("ehicle_snowmobile_destroy_01"),#animtree,"setanimknob",undefined,undefined,"vehicle_snowmobile_destroy_01"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_snowmobile_destroyed",undefined,32,"no_melee"); + var_01 = "right_wheel_01_jnt"; + common_scripts\_destructible::destructible_part(var_01,"vehicle_snowmobile_ski_right",800,undefined,undefined,undefined,1,2.5); + common_scripts\_destructible::destructible_part("TAG_BAG_CENTER","vehicle_snowmobile_bag_center",undefined,undefined,undefined,undefined,1,2); + common_scripts\_destructible::destructible_part("TAG_BAG_LEFT","vehicle_snowmobile_bag_left",undefined,undefined,undefined,undefined,1,2); + common_scripts\_destructible::destructible_part("TAG_BAG_RIGHT","vehicle_snowmobile_bag_right",undefined,undefined,undefined,undefined,1,2); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); +} + +//Function Number: 125 +vehicle_suburban(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",150,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(15); + common_scripts\_destructible::destructible_loopfx("tag_death_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,150,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_death_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_death_fx","fire/gas_pump_fire_damage",0.4); + common_scripts\_destructible::destructible_sound("gaspump01_flareup_med"); + common_scripts\_destructible::destructible_loopsound("gaspump01_fire_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_death_fx","fire/gas_pump_fire_damage",0.4); + common_scripts\_destructible::destructible_loopsound("gaspump01_fire_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,210,"allies"); + common_scripts\_destructible::destructible_sound("gaspump01_flareup_med"); + common_scripts\_destructible::destructible_loopfx("tag_fx","fire/gas_pump_fire_handle",0.05); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"gaspump01_hose"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,5,"_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/gas_pump_exp",0); + common_scripts\_destructible::destructible_sound("gaspump01_explode"); + common_scripts\_destructible::destructible_explode(6000,8000,210,300,50,300,undefined,undefined,0.3,500); + common_scripts\_destructible::destructible_state(undefined,"furniture_gaspump01_destroyed",undefined,undefined,"no_melee"); + common_scripts\_destructible::destructible_part("tag_panel_front01","furniture_gaspump01_panel01",80,undefined,undefined,undefined,1,1,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_panel_front02","furniture_gaspump01_panel02",40,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_panel_front03","furniture_gaspump01_panel03",40,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_sound("exp_gaspump_sparks"); + common_scripts\_destructible::destructible_fx("tag_panel_front03","props/electricbox4_explode"); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_panel_back01","furniture_gaspump01_panel01",110,undefined,undefined,undefined,1,1,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_panel_back02","furniture_gaspump01_panel02",40,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_panel_back03","furniture_gaspump01_panel03",40,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_sound("exp_gaspump_sparks"); + common_scripts\_destructible::destructible_fx("tag_panel_back03","props/electricbox4_explode"); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 126 +vehicle_snowmobile(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",1500,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(2); + common_scripts\_destructible::destructible_loopsound("electrical_transformer_sparks"); + common_scripts\_destructible::destructible_loopfx("tag_fx","explosions/electrical_transformer_spark_runner",0.8); + common_scripts\_destructible::destructible_healthdrain(12,0.2,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,500,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("electrical_transformer_sparks"); + common_scripts\_destructible::destructible_fx("tag_fx_junction","explosions/generator_sparks_c",0); + common_scripts\_destructible::destructible_loopfx("tag_fx_junction","fire/electrical_transformer_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_loopfx("tag_fx","explosions/electrical_transformer_spark_runner",0.8); + common_scripts\_destructible::destructible_healthdrain(12,0.2,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("electrical_transformer_sparks"); + common_scripts\_destructible::destructible_loopfx("tag_fx_junction","fire/electrical_transformer_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_loopfx("tag_fx","explosions/electrical_transformer_spark_runner",0.8); + common_scripts\_destructible::destructible_loopfx("tag_fx_valve","explosions/generator_spark_runner",0.6); + common_scripts\_destructible::destructible_healthdrain(12,0.2,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,500,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/electrical_transformer_explosion",0); + common_scripts\_destructible::destructible_sound("electrical_transformer01_explode"); + common_scripts\_destructible::destructible_explode(6000,8000,210,300,20,300,undefined,undefined,0.3,500); + common_scripts\_destructible::destructible_state(undefined,"com_electrical_transformer_large_des",undefined,undefined,"no_melee"); + common_scripts\_destructible::destructible_part("tag_door1","com_electrical_transformer_large_dam_door1",1500,undefined,undefined,undefined,0,1,undefined,1); + common_scripts\_destructible::destructible_sound("electrical_transformer01_explode_detail"); + common_scripts\_destructible::destructible_fx("tag_door1","explosions/generator_explosion"); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_door2","com_electrical_transformer_large_dam_door2",150,undefined,undefined,undefined,0,1,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_door3","com_electrical_transformer_large_dam_door3",150,undefined,undefined,undefined,0,1,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_door4","com_electrical_transformer_large_dam_door4",150,undefined,undefined,undefined,0,1,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_door5","com_electrical_transformer_large_dam_door5",1500,undefined,undefined,undefined,0,1,undefined,1); + common_scripts\_destructible::destructible_sound("electrical_transformer01_explode_detail"); + common_scripts\_destructible::destructible_fx("tag_door5","explosions/generator_explosion"); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_door6","com_electrical_transformer_large_dam_door6",150,undefined,undefined,undefined,0,1,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_door7","com_electrical_transformer_large_dam_door7",150,undefined,undefined,undefined,0,1,undefined,1); + common_scripts\_destructible::destructible_loopsound("electrical_transformer_sparks"); + common_scripts\_destructible::destructible_fx("tag_door7","props/electricbox4_explode"); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 127 +destructible_gaspump(param_00) +{ + return level.var_E13[param_00]; +} + +//Function Number: 128 +destructible_electrical_transformer_large(param_00) +{ + return level.var_E15[param_00]; +} + +//Function Number: 129 +get_precached_anim(param_00) +{ + common_scripts\_destructible::destructible_create("vehicle_coupe_" + param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,150,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,150,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_coupe_" + param_00 + "_destroyed",undefined,32,"_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","vehicle_coupe_wheel_lf",20,undefined,undefined,"no_melee",undefined,2.3); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("tag_door_left_front","vehicle_coupe_" + param_00 + "_door_LF",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_spoiler","vehicle_coupe_" + param_00 + "_spoiler",undefined,undefined,undefined,undefined,1,2); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_coupe_" + param_00 + "_mirror_L",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_coupe_" + param_00 + "_mirror_R",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 130 +get_precached_animtree(param_00) +{ + common_scripts\_destructible::destructible_create("vehicle_mini_destructible_" + param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,150,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,150,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_mini_destroyed_" + param_00,undefined,32,"_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee",undefined,2.3); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + var_01 = "TAG_GLASS_FRONT"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_D",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_mini_mirror_lf",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_mini_mirror_rf",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 131 +vehicle_coupe(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + var_01 = "TAG_GLASS_FRONT"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_D",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "TAG_GLASS_BACK"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_D",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "TAG_GLASS_LEFT_FRONT"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_D",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "TAG_GLASS_RIGHT_FRONT"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_D",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); +} + +//Function Number: 132 +vehicle_mini(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"uk_police_estate_destroyed",undefined,32,"_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","uk_police_estate_wheel_lf",20,undefined,undefined,"no_melee",undefined,1); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","uk_police_estate_wheel_lf",20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","uk_police_estate_wheel_lf",20,undefined,undefined,"no_melee",undefined,10); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","uk_police_estate_wheel_lf",20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + var_01 = "TAG_GLASS_FRONT"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_D",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "TAG_GLASS_BACK"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_D",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "TAG_GLASS_LEFT_FRONT"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_D",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "TAG_GLASS_RIGHT_FRONT"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_D",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "TAG_GLASS_LEFT_BACK"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_D",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "TAG_GLASS_RIGHT_BACK"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_D",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "TAG_GLASS_LEFT_BACK_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_D",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "TAG_GLASS_RIGHT_BACK_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_D",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); +} + +//Function Number: 133 +vehicle_uk_truck(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_uaz_winter_destroy",undefined,32,"_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_uaz_wheel_LF_d",20,undefined,undefined,"no_melee",undefined,1); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_uaz_wheel_LF_d",20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_uaz_wheel_RF_d",20,undefined,undefined,"no_melee",undefined,10); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","vehicle_uaz_wheel_RF_d",20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_uaz_winter_mirror_L",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_uaz_winter_mirror_R",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 134 +vehicle_uk_police_estate(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_uaz_fabric_dsr",undefined,32,"_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_uaz_wheel_LF_d",20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_uaz_wheel_LF_d",20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_uaz_wheel_RF_d",20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","vehicle_uaz_wheel_RF_d",20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_uaz_mirror_L",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_uaz_mirror_R",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 135 +vehicle_uaz_winter(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_uaz_hardtop_dsr",undefined,32,"_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_uaz_wheel_LF_d",20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_uaz_wheel_LF_d",20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_uaz_wheel_RF_d",20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","vehicle_uaz_wheel_RF_d",20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_uaz_mirror_L",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_uaz_mirror_R",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 136 +vehicle_uaz_fabric(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_jeep_destroyed",undefined,32,"_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_jeep_wheel_lf",20,undefined,undefined,"no_melee",undefined,2.7); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_jeep_wheel_lf",20,undefined,undefined,"no_melee",undefined,2.7); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); +} + +//Function Number: 137 +vehicle_uaz_hardtop(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_jeep_destroyed",undefined,32,"_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_jeep_wheel_lf",20,undefined,undefined,"no_melee",undefined,2.7); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_jeep_wheel_lf",20,undefined,undefined,"no_melee",undefined,2.7); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); +} + +//Function Number: 138 +vehicle_jeep(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_uaz_open_dsr",undefined,32,"_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_uaz_wheel_LF_d",20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_uaz_wheel_LF_d",20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_uaz_wheel_LF_d",20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","vehicle_uaz_wheel_LF_d",20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_uaz_mirror_L",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_uaz_mirror_R",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 139 +vehicle_jeep_dusty(param_00) +{ + common_scripts\_destructible::destructible_create("vehicle_india_compact_destructible_" + param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/india_compact_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_india_compact_destroyed_" + param_00,undefined,32,"_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_india_compact_wheel_lf_d",20,undefined,undefined,"no_melee",undefined,1.2); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_india_compact_mirror_l",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_india_compact_mirror_r",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 140 +vehicle_uaz_open(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/rickshaw_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_deathfx","explosions/india_rickshaw_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"india_vehicle_rksw_d",undefined,32,"_melee"); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,30,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + common_scripts\_destructible::destructible_part("tag_headlight_left","intro_vehicle_rksw_light_d",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 141 +vehicle_india_compact_destructible(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/rickshaw_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/india_rickshaw_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_tuk_tuk_destroyed",undefined,32,"_melee"); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,30,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,30,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + common_scripts\_destructible::destructible_part("tag_door_left_front","vehicle_tuk_tuk_door_left",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_door_left_front","vehicle_tuk_tuk_door_right",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_tuk_tuk_mirror",10,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 142 +vehicle_india_rickshaw(param_00) +{ + common_scripts\_destructible::destructible_create("vehicle_india_suv_" + param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_deathfx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_india_suv_" + param_00 + "_dsr",undefined,32,"_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_india_suv_wheel_lf_d",20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_india_suv_wheel_lf_d",20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_india_suv_wheel_rf_d",20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","vehicle_india_suv_wheel_rf_d",20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_uaz_mirror_L",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_uaz_mirror_R",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 143 +vehicle_tuk_tuk(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode_police"); + common_scripts\_destructible::destructible_explode(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_policecar_lapd_destroy",undefined,32,"_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_policecar_lapd_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_policecar_lapd_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_policecar_lapd_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","vehicle_policecar_lapd_wheel_LF",20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("tag_door_left_front","vehicle_policecar_lapd_door_LF",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_door_right_front","vehicle_policecar_lapd_door_RF",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_door_left_back","vehicle_policecar_lapd_door_LB",undefined,undefined,undefined,undefined,1,1); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_center_glass"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("TAG_CENTER_GLASS_FX","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_policecar_lapd_mirror_L",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_policecar_lapd_mirror_R",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 144 +vehicle_india_suv(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode_police"); + common_scripts\_destructible::destructible_explode(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_policecar_russia_destroy",undefined,32,"_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_policecar_russia_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_policecar_russia_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_policecar_russia_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","vehicle_policecar_russia_wheel_LF",20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("tag_door_left_front","vehicle_policecar_russia_door_LF",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_door_right_front","vehicle_policecar_russia_door_RF",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_door_left_back","vehicle_policecar_russia_door_LB",undefined,undefined,undefined,undefined,1,1); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_center_glass"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("TAG_CENTER_GLASS_FX","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_policecar_russia_mirror_L",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_policecar_russia_mirror_R",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 145 +vehicle_policecar(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::random_dynamic_attachment("tag_ad","vehicle_taxi_rooftop_ad_base","vehicle_taxi_rooftop_ad_1"); + common_scripts\_destructible::random_dynamic_attachment("tag_ad","vehicle_taxi_rooftop_ad_base","vehicle_taxi_rooftop_ad_2"); + common_scripts\_destructible::random_dynamic_attachment("tag_ad","vehicle_taxi_rooftop_ad_base","vehicle_taxi_rooftop_ad_3"); + common_scripts\_destructible::random_dynamic_attachment("tag_ad","vehicle_taxi_rooftop_ad_base","vehicle_taxi_rooftop_ad_4"); + common_scripts\_destructible::random_dynamic_attachment("tag_ad","vehicle_taxi_toplight",undefined,"taxi_ad_clip"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_taxi_yellow_destroy",undefined,32,"_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee",undefined,1.7); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee",undefined,1.7); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_car_alarm(); + var_01 = "TAG_CENTER_GLASS"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_taxi_mirror_l",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_taxi_mirror_r",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 146 +vehicle_policecar_russia(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::random_dynamic_attachment("tag_ad","vehicle_taxi_toplight_dubai",undefined,"taxi_ad_clip"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_taxi_yellow_destroy_dubai",undefined,32,"_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee",undefined,1.7); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee",undefined,1.7); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_car_alarm(); + var_01 = "TAG_CENTER_GLASS"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_taxi_mirror_l",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_taxi_mirror_r",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 147 +vehicle_taxi(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_camera_tilt",0,undefined,32); + common_scripts\_destructible::destructible_anim(destructible_gaspump("ecurity_camera_idle"),#animtree,"setanimknob",undefined,undefined,"security_camera_idle"); + common_scripts\_destructible::destructible_state("tag_camera_tilt","com_security_camera_tilt_animated",75); + common_scripts\_destructible::destructible_anim(destructible_gaspump("ecurity_camera_destroy"),#animtree,"setanimknob",undefined,undefined,"security_camera_destroy"); + common_scripts\_destructible::destructible_fx("tag_fx","props/security_camera_explosion_moving"); + common_scripts\_destructible::destructible_sound("security_camera_sparks"); + common_scripts\_destructible::destructible_state(undefined,"com_security_camera_d_tilt_animated",undefined,undefined,"no_melee"); +} + +//Function Number: 148 +vehicle_taxi_dubai(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",100,undefined,32); + common_scripts\_destructible::destructible_anim(destructible_gaspump("c130_building_collapse"),#animtree,"setanimknob",undefined,undefined,"ac130_building_collapse"); + common_scripts\_destructible::destructible_fx("tag_fx","misc/building_collapse_paris_ac130"); + common_scripts\_destructible::destructible_fx("tag_fx_base","misc/building_collapse_paris_ac130_ground"); + common_scripts\_destructible::destructible_fx("tag_fx_crack","misc/building_collapse_paris_ac130_cracks"); + common_scripts\_destructible::destructible_state(undefined,"building_collapse_paris_ac130_dest",undefined,undefined,"no_melee"); +} + +//Function Number: 149 +toy_security_camera(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",100,undefined,32); + common_scripts\_destructible::destructible_anim(destructible_gaspump("ondon_gas_attack"),#animtree,"setanimknob",undefined,undefined,"london_gas_attack"); + common_scripts\_destructible::destructible_fx("tag_origin","smoke/poison_gas_attack"); + common_scripts\_destructible::destructible_state(undefined,"fx_gas_attack",undefined,undefined,"no_melee"); +} + +//Function Number: 150 +toy_building_collapse_paris_ac130(param_00) +{ + common_scripts\_destructible::destructible_create("toy_arcade_machine" + param_00,"tag_origin",0,undefined,32); + common_scripts\_destructible::destructible_state("tag_origin","arcade_machine" + param_00,75); + common_scripts\_destructible::destructible_fx("tag_fx","props/arcade_machine_exp"); + common_scripts\_destructible::destructible_fx("tag_fx2","props/arcade_machine_coins"); + common_scripts\_destructible::destructible_sound("arcade_machine_destroy"); + common_scripts\_destructible::destructible_state(undefined,"arcade_machine" + param_00 + "_des",undefined,undefined,"no_melee"); +} + +//Function Number: 151 +toy_poison_gas_attack(param_00) +{ + common_scripts\_destructible::destructible_create("toy_pinball_machine" + param_00,"tag_origin",0,undefined,32); + common_scripts\_destructible::destructible_state("tag_origin","pinball_machine" + param_00,75); + common_scripts\_destructible::destructible_fx("tag_fx","props/pinball_machine_exp",undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_fx2","props/arcade_machine_coins"); + common_scripts\_destructible::destructible_fx("tag_fx3","props/pinball_machine_glass"); + common_scripts\_destructible::destructible_sound("pinball_machine_destroy"); + common_scripts\_destructible::destructible_state(undefined,"pinball_machine" + param_00 + "_des",undefined,undefined,"no_melee"); +} + +//Function Number: 152 +toy_arcade_machine(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",0,undefined,32); + common_scripts\_destructible::destructible_loopsound("fortune_machine_idle"); + common_scripts\_destructible::destructible_loopfx("J_Eye_RI","props/fortune_machine_glow_eyes",2.9); + common_scripts\_destructible::destructible_loopfx("J_Eye_LE","props/fortune_machine_glow_eyes",2.9); + common_scripts\_destructible::destructible_loopfx("tag_fx3","props/fortune_machine_glow_ball",4); + common_scripts\_destructible::destructible_anim(destructible_gaspump("ortune_machine_anim"),#animtree,"setanimknob",undefined,undefined,"fortune_machine_anim"); + common_scripts\_destructible::destructible_state("tag_origin","fortune_machine",75); + common_scripts\_destructible::destructible_fx("tag_fx","props/fortune_machine_exp",undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_fx2","props/fortune_machine_tickets"); + common_scripts\_destructible::destructible_sound("pinball_machine_destroy"); + common_scripts\_destructible::destructible_anim(destructible_gaspump("ortune_machine_des"),#animtree,"setanimknob",undefined,undefined,"fortune_machine_des"); + common_scripts\_destructible::destructible_explode(20,2000,20,20,40,40,undefined,64); + common_scripts\_destructible::destructible_state(undefined,"fortune_machine_des",undefined,undefined,"no_melee"); +} + +//Function Number: 153 +toy_pinball_machine(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",120,undefined,32); + common_scripts\_destructible::destructible_fx("tag_fx","props/garbage_spew_des",1,"splash"); + common_scripts\_destructible::destructible_fx("tag_fx","props/garbage_spew",1,common_scripts\_destructible::damage_not("splash")); + common_scripts\_destructible::destructible_sound("exp_trashcan_sweet"); + common_scripts\_destructible::destructible_explode(600,651,1,1,10,20); + common_scripts\_destructible::destructible_state("tag_origin","trashcan_clown_base",undefined,undefined,undefined,undefined,undefined,0); + common_scripts\_destructible::destructible_part("tag_fx","trashcan_clown_lid",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 154 +toy_fortune_machine(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",25,undefined,32); + common_scripts\_destructible::destructible_fx("tag_origin","dust/dust_shanty_explode"); + common_scripts\_destructible::destructible_anim(destructible_gaspump("fr_shanty01_explode"),#animtree,"setanimknob",undefined,undefined,"afr_shanty01_explode"); + common_scripts\_destructible::destructible_state(undefined,"afr_shanty01",undefined,undefined,"no_melee"); +} + +//Function Number: 155 +toy_trashcan_clown(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",1,undefined,32); + common_scripts\_destructible::destructible_anim(destructible_gaspump("y_harbor_slava_r2a_des"),#animtree,"setanim"); + common_scripts\_destructible::destructible_fx("tag_explosionA","maps/ny_harbor/ny_battleship_explosion"); + common_scripts\_destructible::destructible_fx("tag_explosionB","maps/ny_harbor/ny_battleship_explosion"); +} + +//Function Number: 156 +toy_afrshanty1(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",5,undefined,undefined); + common_scripts\_destructible::destructible_fx("tag_fx1","props/skylight_destroyed_windowglass"); + common_scripts\_destructible::destructible_fx("tag_fx4","props/skylight_destroyed_windowglass"); + common_scripts\_destructible::destructible_fx("tag_fx7","props/skylight_destroyed_windowglass"); + common_scripts\_destructible::destructible_fx("tag_fx4","props/skylight_destroyed_pit"); + common_scripts\_destructible::destructible_state("tag_origin","ny_rooftop_skylight_destroyed",undefined,undefined,"no_melee"); +} + +//Function Number: 157 +vehicle_slava_ny_harbor_zonea(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",150,undefined,32); + common_scripts\_destructible::destructible_fx("tag_origin","props/satellite_dish_big_des"); + common_scripts\_destructible::destructible_state("tag_origin","com_satellite_dish_big_destroyed",undefined,undefined,"no_melee"); +} + +//Function Number: 158 +rooftop_skylight_destructible(param_00,param_01,param_02,param_03) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",150,undefined,32); + common_scripts\_destructible::destructible_fx("tag_fx",param_02); + common_scripts\_destructible::destructible_state("tag_origin",param_01,undefined,undefined,"no_meele"); + if(isdefined(param_03)) + { + common_scripts\_destructible::destructible_sound(param_03); + } +} + +//Function Number: 159 +satellite_dish_big_destructible(param_00,param_01,param_02,param_03) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",1150,undefined,32); + common_scripts\_destructible::destructible_state("tag_origin",param_01,undefined,undefined,"no_meele"); + common_scripts\_destructible::destructible_fx("tag_fx",param_02); + common_scripts\_destructible::destructible_fx("tag_fx",param_02); +} + +//Function Number: 160 +dest_onestate(param_00,param_01) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",150,undefined,32); + common_scripts\_destructible::destructible_fx("tag_fx","misc/light_blowout_ceiling"); + common_scripts\_destructible::destructible_fx("tag_fx_wire","misc/light_blowout_wire_spark"); + common_scripts\_destructible::destructible_state("tag_origin",param_01,undefined,undefined,"no_meele"); +} + +//Function Number: 161 +dest_pb_planter(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("tag_origin","rus_vx_gas_canister_destroyed",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/rus_vx_gas_canister",0); + common_scripts\_destructible::destructible_explode(7000,8000,150,256,16,150,undefined); +} \ No newline at end of file diff --git a/MW3/PC/MP/common_scripts/_dynamic_world.gsc b/MW3/PC/MP/common_scripts/_dynamic_world.gsc new file mode 100644 index 0000000..9443ee8 --- /dev/null +++ b/MW3/PC/MP/common_scripts/_dynamic_world.gsc @@ -0,0 +1,1488 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: common_scripts\_dynamic_world.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 64 + * Decompile Time: 1106 ms + * Timestamp: 10/27/2023 2:15:47 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + common_scripts\utility::array_thread(getentarray("com_wall_fan_blade_rotate_slow","targetname"),::fan_blade_rotate,"veryslow"); + common_scripts\utility::array_thread(getentarray("com_wall_fan_blade_rotate","targetname"),::fan_blade_rotate,"slow"); + common_scripts\utility::array_thread(getentarray("com_wall_fan_blade_rotate_fast","targetname"),::fan_blade_rotate,"fast"); + var_00 = []; + player_init(); + foreach(var_04, var_02 in var_7B) + { + var_03 = getentarray(var_04,"classname"); + common_scripts\utility::array_thread(var_03,::triggertouchthink); + common_scripts\utility::array_thread(var_03,var_02); + } + + common_scripts\utility::array_thread(getentarray("vending_machine","targetname"),::vending_machine); + common_scripts\utility::array_thread(getentarray("toggle","targetname"),::use_toggle); + level thread onplayerconnect(); + var_05 = getent("civilian_jet_origin","targetname"); + if(isdefined(var_05)) + { + var_05 thread civilian_jet_flyby(); + } +} + +//Function Number: 2 +onplayerconnect() +{ + for(;;) + { + level waittill("connecting",var_00); + var_00 thread movementtracker(); + } +} + +//Function Number: 3 +player_init() +{ + if(common_scripts\utility::issp()) + { + foreach(var_01 in level.players) + { + var_01.touchtriggers = []; + var_01 thread movementtracker(); + } + } +} + +//Function Number: 4 +ai_init() +{ + self.touchtriggers = []; + thread movementtracker(); +} + +//Function Number: 5 +civilian_jet_flyby() +{ + level endon("game_ended"); + jet_init(); + level waittill("prematch_over"); + for(;;) + { + thread jet_timer(); + self waittill("start_flyby"); + thread jet_flyby(); + self waittill("flyby_done"); + jet_reset(); + } +} + +//Function Number: 6 +jet_init() +{ + self.var_1D1E = getentarray(self.target,"targetname"); + self.var_1D1F = getent("civilian_jet_flyto","targetname"); + self.var_1D20 = getentarray("engine_fx","targetname"); + self.var_1D21 = getentarray("flash_fx","targetname"); + self.var_1D22 = loadfx("fire/jet_afterburner"); + self.var_1D23 = loadfx("misc/aircraft_light_wingtip_red"); + self.var_1D24 = loadfx("misc/aircraft_light_wingtip_green"); + self.var_1D25 = loadfx("misc/aircraft_light_red_blink"); + level.civilianjetflyby = undefined; + var_00 = vectornormalize(self.origin - self.var_1D1F.origin) * 20000; + self.var_1D1F.origin = self.var_1D1F.origin - var_00; + self.origin = self.origin + var_00; + foreach(var_02 in self.var_1D1E) + { + var_02.origin = var_02.origin + var_00; + var_02.old_origin = var_02.origin; + var_02 hide(); + } + + foreach(var_05 in self.var_1D20) + { + var_05.origin = var_05.origin + var_00; + } + + foreach(var_08 in self.var_1D21) + { + var_08.origin = var_08.origin + var_00; + } + + var_0A = self.origin; + var_0B = self.var_1D1F.origin; + self.var_1D28 = var_0B - var_0A; + var_0C = 2000; + var_0D = abs(distance(var_0A,var_0B)); + self.var_1D29 = var_0D / var_0C; +} + +//Function Number: 7 +jet_reset() +{ + foreach(var_01 in self.var_1D1E) + { + var_01.origin = var_01.old_origin; + var_01 hide(); + } +} + +//Function Number: 8 +jet_timer() +{ + level endon("game_ended"); + var_00 = gettimeinterval(); + var_01 = max(10,var_00); + var_01 = min(var_01,100); + if(getdvar("jet_flyby_timer") != "") + { + level.var_1D2C = 5 + getdvarint("jet_flyby_timer"); + } + else + { + level.var_1D2C = 0.25 + randomfloatrange(0.3,0.7) * 60 * var_01; + } + + wait level.var_1D2C; + while(isdefined(level.airstrikeinprogress) || isdefined(level.ac130player) || isdefined(level.chopper) || isdefined(level.remotemissileinprogress)) + { + wait 0.05; + } + + self notify("start_flyby"); + level.civilianjetflyby = 1; + self waittill("flyby_done"); + level.civilianjetflyby = undefined; +} + +//Function Number: 9 +gettimeinterval() +{ + if(common_scripts\utility::issp()) + { + return 10; + } + + if(isdefined(game["status"]) && game["status"] == "overtime") + { + return 1; + } + + return getwatcheddvar("timelimit"); +} + +//Function Number: 10 +getwatcheddvar(param_00) +{ + param_00 = "scr_" + level.gametype + "_" + param_00; + if(isdefined(level.overridewatchdvars) && isdefined(level.overridewatchdvars[param_00])) + { + return level.overridewatchdvars[param_00]; + } + + return level.watchdvars[param_00].value; +} + +//Function Number: 11 +jet_flyby() +{ + foreach(var_01 in self.var_1D1E) + { + var_01 show(); + } + + var_03 = []; + var_04 = []; + foreach(var_06 in self.var_1D20) + { + var_07 = spawn("script_model",var_06.origin); + var_07 setmodel("tag_origin"); + var_07.angles = var_06.angles; + var_03[var_03.size] = var_07; + } + + foreach(var_0A in self.var_1D21) + { + var_0B = spawn("script_model",var_0A.origin); + var_0B setmodel("tag_origin"); + var_0B.color = var_0A.script_noteworthy; + var_0B.angles = var_0A.angles; + var_04[var_04.size] = var_0B; + } + + thread jet_planesound(self.var_1D1E[0],level.mapcenter); + wait 0.05; + foreach(var_07 in var_03) + { + playfxontag(self.var_1D22,var_07,"tag_origin"); + } + + foreach(var_0B in var_04) + { + if(isdefined(var_0B.color) && var_0B.color == "blink") + { + playfxontag(self.var_1D25,var_0B,"tag_origin"); + continue; + } + + if(isdefined(var_0B.color) && var_0B.color == "red") + { + playfxontag(self.var_1D23,var_0B,"tag_origin"); + continue; + } + + playfxontag(self.var_1D24,var_0B,"tag_origin"); + } + + foreach(var_01 in self.var_1D1E) + { + var_01 moveto(var_01.origin + self.var_1D28,self.var_1D29); + } + + foreach(var_07 in var_03) + { + var_07 moveto(var_07.origin + self.var_1D28,self.var_1D29); + } + + foreach(var_0B in var_04) + { + var_0B moveto(var_0B.origin + self.var_1D28,self.var_1D29); + } + + wait self.var_1D29 + 1; + foreach(var_07 in var_03) + { + var_07 delete(); + } + + foreach(var_0B in var_04) + { + var_0B delete(); + } + + self notify("flyby_done"); +} + +//Function Number: 12 +jet_planesound(param_00,param_01) +{ + param_00 thread playsound_loop_on_ent("veh_mig29_dist_loop"); + while(!targetisclose(param_00,param_01)) + { + wait 0.05; + } + + param_00 thread playsound_loop_on_ent("veh_mig29_close_loop"); + while(targetisinfront(param_00,param_01)) + { + wait 0.05; + } + + wait 0.5; + param_00 thread playsound_float("veh_mig29_sonic_boom"); + while(targetisclose(param_00,param_01)) + { + wait 0.05; + } + + param_00 notify("stop soundveh_mig29_close_loop"); + self waittill("flyby_done"); + param_00 notify("stop soundveh_mig29_dist_loop"); +} + +//Function Number: 13 +playsound_float(param_00,param_01,param_02) +{ + var_03 = spawn("script_origin",(0,0,1)); + var_03 hide(); + if(!isdefined(param_01)) + { + param_01 = self.origin; + } + + var_03.origin = param_01; + if(isdefined(param_02) && param_02) + { + var_03 playsoundasmaster(param_00); + } + else + { + var_03 playsound(param_00); + } + + wait 10; + var_03 delete(); +} + +//Function Number: 14 +playsound_loop_on_ent(param_00,param_01) +{ + var_02 = spawn("script_origin",(0,0,0)); + var_02 hide(); + var_02 endon("death"); + thread common_scripts\utility::delete_on_death(var_02); + if(isdefined(param_01)) + { + var_02.origin = self.origin + param_01; + var_02.angles = self.angles; + var_02 linkto(self); + } + else + { + var_02.origin = self.origin; + var_02.angles = self.angles; + var_02 linkto(self); + } + + var_02 playloopsound(param_00); + self waittill("stop sound" + param_00); + var_02 stoploopsound(param_00); + var_02 delete(); +} + +//Function Number: 15 +targetisinfront(param_00,param_01) +{ + var_02 = anglestoforward(common_scripts\utility::flat_angle(param_00.angles)); + var_03 = vectornormalize(common_scripts\utility::flat_origin(param_01) - param_00.origin); + var_04 = vectordot(var_02,var_03); + if(var_04 > 0) + { + return 1; + } + + return 0; +} + +//Function Number: 16 +targetisclose(param_00,param_01) +{ + var_02 = targetisinfront(param_00,param_01); + if(var_02) + { + var_03 = 1; + } + else + { + var_03 = -1; + } + + var_04 = common_scripts\utility::flat_origin(param_00.origin); + var_05 = var_04 + anglestoforward(common_scripts\utility::flat_angle(param_00.angles)) * var_03 * 100000; + var_06 = pointonsegmentnearesttopoint(var_04,var_05,param_01); + var_07 = distance(var_04,var_06); + if(var_07 < 3000) + { + return 1; + } + + return 0; +} + +//Function Number: 17 +vending_machine() +{ + level endon("game_ended"); + self endon("death"); + self setcursorhint("HINT_ACTIVATE"); + self.var_1D3F = getent(self.target,"targetname"); + var_00 = getent(self.var_1D3F.target,"targetname"); + var_01 = getent(var_00.target,"targetname"); + var_02 = getent(var_01.target,"targetname"); + self.var_1D40 = var_02.origin; + var_03 = getent(var_02.target,"targetname"); + self.var_1D41 = var_03.origin; + if(isdefined(var_03.target)) + { + self.var_1D42 = getent(var_03.target,"targetname").origin; + } + + self.var_1D3F setcandamage(1); + self.var_1D43 = self.var_1D3F.model; + self.var_1D44 = self.var_1D3F.script_noteworthy; + self.var_1D45 = var_00.model; + self.var_1D46 = var_00.origin; + self.var_1D47 = var_00.angles; + self.var_1D48 = var_01.origin; + self.var_1D49 = var_01.angles; + precachemodel(self.var_1D44); + var_00 delete(); + var_01 delete(); + var_02 delete(); + var_03 delete(); + self.var_1D4A = []; + self.var_1D4B = 12; + self.var_1D4C = undefined; + self.var_1D4D = 400; + thread vending_machine_damage_monitor(self.var_1D3F); + self playloopsound("vending_machine_hum"); + for(;;) + { + self waittill("trigger",var_04); + self playsound("vending_machine_button_press"); + if(!self.var_1D4B) + { + continue; + } + + if(isdefined(self.var_1D4C)) + { + soda_can_eject(); + } + + soda_can_drop(spawn_soda()); + wait 0.05; + } +} + +//Function Number: 18 +vending_machine_damage_monitor(param_00) +{ + level endon("game_ended"); + var_01 = "mod_grenade mod_projectile mod_explosive mod_grenade_splash mod_projectile_splash splash"; + var_02 = loadfx("explosions/tv_explosion"); + for(;;) + { + var_03 = undefined; + var_04 = undefined; + var_05 = undefined; + var_06 = undefined; + var_07 = undefined; + param_00 waittill("damage",var_03,var_04,var_05,var_06,var_07); + if(isdefined(var_07)) + { + if(issubstr(var_01,tolower(var_07))) + { + var_03 = var_03 * 3; + } + + self.var_1D4D = self.var_1D4D - var_03; + if(self.var_1D4D > 0) + { + continue; + } + + self notify("death"); + self.origin = self.origin + (0,0,10000); + if(!isdefined(self.var_1D42)) + { + var_08 = self.var_1D3F.origin + (37,-31,52); + } + else + { + var_08 = self.var_1D42; + } + + playfx(var_02,var_08); + self.var_1D3F setmodel(self.var_1D44); + while(self.var_1D4B > 0) + { + if(isdefined(self.var_1D4C)) + { + soda_can_eject(); + } + + soda_can_drop(spawn_soda()); + wait 0.05; + } + + self stoploopsound("vending_machine_hum"); + return; + } + } +} + +//Function Number: 19 +spawn_soda() +{ + var_00 = spawn("script_model",self.var_1D46); + var_00 setmodel(self.var_1D45); + var_00.origin = self.var_1D46; + var_00.angles = self.var_1D47; + return var_00; +} + +//Function Number: 20 +soda_can_drop(param_00) +{ + param_00 moveto(self.var_1D48,0.2); + param_00 playsound("vending_machine_soda_drop"); + wait 0.2; + self.var_1D4C = param_00; + self.var_1D4B--; +} + +//Function Number: 21 +soda_can_eject() +{ + self endon("death"); + if(isdefined(self.var_1D4C.var_1D52) && self.var_1D4C.var_1D52 == 1) + { + return; + } + + var_00 = 1; + var_01 = var_00 * -999; + var_02 = int(-25536); + var_03 = (int(var_02 / 2),int(var_02 / 2),0) - (randomint(var_02),randomint(var_02),0); + var_04 = vectornormalize(self.var_1D41 - self.var_1D40 + var_03); + var_05 = var_04 * randomfloatrange(var_01,var_00); + self.var_1D4C physicslaunchclient(self.var_1D40,var_05); + self.var_1D4C.var_1D52 = 1; +} + +//Function Number: 22 +freefall() +{ + level endon("game_ended"); + var_00 = "briefcase_bomb_mp"; + precacheitem(var_00); + for(;;) + { + self waittill("trigger_enter",var_01); + if(!var_01 hasweapon(var_00)) + { + var_01 playsound("freefall_death"); + var_01 giveweapon(var_00); + var_01 setweaponammostock(var_00,0); + var_01 setweaponammoclip(var_00,0); + var_01 switchtoweapon(var_00); + } + } +} + +//Function Number: 23 +metal_detector() +{ + level endon("game_ended"); + var_00 = getent(self.target,"targetname"); + var_00 enablegrenadetouchdamage(); + var_01 = getent(var_00.target,"targetname"); + var_02 = getent(var_01.target,"targetname"); + var_03 = getent(var_02.target,"targetname"); + var_04 = getent(var_03.target,"targetname"); + var_05 = []; + var_06 = min(var_01.origin[0],var_02.origin[0]); + var_05[0] = var_06; + var_07 = max(var_01.origin[0],var_02.origin[0]); + var_05[1] = var_07; + var_08 = min(var_01.origin[1],var_02.origin[1]); + var_05[2] = var_08; + var_09 = max(var_01.origin[1],var_02.origin[1]); + var_05[3] = var_09; + var_0A = min(var_01.origin[2],var_02.origin[2]); + var_05[4] = var_0A; + var_0B = max(var_01.origin[2],var_02.origin[2]); + var_05[5] = var_0B; + var_01 delete(); + var_02 delete(); + if(!common_scripts\utility::issp()) + { + self.var_1D55 = 7; + } + else + { + self.var_1D55 = 2; + } + + self.var_1D56 = 0; + self.var_1D57 = 0; + self.var_1D58 = 0; + thread metal_detector_dmg_monitor(var_00); + thread metal_detector_touch_monitor(); + thread metal_detector_weapons(var_05,"weapon_claymore","weapon_c4"); + var_0C = (var_03.origin[0],var_03.origin[1],var_0B); + var_0D = (var_04.origin[0],var_04.origin[1],var_0B); + var_0E = loadfx("props/metal_detector_light"); + for(;;) + { + common_scripts\utility::waittill_any("dmg_triggered","touch_triggered","weapon_triggered"); + thread playsound_and_light("alarm_metal_detector",var_0E,var_0C,var_0D); + } +} + +//Function Number: 24 +playsound_and_light(param_00,param_01,param_02,param_03) +{ + level endon("game_ended"); + if(!self.var_1D56) + { + self.var_1D56 = 1; + thread annoyance_tracker(); + if(!self.var_1D57) + { + self playsound(param_00); + } + + playfx(param_01,param_02); + playfx(param_01,param_03); + wait self.var_1D55; + self.var_1D56 = 0; + } +} + +//Function Number: 25 +annoyance_tracker() +{ + level endon("game_ended"); + if(!self.var_1D58) + { + return; + } + + var_00 = self.var_1D55 + 0.15; + if(self.var_1D58) + { + self.var_1D58--; + } + else + { + self.var_1D57 = 1; + } + + var_01 = gettime(); + var_02 = 7; + if(common_scripts\utility::issp()) + { + var_02 = 2; + } + + waittill_any_or_timeout("dmg_triggered","touch_triggered","weapon_triggered",var_02 + 2); + var_03 = gettime() - var_01; + if(var_03 > var_02 * 1000 + 1150) + { + self.var_1D57 = 0; + self.var_1D58 = 0; + } +} + +//Function Number: 26 +waittill_any_or_timeout(param_00,param_01,param_02,param_03) +{ + level endon("game_ended"); + self endon(param_00); + self endon(param_01); + self endon(param_02); + wait param_03; +} + +//Function Number: 27 +metal_detector_weapons(param_00,param_01,param_02) +{ + level endon("game_ended"); + for(;;) + { + waittill_weapon_placed(); + var_03 = getentarray("grenade","classname"); + foreach(var_05 in var_03) + { + if(isdefined(var_05.model) && var_05.model == param_01 || var_05.model == param_02) + { + if(isinbound(var_05,param_00)) + { + thread weapon_notify_loop(var_05,param_00); + } + } + } + } +} + +//Function Number: 28 +waittill_weapon_placed() +{ + level endon("game_ended"); + self endon("dmg_triggered"); + self waittill("touch_triggered"); +} + +//Function Number: 29 +weapon_notify_loop(param_00,param_01) +{ + param_00 endon("death"); + while(isinbound(param_00,param_01)) + { + self notify("weapon_triggered"); + wait self.var_1D55; + } +} + +//Function Number: 30 +isinbound(param_00,param_01) +{ + var_02 = param_01[0]; + var_03 = param_01[1]; + var_04 = param_01[2]; + var_05 = param_01[3]; + var_06 = param_01[4]; + var_07 = param_01[5]; + var_08 = param_00.origin[0]; + var_09 = param_00.origin[1]; + var_0A = param_00.origin[2]; + if(isinbound_single(var_08,var_02,var_03)) + { + if(isinbound_single(var_09,var_04,var_05)) + { + if(isinbound_single(var_0A,var_06,var_07)) + { + return 1; + } + } + } + + return 0; +} + +//Function Number: 31 +isinbound_single(param_00,param_01,param_02) +{ + if(param_00 > param_01 && param_00 < param_02) + { + return 1; + } + + return 0; +} + +//Function Number: 32 +metal_detector_dmg_monitor(param_00) +{ + level endon("game_ended"); + for(;;) + { + param_00 waittill("damage",var_01,var_02,var_03,var_04,var_05); + if(isdefined(var_05) && alarm_validate_damage(var_05)) + { + self notify("dmg_triggered"); + } + } +} + +//Function Number: 33 +metal_detector_touch_monitor() +{ + level endon("game_ended"); + for(;;) + { + self waittill("trigger_enter"); + while(anythingtouchingtrigger(self)) + { + self notify("touch_triggered"); + wait self.var_1D55; + } + } +} + +//Function Number: 34 +alarm_validate_damage(param_00) +{ + var_01 = "mod_melee melee mod_grenade mod_projectile mod_explosive mod_impact"; + var_02 = strtok(var_01," "); + foreach(var_04 in var_02) + { + if(tolower(var_04) == tolower(param_00)) + { + return 1; + } + } + + return 0; +} + +//Function Number: 35 +creaky_board() +{ + level endon("game_ended"); + for(;;) + { + self waittill("trigger_enter",var_00); + var_00 thread do_creak(self); + } +} + +//Function Number: 36 +do_creak(param_00) +{ + self endon("disconnect"); + self endon("death"); + self playsound("step_walk_plr_woodcreak_on"); + for(;;) + { + self waittill("trigger_leave",var_01); + if(param_00 != var_01) + { + continue; + } + + self playsound("step_walk_plr_woodcreak_off"); + } +} + +//Function Number: 37 +motion_light() +{ + level endon("game_ended"); + self.var_1D66 = 1; + self.var_1D67 = 0; + var_00 = getentarray(self.target,"targetname"); + precachemodel("com_two_light_fixture_off"); + precachemodel("com_two_light_fixture_on"); + foreach(var_02 in var_00) + { + var_02.var_1D68 = []; + var_03 = getent(var_02.target,"targetname"); + if(!isdefined(var_03.target)) + { + continue; + } + + var_02.var_1D68 = getentarray(var_03.target,"targetname"); + } + + for(;;) + { + self waittill("trigger_enter"); + while(anythingtouchingtrigger(self)) + { + var_05 = 0; + foreach(var_07 in self.touchlist) + { + if(isdefined(var_07.var_1D6A) && var_07.var_1D6A > 5) + { + var_05 = 1; + } + } + + if(var_05) + { + if(!self.var_1D67) + { + self.var_1D67 = 1; + var_00[0] playsound("switch_auto_lights_on"); + foreach(var_02 in var_00) + { + var_02 setlightintensity(1); + if(isdefined(var_02.var_1D68)) + { + foreach(var_0B in var_02.var_1D68) + { + var_0B setmodel("com_two_light_fixture_on"); + } + } + } + } + + thread motion_light_timeout(var_00,10); + } + + wait 0.05; + } + } +} + +//Function Number: 38 +motion_light_timeout(param_00,param_01) +{ + self notify("motion_light_timeout"); + self endon("motion_light_timeout"); + wait param_01; + foreach(var_03 in param_00) + { + var_03 setlightintensity(0); + if(isdefined(var_03.var_1D68)) + { + foreach(var_05 in var_03.var_1D68) + { + var_05 setmodel("com_two_light_fixture_off"); + } + } + } + + param_00[0] playsound("switch_auto_lights_off"); + self.var_1D67 = 0; +} + +//Function Number: 39 +outdoor_motion_dlight() +{ + if(!isdefined(level.var_1D6D)) + { + level.var_1D6D = loadfx("misc/outdoor_motion_light"); + } + + level endon("game_ended"); + self.var_1D66 = 1; + self.var_1D67 = 0; + var_00 = getent(self.target,"targetname"); + var_01 = getentarray(var_00.target,"targetname"); + precachemodel("com_two_light_fixture_off"); + precachemodel("com_two_light_fixture_on"); + for(;;) + { + self waittill("trigger_enter"); + while(anythingtouchingtrigger(self)) + { + var_02 = 0; + foreach(var_04 in self.touchlist) + { + if(isdefined(var_04.var_1D6A) && var_04.var_1D6A > 5) + { + var_02 = 1; + } + } + + if(var_02) + { + if(!self.var_1D67) + { + self.var_1D67 = 1; + var_00 playsound("switch_auto_lights_on"); + var_00 setmodel("com_two_light_fixture_on"); + foreach(var_07 in var_01) + { + var_07.var_1D6E = spawn("script_model",var_07.origin); + var_07.var_1D6E setmodel("tag_origin"); + playfxontag(level.var_1D6D,var_07.var_1D6E,"tag_origin"); + } + } + + thread outdoor_motion_dlight_timeout(var_00,var_01,10); + } + + wait 0.05; + } + } +} + +//Function Number: 40 +outdoor_motion_dlight_timeout(param_00,param_01,param_02) +{ + self notify("motion_light_timeout"); + self endon("motion_light_timeout"); + wait param_02; + foreach(var_04 in param_01) + { + var_04.var_1D6E delete(); + } + + param_00 playsound("switch_auto_lights_off"); + param_00 setmodel("com_two_light_fixture_off"); + self.var_1D67 = 0; +} + +//Function Number: 41 +dog_bark() +{ + level endon("game_ended"); + self.var_1D66 = 1; + var_00 = getent(self.target,"targetname"); + for(;;) + { + self waittill("trigger_enter",var_01); + while(anythingtouchingtrigger(self)) + { + var_02 = 0; + foreach(var_04 in self.touchlist) + { + if(isdefined(var_04.var_1D6A) && var_04.var_1D6A > var_02) + { + var_02 = var_04.var_1D6A; + } + } + + if(var_02 > 6) + { + var_00 playsound("dyn_anml_dog_bark"); + wait randomfloatrange(16 / var_02,16 / var_02 + randomfloat(1)); + continue; + } + + wait 0.05; + } + } +} + +//Function Number: 42 +trigger_door() +{ + var_00 = getent(self.target,"targetname"); + self.var_1D72 = var_00; + self.var_1D73 = getvectorrightangle(vectornormalize(self getorigin() - var_00 getorigin())); + var_00.var_1D74 = var_00.angles[1]; + var_01 = 1; + for(;;) + { + self waittill("trigger_enter",var_02); + var_00 thread dooropen(var_01,getdoorside(var_02)); + if(anythingtouchingtrigger(self)) + { + self waittill("trigger_empty"); + } + + wait 3; + if(anythingtouchingtrigger(self)) + { + self waittill("trigger_empty"); + } + + var_00 thread doorclose(var_01); + } +} + +//Function Number: 43 +dooropen(param_00,param_01) +{ + if(param_01) + { + self rotateto((0,self.var_1D74 + 90,1),param_00,0.1,0.75); + } + else + { + self rotateto((0,self.var_1D74 - 90,1),param_00,0.1,0.75); + } + + self playsound("door_generic_house_open"); + wait param_00 + 0.05; +} + +//Function Number: 44 +doorclose(param_00) +{ + self rotateto((0,self.var_1D74,1),param_00); + self playsound("door_generic_house_close"); + wait param_00 + 0.05; +} + +//Function Number: 45 +getdoorside(param_00) +{ + return vectordot(self.var_1D73,vectornormalize(param_00.origin - self.var_1D72 getorigin())) > 0; +} + +//Function Number: 46 +getvectorrightangle(param_00) +{ + return (param_00[1],0 - param_00[0],param_00[2]); +} + +//Function Number: 47 +use_toggle() +{ + if(self.classname != "trigger_use_touch") + { + return; + } + + var_00 = getentarray(self.target,"targetname"); + self.var_1D67 = 1; + foreach(var_02 in var_00) + { + var_02 setlightintensity(1.5 * self.var_1D67); + } + + for(;;) + { + self waittill("trigger"); + self.var_1D67 = !self.var_1D67; + if(self.var_1D67) + { + foreach(var_02 in var_00) + { + var_02 setlightintensity(1.5); + } + + self playsound("switch_auto_lights_on"); + continue; + } + + foreach(var_02 in var_00) + { + var_02 setlightintensity(0); + } + + self playsound("switch_auto_lights_off"); + } +} + +//Function Number: 48 +bird_startle() +{ +} + +//Function Number: 49 +photo_copier_init(param_00) +{ + self.var_1D7B = get_photo_copier(param_00); + var_01 = getent(self.var_1D7B.target,"targetname"); + var_02 = getent(var_01.target,"targetname"); + var_02.intensity = var_02 getlightintensity(); + var_02 setlightintensity(0); + param_00.var_1D7C = var_01; + param_00.var_1D7D = var_01.origin; + param_00.var_1D7E = var_02; + var_03 = self.var_1D7B.angles + (0,90,0); + var_04 = anglestoforward(var_03); + param_00.var_1D7F = param_00.var_1D7D + var_04 * 30; +} + +//Function Number: 50 +get_photo_copier(param_00) +{ + if(!isdefined(param_00.target)) + { + var_01 = getentarray("destructible_toy","targetname"); + var_02 = var_01[0]; + foreach(var_04 in var_01) + { + if(isdefined(var_04.destructible_type) && var_04.destructible_type == "toy_copier") + { + if(distance(param_00.origin,var_02.origin) > distance(param_00.origin,var_04.origin)) + { + var_02 = var_04; + } + } + } + } + else + { + var_02 = getent(var_02.target,"targetname"); + var_02 setcandamage(1); + } + + return var_02; +} + +//Function Number: 51 +waittill_copier_copies() +{ + self.var_1D7B endon("FX_State_Change0"); + self.var_1D7B endon("death"); + self waittill("trigger_enter"); +} + +//Function Number: 52 +photo_copier() +{ + level endon("game_ended"); + photo_copier_init(self); + self.var_1D7B endon("FX_State_Change0"); + thread photo_copier_stop(); + for(;;) + { + waittill_copier_copies(); + self playsound("mach_copier_run"); + if(isdefined(self.var_1D7C)) + { + reset_copier(self); + thread photo_copier_copy_bar_goes(); + thread photo_copier_light_on(); + } + + wait 3; + } +} + +//Function Number: 53 +photo_copier_no_light() +{ + level endon("game_ended"); + self endon("death"); + if(common_scripts\utility::get_template_level() == "hamburg") + { + return; + } + + self.var_1D7B = get_photo_copier(self); + self.var_1D7B endon("FX_State_Change0"); + for(;;) + { + waittill_copier_copies(); + self playsound("mach_copier_run"); + wait 3; + } +} + +//Function Number: 54 +reset_copier(param_00) +{ + param_00.var_1D7C moveto(param_00.var_1D7D,0.2); + param_00.var_1D7E setlightintensity(0); +} + +//Function Number: 55 +photo_copier_copy_bar_goes() +{ + self.var_1D7B notify("bar_goes"); + self.var_1D7B endon("bar_goes"); + self.var_1D7B endon("FX_State_Change0"); + self.var_1D7B endon("death"); + var_00 = self.var_1D7C; + wait 2; + var_00 moveto(self.var_1D7F,1.6); + wait 1.8; + var_00 moveto(self.var_1D7D,1.6); + wait 1.6; + var_01 = self.var_1D7E; + var_02 = 0.2; + var_03 = var_02 / 0.05; + for(var_04 = 0;var_04 < var_03;var_04++) + { + var_05 = var_04 * 0.05; + var_05 = var_05 / var_02; + var_05 = 1 - var_05 * var_01.intensity; + if(var_05 > 0) + { + var_01 setlightintensity(var_05); + } + + wait 0.05; + } +} + +//Function Number: 56 +photo_copier_light_on() +{ + self.var_1D7B notify("light_on"); + self.var_1D7B endon("light_on"); + self.var_1D7B endon("FX_State_Change0"); + self.var_1D7B endon("death"); + var_00 = self.var_1D7E; + var_01 = 0.2; + var_02 = var_01 / 0.05; + for(var_03 = 0;var_03 < var_02;var_03++) + { + var_04 = var_03 * 0.05; + var_04 = var_04 / var_01; + var_00 setlightintensity(var_04 * var_00.intensity); + wait 0.05; + } + + photo_light_flicker(var_00); +} + +//Function Number: 57 +photo_copier_stop() +{ + self.var_1D7B waittill("FX_State_Change0"); + self.var_1D7B endon("death"); + reset_copier(self); +} + +//Function Number: 58 +photo_light_flicker(param_00) +{ + param_00 setlightintensity(1); + wait 0.05; + param_00 setlightintensity(0); + wait 0.1; + param_00 setlightintensity(1); + wait 0.05; + param_00 setlightintensity(0); + wait 0.1; + param_00 setlightintensity(1); +} + +//Function Number: 59 +fan_blade_rotate(param_00) +{ + var_01 = 0; + var_02 = 20000; + var_03 = 1; + if(isdefined(self.speed)) + { + var_03 = self.speed; + } + + if(param_00 == "slow") + { + if(isdefined(self.script_noteworthy) && self.script_noteworthy == "lockedspeed") + { + var_01 = 180; + } + else + { + var_01 = randomfloatrange(100 * var_03,360 * var_03); + } + } + else if(param_00 == "fast") + { + var_01 = randomfloatrange(720 * var_03,1000 * var_03); + } + else if(param_00 == "veryslow") + { + var_01 = randomfloatrange(1 * var_03,2 * var_03); + } + else + { + } + + if(isdefined(self.script_noteworthy) && self.script_noteworthy == "lockedspeed") + { + wait 0; + } + else + { + wait randomfloatrange(0,1); + } + + var_04 = self.angles; + var_05 = anglestoright(self.angles) * 100; + var_05 = vectornormalize(var_05); + for(;;) + { + var_06 = abs(vectordot(var_05,(1,0,0))); + var_07 = abs(vectordot(var_05,(0,1,0))); + var_08 = abs(vectordot(var_05,(0,0,1))); + if(var_06 > 0.9) + { + self rotatevelocity((var_01,0,0),var_02); + } + else if(var_07 > 0.9) + { + self rotatevelocity((var_01,0,0),var_02); + } + else if(var_08 > 0.9) + { + self rotatevelocity((0,var_01,0),var_02); + } + else + { + self rotatevelocity((0,var_01,0),var_02); + } + + wait var_02; + } +} + +//Function Number: 60 +triggertouchthink(param_00,param_01) +{ + level endon("game_ended"); + self.entnum = self getentitynumber(); + for(;;) + { + self waittill("trigger",var_02); + if(!isplayer(var_02) && !isdefined(var_02.finished_spawning)) + { + continue; + } + + if(!isalive(var_02)) + { + continue; + } + + if(!isdefined(var_02.touchtriggers[self.entnum])) + { + var_02 thread playertouchtriggerthink(self,param_00,param_01); + } + } +} + +//Function Number: 61 +playertouchtriggerthink(param_00,param_01,param_02) +{ + if(!isplayer(self)) + { + self endon("death"); + } + + if(!common_scripts\utility::issp()) + { + var_03 = self.guid; + } + else + { + var_03 = "player" + gettime(); + } + + param_00.touchlist[var_03] = self; + if(isdefined(param_00.var_1D66)) + { + self.var_1D8E++; + } + + param_00 notify("trigger_enter",self); + self notify("trigger_enter",param_00); + if(isdefined(param_01)) + { + self thread [[ param_01 ]](param_00); + } + + self.touchtriggers[param_00.entnum] = param_00; + while(isalive(self) && self istouching(param_00) && common_scripts\utility::issp() || !level.gameended) + { + wait 0.05; + } + + if(isdefined(self)) + { + self.touchtriggers[param_00.entnum] = undefined; + if(isdefined(param_00.var_1D66)) + { + self.var_1D8E--; + } + + self notify("trigger_leave",param_00); + if(isdefined(param_02)) + { + self thread [[ param_02 ]](param_00); + } + } + + if(!common_scripts\utility::issp() && level.gameended) + { + return; + } + + param_00.touchlist[var_03] = undefined; + param_00 notify("trigger_leave",self); + if(!anythingtouchingtrigger(param_00)) + { + param_00 notify("trigger_empty"); + } +} + +//Function Number: 62 +movementtracker() +{ + if(isdefined(level.var_1D91)) + { + return; + } + + self endon("disconnect"); + if(!isplayer(self)) + { + self endon("death"); + } + + self.var_1D8E = 0; + self.var_1D6A = 0; + for(;;) + { + self waittill("trigger_enter"); + var_00 = self.origin; + while(self.var_1D8E) + { + self.var_1D6A = distance(var_00,self.origin); + var_00 = self.origin; + wait 0.05; + } + + self.var_1D6A = 0; + } +} + +//Function Number: 63 +anythingtouchingtrigger(param_00) +{ + return param_00.touchlist.size; +} + +//Function Number: 64 +playertouchingtrigger(param_00,param_01) +{ + return isdefined(param_00.touchtriggers[param_01.entnum]); +} \ No newline at end of file diff --git a/MW3/PC/MP/common_scripts/_elevator.gsc b/MW3/PC/MP/common_scripts/_elevator.gsc new file mode 100644 index 0000000..9d0a95d --- /dev/null +++ b/MW3/PC/MP/common_scripts/_elevator.gsc @@ -0,0 +1,1107 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: common_scripts\_elevator.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 55 + * Decompile Time: 926 ms + * Timestamp: 10/27/2023 2:15:32 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + if(getdvar("scr_elevator_disabled") == "1") + { + return; + } + + var_00 = getentarray("elevator_group","targetname"); + if(!isdefined(var_00)) + { + return; + } + + if(!var_00.size) + { + return; + } + + precachestring(&"ELEVATOR_CALL_HINT"); + precachestring(&"ELEVATOR_USE_HINT"); + precachestring(&"ELEVATOR_FLOOR_SELECT_HINT"); + precachemenu("elevator_floor_selector"); + thread elevator_update_global_dvars(); + level.var_1CB8 = []; + level.var_1CB9 = elevator_get_dvar_int("scr_elevator_callbutton_link_v","96"); + level.var_1CBA = elevator_get_dvar_int("scr_elevator_callbutton_link_h","256"); + build_elevators(); + position_elevators(); + elevator_call(); + if(!level.var_1CB8.size) + { + return; + } + + foreach(var_02 in level.var_1CB8) + { + var_02 thread elevator_think(); + var_02 thread elevator_sound_think(); + } + + thread elevator_debug(); +} + +//Function Number: 2 +elevator_update_global_dvars() +{ + for(;;) + { + level.var_1CBC = elevator_get_dvar("scr_elevator_accel","0.2"); + level.var_1CBD = elevator_get_dvar("scr_elevator_decel","0.2"); + level.var_1CBE = elevator_get_dvar_int("scr_elevator_music","1"); + level.var_1CBF = elevator_get_dvar_int("scr_elevator_speed","96"); + level.var_1CC0 = elevator_get_dvar_int("scr_elevator_innerdoorspeed","14"); + level.var_1CC1 = elevator_get_dvar_int("scr_elevator_outterdoorspeed","16"); + level.var_1CC2 = elevator_get_dvar_int("scr_elevator_return","0"); + level.var_1CC3 = elevator_get_dvar_int("scr_elevator_waittime","6"); + level.var_1CC4 = elevator_get_dvar_int("scr_elevator_aggressive_call","0"); + level.elevator_debug = elevator_get_dvar_int("debug_elevator","0"); + if(common_scripts\utility::issp()) + { + level.var_1CC6 = elevator_get_dvar_int("scr_elevator_motion_detection","0"); + } + else + { + level.var_1CC6 = elevator_get_dvar_int("scr_elevator_motion_detection","1"); + } + + wait 1; + } +} + +//Function Number: 3 +elevator_think() +{ + elevator_fsm("[A]"); +} + +//Function Number: 4 +elevator_call() +{ + foreach(var_01 in level.var_1CC9) + { + var_01 thread monitor_callbutton(); + } +} + +//Function Number: 5 +floor_override(param_00) +{ + self endon("elevator_moving"); + self.floor_override = 0; + self.var_1CCB = undefined; + for(;;) + { + param_00 waittill("trigger",var_01); + self.floor_override = 1; + self.var_1CCB = var_01; + break; + } + + self notify("floor_override"); +} + +//Function Number: 6 +elevator_fsm(param_00) +{ + self.var_1CCD = param_00; + var_01 = get_housing_door_trigger(); + var_02 = get_housing_inside_trigger(); + for(;;) + { + if(self.var_1CCD == "[A]") + { + if(level.var_1CC2 && get_curfloor() != get_initfloor()) + { + self.var_1CCE = get_initfloor(); + thread floor_override(var_02); + waittill_or_timeout("floor_override",level.var_1CC3); + if(self.floor_override && isdefined(self.var_1CCB) && isplayer(self.var_1CCB)) + { + get_floor(self.var_1CCB); + } + + self.var_1CCD = "[B]"; + continue; + } + + for(;;) + { + if(self.var_1CCE == get_curfloor()) + { + var_03 = var_02 discrete_waittill("trigger"); + } + else + { + var_03 = "elevator_called"; + } + + if(isstring(var_03) && var_03 == "elevator_called" && self.var_1CCE != get_curfloor()) + { + self.var_1CCD = "[B]"; + break; + } + + if(isdefined(var_03) && isplayer(var_03) && isalive(var_03)) + { + var_04 = var_03 istouching(var_02); + var_05 = isdefined(var_02.var_1CCF) && var_03 istouching(var_02.var_1CCF); + var_06 = var_04 || var_05; + if(var_06) + { + var_07 = var_03; + get_floor(var_07); + if(self.var_1CCE == get_curfloor()) + { + continue; + } + + self.var_1CCD = "[B]"; + break; + } + } + } + } + + if(self.var_1CCD == "[B]") + { + thread elevator_interrupt(var_01); + var_08 = get_curfloor(); + thread close_inner_doors(); + thread close_outer_doors(var_08); + common_scripts\utility::waittill_any("closed_inner_doors","interrupted"); + if(self.var_1CD0) + { + self.var_1CCD = "[C]"; + continue; + } + + self.var_1CCD = "[D]"; + continue; + } + + if(self.var_1CCD == "[C]") + { + var_08 = get_curfloor(); + thread open_inner_doors(); + thread open_outer_doors(var_08); + self waittill("opened_floor_" + var_08 + "_outer_doors"); + if(self.var_1CD0) + { + self.var_1CCD = "[B]"; + continue; + } + + self.var_1CCD = "[A]"; + continue; + } + + if(self.var_1CCD == "[D]") + { + if(self.var_1CCE != get_curfloor()) + { + thread elevator_move(self.var_1CCE); + self waittill("elevator_moved"); + } + + self.var_1CCD = "[C]"; + continue; + } + } +} + +//Function Number: 7 +monitor_callbutton() +{ + for(;;) + { + var_00 = discrete_waittill("trigger"); + var_01 = undefined; + var_02 = []; + foreach(var_05, var_04 in self.var_1CD2) + { + var_01 = var_05; + var_02 = var_04; + } + + var_06 = 0; + foreach(var_08 in var_02) + { + var_09 = var_08 elevator_floor_update(); + if(!level.var_1CC4 && !var_09) + { + if(var_08 get_curfloor() == var_01) + { + var_06 = 1; + var_02 = []; + break; + } + } + } + + foreach(var_08 in var_02) + { + if(var_08.var_1CCD == "[A]") + { + var_08 call_elevator(var_01); + var_06 = 1; + if(!level.var_1CC4) + { + break; + } + } + } + + if(var_06) + { + self playsound("elev_bell_ding"); + } + } +} + +//Function Number: 8 +call_elevator(param_00) +{ + self.var_1CCE = param_00; + var_01 = get_housing_inside_trigger(); + var_01 notify("trigger","elevator_called"); + if(level.var_1CC6) + { + var_01.var_1CCF notify("trigger","elevator_called"); + } +} + +//Function Number: 9 +get_floor(param_00) +{ + var_01 = get_outer_doorsets(); + if(var_01.size == 2) + { + var_02 = get_curfloor(); + self.var_1CCE = !var_02; + return; + } + + var_01 openpopupmenu("elevator_floor_selector"); + var_01 setclientdvar("player_current_floor",get_curfloor()); + for(;;) + { + var_01 waittill("menuresponse",var_03,var_04); + if(var_03 == "elevator_floor_selector") + { + if(var_04 != "none") + { + self.var_1CCE = int(var_04); + } + + break; + } + } +} + +//Function Number: 10 +elevator_interrupt(param_00) +{ + self notify("interrupt_watch"); + level notify("elevator_interior_button_pressed"); + self endon("interrupt_watch"); + self endon("elevator_moving"); + self.var_1CD0 = 0; + wait 0.5; + param_00 waittill("trigger",var_01); + self notify("interrupted"); + self.var_1CD0 = 1; +} + +//Function Number: 11 +elevator_floor_update() +{ + var_00 = get_housing_mainframe(); + var_01 = var_00.origin; + var_02 = 1; + foreach(var_06, var_04 in get_outer_doorsets()) + { + var_05 = self.var_1CD2["floor" + var_06 + "_pos"]; + if(var_01 == var_05) + { + self.var_1CD2["current_floor"] = var_06; + var_02 = 0; + } + } + + return var_02; +} + +//Function Number: 12 +elevator_sound_think() +{ + var_00 = get_housing_musak_model(); + if(level.var_1CBE && isdefined(var_00)) + { + var_00 playloopsound("elev_musak_loop"); + } + + thread listen_for("closing_inner_doors"); + thread listen_for("opening_inner_doors"); + thread listen_for("closed_inner_doors"); + thread listen_for("opened_inner_doors"); + foreach(var_03, var_02 in get_outer_doorsets()) + { + thread listen_for("closing_floor_" + var_03 + "_outer_doors"); + thread listen_for("opening_floor_" + var_03 + "_outer_doors"); + thread listen_for("closed_floor_" + var_03 + "_outer_doors"); + thread listen_for("opened_floor_" + var_03 + "_outer_doors"); + } + + thread listen_for("interrupted"); + thread listen_for("elevator_moving"); + thread listen_for("elevator_moved"); +} + +//Function Number: 13 +listen_for(param_00) +{ + for(;;) + { + self waittill(param_00); + var_01 = get_housing_mainframe(); + if(issubstr(param_00,"closing_")) + { + var_01 playsound("elev_door_close"); + } + + if(issubstr(param_00,"opening_")) + { + var_01 playsound("elev_door_open"); + } + + if(param_00 == "elevator_moving") + { + var_01 playsound("elev_run_start"); + var_01 playloopsound("elev_run_loop"); + } + + if(param_00 == "interrupted") + { + var_01 playsound("elev_door_interupt"); + } + + if(param_00 == "elevator_moved") + { + var_01 stoploopsound("elev_run_loop"); + var_01 playsound("elev_run_end"); + var_01 playsound("elev_bell_ding"); + } + } +} + +//Function Number: 14 +position_elevators() +{ + foreach(var_01 in level.var_1CB8) + { + var_01.var_1CCE = var_01 get_curfloor(); + foreach(var_04, var_03 in var_01 get_outer_doorsets()) + { + if(var_01 get_curfloor() != var_04) + { + var_01 thread close_outer_doors(var_04); + } + } + } +} + +//Function Number: 15 +elevator_move(param_00) +{ + self notify("elevator_moving"); + self endon("elevator_moving"); + var_01 = get_housing_mainframe(); + var_02 = self.var_1CD2["floor" + param_00 + "_pos"] - var_01.origin; + var_03 = level.var_1CBF; + var_04 = abs(distance(self.var_1CD2["floor" + param_00 + "_pos"],var_01.origin)); + var_05 = var_04 / var_03; + var_01 moveto(var_01.origin + var_02,var_05,var_05 * level.var_1CBC,var_05 * level.var_1CBD); + foreach(var_07 in get_housing_children()) + { + var_08 = var_07.origin + var_02; + if(!issubstr(var_07.classname,"trigger_")) + { + var_07 moveto(var_08,var_05,var_05 * level.var_1CBC,var_05 * level.var_1CBD); + continue; + } + + var_07.origin = var_08; + } + + waittill_finish_moving(var_01,self.var_1CD2["floor" + param_00 + "_pos"]); + self notify("elevator_moved"); +} + +//Function Number: 16 +close_inner_doors() +{ + self notify("closing_inner_doors"); + self endon("closing_inner_doors"); + self endon("opening_inner_doors"); + var_00 = get_housing_leftdoor(); + var_01 = get_housing_rightdoor(); + var_02 = get_housing_mainframe(); + var_03 = get_housing_closedpos(); + var_04 = (var_03[0],var_03[1],var_02.origin[2]); + var_05 = level.var_1CC0; + var_06 = abs(distance(var_00.origin,var_04)); + var_07 = var_06 / var_05; + var_00 moveto(var_04,var_07,var_07 * 0.1,var_07 * 0.25); + var_01 moveto(var_04,var_07,var_07 * 0.1,var_07 * 0.25); + waittill_finish_moving(var_00,var_04,var_01,var_04); + self notify("closed_inner_doors"); +} + +//Function Number: 17 +open_inner_doors() +{ + self notify("opening_inner_doors"); + self endon("opening_inner_doors"); + var_00 = get_housing_leftdoor(); + var_01 = get_housing_rightdoor(); + var_02 = get_housing_mainframe(); + var_03 = get_housing_leftdoor_opened_pos(); + var_04 = get_housing_rightdoor_opened_pos(); + var_05 = (var_03[0],var_03[1],var_02.origin[2]); + var_06 = (var_04[0],var_04[1],var_02.origin[2]); + var_07 = level.var_1CC0; + var_08 = abs(distance(var_05,var_06) * 0.5); + var_09 = var_08 / var_07 * 0.5; + var_00 moveto(var_05,var_09,var_09 * 0.1,var_09 * 0.25); + var_01 moveto(var_06,var_09,var_09 * 0.1,var_09 * 0.25); + waittill_finish_moving(var_00,var_05,var_01,var_06); + self notify("opened_inner_doors"); +} + +//Function Number: 18 +close_outer_doors(param_00) +{ + self notify("closing_floor_" + param_00 + "_outer_doors"); + self endon("closing_floor_" + param_00 + "_outer_doors"); + self endon("opening_floor_" + param_00 + "_outer_doors"); + var_01 = get_outer_leftdoor(param_00); + var_02 = get_outer_rightdoor(param_00); + var_03 = get_outer_leftdoor_openedpos(param_00); + var_04 = get_outer_closedpos(param_00); + var_05 = level.var_1CC1; + var_06 = abs(distance(var_03,var_04)); + var_07 = var_06 / var_05; + var_01 moveto(var_04,var_07,var_07 * 0.1,var_07 * 0.25); + var_02 moveto(var_04,var_07,var_07 * 0.1,var_07 * 0.25); + waittill_finish_moving(var_01,var_04,var_02,var_04); + self notify("closed_floor_" + param_00 + "_outer_doors"); +} + +//Function Number: 19 +open_outer_doors(param_00) +{ + level notify("elevator_doors_opening"); + self notify("opening_floor_" + param_00 + "_outer_doors"); + self endon("opening_floor_" + param_00 + "_outer_doors"); + var_01 = get_outer_leftdoor(param_00); + var_02 = get_outer_rightdoor(param_00); + var_03 = get_outer_leftdoor_openedpos(param_00); + var_04 = get_outer_rightdoor_openedpos(param_00); + var_05 = get_outer_closedpos(param_00); + var_06 = level.var_1CC1; + var_07 = abs(distance(var_03,var_05)); + var_08 = var_07 / var_06 * 0.5; + var_01 moveto(var_03,var_08,var_08 * 0.1,var_08 * 0.25); + var_02 moveto(var_04,var_08,var_08 * 0.1,var_08 * 0.25); + waittill_finish_moving(var_01,var_03,var_02,var_04); + self notify("opened_floor_" + param_00 + "_outer_doors"); +} + +//Function Number: 20 +build_elevators() +{ + var_00 = getentarray("elevator_group","targetname"); + var_01 = getentarray("elevator_housing","targetname"); + var_02 = getentarray("elevator_doorset","targetname"); + foreach(var_04 in var_00) + { + var_05 = getent(var_04.target,"targetname"); + var_06 = []; + var_06[0] = min(var_04.origin[0],var_05.origin[0]); + var_06[1] = max(var_04.origin[0],var_05.origin[0]); + var_06[2] = min(var_04.origin[1],var_05.origin[1]); + var_06[3] = max(var_04.origin[1],var_05.origin[1]); + var_07 = spawnstruct(); + var_07.var_1CD2["id"] = level.var_1CB8.size; + var_07.var_1CD2["housing"] = []; + var_07.var_1CD2["housing"]["mainframe"] = []; + foreach(var_09 in var_01) + { + if(var_09 isinbound(var_06)) + { + var_07.var_1CD2["housing"]["mainframe"][var_07.var_1CD2["housing"]["mainframe"].size] = var_09; + if(var_09.classname == "script_model") + { + continue; + } + + if(var_09.code_classname == "light") + { + continue; + } + + var_0A = getent(var_09.target,"targetname"); + var_07.var_1CD2["housing"]["left_door"] = var_0A; + var_07.var_1CD2["housing"]["left_door_opened_pos"] = var_0A.origin; + var_0B = getent(var_0A.target,"targetname"); + var_07.var_1CD2["housing"]["right_door"] = var_0B; + var_07.var_1CD2["housing"]["right_door_opened_pos"] = var_0B.origin; + var_0C = var_0A.origin - var_0B.origin * (0.5,0.5,0.5) + var_0B.origin; + var_07.var_1CD2["housing"]["door_closed_pos"] = var_0C; + var_0D = getent(var_0B.target,"targetname"); + var_07.var_1CD2["housing"]["door_trigger"] = var_0D; + var_0E = getent(var_0D.target,"targetname"); + var_07.var_1CD2["housing"]["inside_trigger"] = var_0E; + var_0E make_discrete_trigger(); + var_0E.var_1CCF = spawn("trigger_radius",var_09.origin,0,64,128); + } + } + + var_07.var_1CD2["outer_doorset"] = []; + foreach(var_11 in var_02) + { + if(var_11 isinbound(var_06)) + { + var_12 = isdefined(var_11.script_noteworthy) && var_11.script_noteworthy == "closed_for_lighting"; + var_13 = var_07.var_1CD2["outer_doorset"].size; + var_07.var_1CD2["outer_doorset"][var_13] = []; + var_07.var_1CD2["outer_doorset"][var_13]["door_closed_pos"] = var_11.origin; + var_14 = getent(var_11.target,"targetname"); + var_07.var_1CD2["outer_doorset"][var_13]["left_door"] = var_14; + var_07.var_1CD2["outer_doorset"][var_13]["left_door_opened_pos"] = var_14.origin; + var_15 = getent(var_14.target,"targetname"); + var_07.var_1CD2["outer_doorset"][var_13]["right_door"] = var_15; + var_07.var_1CD2["outer_doorset"][var_13]["right_door_opened_pos"] = var_15.origin; + if(var_12) + { + var_16 = var_11.origin - var_14.origin; + var_11.origin = var_14.origin; + var_14.origin = var_14.origin + var_16; + var_15.origin = var_15.origin - var_16; + var_07.var_1CD2["outer_doorset"][var_13]["door_closed_pos"] = var_11.origin; + var_07.var_1CD2["outer_doorset"][var_13]["left_door_opened_pos"] = var_14.origin; + var_07.var_1CD2["outer_doorset"][var_13]["right_door_opened_pos"] = var_15.origin; + } + } + } + + for(var_18 = 0;var_18 < var_07.var_1CD2["outer_doorset"].size - 1;var_18++) + { + for(var_19 = 0;var_19 < var_07.var_1CD2["outer_doorset"].size - 1 - var_18;var_19++) + { + if(var_07.var_1CD2["outer_doorset"][var_19 + 1]["door_closed_pos"][2] < var_07.var_1CD2["outer_doorset"][var_19]["door_closed_pos"][2]) + { + var_1A = var_07.var_1CD2["outer_doorset"][var_19]["left_door"]; + var_1B = var_07.var_1CD2["outer_doorset"][var_19]["left_door_opened_pos"]; + var_1C = var_07.var_1CD2["outer_doorset"][var_19]["right_door"]; + var_1D = var_07.var_1CD2["outer_doorset"][var_19]["right_door_opened_pos"]; + var_1E = var_07.var_1CD2["outer_doorset"][var_19]["door_closed_pos"]; + var_07.var_1CD2["outer_doorset"][var_19]["left_door"] = var_07.var_1CD2["outer_doorset"][var_19 + 1]["left_door"]; + var_07.var_1CD2["outer_doorset"][var_19]["left_door_opened_pos"] = var_07.var_1CD2["outer_doorset"][var_19 + 1]["left_door_opened_pos"]; + var_07.var_1CD2["outer_doorset"][var_19]["right_door"] = var_07.var_1CD2["outer_doorset"][var_19 + 1]["right_door"]; + var_07.var_1CD2["outer_doorset"][var_19]["right_door_opened_pos"] = var_07.var_1CD2["outer_doorset"][var_19 + 1]["right_door_opened_pos"]; + var_07.var_1CD2["outer_doorset"][var_19]["door_closed_pos"] = var_07.var_1CD2["outer_doorset"][var_19 + 1]["door_closed_pos"]; + var_07.var_1CD2["outer_doorset"][var_19 + 1]["left_door"] = var_1A; + var_07.var_1CD2["outer_doorset"][var_19 + 1]["left_door_opened_pos"] = var_1B; + var_07.var_1CD2["outer_doorset"][var_19 + 1]["right_door"] = var_1C; + var_07.var_1CD2["outer_doorset"][var_19 + 1]["right_door_opened_pos"] = var_1D; + var_07.var_1CD2["outer_doorset"][var_19 + 1]["door_closed_pos"] = var_1E; + } + } + } + + var_1F = []; + foreach(var_18, var_21 in var_07.var_1CD2["outer_doorset"]) + { + var_22 = var_07 get_housing_mainframe(); + var_1F = (var_22.origin[0],var_22.origin[1],var_21["door_closed_pos"][2]); + var_07.var_1CD2["floor" + var_18 + "_pos"] = var_1F; + if(var_22.origin == var_1F) + { + var_07.var_1CD2["initial_floor"] = var_18; + var_07.var_1CD2["current_floor"] = var_18; + } + } + + level.var_1CB8[level.var_1CB8.size] = var_07; + var_04 delete(); + var_05 delete(); + } + + foreach(var_11 in var_02) + { + var_11 delete(); + } + + build_call_buttons(); + if(!level.var_1CC6) + { + setup_hints(); + } + + foreach(var_27 in level.var_1CB8) + { + var_28 = var_27 get_housing_primarylight(); + if(isdefined(var_28) && var_28.size) + { + foreach(var_2A in var_28) + { + var_2A setlightintensity(0.75); + } + } + } +} + +//Function Number: 21 +build_call_buttons() +{ + level.var_1CC9 = getentarray("elevator_call","targetname"); + foreach(var_01 in level.var_1CC9) + { + var_01.var_1CD2 = []; + var_02 = (0,0,var_01.origin[2]); + var_03 = (var_01.origin[0],var_01.origin[1],0); + var_04 = []; + foreach(var_06 in level.var_1CB8) + { + foreach(var_0B, var_08 in var_06 get_outer_doorsets()) + { + var_09 = (0,0,var_06.var_1CD2["floor" + var_0B + "_pos"][2]); + var_0A = (var_06.var_1CD2["floor" + var_0B + "_pos"][0],var_06.var_1CD2["floor" + var_0B + "_pos"][1],0); + if(abs(distance(var_02,var_09)) <= level.var_1CB9) + { + if(abs(distance(var_03,var_0A)) <= level.var_1CBA) + { + var_04[var_04.size] = var_06; + var_01.var_1CD2[var_0B] = var_04; + } + } + } + } + + var_01 make_discrete_trigger(); + var_01.var_1CCF = spawn("trigger_radius",var_01.origin + (0,0,-32),0,32,64); + } +} + +//Function Number: 22 +setup_hints() +{ + foreach(var_01 in level.var_1CB8) + { + var_02 = var_01 get_housing_inside_trigger(); + var_03 = var_01 get_outer_doorsets(); + var_04 = var_03.size; + var_02 setcursorhint("HINT_NOICON"); + if(var_04 > 2) + { + var_02 sethintstring(&"ELEVATOR_FLOOR_SELECT_HINT"); + continue; + } + + var_02 sethintstring(&"ELEVATOR_USE_HINT"); + } + + foreach(var_07 in level.var_1CC9) + { + var_07 setcursorhint("HINT_NOICON"); + var_07 sethintstring(&"ELEVATOR_CALL_HINT"); + } +} + +//Function Number: 23 +make_discrete_trigger() +{ + self.enabled = 1; + disable_trigger(); +} + +//Function Number: 24 +discrete_waittill(param_00) +{ + enable_trigger(); + if(level.var_1CC6) + { + self.var_1CCF waittill(param_00,var_01); + } + else + { + self waittill(var_01,var_01); + } + + disable_trigger(); + return var_01; +} + +//Function Number: 25 +enable_trigger() +{ + if(!self.enabled) + { + self.enabled = 1; + self.origin = self.origin + (0,0,10000); + if(isdefined(self.var_1CCF)) + { + self.var_1CCF.origin = self.var_1CCF.origin + (0,0,10000); + } + } +} + +//Function Number: 26 +disable_trigger() +{ + self notify("disable_trigger"); + if(self.enabled) + { + thread disable_trigger_helper(); + } +} + +//Function Number: 27 +disable_trigger_helper() +{ + self endon("disable_trigger"); + self.enabled = 0; + wait 1.5; + self.origin = self.origin + (0,0,-10000); + if(isdefined(self.var_1CCF)) + { + self.var_1CCF.origin = self.var_1CCF.origin + (0,0,-10000); + } +} + +//Function Number: 28 +get_outer_doorset(param_00) +{ + return self.var_1CD2["outer_doorset"][param_00]; +} + +//Function Number: 29 +get_outer_doorsets() +{ + return self.var_1CD2["outer_doorset"]; +} + +//Function Number: 30 +get_outer_closedpos(param_00) +{ + return self.var_1CD2["outer_doorset"][param_00]["door_closed_pos"]; +} + +//Function Number: 31 +get_outer_leftdoor(param_00) +{ + return self.var_1CD2["outer_doorset"][param_00]["left_door"]; +} + +//Function Number: 32 +get_outer_rightdoor(param_00) +{ + return self.var_1CD2["outer_doorset"][param_00]["right_door"]; +} + +//Function Number: 33 +get_outer_leftdoor_openedpos(param_00) +{ + return self.var_1CD2["outer_doorset"][param_00]["left_door_opened_pos"]; +} + +//Function Number: 34 +get_outer_rightdoor_openedpos(param_00) +{ + return self.var_1CD2["outer_doorset"][param_00]["right_door_opened_pos"]; +} + +//Function Number: 35 +get_housing_children() +{ + var_00 = []; + var_01 = get_housing_door_trigger(); + var_02 = get_housing_inside_trigger(); + var_03 = var_02.var_1CCF; + var_04 = get_housing_leftdoor(); + var_05 = get_housing_rightdoor(); + var_00[var_00.size] = var_01; + var_00[var_00.size] = var_02; + var_00[var_00.size] = var_04; + var_00[var_00.size] = var_05; + if(isdefined(var_03)) + { + var_00[var_00.size] = var_03; + } + + var_06 = get_housing_models(); + foreach(var_08 in var_06) + { + var_00[var_00.size] = var_08; + } + + var_0A = get_housing_primarylight(); + foreach(var_0C in var_0A) + { + var_00[var_00.size] = var_0C; + } + + return var_00; +} + +//Function Number: 36 +get_housing_mainframe() +{ + var_00 = self.var_1CD2["housing"]["mainframe"]; + var_01 = undefined; + foreach(var_03 in var_00) + { + if(var_03.classname != "script_model" && var_03.code_classname != "light") + { + var_01 = var_03; + } + } + + return var_01; +} + +//Function Number: 37 +get_housing_models() +{ + var_00 = self.var_1CD2["housing"]["mainframe"]; + var_01 = []; + foreach(var_03 in var_00) + { + if(var_03.classname == "script_model") + { + var_01[var_01.size] = var_03; + } + } + + return var_01; +} + +//Function Number: 38 +get_housing_primarylight() +{ + var_00 = self.var_1CD2["housing"]["mainframe"]; + var_01 = []; + foreach(var_03 in var_00) + { + if(var_03.code_classname == "light") + { + var_01[var_01.size] = var_03; + } + } + + return var_01; +} + +//Function Number: 39 +get_housing_musak_model() +{ + var_00 = get_housing_models(); + var_01 = undefined; + foreach(var_03 in var_00) + { + if(isdefined(var_03.script_noteworthy) && var_03.script_noteworthy == "play_musak") + { + var_01 = var_03; + } + } + + return var_01; +} + +//Function Number: 40 +get_housing_door_trigger() +{ + return self.var_1CD2["housing"]["door_trigger"]; +} + +//Function Number: 41 +get_housing_inside_trigger() +{ + return self.var_1CD2["housing"]["inside_trigger"]; +} + +//Function Number: 42 +get_housing_closedpos() +{ + return self.var_1CD2["housing"]["door_closed_pos"]; +} + +//Function Number: 43 +get_housing_leftdoor() +{ + return self.var_1CD2["housing"]["left_door"]; +} + +//Function Number: 44 +get_housing_rightdoor() +{ + return self.var_1CD2["housing"]["right_door"]; +} + +//Function Number: 45 +get_housing_leftdoor_opened_pos() +{ + return self.var_1CD2["housing"]["left_door_opened_pos"]; +} + +//Function Number: 46 +get_housing_rightdoor_opened_pos() +{ + return self.var_1CD2["housing"]["right_door_opened_pos"]; +} + +//Function Number: 47 +get_curfloor() +{ + var_00 = elevator_floor_update(); + return self.var_1CD2["current_floor"]; +} + +//Function Number: 48 +get_initfloor() +{ + return self.var_1CD2["initial_floor"]; +} + +//Function Number: 49 +waittill_finish_moving(param_00,param_01,param_02,param_03) +{ + if(!isdefined(param_02) && !isdefined(param_03)) + { + param_02 = param_00; + param_03 = param_01; + } + + for(;;) + { + var_04 = param_00.origin; + var_05 = param_02.origin; + if(var_04 == param_01 && var_05 == param_03) + { + break; + } + + wait 0.05; + } +} + +//Function Number: 50 +isinbound(param_00) +{ + if(level.script == "plaza" || level.script == "highrise_test") + { + return isinboundingspere(param_00); + } + + var_01 = self.origin[0]; + var_02 = self.origin[1]; + var_03 = param_00[0]; + var_04 = param_00[1]; + var_05 = param_00[2]; + var_06 = param_00[3]; + return var_01 >= var_03 && var_01 <= var_04 && var_02 >= var_05 && var_02 <= var_06; +} + +//Function Number: 51 +isinboundingspere(param_00) +{ + var_01 = self.origin[0]; + var_02 = self.origin[1]; + var_03 = param_00[0]; + var_04 = param_00[1]; + var_05 = param_00[2]; + var_06 = param_00[3]; + var_07 = var_03 + var_04 / 2; + var_08 = var_05 + var_06 / 2; + var_09 = abs(distance((var_03,var_05,0),(var_07,var_08,0))); + return abs(distance((var_01,var_02,0),(var_07,var_08,0))) < var_09; +} + +//Function Number: 52 +waittill_or_timeout(param_00,param_01) +{ + self endon(param_00); + wait param_01; +} + +//Function Number: 53 +elevator_get_dvar_int(param_00,param_01) +{ + return int(elevator_get_dvar(param_00,param_01)); +} + +//Function Number: 54 +elevator_get_dvar(param_00,param_01) +{ + if(getdvar(param_00) != "") + { + return getdvarfloat(param_00); + } + + setdvar(param_00,param_01); + return param_01; +} + +//Function Number: 55 +elevator_debug() +{ + if(!level.elevator_debug) + { + return; + } + + for(;;) + { + if(level.elevator_debug != 2) + { + continue; + } + + foreach(var_01 in level.var_1CB8) + { + var_02 = var_01 get_housing_mainframe(); + var_03 = var_01 get_housing_musak_model(); + foreach(var_05 in var_01.var_1CD2["outer_doorset"]) + { + } + } + + foreach(var_09 in level.var_1CC9) + { + foreach(var_05 in var_09.var_1CD2) + { + var_0B = 0; + foreach(var_0D in var_05) + { + var_0B++; + var_0E = var_09.origin + (0,0,var_0B * -4); + } + } + } + + wait 0.05; + } +} \ No newline at end of file diff --git a/MW3/PC/MP/common_scripts/_fx.gsc b/MW3/PC/MP/common_scripts/_fx.gsc new file mode 100644 index 0000000..5f97307 --- /dev/null +++ b/MW3/PC/MP/common_scripts/_fx.gsc @@ -0,0 +1,595 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: common_scripts\_fx.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 28 + * Decompile Time: 449 ms + * Timestamp: 10/27/2023 2:15:48 AM +*******************************************************************/ + +//Function Number: 1 +initfx() +{ + if(!isdefined(level.func)) + { + level.func = []; + } + + if(!isdefined(level.func["create_triggerfx"])) + { + level.func["create_triggerfx"] = ::create_triggerfx; + } + + common_scripts\utility::create_lock("createfx_looper",20); + level.var_7CD = ::common_scripts\utility::exploder_before_load; + waittillframeend; + waittillframeend; + level.var_7CD = ::common_scripts\utility::exploder_after_load; + level.var_7CF = 0; + if(getdvarint("serverCulledSounds") == 1) + { + level.var_7CF = 1; + } + + if(level.createfx_enabled) + { + level.var_7CF = 0; + } + + if(level.createfx_enabled) + { + level waittill("createfx_common_done"); + } + + if(isdefined(level.var_3FF)) + { + wait level.var_3FF; + } + + for(var_00 = 0;var_00 < level.createfxent.size;var_00++) + { + var_01 = level.createfxent[var_00]; + var_01 common_scripts\_createfx::set_forward_and_up_vectors(); + if(var_01.v["type"] == "loopfx") + { + var_01 thread loopfxthread(); + } + + if(var_01.v["type"] == "oneshotfx") + { + var_01 thread oneshotfxthread(); + } + + if(var_01.v["type"] == "soundfx") + { + var_01 thread create_loopsound(); + } + + if(var_01.v["type"] == "soundfx_interval") + { + var_01 thread create_interval_sound(); + } + } +} + +//Function Number: 2 +print_org(param_00,param_01,param_02,param_03) +{ + if(getdvar("debug") == "1") + { + } +} + +//Function Number: 3 +oneshotfx(param_00,param_01,param_02,param_03) +{ +} + +//Function Number: 4 +exploderfx(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,param_0D,param_0E,param_0F,param_10,param_11) +{ + if(1) + { + var_12 = common_scripts\utility::createexploder(param_01); + var_12.v["origin"] = param_02; + var_12.v["angles"] = (0,0,0); + if(isdefined(param_04)) + { + var_12.v["angles"] = vectortoangles(param_04 - param_02); + } + + var_12.v["delay"] = param_03; + var_12.v["exploder"] = param_00; + if(isdefined(level.createfxexploders)) + { + var_13 = level.createfxexploders[var_12.v["exploder"]]; + if(!isdefined(var_13)) + { + var_13 = []; + } + + level.createfxexploders[var_13.v["exploder"]] = var_7B; + } + + return; + } + + var_14 = spawn("script_origin",(0,0,0)); + var_14.origin = param_04; + var_14.angles = vectortoangles(param_06 - param_04); + var_14.script_exploder = param_02; + var_14.script_fxid = param_03; + var_14.script_delay = param_05; + var_14.script_firefx = param_07; + var_14.script_firefxdelay = param_08; + var_14.script_firefxsound = param_09; + var_14.script_sound = param_0A; + var_14.script_earthquake = param_0B; + var_14.script_damage = param_0C; + var_14.script_radius = param_11; + var_14.script_soundalias = param_0D; + var_14.script_firefxtimeout = var_12; + var_14.script_repeat = param_0E; + var_14.script_delay_min = param_0F; + var_14.var_7E6 = param_10; + var_14.var_7E7 = var_13; + var_15 = anglestoforward(var_14.angles); + var_15 = var_15 * 150; + var_14.targetpos = param_04 + var_15; + if(!isdefined(level.var_7E9)) + { + level.var_7E9 = []; + } + + level.var_7E9[level.var_7E9.size] = var_14; + common_scripts\_createfx::createfx_showorigin(param_03,param_04,param_05,param_06,"exploderfx",var_14,undefined,param_07,param_08,param_09,param_0A,param_0B,param_0C,param_0D,param_0E,param_0F,param_10,param_11,var_12); +} + +//Function Number: 5 +loopfx(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + var_07 = common_scripts\utility::createloopeffect(param_00); + var_07.v["origin"] = param_01; + var_07.v["angles"] = (0,0,0); + if(isdefined(param_03)) + { + var_07.v["angles"] = vectortoangles(param_03 - param_01); + } + + var_07.v["delay"] = param_02; +} + +//Function Number: 6 +create_looper() +{ + self.looper = playloopedfx(level._effect[self.v["fxid"]],self.v["delay"],self.v["origin"],0,self.v["forward"],self.v["up"]); + create_loopsound(); +} + +//Function Number: 7 +create_loopsound() +{ + self notify("stop_loop"); + if(isdefined(self.v["soundalias"]) && self.v["soundalias"] != "nil") + { + if(isdefined(self.v["stopable"]) && self.v["stopable"]) + { + if(isdefined(self.looper)) + { + self.looper thread common_scripts\utility::loop_fx_sound(self.v["soundalias"],self.v["origin"],0,"death"); + return; + } + + thread common_scripts\utility::loop_fx_sound(self.v["soundalias"],self.v["origin"],0,"stop_loop"); + return; + } + + if(isdefined(self.looper)) + { + self.looper thread common_scripts\utility::loop_fx_sound(self.v["soundalias"],self.v["origin"],0); + return; + } + + var_00 = 0; + if(level.var_7CF == 1 && isdefined(self.v["server_culled"])) + { + var_00 = self.v["server_culled"]; + } + + thread common_scripts\utility::loop_fx_sound(self.v["soundalias"],self.v["origin"],var_00); + return; + } +} + +//Function Number: 8 +create_interval_sound() +{ + self notify("stop_loop"); + if(!isdefined(self.v["soundalias"])) + { + return; + } + + if(self.v["soundalias"] == "nil") + { + return; + } + + var_00 = undefined; + var_01 = self; + if((isdefined(self.v["stopable"]) && self.v["stopable"]) || level.createfx_enabled) + { + if(isdefined(self.looper)) + { + var_01 = self.looper; + var_00 = "death"; + } + else + { + var_00 = "stop_loop"; + } + } + + var_01 thread common_scripts\utility::loop_fx_sound_interval(self.v["soundalias"],self.v["origin"],var_00,undefined,self.v["delay_min"],self.v["delay_max"]); +} + +//Function Number: 9 +loopfxthread() +{ + common_scripts\utility::waitframe(); + if(isdefined(self.var_7F6)) + { + level waittill("start fx" + self.var_7F6); + } + + for(;;) + { + create_looper(); + if(isdefined(self.timeout)) + { + thread loopfxstop(self.timeout); + } + + if(isdefined(self.var_7F8)) + { + level waittill("stop fx" + self.var_7F8); + } + else + { + return; + } + + if(isdefined(self.looper)) + { + self.looper delete(); + } + + if(isdefined(self.var_7F6)) + { + level waittill("start fx" + self.var_7F6); + continue; + } + } +} + +//Function Number: 10 +loopfxchangeid(param_00) +{ + self endon("death"); + param_00 waittill("effect id changed",var_01); +} + +//Function Number: 11 +loopfxchangeorg(param_00) +{ + self endon("death"); + for(;;) + { + param_00 waittill("effect org changed",var_01); + self.origin = var_01; + } +} + +//Function Number: 12 +loopfxchangedelay(param_00) +{ + self endon("death"); + param_00 waittill("effect delay changed",var_01); +} + +//Function Number: 13 +loopfxdeletion(param_00) +{ + self endon("death"); + param_00 waittill("effect deleted"); + self delete(); +} + +//Function Number: 14 +loopfxstop(param_00) +{ + self endon("death"); + wait param_00; + self.looper delete(); +} + +//Function Number: 15 +loopsound(param_00,param_01,param_02) +{ + level thread loopsoundthread(param_00,param_01,param_02); +} + +//Function Number: 16 +loopsoundthread(param_00,param_01,param_02) +{ + var_03 = spawn("script_origin",param_01); + var_03.origin = param_01; + var_03 playloopsound(param_00); +} + +//Function Number: 17 +gunfireloopfx(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07) +{ + thread gunfireloopfxthread(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07); +} + +//Function Number: 18 +gunfireloopfxthread(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07) +{ + level endon("stop all gunfireloopfx"); + common_scripts\utility::waitframe(); + if(param_07 < param_06) + { + var_08 = param_07; + param_07 = param_06; + param_06 = var_08; + } + + var_09 = param_06; + var_0A = param_07 - param_06; + if(param_05 < param_04) + { + var_08 = param_05; + param_05 = param_04; + param_04 = var_08; + } + + var_0B = param_04; + var_0C = param_05 - param_04; + if(param_03 < param_02) + { + var_08 = param_03; + param_03 = param_02; + param_02 = var_08; + } + + var_0D = param_02; + var_0E = param_03 - param_02; + var_0F = spawnfx(level._effect[param_00],param_01); + if(!level.createfx_enabled) + { + var_0F willneverchange(); + } + + for(;;) + { + var_10 = var_0D + randomint(var_0E); + for(var_11 = 0;var_11 < var_10;var_11++) + { + triggerfx(var_0F); + wait var_0B + randomfloat(var_0C); + } + + wait var_09 + randomfloat(var_0A); + } +} + +//Function Number: 19 +gunfireloopfxvec(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08) +{ + thread gunfireloopfxvecthread(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08); +} + +//Function Number: 20 +gunfireloopfxvecthread(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08) +{ + level endon("stop all gunfireloopfx"); + common_scripts\utility::waitframe(); + if(param_08 < param_07) + { + var_09 = param_08; + param_08 = param_07; + param_07 = var_09; + } + + var_0A = param_07; + var_0B = param_08 - param_07; + if(param_06 < param_05) + { + var_09 = param_06; + param_06 = param_05; + param_05 = var_09; + } + + var_0C = param_05; + var_0D = param_06 - param_05; + if(param_04 < param_03) + { + var_09 = param_04; + param_04 = param_03; + param_03 = var_09; + } + + var_0E = param_03; + var_0F = param_04 - param_03; + param_02 = vectornormalize(param_02 - param_01); + var_10 = spawnfx(level._effect[param_00],param_01,param_02); + if(!level.createfx_enabled) + { + var_10 willneverchange(); + } + + for(;;) + { + var_11 = var_0E + randomint(var_0F); + for(var_12 = 0;var_12 < int(var_11 / level.fxfireloopmod);var_12++) + { + triggerfx(var_10); + var_13 = var_0C + randomfloat(var_0D) * level.fxfireloopmod; + if(var_13 < 0.05) + { + var_13 = 0.05; + } + + wait var_13; + } + + wait var_0C + randomfloat(var_0D); + wait var_0A + randomfloat(var_0B); + } +} + +//Function Number: 21 +setfireloopmod(param_00) +{ + level.fxfireloopmod = 1 / param_00; +} + +//Function Number: 22 +setup_fx() +{ + if(!isdefined(self.script_fxid) || !isdefined(self.script_fxcommand) || !isdefined(self.script_delay)) + { + return; + } + + if(isdefined(self.model)) + { + if(self.model == "toilet") + { + thread burnville_paratrooper_hack(); + return; + } + } + + var_00 = undefined; + if(isdefined(self.target)) + { + var_01 = getent(self.target,"targetname"); + if(isdefined(var_01)) + { + var_00 = var_01.origin; + } + } + + var_02 = undefined; + if(isdefined(self.var_808)) + { + var_02 = self.var_808; + } + + var_03 = undefined; + if(isdefined(self.var_809)) + { + var_03 = self.var_809; + } + + if(self.script_fxcommand == "OneShotfx") + { + oneshotfx(self.script_fxid,self.origin,self.script_delay,var_00); + } + + if(self.script_fxcommand == "loopfx") + { + loopfx(self.script_fxid,self.origin,self.script_delay,var_00,var_02,var_03); + } + + if(self.script_fxcommand == "loopsound") + { + loopsound(self.script_fxid,self.origin,self.script_delay); + } + + self delete(); +} + +//Function Number: 23 +burnville_paratrooper_hack() +{ + var_00 = (0,0,self.angles[1]); + var_01 = level._effect[self.script_fxid]; + var_02 = self.origin; + wait 1; + level thread burnville_paratrooper_hack_loop(var_00,var_02,var_01); + self delete(); +} + +//Function Number: 24 +burnville_paratrooper_hack_loop(param_00,param_01,param_02) +{ + for(;;) + { + playfx(param_02,param_01); + wait 30 + randomfloat(40); + } +} + +//Function Number: 25 +create_triggerfx() +{ + if(!verify_effects_assignment(self.v["fxid"])) + { + return; + } + + self.looper = spawnfx(level._effect[self.v["fxid"]],self.v["origin"],self.v["forward"],self.v["up"]); + triggerfx(self.looper,self.v["delay"]); + if(!level.createfx_enabled) + { + self.looper willneverchange(); + } + + create_loopsound(); +} + +//Function Number: 26 +verify_effects_assignment(param_00) +{ + if(isdefined(level._effect[param_00])) + { + return 1; + } + + if(!isdefined(level.var_80E)) + { + level.var_80E = []; + } + + level.var_80E[self.v["fxid"]] = param_00; + verify_effects_assignment_print(param_00); + return 0; +} + +//Function Number: 27 +verify_effects_assignment_print(param_00) +{ + level notify("verify_effects_assignment_print"); + level endon("verify_effects_assignment_print"); + wait 0.05; + var_01 = getarraykeys(level.var_80E); + foreach(var_03 in var_01) + { + } +} + +//Function Number: 28 +oneshotfxthread() +{ + common_scripts\utility::waitframe(); + if(self.v["delay"] > 0) + { + wait self.v["delay"]; + } + + [[ level.func["create_triggerfx"] ]](); +} \ No newline at end of file diff --git a/MW3/PC/MP/common_scripts/_pipes.gsc b/MW3/PC/MP/common_scripts/_pipes.gsc new file mode 100644 index 0000000..340baa4 --- /dev/null +++ b/MW3/PC/MP/common_scripts/_pipes.gsc @@ -0,0 +1,290 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: common_scripts\_pipes.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 12 + * Decompile Time: 198 ms + * Timestamp: 10/27/2023 2:15:43 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + level.var_1D03 = 25; + var_00 = getentarray("pipe_shootable","targetname"); + if(!var_00.size) + { + return; + } + + level.var_1D04 = spawnstruct(); + level.var_1D04.var_1D05 = 0; + var_00 thread precachefx(); + var_00 thread methodsinit(); + waittillframeend; + common_scripts\utility::array_thread(var_00,::pipesetup); +} + +//Function Number: 2 +pipesetup() +{ + self setcandamage(1); + self setcanradiusdamage(0); + self.var_1D07 = []; + var_00 = undefined; + if(isdefined(self.target)) + { + var_00 = common_scripts\utility::getstruct(self.target,"targetname"); + self.a = var_00.origin; + var_01 = anglestoforward(var_00.angles); + var_01 = var_01 * 128; + self.b = self.a + var_01; + } + else + { + var_01 = anglestoforward(self.angles); + var_02 = var_01 * 64; + self.a = self.origin + var_02; + var_02 = var_01 * -64; + self.b = self.origin + var_02; + } + + thread pipe_wait_loop(); +} + +//Function Number: 3 +pipe_wait_loop() +{ + var_00 = (0,0,0); + var_01 = 0; + var_02 = 4; + for(;;) + { + self waittill("damage",var_03,var_04,var_05,var_00,var_06); + if(var_01) + { + if(randomint(100) <= 33) + { + continue; + } + } + + var_01 = 1; + var_07 = pipe_logic(var_05,var_00,var_06,var_04); + if(var_07) + { + var_02--; + } + + if(var_02 <= 0) + { + break; + } + } + + self setcandamage(0); +} + +//Function Number: 4 +pipe_logic(param_00,param_01,param_02,param_03) +{ + if(level.var_1D04.var_1D05 > 8) + { + return 0; + } + + if(!isdefined(level.var_1D04.var_1D0B[param_02])) + { + param_01 = pipe_calc_nofx(param_01,param_02); + } + else + { + param_01 = self [[ level.var_1D04.var_1D0B[param_02] ]](param_01,param_02); + } + + if(!isdefined(param_01)) + { + return 0; + } + + if(isdefined(param_03.classname) && param_03.classname == "worldspawn") + { + return 0; + } + + foreach(var_05 in self.var_1D07) + { + if(distancesquared(param_01,var_05.origin) < 25) + { + return 0; + } + } + + var_07 = vectorfromlinetopoint(self.a,self.b,param_01); + thread pipefx(param_01,var_07,param_03); + return 1; +} + +//Function Number: 5 +pipefx(param_00,param_01,param_02) +{ + var_03 = level.var_1D04.var_1D0D[self.script_noteworthy]; + var_04 = int(level.var_1D03 / var_03); + var_05 = level.var_1D04.var_1D0E[self.script_noteworthy + "_hit"]; + var_06 = level.var_1D04.var_1D0E[self.script_noteworthy + "_loop"]; + var_07 = level.var_1D04.var_1D0E[self.script_noteworthy + "_end"]; + var_08 = spawn("script_origin",param_00); + var_08 hide(); + var_08 playsound(var_05); + var_08 playloopsound(var_06); + self.var_1D07[self.var_1D07.size] = var_08; + level.var_1D04.var_1D05++; + if(common_scripts\utility::issp() || self.script_noteworthy != "steam") + { + thread pipe_damage(param_00,param_01,param_02,var_08); + } + + playfx(level.var_1D04._effect[self.script_noteworthy],param_00,param_01); + wait var_03; + var_04--; + while(level.var_1D04.var_1D05 <= 8 && var_04 > 0) + { + playfx(level.var_1D04._effect[self.script_noteworthy],param_00,param_01); + wait var_03; + var_04--; + } + + var_08 playsound(var_07); + wait 0.5; + var_08 stoploopsound(var_06); + var_08 delete(); + self.var_1D07 = common_scripts\utility::array_removeundefined(self.var_1D07); + level.var_1D04.var_1D05--; +} + +//Function Number: 6 +pipe_damage(param_00,param_01,param_02,param_03) +{ + if(!allow_pipe_damage()) + { + return; + } + + param_03 endon("death"); + var_04 = param_03.origin + vectornormalize(param_01) * 40; + var_05 = level.var_1D04.var_1D10[self.script_noteworthy]; + for(;;) + { + if(!isdefined(self.damageowner)) + { + self radiusdamage(var_04,36,var_05,var_05 * 0.75,undefined,"MOD_TRIGGER_HURT"); + } + else + { + self radiusdamage(var_04,36,var_05,var_05 * 0.75,param_02,"MOD_TRIGGER_HURT"); + } + + wait 0.4; + } +} + +//Function Number: 7 +allow_pipe_damage() +{ + if(!common_scripts\utility::issp()) + { + return 0; + } + + if(!isdefined(level.var_1D12)) + { + return 1; + } + + return level.var_1D12; +} + +//Function Number: 8 +methodsinit() +{ + level.var_1D04.var_1D0B = []; + level.var_1D04.var_1D0B["MOD_UNKNOWN"] = ::pipe_calc_splash; + level.var_1D04.var_1D0B["MOD_PISTOL_BULLET"] = ::pipe_calc_ballistic; + level.var_1D04.var_1D0B["MOD_RIFLE_BULLET"] = ::pipe_calc_ballistic; + level.var_1D04.var_1D0B["MOD_GRENADE"] = ::pipe_calc_splash; + level.var_1D04.var_1D0B["MOD_GRENADE_SPLASH"] = ::pipe_calc_splash; + level.var_1D04.var_1D0B["MOD_PROJECTILE"] = ::pipe_calc_splash; + level.var_1D04.var_1D0B["MOD_PROJECTILE_SPLASH"] = ::pipe_calc_splash; + level.var_1D04.var_1D0B["MOD_TRIGGER_HURT"] = ::pipe_calc_splash; + level.var_1D04.var_1D0B["MOD_EXPLOSIVE"] = ::pipe_calc_splash; + level.var_1D04.var_1D0B["MOD_EXPLOSIVE_BULLET"] = ::pipe_calc_splash; +} + +//Function Number: 9 +pipe_calc_ballistic(param_00,param_01) +{ + return param_00; +} + +//Function Number: 10 +pipe_calc_splash(param_00,param_01) +{ + var_02 = vectornormalize(vectorfromlinetopoint(self.a,self.b,param_00)); + param_00 = pointonsegmentnearesttopoint(self.a,self.b,param_00); + return param_00 + var_02 * 4; +} + +//Function Number: 11 +pipe_calc_nofx(param_00,param_01) +{ + return undefined; +} + +//Function Number: 12 +precachefx() +{ + var_00 = 0; + var_01 = 0; + foreach(var_03 in self) + { + if(var_03.script_noteworthy == "water") + { + var_03.script_noteworthy = "steam"; + } + + if(var_03.script_noteworthy == "steam") + { + var_03 willneverchange(); + var_00 = 1; + continue; + } + + if(var_03.script_noteworthy == "fire") + { + var_03 willneverchange(); + var_01 = 1; + continue; + } + } + + if(var_00) + { + level.var_1D04._effect["steam"] = loadfx("impacts/pipe_steam"); + level.var_1D04.var_1D0E["steam_hit"] = "mtl_steam_pipe_hit"; + level.var_1D04.var_1D0E["steam_loop"] = "mtl_steam_pipe_hiss_loop"; + level.var_1D04.var_1D0E["steam_end"] = "mtl_steam_pipe_hiss_loop_end"; + level.var_1D04.var_1D0D["steam"] = 3; + level.var_1D04.var_1D10["steam"] = 5; + } + + if(var_01) + { + level.var_1D04._effect["fire"] = loadfx("impacts/pipe_fire"); + level.var_1D04.var_1D0E["fire_hit"] = "mtl_gas_pipe_hit"; + level.var_1D04.var_1D0E["fire_loop"] = "mtl_gas_pipe_flame_loop"; + level.var_1D04.var_1D0E["fire_end"] = "mtl_gas_pipe_flame_end"; + level.var_1D04.var_1D0D["fire"] = 3; + level.var_1D04.var_1D10["fire"] = 5; + } +} \ No newline at end of file diff --git a/MW3/PC/MP/common_scripts/utility.gsc b/MW3/PC/MP/common_scripts/utility.gsc new file mode 100644 index 0000000..74835c1 --- /dev/null +++ b/MW3/PC/MP/common_scripts/utility.gsc @@ -0,0 +1,3053 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: common_scripts\utility.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 173 + * Decompile Time: 2887 ms + * Timestamp: 10/27/2023 2:15:41 AM +*******************************************************************/ + +//Function Number: 1 +scriptprintln(param_00,param_01) +{ +} + +//Function Number: 2 +debugprintln(param_00,param_01) +{ +} + +//Function Number: 3 +draw_debug_line(param_00,param_01,param_02) +{ + for(var_03 = 0;var_03 < param_02 * 20;var_03++) + { + wait 0.05; + } +} + +//Function Number: 4 +waittillend(param_00) +{ + self waittillmatch("end",param_00); +} + +//Function Number: 5 +noself_func(param_00,param_01,param_02,param_03,param_04) +{ + if(!isdefined(level.func)) + { + return; + } + + if(!isdefined(level.func[param_00])) + { + return; + } + + if(!isdefined(param_01)) + { + [[ level.func[param_00] ]](); + return; + } + + if(!isdefined(param_02)) + { + [[ level.func[param_00] ]](param_01); + return; + } + + if(!isdefined(param_03)) + { + [[ level.func[param_00] ]](param_01,param_02); + return; + } + + if(!isdefined(param_04)) + { + [[ level.func[param_00] ]](param_01,param_02,param_03); + return; + } + + [[ level.func[param_00] ]](param_01,param_02,param_03,param_04); +} + +//Function Number: 6 +self_func(param_00,param_01,param_02,param_03,param_04) +{ + if(!isdefined(level.func[param_00])) + { + return; + } + + if(!isdefined(param_01)) + { + self [[ level.func[param_00] ]](); + return; + } + + if(!isdefined(param_02)) + { + self [[ level.func[param_00] ]](param_01); + return; + } + + if(!isdefined(param_03)) + { + self [[ level.func[param_00] ]](param_01,param_02); + return; + } + + if(!isdefined(param_04)) + { + self [[ level.func[param_00] ]](param_01,param_02,param_03); + return; + } + + self [[ level.func[param_00] ]](param_01,param_02,param_03,param_04); +} + +//Function Number: 7 +randomvector(param_00) +{ + return (randomfloat(param_00) - param_00 * 0.5,randomfloat(param_00) - param_00 * 0.5,randomfloat(param_00) - param_00 * 0.5); +} + +//Function Number: 8 +randomvectorrange(param_00,param_01) +{ + var_02 = randomfloatrange(param_00,param_01); + if(randomint(2) == 0) + { + var_02 = var_02 * -1; + } + + var_03 = randomfloatrange(param_00,param_01); + if(randomint(2) == 0) + { + var_03 = var_03 * -1; + } + + var_04 = randomfloatrange(param_00,param_01); + if(randomint(2) == 0) + { + var_04 = var_04 * -1; + } + + return (var_02,var_03,var_04); +} + +//Function Number: 9 +angle_dif(param_00,param_01) +{ + if(param_00 == param_01) + { + return 0; + } + + while(param_01 > 360) + { + param_01 = param_01 - 360; + } + + while(param_01 < 0) + { + param_01 = param_01 + 360; + } + + while(param_00 > 360) + { + param_00 = param_00 - 360; + } + + while(param_00 < 0) + { + param_00 = param_00 + 360; + } + + var_02 = undefined; + var_03 = undefined; + if(param_01 > 180) + { + var_03 = 360 - param_01; + } + else + { + var_03 = param_01; + } + + if(param_00 > 180) + { + var_02 = 360 - param_00; + } + else + { + var_02 = param_00; + } + + var_04 = var_03 + var_02; + var_05 = 0; + if(param_01 > param_00) + { + var_05 = param_01 - param_00; + } + else + { + var_05 = param_00 - param_01; + } + + if(var_05 < var_04) + { + return var_05; + } + + return var_04; +} + +//Function Number: 10 +sign(param_00) +{ + if(param_00 >= 0) + { + return 1; + } + + return -1; +} + +//Function Number: 11 +track(param_00) +{ + if(isdefined(self.var_8BA)) + { + if(param_00 == self.var_8BA) + { + return; + } + } + + self.var_8BA = param_00; +} + +//Function Number: 12 +get_enemy_team(param_00) +{ + var_01 = []; + return var_7B[var_01]; +} + +//Function Number: 13 +clear_exception(param_00) +{ + self.var_8BE[param_00] = level.var_8BD; +} + +//Function Number: 14 +set_exception(param_00,param_01) +{ + self.var_8BE[param_00] = param_01; +} + +//Function Number: 15 +set_all_exceptions(param_00) +{ + var_01 = getarraykeys(self.var_8BE); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + self.var_8BE[var_01[var_02]] = param_00; + } +} + +//Function Number: 16 +cointoss() +{ + return randomint(100) >= 50; +} + +//Function Number: 17 +choose_from_weighted_array(param_00,param_01) +{ + var_02 = randomint(param_01[param_01.size - 1] + 1); + for(var_03 = 0;var_03 < param_01.size;var_03++) + { + if(var_02 <= param_01[var_03]) + { + return param_00[var_03]; + } + } +} + +//Function Number: 18 +get_cumulative_weights(param_00) +{ + var_01 = []; + var_02 = 0; + for(var_03 = 0;var_03 < param_00.size;var_03++) + { + var_02 = var_02 + param_00[var_03]; + var_01[var_03] = var_02; + } + + return var_01; +} + +//Function Number: 19 +waittill_string(param_00,param_01) +{ + if(param_00 != "death") + { + self endon("death"); + } + + param_01 endon("die"); + self waittill(param_00); + param_01 notify("returned",param_00); +} + +//Function Number: 20 +waittill_multiple(param_00,param_01,param_02,param_03,param_04) +{ + self endon("death"); + var_05 = spawnstruct(); + var_05.var_8C6 = 0; + if(isdefined(param_00)) + { + thread waittill_string(param_00,var_05); + var_05.var_8C6++; + } + + if(isdefined(param_01)) + { + thread waittill_string(param_01,var_05); + var_05.var_8C6++; + } + + if(isdefined(param_02)) + { + thread waittill_string(param_02,var_05); + var_05.var_8C6++; + } + + if(isdefined(param_03)) + { + thread waittill_string(param_03,var_05); + var_05.var_8C6++; + } + + if(isdefined(param_04)) + { + thread waittill_string(param_04,var_05); + var_05.var_8C6++; + } + + while(var_05.var_8C6) + { + var_05 waittill("returned"); + var_05.var_8C6--; + } + + var_05 notify("die"); +} + +//Function Number: 21 +waittill_multiple_ents(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07) +{ + self endon("death"); + var_08 = spawnstruct(); + var_08.var_8C6 = 0; + if(isdefined(param_00)) + { + param_00 thread waittill_string(param_01,var_08); + var_08.var_8C6++; + } + + if(isdefined(param_02)) + { + param_02 thread waittill_string(param_03,var_08); + var_08.var_8C6++; + } + + if(isdefined(param_04)) + { + param_04 thread waittill_string(param_05,var_08); + var_08.var_8C6++; + } + + if(isdefined(param_06)) + { + param_06 thread waittill_string(param_07,var_08); + var_08.var_8C6++; + } + + while(var_08.var_8C6) + { + var_08 waittill("returned"); + var_08.var_8C6--; + } + + var_08 notify("die"); +} + +//Function Number: 22 +waittill_any_return(param_00,param_01,param_02,param_03,param_04) +{ + if((!isdefined(param_00) || param_00 != "death") && !isdefined(param_01) || param_01 != "death" && !isdefined(param_02) || param_02 != "death" && !isdefined(param_03) || param_03 != "death" && !isdefined(param_04) || param_04 != "death") + { + self endon("death"); + } + + var_05 = spawnstruct(); + if(isdefined(param_00)) + { + thread waittill_string(param_00,var_05); + } + + if(isdefined(param_01)) + { + thread waittill_string(param_01,var_05); + } + + if(isdefined(param_02)) + { + thread waittill_string(param_02,var_05); + } + + if(isdefined(param_03)) + { + thread waittill_string(param_03,var_05); + } + + if(isdefined(param_04)) + { + thread waittill_string(param_04,var_05); + } + + var_05 waittill("returned",var_06); + var_05 notify("die"); + return var_06; +} + +//Function Number: 23 +waittill_any_timeout(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if((!isdefined(param_01) || param_01 != "death") && !isdefined(param_02) || param_02 != "death" && !isdefined(param_03) || param_03 != "death" && !isdefined(param_04) || param_04 != "death" && !isdefined(param_05) || param_05 != "death") + { + self endon("death"); + } + + var_06 = spawnstruct(); + if(isdefined(param_01)) + { + thread waittill_string(param_01,var_06); + } + + if(isdefined(param_02)) + { + thread waittill_string(param_02,var_06); + } + + if(isdefined(param_03)) + { + thread waittill_string(param_03,var_06); + } + + if(isdefined(param_04)) + { + thread waittill_string(param_04,var_06); + } + + if(isdefined(param_05)) + { + thread waittill_string(param_05,var_06); + } + + var_06 thread _timeout(param_00); + var_06 waittill("returned",var_07); + var_06 notify("die"); + return var_07; +} + +//Function Number: 24 +_timeout(param_00) +{ + self endon("die"); + wait param_00; + self notify("returned","timeout"); +} + +//Function Number: 25 +waittill_any(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07) +{ + if(isdefined(param_01)) + { + self endon(param_01); + } + + if(isdefined(param_02)) + { + self endon(param_02); + } + + if(isdefined(param_03)) + { + self endon(param_03); + } + + if(isdefined(param_04)) + { + self endon(param_04); + } + + if(isdefined(param_05)) + { + self endon(param_05); + } + + if(isdefined(param_06)) + { + self endon(param_06); + } + + if(isdefined(param_07)) + { + self endon(param_07); + } + + self waittill(param_00); +} + +//Function Number: 26 +waittill_any_ents(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,param_0D) +{ + if(isdefined(param_02) && isdefined(param_03)) + { + param_02 endon(param_03); + } + + if(isdefined(param_04) && isdefined(param_05)) + { + param_04 endon(param_05); + } + + if(isdefined(param_06) && isdefined(param_07)) + { + param_06 endon(param_07); + } + + if(isdefined(param_08) && isdefined(param_09)) + { + param_08 endon(param_09); + } + + if(isdefined(param_0A) && isdefined(param_0B)) + { + param_0A endon(param_0B); + } + + if(isdefined(param_0C) && isdefined(param_0D)) + { + param_0C endon(param_0D); + } + + param_00 waittill(param_01); +} + +//Function Number: 27 +isflashed() +{ + if(!isdefined(self.flashendtime)) + { + return 0; + } + + return gettime() < self.flashendtime; +} + +//Function Number: 28 +flag_exist(param_00) +{ + return isdefined(level.flag[param_00]); +} + +//Function Number: 29 +flag(param_00) +{ + return level.flag[param_00]; +} + +//Function Number: 30 +init_flags() +{ + level.flag = []; + level.flags_lock = []; + level.generic_index = 0; + if(!isdefined(level.sp_stat_tracking_func)) + { + level.sp_stat_tracking_func = ::empty_init_func; + } + + level.flag_struct = spawnstruct(); + level.flag_struct assign_unique_id(); +} + +//Function Number: 31 +flag_init(param_00) +{ + if(!isdefined(level.flag)) + { + init_flags(); + } + + level.flag[param_00] = 0; + if(!isdefined(level.trigger_flags)) + { + init_trigger_flags(); + level.trigger_flags[param_00] = []; + } + else if(!isdefined(level.trigger_flags[param_00])) + { + level.trigger_flags[param_00] = []; + } + + if(issuffix(param_00,"aa_")) + { + thread [[ level.sp_stat_tracking_func ]](param_00); + } +} + +//Function Number: 32 +empty_init_func(param_00) +{ +} + +//Function Number: 33 +issuffix(param_00,param_01) +{ + if(param_01.size > param_00.size) + { + return 0; + } + + for(var_02 = 0;var_02 < param_01.size;var_02++) + { + if(param_00[var_02] != param_01[var_02]) + { + return 0; + } + } + + return 1; +} + +//Function Number: 34 +flag_set(param_00,param_01) +{ + level.flag[param_00] = 1; + set_trigger_flag_permissions(param_00); + if(isdefined(param_01)) + { + level notify(param_00,param_01); + return; + } + + level notify(param_00); +} + +//Function Number: 35 +assign_unique_id() +{ + self.unique_id = "generic" + level.generic_index; + level.generic_index++; +} + +//Function Number: 36 +flag_wait(param_00,param_01) +{ + var_02 = undefined; + while(!flag(param_00)) + { + var_02 = undefined; + level waittill(param_00,var_02); + if(isdefined(param_01) && flag(param_00,param_01)) + { + break; + } + } + + if(isdefined(var_02)) + { + return var_02; + } +} + +//Function Number: 37 +flag_clear(param_00) +{ + if(!flag(param_00)) + { + return; + } + + level.flag[param_00] = 0; + set_trigger_flag_permissions(param_00); + level notify(param_00); +} + +//Function Number: 38 +flag_waitopen(param_00) +{ + while(flag(param_00)) + { + level waittill(param_00); + } +} + +//Function Number: 39 +waittill_either(param_00,param_01) +{ + self endon(param_00); + self waittill(param_01); +} + +//Function Number: 40 +array_thread(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A) +{ + if(!isdefined(param_02)) + { + foreach(var_0C in param_00) + { + var_0C thread [[ param_01 ]](); + } + + return; + } + + if(!isdefined(param_06)) + { + foreach(var_0E in param_03) + { + var_0E thread [[ param_03 ]](param_04); + } + + return; + } + + if(!isdefined(param_09)) + { + foreach(var_10 in param_05) + { + var_10 thread [[ param_05 ]](param_06,param_07); + } + + return; + } + + if(!isdefined(var_0C)) + { + foreach(var_12 in param_07) + { + var_12 thread [[ param_07 ]](param_08,param_09,param_0A); + } + + return; + } + + if(!isdefined(var_0F)) + { + foreach(var_14 in param_09) + { + var_14 thread [[ param_09 ]](param_0A,var_0B,var_0C,var_0D); + } + + return; + } + + if(!isdefined(var_12)) + { + foreach(var_16 in var_0B) + { + var_16 thread [[ var_0B ]](var_0C,var_0D,var_0E,var_0F,var_10); + } + + return; + } + + if(!isdefined(var_15)) + { + foreach(var_18 in var_0D) + { + var_18 thread [[ var_0D ]](var_0E,var_0F,var_10,var_11,var_12,var_13); + } + + return; + } + + if(!isdefined(var_18)) + { + foreach(var_1A in var_0F) + { + var_1A thread [[ var_0F ]](var_10,var_11,var_12,var_13,var_14,var_15,var_16); + } + + return; + } + + if(!isdefined(var_1B)) + { + foreach(var_1C in var_11) + { + var_1C thread [[ var_11 ]](var_12,var_13,var_14,var_15,var_16,var_17,var_18,var_19); + } + + return; + } + + foreach(var_1E in var_13) + { + var_1E thread [[ var_13 ]](var_14,var_15,var_16,var_17,var_18,var_19,var_1A,var_1B,var_1C); + } +} + +//Function Number: 41 +array_call(param_00,param_01,param_02,param_03,param_04) +{ + if(isdefined(param_04)) + { + foreach(var_06 in param_00) + { + var_06 [[ param_01 ]](param_02,param_03,param_04); + } + + return; + } + + if(isdefined(var_06)) + { + foreach(var_08 in param_03) + { + var_08 [[ param_03 ]](param_04,var_05); + } + + return; + } + + if(isdefined(var_07)) + { + foreach(var_0A in var_05) + { + var_0A [[ var_05 ]](var_06); + } + + return; + } + + foreach(var_0C in var_07) + { + var_0C [[ var_07 ]](); + } +} + +//Function Number: 42 +array_thread4(param_00,param_01,param_02,param_03,param_04,param_05) +{ + array_thread(param_00,param_01,param_02,param_03,param_04,param_05); +} + +//Function Number: 43 +array_thread5(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + array_thread(param_00,param_01,param_02,param_03,param_04,param_05,param_06); +} + +//Function Number: 44 +trigger_on(param_00,param_01) +{ + if(isdefined(param_00) && isdefined(param_01)) + { + var_02 = getentarray(param_00,param_01); + array_thread(var_02,::trigger_on_proc); + return; + } + + trigger_on_proc(); +} + +//Function Number: 45 +trigger_on_proc() +{ + if(isdefined(self.realorigin)) + { + self.origin = self.realorigin; + } + + self.trigger_off = undefined; +} + +//Function Number: 46 +trigger_off(param_00,param_01) +{ + if(isdefined(param_00) && isdefined(param_01)) + { + var_02 = getentarray(param_00,param_01); + array_thread(var_02,::trigger_off_proc); + return; + } + + trigger_off_proc(); +} + +//Function Number: 47 +trigger_off_proc() +{ + if(!isdefined(self.realorigin)) + { + self.realorigin = self.origin; + } + + if(self.origin == self.realorigin) + { + self.origin = self.origin + (0,0,-10000); + } + + self.trigger_off = 1; +} + +//Function Number: 48 +set_trigger_flag_permissions(param_00) +{ + if(!isdefined(level.trigger_flags)) + { + return; + } + + level.trigger_flags[param_00] = array_removeundefined(level.trigger_flags[param_00]); + array_thread(level.trigger_flags[param_00],::update_trigger_based_on_flags); +} + +//Function Number: 49 +update_trigger_based_on_flags() +{ + var_00 = 1; + if(isdefined(self.script_flag_true)) + { + var_00 = 0; + var_01 = create_flags_and_return_tokens(self.script_flag_true); + foreach(var_03 in var_01) + { + if(flag(var_03)) + { + var_00 = 1; + break; + } + } + } + + var_05 = 1; + if(isdefined(self.script_flag_false)) + { + var_01 = create_flags_and_return_tokens(self.script_flag_false); + foreach(var_03 in var_01) + { + if(flag(var_03)) + { + var_05 = 0; + break; + } + } + } + + [[ level.var_8EC[var_00 && var_05] ]](); +} + +//Function Number: 50 +create_flags_and_return_tokens(param_00) +{ + var_01 = strtok(param_00," "); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + if(!isdefined(level.flag[var_01[var_02]])) + { + flag_init(var_01[var_02]); + } + } + + return var_01; +} + +//Function Number: 51 +init_trigger_flags() +{ + level.trigger_flags = []; + level.var_8EC[1] = ::trigger_on; + level.var_8EC[0] = ::trigger_off; +} + +//Function Number: 52 +getstruct(param_00,param_01) +{ + var_02 = level.struct_class_names[param_01][param_00]; + if(!isdefined(var_02)) + { + return undefined; + } + + if(var_02.size > 1) + { + return undefined; + } + + return var_02[0]; +} + +//Function Number: 53 +getstructarray(param_00,param_01) +{ + var_02 = level.struct_class_names[param_01][param_00]; + if(!isdefined(var_02)) + { + return []; + } + + return var_02; +} + +//Function Number: 54 +struct_class_init() +{ + level.struct_class_names = []; + level.struct_class_names["target"] = []; + level.struct_class_names["targetname"] = []; + level.struct_class_names["script_noteworthy"] = []; + level.struct_class_names["script_linkname"] = []; + foreach(var_01 in level.struct) + { + if(isdefined(var_01.targetname)) + { + if(!isdefined(level.struct_class_names["targetname"][var_01.targetname])) + { + level.struct_class_names["targetname"][var_01.targetname] = []; + } + + var_02 = level.struct_class_names["targetname"][var_01.targetname].size; + level.struct_class_names["targetname"][var_01.targetname][var_02] = var_01; + } + + if(isdefined(var_01.target)) + { + if(!isdefined(level.struct_class_names["target"][var_01.target])) + { + level.struct_class_names["target"][var_01.target] = []; + } + + var_02 = level.struct_class_names["target"][var_01.target].size; + level.struct_class_names["target"][var_01.target][var_02] = var_01; + } + + if(isdefined(var_01.script_noteworthy)) + { + if(!isdefined(level.struct_class_names["script_noteworthy"][var_01.script_noteworthy])) + { + level.struct_class_names["script_noteworthy"][var_01.script_noteworthy] = []; + } + + var_02 = level.struct_class_names["script_noteworthy"][var_01.script_noteworthy].size; + level.struct_class_names["script_noteworthy"][var_01.script_noteworthy][var_02] = var_01; + } + + if(isdefined(var_01.script_linkname)) + { + level.struct_class_names["script_linkname"][var_01.script_linkname][0] = var_01; + } + } +} + +//Function Number: 55 +fileprint_start(param_00) +{ +} + +//Function Number: 56 +fileprint_map_start() +{ +} + +//Function Number: 57 +fileprint_map_header(param_00) +{ + if(!isdefined(param_00)) + { + param_00 = 0; + } +} + +//Function Number: 58 +fileprint_map_keypairprint(param_00,param_01) +{ +} + +//Function Number: 59 +fileprint_map_entity_start() +{ +} + +//Function Number: 60 +fileprint_map_entity_end() +{ +} + +//Function Number: 61 +fileprint_radiant_vec(param_00) +{ +} + +//Function Number: 62 +array_remove(param_00,param_01) +{ + var_02 = []; + foreach(var_04 in param_00) + { + if(var_04 != param_01) + { + var_02[var_02.size] = var_04; + } + } + + return var_02; +} + +//Function Number: 63 +array_remove_array(param_00,param_01) +{ + foreach(var_03 in param_01) + { + param_00 = array_remove(param_00,var_03); + } + + return param_00; +} + +//Function Number: 64 +array_removeundefined(param_00) +{ + var_01 = []; + foreach(var_03 in param_00) + { + if(!isdefined(var_03)) + { + continue; + } + + var_01[var_01.size] = var_03; + } + + return var_01; +} + +//Function Number: 65 +array_levelthread(param_00,param_01,param_02,param_03,param_04) +{ + if(isdefined(param_04)) + { + foreach(var_06 in param_00) + { + thread [[ param_01 ]](var_06,param_02,param_03,param_04); + } + + return; + } + + if(isdefined(var_06)) + { + foreach(var_08 in param_03) + { + thread [[ param_03 ]](var_08,param_04,var_05); + } + + return; + } + + if(isdefined(var_07)) + { + foreach(var_0A in var_05) + { + thread [[ var_05 ]](var_0A,var_06); + } + + return; + } + + foreach(var_0C in var_07) + { + thread [[ var_07 ]](var_0C); + } +} + +//Function Number: 66 +array_levelcall(param_00,param_01,param_02,param_03,param_04) +{ + if(isdefined(param_04)) + { + foreach(var_06 in param_00) + { + [[ param_01 ]](var_06,param_02,param_03,param_04); + } + + return; + } + + if(isdefined(var_06)) + { + foreach(var_08 in param_03) + { + [[ param_03 ]](var_08,param_04,var_05); + } + + return; + } + + if(isdefined(var_07)) + { + foreach(var_0A in var_05) + { + [[ var_05 ]](var_0A,var_06); + } + + return; + } + + foreach(var_0C in var_07) + { + [[ var_07 ]](var_0C); + } +} + +//Function Number: 67 +add_to_array(param_00,param_01) +{ + if(!isdefined(param_01)) + { + return param_00; + } + + if(!isdefined(param_00)) + { + param_00[0] = param_01; + } + else + { + param_00[param_00.size] = param_01; + } + + return param_00; +} + +//Function Number: 68 +flag_assert(param_00) +{ +} + +//Function Number: 69 +flag_wait_either(param_00,param_01) +{ + for(;;) + { + if(flag(param_00)) + { + return; + } + + if(flag(param_01)) + { + return; + } + + level waittill_either(param_00,param_01); + } +} + +//Function Number: 70 +flag_wait_either_return(param_00,param_01) +{ + for(;;) + { + if(flag(param_00)) + { + return param_00; + } + + if(flag(param_01)) + { + return param_01; + } + + var_02 = level waittill_any_return(param_00,param_01); + return var_02; + } +} + +//Function Number: 71 +flag_wait_any(param_00,param_01,param_02,param_03,param_04,param_05) +{ + var_06 = []; + if(isdefined(param_05)) + { + } + else if(isdefined(param_05)) + { + } + else if(isdefined(param_04)) + { + } + else if(isdefined(param_03)) + { + } + else if(isdefined(param_02)) + { + flag_wait_either(param_01,param_02); + return; + } + else + { + return; + } + + for(;;) + { + var_07 = 0; + while(var_07 < var_7B.size) + { + if(flag(var_7B[var_07])) + { + return; + } + + var_07++ = var_7B[var_7B.size]; + } + + level waittill_any(param_01,param_02,param_03,param_04,param_05,var_06); + } +} + +//Function Number: 72 +flag_wait_any_return(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = []; + if(isdefined(param_04)) + { + } + else if(isdefined(param_04)) + { + } + else if(isdefined(param_03)) + { + } + else if(isdefined(param_02)) + { + var_06 = flag_wait_either_return(param_01,param_02); + return var_06; + } + else + { + return; + } + + for(;;) + { + var_07 = 0; + while(var_07 < var_06.size) + { + if(flag(var_06[var_07])) + { + return var_06[var_07]; + } + + var_07++ = var_7B[var_7B.size]; + } + + var_06 = level waittill_any_return(param_02,param_03,param_04,var_05,var_7B); + return var_07; + } +} + +//Function Number: 73 +flag_wait_all(param_00,param_01,param_02,param_03) +{ + if(isdefined(param_00)) + { + flag_wait(param_00); + } + + if(isdefined(param_01)) + { + flag_wait(param_01); + } + + if(isdefined(param_02)) + { + flag_wait(param_02); + } + + if(isdefined(param_03)) + { + flag_wait(param_03); + } +} + +//Function Number: 74 +flag_wait_or_timeout(param_00,param_01) +{ + var_02 = param_01 * 1000; + var_03 = gettime(); + for(;;) + { + if(flag(param_00)) + { + break; + } + + if(gettime() >= var_03 + var_02) + { + break; + } + + var_04 = var_02 - gettime() - var_03; + var_05 = var_04 / 1000; + wait_for_flag_or_time_elapses(param_00,var_05); + } +} + +//Function Number: 75 +flag_waitopen_or_timeout(param_00,param_01) +{ + var_02 = gettime(); + for(;;) + { + if(!flag(param_00)) + { + break; + } + + if(gettime() >= var_02 + param_01 * 1000) + { + break; + } + + wait_for_flag_or_time_elapses(param_00,param_01); + } +} + +//Function Number: 76 +wait_for_flag_or_time_elapses(param_00,param_01) +{ + level endon(param_00); + wait param_01; +} + +//Function Number: 77 +delaycall(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09) +{ + thread delaycall_proc(param_01,param_00,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09); +} + +//Function Number: 78 +delaycall_proc(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09) +{ + if(issp()) + { + self endon("death"); + } + + wait param_01; + if(isdefined(param_09)) + { + self [[ param_00 ]](param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09); + return; + } + + if(isdefined(param_08)) + { + self [[ param_00 ]](param_02,param_03,param_04,param_05,param_06,param_07,param_08); + return; + } + + if(isdefined(param_07)) + { + self [[ param_00 ]](param_02,param_03,param_04,param_05,param_06,param_07); + return; + } + + if(isdefined(param_06)) + { + self [[ param_00 ]](param_02,param_03,param_04,param_05,param_06); + return; + } + + if(isdefined(param_05)) + { + self [[ param_00 ]](param_02,param_03,param_04,param_05); + return; + } + + if(isdefined(param_04)) + { + self [[ param_00 ]](param_02,param_03,param_04); + return; + } + + if(isdefined(param_03)) + { + self [[ param_00 ]](param_02,param_03); + return; + } + + if(isdefined(param_02)) + { + self [[ param_00 ]](param_02); + return; + } + + self [[ param_00 ]](); +} + +//Function Number: 79 +noself_delaycall(param_00,param_01,param_02,param_03,param_04,param_05) +{ + thread noself_delaycall_proc(param_01,param_00,param_02,param_03,param_04,param_05); +} + +//Function Number: 80 +noself_delaycall_proc(param_00,param_01,param_02,param_03,param_04,param_05) +{ + wait param_01; + if(isdefined(param_05)) + { + [[ param_00 ]](param_02,param_03,param_04,param_05); + return; + } + + if(isdefined(param_04)) + { + [[ param_00 ]](param_02,param_03,param_04); + return; + } + + if(isdefined(param_03)) + { + [[ param_00 ]](param_02,param_03); + return; + } + + if(isdefined(param_02)) + { + [[ param_00 ]](param_02); + return; + } + + [[ param_00 ]](); +} + +//Function Number: 81 +issp() +{ + if(!isdefined(level.issp)) + { + level.issp = !string_starts_with(getdvar("mapname"),"mp_"); + } + + return level.issp; +} + +//Function Number: 82 +issp_towerdefense() +{ + if(!isdefined(level.issp_towerdefense)) + { + level.issp_towerdefense = string_starts_with(getdvar("mapname"),"so_td_"); + } + + return level.issp_towerdefense; +} + +//Function Number: 83 +string_starts_with(param_00,param_01) +{ + if(param_00.size < param_01.size) + { + return 0; + } + + for(var_02 = 0;var_02 < param_01.size;var_02++) + { + if(tolower(param_00[var_02]) != tolower(param_01[var_02])) + { + return 0; + } + } + + return 1; +} + +//Function Number: 84 +plot_points(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = param_00[0]; + if(!isdefined(param_01)) + { + param_01 = 1; + } + + if(!isdefined(param_02)) + { + param_02 = 1; + } + + if(!isdefined(param_03)) + { + param_03 = 1; + } + + if(!isdefined(param_04)) + { + param_04 = 0.05; + } + + for(var_06 = 1;var_06 < param_00.size;var_06++) + { + thread draw_line_for_time(var_05,param_00[var_06],param_01,param_02,param_03,param_04); + var_05 = param_00[var_06]; + } +} + +//Function Number: 85 +draw_line_for_time(param_00,param_01,param_02,param_03,param_04,param_05) +{ + param_05 = gettime() + param_05 * 1000; + while(gettime() < param_05) + { + wait 0.05; + } +} + +//Function Number: 86 +array_combine(param_00,param_01) +{ + var_02 = []; + foreach(var_04 in param_00) + { + var_02[var_02.size] = var_04; + } + + foreach(var_04 in param_01) + { + var_02[var_02.size] = var_04; + } + + return var_02; +} + +//Function Number: 87 +flat_angle(param_00) +{ + var_01 = (0,param_00[1],0); + return var_01; +} + +//Function Number: 88 +flat_origin(param_00) +{ + var_01 = (param_00[0],param_00[1],0); + return var_01; +} + +//Function Number: 89 +draw_arrow_time(param_00,param_01,param_02,param_03) +{ + level endon("newpath"); + var_04 = []; + var_05 = vectortoangles(param_00 - param_01); + var_06 = anglestoright(var_05); + var_07 = anglestoforward(var_05); + var_08 = anglestoup(var_05); + var_09 = distance(param_00,param_01); + var_0A = []; + var_0B = 0.1; + var_0A[0] = param_00; + var_0A[1] = param_00 + var_06 * var_09 * var_0B + var_07 * var_09 * -0.1; + var_0A[2] = param_01; + var_0A[3] = param_00 + var_06 * var_09 * -1 * var_0B + var_07 * var_09 * -0.1; + var_0A[4] = param_00; + var_0A[5] = param_00 + var_08 * var_09 * var_0B + var_07 * var_09 * -0.1; + var_0A[6] = param_01; + var_0A[7] = param_00 + var_08 * var_09 * -1 * var_0B + var_07 * var_09 * -0.1; + var_0A[8] = param_00; + var_0C = param_02[0]; + var_0D = param_02[1]; + var_0E = param_02[2]; + plot_points(var_0A,var_0C,var_0D,var_0E,param_03); +} + +//Function Number: 90 +get_linked_ents() +{ + var_00 = []; + if(isdefined(self.script_linkto)) + { + var_01 = get_links(); + foreach(var_03 in var_01) + { + var_04 = getentarray(var_03,"script_linkname"); + if(var_04.size > 0) + { + var_00 = array_combine(var_00,var_04); + } + } + } + + return var_00; +} + +//Function Number: 91 +get_linked_vehicle_nodes() +{ + var_00 = []; + if(isdefined(self.script_linkto)) + { + var_01 = get_links(); + foreach(var_03 in var_01) + { + var_04 = getvehiclenodearray(var_03,"script_linkname"); + if(var_04.size > 0) + { + var_00 = array_combine(var_00,var_04); + } + } + } + + return var_00; +} + +//Function Number: 92 +get_linked_ent() +{ + var_00 = get_linked_ents(); + return var_00[0]; +} + +//Function Number: 93 +get_linked_vehicle_node() +{ + var_00 = get_linked_vehicle_nodes(); + return var_00[0]; +} + +//Function Number: 94 +get_links() +{ + return strtok(self.script_linkto," "); +} + +//Function Number: 95 +run_thread_on_targetname(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = getentarray(param_00,"targetname"); + array_thread(var_05,param_01,param_02,param_03,param_04); + var_05 = getstructarray(param_00,"targetname"); + array_thread(var_05,param_01,param_02,param_03,param_04); + var_05 = [[ level.getnodearrayfunction ]](param_00,"targetname"); + array_thread(var_05,param_01,param_02,param_03,param_04); + var_05 = getvehiclenodearray(param_00,"targetname"); + array_thread(var_05,param_01,param_02,param_03,param_04); +} + +//Function Number: 96 +run_thread_on_noteworthy(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = getentarray(param_00,"script_noteworthy"); + array_thread(var_05,param_01,param_02,param_03,param_04); + var_05 = getstructarray(param_00,"script_noteworthy"); + array_thread(var_05,param_01,param_02,param_03,param_04); + var_05 = [[ level.getnodearrayfunction ]](param_00,"script_noteworthy"); + array_thread(var_05,param_01,param_02,param_03,param_04); + var_05 = getvehiclenodearray(param_00,"script_noteworthy"); + array_thread(var_05,param_01,param_02,param_03,param_04); +} + +//Function Number: 97 +draw_arrow(param_00,param_01,param_02) +{ + level endon("newpath"); + var_03 = []; + var_04 = vectortoangles(param_00 - param_01); + var_05 = anglestoright(var_04); + var_06 = anglestoforward(var_04); + var_07 = distance(param_00,param_01); + var_08 = []; + var_09 = 0.05; + var_08[0] = param_00; + var_08[1] = param_00 + var_05 * var_07 * var_09 + var_06 * var_07 * -0.2; + var_08[2] = param_01; + var_08[3] = param_00 + var_05 * var_07 * -1 * var_09 + var_06 * var_07 * -0.2; + for(var_0A = 0;var_0A < 4;var_0A++) + { + var_0B = var_0A + 1; + if(var_0B >= 4) + { + var_0B = 0; + } + } +} + +//Function Number: 98 +getfx(param_00) +{ + return level._effect[param_00]; +} + +//Function Number: 99 +fxexists(param_00) +{ + return isdefined(level._effect[param_00]); +} + +//Function Number: 100 +print_csv_asset(param_00,param_01) +{ + var_02 = param_01 + "," + param_00; + if(isdefined(level.var_924[var_02])) + { + return; + } + + level.var_924[var_02] = 1; +} + +//Function Number: 101 +fileprint_csv_start(param_00) +{ +} + +//Function Number: 102 +_loadfx(param_00) +{ + return loadfx(param_00); +} + +//Function Number: 103 +getlastweapon() +{ + return self.saved_lastweapon; +} + +//Function Number: 104 +playerunlimitedammothread() +{ +} + +//Function Number: 105 +isusabilityenabled() +{ + return !self.disabledusability; +} + +//Function Number: 106 +_disableusability() +{ + self.disabledusability++; + self disableusability(); +} + +//Function Number: 107 +_enableusability() +{ + self.disabledusability--; + if(!self.disabledusability) + { + self enableusability(); + } +} + +//Function Number: 108 +resetusability() +{ + self.disabledusability = 0; + self enableusability(); +} + +//Function Number: 109 +_disableweapon() +{ + self.disabledweapon++; + self disableweapons(); +} + +//Function Number: 110 +_enableweapon() +{ + self.disabledweapon--; + if(!self.disabledweapon) + { + self enableweapons(); + } +} + +//Function Number: 111 +isweaponenabled() +{ + return !self.disabledweapon; +} + +//Function Number: 112 +_disableweaponswitch() +{ + self.disabledweaponswitch++; + self disableweaponswitch(); +} + +//Function Number: 113 +_enableweaponswitch() +{ + self.disabledweaponswitch--; + if(!self.disabledweaponswitch) + { + self enableweaponswitch(); + } +} + +//Function Number: 114 +isweaponswitchenabled() +{ + return !self.disabledweaponswitch; +} + +//Function Number: 115 +_disableoffhandweapons() +{ + self.disabledoffhandweapons++; + self disableoffhandweapons(); +} + +//Function Number: 116 +_enableoffhandweapons() +{ + self.disabledoffhandweapons--; + if(!self.disabledoffhandweapons) + { + self enableoffhandweapons(); + } +} + +//Function Number: 117 +isoffhandweaponenabled() +{ + return !self.disabledoffhandweapons; +} + +//Function Number: 118 +random(param_00) +{ + var_01 = []; + foreach(var_03 in param_00) + { + var_01[var_01.size] = var_03; + } + + if(!var_01.size) + { + return undefined; + } + + return var_01[randomint(var_01.size)]; +} + +//Function Number: 119 +spawn_tag_origin() +{ + var_00 = spawn("script_model",(0,0,0)); + var_00 setmodel("tag_origin"); + var_00 hide(); + if(isdefined(self.origin)) + { + var_00.origin = self.origin; + } + + if(isdefined(self.angles)) + { + var_00.angles = self.angles; + } + + return var_00; +} + +//Function Number: 120 +waittill_notify_or_timeout(param_00,param_01) +{ + self endon(param_00); + wait param_01; +} + +//Function Number: 121 +fileprint_launcher_start_file() +{ + level.var_93E = 0; + level.fileprint_launcher = 1; + fileprint_launcher("GAMEPRINTSTARTFILE:"); +} + +//Function Number: 122 +fileprint_launcher(param_00) +{ + level.var_93E++; + if(level.var_93E > 200) + { + wait 0.05; + level.var_93E = 0; + } +} + +//Function Number: 123 +fileprint_launcher_end_file(param_00,param_01) +{ + if(!isdefined(param_01)) + { + param_01 = 0; + } + + if(param_01) + { + fileprint_launcher("GAMEPRINTENDFILE:GAMEPRINTP4ENABLED:" + param_00); + } + else + { + fileprint_launcher("GAMEPRINTENDFILE:" + param_00); + } + + var_02 = gettime() + 4000; + while(getdvarint("LAUNCHER_PRINT_SUCCESS") == 0 && getdvar("LAUNCHER_PRINT_FAIL") == "0" && gettime() < var_02) + { + wait 0.05; + } + + if(!gettime() < var_02) + { + iprintlnbold("LAUNCHER_PRINT_FAIL:( TIMEOUT ): launcherconflict? restart launcher and try again? "); + level.fileprint_launcher = undefined; + return 0; + } + + var_03 = getdvar("LAUNCHER_PRINT_FAIL"); + if(var_03 != "0") + { + iprintlnbold("LAUNCHER_PRINT_FAIL:( " + var_03 + " ): launcherconflict? restart launcher and try again? "); + level.fileprint_launcher = undefined; + return 0; + } + + level.fileprint_launcher = undefined; + return 1; +} + +//Function Number: 124 +launcher_write_clipboard(param_00) +{ + level.var_93E = 0; + fileprint_launcher("LAUNCHER_CLIP:" + param_00); +} + +//Function Number: 125 +isdestructible() +{ + if(!isdefined(self)) + { + return 0; + } + + return isdefined(self.destructible_type); +} + +//Function Number: 126 +pauseeffect() +{ + common_scripts\_createfx::stop_fx_looper(); +} + +//Function Number: 127 +activate_individual_exploder() +{ + if(isdefined(self.v["firefx"])) + { + thread fire_effect(); + } + + if(isdefined(self.v["fxid"]) && self.v["fxid"] != "No FX") + { + thread cannon_effect(); + } + else if(isdefined(self.v["soundalias"]) && self.v["soundalias"] != "nil") + { + thread sound_effect(); + } + + if(isdefined(self.v["loopsound"]) && self.v["loopsound"] != "nil") + { + thread effect_loopsound(); + } + + if(isdefined(self.v["damage"])) + { + thread exploder_damage(); + } + + if(isdefined(self.v["earthquake"])) + { + thread exploder_earthquake(); + } + + if(isdefined(self.v["rumble"])) + { + thread exploder_rumble(); + } + + if(self.v["exploder_type"] == "exploder") + { + thread brush_show(); + return; + } + + if(self.v["exploder_type"] == "exploderchunk" || self.v["exploder_type"] == "exploderchunk visible") + { + thread brush_throw(); + return; + } + + thread brush_delete(); +} + +//Function Number: 128 +waitframe() +{ + wait 0.05; +} + +//Function Number: 129 +brush_delete() +{ + var_00 = self.v["exploder"]; + if(isdefined(self.v["delay"])) + { + wait self.v["delay"]; + } + else + { + wait 0.05; + } + + if(!isdefined(self.model)) + { + return; + } + + if(isdefined(self.model.classname)) + { + if(issp() && self.model.spawnflags & 1) + { + self.model [[ level.connectpathsfunction ]](); + } + } + + if(level.createfx_enabled) + { + if(isdefined(self.var_946)) + { + return; + } + + self.var_946 = 1; + self.model hide(); + self.model notsolid(); + wait 3; + self.var_946 = undefined; + self.model show(); + self.model solid(); + return; + } + + if(!isdefined(self.v["fxid"]) || self.v["fxid"] == "No FX") + { + self.v["exploder"] = undefined; + } + + waittillframeend; + if(isdefined(self.model) && isdefined(self.model.classname)) + { + self.model delete(); + } +} + +//Function Number: 130 +brush_throw() +{ + if(isdefined(self.v["delay"])) + { + wait self.v["delay"]; + } + + var_00 = undefined; + if(isdefined(self.v["target"])) + { + var_00 = get_target_ent(self.v["target"]); + } + + if(!isdefined(var_00)) + { + self.model delete(); + return; + } + + self.model show(); + if(isdefined(self.v["delay_post"])) + { + wait self.v["delay_post"]; + } + + var_01 = self.v["origin"]; + var_02 = self.v["angles"]; + var_03 = var_00.origin; + var_04 = var_03 - self.v["origin"]; + var_05 = var_04[0]; + var_06 = var_04[1]; + var_07 = var_04[2]; + var_08 = isdefined(self.v["physics"]); + if(var_08) + { + var_09 = undefined; + if(isdefined(var_00.target)) + { + var_09 = var_00 get_target_ent(); + } + + if(!isdefined(var_09)) + { + var_0A = var_01; + var_0B = var_00.origin; + } + else + { + var_0A = var_02.origin; + var_0B = var_0A.origin - var_01.origin * self.v["physics"]; + } + + self.model physicslaunchclient(var_0A,var_0B); + return; + } + else + { + self.model rotatevelocity((var_08,var_09,var_0A),12); + self.model movegravity((var_08,var_09,var_0A),12); + } + + if(level.createfx_enabled) + { + if(isdefined(self.var_946)) + { + return; + } + + self.var_946 = 1; + wait 3; + self.var_946 = undefined; + self.v["origin"] = var_04; + self.v["angles"] = var_05; + self.model hide(); + return; + } + + self.v["exploder"] = undefined; + wait 6; + self.model delete(); +} + +//Function Number: 131 +get_target_ent(param_00) +{ + if(!isdefined(param_00)) + { + param_00 = self.target; + } + + var_01 = getent(param_00,"targetname"); + if(isdefined(var_01)) + { + return var_01; + } + + if(issp()) + { + var_01 = [[ level.getnodefunction ]](param_00,"targetname"); + if(isdefined(var_01)) + { + return var_01; + } + } + + var_01 = getstruct(param_00,"targetname"); + if(isdefined(var_01)) + { + return var_01; + } + + var_01 = getvehiclenode(param_00,"targetname"); + if(isdefined(var_01)) + { + return var_01; + } +} + +//Function Number: 132 +brush_show() +{ + if(isdefined(self.v["delay"])) + { + wait self.v["delay"]; + } + + if(!isdefined(self.model.script_modelname)) + { + self.model show(); + self.model solid(); + } + else + { + var_00 = self.model spawn_tag_origin(); + if(isdefined(self.model.script_linkname)) + { + var_00.script_linkname = self.model.script_linkname; + } + + var_00 setmodel(self.model.script_modelname); + var_00 show(); + } + + self.brush_shown = 1; + if(issp() && !isdefined(self.model.script_modelname) && self.model.spawnflags & 1) + { + if(!isdefined(self.model.disconnect_paths)) + { + self.model [[ level.connectpathsfunction ]](); + } + else + { + self.model [[ level.disconnectpathsfunction ]](); + } + } + + if(level.createfx_enabled) + { + if(isdefined(self.var_946)) + { + return; + } + + self.var_946 = 1; + wait 3; + self.var_946 = undefined; + if(!isdefined(self.model.script_modelname)) + { + self.model hide(); + self.model notsolid(); + } + } +} + +//Function Number: 133 +exploder_earthquake() +{ + exploder_delay(); + do_earthquake(self.v["earthquake"],self.v["origin"]); +} + +//Function Number: 134 +do_earthquake(param_00,param_01) +{ + var_02 = level.earthquake[param_00]; + earthquake(var_02["magnitude"],var_02["duration"],param_01,var_02["radius"]); +} + +//Function Number: 135 +exploder_rumble() +{ + if(!issp()) + { + return; + } + + exploder_delay(); + level.player playrumbleonentity(self.v["rumble"]); +} + +//Function Number: 136 +exploder_delay() +{ + if(!isdefined(self.v["delay"])) + { + self.v["delay"] = 0; + } + + var_00 = self.v["delay"]; + var_01 = self.v["delay"] + 0.001; + if(isdefined(self.v["delay_min"])) + { + var_00 = self.v["delay_min"]; + } + + if(isdefined(self.v["delay_max"])) + { + var_01 = self.v["delay_max"]; + } + + if(var_00 > 0) + { + wait randomfloatrange(var_00,var_01); + } +} + +//Function Number: 137 +exploder_damage() +{ + if(isdefined(self.v["delay"])) + { + var_00 = self.v["delay"]; + } + else + { + var_00 = 0; + } + + if(isdefined(self.v["damage_radius"])) + { + var_01 = self.v["damage_radius"]; + } + else + { + var_01 = 128; + } + + var_02 = self.v["damage"]; + var_03 = self.v["origin"]; + wait var_00; + radiusdamage(var_03,var_01,var_02,var_02); +} + +//Function Number: 138 +effect_loopsound() +{ + if(isdefined(self.var_956)) + { + self.var_956 delete(); + } + + var_00 = self.v["origin"]; + var_01 = self.v["loopsound"]; + exploder_delay(); + self.var_956 = play_loopsound_in_space(var_01,var_00); +} + +//Function Number: 139 +play_loopsound_in_space(param_00,param_01) +{ + var_02 = spawn("script_origin",(0,0,0)); + if(!isdefined(param_01)) + { + param_01 = self.origin; + } + + var_02.origin = param_01; + var_02 playloopsound(param_00); + return var_02; +} + +//Function Number: 140 +sound_effect() +{ + effect_soundalias(); +} + +//Function Number: 141 +effect_soundalias() +{ + var_00 = self.v["origin"]; + var_01 = self.v["soundalias"]; + exploder_delay(); + play_sound_in_space(var_01,var_00); +} + +//Function Number: 142 +play_sound_in_space(param_00,param_01,param_02) +{ + var_03 = spawn("script_origin",(0,0,1)); + if(!isdefined(param_01)) + { + param_01 = self.origin; + } + + var_03.origin = param_01; + if(issp()) + { + if(isdefined(param_02) && param_02) + { + var_03 playsoundasmaster(param_00,"sounddone"); + } + else + { + var_03 playsound(param_00,"sounddone"); + } + } + else if(isdefined(param_02) && param_02) + { + var_03 playsoundasmaster(param_00); + } + else + { + var_03 playsound(param_00); + } + + var_03 waittill("sounddone"); + var_03 delete(); +} + +//Function Number: 143 +cannon_effect() +{ + if(isdefined(self.v["repeat"])) + { + thread exploder_playsound(); + for(var_00 = 0;var_00 < self.v["repeat"];var_00++) + { + playfx(level._effect[self.v["fxid"]],self.v["origin"],self.v["forward"],self.v["up"]); + exploder_delay(); + } + + return; + } + + exploder_delay(); + if(isdefined(self.looper)) + { + self.looper delete(); + } + + self.looper = spawnfx(getfx(self.v["fxid"]),self.v["origin"],self.v["forward"],self.v["up"]); + triggerfx(self.looper); + exploder_playsound(); +} + +//Function Number: 144 +exploder_playsound() +{ + if(!isdefined(self.v["soundalias"]) || self.v["soundalias"] == "nil") + { + return; + } + + play_sound_in_space(self.v["soundalias"],self.v["origin"]); +} + +//Function Number: 145 +fire_effect() +{ + var_00 = self.v["forward"]; + var_01 = self.v["up"]; + var_02 = undefined; + var_03 = self.v["firefxsound"]; + var_04 = self.v["origin"]; + var_05 = self.v["firefx"]; + var_06 = self.v["ender"]; + if(!isdefined(var_06)) + { + var_06 = "createfx_effectStopper"; + } + + var_07 = self.v["firefxtimeout"]; + var_08 = 0.5; + if(isdefined(self.v["firefxdelay"])) + { + var_08 = self.v["firefxdelay"]; + } + + exploder_delay(); + if(isdefined(var_03)) + { + level thread loop_fx_sound(var_03,var_04,1,var_06,var_07); + } + + playfx(level._effect[var_05],self.v["origin"],var_00,var_01); +} + +//Function Number: 146 +loop_fx_sound(param_00,param_01,param_02,param_03,param_04) +{ + if(isdefined(param_02) && param_02 == 1) + { + if(!isdefined(level.first_frame) || level.first_frame == 1) + { + spawnloopingsound(param_00,param_01); + return; + } + + return; + } + + var_05 = spawn("script_origin",(0,0,0)); + if(isdefined(param_03)) + { + thread loop_sound_delete(param_03,var_05); + self endon(param_03); + } + + var_05.origin = param_01; + var_05 playloopsound(param_00); + var_06 = 0; + if(isdefined(level.createfx_enabled)) + { + var_06 = level.createfx_enabled; + } + + if(!isdefined(param_04) && !var_06) + { + var_05 willneverchange(); + return; + } + + if(isdefined(param_04)) + { + wait param_04; + } +} + +//Function Number: 147 +loop_fx_sound_interval(param_00,param_01,param_02,param_03,param_04,param_05) +{ + var_06 = spawn("script_origin",(0,0,0)); + if(isdefined(param_02)) + { + thread loop_sound_delete(param_02,var_06); + self endon(param_02); + } + + var_06.origin = param_01; + if(param_04 >= param_05) + { + wait 0.05; + } + + if(!soundexists(param_00)) + { + wait 0.05; + } + + for(;;) + { + lock("createfx_looper"); + thread play_sound_in_space(param_00,var_06.origin); + eog_newstar("createfx_looper"); + wait randomfloatrange(param_04,param_05); + } +} + +//Function Number: 148 +loop_sound_delete(param_00,param_01) +{ + param_01 endon("death"); + self waittill(param_00); + param_01 delete(); +} + +//Function Number: 149 +exploder_before_load(param_00) +{ + waittillframeend; + waittillframeend; + activate_exploder(param_00); +} + +//Function Number: 150 +exploder_after_load(param_00) +{ + activate_exploder(param_00); +} + +//Function Number: 151 +activate_exploder(param_00) +{ + param_00 = param_00 + ""; + level notify("exploding_" + param_00); + if(isdefined(level.createfxexploders) && !level.createfx_enabled) + { + var_01 = level.createfxexploders[param_00]; + if(isdefined(var_01)) + { + foreach(var_03 in var_01) + { + var_03 activate_individual_exploder(); + } + + return; + } + + return; + } + + var_05 = 0; + while(var_03 < level.createfxent.size) + { + var_05 = level.createfxent[var_03]; + if(!isdefined(var_05)) + { + continue; + } + + if(var_05.v["type"] != "exploder") + { + continue; + } + + if(!isdefined(var_05.v["exploder"])) + { + continue; + } + + if(var_05.v["exploder"] + "" != var_02) + { + continue; + } + + var_05 activate_individual_exploder(); + var_03++; + } +} + +//Function Number: 152 +createloopeffect(param_00) +{ + var_01 = common_scripts\_createfx::createeffect("loopfx",param_00); + var_01.v["delay"] = common_scripts\_createfx::getloopeffectdelaydefault(); + return var_01; +} + +//Function Number: 153 +createoneshoteffect(param_00) +{ + var_01 = common_scripts\_createfx::createeffect("oneshotfx",param_00); + var_01.v["delay"] = common_scripts\_createfx::getoneshoteffectdelaydefault(); + return var_01; +} + +//Function Number: 154 +createexploder(param_00) +{ + var_01 = common_scripts\_createfx::createeffect("exploder",param_00); + var_01.v["delay"] = common_scripts\_createfx::getexploderdelaydefault(); + var_01.v["exploder_type"] = "normal"; + return var_01; +} + +//Function Number: 155 +alphabetize(param_00) +{ + if(param_00.size <= 1) + { + return param_00; + } + + var_01 = 0; + for(var_02 = param_00.size - 1;var_02 >= 1;var_02--) + { + var_03 = param_00[var_02]; + var_04 = var_02; + for(var_05 = 0;var_05 < var_02;var_05++) + { + var_06 = param_00[var_05]; + if(stricmp(var_06,var_03) > 0) + { + var_03 = var_06; + var_04 = var_05; + } + } + + if(var_04 != var_02) + { + param_00[var_04] = param_00[var_02]; + param_00[var_02] = var_03; + } + } + + return param_00; +} + +//Function Number: 156 +is_later_in_alphabet(param_00,param_01) +{ + return stricmp(param_00,param_01) > 0; +} + +//Function Number: 157 +alphabet_compare(param_00,param_01) +{ + var_02 = []; + var_03 = 1; + var_02["0"] = var_03; + var_03++; + var_02["1"] = var_03; + var_03++; + var_02["2"] = var_03; + var_03++; + var_02["3"] = var_03; + var_03++; + var_02["4"] = var_03; + var_03++; + var_02["5"] = var_03; + var_03++; + var_02["6"] = var_03; + var_03++; + var_02["7"] = var_03; + var_03++; + var_02["8"] = var_03; + var_03++; + var_02["9"] = var_03; + var_03++; + var_02["_"] = var_03; + var_03++; + var_02["a"] = var_03; + var_03++; + var_02["b"] = var_03; + var_03++; + var_02["c"] = var_03; + var_03++; + var_02["d"] = var_03; + var_03++; + var_02["e"] = var_03; + var_03++; + var_02["f"] = var_03; + var_03++; + var_02["g"] = var_03; + var_03++; + var_02["h"] = var_03; + var_03++; + var_02["i"] = var_03; + var_03++; + var_02["j"] = var_03; + var_03++; + var_02["k"] = var_03; + var_03++; + var_02["l"] = var_03; + var_03++; + var_02["m"] = var_03; + var_03++; + var_02["n"] = var_03; + var_03++; + var_02["o"] = var_03; + var_03++; + var_02["p"] = var_03; + var_03++; + var_02["q"] = var_03; + var_03++; + var_02["r"] = var_03; + var_03++; + var_02["s"] = var_03; + var_03++; + var_02["t"] = var_03; + var_03++; + var_02["u"] = var_03; + var_03++; + var_02["v"] = var_03; + var_03++; + var_02["w"] = var_03; + var_03++; + var_02["x"] = var_03; + var_03++; + var_02["y"] = var_03; + var_03++; + var_02["z"] = var_03; + var_03++; + param_00 = tolower(param_00); + param_01 = tolower(param_01); + var_04 = 0; + if(isdefined(var_02[param_00])) + { + var_04 = var_02[param_00]; + } + + var_05 = 0; + if(isdefined(var_02[param_01])) + { + var_05 = var_02[param_01]; + } + + if(var_04 > var_05) + { + return "1st"; + } + + if(var_04 < var_05) + { + return "2nd"; + } + + return "same"; +} + +//Function Number: 158 +play_loop_sound_on_entity(param_00,param_01) +{ + var_02 = spawn("script_origin",(0,0,0)); + var_02 endon("death"); + thread delete_on_death(var_02); + if(isdefined(param_01)) + { + var_02.origin = self.origin + param_01; + var_02.angles = self.angles; + var_02 linkto(self); + } + else + { + var_02.origin = self.origin; + var_02.angles = self.angles; + var_02 linkto(self); + } + + var_02 playloopsound(param_00); + self waittill("stop sound" + param_00); + var_02 stoploopsound(param_00); + var_02 delete(); +} + +//Function Number: 159 +stop_loop_sound_on_entity(param_00) +{ + self notify("stop sound" + param_00); +} + +//Function Number: 160 +delete_on_death(param_00) +{ + param_00 endon("death"); + self waittill("death"); + if(isdefined(param_00)) + { + param_00 delete(); + } +} + +//Function Number: 161 +error(param_00) +{ + waitframe(); +} + +//Function Number: 162 +exploder(param_00) +{ + [[ level.var_7CD ]](param_00); +} + +//Function Number: 163 +create_dvar(param_00,param_01) +{ + setdvarifuninitialized(param_00,param_01); +} + +//Function Number: 164 +void() +{ +} + +//Function Number: 165 +tag_project(param_00,param_01) +{ + var_02 = self gettagorigin(param_00); + var_03 = self gettagangles(param_00); + var_04 = anglestoforward(var_03); + var_04 = vectornormalize(var_04) * param_01; + return var_02 + var_04; +} + +//Function Number: 166 +ter_op(param_00,param_01,param_02) +{ + if(param_00) + { + return param_01; + } + + return param_02; +} + +//Function Number: 167 +create_lock(param_00,param_01) +{ + if(!isdefined(param_01)) + { + param_01 = 1; + } + + if(!isdefined(level.lock)) + { + level.lock = []; + } + + var_02 = spawnstruct(); + var_02.var_96C = param_01; + var_02.count = 0; + level.lock[param_00] = var_02; +} + +//Function Number: 168 +lock(param_00) +{ + for(var_01 = level.lock[param_00];var_01.count >= var_01.var_96C;var_01 waittill("unlocked")) + { + } + + var_01.count++; +} + +//Function Number: 169 +is_locked(param_00) +{ + var_01 = level.lock[param_00]; + return var_01.count > var_01.var_96C; +} + +//Function Number: 170 +unlock_wait(param_00) +{ + thread unlock_thread(param_00); + wait 0.05; +} + +//Function Number: 171 +eog_newstar(param_00) +{ + thread unlock_thread(param_00); +} + +//Function Number: 172 +unlock_thread(param_00) +{ + wait 0.05; + var_01 = level.lock[param_00]; + var_01.count--; + var_01 notify("unlocked"); +} + +//Function Number: 173 +get_template_level() +{ + var_00 = level.script; + if(isdefined(level.template_script)) + { + var_00 = level.template_script; + } + + return var_00; +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/_animatedmodels.gsc b/MW3/PC/MP/maps/mp/_animatedmodels.gsc new file mode 100644 index 0000000..fcf3833 --- /dev/null +++ b/MW3/PC/MP/maps/mp/_animatedmodels.gsc @@ -0,0 +1,52 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\_animatedmodels.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 71 ms + * Timestamp: 10/27/2023 2:14:50 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(!isdefined(level.anim_prop_models)) + { + level.anim_prop_models = []; + } + + var_00 = getarraykeys(level.anim_prop_models); + foreach(var_02 in var_00) + { + var_03 = getarraykeys(level.anim_prop_models[var_02]); + foreach(var_05 in var_03) + { + precachempanim(level.anim_prop_models[var_02][var_05]); + } + } + + waittillframeend; + level.init_animatedmodels = []; + var_08 = getentarray("animated_model","targetname"); + common_scripts\utility::array_thread(var_08,::animatemodel); + level.init_animatedmodels = undefined; +} + +//Function Number: 2 +animatemodel() +{ + if(isdefined(self.animation)) + { + var_00 = self.animation; + } + else + { + var_01 = getarraykeys(level.anim_prop_models[self.model]); + var_02 = var_01[randomint(var_01.size)]; + var_00 = level.anim_prop_models[self.model][var_02]; + } + + self scriptmodelplayanim(var_00); + self willneverchange(); +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/_areas.gsc b/MW3/PC/MP/maps/mp/_areas.gsc new file mode 100644 index 0000000..647694a --- /dev/null +++ b/MW3/PC/MP/maps/mp/_areas.gsc @@ -0,0 +1,72 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\_areas.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 5 + * Decompile Time: 95 ms + * Timestamp: 10/27/2023 2:14:51 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level.softlandingtriggers = getentarray("trigger_multiple_softlanding","classname"); + var_00 = getentarray("destructible_vehicle","targetname"); + foreach(var_02 in level.softlandingtriggers) + { + if(var_02.script_type != "car") + { + continue; + } + + foreach(var_04 in var_00) + { + if(distance(var_02.origin,var_04.origin) > 64) + { + continue; + } + + var_02.destructible = var_04; + } + } + + thread onplayerconnect(); +} + +//Function Number: 2 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_00.softlanding = undefined; + var_00 thread softlandingwaiter(); + } +} + +//Function Number: 3 +playerentersoftlanding(param_00) +{ + self.softlanding = param_00; +} + +//Function Number: 4 +playerleavesoftlanding(param_00) +{ + self.softlanding = undefined; +} + +//Function Number: 5 +softlandingwaiter() +{ + self endon("disconnect"); + for(;;) + { + self waittill("soft_landing",var_00,var_01); + if(!isdefined(var_00.destructible)) + { + continue; + } + } +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/_audio.gsc b/MW3/PC/MP/maps/mp/_audio.gsc new file mode 100644 index 0000000..f3b587f --- /dev/null +++ b/MW3/PC/MP/maps/mp/_audio.gsc @@ -0,0 +1,92 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\_audio.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 10 + * Decompile Time: 176 ms + * Timestamp: 10/27/2023 2:14:51 AM +*******************************************************************/ + +//Function Number: 1 +init_audio() +{ + if(!isdefined(level.audio)) + { + level.audio = spawnstruct(); + } + + init_reverb(); + init_whizby(); + level.onplayerconnectaudioinit = ::onplayerconnectaudioinit; +} + +//Function Number: 2 +onplayerconnectaudioinit() +{ + apply_reverb("default"); +} + +//Function Number: 3 +init_reverb() +{ + add_reverb("default","generic",0.15,0.9,2); +} + +//Function Number: 4 +add_reverb(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = []; + is_roomtype_valid(param_01); + level.audio.reverb_settings[param_01] = var_7B; +} + +//Function Number: 5 +is_roomtype_valid(param_00) +{ +} + +//Function Number: 6 +apply_reverb(param_00) +{ + if(!isdefined(level.audio.reverb_settings[param_00])) + { + var_01 = level.audio.reverb_settings["default"]; + } + else + { + var_01 = level.audio.reverb_settings[var_01]; + } + + self setreverb("snd_enveffectsprio_level",var_01["roomtype"],var_01["drylevel"],var_01["wetlevel"],var_01["fadetime"]); +} + +//Function Number: 7 +init_whizby() +{ + level.audio.whizby_settings = []; + set_whizby_radius(15,30,50); + set_whizby_spread(150,250,350); +} + +//Function Number: 8 +set_whizby_radius(param_00,param_01,param_02) +{ + level.audio.whizby_settings["radius"] = [param_00,param_01,param_02]; +} + +//Function Number: 9 +set_whizby_spread(param_00,param_01,param_02) +{ + level.audio.whizby_settings["spread"] = [param_00,param_01,param_02]; +} + +//Function Number: 10 +apply_whizby() +{ + var_00 = level.audio.whizby_settings; + var_01 = var_00["spread"]; + var_02 = var_00["radius"]; + self setwhizbyspreads(var_01[0],var_01[1],var_01[2]); + self setwhizbyradii(var_02[0],var_02[1],var_02[2]); +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/_awards.gsc b/MW3/PC/MP/maps/mp/_awards.gsc new file mode 100644 index 0000000..cfd3cb4 --- /dev/null +++ b/MW3/PC/MP/maps/mp/_awards.gsc @@ -0,0 +1,1138 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\_awards.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 58 + * Decompile Time: 1011 ms + * Timestamp: 10/27/2023 2:14:55 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + initawards(); + level thread onplayerconnect(); + level thread monitormovementdistance(); + level thread monitorenemydistance(); +} + +//Function Number: 2 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + if(!isdefined(var_00.pers["stats"])) + { + var_00.pers["stats"] = []; + } + + var_00.stats = var_00.pers["stats"]; + if(!var_00.stats.size) + { + var_00 setplayerdata("round","awardCount",0); + foreach(var_03, var_02 in level.awards) + { + if(isdefined(level.awards[var_03].defaultvalue)) + { + var_00 maps\mp\_utility::initplayerstat(var_03,level.awards[var_03].defaultvalue); + continue; + } + + var_00 maps\mp\_utility::initplayerstat(var_03); + } + } + + var_00.prevpos = var_00.origin; + var_00.previousdeaths = 0; + var_00.altitudepolls = 0; + var_00.totalaltitudesum = 0; + var_00.usedweapons = []; + var_00 thread onplayerspawned(); + var_00 thread monitorpositioncamping(); + } +} + +//Function Number: 3 +onplayerspawned() +{ + self endon("disconnect"); + for(;;) + { + self waittill("spawned_player"); + thread monitorreloads(); + thread monitorshotsfired(); + thread monitorswaps(); + thread monitorexplosionssurvived(); + thread monitorshieldblocks(); + thread monitorflashhits(); + thread monitorstunhits(); + thread monitorstancetime(); + } +} + +//Function Number: 4 +initawards() +{ + if(isdefined(level.initgametypeawards)) + { + [[ level.initgametypeawards ]](); + } + + initawardflag("10kills",::isatleast,10,"kills"); + initawardflag("1death",::isatleast,1,"deaths"); + initawardflag("nodeaths",::isatmost,0,"deaths"); + initawardflag("nokills",::isatmost,0,"kills"); + initmultiaward("mvp","kills","deaths"); + initmultiaward("punisher","kills","killstreak"); + initmultiaward("overkill","kills","headshots"); + initstataward("kdratio",0,::highestwins); + initstataward("kills",0,::highestwins); + initstataward("higherrankkills",0,::highestwins); + initstataward("deaths",0,::lowestwithhalfplayedtime); + initstataward("killstreak",0,::highestwins); + initstataward("headshots",0,::highestwins); + initstataward("closertoenemies",0,::highestwins); + initstataward("throwingknifekills",0,::highestwins); + initstataward("grenadekills",0,::highestwins); + initstataward("helicopters",0,::highestwins); + initstataward("airstrikes",0,::highestwins); + initstataward("uavs",0,::highestwins); + initstataward("mostmultikills",0,::highestwins); + initstataward("multikill",0,::highestwins); + initstataward("knifekills",0,::highestwins); + initstataward("flankkills",0,::highestwins); + initstataward("bulletpenkills",0,::highestwins); + initstataward("laststandkills",0,::highestwins); + initstataward("laststanderkills",0,::highestwins); + initstataward("assists",0,::highestwins); + initstataward("c4kills",0,::highestwins); + initstataward("claymorekills",0,::highestwins); + initstataward("fragkills",0,::highestwins); + initstataward("semtexkills",0,::highestwins); + initstataward("explosionssurvived",0,::highestwins); + initstataward("mosttacprevented",0,::highestwins); + initstataward("avengekills",0,::highestwins); + initstataward("rescues",0,::highestwins); + initstataward("longshots",0,::highestwins); + initstataward("adskills",0,::highestwins); + initstataward("hipfirekills",0,::highestwins); + initstataward("revengekills",0,::highestwins); + initstataward("longestlife",0,::highestwins); + initstataward("throwbacks",0,::highestwins); + initstataward("otherweaponkills",0,::highestwins); + initstataward("killedsameplayer",0,::highestwins,2); + initstataward("mostweaponsused",0,::highestwins,3); + initstataward("distancetraveled",0,::highestwins); + initstataward("mostreloads",0,::highestwins); + initstataward("mostswaps",0,::highestwins); + initstat("flankdeaths",0); + initstataward("thermalkills",0,::highestwins); + initstataward("mostcamperkills",0,::highestwins); + initstataward("fbhits",0,::highestwins); + initstataward("stunhits",0,::highestwins); + initstataward("scopedkills",0,::highestwins); + initstataward("arkills",0,::highestwins); + initstataward("arheadshots",0,::highestwins); + initstataward("lmgkills",0,::highestwins); + initstataward("lmgheadshots",0,::highestwins); + initstataward("sniperkills",0,::highestwins); + initstataward("sniperheadshots",0,::highestwins); + initstataward("shieldblocks",0,::highestwins); + initstataward("shieldkills",0,::highestwins); + initstataward("smgkills",0,::highestwins); + initstataward("smgheadshots",0,::highestwins); + initstataward("shotgunkills",0,::highestwins); + initstataward("shotgunheadshots",0,::highestwins); + initstataward("pistolkills",0,::highestwins); + initstataward("pistolheadshots",0,::highestwins); + initstataward("rocketkills",0,::highestwins); + initstataward("equipmentkills",0,::highestwins); + initstataward("mostclasseschanged",0,::highestwins); + initstataward("lowerrankkills",0,::highestwins); + initstataward("sprinttime",0,::highestwins,1); + initstataward("crouchtime",0,::highestwins); + initstataward("pronetime",0,::highestwins); + initstataward("comebacks",0,::highestwins); + initstataward("mostshotsfired",0,::highestwins); + initstataward("timeinspot",0,::highestwins); + initstataward("killcamtimewatched",0,::highestwins); + initstataward("greatestavgalt",0,::highestwins); + initstataward("leastavgalt",9999999,::lowestwins); + initstataward("weaponxpearned",0,::highestwins); + initstataward("assaultkillstreaksused",0,::highestwins); + initstataward("supportkillstreaksused",0,::highestwins); + initstataward("specialistkillstreaksearned",0,::highestwins); + initstataward("killsconfirmed",0,::highestwins); + initstataward("killsdenied",0,::highestwins); + initstataward("holdingteamdefenderflag",0,::highestwins); + initstataward("damagedone",0,::highestwins); + initstataward("damagetaken",0,::lowestwins); + if(!maps\mp\_utility::matchmakinggame()) + { + initstataward("killcamskipped",0,::highestwins); + initstataward("killsteals",0,::highestwins); + if(!maps\mp\_utility::getgametypenumlives()) + { + initstataward("deathstreak",0,::highestwins); + } + + initstataward("shortestlife",9999999,::lowestwins); + initstataward("suicides",0,::highestwins); + initstataward("mostff",0,::highestwins); + initstataward("shotgundeaths",0,::highestwins); + initstataward("shielddeaths",0,::highestwins); + initstataward("flankdeaths",0,::highestwins); + } +} + +//Function Number: 5 +initbaseaward(param_00) +{ + level.awards[param_00] = spawnstruct(); + level.awards[param_00].winners = []; + level.awards[param_00].exclusive = 1; +} + +//Function Number: 6 +initawardprocess(param_00,param_01,param_02,param_03) +{ + if(isdefined(param_01)) + { + level.awards[param_00].process = param_01; + } + + if(isdefined(param_02)) + { + level.awards[param_00].var1 = param_02; + } + + if(isdefined(param_03)) + { + level.awards[param_00].var2 = param_03; + } +} + +//Function Number: 7 +initstat(param_00,param_01) +{ + initbaseaward(param_00); + level.awards[param_00].defaultvalue = param_01; + level.awards[param_00].type = "stat"; +} + +//Function Number: 8 +initstataward(param_00,param_01,param_02,param_03,param_04) +{ + initbaseaward(param_00); + initawardprocess(param_00,param_02,param_03,param_04); + level.awards[param_00].defaultvalue = param_01; + level.awards[param_00].type = "stat"; +} + +//Function Number: 9 +initderivedaward(param_00,param_01,param_02,param_03) +{ + initbaseaward(param_00); + initawardprocess(param_00,param_01,param_02,param_03); + level.awards[param_00].type = "derived"; +} + +//Function Number: 10 +initawardflag(param_00,param_01,param_02,param_03) +{ + initbaseaward(param_00); + initawardprocess(param_00,param_01,param_02,param_03); + level.awards[param_00].type = "flag"; +} + +//Function Number: 11 +initmultiaward(param_00,param_01,param_02) +{ + initbaseaward(param_00); + level.awards[param_00].award1_ref = param_01; + level.awards[param_00].award2_ref = param_02; + level.awards[param_00].type = "multi"; +} + +//Function Number: 12 +initthresholdaward(param_00,param_01,param_02,param_03) +{ + initbaseaward(param_00); + initawardprocess(param_00,param_01,param_02,param_03); + level.awards[param_00].type = "threshold"; +} + +//Function Number: 13 +setmatchrecordifgreater(param_00) +{ + var_01 = maps\mp\_utility::getplayerstat(param_00); + var_02 = maps\mp\_utility::getplayerstattime(param_00); + var_03 = getawardrecord(param_00); + var_04 = getawardrecordtime(param_00); + if(!isdefined(var_03) || var_01 > var_03) + { + clearawardwinners(param_00); + addawardwinner(param_00,self.clientid); + setawardrecord(param_00,var_01,var_02); + return; + } + + if(var_01 == var_03) + { + if(isawardexclusive(param_00)) + { + if(!isdefined(var_04) || var_02 < var_04) + { + clearawardwinners(param_00); + addawardwinner(param_00,self.clientid); + setawardrecord(param_00,var_01,var_02); + return; + } + + return; + } + + addawardwinner(param_00,self.clientid); + return; + } +} + +//Function Number: 14 +setmatchrecordiflower(param_00) +{ + var_01 = maps\mp\_utility::getplayerstat(param_00); + var_02 = maps\mp\_utility::getplayerstattime(param_00); + var_03 = getawardrecord(param_00); + var_04 = getawardrecordtime(param_00); + if(!isdefined(var_03) || var_01 < var_03) + { + clearawardwinners(param_00); + addawardwinner(param_00,self.clientid); + setawardrecord(param_00,var_01,var_02); + return; + } + + if(var_01 == var_03) + { + if(isawardexclusive(param_00)) + { + if(!isdefined(var_04) || var_02 < var_04) + { + clearawardwinners(param_00); + addawardwinner(param_00,self.clientid); + setawardrecord(param_00,var_01,var_02); + return; + } + + return; + } + + addawardwinner(param_00,self.clientid); + return; + } +} + +//Function Number: 15 +getdecodedratio(param_00) +{ + var_01 = getratioloval(param_00); + var_02 = getratiohival(param_00); + if(!var_01) + { + return var_02 + 0.001; + } + + return var_02 / var_01; +} + +//Function Number: 16 +setpersonalbestifgreater(param_00) +{ + var_01 = self getplayerdata("bests",param_00); + var_02 = maps\mp\_utility::getplayerstat(param_00); + if(var_01 == 0 || var_02 > var_01) + { + var_02 = getformattedvalue(param_00,var_02); + self setplayerdata("bests",param_00,var_02); + } +} + +//Function Number: 17 +setpersonalbestiflower(param_00) +{ + var_01 = self getplayerdata("bests",param_00); + var_02 = maps\mp\_utility::getplayerstat(param_00); + if(var_01 == 0 || var_02 < var_01) + { + var_02 = getformattedvalue(param_00,var_02); + self setplayerdata("bests",param_00,var_02); + } +} + +//Function Number: 18 +incplayerrecord(param_00) +{ + var_01 = self getplayerdata("awards",param_00); + self setplayerdata("awards",param_00,var_01 + 1); +} + +//Function Number: 19 +addawardwinner(param_00,param_01) +{ + foreach(var_03 in level.awards[param_00].winners) + { + if(var_03 == param_01) + { + return; + } + } + + level.awards[param_00].winners[level.awards[param_00].winners.size] = param_01; +} + +//Function Number: 20 +getawardwinners(param_00) +{ + return level.awards[param_00].winners; +} + +//Function Number: 21 +clearawardwinners(param_00) +{ + level.awards[param_00].winners = []; +} + +//Function Number: 22 +setawardrecord(param_00,param_01,param_02) +{ + level.awards[param_00].value = param_01; + level.awards[param_00].time = param_02; +} + +//Function Number: 23 +getawardrecord(param_00) +{ + return level.awards[param_00].value; +} + +//Function Number: 24 +getawardrecordtime(param_00) +{ + return level.awards[param_00].time; +} + +//Function Number: 25 +assignawards() +{ + foreach(var_01 in level.players) + { + if(!var_01 maps\mp\_utility::rankingenabled()) + { + return; + } + + var_02 = var_01 maps\mp\_utility::getplayerstat("kills"); + var_03 = var_01 maps\mp\_utility::getplayerstat("deaths"); + if(var_03 == 0) + { + var_03 = 1; + } + + var_01 maps\mp\_utility::setplayerstat("kdratio",var_02 / var_03); + if(isalive(var_01)) + { + var_04 = gettime() - var_01.spawntime; + var_01 maps\mp\_utility::setplayerstatifgreater("longestlife",var_04); + } + } + + foreach(var_0B, var_07 in level.awards) + { + if(!isdefined(level.awards[var_0B].process)) + { + continue; + } + + var_08 = level.awards[var_0B].process; + var_09 = level.awards[var_0B].var1; + var_0A = level.awards[var_0B].var2; + if(isdefined(var_09) && isdefined(var_0A)) + { + [[ var_08 ]](var_0B,var_09,var_0A); + continue; + } + + if(isdefined(var_09)) + { + [[ var_08 ]](var_0B,var_09); + continue; + } + + [[ var_08 ]](var_0B); + } + + foreach(var_0B, var_07 in level.awards) + { + if(!ismultiaward(var_0B)) + { + continue; + } + + var_0D = level.awards[var_0B].award1_ref; + var_0E = level.awards[var_0B].award2_ref; + var_0F = getawardwinners(var_0D); + var_10 = getawardwinners(var_0E); + if(!isdefined(var_0F) || !isdefined(var_10)) + { + continue; + } + + foreach(var_12 in var_0F) + { + foreach(var_14 in var_10) + { + if(var_12 == var_14) + { + addawardwinner(var_0B,var_12); + var_01 = maps\mp\_utility::playerforclientid(var_12); + var_15 = var_01 maps\mp\_utility::getplayerstat(var_0D); + var_16 = var_01 maps\mp\_utility::getplayerstat(var_0E); + var_01 maps\mp\_utility::setplayerstat(var_0B,encoderatio(var_15,var_16)); + } + } + } + } + + foreach(var_0B, var_07 in level.awards) + { + if(!isawardflag(var_0B)) + { + assignaward(var_0B); + } + } + + foreach(var_01 in level.players) + { + var_1B = var_01 getplayerdata("round","awardCount"); + for(var_1C = 0;var_1C < var_1B && var_1C < 3;var_1C++) + { + var_07 = var_01 getplayerdata("round","awards",var_1C,"award"); + var_1D = var_01 getplayerdata("round","awards",var_1C,"value"); + } + } +} + +//Function Number: 26 +assignaward(param_00) +{ + var_01 = getawardwinners(param_00); + if(!isdefined(var_01)) + { + return; + } + + foreach(var_03 in var_01) + { + foreach(var_05 in level.players) + { + if(var_05.clientid == var_03) + { + var_05 giveaward(param_00); + } + } + } +} + +//Function Number: 27 +getawardtype(param_00) +{ + if(isdefined(level.awards[param_00].type)) + { + return level.awards[param_00].type; + } + + return "none"; +} + +//Function Number: 28 +ismultiaward(param_00) +{ + return getawardtype(param_00) == "multi"; +} + +//Function Number: 29 +isstataward(param_00) +{ + return getawardtype(param_00) == "stat"; +} + +//Function Number: 30 +isthresholdaward(param_00) +{ + return getawardtype(param_00) == "threshold"; +} + +//Function Number: 31 +isawardflag(param_00) +{ + return getawardtype(param_00) == "flag"; +} + +//Function Number: 32 +isawardexclusive(param_00) +{ + if(isdefined(level.awards[param_00].exclusive)) + { + return level.awards[param_00].exclusive; + } + + return 1; +} + +//Function Number: 33 +hasdisplayvalue(param_00) +{ + var_01 = getawardtype(param_00); + switch(var_01) + { + case "derived": + var_02 = 0; + break; + + case "stat": + case "multi": + default: + var_02 = 1; + break; + } + + return var_02; +} + +//Function Number: 34 +giveaward(param_00) +{ + var_01 = self getplayerdata("round","awardCount"); + incplayerrecord(param_00); + if(hasdisplayvalue(param_00)) + { + if(isstataward(param_00)) + { + } + + var_02 = maps\mp\_utility::getplayerstat(param_00); + } + else + { + var_02 = 1; + } + + var_02 = getformattedvalue(param_00,var_02); + if(var_01 < 5) + { + self setplayerdata("round","awards",var_01,"award",param_00); + self setplayerdata("round","awards",var_01,"value",var_02); + } + + var_01++; + self setplayerdata("round","awardCount",var_01); + maps\mp\_matchdata::logaward(param_00); + if(var_01 == 1) + { + maps\mp\_highlights::givehighlight(param_00,var_02); + } +} + +//Function Number: 35 +getformattedvalue(param_00,param_01) +{ + var_02 = tablelookup("mp/awardTable.csv",1,param_00,7); + switch(var_02) + { + case "float": + param_01 = maps\mp\_utility::limitdecimalplaces(param_01,2); + param_01 = param_01 * 100; + break; + + case "ratio": + case "multi": + case "time": + case "count": + case "none": + case "distance": + default: + break; + } + + param_01 = int(param_01); + return param_01; +} + +//Function Number: 36 +highestwins(param_00,param_01) +{ + foreach(var_03 in level.players) + { + if(var_03 maps\mp\_utility::rankingenabled() && var_03 statvaluechanged(param_00) && !isdefined(param_01) || var_03 maps\mp\_utility::getplayerstat(param_00) >= param_01) + { + var_03 setmatchrecordifgreater(param_00); + if(!isawardflag(param_00)) + { + var_03 setpersonalbestifgreater(param_00); + } + } + } +} + +//Function Number: 37 +lowestwins(param_00,param_01) +{ + foreach(var_03 in level.players) + { + if(var_03 maps\mp\_utility::rankingenabled() && var_03 statvaluechanged(param_00) && !isdefined(param_01) || var_03 maps\mp\_utility::getplayerstat(param_00) <= param_01) + { + var_03 setmatchrecordiflower(param_00); + if(!isawardflag(param_00)) + { + var_03 setpersonalbestiflower(param_00); + } + } + } +} + +//Function Number: 38 +lowestwithhalfplayedtime(param_00) +{ + var_01 = maps\mp\_utility::gettimepassed() / 1000; + var_02 = var_01 * 0.5; + foreach(var_04 in level.players) + { + if(var_04.hasspawned && var_04.timeplayed["total"] >= var_02) + { + var_04 setmatchrecordiflower(param_00); + if(!isawardflag(param_00)) + { + var_04 setpersonalbestiflower(param_00); + } + } + } +} + +//Function Number: 39 +statvaluechanged(param_00) +{ + var_01 = maps\mp\_utility::getplayerstat(param_00); + var_02 = level.awards[param_00].defaultvalue; + if(var_01 == var_02) + { + return 0; + } + + return 1; +} + +//Function Number: 40 +isatleast(param_00,param_01,param_02) +{ + foreach(var_04 in level.players) + { + var_05 = var_04 maps\mp\_utility::getplayerstat(param_02); + var_06 = var_05; + if(var_06 >= param_01) + { + addawardwinner(param_00,var_04.clientid); + } + + if(isthresholdaward(param_00) || isawardflag(param_00)) + { + var_04 maps\mp\_utility::setplayerstat(param_00,var_05); + } + } +} + +//Function Number: 41 +isatmost(param_00,param_01,param_02) +{ + foreach(var_04 in level.players) + { + var_05 = var_04 maps\mp\_utility::getplayerstat(param_02); + if(var_05 <= param_01) + { + addawardwinner(param_00,var_04.clientid); + } + } +} + +//Function Number: 42 +isatmostwithhalfplayedtime(param_00,param_01,param_02) +{ + var_03 = maps\mp\_utility::gettimepassed() / 1000; + var_04 = var_03 * 0.5; + foreach(var_06 in level.players) + { + if(var_06.hasspawned && var_06.timeplayed["total"] >= var_04) + { + var_07 = var_06 maps\mp\_utility::getplayerstat(param_02); + if(var_07 <= param_01) + { + addawardwinner(param_00,var_06.clientid); + } + } + } +} + +//Function Number: 43 +setratio(param_00,param_01,param_02) +{ + foreach(var_04 in level.players) + { + var_05 = var_04 maps\mp\_utility::getplayerstat(param_01); + var_06 = var_04 maps\mp\_utility::getplayerstat(param_02); + if(var_06 == 0) + { + var_04 maps\mp\_utility::setplayerstat(param_00,var_05); + continue; + } + + var_07 = var_05 / var_06; + var_04 maps\mp\_utility::setplayerstat(param_00,var_07); + } +} + +//Function Number: 44 +getkillstreakawardref(param_00) +{ + switch(param_00) + { + case "uav_support": + case "counter_uav": + case "triple_uav": + case "double_uav": + case "uav": + return "uavs"; + + case "super_airstrike": + case "airstrike": + case "harrier_airstrike": + case "stealth_airstrike": + case "precision_airstrike": + return "airstrikes"; + + case "helicopter_blackbox": + case "helicopter_mk19": + case "helicopter_minigun": + case "littlebird_support": + case "littlebird_flock": + case "helicopter_flares": + case "helicopter": + return "helicopters"; + + default: + return undefined; + } +} + +//Function Number: 45 +monitorreloads() +{ + level endon("game_ended"); + self endon("spawned_player"); + self endon("death"); + self endon("disconnect"); + for(;;) + { + self waittill("reload"); + maps\mp\_utility::incplayerstat("mostreloads",1); + } +} + +//Function Number: 46 +monitorshotsfired() +{ + level endon("game_ended"); + self endon("spawned_player"); + self endon("death"); + self endon("disconnect"); + for(;;) + { + self waittill("weapon_fired"); + maps\mp\_utility::incplayerstat("mostshotsfired",1); + } +} + +//Function Number: 47 +monitorswaps() +{ + level endon("game_ended"); + self endon("spawned_player"); + self endon("death"); + self endon("disconnect"); + var_00 = "none"; + for(;;) + { + self waittill("weapon_change",var_01); + if(var_00 == var_01) + { + continue; + } + + if(var_01 == "none") + { + continue; + } + + if(!maps\mp\gametypes\_weapons::isprimaryweapon(var_01)) + { + continue; + } + + var_00 = var_01; + maps\mp\_utility::incplayerstat("mostswaps",1); + var_02 = 0; + foreach(var_04 in self.usedweapons) + { + if(var_01 == var_04) + { + var_02 = 1; + break; + } + } + + if(!var_02) + { + self.usedweapons[self.usedweapons.size] = var_01; + maps\mp\_utility::incplayerstat("mostweaponsused",1); + } + } +} + +//Function Number: 48 +monitormovementdistance() +{ + level endon("game_ended"); + self endon("disconnect"); + for(;;) + { + foreach(var_01 in level.players) + { + if(!isalive(var_01)) + { + continue; + } + + if(var_01.deaths != var_01.previousdeaths) + { + var_01.prevpos = var_01.origin; + var_01.previousdeaths = var_01.deaths; + } + + var_02 = distance(var_01.origin,var_01.prevpos); + var_01 maps\mp\_utility::incplayerstat("distancetraveled",var_02); + var_01.prevpos = var_01.origin; + var_01.altitudepolls++; + var_01.totalaltitudesum = var_01.totalaltitudesum + var_01.origin[2]; + var_03 = var_01.totalaltitudesum / var_01.altitudepolls; + var_01 maps\mp\_utility::setplayerstat("leastavgalt",var_03); + var_01 maps\mp\_utility::setplayerstat("greatestavgalt",var_03); + wait 0.05; + } + + wait 0.05; + } +} + +//Function Number: 49 +monitorpositioncamping() +{ + level endon("game_ended"); + self endon("disconnect"); + self.lastcampchecked = gettime(); + self.positionarray = []; + var_00 = 512; + for(;;) + { + if(!isalive(self)) + { + wait 0.5; + self.lastcampchecked = gettime(); + self.positionarray = []; + continue; + } + + self.positionarray[self.positionarray.size] = self.origin; + if(gettime() - self.lastcampchecked >= 15000) + { + if(distance(self.positionarray[0],self.origin) < var_00 && distance(self.positionarray[1],self.positionarray[0]) < var_00) + { + var_01 = gettime() - self.lastcampchecked; + maps\mp\_utility::incplayerstat("timeinspot",var_01); + } + + self.positionarray = []; + self.lastcampchecked = gettime(); + } + + wait 5; + } +} + +//Function Number: 50 +encoderatio(param_00,param_01) +{ + return param_00 + param_01 << 16; +} + +//Function Number: 51 +getratiohival(param_00) +{ + return param_00 & -1; +} + +//Function Number: 52 +getratioloval(param_00) +{ + return param_00 >> 16; +} + +//Function Number: 53 +monitorenemydistance() +{ + level endon("game_ended"); + self endon("disconnect"); + while(level.players.size < 3) + { + wait 1; + } + + for(;;) + { + foreach(var_01 in level.players) + { + if(!isdefined(var_01)) + { + continue; + } + + if(var_01.team == "spectator") + { + continue; + } + + if(!isalive(var_01)) + { + continue; + } + + var_02 = sortbydistance(level.players,var_01.origin); + if(!var_02.size) + { + wait 0.05; + continue; + } + + if(var_02.size < 2) + { + wait 0.05; + continue; + } + + if(var_02[1].team != var_01.team) + { + var_01 maps\mp\_utility::incplayerstat("closertoenemies",0.05); + } + + wait 0.05; + } + + wait 0.05; + } +} + +//Function Number: 54 +monitorexplosionssurvived() +{ + level endon("game_ended"); + self endon("spawned_player"); + self endon("death"); + self endon("disconnect"); + for(;;) + { + self waittill("survived_explosion",var_00); + if(isdefined(var_00) && isplayer(var_00) && self == var_00) + { + continue; + } + + maps\mp\_utility::incplayerstat("explosionssurvived",1); + wait 0.05; + } +} + +//Function Number: 55 +monitorshieldblocks() +{ + level endon("game_ended"); + self endon("spawned_player"); + self endon("death"); + self endon("disconnect"); + for(;;) + { + self waittill("shield_blocked"); + maps\mp\_utility::incplayerstat("shieldblocks",1); + wait 0.05; + } +} + +//Function Number: 56 +monitorflashhits() +{ + level endon("game_ended"); + self endon("spawned_player"); + self endon("death"); + self endon("disconnect"); + for(;;) + { + self waittill("flash_hit"); + maps\mp\_utility::incplayerstat("fbhits",1); + wait 0.05; + } +} + +//Function Number: 57 +monitorstunhits() +{ + level endon("game_ended"); + self endon("spawned_player"); + self endon("death"); + self endon("disconnect"); + for(;;) + { + self waittill("stun_hit"); + maps\mp\_utility::incplayerstat("stunhits",1); + wait 0.05; + } +} + +//Function Number: 58 +monitorstancetime() +{ + level endon("game_ended"); + self endon("spawned_player"); + self endon("death"); + self endon("disconnect"); + for(;;) + { + if(self getstance() == "crouch") + { + maps\mp\_utility::incplayerstat("crouchtime",500); + } + else if(self getstance() == "prone") + { + maps\mp\_utility::incplayerstat("pronetime",500); + } + + wait 0.5; + } +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/_compass.gsc b/MW3/PC/MP/maps/mp/_compass.gsc new file mode 100644 index 0000000..ef62c71 --- /dev/null +++ b/MW3/PC/MP/maps/mp/_compass.gsc @@ -0,0 +1,80 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\_compass.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 46 ms + * Timestamp: 10/27/2023 2:14:55 AM +*******************************************************************/ + +//Function Number: 1 +setupminimap(param_00) +{ + var_01 = level.requiredmapaspectratio; + var_02 = getentarray("minimap_corner","targetname"); + if(var_02.size != 2) + { + return; + } + + var_03 = (var_02[0].origin[0],var_02[0].origin[1],0); + var_04 = (var_02[1].origin[0],var_02[1].origin[1],0); + var_05 = var_04 - var_03; + var_06 = (cos(getnorthyaw()),sin(getnorthyaw()),0); + var_07 = (0 - var_06[1],var_06[0],0); + if(vectordot(var_05,var_07) > 0) + { + if(vectordot(var_05,var_06) > 0) + { + var_08 = var_04; + var_09 = var_03; + } + else + { + var_0A = vecscale(var_08,vectordot(var_07,var_08)); + var_08 = var_04 - var_0A; + var_09 = var_03 + var_0A; + } + } + else if(vectordot(var_07,var_08) > 0) + { + var_0A = vecscale(var_08,vectordot(var_07,var_08)); + var_08 = var_03 + var_0A; + var_09 = var_04 - var_0A; + } + else + { + var_08 = var_05; + var_09 = var_05; + } + + if(var_01 > 0) + { + var_0B = vectordot(var_08 - var_09,var_06); + var_0C = vectordot(var_08 - var_09,var_07); + var_0D = var_0C / var_0B; + if(var_0D < var_01) + { + var_0E = var_01 / var_0D; + var_0F = vecscale(var_07,var_0C * var_0E - 1 * 0.5); + } + else + { + var_0E = var_0F / var_03; + var_0F = vecscale(var_07,var_0C * var_0F - 1 * 0.5); + } + + var_08 = var_08 + var_0F; + var_09 = var_09 - var_0F; + } + + level.mapsize = vectordot(var_08 - var_09,var_06); + setminimap(param_00,var_08[0],var_08[1],var_09[0],var_09[1]); +} + +//Function Number: 2 +vecscale(param_00,param_01) +{ + return (param_00[0] * param_01,param_00[1] * param_01,param_00[2] * param_01); +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/_createfx.gsc b/MW3/PC/MP/maps/mp/_createfx.gsc new file mode 100644 index 0000000..6546d62 --- /dev/null +++ b/MW3/PC/MP/maps/mp/_createfx.gsc @@ -0,0 +1,67 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\_createfx.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 4 + * Decompile Time: 77 ms + * Timestamp: 10/27/2023 2:14:56 AM +*******************************************************************/ + +//Function Number: 1 +createfx() +{ + level.func_position_player = ::common_scripts\utility::void; + level.func_position_player_get = ::func_position_player_get; + level.func_loopfxthread = ::common_scripts\_fx::loopfxthread; + level.func_oneshotfxthread = ::common_scripts\_fx::oneshotfxthread; + level.func_create_loopsound = ::common_scripts\_fx::create_loopsound; + level.func_updatefx = ::common_scripts\_createfx::restart_fx_looper; + level.func_process_fx_rotater = ::common_scripts\_createfx::process_fx_rotater; + level.mp_createfx = 1; + level.callbackstartgametype = ::common_scripts\utility::void; + level.callbackplayerconnect = ::common_scripts\utility::void; + level.callbackplayerdisconnect = ::common_scripts\utility::void; + level.callbackplayerdamage = ::common_scripts\utility::void; + level.callbackplayerkilled = ::common_scripts\utility::void; + level.callbackcodeendgame = ::common_scripts\utility::void; + level.callbackplayerlaststand = ::common_scripts\utility::void; + level.callbackplayerconnect = ::callback_playerconnect; + level.callbackplayermigrated = ::common_scripts\utility::void; + thread common_scripts\_createfx::func_get_level_fx(); + common_scripts\_createfx::createfx_common(); + level waittill("eternity"); +} + +//Function Number: 2 +func_position_player_get(param_00) +{ + return level.player.origin; +} + +//Function Number: 3 +callback_playerconnect() +{ + self waittill("begin"); + if(!isdefined(level.player)) + { + var_00 = getentarray("mp_global_intermission","classname"); + self spawn(var_00[0].origin,var_00[0].angles); + maps\mp\gametypes\_playerlogic::updatesessionstate("playing",""); + self.maxhealth = 10000000; + self.health = 10000000; + level.player = self; + thread common_scripts\_createfx::createfxlogic(); + thread ufo_mode(); + return; + } + + kick(self getentitynumber()); +} + +//Function Number: 4 +ufo_mode() +{ + level.player openpopupmenu("painter_mp"); + level.player closepopupmenu("painter_mp"); +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/_defcon.gsc b/MW3/PC/MP/maps/mp/_defcon.gsc new file mode 100644 index 0000000..4e96f93 --- /dev/null +++ b/MW3/PC/MP/maps/mp/_defcon.gsc @@ -0,0 +1,140 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\_defcon.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 4 + * Decompile Time: 79 ms + * Timestamp: 10/27/2023 2:14:56 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + if(!isdefined(level.defconmode) || level.defconmode == 0) + { + return; + } + + if(!isdefined(game["defcon"])) + { + game["defcon"] = 4; + } + + makedvarserverinfo("scr_defcon",game["defcon"]); + level.defconstreakadd[5] = 0; + level.defconstreakadd[4] = 0; + level.defconstreakadd[3] = -1; + level.defconstreakadd[2] = -1; + level.defconstreakadd[1] = -1; + level.defconpointmod[5] = 1; + level.defconpointmod[4] = 1; + level.defconpointmod[3] = 1; + level.defconpointmod[2] = 1; + level.defconpointmod[1] = 2; + updatedefcon(game["defcon"]); + thread defconkillstreakthread(); +} + +//Function Number: 2 +defconkillstreakwait(param_00) +{ + for(;;) + { + level waittill("player_got_killstreak_" + param_00,var_01); + level notify("defcon_killstreak",param_00,var_01); + } +} + +//Function Number: 3 +defconkillstreakthread() +{ + level endon("game_ended"); + var_00 = 10; + level thread defconkillstreakwait(var_00); + level thread defconkillstreakwait(var_00 - 1); + level thread defconkillstreakwait(var_00 - 2); + level thread defconkillstreakwait(var_00 * 2); + level thread defconkillstreakwait(var_00 * 2 - 1); + level thread defconkillstreakwait(var_00 * 2 - 2); + level thread defconkillstreakwait(var_00 * 3); + level thread defconkillstreakwait(var_00 * 3 - 1); + level thread defconkillstreakwait(var_00 * 3 - 2); + for(;;) + { + level waittill("defcon_killstreak",var_01,var_02); + if(game["defcon"] <= 1) + { + continue; + } + + if(var_01 % var_00 == var_00 - 2) + { + foreach(var_04 in level.players) + { + if(!isalive(var_04)) + { + continue; + } + + var_04 thread maps\mp\gametypes\_hud_message::playercardsplashnotify("two_from_defcon",var_02); + } + + continue; + } + + if(var_01 % var_00 == var_00 - 1) + { + foreach(var_04 in level.players) + { + if(!isalive(var_04)) + { + continue; + } + + var_04 thread maps\mp\gametypes\_hud_message::playercardsplashnotify("one_from_defcon",var_02); + } + + continue; + } + + updatedefcon(game["defcon"] - 1,var_02,var_01); + } +} + +//Function Number: 4 +updatedefcon(param_00,param_01,param_02) +{ + param_00 = int(param_00); + var_03 = game["defcon"]; + game["defcon"] = param_00; + level.objectivepointsmod = level.defconpointmod[param_00]; + setdvar("scr_defcon",game["defcon"]); + if(isdefined(param_01)) + { + param_01 notify("changed_defcon"); + } + + if(param_00 == var_03) + { + return; + } + + if(game["defcon"] == 3 && isdefined(param_01)) + { + param_01 maps\mp\killstreaks\_killstreaks::givekillstreak("airdrop_mega"); + param_01 thread maps\mp\gametypes\_hud_message::splashnotify("caused_defcon",param_02); + } + + foreach(var_05 in level.players) + { + if(isalive(var_05)) + { + var_05 thread maps\mp\gametypes\_hud_message::defconsplashnotify(game["defcon"],param_00 < var_03); + if(isdefined(param_01)) + { + var_05 thread maps\mp\gametypes\_hud_message::playercardsplashnotify("changed_defcon",param_01); + } + } + } +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/_destructables.gsc b/MW3/PC/MP/maps/mp/_destructables.gsc new file mode 100644 index 0000000..42382a1 --- /dev/null +++ b/MW3/PC/MP/maps/mp/_destructables.gsc @@ -0,0 +1,142 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\_destructables.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 7 + * Decompile Time: 128 ms + * Timestamp: 10/27/2023 2:14:57 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + var_00 = getentarray("destructable","targetname"); + if(getdvar("scr_destructables") == "0") + { + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + var_00[var_01] delete(); + } + + return; + } + + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + var_00[var_01] thread destructable_think(); + } +} + +//Function Number: 2 +destructable_think() +{ + var_00 = 40; + var_01 = 0; + if(isdefined(self.script_accumulate)) + { + var_00 = self.script_accumulate; + } + + if(isdefined(self.script_threshold)) + { + var_01 = self.script_threshold; + } + + if(isdefined(self.script_destructable_area)) + { + var_02 = strtok(self.script_destructable_area," "); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + blockarea(var_02[var_03]); + } + } + + if(isdefined(self.script_fxid)) + { + self.fx = loadfx(self.script_fxid); + } + + var_04 = 0; + self setcandamage(1); + for(;;) + { + self waittill("damage",var_05,var_06); + if(var_05 >= var_01) + { + var_04 = var_04 + var_05; + if(var_04 >= var_00) + { + thread destructable_destruct(); + return; + } + } + } +} + +//Function Number: 3 +destructable_destruct() +{ + var_00 = self; + if(isdefined(self.script_destructable_area)) + { + var_01 = strtok(self.script_destructable_area," "); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + unblockarea(var_01[var_02]); + } + } + + if(isdefined(var_00.fx)) + { + playfx(var_00.fx,var_00.origin + (0,0,6)); + } + + var_00 delete(); +} + +//Function Number: 4 +blockarea(param_00) +{ + var_01 = getentarray("mp_tdm_spawn","classname"); + blockentsinarea(var_01,param_00); + var_01 = getentarray("mp_dm_spawn","classname"); + blockentsinarea(var_01,param_00); +} + +//Function Number: 5 +blockentsinarea(param_00,param_01) +{ + for(var_02 = 0;var_02 < param_00.size;var_02++) + { + if(!isdefined(param_00[var_02].script_destructable_area) || param_00[var_02].script_destructable_area != param_01) + { + continue; + } + + param_00[var_02].blockedoff = 1; + } +} + +//Function Number: 6 +unblockarea(param_00) +{ + var_01 = getentarray("mp_tdm_spawn","classname"); + unblockentsinarea(var_01,param_00); + var_01 = getentarray("mp_dm_spawn","classname"); + unblockentsinarea(var_01,param_00); +} + +//Function Number: 7 +unblockentsinarea(param_00,param_01) +{ + for(var_02 = 0;var_02 < param_00.size;var_02++) + { + if(!isdefined(param_00[var_02].script_destructable_area) || param_00[var_02].script_destructable_area != param_01) + { + continue; + } + + param_00[var_02].blockedoff = 0; + } +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/_entityheadicons.gsc b/MW3/PC/MP/maps/mp/_entityheadicons.gsc new file mode 100644 index 0000000..a4b89f1 --- /dev/null +++ b/MW3/PC/MP/maps/mp/_entityheadicons.gsc @@ -0,0 +1,358 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\_entityheadicons.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 10 + * Decompile Time: 176 ms + * Timestamp: 10/27/2023 2:14:58 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + if(isdefined(level.initedentityheadicons)) + { + return; + } + + level.initedentityheadicons = 1; + game["entity_headicon_allies"] = maps\mp\gametypes\_teams::init("allies"); + game["entity_headicon_axis"] = maps\mp\gametypes\_teams::init("axis"); + precacheshader(game["entity_headicon_allies"]); + precacheshader(game["entity_headicon_axis"]); + if(!level.teambased) + { + } +} + +//Function Number: 2 +setheadicon(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A) +{ + if(!isdefined(self.entityheadicons)) + { + self.entityheadicons = []; + } + + if(!isdefined(param_05)) + { + param_05 = 1; + } + + if(!isdefined(param_06)) + { + param_06 = 0.05; + } + + if(!isdefined(param_07)) + { + param_07 = 1; + } + + if(!isdefined(param_08)) + { + param_08 = 1; + } + + if(!isdefined(param_09)) + { + param_09 = 0; + } + + if(!isdefined(param_0A)) + { + param_0A = 1; + } + + if(!isplayer(param_00) && param_00 == "none") + { + foreach(var_0D, var_0C in self.entityheadicons) + { + if(isdefined(var_0C)) + { + var_0C destroy(); + } + + self.entityheadicons[var_0D] = undefined; + } + + return; + } + + if(isplayer(param_03)) + { + if(isdefined(self.entityheadicons[param_03.guid])) + { + self.entityheadicons[param_03.guid] destroy(); + self.entityheadicons[param_03.guid] = undefined; + } + + if(param_04 == "") + { + return; + } + + if(isdefined(self.entityheadicons[param_03.team])) + { + self.entityheadicons[param_03.team] destroy(); + self.entityheadicons[param_03.team] = undefined; + } + + var_0C = newclienthudelem(param_03); + self.entityheadicons[param_02.guid] = var_0D; + } + else + { + if(isdefined(self.entityheadicons[param_03])) + { + self.entityheadicons[param_03] destroy(); + self.entityheadicons[param_03] = undefined; + } + + if(param_04 == "") + { + return; + } + + foreach(var_0E in self.entityheadicons) + { + if(var_10 == "axis" || var_10 == "allies") + { + continue; + } + + var_0F = maps\mp\_utility::getplayerforguid(var_10); + if(var_0F.team == param_01) + { + self.entityheadicons[var_10] destroy(); + self.entityheadicons[var_10] = undefined; + } + } + + var_0C = newteamhudelem(param_01); + self.entityheadicons[param_01] = var_0C; + } + + if(!isdefined(param_04) || !isdefined(param_05)) + { + param_04 = 10; + param_05 = 10; + } + + var_0C.archived = param_06; + var_0C.x = self.origin[0] + param_03[0]; + var_0C.y = self.origin[1] + param_03[1]; + var_0C.z = self.origin[2] + param_03[2]; + var_0C.alpha = 0.85; + var_0C setshader(param_02,param_04,param_05); + var_0C setwaypoint(param_08,param_09,param_0A,var_0B); + var_0C thread keeppositioned(self,param_03,param_07); + thread destroyiconsondeath(); + if(isplayer(param_01)) + { + var_0C thread destroyonownerdisconnect(param_01); + } + + if(isplayer(self)) + { + var_0C thread destroyonownerdisconnect(self); + } + + return var_0C; +} + +//Function Number: 3 +destroyonownerdisconnect(param_00) +{ + self endon("death"); + param_00 waittill("disconnect"); + self destroy(); +} + +//Function Number: 4 +destroyiconsondeath() +{ + self notify("destroyIconsOnDeath"); + self endon("destroyIconsOnDeath"); + self waittill("death"); + foreach(var_01 in self.entityheadicons) + { + if(!isdefined(var_01)) + { + continue; + } + + var_01 destroy(); + } +} + +//Function Number: 5 +keeppositioned(param_00,param_01,param_02) +{ + self endon("death"); + param_00 endon("death"); + param_00 endon("disconnect"); + var_03 = param_00.origin; + for(;;) + { + if(!isdefined(param_00)) + { + return; + } + + if(var_03 != param_00.origin) + { + var_03 = param_00.origin; + self.x = var_03[0] + param_01[0]; + self.y = var_03[1] + param_01[1]; + self.z = var_03[2] + param_01[2]; + } + + if(param_02 > 0.05) + { + self.alpha = 0.85; + self fadeovertime(param_02); + self.alpha = 0; + } + + wait param_02; + } +} + +//Function Number: 6 +setteamheadicon(param_00,param_01) +{ + if(!level.teambased) + { + return; + } + + if(!isdefined(self.entityheadiconteam)) + { + self.entityheadiconteam = "none"; + self.entityheadicon = undefined; + } + + var_02 = game["entity_headicon_" + param_00]; + self.entityheadiconteam = param_00; + if(isdefined(param_01)) + { + self.entityheadiconoffset = param_01; + } + else + { + self.entityheadiconoffset = (0,0,0); + } + + self notify("kill_entity_headicon_thread"); + if(param_00 == "none") + { + if(isdefined(self.entityheadicon)) + { + self.entityheadicon destroy(); + } + + return; + } + + var_03 = newteamhudelem(param_00); + var_03.archived = 1; + var_03.x = self.origin[0] + self.entityheadiconoffset[0]; + var_03.y = self.origin[1] + self.entityheadiconoffset[1]; + var_03.z = self.origin[2] + self.entityheadiconoffset[2]; + var_03.alpha = 0.8; + var_03 setshader(var_02,10,10); + var_03 setwaypoint(0,0,0,1); + self.entityheadicon = var_03; + thread keepiconpositioned(); + thread destroyheadiconsondeath(); +} + +//Function Number: 7 +setplayerheadicon(param_00,param_01) +{ + if(level.teambased) + { + return; + } + + if(!isdefined(self.entityheadiconteam)) + { + self.entityheadiconteam = "none"; + self.entityheadicon = undefined; + } + + self notify("kill_entity_headicon_thread"); + if(!isdefined(param_00)) + { + if(isdefined(self.entityheadicon)) + { + self.entityheadicon destroy(); + } + + return; + } + + var_02 = param_00.team; + self.entityheadiconteam = var_02; + if(isdefined(param_01)) + { + self.entityheadiconoffset = param_01; + } + else + { + self.entityheadiconoffset = (0,0,0); + } + + var_03 = game["entity_headicon_" + var_02]; + var_04 = newclienthudelem(param_00); + var_04.archived = 1; + var_04.x = self.origin[0] + self.entityheadiconoffset[0]; + var_04.y = self.origin[1] + self.entityheadiconoffset[1]; + var_04.z = self.origin[2] + self.entityheadiconoffset[2]; + var_04.alpha = 0.8; + var_04 setshader(var_03,10,10); + var_04 setwaypoint(0,0,0,1); + self.entityheadicon = var_04; + thread keepiconpositioned(); + thread destroyheadiconsondeath(); +} + +//Function Number: 8 +keepiconpositioned() +{ + self endon("kill_entity_headicon_thread"); + self endon("death"); + var_00 = self.origin; + for(;;) + { + if(var_00 != self.origin) + { + updateheadiconorigin(); + var_00 = self.origin; + } + + wait 0.05; + } +} + +//Function Number: 9 +destroyheadiconsondeath() +{ + self endon("kill_entity_headicon_thread"); + self waittill("death"); + if(!isdefined(self.entityheadicon)) + { + return; + } + + self.entityheadicon destroy(); +} + +//Function Number: 10 +updateheadiconorigin() +{ + self.entityheadicon.x = self.origin[0] + self.entityheadiconoffset[0]; + self.entityheadicon.y = self.origin[1] + self.entityheadiconoffset[1]; + self.entityheadicon.z = self.origin[2] + self.entityheadiconoffset[2]; +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/_events.gsc b/MW3/PC/MP/maps/mp/_events.gsc new file mode 100644 index 0000000..6da0aa2 --- /dev/null +++ b/MW3/PC/MP/maps/mp/_events.gsc @@ -0,0 +1,832 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\_events.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 31 + * Decompile Time: 538 ms + * Timestamp: 10/27/2023 2:15:00 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + maps\mp\gametypes\_rank::registerscoreinfo("headshot",50); + maps\mp\gametypes\_rank::registerscoreinfo("execution",100); + maps\mp\gametypes\_rank::registerscoreinfo("avenger",50); + maps\mp\gametypes\_rank::registerscoreinfo("defender",50); + maps\mp\gametypes\_rank::registerscoreinfo("posthumous",25); + maps\mp\gametypes\_rank::registerscoreinfo("revenge",50); + maps\mp\gametypes\_rank::registerscoreinfo("double",50); + maps\mp\gametypes\_rank::registerscoreinfo("triple",75); + maps\mp\gametypes\_rank::registerscoreinfo("multi",100); + maps\mp\gametypes\_rank::registerscoreinfo("buzzkill",100); + maps\mp\gametypes\_rank::registerscoreinfo("firstblood",100); + maps\mp\gametypes\_rank::registerscoreinfo("comeback",100); + maps\mp\gametypes\_rank::registerscoreinfo("longshot",50); + maps\mp\gametypes\_rank::registerscoreinfo("assistedsuicide",100); + maps\mp\gametypes\_rank::registerscoreinfo("knifethrow",100); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("damage",0); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("heavy_damage",0); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("damaged",0); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("kill",1); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("killed",0); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("healed",0); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("headshot",0); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("melee",0); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("backstab",0); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("longshot",0); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("assistedsuicide",0); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("defender",0); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("avenger",0); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("execution",0); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("comeback",0); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("revenge",0); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("buzzkill",0); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("double",0); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("triple",0); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("multi",0); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("assist",0); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("firstBlood",0); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("capture",1); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("assistedCapture",1); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("plant",1); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("defuse",1); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("vehicleDestroyed",1); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("3streak",0); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("4streak",0); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("5streak",0); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("6streak",0); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("7streak",0); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("8streak",0); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("9streak",0); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("10streak",0); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("regen",0); + precacheshader("crosshair_red"); + level._effect["money"] = loadfx("props/cash_player_drop"); + level.numkills = 0; + level thread onplayerconnect(); +} + +//Function Number: 2 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_00.killedplayers = []; + var_00.killedplayerscurrent = []; + var_00.killedby = []; + var_00.lastkilledby = undefined; + var_00.greatestuniqueplayerkills = 0; + var_00.recentkillcount = 0; + var_00.lastkilltime = 0; + var_00.damagedplayers = []; + var_00 thread monitorcratejacking(); + var_00 thread monitorobjectives(); + var_00 thread monitorhealed(); + } +} + +//Function Number: 3 +damagedplayer(param_00,param_01,param_02) +{ + if(param_01 < 50 && param_01 > 10) + { + maps\mp\killstreaks\_killstreaks::giveadrenaline("damage"); + return; + } + + maps\mp\killstreaks\_killstreaks::giveadrenaline("heavy_damage"); +} + +//Function Number: 4 +killedplayer(param_00,param_01,param_02,param_03) +{ + var_04 = param_01.guid; + var_05 = self.guid; + var_06 = gettime(); + thread updaterecentkills(param_00); + self.lastkilltime = gettime(); + self.lastkilledplayer = param_01; + self.modifiers = []; + level.numkills++; + self.damagedplayers[var_04] = undefined; + if(!maps\mp\_utility::iskillstreakweapon(param_02) && !maps\mp\_utility::isjuggernaut() && !maps\mp\_utility::_hasperk("specialty_explosivebullets")) + { + if(param_02 == "none") + { + return 0; + } + + if(isdefined(self.pers["copyCatLoadout"]) && isdefined(self.pers["copyCatLoadout"]["owner"])) + { + if(param_01 == self.pers["copyCatLoadout"]["owner"]) + { + self.modifiers["clonekill"] = 1; + } + } + + if(param_01.attackers.size == 1 && !isdefined(param_01.attackers[param_01.guid])) + { + var_0A = maps\mp\_utility::getweaponclass(param_02); + if(var_0A == "weapon_sniper" && param_03 != "MOD_MELEE" && gettime() == param_01.attackerdata[self.guid].firsttimedamaged) + { + self.modifiers["oneshotkill"] = 1; + thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_ONE_SHOT_KILL"); + } + } + + if(isdefined(param_01.throwinggrenade) && param_01.throwinggrenade == "frag_grenade_mp") + { + self.modifiers["cooking"] = 1; + } + + if(isdefined(self.assistedsuicide) && self.assistedsuicide) + { + assistedsuicide(param_00,param_02,param_03); + } + + if(level.numkills == 1) + { + firstblood(param_00,param_02,param_03); + } + + if(self.pers["cur_death_streak"] > 3) + { + comeback(param_00,param_02,param_03); + } + + if(param_03 == "MOD_HEAD_SHOT") + { + if(isdefined(param_01.laststand)) + { + execution(param_00,param_02,param_03); + } + else + { + headshot(param_00,param_02,param_03); + } + } + + if(isdefined(self.wasti) && self.wasti && gettime() - self.spawntime <= 5000) + { + self.modifiers["jackintheboxkill"] = 1; + } + + if(!isalive(self) && self.deathtime + 800 < gettime()) + { + postdeathkill(param_00); + } + + var_0B = 0; + if(level.teambased && var_06 - param_01.lastkilltime < 500) + { + if(param_01.lastkilledplayer != self) + { + avengedplayer(param_00,param_02,param_03); + } + } + + foreach(var_0E, var_0D in param_01.damagedplayers) + { + if(var_0E == self.guid) + { + continue; + } + + if(level.teambased && var_06 - var_0D < 500) + { + defendedplayer(param_00,param_02,param_03); + } + } + + if(isdefined(param_01.attackerposition)) + { + var_0F = param_01.attackerposition; + } + else + { + var_0F = self.origin; + } + + if(islongshot(self,param_02,param_03,var_0F,param_01)) + { + thread longshot(param_00,param_02,param_03); + } + + if(param_01.pers["cur_kill_streak"] > 0 && isdefined(param_01.killstreaks[param_01.pers["cur_kill_streak"] + 1])) + { + buzzkill(param_00,param_01,param_02,param_03); + } + + thread checkmatchdatakills(param_00,param_01,param_02,param_03); + } + + if(!isdefined(self.killedplayers[var_04])) + { + self.killedplayers[var_04] = 0; + } + + if(!isdefined(self.killedplayerscurrent[var_04])) + { + self.killedplayerscurrent[var_04] = 0; + } + + if(!isdefined(param_01.killedby[var_05])) + { + param_01.killedby[var_05] = 0; + } + + self.killedplayers[var_04]++; + if(self.killedplayers[var_04] > self.greatestuniqueplayerkills) + { + maps\mp\_utility::setplayerstat("killedsameplayer",self.killedplayers[var_04]); + } + + self.killedplayerscurrent[var_04]++; + param_01.killedby[var_05]++; + param_01.lastkilledby = self; +} + +//Function Number: 5 +islongshot(param_00,param_01,param_02,param_03,param_04) +{ + if(isalive(param_00) && !param_00 maps\mp\_utility::isusingremote() && param_02 == "MOD_RIFLE_BULLET" || param_02 == "MOD_PISTOL_BULLET" || param_02 == "MOD_HEAD_SHOT" && !maps\mp\_utility::iskillstreakweapon(param_01) && !isdefined(param_00.assistedsuicide)) + { + var_05 = maps\mp\_utility::getweaponclass(param_01); + switch(var_05) + { + case "weapon_pistol": + var_06 = 800; + break; + + case "weapon_machine_pistol": + case "weapon_smg": + var_06 = 1200; + break; + + case "weapon_lmg": + case "weapon_assault": + var_06 = 1500; + break; + + case "weapon_sniper": + var_06 = 2000; + break; + + case "weapon_shotgun": + var_06 = 500; + break; + + case "weapon_projectile": + default: + var_06 = 1536; + break; + } + + if(distance(param_03,param_04.origin) > var_06) + { + if(param_00 isitemunlocked("specialty_holdbreath") && param_00 maps\mp\_utility::_hasperk("specialty_holdbreath")) + { + param_00 maps\mp\gametypes\_missions::processchallenge("ch_longdistance"); + } + + return 1; + } + } + + return 0; +} + +//Function Number: 6 +checkmatchdatakills(param_00,param_01,param_02,param_03) +{ + var_04 = maps\mp\_utility::getweaponclass(param_02); + var_05 = 0; + thread campercheck(); + if(isdefined(self.lastkilledby) && self.lastkilledby == param_01) + { + self.lastkilledby = undefined; + revenge(param_00); + playfx(level._effect["money"],param_01 gettagorigin("j_spine4")); + } + + if(param_01.idflags & level.idflags_penetration) + { + maps\mp\_utility::incplayerstat("bulletpenkills",1); + } + + if(self.pers["rank"] < param_01.pers["rank"]) + { + maps\mp\_utility::incplayerstat("higherrankkills",1); + } + + if(self.pers["rank"] > param_01.pers["rank"]) + { + maps\mp\_utility::incplayerstat("lowerrankkills",1); + } + + if(isdefined(self.infinalstand) && self.infinalstand) + { + maps\mp\_utility::incplayerstat("laststandkills",1); + } + + if(isdefined(param_01.infinalstand) && param_01.infinalstand) + { + maps\mp\_utility::incplayerstat("laststanderkills",1); + } + + if(self getcurrentweapon() != self.primaryweapon && self getcurrentweapon() != self.secondaryweapon) + { + maps\mp\_utility::incplayerstat("otherweaponkills",1); + } + + var_06 = gettime() - param_01.spawntime; + if(!maps\mp\_utility::matchmakinggame()) + { + param_01 maps\mp\_utility::setplayerstatiflower("shortestlife",var_06); + } + + param_01 maps\mp\_utility::setplayerstatifgreater("longestlife",var_06); + if(param_03 != "MOD_MELEE") + { + switch(var_04) + { + case "weapon_pistol": + case "weapon_projectile": + case "weapon_shotgun": + case "weapon_lmg": + case "weapon_sniper": + case "weapon_assault": + case "weapon_smg": + checkmatchdataweaponkills(param_01,param_02,param_03,var_04); + break; + + case "weapon_explosive": + case "weapon_grenade": + checkmatchdataequipmentkills(param_01,param_02,param_03); + break; + + default: + break; + } + } +} + +//Function Number: 7 +checkmatchdataweaponkills(param_00,param_01,param_02,param_03) +{ + var_04 = self; + var_05 = undefined; + var_06 = undefined; + var_07 = undefined; + switch(param_03) + { + case "weapon_pistol": + var_05 = "pistolkills"; + var_06 = "pistolheadshots"; + break; + + case "weapon_smg": + var_05 = "smgkills"; + var_06 = "smgheadshots"; + break; + + case "weapon_assault": + var_05 = "arkills"; + var_06 = "arheadshots"; + break; + + case "weapon_projectile": + if(weaponclass(param_01) == "rocketlauncher") + { + var_05 = "rocketkills"; + } + break; + + case "weapon_sniper": + var_05 = "sniperkills"; + var_06 = "sniperheadshots"; + break; + + case "weapon_shotgun": + var_05 = "shotgunkills"; + var_06 = "shotgunheadshots"; + var_07 = "shotgundeaths"; + break; + + case "weapon_lmg": + var_05 = "lmgkills"; + var_06 = "lmgheadshots"; + break; + + default: + break; + } + + if(isdefined(var_05)) + { + var_04 maps\mp\_utility::incplayerstat(var_05,1); + } + + if(isdefined(var_06) && param_02 == "MOD_HEAD_SHOT") + { + var_04 maps\mp\_utility::incplayerstat(var_06,1); + } + + if(isdefined(var_07) && !maps\mp\_utility::matchmakinggame()) + { + param_00 maps\mp\_utility::incplayerstat(var_07,1); + } + + if(var_04 playerads() > 0.5) + { + var_04 maps\mp\_utility::incplayerstat("adskills",1); + if(param_03 == "weapon_sniper" || issubstr(param_01,"acog")) + { + var_04 maps\mp\_utility::incplayerstat("scopedkills",1); + } + + if(issubstr(param_01,"thermal")) + { + var_04 maps\mp\_utility::incplayerstat("thermalkills",1); + return; + } + + return; + } + + var_04 maps\mp\_utility::incplayerstat("hipfirekills",1); +} + +//Function Number: 8 +checkmatchdataequipmentkills(param_00,param_01,param_02) +{ + var_03 = self; + switch(param_01) + { + case "frag_grenade_mp": + var_03 maps\mp\_utility::incplayerstat("fragkills",1); + var_03 maps\mp\_utility::incplayerstat("grenadekills",1); + var_04 = 1; + break; + + case "c4_mp": + var_04 maps\mp\_utility::incplayerstat("c4kills",1); + var_04 = 1; + break; + + case "semtex_mp": + var_04 maps\mp\_utility::incplayerstat("semtexkills",1); + var_04 maps\mp\_utility::incplayerstat("grenadekills",1); + var_04 = 1; + break; + + case "claymore_mp": + var_04 maps\mp\_utility::incplayerstat("claymorekills",1); + var_04 = 1; + break; + + case "throwingknife_mp": + var_04 maps\mp\_utility::incplayerstat("throwingknifekills",1); + thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_KNIFETHROW"); + var_04 = 1; + break; + + default: + var_04 = 0; + break; + } + + if(var_04) + { + var_03 maps\mp\_utility::incplayerstat("equipmentkills",1); + } +} + +//Function Number: 9 +campercheck() +{ + self.lastkillwascamping = 0; + if(!isdefined(self.lastkilllocation)) + { + self.lastkilllocation = self.origin; + self.lastcampkilltime = gettime(); + return; + } + + if(distance(self.lastkilllocation,self.origin) < 512 && gettime() - self.lastcampkilltime > 5000) + { + maps\mp\_utility::incplayerstat("mostcamperkills",1); + self.lastkillwascamping = 1; + } + + self.lastkilllocation = self.origin; + self.lastcampkilltime = gettime(); +} + +//Function Number: 10 +consolation(param_00) +{ +} + +//Function Number: 11 +proximityassist(param_00) +{ + self.modifiers["proximityAssist"] = 1; + thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_PROXIMITYASSIST"); + thread maps\mp\gametypes\_rank::giverankxp("proximityassist"); +} + +//Function Number: 12 +proximitykill(param_00) +{ + self.modifiers["proximityKill"] = 1; + thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_PROXIMITYKILL"); + thread maps\mp\gametypes\_rank::giverankxp("proximitykill"); +} + +//Function Number: 13 +longshot(param_00,param_01,param_02) +{ + self.modifiers["longshot"] = 1; + thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_LONGSHOT"); + thread maps\mp\gametypes\_rank::giverankxp("longshot",undefined,param_01,param_02); + maps\mp\killstreaks\_killstreaks::giveadrenaline("longshot"); + maps\mp\_utility::incplayerstat("longshots",1); + thread maps\mp\_matchdata::logkillevent(param_00,"longshot"); +} + +//Function Number: 14 +execution(param_00,param_01,param_02) +{ + self.modifiers["execution"] = 1; + thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_EXECUTION"); + thread maps\mp\gametypes\_rank::giverankxp("execution",undefined,param_01,param_02); + maps\mp\killstreaks\_killstreaks::giveadrenaline("execution"); + thread maps\mp\_matchdata::logkillevent(param_00,"execution"); +} + +//Function Number: 15 +headshot(param_00,param_01,param_02) +{ + self.modifiers["headshot"] = 1; + thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_HEADSHOT"); + thread maps\mp\gametypes\_rank::giverankxp("headshot",undefined,param_01,param_02); + maps\mp\killstreaks\_killstreaks::giveadrenaline("headshot"); + thread maps\mp\_matchdata::logkillevent(param_00,"headshot"); +} + +//Function Number: 16 +avengedplayer(param_00,param_01,param_02) +{ + self.modifiers["avenger"] = 1; + thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_AVENGER"); + thread maps\mp\gametypes\_rank::giverankxp("avenger",undefined,param_01,param_02); + maps\mp\killstreaks\_killstreaks::giveadrenaline("avenger"); + thread maps\mp\_matchdata::logkillevent(param_00,"avenger"); + maps\mp\_utility::incplayerstat("avengekills",1); +} + +//Function Number: 17 +assistedsuicide(param_00,param_01,param_02) +{ + self.modifiers["assistedsuicide"] = 1; + thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_ASSISTEDSUICIDE"); + thread maps\mp\gametypes\_rank::giverankxp("assistedsuicide",undefined,param_01,param_02); + maps\mp\killstreaks\_killstreaks::giveadrenaline("assistedsuicide"); + thread maps\mp\_matchdata::logkillevent(param_00,"assistedsuicide"); +} + +//Function Number: 18 +defendedplayer(param_00,param_01,param_02) +{ + self.modifiers["defender"] = 1; + thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_DEFENDER"); + thread maps\mp\gametypes\_rank::giverankxp("defender",undefined,param_01,param_02); + maps\mp\killstreaks\_killstreaks::giveadrenaline("defender"); + thread maps\mp\_matchdata::logkillevent(param_00,"defender"); + maps\mp\_utility::incplayerstat("rescues",1); +} + +//Function Number: 19 +postdeathkill(param_00) +{ + self.modifiers["posthumous"] = 1; + thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_POSTHUMOUS"); + thread maps\mp\gametypes\_rank::giverankxp("posthumous"); + thread maps\mp\_matchdata::logkillevent(param_00,"posthumous"); +} + +//Function Number: 20 +backstab(param_00) +{ + self iprintlnbold("backstab"); +} + +//Function Number: 21 +revenge(param_00) +{ + self.modifiers["revenge"] = 1; + thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_REVENGE"); + thread maps\mp\gametypes\_rank::giverankxp("revenge"); + maps\mp\killstreaks\_killstreaks::giveadrenaline("revenge"); + thread maps\mp\_matchdata::logkillevent(param_00,"revenge"); + maps\mp\_utility::incplayerstat("revengekills",1); +} + +//Function Number: 22 +multikill(param_00,param_01) +{ + if(param_01 == 2) + { + thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_DOUBLEKILL"); + maps\mp\killstreaks\_killstreaks::giveadrenaline("double"); + } + else if(param_01 == 3) + { + thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_TRIPLEKILL"); + maps\mp\killstreaks\_killstreaks::giveadrenaline("triple"); + thread maps\mp\_utility::teamplayercardsplash("callout_3xkill",self); + } + else + { + thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_MULTIKILL"); + maps\mp\killstreaks\_killstreaks::giveadrenaline("multi"); + thread maps\mp\_utility::teamplayercardsplash("callout_3xpluskill",self); + } + + thread maps\mp\_matchdata::logmultikill(param_00,param_01); + maps\mp\_utility::setplayerstatifgreater("multikill",param_01); + maps\mp\_utility::incplayerstat("mostmultikills",1); +} + +//Function Number: 23 +firstblood(param_00,param_01,param_02) +{ + self.modifiers["firstblood"] = 1; + thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_FIRSTBLOOD"); + thread maps\mp\gametypes\_rank::giverankxp("firstblood",undefined,param_01,param_02); + thread maps\mp\_matchdata::logkillevent(param_00,"firstblood"); + maps\mp\killstreaks\_killstreaks::giveadrenaline("firstBlood"); + thread maps\mp\_utility::teamplayercardsplash("callout_firstblood",self); +} + +//Function Number: 24 +winningshot(param_00) +{ +} + +//Function Number: 25 +buzzkill(param_00,param_01,param_02,param_03) +{ + self.modifiers["buzzkill"] = param_01.pers["cur_kill_streak"]; + thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_BUZZKILL"); + thread maps\mp\gametypes\_rank::giverankxp("buzzkill",undefined,param_02,param_03); + maps\mp\killstreaks\_killstreaks::giveadrenaline("buzzkill"); + thread maps\mp\_matchdata::logkillevent(param_00,"buzzkill"); +} + +//Function Number: 26 +comeback(param_00,param_01,param_02) +{ + self.modifiers["comeback"] = 1; + thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_COMEBACK"); + thread maps\mp\gametypes\_rank::giverankxp("comeback",undefined,param_01,param_02); + maps\mp\killstreaks\_killstreaks::giveadrenaline("comeback"); + thread maps\mp\_matchdata::logkillevent(param_00,"comeback"); + maps\mp\_utility::incplayerstat("comebacks",1); +} + +//Function Number: 27 +disconnected() +{ + var_00 = self.guid; + for(var_01 = 0;var_01 < level.players.size;var_01++) + { + if(isdefined(level.players[var_01].killedplayers[var_00])) + { + level.players[var_01].killedplayers[var_00] = undefined; + } + + if(isdefined(level.players[var_01].killedplayerscurrent[var_00])) + { + level.players[var_01].killedplayerscurrent[var_00] = undefined; + } + + if(isdefined(level.players[var_01].killedby[var_00])) + { + level.players[var_01].killedby[var_00] = undefined; + } + } +} + +//Function Number: 28 +monitorhealed() +{ + level endon("end_game"); + self endon("disconnect"); + for(;;) + { + self waittill("healed"); + maps\mp\killstreaks\_killstreaks::giveadrenaline("healed"); + } +} + +//Function Number: 29 +updaterecentkills(param_00) +{ + self endon("disconnect"); + level endon("game_ended"); + self notify("updateRecentKills"); + self endon("updateRecentKills"); + self.recentkillcount++; + wait 1; + if(self.recentkillcount > 1) + { + multikill(param_00,self.recentkillcount); + } + + self.recentkillcount = 0; +} + +//Function Number: 30 +monitorcratejacking() +{ + level endon("end_game"); + self endon("disconnect"); + for(;;) + { + self waittill("hijacker",var_00,var_01); + thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_HIJACKER"); + thread maps\mp\gametypes\_rank::giverankxp("hijacker",100); + var_02 = "hijacked_airdrop"; + var_03 = "ch_hijacker"; + switch(var_00) + { + case "sentry": + var_02 = "hijacked_sentry"; + break; + + case "juggernaut": + var_02 = "hijacked_juggernaut"; + break; + + case "remote_tank": + var_02 = "hijacked_remote_tank"; + break; + + case "emergency_airdrop": + case "mega": + var_02 = "hijacked_emergency_airdrop"; + var_03 = "ch_newjack"; + break; + + default: + break; + } + + if(isdefined(var_01)) + { + var_01 maps\mp\gametypes\_hud_message::playercardsplashnotify(var_02,self); + } + + self notify("process",var_03); + } +} + +//Function Number: 31 +monitorobjectives() +{ + level endon("end_game"); + self endon("disconnect"); + for(;;) + { + self waittill("objective",var_00); + if(var_00 == "captured") + { + maps\mp\killstreaks\_killstreaks::giveadrenaline("capture"); + if(isdefined(self.laststand) && self.laststand) + { + thread maps\mp\gametypes\_hud_message::splashnotifydelayed("heroic",100); + thread maps\mp\gametypes\_rank::giverankxp("reviver",100); + } + } + + if(var_00 == "assistedCapture") + { + maps\mp\killstreaks\_killstreaks::giveadrenaline("assistedCapture"); + } + + if(var_00 == "plant") + { + maps\mp\killstreaks\_killstreaks::giveadrenaline("plant"); + } + + if(var_00 == "defuse") + { + maps\mp\killstreaks\_killstreaks::giveadrenaline("defuse"); + } + } +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/_flashgrenades.gsc b/MW3/PC/MP/maps/mp/_flashgrenades.gsc new file mode 100644 index 0000000..6acf265 --- /dev/null +++ b/MW3/PC/MP/maps/mp/_flashgrenades.gsc @@ -0,0 +1,174 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\_flashgrenades.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 7 + * Decompile Time: 132 ms + * Timestamp: 10/27/2023 2:15:01 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + precacheshellshock("flashbang_mp"); +} + +//Function Number: 2 +startmonitoringflash() +{ + thread monitorflash(); +} + +//Function Number: 3 +stopmonitoringflash(param_00) +{ + self notify("stop_monitoring_flash"); +} + +//Function Number: 4 +flashrumbleloop(param_00) +{ + self endon("stop_monitoring_flash"); + self endon("flash_rumble_loop"); + self notify("flash_rumble_loop"); + var_01 = gettime() + param_00 * 1000; + while(gettime() < var_01) + { + self playrumbleonentity("damage_heavy"); + wait 0.05; + } +} + +//Function Number: 5 +monitorflash() +{ + self endon("disconnect"); + self.flashendtime = 0; + for(;;) + { + self waittill("flashbang",var_00,var_01,var_02,var_03); + if(!isalive(self)) + { + continue; + } + + if(isdefined(self.usingremote)) + { + continue; + } + + var_04 = 0; + var_05 = 1; + if(var_02 < 0.25) + { + var_02 = 0.25; + } + else if(var_02 > 0.8) + { + var_02 = 1; + } + + var_06 = var_01 * var_02 * 5.5; + if(isdefined(self.stunscaler)) + { + var_06 = var_06 * self.stunscaler; + } + + if(var_06 < 0.25) + { + continue; + } + + var_07 = undefined; + if(var_06 > 2) + { + var_07 = 0.75; + } + else + { + var_07 = 0.25; + } + + if(level.teambased && isdefined(var_03) && isdefined(var_03.pers["team"]) && var_03.pers["team"] == self.pers["team"] && var_03 != self) + { + if(level.friendlyfire == 0) + { + continue; + } + else if(level.friendlyfire == 1) + { + } + else if(level.friendlyfire == 2) + { + var_06 = var_06 * 0.5; + var_07 = var_07 * 0.5; + var_05 = 0; + var_04 = 1; + } + else if(level.friendlyfire == 3) + { + var_06 = var_06 * 0.5; + var_07 = var_07 * 0.5; + var_04 = 1; + } + } + else if(isdefined(var_03)) + { + var_03 notify("flash_hit"); + if(var_03 != self) + { + var_03 maps\mp\gametypes\_missions::processchallenge("ch_indecentexposure"); + } + } + + if(var_05 && isdefined(self)) + { + thread applyflash(var_06,var_07); + if(isdefined(var_03) && var_03 != self) + { + var_03 thread maps\mp\gametypes\_damagefeedback::updatedamagefeedback("flash"); + } + } + + if(var_04 && isdefined(var_03)) + { + var_03 thread applyflash(var_06,var_07); + } + } +} + +//Function Number: 6 +applyflash(param_00,param_01) +{ + if(!isdefined(self.flashduration) || param_00 > self.flashduration) + { + self.flashduration = param_00; + } + + if(!isdefined(self.flashrumbleduration) || param_01 > self.flashrumbleduration) + { + self.flashrumbleduration = param_01; + } + + wait 0.05; + if(isdefined(self.flashduration)) + { + self shellshock("flashbang_mp",self.flashduration); + self.flashendtime = gettime() + self.flashduration * 1000; + } + + if(isdefined(self.flashrumbleduration)) + { + thread flashrumbleloop(self.flashrumbleduration); + } + + self.flashduration = undefined; + self.flashrumbleduration = undefined; +} + +//Function Number: 7 +isflashbanged() +{ + return isdefined(self.flashendtime) && gettime() < self.flashendtime; +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/_fx.gsc b/MW3/PC/MP/maps/mp/_fx.gsc new file mode 100644 index 0000000..b41bea6 --- /dev/null +++ b/MW3/PC/MP/maps/mp/_fx.gsc @@ -0,0 +1,101 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\_fx.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 7 + * Decompile Time: 144 ms + * Timestamp: 10/27/2023 2:15:01 AM +*******************************************************************/ + +//Function Number: 1 +script_print_fx() +{ + if(!isdefined(self.script_fxid) || !isdefined(self.script_fxcommand) || !isdefined(self.script_delay)) + { + self delete(); + return; + } + + if(isdefined(self.target)) + { + var_00 = getent(self.target).origin; + } + else + { + var_00 = "undefined"; + } + + if(self.script_fxcommand == "OneShotfx") + { + } + + if(self.script_fxcommand == "loopfx") + { + } + + if(self.script_fxcommand == "loopsound") + { + } +} + +//Function Number: 2 +script_playfx(param_00,param_01,param_02) +{ + if(!param_00) + { + return; + } + + if(isdefined(param_02)) + { + playfx(param_00,param_01,param_02); + return; + } + + playfx(param_00,param_01); +} + +//Function Number: 3 +script_playfxontag(param_00,param_01,param_02) +{ + if(!param_00) + { + return; + } + + playfxontag(param_00,param_01,param_02); +} + +//Function Number: 4 +grenadeexplosionfx(param_00) +{ + playfx(level._effect["mechanical explosion"],param_00); + earthquake(0.15,0.5,param_00,250); +} + +//Function Number: 5 +soundfx(param_00,param_01,param_02) +{ + var_03 = spawn("script_origin",(0,0,0)); + var_03.origin = param_01; + var_03 playloopsound(param_00); + if(isdefined(param_02)) + { + var_03 thread soundfxdelete(param_02); + } +} + +//Function Number: 6 +soundfxdelete(param_00) +{ + level waittill(param_00); + self delete(); +} + +//Function Number: 7 +blenddelete(param_00) +{ + self waittill("death"); + param_00 delete(); +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/_global_fx.gsc b/MW3/PC/MP/maps/mp/_global_fx.gsc new file mode 100644 index 0000000..bb87cad --- /dev/null +++ b/MW3/PC/MP/maps/mp/_global_fx.gsc @@ -0,0 +1,93 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\_global_fx.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 3 + * Decompile Time: 45 ms + * Timestamp: 10/27/2023 2:16:52 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + var_00 = randomfloatrange(-20,-15); + global_fx("barrel_fireFX_origin","global_barrel_fire","fire/firelp_barrel_pm",var_00,"fire_barrel_small"); + global_fx("ch_streetlight_02_FX_origin","ch_streetlight_02_FX","misc/lighthaze",var_00); + global_fx("me_streetlight_01_FX_origin","me_streetlight_01_FX","misc/lighthaze_bog_a",var_00); + global_fx("ch_street_light_01_on","lamp_glow_FX","misc/light_glow_white",var_00); + global_fx("lamp_post_globe_on","lamp_glow_FX","misc/light_glow_white",var_00); + global_fx("highway_lamp_post","ch_streetlight_02_FX","misc/lighthaze_villassault",var_00); + global_fx("cs_cargoship_spotlight_on_FX_origin","cs_cargoship_spotlight_on_FX","misc/lighthaze",var_00); + global_fx("me_dumpster_fire_FX_origin","me_dumpster_fire_FX","fire/firelp_med_pm",var_00,"fire_dumpster_medium"); + global_fx("com_tires_burning01_FX_origin","com_tires_burning01_FX","fire/tire_fire_med",var_00); + global_fx("icbm_powerlinetower_FX_origin","icbm_powerlinetower_FX","misc/power_tower_light_red_blink",var_00); + global_fx("icbm_mainframe_FX_origin","icbm_mainframe_FX","props/icbm_mainframe_lightblink",var_00); + global_fx("light_pulse_red_FX_origin","light_pulse_red_FX","misc/light_glow_red_generic_pulse",-2); + global_fx("light_pulse_red_FX_origin","light_pulse_red_FX","misc/light_glow_red_generic_pulse",-2); + global_fx("light_pulse_orange_FX_origin","light_pulse_orange_FX","misc/light_glow_orange_generic_pulse",-2); + global_fx("light_red_blink_FX_origin","light_red_blink","misc/power_tower_light_red_blink",-2); + global_fx("lighthaze_oilrig_FX_origin","lighthaze_oilrig","misc/lighthaze_oilrig",var_00); + global_fx("lighthaze_white_FX_origin","lighthaze_white","misc/lighthaze_white",var_00); + global_fx("light_glow_walllight_white_FX_origin","light_glow_walllight_white","misc/light_glow_walllight_white",var_00); + global_fx("fluorescent_glow_FX_origin","fluorescent_glow","misc/fluorescent_glow",var_00); + global_fx("light_glow_industrial_FX_origin","light_glow_industrial","misc/light_glow_industrial",var_00); + global_fx("light_red_steady_FX_origin","light_red_steady","misc/tower_light_red_steady",-2); + global_fx("light_blue_steady_FX_origin","light_blue_steady","misc/tower_light_blue_steady",-2); + global_fx("light_orange_steady_FX_origin","light_orange_steady","misc/tower_light_orange_steady",-2); + global_fx("glow_stick_pile_FX_origin","glow_stick_pile","misc/glow_stick_glow_pile",-2); + global_fx("glow_stick_orange_pile_FX_origin","glow_stick_pile_orange","misc/glow_stick_glow_pile_orange",-2); + global_fx("highrise_blinky_tower","highrise_blinky_tower_FX","misc/power_tower_light_red_blink_large",var_00); + global_fx("flare_ambient_FX_origin","flare_ambient_FX","misc/flare_ambient",var_00,"emt_road_flare_burn"); + global_fx("light_glow_white_bulb_FX_origin","light_glow_white_bulb_FX","misc/light_glow_white_bulb",var_00); + global_fx("light_glow_white_lamp_FX_origin","light_glow_white_lamp_FX","misc/light_glow_white_lamp",var_00); +} + +//Function Number: 2 +global_fx(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = common_scripts\utility::getstructarray(param_00,"targetname"); + if(!isdefined(var_05)) + { + return; + } + + if(var_05.size <= 0) + { + return; + } + + for(var_06 = 0;var_06 < var_05.size;var_06++) + { + var_05[var_06] global_fx_create(param_01,param_02,param_03,param_04); + } +} + +//Function Number: 3 +global_fx_create(param_00,param_01,param_02,param_03) +{ + if(!isdefined(level._effect)) + { + level._effect = []; + } + + if(!isdefined(level._effect[param_00])) + { + level._effect[param_00] = loadfx(param_01); + } + + if(!isdefined(self.angles)) + { + self.angles = (0,0,0); + } + + var_04 = common_scripts\utility::createoneshoteffect(param_00); + var_04.v["origin"] = self.origin; + var_04.v["angles"] = self.angles; + var_04.v["fxid"] = param_00; + var_04.v["delay"] = param_02; + if(isdefined(param_03)) + { + var_04.v["soundalias"] = param_03; + } +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/_highlights.gsc b/MW3/PC/MP/maps/mp/_highlights.gsc new file mode 100644 index 0000000..b4d2916 --- /dev/null +++ b/MW3/PC/MP/maps/mp/_highlights.gsc @@ -0,0 +1,23 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\_highlights.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 20 ms + * Timestamp: 10/27/2023 2:16:53 AM +*******************************************************************/ + +//Function Number: 1 +givehighlight(param_00,param_01) +{ + var_02 = getclientmatchdata("highlightCount"); + if(var_02 < 18) + { + setclientmatchdata("highlights",var_02,"award",param_00); + setclientmatchdata("highlights",var_02,"clientId",self.clientmatchdataid); + setclientmatchdata("highlights",var_02,"value",param_01); + var_02++; + setclientmatchdata("highlightCount",var_02); + } +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/_javelin.gsc b/MW3/PC/MP/maps/mp/_javelin.gsc new file mode 100644 index 0000000..f7ad61b --- /dev/null +++ b/MW3/PC/MP/maps/mp/_javelin.gsc @@ -0,0 +1,509 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\_javelin.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 15 + * Decompile Time: 260 ms + * Timestamp: 10/27/2023 2:15:03 AM +*******************************************************************/ + +//Function Number: 1 +initjavelinusage() +{ + self.javelinstage = undefined; + self.javelinpoints = undefined; + self.javelinnormals = undefined; + self.javelinlockmisses = undefined; + self.javelintargetpoint = undefined; + self.javelintargetnormal = undefined; + self.javelinlockstarttime = undefined; +} + +//Function Number: 2 +resetjavelinlocking() +{ + if(!isdefined(self.javelinuseentered)) + { + return; + } + + self.javelinuseentered = undefined; + self notify("stop_lockon_sound"); + self weaponlockfree(); + self weaponlocktargettooclose(0); + self weaponlocknoclearance(0); + self.currentlylocking = 0; + self.currentlylocked = 0; + self.javelintarget = undefined; + self stoplocalsound("javelin_clu_lock"); + self stoplocalsound("javelin_clu_aquiring_lock"); + initjavelinusage(); +} + +//Function Number: 3 +eyetraceforward() +{ + var_00 = self geteye(); + var_01 = self getplayerangles(); + var_02 = anglestoforward(var_01); + var_03 = var_00 + var_02 * 15000; + var_04 = bullettrace(var_00,var_03,0,undefined); + if(var_04["surfacetype"] == "none") + { + return undefined; + } + + if(var_04["surfacetype"] == "default") + { + return undefined; + } + + var_05 = var_04["entity"]; + if(isdefined(var_05)) + { + if(var_05 == level.ac130.planemodel) + { + return undefined; + } + } + + var_06 = []; + return var_7B; +} + +//Function Number: 4 +lockmissesreset() +{ + self.javelinlockmisses = undefined; +} + +//Function Number: 5 +lockmissesincr() +{ + if(!isdefined(self.javelinlockmisses)) + { + self.javelinlockmisses = 1; + return; + } + + self.javelinlockmisses++; +} + +//Function Number: 6 +lockmissespassedthreshold() +{ + var_00 = 4; + if(isdefined(self.javelinlockmisses) && self.javelinlockmisses >= var_00) + { + return 1; + } + + return 0; +} + +//Function Number: 7 +targetpointtooclose(param_00) +{ + var_01 = 1100; + var_02 = distance(self.origin,param_00); + if(var_02 < var_01) + { + return 1; + } + + return 0; +} + +//Function Number: 8 +looplocalseeksound(param_00,param_01) +{ + self endon("death"); + self endon("disconnect"); + self endon("stop_lockon_sound"); + for(;;) + { + self playlocalsound(param_00); + wait param_01; + } +} + +//Function Number: 9 +topattackpasses(param_00,param_01) +{ + var_02 = param_00 + param_01 * 10; + var_03 = var_02 + (0,0,2000); + var_04 = bullettrace(var_02,var_03,0,undefined); + if(sighttracepassed(var_02,var_03,0,undefined)) + { + return 1; + } + + return 0; +} + +//Function Number: 10 +javelinusageloop() +{ + self endon("death"); + self endon("disconnect"); + self endon("faux_spawn"); + var_00 = 1150; + var_01 = 25; + var_02 = 100; + var_03 = 400; + var_04 = 12; + var_05 = 0; + var_06 = 0; + self.javelintarget = undefined; + initjavelinusage(); + for(;;) + { + wait 0.05; + var_07 = 0; + if(getdvar("missileDebugDraw") == "1") + { + var_07 = 1; + } + + var_08 = 0; + if(getdvar("missileDebugText") == "1") + { + var_08 = 1; + } + + var_09 = self getcurrentweapon(); + if(!issubstr(var_09,"javelin") || maps\mp\_utility::isemped()) + { + resetjavelinlocking(); + continue; + } + + if(self playerads() < 0.95) + { + var_06 = gettime(); + resetjavelinlocking(); + continue; + } + + self.javelinuseentered = 1; + if(!isdefined(self.javelinstage)) + { + self.javelinstage = 1; + } + + if(self.javelinstage == 1) + { + var_0A = maps\mp\_stinger::gettargetlist(); + if(var_0A.size != 0) + { + var_0B = []; + foreach(var_0D in var_0A) + { + var_0E = self worldpointinreticle_circle(var_0D.origin,65,40); + if(var_0E) + { + var_0B[var_0B.size] = var_0D; + } + } + + if(var_0B.size != 0) + { + var_10 = sortbydistance(var_0B,self.origin); + if(!vehiclelocksighttest(var_10[0])) + { + continue; + } + + if(var_08) + { + } + + self.javelintarget = var_10[0]; + if(!isdefined(self.javelinlockstarttime)) + { + self.javelinlockstarttime = gettime(); + } + + self.javelinstage = 2; + self.javelinlostsightlinetime = 0; + javelinlockvehicle(var_00); + self.javelinstage = 1; + continue; + } + } + + if(lockmissespassedthreshold()) + { + resetjavelinlocking(); + continue; + } + + var_11 = gettime() - var_06; + if(var_11 < var_02) + { + continue; + } + + var_11 = gettime() - var_05; + if(var_11 < var_01) + { + continue; + } + + var_05 = gettime(); + var_15 = eyetraceforward(); + if(!isdefined(var_15)) + { + lockmissesincr(); + continue; + } + + if(targetpointtooclose(var_15[0])) + { + self weaponlocktargettooclose(1); + continue; + } + else + { + self weaponlocktargettooclose(0); + } + + if(isdefined(self.javelinpoints)) + { + var_16 = averagepoint(self.javelinpoints); + var_17 = distance(var_16,var_15[0]); + if(var_17 > var_03) + { + lockmissesincr(); + continue; + } + } + else + { + self.javelinpoints = []; + self.javelinnormals = []; + } + + self.javelinpoints[self.javelinpoints.size] = var_15[0]; + self.javelinnormals[self.javelinnormals.size] = var_15[1]; + lockmissesreset(); + if(self.javelinpoints.size < var_04) + { + continue; + } + + self.javelintargetpoint = averagepoint(self.javelinpoints); + self.javelintargetnormal = averagenormal(self.javelinnormals); + self.javelinlockmisses = undefined; + self.javelinpoints = undefined; + self.javelinnormals = undefined; + self.javelinlockstarttime = gettime(); + self weaponlockstart(self.javelintargetpoint); + thread looplocalseeksound("javelin_clu_aquiring_lock",0.6); + self.javelinstage = 2; + } + + if(self.javelinstage == 2) + { + var_0E = self worldpointinreticle_circle(self.javelintargetpoint,65,45); + if(!var_0E) + { + resetjavelinlocking(); + continue; + } + + if(targetpointtooclose(self.javelintargetpoint)) + { + self weaponlocktargettooclose(1); + } + else + { + self weaponlocktargettooclose(0); + } + + var_11 = gettime() - self.javelinlockstarttime; + if(var_11 < var_00) + { + continue; + } + + self weaponlockfinalize(self.javelintargetpoint,(0,0,0),1); + self notify("stop_lockon_sound"); + self playlocalsound("javelin_clu_lock"); + self.javelinstage = 3; + } + + if(self.javelinstage == 3) + { + var_0E = self worldpointinreticle_circle(self.javelintargetpoint,65,45); + if(!var_0E) + { + resetjavelinlocking(); + continue; + } + + if(targetpointtooclose(self.javelintargetpoint)) + { + self weaponlocktargettooclose(1); + } + else + { + self weaponlocktargettooclose(0); + } + + continue; + } + } +} + +//Function Number: 11 +debugsightline(param_00,param_01,param_02) +{ +} + +//Function Number: 12 +vehiclelocksighttest(param_00) +{ + var_01 = self geteye(); + var_02 = param_00 getpointinbounds(0,0,0); + var_03 = sighttracepassed(var_01,var_02,0,param_00); + debugsightline(var_01,var_02,var_03); + if(var_03) + { + return 1; + } + + var_04 = param_00 getpointinbounds(1,0,0); + var_03 = sighttracepassed(var_01,var_04,0,param_00); + debugsightline(var_01,var_04,var_03); + if(var_03) + { + return 1; + } + + var_05 = param_00 getpointinbounds(-1,0,0); + var_03 = sighttracepassed(var_01,var_05,0,param_00); + debugsightline(var_01,var_05,var_03); + if(var_03) + { + return 1; + } + + return 0; +} + +//Function Number: 13 +javelinlockvehicle(param_00) +{ + if(self.javelinstage == 2) + { + self weaponlockstart(self.javelintarget); + if(!stillvalidjavelinlock(self.javelintarget)) + { + resetjavelinlocking(); + self.javelinlockstarttime = undefined; + return; + } + + var_01 = softsighttest(); + if(!var_01) + { + self.javelinlockstarttime = undefined; + return; + } + + if(!isdefined(self.currentlylocking) || !self.currentlylocking) + { + thread looplocalseeksound("javelin_clu_aquiring_lock",0.6); + self.currentlylocking = 1; + } + + var_02 = gettime() - self.javelinlockstarttime; + if(maps\mp\_utility::_hasperk("specialty_fasterlockon")) + { + if(var_02 < param_00 * 0.5) + { + return; + } + } + else if(var_02 < param_00) + { + return; + } + + if(isplayer(self.javelintarget)) + { + self weaponlockfinalize(self.javelintarget,(0,0,64),0); + } + else + { + self weaponlockfinalize(self.javelintarget,(0,0,0),0); + } + + self notify("stop_lockon_sound"); + if(!isdefined(self.currentlylocked) || !self.currentlylocked) + { + self playlocalsound("javelin_clu_lock"); + self.currentlylocked = 1; + } + + self.javelinstage = 3; + } + + if(self.javelinstage == 3) + { + var_01 = softsighttest(); + if(!var_01) + { + return; + } + + if(!stillvalidjavelinlock(self.javelintarget)) + { + resetjavelinlocking(); + return; + } + } +} + +//Function Number: 14 +stillvalidjavelinlock(param_00) +{ + if(!isdefined(param_00)) + { + return 0; + } + + if(!self worldpointinreticle_circle(param_00.origin,65,85)) + { + return 0; + } + + return 1; +} + +//Function Number: 15 +softsighttest() +{ + var_00 = 500; + if(vehiclelocksighttest(self.javelintarget)) + { + self.javelinlostsightlinetime = 0; + return 1; + } + + if(self.javelinlostsightlinetime == 0) + { + self.javelinlostsightlinetime = gettime(); + } + + var_01 = gettime() - self.javelinlostsightlinetime; + if(var_01 >= var_00) + { + resetjavelinlocking(); + return 0; + } + + return 1; +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/_load.gsc b/MW3/PC/MP/maps/mp/_load.gsc new file mode 100644 index 0000000..1fa00b7 --- /dev/null +++ b/MW3/PC/MP/maps/mp/_load.gsc @@ -0,0 +1,430 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\_load.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 7 + * Decompile Time: 142 ms + * Timestamp: 10/27/2023 2:15:03 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(isdefined(level._loadstarted)) + { + return; + } + + level._loadstarted = 1; + level.createfx_enabled = getdvar("createfx") != ""; + common_scripts\utility::struct_class_init(); + maps\mp\_utility::initgameflags(); + maps\mp\_utility::initlevelflags(); + level.generic_index = 0; + level.flag_struct = spawnstruct(); + level.flag_struct common_scripts\utility::assign_unique_id(); + if(!isdefined(level.flag)) + { + level.flag = []; + level.flags_lock = []; + } + + level.requiredmapaspectratio = getdvarfloat("scr_RequiredMapAspectratio",1); + level.createclientfontstring_func = ::maps\mp\gametypes\_hud_util::createfontstring; + level.hudsetpoint_func = ::maps\mp\gametypes\_hud_util::setpoint; + level.leaderdialogonplayer_func = ::maps\mp\_utility::leaderdialogonplayer; + thread maps\mp\gametypes\_tweakables::init(); + if(!isdefined(level.func)) + { + level.func = []; + } + + level.func["precacheMpAnim"] = ::precachempanim; + level.func["scriptModelPlayAnim"] = ::scriptmodelplayanim; + level.func["scriptModelClearAnim"] = ::scriptmodelclearanim; + if(!level.createfx_enabled) + { + thread maps\mp\_minefields::minefields(); + thread maps\mp\_radiation::radiation(); + thread maps\mp\_shutter::main(); + thread maps\mp\_destructables::init(); + thread common_scripts\_elevator::init(); + thread common_scripts\_dynamic_world::init(); + thread common_scripts\_destructible::init(); + thread common_scripts\_pipes::main(); + } + + if(getmapcustom("thermal") == "invert") + { + game["thermal_vision"] = "thermal_snowlevel_mp"; + setthermalbodymaterial("thermalbody_snowlevel"); + } + else + { + game["thermal_vision"] = "thermal_mp"; + } + + visionsetnaked("",0); + visionsetnight("default_night_mp"); + visionsetmissilecam("missilecam"); + visionsetthermal(game["thermal_vision"]); + visionsetpain("near_death_mp",0); + var_00 = getentarray("lantern_glowFX_origin","targetname"); + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + var_00[var_01] thread lanterns(); + } + + maps\mp\_audio::init_audio(); + lib_0375::main(); + setupexploders(); + thread common_scripts\_fx::initfx(); + if(level.createfx_enabled) + { + maps\mp\_createfx::createfx(); + } + + if(getdvar("r_reflectionProbeGenerate") == "1") + { + maps\mp\gametypes\_spawnlogic::setmapcenterforreflections(); + maps\mp\_global_fx::main(); + level waittill("eternity"); + } + + thread maps\mp\_global_fx::main(); + for(var_02 = 0;var_02 < 6;var_02++) + { + switch(var_02) + { + case 0: + var_03 = "trigger_multiple"; + break; + + case 1: + var_03 = "trigger_once"; + break; + + case 2: + var_03 = "trigger_use"; + break; + + case 3: + var_03 = "trigger_radius"; + break; + + case 4: + var_03 = "trigger_lookat"; + break; + + default: + var_03 = "trigger_damage"; + break; + } + + var_04 = getentarray(var_03,"classname"); + for(var_01 = 0;var_01 < var_04.size;var_01++) + { + if(isdefined(var_04[var_01].script_prefab_exploder)) + { + var_04[var_01].script_exploder = var_04[var_01].script_prefab_exploder; + } + + if(isdefined(var_04[var_01].script_exploder)) + { + level thread exploder_load(var_04[var_01]); + } + } + } + + var_05 = getentarray("trigger_hurt","classname"); + foreach(var_07 in var_05) + { + var_07 thread hurtplayersthink(); + } + + thread maps\mp\_animatedmodels::main(); + level.func["damagefeedback"] = ::maps\mp\gametypes\_damagefeedback::updatedamagefeedback; + level.func["setTeamHeadIcon"] = ::maps\mp\_entityheadicons::setteamheadicon; + level.laseron_func = ::laseron; + level.laseroff_func = ::laseroff; + setdvar("sm_sunShadowScale",1); + setdvar("sm_spotLightScoreModelScale",0); + setdvar("r_specularcolorscale",2.5); + setdvar("r_diffusecolorscale",1); + setdvar("r_lightGridEnableTweaks",0); + setdvar("r_lightGridIntensity",1); + setdvar("r_lightGridContrast",0); + setupdestructiblekillcaments(); + precacheitem("bomb_site_mp"); + level.fauxvehiclecount = 0; +} + +//Function Number: 2 +exploder_load(param_00) +{ + level endon("killexplodertridgers" + param_00.script_exploder); + param_00 waittill("trigger"); + if(isdefined(param_00.script_chance) && randomfloat(1) > param_00.script_chance) + { + if(isdefined(param_00.script_delay)) + { + wait param_00.script_delay; + } + else + { + wait 4; + } + + level thread exploder_load(param_00); + return; + } + + common_scripts\utility::exploder(param_00.script_exploder); + level notify("killexplodertridgers" + param_00.script_exploder); +} + +//Function Number: 3 +setupexploders() +{ + var_00 = getentarray("script_brushmodel","classname"); + var_01 = getentarray("script_model","classname"); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + var_00[var_00.size] = var_01[var_02]; + } + + for(var_02 = 0;var_02 < var_00.size;var_02++) + { + if(isdefined(var_00[var_02].script_prefab_exploder)) + { + var_00[var_02].script_exploder = var_00[var_02].script_prefab_exploder; + } + + if(isdefined(var_00[var_02].script_exploder)) + { + if(var_00[var_02].model == "fx" && !isdefined(var_00[var_02].targetname) || var_00[var_02].targetname != "exploderchunk") + { + var_00[var_02] hide(); + continue; + } + + if(isdefined(var_00[var_02].targetname) && var_00[var_02].targetname == "exploder") + { + var_00[var_02] hide(); + var_00[var_02] notsolid(); + continue; + } + + if(isdefined(var_00[var_02].targetname) && var_00[var_02].targetname == "exploderchunk") + { + var_00[var_02] hide(); + var_00[var_02] notsolid(); + } + } + } + + var_03 = []; + var_04 = getentarray("script_brushmodel","classname"); + for(var_02 = 0;var_02 < var_04.size;var_02++) + { + if(isdefined(var_04[var_02].script_prefab_exploder)) + { + var_04[var_02].script_exploder = var_04[var_02].script_prefab_exploder; + } + + if(isdefined(var_04[var_02].script_exploder)) + { + var_03[var_03.size] = var_04[var_02]; + } + } + + var_04 = getentarray("script_model","classname"); + for(var_02 = 0;var_02 < var_04.size;var_02++) + { + if(isdefined(var_04[var_02].script_prefab_exploder)) + { + var_04[var_02].script_exploder = var_04[var_02].script_prefab_exploder; + } + + if(isdefined(var_04[var_02].script_exploder)) + { + var_03[var_03.size] = var_04[var_02]; + } + } + + var_04 = getentarray("item_health","classname"); + for(var_02 = 0;var_02 < var_04.size;var_02++) + { + if(isdefined(var_04[var_02].script_prefab_exploder)) + { + var_04[var_02].script_exploder = var_04[var_02].script_prefab_exploder; + } + + if(isdefined(var_04[var_02].script_exploder)) + { + var_03[var_03.size] = var_04[var_02]; + } + } + + if(!isdefined(level.createfxent)) + { + level.createfxent = []; + } + + var_05 = []; + for(var_03 = 0;var_03 < var_04.size;var_03++ = var_7B["exploder"]) + { + var_06 = var_04[var_03]; + var_07 = common_scripts\utility::createexploder(var_06.script_fxid); + var_07.v = []; + var_07.v["origin"] = var_06.origin; + var_07.v["angles"] = var_06.angles; + var_07.v["delay"] = var_06.script_delay; + var_07.v["firefx"] = var_06.script_firefx; + var_07.v["firefxdelay"] = var_06.script_firefxdelay; + var_07.v["firefxsound"] = var_06.script_firefxsound; + var_07.v["firefxtimeout"] = var_06.script_firefxtimeout; + var_07.v["earthquake"] = var_06.script_earthquake; + var_07.v["damage"] = var_06.script_damage; + var_07.v["damage_radius"] = var_06.script_radius; + var_07.v["soundalias"] = var_06.script_soundalias; + var_07.v["repeat"] = var_06.script_repeat; + var_07.v["delay_min"] = var_06.script_delay_min; + var_07.v["delay_max"] = var_06.var_7E6; + var_07.v["target"] = var_06.target; + var_07.v["ender"] = var_06.script_ender; + var_07.v["type"] = "exploder"; + if(!isdefined(var_06.script_fxid)) + { + var_07.v["fxid"] = "No FX"; + } + else + { + var_07.v["fxid"] = var_06.script_fxid; + } + + var_07.v["exploder"] = var_06.script_exploder; + if(!isdefined(var_07.v["delay"])) + { + var_07.v["delay"] = 0; + } + + if(isdefined(var_06.target)) + { + var_08 = getent(var_07.v["target"],"targetname").origin; + var_07.v["angles"] = vectortoangles(var_08 - var_07.v["origin"]); + } + + if(var_06.classname == "script_brushmodel" || isdefined(var_06.model)) + { + var_07.model = var_06; + var_07.model.disconnect_paths = var_06.script_disconnectpaths; + } + + if(isdefined(var_06.targetname) && isdefined(var_7B[var_06.targetname])) + { + var_07.v["exploder_type"] = var_06.targetname; + } + else + { + var_07.v["exploder_type"] = "normal"; + } + + var_07 common_scripts\_createfx::post_entity_creation_function(); + } +} + +//Function Number: 4 +lanterns() +{ + if(!isdefined(level._effect["lantern_light"])) + { + level._effect["lantern_light"] = loadfx("props/glow_latern"); + } + + common_scripts\_fx::loopfx("lantern_light",self.origin,0.3,self.origin + (0,0,1)); +} + +//Function Number: 5 +hurtplayersthink() +{ + level endon("game_ended"); + wait randomfloat(1); + for(;;) + { + foreach(var_01 in level.players) + { + if(var_01 istouching(self) && maps\mp\_utility::isreallyalive(var_01)) + { + var_01 maps\mp\_utility::_suicide(); + } + } + + wait 0.5; + } +} + +//Function Number: 6 +setupdestructiblekillcaments() +{ + var_00 = getentarray("destructible_vehicle","targetname"); + foreach(var_02 in var_00) + { + switch(getdvar("mapname")) + { + case "mp_interchange": + if(var_02.origin[2] > 150) + { + break; + } + break; + } + + var_03 = var_02.origin + (0,0,5); + var_04 = var_02.origin + (0,0,128); + var_05 = bullettrace(var_03,var_04,0,var_02); + var_02.killcament = spawn("script_model",var_05["position"]); + var_02.killcament.targetname = "killCamEnt_destructible_vehicle"; + var_02.killcament setscriptmoverkillcam("explosive"); + var_02 thread deletedestructiblekillcament(); + } + + var_07 = getentarray("destructible_toy","targetname"); + foreach(var_02 in var_07) + { + var_03 = var_02.origin + (0,0,5); + var_04 = var_02.origin + (0,0,128); + var_05 = bullettrace(var_03,var_04,0,var_02); + var_02.killcament = spawn("script_model",var_05["position"]); + var_02.killcament.targetname = "killCamEnt_destructible_toy"; + var_02.killcament setscriptmoverkillcam("explosive"); + var_02 thread deletedestructiblekillcament(); + } + + var_0A = getentarray("explodable_barrel","targetname"); + foreach(var_02 in var_0A) + { + var_03 = var_02.origin + (0,0,5); + var_04 = var_02.origin + (0,0,128); + var_05 = bullettrace(var_03,var_04,0,var_02); + var_02.killcament = spawn("script_model",var_05["position"]); + var_02.killcament.targetname = "killCamEnt_explodable_barrel"; + var_02.killcament setscriptmoverkillcam("explosive"); + var_02 thread deletedestructiblekillcament(); + } +} + +//Function Number: 7 +deletedestructiblekillcament() +{ + level endon("game_ended"); + var_00 = self.killcament; + var_00 endon("death"); + self waittill("death"); + wait 10; + if(isdefined(var_00)) + { + var_00 delete(); + } +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/_matchdata.gsc b/MW3/PC/MP/maps/mp/_matchdata.gsc new file mode 100644 index 0000000..b150040 --- /dev/null +++ b/MW3/PC/MP/maps/mp/_matchdata.gsc @@ -0,0 +1,704 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\_matchdata.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 25 + * Decompile Time: 453 ms + * Timestamp: 10/27/2023 2:15:05 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + if(!isdefined(game["gamestarted"])) + { + setmatchdatadef("mp/matchdata.def"); + setmatchdata("map",level.script); + if(level.hardcoremode) + { + var_00 = level.gametype + " hc"; + setmatchdata("gametype",var_00); + } + else + { + setmatchdata("gametype",level.gametype); + } + + setmatchdata("buildVersion",getbuildversion()); + setmatchdata("buildNumber",getbuildnumber()); + setmatchdata("dateTime",getsystemtime()); + setmatchdataid(); + } + + level.maxlives = 285; + level.maxnamelength = 26; + level.maxevents = 150; + level.maxkillstreaks = 125; + level.maxlogclients = 30; + level.maxnumchallengesperplayer = 10; + level.maxnumawardsperplayer = 10; + level thread gameendlistener(); + level thread endofgamesummarylogger(); +} + +//Function Number: 2 +getmatchdatetime() +{ + return getmatchdata("dateTime"); +} + +//Function Number: 3 +logkillstreakevent(param_00,param_01) +{ + if(!canlogclient(self) || !canlogkillstreak()) + { + return; + } + + var_02 = getmatchdata("killstreakCount"); + setmatchdata("killstreakCount",var_02 + 1); + setmatchdata("killstreaks",var_02,"eventType",param_00); + setmatchdata("killstreaks",var_02,"player",self.clientid); + setmatchdata("killstreaks",var_02,"eventTime",gettime()); + setmatchdata("killstreaks",var_02,"eventPos",0,int(param_01[0])); + setmatchdata("killstreaks",var_02,"eventPos",1,int(param_01[1])); + setmatchdata("killstreaks",var_02,"eventPos",2,int(param_01[2])); +} + +//Function Number: 4 +loggameevent(param_00,param_01) +{ + if(!canlogclient(self) || !canlogevent()) + { + return; + } + + var_02 = getmatchdata("eventCount"); + setmatchdata("eventCount",var_02 + 1); + setmatchdata("events",var_02,"eventType",param_00); + setmatchdata("events",var_02,"player",self.clientid); + setmatchdata("events",var_02,"eventTime",gettime()); + setmatchdata("events",var_02,"eventPos",0,int(param_01[0])); + setmatchdata("events",var_02,"eventPos",1,int(param_01[1])); + setmatchdata("events",var_02,"eventPos",2,int(param_01[2])); +} + +//Function Number: 5 +logkillevent(param_00,param_01) +{ + if(!canloglife(param_00)) + { + return; + } + + setmatchdata("lives",param_00,"modifiers",param_01,1); +} + +//Function Number: 6 +logmultikill(param_00,param_01) +{ + if(!canloglife(param_00)) + { + return; + } + + setmatchdata("lives",param_00,"multikill",param_01); +} + +//Function Number: 7 +logplayerlife(param_00) +{ + if(!canlogclient(self) || !canloglife(param_00)) + { + return; + } + + setmatchdata("lives",param_00,"player",self.clientid); + setmatchdata("lives",param_00,"spawnPos",0,int(self.spawnpos[0])); + setmatchdata("lives",param_00,"spawnPos",1,int(self.spawnpos[1])); + setmatchdata("lives",param_00,"spawnPos",2,int(self.spawnpos[2])); + setmatchdata("lives",param_00,"wasTacticalInsertion",self.wasti); + setmatchdata("lives",param_00,"team",self.team); + setmatchdata("lives",param_00,"spawnTime",self.spawntime); + setmatchdata("lives",param_00,"duration",gettime() - self.spawntime); + logloadout(param_00); +} + +//Function Number: 8 +logplayerxp(param_00,param_01) +{ + if(!canlogclient(self)) + { + return; + } + + setmatchdata("players",self.clientid,param_01,param_00); +} + +//Function Number: 9 +logloadout(param_00) +{ + if(!canlogclient(self) || !canloglife(param_00) || self.curclass == "gamemode") + { + return; + } + + var_01 = self.curclass; + if(var_01 == "copycat") + { + var_02 = self.pers["copyCatLoadout"]; + var_03 = var_02["loadoutPrimary"]; + var_04 = var_02["loadoutPrimaryAttachment"]; + var_05 = var_02["loadoutPrimaryAttachment2"]; + var_06 = var_02["loadoutPrimaryCamo"]; + var_07 = var_02["loadoutPrimaryBuff"]; + var_08 = var_02["loadoutSecondary"]; + var_09 = var_02["loadoutSecondaryAttachment"]; + var_0A = var_02["loadoutSecondaryAttachment2"]; + var_0B = var_02["loadoutSecondaryCamo"]; + var_0C = var_02["loadoutSecondaryBuff"]; + var_0D = var_02["loadoutEquipment"]; + var_0E = var_02["loadoutPerk1"]; + var_0F = var_02["loadoutPerk2"]; + var_10 = var_02["loadoutPerk3"]; + var_11 = var_02["loadoutOffhand"]; + var_12 = var_02["loadoutDeathstreak"]; + var_13 = var_02["loadoutStreakType"]; + var_14 = var_02["loadoutKillstreak1"]; + var_15 = var_02["loadoutKillstreak2"]; + var_16 = var_02["loadoutKillstreak3"]; + } + else if(issubstr(var_16,"custom")) + { + var_17 = maps\mp\gametypes\_class::getclassindex(var_16); + var_03 = maps\mp\gametypes\_class::cac_getweapon(var_17,0); + var_04 = maps\mp\gametypes\_class::cac_getweaponattachment(var_17,0); + var_05 = maps\mp\gametypes\_class::cac_getweaponattachmenttwo(var_17,0); + var_08 = maps\mp\gametypes\_class::cac_getweapon(var_17,1); + var_09 = maps\mp\gametypes\_class::cac_getweaponattachment(var_17,1); + var_0A = maps\mp\gametypes\_class::cac_getweaponattachmenttwo(var_17,1); + var_11 = maps\mp\gametypes\_class::cac_getoffhand(var_17); + var_0D = maps\mp\gametypes\_class::cac_getperk(var_17,0); + var_0E = maps\mp\gametypes\_class::cac_getperk(var_17,1); + var_0F = maps\mp\gametypes\_class::cac_getperk(var_17,2); + var_10 = maps\mp\gametypes\_class::cac_getperk(var_17,3); + var_13 = maps\mp\gametypes\_class::cac_getperk(var_17,5); + var_12 = maps\mp\gametypes\_class::cac_getdeathstreak(var_17); + var_07 = maps\mp\gametypes\_class::cac_getweaponbuff(var_17,0); + var_0C = maps\mp\gametypes\_class::cac_getweaponbuff(var_17,1); + var_14 = maps\mp\gametypes\_class::cac_getkillstreak(var_17,var_13,0); + var_15 = maps\mp\gametypes\_class::cac_getkillstreak(var_17,var_13,1); + var_16 = maps\mp\gametypes\_class::cac_getkillstreak(var_17,var_13,2); + } + else + { + var_17 = maps\mp\gametypes\_class::getclassindex(var_17); + var_03 = maps\mp\gametypes\_class::table_getweapon(level.classtablename,var_17,0); + var_04 = maps\mp\gametypes\_class::table_getweaponattachment(level.classtablename,var_17,0,0); + var_05 = maps\mp\gametypes\_class::table_getweaponattachment(level.classtablename,var_17,0,1); + var_08 = maps\mp\gametypes\_class::table_getweapon(level.classtablename,var_17,1); + var_09 = maps\mp\gametypes\_class::table_getweaponattachment(level.classtablename,var_17,1,0); + var_0A = maps\mp\gametypes\_class::table_getweaponattachment(level.classtablename,var_17,1,1); + var_11 = maps\mp\gametypes\_class::table_getoffhand(level.classtablename,var_17); + var_0D = maps\mp\gametypes\_class::table_getequipment(level.classtablename,var_17,0); + var_0E = maps\mp\gametypes\_class::table_getperk(level.classtablename,var_17,1); + var_0F = maps\mp\gametypes\_class::table_getperk(level.classtablename,var_17,2); + var_10 = maps\mp\gametypes\_class::table_getperk(level.classtablename,var_17,3); + var_13 = maps\mp\gametypes\_class::table_getperk(level.classtablename,var_17,5); + var_12 = maps\mp\gametypes\_class::table_getdeathstreak(level.classtablename,var_17); + var_07 = maps\mp\gametypes\_class::table_getweaponbuff(level.classtablename,var_17,0); + var_0C = maps\mp\gametypes\_class::table_getweaponbuff(level.classtablename,var_17,1); + var_14 = maps\mp\gametypes\_class::table_getkillstreak(level.classtablename,var_17,1); + var_15 = maps\mp\gametypes\_class::table_getkillstreak(level.classtablename,var_17,2); + var_16 = maps\mp\gametypes\_class::table_getkillstreak(level.classtablename,var_17,3); + } + + var_04 = maps\mp\_utility::validateattachment(var_04); + var_05 = maps\mp\_utility::validateattachment(var_05); + var_09 = maps\mp\_utility::validateattachment(var_09); + var_0A = maps\mp\_utility::validateattachment(var_0A); + setmatchdata("lives",param_00,"primaryWeapon",var_03); + setmatchdata("lives",param_00,"primaryAttachments",0,var_04); + setmatchdata("lives",param_00,"primaryAttachments",1,var_05); + setmatchdata("lives",param_00,"secondaryWeapon",var_08); + setmatchdata("lives",param_00,"secondaryAttachments",0,var_09); + setmatchdata("lives",param_00,"secondaryAttachments",1,var_09); + setmatchdata("lives",param_00,"offhandWeapon",var_11); + setmatchdata("lives",param_00,"equipment",var_0D); + setmatchdata("lives",param_00,"perks",0,var_0E); + setmatchdata("lives",param_00,"perks",1,var_0F); + setmatchdata("lives",param_00,"perks",2,var_10); + setmatchdata("lives",param_00,"strikePackage",var_13); + setmatchdata("lives",param_00,"deathstreak",var_12); + setmatchdata("lives",param_00,"weaponBuff",0,var_07); + setmatchdata("lives",param_00,"weaponBuff",1,var_0C); + switch(var_13) + { + case "streaktype_assault": + setmatchdata("lives",param_00,"assaultStreaks",0,var_14); + setmatchdata("lives",param_00,"assaultStreaks",1,var_15); + setmatchdata("lives",param_00,"assaultStreaks",2,var_16); + break; + + case "streaktype_support": + setmatchdata("lives",param_00,"defenseStreaks",0,var_14); + setmatchdata("lives",param_00,"defenseStreaks",1,var_15); + setmatchdata("lives",param_00,"defenseStreaks",2,var_16); + break; + + case "streaktype_specialist": + setmatchdata("lives",param_00,"specialistStreaks",0,var_14); + setmatchdata("lives",param_00,"specialistStreaks",1,var_15); + setmatchdata("lives",param_00,"specialistStreaks",2,var_16); + break; + + case "none": + break; + } +} + +//Function Number: 10 +logplayerdeath(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + if(!canlogclient(self) || isplayer(param_01) && !canlogclient(param_01) || !canloglife(param_00)) + { + return; + } + + if(param_00 >= level.maxlives) + { + return; + } + + if(param_04 == "none") + { + var_07 = "none"; + var_08 = "none"; + } + else + { + var_07 = weaponinventorytype(param_06); + var_08 = weaponclass(param_05); + } + + if(issubstr(param_04,"destructible")) + { + param_04 = "destructible"; + } + + if(isdefined(var_07) && var_07 == "primary" || var_07 == "altmode" && var_08 == "pistol" || var_08 == "smg" || var_08 == "rifle" || var_08 == "spread" || var_08 == "mg" || var_08 == "grenade" || var_08 == "rocketlauncher" || var_08 == "sniper") + { + var_09 = undefined; + if(var_07 == "altmode") + { + var_09 = param_04; + param_04 = param_05; + setmatchdata("lives",param_00,"altMode",1); + } + + var_0A = strtok(param_04,"_"); + if(var_0A[0] == "iw5") + { + var_0F = var_0A[0] + "_" + var_0A[1]; + setmatchdata("lives",param_00,"weapon",var_0F); + if(isdefined(var_0A[3]) && issubstr(var_0A[3],"scope") && issubstr(var_0A[3],"vz")) + { + var_0A[3] = "vzscope"; + } + + if(isdefined(var_0A[4]) && issubstr(var_0A[4],"scope") && issubstr(var_0A[4],"vz")) + { + var_0A[4] = "vzscope"; + } + + if(isdefined(var_0A[3]) && issubstr(var_0A[3],"scope") && !issubstr(var_0A[3],"vz")) + { + var_0A[3] = undefined; + } + + if(isdefined(var_0A[4]) && issubstr(var_0A[4],"scope") && !issubstr(var_0A[4],"vz")) + { + var_0A[4] = undefined; + } + + if(isdefined(var_0A[3]) && maps\mp\_utility::isattachment(var_0A[3])) + { + var_10 = maps\mp\_utility::validateattachment(var_0A[3]); + setmatchdata("lives",param_00,"attachments",0,var_10); + } + + if(isdefined(var_0A[4]) && maps\mp\_utility::isattachment(var_0A[4])) + { + var_10 = maps\mp\_utility::validateattachment(var_0A[4]); + setmatchdata("lives",param_00,"attachments",1,var_10); + } + } + else if(var_0A[0] == "alt") + { + var_0F = var_0A[1] + "_" + var_0A[2]; + setmatchdata("lives",param_00,"weapon",var_0F); + if(isdefined(var_0A[4]) && maps\mp\_utility::isattachment(var_0A[4])) + { + var_10 = maps\mp\_utility::validateattachment(var_0A[4]); + setmatchdata("lives",param_00,"attachments",0,var_10); + } + + if(isdefined(var_0A[5]) && maps\mp\_utility::isattachment(var_0A[5])) + { + var_10 = maps\mp\_utility::validateattachment(var_0A[5]); + setmatchdata("lives",param_00,"attachments",1,var_10); + } + } + else + { + var_0A[var_0A.size - 1] = undefined; + setmatchdata("lives",param_00,"weapon",var_0A[0]); + if(isdefined(var_0A[1]) && var_07 != "altmode") + { + var_10 = maps\mp\_utility::validateattachment(var_0A[1]); + setmatchdata("lives",param_00,"attachments",0,var_10); + } + + if(isdefined(var_0A[2]) && var_07 != "altmode") + { + var_10 = maps\mp\_utility::validateattachment(var_0A[2]); + setmatchdata("lives",param_00,"attachments",1,var_10); + } + } + } + else if(var_07 == "item" || var_07 == "offhand") + { + var_11 = maps\mp\_utility::strip_suffix(param_04,"_mp"); + setmatchdata("lives",param_00,"weapon",var_11); + } + else + { + setmatchdata("lives",param_00,"weapon",param_04); + } + + if(maps\mp\_utility::iskillstreakweapon(param_04)) + { + setmatchdata("lives",param_00,"modifiers","killstreak",1); + } + + setmatchdata("lives",param_00,"mod",param_03); + if(isplayer(param_01)) + { + setmatchdata("lives",param_00,"attacker",param_01.clientid); + setmatchdata("lives",param_00,"attackerPos",0,int(param_01.origin[0])); + setmatchdata("lives",param_00,"attackerPos",1,int(param_01.origin[1])); + setmatchdata("lives",param_00,"attackerPos",2,int(param_01.origin[2])); + var_12 = anglestoforward((0,self.angles[1],0)); + var_13 = self.origin - param_01.origin; + var_13 = vectornormalize((var_13[0],var_13[1],0)); + setmatchdata("lives",param_00,"dotOfDeath",vectordot(var_12,var_13)); + if(param_01 maps\mp\_utility::isjuggernaut()) + { + setmatchdata("lives",param_00,"attackerIsJuggernaut",1); + } + } + else + { + setmatchdata("lives",param_00,"attacker",255); + setmatchdata("lives",param_00,"attackerPos",0,int(self.origin[0])); + setmatchdata("lives",param_00,"attackerPos",1,int(self.origin[1])); + setmatchdata("lives",param_00,"attackerPos",2,int(self.origin[2])); + } + + setmatchdata("lives",param_00,"player",self.clientid); + setmatchdata("lives",param_00,"deathPos",0,int(self.origin[0])); + setmatchdata("lives",param_00,"deathPos",1,int(self.origin[1])); + setmatchdata("lives",param_00,"deathPos",2,int(self.origin[2])); + setmatchdata("lives",param_00,"deathAngles",0,int(self.angles[0])); + setmatchdata("lives",param_00,"deathAngles",1,int(self.angles[1])); + setmatchdata("lives",param_00,"deathAngles",2,int(self.angles[2])); +} + +//Function Number: 11 +logplayerdata() +{ + if(!canlogclient(self)) + { + return; + } + + setmatchdata("players",self.clientid,"score",maps\mp\_utility::getpersstat("score")); + if(maps\mp\_utility::getpersstat("assists") > 255) + { + setmatchdata("players",self.clientid,"assists",255); + } + else + { + setmatchdata("players",self.clientid,"assists",maps\mp\_utility::getpersstat("assists")); + } + + if(maps\mp\_utility::getpersstat("longestStreak") > 255) + { + setmatchdata("players",self.clientid,"longestStreak",255); + return; + } + + setmatchdata("players",self.clientid,"longestStreak",maps\mp\_utility::getpersstat("longestStreak")); +} + +//Function Number: 12 +endofgamesummarylogger() +{ + level waittill("game_ended"); + foreach(var_01 in level.players) + { + wait 0.05; + if(!isdefined(var_01)) + { + continue; + } + + if(isdefined(var_01.weaponsused)) + { + var_01 doublebubblesort(); + var_02 = 0; + if(var_01.weaponsused.size > 3) + { + for(var_03 = var_01.weaponsused.size - 1;var_03 > var_01.weaponsused.size - 3;var_03--) + { + var_01 setplayerdata("round","weaponsUsed",var_02,var_01.weaponsused[var_03]); + var_01 setplayerdata("round","weaponXpEarned",var_02,var_01.weaponxpearned[var_03]); + var_02++; + } + } + else + { + for(var_03 = var_01.weaponsused.size - 1;var_03 >= 0;var_03--) + { + var_01 setplayerdata("round","weaponsUsed",var_02,var_01.weaponsused[var_03]); + var_01 setplayerdata("round","weaponXpEarned",var_02,var_01.weaponxpearned[var_03]); + var_02++; + } + } + } + else + { + var_01 setplayerdata("round","weaponsUsed",0,"none"); + var_01 setplayerdata("round","weaponsUsed",1,"none"); + var_01 setplayerdata("round","weaponsUsed",2,"none"); + var_01 setplayerdata("round","weaponXpEarned",0,0); + var_01 setplayerdata("round","weaponXpEarned",1,0); + var_01 setplayerdata("round","weaponXpEarned",2,0); + } + + if(isdefined(var_01.challengescompleted)) + { + var_01 setplayerdata("round","challengeNumCompleted",var_01.challengescompleted.size); + } + else + { + var_01 setplayerdata("round","challengeNumCompleted",0); + } + + for(var_03 = 0;var_03 < 20;var_03++) + { + if(isdefined(var_01.challengescompleted) && isdefined(var_01.challengescompleted[var_03]) && var_01.challengescompleted[var_03] != "ch_prestige" && !issubstr(var_01.challengescompleted[var_03],"_daily") && !issubstr(var_01.challengescompleted[var_03],"_weekly")) + { + var_01 setplayerdata("round","challengesCompleted",var_03,var_01.challengescompleted[var_03]); + continue; + } + + var_01 setplayerdata("round","challengesCompleted",var_03,""); + } + } +} + +//Function Number: 13 +doublebubblesort() +{ + var_00 = self.weaponxpearned; + var_01 = self.weaponxpearned.size; + for(var_02 = var_01 - 1;var_02 > 0;var_02--) + { + for(var_03 = 1;var_03 <= var_02;var_03++) + { + if(var_00[var_03 - 1] < var_00[var_03]) + { + var_04 = self.weaponsused[var_03]; + self.weaponsused[var_03] = self.weaponsused[var_03 - 1]; + self.weaponsused[var_03 - 1] = var_04; + var_05 = self.weaponxpearned[var_03]; + self.weaponxpearned[var_03] = self.weaponxpearned[var_03 - 1]; + self.weaponxpearned[var_03 - 1] = var_05; + var_00 = self.weaponxpearned; + } + } + } +} + +//Function Number: 14 +gameendlistener() +{ + level waittill("game_ended"); + foreach(var_01 in level.players) + { + var_01 logplayerdata(); + if(!isalive(var_01)) + { + continue; + } + + var_02 = maps\mp\_utility::getnextlifeid(); + var_01 logplayerlife(var_02); + } +} + +//Function Number: 15 +canlogclient(param_00) +{ + return param_00.clientid < level.maxlogclients; +} + +//Function Number: 16 +canlogevent() +{ + return getmatchdata("eventCount") < level.maxevents; +} + +//Function Number: 17 +canlogkillstreak() +{ + return getmatchdata("killstreakCount") < level.maxkillstreaks; +} + +//Function Number: 18 +canloglife(param_00) +{ + return getmatchdata("lifeCount") < level.maxlives; +} + +//Function Number: 19 +logweaponstat(param_00,param_01,param_02) +{ + if(!canlogclient(self)) + { + return; + } + + if(maps\mp\_utility::iskillstreakweapon(param_00)) + { + return; + } + + var_03 = getmatchdata("players",self.clientid,"weaponStats",param_00,param_01); + if(param_01 == "kills" || param_01 == "deaths" || param_01 == "headShots") + { + if(var_03 + param_02 > 255) + { + setmatchdata("players",self.clientid,"weaponStats",param_00,param_01,255); + } + else + { + setmatchdata("players",self.clientid,"weaponStats",param_00,param_01,var_03 + param_02); + } + } + + setmatchdata("players",self.clientid,"weaponStats",param_00,param_01,var_03 + param_02); +} + +//Function Number: 20 +logattachmentstat(param_00,param_01,param_02) +{ + if(!canlogclient(self)) + { + return; + } + + var_03 = getmatchdata("players",self.clientid,"attachmentsStats",param_00,param_01); + setmatchdata("players",self.clientid,"attachmentsStats",param_00,param_01,var_03 + param_02); +} + +//Function Number: 21 +buildbaseweaponlist() +{ + var_00 = []; + var_01 = 149; + for(var_02 = 0;var_02 <= var_01;var_02++) + { + var_03 = tablelookup("mp/statstable.csv",0,var_02,4); + if(var_03 == "") + { + continue; + } + + if(!issubstr(tablelookup("mp/statsTable.csv",0,var_02,2),"weapon_")) + { + continue; + } + + if(tablelookup("mp/statsTable.csv",0,var_02,2) == "weapon_other") + { + continue; + } + + var_00[var_00.size] = var_03; + } + + return var_00; +} + +//Function Number: 22 +logchallenge(param_00,param_01) +{ + if(!canlogclient(self)) + { + return; + } + + if(issubstr(param_00,"_daily") || issubstr(param_00,"_weekly")) + { + return; + } + + var_02 = getmatchdata("players",self.clientid,"challengeCount"); + if(var_02 < level.maxnumchallengesperplayer) + { + setmatchdata("players",self.clientid,"challenge",var_02,param_00); + setmatchdata("players",self.clientid,"tier",var_02,param_01); + setmatchdata("players",self.clientid,"challengeCount",var_02 + 1); + } +} + +//Function Number: 23 +logaward(param_00) +{ + if(!canlogclient(self)) + { + return; + } + + var_01 = getmatchdata("players",self.clientid,"awardCount"); + if(var_01 < level.maxnumawardsperplayer) + { + setmatchdata("players",self.clientid,"awards",var_01,param_00); + setmatchdata("players",self.clientid,"awardCount",var_01 + 1); + } +} + +//Function Number: 24 +logkillsconfirmed() +{ + if(!canlogclient(self)) + { + return; + } + + setmatchdata("players",self.clientid,"killsConfirmed",self.pers["confirmed"]); +} + +//Function Number: 25 +logkillsdenied() +{ + if(!canlogclient(self)) + { + return; + } + + setmatchdata("players",self.clientid,"killsDenied",self.pers["denied"]); +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/_matchevents.gsc b/MW3/PC/MP/maps/mp/_matchevents.gsc new file mode 100644 index 0000000..c51ac9c --- /dev/null +++ b/MW3/PC/MP/maps/mp/_matchevents.gsc @@ -0,0 +1,356 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\_matchevents.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 13 + * Decompile Time: 236 ms + * Timestamp: 10/27/2023 2:15:06 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level.match_events_fx["smoke"] = loadfx("smoke/smoke_grenade_11sec_mp"); + level.match_events_fx["tracer"] = loadfx("misc/tracer_incoming"); + level.match_events_fx["explosion"] = loadfx("explosions/building_explosion_huge_gulag"); + level.matchevents["mortar"] = ::domortar; + level.matchevents["smoke"] = ::dosmoke; + level.matchevents["airstrike"] = ::doairstrike; + level.matchevents["pavelow"] = ::dopavelow; + level.matchevents["heli_insertion"] = ::doheliinsertion; + level.matchevents["osprey_insertion"] = ::doospreyinsertion; + level.matcheventstarted = 0; +} + +//Function Number: 2 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_00 thread onplayerspawned(); + } +} + +//Function Number: 3 +onplayerspawned() +{ + self endon("disconnect"); + level endon("matchevent_started"); + self waittill("spawned_player"); + if(level.matcheventstarted == 0) + { + level.matcheventstarted = 1; + if(common_scripts\utility::cointoss()) + { + self thread [[ common_scripts\utility::random(level.matchevents) ]](); + } + + level notify("matchevent_started"); + } +} + +//Function Number: 4 +getmapcenter() +{ + if(isdefined(level.mapcenter)) + { + return level.mapcenter; + } + + var_00 = getentarray("mp_tdm_spawn_allies_start","classname"); + var_01 = getentarray("mp_tdm_spawn_axis_start","classname"); + if(isdefined(var_00) && isdefined(var_00[0]) && isdefined(var_01) && isdefined(var_01[0])) + { + var_02 = distance(var_00[0].origin,var_01[0].origin) / 2; + var_03 = vectortoangles(var_00[0].origin - var_01[0].origin); + var_03 = vectornormalize(var_03); + return var_00[0].origin + var_03 * var_02; + } + + return (0,0,0); +} + +//Function Number: 5 +getstartspawns() +{ + var_00 = getentarray("mp_tdm_spawn_allies_start","classname"); + var_01 = getentarray("mp_tdm_spawn_axis_start","classname"); + if(isdefined(var_00) && isdefined(var_00[0]) && isdefined(var_01) && isdefined(var_01[0])) + { + var_02 = []; + return var_7B; + } + + return undefined; +} + +//Function Number: 6 +domortar() +{ + var_00 = getmapcenter(); + var_01 = 1; + for(var_02 = 0;var_02 < 5;var_02++) + { + var_03 = var_00 + (randomintrange(100,600) * var_01,randomintrange(100,600) * var_01,0); + var_04 = bullettrace(var_03 + (0,0,500),var_03 - (0,0,500),0); + if(isdefined(var_04["position"])) + { + playfx(level.match_events_fx["tracer"],var_03); + thread maps\mp\_utility::playsoundinspace("fast_artillery_round",var_03); + wait randomfloatrange(0.5,1.5); + playfx(level.match_events_fx["explosion"],var_03); + playrumbleonposition("grenade_rumble",var_03); + earthquake(1,0.6,var_03,2000); + thread maps\mp\_utility::playsoundinspace("exp_suitcase_bomb_main",var_03); + physicsexplosionsphere(var_03 + (0,0,30),250,125,2); + var_01 = var_01 * -1; + } + } +} + +//Function Number: 7 +dosmoke() +{ + var_00 = getmapcenter(); + var_01 = 1; + for(var_02 = 0;var_02 < 3;var_02++) + { + var_03 = var_00 + (randomintrange(100,600) * var_01,randomintrange(100,600) * var_01,0); + playfx(level.match_events_fx["smoke"],var_03); + var_01 = var_01 * -1; + wait 2; + } +} + +//Function Number: 8 +doairstrike() +{ + level endon("game_ended"); + var_00 = 1; + var_01 = getmapcenter(); + for(var_02 = 0;var_02 < 3;var_02++) + { + var_03 = var_01 + (randomintrange(100,600) * var_00,randomintrange(100,600) * var_00,0); + var_04 = bullettrace(var_03 + (0,0,500),var_03 - (0,0,500),0); + if(isdefined(var_04["position"])) + { + thread doairstrikeflyby(var_04["position"]); + var_00 = var_00 * -1; + wait randomintrange(2,4); + } + } +} + +//Function Number: 9 +doairstrikeflyby(param_00) +{ + var_01 = randomint(level.spawnpoints.size - 1); + var_02 = level.spawnpoints[var_01].origin * (1,1,0); + var_03 = 8000; + var_04 = 8000; + var_05 = getent("airstrikeheight","targetname"); + var_06 = (0,0,var_05.origin[2] + randomintrange(-100,600)); + var_07 = anglestoforward((0,randomint(45),0)); + var_08 = var_02 + var_06 + var_07 * var_03 * -1; + var_09 = var_02 + var_06 + var_07 * var_04; + var_0A = var_08 + (randomintrange(400,500),randomintrange(400,500),randomintrange(200,300)); + var_0B = var_09 + (randomintrange(400,500),randomintrange(400,500),randomintrange(200,300)); + var_0C = spawnplane(self,"script_model",var_08); + var_0D = spawnplane(self,"script_model",var_0A); + if(common_scripts\utility::cointoss()) + { + var_0C setmodel("vehicle_av8b_harrier_jet_mp"); + var_0D setmodel("vehicle_av8b_harrier_jet_mp"); + } + else + { + var_0C setmodel("vehicle_av8b_harrier_jet_opfor_mp"); + var_0D setmodel("vehicle_av8b_harrier_jet_opfor_mp"); + } + + var_0C.angles = vectortoangles(var_09 - var_08); + var_0C playloopsound("veh_mig29_dist_loop"); + var_0C thread playplanefx(); + var_0D.angles = vectortoangles(var_09 - var_0A); + var_0D playloopsound("veh_mig29_dist_loop"); + var_0D thread playplanefx(); + var_0E = distance(var_08,var_09); + var_0C moveto(var_09 * 2,var_0E / 2000,0,0); + wait randomfloatrange(0.25,0.5); + var_0D moveto(var_0B * 2,var_0E / 2000,0,0); + wait var_0E / 2000; + var_0C delete(); + var_0D delete(); +} + +//Function Number: 10 +playplanefx() +{ + self endon("death"); + wait 0.5; + playfxontag(level.fx_airstrike_afterburner,self,"tag_engine_right"); + wait 0.5; + playfxontag(level.fx_airstrike_afterburner,self,"tag_engine_left"); + wait 0.5; + playfxontag(level.fx_airstrike_contrail,self,"tag_right_wingtip"); + wait 0.5; + playfxontag(level.fx_airstrike_contrail,self,"tag_left_wingtip"); +} + +//Function Number: 11 +dopavelow() +{ + var_00 = getmapcenter(); + var_01 = bullettrace(var_00 + (0,0,500),var_00 - (0,0,500),0); + if(isdefined(var_01["position"])) + { + if(common_scripts\utility::cointoss()) + { + var_02 = "vehicle_pavelow"; + } + else + { + var_02 = "vehicle_pavelow_opfor"; + } + + var_03 = spawnhelicopter(self,var_01["position"] + (0,0,1000),(0,0,0),"pavelow_mp",var_02); + if(!isdefined(var_03)) + { + return; + } + + var_03.team = self.pers["team"]; + var_03.heli_type = level.heli_types[var_02]; + var_03 thread [[ level.lightfxfunc[level.heli_types[var_02]] ]](); + var_03.zoffset = (0,0,var_03 gettagorigin("tag_origin")[2] - var_03 gettagorigin("tag_ground")[2]); + wait 1; + playfxontag(level.chopper_fx["damage"]["on_fire"],var_03,"tag_engine_left"); + var_03 thread maps\mp\killstreaks\_helicopter::heli_crash(); + } +} + +//Function Number: 12 +doheliinsertion() +{ + var_00 = getstartspawns(); + if(isdefined(var_00)) + { + var_01 = 200; + var_02 = 200; + var_03 = 1000; + var_04 = anglestoforward(var_00["allies"][0].angles) * 300; + var_05 = anglestoup(var_00["allies"][0].angles) * var_01; + var_06 = anglestoright(var_00["allies"][0].angles) * 200; + var_07 = anglestoright(var_00["allies"][0].angles) * -200; + var_08 = var_00["allies"][0].origin + var_04 + var_05 + var_06; + var_09 = var_00["allies"][0].origin + var_04 + var_05 + var_07; + var_0A = spawnhelicopter(self,var_08,var_00["allies"][0].angles,"attack_littlebird_mp","vehicle_little_bird_bench"); + var_0B = spawnhelicopter(self,var_09,var_00["allies"][0].angles,"attack_littlebird_mp","vehicle_little_bird_bench"); + var_0C = anglestoforward(var_00["axis"][0].angles) * 300; + var_0D = anglestoup(var_00["axis"][0].angles) * var_01; + var_0E = anglestoright(var_00["axis"][0].angles) * 200; + var_0F = anglestoright(var_00["axis"][0].angles) * -200; + var_10 = var_00["axis"][0].origin + var_0C + var_0D + var_0E; + var_11 = var_00["axis"][0].origin + var_0C + var_0D + var_0F; + var_12 = spawnhelicopter(self,var_10,var_00["axis"][0].angles,"attack_littlebird_mp","vehicle_little_bird_bench"); + var_13 = spawnhelicopter(self,var_11,var_00["axis"][0].angles,"attack_littlebird_mp","vehicle_little_bird_bench"); + var_0A vehicle_setspeed(20,10); + var_0A setyawspeed(3,3,3,0.3); + var_0A setvehgoalpos(var_08 + (0,0,var_02),1); + var_0B vehicle_setspeed(20,10); + var_0B setyawspeed(3,3,3,0.3); + var_0B setvehgoalpos(var_09 + (0,0,var_02),1); + var_12 vehicle_setspeed(20,10); + var_12 setyawspeed(3,3,3,0.3); + var_12 setvehgoalpos(var_10 + (0,0,var_02),1); + var_13 vehicle_setspeed(20,10); + var_13 setyawspeed(3,3,3,0.3); + var_13 setvehgoalpos(var_11 + (0,0,var_02),1); + var_0A waittill("goal"); + wait 2; + var_0A vehicle_setspeed(80,60); + var_0A setyawspeed(30,15,15,0.3); + var_0A setvehgoalpos(var_08 + (0,0,var_03) + var_06 * 2,1); + var_0B vehicle_setspeed(80,60); + var_0B setyawspeed(30,15,15,0.3); + var_0B setvehgoalpos(var_09 + (0,0,var_03) + var_07 * 2,1); + var_12 vehicle_setspeed(80,60); + var_12 setyawspeed(30,15,15,0.3); + var_12 setvehgoalpos(var_10 + (0,0,var_03) + var_0E * 2,1); + var_13 vehicle_setspeed(80,60); + var_13 setyawspeed(30,15,15,0.3); + var_13 setvehgoalpos(var_11 + (0,0,var_03) + var_0F * 2,1); + var_0A waittill("goal"); + var_0A vehicle_setspeed(120,120); + var_0A setyawspeed(60,40,40,0.3); + var_0A setvehgoalpos(var_08 + (0,0,var_03) + var_06 * 2 + var_04 * -20,1); + var_0B vehicle_setspeed(120,120); + var_0B setyawspeed(60,40,40,0.3); + var_0B setvehgoalpos(var_09 + (0,0,var_03) + var_07 * 2 + var_04 * -20,1); + var_12 vehicle_setspeed(120,120); + var_12 setyawspeed(60,40,40,0.3); + var_12 setvehgoalpos(var_10 + (0,0,var_03) + var_0E * 2 + var_0C * -20,1); + var_13 vehicle_setspeed(120,120); + var_13 setyawspeed(60,40,40,0.3); + var_13 setvehgoalpos(var_11 + (0,0,var_03) + var_0F * 2 + var_0C * -20,1); + var_0A waittill("goal"); + var_0A delete(); + var_0B delete(); + var_12 delete(); + var_13 delete(); + } +} + +//Function Number: 13 +doospreyinsertion() +{ + var_00 = getstartspawns(); + if(isdefined(var_00)) + { + var_01 = 200; + var_02 = 200; + var_03 = 1000; + var_04 = anglestoforward(var_00["allies"][0].angles) * 300; + var_05 = anglestoup(var_00["allies"][0].angles) * var_01; + var_06 = var_00["allies"][0].origin + var_04 + var_05; + var_07 = spawnhelicopter(self,var_06,var_00["allies"][0].angles,"osprey_minigun_mp","vehicle_v22_osprey_body_mp"); + var_08 = anglestoforward(var_00["axis"][0].angles) * 300; + var_09 = anglestoup(var_00["axis"][0].angles) * var_01; + var_0A = var_00["axis"][0].origin + var_08 + var_09; + var_0B = spawnhelicopter(self,var_0A,var_00["axis"][0].angles,"osprey_minigun_mp","vehicle_v22_osprey_body_mp"); + var_07 thread maps\mp\killstreaks\_escortairdrop::airshippitchpropsup(); + var_0B thread maps\mp\killstreaks\_escortairdrop::airshippitchpropsup(); + var_07 thread maps\mp\killstreaks\_escortairdrop::airshippitchhatchdown(); + var_0B thread maps\mp\killstreaks\_escortairdrop::airshippitchhatchdown(); + var_07 vehicle_setspeed(20,10); + var_07 setyawspeed(3,3,3,0.3); + var_07 setvehgoalpos(var_06 + (0,0,var_02),1); + var_0B vehicle_setspeed(20,10); + var_0B setyawspeed(3,3,3,0.3); + var_0B setvehgoalpos(var_0A + (0,0,var_02),1); + var_07 waittill("goal"); + var_07 thread maps\mp\killstreaks\_escortairdrop::airshippitchhatchup(); + var_0B thread maps\mp\killstreaks\_escortairdrop::airshippitchhatchup(); + wait 2; + var_07 vehicle_setspeed(80,60); + var_07 setyawspeed(30,15,15,0.3); + var_07 setvehgoalpos(var_06 + (0,0,var_03),1); + var_0B vehicle_setspeed(80,60); + var_0B setyawspeed(30,15,15,0.3); + var_0B setvehgoalpos(var_0A + (0,0,var_03),1); + var_07 waittill("goal"); + var_07 thread maps\mp\killstreaks\_escortairdrop::airshippitchpropsdown(); + var_0B thread maps\mp\killstreaks\_escortairdrop::airshippitchpropsdown(); + var_07 vehicle_setspeed(120,120); + var_07 setyawspeed(100,100,40,0.3); + var_07 setvehgoalpos(var_06 + (0,0,var_03) + var_04 * -20,1); + var_0B vehicle_setspeed(120,120); + var_0B setyawspeed(100,100,40,0.3); + var_0B setvehgoalpos(var_0A + (0,0,var_03) + var_08 * -20,1); + var_07 waittill("goal"); + var_07 delete(); + var_0B delete(); + } +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/_minefields.gsc b/MW3/PC/MP/maps/mp/_minefields.gsc new file mode 100644 index 0000000..f4d8bae --- /dev/null +++ b/MW3/PC/MP/maps/mp/_minefields.gsc @@ -0,0 +1,63 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\_minefields.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 3 + * Decompile Time: 64 ms + * Timestamp: 10/27/2023 2:15:06 AM +*******************************************************************/ + +//Function Number: 1 +minefields() +{ + var_00 = getentarray("minefield","targetname"); + if(var_00.size > 0) + { + level._effect["mine_explosion"] = loadfx("explosions/grenadeExp_dirt"); + } + + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + var_00[var_01] thread minefield_think(); + } +} + +//Function Number: 2 +minefield_think() +{ + for(;;) + { + self waittill("trigger",var_00); + if(isplayer(var_00)) + { + var_00 thread minefield_kill(self); + } + } +} + +//Function Number: 3 +minefield_kill(param_00) +{ + if(isdefined(self.minefield)) + { + return; + } + + self.minefield = 1; + self playsound("minefield_click"); + wait 0.5; + wait randomfloat(0.5); + if(isdefined(self) && self istouching(param_00)) + { + var_01 = self getorigin(); + var_02 = 300; + var_03 = 2000; + var_04 = 50; + self playsound("explo_mine"); + playfx(level._effect["mine_explosion"],var_01); + radiusdamage(var_01,var_02,var_03,var_04); + } + + self.minefield = undefined; +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/_radiation.gsc b/MW3/PC/MP/maps/mp/_radiation.gsc new file mode 100644 index 0000000..73516f1 --- /dev/null +++ b/MW3/PC/MP/maps/mp/_radiation.gsc @@ -0,0 +1,232 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\_radiation.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 10 + * Decompile Time: 156 ms + * Timestamp: 10/27/2023 2:16:51 AM +*******************************************************************/ + +//Function Number: 1 +radiation() +{ + precachestring(&"SCRIPT_RADIATION_DEATH"); + var_00 = getentarray("radiation","targetname"); + if(var_00.size > 0) + { + precacheshellshock("mp_radiation_low"); + precacheshellshock("mp_radiation_med"); + precacheshellshock("mp_radiation_high"); + foreach(var_02 in var_00) + { + var_02 thread common_scripts\_dynamic_world::triggertouchthink(::playerenterarea,::playerleavearea); + } + + thread onplayerconnect(); + } +} + +//Function Number: 2 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_00.var_2BC2 = 0; + } +} + +//Function Number: 3 +playerenterarea(param_00) +{ + self.var_2BC2++; + if(self.var_2BC2 == 1) + { + radiationeffect(); + } +} + +//Function Number: 4 +playerleavearea(param_00) +{ + self.var_2BC2--; + if(self.var_2BC2 != 0) + { + return; + } + + self.var_2BC5 = 0; + self notify("leftTrigger"); + if(isdefined(self.var_2BC6)) + { + self.var_2BC6 fadeoutblackout(0.1,0); + } +} + +//Function Number: 5 +soundwatcher(param_00) +{ + common_scripts\utility::waittill_any("death","leftTrigger"); + self stoploopsound(); +} + +//Function Number: 6 +radiationeffect() +{ + self endon("disconnect"); + self endon("game_ended"); + self endon("death"); + self endon("leftTrigger"); + self.var_2BC5 = 0; + thread soundwatcher(self); + for(;;) + { + self.var_2BC5++; + switch(self.var_2BC5) + { + case 1: + self.var_2BC9 = "item_geigercouner_level2"; + self playloopsound(self.var_2BC9); + self viewkick(1,self.origin); + break; + + case 3: + self shellshock("mp_radiation_low",4); + self.var_2BC9 = "item_geigercouner_level3"; + self stoploopsound(); + self playloopsound(self.var_2BC9); + self viewkick(3,self.origin); + doradiationdamage(15); + break; + + case 4: + self shellshock("mp_radiation_med",5); + self.var_2BC9 = "item_geigercouner_level3"; + self stoploopsound(); + self playloopsound(self.var_2BC9); + self viewkick(15,self.origin); + thread blackout(); + doradiationdamage(25); + break; + + case 6: + self shellshock("mp_radiation_high",5); + self.var_2BC9 = "item_geigercouner_level4"; + self stoploopsound(); + self playloopsound(self.var_2BC9); + self viewkick(75,self.origin); + doradiationdamage(45); + break; + + case 8: + self shellshock("mp_radiation_high",5); + self.var_2BC9 = "item_geigercouner_level4"; + self stoploopsound(); + self playloopsound(self.var_2BC9); + self viewkick(127,self.origin); + doradiationdamage(175); + break; + } + + wait 1; + } + + wait 5; +} + +//Function Number: 7 +blackout() +{ + self endon("disconnect"); + self endon("game_ended"); + self endon("death"); + self endon("leftTrigger"); + if(!isdefined(self.var_2BC6)) + { + self.var_2BC6 = newclienthudelem(self); + self.var_2BC6.x = 0; + self.var_2BC6.y = 0; + self.var_2BC6 setshader("black",640,480); + self.var_2BC6.alignx = "left"; + self.var_2BC6.aligny = "top"; + self.var_2BC6.horzalign = "fullscreen"; + self.var_2BC6.vertalign = "fullscreen"; + self.var_2BC6.alpha = 0; + } + + var_00 = 1; + var_01 = 2; + var_02 = 0.25; + var_03 = 1; + var_04 = 5; + var_05 = 100; + var_06 = 0; + for(;;) + { + while(self.var_2BC5 > 1) + { + var_07 = var_05 - var_04; + var_06 = self.var_2BC5 - var_04 / var_07; + if(var_06 < 0) + { + var_06 = 0; + } + else if(var_06 > 1) + { + var_06 = 1; + } + + var_08 = var_01 - var_00; + var_09 = var_00 + var_08 * 1 - var_06; + var_0A = var_03 - var_02; + var_0B = var_02 + var_0A * var_06; + var_0C = var_06 * 0.5; + if(var_06 == 1) + { + break; + } + + var_0D = var_09 / 2; + self.var_2BC6 fadeinblackout(var_0D,var_0B); + self.var_2BC6 fadeoutblackout(var_0D,var_0C); + wait var_06 * 0.5; + } + + if(var_06 == 1) + { + break; + } + + if(self.var_2BC6.alpha != 0) + { + self.var_2BC6 fadeoutblackout(1,0); + } + + wait 0.05; + } + + self.var_2BC6 fadeinblackout(2,0); +} + +//Function Number: 8 +doradiationdamage(param_00) +{ + self thread [[ level.callbackplayerdamage ]](self,self,param_00,0,"MOD_SUICIDE","claymore_mp",self.origin,(0,0,0) - self.origin,"none",0); +} + +//Function Number: 9 +fadeinblackout(param_00,param_01) +{ + self fadeovertime(param_00); + self.alpha = param_01; + wait param_00; +} + +//Function Number: 10 +fadeoutblackout(param_00,param_01) +{ + self fadeovertime(param_00); + self.alpha = param_01; + wait param_00; +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/_scoreboard.gsc b/MW3/PC/MP/maps/mp/_scoreboard.gsc new file mode 100644 index 0000000..1a33cdb --- /dev/null +++ b/MW3/PC/MP/maps/mp/_scoreboard.gsc @@ -0,0 +1,123 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\_scoreboard.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 3 + * Decompile Time: 72 ms + * Timestamp: 10/27/2023 2:15:07 AM +*******************************************************************/ + +//Function Number: 1 +processlobbyscoreboards() +{ + foreach(var_01 in level.placement["all"]) + { + var_01 setplayerscoreboardinfo(); + } + + if(level.teambased) + { + var_03 = getteamscore("allies"); + var_04 = getteamscore("axis"); + if(var_03 == var_04) + { + var_05 = "tied"; + } + else if(var_04 > var_05) + { + var_05 = "allies"; + } + else + { + var_05 = "axis"; + } + + if(var_05 == "tied") + { + buildscoreboardtype("allies"); + buildscoreboardtype("axis"); + foreach(var_01 in level.players) + { + if(var_01.pers["team"] == "spectator") + { + var_01 setplayerdata("round","scoreboardType","allies"); + continue; + } + + var_01 setplayerdata("round","scoreboardType",var_01.pers["team"]); + } + } + else + { + buildscoreboardtype(var_05); + foreach(var_01 in level.players) + { + var_01 setplayerdata("round","scoreboardType",var_05); + } + } + } + else + { + buildscoreboardtype("neutral"); + foreach(var_01 in level.players) + { + var_01 setplayerdata("round","scoreboardType","neutral"); + } + } + + foreach(var_01 in level.players) + { + var_01 setclientdvars("player_summary_xp",var_01.pers["summary"]["xp"],"player_summary_score",var_01.pers["summary"]["score"],"player_summary_challenge",var_01.pers["summary"]["challenge"],"player_summary_match",var_01.pers["summary"]["match"],"player_summary_misc",var_01.pers["summary"]["misc"]); + } +} + +//Function Number: 2 +setplayerscoreboardinfo() +{ + var_00 = getclientmatchdata("scoreboardPlayerCount"); + if(var_00 <= 24) + { + setclientmatchdata("players",self.clientmatchdataid,"score",self.pers["score"]); + var_01 = maps\mp\_utility::getplayerstat("kills"); + setclientmatchdata("players",self.clientmatchdataid,"kills",var_01); + var_02 = maps\mp\_utility::getplayerstat("assists"); + setclientmatchdata("players",self.clientmatchdataid,"assists",var_02); + var_03 = maps\mp\_utility::getplayerstat("deaths"); + setclientmatchdata("players",self.clientmatchdataid,"deaths",var_03); + var_04 = game[self.pers["team"]]; + setclientmatchdata("players",self.clientmatchdataid,"faction",var_04); + var_00++; + setclientmatchdata("scoreboardPlayerCount",var_00); + } +} + +//Function Number: 3 +buildscoreboardtype(param_00) +{ + if(param_00 == "neutral") + { + var_01 = 0; + foreach(var_03 in level.placement["all"]) + { + setclientmatchdata("scoreboards",param_00,var_01,var_03.clientmatchdataid); + var_01++; + } + + return; + } + + var_05 = maps\mp\_utility::getotherteam(var_03); + var_01 = 0; + foreach(var_03 in level.placement[param_00]) + { + setclientmatchdata("scoreboards",param_00,var_01,var_03.clientmatchdataid); + var_01++; + } + + foreach(var_03 in level.placement[var_05]) + { + setclientmatchdata("scoreboards",param_00,var_01,var_03.clientmatchdataid); + var_01++; + } +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/_shutter.gsc b/MW3/PC/MP/maps/mp/_shutter.gsc new file mode 100644 index 0000000..cc418ed --- /dev/null +++ b/MW3/PC/MP/maps/mp/_shutter.gsc @@ -0,0 +1,193 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\_shutter.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 5 + * Decompile Time: 92 ms + * Timestamp: 10/27/2023 2:15:08 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + level.inc = 0; + common_scripts\utility::array_levelthread(getentarray("wire","targetname"),::wirewander); + var_00 = getentarray("shutter_left","targetname"); + var_01 = getentarray("shutter_right_open","targetname"); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + var_00[var_00.size] = var_01[var_02]; + } + + var_01 = getentarray("shutter_left_closed","targetname"); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + var_00[var_00.size] = var_01[var_02]; + } + + for(var_02 = 0;var_02 < var_00.size;var_02++) + { + var_03 = var_00[var_02]; + var_03 rotateto((var_03.angles[0],var_03.angles[1] + 180,var_03.angles[2]),0.1); + } + + wait 0.2; + for(var_02 = 0;var_02 < var_00.size;var_02++) + { + var_00[var_02].startyaw = var_00[var_02].angles[1]; + } + + var_04 = getentarray("shutter_right","targetname"); + var_01 = getentarray("shutter_left_open","targetname"); + var_02 = 0; + while(var_02 < var_01.size) + { + var_03++ = var_7B[var_04.size]; + } + + var_02 = getentarray("shutter_right_closed","targetname"); + var_03 = 0; + while(var_03 < var_02.size) + { + var_03++ = var_7B[var_7B.size]; + } + + for(var_03 = 0;var_03 < var_7B.size;var_03++ = var_02[var_03]) + { + var_7B[var_03].startyaw = var_7B[var_03].angles[1]; + } + + var_02 = undefined; + var_05 = "left"; + for(;;) + { + common_scripts\utility::array_levelthread(var_01,::shutterwanderleft,var_05); + common_scripts\utility::array_levelthread(var_7B,::shutterwanderright,var_05); + level waittill(var_01[var_02],"wind blows",var_05); + } +} + +//Function Number: 2 +windcontroller() +{ + for(;;) + { + var_00 = "left"; + if(randomint(100) > 50) + { + var_00 = "right"; + } + + level notify("wind blows",var_00); + wait 2 + randomfloat(10); + } +} + +//Function Number: 3 +shutterwanderleft(param_00,param_01) +{ + level.inc++; + level endon("wind blows"); + var_02 = param_00.startyaw; + if(param_01 == "left") + { + var_02 = var_02 + 179.9; + } + + var_03 = 0.2; + param_00 rotateto((param_00.angles[0],var_02,param_00.angles[2]),var_03); + wait var_03 + 0.1; + for(;;) + { + var_04 = randomint(80); + if(randomint(100) > 50) + { + var_04 = var_04 * -1; + } + + var_02 = param_00.angles[1] + var_04; + var_05 = param_00.angles[1] + var_04 * -1; + if(var_02 < param_00.startyaw || var_02 > param_00.startyaw + 179) + { + var_02 = var_05; + } + + var_06 = abs(param_00.angles[1] - var_02); + var_03 = var_06 * 0.02 + randomfloat(2); + if(var_03 < 0.3) + { + var_03 = 0.3; + } + + param_00 rotateto((param_00.angles[0],var_02,param_00.angles[2]),var_03,var_03 * 0.5,var_03 * 0.5); + wait var_03; + } +} + +//Function Number: 4 +shutterwanderright(param_00,param_01) +{ + level.inc++; + level endon("wind blows"); + var_02 = param_00.startyaw; + if(param_01 == "left") + { + var_02 = var_02 + 179.9; + } + + var_03 = 0.2; + param_00 rotateto((param_00.angles[0],var_02,param_00.angles[2]),var_03); + wait var_03 + 0.1; + for(;;) + { + var_04 = randomint(80); + if(randomint(100) > 50) + { + var_04 = var_04 * -1; + } + + var_02 = param_00.angles[1] + var_04; + var_05 = param_00.angles[1] + var_04 * -1; + if(var_02 < param_00.startyaw || var_02 > param_00.startyaw + 179) + { + var_02 = var_05; + } + + var_06 = abs(param_00.angles[1] - var_02); + var_03 = var_06 * 0.02 + randomfloat(2); + if(var_03 < 0.3) + { + var_03 = 0.3; + } + + param_00 rotateto((param_00.angles[0],var_02,param_00.angles[2]),var_03,var_03 * 0.5,var_03 * 0.5); + wait var_03; + } +} + +//Function Number: 5 +wirewander(param_00) +{ + var_01 = getentarray(param_00.target,"targetname"); + var_02 = var_01[0].origin; + var_03 = var_01[1].origin; + var_04 = vectortoangles(var_02 - var_03); + var_05 = spawn("script_model",(0,0,0)); + var_05.origin = var_02 * 0.5 + var_03 * 0.5; + var_05.angles = var_04; + param_00 linkto(var_05); + var_06 = 2; + var_07 = 0.9; + var_08 = 4 + randomfloat(2); + var_05 rotateroll(var_08 * 0.5,0.2); + wait 0.2; + for(;;) + { + var_09 = var_06 + randomfloat(var_07) - var_07 * 0.5; + var_05 rotateroll(var_08,var_09,var_09 * 0.5,var_09 * 0.5); + wait var_09; + var_05 rotateroll(var_08 * -1,var_09,var_09 * 0.5,var_09 * 0.5); + wait var_09; + } +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/_stinger.gsc b/MW3/PC/MP/maps/mp/_stinger.gsc new file mode 100644 index 0000000..de25a9e --- /dev/null +++ b/MW3/PC/MP/maps/mp/_stinger.gsc @@ -0,0 +1,461 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\_stinger.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 11 + * Decompile Time: 222 ms + * Timestamp: 10/27/2023 2:15:09 AM +*******************************************************************/ + +//Function Number: 1 +initstingerusage() +{ + self.stingerstage = undefined; + self.stingertarget = undefined; + self.stingerlockstarttime = undefined; + self.stingerlostsightlinetime = undefined; + thread resetstingerlockingondeath(); + level.stingertargets = []; +} + +//Function Number: 2 +resetstingerlocking() +{ + if(!isdefined(self.stingeruseentered)) + { + return; + } + + self.stingeruseentered = undefined; + self notify("stop_javelin_locking_feedback"); + self notify("stop_javelin_locked_feedback"); + self weaponlockfree(); + initstingerusage(); +} + +//Function Number: 3 +resetstingerlockingondeath() +{ + self endon("disconnect"); + self notify("ResetStingerLockingOnDeath"); + self endon("ResetStingerLockingOnDeath"); + for(;;) + { + self waittill("death"); + resetstingerlocking(); + } +} + +//Function Number: 4 +stillvalidstingerlock(param_00) +{ + if(!isdefined(param_00)) + { + return 0; + } + + if(!self worldpointinreticle_circle(param_00.origin,65,85)) + { + return 0; + } + + if(self.stingertarget == level.ac130.planemodel && !isdefined(level.ac130player)) + { + return 0; + } + + return 1; +} + +//Function Number: 5 +loopstingerlockingfeedback() +{ + self endon("stop_javelin_locking_feedback"); + for(;;) + { + if(isdefined(level.chopper) && isdefined(level.chopper.gunner) && isdefined(self.stingertarget) && self.stingertarget == level.chopper.gunner) + { + level.chopper.gunner playlocalsound("missile_locking"); + } + + if(isdefined(level.ac130player) && isdefined(self.stingertarget) && self.stingertarget == level.ac130.planemodel) + { + level.ac130player playlocalsound("missile_locking"); + } + + self playlocalsound("stinger_locking"); + self playrumbleonentity("ac130_25mm_fire"); + wait 0.6; + } +} + +//Function Number: 6 +loopstingerlockedfeedback() +{ + self endon("stop_javelin_locked_feedback"); + for(;;) + { + if(isdefined(level.chopper) && isdefined(level.chopper.gunner) && isdefined(self.stingertarget) && self.stingertarget == level.chopper.gunner) + { + level.chopper.gunner playlocalsound("missile_locking"); + } + + if(isdefined(level.ac130player) && isdefined(self.stingertarget) && self.stingertarget == level.ac130.planemodel) + { + level.ac130player playlocalsound("missile_locking"); + } + + self playlocalsound("stinger_locked"); + self playrumbleonentity("ac130_25mm_fire"); + wait 0.25; + } +} + +//Function Number: 7 +locksighttest(param_00) +{ + var_01 = self geteye(); + if(!isdefined(param_00)) + { + return 0; + } + + var_02 = sighttracepassed(var_01,param_00.origin,0,param_00); + if(var_02) + { + return 1; + } + + var_03 = param_00 getpointinbounds(1,0,0); + var_02 = sighttracepassed(var_01,var_03,0,param_00); + if(var_02) + { + return 1; + } + + var_04 = param_00 getpointinbounds(-1,0,0); + var_02 = sighttracepassed(var_01,var_04,0,param_00); + if(var_02) + { + return 1; + } + + return 0; +} + +//Function Number: 8 +stingerdebugdraw(param_00) +{ +} + +//Function Number: 9 +softsighttest() +{ + var_00 = 500; + if(locksighttest(self.stingertarget)) + { + self.stingerlostsightlinetime = 0; + return 1; + } + + if(self.stingerlostsightlinetime == 0) + { + self.stingerlostsightlinetime = gettime(); + } + + var_01 = gettime() - self.stingerlostsightlinetime; + if(var_01 >= var_00) + { + resetstingerlocking(); + return 0; + } + + return 1; +} + +//Function Number: 10 +gettargetlist() +{ + var_00 = []; + if(level.teambased) + { + if(isdefined(level.chopper) && level.chopper.team != self.team || level.chopper.owner == self) + { + } + + if(isdefined(level.ac130player) && level.ac130player.team != self.team) + { + } + + if(isdefined(level.harriers)) + { + foreach(var_02 in level.harriers) + { + if(isdefined(var_02) && var_02.team != self.team || isdefined(var_02.owner) && var_02.owner == self) + { + var_7B[var_7B.size] = var_02; + } + } + } + + if(level.uavmodels[level.otherteam[self.team]].size) + { + foreach(var_05 in level.uavmodels[level.otherteam[self.team]]) + { + var_7B[var_7B.size] = var_05; + } + } + + if(isdefined(level.littlebirds)) + { + foreach(var_08 in level.littlebirds) + { + if(!isdefined(var_08)) + { + continue; + } + + if(self.team != var_08.owner.team || self == var_08.owner) + { + var_7B[var_7B.size] = var_08; + } + } + } + + if(isdefined(level.ugvs)) + { + foreach(var_0B in level.ugvs) + { + if(!isdefined(var_0B)) + { + continue; + } + + if(self.team != var_0B.owner.team || self == var_0B.owner) + { + var_7B[var_7B.size] = var_0B; + } + } + } + } + else + { + if(isdefined(level.chopper)) + { + } + + if(isdefined(level.ac130player)) + { + } + + if(isdefined(level.harriers)) + { + foreach(var_02 in level.harriers) + { + if(isdefined(var_02)) + { + var_7B[var_7B.size] = var_02; + } + } + } + + if(level.uavmodels.size) + { + foreach(var_05 in level.uavmodels) + { + if(isdefined(var_05.owner) && var_05.owner == self) + { + continue; + } + + var_7B[var_7B.size] = var_05; + } + } + + if(isdefined(level.littlebirds)) + { + foreach(var_08 in level.littlebirds) + { + if(!isdefined(var_08)) + { + continue; + } + + var_7B[var_7B.size] = var_08; + } + } + + if(isdefined(level.ugvs)) + { + foreach(var_0B in level.ugvs) + { + if(!isdefined(var_0B)) + { + continue; + } + + var_7B[var_7B.size] = var_0B; + } + } + + foreach(var_16 in level.players) + { + if(!isalive(var_16)) + { + continue; + } + + if(level.teambased && var_16.team == self.team) + { + continue; + } + + if(var_16 == self) + { + continue; + } + + if(var_16 maps\mp\_utility::isjuggernaut()) + { + var_7B[var_7B.size] = var_16; + } + } + } + + return var_7B; +} + +//Function Number: 11 +stingerusageloop() +{ + self endon("death"); + self endon("disconnect"); + self endon("faux_spawn"); + var_00 = 1000; + initstingerusage(); + for(;;) + { + wait 0.05; + var_01 = self getcurrentweapon(); + if(var_01 != "stinger_mp" && var_01 != "at4_mp" && var_01 != "iw5_smaw_mp") + { + resetstingerlocking(); + continue; + } + + if(self playerads() < 0.95) + { + resetstingerlocking(); + continue; + } + + self.stingeruseentered = 1; + if(!isdefined(self.stingerstage)) + { + self.stingerstage = 0; + } + + stingerdebugdraw(self.stingertarget); + if(self.stingerstage == 0) + { + var_02 = gettargetlist(); + if(var_02.size == 0) + { + continue; + } + + var_03 = []; + foreach(var_05 in var_02) + { + if(!isdefined(var_05)) + { + continue; + } + + var_06 = self worldpointinreticle_circle(var_05.origin,65,75); + if(var_06) + { + var_03[var_03.size] = var_05; + } + } + + if(var_03.size == 0) + { + continue; + } + + var_08 = sortbydistance(var_03,self.origin); + if(!locksighttest(var_08[0])) + { + continue; + } + + thread loopstingerlockingfeedback(); + self.stingertarget = var_08[0]; + self.stingerlockstarttime = gettime(); + self.stingerstage = 1; + self.stingerlostsightlinetime = 0; + } + + if(self.stingerstage == 1) + { + if(!stillvalidstingerlock(self.stingertarget)) + { + resetstingerlocking(); + continue; + } + + var_09 = softsighttest(); + if(!var_09) + { + continue; + } + + var_0A = gettime() - self.stingerlockstarttime; + if(maps\mp\_utility::_hasperk("specialty_fasterlockon")) + { + if(var_0A < var_00 * 0.5) + { + continue; + } + } + else if(var_0A < var_00) + { + continue; + } + + self notify("stop_javelin_locking_feedback"); + thread loopstingerlockedfeedback(); + if(self.stingertarget.model == "vehicle_av8b_harrier_jet_opfor_mp" || self.stingertarget.model == "vehicle_av8b_harrier_jet_mp" || self.stingertarget.model == "vehicle_little_bird_armed") + { + self weaponlockfinalize(self.stingertarget); + } + else if(isplayer(self.stingertarget)) + { + self weaponlockfinalize(self.stingertarget,(100,0,64)); + } + else + { + self weaponlockfinalize(self.stingertarget,(100,0,-32)); + } + + self.stingerstage = 2; + } + + if(self.stingerstage == 2) + { + var_09 = softsighttest(); + if(!var_09) + { + continue; + } + + if(!stillvalidstingerlock(self.stingertarget)) + { + resetstingerlocking(); + continue; + } + } + } +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/_utility.gsc b/MW3/PC/MP/maps/mp/_utility.gsc new file mode 100644 index 0000000..6d85385 --- /dev/null +++ b/MW3/PC/MP/maps/mp/_utility.gsc @@ -0,0 +1,3876 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\_utility.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 230 + * Decompile Time: 4048 ms + * Timestamp: 10/27/2023 2:15:21 AM +*******************************************************************/ + +//Function Number: 1 +exploder_sound() +{ + if(isdefined(self.script_delay)) + { + wait self.script_delay; + } + + self playsound(level.scr_sound[self.script_sound]); +} + +//Function Number: 2 +_beginlocationselection(param_00,param_01,param_02,param_03) +{ + self setclientdvar("ui_selecting_location","1"); + self beginlocationselection(param_01,param_02,param_03); + self.selectinglocation = 1; + self setblurforplayer(10.3,0.3); + thread endselectiononaction("cancel_location"); + thread endselectiononaction("death"); + thread endselectiononaction("disconnect"); + thread endselectiononaction("used"); + self endon("stop_location_selection"); + thread endselectiononendgame(); + thread endselectiononemp(); + if(isdefined(param_00) && self.team != "spectator") + { + if(isdefined(self.streakmsg)) + { + self.streakmsg destroy(); + } + + if(self issplitscreenplayer()) + { + self.streakmsg = maps\mp\gametypes\_hud_util::createfontstring("hudbig",0.65); + self.streakmsg maps\mp\gametypes\_hud_util::setpoint("CENTER","CENTER",0,-98); + } + else + { + self.streakmsg = maps\mp\gametypes\_hud_util::createfontstring("bigfixed",0.8); + self.streakmsg maps\mp\gametypes\_hud_util::setpoint("CENTER","CENTER",0,-190); + } + + var_04 = tablelookupistring("mp/killstreakTable.csv",1,param_00,2); + self.streakmsg settext(var_04); + } +} + +//Function Number: 3 +stoplocationselection(param_00,param_01) +{ + if(!isdefined(param_01)) + { + param_01 = "generic"; + } + + if(!param_00) + { + self setblurforplayer(0,0.3); + self endlocationselection(); + self.selectinglocation = undefined; + if(isdefined(self.streakmsg)) + { + self.streakmsg destroy(); + } + } + + self notify("stop_location_selection",param_01); +} + +//Function Number: 4 +endselectiononemp() +{ + self endon("stop_location_selection"); + for(;;) + { + level waittill("emp_update"); + if(!isemped()) + { + continue; + } + + thread stoplocationselection(0,"emp"); + } +} + +//Function Number: 5 +endselectiononaction(param_00) +{ + self endon("stop_location_selection"); + self waittill(param_00); + thread stoplocationselection(param_00 == "disconnect",param_00); +} + +//Function Number: 6 +endselectiononendgame() +{ + self endon("stop_location_selection"); + level waittill("game_ended"); + thread stoplocationselection(0,"end_game"); +} + +//Function Number: 7 +isattachment(param_00) +{ + var_01 = tablelookup("mp/attachmentTable.csv",4,param_00,0); + if(isdefined(var_01) && var_01 != "") + { + return 1; + } + + return 0; +} + +//Function Number: 8 +getattachmenttype(param_00) +{ + var_01 = tablelookup("mp/attachmentTable.csv",4,param_00,2); + return var_01; +} + +//Function Number: 9 +delaythread(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + thread delaythread_proc(param_01,param_00,param_02,param_03,param_04,param_05,param_06); +} + +//Function Number: 10 +delaythread_proc(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + wait param_01; + if(!isdefined(param_02)) + { + thread [[ param_00 ]](); + return; + } + + if(!isdefined(param_03)) + { + thread [[ param_00 ]](param_02); + return; + } + + if(!isdefined(param_04)) + { + thread [[ param_00 ]](param_02,param_03); + return; + } + + if(!isdefined(param_05)) + { + thread [[ param_00 ]](param_02,param_03,param_04); + return; + } + + if(!isdefined(param_06)) + { + thread [[ param_00 ]](param_02,param_03,param_04,param_05); + return; + } + + thread [[ param_00 ]](param_02,param_03,param_04,param_05,param_06); +} + +//Function Number: 11 +getplant() +{ + var_00 = self.origin + (0,0,10); + var_01 = 11; + var_02 = anglestoforward(self.angles); + var_02 = var_02 * var_01; + var_03[0] = var_00 + var_02; + var_04 = bullettrace(var_7B[0],var_7B[0] + (0,0,-18),0,undefined); + if(var_04["fraction"] < 1) + { + var_05 = spawnstruct(); + var_05.origin = var_04["position"]; + var_05.angles = orienttonormal(var_04["normal"]); + return var_05; + } + + var_05 = bullettrace(var_04[1],var_04[1] + (0,0,-18),0,undefined); + if(var_05["fraction"] < 1) + { + var_05 = spawnstruct(); + var_05.origin = var_04["position"]; + var_05.angles = orienttonormal(var_04["normal"]); + return var_05; + } + + var_04[2] = var_02 + (16,16,0); + var_04[3] = var_02 + (16,-16,0); + var_04[4] = var_02 + (-16,-16,0); + var_04[5] = var_02 + (-16,16,0); + var_06 = undefined; + var_07 = undefined; + for(var_08 = 0;var_08 < var_04.size;var_08++ = var_7B[1]) + { + var_05 = bullettrace(var_04[var_08],var_04[var_08] + (0,0,-1000),0,undefined); + if(!isdefined(var_06) || var_05["fraction"] < var_06) + { + var_06 = var_05["fraction"]; + var_07 = var_05["position"]; + } + } + + if(var_06 == 1) + { + var_07 = self.origin; + } + + var_05 = spawnstruct(); + var_08.origin = var_06; + var_08.angles = orienttonormal(var_04["normal"]); + return var_08; +} + +//Function Number: 12 +orienttonormal(param_00) +{ + var_01 = (param_00[0],param_00[1],0); + var_02 = length(var_01); + if(!var_02) + { + return (0,0,0); + } + + var_03 = vectornormalize(var_01); + var_04 = param_00[2] * -1; + var_05 = (var_03[0] * var_04,var_03[1] * var_04,var_02); + var_06 = vectortoangles(var_05); + return var_06; +} + +//Function Number: 13 +deleteplacedentity(param_00) +{ + var_01 = getentarray(param_00,"classname"); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + var_01[var_02] delete(); + } +} + +//Function Number: 14 +playsoundonplayers(param_00,param_01,param_02) +{ + if(level.splitscreen) + { + if(isdefined(level.players[0])) + { + level.players[0] playlocalsound(param_00); + return; + } + + return; + } + + if(isdefined(param_01)) + { + if(isdefined(param_02)) + { + for(var_03 = 0;var_03 < level.players.size;var_03++) + { + var_04 = level.players[var_03]; + if(var_04 issplitscreenplayer() && !var_04 issplitscreenplayerprimary()) + { + continue; + } + + if(isdefined(var_04.pers["team"]) && var_04.pers["team"] == param_01 && !isexcluded(var_04,param_02)) + { + var_04 playlocalsound(param_00); + } + } + + return; + } + + for(var_03 = 0;var_03 < level.players.size;var_03++) + { + var_04 = level.players[var_03]; + if(var_04 issplitscreenplayer() && !var_04 issplitscreenplayerprimary()) + { + continue; + } + + if(isdefined(var_04.pers["team"]) && var_04.pers["team"] == param_01) + { + var_04 playlocalsound(param_00); + } + } + + return; + } + + if(isdefined(var_03)) + { + for(var_03 = 0;var_03 < level.players.size;var_03++) + { + if(level.players[var_03] issplitscreenplayer() && !level.players[var_03] issplitscreenplayerprimary()) + { + continue; + } + + if(!isexcluded(level.players[var_03],param_02)) + { + level.players[var_03] playlocalsound(param_00); + } + } + + return; + } + + for(var_03 = 0;var_03 < level.players.size;var_03++) + { + if(level.players[var_03] issplitscreenplayer() && !level.players[var_03] issplitscreenplayerprimary()) + { + continue; + } + + level.players[var_03] playlocalsound(param_00); + } +} + +//Function Number: 15 +sortlowermessages() +{ + for(var_00 = 1;var_00 < self.lowermessages.size;var_00++) + { + var_01 = self.lowermessages[var_00]; + var_02 = var_01.priority; + for(var_03 = var_00 - 1;var_03 >= 0 && var_02 > self.lowermessages[var_03].priority;var_03--) + { + self.lowermessages[var_03 + 1] = self.lowermessages[var_03]; + } + + self.lowermessages[var_03 + 1] = var_01; + } +} + +//Function Number: 16 +addlowermessage(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08) +{ + var_09 = undefined; + foreach(var_0B in self.lowermessages) + { + if(var_0B.name == param_00) + { + if(var_0B.text == param_01 && var_0B.priority == param_03) + { + return; + } + + var_09 = var_0B; + break; + } + } + + if(!isdefined(var_09)) + { + var_09 = spawnstruct(); + self.lowermessages[self.lowermessages.size] = var_09; + } + + var_09.name = param_00; + var_09.text = param_01; + var_09.time = param_02; + var_09.addtime = gettime(); + var_09.priority = param_03; + var_09.showtimer = param_04; + var_09.shouldfade = param_05; + var_09.fadetoalpha = param_06; + var_09.fadetoalphatime = param_07; + var_09.hidewhenindemo = param_08; + sortlowermessages(); +} + +//Function Number: 17 +removelowermessage(param_00) +{ + if(isdefined(self.lowermessages)) + { + for(var_01 = self.lowermessages.size;var_01 > 0;var_01--) + { + if(self.lowermessages[var_01 - 1].name != param_00) + { + continue; + } + + var_02 = self.lowermessages[var_01 - 1]; + for(var_03 = var_01;var_03 < self.lowermessages.size;var_03++) + { + if(isdefined(self.lowermessages[var_03])) + { + self.lowermessages[var_03 - 1] = self.lowermessages[var_03]; + } + } + + self.lowermessages[self.lowermessages.size - 1] = undefined; + } + + sortlowermessages(); + } +} + +//Function Number: 18 +getlowermessage() +{ + return self.lowermessages[0]; +} + +//Function Number: 19 +setlowermessage(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08) +{ + if(!isdefined(param_03)) + { + param_03 = 1; + } + + if(!isdefined(param_02)) + { + param_02 = 0; + } + + if(!isdefined(param_04)) + { + param_04 = 0; + } + + if(!isdefined(param_05)) + { + param_05 = 0; + } + + if(!isdefined(param_06)) + { + param_06 = 0.85; + } + + if(!isdefined(param_07)) + { + param_07 = 3; + } + + if(!isdefined(param_08)) + { + param_08 = 0; + } + + addlowermessage(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08); + updatelowermessage(); +} + +//Function Number: 20 +updatelowermessage() +{ + var_00 = getlowermessage(); + if(!isdefined(var_00)) + { + self.lowermessage.alpha = 0; + self.lowertimer.alpha = 0; + return; + } + + self.lowermessage settext(var_00.text); + self.lowermessage.alpha = 0.85; + self.lowertimer.alpha = 1; + self.lowermessage.hidewhenindemo = var_00.hidewhenindemo; + if(var_00.shouldfade) + { + self.lowermessage fadeovertime(min(var_00.fadetoalphatime,60)); + self.lowermessage.alpha = var_00.fadetoalpha; + } + + if(var_00.time > 0 && var_00.showtimer) + { + self.lowertimer settimer(max(var_00.time - gettime() - var_00.addtime / 1000,0.1)); + return; + } + + if(var_00.time > 0 && !var_00.showtimer) + { + self.lowertimer settext(""); + self.lowermessage fadeovertime(min(var_00.time,60)); + self.lowermessage.alpha = 0; + thread clearondeath(var_00); + thread clearafterfade(var_00); + return; + } + + self.lowertimer settext(""); +} + +//Function Number: 21 +clearondeath(param_00) +{ + self notify("message_cleared"); + self endon("message_cleared"); + self endon("disconnect"); + level endon("game_ended"); + self waittill("death"); + clearlowermessage(param_00.name); +} + +//Function Number: 22 +clearafterfade(param_00) +{ + wait param_00.time; + clearlowermessage(param_00.name); + self notify("message_cleared"); +} + +//Function Number: 23 +clearlowermessage(param_00) +{ + removelowermessage(param_00); + updatelowermessage(); +} + +//Function Number: 24 +clearlowermessages() +{ + for(var_00 = 0;var_00 < self.lowermessages.size;var_00++) + { + self.lowermessages[var_00] = undefined; + } + + if(!isdefined(self.lowermessage)) + { + return; + } + + updatelowermessage(); +} + +//Function Number: 25 +printonteam(param_00,param_01) +{ + foreach(var_03 in level.players) + { + if(var_03.team != param_01) + { + continue; + } + + var_03 iprintln(param_00); + } +} + +//Function Number: 26 +printboldonteam(param_00,param_01) +{ + for(var_02 = 0;var_02 < level.players.size;var_02++) + { + var_03 = level.players[var_02]; + if(isdefined(var_03.pers["team"]) && var_03.pers["team"] == param_01) + { + var_03 iprintlnbold(param_00); + } + } +} + +//Function Number: 27 +printboldonteamarg(param_00,param_01,param_02) +{ + for(var_03 = 0;var_03 < level.players.size;var_03++) + { + var_04 = level.players[var_03]; + if(isdefined(var_04.pers["team"]) && var_04.pers["team"] == param_01) + { + var_04 iprintlnbold(param_00,param_02); + } + } +} + +//Function Number: 28 +printonteamarg(param_00,param_01,param_02) +{ + for(var_03 = 0;var_03 < level.players.size;var_03++) + { + var_04 = level.players[var_03]; + if(isdefined(var_04.pers["team"]) && var_04.pers["team"] == param_01) + { + var_04 iprintln(param_00,param_02); + } + } +} + +//Function Number: 29 +printonplayers(param_00,param_01) +{ + var_02 = level.players; + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + if(isdefined(param_01)) + { + if(isdefined(var_02[var_03].pers["team"]) && var_02[var_03].pers["team"] == param_01) + { + var_02[var_03] iprintln(param_00); + } + + continue; + } + + var_02[var_03] iprintln(param_00); + } +} + +//Function Number: 30 +printandsoundoneveryone(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + var_07 = isdefined(param_04); + var_08 = 0; + if(isdefined(param_05)) + { + var_08 = 1; + } + + if(level.splitscreen || !var_07) + { + for(var_09 = 0;var_09 < level.players.size;var_09++) + { + var_0A = level.players[var_09]; + var_0B = var_0A.pers["team"]; + if(isdefined(var_0B)) + { + if(var_0B == param_00 && isdefined(param_02)) + { + var_0A iprintln(param_02,param_06); + continue; + } + + if(var_0B == param_01 && isdefined(param_03)) + { + var_0A iprintln(param_03,param_06); + } + } + } + + if(var_07) + { + level.players[0] playlocalsound(param_04); + return; + } + + return; + } + + if(var_0B) + { + for(var_09 = 0;var_09 < level.players.size;var_09++) + { + var_0A = level.players[var_09]; + var_0B = var_0A.pers["team"]; + if(isdefined(var_0B)) + { + if(var_0B == param_00) + { + if(isdefined(param_02)) + { + var_0A iprintln(param_02,param_06); + } + + var_0A playlocalsound(param_04); + continue; + } + + if(var_0B == param_01) + { + if(isdefined(param_03)) + { + var_0A iprintln(param_03,param_06); + } + + var_0A playlocalsound(param_05); + } + } + } + + return; + } + + for(var_09 = 0;var_09 < level.players.size;var_09++) + { + var_0A = level.players[var_09]; + var_0B = var_0A.pers["team"]; + if(isdefined(var_0B)) + { + if(var_0B == param_00) + { + if(isdefined(param_02)) + { + var_0A iprintln(param_02,param_06); + } + + var_0A playlocalsound(param_04); + continue; + } + + if(var_0B == param_01) + { + if(isdefined(param_03)) + { + var_0A iprintln(param_03,param_06); + } + } + } + } +} + +//Function Number: 31 +printandsoundonteam(param_00,param_01,param_02) +{ + foreach(var_04 in level.players) + { + if(var_04.team != param_00) + { + continue; + } + + var_04 printandsoundonplayer(param_01,param_02); + } +} + +//Function Number: 32 +printandsoundonplayer(param_00,param_01) +{ + self iprintln(param_00); + self playlocalsound(param_01); +} + +//Function Number: 33 +_playlocalsound(param_00) +{ + if(level.splitscreen && self getentitynumber() != 0) + { + return; + } + + self playlocalsound(param_00); +} + +//Function Number: 34 +dvarintvalue(param_00,param_01,param_02,param_03) +{ + param_00 = "scr_" + level.gametype + "_" + param_00; + if(getdvar(param_00) == "") + { + setdvar(param_00,param_01); + return param_01; + } + + var_04 = getdvarint(param_00); + if(var_04 > param_03) + { + var_04 = param_03; + } + else if(var_04 < param_02) + { + var_04 = param_02; + } + else + { + return var_04; + } + + setdvar(param_00,var_04); + return var_04; +} + +//Function Number: 35 +dvarfloatvalue(param_00,param_01,param_02,param_03) +{ + param_00 = "scr_" + level.gametype + "_" + param_00; + if(getdvar(param_00) == "") + { + setdvar(param_00,param_01); + return param_01; + } + + var_04 = getdvarfloat(param_00); + if(var_04 > param_03) + { + var_04 = param_03; + } + else if(var_04 < param_02) + { + var_04 = param_02; + } + else + { + return var_04; + } + + setdvar(param_00,var_04); + return var_04; +} + +//Function Number: 36 +play_sound_on_tag(param_00,param_01) +{ + if(isdefined(param_01)) + { + playsoundatpos(self gettagorigin(param_01),param_00); + return; + } + + playsoundatpos(self.origin,param_00); +} + +//Function Number: 37 +getotherteam(param_00) +{ + if(param_00 == "allies") + { + return "axis"; + } + else if(param_00 == "axis") + { + return "allies"; + } +} + +//Function Number: 38 +wait_endon(param_00,param_01,param_02,param_03) +{ + self endon(param_01); + if(isdefined(param_02)) + { + self endon(param_02); + } + + if(isdefined(param_03)) + { + self endon(param_03); + } + + wait param_00; +} + +//Function Number: 39 +initpersstat(param_00) +{ + if(!isdefined(self.pers[param_00])) + { + self.pers[param_00] = 0; + } +} + +//Function Number: 40 +getpersstat(param_00) +{ + return self.pers[param_00]; +} + +//Function Number: 41 +incpersstat(param_00,param_01) +{ + self.pers[param_00] = self.pers[param_00] + param_01; + maps\mp\gametypes\_persistance::statadd(param_00,param_01); +} + +//Function Number: 42 +setpersstat(param_00,param_01) +{ + self.pers[param_00] = param_01; +} + +//Function Number: 43 +initplayerstat(param_00,param_01) +{ + if(!isdefined(self.stats["stats_" + param_00])) + { + if(!isdefined(param_01)) + { + param_01 = 0; + } + + self.stats["stats_" + param_00] = spawnstruct(); + self.stats["stats_" + param_00].value = param_01; + } +} + +//Function Number: 44 +incplayerstat(param_00,param_01) +{ + var_02 = self.stats["stats_" + param_00]; + var_02.value = var_02.value + param_01; +} + +//Function Number: 45 +setplayerstat(param_00,param_01) +{ + var_02 = self.stats["stats_" + param_00]; + var_02.value = param_01; + var_02.time = gettime(); +} + +//Function Number: 46 +getplayerstat(param_00) +{ + return self.stats["stats_" + param_00].value; +} + +//Function Number: 47 +getplayerstattime(param_00) +{ + return self.stats["stats_" + param_00].time; +} + +//Function Number: 48 +setplayerstatifgreater(param_00,param_01) +{ + var_02 = getplayerstat(param_00); + if(param_01 > var_02) + { + setplayerstat(param_00,param_01); + } +} + +//Function Number: 49 +setplayerstatiflower(param_00,param_01) +{ + var_02 = getplayerstat(param_00); + if(param_01 < var_02) + { + setplayerstat(param_00,param_01); + } +} + +//Function Number: 50 +updatepersratio(param_00,param_01,param_02) +{ + var_03 = maps\mp\gametypes\_persistance::statget(param_01); + var_04 = maps\mp\gametypes\_persistance::statget(param_02); + if(var_04 == 0) + { + var_04 = 1; + } + + maps\mp\gametypes\_persistance::statset(param_00,int(var_03 * 1000 / var_04)); +} + +//Function Number: 51 +updatepersratiobuffered(param_00,param_01,param_02) +{ + var_03 = maps\mp\gametypes\_persistance::statgetbuffered(param_01); + var_04 = maps\mp\gametypes\_persistance::statgetbuffered(param_02); + if(var_04 == 0) + { + var_04 = 1; + } + + maps\mp\gametypes\_persistance::statsetbuffered(param_00,int(var_03 * 1000 / var_04)); +} + +//Function Number: 52 +waittillslowprocessallowed(param_00) +{ + if(level.lastslowprocessframe == gettime()) + { + if(isdefined(param_00) && param_00) + { + while(level.lastslowprocessframe == gettime()) + { + wait 0.05; + } + } + else + { + wait 0.05; + if(level.lastslowprocessframe == gettime()) + { + wait 0.05; + if(level.lastslowprocessframe == gettime()) + { + wait 0.05; + if(level.lastslowprocessframe == gettime()) + { + wait 0.05; + } + } + } + } + } + + level.lastslowprocessframe = gettime(); +} + +//Function Number: 53 +waitfortimeornotify(param_00,param_01) +{ + self endon(param_01); + wait param_00; +} + +//Function Number: 54 +isexcluded(param_00,param_01) +{ + for(var_02 = 0;var_02 < param_01.size;var_02++) + { + if(param_00 == param_01[var_02]) + { + return 1; + } + } + + return 0; +} + +//Function Number: 55 +leaderdialog(param_00,param_01,param_02,param_03) +{ + if(level.splitscreen) + { + return; + } + + if(param_00 == "null") + { + return; + } + + if(!isdefined(param_01)) + { + leaderdialogbothteams(param_00,"allies",param_00,"axis",param_02,param_03); + return; + } + + if(level.splitscreen) + { + if(level.players.size) + { + level.players[0] leaderdialogonplayer(param_00,param_02); + } + + return; + } + + if(isdefined(param_03)) + { + for(var_04 = 0;var_04 < level.players.size;var_04++) + { + var_05 = level.players[var_04]; + if(isdefined(var_05.pers["team"]) && var_05.pers["team"] == param_01 && !isexcluded(var_05,param_03)) + { + if(var_05 issplitscreenplayer() && !var_05 issplitscreenplayerprimary()) + { + continue; + } + + var_05 leaderdialogonplayer(param_00,param_02); + } + } + + return; + } + + for(var_04 = 0;var_04 < level.players.size;var_04++) + { + var_05 = level.players[var_04]; + if(isdefined(var_05.pers["team"]) && var_05.pers["team"] == param_01) + { + if(var_05 issplitscreenplayer() && !var_05 issplitscreenplayerprimary()) + { + continue; + } + + var_05 leaderdialogonplayer(param_00,param_02); + } + } +} + +//Function Number: 56 +leaderdialogbothteams(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if(level.splitscreen) + { + return; + } + + if(level.splitscreen) + { + if(level.players.size) + { + level.players[0] leaderdialogonplayer(param_00,param_04); + } + + return; + } + + if(isdefined(param_05)) + { + for(var_06 = 0;var_06 < level.players.size;var_06++) + { + var_07 = level.players[var_06]; + var_08 = var_07.pers["team"]; + if(!isdefined(var_08)) + { + continue; + } + + if(isexcluded(var_07,param_05)) + { + continue; + } + + if(var_07 issplitscreenplayer() && !var_07 issplitscreenplayerprimary()) + { + continue; + } + + if(var_08 == param_01) + { + var_07 leaderdialogonplayer(param_00,param_04); + continue; + } + + if(var_08 == param_03) + { + var_07 leaderdialogonplayer(param_02,param_04); + } + } + + return; + } + + for(var_06 = 0;var_06 < level.players.size;var_06++) + { + var_07 = level.players[var_06]; + var_08 = var_07.pers["team"]; + if(!isdefined(var_08)) + { + continue; + } + + if(var_07 issplitscreenplayer() && !var_07 issplitscreenplayerprimary()) + { + continue; + } + + if(var_08 == param_01) + { + var_07 leaderdialogonplayer(param_00,param_04); + continue; + } + + if(var_08 == param_03) + { + var_07 leaderdialogonplayer(param_02,param_04); + } + } +} + +//Function Number: 57 +leaderdialogonplayers(param_00,param_01,param_02) +{ + foreach(var_04 in param_01) + { + var_04 leaderdialogonplayer(param_00,param_02); + } +} + +//Function Number: 58 +leaderdialogonplayer(param_00,param_01,param_02) +{ + if(!isdefined(param_02)) + { + param_02 = 0; + } + + var_03 = self.pers["team"]; + if(level.splitscreen) + { + return; + } + + if(!isdefined(var_03)) + { + return; + } + + if(var_03 != "allies" && var_03 != "axis") + { + return; + } + + if(isdefined(param_01)) + { + if(self.leaderdialoggroup == param_01) + { + if(param_02) + { + self stoplocalsound(self.leaderdialogactive); + thread playleaderdialogonplayer(param_00,var_03); + } + + return; + } + + var_04 = isdefined(self.leaderdialoggroups[param_01]); + self.leaderdialoggroups[param_01] = param_00; + param_00 = param_01; + if(var_04) + { + return; + } + } + + if(self.leaderdialogactive == "") + { + thread playleaderdialogonplayer(param_00,var_03); + return; + } + + self.leaderdialogqueue[self.leaderdialogqueue.size] = param_00; +} + +//Function Number: 59 +playleaderdialogonplayer(param_00,param_01) +{ + self endon("disconnect"); + self notify("playLeaderDialogOnPlayer"); + self endon("playLeaderDialogOnPlayer"); + if(isdefined(self.leaderdialoggroups[param_00])) + { + var_02 = param_00; + param_00 = self.leaderdialoggroups[var_02]; + self.leaderdialoggroups[var_02] = undefined; + self.leaderdialoggroup = var_02; + } + + if(issubstr(game["dialog"][param_00],"null")) + { + return; + } + + self.leaderdialogactive = game["voice"][param_01] + game["dialog"][param_00]; + self playlocalsound(game["voice"][param_01] + game["dialog"][param_00]); + wait 3; + self.leaderdialoglocalsound = ""; + self.leaderdialogactive = ""; + self.leaderdialoggroup = ""; + if(self.leaderdialogqueue.size > 0) + { + var_03 = self.leaderdialogqueue[0]; + for(var_04 = 1;var_04 < self.leaderdialogqueue.size;var_04++) + { + self.leaderdialogqueue[var_04 - 1] = self.leaderdialogqueue[var_04]; + } + + self.leaderdialogqueue[var_04 - 1] = undefined; + thread playleaderdialogonplayer(var_03,param_01); + } +} + +//Function Number: 60 +updatemainmenu() +{ + if(self.pers["team"] == "spectator") + { + self setclientdvar("g_scriptMainMenu",game["menu_team"]); + return; + } + + self setclientdvar("g_scriptMainMenu",game["menu_class_" + self.pers["team"]]); +} + +//Function Number: 61 +updateobjectivetext() +{ + if(self.pers["team"] == "spectator") + { + self setclientdvar("cg_objectiveText",""); + return; + } + + if(getwatcheddvar("scorelimit") > 0 && !isobjectivebased()) + { + if(level.splitscreen) + { + self setclientdvar("cg_objectiveText",getobjectivescoretext(self.pers["team"])); + return; + } + + self setclientdvar("cg_objectiveText",getobjectivescoretext(self.pers["team"]),getwatcheddvar("scorelimit")); + return; + } + + self setclientdvar("cg_objectiveText",getobjectivetext(self.pers["team"])); +} + +//Function Number: 62 +setobjectivetext(param_00,param_01) +{ + game["strings"]["objective_" + param_00] = param_01; + precachestring(param_01); +} + +//Function Number: 63 +setobjectivescoretext(param_00,param_01) +{ + game["strings"]["objective_score_" + param_00] = param_01; + precachestring(param_01); +} + +//Function Number: 64 +setobjectivehinttext(param_00,param_01) +{ + game["strings"]["objective_hint_" + param_00] = param_01; + precachestring(param_01); +} + +//Function Number: 65 +getobjectivetext(param_00) +{ + return game["strings"]["objective_" + param_00]; +} + +//Function Number: 66 +getobjectivescoretext(param_00) +{ + return game["strings"]["objective_score_" + param_00]; +} + +//Function Number: 67 +getobjectivehinttext(param_00) +{ + return game["strings"]["objective_hint_" + param_00]; +} + +//Function Number: 68 +gettimepassed() +{ + if(!isdefined(level.starttime) || !isdefined(level.discardtime)) + { + return 0; + } + + if(level.timerstopped) + { + return level.timerpausetime - level.starttime - level.discardtime; + } + + return gettime() - level.starttime - level.discardtime; +} + +//Function Number: 69 +getsecondspassed() +{ + return gettimepassed() / 1000; +} + +//Function Number: 70 +getminutespassed() +{ + return getsecondspassed() / 60; +} + +//Function Number: 71 +clearkillcamstate() +{ + self.forcespectatorclient = -1; + self.killcamentity = -1; + self.archivetime = 0; + self.psoffsettime = 0; +} + +//Function Number: 72 +isinkillcam() +{ + return self.forcespectatorclient != -1 || self.killcamentity != -1; +} + +//Function Number: 73 +isvalidclass(param_00) +{ + return isdefined(param_00) && param_00 != ""; +} + +//Function Number: 74 +getvalueinrange(param_00,param_01,param_02) +{ + if(param_00 > param_02) + { + return param_02; + } + + if(param_00 < param_01) + { + return param_01; + } + + return param_00; +} + +//Function Number: 75 +waitfortimeornotifies(param_00) +{ + var_01 = gettime(); + var_02 = gettime() - var_01 / 1000; + if(var_02 < param_00) + { + wait param_00 - var_02; + return param_00; + } + + return var_02; +} + +//Function Number: 76 +closemenus() +{ + self closepopupmenu(); + self closeingamemenu(); +} + +//Function Number: 77 +logxpgains() +{ + if(!isdefined(self.xpgains)) + { + return; + } + + var_00 = getarraykeys(self.xpgains); + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + var_02 = self.xpgains[var_00[var_01]]; + if(!var_02) + { + continue; + } + + self logstring("xp " + var_00[var_01] + ": " + var_02); + } +} + +//Function Number: 78 +registerroundswitchdvar(param_00,param_01,param_02,param_03) +{ + registerwatchdvarint("roundswitch",param_01); + param_00 = "scr_" + param_00 + "_roundswitch"; + level.roundswitchdvar = param_00; + level.roundswitchmin = param_02; + level.roundswitchmax = param_03; + level.roundswitch = getdvarint(param_00,param_01); + if(level.roundswitch < param_02) + { + level.roundswitch = param_02; + return; + } + + if(level.roundswitch > param_03) + { + level.roundswitch = param_03; + } +} + +//Function Number: 79 +registerroundlimitdvar(param_00,param_01) +{ + registerwatchdvarint("roundlimit",param_01); +} + +//Function Number: 80 +registerwinlimitdvar(param_00,param_01) +{ + registerwatchdvarint("winlimit",param_01); +} + +//Function Number: 81 +registerscorelimitdvar(param_00,param_01) +{ + registerwatchdvarint("scorelimit",param_01); +} + +//Function Number: 82 +registertimelimitdvar(param_00,param_01) +{ + registerwatchdvarfloat("timelimit",param_01); + makedvarserverinfo("ui_timelimit",gettimelimit()); +} + +//Function Number: 83 +registerhalftimedvar(param_00,param_01) +{ + registerwatchdvarint("halftime",param_01); + makedvarserverinfo("ui_halftime",gethalftime()); +} + +//Function Number: 84 +registernumlivesdvar(param_00,param_01) +{ + registerwatchdvarint("numlives",param_01); +} + +//Function Number: 85 +setovertimelimitdvar(param_00) +{ + makedvarserverinfo("overtimeTimeLimit",param_00); +} + +//Function Number: 86 +get_damageable_player(param_00,param_01) +{ + var_02 = spawnstruct(); + var_02.isplayer = 1; + var_02.isadestructable = 0; + var_02.entity = param_00; + var_02.damagecenter = param_01; + return var_02; +} + +//Function Number: 87 +get_damageable_sentry(param_00,param_01) +{ + var_02 = spawnstruct(); + var_02.isplayer = 0; + var_02.isadestructable = 0; + var_02.issentry = 1; + var_02.entity = param_00; + var_02.damagecenter = param_01; + return var_02; +} + +//Function Number: 88 +get_damageable_grenade(param_00,param_01) +{ + var_02 = spawnstruct(); + var_02.isplayer = 0; + var_02.isadestructable = 0; + var_02.entity = param_00; + var_02.damagecenter = param_01; + return var_02; +} + +//Function Number: 89 +get_damageable_mine(param_00,param_01) +{ + var_02 = spawnstruct(); + var_02.isplayer = 0; + var_02.isadestructable = 0; + var_02.entity = param_00; + var_02.damagecenter = param_01; + return var_02; +} + +//Function Number: 90 +get_damageable_player_pos(param_00) +{ + return param_00.origin + (0,0,32); +} + +//Function Number: 91 +getstancecenter() +{ + if(self getstance() == "crouch") + { + var_00 = self.origin + (0,0,24); + } + else if(self getstance() == "prone") + { + var_00 = self.origin + (0,0,10); + } + else + { + var_00 = self.origin + (0,0,32); + } + + return var_00; +} + +//Function Number: 92 +get_damageable_grenade_pos(param_00) +{ + return param_00.origin; +} + +//Function Number: 93 +getdvarvec(param_00) +{ + var_01 = getdvar(param_00); + if(var_01 == "") + { + return (0,0,0); + } + + var_02 = strtok(var_01," "); + if(var_02.size < 3) + { + return (0,0,0); + } + + setdvar("tempR",var_02[0]); + setdvar("tempG",var_02[1]); + setdvar("tempB",var_02[2]); + return (getdvarfloat("tempR"),getdvarfloat("tempG"),getdvarfloat("tempB")); +} + +//Function Number: 94 +strip_suffix(param_00,param_01) +{ + if(param_00.size <= param_01.size) + { + return param_00; + } + + if(getsubstr(param_00,param_00.size - param_01.size,param_00.size) == param_01) + { + return getsubstr(param_00,0,param_00.size - param_01.size); + } + + return param_00; +} + +//Function Number: 95 +_takeweaponsexcept(param_00) +{ + var_01 = self getweaponslistall(); + foreach(var_03 in var_01) + { + if(var_03 == param_00) + { + continue; + } + else + { + self takeweapon(var_03); + } + } +} + +//Function Number: 96 +savedata() +{ + var_00 = spawnstruct(); + var_00.offhandclass = self getoffhandsecondaryclass(); + var_00.actionslots = self.saved_actionslotdata; + var_00.currentweapon = self getcurrentweapon(); + var_01 = self getweaponslistall(); + var_00.weapons = []; + foreach(var_03 in var_01) + { + if(weaponinventorytype(var_03) == "exclusive") + { + continue; + } + + if(weaponinventorytype(var_03) == "altmode") + { + continue; + } + + var_04 = spawnstruct(); + var_04.name = var_03; + var_04.clipammor = self getweaponammoclip(var_03,"right"); + var_04.clipammol = self getweaponammoclip(var_03,"left"); + var_04.stockammo = self getweaponammostock(var_03); + if(isdefined(self.throwinggrenade) && self.throwinggrenade == var_03) + { + var_04.stockammo--; + } + + var_00.weapons[var_00.weapons.size] = var_04; + } + + self.script_savedata = var_00; +} + +//Function Number: 97 +restoredata() +{ + var_00 = self.script_savedata; + self setoffhandsecondaryclass(var_00.offhandclass); + foreach(var_02 in var_00.weapons) + { + _giveweapon(var_02.name,int(tablelookup("mp/camoTable.csv",1,self.loadoutprimarycamo,0))); + self setweaponammoclip(var_02.name,var_02.clipammor,"right"); + if(issubstr(var_02.name,"akimbo")) + { + self setweaponammoclip(var_02.name,var_02.clipammol,"left"); + } + + self setweaponammostock(var_02.name,var_02.stockammo); + } + + foreach(var_06, var_05 in var_00.actionslots) + { + _setactionslot(var_06,var_05.type,var_05.item); + } + + if(self getcurrentweapon() == "none") + { + var_02 = var_00.currentweapon; + if(var_02 == "none") + { + var_02 = common_scripts\utility::getlastweapon(); + } + + self setspawnweapon(var_02); + self switchtoweapon(var_02); + } +} + +//Function Number: 98 +_setactionslot(param_00,param_01,param_02) +{ + self.saved_actionslotdata[param_00].type = param_01; + self.saved_actionslotdata[param_00].item = param_02; + self setactionslot(param_00,param_01,param_02); +} + +//Function Number: 99 +isfloat(param_00) +{ + if(int(param_00) != param_00) + { + return 1; + } + + return 0; +} + +//Function Number: 100 +registerwatchdvarint(param_00,param_01) +{ + var_02 = "scr_" + level.gametype + "_" + param_00; + level.watchdvars[var_02] = spawnstruct(); + level.watchdvars[var_02].value = getdvarint(var_02,param_01); + level.watchdvars[var_02].type = "int"; + level.watchdvars[var_02].notifystring = "update_" + param_00; +} + +//Function Number: 101 +registerwatchdvarfloat(param_00,param_01) +{ + var_02 = "scr_" + level.gametype + "_" + param_00; + level.watchdvars[var_02] = spawnstruct(); + level.watchdvars[var_02].value = getdvarfloat(var_02,param_01); + level.watchdvars[var_02].type = "float"; + level.watchdvars[var_02].notifystring = "update_" + param_00; +} + +//Function Number: 102 +registerwatchdvar(param_00,param_01) +{ + var_02 = "scr_" + level.gametype + "_" + param_00; + level.watchdvars[var_02] = spawnstruct(); + level.watchdvars[var_02].value = getdvar(var_02,param_01); + level.watchdvars[var_02].type = "string"; + level.watchdvars[var_02].notifystring = "update_" + param_00; +} + +//Function Number: 103 +setoverridewatchdvar(param_00,param_01) +{ + param_00 = "scr_" + level.gametype + "_" + param_00; + level.overridewatchdvars[param_00] = param_01; +} + +//Function Number: 104 +getwatcheddvar(param_00) +{ + param_00 = "scr_" + level.gametype + "_" + param_00; + if(isdefined(level.overridewatchdvars) && isdefined(level.overridewatchdvars[param_00])) + { + return level.overridewatchdvars[param_00]; + } + + return level.watchdvars[param_00].value; +} + +//Function Number: 105 +updatewatcheddvars() +{ + while(game["state"] == "playing") + { + var_00 = getarraykeys(level.watchdvars); + foreach(var_02 in var_00) + { + if(level.watchdvars[var_02].type == "string") + { + var_03 = getproperty(var_02,level.watchdvars[var_02].value); + } + else if(level.watchdvars[var_02].type == "float") + { + var_03 = getfloatproperty(var_02,level.watchdvars[var_02].value); + } + else + { + var_03 = getintproperty(var_02,level.watchdvars[var_02].value); + } + + if(var_03 != level.watchdvars[var_02].value) + { + level.watchdvars[var_02].value = var_03; + level notify(level.watchdvars[var_02].notifystring,var_03); + } + } + + wait 1; + } +} + +//Function Number: 106 +isroundbased() +{ + if(!level.teambased) + { + return 0; + } + + if(getwatcheddvar("winlimit") != 1 && getwatcheddvar("roundlimit") != 1) + { + return 1; + } + + return 0; +} + +//Function Number: 107 +islastround() +{ + if(!level.teambased) + { + return 1; + } + + if(getwatcheddvar("roundlimit") > 1 && game["roundsPlayed"] >= getwatcheddvar("roundlimit") - 1) + { + return 1; + } + + if(getwatcheddvar("winlimit") > 1 && game["roundsWon"]["allies"] >= getwatcheddvar("winlimit") - 1 && game["roundsWon"]["axis"] >= getwatcheddvar("winlimit") - 1) + { + return 1; + } + + return 0; +} + +//Function Number: 108 +wasonlyround() +{ + if(!level.teambased) + { + return 1; + } + + if(isdefined(level.onlyroundoverride)) + { + return 0; + } + + if(getwatcheddvar("winlimit") == 1 && hitwinlimit()) + { + return 1; + } + + if(getwatcheddvar("roundlimit") == 1) + { + return 1; + } + + return 0; +} + +//Function Number: 109 +waslastround() +{ + if(level.forcedend) + { + return 1; + } + + if(!level.teambased) + { + return 1; + } + + if(hitroundlimit() || hitwinlimit()) + { + return 1; + } + + return 0; +} + +//Function Number: 110 +hitroundlimit() +{ + if(getwatcheddvar("roundlimit") <= 0) + { + return 0; + } + + return game["roundsPlayed"] >= getwatcheddvar("roundlimit"); +} + +//Function Number: 111 +hitscorelimit() +{ + if(isobjectivebased()) + { + return 0; + } + + if(getwatcheddvar("scorelimit") <= 0) + { + return 0; + } + + if(level.teambased) + { + if(game["teamScores"]["allies"] >= getwatcheddvar("scorelimit") || game["teamScores"]["axis"] >= getwatcheddvar("scorelimit")) + { + return 1; + } + } + else + { + for(var_00 = 0;var_00 < level.players.size;var_00++) + { + var_01 = level.players[var_00]; + if(isdefined(var_01.score) && var_01.score >= getwatcheddvar("scorelimit")) + { + return 1; + } + } + } + + return 0; +} + +//Function Number: 112 +hitwinlimit() +{ + if(getwatcheddvar("winlimit") <= 0) + { + return 0; + } + + if(!level.teambased) + { + return 1; + } + + if(getroundswon("allies") >= getwatcheddvar("winlimit") || getroundswon("axis") >= getwatcheddvar("winlimit")) + { + return 1; + } + + return 0; +} + +//Function Number: 113 +getscorelimit() +{ + if(isroundbased()) + { + if(getwatcheddvar("roundlimit")) + { + return getwatcheddvar("roundlimit"); + } + + return getwatcheddvar("winlimit"); + } + + return getwatcheddvar("scorelimit"); +} + +//Function Number: 114 +getroundswon(param_00) +{ + return game["roundsWon"][param_00]; +} + +//Function Number: 115 +isobjectivebased() +{ + return level.objectivebased; +} + +//Function Number: 116 +gettimelimit() +{ + if(inovertime() && !isdefined(game["inNukeOvertime"]) || !game["inNukeOvertime"]) + { + var_00 = int(getdvar("overtimeTimeLimit")); + if(isdefined(var_00)) + { + return var_00; + } + + return 1; + } + + if(isdefined(level.dd) && level.dd && isdefined(level.bombexploded) && level.bombexploded > 0) + { + return getwatcheddvar("timelimit") + level.bombexploded * level.ddtimetoadd; + } + + return getwatcheddvar("timelimit"); +} + +//Function Number: 117 +gethalftime() +{ + if(inovertime()) + { + return 0; + } + + if(isdefined(game["inNukeOvertime"]) && game["inNukeOvertime"]) + { + return 0; + } + + return getwatcheddvar("halftime"); +} + +//Function Number: 118 +inovertime() +{ + return isdefined(game["status"]) && game["status"] == "overtime"; +} + +//Function Number: 119 +gamehasstarted() +{ + if(level.teambased) + { + return level.hasspawned["axis"] && level.hasspawned["allies"]; + } + + return level.maxplayercount > 1; +} + +//Function Number: 120 +getaverageorigin(param_00) +{ + var_01 = (0,0,0); + if(!param_00.size) + { + return undefined; + } + + foreach(var_03 in param_00) + { + var_01 = var_01 + var_03.origin; + } + + var_05 = int(var_01[0] / param_00.size); + var_06 = int(var_01[1] / param_00.size); + var_07 = int(var_01[2] / param_00.size); + var_01 = (var_05,var_06,var_07); + return var_01; +} + +//Function Number: 121 +getlivingplayers(param_00) +{ + var_01 = []; + foreach(var_03 in level.players) + { + if(!isalive(var_03)) + { + continue; + } + + if(level.teambased && isdefined(param_00)) + { + if(param_00 == var_03.pers["team"]) + { + var_01[var_01.size] = var_03; + } + + continue; + } + + var_01[var_01.size] = var_03; + } + + return var_01; +} + +//Function Number: 122 +setusingremote(param_00) +{ + if(isdefined(self.carryicon)) + { + self.carryicon.alpha = 0; + } + + self.usingremote = param_00; + common_scripts\utility::_disableoffhandweapons(); + self notify("using_remote"); +} + +//Function Number: 123 +getremotename() +{ + return self.usingremote; +} + +//Function Number: 124 +freezecontrolswrapper(param_00) +{ + if(isdefined(level.hostmigrationtimer)) + { + self freezecontrols(1); + return; + } + + self freezecontrols(param_00); +} + +//Function Number: 125 +clearusingremote() +{ + if(isdefined(self.carryicon)) + { + self.carryicon.alpha = 1; + } + + self.usingremote = undefined; + common_scripts\utility::_enableoffhandweapons(); + var_00 = self getcurrentweapon(); + if(var_00 == "none" || iskillstreakweapon(var_00)) + { + self switchtoweapon(common_scripts\utility::getlastweapon()); + } + + freezecontrolswrapper(0); + self notify("stopped_using_remote"); +} + +//Function Number: 126 +isusingremote() +{ + return isdefined(self.usingremote); +} + +//Function Number: 127 +queuecreate(param_00) +{ + if(!isdefined(level.queues)) + { + level.queues = []; + } + + level.queues[param_00] = []; +} + +//Function Number: 128 +queueadd(param_00,param_01) +{ + level.queues[param_00][level.queues[param_00].size] = param_01; +} + +//Function Number: 129 +queueremovefirst(param_00) +{ + var_01 = undefined; + var_02 = []; + foreach(var_04 in level.queues[param_00]) + { + if(!isdefined(var_04)) + { + continue; + } + + if(!isdefined(var_01)) + { + var_01 = var_04; + continue; + } + + var_02[var_02.size] = var_04; + } + + level.queues[param_00] = var_02; + return var_01; +} + +//Function Number: 130 +_giveweapon(param_00,param_01,param_02) +{ + if(!isdefined(param_01)) + { + param_01 = -1; + } + + if(issubstr(param_00,"_akimbo") || isdefined(param_02) && param_02 == 1) + { + self giveweapon(param_00,param_01,1); + return; + } + + self giveweapon(param_00,param_01,0); +} + +//Function Number: 131 +_hasperk(param_00) +{ + if(isdefined(self.perks[param_00])) + { + return 1; + } + + return 0; +} + +//Function Number: 132 +giveperk(param_00,param_01) +{ + if(issubstr(param_00,"_mp")) + { + switch(param_00) + { + case "frag_grenade_mp": + self setoffhandprimaryclass("frag"); + break; + + case "throwingknife_mp": + self setoffhandprimaryclass("throwingknife"); + break; + + case "trophy_mp": + self setoffhandsecondaryclass("flash"); + break; + } + + _giveweapon(param_00,0); + self givestartammo(param_00); + _setperk(param_00,param_01); + return; + } + + if(issubstr(param_00,"specialty_weapon_")) + { + _setperk(param_00,param_01); + return; + } + + _setperk(param_00,param_01); + _setextraperks(param_00); +} + +//Function Number: 133 +_setperk(param_00,param_01) +{ + self.perks[param_00] = 1; + if(isdefined(level.perksetfuncs[param_00])) + { + self thread [[ level.perksetfuncs[param_00] ]](); + } + + self setperk(param_00,!isdefined(level.scriptperks[param_00]),param_01); +} + +//Function Number: 134 +_setextraperks(param_00) +{ + if(param_00 == "specialty_coldblooded") + { + giveperk("specialty_heartbreaker",0); + } + + if(param_00 == "specialty_fasterlockon") + { + giveperk("specialty_armorpiercing",0); + } + + if(param_00 == "specialty_spygame") + { + giveperk("specialty_empimmune",0); + } + + if(param_00 == "specialty_rollover") + { + giveperk("specialty_assists",0); + } +} + +//Function Number: 135 +_unsetperk(param_00) +{ + self.perks[param_00] = undefined; + if(isdefined(level.perkunsetfuncs[param_00])) + { + self thread [[ level.perkunsetfuncs[param_00] ]](); + } + + self unsetperk(param_00,!isdefined(level.scriptperks[param_00])); +} + +//Function Number: 136 +_unsetextraperks(param_00) +{ + if(param_00 == "specialty_bulletaccuracy") + { + _unsetperk("specialty_steadyaimpro"); + } + + if(param_00 == "specialty_coldblooded") + { + _unsetperk("specialty_heartbreaker"); + } + + if(param_00 == "specialty_fasterlockon") + { + _unsetperk("specialty_armorpiercing"); + } + + if(param_00 == "specialty_spygame") + { + _unsetperk("specialty_empimmune"); + } + + if(param_00 == "specialty_rollover") + { + _unsetperk("specialty_assists"); + } +} + +//Function Number: 137 +_clearperks() +{ + foreach(var_02, var_01 in self.perks) + { + if(isdefined(level.perkunsetfuncs[var_02])) + { + self [[ level.perkunsetfuncs[var_02] ]](); + } + } + + self.perks = []; + self clearperks(); +} + +//Function Number: 138 +quicksort(param_00) +{ + return quicksortmid(param_00,0,param_00.size - 1); +} + +//Function Number: 139 +quicksortmid(param_00,param_01,param_02) +{ + var_03 = param_01; + var_04 = param_02; + if(param_02 - param_01 >= 1) + { + var_05 = param_00[param_01]; + while(var_04 > var_03) + { + while(param_00[var_03] <= var_05 && var_03 <= param_02 && var_04 > var_03) + { + var_03++; + } + + while(param_00[var_04] > var_05 && var_04 >= param_01 && var_04 >= var_03) + { + var_04--; + } + + if(var_04 > var_03) + { + param_00 = swap(param_00,var_03,var_04); + } + } + + param_00 = swap(param_00,param_01,var_04); + param_00 = quicksortmid(param_00,param_01,var_04 - 1); + param_00 = quicksortmid(param_00,var_04 + 1,param_02); + } + else + { + return param_01; + } + + return param_00; +} + +//Function Number: 140 +swap(param_00,param_01,param_02) +{ + var_03 = param_00[param_01]; + param_00[param_01] = param_00[param_02]; + param_00[param_02] = var_03; + return param_00; +} + +//Function Number: 141 +_suicide() +{ + if(isusingremote() && !isdefined(self.fauxdead)) + { + thread maps\mp\gametypes\_damage::playerkilled_internal(self,self,self,10000,"MOD_SUICIDE","frag_grenade_mp",(0,0,0),"none",0,1116,1); + return; + } + + if(!isusingremote() && !isdefined(self.fauxdead)) + { + self suicide(); + } +} + +//Function Number: 142 +isreallyalive(param_00) +{ + if(isalive(param_00) && !isdefined(param_00.fauxdead)) + { + return 1; + } + + return 0; +} + +//Function Number: 143 +playdeathsound() +{ + var_00 = randomintrange(1,8); + if(self.team == "axis") + { + self playsound("generic_death_russian_" + var_00); + return; + } + + self playsound("generic_death_american_" + var_00); +} + +//Function Number: 144 +rankingenabled() +{ + return level.rankedmatch && !self.usingonlinedataoffline; +} + +//Function Number: 145 +privatematch() +{ + return level.onlinegame && getdvarint("xblive_privatematch"); +} + +//Function Number: 146 +matchmakinggame() +{ + return level.onlinegame && !getdvarint("xblive_privatematch"); +} + +//Function Number: 147 +setaltsceneobj(param_00,param_01,param_02,param_03) +{ +} + +//Function Number: 148 +endsceneondeath(param_00) +{ + self endon("altscene"); + param_00 waittill("death"); + self notify("end_altScene"); +} + +//Function Number: 149 +getgametypenumlives() +{ + return getwatcheddvar("numlives"); +} + +//Function Number: 150 +givecombathigh(param_00) +{ + self.combathigh = param_00; +} + +//Function Number: 151 +arrayinsertion(param_00,param_01,param_02) +{ + if(param_00.size != 0) + { + for(var_03 = param_00.size;var_03 >= param_02;var_03--) + { + param_00[var_03 + 1] = param_00[var_03]; + } + } + + param_00[param_02] = param_01; +} + +//Function Number: 152 +getproperty(param_00,param_01) +{ + var_02 = param_01; + var_02 = getdvar(param_00,param_01); + return var_02; +} + +//Function Number: 153 +getintproperty(param_00,param_01) +{ + var_02 = param_01; + var_02 = getdvarint(param_00,param_01); + return var_02; +} + +//Function Number: 154 +getfloatproperty(param_00,param_01) +{ + var_02 = param_01; + var_02 = getdvarfloat(param_00,param_01); + return var_02; +} + +//Function Number: 155 +statusmenu(param_00) +{ + self endon("disconnect"); + if(!isdefined(self._statusmenu)) + { + self.statusmenu = 0; + } + + if(self.statusmenu) + { + return; + } + + self.statusmenu = 1; + self openpopupmenu("status_update"); + wait param_00; + self closepopupmenu("status_update"); + wait 10; + self.statusmenu = 0; +} + +//Function Number: 156 +ischangingweapon() +{ + return isdefined(self.changingweapon); +} + +//Function Number: 157 +killshouldaddtokillstreak(param_00) +{ + if(_hasperk("specialty_explosivebullets")) + { + return 0; + } + + if(isdefined(self.isjuggernautrecon) && self.isjuggernautrecon == 1) + { + return 0; + } + + if(isdefined(level.killstreakchainingweapons[param_00])) + { + for(var_01 = 1;var_01 < 4;var_01++) + { + if(isdefined(self.pers["killstreaks"][var_01]) && isdefined(self.pers["killstreaks"][var_01].streakname) && self.pers["killstreaks"][var_01].streakname == level.killstreakchainingweapons[param_00] && isdefined(self.pers["killstreaks"][var_01].lifeid) && self.pers["killstreaks"][var_01].lifeid == self.pers["deaths"]) + { + return streakshouldchain(level.killstreakchainingweapons[param_00]); + } + } + + return 0; + } + + return !iskillstreakweapon(var_01); +} + +//Function Number: 158 +streakshouldchain(param_00) +{ + var_01 = maps\mp\killstreaks\_killstreaks::getstreakcost(param_00); + var_02 = maps\mp\killstreaks\_killstreaks::getnextstreakname(); + var_03 = maps\mp\killstreaks\_killstreaks::getstreakcost(var_02); + return var_01 < var_03; +} + +//Function Number: 159 +isjuggernaut() +{ + if(isdefined(self.isjuggernaut) && self.isjuggernaut == 1) + { + return 1; + } + + if(isdefined(self.isjuggernautdef) && self.isjuggernautdef == 1) + { + return 1; + } + + if(isdefined(self.isjuggernautgl) && self.isjuggernautgl == 1) + { + return 1; + } + + if(isdefined(self.isjuggernautrecon) && self.isjuggernautrecon == 1) + { + return 1; + } + + return 0; +} + +//Function Number: 160 +iskillstreakweapon(param_00) +{ + if(!isdefined(param_00)) + { + return 0; + } + + if(param_00 == "none") + { + return 0; + } + + var_01 = strtok(param_00,"_"); + var_02 = 0; + if(param_00 != "destructible_car" && param_00 != "barrel_mp") + { + foreach(var_04 in var_01) + { + if(var_04 == "mp") + { + var_02 = 1; + break; + } + } + + if(!var_02) + { + param_00 = param_00 + "_mp"; + } + } + + if(issubstr(param_00,"destructible")) + { + return 0; + } + + if(issubstr(param_00,"killstreak")) + { + return 1; + } + + if(maps\mp\killstreaks\_airdrop::isairdropmarker(param_00)) + { + return 1; + } + + if(isdefined(level.killstreakweildweapons[param_00])) + { + return 1; + } + + if(isdefined(weaponinventorytype(param_00)) && weaponinventorytype(param_00) == "exclusive" && param_00 != "destructible_car" && param_00 != "barrel_mp") + { + return 1; + } + + return 0; +} + +//Function Number: 161 +isenvironmentweapon(param_00) +{ + if(!isdefined(param_00)) + { + return 0; + } + + if(param_00 == "turret_minigun_mp") + { + return 1; + } + + if(issubstr(param_00,"_bipod_")) + { + return 1; + } + + return 0; +} + +//Function Number: 162 +getweaponclass(param_00) +{ + var_01 = strtok(param_00,"_"); + if(var_01[0] == "iw5") + { + var_02 = var_01[0] + "_" + var_01[1]; + var_03 = tablelookup("mp/statstable.csv",4,var_02,2); + } + else if(var_03[0] == "alt") + { + var_02 = var_03[1] + "_" + var_03[2]; + var_03 = tablelookup("mp/statstable.csv",4,var_02,2); + } + else + { + var_03 = tablelookup("mp/statstable.csv",4,var_03[0],2); + } + + if(var_03 == "") + { + var_04 = strip_suffix(param_00,"_mp"); + var_03 = tablelookup("mp/statstable.csv",4,var_04,2); + } + + if(isenvironmentweapon(param_00)) + { + var_03 = "weapon_mg"; + } + else if(iskillstreakweapon(param_00)) + { + var_03 = "killstreak"; + } + else if(isdeathstreakweapon(param_00)) + { + var_03 = "deathstreak"; + } + else if(param_00 == "none") + { + var_03 = "other"; + } + else if(var_03 == "") + { + var_03 = "other"; + } + + return var_03; +} + +//Function Number: 163 +isdeathstreakweapon(param_00) +{ + if(param_00 == "c4death_mp" || param_00 == "frag_grenade_short_mp") + { + return 1; + } + + return 0; +} + +//Function Number: 164 +getbaseweaponname(param_00) +{ + var_01 = strtok(param_00,"_"); + if(var_01[0] == "iw5") + { + } + else if(var_7B[0] == "alt") + { + } + + return var_7B[0]; +} + +//Function Number: 165 +fixakimbostring(param_00,param_01) +{ + if(!isdefined(param_01)) + { + param_01 = 1; + } + + var_02 = 0; + for(var_03 = 0;var_03 < param_00.size;var_03++) + { + if(param_00[var_03] == "a" && param_00[var_03 + 1] == "k" && param_00[var_03 + 2] == "i" && param_00[var_03 + 3] == "m" && param_00[var_03 + 4] == "b" && param_00[var_03 + 5] == "o") + { + var_02 = var_03; + break; + } + } + + param_00 = getsubstr(param_00,0,var_02) + getsubstr(param_00,var_02 + 6,param_00.size); + if(param_01) + { + param_00 = param_00 + "_akimbo"; + } + + return param_00; +} + +//Function Number: 166 +playsoundinspace(param_00,param_01) +{ + playsoundatpos(param_01,param_00); +} + +//Function Number: 167 +limitdecimalplaces(param_00,param_01) +{ + var_02 = 1; + for(var_03 = 0;var_03 < param_01;var_03++) + { + var_02 = var_02 * 10; + } + + var_04 = param_00 * var_02; + var_04 = int(var_04); + var_04 = var_04 / var_02; + return var_04; +} + +//Function Number: 168 +rounddecimalplaces(param_00,param_01,param_02) +{ + if(!isdefined(param_02)) + { + param_02 = "nearest"; + } + + var_03 = 1; + for(var_04 = 0;var_04 < param_01;var_04++) + { + var_03 = var_03 * 10; + } + + var_05 = param_00 * var_03; + if(param_02 == "up") + { + var_06 = ceil(var_05); + } + else if(var_03 == "down") + { + var_06 = floor(var_06); + } + else + { + var_06 = var_06 + 0.5; + } + + var_05 = int(var_06); + var_05 = var_05 / var_03; + return var_05; +} + +//Function Number: 169 +playerforclientid(param_00) +{ + foreach(var_02 in level.players) + { + if(var_02.clientid == param_00) + { + return var_02; + } + } + + return undefined; +} + +//Function Number: 170 +isrested() +{ + if(!rankingenabled()) + { + return 0; + } + + return self getplayerdata("restXPGoal") > self getplayerdata("experience"); +} + +//Function Number: 171 +stringtofloat(param_00) +{ + var_01 = strtok(param_00,"."); + var_02 = int(var_01[0]); + if(isdefined(var_01[1])) + { + var_03 = 1; + for(var_04 = 0;var_04 < var_01[1].size;var_04++) + { + var_03 = var_03 * 0.1; + } + + var_02 = var_02 + int(var_01[1]) * var_03; + } + + return var_02; +} + +//Function Number: 172 +setselfusable(param_00) +{ + self makeusable(); + foreach(var_02 in level.players) + { + if(var_02 != param_00) + { + self disableplayeruse(var_02); + continue; + } + + self enableplayeruse(var_02); + } +} + +//Function Number: 173 +maketeamusable(param_00) +{ + self makeusable(); + thread _updateteamusable(param_00); +} + +//Function Number: 174 +_updateteamusable(param_00) +{ + self endon("death"); + for(;;) + { + foreach(var_02 in level.players) + { + if(var_02.team == param_00) + { + self enableplayeruse(var_02); + continue; + } + + self disableplayeruse(var_02); + } + + level waittill("joined_team"); + } +} + +//Function Number: 175 +makeenemyusable(param_00) +{ + self makeusable(); + thread _updateenemyusable(param_00); +} + +//Function Number: 176 +_updateenemyusable(param_00) +{ + self endon("death"); + var_01 = param_00.team; + for(;;) + { + if(level.teambased) + { + foreach(var_03 in level.players) + { + if(var_03.team != var_01) + { + self enableplayeruse(var_03); + continue; + } + + self disableplayeruse(var_03); + } + } + else + { + foreach(var_03 in level.players) + { + if(var_03 != param_00) + { + self enableplayeruse(var_03); + continue; + } + + self disableplayeruse(var_03); + } + } + + level waittill("joined_team"); + } +} + +//Function Number: 177 +getnextlifeid() +{ + var_00 = getmatchdata("lifeCount"); + if(var_00 < level.maxlives) + { + setmatchdata("lifeCount",var_00 + 1); + } + + return var_00; +} + +//Function Number: 178 +initgameflags() +{ + if(!isdefined(game["flags"])) + { + game["flags"] = []; + } +} + +//Function Number: 179 +gameflaginit(param_00,param_01) +{ + game["flags"][param_00] = param_01; +} + +//Function Number: 180 +gameflag(param_00) +{ + return game["flags"][param_00]; +} + +//Function Number: 181 +gameflagset(param_00) +{ + game["flags"][param_00] = 1; + level notify(param_00); +} + +//Function Number: 182 +gameflagclear(param_00) +{ + game["flags"][param_00] = 0; +} + +//Function Number: 183 +gameflagwait(param_00) +{ + while(!gameflag(param_00)) + { + level waittill(param_00); + } +} + +//Function Number: 184 +isprimarydamage(param_00) +{ + if(param_00 == "MOD_RIFLE_BULLET" || param_00 == "MOD_PISTOL_BULLET") + { + return 1; + } + + return 0; +} + +//Function Number: 185 +isbulletdamage(param_00) +{ + var_01 = "MOD_RIFLE_BULLET MOD_PISTOL_BULLET MOD_HEAD_SHOT"; + if(issubstr(var_01,param_00)) + { + return 1; + } + + return 0; +} + +//Function Number: 186 +initlevelflags() +{ + if(!isdefined(level.levelflags)) + { + level.levelflags = []; + } +} + +//Function Number: 187 +levelflaginit(param_00,param_01) +{ + level.levelflags[param_00] = param_01; +} + +//Function Number: 188 +levelflag(param_00) +{ + return level.levelflags[param_00]; +} + +//Function Number: 189 +levelflagset(param_00) +{ + level.levelflags[param_00] = 1; + level notify(param_00); +} + +//Function Number: 190 +levelflagclear(param_00) +{ + level.levelflags[param_00] = 0; + level notify(param_00); +} + +//Function Number: 191 +levelflagwait(param_00) +{ + while(!levelflag(param_00)) + { + level waittill(param_00); + } +} + +//Function Number: 192 +levelflagwaitopen(param_00) +{ + while(levelflag(param_00)) + { + level waittill(param_00); + } +} + +//Function Number: 193 +getweaponattachments(param_00) +{ + var_01 = strtok(param_00,"_"); + var_02 = []; + foreach(var_04 in var_01) + { + if(issubstr(var_04,"scopevz")) + { + var_02[var_02.size] = "vzscope"; + } + + if(maps\mp\gametypes\_class::isvalidattachment(var_04,0)) + { + var_02[var_02.size] = var_04; + } + } + + return var_02; +} + +//Function Number: 194 +isemped() +{ + if(self.team == "spectator") + { + return 0; + } + + if(level.teambased) + { + return level.teamemped[self.team] || isdefined(self.empgrenaded) && self.empgrenaded || level.teamnukeemped[self.team]; + } + + return (isdefined(level.empplayer) && level.empplayer != self) || isdefined(self.empgrenaded) && self.empgrenaded || isdefined(level.nukeinfo.player) && self != level.nukeinfo.player && level.teamnukeemped[self.team]; +} + +//Function Number: 195 +isairdenied() +{ + return 0; +} + +//Function Number: 196 +isnuked() +{ + if(self.team == "spectator") + { + return 0; + } + + return isdefined(self.nuked); +} + +//Function Number: 197 +getplayerforguid(param_00) +{ + foreach(var_02 in level.players) + { + if(var_02.guid == param_00) + { + return var_02; + } + } + + return undefined; +} + +//Function Number: 198 +teamplayercardsplash(param_00,param_01,param_02) +{ + if(level.hardcoremode) + { + return; + } + + foreach(var_04 in level.players) + { + if(isdefined(param_02) && var_04.team != param_02) + { + continue; + } + + var_04 thread maps\mp\gametypes\_hud_message::playercardsplashnotify(param_00,param_01); + } +} + +//Function Number: 199 +iscacprimaryweapon(param_00) +{ + switch(getweaponclass(param_00)) + { + case "weapon_shotgun": + case "weapon_lmg": + case "weapon_sniper": + case "weapon_riot": + case "weapon_assault": + case "weapon_smg": + return 1; + + default: + return 0; + } +} + +//Function Number: 200 +iscacsecondaryweapon(param_00) +{ + switch(getweaponclass(param_00)) + { + case "weapon_machine_pistol": + case "weapon_pistol": + case "weapon_projectile": + return 1; + + default: + return 0; + } +} + +//Function Number: 201 +getlastlivingplayer(param_00) +{ + var_01 = undefined; + foreach(var_03 in level.players) + { + if(isdefined(param_00) && var_03.team != param_00) + { + continue; + } + + if(!isreallyalive(var_03) && !var_03 maps\mp\gametypes\_playerlogic::mayspawn()) + { + continue; + } + + var_01 = var_03; + } + + return var_01; +} + +//Function Number: 202 +getpotentiallivingplayers() +{ + var_00 = []; + foreach(var_02 in level.players) + { + if(!isreallyalive(var_02) && !var_02 maps\mp\gametypes\_playerlogic::mayspawn()) + { + continue; + } + + var_00[var_00.size] = var_02; + } + + return var_00; +} + +//Function Number: 203 +waittillrecoveredhealth(param_00,param_01) +{ + self endon("death"); + self endon("disconnect"); + var_02 = 0; + if(!isdefined(param_01)) + { + param_01 = 0.05; + } + + if(!isdefined(param_00)) + { + param_00 = 0; + } + + for(;;) + { + if(self.health != self.maxhealth) + { + var_02 = 0; + } + else + { + var_02 = var_02 + param_01; + } + + wait param_01; + if(self.health == self.maxhealth && var_02 >= param_00) + { + break; + } + } +} + +//Function Number: 204 +attachmentmap(param_00,param_01) +{ + var_02 = tablelookup("mp/statstable.csv",4,param_01,2); + switch(var_02) + { + case "weapon_smg": + if(param_00 == "reflex") + { + return "reflexsmg"; + } + else if(param_00 == "eotech") + { + return "eotechsmg"; + } + else if(param_00 == "acog") + { + return "acogsmg"; + } + else if(param_00 == "thermal") + { + return "thermalsmg"; + } + + break; + + case "weapon_lmg": + if(param_00 == "reflex") + { + return "reflexlmg"; + } + else if(param_00 == "eotech") + { + return "eotechlmg"; + } + + break; + + case "weapon_machine_pistol": + if(param_00 == "reflex") + { + return "reflexsmg"; + } + else if(param_00 == "eotech") + { + return "eotechsmg"; + } + + break; + + default: + return param_00; + } +} + +//Function Number: 205 +validateattachment(param_00) +{ + switch(param_00) + { + case "silencer03": + case "silencer02": + return "silencer"; + + case "gp25": + case "m320": + return "gl"; + + case "reflexlmg": + case "reflexsmg": + return "reflex"; + + case "eotechlmg": + case "eotechsmg": + return "eotech"; + + case "acogsmg": + return "acog"; + + case "thermalsmg": + return "thermal"; + + default: + return param_00; + } +} + +//Function Number: 206 +_objective_delete(param_00) +{ + objective_delete(param_00); + if(!isdefined(level.reclaimedreservedobjectives)) + { + level.reclaimedreservedobjectives = []; + level.reclaimedreservedobjectives[0] = param_00; + return; + } + + level.reclaimedreservedobjectives[level.reclaimedreservedobjectives.size] = param_00; +} + +//Function Number: 207 +touchingbadtrigger() +{ + var_00 = getentarray("trigger_hurt","classname"); + foreach(var_02 in var_00) + { + if(self istouching(var_02)) + { + return 1; + } + } + + var_04 = getentarray("radiation","targetname"); + foreach(var_02 in var_04) + { + if(self istouching(var_02)) + { + return 1; + } + } + + return 0; +} + +//Function Number: 208 +setthirdpersondof(param_00) +{ + if(param_00) + { + self setdepthoffield(0,110,512,4096,6,1.8); + return; + } + + self setdepthoffield(0,0,512,512,4,0); +} + +//Function Number: 209 +killtrigger(param_00,param_01,param_02) +{ + var_03 = spawn("trigger_radius",param_00,0,param_01,param_02); + for(;;) + { + var_03 waittill("trigger",var_04); + if(!isplayer(var_04)) + { + continue; + } + + var_04 suicide(); + } +} + +//Function Number: 210 +findisfacing(param_00,param_01,param_02) +{ + var_03 = cos(param_02); + var_04 = anglestoforward(param_00.angles); + var_05 = param_01.origin - param_00.origin; + var_04 = var_04 * (1,1,0); + var_05 = var_05 * (1,1,0); + var_05 = vectornormalize(var_05); + var_04 = vectornormalize(var_04); + var_06 = vectordot(var_05,var_04); + if(var_06 >= var_03) + { + return 1; + } + + return 0; +} + +//Function Number: 211 +combinearrays(param_00,param_01) +{ + if(!isdefined(param_00) && isdefined(param_01)) + { + return param_01; + } + + if(!isdefined(param_01) && isdefined(param_00)) + { + return param_00; + } + + foreach(var_03 in param_01) + { + param_00[param_00.size] = var_03; + } + + return param_00; +} + +//Function Number: 212 +setrecoilscale(param_00,param_01) +{ + if(!isdefined(param_00)) + { + param_00 = 0; + } + + if(!isdefined(self.recoilscale)) + { + self.recoilscale = param_00; + } + else + { + self.recoilscale = self.recoilscale + param_00; + } + + if(isdefined(param_01)) + { + if(isdefined(self.recoilscale) && param_01 < self.recoilscale) + { + param_01 = self.recoilscale; + } + + var_02 = 100 - param_01; + } + else + { + var_02 = 100 - self.recoilscale; + } + + if(var_02 < 0) + { + var_02 = 0; + } + + if(var_02 > 100) + { + var_02 = 100; + } + + if(var_02 == 100) + { + self player_recoilscaleoff(); + return; + } + + self player_recoilscaleon(var_02); +} + +//Function Number: 213 +cleanarray(param_00) +{ + var_01 = []; + foreach(var_04, var_03 in param_00) + { + if(!isdefined(var_03)) + { + continue; + } + + var_01[var_01.size] = param_00[var_04]; + } + + return var_01; +} + +//Function Number: 214 +notusableforjoiningplayers(param_00) +{ + self endon("death"); + level endon("game_ended"); + param_00 endon("disconnect"); + param_00 endon("death"); + for(;;) + { + level waittill("player_spawned",var_01); + if(isdefined(var_01) && var_01 != param_00) + { + self disableplayeruse(var_01); + } + } +} + +//Function Number: 215 +isstrstart(param_00,param_01) +{ + return getsubstr(param_00,0,param_01.size) == param_01; +} + +//Function Number: 216 +validateusestreak() +{ + if(isdefined(self.laststand) && !_hasperk("specialty_finalstand")) + { + self iprintlnbold(&"MP_UNAVILABLE_IN_LASTSTAND"); + return 0; + } + + if(isdefined(level.civilianjetflyby)) + { + self iprintlnbold(&"MP_CIVILIAN_AIR_TRAFFIC"); + return 0; + } + + if(isusingremote()) + { + return 0; + } + + if(isemped()) + { + return 0; + } + + return 1; +} + +//Function Number: 217 +currentactivevehiclecount(param_00) +{ + if(!isdefined(param_00)) + { + param_00 = 0; + } + + var_01 = param_00; + if(isdefined(level.helis)) + { + var_01 = var_01 + level.helis.size; + } + + if(isdefined(level.littlebirds)) + { + var_01 = var_01 + level.littlebirds.size; + } + + if(isdefined(level.ugvs)) + { + var_01 = var_01 + level.ugvs.size; + } + + return var_01; +} + +//Function Number: 218 +maxvehiclesallowed() +{ + return 8; +} + +//Function Number: 219 +incrementfauxvehiclecount() +{ + level.fauxvehiclecount++; +} + +//Function Number: 220 +decrementfauxvehiclecount() +{ + level.fauxvehiclecount--; + if(level.fauxvehiclecount < 0) + { + level.fauxvehiclecount = 0; + } +} + +//Function Number: 221 +lightweightscalar() +{ + return 1.1; +} + +//Function Number: 222 +allowteamchoice() +{ + var_00 = int(tablelookup("mp/gametypesTable.csv",0,level.gametype,4)); + return var_00; +} + +//Function Number: 223 +allowclasschoice() +{ + var_00 = int(tablelookup("mp/gametypesTable.csv",0,level.gametype,5)); + return var_00; +} + +//Function Number: 224 +isbuffunlockedforweapon(param_00,param_01) +{ + var_02 = 4; + var_03 = 0; + var_04 = 4; + var_05 = self getplayerdata("weaponRank",param_01); + var_06 = int(tablelookup("mp/weaponRankTable.csv",var_03,getweaponclass(param_01),var_04)); + var_07 = tablelookup("mp/weaponRankTable.csv",var_06,param_00,var_02); + if(var_07 != "") + { + if(var_05 >= int(var_07)) + { + return 1; + } + } + + return 0; +} + +//Function Number: 225 +isbuffequippedonweapon(param_00,param_01) +{ + if(isdefined(self.loadoutprimary) && self.loadoutprimary == param_01) + { + if(isdefined(self.loadoutprimarybuff) && self.loadoutprimarybuff == param_00) + { + return 1; + } + } + else if(isdefined(self.loadoutsecondary) && self.loadoutsecondary == param_01) + { + if(isdefined(self.loadoutsecondarybuff) && self.loadoutsecondarybuff == param_00) + { + return 1; + } + } + + return 0; +} + +//Function Number: 226 +setcommonrulesfrommatchrulesdata(param_00) +{ + var_01 = getmatchrulesdata("commonOption","timeLimit"); + setdynamicdvar("scr_" + level.gametype + "_timeLimit",var_01); + registertimelimitdvar(level.gametype,var_01); + var_02 = getmatchrulesdata("commonOption","scoreLimit"); + setdynamicdvar("scr_" + level.gametype + "_scoreLimit",var_02); + registerscorelimitdvar(level.gametype,var_02); + var_03 = getmatchrulesdata("commonOption","numLives"); + setdynamicdvar("scr_" + level.gametype + "_numLives",var_03); + registernumlivesdvar(level.gametype,var_03); + setdynamicdvar("scr_player_maxhealth",getmatchrulesdata("commonOption","maxHealth")); + setdynamicdvar("scr_player_healthregentime",getmatchrulesdata("commonOption","healthRegen")); + level.matchrules_damagemultiplier = 0; + level.matchrules_vampirism = 0; + setdynamicdvar("scr_game_spectatetype",getmatchrulesdata("commonOption","spectateModeAllowed")); + setdynamicdvar("scr_game_allowkillcam",getmatchrulesdata("commonOption","showKillcam")); + setdynamicdvar("scr_game_forceuav",getmatchrulesdata("commonOption","radarAlwaysOn")); + setdynamicdvar("scr_" + level.gametype + "_playerrespawndelay",getmatchrulesdata("commonOption","respawnDelay")); + setdynamicdvar("scr_" + level.gametype + "_waverespawndelay",getmatchrulesdata("commonOption","waveRespawnDelay")); + setdynamicdvar("scr_player_forcerespawn",getmatchrulesdata("commonOption","forceRespawn")); + level.matchrules_allowcustomclasses = getmatchrulesdata("commonOption","allowCustomClasses"); + setdynamicdvar("scr_game_hardpoints",getmatchrulesdata("commonOption","allowKillstreaks")); + setdynamicdvar("scr_game_perks",getmatchrulesdata("commonOption","allowPerks")); + setdynamicdvar("g_hardcore",getmatchrulesdata("commonOption","hardcoreModeOn")); + setdynamicdvar("scr_thirdPerson",getmatchrulesdata("commonOption","forceThirdPersonView")); + setdynamicdvar("camera_thirdPerson",getmatchrulesdata("commonOption","forceThirdPersonView")); + setdynamicdvar("scr_game_onlyheadshots",getmatchrulesdata("commonOption","headshotsOnly")); + if(!isdefined(param_00)) + { + setdynamicdvar("scr_team_fftype",getmatchrulesdata("commonOption","friendlyFire")); + } + + if(getmatchrulesdata("commonOption","hardcoreModeOn")) + { + setdynamicdvar("scr_team_fftype",1); + setdynamicdvar("scr_player_maxhealth",30); + setdynamicdvar("scr_player_healthregentime",0); + setdynamicdvar("scr_player_respawndelay",10); + setdynamicdvar("scr_game_allowkillcam",0); + setdynamicdvar("scr_game_forceuav",0); + } +} + +//Function Number: 227 +reinitializematchrulesonmigration() +{ + for(;;) + { + level waittill("host_migration_begin"); + [[ level.initializematchrules ]](); + } +} + +//Function Number: 228 +reinitializethermal(param_00) +{ + self endon("disconnect"); + if(isdefined(param_00)) + { + param_00 endon("death"); + } + + for(;;) + { + level waittill("host_migration_begin"); + if(isdefined(self.lastvisionsetthermal)) + { + self visionsetthermalforplayer(self.lastvisionsetthermal,0); + } + } +} + +//Function Number: 229 +getmatchrulesspecialclass(param_00,param_01) +{ + var_02 = []; + if(var_7B["loadoutOffhand"] == "specialty_null") + { + } + + var_03 = getmatchrulesdata("defaultClasses",param_01,var_02,"class","perks",5); + if(var_03 != "specialty_null") + { + var_7B["loadoutStreakType"] = var_03; + var_7B["loadoutKillstreak1"] = maps\mp\gametypes\_class::recipe_getkillstreak(param_01,var_02,var_03,0); + var_7B["loadoutKillstreak2"] = maps\mp\gametypes\_class::recipe_getkillstreak(param_01,var_02,var_03,1); + var_7B["loadoutKillstreak3"] = maps\mp\gametypes\_class::recipe_getkillstreak(param_01,var_02,var_03,2); + } + + var_7B["loadoutDeathstreak"] = getmatchrulesdata("defaultClasses",param_01,var_02,"class","deathstreak"); + var_7B["loadoutJuggernaut"] = getmatchrulesdata("defaultClasses",param_01,var_02,"juggernaut"); + return var_7B; +} + +//Function Number: 230 +recipeclassapplyjuggernaut() +{ + level endon("game_ended"); + self endon("disconnect"); + self waittill("spawned_player"); + if(!isdefined(self.isjuiced)) + { + self.movespeedscaler = 0.7; + maps\mp\gametypes\_weapons::updatemovespeedscale(); + } + + self.juggmovespeedscaler = 0.7; + self disableweaponpickup(); + if(!getdvarint("camera_thirdPerson")) + { + self.juggernautoverlay = newclienthudelem(self); + self.juggernautoverlay.x = 0; + self.juggernautoverlay.y = 0; + self.juggernautoverlay.alignx = "left"; + self.juggernautoverlay.aligny = "top"; + self.juggernautoverlay.horzalign = "fullscreen"; + self.juggernautoverlay.vertalign = "fullscreen"; + self.juggernautoverlay setshader(level.juggsettings["juggernaut"].overlay,640,480); + self.juggernautoverlay.sort = -10; + self.juggernautoverlay.archived = 1; + self.juggernautoverlay.hidein3rdperson = 1; + } + + thread maps\mp\killstreaks\_juggernaut::juggernautsounds(); + if(level.gametype != "jugg" || isdefined(level.matchrules_showjuggradaricon) && level.matchrules_showjuggradaricon) + { + self setperk("specialty_radarjuggernaut",1,0); + } + + if(isdefined(self.isjuggmodejuggernaut) && self.isjuggmodejuggernaut) + { + var_00 = spawn("script_model",self.origin); + var_00.team = self.team; + var_00 makeportableradar(self); + self.personalradar = var_00; + thread maps\mp\killstreaks\_juggernaut::radarmover(var_00); + } + + level notify("juggernaut_equipped",self); + thread maps\mp\killstreaks\_juggernaut::juggremover(); +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/gametypes/_battlechatter_mp.gsc b/MW3/PC/MP/maps/mp/gametypes/_battlechatter_mp.gsc new file mode 100644 index 0000000..e83a8dd --- /dev/null +++ b/MW3/PC/MP/maps/mp/gametypes/_battlechatter_mp.gsc @@ -0,0 +1,400 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_battlechatter_mp.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 16 + * Decompile Time: 235 ms + * Timestamp: 10/27/2023 2:12:10 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level.isteamspeaking["allies"] = 0; + level.isteamspeaking["axis"] = 0; + level.speakers["allies"] = []; + level.speakers["axis"] = []; + level.bcsounds = []; + level.bcsounds["reload"] = "inform_reloading_generic"; + level.bcsounds["frag_out"] = "inform_attack_grenade"; + level.bcsounds["flash_out"] = "inform_attack_flashbang"; + level.bcsounds["smoke_out"] = "inform_attack_smoke"; + level.bcsounds["conc_out"] = "inform_attack_stun"; + level.bcsounds["c4_plant"] = "inform_attack_thwc4"; + level.bcsounds["claymore_plant"] = "inform_plant_claymore"; + level.bcsounds["semtex_out"] = "semtex_use"; + level.bcsounds["kill"] = "inform_killfirm_infantry"; + level.bcsounds["casualty"] = "inform_casualty_generic"; + level.bcsounds["suppressing_fire"] = "cmd_suppressfire"; + level.bcsounds["semtex_incoming"] = "semtex_incoming"; + level.bcsounds["c4_incoming"] = "c4_incoming"; + level.bcsounds["flash_incoming"] = "flash_incoming"; + level.bcsounds["stun_incoming"] = "stun_incoming"; + level.bcsounds["grenade_incoming"] = "grenade_incoming"; + level.bcsounds["rpg_incoming"] = "rpg_incoming"; + level thread onplayerconnect(); +} + +//Function Number: 2 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_00 thread onplayerspawned(); + } +} + +//Function Number: 3 +onplayerspawned() +{ + self endon("disconnect"); + for(;;) + { + self waittill("spawned_player"); + var_00 = maps\mp\gametypes\_teams::getteamvoiceprefix(self.team); + if(!isdefined(self.pers["voiceIndex"]) || var_00 != "RU_" && self.pers["voiceNum"] >= 3) + { + if(var_00 == "RU_") + { + self.pers["voiceNum"] = randomintrange(0,4); + } + else + { + self.pers["voiceNum"] = randomintrange(0,2); + } + + self.pers["voicePrefix"] = var_00 + self.pers["voiceNum"] + "_"; + } + + if(level.splitscreen) + { + continue; + } + + thread claymoretracking(); + thread reloadtracking(); + thread grenadetracking(); + thread grenadeproximitytracking(); + thread suppressingfiretracking(); + } +} + +//Function Number: 4 +grenadeproximitytracking() +{ + self endon("disconnect"); + self endon("death"); + var_00 = self.origin; + for(;;) + { + if(!isdefined(level.grenades) || level.grenades.size < 1 || !maps\mp\_utility::isreallyalive(self)) + { + wait 0.05; + continue; + } + + var_01 = maps\mp\_utility::combinearrays(level.grenades,level.missiles); + foreach(var_03 in var_01) + { + wait 0.05; + if(!isdefined(var_03)) + { + continue; + } + + if(isdefined(var_03.weaponname)) + { + switch(var_03.weaponname) + { + case "claymore_mp": + break; + } + } + + switch(var_03.model) + { + case "mp_trophy_system": + case "weapon_radar": + case "weapon_jammer": + case "weapon_parabolic_knife": + break; + } + + if(!isdefined(var_03.owner)) + { + var_03.owner = getmissileowner(var_03); + } + + if(isdefined(var_03.owner) && level.teambased && var_03.owner.team == self.team) + { + continue; + } + + var_04 = distancesquared(var_03.origin,self.origin); + if(var_04 < 147456) + { + if(bullettracepassed(var_03.origin,self.origin,0,self)) + { + if(common_scripts\utility::cointoss()) + { + continue; + wait 5; + continue; + } + + if(var_03.model == "projectile_concussion_grenade") + { + level thread saylocalsound(self,"stun_incoming"); + wait 5; + continue; + } + + if(var_03.model == "projectile_m84_flashbang_grenade") + { + level thread saylocalsound(self,"flash_incoming"); + wait 5; + continue; + } + + if(var_03.model == "projectile_rocket") + { + level thread saylocalsound(self,"rpg_incoming"); + wait 5; + continue; + } + + if(var_03.model == "weapon_c4") + { + level thread saylocalsound(self,"c4_incoming"); + wait 5; + continue; + } + + if(var_03.model == "projectile_m203grenade") + { + level thread saylocalsound(self,"rpg_incoming"); + wait 5; + continue; + } + + if(var_03.model == "projectile_semtex_grenade") + { + level thread saylocalsound(self,"semtex_incoming"); + wait 5; + continue; + } + + level thread saylocalsound(self,"grenade_incoming"); + wait 5; + } + } + } + } +} + +//Function Number: 5 +suppressingfiretracking() +{ + self endon("death"); + self endon("disconnect"); + self endon("faux_spawn"); + var_00 = undefined; + for(;;) + { + self waittill("begin_firing"); + thread suppresswaiter(); + self waittill("end_firing"); + self notify("stoppedFiring"); + } +} + +//Function Number: 6 +suppresswaiter() +{ + self notify("suppressWaiter"); + self endon("suppressWaiter"); + self endon("death"); + self endon("disconnect"); + self endon("stoppedFiring"); + wait 2; + level thread saylocalsound(self,"suppressing_fire"); +} + +//Function Number: 7 +claymoretracking() +{ + self endon("death"); + self endon("disconnect"); + self endon("faux_spawn"); + for(;;) + { + self waittill("begin_firing"); + var_00 = self getcurrentweapon(); + if(var_00 == "claymore_mp") + { + level thread saylocalsound(self,"claymore_plant"); + } + } +} + +//Function Number: 8 +reloadtracking() +{ + self endon("death"); + self endon("disconnect"); + self endon("faux_spawn"); + for(;;) + { + self waittill("reload_start"); + level thread saylocalsound(self,"reload"); + } +} + +//Function Number: 9 +grenadetracking() +{ + self endon("death"); + self endon("disconnect"); + self endon("faux_spawn"); + for(;;) + { + self waittill("grenade_fire",var_00,var_01); + if(var_01 == "frag_grenade_mp") + { + level thread saylocalsound(self,"frag_out"); + continue; + } + + if(var_01 == "semtex_mp") + { + level thread saylocalsound(self,"semtex_out"); + continue; + } + + if(var_01 == "flash_grenade_mp") + { + level thread saylocalsound(self,"flash_out"); + continue; + } + + if(var_01 == "concussion_grenade_mp") + { + level thread saylocalsound(self,"conc_out"); + continue; + } + + if(var_01 == "smoke_grenade_mp") + { + level thread saylocalsound(self,"smoke_out"); + continue; + } + + if(var_01 == "c4_mp") + { + level thread saylocalsound(self,"c4_plant"); + } + } +} + +//Function Number: 10 +saylocalsounddelayed(param_00,param_01,param_02) +{ + param_00 endon("death"); + param_00 endon("disconnect"); + wait param_02; + saylocalsound(param_00,param_01); +} + +//Function Number: 11 +saylocalsound(param_00,param_01) +{ + param_00 endon("death"); + param_00 endon("disconnect"); + if(isspeakerinrange(param_00)) + { + return; + } + + if(param_00.team != "spectator") + { + var_02 = param_00.pers["voicePrefix"]; + var_03 = var_02 + level.bcsounds[param_01]; + param_00 thread dosound(var_03); + } +} + +//Function Number: 12 +dosound(param_00) +{ + var_01 = self.pers["team"]; + level addspeaker(self,var_01); + self playsoundtoteam(param_00,var_01,self); + thread timehack(param_00); + common_scripts\utility::waittill_any(param_00,"death","disconnect"); + level removespeaker(self,var_01); +} + +//Function Number: 13 +timehack(param_00) +{ + self endon("death"); + self endon("disconnect"); + wait 2; + self notify(param_00); +} + +//Function Number: 14 +isspeakerinrange(param_00) +{ + param_00 endon("death"); + param_00 endon("disconnect"); + var_01 = 1000000; + if(isdefined(param_00) && isdefined(param_00.pers["team"]) && param_00.pers["team"] != "spectator") + { + for(var_02 = 0;var_02 < level.speakers[param_00.pers["team"]].size;var_02++) + { + var_03 = level.speakers[param_00.pers["team"]][var_02]; + if(var_03 == param_00) + { + return 1; + } + + if(!isdefined(var_03)) + { + continue; + } + + if(distancesquared(var_03.origin,param_00.origin) < var_01) + { + return 1; + } + } + } + + return 0; +} + +//Function Number: 15 +addspeaker(param_00,param_01) +{ + level.speakers[param_01][level.speakers[param_01].size] = param_00; +} + +//Function Number: 16 +removespeaker(param_00,param_01) +{ + var_02 = []; + for(var_03 = 0;var_03 < level.speakers[param_01].size;var_03++) + { + if(level.speakers[param_01][var_03] == param_00) + { + continue; + } + + var_02[var_02.size] = level.speakers[param_01][var_03]; + } + + level.speakers[param_01] = var_02; +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/gametypes/_callbacksetup.gsc b/MW3/PC/MP/maps/mp/gametypes/_callbacksetup.gsc new file mode 100644 index 0000000..659fd1a --- /dev/null +++ b/MW3/PC/MP/maps/mp/gametypes/_callbacksetup.gsc @@ -0,0 +1,154 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_callbacksetup.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 15 + * Decompile Time: 219 ms + * Timestamp: 10/27/2023 2:12:11 AM +*******************************************************************/ + +//Function Number: 1 +codecallback_startgametype() +{ + if(getdvar("r_reflectionProbeGenerate") == "1") + { + level waittill("eternity"); + } + + if(!isdefined(level.gametypestarted) || !level.gametypestarted) + { + [[ level.callbackstartgametype ]](); + level.gametypestarted = 1; + } +} + +//Function Number: 2 +codecallback_playerconnect() +{ + if(getdvar("r_reflectionProbeGenerate") == "1") + { + level waittill("eternity"); + } + + self endon("disconnect"); + [[ level.callbackplayerconnect ]](); +} + +//Function Number: 3 +codecallback_playerdisconnect() +{ + self notify("disconnect"); + [[ level.callbackplayerdisconnect ]](); +} + +//Function Number: 4 +codecallback_playerdamage(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09) +{ + self endon("disconnect"); + [[ level.callbackplayerdamage ]](param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09); +} + +//Function Number: 5 +codecallback_playerkilled(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08) +{ + self endon("disconnect"); + [[ level.callbackplayerkilled ]](param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08); +} + +//Function Number: 6 +codecallback_vehicledamage(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A,param_0B) +{ + if(isdefined(self.damagecallback)) + { + self [[ self.damagecallback ]](param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A,param_0B); + return; + } + + self vehicle_finishdamage(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A,param_0B); +} + +//Function Number: 7 +codecallback_codeendgame() +{ + self endon("disconnect"); + [[ level.callbackcodeendgame ]](); +} + +//Function Number: 8 +codecallback_playerlaststand(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08) +{ + self endon("disconnect"); + [[ level.callbackplayerlaststand ]](param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08); +} + +//Function Number: 9 +codecallback_playermigrated() +{ + self endon("disconnect"); + [[ level.callbackplayermigrated ]](); +} + +//Function Number: 10 +codecallback_hostmigration() +{ + [[ level.callbackhostmigration ]](); +} + +//Function Number: 11 +setupdamageflags() +{ + level.idflags_radius = 1; + level.idflags_no_armor = 2; + level.idflags_no_knockback = 4; + level.idflags_penetration = 8; + level.idflags_stun = 16; + level.idflags_shield_explosive_impact = 32; + level.idflags_shield_explosive_impact_huge = 64; + level.idflags_shield_explosive_splash = 128; + level.idflags_no_team_protection = 256; + level.idflags_no_protection = 512; + level.idflags_passthru = 1024; +} + +//Function Number: 12 +setupcallbacks() +{ + setdefaultcallbacks(); + setupdamageflags(); +} + +//Function Number: 13 +setdefaultcallbacks() +{ + level.callbackstartgametype = ::maps\mp\gametypes\_gamelogic::callback_startgametype; + level.callbackplayerconnect = ::maps\mp\gametypes\_playerlogic::callback_playerconnect; + level.callbackplayerdisconnect = ::maps\mp\gametypes\_playerlogic::callback_playerdisconnect; + level.callbackplayerdamage = ::maps\mp\gametypes\_damage::callback_playerdamage; + level.callbackplayerkilled = ::maps\mp\gametypes\_damage::callback_playerkilled; + level.callbackcodeendgame = ::maps\mp\gametypes\_gamelogic::callback_codeendgame; + level.callbackplayerlaststand = ::maps\mp\gametypes\_damage::callback_playerlaststand; + level.callbackplayermigrated = ::maps\mp\gametypes\_playerlogic::callback_playermigrated; + level.callbackhostmigration = ::maps\mp\gametypes\_hostmigration::callback_hostmigration; +} + +//Function Number: 14 +abortlevel() +{ + level.callbackstartgametype = ::callbackvoid; + level.callbackplayerconnect = ::callbackvoid; + level.callbackplayerdisconnect = ::callbackvoid; + level.callbackplayerdamage = ::callbackvoid; + level.callbackplayerkilled = ::callbackvoid; + level.callbackcodeendgame = ::callbackvoid; + level.callbackplayerlaststand = ::callbackvoid; + level.callbackplayermigrated = ::callbackvoid; + level.callbackhostmigration = ::callbackvoid; + setdvar("g_gametype","dm"); + exitlevel(0); +} + +//Function Number: 15 +callbackvoid() +{ +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/gametypes/_class.gsc b/MW3/PC/MP/maps/mp/gametypes/_class.gsc new file mode 100644 index 0000000..cd76eb8 --- /dev/null +++ b/MW3/PC/MP/maps/mp/gametypes/_class.gsc @@ -0,0 +1,2410 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_class.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 68 + * Decompile Time: 1040 ms + * Timestamp: 10/27/2023 2:12:15 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level.classmap["class0"] = 0; + level.classmap["class1"] = 1; + level.classmap["class2"] = 2; + level.classmap["class3"] = 3; + level.classmap["class4"] = 4; + level.classmap["class5"] = 5; + level.classmap["class6"] = 6; + level.classmap["class7"] = 7; + level.classmap["class8"] = 8; + level.classmap["class9"] = 9; + level.classmap["class10"] = 10; + level.classmap["class11"] = 11; + level.classmap["class12"] = 12; + level.classmap["class13"] = 13; + level.classmap["class14"] = 14; + level.classmap["custom1"] = 0; + level.classmap["custom2"] = 1; + level.classmap["custom3"] = 2; + level.classmap["custom4"] = 3; + level.classmap["custom5"] = 4; + level.classmap["custom6"] = 5; + level.classmap["custom7"] = 6; + level.classmap["custom8"] = 7; + level.classmap["custom9"] = 8; + level.classmap["custom10"] = 9; + level.classmap["custom11"] = 10; + level.classmap["custom12"] = 11; + level.classmap["custom13"] = 12; + level.classmap["custom14"] = 13; + level.classmap["custom15"] = 14; + level.classmap["axis_recipe1"] = 0; + level.classmap["axis_recipe2"] = 1; + level.classmap["axis_recipe3"] = 2; + level.classmap["axis_recipe4"] = 3; + level.classmap["axis_recipe5"] = 4; + level.classmap["allies_recipe1"] = 0; + level.classmap["allies_recipe2"] = 1; + level.classmap["allies_recipe3"] = 2; + level.classmap["allies_recipe4"] = 3; + level.classmap["allies_recipe5"] = 4; + level.classmap["copycat"] = -1; + level.defaultclass = "CLASS_ASSAULT"; + level.classtablename = "mp/classTable.csv"; + level thread onplayerconnecting(); +} + +//Function Number: 2 +getclasschoice(param_00) +{ + return param_00; +} + +//Function Number: 3 +getweaponchoice(param_00) +{ + var_01 = strtok(param_00,","); + if(var_01.size > 1) + { + return int(var_01[1]); + } + + return 0; +} + +//Function Number: 4 +logclasschoice(param_00,param_01,param_02,param_03) +{ + if(param_00 == self.lastclass) + { + return; + } + + self logstring("choseclass: " + param_00 + " weapon: " + param_01 + " special: " + param_02); + for(var_04 = 0;var_04 < param_03.size;var_04++) + { + self logstring("perk" + var_04 + ": " + param_03[var_04]); + } + + self.lastclass = param_00; +} + +//Function Number: 5 +cac_getcustomclassloc() +{ + if(getdvarint("xblive_privatematch")) + { + return "privateMatchCustomClasses"; + } + + return "customClasses"; +} + +//Function Number: 6 +cac_getweapon(param_00,param_01) +{ + var_02 = cac_getcustomclassloc(); + return self getplayerdata(var_02,param_00,"weaponSetups",param_01,"weapon"); +} + +//Function Number: 7 +cac_getweaponattachment(param_00,param_01) +{ + var_02 = cac_getcustomclassloc(); + return self getplayerdata(var_02,param_00,"weaponSetups",param_01,"attachment",0); +} + +//Function Number: 8 +cac_getweaponattachmenttwo(param_00,param_01) +{ + var_02 = cac_getcustomclassloc(); + return self getplayerdata(var_02,param_00,"weaponSetups",param_01,"attachment",1); +} + +//Function Number: 9 +cac_getweaponbuff(param_00,param_01) +{ + var_02 = cac_getcustomclassloc(); + return self getplayerdata(var_02,param_00,"weaponSetups",param_01,"buff"); +} + +//Function Number: 10 +cac_getweaponcamo(param_00,param_01) +{ + var_02 = cac_getcustomclassloc(); + return self getplayerdata(var_02,param_00,"weaponSetups",param_01,"camo"); +} + +//Function Number: 11 +cac_getweaponreticle(param_00,param_01) +{ + var_02 = cac_getcustomclassloc(); + return self getplayerdata(var_02,param_00,"weaponSetups",param_01,"reticle"); +} + +//Function Number: 12 +cac_getperk(param_00,param_01) +{ + var_02 = cac_getcustomclassloc(); + return self getplayerdata(var_02,param_00,"perks",param_01); +} + +//Function Number: 13 +cac_getkillstreak(param_00,param_01,param_02) +{ + var_03 = undefined; + switch(param_01) + { + case "streaktype_support": + var_03 = "defenseStreaks"; + break; + + case "streaktype_specialist": + var_03 = "specialistStreaks"; + break; + + default: + var_03 = "assaultStreaks"; + break; + } + + var_04 = cac_getcustomclassloc(); + return self getplayerdata(var_04,param_00,var_03,param_02); +} + +//Function Number: 14 +cac_getdeathstreak(param_00) +{ + var_01 = cac_getcustomclassloc(); + return self getplayerdata(var_01,param_00,"deathstreak"); +} + +//Function Number: 15 +cac_getoffhand(param_00) +{ + var_01 = cac_getcustomclassloc(); + return self getplayerdata(var_01,param_00,"perks",6); +} + +//Function Number: 16 +recipe_getkillstreak(param_00,param_01,param_02,param_03) +{ + var_04 = undefined; + switch(param_02) + { + case "streaktype_support": + var_04 = "defenseStreaks"; + break; + + case "streaktype_specialist": + var_04 = "specialistStreaks"; + break; + + default: + var_04 = "assaultStreaks"; + break; + } + + return getmatchrulesdata("defaultClasses",param_00,param_01,"class",var_04,param_03); +} + +//Function Number: 17 +table_getweapon(param_00,param_01,param_02) +{ + if(param_02 == 0) + { + return tablelookup(param_00,0,"loadoutPrimary",param_01 + 1); + } + + return tablelookup(param_00,0,"loadoutSecondary",param_01 + 1); +} + +//Function Number: 18 +table_getweaponattachment(param_00,param_01,param_02,param_03) +{ + var_04 = "none"; + if(param_02 == 0) + { + if(!isdefined(param_03) || param_03 == 0) + { + var_04 = tablelookup(param_00,0,"loadoutPrimaryAttachment",param_01 + 1); + } + else + { + var_04 = tablelookup(param_00,0,"loadoutPrimaryAttachment2",param_01 + 1); + } + } + else if(!isdefined(param_03) || param_03 == 0) + { + var_04 = tablelookup(param_00,0,"loadoutSecondaryAttachment",param_01 + 1); + } + else + { + var_04 = tablelookup(param_00,0,"loadoutSecondaryAttachment2",param_01 + 1); + } + + if(var_04 == "" || var_04 == "none") + { + return "none"; + } + + return var_04; +} + +//Function Number: 19 +table_getweaponbuff(param_00,param_01,param_02) +{ + if(param_02 == 0) + { + return tablelookup(param_00,0,"loadoutPrimaryBuff",param_01 + 1); + } + + return tablelookup(param_00,0,"loadoutSecondaryBuff",param_01 + 1); +} + +//Function Number: 20 +table_getweaponcamo(param_00,param_01,param_02) +{ + if(param_02 == 0) + { + return tablelookup(param_00,0,"loadoutPrimaryCamo",param_01 + 1); + } + + return tablelookup(param_00,0,"loadoutSecondaryCamo",param_01 + 1); +} + +//Function Number: 21 +table_getweaponreticle(param_00,param_01,param_02) +{ + return "none"; +} + +//Function Number: 22 +table_getequipment(param_00,param_01,param_02) +{ + return tablelookup(param_00,0,"loadoutEquipment",param_01 + 1); +} + +//Function Number: 23 +table_getperk(param_00,param_01,param_02) +{ + return tablelookup(param_00,0,"loadoutPerk" + param_02,param_01 + 1); +} + +//Function Number: 24 +table_getteamperk(param_00,param_01) +{ + return tablelookup(param_00,0,"loadoutTeamPerk",param_01 + 1); +} + +//Function Number: 25 +table_getoffhand(param_00,param_01) +{ + return tablelookup(param_00,0,"loadoutOffhand",param_01 + 1); +} + +//Function Number: 26 +table_getkillstreak(param_00,param_01,param_02) +{ + return tablelookup(param_00,0,"loadoutStreak" + param_02,param_01 + 1); +} + +//Function Number: 27 +table_getdeathstreak(param_00,param_01) +{ + return tablelookup(param_00,0,"loadoutDeathstreak",param_01 + 1); +} + +//Function Number: 28 +getclassindex(param_00) +{ + return level.classmap[param_00]; +} + +//Function Number: 29 +cloneloadout() +{ + var_00 = "none"; + var_01 = []; + var_02 = self.curclass; + if(var_02 == "copycat") + { + return undefined; + } + + if(issubstr(var_02,"axis")) + { + var_00 = "axis"; + } + else if(issubstr(var_02,"allies")) + { + var_00 = "allies"; + } + + if(var_00 != "none") + { + var_03 = getclassindex(var_02); + var_04 = "none"; + var_05 = "none"; + var_06 = getmatchrulesdata("defaultClasses",var_00,var_03,"class","weaponSetups",0,"weapon"); + var_07 = getmatchrulesdata("defaultClasses",var_00,var_03,"class","weaponSetups",0,"attachment",0); + var_04 = getmatchrulesdata("defaultClasses",var_00,var_03,"class","weaponSetups",0,"attachment",1); + var_08 = getmatchrulesdata("defaultClasses",var_00,var_03,"class","weaponSetups",0,"buff"); + var_09 = getmatchrulesdata("defaultClasses",var_00,var_03,"class","weaponSetups",0,"camo"); + var_0A = getmatchrulesdata("defaultClasses",var_00,var_03,"class","weaponSetups",0,"reticle"); + var_0B = getmatchrulesdata("defaultClasses",var_00,var_03,"class","weaponSetups",1,"weapon"); + var_0C = getmatchrulesdata("defaultClasses",var_00,var_03,"class","weaponSetups",1,"attachment",0); + var_05 = getmatchrulesdata("defaultClasses",var_00,var_03,"class","weaponSetups",1,"attachment",1); + var_0D = getmatchrulesdata("defaultClasses",var_00,var_03,"class","weaponSetups",1,"buff"); + var_0E = getmatchrulesdata("defaultClasses",var_00,var_03,"class","weaponSetups",1,"camo"); + var_0F = getmatchrulesdata("defaultClasses",var_00,var_03,"class","weaponSetups",1,"reticle"); + var_10 = getmatchrulesdata("defaultClasses",var_00,var_03,"class","perks",0); + var_11 = getmatchrulesdata("defaultClasses",var_00,var_03,"class","perks",1); + var_12 = getmatchrulesdata("defaultClasses",var_00,var_03,"class","perks",2); + var_13 = getmatchrulesdata("defaultClasses",var_00,var_03,"class","perks",3); + var_14 = getmatchrulesdata("defaultClasses",var_00,var_03,"class","perks",5); + var_15 = recipe_getkillstreak(var_00,var_03,var_14,0); + var_16 = recipe_getkillstreak(var_00,var_03,var_14,1); + var_17 = recipe_getkillstreak(var_00,var_03,var_14,2); + var_18 = getmatchrulesdata("defaultClasses",var_00,var_03,"class","perks",6); + var_19 = getmatchrulesdata("defaultClasses",var_00,var_03,"class","deathstreak"); + } + else if(issubstr(var_19,"custom")) + { + var_1A = getclassindex(var_19); + var_04 = "none"; + var_05 = "none"; + var_06 = cac_getweapon(var_1A,0); + var_07 = cac_getweaponattachment(var_1A,0); + var_04 = cac_getweaponattachmenttwo(var_1A,0); + var_08 = cac_getweaponbuff(var_1A,0); + var_09 = cac_getweaponcamo(var_1A,0); + var_0A = cac_getweaponreticle(var_1A,0); + var_0B = cac_getweapon(var_1A,1); + var_0C = cac_getweaponattachment(var_1A,1); + var_05 = cac_getweaponattachmenttwo(var_1A,1); + var_0D = cac_getweaponbuff(var_1A,1); + var_0E = cac_getweaponcamo(var_1A,1); + var_0F = cac_getweaponreticle(var_1A,1); + var_10 = cac_getperk(var_1A,0); + var_11 = cac_getperk(var_1A,1); + var_12 = cac_getperk(var_1A,2); + var_13 = cac_getperk(var_1A,3); + var_14 = cac_getperk(var_1A,5); + var_15 = cac_getkillstreak(var_1A,var_14,0); + var_16 = cac_getkillstreak(var_1A,var_14,1); + var_17 = cac_getkillstreak(var_1A,var_14,2); + var_18 = cac_getoffhand(var_1A); + var_19 = cac_getdeathstreak(var_1A); + } + else + { + var_1A = getclassindex(var_1A); + var_06 = table_getweapon(level.classtablename,var_1A,0); + var_07 = table_getweaponattachment(level.classtablename,var_1A,0,0); + var_04 = table_getweaponattachment(level.classtablename,var_1A,0,1); + var_08 = table_getweaponbuff(level.classtablename,var_1A,0); + var_09 = table_getweaponcamo(level.classtablename,var_1A,0); + var_0A = table_getweaponreticle(level.classtablename,var_1A,0); + var_0B = table_getweapon(level.classtablename,var_1A,1); + var_0C = table_getweaponattachment(level.classtablename,var_1A,1,0); + var_05 = table_getweaponattachment(level.classtablename,var_1A,1,1); + var_0D = table_getweaponbuff(level.classtablename,var_1A,1); + var_0E = table_getweaponcamo(level.classtablename,var_1A,1); + var_0F = table_getweaponreticle(level.classtablename,var_1A,1); + var_10 = table_getequipment(level.classtablename,var_1A,0); + var_11 = table_getperk(level.classtablename,var_1A,1); + var_12 = table_getperk(level.classtablename,var_1A,2); + var_13 = table_getperk(level.classtablename,var_1A,3); + var_14 = table_getperk(level.classtablename,var_1A,5); + var_18 = table_getoffhand(level.classtablename,var_1A); + var_19 = table_getdeathstreak(level.classtablename,var_1A); + switch(var_14) + { + case "streaktype_support": + var_1B = table_getkillstreak(level.classtablename,3,1); + var_1C = table_getkillstreak(level.classtablename,3,2); + var_1D = table_getkillstreak(level.classtablename,3,3); + break; + + case "streaktype_specialist": + var_1B = table_getkillstreak(level.classtablename,1,1); + var_1C = table_getkillstreak(level.classtablename,1,2); + var_1D = table_getkillstreak(level.classtablename,1,3); + break; + + default: + var_1B = table_getkillstreak(level.classtablename,0,1); + var_1C = table_getkillstreak(level.classtablename,0,2); + var_1D = table_getkillstreak(level.classtablename,0,3); + break; + } + + var_15 = var_1B; + var_16 = var_1C; + var_17 = var_1D; + } + + var_01["inUse"] = 0; + var_01["loadoutPrimary"] = var_06; + var_01["loadoutPrimaryAttachment"] = var_07; + var_01["loadoutPrimaryAttachment2"] = var_04; + var_01["loadoutPrimaryBuff"] = var_08; + var_01["loadoutPrimaryCamo"] = var_09; + var_01["loadoutPrimaryReticle"] = var_0A; + var_01["loadoutSecondary"] = var_0B; + var_01["loadoutSecondaryAttachment"] = var_0C; + var_01["loadoutSecondaryAttachment2"] = var_05; + var_01["loadoutSecondaryBuff"] = var_0D; + var_01["loadoutSecondaryCamo"] = var_0E; + var_01["loadoutSecondaryReticle"] = var_0F; + var_01["loadoutEquipment"] = var_10; + var_01["loadoutPerk1"] = var_11; + var_01["loadoutPerk2"] = var_12; + var_01["loadoutPerk3"] = var_13; + var_01["loadoutStreakType"] = var_14; + var_01["loadoutKillstreak1"] = var_15; + var_01["loadoutKillstreak2"] = var_16; + var_01["loadoutKillstreak3"] = var_17; + var_01["loadoutDeathstreak"] = var_19; + var_01["loadoutOffhand"] = var_18; + return var_01; +} + +//Function Number: 30 +loadoutfakeperks(param_00,param_01) +{ + switch(param_00) + { + case "streaktype_support": + self.streaktype = "support"; + break; + + case "streaktype_specialist": + self.streaktype = "specialist"; + break; + + default: + self.streaktype = "assault"; + break; + } +} + +//Function Number: 31 +getloadoutstreaktypefromstreaktype(param_00) +{ + if(!isdefined(param_00)) + { + return "streaktype_assault"; + } + + switch(param_00) + { + case "support": + return "streaktype_support"; + + case "specialist": + return "streaktype_specialist"; + + case "assault": + return "streaktype_assault"; + + default: + return "streaktype_assault"; + } +} + +//Function Number: 32 +giveloadout(param_00,param_01,param_02,param_03) +{ + self takeallweapons(); + self.changingweapon = undefined; + var_04 = "none"; + if(!isdefined(param_03)) + { + param_03 = 1; + } + + var_05 = 0; + self.specialty = []; + if(!isdefined(param_02)) + { + param_02 = 1; + } + + var_06 = undefined; + var_07 = 0; + var_08 = undefined; + var_09 = undefined; + var_0A = undefined; + if(issubstr(param_01,"axis")) + { + var_04 = "axis"; + } + else if(issubstr(param_01,"allies")) + { + var_04 = "allies"; + } + + var_0B = []; + if(isdefined(self.pers["copyCatLoadout"]) && self.pers["copyCatLoadout"]["inUse"] && param_02) + { + setclass("copycat"); + self.class_num = getclassindex("copycat"); + var_0B = self.pers["copyCatLoadout"]; + var_0C = var_0B["loadoutPrimary"]; + var_0D = var_0B["loadoutPrimaryAttachment"]; + var_0E = var_0B["loadoutPrimaryAttachment2"]; + var_0F = var_0B["loadoutPrimaryBuff"]; + var_10 = var_0B["loadoutPrimaryCamo"]; + var_11 = var_0B["loadoutPrimaryReticle"]; + var_12 = var_0B["loadoutSecondary"]; + var_13 = var_0B["loadoutSecondaryAttachment"]; + var_14 = var_0B["loadoutSecondaryAttachment2"]; + var_15 = var_0B["loadoutSecondaryBuff"]; + var_16 = var_0B["loadoutSecondaryCamo"]; + var_17 = var_0B["loadoutSecondaryReticle"]; + var_18 = var_0B["loadoutEquipment"]; + var_19 = var_0B["loadoutPerk1"]; + var_1A = var_0B["loadoutPerk2"]; + var_1B = var_0B["loadoutPerk3"]; + var_1C = var_0B["loadoutStreakType"]; + var_1D = var_0B["loadoutOffhand"]; + var_1E = var_0B["loadoutDeathstreak"]; + var_1F = var_0B["loadoutAmmoType"]; + } + else if(var_17 != "none") + { + var_20 = getclassindex(var_14); + var_0E = "none"; + var_14 = "none"; + var_0C = getmatchrulesdata("defaultClasses",var_04,var_20,"class","weaponSetups",0,"weapon"); + var_0D = getmatchrulesdata("defaultClasses",var_04,var_20,"class","weaponSetups",0,"attachment",0); + var_0E = getmatchrulesdata("defaultClasses",var_04,var_20,"class","weaponSetups",0,"attachment",1); + var_0F = getmatchrulesdata("defaultClasses",var_04,var_20,"class","weaponSetups",0,"buff"); + var_10 = getmatchrulesdata("defaultClasses",var_04,var_20,"class","weaponSetups",0,"camo"); + var_11 = getmatchrulesdata("defaultClasses",var_04,var_20,"class","weaponSetups",0,"reticle"); + var_12 = getmatchrulesdata("defaultClasses",var_04,var_20,"class","weaponSetups",1,"weapon"); + var_13 = getmatchrulesdata("defaultClasses",var_04,var_20,"class","weaponSetups",1,"attachment",0); + var_14 = getmatchrulesdata("defaultClasses",var_04,var_20,"class","weaponSetups",1,"attachment",1); + var_15 = getmatchrulesdata("defaultClasses",var_04,var_20,"class","weaponSetups",1,"buff"); + var_16 = getmatchrulesdata("defaultClasses",var_04,var_20,"class","weaponSetups",1,"camo"); + var_17 = getmatchrulesdata("defaultClasses",var_04,var_20,"class","weaponSetups",1,"reticle"); + if(var_0C == "throwingknife" && var_12 != "none") + { + var_0C = var_12; + var_0D = var_13; + var_0E = var_14; + var_0F = var_15; + var_10 = var_16; + var_11 = var_17; + var_12 = "none"; + var_13 = "none"; + var_14 = "none"; + var_15 = "specialty_null"; + var_16 = "none"; + var_17 = "none"; + } + else if(var_0C == "throwingknife" && var_12 == "none") + { + var_07 = 1; + var_0C = "iw5_usp45"; + var_0D = "tactical"; + } + + var_18 = getmatchrulesdata("defaultClasses",var_04,var_20,"class","perks",0); + var_19 = getmatchrulesdata("defaultClasses",var_04,var_20,"class","perks",1); + var_1A = getmatchrulesdata("defaultClasses",var_04,var_20,"class","perks",2); + var_1B = getmatchrulesdata("defaultClasses",var_04,var_20,"class","perks",3); + if(var_12 != "none" && !isvalidsecondary(var_12,var_1A,var_1B,0)) + { + var_12 = table_getweapon(level.classtablename,10,1); + } + + var_1C = getmatchrulesdata("defaultClasses",var_04,var_20,"class","perks",5); + var_08 = recipe_getkillstreak(var_04,var_20,var_1C,0); + var_09 = recipe_getkillstreak(var_04,var_20,var_1C,1); + var_0A = recipe_getkillstreak(var_04,var_20,var_1C,2); + var_1D = getmatchrulesdata("defaultClasses",var_04,var_20,"class","perks",6); + if(var_1D == "specialty_null") + { + var_1D = "none"; + } + + var_1E = getmatchrulesdata("defaultClasses",var_04,var_20,"class","deathstreak"); + if(getmatchrulesdata("defaultClasses",var_04,var_20,"juggernaut")) + { + self.isjuggernaut = 1; + thread maps\mp\_utility::recipeclassapplyjuggernaut(); + } + } + else if(issubstr(var_14,"custom")) + { + var_21 = getclassindex(var_14); + self.class_num = var_21; + var_0C = cac_getweapon(var_21,0); + var_0D = cac_getweaponattachment(var_21,0); + var_0E = cac_getweaponattachmenttwo(var_21,0); + var_0F = cac_getweaponbuff(var_21,0); + var_10 = cac_getweaponcamo(var_21,0); + var_11 = cac_getweaponreticle(var_21,0); + var_12 = cac_getweapon(var_21,1); + var_13 = cac_getweaponattachment(var_21,1); + var_14 = cac_getweaponattachmenttwo(var_21,1); + var_15 = cac_getweaponbuff(var_21,1); + var_16 = cac_getweaponcamo(var_21,1); + var_17 = cac_getweaponreticle(var_21,1); + var_18 = cac_getperk(var_21,0); + var_19 = cac_getperk(var_21,1); + var_1A = cac_getperk(var_21,2); + var_1B = cac_getperk(var_21,3); + var_1C = cac_getperk(var_21,5); + var_1D = cac_getoffhand(var_21); + var_1E = cac_getdeathstreak(var_21); + } + else if(var_14 == "gamemode") + { + var_22 = self.pers["gamemodeLoadout"]; + var_0C = var_22["loadoutPrimary"]; + var_0D = var_22["loadoutPrimaryAttachment"]; + var_0E = var_22["loadoutPrimaryAttachment2"]; + var_0F = var_22["loadoutPrimaryBuff"]; + var_10 = var_22["loadoutPrimaryCamo"]; + var_11 = var_22["loadoutPrimaryReticle"]; + var_12 = var_22["loadoutSecondary"]; + var_13 = var_22["loadoutSecondaryAttachment"]; + var_14 = var_22["loadoutSecondaryAttachment2"]; + var_15 = var_22["loadoutSecondaryBuff"]; + var_16 = var_22["loadoutSecondaryCamo"]; + var_17 = var_22["loadoutSecondaryReticle"]; + if(var_0C == "throwingknife" && var_12 != "none") + { + var_0C = var_12; + var_0D = var_13; + var_0E = var_14; + var_0F = var_15; + var_10 = var_16; + var_11 = var_17; + var_12 = "none"; + var_13 = "none"; + var_14 = "none"; + var_15 = "specialty_null"; + var_16 = "none"; + var_17 = "none"; + } + else if(var_0C == "throwingknife" && var_12 == "none") + { + var_07 = 1; + var_0C = "iw5_usp45"; + var_0D = "tactical"; + } + + var_18 = var_22["loadoutEquipment"]; + var_1D = var_22["loadoutOffhand"]; + if(var_1D == "specialty_null") + { + var_1D = "none"; + } + + var_19 = var_22["loadoutPerk1"]; + var_1A = var_22["loadoutPerk2"]; + var_1B = var_22["loadoutPerk3"]; + if(var_12 != "none" && !isvalidsecondary(var_12,var_1A,var_1B,0)) + { + var_12 = table_getweapon(level.classtablename,10,1); + } + + if(level.killstreakrewards && isdefined(var_22["loadoutStreakType"]) && var_22["loadoutStreakType"] != "specialty_null") + { + var_1C = var_22["loadoutStreakType"]; + var_08 = var_22["loadoutKillstreak1"]; + var_09 = var_22["loadoutKillstreak2"]; + var_0A = var_22["loadoutKillstreak3"]; + } + else if(level.killstreakrewards && isdefined(self.streaktype)) + { + var_1C = getloadoutstreaktypefromstreaktype(self.streaktype); + } + else + { + var_1C = "streaktype_assault"; + var_08 = "none"; + var_09 = "none"; + var_0A = "none"; + } + + var_1E = var_22["loadoutDeathstreak"]; + if(!maps\mp\_utility::isjuggernaut() && var_22["loadoutJuggernaut"]) + { + self.isjuggernaut = 1; + thread maps\mp\_utility::recipeclassapplyjuggernaut(); + } + } + else if(var_14 == "juggernaut") + { + var_0C = "iw5_m60jugg"; + var_0D = "none"; + var_0E = "none"; + var_0F = "specialty_null"; + var_10 = "none"; + var_11 = "none"; + var_12 = "iw5_mp412jugg"; + var_13 = "none"; + var_14 = "none"; + var_15 = "specialty_null"; + var_16 = "none"; + var_17 = "none"; + var_18 = "frag_grenade_mp"; + var_19 = "specialty_scavenger"; + var_1A = "specialty_quickdraw"; + var_1B = "specialty_detectexplosive"; + var_1C = getloadoutstreaktypefromstreaktype(self.streaktype); + var_1D = "smoke_grenade_mp"; + var_1E = "specialty_null"; + } + else if(var_14 == "juggernaut_recon") + { + var_0C = "iw5_riotshieldjugg"; + var_0D = "none"; + var_0E = "none"; + var_0F = "specialty_null"; + var_10 = "none"; + var_11 = "none"; + var_12 = "iw5_usp45jugg"; + var_13 = "none"; + var_14 = "none"; + var_15 = "specialty_null"; + var_16 = "none"; + var_17 = "none"; + var_18 = "specialty_portable_radar"; + var_19 = "specialty_scavenger"; + var_1A = "specialty_coldblooded"; + var_1B = "specialty_detectexplosive"; + var_1C = getloadoutstreaktypefromstreaktype(self.streaktype); + var_1D = "smoke_grenade_mp"; + var_1E = "specialty_null"; + } + else + { + var_21 = getclassindex(var_14); + self.class_num = var_21; + var_0C = table_getweapon(level.classtablename,var_21,0); + var_0D = table_getweaponattachment(level.classtablename,var_21,0,0); + var_0E = table_getweaponattachment(level.classtablename,var_21,0,1); + var_0F = table_getweaponbuff(level.classtablename,var_21,0); + var_10 = table_getweaponcamo(level.classtablename,var_21,0); + var_11 = table_getweaponreticle(level.classtablename,var_21,0); + var_12 = table_getweapon(level.classtablename,var_21,1); + var_13 = table_getweaponattachment(level.classtablename,var_21,1,0); + var_14 = table_getweaponattachment(level.classtablename,var_21,1,1); + var_15 = table_getweaponbuff(level.classtablename,var_21,1); + var_16 = table_getweaponcamo(level.classtablename,var_21,1); + var_17 = table_getweaponreticle(level.classtablename,var_21,1); + var_18 = table_getequipment(level.classtablename,var_21,0); + var_19 = table_getperk(level.classtablename,var_21,1); + var_1A = table_getperk(level.classtablename,var_21,2); + var_1B = table_getperk(level.classtablename,var_21,3); + var_1C = table_getperk(level.classtablename,var_21,5); + var_1D = table_getoffhand(level.classtablename,var_21); + var_1E = table_getdeathstreak(level.classtablename,var_21); + } + + loadoutfakeperks(var_1C); + var_23 = issubstr(param_01,"custom"); + var_24 = issubstr(param_01,"recipe"); + var_25 = param_01 == "gamemode"; + if(!var_25 && !var_24 && !isdefined(self.pers["copyCatLoadout"]) && self.pers["copyCatLoadout"]["inUse"] && param_02) + { + if(!isvalidprimary(var_0C) || level.rankedmatch && var_23 && !self isitemunlocked(var_0C)) + { + var_0C = table_getweapon(level.classtablename,10,0); + } + + if(!isvalidattachment(var_0D) || level.rankedmatch && var_23 && !isattachmentunlocked(var_0C,var_0D)) + { + var_0D = table_getweaponattachment(level.classtablename,10,0,0); + } + + if(!isvalidattachment(var_0E) || level.rankedmatch && var_23 && !isattachmentunlocked(var_0C,var_0E)) + { + var_0E = table_getweaponattachment(level.classtablename,10,0,1); + } + + if(!isvalidweaponbuff(var_0F) || level.rankedmatch && var_23 && !isweaponbuffunlocked(var_0C,var_0F)) + { + var_0F = table_getweaponbuff(level.classtablename,10,0); + } + + if(!isvalidcamo(var_10) || level.rankedmatch && var_23 && !iscamounlocked(var_0C,var_10)) + { + var_10 = table_getweaponcamo(level.classtablename,10,0); + } + + if(!isvalidreticle(var_11)) + { + var_11 = table_getweaponreticle(level.classtablenum,10,0); + } + + if(!isvalidsecondary(var_12,var_1A,var_1B) || level.rankedmatch && level.rankedmatch && var_23 && !self isitemunlocked(var_12)) + { + var_12 = table_getweapon(level.classtablename,10,1); + } + + if(!isvalidattachment(var_13) || level.rankedmatch && var_23 && !isattachmentunlocked(var_12,var_13)) + { + var_13 = table_getweaponattachment(level.classtablename,10,1,0); + } + + if(!isvalidattachment(var_14) || level.rankedmatch && var_23 && !isattachmentunlocked(var_12,var_14)) + { + var_14 = table_getweaponattachment(level.classtablename,10,1,1); + } + + if((var_1A == "specialty_twoprimaries" && !isvalidweaponbuff(var_15)) || level.rankedmatch && var_23 && !self isitemunlocked(var_12 + " " + var_15)) + { + var_15 = table_getweaponbuff(level.classtablename,10,1); + } + + if(!isvalidcamo(var_16) || level.rankedmatch && var_23 && !iscamounlocked(var_12,var_16)) + { + var_16 = table_getweaponcamo(level.classtablename,10,1); + } + + if(!isvalidreticle(var_17)) + { + var_17 = table_getweaponreticle(level.classtablename,10,1); + } + + if(!isvalidequipment(var_18) || level.rankedmatch && var_23 && !self isitemunlocked(var_18)) + { + var_18 = table_getequipment(level.classtablename,10,0); + } + + if(!isvalidperk1(var_19) || level.rankedmatch && var_23 && !self isitemunlocked(var_19)) + { + var_19 = table_getperk(level.classtablename,10,1); + } + + if(!isvalidperk2(var_1A,var_19) || level.rankedmatch && var_23 && !self isitemunlocked(var_1A)) + { + var_1A = table_getperk(level.classtablename,10,2); + } + + if(!isvalidperk3(var_1B,var_19) || level.rankedmatch && var_23 && !self isitemunlocked(var_1B)) + { + var_1B = table_getperk(level.classtablename,10,3); + } + + if(!isvaliddeathstreak(var_1E) || level.rankedmatch && var_23 && !self isitemunlocked(var_1E)) + { + var_1E = table_getdeathstreak(level.classtablename,10); + } + + if(!isvalidoffhand(var_1D)) + { + var_1D = table_getoffhand(level.classtablename,10); + } + } + + self.loadoutprimary = var_0C; + self.loadoutprimarycamo = int(tablelookup("mp/camoTable.csv",1,var_10,0)); + self.loadoutsecondary = var_12; + self.loadoutsecondarycamo = int(tablelookup("mp/camoTable.csv",1,var_16,0)); + if(!issubstr(var_0C,"iw5")) + { + self.loadoutprimarycamo = 0; + } + + if(!issubstr(var_12,"iw5")) + { + self.loadoutsecondarycamo = 0; + } + + self.loadoutprimaryreticle = int(tablelookup("mp/reticleTable.csv",1,var_11,0)); + self.loadoutsecondaryreticle = int(tablelookup("mp/reticleTable.csv",1,var_17,0)); + if(!issubstr(var_0C,"iw5")) + { + self.loadoutprimaryreticle = 0; + } + + if(!issubstr(var_12,"iw5")) + { + self.loadoutsecondaryreticle = 0; + } + + if(var_12 == "none") + { + var_26 = "none"; + } + else + { + var_26 = buildweaponname(var_13,var_14,var_15,self.loadoutsecondarycamo,self.loadoutsecondaryreticle); + maps\mp\_utility::_giveweapon(var_26); + var_27 = strtok(var_26,"_"); + if(var_27[0] == "iw5") + { + } + else if(var_7B[0] == "alt") + { + } + + var_28 = var_7B[0]; + var_29 = maps\mp\gametypes\_rank::getweaponrank(var_28); + var_2A = self getplayerdata("weaponRank",var_28); + if(var_29 != var_2A) + { + self setplayerdata("weaponRank",var_28,var_29); + } + } + + self setoffhandprimaryclass("other"); + maps\mp\_utility::_setactionslot(1,""); + maps\mp\_utility::_setactionslot(3,"altMode"); + maps\mp\_utility::_setactionslot(4,""); + maps\mp\_utility::_clearperks(); + _detachall(); + if(level.diehardmode) + { + maps\mp\_utility::giveperk("specialty_pistoldeath",0); + } + + loadoutallperks(var_19,var_1A,var_1B,var_1C,var_10,var_16); + if(maps\mp\_utility::_hasperk("specialty_extraammo") && var_27 != "none" && maps\mp\_utility::getweaponclass(var_27) != "weapon_projectile") + { + self givemaxammo(var_27); + } + + self.spawnperk = 0; + if(!maps\mp\_utility::_hasperk("specialty_blindeye") && self.avoidkillstreakonspawntimer > 0) + { + thread maps\mp\perks\_perks::giveblindeyeafterspawn(); + } + + if(self.pers["cur_death_streak"] > 0) + { + var_2B = []; + if(var_23 != "specialty_null") + { + } + + if(getperkupgrade(var_1B) == "specialty_rollover" || getperkupgrade(var_1C) == "specialty_rollover" || getperkupgrade(var_1D) == "specialty_rollover") + { + foreach(var_2E, var_2D in var_7B) + { + var_7B[var_2E] = var_7B[var_2E] - 1; + } + } + + foreach(var_2E, var_2D in var_7B) + { + if(self.pers["cur_death_streak"] >= var_2D) + { + if(var_2E == "specialty_carepackage" && self.pers["cur_death_streak"] > var_2D) + { + continue; + } + + if(var_2E == "specialty_uav" && self.pers["cur_death_streak"] > var_2D) + { + continue; + } + + thread maps\mp\_utility::giveperk(var_2E,1); + thread maps\mp\gametypes\_hud_message::splashnotify(var_2E); + } + } + } + + if(level.killstreakrewards && !isdefined(var_0A) && !isdefined(var_0B) && !isdefined(var_0C)) + { + if(isdefined(self.pers["copyCatLoadout"]) && self.pers["copyCatLoadout"]["inUse"] && var_04) + { + var_0A = var_0D["loadoutKillstreak1"]; + var_0B = var_0D["loadoutKillstreak2"]; + var_0C = var_0D["loadoutKillstreak3"]; + } + else + { + var_30 = undefined; + var_31 = undefined; + var_32 = undefined; + var_33 = undefined; + switch(self.streaktype) + { + case "support": + var_30 = table_getkillstreak(level.classtablename,2,1); + var_31 = table_getkillstreak(level.classtablename,2,2); + var_32 = table_getkillstreak(level.classtablename,2,3); + var_33 = "defenseStreaks"; + break; + + case "specialist": + var_30 = table_getkillstreak(level.classtablename,1,1); + var_31 = table_getkillstreak(level.classtablename,1,2); + var_32 = table_getkillstreak(level.classtablename,1,3); + var_33 = "specialistStreaks"; + break; + + default: + var_30 = table_getkillstreak(level.classtablename,0,1); + var_31 = table_getkillstreak(level.classtablename,0,2); + var_32 = table_getkillstreak(level.classtablename,0,3); + var_33 = "assaultStreaks"; + break; + } + + var_0A = undefined; + var_0B = undefined; + var_0C = undefined; + if(issubstr(param_03,"custom")) + { + var_34 = cac_getcustomclassloc(); + var_0A = self getplayerdata(var_34,self.class_num,var_33,0); + var_0B = self getplayerdata(var_34,self.class_num,var_33,1); + var_0C = self getplayerdata(var_34,self.class_num,var_33,2); + } + + if(issubstr(param_03,"juggernaut") || var_27) + { + foreach(var_36 in self.killstreaks) + { + if(!isdefined(var_0A)) + { + var_0A = var_36; + continue; + } + + if(!isdefined(var_0B)) + { + var_0B = var_36; + continue; + } + + if(!isdefined(var_0C)) + { + var_0C = var_36; + } + } + + if(var_27 && self.streaktype == "specialist") + { + self.pers["gamemodeLoadout"]["loadoutKillstreak1"] = var_0A; + self.pers["gamemodeLoadout"]["loadoutKillstreak2"] = var_0B; + self.pers["gamemodeLoadout"]["loadoutKillstreak3"] = var_0C; + } + } + + if(!issubstr(param_03,"custom") && !issubstr(param_03,"juggernaut") && !var_27) + { + var_0A = var_30; + var_0B = var_31; + var_0C = var_32; + } + + if(!isdefined(var_0A)) + { + var_0A = "none"; + } + + if(!isdefined(var_0B)) + { + var_0B = "none"; + } + + if(!isdefined(var_0C)) + { + var_0C = "none"; + } + + if(!isvalidkillstreak(var_0A) || var_25 && !self isitemunlocked(var_0A)) + { + var_0A = table_getkillstreak(level.classtablename,0,1); + } + + if(!isvalidkillstreak(var_0B) || var_25 && !self isitemunlocked(var_0B)) + { + var_0B = table_getkillstreak(level.classtablename,0,2); + } + + if(!isvalidkillstreak(var_0C) || var_25 && !self isitemunlocked(var_0C)) + { + var_0C = table_getkillstreak(level.classtablename,0,3); + } + } + } + else if(!level.killstreakrewards) + { + var_0A = "none"; + var_0B = "none"; + var_0C = "none"; + } + + setkillstreaks(var_0A,var_0B,var_0C); + if(isdefined(self.lastclass) && self.lastclass != self.class && !issubstr(self.class,"juggernaut") && !issubstr(self.lastclass,"juggernaut") && !issubstr(param_03,"juggernaut")) + { + if(maps\mp\_utility::wasonlyround() || self.lastclass != "") + { + var_38 = []; + var_39 = 0; + if(self.pers["killstreaks"].size > 5) + { + var_3A = 5; + while(var_3A < self.pers["killstreaks"].size) + { + var_38[var_39] = self.pers["killstreaks"][var_3A].streakname; + var_39++ = var_7B[var_23]; + var_3A++ = int(tablelookup("mp/perkTable.csv",1,var_23,6)); + } + } + + if(self.pers["killstreaks"].size) + { + for(var_3A = 1;var_3A < 4;var_3A++ = var_7B[1] + "_" + var_7B[2]) + { + if(isdefined(self.pers["killstreaks"][var_3A]) && isdefined(self.pers["killstreaks"][var_3A].streakname) && self.pers["killstreaks"][var_3A].available && !self.pers["killstreaks"][var_3A].isspecialist) + { + var_38[var_39] = self.pers["killstreaks"][var_3A].streakname; + var_39++ = var_7B[0]; + } + } + } + + maps\mp\killstreaks\_killstreaks::clearkillstreaks(); + for(var_3A = 0;var_3A < var_38.size;var_3A++ = var_7B[0]) + { + maps\mp\killstreaks\_killstreaks::givekillstreak(var_38[var_3A]); + } + } + } + + if(!issubstr(param_03,"juggernaut")) + { + if(isdefined(self.lastclass) && self.lastclass != "" && self.lastclass != self.class) + { + maps\mp\_utility::incplayerstat("mostclasseschanged",1); + } + + self.pers["lastClass"] = self.class; + self.lastclass = self.class; + } + + if(isdefined(self.gamemode_chosenclass)) + { + self.pers["class"] = self.gamemode_chosenclass; + self.pers["lastClass"] = self.gamemode_chosenclass; + self.class = self.gamemode_chosenclass; + self.lastclass = self.gamemode_chosenclass; + self.gamemode_chosenclass = undefined; + } + + var_3B = buildweaponname(var_0E,var_0F,var_10,self.loadoutprimarycamo,self.loadoutprimaryreticle); + maps\mp\_utility::_giveweapon(var_3B); + self switchtoweapon(var_3B); + var_27 = strtok(var_3B,"_"); + if(var_3B[0] == "iw5") + { + var_28 = var_3B[0] + "_" + var_3B[1]; + } + else if(var_28[0] == "alt") + { + var_28 = var_28[1] + "_" + var_28[2]; + } + else + { + var_28 = var_28[0]; + } + + var_29 = maps\mp\gametypes\_rank::getweaponrank(var_28); + var_2A = self getplayerdata("weaponRank",var_28); + if(var_29 != var_2A) + { + self setplayerdata("weaponRank",var_28,var_29); + } + + if(var_2B == "riotshield_mp" && level.ingraceperiod) + { + self notify("weapon_change","riotshield_mp",var_27[0] + "_" + var_27[1]); + } + + if(maps\mp\_utility::_hasperk("specialty_extraammo")) + { + self givemaxammo(var_2B); + } + + if(var_04) + { + self setspawnweapon(var_2B); + } + + self.pers["primaryWeapon"] = var_28; + var_3C = strtok(var_2B,"_"); + var_3D = var_1E; + if(var_1E == "none") + { + self setoffhandsecondaryclass("none"); + } + else if(var_1E == "flash_grenade_mp") + { + self setoffhandsecondaryclass("flash"); + } + else if(var_1E == "smoke_grenade_mp" || var_1E == "concussion_grenade_mp") + { + self setoffhandsecondaryclass("smoke"); + } + else + { + self setoffhandsecondaryclass("flash"); + } + + switch(var_3D) + { + case "none": + break; + + case "specialty_tacticalinsertion": + case "specialty_scrambler": + case "specialty_portable_radar": + case "trophy_mp": + maps\mp\_utility::giveperk(var_3D,0); + break; + + default: + self giveweapon(var_3D); + if(var_1E == "flash_grenade_mp") + { + self setweaponammoclip(var_3D,2); + } + else if(var_1E == "concussion_grenade_mp") + { + self setweaponammoclip(var_3D,2); + } + else + { + self setweaponammoclip(var_3D,1); + } + break; + } + + var_07 = var_2B; + self.primaryweapon = var_07; + self.secondaryweapon = var_27; + if(var_08) + { + self setweaponammoclip(self.primaryweapon,0); + self setweaponammostock(self.primaryweapon,0); + } + + maps\mp\gametypes\_teams::playermodelforweapon(self.pers["primaryWeapon"],maps\mp\_utility::getbaseweaponname(var_27)); + self.issniper = weaponclass(self.primaryweapon) == "sniper"; + maps\mp\gametypes\_weapons::updatemovespeedscale(); + maps\mp\perks\_perks::cac_selector(); + self notify("changed_kit"); + self notify("giveLoadout"); +} + +//Function Number: 33 +_detachall() +{ + if(isdefined(self.hasriotshield) && self.hasriotshield) + { + if(self.hasriotshieldequipped && !isdefined(self.hasriotshieldhidden) || self.hasriotshieldhidden == 0) + { + self detachshieldmodel("weapon_riot_shield_mp","tag_weapon_left"); + self.hasriotshieldequipped = 0; + } + else + { + self detachshieldmodel("weapon_riot_shield_mp","tag_shield_back"); + } + + self.hasriotshield = 0; + } + + self detachall(); +} + +//Function Number: 34 +isperkupgraded(param_00) +{ + var_01 = tablelookup("mp/perktable.csv",1,param_00,8); + if(var_01 == "" || var_01 == "specialty_null") + { + return 0; + } + + if(!self isitemunlocked(var_01)) + { + return 0; + } + + return 1; +} + +//Function Number: 35 +getperkupgrade(param_00) +{ + var_01 = tablelookup("mp/perktable.csv",1,param_00,8); + if(var_01 == "" || var_01 == "specialty_null") + { + return "specialty_null"; + } + + if(!self isitemunlocked(var_01)) + { + return "specialty_null"; + } + + return var_01; +} + +//Function Number: 36 +loadoutallperks(param_00,param_01,param_02,param_03,param_04,param_05) +{ + param_00 = maps\mp\perks\_perks::validateperk(1,param_00); + param_01 = maps\mp\perks\_perks::validateperk(1,param_01); + param_02 = maps\mp\perks\_perks::validateperk(2,param_02); + param_03 = maps\mp\perks\_perks::validateperk(3,param_03); + param_04 = maps\mp\perks\_perks::validateperk(undefined,param_04); + if(param_02 == "specialty_twoprimaries") + { + param_05 = maps\mp\perks\_perks::validateperk(undefined,param_05); + } + + self.loadoutperk1 = param_01; + self.loadoutperk2 = param_02; + self.loadoutperk3 = param_03; + self.loadoutperkequipment = param_00; + self.loadoutprimarybuff = param_04; + if(param_02 == "specialty_twoprimaries") + { + self.loadoutsecondarybuff = param_05; + } + + if(param_00 != "specialty_null") + { + maps\mp\_utility::giveperk(param_00,1); + } + + if(param_01 != "specialty_null") + { + maps\mp\_utility::giveperk(param_01,1); + } + + if(param_02 != "specialty_null") + { + maps\mp\_utility::giveperk(param_02,1); + } + + if(param_03 != "specialty_null") + { + maps\mp\_utility::giveperk(param_03,1); + } + + if(param_04 != "specialty_null") + { + maps\mp\_utility::giveperk(param_04,1); + } + + var_06[0] = tablelookup("mp/perktable.csv",1,param_01,8); + foreach(var_08 in var_7B) + { + if(var_08 == "" || var_08 == "specialty_null") + { + continue; + } + + if(self isitemunlocked(var_08) || !maps\mp\_utility::rankingenabled()) + { + maps\mp\_utility::giveperk(var_08,1); + } + } + + if(!maps\mp\_utility::_hasperk("specialty_assists")) + { + self.pers["assistsToKill"] = 0; + } +} + +//Function Number: 37 +watchoffhanduse() +{ + self endon("death"); + self endon("disconnect"); + self endon("faux_spawn"); + for(;;) + { + self waittill("grenade_pullback",var_00); + if(self.hasriotshieldequipped) + { + self detachshieldmodel("weapon_riot_shield_mp","tag_weapon_left"); + self.hasriotshieldhidden = 1; + } + else + { + continue; + } + + self waittill("offhand_end",var_00); + if(self.hasriotshieldequipped) + { + self attachshieldmodel("weapon_riot_shield_mp","tag_weapon_left"); + self.hasriotshieldhidden = 0; + } + } +} + +//Function Number: 38 +trackriotshield() +{ + self endon("death"); + self endon("disconnect"); + self endon("faux_spawn"); + self.hasriotshield = self hasweapon("riotshield_mp"); + self.hasriotshieldequipped = self.currentweaponatspawn == "riotshield_mp"; + thread watchoffhanduse(); + if(self.hasriotshield) + { + if(self.primaryweapon == "riotshield_mp" && self.secondaryweapon == "riotshield_mp") + { + self attachshieldmodel("weapon_riot_shield_mp","tag_weapon_left"); + self attachshieldmodel("weapon_riot_shield_mp","tag_shield_back"); + } + else if(self.hasriotshieldequipped) + { + self attachshieldmodel("weapon_riot_shield_mp","tag_weapon_left"); + } + else + { + self attachshieldmodel("weapon_riot_shield_mp","tag_shield_back"); + } + } + + for(;;) + { + self waittill("weapon_change",var_00); + if(var_00 == "riotshield_mp" || var_00 == "iw5_riotshieldjugg_mp") + { + if(self.hasriotshieldequipped) + { + continue; + } + + if(self.primaryweapon == var_00 && self.secondaryweapon == var_00) + { + continue; + } + else if(self.hasriotshield) + { + self moveshieldmodel("weapon_riot_shield_mp","tag_shield_back","tag_weapon_left"); + } + else + { + self attachshieldmodel("weapon_riot_shield_mp","tag_weapon_left"); + } + + self.hasriotshield = 1; + self.hasriotshieldequipped = 1; + continue; + } + + if(self ismantling() && var_00 == "none") + { + continue; + } + + if(self.hasriotshieldequipped) + { + self.hasriotshield = self hasweapon("riotshield_mp") || self hasweapon("iw5_riotshieldjugg_mp"); + if(self.hasriotshield) + { + self moveshieldmodel("weapon_riot_shield_mp","tag_weapon_left","tag_shield_back"); + } + else + { + self detachshieldmodel("weapon_riot_shield_mp","tag_weapon_left"); + } + + self.hasriotshieldequipped = 0; + continue; + } + + if(self.hasriotshield) + { + if(!self hasweapon("riotshield_mp") && !self hasweapon("iw5_riotshieldjugg_mp")) + { + self detachshieldmodel("weapon_riot_shield_mp","tag_shield_back"); + self.hasriotshield = 0; + } + } + } +} + +//Function Number: 39 +tryattach(param_00) +{ + if(!isdefined(param_00) || param_00 != "back") + { + var_01 = "tag_weapon_left"; + } + else + { + var_01 = "tag_shield_back"; + } + + var_02 = self getattachsize(); + for(var_03 = 0;var_03 < var_02;var_03++) + { + var_04 = self getattachtagname(var_03); + if(var_04 == var_01 && self getattachmodelname(var_03) == "weapon_riot_shield_mp") + { + return; + } + } + + self attachshieldmodel("weapon_riot_shield_mp",var_01); +} + +//Function Number: 40 +trydetach(param_00) +{ + if(!isdefined(param_00) || param_00 != "back") + { + var_01 = "tag_weapon_left"; + } + else + { + var_01 = "tag_shield_back"; + } + + var_02 = self getattachsize(); + for(var_03 = 0;var_03 < var_02;var_03++) + { + var_04 = self getattachmodelname(var_03); + if(var_04 == "weapon_riot_shield_mp") + { + self detachshieldmodel(var_04,var_01); + return; + } + } +} + +//Function Number: 41 +buildweaponname(param_00,param_01,param_02,param_03,param_04) +{ + if(!isdefined(level.var_3793)) + { + level.var_3793 = makeletterstonumbers(); + } + + if(getdvarint("scr_game_perks") == 0) + { + param_02 = "none"; + } + + if(isdefined(param_04) && param_04 != 0 && maps\mp\_utility::getattachmenttype(param_01) != "rail" && maps\mp\_utility::getattachmenttype(param_02) != "rail") + { + param_04 = undefined; + } + + if(maps\mp\_utility::getattachmenttype(param_01) == "rail") + { + param_01 = maps\mp\_utility::attachmentmap(param_01,param_00); + } + else if(maps\mp\_utility::getattachmenttype(param_02) == "rail") + { + param_02 = maps\mp\_utility::attachmentmap(param_02,param_00); + } + + var_05 = ""; + if(issubstr(param_00,"iw5_")) + { + var_06 = param_00 + "_mp"; + var_07 = param_00.size; + var_05 = getsubstr(param_00,4,var_07); + } + else + { + var_06 = param_01; + } + + var_08 = []; + if(param_01 != "none" && param_02 != "none") + { + if(level.var_3793[param_01[0]] < level.var_3793[param_02[0]]) + { + } + else if(level.var_3793[param_02[0]] == level.var_3793[param_03[0]]) + { + if(level.var_3793[param_02[1]] < level.var_3793[param_03[1]]) + { + } + else + { + } + } + else + { + } + + if(maps\mp\_utility::getweaponclass(param_01) == "weapon_sniper" && maps\mp\_utility::getattachmenttype(param_02) != "rail" && maps\mp\_utility::getattachmenttype(param_03) != "rail") + { + if(param_02 != "zoomscope" && param_03 != "zoomscope") + { + } + } + } + else if(param_02 != "none") + { + if(maps\mp\_utility::getweaponclass(param_01) == "weapon_sniper" && maps\mp\_utility::getattachmenttype(param_02) != "rail" && param_02 != "zoomscope") + { + } + } + else if(param_03 != "none") + { + if(maps\mp\_utility::getweaponclass(param_01) == "weapon_sniper" && maps\mp\_utility::getattachmenttype(param_03) != "rail" && param_03 != "zoomscope") + { + } + } + else if(maps\mp\_utility::getweaponclass(param_01) == "weapon_sniper") + { + } + + if(isdefined(var_7B[0]) && var_7B[0] == "vzscope") + { + } + else if(isdefined(var_7B[1]) && var_7B[1] == "vzscope") + { + } + else if(isdefined(var_7B[2]) && var_7B[2] == "vzscope") + { + } + + if(isdefined(var_7B.size) && var_7B.size) + { + for(var_09 = 0;var_09 < var_7B.size;var_09++ = var_7B[2]) + { + if(isdefined(var_7B[var_09 + 1]) && common_scripts\utility::is_later_in_alphabet(var_7B[var_09],var_7B[var_09 + 1])) + { + var_0A = var_7B[var_09]; + var_7B[var_09] = var_7B[var_09 + 1]; + var_7B[var_09 + 1] = var_0A; + var_09 = 0; + continue; + } + } + } + + foreach(var_0C in var_7B) + { + var_08 = var_08 + "_" + var_0C; + } + + if(issubstr(var_08,"iw5_")) + { + var_08 = buildweaponnamecamo(var_08,param_04); + var_08 = buildweaponnamereticle(var_08,var_05); + return var_08; + } + + if(!isvalidweapon(var_08 + "_mp")) + { + return param_01 + "_mp"; + } + + var_08 = buildweaponnamecamo(var_08,param_04); + var_08 = buildweaponnamereticle(var_08,var_05); + return var_08 + "_mp"; +} + +//Function Number: 42 +buildweaponnamecamo(param_00,param_01) +{ + if(!isdefined(param_01)) + { + return param_00; + } + + if(param_01 <= 0) + { + return param_00; + } + + if(param_01 < 10) + { + param_00 = param_00 + "_camo0"; + } + else + { + param_00 = param_00 + "_camo"; + } + + param_00 = param_00 + param_01; + return param_00; +} + +//Function Number: 43 +buildweaponnamereticle(param_00,param_01) +{ + if(!isdefined(param_01)) + { + return param_00; + } + + if(param_01 <= 0) + { + return param_00; + } + + param_00 = param_00 + "_scope"; + param_00 = param_00 + param_01; + return param_00; +} + +//Function Number: 44 +makeletterstonumbers() +{ + var_00 = []; + return var_7B; +} + +//Function Number: 45 +setkillstreaks(param_00,param_01,param_02) +{ + self.killstreaks = []; + var_03 = []; + if(isdefined(param_00) && param_00 != "none") + { + var_04 = maps\mp\killstreaks\_killstreaks::getstreakcost(param_00); + var_03[var_04] = param_00; + } + + if(isdefined(param_01) && param_01 != "none") + { + var_04 = maps\mp\killstreaks\_killstreaks::getstreakcost(param_01); + var_03[var_04] = param_01; + } + + if(isdefined(param_02) && param_02 != "none") + { + var_04 = maps\mp\killstreaks\_killstreaks::getstreakcost(param_02); + var_03[var_04] = param_02; + } + + var_05 = 0; + foreach(var_04, var_07 in var_03) + { + if(var_04 > var_05) + { + var_05 = var_04; + } + } + + for(var_08 = 0;var_08 <= var_05;var_08++) + { + if(!isdefined(var_03[var_08])) + { + continue; + } + + var_07 = var_03[var_08]; + self.killstreaks[var_08] = var_03[var_08]; + } +} + +//Function Number: 46 +replenishloadout() +{ + var_00 = self.pers["team"]; + var_01 = self.pers["class"]; + var_02 = self getweaponslistall(); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + var_04 = var_02[var_03]; + self givemaxammo(var_04); + self setweaponammoclip(var_04,9999); + if(var_04 == "claymore_mp" || var_04 == "claymore_detonator_mp") + { + self setweaponammostock(var_04,2); + } + } + + if(self getammocount(level.var_379A[var_01]["primary"]["type"]) < level.var_379A[var_01]["primary"]["count"]) + { + self setweaponammoclip(level.var_379A[var_01]["primary"]["type"],level.var_379A[var_01]["primary"]["count"]); + } + + if(self getammocount(level.var_379A[var_01]["secondary"]["type"]) < level.var_379A[var_01]["secondary"]["count"]) + { + self setweaponammoclip(level.var_379A[var_01]["secondary"]["type"],level.var_379A[var_01]["secondary"]["count"]); + } +} + +//Function Number: 47 +onplayerconnecting() +{ + for(;;) + { + level waittill("connected",var_00); + if(!isdefined(var_00.pers["class"])) + { + var_00.pers["class"] = ""; + } + + if(!isdefined(var_00.pers["lastClass"])) + { + var_00.pers["lastClass"] = ""; + } + + var_00.class = var_00.pers["class"]; + var_00.lastclass = var_00.pers["lastClass"]; + var_00.detectexplosives = 0; + var_00.bombsquadicons = []; + var_00.bombsquadids = []; + } +} + +//Function Number: 48 +fadeaway(param_00,param_01) +{ + wait param_00; + self fadeovertime(param_01); + self.alpha = 0; +} + +//Function Number: 49 +setclass(param_00) +{ + self.curclass = param_00; +} + +//Function Number: 50 +getperkforclass(param_00,param_01) +{ + var_02 = getclassindex(param_01); + if(issubstr(param_01,"custom")) + { + return cac_getperk(var_02,param_00); + } + + return table_getperk(level.classtablename,var_02,param_00); +} + +//Function Number: 51 +classhasperk(param_00,param_01) +{ + return getperkforclass(0,param_00) == param_01 || getperkforclass(1,param_00) == param_01 || getperkforclass(2,param_00) == param_01; +} + +//Function Number: 52 +isvalidprimary(param_00,param_01) +{ + if(!isdefined(param_01)) + { + param_01 = 1; + } + + switch(param_00) + { + case "iw5_l96a1": + case "iw5_mg36": + case "iw5_sa80": + case "iw5_pecheneg": + case "iw5_mk46": + case "iw5_m60": + case "iw5_spas12": + case "iw5_usas12": + case "iw5_aa12": + case "iw5_striker": + case "iw5_1887": + case "iw5_ksg": + case "iw5_as50": + case "iw5_msr": + case "iw5_dragunov": + case "iw5_rsass": + case "iw5_barrett": + case "iw5_ump45": + case "iw5_pp90m1": + case "iw5_p90": + case "iw5_m9": + case "iw5_mp7": + case "iw5_mp5": + case "iw5_cm901": + case "iw5_g36c": + case "iw5_scar": + case "iw5_mk14": + case "iw5_type95": + case "iw5_acr": + case "iw5_fad": + case "iw5_m16": + case "iw5_ak47": + case "iw5_m4": + case "iw5_riotshieldjugg": + case "iw5_m60jugg": + case "xm25": + case "riotshield": + return 1; + + default: + if(param_01) + { + } + return 0; + } +} + +//Function Number: 53 +isvalidsecondary(param_00,param_01,param_02,param_03) +{ + if(!isdefined(param_03)) + { + param_03 = 1; + } + + switch(param_00) + { + case "iw5_smaw": + case "iw5_fnfiveseven": + case "iw5_p99": + case "iw5_skorpion": + case "iw5_mp9": + case "iw5_fmg9": + case "iw5_g18": + case "iw5_mp412": + case "iw5_deserteagle": + case "iw5_44magnum": + case "iw5_usp45jugg": + case "iw5_mp412jugg": + case "iw5_usp45": + case "m320": + case "xm25": + case "javelin": + case "stinger": + case "rpg": + return 1; + + case "iw5_l96a1": + case "iw5_mg36": + case "iw5_sa80": + case "iw5_pecheneg": + case "iw5_mk46": + case "iw5_m60": + case "iw5_spas12": + case "iw5_usas12": + case "iw5_aa12": + case "iw5_striker": + case "iw5_1887": + case "iw5_ksg": + case "iw5_as50": + case "iw5_msr": + case "iw5_dragunov": + case "iw5_rsass": + case "iw5_barrett": + case "iw5_ump45": + case "iw5_pp90m1": + case "iw5_p90": + case "iw5_m9": + case "iw5_mp7": + case "iw5_mp5": + case "iw5_cm901": + case "iw5_g36c": + case "iw5_scar": + case "iw5_mk14": + case "iw5_type95": + case "iw5_acr": + case "iw5_fad": + case "iw5_m16": + case "iw5_ak47": + case "iw5_m4": + case "riotshield": + if(getdvarint("scr_game_perks") == 1 && param_01 == "specialty_twoprimaries" || param_02 == "specialty_twoprimaries") + { + return 1; + } + else + { + return 0; + } + + break; + + default: + if(param_03) + { + } + return 0; + } +} + +//Function Number: 54 +isvalidattachment(param_00,param_01) +{ + if(!isdefined(param_01)) + { + param_01 = 1; + } + + switch(param_00) + { + case "hybrid": + case "hamrhybrid": + case "xmags": + case "rof": + case "fmj": + case "heartbeat": + case "grip": + case "zoomscope": + case "gp25": + case "silencer": + case "silencer03": + case "silencer02": + case "eotechlmg": + case "reflexlmg": + case "thermalsmg": + case "acogsmg": + case "acog": + case "eotechsmg": + case "eotech": + case "reflexsmg": + case "reflex": + case "tactical": + case "vzscope": + case "akimbo": + case "m320": + case "gl": + case "shotgun": + case "thermal": + case "none": + return 1; + + default: + if(param_01) + { + } + return 0; + } +} + +//Function Number: 55 +isattachmentunlocked(param_00,param_01) +{ + var_02 = 0; + var_03 = 2; + var_04 = 4; + var_05 = self getplayerdata("weaponRank",param_00); + var_06 = int(tablelookup("mp/weaponRankTable.csv",var_02,maps\mp\_utility::getweaponclass(param_00),var_03)); + var_07 = int(tablelookup("mp/weaponRankTable.csv",var_06,param_01,var_04)); + if(var_05 >= var_07) + { + return 1; + } + + return 0; +} + +//Function Number: 56 +isvalidweaponbuff(param_00) +{ + switch(param_00) + { + case "specialty_moredamage": + case "specialty_lightweight": + case "specialty_reducedsway": + case "specialty_fastermelee": + case "specialty_longerrange": + case "specialty_holdbreathwhileads": + case "specialty_sharp_focus": + case "specialty_bling": + case "specialty_marksman": + case "specialty_bulletpenetration": + case "specialty_armorpiercing": + return 1; + + default: + return 0; + } +} + +//Function Number: 57 +isweaponbuffunlocked(param_00,param_01) +{ + var_02 = 0; + var_03 = 4; + var_04 = 4; + var_05 = self getplayerdata("weaponRank",param_00); + var_06 = int(tablelookup("mp/weaponRankTable.csv",var_02,maps\mp\_utility::getweaponclass(param_00),var_03)); + var_07 = int(tablelookup("mp/weaponRankTable.csv",var_06,param_01,var_04)); + if(var_05 >= var_07) + { + return 1; + } + + return 0; +} + +//Function Number: 58 +isvalidcamo(param_00) +{ + switch(param_00) + { + case "autumn": + case "winter": + case "snake": + case "marine": + case "choco": + case "hex": + case "d_urban": + case "multi": + case "classic": + case "gold": + case "snow": + case "blue": + case "red": + case "none": + return 1; + + default: + return 0; + } +} + +//Function Number: 59 +isvalidreticle(param_00) +{ + switch(param_00) + { + case "ret6": + case "ret5": + case "ret4": + case "ret3": + case "ret2": + case "ret1": + case "none": + return 1; + + default: + return 0; + } +} + +//Function Number: 60 +iscamounlocked(param_00,param_01) +{ + var_02 = 0; + var_03 = 3; + var_04 = 4; + var_05 = self getplayerdata("weaponRank",param_00); + var_06 = int(tablelookup("mp/weaponRankTable.csv",var_02,maps\mp\_utility::getweaponclass(param_00),var_03)); + var_07 = int(tablelookup("mp/weaponRankTable.csv",var_06,param_01,var_04)); + if(var_05 >= var_07) + { + return 1; + } + + return 0; +} + +//Function Number: 61 +isvalidequipment(param_00) +{ + switch(param_00) + { + case "bouncingbetty_mp": + case "c4_mp": + case "semtex_mp": + case "specialty_portable_radar": + case "throwingknife_mp": + case "frag_grenade_mp": + case "claymore_mp": + return 1; + + default: + return 0; + } +} + +//Function Number: 62 +isvalidoffhand(param_00) +{ + switch(param_00) + { + case "emp_grenade_mp": + case "specialty_tacticalinsertion": + case "specialty_scrambler": + case "flash_grenade_mp": + case "specialty_portable_radar": + case "smoke_grenade_mp": + case "trophy_mp": + case "concussion_grenade_mp": + return 1; + + default: + return 0; + } +} + +//Function Number: 63 +isvalidperk1(param_00) +{ + switch(param_00) + { + case "specialty_paint": + case "specialty_fastreload": + case "specialty_longersprint": + case "specialty_blindeye": + case "specialty_scavenger": + return 1; + + default: + return 0; + } +} + +//Function Number: 64 +isvalidperk2(param_00,param_01) +{ + if(!isdefined(param_01) || param_01 != "specialty_anytwo") + { + switch(param_00) + { + case "_specialty_blastshield": + case "specialty_hardline": + case "specialty_twoprimaries": + case "specialty_quickdraw": + case "specialty_assists": + case "specialty_coldblooded": + return 1; + + default: + return 0; + } + } + + return 1; +} + +//Function Number: 65 +isvalidperk3(param_00,param_01) +{ + if(!isdefined(param_01) || param_01 != "specialty_anytwo") + { + switch(param_00) + { + case "specialty_stalker": + case "specialty_quieter": + case "specialty_autospot": + case "specialty_detectexplosive": + case "specialty_bulletaccuracy": + return 1; + + default: + return 0; + } + } + + return 1; +} + +//Function Number: 66 +isvaliddeathstreak(param_00) +{ + switch(param_00) + { + case "specialty_c4death": + case "specialty_stopping_power": + case "specialty_revenge": + case "specialty_grenadepulldeath": + case "specialty_juiced": + case "specialty_uav": + case "specialty_finalstand": + case "specialty_null": + return 1; + + default: + return 0; + } +} + +//Function Number: 67 +isvalidweapon(param_00) +{ + if(!isdefined(level.var_37AC)) + { + level.var_37AC = []; + foreach(var_02 in level.weaponlist) + { + level.var_37AC[var_02] = 1; + } + } + + if(isdefined(level.var_37AC[param_00])) + { + return 1; + } + + return 0; +} + +//Function Number: 68 +isvalidkillstreak(param_00) +{ + switch(param_00) + { + case "specialty_stalker_ks": + case "specialty_quieter_ks": + case "specialty_bulletaccuracy_ks": + case "specialty_autospot_ks": + case "specialty_detectexplosive_ks": + case "_specialty_blastshield_ks": + case "specialty_assists_ks": + case "specialty_quickdraw_ks": + case "specialty_coldblooded_ks": + case "specialty_hardline_ks": + case "specialty_paint_ks": + case "specialty_blindeye_ks": + case "specialty_scavenger_ks": + case "specialty_fastreload_ks": + case "specialty_longersprint_ks": + case "littlebird_support": + case "sam_turret": + case "airdrop_remote_tank": + case "remote_tank": + case "remote_uav": + case "uav_support": + case "airdrop_juggernaut_recon": + case "remote_mg_turret": + case "remote_mortar": + case "aastrike": + case "ims": + case "heli_sniper": + case "directional_uav": + case "deployable_vest": + case "osprey_gunner": + case "escort_airdrop": + case "minigun_turret": + case "airdrop_trap": + case "stealth_airstrike": + case "littlebird_flock": + case "helicopter_flares": + case "airdrop_juggernaut": + case "airdrop_sentry_minigun": + case "airdrop_assault": + case "counter_uav": + case "predator_missile": + case "precision_airstrike": + case "triple_uav": + case "double_uav": + case "uav": + case "emp": + case "ac130": + case "sentry": + case "none": + case "helicopter": + return 1; + + default: + return 0; + } +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/gametypes/_damage.gsc b/MW3/PC/MP/maps/mp/gametypes/_damage.gsc new file mode 100644 index 0000000..b221550 --- /dev/null +++ b/MW3/PC/MP/maps/mp/gametypes/_damage.gsc @@ -0,0 +1,3133 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_damage.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 71 + * Decompile Time: 1169 ms + * Timestamp: 10/27/2023 2:12:19 AM +*******************************************************************/ + +//Function Number: 1 +isswitchingteams() +{ + if(isdefined(self.switching_teams)) + { + return 1; + } + + return 0; +} + +//Function Number: 2 +isteamswitchbalanced() +{ + var_00 = maps\mp\gametypes\_teams::countplayers(); + var_43[self.leaving_team]; + var_42[self.joining_team]; + return var_42[self.joining_team] - var_42[self.leaving_team] < 2; +} + +//Function Number: 3 +isfriendlyfire(param_00,param_01) +{ + if(!level.teambased) + { + return 0; + } + + if(!isdefined(param_01)) + { + return 0; + } + + if(!isplayer(param_01) && !isdefined(param_01.team)) + { + return 0; + } + + if(param_00.team != param_01.team) + { + return 0; + } + + if(param_00 == param_01) + { + return 0; + } + + return 1; +} + +//Function Number: 4 +killedself(param_00) +{ + if(!isplayer(param_00)) + { + return 0; + } + + if(param_00 != self) + { + return 0; + } + + return 1; +} + +//Function Number: 5 +isheadshot(param_00,param_01,param_02,param_03) +{ + if(isdefined(param_03)) + { + if(param_03.code_classname == "script_vehicle" && isdefined(param_03.owner)) + { + return 0; + } + + if(param_03.code_classname == "misc_turret" && isdefined(param_03.owner)) + { + return 0; + } + + if(param_03.code_classname == "script_model" && isdefined(param_03.owner)) + { + return 0; + } + } + + return (param_01 == "head" || param_01 == "helmet") && param_02 != "MOD_MELEE" && param_02 != "MOD_IMPACT" && !maps\mp\_utility::isenvironmentweapon(param_00); +} + +//Function Number: 6 +handleteamchangedeath() +{ + if(!level.teambased) + { + return; + } + + if(self.joining_team == "spectator" || !isteamswitchbalanced()) + { + self thread [[ level.onxpevent ]]("suicide"); + maps\mp\_utility::incpersstat("suicides",1); + self.suicides = maps\mp\_utility::getpersstat("suicides"); + } +} + +//Function Number: 7 +handleworlddeath(param_00,param_01,param_02,param_03) +{ + if(!isdefined(param_00)) + { + return; + } + + if(!isdefined(param_00.team)) + { + handlesuicidedeath(param_02,param_03); + return; + } + + if((level.teambased && param_00.team != self.team) || !level.teambased) + { + if(isdefined(level.onnormaldeath) && isplayer(param_00) && param_00.team != "spectator") + { + [[ level.onnormaldeath ]](self,param_00,param_01); + } + } +} + +//Function Number: 8 +handlesuicidedeath(param_00,param_01) +{ + self setcarddisplayslot(self,7); + self openmenu("killedby_card_display"); + self thread [[ level.onxpevent ]]("suicide"); + maps\mp\_utility::incpersstat("suicides",1); + self.suicides = maps\mp\_utility::getpersstat("suicides"); + if(!maps\mp\_utility::matchmakinggame()) + { + maps\mp\_utility::incplayerstat("suicides",1); + } + + var_02 = maps\mp\gametypes\_tweakables::gettweakablevalue("game","suicidepointloss"); + lib_036E::func_2B86(self,lib_036E::func_2B87(self) - var_02); + if(param_00 == "MOD_SUICIDE" && param_01 == "none" && isdefined(self.throwinggrenade)) + { + self.lastgrenadesuicidetime = gettime(); + } + + if(isdefined(self.friendlydamage)) + { + self iprintlnbold(&"MP_FRIENDLY_FIRE_WILL_NOT"); + } +} + +//Function Number: 9 +handlefriendlyfiredeath(param_00) +{ + param_00 setcarddisplayslot(self,8); + param_00 openmenu("youkilled_card_display"); + self setcarddisplayslot(param_00,7); + self openmenu("killedby_card_display"); + param_00 thread [[ level.onxpevent ]]("teamkill"); + param_00.pers["teamkills"] = param_00.pers["teamkills"] + 1; + param_00.teamkillsthisround++; + if(maps\mp\gametypes\_tweakables::gettweakablevalue("team","teamkillpointloss")) + { + var_01 = maps\mp\gametypes\_rank::getscoreinfovalue("kill"); + lib_036E::func_2B86(param_00,lib_036E::func_2B87(param_00) - var_01); + } + + if(level.maxallowedteamkills < 0) + { + return; + } + + if(level.ingraceperiod) + { + var_02 = 1; + param_00.pers["teamkills"] = param_00.pers["teamkills"] + level.maxallowedteamkills; + } + else if(var_02.pers["teamkills"] > 1 && maps\mp\_utility::gettimepassed() < level.graceperiod * 1000 + 8000 + var_02.pers["teamkills"] * 1000) + { + var_02 = 1; + param_00.pers["teamkills"] = param_00.pers["teamkills"] + level.maxallowedteamkills; + } + else + { + var_02 = var_02 maps\mp\gametypes\_playerlogic::teamkilldelay(); + } + + if(var_02 > 0) + { + param_00.pers["teamKillPunish"] = 1; + param_00 maps\mp\_utility::_suicide(); + } +} + +//Function Number: 10 +func_3172(param_00,param_01,param_02,param_03,param_04) +{ + param_01 thread maps\mp\_events::killedplayer(param_00,self,param_03,param_04); + param_01 setcarddisplayslot(self,8); + param_01 openmenu("youkilled_card_display"); + self setcarddisplayslot(param_01,7); + self openmenu("killedby_card_display"); + if(param_04 == "MOD_HEAD_SHOT") + { + param_01 maps\mp\_utility::incpersstat("headshots",1); + param_01.headshots = param_01 maps\mp\_utility::getpersstat("headshots"); + param_01 maps\mp\_utility::incplayerstat("headshots",1); + if(isdefined(param_01.laststand)) + { + var_05 = maps\mp\gametypes\_rank::getscoreinfovalue("kill") * 2; + } + else + { + var_05 = undefined; + } + + param_01 playlocalsound("bullet_impact_headshot_2"); + } + else if(isdefined(param_02.laststand)) + { + var_05 = maps\mp\gametypes\_rank::getscoreinfovalue("kill") * 2; + } + else + { + var_05 = undefined; + } + + param_01 thread maps\mp\gametypes\_rank::giverankxp("kill",var_05,param_03,param_04); + param_01 maps\mp\_utility::incpersstat("kills",1); + param_01.kills = param_01 maps\mp\_utility::getpersstat("kills"); + param_01 maps\mp\_utility::updatepersratio("kdRatio","kills","deaths"); + param_01 maps\mp\gametypes\_persistance::statsetchild("round","kills",param_01.kills); + param_01 maps\mp\_utility::incplayerstat("kills",1); + if(isflankkill(self,param_01)) + { + param_01 maps\mp\_utility::incplayerstat("flankkills",1); + maps\mp\_utility::incplayerstat("flankdeaths",1); + } + + var_06 = param_01.pers["cur_kill_streak"]; + self.pers["copyCatLoadout"] = undefined; + if(maps\mp\_utility::_hasperk("specialty_copycat")) + { + self.pers["copyCatLoadout"] = param_01 maps\mp\gametypes\_class::cloneloadout(); + } + + if(isalive(param_01) || param_01.streaktype == "support") + { + if(param_01 maps\mp\_utility::killshouldaddtokillstreak(param_03)) + { + param_01 thread maps\mp\killstreaks\_killstreaks::giveadrenaline("kill"); + param_01.pers["cur_kill_streak"]++; + if(!maps\mp\_utility::iskillstreakweapon(param_03)) + { + param_01.pers["cur_kill_streak_for_nuke"]++; + } + + var_07 = 25; + if(param_01 maps\mp\_utility::_hasperk("specialty_hardline")) + { + var_07--; + } + + if(!maps\mp\_utility::iskillstreakweapon(param_03) && param_01.pers["cur_kill_streak_for_nuke"] == var_07) + { + param_01 thread maps\mp\killstreaks\_killstreaks::givekillstreak("nuke",0,1,param_01,1); + param_01 thread maps\mp\gametypes\_hud_message::killstreaksplashnotify("nuke",var_07); + } + } + + param_01 maps\mp\_utility::setplayerstatifgreater("killstreak",param_01.pers["cur_kill_streak"]); + if(param_01.pers["cur_kill_streak"] > param_01 maps\mp\_utility::getpersstat("longestStreak")) + { + param_01 maps\mp\_utility::setpersstat("longestStreak",param_01.pers["cur_kill_streak"]); + } + } + + param_01.pers["cur_death_streak"] = 0; + if(param_01.pers["cur_kill_streak"] > param_01 maps\mp\gametypes\_persistance::statgetchild("round","killStreak")) + { + param_01 maps\mp\gametypes\_persistance::statsetchild("round","killStreak",param_01.pers["cur_kill_streak"]); + } + + if(param_01.pers["cur_kill_streak"] > param_01.kill_streak) + { + param_01 maps\mp\gametypes\_persistance::statset("killStreak",param_01.pers["cur_kill_streak"]); + param_01.kill_streak = param_01.pers["cur_kill_streak"]; + } + + lib_036E::func_2B7B("kill",param_01,self); + lib_037A::func_3068(param_01,self); + var_08 = maps\mp\gametypes\_tweakables::gettweakablevalue("game","deathpointloss"); + lib_036E::func_2B86(self,lib_036E::func_2B87(self) - var_08); + if(isdefined(level.ac130player) && level.ac130player == param_01) + { + level notify("ai_killed",self); + } + + level notify("player_got_killstreak_" + param_01.pers["cur_kill_streak"],param_01); + param_01 notify("got_killstreak",param_01.pers["cur_kill_streak"]); + param_01 notify("killed_enemy"); + if(isdefined(self.uavremotemarkedby)) + { + if(self.uavremotemarkedby != param_01) + { + self.uavremotemarkedby thread maps\mp\killstreaks\_remoteuav::remoteuav_processtaggedassist(self); + } + + self.uavremotemarkedby = undefined; + } + + if(isdefined(level.onnormaldeath) && param_01.pers["team"] != "spectator") + { + [[ level.onnormaldeath ]](self,param_01,param_00); + } + + if(!level.teambased) + { + self.attackers = []; + return; + } + + level thread maps\mp\gametypes\_battlechatter_mp::saylocalsounddelayed(param_01,"kill",0.75); + if(isdefined(self.lastattackedshieldplayer) && isdefined(self.lastattackedshieldtime) && self.lastattackedshieldplayer != param_01) + { + if(gettime() - self.lastattackedshieldtime < 2500) + { + self.lastattackedshieldplayer thread lib_036E::func_2BA8(self); + if(self.lastattackedshieldplayer maps\mp\_utility::_hasperk("specialty_assists")) + { + self.lastattackedshieldplayer.pers["assistsToKill"]++; + if(!self.lastattackedshieldplayer.pers["assistsToKill"] % 2) + { + self.lastattackedshieldplayer maps\mp\gametypes\_missions::processchallenge("ch_hardlineassists"); + self.lastattackedshieldplayer maps\mp\killstreaks\_killstreaks::giveadrenaline("kill"); + self.lastattackedshieldplayer.pers["cur_kill_streak"]++; + } + } + else + { + self.lastattackedshieldplayer.pers["assistsToKill"] = 0; + } + } + else if(isalive(self.lastattackedshieldplayer) && gettime() - self.lastattackedshieldtime < 5000) + { + var_09 = vectornormalize(anglestoforward(self.angles)); + var_0A = vectornormalize(self.lastattackedshieldplayer.origin - self.origin); + if(vectordot(var_0A,var_09) > 0.925) + { + self.lastattackedshieldplayer thread lib_036E::func_2BA8(self); + if(self.lastattackedshieldplayer maps\mp\_utility::_hasperk("specialty_assists")) + { + self.lastattackedshieldplayer.pers["assistsToKill"]++; + if(!self.lastattackedshieldplayer.pers["assistsToKill"] % 2) + { + self.lastattackedshieldplayer maps\mp\gametypes\_missions::processchallenge("ch_hardlineassists"); + self.lastattackedshieldplayer maps\mp\killstreaks\_killstreaks::giveadrenaline("kill"); + self.lastattackedshieldplayer.pers["cur_kill_streak"]++; + } + } + else + { + self.lastattackedshieldplayer.pers["assistsToKill"] = 0; + } + } + } + } + + if(isdefined(self.attackers)) + { + foreach(var_0C in self.attackers) + { + if(!isdefined(var_0C)) + { + continue; + } + + if(var_0C == param_01) + { + continue; + } + + var_0C thread lib_036E::func_2BA1(self); + if(var_0C maps\mp\_utility::_hasperk("specialty_assists")) + { + var_0C.pers["assistsToKill"]++; + if(!var_0C.pers["assistsToKill"] % 2) + { + var_0C maps\mp\gametypes\_missions::processchallenge("ch_hardlineassists"); + var_0C maps\mp\killstreaks\_killstreaks::giveadrenaline("kill"); + var_0C.pers["cur_kill_streak"]++; + var_07 = 25; + if(var_0C maps\mp\_utility::_hasperk("specialty_hardline")) + { + var_07--; + } + + if(var_0C.pers["cur_kill_streak"] == var_07) + { + var_0C thread maps\mp\killstreaks\_killstreaks::givekillstreak("nuke",0,1,var_0C,1); + var_0C thread maps\mp\gametypes\_hud_message::killstreaksplashnotify("nuke",var_07); + } + } + + continue; + } + + var_0C.pers["assistsToKill"] = 0; + } + + self.attackers = []; + } +} + +//Function Number: 11 +isplayerweapon(param_00) +{ + if(weaponclass(param_00) == "non-player") + { + return 0; + } + + if(weaponclass(param_00) == "turret") + { + return 0; + } + + if(weaponinventorytype(param_00) == "primary" || weaponinventorytype(param_00) == "altmode") + { + return 1; + } + + return 0; +} + +//Function Number: 12 +callback_playerkilled(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08) +{ + playerkilled_internal(param_00,param_01,self,param_02,param_03,param_04,param_05,param_06,param_07,param_08,0); +} + +//Function Number: 13 +queueshieldforremoval(param_00) +{ + var_01 = 5; + if(!isdefined(level.shieldtrasharray)) + { + level.shieldtrasharray = []; + } + + if(level.shieldtrasharray.size >= var_01) + { + var_02 = level.shieldtrasharray.size - 1; + level.shieldtrasharray[0] delete(); + for(var_03 = 0;var_03 < var_02;var_03++) + { + level.shieldtrasharray[var_03] = level.shieldtrasharray[var_03 + 1]; + } + + level.shieldtrasharray[var_02] = undefined; + } + + level.shieldtrasharray[level.shieldtrasharray.size] = param_00; +} + +//Function Number: 14 +launchshield(param_00,param_01) +{ + var_02 = "weapon_riot_shield_mp"; + if(!isdefined(self.hasriotshieldhidden) || self.hasriotshieldhidden == 0) + { + self detachshieldmodel(var_02,"tag_weapon_left"); + } + + self.hasriotshield = 0; + self.hasriotshieldequipped = 0; +} + +//Function Number: 15 +playerkilled_internal(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A) +{ + param_02 endon("spawned"); + param_02 notify("killed_player"); + if(isdefined(param_01)) + { + param_01.assistedsuicide = undefined; + } + + if(!isdefined(param_02.idflags)) + { + if(param_04 == "MOD_SUICIDE") + { + param_02.idflags = 0; + } + else if(param_04 == "MOD_GRENADE" && issubstr(param_05,"frag_grenade") && param_03 == 100000) + { + param_02.idflags = 0; + } + else if(param_05 == "nuke_mp") + { + param_02.idflags = 0; + } + else if(level.friendlyfire >= 2) + { + param_02.idflags = 0; + } + else + { + } + } + + if(param_02.hasriotshieldequipped) + { + param_02 launchshield(param_03,param_04); + } + + if(!param_0A) + { + if(isdefined(param_02.endgame)) + { + if(isdefined(level.nukedetonated)) + { + self visionsetnakedforplayer(level.nukevisionset,2); + } + else + { + self visionsetnakedforplayer("",2); + } + } + else + { + if(isdefined(level.nukedetonated)) + { + self visionsetnakedforplayer(level.nukevisionset,0); + } + else + { + self visionsetnakedforplayer("",0); + } + + param_02 thermalvisionoff(); + } + } + else + { + param_02.fauxdead = 1; + self notify("death"); + } + + if(game["state"] == "postgame") + { + return; + } + + var_0B = 0; + if(!isplayer(param_00) && isdefined(param_00.primaryweapon)) + { + var_0C = param_00.primaryweapon; + } + else if(isdefined(param_02) && isplayer(param_02) && param_02 getcurrentprimaryweapon() != "none") + { + var_0C = param_02 getcurrentprimaryweapon(); + } + else if(issubstr(param_06,"alt_")) + { + var_0C = getsubstr(param_06,4,param_06.size); + } + else + { + var_0C = undefined; + } + + if(isdefined(param_02.uselaststandparams) || isdefined(param_02.laststandparams) && param_04 == "MOD_SUICIDE") + { + param_02 ensurelaststandparamsvalidity(); + param_02.uselaststandparams = undefined; + param_00 = param_02.laststandparams.einflictor; + param_01 = param_02.laststandparams.attacker; + param_03 = param_02.laststandparams.idamage; + param_04 = param_02.laststandparams.smeansofdeath; + param_05 = param_02.laststandparams.sweapon; + var_0C = param_02.laststandparams.sprimaryweapon; + param_06 = param_02.laststandparams.vdir; + param_07 = param_02.laststandparams.shitloc; + var_0B = gettime() - param_02.laststandparams.laststandstarttime / 1000; + param_02.laststandparams = undefined; + } + + if((!isdefined(param_01) || param_01.classname == "trigger_hurt" || param_01.classname == "worldspawn" || param_01 == param_02) && isdefined(self.attackers)) + { + var_0D = undefined; + foreach(var_0F in self.attackers) + { + if(!isdefined(var_0F)) + { + continue; + } + + if(!isdefined(param_02.attackerdata[var_0F.guid].damage)) + { + continue; + } + + if(var_0F == param_02 || level.teambased && var_0F.team == param_02.team) + { + continue; + } + + if(param_02.attackerdata[var_0F.guid].lasttimedamaged + 2500 < gettime() && param_01 != param_02 && isdefined(param_02.laststand) && param_02.laststand) + { + continue; + } + + if(param_02.attackerdata[var_0F.guid].damage > 1 && !isdefined(var_0D)) + { + var_0D = var_0F; + continue; + } + + if(isdefined(var_0D) && param_02.attackerdata[var_0F.guid].damage > param_02.attackerdata[var_0D.guid].damage) + { + var_0D = var_0F; + } + } + + if(isdefined(var_0D)) + { + param_01 = var_0D; + param_01.assistedsuicide = 1; + param_05 = param_02.attackerdata[var_0D.guid].weapon; + param_06 = param_02.attackerdata[var_0D.guid].vdir; + param_07 = param_02.attackerdata[var_0D.guid].shitloc; + param_08 = param_02.attackerdata[var_0D.guid].psoffsettime; + param_04 = param_02.attackerdata[var_0D.guid].smeansofdeath; + param_03 = param_02.attackerdata[var_0D.guid].damage; + var_0C = param_02.attackerdata[var_0D.guid].sprimaryweapon; + param_00 = param_01; + } + } + else if(isdefined(param_01)) + { + param_01.assistedsuicide = undefined; + } + + if(isheadshot(param_05,param_07,param_04,param_01)) + { + param_04 = "MOD_HEAD_SHOT"; + } + else if(param_04 != "MOD_MELEE" && !isdefined(param_02.nuked)) + { + param_02 maps\mp\_utility::playdeathsound(); + } + + var_11 = isfriendlyfire(param_02,param_01); + if(isdefined(param_01)) + { + if(param_01.code_classname == "script_vehicle" && isdefined(param_01.owner)) + { + param_01 = param_01.owner; + } + + if(param_01.code_classname == "misc_turret" && isdefined(param_01.owner)) + { + if(isdefined(param_01.vehicle)) + { + param_01.vehicle notify("killedPlayer",param_02); + } + + param_01 = param_01.owner; + } + + if(param_01.code_classname == "script_model" && isdefined(param_01.owner)) + { + param_01 = param_01.owner; + if(!isfriendlyfire(param_02,param_01) && param_01 != param_02) + { + param_01 notify("crushed_enemy"); + } + } + } + + param_02 maps\mp\gametypes\_weapons::dropscavengerfordeath(param_01); + param_02 maps\mp\gametypes\_weapons::dropweaponfordeath(param_01); + if(!param_0A) + { + param_02.sessionstate = "dead"; + param_02.statusicon = "hud_status_dead"; + } + + param_02 maps\mp\gametypes\_playerlogic::removefromalivecount(); + if(!isdefined(param_02.switching_teams)) + { + param_02 maps\mp\_utility::incpersstat("deaths",1); + param_02.deaths = param_02 maps\mp\_utility::getpersstat("deaths"); + param_02 maps\mp\_utility::updatepersratio("kdRatio","kills","deaths"); + param_02 maps\mp\gametypes\_persistance::statsetchild("round","deaths",param_02.deaths); + param_02 maps\mp\_utility::incplayerstat("deaths",1); + } + + if(isdefined(param_01) && isplayer(param_01)) + { + param_01 checkkillsteal(param_02); + } + + obituary(param_02,param_01,param_05,param_04); + var_12 = 0; + var_13 = maps\mp\_utility::getnextlifeid(); + param_02 logprintplayerdeath(var_13,param_01,param_03,param_04,param_05,var_0C,param_07); + param_02 maps\mp\_matchdata::logplayerlife(var_13); + param_02 maps\mp\_matchdata::logplayerdeath(var_13,param_01,param_03,param_04,param_05,var_0C,param_07); + if(param_04 == "MOD_MELEE") + { + if(issubstr(param_05,"riotshield")) + { + param_01 maps\mp\_utility::incplayerstat("shieldkills",1); + if(!maps\mp\_utility::matchmakinggame()) + { + param_02 maps\mp\_utility::incplayerstat("shielddeaths",1); + } + } + else + { + param_01 maps\mp\_utility::incplayerstat("knifekills",1); + } + } + + if(param_02 isswitchingteams()) + { + handleteamchangedeath(); + } + else if(!isplayer(param_01) || isplayer(param_01) && param_04 == "MOD_FALLING") + { + handleworlddeath(param_01,var_13,param_04,param_07); + } + else if(param_01 == param_02) + { + handlesuicidedeath(param_04,param_07); + } + else if(var_11) + { + if(!isdefined(param_02.nuked)) + { + handlefriendlyfiredeath(param_01); + } + } + else + { + if(param_04 == "MOD_GRENADE" && param_00 == param_01) + { + addattacker(param_02,param_01,param_00,param_05,param_03,(0,0,0),param_06,param_07,param_08,param_04); + } + + var_12 = 1; + func_3172(var_13,param_01,param_00,param_05,param_04); + param_02 thread maps\mp\gametypes\_missions::playerkilled(param_00,param_01,param_03,param_04,param_05,var_0C,param_07,param_01.modifiers); + param_02.pers["cur_death_streak"]++; + if(!maps\mp\_utility::getgametypenumlives() && !maps\mp\_utility::matchmakinggame()) + { + param_02 maps\mp\_utility::setplayerstatifgreater("deathstreak",param_02.pers["cur_death_streak"]); + } + + if(isplayer(param_01) && param_02 maps\mp\_utility::isjuggernaut()) + { + param_01 thread maps\mp\_utility::teamplayercardsplash("callout_killed_juggernaut",param_01); + } + } + + var_14 = 0; + var_15 = undefined; + if(isdefined(self.previousprimary)) + { + var_14 = 1; + var_15 = self.previousprimary; + self.previousprimary = undefined; + } + + if(isplayer(param_01) && param_01 != self && !level.teambased || level.teambased && self.team != param_01.team) + { + if(var_14 && isdefined(var_15)) + { + var_16 = var_15; + } + else + { + var_16 = self.lastdroppableweapon; + } + + thread maps\mp\gametypes\_gamelogic::trackleaderboarddeathstats(var_16,param_04); + param_01 thread maps\mp\gametypes\_gamelogic::trackattackerleaderboarddeathstats(param_05,param_04); + } + + param_02 resetplayervariables(); + param_02.lastattacker = param_01; + param_02.lastdeathpos = param_02.origin; + param_02.deathtime = gettime(); + param_02.wantsafespawn = 0; + param_02.revived = 0; + param_02.sameshotdamage = 0; + if(maps\mp\killstreaks\_killstreaks::streaktyperesetsondeath(param_02.streaktype)) + { + param_02 maps\mp\killstreaks\_killstreaks::resetadrenaline(); + } + + if(param_0A) + { + var_12 = 0; + param_09 = param_02 playerforcedeathanim(param_00,param_04,param_05,param_07,param_06); + } + + param_02.body = param_02 cloneplayer(param_09); + if(param_0A) + { + param_02 playerhide(); + } + + if(param_02 isonladder() || param_02 ismantling() || !param_02 isonground() || isdefined(param_02.nuked)) + { + param_02.body startragdoll(); + } + + if(!isdefined(param_02.switching_teams)) + { + thread maps\mp\gametypes\_deathicons::adddeathicon(param_02.body,param_02,param_02.team,5); + } + + thread delaystartragdoll(param_02.body,param_07,param_06,param_05,param_00,param_04); + param_02 thread [[ level.onplayerkilled ]](param_00,param_01,param_03,param_04,param_05,param_06,param_07,param_08,param_09,var_13); + if(isplayer(param_01)) + { + var_17 = param_01 getentitynumber(); + } + else + { + var_17 = -1; + } + + var_18 = param_02 getkillcamentity(param_01,param_00,param_05); + var_19 = -1; + var_1A = 0; + if(isdefined(var_18)) + { + var_19 = var_18 getentitynumber(); + var_1A = var_18.birthtime; + if(!isdefined(var_1A)) + { + var_1A = 0; + } + } + + if(param_04 != "MOD_SUICIDE" && !!isdefined(param_01) || param_01.classname == "trigger_hurt" || param_01.classname == "worldspawn" || param_01 == param_02) + { + recordfinalkillcam(5,param_02,param_01,var_17,var_19,var_1A,param_05,var_0B,param_08); + } + + param_02 setplayerdata("killCamHowKilled",0); + switch(param_04) + { + case "MOD_HEAD_SHOT": + param_02 setplayerdata("killCamHowKilled",1); + break; + + default: + break; + } + + if(!param_0A) + { + if(!level.showingfinalkillcam && !level.killcam && var_12) + { + if(param_02 maps\mp\_utility::_hasperk("specialty_copycat") && isdefined(param_02.pers["copyCatLoadout"])) + { + param_02 thread maps\mp\gametypes\_killcam::waitdeathcopycatbutton(param_01); + wait 1; + } + } + + wait 0.25; + param_02 thread maps\mp\gametypes\_killcam::cancelkillcamonuse(); + wait 0.25; + self.respawntimerstarttime = gettime() + 1000; + var_1B = maps\mp\gametypes\_playerlogic::timeuntilspawn(1); + if(var_1B < 1) + { + var_1B = 1; + } + + param_02 thread maps\mp\gametypes\_playerlogic::predictabouttospawnplayerovertime(var_1B); + wait 1; + param_02 notify("death_delay_finished"); + } + + var_1C = gettime() - param_02.deathtime / 1000; + self.respawntimerstarttime = gettime(); + if(!isdefined(param_02.cancelkillcam) && param_02.cancelkillcam && var_12 && level.killcam && game["state"] == "playing" && !param_02 maps\mp\_utility::isusingremote() && !level.showingfinalkillcam) + { + var_1D = !maps\mp\_utility::getgametypenumlives() && !param_02.pers["lives"]; + var_1B = maps\mp\gametypes\_playerlogic::timeuntilspawn(1); + var_1E = var_1D && var_1B <= 0; + if(!var_1D) + { + var_1B = -1; + level notify("player_eliminated",param_02); + } + + param_02 maps\mp\gametypes\_killcam::killcam(var_17,var_19,var_1A,param_05,var_1C + var_0B,param_08,var_1B,maps\mp\gametypes\_gamelogic::timeuntilroundend(),param_01,param_02); + } + + if(game["state"] != "playing") + { + if(!level.showingfinalkillcam) + { + param_02.sessionstate = "dead"; + param_02 maps\mp\_utility::clearkillcamstate(); + } + + return; + } + + if(maps\mp\_utility::isvalidclass(param_02.class)) + { + param_02 thread maps\mp\gametypes\_playerlogic::spawnclient(); + } +} + +//Function Number: 16 +checkforcebleedout() +{ + if(level.diehardmode != 1) + { + return 0; + } + + if(!maps\mp\_utility::getgametypenumlives()) + { + return 0; + } + + if(level.livescount[self.team] > 0) + { + return 0; + } + + foreach(var_01 in level.players) + { + if(!isalive(var_01)) + { + continue; + } + + if(var_01.team != self.team) + { + continue; + } + + if(var_01 == self) + { + continue; + } + + if(!var_01.inlaststand) + { + return 0; + } + } + + foreach(var_01 in level.players) + { + if(!isalive(var_01)) + { + continue; + } + + if(var_01.team != self.team) + { + continue; + } + + if(var_01.inlaststand && var_01 != self) + { + var_01 laststandbleedout(0); + } + } + + return 1; +} + +//Function Number: 17 +checkkillsteal(param_00) +{ + if(maps\mp\_utility::matchmakinggame()) + { + return; + } + + var_01 = 0; + var_02 = undefined; + if(isdefined(param_00.attackerdata) && param_00.attackerdata.size > 1) + { + foreach(var_04 in param_00.attackerdata) + { + if(var_04.damage > var_01) + { + var_01 = var_04.damage; + var_02 = var_04.attackerent; + } + } + + if(isdefined(var_02) && var_02 != self) + { + maps\mp\_utility::incplayerstat("killsteals",1); + } + } +} + +//Function Number: 18 +initfinalkillcam() +{ + level.finalkillcam_delay = []; + level.finalkillcam_victim = []; + level.finalkillcam_attacker = []; + level.finalkillcam_attackernum = []; + level.finalkillcam_killcamentityindex = []; + level.finalkillcam_killcamentitystarttime = []; + level.finalkillcam_sweapon = []; + level.finalkillcam_deathtimeoffset = []; + level.finalkillcam_psoffsettime = []; + level.finalkillcam_timerecorded = []; + level.finalkillcam_timegameended = []; + level.finalkillcam_delay["axis"] = undefined; + level.finalkillcam_victim["axis"] = undefined; + level.finalkillcam_attacker["axis"] = undefined; + level.finalkillcam_attackernum["axis"] = undefined; + level.finalkillcam_killcamentityindex["axis"] = undefined; + level.finalkillcam_killcamentitystarttime["axis"] = undefined; + level.finalkillcam_sweapon["axis"] = undefined; + level.finalkillcam_deathtimeoffset["axis"] = undefined; + level.finalkillcam_psoffsettime["axis"] = undefined; + level.finalkillcam_timerecorded["axis"] = undefined; + level.finalkillcam_timegameended["axis"] = undefined; + level.finalkillcam_delay["allies"] = undefined; + level.finalkillcam_victim["allies"] = undefined; + level.finalkillcam_attacker["allies"] = undefined; + level.finalkillcam_attackernum["allies"] = undefined; + level.finalkillcam_killcamentityindex["allies"] = undefined; + level.finalkillcam_killcamentitystarttime["allies"] = undefined; + level.finalkillcam_sweapon["allies"] = undefined; + level.finalkillcam_deathtimeoffset["allies"] = undefined; + level.finalkillcam_psoffsettime["allies"] = undefined; + level.finalkillcam_timerecorded["allies"] = undefined; + level.finalkillcam_timegameended["allies"] = undefined; + level.finalkillcam_delay["none"] = undefined; + level.finalkillcam_victim["none"] = undefined; + level.finalkillcam_attacker["none"] = undefined; + level.finalkillcam_attackernum["none"] = undefined; + level.finalkillcam_killcamentityindex["none"] = undefined; + level.finalkillcam_killcamentitystarttime["none"] = undefined; + level.finalkillcam_sweapon["none"] = undefined; + level.finalkillcam_deathtimeoffset["none"] = undefined; + level.finalkillcam_psoffsettime["none"] = undefined; + level.finalkillcam_timerecorded["none"] = undefined; + level.finalkillcam_timegameended["none"] = undefined; + level.finalkillcam_winner = undefined; +} + +//Function Number: 19 +recordfinalkillcam(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08) +{ + if(level.teambased && isdefined(param_02.team)) + { + level.finalkillcam_delay[param_02.team] = param_00; + level.finalkillcam_victim[param_02.team] = param_01; + level.finalkillcam_attacker[param_02.team] = param_02; + level.finalkillcam_attackernum[param_02.team] = param_03; + level.finalkillcam_killcamentityindex[param_02.team] = param_04; + level.finalkillcam_killcamentitystarttime[param_02.team] = param_05; + level.finalkillcam_sweapon[param_02.team] = param_06; + level.finalkillcam_deathtimeoffset[param_02.team] = param_07; + level.finalkillcam_psoffsettime[param_02.team] = param_08; + level.finalkillcam_timerecorded[param_02.team] = maps\mp\_utility::getsecondspassed(); + level.finalkillcam_timegameended[param_02.team] = maps\mp\_utility::getsecondspassed(); + } + + level.finalkillcam_delay["none"] = param_00; + level.finalkillcam_victim["none"] = param_01; + level.finalkillcam_attacker["none"] = param_02; + level.finalkillcam_attackernum["none"] = param_03; + level.finalkillcam_killcamentityindex["none"] = param_04; + level.finalkillcam_killcamentitystarttime["none"] = param_05; + level.finalkillcam_sweapon["none"] = param_06; + level.finalkillcam_deathtimeoffset["none"] = param_07; + level.finalkillcam_psoffsettime["none"] = param_08; + level.finalkillcam_timerecorded["none"] = maps\mp\_utility::getsecondspassed(); + level.finalkillcam_timegameended["none"] = maps\mp\_utility::getsecondspassed(); +} + +//Function Number: 20 +erasefinalkillcam() +{ + level.finalkillcam_delay["axis"] = undefined; + level.finalkillcam_victim["axis"] = undefined; + level.finalkillcam_attacker["axis"] = undefined; + level.finalkillcam_attackernum["axis"] = undefined; + level.finalkillcam_killcamentityindex["axis"] = undefined; + level.finalkillcam_killcamentitystarttime["axis"] = undefined; + level.finalkillcam_sweapon["axis"] = undefined; + level.finalkillcam_deathtimeoffset["axis"] = undefined; + level.finalkillcam_psoffsettime["axis"] = undefined; + level.finalkillcam_timerecorded["axis"] = undefined; + level.finalkillcam_timegameended["axis"] = undefined; + level.finalkillcam_delay["allies"] = undefined; + level.finalkillcam_victim["allies"] = undefined; + level.finalkillcam_attacker["allies"] = undefined; + level.finalkillcam_attackernum["allies"] = undefined; + level.finalkillcam_killcamentityindex["allies"] = undefined; + level.finalkillcam_killcamentitystarttime["allies"] = undefined; + level.finalkillcam_sweapon["allies"] = undefined; + level.finalkillcam_deathtimeoffset["allies"] = undefined; + level.finalkillcam_psoffsettime["allies"] = undefined; + level.finalkillcam_timerecorded["allies"] = undefined; + level.finalkillcam_timegameended["allies"] = undefined; + level.finalkillcam_delay["none"] = undefined; + level.finalkillcam_victim["none"] = undefined; + level.finalkillcam_attacker["none"] = undefined; + level.finalkillcam_attackernum["none"] = undefined; + level.finalkillcam_killcamentityindex["none"] = undefined; + level.finalkillcam_killcamentitystarttime["none"] = undefined; + level.finalkillcam_sweapon["none"] = undefined; + level.finalkillcam_deathtimeoffset["none"] = undefined; + level.finalkillcam_psoffsettime["none"] = undefined; + level.finalkillcam_timerecorded["none"] = undefined; + level.finalkillcam_timegameended["none"] = undefined; + level.finalkillcam_winner = undefined; +} + +//Function Number: 21 +dofinalkillcam() +{ + level waittill("round_end_finished"); + level.showingfinalkillcam = 1; + var_00 = "none"; + if(isdefined(level.finalkillcam_winner)) + { + var_00 = level.finalkillcam_winner; + } + + var_01 = level.finalkillcam_delay[var_00]; + var_02 = level.finalkillcam_victim[var_00]; + var_03 = level.finalkillcam_attacker[var_00]; + var_04 = level.finalkillcam_attackernum[var_00]; + var_05 = level.finalkillcam_killcamentityindex[var_00]; + var_06 = level.finalkillcam_killcamentitystarttime[var_00]; + var_07 = level.finalkillcam_sweapon[var_00]; + var_08 = level.finalkillcam_deathtimeoffset[var_00]; + var_09 = level.finalkillcam_psoffsettime[var_00]; + var_0A = level.finalkillcam_timerecorded[var_00]; + var_0B = level.finalkillcam_timegameended[var_00]; + if(!isdefined(var_02) || !isdefined(var_03)) + { + level.showingfinalkillcam = 0; + level notify("final_killcam_done"); + return; + } + + var_0C = 15; + var_0D = var_0B - var_0A; + if(var_0D > var_0C) + { + level.showingfinalkillcam = 0; + level notify("final_killcam_done"); + return; + } + + if(isdefined(var_03)) + { + var_03.finalkill = 1; + } + + var_0E = gettime() - var_02.deathtime / 1000; + foreach(var_10 in level.players) + { + var_10 closepopupmenu(); + var_10 closeingamemenu(); + if(isdefined(level.nukedetonated)) + { + var_10 visionsetnakedforplayer(level.nukevisionset,0); + } + else + { + var_10 visionsetnakedforplayer("",0); + } + + var_10.killcamentitylookat = var_02 getentitynumber(); + if((var_10 != var_02 || !maps\mp\_utility::isroundbased() || maps\mp\_utility::islastround()) && var_10 maps\mp\_utility::_hasperk("specialty_copycat")) + { + var_10 maps\mp\_utility::_unsetperk("specialty_copycat"); + } + + var_10 thread maps\mp\gametypes\_killcam::killcam(var_04,var_05,var_06,var_07,var_0E + var_08,var_09,0,10000,var_03,var_02); + } + + wait 0.1; + while(anyplayersinkillcam()) + { + wait 0.05; + } + + level notify("final_killcam_done"); + level.showingfinalkillcam = 0; +} + +//Function Number: 22 +anyplayersinkillcam() +{ + foreach(var_01 in level.players) + { + if(isdefined(var_01.killcam)) + { + return 1; + } + } + + return 0; +} + +//Function Number: 23 +resetplayervariables() +{ + self.killedplayerscurrent = []; + self.switching_teams = undefined; + self.joining_team = undefined; + self.leaving_team = undefined; + self.pers["cur_kill_streak"] = 0; + self.pers["cur_kill_streak_for_nuke"] = 0; + maps\mp\gametypes\_gameobjects::detachusemodels(); +} + +//Function Number: 24 +getkillcamentity(param_00,param_01,param_02) +{ + if(!isdefined(param_01) || param_01 == param_00) + { + return undefined; + } + + switch(param_02) + { + case "bomb_site_mp": + case "airdrop_trap_explosive_mp": + case "osprey_minigun_mp": + case "littlebird_guard_minigun_mp": + case "apache_minigun_mp": + case "pavelow_minigun_mp": + case "stealth_bomb_mp": + case "bouncingbetty_mp": + case "artillery_mp": + return param_01.killcament; + + case "sam_projectile_mp": + if(isdefined(param_01.samturret) && isdefined(param_01.samturret.killcament)) + { + return param_01.samturret.killcament; + } + break; + + case "ims_projectile_mp": + if(isdefined(param_00) && isdefined(param_00.imskillcament)) + { + return param_00.imskillcament; + } + break; + + case "none": + if(isdefined(param_01.targetname) && param_01.targetname == "care_package") + { + return param_01.killcament; + } + break; + + case "ugv_turret_mp": + case "osprey_player_minigun_mp": + case "remote_turret_mp": + case "remotemissile_projectile_mp": + case "ac130_25mm_mp": + case "ac130_40mm_mp": + case "ac130_105mm_mp": + return undefined; + } + + if(param_01.classname == "script_origin" || param_01.classname == "script_model" || param_01.classname == "script_brushmodel") + { + if(isdefined(param_01.killcament) && !param_00 attackerinremotekillstreak()) + { + return param_01.killcament; + } + else + { + return undefined; + } + } + + return param_01; +} + +//Function Number: 25 +attackerinremotekillstreak() +{ + if(!isdefined(self)) + { + return 0; + } + + if(isdefined(level.ac130player) && self == level.ac130player) + { + return 1; + } + + if(isdefined(level.chopper) && isdefined(level.chopper.gunner) && self == level.chopper.gunner) + { + return 1; + } + + if(isdefined(level.remote_mortar) && isdefined(level.remote_mortar.owner) && self == level.remote_mortar.owner) + { + return 1; + } + + if(isdefined(self.using_remote_turret) && self.using_remote_turret) + { + return 1; + } + + if(isdefined(self.using_remote_tank) && self.using_remote_tank) + { + return 1; + } + + return 0; +} + +//Function Number: 26 +hitlocdebug(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = []; + if(!getdvarint("scr_hitloc_debug")) + { + return; + } + + if(!isdefined(param_01.hitlocinited)) + { + for(var_06 = 0;var_06 < 6;var_06++ = var_7B[3]) + { + param_01 setclientdvar("ui_hitloc_" + var_06,""); + } + + param_01.hitlocinited = 1; + } + + if(level.splitscreen || !isplayer(param_01)) + { + return; + } + + var_07 = 6; + if(!isdefined(param_01.damageinfo)) + { + param_01.damageinfo = []; + for(var_06 = 0;var_06 < var_07;var_06++ = 7) + { + param_01.damageinfo[var_06] = spawnstruct(); + param_01.damageinfo[var_06].damage = 0; + param_01.damageinfo[var_06].hitloc = ""; + param_01.damageinfo[var_06].bp = 0; + param_01.damageinfo[var_06].jugg = 0; + param_01.damageinfo[var_06].colorindex = 0; + } + + param_01.damageinfocolorindex = 0; + param_01.damageinfovictim = undefined; + } + + for(var_06 = var_07 - 1;var_06 > 0;var_06-- = var_7B[2]) + { + param_01.damageinfo[var_06].damage = param_01.damageinfo[var_06 - 1].damage; + param_01.damageinfo[var_06].hitloc = param_01.damageinfo[var_06 - 1].hitloc; + param_01.damageinfo[var_06].bp = param_01.damageinfo[var_06 - 1].bp; + param_01.damageinfo[var_06].jugg = param_01.damageinfo[var_06 - 1].jugg; + param_01.damageinfo[var_06].colorindex = param_01.damageinfo[var_06 - 1].colorindex; + } + + param_01.damageinfo[0].damage = param_03; + param_01.damageinfo[0].hitloc = param_04; + param_01.damageinfo[0].bp = var_05 & level.idflags_penetration; + param_01.damageinfo[0].jugg = param_02 maps\mp\_utility::isjuggernaut(); + if(isdefined(param_01.damageinfovictim) && param_01.damageinfovictim != param_02) + { + param_01.damageinfocolorindex++ = 5; + if(param_01.damageinfocolorindex == var_7B.size) + { + param_01.damageinfocolorindex = 0; + } + } + + param_01.damageinfovictim = param_02; + param_01.damageinfo[0].colorindex = param_01.damageinfocolorindex; + for(var_06 = 0;var_06 < var_07;var_06++ = var_7B[1]) + { + var_08 = "^" + var_7B[param_01.damageinfo[var_06].colorindex]; + if(param_01.damageinfo[var_06].hitloc != "") + { + var_09 = var_08 + param_01.damageinfo[var_06].hitloc; + if(param_01.damageinfo[var_06].bp) + { + var_09 = var_09 + " (BP)"; + } + + if(param_01.damageinfo[var_06].jugg) + { + var_09 = var_09 + " (Jugg)"; + } + + param_01 setclientdvar("ui_hitloc_" + var_06,var_09); + } + + param_01 setclientdvar("ui_hitloc_damage_" + var_06,var_08 + param_01.damageinfo[var_06].damage); + } +} + +//Function Number: 27 +giverecentshieldxp() +{ + self endon("death"); + self endon("disconnect"); + self notify("giveRecentShieldXP"); + self endon("giveRecentShieldXP"); + self.recentshieldxp++; + wait 20; + self.recentshieldxp = 0; +} + +//Function Number: 28 +callback_playerdamage_internal(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A) +{ + if(!maps\mp\_utility::isreallyalive(param_02)) + { + return; + } + + if(isdefined(param_01) && param_01.classname == "script_origin" && isdefined(param_01.type) && param_01.type == "soft_landing") + { + return; + } + + if(param_06 == "killstreak_emp_mp") + { + return; + } + + if(param_06 == "bouncingbetty_mp" && !maps\mp\gametypes\_weapons::minedamageheightpassed(param_00,param_02)) + { + return; + } + + if(param_06 == "bouncingbetty_mp" && param_02 getstance() == "crouch" || param_02 getstance() == "prone") + { + param_03 = int(param_03 / 2); + } + + if(param_06 == "xm25_mp" && param_05 == "MOD_IMPACT") + { + param_03 = 95; + } + + if(param_06 == "emp_grenade_mp" && param_05 != "MOD_IMPACT") + { + param_02 notify("emp_grenaded",param_01); + } + + if(isdefined(level.hostmigrationtimer)) + { + return; + } + + if(param_05 == "MOD_FALLING") + { + param_02 thread emitfalldamage(param_03); + } + + if(param_05 == "MOD_EXPLOSIVE_BULLET" && param_03 != 1) + { + param_03 = param_03 * getdvarfloat("scr_explBulletMod"); + param_03 = int(param_03); + } + + if(isdefined(param_01) && param_01.classname == "worldspawn") + { + param_01 = undefined; + } + + if(isdefined(param_01) && isdefined(param_01.gunner)) + { + param_01 = param_01.gunner; + } + + var_0B = isdefined(param_01) && !isdefined(param_01.gunner) && param_01.classname == "script_vehicle" || param_01.classname == "misc_turret" || param_01.classname == "script_model"; + var_0C = level.teambased && isdefined(param_01) && param_02 != param_01 && isdefined(param_01.team) && param_02.pers["team"] == param_01.team; + var_0D = isdefined(param_01) && isdefined(param_00) && isdefined(param_02) && isplayer(param_01) && param_01 == param_00 && param_01 == param_02; + if(var_0D) + { + return; + } + + var_0E = 0; + if(param_04 & level.idflags_stun) + { + var_0E = 0; + param_03 = 0; + } + else if(param_09 == "shield") + { + if(var_0C && level.friendlyfire == 0) + { + return; + } + + if(param_05 == "MOD_PISTOL_BULLET" || param_05 == "MOD_RIFLE_BULLET" || param_05 == "MOD_EXPLOSIVE_BULLET" && !var_0C) + { + if(isplayer(param_01)) + { + param_01.lastattackedshieldplayer = param_02; + param_01.lastattackedshieldtime = gettime(); + } + + param_02 notify("shield_blocked"); + if(maps\mp\_utility::isenvironmentweapon(param_06)) + { + var_0F = 25; + } + else + { + var_0F = maps\mp\perks\_perks::cac_modified_damage(param_03,param_02,param_04,param_06,param_07,param_08,param_09,param_0A); + } + + param_02.shielddamage = param_02.shielddamage + var_0F; + if(!maps\mp\_utility::isenvironmentweapon(param_06) || common_scripts\utility::cointoss()) + { + param_02.shieldbullethits++; + } + + if(param_02.shieldbullethits >= level.riotshieldxpbullets) + { + if(self.recentshieldxp > 4) + { + var_10 = int(50 / self.recentshieldxp); + } + else + { + var_10 = 50; + } + + param_02 thread maps\mp\gametypes\_rank::giverankxp("shield_damage",var_10); + param_02 thread giverecentshieldxp(); + param_02 thread maps\mp\gametypes\_missions::genericchallenge("shield_damage",param_02.shielddamage); + param_02 thread maps\mp\gametypes\_missions::genericchallenge("shield_bullet_hits",param_02.shieldbullethits); + param_02.shielddamage = 0; + param_02.shieldbullethits = 0; + } + } + + if(param_04 & level.idflags_shield_explosive_impact) + { + if(!var_0C) + { + param_02 thread maps\mp\gametypes\_missions::genericchallenge("shield_explosive_hits",1); + } + + param_09 = "none"; + if(!param_04 & level.idflags_shield_explosive_impact_huge) + { + param_03 = param_03 * 0; + } + } + else if(param_04 & level.idflags_shield_explosive_splash) + { + if(isdefined(param_00) && isdefined(param_00.stuckenemyentity) && param_00.stuckenemyentity == param_02) + { + param_03 = 101; + } + + param_02 thread maps\mp\gametypes\_missions::genericchallenge("shield_explosive_hits",1); + param_09 = "none"; + } + else + { + return; + } + } + else if(param_05 == "MOD_MELEE" && issubstr(param_06,"riotshield")) + { + if(!var_0C && level.friendlyfire == 0) + { + var_0E = 0; + param_02 stunplayer(0); + } + } + + if(!var_0C) + { + param_03 = maps\mp\perks\_perks::cac_modified_damage(param_02,param_01,param_03,param_05,param_06,param_07,param_08,param_09); + } + + if(isdefined(level.modifyplayerdamage)) + { + param_03 = [[ level.modifyplayerdamage ]](param_02,param_01,param_03,param_05,param_06,param_07,param_08,param_09); + } + + if(!param_03) + { + return 0; + } + + param_02.idflags = param_04; + param_02.idflagstime = gettime(); + if(game["state"] == "postgame") + { + return; + } + + if(param_02.sessionteam == "spectator") + { + return; + } + + if(isdefined(param_02.candocombat) && !param_02.candocombat) + { + return; + } + + if(isdefined(param_01) && isplayer(param_01) && isdefined(param_01.candocombat) && !param_01.candocombat) + { + return; + } + + if(var_0B && var_0C) + { + if(param_05 == "MOD_CRUSH") + { + param_02 maps\mp\_utility::_suicide(); + return; + } + + if(!level.friendlyfire) + { + return; + } + } + + if(!isdefined(param_08)) + { + param_04 = param_04 | level.idflags_no_knockback; + } + + var_11 = 0; + if((param_02.health == param_02.maxhealth && !isdefined(param_02.laststand) || !param_02.laststand) || !isdefined(param_02.attackers) && !isdefined(param_02.laststand)) + { + param_02.attackers = []; + param_02.attackerdata = []; + } + + if(isheadshot(param_06,param_09,param_05,param_01)) + { + param_05 = "MOD_HEAD_SHOT"; + } + + if(maps\mp\gametypes\_tweakables::gettweakablevalue("game","onlyheadshots")) + { + if(param_05 == "MOD_PISTOL_BULLET" || param_05 == "MOD_RIFLE_BULLET" || param_05 == "MOD_EXPLOSIVE_BULLET") + { + return; + } + else if(param_05 == "MOD_HEAD_SHOT") + { + param_03 = 150; + } + } + + if(param_06 == "none" && isdefined(param_00)) + { + if(isdefined(param_00.destructible_type) && issubstr(param_00.destructible_type,"vehicle_")) + { + param_06 = "destructible_car"; + } + } + + if(gettime() < param_02.spawntime + level.killstreakspawnshield) + { + var_12 = int(max(param_02.health / 4,1)); + if(param_03 >= var_12 && maps\mp\_utility::iskillstreakweapon(param_06)) + { + param_03 = var_12; + } + } + + if(!param_04 & level.idflags_no_protection) + { + if(!level.teambased && var_0B && isdefined(param_01.owner) && param_01.owner == param_02) + { + if(param_05 == "MOD_CRUSH") + { + param_02 maps\mp\_utility::_suicide(); + } + + return; + } + + if((issubstr(param_05,"MOD_GRENADE") || issubstr(param_05,"MOD_EXPLOSIVE") || issubstr(param_05,"MOD_PROJECTILE")) && isdefined(param_00) && isdefined(param_01)) + { + if(param_02 != param_01 && param_00.classname == "grenade" && param_02.lastspawntime + 3500 > gettime() && isdefined(param_02.lastspawnpoint) && distance(param_00.origin,param_02.lastspawnpoint.origin) < 250) + { + return; + } + + param_02.explosiveinfo = []; + param_02.explosiveinfo["damageTime"] = gettime(); + param_02.explosiveinfo["damageId"] = param_00 getentitynumber(); + param_02.explosiveinfo["returnToSender"] = 0; + param_02.explosiveinfo["counterKill"] = 0; + param_02.explosiveinfo["chainKill"] = 0; + param_02.explosiveinfo["cookedKill"] = 0; + param_02.explosiveinfo["throwbackKill"] = 0; + param_02.explosiveinfo["suicideGrenadeKill"] = 0; + param_02.explosiveinfo["weapon"] = param_06; + var_13 = issubstr(param_06,"frag_"); + if(param_01 != param_02) + { + if((issubstr(param_06,"c4_") || issubstr(param_06,"claymore_")) && isdefined(param_01) && isdefined(param_00.owner)) + { + param_02.explosiveinfo["returnToSender"] = param_00.owner == param_02; + param_02.explosiveinfo["counterKill"] = isdefined(param_00.wasdamaged); + param_02.explosiveinfo["chainKill"] = isdefined(param_00.waschained); + param_02.explosiveinfo["bulletPenetrationKill"] = isdefined(param_00.wasdamagedfrombulletpenetration); + param_02.explosiveinfo["cookedKill"] = 0; + } + + if(isdefined(param_01.lastgrenadesuicidetime) && param_01.lastgrenadesuicidetime >= gettime() - 50 && var_13) + { + param_02.explosiveinfo["suicideGrenadeKill"] = 1; + } + } + + if(var_13) + { + param_02.explosiveinfo["cookedKill"] = isdefined(param_00.iscooked); + param_02.explosiveinfo["throwbackKill"] = isdefined(param_00.threwback); + } + + param_02.explosiveinfo["stickKill"] = isdefined(param_00.isstuck) && param_00.isstuck == "enemy"; + param_02.explosiveinfo["stickFriendlyKill"] = isdefined(param_00.isstuck) && param_00.isstuck == "friendly"; + if(isplayer(param_01) && param_01 != self) + { + maps\mp\gametypes\_gamelogic::setinflictorstat(param_00,param_01,param_06); + } + } + + if(isplayer(param_01) && isdefined(param_01.pers["participation"])) + { + param_01.pers["participation"]++; + } + else if(isplayer(param_01)) + { + param_01.pers["participation"] = 1; + } + + var_14 = param_02.health / param_02.maxhealth; + if(var_0C) + { + if(!maps\mp\_utility::matchmakinggame() && isplayer(param_01)) + { + param_01 maps\mp\_utility::incplayerstat("mostff",1); + } + + if(level.friendlyfire == 0 || !isplayer(param_01) && level.friendlyfire != 1) + { + if(param_06 == "artillery_mp" || param_06 == "stealth_bomb_mp") + { + param_02 damageshellshockandrumble(param_00,param_06,param_05,param_03,param_04,param_01); + } + + return; + } + else if(level.friendlyfire == 1) + { + if(param_03 < 1) + { + param_03 = 1; + } + + if(param_02 maps\mp\_utility::isjuggernaut()) + { + param_03 = maps\mp\perks\_perks::cac_modified_damage(param_02,param_01,param_03,param_05,param_06,param_07,param_08,param_09); + } + + param_02.lastdamagewasfromenemy = 0; + param_02 finishplayerdamagewrapper(param_00,param_01,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A,var_0E); + } + else if(level.friendlyfire == 2 && maps\mp\_utility::isreallyalive(param_01)) + { + param_03 = int(param_03 * 0.5); + if(param_03 < 1) + { + param_03 = 1; + } + + param_01.lastdamagewasfromenemy = 0; + param_01.friendlydamage = 1; + param_01 finishplayerdamagewrapper(param_00,param_01,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A,var_0E); + param_01.friendlydamage = undefined; + } + else if(level.friendlyfire == 3 && maps\mp\_utility::isreallyalive(param_01)) + { + param_03 = int(param_03 * 0.5); + if(param_03 < 1) + { + param_03 = 1; + } + + param_02.lastdamagewasfromenemy = 0; + param_01.lastdamagewasfromenemy = 0; + param_02 finishplayerdamagewrapper(param_00,param_01,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A,var_0E); + if(maps\mp\_utility::isreallyalive(param_01)) + { + param_01.friendlydamage = 1; + param_01 finishplayerdamagewrapper(param_00,param_01,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A,var_0E); + param_01.friendlydamage = undefined; + } + } + + var_11 = 1; + } + else + { + if(param_03 < 1) + { + param_03 = 1; + } + + if(isdefined(param_01) && isplayer(param_01)) + { + addattacker(param_02,param_01,param_00,param_06,param_03,param_07,param_08,param_09,param_0A,param_05); + } + + if(param_05 == "MOD_EXPLOSIVE" || param_05 == "MOD_GRENADE_SPLASH" && param_03 < param_02.health) + { + param_02 notify("survived_explosion",param_01); + } + + if(isdefined(param_01)) + { + level.lastlegitimateattacker = param_01; + } + + if(isdefined(param_01) && isplayer(param_01) && isdefined(param_06)) + { + param_01 thread maps\mp\gametypes\_weapons::checkhit(param_06,param_02); + } + + if(isdefined(param_01) && isplayer(param_01) && isdefined(param_06) && param_01 != param_02) + { + param_01 thread maps\mp\_events::damagedplayer(self,param_03,param_06); + param_02.attackerposition = param_01.origin; + } + else + { + param_02.attackerposition = undefined; + } + + if(issubstr(param_05,"MOD_GRENADE") && isdefined(param_00.iscooked)) + { + param_02.wascooked = gettime(); + } + else + { + param_02.wascooked = undefined; + } + + param_02.lastdamagewasfromenemy = isdefined(param_01) && param_01 != param_02; + if(param_02.lastdamagewasfromenemy) + { + param_01.damagedplayers[param_02.guid] = gettime(); + } + + param_02 finishplayerdamagewrapper(param_00,param_01,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A,var_0E); + if(isdefined(level.ac130player) && isdefined(param_01) && level.ac130player == param_01) + { + level notify("ai_pain",param_02); + } + + param_02 thread maps\mp\gametypes\_missions::playerdamaged(param_00,param_01,param_03,param_05,param_06,param_09); + } + + if(var_0B && isdefined(param_01.gunner)) + { + var_15 = param_01.gunner; + } + else + { + var_15 = param_02; + } + + if(isdefined(var_15) && var_15 != param_02 && param_03 > 0 && !isdefined(param_09) || param_09 != "shield") + { + if(param_04 & level.idflags_stun) + { + var_16 = "stun"; + } + else if(isexplosivedamagemod(param_06) && param_03 maps\mp\_utility::_hasperk("_specialty_blastshield")) + { + var_16 = "hitBodyArmor"; + } + else if(param_03 maps\mp\_utility::_hasperk("specialty_combathigh")) + { + var_16 = "hitEndGame"; + } + else if(isdefined(param_03.haslightarmor)) + { + var_16 = "hitLightArmor"; + } + else if(param_03 maps\mp\_utility::isjuggernaut()) + { + var_16 = "hitJuggernaut"; + } + else if(!shouldweaponfeedback(param_07)) + { + var_16 = "none"; + } + else + { + var_16 = "standard"; + } + + var_15 thread maps\mp\gametypes\_damagefeedback::updatedamagefeedback(var_16); + } + + param_02.hasdonecombat = 1; + } + + if(isdefined(param_01) && param_01 != param_02 && !var_11) + { + level.usestartspawns = 0; + } + + if(param_03 > 0 && isdefined(param_01) && !param_02 maps\mp\_utility::isusingremote()) + { + param_02 thread maps\mp\gametypes\_shellshock::bloodeffect(param_01.origin); + } + + if(param_02.sessionstate != "dead") + { + var_17 = param_02 getentitynumber(); + var_18 = param_02.name; + var_19 = param_02.pers["team"]; + var_1A = param_02.guid; + var_1B = ""; + if(isplayer(param_01)) + { + var_1C = param_01 getentitynumber(); + var_1D = param_01.guid; + var_1E = param_01.name; + var_1B = param_01.pers["team"]; + } + else + { + var_1C = -1; + var_1D = ""; + var_1E = ""; + var_1B = "world"; + } + + logprint("D;" + var_1A + ";" + var_17 + ";" + var_19 + ";" + var_18 + ";" + var_1D + ";" + var_1C + ";" + var_1B + ";" + var_1E + ";" + param_06 + ";" + param_03 + ";" + param_05 + ";" + param_09 + "\n"); + } + + hitlocdebug(param_01,param_02,param_03,param_09,param_04); + if(isdefined(param_01) && param_01 != param_02) + { + if(isplayer(param_01)) + { + param_01 maps\mp\_utility::incplayerstat("damagedone",param_03); + } + + param_02 maps\mp\_utility::incplayerstat("damagetaken",param_03); + } +} + +//Function Number: 29 +shouldweaponfeedback(param_00) +{ + switch(param_00) + { + case "stealth_bomb_mp": + case "artillery_mp": + return 0; + } + + return 1; +} + +//Function Number: 30 +checkvictimstutter(param_00,param_01,param_02,param_03,param_04) +{ + if(param_04 == "MOD_PISTOL_BULLET" || param_04 == "MOD_RIFLE_BULLET" || param_04 == "MOD_HEAD_SHOT") + { + if(distance(param_00.origin,param_01.origin) > 256) + { + return; + } + + var_05 = param_00 getvelocity(); + if(lengthsquared(var_05) < 10) + { + return; + } + + var_06 = maps\mp\_utility::findisfacing(param_00,param_01,25); + if(var_06) + { + param_00 thread stutterstep(); + } + } +} + +//Function Number: 31 +stutterstep(param_00) +{ + self endon("disconnect"); + self endon("death"); + level endon("game_ended"); + self.instutter = 1; + self.movespeedscaler = 0.05; + maps\mp\gametypes\_weapons::updatemovespeedscale(); + wait 0.5; + self.movespeedscaler = 1; + if(maps\mp\_utility::_hasperk("specialty_lightweight")) + { + self.movespeedscaler = maps\mp\_utility::lightweightscalar(); + } + + maps\mp\gametypes\_weapons::updatemovespeedscale(); + self.instutter = 0; +} + +//Function Number: 32 +addattacker(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09) +{ + if(!isdefined(param_00.attackerdata)) + { + param_00.attackerdata = []; + } + + if(!isdefined(param_00.attackerdata[param_01.guid])) + { + param_00.attackers[param_01.guid] = param_01; + param_00.attackerdata[param_01.guid] = spawnstruct(); + param_00.attackerdata[param_01.guid].damage = 0; + param_00.attackerdata[param_01.guid].attackerent = param_01; + param_00.attackerdata[param_01.guid].firsttimedamaged = gettime(); + } + + if(maps\mp\gametypes\_weapons::isprimaryweapon(param_03) && !maps\mp\gametypes\_weapons::issidearm(param_03)) + { + param_00.attackerdata[param_01.guid].isprimary = 1; + } + + param_00.attackerdata[param_01.guid].damage = param_00.attackerdata[param_01.guid].damage + param_04; + param_00.attackerdata[param_01.guid].weapon = param_03; + param_00.attackerdata[param_01.guid].vpoint = param_05; + param_00.attackerdata[param_01.guid].vdir = param_06; + param_00.attackerdata[param_01.guid].shitloc = param_07; + param_00.attackerdata[param_01.guid].psoffsettime = param_08; + param_00.attackerdata[param_01.guid].smeansofdeath = param_09; + param_00.attackerdata[param_01.guid].attackerent = param_01; + param_00.attackerdata[param_01.guid].lasttimedamaged = gettime(); + if(isdefined(param_02) && !isplayer(param_02) && isdefined(param_02.primaryweapon)) + { + param_00.attackerdata[param_01.guid].sprimaryweapon = param_02.primaryweapon; + return; + } + + if(isdefined(param_01) && isplayer(param_01) && param_01 getcurrentprimaryweapon() != "none") + { + param_00.attackerdata[param_01.guid].sprimaryweapon = param_01 getcurrentprimaryweapon(); + return; + } + + param_00.attackerdata[param_01.guid].sprimaryweapon = undefined; +} + +//Function Number: 33 +resetattackerlist() +{ + self endon("disconnect"); + self endon("death"); + level endon("game_ended"); + wait 1.75; + self.attackers = []; + self.attackerdata = []; +} + +//Function Number: 34 +callback_playerdamage(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09) +{ + callback_playerdamage_internal(param_00,param_01,self,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09); +} + +//Function Number: 35 +finishplayerdamagewrapper(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A) +{ + if(maps\mp\_utility::isusingremote() && param_02 >= self.health && !param_03 & level.idflags_stun) + { + if(!isdefined(param_07)) + { + param_07 = (0,0,0); + } + + if(!isdefined(param_01) && !isdefined(param_00)) + { + param_01 = self; + param_00 = param_01; + } + + playerkilled_internal(param_00,param_01,self,param_02,param_04,param_05,param_07,param_08,param_09,0,1); + } + else + { + if(!callback_killingblow(param_00,param_01,param_02 - param_02 * param_0A,param_03,param_04,param_05,param_06,param_07,param_08,param_09)) + { + return; + } + + if(!isalive(self)) + { + return; + } + + self finishplayerdamage(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A); + } + + if(param_04 == "MOD_EXPLOSIVE_BULLET") + { + self shellshock("damage_mp",getdvarfloat("scr_csmode")); + } + + damageshellshockandrumble(param_00,param_05,param_04,param_02,param_03,param_01); +} + +//Function Number: 36 +callback_playerlaststand(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08) +{ + var_09 = spawnstruct(); + var_09.einflictor = param_00; + var_09.attacker = param_01; + var_09.idamage = param_02; + var_09.attackerposition = param_01.origin; + if(param_01 == self) + { + var_09.smeansofdeath = "MOD_SUICIDE"; + } + else + { + var_09.smeansofdeath = param_03; + } + + var_09.sweapon = param_04; + if(isdefined(param_01) && isplayer(param_01) && param_01 getcurrentprimaryweapon() != "none") + { + var_09.sprimaryweapon = param_01 getcurrentprimaryweapon(); + } + else + { + var_09.sprimaryweapon = undefined; + } + + var_09.vdir = param_05; + var_09.shitloc = param_06; + var_09.laststandstarttime = gettime(); + var_0A = maydolaststand(param_04,param_03,param_06); + if(isdefined(self.endgame)) + { + var_0A = 0; + } + + if(level.teambased && isdefined(param_01.team) && param_01.team == self.team) + { + var_0A = 0; + } + + if(!var_0A) + { + self.laststandparams = var_09; + self.uselaststandparams = 1; + maps\mp\_utility::_suicide(); + return; + } + + self.inlaststand = 1; + var_0B = spawnstruct(); + if(maps\mp\_utility::_hasperk("specialty_finalstand")) + { + var_0B.titletext = game["strings"]["final_stand"]; + var_0B.iconname = "specialty_finalstand"; + } + else if(maps\mp\_utility::_hasperk("specialty_c4death")) + { + var_0B.titletext = game["strings"]["c4_death"]; + var_0B.iconname = "specialty_c4death"; + } + else + { + var_0B.titletext = game["strings"]["last_stand"]; + var_0B.iconname = "specialty_pistoldeath"; + } + + var_0B.glowcolor = (1,0,0); + var_0B.sound = "mp_last_stand"; + var_0B.duration = 2; + self.health = 1; + thread maps\mp\gametypes\_hud_message::notifymessage(var_0B); + var_0C = "frag_grenade_mp"; + if(isdefined(level.ac130player) && isdefined(param_01) && level.ac130player == param_01) + { + level notify("ai_crawling",self); + } + + if(maps\mp\_utility::_hasperk("specialty_finalstand")) + { + self.laststandparams = var_09; + self.infinalstand = 1; + var_0D = self getweaponslistexclusives(); + foreach(var_0F in var_0D) + { + self takeweapon(var_0F); + } + + common_scripts\utility::_disableusability(); + thread enablelaststandweapons(); + thread laststandtimer(20,1); + return; + } + + if(maps\mp\_utility::_hasperk("specialty_c4death")) + { + self.previousprimary = self.lastdroppableweapon; + self.laststandparams = var_09; + self takeallweapons(); + self giveweapon("c4death_mp",0,0); + self switchtoweapon("c4death_mp"); + common_scripts\utility::_disableusability(); + self.inc4death = 1; + thread laststandtimer(20,0); + thread detonateonuse(); + thread detonateondeath(); + return; + } + + if(level.diehardmode) + { + self.laststandparams = var_09; + thread enablelaststandweapons(); + thread laststandtimer(20,0); + common_scripts\utility::_disableusability(); + return; + } + + self.laststandparams = var_09; + var_11 = undefined; + var_12 = self getweaponslistprimaries(); + foreach(var_0F in var_12) + { + if(maps\mp\gametypes\_weapons::issidearm(var_0F)) + { + var_11 = var_0F; + } + } + + if(!isdefined(var_11)) + { + var_11 = "iw5_usp45_mp"; + maps\mp\_utility::_giveweapon(var_11); + } + + self givemaxammo(var_11); + self disableweaponswitch(); + common_scripts\utility::_disableusability(); + if(!maps\mp\_utility::_hasperk("specialty_laststandoffhand")) + { + self disableoffhandweapons(); + } + + self switchtoweapon(var_11); + thread laststandtimer(10,0); +} + +//Function Number: 37 +dieaftertime(param_00) +{ + self endon("death"); + self endon("disconnect"); + self endon("joined_team"); + level endon("game_ended"); + wait param_00; + self.uselaststandparams = 1; + maps\mp\_utility::_suicide(); +} + +//Function Number: 38 +detonateonuse() +{ + self endon("death"); + self endon("disconnect"); + self endon("joined_team"); + level endon("game_ended"); + self waittill("detonate"); + self.uselaststandparams = 1; + c4deathdetonate(); +} + +//Function Number: 39 +detonateondeath() +{ + self endon("detonate"); + self endon("disconnect"); + self endon("joined_team"); + level endon("game_ended"); + self waittill("death"); + c4deathdetonate(); +} + +//Function Number: 40 +c4deathdetonate() +{ + self playsound("detpack_explo_default"); + self.c4deatheffect = playfx(level.c4death,self.origin); + radiusdamage(self.origin,400,100,100,self); + if(isalive(self)) + { + maps\mp\_utility::_suicide(); + } +} + +//Function Number: 41 +enablelaststandweapons() +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + maps\mp\_utility::freezecontrolswrapper(1); + wait 0.3; + maps\mp\_utility::freezecontrolswrapper(0); +} + +//Function Number: 42 +laststandtimer(param_00,param_01) +{ + self endon("death"); + self endon("disconnect"); + self endon("revive"); + level endon("game_ended"); + level notify("player_last_stand"); + thread laststandwaittilldeath(); + self.laststand = 1; + if(!param_01 && !level.diehardmode && !isdefined(self.inc4death) || !self.inc4death) + { + thread laststandallowsuicide(); + maps\mp\_utility::setlowermessage("last_stand",&"PLATFORM_COWARDS_WAY_OUT",undefined,undefined,undefined,undefined,undefined,undefined,1); + thread laststandkeepoverlay(); + } + + if(level.diehardmode == 1 && level.diehardmode != 2) + { + var_02 = spawn("script_model",self.origin); + var_02 setmodel("tag_origin"); + var_02 setcursorhint("HINT_NOICON"); + var_02 sethintstring(&"PLATFORM_REVIVE"); + var_02 revivesetup(self); + var_02 endon("death"); + var_03 = newteamhudelem(self.team); + var_03 setshader("waypoint_revive",8,8); + var_03 setwaypoint(1,1); + var_03 settargetent(self); + var_03 thread destroyonreviveentdeath(var_02); + var_03.color = (0.33,0.75,0.24); + maps\mp\_utility::playdeathsound(); + if(param_01) + { + wait param_00; + if(self.infinalstand) + { + thread laststandbleedout(param_01,var_02); + } + } + + return; + } + else if(level.diehardmode == 2) + { + thread laststandkeepoverlay(); + var_02 = spawn("script_model",self.origin); + var_03 setmodel("tag_origin"); + var_03 setcursorhint("HINT_NOICON"); + var_03 sethintstring(&"PLATFORM_REVIVE"); + var_03 revivesetup(self); + var_03 endon("death"); + var_03 = newteamhudelem(self.team); + var_03 setshader("waypoint_revive",8,8); + var_03 setwaypoint(1,1); + var_03 settargetent(self); + var_03 thread destroyonreviveentdeath(var_02); + var_03.color = (0.33,0.75,0.24); + maps\mp\_utility::playdeathsound(); + if(param_01) + { + wait param_00; + if(self.infinalstand) + { + thread laststandbleedout(param_01,var_02); + } + } + + wait param_00 / 3; + var_03.color = (1,0.64,0); + while(var_02.inuse) + { + wait 0.05; + } + + maps\mp\_utility::playdeathsound(); + wait param_00 / 3; + var_03.color = (1,0,0); + while(var_02.inuse) + { + wait 0.05; + } + + maps\mp\_utility::playdeathsound(); + wait param_00 / 3; + while(var_02.inuse) + { + wait 0.05; + } + + wait 0.05; + thread laststandbleedout(param_01); + return; + } + + thread laststandkeepoverlay(); + wait var_02; + thread laststandbleedout(var_03); +} + +//Function Number: 43 +maxhealthoverlay(param_00,param_01) +{ + self endon("stop_maxHealthOverlay"); + self endon("revive"); + self endon("death"); + for(;;) + { + self.health = self.health - 1; + self.maxhealth = param_00; + wait 0.05; + self.maxhealth = 50; + self.health = self.health + 1; + wait 0.5; + } +} + +//Function Number: 44 +laststandbleedout(param_00,param_01) +{ + if(param_00) + { + self.laststand = undefined; + self.infinalstand = 0; + self notify("revive"); + maps\mp\_utility::clearlowermessage("last_stand"); + maps\mp\gametypes\_playerlogic::laststandrespawnplayer(); + if(isdefined(param_01)) + { + param_01 delete(); + return; + } + + return; + } + + self.uselaststandparams = 1; + self.beingrevived = 0; + maps\mp\_utility::_suicide(); +} + +//Function Number: 45 +laststandallowsuicide() +{ + self endon("death"); + self endon("disconnect"); + self endon("game_ended"); + self endon("revive"); + for(;;) + { + if(self usebuttonpressed()) + { + var_00 = gettime(); + while(self usebuttonpressed()) + { + wait 0.05; + if(gettime() - var_00 > 700) + { + break; + } + } + + if(gettime() - var_00 > 700) + { + break; + } + } + + wait 0.05; + } + + thread laststandbleedout(0); +} + +//Function Number: 46 +laststandkeepoverlay() +{ + level endon("game_ended"); + self endon("death"); + self endon("disconnect"); + self endon("revive"); + while(!level.gameended) + { + self.health = 2; + wait 0.05; + self.health = 1; + wait 0.5; + } + + self.health = self.maxhealth; +} + +//Function Number: 47 +laststandwaittilldeath() +{ + self endon("disconnect"); + self endon("revive"); + level endon("game_ended"); + self waittill("death"); + maps\mp\_utility::clearlowermessage("last_stand"); + self.laststand = undefined; +} + +//Function Number: 48 +maydolaststand(param_00,param_01,param_02) +{ + if(param_01 == "MOD_TRIGGER_HURT") + { + return 0; + } + + if(param_01 != "MOD_PISTOL_BULLET" && param_01 != "MOD_RIFLE_BULLET" && param_01 != "MOD_FALLING" && param_01 != "MOD_EXPLOSIVE_BULLET") + { + return 0; + } + + if(param_01 == "MOD_IMPACT" && param_00 == "throwingknife_mp") + { + return 0; + } + + if(param_01 == "MOD_IMPACT" && param_00 == "m79_mp" || issubstr(param_00,"gl_")) + { + return 0; + } + + if(isheadshot(param_00,param_02,param_01)) + { + return 0; + } + + if(maps\mp\_utility::isusingremote()) + { + return 0; + } + + return 1; +} + +//Function Number: 49 +ensurelaststandparamsvalidity() +{ + if(!isdefined(self.laststandparams.attacker)) + { + self.laststandparams.attacker = self; + } +} + +//Function Number: 50 +gethitlocheight(param_00) +{ + switch(param_00) + { + case "neck": + case "head": + case "helmet": + return 60; + + case "gun": + case "right_hand": + case "left_hand": + case "right_arm_lower": + case "left_arm_lower": + case "right_arm_upper": + case "left_arm_upper": + case "torso_upper": + return 48; + + case "torso_lower": + return 40; + + case "right_leg_upper": + case "left_leg_upper": + return 32; + + case "right_leg_lower": + case "left_leg_lower": + return 10; + + case "right_foot": + case "left_foot": + return 5; + } + + return 48; +} + +//Function Number: 51 +delaystartragdoll(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if(isdefined(param_00)) + { + var_06 = param_00 getcorpseanim(); + if(animhasnotetrack(var_06,"ignore_ragdoll")) + { + return; + } + } + + if(isdefined(level.noragdollents) && level.noragdollents.size) + { + foreach(var_08 in level.noragdollents) + { + if(distancesquared(param_00.origin,var_08.origin) < 65536) + { + return; + } + } + } + + wait 0.2; + if(!isdefined(param_00)) + { + return; + } + + if(param_00 isragdoll()) + { + return; + } + + var_06 = param_00 getcorpseanim(); + var_0A = 0.35; + if(animhasnotetrack(var_06,"start_ragdoll")) + { + var_0B = getnotetracktimes(var_06,"start_ragdoll"); + if(isdefined(var_0B)) + { + var_0A = var_0B[0]; + } + } + + var_0C = var_0A * getanimlength(var_06); + wait var_0C; + if(isdefined(param_00)) + { + param_00 startragdoll(1); + } +} + +//Function Number: 52 +getmostkilledby() +{ + var_00 = ""; + var_01 = 0; + var_02 = getarraykeys(self.killedby); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + var_04 = var_02[var_03]; + if(self.killedby[var_04] <= var_01) + { + continue; + } + + var_01 = self.killedby[var_04]; + var_05 = var_04; + } + + return var_00; +} + +//Function Number: 53 +getmostkilled() +{ + var_00 = ""; + var_01 = 0; + var_02 = getarraykeys(self.killedplayers); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + var_04 = var_02[var_03]; + if(self.killedplayers[var_04] <= var_01) + { + continue; + } + + var_01 = self.killedplayers[var_04]; + var_00 = var_04; + } + + return var_00; +} + +//Function Number: 54 +damageshellshockandrumble(param_00,param_01,param_02,param_03,param_04,param_05) +{ + thread maps\mp\gametypes\_weapons::onweapondamage(param_00,param_01,param_02,param_03,param_05); + self playrumbleonentity("damage_heavy"); +} + +//Function Number: 55 +revivesetup(param_00) +{ + var_01 = param_00.team; + self linkto(param_00,"tag_origin"); + self.owner = param_00; + self.inuse = 0; + self makeusable(); + updateusablebyteam(var_01); + thread trackteamchanges(var_01); + thread revivetriggerthink(var_01); + thread deleteonreviveordeathordisconnect(); +} + +//Function Number: 56 +deleteonreviveordeathordisconnect() +{ + self endon("death"); + self.owner common_scripts\utility::waittill_any("death","disconnect"); + self delete(); +} + +//Function Number: 57 +updateusablebyteam(param_00) +{ + foreach(var_02 in level.players) + { + if(param_00 == var_02.team && var_02 != self.owner) + { + self enableplayeruse(var_02); + continue; + } + + self disableplayeruse(var_02); + } +} + +//Function Number: 58 +trackteamchanges(param_00) +{ + self endon("death"); + for(;;) + { + level waittill("joined_team"); + updateusablebyteam(param_00); + } +} + +//Function Number: 59 +tracklaststandchanges(param_00) +{ + self endon("death"); + for(;;) + { + level waittill("player_last_stand"); + updateusablebyteam(param_00); + } +} + +//Function Number: 60 +revivetriggerthink(param_00) +{ + self endon("death"); + level endon("game_ended"); + for(;;) + { + self waittill("trigger",var_01); + self.owner.beingrevived = 1; + if(isdefined(var_01.beingrevived) && var_01.beingrevived) + { + self.owner.beingrevived = 0; + continue; + } + + self makeunusable(); + self.owner maps\mp\_utility::freezecontrolswrapper(1); + var_02 = useholdthink(var_01); + self.owner.beingrevived = 0; + if(!isalive(self.owner)) + { + self delete(); + return; + } + + self.owner maps\mp\_utility::freezecontrolswrapper(0); + if(var_02) + { + var_01 thread maps\mp\gametypes\_hud_message::splashnotifydelayed("reviver",200); + var_01 thread maps\mp\gametypes\_rank::giverankxp("reviver",200); + self.owner.laststand = undefined; + self.owner maps\mp\_utility::clearlowermessage("last_stand"); + self.owner.movespeedscaler = 1; + if(self.owner maps\mp\_utility::_hasperk("specialty_lightweight")) + { + self.owner.movespeedscaler = maps\mp\_utility::lightweightscalar(); + } + + self.owner.maxhealth = 100; + self.owner maps\mp\gametypes\_weapons::updatemovespeedscale(); + self.owner maps\mp\gametypes\_playerlogic::laststandrespawnplayer(); + self.owner maps\mp\_utility::giveperk("specialty_pistoldeath",0); + self.owner.beingrevived = 0; + self delete(); + return; + } + + self makeusable(); + updateusablebyteam(param_00); + } +} + +//Function Number: 61 +useholdthink(param_00) +{ + var_01 = spawn("script_origin",self.origin); + var_01 hide(); + param_00 playerlinkto(var_01); + param_00 playerlinkedoffsetenable(); + param_00 common_scripts\utility::_disableweapon(); + self.curprogress = 0; + self.inuse = 1; + self.userate = 0; + self.usetime = 3000; + param_00 thread personalusebar(self); + var_02 = useholdthinkloop(param_00); + if(isdefined(param_00) && maps\mp\_utility::isreallyalive(param_00)) + { + param_00 unlink(); + param_00 common_scripts\utility::_enableweapon(); + } + + if(isdefined(var_02) && var_02) + { + self.owner thread maps\mp\gametypes\_hud_message::playercardsplashnotify("revived",param_00); + self.owner.inlaststand = 0; + return 1; + } + + self.inuse = 0; + var_01 delete(); + return 0; +} + +//Function Number: 62 +personalusebar(param_00) +{ + var_01 = maps\mp\gametypes\_hud_util::createprimaryprogressbar(); + var_02 = maps\mp\gametypes\_hud_util::createprimaryprogressbartext(); + var_02 settext(&"MPUI_REVIVING"); + var_03 = param_00.owner maps\mp\gametypes\_hud_util::createprimaryprogressbar(); + var_04 = param_00.owner maps\mp\gametypes\_hud_util::createprimaryprogressbartext(); + var_04 settext(&"MPUI_BEING_REVIVED"); + var_05 = -1; + while(maps\mp\_utility::isreallyalive(self) && isdefined(param_00) && param_00.inuse && !level.gameended && isdefined(self)) + { + if(var_05 != param_00.userate) + { + if(param_00.curprogress > param_00.usetime) + { + param_00.curprogress = param_00.usetime; + } + + var_01 maps\mp\gametypes\_hud_util::updatebar(param_00.curprogress / param_00.usetime,1000 / param_00.usetime * param_00.userate); + var_03 maps\mp\gametypes\_hud_util::updatebar(param_00.curprogress / param_00.usetime,1000 / param_00.usetime * param_00.userate); + if(!param_00.userate) + { + var_01 maps\mp\gametypes\_hud_util::hideelem(); + var_02 maps\mp\gametypes\_hud_util::hideelem(); + var_03 maps\mp\gametypes\_hud_util::hideelem(); + var_04 maps\mp\gametypes\_hud_util::hideelem(); + } + else + { + var_01 maps\mp\gametypes\_hud_util::showelem(); + var_02 maps\mp\gametypes\_hud_util::showelem(); + var_03 maps\mp\gametypes\_hud_util::showelem(); + var_04 maps\mp\gametypes\_hud_util::showelem(); + } + } + + var_05 = param_00.userate; + wait 0.05; + } + + if(isdefined(var_01)) + { + var_01 maps\mp\gametypes\_hud_util::destroyelem(); + } + + if(isdefined(var_02)) + { + var_02 maps\mp\gametypes\_hud_util::destroyelem(); + } + + if(isdefined(var_03)) + { + var_03 maps\mp\gametypes\_hud_util::destroyelem(); + } + + if(isdefined(var_04)) + { + var_04 maps\mp\gametypes\_hud_util::destroyelem(); + } +} + +//Function Number: 63 +useholdthinkloop(param_00) +{ + level endon("game_ended"); + self.owner endon("death"); + self.owner endon("disconnect"); + while(maps\mp\_utility::isreallyalive(param_00) && param_00 usebuttonpressed() && self.curprogress < self.usetime) + { + self.curprogress = self.curprogress + 50 * self.userate; + self.userate = 1; + if(self.curprogress >= self.usetime) + { + self.inuse = 0; + return maps\mp\_utility::isreallyalive(param_00); + } + + wait 0.05; + } + + return 0; +} + +//Function Number: 64 +callback_killingblow(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09) +{ + if(isdefined(self.lastdamagewasfromenemy) && self.lastdamagewasfromenemy && param_02 >= self.health && isdefined(self.combathigh) && self.combathigh == "specialty_endgame") + { + maps\mp\_utility::giveperk("specialty_endgame",0); + return 0; + } + + return 1; +} + +//Function Number: 65 +emitfalldamage(param_00) +{ + physicsexplosionsphere(self.origin,64,64,1); + var_01 = []; + for(var_02 = 0;var_02 < 360;var_02 = var_02 + 30) + { + var_03 = cos(var_02) * 16; + var_04 = sin(var_02) * 16; + var_05 = bullettrace(self.origin + (var_03,var_04,4),self.origin + (var_03,var_04,-6),1,self); + if(isdefined(var_05["entity"]) && isdefined(var_05["entity"].targetname) && var_05["entity"].targetname == "destructible_vehicle" || var_05["entity"].targetname == "destructible_toy") + { + var_01[var_01.size] = var_05["entity"]; + } + } + + if(var_01.size) + { + var_06 = spawn("script_origin",self.origin); + var_06 hide(); + var_06.type = "soft_landing"; + var_06.destructibles = var_01; + radiusdamage(self.origin,64,100,100,var_06); + wait 0.1; + var_06 delete(); + } +} + +//Function Number: 66 +drawline(param_00,param_01,param_02) +{ + var_03 = int(param_02 * 20); + for(var_04 = 0;var_04 < var_03;var_04++) + { + wait 0.05; + } +} + +//Function Number: 67 +isflankkill(param_00,param_01) +{ + var_02 = anglestoforward(param_00.angles); + var_02 = (var_02[0],var_02[1],0); + var_02 = vectornormalize(var_02); + var_03 = param_00.origin - param_01.origin; + var_03 = (var_03[0],var_03[1],0); + var_03 = vectornormalize(var_03); + var_04 = vectordot(var_02,var_03); + if(var_04 > 0) + { + return 1; + } + + return 0; +} + +//Function Number: 68 +_obituary(param_00,param_01,param_02,param_03) +{ + var_04 = param_00.team; + foreach(var_06 in level.players) + { + var_07 = var_06.team; + if(var_07 == "spectator") + { + var_06 iprintln(&"MP_OBITUARY_NEUTRAL",param_01.name,param_00.name); + continue; + } + + if(var_07 == var_04) + { + var_06 iprintln(&"MP_OBITUARY_ENEMY",param_01.name,param_00.name); + continue; + } + + var_06 iprintln(&"MP_OBITUARY_FRIENDLY",param_01.name,param_00.name); + } +} + +//Function Number: 69 +logprintplayerdeath(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + var_07 = self getentitynumber(); + var_08 = self.name; + var_09 = self.team; + var_0A = self.guid; + if(isplayer(param_01)) + { + var_0B = param_01.guid; + var_0C = param_01.name; + var_0D = param_01.team; + var_0E = param_01 getentitynumber(); + var_0F = param_01 getxuid() + "(" + var_0C + ")"; + } + else + { + var_0B = ""; + var_0C = ""; + var_0D = "world"; + var_0E = -1; + var_0F = "none"; + } + + logprint("K;" + var_0A + ";" + var_07 + ";" + var_09 + ";" + var_08 + ";" + var_0B + ";" + var_0E + ";" + var_0D + ";" + var_0C + ";" + param_04 + ";" + param_02 + ";" + param_03 + ";" + param_06 + "\n"); +} + +//Function Number: 70 +destroyonreviveentdeath(param_00) +{ + param_00 waittill("death"); + self destroy(); +} + +//Function Number: 71 +gamemodemodifyplayerdamage(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07) +{ + if(isdefined(param_01) && isplayer(param_01) && isalive(param_01)) + { + if(level.matchrules_damagemultiplier) + { + param_02 = param_02 * level.matchrules_damagemultiplier; + } + + if(level.matchrules_vampirism) + { + param_01.health = int(min(float(param_01.maxhealth),float(param_01.health + 20))); + } + } + + return param_02; +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/gametypes/_damagefeedback.gsc b/MW3/PC/MP/maps/mp/gametypes/_damagefeedback.gsc new file mode 100644 index 0000000..cacf67e --- /dev/null +++ b/MW3/PC/MP/maps/mp/gametypes/_damagefeedback.gsc @@ -0,0 +1,118 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_damagefeedback.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 3 + * Decompile Time: 58 ms + * Timestamp: 10/27/2023 2:12:19 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + precacheshader("damage_feedback"); + precacheshader("damage_feedback_j"); + precacheshader("damage_feedback_lightarmor"); + precacheshader("damage_feedback_juggernaut"); + precacheshader("scavenger_pickup"); + level thread onplayerconnect(); +} + +//Function Number: 2 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_00.hud_damagefeedback = newclienthudelem(var_00); + var_00.hud_damagefeedback.horzalign = "center"; + var_00.hud_damagefeedback.vertalign = "middle"; + var_00.hud_damagefeedback.x = -12; + var_00.hud_damagefeedback.y = -12; + var_00.hud_damagefeedback.alpha = 0; + var_00.hud_damagefeedback.archived = 1; + var_00.hud_damagefeedback setshader("damage_feedback",24,48); + } +} + +//Function Number: 3 +updatedamagefeedback(param_00) +{ + if(!isplayer(self)) + { + return; + } + + var_01 = -12; + var_02 = -12; + if(getdvarint("camera_thirdPerson")) + { + var_03 = self getthirdpersoncrosshairoffset() * 240; + } + else + { + var_03 = getdvarfloat("cg_crosshairVerticalOffset") * 240; + } + + if(level.splitscreen || self issplitscreenplayer()) + { + var_03 = var_03 * 0.5; + } + + var_04 = 0; + var_05 = 1; + if(param_00 == "hitBodyArmor") + { + self.hud_damagefeedback setshader("damage_feedback_j",24,48); + self playlocalsound("MP_hit_alert"); + } + else if(param_00 == "hitLightArmor") + { + self.hud_damagefeedback setshader("damage_feedback_lightarmor",24,48); + self playlocalsound("MP_hit_alert"); + } + else if(param_00 == "hitJuggernaut") + { + self.hud_damagefeedback setshader("damage_feedback_juggernaut",24,48); + self playlocalsound("MP_hit_alert"); + } + else if(param_00 == "none") + { + return; + } + else if(param_00 == "scavenger" && !level.hardcoremode) + { + var_01 = -36; + var_02 = 32; + self.hud_damagefeedback setshader("scavenger_pickup",64,32); + var_04 = 2.5; + } + else + { + self.hud_damagefeedback setshader("damage_feedback",24,48); + self playlocalsound("MP_hit_alert"); + } + + self.hud_damagefeedback.alpha = var_05; + if(var_04 != 0) + { + self.hud_damagefeedback fadeovertime(var_04); + } + else + { + self.hud_damagefeedback fadeovertime(1); + } + + self.hud_damagefeedback.alpha = 0; + if(self.hud_damagefeedback.x != var_01) + { + self.hud_damagefeedback.x = var_01; + } + + var_02 = var_02 - int(var_03); + if(self.hud_damagefeedback.y != var_02) + { + self.hud_damagefeedback.y = var_02; + } +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/gametypes/_deathicons.gsc b/MW3/PC/MP/maps/mp/gametypes/_deathicons.gsc new file mode 100644 index 0000000..eba2292 --- /dev/null +++ b/MW3/PC/MP/maps/mp/gametypes/_deathicons.gsc @@ -0,0 +1,95 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_deathicons.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 5 + * Decompile Time: 89 ms + * Timestamp: 10/27/2023 2:12:20 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + if(!level.teambased) + { + return; + } + + precacheshader("headicon_dead"); + level thread onplayerconnect(); +} + +//Function Number: 2 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_00.selfdeathicons = []; + } +} + +//Function Number: 3 +updatedeathiconsenabled() +{ +} + +//Function Number: 4 +adddeathicon(param_00,param_01,param_02,param_03) +{ + if(!level.teambased) + { + return; + } + + var_04 = param_00.origin; + param_01 endon("spawned_player"); + param_01 endon("disconnect"); + wait 0.05; + maps\mp\_utility::waittillslowprocessallowed(); + if(getdvar("ui_hud_showdeathicons") == "0") + { + return; + } + + if(level.hardcoremode) + { + return; + } + + if(isdefined(self.lastdeathicon)) + { + self.lastdeathicon destroy(); + } + + var_05 = newteamhudelem(param_02); + var_05.x = var_04[0]; + var_05.y = var_04[1]; + var_05.z = var_04[2] + 54; + var_05.alpha = 0.61; + var_05.archived = 1; + if(level.splitscreen) + { + var_05 setshader("headicon_dead",14,14); + } + else + { + var_05 setshader("headicon_dead",7,7); + } + + var_05 setwaypoint(0); + self.lastdeathicon = var_05; + var_05 thread destroyslowly(param_03); +} + +//Function Number: 5 +destroyslowly(param_00) +{ + self endon("death"); + wait param_00; + self fadeovertime(1); + self.alpha = 0; + wait 1; + self destroy(); +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/gametypes/_equipment.gsc b/MW3/PC/MP/maps/mp/gametypes/_equipment.gsc new file mode 100644 index 0000000..9dcabdf --- /dev/null +++ b/MW3/PC/MP/maps/mp/gametypes/_equipment.gsc @@ -0,0 +1,322 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_equipment.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 8 + * Decompile Time: 125 ms + * Timestamp: 10/27/2023 2:12:20 AM +*******************************************************************/ + +//Function Number: 1 +watchtrophyusage() +{ + self endon("spawned_player"); + self endon("disconnect"); + self.trophyarray = []; + for(;;) + { + self waittill("grenade_fire",var_00,var_01); + if(var_01 == "trophy" || var_01 == "trophy_mp") + { + if(!isalive(self)) + { + var_00 delete(); + return; + } + + var_00 hide(); + var_00 waittill("missile_stuck"); + var_02 = 40; + if(var_02 * var_02 < distancesquared(var_00.origin,self.origin)) + { + var_03 = bullettrace(self.origin,self.origin - (0,0,var_02),0,self); + if(var_03["fraction"] == 1) + { + var_00 delete(); + self setweaponammostock("trophy_mp",self getweaponammostock("trophy_mp") + 1); + continue; + } + + var_00.origin = var_03["position"]; + } + + var_00 show(); + self.trophyarray = common_scripts\utility::array_removeundefined(self.trophyarray); + if(self.trophyarray.size >= level.maxperplayerexplosives) + { + self.trophyarray[0] detonate(); + } + + var_04 = spawn("script_model",var_00.origin); + var_04 setmodel("mp_trophy_system"); + var_04 thread maps\mp\gametypes\_weapons::createbombsquadmodel("mp_trophy_system_bombsquad","tag_origin",level.otherteam[self.team],self); + var_04.angles = var_00.angles; + self.trophyarray[self.trophyarray.size] = var_04; + var_04.owner = self; + var_04.team = self.team; + var_04.weaponname = var_01; + if(isdefined(self.trophyremainingammo) && self.trophyremainingammo > 0) + { + var_04.ammo = self.trophyremainingammo; + } + else + { + var_04.ammo = 2; + } + + var_04.trigger = spawn("script_origin",var_04.origin); + var_04 thread trophydamage(self); + var_04 thread trophyactive(self); + var_04 thread trophydisconnectwaiter(self); + var_04 thread trophyplayerspawnwaiter(self); + var_04 thread trophyuselistener(self); + var_04 thread maps\mp\gametypes\_weapons::c4empkillstreakwait(); + if(level.teambased) + { + var_04 maps\mp\_entityheadicons::setteamheadicon(var_04.team,(0,0,65)); + } + else + { + var_04 maps\mp\_entityheadicons::setplayerheadicon(var_04.owner,(0,0,65)); + } + + wait 0.05; + if(isdefined(var_00)) + { + var_00 delete(); + } + } + } +} + +//Function Number: 2 +trophyuselistener(param_00) +{ + self endon("death"); + level endon("game_ended"); + param_00 endon("disconnect"); + param_00 endon("death"); + self.trigger setcursorhint("HINT_NOICON"); + self.trigger sethintstring(&"MP_PICKUP_TROPHY"); + self.trigger maps\mp\_utility::setselfusable(param_00); + self.trigger thread maps\mp\_utility::notusableforjoiningplayers(param_00); + for(;;) + { + self.trigger waittill("trigger",param_00); + param_00 playlocalsound("scavenger_pack_pickup"); + param_00 maps\mp\_utility::giveperk("trophy_mp",0); + param_00.trophyremainingammo = self.ammo; + self.trigger delete(); + self delete(); + self notify("death"); + } +} + +//Function Number: 3 +trophyplayerspawnwaiter(param_00) +{ + self endon("disconnect"); + self endon("death"); + param_00 waittill("spawned"); + thread trophybreak(); +} + +//Function Number: 4 +trophydisconnectwaiter(param_00) +{ + self endon("death"); + param_00 waittill("disconnect"); + thread trophybreak(); +} + +//Function Number: 5 +trophyactive(param_00) +{ + param_00 endon("disconnect"); + self endon("death"); + var_01 = self.origin; + for(;;) + { + if(!isdefined(level.grenades) || level.grenades.size < 1 && level.missiles.size < 1 || isdefined(self.disabled)) + { + wait 0.05; + continue; + } + + var_02 = maps\mp\_utility::combinearrays(level.grenades,level.missiles); + foreach(var_04 in var_02) + { + wait 0.05; + if(!isdefined(var_04)) + { + continue; + } + + if(var_04 == self) + { + continue; + } + + if(isdefined(var_04.weaponname)) + { + switch(var_04.weaponname) + { + case "claymore_mp": + break; + } + } + + switch(var_04.model) + { + case "mp_trophy_system": + case "weapon_radar": + case "weapon_jammer": + case "weapon_parabolic_knife": + break; + } + + if(!isdefined(var_04.owner)) + { + var_04.owner = getmissileowner(var_04); + } + + if(isdefined(var_04.owner) && level.teambased && var_04.owner.team == param_00.team) + { + continue; + } + + if(isdefined(var_04.owner) && var_04.owner == param_00) + { + continue; + } + + var_05 = distancesquared(var_04.origin,self.origin); + if(var_05 < 147456) + { + if(bullettracepassed(var_04.origin,self.origin,0,self)) + { + playfx(level.sentry_fire,self.origin + (0,0,32),var_04.origin - self.origin,anglestoup(self.angles)); + self playsound("trophy_detect_projectile"); + param_00 thread projectileexplode(var_04,self); + param_00 maps\mp\gametypes\_missions::processchallenge("ch_noboomforyou"); + self.ammo--; + if(self.ammo <= 0) + { + thread trophybreak(); + } + } + } + } + } +} + +//Function Number: 6 +projectileexplode(param_00,param_01) +{ + self endon("death"); + var_02 = param_00.origin; + var_03 = param_00.model; + var_04 = param_00.angles; + if(var_03 == "weapon_light_marker") + { + playfx(level.empgrenadeexplode,var_02,anglestoforward(var_04),anglestoup(var_04)); + param_01 thread trophybreak(); + param_00 delete(); + return; + } + + param_00 delete(); + param_01 playsound("trophy_fire"); + playfx(level.mine_explode,var_02,anglestoforward(var_04),anglestoup(var_04)); + radiusdamage(var_02,128,105,10,self,"MOD_EXPLOSIVE","trophy_mp"); +} + +//Function Number: 7 +trophydamage(param_00) +{ + self endon("death"); + param_00 endon("death"); + self setcandamage(1); + self.health = 999999; + self.maxhealth = 100; + self.damagetaken = 0; + for(;;) + { + self waittill("damage",var_01,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09,var_0A); + if(!isplayer(var_02)) + { + continue; + } + + if(!maps\mp\gametypes\_weapons::friendlyfirecheck(self.owner,var_02)) + { + continue; + } + + if(isdefined(var_0A)) + { + switch(var_0A) + { + case "flash_grenade_mp": + case "smoke_grenade_mp": + case "concussion_grenade_mp": + break; + } + } + + if(!isdefined(self)) + { + return; + } + + if(var_05 == "MOD_MELEE") + { + self.damagetaken = self.damagetaken + self.maxhealth; + } + + if(isdefined(var_09) && var_09 & level.idflags_penetration) + { + self.wasdamagedfrombulletpenetration = 1; + } + + self.wasdamaged = 1; + if(isdefined(var_0A) && var_0A == "emp_grenade_mp") + { + self.damagetaken = self.damagetaken + self.maxhealth; + } + + self.damagetaken = self.damagetaken + var_01; + if(isplayer(var_02)) + { + var_02 maps\mp\gametypes\_damagefeedback::updatedamagefeedback("trophy"); + } + + if(self.damagetaken >= self.maxhealth) + { + var_02 notify("destroyed_explosive"); + thread trophybreak(); + } + } +} + +//Function Number: 8 +trophybreak() +{ + playfxontag(common_scripts\utility::getfx("sentry_explode_mp"),self,"tag_origin"); + playfxontag(common_scripts\utility::getfx("sentry_smoke_mp"),self,"tag_origin"); + self playsound("sentry_explode"); + self notify("death"); + var_00 = self.origin; + self.trigger makeunusable(); + wait 3; + if(isdefined(self.trigger)) + { + self.trigger delete(); + } + + if(isdefined(self)) + { + self delete(); + } +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/gametypes/_friendicons.gsc b/MW3/PC/MP/maps/mp/gametypes/_friendicons.gsc new file mode 100644 index 0000000..887f46a --- /dev/null +++ b/MW3/PC/MP/maps/mp/gametypes/_friendicons.gsc @@ -0,0 +1,125 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_friendicons.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 7 + * Decompile Time: 104 ms + * Timestamp: 10/27/2023 2:12:21 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level.drawfriend = 0; + game["headicon_allies"] = maps\mp\gametypes\_teams::init("allies"); + game["headicon_axis"] = maps\mp\gametypes\_teams::init("axis"); + precacheheadicon(game["headicon_allies"]); + precacheheadicon(game["headicon_axis"]); + precacheshader("waypoint_revive"); + level thread onplayerconnect(); + for(;;) + { + updatefriendiconsettings(); + wait 5; + } +} + +//Function Number: 2 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_00 thread onplayerspawned(); + var_00 thread onplayerkilled(); + } +} + +//Function Number: 3 +onplayerspawned() +{ + self endon("disconnect"); + for(;;) + { + self waittill("spawned_player"); + thread showfriendicon(); + } +} + +//Function Number: 4 +onplayerkilled() +{ + self endon("disconnect"); + for(;;) + { + self waittill("killed_player"); + self.headicon = ""; + } +} + +//Function Number: 5 +showfriendicon() +{ + if(level.drawfriend) + { + if(self.pers["team"] == "allies") + { + self.headicon = game["headicon_allies"]; + self.var_6C1 = "allies"; + return; + } + + self.headicon = game["headicon_axis"]; + self.var_6C1 = "axis"; + } +} + +//Function Number: 6 +updatefriendiconsettings() +{ + var_00 = maps\mp\_utility::getintproperty("scr_drawfriend",level.drawfriend); + if(level.drawfriend != var_00) + { + level.drawfriend = var_00; + updatefriendicons(); + } +} + +//Function Number: 7 +updatefriendicons() +{ + var_00 = level.players; + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + var_02 = var_00[var_01]; + if(isdefined(var_02.pers["team"]) && var_02.pers["team"] != "spectator" && var_02.sessionstate == "playing") + { + if(level.drawfriend) + { + if(var_02.pers["team"] == "allies") + { + var_02.headicon = game["headicon_allies"]; + var_02.var_6C1 = "allies"; + } + else + { + var_02.headicon = game["headicon_axis"]; + var_02.var_6C1 = "axis"; + } + + continue; + } + + var_00 = level.players; + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + var_02 = var_00[var_01]; + if(isdefined(var_02.pers["team"]) && var_02.pers["team"] != "spectator" && var_02.sessionstate == "playing") + { + var_02.headicon = ""; + } + } + } + } +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/gametypes/_gamelogic.gsc b/MW3/PC/MP/maps/mp/gametypes/_gamelogic.gsc new file mode 100644 index 0000000..8b6f8ea --- /dev/null +++ b/MW3/PC/MP/maps/mp/gametypes/_gamelogic.gsc @@ -0,0 +1,2929 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_gamelogic.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 77 + * Decompile Time: 1193 ms + * Timestamp: 10/27/2023 2:12:25 AM +*******************************************************************/ + +//Function Number: 1 +onforfeit(param_00) +{ + if(isdefined(level.forfeitinprogress)) + { + return; + } + + level endon("abort_forfeit"); + level thread forfeitwaitforabort(); + level.forfeitinprogress = 1; + if(!level.teambased && level.players.size > 1) + { + wait 10; + } + + level.forfeit_aborted = 0; + var_01 = 20; + matchforfeittimer(var_01); + var_02 = &""; + if(!isdefined(param_00)) + { + level.finalkillcam_winner = "none"; + var_02 = game["strings"]["players_forfeited"]; + var_03 = level.players[0]; + } + else if(var_01 == "allies") + { + level.finalkillcam_winner = "axis"; + var_03 = game["strings"]["allies_forfeited"]; + var_03 = "axis"; + } + else if(var_01 == "axis") + { + level.finalkillcam_winner = "allies"; + var_03 = game["strings"]["axis_forfeited"]; + var_03 = "allies"; + } + else + { + level.finalkillcam_winner = "none"; + var_03 = "tie"; + } + + level.forcedend = 1; + if(isplayer(var_03)) + { + logstring("forfeit, win: " + var_03 getxuid() + "(" + var_03.name + ")"); + } + else + { + logstring("forfeit, win: " + var_03 + ", allies: " + game["teamScores"]["allies"] + ", opfor: " + game["teamScores"]["axis"]); + } + + thread endgame(var_03,var_02); +} + +//Function Number: 2 +forfeitwaitforabort() +{ + level endon("game_ended"); + level waittill("abort_forfeit"); + level.forfeit_aborted = 1; + if(isdefined(level.matchforfeittimer)) + { + level.matchforfeittimer maps\mp\gametypes\_hud_util::destroyelem(); + } + + if(isdefined(level.matchforfeittext)) + { + level.matchforfeittext maps\mp\gametypes\_hud_util::destroyelem(); + } +} + +//Function Number: 3 +matchforfeittimer_internal(param_00,param_01) +{ + waittillframeend; + level endon("match_forfeit_timer_beginning"); + while(param_00 > 0 && !level.gameended && !level.forfeit_aborted && !level.ingraceperiod) + { + param_01 thread maps\mp\gametypes\_hud::fontpulse(level); + wait param_01.inframes * 0.05; + param_01 setvalue(param_00); + param_00--; + wait 1 - param_01.inframes * 0.05; + } +} + +//Function Number: 4 +matchforfeittimer(param_00) +{ + level notify("match_forfeit_timer_beginning"); + var_01 = maps\mp\gametypes\_hud_util::createserverfontstring("objective",1.5); + var_01 maps\mp\gametypes\_hud_util::setpoint("CENTER","CENTER",0,-40); + var_01.sort = 1001; + var_01 settext(game["strings"]["opponent_forfeiting_in"]); + var_01.foreground = 0; + var_01.hidewheninmenu = 1; + var_02 = maps\mp\gametypes\_hud_util::createserverfontstring("hudbig",1); + var_02 maps\mp\gametypes\_hud_util::setpoint("CENTER","CENTER",0,0); + var_02.sort = 1001; + var_02.color = (1,1,0); + var_02.foreground = 0; + var_02.hidewheninmenu = 1; + var_02 maps\mp\gametypes\_hud::fontpulseinit(); + var_03 = int(param_00); + level.matchforfeittimer = var_02; + level.matchforfeittext = var_01; + matchforfeittimer_internal(var_03,var_02); + var_02 maps\mp\gametypes\_hud_util::destroyelem(); + var_01 maps\mp\gametypes\_hud_util::destroyelem(); +} + +//Function Number: 5 +default_ondeadevent(param_00) +{ + level.finalkillcam_winner = "none"; + if(param_00 == "allies") + { + iprintln(game["strings"]["allies_eliminated"]); + logstring("team eliminated, win: opfor, allies: " + game["teamScores"]["allies"] + ", opfor: " + game["teamScores"]["axis"]); + level.finalkillcam_winner = "axis"; + thread endgame("axis",game["strings"]["allies_eliminated"]); + return; + } + + if(param_00 == "axis") + { + iprintln(game["strings"]["axis_eliminated"]); + logstring("team eliminated, win: allies, allies: " + game["teamScores"]["allies"] + ", opfor: " + game["teamScores"]["axis"]); + level.finalkillcam_winner = "allies"; + thread endgame("allies",game["strings"]["axis_eliminated"]); + return; + } + + logstring("tie, allies: " + game["teamScores"]["allies"] + ", opfor: " + game["teamScores"]["axis"]); + level.finalkillcam_winner = "none"; + if(level.teambased) + { + thread endgame("tie",game["strings"]["tie"]); + return; + } + + thread endgame(undefined,game["strings"]["tie"]); +} + +//Function Number: 6 +default_ononeleftevent(param_00) +{ + if(level.teambased) + { + var_01 = maps\mp\_utility::getlastlivingplayer(param_00); + var_01 thread givelastonteamwarning(); + } + else + { + var_01 = maps\mp\_utility::getlastlivingplayer(); + logstring("last one alive, win: " + var_01.name); + level.finalkillcam_winner = "none"; + thread endgame(var_01,&"MP_ENEMIES_ELIMINATED"); + } + + return 1; +} + +//Function Number: 7 +default_ontimelimit() +{ + var_00 = undefined; + level.finalkillcam_winner = "none"; + if(level.teambased) + { + if(game["teamScores"]["allies"] == game["teamScores"]["axis"]) + { + var_00 = "tie"; + } + else if(game["teamScores"]["axis"] > game["teamScores"]["allies"]) + { + level.finalkillcam_winner = "axis"; + var_00 = "axis"; + } + else + { + level.finalkillcam_winner = "allies"; + var_00 = "allies"; + } + + logstring("time limit, win: " + var_00 + ", allies: " + game["teamScores"]["allies"] + ", opfor: " + game["teamScores"]["axis"]); + } + else + { + var_00 = lib_036E::func_2B78(); + if(isdefined(var_00)) + { + logstring("time limit, win: " + var_00.name); + } + else + { + logstring("time limit, tie"); + } + } + + thread endgame(var_00,game["strings"]["time_limit_reached"]); +} + +//Function Number: 8 +default_onhalftime() +{ + var_00 = undefined; + level.finalkillcam_winner = "none"; + thread endgame("halftime",game["strings"]["time_limit_reached"]); +} + +//Function Number: 9 +forceend() +{ + if(level.hostforcedend || level.forcedend) + { + return; + } + + var_00 = undefined; + level.finalkillcam_winner = "none"; + if(level.teambased) + { + if(game["teamScores"]["allies"] == game["teamScores"]["axis"]) + { + var_00 = "tie"; + } + else if(game["teamScores"]["axis"] > game["teamScores"]["allies"]) + { + level.finalkillcam_winner = "axis"; + var_00 = "axis"; + } + else + { + level.finalkillcam_winner = "allies"; + var_00 = "allies"; + } + + logstring("host ended game, win: " + var_00 + ", allies: " + game["teamScores"]["allies"] + ", opfor: " + game["teamScores"]["axis"]); + } + else + { + var_00 = lib_036E::func_2B78(); + if(isdefined(var_00)) + { + logstring("host ended game, win: " + var_00.name); + } + else + { + logstring("host ended game, tie"); + } + } + + level.forcedend = 1; + level.hostforcedend = 1; + if(level.splitscreen) + { + var_01 = &"MP_ENDED_GAME"; + } + else + { + var_01 = &"MP_HOST_ENDED_GAME"; + } + + thread endgame(var_00,var_01); +} + +//Function Number: 10 +onscorelimit() +{ + var_00 = game["strings"]["score_limit_reached"]; + var_01 = undefined; + level.finalkillcam_winner = "none"; + if(level.teambased) + { + if(game["teamScores"]["allies"] == game["teamScores"]["axis"]) + { + var_01 = "tie"; + } + else if(game["teamScores"]["axis"] > game["teamScores"]["allies"]) + { + var_01 = "axis"; + level.finalkillcam_winner = "axis"; + } + else + { + var_01 = "allies"; + level.finalkillcam_winner = "allies"; + } + + logstring("scorelimit, win: " + var_01 + ", allies: " + game["teamScores"]["allies"] + ", opfor: " + game["teamScores"]["axis"]); + } + else + { + var_01 = lib_036E::func_2B78(); + if(isdefined(var_01)) + { + logstring("scorelimit, win: " + var_01.name); + } + else + { + logstring("scorelimit, tie"); + } + } + + thread endgame(var_01,var_00); + return 1; +} + +//Function Number: 11 +updategameevents() +{ + if(maps\mp\_utility::matchmakinggame() && !level.ingraceperiod) + { + if(level.teambased) + { + if(level.teamcount["allies"] < 1 && level.teamcount["axis"] > 0 && game["state"] == "playing") + { + thread onforfeit("allies"); + return; + } + + if(level.teamcount["axis"] < 1 && level.teamcount["allies"] > 0 && game["state"] == "playing") + { + thread onforfeit("axis"); + return; + } + + if(level.teamcount["axis"] > 0 && level.teamcount["allies"] > 0) + { + level.forfeitinprogress = undefined; + level notify("abort_forfeit"); + } + } + else + { + if(level.teamcount["allies"] + level.teamcount["axis"] == 1 && level.maxplayercount > 1) + { + thread onforfeit(); + return; + } + + if(level.teamcount["axis"] + level.teamcount["allies"] > 1) + { + level.forfeitinprogress = undefined; + level notify("abort_forfeit"); + } + } + } + + if(!maps\mp\_utility::getgametypenumlives() && !isdefined(level.disablespawning) || !level.disablespawning) + { + return; + } + + if(!maps\mp\_utility::gamehasstarted()) + { + return; + } + + if(level.ingraceperiod) + { + return; + } + + if(level.teambased) + { + var_00["allies"] = level.livescount["allies"]; + if(isdefined(level.disablespawning) && level.disablespawning) + { + } + + if(!level.alivecount["allies"] && !level.alivecount["axis"] && !var_7B["allies"] && !var_7B["axis"]) + { + return [[ level.ondeadevent ]]("all"); + } + + if(!level.alivecount["allies"] && !var_7B["allies"]) + { + return [[ level.ondeadevent ]]("allies"); + } + + if(!level.alivecount["axis"] && !var_7B["axis"]) + { + return [[ level.ondeadevent ]]("axis"); + } + + if(level.alivecount["allies"] == 1 && !var_7B["allies"]) + { + if(!isdefined(level.onelefttime["allies"])) + { + level.onelefttime["allies"] = gettime(); + return [[ level.ononeleftevent ]]("allies"); + } + } + + if(level.alivecount["axis"] == 1 && !var_7B["axis"]) + { + if(!isdefined(level.onelefttime["axis"])) + { + level.onelefttime["axis"] = gettime(); + return [[ level.ononeleftevent ]]("axis"); + } + + return; + } + + return; + } + + if(!level.alivecount["allies"] && !level.alivecount["axis"] && !level.livescount["allies"] && !level.livescount["axis"]) + { + return [[ level.ondeadevent ]]("all"); + } + + var_01 = maps\mp\_utility::getpotentiallivingplayers(); + if(var_01.size == 1) + { + return [[ level.ononeleftevent ]]("all"); + } +} + +//Function Number: 12 +waittillfinalkillcamdone() +{ + if(!isdefined(level.finalkillcam_winner)) + { + return 0; + } + + level waittill("final_killcam_done"); + return 1; +} + +//Function Number: 13 +timelimitclock_intermission(param_00) +{ + setgameendtime(gettime() + int(param_00 * 1000)); + var_01 = spawn("script_origin",(0,0,0)); + var_01 hide(); + if(param_00 >= 10) + { + wait param_00 - 10; + } + + for(;;) + { + var_01 playsound("ui_mp_timer_countdown"); + wait 1; + } +} + +//Function Number: 14 +waitforplayers(param_00) +{ + var_01 = gettime() + param_00 * 1000 - 200; + if(level.teambased) + { + while((!level.hasspawned["axis"] || !level.hasspawned["allies"]) && gettime() < var_01) + { + wait 0.05; + } + + return; + } + + while(level.maxplayercount < 2 && gettime() < var_01) + { + wait 0.05; + } +} + +//Function Number: 15 +prematchperiod() +{ + level endon("game_ended"); + if(level.prematchperiod > 0) + { + if(level.console) + { + thread matchstarttimer("match_starting_in",level.prematchperiod); + wait level.prematchperiod; + } + else + { + matchstarttimerpc(); + } + } + else + { + matchstarttimerskip(); + } + + for(var_00 = 0;var_00 < level.players.size;var_00++) + { + level.players[var_00] maps\mp\_utility::freezecontrolswrapper(0); + level.players[var_00] enableweapons(); + var_01 = maps\mp\_utility::getobjectivehinttext(level.players[var_00].pers["team"]); + if(!isdefined(var_01) || !level.players[var_00].hasspawned) + { + continue; + } + + level.players[var_00] setclientdvar("scr_objectiveText",var_01); + level.players[var_00] thread maps\mp\gametypes\_hud_message::hintmessage(var_01); + } + + if(game["state"] != "playing") + { + } +} + +//Function Number: 16 +graceperiod() +{ + level endon("game_ended"); + while(level.ingraceperiod > 0) + { + wait 1; + level.ingraceperiod--; + } + + level notify("grace_period_ending"); + wait 0.05; + maps\mp\_utility::gameflagset("graceperiod_done"); + level.ingraceperiod = 0; + if(game["state"] != "playing") + { + return; + } + + if(maps\mp\_utility::getgametypenumlives()) + { + var_00 = level.players; + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + var_02 = var_00[var_01]; + if(!var_02.hasspawned && var_02.sessionteam != "spectator" && !isalive(var_02)) + { + var_02.statusicon = "hud_status_dead"; + } + } + } + + level thread updategameevents(); +} + +//Function Number: 17 +updatewinstats(param_00) +{ + if(!param_00 maps\mp\_utility::rankingenabled()) + { + return; + } + + param_00 maps\mp\gametypes\_persistance::statadd("losses",-1); + param_00 maps\mp\gametypes\_persistance::statadd("wins",1); + param_00 maps\mp\_utility::updatepersratio("winLossRatio","wins","losses"); + param_00 maps\mp\gametypes\_persistance::statadd("currentWinStreak",1); + var_01 = param_00 maps\mp\gametypes\_persistance::statget("currentWinStreak"); + if(var_01 > param_00 maps\mp\gametypes\_persistance::statget("winStreak")) + { + param_00 maps\mp\gametypes\_persistance::statset("winStreak",var_01); + } + + param_00 maps\mp\gametypes\_persistance::statsetchild("round","win",1); + param_00 maps\mp\gametypes\_persistance::statsetchild("round","loss",0); +} + +//Function Number: 18 +updatelossstats(param_00) +{ + if(!param_00 maps\mp\_utility::rankingenabled()) + { + return; + } + + param_00 maps\mp\gametypes\_persistance::statadd("losses",1); + param_00 maps\mp\_utility::updatepersratio("winLossRatio","wins","losses"); + param_00 maps\mp\gametypes\_persistance::statsetchild("round","loss",1); +} + +//Function Number: 19 +updatetiestats(param_00) +{ + if(!param_00 maps\mp\_utility::rankingenabled()) + { + return; + } + + param_00 maps\mp\gametypes\_persistance::statadd("losses",-1); + param_00 maps\mp\gametypes\_persistance::statadd("ties",1); + param_00 maps\mp\_utility::updatepersratio("winLossRatio","wins","losses"); + param_00 maps\mp\gametypes\_persistance::statset("currentWinStreak",0); +} + +//Function Number: 20 +updatewinlossstats(param_00) +{ + if(maps\mp\_utility::privatematch()) + { + return; + } + + if(!maps\mp\_utility::waslastround()) + { + return; + } + + var_01 = level.players; + if(!isdefined(param_00) || isdefined(param_00) && isstring(param_00) && param_00 == "tie") + { + foreach(var_03 in level.players) + { + if(isdefined(var_03.connectedpostgame)) + { + continue; + } + + if(level.hostforcedend && var_03 ishost()) + { + var_03 maps\mp\gametypes\_persistance::statset("currentWinStreak",0); + continue; + } + + updatetiestats(var_03); + } + + return; + } + + if(isplayer(param_00)) + { + if(level.hostforcedend && param_00 ishost()) + { + param_00 maps\mp\gametypes\_persistance::statset("currentWinStreak",0); + return; + } + + updatewinstats(param_00); + return; + } + + if(isstring(param_00)) + { + foreach(var_03 in level.players) + { + if(isdefined(var_03.connectedpostgame)) + { + continue; + } + + if(level.hostforcedend && var_03 ishost()) + { + var_03 maps\mp\gametypes\_persistance::statset("currentWinStreak",0); + continue; + } + + if(param_00 == "tie") + { + updatetiestats(var_03); + continue; + } + + if(var_03.pers["team"] == param_00) + { + updatewinstats(var_03); + continue; + } + + var_03 maps\mp\gametypes\_persistance::statset("currentWinStreak",0); + } + + return; + } +} + +//Function Number: 21 +freezeplayerforroundend(param_00) +{ + self endon("disconnect"); + maps\mp\_utility::clearlowermessages(); + if(!isdefined(param_00)) + { + param_00 = 0.05; + } + + self closepopupmenu(); + self closeingamemenu(); + wait param_00; + maps\mp\_utility::freezecontrolswrapper(1); +} + +//Function Number: 22 +updatematchbonusscores(param_00) +{ + if(!game["timePassed"]) + { + return; + } + + if(!maps\mp\_utility::matchmakinggame()) + { + return; + } + + if(!maps\mp\_utility::gettimelimit() || level.forcedend) + { + var_01 = maps\mp\_utility::gettimepassed() / 1000; + var_01 = min(var_01,1200); + } + else + { + var_01 = maps\mp\_utility::gettimelimit() * 60; + } + + if(level.teambased) + { + if(param_00 == "allies") + { + var_02 = "allies"; + var_03 = "axis"; + } + else if(var_02 == "axis") + { + var_02 = "axis"; + var_03 = "allies"; + } + else + { + var_02 = "tie"; + var_03 = "tie"; + } + + if(var_02 != "tie") + { + var_04 = maps\mp\gametypes\_rank::getscoreinfovalue("win"); + var_05 = maps\mp\gametypes\_rank::getscoreinfovalue("loss"); + setwinningteam(var_02); + } + else + { + var_04 = maps\mp\gametypes\_rank::getscoreinfovalue("tie"); + var_05 = maps\mp\gametypes\_rank::getscoreinfovalue("tie"); + } + + foreach(var_07 in level.players) + { + if(isdefined(var_07.connectedpostgame)) + { + continue; + } + + if(!var_07 maps\mp\_utility::rankingenabled()) + { + continue; + } + + if(var_07.timeplayed["total"] < 1 || var_07.pers["participation"] < 1) + { + var_07 thread maps\mp\gametypes\_rank::endgameupdate(); + continue; + } + + if(level.hostforcedend && var_07 ishost()) + { + continue; + } + + var_08 = var_07 maps\mp\gametypes\_rank::getspm(); + if(var_02 == "tie") + { + var_09 = int(var_04 * var_01 / 60 * var_08 * var_07.timeplayed["total"] / var_01); + var_07 thread givematchbonus("tie",var_09); + var_07.matchbonus = var_09; + continue; + } + + if(isdefined(var_07.pers["team"]) && var_07.pers["team"] == var_02) + { + var_09 = int(var_04 * var_01 / 60 * var_08 * var_07.timeplayed["total"] / var_01); + var_07 thread givematchbonus("win",var_09); + var_07.matchbonus = var_09; + continue; + } + + if(isdefined(var_07.pers["team"]) && var_07.pers["team"] == var_03) + { + var_09 = int(var_05 * var_01 / 60 * var_08 * var_07.timeplayed["total"] / var_01); + var_07 thread givematchbonus("loss",var_09); + var_07.matchbonus = var_09; + } + } + + return; + } + + if(isdefined(var_07)) + { + var_04 = maps\mp\gametypes\_rank::getscoreinfovalue("win"); + var_05 = maps\mp\gametypes\_rank::getscoreinfovalue("loss"); + } + else + { + var_04 = maps\mp\gametypes\_rank::getscoreinfovalue("tie"); + var_05 = maps\mp\gametypes\_rank::getscoreinfovalue("tie"); + } + + foreach(var_07 in level.players) + { + if(isdefined(var_07.connectedpostgame)) + { + continue; + } + + if(var_07.timeplayed["total"] < 1 || var_07.pers["participation"] < 1) + { + var_07 thread maps\mp\gametypes\_rank::endgameupdate(); + continue; + } + + var_08 = var_07 maps\mp\gametypes\_rank::getspm(); + var_0C = 0; + for(var_0D = 0;var_0D < min(level.placement["all"].size,3);var_0D++) + { + if(level.placement["all"][var_0D] != var_07) + { + continue; + } + + var_0C = 1; + } + + if(var_0C) + { + var_09 = int(var_04 * var_01 / 60 * var_08 * var_07.timeplayed["total"] / var_01); + var_07 thread givematchbonus("win",var_09); + var_07.matchbonus = var_09; + continue; + } + + var_09 = int(var_05 * var_01 / 60 * var_08 * var_07.timeplayed["total"] / var_01); + var_07 thread givematchbonus("loss",var_09); + var_07.matchbonus = var_09; + } +} + +//Function Number: 23 +givematchbonus(param_00,param_01) +{ + self endon("disconnect"); + level waittill("give_match_bonus"); + maps\mp\gametypes\_rank::giverankxp(param_00,param_01); + maps\mp\gametypes\_rank::endgameupdate(); +} + +//Function Number: 24 +setxenonranks(param_00) +{ + var_01 = level.players; + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + var_03 = var_01[var_02]; + if(!isdefined(var_03.score) || !isdefined(var_03.pers["team"])) + { + continue; + } + } + + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + var_03 = var_01[var_02]; + if(!isdefined(var_03.score) || !isdefined(var_03.pers["team"])) + { + continue; + } + + setplayerteamrank(var_03,var_03.clientid,var_03.score - 5 * var_03.deaths); + } +} + +//Function Number: 25 +checktimelimit(param_00) +{ + if(isdefined(level.timelimitoverride) && level.timelimitoverride) + { + return; + } + + if(game["state"] != "playing") + { + setgameendtime(0); + return; + } + + if(maps\mp\_utility::gettimelimit() <= 0) + { + if(isdefined(level.starttime)) + { + setgameendtime(level.starttime); + } + else + { + setgameendtime(0); + } + + return; + } + + if(!maps\mp\_utility::gameflag("prematch_done")) + { + setgameendtime(0); + return; + } + + if(!isdefined(level.starttime)) + { + return; + } + + var_01 = gettimeremaining(); + setgameendtime(gettime() + int(var_01)); + if(var_01 > 0) + { + if(maps\mp\_utility::gethalftime() && checkhalftime(param_00)) + { + [[ level.onhalftime ]](); + } + + return; + } + + [[ level.ontimelimit ]](); +} + +//Function Number: 26 +checkhalftime(param_00) +{ + if(!level.teambased) + { + return 0; + } + + if(maps\mp\_utility::gettimelimit()) + { + var_01 = maps\mp\_utility::gettimelimit() * 60 * 1000 * 0.5; + if(maps\mp\_utility::gettimepassed() >= var_01 && param_00 < var_01 && param_00 > 0) + { + game["roundMillisecondsAlreadyPassed"] = maps\mp\_utility::gettimepassed(); + return 1; + } + } + + return 0; +} + +//Function Number: 27 +gettimeremaining() +{ + return maps\mp\_utility::gettimelimit() * 60 * 1000 - maps\mp\_utility::gettimepassed(); +} + +//Function Number: 28 +checkteamscorelimitsoon(param_00) +{ + if(maps\mp\_utility::getwatcheddvar("scorelimit") <= 0 || maps\mp\_utility::isobjectivebased()) + { + return; + } + + if(isdefined(level.scorelimitoverride) && level.scorelimitoverride) + { + return; + } + + if(level.gametype == "conf" || level.gametype == "jugg") + { + return; + } + + if(!level.teambased) + { + return; + } + + if(maps\mp\_utility::gettimepassed() < -5536) + { + return; + } + + var_01 = estimatedtimetillscorelimit(param_00); + if(var_01 < 2) + { + level notify("match_ending_soon","score"); + } +} + +//Function Number: 29 +checkplayerscorelimitsoon() +{ + if(maps\mp\_utility::getwatcheddvar("scorelimit") <= 0 || maps\mp\_utility::isobjectivebased()) + { + return; + } + + if(level.teambased) + { + return; + } + + if(maps\mp\_utility::gettimepassed() < -5536) + { + return; + } + + var_00 = estimatedtimetillscorelimit(); + if(var_00 < 2) + { + level notify("match_ending_soon","score"); + } +} + +//Function Number: 30 +checkscorelimit() +{ + if(maps\mp\_utility::isobjectivebased()) + { + return 0; + } + + if(isdefined(level.scorelimitoverride) && level.scorelimitoverride) + { + return 0; + } + + if(game["state"] != "playing") + { + return 0; + } + + if(maps\mp\_utility::getwatcheddvar("scorelimit") <= 0) + { + return 0; + } + + if(level.teambased) + { + if(game["teamScores"]["allies"] < maps\mp\_utility::getwatcheddvar("scorelimit") && game["teamScores"]["axis"] < maps\mp\_utility::getwatcheddvar("scorelimit")) + { + return 0; + } + } + else + { + if(!isplayer(self)) + { + return 0; + } + + if(self.score < maps\mp\_utility::getwatcheddvar("scorelimit")) + { + return 0; + } + } + + return onscorelimit(); +} + +//Function Number: 31 +updategametypedvars() +{ + level endon("game_ended"); + while(game["state"] == "playing") + { + if(isdefined(level.starttime)) + { + if(gettimeremaining() < 3000) + { + wait 0.1; + continue; + } + } + + wait 1; + } +} + +//Function Number: 32 +matchstarttimerpc() +{ + thread matchstarttimer("waiting_for_teams",level.prematchperiod + level.prematchperiodend); + waitforplayers(level.prematchperiod); + if(level.prematchperiodend > 0) + { + matchstarttimer("match_starting_in",level.prematchperiodend); + } +} + +//Function Number: 33 +matchstarttimer_internal(param_00,param_01) +{ + waittillframeend; + visionsetnaked("mpIntro",0); + level endon("match_start_timer_beginning"); + while(param_00 > 0 && !level.gameended) + { + param_01 thread maps\mp\gametypes\_hud::fontpulse(level); + wait param_01.inframes * 0.05; + param_01 setvalue(param_00); + if(param_00 == 0) + { + visionsetnaked("",0); + } + + param_00--; + wait 1 - param_01.inframes * 0.05; + } +} + +//Function Number: 34 +matchstarttimer(param_00,param_01) +{ + level notify("match_start_timer_beginning"); + var_02 = maps\mp\gametypes\_hud_util::createserverfontstring("objective",1.5); + var_02 maps\mp\gametypes\_hud_util::setpoint("CENTER","CENTER",0,-40); + var_02.sort = 1001; + var_02 settext(game["strings"]["waiting_for_teams"]); + var_02.foreground = 0; + var_02.hidewheninmenu = 1; + var_02 settext(game["strings"][param_00]); + var_03 = maps\mp\gametypes\_hud_util::createserverfontstring("hudbig",1); + var_03 maps\mp\gametypes\_hud_util::setpoint("CENTER","CENTER",0,0); + var_03.sort = 1001; + var_03.color = (1,1,0); + var_03.foreground = 0; + var_03.hidewheninmenu = 1; + var_03 maps\mp\gametypes\_hud::fontpulseinit(); + var_04 = int(param_01); + if(var_04 >= 2) + { + matchstarttimer_internal(var_04,var_03); + visionsetnaked("",3); + } + else + { + visionsetnaked("mpIntro",0); + visionsetnaked("",1); + } + + var_03 maps\mp\gametypes\_hud_util::destroyelem(); + var_02 maps\mp\gametypes\_hud_util::destroyelem(); +} + +//Function Number: 35 +matchstarttimerskip() +{ + visionsetnaked("",0); +} + +//Function Number: 36 +onroundswitch() +{ + if(!isdefined(game["switchedsides"])) + { + game["switchedsides"] = 0; + } + + if(game["roundsWon"]["allies"] == maps\mp\_utility::getwatcheddvar("winlimit") - 1 && game["roundsWon"]["axis"] == maps\mp\_utility::getwatcheddvar("winlimit") - 1) + { + var_00 = getbetterteam(); + if(var_00 != game["defenders"]) + { + game["switchedsides"] = !game["switchedsides"]; + } + else + { + level.halftimesubcaption = ""; + } + + level.halftimetype = "overtime"; + return; + } + + level.halftimetype = "halftime"; + game["switchedsides"] = !game["switchedsides"]; +} + +//Function Number: 37 +checkroundswitch() +{ + if(!level.teambased) + { + return 0; + } + + if(!isdefined(level.roundswitch) || !level.roundswitch) + { + return 0; + } + + if(game["roundsPlayed"] % level.roundswitch == 0) + { + onroundswitch(); + return 1; + } + + return 0; +} + +//Function Number: 38 +timeuntilroundend() +{ + if(level.gameended) + { + var_00 = gettime() - level.gameendtime / 1000; + var_01 = level.postroundtime - var_00; + if(var_01 < 0) + { + return 0; + } + + return var_01; + } + + if(maps\mp\_utility::gettimelimit() <= 0) + { + return undefined; + } + + if(!isdefined(level.starttime)) + { + return undefined; + } + + var_02 = maps\mp\_utility::gettimelimit(); + var_00 = gettime() - level.starttime / 1000; + var_01 = maps\mp\_utility::gettimelimit() * 60 - var_02; + if(isdefined(level.timepaused)) + { + var_02 = var_02 + level.timepaused; + } + + return var_02 + level.postroundtime; +} + +//Function Number: 39 +freegameplayhudelems() +{ + if(isdefined(self.perkicon)) + { + if(isdefined(self.perkicon[0])) + { + self.perkicon[0] maps\mp\gametypes\_hud_util::destroyelem(); + self.perkname[0] maps\mp\gametypes\_hud_util::destroyelem(); + } + + if(isdefined(self.perkicon[1])) + { + self.perkicon[1] maps\mp\gametypes\_hud_util::destroyelem(); + self.perkname[1] maps\mp\gametypes\_hud_util::destroyelem(); + } + + if(isdefined(self.perkicon[2])) + { + self.perkicon[2] maps\mp\gametypes\_hud_util::destroyelem(); + self.perkname[2] maps\mp\gametypes\_hud_util::destroyelem(); + } + } + + self notify("perks_hidden"); + self.lowermessage maps\mp\gametypes\_hud_util::destroyelem(); + self.lowertimer maps\mp\gametypes\_hud_util::destroyelem(); + if(isdefined(self.proxbar)) + { + self.proxbar maps\mp\gametypes\_hud_util::destroyelem(); + } + + if(isdefined(self.proxbartext)) + { + self.proxbartext maps\mp\gametypes\_hud_util::destroyelem(); + } +} + +//Function Number: 40 +gethostplayer() +{ + var_00 = getentarray("player","classname"); + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + if(var_00[var_01] ishost()) + { + return var_00[var_01]; + } + } +} + +//Function Number: 41 +hostidledout() +{ + var_00 = gethostplayer(); + if(isdefined(var_00) && !var_00.hasspawned && !isdefined(var_00.selectedclass)) + { + return 1; + } + + return 0; +} + +//Function Number: 42 +roundendwait(param_00,param_01) +{ + var_02 = 0; + while(!var_02) + { + var_03 = level.players; + var_02 = 1; + foreach(var_05 in var_03) + { + if(!isdefined(var_05.doingsplash)) + { + continue; + } + + if(!var_05 maps\mp\gametypes\_hud_message::isdoingsplash()) + { + continue; + } + + var_02 = 0; + } + + wait 0.5; + } + + if(!param_01) + { + wait param_00; + level notify("round_end_finished"); + return; + } + + wait param_00 / 2; + level notify("give_match_bonus"); + wait param_00 / 2; + var_02 = 0; + while(!var_02) + { + var_03 = level.players; + var_02 = 1; + foreach(var_05 in var_03) + { + if(!isdefined(var_05.doingsplash)) + { + continue; + } + + if(!var_05 maps\mp\gametypes\_hud_message::isdoingsplash()) + { + continue; + } + + var_02 = 0; + } + + wait 0.5; + } + + level notify("round_end_finished"); +} + +//Function Number: 43 +roundenddof(param_00) +{ + self setdepthoffield(0,128,512,4000,6,1.8); +} + +//Function Number: 44 +callback_startgametype() +{ + maps\mp\_load::main(); + maps\mp\_utility::levelflaginit("round_over",0); + maps\mp\_utility::levelflaginit("game_over",0); + maps\mp\_utility::levelflaginit("block_notifies",0); + level.prematchperiod = 0; + level.prematchperiodend = 0; + level.postgamenotifies = 0; + level.intermission = 0; + makedvarserverinfo("cg_thirdPersonAngle",356); + makedvarserverinfo("scr_gameended",0); + if(!isdefined(game["gamestarted"])) + { + game["clientid"] = 0; + var_00 = getmapcustom("allieschar"); + if(!isdefined(var_00) || var_00 == "") + { + if(!isdefined(game["allies"])) + { + var_00 = "sas_urban"; + } + else + { + var_00 = game["allies"]; + } + } + + var_01 = getmapcustom("axischar"); + if(!isdefined(var_01) || var_01 == "") + { + if(!isdefined(game["axis"])) + { + var_01 = "opforce_henchmen"; + } + else + { + var_01 = game["axis"]; + } + } + + game["allies"] = var_00; + game["axis"] = var_01; + if(!isdefined(game["attackers"]) || !isdefined(game["defenders"])) + { + thread common_scripts\utility::error("No attackers or defenders team defined in level .gsc."); + } + + if(!isdefined(game["attackers"])) + { + game["attackers"] = "allies"; + } + + if(!isdefined(game["defenders"])) + { + game["defenders"] = "axis"; + } + + if(!isdefined(game["state"])) + { + game["state"] = "playing"; + } + + precachestatusicon("hud_status_dead"); + precachestatusicon("hud_status_connecting"); + precachestring(&"MPUI_REVIVING"); + precachestring(&"MPUI_BEING_REVIVED"); + precacherumble("damage_heavy"); + precacheshader("white"); + precacheshader("black"); + game["strings"]["press_to_spawn"] = &"PLATFORM_PRESS_TO_SPAWN"; + if(level.teambased) + { + game["strings"]["waiting_for_teams"] = &"MP_WAITING_FOR_TEAMS"; + game["strings"]["opponent_forfeiting_in"] = &"MP_OPPONENT_FORFEITING_IN"; + } + else + { + game["strings"]["waiting_for_teams"] = &"MP_WAITING_FOR_MORE_PLAYERS"; + game["strings"]["opponent_forfeiting_in"] = &"MP_OPPONENT_FORFEITING_IN"; + } + + game["strings"]["match_starting_in"] = &"MP_MATCH_STARTING_IN"; + game["strings"]["match_resuming_in"] = &"MP_MATCH_RESUMING_IN"; + game["strings"]["waiting_for_players"] = &"MP_WAITING_FOR_PLAYERS"; + game["strings"]["spawn_next_round"] = &"MP_SPAWN_NEXT_ROUND"; + game["strings"]["waiting_to_spawn"] = &"MP_WAITING_TO_SPAWN"; + game["strings"]["waiting_to_safespawn"] = &"MP_WAITING_TO_SAFESPAWN"; + game["strings"]["match_starting"] = &"MP_MATCH_STARTING"; + game["strings"]["change_class"] = &"MP_CHANGE_CLASS_NEXT_SPAWN"; + game["strings"]["last_stand"] = &"MPUI_LAST_STAND"; + game["strings"]["final_stand"] = &"MPUI_FINAL_STAND"; + game["strings"]["c4_death"] = &"MPUI_C4_DEATH"; + game["strings"]["cowards_way"] = &"PLATFORM_COWARDS_WAY_OUT"; + game["strings"]["tie"] = &"MP_MATCH_TIE"; + game["strings"]["round_draw"] = &"MP_ROUND_DRAW"; + game["strings"]["grabbed_flag"] = &"MP_GRABBED_FLAG_FIRST"; + game["strings"]["enemies_eliminated"] = &"MP_ENEMIES_ELIMINATED"; + game["strings"]["score_limit_reached"] = &"MP_SCORE_LIMIT_REACHED"; + game["strings"]["round_limit_reached"] = &"MP_ROUND_LIMIT_REACHED"; + game["strings"]["time_limit_reached"] = &"MP_TIME_LIMIT_REACHED"; + game["strings"]["players_forfeited"] = &"MP_PLAYERS_FORFEITED"; + game["strings"]["S.A.S Win"] = &"SAS_WIN"; + game["strings"]["Spetsnaz Win"] = &"SPETSNAZ_WIN"; + game["colors"]["blue"] = (0.25,0.25,0.75); + game["colors"]["red"] = (0.75,0.25,0.25); + game["colors"]["white"] = (1,1,1); + game["colors"]["black"] = (0,0,0); + game["colors"]["green"] = (0.25,0.75,0.25); + game["colors"]["yellow"] = (0.65,0.65,0); + game["colors"]["orange"] = (1,0.45,0); + game["strings"]["allies_eliminated"] = maps\mp\gametypes\_teams::getteameliminatedstring("allies"); + game["strings"]["allies_forfeited"] = maps\mp\gametypes\_teams::getteamforfeitedstring("allies"); + game["strings"]["allies_name"] = maps\mp\gametypes\_teams::getteamname("allies"); + game["icons"]["allies"] = maps\mp\gametypes\_teams::getteamicon("allies"); + game["colors"]["allies"] = maps\mp\gametypes\_teams::getteamcolor("allies"); + game["strings"]["axis_eliminated"] = maps\mp\gametypes\_teams::getteameliminatedstring("axis"); + game["strings"]["axis_forfeited"] = maps\mp\gametypes\_teams::getteamforfeitedstring("axis"); + game["strings"]["axis_name"] = maps\mp\gametypes\_teams::getteamname("axis"); + game["icons"]["axis"] = maps\mp\gametypes\_teams::getteamicon("axis"); + game["colors"]["axis"] = maps\mp\gametypes\_teams::getteamcolor("axis"); + if(game["colors"]["allies"] == (0,0,0)) + { + game["colors"]["allies"] = (0.5,0.5,0.5); + } + + if(game["colors"]["axis"] == (0,0,0)) + { + game["colors"]["axis"] = (0.5,0.5,0.5); + } + + [[ level.onprecachegametype ]](); + if(level.console) + { + if(!level.splitscreen) + { + level.prematchperiod = maps\mp\gametypes\_tweakables::gettweakablevalue("game","graceperiod"); + } + } + else + { + level.prematchperiod = maps\mp\gametypes\_tweakables::gettweakablevalue("game","playerwaittime"); + level.prematchperiodend = maps\mp\gametypes\_tweakables::gettweakablevalue("game","matchstarttime"); + } + } + else if(level.console) + { + if(!level.splitscreen) + { + level.prematchperiod = 5; + } + } + else + { + level.prematchperiod = 5; + level.prematchperiodend = maps\mp\gametypes\_tweakables::gettweakablevalue("game","matchstarttime"); + } + + if(!isdefined(game["status"])) + { + game["status"] = "normal"; + } + + makedvarserverinfo("ui_overtime",game["status"] == "overtime"); + if(game["status"] != "overtime" && game["status"] != "halftime") + { + game["teamScores"]["allies"] = 0; + game["teamScores"]["axis"] = 0; + } + + if(!isdefined(game["timePassed"])) + { + game["timePassed"] = 0; + } + + if(!isdefined(game["roundsPlayed"])) + { + game["roundsPlayed"] = 0; + } + + if(!isdefined(game["roundsWon"])) + { + game["roundsWon"] = []; + } + + if(level.teambased) + { + if(!isdefined(game["roundsWon"]["axis"])) + { + game["roundsWon"]["axis"] = 0; + } + + if(!isdefined(game["roundsWon"]["allies"])) + { + game["roundsWon"]["allies"] = 0; + } + } + + level.gameended = 0; + level.forcedend = 0; + level.hostforcedend = 0; + level.hardcoremode = getdvarint("g_hardcore"); + if(level.hardcoremode) + { + logstring("game mode: hardcore"); + } + + level.diehardmode = getdvarint("scr_diehard"); + if(!level.teambased) + { + level.diehardmode = 0; + } + + if(level.diehardmode) + { + logstring("game mode: diehard"); + } + + level.killstreakrewards = getdvarint("scr_game_hardpoints"); + level.usestartspawns = 1; + level.objectivepointsmod = 1; + if(maps\mp\_utility::matchmakinggame()) + { + level.maxallowedteamkills = 2; + } + else + { + level.maxallowedteamkills = -1; + } + + thread maps\mp\gametypes\_persistance::init(); + thread maps\mp\gametypes\_menus::init(); + thread maps\mp\gametypes\_hud::init(); + thread maps\mp\gametypes\_serversettings::init(); + thread maps\mp\gametypes\_teams::init(); + thread maps\mp\gametypes\_weapons::init(); + thread maps\mp\gametypes\_killcam::init(); + thread maps\mp\gametypes\_shellshock::init(); + thread maps\mp\gametypes\_deathicons::init(); + thread maps\mp\gametypes\_damagefeedback::init(); + thread maps\mp\gametypes\_healthoverlay::init(); + thread maps\mp\gametypes\_spectating::init(); + thread maps\mp\gametypes\_objpoints::init(); + thread maps\mp\gametypes\_gameobjects::init(); + thread maps\mp\gametypes\_spawnlogic::init(); + thread maps\mp\gametypes\_battlechatter_mp::init(); + thread maps\mp\gametypes\_music_and_dialog::init(); + thread maps\mp\_matchdata::init(); + thread maps\mp\_awards::init(); + thread lib_037A::init(); + thread maps\mp\_areas::init(); + thread maps\mp\killstreaks\_killstreaks::init(); + thread maps\mp\perks\_perks::init(); + thread maps\mp\_events::init(); + thread maps\mp\_defcon::init(); + thread maps\mp\_matchevents::init(); + thread maps\mp\gametypes\_damage::initfinalkillcam(); + if(level.teambased) + { + thread maps\mp\gametypes\_friendicons::init(); + } + + thread maps\mp\gametypes\_hud_message::init(); + if(!level.console) + { + thread maps\mp\gametypes\_quickmessages::init(); + } + + foreach(var_03 in game["strings"]) + { + precachestring(var_03); + } + + foreach(var_06 in game["icons"]) + { + precacheshader(var_06); + } + + game["gamestarted"] = 1; + level.maxplayercount = 0; + level.wavedelay["allies"] = 0; + level.wavedelay["axis"] = 0; + level.lastwave["allies"] = 0; + level.lastwave["axis"] = 0; + level.waveplayerspawnindex["allies"] = 0; + level.waveplayerspawnindex["axis"] = 0; + level.aliveplayers["allies"] = []; + level.aliveplayers["axis"] = []; + level.activeplayers = []; + makedvarserverinfo("ui_scorelimit",0); + makedvarserverinfo("ui_allow_classchange",getdvar("ui_allow_classchange")); + makedvarserverinfo("ui_allow_teamchange",1); + setdvar("ui_allow_teamchange",1); + if(maps\mp\_utility::getgametypenumlives()) + { + setdvar("g_deadChat",0); + } + else + { + setdvar("g_deadChat",1); + } + + var_08 = getdvarint("scr_" + level.gametype + "_waverespawndelay"); + if(var_08) + { + level.wavedelay["allies"] = var_08; + level.wavedelay["axis"] = var_08; + level.lastwave["allies"] = 0; + level.lastwave["axis"] = 0; + level thread wavespawntimer(); + } + + maps\mp\_utility::gameflaginit("prematch_done",0); + level.graceperiod = 15; + level.ingraceperiod = level.graceperiod; + maps\mp\_utility::gameflaginit("graceperiod_done",0); + level.roundenddelay = 4; + level.halftimeroundenddelay = 4; + level.noragdollents = getentarray("noragdoll","targetname"); + if(level.teambased) + { + lib_036E::func_2B93("axis"); + lib_036E::func_2B93("allies"); + } + else + { + thread lib_036E::func_2BA0(); + } + + thread updateuiscorelimit(); + level notify("update_scorelimit"); + [[ level.onstartgametype ]](); + thread startgame(); + level thread maps\mp\_utility::updatewatcheddvars(); + level thread timelimitthread(); + level thread maps\mp\gametypes\_damage::dofinalkillcam(); +} + +//Function Number: 45 +callback_codeendgame() +{ + endparty(); + if(!level.gameended) + { + level thread forceend(); + } +} + +//Function Number: 46 +timelimitthread() +{ + level endon("game_ended"); + var_00 = maps\mp\_utility::gettimepassed(); + while(game["state"] == "playing") + { + thread checktimelimit(var_00); + var_00 = maps\mp\_utility::gettimepassed(); + if(isdefined(level.starttime)) + { + if(gettimeremaining() < 3000) + { + wait 0.1; + continue; + } + } + + wait 1; + } +} + +//Function Number: 47 +updateuiscorelimit() +{ + for(;;) + { + level common_scripts\utility::waittill_either("update_scorelimit","update_winlimit"); + if(!maps\mp\_utility::isroundbased() || !maps\mp\_utility::isobjectivebased()) + { + setdvar("ui_scorelimit",maps\mp\_utility::getwatcheddvar("scorelimit")); + thread checkscorelimit(); + continue; + } + + setdvar("ui_scorelimit",maps\mp\_utility::getwatcheddvar("winlimit")); + } +} + +//Function Number: 48 +playtickingsound() +{ + self endon("death"); + self endon("stop_ticking"); + level endon("game_ended"); + var_00 = level.bombtimer; + for(;;) + { + self playsound("ui_mp_suitcasebomb_timer"); + if(var_00 > 10) + { + var_00 = var_00 - 1; + wait 1; + } + else if(var_00 > 4) + { + var_00 = var_00 - 0.5; + wait 0.5; + } + else if(var_00 > 1) + { + var_00 = var_00 - 0.4; + wait 0.4; + } + else + { + var_00 = var_00 - 0.3; + wait 0.3; + } + + maps\mp\gametypes\_hostmigration::waittillhostmigrationdone(); + } +} + +//Function Number: 49 +stoptickingsound() +{ + self notify("stop_ticking"); +} + +//Function Number: 50 +timelimitclock() +{ + level endon("game_ended"); + wait 0.05; + var_00 = spawn("script_origin",(0,0,0)); + var_00 hide(); + while(game["state"] == "playing") + { + if(!level.timerstopped && maps\mp\_utility::gettimelimit()) + { + var_01 = gettimeremaining() / 1000; + var_02 = int(var_01 + 0.5); + if(maps\mp\_utility::gethalftime() && var_02 > maps\mp\_utility::gettimelimit() * 60 * 0.5) + { + var_02 = var_02 - int(maps\mp\_utility::gettimelimit() * 60 * 0.5); + } + + if(var_02 >= 30 && var_02 <= 60) + { + level notify("match_ending_soon","time"); + } + + if(var_02 <= 10 || var_02 <= 30 && var_02 % 2 == 0) + { + level notify("match_ending_very_soon"); + if(var_02 == 0) + { + break; + } + + var_00 playsound("ui_mp_timer_countdown"); + } + + if(var_01 - floor(var_01) >= 0.05) + { + wait var_01 - floor(var_01); + } + } + + wait 1; + } +} + +//Function Number: 51 +gametimer() +{ + level endon("game_ended"); + level waittill("prematch_over"); + level.starttime = gettime(); + level.discardtime = 0; + if(isdefined(game["roundMillisecondsAlreadyPassed"])) + { + level.starttime = level.starttime - game["roundMillisecondsAlreadyPassed"]; + game["roundMillisecondsAlreadyPassed"] = undefined; + } + + var_00 = gettime(); + while(game["state"] == "playing") + { + if(!level.timerstopped) + { + game["timePassed"] = game["timePassed"] + gettime() - var_00; + } + + var_00 = gettime(); + wait 1; + } +} + +//Function Number: 52 +updatetimerpausedness() +{ + var_00 = level.timerstoppedforgamemode || isdefined(level.hostmigrationtimer); + if(!maps\mp\_utility::gameflag("prematch_done")) + { + var_00 = 0; + } + + if(!level.timerstopped && var_00) + { + level.timerstopped = 1; + level.timerpausetime = gettime(); + return; + } + + if(level.timerstopped && !var_00) + { + level.timerstopped = 0; + level.discardtime = level.discardtime + gettime() - level.timerpausetime; + } +} + +//Function Number: 53 +pausetimer() +{ + level.timerstoppedforgamemode = 1; + updatetimerpausedness(); +} + +//Function Number: 54 +resumetimer() +{ + level.timerstoppedforgamemode = 0; + updatetimerpausedness(); +} + +//Function Number: 55 +startgame() +{ + thread gametimer(); + level.timerstopped = 0; + level.timerstoppedforgamemode = 0; + thread maps\mp\gametypes\_spawnlogic::spawnperframeupdate(); + prematchperiod(); + maps\mp\_utility::gameflagset("prematch_done"); + level notify("prematch_over"); + updatetimerpausedness(); + thread timelimitclock(); + thread graceperiod(); + thread maps\mp\gametypes\_missions::roundbegin(); +} + +//Function Number: 56 +wavespawntimer() +{ + level endon("game_ended"); + while(game["state"] == "playing") + { + var_00 = gettime(); + if(var_00 - level.lastwave["allies"] > level.wavedelay["allies"] * 1000) + { + level notify("wave_respawn_allies"); + level.lastwave["allies"] = var_00; + level.waveplayerspawnindex["allies"] = 0; + } + + if(var_00 - level.lastwave["axis"] > level.wavedelay["axis"] * 1000) + { + level notify("wave_respawn_axis"); + level.lastwave["axis"] = var_00; + level.waveplayerspawnindex["axis"] = 0; + } + + wait 0.05; + } +} + +//Function Number: 57 +getbetterteam() +{ + var_00["allies"] = 0; + var_00["allies"] = 0; + foreach(var_03 in level.players) + { + var_04 = var_03.pers["team"]; + if(isdefined(var_04) && var_04 == "allies" || var_04 == "axis") + { + var_00[var_04] = var_00[var_04] + var_03.kills; + var_7B[var_04] = var_7B[var_04] + var_03.deaths; + } + } + + if(var_00["allies"] > var_00["axis"]) + { + return "allies"; + } + else if(var_00["axis"] > var_00["allies"]) + { + return "axis"; + } + + if(var_7B["allies"] < var_7B["axis"]) + { + return "allies"; + } + else if(var_7B["axis"] < var_7B["allies"]) + { + return "axis"; + } + + if(randomint(2) == 0) + { + return "allies"; + } + + return "axis"; +} + +//Function Number: 58 +rankedmatchupdates(param_00) +{ + if(maps\mp\_utility::matchmakinggame()) + { + setxenonranks(); + if(hostidledout()) + { + level.hostforcedend = 1; + logstring("host idled out"); + endlobby(); + } + + updatematchbonusscores(param_00); + } + + updatewinlossstats(param_00); +} + +//Function Number: 59 +displayroundend(param_00,param_01) +{ + foreach(var_03 in level.players) + { + if(isdefined(var_03.connectedpostgame) || var_03.pers["team"] == "spectator") + { + continue; + } + + if(level.teambased) + { + var_03 thread maps\mp\gametypes\_hud_message::teamoutcomenotify(param_00,1,param_01); + continue; + } + + var_03 thread maps\mp\gametypes\_hud_message::outcomenotify(param_00,param_01); + } + + if(!maps\mp\_utility::waslastround()) + { + level notify("round_win",param_00); + } + + if(maps\mp\_utility::waslastround()) + { + roundendwait(level.roundenddelay,0); + return; + } + + roundendwait(level.roundenddelay,1); +} + +//Function Number: 60 +displaygameend(param_00,param_01) +{ + foreach(var_03 in level.players) + { + if(isdefined(var_03.connectedpostgame) || var_03.pers["team"] == "spectator") + { + continue; + } + + if(level.teambased) + { + var_03 thread maps\mp\gametypes\_hud_message::teamoutcomenotify(param_00,0,param_01); + continue; + } + + var_03 thread maps\mp\gametypes\_hud_message::outcomenotify(param_00,param_01); + } + + level notify("game_win",param_00); + roundendwait(level.postroundtime,1); +} + +//Function Number: 61 +displayroundswitch() +{ + var_00 = level.halftimetype; + if(var_00 == "halftime") + { + if(maps\mp\_utility::getwatcheddvar("roundlimit")) + { + if(game["roundsPlayed"] * 2 == maps\mp\_utility::getwatcheddvar("roundlimit")) + { + var_00 = "halftime"; + } + else + { + var_00 = "intermission"; + } + } + else if(maps\mp\_utility::getwatcheddvar("winlimit")) + { + if(game["roundsPlayed"] == maps\mp\_utility::getwatcheddvar("winlimit") - 1) + { + var_00 = "halftime"; + } + else + { + var_00 = "intermission"; + } + } + else + { + var_00 = "intermission"; + } + } + + level notify("round_switch",var_00); + foreach(var_02 in level.players) + { + if(isdefined(var_02.connectedpostgame) || var_02.pers["team"] == "spectator") + { + continue; + } + + var_02 thread maps\mp\gametypes\_hud_message::teamoutcomenotify(var_00,1,level.halftimesubcaption); + } + + roundendwait(level.halftimeroundenddelay,0); +} + +//Function Number: 62 +endgameovertime(param_00,param_01) +{ + visionsetnaked("mpOutro",0.5); + setdvar("scr_gameended",3); + foreach(var_03 in level.players) + { + var_03 thread freezeplayerforroundend(0); + var_03 thread roundenddof(4); + var_03 freegameplayhudelems(); + var_03 setclientdvars("cg_everyoneHearsEveryone",1); + var_03 setclientdvars("cg_drawSpectatorMessages",0,"g_compassShowEnemies",0); + if(var_03.pers["team"] == "spectator") + { + var_03 thread maps\mp\gametypes\_playerlogic::spawnintermission(); + } + } + + level notify("round_switch","overtime"); + foreach(var_03 in level.players) + { + if(isdefined(var_03.connectedpostgame) || var_03.pers["team"] == "spectator") + { + continue; + } + + if(level.teambased) + { + var_03 thread maps\mp\gametypes\_hud_message::teamoutcomenotify(param_00,0,param_01); + continue; + } + + var_03 thread maps\mp\gametypes\_hud_message::outcomenotify(param_00,param_01); + } + + roundendwait(level.roundenddelay,0); + if(isdefined(level.finalkillcam_winner)) + { + level.finalkillcam_timegameended[level.finalkillcam_winner] = maps\mp\_utility::getsecondspassed(); + foreach(var_03 in level.players) + { + var_03 notify("reset_outcome"); + } + + level notify("game_cleanup"); + waittillfinalkillcamdone(); + } + + game["status"] = "overtime"; + level notify("restarting"); + game["state"] = "playing"; + map_restart(1); +} + +//Function Number: 63 +endgamehalftime() +{ + visionsetnaked("mpOutro",0.5); + setdvar("scr_gameended",2); + game["switchedsides"] = !game["switchedsides"]; + foreach(var_01 in level.players) + { + var_01 thread freezeplayerforroundend(0); + var_01 thread roundenddof(4); + var_01 freegameplayhudelems(); + var_01 setclientdvars("cg_everyoneHearsEveryone",1); + var_01 setclientdvars("cg_drawSpectatorMessages",0,"g_compassShowEnemies",0); + if(var_01.pers["team"] == "spectator") + { + var_01 thread maps\mp\gametypes\_playerlogic::spawnintermission(); + } + } + + foreach(var_01 in level.players) + { + var_01.pers["stats"] = var_01.stats; + } + + level notify("round_switch","halftime"); + foreach(var_01 in level.players) + { + if(isdefined(var_01.connectedpostgame) || var_01.pers["team"] == "spectator") + { + continue; + } + + var_01 thread maps\mp\gametypes\_hud_message::teamoutcomenotify("halftime",1,level.halftimesubcaption); + } + + roundendwait(level.roundenddelay,0); + if(isdefined(level.finalkillcam_winner)) + { + level.finalkillcam_timegameended[level.finalkillcam_winner] = maps\mp\_utility::getsecondspassed(); + foreach(var_01 in level.players) + { + var_01 notify("reset_outcome"); + } + + level notify("game_cleanup"); + waittillfinalkillcamdone(); + } + + game["status"] = "halftime"; + level notify("restarting"); + game["state"] = "playing"; + map_restart(1); +} + +//Function Number: 64 +endgame(param_00,param_01,param_02) +{ + if(!isdefined(param_02)) + { + param_02 = 0; + } + + if(game["state"] == "postgame" || level.gameended && !isdefined(level.gtnw) || !level.gtnw) + { + return; + } + + game["state"] = "postgame"; + level.gameendtime = gettime(); + level.gameended = 1; + level.ingraceperiod = 0; + level notify("game_ended",param_00); + maps\mp\_utility::levelflagset("game_over"); + maps\mp\_utility::levelflagset("block_notifies"); + common_scripts\utility::waitframe(); + setgameendtime(0); + var_03 = getmatchdata("gameLength"); + var_03 = var_03 + int(maps\mp\_utility::getsecondspassed()); + setmatchdata("gameLength",var_03); + maps\mp\gametypes\_playerlogic::printpredictedspawnpointcorrectness(); + if(isdefined(param_00) && isstring(param_00) && param_00 == "overtime") + { + level.finalkillcam_winner = "none"; + endgameovertime(param_00,param_01); + return; + } + + if(isdefined(param_00) && isstring(param_00) && param_00 == "halftime") + { + level.finalkillcam_winner = "none"; + endgamehalftime(); + return; + } + + if(isdefined(level.finalkillcam_winner)) + { + level.finalkillcam_timegameended[level.finalkillcam_winner] = maps\mp\_utility::getsecondspassed(); + } + + game["roundsPlayed"]++; + if(level.teambased) + { + if(param_00 == "axis" || param_00 == "allies") + { + game["roundsWon"][param_00]++; + } + + lib_036E::func_2B93("axis"); + lib_036E::func_2B93("allies"); + } + else if(isdefined(param_00) && isplayer(param_00)) + { + game["roundsWon"][param_00.guid]++; + } + + lib_036E::func_2B9C(); + rankedmatchupdates(param_00); + foreach(var_05 in level.players) + { + var_05 setclientdvar("ui_opensummary",1); + if(maps\mp\_utility::wasonlyround() || maps\mp\_utility::waslastround()) + { + var_05 maps\mp\killstreaks\_killstreaks::clearkillstreaks(); + } + } + + setdvar("g_deadChat",1); + setdvar("ui_allow_teamchange",0); + foreach(var_05 in level.players) + { + var_05 thread freezeplayerforroundend(1); + var_05 thread roundenddof(4); + var_05 freegameplayhudelems(); + var_05 setclientdvars("cg_everyoneHearsEveryone",1); + var_05 setclientdvars("cg_drawSpectatorMessages",0,"g_compassShowEnemies",0,"cg_fovScale",1); + if(var_05.pers["team"] == "spectator") + { + var_05 thread maps\mp\gametypes\_playerlogic::spawnintermission(); + } + } + + if(!param_02) + { + visionsetnaked("mpOutro",0.5); + } + + if(!maps\mp\_utility::wasonlyround() && !param_02) + { + setdvar("scr_gameended",2); + displayroundend(param_00,param_01); + if(isdefined(level.finalkillcam_winner)) + { + foreach(var_05 in level.players) + { + var_05 notify("reset_outcome"); + } + + level notify("game_cleanup"); + waittillfinalkillcamdone(); + } + + if(!maps\mp\_utility::waslastround()) + { + maps\mp\_utility::levelflagclear("block_notifies"); + if(checkroundswitch()) + { + displayroundswitch(); + } + + foreach(var_05 in level.players) + { + var_05.pers["stats"] = var_05.stats; + } + + level notify("restarting"); + game["state"] = "playing"; + map_restart(1); + return; + } + + if(!level.forcedend) + { + var_03 = updateendreasontext(param_02); + } + } + + if(var_03 == game["strings"]["time_limit_reached"]) + { + setdvar("scr_gameended",3); + } + else + { + switch(level.gametype) + { + case "conf": + case "ctf": + case "dom": + case "sd": + case "sab": + case "koth": + setdvar("scr_gameended",4); + break; + + default: + setdvar("scr_gameended",1); + break; + } + } + + if(!isdefined(game["clientMatchDataDef"])) + { + game["clientMatchDataDef"] = "mp/clientmatchdata.def"; + setclientmatchdatadef(game["clientMatchDataDef"]); + } + + maps\mp\gametypes\_missions::roundend(param_02); + displaygameend(param_02,var_03); + if(isdefined(level.finalkillcam_winner) && maps\mp\_utility::wasonlyround()) + { + foreach(var_07 in level.players) + { + var_07 notify("reset_outcome"); + } + + level notify("game_cleanup"); + waittillfinalkillcamdone(); + } + + maps\mp\_utility::levelflagclear("block_notifies"); + level.intermission = 1; + level notify("spawning_intermission"); + foreach(var_07 in level.players) + { + var_07 closepopupmenu(); + var_07 closeingamemenu(); + var_07 notify("reset_outcome"); + var_07 thread maps\mp\gametypes\_playerlogic::spawnintermission(); + } + + processlobbydata(); + wait 1; + checkforpersonalbests(); + if(level.teambased) + { + if(param_02 == "axis" || param_02 == "allies") + { + setmatchdata("victor",param_02); + } + else + { + setmatchdata("victor","none"); + } + + setmatchdata("alliesScore",getteamscore("allies")); + setmatchdata("axisScore",getteamscore("axis")); + } + else + { + setmatchdata("victor","none"); + } + + setmatchdata("host",level.hostname); + sendmatchdata(); + foreach(var_07 in level.players) + { + var_07.pers["stats"] = var_07.stats; + } + + if(!var_04 && !level.postgamenotifies) + { + if(!maps\mp\_utility::wasonlyround()) + { + wait 6; + } + else + { + wait 3; + } + } + else + { + wait min(10,4 + level.postgamenotifies); + } + + level notify("exitLevel_called"); + exitlevel(0); +} + +//Function Number: 65 +updateendreasontext(param_00) +{ + if(!level.teambased) + { + return 1; + } + + if(maps\mp\_utility::hitroundlimit()) + { + return &"MP_ROUND_LIMIT_REACHED"; + } + + if(maps\mp\_utility::hitwinlimit()) + { + return &"MP_SCORE_LIMIT_REACHED"; + } + + if(param_00 == "axis") + { + return &"SPETSNAZ_WIN"; + } + + return &"SAS_WIN"; +} + +//Function Number: 66 +estimatedtimetillscorelimit(param_00) +{ + var_01 = getscoreperminute(param_00); + var_02 = getscoreremaining(param_00); + var_03 = 999999; + if(var_01) + { + var_03 = var_02 / var_01; + } + + return var_03; +} + +//Function Number: 67 +getscoreperminute(param_00) +{ + var_01 = maps\mp\_utility::getwatcheddvar("scorelimit"); + var_02 = maps\mp\_utility::gettimelimit(); + var_03 = maps\mp\_utility::gettimepassed() / -5536 + 0.0001; + if(isplayer(self)) + { + var_04 = self.score / var_03; + } + else + { + var_04 = getteamscore(var_01) / var_04; + } + + return var_04; +} + +//Function Number: 68 +getscoreremaining(param_00) +{ + var_01 = maps\mp\_utility::getwatcheddvar("scorelimit"); + if(isplayer(self)) + { + var_02 = var_01 - self.score; + } + else + { + var_02 = var_02 - getteamscore(var_01); + } + + return var_02; +} + +//Function Number: 69 +givelastonteamwarning() +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + maps\mp\_utility::waittillrecoveredhealth(3); + var_00 = maps\mp\_utility::getotherteam(self.pers["team"]); + thread maps\mp\_utility::teamplayercardsplash("callout_lastteammemberalive",self,self.pers["team"]); + thread maps\mp\_utility::teamplayercardsplash("callout_lastenemyalive",self,var_00); + level notify("last_alive",self); +} + +//Function Number: 70 +processlobbydata() +{ + var_00 = 0; + foreach(var_02 in level.players) + { + if(!isdefined(var_02)) + { + continue; + } + + var_02.clientmatchdataid = var_00; + var_00++; + if(level.ps3 && var_02.name.size > level.maxnamelength) + { + var_03 = ""; + for(var_04 = 0;var_04 < level.maxnamelength - 3;var_04++) + { + var_03 = var_03 + var_02.name[var_04]; + } + + var_03 = var_03 + "..."; + } + else + { + var_03 = var_02.name; + } + + setclientmatchdata("players",var_02.clientmatchdataid,"xuid",var_03); + } + + maps\mp\_awards::assignawards(); + maps\mp\_scoreboard::processlobbyscoreboards(); + sendclientmatchdata(); +} + +//Function Number: 71 +trackleaderboarddeathstats(param_00,param_01) +{ + thread threadedsetweaponstatbyname(param_00,1,"deaths"); +} + +//Function Number: 72 +trackattackerleaderboarddeathstats(param_00,param_01) +{ + if(isdefined(self) && isplayer(self)) + { + if(param_01 != "MOD_FALLING") + { + if(param_01 == "MOD_MELEE" && !issubstr(param_00,"riotshield")) + { + return; + } + + thread threadedsetweaponstatbyname(param_00,1,"kills"); + } + + if(param_01 == "MOD_HEAD_SHOT") + { + thread threadedsetweaponstatbyname(param_00,1,"headShots"); + } + } +} + +//Function Number: 73 +setweaponstat(param_00,param_01,param_02) +{ + if(!param_01) + { + return; + } + + var_03 = maps\mp\_utility::getweaponclass(param_00); + if(maps\mp\_utility::iskillstreakweapon(param_00) || var_03 == "killstreak" || var_03 == "deathstreak" || var_03 == "other") + { + return; + } + + if(maps\mp\_utility::isenvironmentweapon(param_00)) + { + return; + } + + if(var_03 == "weapon_grenade" || var_03 == "weapon_riot" || var_03 == "weapon_explosive") + { + var_04 = maps\mp\_utility::strip_suffix(param_00,"_mp"); + maps\mp\gametypes\_persistance::incrementweaponstat(var_04,param_02,param_01); + maps\mp\_matchdata::logweaponstat(var_04,param_02,param_01); + return; + } + + if(var_03 != "deaths") + { + param_01 = self getcurrentweapon(); + } + + if(maps\mp\_utility::iskillstreakweapon(param_01) || var_04 == "killstreak" || var_04 == "deathstreak" || var_04 == "other") + { + return; + } + + if(!isdefined(self.trackingweaponname)) + { + self.trackingweaponname = param_01; + } + + if(param_01 != self.trackingweaponname) + { + maps\mp\gametypes\_persistance::updateweaponbufferedstats(); + self.trackingweaponname = param_01; + } + + switch(var_03) + { + case "shots": + self.trackingweaponshots++; + break; + + case "hits": + self.trackingweaponhits++; + break; + + case "headShots": + self.trackingweaponheadshots++; + self.trackingweaponhits++; + break; + + case "kills": + self.trackingweaponkills++; + break; + } + + if(var_03 == "deaths") + { + var_05 = param_01; + var_06 = strtok(param_01,"_"); + var_07 = undefined; + if(var_06[0] == "iw5") + { + var_04 = var_06[0] + "_" + var_06[1]; + } + else if(var_06[0] == "alt") + { + var_04 = var_06[1] + "_" + var_06[2]; + } + else + { + var_04 = var_06[0]; + } + + if(!maps\mp\_utility::iscacprimaryweapon(var_07) && !maps\mp\_utility::iscacsecondaryweapon(var_07)) + { + return; + } + + if(var_05[0] == "alt") + { + var_07 = var_05[1] + "_" + var_05[2]; + foreach(var_09 in var_05) + { + if(var_09 == "gl" || var_09 == "gp25" || var_09 == "m320") + { + var_06 = "gl"; + break; + } + + if(var_09 == "shotgun") + { + var_06 = "shotgun"; + break; + } + } + } + + if(isdefined(var_06) && var_06 == "gl" || var_06 == "shotgun") + { + maps\mp\gametypes\_persistance::incrementattachmentstat(var_06,param_02,param_01); + maps\mp\_matchdata::logattachmentstat(var_06,param_02,param_01); + return; + } + + maps\mp\gametypes\_persistance::incrementweaponstat(var_07,param_02,param_01); + maps\mp\_matchdata::logweaponstat(var_07,"deaths",param_01); + if(var_05[0] != "none") + { + for(var_0B = 0;var_0B < var_05.size;var_0B++) + { + if(var_05[var_0B] == "alt") + { + var_0B = var_0B + 2; + continue; + } + + if(var_05[var_0B] == "iw5") + { + var_0B = var_0B + 1; + continue; + } + + if(var_05[var_0B] == "mp") + { + continue; + } + + if(issubstr(var_05[var_0B],"camo")) + { + continue; + } + + if(issubstr(var_05[var_0B],"scope") && !issubstr(var_05[var_0B],"vz")) + { + continue; + } + + if(issubstr(var_05[var_0B],"scope") && issubstr(var_05[var_0B],"vz")) + { + var_05[var_0B] = "vzscope"; + } + + var_05[var_0B] = maps\mp\_utility::validateattachment(var_05[var_0B]); + if(var_0B == 0 && var_05[var_0B] != "iw5" && var_05[var_0B] != "alt") + { + continue; + } + + maps\mp\gametypes\_persistance::incrementattachmentstat(var_05[var_0B],param_02,param_01); + maps\mp\_matchdata::logattachmentstat(var_05[var_0B],param_02,param_01); + } + } + } +} + +//Function Number: 74 +setinflictorstat(param_00,param_01,param_02) +{ + if(!isdefined(param_01)) + { + return; + } + + if(!isdefined(param_00)) + { + param_01 setweaponstat(param_02,1,"hits"); + return; + } + + if(!isdefined(param_00.playeraffectedarray)) + { + param_00.playeraffectedarray = []; + } + + var_03 = 1; + for(var_04 = 0;var_04 < param_00.playeraffectedarray.size;var_04++) + { + if(param_00.playeraffectedarray[var_04] == self) + { + var_03 = 0; + break; + } + } + + if(var_03) + { + param_00.playeraffectedarray[param_00.playeraffectedarray.size] = self; + param_01 setweaponstat(param_02,1,"hits"); + } +} + +//Function Number: 75 +threadedsetweaponstatbyname(param_00,param_01,param_02) +{ + self endon("disconnect"); + waittillframeend; + setweaponstat(param_00,param_01,param_02); +} + +//Function Number: 76 +checkforpersonalbests() +{ + foreach(var_01 in level.players) + { + if(!isdefined(var_01)) + { + continue; + } + + if(var_01 maps\mp\_utility::rankingenabled()) + { + var_02 = var_01 getplayerdata("round","kills"); + var_03 = var_01 getplayerdata("round","deaths"); + var_04 = var_01.pers["summary"]["xp"]; + var_05 = var_01 getplayerdata("bestKills"); + var_06 = var_01 getplayerdata("mostDeaths"); + var_07 = var_01 getplayerdata("mostXp"); + if(var_02 > var_05) + { + var_01 setplayerdata("bestKills",var_02); + } + + if(var_04 > var_07) + { + var_01 setplayerdata("mostXp",var_04); + } + + if(var_03 > var_06) + { + var_01 setplayerdata("mostDeaths",var_03); + } + + var_01 checkforbestweapon(); + var_01 maps\mp\_matchdata::logplayerxp(var_04,"totalXp"); + var_01 maps\mp\_matchdata::logplayerxp(var_01.pers["summary"]["score"],"scoreXp"); + var_01 maps\mp\_matchdata::logplayerxp(var_01.pers["summary"]["challenge"],"challengeXp"); + var_01 maps\mp\_matchdata::logplayerxp(var_01.pers["summary"]["match"],"matchXp"); + var_01 maps\mp\_matchdata::logplayerxp(var_01.pers["summary"]["misc"],"miscXp"); + } + + if(isdefined(var_01.pers["confirmed"])) + { + var_01 maps\mp\_matchdata::logkillsconfirmed(); + } + + if(isdefined(var_01.pers["denied"])) + { + var_01 maps\mp\_matchdata::logkillsdenied(); + } + } +} + +//Function Number: 77 +checkforbestweapon() +{ + var_00 = maps\mp\_matchdata::buildbaseweaponlist(); + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + var_02 = var_00[var_01]; + var_03 = strtok(var_02,"_"); + if(var_03[0] == "iw5") + { + var_02 = var_03[0] + "_" + var_03[1]; + } + + if(var_03[0] == "alt") + { + var_02 = var_03[1] + "_" + var_03[2]; + } + + var_04 = maps\mp\_utility::getweaponclass(var_02); + if(!maps\mp\_utility::iskillstreakweapon(var_02) && var_04 != "killstreak" && var_04 != "deathstreak" && var_04 != "other") + { + var_05 = self getplayerdata("bestWeapon","kills"); + var_06 = getmatchdata("players",self.clientid,"weaponStats",var_02,"kills"); + if(var_06 > var_05) + { + self setplayerdata("bestWeapon","kills",var_06); + var_07 = getmatchdata("players",self.clientid,"weaponStats",var_02,"shots"); + var_08 = getmatchdata("players",self.clientid,"weaponStats",var_02,"headShots"); + var_09 = getmatchdata("players",self.clientid,"weaponStats",var_02,"hits"); + var_0A = getmatchdata("players",self.clientid,"weaponStats",var_02,"deaths"); + var_0B = getmatchdata("players",self.clientid,"weaponStats",var_02,"XP"); + self setplayerdata("bestWeapon","shots",var_07); + self setplayerdata("bestWeapon","headShots",var_08); + self setplayerdata("bestWeapon","hits",var_09); + self setplayerdata("bestWeapon","deaths",var_0A); + self setplayerdata("bestWeaponXP",var_0B); + self setplayerdata("bestWeaponIndex",var_01); + } + } + } +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/gametypes/_gameobjects.gsc b/MW3/PC/MP/maps/mp/gametypes/_gameobjects.gsc new file mode 100644 index 0000000..3a461ac --- /dev/null +++ b/MW3/PC/MP/maps/mp/gametypes/_gameobjects.gsc @@ -0,0 +1,2280 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_gameobjects.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 86 + * Decompile Time: 1231 ms + * Timestamp: 10/27/2023 2:12:28 AM +*******************************************************************/ + +//Function Number: 1 +main(param_00) +{ + var_01 = getentarray(); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + if(isdefined(var_01[var_02].script_gameobjectname)) + { + var_03 = 1; + var_04 = strtok(var_01[var_02].script_gameobjectname," "); + for(var_05 = 0;var_05 < var_7B.size;var_05++ = "airdrop_pallet") + { + var_06 = 0; + while(var_06 < var_04.size) + { + if(var_04[var_06] == var_7B[var_05]) + { + var_03 = 0; + break; + } + + var_06++ = var_7B[param_00.size]; + } + + if(!var_03) + { + break; + } + } + + if(var_03) + { + var_01[var_02] delete(); + } + } + } +} + +//Function Number: 2 +init() +{ + level.numgametypereservedobjectives = 0; + precacheitem("briefcase_bomb_mp"); + precacheitem("briefcase_bomb_defuse_mp"); + precachemodel("prop_suitcase_bomb"); + level.objidstart = 0; + level thread onplayerconnect(); +} + +//Function Number: 3 +onplayerconnect() +{ + level endon("game_ended"); + for(;;) + { + level waittill("connected",var_00); + var_00 thread onplayerspawned(); + var_00 thread ondisconnect(); + } +} + +//Function Number: 4 +onplayerspawned() +{ + self endon("disconnect"); + level endon("game_ended"); + for(;;) + { + self waittill("spawned_player"); + if(isdefined(self.gameobject_fauxspawn)) + { + self.gameobject_fauxspawn = undefined; + continue; + } + + thread ondeath(); + self.touchtriggers = []; + self.carryobject = undefined; + self.claimtrigger = undefined; + self.canpickupobject = 1; + self.killedinuse = undefined; + } +} + +//Function Number: 5 +ondeath() +{ + level endon("game_ended"); + self waittill("death"); + if(isdefined(self.carryobject)) + { + self.carryobject thread setdropped(); + } +} + +//Function Number: 6 +ondisconnect() +{ + level endon("game_ended"); + self waittill("disconnect"); + if(isdefined(self.carryobject)) + { + self.carryobject thread setdropped(); + } +} + +//Function Number: 7 +createcarryobject(param_00,param_01,param_02,param_03) +{ + var_04 = spawnstruct(); + var_04.type = "carryObject"; + var_04.curorigin = param_01.origin; + var_04.ownerteam = param_00; + var_04.entnum = param_01 getentitynumber(); + if(issubstr(param_01.classname,"use")) + { + var_04.triggertype = "use"; + } + else + { + var_04.triggertype = "proximity"; + } + + param_01.baseorigin = param_01.origin; + var_04.trigger = param_01; + var_04.useweapon = undefined; + if(!isdefined(param_03)) + { + param_03 = (0,0,0); + } + + var_04.offset3d = param_03; + for(var_05 = 0;var_05 < param_02.size;var_05++) + { + param_02[var_05].baseorigin = param_02[var_05].origin; + param_02[var_05].baseangles = param_02[var_05].angles; + } + + var_04.visuals = param_02; + var_04.compassicons = []; + var_04.objidallies = getnextobjid(); + var_04.objidaxis = getnextobjid(); + var_04.objidpingfriendly = 0; + var_04.objidpingenemy = 0; + level.objidstart = level.objidstart + 2; + objective_add(var_04.objidallies,"invisible",var_04.curorigin); + objective_add(var_04.objidaxis,"invisible",var_04.curorigin); + objective_team(var_04.objidallies,"allies"); + objective_team(var_04.objidaxis,"axis"); + var_04.objpoints["allies"] = maps\mp\gametypes\_objpoints::createteamobjpoint("objpoint_allies_" + var_04.entnum,var_04.curorigin + param_03,"allies",undefined); + var_04.objpoints["axis"] = maps\mp\gametypes\_objpoints::createteamobjpoint("objpoint_axis_" + var_04.entnum,var_04.curorigin + param_03,"axis",undefined); + var_04.objpoints["allies"].alpha = 0; + var_04.objpoints["axis"].alpha = 0; + var_04.carrier = undefined; + var_04.isresetting = 0; + var_04.interactteam = "none"; + var_04.allowweapons = 0; + var_04.worldicons = []; + var_04.carriervisible = 0; + var_04.visibleteam = "none"; + var_04.carryicon = undefined; + var_04.ondrop = undefined; + var_04.onpickup = undefined; + var_04.onreset = undefined; + if(var_04.triggertype == "use") + { + var_04 thread carryobjectusethink(); + } + else + { + var_04.curprogress = 0; + var_04.usetime = 0; + var_04.userate = 0; + var_04.teamusetimes = []; + var_04.teamusetexts = []; + var_04.numtouching["neutral"] = 0; + var_04.numtouching["axis"] = 0; + var_04.numtouching["allies"] = 0; + var_04.numtouching["none"] = 0; + var_04.touchlist["neutral"] = []; + var_04.touchlist["axis"] = []; + var_04.touchlist["allies"] = []; + var_04.touchlist["none"] = []; + var_04.claimteam = "none"; + var_04.claimplayer = undefined; + var_04.lastclaimteam = "none"; + var_04.lastclaimtime = 0; + var_04 thread carryobjectproxthink(); + } + + var_04 thread updatecarryobjectorigin(); + return var_04; +} + +//Function Number: 8 +carryobjectusethink() +{ + level endon("game_ended"); + for(;;) + { + self.trigger waittill("trigger",var_00); + if(self.isresetting) + { + continue; + } + + if(!maps\mp\_utility::isreallyalive(var_00)) + { + continue; + } + + if(!caninteractwith(var_00.pers["team"])) + { + continue; + } + + if(!var_00.canpickupobject) + { + continue; + } + + if(isdefined(var_00.throwinggrenade)) + { + continue; + } + + if(isdefined(self.carrier)) + { + continue; + } + + if(var_00 maps\mp\_utility::isusingremote()) + { + continue; + } + + setpickedup(var_00); + } +} + +//Function Number: 9 +carryobjectproxthink() +{ + thread carryobjectproxthinkdelayed(); +} + +//Function Number: 10 +carryobjectproxthinkinstant() +{ + level endon("game_ended"); + for(;;) + { + self.trigger waittill("trigger",var_00); + if(self.isresetting) + { + continue; + } + + if(!maps\mp\_utility::isreallyalive(var_00)) + { + continue; + } + + if(!caninteractwith(var_00.pers["team"])) + { + continue; + } + + if(!var_00.canpickupobject) + { + continue; + } + + if(isdefined(var_00.throwinggrenade)) + { + continue; + } + + if(isdefined(self.carrier)) + { + continue; + } + + setpickedup(var_00); + } +} + +//Function Number: 11 +carryobjectproxthinkdelayed() +{ + level endon("game_ended"); + thread proxtriggerthink(); + for(;;) + { + if(self.usetime && self.curprogress >= self.usetime) + { + self.curprogress = 0; + var_00 = getearliestclaimplayer(); + if(isdefined(self.onenduse)) + { + self [[ self.onenduse ]](getclaimteam(),var_00,isdefined(var_00)); + } + + if(isdefined(var_00)) + { + setpickedup(var_00); + } + + setclaimteam("none"); + self.claimplayer = undefined; + } + + if(self.claimteam != "none") + { + if(self.usetime) + { + if(!self.numtouching[self.claimteam]) + { + if(isdefined(self.onenduse)) + { + self [[ self.onenduse ]](getclaimteam(),self.claimplayer,0); + } + + setclaimteam("none"); + self.claimplayer = undefined; + } + else + { + self.curprogress = self.curprogress + 50 * self.userate; + if(isdefined(self.onuseupdate)) + { + self [[ self.onuseupdate ]](getclaimteam(),self.curprogress / self.usetime,50 * self.userate / self.usetime); + } + } + } + else + { + if(maps\mp\_utility::isreallyalive(self.claimplayer)) + { + setpickedup(self.claimplayer); + } + + setclaimteam("none"); + self.claimplayer = undefined; + } + } + + wait 0.05; + maps\mp\gametypes\_hostmigration::waittillhostmigrationdone(); + } +} + +//Function Number: 12 +pickupobjectdelay(param_00) +{ + level endon("game_ended"); + self endon("death"); + self endon("disconnect"); + self.canpickupobject = 0; + for(;;) + { + if(distancesquared(self.origin,param_00) > 4096) + { + break; + } + + wait 0.2; + } + + self.canpickupobject = 1; +} + +//Function Number: 13 +setpickedup(param_00) +{ + if(isdefined(param_00.carryobject)) + { + if(isdefined(self.onpickupfailed)) + { + self [[ self.onpickupfailed ]](param_00); + } + + return; + } + + param_00 giveobject(self); + setcarrier(param_00); + for(var_01 = 0;var_01 < self.visuals.size;var_01++) + { + self.visuals[var_01] hide(); + } + + self.trigger.origin = self.trigger.origin + (0,0,10000); + self notify("pickup_object"); + if(isdefined(self.onpickup)) + { + self [[ self.onpickup ]](param_00); + } + + updatecompassicons(); + updateworldicons(); +} + +//Function Number: 14 +updatecarryobjectorigin() +{ + level endon("game_ended"); + var_00 = 5; + for(;;) + { + if(isdefined(self.carrier)) + { + self.curorigin = self.carrier.origin + (0,0,75); + self.objpoints["allies"] maps\mp\gametypes\_objpoints::updateorigin(self.curorigin); + self.objpoints["axis"] maps\mp\gametypes\_objpoints::updateorigin(self.curorigin); + if((self.visibleteam == "friendly" || self.visibleteam == "any") && isfriendlyteam("allies") && self.objidpingfriendly) + { + if(self.objpoints["allies"].isshown) + { + self.objpoints["allies"].alpha = self.objpoints["allies"].basealpha; + self.objpoints["allies"] fadeovertime(var_00 + 1); + self.objpoints["allies"].alpha = 0; + } + + objective_position(self.objidallies,self.curorigin); + } + else if((self.visibleteam == "friendly" || self.visibleteam == "any") && isfriendlyteam("axis") && self.objidpingfriendly) + { + if(self.objpoints["axis"].isshown) + { + self.objpoints["axis"].alpha = self.objpoints["axis"].basealpha; + self.objpoints["axis"] fadeovertime(var_00 + 1); + self.objpoints["axis"].alpha = 0; + } + + objective_position(self.objidaxis,self.curorigin); + } + + if((self.visibleteam == "enemy" || self.visibleteam == "any") && !isfriendlyteam("allies") && self.objidpingenemy) + { + if(self.objpoints["allies"].isshown) + { + self.objpoints["allies"].alpha = self.objpoints["allies"].basealpha; + self.objpoints["allies"] fadeovertime(var_00 + 1); + self.objpoints["allies"].alpha = 0; + } + + objective_position(self.objidallies,self.curorigin); + } + else if((self.visibleteam == "enemy" || self.visibleteam == "any") && !isfriendlyteam("axis") && self.objidpingenemy) + { + if(self.objpoints["axis"].isshown) + { + self.objpoints["axis"].alpha = self.objpoints["axis"].basealpha; + self.objpoints["axis"] fadeovertime(var_00 + 1); + self.objpoints["axis"].alpha = 0; + } + + objective_position(self.objidaxis,self.curorigin); + } + + maps\mp\_utility::wait_endon(var_00,"dropped","reset"); + continue; + } + + self.objpoints["allies"] maps\mp\gametypes\_objpoints::updateorigin(self.curorigin + self.offset3d); + self.objpoints["axis"] maps\mp\gametypes\_objpoints::updateorigin(self.curorigin + self.offset3d); + wait 0.05; + } +} + +//Function Number: 15 +hidecarryiconongameend() +{ + self endon("disconnect"); + self endon("death"); + self endon("drop_object"); + level waittill("game_ended"); + if(isdefined(self.carryicon)) + { + self.carryicon.alpha = 0; + } +} + +//Function Number: 16 +giveobject(param_00) +{ + self.carryobject = param_00; + thread trackcarrier(); + if(!param_00.allowweapons) + { + common_scripts\utility::_disableweapon(); + thread manualdropthink(); + } + + if(isdefined(param_00.carryicon)) + { + if(level.splitscreen) + { + self.carryicon = maps\mp\gametypes\_hud_util::createicon(param_00.carryicon,33,33); + self.carryicon maps\mp\gametypes\_hud_util::setpoint("BOTTOM RIGHT","BOTTOM RIGHT",-50,-78); + } + else + { + self.carryicon = maps\mp\gametypes\_hud_util::createicon(param_00.carryicon,50,50); + self.carryicon maps\mp\gametypes\_hud_util::setpoint("BOTTOM RIGHT","BOTTOM RIGHT",-50,-65); + } + + self.carryicon.hidewheninmenu = 1; + thread hidecarryiconongameend(); + } +} + +//Function Number: 17 +returnhome() +{ + self.isresetting = 1; + self notify("reset"); + for(var_00 = 0;var_00 < self.visuals.size;var_00++) + { + self.visuals[var_00].origin = self.visuals[var_00].baseorigin; + self.visuals[var_00].angles = self.visuals[var_00].baseangles; + self.visuals[var_00] show(); + } + + self.trigger.origin = self.trigger.baseorigin; + self.curorigin = self.trigger.origin; + if(isdefined(self.onreset)) + { + self [[ self.onreset ]](); + } + + clearcarrier(); + updateworldicons(); + updatecompassicons(); + self.isresetting = 0; +} + +//Function Number: 18 +ishome() +{ + if(isdefined(self.carrier)) + { + return 0; + } + + if(self.curorigin != self.trigger.baseorigin) + { + return 0; + } + + return 1; +} + +//Function Number: 19 +setposition(param_00,param_01) +{ + self.isresetting = 1; + for(var_02 = 0;var_02 < self.visuals.size;var_02++) + { + self.visuals[var_02].origin = self.origin; + self.visuals[var_02].angles = self.angles; + self.visuals[var_02] show(); + } + + self.trigger.origin = param_00; + self.curorigin = self.trigger.origin; + clearcarrier(); + updateworldicons(); + updatecompassicons(); + self.isresetting = 0; +} + +//Function Number: 20 +onplayerlaststand() +{ + if(isdefined(self.carryobject)) + { + self.carryobject thread setdropped(); + } +} + +//Function Number: 21 +setdropped() +{ + self.isresetting = 1; + self notify("dropped"); + if(isdefined(self.carrier) && self.carrier.team != "spectator") + { + var_00 = playerphysicstrace(self.carrier.origin + (0,0,20),self.carrier.origin - (0,0,2000),0,self.carrier.body); + var_01 = bullettrace(self.carrier.origin + (0,0,20),self.carrier.origin - (0,0,2000),0,self.carrier.body); + } + else + { + var_00 = playerphysicstrace(self.safeorigin + (0,0,20),self.safeorigin - (0,0,20),0,undefined); + var_01 = bullettrace(self.safeorigin + (0,0,20),self.safeorigin - (0,0,20),0,undefined); + } + + var_02 = self.carrier; + var_03 = 0; + if(isdefined(var_00)) + { + var_04 = randomfloat(360); + var_05 = var_00; + if(var_01["fraction"] < 1 && distance(var_01["position"],var_00) < 10) + { + var_06 = (cos(var_04),sin(var_04),0); + var_06 = vectornormalize(var_06 - var_01["normal"] * vectordot(var_06,var_01["normal"])); + var_07 = vectortoangles(var_06); + } + else + { + var_07 = (0,var_05,0); + } + + for(var_08 = 0;var_08 < self.visuals.size;var_08++) + { + self.visuals[var_08].origin = var_05; + self.visuals[var_08].angles = var_07; + self.visuals[var_08] show(); + } + + self.trigger.origin = var_05; + self.curorigin = self.trigger.origin; + thread pickuptimeout(); + } + + if(!isdefined(var_00)) + { + for(var_08 = 0;var_08 < self.visuals.size;var_08++) + { + self.visuals[var_08].origin = self.visuals[var_08].baseorigin; + self.visuals[var_08].angles = self.visuals[var_08].baseangles; + self.visuals[var_08] show(); + } + + self.trigger.origin = self.trigger.baseorigin; + self.curorigin = self.trigger.baseorigin; + } + + if(isdefined(self.ondrop)) + { + self [[ self.ondrop ]](var_02); + } + + clearcarrier(); + updatecompassicons(); + updateworldicons(); + self.isresetting = 0; +} + +//Function Number: 22 +setcarrier(param_00) +{ + self.carrier = param_00; + thread updatevisibilityaccordingtoradar(); +} + +//Function Number: 23 +clearcarrier() +{ + if(!isdefined(self.carrier)) + { + return; + } + + self.carrier takeobject(self); + self.carrier = undefined; + self notify("carrier_cleared"); +} + +//Function Number: 24 +pickuptimeout() +{ + self endon("pickup_object"); + self endon("stop_pickup_timeout"); + wait 0.05; + var_00 = getentarray("minefield","targetname"); + var_01 = getentarray("trigger_hurt","classname"); + var_02 = getentarray("radiation","targetname"); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + if(!self.visuals[0] istouching(var_02[var_03])) + { + continue; + } + + returnhome(); + return; + } + + for(var_03 = 0;var_03 < var_00.size;var_03++) + { + if(!self.visuals[0] istouching(var_00[var_03])) + { + continue; + } + + returnhome(); + return; + } + + for(var_03 = 0;var_03 < var_01.size;var_03++) + { + if(!self.visuals[0] istouching(var_01[var_03])) + { + continue; + } + + returnhome(); + return; + } + + if(isdefined(self.autoresettime)) + { + wait self.autoresettime; + if(!isdefined(self.carrier)) + { + returnhome(); + } + } +} + +//Function Number: 25 +takeobject(param_00) +{ + if(isdefined(self.carryicon)) + { + self.carryicon maps\mp\gametypes\_hud_util::destroyelem(); + } + + if(isdefined(self)) + { + self.carryobject = undefined; + } + + self notify("drop_object"); + if(param_00.triggertype == "proximity") + { + thread pickupobjectdelay(param_00.trigger.origin); + } + + if(maps\mp\_utility::isreallyalive(self) && !param_00.allowweapons) + { + common_scripts\utility::_enableweapon(); + } +} + +//Function Number: 26 +trackcarrier() +{ + level endon("game_ended"); + self endon("disconnect"); + self endon("death"); + self endon("drop_object"); + while(isdefined(self.carryobject) && maps\mp\_utility::isreallyalive(self)) + { + if(self isonground()) + { + var_00 = bullettrace(self.origin + (0,0,20),self.origin - (0,0,20),0,undefined); + if(var_00["fraction"] < 1) + { + self.carryobject.safeorigin = var_00["position"]; + } + } + + wait 0.05; + } +} + +//Function Number: 27 +manualdropthink() +{ + level endon("game_ended"); + self endon("disconnect"); + self endon("death"); + self endon("drop_object"); + for(;;) + { + while(self attackbuttonpressed() || self fragbuttonpressed() || self secondaryoffhandbuttonpressed() || self meleebuttonpressed()) + { + wait 0.05; + } + + while(!self attackbuttonpressed() && !self fragbuttonpressed() && !self secondaryoffhandbuttonpressed() && !self meleebuttonpressed()) + { + wait 0.05; + } + + if(isdefined(self.carryobject) && !self usebuttonpressed()) + { + self.carryobject thread setdropped(); + } + } +} + +//Function Number: 28 +deleteuseobject() +{ + maps\mp\_utility::_objective_delete(self.objidallies); + maps\mp\_utility::_objective_delete(self.objidaxis); + maps\mp\gametypes\_objpoints::deleteobjpoint(self.objpoints["allies"]); + maps\mp\gametypes\_objpoints::deleteobjpoint(self.objpoints["axis"]); + self.trigger = undefined; + self notify("deleted"); +} + +//Function Number: 29 +createuseobject(param_00,param_01,param_02,param_03) +{ + var_04 = spawnstruct(); + var_04.type = "useObject"; + var_04.curorigin = param_01.origin; + var_04.ownerteam = param_00; + var_04.entnum = param_01 getentitynumber(); + var_04.keyobject = undefined; + if(issubstr(param_01.classname,"use")) + { + var_04.triggertype = "use"; + } + else + { + var_04.triggertype = "proximity"; + } + + var_04.trigger = param_01; + for(var_05 = 0;var_05 < param_02.size;var_05++) + { + param_02[var_05].baseorigin = param_02[var_05].origin; + param_02[var_05].baseangles = param_02[var_05].angles; + } + + var_04.visuals = param_02; + if(!isdefined(param_03)) + { + param_03 = (0,0,0); + } + + var_04.offset3d = param_03; + var_04.compassicons = []; + var_04.objidallies = getnextobjid(); + var_04.objidaxis = getnextobjid(); + objective_add(var_04.objidallies,"invisible",var_04.curorigin); + objective_add(var_04.objidaxis,"invisible",var_04.curorigin); + objective_team(var_04.objidallies,"allies"); + objective_team(var_04.objidaxis,"axis"); + var_04.objpoints["allies"] = maps\mp\gametypes\_objpoints::createteamobjpoint("objpoint_allies_" + var_04.entnum,var_04.curorigin + param_03,"allies",undefined); + var_04.objpoints["axis"] = maps\mp\gametypes\_objpoints::createteamobjpoint("objpoint_axis_" + var_04.entnum,var_04.curorigin + param_03,"axis",undefined); + var_04.objpoints["allies"].alpha = 0; + var_04.objpoints["axis"].alpha = 0; + var_04.interactteam = "none"; + var_04.worldicons = []; + var_04.visibleteam = "none"; + var_04.onuse = undefined; + var_04.oncantuse = undefined; + var_04.usetext = "default"; + var_04.usetime = 10000; + var_04.curprogress = 0; + if(var_04.triggertype == "proximity") + { + var_04.teamusetimes = []; + var_04.teamusetexts = []; + var_04.numtouching["neutral"] = 0; + var_04.numtouching["axis"] = 0; + var_04.numtouching["allies"] = 0; + var_04.numtouching["none"] = 0; + var_04.touchlist["neutral"] = []; + var_04.touchlist["axis"] = []; + var_04.touchlist["allies"] = []; + var_04.touchlist["none"] = []; + var_04.userate = 0; + var_04.claimteam = "none"; + var_04.claimplayer = undefined; + var_04.lastclaimteam = "none"; + var_04.lastclaimtime = 0; + var_04 thread useobjectproxthink(); + } + else + { + var_04.userate = 1; + var_04 thread useobjectusethink(); + } + + return var_04; +} + +//Function Number: 30 +setkeyobject(param_00) +{ + self.keyobject = param_00; +} + +//Function Number: 31 +useobjectusethink() +{ + level endon("game_ended"); + self endon("deleted"); + for(;;) + { + self.trigger waittill("trigger",var_00); + if(!maps\mp\_utility::isreallyalive(var_00)) + { + continue; + } + + if(!caninteractwith(var_00.pers["team"])) + { + continue; + } + + if(!var_00 isonground()) + { + continue; + } + + if(!var_00 maps\mp\_utility::isjuggernaut() && maps\mp\_utility::iskillstreakweapon(var_00 getcurrentweapon())) + { + continue; + } + + if(isdefined(self.keyobject) && !isdefined(var_00.carryobject) || var_00.carryobject != self.keyobject) + { + if(isdefined(self.oncantuse)) + { + self [[ self.oncantuse ]](var_00); + } + + continue; + } + + if(!var_00 common_scripts\utility::isweaponenabled()) + { + continue; + } + + var_01 = 1; + if(self.usetime > 0) + { + if(isdefined(self.onbeginuse)) + { + self [[ self.onbeginuse ]](var_00); + } + + if(!isdefined(self.keyobject)) + { + thread cantusehintthink(); + } + + var_02 = var_00.pers["team"]; + var_01 = useholdthink(var_00); + self notify("finished_use"); + if(isdefined(self.onenduse)) + { + self [[ self.onenduse ]](var_02,var_00,var_01); + } + } + + if(!var_01) + { + continue; + } + + if(isdefined(self.onuse)) + { + self [[ self.onuse ]](var_00); + } + } +} + +//Function Number: 32 +cantusehintthink() +{ + level endon("game_ended"); + self endon("deleted"); + self endon("finished_use"); + for(;;) + { + self.trigger waittill("trigger",var_00); + if(!maps\mp\_utility::isreallyalive(var_00)) + { + continue; + } + + if(!caninteractwith(var_00.pers["team"])) + { + continue; + } + + if(isdefined(self.oncantuse)) + { + self [[ self.oncantuse ]](var_00); + } + } +} + +//Function Number: 33 +getearliestclaimplayer() +{ + var_00 = self.claimteam; + if(maps\mp\_utility::isreallyalive(self.claimplayer)) + { + var_01 = self.claimplayer; + } + else + { + var_01 = undefined; + } + + if(self.touchlist[var_00].size > 0) + { + var_02 = undefined; + var_03 = getarraykeys(self.touchlist[var_00]); + for(var_04 = 0;var_04 < var_03.size;var_04++) + { + var_05 = self.touchlist[var_00][var_03[var_04]]; + if(maps\mp\_utility::isreallyalive(var_05.player) && !isdefined(var_02) || var_05.starttime < var_02) + { + var_01 = var_05.player; + var_02 = var_05.starttime; + } + } + } + + return var_01; +} + +//Function Number: 34 +useobjectproxthink() +{ + level endon("game_ended"); + self endon("deleted"); + thread proxtriggerthink(); + for(;;) + { + if(self.usetime && self.curprogress >= self.usetime) + { + self.curprogress = 0; + var_00 = getearliestclaimplayer(); + if(isdefined(self.onenduse)) + { + self [[ self.onenduse ]](getclaimteam(),var_00,isdefined(var_00)); + } + + if(isdefined(var_00) && isdefined(self.onuse)) + { + self [[ self.onuse ]](var_00); + } + + setclaimteam("none"); + self.claimplayer = undefined; + } + + if(self.claimteam != "none") + { + if(self.usetime) + { + if(!self.numtouching[self.claimteam]) + { + if(isdefined(self.onenduse)) + { + self [[ self.onenduse ]](getclaimteam(),self.claimplayer,0); + } + + setclaimteam("none"); + self.claimplayer = undefined; + } + else + { + self.curprogress = self.curprogress + 50 * self.userate; + if(isdefined(self.onuseupdate)) + { + self [[ self.onuseupdate ]](getclaimteam(),self.curprogress / self.usetime,50 * self.userate / self.usetime); + } + } + } + else + { + if(isdefined(self.onuse)) + { + self [[ self.onuse ]](self.claimplayer); + } + + setclaimteam("none"); + self.claimplayer = undefined; + } + } + + wait 0.05; + maps\mp\gametypes\_hostmigration::waittillhostmigrationdone(); + } +} + +//Function Number: 35 +proxtriggerthink() +{ + level endon("game_ended"); + self endon("deleted"); + var_00 = self.entnum; + for(;;) + { + self.trigger waittill("trigger",var_01); + if(!maps\mp\_utility::isreallyalive(var_01)) + { + continue; + } + + if(isdefined(self.carrier)) + { + continue; + } + + if(var_01 maps\mp\_utility::isusingremote() || isdefined(var_01.spawningafterremotedeath)) + { + continue; + } + + if(isdefined(var_01.classname) && var_01.classname == "script_vehicle") + { + continue; + } + + if(level.gametype == "ctfpro") + { + if(isdefined(self.type) && self.type == "carryObject" && isdefined(var_01.carryflag)) + { + continue; + } + } + + if(caninteractwith(var_01.pers["team"],var_01) && self.claimteam == "none") + { + if(!isdefined(self.keyobject) || isdefined(var_01.carryobject) && var_01.carryobject == self.keyobject) + { + if(!proxtriggerlos(var_01)) + { + continue; + } + + setclaimteam(var_01.pers["team"]); + self.claimplayer = var_01; + var_02 = getrelativeteam(var_01.pers["team"]); + if(isdefined(self.teamusetimes[var_02])) + { + self.usetime = self.teamusetimes[var_02]; + } + + if(self.usetime && isdefined(self.onbeginuse)) + { + self [[ self.onbeginuse ]](self.claimplayer); + } + } + else if(isdefined(self.oncantuse)) + { + self [[ self.oncantuse ]](var_01); + } + } + + if(self.usetime && maps\mp\_utility::isreallyalive(var_01) && !isdefined(var_01.touchtriggers[var_00])) + { + var_01 thread triggertouchthink(self); + } + } +} + +//Function Number: 36 +proxtriggerlos(param_00) +{ + if(!isdefined(self.requireslos)) + { + return 1; + } + + var_01 = param_00 geteye(); + var_02 = self.trigger.origin + (0,0,32); + var_03 = bullettrace(var_01,var_02,0,undefined); + return var_03["fraction"] == 1; +} + +//Function Number: 37 +setclaimteam(param_00) +{ + if(self.claimteam == "none" && gettime() - self.lastclaimtime > 1000) + { + self.curprogress = 0; + } + else if(param_00 != "none" && param_00 != self.lastclaimteam) + { + self.curprogress = 0; + } + + self.lastclaimteam = self.claimteam; + self.lastclaimtime = gettime(); + self.claimteam = param_00; + updateuserate(); +} + +//Function Number: 38 +getclaimteam() +{ + return self.claimteam; +} + +//Function Number: 39 +triggertouchthink(param_00) +{ + var_01 = self.pers["team"]; + param_00.numtouching[var_01]++; + var_02 = self.guid; + var_03 = spawnstruct(); + var_03.player = self; + var_03.starttime = gettime(); + param_00.touchlist[var_01][var_02] = var_03; + if(!isdefined(param_00.nousebar)) + { + param_00.nousebar = 0; + } + + self.touchtriggers[param_00.entnum] = param_00.trigger; + param_00 updateuserate(); + while(maps\mp\_utility::isreallyalive(self) && isdefined(param_00.trigger) && self istouching(param_00.trigger) && !level.gameended && param_00.usetime) + { + updateproxbar(param_00,0); + wait 0.05; + } + + if(isdefined(self)) + { + updateproxbar(param_00,1); + self.touchtriggers[param_00.entnum] = undefined; + } + + if(level.gameended) + { + return; + } + + param_00.touchlist[var_01][var_02] = undefined; + param_00.numtouching[var_01]--; + param_00 updateuserate(); +} + +//Function Number: 40 +updateproxbar(param_00,param_01) +{ + if(param_01 || !param_00 caninteractwith(self.pers["team"]) || self.pers["team"] != param_00.claimteam || param_00.nousebar) + { + if(isdefined(self.proxbar)) + { + self.proxbar maps\mp\gametypes\_hud_util::hideelem(); + } + + if(isdefined(self.proxbartext)) + { + self.proxbartext maps\mp\gametypes\_hud_util::hideelem(); + } + + return; + } + + if(!isdefined(self.proxbar)) + { + self.proxbar = maps\mp\gametypes\_hud_util::createprimaryprogressbar(); + self.proxbar.lastuserate = -1; + self.proxbar.lasthostmigrationstate = 0; + } + + if(self.proxbar.hidden) + { + self.proxbar maps\mp\gametypes\_hud_util::showelem(); + self.proxbar.lastuserate = -1; + self.proxbar.lasthostmigrationstate = 0; + } + + if(!isdefined(self.proxbartext)) + { + self.proxbartext = maps\mp\gametypes\_hud_util::createprimaryprogressbartext(); + var_02 = param_00 getrelativeteam(self.pers["team"]); + if(isdefined(param_00.teamusetexts[var_02])) + { + self.proxbartext settext(param_00.teamusetexts[var_02]); + } + else + { + self.proxbartext settext(param_00.usetext); + } + } + + if(self.proxbartext.hidden) + { + self.proxbartext maps\mp\gametypes\_hud_util::showelem(); + var_02 = param_00 getrelativeteam(self.pers["team"]); + if(isdefined(param_00.teamusetexts[var_02])) + { + self.proxbartext settext(param_00.teamusetexts[var_02]); + } + else + { + self.proxbartext settext(param_00.usetext); + } + } + + if(self.proxbar.lastuserate != param_00.userate || self.proxbar.lasthostmigrationstate != isdefined(level.hostmigrationtimer)) + { + if(param_00.curprogress > param_00.usetime) + { + param_00.curprogress = param_00.usetime; + } + + var_03 = param_00.curprogress / param_00.usetime; + var_04 = 1000 / param_00.usetime * param_00.userate; + if(isdefined(level.hostmigrationtimer)) + { + var_04 = 0; + } + + self.proxbar maps\mp\gametypes\_hud_util::updatebar(var_03,var_04); + self.proxbar.lastuserate = param_00.userate; + self.proxbar.lasthostmigrationstate = isdefined(level.hostmigrationtimer); + } +} + +//Function Number: 41 +updateuserate() +{ + var_00 = self.numtouching[self.claimteam]; + var_01 = 0; + var_02 = 0; + if(self.claimteam != "axis") + { + var_01 = var_01 + self.numtouching["axis"]; + } + + if(self.claimteam != "allies") + { + var_01 = var_01 + self.numtouching["allies"]; + } + + foreach(var_04 in self.touchlist[self.claimteam]) + { + if(var_04.player.pers["team"] != self.claimteam) + { + continue; + } + + if(var_04.player.objectivescaler == 1) + { + continue; + } + + var_00 = var_00 * var_04.player.objectivescaler; + var_02 = var_04.player.objectivescaler; + } + + self.userate = 0; + if(var_00 && !var_01) + { + self.userate = min(var_00,4); + } + + if(isdefined(self.isarena) && self.isarena && var_02 != 0) + { + self.userate = 1 * var_02; + return; + } + + if(isdefined(self.isarena) && self.isarena) + { + self.userate = 1; + } +} + +//Function Number: 42 +attachusemodel() +{ + self endon("death"); + self endon("disconnect"); + self endon("done_using"); + wait 1.3; + self attach("prop_suitcase_bomb","tag_inhand",1); + self.attachedusemodel = "prop_suitcase_bomb"; +} + +//Function Number: 43 +useholdthink(param_00) +{ + param_00 notify("use_hold"); + param_00 playerlinkto(self.trigger); + param_00 playerlinkedoffsetenable(); + param_00 clientclaimtrigger(self.trigger); + param_00.claimtrigger = self.trigger; + var_01 = self.useweapon; + var_02 = param_00 getcurrentweapon(); + if(isdefined(var_01)) + { + if(var_02 == var_01) + { + var_02 = param_00.lastnonuseweapon; + } + + param_00.lastnonuseweapon = var_02; + param_00 maps\mp\_utility::_giveweapon(var_01); + param_00 setweaponammostock(var_01,0); + param_00 setweaponammoclip(var_01,0); + param_00 switchtoweapon(var_01); + param_00 thread attachusemodel(); + } + else + { + param_00 common_scripts\utility::_disableweapon(); + } + + self.curprogress = 0; + self.inuse = 1; + self.userate = 0; + param_00 thread personalusebar(self); + var_03 = useholdthinkloop(param_00,var_02); + if(isdefined(param_00)) + { + param_00 detachusemodels(); + param_00 notify("done_using"); + } + + if(isdefined(var_01) && isdefined(param_00)) + { + param_00 thread takeuseweapon(var_01); + } + + if(isdefined(var_03) && var_03) + { + return 1; + } + + if(isdefined(param_00)) + { + param_00.claimtrigger = undefined; + if(isdefined(var_01)) + { + if(var_02 != "none") + { + param_00 switchtoweapon(var_02); + } + else + { + param_00 takeweapon(var_01); + } + } + else + { + param_00 common_scripts\utility::_enableweapon(); + } + + param_00 unlink(); + if(!maps\mp\_utility::isreallyalive(param_00)) + { + param_00.killedinuse = 1; + } + } + + self.inuse = 0; + self.trigger releaseclaimedtrigger(); + return 0; +} + +//Function Number: 44 +detachusemodels() +{ + if(isdefined(self.attachedusemodel)) + { + self detach(self.attachedusemodel,"tag_inhand"); + self.attachedusemodel = undefined; + } +} + +//Function Number: 45 +takeuseweapon(param_00) +{ + self endon("use_hold"); + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + while(self getcurrentweapon() == param_00 && !isdefined(self.throwinggrenade)) + { + wait 0.05; + } + + self takeweapon(param_00); +} + +//Function Number: 46 +useholdthinkloop(param_00,param_01) +{ + level endon("game_ended"); + self endon("disabled"); + var_02 = self.useweapon; + var_03 = 1; + var_04 = 0; + var_05 = 1.5; + while(maps\mp\_utility::isreallyalive(param_00) && param_00 istouching(self.trigger) && param_00 usebuttonpressed() && !isdefined(param_00.throwinggrenade) && !param_00 meleebuttonpressed() && self.curprogress < self.usetime && self.userate || var_03 && !var_03 && var_04 > var_05) + { + var_04 = var_04 + 0.05; + if(!isdefined(var_02) || param_00 getcurrentweapon() == var_02) + { + self.curprogress = self.curprogress + 50 * self.userate; + self.userate = 1 * param_00.objectivescaler; + var_03 = 0; + } + else + { + self.userate = 0; + } + + if(self.curprogress >= self.usetime) + { + self.inuse = 0; + param_00 clientreleasetrigger(self.trigger); + param_00.claimtrigger = undefined; + if(isdefined(var_02)) + { + param_00 setweaponammostock(var_02,1); + param_00 setweaponammoclip(var_02,1); + if(param_01 != "none") + { + param_00 switchtoweapon(param_01); + } + else + { + param_00 takeweapon(var_02); + } + } + else + { + param_00 common_scripts\utility::_enableweapon(); + } + + param_00 unlink(); + return maps\mp\_utility::isreallyalive(param_00); + } + + wait 0.05; + maps\mp\gametypes\_hostmigration::waittillhostmigrationdone(); + } + + return 0; +} + +//Function Number: 47 +personalusebar(param_00) +{ + self endon("disconnect"); + var_01 = maps\mp\gametypes\_hud_util::createprimaryprogressbar(); + var_02 = maps\mp\gametypes\_hud_util::createprimaryprogressbartext(); + var_02 settext(param_00.usetext); + var_03 = -1; + var_04 = isdefined(level.hostmigrationtimer); + while(maps\mp\_utility::isreallyalive(self) && param_00.inuse && !level.gameended) + { + if(var_03 != param_00.userate || var_04 != isdefined(level.hostmigrationtimer)) + { + if(param_00.curprogress > param_00.usetime) + { + param_00.curprogress = param_00.usetime; + } + + var_05 = param_00.curprogress / param_00.usetime; + var_06 = 1000 / param_00.usetime * param_00.userate; + if(isdefined(level.hostmigrationtimer)) + { + var_06 = 0; + } + + var_01 maps\mp\gametypes\_hud_util::updatebar(var_05,var_06); + if(!param_00.userate) + { + var_01 maps\mp\gametypes\_hud_util::hideelem(); + var_02 maps\mp\gametypes\_hud_util::hideelem(); + } + else + { + var_01 maps\mp\gametypes\_hud_util::showelem(); + var_02 maps\mp\gametypes\_hud_util::showelem(); + } + } + + var_03 = param_00.userate; + var_04 = isdefined(level.hostmigrationtimer); + wait 0.05; + } + + var_01 maps\mp\gametypes\_hud_util::destroyelem(); + var_02 maps\mp\gametypes\_hud_util::destroyelem(); +} + +//Function Number: 48 +updatetrigger() +{ + if(self.triggertype != "use") + { + return; + } + + if(self.interactteam == "none") + { + self.trigger.origin = self.trigger.origin - (0,0,50000); + return; + } + + if(self.interactteam == "any") + { + self.trigger.origin = self.curorigin; + self.trigger setteamfortrigger("none"); + return; + } + + if(self.interactteam == "friendly") + { + self.trigger.origin = self.curorigin; + if(self.ownerteam == "allies") + { + self.trigger setteamfortrigger("allies"); + return; + } + + if(self.ownerteam == "axis") + { + self.trigger setteamfortrigger("axis"); + return; + } + + self.trigger.origin = self.trigger.origin - (0,0,50000); + return; + } + + if(self.interactteam == "enemy") + { + self.trigger.origin = self.curorigin; + if(self.ownerteam == "allies") + { + self.trigger setteamfortrigger("axis"); + return; + } + + if(self.ownerteam == "axis") + { + self.trigger setteamfortrigger("allies"); + return; + } + + self.trigger setteamfortrigger("none"); + return; + } +} + +//Function Number: 49 +updateworldicons() +{ + if(self.visibleteam == "any") + { + updateworldicon("friendly",1); + updateworldicon("enemy",1); + return; + } + + if(self.visibleteam == "friendly") + { + updateworldicon("friendly",1); + updateworldicon("enemy",0); + return; + } + + if(self.visibleteam == "enemy") + { + updateworldicon("friendly",0); + updateworldicon("enemy",1); + return; + } + + updateworldicon("friendly",0); + updateworldicon("enemy",0); +} + +//Function Number: 50 +updateworldicon(param_00,param_01) +{ + if(!isdefined(self.worldicons[param_00])) + { + param_01 = 0; + } + + var_02 = getupdateteams(param_00); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + var_04 = "objpoint_" + var_02[var_03] + "_" + self.entnum; + var_05 = maps\mp\gametypes\_objpoints::getobjpointbyname(var_04); + var_05 notify("stop_flashing_thread"); + var_05 thread maps\mp\gametypes\_objpoints::stopflashing(); + if(param_01) + { + var_05 setshader(self.worldicons[param_00],level.objpointsize,level.objpointsize); + var_05 fadeovertime(0.05); + var_05.alpha = var_05.basealpha; + var_05.isshown = 1; + if(isdefined(self.compassicons[param_00])) + { + var_05 setwaypoint(1,1); + } + else + { + var_05 setwaypoint(1,0); + } + + if(self.type == "carryObject") + { + if(isdefined(self.carrier) && !shouldpingobject(param_00)) + { + var_05 settargetent(self.carrier); + } + else + { + var_05 cleartargetent(); + } + } + } + else + { + var_05 fadeovertime(0.05); + var_05.alpha = 0; + var_05.isshown = 0; + var_05 cleartargetent(); + } + + var_05 thread hideworldiconongameend(); + } +} + +//Function Number: 51 +hideworldiconongameend() +{ + self notify("hideWorldIconOnGameEnd"); + self endon("hideWorldIconOnGameEnd"); + self endon("death"); + level waittill("game_ended"); + if(isdefined(self)) + { + self.alpha = 0; + } +} + +//Function Number: 52 +updatetimer(param_00,param_01) +{ +} + +//Function Number: 53 +updatecompassicons() +{ + if(self.visibleteam == "any") + { + updatecompassicon("friendly",1); + updatecompassicon("enemy",1); + return; + } + + if(self.visibleteam == "friendly") + { + updatecompassicon("friendly",1); + updatecompassicon("enemy",0); + return; + } + + if(self.visibleteam == "enemy") + { + updatecompassicon("friendly",0); + updatecompassicon("enemy",1); + return; + } + + updatecompassicon("friendly",0); + updatecompassicon("enemy",0); +} + +//Function Number: 54 +updatecompassicon(param_00,param_01) +{ + var_02 = getupdateteams(param_00); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + var_04 = param_01; + if(!var_04 && shouldshowcompassduetoradar(var_02[var_03])) + { + var_04 = 1; + } + + var_05 = self.objidallies; + if(var_02[var_03] == "axis") + { + var_05 = self.objidaxis; + } + + if(!isdefined(self.compassicons[param_00]) || !var_04) + { + objective_state(var_05,"invisible"); + continue; + } + + objective_icon(var_05,self.compassicons[param_00]); + objective_state(var_05,"active"); + if(self.type == "carryObject") + { + if(maps\mp\_utility::isreallyalive(self.carrier) && !shouldpingobject(param_00)) + { + objective_onentity(var_05,self.carrier); + continue; + } + + objective_position(var_05,self.curorigin); + } + } +} + +//Function Number: 55 +shouldpingobject(param_00) +{ + if(param_00 == "friendly" && self.objidpingfriendly) + { + return 1; + } + else if(param_00 == "enemy" && self.objidpingenemy) + { + return 1; + } + + return 0; +} + +//Function Number: 56 +getupdateteams(param_00) +{ + var_01 = []; + if(param_00 == "friendly") + { + if(isfriendlyteam("allies")) + { + } + else if(isfriendlyteam("axis")) + { + } + } + else if(var_01 == "enemy") + { + if(!isfriendlyteam("allies")) + { + } + + if(!isfriendlyteam("axis")) + { + } + } + + return var_7B; +} + +//Function Number: 57 +shouldshowcompassduetoradar(param_00) +{ + if(!isdefined(self.carrier)) + { + return 0; + } + + if(self.carrier maps\mp\_utility::_hasperk("specialty_gpsjammer")) + { + return 0; + } + + return getteamradar(param_00); +} + +//Function Number: 58 +updatevisibilityaccordingtoradar() +{ + self endon("death"); + self endon("carrier_cleared"); + for(;;) + { + level waittill("radar_status_change"); + updatecompassicons(); + } +} + +//Function Number: 59 +setownerteam(param_00) +{ + self.ownerteam = param_00; + updatetrigger(); + updatecompassicons(); + updateworldicons(); +} + +//Function Number: 60 +getownerteam() +{ + return self.ownerteam; +} + +//Function Number: 61 +setusetime(param_00) +{ + self.usetime = int(param_00 * 1000); +} + +//Function Number: 62 +setusetext(param_00) +{ + self.usetext = param_00; +} + +//Function Number: 63 +setteamusetime(param_00,param_01) +{ + self.teamusetimes[param_00] = int(param_01 * 1000); +} + +//Function Number: 64 +setteamusetext(param_00,param_01) +{ + self.teamusetexts[param_00] = param_01; +} + +//Function Number: 65 +setusehinttext(param_00) +{ + self.trigger sethintstring(param_00); +} + +//Function Number: 66 +allowcarry(param_00) +{ + self.interactteam = param_00; +} + +//Function Number: 67 +allowuse(param_00) +{ + self.interactteam = param_00; + updatetrigger(); +} + +//Function Number: 68 +setvisibleteam(param_00) +{ + self.visibleteam = param_00; + updatecompassicons(); + updateworldicons(); +} + +//Function Number: 69 +setmodelvisibility(param_00) +{ + if(param_00) + { + for(var_01 = 0;var_01 < self.visuals.size;var_01++) + { + self.visuals[var_01] show(); + if(self.visuals[var_01].classname == "script_brushmodel" || self.visuals[var_01].classname == "script_model") + { + foreach(var_03 in level.players) + { + if(var_03 istouching(self.visuals[var_01])) + { + var_03 maps\mp\_utility::_suicide(); + } + } + + self.visuals[var_01] thread makesolid(); + } + } + + return; + } + + for(var_01 = 0;var_01 < self.visuals.size;var_01++) + { + self.visuals[var_01] hide(); + if(self.visuals[var_01].classname == "script_brushmodel" || self.visuals[var_01].classname == "script_model") + { + self.visuals[var_01] notify("changing_solidness"); + self.visuals[var_01] notsolid(); + } + } +} + +//Function Number: 70 +makesolid() +{ + self endon("death"); + self notify("changing_solidness"); + self endon("changing_solidness"); + for(;;) + { + for(var_00 = 0;var_00 < level.players.size;var_00++) + { + if(level.players[var_00] istouching(self)) + { + break; + } + } + + if(var_00 == level.players.size) + { + self solid(); + break; + } + + wait 0.05; + } +} + +//Function Number: 71 +setcarriervisible(param_00) +{ + self.carriervisible = param_00; +} + +//Function Number: 72 +setcanuse(param_00) +{ + self.useteam = param_00; +} + +//Function Number: 73 +set2dicon(param_00,param_01) +{ + self.compassicons[param_00] = param_01; + updatecompassicons(); +} + +//Function Number: 74 +set3dicon(param_00,param_01) +{ + self.worldicons[param_00] = param_01; + updateworldicons(); +} + +//Function Number: 75 +set3duseicon(param_00,param_01) +{ + self.worlduseicons[param_00] = param_01; +} + +//Function Number: 76 +setcarryicon(param_00) +{ + self.carryicon = param_00; +} + +//Function Number: 77 +disableobject() +{ + self notify("disabled"); + if(self.type == "carryObject") + { + if(isdefined(self.carrier)) + { + self.carrier takeobject(self); + } + + for(var_00 = 0;var_00 < self.visuals.size;var_00++) + { + self.visuals[var_00] hide(); + } + } + + self.trigger common_scripts\utility::trigger_off(); + setvisibleteam("none"); +} + +//Function Number: 78 +enableobject() +{ + if(self.type == "carryObject") + { + for(var_00 = 0;var_00 < self.visuals.size;var_00++) + { + self.visuals[var_00] show(); + } + } + + self.trigger common_scripts\utility::trigger_on(); + setvisibleteam("any"); +} + +//Function Number: 79 +getrelativeteam(param_00) +{ + if(param_00 == self.ownerteam) + { + return "friendly"; + } + + return "enemy"; +} + +//Function Number: 80 +isfriendlyteam(param_00) +{ + if(self.ownerteam == "any") + { + return 1; + } + + if(self.ownerteam == param_00) + { + return 1; + } + + return 0; +} + +//Function Number: 81 +caninteractwith(param_00,param_01) +{ + switch(self.interactteam) + { + case "none": + return 0; + + case "any": + return 1; + + case "friendly": + if(param_00 == self.ownerteam) + { + return 1; + } + else + { + return 0; + } + + break; + + case "enemy": + if(param_00 != self.ownerteam) + { + return 1; + } + else + { + return 0; + } + + break; + + default: + return 0; + } +} + +//Function Number: 82 +isteam(param_00) +{ + if(param_00 == "neutral") + { + return 1; + } + + if(param_00 == "allies") + { + return 1; + } + + if(param_00 == "axis") + { + return 1; + } + + if(param_00 == "any") + { + return 1; + } + + if(param_00 == "none") + { + return 1; + } + + return 0; +} + +//Function Number: 83 +isrelativeteam(param_00) +{ + if(param_00 == "friendly") + { + return 1; + } + + if(param_00 == "enemy") + { + return 1; + } + + if(param_00 == "any") + { + return 1; + } + + if(param_00 == "none") + { + return 1; + } + + return 0; +} + +//Function Number: 84 +getenemyteam(param_00) +{ + if(param_00 == "neutral") + { + return "none"; + } + + if(param_00 == "allies") + { + return "axis"; + } + + return "allies"; +} + +//Function Number: 85 +getnextobjid() +{ + if(!isdefined(level.reclaimedreservedobjectives) || level.reclaimedreservedobjectives.size < 1) + { + var_00 = level.numgametypereservedobjectives; + level.numgametypereservedobjectives++; + } + else + { + var_00 = level.reclaimedreservedobjectives[level.reclaimedreservedobjectives.size - 1]; + level.reclaimedreservedobjectives[level.reclaimedreservedobjectives.size - 1] = undefined; + } + + if(var_00 > 31) + { + var_00 = 31; + } + + return var_00; +} + +//Function Number: 86 +getlabel() +{ + var_00 = self.trigger.script_label; + if(!isdefined(var_00)) + { + var_00 = ""; + return var_00; + } + + if(var_00[0] != "_") + { + return "_" + var_00; + } + + return var_00; +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/gametypes/_globallogic.gsc b/MW3/PC/MP/maps/mp/gametypes/_globallogic.gsc new file mode 100644 index 0000000..96b5aae --- /dev/null +++ b/MW3/PC/MP/maps/mp/gametypes/_globallogic.gsc @@ -0,0 +1,190 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_globallogic.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 9 + * Decompile Time: 126 ms + * Timestamp: 10/27/2023 2:12:29 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level.splitscreen = issplitscreen(); + level.ps3 = getdvar("ps3Game") == "true"; + level.xenon = getdvar("xenonGame") == "true"; + level.console = level.ps3 || level.xenon; + level.onlinegame = getdvarint("onlinegame"); + level.rankedmatch = !level.onlinegame || !getdvarint("xblive_privatematch"); + level.script = tolower(getdvar("mapname")); + level.gametype = tolower(getdvar("g_gametype")); + level.otherteam["allies"] = "axis"; + level.otherteam["axis"] = "allies"; + level.teambased = 0; + level.objectivebased = 0; + level.endgameontimelimit = 1; + level.showingfinalkillcam = 0; + level.tispawndelay = getdvarint("scr_tispawndelay"); + if(!isdefined(level.tweakablesinitialized)) + { + maps\mp\gametypes\_tweakables::init(); + } + + precachestring(&"MP_HALFTIME"); + precachestring(&"MP_OVERTIME"); + precachestring(&"MP_ROUNDEND"); + precachestring(&"MP_INTERMISSION"); + precachestring(&"MP_SWITCHING_SIDES"); + precachestring(&"MP_FRIENDLY_FIRE_WILL_NOT"); + precachestring(&"PLATFORM_REVIVE"); + precachestring(&"MP_OBITUARY_NEUTRAL"); + precachestring(&"MP_OBITUARY_FRIENDLY"); + precachestring(&"MP_OBITUARY_ENEMY"); + if(level.splitscreen) + { + precachestring(&"MP_ENDED_GAME"); + } + else + { + precachestring(&"MP_HOST_ENDED_GAME"); + } + + level.halftimetype = "halftime"; + level.halftimesubcaption = &"MP_SWITCHING_SIDES"; + level.laststatustime = 0; + level.waswinning = "none"; + level.lastslowprocessframe = 0; + level.placement["allies"] = []; + level.placement["axis"] = []; + level.placement["all"] = []; + level.postroundtime = 5; + level.playerslookingforsafespawn = []; + registerdvars(); + precachemodel("vehicle_mig29_desert"); + precachemodel("projectile_cbu97_clusterbomb"); + precachemodel("tag_origin"); + level.fx_airstrike_afterburner = loadfx("fire/jet_afterburner"); + level.fx_airstrike_contrail = loadfx("smoke/jet_contrail"); + if(maps\mp\_utility::matchmakinggame()) + { + var_00 = " LB_MAP_" + getdvar("ui_mapname"); + var_01 = " LB_GM_" + level.gametype; + if(getdvarint("g_hardcore")) + { + var_01 = var_01 + "_HC"; + } + + precacheleaderboards("LB_GB_TOTALXP_AT LB_GB_TOTALXP_LT LB_GB_WINS_AT LB_GB_WINS_LT LB_GB_KILLS_AT LB_GB_KILLS_LT LB_GB_ACCURACY_AT LB_ACCOLADES" + var_01 + var_00); + } + + level.teamcount["allies"] = 0; + level.teamcount["axis"] = 0; + level.teamcount["spectator"] = 0; + level.alivecount["allies"] = 0; + level.alivecount["axis"] = 0; + level.alivecount["spectator"] = 0; + level.livescount["allies"] = 0; + level.livescount["axis"] = 0; + level.onelefttime = []; + level.hasspawned["allies"] = 0; + level.hasspawned["axis"] = 0; +} + +//Function Number: 2 +registerdvars() +{ + makedvarserverinfo("ui_bomb_timer",0); + makedvarserverinfo("ui_nuke_end_milliseconds",0); + makedvarserverinfo("ui_danger_team",""); + makedvarserverinfo("ui_inhostmigration",0); + makedvarserverinfo("ui_override_halftime",0); + makedvarserverinfo("camera_thirdPerson",getdvarint("scr_thirdPerson")); +} + +//Function Number: 3 +setupcallbacks() +{ + level.onxpevent = ::onxpevent; + level.getspawnpoint = ::blank; + level.onspawnplayer = ::blank; + level.onrespawndelay = ::blank; + level.ontimelimit = ::maps\mp\gametypes\_gamelogic::default_ontimelimit; + level.onhalftime = ::maps\mp\gametypes\_gamelogic::default_onhalftime; + level.ondeadevent = ::maps\mp\gametypes\_gamelogic::default_ondeadevent; + level.ononeleftevent = ::maps\mp\gametypes\_gamelogic::default_ononeleftevent; + level.onprecachegametype = ::blank; + level.onstartgametype = ::blank; + level.onplayerkilled = ::blank; + level.autoassign = ::maps\mp\gametypes\_menus::menuautoassign; + level.spectator = ::maps\mp\gametypes\_menus::menuspectator; + level.class = ::maps\mp\gametypes\_menus::menuclass; + level.allies = ::maps\mp\gametypes\_menus::menuallies; + level.axis = ::maps\mp\gametypes\_menus::menuaxis; +} + +//Function Number: 4 +blank(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09) +{ +} + +//Function Number: 5 +testmenu() +{ + self endon("death"); + self endon("disconnect"); + for(;;) + { + wait 10; + var_00 = spawnstruct(); + var_00.titletext = &"MP_CHALLENGE_COMPLETED"; + var_00.notifytext = "wheee"; + var_00.sound = "mp_challenge_complete"; + thread maps\mp\gametypes\_hud_message::notifymessage(var_00); + } +} + +//Function Number: 6 +testshock() +{ + self endon("death"); + self endon("disconnect"); + for(;;) + { + wait 3; + var_00 = randomint(6); + for(var_01 = 0;var_01 < var_00;var_01++) + { + iprintlnbold(var_00); + self shellshock("frag_grenade_mp",0.2); + wait 0.1; + } + } +} + +//Function Number: 7 +onxpevent(param_00) +{ + thread maps\mp\gametypes\_rank::giverankxp(param_00); +} + +//Function Number: 8 +fakelag() +{ + self endon("disconnect"); + self.fakelag = randomintrange(50,150); + for(;;) + { + self setclientdvar("fakelag_target",self.fakelag); + wait randomfloatrange(5,15); + } +} + +//Function Number: 9 +debugline(param_00,param_01) +{ + for(var_02 = 0;var_02 < 50;var_02++) + { + wait 0.05; + } +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/gametypes/_healthoverlay.gsc b/MW3/PC/MP/maps/mp/gametypes/_healthoverlay.gsc new file mode 100644 index 0000000..a1542b0 --- /dev/null +++ b/MW3/PC/MP/maps/mp/gametypes/_healthoverlay.gsc @@ -0,0 +1,267 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_healthoverlay.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 8 + * Decompile Time: 134 ms + * Timestamp: 10/27/2023 2:12:30 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level.healthoverlaycutoff = 0.55; + var_00 = 5; + var_00 = maps\mp\gametypes\_tweakables::gettweakablevalue("player","healthregentime"); + level.playerhealth_regularregendelay = var_00 * 1000; + level.healthregendisabled = level.playerhealth_regularregendelay <= 0; + level thread onplayerconnect(); +} + +//Function Number: 2 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_00 thread onplayerspawned(); + } +} + +//Function Number: 3 +onplayerspawned() +{ + self endon("disconnect"); + for(;;) + { + self waittill("spawned_player"); + thread playerhealthregen(); + } +} + +//Function Number: 4 +playerhealthregen() +{ + self endon("death"); + self endon("disconnect"); + self endon("joined_team"); + self endon("joined_spectators"); + self endon("faux_spawn"); + level endon("game_ended"); + if(self.health <= 0) + { + return; + } + + var_00 = 0; + var_01 = 0; + thread playerpainbreathingsound(self.maxhealth * 0.55); + for(;;) + { + self waittill("damage"); + if(self.health <= 0) + { + return; + } + + var_01 = gettime(); + var_02 = self.health / self.maxhealth; + if(!isdefined(self.healthregenlevel)) + { + self.regenspeed = 1; + } + else if(self.healthregenlevel == 0.33) + { + self.regenspeed = 0.75; + } + else if(self.healthregenlevel == 0.66) + { + self.regenspeed = 0.5; + } + else if(self.healthregenlevel == 0.99) + { + self.regenspeed = 0.3; + } + else + { + self.regenspeed = 1; + } + + if(var_02 <= level.healthoverlaycutoff) + { + self.atbrinkofdeath = 1; + } + + thread healthregeneration(var_01,var_02); + thread breathingmanager(var_01,var_02); + } +} + +//Function Number: 5 +breathingmanager(param_00,param_01) +{ + self notify("breathingManager"); + self endon("breathingManager"); + self endon("death"); + self endon("disconnect"); + self endon("joined_team"); + self endon("joined_spectators"); + level endon("game_ended"); + if(maps\mp\_utility::isusingremote()) + { + return; + } + + self.breathingstoptime = param_00 + 6000 * self.regenspeed; + wait 6 * self.regenspeed; + if(!level.gameended) + { + self playlocalsound("breathing_better"); + } +} + +//Function Number: 6 +healthregeneration(param_00,param_01) +{ + self notify("healthRegeneration"); + self endon("healthRegeneration"); + self endon("death"); + self endon("disconnect"); + self endon("joined_team"); + self endon("joined_spectators"); + level endon("game_ended"); + if(level.healthregendisabled) + { + return; + } + + wait level.playerhealth_regularregendelay / 1000 * self.regenspeed; + if(param_01 < 0.55) + { + var_02 = 1; + } + else + { + var_02 = 0; + } + + for(;;) + { + if(self.regenspeed == 0.75) + { + wait 0.2; + if(self.health < self.maxhealth) + { + self.health = self.health + 5; + } + else + { + break; + } + } + else if(self.regenspeed == 0.5) + { + wait 0.05; + if(self.health < self.maxhealth) + { + self.health = self.health + 2; + } + else + { + break; + } + } + else if(self.regenspeed == 0.3) + { + wait 0.15; + if(self.health < self.maxhealth) + { + self.health = self.health + 9; + } + else + { + break; + } + } + else if(!isdefined(self.regenspeed) || self.regenspeed == 1) + { + wait 0.05; + if(self.health < self.maxhealth) + { + self.health = self.health + 1; + param_01 = self.health / self.maxhealth; + } + else + { + break; + } + } + + if(self.health > self.maxhealth) + { + self.health = self.maxhealth; + } + } + + maps\mp\gametypes\_damage::resetattackerlist(); + if(var_02) + { + maps\mp\gametypes\_missions::healthregenerated(); + } +} + +//Function Number: 7 +wait_for_not_using_remote() +{ + self notify("waiting_to_stop_remote"); + self endon("waiting_to_stop_remote"); + self endon("death"); + level endon("game_ended"); + self waittill("stopped_using_remote"); + if(isdefined(level.nukedetonated)) + { + self visionsetnakedforplayer(level.nukevisionset,0); + return; + } + + self visionsetnakedforplayer("",0); +} + +//Function Number: 8 +playerpainbreathingsound(param_00) +{ + level endon("game_ended"); + self endon("death"); + self endon("disconnect"); + self endon("joined_team"); + self endon("joined_spectators"); + wait 2; + for(;;) + { + wait 0.2; + if(self.health <= 0) + { + return; + } + + if(self.health >= param_00) + { + continue; + } + + if(level.healthregendisabled && gettime() > self.breathingstoptime) + { + continue; + } + + if(maps\mp\_utility::isusingremote()) + { + continue; + } + + self playlocalsound("breathing_hurt"); + wait 0.784; + wait 0.1 + randomfloat(0.8); + } +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/gametypes/_hostmigration.gsc b/MW3/PC/MP/maps/mp/gametypes/_hostmigration.gsc new file mode 100644 index 0000000..884b29b --- /dev/null +++ b/MW3/PC/MP/maps/mp/gametypes/_hostmigration.gsc @@ -0,0 +1,166 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_hostmigration.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 9 + * Decompile Time: 124 ms + * Timestamp: 10/27/2023 2:12:30 AM +*******************************************************************/ + +//Function Number: 1 +callback_hostmigration() +{ + level.hostmigrationreturnedplayercount = 0; + if(level.gameended) + { + return; + } + + level.hostmigrationtimer = 1; + setdvar("ui_inhostmigration",1); + level notify("host_migration_begin"); + maps\mp\gametypes\_gamelogic::updatetimerpausedness(); + foreach(var_01 in level.players) + { + var_01 thread hostmigrationtimerthink(); + } + + level endon("host_migration_begin"); + hostmigrationwait(); + level.hostmigrationtimer = undefined; + setdvar("ui_inhostmigration",0); + level notify("host_migration_end"); + maps\mp\gametypes\_gamelogic::updatetimerpausedness(); + level thread maps\mp\gametypes\_gamelogic::updategameevents(); +} + +//Function Number: 2 +hostmigrationwait() +{ + level endon("game_ended"); + level.ingraceperiod = 25; + thread maps\mp\gametypes\_gamelogic::matchstarttimer("waiting_for_players",20); + hostmigrationwaitforplayers(); + level.ingraceperiod = 10; + thread maps\mp\gametypes\_gamelogic::matchstarttimer("match_resuming_in",5); + wait 5; + level.ingraceperiod = 0; +} + +//Function Number: 3 +hostmigrationwaitforplayers() +{ + level endon("hostmigration_enoughplayers"); + wait 15; +} + +//Function Number: 4 +hostmigrationtimerthink_internal() +{ + level endon("host_migration_begin"); + level endon("host_migration_end"); + self.hostmigrationcontrolsfrozen = 0; + while(!maps\mp\_utility::isreallyalive(self)) + { + self waittill("spawned"); + } + + self.hostmigrationcontrolsfrozen = 1; + maps\mp\_utility::freezecontrolswrapper(1); + level waittill("host_migration_end"); +} + +//Function Number: 5 +hostmigrationtimerthink() +{ + self endon("disconnect"); + self setclientdvar("cg_scoreboardPingGraph","0"); + hostmigrationtimerthink_internal(); + if(self.hostmigrationcontrolsfrozen) + { + maps\mp\_utility::freezecontrolswrapper(0); + } + + self setclientdvar("cg_scoreboardPingGraph","1"); +} + +//Function Number: 6 +waittillhostmigrationdone() +{ + if(!isdefined(level.hostmigrationtimer)) + { + return 0; + } + + var_00 = gettime(); + level waittill("host_migration_end"); + return gettime() - var_00; +} + +//Function Number: 7 +waittillhostmigrationstarts(param_00) +{ + if(isdefined(level.hostmigrationtimer)) + { + return; + } + + level endon("host_migration_begin"); + wait param_00; +} + +//Function Number: 8 +waitlongdurationwithhostmigrationpause(param_00) +{ + if(param_00 == 0) + { + return; + } + + var_01 = gettime(); + var_02 = gettime() + param_00 * 1000; + while(gettime() < var_02) + { + waittillhostmigrationstarts(var_02 - gettime() / 1000); + if(isdefined(level.hostmigrationtimer)) + { + var_03 = waittillhostmigrationdone(); + var_02 = var_02 + var_03; + } + } + + waittillhostmigrationdone(); + return gettime() - var_01; +} + +//Function Number: 9 +waitlongdurationwithgameendtimeupdate(param_00) +{ + if(param_00 == 0) + { + return; + } + + var_01 = gettime(); + var_02 = gettime() + param_00 * 1000; + while(gettime() < var_02) + { + waittillhostmigrationstarts(var_02 - gettime() / 1000); + while(isdefined(level.hostmigrationtimer)) + { + var_02 = var_02 + 1000; + setgameendtime(int(var_02)); + wait 1; + } + } + + while(isdefined(level.hostmigrationtimer)) + { + var_02 = var_02 + 1000; + setgameendtime(int(var_02)); + wait 1; + } + + return gettime() - var_01; +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/gametypes/_hud.gsc b/MW3/PC/MP/maps/mp/gametypes/_hud.gsc new file mode 100644 index 0000000..88b9f1d --- /dev/null +++ b/MW3/PC/MP/maps/mp/gametypes/_hud.gsc @@ -0,0 +1,78 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_hud.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 3 + * Decompile Time: 49 ms + * Timestamp: 10/27/2023 2:12:31 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + precacheshader("progress_bar_bg"); + precacheshader("progress_bar_fg"); + precacheshader("progress_bar_fill"); + level.uiparent = spawnstruct(); + level.uiparent.horzalign = "left"; + level.uiparent.vertalign = "top"; + level.uiparent.alignx = "left"; + level.uiparent.aligny = "top"; + level.uiparent.x = 0; + level.uiparent.y = 0; + level.uiparent.width = 0; + level.uiparent.height = 0; + level.uiparent.children = []; + level.fontheight = 12; + level.hud["allies"] = spawnstruct(); + level.hud["axis"] = spawnstruct(); + level.primaryprogressbary = -61; + level.primaryprogressbarx = 0; + level.primaryprogressbarheight = 9; + level.primaryprogressbarwidth = 120; + level.primaryprogressbartexty = -75; + level.primaryprogressbartextx = 0; + level.primaryprogressbarfontsize = 0.6; + level.teamprogressbary = 32; + level.teamprogressbarheight = 14; + level.teamprogressbarwidth = 192; + level.teamprogressbartexty = 8; + level.teamprogressbarfontsize = 1.65; + level.lowertextyalign = "BOTTOM"; + level.lowertexty = -90; + level.lowertextfontsize = 1.6; +} + +//Function Number: 2 +fontpulseinit(param_00) +{ + self.basefontscale = self.fontscale; + if(isdefined(param_00)) + { + self.maxfontscale = min(param_00,6.3); + } + else + { + self.maxfontscale = min(self.fontscale * 2,6.3); + } + + self.inframes = 2; + self.outframes = 4; +} + +//Function Number: 3 +fontpulse(param_00) +{ + self notify("fontPulse"); + self endon("fontPulse"); + self endon("death"); + param_00 endon("disconnect"); + param_00 endon("joined_team"); + param_00 endon("joined_spectators"); + self changefontscaleovertime(self.inframes * 0.05); + self.fontscale = self.maxfontscale; + wait self.inframes * 0.05; + self changefontscaleovertime(self.outframes * 0.05); + self.fontscale = self.basefontscale; +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/gametypes/_hud_message.gsc b/MW3/PC/MP/maps/mp/gametypes/_hud_message.gsc new file mode 100644 index 0000000..6633c21 --- /dev/null +++ b/MW3/PC/MP/maps/mp/gametypes/_hud_message.gsc @@ -0,0 +1,1375 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_hud_message.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 35 + * Decompile Time: 506 ms + * Timestamp: 10/27/2023 2:12:32 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + precachestring(&"MP_FIRSTPLACE_NAME"); + precachestring(&"MP_SECONDPLACE_NAME"); + precachestring(&"MP_THIRDPLACE_NAME"); + precachestring(&"MP_MATCH_BONUS_IS"); + precachemenu("splash"); + precachemenu("challenge"); + precachemenu("defcon"); + precachemenu("killstreak"); + precachemenu("perk_display"); + precachemenu("perk_hide"); + precachemenu("killedby_card_display"); + precachemenu("killedby_card_hide"); + precachemenu("youkilled_card_display"); + game["menu_endgameupdate"] = "endgameupdate"; + if(level.splitscreen) + { + game["menu_endgameupdate"] = game["menu_endgameupdate"] + "_splitscreen"; + } + + precachemenu(game["menu_endgameupdate"]); + game["strings"]["draw"] = &"MP_DRAW"; + game["strings"]["round_draw"] = &"MP_ROUND_DRAW"; + game["strings"]["round_win"] = &"MP_ROUND_WIN"; + game["strings"]["round_loss"] = &"MP_ROUND_LOSS"; + game["strings"]["victory"] = &"MP_VICTORY"; + game["strings"]["defeat"] = &"MP_DEFEAT"; + game["strings"]["halftime"] = &"MP_HALFTIME"; + game["strings"]["overtime"] = &"MP_OVERTIME"; + game["strings"]["roundend"] = &"MP_ROUNDEND"; + game["strings"]["intermission"] = &"MP_INTERMISSION"; + game["strings"]["side_switch"] = &"MP_SWITCHING_SIDES"; + game["strings"]["match_bonus"] = &"MP_MATCH_BONUS_IS"; + level thread onplayerconnect(); +} + +//Function Number: 2 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_00 thread hintmessagedeaththink(); + var_00 thread lowermessagethink(); + var_00 thread initnotifymessage(); + } +} + +//Function Number: 3 +hintmessage(param_00) +{ + var_01 = spawnstruct(); + var_01.notifytext = param_00; + var_01.glowcolor = (0.3,0.6,0.3); + notifymessage(var_01); +} + +//Function Number: 4 +initnotifymessage() +{ + if(level.splitscreen || self issplitscreenplayer()) + { + var_00 = 1.5; + var_01 = 1.25; + var_02 = 24; + var_03 = "default"; + var_04 = "TOP"; + var_05 = "BOTTOM"; + var_06 = 0; + var_07 = 0; + } + else + { + var_00 = 2.5; + var_01 = 1.75; + var_02 = 30; + var_03 = "objective"; + var_04 = "TOP"; + var_05 = "BOTTOM"; + var_06 = 50; + var_07 = 0; + } + + self.notifytitle = maps\mp\gametypes\_hud_util::createfontstring(var_03,var_00); + self.notifytitle maps\mp\gametypes\_hud_util::setpoint(var_04,undefined,var_07,var_06); + self.notifytitle.glowcolor = (0.2,0.3,0.7); + self.notifytitle.glowalpha = 1; + self.notifytitle.hidewheninmenu = 1; + self.notifytitle.archived = 0; + self.notifytitle.alpha = 0; + self.notifytext = maps\mp\gametypes\_hud_util::createfontstring(var_03,var_01); + self.notifytext maps\mp\gametypes\_hud_util::setparent(self.notifytitle); + self.notifytext maps\mp\gametypes\_hud_util::setpoint(var_04,var_05,0,0); + self.notifytext.glowcolor = (0.2,0.3,0.7); + self.notifytext.glowalpha = 1; + self.notifytext.hidewheninmenu = 1; + self.notifytext.archived = 0; + self.notifytext.alpha = 0; + self.notifytext2 = maps\mp\gametypes\_hud_util::createfontstring(var_03,var_01); + self.notifytext2 maps\mp\gametypes\_hud_util::setparent(self.notifytitle); + self.notifytext2 maps\mp\gametypes\_hud_util::setpoint(var_04,var_05,0,0); + self.notifytext2.glowcolor = (0.2,0.3,0.7); + self.notifytext2.glowalpha = 1; + self.notifytext2.hidewheninmenu = 1; + self.notifytext2.archived = 0; + self.notifytext2.alpha = 0; + self.notifyicon = maps\mp\gametypes\_hud_util::createicon("white",var_02,var_02); + self.notifyicon maps\mp\gametypes\_hud_util::setparent(self.notifytext2); + self.notifyicon maps\mp\gametypes\_hud_util::setpoint(var_04,var_05,0,0); + self.notifyicon.hidewheninmenu = 1; + self.notifyicon.archived = 0; + self.notifyicon.alpha = 0; + self.notifyoverlay = maps\mp\gametypes\_hud_util::createicon("white",var_02,var_02); + self.notifyoverlay maps\mp\gametypes\_hud_util::setparent(self.notifyicon); + self.notifyoverlay maps\mp\gametypes\_hud_util::setpoint("CENTER","CENTER",0,0); + self.notifyoverlay.hidewheninmenu = 1; + self.notifyoverlay.archived = 0; + self.notifyoverlay.alpha = 0; + self.doingsplash = []; + self.doingsplash[0] = undefined; + self.doingsplash[1] = undefined; + self.doingsplash[2] = undefined; + self.doingsplash[3] = undefined; + self.splashqueue = []; + self.splashqueue[0] = []; + self.splashqueue[1] = []; + self.splashqueue[2] = []; + self.splashqueue[3] = []; +} + +//Function Number: 5 +oldnotifymessage(param_00,param_01,param_02,param_03,param_04,param_05) +{ + var_06 = spawnstruct(); + var_06.titletext = param_00; + var_06.notifytext = param_01; + var_06.iconname = param_02; + var_06.glowcolor = param_03; + var_06.sound = param_04; + var_06.duration = param_05; + notifymessage(var_06); +} + +//Function Number: 6 +notifymessage(param_00) +{ + self endon("death"); + self endon("disconnect"); + if(!isdefined(param_00.slot)) + { + param_00.slot = 0; + } + + var_01 = param_00.slot; + if(!isdefined(param_00.type)) + { + param_00.type = ""; + } + + if(!isdefined(self.doingsplash[var_01])) + { + thread shownotifymessage(param_00); + return; + } + + self.splashqueue[var_01][self.splashqueue[var_01].size] = param_00; +} + +//Function Number: 7 +dispatchnotify(param_00) +{ + var_01 = self.splashqueue[param_00][0]; + for(var_02 = 1;var_02 < self.splashqueue[param_00].size;var_02++) + { + self.splashqueue[param_00][var_02 - 1] = self.splashqueue[param_00][var_02]; + } + + self.splashqueue[param_00][var_02 - 1] = undefined; + if(isdefined(var_01.name)) + { + actionnotify(var_01); + return; + } + + shownotifymessage(var_01); +} + +//Function Number: 8 +promotionsplashnotify() +{ + self endon("disconnect"); + var_00 = spawnstruct(); + var_00.name = "promotion"; + var_00.type = "rank"; + var_00.sound = "mp_level_up"; + var_00.slot = 0; + thread actionnotify(var_00); +} + +//Function Number: 9 +weaponpromotionsplashnotify() +{ + self endon("disconnect"); + var_00 = spawnstruct(); + var_00.name = "promotion_weapon"; + var_00.type = "weaponRank"; + var_00.sound = "mp_level_up"; + var_00.slot = 0; + thread actionnotify(var_00); +} + +//Function Number: 10 +shownotifymessage(param_00) +{ + self endon("disconnect"); + var_01 = param_00.slot; + if(level.gameended) + { + if(isdefined(param_00.type) && param_00.type == "rank") + { + self setclientdvar("ui_promotion",1); + self.postgamepromotion = 1; + } + + if(self.splashqueue[var_01].size) + { + thread dispatchnotify(var_01); + } + + return; + } + + self.doingsplash[var_01] = param_00; + waitrequirevisibility(0); + if(isdefined(param_00.duration)) + { + var_02 = param_00.duration; + } + else if(level.gameended) + { + var_02 = 2; + } + else + { + var_02 = 4; + } + + thread resetoncancel(); + if(isdefined(param_00.sound)) + { + self playlocalsound(param_00.sound); + } + + if(isdefined(param_00.leadersound)) + { + maps\mp\_utility::leaderdialogonplayer(param_00.leadersound); + } + + if(isdefined(param_00.glowcolor)) + { + var_03 = param_00.glowcolor; + } + else + { + var_03 = (0.3,0.6,0.3); + } + + var_04 = self.notifytitle; + if(isdefined(param_00.titletext)) + { + if(isdefined(param_00.titlelabel)) + { + self.notifytitle.label = param_00.titlelabel; + } + else + { + self.notifytitle.label = &""; + } + + if(isdefined(param_00.titlelabel) && !isdefined(param_00.titleisstring)) + { + self.notifytitle setvalue(param_00.titletext); + } + else + { + self.notifytitle settext(param_00.titletext); + } + + self.notifytitle setpulsefx(int(25 * var_02),int(var_02 * 1000),1000); + self.notifytitle.glowcolor = var_03; + self.notifytitle.alpha = 1; + } + + if(isdefined(param_00.textglowcolor)) + { + var_03 = param_00.textglowcolor; + } + + if(isdefined(param_00.notifytext)) + { + if(isdefined(param_00.textlabel)) + { + self.notifytext.label = param_00.textlabel; + } + else + { + self.notifytext.label = &""; + } + + if(isdefined(param_00.textlabel) && !isdefined(param_00.textisstring)) + { + self.notifytext setvalue(param_00.notifytext); + } + else + { + self.notifytext settext(param_00.notifytext); + } + + self.notifytext setpulsefx(100,int(var_02 * 1000),1000); + self.notifytext.glowcolor = var_03; + self.notifytext.alpha = 1; + var_04 = self.notifytext; + } + + if(isdefined(param_00.notifytext2)) + { + self.notifytext2 maps\mp\gametypes\_hud_util::setparent(var_04); + if(isdefined(param_00.text2label)) + { + self.notifytext2.label = param_00.text2label; + } + else + { + self.notifytext2.label = &""; + } + + self.notifytext2 settext(param_00.notifytext2); + self.notifytext2 setpulsefx(100,int(var_02 * 1000),1000); + self.notifytext2.glowcolor = var_03; + self.notifytext2.alpha = 1; + var_04 = self.notifytext2; + } + + if(isdefined(param_00.iconname)) + { + self.notifyicon maps\mp\gametypes\_hud_util::setparent(var_04); + if(level.splitscreen || self issplitscreenplayer()) + { + self.notifyicon setshader(param_00.iconname,30,30); + } + else + { + self.notifyicon setshader(param_00.iconname,60,60); + } + + self.notifyicon.alpha = 0; + if(isdefined(param_00.iconoverlay)) + { + self.notifyicon fadeovertime(0.15); + self.notifyicon.alpha = 1; + param_00.overlayoffsety = 0; + self.notifyoverlay maps\mp\gametypes\_hud_util::setparent(self.notifyicon); + self.notifyoverlay maps\mp\gametypes\_hud_util::setpoint("CENTER","CENTER",0,param_00.overlayoffsety); + self.notifyoverlay setshader(param_00.iconoverlay,512,512); + self.notifyoverlay.alpha = 0; + self.notifyoverlay.color = (1,0,0); + self.notifyoverlay fadeovertime(0.4); + self.notifyoverlay.alpha = 0.85; + self.notifyoverlay scaleovertime(0.4,32,32); + waitrequirevisibility(var_02); + self.notifyicon fadeovertime(0.75); + self.notifyicon.alpha = 0; + self.notifyoverlay fadeovertime(0.75); + self.notifyoverlay.alpha = 0; + } + else + { + self.notifyicon fadeovertime(1); + self.notifyicon.alpha = 1; + waitrequirevisibility(var_02); + self.notifyicon fadeovertime(0.75); + self.notifyicon.alpha = 0; + } + } + else + { + waitrequirevisibility(var_02); + } + + self notify("notifyMessageDone"); + self.doingsplash[var_01] = undefined; + if(self.splashqueue[var_01].size) + { + thread dispatchnotify(var_01); + } +} + +//Function Number: 11 +killstreaksplashnotify(param_00,param_01,param_02) +{ + self endon("disconnect"); + waittillframeend; + if(level.gameended) + { + return; + } + + var_03 = spawnstruct(); + if(isdefined(param_02)) + { + var_03.name = param_00 + "_" + param_02; + } + else + { + var_03.name = param_00; + } + + var_03.type = "killstreak"; + var_03.optionalnumber = param_01; + var_03.sound = maps\mp\killstreaks\_killstreaks::getkillstreaksound(param_00); + var_03.leadersound = param_00; + var_03.leadersoundgroup = "killstreak_earned"; + var_03.slot = 0; + thread actionnotify(var_03); +} + +//Function Number: 12 +defconsplashnotify(param_00,param_01) +{ +} + +//Function Number: 13 +challengesplashnotify(param_00) +{ + self endon("disconnect"); + waittillframeend; + wait 0.05; + var_01 = maps\mp\gametypes\_hud_util::ch_getstate(param_00) - 1; + var_02 = maps\mp\gametypes\_hud_util::ch_gettarget(param_00,var_01); + if(var_02 == 0) + { + var_02 = 1; + } + + if(param_00 == "ch_longersprint_pro") + { + var_02 = int(var_02 / 5280); + } + + var_03 = spawnstruct(); + var_03.type = "challenge"; + var_03.optionalnumber = var_02; + var_03.name = param_00; + var_03.sound = tablelookup("mp/splashTable.csv",0,var_03.name,9); + var_03.slot = 0; + thread actionnotify(var_03); +} + +//Function Number: 14 +splashnotify(param_00,param_01) +{ + self endon("disconnect"); + wait 0.05; + var_02 = spawnstruct(); + var_02.name = param_00; + var_02.optionalnumber = param_01; + var_02.sound = tablelookup("mp/splashTable.csv",0,var_02.name,9); + var_02.slot = 0; + thread actionnotify(var_02); +} + +//Function Number: 15 +splashnotifydelayed(param_00,param_01) +{ + if(level.hardcoremode) + { + return; + } + + self endon("disconnect"); + waittillframeend; + if(level.gameended) + { + return; + } + + var_02 = spawnstruct(); + var_02.name = param_00; + var_02.optionalnumber = param_01; + var_02.sound = tablelookup("mp/splashTable.csv",0,var_02.name,9); + var_02.slot = 0; + thread actionnotify(var_02); +} + +//Function Number: 16 +playercardsplashnotify(param_00,param_01,param_02) +{ + self endon("disconnect"); + waittillframeend; + if(level.gameended) + { + return; + } + + var_03 = spawnstruct(); + var_03.name = param_00; + var_03.optionalnumber = param_02; + var_03.sound = tablelookup("mp/splashTable.csv",0,var_03.name,9); + var_03.playercardplayer = param_01; + var_03.slot = 1; + thread actionnotify(var_03); +} + +//Function Number: 17 +actionnotify(param_00) +{ + self endon("death"); + self endon("disconnect"); + var_01 = param_00.slot; + if(!isdefined(param_00.type)) + { + param_00.type = ""; + } + + if(!isdefined(self.doingsplash[var_01])) + { + thread actionnotifymessage(param_00); + return; + } + else if(param_00.type == "killstreak" && self.doingsplash[var_01].type != "challenge" && self.doingsplash[var_01].type != "rank") + { + self.notifytext.alpha = 0; + self.notifytext2.alpha = 0; + self.notifyicon.alpha = 0; + thread actionnotifymessage(param_00); + return; + } + else if(param_00.type == "challenge" && self.doingsplash[var_01].type != "killstreak" && self.doingsplash[var_01].type != "challenge" && self.doingsplash[var_01].type != "rank") + { + self.notifytext.alpha = 0; + self.notifytext2.alpha = 0; + self.notifyicon.alpha = 0; + thread actionnotifymessage(param_00); + return; + } + + if(param_00.type == "challenge" || param_00.type == "killstreak") + { + if(param_00.type == "killstreak") + { + removetypefromqueue("killstreak",var_01); + } + + for(var_02 = self.splashqueue[var_01].size;var_02 > 0;var_02--) + { + self.splashqueue[var_01][var_02] = self.splashqueue[var_01][var_02 - 1]; + } + + self.splashqueue[var_01][0] = param_00; + return; + } + + self.splashqueue[var_01][self.splashqueue[var_01].size] = param_00; +} + +//Function Number: 18 +removetypefromqueue(param_00,param_01) +{ + var_02 = []; + for(var_03 = 0;var_03 < self.splashqueue[param_01].size;var_03++) + { + if(self.splashqueue[param_01][var_03].type != "killstreak") + { + var_02[var_02.size] = self.splashqueue[param_01][var_03]; + } + } + + self.splashqueue[param_01] = var_02; +} + +//Function Number: 19 +actionnotifymessage(param_00) +{ + self endon("disconnect"); + var_01 = param_00.slot; + if(level.gameended) + { + wait 0; + if(isdefined(param_00.type) && param_00.type == "rank" || param_00.type == "weaponRank") + { + self setclientdvar("ui_promotion",1); + self.postgamepromotion = 1; + } + else if(isdefined(param_00.type) && param_00.type == "challenge") + { + self.pers["postGameChallenges"]++; + self setclientdvar("ui_challenge_" + self.pers["postGameChallenges"] + "_ref",param_00.name); + } + + if(self.splashqueue[var_01].size) + { + thread dispatchnotify(var_01); + } + + return; + } + + if(tablelookup("mp/splashTable.csv",0,param_00.name,0) != "") + { + if(isdefined(param_00.playercardplayer)) + { + self setcarddisplayslot(param_00.playercardplayer,5); + } + + if(isdefined(param_00.optionalnumber)) + { + self showhudsplash(param_00.name,param_00.slot,param_00.optionalnumber); + } + else + { + self showhudsplash(param_00.name,param_00.slot); + } + + self.doingsplash[var_01] = param_00; + var_02 = maps\mp\_utility::stringtofloat(tablelookup("mp/splashTable.csv",0,param_00.name,4)); + if(isdefined(param_00.sound)) + { + self playlocalsound(param_00.sound); + } + + if(isdefined(param_00.leadersound)) + { + if(isdefined(param_00.leadersoundgroup)) + { + maps\mp\_utility::leaderdialogonplayer(param_00.leadersound,param_00.leadersoundgroup,1); + } + else + { + maps\mp\_utility::leaderdialogonplayer(param_00.leadersound); + } + } + + self notify("actionNotifyMessage" + var_01); + self endon("actionNotifyMessage" + var_01); + wait var_02 - 0.05; + self.doingsplash[var_01] = undefined; + } + + if(self.splashqueue[var_01].size) + { + thread dispatchnotify(var_01); + } +} + +//Function Number: 20 +waitrequirevisibility(param_00) +{ + var_01 = 0.05; + while(!canreadtext()) + { + wait var_01; + } + + while(param_00 > 0) + { + wait var_01; + if(canreadtext()) + { + param_00 = param_00 - var_01; + } + } +} + +//Function Number: 21 +canreadtext() +{ + if(maps\mp\_flashgrenades::isflashbanged()) + { + return 0; + } + + return 1; +} + +//Function Number: 22 +resetondeath() +{ + self endon("notifyMessageDone"); + self endon("disconnect"); + level endon("game_ended"); + self waittill("death"); + resetnotify(); +} + +//Function Number: 23 +resetoncancel() +{ + self notify("resetOnCancel"); + self endon("resetOnCancel"); + self endon("notifyMessageDone"); + self endon("disconnect"); + level waittill("cancel_notify"); + resetnotify(); +} + +//Function Number: 24 +resetnotify() +{ + self.notifytitle.alpha = 0; + self.notifytext.alpha = 0; + self.notifyicon.alpha = 0; + self.notifyoverlay.alpha = 0; + self.doingsplash[0] = undefined; + self.doingsplash[1] = undefined; + self.doingsplash[2] = undefined; + self.doingsplash[3] = undefined; +} + +//Function Number: 25 +hintmessagedeaththink() +{ + self endon("disconnect"); + for(;;) + { + self waittill("death"); + if(isdefined(self.hintmessage)) + { + self.hintmessage maps\mp\gametypes\_hud_util::destroyelem(); + } + } +} + +//Function Number: 26 +lowermessagethink() +{ + self endon("disconnect"); + self.lowermessages = []; + self.lowermessage = maps\mp\gametypes\_hud_util::createfontstring("default",level.lowertextfontsize); + self.lowermessage settext(""); + self.lowermessage.archived = 0; + self.lowermessage.sort = 10; + if(level.splitscreen || self issplitscreenplayer()) + { + self.lowermessage maps\mp\gametypes\_hud_util::setpoint("CENTER",level.lowertextyalign,0,level.lowertexty); + var_00 = 0.5; + } + else + { + self.lowermessage maps\mp\gametypes\_hud_util::setpoint("CENTER",level.lowertextyalign,0,level.lowertexty - 40); + var_00 = 0.75; + } + + self.lowertimer = maps\mp\gametypes\_hud_util::createfontstring("hudbig",var_00); + self.lowertimer maps\mp\gametypes\_hud_util::setparent(self.lowermessage); + self.lowertimer maps\mp\gametypes\_hud_util::setpoint("TOP","BOTTOM",0,0); + self.lowertimer settext(""); + self.lowertimer.archived = 0; + self.lowertimer.sort = 10; +} + +//Function Number: 27 +outcomeoverlay(param_00) +{ + if(level.teambased) + { + if(param_00 == "tie") + { + matchoutcomenotify("draw"); + return; + } + + if(param_00 == self.team) + { + matchoutcomenotify("victory"); + return; + } + + matchoutcomenotify("defeat"); + return; + } + + if(param_00 == self) + { + matchoutcomenotify("victory"); + return; + } + + matchoutcomenotify("defeat"); +} + +//Function Number: 28 +matchoutcomenotify(param_00) +{ + var_01 = self.team; + var_02 = maps\mp\gametypes\_hud_util::createfontstring("bigfixed",1); + var_02 maps\mp\gametypes\_hud_util::setpoint("TOP",undefined,0,50); + var_02.foreground = 1; + var_02.glowalpha = 1; + var_02.hidewheninmenu = 0; + var_02.archived = 0; + var_02 settext(game["strings"][param_00]); + var_02.alpha = 0; + var_02 fadeovertime(0.5); + var_02.alpha = 1; + switch(param_00) + { + case "victory": + var_02.glowcolor = (0.6,0.9,0.6); + break; + + default: + var_02.glowcolor = (0.9,0.6,0.6); + break; + } + + var_03 = maps\mp\gametypes\_hud_util::createicon(game["icons"][var_01],64,64); + var_03 maps\mp\gametypes\_hud_util::setparent(var_02); + var_03 maps\mp\gametypes\_hud_util::setpoint("TOP","BOTTOM",0,30); + var_03.foreground = 1; + var_03.hidewheninmenu = 0; + var_03.archived = 0; + var_03.alpha = 0; + var_03 fadeovertime(0.5); + var_03.alpha = 1; + wait 3; + var_02 maps\mp\gametypes\_hud_util::destroyelem(); + var_03 maps\mp\gametypes\_hud_util::destroyelem(); +} + +//Function Number: 29 +isdoingsplash() +{ + if(isdefined(self.doingsplash[0])) + { + return 1; + } + + if(isdefined(self.doingsplash[1])) + { + return 1; + } + + if(isdefined(self.doingsplash[2])) + { + return 1; + } + + if(isdefined(self.doingsplash[3])) + { + return 1; + } + + return 0; +} + +//Function Number: 30 +teamoutcomenotify(param_00,param_01,param_02) +{ + self endon("disconnect"); + self notify("reset_outcome"); + wait 0.5; + var_03 = self.pers["team"]; + if(!isdefined(var_03) || var_03 != "allies" && var_03 != "axis") + { + var_03 = "allies"; + } + + while(isdoingsplash()) + { + wait 0.05; + } + + self endon("reset_outcome"); + if(level.splitscreen || self issplitscreenplayer()) + { + var_04 = 1; + var_05 = -76; + var_06 = 0.667; + var_07 = 12; + var_08 = 0.833; + var_09 = 46; + var_0A = 40; + var_0B = 30; + var_0C = 0; + var_0D = 60; + var_0E = "hudbig"; + } + else + { + var_04 = 1.5; + var_05 = -134; + var_06 = 1; + var_07 = 18; + var_08 = 1.25; + var_09 = 70; + var_0A = 60; + var_0B = 45; + var_0C = 0; + var_0D = 90; + var_0E = "hudbig"; + } + + var_0F = -5536; + var_10 = maps\mp\gametypes\_hud_util::createfontstring(var_0E,var_04); + var_10 maps\mp\gametypes\_hud_util::setpoint("CENTER",undefined,0,var_05); + var_10.foreground = 1; + var_10.glowalpha = 1; + var_10.hidewheninmenu = 0; + var_10.archived = 0; + var_11 = maps\mp\gametypes\_hud_util::createfontstring(var_0E,var_06); + var_11 maps\mp\gametypes\_hud_util::setparent(var_10); + var_11.foreground = 1; + var_11 maps\mp\gametypes\_hud_util::setpoint("TOP","BOTTOM",0,var_07); + var_11.glowalpha = 1; + var_11.hidewheninmenu = 0; + var_11.archived = 0; + if(param_00 == "halftime") + { + var_10.glowcolor = (0.2,0.3,0.7); + var_10 settext(game["strings"]["halftime"]); + var_10.color = (1,1,1); + param_00 = "allies"; + } + else if(param_00 == "intermission") + { + var_10.glowcolor = (0.2,0.3,0.7); + var_10 settext(game["strings"]["intermission"]); + var_10.color = (1,1,1); + param_00 = "allies"; + } + else if(param_00 == "roundend") + { + var_10.glowcolor = (0.2,0.3,0.7); + var_10 settext(game["strings"]["roundend"]); + var_10.color = (1,1,1); + param_00 = "allies"; + } + else if(param_00 == "overtime") + { + var_10.glowcolor = (0.2,0.3,0.7); + var_10 settext(game["strings"]["overtime"]); + var_10.color = (1,1,1); + param_00 = "allies"; + } + else if(param_00 == "tie") + { + var_10.glowcolor = (0.2,0.3,0.7); + if(param_01) + { + var_10 settext(game["strings"]["round_draw"]); + } + else + { + var_10 settext(game["strings"]["draw"]); + } + + var_10.color = (1,1,1); + param_00 = "allies"; + } + else if(isdefined(self.pers["team"]) && param_00 == var_03) + { + var_10.glowcolor = (0,0,0); + if(param_01) + { + var_10 settext(game["strings"]["round_win"]); + } + else + { + var_10 settext(game["strings"]["victory"]); + } + + var_10.color = (0.6,0.9,0.6); + } + else + { + var_10.glowcolor = (0,0,0); + if(param_01) + { + var_10 settext(game["strings"]["round_loss"]); + } + else + { + var_10 settext(game["strings"]["defeat"]); + } + + var_10.color = (0.7,0.3,0.2); + } + + var_11.glowcolor = (0.2,0.3,0.7); + var_11 settext(param_02); + var_10 setpulsefx(100,var_0F,1000); + var_11 setpulsefx(100,var_0F,1000); + if(maps\mp\_utility::getintproperty("useRelativeTeamColors",0)) + { + var_12 = maps\mp\gametypes\_hud_util::createicon(game["icons"][var_03] + "_blue",var_09,var_09); + } + else + { + var_12 = maps\mp\gametypes\_hud_util::createicon(game["icons"][var_04],var_0A,var_0A); + } + + var_12 maps\mp\gametypes\_hud_util::setparent(var_11); + var_12 maps\mp\gametypes\_hud_util::setpoint("TOP","BOTTOM",var_0A * -1,var_0B); + var_12.foreground = 1; + var_12.hidewheninmenu = 0; + var_12.archived = 0; + var_12.alpha = 0; + var_12 fadeovertime(0.5); + var_12.alpha = 1; + if(maps\mp\_utility::getintproperty("useRelativeTeamColors",0)) + { + var_13 = maps\mp\gametypes\_hud_util::createicon(game["icons"][level.otherteam[var_03]] + "_red",var_09,var_09); + } + else + { + var_13 = maps\mp\gametypes\_hud_util::createicon(game["icons"][level.otherteam[var_04]],var_0A,var_0A); + } + + var_13 maps\mp\gametypes\_hud_util::setparent(var_11); + var_13 maps\mp\gametypes\_hud_util::setpoint("TOP","BOTTOM",var_0A,var_0B); + var_13.foreground = 1; + var_13.hidewheninmenu = 0; + var_13.archived = 0; + var_13.alpha = 0; + var_13 fadeovertime(0.5); + var_13.alpha = 1; + var_14 = maps\mp\gametypes\_hud_util::createfontstring(var_0E,var_08); + var_14 maps\mp\gametypes\_hud_util::setparent(var_12); + var_14 maps\mp\gametypes\_hud_util::setpoint("TOP","BOTTOM",0,var_0C); + if(maps\mp\_utility::getintproperty("useRelativeTeamColors",0)) + { + var_14.glowcolor = game["colors"]["blue"]; + } + else + { + var_14.glowcolor = game["colors"][var_03]; + } + + var_14.glowalpha = 1; + if(!maps\mp\_utility::isroundbased() || !maps\mp\_utility::isobjectivebased()) + { + var_14 setvalue(lib_036E::func_2B96(var_03)); + } + else + { + var_14 setvalue(game["roundsWon"][var_03]); + } + + var_14.foreground = 1; + var_14.hidewheninmenu = 0; + var_14.archived = 0; + var_14 setpulsefx(100,var_0F,1000); + var_15 = maps\mp\gametypes\_hud_util::createfontstring(var_0E,var_08); + var_15 maps\mp\gametypes\_hud_util::setparent(var_13); + var_15 maps\mp\gametypes\_hud_util::setpoint("TOP","BOTTOM",0,var_0C); + if(maps\mp\_utility::getintproperty("useRelativeTeamColors",0)) + { + var_15.glowcolor = game["colors"]["red"]; + } + else + { + var_15.glowcolor = game["colors"][level.otherteam[var_03]]; + } + + var_15.glowalpha = 1; + if(!maps\mp\_utility::isroundbased() || !maps\mp\_utility::isobjectivebased()) + { + var_15 setvalue(lib_036E::func_2B96(level.otherteam[var_03])); + } + else + { + var_15 setvalue(game["roundsWon"][level.otherteam[var_03]]); + } + + var_15.foreground = 1; + var_15.hidewheninmenu = 0; + var_15.archived = 0; + var_15 setpulsefx(100,var_0F,1000); + var_16 = undefined; + if(isdefined(self.matchbonus)) + { + var_16 = maps\mp\gametypes\_hud_util::createfontstring(var_0E,var_06); + var_16 maps\mp\gametypes\_hud_util::setparent(var_11); + var_16 maps\mp\gametypes\_hud_util::setpoint("TOP","BOTTOM",0,var_09 + var_0D + var_14.height); + var_16.glowalpha = 1; + var_16.foreground = 1; + var_16.hidewheninmenu = 0; + var_16.color = (1,1,0.5); + var_16.archived = 0; + var_16.label = game["strings"]["match_bonus"]; + var_16 setvalue(self.matchbonus); + } + + thread resetteamoutcomenotify(var_10,var_11,var_12,var_13,var_14,var_15,var_16); +} + +//Function Number: 31 +outcomenotify(param_00,param_01) +{ + self endon("disconnect"); + self notify("reset_outcome"); + while(isdoingsplash()) + { + wait 0.05; + } + + self endon("reset_outcome"); + if(level.splitscreen || self issplitscreenplayer()) + { + var_02 = 2; + var_03 = 1.5; + var_04 = 1.5; + var_05 = 30; + var_06 = 2; + var_07 = "default"; + } + else + { + var_02 = 3; + var_03 = 2; + var_04 = 1.5; + var_05 = 30; + var_06 = 20; + var_07 = "objective"; + } + + var_08 = -5536; + var_09 = level.placement["all"]; + var_0A = var_09[0]; + var_0B = var_09[1]; + var_0C = var_09[2]; + var_0D = maps\mp\gametypes\_hud_util::createfontstring(var_07,var_02); + var_0D maps\mp\gametypes\_hud_util::setpoint("TOP",undefined,0,var_06); + var_0E = 0; + if(isdefined(var_0A) && self.score == var_0A.score && self.deaths == var_0A.deaths) + { + if(self != var_0A) + { + var_0E = 1; + } + else if(isdefined(var_0B) && var_0B.score == var_0A.score && var_0B.deaths == var_0A.deaths) + { + var_0E = 1; + } + } + + if(var_0E) + { + var_0D settext(game["strings"]["tie"]); + var_0D.glowcolor = (0.2,0.3,0.7); + } + else if(isdefined(var_0A) && self == var_0A) + { + var_0D settext(game["strings"]["victory"]); + var_0D.glowcolor = (0.2,0.3,0.7); + } + else + { + var_0D settext(game["strings"]["defeat"]); + var_0D.glowcolor = (0.7,0.3,0.2); + } + + var_0D.glowalpha = 1; + var_0D.foreground = 1; + var_0D.hidewheninmenu = 0; + var_0D.archived = 0; + var_0D setpulsefx(100,var_08,1000); + var_0F = maps\mp\gametypes\_hud_util::createfontstring(var_07,2); + var_0F maps\mp\gametypes\_hud_util::setparent(var_0D); + var_0F maps\mp\gametypes\_hud_util::setpoint("TOP","BOTTOM",0,0); + var_0F.glowalpha = 1; + var_0F.foreground = 1; + var_0F.hidewheninmenu = 0; + var_0F.archived = 0; + var_0F.glowcolor = (0.2,0.3,0.7); + var_0F settext(param_01); + var_10 = maps\mp\gametypes\_hud_util::createfontstring(var_07,var_03); + var_10 maps\mp\gametypes\_hud_util::setparent(var_0F); + var_10 maps\mp\gametypes\_hud_util::setpoint("TOP","BOTTOM",0,var_06); + var_10.glowcolor = (0.3,0.7,0.2); + var_10.glowalpha = 1; + var_10.foreground = 1; + var_10.hidewheninmenu = 0; + var_10.archived = 0; + if(isdefined(var_0A)) + { + var_10.label = &"MP_FIRSTPLACE_NAME"; + var_10 setplayernamestring(var_0A); + var_10 setpulsefx(100,var_08,1000); + } + + var_11 = maps\mp\gametypes\_hud_util::createfontstring(var_07,var_04); + var_11 maps\mp\gametypes\_hud_util::setparent(var_10); + var_11 maps\mp\gametypes\_hud_util::setpoint("TOP","BOTTOM",0,var_06); + var_11.glowcolor = (0.2,0.3,0.7); + var_11.glowalpha = 1; + var_11.foreground = 1; + var_11.hidewheninmenu = 0; + var_11.archived = 0; + if(isdefined(var_0B)) + { + var_11.label = &"MP_SECONDPLACE_NAME"; + var_11 setplayernamestring(var_0B); + var_11 setpulsefx(100,var_08,1000); + } + + var_12 = maps\mp\gametypes\_hud_util::createfontstring(var_07,var_04); + var_12 maps\mp\gametypes\_hud_util::setparent(var_11); + var_12 maps\mp\gametypes\_hud_util::setpoint("TOP","BOTTOM",0,var_06); + var_12 maps\mp\gametypes\_hud_util::setparent(var_11); + var_12.glowcolor = (0.2,0.3,0.7); + var_12.glowalpha = 1; + var_12.foreground = 1; + var_12.hidewheninmenu = 0; + var_12.archived = 0; + if(isdefined(var_0C)) + { + var_12.label = &"MP_THIRDPLACE_NAME"; + var_12 setplayernamestring(var_0C); + var_12 setpulsefx(100,var_08,1000); + } + + var_13 = maps\mp\gametypes\_hud_util::createfontstring(var_07,2); + var_13 maps\mp\gametypes\_hud_util::setparent(var_12); + var_13 maps\mp\gametypes\_hud_util::setpoint("TOP","BOTTOM",0,var_06); + var_13.glowalpha = 1; + var_13.foreground = 1; + var_13.hidewheninmenu = 0; + var_13.archived = 0; + if(isdefined(self.matchbonus)) + { + var_13.label = game["strings"]["match_bonus"]; + var_13 setvalue(self.matchbonus); + } + + thread updateoutcome(var_10,var_11,var_12); + thread resetoutcomenotify(var_0D,var_0F,var_10,var_11,var_12,var_13); +} + +//Function Number: 32 +resetoutcomenotify(param_00,param_01,param_02,param_03,param_04,param_05) +{ + self endon("disconnect"); + self waittill("reset_outcome"); + if(isdefined(param_00)) + { + param_00 maps\mp\gametypes\_hud_util::destroyelem(); + } + + if(isdefined(param_01)) + { + param_01 maps\mp\gametypes\_hud_util::destroyelem(); + } + + if(isdefined(param_02)) + { + param_02 maps\mp\gametypes\_hud_util::destroyelem(); + } + + if(isdefined(param_03)) + { + param_03 maps\mp\gametypes\_hud_util::destroyelem(); + } + + if(isdefined(param_04)) + { + param_04 maps\mp\gametypes\_hud_util::destroyelem(); + } + + if(isdefined(param_05)) + { + param_05 maps\mp\gametypes\_hud_util::destroyelem(); + } +} + +//Function Number: 33 +resetteamoutcomenotify(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + self endon("disconnect"); + self waittill("reset_outcome"); + if(isdefined(param_00)) + { + param_00 maps\mp\gametypes\_hud_util::destroyelem(); + } + + if(isdefined(param_01)) + { + param_01 maps\mp\gametypes\_hud_util::destroyelem(); + } + + if(isdefined(param_02)) + { + param_02 maps\mp\gametypes\_hud_util::destroyelem(); + } + + if(isdefined(param_03)) + { + param_03 maps\mp\gametypes\_hud_util::destroyelem(); + } + + if(isdefined(param_04)) + { + param_04 maps\mp\gametypes\_hud_util::destroyelem(); + } + + if(isdefined(param_05)) + { + param_05 maps\mp\gametypes\_hud_util::destroyelem(); + } + + if(isdefined(param_06)) + { + param_06 maps\mp\gametypes\_hud_util::destroyelem(); + } +} + +//Function Number: 34 +updateoutcome(param_00,param_01,param_02) +{ + self endon("disconnect"); + self endon("reset_outcome"); + for(;;) + { + self waittill("update_outcome"); + var_03 = level.placement["all"]; + var_04 = var_03[0]; + var_05 = var_03[1]; + var_06 = var_03[2]; + if(isdefined(param_00) && isdefined(var_04)) + { + param_00 setplayernamestring(var_04); + } + else if(isdefined(param_00)) + { + param_00.alpha = 0; + } + + if(isdefined(param_01) && isdefined(var_05)) + { + param_01 setplayernamestring(var_05); + } + else if(isdefined(param_01)) + { + param_01.alpha = 0; + } + + if(isdefined(param_02) && isdefined(var_06)) + { + param_02 setplayernamestring(var_06); + continue; + } + + if(isdefined(param_02)) + { + param_02.alpha = 0; + } + } +} + +//Function Number: 35 +canshowsplash(param_00) +{ +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/gametypes/_hud_util.gsc b/MW3/PC/MP/maps/mp/gametypes/_hud_util.gsc new file mode 100644 index 0000000..e9bcd82 --- /dev/null +++ b/MW3/PC/MP/maps/mp/gametypes/_hud_util.gsc @@ -0,0 +1,1070 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_hud_util.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 48 + * Decompile Time: 690 ms + * Timestamp: 10/27/2023 2:12:35 AM +*******************************************************************/ + +//Function Number: 1 +setparent(param_00) +{ + if(isdefined(self.parent) && self.parent == param_00) + { + return; + } + + if(isdefined(self.parent)) + { + self.parent removechild(self); + } + + self.parent = param_00; + self.parent addchild(self); + if(isdefined(self.point)) + { + setpoint(self.point,self.relativepoint,self.xoffset,self.yoffset); + return; + } + + setpoint("TOPLEFT"); +} + +//Function Number: 2 +getparent() +{ + return self.parent; +} + +//Function Number: 3 +addchild(param_00) +{ + param_00.index = self.children.size; + self.children[self.children.size] = param_00; +} + +//Function Number: 4 +removechild(param_00) +{ + param_00.parent = undefined; + if(self.children[self.children.size - 1] != param_00) + { + self.children[param_00.index] = self.children[self.children.size - 1]; + self.children[param_00.index].index = param_00.index; + } + + self.children[self.children.size - 1] = undefined; + param_00.index = undefined; +} + +//Function Number: 5 +setpoint(param_00,param_01,param_02,param_03,param_04) +{ + if(!isdefined(param_04)) + { + param_04 = 0; + } + + var_05 = getparent(); + if(param_04) + { + self moveovertime(param_04); + } + + if(!isdefined(param_02)) + { + param_02 = 0; + } + + self.xoffset = param_02; + if(!isdefined(param_03)) + { + param_03 = 0; + } + + self.yoffset = param_03; + self.point = param_00; + self.alignx = "center"; + self.aligny = "middle"; + if(issubstr(param_00,"TOP")) + { + self.aligny = "top"; + } + + if(issubstr(param_00,"BOTTOM")) + { + self.aligny = "bottom"; + } + + if(issubstr(param_00,"LEFT")) + { + self.alignx = "left"; + } + + if(issubstr(param_00,"RIGHT")) + { + self.alignx = "right"; + } + + if(!isdefined(param_01)) + { + param_01 = param_00; + } + + self.relativepoint = param_01; + var_06 = "center_adjustable"; + var_07 = "middle"; + if(issubstr(param_01,"TOP")) + { + var_07 = "top_adjustable"; + } + + if(issubstr(param_01,"BOTTOM")) + { + var_07 = "bottom_adjustable"; + } + + if(issubstr(param_01,"LEFT")) + { + var_06 = "left_adjustable"; + } + + if(issubstr(param_01,"RIGHT")) + { + var_06 = "right_adjustable"; + } + + if(var_05 == level.uiparent) + { + self.horzalign = var_06; + self.vertalign = var_07; + } + else + { + self.horzalign = var_05.horzalign; + self.vertalign = var_05.vertalign; + } + + if(maps\mp\_utility::strip_suffix(var_06,"_adjustable") == var_05.alignx) + { + var_08 = 0; + var_09 = 0; + } + else if(var_08 == "center" || var_07.alignx == "center") + { + var_08 = int(var_07.width / 2); + if(var_07 == "left_adjustable" || var_06.alignx == "right") + { + var_09 = -1; + } + else + { + var_09 = 1; + } + } + else + { + var_08 = var_07.width; + if(var_07 == "left_adjustable") + { + var_09 = -1; + } + else + { + var_09 = 1; + } + } + + self.x = var_05.x + var_08 * var_09; + if(maps\mp\_utility::strip_suffix(var_07,"_adjustable") == var_05.aligny) + { + var_0A = 0; + var_0B = 0; + } + else if(var_09 == "middle" || var_07.aligny == "middle") + { + var_0A = int(var_07.height / 2); + if(var_08 == "top_adjustable" || var_06.aligny == "bottom") + { + var_0B = -1; + } + else + { + var_0B = 1; + } + } + else + { + var_0A = var_07.height; + if(var_08 == "top_adjustable") + { + var_0B = -1; + } + else + { + var_0B = 1; + } + } + + self.y = var_05.y + var_0A * var_0B; + self.x = self.x + self.xoffset; + self.y = self.y + self.yoffset; + switch(self.elemtype) + { + case "bar": + setpointbar(param_00,param_01,param_02,param_03); + break; + } + + updatechildren(); +} + +//Function Number: 6 +setpointbar(param_00,param_01,param_02,param_03) +{ + self.bar.horzalign = self.horzalign; + self.bar.vertalign = self.vertalign; + self.bar.alignx = "left"; + self.bar.aligny = self.aligny; + self.bar.y = self.y; + if(self.alignx == "left") + { + self.bar.x = self.x; + } + else if(self.alignx == "right") + { + self.bar.x = self.x - self.width; + } + else + { + self.bar.x = self.x - int(self.width / 2); + } + + if(self.aligny == "top") + { + self.bar.y = self.y; + } + else if(self.aligny == "bottom") + { + self.bar.y = self.y; + } + + updatebar(self.bar.frac); +} + +//Function Number: 7 +updatebar(param_00,param_01) +{ + if(self.elemtype == "bar") + { + updatebarscale(param_00,param_01); + } +} + +//Function Number: 8 +updatebarscale(param_00,param_01) +{ + var_02 = int(self.width * param_00 + 0.5); + if(!var_02) + { + var_02 = 1; + } + + self.bar.frac = param_00; + self.bar setshader(self.bar.shader,var_02,self.height); + if(isdefined(param_01) && var_02 < self.width) + { + if(param_01 > 0) + { + self.bar scaleovertime(1 - param_00 / param_01,self.width,self.height); + } + else if(param_01 < 0) + { + self.bar scaleovertime(param_00 / -1 * param_01,1,self.height); + } + } + + self.bar.rateofchange = param_01; + self.bar.lastupdatetime = gettime(); +} + +//Function Number: 9 +createfontstring(param_00,param_01) +{ + var_02 = newclienthudelem(self); + var_02.elemtype = "font"; + var_02.font = param_00; + var_02.fontscale = param_01; + var_02.basefontscale = param_01; + var_02.x = 0; + var_02.y = 0; + var_02.width = 0; + var_02.height = int(level.fontheight * param_01); + var_02.xoffset = 0; + var_02.yoffset = 0; + var_02.children = []; + var_02 setparent(level.uiparent); + var_02.hidden = 0; + return var_02; +} + +//Function Number: 10 +createserverfontstring(param_00,param_01,param_02) +{ + if(isdefined(param_02)) + { + var_03 = newteamhudelem(param_02); + } + else + { + var_03 = newhudelem(); + } + + var_03.elemtype = "font"; + var_03.font = param_00; + var_03.fontscale = param_01; + var_03.basefontscale = param_01; + var_03.x = 0; + var_03.y = 0; + var_03.width = 0; + var_03.height = int(level.fontheight * param_01); + var_03.xoffset = 0; + var_03.yoffset = 0; + var_03.children = []; + var_03 setparent(level.uiparent); + var_03.hidden = 0; + return var_03; +} + +//Function Number: 11 +createservertimer(param_00,param_01,param_02) +{ + if(isdefined(param_02)) + { + var_03 = newteamhudelem(param_02); + } + else + { + var_03 = newhudelem(); + } + + var_03.elemtype = "timer"; + var_03.font = param_00; + var_03.fontscale = param_01; + var_03.basefontscale = param_01; + var_03.x = 0; + var_03.y = 0; + var_03.width = 0; + var_03.height = int(level.fontheight * param_01); + var_03.xoffset = 0; + var_03.yoffset = 0; + var_03.children = []; + var_03 setparent(level.uiparent); + var_03.hidden = 0; + return var_03; +} + +//Function Number: 12 +createtimer(param_00,param_01) +{ + var_02 = newclienthudelem(self); + var_02.elemtype = "timer"; + var_02.font = param_00; + var_02.fontscale = param_01; + var_02.basefontscale = param_01; + var_02.x = 0; + var_02.y = 0; + var_02.width = 0; + var_02.height = int(level.fontheight * param_01); + var_02.xoffset = 0; + var_02.yoffset = 0; + var_02.children = []; + var_02 setparent(level.uiparent); + var_02.hidden = 0; + return var_02; +} + +//Function Number: 13 +createicon(param_00,param_01,param_02) +{ + var_03 = newclienthudelem(self); + var_03.elemtype = "icon"; + var_03.x = 0; + var_03.y = 0; + var_03.width = param_01; + var_03.height = param_02; + var_03.basewidth = var_03.width; + var_03.baseheight = var_03.height; + var_03.xoffset = 0; + var_03.yoffset = 0; + var_03.children = []; + var_03 setparent(level.uiparent); + var_03.hidden = 0; + if(isdefined(param_00)) + { + var_03 setshader(param_00,param_01,param_02); + var_03.shader = param_00; + } + + return var_03; +} + +//Function Number: 14 +createservericon(param_00,param_01,param_02,param_03) +{ + if(isdefined(param_03)) + { + var_04 = newteamhudelem(param_03); + } + else + { + var_04 = newhudelem(); + } + + var_04.elemtype = "icon"; + var_04.x = 0; + var_04.y = 0; + var_04.width = param_01; + var_04.height = param_02; + var_04.basewidth = var_04.width; + var_04.baseheight = var_04.height; + var_04.xoffset = 0; + var_04.yoffset = 0; + var_04.children = []; + var_04 setparent(level.uiparent); + var_04.hidden = 0; + if(isdefined(param_00)) + { + var_04 setshader(param_00,param_01,param_02); + var_04.shader = param_00; + } + + return var_04; +} + +//Function Number: 15 +createserverbar(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if(isdefined(param_04)) + { + var_06 = newteamhudelem(param_04); + } + else + { + var_06 = newhudelem(); + } + + var_06.x = 0; + var_06.y = 0; + var_06.frac = 0; + var_06.color = param_00; + var_06.sort = -2; + var_06.shader = "progress_bar_fill"; + var_06 setshader("progress_bar_fill",param_01,param_02); + var_06.hidden = 0; + if(isdefined(param_03)) + { + var_06.flashfrac = param_03; + } + + if(isdefined(param_04)) + { + var_07 = newteamhudelem(param_04); + } + else + { + var_07 = newhudelem(); + } + + var_07.elemtype = "bar"; + var_07.x = 0; + var_07.y = 0; + var_07.width = param_01; + var_07.height = param_02; + var_07.xoffset = 0; + var_07.yoffset = 0; + var_07.bar = var_06; + var_07.children = []; + var_07.sort = -3; + var_07.color = (0,0,0); + var_07.alpha = 0.5; + var_07 setparent(level.uiparent); + var_07 setshader("progress_bar_bg",param_01,param_02); + var_07.hidden = 0; + return var_07; +} + +//Function Number: 16 +createbar(param_00,param_01,param_02,param_03) +{ + var_04 = newclienthudelem(self); + var_04.x = 0; + var_04.y = 0; + var_04.frac = 0; + var_04.color = param_00; + var_04.sort = -2; + var_04.shader = "progress_bar_fill"; + var_04 setshader("progress_bar_fill",param_01,param_02); + var_04.hidden = 0; + if(isdefined(param_03)) + { + var_04.flashfrac = param_03; + } + + var_05 = newclienthudelem(self); + var_05.elemtype = "bar"; + var_05.width = param_01; + var_05.height = param_02; + var_05.xoffset = 0; + var_05.yoffset = 0; + var_05.bar = var_04; + var_05.children = []; + var_05.sort = -3; + var_05.color = (0,0,0); + var_05.alpha = 0.5; + var_05 setparent(level.uiparent); + var_05 setshader("progress_bar_bg",param_01 + 4,param_02 + 4); + var_05.hidden = 0; + return var_05; +} + +//Function Number: 17 +getcurrentfraction() +{ + var_00 = self.bar.frac; + if(isdefined(self.bar.rateofchange)) + { + var_00 = var_00 + gettime() - self.bar.lastupdatetime * self.bar.rateofchange; + if(var_00 > 1) + { + var_00 = 1; + } + + if(var_00 < 0) + { + var_00 = 0; + } + } + + return var_00; +} + +//Function Number: 18 +createprimaryprogressbar(param_00,param_01) +{ + if(!isdefined(param_00)) + { + param_00 = 0; + } + + if(!isdefined(param_01)) + { + param_01 = 0; + } + + if(self issplitscreenplayer()) + { + param_01 = param_01 + 20; + } + + var_02 = createbar((1,1,1),level.primaryprogressbarwidth,level.primaryprogressbarheight); + var_02 setpoint("CENTER",undefined,level.primaryprogressbarx + param_00,level.primaryprogressbary + param_01); + return var_02; +} + +//Function Number: 19 +createprimaryprogressbartext(param_00,param_01) +{ + if(!isdefined(param_00)) + { + param_00 = 0; + } + + if(!isdefined(param_01)) + { + param_01 = 0; + } + + if(self issplitscreenplayer()) + { + param_01 = param_01 + 20; + } + + var_02 = createfontstring("hudbig",level.primaryprogressbarfontsize); + var_02 setpoint("CENTER",undefined,level.primaryprogressbartextx + param_00,level.primaryprogressbartexty + param_01); + var_02.sort = -1; + return var_02; +} + +//Function Number: 20 +createteamprogressbar(param_00) +{ + var_01 = createserverbar((1,0,0),level.teamprogressbarwidth,level.teamprogressbarheight,undefined,param_00); + var_01 setpoint("TOP",undefined,0,level.teamprogressbary); + return var_01; +} + +//Function Number: 21 +createteamprogressbartext(param_00) +{ + var_01 = createserverfontstring("default",level.teamprogressbarfontsize,param_00); + var_01 setpoint("TOP",undefined,0,level.teamprogressbartexty); + return var_01; +} + +//Function Number: 22 +setflashfrac(param_00) +{ + self.bar.flashfrac = param_00; +} + +//Function Number: 23 +hideelem() +{ + if(self.hidden) + { + return; + } + + self.hidden = 1; + if(self.alpha != 0) + { + self.alpha = 0; + } + + if(self.elemtype == "bar" || self.elemtype == "bar_shader") + { + self.bar.hidden = 1; + if(self.bar.alpha != 0) + { + self.bar.alpha = 0; + } + } +} + +//Function Number: 24 +showelem() +{ + if(!self.hidden) + { + return; + } + + self.hidden = 0; + if(self.elemtype == "bar" || self.elemtype == "bar_shader") + { + if(self.alpha != 0.5) + { + self.alpha = 0.5; + } + + self.bar.hidden = 0; + if(self.bar.alpha != 1) + { + self.bar.alpha = 1; + return; + } + + return; + } + + if(self.alpha != 1) + { + self.alpha = 1; + } +} + +//Function Number: 25 +flashthread() +{ + self endon("death"); + if(!self.hidden) + { + self.alpha = 1; + } + + for(;;) + { + if(self.frac >= self.flashfrac) + { + if(!self.hidden) + { + self fadeovertime(0.3); + self.alpha = 0.2; + wait 0.35; + self fadeovertime(0.3); + self.alpha = 1; + } + + wait 0.7; + continue; + } + + if(!self.hidden && self.alpha != 1) + { + self.alpha = 1; + } + + wait 0.05; + } +} + +//Function Number: 26 +destroyelem() +{ + var_00 = []; + for(var_01 = 0;var_01 < self.children.size;var_01++) + { + if(isdefined(self.children[var_01])) + { + var_00[var_00.size] = self.children[var_01]; + } + } + + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + var_00[var_01] setparent(getparent()); + } + + if(self.elemtype == "bar" || self.elemtype == "bar_shader") + { + self.bar destroy(); + } + + self destroy(); +} + +//Function Number: 27 +seticonshader(param_00) +{ + self setshader(param_00,self.width,self.height); + self.shader = param_00; +} + +//Function Number: 28 +geticonshader(param_00) +{ + return self.shader; +} + +//Function Number: 29 +seticonsize(param_00,param_01) +{ + self setshader(self.shader,param_00,param_01); +} + +//Function Number: 30 +setwidth(param_00) +{ + self.width = param_00; +} + +//Function Number: 31 +setheight(param_00) +{ + self.height = param_00; +} + +//Function Number: 32 +setsize(param_00,param_01) +{ + self.width = param_00; + self.height = param_01; +} + +//Function Number: 33 +updatechildren() +{ + for(var_00 = 0;var_00 < self.children.size;var_00++) + { + var_01 = self.children[var_00]; + var_01 setpoint(var_01.point,var_01.relativepoint,var_01.xoffset,var_01.yoffset); + } +} + +//Function Number: 34 +transitionreset() +{ + self.x = self.xoffset; + self.y = self.yoffset; + if(self.elemtype == "font") + { + self.fontscale = self.basefontscale; + self.label = &""; + } + else if(self.elemtype == "icon") + { + self setshader(self.shader,self.width,self.height); + } + + self.alpha = 0; +} + +//Function Number: 35 +transitionzoomin(param_00) +{ + switch(self.elemtype) + { + case "timer": + case "font": + self.fontscale = 6.3; + self changefontscaleovertime(param_00); + self.fontscale = self.basefontscale; + break; + + case "icon": + self setshader(self.shader,self.width * 6,self.height * 6); + self scaleovertime(param_00,self.width,self.height); + break; + } +} + +//Function Number: 36 +transitionpulsefxin(param_00,param_01) +{ + var_02 = int(param_00) * 1000; + var_03 = int(param_01) * 1000; + switch(self.elemtype) + { + case "timer": + case "font": + self setpulsefx(var_02 + 250,var_03 + var_02,var_02 + 250); + break; + + default: + break; + } +} + +//Function Number: 37 +transitionslidein(param_00,param_01) +{ + if(!isdefined(param_01)) + { + param_01 = "left"; + } + + switch(param_01) + { + case "left": + self.x = self.x + 1000; + break; + + case "right": + self.x = self.x - 1000; + break; + + case "up": + self.y = self.y - 1000; + break; + + case "down": + self.y = self.y + 1000; + break; + } + + self moveovertime(param_00); + self.x = self.xoffset; + self.y = self.yoffset; +} + +//Function Number: 38 +transitionslideout(param_00,param_01) +{ + if(!isdefined(param_01)) + { + param_01 = "left"; + } + + var_02 = self.xoffset; + var_03 = self.yoffset; + switch(param_01) + { + case "left": + var_02 = var_02 + 1000; + break; + + case "right": + var_02 = var_02 - 1000; + break; + + case "up": + var_03 = var_03 - 1000; + break; + + case "down": + var_03 = var_03 + 1000; + break; + } + + self.alpha = 1; + self moveovertime(param_00); + self.x = var_02; + self.y = var_03; +} + +//Function Number: 39 +transitionzoomout(param_00) +{ + switch(self.elemtype) + { + case "timer": + case "font": + self changefontscaleovertime(param_00); + self.fontscale = 6.3; + break; + + case "icon": + self scaleovertime(param_00,self.width * 6,self.height * 6); + break; + } +} + +//Function Number: 40 +transitionfadein(param_00) +{ + self fadeovertime(param_00); + if(isdefined(self.maxalpha)) + { + self.alpha = self.maxalpha; + return; + } + + self.alpha = 1; +} + +//Function Number: 41 +transitionfadeout(param_00) +{ + self fadeovertime(0.15); + self.alpha = 0; +} + +//Function Number: 42 +getweeklyref(param_00) +{ + for(var_01 = 0;var_01 < 3;var_01++) + { + var_02 = self getplayerdata("weeklyChallengeId",var_01); + var_03 = tablelookupbyrow("mp/weeklyChallengesTable.csv",var_02,0); + if(var_03 == param_00) + { + return "ch_weekly_" + var_01; + } + } + + return ""; +} + +//Function Number: 43 +getdailyref(param_00) +{ + for(var_01 = 0;var_01 < 3;var_01++) + { + var_02 = self getplayerdata("dailyChallengeId",var_01); + var_03 = tablelookupbyrow("mp/dailyChallengesTable.csv",var_02,0); + if(var_03 == param_00) + { + return "ch_daily_" + var_01; + } + } + + return ""; +} + +//Function Number: 44 +ch_getprogress(param_00) +{ + if(level.challengeinfo[param_00]["type"] == 0) + { + return self getplayerdata("challengeProgress",param_00); + } + + if(level.challengeinfo[param_00]["type"] == 1) + { + return self getplayerdata("challengeProgress",getdailyref(param_00)); + } + + if(level.challengeinfo[param_00]["type"] == 2) + { + return self getplayerdata("challengeProgress",getweeklyref(param_00)); + } +} + +//Function Number: 45 +ch_getstate(param_00) +{ + if(level.challengeinfo[param_00]["type"] == 0) + { + return self getplayerdata("challengeState",param_00); + } + + if(level.challengeinfo[param_00]["type"] == 1) + { + return self getplayerdata("challengeState",getdailyref(param_00)); + } + + if(level.challengeinfo[param_00]["type"] == 2) + { + return self getplayerdata("challengeState",getweeklyref(param_00)); + } +} + +//Function Number: 46 +ch_setprogress(param_00,param_01) +{ + if(level.challengeinfo[param_00]["type"] == 0) + { + return self setplayerdata("challengeProgress",param_00,param_01); + } + + if(level.challengeinfo[param_00]["type"] == 1) + { + return self setplayerdata("challengeProgress",getdailyref(param_00),param_01); + } + + if(level.challengeinfo[param_00]["type"] == 2) + { + return self setplayerdata("challengeProgress",getweeklyref(param_00),param_01); + } +} + +//Function Number: 47 +ch_setstate(param_00,param_01) +{ + if(level.challengeinfo[param_00]["type"] == 0) + { + return self setplayerdata("challengeState",param_00,param_01); + } + + if(level.challengeinfo[param_00]["type"] == 1) + { + return self setplayerdata("challengeState",getdailyref(param_00),param_01); + } + + if(level.challengeinfo[param_00]["type"] == 2) + { + return self setplayerdata("challengeState",getweeklyref(param_00),param_01); + } +} + +//Function Number: 48 +ch_gettarget(param_00,param_01) +{ + if(level.challengeinfo[param_00]["type"] == 0) + { + return int(tablelookup("mp/allChallengesTable.csv",0,param_00,6 + param_01 - 1 * 2)); + } + + if(level.challengeinfo[param_00]["type"] == 1) + { + return int(tablelookup("mp/dailyChallengesTable.csv",0,param_00,6 + param_01 - 1 * 2)); + } + + if(level.challengeinfo[param_00]["type"] == 2) + { + return int(tablelookup("mp/weeklyChallengesTable.csv",0,param_00,6 + param_01 - 1 * 2)); + } +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/gametypes/_killcam.gsc b/MW3/PC/MP/maps/mp/gametypes/_killcam.gsc new file mode 100644 index 0000000..3a5b9e2 --- /dev/null +++ b/MW3/PC/MP/maps/mp/gametypes/_killcam.gsc @@ -0,0 +1,621 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_killcam.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 22 + * Decompile Time: 605 ms + * Timestamp: 10/27/2023 2:12:37 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + precachestring(&"PLATFORM_PRESS_TO_SKIP"); + precachestring(&"PLATFORM_PRESS_TO_RESPAWN"); + precachestring(&"PLATFORM_PRESS_TO_COPYCAT"); + level.killcam = maps\mp\gametypes\_tweakables::gettweakablevalue("game","allowkillcam"); +} + +//Function Number: 2 +killcam(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09) +{ + self endon("disconnect"); + self endon("spawned"); + level endon("game_ended"); + if(param_00 < 0) + { + return; + } + + if(getdvar("scr_killcam_time") == "") + { + if(param_03 == "artillery_mp" || param_03 == "stealth_bomb_mp" || param_03 == "remote_mortar_missile_mp") + { + var_0A = gettime() - param_02 / 1000 - param_04 - 0.1; + } + else if(level.showingfinalkillcam) + { + var_0A = 4; + } + else if(param_04 == "apache_minigun_mp") + { + var_0A = 3; + } + else if(param_04 == "javelin_mp" || param_04 == "uav_strike_projectile_mp") + { + var_0A = 8; + } + else if(issubstr(param_04,"remotemissile_")) + { + var_0A = 5; + } + else if(!param_07 || param_07 > 5) + { + var_0A = 5; + } + else if(param_04 == "frag_grenade_mp" || param_04 == "frag_grenade_short_mp" || param_04 == "semtex_mp") + { + var_0A = 4.25; + } + else + { + var_0A = 2.5; + } + } + else + { + var_0A = getdvarfloat("scr_killcam_time"); + } + + if(isdefined(param_07)) + { + if(var_0A > param_07) + { + var_0A = param_07; + } + + if(var_0A < 0.05) + { + var_0A = 0.05; + } + } + + if(getdvar("scr_killcam_posttime") == "") + { + var_0B = 2; + } + else + { + var_0B = getdvarfloat("scr_killcam_posttime"); + if(var_0B < 0.05) + { + var_0B = 0.05; + } + } + + var_0C = var_0A + var_0B; + if(isdefined(param_07) && var_0C > param_07) + { + if(param_07 < 2) + { + return; + } + + if(param_07 - var_0A >= 1) + { + var_0B = param_07 - var_0A; + } + else + { + var_0B = 1; + var_0A = param_07 - 1; + } + + var_0C = var_0A + var_0B; + } + + var_0D = var_0A + param_04; + var_0E = gettime(); + self notify("begin_killcam",var_0E); + if(isdefined(param_08)) + { + param_08 visionsyncwithplayer(param_09); + } + + self.sessionstate = "spectator"; + self.forcespectatorclient = param_00; + self.killcamentity = -1; + if(param_01 >= 0) + { + thread setkillcamentity(param_01,var_0D,param_02); + } + + self.archivetime = var_0D; + self.killcamlength = var_0C; + self.psoffsettime = param_05; + self allowspectateteam("allies",1); + self allowspectateteam("axis",1); + self allowspectateteam("freelook",1); + self allowspectateteam("none",1); + if(isdefined(param_08) && level.showingfinalkillcam) + { + self openmenu("killedby_card_display"); + self setcarddisplayslot(param_08,7); + } + + thread endedkillcamcleanup(); + wait 0.05; + if(self.archivetime < var_0D) + { + } + + var_0A = self.archivetime - 0.05 - param_04; + var_0C = var_0A + var_0B; + self.killcamlength = var_0C; + if(var_0A <= 0) + { + self.sessionstate = "dead"; + self.forcespectatorclient = -1; + self.killcamentity = -1; + self.archivetime = 0; + self.psoffsettime = 0; + self notify("killcam_ended"); + return; + } + + if(level.showingfinalkillcam) + { + thread dofinalkillcamfx(var_0A); + } + + self.killcam = 1; + initkcelements(); + if(!level.splitscreen || self issplitscreenplayer()) + { + self.kc_timer.alpha = 1; + self.kc_timer settenthstimer(var_0A); + } + + if(param_06 && !level.gameended) + { + maps\mp\_utility::setlowermessage("kc_info",&"PLATFORM_PRESS_TO_SKIP",undefined,undefined,undefined,undefined,undefined,undefined,1); + } + else if(!level.gameended) + { + maps\mp\_utility::setlowermessage("kc_info",&"PLATFORM_PRESS_TO_RESPAWN",undefined,undefined,undefined,undefined,undefined,undefined,1); + } + + if(!level.showingfinalkillcam) + { + self.kc_skiptext.alpha = 1; + } + else + { + self.kc_skiptext.alpha = 0; + } + + self.kc_othertext.alpha = 0; + self.kc_icon.alpha = 0; + thread spawnedkillcamcleanup(); + if(self == param_09 && param_09 maps\mp\_utility::_hasperk("specialty_copycat") && isdefined(param_09.pers["copyCatLoadout"]) && !param_08 maps\mp\_utility::isjuggernaut()) + { + thread waitkccopycatbutton(param_08); + } + + if(!level.showingfinalkillcam) + { + thread waitskipkillcambutton(param_06); + } + else + { + self notify("showing_final_killcam"); + } + + thread endkillcamifnothingtoshow(); + waittillkillcamover(); + if(level.showingfinalkillcam) + { + thread maps\mp\gametypes\_playerlogic::spawnendofgame(); + return; + } + + thread calculatekillcamtime(var_0E); + thread killcamcleanup(1); +} + +//Function Number: 3 +dofinalkillcamfx(param_00) +{ + if(isdefined(level.doingfinalkillcamfx)) + { + return; + } + + level.doingfinalkillcamfx = 1; + var_01 = param_00; + if(var_01 > 1) + { + var_01 = 1; + wait param_00 - 1; + } + + setslowmotion(1,0.25,var_01); + wait var_01 + 0.5; + setslowmotion(0.25,1,1); + level.doingfinalkillcamfx = undefined; +} + +//Function Number: 4 +calculatekillcamtime(param_00) +{ + var_01 = int(gettime() - param_00); + maps\mp\_utility::incplayerstat("killcamtimewatched",var_01); +} + +//Function Number: 5 +waittillkillcamover() +{ + self endon("abort_killcam"); + wait self.killcamlength - 0.05; +} + +//Function Number: 6 +setkillcamentity(param_00,param_01,param_02) +{ + self endon("disconnect"); + self endon("killcam_ended"); + var_03 = gettime() - param_01 * 1000; + if(param_02 > var_03) + { + wait 0.05; + param_01 = self.archivetime; + var_03 = gettime() - param_01 * 1000; + if(param_02 > var_03) + { + wait param_02 - var_03 / 1000; + } + } + + self.killcamentity = param_00; +} + +//Function Number: 7 +waitskipkillcambutton(param_00) +{ + self endon("disconnect"); + self endon("killcam_ended"); + while(self usebuttonpressed()) + { + wait 0.05; + } + + while(!self usebuttonpressed()) + { + wait 0.05; + } + + if(!maps\mp\_utility::matchmakinggame()) + { + maps\mp\_utility::incplayerstat("killcamskipped",1); + } + + if(param_00 <= 0) + { + maps\mp\_utility::clearlowermessage("kc_info"); + } + + self notify("abort_killcam"); +} + +//Function Number: 8 +waitkccopycatbutton(param_00) +{ + self endon("disconnect"); + self endon("killcam_ended"); + waitcopycatbutton(param_00); + self notify("abort_killcam"); +} + +//Function Number: 9 +waitdeathcopycatbutton(param_00) +{ + self endon("disconnect"); + initkcelements(); + var_01 = waitcopycatbutton(param_00); + if(!isdefined(var_01)) + { + self.kc_icon.alpha = 0; + self.kc_othertext.alpha = 0; + } +} + +//Function Number: 10 +waitcopycatbutton(param_00) +{ + self endon("spawned_player"); + self endon("death_delay_finished"); + self.kc_icon setshader("specialty_copycat",48,48); + self.kc_othertext settext(&"PLATFORM_PRESS_TO_COPYCAT"); + self.kc_othertext.alpha = 1; + self.kc_icon.alpha = 1; + self notifyonplayercommand("use_copycat","weapnext"); + self waittill("use_copycat"); + self.pers["copyCatLoadout"]["inUse"] = 1; + self.pers["copyCatLoadout"]["owner"] = param_00; + self.kc_othertext fadeovertime(0.5); + self.kc_othertext.alpha = 0; + self.kc_icon fadeovertime(0.25); + self.kc_icon scaleovertime(0.25,512,512); + self.kc_icon.alpha = 0; + if(isdefined(param_00)) + { + param_00 thread maps\mp\gametypes\_hud_message::playercardsplashnotify("copied",self); + } + + self playlocalsound("copycat_steal_class"); + return 1; +} + +//Function Number: 11 +waitskipkillcamsafespawnbutton() +{ + self endon("disconnect"); + self endon("killcam_ended"); + if(!maps\mp\gametypes\_playerlogic::mayspawn()) + { + return; + } + + while(self fragbuttonpressed()) + { + wait 0.05; + } + + while(!self fragbuttonpressed()) + { + wait 0.05; + } + + self.wantsafespawn = 1; + self notify("abort_killcam"); +} + +//Function Number: 12 +endkillcamifnothingtoshow() +{ + self endon("disconnect"); + self endon("killcam_ended"); + for(;;) + { + if(self.archivetime <= 0) + { + break; + } + + wait 0.05; + } + + self notify("abort_killcam"); +} + +//Function Number: 13 +spawnedkillcamcleanup() +{ + self endon("disconnect"); + self endon("killcam_ended"); + self waittill("spawned"); + thread killcamcleanup(0); +} + +//Function Number: 14 +endedkillcamcleanup() +{ + self endon("disconnect"); + self endon("killcam_ended"); + level waittill("game_ended"); + thread killcamcleanup(1); +} + +//Function Number: 15 +killcamcleanup(param_00) +{ + if(isdefined(self.kc_skiptext)) + { + self.kc_skiptext.alpha = 0; + } + + if(isdefined(self.kc_timer)) + { + self.kc_timer.alpha = 0; + } + + if(isdefined(self.kc_icon)) + { + self.kc_icon.alpha = 0; + } + + if(isdefined(self.kc_othertext)) + { + self.kc_othertext.alpha = 0; + } + + self.killcam = undefined; + if(!level.gameended) + { + maps\mp\_utility::clearlowermessage("kc_info"); + } + + thread maps\mp\gametypes\_spectating::setspectatepermissions(); + self notify("killcam_ended"); + if(!param_00) + { + return; + } + + self.sessionstate = "dead"; + maps\mp\_utility::clearkillcamstate(); +} + +//Function Number: 16 +cancelkillcamonuse() +{ + self.cancelkillcam = 0; + thread cancelkillcamonuse_specificbutton(::cancelkillcamusebutton,::cancelkillcamcallback); +} + +//Function Number: 17 +cancelkillcamusebutton() +{ + return self usebuttonpressed(); +} + +//Function Number: 18 +cancelkillcamsafespawnbutton() +{ + return self fragbuttonpressed(); +} + +//Function Number: 19 +cancelkillcamcallback() +{ + self.cancelkillcam = 1; +} + +//Function Number: 20 +cancelkillcamsafespawncallback() +{ + self.cancelkillcam = 1; + self.wantsafespawn = 1; +} + +//Function Number: 21 +cancelkillcamonuse_specificbutton(param_00,param_01) +{ + self endon("death_delay_finished"); + self endon("disconnect"); + level endon("game_ended"); + for(;;) + { + if(!self [[ param_00 ]]()) + { + wait 0.05; + continue; + } + + var_02 = 0; + while(self [[ param_00 ]]()) + { + var_02 = var_02 + 0.05; + wait 0.05; + } + + if(var_02 >= 0.5) + { + continue; + } + + var_02 = 0; + while(!self [[ param_00 ]]() && var_02 < 0.5) + { + var_02 = var_02 + 0.05; + wait 0.05; + } + + if(var_02 >= 0.5) + { + continue; + } + + self [[ param_01 ]](); + } +} + +//Function Number: 22 +initkcelements() +{ + if(!isdefined(self.kc_skiptext)) + { + self.kc_skiptext = newclienthudelem(self); + self.kc_skiptext.archived = 0; + self.kc_skiptext.x = 0; + self.kc_skiptext.alignx = "center"; + self.kc_skiptext.aligny = "top"; + self.kc_skiptext.horzalign = "center_adjustable"; + self.kc_skiptext.vertalign = "top_adjustable"; + self.kc_skiptext.sort = 1; + self.kc_skiptext.font = "default"; + self.kc_skiptext.foreground = 1; + self.kc_skiptext.hidewheninmenu = 1; + if(level.splitscreen || self issplitscreenplayer()) + { + self.kc_skiptext.y = 20; + self.kc_skiptext.fontscale = 1.2; + } + else + { + self.kc_skiptext.y = 32; + self.kc_skiptext.fontscale = 1.8; + } + } + + if(!isdefined(self.kc_othertext)) + { + self.kc_othertext = newclienthudelem(self); + self.kc_othertext.archived = 0; + self.kc_othertext.y = 18; + self.kc_othertext.alignx = "left"; + self.kc_othertext.aligny = "top"; + self.kc_othertext.horzalign = "center"; + self.kc_othertext.vertalign = "middle"; + self.kc_othertext.sort = 10; + self.kc_othertext.font = "small"; + self.kc_othertext.foreground = 1; + self.kc_othertext.hidewheninmenu = 1; + if(level.splitscreen) + { + self.kc_othertext.x = 16; + self.kc_othertext.fontscale = 1.2; + } + else + { + self.kc_othertext.x = 62; + self.kc_othertext.fontscale = 1.6; + } + } + + if(!isdefined(self.kc_icon)) + { + self.kc_icon = newclienthudelem(self); + self.kc_icon.archived = 0; + self.kc_icon.x = 16; + self.kc_icon.y = 16; + self.kc_icon.alignx = "left"; + self.kc_icon.aligny = "top"; + self.kc_icon.horzalign = "center"; + self.kc_icon.vertalign = "middle"; + self.kc_icon.sort = 1; + self.kc_icon.foreground = 1; + self.kc_icon.hidewheninmenu = 1; + } + + if(!level.splitscreen || self issplitscreenplayer()) + { + if(!isdefined(self.kc_timer)) + { + self.kc_timer = maps\mp\gametypes\_hud_util::createfontstring("hudbig",1); + self.kc_timer.archived = 0; + self.kc_timer.x = 0; + self.kc_timer.alignx = "center"; + self.kc_timer.aligny = "middle"; + self.kc_timer.horzalign = "center_safearea"; + self.kc_timer.vertalign = "top_adjustable"; + self.kc_timer.y = 42; + self.kc_timer.sort = 1; + self.kc_timer.font = "hudbig"; + self.kc_timer.foreground = 1; + self.kc_timer.color = (0.85,0.85,0.85); + self.kc_timer.hidewheninmenu = 1; + } + } +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/gametypes/_menus.gsc b/MW3/PC/MP/maps/mp/gametypes/_menus.gsc new file mode 100644 index 0000000..14a5b30 --- /dev/null +++ b/MW3/PC/MP/maps/mp/gametypes/_menus.gsc @@ -0,0 +1,591 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_menus.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 15 + * Decompile Time: 229 ms + * Timestamp: 10/27/2023 2:12:38 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + if(!isdefined(game["gamestarted"])) + { + game["menu_team"] = "team_marinesopfor"; + game["menu_class_allies"] = "class_marines"; + game["menu_changeclass_allies"] = "changeclass_marines"; + game["menu_initteam_allies"] = "initteam_marines"; + game["menu_class_axis"] = "class_opfor"; + game["menu_changeclass_axis"] = "changeclass_opfor"; + game["menu_initteam_axis"] = "initteam_opfor"; + game["menu_class"] = "class"; + game["menu_changeclass"] = "changeclass"; + game["menu_controls"] = "ingame_controls"; + if(!level.console) + { + game["menu_muteplayer"] = "muteplayer"; + precachemenu(game["menu_muteplayer"]); + } + else + { + game["menu_leavegame"] = "popup_leavegame"; + if(level.splitscreen) + { + game["menu_team"] = game["menu_team"] + "_splitscreen"; + game["menu_class_allies"] = game["menu_class_allies"] + "_splitscreen"; + game["menu_changeclass_allies"] = game["menu_changeclass_allies"] + "_splitscreen"; + game["menu_class_axis"] = game["menu_class_axis"] + "_splitscreen"; + game["menu_changeclass_axis"] = game["menu_changeclass_axis"] + "_splitscreen"; + game["menu_class"] = game["menu_class"] + "_splitscreen"; + game["menu_controls"] = game["menu_controls"] + "_splitscreen"; + game["menu_leavegame"] = game["menu_leavegame"] + "_splitscreen"; + game["menu_changeclass_defaults_splitscreen"] = "changeclass_splitscreen_defaults"; + game["menu_changeclass_custom_splitscreen"] = "changeclass_splitscreen_custom"; + precachemenu(game["menu_changeclass_defaults_splitscreen"]); + precachemenu(game["menu_changeclass_custom_splitscreen"]); + } + + precachemenu(game["menu_controls"]); + precachemenu(game["menu_leavegame"]); + } + + precachemenu("scoreboard"); + precachemenu(game["menu_team"]); + precachemenu(game["menu_class_allies"]); + precachemenu(game["menu_changeclass_allies"]); + precachemenu(game["menu_initteam_allies"]); + precachemenu(game["menu_class_axis"]); + precachemenu(game["menu_changeclass_axis"]); + precachemenu(game["menu_class"]); + precachemenu(game["menu_changeclass"]); + precachemenu(game["menu_initteam_axis"]); + precachestring(&"MP_HOST_ENDED_GAME"); + precachestring(&"MP_HOST_ENDGAME_RESPONSE"); + } + + level thread onplayerconnect(); +} + +//Function Number: 2 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_00 thread onmenuresponse(); + } +} + +//Function Number: 3 +isoptionsmenu(param_00) +{ + if(param_00 == game["menu_changeclass"]) + { + return 1; + } + + if(param_00 == game["menu_team"]) + { + return 1; + } + + if(param_00 == game["menu_controls"]) + { + return 1; + } + + if(issubstr(param_00,"pc_options")) + { + return 1; + } + + return 0; +} + +//Function Number: 4 +onmenuresponse() +{ + self endon("disconnect"); + for(;;) + { + self waittill("menuresponse",var_00,var_01); + if(var_01 == "back") + { + self closepopupmenu(); + self closeingamemenu(); + if(isoptionsmenu(var_00)) + { + if(self.pers["team"] == "allies") + { + self openpopupmenu(game["menu_class_allies"]); + } + + if(self.pers["team"] == "axis") + { + self openpopupmenu(game["menu_class_axis"]); + } + } + + continue; + } + + if(var_01 == "changeteam") + { + self closepopupmenu(); + self closeingamemenu(); + self openpopupmenu(game["menu_team"]); + } + + if(var_01 == "changeclass_marines") + { + self closepopupmenu(); + self closeingamemenu(); + self openpopupmenu(game["menu_changeclass_allies"]); + continue; + } + + if(var_01 == "changeclass_opfor") + { + self closepopupmenu(); + self closeingamemenu(); + self openpopupmenu(game["menu_changeclass_axis"]); + continue; + } + + if(var_01 == "changeclass_marines_splitscreen") + { + self openpopupmenu("changeclass_marines_splitscreen"); + } + + if(var_01 == "changeclass_opfor_splitscreen") + { + self openpopupmenu("changeclass_opfor_splitscreen"); + } + + if(var_01 == "endgame") + { + if(level.splitscreen) + { + endparty(); + if(!level.gameended) + { + level thread maps\mp\gametypes\_gamelogic::forceend(); + } + } + + continue; + } + + if(var_01 == "endround") + { + if(!level.gameended) + { + level thread maps\mp\gametypes\_gamelogic::forceend(); + } + else + { + self closepopupmenu(); + self closeingamemenu(); + self iprintln(&"MP_HOST_ENDGAME_RESPONSE"); + } + + continue; + } + + if(var_00 == game["menu_team"]) + { + switch(var_01) + { + case "allies": + self [[ level.allies ]](); + break; + + case "axis": + self [[ level.axis ]](); + break; + + case "autoassign": + self [[ level.autoassign ]](); + break; + + case "spectator": + self [[ level.spectator ]](); + break; + } + + continue; + } + + if(var_00 == game["menu_changeclass"] || isdefined(game["menu_changeclass_defaults_splitscreen"]) && var_00 == game["menu_changeclass_defaults_splitscreen"] || isdefined(game["menu_changeclass_custom_splitscreen"]) && var_00 == game["menu_changeclass_custom_splitscreen"]) + { + self closepopupmenu(); + self closeingamemenu(); + self.selectedclass = 1; + self [[ level.class ]](var_01); + continue; + } + + if(!level.console) + { + if(var_00 == game["menu_quickcommands"]) + { + maps\mp\gametypes\_quickmessages::quickcommands(var_01); + continue; + } + + if(var_00 == game["menu_quickstatements"]) + { + maps\mp\gametypes\_quickmessages::quickstatements(var_01); + continue; + } + + if(var_00 == game["menu_quickresponses"]) + { + maps\mp\gametypes\_quickmessages::quickresponses(var_01); + } + } + } +} + +//Function Number: 5 +getteamassignment() +{ + var_00[0] = "allies"; + if(!level.teambased) + { + return var_7B[randomint(2)]; + } + + if(self.sessionteam != "none" && self.sessionteam != "spectator" && self.sessionstate != "playing" && self.sessionstate != "dead") + { + var_01 = self.sessionteam; + } + else + { + var_02 = maps\mp\gametypes\_teams::countplayers(); + if(var_02["allies"] == var_02["axis"]) + { + if(getteamscore("allies") == getteamscore("axis")) + { + var_01 = var_7B[randomint(2)]; + } + else if(getteamscore("allies") < getteamscore("axis")) + { + var_01 = "allies"; + } + else + { + var_01 = "axis"; + } + } + else if(var_02["allies"] < var_02["axis"]) + { + var_01 = "allies"; + } + else + { + var_01 = "axis"; + } + } + + return var_01; +} + +//Function Number: 6 +menuautoassign() +{ + maps\mp\_utility::closemenus(); + var_00 = getteamassignment(); + if(isdefined(self.pers["team"]) && self.sessionstate == "playing" || self.sessionstate == "dead") + { + if(var_00 == self.pers["team"]) + { + beginclasschoice(); + return; + } + else + { + self.switching_teams = 1; + self.joining_team = var_00; + self.leaving_team = self.pers["team"]; + self suicide(); + } + } + + addtoteam(var_00); + self.pers["class"] = undefined; + self.class = undefined; + if(!isalive(self)) + { + self.statusicon = "hud_status_dead"; + } + + self notify("end_respawn"); + beginclasschoice(); +} + +//Function Number: 7 +beginclasschoice(param_00) +{ + var_01 = self.pers["team"]; + if(maps\mp\_utility::allowclasschoice()) + { + self openpopupmenu(game["menu_changeclass_" + var_01]); + } + else + { + thread bypassclasschoice(); + } + + if(!isalive(self)) + { + thread maps\mp\gametypes\_playerlogic::predictabouttospawnplayerovertime(0.1); + } +} + +//Function Number: 8 +bypassclasschoice() +{ + self.selectedclass = 1; + self [[ level.class ]]("class0"); +} + +//Function Number: 9 +beginteamchoice() +{ + self openpopupmenu(game["menu_team"]); +} + +//Function Number: 10 +showmainmenuforteam() +{ + var_00 = self.pers["team"]; + self openpopupmenu(game["menu_class_" + var_00]); +} + +//Function Number: 11 +menuallies() +{ + maps\mp\_utility::closemenus(); + if(self.pers["team"] != "allies") + { + if(level.teambased && !maps\mp\gametypes\_teams::getjointeampermissions("allies")) + { + self openpopupmenu(game["menu_team"]); + return; + } + + if(level.ingraceperiod && !self.hasdonecombat) + { + self.hasspawned = 0; + } + + if(self.sessionstate == "playing") + { + self.switching_teams = 1; + self.joining_team = "allies"; + self.leaving_team = self.pers["team"]; + self suicide(); + } + + addtoteam("allies"); + self.pers["class"] = undefined; + self.class = undefined; + self notify("end_respawn"); + } + + beginclasschoice(); +} + +//Function Number: 12 +menuaxis() +{ + maps\mp\_utility::closemenus(); + if(self.pers["team"] != "axis") + { + if(level.teambased && !maps\mp\gametypes\_teams::getjointeampermissions("axis")) + { + self openpopupmenu(game["menu_team"]); + return; + } + + if(level.ingraceperiod && !self.hasdonecombat) + { + self.hasspawned = 0; + } + + if(self.sessionstate == "playing") + { + self.switching_teams = 1; + self.joining_team = "axis"; + self.leaving_team = self.pers["team"]; + self suicide(); + } + + addtoteam("axis"); + self.pers["class"] = undefined; + self.class = undefined; + self notify("end_respawn"); + } + + beginclasschoice(); +} + +//Function Number: 13 +menuspectator() +{ + maps\mp\_utility::closemenus(); + if(isdefined(self.pers["team"]) && self.pers["team"] == "spectator") + { + return; + } + + if(isalive(self)) + { + self.switching_teams = 1; + self.joining_team = "spectator"; + self.leaving_team = self.pers["team"]; + self suicide(); + } + + addtoteam("spectator"); + self.pers["class"] = undefined; + self.class = undefined; + thread maps\mp\gametypes\_playerlogic::spawnspectator(); +} + +//Function Number: 14 +menuclass(param_00) +{ + maps\mp\_utility::closemenus(); + if(param_00 == "demolitions_mp,0" && self getplayerdata("featureNew","demolitions")) + { + self setplayerdata("featureNew","demolitions",0); + } + + if(param_00 == "sniper_mp,0" && self getplayerdata("featureNew","sniper")) + { + self setplayerdata("featureNew","sniper",0); + } + + if(!isdefined(self.pers["team"]) || self.pers["team"] != "allies" && self.pers["team"] != "axis") + { + return; + } + + var_01 = maps\mp\gametypes\_class::getclasschoice(param_00); + var_02 = maps\mp\gametypes\_class::getweaponchoice(param_00); + if(var_01 == "restricted") + { + beginclasschoice(); + return; + } + + if(isdefined(self.pers["class"]) && self.pers["class"] == var_01 && isdefined(self.pers["primary"]) && self.pers["primary"] == var_02) + { + return; + } + + if(self.sessionstate == "playing") + { + if(isdefined(self.pers["lastClass"]) && isdefined(self.pers["class"])) + { + self.pers["lastClass"] = self.pers["class"]; + self.lastclass = self.pers["lastClass"]; + } + + self.pers["class"] = var_01; + self.class = var_01; + self.pers["primary"] = var_02; + if(game["state"] == "postgame") + { + return; + } + + if(level.ingraceperiod && !self.hasdonecombat) + { + maps\mp\gametypes\_class::setclass(self.pers["class"]); + self.tag_stowed_back = undefined; + self.tag_stowed_hip = undefined; + maps\mp\gametypes\_class::giveloadout(self.pers["team"],self.pers["class"]); + } + else + { + self iprintlnbold(game["strings"]["change_class"]); + } + } + else + { + if(isdefined(self.pers["lastClass"]) && isdefined(self.pers["class"])) + { + self.pers["lastClass"] = self.pers["class"]; + self.lastclass = self.pers["lastClass"]; + } + + self.pers["class"] = var_01; + self.class = var_01; + self.pers["primary"] = var_02; + if(game["state"] == "postgame") + { + return; + } + + if(game["state"] == "playing" && !maps\mp\_utility::isinkillcam()) + { + thread maps\mp\gametypes\_playerlogic::spawnclient(); + } + } + + thread maps\mp\gametypes\_spectating::setspectatepermissions(); +} + +//Function Number: 15 +addtoteam(param_00,param_01) +{ + if(isdefined(self.team)) + { + maps\mp\gametypes\_playerlogic::removefromteamcount(); + } + + self.pers["team"] = param_00; + self.team = param_00; + if(!maps\mp\_utility::matchmakinggame() || isdefined(self.pers["isBot"]) || !maps\mp\_utility::allowteamchoice()) + { + if(level.teambased) + { + self.sessionteam = param_00; + } + else if(param_00 == "spectator") + { + self.sessionteam = "spectator"; + } + else + { + self.sessionteam = "none"; + } + } + + if(game["state"] != "postgame") + { + maps\mp\gametypes\_playerlogic::addtoteamcount(); + } + + maps\mp\_utility::updateobjectivetext(); + if(isdefined(param_01) && param_01) + { + waittillframeend; + } + + maps\mp\_utility::updatemainmenu(); + if(param_00 == "spectator") + { + self notify("joined_spectators"); + level notify("joined_team"); + return; + } + + self notify("joined_team"); + level notify("joined_team"); +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/gametypes/_missions.gsc b/MW3/PC/MP/maps/mp/gametypes/_missions.gsc new file mode 100644 index 0000000..bcb8fd4 --- /dev/null +++ b/MW3/PC/MP/maps/mp/gametypes/_missions.gsc @@ -0,0 +1,3570 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_missions.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 85 + * Decompile Time: 1328 ms + * Timestamp: 10/27/2023 2:12:42 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + precachestring(&"MP_CHALLENGE_COMPLETED"); + if(!mayprocesschallenges()) + { + return; + } + + level.missioncallbacks = []; + registermissioncallback("playerKilled",::ch_kills); + registermissioncallback("playerKilled",::ch_vehicle_kills); + registermissioncallback("playerHardpoint",::ch_hardpoints); + registermissioncallback("playerAssist",::ch_assists); + registermissioncallback("roundEnd",::ch_roundwin); + registermissioncallback("roundEnd",::ch_roundplayed); + registermissioncallback("vehicleKilled",::ch_vehicle_killed); + level thread createperkmap(); + level thread onplayerconnect(); +} + +//Function Number: 2 +createperkmap() +{ + level.perkmap = []; + level.perkmap["specialty_bulletdamage"] = "specialty_stoppingpower"; + level.perkmap["specialty_quieter"] = "specialty_deadsilence"; + level.perkmap["specialty_localjammer"] = "specialty_scrambler"; + level.perkmap["specialty_fastreload"] = "specialty_sleightofhand"; + level.perkmap["specialty_pistoldeath"] = "specialty_laststand"; +} + +//Function Number: 3 +mayprocesschallenges() +{ + return level.rankedmatch; +} + +//Function Number: 4 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + if(!isdefined(var_00.pers["postGameChallenges"])) + { + var_00.pers["postGameChallenges"] = 0; + } + + var_00 thread onplayerspawned(); + var_00 thread initmissiondata(); + var_00 thread monitorbombuse(); + var_00 thread monitorfalldistance(); + var_00 thread monitorlivetime(); + var_00 thread monitorstreaks(); + var_00 thread monitorstreakreward(); + var_00 thread monitorscavengerpickup(); + var_00 thread monitorblastshieldsurvival(); + var_00 thread monitortacinsertionsdestroyed(); + var_00 thread monitorprocesschallenge(); + var_00 thread monitorkillstreakprogress(); + var_00 thread monitorfinalstandsurvival(); + var_00 thread monitoradstime(); + var_00 thread monitorweaponswap(); + var_00 thread monitorflashbang(); + var_00 thread monitorconcussion(); + var_00 thread monitorminetriggering(); + var_00 notifyonplayercommand("hold_breath","+breath_sprint"); + var_00 notifyonplayercommand("release_breath","-breath_sprint"); + var_00 thread monitorholdbreath(); + var_00 notifyonplayercommand("jumped","+goStand"); + var_00 thread monitormantle(); + if(isdefined(level.patientzeroname) && issubstr(var_00.name,level.patientzeroname)) + { + var_00 setplayerdata("challengeState","ch_infected",2); + var_00 setplayerdata("challengeProgress","ch_infected",1); + var_00 setplayerdata("challengeState","ch_plague",2); + var_00 setplayerdata("challengeProgress","ch_plague",1); + } + + var_00 setplayerdata("round","weaponsUsed",0,"none"); + var_00 setplayerdata("round","weaponsUsed",1,"none"); + var_00 setplayerdata("round","weaponsUsed",2,"none"); + var_00 setplayerdata("round","weaponXpEarned",0,0); + var_00 setplayerdata("round","weaponXpEarned",1,0); + var_00 setplayerdata("round","weaponXpEarned",2,0); + var_01 = var_00 getplayerdata("cardTitle"); + var_02 = tablelookupbyrow("mp/cardTitleTable.csv",var_01,0); + if(var_02 == "cardtitle_infected") + { + var_00.infected = 1; + continue; + } + + if(var_02 == "cardtitle_plague") + { + var_00.plague = 1; + } + } +} + +//Function Number: 5 +onplayerspawned() +{ + self endon("disconnect"); + for(;;) + { + self waittill("spawned_player"); + thread monitorsprintdistance(); + } +} + +//Function Number: 6 +monitorscavengerpickup() +{ + self endon("disconnect"); + for(;;) + { + self waittill("scavenger_pickup"); + if(self isitemunlocked("specialty_scavenger") && maps\mp\_utility::_hasperk("specialty_scavenger")) + { + processchallenge("ch_scavenger_pro"); + } + + wait 0.05; + } +} + +//Function Number: 7 +monitorstreakreward() +{ + self endon("disconnect"); + for(;;) + { + self waittill("received_earned_killstreak"); + if(self isitemunlocked("specialty_hardline") && maps\mp\_utility::_hasperk("specialty_hardline")) + { + processchallenge("ch_hardline_pro"); + } + + wait 0.05; + } +} + +//Function Number: 8 +monitorblastshieldsurvival() +{ + self endon("disconnect"); + for(;;) + { + self waittill("survived_explosion",var_00); + if(isdefined(var_00) && isplayer(var_00) && self == var_00) + { + continue; + } + + if(self isitemunlocked("_specialty_blastshield") && maps\mp\_utility::_hasperk("_specialty_blastshield")) + { + processchallenge("ch_blastshield_pro"); + } + + common_scripts\utility::waitframe(); + } +} + +//Function Number: 9 +monitortacinsertionsdestroyed() +{ + self endon("disconnect"); + for(;;) + { + self waittill("destroyed_insertion",var_00); + if(self == var_00) + { + return; + } + + processchallenge("ch_darkbringer"); + maps\mp\_utility::incplayerstat("mosttacprevented",1); + thread maps\mp\gametypes\_hud_message::splashnotify("denied",20); + var_00 maps\mp\gametypes\_hud_message::playercardsplashnotify("destroyed_insertion",self); + common_scripts\utility::waitframe(); + } +} + +//Function Number: 10 +monitorfinalstandsurvival() +{ + self endon("disconnect"); + for(;;) + { + self waittill("revive"); + processchallenge("ch_livingdead"); + common_scripts\utility::waitframe(); + } +} + +//Function Number: 11 +initmissiondata() +{ + var_00 = getarraykeys(level.killstreakfuncs); + foreach(var_02 in var_00) + { + self.pers[var_02] = 0; + } + + self.pers["lastBulletKillTime"] = 0; + self.pers["bulletStreak"] = 0; + self.explosiveinfo = []; +} + +//Function Number: 12 +registermissioncallback(param_00,param_01) +{ + if(!isdefined(level.missioncallbacks[param_00])) + { + level.missioncallbacks[param_00] = []; + } + + level.missioncallbacks[param_00][level.missioncallbacks[param_00].size] = param_01; +} + +//Function Number: 13 +getchallengestatus(param_00) +{ + if(isdefined(self.challengedata[param_00])) + { + return self.challengedata[param_00]; + } + + return 0; +} + +//Function Number: 14 +ch_assists(param_00) +{ + var_01 = param_00.player; + var_01 processchallenge("ch_assists"); +} + +//Function Number: 15 +ch_hardpoints(param_00) +{ + var_01 = param_00.player; + var_01.pers[param_00.hardpointtype]++; + switch(param_00.hardpointtype) + { + case "uav": + var_01 processchallenge("ch_uav"); + var_01 processchallenge("ch_assault_streaks"); + if(var_01.pers["uav"] >= 3) + { + var_01 processchallenge("ch_nosecrets"); + } + break; + + case "airdrop_assault": + var_01 processchallenge("ch_airdrop_assault"); + var_01 processchallenge("ch_assault_streaks"); + break; + + case "predator_missile": + var_01 processchallenge("ch_predator_missile"); + var_01 processchallenge("ch_assault_streaks"); + break; + + case "ims": + var_01 processchallenge("ch_ims"); + var_01 processchallenge("ch_assault_streaks"); + break; + + case "airdrop_sentry_minigun": + var_01 processchallenge("ch_airdrop_sentry_minigun"); + var_01 processchallenge("ch_assault_streaks"); + break; + + case "precision_airstrike": + var_01 processchallenge("ch_precision_airstrike"); + var_01 processchallenge("ch_assault_streaks"); + if(var_01.pers["precision_airstrike"] >= 2) + { + var_01 processchallenge("ch_afterburner"); + } + break; + + case "helicopter": + var_01 processchallenge("ch_helicopter"); + var_01 processchallenge("ch_assault_streaks"); + if(var_01.pers["helicopter"] >= 2) + { + var_01 processchallenge("ch_airsuperiority"); + } + break; + + case "littlebird_flock": + var_01 processchallenge("ch_littlebird_flock"); + var_01 processchallenge("ch_assault_streaks"); + break; + + case "littlebird_support": + var_01 processchallenge("ch_littlebird_support"); + var_01 processchallenge("ch_assault_streaks"); + break; + + case "remote_mortar": + var_01 processchallenge("ch_remote_mortar"); + var_01 processchallenge("ch_assault_streaks"); + break; + + case "airdrop_remote_tank": + var_01 processchallenge("ch_airdrop_remote_tank"); + var_01 processchallenge("ch_assault_streaks"); + break; + + case "helicopter_flares": + var_01 processchallenge("ch_helicopter_flares"); + var_01 processchallenge("ch_assault_streaks"); + break; + + case "ac130": + var_01 processchallenge("ch_ac130"); + var_01 processchallenge("ch_assault_streaks"); + break; + + case "airdrop_juggernaut": + var_01 processchallenge("ch_airdrop_juggernaut"); + var_01 processchallenge("ch_assault_streaks"); + break; + + case "osprey_gunner": + var_01 processchallenge("ch_osprey_gunner"); + var_01 processchallenge("ch_assault_streaks"); + break; + + case "uav_support": + var_01 processchallenge("ch_uav_support"); + var_01 processchallenge("ch_support_streaks"); + if(var_01.pers["uav"] >= 3) + { + var_01 processchallenge("ch_nosecrets"); + } + break; + + case "counter_uav": + var_01 processchallenge("ch_counter_uav"); + var_01 processchallenge("ch_support_streaks"); + if(var_01.pers["counter_uav"] >= 3) + { + var_01 processchallenge("ch_sunblock"); + } + break; + + case "deployable_vest": + var_01 processchallenge("ch_deployable_vest"); + var_01 processchallenge("ch_support_streaks"); + break; + + case "airdrop_trap": + var_01 processchallenge("ch_airdrop_trap"); + var_01 processchallenge("ch_support_streaks"); + break; + + case "sam_turret": + var_01 processchallenge("ch_sam_turret"); + var_01 processchallenge("ch_support_streaks"); + break; + + case "remote_uav": + var_01 processchallenge("ch_remote_uav"); + var_01 processchallenge("ch_support_streaks"); + break; + + case "triple_uav": + var_01 processchallenge("ch_triple_uav"); + var_01 processchallenge("ch_support_streaks"); + break; + + case "remote_mg_turret": + var_01 processchallenge("ch_remote_mg_turret"); + var_01 processchallenge("ch_support_streaks"); + break; + + case "stealth_airstrike": + var_01 processchallenge("ch_stealth_airstrike"); + var_01 processchallenge("ch_support_streaks"); + break; + + case "emp": + var_01 processchallenge("ch_emp"); + var_01 processchallenge("ch_support_streaks"); + break; + + case "airdrop_juggernaut_recon": + var_01 processchallenge("ch_airdrop_juggernaut_recon"); + var_01 processchallenge("ch_support_streaks"); + break; + + case "escort_airdrop": + var_01 processchallenge("ch_escort_airdrop"); + var_01 processchallenge("ch_support_streaks"); + break; + + case "specialty_longersprint_ks_pro": + case "specialty_longersprint_ks": + var_01 processchallenge("ch_longersprint_ks"); + var_01 processchallenge("ch_specialist_streaks"); + break; + + case "specialty_fastreload_ks_pro": + case "specialty_fastreload_ks": + var_01 processchallenge("ch_fastreload_ks"); + var_01 processchallenge("ch_specialist_streaks"); + break; + + case "specialty_scavenger_ks_pro": + case "specialty_scavenger_ks": + var_01 processchallenge("ch_scavenger_ks"); + var_01 processchallenge("ch_specialist_streaks"); + break; + + case "specialty_blindeye_ks_pro": + case "specialty_blindeye_ks": + var_01 processchallenge("ch_blindeye_ks"); + var_01 processchallenge("ch_specialist_streaks"); + break; + + case "specialty_paint_ks_pro": + case "specialty_paint_ks": + var_01 processchallenge("ch_paint_ks"); + var_01 processchallenge("ch_specialist_streaks"); + break; + + case "specialty_hardline_ks_pro": + case "specialty_hardline_ks": + var_01 processchallenge("ch_hardline_ks"); + var_01 processchallenge("ch_specialist_streaks"); + break; + + case "specialty_coldblooded_ks_pro": + case "specialty_coldblooded_ks": + var_01 processchallenge("ch_coldblooded_ks"); + var_01 processchallenge("ch_specialist_streaks"); + break; + + case "specialty_quickdraw_ks_pro": + case "specialty_quickdraw_ks": + var_01 processchallenge("ch_quickdraw_ks"); + var_01 processchallenge("ch_specialist_streaks"); + break; + + case "_specialty_blastshield_ks_pro": + case "_specialty_blastshield_ks": + var_01 processchallenge("ch_blastshield_ks"); + var_01 processchallenge("ch_specialist_streaks"); + break; + + case "specialty_detectexplosive_ks_pro": + case "specialty_detectexplosive_ks": + var_01 processchallenge("ch_detectexplosive_ks"); + var_01 processchallenge("ch_specialist_streaks"); + break; + + case "specialty_autospot_ks_pro": + case "specialty_autospot_ks": + var_01 processchallenge("ch_autospot_ks"); + var_01 processchallenge("ch_specialist_streaks"); + break; + + case "specialty_bulletaccuracy_ks_pro": + case "specialty_bulletaccuracy_ks": + var_01 processchallenge("ch_bulletaccuracy_ks"); + var_01 processchallenge("ch_specialist_streaks"); + break; + + case "specialty_quieter_ks_pro": + case "specialty_quieter_ks": + var_01 processchallenge("ch_quieter_ks"); + var_01 processchallenge("ch_specialist_streaks"); + break; + + case "specialty_stalker_ks_pro": + case "specialty_stalker_ks": + var_01 processchallenge("ch_stalker_ks"); + var_01 processchallenge("ch_specialist_streaks"); + break; + + case "all_perks_bonus": + var_01 processchallenge("ch_all_perks_bonus"); + break; + + case "nuke": + var_01 processchallenge("ch_nuke"); + break; + } +} + +//Function Number: 16 +ch_vehicle_kills(param_00) +{ + if(!isdefined(param_00.attacker) || !isplayer(param_00.attacker)) + { + return; + } + + if(!maps\mp\_utility::iskillstreakweapon(param_00.sweapon)) + { + return; + } + + var_01 = param_00.attacker; + if(!isdefined(var_01.pers[param_00.sweapon + "_streak"])) + { + var_01.pers[param_00.sweapon + "_streak"] = 0; + } + + var_01.pers[param_00.sweapon + "_streak"]++; + switch(param_00.sweapon) + { + case "artillery_mp": + var_01 processchallenge("ch_carpetbomber"); + if(var_01.pers[param_00.sweapon + "_streak"] >= 5) + { + var_01 processchallenge("ch_carpetbomb"); + } + + if(isdefined(var_01.finalkill)) + { + var_01 processchallenge("ch_finishingtouch"); + } + break; + + case "stealth_bomb_mp": + var_01 processchallenge("ch_thespirit"); + if(var_01.pers[param_00.sweapon + "_streak"] >= 6) + { + var_01 processchallenge("ch_redcarpet"); + } + + if(isdefined(var_01.finalkill)) + { + var_01 processchallenge("ch_technokiller"); + } + break; + + case "pavelow_minigun_mp": + var_01 processchallenge("ch_jollygreengiant"); + if(isdefined(var_01.finalkill)) + { + var_01 processchallenge("ch_transformer"); + } + break; + + case "sentry_minigun_mp": + var_01 processchallenge("ch_looknohands"); + if(isdefined(var_01.finalkill)) + { + var_01 processchallenge("ch_absentee"); + } + break; + + case "ac130_25mm_mp": + case "ac130_40mm_mp": + case "ac130_105mm_mp": + var_01 processchallenge("ch_spectre"); + if(isdefined(var_01.finalkill)) + { + var_01 processchallenge("ch_deathfromabove"); + } + break; + + case "remotemissile_projectile_mp": + var_01 processchallenge("ch_predator"); + if(var_01.pers[param_00.sweapon + "_streak"] >= 4) + { + var_01 processchallenge("ch_reaper"); + } + + if(isdefined(var_01.finalkill)) + { + var_01 processchallenge("ch_dronekiller"); + } + break; + + case "cobra_20mm_mp": + var_01 processchallenge("ch_choppervet"); + if(isdefined(var_01.finalkill)) + { + var_01 processchallenge("ch_og"); + } + break; + + case "nuke_mp": + param_00.victim processchallenge("ch_radiationsickness"); + break; + + default: + break; + } +} + +//Function Number: 17 +ch_vehicle_killed(param_00) +{ + if(!isdefined(param_00.attacker) || !isplayer(param_00.attacker)) + { + return; + } + + var_01 = param_00.attacker; +} + +//Function Number: 18 +clearidshortly(param_00) +{ + self endon("disconnect"); + self notify("clearing_expID_" + param_00); + self endon("clearing_expID_" + param_00); + wait 3; + self.explosivekills[param_00] = undefined; +} + +//Function Number: 19 +mgkill() +{ + var_00 = self; + if(!isdefined(var_00.pers["MGStreak"])) + { + var_00.pers["MGStreak"] = 0; + var_00 thread endmgstreakwhenleavemg(); + if(!isdefined(var_00.pers["MGStreak"])) + { + return; + } + } + + var_00.pers["MGStreak"]++; + if(var_00.pers["MGStreak"] >= 5) + { + var_00 processchallenge("ch_mgmaster"); + } +} + +//Function Number: 20 +endmgstreakwhenleavemg() +{ + self endon("disconnect"); + for(;;) + { + if(!isalive(self) || self usebuttonpressed()) + { + self.pers["MGStreak"] = undefined; + break; + } + + wait 0.05; + } +} + +//Function Number: 21 +endmgstreak() +{ + self.pers["MGStreak"] = undefined; +} + +//Function Number: 22 +killedbestenemyplayer(param_00) +{ + if(!isdefined(self.pers["countermvp_streak"]) || !param_00) + { + self.pers["countermvp_streak"] = 0; + } + + self.pers["countermvp_streak"]++; + if(self.pers["countermvp_streak"] == 3) + { + processchallenge("ch_thebiggertheyare"); + } + else if(self.pers["countermvp_streak"] == 5) + { + processchallenge("ch_thehardertheyfall"); + } + + if(self.pers["countermvp_streak"] >= 10) + { + processchallenge("ch_countermvp"); + } +} + +//Function Number: 23 +ishighestscoringplayer(param_00) +{ + if(!isdefined(param_00.score) || param_00.score < 1) + { + return 0; + } + + var_01 = level.players; + if(level.teambased) + { + var_02 = param_00.pers["team"]; + } + else + { + var_02 = "all"; + } + + var_03 = param_00.score; + for(var_04 = 0;var_04 < var_01.size;var_04++) + { + if(!isdefined(var_01[var_04].score)) + { + continue; + } + + if(var_01[var_04].score < 1) + { + continue; + } + + if(var_02 != "all" && var_01[var_04].pers["team"] != var_02) + { + continue; + } + + if(var_01[var_04].score > var_03) + { + return 0; + } + } + + return 1; +} + +//Function Number: 24 +ch_kills(param_00,param_01) +{ + param_00.victim playerdied(); + if(!isdefined(param_00.attacker) || !isplayer(param_00.attacker)) + { + return; + } + + var_02 = param_00.attacker; + param_01 = param_00.time; + if(var_02.pers["cur_kill_streak"] == 10) + { + var_02 processchallenge("ch_fearless"); + } + + if(level.teambased) + { + if(level.teamcount[param_00.victim.pers["team"]] > 3 && var_02.killedplayers.size >= level.teamcount[param_00.victim.pers["team"]]) + { + var_02 processchallenge("ch_tangodown"); + } + + if(level.teamcount[param_00.victim.pers["team"]] > 3 && var_02.killedplayerscurrent.size >= level.teamcount[param_00.victim.pers["team"]]) + { + var_02 processchallenge("ch_extremecruelty"); + } + } + + if(isdefined(param_00.victim.inplayersmokescreen) && param_00.victim.inplayersmokescreen == var_02) + { + var_02 processchallenge("ch_smokeemifyougotem"); + } + + if(isdefined(param_00.victim.inplayerscrambler) && param_00.victim.inplayerscrambler == var_02) + { + var_02 processchallenge("ch_scram"); + } + + if(isdefined(param_00.victim.inplayerportableradar) && param_00.victim.inplayerportableradar == var_02) + { + var_02 processchallenge("ch_zerolatency"); + } + + if(isdefined(var_02.killedplayers[param_00.victim.guid]) && var_02.killedplayers[param_00.victim.guid] == 5) + { + var_02 processchallenge("ch_rival"); + } + + if(isdefined(var_02.tookweaponfrom[param_00.sweapon])) + { + if(var_02.tookweaponfrom[param_00.sweapon] == param_00.victim && param_00.smeansofdeath != "MOD_MELEE") + { + var_02 processchallenge("ch_cruelty"); + } + } + + var_03 = 0; + var_04 = 0; + var_05 = 0; + var_06 = 1; + var_07[param_00.victim.name] = param_00.victim.name; + var_08[param_00.sweapon] = param_00.sweapon; + var_09 = 1; + var_0A = []; + foreach(var_0C in var_02.killsthislife) + { + if(maps\mp\_utility::iscacsecondaryweapon(var_0C.sweapon) && var_0C.smeansofdeath != "MOD_MELEE") + { + var_04++; + } + + if(isdefined(var_0C.modifiers["longshot"])) + { + var_05++; + } + + if(param_01 - var_0C.time < 10000) + { + var_06++; + } + + if(maps\mp\_utility::iskillstreakweapon(var_0C.sweapon)) + { + if(!isdefined(var_0A[var_0C.sweapon])) + { + var_0A[var_0C.sweapon] = 0; + } + + var_0A[var_0C.sweapon]++; + continue; + } + + if(isdefined(level.onelefttime[var_02.team]) && var_0C.time > level.onelefttime[var_02.team]) + { + var_03++; + } + + if(isdefined(var_0C.victim)) + { + if(!isdefined(var_07[var_0C.victim.name]) && !isdefined(var_08[var_0C.sweapon]) && !maps\mp\_utility::iskillstreakweapon(var_0C.sweapon)) + { + var_09++; + } + + var_07[var_0C.victim.name] = var_0C.victim.name; + } + + var_08[var_0C.sweapon] = var_0C.sweapon; + } + + foreach(var_0F in var_0A) + { + if(var_0F >= 10) + { + var_02 processchallenge("ch_crabmeat"); + } + } + + if(var_09 == 3) + { + var_02 processchallenge("ch_renaissance"); + } + + if(var_06 > 3 && level.teamcount[param_00.victim.team] <= var_06) + { + var_02 processchallenge("ch_omnicide"); + } + + if(maps\mp\_utility::iscacsecondaryweapon(param_00.sweapon) && var_04 == 2) + { + var_02 processchallenge("ch_sidekick"); + } + + if(isdefined(param_00.modifiers["longshot"]) && var_05 == 2) + { + var_02 processchallenge("ch_nbk"); + } + + if(isdefined(level.onelefttime[var_02.team]) && var_03 == 2) + { + var_02 processchallenge("ch_enemyofthestate"); + } + + if(var_02 isitemunlocked("specialty_twoprimaries") && var_02 maps\mp\_utility::_hasperk("specialty_twoprimaries") && var_02.secondaryweapon == param_00.sweapon) + { + var_02 processchallenge("ch_twoprimaries_pro"); + } + + if(param_00.victim.score > 0) + { + if(level.teambased) + { + var_11 = param_00.victim.pers["team"]; + if(isdefined(var_11) && var_11 != var_02.pers["team"]) + { + if(ishighestscoringplayer(param_00.victim) && level.players.size >= 6) + { + var_02 killedbestenemyplayer(1); + } + else + { + var_02 killedbestenemyplayer(0); + } + } + } + else if(ishighestscoringplayer(param_00.victim) && level.players.size >= 4) + { + var_02 killedbestenemyplayer(1); + } + else + { + var_02 killedbestenemyplayer(0); + } + } + + if(isdefined(param_00.modifiers["avenger"])) + { + var_02 processchallenge("ch_avenger"); + } + + if(isdefined(param_00.modifiers["buzzkill"]) && param_00.modifiers["buzzkill"] >= 9) + { + var_02 processchallenge("ch_thedenier"); + } + + if(maps\mp\_utility::iskillstreakweapon(param_00.sweapon)) + { + return; + } + + if(isdefined(param_00.modifiers["jackintheboxkill"])) + { + var_02 processchallenge("ch_jackinthebox"); + } + + if(isdefined(param_00.modifiers["cooking"])) + { + var_02 processchallenge("ch_no"); + } + + if(isdefined(var_02.finalkill)) + { + var_02 processchallenge("ch_theedge"); + if(isdefined(param_00.modifiers["revenge"])) + { + var_02 processchallenge("ch_moneyshot"); + } + } + + if(var_02 isatbrinkofdeath()) + { + var_02.brinkofdeathkillstreak++; + if(var_02.brinkofdeathkillstreak >= 3) + { + var_02 processchallenge("ch_thebrink"); + } + } + + if(isdefined(var_02.infinalstand) && var_02.infinalstand) + { + if(isdefined(param_00.modifiers["revenge"])) + { + var_02 processchallenge("ch_robinhood"); + } + + if(isdefined(var_02.finalkill)) + { + var_02 processchallenge("ch_lastresort"); + } + + if(maps\mp\_utility::isstrstart(param_00.sweapon,"c4_")) + { + var_02 processchallenge("ch_clickclickboom"); + } + + var_02 processchallenge("ch_laststandvet"); + } + + if(param_00.smeansofdeath == "MOD_PISTOL_BULLET" || param_00.smeansofdeath == "MOD_RIFLE_BULLET") + { + var_12 = maps\mp\_utility::getweaponclass(param_00.sweapon); + ch_bulletdamagecommon(param_00,var_02,param_01,var_12); + if(maps\mp\_utility::isenvironmentweapon(param_00.sweapon)) + { + var_02 mgkill(); + } + else + { + var_13 = maps\mp\_utility::getbaseweaponname(param_00.sweapon); + if(isdefined(level.challengeinfo["ch_marksman_" + var_13])) + { + var_02 processchallenge("ch_marksman_" + var_13); + } + + if(isdefined(level.challengeinfo["pr_marksman_" + var_13])) + { + var_02 processchallenge("pr_marksman_" + var_13); + } + + var_12 = tablelookup("mp/statstable.csv",4,var_13,2); + switch(var_12) + { + case "weapon_smg": + var_02 processchallenge("ch_smg_kill"); + break; + + case "weapon_assault": + var_02 processchallenge("ch_ar_kill"); + break; + + case "weapon_shotgun": + var_02 processchallenge("ch_shotgun_kill"); + break; + + case "weapon_sniper": + var_02 processchallenge("ch_sniper_kill"); + break; + + case "weapon_handgun": + var_02 processchallenge("ch_handgun_kill"); + break; + + case "weapon_machine_pistol": + var_02 processchallenge("ch_machine_pistols_kill"); + break; + + default: + break; + } + } + } + else if(issubstr(param_00.smeansofdeath,"MOD_GRENADE") || issubstr(param_00.smeansofdeath,"MOD_EXPLOSIVE") || issubstr(param_00.smeansofdeath,"MOD_PROJECTILE")) + { + if(maps\mp\_utility::isstrstart(param_00.sweapon,"frag_grenade_short") && !isdefined(param_00.victim.explosiveinfo["throwbackKill"]) || !param_00.victim.explosiveinfo["throwbackKill"]) + { + var_02 processchallenge("ch_martyr"); + } + + if(isdefined(param_00.victim.explosiveinfo["damageTime"]) && param_00.victim.explosiveinfo["damageTime"] == param_01) + { + if(param_00.sweapon == "none") + { + param_00.sweapon = param_00.victim.explosiveinfo["weapon"]; + } + + var_14 = param_01 + "_" + param_00.victim.explosiveinfo["damageId"]; + if(!isdefined(var_02.explosivekills[var_14])) + { + var_02.explosivekills[var_14] = 0; + } + + var_02 thread clearidshortly(var_14); + var_02.explosivekills[var_14]++; + var_13 = maps\mp\_utility::getbaseweaponname(param_00.sweapon); + if(var_13 == "javelin" || var_13 == "m79" || var_13 == "at4" || var_13 == "rpg" || var_13 == "iw5_smaw") + { + var_02 processchallenge("ch_launcher_kill"); + if(var_02.explosivekills[var_14] > 1) + { + var_02 processchallenge("pr_expert_" + var_13); + } + } + + var_15 = maps\mp\_utility::getweaponattachments(param_00.sweapon); + foreach(var_17 in var_15) + { + switch(var_17) + { + case "gp25": + case "m320": + case "gl": + if(maps\mp\_utility::isstrstart(param_00.sweapon,"alt_")) + { + var_02 processchallenge("ch_" + var_13 + "_" + var_17); + } + break; + } + } + + if(isdefined(param_00.victim.explosiveinfo["stickKill"]) && param_00.victim.explosiveinfo["stickKill"]) + { + if(isdefined(param_00.modifiers["revenge"])) + { + var_02 processchallenge("ch_overdraft"); + } + + if(isdefined(var_02.finalkill)) + { + var_02 processchallenge("ch_stickman"); + } + + if(var_02.explosivekills[var_14] > 1) + { + var_02 processchallenge("ch_grouphug"); + } + } + + if(isdefined(param_00.victim.explosiveinfo["stickFriendlyKill"]) && param_00.victim.explosiveinfo["stickFriendlyKill"]) + { + var_02 processchallenge("ch_resourceful"); + } + + if(!issubstr(var_13,"stinger")) + { + if(isdefined(level.challengeinfo["ch_marksman_" + var_13])) + { + var_02 processchallenge("ch_marksman_" + var_13); + } + + if(isdefined(level.challengeinfo["pr_marksman_" + var_13])) + { + var_02 processchallenge("pr_marksman_" + var_13); + } + } + + if(maps\mp\_utility::isstrstart(param_00.sweapon,"frag_")) + { + if(var_02.explosivekills[var_14] > 1) + { + var_02 processchallenge("ch_multifrag"); + } + + if(isdefined(param_00.modifiers["revenge"])) + { + var_02 processchallenge("ch_bangforbuck"); + } + + var_02 processchallenge("ch_grenadekill"); + if(param_00.victim.explosiveinfo["cookedKill"]) + { + var_02 processchallenge("ch_masterchef"); + } + + if(param_00.victim.explosiveinfo["suicideGrenadeKill"]) + { + var_02 processchallenge("ch_miserylovescompany"); + } + + if(param_00.victim.explosiveinfo["throwbackKill"]) + { + var_02 processchallenge("ch_hotpotato"); + } + } + else if(maps\mp\_utility::isstrstart(param_00.sweapon,"semtex_")) + { + if(isdefined(param_00.modifiers["revenge"])) + { + var_02 processchallenge("ch_timeismoney"); + } + } + else if(maps\mp\_utility::isstrstart(param_00.sweapon,"c4_")) + { + if(isdefined(param_00.modifiers["revenge"])) + { + var_02 processchallenge("ch_iamrich"); + } + + if(var_02.explosivekills[var_14] > 1) + { + var_02 processchallenge("ch_multic4"); + } + + if(param_00.victim.explosiveinfo["returnToSender"]) + { + var_02 processchallenge("ch_returntosender"); + } + + if(param_00.victim.explosiveinfo["counterKill"]) + { + var_02 processchallenge("ch_counterc4"); + } + + if(param_00.victim.explosiveinfo["bulletPenetrationKill"]) + { + var_02 processchallenge("ch_howthe"); + } + + if(param_00.victim.explosiveinfo["chainKill"]) + { + var_02 processchallenge("ch_dominos"); + } + + var_02 processchallenge("ch_c4shot"); + } + else if(maps\mp\_utility::isstrstart(param_00.sweapon,"claymore_")) + { + if(isdefined(param_00.modifiers["revenge"])) + { + var_02 processchallenge("ch_breakbank"); + } + + var_02 processchallenge("ch_claymoreshot"); + if(var_02.explosivekills[var_14] > 1) + { + var_02 processchallenge("ch_multiclaymore"); + } + + if(param_00.victim.explosiveinfo["returnToSender"]) + { + var_02 processchallenge("ch_returntosender"); + } + + if(param_00.victim.explosiveinfo["counterKill"]) + { + var_02 processchallenge("ch_counterclaymore"); + } + + if(param_00.victim.explosiveinfo["bulletPenetrationKill"]) + { + var_02 processchallenge("ch_howthe"); + } + + if(param_00.victim.explosiveinfo["chainKill"]) + { + var_02 processchallenge("ch_dominos"); + } + } + else if(maps\mp\_utility::isstrstart(param_00.sweapon,"bouncingbetty_")) + { + var_02 processchallenge("ch_bouncingbetty"); + } + else if(param_00.sweapon == "explodable_barrel") + { + } + else if(param_00.sweapon == "destructible_car") + { + var_02 processchallenge("ch_carbomb"); + } + else if(maps\mp\_utility::isstrstart(param_00.sweapon,"rpg_") || maps\mp\_utility::isstrstart(param_00.sweapon,"at4_") || maps\mp\_utility::isstrstart(param_00.sweapon,"iw5_smaw_")) + { + if(var_02.explosivekills[var_14] > 1) + { + var_02 processchallenge("ch_multirpg"); + } + } + } + } + else if(issubstr(param_00.smeansofdeath,"MOD_MELEE") && !issubstr(param_00.sweapon,"riotshield_mp")) + { + var_02 endmgstreak(); + var_02 processchallenge("ch_knifevet"); + var_02.pers["meleeKillStreak"]++; + if(var_02.pers["meleeKillStreak"] == 3) + { + var_02 processchallenge("ch_slasher"); + } + + if(var_02 isitemunlocked("specialty_quieter") && var_02 maps\mp\_utility::_hasperk("specialty_quieter")) + { + var_02 processchallenge("ch_deadsilence_pro"); + } + + var_19 = param_00.victim.anglesondeath[1]; + var_1A = var_02.anglesonkill[1]; + var_1B = angleclamp180(var_19 - var_1A); + if(abs(var_1B) < 30) + { + var_02 processchallenge("ch_backstabber"); + if(isdefined(var_02.attackers)) + { + foreach(var_1D in var_02.attackers) + { + if(var_1D != param_00.victim) + { + continue; + } + + var_02 processchallenge("ch_neverforget"); + break; + } + } + } + + if(!var_02 playerhasammo()) + { + var_02 processchallenge("ch_survivor"); + } + + if(isdefined(var_02.infected)) + { + param_00.victim processchallenge("ch_infected"); + } + + if(isdefined(param_00.victim.plague)) + { + var_02 processchallenge("ch_plague"); + } + + var_13 = maps\mp\_utility::getbaseweaponname(param_00.sweapon); + var_15 = maps\mp\_utility::getweaponattachments(param_00.sweapon); + foreach(var_17 in var_15) + { + switch(var_17) + { + case "tactical": + var_02 processchallenge("ch_" + var_13 + "_" + var_17); + if(isdefined(level.challengeinfo["ch_marksman_" + var_13])) + { + var_02 processchallenge("ch_marksman_" + var_13); + } + + if(isdefined(level.challengeinfo["pr_marksman_" + var_13])) + { + var_02 processchallenge("pr_marksman_" + var_13); + } + break; + } + } + } + else if(issubstr(param_00.smeansofdeath,"MOD_MELEE") && issubstr(param_00.sweapon,"riotshield_mp")) + { + var_02 endmgstreak(); + var_02 processchallenge("ch_shieldvet"); + var_02.pers["shieldKillStreak"]++; + if(var_02.pers["shieldKillStreak"] == 3) + { + var_02 processchallenge("ch_smasher"); + } + + if(isdefined(var_02.finalkill)) + { + var_02 processchallenge("ch_owned"); + } + + var_02 processchallenge("ch_riot_kill"); + var_19 = param_00.victim.anglesondeath[1]; + var_1A = var_02.anglesonkill[1]; + var_1B = angleclamp180(var_19 - var_1A); + if(abs(var_1B) < 30) + { + var_02 processchallenge("ch_backsmasher"); + } + + if(!var_02 playerhasammo()) + { + var_02 processchallenge("ch_survivor"); + } + } + else if(issubstr(param_00.smeansofdeath,"MOD_IMPACT")) + { + if(maps\mp\_utility::isstrstart(param_00.sweapon,"frag_")) + { + var_02 processchallenge("ch_thinkfast"); + } + else if(maps\mp\_utility::isstrstart(param_00.sweapon,"concussion_")) + { + var_02 processchallenge("ch_thinkfastconcussion"); + } + else if(maps\mp\_utility::isstrstart(param_00.sweapon,"flash_")) + { + var_02 processchallenge("ch_thinkfastflash"); + } + + if(param_00.sweapon == "throwingknife_mp") + { + if(isdefined(param_00.modifiers["revenge"])) + { + var_02 processchallenge("ch_atm"); + } + + if(param_01 < var_02.flashendtime || param_01 < var_02.concussionendtime) + { + var_02 processchallenge("ch_didyouseethat"); + } + + if(isdefined(var_02.finalkill)) + { + var_02 processchallenge("ch_unbelievable"); + } + + var_02 processchallenge("ch_carnie"); + if(isdefined(param_00.victim.attackerdata[var_02.guid].isprimary)) + { + var_02 processchallenge("ch_its_personal"); + } + } + + var_15 = maps\mp\_utility::getweaponattachments(param_00.sweapon); + var_13 = maps\mp\_utility::getbaseweaponname(param_00.sweapon); + foreach(var_17 in var_15) + { + switch(var_17) + { + case "gp25": + case "m320": + case "gl": + if(maps\mp\_utility::isstrstart(param_00.sweapon,"alt_")) + { + var_02 processchallenge("ch_" + var_13 + "_" + var_17); + if(isdefined(level.challengeinfo["ch_marksman_" + var_13])) + { + var_02 processchallenge("ch_marksman_" + var_13); + } + + if(isdefined(level.challengeinfo["pr_marksman_" + var_13])) + { + var_02 processchallenge("pr_marksman_" + var_13); + } + + var_02 processchallenge("ch_ouch"); + } + break; + } + } + } + else if(param_00.smeansofdeath == "MOD_HEAD_SHOT") + { + var_12 = maps\mp\_utility::getweaponclass(param_00.sweapon); + ch_bulletdamagecommon(param_00,var_02,param_01,var_12); + switch(var_12) + { + case "weapon_smg": + var_02 processchallenge("ch_expert_smg"); + break; + + case "weapon_lmg": + var_02 processchallenge("ch_expert_lmg"); + break; + + case "weapon_assault": + var_02 processchallenge("ch_expert_assault"); + break; + } + + if(isdefined(param_00.modifiers["revenge"])) + { + var_02 processchallenge("ch_colorofmoney"); + } + + if(maps\mp\_utility::isenvironmentweapon(param_00.sweapon)) + { + var_02 mgkill(); + } + else if(maps\mp\_utility::isstrstart(param_00.sweapon,"frag_")) + { + var_02 processchallenge("ch_thinkfast"); + } + else if(maps\mp\_utility::isstrstart(param_00.sweapon,"concussion_")) + { + var_02 processchallenge("ch_thinkfastconcussion"); + } + else if(maps\mp\_utility::isstrstart(param_00.sweapon,"flash_")) + { + var_02 processchallenge("ch_thinkfastflash"); + } + else + { + var_13 = maps\mp\_utility::getbaseweaponname(param_00.sweapon); + if(isdefined(level.challengeinfo["ch_expert_" + var_13])) + { + var_02 processchallenge("ch_expert_" + var_13); + } + + if(isdefined(level.challengeinfo["pr_expert_" + var_13])) + { + var_02 processchallenge("pr_expert_" + var_13); + } + + if(isdefined(level.challengeinfo["ch_marksman_" + var_13])) + { + var_02 processchallenge("ch_marksman_" + var_13); + } + + if(isdefined(level.challengeinfo["pr_marksman_" + var_13])) + { + var_02 processchallenge("pr_marksman_" + var_13); + } + } + } + + if((param_00.smeansofdeath == "MOD_PISTOL_BULLET" || param_00.smeansofdeath == "MOD_RIFLE_BULLET" || param_00.smeansofdeath == "MOD_HEAD_SHOT") && !maps\mp\_utility::iskillstreakweapon(param_00.sweapon) && !maps\mp\_utility::isenvironmentweapon(param_00.sweapon)) + { + var_15 = maps\mp\_utility::getweaponattachments(param_00.sweapon); + var_13 = maps\mp\_utility::getbaseweaponname(param_00.sweapon); + foreach(var_17 in var_15) + { + switch(var_17) + { + case "acogsmg": + case "acog": + var_17 = "acog"; + if(var_02 playerads()) + { + var_02 processchallenge("ch_" + var_13 + "_" + var_17); + } + break; + + case "akimbo": + var_02 processchallenge("ch_" + var_13 + "_" + var_17); + break; + + case "eotechlmg": + case "eotechsmg": + case "eotech": + var_17 = "eotech"; + if(var_02 playerads()) + { + var_02 processchallenge("ch_" + var_13 + "_" + var_17); + } + break; + + case "grip": + var_02 processchallenge("ch_" + var_13 + "_" + var_17); + break; + + case "heartbeat": + var_02 processchallenge("ch_" + var_13 + "_" + var_17); + break; + + case "hamrhybrid": + if(var_02 playerads()) + { + var_02 processchallenge("ch_" + var_13 + "_" + var_17); + } + break; + + case "hybrid": + if(var_02 playerads()) + { + var_02 processchallenge("ch_" + var_13 + "_" + var_17); + } + break; + + case "reflexlmg": + case "reflexsmg": + case "reflex": + var_17 = "reflex"; + if(var_02 playerads()) + { + var_02 processchallenge("ch_" + var_13 + "_" + var_17); + } + break; + + case "rof": + var_02 processchallenge("ch_" + var_13 + "_" + var_17); + break; + + case "shotgun": + if(maps\mp\_utility::isstrstart(param_00.sweapon,"alt_")) + { + var_02 processchallenge("ch_" + var_13 + "_" + var_17); + } + break; + + case "silencer01": + case "silencer": + case "silencer03": + case "silencer02": + var_02 processchallenge("ch_" + var_13 + "_" + var_17); + break; + + case "thermalsmg": + case "thermal": + var_17 = "thermal"; + if(var_02 playerads()) + { + var_02 processchallenge("ch_" + var_13 + "_" + var_17); + } + break; + + case "vzscope": + if(var_02 playerads()) + { + var_02 processchallenge("ch_" + var_13 + "_" + var_17); + } + break; + + case "xmags": + var_02 processchallenge("ch_" + var_13 + "_" + var_17); + break; + + default: + break; + } + } + + if(var_02 isitemunlocked("specialty_autospot") && var_02 maps\mp\_utility::_hasperk("specialty_autospot") && var_02.holdingbreath && var_02 playerads()) + { + var_02 processchallenge("ch_autospot_pro"); + } + + if(var_02 isitemunlocked("specialty_bulletaccuracy") && var_02 maps\mp\_utility::_hasperk("specialty_bulletaccuracy") && !var_02 playerads()) + { + var_02 processchallenge("ch_bulletaccuracy_pro"); + } + + if(var_02 isitemunlocked("specialty_stalker") && var_02 maps\mp\_utility::_hasperk("specialty_stalker") && var_02 playerads()) + { + var_02 processchallenge("ch_stalker_pro"); + } + + if(distancesquared(var_02.origin,param_00.victim.origin) < 65536) + { + if(var_02 isitemunlocked("specialty_quieter") && var_02 maps\mp\_utility::_hasperk("specialty_quieter")) + { + var_02 processchallenge("ch_deadsilence_pro"); + } + } + + if(var_02 isitemunlocked("specialty_fastreload") && var_02 maps\mp\_utility::_hasperk("specialty_fastreload")) + { + var_02 processchallenge("ch_sleightofhand_pro"); + } + + if(var_02 maps\mp\_utility::isbuffunlockedforweapon("specialty_marksman",var_13) && var_02 maps\mp\_utility::isbuffequippedonweapon("specialty_marksman",var_13) && var_02 maps\mp\_utility::_hasperk("specialty_marksman") && var_02 playerads()) + { + var_02 processchallenge("ch_kickstop"); + } + + if(param_00.victim.idflagstime == param_01) + { + if(param_00.victim.idflags & level.idflags_penetration) + { + if(var_02 maps\mp\_utility::isbuffunlockedforweapon("specialty_bulletpenetration",var_13) && var_02 maps\mp\_utility::isbuffequippedonweapon("specialty_bulletpenetration",var_13) && var_02 maps\mp\_utility::_hasperk("specialty_bulletpenetration")) + { + var_02 processchallenge("ch_xrayvision"); + } + } + } + + if(var_02 maps\mp\_utility::isbuffunlockedforweapon("specialty_bling",var_13) && var_02 maps\mp\_utility::isbuffequippedonweapon("specialty_bling",var_13) && var_02 maps\mp\_utility::_hasperk("specialty_bling") && var_15.size > 1) + { + var_02 processchallenge("ch_blingbling"); + } + + if(var_02 maps\mp\_utility::isbuffunlockedforweapon("specialty_sharp_focus",var_13) && var_02 maps\mp\_utility::isbuffequippedonweapon("specialty_sharp_focus",var_13) && var_02 maps\mp\_utility::_hasperk("specialty_sharp_focus") && var_02.health < var_02.maxhealth && isdefined(var_02.attackers)) + { + foreach(var_1D in var_02.attackers) + { + if(var_1D == param_00.victim) + { + var_02 processchallenge("ch_unshakeable"); + break; + } + } + } + + if(var_02 maps\mp\_utility::isbuffunlockedforweapon("specialty_holdbreathwhileads",var_13) && var_02 maps\mp\_utility::isbuffequippedonweapon("specialty_holdbreathwhileads",var_13) && var_02 maps\mp\_utility::_hasperk("specialty_holdbreathwhileads") && var_02.holdingbreath && var_02 playerads()) + { + var_02 processchallenge("ch_holditrightthere"); + } + + if(var_02 maps\mp\_utility::isbuffunlockedforweapon("specialty_reducedsway",var_13) && var_02 maps\mp\_utility::isbuffequippedonweapon("specialty_reducedsway",var_13) && var_02 maps\mp\_utility::_hasperk("specialty_reducedsway") && var_02 playerads()) + { + var_02 processchallenge("ch_swayless"); + } + + if(var_02 maps\mp\_utility::isbuffunlockedforweapon("specialty_longerrange",var_13) && var_02 maps\mp\_utility::isbuffequippedonweapon("specialty_longerrange",var_13) && var_02 maps\mp\_utility::_hasperk("specialty_longerrange")) + { + var_02 processchallenge("ch_longishshot"); + } + + if(var_02 maps\mp\_utility::isbuffunlockedforweapon("specialty_lightweight",var_13) && var_02 maps\mp\_utility::isbuffequippedonweapon("specialty_lightweight",var_13) && var_02 maps\mp\_utility::_hasperk("specialty_lightweight")) + { + var_02 processchallenge("ch_lightweight"); + } + + if(var_02 maps\mp\_utility::isbuffunlockedforweapon("specialty_moredamage",var_13) && var_02 maps\mp\_utility::isbuffequippedonweapon("specialty_moredamage",var_13) && var_02 maps\mp\_utility::_hasperk("specialty_moredamage")) + { + var_02 processchallenge("ch_moredamage"); + } + } + + if(param_00.smeansofdeath == "MOD_MELEE") + { + var_13 = maps\mp\_utility::getbaseweaponname(param_00.sweapon); + if(var_02 maps\mp\_utility::isbuffunlockedforweapon("specialty_fastermelee",var_13) && var_02 maps\mp\_utility::isbuffequippedonweapon("specialty_fastermelee",var_13) && var_02 maps\mp\_utility::_hasperk("specialty_fastermelee")) + { + var_02 processchallenge("ch_coldsteel"); + } + } + + if(var_02 isitemunlocked("specialty_quickdraw") && var_02 maps\mp\_utility::_hasperk("specialty_quickdraw") && var_02.adstime > 0 && var_02.adstime < 3) + { + var_02 processchallenge("ch_quickdraw_pro"); + } + + if(var_02 isitemunlocked("specialty_coldblooded") && var_02 maps\mp\_utility::_hasperk("specialty_coldblooded")) + { + if(level.teambased) + { + var_27 = 0; + foreach(var_29 in level.uavmodels[maps\mp\_utility::getotherteam(var_02.team)]) + { + switch(var_29.uavtype) + { + case "counter": + case "remote_mortar": + break; + } + + var_27 = 1; + break; + } + + if(var_27) + { + var_02 processchallenge("ch_coldblooded_pro"); + } + } + else + { + var_2B = 0; + foreach(var_2D in level.players) + { + if(var_2D == var_02) + { + continue; + } + + var_2B = var_2B + level.activeuavs[var_2D.guid]; + } + + if(var_2B > 0) + { + var_02 processchallenge("ch_coldblooded_pro"); + } + } + } + + if(var_02 isitemunlocked("specialty_empimmune") && var_02 maps\mp\_utility::_hasperk("specialty_empimmune")) + { + if(level.teambased) + { + var_2F = 0; + foreach(var_31 in level.uavmodels[maps\mp\_utility::getotherteam(var_02.team)]) + { + if(var_31.uavtype != "counter") + { + continue; + } + + var_2F = 1; + break; + } + + if(var_2F || var_02 maps\mp\_utility::isemped()) + { + var_02 processchallenge("ch_spygame"); + } + } + else if(var_02.isradarblocked || var_02 maps\mp\_utility::isemped()) + { + var_02 processchallenge("ch_spygame"); + } + } + + if(isdefined(param_00.victim.isplanting) && param_00.victim.isplanting) + { + var_02 processchallenge("ch_bombplanter"); + } + + if(isdefined(param_00.victim.isdefusing) && param_00.victim.isdefusing) + { + var_02 processchallenge("ch_bombdefender"); + } + + if(isdefined(param_00.victim.isbombcarrier) && param_00.victim.isbombcarrier && !isdefined(level.dd) || !level.dd) + { + var_02 processchallenge("ch_bombdown"); + } + + if(isdefined(param_00.victim.wasti) && param_00.victim.wasti) + { + var_02 processchallenge("ch_tacticaldeletion"); + } + + if(var_02 isitemunlocked("specialty_quickswap") && var_02 maps\mp\_utility::_hasperk("specialty_quickswap")) + { + if(isdefined(var_02.lastprimaryweaponswaptime) && gettime() - var_02.lastprimaryweaponswaptime < 3000) + { + var_02 processchallenge("ch_quickswap"); + } + } + + if(var_02 isitemunlocked("specialty_extraammo") && var_02 maps\mp\_utility::_hasperk("specialty_extraammo")) + { + var_02 processchallenge("ch_extraammo"); + } + + if(isexplosivedamagemod(param_00.smeansofdeath)) + { + switch(param_00.sweapon) + { + case "throwingkinfe_mp": + case "emp_grenade_mp": + case "semtex_mp": + case "flash_grenade_mp": + case "frag_grenade_mp": + case "concussion_grenade_mp": + if(var_02 isitemunlocked("specialty_fastoffhand") && var_02 maps\mp\_utility::_hasperk("specialty_fastoffhand")) + { + var_02 processchallenge("ch_fastoffhand"); + } + break; + } + } + + if(var_02 isitemunlocked("specialty_overkillpro") && var_02 maps\mp\_utility::_hasperk("specialty_overkillpro")) + { + if(var_02.secondaryweapon == param_00.sweapon) + { + var_15 = maps\mp\_utility::getweaponattachments(param_00.sweapon); + if(var_15.size > 0) + { + var_02 processchallenge("ch_secondprimary"); + } + } + } + + if(var_02 isitemunlocked("specialty_stun_resistance") && var_02 maps\mp\_utility::_hasperk("specialty_stun_resistance")) + { + if(isdefined(var_02.lastflashedtime) && gettime() - var_02.lastflashedtime < 5000) + { + var_02 processchallenge("ch_stunresistance"); + } + else if(isdefined(var_02.lastconcussedtime) && gettime() - var_02.lastconcussedtime < 5000) + { + var_02 processchallenge("ch_stunresistance"); + } + } + + if(var_02 isitemunlocked("specialty_selectivehearing") && var_02 maps\mp\_utility::_hasperk("specialty_selectivehearing")) + { + var_02 processchallenge("ch_selectivehearing"); + } + + if(var_02 isitemunlocked("specialty_fastsprintrecovery") && var_02 maps\mp\_utility::_hasperk("specialty_fastsprintrecovery")) + { + if(isdefined(var_02.lastsprintendtime) && gettime() - var_02.lastsprintendtime < 3000) + { + var_02 processchallenge("ch_fastsprintrecovery"); + } + } +} + +//Function Number: 25 +ch_bulletdamagecommon(param_00,param_01,param_02,param_03) +{ + if(!maps\mp\_utility::isenvironmentweapon(param_00.sweapon)) + { + param_01 endmgstreak(); + } + + if(maps\mp\_utility::iskillstreakweapon(param_00.sweapon)) + { + return; + } + + if(param_01.pers["lastBulletKillTime"] == param_02) + { + param_01.pers["bulletStreak"]++; + } + else + { + param_01.pers["bulletStreak"] = 1; + } + + param_01.pers["lastBulletKillTime"] = param_02; + if(!param_00.victimonground) + { + param_01 processchallenge("ch_hardlanding"); + } + + if(!param_00.attackeronground) + { + param_01.pers["midairStreak"]++; + } + + if(param_01.pers["midairStreak"] == 2) + { + param_01 processchallenge("ch_airborne"); + } + + if(param_02 < param_00.victim.flashendtime) + { + param_01 processchallenge("ch_flashbangvet"); + } + + if(param_02 < param_01.flashendtime) + { + param_01 processchallenge("ch_blindfire"); + } + + if(param_02 < param_00.victim.concussionendtime) + { + param_01 processchallenge("ch_concussionvet"); + } + + if(param_02 < param_01.concussionendtime) + { + param_01 processchallenge("ch_slowbutsure"); + } + + if(param_01.pers["bulletStreak"] == 2) + { + if(isdefined(param_00.modifiers["headshot"])) + { + foreach(var_05 in param_01.killsthislife) + { + if(var_05.time != param_02) + { + continue; + } + + if(!isdefined(param_00.modifiers["headshot"])) + { + continue; + } + + param_01 processchallenge("ch_allpro"); + } + } + + if(param_03 == "weapon_sniper") + { + param_01 processchallenge("ch_collateraldamage"); + } + } + + if(param_03 == "weapon_pistol") + { + if(isdefined(param_00.victim.attackerdata) && isdefined(param_00.victim.attackerdata[param_01.guid])) + { + if(isdefined(param_00.victim.attackerdata[param_01.guid].isprimary)) + { + param_01 processchallenge("ch_fastswap"); + } + } + } + + if(!isdefined(param_01.infinalstand) || !param_01.infinalstand) + { + if(param_00.attackerstance == "crouch") + { + param_01 processchallenge("ch_crouchshot"); + } + else if(param_00.attackerstance == "prone") + { + param_01 processchallenge("ch_proneshot"); + if(param_03 == "weapon_sniper") + { + param_01 processchallenge("ch_invisible"); + } + } + } + + if(param_03 == "weapon_sniper") + { + if(isdefined(param_00.modifiers["oneshotkill"])) + { + param_01 processchallenge("ch_ghillie"); + } + } + + if(issubstr(param_00.sweapon,"silencer")) + { + param_01 processchallenge("ch_stealthvet"); + } +} + +//Function Number: 26 +ch_roundplayed(param_00) +{ + var_01 = param_00.player; + if(var_01.wasaliveatmatchstart) + { + var_02 = var_01.pers["deaths"]; + var_03 = var_01.pers["kills"]; + var_04 = 1000000; + if(var_02 > 0) + { + var_04 = var_03 / var_02; + } + + if(var_04 >= 5 && var_03 >= 5) + { + var_01 processchallenge("ch_starplayer"); + } + + if(var_02 == 0 && maps\mp\_utility::gettimepassed() > 300000) + { + var_01 processchallenge("ch_flawless"); + } + + if(level.placement["all"].size < 3) + { + return; + } + + if(var_01.score > 0) + { + switch(level.gametype) + { + case "dm": + if(param_00.place < 3) + { + var_01 processchallenge("ch_victor_dm"); + var_01 processchallenge("ch_ffa_win"); + } + + var_01 processchallenge("ch_ffa_participate"); + break; + + case "war": + if(param_00.winner) + { + var_01 processchallenge("ch_war_win"); + } + + var_01 processchallenge("ch_war_participate"); + break; + + case "kc": + if(param_00.winner) + { + var_01 processchallenge("ch_kc_win"); + } + + var_01 processchallenge("ch_kc_participate"); + break; + + case "dd": + if(param_00.winner) + { + var_01 processchallenge("ch_dd_win"); + } + + var_01 processchallenge("ch_dd_participate"); + break; + + case "koth": + if(param_00.winner) + { + var_01 processchallenge("ch_koth_win"); + } + + var_01 processchallenge("ch_koth_participate"); + break; + + case "sab": + if(param_00.winner) + { + var_01 processchallenge("ch_sab_win"); + } + + var_01 processchallenge("ch_sab_participate"); + break; + + case "sd": + if(param_00.winner) + { + var_01 processchallenge("ch_sd_win"); + } + + var_01 processchallenge("ch_sd_participate"); + break; + + case "dom": + if(param_00.winner) + { + var_01 processchallenge("ch_dom_win"); + } + + var_01 processchallenge("ch_dom_participate"); + break; + + case "ctf": + if(param_00.winner) + { + var_01 processchallenge("ch_ctf_win"); + } + + var_01 processchallenge("ch_ctf_participate"); + break; + + case "tdef": + if(param_00.winner) + { + var_01 processchallenge("ch_tdef_win"); + } + + var_01 processchallenge("ch_tdef_participate"); + break; + } + } + } +} + +//Function Number: 27 +ch_roundwin(param_00) +{ + if(!param_00.winner) + { + return; + } + + var_01 = param_00.player; + if(var_01.wasaliveatmatchstart) + { + switch(level.gametype) + { + case "war": + if(level.hardcoremode) + { + var_01 processchallenge("ch_teamplayer_hc"); + if(param_00.place == 0) + { + var_01 processchallenge("ch_mvp_thc"); + } + } + else + { + var_01 processchallenge("ch_teamplayer"); + if(param_00.place == 0) + { + var_01 processchallenge("ch_mvp_tdm"); + } + } + break; + + case "sab": + var_01 processchallenge("ch_victor_sab"); + break; + + case "sd": + var_01 processchallenge("ch_victor_sd"); + break; + + case "hc": + case "ctf": + case "dom": + case "koth": + case "dm": + break; + + default: + break; + } + } +} + +//Function Number: 28 +playerdamaged(param_00,param_01,param_02,param_03,param_04,param_05) +{ + self endon("disconnect"); + if(isdefined(param_01)) + { + param_01 endon("disconnect"); + } + + wait 0.05; + maps\mp\_utility::waittillslowprocessallowed(); + var_06 = spawnstruct(); + var_06.victim = self; + var_06.einflictor = param_00; + var_06.attacker = param_01; + var_06.idamage = param_02; + var_06.smeansofdeath = param_03; + var_06.sweapon = param_04; + var_06.shitloc = param_05; + var_06.victimonground = var_06.victim isonground(); + if(isplayer(param_01)) + { + var_06.attackerinlaststand = isdefined(var_06.attacker.laststand); + var_06.attackeronground = var_06.attacker isonground(); + var_06.attackerstance = var_06.attacker getstance(); + } + else + { + var_06.attackerinlaststand = 0; + var_06.attackeronground = 0; + var_06.attackerstance = "stand"; + } + + domissioncallback("playerDamaged",var_06); +} + +//Function Number: 29 +playerkilled(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07) +{ + self.anglesondeath = self getplayerangles(); + if(isdefined(param_01)) + { + param_01.anglesonkill = param_01 getplayerangles(); + } + + self endon("disconnect"); + var_08 = spawnstruct(); + var_08.victim = self; + var_08.einflictor = param_00; + var_08.attacker = param_01; + var_08.idamage = param_02; + var_08.smeansofdeath = param_03; + var_08.sweapon = param_04; + var_08.sprimaryweapon = param_05; + var_08.shitloc = param_06; + var_08.time = gettime(); + var_08.modifiers = param_07; + var_08.victimonground = var_08.victim isonground(); + if(isplayer(param_01)) + { + var_08.attackerinlaststand = isdefined(var_08.attacker.laststand); + var_08.attackeronground = var_08.attacker isonground(); + var_08.attackerstance = var_08.attacker getstance(); + } + else + { + var_08.attackerinlaststand = 0; + var_08.attackeronground = 0; + var_08.attackerstance = "stand"; + } + + waitandprocessplayerkilledcallback(var_08); + if(isdefined(param_01) && maps\mp\_utility::isreallyalive(param_01)) + { + param_01.killsthislife[param_01.killsthislife.size] = var_08; + } + + var_08.attacker notify("playerKilledChallengesProcessed"); +} + +//Function Number: 30 +vehiclekilled(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + var_07 = spawnstruct(); + var_07.vehicle = param_01; + var_07.victim = param_00; + var_07.einflictor = param_02; + var_07.attacker = param_03; + var_07.idamage = param_04; + var_07.smeansofdeath = param_05; + var_07.sweapon = param_06; + var_07.time = gettime(); + if(isdefined(param_03) && isplayer(param_03) && !isdefined(param_00) || param_03 != param_00 && !maps\mp\_utility::iskillstreakweapon(param_06)) + { + param_03 maps\mp\killstreaks\_killstreaks::giveadrenaline("vehicleDestroyed"); + switch(param_06) + { + case "stinger_mp": + if(isdefined(param_01.helitype) && param_01.helitype == "flares" || param_01.helitype == "littlebird" || param_01.helitype == "helicopter" || param_01.helitype == "airdrop") + { + param_03 processchallenge("pr_expert_stinger"); + } + + param_03 processchallenge("ch_marksman_stinger"); + param_03 processchallenge("pr_marksman_stinger"); + break; + + default: + var_08 = maps\mp\_utility::getbaseweaponname(param_06); + if(isdefined(level.challengeinfo["ch_marksman_" + var_08])) + { + param_03 processchallenge("ch_marksman_" + var_08); + } + + if(isdefined(level.challengeinfo["pr_marksman_" + var_08])) + { + param_03 processchallenge("pr_marksman_" + var_08); + } + break; + } + + switch(param_06) + { + case "javelin_mp": + case "iw5_smaw_mp": + case "stinger_mp": + if(param_03 isitemunlocked("specialty_fasterlockon") && param_03 maps\mp\_utility::_hasperk("specialty_fasterlockon")) + { + param_03 processchallenge("ch_fasterlockon"); + } + break; + } + + if(param_03 isitemunlocked("specialty_blindeye") && param_03 maps\mp\_utility::_hasperk("specialty_blindeye")) + { + var_09 = 1; + if(isdefined(param_03.scramproxyperk) && param_03.scramproxyperk) + { + var_09 = 0; + } + + if(isdefined(param_03.spawnperk) && param_03.spawnperk) + { + var_09 = 0; + } + + if(var_09) + { + param_03 processchallenge("ch_blindeye_pro"); + return; + } + } + } +} + +//Function Number: 31 +waitandprocessplayerkilledcallback(param_00) +{ + if(isdefined(param_00.attacker)) + { + param_00.attacker endon("disconnect"); + } + + self.processingkilledchallenges = 1; + wait 0.05; + maps\mp\_utility::waittillslowprocessallowed(); + domissioncallback("playerKilled",param_00); + self.processingkilledchallenges = undefined; +} + +//Function Number: 32 +playerassist() +{ + var_00 = spawnstruct(); + var_00.player = self; + domissioncallback("playerAssist",var_00); +} + +//Function Number: 33 +usehardpoint(param_00) +{ + self endon("disconnect"); + wait 0.05; + maps\mp\_utility::waittillslowprocessallowed(); + var_01 = spawnstruct(); + var_01.player = self; + var_01.hardpointtype = param_00; + domissioncallback("playerHardpoint",var_01); +} + +//Function Number: 34 +roundbegin() +{ + domissioncallback("roundBegin"); +} + +//Function Number: 35 +roundend(param_00) +{ + var_01 = spawnstruct(); + if(level.teambased) + { + var_02 = "allies"; + for(var_03 = 0;var_03 < level.placement[var_02].size;var_03++) + { + var_01.player = level.placement[var_02][var_03]; + var_01.winner = var_02 == param_00; + var_01.place = var_03; + domissioncallback("roundEnd",var_01); + } + + var_02 = "axis"; + for(var_03 = 0;var_03 < level.placement[var_02].size;var_03++) + { + var_01.player = level.placement[var_02][var_03]; + var_01.winner = var_02 == param_00; + var_01.place = var_03; + domissioncallback("roundEnd",var_01); + } + + return; + } + + for(var_03 = 0;var_03 < level.placement["all"].size;var_03++) + { + var_01.player = level.placement["all"][var_03]; + var_01.winner = isdefined(param_00) && isplayer(param_00) && var_01.player == param_00; + var_01.place = var_03; + domissioncallback("roundEnd",var_01); + } +} + +//Function Number: 36 +domissioncallback(param_00,param_01) +{ + if(!mayprocesschallenges()) + { + return; + } + + if(getdvarint("disable_challenges") > 0) + { + return; + } + + if(!isdefined(level.missioncallbacks[param_00])) + { + return; + } + + if(isdefined(param_01)) + { + for(var_02 = 0;var_02 < level.missioncallbacks[param_00].size;var_02++) + { + thread [[ level.missioncallbacks[param_00][var_02] ]](param_01); + } + + return; + } + + for(var_02 = 0;var_02 < level.missioncallbacks[param_00].size;var_02++) + { + thread [[ level.missioncallbacks[param_00][var_02] ]](); + } +} + +//Function Number: 37 +monitorsprintdistance() +{ + level endon("game_ended"); + self endon("spawned_player"); + self endon("death"); + self endon("disconnect"); + for(;;) + { + self waittill("sprint_begin"); + self.sprintdistthissprint = 0; + thread monitorsprinttime(); + monitorsinglesprintdistance(); + if(self isitemunlocked("specialty_longersprint") && maps\mp\_utility::_hasperk("specialty_longersprint")) + { + processchallenge("ch_longersprint_pro",int(self.sprintdistthissprint / 12)); + } + } +} + +//Function Number: 38 +monitorsinglesprintdistance() +{ + level endon("game_ended"); + self endon("spawned_player"); + self endon("death"); + self endon("disconnect"); + self endon("sprint_end"); + var_00 = self.origin; + for(;;) + { + wait 0.1; + self.sprintdistthissprint = self.sprintdistthissprint + distance(self.origin,var_00); + var_00 = self.origin; + } +} + +//Function Number: 39 +monitorsprinttime() +{ + level endon("game_ended"); + self endon("spawned_player"); + self endon("death"); + self endon("disconnect"); + var_00 = gettime(); + self waittill("sprint_end"); + var_01 = int(gettime() - var_00); + maps\mp\_utility::incplayerstat("sprinttime",var_01); + self.lastsprintendtime = gettime(); +} + +//Function Number: 40 +monitorfalldistance() +{ + self endon("disconnect"); + self.pers["midairStreak"] = 0; + for(;;) + { + if(!isalive(self)) + { + self waittill("spawned_player"); + continue; + } + + if(!self isonground()) + { + self.pers["midairStreak"] = 0; + var_00 = self.origin[2]; + while(!self isonground() && isalive(self)) + { + if(self.origin[2] > var_00) + { + var_00 = self.origin[2]; + } + + wait 0.05; + } + + self.pers["midairStreak"] = 0; + var_01 = var_00 - self.origin[2]; + if(var_01 < 0) + { + var_01 = 0; + } + + if(var_01 / 12 > 15 && isalive(self)) + { + processchallenge("ch_basejump"); + } + + if(var_01 / 12 > 30 && !isalive(self)) + { + processchallenge("ch_goodbye"); + } + } + + wait 0.05; + } +} + +//Function Number: 41 +lastmansd() +{ + if(!mayprocesschallenges()) + { + return; + } + + if(!self.wasaliveatmatchstart) + { + return; + } + + if(self.teamkillsthisround > 0) + { + return; + } + + processchallenge("ch_lastmanstanding"); +} + +//Function Number: 42 +monitorbombuse() +{ + self endon("disconnect"); + for(;;) + { + var_00 = common_scripts\utility::waittill_any_return("bomb_planted","bomb_defused"); + if(!isdefined(var_00)) + { + continue; + } + + if(var_00 == "bomb_planted") + { + processchallenge("ch_saboteur"); + continue; + } + + if(var_00 == "bomb_defused") + { + processchallenge("ch_hero"); + } + } +} + +//Function Number: 43 +monitorlivetime() +{ + for(;;) + { + self waittill("spawned_player"); + thread survivalistchallenge(); + } +} + +//Function Number: 44 +survivalistchallenge() +{ + self endon("death"); + self endon("disconnect"); + wait 300; + if(isdefined(self)) + { + processchallenge("ch_survivalist"); + } +} + +//Function Number: 45 +monitorstreaks() +{ + self endon("disconnect"); + self.pers["airstrikeStreak"] = 0; + self.pers["meleeKillStreak"] = 0; + self.pers["shieldKillStreak"] = 0; + thread monitormisc(); + for(;;) + { + self waittill("death"); + self.pers["airstrikeStreak"] = 0; + self.pers["meleeKillStreak"] = 0; + self.pers["shieldKillStreak"] = 0; + } +} + +//Function Number: 46 +monitormisc() +{ + thread monitormiscsingle("destroyed_explosive"); + thread monitormiscsingle("begin_airstrike"); + thread monitormiscsingle("destroyed_car"); + thread monitormiscsingle("destroyed_helicopter"); + thread monitormiscsingle("used_uav"); + thread monitormiscsingle("used_double_uav"); + thread monitormiscsingle("used_triple_uav"); + thread monitormiscsingle("used_counter_uav"); + thread monitormiscsingle("used_directional_uav"); + thread monitormiscsingle("used_airdrop"); + thread monitormiscsingle("used_emp"); + thread monitormiscsingle("used_nuke"); + thread monitormiscsingle("crushed_enemy"); + self waittill("disconnect"); + self notify("destroyed_explosive"); + self notify("begin_airstrike"); + self notify("destroyed_car"); + self notify("destroyed_helicopter"); +} + +//Function Number: 47 +monitormiscsingle(param_00) +{ + for(;;) + { + self waittill(param_00); + if(!isdefined(self)) + { + return; + } + + monitormisccallback(param_00); + } +} + +//Function Number: 48 +monitormisccallback(param_00) +{ + switch(param_00) + { + case "begin_airstrike": + self.pers["airstrikeStreak"] = 0; + break; + + case "destroyed_explosive": + if(self isitemunlocked("specialty_detectexplosive") && maps\mp\_utility::_hasperk("specialty_detectexplosive")) + { + processchallenge("ch_detectexplosives_pro"); + } + + processchallenge("ch_backdraft"); + break; + + case "destroyed_helicopter": + processchallenge("ch_flyswatter"); + break; + + case "destroyed_car": + processchallenge("ch_vandalism"); + break; + + case "crushed_enemy": + processchallenge("ch_heads_up"); + if(isdefined(self.finalkill)) + { + processchallenge("ch_droppincrates"); + } + break; + } +} + +//Function Number: 49 +healthregenerated() +{ + if(!isalive(self)) + { + return; + } + + if(!mayprocesschallenges()) + { + return; + } + + if(!maps\mp\_utility::rankingenabled()) + { + return; + } + + thread resetbrinkofdeathkillstreakshortly(); + self notify("healed"); + if(isdefined(self.lastdamagewasfromenemy) && self.lastdamagewasfromenemy) + { + self.healthregenerationstreak++; + if(self.healthregenerationstreak >= 5) + { + processchallenge("ch_invincible"); + } + } +} + +//Function Number: 50 +resetbrinkofdeathkillstreakshortly() +{ + self endon("disconnect"); + self endon("death"); + self endon("damage"); + wait 1; + self.brinkofdeathkillstreak = 0; +} + +//Function Number: 51 +playerspawned() +{ + self.brinkofdeathkillstreak = 0; + self.healthregenerationstreak = 0; + self.pers["MGStreak"] = 0; +} + +//Function Number: 52 +playerdied() +{ + self.brinkofdeathkillstreak = 0; + self.healthregenerationstreak = 0; + self.pers["MGStreak"] = 0; +} + +//Function Number: 53 +isatbrinkofdeath() +{ + var_00 = self.health / self.maxhealth; + return var_00 <= level.healthoverlaycutoff; +} + +//Function Number: 54 +processchallenge(param_00,param_01,param_02) +{ + if(!mayprocesschallenges()) + { + return; + } + + if(level.players.size < 2) + { + return; + } + + if(!maps\mp\_utility::rankingenabled()) + { + return; + } + + if(!isdefined(param_01)) + { + param_01 = 1; + } + + if(!issubstr(param_00,"_daily") && !issubstr(param_00,"_weekly") && self isitemunlocked("tier_90")) + { + thread processchallenge(param_00 + "_daily",param_01,param_02); + thread processchallenge(param_00 + "_weekly",param_01,param_02); + } + + var_03 = getchallengestatus(param_00); + if(var_03 == 0) + { + return; + } + + if(var_03 > level.challengeinfo[param_00]["targetval"].size) + { + return; + } + + var_04 = maps\mp\gametypes\_hud_util::ch_getprogress(param_00); + if(isdefined(param_02) && param_02) + { + var_05 = param_01; + } + else + { + var_05 = var_05 + param_02; + } + + var_06 = level.challengeinfo[param_00]["targetval"][var_03]; + if(var_05 >= var_06) + { + var_07 = 1; + var_05 = var_06; + } + else + { + var_07 = 0; + } + + if(var_04 < var_05) + { + maps\mp\gametypes\_hud_util::ch_setprogress(param_00,var_05); + } + + if(var_07) + { + thread giverankxpafterwait(param_00,var_03); + maps\mp\_matchdata::logchallenge(param_00,var_03); + if(!isdefined(self.challengescompleted)) + { + self.challengescompleted = []; + } + + var_08 = 0; + foreach(var_0A in self.challengescompleted) + { + if(var_0A == param_00) + { + var_08 = 1; + } + } + + if(!var_08) + { + self.challengescompleted[self.challengescompleted.size] = param_00; + } + + var_03++; + maps\mp\gametypes\_hud_util::ch_setstate(param_00,var_03); + self.challengedata[param_00] = var_03; + thread maps\mp\gametypes\_hud_message::challengesplashnotify(param_00); + } +} + +//Function Number: 55 +giverankxpafterwait(param_00,param_01) +{ + self endon("disconnect"); + wait 0.25; + maps\mp\gametypes\_rank::giverankxp("challenge",level.challengeinfo[param_00]["reward"][param_01],undefined,undefined,param_00); +} + +//Function Number: 56 +getmarksmanunlockattachment(param_00,param_01) +{ + return tablelookup("mp/unlockTable.csv",0,param_00,4 + param_01); +} + +//Function Number: 57 +getweaponattachment(param_00,param_01) +{ + return tablelookup("mp/statsTable.csv",4,param_00,11 + param_01); +} + +//Function Number: 58 +masterychallengeprocess(param_00) +{ + if(tablelookup("mp/allChallengesTable.csv",0,"ch_" + param_00 + "_mastery",1) == "") + { + return; + } + + var_01 = 0; + for(var_02 = 0;var_02 <= 10;var_02++) + { + var_03 = getweaponattachment(param_00,var_02); + if(var_03 == "") + { + continue; + } + + if(maps\mp\gametypes\_class::isattachmentunlocked(param_00,var_03)) + { + var_01++; + } + } + + processchallenge("ch_" + param_00 + "_mastery",var_01,1); +} + +//Function Number: 59 +updatechallenges() +{ + self.challengedata = []; + self endon("disconnect"); + if(!mayprocesschallenges()) + { + return; + } + + if(!self isitemunlocked("challenges")) + { + return; + } + + var_00 = 0; + foreach(var_0D, var_02 in level.challengeinfo) + { + var_00++; + if(var_00 % 40 == 0) + { + wait 0.05; + } + + self.challengedata[var_0D] = 0; + if(isweaponchallenge(var_0D)) + { + var_03 = getweaponfromchallenge(var_0D); + if(!self isitemunlocked(var_03)) + { + continue; + } + + var_04 = getweaponattachmentfromchallenge(var_0D); + if(isdefined(var_04)) + { + if(!maps\mp\gametypes\_class::isattachmentunlocked(var_03,var_04)) + { + continue; + } + } + } + else if(iskillstreakchallenge(var_0D)) + { + if(!self isitemunlocked(var_0D)) + { + continue; + } + + var_05 = getkillstreakfromchallenge(var_0D); + if(isdefined(var_05)) + { + if(!self getplayerdata("killstreakUnlocked",var_05)) + { + continue; + } + } + } + else + { + var_06 = self isitemunlocked(var_0D); + if(var_06 == 0) + { + continue; + } + else if(var_06 == 2) + { + var_07 = getchallengefilter(var_0D); + if(var_07 != "") + { + var_08 = getchallengetable(var_07); + if(var_08 != "") + { + var_09 = gettierfromtable(var_08,var_0D); + if(var_09 != "") + { + if(!self isitemunlocked(var_09)) + { + continue; + } + } + } + } + } + } + + if(isdefined(var_02["requirement"]) && !self isitemunlocked(var_02["requirement"])) + { + continue; + } + + if(var_02["type"] == 1) + { + var_0A = maps\mp\gametypes\_hud_util::getdailyref(var_0D); + if(var_0A == "") + { + continue; + } + } + else if(var_02["type"] == 2) + { + var_0B = maps\mp\gametypes\_hud_util::getweeklyref(var_0D); + if(var_0B == "") + { + continue; + } + } + + var_0C = maps\mp\gametypes\_hud_util::ch_getstate(var_0D); + if(var_0C == 0) + { + maps\mp\gametypes\_hud_util::ch_setstate(var_0D,1); + var_0C = 1; + } + + self.challengedata[var_0D] = var_0C; + } +} + +//Function Number: 60 +isinunlocktable(param_00) +{ + return tablelookup("mp/unlockTable.csv",0,param_00,0) != ""; +} + +//Function Number: 61 +getchallengefilter(param_00) +{ + return tablelookup("mp/allChallengesTable.csv",0,param_00,5); +} + +//Function Number: 62 +getchallengetable(param_00) +{ + return tablelookup("mp/challengeTable.csv",8,param_00,4); +} + +//Function Number: 63 +gettierfromtable(param_00,param_01) +{ + return tablelookup(param_00,0,param_01,1); +} + +//Function Number: 64 +isweaponchallenge(param_00) +{ + if(!isdefined(param_00)) + { + return 0; + } + + var_01 = getchallengefilter(param_00); + if(isdefined(var_01) && var_01 == "riotshield") + { + return 1; + } + + var_02 = strtok(param_00,"_"); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + var_04 = var_02[var_03]; + if(var_04 == "iw5") + { + var_04 = var_02[var_03] + "_" + var_02[var_03 + 1]; + } + + if(maps\mp\gametypes\_class::isvalidprimary(var_04,0) || maps\mp\gametypes\_class::isvalidsecondary(var_04,"specialty_null","specialty_null",0)) + { + return 1; + } + } + + return 0; +} + +//Function Number: 65 +getweaponfromchallenge(param_00) +{ + var_01 = "ch_"; + if(issubstr(param_00,"ch_marksman_")) + { + var_01 = "ch_marksman_"; + } + else if(issubstr(param_00,"ch_expert_")) + { + var_01 = "ch_expert_"; + } + else if(issubstr(param_00,"pr_marksman_")) + { + var_01 = "pr_marksman_"; + } + else if(issubstr(param_00,"pr_expert_")) + { + var_01 = "pr_expert_"; + } + + var_02 = getsubstr(param_00,var_01.size,param_00.size); + var_03 = strtok(var_02,"_"); + var_02 = undefined; + if(var_03[0] == "iw5") + { + var_02 = var_03[0] + "_" + var_03[1]; + } + else + { + var_02 = var_03[0]; + } + + return var_02; +} + +//Function Number: 66 +getweaponattachmentfromchallenge(param_00) +{ + var_01 = "ch_"; + if(issubstr(param_00,"ch_marksman_")) + { + var_01 = "ch_marksman_"; + } + else if(issubstr(param_00,"ch_expert_")) + { + var_01 = "ch_expert_"; + } + else if(issubstr(param_00,"pr_marksman_")) + { + var_01 = "pr_marksman_"; + } + else if(issubstr(param_00,"pr_expert_")) + { + var_01 = "pr_expert_"; + } + + var_02 = getsubstr(param_00,var_01.size,param_00.size); + var_03 = strtok(var_02,"_"); + var_04 = undefined; + if(isdefined(var_03[2]) && maps\mp\_utility::isattachment(var_03[2])) + { + var_04 = var_03[2]; + } + + return var_04; +} + +//Function Number: 67 +iskillstreakchallenge(param_00) +{ + if(!isdefined(param_00)) + { + return 0; + } + + var_01 = getchallengefilter(param_00); + if(isdefined(var_01) && var_01 == "killstreaks_assault" || var_01 == "killstreaks_support") + { + return 1; + } + + return 0; +} + +//Function Number: 68 +getkillstreakfromchallenge(param_00) +{ + var_01 = "ch_"; + var_02 = getsubstr(param_00,var_01.size,param_00.size); + if(var_02 == "assault_streaks" || var_02 == "support_streaks") + { + var_02 = undefined; + } + + return var_02; +} + +//Function Number: 69 +challenge_targetval(param_00,param_01,param_02) +{ + var_03 = tablelookup(param_00,0,param_01,6 + param_02 - 1 * 2); + return int(var_03); +} + +//Function Number: 70 +challenge_rewardval(param_00,param_01,param_02) +{ + var_03 = tablelookup(param_00,0,param_01,7 + param_02 - 1 * 2); + return int(var_03); +} + +//Function Number: 71 +buildchallengetableinfo(param_00,param_01) +{ + var_02 = 0; + var_03 = 0; + var_04 = tablelookupbyrow(param_00,0,0); + for(var_02 = 1;var_04 != "";var_02++) + { + level.challengeinfo[var_04] = []; + level.challengeinfo[var_04]["type"] = param_01; + level.challengeinfo[var_04]["targetval"] = []; + level.challengeinfo[var_04]["reward"] = []; + for(var_05 = 1;var_05 < 11;var_05++) + { + var_06 = challenge_targetval(param_00,var_04,var_05); + var_07 = challenge_rewardval(param_00,var_04,var_05); + if(var_06 == 0) + { + break; + } + + level.challengeinfo[var_04]["targetval"][var_05] = var_06; + level.challengeinfo[var_04]["reward"][var_05] = var_07; + var_03 = var_03 + var_07; + } + + var_04 = tablelookupbyrow(param_00,var_02,0); + } + + return int(var_03); +} + +//Function Number: 72 +buildchallegeinfo() +{ + level.challengeinfo = []; + var_00 = 0; + var_00 = var_00 + buildchallengetableinfo("mp/allChallengesTable.csv",0); + var_00 = var_00 + buildchallengetableinfo("mp/dailychallengesTable.csv",1); + var_00 = var_00 + buildchallengetableinfo("mp/weeklychallengesTable.csv",2); + var_01 = tablelookupbyrow("mp/challengeTable.csv",0,4); + for(var_02 = 1;var_01 != "";var_02++) + { + var_03 = tablelookupbyrow(var_01,0,0); + for(var_04 = 1;var_03 != "";var_04++) + { + var_05 = tablelookup(var_01,0,var_03,1); + if(var_05 != "") + { + level.challengeinfo[var_03]["requirement"] = var_05; + } + + var_03 = tablelookupbyrow(var_01,var_04,0); + } + + var_01 = tablelookupbyrow("mp/challengeTable.csv",var_02,4); + } +} + +//Function Number: 73 +monitorprocesschallenge() +{ + self endon("disconnect"); + level endon("game_end"); + for(;;) + { + if(!mayprocesschallenges()) + { + return; + } + + self waittill("process",var_00); + processchallenge(var_00); + } +} + +//Function Number: 74 +monitorkillstreakprogress() +{ + self endon("disconnect"); + level endon("game_end"); + for(;;) + { + self waittill("got_killstreak",var_00); + if(!isdefined(var_00)) + { + continue; + } + + switch(var_00) + { + case 3: + maps\mp\killstreaks\_killstreaks::giveadrenaline("3streak"); + break; + + case 4: + maps\mp\killstreaks\_killstreaks::giveadrenaline("4streak"); + break; + + case 5: + maps\mp\killstreaks\_killstreaks::giveadrenaline("5streak"); + break; + + case 6: + maps\mp\killstreaks\_killstreaks::giveadrenaline("6streak"); + break; + + case 7: + maps\mp\killstreaks\_killstreaks::giveadrenaline("7streak"); + break; + + case 8: + maps\mp\killstreaks\_killstreaks::giveadrenaline("8streak"); + break; + + case 9: + maps\mp\killstreaks\_killstreaks::giveadrenaline("9streak"); + break; + + case 10: + maps\mp\killstreaks\_killstreaks::giveadrenaline("10streak"); + break; + + default: + break; + } + + if(var_00 == 10 && self.killstreaks.size == 0) + { + processchallenge("ch_theloner"); + continue; + } + + if(var_00 == 9) + { + if(isdefined(self.killstreaks[7]) && isdefined(self.killstreaks[8]) && isdefined(self.killstreaks[9])) + { + processchallenge("ch_6fears7"); + } + } + } +} + +//Function Number: 75 +monitorkilledkillstreak() +{ + self endon("disconnect"); + level endon("game_end"); + for(;;) + { + self waittill("destroyed_killstreak",var_00); + if(self isitemunlocked("specialty_blindeye") && maps\mp\_utility::_hasperk("specialty_blindeye")) + { + processchallenge("ch_blindeye_pro"); + } + + if(isdefined(var_00) && var_00 == "stinger_mp") + { + processchallenge("ch_marksman_stinger"); + processchallenge("pr_marksman_stinger"); + } + } +} + +//Function Number: 76 +genericchallenge(param_00,param_01) +{ + switch(param_00) + { + case "hijacker_airdrop": + processchallenge("ch_smoothcriminal"); + break; + + case "hijacker_airdrop_mega": + processchallenge("ch_poolshark"); + break; + + case "wargasm": + processchallenge("ch_wargasm"); + break; + + case "weapon_assault": + processchallenge("ch_surgical_assault"); + break; + + case "weapon_smg": + processchallenge("ch_surgical_smg"); + break; + + case "weapon_lmg": + processchallenge("ch_surgical_lmg"); + break; + + case "weapon_sniper": + processchallenge("ch_surgical_sniper"); + break; + + case "shield_damage": + if(!maps\mp\_utility::isjuggernaut()) + { + processchallenge("ch_shield_damage",param_01); + } + break; + + case "shield_bullet_hits": + if(!maps\mp\_utility::isjuggernaut()) + { + processchallenge("ch_shield_bullet",param_01); + } + break; + + case "shield_explosive_hits": + if(!maps\mp\_utility::isjuggernaut()) + { + processchallenge("ch_shield_explosive",param_01); + } + break; + } +} + +//Function Number: 77 +playerhasammo() +{ + var_00 = self getweaponslistprimaries(); + foreach(var_02 in var_00) + { + if(self getweaponammoclip(var_02)) + { + return 1; + } + + var_03 = weaponaltweaponname(var_02); + if(!isdefined(var_03) || var_03 == "none") + { + continue; + } + + if(self getweaponammoclip(var_03)) + { + return 1; + } + } + + return 0; +} + +//Function Number: 78 +monitoradstime() +{ + self endon("disconnect"); + self.adstime = 0; + for(;;) + { + if(self playerads() == 1) + { + self.adstime = self.adstime + 0.05; + } + else + { + self.adstime = 0; + } + + wait 0.05; + } +} + +//Function Number: 79 +monitorholdbreath() +{ + self endon("disconnect"); + self.holdingbreath = 0; + for(;;) + { + self waittill("hold_breath"); + self.holdingbreath = 1; + self waittill("release_breath"); + self.holdingbreath = 0; + } +} + +//Function Number: 80 +monitormantle() +{ + self endon("disconnect"); + self.mantling = 0; + for(;;) + { + self waittill("jumped"); + var_00 = self getcurrentweapon(); + common_scripts\utility::waittill_notify_or_timeout("weapon_change",1); + var_01 = self getcurrentweapon(); + if(var_01 == "none") + { + self.mantling = 1; + } + else + { + self.mantling = 0; + } + + if(self.mantling) + { + if(self isitemunlocked("specialty_fastmantle") && maps\mp\_utility::_hasperk("specialty_fastmantle")) + { + processchallenge("ch_fastmantle"); + } + + common_scripts\utility::waittill_notify_or_timeout("weapon_change",1); + var_01 = self getcurrentweapon(); + if(var_01 == var_00) + { + self.mantling = 0; + } + } + } +} + +//Function Number: 81 +monitorweaponswap() +{ + self endon("disconnect"); + var_00 = self getcurrentweapon(); + for(;;) + { + self waittill("weapon_change",var_01); + if(var_01 == "none") + { + continue; + } + + if(var_01 == var_00) + { + continue; + } + + if(maps\mp\_utility::iskillstreakweapon(var_01) || maps\mp\_utility::isdeathstreakweapon(var_01)) + { + continue; + } + + if(var_01 == "briefcase_bomb_mp" || var_01 == "briefcase_bomb_defuse_mp") + { + continue; + } + + var_02 = weaponinventorytype(var_01); + if(var_02 != "primary") + { + continue; + } + + self.lastprimaryweaponswaptime = gettime(); + } +} + +//Function Number: 82 +monitorflashbang() +{ + self endon("disconnect"); + for(;;) + { + self waittill("flashbang",var_00,var_01,var_02,var_03); + if(self == var_03) + { + continue; + } + + self.lastflashedtime = gettime(); + } +} + +//Function Number: 83 +monitorconcussion() +{ + self endon("disconnect"); + for(;;) + { + self waittill("concussed",var_00); + if(self == var_00) + { + continue; + } + + self.lastconcussedtime = gettime(); + } +} + +//Function Number: 84 +monitorminetriggering() +{ + self endon("disconnect"); + for(;;) + { + common_scripts\utility::waittill_any("triggered_mine","triggered_claymore","triggered_ims"); + thread waitdelayminetime(); + } +} + +//Function Number: 85 +waitdelayminetime() +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + wait level.delayminetime + 2; + processchallenge("ch_delaymine"); +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/gametypes/_music_and_dialog.gsc b/MW3/PC/MP/maps/mp/gametypes/_music_and_dialog.gsc new file mode 100644 index 0000000..f1f04a9 --- /dev/null +++ b/MW3/PC/MP/maps/mp/gametypes/_music_and_dialog.gsc @@ -0,0 +1,536 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_music_and_dialog.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 11 + * Decompile Time: 276 ms + * Timestamp: 10/27/2023 2:12:43 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + game["music"]["spawn_allies"] = maps\mp\gametypes\_teams::getteamvoiceprefix("allies") + "spawn_music"; + game["music"]["defeat_allies"] = maps\mp\gametypes\_teams::getteamvoiceprefix("allies") + "defeat_music"; + game["music"]["victory_allies"] = maps\mp\gametypes\_teams::getteamvoiceprefix("allies") + "victory_music"; + game["music"]["winning_allies"] = maps\mp\gametypes\_teams::getteamvoiceprefix("allies") + "winning_music"; + game["music"]["losing_allies"] = maps\mp\gametypes\_teams::getteamvoiceprefix("allies") + "losing_music"; + game["voice"]["allies"] = maps\mp\gametypes\_teams::getteamvoiceprefix("allies") + "1mc_"; + game["music"]["spawn_axis"] = maps\mp\gametypes\_teams::getteamvoiceprefix("axis") + "spawn_music"; + game["music"]["defeat_axis"] = maps\mp\gametypes\_teams::getteamvoiceprefix("axis") + "defeat_music"; + game["music"]["victory_axis"] = maps\mp\gametypes\_teams::getteamvoiceprefix("axis") + "victory_music"; + game["music"]["winning_axis"] = maps\mp\gametypes\_teams::getteamvoiceprefix("axis") + "winning_music"; + game["music"]["losing_axis"] = maps\mp\gametypes\_teams::getteamvoiceprefix("axis") + "losing_music"; + game["voice"]["axis"] = maps\mp\gametypes\_teams::getteamvoiceprefix("axis") + "1mc_"; + game["music"]["losing_time"] = "mp_time_running_out_losing"; + game["music"]["suspense"] = []; + game["music"]["suspense"][game["music"]["suspense"].size] = "mp_suspense_01"; + game["music"]["suspense"][game["music"]["suspense"].size] = "mp_suspense_02"; + game["music"]["suspense"][game["music"]["suspense"].size] = "mp_suspense_03"; + game["music"]["suspense"][game["music"]["suspense"].size] = "mp_suspense_04"; + game["music"]["suspense"][game["music"]["suspense"].size] = "mp_suspense_05"; + game["music"]["suspense"][game["music"]["suspense"].size] = "mp_suspense_06"; + game["dialog"]["mission_success"] = "mission_success"; + game["dialog"]["mission_failure"] = "mission_fail"; + game["dialog"]["mission_draw"] = "draw"; + game["dialog"]["round_success"] = "encourage_win"; + game["dialog"]["round_failure"] = "encourage_lost"; + game["dialog"]["round_draw"] = "draw"; + game["dialog"]["timesup"] = "timesup"; + game["dialog"]["winning_time"] = "winning"; + game["dialog"]["losing_time"] = "losing"; + game["dialog"]["winning_score"] = "winning_fight"; + game["dialog"]["losing_score"] = "losing_fight"; + game["dialog"]["lead_lost"] = "lead_lost"; + game["dialog"]["lead_tied"] = "tied"; + game["dialog"]["lead_taken"] = "lead_taken"; + game["dialog"]["last_alive"] = "lastalive"; + game["dialog"]["boost"] = "boost"; + if(!isdefined(game["dialog"]["offense_obj"])) + { + game["dialog"]["offense_obj"] = "boost"; + } + + if(!isdefined(game["dialog"]["defense_obj"])) + { + game["dialog"]["defense_obj"] = "boost"; + } + + game["dialog"]["hardcore"] = "hardcore"; + game["dialog"]["highspeed"] = "highspeed"; + game["dialog"]["tactical"] = "tactical"; + game["dialog"]["challenge"] = "challengecomplete"; + game["dialog"]["promotion"] = "promotion"; + game["dialog"]["bomb_taken"] = "acheive_bomb"; + game["dialog"]["bomb_lost"] = "bomb_taken"; + game["dialog"]["bomb_defused"] = "bomb_defused"; + game["dialog"]["bomb_planted"] = "bomb_planted"; + game["dialog"]["obj_taken"] = "securedobj"; + game["dialog"]["obj_lost"] = "lostobj"; + game["dialog"]["obj_defend"] = "obj_defend"; + game["dialog"]["obj_destroy"] = "obj_destroy"; + game["dialog"]["obj_capture"] = "capture_obj"; + game["dialog"]["objs_capture"] = "capture_objs"; + game["dialog"]["hq_located"] = "hq_located"; + game["dialog"]["hq_enemy_captured"] = "hq_captured"; + game["dialog"]["hq_enemy_destroyed"] = "hq_destroyed"; + game["dialog"]["hq_secured"] = "hq_secured"; + game["dialog"]["hq_offline"] = "hq_offline"; + game["dialog"]["hq_online"] = "hq_online"; + game["dialog"]["move_to_new"] = "new_positions"; + game["dialog"]["push_forward"] = "pushforward"; + game["dialog"]["attack"] = "attack"; + game["dialog"]["defend"] = "defend"; + game["dialog"]["offense"] = "offense"; + game["dialog"]["defense"] = "defense"; + game["dialog"]["halftime"] = "halftime"; + game["dialog"]["overtime"] = "overtime"; + game["dialog"]["side_switch"] = "switching"; + game["dialog"]["flag_taken"] = "ourflag"; + game["dialog"]["flag_dropped"] = "ourflag_drop"; + game["dialog"]["flag_returned"] = "ourflag_return"; + game["dialog"]["flag_captured"] = "ourflag_capt"; + game["dialog"]["flag_getback"] = "getback_ourflag"; + game["dialog"]["enemy_flag_bringhome"] = "enemyflag_tobase"; + game["dialog"]["enemy_flag_taken"] = "enemyflag"; + game["dialog"]["enemy_flag_dropped"] = "enemyflag_drop"; + game["dialog"]["enemy_flag_returned"] = "enemyflag_return"; + game["dialog"]["enemy_flag_captured"] = "enemyflag_capt"; + game["dialog"]["got_flag"] = "achieve_flag"; + game["dialog"]["dropped_flag"] = "lost_flag"; + game["dialog"]["enemy_got_flag"] = "enemy_has_flag"; + game["dialog"]["enemy_dropped_flag"] = "enemy_dropped_flag"; + game["dialog"]["capturing_a"] = "capturing_a"; + game["dialog"]["capturing_b"] = "capturing_b"; + game["dialog"]["capturing_c"] = "capturing_c"; + game["dialog"]["captured_a"] = "capture_a"; + game["dialog"]["captured_b"] = "capture_c"; + game["dialog"]["captured_c"] = "capture_b"; + game["dialog"]["securing_a"] = "securing_a"; + game["dialog"]["securing_b"] = "securing_b"; + game["dialog"]["securing_c"] = "securing_c"; + game["dialog"]["secured_a"] = "secure_a"; + game["dialog"]["secured_b"] = "secure_b"; + game["dialog"]["secured_c"] = "secure_c"; + game["dialog"]["losing_a"] = "losing_a"; + game["dialog"]["losing_b"] = "losing_b"; + game["dialog"]["losing_c"] = "losing_c"; + game["dialog"]["lost_a"] = "lost_a"; + game["dialog"]["lost_b"] = "lost_b"; + game["dialog"]["lost_c"] = "lost_c"; + game["dialog"]["enemy_taking_a"] = "enemy_take_a"; + game["dialog"]["enemy_taking_b"] = "enemy_take_b"; + game["dialog"]["enemy_taking_c"] = "enemy_take_c"; + game["dialog"]["enemy_has_a"] = "enemy_has_a"; + game["dialog"]["enemy_has_b"] = "enemy_has_b"; + game["dialog"]["enemy_has_c"] = "enemy_has_c"; + game["dialog"]["lost_all"] = "take_positions"; + game["dialog"]["secure_all"] = "positions_lock"; + game["dialog"]["destroy_sentry"] = "dest_sentrygun"; + game["music"]["nuke_music"] = "nuke_music"; + game["dialog"]["sentry_gone"] = "sentry_gone"; + game["dialog"]["sentry_destroyed"] = "sentry_destroyed"; + game["dialog"]["ti_gone"] = "ti_cancelled"; + game["dialog"]["ti_destroyed"] = "ti_blocked"; + game["dialog"]["ims_destroyed"] = "ims_destroyed"; + game["dialog"]["lbguard_destroyed"] = "lbguard_destroyed"; + game["dialog"]["ballistic_vest_destroyed"] = "ballistic_vest_destroyed"; + game["dialog"]["remote_sentry_destroyed"] = "remote_sentry_destroyed"; + game["dialog"]["sam_destroyed"] = "sam_destroyed"; + game["dialog"]["sam_gone"] = "sam_gone"; + level thread onplayerconnect(); + level thread onlastalive(); + level thread musiccontroller(); + level thread ongameended(); + level thread onroundswitch(); +} + +//Function Number: 2 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_00 thread onplayerspawned(); + var_00 thread finalkillcammusic(); + } +} + +//Function Number: 3 +onplayerspawned() +{ + self endon("disconnect"); + self waittill("spawned_player"); + if(!level.splitscreen || level.splitscreen && !isdefined(level.playedstartingmusic)) + { + if(!self issplitscreenplayer() || self issplitscreenplayerprimary()) + { + self playlocalsound(game["music"]["spawn_" + self.team]); + } + + if(level.splitscreen) + { + level.playedstartingmusic = 1; + } + } + + if(isdefined(game["dialog"]["gametype"]) && !level.splitscreen || self == level.players[0]) + { + if(isdefined(game["dialog"]["allies_gametype"]) && self.team == "allies") + { + maps\mp\_utility::leaderdialogonplayer("allies_gametype"); + } + else if(isdefined(game["dialog"]["axis_gametype"]) && self.team == "axis") + { + maps\mp\_utility::leaderdialogonplayer("axis_gametype"); + } + else if(!self issplitscreenplayer() || self issplitscreenplayerprimary()) + { + maps\mp\_utility::leaderdialogonplayer("gametype"); + } + } + + maps\mp\_utility::gameflagwait("prematch_done"); + if(self.team == game["attackers"]) + { + if(!self issplitscreenplayer() || self issplitscreenplayerprimary()) + { + maps\mp\_utility::leaderdialogonplayer("offense_obj","introboost"); + return; + } + + return; + } + + if(!self issplitscreenplayer() || self issplitscreenplayerprimary()) + { + maps\mp\_utility::leaderdialogonplayer("defense_obj","introboost"); + } +} + +//Function Number: 4 +onlastalive() +{ + level endon("game_ended"); + level waittill("last_alive",var_00); + if(!isalive(var_00)) + { + return; + } + + var_00 maps\mp\_utility::leaderdialogonplayer("last_alive"); +} + +//Function Number: 5 +onroundswitch() +{ + level waittill("round_switch",var_00); + switch(var_00) + { + case "halftime": + foreach(var_02 in level.players) + { + if(var_02 issplitscreenplayer() && !var_02 issplitscreenplayerprimary()) + { + continue; + } + + var_02 maps\mp\_utility::leaderdialogonplayer("halftime"); + } + break; + + case "overtime": + foreach(var_02 in level.players) + { + if(var_02 issplitscreenplayer() && !var_02 issplitscreenplayerprimary()) + { + continue; + } + + var_02 maps\mp\_utility::leaderdialogonplayer("overtime"); + } + break; + + default: + foreach(var_02 in level.players) + { + if(var_02 issplitscreenplayer() && !var_02 issplitscreenplayerprimary()) + { + continue; + } + + var_02 maps\mp\_utility::leaderdialogonplayer("side_switch"); + } + break; + } +} + +//Function Number: 6 +ongameended() +{ + level thread roundwinnerdialog(); + level thread gamewinnerdialog(); + level waittill("game_win",var_00); + if(level.teambased) + { + if(level.splitscreen) + { + if(var_00 == "allies") + { + maps\mp\_utility::playsoundonplayers(game["music"]["victory_allies"],"allies"); + return; + } + + if(var_00 == "axis") + { + maps\mp\_utility::playsoundonplayers(game["music"]["victory_axis"],"axis"); + return; + } + + maps\mp\_utility::playsoundonplayers(game["music"]["nuke_music"]); + return; + } + + if(var_00 == "allies") + { + maps\mp\_utility::playsoundonplayers(game["music"]["victory_allies"],"allies"); + maps\mp\_utility::playsoundonplayers(game["music"]["defeat_axis"],"axis"); + return; + } + + if(var_00 == "axis") + { + maps\mp\_utility::playsoundonplayers(game["music"]["victory_axis"],"axis"); + maps\mp\_utility::playsoundonplayers(game["music"]["defeat_allies"],"allies"); + return; + } + + maps\mp\_utility::playsoundonplayers(game["music"]["nuke_music"]); + return; + } + + foreach(var_02 in level.players) + { + if(var_02 issplitscreenplayer() && !var_02 issplitscreenplayerprimary()) + { + continue; + } + + if(var_02.pers["team"] != "allies" && var_02.pers["team"] != "axis") + { + var_02 playlocalsound(game["music"]["nuke_music"]); + continue; + } + + if(isdefined(var_00) && isplayer(var_00) && var_02 == var_00) + { + var_02 playlocalsound(game["music"]["victory_" + var_02.pers["team"]]); + continue; + } + + if(!level.splitscreen) + { + var_02 playlocalsound(game["music"]["defeat_" + var_02.pers["team"]]); + } + } +} + +//Function Number: 7 +roundwinnerdialog() +{ + level waittill("round_win",var_00); + var_01 = level.roundenddelay / 4; + if(var_01 > 0) + { + wait var_01; + } + + if(!isdefined(var_00) || isplayer(var_00)) + { + return; + } + + if(var_00 == "allies") + { + maps\mp\_utility::leaderdialog("round_success","allies"); + maps\mp\_utility::leaderdialog("round_failure","axis"); + return; + } + + if(var_00 == "axis") + { + maps\mp\_utility::leaderdialog("round_success","axis"); + maps\mp\_utility::leaderdialog("round_failure","allies"); + } +} + +//Function Number: 8 +gamewinnerdialog() +{ + level waittill("game_win",var_00); + var_01 = level.postroundtime / 2; + if(var_01 > 0) + { + wait var_01; + } + + if(!isdefined(var_00) || isplayer(var_00)) + { + return; + } + + if(var_00 == "allies") + { + maps\mp\_utility::leaderdialog("mission_success","allies"); + maps\mp\_utility::leaderdialog("mission_failure","axis"); + return; + } + + if(var_00 == "axis") + { + maps\mp\_utility::leaderdialog("mission_success","axis"); + maps\mp\_utility::leaderdialog("mission_failure","allies"); + return; + } + + maps\mp\_utility::leaderdialog("mission_draw"); +} + +//Function Number: 9 +musiccontroller() +{ + level endon("game_ended"); + if(!level.hardcoremode) + { + thread suspensemusic(); + } + + level waittill("match_ending_soon",var_00); + if(maps\mp\_utility::getwatcheddvar("roundlimit") == 1 || game["roundsPlayed"] == maps\mp\_utility::getwatcheddvar("roundlimit") - 1) + { + if(!level.splitscreen) + { + if(var_00 == "time") + { + if(level.teambased) + { + if(game["teamScores"]["allies"] > game["teamScores"]["axis"]) + { + if(!level.hardcoremode) + { + maps\mp\_utility::playsoundonplayers(game["music"]["winning_allies"],"allies"); + maps\mp\_utility::playsoundonplayers(game["music"]["losing_axis"],"axis"); + } + + maps\mp\_utility::leaderdialog("winning_time","allies"); + maps\mp\_utility::leaderdialog("losing_time","axis"); + } + else if(game["teamScores"]["axis"] > game["teamScores"]["allies"]) + { + if(!level.hardcoremode) + { + maps\mp\_utility::playsoundonplayers(game["music"]["winning_axis"],"axis"); + maps\mp\_utility::playsoundonplayers(game["music"]["losing_allies"],"allies"); + } + + maps\mp\_utility::leaderdialog("winning_time","axis"); + maps\mp\_utility::leaderdialog("losing_time","allies"); + } + } + else + { + if(!level.hardcoremode) + { + maps\mp\_utility::playsoundonplayers(game["music"]["losing_time"]); + } + + maps\mp\_utility::leaderdialog("timesup"); + } + } + else if(var_00 == "score") + { + if(level.teambased) + { + if(game["teamScores"]["allies"] > game["teamScores"]["axis"]) + { + if(!level.hardcoremode) + { + maps\mp\_utility::playsoundonplayers(game["music"]["winning_allies"],"allies"); + maps\mp\_utility::playsoundonplayers(game["music"]["losing_axis"],"axis"); + } + + maps\mp\_utility::leaderdialog("winning_score","allies"); + maps\mp\_utility::leaderdialog("losing_score","axis"); + } + else if(game["teamScores"]["axis"] > game["teamScores"]["allies"]) + { + if(!level.hardcoremode) + { + maps\mp\_utility::playsoundonplayers(game["music"]["winning_axis"],"axis"); + maps\mp\_utility::playsoundonplayers(game["music"]["losing_allies"],"allies"); + } + + maps\mp\_utility::leaderdialog("winning_score","axis"); + maps\mp\_utility::leaderdialog("losing_score","allies"); + } + } + else + { + var_01 = lib_036E::func_2B78(); + var_02 = lib_036E::func_2B7A(); + var_03[0] = var_01; + if(!level.hardcoremode) + { + var_01 playlocalsound(game["music"]["winning_" + var_01.pers["team"]]); + foreach(var_05 in level.players) + { + if(var_05 == var_01) + { + continue; + } + + var_05 playlocalsound(game["music"]["losing_" + var_05.pers["team"]]); + } + } + + var_01 maps\mp\_utility::leaderdialogonplayer("winning_score"); + maps\mp\_utility::leaderdialogonplayers("losing_score",var_02); + } + } + + level waittill("match_ending_very_soon"); + maps\mp\_utility::leaderdialog("timesup"); + return; + } + + return; + } + + if(!level.hardcoremode) + { + maps\mp\_utility::playsoundonplayers(game["music"]["losing_allies"]); + } + + maps\mp\_utility::leaderdialog("timesup"); +} + +//Function Number: 10 +suspensemusic() +{ + level endon("game_ended"); + level endon("match_ending_soon"); + var_00 = game["music"]["suspense"].size; + wait 120; + for(;;) + { + wait randomfloatrange(60,120); + maps\mp\_utility::playsoundonplayers(game["music"]["suspense"][randomint(var_00)]); + } +} + +//Function Number: 11 +finalkillcammusic() +{ + self waittill("showing_final_killcam"); +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/gametypes/_objpoints.gsc b/MW3/PC/MP/maps/mp/gametypes/_objpoints.gsc new file mode 100644 index 0000000..6ff192d --- /dev/null +++ b/MW3/PC/MP/maps/mp/gametypes/_objpoints.gsc @@ -0,0 +1,184 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_objpoints.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 9 + * Decompile Time: 140 ms + * Timestamp: 10/27/2023 2:12:44 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + precacheshader("objpoint_default"); + level.objpointnames = []; + level.objpoints = []; + if(level.splitscreen) + { + level.objpointsize = 15; + } + else + { + level.objpointsize = 8; + } + + level.objpoint_alpha_default = 0.5; + level.objpointscale = 1; +} + +//Function Number: 2 +createteamobjpoint(param_00,param_01,param_02,param_03,param_04,param_05) +{ + var_06 = getobjpointbyname(param_00); + if(isdefined(var_06)) + { + deleteobjpoint(var_06); + } + + if(!isdefined(param_03)) + { + param_03 = "objpoint_default"; + } + + if(!isdefined(param_05)) + { + param_05 = 1; + } + + if(param_02 != "all") + { + var_06 = newteamhudelem(param_02); + } + else + { + var_06 = newhudelem(); + } + + var_06.name = param_00; + var_06.x = param_01[0]; + var_06.y = param_01[1]; + var_06.z = param_01[2]; + var_06.team = param_02; + var_06.isflashing = 0; + var_06.isshown = 1; + var_06 setshader(param_03,level.objpointsize,level.objpointsize); + var_06 setwaypoint(1,0); + if(isdefined(param_04)) + { + var_06.alpha = param_04; + } + else + { + var_06.alpha = level.objpoint_alpha_default; + } + + var_06.basealpha = var_06.alpha; + var_06.index = level.objpointnames.size; + level.objpoints[param_00] = var_06; + level.objpointnames[level.objpointnames.size] = param_00; + return var_06; +} + +//Function Number: 3 +deleteobjpoint(param_00) +{ + if(level.objpoints.size == 1) + { + level.objpoints = []; + level.objpointnames = []; + param_00 destroy(); + return; + } + + var_01 = param_00.index; + var_02 = level.objpointnames.size - 1; + var_03 = getobjpointbyindex(var_02); + level.objpointnames[var_01] = var_03.name; + var_03.index = var_01; + level.objpointnames[var_02] = undefined; + level.objpoints[param_00.name] = undefined; + param_00 destroy(); +} + +//Function Number: 4 +updateorigin(param_00) +{ + if(self.x != param_00[0]) + { + self.x = param_00[0]; + } + + if(self.y != param_00[1]) + { + self.y = param_00[1]; + } + + if(self.z != param_00[2]) + { + self.z = param_00[2]; + } +} + +//Function Number: 5 +setoriginbyname(param_00,param_01) +{ + var_02 = getobjpointbyname(param_00); + var_02 updateorigin(param_01); +} + +//Function Number: 6 +getobjpointbyname(param_00) +{ + if(isdefined(level.objpoints[param_00])) + { + return level.objpoints[param_00]; + } + + return undefined; +} + +//Function Number: 7 +getobjpointbyindex(param_00) +{ + if(isdefined(level.objpointnames[param_00])) + { + return level.objpoints[level.objpointnames[param_00]]; + } + + return undefined; +} + +//Function Number: 8 +startflashing() +{ + self endon("stop_flashing_thread"); + if(self.isflashing) + { + return; + } + + self.isflashing = 1; + while(self.isflashing) + { + self fadeovertime(0.75); + self.alpha = 0.35 * self.basealpha; + wait 0.75; + self fadeovertime(0.75); + self.alpha = self.basealpha; + wait 0.75; + } + + self.alpha = self.basealpha; +} + +//Function Number: 9 +stopflashing() +{ + if(!self.isflashing) + { + return; + } + + self.isflashing = 0; +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/gametypes/_persistance.gsc b/MW3/PC/MP/maps/mp/gametypes/_persistance.gsc new file mode 100644 index 0000000..da685ce --- /dev/null +++ b/MW3/PC/MP/maps/mp/gametypes/_persistance.gsc @@ -0,0 +1,554 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_persistance.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 22 + * Decompile Time: 318 ms + * Timestamp: 10/27/2023 2:12:45 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level.persistentdatainfo = []; + maps\mp\gametypes\_class::init(); + maps\mp\gametypes\_rank::init(); + maps\mp\gametypes\_missions::init(); + maps\mp\gametypes\_playercards::init(); + level thread updatebufferedstats(); + level thread uploadglobalstatcounters(); +} + +//Function Number: 2 +initbufferedstats() +{ + self.bufferedstats = []; + self.bufferedstats["totalShots"] = self getplayerdata("totalShots"); + self.bufferedstats["accuracy"] = self getplayerdata("accuracy"); + self.bufferedstats["misses"] = self getplayerdata("misses"); + self.bufferedstats["hits"] = self getplayerdata("hits"); + self.bufferedstats["timePlayedAllies"] = self getplayerdata("timePlayedAllies"); + self.bufferedstats["timePlayedOpfor"] = self getplayerdata("timePlayedOpfor"); + self.bufferedstats["timePlayedOther"] = self getplayerdata("timePlayedOther"); + self.bufferedstats["timePlayedTotal"] = self getplayerdata("timePlayedTotal"); + self.bufferedchildstats = []; + self.bufferedchildstats["round"] = []; + self.bufferedchildstats["round"]["timePlayed"] = self getplayerdata("round","timePlayed"); + self.bufferedchildstats["xpMultiplierTimePlayed"] = []; + self.bufferedchildstats["xpMultiplierTimePlayed"][0] = self getplayerdata("xpMultiplierTimePlayed",0); + self.bufferedchildstats["xpMultiplierTimePlayed"][1] = self getplayerdata("xpMultiplierTimePlayed",1); + self.bufferedchildstats["xpMultiplierTimePlayed"][2] = self getplayerdata("xpMultiplierTimePlayed",2); + self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"] = []; + self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][0] = self getplayerdata("xpMaxMultiplierTimePlayed",0); + self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][1] = self getplayerdata("xpMaxMultiplierTimePlayed",1); + self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][2] = self getplayerdata("xpMaxMultiplierTimePlayed",2); + self.bufferedchildstats["challengeXPMultiplierTimePlayed"] = []; + self.bufferedchildstats["challengeXPMultiplierTimePlayed"][0] = self getplayerdata("challengeXPMultiplierTimePlayed",0); + self.bufferedchildstatsmax["challengeXPMaxMultiplierTimePlayed"] = []; + self.bufferedchildstatsmax["challengeXPMaxMultiplierTimePlayed"][0] = self getplayerdata("challengeXPMaxMultiplierTimePlayed",0); + self.bufferedchildstats["weaponXPMultiplierTimePlayed"] = []; + self.bufferedchildstats["weaponXPMultiplierTimePlayed"][0] = self getplayerdata("weaponXPMultiplierTimePlayed",0); + self.bufferedchildstatsmax["weaponXPMaxMultiplierTimePlayed"] = []; + self.bufferedchildstatsmax["weaponXPMaxMultiplierTimePlayed"][0] = self getplayerdata("weaponXPMaxMultiplierTimePlayed",0); + self.bufferedstats["prestigeDoubleXp"] = self getplayerdata("prestigeDoubleXp"); + self.bufferedstats["prestigeDoubleXpTimePlayed"] = self getplayerdata("prestigeDoubleXpTimePlayed"); + self.bufferedstatsmax["prestigeDoubleXpMaxTimePlayed"] = self getplayerdata("prestigeDoubleXpMaxTimePlayed"); + self.bufferedstats["prestigeDoubleWeaponXp"] = self getplayerdata("prestigeDoubleWeaponXp"); + self.bufferedstats["prestigeDoubleWeaponXpTimePlayed"] = self getplayerdata("prestigeDoubleWeaponXpTimePlayed"); + self.bufferedstatsmax["prestigeDoubleWeaponXpMaxTimePlayed"] = self getplayerdata("prestigeDoubleWeaponXpMaxTimePlayed"); +} + +//Function Number: 3 +statget(param_00) +{ + return self getplayerdata(param_00); +} + +//Function Number: 4 +statset(param_00,param_01) +{ + if(!maps\mp\_utility::rankingenabled()) + { + return; + } + + self setplayerdata(param_00,param_01); +} + +//Function Number: 5 +statadd(param_00,param_01,param_02) +{ + if(!maps\mp\_utility::rankingenabled()) + { + return; + } + + if(isdefined(param_02)) + { + var_03 = self getplayerdata(param_00,param_02); + self setplayerdata(param_00,param_02,param_01 + var_03); + return; + } + + var_03 = self getplayerdata(param_01); + self setplayerdata(param_00,param_01 + var_03); +} + +//Function Number: 6 +statgetchild(param_00,param_01) +{ + return self getplayerdata(param_00,param_01); +} + +//Function Number: 7 +statsetchild(param_00,param_01,param_02) +{ + if(!maps\mp\_utility::rankingenabled()) + { + return; + } + + self setplayerdata(param_00,param_01,param_02); +} + +//Function Number: 8 +stataddchild(param_00,param_01,param_02) +{ + if(!maps\mp\_utility::rankingenabled()) + { + return; + } + + var_03 = self getplayerdata(param_00,param_01); + self setplayerdata(param_00,param_01,var_03 + param_02); +} + +//Function Number: 9 +statgetchildbuffered(param_00,param_01) +{ + return self.bufferedchildstats[param_00][param_01]; +} + +//Function Number: 10 +statsetchildbuffered(param_00,param_01,param_02) +{ + if(!maps\mp\_utility::rankingenabled()) + { + return; + } + + self.bufferedchildstats[param_00][param_01] = param_02; +} + +//Function Number: 11 +stataddchildbuffered(param_00,param_01,param_02) +{ + if(!maps\mp\_utility::rankingenabled()) + { + return; + } + + var_03 = statgetchildbuffered(param_00,param_01); + statsetchildbuffered(param_00,param_01,var_03 + param_02); +} + +//Function Number: 12 +stataddbufferedwithmax(param_00,param_01,param_02) +{ + if(!maps\mp\_utility::rankingenabled()) + { + return; + } + + var_03 = statgetbuffered(param_00) + param_01; + if(var_03 > param_02) + { + var_03 = param_02; + } + + if(var_03 < statgetbuffered(param_00)) + { + var_03 = param_02; + } + + statsetbuffered(param_00,var_03); +} + +//Function Number: 13 +stataddchildbufferedwithmax(param_00,param_01,param_02,param_03) +{ + if(!maps\mp\_utility::rankingenabled()) + { + return; + } + + var_04 = statgetchildbuffered(param_00,param_01) + param_02; + if(var_04 > param_03) + { + var_04 = param_03; + } + + if(var_04 < statgetchildbuffered(param_00,param_01)) + { + var_04 = param_03; + } + + statsetchildbuffered(param_00,param_01,var_04); +} + +//Function Number: 14 +statgetbuffered(param_00) +{ + return self.bufferedstats[param_00]; +} + +//Function Number: 15 +statsetbuffered(param_00,param_01) +{ + if(!maps\mp\_utility::rankingenabled()) + { + return; + } + + self.bufferedstats[param_00] = param_01; +} + +//Function Number: 16 +stataddbuffered(param_00,param_01) +{ + if(!maps\mp\_utility::rankingenabled()) + { + return; + } + + var_02 = statgetbuffered(param_00); + statsetbuffered(param_00,var_02 + param_01); +} + +//Function Number: 17 +updatebufferedstats() +{ + wait 0.15; + var_00 = 0; + while(!level.gameended) + { + maps\mp\gametypes\_hostmigration::waittillhostmigrationdone(); + var_00++; + if(var_00 >= level.players.size) + { + var_00 = 0; + } + + if(isdefined(level.players[var_00])) + { + level.players[var_00] writebufferedstats(); + level.players[var_00] updateweaponbufferedstats(); + } + + wait 2; + } + + foreach(var_02 in level.players) + { + var_02 writebufferedstats(); + var_02 updateweaponbufferedstats(); + } +} + +//Function Number: 18 +writebufferedstats() +{ + foreach(var_02, var_01 in self.bufferedstats) + { + self setplayerdata(var_02,var_01); + } + + foreach(var_02, var_01 in self.bufferedchildstats) + { + foreach(var_06, var_05 in var_01) + { + self setplayerdata(var_02,var_06,var_05); + } + } +} + +//Function Number: 19 +incrementweaponstat(param_00,param_01,param_02) +{ + if(maps\mp\_utility::iskillstreakweapon(param_00)) + { + return; + } + + if(maps\mp\_utility::rankingenabled()) + { + var_03 = self getplayerdata("weaponStats",param_00,param_01); + self setplayerdata("weaponStats",param_00,param_01,var_03 + param_02); + } +} + +//Function Number: 20 +incrementattachmentstat(param_00,param_01,param_02) +{ + if(maps\mp\_utility::rankingenabled()) + { + var_03 = self getplayerdata("attachmentsStats",param_00,param_01); + self setplayerdata("attachmentsStats",param_00,param_01,var_03 + param_02); + } +} + +//Function Number: 21 +updateweaponbufferedstats() +{ + if(!isdefined(self.trackingweaponname)) + { + return; + } + + if(self.trackingweaponname == "" || self.trackingweaponname == "none") + { + return; + } + + var_00 = self.trackingweaponname; + if(maps\mp\_utility::iskillstreakweapon(var_00) || maps\mp\_utility::isenvironmentweapon(var_00)) + { + return; + } + + var_01 = strtok(var_00,"_"); + if(var_01[0] == "iw5") + { + } + + if(var_7B[0] == "alt") + { + foreach(var_03 in var_7B) + { + if(var_03 == "gl" || var_03 == "gp25" || var_03 == "m320") + { + var_7B[0] = "gl"; + break; + } + + if(var_03 == "shotgun") + { + var_7B[0] = "shotgun"; + break; + } + } + + if(var_7B[0] == "alt") + { + var_7B[0] = var_7B[1] + "_" + var_7B[2]; + } + } + + if(var_7B[0] == "gl" || var_7B[0] == "shotgun") + { + if(self.trackingweaponshots > 0) + { + incrementattachmentstat(var_7B[0],"shots",self.trackingweaponshots); + maps\mp\_matchdata::logattachmentstat(var_7B[0],"shots",self.trackingweaponshots); + } + + if(self.trackingweaponkills > 0) + { + incrementattachmentstat(var_7B[0],"kills",self.trackingweaponkills); + maps\mp\_matchdata::logattachmentstat(var_7B[0],"kills",self.trackingweaponkills); + } + + if(self.trackingweaponhits > 0) + { + incrementattachmentstat(var_7B[0],"hits",self.trackingweaponhits); + maps\mp\_matchdata::logattachmentstat(var_7B[0],"hits",self.trackingweaponhits); + } + + if(self.trackingweaponheadshots > 0) + { + incrementattachmentstat(var_7B[0],"headShots",self.trackingweaponheadshots); + maps\mp\_matchdata::logattachmentstat(var_7B[0],"headShots",self.trackingweaponheadshots); + } + + if(self.trackingweapondeaths > 0) + { + incrementattachmentstat(var_7B[0],"deaths",self.trackingweapondeaths); + maps\mp\_matchdata::logattachmentstat(var_7B[0],"deaths",self.trackingweapondeaths); + } + + self.trackingweaponname = "none"; + self.trackingweaponshots = 0; + self.trackingweaponkills = 0; + self.trackingweaponhits = 0; + self.trackingweaponheadshots = 0; + self.trackingweapondeaths = 0; + return; + } + + if(!maps\mp\_utility::iscacprimaryweapon(var_7B[0]) && !maps\mp\_utility::iscacsecondaryweapon(var_7B[0])) + { + return; + } + + if(self.trackingweaponshots > 0) + { + incrementweaponstat(var_7B[0],"shots",self.trackingweaponshots); + maps\mp\_matchdata::logweaponstat(var_7B[0],"shots",self.trackingweaponshots); + } + + if(self.trackingweaponkills > 0) + { + incrementweaponstat(var_7B[0],"kills",self.trackingweaponkills); + maps\mp\_matchdata::logweaponstat(var_7B[0],"kills",self.trackingweaponkills); + } + + if(self.trackingweaponhits > 0) + { + incrementweaponstat(var_7B[0],"hits",self.trackingweaponhits); + maps\mp\_matchdata::logweaponstat(var_7B[0],"hits",self.trackingweaponhits); + } + + if(self.trackingweaponheadshots > 0) + { + incrementweaponstat(var_7B[0],"headShots",self.trackingweaponheadshots); + maps\mp\_matchdata::logweaponstat(var_7B[0],"headShots",self.trackingweaponheadshots); + } + + if(self.trackingweapondeaths > 0) + { + incrementweaponstat(var_7B[0],"deaths",self.trackingweapondeaths); + maps\mp\_matchdata::logweaponstat(var_7B[0],"deaths",self.trackingweapondeaths); + } + + var_7B = strtok(var_01,"_"); + if(var_7B[0] != "none") + { + for(var_05 = 0;var_05 < var_7B.size;var_05++ = var_7B[0]) + { + if(var_7B[var_05] == "mp" || var_7B[var_05] == "scope1" || var_7B[var_05] == "scope2" || var_7B[var_05] == "scope3" || var_7B[var_05] == "scope4" || var_7B[var_05] == "scope5" || var_7B[var_05] == "scope6" || var_7B[var_05] == "scope7" || var_7B[var_05] == "scope8" || var_7B[var_05] == "scope9" || var_7B[var_05] == "scope10") + { + continue; + } + + if(issubstr(var_7B[var_05],"camo")) + { + continue; + } + + if(issubstr(var_7B[var_05],"scope") && !issubstr(var_7B[var_05],"vz")) + { + continue; + } + + if(var_7B[var_05] == "alt") + { + var_05 = var_05 + 2; + continue; + } + + if(var_7B[var_05] == "iw5") + { + var_05 = var_05 + 1; + continue; + } + + var_7B[var_05] = maps\mp\_utility::validateattachment(var_7B[var_05]); + if(var_7B[var_05] == "gl" || var_7B[var_05] == "shotgun") + { + continue; + } + + if(issubstr(var_7B[var_05],"scope") && issubstr(var_7B[var_05],"vz")) + { + var_7B[var_05] = "vzscope"; + } + + if(var_05 == 0 && var_7B[var_05] != "iw5" && var_7B[var_05] != "alt") + { + continue; + } + + if(self.trackingweaponshots > 0) + { + incrementattachmentstat(var_7B[var_05],"shots",self.trackingweaponshots); + maps\mp\_matchdata::logattachmentstat(var_7B[var_05],"shots",self.trackingweaponshots); + } + + if(self.trackingweaponkills > 0) + { + incrementattachmentstat(var_7B[var_05],"kills",self.trackingweaponkills); + maps\mp\_matchdata::logattachmentstat(var_7B[var_05],"kills",self.trackingweaponkills); + } + + if(self.trackingweaponhits > 0) + { + incrementattachmentstat(var_7B[var_05],"hits",self.trackingweaponhits); + maps\mp\_matchdata::logattachmentstat(var_7B[var_05],"hits",self.trackingweaponhits); + } + + if(self.trackingweaponheadshots > 0) + { + incrementattachmentstat(var_7B[var_05],"headShots",self.trackingweaponheadshots); + maps\mp\_matchdata::logattachmentstat(var_7B[var_05],"headShots",self.trackingweaponheadshots); + } + + if(self.trackingweapondeaths > 0) + { + incrementattachmentstat(var_7B[var_05],"deaths",self.trackingweapondeaths); + maps\mp\_matchdata::logattachmentstat(var_7B[var_05],"deaths",self.trackingweapondeaths); + } + } + } + + self.trackingweaponname = "none"; + self.trackingweaponshots = 0; + self.trackingweaponkills = 0; + self.trackingweaponhits = 0; + self.trackingweaponheadshots = 0; + self.trackingweapondeaths = 0; +} + +//Function Number: 22 +uploadglobalstatcounters() +{ + level waittill("game_ended"); + if(!maps\mp\_utility::matchmakinggame()) + { + return; + } + + var_00 = 0; + var_01 = 0; + var_02 = 0; + var_03 = 0; + var_04 = 0; + var_05 = 0; + foreach(var_07 in level.players) + { + var_05 = var_05 + var_07.timeplayed["total"]; + } + + incrementcounter("global_minutes",int(var_05 / 60)); + if(!maps\mp\_utility::waslastround()) + { + return; + } + + wait 0.05; + foreach(var_07 in level.players) + { + var_00 = var_00 + var_07.kills; + var_01 = var_01 + var_07.deaths; + var_02 = var_02 + var_07.assists; + var_03 = var_03 + var_07.headshots; + var_04 = var_04 + var_07.suicides; + } + + incrementcounter("global_kills",var_00); + incrementcounter("global_deaths",var_01); + incrementcounter("global_assists",var_02); + incrementcounter("global_headshots",var_03); + incrementcounter("global_suicides",var_04); + incrementcounter("global_games",1); +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/gametypes/_playercards.gsc b/MW3/PC/MP/maps/mp/gametypes/_playercards.gsc new file mode 100644 index 0000000..b466337 --- /dev/null +++ b/MW3/PC/MP/maps/mp/gametypes/_playercards.gsc @@ -0,0 +1,32 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_playercards.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 50 ms + * Timestamp: 10/27/2023 2:12:46 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level thread onplayerconnect(); +} + +//Function Number: 2 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_01 = var_00 maps\mp\gametypes\_persistance::statget("cardIcon"); + var_02 = tablelookupbyrow("mp/cardIconTable.csv",var_01,0); + var_00 setcardicon(var_02); + var_03 = var_00 maps\mp\gametypes\_persistance::statget("cardTitle"); + var_04 = tablelookupbyrow("mp/cardTitleTable.csv",var_03,0); + var_00 setcardtitle(var_04); + var_05 = var_00 maps\mp\gametypes\_persistance::statget("cardNameplate"); + var_00 setcardnameplate(var_05); + } +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/gametypes/_playerlogic.gsc b/MW3/PC/MP/maps/mp/gametypes/_playerlogic.gsc new file mode 100644 index 0000000..ab2eb36 --- /dev/null +++ b/MW3/PC/MP/maps/mp/gametypes/_playerlogic.gsc @@ -0,0 +1,1639 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_playerlogic.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 53 + * Decompile Time: 764 ms + * Timestamp: 10/27/2023 2:12:48 AM +*******************************************************************/ + +//Function Number: 1 +timeuntilwavespawn(param_00) +{ + if(!self.hasspawned) + { + return 0; + } + + var_01 = gettime() + param_00 * 1000; + var_02 = level.lastwave[self.pers["team"]]; + var_03 = level.wavedelay[self.pers["team"]] * 1000; + var_04 = var_01 - var_02 / var_03; + var_05 = ceil(var_04); + var_06 = var_02 + var_05 * var_03; + if(isdefined(self.respawntimerstarttime)) + { + var_07 = gettime() - self.respawntimerstarttime / 1000; + if(self.respawntimerstarttime < var_02) + { + return 0; + } + } + + if(isdefined(self.wavespawnindex)) + { + var_06 = var_06 + 50 * self.wavespawnindex; + } + + return var_06 - gettime() / 1000; +} + +//Function Number: 2 +teamkilldelay() +{ + var_00 = self.pers["teamkills"]; + if(level.maxallowedteamkills < 0 || var_00 <= level.maxallowedteamkills) + { + return 0; + } + + var_01 = var_00 - level.maxallowedteamkills; + return maps\mp\gametypes\_tweakables::gettweakablevalue("team","teamkillspawndelay") * var_01; +} + +//Function Number: 3 +timeuntilspawn(param_00) +{ + if((level.ingraceperiod && !self.hasspawned) || level.gameended) + { + return 0; + } + + var_01 = 0; + if(self.hasspawned) + { + var_02 = self [[ level.onrespawndelay ]](); + if(isdefined(var_02)) + { + var_01 = var_02; + } + else + { + var_01 = getdvarint("scr_" + level.gametype + "_playerrespawndelay"); + } + + if(param_00 && isdefined(self.pers["teamKillPunish"]) && self.pers["teamKillPunish"]) + { + var_01 = var_01 + teamkilldelay(); + } + + if(isdefined(self.respawntimerstarttime)) + { + var_03 = gettime() - self.respawntimerstarttime / 1000; + var_01 = var_01 - var_03; + if(var_01 < 0) + { + var_01 = 0; + } + } + + if(isdefined(self.setspawnpoint)) + { + var_01 = var_01 + level.tispawndelay; + } + } + + var_04 = getdvarint("scr_" + level.gametype + "_waverespawndelay") > 0; + if(var_04) + { + return timeuntilwavespawn(var_01); + } + + return var_01; +} + +//Function Number: 4 +mayspawn() +{ + if(maps\mp\_utility::getgametypenumlives() || isdefined(level.disablespawning)) + { + if(isdefined(level.disablespawning) && level.disablespawning) + { + return 0; + } + + if(isdefined(self.pers["teamKillPunish"]) && self.pers["teamKillPunish"]) + { + return 0; + } + + if(!self.pers["lives"] && maps\mp\_utility::gamehasstarted()) + { + return 0; + } + else if(maps\mp\_utility::gamehasstarted()) + { + if(!level.ingraceperiod && !self.hasspawned) + { + return 0; + } + } + } + + return 1; +} + +//Function Number: 5 +spawnclient() +{ + if(isdefined(self.addtoteam)) + { + maps\mp\gametypes\_menus::addtoteam(self.addtoteam); + self.addtoteam = undefined; + } + + if(!mayspawn()) + { + var_00 = self.origin; + var_01 = self.angles; + self notify("attempted_spawn"); + if(isdefined(self.pers["teamKillPunish"]) && self.pers["teamKillPunish"]) + { + self.pers["teamkills"] = max(self.pers["teamkills"] - 1,0); + maps\mp\_utility::setlowermessage("friendly_fire",&"MP_FRIENDLY_FIRE_WILL_NOT"); + if(!self.hasspawned && self.pers["teamkills"] <= level.maxallowedteamkills) + { + self.pers["teamKillPunish"] = 0; + } + } + else if(maps\mp\_utility::isroundbased() && !maps\mp\_utility::islastround()) + { + maps\mp\_utility::setlowermessage("spawn_info",game["strings"]["spawn_next_round"]); + thread removespawnmessageshortly(3); + } + + if(self.sessionstate != "spectator") + { + var_00 = var_00 + (0,0,60); + } + + thread spawnspectator(var_00,var_01); + return; + } + + if(self.waitingtospawn) + { + return; + } + + self.waitingtospawn = 1; + waitandspawnclient(); + if(isdefined(self)) + { + self.waitingtospawn = 0; + } +} + +//Function Number: 6 +waitandspawnclient() +{ + self endon("disconnect"); + self endon("end_respawn"); + level endon("game_ended"); + self notify("attempted_spawn"); + var_00 = 0; + if(isdefined(self.pers["teamKillPunish"]) && self.pers["teamKillPunish"]) + { + var_01 = teamkilldelay(); + if(var_01 > 0) + { + maps\mp\_utility::setlowermessage("friendly_fire",&"MP_FRIENDLY_FIRE_WILL_NOT",var_01,1,1); + thread respawn_asspectator(self.origin + (0,0,60),self.angles); + var_00 = 1; + wait var_01; + maps\mp\_utility::clearlowermessage("friendly_fire"); + self.respawntimerstarttime = gettime(); + } + + self.pers["teamKillPunish"] = 0; + } + else if(teamkilldelay()) + { + self.pers["teamkills"] = max(self.pers["teamkills"] - 1,0); + } + + if(maps\mp\_utility::isusingremote()) + { + self.spawningafterremotedeath = 1; + self waittill("stopped_using_remote"); + } + + if(!isdefined(self.wavespawnindex) && isdefined(level.waveplayerspawnindex[self.team])) + { + self.wavespawnindex = level.waveplayerspawnindex[self.team]; + level.waveplayerspawnindex[self.team]++; + } + + var_02 = timeuntilspawn(0); + thread predictabouttospawnplayerovertime(var_02); + if(var_02 > 0) + { + maps\mp\_utility::setlowermessage("spawn_info",game["strings"]["waiting_to_spawn"],var_02,1,1); + if(!var_00) + { + thread respawn_asspectator(self.origin + (0,0,60),self.angles); + } + + var_00 = 1; + maps\mp\_utility::waitfortimeornotify(var_02,"force_spawn"); + self notify("stop_wait_safe_spawn_button"); + } + + var_03 = getdvarint("scr_" + level.gametype + "_waverespawndelay") > 0; + if(maps\mp\gametypes\_tweakables::gettweakablevalue("player","forcerespawn") == 0 && self.hasspawned && !var_03 && !self.wantsafespawn) + { + maps\mp\_utility::setlowermessage("spawn_info",game["strings"]["press_to_spawn"],undefined,undefined,undefined,undefined,undefined,undefined,1); + if(!var_00) + { + thread respawn_asspectator(self.origin + (0,0,60),self.angles); + } + + var_00 = 1; + waitrespawnbutton(); + } + + self.waitingtospawn = 0; + maps\mp\_utility::clearlowermessage("spawn_info"); + self.wavespawnindex = undefined; + thread spawnplayer(); +} + +//Function Number: 7 +waitrespawnbutton() +{ + self endon("disconnect"); + self endon("end_respawn"); + for(;;) + { + if(self usebuttonpressed()) + { + break; + } + + wait 0.05; + } +} + +//Function Number: 8 +removespawnmessageshortly(param_00) +{ + self endon("disconnect"); + level endon("game_ended"); + waittillframeend; + self endon("end_respawn"); + wait param_00; + maps\mp\_utility::clearlowermessage("spawn_info"); +} + +//Function Number: 9 +laststandrespawnplayer() +{ + self laststandrevive(); + if(maps\mp\_utility::_hasperk("specialty_finalstand") && !level.diehardmode) + { + maps\mp\_utility::_unsetperk("specialty_finalstand"); + } + + if(level.diehardmode) + { + self.headicon = ""; + } + + self setstance("crouch"); + self.revived = 1; + self notify("revive"); + if(isdefined(self.standardmaxhealth)) + { + self.maxhealth = self.standardmaxhealth; + } + + self.health = self.maxhealth; + common_scripts\utility::_enableusability(); + if(game["state"] == "postgame") + { + maps\mp\gametypes\_gamelogic::freezeplayerforroundend(); + } +} + +//Function Number: 10 +getdeathspawnpoint() +{ + var_00 = spawn("script_origin",self.origin); + var_00 hide(); + var_00.angles = self.angles; + return var_00; +} + +//Function Number: 11 +showspawnnotifies() +{ + if(isdefined(game["defcon"])) + { + thread maps\mp\gametypes\_hud_message::defconsplashnotify(game["defcon"],0); + } + + if(maps\mp\_utility::isrested()) + { + thread maps\mp\gametypes\_hud_message::splashnotify("rested"); + } +} + +//Function Number: 12 +predictabouttospawnplayerovertime(param_00) +{ + self endon("disconnect"); + self endon("spawned"); + self endon("used_predicted_spawnpoint"); + self notify("predicting_about_to_spawn_player"); + self endon("predicting_about_to_spawn_player"); + if(param_00 <= 0) + { + return; + } + + if(param_00 > 1) + { + wait param_00 - 1; + } + + predictabouttospawnplayer(); + self predictstreampos(self.predictedspawnpoint.origin + (0,0,60),self.predictedspawnpoint.angles); + self.predictedspawnpointtime = gettime(); + for(var_01 = 0;var_01 < 30;var_01++) + { + wait 0.4; + var_02 = self.predictedspawnpoint; + predictabouttospawnplayer(); + if(self.predictedspawnpoint != var_02) + { + self predictstreampos(self.predictedspawnpoint.origin + (0,0,60),self.predictedspawnpoint.angles); + self.predictedspawnpointtime = gettime(); + } + } +} + +//Function Number: 13 +predictabouttospawnplayer() +{ + if(timeuntilspawn(1) > 1) + { + var_00 = "mp_global_intermission"; + var_01 = getentarray(var_00,"classname"); + self.predictedspawnpoint = maps\mp\gametypes\_spawnlogic::getspawnpoint_random(var_01); + return; + } + + if(isdefined(self.setspawnpoint)) + { + self.predictedspawnpoint = self.setspawnpoint; + return; + } + + var_02 = self [[ level.getspawnpoint ]](); + self.predictedspawnpoint = var_02; +} + +//Function Number: 14 +checkpredictedspawnpointcorrectness(param_00) +{ + self notify("used_predicted_spawnpoint"); + self.predictedspawnpoint = undefined; +} + +//Function Number: 15 +percentage(param_00,param_01) +{ + return param_00 + " (" + int(param_00 / param_01 * 100) + "%)"; +} + +//Function Number: 16 +printpredictedspawnpointcorrectness() +{ +} + +//Function Number: 17 +getspawnorigin(param_00) +{ + if(!positionwouldtelefrag(param_00.origin)) + { + return param_00.origin; + } + + if(!isdefined(param_00.alternates)) + { + return param_00.origin; + } + + foreach(var_02 in param_00.alternates) + { + if(!positionwouldtelefrag(var_02)) + { + return var_02; + } + } + + return param_00.origin; +} + +//Function Number: 18 +tivalidationcheck() +{ + if(!isdefined(self.setspawnpoint)) + { + return 0; + } + + var_00 = getentarray("care_package","targetname"); + foreach(var_02 in var_00) + { + if(distance(var_02.origin,self.setspawnpoint.playerspawnpos) > 64) + { + continue; + } + + if(isdefined(var_02.owner)) + { + maps\mp\gametypes\_hud_message::playercardsplashnotify("destroyed_insertion",var_02.owner); + } + + maps\mp\perks\_perkfunctions::deleteti(self.setspawnpoint); + return 0; + } + + return 1; +} + +//Function Number: 19 +spawnplayer(param_00) +{ + self endon("disconnect"); + self endon("joined_spectators"); + self notify("spawned"); + self notify("end_respawn"); + if(!isdefined(param_00)) + { + param_00 = 0; + } + + if(isdefined(self.setspawnpoint) && isdefined(self.setspawnpoint.notti) || tivalidationcheck()) + { + var_01 = self.setspawnpoint; + if(!isdefined(self.setspawnpoint.notti)) + { + self playlocalsound("tactical_spawn"); + if(level.teambased) + { + self playsoundtoteam("tactical_spawn",level.otherteam[self.team]); + } + else + { + self playsound("tactical_spawn"); + } + } + + foreach(var_03 in level.ugvs) + { + if(distancesquared(var_03.origin,var_01.playerspawnpos) < 1024) + { + var_03 notify("damage",5000,var_03.owner,(0,0,0),(0,0,0),"MOD_EXPLOSIVE","","","",undefined,"killstreak_emp_mp"); + } + } + + var_05 = self.setspawnpoint.playerspawnpos; + var_06 = self.setspawnpoint.angles; + if(isdefined(self.setspawnpoint.enemytrigger)) + { + self.setspawnpoint.enemytrigger delete(); + } + + self.setspawnpoint delete(); + var_01 = undefined; + } + else + { + var_01 = self [[ level.getspawnpoint ]](); + var_05 = var_06.origin; + var_06 = var_05.angles; + } + + setspawnvariables(); + var_07 = self.hasspawned; + self.fauxdead = undefined; + if(!param_00) + { + self.killsthislife = []; + updatesessionstate("playing",""); + maps\mp\_utility::clearkillcamstate(); + self.cancelkillcam = 1; + self openmenu("killedby_card_hide"); + self.maxhealth = maps\mp\gametypes\_tweakables::gettweakablevalue("player","maxhealth"); + self.health = self.maxhealth; + self.friendlydamage = undefined; + self.hasspawned = 1; + self.spawntime = gettime(); + self.wasti = !isdefined(var_01); + self.afk = 0; + self.damagedplayers = []; + self.killstreakscaler = 1; + self.xpscaler = 1; + self.objectivescaler = 1; + self.clampedhealth = undefined; + self.shielddamage = 0; + self.shieldbullethits = 0; + self.recentshieldxp = 0; + } + + self.movespeedscaler = 1; + self.inlaststand = 0; + self.laststand = undefined; + self.infinalstand = undefined; + self.inc4death = undefined; + self.disabledweapon = 0; + self.disabledweaponswitch = 0; + self.disabledoffhandweapons = 0; + common_scripts\utility::resetusability(); + if(!param_00) + { + self.avoidkillstreakonspawntimer = 5; + if(self.pers["lives"] == maps\mp\_utility::getgametypenumlives()) + { + addtolivescount(); + } + + if(self.pers["lives"]) + { + self.pers["lives"]--; + } + + addtoalivecount(); + if(!var_07 || maps\mp\_utility::gamehasstarted() || maps\mp\_utility::gamehasstarted() && level.ingraceperiod && self.hasdonecombat) + { + removefromlivescount(); + } + + if(!self.wasaliveatmatchstart) + { + var_08 = 20; + if(maps\mp\_utility::gettimelimit() > 0 && var_08 < maps\mp\_utility::gettimelimit() * 60 / 4) + { + var_08 = maps\mp\_utility::gettimelimit() * 60 / 4; + } + + if(level.ingraceperiod || maps\mp\_utility::gettimepassed() < var_08 * 1000) + { + self.wasaliveatmatchstart = 1; + } + } + } + + self setclientdvar("cg_thirdPerson","0"); + self setdepthoffield(0,0,512,512,4,0); + self setclientdvar("cg_fov","65"); + if(isdefined(var_01)) + { + maps\mp\gametypes\_spawnlogic::finalizespawnpointchoice(var_01); + var_05 = getspawnorigin(var_01); + var_06 = var_01.angles; + } + else + { + self.lastspawntime = gettime(); + } + + self.spawnpos = var_05; + self spawn(var_05,var_06); + if(param_00 && isdefined(self.faux_spawn_stance)) + { + self setstance(self.faux_spawn_stance); + self.faux_spawn_stance = undefined; + } + + [[ level.onspawnplayer ]](); + if(isdefined(var_01)) + { + checkpredictedspawnpointcorrectness(var_01.origin); + } + + if(!param_00) + { + maps\mp\gametypes\_missions::playerspawned(); + } + + maps\mp\gametypes\_class::setclass(self.class); + maps\mp\gametypes\_class::giveloadout(self.team,self.class); + if(getdvarint("camera_thirdPerson")) + { + maps\mp\_utility::setthirdpersondof(1); + } + + if(!maps\mp\_utility::gameflag("prematch_done")) + { + maps\mp\_utility::freezecontrolswrapper(1); + } + else + { + maps\mp\_utility::freezecontrolswrapper(0); + } + + if(!maps\mp\_utility::gameflag("prematch_done") || !var_07 && game["state"] == "playing") + { + self setclientdvar("scr_objectiveText",maps\mp\_utility::getobjectivehinttext(self.pers["team"])); + var_09 = self.pers["team"]; + if(game["status"] == "overtime") + { + thread maps\mp\gametypes\_hud_message::oldnotifymessage(game["strings"]["overtime"],game["strings"]["overtime_hint"],undefined,(1,0,0),"mp_last_stand"); + } + else if(maps\mp\_utility::getintproperty("useRelativeTeamColors",0)) + { + thread maps\mp\gametypes\_hud_message::oldnotifymessage(game["strings"][var_09 + "_name"],undefined,game["icons"][var_09] + "_blue",game["colors"]["blue"]); + } + else + { + thread maps\mp\gametypes\_hud_message::oldnotifymessage(game["strings"][var_09 + "_name"],undefined,game["icons"][var_09],game["colors"][var_09]); + } + + thread showspawnnotifies(); + } + + if(maps\mp\_utility::getintproperty("scr_showperksonspawn",1) == 1 && game["state"] != "postgame") + { + self openmenu("perk_display"); + thread hideperksaftertime(4); + thread hideperksondeath(); + } + + waittillframeend; + self.spawningafterremotedeath = undefined; + self notify("spawned_player"); + level notify("player_spawned",self); + if(game["state"] == "postgame") + { + maps\mp\gametypes\_gamelogic::freezeplayerforroundend(); + } +} + +//Function Number: 20 +hideperksaftertime(param_00) +{ + self endon("disconnect"); + self endon("perks_hidden"); + wait param_00; + self openmenu("perk_hide"); + self notify("perks_hidden"); +} + +//Function Number: 21 +hideperksondeath() +{ + self endon("disconnect"); + self endon("perks_hidden"); + self waittill("death"); + self openmenu("perk_hide"); + self notify("perks_hidden"); +} + +//Function Number: 22 +hideperksonkill() +{ + self endon("disconnect"); + self endon("death"); + self endon("perks_hidden"); + self waittill("killed_player"); + self openmenu("perk_hide"); + self notify("perks_hidden"); +} + +//Function Number: 23 +spawnspectator(param_00,param_01) +{ + self notify("spawned"); + self notify("end_respawn"); + self notify("joined_spectators"); + in_spawnspectator(param_00,param_01); +} + +//Function Number: 24 +respawn_asspectator(param_00,param_01) +{ + in_spawnspectator(param_00,param_01); +} + +//Function Number: 25 +in_spawnspectator(param_00,param_01) +{ + setspawnvariables(); + if(isdefined(self.pers["team"]) && self.pers["team"] == "spectator" && !level.gameended) + { + maps\mp\_utility::clearlowermessage("spawn_info"); + } + + self.sessionstate = "spectator"; + maps\mp\_utility::clearkillcamstate(); + self.friendlydamage = undefined; + if(isdefined(self.pers["team"]) && self.pers["team"] == "spectator") + { + self.statusicon = ""; + } + else + { + self.statusicon = "hud_status_dead"; + } + + maps\mp\gametypes\_spectating::setspectatepermissions(); + onspawnspectator(param_00,param_01); + if(level.teambased && !level.splitscreen && !self issplitscreenplayer()) + { + self setdepthoffield(0,128,512,4000,6,1.8); + } +} + +//Function Number: 26 +getplayerfromclientnum(param_00) +{ + if(param_00 < 0) + { + return undefined; + } + + for(var_01 = 0;var_01 < level.players.size;var_01++) + { + if(level.players[var_01] getentitynumber() == param_00) + { + return level.players[var_01]; + } + } + + return undefined; +} + +//Function Number: 27 +onspawnspectator(param_00,param_01) +{ + if(isdefined(param_00) && isdefined(param_01)) + { + self setspectatedefaults(param_00,param_01); + self spawn(param_00,param_01); + checkpredictedspawnpointcorrectness(param_00); + return; + } + + var_02 = "mp_global_intermission"; + var_03 = getentarray(var_02,"classname"); + var_04 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random(var_03); + self setspectatedefaults(var_04.origin,var_04.angles); + self spawn(var_04.origin,var_04.angles); + checkpredictedspawnpointcorrectness(var_04.origin); +} + +//Function Number: 28 +spawnintermission() +{ + self endon("disconnect"); + self notify("spawned"); + self notify("end_respawn"); + setspawnvariables(); + self closepopupmenu(); + self closeingamemenu(); + maps\mp\_utility::clearlowermessages(); + maps\mp\_utility::freezecontrolswrapper(1); + self setclientdvar("cg_everyoneHearsEveryone",1); + if(level.rankedmatch && self.postgamepromotion || self.pers["postGameChallenges"]) + { + if(self.postgamepromotion) + { + self playlocalsound("mp_level_up"); + } + else + { + self playlocalsound("mp_challenge_complete"); + } + + if(self.postgamepromotion > level.postgamenotifies) + { + level.postgamenotifies = 1; + } + + if(self.pers["postGameChallenges"] > level.postgamenotifies) + { + level.postgamenotifies = self.pers["postGameChallenges"]; + } + + self closepopupmenu(); + self closeingamemenu(); + self openmenu(game["menu_endgameupdate"]); + var_00 = 4 + min(self.pers["postGameChallenges"],3); + while(var_00) + { + wait 0.25; + var_00 = var_00 - 0.25; + self openmenu(game["menu_endgameupdate"]); + } + + self closemenu(game["menu_endgameupdate"]); + } + + self.sessionstate = "intermission"; + maps\mp\_utility::clearkillcamstate(); + self.friendlydamage = undefined; + var_01 = getentarray("mp_global_intermission","classname"); + var_02 = var_01[0]; + self spawn(var_02.origin,var_02.angles); + checkpredictedspawnpointcorrectness(var_02.origin); + self setdepthoffield(0,128,512,4000,6,1.8); +} + +//Function Number: 29 +spawnendofgame() +{ + if(1) + { + maps\mp\_utility::freezecontrolswrapper(1); + spawnspectator(); + maps\mp\_utility::freezecontrolswrapper(1); + return; + } + + self notify("spawned"); + self notify("end_respawn"); + setspawnvariables(); + self closepopupmenu(); + self closeingamemenu(); + maps\mp\_utility::clearlowermessages(); + self setclientdvar("cg_everyoneHearsEveryone",1); + self.sessionstate = "dead"; + maps\mp\_utility::clearkillcamstate(); + self.friendlydamage = undefined; + var_00 = getentarray("mp_global_intermission","classname"); + var_01 = var_00[0]; + self spawn(var_01.origin,var_01.angles); + checkpredictedspawnpointcorrectness(var_01.origin); + var_01 setmodel("tag_origin"); + self playerlinkto(var_01); + self playerhide(); + maps\mp\_utility::freezecontrolswrapper(1); + self setdepthoffield(0,128,512,4000,6,1.8); +} + +//Function Number: 30 +setspawnvariables() +{ + self stopshellshock(); + self stoprumble("damage_heavy"); +} + +//Function Number: 31 +notifyconnecting() +{ + waittillframeend; + if(isdefined(self)) + { + level notify("connecting",self); + } +} + +//Function Number: 32 +callback_playerdisconnect() +{ + if(!isdefined(self.connected)) + { + return; + } + + var_00 = getmatchdata("gameLength"); + var_00 = var_00 + int(maps\mp\_utility::getsecondspassed()); + setmatchdata("players",self.clientid,"disconnectTime",var_00); + if(isdefined(self.pers["confirmed"])) + { + maps\mp\_matchdata::logkillsconfirmed(); + } + + if(isdefined(self.pers["denied"])) + { + maps\mp\_matchdata::logkillsdenied(); + } + + removeplayerondisconnect(); + if(!level.teambased) + { + game["roundsWon"][self.guid] = undefined; + } + + if(level.splitscreen) + { + var_01 = level.players; + if(var_01.size <= 1) + { + level thread maps\mp\gametypes\_gamelogic::forceend(); + } + } + + if(isdefined(self.score) && isdefined(self.pers["team"])) + { + setplayerteamrank(self,self.clientid,self.score - 5 * self.deaths); + } + + var_02 = self getentitynumber(); + var_03 = self.guid; + logprint("Q;" + var_03 + ";" + var_02 + ";" + self.name + "\n"); + thread maps\mp\_events::disconnected(); + if(level.gameended) + { + lib_036E::func_2B9B(); + } + + if(isdefined(self.team)) + { + removefromteamcount(); + } + + if(self.sessionstate == "playing") + { + removefromalivecount(1); + return; + } + + if(self.sessionstate == "spectator") + { + level thread maps\mp\gametypes\_gamelogic::updategameevents(); + } +} + +//Function Number: 33 +removeplayerondisconnect() +{ + var_00 = 0; + for(var_01 = 0;var_01 < level.players.size;var_01++) + { + if(level.players[var_01] == self) + { + var_00 = 1; + while(var_01 < level.players.size - 1) + { + level.players[var_01] = level.players[var_01 + 1]; + var_01++; + } + + level.players[var_01] = undefined; + break; + } + } +} + +//Function Number: 34 +initclientdvarssplitscreenspecific() +{ + if(level.splitscreen || self issplitscreenplayer()) + { + self setclientdvars("cg_hudGrenadeIconHeight","37.5","cg_hudGrenadeIconWidth","37.5","cg_hudGrenadeIconOffset","75","cg_hudGrenadePointerHeight","18","cg_hudGrenadePointerWidth","37.5","cg_hudGrenadePointerPivot","18 40.5","cg_fovscale","0.75"); + return; + } + + self setclientdvars("cg_hudGrenadeIconHeight","25","cg_hudGrenadeIconWidth","25","cg_hudGrenadeIconOffset","50","cg_hudGrenadePointerHeight","12","cg_hudGrenadePointerWidth","25","cg_hudGrenadePointerPivot","12 27","cg_fovscale","1"); +} + +//Function Number: 35 +func_2FF6() +{ + makedvarserverinfo("cg_drawTalk",1); + makedvarserverinfo("cg_drawCrosshair",1); + makedvarserverinfo("cg_drawCrosshairNames",1); + makedvarserverinfo("cg_hudGrenadeIconMaxRangeFrag",250); + if(level.hardcoremode) + { + setdvar("cg_drawTalk",3); + setdvar("cg_drawCrosshair",0); + setdvar("cg_drawCrosshairNames",1); + setdvar("cg_hudGrenadeIconMaxRangeFrag",0); + } + + self setclientdvars("cg_drawSpectatorMessages",1,"g_compassShowEnemies",getdvar("scr_game_forceuav"),"cg_scoreboardPingGraph",1); + initclientdvarssplitscreenspecific(); + if(maps\mp\_utility::getgametypenumlives()) + { + self setclientdvars("cg_deadChatWithDead",1,"cg_deadChatWithTeam",0,"cg_deadHearTeamLiving",0,"cg_deadHearAllLiving",0); + } + else + { + self setclientdvars("cg_deadChatWithDead",0,"cg_deadChatWithTeam",1,"cg_deadHearTeamLiving",1,"cg_deadHearAllLiving",0); + } + + if(level.teambased) + { + self setclientdvars("cg_everyonehearseveryone",0); + } + + self setclientdvar("ui_altscene",0); + if(getdvarint("scr_hitloc_debug")) + { + for(var_00 = 0;var_00 < 6;var_00++) + { + self setclientdvar("ui_hitloc_" + var_00,""); + } + + self.hitlocinited = 1; + } +} + +//Function Number: 36 +getlowestavailableclientid() +{ + var_00 = 0; + for(var_01 = 0;var_01 < 30;var_01++) + { + foreach(var_03 in level.players) + { + if(!isdefined(var_03)) + { + continue; + } + + if(var_03.clientid == var_01) + { + var_00 = 1; + break; + } + + var_00 = 0; + } + + if(!var_00) + { + return var_01; + } + } +} + +//Function Number: 37 +callback_playerconnect() +{ + thread notifyconnecting(); + self.statusicon = "hud_status_connecting"; + self waittill("begin"); + self.statusicon = ""; + var_00 = undefined; + level notify("connected",self); + self.connected = 1; + if(self ishost()) + { + level.player = self; + } + + if(!level.splitscreen && !isdefined(self.pers["score"])) + { + iprintln(&"MP_CONNECTED",self); + } + + self.usingonlinedataoffline = self isusingonlinedataoffline(); + func_2FF6(); + initplayerstats(); + if(getdvar("r_reflectionProbeGenerate") == "1") + { + level waittill("eternity"); + } + + self.guid = self getguid(); + var_01 = 0; + if(!isdefined(self.pers["clientid"])) + { + if(game["clientid"] >= 30) + { + self.pers["clientid"] = getlowestavailableclientid(); + } + else + { + self.pers["clientid"] = game["clientid"]; + } + + if(game["clientid"] < 30) + { + game["clientid"]++; + } + + var_01 = 1; + } + + if(var_01) + { + maps\mp\killstreaks\_killstreaks::resetadrenaline(); + } + + self.clientid = self.pers["clientid"]; + self.pers["teamKillPunish"] = 0; + logprint("J;" + self.guid + ";" + self getentitynumber() + ";" + self.name + "\n"); + if(game["clientid"] <= 30 && game["clientid"] != getmatchdata("playerCount")) + { + var_02 = 0; + var_03 = 0; + setmatchdata("playerCount",game["clientid"]); + setmatchdata("players",self.clientid,"xuid",self getxuid()); + setmatchdata("players",self.clientid,"gamertag",self.name); + var_03 = self getplayerdata("connectionIDChunkLow"); + var_02 = self getplayerdata("connectionIDChunkHigh"); + setmatchdata("players",self.clientid,"connectionIDChunkLow",var_03); + setmatchdata("players",self.clientid,"connectionIDChunkHigh",var_02); + setmatchclientip(self,self.clientid); + var_04 = getmatchdata("gameLength"); + var_04 = var_04 + int(maps\mp\_utility::getsecondspassed()); + setmatchdata("players",self.clientid,"connectTime",var_04); + setmatchdata("players",self.clientid,"startXp",self getplayerdata("experience")); + if(maps\mp\_utility::matchmakinggame() && maps\mp\_utility::allowteamchoice()) + { + setmatchdata("players",self.clientid,"team",self.sessionteam); + } + } + + if(!level.teambased) + { + game["roundsWon"][self.guid] = 0; + } + + self.leaderdialogqueue = []; + self.leaderdialogactive = ""; + self.leaderdialoggroups = []; + self.leaderdialoggroup = ""; + if(!isdefined(self.pers["cur_kill_streak"])) + { + self.pers["cur_kill_streak"] = 0; + } + + if(!isdefined(self.pers["cur_death_streak"])) + { + self.pers["cur_death_streak"] = 0; + } + + if(!isdefined(self.pers["assistsToKill"])) + { + self.pers["assistsToKill"] = 0; + } + + if(!isdefined(self.pers["cur_kill_streak_for_nuke"])) + { + self.pers["cur_kill_streak_for_nuke"] = 0; + } + + self.kill_streak = maps\mp\gametypes\_persistance::statget("killStreak"); + self.lastgrenadesuicidetime = -1; + self.teamkillsthisround = 0; + self.hasspawned = 0; + self.waitingtospawn = 0; + self.wantsafespawn = 0; + self.wasaliveatmatchstart = 0; + self.movespeedscaler = 1; + self.killstreakscaler = 1; + self.xpscaler = 1; + self.objectivescaler = 1; + self.issniper = 0; + self.saved_actionslotdata = []; + setrestxpgoal(); + for(var_05 = 1;var_05 <= 4;var_05++) + { + self.saved_actionslotdata[var_05] = spawnstruct(); + self.saved_actionslotdata[var_05].type = ""; + self.saved_actionslotdata[var_05].item = undefined; + } + + thread maps\mp\_flashgrenades::monitorflash(); + waittillframeend; + level.players[level.players.size] = self; + if(level.teambased) + { + self updatescores(); + } + + if(game["state"] == "postgame") + { + self.connectedpostgame = 1; + if(maps\mp\_utility::matchmakinggame()) + { + maps\mp\gametypes\_menus::addtoteam(maps\mp\gametypes\_menus::getteamassignment(),1); + } + else + { + maps\mp\gametypes\_menus::addtoteam("spectator",1); + } + + self setclientdvars("cg_drawSpectatorMessages",0); + spawnintermission(); + return; + } + + if(var_01) + { + maps\mp\gametypes\_gamelogic::updatelossstats(self); + } + + level endon("game_ended"); + if(isdefined(level.hostmigrationtimer)) + { + thread maps\mp\gametypes\_hostmigration::hostmigrationtimerthink(); + } + + if(isdefined(level.onplayerconnectaudioinit)) + { + [[ level.onplayerconnectaudioinit ]](); + } + + if(!isdefined(self.pers["team"])) + { + if(maps\mp\_utility::matchmakinggame()) + { + thread spawnspectator(); + self [[ level.autoassign ]](); + thread kickifdontspawn(); + return; + } + + if(maps\mp\_utility::allowteamchoice()) + { + self [[ level.spectator ]](); + maps\mp\gametypes\_menus::beginteamchoice(); + return; + } + + self [[ level.spectator ]](); + self [[ level.autoassign ]](); + return; + } + + maps\mp\gametypes\_menus::addtoteam(self.pers["team"],1); + if(maps\mp\_utility::isvalidclass(self.pers["class"])) + { + thread spawnclient(); + return; + } + + thread spawnspectator(); + if(self.pers["team"] == "spectator") + { + if(maps\mp\_utility::allowteamchoice()) + { + maps\mp\gametypes\_menus::beginteamchoice(); + return; + } + + self [[ level.autoassign ]](); + return; + } + + maps\mp\gametypes\_menus::beginclasschoice(); +} + +//Function Number: 38 +callback_playermigrated() +{ + if(isdefined(self.connected) && self.connected) + { + maps\mp\_utility::updateobjectivetext(); + maps\mp\_utility::updatemainmenu(); + if(level.teambased) + { + self updatescores(); + } + } + + if(self ishost()) + { + initclientdvarssplitscreenspecific(); + } + + level.hostmigrationreturnedplayercount++; + if(level.hostmigrationreturnedplayercount >= level.players.size * 2 / 3) + { + level notify("hostmigration_enoughplayers"); + } +} + +//Function Number: 39 +addlevelstoexperience(param_00,param_01) +{ + var_02 = maps\mp\gametypes\_rank::getrankforxp(param_00); + var_03 = maps\mp\gametypes\_rank::getrankinfominxp(var_02); + var_04 = maps\mp\gametypes\_rank::getrankinfomaxxp(var_02); + var_02 = var_02 + param_00 - var_03 / var_04 - var_03; + var_02 = var_02 + param_01; + if(var_02 < 0) + { + var_02 = 0; + var_05 = 0; + } + else if(var_03 >= level.maxrank + 1) + { + var_03 = level.maxrank; + var_05 = 1; + } + else + { + var_05 = var_03 - floor(var_03); + var_02 = int(floor(var_02)); + } + + var_03 = maps\mp\gametypes\_rank::getrankinfominxp(var_02); + var_04 = maps\mp\gametypes\_rank::getrankinfomaxxp(var_02); + return int(var_05 * var_04 - var_03) + var_03; +} + +//Function Number: 40 +getrestxpcap(param_00) +{ + var_01 = getdvarfloat("scr_restxp_cap"); + return addlevelstoexperience(param_00,var_01); +} + +//Function Number: 41 +setrestxpgoal() +{ + if(!getdvarint("scr_restxp_enable")) + { + self setplayerdata("restXPGoal",0); + return; + } + + var_00 = self getrestedtime(); + var_01 = var_00 / 3600; + var_02 = self getplayerdata("experience"); + var_03 = getdvarfloat("scr_restxp_minRestTime"); + var_04 = getdvarfloat("scr_restxp_levelsPerDay") / 24; + var_05 = getrestxpcap(var_02); + var_06 = self getplayerdata("restXPGoal"); + if(var_06 < var_02) + { + var_06 = var_02; + } + + var_07 = var_06; + var_08 = 0; + if(var_01 > var_03) + { + var_08 = var_04 * var_01; + var_06 = addlevelstoexperience(var_06,var_08); + } + + var_09 = ""; + if(var_06 >= var_05) + { + var_06 = var_05; + var_09 = " (hit cap)"; + } + + self setplayerdata("restXPGoal",var_06); +} + +//Function Number: 42 +forcespawn() +{ + self endon("death"); + self endon("disconnect"); + self endon("spawned"); + wait 60; + if(self.hasspawned) + { + return; + } + + if(self.pers["team"] == "spectator") + { + return; + } + + if(!maps\mp\_utility::isvalidclass(self.pers["class"])) + { + self.pers["class"] = "CLASS_CUSTOM1"; + self.class = self.pers["class"]; + } + + maps\mp\_utility::closemenus(); + thread spawnclient(); +} + +//Function Number: 43 +kickifdontspawn() +{ + self endon("death"); + self endon("disconnect"); + self endon("spawned"); + self endon("attempted_spawn"); + var_00 = getdvarfloat("scr_kick_time",90); + var_01 = getdvarfloat("scr_kick_mintime",45); + var_02 = gettime(); + if(self ishost()) + { + kickwait(120); + } + else + { + kickwait(var_00); + } + + var_03 = gettime() - var_02 / 1000; + if(var_03 < var_00 - 0.1 && var_03 < var_01) + { + return; + } + + if(self.hasspawned) + { + return; + } + + if(self.pers["team"] == "spectator") + { + return; + } + + kick(self getentitynumber(),"EXE_PLAYERKICKED_INACTIVE"); + level thread maps\mp\gametypes\_gamelogic::updategameevents(); +} + +//Function Number: 44 +kickwait(param_00) +{ + level endon("game_ended"); + maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause(param_00); +} + +//Function Number: 45 +updatesessionstate(param_00,param_01) +{ + self.sessionstate = param_00; + self.statusicon = param_01; +} + +//Function Number: 46 +initplayerstats() +{ + maps\mp\gametypes\_persistance::initbufferedstats(); + self.pers["lives"] = maps\mp\_utility::getgametypenumlives(); + if(!isdefined(self.pers["deaths"])) + { + maps\mp\_utility::initpersstat("deaths"); + maps\mp\gametypes\_persistance::statsetchild("round","deaths",0); + } + + self.deaths = maps\mp\_utility::getpersstat("deaths"); + if(!isdefined(self.pers["score"])) + { + maps\mp\_utility::initpersstat("score"); + maps\mp\gametypes\_persistance::statsetchild("round","score",0); + } + + self.score = maps\mp\_utility::getpersstat("score"); + if(!isdefined(self.pers["suicides"])) + { + maps\mp\_utility::initpersstat("suicides"); + } + + self.suicides = maps\mp\_utility::getpersstat("suicides"); + if(!isdefined(self.pers["kills"])) + { + maps\mp\_utility::initpersstat("kills"); + maps\mp\gametypes\_persistance::statsetchild("round","kills",0); + } + + self.kills = maps\mp\_utility::getpersstat("kills"); + if(!isdefined(self.pers["headshots"])) + { + maps\mp\_utility::initpersstat("headshots"); + } + + self.headshots = maps\mp\_utility::getpersstat("headshots"); + if(!isdefined(self.pers["assists"])) + { + maps\mp\_utility::initpersstat("assists"); + } + + self.assists = maps\mp\_utility::getpersstat("assists"); + if(!isdefined(self.pers["captures"])) + { + maps\mp\_utility::initpersstat("captures"); + maps\mp\gametypes\_persistance::statsetchild("round","captures",0); + } + + self.var_3015 = maps\mp\_utility::getpersstat("captures"); + if(!isdefined(self.pers["returns"])) + { + maps\mp\_utility::initpersstat("returns"); + maps\mp\gametypes\_persistance::statsetchild("round","returns",0); + } + + self.var_3016 = maps\mp\_utility::getpersstat("returns"); + if(!isdefined(self.pers["defends"])) + { + maps\mp\_utility::initpersstat("defends"); + maps\mp\gametypes\_persistance::statsetchild("round","defends",0); + } + + self.var_3017 = maps\mp\_utility::getpersstat("defends"); + if(!isdefined(self.pers["plants"])) + { + maps\mp\_utility::initpersstat("plants"); + maps\mp\gametypes\_persistance::statsetchild("round","plants",0); + } + + self.var_3018 = maps\mp\_utility::getpersstat("plants"); + if(!isdefined(self.pers["defuses"])) + { + maps\mp\_utility::initpersstat("defuses"); + maps\mp\gametypes\_persistance::statsetchild("round","defuses",0); + } + + self.var_3019 = maps\mp\_utility::getpersstat("defuses"); + if(!isdefined(self.pers["destructions"])) + { + maps\mp\_utility::initpersstat("destructions"); + maps\mp\gametypes\_persistance::statsetchild("round","destructions",0); + } + + self.var_301A = maps\mp\_utility::getpersstat("destructions"); + if(!isdefined(self.pers["confirmed"])) + { + maps\mp\_utility::initpersstat("confirmed"); + maps\mp\gametypes\_persistance::statsetchild("round","confirmed",0); + } + + self.var_301B = maps\mp\_utility::getpersstat("confirmed"); + if(!isdefined(self.pers["denied"])) + { + maps\mp\_utility::initpersstat("denied"); + maps\mp\gametypes\_persistance::statsetchild("round","denied",0); + } + + self.var_301C = maps\mp\_utility::getpersstat("denied"); + if(!isdefined(self.pers["teamkills"])) + { + maps\mp\_utility::initpersstat("teamkills"); + } + + if(!isdefined(self.pers["teamKillPunish"])) + { + self.pers["teamKillPunish"] = 0; + } + + maps\mp\_utility::initpersstat("longestStreak"); + self.pers["lives"] = maps\mp\_utility::getgametypenumlives(); + maps\mp\gametypes\_persistance::statsetchild("round","killStreak",0); + maps\mp\gametypes\_persistance::statsetchild("round","loss",0); + maps\mp\gametypes\_persistance::statsetchild("round","win",0); + maps\mp\gametypes\_persistance::statsetchild("round","scoreboardType","none"); + maps\mp\gametypes\_persistance::statsetchildbuffered("round","timePlayed",0); +} + +//Function Number: 47 +addtoteamcount() +{ + level.teamcount[self.team]++; + maps\mp\gametypes\_gamelogic::updategameevents(); +} + +//Function Number: 48 +removefromteamcount() +{ + level.teamcount[self.team]--; +} + +//Function Number: 49 +addtoalivecount() +{ + level.alivecount[self.team]++; + level.hasspawned[self.team]++; + if(level.alivecount["allies"] + level.alivecount["axis"] > level.maxplayercount) + { + level.maxplayercount = level.alivecount["allies"] + level.alivecount["axis"]; + } +} + +//Function Number: 50 +removefromalivecount(param_00) +{ + if(isdefined(self.switching_teams) || isdefined(param_00)) + { + removeallfromlivescount(); + if(isdefined(self.switching_teams)) + { + self.pers["lives"] = 0; + } + } + + level.alivecount[self.team]--; + return maps\mp\gametypes\_gamelogic::updategameevents(); +} + +//Function Number: 51 +addtolivescount() +{ + level.livescount[self.team] = level.livescount[self.team] + self.pers["lives"]; +} + +//Function Number: 52 +removefromlivescount() +{ + level.livescount[self.team]--; + level.livescount[self.team] = int(max(0,level.livescount[self.team])); +} + +//Function Number: 53 +removeallfromlivescount() +{ + level.livescount[self.team] = level.livescount[self.team] - self.pers["lives"]; + level.livescount[self.team] = int(max(0,level.livescount[self.team])); +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/gametypes/_portable_radar.gsc b/MW3/PC/MP/maps/mp/gametypes/_portable_radar.gsc new file mode 100644 index 0000000..30f47eb --- /dev/null +++ b/MW3/PC/MP/maps/mp/gametypes/_portable_radar.gsc @@ -0,0 +1,253 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_portable_radar.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 10 + * Decompile Time: 150 ms + * Timestamp: 10/27/2023 2:12:49 AM +*******************************************************************/ + +//Function Number: 1 +setportableradar() +{ + self setoffhandsecondaryclass("flash"); + maps\mp\_utility::_giveweapon("portable_radar_mp",0); + self givestartammo("portable_radar_mp"); + thread monitorportableradaruse(); +} + +//Function Number: 2 +unsetportableradar() +{ + self notify("end_monitorPortableRadarUse"); +} + +//Function Number: 3 +deleteportableradar(param_00) +{ + if(!isdefined(param_00)) + { + return; + } + + foreach(var_02 in level.players) + { + if(isdefined(var_02)) + { + var_02.inplayerportableradar = undefined; + } + } + + param_00 notify("death"); + param_00 delete(); + self.deployedportableradar = undefined; +} + +//Function Number: 4 +monitorportableradaruse() +{ + self notify("end_monitorPortableRadarUse"); + self endon("end_monitorPortableRadarUse"); + self endon("disconnect"); + level endon("game_ended"); + for(;;) + { + self waittill("grenade_fire",var_00,var_01); + if(var_01 == "portabl_radar" || var_01 == "portable_radar_mp") + { + if(!isalive(self)) + { + var_00 delete(); + return; + } + + if(isdefined(self.deployedportableradar)) + { + deleteportableradar(self.deployedportableradar); + } + + var_00 waittill("missile_stuck"); + var_02 = var_00.origin; + if(isdefined(var_00)) + { + var_00 delete(); + } + + var_03 = spawn("script_model",var_02); + var_03.health = 100; + var_03.team = self.team; + var_03.owner = self; + var_03 setcandamage(1); + var_03 makeportableradar(self); + var_03 portableradarsetup(self); + var_03 thread maps\mp\gametypes\_weapons::createbombsquadmodel("weapon_radar_bombsquad","tag_origin",level.otherteam[self.team],self); + var_03 thread portableradarproximitytracker(); + thread portableradarwatchowner(var_03); + self.deployedportableradar = var_03; + } + } +} + +//Function Number: 5 +portableradarsetup(param_00) +{ + self setmodel("weapon_radar"); + if(level.teambased) + { + maps\mp\_entityheadicons::setteamheadicon(self.team,(0,0,20)); + } + else + { + maps\mp\_entityheadicons::setplayerheadicon(param_00,(0,0,20)); + } + + thread portableradardamagelistener(param_00); + thread portableradaruselistener(param_00); + thread portableradarbeepsounds(); + thread maps\mp\_utility::notusableforjoiningplayers(param_00); +} + +//Function Number: 6 +portableradarwatchowner(param_00) +{ + param_00 endon("death"); + level endon("game_ended"); + common_scripts\utility::waittill_any("disconnect","joined_team","joined_spectators","spawned_player"); + level thread deleteportableradar(param_00); +} + +//Function Number: 7 +portableradarbeepsounds() +{ + self endon("death"); + level endon("game_ended"); + for(;;) + { + wait 2; + self playsound("sentry_gun_beep"); + } +} + +//Function Number: 8 +portableradardamagelistener(param_00) +{ + self endon("death"); + self.health = 999999; + self.maxhealth = 100; + self.damagetaken = 0; + for(;;) + { + self waittill("damage",var_01,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09,var_0A); + if(!maps\mp\gametypes\_weapons::friendlyfirecheck(self.owner,var_02)) + { + continue; + } + + if(isdefined(var_0A)) + { + switch(var_0A) + { + case "flash_grenade_mp": + case "smoke_grenade_mp": + case "concussion_grenade_mp": + break; + } + } + + if(!isdefined(self)) + { + return; + } + + if(var_05 == "MOD_MELEE") + { + self.damagetaken = self.damagetaken + self.maxhealth; + } + + if(isdefined(var_09) && var_09 & level.idflags_penetration) + { + self.wasdamagedfrombulletpenetration = 1; + } + + self.wasdamaged = 1; + self.damagetaken = self.damagetaken + var_01; + if(isdefined(var_0A) && var_0A == "emp_grenade_mp") + { + self.damagetaken = self.maxhealth + 1; + } + + if(isplayer(var_02)) + { + var_02 maps\mp\gametypes\_damagefeedback::updatedamagefeedback("portable_radar"); + } + + if(self.damagetaken >= self.maxhealth) + { + if(isdefined(param_00) && var_02 != param_00) + { + var_02 notify("destroyed_explosive"); + } + + self playsound("sentry_explode"); + self.deatheffect = playfx(common_scripts\utility::getfx("equipment_explode"),self.origin); + var_02 thread deleteportableradar(self); + } + } +} + +//Function Number: 9 +portableradaruselistener(param_00) +{ + self endon("death"); + level endon("game_ended"); + param_00 endon("disconnect"); + self setcursorhint("HINT_NOICON"); + self sethintstring(&"MP_PATCH_PICKUP_PORTABLE_RADAR"); + maps\mp\_utility::setselfusable(param_00); + for(;;) + { + self waittill("trigger",var_01); + var_01 playlocalsound("scavenger_pack_pickup"); + if(var_01 getammocount("portable_radar_mp") == 0) + { + var_01 setportableradar(); + } + + var_01 thread deleteportableradar(self); + } +} + +//Function Number: 10 +portableradarproximitytracker() +{ + self endon("death"); + level endon("game_ended"); + var_00 = 512; + for(;;) + { + foreach(var_02 in level.players) + { + if(!isdefined(var_02)) + { + continue; + } + + if(level.teambased && var_02.team == self.team) + { + continue; + } + + var_03 = distancesquared(self.origin,var_02.origin); + if(distancesquared(var_02.origin,self.origin) < var_00 * var_00) + { + var_02.inplayerportableradar = self.owner; + continue; + } + + var_02.inplayerportableradar = undefined; + } + + wait 0.05; + } +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/gametypes/_quickmessages.gsc b/MW3/PC/MP/maps/mp/gametypes/_quickmessages.gsc new file mode 100644 index 0000000..ff859b7 --- /dev/null +++ b/MW3/PC/MP/maps/mp/gametypes/_quickmessages.gsc @@ -0,0 +1,270 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_quickmessages.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 7 + * Decompile Time: 105 ms + * Timestamp: 10/27/2023 2:12:49 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + game["menu_quickcommands"] = "quickcommands"; + game["menu_quickstatements"] = "quickstatements"; + game["menu_quickresponses"] = "quickresponses"; + precachemenu(game["menu_quickcommands"]); + precachemenu(game["menu_quickstatements"]); + precachemenu(game["menu_quickresponses"]); + precacheheadicon("talkingicon"); + precachestring(&"QUICKMESSAGE_FOLLOW_ME"); + precachestring(&"QUICKMESSAGE_MOVE_IN"); + precachestring(&"QUICKMESSAGE_FALL_BACK"); + precachestring(&"QUICKMESSAGE_SUPPRESSING_FIRE"); + precachestring(&"QUICKMESSAGE_ATTACK_LEFT_FLANK"); + precachestring(&"QUICKMESSAGE_ATTACK_RIGHT_FLANK"); + precachestring(&"QUICKMESSAGE_HOLD_THIS_POSITION"); + precachestring(&"QUICKMESSAGE_REGROUP"); + precachestring(&"QUICKMESSAGE_ENEMY_SPOTTED"); + precachestring(&"QUICKMESSAGE_ENEMIES_SPOTTED"); + precachestring(&"QUICKMESSAGE_IM_IN_POSITION"); + precachestring(&"QUICKMESSAGE_AREA_SECURE"); + precachestring(&"QUICKMESSAGE_GRENADE"); + precachestring(&"QUICKMESSAGE_SNIPER"); + precachestring(&"QUICKMESSAGE_NEED_REINFORCEMENTS"); + precachestring(&"QUICKMESSAGE_HOLD_YOUR_FIRE"); + precachestring(&"QUICKMESSAGE_YES_SIR"); + precachestring(&"QUICKMESSAGE_NO_SIR"); + precachestring(&"QUICKMESSAGE_IM_ON_MY_WAY"); + precachestring(&"QUICKMESSAGE_SORRY"); + precachestring(&"QUICKMESSAGE_GREAT_SHOT"); + precachestring(&"QUICKMESSAGE_TOOK_LONG_ENOUGH"); + precachestring(&"QUICKMESSAGE_ARE_YOU_CRAZY"); + precachestring(&"QUICKMESSAGE_WATCH_SIX"); + precachestring(&"QUICKMESSAGE_COME_ON"); +} + +//Function Number: 2 +quickcommands(param_00) +{ + self endon("disconnect"); + if(!isdefined(self.pers["team"]) || self.pers["team"] == "spectator" || isdefined(self.spamdelay)) + { + return; + } + + self.spamdelay = 1; + switch(param_00) + { + case "1": + var_01 = "mp_cmd_followme"; + var_02 = &"QUICKMESSAGE_FOLLOW_ME"; + break; + + case "2": + var_01 = "mp_cmd_movein"; + var_02 = &"QUICKMESSAGE_MOVE_IN"; + break; + + case "3": + var_01 = "mp_cmd_fallback"; + var_02 = &"QUICKMESSAGE_FALL_BACK"; + break; + + case "4": + var_01 = "mp_cmd_suppressfire"; + var_02 = &"QUICKMESSAGE_SUPPRESSING_FIRE"; + break; + + case "5": + var_01 = "mp_cmd_attackleftflank"; + var_02 = &"QUICKMESSAGE_ATTACK_LEFT_FLANK"; + break; + + case "6": + var_01 = "mp_cmd_attackrightflank"; + var_02 = &"QUICKMESSAGE_ATTACK_RIGHT_FLANK"; + break; + + case "7": + var_01 = "mp_cmd_holdposition"; + var_02 = &"QUICKMESSAGE_HOLD_THIS_POSITION"; + break; + + default: + var_01 = "mp_cmd_regroup"; + var_02 = &"QUICKMESSAGE_REGROUP"; + break; + } + + saveheadicon(); + doquickmessage(var_01,var_02); + wait 2; + self.spamdelay = undefined; + restoreheadicon(); +} + +//Function Number: 3 +quickstatements(param_00) +{ + if(!isdefined(self.pers["team"]) || self.pers["team"] == "spectator" || isdefined(self.spamdelay)) + { + return; + } + + self.spamdelay = 1; + switch(param_00) + { + case "1": + var_01 = "mp_stm_enemyspotted"; + var_02 = &"QUICKMESSAGE_ENEMY_SPOTTED"; + break; + + case "2": + var_01 = "mp_stm_enemiesspotted"; + var_02 = &"QUICKMESSAGE_ENEMIES_SPOTTED"; + break; + + case "3": + var_01 = "mp_stm_iminposition"; + var_02 = &"QUICKMESSAGE_IM_IN_POSITION"; + break; + + case "4": + var_01 = "mp_stm_areasecure"; + var_02 = &"QUICKMESSAGE_AREA_SECURE"; + break; + + case "5": + var_01 = "mp_stm_watchsix"; + var_02 = &"QUICKMESSAGE_WATCH_SIX"; + break; + + case "6": + var_01 = "mp_stm_sniper"; + var_02 = &"QUICKMESSAGE_SNIPER"; + break; + + default: + var_01 = "mp_stm_needreinforcements"; + var_02 = &"QUICKMESSAGE_NEED_REINFORCEMENTS"; + break; + } + + saveheadicon(); + doquickmessage(var_01,var_02); + wait 2; + self.spamdelay = undefined; + restoreheadicon(); +} + +//Function Number: 4 +quickresponses(param_00) +{ + if(!isdefined(self.pers["team"]) || self.pers["team"] == "spectator" || isdefined(self.spamdelay)) + { + return; + } + + self.spamdelay = 1; + switch(param_00) + { + case "1": + var_01 = "mp_rsp_yessir"; + var_02 = &"QUICKMESSAGE_YES_SIR"; + break; + + case "2": + var_01 = "mp_rsp_nosir"; + var_02 = &"QUICKMESSAGE_NO_SIR"; + break; + + case "3": + var_01 = "mp_rsp_onmyway"; + var_02 = &"QUICKMESSAGE_IM_ON_MY_WAY"; + break; + + case "4": + var_01 = "mp_rsp_sorry"; + var_02 = &"QUICKMESSAGE_SORRY"; + break; + + case "5": + var_01 = "mp_rsp_greatshot"; + var_02 = &"QUICKMESSAGE_GREAT_SHOT"; + break; + + default: + var_01 = "mp_rsp_comeon"; + var_02 = &"QUICKMESSAGE_COME_ON"; + break; + } + + saveheadicon(); + doquickmessage(var_01,var_02); + wait 2; + self.spamdelay = undefined; + restoreheadicon(); +} + +//Function Number: 5 +doquickmessage(param_00,param_01) +{ + if(self.sessionstate != "playing") + { + return; + } + + var_02 = maps\mp\gametypes\_teams::getteamvoiceprefix(self.team); + if(isdefined(level.quickmessagetoall) && level.quickmessagetoall) + { + self.var_6C1 = "none"; + self.headicon = "talkingicon"; + self playsound(var_02 + param_00); + self sayall(param_01); + return; + } + + if(self.sessionteam == "allies") + { + self.var_6C1 = "allies"; + } + else if(self.sessionteam == "axis") + { + self.var_6C1 = "axis"; + } + + self.headicon = "talkingicon"; + self playsound(var_02 + param_00); + self sayteam(param_01); + self pingplayer(); +} + +//Function Number: 6 +saveheadicon() +{ + if(isdefined(self.headicon)) + { + self.oldheadicon = self.headicon; + } + + if(isdefined(self.var_6C1)) + { + self.oldheadiconteam = self.var_6C1; + } +} + +//Function Number: 7 +restoreheadicon() +{ + if(isdefined(self.oldheadicon)) + { + self.headicon = self.oldheadicon; + } + + if(isdefined(self.oldheadiconteam)) + { + self.var_6C1 = self.oldheadiconteam; + } +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/gametypes/_rank.gsc b/MW3/PC/MP/maps/mp/gametypes/_rank.gsc new file mode 100644 index 0000000..abcf5d1 --- /dev/null +++ b/MW3/PC/MP/maps/mp/gametypes/_rank.gsc @@ -0,0 +1,1277 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_rank.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 52 + * Decompile Time: 758 ms + * Timestamp: 10/27/2023 2:12:52 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level.scoreinfo = []; + level.xpscale = getdvarint("scr_xpscale"); + if(level.xpscale > 4 || level.xpscale < 0) + { + exitlevel(0); + } + + level.xpscale = min(level.xpscale,4); + level.xpscale = max(level.xpscale,0); + level.ranktable = []; + level.weaponranktable = []; + precacheshader("white"); + precachestring(&"RANK_PLAYER_WAS_PROMOTED_N"); + precachestring(&"RANK_PLAYER_WAS_PROMOTED"); + precachestring(&"RANK_WEAPON_WAS_PROMOTED"); + precachestring(&"RANK_PROMOTED"); + precachestring(&"RANK_PROMOTED_WEAPON"); + precachestring(&"MP_PLUS"); + precachestring(&"RANK_ROMANI"); + precachestring(&"RANK_ROMANII"); + precachestring(&"RANK_ROMANIII"); + precachestring(&"SPLASHES_LONGSHOT"); + precachestring(&"SPLASHES_PROXIMITYASSIST"); + precachestring(&"SPLASHES_PROXIMITYKILL"); + precachestring(&"SPLASHES_EXECUTION"); + precachestring(&"SPLASHES_AVENGER"); + precachestring(&"SPLASHES_ASSISTEDSUICIDE"); + precachestring(&"SPLASHES_DEFENDER"); + precachestring(&"SPLASHES_POSTHUMOUS"); + precachestring(&"SPLASHES_REVENGE"); + precachestring(&"SPLASHES_DOUBLEKILL"); + precachestring(&"SPLASHES_TRIPLEKILL"); + precachestring(&"SPLASHES_MULTIKILL"); + precachestring(&"SPLASHES_BUZZKILL"); + precachestring(&"SPLASHES_COMEBACK"); + precachestring(&"SPLASHES_KNIFETHROW"); + precachestring(&"SPLASHES_ONE_SHOT_KILL"); + if(level.teambased) + { + registerscoreinfo("kill",100); + registerscoreinfo("headshot",100); + registerscoreinfo("assist",20); + registerscoreinfo("proximityassist",20); + registerscoreinfo("proximitykill",20); + registerscoreinfo("suicide",0); + registerscoreinfo("teamkill",0); + } + else + { + registerscoreinfo("kill",50); + registerscoreinfo("headshot",50); + registerscoreinfo("assist",0); + registerscoreinfo("suicide",0); + registerscoreinfo("teamkill",0); + } + + registerscoreinfo("win",1); + registerscoreinfo("loss",0.5); + registerscoreinfo("tie",0.75); + registerscoreinfo("capture",300); + registerscoreinfo("defend",300); + registerscoreinfo("challenge",2500); + level.maxrank = int(tablelookup("mp/rankTable.csv",0,"maxrank",1)); + level.maxprestige = int(tablelookup("mp/rankIconTable.csv",0,"maxprestige",1)); + var_00 = 0; + var_01 = 0; + for(var_00 = 0;var_00 <= level.maxprestige;var_00++) + { + for(var_01 = 0;var_01 <= level.maxrank;var_01++) + { + precacheshader(tablelookup("mp/rankIconTable.csv",0,var_01,var_00 + 1)); + } + } + + var_02 = 0; + var_03 = tablelookup("mp/ranktable.csv",0,var_02,1); + while(isdefined(var_03) && var_03 != "") + { + level.ranktable[var_02][1] = tablelookup("mp/ranktable.csv",0,var_02,1); + level.ranktable[var_02][2] = tablelookup("mp/ranktable.csv",0,var_02,2); + level.ranktable[var_02][3] = tablelookup("mp/ranktable.csv",0,var_02,3); + level.ranktable[var_02][7] = tablelookup("mp/ranktable.csv",0,var_02,7); + precachestring(tablelookupistring("mp/ranktable.csv",0,var_02,16)); + var_02++; + var_03 = tablelookup("mp/ranktable.csv",0,var_02,1); + } + + var_04 = int(tablelookup("mp/weaponRankTable.csv",0,"maxrank",1)); + for(var_05 = 0;var_05 < var_04 + 1;var_05++) + { + level.weaponranktable[var_05][1] = tablelookup("mp/weaponRankTable.csv",0,var_05,1); + level.weaponranktable[var_05][2] = tablelookup("mp/weaponRankTable.csv",0,var_05,2); + level.weaponranktable[var_05][3] = tablelookup("mp/weaponRankTable.csv",0,var_05,3); + } + + maps\mp\gametypes\_missions::buildchallegeinfo(); + level thread patientzerowaiter(); + level thread onplayerconnect(); +} + +//Function Number: 2 +patientzerowaiter() +{ + level endon("game_ended"); + while(!isdefined(level.players) || !level.players.size) + { + wait 0.05; + } + + if(!maps\mp\_utility::matchmakinggame()) + { + if(getdvar("mapname") == "mp_rust" && randomint(1000) == 999) + { + level.patientzeroname = level.players[0].name; + return; + } + + return; + } + + if(getdvar("scr_patientZero") != "") + { + level.patientzeroname = getdvar("scr_patientZero"); + } +} + +//Function Number: 3 +isregisteredevent(param_00) +{ + if(isdefined(level.scoreinfo[param_00])) + { + return 1; + } + + return 0; +} + +//Function Number: 4 +registerscoreinfo(param_00,param_01) +{ + level.scoreinfo[param_00]["value"] = param_01; +} + +//Function Number: 5 +getscoreinfovalue(param_00) +{ + var_01 = "scr_" + level.gametype + "_score_" + param_00; + if(getdvar(var_01) != "") + { + return getdvarint(var_01); + } + + return level.scoreinfo[param_00]["value"]; +} + +//Function Number: 6 +getscoreinfolabel(param_00) +{ + return level.scoreinfo[param_00]["label"]; +} + +//Function Number: 7 +getrankinfominxp(param_00) +{ + return int(level.ranktable[param_00][2]); +} + +//Function Number: 8 +getweaponrankinfominxp(param_00) +{ + return int(level.weaponranktable[param_00][1]); +} + +//Function Number: 9 +getrankinfoxpamt(param_00) +{ + return int(level.ranktable[param_00][3]); +} + +//Function Number: 10 +getweaponrankinfoxpamt(param_00) +{ + return int(level.weaponranktable[param_00][2]); +} + +//Function Number: 11 +getrankinfomaxxp(param_00) +{ + return int(level.ranktable[param_00][7]); +} + +//Function Number: 12 +getweaponrankinfomaxxp(param_00) +{ + return int(level.weaponranktable[param_00][3]); +} + +//Function Number: 13 +getrankinfofull(param_00) +{ + return tablelookupistring("mp/ranktable.csv",0,param_00,16); +} + +//Function Number: 14 +getrankinfoicon(param_00,param_01) +{ + return tablelookup("mp/rankIconTable.csv",0,param_00,param_01 + 1); +} + +//Function Number: 15 +getrankinfolevel(param_00) +{ + return int(tablelookup("mp/ranktable.csv",0,param_00,13)); +} + +//Function Number: 16 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_00.pers["rankxp"] = var_00 maps\mp\gametypes\_persistance::statget("experience"); + if(var_00.pers["rankxp"] < 0) + { + var_00.pers["rankxp"] = 0; + } + + var_01 = var_00 getrankforxp(var_00 getrankxp()); + var_00.pers["rank"] = var_01; + var_00.pers["participation"] = 0; + var_00.xpupdatetotal = 0; + var_00.bonusupdatetotal = 0; + var_02 = var_00 getprestigelevel(); + var_00 setrank(var_01,var_02); + var_00.pers["prestige"] = var_02; + if(var_00.clientid < level.maxlogclients) + { + setmatchdata("players",var_00.clientid,"rank",var_01); + setmatchdata("players",var_00.clientid,"Prestige",var_02); + } + + var_00.postgamepromotion = 0; + if(!isdefined(var_00.pers["postGameChallenges"])) + { + var_00 setclientdvars("ui_challenge_1_ref","","ui_challenge_2_ref","","ui_challenge_3_ref","","ui_challenge_4_ref","","ui_challenge_5_ref","","ui_challenge_6_ref","","ui_challenge_7_ref",""); + } + + var_00 setclientdvar("ui_promotion",0); + if(!isdefined(var_00.pers["summary"])) + { + var_00.pers["summary"] = []; + var_00.pers["summary"]["xp"] = 0; + var_00.pers["summary"]["score"] = 0; + var_00.pers["summary"]["challenge"] = 0; + var_00.pers["summary"]["match"] = 0; + var_00.pers["summary"]["misc"] = 0; + var_00 setclientdvar("player_summary_xp","0"); + var_00 setclientdvar("player_summary_score","0"); + var_00 setclientdvar("player_summary_challenge","0"); + var_00 setclientdvar("player_summary_match","0"); + var_00 setclientdvar("player_summary_misc","0"); + } + + var_00 setclientdvar("ui_opensummary",0); + var_00 thread maps\mp\gametypes\_missions::updatechallenges(); + var_00.explosivekills[0] = 0; + var_00.xpgains = []; + var_00.hud_xppointspopup = var_00 createxppointspopup(); + var_00.hud_xpeventpopup = var_00 createxpeventpopup(); + var_00 thread onplayerspawned(); + var_00 thread onjoinedteam(); + var_00 thread onjoinedspectators(); + var_00 thread setgamesplayed(); + if(var_00 getplayerdata("prestigeDoubleXp")) + { + var_00.prestigedoublexp = 1; + } + else + { + var_00.prestigedoublexp = 0; + } + + if(var_00 getplayerdata("prestigeDoubleWeaponXp")) + { + var_00.prestigedoubleweaponxp = 1; + continue; + } + + var_00.prestigedoubleweaponxp = 0; + } +} + +//Function Number: 17 +setgamesplayed() +{ + self endon("disconnect"); + for(;;) + { + wait 30; + if(!self.hasdonecombat) + { + continue; + } + + maps\mp\gametypes\_persistance::statadd("gamesPlayed",1); + break; + } +} + +//Function Number: 18 +onjoinedteam() +{ + self endon("disconnect"); + for(;;) + { + self waittill("joined_team"); + thread removerankhud(); + } +} + +//Function Number: 19 +onjoinedspectators() +{ + self endon("disconnect"); + for(;;) + { + self waittill("joined_spectators"); + thread removerankhud(); + } +} + +//Function Number: 20 +onplayerspawned() +{ + self endon("disconnect"); + self waittill("spawned_player"); +} + +//Function Number: 21 +roundup(param_00) +{ + if(int(param_00) != param_00) + { + return int(param_00 + 1); + } + + return int(param_00); +} + +//Function Number: 22 +giverankxp(param_00,param_01,param_02,param_03,param_04) +{ + self endon("disconnect"); + var_05 = "none"; + if(!maps\mp\_utility::rankingenabled()) + { + if(param_00 == "assist") + { + if(isdefined(self.taggedassist)) + { + self.taggedassist = undefined; + } + else + { + var_06 = &"MP_ASSIST"; + if(maps\mp\_utility::_hasperk("specialty_assists")) + { + if(!self.pers["assistsToKill"] % 2) + { + var_06 = &"MP_ASSIST_TO_KILL"; + } + } + + thread func_2F45(var_06); + } + } + + return; + } + + if(level.teambased && !level.teamcount["allies"] || !level.teamcount["axis"]) + { + return; + } + else if(!level.teambased && level.teamcount["allies"] + level.teamcount["axis"] < 2) + { + return; + } + + if(!isdefined(param_01)) + { + param_01 = getscoreinfovalue(param_00); + } + + if(!isdefined(self.xpgains[param_00])) + { + self.xpgains[param_00] = 0; + } + + var_07 = 0; + var_08 = 0; + switch(param_00) + { + case "shield_damage": + case "headshot": + case "kill": + param_01 = param_01 * self.xpscaler; + break; + + case "jugg_on_jugg": + case "kill_juggernaut": + case "kill_as_juggernaut": + case "got_juggernaut": + case "dropped_enemy_gun_rank": + case "gained_gun_rank": + case "final_rogue": + case "survivor": + case "draft_rogue": + case "kill_carrier": + case "kill_bonus": + case "team_assist": + case "tags_retrieved": + case "kill_denied": + case "kill_confirmed": + case "defuse": + case "plant": + case "pickup": + case "assault": + case "defend": + case "capture": + case "return": + case "teamkill": + case "suicide": + case "assist": + case "destroy": + case "save": + if(maps\mp\_utility::getgametypenumlives() > 0) + { + var_09 = max(1,int(10 / maps\mp\_utility::getgametypenumlives())); + param_01 = int(param_01 * var_09); + } + + var_0A = 0; + var_0B = 0; + if(self.prestigedoublexp) + { + var_0C = self getplayerdata("prestigeDoubleXpTimePlayed"); + if(var_0C >= self.bufferedstatsmax["prestigeDoubleXpMaxTimePlayed"]) + { + self setplayerdata("prestigeDoubleXp",0); + self setplayerdata("prestigeDoubleXpTimePlayed",0); + self setplayerdata("prestigeDoubleXpMaxTimePlayed",0); + self.prestigedoublexp = 0; + } + else + { + var_0B = 2; + } + } + + if(!self.prestigedoublexp) + { + for(var_0D = 0;var_0D < 3;var_0D++) + { + if(self getplayerdata("xpMultiplierTimePlayed",var_0D) < self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][var_0D]) + { + var_0A = var_0A + int(self getplayerdata("xpMultiplier",var_0D)); + } + } + } + + if(var_0B > 0) + { + param_01 = int(param_01 * level.xpscale * var_0B); + } + else if(var_0A > 0) + { + param_01 = int(param_01 * level.xpscale * var_0A); + } + else + { + param_01 = int(param_01 * level.xpscale); + } + + if(isdefined(level.nukedetonated) && level.nukedetonated) + { + if(level.teambased && level.nukeinfo.team == self.team) + { + param_01 = param_01 * level.nukeinfo.var_36; + } + else if(!level.teambased && level.nukeinfo.player == self) + { + param_01 = param_01 * level.nukeinfo.var_36; + } + + param_01 = int(param_01); + } + + var_0E = getrestxpaward(param_01); + param_01 = param_01 + var_0E; + if(var_0E > 0) + { + if(islastrestxpaward(param_01)) + { + thread maps\mp\gametypes\_hud_message::splashnotify("rested_done"); + } + + var_08 = 1; + } + break; + + case "challenge": + var_0A = 0; + if(self getplayerdata("challengeXPMultiplierTimePlayed",0) < self.bufferedchildstatsmax["challengeXPMaxMultiplierTimePlayed"][0]) + { + var_0A = var_0A + int(self getplayerdata("challengeXPMultiplier",0)); + if(var_0A > 0) + { + param_01 = int(param_01 * var_0A); + } + } + break; + } + + if(!var_08) + { + if(self getplayerdata("restXPGoal") > getrankxp()) + { + self setplayerdata("restXPGoal",self getplayerdata("restXPGoal") + param_01); + } + } + + var_0F = getrankxp(); + self.xpgains[param_00] = self.xpgains[param_00] + param_01; + incrankxp(param_01); + if(maps\mp\_utility::rankingenabled() && updaterank(var_0F)) + { + thread updaterankannouncehud(); + } + + syncxpstat(); + var_10 = maps\mp\gametypes\_missions::isweaponchallenge(param_04); + if(var_10) + { + param_02 = self getcurrentweapon(); + } + + if(param_00 == "shield_damage") + { + param_02 = self getcurrentweapon(); + param_03 = "MOD_MELEE"; + } + + if(weaponshouldgetxp(param_02,param_03) || var_10) + { + var_11 = strtok(param_02,"_"); + if(var_11[0] == "iw5") + { + var_12 = var_11[0] + "_" + var_11[1]; + } + else if(var_12[0] == "alt") + { + var_12 = var_12[1] + "_" + var_12[2]; + } + else + { + var_12 = var_12[0]; + } + + if(var_11[0] == "gl") + { + var_12 = var_11[1]; + } + + if(self isitemunlocked(var_12)) + { + if(self.primaryweapon == param_02 || self.secondaryweapon == param_02 || weaponaltweaponname(self.primaryweapon) == param_02 || isdefined(self.tookweaponfrom) && isdefined(self.tookweaponfrom[param_02])) + { + var_13 = getweaponrankxp(var_12); + switch(param_00) + { + case "kill": + var_14 = 100; + break; + + default: + var_14 = param_02; + break; + } + + if(self.prestigedoubleweaponxp) + { + var_15 = self getplayerdata("prestigeDoubleWeaponXpTimePlayed"); + if(var_15 >= self.bufferedstatsmax["prestigeDoubleWeaponXpMaxTimePlayed"]) + { + self setplayerdata("prestigeDoubleWeaponXp",0); + self setplayerdata("prestigeDoubleWeaponXpTimePlayed",0); + self setplayerdata("prestigeDoubleWeaponXpMaxTimePlayed",0); + self.prestigedoubleweaponxp = 0; + } + else + { + var_14 = var_14 * 2; + } + } + + if(self getplayerdata("weaponXPMultiplierTimePlayed",0) < self.bufferedchildstatsmax["weaponXPMaxMultiplierTimePlayed"][0]) + { + var_16 = int(self getplayerdata("weaponXPMultiplier",0)); + if(var_16 > 0) + { + var_14 = var_14 * var_16; + } + } + + var_17 = var_13 + var_14; + if(!isweaponmaxrank(var_12)) + { + var_18 = getweaponmaxrankxp(var_12); + if(var_17 > var_18) + { + var_17 = var_18; + var_14 = var_18 - var_13; + } + + if(!isdefined(self.weaponsused)) + { + self.weaponsused = []; + self.weaponxpearned = []; + } + + var_19 = 0; + var_1A = 999; + for(var_0D = 0;var_0D < self.weaponsused.size;var_0D++) + { + if(self.weaponsused[var_0D] == var_12) + { + var_19 = 1; + var_1A = var_0D; + } + } + + if(var_19) + { + self.weaponxpearned[var_1A] = self.weaponxpearned[var_1A] + var_14; + } + else + { + self.weaponsused[self.weaponsused.size] = var_12; + self.weaponxpearned[self.weaponxpearned.size] = var_14; + } + + self setplayerdata("weaponXP",var_12,var_17); + maps\mp\_matchdata::logweaponstat(var_12,"XP",var_14); + maps\mp\_utility::incplayerstat("weaponxpearned",var_14); + if(maps\mp\_utility::rankingenabled() && updateweaponrank(var_17,var_12)) + { + thread updateweaponrankannouncehud(); + } + } + } + } + } + + if(!level.hardcoremode) + { + if(param_00 == "teamkill") + { + thread xppointspopup(0 - getscoreinfovalue("kill"),0,(1,0,0),0); + } + else + { + var_1B = (1,1,0.5); + if(var_08) + { + var_1B = (1,0.65,0); + } + + thread xppointspopup(param_01,var_07,var_1B,0); + if(param_00 == "assist") + { + if(isdefined(self.taggedassist)) + { + self.taggedassist = undefined; + } + else + { + var_06 = &"MP_ASSIST"; + if(maps\mp\_utility::_hasperk("specialty_assists")) + { + if(!self.pers["assistsToKill"] % 2) + { + var_06 = &"MP_ASSIST_TO_KILL"; + } + } + + thread func_2F45(var_06); + } + } + } + } + + switch(param_00) + { + case "jugg_on_jugg": + case "kill_juggernaut": + case "kill_as_juggernaut": + case "got_juggernaut": + case "dropped_enemy_gun_rank": + case "gained_gun_rank": + case "final_rogue": + case "survivor": + case "draft_rogue": + case "kill_carrier": + case "kill_bonus": + case "team_assist": + case "tags_retrieved": + case "kill_denied": + case "kill_confirmed": + case "defuse": + case "plant": + case "pickup": + case "assault": + case "defend": + case "capture": + case "return": + case "headshot": + case "teamkill": + case "suicide": + case "assist": + case "kill": + self.pers["summary"]["score"] = self.pers["summary"]["score"] + param_01; + self.pers["summary"]["xp"] = self.pers["summary"]["xp"] + param_01; + break; + + case "tie": + case "loss": + case "win": + self.pers["summary"]["match"] = self.pers["summary"]["match"] + param_01; + self.pers["summary"]["xp"] = self.pers["summary"]["xp"] + param_01; + break; + + case "challenge": + self.pers["summary"]["challenge"] = self.pers["summary"]["challenge"] + param_01; + self.pers["summary"]["xp"] = self.pers["summary"]["xp"] + param_01; + break; + + default: + self.pers["summary"]["misc"] = self.pers["summary"]["misc"] + param_01; + self.pers["summary"]["match"] = self.pers["summary"]["match"] + param_01; + self.pers["summary"]["xp"] = self.pers["summary"]["xp"] + param_01; + break; + } +} + +//Function Number: 23 +weaponshouldgetxp(param_00,param_01) +{ + if(self isitemunlocked("cac") && !maps\mp\_utility::isjuggernaut() && isdefined(param_00) && isdefined(param_01) && !maps\mp\_utility::iskillstreakweapon(param_00)) + { + if(maps\mp\_utility::isbulletdamage(param_01)) + { + return 1; + } + + if(isexplosivedamagemod(param_01) || param_01 == "MOD_IMPACT") + { + if(maps\mp\_utility::getweaponclass(param_00) == "weapon_projectile" || maps\mp\_utility::getweaponclass(param_00) == "weapon_assault") + { + return 1; + } + } + + if(param_01 == "MOD_MELEE") + { + if(maps\mp\_utility::getweaponclass(param_00) == "weapon_riot") + { + return 1; + } + } + } + + return 0; +} + +//Function Number: 24 +updaterank(param_00) +{ + var_01 = getrank(); + if(var_01 == self.pers["rank"]) + { + return 0; + } + + var_02 = self.pers["rank"]; + self.pers["rank"] = var_01; + self setrank(var_01); + return 1; +} + +//Function Number: 25 +updateweaponrank(param_00,param_01) +{ + var_02 = getweaponrank(param_01); + if(var_02 == self.pers["weaponRank"]) + { + return 0; + } + + var_03 = self.pers["weaponRank"]; + self.pers["weaponRank"] = var_02; + self setplayerdata("weaponRank",param_01,var_02); + thread maps\mp\gametypes\_missions::masterychallengeprocess(param_01); + return 1; +} + +//Function Number: 26 +updaterankannouncehud() +{ + self endon("disconnect"); + self notify("update_rank"); + self endon("update_rank"); + var_00 = self.pers["team"]; + if(!isdefined(var_00)) + { + return; + } + + if(!maps\mp\_utility::levelflag("game_over")) + { + level common_scripts\utility::waittill_notify_or_timeout("game_over",0.25); + } + + var_01 = getrankinfofull(self.pers["rank"]); + var_02 = level.ranktable[self.pers["rank"]][1]; + var_03 = int(var_02[var_02.size - 1]); + thread maps\mp\gametypes\_hud_message::promotionsplashnotify(); + if(var_03 > 1) + { + return; + } + + for(var_04 = 0;var_04 < level.players.size;var_04++) + { + var_05 = level.players[var_04]; + var_06 = var_05.pers["team"]; + if(isdefined(var_06) && var_05 != self) + { + if(var_06 == var_00) + { + var_05 iprintln(&"RANK_PLAYER_WAS_PROMOTED",self,var_01); + } + } + } +} + +//Function Number: 27 +updateweaponrankannouncehud() +{ + self endon("disconnect"); + self notify("update_weapon_rank"); + self endon("update_weapon_rank"); + var_00 = self.pers["team"]; + if(!isdefined(var_00)) + { + return; + } + + if(!maps\mp\_utility::levelflag("game_over")) + { + level common_scripts\utility::waittill_notify_or_timeout("game_over",0.25); + } + + thread maps\mp\gametypes\_hud_message::weaponpromotionsplashnotify(); +} + +//Function Number: 28 +endgameupdate() +{ + var_00 = self; +} + +//Function Number: 29 +createxppointspopup() +{ + var_00 = newclienthudelem(self); + var_00.horzalign = "center"; + var_00.vertalign = "middle"; + var_00.alignx = "center"; + var_00.aligny = "middle"; + var_00.x = 30; + if(level.splitscreen) + { + var_00.y = -30; + } + else + { + var_00.y = -50; + } + + var_00.font = "hudbig"; + var_00.fontscale = 0.65; + var_00.archived = 0; + var_00.color = (0.5,0.5,0.5); + var_00.sort = 10000; + var_00 maps\mp\gametypes\_hud::fontpulseinit(3); + return var_00; +} + +//Function Number: 30 +xppointspopup(param_00,param_01,param_02,param_03) +{ + self endon("disconnect"); + self endon("joined_team"); + self endon("joined_spectators"); + if(param_00 == 0) + { + return; + } + + self notify("xpPointsPopup"); + self endon("xpPointsPopup"); + self.xpupdatetotal = self.xpupdatetotal + param_00; + self.bonusupdatetotal = self.bonusupdatetotal + param_01; + wait 0.05; + if(self.xpupdatetotal < 0) + { + self.hud_xppointspopup.label = &""; + } + else + { + self.hud_xppointspopup.label = &"MP_PLUS"; + } + + self.hud_xppointspopup.color = param_02; + self.hud_xppointspopup.glowcolor = param_02; + self.hud_xppointspopup.glowalpha = param_03; + self.hud_xppointspopup setvalue(self.xpupdatetotal); + self.hud_xppointspopup.alpha = 0.85; + self.hud_xppointspopup thread maps\mp\gametypes\_hud::fontpulse(self); + var_04 = max(int(self.bonusupdatetotal / 20),1); + if(self.bonusupdatetotal) + { + while(self.bonusupdatetotal > 0) + { + self.xpupdatetotal = self.xpupdatetotal + min(self.bonusupdatetotal,var_04); + self.bonusupdatetotal = self.bonusupdatetotal - min(self.bonusupdatetotal,var_04); + self.hud_xppointspopup setvalue(self.xpupdatetotal); + wait 0.05; + } + } + else + { + wait 1; + } + + self.hud_xppointspopup fadeovertime(0.75); + self.hud_xppointspopup.alpha = 0; + self.xpupdatetotal = 0; +} + +//Function Number: 31 +createxpeventpopup() +{ + var_00 = newclienthudelem(self); + var_00.children = []; + var_00.horzalign = "center"; + var_00.vertalign = "middle"; + var_00.alignx = "center"; + var_00.aligny = "middle"; + var_00.x = 55; + if(level.splitscreen) + { + var_00.y = -20; + } + else + { + var_00.y = -35; + } + + var_00.font = "hudbig"; + var_00.fontscale = 0.65; + var_00.archived = 0; + var_00.color = (0.5,0.5,0.5); + var_00.sort = 10000; + var_00.elemtype = "msgText"; + var_00 maps\mp\gametypes\_hud::fontpulseinit(3); + return var_00; +} + +//Function Number: 32 +xpeventpopupfinalize(param_00,param_01,param_02) +{ + self endon("disconnect"); + self endon("joined_team"); + self endon("joined_spectators"); + self notify("xpEventPopup"); + self endon("xpEventPopup"); + if(level.hardcoremode) + { + return; + } + + wait 0.05; + if(!isdefined(param_01)) + { + param_01 = (1,1,0.5); + } + + if(!isdefined(param_02)) + { + param_02 = 0; + } + + if(!isdefined(self)) + { + return; + } + + self.hud_xpeventpopup.color = param_01; + self.hud_xpeventpopup.glowcolor = param_01; + self.hud_xpeventpopup.glowalpha = param_02; + self.hud_xpeventpopup settext(param_00); + self.hud_xpeventpopup.alpha = 0.85; + wait 1; + if(!isdefined(self)) + { + return; + } + + self.hud_xpeventpopup fadeovertime(0.75); + self.hud_xpeventpopup.alpha = 0; + self notify("PopComplete"); +} + +//Function Number: 33 +xpeventpopupterminate() +{ + self endon("PopComplete"); + common_scripts\utility::waittill_any("joined_team","joined_spectators"); + self.hud_xpeventpopup fadeovertime(0.05); + self.hud_xpeventpopup.alpha = 0; +} + +//Function Number: 34 +func_2F45(param_00,param_01,param_02) +{ + thread xpeventpopupfinalize(param_00,param_01,param_02); + thread xpeventpopupterminate(); +} + +//Function Number: 35 +removerankhud() +{ + self.hud_xppointspopup.alpha = 0; +} + +//Function Number: 36 +getrank() +{ + var_00 = self.pers["rankxp"]; + var_01 = self.pers["rank"]; + if(var_00 < getrankinfominxp(var_01) + getrankinfoxpamt(var_01)) + { + return var_01; + } + + return getrankforxp(var_00); +} + +//Function Number: 37 +getweaponrank(param_00) +{ + var_01 = self getplayerdata("weaponXP",param_00); + return getweaponrankforxp(var_01,param_00); +} + +//Function Number: 38 +levelforexperience(param_00) +{ + return getrankforxp(param_00); +} + +//Function Number: 39 +weaponlevelforexperience(param_00) +{ + return getweaponrankforxp(param_00); +} + +//Function Number: 40 +getcurrentweaponxp() +{ + var_00 = self getcurrentweapon(); + if(isdefined(var_00)) + { + return self getplayerdata("weaponXP",var_00); + } + + return 0; +} + +//Function Number: 41 +getrankforxp(param_00) +{ + var_01 = 0; + for(var_02 = level.ranktable[var_01][1];isdefined(var_02) && var_02 != "";var_02 = undefined) + { + if(param_00 < getrankinfominxp(var_01) + getrankinfoxpamt(var_01)) + { + return var_01; + } + + var_01++; + if(isdefined(level.ranktable[var_01])) + { + var_02 = level.ranktable[var_01][1]; + continue; + } + } + + var_01--; + return var_01; +} + +//Function Number: 42 +getweaponrankforxp(param_00,param_01) +{ + if(!isdefined(param_00)) + { + param_00 = 0; + } + + var_02 = tablelookup("mp/statstable.csv",4,param_01,2); + var_03 = int(tablelookup("mp/weaponRankTable.csv",0,var_02,1)); + for(var_04 = 0;var_04 < var_03 + 1;var_04++) + { + if(param_00 < getweaponrankinfominxp(var_04) + getweaponrankinfoxpamt(var_04)) + { + return var_04; + } + } + + return var_04 - 1; +} + +//Function Number: 43 +getspm() +{ + var_00 = getrank() + 1; + return 3 + var_00 * 0.5 * 10; +} + +//Function Number: 44 +getprestigelevel() +{ + return maps\mp\gametypes\_persistance::statget("prestige"); +} + +//Function Number: 45 +getrankxp() +{ + return self.pers["rankxp"]; +} + +//Function Number: 46 +getweaponrankxp(param_00) +{ + return self getplayerdata("weaponXP",param_00); +} + +//Function Number: 47 +getweaponmaxrankxp(param_00) +{ + var_01 = tablelookup("mp/statstable.csv",4,param_00,2); + var_02 = int(tablelookup("mp/weaponRankTable.csv",0,var_01,1)); + var_03 = getweaponrankinfomaxxp(var_02); + return var_03; +} + +//Function Number: 48 +isweaponmaxrank(param_00) +{ + var_01 = self getplayerdata("weaponXP",param_00); + var_02 = getweaponmaxrankxp(param_00); + return var_01 >= var_02; +} + +//Function Number: 49 +incrankxp(param_00) +{ + if(!maps\mp\_utility::rankingenabled()) + { + return; + } + + if(isdefined(self.var_3771)) + { + return; + } + + var_01 = getrankxp(); + var_02 = int(min(var_01,getrankinfomaxxp(level.maxrank))) + param_00; + if(self.pers["rank"] == level.maxrank && var_02 >= getrankinfomaxxp(level.maxrank)) + { + var_02 = getrankinfomaxxp(level.maxrank); + } + + self.pers["rankxp"] = var_02; +} + +//Function Number: 50 +getrestxpaward(param_00) +{ + if(!getdvarint("scr_restxp_enable")) + { + return 0; + } + + var_01 = getdvarfloat("scr_restxp_restedAwardScale"); + var_02 = int(param_00 * var_01); + var_03 = self getplayerdata("restXPGoal") - getrankxp(); + if(var_03 <= 0) + { + return 0; + } + + return var_02; +} + +//Function Number: 51 +islastrestxpaward(param_00) +{ + if(!getdvarint("scr_restxp_enable")) + { + return 0; + } + + var_01 = getdvarfloat("scr_restxp_restedAwardScale"); + var_02 = int(param_00 * var_01); + var_03 = self getplayerdata("restXPGoal") - getrankxp(); + if(var_03 <= 0) + { + return 0; + } + + if(var_02 >= var_03) + { + return 1; + } + + return 0; +} + +//Function Number: 52 +syncxpstat() +{ + if(level.xpscale > 4 || level.xpscale <= 0) + { + exitlevel(0); + } + + var_00 = getrankxp(); + maps\mp\gametypes\_persistance::statset("experience",var_00); +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/gametypes/_scrambler.gsc b/MW3/PC/MP/maps/mp/gametypes/_scrambler.gsc new file mode 100644 index 0000000..39a069f --- /dev/null +++ b/MW3/PC/MP/maps/mp/gametypes/_scrambler.gsc @@ -0,0 +1,304 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_scrambler.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 10 + * Decompile Time: 137 ms + * Timestamp: 10/27/2023 2:12:53 AM +*******************************************************************/ + +//Function Number: 1 +setscrambler() +{ + self setoffhandsecondaryclass("flash"); + maps\mp\_utility::_giveweapon("scrambler_mp",0); + self givestartammo("scrambler_mp"); + thread monitorscrambleruse(); +} + +//Function Number: 2 +unsetscrambler() +{ + self notify("end_monitorScramblerUse"); +} + +//Function Number: 3 +deletescrambler(param_00) +{ + if(!isdefined(param_00)) + { + return; + } + + foreach(var_02 in level.players) + { + if(isdefined(var_02)) + { + var_02.inplayerscrambler = undefined; + } + } + + param_00 notify("death"); + param_00 delete(); + self.deployedscrambler = undefined; + var_04 = []; + var_04 = maps\mp\_utility::cleanarray(level.scramblers); + level.scramblers = var_04; +} + +//Function Number: 4 +monitorscrambleruse() +{ + self notify("end_monitorScramblerUse"); + self endon("end_monitorScramblerUse"); + self endon("disconnect"); + level endon("game_ended"); + for(;;) + { + self waittill("grenade_fire",var_00,var_01); + if(var_01 == "scrambler" || var_01 == "scrambler_mp") + { + if(!isalive(self)) + { + var_00 delete(); + return; + } + + var_00 hide(); + var_00 waittill("missile_stuck"); + var_02 = 40; + if(var_02 * var_02 < distancesquared(var_00.origin,self.origin)) + { + var_03 = bullettrace(self.origin,self.origin - (0,0,var_02),0,self); + if(var_03["fraction"] == 1) + { + var_00 delete(); + self setweaponammostock("scrambler_mp",self getweaponammostock("trophy_mp") + 1); + continue; + } + + var_00.origin = var_03["position"]; + } + + var_00 show(); + if(isdefined(self.deployedscrambler)) + { + deletescrambler(self.deployedscrambler); + } + + var_04 = var_00.origin; + var_05 = spawn("script_model",var_04); + var_05.health = 100; + var_05.team = self.team; + var_05.owner = self; + var_05 setcandamage(1); + var_05 makescrambler(self); + var_05 scramblersetup(self); + var_05 thread maps\mp\gametypes\_weapons::createbombsquadmodel("weapon_jammer_bombsquad","tag_origin",level.otherteam[self.team],self); + level.scramblers[level.scramblers.size] = var_05; + self.deployedscrambler = var_05; + self.changingweapon = undefined; + wait 0.05; + if(isdefined(var_00)) + { + var_00 delete(); + } + } + } +} + +//Function Number: 5 +scramblersetup(param_00) +{ + self setmodel("weapon_jammer"); + if(level.teambased) + { + maps\mp\_entityheadicons::setteamheadicon(self.team,(0,0,20)); + } + else + { + maps\mp\_entityheadicons::setplayerheadicon(param_00,(0,0,20)); + } + + thread scramblerdamagelistener(param_00); + thread scrambleruselistener(param_00); + param_00 thread scramblerwatchowner(self); + thread scramblerbeepsounds(); + thread maps\mp\_utility::notusableforjoiningplayers(param_00); +} + +//Function Number: 6 +scramblerwatchowner(param_00) +{ + param_00 endon("death"); + level endon("game_ended"); + common_scripts\utility::waittill_any("disconnect","joined_team","joined_spectators","death"); + level thread deletescrambler(param_00); +} + +//Function Number: 7 +scramblerbeepsounds() +{ + self endon("death"); + level endon("game_ended"); + for(;;) + { + wait 3; + self playsound("scrambler_beep"); + } +} + +//Function Number: 8 +scramblerdamagelistener(param_00) +{ + self endon("death"); + self.health = 999999; + self.maxhealth = 100; + self.damagetaken = 0; + for(;;) + { + self waittill("damage",var_01,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09,var_0A); + if(!maps\mp\gametypes\_weapons::friendlyfirecheck(self.owner,var_02)) + { + continue; + } + + if(isdefined(var_0A)) + { + switch(var_0A) + { + case "flash_grenade_mp": + case "smoke_grenade_mp": + case "concussion_grenade_mp": + break; + } + } + + if(!isdefined(self)) + { + return; + } + + if(var_05 == "MOD_MELEE") + { + self.damagetaken = self.damagetaken + self.maxhealth; + } + + if(isdefined(var_09) && var_09 & level.idflags_penetration) + { + self.wasdamagedfrombulletpenetration = 1; + } + + self.wasdamaged = 1; + self.damagetaken = self.damagetaken + var_01; + if(isplayer(var_02)) + { + var_02 maps\mp\gametypes\_damagefeedback::updatedamagefeedback("scrambler"); + } + + if(self.damagetaken >= self.maxhealth) + { + if(isdefined(param_00) && var_02 != param_00) + { + var_02 notify("destroyed_explosive"); + } + + self playsound("sentry_explode"); + self.deatheffect = playfx(common_scripts\utility::getfx("equipment_explode"),self.origin); + var_02 thread deletescrambler(self); + } + } +} + +//Function Number: 9 +scrambleruselistener(param_00) +{ + self endon("death"); + level endon("game_ended"); + param_00 endon("disconnect"); + self setcursorhint("HINT_NOICON"); + self sethintstring(&"MP_PATCH_PICKUP_SCRAMBLER"); + maps\mp\_utility::setselfusable(param_00); + for(;;) + { + self waittill("trigger",var_01); + var_01 playlocalsound("scavenger_pack_pickup"); + if(var_01 getammocount("scrambler_mp") == 0) + { + var_01 setscrambler(); + } + + var_01 thread deletescrambler(self); + } +} + +//Function Number: 10 +scramblerproximitytracker() +{ + self endon("disconnect"); + self endon("death"); + self endon("faux_spawn"); + level endon("game_ended"); + self.scramproxyactive = 0; + var_00 = 512; + for(;;) + { + wait 0.05; + self.scramproxyactive = 0; + foreach(var_02 in level.scramblers) + { + if(!isdefined(var_02)) + { + continue; + } + + if(!maps\mp\_utility::isreallyalive(self)) + { + continue; + } + + var_03 = distancesquared(var_02.origin,self.origin); + if((level.teambased && var_02.team != self.team) || !level.teambased && isdefined(var_02.owner) && var_02.owner != self) + { + if(var_03 < var_00 * var_00) + { + self.inplayerscrambler = var_02.owner; + } + else + { + self.inplayerscrambler = undefined; + } + + continue; + } + + if(var_03 < var_00 * var_00) + { + self.scramproxyactive = 1; + break; + } + } + + if(self.scramproxyactive) + { + if(!maps\mp\_utility::_hasperk("specialty_blindeye")) + { + maps\mp\_utility::giveperk("specialty_blindeye",0); + self.scramproxyperk = 1; + } + + continue; + } + + if(isdefined(self.scramproxyperk) && self.scramproxyperk) + { + if(!maps\mp\killstreaks\_perkstreaks::isperkstreakon("specialty_blindeye_ks")) + { + maps\mp\_utility::_unsetperk("specialty_blindeye"); + } + + self.scramproxyperk = 0; + } + } +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/gametypes/_serversettings.gsc b/MW3/PC/MP/maps/mp/gametypes/_serversettings.gsc new file mode 100644 index 0000000..6a6eb3d --- /dev/null +++ b/MW3/PC/MP/maps/mp/gametypes/_serversettings.gsc @@ -0,0 +1,123 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_serversettings.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 3 + * Decompile Time: 60 ms + * Timestamp: 10/27/2023 2:12:53 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level.hostname = getdvar("sv_hostname"); + if(level.hostname == "") + { + level.hostname = "CoDHost"; + } + + setdvar("sv_hostname",level.hostname); + level.allowvote = getdvarint("g_allowvote",1); + setdvar("g_allowvote",level.allowvote); + makedvarserverinfo("ui_allowvote",level.allowvote); + level.friendlyfire = maps\mp\gametypes\_tweakables::gettweakablevalue("team","fftype"); + makedvarserverinfo("ui_friendlyfire",level.friendlyfire); + constraingametype(getdvar("g_gametype")); + for(;;) + { + updateserversettings(); + wait 5; + } +} + +//Function Number: 2 +updateserversettings() +{ + var_00 = getdvar("sv_hostname"); + if(level.hostname != var_00) + { + level.hostname = var_00; + } + + var_01 = getdvarint("g_allowvote",1); + if(level.allowvote != var_01) + { + level.allowvote = var_01; + setdvar("ui_allowvote",level.allowvote); + } + + var_02 = maps\mp\gametypes\_tweakables::gettweakablevalue("team","fftype"); + if(level.friendlyfire != var_02) + { + level.friendlyfire = var_02; + setdvar("ui_friendlyfire",level.friendlyfire); + } +} + +//Function Number: 3 +constraingametype(param_00) +{ + var_01 = getentarray(); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + var_03 = var_01[var_02]; + if(param_00 == "dm") + { + if(isdefined(var_03.script_gametype_dm) && var_03.script_gametype_dm != "1") + { + var_03 delete(); + } + + continue; + } + + if(param_00 == "tdm") + { + if(isdefined(var_03.script_gametype_tdm) && var_03.script_gametype_tdm != "1") + { + var_03 delete(); + } + + continue; + } + + if(param_00 == "ctf") + { + if(isdefined(var_03.script_gametype_ctf) && var_03.script_gametype_ctf != "1") + { + var_03 delete(); + } + + continue; + } + + if(param_00 == "hq") + { + if(isdefined(var_03.script_gametype_hq) && var_03.script_gametype_hq != "1") + { + var_03 delete(); + } + + continue; + } + + if(param_00 == "sd") + { + if(isdefined(var_03.script_gametype_sd) && var_03.script_gametype_sd != "1") + { + var_03 delete(); + } + + continue; + } + + if(param_00 == "koth") + { + if(isdefined(var_03.script_gametype_koth) && var_03.script_gametype_koth != "1") + { + var_03 delete(); + } + } + } +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/gametypes/_shellshock.gsc b/MW3/PC/MP/maps/mp/gametypes/_shellshock.gsc new file mode 100644 index 0000000..3449d0e --- /dev/null +++ b/MW3/PC/MP/maps/mp/gametypes/_shellshock.gsc @@ -0,0 +1,187 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_shellshock.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 9 + * Decompile Time: 134 ms + * Timestamp: 10/27/2023 2:12:54 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + precacheshellshock("frag_grenade_mp"); + precacheshellshock("damage_mp"); + precacherumble("artillery_rumble"); + precacherumble("grenade_rumble"); + precachemenu("dirt_effect_center"); + precachemenu("dirt_effect_left"); + precachemenu("dirt_effect_right"); + precachemenu("blood_effect_center"); + precachemenu("blood_effect_left"); + precachemenu("blood_effect_right"); +} + +//Function Number: 2 +shellshockondamage(param_00,param_01) +{ + if(maps\mp\_flashgrenades::isflashbanged()) + { + return; + } + + if(param_00 == "MOD_EXPLOSIVE" || param_00 == "MOD_GRENADE" || param_00 == "MOD_GRENADE_SPLASH" || param_00 == "MOD_PROJECTILE" || param_00 == "MOD_PROJECTILE_SPLASH") + { + if(param_01 > 10) + { + if(isdefined(self.shellshockreduction) && self.shellshockreduction) + { + self shellshock("frag_grenade_mp",self.shellshockreduction); + return; + } + + self shellshock("frag_grenade_mp",0.5); + return; + } + } +} + +//Function Number: 3 +endondeath() +{ + self waittill("death"); + waittillframeend; + self notify("end_explode"); +} + +//Function Number: 4 +grenade_earthquake() +{ + thread endondeath(); + self endon("end_explode"); + self waittill("explode",var_00); + playrumbleonposition("grenade_rumble",var_00); + earthquake(0.5,0.75,var_00,800); + foreach(var_02 in level.players) + { + if(var_02 maps\mp\_utility::isusingremote()) + { + continue; + } + + if(distance(var_00,var_02.origin) > 600) + { + continue; + } + + if(var_02 damageconetrace(var_00)) + { + var_02 thread dirteffect(var_00); + } + } +} + +//Function Number: 5 +dirteffect(param_00) +{ + self endon("disconnect"); + var_01 = vectornormalize(anglestoforward(self.angles)); + var_02 = vectornormalize(anglestoright(self.angles)); + var_03 = vectornormalize(param_00 - self.origin); + var_04 = vectordot(var_03,var_01); + var_05 = vectordot(var_03,var_02); + var_06 = []; + if(var_04 > 0 && var_04 > 0.5 && self getcurrentweapon() != "riotshield_mp") + { + } + + if(abs(var_05) < 0.866) + { + if(var_06 > 0) + { + } + else + { + } + } + + foreach(var_08 in var_7B) + { + self openmenu(var_08); + } + + if(isalive(self)) + { + common_scripts\utility::waittill_notify_or_timeout("death",2); + } + + foreach(var_08 in var_7B) + { + self closemenu(var_08); + } +} + +//Function Number: 6 +bloodeffect(param_00) +{ + self endon("disconnect"); + var_01 = vectornormalize(anglestoforward(self.angles)); + var_02 = vectornormalize(anglestoright(self.angles)); + var_03 = vectornormalize(param_00 - self.origin); + var_04 = vectordot(var_03,var_01); + var_05 = vectordot(var_03,var_02); + var_06 = []; + if(var_04 > 0 && var_04 > 0.5) + { + } + + if(abs(var_05) < 0.866) + { + if(var_06 > 0) + { + } + else + { + } + } + + foreach(var_08 in var_7B) + { + self openmenu(var_08); + } + + if(isalive(self)) + { + common_scripts\utility::waittill_notify_or_timeout("death",7); + } + + foreach(var_08 in var_7B) + { + self closemenu(var_08); + } +} + +//Function Number: 7 +c4_earthquake() +{ + thread endondeath(); + self endon("end_explode"); + self waittill("explode",var_00); + playrumbleonposition("grenade_rumble",var_00); + earthquake(0.4,0.75,var_00,512); +} + +//Function Number: 8 +barrel_earthquake() +{ + playrumbleonposition("grenade_rumble",self.origin); + earthquake(0.4,0.5,self.origin,512); +} + +//Function Number: 9 +artillery_earthquake() +{ + playrumbleonposition("artillery_rumble",self.origin); + earthquake(0.7,0.5,self.origin,800); +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/gametypes/_spawnlogic.gsc b/MW3/PC/MP/maps/mp/gametypes/_spawnlogic.gsc new file mode 100644 index 0000000..0e4b63b --- /dev/null +++ b/MW3/PC/MP/maps/mp/gametypes/_spawnlogic.gsc @@ -0,0 +1,1611 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_spawnlogic.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 48 + * Decompile Time: 702 ms + * Timestamp: 10/27/2023 2:12:56 AM +*******************************************************************/ + +//Function Number: 1 +findboxcenter(param_00,param_01) +{ + var_02 = (0,0,0); + var_02 = param_01 - param_00; + var_02 = (var_02[0] / 2,var_02[1] / 2,var_02[2] / 2) + param_00; + return var_02; +} + +//Function Number: 2 +expandmins(param_00,param_01) +{ + if(param_00[0] > param_01[0]) + { + param_00 = (param_01[0],param_00[1],param_00[2]); + } + + if(param_00[1] > param_01[1]) + { + param_00 = (param_00[0],param_01[1],param_00[2]); + } + + if(param_00[2] > param_01[2]) + { + param_00 = (param_00[0],param_00[1],param_01[2]); + } + + return param_00; +} + +//Function Number: 3 +expandmaxs(param_00,param_01) +{ + if(param_00[0] < param_01[0]) + { + param_00 = (param_01[0],param_00[1],param_00[2]); + } + + if(param_00[1] < param_01[1]) + { + param_00 = (param_00[0],param_01[1],param_00[2]); + } + + if(param_00[2] < param_01[2]) + { + param_00 = (param_00[0],param_00[1],param_01[2]); + } + + return param_00; +} + +//Function Number: 4 +addspawnpoints(param_00,param_01,param_02) +{ + if(!isdefined(param_02)) + { + param_02 = 0; + } + + var_03 = []; + if(level.teamspawnpoints[param_00].size) + { + var_03 = level.teamspawnpoints[param_00]; + } + + level.teamspawnpoints[param_00] = getspawnpointarray(param_01); + if(!level.teamspawnpoints[param_00].size && !param_02) + { + maps\mp\gametypes\_callbacksetup::abortlevel(); + wait 1; + return; + } + + if(!isdefined(level.spawnpoints)) + { + level.spawnpoints = []; + } + + for(var_04 = 0;var_04 < level.teamspawnpoints[param_00].size;var_04++) + { + var_05 = level.teamspawnpoints[param_00][var_04]; + if(!isdefined(var_05.inited)) + { + var_05 spawnpointinit(); + level.spawnpoints[level.spawnpoints.size] = var_05; + } + } + + for(var_04 = 0;var_04 < var_03.size;var_04++) + { + var_06 = var_03[var_04].origin; + level.spawnmins = expandmins(level.spawnmins,var_06); + level.spawnmaxs = expandmaxs(level.spawnmaxs,var_06); + level.teamspawnpoints[param_00][level.teamspawnpoints[param_00].size] = var_03[var_04]; + } +} + +//Function Number: 5 +placespawnpoints(param_00) +{ + var_01 = getspawnpointarray(param_00); + if(!var_01.size) + { + maps\mp\gametypes\_callbacksetup::abortlevel(); + wait 1; + return; + } + + if(!isdefined(level.startspawnpoints)) + { + level.startspawnpoints = []; + } + + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + var_01[var_02] spawnpointinit(); + level.startspawnpoints[level.startspawnpoints.size] = var_01[var_02]; + } +} + +//Function Number: 6 +getspawnpointarray(param_00) +{ + var_01 = getentarray(param_00,"classname"); + if(!isdefined(level.extraspawnpoints) || !isdefined(level.extraspawnpoints[param_00])) + { + return var_01; + } + + for(var_02 = 0;var_02 < level.extraspawnpoints[param_00].size;var_02++) + { + var_01[var_01.size] = level.extraspawnpoints[param_00][var_02]; + } + + return var_01; +} + +//Function Number: 7 +expandspawnpointbounds(param_00) +{ + var_01 = getspawnpointarray(param_00); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + level.spawnmins = expandmins(level.spawnmins,var_01[var_02].origin); + level.spawnmaxs = expandmaxs(level.spawnmaxs,var_01[var_02].origin); + } +} + +//Function Number: 8 +setmapcenterforreflections() +{ + level.spawnmins = (0,0,0); + level.spawnmaxs = (0,0,0); + expandspawnpointbounds("mp_tdm_spawn_allies_start"); + expandspawnpointbounds("mp_tdm_spawn_axis_start"); + level.mapcenter = findboxcenter(level.spawnmins,level.spawnmaxs); + setmapcenter(level.mapcenter); +} + +//Function Number: 9 +spawnpointinit() +{ + var_00 = self; + var_01 = var_00.origin; + level.spawnmins = expandmins(level.spawnmins,var_01); + level.spawnmaxs = expandmaxs(level.spawnmaxs,var_01); + var_00 placespawnpoint(); + var_00.forward = anglestoforward(var_00.angles); + var_00.sighttracepoint = var_00.origin + (0,0,50); + var_00.lastspawnedplayer = var_00; + var_00.lastspawntime = gettime(); + var_02 = 1024; + var_00.outside = 1; + if(!bullettracepassed(var_00.sighttracepoint,var_00.sighttracepoint + (0,0,var_02),0,undefined)) + { + var_03 = var_00.sighttracepoint + var_00.forward * 100; + if(!bullettracepassed(var_03,var_03 + (0,0,var_02),0,undefined)) + { + var_00.outside = 0; + } + } + + var_04 = anglestoright(var_00.angles); + var_00.alternates = []; + addalternatespawnpoint(var_00,var_00.origin + var_04 * 45); + addalternatespawnpoint(var_00,var_00.origin - var_04 * 45); + spawnpointupdate(var_00); + var_00.inited = 1; +} + +//Function Number: 10 +addalternatespawnpoint(param_00,param_01) +{ + var_02 = playerphysicstrace(param_00.origin,param_00.origin + (0,0,18),0,undefined); + var_03 = var_02[2] - param_00.origin[2]; + var_04 = (param_01[0],param_01[1],param_01[2] + var_03); + var_05 = playerphysicstrace(var_02,var_04,0,undefined); + if(var_05 != var_04) + { + return; + } + + var_06 = playerphysicstrace(var_04,param_01); + param_00.alternates[param_00.alternates.size] = var_06; +} + +//Function Number: 11 +getteamspawnpoints(param_00) +{ + return level.teamspawnpoints[param_00]; +} + +//Function Number: 12 +getspawnpoint_final(param_00,param_01) +{ + var_02 = undefined; + if(!isdefined(param_00) || param_00.size == 0) + { + return undefined; + } + + if(!isdefined(param_01)) + { + param_01 = 1; + } + + if(param_01) + { + var_02 = getbestweightedspawnpoint(param_00); + } + else + { + var_03 = getentarray("care_package","targetname"); + for(var_04 = 0;var_04 < param_00.size;var_04++) + { + if(isdefined(self.lastspawnpoint) && self.lastspawnpoint == param_00[var_04]) + { + continue; + } + + if(positionwouldtelefrag(param_00[var_04].origin)) + { + continue; + } + + if(var_03.size && !canspawn(param_00[var_04].origin)) + { + continue; + } + + var_02 = param_00[var_04]; + break; + } + + if(!isdefined(var_02)) + { + if(isdefined(self.lastspawnpoint) && !positionwouldtelefrag(self.lastspawnpoint.origin)) + { + for(var_04 = 0;var_04 < param_00.size;var_04++) + { + if(param_00[var_04] == self.lastspawnpoint) + { + var_02 = param_00[var_04]; + break; + } + } + } + } + } + + if(!isdefined(var_02)) + { + if(param_01) + { + var_02 = param_00[randomint(param_00.size)]; + } + else + { + var_02 = param_00[0]; + } + } + + return var_02; +} + +//Function Number: 13 +finalizespawnpointchoice(param_00) +{ + var_01 = gettime(); + self.lastspawnpoint = param_00; + self.lastspawntime = var_01; + param_00.lastspawnedplayer = self; + param_00.lastspawntime = var_01; +} + +//Function Number: 14 +getbestweightedspawnpoint(param_00) +{ + var_01 = maps\mp\_utility::getotherteam(self.team); + var_02 = 0; + for(;;) + { + var_03 = []; + var_03[0] = param_00[0]; + var_04 = param_00[0].weight; + for(var_05 = 1;var_05 < param_00.size;var_05++) + { + var_06 = param_00[var_05]; + if(var_06.weight > var_04) + { + var_03 = []; + var_03[0] = var_06; + var_04 = var_06.weight; + continue; + } + + if(var_06.weight == var_04) + { + var_03[var_03.size] = var_06; + } + } + + var_07 = var_03[randomint(var_03.size)]; + if(var_02 >= 3) + { + return var_07; + } + + var_08 = 0; + if(level.teambased) + { + var_08 = var_07.sights[var_01]; + } + else + { + var_08 = var_07.sights; + } + + if(var_08 > 0) + { + return var_07; + } + + if(isdefined(var_07.lastsighttracetime) && var_07.lastsighttracetime == gettime()) + { + return var_07; + } + + var_09 = lastminutesighttraces(var_07); + if(var_09 == 0) + { + return var_07; + } + + var_09 = adjustsightvalue(var_09); + if(level.teambased) + { + var_07.sights[var_01] = var_07.sights[var_01] + var_09; + } + else + { + var_07.sights = var_07.sights + var_09; + } + + var_0A = getlospenalty() * var_09; + var_07.weight = var_07.weight - var_0A; + var_07.lastsighttracetime = gettime(); + var_02++; + } +} + +//Function Number: 15 +getspawnpoint_random(param_00) +{ + if(!isdefined(param_00)) + { + return undefined; + } + + for(var_01 = 0;var_01 < param_00.size;var_01++) + { + var_02 = randomint(param_00.size); + var_03 = param_00[var_01]; + param_00[var_01] = param_00[var_02]; + param_00[var_02] = var_03; + } + + if(isdefined(self.predictedspawnpoint)) + { + for(var_01 = 1;var_01 < param_00.size;var_01++) + { + if(param_00[var_01] == self.predictedspawnpoint) + { + var_04 = param_00[0]; + param_00[0] = param_00[var_01]; + param_00[var_01] = var_04; + break; + } + } + } + + return getspawnpoint_final(param_00,0); +} + +//Function Number: 16 +getallotherplayers() +{ + var_00 = []; + for(var_01 = 0;var_01 < level.players.size;var_01++) + { + if(!isdefined(level.players[var_01])) + { + continue; + } + + var_02 = level.players[var_01]; + if(var_02.sessionstate != "playing" || var_02 == self) + { + continue; + } + + var_00[var_00.size] = var_02; + } + + return var_00; +} + +//Function Number: 17 +initweights(param_00) +{ + for(var_01 = 0;var_01 < param_00.size;var_01++) + { + param_00[var_01].weight = 0; + } +} + +//Function Number: 18 +getspawnpoint_nearteam(param_00,param_01) +{ + if(!isdefined(param_00)) + { + return undefined; + } + + spawnlogic_begin(); + initweights(param_00); + var_02 = 2; + var_03 = self.team; + var_04 = maps\mp\_utility::getotherteam(var_03); + var_05 = getentarray("care_package","targetname"); + foreach(var_07 in param_00) + { + if(var_07.numplayersatlastupdate > 0) + { + var_08 = var_07.weighteddistsum[var_03]; + var_09 = var_07.distsum[var_04]; + var_07.weight = var_09 - var_02 * var_08 / var_07.numplayersatlastupdate; + if(isdefined(level.favorclosespawnent)) + { + if(!isdefined(level.favorclosespawnscalar)) + { + level.favorclosespawnscalar = 1; + } + + var_0A = distance(var_07.origin,level.favorclosespawnent.origin); + var_07.weight = var_07.weight - var_0A * level.favorclosespawnscalar; + } + } + else + { + var_07.weight = 0; + } + + if(var_05.size && !canspawn(var_07.origin)) + { + var_07.weight = var_07.weight - 500000; + } + } + + if(isdefined(param_01)) + { + for(var_0C = 0;var_0C < param_01.size;var_0C++) + { + param_01[var_0C].weight = param_01[var_0C].weight + -15536; + } + } + + if(isdefined(self.predictedspawnpoint) && isdefined(self.predictedspawnpoint.weight)) + { + self.predictedspawnpoint.weight = self.predictedspawnpoint.weight + 100; + } + + avoidsamespawn(); + avoidweapondamage(param_00); + avoidvisibleenemies(param_00,1); + if(isdefined(self.lastdeathpos) && level.gametype != "dom") + { + avoidrevengespawn(param_00,self.lastdeathpos); + } + + var_0D = getspawnpoint_final(param_00); + return var_0D; +} + +//Function Number: 19 +getspawnpoint_safespawn(param_00) +{ + if(!isdefined(param_00)) + { + return undefined; + } + + spawnlogic_begin(); + var_01 = undefined; + var_02 = undefined; + var_03 = maps\mp\_utility::getotherteam(self.team); + if(!level.teambased) + { + var_03 = "all"; + } + + var_04 = 250000; + foreach(var_06 in param_00) + { + var_07 = var_06.mindist[var_03]; + foreach(var_09 in level.grenades) + { + if(!isdefined(var_09)) + { + continue; + } + + if(distancesquared(var_06.origin,var_09.origin) < var_04) + { + var_0A = distance(var_06.origin,var_09.origin) - 220; + if(var_0A < var_07) + { + if(var_0A < 0) + { + var_0A = 0; + } + + var_07 = var_0A; + } + } + } + + if(positionwouldtelefrag(var_06.origin)) + { + var_07 = var_07 - 200; + } + + if(isdefined(level.artillerydangercenters)) + { + var_0C = maps\mp\killstreaks\_airstrike::getairstrikedanger(var_06.origin); + if(var_0C > 0) + { + var_07 = 0; + } + } + + if(level.teambased) + { + if(var_06.sights[var_03] > 0) + { + var_07 = 0; + } + } + else if(var_06.sights > 0) + { + var_07 = 0; + } + + if(!isdefined(var_01) || var_07 > var_02) + { + var_01 = var_06; + var_02 = var_07; + } + } + + if(!isdefined(var_01)) + { + var_01 = param_00[randomint(param_00.size)]; + var_01.safespawndangerdist = 500; + } + else + { + var_01.safespawndangerdist = var_02; + } + + return var_01; +} + +//Function Number: 20 +getspawnpoint_dm(param_00) +{ + if(!isdefined(param_00)) + { + return undefined; + } + + spawnlogic_begin(); + initweights(param_00); + var_01 = getallotherplayers(); + var_02 = 1600; + var_03 = 1200; + if(var_01.size > 0) + { + for(var_04 = 0;var_04 < param_00.size;var_04++) + { + var_05 = 0; + var_06 = 0; + for(var_07 = 0;var_07 < var_01.size;var_07++) + { + var_08 = distance(param_00[var_04].origin,var_01[var_07].origin); + if(var_08 < var_03) + { + var_06 = var_06 + var_03 - var_08 / var_03; + } + + var_09 = abs(var_08 - var_02); + var_05 = var_05 + var_09; + } + + var_0A = var_05 / var_01.size; + var_0B = var_02 - var_0A / var_02; + param_00[var_04].weight = var_0B - var_06 * 2 + randomfloat(0.2); + } + } + + var_0C = getentarray("care_package","targetname"); + for(var_04 = 0;var_04 < param_00.size;var_04++) + { + if(var_0C.size && !canspawn(param_00[var_04].origin)) + { + param_00[var_04].weight = param_00[var_04].weight - 500000; + } + } + + if(isdefined(self.predictedspawnpoint) && isdefined(self.predictedspawnpoint.weight)) + { + self.predictedspawnpoint.weight = self.predictedspawnpoint.weight + 100; + } + + avoidsamespawn(); + avoidweapondamage(param_00); + avoidvisibleenemies(param_00,0); + return getspawnpoint_final(param_00); +} + +//Function Number: 21 +spawnlogic_begin() +{ +} + +//Function Number: 22 +init() +{ + setupkillstreakspawnshield(); + level.spawnlogic_deaths = []; + level.spawnlogic_spawnkills = []; + level.players = []; + level.grenades = []; + level.pipebombs = []; + level.turrets = []; + level.helis = []; + level.tanks = []; + level.scramblers = []; + level.ims = []; + level.ugvs = []; + level.teamspawnpoints["axis"] = []; + level.teamspawnpoints["allies"] = []; + level thread trackgrenades(); + level thread trackmissiles(); + level.spawnmins = (0,0,0); + level.spawnmaxs = (0,0,0); + if(isdefined(level.safespawns)) + { + for(var_00 = 0;var_00 < level.safespawns.size;var_00++) + { + level.safespawns[var_00] spawnpointinit(); + } + } +} + +//Function Number: 23 +sightcheckcost() +{ + var_00 = 30; + for(;;) + { + var_01 = getdvar("scr_debugcost"); + if(var_01 == "bullet" && isdefined(level.players[0])) + { + for(var_02 = 0;var_02 < var_00;var_02++) + { + bullettracepassed(level.players[0].origin + (0,0,50),(0,0,0),0,undefined); + } + } + else if(var_01 == "damagecone" && isdefined(level.players[0])) + { + for(var_02 = 0;var_02 < var_00;var_02++) + { + level.players[0] damageconetrace((0,0,0)); + } + } + else if(var_01 == "sightcone" && isdefined(level.players[0])) + { + for(var_02 = 0;var_02 < var_00;var_02++) + { + level.players[0] sightconetrace((0,0,0)); + } + } + else + { + wait 1; + } + + wait 0.05; + } +} + +//Function Number: 24 +watchspawnprofile() +{ + for(;;) + { + while(getdvar("scr_spawnprofile") == "" || getdvar("scr_spawnprofile") == "0") + { + wait 0.05; + } + + thread spawnprofile(); + while(getdvar("scr_spawnprofile") != "" && getdvar("scr_spawnprofile") != "0") + { + wait 0.05; + } + + level notify("stop_spawn_profile"); + } +} + +//Function Number: 25 +spawnprofile() +{ + level endon("stop_spawn_profile"); + var_00 = spawnstruct(); + for(;;) + { + var_01 = getdvar("scr_spawnprofile"); + if(var_01 != "allies" && var_01 != "axis") + { + if(common_scripts\utility::cointoss()) + { + var_01 = "allies"; + } + else + { + var_01 = "axis"; + } + } + + var_00.team = var_01; + var_00.pers["team"] = var_01; + var_00 getspawnpoint_nearteam(level.spawnpoints); + wait 0.05; + } +} + +//Function Number: 26 +spawngraphcheck() +{ + for(;;) + { + if(getdvarint("scr_spawngraph") < 1) + { + wait 3; + continue; + } + + thread spawngraph(); + while(getdvarint("scr_spawngraph") >= 1) + { + wait 0.2; + continue; + } + + level notify("end_spawn_graph"); + level notify("spawn_graph_stop_draw"); + } +} + +//Function Number: 27 +spawngraph() +{ + level endon("end_spawn_graph"); + var_00 = 20; + var_01 = 20; + var_02 = 0.1; + var_03 = []; + var_04 = getentarray("minimap_corner","targetname"); + if(var_04.size != 2) + { + return; + } + + var_05 = var_04[0].origin; + var_06 = var_04[0].origin; + if(var_04[1].origin[0] > var_06[0]) + { + var_06 = (var_04[1].origin[0],var_06[1],var_06[2]); + } + else + { + var_05 = (var_04[1].origin[0],var_05[1],var_05[2]); + } + + if(var_04[1].origin[1] > var_06[1]) + { + var_06 = (var_06[0],var_04[1].origin[1],var_06[2]); + } + else + { + var_05 = (var_05[0],var_04[1].origin[1],var_05[2]); + } + + var_07 = 0; + for(var_08 = 0;var_08 < var_01;var_08++) + { + var_09 = var_08 / var_01 - 1; + for(var_0A = 0;var_0A < var_00;var_0A++) + { + var_0B = var_0A / var_00 - 1; + var_03[var_07] = spawnstruct(); + var_03[var_07].origin = (var_05[0] * var_0B + var_06[0] * 1 - var_0B,var_05[1] * var_09 + var_06[1] * 1 - var_09,var_05[2]); + var_03[var_07].angles = (0,0,0); + var_03[var_07].forward = anglestoforward(var_03[var_07].angles); + var_03[var_07].sighttracepoint = var_03[var_07].origin; + var_03[var_07].outside = 1; + var_03[var_07].secondfloor = 0; + var_03[var_07].fake = 1; + var_07++; + } + } + + var_0C = 0; + for(;;) + { + var_0D = 0; + var_0E = 10; + for(var_07 = 0;var_07 < var_0E;var_07++) + { + if(!level.players.size || !isdefined(level.players[0].team) || level.players[0].team == "spectator" || !isdefined(level.players[0].class)) + { + break; + } + + var_0F = var_0D + var_03.size / var_0E; + if(var_07 == var_0E - 1) + { + var_0F = var_03.size; + } + + while(var_0D < var_0F) + { + spawnpointupdate(var_03[var_0D]); + var_0D++; + } + + wait 0.05; + } + + if(!level.players.size || !isdefined(level.players[0].team) || level.players[0].team == "spectator" || !isdefined(level.players[0].class)) + { + wait 1; + continue; + } + + level.players[0] getspawnpoint_nearteam(var_03); + for(var_07 = 0;var_07 < var_03.size;var_07++) + { + setupspawngraphpoint(var_03[var_07],var_02); + } + + var_0C = 1; + level.players[0] drawspawngraph(var_03,var_00,var_01,var_02); + wait 0.05; + } +} + +//Function Number: 28 +drawspawngraph(param_00,param_01,param_02,param_03) +{ + level notify("spawn_graph_stop_draw"); + var_04 = 0; + for(var_05 = 0;var_05 < param_02;var_05++) + { + var_06 = var_05 / param_02 - 1; + for(var_07 = 0;var_07 < param_01;var_07++) + { + var_08 = var_07 / param_01 - 1; + if(var_05 > 0) + { + thread spawngraphline(param_00[var_04],param_00[var_04 - param_01],param_03); + } + + if(var_07 > 0) + { + thread spawngraphline(param_00[var_04],param_00[var_04 - 1],param_03); + } + + var_04++; + } + } +} + +//Function Number: 29 +setupspawngraphpoint(param_00,param_01) +{ + param_00.visible = 1; + if(param_00.weight < -1000 / param_01) + { + param_00.visible = 0; + } +} + +//Function Number: 30 +spawngraphline(param_00,param_01,param_02) +{ + if(!param_00.visible || !param_01.visible) + { + return; + } + + var_03 = param_00.origin + (0,0,param_00.weight * param_02 + 100); + var_04 = param_01.origin + (0,0,param_01.weight * param_02 + 100); + level endon("spawn_graph_stop_draw"); + for(;;) + { + wait 0.05; + waittillframeend; + } +} + +//Function Number: 31 +loopbotspawns() +{ + for(;;) + { + if(getdvarint("scr_killbots") < 1) + { + wait 3; + continue; + } + + if(!isdefined(level.players)) + { + wait 0.05; + continue; + } + + var_00 = []; + for(var_01 = 0;var_01 < level.players.size;var_01++) + { + if(!isdefined(level.players[var_01])) + { + continue; + } + + if(level.players[var_01].sessionstate == "playing" && issubstr(level.players[var_01].name,"bot")) + { + var_00[var_00.size] = level.players[var_01]; + } + } + + if(var_00.size > 0) + { + if(getdvarint("scr_killbots") == 1) + { + var_02 = var_00[randomint(var_00.size)]; + var_03 = var_00[randomint(var_00.size)]; + var_03 thread [[ level.callbackplayerdamage ]](var_02,var_02,1000,0,"MOD_RIFLE_BULLET","none",(0,0,0),(0,0,0),"none",0); + } + else + { + var_04 = getdvarint("scr_killbots"); + var_05 = undefined; + for(var_06 = 0;var_06 < var_04;var_06++) + { + var_02 = var_00[randomint(var_00.size)]; + var_03 = var_00[randomint(var_00.size)]; + while(isdefined(var_05) && var_03 == var_05) + { + var_03 = var_00[randomint(var_00.size)]; + } + + var_03 thread [[ level.callbackplayerdamage ]](var_02,var_02,1000,0,"MOD_RIFLE_BULLET","none",(0,0,0),(0,0,0),"none",0); + var_05 = var_03; + } + } + } + + if(getdvarfloat("scr_killbottimer") > 0.05) + { + wait getdvarfloat("scr_killbottimer"); + continue; + } + + wait 0.05; + } +} + +//Function Number: 32 +trackgrenades() +{ + for(;;) + { + level.grenades = getentarray("grenade","classname"); + wait 0.05; + } +} + +//Function Number: 33 +trackmissiles() +{ + for(;;) + { + level.missiles = getentarray("rocket","classname"); + wait 0.05; + } +} + +//Function Number: 34 +ispointvulnerable(param_00) +{ + var_01 = self.origin + level.claymoremodelcenteroffset; + var_02 = param_00 + (0,0,32); + var_03 = distancesquared(var_01,var_02); + var_04 = anglestoforward(self.angles); + if(var_03 < level.claymoredetectionradius * level.claymoredetectionradius) + { + var_05 = vectornormalize(var_02 - var_01); + var_06 = acos(vectordot(var_05,var_04)); + if(var_06 < level.claymoredetectionconeangle) + { + return 1; + } + } + + return 0; +} + +//Function Number: 35 +avoidweapondamage(param_00) +{ + var_01 = 100000; + if(getdvar("scr_spawnpointweaponpenalty") != "" && getdvar("scr_spawnpointweaponpenalty") != "0") + { + var_01 = getdvarfloat("scr_spawnpointweaponpenalty"); + } + + var_02 = -3036; + for(var_03 = 0;var_03 < param_00.size;var_03++) + { + for(var_04 = 0;var_04 < level.grenades.size;var_04++) + { + if(!isdefined(level.grenades[var_04])) + { + continue; + } + + if(distancesquared(param_00[var_03].origin,level.grenades[var_04].origin) < var_02) + { + param_00[var_03].weight = param_00[var_03].weight - var_01; + } + } + + foreach(var_06 in level.mines) + { + if(!isdefined(var_06)) + { + continue; + } + + if(distancesquared(param_00[var_03].origin,var_06.origin) < var_02) + { + param_00[var_03].weight = param_00[var_03].weight - var_01; + } + } + + if(!isdefined(level.artillerydangercenters)) + { + continue; + } + + var_08 = maps\mp\killstreaks\_airstrike::getairstrikedanger(param_00[var_03].origin); + if(var_08 > 0) + { + var_09 = var_08 * var_01; + param_00[var_03].weight = param_00[var_03].weight - var_09; + } + } +} + +//Function Number: 36 +spawnperframeupdate() +{ + var_00 = 0; + for(;;) + { + wait 0.05; + if(!isdefined(level.spawnpoints)) + { + return; + } + + var_00 = var_00 + 1 % level.spawnpoints.size; + if(getdvar("scr_spawnpoint_forceindex") != "") + { + var_00 = getdvarint("scr_spawnpoint_forceindex"); + } + + var_01 = level.spawnpoints[var_00]; + spawnpointupdate(var_01); + } +} + +//Function Number: 37 +adjustsightvalue(param_00) +{ + if(param_00 <= 0) + { + return 0; + } + + if(param_00 >= 1) + { + return 1; + } + + return param_00 * 0.5 + 0.25; +} + +//Function Number: 38 +spawnpointupdate(param_00) +{ + if(level.teambased) + { + param_00.sights["axis"] = 0; + param_00.sights["allies"] = 0; + } + else + { + param_00.sights = 0; + } + + var_01 = param_00.forward; + var_02 = 0; + param_00.distsum["all"] = 0; + param_00.distsum["allies"] = 0; + param_00.distsum["axis"] = 0; + param_00.weighteddistsum["all"] = 0; + param_00.weighteddistsum["allies"] = 0; + param_00.weighteddistsum["axis"] = 0; + param_00.mindist["all"] = 9999999; + param_00.mindist["allies"] = 9999999; + param_00.mindist["axis"] = 9999999; + param_00.numplayersatlastupdate = 0; + var_03["all"] = 0; + param_00["all"] = 0; + var_05 = undefined; + var_06 = gettime(); + var_07 = "all"; + var_08 = level.teambased; + foreach(var_0A in level.players) + { + if(var_0A.sessionstate != "playing") + { + continue; + } + + var_0B = var_0A.origin - param_00.origin; + var_0B = (var_0B[0],var_0B[1],0); + var_0C = 1; + var_0D = length(var_0B); + if(var_08) + { + var_07 = var_0A.team; + } + + if(var_0D < param_00.mindist[var_07]) + { + param_00.mindist[var_07] = var_0D; + } + + if(var_0A.wasti && var_06 - var_0A.spawntime < 15000) + { + var_0C = var_0C * 0.1; + } + + if(var_0A.issniper) + { + var_0C = var_0C * 0.5; + } + + var_7B[var_07] = var_7B[var_07] + var_0C; + param_00.weighteddistsum[var_07] = param_00.weighteddistsum[var_07] + var_0D * var_0C; + param_00.distsum[var_07] = param_00.distsum[var_07] + var_0D; + param_00.numplayersatlastupdate++ = var_7B["axis"]; + var_03[var_07]++ = 0; + var_0E = anglestoforward(var_0A.angles); + if(vectordot(var_01,var_0B) < 0 && vectordot(var_0E,var_0B) > 0) + { + continue; + } + + var_0F = spawnsighttrace(param_00,param_00.sighttracepoint,var_0A.origin + (0,0,50)); + param_00.lastsighttracetime = gettime(); + if(var_0F > 0) + { + var_0F = adjustsightvalue(var_0F); + if(var_08) + { + param_00.sights[var_07] = param_00.sights[var_07] + var_0F; + continue; + } + + param_00.sights = param_00.sights + var_0F; + } + } + + var_11 = maps\mp\_utility::getfloatproperty("scr_spawn_enemyavoiddist",2000); + var_12 = 2000; + foreach(var_07, var_14 in var_7B) + { + if(var_7B[var_07]) + { + param_00.weighteddistsum[var_07] = param_00.weighteddistsum[var_07] / var_7B[var_07] * var_03[var_07]; + } + + var_15 = 0; + if(param_00.mindist[var_07] < var_11) + { + var_15 = var_12 * 1 - param_00.mindist[var_07] / var_11; + } + + param_00.nearbypenalty[var_07] = var_15; + } + + foreach(var_17 in level.tanks) + { + var_0F = spawnsighttrace(param_00,param_00.sighttracepoint,var_17.origin + (0,0,50)); + param_00.lastsighttracetime = gettime(); + if(var_0F <= 0) + { + continue; + } + + var_0F = adjustsightvalue(var_0F); + if(var_08) + { + param_00.sights[var_17.team] = param_00.sights[var_17.team] + var_0F; + continue; + } + + param_00.sights = param_00.sights + var_0F; + } + + foreach(var_1A in level.turrets) + { + if(!isdefined(var_1A)) + { + continue; + } + + var_0F = spawnsighttrace(param_00,param_00.sighttracepoint,var_1A.origin + (0,0,50)); + param_00.lastsighttracetime = gettime(); + if(var_0F <= 0) + { + continue; + } + + var_0F = adjustsightvalue(var_0F); + if(var_08) + { + param_00.sights[var_1A.team] = param_00.sights[var_1A.team] + var_0F; + continue; + } + + param_00.sights = param_00.sights + var_0F; + } + + foreach(var_1D in level.ims) + { + if(!isdefined(var_1D)) + { + continue; + } + + if(!isdefined(var_1D.attackheightpos)) + { + continue; + } + + var_0F = spawnsighttrace(param_00,param_00.sighttracepoint,var_1D.attackheightpos); + param_00.lastsighttracetime = gettime(); + if(var_0F <= 0) + { + continue; + } + + var_0F = adjustsightvalue(var_0F); + if(var_08) + { + param_00.sights[var_1D.team] = param_00.sights[var_1D.team] + var_0F; + continue; + } + + param_00.sights = param_00.sights + var_0F; + } + + foreach(var_20 in level.ugvs) + { + if(!isdefined(var_20)) + { + continue; + } + + var_0F = spawnsighttrace(param_00,param_00.sighttracepoint,var_20.origin + (0,0,50)); + param_00.lastsighttracetime = gettime(); + if(var_0F <= 0) + { + continue; + } + + var_0F = adjustsightvalue(var_0F); + if(var_08) + { + param_00.sights[var_20.team] = param_00.sights[var_20.team] + var_0F; + continue; + } + + param_00.sights = param_00.sights + var_0F; + } +} + +//Function Number: 39 +getlospenalty() +{ + if(getdvar("scr_spawnpointlospenalty") != "" && getdvar("scr_spawnpointlospenalty") != "0") + { + return getdvarfloat("scr_spawnpointlospenalty"); + } + + return 100000; +} + +//Function Number: 40 +lastminutesighttraces(param_00) +{ + var_01 = undefined; + var_02 = 1E+08; + var_03 = undefined; + var_04 = 1E+08; + foreach(var_06 in level.players) + { + if(var_06.team == self.team && level.teambased) + { + continue; + } + + if(var_06.sessionstate != "playing") + { + continue; + } + + if(var_06 == self) + { + continue; + } + + var_07 = distancesquared(param_00.origin,var_06.origin); + if(var_07 < var_02) + { + var_03 = var_01; + var_04 = var_02; + var_01 = var_06; + var_02 = var_07; + continue; + } + + if(var_07 < var_04) + { + var_03 = var_06; + var_04 = var_07; + } + } + + if(isdefined(var_01)) + { + var_09 = spawnsighttrace(param_00,param_00.sighttracepoint,var_01.origin + (0,0,50)); + if(var_09 > 0) + { + var_09 = adjustsightvalue(var_09); + return var_09; + } + } + + if(isdefined(var_03)) + { + var_09 = spawnsighttrace(param_00,param_00.sighttracepoint,var_03.origin + (0,0,50)); + if(var_09 > 0) + { + var_09 = adjustsightvalue(var_09); + return var_09; + } + } + + return 0; +} + +//Function Number: 41 +getrevengespawnpenalty() +{ + var_00 = getdvarfloat("scr_revengespawnpenalty",25000); + return var_00; +} + +//Function Number: 42 +getrevengespawndistancesq() +{ + var_00 = getdvarfloat("scr_revengespawndist",1200); + return var_00 * var_00; +} + +//Function Number: 43 +avoidrevengespawn(param_00,param_01) +{ + var_02 = getrevengespawndistancesq(); + var_03 = getrevengespawnpenalty(); + foreach(var_05 in param_00) + { + var_06 = distancesquared(var_05.origin,param_01); + if(var_06 < var_02) + { + var_05.weight = var_05.weight - var_03; + } + } + + if(isdefined(self.lastattacker) && isdefined(self.lastattacker.origin)) + { + avoidrevengespawnstage2(param_00,self.lastattacker.origin); + } +} + +//Function Number: 44 +avoidrevengespawnstage2(param_00,param_01) +{ + var_02 = getrevengespawndistancesq(); + var_03 = getrevengespawnpenalty(); + foreach(var_05 in param_00) + { + var_06 = distancesquared(var_05.origin,param_01); + if(var_06 < var_02) + { + var_05.weight = var_05.weight - var_03; + } + } +} + +//Function Number: 45 +avoidvisibleenemies(param_00,param_01) +{ + var_02 = getlospenalty(); + var_03 = "axis"; + if(self.team == "axis") + { + var_03 = "allies"; + } + + if(param_01) + { + foreach(var_05 in param_00) + { + var_06 = var_02 * var_05.sights[var_03]; + var_05.weight = var_05.weight - var_06; + } + } + else + { + foreach(var_05 in var_02) + { + var_06 = var_02 * var_05.sights; + var_05.weight = var_05.weight - var_06; + } + + var_03 = "all"; + } + + foreach(var_05 in param_00) + { + var_05.weight = var_05.weight - var_05.nearbypenalty[var_03]; + if(positionwouldtelefrag(var_05.origin)) + { + var_0B = 1; + foreach(var_0D in var_05.alternates) + { + if(positionwouldtelefrag(var_0D)) + { + var_0B++; + continue; + } + + break; + } + + var_06 = 100000; + if(var_0B < var_05.alternates.size + 1) + { + var_06 = 1500 * var_0B; + if(isdefined(self.forcespawnnearteammates)) + { + var_06 = 0; + } + } + + var_05.weight = var_05.weight - var_06; + } + } +} + +//Function Number: 46 +avoidspawnreuse(param_00,param_01) +{ + var_02 = gettime(); + var_03 = 10000; + var_04 = 1048576; + foreach(var_06 in param_00) + { + var_07 = var_06.lastspawnedplayer; + if(!isalive(var_07)) + { + continue; + } + + if(param_01 && var_06.lastspawnedplayer.team == self.team) + { + continue; + } + + if(var_06.lastspawnedplayer == self) + { + continue; + } + + var_08 = var_02 - var_06.lastspawntime; + if(var_08 < var_03) + { + var_09 = distancesquared(var_06.lastspawnedplayer.origin,var_06.origin); + if(var_09 < var_04) + { + var_0A = 5000 * 1 - var_09 / var_04 * 1 - var_08 / var_03; + var_06.weight = var_06.weight - var_0A; + } + else + { + var_06.lastspawnedplayer = undefined; + } + + continue; + } + + var_06.lastspawnedplayer = undefined; + } +} + +//Function Number: 47 +avoidsamespawn() +{ + var_00 = self.lastspawnpoint; + if(!isdefined(var_00) || !isdefined(var_00.weight)) + { + return; + } + + var_00.weight = var_00.weight - 1000; +} + +//Function Number: 48 +setupkillstreakspawnshield() +{ + level.killstreakspawnshield = 5000; + if(getdvar("killstreakSpawnShield") != "") + { + var_00 = getdvarint("killstreakSpawnShield"); + if(var_00 >= 0 && var_00 <= 10000) + { + level.killstreakspawnshield = var_00; + } + } +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/gametypes/_spectating.gsc b/MW3/PC/MP/maps/mp/gametypes/_spectating.gsc new file mode 100644 index 0000000..a402e06 --- /dev/null +++ b/MW3/PC/MP/maps/mp/gametypes/_spectating.gsc @@ -0,0 +1,161 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_spectating.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 8 + * Decompile Time: 130 ms + * Timestamp: 10/27/2023 2:12:57 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level.spectateoverride["allies"] = spawnstruct(); + level.spectateoverride["axis"] = spawnstruct(); + level thread onplayerconnect(); +} + +//Function Number: 2 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_00 thread onjoinedteam(); + var_00 thread onjoinedspectators(); + var_00 thread onspectatingclient(); + } +} + +//Function Number: 3 +onjoinedteam() +{ + self endon("disconnect"); + for(;;) + { + self waittill("joined_team"); + setspectatepermissions(); + } +} + +//Function Number: 4 +onjoinedspectators() +{ + self endon("disconnect"); + for(;;) + { + self waittill("joined_spectators"); + setspectatepermissions(); + } +} + +//Function Number: 5 +onspectatingclient() +{ + self endon("disconnect"); + for(;;) + { + self waittill("spectating_cycle"); + var_00 = self getspectatingplayer(); + if(isdefined(var_00)) + { + self setcarddisplayslot(var_00,6); + } + } +} + +//Function Number: 6 +updatespectatesettings() +{ + level endon("game_ended"); + for(var_00 = 0;var_00 < level.players.size;var_00++) + { + level.players[var_00] setspectatepermissions(); + } +} + +//Function Number: 7 +getotherteam(param_00) +{ + if(param_00 == "axis") + { + return "allies"; + } + + if(param_00 == "allies") + { + return "axis"; + } + + return "none"; +} + +//Function Number: 8 +setspectatepermissions() +{ + var_00 = self.sessionteam; + if(level.gameended && gettime() - level.gameendtime >= 2000) + { + self allowspectateteam("allies",0); + self allowspectateteam("axis",0); + self allowspectateteam("freelook",0); + self allowspectateteam("none",1); + return; + } + + var_01 = maps\mp\gametypes\_tweakables::gettweakablevalue("game","spectatetype"); + switch(var_01) + { + case 0: + self allowspectateteam("allies",0); + self allowspectateteam("axis",0); + self allowspectateteam("freelook",0); + self allowspectateteam("none",0); + break; + + case 1: + if(!level.teambased) + { + self allowspectateteam("allies",1); + self allowspectateteam("axis",1); + self allowspectateteam("none",1); + self allowspectateteam("freelook",0); + } + else if(isdefined(var_00) && var_00 == "allies" || var_00 == "axis") + { + self allowspectateteam(var_00,1); + self allowspectateteam(getotherteam(var_00),0); + self allowspectateteam("freelook",0); + self allowspectateteam("none",0); + } + else + { + self allowspectateteam("allies",0); + self allowspectateteam("axis",0); + self allowspectateteam("freelook",0); + self allowspectateteam("none",0); + } + break; + + case 2: + self allowspectateteam("allies",1); + self allowspectateteam("axis",1); + self allowspectateteam("freelook",1); + self allowspectateteam("none",1); + break; + } + + if(isdefined(var_00) && var_00 == "axis" || var_00 == "allies") + { + if(isdefined(level.spectateoverride[var_00].allowfreespectate)) + { + self allowspectateteam("freelook",1); + } + + if(isdefined(level.spectateoverride[var_00].allowenemyspectate)) + { + self allowspectateteam(getotherteam(var_00),1); + } + } +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/gametypes/_teams.gsc b/MW3/PC/MP/maps/mp/gametypes/_teams.gsc new file mode 100644 index 0000000..29b2919 --- /dev/null +++ b/MW3/PC/MP/maps/mp/gametypes/_teams.gsc @@ -0,0 +1,1020 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_teams.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 41 + * Decompile Time: 574 ms + * Timestamp: 10/27/2023 2:12:59 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + initscoreboard(); + level.teambalance = getdvarint("scr_teambalance"); + level.maxclients = getdvarint("sv_maxclients"); + level._effect["thermal_beacon"] = loadfx("misc/thermal_beacon_inverted"); + var_00 = level._effect["thermal_beacon"]; + precachefxteamthermal(var_00,"J_Spine4"); + setplayermodels(); + level.freeplayers = []; + if(level.teambased) + { + level thread onplayerconnect(); + level thread updateteambalance(); + wait 0.15; + level thread updateplayertimes(); + return; + } + + level thread onfreeplayerconnect(); + wait 0.15; + level thread updatefreeplayertimes(); +} + +//Function Number: 2 +initscoreboard() +{ + setdvar("g_TeamName_Allies",getteamshortname("allies")); + setdvar("g_TeamIcon_Allies",getteamicon("allies")); + setdvar("g_TeamIcon_MyAllies",getteamicon("allies")); + setdvar("g_TeamIcon_EnemyAllies",getteamicon("allies")); + var_00 = getteamcolor("allies"); + setdvar("g_ScoresColor_Allies",var_00[0] + " " + var_00[1] + " " + var_00[2]); + setdvar("g_TeamName_Axis",getteamshortname("axis")); + setdvar("g_TeamIcon_Axis",getteamicon("axis")); + setdvar("g_TeamIcon_MyAxis",getteamicon("axis")); + setdvar("g_TeamIcon_EnemyAxis",getteamicon("axis")); + var_00 = getteamcolor("axis"); + setdvar("g_ScoresColor_Axis",var_00[0] + " " + var_00[1] + " " + var_00[2]); + setdvar("g_ScoresColor_Spectator",".25 .25 .25"); + setdvar("g_ScoresColor_Free",".76 .78 .10"); + setdvar("g_teamTitleColor_MyTeam",".6 .8 .6"); + setdvar("g_teamTitleColor_EnemyTeam","1 .45 .5"); +} + +//Function Number: 3 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_00 thread onjoinedteam(); + var_00 thread onjoinedspectators(); + var_00 thread onplayerspawned(); + var_00 thread trackplayedtime(); + } +} + +//Function Number: 4 +onfreeplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_00 thread trackfreeplayedtime(); + } +} + +//Function Number: 5 +onjoinedteam() +{ + self endon("disconnect"); + for(;;) + { + self waittill("joined_team"); + updateteamtime(); + } +} + +//Function Number: 6 +onjoinedspectators() +{ + self endon("disconnect"); + for(;;) + { + self waittill("joined_spectators"); + self.pers["teamTime"] = undefined; + } +} + +//Function Number: 7 +trackplayedtime() +{ + self endon("disconnect"); + self.timeplayed["allies"] = 0; + self.timeplayed["axis"] = 0; + self.timeplayed["free"] = 0; + self.timeplayed["other"] = 0; + self.timeplayed["total"] = 0; + maps\mp\_utility::gameflagwait("prematch_done"); + for(;;) + { + if(game["state"] == "playing") + { + if(self.sessionteam == "allies") + { + self.timeplayed["allies"]++; + self.timeplayed["total"]++; + } + else if(self.sessionteam == "axis") + { + self.timeplayed["axis"]++; + self.timeplayed["total"]++; + } + else if(self.sessionteam == "spectator") + { + self.timeplayed["other"]++; + } + } + + wait 1; + } +} + +//Function Number: 8 +updateplayertimes() +{ + if(!level.rankedmatch) + { + return; + } + + level endon("game_ended"); + for(;;) + { + maps\mp\gametypes\_hostmigration::waittillhostmigrationdone(); + foreach(var_01 in level.players) + { + var_01 updateplayedtime(); + } + + wait 1; + } +} + +//Function Number: 9 +updateplayedtime() +{ + if(!maps\mp\_utility::rankingenabled()) + { + return; + } + + if(self.timeplayed["allies"]) + { + maps\mp\gametypes\_persistance::stataddbuffered("timePlayedAllies",self.timeplayed["allies"]); + maps\mp\gametypes\_persistance::stataddbuffered("timePlayedTotal",self.timeplayed["allies"]); + maps\mp\gametypes\_persistance::stataddchildbuffered("round","timePlayed",self.timeplayed["allies"]); + if(!self.prestigedoublexp) + { + maps\mp\gametypes\_persistance::stataddchildbufferedwithmax("xpMultiplierTimePlayed",0,self.timeplayed["allies"],self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][0]); + maps\mp\gametypes\_persistance::stataddchildbufferedwithmax("xpMultiplierTimePlayed",1,self.timeplayed["allies"],self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][1]); + maps\mp\gametypes\_persistance::stataddchildbufferedwithmax("xpMultiplierTimePlayed",2,self.timeplayed["allies"],self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][2]); + } + + maps\mp\gametypes\_persistance::stataddchildbufferedwithmax("challengeXPMultiplierTimePlayed",0,self.timeplayed["allies"],self.bufferedchildstatsmax["challengeXPMaxMultiplierTimePlayed"][0]); + maps\mp\gametypes\_persistance::stataddchildbufferedwithmax("weaponXPMultiplierTimePlayed",0,self.timeplayed["allies"],self.bufferedchildstatsmax["weaponXPMaxMultiplierTimePlayed"][0]); + maps\mp\gametypes\_persistance::stataddbufferedwithmax("prestigeDoubleXpTimePlayed",self.timeplayed["allies"],self.bufferedstatsmax["prestigeDoubleXpMaxTimePlayed"]); + maps\mp\gametypes\_persistance::stataddbufferedwithmax("prestigeDoubleWeaponXpTimePlayed",self.timeplayed["allies"],self.bufferedstatsmax["prestigeDoubleWeaponXpMaxTimePlayed"]); + } + + if(self.timeplayed["axis"]) + { + maps\mp\gametypes\_persistance::stataddbuffered("timePlayedOpfor",self.timeplayed["axis"]); + maps\mp\gametypes\_persistance::stataddbuffered("timePlayedTotal",self.timeplayed["axis"]); + maps\mp\gametypes\_persistance::stataddchildbuffered("round","timePlayed",self.timeplayed["axis"]); + if(!self.prestigedoublexp) + { + maps\mp\gametypes\_persistance::stataddchildbufferedwithmax("xpMultiplierTimePlayed",0,self.timeplayed["axis"],self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][0]); + maps\mp\gametypes\_persistance::stataddchildbufferedwithmax("xpMultiplierTimePlayed",1,self.timeplayed["axis"],self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][1]); + maps\mp\gametypes\_persistance::stataddchildbufferedwithmax("xpMultiplierTimePlayed",2,self.timeplayed["axis"],self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][2]); + } + + maps\mp\gametypes\_persistance::stataddchildbufferedwithmax("challengeXPMultiplierTimePlayed",0,self.timeplayed["axis"],self.bufferedchildstatsmax["challengeXPMaxMultiplierTimePlayed"][0]); + maps\mp\gametypes\_persistance::stataddchildbufferedwithmax("weaponXPMultiplierTimePlayed",0,self.timeplayed["axis"],self.bufferedchildstatsmax["weaponXPMaxMultiplierTimePlayed"][0]); + maps\mp\gametypes\_persistance::stataddbufferedwithmax("prestigeDoubleXpTimePlayed",self.timeplayed["axis"],self.bufferedstatsmax["prestigeDoubleXpMaxTimePlayed"]); + maps\mp\gametypes\_persistance::stataddbufferedwithmax("prestigeDoubleWeaponXpTimePlayed",self.timeplayed["axis"],self.bufferedstatsmax["prestigeDoubleWeaponXpMaxTimePlayed"]); + } + + if(self.timeplayed["other"]) + { + maps\mp\gametypes\_persistance::stataddbuffered("timePlayedOther",self.timeplayed["other"]); + maps\mp\gametypes\_persistance::stataddbuffered("timePlayedTotal",self.timeplayed["other"]); + maps\mp\gametypes\_persistance::stataddchildbuffered("round","timePlayed",self.timeplayed["other"]); + if(!self.prestigedoublexp) + { + maps\mp\gametypes\_persistance::stataddchildbufferedwithmax("xpMultiplierTimePlayed",0,self.timeplayed["other"],self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][0]); + maps\mp\gametypes\_persistance::stataddchildbufferedwithmax("xpMultiplierTimePlayed",1,self.timeplayed["other"],self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][1]); + maps\mp\gametypes\_persistance::stataddchildbufferedwithmax("xpMultiplierTimePlayed",2,self.timeplayed["other"],self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][2]); + } + + maps\mp\gametypes\_persistance::stataddchildbufferedwithmax("challengeXPMultiplierTimePlayed",0,self.timeplayed["other"],self.bufferedchildstatsmax["challengeXPMaxMultiplierTimePlayed"][0]); + maps\mp\gametypes\_persistance::stataddchildbufferedwithmax("weaponXPMultiplierTimePlayed",0,self.timeplayed["other"],self.bufferedchildstatsmax["weaponXPMaxMultiplierTimePlayed"][0]); + maps\mp\gametypes\_persistance::stataddbufferedwithmax("prestigeDoubleXpTimePlayed",self.timeplayed["other"],self.bufferedstatsmax["prestigeDoubleXpMaxTimePlayed"]); + maps\mp\gametypes\_persistance::stataddbufferedwithmax("prestigeDoubleWeaponXpTimePlayed",self.timeplayed["other"],self.bufferedstatsmax["prestigeDoubleWeaponXpMaxTimePlayed"]); + } + + if(game["state"] == "postgame") + { + return; + } + + self.timeplayed["allies"] = 0; + self.timeplayed["axis"] = 0; + self.timeplayed["other"] = 0; +} + +//Function Number: 10 +updateteamtime() +{ + if(game["state"] != "playing") + { + return; + } + + self.pers["teamTime"] = gettime(); +} + +//Function Number: 11 +updateteambalancedvar() +{ + for(;;) + { + var_00 = getdvarint("scr_teambalance"); + if(level.teambalance != var_00) + { + level.teambalance = getdvarint("scr_teambalance"); + } + + wait 1; + } +} + +//Function Number: 12 +updateteambalance() +{ + level.teamlimit = level.maxclients / 2; + level thread updateteambalancedvar(); + wait 0.15; + if(level.teambalance && maps\mp\_utility::isroundbased()) + { + if(isdefined(game["BalanceTeamsNextRound"])) + { + iprintlnbold(&"MP_AUTOBALANCE_NEXT_ROUND"); + } + + level waittill("restarting"); + if(isdefined(game["BalanceTeamsNextRound"])) + { + level balanceteams(); + game["BalanceTeamsNextRound"] = undefined; + return; + } + + if(!getteambalance()) + { + game["BalanceTeamsNextRound"] = 1; + return; + } + + return; + } + + level endon("game_ended"); + for(;;) + { + if(level.teambalance) + { + if(!getteambalance()) + { + iprintlnbold(&"MP_AUTOBALANCE_SECONDS",15); + wait 15; + if(!getteambalance()) + { + level balanceteams(); + } + } + + wait 59; + } + + wait 1; + } +} + +//Function Number: 13 +getteambalance() +{ + level.team["allies"] = 0; + level.team["axis"] = 0; + var_00 = level.players; + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + if(isdefined(var_00[var_01].pers["team"]) && var_00[var_01].pers["team"] == "allies") + { + level.team["allies"]++; + continue; + } + + if(isdefined(var_00[var_01].pers["team"]) && var_00[var_01].pers["team"] == "axis") + { + level.team["axis"]++; + } + } + + if(level.team["allies"] > level.team["axis"] + level.teambalance || level.team["axis"] > level.team["allies"] + level.teambalance) + { + return 0; + } + + return 1; +} + +//Function Number: 14 +balanceteams() +{ + iprintlnbold(game["strings"]["autobalance"]); + var_00 = []; + var_01 = []; + var_02 = level.players; + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + if(!isdefined(var_02[var_03].pers["teamTime"])) + { + continue; + } + + if(isdefined(var_02[var_03].pers["team"]) && var_02[var_03].pers["team"] == "allies") + { + var_00[var_00.size] = var_02[var_03]; + continue; + } + + if(isdefined(var_02[var_03].pers["team"]) && var_02[var_03].pers["team"] == "axis") + { + var_01[var_01.size] = var_02[var_03]; + } + } + + var_04 = undefined; + while(var_00.size > var_01.size + 1 || var_01.size > var_00.size + 1) + { + if(var_00.size > var_01.size + 1) + { + for(var_05 = 0;var_05 < var_00.size;var_05++) + { + if(isdefined(var_00[var_05].dont_auto_balance)) + { + continue; + } + + if(!isdefined(var_04)) + { + var_04 = var_00[var_05]; + continue; + } + + if(var_00[var_05].pers["teamTime"] > var_04.pers["teamTime"]) + { + var_04 = var_00[var_05]; + } + } + + var_04 [[ level.axis ]](); + } + else if(var_01.size > var_00.size + 1) + { + for(var_05 = 0;var_05 < var_01.size;var_05++) + { + if(isdefined(var_01[var_05].dont_auto_balance)) + { + continue; + } + + if(!isdefined(var_04)) + { + var_04 = var_01[var_05]; + continue; + } + + if(var_01[var_05].pers["teamTime"] > var_04.pers["teamTime"]) + { + var_04 = var_01[var_05]; + } + } + + var_04 [[ level.allies ]](); + } + + var_04 = undefined; + var_00 = []; + var_01 = []; + var_02 = level.players; + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + if(isdefined(var_02[var_03].pers["team"]) && var_02[var_03].pers["team"] == "allies") + { + var_00[var_00.size] = var_02[var_03]; + continue; + } + + if(isdefined(var_02[var_03].pers["team"]) && var_02[var_03].pers["team"] == "axis") + { + var_01[var_01.size] = var_02[var_03]; + } + } + } +} + +//Function Number: 15 +setghilliemodels(param_00) +{ + level.environment = param_00; + switch(param_00) + { + case "desert": + lib_02C9::precache(); + lib_02CA::precache(); + game["allies_model"]["GHILLIE"] = ::lib_02C9::main; + game["axis_model"]["GHILLIE"] = ::lib_02CA::main; + break; + + case "arctic": + lib_02CB::precache(); + lib_02CC::precache(); + game["allies_model"]["GHILLIE"] = ::lib_02CB::main; + game["axis_model"]["GHILLIE"] = ::lib_02CC::main; + break; + + case "urban": + lib_02CD::precache(); + lib_02CE::precache(); + game["allies_model"]["GHILLIE"] = ::lib_02CD::main; + game["axis_model"]["GHILLIE"] = ::lib_02CE::main; + break; + + case "forest": + lib_02CF::precache(); + lib_02D0::precache(); + game["allies_model"]["GHILLIE"] = ::lib_02CF::main; + game["axis_model"]["GHILLIE"] = ::lib_02D0::main; + break; + + case "forest_militia": + lib_02CF::precache(); + lib_02D1::precache(); + game["allies_model"]["GHILLIE"] = ::lib_02CF::main; + game["axis_model"]["GHILLIE"] = ::lib_02D1::main; + break; + + case "desert_militia": + lib_02C9::precache(); + lib_02D1::precache(); + game["allies_model"]["GHILLIE"] = ::lib_02C9::main; + game["axis_model"]["GHILLIE"] = ::lib_02D1::main; + break; + + case "arctic_militia": + lib_02CB::precache(); + lib_02D1::precache(); + game["allies_model"]["GHILLIE"] = ::lib_02CB::main; + game["axis_model"]["GHILLIE"] = ::lib_02D1::main; + break; + + case "urban_militia": + lib_02CD::precache(); + lib_02D1::precache(); + game["allies_model"]["GHILLIE"] = ::lib_02CD::main; + game["axis_model"]["GHILLIE"] = ::lib_02D1::main; + break; + + default: + break; + } +} + +//Function Number: 16 +setteammodels(param_00,param_01) +{ + switch(param_01) + { + case "delta_multicam": + lib_02D2::precache(); + lib_02D3::precache(); + lib_02D4::precache(); + lib_02D5::precache(); + lib_033D::precache(); + lib_02D6::precache(); + lib_02D7::precache(); + game[param_00 + "_model"]["SNIPER"] = ::lib_033D::main; + game[param_00 + "_model"]["LMG"] = ::lib_02D3::main; + game[param_00 + "_model"]["ASSAULT"] = ::lib_02D2::main; + game[param_00 + "_model"]["SHOTGUN"] = ::lib_02D5::main; + game[param_00 + "_model"]["SMG"] = ::lib_02D4::main; + game[param_00 + "_model"]["RIOT"] = ::lib_02D6::main; + game[param_00 + "_model"]["JUGGERNAUT"] = ::lib_02D7::main; + break; + + case "sas_urban": + lib_02D8::precache(); + lib_02D9::precache(); + lib_02DA::precache(); + lib_02DB::precache(); + lib_02DC::precache(); + lib_02D7::precache(); + game[param_00 + "_model"]["SNIPER"] = ::lib_02DC::main; + game[param_00 + "_model"]["LMG"] = ::lib_02D9::main; + game[param_00 + "_model"]["ASSAULT"] = ::lib_02D8::main; + game[param_00 + "_model"]["SHOTGUN"] = ::lib_02DA::main; + game[param_00 + "_model"]["SMG"] = ::lib_02DB::main; + game[param_00 + "_model"]["RIOT"] = ::lib_02DB::main; + game[param_00 + "_model"]["JUGGERNAUT"] = ::lib_02D7::main; + break; + + case "gign_paris": + lib_02DD::precache(); + lib_02DE::precache(); + lib_02DF::precache(); + lib_02E0::precache(); + lib_02FF::precache(); + lib_0300::precache(); + lib_02D7::precache(); + game[param_00 + "_model"]["SNIPER"] = ::lib_02FF::main; + game[param_00 + "_model"]["LMG"] = ::lib_02DE::main; + game[param_00 + "_model"]["ASSAULT"] = ::lib_02DD::main; + game[param_00 + "_model"]["SHOTGUN"] = ::lib_02DF::main; + game[param_00 + "_model"]["SMG"] = ::lib_02E0::main; + game[param_00 + "_model"]["RIOT"] = ::lib_0300::main; + game[param_00 + "_model"]["JUGGERNAUT"] = ::lib_02D7::main; + break; + + case "pmc_africa": + lib_0301::precache(); + lib_0302::precache(); + lib_0303::precache(); + lib_0304::precache(); + lib_0305::precache(); + lib_0306::precache(); + lib_02D7::precache(); + game[param_00 + "_model"]["SNIPER"] = ::lib_0305::main; + game[param_00 + "_model"]["LMG"] = ::lib_0302::main; + game[param_00 + "_model"]["ASSAULT"] = ::lib_0301::main; + game[param_00 + "_model"]["SHOTGUN"] = ::lib_0304::main; + game[param_00 + "_model"]["SMG"] = ::lib_0303::main; + game[param_00 + "_model"]["RIOT"] = ::lib_0306::main; + game[param_00 + "_model"]["JUGGERNAUT"] = ::lib_02D7::main; + break; + + case "opforce_air": + lib_0307::precache(); + lib_0308::precache(); + lib_0309::precache(); + lib_030A::precache(); + lib_030B::precache(); + lib_030C::precache(); + lib_030D::precache(); + game[param_00 + "_model"]["SNIPER"] = ::lib_030B::main; + game[param_00 + "_model"]["LMG"] = ::lib_0308::main; + game[param_00 + "_model"]["ASSAULT"] = ::lib_0307::main; + game[param_00 + "_model"]["SHOTGUN"] = ::lib_0309::main; + game[param_00 + "_model"]["SMG"] = ::lib_030A::main; + game[param_00 + "_model"]["RIOT"] = ::lib_030C::main; + game[param_00 + "_model"]["JUGGERNAUT"] = ::lib_030D::main; + break; + + case "opforce_snow": + lib_030E::precache(); + lib_030F::precache(); + lib_0310::precache(); + lib_0311::precache(); + lib_0312::precache(); + lib_0313::precache(); + lib_030D::precache(); + game[param_00 + "_model"]["SNIPER"] = ::lib_0312::main; + game[param_00 + "_model"]["LMG"] = ::lib_030F::main; + game[param_00 + "_model"]["ASSAULT"] = ::lib_030E::main; + game[param_00 + "_model"]["SHOTGUN"] = ::lib_0310::main; + game[param_00 + "_model"]["SMG"] = ::lib_0311::main; + game[param_00 + "_model"]["RIOT"] = ::lib_0313::main; + game[param_00 + "_model"]["JUGGERNAUT"] = ::lib_030D::main; + break; + + case "opforce_urban": + lib_0314::precache(); + lib_0315::precache(); + lib_0316::precache(); + lib_0317::precache(); + lib_0318::precache(); + lib_0319::precache(); + lib_030D::precache(); + game[param_00 + "_model"]["SNIPER"] = ::lib_0318::main; + game[param_00 + "_model"]["LMG"] = ::lib_0315::main; + game[param_00 + "_model"]["ASSAULT"] = ::lib_0314::main; + game[param_00 + "_model"]["SHOTGUN"] = ::lib_0316::main; + game[param_00 + "_model"]["SMG"] = ::lib_0317::main; + game[param_00 + "_model"]["RIOT"] = ::lib_0319::main; + game[param_00 + "_model"]["JUGGERNAUT"] = ::lib_030D::main; + break; + + case "opforce_woodland": + lib_031A::precache(); + lib_031B::precache(); + lib_031C::precache(); + lib_0333::precache(); + lib_0334::precache(); + lib_0335::precache(); + lib_030D::precache(); + game[param_00 + "_model"]["SNIPER"] = ::lib_0334::main; + game[param_00 + "_model"]["LMG"] = ::lib_031B::main; + game[param_00 + "_model"]["ASSAULT"] = ::lib_031A::main; + game[param_00 + "_model"]["SHOTGUN"] = ::lib_031C::main; + game[param_00 + "_model"]["SMG"] = ::lib_0333::main; + game[param_00 + "_model"]["RIOT"] = ::lib_0335::main; + game[param_00 + "_model"]["JUGGERNAUT"] = ::lib_030D::main; + break; + + case "opforce_africa": + lib_0336::precache(); + lib_0337::precache(); + lib_0338::precache(); + lib_0339::precache(); + lib_033A::precache(); + lib_033B::precache(); + lib_030D::precache(); + game[param_00 + "_model"]["SNIPER"] = ::lib_0337::main; + game[param_00 + "_model"]["LMG"] = ::lib_0337::main; + game[param_00 + "_model"]["ASSAULT"] = ::lib_0336::main; + game[param_00 + "_model"]["SHOTGUN"] = ::lib_0338::main; + game[param_00 + "_model"]["SMG"] = ::lib_0339::main; + game[param_00 + "_model"]["RIOT"] = ::lib_033B::main; + game[param_00 + "_model"]["JUGGERNAUT"] = ::lib_030D::main; + break; + + case "opforce_henchmen": + lib_033C::precache(); + lib_033E::precache(); + lib_033F::precache(); + lib_0340::precache(); + lib_0341::precache(); + lib_0342::precache(); + lib_030D::precache(); + game[param_00 + "_model"]["SNIPER"] = ::lib_0341::main; + game[param_00 + "_model"]["LMG"] = ::lib_033E::main; + game[param_00 + "_model"]["ASSAULT"] = ::lib_033C::main; + game[param_00 + "_model"]["SHOTGUN"] = ::lib_033F::main; + game[param_00 + "_model"]["SMG"] = ::lib_0340::main; + game[param_00 + "_model"]["RIOT"] = ::lib_0342::main; + game[param_00 + "_model"]["JUGGERNAUT"] = ::lib_030D::main; + break; + } +} + +//Function Number: 17 +setplayermodels() +{ + setteammodels("allies",game["allies"]); + setteammodels("axis",game["axis"]); + setghilliemodels(getmapcustom("environment")); +} + +//Function Number: 18 +playermodelforweapon(param_00,param_01) +{ + var_02 = self.team; + if(isdefined(game[var_02 + "_model"][param_00])) + { + [[ game[var_02 + "_model"][param_00] ]](); + return; + } + + var_03 = tablelookup("mp/statstable.csv",4,param_00,2); + switch(var_03) + { + case "weapon_smg": + [[ game[var_02 + "_model"]["SMG"] ]](); + break; + + case "weapon_assault": + [[ game[var_02 + "_model"]["ASSAULT"] ]](); + break; + + case "weapon_sniper": + if(level.environment != "" && self isitemunlocked("ghillie_" + level.environment) && game[var_02] != "opforce_africa") + { + [[ game[var_02 + "_model"]["GHILLIE"] ]](); + } + else + { + [[ game[var_02 + "_model"]["SNIPER"] ]](); + } + break; + + case "weapon_lmg": + [[ game[var_02 + "_model"]["LMG"] ]](); + break; + + case "weapon_riot": + [[ game[var_02 + "_model"]["RIOT"] ]](); + break; + + case "weapon_shotgun": + [[ game[var_02 + "_model"]["SHOTGUN"] ]](); + break; + + default: + [[ game[var_02 + "_model"]["ASSAULT"] ]](); + break; + } + + if(maps\mp\_utility::isjuggernaut()) + { + [[ game[var_02 + "_model"]["JUGGERNAUT"] ]](); + } +} + +//Function Number: 19 +countplayers() +{ + var_00 = level.players; + var_01 = 0; + var_02 = 0; + for(var_03 = 0;var_03 < var_00.size;var_03++) + { + if(var_00[var_03] == self) + { + continue; + } + + if(isdefined(var_00[var_03].pers["team"]) && var_00[var_03].pers["team"] == "allies") + { + var_01++; + continue; + } + + if(isdefined(var_00[var_03].pers["team"]) && var_00[var_03].pers["team"] == "axis") + { + var_02++; + } + } + + var_00["allies"] = var_01; + var_00["axis"] = var_02; + return var_00; +} + +//Function Number: 20 +trackfreeplayedtime() +{ + self endon("disconnect"); + self.timeplayed["allies"] = 0; + self.timeplayed["axis"] = 0; + self.timeplayed["other"] = 0; + self.timeplayed["total"] = 0; + for(;;) + { + if(game["state"] == "playing") + { + if(isdefined(self.pers["team"]) && self.pers["team"] == "allies" && self.sessionteam != "spectator") + { + self.timeplayed["allies"]++; + self.timeplayed["total"]++; + } + else if(isdefined(self.pers["team"]) && self.pers["team"] == "axis" && self.sessionteam != "spectator") + { + self.timeplayed["axis"]++; + self.timeplayed["total"]++; + } + else + { + self.timeplayed["other"]++; + } + } + + wait 1; + } +} + +//Function Number: 21 +updatefreeplayertimes() +{ + if(!level.rankedmatch) + { + return; + } + + var_00 = 0; + for(;;) + { + var_00++; + if(var_00 >= level.players.size) + { + var_00 = 0; + } + + if(isdefined(level.players[var_00])) + { + level.players[var_00] updatefreeplayedtime(); + } + + wait 1; + } +} + +//Function Number: 22 +updatefreeplayedtime() +{ + if(!maps\mp\_utility::rankingenabled()) + { + return; + } + + if(self.timeplayed["allies"]) + { + maps\mp\gametypes\_persistance::stataddbuffered("timePlayedAllies",self.timeplayed["allies"]); + maps\mp\gametypes\_persistance::stataddbuffered("timePlayedTotal",self.timeplayed["allies"]); + maps\mp\gametypes\_persistance::stataddchildbuffered("round","timePlayed",self.timeplayed["allies"]); + if(!self.prestigedoublexp) + { + maps\mp\gametypes\_persistance::stataddchildbufferedwithmax("xpMultiplierTimePlayed",0,self.timeplayed["allies"],self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][0]); + maps\mp\gametypes\_persistance::stataddchildbufferedwithmax("xpMultiplierTimePlayed",1,self.timeplayed["allies"],self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][1]); + maps\mp\gametypes\_persistance::stataddchildbufferedwithmax("xpMultiplierTimePlayed",2,self.timeplayed["allies"],self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][2]); + } + + maps\mp\gametypes\_persistance::stataddbufferedwithmax("prestigeDoubleXpTimePlayed",self.timeplayed["allies"],self.bufferedstatsmax["prestigeDoubleXpMaxTimePlayed"]); + maps\mp\gametypes\_persistance::stataddbufferedwithmax("prestigeDoubleWeaponXpTimePlayed",self.timeplayed["allies"],self.bufferedstatsmax["prestigeDoubleWeaponXpMaxTimePlayed"]); + } + + if(self.timeplayed["axis"]) + { + maps\mp\gametypes\_persistance::stataddbuffered("timePlayedOpfor",self.timeplayed["axis"]); + maps\mp\gametypes\_persistance::stataddbuffered("timePlayedTotal",self.timeplayed["axis"]); + maps\mp\gametypes\_persistance::stataddchildbuffered("round","timePlayed",self.timeplayed["axis"]); + if(!self.prestigedoublexp) + { + maps\mp\gametypes\_persistance::stataddchildbufferedwithmax("xpMultiplierTimePlayed",0,self.timeplayed["axis"],self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][0]); + maps\mp\gametypes\_persistance::stataddchildbufferedwithmax("xpMultiplierTimePlayed",1,self.timeplayed["axis"],self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][1]); + maps\mp\gametypes\_persistance::stataddchildbufferedwithmax("xpMultiplierTimePlayed",2,self.timeplayed["axis"],self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][2]); + } + + maps\mp\gametypes\_persistance::stataddbufferedwithmax("prestigeDoubleXpTimePlayed",self.timeplayed["axis"],self.bufferedstatsmax["prestigeDoubleXpMaxTimePlayed"]); + maps\mp\gametypes\_persistance::stataddbufferedwithmax("prestigeDoubleWeaponXpTimePlayed",self.timeplayed["axis"],self.bufferedstatsmax["prestigeDoubleWeaponXpMaxTimePlayed"]); + } + + if(self.timeplayed["other"]) + { + maps\mp\gametypes\_persistance::stataddbuffered("timePlayedOther",self.timeplayed["other"]); + maps\mp\gametypes\_persistance::stataddbuffered("timePlayedTotal",self.timeplayed["other"]); + maps\mp\gametypes\_persistance::stataddchildbuffered("round","timePlayed",self.timeplayed["other"]); + if(!self.prestigedoublexp) + { + maps\mp\gametypes\_persistance::stataddchildbufferedwithmax("xpMultiplierTimePlayed",0,self.timeplayed["other"],self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][0]); + maps\mp\gametypes\_persistance::stataddchildbufferedwithmax("xpMultiplierTimePlayed",1,self.timeplayed["other"],self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][1]); + maps\mp\gametypes\_persistance::stataddchildbufferedwithmax("xpMultiplierTimePlayed",2,self.timeplayed["other"],self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][2]); + } + + maps\mp\gametypes\_persistance::stataddbufferedwithmax("prestigeDoubleXpTimePlayed",self.timeplayed["other"],self.bufferedstatsmax["prestigeDoubleXpMaxTimePlayed"]); + maps\mp\gametypes\_persistance::stataddbufferedwithmax("prestigeDoubleWeaponXpTimePlayed",self.timeplayed["other"],self.bufferedstatsmax["prestigeDoubleWeaponXpMaxTimePlayed"]); + } + + if(game["state"] == "postgame") + { + return; + } + + self.timeplayed["allies"] = 0; + self.timeplayed["axis"] = 0; + self.timeplayed["other"] = 0; +} + +//Function Number: 23 +getjointeampermissions(param_00) +{ + var_01 = 0; + var_02 = level.players; + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + var_04 = var_02[var_03]; + if(isdefined(var_04.pers["team"]) && var_04.pers["team"] == param_00) + { + var_01++; + } + } + + if(var_01 < level.teamlimit) + { + return 1; + } + + return 0; +} + +//Function Number: 24 +onplayerspawned() +{ + level endon("game_ended"); + self waittill("spawned_player"); +} + +//Function Number: 25 +getteamname(param_00) +{ + return tablelookupistring("mp/factionTable.csv",0,game[param_00],1); +} + +//Function Number: 26 +getteamshortname(param_00) +{ + return tablelookupistring("mp/factionTable.csv",0,game[param_00],2); +} + +//Function Number: 27 +getteamforfeitedstring(param_00) +{ + return tablelookupistring("mp/factionTable.csv",0,game[param_00],4); +} + +//Function Number: 28 +getteameliminatedstring(param_00) +{ + return tablelookupistring("mp/factionTable.csv",0,game[param_00],3); +} + +//Function Number: 29 +getteamicon(param_00) +{ + return tablelookup("mp/factionTable.csv",0,game[param_00],5); +} + +//Function Number: 30 +getteamhudicon(param_00) +{ + return tablelookup("mp/factionTable.csv",0,game[param_00],6); +} + +//Function Number: 31 +init(param_00) +{ + return tablelookup("mp/factionTable.csv",0,game[param_00],17); +} + +//Function Number: 32 +getteamvoiceprefix(param_00) +{ + return tablelookup("mp/factionTable.csv",0,game[param_00],7); +} + +//Function Number: 33 +getteamspawnmusic(param_00) +{ + return tablelookup("mp/factionTable.csv",0,game[param_00],8); +} + +//Function Number: 34 +getteamwinmusic(param_00) +{ + return tablelookup("mp/factionTable.csv",0,game[param_00],9); +} + +//Function Number: 35 +getteamflagmodel(param_00) +{ + return tablelookup("mp/factionTable.csv",0,game[param_00],10); +} + +//Function Number: 36 +getteamflagcarrymodel(param_00) +{ + return tablelookup("mp/factionTable.csv",0,game[param_00],11); +} + +//Function Number: 37 +getteamflagicon(param_00) +{ + return tablelookup("mp/factionTable.csv",0,game[param_00],12); +} + +//Function Number: 38 +getteamflagfx(param_00) +{ + return tablelookup("mp/factionTable.csv",0,game[param_00],13); +} + +//Function Number: 39 +getteamcolor(param_00) +{ + return (maps\mp\_utility::stringtofloat(tablelookup("mp/factionTable.csv",0,game[param_00],14)),maps\mp\_utility::stringtofloat(tablelookup("mp/factionTable.csv",0,game[param_00],15)),maps\mp\_utility::stringtofloat(tablelookup("mp/factionTable.csv",0,game[param_00],16))); +} + +//Function Number: 40 +getteamcratemodel(param_00) +{ + return tablelookup("mp/factionTable.csv",0,game[param_00],18); +} + +//Function Number: 41 +getteamdeploymodel(param_00) +{ + return tablelookup("mp/factionTable.csv",0,game[param_00],19); +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/gametypes/_tweakables.gsc b/MW3/PC/MP/maps/mp/gametypes/_tweakables.gsc new file mode 100644 index 0000000..8362978 --- /dev/null +++ b/MW3/PC/MP/maps/mp/gametypes/_tweakables.gsc @@ -0,0 +1,430 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_tweakables.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 8 + * Decompile Time: 130 ms + * Timestamp: 10/27/2023 2:12:59 AM +*******************************************************************/ + +//Function Number: 1 +gettweakabledvarvalue(param_00,param_01) +{ + switch(param_00) + { + case "rule": + var_02 = level.rules[param_01].dvar; + break; + + case "game": + var_02 = level.gametweaks[var_02].dvar; + break; + + case "team": + var_02 = level.teamtweaks[var_02].dvar; + break; + + case "player": + var_02 = level.playertweaks[var_02].dvar; + break; + + case "class": + var_02 = level.classtweaks[var_02].dvar; + break; + + case "weapon": + var_02 = level.weapontweaks[var_02].dvar; + break; + + case "hardpoint": + var_02 = level.hardpointtweaks[var_02].dvar; + break; + + case "hud": + var_02 = level.hudtweaks[var_02].dvar; + break; + + default: + var_02 = undefined; + break; + } + + var_03 = getdvarint(var_02); + return var_03; +} + +//Function Number: 2 +gettweakabledvar(param_00,param_01) +{ + switch(param_00) + { + case "rule": + var_02 = level.rules[param_01].dvar; + break; + + case "game": + var_02 = level.gametweaks[var_02].dvar; + break; + + case "team": + var_02 = level.teamtweaks[var_02].dvar; + break; + + case "player": + var_02 = level.playertweaks[var_02].dvar; + break; + + case "class": + var_02 = level.classtweaks[var_02].dvar; + break; + + case "weapon": + var_02 = level.weapontweaks[var_02].dvar; + break; + + case "hardpoint": + var_02 = level.hardpointtweaks[var_02].dvar; + break; + + case "hud": + var_02 = level.hudtweaks[var_02].dvar; + break; + + default: + var_02 = undefined; + break; + } + + return var_02; +} + +//Function Number: 3 +gettweakablevalue(param_00,param_01) +{ + switch(param_00) + { + case "rule": + var_02 = level.rules[param_01].value; + break; + + case "game": + var_02 = level.gametweaks[var_02].value; + break; + + case "team": + var_02 = level.teamtweaks[var_02].value; + break; + + case "player": + var_02 = level.playertweaks[var_02].value; + break; + + case "class": + var_02 = level.classtweaks[var_02].value; + break; + + case "weapon": + var_02 = level.weapontweaks[var_02].value; + break; + + case "hardpoint": + var_02 = level.hardpointtweaks[var_02].value; + break; + + case "hud": + var_02 = level.hudtweaks[var_02].value; + break; + + default: + var_02 = undefined; + break; + } + + return var_02; +} + +//Function Number: 4 +gettweakablelastvalue(param_00,param_01) +{ + switch(param_00) + { + case "rule": + var_02 = level.rules[param_01].lastvalue; + break; + + case "game": + var_02 = level.gametweaks[var_02].lastvalue; + break; + + case "team": + var_02 = level.teamtweaks[var_02].lastvalue; + break; + + case "player": + var_02 = level.playertweaks[var_02].lastvalue; + break; + + case "class": + var_02 = level.classtweaks[var_02].lastvalue; + break; + + case "weapon": + var_02 = level.weapontweaks[var_02].lastvalue; + break; + + case "hardpoint": + var_02 = level.hardpointtweaks[var_02].lastvalue; + break; + + case "hud": + var_02 = level.hudtweaks[var_02].lastvalue; + break; + + default: + var_02 = undefined; + break; + } + + return var_02; +} + +//Function Number: 5 +settweakablevalue(param_00,param_01,param_02) +{ + switch(param_00) + { + case "rule": + var_03 = level.rules[param_01].dvar; + break; + + case "game": + var_03 = level.gametweaks[param_02].dvar; + break; + + case "team": + var_03 = level.teamtweaks[param_02].dvar; + break; + + case "player": + var_03 = level.playertweaks[param_02].dvar; + break; + + case "class": + var_03 = level.classtweaks[param_02].dvar; + break; + + case "weapon": + var_03 = level.weapontweaks[param_02].dvar; + break; + + case "hardpoint": + var_03 = level.hardpointtweaks[param_02].dvar; + break; + + case "hud": + var_03 = level.hudtweaks[param_02].dvar; + break; + + default: + var_03 = undefined; + break; + } + + setdvar(var_03,param_02); +} + +//Function Number: 6 +settweakablelastvalue(param_00,param_01,param_02) +{ + switch(param_00) + { + case "rule": + level.rules[param_01].lastvalue = param_02; + break; + + case "game": + level.gametweaks[param_01].lastvalue = param_02; + break; + + case "team": + level.teamtweaks[param_01].lastvalue = param_02; + break; + + case "player": + level.playertweaks[param_01].lastvalue = param_02; + break; + + case "class": + level.classtweaks[param_01].lastvalue = param_02; + break; + + case "weapon": + level.weapontweaks[param_01].lastvalue = param_02; + break; + + case "hardpoint": + level.hardpointtweaks[param_01].lastvalue = param_02; + break; + + case "hud": + level.hudtweaks[param_01].lastvalue = param_02; + break; + + default: + break; + } +} + +//Function Number: 7 +registertweakable(param_00,param_01,param_02,param_03) +{ + if(isstring(param_03)) + { + param_03 = getdvar(param_02,param_03); + } + else + { + param_03 = getdvarint(param_02,param_03); + } + + switch(param_00) + { + case "rule": + if(!isdefined(level.rules[param_01])) + { + level.rules[param_01] = spawnstruct(); + } + + level.rules[param_01].value = param_03; + level.rules[param_01].lastvalue = param_03; + level.rules[param_01].dvar = param_02; + break; + + case "game": + if(!isdefined(level.gametweaks[param_01])) + { + level.gametweaks[param_01] = spawnstruct(); + } + + level.gametweaks[param_01].value = param_03; + level.gametweaks[param_01].lastvalue = param_03; + level.gametweaks[param_01].dvar = param_02; + break; + + case "team": + if(!isdefined(level.teamtweaks[param_01])) + { + level.teamtweaks[param_01] = spawnstruct(); + } + + level.teamtweaks[param_01].value = param_03; + level.teamtweaks[param_01].lastvalue = param_03; + level.teamtweaks[param_01].dvar = param_02; + break; + + case "player": + if(!isdefined(level.playertweaks[param_01])) + { + level.playertweaks[param_01] = spawnstruct(); + } + + level.playertweaks[param_01].value = param_03; + level.playertweaks[param_01].lastvalue = param_03; + level.playertweaks[param_01].dvar = param_02; + break; + + case "class": + if(!isdefined(level.classtweaks[param_01])) + { + level.classtweaks[param_01] = spawnstruct(); + } + + level.classtweaks[param_01].value = param_03; + level.classtweaks[param_01].lastvalue = param_03; + level.classtweaks[param_01].dvar = param_02; + break; + + case "weapon": + if(!isdefined(level.weapontweaks[param_01])) + { + level.weapontweaks[param_01] = spawnstruct(); + } + + level.weapontweaks[param_01].value = param_03; + level.weapontweaks[param_01].lastvalue = param_03; + level.weapontweaks[param_01].dvar = param_02; + break; + + case "hardpoint": + if(!isdefined(level.hardpointtweaks[param_01])) + { + level.hardpointtweaks[param_01] = spawnstruct(); + } + + level.hardpointtweaks[param_01].value = param_03; + level.hardpointtweaks[param_01].lastvalue = param_03; + level.hardpointtweaks[param_01].dvar = param_02; + break; + + case "hud": + if(!isdefined(level.hudtweaks[param_01])) + { + level.hudtweaks[param_01] = spawnstruct(); + } + + level.hudtweaks[param_01].value = param_03; + level.hudtweaks[param_01].lastvalue = param_03; + level.hudtweaks[param_01].dvar = param_02; + break; + } +} + +//Function Number: 8 +init() +{ + level.clienttweakables = []; + level.tweakablesinitialized = 1; + level.rules = []; + level.gametweaks = []; + level.teamtweaks = []; + level.playertweaks = []; + level.classtweaks = []; + level.weapontweaks = []; + level.hardpointtweaks = []; + level.hudtweaks = []; + if(level.console) + { + registertweakable("game","graceperiod","scr_game_graceperiod",15); + } + else + { + registertweakable("game","playerwaittime","scr_game_playerwaittime",15); + registertweakable("game","matchstarttime","scr_game_matchstarttime",5); + } + + registertweakable("game","onlyheadshots","scr_game_onlyheadshots",0); + registertweakable("game","allowkillcam","scr_game_allowkillcam",1); + registertweakable("game","spectatetype","scr_game_spectatetype",2); + registertweakable("game","deathpointloss","scr_game_deathpointloss",0); + registertweakable("game","suicidepointloss","scr_game_suicidepointloss",0); + registertweakable("team","teamkillpointloss","scr_team_teamkillpointloss",0); + registertweakable("team","fftype","scr_team_fftype",0); + registertweakable("team","teamkillspawndelay","scr_team_teamkillspawndelay",0); + registertweakable("player","maxhealth","scr_player_maxhealth",100); + registertweakable("player","healthregentime","scr_player_healthregentime",5); + registertweakable("player","forcerespawn","scr_player_forcerespawn",1); + registertweakable("weapon","allowfrag","scr_weapon_allowfrags",1); + registertweakable("weapon","allowsmoke","scr_weapon_allowsmoke",1); + registertweakable("weapon","allowflash","scr_weapon_allowflash",1); + registertweakable("weapon","allowc4","scr_weapon_allowc4",1); + registertweakable("weapon","allowclaymores","scr_weapon_allowclaymores",1); + registertweakable("weapon","allowrpgs","scr_weapon_allowrpgs",1); + registertweakable("weapon","allowmines","scr_weapon_allowmines",1); + registertweakable("hardpoint","allowartillery","scr_hardpoint_allowartillery",1); + registertweakable("hardpoint","allowuav","scr_hardpoint_allowuav",1); + registertweakable("hardpoint","allowsupply","scr_hardpoint_allowsupply",1); + registertweakable("hardpoint","allowhelicopter","scr_hardpoint_allowhelicopter",1); + registertweakable("hud","showobjicons","ui_hud_showobjicons",1); + makedvarserverinfo("ui_hud_showobjicons",1); +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/gametypes/_weapons.gsc b/MW3/PC/MP/maps/mp/gametypes/_weapons.gsc new file mode 100644 index 0000000..95dbf77 --- /dev/null +++ b/MW3/PC/MP/maps/mp/gametypes/_weapons.gsc @@ -0,0 +1,3430 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_weapons.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 111 + * Decompile Time: 1719 ms + * Timestamp: 10/27/2023 2:13:05 AM +*******************************************************************/ + +//Function Number: 1 +attachmentgroup(param_00) +{ + return tablelookup("mp/attachmentTable.csv",4,param_00,2); +} + +//Function Number: 2 +getattachmentlist() +{ + var_00 = []; + var_01 = 0; + var_02 = tablelookup("mp/attachmentTable.csv",9,var_01,4); + while(var_02 != "") + { + var_00[var_00.size] = var_02; + var_01++; + var_02 = tablelookup("mp/attachmentTable.csv",9,var_01,4); + } + + return common_scripts\utility::alphabetize(var_00); +} + +//Function Number: 3 +init() +{ + level.scavenger_altmode = 1; + level.scavenger_secondary = 1; + level.maxperplayerexplosives = max(maps\mp\_utility::getintproperty("scr_maxPerPlayerExplosives",2),1); + level.riotshieldxpbullets = maps\mp\_utility::getintproperty("scr_riotShieldXPBullets",15); + switch(maps\mp\_utility::getintproperty("perk_scavengerMode",0)) + { + case 1: + level.scavenger_altmode = 0; + break; + + case 2: + level.scavenger_secondary = 0; + break; + + case 3: + level.scavenger_altmode = 0; + level.scavenger_secondary = 0; + break; + } + + var_00 = getattachmentlist(); + var_01 = 149; + level.weaponlist = []; + for(var_02 = 0;var_02 <= var_01;var_02++) + { + var_03 = tablelookup("mp/statstable.csv",0,var_02,4); + if(var_03 == "") + { + continue; + } + + if(!issubstr(tablelookup("mp/statsTable.csv",0,var_02,2),"weapon_")) + { + continue; + } + + if(issubstr(var_03,"iw5_")) + { + var_04 = strtok(var_03,"_"); + var_03 = var_04[0] + "_" + var_04[1] + "_mp"; + level.weaponlist[level.weaponlist.size] = var_03; + continue; + } + else + { + level.weaponlist[level.weaponlist.size] = var_03 + "_mp"; + } + + var_05 = []; + for(var_06 = 0;var_06 < 10;var_06++) + { + var_07 = tablelookup("mp/statStable.csv",0,var_02,var_06 + 11); + if(var_07 == "") + { + break; + } + + var_05[var_07] = 1; + } + + var_08 = []; + foreach(var_07 in var_00) + { + if(!isdefined(var_05[var_07])) + { + continue; + } + + level.weaponlist[level.weaponlist.size] = var_03 + "_" + var_07 + "_mp"; + var_08[var_08.size] = var_07; + } + + var_0B = []; + for(var_0C = 0;var_0C < var_08.size - 1;var_0C++) + { + var_0D = tablelookuprownum("mp/attachmentCombos.csv",0,var_08[var_0C]); + for(var_0E = var_0C + 1;var_0E < var_08.size;var_0E++) + { + if(tablelookup("mp/attachmentCombos.csv",0,var_08[var_0E],var_0D) == "no") + { + continue; + } + + var_0B[var_0B.size] = var_08[var_0C] + "_" + var_08[var_0E]; + } + } + + foreach(var_10 in var_0B) + { + level.weaponlist[level.weaponlist.size] = var_03 + "_" + var_10 + "_mp"; + } + } + + foreach(var_13 in level.weaponlist) + { + precacheitem(var_13); + } + + precacheitem("flare_mp"); + precacheitem("scavenger_bag_mp"); + precacheitem("frag_grenade_short_mp"); + precacheitem("c4death_mp"); + precacheitem("destructible_car"); + precacheitem("destructible_toy"); + precacheitem("bouncingbetty_mp"); + precacheitem("scrambler_mp"); + precacheitem("portable_radar_mp"); + precacheshellshock("default"); + precacheshellshock("concussion_grenade_mp"); + thread maps\mp\_flashgrenades::main(); + thread maps\mp\_entityheadicons::init(); + thread lib_0348::init(); + var_16 = 70; + level.claymoredetectiondot = cos(var_16); + level.claymoredetectionmindist = 20; + level.claymoredetectiongraceperiod = 0.75; + level.claymoredetonateradius = 192; + level.minedetectiongraceperiod = 0.3; + level.minedetectionradius = 100; + level.minedetectionheight = 20; + level.minedamageradius = 256; + level.minedamagemin = 70; + level.minedamagemax = 210; + level.minedamagehalfheight = 46; + level.mineselfdestructtime = 120; + level.mine_launch = loadfx("impacts/bouncing_betty_launch_dirt"); + level.mine_spin = loadfx("dust/bouncing_betty_swirl"); + level.mine_explode = loadfx("explosions/bouncing_betty_explosion"); + level.mine_beacon["enemy"] = loadfx("misc/light_c4_blink"); + level.mine_beacon["friendly"] = loadfx("misc/light_mine_blink_friendly"); + level.empgrenadeexplode = loadfx("explosions/emp_grenade"); + level.delayminetime = 3; + level.sentry_fire = loadfx("muzzleflashes/shotgunflash"); + level.stingerfxid = loadfx("explosions/aerial_explosion_large"); + level.primary_weapon_array = []; + level.side_arm_array = []; + level.grenade_array = []; + level.missile_array = []; + level.inventory_array = []; + level.mines = []; + precachemodel("weapon_claymore_bombsquad"); + precachemodel("weapon_c4_bombsquad"); + precachemodel("projectile_m67fraggrenade_bombsquad"); + precachemodel("projectile_semtex_grenade_bombsquad"); + precachemodel("weapon_light_stick_tactical_bombsquad"); + precachemodel("projectile_bouncing_betty_grenade"); + precachemodel("projectile_bouncing_betty_grenade_bombsquad"); + precachemodel("projectile_bouncing_betty_trigger"); + precachemodel("weapon_jammer"); + precachemodel("weapon_jammer_bombsquad"); + precachemodel("weapon_radar"); + precachemodel("weapon_radar_bombsquad"); + precachemodel("mp_trophy_system"); + precachemodel("mp_trophy_system_bombsquad"); + level._effect["equipment_explode"] = loadfx("explosions/sparks_a"); + level._effect["sniperDustLarge"] = loadfx("dust/sniper_dust_kickup"); + level._effect["sniperDustSmall"] = loadfx("dust/sniper_dust_kickup_minimal"); + level._effect["sniperDustLargeSuppress"] = loadfx("dust/sniper_dust_kickup_accum_suppress"); + level._effect["sniperDustSmallSuppress"] = loadfx("dust/sniper_dust_kickup_accum_supress_minimal"); + level thread onplayerconnect(); + level.c4explodethisframe = 0; + common_scripts\utility::array_thread(getentarray("misc_turret","classname"),::turret_monitoruse); +} + +//Function Number: 4 +func_2CB8() +{ + wait 5; +} + +//Function Number: 5 +bombsquadwaiter() +{ + self endon("disconnect"); + for(;;) + { + self waittill("grenade_fire",var_00,var_01); + var_02 = level.otherteam[self.team]; + if(var_01 == "c4_mp") + { + var_00 thread createbombsquadmodel("weapon_c4_bombsquad","tag_origin",var_02,self); + continue; + } + + if(var_01 == "claymore_mp") + { + var_00 thread createbombsquadmodel("weapon_claymore_bombsquad","tag_origin",var_02,self); + continue; + } + + if(var_01 == "frag_grenade_mp") + { + var_00 thread createbombsquadmodel("projectile_m67fraggrenade_bombsquad","tag_weapon",var_02,self); + continue; + } + + if(var_01 == "frag_grenade_short_mp") + { + var_00 thread createbombsquadmodel("projectile_m67fraggrenade_bombsquad","tag_weapon",var_02,self); + continue; + } + + if(var_01 == "semtex_mp") + { + var_00 thread createbombsquadmodel("projectile_semtex_grenade_bombsquad","tag_weapon",var_02,self); + } + } +} + +//Function Number: 6 +createbombsquadmodel(param_00,param_01,param_02,param_03) +{ + var_04 = spawn("script_model",(0,0,0)); + var_04 hide(); + wait 0.05; + if(!isdefined(self)) + { + return; + } + + var_04 thread bombsquadvisibilityupdater(param_02,param_03); + var_04 setmodel(param_00); + var_04 linkto(self,param_01,(0,0,0),(0,0,0)); + var_04 setcontents(0); + self waittill("death"); + if(isdefined(self.trigger)) + { + self.trigger delete(); + } + + var_04 delete(); +} + +//Function Number: 7 +bombsquadvisibilityupdater(param_00,param_01) +{ + self endon("death"); + foreach(var_03 in level.players) + { + if(level.teambased) + { + if(var_03.team == param_00 && var_03 maps\mp\_utility::_hasperk("specialty_detectexplosive")) + { + self showtoplayer(var_03); + } + + continue; + } + + if(isdefined(param_01) && var_03 == param_01) + { + continue; + } + + if(!var_03 maps\mp\_utility::_hasperk("specialty_detectexplosive")) + { + continue; + } + + self showtoplayer(var_03); + } + + for(;;) + { + level common_scripts\utility::waittill_any("joined_team","player_spawned","changed_kit","update_bombsquad"); + self hide(); + foreach(var_03 in level.players) + { + if(level.teambased) + { + if(var_03.team == param_00 && var_03 maps\mp\_utility::_hasperk("specialty_detectexplosive")) + { + self showtoplayer(var_03); + } + + continue; + } + + if(isdefined(param_01) && var_03 == param_01) + { + continue; + } + + if(!var_03 maps\mp\_utility::_hasperk("specialty_detectexplosive")) + { + continue; + } + + self showtoplayer(var_03); + } + } +} + +//Function Number: 8 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_00.hits = 0; + var_00.hasdonecombat = 0; + var_00 kc_regweaponforfxremoval("remotemissile_projectile_mp"); + var_00 thread onplayerspawned(); + var_00 thread bombsquadwaiter(); + var_00 thread watchmissileusage(); + var_00 thread sniperdustwatcher(); + } +} + +//Function Number: 9 +onplayerspawned() +{ + self endon("disconnect"); + for(;;) + { + self waittill("spawned_player"); + self.currentweaponatspawn = self getcurrentweapon(); + self.empendtime = 0; + self.concussionendtime = 0; + self.hits = 0; + self.hasdonecombat = 0; + if(!isdefined(self.trackingweaponname)) + { + self.trackingweaponname = ""; + self.trackingweaponname = "none"; + self.trackingweaponshots = 0; + self.trackingweaponkills = 0; + self.trackingweaponhits = 0; + self.trackingweaponheadshots = 0; + self.trackingweapondeaths = 0; + } + + thread watchweaponusage(); + thread watchgrenadeusage(); + thread watchweaponchange(); + thread watchstingerusage(); + thread watchjavelinusage(); + thread watchsentryusage(); + thread func_2CD9(); + thread watchmineusage(); + thread maps\mp\gametypes\_class::trackriotshield(); + thread maps\mp\gametypes\_equipment::watchtrophyusage(); + thread stancerecoiladjuster(); + self.lasthittime = []; + self.droppeddeathweapon = undefined; + self.tookweaponfrom = []; + thread updatesavedlastweapon(); + thread updateweaponrank(); + if(self hasweapon("semtex_mp")) + { + thread monitorsemtex(); + } + + self.currentweaponatspawn = undefined; + self.trophyremainingammo = undefined; + } +} + +//Function Number: 10 +sniperdustwatcher() +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + var_00 = undefined; + for(;;) + { + self waittill("weapon_fired"); + if(maps\mp\_utility::getweaponclass(self getcurrentweapon()) != "weapon_sniper") + { + continue; + } + + if(self getstance() != "prone") + { + continue; + } + + var_01 = anglestoforward(self.angles); + if(!isdefined(var_00) || gettime() - var_00 > 2000) + { + playfx(level._effect["sniperDustLarge"],self.origin + (0,0,10) + var_01 * 50,var_01); + var_00 = gettime(); + continue; + } + + playfx(level._effect["sniperDustLargeSuppress"],self.origin + (0,0,10) + var_01 * 50,var_01); + } +} + +//Function Number: 11 +watchstingerusage() +{ + maps\mp\_stinger::stingerusageloop(); +} + +//Function Number: 12 +watchjavelinusage() +{ + maps\mp\_javelin::javelinusageloop(); +} + +//Function Number: 13 +watchweaponchange() +{ + self endon("death"); + self endon("disconnect"); + self endon("faux_spawn"); + thread watchstartweaponchange(); + self.lastdroppableweapon = self.currentweaponatspawn; + self.hitsthismag = []; + var_00 = self getcurrentweapon(); + if(maps\mp\_utility::iscacprimaryweapon(var_00) && !isdefined(self.hitsthismag[var_00])) + { + self.hitsthismag[var_00] = weaponclipsize(var_00); + } + + self.bothbarrels = undefined; + if(issubstr(var_00,"ranger")) + { + thread watchrangerusage(var_00); + } + + for(;;) + { + self waittill("weapon_change",var_01); + if(var_01 == "none") + { + continue; + } + + if(var_01 == "briefcase_bomb_mp" || var_01 == "briefcase_bomb_defuse_mp") + { + continue; + } + + if(maps\mp\_utility::iskillstreakweapon(var_01)) + { + if(maps\mp\_utility::isjuggernaut()) + { + self.changingweapon = undefined; + } + + continue; + } + + var_02 = strtok(var_01,"_"); + self.bothbarrels = undefined; + if(issubstr(var_01,"ranger")) + { + thread watchrangerusage(var_01); + } + + if(var_02[0] == "alt") + { + var_03 = getsubstr(var_01,4); + var_01 = var_03; + var_02 = strtok(var_01,"_"); + } + else if(var_02[0] != "iw5") + { + var_01 = var_02[0]; + } + + if(var_01 != "none" && var_02[0] != "iw5") + { + if(maps\mp\_utility::iscacprimaryweapon(var_01) && !isdefined(self.hitsthismag[var_01 + "_mp"])) + { + self.hitsthismag[var_01 + "_mp"] = weaponclipsize(var_01 + "_mp"); + } + } + else if(var_01 != "none" && var_02[0] == "iw5") + { + if(maps\mp\_utility::iscacprimaryweapon(var_01) && !isdefined(self.hitsthismag[var_01])) + { + self.hitsthismag[var_01] = weaponclipsize(var_01); + } + } + + self.changingweapon = undefined; + if(var_02[0] == "iw5") + { + self.lastdroppableweapon = var_01; + } + else if(var_01 != "none" && maydropweapon(var_01 + "_mp")) + { + self.lastdroppableweapon = var_01 + "_mp"; + } + + if(isdefined(self.class_num)) + { + if(var_02[0] != "iw5") + { + var_01 = var_01 + "_mp"; + } + + if(isdefined(self.loadoutprimarybuff) && self.loadoutprimarybuff != "specialty_null") + { + if(var_01 == self.primaryweapon && !maps\mp\_utility::_hasperk(self.loadoutprimarybuff)) + { + maps\mp\_utility::giveperk(self.loadoutprimarybuff,1); + } + + if(var_01 != self.primaryweapon && maps\mp\_utility::_hasperk(self.loadoutprimarybuff)) + { + maps\mp\_utility::_unsetperk(self.loadoutprimarybuff); + } + } + + if(isdefined(self.loadoutsecondarybuff) && self.loadoutsecondarybuff != "specialty_null") + { + if(var_01 == self.secondaryweapon && !maps\mp\_utility::_hasperk(self.loadoutsecondarybuff)) + { + maps\mp\_utility::giveperk(self.loadoutsecondarybuff,1); + } + + if(var_01 != self.secondaryweapon && maps\mp\_utility::_hasperk(self.loadoutsecondarybuff)) + { + maps\mp\_utility::_unsetperk(self.loadoutsecondarybuff); + } + } + } + } +} + +//Function Number: 14 +watchstartweaponchange() +{ + self endon("death"); + self endon("disconnect"); + self.changingweapon = undefined; + for(;;) + { + self waittill("weapon_switch_started",var_00); + self.changingweapon = var_00; + if(var_00 == "none" && isdefined(self.iscapturingcrate) && self.iscapturingcrate) + { + while(self.iscapturingcrate) + { + wait 0.05; + } + + self.changingweapon = undefined; + } + } +} + +//Function Number: 15 +func_2CD9() +{ + self endon("death"); + self endon("disconnect"); + self endon("faux_spawn"); + for(;;) + { + self waittill("reload"); + var_00 = self getcurrentweapon(); + self.bothbarrels = undefined; + if(!issubstr(var_00,"ranger")) + { + continue; + } + + thread watchrangerusage(var_00); + } +} + +//Function Number: 16 +watchrangerusage(param_00) +{ + var_01 = self getweaponammoclip(param_00,"right"); + var_02 = self getweaponammoclip(param_00,"left"); + self endon("reload"); + self endon("weapon_change"); + for(;;) + { + self waittill("weapon_fired",var_03); + if(var_03 != param_00) + { + continue; + } + + self.bothbarrels = undefined; + if(issubstr(param_00,"akimbo")) + { + var_04 = self getweaponammoclip(param_00,"left"); + var_05 = self getweaponammoclip(param_00,"right"); + if(var_02 != var_04 && var_01 != var_05) + { + self.bothbarrels = 1; + } + + if(!var_04 || !var_05) + { + return; + } + + var_02 = var_04; + var_01 = var_05; + continue; + } + + if(var_01 == 2 && !self getweaponammoclip(param_00,"right")) + { + self.bothbarrels = 1; + return; + } + } +} + +//Function Number: 17 +ishackweapon(param_00) +{ + if(param_00 == "radar_mp" || param_00 == "airstrike_mp" || param_00 == "helicopter_mp") + { + return 1; + } + + if(param_00 == "briefcase_bomb_mp") + { + return 1; + } + + return 0; +} + +//Function Number: 18 +maydropweapon(param_00) +{ + if(param_00 == "none") + { + return 0; + } + + if(issubstr(param_00,"ac130")) + { + return 0; + } + + if(issubstr(param_00,"uav")) + { + return 0; + } + + if(issubstr(param_00,"killstreak")) + { + return 0; + } + + var_01 = weaponinventorytype(param_00); + if(var_01 != "primary") + { + return 0; + } + + return 1; +} + +//Function Number: 19 +dropweaponfordeath(param_00) +{ + if(isdefined(level.blockweapondrops)) + { + return; + } + + if(isdefined(self.droppeddeathweapon)) + { + return; + } + + if(level.ingraceperiod) + { + return; + } + + var_01 = self.lastdroppableweapon; + if(!isdefined(var_01)) + { + return; + } + + if(var_01 == "none") + { + return; + } + + if(!self hasweapon(var_01)) + { + return; + } + + if(maps\mp\_utility::isjuggernaut()) + { + return; + } + + var_02 = strtok(var_01,"_"); + if(var_02[0] == "alt") + { + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + if(var_03 > 0 && var_03 < 2) + { + var_01 = var_01 + var_02[var_03]; + continue; + } + + if(var_03 > 0) + { + var_01 = var_01 + "_" + var_02[var_03]; + continue; + } + + var_01 = ""; + } + } + + if(var_01 != "riotshield_mp") + { + if(!self anyammoforweaponmodes(var_01)) + { + return; + } + + var_04 = self getweaponammoclip(var_01,"right"); + var_05 = self getweaponammoclip(var_01,"left"); + if(!var_04 && !var_05) + { + return; + } + + var_06 = self getweaponammostock(var_01); + var_07 = weaponmaxammo(var_01); + if(var_06 > var_07) + { + var_06 = var_07; + } + + var_08 = self dropitem(var_01); + if(!isdefined(var_08)) + { + return; + } + + var_08 itemweaponsetammo(var_04,var_06,var_05); + } + else + { + var_08 = self dropitem(var_02); + if(!isdefined(var_08)) + { + return; + } + + var_08 itemweaponsetammo(1,1,0); + } + + self.droppeddeathweapon = 1; + var_08.owner = self; + var_08.ownersattacker = param_00; + var_08 thread watchpickup(); + var_08 thread deletepickupafterawhile(); +} + +//Function Number: 20 +detachifattached(param_00,param_01) +{ + var_02 = self getattachsize(); + var_03 = 0; + while(var_03 < var_02) + { + var_04 = self getattachmodelname(var_03); + if(var_04 != param_00) + { + continue; + } + + var_05 = self getattachtagname(var_03); + self detach(param_00,var_05); + if(var_05 != param_01) + { + var_02 = self getattachsize(); + for(var_03 = 0;var_03 < var_02;var_03++) + { + var_05 = self getattachtagname(var_03); + if(var_05 != param_01) + { + continue; + } + + param_00 = self getattachmodelname(var_03); + self detach(param_00,var_05); + break; + } + } + + return 1; + var_04++; + } + + return 0; +} + +//Function Number: 21 +deletepickupafterawhile() +{ + self endon("death"); + wait 60; + if(!isdefined(self)) + { + return; + } + + self delete(); +} + +//Function Number: 22 +getitemweaponname() +{ + var_00 = self.classname; + var_01 = getsubstr(var_00,7); + return var_01; +} + +//Function Number: 23 +watchpickup() +{ + self endon("death"); + var_00 = getitemweaponname(); + for(;;) + { + self waittill("trigger",var_01,var_02); + if(isdefined(var_02)) + { + break; + } + } + + var_03 = var_02 getitemweaponname(); + if(isdefined(var_01.tookweaponfrom[var_03])) + { + var_02.owner = var_01.tookweaponfrom[var_03]; + var_02.ownersattacker = var_01; + var_01.tookweaponfrom[var_03] = undefined; + } + + var_02 thread watchpickup(); + if(isdefined(self.ownersattacker) && self.ownersattacker == var_01) + { + var_01.tookweaponfrom[var_00] = self.owner; + return; + } + + var_01.tookweaponfrom[var_00] = undefined; +} + +//Function Number: 24 +itemremoveammofromaltmodes() +{ + var_00 = getitemweaponname(); + var_01 = weaponaltweaponname(var_00); + for(var_02 = 1;var_01 != "none" && var_01 != var_00;var_02++) + { + self itemweaponsetammo(0,0,0,var_02); + var_01 = weaponaltweaponname(var_01); + } +} + +//Function Number: 25 +handlescavengerbagpickup(param_00) +{ + self endon("death"); + level endon("game_ended"); + self waittill("scavenger",var_01); + var_01 notify("scavenger_pickup"); + var_01 playlocalsound("scavenger_pack_pickup"); + var_02 = var_01 getweaponslistoffhands(); + foreach(var_04 in var_02) + { + if(var_04 != "throwingknife_mp") + { + continue; + } + + var_05 = var_01 getweaponammoclip(var_04); + var_01 setweaponammoclip(var_04,var_05 + 1); + } + + var_07 = var_01 getweaponslistprimaries(); + foreach(var_09 in var_07) + { + if(!maps\mp\_utility::iscacprimaryweapon(var_09) && !level.scavenger_secondary) + { + continue; + } + + if(issubstr(var_09,"alt") && issubstr(var_09,"m320") || issubstr(var_09,"gl") || issubstr(var_09,"gp25") || issubstr(var_09,"hybrid")) + { + continue; + } + + if(maps\mp\_utility::getweaponclass(var_09) == "weapon_projectile") + { + continue; + } + + var_0A = var_01 getweaponammostock(var_09); + var_0B = weaponclipsize(var_09); + var_01 setweaponammostock(var_09,var_0A + var_0B); + } + + var_01 maps\mp\gametypes\_damagefeedback::updatedamagefeedback("scavenger"); +} + +//Function Number: 26 +dropscavengerfordeath(param_00) +{ + if(level.ingraceperiod) + { + return; + } + + if(!isdefined(param_00)) + { + return; + } + + if(param_00 == self) + { + return; + } + + var_01 = self dropscavengerbag("scavenger_bag_mp"); + var_01 thread handlescavengerbagpickup(self); +} + +//Function Number: 27 +getweaponbasedgrenadecount(param_00) +{ + return 2; +} + +//Function Number: 28 +getweaponbasedsmokegrenadecount(param_00) +{ + return 1; +} + +//Function Number: 29 +getfraggrenadecount() +{ + var_00 = "frag_grenade_mp"; + var_01 = self getammocount(var_00); + return var_01; +} + +//Function Number: 30 +getsmokegrenadecount() +{ + var_00 = "smoke_grenade_mp"; + var_01 = self getammocount(var_00); + return var_01; +} + +//Function Number: 31 +setweaponstat(param_00,param_01,param_02) +{ + maps\mp\gametypes\_gamelogic::setweaponstat(param_00,param_01,param_02); +} + +//Function Number: 32 +watchweaponusage(param_00) +{ + self endon("death"); + self endon("disconnect"); + self endon("faux_spawn"); + level endon("game_ended"); + for(;;) + { + self waittill("weapon_fired",var_01); + self.hasdonecombat = 1; + if(!isprimaryweapon(var_01) && !issidearm(var_01)) + { + continue; + } + + if(isdefined(self.hitsthismag[var_01])) + { + thread updatemagshots(var_01); + } + + var_02 = maps\mp\gametypes\_persistance::statgetbuffered("totalShots") + 1; + var_03 = maps\mp\gametypes\_persistance::statgetbuffered("hits"); + var_04 = clamp(float(var_03) / float(var_02),0,1) * 10000; + maps\mp\gametypes\_persistance::statsetbuffered("totalShots",var_02); + maps\mp\gametypes\_persistance::statsetbuffered("accuracy",int(var_04)); + maps\mp\gametypes\_persistance::statsetbuffered("misses",int(var_02 - var_03)); + if(isdefined(self.laststandparams) && self.laststandparams.laststandstarttime == gettime()) + { + self.hits = 0; + return; + } + + var_05 = 1; + setweaponstat(var_01,var_05,"shots"); + setweaponstat(var_01,self.hits,"hits"); + self.hits = 0; + } +} + +//Function Number: 33 +updatemagshots(param_00) +{ + self endon("death"); + self endon("disconnect"); + self endon("updateMagShots_" + param_00); + self.hitsthismag[param_00]--; + wait 0.05; + self.hitsthismag[param_00] = weaponclipsize(param_00); +} + +//Function Number: 34 +checkhitsthismag(param_00) +{ + self endon("death"); + self endon("disconnect"); + self notify("updateMagShots_" + param_00); + waittillframeend; + if(isdefined(self.hitsthismag[param_00]) && self.hitsthismag[param_00] == 0) + { + var_01 = maps\mp\_utility::getweaponclass(param_00); + maps\mp\gametypes\_missions::genericchallenge(var_01); + self.hitsthismag[param_00] = weaponclipsize(param_00); + } +} + +//Function Number: 35 +checkhit(param_00,param_01) +{ + if(maps\mp\_utility::isstrstart(param_00,"alt_")) + { + var_02 = strtok(param_00,"_"); + foreach(var_04 in var_02) + { + if(var_04 == "shotgun") + { + var_05 = getsubstr(param_00,0,4); + if(!isprimaryweapon(var_05) && !issidearm(var_05)) + { + self.hits = 1; + } + + continue; + } + + if(var_04 == "hybrid") + { + var_06 = getsubstr(param_00,4); + param_00 = var_06; + } + } + } + + if(!isprimaryweapon(param_00) && !issidearm(param_00)) + { + return; + } + + switch(weaponclass(param_00)) + { + case "pistol": + case "mg": + case "smg": + case "rifle": + self.hits++; + break; + + case "spread": + self.hits = 1; + break; + + default: + break; + } + + waittillframeend; + if(isdefined(self.hitsthismag[param_00])) + { + thread checkhitsthismag(param_00); + } + + if(!isdefined(self.lasthittime[param_00])) + { + self.lasthittime[param_00] = 0; + } + + if(self.lasthittime[param_00] == gettime()) + { + return; + } + + self.lasthittime[param_00] = gettime(); + var_08 = maps\mp\gametypes\_persistance::statgetbuffered("totalShots"); + var_09 = maps\mp\gametypes\_persistance::statgetbuffered("hits") + 1; + if(var_09 <= var_08) + { + maps\mp\gametypes\_persistance::statsetbuffered("hits",var_09); + maps\mp\gametypes\_persistance::statsetbuffered("misses",int(var_08 - var_09)); + maps\mp\gametypes\_persistance::statsetbuffered("accuracy",int(var_09 * 10000 / var_08)); + } +} + +//Function Number: 36 +attackercandamageitem(param_00,param_01) +{ + return friendlyfirecheck(param_01,param_00); +} + +//Function Number: 37 +friendlyfirecheck(param_00,param_01,param_02) +{ + if(!isdefined(param_00)) + { + return 1; + } + + if(!level.teambased) + { + return 1; + } + + var_03 = param_01.team; + var_04 = level.friendlyfire; + if(isdefined(param_02)) + { + var_04 = param_02; + } + + if(var_04 != 0) + { + return 1; + } + + if(param_01 == param_00) + { + return 1; + } + + if(!isdefined(var_03)) + { + return 1; + } + + if(var_03 != param_00.team) + { + return 1; + } + + return 0; +} + +//Function Number: 38 +watchgrenadeusage() +{ + self endon("death"); + self endon("disconnect"); + self endon("faux_spawn"); + self.throwinggrenade = undefined; + self.gotpullbacknotify = 0; + if(maps\mp\_utility::getintproperty("scr_deleteexplosivesonspawn",1) == 1) + { + if(isdefined(self.c4array)) + { + for(var_00 = 0;var_00 < self.c4array.size;var_00++) + { + if(isdefined(self.c4array[var_00])) + { + if(isdefined(self.c4array[var_00].trigger)) + { + self.c4array[var_00].trigger delete(); + } + + self.c4array[var_00] delete(); + } + } + } + + self.c4array = []; + if(isdefined(self.claymorearray)) + { + for(var_00 = 0;var_00 < self.claymorearray.size;var_00++) + { + if(isdefined(self.claymorearray[var_00])) + { + if(isdefined(self.claymorearray[var_00].trigger)) + { + self.claymorearray[var_00].trigger delete(); + } + + self.claymorearray[var_00] delete(); + } + } + } + + self.claymorearray = []; + if(isdefined(self.bouncingbettyarray)) + { + for(var_00 = 0;var_00 < self.bouncingbettyarray.size;var_00++) + { + if(isdefined(self.bouncingbettyarray[var_00])) + { + if(isdefined(self.bouncingbettyarray[var_00].trigger)) + { + self.bouncingbettyarray[var_00].trigger delete(); + } + + self.bouncingbettyarray[var_00] delete(); + } + } + } + + self.bouncingbettyarray = []; + } + else + { + if(!isdefined(self.c4array)) + { + self.c4array = []; + } + + if(!isdefined(self.claymorearray)) + { + self.claymorearray = []; + } + + if(!isdefined(self.bouncingbettyarray)) + { + self.bouncingbettyarray = []; + } + } + + thread watchc4(); + thread watchc4detonation(); + thread watchc4altdetonation(); + thread watchclaymores(); + thread deletec4andclaymoresondisconnect(); + thread watchforthrowbacks(); + for(;;) + { + self waittill("grenade_pullback",var_01); + setweaponstat(var_01,1,"shots"); + self.hasdonecombat = 1; + if(var_01 == "claymore_mp") + { + continue; + } + + self.throwinggrenade = var_01; + self.gotpullbacknotify = 1; + if(var_01 == "c4_mp") + { + beginc4tracking(); + } + else + { + begingrenadetracking(); + } + + self.throwinggrenade = undefined; + } +} + +//Function Number: 39 +begingrenadetracking() +{ + self endon("death"); + self endon("disconnect"); + self endon("offhand_end"); + self endon("weapon_change"); + var_00 = gettime(); + self waittill("grenade_fire",var_01,var_02); + if(gettime() - var_00 > 1000 && var_02 == "frag_grenade_mp") + { + var_01.iscooked = 1; + } + + self.changingweapon = undefined; + var_01.owner = self; + switch(var_02) + { + case "semtex_mp": + case "frag_grenade_mp": + var_01 thread maps\mp\gametypes\_shellshock::grenade_earthquake(); + var_01.originalowner = self; + break; + + case "flash_grenade_mp": + case "concussion_grenade_mp": + var_01 thread empexplodewaiter(); + break; + + case "smoke_grenade_mp": + var_01 thread watchsmokeexplode(); + break; + } +} + +//Function Number: 40 +watchsmokeexplode() +{ + level endon("smokeTimesUp"); + var_00 = self.owner; + var_00 endon("disconnect"); + self waittill("explode",var_01); + var_02 = 128; + var_03 = 8; + level thread func_2CFD(var_03,var_02,var_01); + for(;;) + { + if(!isdefined(var_00)) + { + break; + } + + foreach(var_05 in level.players) + { + if(!isdefined(var_05)) + { + continue; + } + + if(level.teambased && var_05.team == var_00.team) + { + continue; + } + + if(distancesquared(var_05.origin,var_01) < var_02 * var_02) + { + var_05.inplayersmokescreen = var_00; + continue; + } + + var_05.inplayersmokescreen = undefined; + } + + wait 0.05; + } +} + +//Function Number: 41 +func_2CFD(param_00,param_01,param_02) +{ + maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause(param_00); + level notify("smokeTimesUp"); + waittillframeend; + foreach(var_04 in level.players) + { + if(isdefined(var_04)) + { + var_04.inplayersmokescreen = undefined; + } + } +} + +//Function Number: 42 +addmissiletosighttraces(param_00) +{ + self.team = param_00; + level.missilesforsighttraces[level.missilesforsighttraces.size] = self; + self waittill("death"); + var_01 = []; + foreach(var_03 in level.missilesforsighttraces) + { + if(var_03 != self) + { + var_01[var_01.size] = var_03; + } + } + + level.missilesforsighttraces = var_01; +} + +//Function Number: 43 +watchmissileusage() +{ + self endon("disconnect"); + for(;;) + { + self waittill("missile_fire",var_00,var_01); + if(issubstr(var_01,"gl_")) + { + var_00.primaryweapon = self getcurrentprimaryweapon(); + var_00 thread maps\mp\gametypes\_shellshock::grenade_earthquake(); + } + + switch(var_01) + { + case "at4_mp": + case "iw5_smaw_mp": + case "stinger_mp": + level notify("stinger_fired",self,var_00,self.stingertarget); + thread maps\mp\_utility::setaltsceneobj(var_00,"tag_origin",65); + break; + + case "javelin_mp": + case "remote_mortar_missile_mp": + case "uav_strike_projectile_mp": + level notify("stinger_fired",self,var_00,self.javelintarget); + thread maps\mp\_utility::setaltsceneobj(var_00,"tag_origin",65); + break; + + default: + break; + } + + switch(var_01) + { + case "rpg_mp": + case "at4_mp": + case "javelin_mp": + case "iw5_smaw_mp": + case "remote_mortar_missile_mp": + case "uav_strike_projectile_mp": + case "remotemissile_projectile_mp": + case "ac130_40mm_mp": + case "ac130_105mm_mp": + var_00 thread maps\mp\gametypes\_shellshock::grenade_earthquake(); + break; + + default: + break; + } + } +} + +//Function Number: 44 +watchsentryusage() +{ + self endon("death"); + self endon("disconnect"); + self endon("faux_spawn"); + for(;;) + { + self waittill("sentry_placement_finished",var_00); + thread maps\mp\_utility::setaltsceneobj(var_00,"tag_flash",65); + } +} + +//Function Number: 45 +empexplodewaiter() +{ + thread maps\mp\gametypes\_shellshock::endondeath(); + self endon("end_explode"); + self waittill("explode",var_00); + var_01 = getempdamageents(var_00,512,0); + foreach(var_03 in var_01) + { + if(isdefined(var_03.owner) && !friendlyfirecheck(self.owner,var_03.owner)) + { + continue; + } + + var_03 notify("emp_damage",self.owner,8); + } +} + +//Function Number: 46 +beginc4tracking() +{ + self endon("death"); + self endon("disconnect"); + common_scripts\utility::waittill_any("grenade_fire","weapon_change","offhand_end"); + self.changingweapon = undefined; +} + +//Function Number: 47 +watchforthrowbacks() +{ + self endon("death"); + self endon("disconnect"); + for(;;) + { + self waittill("grenade_fire",var_00,var_01); + if(self.gotpullbacknotify) + { + self.gotpullbacknotify = 0; + continue; + } + + if(!issubstr(var_01,"frag_") && !issubstr(var_01,"semtex_")) + { + continue; + } + + var_00.threwback = 1; + thread maps\mp\_utility::incplayerstat("throwbacks",1); + var_00 thread maps\mp\gametypes\_shellshock::grenade_earthquake(); + var_00.originalowner = self; + } +} + +//Function Number: 48 +watchc4() +{ + self endon("spawned_player"); + self endon("disconnect"); + for(;;) + { + self waittill("grenade_fire",var_00,var_01); + if(var_01 == "c4" || var_01 == "c4_mp") + { + if(!self.c4array.size) + { + thread watchc4altdetonate(); + } + + if(self.c4array.size) + { + self.c4array = common_scripts\utility::array_removeundefined(self.c4array); + if(self.c4array.size >= level.maxperplayerexplosives) + { + self.c4array[0] detonate(); + } + } + + self.c4array[self.c4array.size] = var_00; + var_00.owner = self; + var_00.team = self.team; + var_00.activated = 0; + var_00.weaponname = var_01; + var_00 thread maps\mp\gametypes\_shellshock::c4_earthquake(); + var_00 thread c4activate(); + var_00 thread c4damage(); + var_00 thread c4empdamage(); + var_00 thread c4empkillstreakwait(); + var_00 waittill("missile_stuck"); + var_00.trigger = spawn("script_origin",var_00.origin); + var_00 thread equipmentwatchuse(self); + } + } +} + +//Function Number: 49 +c4empdamage() +{ + self endon("death"); + for(;;) + { + self waittill("emp_damage",var_00,var_01); + playfxontag(common_scripts\utility::getfx("sentry_explode_mp"),self,"tag_origin"); + self.disabled = 1; + self notify("disabled"); + wait var_01; + self.disabled = undefined; + self notify("enabled"); + } +} + +//Function Number: 50 +c4empkillstreakwait() +{ + self endon("death"); + for(;;) + { + level waittill("emp_update"); + if((level.teambased && level.teamemped[self.team]) || !level.teambased && isdefined(level.empplayer) && level.empplayer != self.owner) + { + self.disabled = 1; + self notify("disabled"); + continue; + } + + self.disabled = undefined; + self notify("enabled"); + } +} + +//Function Number: 51 +setclaymoreteamheadicon(param_00) +{ + self endon("death"); + wait 0.05; + if(level.teambased) + { + maps\mp\_entityheadicons::setteamheadicon(param_00,(0,0,20)); + return; + } + + if(isdefined(self.owner)) + { + maps\mp\_entityheadicons::setplayerheadicon(self.owner,(0,0,20)); + } +} + +//Function Number: 52 +watchclaymores() +{ + self endon("spawned_player"); + self endon("disconnect"); + self.claymorearray = []; + for(;;) + { + self waittill("grenade_fire",var_00,var_01); + if(var_01 == "claymore" || var_01 == "claymore_mp") + { + if(!isalive(self)) + { + var_00 delete(); + return; + } + + var_00 hide(); + var_00 waittill("missile_stuck"); + var_02 = 40; + if(var_02 * var_02 < distancesquared(var_00.origin,self.origin)) + { + var_03 = bullettrace(self.origin,self.origin - (0,0,var_02),0,self); + if(var_03["fraction"] == 1) + { + var_00 delete(); + self setweaponammostock("claymore_mp",self getweaponammostock("claymore_mp") + 1); + continue; + } + + var_00.origin = var_03["position"]; + } + + var_00 show(); + self.claymorearray = common_scripts\utility::array_removeundefined(self.claymorearray); + if(self.claymorearray.size >= level.maxperplayerexplosives) + { + self.claymorearray[0] detonate(); + } + + self.claymorearray[self.claymorearray.size] = var_00; + var_00.owner = self; + var_00.team = self.team; + var_00.weaponname = var_01; + var_00.trigger = spawn("script_origin",var_00.origin); + level.mines[level.mines.size] = var_00; + var_00 thread c4damage(); + var_00 thread c4empdamage(); + var_00 thread c4empkillstreakwait(); + var_00 thread claymoredetonation(); + var_00 thread equipmentwatchuse(self); + var_00 thread setclaymoreteamheadicon(self.pers["team"]); + self.changingweapon = undefined; + } + } +} + +//Function Number: 53 +equipmentwatchuse(param_00) +{ + self endon("spawned_player"); + self endon("disconnect"); + self.trigger setcursorhint("HINT_NOICON"); + if(self.weaponname == "c4_mp") + { + self.trigger sethintstring(&"MP_PICKUP_C4"); + } + else if(self.weaponname == "claymore_mp") + { + self.trigger sethintstring(&"MP_PICKUP_CLAYMORE"); + } + else if(self.weaponname == "bouncingbetty_mp") + { + self.trigger sethintstring(&"MP_PICKUP_BOUNCING_BETTY"); + } + + self.trigger maps\mp\_utility::setselfusable(param_00); + self.trigger thread maps\mp\_utility::notusableforjoiningplayers(self); + for(;;) + { + self.trigger waittill("trigger",param_00); + param_00 playlocalsound("scavenger_pack_pickup"); + param_00 setweaponammostock(self.weaponname,param_00 getweaponammostock(self.weaponname) + 1); + self.trigger delete(); + self delete(); + self notify("death"); + } +} + +//Function Number: 54 +claymoredetonation() +{ + self endon("death"); + var_00 = spawn("trigger_radius",self.origin + (0,0,0 - level.claymoredetonateradius),0,level.claymoredetonateradius,level.claymoredetonateradius * 2); + thread deleteondeath(var_00); + for(;;) + { + var_00 waittill("trigger",var_01); + if(getdvarint("scr_claymoredebug") != 1) + { + if(isdefined(self.owner) && var_01 == self.owner) + { + continue; + } + + if(!friendlyfirecheck(self.owner,var_01,0)) + { + continue; + } + } + + if(lengthsquared(var_01 getentityvelocity()) < 10) + { + continue; + } + + var_02 = abs(var_01.origin[2] - self.origin[2]); + if(var_02 > 128) + { + continue; + } + + if(!var_01 shouldaffectclaymore(self)) + { + continue; + } + + if(var_01 damageconetrace(self.origin,self) > 0) + { + break; + } + } + + self playsound("claymore_activated"); + if(isplayer(var_01) && var_01 maps\mp\_utility::_hasperk("specialty_delaymine")) + { + var_01 notify("triggered_claymore"); + wait level.delayminetime; + } + else + { + wait level.claymoredetectiongraceperiod; + } + + if(isdefined(self.trigger)) + { + self.trigger delete(); + } + + self detonate(); +} + +//Function Number: 55 +shouldaffectclaymore(param_00) +{ + if(isdefined(param_00.disabled)) + { + return 0; + } + + var_01 = self.origin + (0,0,32); + var_02 = var_01 - param_00.origin; + var_03 = anglestoforward(param_00.angles); + var_04 = vectordot(var_02,var_03); + if(var_04 < level.claymoredetectionmindist) + { + return 0; + } + + var_02 = vectornormalize(var_02); + var_05 = vectordot(var_02,var_03); + return var_05 > level.claymoredetectiondot; +} + +//Function Number: 56 +deleteondeath(param_00) +{ + self waittill("death"); + wait 0.05; + if(isdefined(param_00)) + { + if(isdefined(param_00.trigger)) + { + param_00.trigger delete(); + } + + param_00 delete(); + } +} + +//Function Number: 57 +c4activate() +{ + self endon("death"); + self waittill("missile_stuck"); + wait 0.05; + self notify("activated"); + self.activated = 1; +} + +//Function Number: 58 +watchc4altdetonate() +{ + self endon("death"); + self endon("disconnect"); + self endon("detonated"); + level endon("game_ended"); + var_00 = 0; + for(;;) + { + if(self usebuttonpressed()) + { + var_00 = 0; + while(self usebuttonpressed()) + { + var_00 = var_00 + 0.05; + wait 0.05; + } + + if(var_00 >= 0.5) + { + continue; + } + + var_00 = 0; + while(!self usebuttonpressed() && var_00 < 0.5) + { + var_00 = var_00 + 0.05; + wait 0.05; + } + + if(var_00 >= 0.5) + { + continue; + } + + if(!self.c4array.size) + { + return; + } + + self notify("alt_detonate"); + } + + wait 0.05; + } +} + +//Function Number: 59 +watchc4detonation() +{ + self endon("death"); + self endon("disconnect"); + for(;;) + { + self waittillmatch("c4_mp","detonate"); + var_00 = []; + for(var_01 = 0;var_01 < self.c4array.size;var_01++) + { + var_02 = self.c4array[var_01]; + if(isdefined(self.c4array[var_01])) + { + var_02 thread waitanddetonate(0.1); + } + } + + self.c4array = var_00; + self notify("detonated"); + } +} + +//Function Number: 60 +watchc4altdetonation() +{ + self endon("death"); + self endon("disconnect"); + for(;;) + { + self waittill("alt_detonate"); + var_00 = self getcurrentweapon(); + if(var_00 != "c4_mp") + { + var_01 = []; + for(var_02 = 0;var_02 < self.c4array.size;var_02++) + { + var_03 = self.c4array[var_02]; + if(isdefined(self.c4array[var_02])) + { + var_03 thread waitanddetonate(0.1); + } + } + + self.c4array = var_01; + self notify("detonated"); + } + } +} + +//Function Number: 61 +waitanddetonate(param_00) +{ + self endon("death"); + wait param_00; + waittillenabled(); + self detonate(); +} + +//Function Number: 62 +deletec4andclaymoresondisconnect() +{ + self endon("death"); + self waittill("disconnect"); + var_00 = self.c4array; + var_01 = self.claymorearray; + wait 0.05; + for(var_02 = 0;var_02 < var_00.size;var_02++) + { + if(isdefined(var_00[var_02])) + { + var_00[var_02] delete(); + } + } + + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + if(isdefined(var_01[var_02])) + { + var_01[var_02] delete(); + } + } +} + +//Function Number: 63 +c4damage() +{ + self endon("death"); + self setcandamage(1); + self.maxhealth = 100000; + self.health = self.maxhealth; + var_00 = undefined; + for(;;) + { + self waittill("damage",var_01,var_00,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09); + if(!isplayer(var_00)) + { + continue; + } + + if(!friendlyfirecheck(self.owner,var_00)) + { + continue; + } + + if(isdefined(var_09)) + { + switch(var_09) + { + case "flash_grenade_mp": + case "smoke_grenade_mp": + case "concussion_grenade_mp": + break; + } + } + + break; + } + + if(level.c4explodethisframe) + { + wait 0.1 + randomfloat(0.4); + } + else + { + wait 0.05; + } + + if(!isdefined(self)) + { + return; + } + + level.c4explodethisframe = 1; + thread resetc4explodethisframe(); + if(isdefined(var_04) && issubstr(var_04,"MOD_GRENADE") || issubstr(var_04,"MOD_EXPLOSIVE")) + { + self.waschained = 1; + } + + if(isdefined(var_08) && var_08 & level.idflags_penetration) + { + self.wasdamagedfrombulletpenetration = 1; + } + + self.wasdamaged = 1; + if(isplayer(var_00)) + { + var_00 maps\mp\gametypes\_damagefeedback::updatedamagefeedback("c4"); + } + + if(level.teambased) + { + if(isdefined(var_00) && isdefined(var_00.pers["team"]) && isdefined(self.owner) && isdefined(self.owner.pers["team"])) + { + if(var_00.pers["team"] != self.owner.pers["team"]) + { + var_00 notify("destroyed_explosive"); + } + } + } + else if(isdefined(self.owner) && isdefined(var_00) && var_00 != self.owner) + { + var_00 notify("destroyed_explosive"); + } + + if(isdefined(self.trigger)) + { + self.trigger delete(); + } + + self detonate(var_00); +} + +//Function Number: 64 +resetc4explodethisframe() +{ + wait 0.05; + level.c4explodethisframe = 0; +} + +//Function Number: 65 +saydamaged(param_00,param_01) +{ + for(var_02 = 0;var_02 < 60;var_02++) + { + wait 0.05; + } +} + +//Function Number: 66 +waittillenabled() +{ + if(!isdefined(self.disabled)) + { + return; + } + + self waittill("enabled"); +} + +//Function Number: 67 +c4detectiontrigger(param_00) +{ + self waittill("activated"); + var_01 = spawn("trigger_radius",self.origin - (0,0,128),0,512,256); + var_01.detectid = "trigger" + gettime() + randomint(1000000); + var_01.owner = self; + var_01 thread detecticonwaiter(level.otherteam[param_00]); + self waittill("death"); + var_01 notify("end_detection"); + if(isdefined(var_01.bombsquadicon)) + { + var_01.bombsquadicon destroy(); + } + + var_01 delete(); +} + +//Function Number: 68 +claymoredetectiontrigger(param_00) +{ + var_01 = spawn("trigger_radius",self.origin - (0,0,128),0,512,256); + var_01.detectid = "trigger" + gettime() + randomint(1000000); + var_01.owner = self; + var_01 thread detecticonwaiter(level.otherteam[param_00]); + self waittill("death"); + var_01 notify("end_detection"); + if(isdefined(var_01.bombsquadicon)) + { + var_01.bombsquadicon destroy(); + } + + var_01 delete(); +} + +//Function Number: 69 +detecticonwaiter(param_00) +{ + self endon("end_detection"); + level endon("game_ended"); + while(!level.gameended) + { + self waittill("trigger",var_01); + if(!var_01.detectexplosives) + { + continue; + } + + if(level.teambased && var_01.team != param_00) + { + continue; + } + else if(!level.teambased && var_01 == self.owner.owner) + { + continue; + } + + if(isdefined(var_01.bombsquadids[self.detectid])) + { + continue; + } + + var_01 thread showheadicon(self); + } +} + +//Function Number: 70 +setupbombsquad() +{ + self.bombsquadids = []; + if(self.detectexplosives && !self.bombsquadicons.size) + { + for(var_00 = 0;var_00 < 4;var_00++) + { + self.bombsquadicons[var_00] = newclienthudelem(self); + self.bombsquadicons[var_00].x = 0; + self.bombsquadicons[var_00].y = 0; + self.bombsquadicons[var_00].z = 0; + self.bombsquadicons[var_00].alpha = 0; + self.bombsquadicons[var_00].archived = 1; + self.bombsquadicons[var_00] setshader("waypoint_bombsquad",14,14); + self.bombsquadicons[var_00] setwaypoint(0,0); + self.bombsquadicons[var_00].detectid = ""; + } + + return; + } + + if(!self.detectexplosives) + { + for(var_00 = 0;var_00 < self.bombsquadicons.size;var_00++) + { + self.bombsquadicons[var_00] destroy(); + } + + self.bombsquadicons = []; + } +} + +//Function Number: 71 +showheadicon(param_00) +{ + var_01 = param_00.detectid; + var_02 = -1; + for(var_03 = 0;var_03 < 4;var_03++) + { + var_04 = self.bombsquadicons[var_03].detectid; + if(var_04 == var_01) + { + return; + } + + if(var_04 == "") + { + var_02 = var_03; + } + } + + if(var_02 < 0) + { + return; + } + + self.bombsquadids[var_01] = 1; + self.bombsquadicons[var_02].x = param_00.origin[0]; + self.bombsquadicons[var_02].y = param_00.origin[1]; + self.bombsquadicons[var_02].z = param_00.origin[2] + 24 + 128; + self.bombsquadicons[var_02] fadeovertime(0.25); + self.bombsquadicons[var_02].alpha = 1; + self.bombsquadicons[var_02].detectid = param_00.detectid; + while(isalive(self) && isdefined(param_00) && self istouching(param_00)) + { + wait 0.05; + } + + if(!isdefined(self)) + { + return; + } + + self.bombsquadicons[var_02].detectid = ""; + self.bombsquadicons[var_02] fadeovertime(0.25); + self.bombsquadicons[var_02].alpha = 0; + self.bombsquadids[var_01] = undefined; +} + +//Function Number: 72 +getdamageableents(param_00,param_01,param_02,param_03) +{ + var_04 = []; + if(!isdefined(param_02)) + { + param_02 = 0; + } + + if(!isdefined(param_03)) + { + param_03 = 0; + } + + var_05 = param_01 * param_01; + var_06 = level.players; + for(var_07 = 0;var_07 < var_06.size;var_07++) + { + if(!isalive(var_06[var_07]) || var_06[var_07].sessionstate != "playing") + { + continue; + } + + var_08 = maps\mp\_utility::get_damageable_player_pos(var_06[var_07]); + var_09 = distancesquared(param_00,var_08); + if(var_09 < var_05 && !param_02 || weapondamagetracepassed(param_00,var_08,param_03,var_06[var_07])) + { + var_04[var_04.size] = maps\mp\_utility::get_damageable_player(var_06[var_07],var_08); + } + } + + var_0A = getentarray("grenade","classname"); + for(var_07 = 0;var_07 < var_0A.size;var_07++) + { + var_0B = maps\mp\_utility::get_damageable_grenade_pos(var_0A[var_07]); + var_09 = distancesquared(param_00,var_0B); + if(var_09 < var_05 && !param_02 || weapondamagetracepassed(param_00,var_0B,param_03,var_0A[var_07])) + { + var_04[var_04.size] = maps\mp\_utility::get_damageable_grenade(var_0A[var_07],var_0B); + } + } + + var_0C = getentarray("destructible","targetname"); + for(var_07 = 0;var_07 < var_0C.size;var_07++) + { + var_0B = var_0C[var_07].origin; + var_09 = distancesquared(param_00,var_0B); + if(var_09 < var_05 && !param_02 || weapondamagetracepassed(param_00,var_0B,param_03,var_0C[var_07])) + { + var_0D = spawnstruct(); + var_0D.isplayer = 0; + var_0D.isadestructable = 0; + var_0D.entity = var_0C[var_07]; + var_0D.damagecenter = var_0B; + var_04[var_04.size] = var_0D; + } + } + + var_0E = getentarray("destructable","targetname"); + for(var_07 = 0;var_07 < var_0E.size;var_07++) + { + var_0B = var_0E[var_07].origin; + var_09 = distancesquared(param_00,var_0B); + if(var_09 < var_05 && !param_02 || weapondamagetracepassed(param_00,var_0B,param_03,var_0E[var_07])) + { + var_0D = spawnstruct(); + var_0D.isplayer = 0; + var_0D.isadestructable = 1; + var_0D.entity = var_0E[var_07]; + var_0D.damagecenter = var_0B; + var_04[var_04.size] = var_0D; + } + } + + var_0F = getentarray("misc_turret","classname"); + foreach(var_11 in var_0F) + { + var_0B = var_11.origin + (0,0,32); + var_09 = distancesquared(param_00,var_0B); + if(var_09 < var_05 && !param_02 || weapondamagetracepassed(param_00,var_0B,param_03,var_11)) + { + switch(var_11.model) + { + case "vehicle_ugv_talon_gun_mp": + case "mp_remote_turret": + case "mp_sam_turret": + case "sentry_minigun_weak": + var_04[var_04.size] = maps\mp\_utility::get_damageable_sentry(var_11,var_0B); + break; + } + } + } + + var_13 = getentarray("script_model","classname"); + foreach(var_15 in var_13) + { + if(var_15.model != "projectile_bouncing_betty_grenade" && var_15.model != "ims_scorpion_body") + { + continue; + } + + var_0B = var_15.origin + (0,0,32); + var_09 = distancesquared(param_00,var_0B); + if(var_09 < var_05 && !param_02 || weapondamagetracepassed(param_00,var_0B,param_03,var_15)) + { + var_04[var_04.size] = maps\mp\_utility::get_damageable_mine(var_15,var_0B); + } + } + + return var_04; +} + +//Function Number: 73 +getempdamageents(param_00,param_01,param_02,param_03) +{ + var_04 = []; + if(!isdefined(param_02)) + { + param_02 = 0; + } + + if(!isdefined(param_03)) + { + param_03 = 0; + } + + var_05 = getentarray("grenade","classname"); + foreach(var_07 in var_05) + { + var_08 = var_07.origin; + var_09 = distance(param_00,var_08); + if(var_09 < param_01 && !param_02 || weapondamagetracepassed(param_00,var_08,param_03,var_07)) + { + var_04[var_04.size] = var_07; + } + } + + var_0B = getentarray("misc_turret","classname"); + foreach(var_0D in var_0B) + { + var_08 = var_0D.origin; + var_09 = distance(param_00,var_08); + if(var_09 < param_01 && !param_02 || weapondamagetracepassed(param_00,var_08,param_03,var_0D)) + { + var_04[var_04.size] = var_0D; + } + } + + return var_04; +} + +//Function Number: 74 +weapondamagetracepassed(param_00,param_01,param_02,param_03) +{ + var_04 = undefined; + var_05 = param_01 - param_00; + if(lengthsquared(var_05) < param_02 * param_02) + { + return 1; + } + + var_06 = vectornormalize(var_05); + var_04 = param_00 + (var_06[0] * param_02,var_06[1] * param_02,var_06[2] * param_02); + var_07 = bullettrace(var_04,param_01,0,param_03); + if(getdvarint("scr_damage_debug") != 0 || getdvarint("scr_debugMines") != 0) + { + thread debugprint(param_00,".dmg"); + if(isdefined(param_03)) + { + thread debugprint(param_01,"." + param_03.classname); + } + else + { + thread debugprint(param_01,".undefined"); + } + + if(var_07["fraction"] == 1) + { + thread debugline(var_04,param_01,(1,1,1)); + } + else + { + thread debugline(var_04,var_07["position"],(1,0.9,0.8)); + thread debugline(var_07["position"],param_01,(1,0.4,0.3)); + } + } + + return var_07["fraction"] == 1; +} + +//Function Number: 75 +damageent(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + if(self.isplayer) + { + self.damageorigin = param_05; + self.entity thread [[ level.callbackplayerdamage ]](param_00,param_01,param_02,0,param_03,param_04,param_05,param_06,"none",0); + return; + } + + if(self.isadestructable && param_04 == "artillery_mp" || param_04 == "claymore_mp" || param_04 == "stealth_bomb_mp") + { + return; + } + + self.entity notify("damage",param_02,param_01,(0,0,0),(0,0,0),"MOD_EXPLOSIVE","","","",undefined,param_04); +} + +//Function Number: 76 +debugline(param_00,param_01,param_02) +{ + for(var_03 = 0;var_03 < 600;var_03++) + { + wait 0.05; + } +} + +//Function Number: 77 +debugcircle(param_00,param_01,param_02,param_03) +{ + if(!isdefined(param_03)) + { + param_03 = 16; + } + + var_04 = 360 / param_03; + var_05 = []; + for(var_06 = 0;var_06 < param_03;var_06++) + { + var_07 = var_04 * var_06; + var_08 = cos(var_07) * param_01; + var_09 = sin(var_07) * param_01; + var_0A = param_00[0] + var_08; + var_0B = param_00[1] + var_09; + var_0C = param_00[2]; + var_05[var_05.size] = (var_0A,var_0B,var_0C); + } + + for(var_06 = 0;var_06 < var_05.size;var_06++) + { + var_0D = var_05[var_06]; + if(var_06 + 1 >= var_05.size) + { + var_0E = var_05[0]; + } + else + { + var_0E = var_05[var_06 + 1]; + } + + thread debugline(var_0D,var_0E,param_02); + } +} + +//Function Number: 78 +debugprint(param_00,param_01) +{ + for(var_02 = 0;var_02 < 600;var_02++) + { + wait 0.05; + } +} + +//Function Number: 79 +onweapondamage(param_00,param_01,param_02,param_03,param_04) +{ + self endon("death"); + self endon("disconnect"); + switch(param_01) + { + case "concussion_grenade_mp": + if(!isdefined(param_00)) + { + return; + } + else if(param_02 == "MOD_IMPACT") + { + return; + } + + var_05 = 1; + if(isdefined(param_00.owner) && param_00.owner == param_04) + { + var_05 = 0; + } + + var_06 = 512; + var_07 = 1 - distance(self.origin,param_00.origin) / var_06; + if(var_07 < 0) + { + var_07 = 0; + } + + var_08 = 2 + 4 * var_07; + if(isdefined(self.stunscaler)) + { + var_08 = var_08 * self.stunscaler; + } + + wait 0.05; + param_04 notify("stun_hit"); + self notify("concussed",param_04); + if(param_04 != self) + { + param_04 maps\mp\gametypes\_missions::processchallenge("ch_alittleconcussed"); + } + + self shellshock("concussion_grenade_mp",var_08); + self.concussionendtime = gettime() + var_08 * 1000; + if(var_05) + { + param_04 thread maps\mp\gametypes\_damagefeedback::updatedamagefeedback("stun"); + } + break; + + case "weapon_cobra_mk19_mp": + break; + + default: + maps\mp\gametypes\_shellshock::shellshockondamage(param_02,param_03); + break; + } +} + +//Function Number: 80 +isprimaryweapon(param_00) +{ + if(param_00 == "none") + { + return 0; + } + + if(weaponinventorytype(param_00) != "primary") + { + return 0; + } + + switch(weaponclass(param_00)) + { + case "sniper": + case "rocketlauncher": + case "pistol": + case "spread": + case "mg": + case "smg": + case "rifle": + return 1; + + default: + return 0; + } +} + +//Function Number: 81 +isaltmodeweapon(param_00) +{ + if(param_00 == "none") + { + return 0; + } + + return weaponinventorytype(param_00) == "altmode"; +} + +//Function Number: 82 +isinventoryweapon(param_00) +{ + if(param_00 == "none") + { + return 0; + } + + return weaponinventorytype(param_00) == "item"; +} + +//Function Number: 83 +isriotshield(param_00) +{ + if(param_00 == "none") + { + return 0; + } + + return weapontype(param_00) == "riotshield"; +} + +//Function Number: 84 +isoffhandweapon(param_00) +{ + if(param_00 == "none") + { + return 0; + } + + return weaponinventorytype(param_00) == "offhand"; +} + +//Function Number: 85 +issidearm(param_00) +{ + if(param_00 == "none") + { + return 0; + } + + if(weaponinventorytype(param_00) != "primary") + { + return 0; + } + + return weaponclass(param_00) == "pistol"; +} + +//Function Number: 86 +isgrenade(param_00) +{ + var_01 = weaponclass(param_00); + var_02 = weaponinventorytype(param_00); + if(var_01 != "grenade") + { + return 0; + } + + if(var_02 != "offhand") + { + return 0; + } +} + +//Function Number: 87 +updatesavedlastweapon() +{ + self endon("death"); + self endon("disconnect"); + self endon("faux_spawn"); + var_00 = self.currentweaponatspawn; + self.saved_lastweapon = var_00; + for(;;) + { + self waittill("weapon_change",var_01); + if(var_01 == "none") + { + self.saved_lastweapon = var_00; + continue; + } + + var_02 = weaponinventorytype(var_01); + if(var_02 != "primary" && var_02 != "altmode") + { + self.saved_lastweapon = var_00; + continue; + } + + updatemovespeedscale(); + self.saved_lastweapon = var_00; + var_00 = var_01; + } +} + +//Function Number: 88 +updateweaponrank() +{ + self endon("death"); + self endon("disconnect"); + self endon("faux_spawn"); + var_00 = self.currentweaponatspawn; + var_01 = strtok(var_00,"_"); + if(var_01[0] == "iw5") + { + } + else if(var_7B[0] == "alt") + { + } + + self.pers["weaponRank"] = maps\mp\gametypes\_rank::getweaponrank(var_7B[0]); + for(;;) + { + self waittill(var_01[0] + "_" + var_01[1],var_7B[0],var_7B[1] + "_" + var_7B[2],var_7B[0],"weapon_change",var_02); + if(var_02 == "none" || maps\mp\_utility::isjuggernaut() || maps\mp\_utility::isdeathstreakweapon(var_02)) + { + continue; + } + + var_03 = weaponinventorytype(var_02); + if(var_03 == "primary") + { + var_7B = strtok(var_02,"_"); + if(var_7B[0] == "iw5") + { + self.pers["weaponRank"] = maps\mp\gametypes\_rank::getweaponrank(var_7B[0] + "_" + var_7B[1]); + continue; + } + + if(var_7B[0] == "alt") + { + self.pers["weaponRank"] = maps\mp\gametypes\_rank::getweaponrank(var_7B[1] + "_" + var_7B[2]); + continue; + } + + self.pers["weaponRank"] = maps\mp\gametypes\_rank::getweaponrank(var_7B[0]); + } + } +} + +//Function Number: 89 +empplayer(param_00) +{ + self endon("disconnect"); + self endon("death"); + thread clearempondeath(); +} + +//Function Number: 90 +clearempondeath() +{ + self endon("disconnect"); + self waittill("death"); +} + +//Function Number: 91 +updatemovespeedscale() +{ + self.weaponlist = self getweaponslistprimaries(); + if(self.weaponlist.size) + { + var_00 = 1000; + foreach(var_02 in self.weaponlist) + { + var_03 = maps\mp\_utility::getbaseweaponname(var_02); + var_04 = int(tablelookup("mp/statstable.csv",4,var_03,8)); + if(var_04 == 0) + { + continue; + } + + if(var_04 < var_00) + { + var_00 = var_04; + } + } + + if(var_00 > 10) + { + var_00 = 10; + } + } + else + { + var_00 = 8; + } + + var_06 = var_00 / 10; + self.weaponspeed = var_06; + self setmovespeedscale(var_06 * self.movespeedscaler); +} + +//Function Number: 92 +stancerecoiladjuster() +{ + self endon("death"); + self endon("disconnect"); + self endon("faux_spawn"); + self notifyonplayercommand("adjustedStance","+stance"); + self notifyonplayercommand("adjustedStance","+goStand"); + for(;;) + { + common_scripts\utility::waittill_any("adjustedStance","sprint_begin"); + var_00 = maps\mp\_utility::getweaponclass(self getcurrentprimaryweapon()); + if(var_00 != "weapon_lmg" && var_00 != "weapon_sniper") + { + continue; + } + + wait 0.5; + self.stance = self getstance(); + if(self.stance == "prone") + { + if(var_00 == "weapon_lmg") + { + maps\mp\_utility::setrecoilscale(0,40); + } + else if(var_00 == "weapon_sniper") + { + maps\mp\_utility::setrecoilscale(0,60); + } + else + { + maps\mp\_utility::setrecoilscale(); + } + + continue; + } + + if(self.stance == "crouch") + { + if(var_00 == "weapon_lmg") + { + maps\mp\_utility::setrecoilscale(0,10); + } + else if(var_00 == "weapon_sniper") + { + maps\mp\_utility::setrecoilscale(0,30); + } + else + { + maps\mp\_utility::setrecoilscale(); + } + + continue; + } + + maps\mp\_utility::setrecoilscale(); + } +} + +//Function Number: 93 +func_2D32(param_00) +{ + var_01 = getattachmentlist(); + var_02 = 149; + var_03 = []; + for(var_04 = 0;var_04 <= var_02;var_04++) + { + var_05 = tablelookup("mp/statstable.csv",0,var_04,4); + if(var_05 == "") + { + continue; + } + + var_06 = var_05 + "_mp"; + if(!issubstr(tablelookup("mp/statsTable.csv",0,var_04,2),"weapon_")) + { + continue; + } + + if(weaponinventorytype(var_06) != "primary") + { + continue; + } + + var_07 = spawnstruct(); + var_07.basename = var_05; + var_07.assetname = var_06; + var_07.variants = []; + var_07.variants[0] = var_06; + var_08 = []; + for(var_09 = 0;var_09 < 6;var_09++) + { + var_0A = tablelookup("mp/statStable.csv",0,var_04,var_09 + 11); + if(param_00) + { + switch(var_0A) + { + case "xmags": + case "rof": + case "fmj": + break; + } + } + + if(var_0A == "") + { + break; + } + + var_08[var_0A] = 1; + } + + var_0B = []; + foreach(var_0A in var_01) + { + if(!isdefined(var_08[var_0A])) + { + continue; + } + + var_07.variants[var_07.variants.size] = var_05 + "_" + var_0A + "_mp"; + var_0B[var_0B.size] = var_0A; + } + + for(var_0E = 0;var_0E < var_0B.size - 1;var_0E++) + { + var_0F = tablelookuprownum("mp/attachmentCombos.csv",0,var_0B[var_0E]); + for(var_10 = var_0E + 1;var_10 < var_0B.size;var_10++) + { + if(tablelookup("mp/attachmentCombos.csv",0,var_0B[var_10],var_0F) == "no") + { + continue; + } + + var_07.variants[var_07.variants.size] = var_05 + "_" + var_0B[var_0E] + "_" + var_0B[var_10] + "_mp"; + } + } + + var_03[var_05] = var_07; + } + + return var_03; +} + +//Function Number: 94 +monitorsemtex() +{ + self endon("disconnect"); + self endon("death"); + self endon("faux_spawn"); + for(;;) + { + self waittill("grenade_fire",var_00); + if(!issubstr(var_00.model,"semtex")) + { + continue; + } + + var_00 waittill("missile_stuck",var_01); + if(!isplayer(var_01)) + { + continue; + } + + if(level.teambased && isdefined(var_01.team) && var_01.team == self.team) + { + var_00.isstuck = "friendly"; + continue; + } + + var_00.isstuck = "enemy"; + var_00.stuckenemyentity = var_01; + var_01 maps\mp\gametypes\_hud_message::playercardsplashnotify("semtex_stuck",self); + thread maps\mp\gametypes\_hud_message::splashnotify("stuck_semtex",100); + self notify("process","ch_bullseye"); + } +} + +//Function Number: 95 +turret_monitoruse() +{ + for(;;) + { + self waittill("trigger",var_00); + thread turret_playerthread(var_00); + } +} + +//Function Number: 96 +turret_playerthread(param_00) +{ + param_00 endon("death"); + param_00 endon("disconnect"); + param_00 notify("weapon_change","none"); + self waittill("turret_deactivate"); + param_00 notify("weapon_change",param_00 getcurrentweapon()); +} + +//Function Number: 97 +spawnmine(param_00,param_01,param_02,param_03) +{ + if(!isdefined(param_03)) + { + param_03 = (0,randomfloat(360),0); + } + + var_04 = "projectile_bouncing_betty_grenade"; + var_05 = spawn("script_model",param_00); + var_05.angles = param_03; + var_05 setmodel(var_04); + var_05.owner = param_01; + var_05.weaponname = "bouncingbetty_mp"; + level.mines[level.mines.size] = var_05; + var_05.killcamoffset = (0,0,4); + var_05.killcament = spawn("script_model",var_05.origin + var_05.killcamoffset); + var_05.killcament setscriptmoverkillcam("explosive"); + if(!isdefined(param_02) || param_02 == "equipment") + { + param_01.equipmentmines = common_scripts\utility::array_removeundefined(param_01.equipmentmines); + if(param_01.equipmentmines.size >= level.maxperplayerexplosives) + { + param_01.equipmentmines[0] delete(); + } + + param_01.equipmentmines[param_01.equipmentmines.size] = var_05; + } + else + { + param_01.killstreakmines[param_01.killstreakmines.size] = var_05; + } + + var_05 thread createbombsquadmodel("projectile_bouncing_betty_grenade_bombsquad","tag_origin",level.otherteam[param_01.team],param_01); + var_05 thread minebeacon(); + var_05 thread setclaymoreteamheadicon(param_01.pers["team"]); + var_05 thread minedamagemonitor(); + var_05 thread mineproximitytrigger(); + return var_05; +} + +//Function Number: 98 +minedamagemonitor() +{ + self endon("mine_triggered"); + self endon("mine_selfdestruct"); + self endon("death"); + self setcandamage(1); + self.maxhealth = 100000; + self.health = self.maxhealth; + var_00 = undefined; + for(;;) + { + self waittill("damage",var_01,var_00,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09); + if(!isplayer(var_00) || isdefined(var_09) && var_09 == "bouncingbetty_mp") + { + continue; + } + + if(!friendlyfirecheck(self.owner,var_00)) + { + continue; + } + + if(isdefined(var_09)) + { + switch(var_09) + { + case "smoke_grenade_mp": + break; + } + } + + break; + } + + self notify("mine_destroyed"); + if(isdefined(var_04) && issubstr(var_04,"MOD_GRENADE") || issubstr(var_04,"MOD_EXPLOSIVE")) + { + self.waschained = 1; + } + + if(isdefined(var_08) && var_08 & level.idflags_penetration) + { + self.wasdamagedfrombulletpenetration = 1; + } + + self.wasdamaged = 1; + if(isplayer(var_00)) + { + var_00 maps\mp\gametypes\_damagefeedback::updatedamagefeedback("bouncing_betty"); + } + + if(level.teambased) + { + if(isdefined(var_00) && isdefined(var_00.pers["team"]) && isdefined(self.owner) && isdefined(self.owner.pers["team"])) + { + if(var_00.pers["team"] != self.owner.pers["team"]) + { + var_00 notify("destroyed_explosive"); + } + } + } + else if(isdefined(self.owner) && isdefined(var_00) && var_00 != self.owner) + { + var_00 notify("destroyed_explosive"); + } + + thread mineexplode(var_00); +} + +//Function Number: 99 +mineproximitytrigger() +{ + self endon("mine_destroyed"); + self endon("mine_selfdestruct"); + self endon("death"); + wait 2; + var_00 = spawn("trigger_radius",self.origin,0,level.minedetectionradius,level.minedetectionheight); + thread minedeletetrigger(var_00); + var_01 = undefined; + for(;;) + { + var_00 waittill("trigger",var_01); + if(getdvarint("scr_minesKillOwner") != 1) + { + if(isdefined(self.owner) && var_01 == self.owner) + { + continue; + } + + if(!friendlyfirecheck(self.owner,var_01,0)) + { + continue; + } + } + + if(lengthsquared(var_01 getentityvelocity()) < 10) + { + continue; + } + + if(var_01 damageconetrace(self.origin,self) > 0) + { + break; + } + } + + self notify("mine_triggered"); + self playsound("mine_betty_click"); + if(isplayer(var_01) && var_01 maps\mp\_utility::_hasperk("specialty_delaymine")) + { + var_01 notify("triggered_mine"); + wait level.delayminetime; + } + else + { + wait level.minedetectiongraceperiod; + } + + thread minebounce(); +} + +//Function Number: 100 +minedeletetrigger(param_00) +{ + common_scripts\utility::waittill_any("mine_triggered","mine_destroyed","mine_selfdestruct","death"); + param_00 delete(); +} + +//Function Number: 101 +mineselfdestruct() +{ + self endon("mine_triggered"); + self endon("mine_destroyed"); + self endon("death"); + wait level.mineselfdestructtime; + wait randomfloat(0.4); + self notify("mine_selfdestruct"); + thread mineexplode(); +} + +//Function Number: 102 +minebounce() +{ + self playsound("mine_betty_spin"); + playfx(level.mine_launch,self.origin); + if(isdefined(self.trigger)) + { + self.trigger delete(); + } + + var_00 = self.origin + (0,0,64); + self moveto(var_00,0.7,0,0.65); + self.killcament moveto(var_00 + self.killcamoffset,0.7,0,0.65); + self rotatevelocity((0,750,32),0.7,0,0.65); + thread playspinnerfx(); + wait 0.65; + thread mineexplode(); +} + +//Function Number: 103 +mineexplode(param_00) +{ + if(!isdefined(self) || !isdefined(self.owner)) + { + return; + } + + if(!isdefined(param_00)) + { + param_00 = self.owner; + } + + self playsound("grenade_explode_metal"); + playfxontag(level.mine_explode,self,"tag_fx"); + wait 0.05; + if(!isdefined(self) || !isdefined(self.owner)) + { + return; + } + + self hide(); + self radiusdamage(self.origin,level.minedamageradius,level.minedamagemax,level.minedamagemin,param_00,"MOD_EXPLOSIVE","bouncingbetty_mp"); + wait 0.2; + if(!isdefined(self) || !isdefined(self.owner)) + { + return; + } + + if(isdefined(self.trigger)) + { + self.trigger delete(); + } + + self.killcament delete(); + self delete(); +} + +//Function Number: 104 +playspinnerfx() +{ + self endon("death"); + var_00 = gettime() + 1000; + while(gettime() < var_00) + { + wait 0.05; + playfxontag(level.mine_spin,self,"tag_fx_spin1"); + playfxontag(level.mine_spin,self,"tag_fx_spin3"); + wait 0.05; + playfxontag(level.mine_spin,self,"tag_fx_spin2"); + playfxontag(level.mine_spin,self,"tag_fx_spin4"); + } +} + +//Function Number: 105 +minedamagedebug(param_00,param_01,param_02,param_03,param_04,param_05) +{ + var_06[0] = (1,0,0); + if(param_02[2] < var_06) + { + var_07 = 0; + } + else + { + var_07 = 1; + } + + var_08 = (param_01[0],param_01[1],var_06); + var_09 = (param_02[0],param_02[1],var_06); + thread debugcircle(var_08,level.minedamageradius,var_7B[var_07],32); + var_0A = distancesquared(param_01,param_02); + if(var_0A > param_03) + { + var_07 = 0; + } + else + { + var_07 = 1; + } + + thread debugline(var_08,var_09,var_7B[var_07]); +} + +//Function Number: 106 +minedamageheightpassed(param_00,param_01) +{ + if(isplayer(param_01) && isalive(param_01) && param_01.sessionstate == "playing") + { + var_02 = param_01 maps\mp\_utility::getstancecenter(); + } + else if(var_02.classname == "misc_turret") + { + var_02 = var_02.origin + (0,0,32); + } + else + { + var_02 = var_02.origin; + } + + var_03 = 0; + var_04 = param_00.origin[2] + var_03 + level.minedamagehalfheight; + var_05 = param_00.origin[2] + var_03 - level.minedamagehalfheight; + if(var_02[2] > var_04 || var_02[2] < var_05) + { + return 0; + } + + return 1; +} + +//Function Number: 107 +watchmineusage() +{ + self endon("disconnect"); + self endon("spawned_player"); + if(isdefined(self.equipmentmines)) + { + if(maps\mp\_utility::getintproperty("scr_deleteexplosivesonspawn",1) == 1) + { + self.equipmentmines = common_scripts\utility::array_removeundefined(self.equipmentmines); + foreach(var_01 in self.equipmentmines) + { + if(isdefined(var_01.trigger)) + { + var_01.trigger delete(); + } + + var_01 delete(); + } + } + } + else + { + self.equipmentmines = []; + } + + if(!isdefined(self.killstreakmines)) + { + self.killstreakmines = []; + } + + for(;;) + { + self waittill("grenade_fire",var_03,var_04); + if(var_04 == "bouncingbetty" || var_04 == "bouncingbetty_mp") + { + if(!isalive(self)) + { + var_03 delete(); + return; + } + + self.hasdonecombat = 1; + var_03 thread minethrown(self); + } + } +} + +//Function Number: 108 +minethrown(param_00) +{ + self.owner = param_00; + self waittill("missile_stuck"); + if(!isdefined(param_00)) + { + return; + } + + var_01 = bullettrace(self.origin + (0,0,4),self.origin - (0,0,4),0,self); + var_02 = var_01["position"]; + if(var_01["fraction"] == 1) + { + var_02 = getgroundposition(self.origin,12,0,32); + var_01["normal"] = var_01["normal"] * -1; + } + + var_03 = vectornormalize(var_01["normal"]); + var_04 = vectortoangles(var_03); + var_04 = var_04 + (90,0,0); + var_05 = spawnmine(var_02,param_00,"equipment",var_04); + var_05.trigger = spawn("script_origin",var_05.origin + (0,0,25)); + var_05 thread equipmentwatchuse(param_00); + param_00 thread minewatchowner(var_05); + self delete(); +} + +//Function Number: 109 +minewatchowner(param_00) +{ + param_00 endon("death"); + level endon("game_ended"); + common_scripts\utility::waittill_any("disconnect","joined_team","joined_spectators"); + if(isdefined(param_00.trigger)) + { + param_00.trigger delete(); + } + + param_00 delete(); +} + +//Function Number: 110 +minebeacon() +{ + var_00["friendly"] = spawnfx(level.mine_beacon["friendly"],self gettagorigin("tag_fx")); + thread minebeaconteamupdater(var_7B); + self waittill(spawnfx(level.mine_beacon["enemy"],self gettagorigin("tag_fx")),var_7B["enemy"],"death"); + var_7B["friendly"] delete(); + var_7B["enemy"] delete(); +} + +//Function Number: 111 +minebeaconteamupdater(param_00) +{ + self endon("death"); + var_01 = self.owner.team; + wait 0.05; + triggerfx(param_00["friendly"]); + triggerfx(param_00["enemy"]); + for(;;) + { + param_00["friendly"] hide(); + param_00["enemy"] hide(); + foreach(var_03 in level.players) + { + if(level.teambased) + { + if(var_03.team == var_01) + { + param_00["friendly"] showtoplayer(var_03); + } + else + { + param_00["enemy"] showtoplayer(var_03); + } + + continue; + } + + if(var_03 == self.owner) + { + param_00["friendly"] showtoplayer(var_03); + continue; + } + + param_00["enemy"] showtoplayer(var_03); + } + + level common_scripts\utility::waittill_either("joined_team","player_spawned"); + } +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/gametypes/arena.gsc b/MW3/PC/MP/maps/mp/gametypes/arena.gsc new file mode 100644 index 0000000..75ceb5d --- /dev/null +++ b/MW3/PC/MP/maps/mp/gametypes/arena.gsc @@ -0,0 +1,511 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\arena.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 25 + * Decompile Time: 328 ms + * Timestamp: 10/27/2023 2:13:06 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(getdvar("mapname") == "mp_background") + { + return; + } + + maps\mp\gametypes\_globallogic::init(); + maps\mp\gametypes\_callbacksetup::setupcallbacks(); + maps\mp\gametypes\_globallogic::setupcallbacks(); + maps\mp\_utility::registerroundswitchdvar(level.gametype,0,0,9); + maps\mp\_utility::registertimelimitdvar(level.gametype,10,0,1440); + maps\mp\_utility::registerscorelimitdvar(level.gametype,500,0,5000); + maps\mp\_utility::registerroundlimitdvar(level.gametype,1,0,10); + maps\mp\_utility::registerwinlimitdvar(level.gametype,1,0,10); + maps\mp\_utility::registerroundswitchdvar(level.gametype,3,0,30); + maps\mp\_utility::registernumlivesdvar(level.gametype,0,0,10); + maps\mp\_utility::registerhalftimedvar(level.gametype,0,0,1); + level.teambased = 1; + level.objectivebased = 1; + level.onprecachegametype = ::onprecachegametype; + level.onstartgametype = ::onstartgametype; + level.getspawnpoint = ::getspawnpoint; + level.onspawnplayer = ::onspawnplayer; + level.onnormaldeath = ::onnormaldeath; + level.onplayerkilled = ::onplayerkilled; + level.ondeadevent = ::ondeadevent; + game["dialog"]["gametype"] = "arena"; + if(getdvarint("g_hardcore")) + { + game["dialog"]["gametype"] = "hc_" + game["dialog"]["gametype"]; + } + else if(getdvarint("camera_thirdPerson")) + { + game["dialog"]["gametype"] = "thirdp_" + game["dialog"]["gametype"]; + } + else if(getdvarint("scr_diehard")) + { + game["dialog"]["gametype"] = "dh_" + game["dialog"]["gametype"]; + } + + game["strings"]["overtime_hint"] = &"MP_FIRST_BLOOD"; +} + +//Function Number: 2 +onprecachegametype() +{ + precacheshader("compass_waypoint_captureneutral"); + precacheshader("compass_waypoint_capture"); + precacheshader("compass_waypoint_defend"); + precacheshader("waypoint_captureneutral"); + precacheshader("waypoint_capture"); + precacheshader("waypoint_defend"); +} + +//Function Number: 3 +onstartgametype() +{ + setclientnamemode("auto_change"); + if(!isdefined(game["switchedsides"])) + { + game["switchedsides"] = 0; + } + + if(game["switchedsides"]) + { + var_00 = game["attackers"]; + var_01 = game["defenders"]; + game["attackers"] = var_01; + game["defenders"] = var_00; + } + + maps\mp\_utility::setobjectivetext("allies",&"OBJECTIVES_ARENA"); + maps\mp\_utility::setobjectivetext("axis",&"OBJECTIVES_ARENA"); + if(level.splitscreen) + { + maps\mp\_utility::setobjectivescoretext("allies",&"OBJECTIVES_ARENA"); + maps\mp\_utility::setobjectivescoretext("axis",&"OBJECTIVES_ARENA"); + } + else + { + maps\mp\_utility::setobjectivescoretext("allies",&"OBJECTIVES_ARENA_SCORE"); + maps\mp\_utility::setobjectivescoretext("axis",&"OBJECTIVES_ARENA_SCORE"); + } + + maps\mp\_utility::setobjectivehinttext("allies",&"OBJECTIVES_ARENA_HINT"); + maps\mp\_utility::setobjectivehinttext("axis",&"OBJECTIVES_ARENA_HINT"); + level.spawnmins = (0,0,0); + level.spawnmaxs = (0,0,0); + maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_tdm_spawn_allies_start"); + maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_tdm_spawn_axis_start"); + maps\mp\gametypes\_spawnlogic::addspawnpoints("allies","mp_tdm_spawn"); + maps\mp\gametypes\_spawnlogic::addspawnpoints("axis","mp_tdm_spawn"); + level.mapcenter = maps\mp\gametypes\_spawnlogic::findboxcenter(level.spawnmins,level.spawnmaxs); + setmapcenter(level.mapcenter); + var_02[0] = "dom"; + maps\mp\gametypes\_rank::registerscoreinfo("capture",200); + maps\mp\gametypes\_gameobjects::main(var_7B); + func_3A57(); + thread func_3A59(); + thread func_3A58(); +} + +//Function Number: 4 +func_3A57() +{ + game["flagmodels"] = []; + game["flagmodels"]["neutral"] = "prop_flag_neutral"; + game["flagmodels"]["allies"] = maps\mp\gametypes\_teams::getteamflagmodel("allies"); + game["flagmodels"]["axis"] = maps\mp\gametypes\_teams::getteamflagmodel("axis"); + precachemodel(game["flagmodels"]["neutral"]); + precachemodel(game["flagmodels"]["allies"]); + precachemodel(game["flagmodels"]["axis"]); + precachestring(&"MP_CAPTURING_FLAG"); + precachestring(&"MP_LOSING_FLAG"); + precachestring(&"MP_DOM_YOUR_FLAG_WAS_CAPTURED"); + precachestring(&"MP_DOM_ENEMY_FLAG_CAPTURED"); + precachestring(&"MP_DOM_NEUTRAL_FLAG_CAPTURED"); + precachestring(&"MP_ENEMY_FLAG_CAPTURED_BY"); + precachestring(&"MP_NEUTRAL_FLAG_CAPTURED_BY"); + precachestring(&"MP_FRIENDLY_FLAG_CAPTURED_BY"); +} + +//Function Number: 5 +func_3A58() +{ + level endon("down_to_one"); + level endon("game_end"); + for(;;) + { + var_00 = maps\mp\gametypes\_gamelogic::gettimeremaining(); + if(var_00 < -4536) + { + break; + } + + wait 1; + } + + level notify("arena_flag_time"); + thread arenaflag(); +} + +//Function Number: 6 +func_3A59() +{ + level endon("game_end"); + level endon("arena_flag_time"); + for(;;) + { + if(level.ingraceperiod == 0) + { + break; + } + + wait 0.05; + } + + for(;;) + { + if(getteamplayersalive("axis") == 1) + { + thread arenaflag(); + level notify("down_to_one"); + break; + } + + if(getteamplayersalive("allies") == 1) + { + thread arenaflag(); + level notify("down_to_one"); + break; + } + + wait 1; + } +} + +//Function Number: 7 +getspawnpoint() +{ + var_00 = self.pers["team"]; + if(game["switchedsides"]) + { + var_00 = maps\mp\_utility::getotherteam(var_00); + } + + if(level.ingraceperiod) + { + var_01 = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_tdm_spawn_" + var_00 + "_start"); + var_02 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random(var_01); + } + else + { + var_01 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints(var_02); + var_02 = maps\mp\gametypes\_spawnlogic::getspawnpoint_nearteam(var_02); + } + + return var_02; +} + +//Function Number: 8 +onspawnplayer() +{ + self.usingobj = undefined; + level notify("spawned_player"); +} + +//Function Number: 9 +onnormaldeath(param_00,param_01,param_02) +{ + var_03 = maps\mp\gametypes\_rank::getscoreinfovalue("kill"); + param_01 lib_036E::func_2B88(param_01.pers["team"],var_03); + var_04 = param_00.team; + if(game["state"] == "postgame") + { + param_01.finalkill = 1; + } +} + +//Function Number: 10 +onplayerkilled(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09) +{ + thread func_3959(); +} + +//Function Number: 11 +ontimelimit() +{ + if(game["status"] == "overtime") + { + var_00 = "forfeit"; + } + else if(game["teamScores"]["allies"] == game["teamScores"]["axis"]) + { + var_00 = "overtime"; + } + else if(game["teamScores"]["axis"] > game["teamScores"]["allies"]) + { + var_00 = "axis"; + } + else + { + var_00 = "allies"; + } + + thread maps\mp\gametypes\_gamelogic::endgame(var_00,game["strings"]["time_limit_reached"]); +} + +//Function Number: 12 +func_3959() +{ + wait 0.05; + var_00 = 0; + if(!level.alivecount[game["attackers"]]) + { + level.spectateoverride[game["attackers"]].allowenemyspectate = 1; + var_00 = 1; + } + + if(!level.alivecount[game["defenders"]]) + { + level.spectateoverride[game["defenders"]].allowenemyspectate = 1; + var_00 = 1; + } + + if(var_00) + { + maps\mp\gametypes\_spectating::updatespectatesettings(); + } +} + +//Function Number: 13 +arenaflag() +{ + level.laststatus["allies"] = 0; + level.laststatus["axis"] = 0; + var_00 = getentarray("flag_arena","targetname"); + var_01 = getentarray("flag_primary","targetname"); + var_02 = getentarray("flag_secondary","targetname"); + if(!isdefined(var_00[0])) + { + if(var_01.size + var_02.size < 1) + { + maps\mp\gametypes\_callbacksetup::abortlevel(); + return; + } + + func_3A5B(var_01,var_02); + } + else + { + level.arenaflag = var_00[0]; + } + + var_03 = level.arenaflag; + if(isdefined(var_03.target)) + { + var_04[0] = getent(var_03.target,"targetname"); + } + else + { + var_00[0] = spawn("script_model",var_04.origin); + var_04[0].angles = var_03.angles; + } + + var_04[0] setmodel(game["flagmodels"]["neutral"]); + var_00 = maps\mp\gametypes\_gameobjects::createuseobject("neutral",var_03,var_04,(0,0,100)); + var_00 maps\mp\gametypes\_gameobjects::allowuse("enemy"); + var_00 maps\mp\gametypes\_gameobjects::setusetime(20); + var_00 maps\mp\gametypes\_gameobjects::setusetext(&"MP_CAPTURING_FLAG"); + var_05 = var_00 maps\mp\gametypes\_gameobjects::getlabel(); + var_00.label = var_05; + var_00 maps\mp\gametypes\_gameobjects::set2dicon("friendly","compass_waypoint_defend"); + var_00 maps\mp\gametypes\_gameobjects::set3dicon("friendly","waypoint_defend"); + var_00 maps\mp\gametypes\_gameobjects::set2dicon("enemy","compass_waypoint_captureneutral"); + var_00 maps\mp\gametypes\_gameobjects::set3dicon("enemy","waypoint_captureneutral"); + var_00 maps\mp\gametypes\_gameobjects::setvisibleteam("any"); + var_00.onuse = ::onuse; + var_00.onbeginuse = ::onbeginuse; + var_00.onuseupdate = ::onuseupdate; + var_00.onenduse = ::onenduse; + var_00.isarena = 1; + iprintlnbold("Arena flag spawned"); + level.arenaflag playsound("flag_spawned"); + var_06 = var_04[0].origin + (0,0,32); + var_07 = var_04[0].origin + (0,0,-32); + var_08 = bullettrace(var_06,var_07,0,undefined); + var_09 = vectortoangles(var_08["normal"]); + var_00.baseeffectforward = anglestoforward(var_09); + var_00.baseeffectright = anglestoright(var_09); + var_00.baseeffectpos = var_08["position"]; + var_00.levelflag = level.arenaflag; + level.arenaflag = var_00; +} + +//Function Number: 14 +func_3A5B(param_00,param_01) +{ + for(var_02 = 0;var_02 < param_00.size;var_02++) + { + var_03 = param_00[var_02].script_label; + if(var_03 != "_b") + { + param_00[var_02] delete(); + continue; + } + + level.arenaflag = param_00[var_02]; + return; + } +} + +//Function Number: 15 +ondeadevent(param_00) +{ + if(param_00 == game["attackers"]) + { + level thread func_3A5C(game["defenders"],game["strings"][game["attackers"] + "_eliminated"]); + return; + } + + if(param_00 == game["defenders"]) + { + level thread func_3A5C(game["attackers"],game["strings"][game["defenders"] + "_eliminated"]); + } +} + +//Function Number: 16 +func_3A5C(param_00,param_01) +{ + thread maps\mp\gametypes\_gamelogic::endgame(param_00,param_01); +} + +//Function Number: 17 +func_3944(param_00) +{ + level endon("game_ended"); + wait 0.05; + maps\mp\_utility::waittillslowprocessallowed(); + var_01 = getarraykeys(param_00); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + var_03 = param_00[var_01[var_02]].player; + var_03 thread [[ level.onxpevent ]]("capture"); + lib_036E::func_2B7B("capture",var_03); + var_03 thread maps\mp\_matchdata::loggameevent("capture",var_03.origin); + } +} + +//Function Number: 18 +onuse(param_00) +{ + var_01 = param_00.pers["team"]; + var_02 = maps\mp\gametypes\_gameobjects::getownerteam(); + var_03 = maps\mp\gametypes\_gameobjects::getlabel(); + self.capturetime = gettime(); + maps\mp\gametypes\_gameobjects::setownerteam(var_01); + maps\mp\gametypes\_gameobjects::set2dicon("enemy","compass_waypoint_capture"); + maps\mp\gametypes\_gameobjects::set3dicon("enemy","waypoint_capture"); + self.visuals[0] setmodel(game["flagmodels"][var_01]); + if(var_02 == "neutral") + { + var_04 = maps\mp\_utility::getotherteam(var_01); + thread maps\mp\_utility::printandsoundoneveryone(var_01,var_04,&"MP_NEUTRAL_FLAG_CAPTURED_BY",&"MP_NEUTRAL_FLAG_CAPTURED_BY","mp_war_objective_taken",undefined,param_00); + func_3940("captured_a",var_01); + func_3940("enemy_has_a",var_04); + } + else + { + thread maps\mp\_utility::printandsoundoneveryone(var_01,var_02,&"MP_ENEMY_FLAG_CAPTURED_BY",&"MP_FRIENDLY_FLAG_CAPTURED_BY","mp_war_objective_taken","mp_war_objective_lost",param_00); + } + + thread func_3944(self.touchlist[var_01]); + param_00 notify("objective","captured"); + thread flagcaptured(var_01,&"MP_DOM_NEUTRAL_FLAG_CAPTURED"); +} + +//Function Number: 19 +onbeginuse(param_00) +{ + var_01 = maps\mp\gametypes\_gameobjects::getownerteam(); + self.didstatusnotify = 0; + if(var_01 == "neutral") + { + var_02 = maps\mp\_utility::getotherteam(param_00.pers["team"]); + func_3940("securing",param_00.pers["team"]); + self.objpoints[param_00.pers["team"]] thread maps\mp\gametypes\_objpoints::startflashing(); + func_3940("enemy_taking",var_02); + return; + } + + if(var_02 == "allies") + { + var_02 = "axis"; + } + else + { + var_02 = "allies"; + } + + self.objpoints["allies"] thread maps\mp\gametypes\_objpoints::startflashing(); + self.objpoints["axis"] thread maps\mp\gametypes\_objpoints::startflashing(); +} + +//Function Number: 20 +onuseupdate(param_00,param_01,param_02) +{ + if(param_01 > 0.05 && param_02 && !self.didstatusnotify) + { + var_03 = maps\mp\_utility::getotherteam(param_00); + func_3940("losing_a",var_03); + func_3940("securing_a",param_00); + self.didstatusnotify = 1; + } +} + +//Function Number: 21 +onenduse(param_00,param_01,param_02) +{ + self.objpoints["allies"] thread maps\mp\gametypes\_objpoints::stopflashing(); + self.objpoints["axis"] thread maps\mp\gametypes\_objpoints::stopflashing(); +} + +//Function Number: 22 +func_3940(param_00,param_01) +{ + var_02 = gettime(); + if(gettime() < level.laststatus[param_01] + 6000) + { + return; + } + + thread func_3945(param_00,param_01); + level.laststatus[param_01] = gettime(); +} + +//Function Number: 23 +func_3945(param_00,param_01) +{ + level endon("game_ended"); + wait 0.1; + maps\mp\_utility::waittillslowprocessallowed(); + maps\mp\_utility::leaderdialog(param_00,param_01); +} + +//Function Number: 24 +func_3946(param_00,param_01,param_02,param_03) +{ + level endon("game_ended"); + wait 0.1; + maps\mp\_utility::waittillslowprocessallowed(); + maps\mp\_utility::leaderdialogbothteams(param_00,param_01,param_02,param_03); +} + +//Function Number: 25 +flagcaptured(param_00,param_01) +{ + maps\mp\gametypes\_gamelogic::endgame(param_00,param_01); +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/gametypes/conf.gsc b/MW3/PC/MP/maps/mp/gametypes/conf.gsc new file mode 100644 index 0000000..a8dc730 --- /dev/null +++ b/MW3/PC/MP/maps/mp/gametypes/conf.gsc @@ -0,0 +1,396 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\conf.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 16 + * Decompile Time: 228 ms + * Timestamp: 10/27/2023 2:13:07 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(getdvar("mapname") == "mp_background") + { + return; + } + + maps\mp\gametypes\_globallogic::init(); + maps\mp\gametypes\_callbacksetup::setupcallbacks(); + maps\mp\gametypes\_globallogic::setupcallbacks(); + if(isusingmatchrulesdata()) + { + level.initializematchrules = ::initializematchrules; + [[ level.initializematchrules ]](); + level thread maps\mp\_utility::reinitializematchrulesonmigration(); + } + else + { + maps\mp\_utility::registerroundswitchdvar(level.gametype,0,0,9); + maps\mp\_utility::registertimelimitdvar(level.gametype,10); + maps\mp\_utility::registerscorelimitdvar(level.gametype,65); + maps\mp\_utility::registerroundlimitdvar(level.gametype,1); + maps\mp\_utility::registerwinlimitdvar(level.gametype,1); + maps\mp\_utility::registernumlivesdvar(level.gametype,0); + maps\mp\_utility::registerhalftimedvar(level.gametype,0); + level.matchrules_damagemultiplier = 0; + level.matchrules_vampirism = 0; + } + + level.teambased = 1; + level.initgametypeawards = ::initgametypeawards; + level.onstartgametype = ::onstartgametype; + level.getspawnpoint = ::getspawnpoint; + level.onnormaldeath = ::onnormaldeath; + level.onprecachegametype = ::onprecachegametype; + if(level.matchrules_damagemultiplier || level.matchrules_vampirism) + { + level.modifyplayerdamage = ::maps\mp\gametypes\_damage::gamemodemodifyplayerdamage; + } + + game["dialog"]["gametype"] = "kill_confirmed"; + level.conf_fx["vanish"] = loadfx("impacts/small_snowhit"); +} + +//Function Number: 2 +initializematchrules() +{ + maps\mp\_utility::setcommonrulesfrommatchrulesdata(); + setdynamicdvar("scr_conf_roundswitch",0); + maps\mp\_utility::registerroundswitchdvar("conf",0,0,9); + setdynamicdvar("scr_conf_roundlimit",1); + maps\mp\_utility::registerroundlimitdvar("conf",1); + setdynamicdvar("scr_conf_winlimit",1); + maps\mp\_utility::registerwinlimitdvar("conf",1); + setdynamicdvar("scr_conf_halftime",0); + maps\mp\_utility::registerhalftimedvar("conf",0); + setdynamicdvar("scr_conf_promode",0); +} + +//Function Number: 3 +onprecachegametype() +{ + precachemodel("prop_dogtags_friend"); + precachemodel("prop_dogtags_foe"); + precacheshader("waypoint_dogtags"); +} + +//Function Number: 4 +onstartgametype() +{ + setclientnamemode("auto_change"); + if(!isdefined(game["switchedsides"])) + { + game["switchedsides"] = 0; + } + + if(game["switchedsides"]) + { + var_00 = game["attackers"]; + var_01 = game["defenders"]; + game["attackers"] = var_01; + game["defenders"] = var_00; + } + + maps\mp\_utility::setobjectivetext("allies",&"OBJECTIVES_CONF"); + maps\mp\_utility::setobjectivetext("axis",&"OBJECTIVES_CONF"); + if(level.splitscreen) + { + maps\mp\_utility::setobjectivescoretext("allies",&"OBJECTIVES_CONF"); + maps\mp\_utility::setobjectivescoretext("axis",&"OBJECTIVES_CONF"); + } + else + { + maps\mp\_utility::setobjectivescoretext("allies",&"OBJECTIVES_CONF_SCORE"); + maps\mp\_utility::setobjectivescoretext("axis",&"OBJECTIVES_CONF_SCORE"); + } + + maps\mp\_utility::setobjectivehinttext("allies",&"OBJECTIVES_CONF_HINT"); + maps\mp\_utility::setobjectivehinttext("axis",&"OBJECTIVES_CONF_HINT"); + level.spawnmins = (0,0,0); + level.spawnmaxs = (0,0,0); + maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_tdm_spawn_allies_start"); + maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_tdm_spawn_axis_start"); + maps\mp\gametypes\_spawnlogic::addspawnpoints("allies","mp_tdm_spawn"); + maps\mp\gametypes\_spawnlogic::addspawnpoints("axis","mp_tdm_spawn"); + level.mapcenter = maps\mp\gametypes\_spawnlogic::findboxcenter(level.spawnmins,level.spawnmaxs); + setmapcenter(level.mapcenter); + maps\mp\gametypes\_rank::registerscoreinfo("kill",50); + maps\mp\gametypes\_rank::registerscoreinfo("kill_confirmed",50); + maps\mp\gametypes\_rank::registerscoreinfo("kill_denied",50); + maps\mp\gametypes\_rank::registerscoreinfo("tags_retrieved",250); + level.dogtags = []; + var_02[0] = level.gametype; + maps\mp\gametypes\_gameobjects::main(var_02); +} + +//Function Number: 5 +getspawnpoint() +{ + var_00 = self.pers["team"]; + if(game["switchedsides"]) + { + var_00 = maps\mp\_utility::getotherteam(var_00); + } + + if(level.ingraceperiod) + { + var_01 = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_tdm_spawn_" + var_00 + "_start"); + var_02 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random(var_01); + } + else + { + var_01 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints(var_02); + var_02 = maps\mp\gametypes\_spawnlogic::getspawnpoint_nearteam(var_02); + } + + return var_02; +} + +//Function Number: 6 +onnormaldeath(param_00,param_01,param_02) +{ + level thread func_3A1C(param_00,param_01); + if(game["state"] == "postgame" && game["teamScores"][param_01.team] > game["teamScores"][level.otherteam[param_01.team]]) + { + param_01.finalkill = 1; + } +} + +//Function Number: 7 +func_3A1C(param_00,param_01) +{ + if(isdefined(level.dogtags[param_00.guid])) + { + playfx(level.conf_fx["vanish"],level.dogtags[param_00.guid].curorigin); + level.dogtags[param_00.guid] notify("reset"); + } + else + { + var_02[0] = spawn("script_model",(0,0,0)); + var_02[0] setmodel("prop_dogtags_foe"); + var_7B[1] setmodel("prop_dogtags_friend"); + var_03 = spawn("trigger_radius",(0,0,0),0,32,32); + level.dogtags[param_01.guid] = maps\mp\gametypes\_gameobjects::createuseobject("any",var_03,var_7B,(0,0,16)); + maps\mp\_utility::_objective_delete(level.dogtags[param_01.guid].objidallies); + maps\mp\_utility::_objective_delete(level.dogtags[param_01.guid].objidaxis); + maps\mp\gametypes\_objpoints::deleteobjpoint(level.dogtags[param_01.guid].objpoints["allies"]); + maps\mp\gametypes\_objpoints::deleteobjpoint(level.dogtags[param_01.guid].objpoints["axis"]); + level.dogtags[param_01.guid] maps\mp\gametypes\_gameobjects::setusetime(0); + level.dogtags[param_01.guid].onuse = ::onuse; + level.dogtags[param_01.guid].victim = param_01; + level.dogtags[param_01.guid].victimteam = param_01.pers["team"]; + level.dogtags[param_01.guid].objid = maps\mp\gametypes\_gameobjects::getnextobjid(); + objective_add(level.dogtags[param_01.guid].objid,"invisible",(0,0,0)); + objective_icon(level.dogtags[param_01.guid].objid,"waypoint_dogtags"); + level thread func_3A20(param_01); + param_01 thread tagteamupdater(level.dogtags[param_01.guid]); + } + + var_04 = param_01.origin + (0,0,14); + level.dogtags[param_01.guid].curorigin = var_04; + level.dogtags[param_01.guid].trigger.origin = var_04; + level.dogtags[param_01.guid].visuals[0].origin = var_04; + level.dogtags[param_01.guid].visuals[1].origin = var_04; + level.dogtags[param_01.guid] maps\mp\gametypes\_gameobjects::allowuse("any"); + level.dogtags[param_01.guid].visuals[0] thread func_3A1E(level.dogtags[param_01.guid],maps\mp\_utility::getotherteam(param_01.pers["team"])); + level.dogtags[param_01.guid].visuals[1] thread func_3A1E(level.dogtags[param_01.guid],param_01.pers["team"]); + level.dogtags[param_01.guid].attacker = var_02; + objective_position(level.dogtags[param_01.guid].objid,var_04); + objective_state(level.dogtags[param_01.guid].objid,"active"); + objective_player(level.dogtags[param_01.guid].objid,var_02 getentitynumber()); + playsoundatpos(var_04,"mp_killconfirm_tags_drop"); + level.dogtags[param_01.guid] thread func_3A1F(); +} + +//Function Number: 8 +func_3A1E(param_00,param_01) +{ + param_00 endon("death"); + param_00 endon("reset"); + self hide(); + foreach(var_03 in level.players) + { + if(var_03.team == param_01) + { + self showtoplayer(var_03); + } + } + + for(;;) + { + level waittill("joined_team"); + self hide(); + foreach(var_03 in level.players) + { + if(var_03.team == param_01) + { + self showtoplayer(var_03); + } + + if(param_00.victimteam == var_03.team && var_03 == param_00.attacker) + { + objective_state(param_00.objid,"invisible"); + } + } + } +} + +//Function Number: 9 +onuse(param_00) +{ + if(param_00.pers["team"] == self.victimteam) + { + self.trigger playsound("mp_killconfirm_tags_deny"); + param_00 maps\mp\_utility::incplayerstat("killsdenied",1); + param_00 maps\mp\_utility::incpersstat("denied",1); + param_00 maps\mp\gametypes\_persistance::statsetchild("round","denied",param_00.pers["denied"]); + if(self.victim == param_00) + { + var_01 = "tags_retrieved"; + var_02 = &"SPLASHES_TAGS_RETRIEVED"; + } + else + { + var_01 = "kill_denied"; + var_02 = &"SPLASHES_KILL_DENIED"; + } + + if(isdefined(self.attacker)) + { + self.attacker thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_DENIED_KILL",(1,0.5,0.5)); + } + } + else + { + self.trigger playsound("mp_killconfirm_tags_pickup"); + var_01 = "kill_confirmed"; + var_02 = &"SPLASHES_KILL_CONFIRMED"; + param_00 maps\mp\_utility::incplayerstat("killsconfirmed",1); + param_00 maps\mp\_utility::incpersstat("confirmed",1); + param_00 maps\mp\gametypes\_persistance::statsetchild("round","confirmed",param_00.pers["confirmed"]); + if(self.attacker != param_00) + { + self.attacker onpickup(var_01,var_02); + } + + self.trigger playsoundtoplayer(game["voice"][param_00.team] + "kill_confirmed",param_00); + param_00 lib_036E::func_2B88(param_00.pers["team"],1); + } + + param_00 onpickup(var_01,var_02); + resettags(); +} + +//Function Number: 10 +onpickup(param_00,param_01,param_02) +{ + thread maps\mp\gametypes\_rank::func_2F45(param_01); + lib_036E::func_2B7B(param_00,self,undefined,1); + thread maps\mp\gametypes\_rank::giverankxp(param_00); +} + +//Function Number: 11 +resettags() +{ + self.attacker = undefined; + self notify("reset"); + self.visuals[0] hide(); + self.visuals[1] hide(); + self.curorigin = (0,0,1000); + self.trigger.origin = (0,0,1000); + self.visuals[0].origin = (0,0,1000); + self.visuals[1].origin = (0,0,1000); + maps\mp\gametypes\_gameobjects::allowuse("none"); + objective_state(self.objid,"invisible"); +} + +//Function Number: 12 +func_3A1F() +{ + level endon("game_ended"); + self endon("reset"); + var_00 = self.curorigin; + var_01 = self.curorigin + (0,0,12); + for(;;) + { + self.visuals[0] moveto(var_01,0.5,0.15,0.15); + self.visuals[0] rotateyaw(180,0.5); + self.visuals[1] moveto(var_01,0.5,0.15,0.15); + self.visuals[1] rotateyaw(180,0.5); + wait 0.5; + self.visuals[0] moveto(var_00,0.5,0.15,0.15); + self.visuals[0] rotateyaw(180,0.5); + self.visuals[1] moveto(var_00,0.5,0.15,0.15); + self.visuals[1] rotateyaw(180,0.5); + wait 0.5; + } +} + +//Function Number: 13 +timeout(param_00) +{ + level endon("game_ended"); + param_00 endon("disconnect"); + self notify("timeout"); + self endon("timeout"); + level maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause(30); + self.visuals[0] hide(); + self.visuals[1] hide(); + self.curorigin = (0,0,1000); + self.trigger.origin = (0,0,1000); + self.visuals[0].origin = (0,0,1000); + self.visuals[1].origin = (0,0,1000); + maps\mp\gametypes\_gameobjects::allowuse("none"); +} + +//Function Number: 14 +tagteamupdater(param_00) +{ + level endon("game_ended"); + self endon("disconnect"); + for(;;) + { + self waittill("joined_team"); + param_00.victimteam = self.pers["team"]; + param_00 resettags(); + } +} + +//Function Number: 15 +func_3A20(param_00) +{ + level endon("game_ended"); + var_01 = param_00.guid; + param_00 waittill("disconnect"); + if(isdefined(level.dogtags[var_01])) + { + level.dogtags[var_01] maps\mp\gametypes\_gameobjects::allowuse("none"); + if(isdefined(level.dogtags[var_01].attacker)) + { + level.dogtags[var_01].attacker thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_DENIED_KILL",(1,0.5,0.5)); + } + + playfx(level.conf_fx["vanish"],level.dogtags[var_01].curorigin); + level.dogtags[var_01] notify("reset"); + wait 0.05; + if(isdefined(level.dogtags[var_01])) + { + objective_delete(level.dogtags[var_01].objid); + level.dogtags[var_01].trigger delete(); + for(var_02 = 0;var_02 < level.dogtags[var_01].visuals.size;var_02++) + { + level.dogtags[var_01].visuals[var_02] delete(); + } + + level.dogtags[var_01] notify("deleted"); + level.dogtags[var_01] = undefined; + } + } +} + +//Function Number: 16 +initgametypeawards() +{ +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/gametypes/ctf.gsc b/MW3/PC/MP/maps/mp/gametypes/ctf.gsc new file mode 100644 index 0000000..7ec2445 --- /dev/null +++ b/MW3/PC/MP/maps/mp/gametypes/ctf.gsc @@ -0,0 +1,930 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\ctf.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 31 + * Decompile Time: 576 ms + * Timestamp: 10/27/2023 2:13:09 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + maps\mp\gametypes\_globallogic::init(); + maps\mp\gametypes\_callbacksetup::setupcallbacks(); + maps\mp\gametypes\_globallogic::setupcallbacks(); + if(isusingmatchrulesdata()) + { + level.initializematchrules = ::initializematchrules; + [[ level.initializematchrules ]](); + level thread maps\mp\_utility::reinitializematchrulesonmigration(); + } + else + { + maps\mp\_utility::registertimelimitdvar(level.gametype,5); + maps\mp\_utility::registerscorelimitdvar(level.gametype,3); + maps\mp\_utility::registerroundlimitdvar(level.gametype,1); + maps\mp\_utility::registerwinlimitdvar(level.gametype,1); + maps\mp\_utility::registernumlivesdvar(level.gametype,0); + maps\mp\_utility::registerhalftimedvar(level.gametype,0); + level.matchrules_damagemultiplier = 0; + level.matchrules_vampirism = 0; + } + + maps\mp\_utility::setovertimelimitdvar(4); + func_3989(); + level.teambased = 1; + level.objectivebased = 1; + level.overtimescorewinoverride = 1; + level.onprecachegametype = ::onprecachegametype; + level.onstartgametype = ::onstartgametype; + level.getspawnpoint = ::getspawnpoint; + level.onplayerkilled = ::onplayerkilled; + level.initgametypeawards = ::initgametypeawards; + level.ontimelimit = ::ontimelimit; + level.onspawnplayer = ::onspawnplayer; + if(level.matchrules_damagemultiplier || level.matchrules_vampirism) + { + level.modifyplayerdamage = ::maps\mp\gametypes\_damage::gamemodemodifyplayerdamage; + } + + level.flagreturntime = maps\mp\_utility::getintproperty("scr_ctf_returntime",30); + game["dialog"]["gametype"] = "captureflag"; + if(getdvarint("g_hardcore")) + { + game["dialog"]["gametype"] = "hc_" + game["dialog"]["gametype"]; + } + else if(getdvarint("camera_thirdPerson")) + { + game["dialog"]["gametype"] = "thirdp_" + game["dialog"]["gametype"]; + } + else if(getdvarint("scr_diehard")) + { + game["dialog"]["gametype"] = "dh_" + game["dialog"]["gametype"]; + } + else if(getdvarint("scr_" + level.gametype + "_promode")) + { + game["dialog"]["gametype"] = game["dialog"]["gametype"] + "_pro"; + } + + game["dialog"]["offense_obj"] = "capture_obj"; + game["dialog"]["defense_obj"] = "capture_obj"; +} + +//Function Number: 2 +initializematchrules() +{ + maps\mp\_utility::setcommonrulesfrommatchrulesdata(); + setdynamicdvar("scr_ctf_roundlimit",1); + maps\mp\_utility::registerroundlimitdvar("ctf",1); + setdynamicdvar("scr_ctf_winlimit",1); + maps\mp\_utility::registerwinlimitdvar("ctf",1); + setdynamicdvar("scr_ctf_halftime",0); + maps\mp\_utility::registerhalftimedvar("ctf",0); + setdynamicdvar("scr_ctf_returntime",30); + setdynamicdvar("scr_ctf_promode",0); +} + +//Function Number: 3 +onprecachegametype() +{ + precachestring(&"MP_FLAG_TAKEN_BY"); + precachestring(&"MP_ENEMY_FLAG_TAKEN_BY"); + precachestring(&"MP_FLAG_CAPTURED_BY"); + precachestring(&"MP_ENEMY_FLAG_CAPTURED_BY"); + precachestring(&"MP_FLAG_RETURNED"); + precachestring(&"MP_ENEMY_FLAG_RETURNED"); + precachestring(&"MP_YOUR_FLAG_RETURNING_IN"); + precachestring(&"MP_ENEMY_FLAG_RETURNING_IN"); + precachestring(&"MP_ENEMY_FLAG_DROPPED_BY"); + precachestring(&"MP_DOM_NEUTRAL_FLAG_CAPTURED"); + precachestring(&"MP_GRABBING_FLAG"); + precachestring(&"MP_RETURNING_FLAG"); +} + +//Function Number: 4 +onspawnplayer() +{ +} + +//Function Number: 5 +func_3979() +{ + self endon("disconnect"); + wait 0.25; + self.otspawned = 1; + var_00 = maps\mp\_utility::getobjectivehinttext(self.team); + thread maps\mp\gametypes\_hud_message::hintmessage(var_00); +} + +//Function Number: 6 +onstartgametype() +{ + if(!isdefined(game["switchedsides"])) + { + game["switchedsides"] = 0; + } + + if(maps\mp\_utility::inovertime()) + { + setdvar("ui_override_halftime",0); + } + else if(game["switchedsides"]) + { + setdvar("ui_override_halftime",2); + } + else + { + setdvar("ui_override_halftime",1); + } + + if(!isdefined(game["original_defenders"])) + { + game["original_defenders"] = game["defenders"]; + } + + if(game["switchedsides"]) + { + var_00 = game["attackers"]; + var_01 = game["defenders"]; + game["attackers"] = var_01; + game["defenders"] = var_00; + } + + game["teamScores"][game["attackers"]] = 0; + setteamscore(game["attackers"],0); + game["teamScores"][game["defenders"]] = 0; + setteamscore(game["defenders"],0); + setclientnamemode("auto_change"); + if(level.splitscreen) + { + maps\mp\_utility::setobjectivescoretext(game["attackers"],&"OBJECTIVES_ONE_FLAG_ATTACKER"); + maps\mp\_utility::setobjectivescoretext(game["defenders"],&"OBJECTIVES_ONE_FLAG_DEFENDER"); + } + else + { + maps\mp\_utility::setobjectivescoretext(game["attackers"],&"OBJECTIVES_ONE_FLAG_ATTACKER_SCORE"); + maps\mp\_utility::setobjectivescoretext(game["defenders"],&"OBJECTIVES_ONE_FLAG_DEFENDER_SCORE"); + } + + maps\mp\_utility::setobjectivetext(game["attackers"],&"OBJECTIVES_CTF"); + maps\mp\_utility::setobjectivetext(game["defenders"],&"OBJECTIVES_CTF"); + maps\mp\_utility::setobjectivehinttext(game["attackers"],&"OBJECTIVES_ONE_FLAG_ATTACKER_HINT"); + maps\mp\_utility::setobjectivehinttext(game["defenders"],&"OBJECTIVES_ONE_FLAG_DEFENDER_HINT"); + level.spawnmins = (0,0,0); + level.spawnmaxs = (0,0,0); + maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_ctf_spawn_allies_start"); + maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_ctf_spawn_axis_start"); + maps\mp\gametypes\_spawnlogic::addspawnpoints("allies","mp_ctf_spawn_allies"); + maps\mp\gametypes\_spawnlogic::addspawnpoints("axis","mp_ctf_spawn_axis"); + level.mapcenter = maps\mp\gametypes\_spawnlogic::findboxcenter(level.spawnmins,level.spawnmaxs); + setmapcenter(level.mapcenter); + maps\mp\gametypes\_rank::registerscoreinfo("kill",50); + maps\mp\gametypes\_rank::registerscoreinfo("headshot",50); + maps\mp\gametypes\_rank::registerscoreinfo("assist",20); + maps\mp\gametypes\_rank::registerscoreinfo("pickup",50); + maps\mp\gametypes\_rank::registerscoreinfo("return",50); + maps\mp\gametypes\_rank::registerscoreinfo("capture",250); + maps\mp\gametypes\_rank::registerscoreinfo("kill_carrier",50); + maps\mp\gametypes\_rank::registerscoreinfo("defend",100); + maps\mp\gametypes\_rank::registerscoreinfo("defend_assist",100); + maps\mp\gametypes\_rank::registerscoreinfo("assault",200); + maps\mp\gametypes\_rank::registerscoreinfo("assault_assist",40); + var_02[0] = "ctf"; + maps\mp\gametypes\_gameobjects::main(var_02); + thread func_39C8(); +} + +//Function Number: 7 +getspawnpoint() +{ + if(self.team == "axis") + { + var_00 = game["attackers"]; + } + else + { + var_00 = game["defenders"]; + } + + if(level.ingraceperiod) + { + var_01 = getentarray("mp_ctf_spawn_" + var_00 + "_start","classname"); + var_02 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random(var_01); + } + else + { + var_01 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints(var_02); + var_02 = maps\mp\gametypes\_spawnlogic::getspawnpoint_nearteam(var_02); + } + + return var_02; +} + +//Function Number: 8 +func_39C8() +{ + level.flagmodel["allies"] = maps\mp\gametypes\_teams::getteamflagmodel("allies"); + level.icon2d["allies"] = maps\mp\gametypes\_teams::getteamflagicon("allies"); + level.carryflag["allies"] = maps\mp\gametypes\_teams::getteamflagcarrymodel("allies"); + precachemodel(level.flagmodel["allies"]); + precachemodel(level.carryflag["allies"]); + level.flagmodel["axis"] = maps\mp\gametypes\_teams::getteamflagmodel("axis"); + level.icon2d["axis"] = maps\mp\gametypes\_teams::getteamflagicon("axis"); + level.carryflag["axis"] = maps\mp\gametypes\_teams::getteamflagcarrymodel("axis"); + precachemodel(level.flagmodel["axis"]); + precachemodel(level.carryflag["axis"]); + level.iconescort3d = "waypoint_escort"; + level.iconescort2d = "waypoint_escort"; + precacheshader(level.iconescort3d); + precacheshader(level.iconescort2d); + level.iconkill3d = "waypoint_kill"; + level.iconkill2d = "waypoint_kill"; + precacheshader(level.iconkill3d); + precacheshader(level.iconkill2d); + level.iconcaptureflag3d = "waypoint_capture_flag"; + level.iconcaptureflag2d = "waypoint_capture_flag"; + precacheshader(level.iconcaptureflag3d); + precacheshader(level.iconcaptureflag2d); + level.icondefendflag3d = "waypoint_defend_flag"; + level.icondefendflag2d = "waypoint_defend_flag"; + precacheshader(level.icondefendflag3d); + precacheshader(level.icondefendflag2d); + level.iconreturnflag3d = "waypoint_return_flag"; + level.iconreturnflag2d = "waypoint_return_flag"; + precacheshader(level.iconreturnflag3d); + precacheshader(level.iconreturnflag2d); + level.iconwaitforflag3d = "waypoint_waitfor_flag"; + level.iconwaitforflag2d = "waypoint_waitfor_flag"; + precacheshader(level.iconwaitforflag3d); + precacheshader(level.iconwaitforflag2d); + precacheshader(level.icon2d["axis"]); + precacheshader(level.icon2d["allies"]); + precacheshader("waypoint_flag_friendly"); + precacheshader("waypoint_flag_enemy"); + precachestring(&"OBJECTIVES_FLAG_HOME"); + precachestring(&"OBJECTIVES_FLAG_NAME"); + precachestring(&"OBJECTIVES_FLAG_AWAY"); + level.teamflags[game["defenders"]] = func_39C2(game["defenders"],"allies"); + level.teamflags[game["attackers"]] = func_39C2(game["attackers"],level.otherteam["allies"]); + level.capzones[game["defenders"]] = func_39C3(game["defenders"],"allies"); + level.capzones[game["attackers"]] = func_39C3(game["attackers"],level.otherteam["allies"]); + if(level.splitscreen) + { + var_00 = 0; + } + else + { + var_00 = 0.85; + } + + level.friendlyflagstatusicon["allies"] = maps\mp\gametypes\_hud_util::createservericon("waypoint_flag_friendly",32,32,"allies"); + level.friendlyflagstatusicon["allies"] maps\mp\gametypes\_hud_util::setpoint("TOP LEFT","TOP LEFT",132,0); + level.friendlyflagstatusicon["allies"].alpha = var_00; + level.friendlyflagstatusicon["allies"].hidewheninmenu = 1; + level thread func_3A0B(level.friendlyflagstatusicon["allies"]); + level.friendlyflagstatustext["allies"] = maps\mp\gametypes\_hud_util::createserverfontstring("small",1.6,"allies"); + level.friendlyflagstatustext["allies"] maps\mp\gametypes\_hud_util::setparent(level.friendlyflagstatusicon["allies"]); + level.friendlyflagstatustext["allies"] maps\mp\gametypes\_hud_util::setpoint("LEFT","RIGHT",4); + level.friendlyflagstatustext["allies"] settext(&"OBJECTIVES_FLAG_HOME"); + level.friendlyflagstatustext["allies"].alpha = var_00; + level.friendlyflagstatustext["allies"].color = (1,1,1); + level.friendlyflagstatustext["allies"].glowalpha = 1; + level.friendlyflagstatustext["allies"].hidewheninmenu = 1; + level thread func_3A0B(level.friendlyflagstatustext["allies"]); + level.enemyflagstatusicon["allies"] = maps\mp\gametypes\_hud_util::createservericon("waypoint_flag_enemy",24,24,"allies"); + level.enemyflagstatusicon["allies"] maps\mp\gametypes\_hud_util::setpoint("TOP LEFT","TOP LEFT",132,26); + level.enemyflagstatusicon["allies"].alpha = var_00; + level.enemyflagstatusicon["allies"].hidewheninmenu = 1; + level thread func_3A0B(level.enemyflagstatusicon["allies"]); + level.enemyflagstatustext["allies"] = maps\mp\gametypes\_hud_util::createserverfontstring("small",1.6,"allies"); + level.enemyflagstatustext["allies"] maps\mp\gametypes\_hud_util::setparent(level.enemyflagstatusicon["allies"]); + level.enemyflagstatustext["allies"] maps\mp\gametypes\_hud_util::setpoint("LEFT","RIGHT",4); + level.enemyflagstatustext["allies"] settext(&"OBJECTIVES_FLAG_HOME"); + level.enemyflagstatustext["allies"].alpha = var_00; + level.enemyflagstatustext["allies"].color = (1,1,1); + level.enemyflagstatustext["allies"].glowalpha = 1; + level.enemyflagstatustext["allies"].hidewheninmenu = 1; + level thread func_3A0B(level.enemyflagstatustext["allies"]); + level.friendlyflagstatusicon["axis"] = maps\mp\gametypes\_hud_util::createservericon("waypoint_flag_friendly",32,32,"axis"); + level.friendlyflagstatusicon["axis"] maps\mp\gametypes\_hud_util::setpoint("TOP LEFT","TOP LEFT",132,0); + level.friendlyflagstatusicon["axis"].alpha = var_00; + level.friendlyflagstatusicon["axis"].hidewheninmenu = 1; + level thread func_3A0B(level.friendlyflagstatusicon["axis"]); + level.friendlyflagstatustext["axis"] = maps\mp\gametypes\_hud_util::createserverfontstring("small",1.6,"axis"); + level.friendlyflagstatustext["axis"] maps\mp\gametypes\_hud_util::setparent(level.friendlyflagstatusicon["axis"]); + level.friendlyflagstatustext["axis"] maps\mp\gametypes\_hud_util::setpoint("LEFT","RIGHT",4); + level.friendlyflagstatustext["axis"] settext(&"OBJECTIVES_FLAG_HOME"); + level.friendlyflagstatustext["axis"].alpha = var_00; + level.friendlyflagstatustext["axis"].color = (1,1,1); + level.friendlyflagstatustext["axis"].glowalpha = 1; + level.friendlyflagstatustext["axis"].hidewheninmenu = 1; + level thread func_3A0B(level.friendlyflagstatustext["axis"]); + level.enemyflagstatusicon["axis"] = maps\mp\gametypes\_hud_util::createservericon("waypoint_flag_enemy",24,24,"axis"); + level.enemyflagstatusicon["axis"] maps\mp\gametypes\_hud_util::setpoint("TOP LEFT","TOP LEFT",132,26); + level.enemyflagstatusicon["axis"].alpha = var_00; + level.enemyflagstatusicon["axis"].hidewheninmenu = 1; + level thread func_3A0B(level.enemyflagstatusicon["axis"]); + level.enemyflagstatustext["axis"] = maps\mp\gametypes\_hud_util::createserverfontstring("small",1.6,"axis"); + level.enemyflagstatustext["axis"] maps\mp\gametypes\_hud_util::setparent(level.enemyflagstatusicon["axis"]); + level.enemyflagstatustext["axis"] maps\mp\gametypes\_hud_util::setpoint("LEFT","RIGHT",4); + level.enemyflagstatustext["axis"] settext(&"OBJECTIVES_FLAG_HOME"); + level.enemyflagstatustext["axis"].alpha = var_00; + level.enemyflagstatustext["axis"].color = (1,1,1); + level.enemyflagstatustext["axis"].glowalpha = 1; + level.enemyflagstatustext["axis"].hidewheninmenu = 1; + level thread func_3A0B(level.enemyflagstatustext["axis"]); +} + +//Function Number: 9 +func_3A0B(param_00) +{ + level waittill("game_ended"); + if(isdefined(param_00)) + { + param_00.alpha = 0; + } +} + +//Function Number: 10 +spawnfxdelay(param_00,param_01,param_02,param_03,param_04) +{ + wait param_04; + var_05 = spawnfx(param_00,param_01,param_02,param_03); + triggerfx(var_05); +} + +//Function Number: 11 +func_39C2(param_00,param_01) +{ + var_02 = getent("ctf_zone_" + param_01,"targetname"); + if(!isdefined(var_02)) + { + common_scripts\utility::error("No ctf_zone_" + param_01 + " trigger found in map."); + return; + } + + var_03[0] = getent("ctf_flag_" + param_01,"targetname"); + if(!isdefined(var_03[0])) + { + common_scripts\utility::error("No ctf_flag_" + param_01 + " script_model found in map."); + return; + } + + var_04 = spawn("trigger_radius",var_02.origin,0,96,var_02.height); + var_02 = var_04; + var_03[0] setmodel(level.flagmodel[param_00]); + var_05 = maps\mp\gametypes\_gameobjects::createcarryobject(param_00,var_02,var_03,(0,0,85)); + var_05 maps\mp\gametypes\_gameobjects::setteamusetime("friendly",0.5); + var_05 maps\mp\gametypes\_gameobjects::setteamusetime("enemy",0.5); + var_05 maps\mp\gametypes\_gameobjects::setteamusetext("enemy",&"MP_GRABBING_FLAG"); + var_05 maps\mp\gametypes\_gameobjects::setteamusetext("friendly",&"MP_RETURNING_FLAG"); + var_05 maps\mp\gametypes\_gameobjects::allowcarry("enemy"); + var_05 maps\mp\gametypes\_gameobjects::setvisibleteam("none"); + var_05 maps\mp\gametypes\_gameobjects::set2dicon("friendly",level.iconkill2d); + var_05 maps\mp\gametypes\_gameobjects::set3dicon("friendly",level.iconkill3d); + var_05 maps\mp\gametypes\_gameobjects::set2dicon("enemy",level.iconescort2d); + var_05 maps\mp\gametypes\_gameobjects::set3dicon("enemy",level.iconescort3d); + var_05 maps\mp\gametypes\_gameobjects::setcarryicon(level.icon2d[param_00]); + var_05.objidpingfriendly = 1; + var_05.allowweapons = 1; + var_05.onpickup = ::onpickup; + var_05.onpickupfailed = ::onpickup; + var_05.ondrop = ::ondrop; + var_05.onreset = ::onreset; + var_05.oldradius = var_02.radius; + var_06 = var_02.origin + (0,0,32); + var_07 = var_02.origin + (0,0,-32); + var_08 = bullettrace(var_06,var_07,0,undefined); + var_09 = maps\mp\gametypes\_teams::getteamflagfx(param_00); + var_0A = loadfx(var_09); + var_0B = vectortoangles(var_08["normal"]); + var_0C = anglestoforward(var_0B); + var_0D = anglestoright(var_0B); + thread spawnfxdelay(var_0A,var_08["position"],var_0C,var_0D,0.5); + return var_05; +} + +//Function Number: 12 +func_39C3(param_00,param_01) +{ + var_02 = getent("ctf_zone_" + param_01,"targetname"); + if(!isdefined(var_02)) + { + common_scripts\utility::error("No ctf_zone_" + param_01 + " trigger found in map."); + return; + } + + var_03 = []; + var_04 = maps\mp\gametypes\_gameobjects::createuseobject(param_00,var_02,var_03,(0,0,85)); + var_04 maps\mp\gametypes\_gameobjects::allowuse("friendly"); + var_04 maps\mp\gametypes\_gameobjects::setvisibleteam("any"); + var_04 maps\mp\gametypes\_gameobjects::set2dicon("friendly",level.icondefendflag2d); + var_04 maps\mp\gametypes\_gameobjects::set3dicon("friendly",level.icondefendflag3d); + var_04 maps\mp\gametypes\_gameobjects::set2dicon("enemy",level.iconcaptureflag2d); + var_04 maps\mp\gametypes\_gameobjects::set3dicon("enemy",level.iconcaptureflag3d); + var_04 maps\mp\gametypes\_gameobjects::setusetime(0); + var_04 maps\mp\gametypes\_gameobjects::setkeyobject(level.teamflags[maps\mp\_utility::getotherteam(param_00)]); + var_04.onuse = ::onuse; + var_04.oncantuse = ::oncantuse; + var_05 = var_02.origin + (0,0,32); + var_06 = var_02.origin + (0,0,-32); + var_07 = bullettrace(var_05,var_06,0,undefined); + var_08 = maps\mp\gametypes\_teams::getteamflagfx(param_00); + var_09 = loadfx(var_08); + var_0A = vectortoangles(var_07["normal"]); + var_0B = anglestoforward(var_0A); + var_0C = anglestoright(var_0A); + thread spawnfxdelay(var_09,var_07["position"],var_0B,var_0C,0.5); + return var_04; +} + +//Function Number: 13 +onbeginuse(param_00) +{ + var_01 = param_00.pers["team"]; + if(var_01 == maps\mp\gametypes\_gameobjects::getownerteam()) + { + self.trigger.radius = 1024; + return; + } + + self.trigger.radius = self.oldradius; +} + +//Function Number: 14 +onenduse(param_00,param_01,param_02) +{ + self.trigger.radius = self.oldradius; +} + +//Function Number: 15 +onpickup(param_00) +{ + self notify("picked_up"); + var_01 = param_00.pers["team"]; + if(var_01 == "allies") + { + var_02 = "axis"; + } + else + { + var_02 = "allies"; + } + + if(var_01 == maps\mp\gametypes\_gameobjects::getownerteam()) + { + param_00 thread maps\mp\gametypes\_hud_message::splashnotify("flagreturn",maps\mp\gametypes\_rank::getscoreinfovalue("return")); + param_00 thread [[ level.onxpevent ]]("return"); + thread func_39C4(); + param_00 maps\mp\_utility::incplayerstat("flagsreturned",1); + param_00 thread maps\mp\_matchdata::loggameevent("return",param_00.origin); + maps\mp\_utility::printandsoundoneveryone(var_01,maps\mp\_utility::getotherteam(var_01),&"MP_FLAG_RETURNED",&"MP_ENEMY_FLAG_RETURNED","mp_obj_returned","mp_obj_returned",""); + maps\mp\_utility::leaderdialog("enemy_flag_returned",var_02,"status"); + maps\mp\_utility::leaderdialog("flag_returned",var_01,"status"); + param_00 maps\mp\_utility::incpersstat("returns",1); + param_00 maps\mp\gametypes\_persistance::statsetchild("round","returns",param_00.pers["returns"]); + level.friendlyflagstatustext[var_01] settext(&"OBJECTIVES_FLAG_HOME"); + level.friendlyflagstatustext[var_01].glowcolor = (1,1,1); + level.friendlyflagstatustext[var_01].glowalpha = 0; + level.enemyflagstatustext[var_02] settext(&"OBJECTIVES_FLAG_HOME"); + level.enemyflagstatustext[var_02].glowcolor = (1,1,1); + level.enemyflagstatustext[var_02].glowalpha = 0; + return; + } + + if(isdefined(level.ctf_loadouts) && isdefined(level.ctf_loadouts[var_01])) + { + param_00 thread func_39DA(); + } + else + { + param_00 func_39C5(); + } + + level.friendlyflagstatustext[var_02] setplayernamestring(param_00); + level.friendlyflagstatustext[var_02].glowcolor = (0.75,0.25,0.25); + level.friendlyflagstatustext[var_02].glowalpha = 1; + level.enemyflagstatustext[var_01] setplayernamestring(param_00); + level.enemyflagstatustext[var_01].glowcolor = (0.25,0.75,0.25); + level.enemyflagstatustext[var_01].glowalpha = 1; + maps\mp\gametypes\_gameobjects::setvisibleteam("any"); + maps\mp\gametypes\_gameobjects::set2dicon("friendly",level.iconkill2d); + maps\mp\gametypes\_gameobjects::set3dicon("friendly",level.iconkill3d); + maps\mp\gametypes\_gameobjects::set2dicon("enemy",level.iconescort2d); + maps\mp\gametypes\_gameobjects::set3dicon("enemy",level.iconescort3d); + level.capzones[var_02] maps\mp\gametypes\_gameobjects::allowuse("none"); + level.capzones[var_02] maps\mp\gametypes\_gameobjects::setvisibleteam("none"); + if(!level.teamflags[var_01] maps\mp\gametypes\_gameobjects::ishome()) + { + level.capzones[var_01].trigger maps\mp\_entityheadicons::setheadicon(param_00,level.iconwaitforflag2d,(0,0,85),undefined,undefined,undefined,undefined,undefined,undefined,undefined,0); + if(isdefined(level.teamflags[var_01].carrier)) + { + level.capzones[var_02].trigger maps\mp\_entityheadicons::setheadicon(level.teamflags[var_01].carrier,level.iconwaitforflag2d,(0,0,85),undefined,undefined,undefined,undefined,undefined,undefined,undefined,0); + } + } + + maps\mp\_utility::printandsoundoneveryone(var_01,var_02,&"MP_ENEMY_FLAG_TAKEN_BY",&"MP_FLAG_TAKEN_BY","mp_obj_taken","mp_enemy_obj_taken",param_00); + maps\mp\_utility::leaderdialog("enemy_flag_taken",var_01,"status"); + maps\mp\_utility::leaderdialog("flag_taken",var_02,"status"); + thread maps\mp\_utility::teamplayercardsplash("callout_flagpickup",param_00); + param_00 thread maps\mp\gametypes\_hud_message::splashnotify("flagpickup",maps\mp\gametypes\_rank::getscoreinfovalue("pickup")); + lib_036E::func_2B7B("pickup",param_00); + param_00 thread [[ level.onxpevent ]]("pickup"); + param_00 maps\mp\_utility::incplayerstat("flagscarried",1); + param_00 thread maps\mp\_matchdata::loggameevent("pickup",param_00.origin); +} + +//Function Number: 16 +func_39C4() +{ + maps\mp\gametypes\_gameobjects::returnhome(); +} + +//Function Number: 17 +ondrop(param_00) +{ + var_01 = maps\mp\gametypes\_gameobjects::getownerteam(); + var_02 = level.otherteam[var_01]; + maps\mp\gametypes\_gameobjects::allowcarry("any"); + maps\mp\gametypes\_gameobjects::setvisibleteam("any"); + maps\mp\gametypes\_gameobjects::set2dicon("friendly",level.iconreturnflag2d); + maps\mp\gametypes\_gameobjects::set3dicon("friendly",level.iconreturnflag3d); + maps\mp\gametypes\_gameobjects::set2dicon("enemy",level.iconcaptureflag2d); + maps\mp\gametypes\_gameobjects::set3dicon("enemy",level.iconcaptureflag3d); + level.friendlyflagstatustext[var_01] settext(&"OBJECTIVES_FLAG_AWAY"); + level.friendlyflagstatustext[var_01].glowcolor = (1,1,1); + level.friendlyflagstatustext[var_01].glowalpha = 0; + level.enemyflagstatustext[var_02] settext(&"OBJECTIVES_FLAG_AWAY"); + level.enemyflagstatustext[var_02].glowcolor = (1,1,1); + level.enemyflagstatustext[var_02].glowalpha = 0; + level.capzones[var_02].trigger maps\mp\_entityheadicons::setheadicon("none","",(0,0,0)); + if(isdefined(param_00)) + { + if(isdefined(param_00.carryflag)) + { + param_00 func_39C6(); + } + + maps\mp\_utility::printandsoundoneveryone(var_02,"none",&"MP_ENEMY_FLAG_DROPPED_BY","","mp_war_objective_lost","",param_00); + } + else + { + maps\mp\_utility::playsoundonplayers("mp_war_objective_lost",var_02); + } + + maps\mp\_utility::leaderdialog("enemy_flag_dropped",var_02,"status"); + maps\mp\_utility::leaderdialog("flag_dropped",var_01,"status"); + thread func_39D9(); +} + +//Function Number: 18 +func_39D9() +{ + self endon("picked_up"); + wait level.flagreturntime; + var_00 = maps\mp\gametypes\_gameobjects::getownerteam(); + var_01 = level.otherteam[var_00]; + maps\mp\_utility::playsoundonplayers("mp_war_objective_taken",var_00); + maps\mp\_utility::playsoundonplayers("mp_war_objective_lost",var_01); + maps\mp\gametypes\_gameobjects::returnhome(); +} + +//Function Number: 19 +onreset() +{ + var_00 = maps\mp\gametypes\_gameobjects::getownerteam(); + var_01 = level.otherteam[var_00]; + maps\mp\gametypes\_gameobjects::allowcarry("enemy"); + maps\mp\gametypes\_gameobjects::setvisibleteam("none"); + maps\mp\gametypes\_gameobjects::set2dicon("friendly",level.iconkill2d); + maps\mp\gametypes\_gameobjects::set3dicon("friendly",level.iconkill3d); + maps\mp\gametypes\_gameobjects::set2dicon("enemy",level.iconescort2d); + maps\mp\gametypes\_gameobjects::set3dicon("enemy",level.iconescort3d); + level.friendlyflagstatustext[var_00] settext(&"OBJECTIVES_FLAG_HOME"); + level.friendlyflagstatustext[var_00].glowcolor = (1,1,1); + level.friendlyflagstatustext[var_00].glowalpha = 0; + level.enemyflagstatustext[var_01] settext(&"OBJECTIVES_FLAG_HOME"); + level.enemyflagstatustext[var_01].glowcolor = (1,1,1); + level.enemyflagstatustext[var_01].glowalpha = 0; + level.capzones[var_00] maps\mp\gametypes\_gameobjects::allowuse("friendly"); + level.capzones[var_00] maps\mp\gametypes\_gameobjects::setvisibleteam("any"); + level.capzones[var_00] maps\mp\gametypes\_gameobjects::set2dicon("friendly",level.icondefendflag2d); + level.capzones[var_00] maps\mp\gametypes\_gameobjects::set3dicon("friendly",level.icondefendflag3d); + level.capzones[var_00] maps\mp\gametypes\_gameobjects::set2dicon("enemy",level.iconcaptureflag2d); + level.capzones[var_00] maps\mp\gametypes\_gameobjects::set3dicon("enemy",level.iconcaptureflag3d); + level.capzones[var_00].trigger maps\mp\_entityheadicons::setheadicon("none","",(0,0,0)); +} + +//Function Number: 20 +onuse(param_00) +{ + var_01 = param_00.pers["team"]; + if(var_01 == "allies") + { + var_02 = "axis"; + } + else + { + var_02 = "allies"; + } + + maps\mp\_utility::leaderdialog("enemy_flag_captured",var_01,"status"); + maps\mp\_utility::leaderdialog("flag_captured",var_02,"status"); + thread maps\mp\_utility::teamplayercardsplash("callout_flagcapture",param_00); + lib_036E::func_2B88(var_01,1); + param_00 thread maps\mp\gametypes\_hud_message::splashnotify("flag_capture",maps\mp\gametypes\_rank::getscoreinfovalue("capture")); + lib_036E::func_2B7B("capture",param_00); + param_00 thread [[ level.onxpevent ]]("capture"); + param_00 maps\mp\_utility::incplayerstat("flagscaptured",1); + param_00 notify("objective","captured"); + param_00 thread maps\mp\_matchdata::loggameevent("capture",param_00.origin); + param_00 maps\mp\_utility::incpersstat("captures",1); + param_00 maps\mp\gametypes\_persistance::statsetchild("round","captures",param_00.pers["captures"]); + maps\mp\_utility::printandsoundoneveryone(var_01,var_02,&"MP_ENEMY_FLAG_CAPTURED_BY",&"MP_FLAG_CAPTURED_BY","mp_obj_captured","mp_enemy_obj_captured",param_00); + if(isdefined(param_00.carryflag)) + { + param_00 func_39C6(); + } + + if(isdefined(level.ctf_loadouts) && isdefined(level.ctf_loadouts[var_01])) + { + param_00 thread func_39DB(); + } + + level.teamflags[var_02] func_39C4(); + level thread func_441A(var_01); +} + +//Function Number: 21 +func_441A(param_00) +{ + if(maps\mp\_utility::inovertime()) + { + game["roundsWon"][param_00]++; + level.finalkillcam_winner = param_00; + game["teamScores"]["axis"] = game["roundsWon"]["axis"]; + game["teamScores"]["allies"] = game["roundsWon"]["allies"]; + setteamscore("axis",game["teamScores"]["axis"]); + setteamscore("allies",game["teamScores"]["allies"]); + thread maps\mp\gametypes\_gamelogic::endgame(param_00,game["strings"]["score_limit_reached"]); + return; + } + + if(game["switchedsides"]) + { + if(game["teamScores"][param_00] == maps\mp\_utility::getwatcheddvar("scorelimit")) + { + game["roundsWon"][param_00]++; + game["teamScores"]["axis"] = game["roundsWon"]["axis"]; + game["teamScores"]["allies"] = game["roundsWon"]["allies"]; + setteamscore("axis",game["teamScores"]["axis"]); + setteamscore("allies",game["teamScores"]["allies"]); + if(game["roundsWon"][param_00] > game["roundsWon"][level.otherteam[param_00]]) + { + level.finalkillcam_winner = param_00; + thread maps\mp\gametypes\_gamelogic::endgame(param_00,game["strings"]["score_limit_reached"]); + return; + } + + level.finalkillcam_winner = "none"; + thread maps\mp\gametypes\_gamelogic::endgame("overtime",game["strings"]["score_limit_reached"]); + return; + } + + return; + } + + if(game["teamScores"][param_00] == maps\mp\_utility::getwatcheddvar("scorelimit")) + { + game["roundsWon"][param_00]++; + level.finalkillcam_winner = param_00; + game["teamScores"]["axis"] = game["roundsWon"]["axis"]; + game["teamScores"]["allies"] = game["roundsWon"]["allies"]; + setteamscore("axis",game["teamScores"]["axis"]); + setteamscore("allies",game["teamScores"]["allies"]); + thread maps\mp\gametypes\_gamelogic::endgame("halftime",game["strings"]["score_limit_reached"]); + return; + } +} + +//Function Number: 22 +ontimelimit() +{ + if(maps\mp\_utility::inovertime()) + { + game["teamScores"]["axis"] = game["roundsWon"]["axis"]; + game["teamScores"]["allies"] = game["roundsWon"]["allies"]; + setteamscore("axis",game["teamScores"]["axis"]); + setteamscore("allies",game["teamScores"]["allies"]); + level.finalkillcam_winner = "none"; + thread maps\mp\gametypes\_gamelogic::endgame("tie",game["strings"]["time_limit_reached"]); + return; + } + + if(game["switchedsides"]) + { + if(game["teamScores"]["axis"] > game["teamScores"]["allies"]) + { + game["roundsWon"]["axis"]++; + } + else if(game["teamScores"]["allies"] > game["teamScores"]["axis"]) + { + game["roundsWon"]["allies"]++; + } + + game["teamScores"]["axis"] = game["roundsWon"]["axis"]; + game["teamScores"]["allies"] = game["roundsWon"]["allies"]; + setteamscore("axis",game["teamScores"]["axis"]); + setteamscore("allies",game["teamScores"]["allies"]); + if(game["roundsWon"]["axis"] > game["roundsWon"]["allies"]) + { + level.finalkillcam_winner = "axis"; + thread maps\mp\gametypes\_gamelogic::endgame("axis",game["strings"]["time_limit_reached"]); + return; + } + + if(game["roundsWon"]["allies"] > game["roundsWon"]["axis"]) + { + level.finalkillcam_winner = "allies"; + thread maps\mp\gametypes\_gamelogic::endgame("allies",game["strings"]["time_limit_reached"]); + return; + } + + level.finalkillcam_winner = "none"; + thread maps\mp\gametypes\_gamelogic::endgame("overtime",game["strings"]["time_limit_reached"]); + return; + } + + if(game["teamScores"]["axis"] > game["teamScores"]["allies"]) + { + game["roundsWon"]["axis"]++; + level.finalkillcam_winner = "axis"; + } + else if(game["teamScores"]["allies"] > game["teamScores"]["axis"]) + { + game["roundsWon"]["allies"]++; + level.finalkillcam_winner = "allies"; + } + else + { + level.finalkillcam_winner = "none"; + } + + game["teamScores"]["axis"] = game["roundsWon"]["axis"]; + game["teamScores"]["allies"] = game["roundsWon"]["allies"]; + setteamscore("axis",game["teamScores"]["axis"]); + setteamscore("allies",game["teamScores"]["allies"]); + thread maps\mp\gametypes\_gamelogic::endgame("halftime",game["strings"]["time_limit_reached"]); +} + +//Function Number: 23 +func_39DA() +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + if(isdefined(self.iscarrying) && self.iscarrying == 1) + { + self notify("force_cancel_placement"); + wait 0.05; + } + + if(maps\mp\_utility::isjuggernaut()) + { + self notify("lost_juggernaut"); + wait 0.05; + } + + self.pers["gamemodeLoadout"] = level.ctf_loadouts[self.team]; + var_00 = spawn("script_model",self.origin); + var_00.angles = self.angles; + var_00.playerspawnpos = self.origin; + var_00.notti = 1; + self.setspawnpoint = var_00; + self.gamemode_chosenclass = self.class; + self.pers["class"] = "gamemode"; + self.pers["lastClass"] = "gamemode"; + self.class = "gamemode"; + self.lastclass = "gamemode"; + self notify("faux_spawn"); + self.gameobject_fauxspawn = 1; + self.faux_spawn_stance = self getstance(); + thread maps\mp\gametypes\_playerlogic::spawnplayer(1); + thread waitattachflag(); +} + +//Function Number: 24 +waitattachflag() +{ + level endon("game_ende"); + self endon("disconnect"); + self endon("death"); + self waittill("spawned_player"); + func_39C5(); +} + +//Function Number: 25 +func_39DB() +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + if(isdefined(self.iscarrying) && self.iscarrying == 1) + { + self notify("force_cancel_placement"); + wait 0.05; + } + + if(maps\mp\_utility::isjuggernaut()) + { + self notify("lost_juggernaut"); + wait 0.05; + } + + self.pers["gamemodeLoadout"] = undefined; + var_00 = spawn("script_model",self.origin); + var_00.angles = self.angles; + var_00.playerspawnpos = self.origin; + var_00.notti = 1; + self.setspawnpoint = var_00; + self notify("faux_spawn"); + self.faux_spawn_stance = self getstance(); + thread maps\mp\gametypes\_playerlogic::spawnplayer(1); +} + +//Function Number: 26 +oncantuse(param_00) +{ +} + +//Function Number: 27 +onplayerkilled(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09) +{ + if(isdefined(param_01) && isplayer(param_01) && param_01.pers["team"] != self.pers["team"]) + { + if(isdefined(param_01.carryflag)) + { + param_01 maps\mp\_utility::incplayerstat("killsasflagcarrier",1); + } + + if(isdefined(self.carryflag)) + { + param_01 thread [[ level.onxpevent ]]("kill_carrier"); + lib_036E::func_2B7B("kill_carrier",param_01); + param_01 maps\mp\_utility::incplayerstat("flagcarrierkills",1); + param_01 maps\mp\_utility::incpersstat("defends",1); + param_01 maps\mp\gametypes\_persistance::statsetchild("round","defends",param_01.pers["defends"]); + thread maps\mp\_matchdata::logkillevent(param_09,"carrying"); + func_39C6(); + return; + } + + return; + } + + if(isdefined(self.carryflag)) + { + func_39C6(); + } +} + +//Function Number: 28 +func_39C5() +{ + var_00 = level.otherteam[self.pers["team"]]; + self attach(level.carryflag[var_00],"J_spine4",1); + self.carryflag = level.carryflag[var_00]; +} + +//Function Number: 29 +func_39C6() +{ + self detach(self.carryflag,"J_spine4"); + self.carryflag = undefined; +} + +//Function Number: 30 +initgametypeawards() +{ + maps\mp\_awards::initstataward("flagscaptured",0,::maps\mp\_awards::highestwins); + maps\mp\_awards::initstataward("flagsreturned",0,::maps\mp\_awards::highestwins); + maps\mp\_awards::initstataward("flagcarrierkills",0,::maps\mp\_awards::highestwins); + maps\mp\_awards::initstataward("flagscarried",0,::maps\mp\_awards::highestwins); + maps\mp\_awards::initstataward("killsasflagcarrier",0,::maps\mp\_awards::highestwins); +} + +//Function Number: 31 +func_3989() +{ + if(isusingmatchrulesdata() && getmatchrulesdata("defaultClasses","axis",5,"class","inUse")) + { + level.ctf_loadouts["axis"] = maps\mp\_utility::getmatchrulesspecialclass("axis",5); + } + + if(isusingmatchrulesdata() && getmatchrulesdata("defaultClasses","allies",5,"class","inUse")) + { + level.ctf_loadouts["allies"] = maps\mp\_utility::getmatchrulesspecialclass("allies",5); + } +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/gametypes/ctfpro.gsc b/MW3/PC/MP/maps/mp/gametypes/ctfpro.gsc new file mode 100644 index 0000000..07faf42 --- /dev/null +++ b/MW3/PC/MP/maps/mp/gametypes/ctfpro.gsc @@ -0,0 +1,715 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\ctfpro.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 26 + * Decompile Time: 333 ms + * Timestamp: 10/27/2023 2:13:10 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + maps\mp\gametypes\_globallogic::init(); + maps\mp\gametypes\_callbacksetup::setupcallbacks(); + maps\mp\gametypes\_globallogic::setupcallbacks(); + maps\mp\_utility::registerscorelimitdvar(level.gametype,1000); + maps\mp\_utility::registertimelimitdvar(level.gametype,6,0,0); + maps\mp\_utility::registerroundlimitdvar(level.gametype,2,0,0); + maps\mp\_utility::setoverridewatchdvar("winlimit",2); + maps\mp\_utility::registerroundswitchdvar(level.gametype,1,0,0); + maps\mp\_utility::registernumlivesdvar(level.gametype,0,0,0); + maps\mp\_utility::registerhalftimedvar(level.gametype,1,0,0); + level.teambased = 1; + level.onprecachegametype = ::onprecachegametype; + level.onstartgametype = ::onstartgametype; + level.getspawnpoint = ::getspawnpoint; + level.onplayerkilled = ::onplayerkilled; + level.initgametypeawards = ::initgametypeawards; + level.onhalftime = ::ontimelimit; + level.ontimelimit = ::ontimelimit; + level.onspawnplayer = ::onspawnplayer; + level.scorelimitoverride = 1; + level.overtimescorewinoverride = 1; + level.flagreturntime = maps\mp\_utility::getintproperty("scr_ctf_returntime",30); + game["dialog"]["gametype"] = "captureflag"; + if(getdvarint("g_hardcore")) + { + game["dialog"]["gametype"] = "hc_" + game["dialog"]["gametype"]; + } + else if(getdvarint("camera_thirdPerson")) + { + game["dialog"]["gametype"] = "thirdp_" + game["dialog"]["gametype"]; + } + else if(getdvarint("scr_diehard")) + { + game["dialog"]["gametype"] = "dh_" + game["dialog"]["gametype"]; + } + else if(getdvarint("scr_" + level.gametype + "_promode")) + { + game["dialog"]["gametype"] = game["dialog"]["gametype"] + "_pro"; + } + + game["dialog"]["offense_obj"] = "capture_obj"; + game["dialog"]["defense_obj"] = "capture_obj"; +} + +//Function Number: 2 +onprecachegametype() +{ + precachestring(&"MP_FLAG_TAKEN_BY"); + precachestring(&"MP_ENEMY_FLAG_TAKEN_BY"); + precachestring(&"MP_FLAG_CAPTURED_BY"); + precachestring(&"MP_ENEMY_FLAG_CAPTURED_BY"); + precachestring(&"MP_FLAG_RETURNED"); + precachestring(&"MP_ENEMY_FLAG_RETURNED"); + precachestring(&"MP_YOUR_FLAG_RETURNING_IN"); + precachestring(&"MP_ENEMY_FLAG_RETURNING_IN"); + precachestring(&"MP_ENEMY_FLAG_DROPPED_BY"); + precachestring(&"MP_DOM_NEUTRAL_FLAG_CAPTURED"); + precachestring(&"MP_GRABBING_FLAG"); + precachestring(&"MP_RETURNING_FLAG"); +} + +//Function Number: 3 +onspawnplayer() +{ + if(maps\mp\_utility::inovertime() && !isdefined(self.otspawned)) + { + thread func_3979(); + } +} + +//Function Number: 4 +func_3979() +{ + self endon("disconnect"); + wait 0.25; + self.otspawned = 1; + var_00 = maps\mp\_utility::getobjectivehinttext(self.team); + thread maps\mp\gametypes\_hud_message::hintmessage(var_00); +} + +//Function Number: 5 +onstartgametype() +{ + if(!isdefined(game["switchedsides"])) + { + game["switchedsides"] = 0; + } + + if(!isdefined(game["original_defenders"])) + { + game["original_defenders"] = game["defenders"]; + } + + if(game["switchedsides"]) + { + var_00 = game["attackers"]; + var_01 = game["defenders"]; + game["attackers"] = var_01; + game["defenders"] = var_00; + if(game["roundsWon"][game["defenders"]] > 0) + { + game["teamScores"][game["defenders"]] = 500; + setteamscore(game["defenders"],500); + } + else + { + game["teamScores"][game["defenders"]] = 0; + setteamscore(game["defenders"],0); + } + } + + setclientnamemode("auto_change"); + if(level.splitscreen) + { + if(maps\mp\_utility::inovertime()) + { + maps\mp\_utility::setobjectivescoretext(game["attackers"],&"OBJECTIVES_GRAB_FLAG"); + maps\mp\_utility::setobjectivescoretext(game["defenders"],&"OBJECTIVES_GRAB_FLAG"); + } + else + { + maps\mp\_utility::setobjectivescoretext(game["attackers"],&"OBJECTIVES_ONE_FLAG_ATTACKER"); + maps\mp\_utility::setobjectivescoretext(game["defenders"],&"OBJECTIVES_ONE_FLAG_DEFENDER"); + } + } + else if(maps\mp\_utility::inovertime()) + { + maps\mp\_utility::setobjectivescoretext(game["attackers"],&"OBJECTIVES_GRAB_FLAG_SCORE"); + maps\mp\_utility::setobjectivescoretext(game["defenders"],&"OBJECTIVES_GRAB_FLAG_SCORE"); + } + else + { + maps\mp\_utility::setobjectivescoretext(game["attackers"],&"OBJECTIVES_ONE_FLAG_ATTACKER_SCORE"); + maps\mp\_utility::setobjectivescoretext(game["defenders"],&"OBJECTIVES_ONE_FLAG_DEFENDER_SCORE"); + } + + if(maps\mp\_utility::inovertime()) + { + maps\mp\_utility::setobjectivetext(game["attackers"],&"OBJECTIVES_OVERTIME_CTF"); + maps\mp\_utility::setobjectivetext(game["defenders"],&"OBJECTIVES_OVERTIME_CTF"); + maps\mp\_utility::setobjectivehinttext(game["attackers"],&"OBJECTIVES_GRAB_FLAG_HINT"); + maps\mp\_utility::setobjectivehinttext(game["defenders"],&"OBJECTIVES_GRAB_FLAG_HINT"); + } + else + { + maps\mp\_utility::setobjectivetext(game["attackers"],&"OBJECTIVES_CTF"); + maps\mp\_utility::setobjectivetext(game["defenders"],&"OBJECTIVES_CTF"); + maps\mp\_utility::setobjectivehinttext(game["attackers"],&"OBJECTIVES_ONE_FLAG_ATTACKER_HINT"); + maps\mp\_utility::setobjectivehinttext(game["defenders"],&"OBJECTIVES_ONE_FLAG_DEFENDER_HINT"); + } + + level.spawnmins = (0,0,0); + level.spawnmaxs = (0,0,0); + maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_ctf_pro_spawn_attackers_start"); + maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_ctf_pro_spawn_defenders_start"); + maps\mp\gametypes\_spawnlogic::addspawnpoints(game["attackers"],"mp_ctf_pro_spawn_attackers"); + maps\mp\gametypes\_spawnlogic::addspawnpoints(game["defenders"],"mp_ctf_pro_spawn_defenders"); + level.mapcenter = maps\mp\gametypes\_spawnlogic::findboxcenter(level.spawnmins,level.spawnmaxs); + setmapcenter(level.mapcenter); + maps\mp\gametypes\_rank::registerscoreinfo("kill",50); + maps\mp\gametypes\_rank::registerscoreinfo("headshot",50); + maps\mp\gametypes\_rank::registerscoreinfo("assist",20); + maps\mp\gametypes\_rank::registerscoreinfo("pickup",50); + maps\mp\gametypes\_rank::registerscoreinfo("return",50); + maps\mp\gametypes\_rank::registerscoreinfo("capture",250); + maps\mp\gametypes\_rank::registerscoreinfo("kill_carrier",50); + maps\mp\gametypes\_rank::registerscoreinfo("defend",100); + maps\mp\gametypes\_rank::registerscoreinfo("defend_assist",100); + maps\mp\gametypes\_rank::registerscoreinfo("assault",100); + maps\mp\gametypes\_rank::registerscoreinfo("assault_assist",100); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("capture",1); + var_02[0] = "ctf_pro"; + maps\mp\gametypes\_gameobjects::main(var_02); + thread func_39DC(); +} + +//Function Number: 6 +getspawnpoint() +{ + if(level.ingraceperiod) + { + if(self.team == game["attackers"]) + { + var_00 = "attackers"; + } + else + { + var_00 = "defenders"; + } + + var_01 = getentarray("mp_ctf_pro_spawn_" + var_00 + "_start","classname"); + var_02 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random(var_01); + } + else + { + var_01 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints(self.team); + var_02 = maps\mp\gametypes\_spawnlogic::getspawnpoint_nearteam(var_02); + } + + return var_02; +} + +//Function Number: 7 +func_39DC() +{ + level.flagmodel[game["defenders"]] = maps\mp\gametypes\_teams::getteamflagmodel(game["defenders"]); + level.icon2d[game["defenders"]] = maps\mp\gametypes\_teams::getteamflagicon(game["defenders"]); + level.carryflag[game["defenders"]] = maps\mp\gametypes\_teams::getteamflagcarrymodel(game["defenders"]); + precachemodel(level.flagmodel[game["defenders"]]); + precachemodel(level.carryflag[game["defenders"]]); + level.iconescort2d["a"] = "waypoint_escort_a"; + level.iconescort2d["b"] = "waypoint_escort_b"; + level.iconescort3d["a"] = level.iconescort2d["a"]; + level.iconescort3d["b"] = level.iconescort2d["b"]; + precacheshader(level.iconescort2d["a"]); + precacheshader(level.iconescort2d["b"]); + level.iconkill2d["a"] = "waypoint_kill_a"; + level.iconkill2d["b"] = "waypoint_kill_b"; + level.iconkill3d["a"] = level.iconkill2d["a"]; + level.iconkill3d["b"] = level.iconkill2d["b"]; + precacheshader(level.iconkill2d["a"]); + precacheshader(level.iconkill2d["b"]); + level.iconcaptureflag2d["a"] = "waypoint_capture_flag_a"; + level.iconcaptureflag2d["b"] = "waypoint_capture_flag_b"; + level.iconcaptureflag3d["a"] = level.iconcaptureflag2d["a"]; + level.iconcaptureflag3d["b"] = level.iconcaptureflag2d["b"]; + precacheshader(level.iconcaptureflag2d["a"]); + precacheshader(level.iconcaptureflag2d["b"]); + level.icondefendflag2d["a"] = "waypoint_defend_flag_a"; + level.icondefendflag2d["b"] = "waypoint_defend_flag_b"; + level.icondefendflag3d["a"] = level.icondefendflag2d["a"]; + level.icondefendflag3d["b"] = level.icondefendflag2d["b"]; + precacheshader(level.icondefendflag2d["a"]); + precacheshader(level.icondefendflag2d["b"]); + level.iconreturnflag2d["a"] = "waypoint_return_flag_a"; + level.iconreturnflag2d["b"] = "waypoint_return_flag_b"; + level.iconreturnflag3d["a"] = level.iconreturnflag2d["a"]; + level.iconreturnflag3d["b"] = level.iconreturnflag2d["b"]; + precacheshader(level.iconreturnflag2d["a"]); + precacheshader(level.iconreturnflag2d["b"]); + level.iconflagbase2d = "waypoint_flag_base"; + level.iconflagbase3d = level.iconflagbase2d; + precacheshader(level.iconflagbase2d); + precacheshader(level.icon2d[game["defenders"]]); + precacheshader("waypoint_flag_friendly"); + precacheshader("waypoint_flag_enemy"); + precachestring(&"OBJECTIVES_FLAG_HOME"); + precachestring(&"OBJECTIVES_FLAG_NAME"); + precachestring(&"OBJECTIVES_FLAG_AWAY"); + level.teamflags[game["defenders"]] = func_39DF(game["defenders"]); + level.capzones[game["attackers"]] = func_39E1(game["attackers"]); +} + +//Function Number: 8 +ontimelimit() +{ + if(game["switchedsides"] == 1) + { + if(game["roundsWon"][game["defenders"]] > 0) + { + game["teamScores"][game["defenders"]] = 1; + setteamscore(game["defenders"],1); + game["teamScores"][game["attackers"]] = 0; + setteamscore(game["attackers"],0); + maps\mp\_utility::setoverridewatchdvar("winlimit",1); + level.onlyroundoverride = 1; + thread maps\mp\gametypes\_gamelogic::endgame(game["defenders"],game["strings"]["time_limit_reached"]); + return; + } + + game["teamScores"][game["defenders"]] = 0; + setteamscore(game["defenders"],0); + game["teamScores"][game["attackers"]] = 0; + setteamscore(game["attackers"],0); + thread maps\mp\gametypes\_gamelogic::endgame("tie",game["strings"]["time_limit_reached"]); + return; + } + + game["roundsPlayed"]++; + game["teamScores"][game["attackers"]] = 0; + setteamscore(game["attackers"],0); + thread maps\mp\gametypes\_gamelogic::endgame("halftime",game["strings"]["time_limit_reached"]); +} + +//Function Number: 9 +spawnfxdelay(param_00,param_01,param_02,param_03,param_04) +{ + wait param_04; + var_05 = spawnfx(param_00,param_01,param_02,param_03); + triggerfx(var_05); +} + +//Function Number: 10 +func_39DF(param_00) +{ + var_01 = []; + var_7B[0].points = 200; + var_7B[1].points = 200; + return var_7B; +} + +//Function Number: 11 +func_39C2(param_00,param_01) +{ + var_02 = getent("ctf_pro_trig_" + param_01,"targetname"); + if(!isdefined(var_02)) + { + common_scripts\utility::error("No ctf_pro_trig_" + param_01 + " trigger found in map."); + return; + } + + var_03 = getent("ctf_pro_flag_" + param_01,"targetname"); + if(!isdefined(var_03)) + { + common_scripts\utility::error("No ctf_pro_flag_" + param_01 + " script_model found in map."); + return; + } + + var_04 = getent("ctf_pro_flag_spawn_" + param_01,"targetname"); + if(!isdefined(var_04)) + { + common_scripts\utility::error("No ctf_pro_flag_spawn_" + param_01 + " script_origin found in map."); + return; + } + + var_03 setmodel(level.flagmodel[param_00]); + var_05[0] = var_03; + var_06 = maps\mp\gametypes\_gameobjects::createcarryobject(param_00,var_02,var_05,(0,0,85)); + var_06 maps\mp\gametypes\_gameobjects::setteamusetime("friendly",0.5); + var_06 maps\mp\gametypes\_gameobjects::setteamusetime("enemy",0.5); + var_06 maps\mp\gametypes\_gameobjects::setteamusetext("enemy",&"MP_GRABBING_FLAG"); + var_06 maps\mp\gametypes\_gameobjects::setteamusetext("friendly",&"MP_RETURNING_FLAG"); + var_06 maps\mp\gametypes\_gameobjects::allowcarry("enemy"); + var_06 maps\mp\gametypes\_gameobjects::setvisibleteam("none"); + var_06 maps\mp\gametypes\_gameobjects::set2dicon("friendly",level.iconkill2d[param_01]); + var_06 maps\mp\gametypes\_gameobjects::set3dicon("friendly",level.iconkill3d[param_01]); + var_06 maps\mp\gametypes\_gameobjects::set2dicon("enemy",level.iconescort2d[param_01]); + var_06 maps\mp\gametypes\_gameobjects::set3dicon("enemy",level.iconescort3d[param_01]); + var_06 maps\mp\gametypes\_gameobjects::setcarryicon(level.icon2d[param_00]); + var_06.objidpingfriendly = 1; + var_06.allowweapons = 1; + var_06.onpickup = ::onpickup; + var_06.onpickupfailed = ::onpickup; + var_06.ondrop = ::ondrop; + var_06.onreset = ::onreset; + var_06.oldradius = var_02.radius; + var_06.athome = 1; + var_06.label = param_01; + var_05 = []; + var_07 = maps\mp\gametypes\_gameobjects::createuseobject(param_00,var_04,var_05,(0,0,85)); + var_07 maps\mp\gametypes\_gameobjects::allowuse("none"); + var_07 maps\mp\gametypes\_gameobjects::setvisibleteam("any"); + var_07 maps\mp\gametypes\_gameobjects::set2dicon("friendly",level.icondefendflag2d[param_01]); + var_07 maps\mp\gametypes\_gameobjects::set3dicon("friendly",level.icondefendflag3d[param_01]); + var_07 maps\mp\gametypes\_gameobjects::set2dicon("enemy",level.iconcaptureflag2d[param_01]); + var_07 maps\mp\gametypes\_gameobjects::set3dicon("enemy",level.iconcaptureflag3d[param_01]); + var_06.marker = var_07; + var_08 = var_02.origin + (0,0,32); + var_09 = var_02.origin + (0,0,-32); + var_0A = bullettrace(var_08,var_09,0,undefined); + var_0B = maps\mp\gametypes\_teams::getteamflagfx(param_00); + var_0C = loadfx(var_0B); + var_0D = vectortoangles(var_0A["normal"]); + var_0E = anglestoforward(var_0D); + var_0F = anglestoright(var_0D); + thread spawnfxdelay(var_0C,var_0A["position"],var_0E,var_0F,0.5); + return var_06; +} + +//Function Number: 12 +func_39E1(param_00) +{ + var_01 = []; + var_01 = getentarray("ctf_pro_zone","targetname"); + if(!isdefined(var_01[0])) + { + common_scripts\utility::error("No ctf_pro_zone triggers found in map."); + return; + } + + var_02 = []; + for(var_03 = 0;var_03 < var_01.size;var_03++) + { + if(isdefined(level.teamflags[maps\mp\_utility::getotherteam(param_00)][var_03])) + { + var_04 = []; + var_02[var_03] = maps\mp\gametypes\_gameobjects::createuseobject(param_00,var_01[var_03],var_04,(0,0,0)); + var_02[var_03] maps\mp\gametypes\_gameobjects::allowuse("friendly"); + var_02[var_03] maps\mp\gametypes\_gameobjects::setvisibleteam("none"); + var_02[var_03] maps\mp\gametypes\_gameobjects::setusetime(0); + var_02[var_03] maps\mp\gametypes\_gameobjects::setkeyobject(level.teamflags[maps\mp\_utility::getotherteam(param_00)][var_03]); + var_02[var_03].onuse = ::onuse; + var_02[var_03].oncantuse = ::oncantuse; + } + } + + var_02[0].origin = var_01[0].origin; + var_05 = var_01[0].origin + (0,0,32); + var_06 = var_01[0].origin + (0,0,-32); + var_07 = bullettrace(var_05,var_06,0,undefined); + var_08 = maps\mp\gametypes\_teams::getteamflagfx(param_00); + var_09 = loadfx(var_08); + var_0A = vectortoangles(var_07["normal"]); + var_0B = anglestoforward(var_0A); + var_0C = anglestoright(var_0A); + thread spawnfxdelay(var_09,var_07["position"],var_0B,var_0C,0.5); + return var_02; +} + +//Function Number: 13 +onbeginuse(param_00) +{ + var_01 = param_00.pers["team"]; + if(var_01 == maps\mp\gametypes\_gameobjects::getownerteam()) + { + self.trigger.radius = 1024; + return; + } + + self.trigger.radius = self.oldradius; +} + +//Function Number: 14 +onenduse(param_00,param_01,param_02) +{ + self.trigger.radius = self.oldradius; +} + +//Function Number: 15 +onpickup(param_00) +{ + self notify("picked_up"); + var_01 = param_00.pers["team"]; + if(var_01 == "allies") + { + var_02 = "axis"; + } + else + { + var_02 = "allies"; + } + + if(var_01 == maps\mp\gametypes\_gameobjects::getownerteam()) + { + thread maps\mp\_utility::teamplayercardsplash("callout_flagreturn",param_00); + param_00 thread maps\mp\gametypes\_hud_message::splashnotify("flagreturn",maps\mp\gametypes\_rank::getscoreinfovalue("return")); + lib_036E::func_2B7B("return",param_00); + param_00 thread [[ level.onxpevent ]]("return"); + thread func_39C4(); + param_00 maps\mp\_utility::incplayerstat("flagsreturned",1); + param_00 maps\mp\_utility::incpersstat("returns",1); + param_00 thread maps\mp\_matchdata::loggameevent("return",param_00.origin); + maps\mp\_utility::printandsoundoneveryone(var_01,maps\mp\_utility::getotherteam(var_01),&"MP_FLAG_RETURNED",&"MP_ENEMY_FLAG_RETURNED","mp_obj_returned","mp_obj_returned",""); + maps\mp\_utility::leaderdialog("enemy_flag_returned",var_02,"status"); + maps\mp\_utility::leaderdialog("flag_returned",var_01,"status"); + return; + } + + param_00 func_39C5(self); + maps\mp\gametypes\_gameobjects::setvisibleteam("any"); + maps\mp\gametypes\_gameobjects::set2dicon("friendly",level.iconkill2d[self.label]); + maps\mp\gametypes\_gameobjects::set3dicon("friendly",level.iconkill3d[self.label]); + maps\mp\gametypes\_gameobjects::set2dicon("enemy",level.iconescort2d[self.label]); + maps\mp\gametypes\_gameobjects::set3dicon("enemy",level.iconescort3d[self.label]); + self.marker maps\mp\gametypes\_gameobjects::setvisibleteam("none"); + param_00.zoneheadicon = level.capzones[game["attackers"]][0] maps\mp\_entityheadicons::setheadicon(param_00,level.iconflagbase2d,(0,0,0),24,24,undefined,undefined,undefined,undefined,undefined,0); + param_00.zonemapicon = maps\mp\gametypes\_gameobjects::getnextobjid(); + objective_add(param_00.zonemapicon,"invisible",(0,0,0)); + objective_position(param_00.zonemapicon,level.capzones[game["attackers"]][0].origin); + objective_state(param_00.zonemapicon,"active"); + objective_player(param_00.zonemapicon,param_00 getentitynumber()); + objective_icon(param_00.zonemapicon,level.iconflagbase2d); + maps\mp\_utility::printandsoundoneveryone(var_01,var_02,&"MP_ENEMY_FLAG_TAKEN_BY",&"MP_FLAG_TAKEN_BY","mp_obj_taken","mp_enemy_obj_taken",param_00); + maps\mp\_utility::leaderdialog("enemy_flag_taken",var_01,"status"); + maps\mp\_utility::leaderdialog("flag_taken",var_02,"status"); + thread maps\mp\_utility::teamplayercardsplash("callout_flagpickup",param_00); + param_00 thread maps\mp\gametypes\_hud_message::splashnotify("flagpickup",maps\mp\gametypes\_rank::getscoreinfovalue("pickup")); + lib_036E::func_2B7B("pickup",param_00); + param_00 thread [[ level.onxpevent ]]("pickup"); + param_00 maps\mp\_utility::incplayerstat("flagscarried",1); + param_00 thread maps\mp\_matchdata::loggameevent("pickup",param_00.origin); +} + +//Function Number: 16 +func_39C4() +{ + maps\mp\gametypes\_gameobjects::returnhome(); +} + +//Function Number: 17 +ondrop(param_00) +{ + var_01 = maps\mp\gametypes\_gameobjects::getownerteam(); + var_02 = level.otherteam[var_01]; + maps\mp\gametypes\_gameobjects::allowcarry("any"); + maps\mp\gametypes\_gameobjects::setvisibleteam("any"); + maps\mp\gametypes\_gameobjects::set2dicon("friendly",level.iconreturnflag2d[self.label]); + maps\mp\gametypes\_gameobjects::set3dicon("friendly",level.iconreturnflag3d[self.label]); + maps\mp\gametypes\_gameobjects::set2dicon("enemy",level.iconcaptureflag2d[self.label]); + maps\mp\gametypes\_gameobjects::set3dicon("enemy",level.iconcaptureflag3d[self.label]); + if(isdefined(param_00)) + { + if(isdefined(param_00.carryflag)) + { + param_00 func_39C6(); + } + + maps\mp\_utility::printandsoundoneveryone(var_02,"none",&"MP_ENEMY_FLAG_DROPPED_BY","","mp_war_objective_lost","",param_00); + if(isdefined(param_00.zoneheadicon)) + { + param_00.zoneheadicon destroy(); + } + + if(isdefined(param_00.zonemapicon)) + { + maps\mp\_utility::_objective_delete(param_00.zonemapicon); + param_00.zonemapicon = undefined; + } + } + else + { + maps\mp\_utility::playsoundonplayers("mp_war_objective_lost",var_02); + } + + maps\mp\_utility::leaderdialog("enemy_flag_dropped",var_02,"status"); + maps\mp\_utility::leaderdialog("flag_dropped",var_01,"status"); + thread func_39D9(); +} + +//Function Number: 18 +func_39D9() +{ + self endon("picked_up"); + wait level.flagreturntime; + maps\mp\gametypes\_gameobjects::returnhome(); +} + +//Function Number: 19 +onreset() +{ + var_00 = maps\mp\gametypes\_gameobjects::getownerteam(); + var_01 = level.otherteam[var_00]; + maps\mp\gametypes\_gameobjects::allowcarry("enemy"); + maps\mp\gametypes\_gameobjects::setvisibleteam("none"); + maps\mp\gametypes\_gameobjects::set2dicon("friendly",level.iconkill2d[self.label]); + maps\mp\gametypes\_gameobjects::set3dicon("friendly",level.iconkill3d[self.label]); + maps\mp\gametypes\_gameobjects::set2dicon("enemy",level.iconescort2d[self.label]); + maps\mp\gametypes\_gameobjects::set3dicon("enemy",level.iconescort3d[self.label]); + self.marker maps\mp\gametypes\_gameobjects::setvisibleteam("any"); +} + +//Function Number: 20 +onuse(param_00) +{ + var_01 = param_00.pers["team"]; + if(var_01 == "allies") + { + var_02 = "axis"; + } + else + { + var_02 = "allies"; + } + + maps\mp\_utility::leaderdialog("enemy_flag_captured",var_01,"status"); + maps\mp\_utility::leaderdialog("flag_captured",var_02,"status"); + thread maps\mp\_utility::teamplayercardsplash("callout_flagcapture",param_00); + func_39E5(var_01,param_00.cappedflag.points); + param_00 thread maps\mp\gametypes\_hud_message::splashnotify("flag_capture",maps\mp\gametypes\_rank::getscoreinfovalue("capture")); + lib_036E::func_2B7B("capture",param_00); + param_00 thread [[ level.onxpevent ]]("capture"); + param_00 maps\mp\_utility::incplayerstat("flagscaptured",1); + param_00 maps\mp\_utility::incpersstat("captures",1); + param_00 notify("objective","captured"); + param_00 thread maps\mp\_matchdata::loggameevent("capture",param_00.origin); + if(isdefined(level.adrenalineinfo["capture"])) + { + param_00 maps\mp\killstreaks\_killstreaks::giveadrenaline("capture"); + } + + maps\mp\_utility::printandsoundoneveryone(var_01,var_02,&"MP_ENEMY_FLAG_CAPTURED_BY",&"MP_FLAG_CAPTURED_BY","mp_obj_captured","mp_enemy_obj_captured",param_00); + if(isdefined(param_00.carryflag)) + { + param_00 func_39C6(); + } + + if(isdefined(param_00.zoneheadicon)) + { + param_00.zoneheadicon destroy(); + } + + if(isdefined(param_00.zonemapicon)) + { + maps\mp\_utility::_objective_delete(param_00.zonemapicon); + param_00.zonemapicon = undefined; + } + + param_00.cappedflag func_39C4(); +} + +//Function Number: 21 +func_39E5(param_00,param_01) +{ + lib_036E::func_2B88(param_00,param_01); + if(game["state"] != "playing") + { + return; + } + + if(game["switchedsides"]) + { + if(game["teamScores"][game["attackers"]] >= maps\mp\_utility::getwatcheddvar("scorelimit")) + { + maps\mp\_utility::setoverridewatchdvar("winlimit",1); + level.onlyroundoverride = 1; + if(game["roundsWon"][game["defenders"]] == 0) + { + game["teamScores"][game["attackers"]] = 1; + setteamscore(game["attackers"],1); + game["teamScores"][game["defenders"]] = 0; + setteamscore(game["defenders"],0); + thread maps\mp\gametypes\_gamelogic::endgame(game["attackers"],game["strings"]["score_limit_reached"]); + return; + } + + game["teamScores"][game["attackers"]] = 1; + setteamscore(game["attackers"],1); + game["teamScores"][game["defenders"]] = 1; + setteamscore(game["defenders"],1); + thread maps\mp\gametypes\_gamelogic::endgame("tie",game["strings"]["score_limit_reached"]); + return; + } + + return; + } + + if(game["teamScores"][game["attackers"]] >= maps\mp\_utility::getwatcheddvar("scorelimit")) + { + game["roundsPlayed"]++; + game["teamScores"][game["attackers"]] = 1; + setteamscore(game["attackers"],1); + game["teamScores"][game["defenders"]] = 0; + setteamscore(game["defenders"],0); + game["roundsWon"][game["attackers"]]++; + lib_036E::func_2B93(game["attackers"]); + thread maps\mp\gametypes\_gamelogic::endgame("halftime",game["strings"]["score_limit_reached"]); + } +} + +//Function Number: 22 +oncantuse(param_00) +{ +} + +//Function Number: 23 +onplayerkilled(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09) +{ + if(isdefined(param_01) && isplayer(param_01) && param_01.pers["team"] != self.pers["team"]) + { + if(isdefined(param_01.carryflag)) + { + param_01 maps\mp\_utility::incplayerstat("killsasflagcarrier",1); + } + + if(isdefined(self.carryflag)) + { + thread maps\mp\_utility::teamplayercardsplash("callout_killflagcarrier",param_01); + param_01 thread maps\mp\gametypes\_hud_message::splashnotify("killflagcarrier",maps\mp\gametypes\_rank::getscoreinfovalue("kill_carrier")); + lib_036E::func_2B7B("kill_carrier",param_01); + param_01 thread [[ level.onxpevent ]]("kill_carrier"); + param_01 maps\mp\_utility::incpersstat("defends",1); + thread maps\mp\_matchdata::logkillevent(param_09,"carrying"); + func_39C6(); + } + } +} + +//Function Number: 24 +func_39C5(param_00) +{ + var_01 = level.otherteam[self.pers["team"]]; + self attach(level.carryflag[var_01],"J_spine4",1); + self.carryflag = level.carryflag[var_01]; + self.cappedflag = param_00; +} + +//Function Number: 25 +func_39C6() +{ + self detach(self.carryflag,"J_spine4"); + self.carryflag = undefined; +} + +//Function Number: 26 +initgametypeawards() +{ + maps\mp\_awards::initstataward("flagscaptured",0,::maps\mp\_awards::highestwins); + maps\mp\_awards::initstataward("flagsreturned",0,::maps\mp\_awards::highestwins); + maps\mp\_awards::initstataward("flagcarrierkills",0,::maps\mp\_awards::highestwins); + maps\mp\_awards::initstataward("flagscarried",0,::maps\mp\_awards::highestwins); + maps\mp\_awards::initstataward("killsasflagcarrier",0,::maps\mp\_awards::highestwins); +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/gametypes/dd.gsc b/MW3/PC/MP/maps/mp/gametypes/dd.gsc new file mode 100644 index 0000000..2d8e0a6 --- /dev/null +++ b/MW3/PC/MP/maps/mp/gametypes/dd.gsc @@ -0,0 +1,1069 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\dd.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 33 + * Decompile Time: 464 ms + * Timestamp: 10/27/2023 2:13:12 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(getdvar("mapname") == "mp_background") + { + return; + } + + maps\mp\gametypes\_globallogic::init(); + maps\mp\gametypes\_callbacksetup::setupcallbacks(); + maps\mp\gametypes\_globallogic::setupcallbacks(); + if(isusingmatchrulesdata()) + { + level.initializematchrules = ::initializematchrules; + [[ level.initializematchrules ]](); + level thread maps\mp\_utility::reinitializematchrulesonmigration(); + } + else + { + maps\mp\_utility::registerroundswitchdvar(level.gametype,1,0,9); + maps\mp\_utility::registertimelimitdvar(level.gametype,3); + maps\mp\_utility::registerscorelimitdvar(level.gametype,0); + maps\mp\_utility::registerroundlimitdvar(level.gametype,3); + maps\mp\_utility::registerwinlimitdvar(level.gametype,2); + maps\mp\_utility::registernumlivesdvar(level.gametype,0); + maps\mp\_utility::registerhalftimedvar(level.gametype,0); + level.matchrules_damagemultiplier = 0; + level.matchrules_vampirism = 0; + } + + maps\mp\_utility::setovertimelimitdvar(3); + level.objectivebased = 1; + level.teambased = 1; + level.onprecachegametype = ::onprecachegametype; + level.onstartgametype = ::onstartgametype; + level.getspawnpoint = ::getspawnpoint; + level.onspawnplayer = ::onspawnplayer; + level.ondeadevent = ::ondeadevent; + level.ontimelimit = ::ontimelimit; + level.onnormaldeath = ::onnormaldeath; + level.initgametypeawards = ::initgametypeawards; + if(level.matchrules_damagemultiplier || level.matchrules_vampirism) + { + level.modifyplayerdamage = ::maps\mp\gametypes\_damage::gamemodemodifyplayerdamage; + } + + level.dd = 1; + level.bombsplanted = 0; + level.ddbombmodel = [] func_3A75(); + makedvarserverinfo("ui_bombtimer_a",-1); + makedvarserverinfo("ui_bombtimer_b",-1); + game["dialog"]["gametype"] = "demolition"; + if(getdvarint("g_hardcore")) + { + game["dialog"]["gametype"] = "hc_" + game["dialog"]["gametype"]; + } + else if(getdvarint("camera_thirdPerson")) + { + game["dialog"]["gametype"] = "thirdp_" + game["dialog"]["gametype"]; + } + else if(getdvarint("scr_diehard")) + { + game["dialog"]["gametype"] = "dh_" + game["dialog"]["gametype"]; + } + else if(getdvarint("scr_" + level.gametype + "_promode")) + { + game["dialog"]["gametype"] = game["dialog"]["gametype"] + "_pro"; + } + + game["dialog"]["offense_obj"] = "obj_destroy"; + game["dialog"]["defense_obj"] = "obj_defend"; +} + +//Function Number: 2 +initializematchrules() +{ + maps\mp\_utility::setcommonrulesfrommatchrulesdata(); + var_00 = getmatchrulesdata("demData","roundSwitch"); + setdynamicdvar("scr_dd_roundswitch",var_00); + maps\mp\_utility::registerroundswitchdvar("dd",var_00,0,9); + setdynamicdvar("scr_dd_bombtimer",getmatchrulesdata("demData","bombTimer")); + setdynamicdvar("scr_dd_planttime",getmatchrulesdata("demData","plantTime")); + setdynamicdvar("scr_dd_defusetime",getmatchrulesdata("demData","defuseTime")); + setdynamicdvar("scr_dd_addtime",getmatchrulesdata("demData","extraTime")); + setdynamicdvar("scr_dd_roundlimit",3); + maps\mp\_utility::registerroundlimitdvar("dd",3); + setdynamicdvar("scr_dd_winlimit",2); + maps\mp\_utility::registerwinlimitdvar("dd",2); + setdynamicdvar("scr_dd_halftime",0); + maps\mp\_utility::registerhalftimedvar("dd",0); + setdynamicdvar("scr_dd_promode",0); +} + +//Function Number: 3 +onprecachegametype() +{ + game["bomb_dropped_sound"] = "mp_war_objective_lost"; + game["bomb_recovered_sound"] = "mp_war_objective_taken"; + precacheshader("waypoint_bomb"); + precacheshader("hud_suitcase_bomb"); + precacheshader("waypoint_target"); + precacheshader("waypoint_target_a"); + precacheshader("waypoint_target_b"); + precacheshader("waypoint_defend"); + precacheshader("waypoint_defend_a"); + precacheshader("waypoint_defend_b"); + precacheshader("waypoint_defuse_a"); + precacheshader("waypoint_defuse_b"); + precacheshader("waypoint_target"); + precacheshader("waypoint_target_a"); + precacheshader("waypoint_target_b"); + precacheshader("waypoint_defend"); + precacheshader("waypoint_defend_a"); + precacheshader("waypoint_defend_b"); + precacheshader("waypoint_defuse"); + precacheshader("waypoint_defuse_a"); + precacheshader("waypoint_defuse_b"); + precachestring(&"MP_EXPLOSIVES_RECOVERED_BY"); + precachestring(&"MP_EXPLOSIVES_DROPPED_BY"); + precachestring(&"MP_EXPLOSIVES_PLANTED_BY"); + precachestring(&"MP_EXPLOSIVES_DEFUSED_BY"); + precachestring(&"PLATFORM_HOLD_TO_PLANT_EXPLOSIVES"); + precachestring(&"PLATFORM_HOLD_TO_DEFUSE_EXPLOSIVES"); + precachestring(&"MP_CANT_PLANT_WITHOUT_BOMB"); + precachestring(&"MP_PLANTING_EXPLOSIVE"); + precachestring(&"MP_DEFUSING_EXPLOSIVE"); + precachestring(&"MP_BOMB_A_TIMER"); + precachestring(&"MP_BOMB_B_TIMER"); + precachestring(&"MP_BOMBSITE_IN_USE"); +} + +//Function Number: 4 +onstartgametype() +{ + if(game["roundsPlayed"] == 2) + { + game["status"] = "overtime"; + setdvar("ui_overtime",1); + } + + if(!isdefined(game["switchedsides"])) + { + game["switchedsides"] = 0; + } + + if(game["switchedsides"]) + { + var_00 = game["attackers"]; + var_01 = game["defenders"]; + game["attackers"] = var_01; + game["defenders"] = var_00; + } + + level.usestartspawns = 1; + setclientnamemode("manual_change"); + game["strings"]["target_destroyed"] = &"MP_TARGET_DESTROYED"; + game["strings"]["bomb_defused"] = &"MP_BOMB_DEFUSED"; + if(maps\mp\_utility::inovertime()) + { + game["dialog"]["defense_obj"] = "obj_destroy"; + } + + precachestring(game["strings"]["target_destroyed"]); + precachestring(game["strings"]["bomb_defused"]); + level._effect["bombexplosion"] = loadfx("explosions/tanker_explosion"); + maps\mp\_utility::setobjectivetext(game["attackers"],&"OBJECTIVES_DD_ATTACKER"); + maps\mp\_utility::setobjectivetext(game["defenders"],&"OBJECTIVES_DD_DEFENDER"); + if(level.splitscreen) + { + maps\mp\_utility::setobjectivescoretext(game["attackers"],&"OBJECTIVES_DD_ATTACKER"); + maps\mp\_utility::setobjectivescoretext(game["defenders"],&"OBJECTIVES_DD_DEFENDER"); + } + else + { + maps\mp\_utility::setobjectivescoretext(game["attackers"],&"OBJECTIVES_DD_ATTACKER_SCORE"); + maps\mp\_utility::setobjectivescoretext(game["defenders"],&"OBJECTIVES_DD_DEFENDER_SCORE"); + } + + if(maps\mp\_utility::inovertime()) + { + maps\mp\_utility::setobjectivehinttext(game["attackers"],&"OBJECTIVES_DD_OVERTIME_HINT"); + maps\mp\_utility::setobjectivehinttext(game["defenders"],&"OBJECTIVES_DD_OVERTIME_HINT"); + } + else + { + maps\mp\_utility::setobjectivehinttext(game["attackers"],&"OBJECTIVES_DD_ATTACKER_HINT"); + maps\mp\_utility::setobjectivehinttext(game["defenders"],&"OBJECTIVES_DD_DEFENDER_HINT"); + } + + level.spawnmins = (0,0,0); + level.spawnmaxs = (0,0,0); + maps\mp\gametypes\_spawnlogic::addspawnpoints(game["defenders"],"mp_dd_spawn_defender"); + maps\mp\gametypes\_spawnlogic::addspawnpoints(game["defenders"],"mp_dd_spawn_defender_a",1); + maps\mp\gametypes\_spawnlogic::addspawnpoints(game["defenders"],"mp_dd_spawn_defender_b",1); + maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_dd_spawn_defender_start"); + maps\mp\gametypes\_spawnlogic::addspawnpoints(game["attackers"],"mp_dd_spawn_attacker"); + maps\mp\gametypes\_spawnlogic::addspawnpoints(game["attackers"],"mp_dd_spawn_attacker_a",1); + maps\mp\gametypes\_spawnlogic::addspawnpoints(game["attackers"],"mp_dd_spawn_attacker_b",1); + maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_dd_spawn_attacker_start"); + level.spawn_defenders = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_dd_spawn_defender"); + level.spawn_defenders_a = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_dd_spawn_defender_a"); + level.spawn_defenders_a = common_scripts\utility::array_combine(level.spawn_defenders,level.spawn_defenders_a); + level.spawn_defenders_b = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_dd_spawn_defender_b"); + level.spawn_defenders_b = common_scripts\utility::array_combine(level.spawn_defenders,level.spawn_defenders_b); + level.spawn_attackers = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_dd_spawn_attacker"); + level.spawn_attackers_a = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_dd_spawn_attacker_a"); + level.spawn_attackers_a = common_scripts\utility::array_combine(level.spawn_attackers,level.spawn_attackers_a); + level.spawn_attackers_b = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_dd_spawn_attacker_b"); + level.spawn_attackers_b = common_scripts\utility::array_combine(level.spawn_attackers,level.spawn_attackers_b); + level.spawn_defenders_start = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_dd_spawn_defender_start"); + level.spawn_attackers_start = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_dd_spawn_attacker_start"); + level.mapcenter = maps\mp\gametypes\_spawnlogic::findboxcenter(level.spawnmins,level.spawnmaxs); + level.aplanted = 0; + level.bplanted = 0; + setmapcenter(level.mapcenter); + maps\mp\gametypes\_rank::registerscoreinfo("win",2); + maps\mp\gametypes\_rank::registerscoreinfo("loss",1); + maps\mp\gametypes\_rank::registerscoreinfo("tie",1.5); + maps\mp\gametypes\_rank::registerscoreinfo("kill",50); + maps\mp\gametypes\_rank::registerscoreinfo("headshot",50); + maps\mp\gametypes\_rank::registerscoreinfo("assist",20); + maps\mp\gametypes\_rank::registerscoreinfo("plant",100); + maps\mp\gametypes\_rank::registerscoreinfo("defuse",100); + thread updategametypedvars(); + thread func_3A69(); + var_02 = maps\mp\_utility::getwatcheddvar("winlimit"); + var_03[0] = "dd"; + maps\mp\gametypes\_gameobjects::main(var_7B); + thread func_3962(); +} + +//Function Number: 5 +func_3A69() +{ + level endon("game_end"); + for(;;) + { + if(level.ingraceperiod == 0) + { + break; + } + + wait 0.05; + } + + level.usestartspawns = 0; +} + +//Function Number: 6 +getspawnpoint() +{ + var_00 = self.pers["team"]; + if(level.usestartspawns) + { + if(var_00 == game["attackers"]) + { + var_01 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random(level.spawn_attackers_start); + } + else + { + var_01 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random(level.spawn_defenders_start); + } + } + else if(var_01 == game["attackers"]) + { + if(maps\mp\_utility::inovertime()) + { + var_02 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints(var_01); + } + else if(!level.aplanted && !level.bplanted) + { + var_02 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints(var_02); + } + else if(level.aplanted && !level.bplanted) + { + var_02 = level.spawn_attackers_a; + } + else if(level.bplanted && !level.aplanted) + { + var_02 = level.spawn_attackers_b; + } + else + { + var_02 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints(var_02); + } + + var_01 = maps\mp\gametypes\_spawnlogic::getspawnpoint_nearteam(var_02); + } + else + { + if(maps\mp\_utility::inovertime()) + { + var_02 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints(var_02); + } + else if(!level.aplanted && !level.bplanted) + { + var_02 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints(var_02); + } + else if(level.aplanted && !level.bplanted) + { + var_02 = level.spawn_defenders_a; + } + else if(level.bplanted && !level.aplanted) + { + var_02 = level.spawn_defenders_b; + } + else + { + var_02 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints(var_02); + } + + var_01 = maps\mp\gametypes\_spawnlogic::getspawnpoint_nearteam(var_02); + } + + return var_01; +} + +//Function Number: 7 +onspawnplayer() +{ + if(maps\mp\_utility::inovertime() || self.pers["team"] == game["attackers"]) + { + self.isplanting = 0; + self.isdefusing = 0; + self.isbombcarrier = 1; + if(level.splitscreen) + { + self.carryicon = maps\mp\gametypes\_hud_util::createicon("hud_suitcase_bomb",33,33); + self.carryicon maps\mp\gametypes\_hud_util::setpoint("BOTTOM RIGHT","BOTTOM RIGHT",-50,-78); + self.carryicon.alpha = 0.75; + } + else + { + self.carryicon = maps\mp\gametypes\_hud_util::createicon("hud_suitcase_bomb",50,50); + self.carryicon maps\mp\gametypes\_hud_util::setpoint("BOTTOM RIGHT","BOTTOM RIGHT",-50,-65); + self.carryicon.alpha = 0.75; + } + + self.carryicon.hidewheninmenu = 1; + thread hidecarryiconongameend(); + } + else + { + self.isplanting = 0; + self.isdefusing = 0; + self.isbombcarrier = 0; + if(isdefined(self.carryicon)) + { + self.carryicon destroy(); + } + } + + level notify("spawned_player"); +} + +//Function Number: 8 +hidecarryiconongameend() +{ + self endon("disconnect"); + level waittill("game_ended"); + if(isdefined(self.carryicon)) + { + self.carryicon.alpha = 0; + } +} + +//Function Number: 9 +func_3A6A(param_00,param_01) +{ + if(param_00 == "tie") + { + level.finalkillcam_winner = "none"; + } + else + { + level.finalkillcam_winner = param_00; + } + + thread maps\mp\gametypes\_gamelogic::endgame(param_00,param_01); +} + +//Function Number: 10 +ondeadevent(param_00) +{ + if(level.bombexploded || level.bombdefused) + { + return; + } + + if(param_00 == "all") + { + if(level.bombplanted) + { + func_3A6A(game["attackers"],game["strings"][game["defenders"] + "_eliminated"]); + return; + } + + func_3A6A(game["defenders"],game["strings"][game["attackers"] + "_eliminated"]); + return; + } + + if(param_00 == game["attackers"]) + { + if(level.bombplanted) + { + return; + } + + level thread func_3A6A(game["defenders"],game["strings"][game["attackers"] + "_eliminated"]); + return; + } + + if(param_00 == game["defenders"]) + { + level thread func_3A6A(game["attackers"],game["strings"][game["defenders"] + "_eliminated"]); + return; + } +} + +//Function Number: 11 +onnormaldeath(param_00,param_01,param_02) +{ + var_03 = maps\mp\gametypes\_rank::getscoreinfovalue("kill"); + var_04 = param_00.team; + if(game["state"] == "postgame" && param_00.team == game["defenders"] || !level.bombplanted) + { + param_01.finalkill = 1; + } + + if(param_00.isplanting) + { + thread maps\mp\_matchdata::logkillevent(param_02,"planting"); + param_01 maps\mp\_utility::incpersstat("defends",1); + param_01 maps\mp\gametypes\_persistance::statsetchild("round","defends",param_01.pers["defends"]); + return; + } + + if(param_00.isdefusing) + { + thread maps\mp\_matchdata::logkillevent(param_02,"defusing"); + param_01 maps\mp\_utility::incpersstat("defends",1); + param_01 maps\mp\gametypes\_persistance::statsetchild("round","defends",param_01.pers["defends"]); + } +} + +//Function Number: 12 +ontimelimit() +{ + if(maps\mp\_utility::inovertime()) + { + func_3A6A("tie",game["strings"]["time_limit_reached"]); + return; + } + + func_3A6A(game["defenders"],game["strings"]["time_limit_reached"]); +} + +//Function Number: 13 +updategametypedvars() +{ + level.planttime = maps\mp\_utility::dvarfloatvalue("planttime",5,0,20); + level.defusetime = maps\mp\_utility::dvarfloatvalue("defusetime",5,0,20); + level.bombtimer = maps\mp\_utility::dvarintvalue("bombtimer",45,1,300); + level.ddtimetoadd = maps\mp\_utility::dvarfloatvalue("addtime",2,0,5); +} + +//Function Number: 14 +func_3A6B(param_00) +{ + var_01 = ""; + if(param_00.size != 3) + { + var_02 = 0; + var_03 = 0; + var_04 = 0; + foreach(var_06 in param_00) + { + if(issubstr(tolower(var_06.script_label),"a")) + { + var_02 = 1; + continue; + } + + if(issubstr(tolower(var_06.script_label),"b")) + { + var_03 = 1; + continue; + } + + if(issubstr(tolower(var_06.script_label),"c")) + { + var_04 = 1; + } + } + + if(!var_02) + { + var_01 = var_01 + " A "; + } + + if(!var_03) + { + var_01 = var_01 + " B "; + } + + if(!var_04) + { + var_01 = var_01 + " C "; + } + } + + if(var_01 != "") + { + } +} + +//Function Number: 15 +func_3962() +{ + level.bombplanted = 0; + level.bombdefused = 0; + level.bombexploded = 0; + level.bombzones = []; + var_00 = getentarray("dd_bombzone","targetname"); + func_3A6B(var_00); + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + var_02 = var_00[var_01]; + var_03 = getentarray(var_00[var_01].target,"targetname"); + var_04 = var_00[var_01].script_label; + var_05 = getent("dd_bombzone_clip" + var_04,"targetname"); + if(maps\mp\_utility::inovertime()) + { + if(var_04 == "_a" || var_04 == "_b") + { + var_02 delete(); + var_03[0] delete(); + var_05 delete(); + continue; + } + + var_06 = maps\mp\gametypes\_gameobjects::createuseobject("neutral",var_02,var_03,(0,0,64)); + var_06 maps\mp\gametypes\_gameobjects::allowuse("any"); + } + else + { + if(var_04 == "_c") + { + var_02 delete(); + var_03[0] delete(); + var_05 delete(); + continue; + } + + var_06 = maps\mp\gametypes\_gameobjects::createuseobject(game["defenders"],var_02,var_03,(0,0,64)); + var_06 maps\mp\gametypes\_gameobjects::allowuse("enemy"); + } + + var_06 maps\mp\gametypes\_gameobjects::setusetime(level.planttime); + var_06 maps\mp\gametypes\_gameobjects::setusetext(&"MP_PLANTING_EXPLOSIVE"); + var_06 maps\mp\gametypes\_gameobjects::setusehinttext(&"PLATFORM_HOLD_TO_PLANT_EXPLOSIVES"); + var_06 maps\mp\gametypes\_gameobjects::setkeyobject(level.ddbomb); + if(maps\mp\_utility::inovertime()) + { + var_04 = "_a"; + } + + var_06.label = var_04; + var_06.index = var_01; + if(maps\mp\_utility::inovertime()) + { + var_06 maps\mp\gametypes\_gameobjects::set2dicon("friendly","waypoint_target"); + var_06 maps\mp\gametypes\_gameobjects::set3dicon("friendly","waypoint_target"); + var_06 maps\mp\gametypes\_gameobjects::set2dicon("enemy","waypoint_target"); + var_06 maps\mp\gametypes\_gameobjects::set3dicon("enemy","waypoint_target"); + } + else + { + var_06 maps\mp\gametypes\_gameobjects::set2dicon("friendly","waypoint_defend" + var_04); + var_06 maps\mp\gametypes\_gameobjects::set3dicon("friendly","waypoint_defend" + var_04); + var_06 maps\mp\gametypes\_gameobjects::set2dicon("enemy","waypoint_target" + var_04); + var_06 maps\mp\gametypes\_gameobjects::set3dicon("enemy","waypoint_target" + var_04); + } + + var_06 maps\mp\gametypes\_gameobjects::setvisibleteam("any"); + var_06.onbeginuse = ::onbeginuse; + var_06.onenduse = ::onenduse; + var_06.onuse = ::func_3A6D; + var_06.oncantuse = ::oncantuse; + var_06.useweapon = "briefcase_bomb_mp"; + var_06.bombplanted = 0; + var_06.visuals[0] thread func_3967(); + for(var_07 = 0;var_07 < var_03.size;var_07++) + { + if(isdefined(var_03[var_07].script_exploder)) + { + var_06.exploderindex = var_03[var_07].script_exploder; + break; + } + } + + level.bombzones[level.bombzones.size] = var_06; + var_06.bombdefusetrig = getent(var_03[0].target,"targetname"); + var_06.bombdefusetrig.origin = var_06.bombdefusetrig.origin + (0,0,-10000); + var_06.bombdefusetrig.label = var_04; + } + + for(var_01 = 0;var_01 < level.bombzones.size;var_01++) + { + var_08 = []; + for(var_09 = 0;var_09 < level.bombzones.size;var_09++) + { + if(var_09 != var_01) + { + var_08[var_08.size] = level.bombzones[var_09]; + } + } + + level.bombzones[var_01].otherbombzones = var_08; + } +} + +//Function Number: 16 +func_3967() +{ + var_00 = spawn("script_origin",self.origin); + var_00.angles = self.angles; + var_00 rotateyaw(-45,0.05); + wait 0.05; + var_01 = self.origin + (0,0,5); + var_02 = self.origin + anglestoforward(var_00.angles) * 100 + (0,0,128); + var_03 = bullettrace(var_01,var_02,0,self); + self.killcament = spawn("script_model",var_03["position"]); + self.killcament setscriptmoverkillcam("explosive"); + var_00 delete(); +} + +//Function Number: 17 +func_3A6D(param_00) +{ + var_01 = param_00.pers["team"]; + var_02 = level.otherteam[var_01]; + if((maps\mp\_utility::inovertime() && self.bombplanted == 0) || !maps\mp\_utility::inovertime() && !maps\mp\gametypes\_gameobjects::isfriendlyteam(param_00.pers["team"])) + { + self.bombplanted = 1; + param_00 notify("bomb_planted"); + param_00 playsound("mp_bomb_plant"); + thread maps\mp\_utility::teamplayercardsplash("callout_bombplanted",param_00); + param_00 notify("objective","plant"); + maps\mp\_utility::leaderdialog("bomb_planted"); + param_00 thread maps\mp\gametypes\_hud_message::splashnotify("plant",maps\mp\gametypes\_rank::getscoreinfovalue("plant")); + param_00 thread maps\mp\gametypes\_rank::giverankxp("plant"); + lib_036E::func_2B7B("plant",param_00); + param_00 maps\mp\_utility::incplayerstat("bombsplanted",1); + param_00 thread maps\mp\_matchdata::loggameevent("plant",param_00.origin); + param_00.bombplantedtime = gettime(); + param_00 maps\mp\_utility::incpersstat("plants",1); + param_00 maps\mp\gametypes\_persistance::statsetchild("round","plants",param_00.pers["plants"]); + level thread bombplanted(self,param_00); + level.bombowner = param_00; + self.useweapon = "briefcase_bomb_defuse_mp"; + return; + } + + self.bombplanted = 0; + thread func_3A72(param_00,"defused"); + param_00 notify("objective","defuse"); +} + +//Function Number: 18 +func_3A6E() +{ + if(maps\mp\_utility::inovertime()) + { + maps\mp\gametypes\_gameobjects::setownerteam("neutral"); + maps\mp\gametypes\_gameobjects::allowuse("any"); + var_00 = "waypoint_target"; + var_01 = "waypoint_target"; + } + else + { + maps\mp\gametypes\_gameobjects::allowuse("enemy"); + var_00 = "waypoint_defend" + self.label; + var_01 = "waypoint_target" + self.label; + } + + maps\mp\gametypes\_gameobjects::setusetime(level.planttime); + maps\mp\gametypes\_gameobjects::setusetext(&"MP_PLANTING_EXPLOSIVE"); + maps\mp\gametypes\_gameobjects::setusehinttext(&"PLATFORM_HOLD_TO_PLANT_EXPLOSIVES"); + maps\mp\gametypes\_gameobjects::setkeyobject(level.ddbomb); + maps\mp\gametypes\_gameobjects::set2dicon("friendly",var_00); + maps\mp\gametypes\_gameobjects::set3dicon("friendly",var_00); + maps\mp\gametypes\_gameobjects::set2dicon("enemy",var_01); + maps\mp\gametypes\_gameobjects::set3dicon("enemy",var_01); + maps\mp\gametypes\_gameobjects::setvisibleteam("any"); + self.useweapon = "briefcase_bomb_mp"; +} + +//Function Number: 19 +func_3988() +{ + if(maps\mp\_utility::inovertime()) + { + var_00 = "waypoint_defuse"; + var_01 = "waypoint_defend"; + } + else + { + var_00 = "waypoint_defuse" + self.label; + var_01 = "waypoint_defend" + self.label; + } + + maps\mp\gametypes\_gameobjects::allowuse("friendly"); + maps\mp\gametypes\_gameobjects::setusetime(level.defusetime); + maps\mp\gametypes\_gameobjects::setusetext(&"MP_DEFUSING_EXPLOSIVE"); + maps\mp\gametypes\_gameobjects::setusehinttext(&"PLATFORM_HOLD_TO_DEFUSE_EXPLOSIVES"); + maps\mp\gametypes\_gameobjects::setkeyobject(undefined); + maps\mp\gametypes\_gameobjects::set2dicon("friendly",var_00); + maps\mp\gametypes\_gameobjects::set3dicon("friendly",var_00); + maps\mp\gametypes\_gameobjects::set2dicon("enemy",var_01); + maps\mp\gametypes\_gameobjects::set3dicon("enemy",var_01); + maps\mp\gametypes\_gameobjects::setvisibleteam("any"); +} + +//Function Number: 20 +onbeginuse(param_00) +{ + if((maps\mp\_utility::inovertime() && self.bombplanted == 1) || !maps\mp\_utility::inovertime() && maps\mp\gametypes\_gameobjects::isfriendlyteam(param_00.pers["team"])) + { + param_00 playsound("mp_bomb_defuse"); + param_00.isdefusing = 1; + var_01 = 9000000; + var_02 = undefined; + if(isdefined(level.ddbombmodel)) + { + foreach(var_04 in level.ddbombmodel) + { + if(!isdefined(var_04)) + { + continue; + } + + var_05 = distancesquared(param_00.origin,var_04.origin); + if(var_05 < var_01) + { + var_01 = var_05; + var_02 = var_04; + } + } + + param_00.defusing = var_02; + var_02 hide(); + return; + } + + return; + } + + var_04.isplanting = 1; +} + +//Function Number: 21 +onenduse(param_00,param_01,param_02) +{ + if(!isdefined(param_01)) + { + return; + } + + if(param_01.isdefusing) + { + if(isdefined(param_01.defusing) && !param_02) + { + param_01.defusing show(); + } + } + + if(isalive(param_01)) + { + param_01.isdefusing = 0; + param_01.isplanting = 0; + } +} + +//Function Number: 22 +oncantuse(param_00) +{ + param_00 iprintlnbold(&"MP_BOMBSITE_IN_USE"); +} + +//Function Number: 23 +onreset() +{ +} + +//Function Number: 24 +bombplanted(param_00,param_01) +{ + param_00 endon("defused"); + var_02 = param_01.team; + level.bombsplanted = level.bombsplanted + 1; + func_3A75(); + maps\mp\gametypes\_gamelogic::pausetimer(); + level.timepausestart = gettime(); + level.timelimitoverride = 1; + level.bombplanted = 1; + level.destroyedobject = param_00; + if(level.destroyedobject.label == "_a") + { + level.aplanted = 1; + } + else + { + level.bplanted = 1; + } + + level.destroyedobject.bombplanted = 1; + param_00.visuals[0] thread func_3A73(param_00); + level.tickingobject = param_00.visuals[0]; + func_3A76(param_01,param_00.label); + param_00.bombdefused = 0; + param_00 maps\mp\gametypes\_gameobjects::allowuse("none"); + param_00 maps\mp\gametypes\_gameobjects::setvisibleteam("none"); + if(maps\mp\_utility::inovertime()) + { + param_00 maps\mp\gametypes\_gameobjects::setownerteam(level.otherteam[param_01.team]); + } + + param_00 func_3988(); + param_00 func_3970(param_00); + param_00 thread func_3A72(param_01,"explode",var_02); +} + +//Function Number: 25 +func_3A72(param_00,param_01,param_02) +{ + self.visuals[0] notify("stopTicking"); + level.bombsplanted = level.bombsplanted - 1; + if(self.label == "_a") + { + level.aplanted = 0; + } + else + { + level.bplanted = 0; + } + + func_3A77(); + func_3A75(); + setdvar("ui_bombtimer" + self.label,-1); + if(level.gameended) + { + return; + } + + if(param_01 == "explode") + { + level notify("bomb_exploded" + self.label); + level.bombexploded = level.bombexploded + 1; + var_03 = self.curorigin; + level.ddbombmodel[self.label] delete(); + if(isdefined(param_00)) + { + self.visuals[0] radiusdamage(var_03,512,200,20,param_00,"MOD_EXPLOSIVE","bomb_site_mp"); + param_00 maps\mp\_utility::incplayerstat("targetsdestroyed",1); + param_00 maps\mp\_utility::incpersstat("destructions",1); + param_00 maps\mp\gametypes\_persistance::statsetchild("round","destructions",param_00.pers["destructions"]); + } + else + { + self.visuals[0] radiusdamage(var_03,512,200,20,undefined,"MOD_EXPLOSIVE","bomb_site_mp"); + } + + var_04 = randomfloat(360); + var_05 = spawnfx(level._effect["bombexplosion"],var_03 + (0,0,50),(0,0,1),(cos(var_04),sin(var_04),0)); + triggerfx(var_05); + playrumbleonposition("grenade_rumble",var_03); + earthquake(0.75,2,var_03,2000); + thread maps\mp\_utility::playsoundinspace("exp_suitcase_bomb_main",var_03); + if(isdefined(self.exploderindex)) + { + common_scripts\utility::exploder(self.exploderindex); + } + + maps\mp\gametypes\_gameobjects::disableobject(); + if(!maps\mp\_utility::inovertime() && level.bombexploded < 2) + { + foreach(var_07 in level.players) + { + var_07 thread maps\mp\gametypes\_hud_message::splashnotify("time_added"); + } + } + + wait 2; + if(maps\mp\_utility::inovertime() || level.bombexploded > 1) + { + func_3A6A(param_02,game["strings"]["target_destroyed"]); + return; + } + + level thread maps\mp\_utility::teamplayercardsplash("callout_time_added",param_00); + return; + } + + param_00 notify("bomb_defused"); + self notify("defused"); + maps\mp\_utility::leaderdialog("bomb_defused"); + level thread maps\mp\_utility::teamplayercardsplash("callout_bombdefused",param_00); + level thread bombdefused(self); + func_3A6E(); + if(isdefined(level.bombowner) && level.bombowner.bombplantedtime + 4000 + level.defusetime * 1000 > gettime() && maps\mp\_utility::isreallyalive(level.bombowner)) + { + param_00 thread maps\mp\gametypes\_hud_message::splashnotify("ninja_defuse",maps\mp\gametypes\_rank::getscoreinfovalue("defuse")); + } + else + { + param_00 thread maps\mp\gametypes\_hud_message::splashnotify("defuse",maps\mp\gametypes\_rank::getscoreinfovalue("defuse")); + } + + param_00 thread maps\mp\gametypes\_rank::giverankxp("defuse"); + lib_036E::func_2B7B("defuse",param_00); + param_00 maps\mp\_utility::incplayerstat("bombsdefused",1); + param_00 maps\mp\_utility::incpersstat("defuses",1); + param_00 maps\mp\gametypes\_persistance::statsetchild("round","defuses",param_00.pers["defuses"]); + param_00 thread maps\mp\_matchdata::loggameevent("defuse",param_00.origin); +} + +//Function Number: 26 +func_3A73(param_00) +{ + self endon("death"); + self endon("stopTicking"); + level endon("game_ended"); + for(;;) + { + self playsound("ui_mp_suitcasebomb_timer"); + if(!isdefined(param_00.waittime) || param_00.waittime > 10) + { + wait 1; + } + else if(isdefined(param_00.waittime) && param_00.waittime > 5) + { + wait 0.5; + } + else + { + wait 0.25; + } + + maps\mp\gametypes\_hostmigration::waittillhostmigrationdone(); + } +} + +//Function Number: 27 +func_3A75() +{ + if(level.bombsplanted == 1) + { + setdvar("ui_bomb_timer",2); + return; + } + + if(level.bombsplanted == 2) + { + setdvar("ui_bomb_timer",3); + return; + } + + setdvar("ui_bomb_timer",0); +} + +//Function Number: 28 +func_3A76(param_00,param_01) +{ + var_02 = bullettrace(param_00.origin + (0,0,20),param_00.origin - (0,0,2000),0,param_00); + var_03 = randomfloat(360); + var_04 = (cos(var_03),sin(var_03),0); + var_04 = vectornormalize(var_04 - var_02["normal"] * vectordot(var_04,var_02["normal"])); + var_05 = vectortoangles(var_04); + level.ddbombmodel[param_01] = spawn("script_model",var_02["position"]); + level.ddbombmodel[param_01].angles = var_05; + level.ddbombmodel[param_01] setmodel("prop_suitcase_bomb"); +} + +//Function Number: 29 +func_3A77() +{ + if(level.bombsplanted <= 0) + { + maps\mp\gametypes\_gamelogic::resumetimer(); + level.timepaused = gettime() - level.timepausestart; + level.timelimitoverride = 0; + } +} + +//Function Number: 30 +func_3970(param_00) +{ + level endon("game_ended"); + level endon("bomb_defused" + param_00.label); + if(maps\mp\_utility::inovertime()) + { + param_00.waittime = level.bombtimer; + } + else + { + param_00.waittime = level.bombtimer; + } + + level thread update_ui_timers(param_00); + while(param_00.waittime >= 0) + { + param_00.waittime--; + if(param_00.waittime >= 0) + { + wait 1; + } + + maps\mp\gametypes\_hostmigration::waittillhostmigrationdone(); + } +} + +//Function Number: 31 +update_ui_timers(param_00) +{ + level endon("game_ended"); + level endon("disconnect"); + level endon("bomb_defused" + param_00.label); + level endon("bomb_exploded" + param_00.label); + var_01 = param_00.waittime * 1000 + gettime(); + setdvar("ui_bombtimer" + param_00.label,var_01); + level waittill("host_migration_begin"); + var_02 = maps\mp\gametypes\_hostmigration::waittillhostmigrationdone(); + if(var_02 > 0) + { + setdvar("ui_bombtimer" + param_00.label,var_01 + var_02); + } +} + +//Function Number: 32 +bombdefused(param_00) +{ + level.tickingobject maps\mp\gametypes\_gamelogic::stoptickingsound(); + param_00.bombdefused = 1; + func_3A75(); + setdvar("ui_bombtimer" + param_00.label,-1); + level notify("bomb_defused" + param_00.label); +} + +//Function Number: 33 +initgametypeawards() +{ + maps\mp\_awards::initstataward("targetsdestroyed",0,::maps\mp\_awards::highestwins); + maps\mp\_awards::initstataward("bombsplanted",0,::maps\mp\_awards::highestwins); + maps\mp\_awards::initstataward("bombsdefused",0,::maps\mp\_awards::highestwins); + maps\mp\_awards::initstataward("bombcarrierkills",0,::maps\mp\_awards::highestwins); + maps\mp\_awards::initstataward("bombscarried",0,::maps\mp\_awards::highestwins); + maps\mp\_awards::initstataward("killsasbombcarrier",0,::maps\mp\_awards::highestwins); +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/gametypes/dm.gsc b/MW3/PC/MP/maps/mp/gametypes/dm.gsc new file mode 100644 index 0000000..232c95d --- /dev/null +++ b/MW3/PC/MP/maps/mp/gametypes/dm.gsc @@ -0,0 +1,141 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\dm.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 5 + * Decompile Time: 71 ms + * Timestamp: 10/27/2023 2:13:12 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + maps\mp\gametypes\_globallogic::init(); + maps\mp\gametypes\_callbacksetup::setupcallbacks(); + maps\mp\gametypes\_globallogic::setupcallbacks(); + if(isusingmatchrulesdata()) + { + level.initializematchrules = ::initializematchrules; + [[ level.initializematchrules ]](); + level thread maps\mp\_utility::reinitializematchrulesonmigration(); + } + else + { + maps\mp\_utility::registertimelimitdvar(level.gametype,10); + maps\mp\_utility::registerscorelimitdvar(level.gametype,1000); + maps\mp\_utility::registerwinlimitdvar(level.gametype,1); + maps\mp\_utility::registerroundlimitdvar(level.gametype,1); + maps\mp\_utility::registernumlivesdvar(level.gametype,0); + maps\mp\_utility::registerhalftimedvar(level.gametype,0); + level.matchrules_damagemultiplier = 0; + level.matchrules_vampirism = 0; + } + + level.onstartgametype = ::onstartgametype; + level.getspawnpoint = ::getspawnpoint; + level.onnormaldeath = ::onnormaldeath; + if(level.matchrules_damagemultiplier || level.matchrules_vampirism) + { + level.modifyplayerdamage = ::maps\mp\gametypes\_damage::gamemodemodifyplayerdamage; + } + + game["dialog"]["gametype"] = "freeforall"; + if(getdvarint("g_hardcore")) + { + game["dialog"]["gametype"] = "hc_" + game["dialog"]["gametype"]; + return; + } + + if(getdvarint("camera_thirdPerson")) + { + game["dialog"]["gametype"] = "thirdp_" + game["dialog"]["gametype"]; + return; + } + + if(getdvarint("scr_diehard")) + { + game["dialog"]["gametype"] = "dh_" + game["dialog"]["gametype"]; + return; + } + + if(getdvarint("scr_" + level.gametype + "_promode")) + { + game["dialog"]["gametype"] = game["dialog"]["gametype"] + "_pro"; + return; + } +} + +//Function Number: 2 +initializematchrules() +{ + maps\mp\_utility::setcommonrulesfrommatchrulesdata(1); + setdynamicdvar("scr_dm_winlimit",1); + maps\mp\_utility::registerwinlimitdvar("dm",1); + setdynamicdvar("scr_dm_roundlimit",1); + maps\mp\_utility::registerroundlimitdvar("dm",1); + setdynamicdvar("scr_dm_halftime",0); + maps\mp\_utility::registerhalftimedvar("dm",0); +} + +//Function Number: 3 +onstartgametype() +{ + setclientnamemode("auto_change"); + maps\mp\_utility::setobjectivetext("allies",&"OBJECTIVES_DM"); + maps\mp\_utility::setobjectivetext("axis",&"OBJECTIVES_DM"); + if(level.splitscreen) + { + maps\mp\_utility::setobjectivescoretext("allies",&"OBJECTIVES_DM"); + maps\mp\_utility::setobjectivescoretext("axis",&"OBJECTIVES_DM"); + } + else + { + maps\mp\_utility::setobjectivescoretext("allies",&"OBJECTIVES_DM_SCORE"); + maps\mp\_utility::setobjectivescoretext("axis",&"OBJECTIVES_DM_SCORE"); + } + + maps\mp\_utility::setobjectivehinttext("allies",&"OBJECTIVES_DM_HINT"); + maps\mp\_utility::setobjectivehinttext("axis",&"OBJECTIVES_DM_HINT"); + level.spawnmins = (0,0,0); + level.spawnmaxs = (0,0,0); + maps\mp\gametypes\_spawnlogic::addspawnpoints("allies","mp_dm_spawn"); + maps\mp\gametypes\_spawnlogic::addspawnpoints("axis","mp_dm_spawn"); + level.mapcenter = maps\mp\gametypes\_spawnlogic::findboxcenter(level.spawnmins,level.spawnmaxs); + setmapcenter(level.mapcenter); + var_00[0] = "dm"; + maps\mp\gametypes\_gameobjects::main(var_00); + maps\mp\gametypes\_rank::registerscoreinfo("kill",50); + maps\mp\gametypes\_rank::registerscoreinfo("headshot",50); + maps\mp\gametypes\_rank::registerscoreinfo("assist",10); + maps\mp\gametypes\_rank::registerscoreinfo("suicide",0); + maps\mp\gametypes\_rank::registerscoreinfo("teamkill",0); + level.quickmessagetoall = 1; +} + +//Function Number: 4 +getspawnpoint() +{ + var_00 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints(self.pers["team"]); + var_01 = maps\mp\gametypes\_spawnlogic::getspawnpoint_dm(var_00); + return var_01; +} + +//Function Number: 5 +onnormaldeath(param_00,param_01,param_02) +{ + var_03 = maps\mp\gametypes\_rank::getscoreinfovalue("kill"); + var_04 = 0; + foreach(var_06 in level.players) + { + if(isdefined(var_06.score) && var_06.score > var_04) + { + var_04 = var_06.score; + } + } + + if(game["state"] == "postgame" && param_01.score >= var_04) + { + param_01.finalkill = 1; + } +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/gametypes/dom.gsc b/MW3/PC/MP/maps/mp/gametypes/dom.gsc new file mode 100644 index 0000000..f28da37 --- /dev/null +++ b/MW3/PC/MP/maps/mp/gametypes/dom.gsc @@ -0,0 +1,953 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\dom.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 31 + * Decompile Time: 484 ms + * Timestamp: 10/27/2023 2:13:14 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(getdvar("mapname") == "mp_background") + { + return; + } + + maps\mp\gametypes\_globallogic::init(); + maps\mp\gametypes\_callbacksetup::setupcallbacks(); + maps\mp\gametypes\_globallogic::setupcallbacks(); + if(isusingmatchrulesdata()) + { + level.initializematchrules = ::initializematchrules; + [[ level.initializematchrules ]](); + level thread maps\mp\_utility::reinitializematchrulesonmigration(); + } + else + { + maps\mp\_utility::registertimelimitdvar(level.gametype,30); + maps\mp\_utility::registerscorelimitdvar(level.gametype,300); + maps\mp\_utility::registerroundlimitdvar(level.gametype,1); + maps\mp\_utility::registerwinlimitdvar(level.gametype,1); + maps\mp\_utility::registernumlivesdvar(level.gametype,0); + maps\mp\_utility::registerhalftimedvar(level.gametype,0); + level.matchrules_damagemultiplier = 0; + level.matchrules_vampirism = 0; + } + + level.teambased = 1; + level.onstartgametype = ::onstartgametype; + level.getspawnpoint = ::getspawnpoint; + level.onplayerkilled = ::onplayerkilled; + level.onprecachegametype = ::onprecachegametype; + level.initgametypeawards = ::initgametypeawards; + level.onspawnplayer = ::onspawnplayer; + if(level.matchrules_damagemultiplier || level.matchrules_vampirism) + { + level.modifyplayerdamage = ::maps\mp\gametypes\_damage::gamemodemodifyplayerdamage; + } + + game["dialog"]["gametype"] = "domination"; + if(getdvarint("g_hardcore")) + { + game["dialog"]["gametype"] = "hc_" + game["dialog"]["gametype"]; + } + else if(getdvarint("camera_thirdPerson")) + { + game["dialog"]["gametype"] = "thirdp_" + game["dialog"]["gametype"]; + } + else if(getdvarint("scr_diehard")) + { + game["dialog"]["gametype"] = "dh_" + game["dialog"]["gametype"]; + } + else if(getdvarint("scr_" + level.gametype + "_promode")) + { + game["dialog"]["gametype"] = game["dialog"]["gametype"] + "_pro"; + } + + game["dialog"]["offense_obj"] = "capture_objs"; + game["dialog"]["defense_obj"] = "capture_objs"; +} + +//Function Number: 2 +initializematchrules() +{ + maps\mp\_utility::setcommonrulesfrommatchrulesdata(); + setdynamicdvar("scr_dom_roundlimit",1); + maps\mp\_utility::registerroundlimitdvar("dom",1); + setdynamicdvar("scr_dom_winlimit",1); + maps\mp\_utility::registerwinlimitdvar("dom",1); + setdynamicdvar("scr_dom_halftime",0); + maps\mp\_utility::registerhalftimedvar("dom",0); + setdynamicdvar("scr_dom_promode",0); +} + +//Function Number: 3 +onprecachegametype() +{ + precacheshader("waypoint_captureneutral"); + precacheshader("waypoint_capture"); + precacheshader("waypoint_defend"); + precacheshader("waypoint_captureneutral_a"); + precacheshader("waypoint_capture_a"); + precacheshader("waypoint_defend_a"); + precacheshader("waypoint_captureneutral_b"); + precacheshader("waypoint_capture_b"); + precacheshader("waypoint_defend_b"); + precacheshader("waypoint_captureneutral_c"); + precacheshader("waypoint_capture_c"); + precacheshader("waypoint_defend_c"); + precacheshader("waypoint_captureneutral"); + precacheshader("waypoint_capture"); + precacheshader("waypoint_defend"); + precacheshader("waypoint_captureneutral_a"); + precacheshader("waypoint_capture_a"); + precacheshader("waypoint_defend_a"); + precacheshader("waypoint_captureneutral_b"); + precacheshader("waypoint_capture_b"); + precacheshader("waypoint_defend_b"); + precacheshader("waypoint_captureneutral_c"); + precacheshader("waypoint_capture_c"); + precacheshader("waypoint_defend_c"); +} + +//Function Number: 4 +onstartgametype() +{ + maps\mp\_utility::setobjectivetext("allies",&"OBJECTIVES_DOM"); + maps\mp\_utility::setobjectivetext("axis",&"OBJECTIVES_DOM"); + if(level.splitscreen) + { + maps\mp\_utility::setobjectivescoretext("allies",&"OBJECTIVES_DOM"); + maps\mp\_utility::setobjectivescoretext("axis",&"OBJECTIVES_DOM"); + } + else + { + maps\mp\_utility::setobjectivescoretext("allies",&"OBJECTIVES_DOM_SCORE"); + maps\mp\_utility::setobjectivescoretext("axis",&"OBJECTIVES_DOM_SCORE"); + } + + maps\mp\_utility::setobjectivehinttext("allies",&"OBJECTIVES_DOM_HINT"); + maps\mp\_utility::setobjectivehinttext("axis",&"OBJECTIVES_DOM_HINT"); + setclientnamemode("auto_change"); + level.spawnmins = (0,0,0); + level.spawnmaxs = (0,0,0); + maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_dom_spawn_allies_start"); + maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_dom_spawn_axis_start"); + maps\mp\gametypes\_spawnlogic::addspawnpoints("allies","mp_dom_spawn"); + maps\mp\gametypes\_spawnlogic::addspawnpoints("axis","mp_dom_spawn"); + level.mapcenter = maps\mp\gametypes\_spawnlogic::findboxcenter(level.spawnmins,level.spawnmaxs); + setmapcenter(level.mapcenter); + level.spawn_all = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_dom_spawn"); + level.spawn_axis_start = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_dom_spawn_axis_start"); + level.spawn_allies_start = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_dom_spawn_allies_start"); + level.startpos["allies"] = level.spawn_allies_start[0].origin; + level.startpos["axis"] = level.spawn_axis_start[0].origin; + level.flagbasefxid["allies"] = loadfx(maps\mp\gametypes\_teams::getteamflagfx("allies")); + level.flagbasefxid["axis"] = loadfx(maps\mp\gametypes\_teams::getteamflagfx("axis")); + var_00[0] = "dom"; + maps\mp\gametypes\_gameobjects::main(var_00); + maps\mp\gametypes\_rank::registerscoreinfo("kill",50); + maps\mp\gametypes\_rank::registerscoreinfo("headshot",50); + maps\mp\gametypes\_rank::registerscoreinfo("assist",10); + maps\mp\gametypes\_rank::registerscoreinfo("capture",150); + maps\mp\gametypes\_rank::registerscoreinfo("defend",50); + maps\mp\gametypes\_rank::registerscoreinfo("defend_assist",10); + maps\mp\gametypes\_rank::registerscoreinfo("assault",50); + maps\mp\gametypes\_rank::registerscoreinfo("assault_assist",10); + thread domflags(); + thread func_3947(); +} + +//Function Number: 5 +getspawnpoint() +{ + var_00 = undefined; + if(!level.usestartspawns) + { + var_01 = 0; + var_02 = 0; + var_03 = self.pers["team"]; + var_04 = maps\mp\_utility::getotherteam(var_03); + for(var_05 = 0;var_05 < level.flags.size;var_05++) + { + var_06 = level.flags[var_05] func_394A(); + if(var_06 == var_03) + { + var_01++; + continue; + } + + if(var_06 == var_04) + { + var_02++; + } + } + + if(var_01 == level.flags.size) + { + var_07 = level.bestspawnflag[maps\mp\_utility::getotherteam(self.pers["team"])]; + var_00 = maps\mp\gametypes\_spawnlogic::getspawnpoint_nearteam(level.spawn_all,func_394D(var_07)); + } + else if(var_01 > 0) + { + var_00 = maps\mp\gametypes\_spawnlogic::getspawnpoint_nearteam(level.spawn_all,func_394C(var_03)); + } + else + { + var_08 = undefined; + if(var_02 > 0 && var_02 < level.flags.size) + { + var_08 = func_393E(var_03); + } + + if(!isdefined(var_08)) + { + var_08 = level.bestspawnflag[self.pers["team"]]; + } + + level.bestspawnflag[self.pers["team"]] = var_08; + var_00 = maps\mp\gametypes\_spawnlogic::getspawnpoint_nearteam(level.spawn_all,var_08.nearbyspawns); + } + } + + if(!isdefined(var_00)) + { + if(self.pers["team"] == "axis") + { + var_00 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random(level.spawn_axis_start); + } + else + { + var_00 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random(level.spawn_allies_start); + } + } + + return var_00; +} + +//Function Number: 6 +domflags() +{ + level.laststatus["allies"] = 0; + level.laststatus["axis"] = 0; + game["flagmodels"] = []; + game["flagmodels"]["neutral"] = "prop_flag_neutral"; + game["flagmodels"]["allies"] = maps\mp\gametypes\_teams::getteamflagmodel("allies"); + game["flagmodels"]["axis"] = maps\mp\gametypes\_teams::getteamflagmodel("axis"); + precachemodel(game["flagmodels"]["neutral"]); + precachemodel(game["flagmodels"]["allies"]); + precachemodel(game["flagmodels"]["axis"]); + precachestring(&"MP_SECURING_POSITION"); + var_00 = getentarray("flag_primary","targetname"); + var_01 = getentarray("flag_secondary","targetname"); + if(var_00.size + var_01.size < 2) + { + maps\mp\gametypes\_callbacksetup::abortlevel(); + return; + } + + level.flags = []; + for(var_02 = 0;var_02 < var_00.size;var_02++) + { + level.flags[level.flags.size] = var_00[var_02]; + } + + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + level.flags[level.flags.size] = var_01[var_02]; + } + + level.domflags = []; + for(var_02 = 0;var_02 < level.flags.size;var_02++) + { + var_03 = level.flags[var_02]; + if(isdefined(var_03.target)) + { + var_04[0] = getent(var_03.target,"targetname"); + } + else + { + var_04[0] = spawn("script_model",var_03.origin); + var_04[0].angles = var_03.angles; + } + + var_04[0] setmodel(game["flagmodels"]["neutral"]); + var_05 = maps\mp\gametypes\_gameobjects::createuseobject("neutral",var_03,var_04,(0,0,100)); + var_05 maps\mp\gametypes\_gameobjects::allowuse("enemy"); + var_05 maps\mp\gametypes\_gameobjects::setusetime(10); + var_05 maps\mp\gametypes\_gameobjects::setusetext(&"MP_SECURING_POSITION"); + var_06 = var_05 maps\mp\gametypes\_gameobjects::getlabel(); + var_05.label = var_06; + var_05 maps\mp\gametypes\_gameobjects::set2dicon("friendly","waypoint_defend" + var_06); + var_05 maps\mp\gametypes\_gameobjects::set3dicon("friendly","waypoint_defend" + var_06); + var_05 maps\mp\gametypes\_gameobjects::set2dicon("enemy","waypoint_captureneutral" + var_06); + var_05 maps\mp\gametypes\_gameobjects::set3dicon("enemy","waypoint_captureneutral" + var_06); + var_05 maps\mp\gametypes\_gameobjects::setvisibleteam("any"); + var_05.onuse = ::onuse; + var_05.onbeginuse = ::onbeginuse; + var_05.onuseupdate = ::onuseupdate; + var_05.onenduse = ::onenduse; + var_07 = var_04[0].origin + (0,0,32); + var_08 = var_04[0].origin + (0,0,-32); + var_09 = bullettrace(var_07,var_08,0,undefined); + var_0A = vectortoangles(var_09["normal"]); + var_05.baseeffectforward = anglestoforward(var_0A); + var_05.baseeffectright = anglestoright(var_0A); + var_05.baseeffectpos = var_09["position"]; + level.flags[var_02].useobj = var_05; + level.flags[var_02].adjflags = []; + level.flags[var_02].nearbyspawns = []; + var_05.levelflag = level.flags[var_02]; + level.domflags[level.domflags.size] = var_05; + } + + level.bestspawnflag = []; + level.bestspawnflag["allies"] = func_393E("allies",undefined); + level.bestspawnflag["axis"] = func_393E("axis",level.bestspawnflag["allies"]); + func_3950(); +} + +//Function Number: 7 +func_393E(param_00,param_01) +{ + var_02 = undefined; + var_03 = undefined; + for(var_04 = 0;var_04 < level.flags.size;var_04++) + { + var_05 = level.flags[var_04]; + if(var_05 func_394A() != "neutral") + { + continue; + } + + var_06 = distancesquared(var_05.origin,level.startpos[param_00]); + if((!isdefined(param_01) || var_05 != param_01) && !isdefined(var_02) || var_06 < var_03) + { + var_03 = var_06; + var_02 = var_05; + } + } + + return var_02; +} + +//Function Number: 8 +onbeginuse(param_00) +{ + var_01 = maps\mp\gametypes\_gameobjects::getownerteam(); + self.didstatusnotify = 0; + if(var_01 == "neutral") + { + func_3940("securing" + self.label,param_00.pers["team"]); + self.objpoints[param_00.pers["team"]] thread maps\mp\gametypes\_objpoints::startflashing(); + return; + } + + if(var_01 == "allies") + { + var_02 = "axis"; + } + else + { + var_02 = "allies"; + } + + self.objpoints["allies"] thread maps\mp\gametypes\_objpoints::startflashing(); + self.objpoints["axis"] thread maps\mp\gametypes\_objpoints::startflashing(); +} + +//Function Number: 9 +onuseupdate(param_00,param_01,param_02) +{ + if(param_01 > 0.05 && param_02 && !self.didstatusnotify) + { + var_03 = maps\mp\gametypes\_gameobjects::getownerteam(); + if(var_03 == "neutral") + { + func_3940("securing" + self.label,param_00); + } + else + { + func_3940("losing" + self.label,var_03); + func_3940("securing" + self.label,param_00); + } + + self.didstatusnotify = 1; + } +} + +//Function Number: 10 +func_3940(param_00,param_01,param_02) +{ + var_03 = gettime(); + if(gettime() < level.laststatus[param_01] + 5000 && !isdefined(param_02) || !param_02) + { + return; + } + + thread func_3945(param_00,param_01); + level.laststatus[param_01] = gettime(); +} + +//Function Number: 11 +onenduse(param_00,param_01,param_02) +{ + self.objpoints["allies"] thread maps\mp\gametypes\_objpoints::stopflashing(); + self.objpoints["axis"] thread maps\mp\gametypes\_objpoints::stopflashing(); +} + +//Function Number: 12 +func_3941() +{ + if(isdefined(self.baseeffect)) + { + self.baseeffect delete(); + } + + var_00 = maps\mp\gametypes\_gameobjects::getownerteam(); + if(var_00 != "axis" && var_00 != "allies") + { + return; + } + + var_01 = level.flagbasefxid[var_00]; + self.baseeffect = spawnfx(var_01,self.baseeffectpos,self.baseeffectforward,self.baseeffectright); + triggerfx(self.baseeffect); +} + +//Function Number: 13 +onuse(param_00) +{ + var_01 = param_00.pers["team"]; + var_02 = maps\mp\gametypes\_gameobjects::getownerteam(); + var_03 = maps\mp\gametypes\_gameobjects::getlabel(); + self.capturetime = gettime(); + maps\mp\gametypes\_gameobjects::setownerteam(var_01); + maps\mp\gametypes\_gameobjects::set2dicon("enemy","waypoint_capture" + var_03); + maps\mp\gametypes\_gameobjects::set3dicon("enemy","waypoint_capture" + var_03); + self.visuals[0] setmodel(game["flagmodels"][var_01]); + func_3941(); + level.usestartspawns = 0; + if(var_02 == "neutral") + { + var_04 = maps\mp\_utility::getotherteam(var_01); + thread maps\mp\_utility::printandsoundoneveryone(var_01,var_04,undefined,undefined,"mp_war_objective_taken",undefined,param_00); + func_3940("secured" + self.label,var_01,1); + func_3940("enemy_has" + self.label,var_04,1); + } + else + { + thread maps\mp\_utility::printandsoundoneveryone(var_01,var_02,undefined,undefined,"mp_war_objective_taken","mp_war_objective_lost",param_00); + if(func_3949(var_01) == level.flags.size) + { + func_3940("secure_all",var_01); + func_3940("lost_all",var_02); + } + else + { + func_3940("secured" + self.label,var_01,1); + func_3940("lost" + self.label,var_02,1); + } + + level.bestspawnflag[var_02] = self.levelflag; + } + + param_00 notify("objective","captured"); + thread func_3944(self.touchlist[var_01]); +} + +//Function Number: 14 +func_3944(param_00) +{ + level endon("game_ended"); + var_01 = getarraykeys(param_00); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + var_03 = param_00[var_01[var_02]].player; + var_03 thread maps\mp\gametypes\_hud_message::splashnotify("capture",maps\mp\gametypes\_rank::getscoreinfovalue("capture")); + var_03 thread func_3952(); + var_03 thread maps\mp\gametypes\_rank::giverankxp("capture",maps\mp\gametypes\_rank::getscoreinfovalue("capture") * var_03 func_3955()); + lib_036E::func_2B7B("capture",var_03); + var_03 maps\mp\_utility::incplayerstat("pointscaptured",1); + var_03 maps\mp\_utility::incpersstat("captures",1); + var_03 maps\mp\gametypes\_persistance::statsetchild("round","captures",var_03.pers["captures"]); + if(var_03 != self) + { + var_03 notify("objective","assistedCapture"); + } + } + + var_03 = maps\mp\gametypes\_gameobjects::getearliestclaimplayer(); + level thread maps\mp\_utility::teamplayercardsplash("callout_securedposition" + self.label,var_03); + var_03 thread maps\mp\_matchdata::loggameevent("capture",var_03.origin); +} + +//Function Number: 15 +func_3945(param_00,param_01) +{ + level endon("game_ended"); + wait 0.1; + maps\mp\_utility::waittillslowprocessallowed(); + maps\mp\_utility::leaderdialog(param_00,param_01); +} + +//Function Number: 16 +func_3946(param_00,param_01,param_02,param_03) +{ + level endon("game_ended"); + wait 0.1; + maps\mp\_utility::waittillslowprocessallowed(); + maps\mp\_utility::leaderdialogbothteams(param_00,param_01,param_02,param_03); +} + +//Function Number: 17 +func_3947() +{ + level endon("game_ended"); + while(!level.gameended) + { + var_00 = func_3948(); + if(var_00.size) + { + for(var_01 = 1;var_01 < var_00.size;var_01++) + { + var_02 = var_00[var_01]; + var_03 = gettime() - var_02.capturetime; + for(var_04 = var_01 - 1;var_04 >= 0 && var_03 > gettime() - var_00[var_04].capturetime;var_04--) + { + var_00[var_04 + 1] = var_00[var_04]; + } + + var_00[var_04 + 1] = var_02; + } + + foreach(var_02 in var_00) + { + var_06 = var_02 maps\mp\gametypes\_gameobjects::getownerteam(); + lib_036E::func_2B88(var_06,1); + } + } + + if(((maps\mp\_utility::gettimepassed() / 1000 > 120 && var_00.size < 2) || maps\mp\_utility::gettimepassed() / 1000 > 300 && var_00.size < 3) && maps\mp\_utility::matchmakinggame()) + { + level.finalkillcam_winner = "none"; + thread maps\mp\gametypes\_gamelogic::endgame("none",game["strings"]["time_limit_reached"]); + return; + } + + wait 5; + maps\mp\gametypes\_hostmigration::waittillhostmigrationdone(); + } +} + +//Function Number: 18 +onplayerkilled(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09) +{ + if(!isplayer(param_01) || param_01.pers["team"] == self.pers["team"]) + { + return; + } + + var_0A = 0; + var_0B = 0; + var_0C = self; + foreach(var_0E in var_0C.touchtriggers) + { + if(var_0E != level.flags[0] && var_0E != level.flags[1] && var_0E != level.flags[2]) + { + continue; + } + + var_0F = var_0E.useobj.ownerteam; + var_10 = var_0C.pers["team"]; + if(var_0F == "neutral") + { + continue; + } + + if(var_10 == var_0F) + { + var_0A = 1; + param_01 thread maps\mp\gametypes\_hud_message::splashnotify("assault",maps\mp\gametypes\_rank::getscoreinfovalue("assault")); + param_01 thread maps\mp\gametypes\_rank::giverankxp("assault"); + lib_036E::func_2B7B("assault",param_01); + thread maps\mp\_matchdata::logkillevent(param_09,"defending"); + continue; + } + + var_0B = 1; + param_01 thread maps\mp\gametypes\_hud_message::splashnotify("defend",maps\mp\gametypes\_rank::getscoreinfovalue("defend")); + param_01 thread maps\mp\gametypes\_rank::giverankxp("defend"); + lib_036E::func_2B7B("defend",param_01); + param_01 maps\mp\_utility::incpersstat("defends",1); + param_01 maps\mp\gametypes\_persistance::statsetchild("round","defends",param_01.pers["defends"]); + thread maps\mp\_matchdata::logkillevent(param_09,"assaulting"); + } + + foreach(var_0E in param_01.touchtriggers) + { + if(var_0E != level.flags[0] && var_0E != level.flags[1] && var_0E != level.flags[2]) + { + continue; + } + + var_0F = var_0E.useobj.ownerteam; + var_13 = param_01.pers["team"]; + if(var_0F == "neutral") + { + continue; + } + + if(var_13 != var_0F) + { + if(!var_0A) + { + param_01 thread maps\mp\gametypes\_hud_message::splashnotify("assault",maps\mp\gametypes\_rank::getscoreinfovalue("assault")); + } + + param_01 thread maps\mp\gametypes\_rank::giverankxp("assault"); + lib_036E::func_2B7B("assault",param_01); + thread maps\mp\_matchdata::logkillevent(param_09,"defending"); + } + } + + foreach(var_0E in level.flags) + { + var_0F = var_0E.useobj.ownerteam; + var_13 = param_01.pers["team"]; + var_16 = distancesquared(var_0E.origin,var_0C.origin); + var_17 = 90000; + if(var_13 == var_0F && var_16 < var_17) + { + if(!var_0B) + { + param_01 thread maps\mp\gametypes\_hud_message::splashnotify("defend",maps\mp\gametypes\_rank::getscoreinfovalue("defend")); + } + + param_01 thread maps\mp\gametypes\_rank::giverankxp("defend"); + lib_036E::func_2B7B("defend",param_01); + thread maps\mp\_matchdata::logkillevent(param_09,"assaulting"); + } + } +} + +//Function Number: 19 +func_3948() +{ + var_00 = []; + foreach(var_02 in level.domflags) + { + if(var_02 maps\mp\gametypes\_gameobjects::getownerteam() != "neutral" && isdefined(var_02.capturetime)) + { + var_00[var_00.size] = var_02; + } + } + + return var_00; +} + +//Function Number: 20 +func_3949(param_00) +{ + var_01 = 0; + for(var_02 = 0;var_02 < level.flags.size;var_02++) + { + if(level.domflags[var_02] maps\mp\gametypes\_gameobjects::getownerteam() == param_00) + { + var_01++; + } + } + + return var_01; +} + +//Function Number: 21 +func_394A() +{ + return self.useobj maps\mp\gametypes\_gameobjects::getownerteam(); +} + +//Function Number: 22 +func_394B() +{ + var_00 = []; + for(var_01 = 0;var_01 < level.flags.size;var_01++) + { + for(var_02 = 0;var_02 < level.flags[var_01].adjflags.size;var_02++) + { + if(level.flags[var_01].useobj maps\mp\gametypes\_gameobjects::getownerteam() != level.flags[var_01].adjflags[var_02].useobj maps\mp\gametypes\_gameobjects::getownerteam()) + { + var_00[var_00.size] = level.flags[var_01]; + break; + } + } + } + + return var_00; +} + +//Function Number: 23 +func_394C(param_00) +{ + var_01 = []; + var_02 = func_394B(); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + if(isdefined(param_00) && var_02[var_03] func_394A() != param_00) + { + continue; + } + + for(var_04 = 0;var_04 < var_02[var_03].nearbyspawns.size;var_04++) + { + var_01[var_01.size] = var_02[var_03].nearbyspawns[var_04]; + } + } + + return var_01; +} + +//Function Number: 24 +func_394D(param_00) +{ + var_01 = []; + for(var_02 = 0;var_02 < level.flags.size;var_02++) + { + var_03 = level.flags[var_02]; + if(var_03 == param_00) + { + continue; + } + + var_04 = 0; + for(var_05 = 0;var_05 < var_03.adjflags.size;var_05++) + { + if(var_03.adjflags[var_05] == param_00) + { + var_04 = 1; + break; + } + } + + if(!var_04) + { + continue; + } + + for(var_05 = 0;var_05 < var_03.nearbyspawns.size;var_05++) + { + var_01[var_01.size] = var_03.nearbyspawns[var_05]; + } + } + + return var_01; +} + +//Function Number: 25 +func_394E(param_00) +{ + var_01 = []; + for(var_02 = 0;var_02 < level.flags.size;var_02++) + { + if(level.flags[var_02] func_394A() == param_00) + { + for(var_03 = 0;var_03 < level.flags[var_02].nearbyspawns.size;var_03++) + { + var_01[var_01.size] = level.flags[var_02].nearbyspawns[var_03]; + } + + continue; + } + + for(var_04 = 0;var_04 < level.flags[var_02].adjflags.size;var_04++) + { + if(level.flags[var_02].adjflags[var_04] func_394A() == param_00) + { + for(var_03 = 0;var_03 < level.flags[var_02].nearbyspawns.size;var_03++) + { + var_01[var_01.size] = level.flags[var_02].nearbyspawns[var_03]; + } + + break; + } + } + } + + return var_01; +} + +//Function Number: 26 +func_394F(param_00) +{ + var_01 = []; + for(var_02 = 0;var_02 < level.flags.size;var_02++) + { + if(level.flags[var_02] func_394A() == param_00) + { + for(var_03 = 0;var_03 < level.flags[var_02].nearbyspawns.size;var_03++) + { + var_01[var_01.size] = level.flags[var_02].nearbyspawns[var_03]; + } + } + } + + return var_01; +} + +//Function Number: 27 +func_3950() +{ + var_00 = []; + var_01 = []; + var_02 = getentarray("flag_descriptor","targetname"); + var_03 = level.flags; + for(var_04 = 0;var_04 < level.domflags.size;var_04++) + { + var_05 = undefined; + var_06 = undefined; + for(var_07 = 0;var_07 < var_02.size;var_07++) + { + var_08 = distance(var_03[var_04].origin,var_02[var_07].origin); + if(!isdefined(var_05) || var_08 < var_05) + { + var_05 = var_08; + var_06 = var_02[var_07]; + } + } + + if(!isdefined(var_06)) + { + var_00[var_00.size] = "there is no flag_descriptor in the map! see explanation in dom.gsc"; + break; + } + + if(isdefined(var_06.flag)) + { + var_00[var_00.size] = "flag_descriptor with script_linkname \" + var_06.script_linkname + "\" is nearby more than one flag; is there a unique descriptor near each flag?"; + continue; + } + + var_03[var_04].descriptor = var_06; + var_06.flag = var_03[var_04]; + var_01[var_06.script_linkname] = var_06; + } + + if(var_00.size == 0) + { + for(var_04 = 0;var_04 < var_03.size;var_04++) + { + if(isdefined(var_03[var_04].descriptor.script_linkto)) + { + var_09 = strtok(var_03[var_04].descriptor.script_linkto," "); + } + else + { + var_09 = []; + } + + for(var_07 = 0;var_07 < var_09.size;var_07++) + { + var_0A = var_01[var_09[var_07]]; + if(!isdefined(var_0A) || var_0A.targetname != "flag_descriptor") + { + var_00[var_00.size] = "flag_descriptor with script_linkname \" + var_03[var_04].descriptor.script_linkname + "\" linked to \" + var_09[var_07] + "\" which does not exist as a script_linkname of any other entity with a targetname of flag_descriptor (or, if it does, that flag_descriptor has not been assigned to a flag)"; + continue; + } + + var_0B = var_0A.flag; + if(var_0B == var_03[var_04]) + { + var_00[var_00.size] = "flag_descriptor with script_linkname \" + var_03[var_04].descriptor.script_linkname + "\" linked to itself"; + continue; + } + + var_03[var_04].adjflags[var_03[var_04].adjflags.size] = var_0B; + } + } + } + + var_0C = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_dom_spawn"); + for(var_04 = 0;var_04 < var_0C.size;var_04++) + { + if(isdefined(var_0C[var_04].script_linkto)) + { + var_0D = var_01[var_0C[var_04].script_linkto]; + if(!isdefined(var_0D) || var_0D.targetname != "flag_descriptor") + { + var_00[var_00.size] = "Spawnpoint at " + var_0C[var_04].origin + "\" linked to \" + var_0C[var_04].script_linkto + "\" which does not exist as a script_linkname of any entity with a targetname of flag_descriptor (or, if it does, that flag_descriptor has not been assigned to a flag)"; + continue; + } + + var_0E = var_0D.flag; + } + else + { + var_0E = undefined; + var_0F = undefined; + for(var_07 = 0;var_07 < var_03.size;var_07++) + { + var_08 = distancesquared(var_03[var_07].origin,var_0C[var_04].origin); + if(!isdefined(var_0E) || var_08 < var_0F) + { + var_0E = var_03[var_07]; + var_0F = var_08; + } + } + } + + var_0E.nearbyspawns[var_0E.nearbyspawns.size] = var_0C[var_04]; + } + + if(var_00.size > 0) + { + for(var_04 = 0;var_04 < var_00.size;var_04++) + { + } + + common_scripts\utility::error("Map errors. See above"); + maps\mp\gametypes\_callbacksetup::abortlevel(); + } +} + +//Function Number: 28 +initgametypeawards() +{ + maps\mp\_awards::initstataward("pointscaptured",0,::maps\mp\_awards::highestwins); +} + +//Function Number: 29 +onspawnplayer() +{ +} + +//Function Number: 30 +func_3952() +{ + if(!isdefined(self.cpm)) + { + self.numcaps = 0; + self.cpm = 0; + } + + self.numcaps++; + if(maps\mp\_utility::getminutespassed() < 1) + { + return; + } + + self.cpm = self.numcaps / maps\mp\_utility::getminutespassed(); +} + +//Function Number: 31 +func_3955() +{ + if(self.cpm < 4) + { + return 1; + } + + return 0.25; +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/gametypes/grnd.gsc b/MW3/PC/MP/maps/mp/gametypes/grnd.gsc new file mode 100644 index 0000000..7371583 --- /dev/null +++ b/MW3/PC/MP/maps/mp/gametypes/grnd.gsc @@ -0,0 +1,921 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\grnd.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 18 + * Decompile Time: 289 ms + * Timestamp: 10/27/2023 2:13:15 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(getdvar("mapname") == "mp_background") + { + return; + } + + maps\mp\gametypes\_globallogic::init(); + maps\mp\gametypes\_callbacksetup::setupcallbacks(); + maps\mp\gametypes\_globallogic::setupcallbacks(); + if(isusingmatchrulesdata()) + { + level.initializematchrules = ::initializematchrules; + [[ level.initializematchrules ]](); + level thread maps\mp\_utility::reinitializematchrulesonmigration(); + } + else + { + maps\mp\_utility::registerroundswitchdvar(level.gametype,0,0,9); + maps\mp\_utility::registertimelimitdvar(level.gametype,10); + maps\mp\_utility::registerscorelimitdvar(level.gametype,20000); + maps\mp\_utility::registerroundlimitdvar(level.gametype,1); + maps\mp\_utility::registerwinlimitdvar(level.gametype,1); + maps\mp\_utility::registernumlivesdvar(level.gametype,0); + maps\mp\_utility::registerhalftimedvar(level.gametype,0); + level.matchrules_droptime = 30; + level.matchrules_zoneswitchtime = 120; + level.matchrules_damagemultiplier = 0; + level.matchrules_vampirism = 0; + } + + level.teambased = 1; + level.onprecachegametype = ::onprecachegametype; + level.onstartgametype = ::onstartgametype; + level.getspawnpoint = ::getspawnpoint; + level.onspawnplayer = ::onspawnplayer; + if(level.matchrules_damagemultiplier || level.matchrules_vampirism) + { + level.modifyplayerdamage = ::maps\mp\gametypes\_damage::gamemodemodifyplayerdamage; + } + + level.grnd_fx["smoke"] = loadfx("smoke/airdrop_flare_mp_effect_now"); + level.grnd_fx["flare"] = loadfx("smoke/signal_smoke_airdrop"); + func_3A0C(); +} + +//Function Number: 2 +initializematchrules() +{ + maps\mp\_utility::setcommonrulesfrommatchrulesdata(); + level.matchrules_droptime = getmatchrulesdata("grndData","dropTime"); + level.matchrules_zoneswitchtime = 60 * getmatchrulesdata("grndData","zoneSwitchTime"); + setdynamicdvar("scr_grnd_roundswitch",0); + maps\mp\_utility::registerroundswitchdvar("grnd",0,0,9); + setdynamicdvar("scr_grnd_roundlimit",1); + maps\mp\_utility::registerroundlimitdvar("grnd",1); + setdynamicdvar("scr_grnd_winlimit",1); + maps\mp\_utility::registerwinlimitdvar("grnd",1); + setdynamicdvar("scr_grnd_halftime",0); + maps\mp\_utility::registerhalftimedvar("grnd",0); + setdynamicdvar("scr_grnd_promode",0); +} + +//Function Number: 3 +onprecachegametype() +{ + precacheshader("waypoint_captureneutral"); + precacheshader("waypoint_capture"); + precacheshader("waypoint_defend"); + precachemodel("prop_flag_neutral"); + precachestring(&"OBJECTIVES_GRND"); + precachestring(&"OBJECTIVES_GRND_SCORE"); + precachestring(&"OBJECTIVES_GRND_HINT"); + precachestring(&"OBJECTIVES_GRND_CONFIRM"); + precachestring(&"MP_CALLING_AIRDROP"); + precachestring(&"MP_NEXT_DROP_ZONE_IN"); + precachemodel("weapon_us_smoke_grenade_burnt2"); +} + +//Function Number: 4 +onstartgametype() +{ + setclientnamemode("auto_change"); + if(!isdefined(game["switchedsides"])) + { + game["switchedsides"] = 0; + } + + maps\mp\_utility::setobjectivetext("allies",&"OBJECTIVES_GRND"); + maps\mp\_utility::setobjectivetext("axis",&"OBJECTIVES_GRND"); + if(level.splitscreen) + { + maps\mp\_utility::setobjectivescoretext("allies",&"OBJECTIVES_GRND"); + maps\mp\_utility::setobjectivescoretext("axis",&"OBJECTIVES_GRND"); + } + else + { + maps\mp\_utility::setobjectivescoretext("allies",&"OBJECTIVES_GRND_SCORE"); + maps\mp\_utility::setobjectivescoretext("axis",&"OBJECTIVES_GRND_SCORE"); + } + + maps\mp\_utility::setobjectivehinttext("allies",&"OBJECTIVES_GRND_HINT"); + maps\mp\_utility::setobjectivehinttext("axis",&"OBJECTIVES_GRND_HINT"); + level.spawnmins = (0,0,0); + level.spawnmaxs = (0,0,0); + maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_sab_spawn_allies_start"); + maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_sab_spawn_axis_start"); + maps\mp\gametypes\_spawnlogic::addspawnpoints("allies","mp_tdm_spawn"); + maps\mp\gametypes\_spawnlogic::addspawnpoints("axis","mp_tdm_spawn"); + level.mapcenter = maps\mp\gametypes\_spawnlogic::findboxcenter(level.spawnmins,level.spawnmaxs); + setmapcenter(level.mapcenter); + var_00 = getent("sab_bomb","targetname"); + level.grnd_centerloc = var_00.origin; + maps\mp\gametypes\_rank::registerscoreinfo("zone_kill",100); + maps\mp\gametypes\_rank::registerscoreinfo("zone_tick",20); + var_01[0] = level.gametype; + maps\mp\gametypes\_gameobjects::main(var_7B); + level.grnd_timerdisplay = maps\mp\gametypes\_hud_util::createservertimer("objective",1.4); + if(level.splitscreen) + { + level.grnd_timerdisplay maps\mp\gametypes\_hud_util::setpoint("TOPLEFT","TOPLEFT",80,0); + } + else + { + level.grnd_timerdisplay maps\mp\gametypes\_hud_util::setpoint("TOPLEFT","TOPLEFT",115,5); + } + + level.grnd_timerdisplay.label = &"MP_NEXT_DROP_ZONE_IN"; + level.grnd_timerdisplay.alpha = 0; + level.grnd_timerdisplay.archived = 0; + level.grnd_timerdisplay.hidewheninmenu = 1; + thread func_3A0B(level.grnd_timerdisplay); + func_39F6(); +} + +//Function Number: 5 +func_39F6() +{ + level.zonescycling = 0; + level.var_14 = 0; + var_00 = 999999; + var_01 = 0; + for(var_02 = 0;var_02 < level.grnd_dropzones[level.script].size;var_02++) + { + var_03 = level.grnd_dropzones[level.script][var_02]; + var_04 = distance2d(level.grnd_centerloc,var_03); + if(var_04 < var_00) + { + var_00 = var_04; + var_01 = var_02; + } + } + + level.grnd_initialindex = var_01; + var_05 = level.grnd_dropzones[level.script][var_01]; + level.grnd_zone = spawn("script_model",var_05); + level.grnd_zone.origin = var_05; + level.grnd_zone.angles = (90,0,0); + level.grnd_zone setmodel("weapon_us_smoke_grenade_burnt2"); + level.favorclosespawnent = level.grnd_zone; + level.favorclosespawnscalar = 5; + level thread func_39FB(); +} + +//Function Number: 6 +func_39FB() +{ + level.grnd_zones = []; + for(var_00 = 0;var_00 < level.grnd_dropzones[level.script].size;var_00++) + { + var_01 = level.grnd_dropzones[level.script][var_00]; + level.grnd_zones[var_00] = spawn("script_origin",var_01); + level.grnd_zones[var_00].origin = var_01; + wait 0.05; + } + + level.grnd_zones[level.grnd_initialindex] delete(); + level.grnd_zones[level.grnd_initialindex] = undefined; + level.grnd_zones = common_scripts\utility::array_removeundefined(level.grnd_zones); +} + +//Function Number: 7 +getspawnpoint() +{ + if(level.ingraceperiod) + { + var_00 = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_sab_spawn_" + self.pers["team"] + "_start"); + var_01 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random(var_00); + } + else + { + var_00 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints(self.pers["team"]); + var_01 = maps\mp\gametypes\_spawnlogic::getspawnpoint_nearteam(var_01); + } + + return var_01; +} + +//Function Number: 8 +onspawnplayer() +{ + if(!isdefined(self.ingrindzone)) + { + level thread func_39FE(self); + if(!level.zonescycling) + { + level.zonescycling = 1; + level thread func_3A05(); + level thread func_3A07(); + } + } + + level notify("spawned_player"); +} + +//Function Number: 9 +func_39FE(param_00) +{ + level endon("game_ended"); + maps\mp\_utility::gameflagwait("prematch_done"); + param_00.ingrindzonepoints = 0; + param_00.grndhudtext = param_00 maps\mp\gametypes\_hud_util::createfontstring("small",1.6); + if(level.splitscreen) + { + param_00.grndhudtext maps\mp\gametypes\_hud_util::setpoint("TOP LEFT","TOP LEFT",80,18); + } + else + { + param_00.grndhudtext maps\mp\gametypes\_hud_util::setpoint("TOP LEFT","TOP LEFT",115,22); + } + + param_00.grndhudtext.alpha = 1; + param_00.grndhudtext.archived = 0; + param_00.grndhudtext.hidewheninmenu = 1; + level thread func_3A0B(param_00.grndhudtext); + param_00.grndheadicon = level.grnd_zone maps\mp\_entityheadicons::setheadicon(param_00,"waypoint_captureneutral",(0,0,0),14,14,undefined,undefined,undefined,undefined,undefined,0); + param_00.grndobjid = maps\mp\gametypes\_gameobjects::getnextobjid(); + objective_add(param_00.grndobjid,"invisible",(0,0,0)); + objective_player(param_00.grndobjid,param_00 getentitynumber()); + objective_onentity(param_00.grndobjid,level.grnd_zone); + objective_icon(param_00.grndobjid,"waypoint_captureneutral"); + objective_state(param_00.grndobjid,"active"); + if(distance2d(level.grnd_zone.origin,param_00.origin) < 300) + { + param_00.ingrindzone = 1; + param_00.grndhudtext settext(&"OBJECTIVES_GRND_CONFIRM"); + param_00.grndhudtext.color = (0.6,1,0.6); + param_00.grndheadicon.alpha = 0; + } + else + { + param_00.ingrindzone = 0; + param_00.grndhudtext settext(&"OBJECTIVES_GRND_HINT"); + param_00.grndhudtext.color = (1,0.6,0.6); + param_00.grndheadicon.alpha = 0.85; + } + + param_00.grnd_wasspectator = 0; + if(param_00.team == "spectator") + { + param_00.ingrindzone = 0; + param_00.ingrindzonepoints = 0; + param_00.grndheadicon.alpha = 0; + param_00.grndhudtext.alpha = 0; + param_00.grnd_wasspectator = 1; + } + + param_00 thread func_3A06(); +} + +//Function Number: 10 +func_3A03() +{ + var_00 = undefined; + var_01 = undefined; + if(level.grnd_zones.size > 2) + { + var_02 = 999999; + var_03 = 0; + for(var_04 = 0;var_04 < level.grnd_zones.size;var_04++) + { + level.grnd_zones[var_04].index = var_04; + level.grnd_zones[var_04].disttozone = distance(level.grnd_zones[var_04].origin,level.grnd_zone.origin); + if(level.grnd_zones[var_04].disttozone > var_03) + { + var_03 = level.grnd_zones[var_04].disttozone; + continue; + } + + if(level.grnd_zones[var_04].disttozone < var_02) + { + var_02 = level.grnd_zones[var_04].disttozone; + } + } + + var_05 = []; + var_06 = []; + var_07 = int(var_02 + var_03 / 2); + for(var_04 = 0;var_04 < level.grnd_zones.size;var_04++) + { + if(level.grnd_zones[var_04].disttozone >= var_07) + { + var_05[var_05.size] = level.grnd_zones[var_04]; + continue; + } + + var_06[var_06.size] = level.grnd_zones[var_04]; + } + + var_08 = undefined; + if(var_05.size > 1) + { + var_08 = var_05[randomintrange(0,var_05.size)]; + } + else if(var_05.size) + { + var_08 = var_05[0]; + } + else + { + var_08 = var_06[randomintrange(0,var_06.size)]; + } + + var_01 = var_08.index; + } + else if(level.grnd_zones.size == 2) + { + var_09 = distance(level.grnd_zones[0].origin,level.grnd_zone.origin); + var_0A = distance(level.grnd_zones[1].origin,level.grnd_zone.origin); + if(var_09 > var_0A) + { + var_01 = 0; + } + else + { + var_01 = 1; + } + } + else if(level.grnd_zones.size == 1) + { + var_01 = 0; + } + + if(isdefined(var_01)) + { + var_00 = level.grnd_zones[var_01].origin; + level.grnd_zones[var_01] delete(); + level.grnd_zones[var_01] = undefined; + level.grnd_zones = common_scripts\utility::array_removeundefined(level.grnd_zones); + } + else + { + var_00 = level.grnd_dropzones[level.script][level.grnd_initialindex]; + level thread func_39FB(); + } + + return var_00; +} + +//Function Number: 11 +func_3A05() +{ + level endon("game_ended"); + maps\mp\_utility::gameflagwait("prematch_done"); + for(;;) + { + var_00["axis"] = game["teamScores"]["axis"]; + var_00["allies"] = game["teamScores"]["allies"]; + var_01 = undefined; + if(!level.var_14) + { + level.var_14 = 1; + var_01 = level.grnd_zone.origin; + } + else + { + var_01 = func_3A03(); + stopfxontag(level.grnd_fx["smoke"],level.grnd_zone,"tag_fx"); + wait 0.05; + } + + var_02 = var_01 + (0,0,30); + var_03 = var_01 + (0,0,-1000); + var_04 = bullettrace(var_02,var_03,0,undefined); + level.grnd_zone.origin = var_04["position"] + (0,0,1); + wait 0.05; + playfxontag(level.grnd_fx["smoke"],level.grnd_zone,"tag_fx"); + if(level.matchrules_droptime) + { + level thread func_3A08(); + } + + level.grnd_timerdisplay.label = &"MP_NEXT_DROP_ZONE_IN"; + level.grnd_timerdisplay settimer(level.matchrules_zoneswitchtime); + level.grnd_timerdisplay.alpha = 1; + maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause(level.matchrules_zoneswitchtime); + level.grnd_timerdisplay.alpha = 0; + if(game["teamScores"]["axis"] - var_00["axis"] > game["teamScores"]["allies"] - var_00["allies"]) + { + maps\mp\_utility::playsoundonplayers("mp_obj_captured","axis"); + maps\mp\_utility::playsoundonplayers("mp_enemy_obj_captured","allies"); + continue; + } + + if(game["teamScores"]["allies"] - var_00["allies"] > game["teamScores"]["axis"] - var_00["axis"]) + { + maps\mp\_utility::playsoundonplayers("mp_obj_captured","allies"); + maps\mp\_utility::playsoundonplayers("mp_enemy_obj_captured","axis"); + } + } +} + +//Function Number: 12 +func_3A06() +{ + self endon("disconnect"); + level endon("game_ended"); + for(;;) + { + if(!self.grnd_wasspectator && self.team == "spectator") + { + self.ingrindzone = 0; + self.ingrindzonepoints = 0; + self.grndheadicon.alpha = 0; + self.grndhudtext.alpha = 0; + self.grnd_wasspectator = 1; + } + else if(self.team != "spectator") + { + if((self.grnd_wasspectator || !self.ingrindzone) && distance2d(level.grnd_zone.origin,self.origin) < 300) + { + self.ingrindzone = 1; + self.ingrindzonepoints = 0; + self.grndhudtext settext(&"OBJECTIVES_GRND_CONFIRM"); + self.grndhudtext.color = (0.6,1,0.6); + self.grndhudtext.alpha = 1; + self.grndheadicon.alpha = 0; + } + else if((self.grnd_wasspectator || self.ingrindzone) && distance2d(level.grnd_zone.origin,self.origin) >= 300) + { + self.ingrindzone = 0; + self.ingrindzonepoints = 0; + self.grndhudtext settext(&"OBJECTIVES_GRND_HINT"); + self.grndhudtext.color = (1,0.6,0.6); + self.grndhudtext.alpha = 1; + self.grndheadicon.alpha = 0.85; + } + + self.grnd_wasspectator = 0; + } + + wait 0.05; + } +} + +//Function Number: 13 +func_3A07() +{ + level endon("game_ended"); + maps\mp\_utility::gameflagwait("prematch_done"); + var_00 = maps\mp\gametypes\_rank::getscoreinfovalue("zone_tick"); + for(;;) + { + var_01["axis"] = 0; + var_01["allies"] = 0; + foreach(var_03 in level.players) + { + if(isdefined(var_03.ingrindzone) && maps\mp\_utility::isreallyalive(var_03) && distance2d(level.grnd_zone.origin,var_03.origin) < 300) + { + var_01[var_03.pers["team"]]++; + var_03.ingrindzonepoints = var_03.ingrindzonepoints + var_00; + } + } + + if(var_01["axis"]) + { + lib_036E::func_2B88("axis",var_00 * var_01["axis"]); + } + + if(var_01["allies"]) + { + lib_036E::func_2B88("allies",var_00 * var_01["allies"]); + } + + if(var_01["axis"] == var_01["allies"]) + { + foreach(var_03 in level.players) + { + if(isdefined(var_03.ingrindzone)) + { + var_03.grndheadicon setshader("waypoint_captureneutral",14,14); + var_03.grndheadicon setwaypoint(0,0,0,0); + objective_icon(var_03.grndobjid,"waypoint_captureneutral"); + } + } + } + else + { + foreach(var_03 in level.players) + { + if(isdefined(var_03.ingrindzone)) + { + if(var_01[var_03.pers["team"]] > var_01[level.otherteam[var_03.pers["team"]]]) + { + var_03.grndheadicon setshader("waypoint_defend",14,14); + var_03.grndheadicon setwaypoint(0,0,0,0); + objective_icon(var_03.grndobjid,"waypoint_defend"); + continue; + } + + var_03.grndheadicon setshader("waypoint_capture",14,14); + var_03.grndheadicon setwaypoint(0,0,0,0); + objective_icon(var_03.grndobjid,"waypoint_capture"); + } + } + } + + maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause(1); + } +} + +//Function Number: 14 +func_3A08() +{ + level endon("game_ended"); + level notify("reset_grnd_drops"); + level endon("reset_grnd_drops"); + level.grnd_previouscratetypes = []; + for(;;) + { + var_00 = func_3A09(); + var_01 = 1; + if(isdefined(var_00) && maps\mp\_utility::currentactivevehiclecount() < maps\mp\_utility::maxvehiclesallowed() && level.fauxvehiclecount + var_01 < maps\mp\_utility::maxvehiclesallowed() && level.numdropcrates < 8) + { + var_00 thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_EARNED_CAREPACKAGE"); + thread maps\mp\_utility::teamplayercardsplash("callout_earned_carepackage",var_00); + var_00 thread maps\mp\_utility::leaderdialog(level.otherteam[var_00.team] + "_enemy_airdrop_assault_inbound",level.otherteam[var_00.team]); + var_00 thread maps\mp\_utility::leaderdialog(var_00.team + "_friendly_airdrop_assault_inbound",var_00.team); + maps\mp\_utility::playsoundonplayers("mp_war_objective_taken",var_00.team); + maps\mp\_utility::playsoundonplayers("mp_war_objective_lost",level.otherteam[var_00.team]); + var_02 = level.grnd_zone.origin + (randomintrange(-72,72),randomintrange(-72,72),0); + var_03 = func_3A0A(); + if(issubstr(tolower(var_03),"juggernaut")) + { + level thread maps\mp\killstreaks\_airdrop::doc130flyby(var_00,var_02,randomfloat(360),var_03); + } + else if(var_03 == "mega") + { + level thread maps\mp\killstreaks\_airdrop::domegac130flyby(var_00,var_02,randomfloat(360),"airdrop_grnd",-360); + } + else + { + level thread maps\mp\killstreaks\_airdrop::doflyby(var_00,var_02,randomfloat(360),"airdrop_grnd",0,var_03); + } + + var_04 = level.matchrules_droptime; + } + else + { + var_04 = 0.5; + } + + maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause(var_04); + } +} + +//Function Number: 15 +func_3A09() +{ + var_00 = undefined; + var_01 = 0; + foreach(var_03 in level.players) + { + if(maps\mp\_utility::isreallyalive(var_03)) + { + if(distance2d(level.grnd_zone.origin,var_03.origin) < 300 && var_03.ingrindzonepoints > var_01) + { + var_00 = var_03; + var_01 = var_03.ingrindzonepoints; + } + } + } + + return var_00; +} + +//Function Number: 16 +func_3A0A() +{ + var_00 = undefined; + if(!isdefined(level.grnd_previouscratetypes["mega"]) && level.numdropcrates == 0 && randomintrange(0,100) < 5) + { + var_00 = "mega"; + } + else + { + if(level.grnd_previouscratetypes.size) + { + for(var_01 = 200;var_01;var_01--) + { + var_00 = maps\mp\killstreaks\_airdrop::getrandomcratetype("airdrop_grnd"); + if(isdefined(level.grnd_previouscratetypes[var_00])) + { + var_00 = undefined; + continue; + } + + break; + } + } + + if(!isdefined(var_00)) + { + var_00 = maps\mp\killstreaks\_airdrop::getrandomcratetype("airdrop_grnd"); + } + } + + level.grnd_previouscratetypes[var_00] = 1; + if(level.grnd_previouscratetypes.size == 15) + { + level.grnd_previouscratetypes = []; + } + + return var_00; +} + +//Function Number: 17 +func_3A0B(param_00) +{ + level waittill("game_ended"); + if(isdefined(param_00)) + { + param_00.alpha = 0; + } +} + +//Function Number: 18 +func_3A0C() +{ + level.grnd_dropzones = []; + var_00 = getentarray("grnd_dropZone","targetname"); + if(isdefined(var_00) && var_00.size) + { + var_01 = 0; + foreach(var_03 in var_00) + { + level.grnd_dropzones[level.script][var_01] = var_03.origin; + var_01++; + } + + return; + } + + level.grnd_dropzones["mp_seatown"][0] = (-1226,-1399,204); + level.grnd_dropzones["mp_seatown"][1] = (1048,886,228); + level.grnd_dropzones["mp_seatown"][2] = (-2086,1263,260); + level.grnd_dropzones["mp_seatown"][3] = (-2297,-855,210); + level.grnd_dropzones["mp_seatown"][4] = (-2261,-334,248); + level.grnd_dropzones["mp_seatown"][5] = (-2048,512,248); + level.grnd_dropzones["mp_seatown"][6] = (-1439,1065,72); + level.grnd_dropzones["mp_seatown"][7] = (-410,982,127); + level.grnd_dropzones["mp_seatown"][8] = (-666,-217,226); + level.grnd_dropzones["mp_seatown"][9] = (-523,-875,280); + level.grnd_dropzones["mp_seatown"][10] = (-345,-1449,254); + level.grnd_dropzones["mp_seatown"][11] = (1167,-533,294); + level.grnd_dropzones["mp_seatown"][12] = (367,991,179); + level.grnd_dropzones["mp_seatown"][13] = (1106,219,292); + level.grnd_dropzones["mp_dome"][0] = (97,898,-240); + level.grnd_dropzones["mp_dome"][1] = (-226,1464,-231); + level.grnd_dropzones["mp_dome"][2] = (-603,194,-358); + level.grnd_dropzones["mp_dome"][3] = (814,-406,-335); + level.grnd_dropzones["mp_dome"][4] = (5,1975,-231); + level.grnd_dropzones["mp_dome"][5] = (-673,1100,-284); + level.grnd_dropzones["mp_dome"][6] = (669,1028,-255); + level.grnd_dropzones["mp_dome"][7] = (1231,807,-267); + level.grnd_dropzones["mp_dome"][8] = (709,210,-342); + level.grnd_dropzones["mp_dome"][9] = (1223,10,-336); + level.grnd_dropzones["mp_dome"][10] = (-222,418,-333); + level.grnd_dropzones["mp_dome"][11] = (501,-183,-330); + level.grnd_dropzones["mp_plaza2"][0] = (221,440,754); + level.grnd_dropzones["mp_plaza2"][1] = (155,1763,668); + level.grnd_dropzones["mp_plaza2"][2] = (-430,1871,691); + level.grnd_dropzones["mp_plaza2"][3] = (-1190,1759,668); + level.grnd_dropzones["mp_plaza2"][4] = (-1273,1279,829); + level.grnd_dropzones["mp_plaza2"][5] = (-593,1274,676); + level.grnd_dropzones["mp_plaza2"][6] = (-251,1006,722); + level.grnd_dropzones["mp_plaza2"][7] = (80,1343,676); + level.grnd_dropzones["mp_plaza2"][8] = (397,-99,708); + level.grnd_dropzones["mp_plaza2"][9] = (-1109,92,741); + level.grnd_dropzones["mp_plaza2"][10] = (-280,-195,700); + level.grnd_dropzones["mp_plaza2"][11] = (28,-1600,668); + level.grnd_dropzones["mp_plaza2"][12] = (764,-1752,669); + level.grnd_dropzones["mp_mogadishu"][0] = (1448,1945,39); + level.grnd_dropzones["mp_mogadishu"][1] = (1499,-1193,15); + level.grnd_dropzones["mp_mogadishu"][2] = (791,-880,16); + level.grnd_dropzones["mp_mogadishu"][3] = (38,-1007,16); + level.grnd_dropzones["mp_mogadishu"][4] = (-691,-260,22); + level.grnd_dropzones["mp_mogadishu"][5] = (2,52,2); + level.grnd_dropzones["mp_mogadishu"][6] = (664,69,12); + level.grnd_dropzones["mp_mogadishu"][7] = (1676,251,-1); + level.grnd_dropzones["mp_mogadishu"][8] = (2314,1860,63); + level.grnd_dropzones["mp_mogadishu"][9] = (73,858,3); + level.grnd_dropzones["mp_mogadishu"][10] = (710,837,16); + level.grnd_dropzones["mp_mogadishu"][11] = (-549,829,2); + level.grnd_dropzones["mp_mogadishu"][12] = (34,1850,84); + level.grnd_dropzones["mp_mogadishu"][13] = (-778,2614,157); + level.grnd_dropzones["mp_mogadishu"][14] = (-204,3206,152); + level.grnd_dropzones["mp_mogadishu"][15] = (752,3189,148); + level.grnd_dropzones["mp_mogadishu"][16] = (692,2354,95); + level.grnd_dropzones["mp_paris"][0] = (-931,-921,110); + level.grnd_dropzones["mp_paris"][1] = (1597,1768,47); + level.grnd_dropzones["mp_paris"][2] = (716,1809,33); + level.grnd_dropzones["mp_paris"][3] = (258,2074,36); + level.grnd_dropzones["mp_paris"][4] = (459,1067,37); + level.grnd_dropzones["mp_paris"][5] = (852,1350,118); + level.grnd_dropzones["mp_paris"][6] = (1601,897,45); + level.grnd_dropzones["mp_paris"][7] = (1286,420,41); + level.grnd_dropzones["mp_paris"][8] = (1613,181,172); + level.grnd_dropzones["mp_paris"][9] = (466,-752,67); + level.grnd_dropzones["mp_paris"][10] = (994,-625,50); + level.grnd_dropzones["mp_paris"][11] = (-211,-60,63); + level.grnd_dropzones["mp_paris"][12] = (-742,177,133); + level.grnd_dropzones["mp_paris"][13] = (-1532,100,250); + level.grnd_dropzones["mp_paris"][14] = (-343,1922,121); + level.grnd_dropzones["mp_paris"][15] = (-1127,1555,284); + level.grnd_dropzones["mp_paris"][16] = (-2025,1327,316); + level.grnd_dropzones["mp_paris"][17] = (-1039,841,187); + level.grnd_dropzones["mp_exchange"][0] = (-614,1286,113); + level.grnd_dropzones["mp_exchange"][1] = (182,1155,148); + level.grnd_dropzones["mp_exchange"][2] = (1018,1254,120); + level.grnd_dropzones["mp_exchange"][3] = (2182,1322,145); + level.grnd_dropzones["mp_exchange"][4] = (655,815,13); + level.grnd_dropzones["mp_exchange"][5] = (761,-312,-18); + level.grnd_dropzones["mp_exchange"][6] = (761,-771,112); + level.grnd_dropzones["mp_exchange"][7] = (635,-1450,110); + level.grnd_dropzones["mp_exchange"][8] = (152,-1538,96); + level.grnd_dropzones["mp_exchange"][9] = (303,-824,88); + level.grnd_dropzones["mp_exchange"][10] = (-953,-768,45); + level.grnd_dropzones["mp_exchange"][11] = (2392,1305,144); + level.grnd_dropzones["mp_exchange"][12] = (1634,1329,151); + level.grnd_dropzones["mp_exchange"][13] = (1315,743,159); + level.grnd_dropzones["mp_bootleg"][0] = (-1432,1404,8); + level.grnd_dropzones["mp_bootleg"][1] = (-1017,1787,-39); + level.grnd_dropzones["mp_bootleg"][2] = (-590,1514,-43); + level.grnd_dropzones["mp_bootleg"][3] = (-588,614,-12); + level.grnd_dropzones["mp_bootleg"][4] = (-1732,84,11); + level.grnd_dropzones["mp_bootleg"][5] = (-1809,-302,140); + level.grnd_dropzones["mp_bootleg"][6] = (-1649,-1147,92); + level.grnd_dropzones["mp_bootleg"][7] = (-884,-1035,-4); + level.grnd_dropzones["mp_bootleg"][8] = (-719,-1673,60); + level.grnd_dropzones["mp_bootleg"][9] = (-335,-2111,60); + level.grnd_dropzones["mp_bootleg"][10] = (208,-1955,68); + level.grnd_dropzones["mp_bootleg"][11] = (-198,-1726,60); + level.grnd_dropzones["mp_bootleg"][12] = (100,-1101,-9); + level.grnd_dropzones["mp_bootleg"][13] = (-427,-100,-8); + level.grnd_dropzones["mp_bootleg"][14] = (949,-1132,-10); + level.grnd_dropzones["mp_bootleg"][15] = (884,1182,-28); + level.grnd_dropzones["mp_bootleg"][16] = (242,1194,-45); + level.grnd_dropzones["mp_carbon"][0] = (-3330,-3392,3630); + level.grnd_dropzones["mp_carbon"][1] = (-3635,-3735,3630); + level.grnd_dropzones["mp_carbon"][2] = (-3625,-4189,3633); + level.grnd_dropzones["mp_carbon"][3] = (-2992,-4339,3627); + level.grnd_dropzones["mp_carbon"][4] = (-2925,-4999,3673); + level.grnd_dropzones["mp_carbon"][5] = (-2573,-4771,3784); + level.grnd_dropzones["mp_carbon"][6] = (-1705,-4643,3813); + level.grnd_dropzones["mp_carbon"][7] = (-1799,-3957,3813); + level.grnd_dropzones["mp_carbon"][8] = (-2141,-3647,3815); + level.grnd_dropzones["mp_carbon"][9] = (-3212,-2879,3807); + level.grnd_dropzones["mp_carbon"][10] = (-1623,-3339,3808); + level.grnd_dropzones["mp_carbon"][11] = (-1223,-4234,3834); + level.grnd_dropzones["mp_carbon"][12] = (-896,-4888,3944); + level.grnd_dropzones["mp_carbon"][13] = (-228,-4535,3975); + level.grnd_dropzones["mp_carbon"][14] = (-257,-3865,3956); + level.grnd_dropzones["mp_carbon"][15] = (-215,-3260,3967); + level.grnd_dropzones["mp_carbon"][16] = (-535,-3798,3966); + level.grnd_dropzones["mp_hardhat"][0] = (2125,-364,266); + level.grnd_dropzones["mp_hardhat"][1] = (1959,-772,352); + level.grnd_dropzones["mp_hardhat"][2] = (1883,-1384,351); + level.grnd_dropzones["mp_hardhat"][3] = (848,-1520,334); + level.grnd_dropzones["mp_hardhat"][4] = (1326,-1380,342); + level.grnd_dropzones["mp_hardhat"][5] = (-338,-1273,348); + level.grnd_dropzones["mp_hardhat"][6] = (-821,-884,348); + level.grnd_dropzones["mp_hardhat"][7] = (-920,-290,230); + level.grnd_dropzones["mp_hardhat"][8] = (-463,-250,333); + level.grnd_dropzones["mp_hardhat"][9] = (-741,208,245); + level.grnd_dropzones["mp_hardhat"][10] = (-201,806,437); + level.grnd_dropzones["mp_hardhat"][11] = (224,980,436); + level.grnd_dropzones["mp_hardhat"][12] = (1125,656,255); + level.grnd_dropzones["mp_hardhat"][13] = (1531,1241,364); + level.grnd_dropzones["mp_hardhat"][14] = (1522,542,244); + level.grnd_dropzones["mp_alpha"][0] = (-1979,1653,148); + level.grnd_dropzones["mp_alpha"][1] = (-1392,1623,60); + level.grnd_dropzones["mp_alpha"][2] = (-1697,1205,52); + level.grnd_dropzones["mp_alpha"][3] = (-1671,692,54); + level.grnd_dropzones["mp_alpha"][4] = (-572,-272,55); + level.grnd_dropzones["mp_alpha"][5] = (634,-345,52); + level.grnd_dropzones["mp_alpha"][6] = (391,121,60); + level.grnd_dropzones["mp_alpha"][7] = (291,1271,60); + level.grnd_dropzones["mp_alpha"][8] = (-459,868,52); + level.grnd_dropzones["mp_alpha"][9] = (-353,1334,52); + level.grnd_dropzones["mp_alpha"][10] = (-37,1637,52); + level.grnd_dropzones["mp_alpha"][11] = (-5,2226,52); + level.grnd_dropzones["mp_alpha"][12] = (-407,2198,196); + level.grnd_dropzones["mp_village"][0] = (647,1891,332); + level.grnd_dropzones["mp_village"][1] = (-26,1749,334); + level.grnd_dropzones["mp_village"][2] = (104,1292,323); + level.grnd_dropzones["mp_village"][3] = (-1064,1552,322); + level.grnd_dropzones["mp_village"][4] = (-599,886,378); + level.grnd_dropzones["mp_village"][5] = (-1038,569,317); + level.grnd_dropzones["mp_village"][6] = (-1899,1217,336); + level.grnd_dropzones["mp_village"][7] = (-1540,289,304); + level.grnd_dropzones["mp_village"][8] = (-454,-277,270); + level.grnd_dropzones["mp_village"][9] = (-1734,-790,365); + level.grnd_dropzones["mp_village"][10] = (-1418,-1371,431); + level.grnd_dropzones["mp_village"][11] = (-928,-749,417); + level.grnd_dropzones["mp_village"][12] = (-861,-2105,408); + level.grnd_dropzones["mp_village"][13] = (-191,-1550,400); + level.grnd_dropzones["mp_village"][14] = (357,-678,245); + level.grnd_dropzones["mp_village"][15] = (-216,295,223); + level.grnd_dropzones["mp_village"][16] = (162,-199,229); + level.grnd_dropzones["mp_village"][17] = (179,-3052,447); + level.grnd_dropzones["mp_village"][18] = (510,-1790,375); + level.grnd_dropzones["mp_village"][19] = (1089,-615,398); + level.grnd_dropzones["mp_village"][20] = (1631,394,297); + level.grnd_dropzones["mp_village"][21] = (1007,1385,337); + level.grnd_dropzones["mp_village"][22] = (992,248,330); + level.grnd_dropzones["mp_village"][23] = (551,732,386); + level.grnd_dropzones["mp_lambeth"][0] = (-293,-1286,-180); + level.grnd_dropzones["mp_lambeth"][1] = (-938,-785,-130); + level.grnd_dropzones["mp_lambeth"][2] = (-375,-250,-187); + level.grnd_dropzones["mp_lambeth"][3] = (-355,409,-196); + level.grnd_dropzones["mp_lambeth"][4] = (161,-5,-181); + level.grnd_dropzones["mp_lambeth"][5] = (682,-407,-197); + level.grnd_dropzones["mp_lambeth"][6] = (694,263,-196); + level.grnd_dropzones["mp_lambeth"][7] = (690,1158,-243); + level.grnd_dropzones["mp_lambeth"][8] = (1181,801,-67); + level.grnd_dropzones["mp_lambeth"][9] = (1281,1248,-257); + level.grnd_dropzones["mp_lambeth"][10] = (2057,757,-249); + level.grnd_dropzones["mp_lambeth"][11] = (1470,-1040,-109); + level.grnd_dropzones["mp_lambeth"][12] = (1761,-258,-210); + level.grnd_dropzones["mp_lambeth"][13] = (2800,-652,-186); + level.grnd_dropzones["mp_lambeth"][14] = (2785,445,-244); + level.grnd_dropzones["mp_lambeth"][15] = (2751,1090,-263); + level.grnd_dropzones["mp_lambeth"][16] = (1535,1980,-214); + level.grnd_dropzones["mp_lambeth"][17] = (1262,2602,-213); + level.grnd_dropzones["mp_lambeth"][18] = (419,2218,-183); + level.grnd_dropzones["mp_lambeth"][19] = (170,1631,-182); + level.grnd_dropzones["mp_lambeth"][20] = (-606,1549,-201); + level.grnd_dropzones["mp_lambeth"][21] = (-1199,1030,-196); + level.grnd_dropzones["mp_radar"][0] = (-3482,-498,1222); + level.grnd_dropzones["mp_radar"][1] = (-4263,-124,1229); + level.grnd_dropzones["mp_radar"][2] = (-4006,827,1238); + level.grnd_dropzones["mp_radar"][3] = (-3375,342,1222); + level.grnd_dropzones["mp_radar"][4] = (-4623,531,1298); + level.grnd_dropzones["mp_radar"][5] = (-5157,877,1200); + level.grnd_dropzones["mp_radar"][6] = (-5950,1071,1305); + level.grnd_dropzones["mp_radar"][7] = (-6509,1660,1299); + level.grnd_dropzones["mp_radar"][8] = (-7013,2955,1359); + level.grnd_dropzones["mp_radar"][9] = (-6333,3473,1421); + level.grnd_dropzones["mp_radar"][10] = (-5675,2923,1388); + level.grnd_dropzones["mp_radar"][11] = (-7119,4357,1380); + level.grnd_dropzones["mp_radar"][12] = (-5487,4077,1356); + level.grnd_dropzones["mp_radar"][13] = (-5736,2960,1407); + level.grnd_dropzones["mp_radar"][14] = (-4908,3281,1225); + level.grnd_dropzones["mp_radar"][15] = (-4421,4071,1268); + level.grnd_dropzones["mp_radar"][16] = (-4979,1816,1205); + level.grnd_dropzones["mp_radar"][17] = (-4874,2306,1223); + level.grnd_dropzones["mp_interchange"][0] = (2465,-402,149); + level.grnd_dropzones["mp_interchange"][1] = (2128,199,68); + level.grnd_dropzones["mp_interchange"][2] = (1280,1263,126); + level.grnd_dropzones["mp_interchange"][3] = (762,1747,114); + level.grnd_dropzones["mp_interchange"][4] = (-9,1836,38); + level.grnd_dropzones["mp_interchange"][5] = (-284,1171,159); + level.grnd_dropzones["mp_interchange"][6] = (-1028,944,31); + level.grnd_dropzones["mp_interchange"][7] = (-256,264,126); + level.grnd_dropzones["mp_interchange"][8] = (462,-463,158); + level.grnd_dropzones["mp_interchange"][9] = (1029,-1045,179); + level.grnd_dropzones["mp_interchange"][10] = (1760,-1434,142); + level.grnd_dropzones["mp_interchange"][11] = (1538,-361,142); + level.grnd_dropzones["mp_interchange"][12] = (1150,-2977,171); + level.grnd_dropzones["mp_interchange"][13] = (371,-2883,209); + level.grnd_dropzones["mp_interchange"][14] = (399,-2149,220); + level.grnd_dropzones["mp_underground"][0] = (-602,3072,-68); + level.grnd_dropzones["mp_underground"][1] = (-285,2551,-215); + level.grnd_dropzones["mp_underground"][2] = (574,2656,-40); + level.grnd_dropzones["mp_underground"][3] = (-627,1579,-196); + level.grnd_dropzones["mp_underground"][4] = (28,1556,-196); + level.grnd_dropzones["mp_underground"][5] = (727,1615,-196); + level.grnd_dropzones["mp_underground"][6] = (-1491,1268,-196); + level.grnd_dropzones["mp_underground"][7] = (-1370,1757,-196); + level.grnd_dropzones["mp_underground"][8] = (-1259,599,-156); + level.grnd_dropzones["mp_underground"][9] = (-959,-26,60); + level.grnd_dropzones["mp_underground"][10] = (-303,-562,60); + level.grnd_dropzones["mp_underground"][11] = (193,-922,60); + level.grnd_dropzones["mp_underground"][12] = (305,817,-68); + level.grnd_dropzones["mp_underground"][13] = (-276,370,-68); + level.grnd_dropzones["mp_bravo"][0] = (-1359,608,975); + level.grnd_dropzones["mp_bravo"][1] = (-1686,313,991); + level.grnd_dropzones["mp_bravo"][2] = (-1228,41,976); + level.grnd_dropzones["mp_bravo"][3] = (-732,-715,1032); + level.grnd_dropzones["mp_bravo"][4] = (31,-771,1038); + level.grnd_dropzones["mp_bravo"][5] = (986,-833,1116); + level.grnd_dropzones["mp_bravo"][6] = (1800,-577,1229); + level.grnd_dropzones["mp_bravo"][7] = (1588,-55,1181); + level.grnd_dropzones["mp_bravo"][8] = (619,916,1175); + level.grnd_dropzones["mp_bravo"][9] = (-129,1310,1228); + level.grnd_dropzones["mp_bravo"][10] = (-726,1272,1268); + level.grnd_dropzones["mp_bravo"][11] = (-741,752,1053); + level.grnd_dropzones["mp_bravo"][12] = (6,-136,1282); +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/gametypes/gtnw.gsc b/MW3/PC/MP/maps/mp/gametypes/gtnw.gsc new file mode 100644 index 0000000..449f0ae --- /dev/null +++ b/MW3/PC/MP/maps/mp/gametypes/gtnw.gsc @@ -0,0 +1,488 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\gtnw.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 21 + * Decompile Time: 286 ms + * Timestamp: 10/27/2023 2:13:16 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + maps\mp\gametypes\_globallogic::init(); + maps\mp\gametypes\_callbacksetup::setupcallbacks(); + maps\mp\gametypes\_globallogic::setupcallbacks(); + maps\mp\_utility::registertimelimitdvar(level.gametype,3,0,1440); + maps\mp\_utility::registerscorelimitdvar(level.gametype,101,0,10000); + maps\mp\_utility::registerroundlimitdvar(level.gametype,1,0,30); + maps\mp\_utility::registerwinlimitdvar(level.gametype,1,0,10); + maps\mp\_utility::registerroundswitchdvar(level.gametype,0,0,30); + maps\mp\_utility::registernumlivesdvar(level.gametype,0,0,10); + maps\mp\_utility::registerhalftimedvar(level.gametype,0,0,1); + level.teambased = 1; + level.onprecachegametype = ::onprecachegametype; + level.onstartgametype = ::onstartgametype; + level.getspawnpoint = ::getspawnpoint; + level.ondeadevent = ::ondeadevent; + level.initgametypeawards = ::initgametypeawards; + level.ontimelimit = ::ontimelimit; + level.onnormaldeath = ::onnormaldeath; + level.gtnw = 1; + game["dialog"]["gametype"] = "gtw"; + if(getdvarint("g_hardcore")) + { + game["dialog"]["gametype"] = "hc_" + game["dialog"]["gametype"]; + } + else if(getdvarint("camera_thirdPerson")) + { + game["dialog"]["gametype"] = "thirdp_" + game["dialog"]["gametype"]; + } + else if(getdvarint("scr_diehard")) + { + game["dialog"]["gametype"] = "dh_" + game["dialog"]["gametype"]; + } + else if(getdvarint("scr_" + level.gametype + "_promode")) + { + game["dialog"]["gametype"] = game["dialog"]["gametype"] + "_pro"; + } + + game["dialog"]["offense_obj"] = "obj_destroy"; + game["dialog"]["defense_obj"] = "obj_defend"; + level thread onplayerconnect(); +} + +//Function Number: 2 +func_3A82(param_00,param_01) +{ + thread maps\mp\gametypes\_gamelogic::endgame(param_00,param_01); +} + +//Function Number: 3 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_01 = var_00 maps\mp\gametypes\_hud_util::createprimaryprogressbar(); + var_02 = var_00 maps\mp\gametypes\_hud_util::createprimaryprogressbartext(); + var_02 settext(&"MP_CAPTURING_NUKE"); + var_01.usetime = 100; + var_00.usebar = var_01; + var_00.usebar maps\mp\gametypes\_hud_util::hideelem(); + var_00.usebartext = var_02; + var_00.usebartext maps\mp\gametypes\_hud_util::hideelem(); + } +} + +//Function Number: 4 +onstartgametype() +{ + if(!isdefined(game["switchedsides"])) + { + game["switchedsides"] = 0; + } + + if(!isdefined(game["original_defenders"])) + { + game["original_defenders"] = game["defenders"]; + } + + if(game["switchedsides"]) + { + var_00 = game["attackers"]; + var_01 = game["defenders"]; + game["attackers"] = var_01; + game["defenders"] = var_00; + } + + setclientnamemode("auto_change"); + if(level.splitscreen) + { + maps\mp\_utility::setobjectivescoretext(game["attackers"],&"OBJECTIVES_GTNW"); + maps\mp\_utility::setobjectivescoretext(game["defenders"],&"OBJECTIVES_GTNW"); + } + else + { + maps\mp\_utility::setobjectivescoretext(game["attackers"],&"OBJECTIVES_GTNW_SCORE"); + maps\mp\_utility::setobjectivescoretext(game["defenders"],&"OBJECTIVES_GTNW_SCORE"); + } + + maps\mp\_utility::setobjectivetext(game["attackers"],&"OBJECTIVES_GTNW"); + maps\mp\_utility::setobjectivetext(game["defenders"],&"OBJECTIVES_GTNW"); + maps\mp\_utility::setobjectivehinttext(game["attackers"],&"OBJECTIVES_GTNW_HINT"); + maps\mp\_utility::setobjectivehinttext(game["defenders"],&"OBJECTIVES_GTNW_HINT"); + level.spawnmins = (0,0,0); + level.spawnmaxs = (0,0,0); + maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_ctf_spawn_allies_start"); + maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_ctf_spawn_axis_start"); + maps\mp\gametypes\_spawnlogic::addspawnpoints("allies","mp_ctf_spawn_allies"); + maps\mp\gametypes\_spawnlogic::addspawnpoints("axis","mp_ctf_spawn_axis"); + level.mapcenter = maps\mp\gametypes\_spawnlogic::findboxcenter(level.spawnmins,level.spawnmaxs); + setmapcenter(level.mapcenter); + maps\mp\gametypes\_rank::registerscoreinfo("kill",50); + maps\mp\gametypes\_rank::registerscoreinfo("headshot",100); + maps\mp\gametypes\_rank::registerscoreinfo("assist",20); + maps\mp\gametypes\_rank::registerscoreinfo("capture",500); + var_02[0] = "airdrop_pallet"; + maps\mp\gametypes\_gameobjects::main(var_7B); + thread func_3A85(); +} + +//Function Number: 5 +onprecachegametype() +{ + precacheshader("waypoint_defend"); + precacheshader("waypoint_target"); + precacheshader("waypoint_capture"); + precacheshader("compass_waypoint_target"); + precacheshader("compass_waypoint_defend"); + precacheshader("compass_waypoint_capture"); + precachestring(&"MP_CAPTURING_NUKE"); +} + +//Function Number: 6 +func_3A85() +{ + level.laststatus["allies"] = 0; + level.laststatus["axis"] = 0; + var_00 = getent("gtnw_zone","targetname"); + var_01 = []; + var_02 = maps\mp\gametypes\_gameobjects::createuseobject("neutral",var_00,var_01,(0,0,100)); + var_02 maps\mp\gametypes\_gameobjects::set2dicon("friendly","compass_waypoint_defend"); + var_02 maps\mp\gametypes\_gameobjects::set3dicon("friendly","waypoint_defend"); + var_02 maps\mp\gametypes\_gameobjects::set2dicon("enemy","compass_waypoint_captureneutral"); + var_02 maps\mp\gametypes\_gameobjects::set3dicon("enemy","waypoint_captureneutral"); + var_02 maps\mp\gametypes\_gameobjects::allowuse("enemy"); + var_02.nousebar = 1; + var_02 maps\mp\gametypes\_gameobjects::setvisibleteam("any"); + var_02.onbeginuse = ::onbeginuse; + var_02.onenduse = ::onenduse; + level.nukesite = var_02; + var_02 thread func_3A88(); +} + +//Function Number: 7 +getspawnpoint() +{ + if(self.team == "axis") + { + var_00 = game["attackers"]; + } + else + { + var_00 = game["defenders"]; + } + + if(level.ingraceperiod) + { + var_01 = getentarray("mp_ctf_spawn_" + var_00 + "_start","classname"); + var_02 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random(var_01); + } + else + { + var_01 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints(var_02); + var_02 = maps\mp\gametypes\_spawnlogic::getspawnpoint_nearteam(var_02); + } + + return var_02; +} + +//Function Number: 8 +spawnfxdelay(param_00,param_01,param_02,param_03,param_04) +{ + wait param_04; + var_05 = spawnfx(param_00,param_01,param_02,param_03); + triggerfx(var_05); +} + +//Function Number: 9 +ondeadevent(param_00) +{ + if((isdefined(level.nukeincoming) && level.nukeincoming) || isdefined(level.nukedetonated) && level.nukedetonated) + { + return; + } + + if(param_00 == game["attackers"]) + { + lib_036E::func_2B88(param_00,1); + level thread func_3A82(game["defenders"],game["strings"][game["attackers"] + "_eliminated"]); + return; + } + + if(param_00 == game["defenders"]) + { + lib_036E::func_2B88(param_00,1); + level thread func_3A82(game["attackers"],game["strings"][game["defenders"] + "_eliminated"]); + } +} + +//Function Number: 10 +initgametypeawards() +{ +} + +//Function Number: 11 +ontimelimit() +{ + if(game["teamScores"]["allies"] == game["teamScores"]["axis"]) + { + level thread func_3984(); + return; + } + + if(game["teamScores"]["axis"] > game["teamScores"]["allies"]) + { + thread maps\mp\gametypes\_gamelogic::endgame("axis",game["strings"]["time_limit_reached"]); + return; + } + + if(game["teamScores"]["axis"] < game["teamScores"]["allies"]) + { + thread maps\mp\gametypes\_gamelogic::endgame("allies",game["strings"]["time_limit_reached"]); + return; + } +} + +//Function Number: 12 +func_3984(param_00) +{ + level endon("game_ended"); + level.inovertime = 1; + level thread disablespawning(5); + level.endgametime = 120; + param_00 = level.endgametime; + foreach(var_02 in level.players) + { + var_02 thread maps\mp\gametypes\_hud_message::splashnotify("gtnw_overtime"); + } + + maps\mp\gametypes\_gamelogic::pausetimer(); + level.timelimitoverride = 1; + setgameendtime(int(gettime() + level.endgametime * 1000)); + maps\mp\gametypes\_hostmigration::waitlongdurationwithgameendtimeupdate(param_00); + if(game["teamScores"]["axis"] > game["teamScores"]["allies"]) + { + thread maps\mp\gametypes\_gamelogic::endgame("axis",game["strings"]["time_limit_reached"]); + return; + } + + if(game["teamScores"]["axis"] < game["teamScores"]["allies"]) + { + thread maps\mp\gametypes\_gamelogic::endgame("allies",game["strings"]["time_limit_reached"]); + return; + } + + thread maps\mp\gametypes\_gamelogic::endgame("tie",game["strings"]["time_limit_reached"]); +} + +//Function Number: 13 +disablespawning(param_00) +{ + level endon("game_ended"); + wait 5; + level.disablespawning = 1; +} + +//Function Number: 14 +onbeginuse(param_00) +{ + param_00.usebar maps\mp\gametypes\_hud_util::showelem(); + param_00.usebartext maps\mp\gametypes\_hud_util::showelem(); +} + +//Function Number: 15 +onenduse(param_00,param_01,param_02) +{ + param_01.usebar maps\mp\gametypes\_hud_util::hideelem(); + param_01.usebartext maps\mp\gametypes\_hud_util::hideelem(); +} + +//Function Number: 16 +func_3A88() +{ + level endon("game_ended"); + self endon("stop_counting"); + for(;;) + { + if(!self.touchlist["axis"].size && !self.touchlist["allies"].size) + { + setdvar("ui_danger_team","none"); + maps\mp\gametypes\_gameobjects::set2dicon("enemy","compass_waypoint_captureneutral"); + maps\mp\gametypes\_gameobjects::set3dicon("enemy","waypoint_captureneutral"); + maps\mp\gametypes\_gameobjects::setownerteam("none"); + func_3A8B(); + wait 1; + continue; + } + + maps\mp\gametypes\_gameobjects::set2dicon("friendly","compass_waypoint_defend"); + maps\mp\gametypes\_gameobjects::set3dicon("friendly","waypoint_defend"); + maps\mp\gametypes\_gameobjects::set2dicon("enemy","compass_waypoint_capture"); + maps\mp\gametypes\_gameobjects::set3dicon("enemy","waypoint_capture"); + if(self.touchlist["axis"].size > self.touchlist["allies"].size) + { + if(lib_036E::func_2B96("axis") < 100) + { + lib_036E::func_2B88("axis",1); + } + + thread func_3A8A("axis"); + setdvar("ui_danger_team","allies"); + maps\mp\gametypes\_gameobjects::setownerteam("axis"); + if(lib_036E::func_2B96("axis") >= 100) + { + maps\mp\gametypes\_gameobjects::allowuse("none"); + func_3A89("axis"); + self notify("stop_counting"); + } + } + else if(self.touchlist["axis"].size < self.touchlist["allies"].size) + { + if(lib_036E::func_2B96("allies") < 100) + { + lib_036E::func_2B88("allies",1); + } + + thread func_3A8A("allies"); + setdvar("ui_danger_team","axis"); + maps\mp\gametypes\_gameobjects::setownerteam("allies"); + if(lib_036E::func_2B96("allies") >= 100) + { + maps\mp\gametypes\_gameobjects::allowuse("none"); + func_3A89("allies"); + self notify("stop_counting"); + } + } + else + { + maps\mp\gametypes\_gameobjects::set2dicon("enemy","compass_waypoint_captureneutral"); + maps\mp\gametypes\_gameobjects::set3dicon("enemy","waypoint_captureneutral"); + maps\mp\gametypes\_gameobjects::setownerteam("none"); + setdvar("ui_danger_team","contested"); + } + + func_3A8B(); + wait 1; + } +} + +//Function Number: 17 +func_3A89(param_00) +{ + func_3944(self.touchlist[param_00]); + maps\mp\gametypes\_gameobjects::setvisibleteam("none"); + maps\mp\gametypes\_gameobjects::allowuse("none"); + var_01 = 99999999; + var_02 = undefined; + foreach(var_04 in level.players) + { + if(!isdefined(var_04)) + { + continue; + } + + var_04.usebar maps\mp\gametypes\_hud_util::hideelem(); + var_04.usebartext maps\mp\gametypes\_hud_util::hideelem(); + if(var_04.team != param_00) + { + continue; + } + + if(!isdefined(self.touchlist[param_00][var_04.guid])) + { + continue; + } + + var_05 = self.touchlist[param_00][var_04.guid].starttime; + if(var_05 < var_01) + { + var_02 = var_04; + var_01 = var_05; + } + } + + var_02 maps\mp\killstreaks\_nuke::tryusenuke(1); +} + +//Function Number: 18 +func_3944(param_00) +{ + level endon("game_ended"); + wait 0.05; + maps\mp\_utility::waittillslowprocessallowed(); + var_01 = getarraykeys(param_00); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + var_03 = param_00[var_01[var_02]].player; + var_03 thread maps\mp\gametypes\_hud_message::splashnotify("captured_nuke",maps\mp\gametypes\_rank::getscoreinfovalue("capture")); + var_03 thread [[ level.onxpevent ]]("capture"); + lib_036E::func_2B7B("capture",var_03); + } +} + +//Function Number: 19 +func_3A8A(param_00) +{ + var_01 = getteamscore(param_00); + foreach(var_03 in level.players) + { + if(!isdefined(var_03)) + { + continue; + } + + if(var_03.team != param_00) + { + continue; + } + + if(!isdefined(self.touchlist[param_00][var_03.guid])) + { + continue; + } + + var_03.usebar maps\mp\gametypes\_hud_util::updatebar(var_01 / 100,0); + } +} + +//Function Number: 20 +func_3A8B() +{ + foreach(var_01 in level.players) + { + if(!isdefined(var_01)) + { + continue; + } + + if(!isdefined(self.touchlist["axis"][var_01.guid]) && !isdefined(self.touchlist["allies"][var_01.guid])) + { + var_01.usebar maps\mp\gametypes\_hud_util::hideelem(); + var_01.usebartext maps\mp\gametypes\_hud_util::hideelem(); + } + + if(isdefined(self.touchlist["axis"][var_01.guid]) || isdefined(self.touchlist["allies"][var_01.guid])) + { + var_01.usebar maps\mp\gametypes\_hud_util::showelem(); + var_01.usebartext maps\mp\gametypes\_hud_util::showelem(); + } + } +} + +//Function Number: 21 +onnormaldeath(param_00,param_01,param_02) +{ + if(!isdefined(level.inovertime) || !level.inovertime) + { + return; + } + + var_03 = param_00.team; + if(game["state"] == "postgame") + { + param_01.finalkill = 1; + } +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/gametypes/gun.gsc b/MW3/PC/MP/maps/mp/gametypes/gun.gsc new file mode 100644 index 0000000..4bf1930 --- /dev/null +++ b/MW3/PC/MP/maps/mp/gametypes/gun.gsc @@ -0,0 +1,641 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\gun.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 23 + * Decompile Time: 311 ms + * Timestamp: 10/27/2023 2:13:17 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + maps\mp\gametypes\_globallogic::init(); + maps\mp\gametypes\_callbacksetup::setupcallbacks(); + maps\mp\gametypes\_globallogic::setupcallbacks(); + func_3A48(); + if(isusingmatchrulesdata()) + { + level.initializematchrules = ::initializematchrules; + [[ level.initializematchrules ]](); + level thread maps\mp\_utility::reinitializematchrulesonmigration(); + } + else + { + maps\mp\_utility::registertimelimitdvar(level.gametype,10); + setdynamicdvar("scr_gun_scorelimit",level.gun_guns.size); + maps\mp\_utility::registerscorelimitdvar(level.gametype,level.gun_guns.size); + level thread func_01C0(); + maps\mp\_utility::registerroundlimitdvar(level.gametype,1); + maps\mp\_utility::registerwinlimitdvar(level.gametype,0); + maps\mp\_utility::registernumlivesdvar(level.gametype,0); + maps\mp\_utility::registerhalftimedvar(level.gametype,0); + level.matchrules_randomize = 0; + level.matchrules_damagemultiplier = 0; + level.matchrules_vampirism = 0; + } + + func_3972(); + level.teambased = 0; + level.doprematch = 1; + level.killstreakrewards = 0; + level.onprecachegametype = ::onprecachegametype; + level.onstartgametype = ::onstartgametype; + level.onspawnplayer = ::onspawnplayer; + level.getspawnpoint = ::getspawnpoint; + level.onplayerkilled = ::onplayerkilled; + level.ontimelimit = ::ontimelimit; + if(level.matchrules_damagemultiplier || level.matchrules_vampirism) + { + level.modifyplayerdamage = ::maps\mp\gametypes\_damage::gamemodemodifyplayerdamage; + } +} + +//Function Number: 2 +initializematchrules() +{ + maps\mp\_utility::setcommonrulesfrommatchrulesdata(1); + level.matchrules_randomize = getmatchrulesdata("gunData","randomize"); + setdynamicdvar("scr_gun_scorelimit",level.gun_guns.size); + maps\mp\_utility::registerscorelimitdvar(level.gametype,level.gun_guns.size); + setdynamicdvar("scr_gun_winlimit",1); + maps\mp\_utility::registerwinlimitdvar("gun",1); + setdynamicdvar("scr_gun_roundlimit",1); + maps\mp\_utility::registerroundlimitdvar("gun",1); + setdynamicdvar("scr_gun_halftime",0); + maps\mp\_utility::registerhalftimedvar("gun",0); + setdynamicdvar("scr_gun_promode",0); +} + +//Function Number: 3 +func_01C0() +{ + setdynamicdvar("scr_gun_scorelimit",level.gun_guns.size); + maps\mp\_utility::registerscorelimitdvar(level.gametype,level.gun_guns.size); +} + +//Function Number: 4 +onprecachegametype() +{ + precachestring(&"MP_GUN"); +} + +//Function Number: 5 +onstartgametype() +{ + setclientnamemode("auto_change"); + maps\mp\_utility::setobjectivetext("allies",&"OBJECTIVES_DM"); + maps\mp\_utility::setobjectivetext("axis",&"OBJECTIVES_DM"); + if(level.splitscreen) + { + maps\mp\_utility::setobjectivescoretext("allies",&"OBJECTIVES_DM"); + maps\mp\_utility::setobjectivescoretext("axis",&"OBJECTIVES_DM"); + } + else + { + maps\mp\_utility::setobjectivescoretext("allies",&"OBJECTIVES_DM_SCORE"); + maps\mp\_utility::setobjectivescoretext("axis",&"OBJECTIVES_DM_SCORE"); + } + + maps\mp\_utility::setobjectivehinttext("allies",&"OBJECTIVES_DM_HINT"); + maps\mp\_utility::setobjectivehinttext("axis",&"OBJECTIVES_DM_HINT"); + level.spawnmins = (0,0,0); + level.spawnmaxs = (0,0,0); + maps\mp\gametypes\_spawnlogic::addspawnpoints("allies","mp_dm_spawn"); + maps\mp\gametypes\_spawnlogic::addspawnpoints("axis","mp_dm_spawn"); + level.mapcenter = maps\mp\gametypes\_spawnlogic::findboxcenter(level.spawnmins,level.spawnmaxs); + setmapcenter(level.mapcenter); + maps\mp\gametypes\_rank::registerscoreinfo("kill",0); + maps\mp\gametypes\_rank::registerscoreinfo("assist",0); + maps\mp\gametypes\_rank::registerscoreinfo("suicide",0); + maps\mp\gametypes\_rank::registerscoreinfo("teamkill",0); + maps\mp\gametypes\_rank::registerscoreinfo("headshot",0); + maps\mp\gametypes\_rank::registerscoreinfo("execution",0); + maps\mp\gametypes\_rank::registerscoreinfo("avenger",0); + maps\mp\gametypes\_rank::registerscoreinfo("defender",0); + maps\mp\gametypes\_rank::registerscoreinfo("posthumous",0); + maps\mp\gametypes\_rank::registerscoreinfo("revenge",0); + maps\mp\gametypes\_rank::registerscoreinfo("double",0); + maps\mp\gametypes\_rank::registerscoreinfo("triple",0); + maps\mp\gametypes\_rank::registerscoreinfo("multi",0); + maps\mp\gametypes\_rank::registerscoreinfo("buzzkill",0); + maps\mp\gametypes\_rank::registerscoreinfo("firstblood",0); + maps\mp\gametypes\_rank::registerscoreinfo("comeback",0); + maps\mp\gametypes\_rank::registerscoreinfo("longshot",0); + maps\mp\gametypes\_rank::registerscoreinfo("assistedsuicide",0); + maps\mp\gametypes\_rank::registerscoreinfo("knifethrow",0); + maps\mp\gametypes\_rank::registerscoreinfo("gained_gun_score",1); + maps\mp\gametypes\_rank::registerscoreinfo("dropped_gun_score",-1); + maps\mp\gametypes\_rank::registerscoreinfo("gained_gun_rank",100); + maps\mp\gametypes\_rank::registerscoreinfo("dropped_enemy_gun_rank",100); + var_00 = []; + maps\mp\gametypes\_gameobjects::main(var_00); + level.quickmessagetoall = 1; + level.blockweapondrops = 1; + level thread onplayerconnect(); + level.killstreakrewards = 0; +} + +//Function Number: 6 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_00.gun_firstspawn = 1; + var_00.gungamegunindex = 0; + var_00.gungameprevgunindex = 0; + var_00 func_3A43(); + if(level.matchrules_randomize) + { + var_00.gun_nextguns = level.gun_guns; + var_00.gun_prevguns = []; + } + + var_00 thread refillammo(); + var_00 thread func_3A42(); + } +} + +//Function Number: 7 +getspawnpoint() +{ + if(self.gun_firstspawn) + { + self.gun_firstspawn = 0; + self.pers["class"] = "gamemode"; + self.pers["lastClass"] = ""; + self.class = self.pers["class"]; + self.lastclass = self.pers["lastClass"]; + if(common_scripts\utility::cointoss()) + { + maps\mp\gametypes\_menus::addtoteam("axis",1); + } + else + { + maps\mp\gametypes\_menus::addtoteam("allies",1); + } + } + + var_00 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints(self.pers["team"]); + var_01 = maps\mp\gametypes\_spawnlogic::getspawnpoint_dm(var_00); + return var_01; +} + +//Function Number: 8 +onspawnplayer() +{ + self.pers["gamemodeLoadout"] = level.gun_loadouts[self.pers["team"]]; + thread func_39EB(); + level notify("spawned_player"); +} + +//Function Number: 9 +func_39EB() +{ + level endon("game_ended"); + self endon("disconnect"); + level waittill("player_spawned"); + maps\mp\_utility::giveperk("specialty_bling",0); + func_3A3F(1); +} + +//Function Number: 10 +onplayerkilled(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09) +{ + if(param_03 == "MOD_FALLING" || isdefined(param_01) && isplayer(param_01)) + { + if(param_03 == "MOD_FALLING" || param_01 == self || param_03 == "MOD_MELEE" && param_04 != "riotshield_mp") + { + self playlocalsound("mp_war_objective_lost"); + self.gungameprevgunindex = self.gungamegunindex; + self.gungamegunindex = int(max(0,self.gungamegunindex - 1)); + if(self.gungameprevgunindex > self.gungamegunindex) + { + lib_036E::func_2B7B("dropped_gun_score",self,undefined,1,1); + } + + if(param_03 == "MOD_MELEE") + { + if(self.gungameprevgunindex) + { + param_01 thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_DROPPED_ENEMY_GUN_RANK"); + param_01 thread maps\mp\gametypes\_rank::giverankxp("dropped_enemy_gun_rank"); + return; + } + + return; + } + + return; + } + + if(param_03 == "MOD_PISTOL_BULLET" || param_03 == "MOD_RIFLE_BULLET" || param_03 == "MOD_HEAD_SHOT" || param_03 == "MOD_PROJECTILE" || param_03 == "MOD_PROJECTILE_SPLASH" || param_03 == "MOD_IMPACT" || param_03 == "MOD_GRENADE" || param_03 == "MOD_GRENADE_SPLASH" || param_03 == "MOD_MELEE" && param_04 == "riotshield_mp") + { + if(param_04 != param_01.primaryweapon) + { + return; + } + + param_01.gungameprevgunindex = param_01.gungamegunindex; + param_01.gungamegunindex++; + param_01 thread maps\mp\gametypes\_rank::giverankxp("gained_gun_rank"); + lib_036E::func_2B7B("gained_gun_score",param_01,self,1,1); + if(param_01.gungamegunindex == level.gun_guns.size - 1) + { + maps\mp\_utility::playsoundonplayers("mp_enemy_obj_captured"); + level thread maps\mp\_utility::teamplayercardsplash("callout_top_gun_rank",param_01); + } + + if(param_01.gungamegunindex < level.gun_guns.size) + { + param_01 playlocalsound("mp_war_objective_taken"); + param_01 func_3A3F(); + return; + } + + return; + } + } +} + +//Function Number: 11 +func_3A3F(param_00) +{ + var_01 = func_0173(); + self.gun_curgun = var_01; + var_01 = func_0174(var_01); + self takeallweapons(); + maps\mp\_utility::_giveweapon(var_01); + if(isdefined(param_00)) + { + self setspawnweapon(var_01); + } + + var_02 = strtok(var_01,"_"); + if(var_02[0] == "iw5") + { + var_03 = var_02[0] + "_" + var_02[1]; + } + else if(var_03[0] == "alt") + { + var_03 = var_03[1] + "_" + var_03[2]; + } + else + { + var_03 = var_03[0]; + } + + self.pers["primaryWeapon"] = var_03; + self.primaryweapon = var_01; + self givestartammo(var_01); + self switchtoweapon(var_01); + if(self.gungameprevgunindex > self.gungamegunindex) + { + thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_DROPPED_GUN_RANK"); + } + else if(self.gungameprevgunindex < self.gungamegunindex) + { + thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_GAINED_GUN_RANK"); + } + + self.gungameprevgunindex = self.gungamegunindex; + func_3A45(); +} + +//Function Number: 12 +func_0173() +{ + if(level.matchrules_randomize) + { + if(self.gungameprevgunindex < self.gungamegunindex) + { + var_00 = randomint(self.gun_nextguns.size); + var_01 = self.gun_nextguns[var_00]; + self.gun_prevguns[self.gun_prevguns.size] = self.gun_nextguns[var_00]; + self.gun_nextguns[var_00] = undefined; + self.gun_nextguns = common_scripts\utility::array_removeundefined(self.gun_nextguns); + } + else if(self.gungameprevgunindex > self.gungamegunindex) + { + if(self.gun_prevguns.size > 1) + { + for(var_02 = 0;var_02 < self.gun_prevguns.size;var_02++) + { + if(self.gun_prevguns[var_02] == self.gun_curgun) + { + break; + } + } + + self.gun_nextguns[self.gun_nextguns.size] = self.gun_prevguns[var_02]; + self.gun_prevguns[var_02] = undefined; + self.gun_prevguns = common_scripts\utility::array_removeundefined(self.gun_prevguns); + } + + var_00 = randomint(self.gun_prevguns.size); + var_01 = self.gun_prevguns[var_00]; + } + else if(self.gun_prevguns.size) + { + var_00 = randomint(self.gun_prevguns.size); + var_01 = self.gun_prevguns[var_00]; + } + else + { + var_00 = randomint(self.gun_nextguns.size); + var_01 = self.gun_nextguns[var_00]; + self.gun_prevguns[self.gun_prevguns.size] = self.gun_nextguns[var_00]; + self.gun_nextguns[var_00] = undefined; + self.gun_nextguns = common_scripts\utility::array_removeundefined(self.gun_nextguns); + } + } + else + { + var_01 = level.gun_guns[self.gungamegunindex]; + } + + return var_01; +} + +//Function Number: 13 +func_0174(param_00) +{ + if(isdefined(level.gun_attachments[param_00]) && isdefined(level.gun_attachments[param_00]["attach1"])) + { + var_01 = level.gun_attachments[param_00]["attach1"]; + } + else + { + var_01 = "none"; + } + + if(isdefined(level.gun_attachments[param_00]) && isdefined(level.gun_attachments[param_00]["attach2"])) + { + var_02 = level.gun_attachments[param_00]["attach2"]; + } + else + { + var_02 = "none"; + } + + var_03 = maps\mp\gametypes\_class::buildweaponname(param_00,var_01,var_02,0,0); + return var_03; +} + +//Function Number: 14 +ontimelimit() +{ + level.finalkillcam_winner = "none"; + var_00 = func_03B6(); + if(!isdefined(var_00) || !var_00.size) + { + thread maps\mp\gametypes\_gamelogic::endgame("tie",game["strings"]["time_limit_reached"]); + return; + } + + if(var_00.size == 1) + { + thread maps\mp\gametypes\_gamelogic::endgame(var_00[0],game["strings"]["time_limit_reached"]); + return; + } + + if(var_00[var_00.size - 1].gungamegunindex > var_00[var_00.size - 2].gungamegunindex) + { + thread maps\mp\gametypes\_gamelogic::endgame(var_00[var_00.size - 1],game["strings"]["time_limit_reached"]); + return; + } + + thread maps\mp\gametypes\_gamelogic::endgame("tie",game["strings"]["time_limit_reached"]); +} + +//Function Number: 15 +func_03B6() +{ + var_00 = -1; + var_01 = []; + foreach(var_03 in level.players) + { + if(isdefined(var_03.gungamegunindex) && var_03.gungamegunindex >= var_00) + { + var_00 = var_03.gungamegunindex; + var_01[var_01.size] = var_03; + } + } + + return var_01; +} + +//Function Number: 16 +refillammo() +{ + level endon("game_ended"); + self endon("disconnect"); + for(;;) + { + self waittill("reload"); + self givestartammo(self.primaryweapon); + } +} + +//Function Number: 17 +func_3A42() +{ + level endon("game_ended"); + self endon("disconnect"); + for(;;) + { + if(maps\mp\_utility::isreallyalive(self) && self.team != "spectator" && isdefined(self.primaryweapon) && self getammocount(self.primaryweapon) == 0) + { + wait 2; + self notify("reload"); + wait 1; + continue; + } + + wait 0.05; + } +} + +//Function Number: 18 +func_3A43() +{ + if(level.splitscreen) + { + self.gun_progressdisplay[0] = maps\mp\gametypes\_hud_util::createfontstring("small",1.2); + self.gun_progressdisplay[0] maps\mp\gametypes\_hud_util::setpoint("TOP LEFT","TOP LEFT",80,0); + self.gun_progressdisplay[0] settext(&"MP_WEAPON"); + self.gun_progressdisplay[0].alpha = 1; + self.gun_progressdisplay[0].archived = 0; + self.gun_progressdisplay[0].hidewheninmenu = 1; + self.gun_progressdisplay[1] = maps\mp\gametypes\_hud_util::createfontstring("small",1.2); + self.gun_progressdisplay[1] maps\mp\gametypes\_hud_util::setpoint("TOP LEFT","TOP LEFT",80,12); + self.gun_progressdisplay[1] settext("1 / " + level.gun_guns.size); + self.gun_progressdisplay[1].alpha = 1; + self.gun_progressdisplay[1].archived = 0; + self.gun_progressdisplay[1].hidewheninmenu = 1; + } + else + { + self.gun_progressdisplay[0] = maps\mp\gametypes\_hud_util::createfontstring("small",1.2); + self.gun_progressdisplay[0] maps\mp\gametypes\_hud_util::setpoint("TOP LEFT","TOP LEFT",115,5); + self.gun_progressdisplay[0] settext(&"MP_WEAPON"); + self.gun_progressdisplay[0].alpha = 1; + self.gun_progressdisplay[0].archived = 0; + self.gun_progressdisplay[0].hidewheninmenu = 1; + self.gun_progressdisplay[1] = maps\mp\gametypes\_hud_util::createfontstring("small",1.2); + self.gun_progressdisplay[1] maps\mp\gametypes\_hud_util::setpoint("TOP LEFT","TOP LEFT",115,17); + self.gun_progressdisplay[1] settext("1 / " + level.gun_guns.size); + self.gun_progressdisplay[1].alpha = 1; + self.gun_progressdisplay[1].archived = 0; + self.gun_progressdisplay[1].hidewheninmenu = 1; + } + + thread func_3A47(); + thread hideinkillcam(); +} + +//Function Number: 19 +func_3A45() +{ + self.gun_progressdisplay[1] settext(self.gungamegunindex + 1 + " / " + level.gun_guns.size); +} + +//Function Number: 20 +hideinkillcam() +{ + self endon("disconnect"); + var_00 = 1; + for(;;) + { + if(var_00 && !isalive(self) || maps\mp\_utility::isinkillcam()) + { + self.gun_progressdisplay[0].alpha = 0; + self.gun_progressdisplay[1].alpha = 0; + var_00 = 0; + } + else if(!var_00 && isalive(self) && !maps\mp\_utility::isinkillcam()) + { + self.gun_progressdisplay[0].alpha = 1; + self.gun_progressdisplay[1].alpha = 1; + var_00 = 1; + } + + wait 0.05; + } +} + +//Function Number: 21 +func_3A47() +{ + self endon("disconnect"); + level waittill("game_ended"); + self.gun_progressdisplay[0].alpha = 0; + self.gun_progressdisplay[1].alpha = 0; +} + +//Function Number: 22 +func_3A48() +{ + level.gun_guns = []; + var_00 = 0; + if(isusingmatchrulesdata()) + { + var_00 = getmatchrulesdata("gunData","numGuns"); + } + + if(var_00) + { + for(var_01 = 0;var_01 < var_00;var_01++) + { + level.gun_guns[var_01] = getmatchrulesdata("gunData","guns",var_01); + } + } + else + { + level.gun_guns[0] = "iw5_deserteagle"; + level.gun_guns[1] = "iw5_g18"; + level.gun_guns[2] = "iw5_mp9"; + level.gun_guns[3] = "iw5_mp5"; + level.gun_guns[4] = "iw5_p90"; + level.gun_guns[5] = "iw5_mp7"; + level.gun_guns[6] = "iw5_ak47"; + level.gun_guns[7] = "iw5_scar"; + level.gun_guns[8] = "iw5_pecheneg"; + level.gun_guns[9] = "iw5_mg36"; + level.gun_guns[10] = "iw5_spas12"; + level.gun_guns[11] = "iw5_1887"; + level.gun_guns[12] = "iw5_type95"; + level.gun_guns[13] = "iw5_mk14"; + level.gun_guns[14] = "iw5_barrett"; + level.gun_guns[15] = "iw5_msr"; + level.gun_guns[16] = "xm25"; + level.gun_guns[17] = "javelin"; + } + + level.gun_attachments = []; + level.gun_attachments["iw5_44magnum"]["attach1"] = "tactical"; + level.gun_attachments["iw5_deserteagle"]["attach1"] = "tactical"; + level.gun_attachments["iw5_mp412"]["attach1"] = "tactical"; + level.gun_attachments["iw5_fmg9"]["attach1"] = "reflex"; + level.gun_attachments["iw5_skorpion"]["attach1"] = "reflex"; + level.gun_attachments["iw5_mp9"]["attach1"] = "reflex"; + level.gun_attachments["iw5_g18"]["attach1"] = "reflex"; + level.gun_attachments["iw5_mp5"]["attach1"] = "reflex"; + level.gun_attachments["iw5_m9"]["attach1"] = "reflex"; + level.gun_attachments["iw5_p90"]["attach1"] = "reflex"; + level.gun_attachments["iw5_pp90m1"]["attach1"] = "reflex"; + level.gun_attachments["iw5_ump45"]["attach1"] = "reflex"; + level.gun_attachments["iw5_mp7"]["attach1"] = "reflex"; + level.gun_attachments["iw5_ak47"]["attach1"] = "reflex"; + level.gun_attachments["iw5_m16"]["attach1"] = "reflex"; + level.gun_attachments["iw5_m4"]["attach1"] = "reflex"; + level.gun_attachments["iw5_fad"]["attach1"] = "reflex"; + level.gun_attachments["iw5_acr"]["attach1"] = "reflex"; + level.gun_attachments["iw5_type95"]["attach1"] = "reflex"; + level.gun_attachments["iw5_mk14"]["attach1"] = "reflex"; + level.gun_attachments["iw5_scar"]["attach1"] = "reflex"; + level.gun_attachments["iw5_g36c"]["attach1"] = "reflex"; + level.gun_attachments["iw5_cm901"]["attach1"] = "reflex"; + level.gun_attachments["iw5_ksg"]["attach1"] = "grip"; + level.gun_attachments["iw5_striker"]["attach1"] = "grip"; + level.gun_attachments["iw5_aa12"]["attach1"] = "grip"; + level.gun_attachments["iw5_usas12"]["attach1"] = "grip"; + level.gun_attachments["iw5_spas12"]["attach1"] = "grip"; + level.gun_attachments["iw5_m60"]["attach1"] = "grip"; + level.gun_attachments["iw5_m60"]["attach2"] = "reflex"; + level.gun_attachments["iw5_mk46"]["attach1"] = "grip"; + level.gun_attachments["iw5_mk46"]["attach2"] = "reflex"; + level.gun_attachments["iw5_pecheneg"]["attach1"] = "grip"; + level.gun_attachments["iw5_pecheneg"]["attach2"] = "reflex"; + level.gun_attachments["iw5_sa80"]["attach1"] = "grip"; + level.gun_attachments["iw5_sa80"]["attach2"] = "reflex"; + level.gun_attachments["iw5_mg36"]["attach1"] = "grip"; + level.gun_attachments["iw5_mg36"]["attach2"] = "reflex"; +} + +//Function Number: 23 +func_3972() +{ + level.gun_loadouts["axis"]["loadoutPrimary"] = "iw5_acr"; + level.gun_loadouts["axis"]["loadoutPrimaryAttachment"] = "none"; + level.gun_loadouts["axis"]["loadoutPrimaryAttachment2"] = "none"; + level.gun_loadouts["axis"]["loadoutPrimaryBuff"] = "specialty_null"; + level.gun_loadouts["axis"]["loadoutPrimaryCamo"] = "none"; + level.gun_loadouts["axis"]["loadoutPrimaryReticle"] = "none"; + level.gun_loadouts["axis"]["loadoutSecondary"] = "none"; + level.gun_loadouts["axis"]["loadoutSecondaryAttachment"] = "none"; + level.gun_loadouts["axis"]["loadoutSecondaryAttachment2"] = "none"; + level.gun_loadouts["axis"]["loadoutSecondaryBuff"] = "specialty_null"; + level.gun_loadouts["axis"]["loadoutSecondaryCamo"] = "none"; + level.gun_loadouts["axis"]["loadoutSecondaryReticle"] = "none"; + level.gun_loadouts["axis"]["loadoutEquipment"] = "specialty_null"; + level.gun_loadouts["axis"]["loadoutOffhand"] = "none"; + level.gun_loadouts["axis"]["loadoutPerk1"] = "specialty_null"; + level.gun_loadouts["axis"]["loadoutPerk2"] = "specialty_null"; + level.gun_loadouts["axis"]["loadoutPerk3"] = "specialty_null"; + level.gun_loadouts["axis"]["loadoutDeathstreak"] = "specialty_null"; + level.gun_loadouts["axis"]["loadoutJuggernaut"] = 0; + level.gun_loadouts["allies"] = level.gun_loadouts["axis"]; +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/gametypes/infect.gsc b/MW3/PC/MP/maps/mp/gametypes/infect.gsc new file mode 100644 index 0000000..a7f5dcb --- /dev/null +++ b/MW3/PC/MP/maps/mp/gametypes/infect.gsc @@ -0,0 +1,530 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\infect.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 16 + * Decompile Time: 222 ms + * Timestamp: 10/27/2023 2:13:18 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + maps\mp\gametypes\_globallogic::init(); + maps\mp\gametypes\_callbacksetup::setupcallbacks(); + maps\mp\gametypes\_globallogic::setupcallbacks(); + if(isusingmatchrulesdata()) + { + level.initializematchrules = ::initializematchrules; + [[ level.initializematchrules ]](); + level thread maps\mp\_utility::reinitializematchrulesonmigration(); + } + else + { + maps\mp\_utility::registertimelimitdvar(level.gametype,10); + maps\mp\_utility::setoverridewatchdvar("scorelimit",0); + maps\mp\_utility::registerroundlimitdvar(level.gametype,1); + maps\mp\_utility::registerwinlimitdvar(level.gametype,1); + maps\mp\_utility::registernumlivesdvar(level.gametype,0); + maps\mp\_utility::registerhalftimedvar(level.gametype,0); + level.matchrules_numinitialinfected = 1; + level.matchrules_damagemultiplier = 0; + level.matchrules_vampirism = 0; + } + + func_3989(); + level.teambased = 1; + level.doprematch = 1; + level.onprecachegametype = ::onprecachegametype; + level.onstartgametype = ::onstartgametype; + level.onspawnplayer = ::onspawnplayer; + level.getspawnpoint = ::getspawnpoint; + level.onplayerkilled = ::onplayerkilled; + level.ondeadevent = ::ondeadevent; + level.ontimelimit = ::ontimelimit; + if(level.matchrules_damagemultiplier || level.matchrules_vampirism) + { + level.modifyplayerdamage = ::maps\mp\gametypes\_damage::gamemodemodifyplayerdamage; + } +} + +//Function Number: 2 +initializematchrules() +{ + maps\mp\_utility::setcommonrulesfrommatchrulesdata(); + level.matchrules_numinitialinfected = getmatchrulesdata("infectData","numInitialInfected"); + var_00 = maps\mp\_utility::getwatcheddvar("numlives"); + if(var_00) + { + setdynamicdvar("scr_" + level.gametype + "_numLives",var_00 + 1); + maps\mp\_utility::registernumlivesdvar(level.gametype,var_00 + 1); + } + + maps\mp\_utility::setoverridewatchdvar("scorelimit",0); + setdynamicdvar("scr_infect_roundswitch",0); + maps\mp\_utility::registerroundswitchdvar("infect",0,0,9); + setdynamicdvar("scr_infect_roundlimit",1); + maps\mp\_utility::registerroundlimitdvar("infect",1); + setdynamicdvar("scr_infect_winlimit",1); + maps\mp\_utility::registerwinlimitdvar("infect",1); + setdynamicdvar("scr_infect_halftime",0); + maps\mp\_utility::registerhalftimedvar("infect",0); + setdynamicdvar("scr_infect_promode",0); +} + +//Function Number: 3 +onprecachegametype() +{ + precachestring(&"MP_CONSCRIPTION_STARTS_IN"); +} + +//Function Number: 4 +onstartgametype() +{ + setclientnamemode("auto_change"); + maps\mp\_utility::setobjectivetext("allies",&"OBJECTIVES_INFECT"); + maps\mp\_utility::setobjectivetext("axis",&"OBJECTIVES_INFECT"); + if(level.splitscreen) + { + maps\mp\_utility::setobjectivescoretext("allies",&"OBJECTIVES_INFECT"); + maps\mp\_utility::setobjectivescoretext("axis",&"OBJECTIVES_INFECT"); + } + else + { + maps\mp\_utility::setobjectivescoretext("allies",&"OBJECTIVES_INFECT_SCORE"); + maps\mp\_utility::setobjectivescoretext("axis",&"OBJECTIVES_INFECT_SCORE"); + } + + maps\mp\_utility::setobjectivehinttext("allies",&"OBJECTIVES_INFECT_HINT"); + maps\mp\_utility::setobjectivehinttext("axis",&"OBJECTIVES_INFECT_HINT"); + level.spawnmins = (0,0,0); + level.spawnmaxs = (0,0,0); + maps\mp\gametypes\_spawnlogic::addspawnpoints("allies","mp_tdm_spawn"); + maps\mp\gametypes\_spawnlogic::addspawnpoints("axis","mp_tdm_spawn"); + level.mapcenter = maps\mp\gametypes\_spawnlogic::findboxcenter(level.spawnmins,level.spawnmaxs); + setmapcenter(level.mapcenter); + var_00 = []; + maps\mp\gametypes\_gameobjects::main(var_00); + maps\mp\gametypes\_rank::registerscoreinfo("final_rogue",200); + maps\mp\gametypes\_rank::registerscoreinfo("draft_rogue",100); + maps\mp\gametypes\_rank::registerscoreinfo("survivor",100); + level.quickmessagetoall = 1; + level.blockweapondrops = 1; + level.infect_timerdisplay = maps\mp\gametypes\_hud_util::createservertimer("objective",1.4); + level.infect_timerdisplay maps\mp\gametypes\_hud_util::setpoint("TOPLEFT","TOPLEFT",115,5); + level.infect_timerdisplay.label = &"MP_DRAFT_STARTS_IN"; + level.infect_timerdisplay.alpha = 0; + level.infect_timerdisplay.archived = 0; + level.infect_timerdisplay.hidewheninmenu = 1; + level.infect_chosefirstinfected = 0; + level.infect_choosingfirstinfected = 0; + level.infect_teamscores["axis"] = 0; + level.infect_teamscores["allies"] = 0; + level thread onplayerconnect(); + level thread onplayereliminated(); +} + +//Function Number: 5 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_00.infect_firstspawn = 1; + var_00 thread ondisconnect(); + } +} + +//Function Number: 6 +onspawnplayer() +{ + func_3A2B(); + if(!level.infect_choosingfirstinfected) + { + level.infect_choosingfirstinfected = 1; + level thread func_3A28(); + } + + if(isdefined(self.isinitialinfected)) + { + self.pers["gamemodeLoadout"] = level.infect_loadouts["axis_initial"]; + } + else + { + self.pers["gamemodeLoadout"] = level.infect_loadouts[self.pers["team"]]; + } + + if(self.infect_firstactualspawn) + { + self.infect_firstactualspawn = 0; + level.infect_teamscores["allies"]++; + func_3A2B(); + } + + level notify("spawned_player"); +} + +//Function Number: 7 +getspawnpoint() +{ + if(self.infect_firstspawn) + { + self.infect_firstspawn = 0; + self.infect_firstactualspawn = 1; + self.pers["class"] = "gamemode"; + self.pers["lastClass"] = ""; + self.class = self.pers["class"]; + self.lastclass = self.pers["lastClass"]; + maps\mp\gametypes\_menus::addtoteam("allies",1); + } + + if(level.ingraceperiod) + { + var_00 = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_tdm_spawn"); + var_01 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random(var_00); + } + else + { + var_00 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints(self.pers["team"]); + var_01 = maps\mp\gametypes\_spawnlogic::getspawnpoint_nearteam(var_01); + } + + return var_01; +} + +//Function Number: 8 +func_3A28() +{ + level endon("game_ended"); + maps\mp\_utility::gameflagwait("prematch_done"); + level.infect_timerdisplay.label = &"MP_DRAFT_STARTS_IN"; + level.infect_timerdisplay settimer(8); + level.infect_timerdisplay.alpha = 1; + maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause(8); + level.infect_timerdisplay.alpha = 0; + var_00 = level.players[randomint(level.players.size)]; + var_00.infect_isbeingchosen = 1; + var_00 endon("disconnect"); + while(!maps\mp\_utility::isreallyalive(var_00) || var_00 maps\mp\_utility::isusingremote()) + { + wait 0.05; + } + + if(isdefined(var_00.iscarrying) && var_00.iscarrying == 1) + { + var_00 notify("force_cancel_placement"); + wait 0.05; + } + + if(var_00 maps\mp\_utility::isjuggernaut()) + { + var_00 notify("lost_juggernaut"); + wait 0.05; + } + + var_00 maps\mp\gametypes\_playerlogic::removefromalivecount(); + var_00 maps\mp\gametypes\_menus::addtoteam("axis"); + level.infect_chosefirstinfected = 1; + var_00.infect_isbeingchosen = undefined; + var_00.isinitialinfected = 1; + level.infect_teamscores["allies"]--; + level.infect_teamscores["axis"]++; + func_3A2B(); + var_01 = maps\mp\_utility::getwatcheddvar("numlives"); + if(var_01 && var_00.pers["lives"]) + { + var_00.pers["lives"]--; + } + + var_00 maps\mp\gametypes\_playerlogic::addtoalivecount(); + var_00.pers["gamemodeLoadout"] = level.infect_loadouts["axis_initial"]; + var_02 = spawn("script_model",var_00.origin); + var_02.angles = var_00.angles; + var_02.playerspawnpos = var_00.origin; + var_02.notti = 1; + var_00.setspawnpoint = var_02; + var_00 notify("faux_spawn"); + var_00.faux_spawn_stance = var_00 getstance(); + var_00 thread maps\mp\gametypes\_playerlogic::spawnplayer(1); + thread maps\mp\_utility::teamplayercardsplash("callout_first_mercenary",var_00); + maps\mp\_utility::playsoundonplayers("mp_enemy_obj_captured"); +} + +//Function Number: 9 +func_3A2A() +{ + level endon("game_ended"); + self.isinitialinfected = undefined; + if(isdefined(self.iscarrying) && self.iscarrying == 1) + { + self notify("force_cancel_placement"); + wait 0.05; + } + + if(maps\mp\_utility::isjuggernaut()) + { + self notify("lost_juggernaut"); + wait 0.05; + } + + while(!maps\mp\_utility::isreallyalive(self)) + { + wait 0.05; + } + + self.pers["gamemodeLoadout"] = level.infect_loadouts["axis"]; + var_00 = spawn("script_model",self.origin); + var_00.angles = self.angles; + var_00.playerspawnpos = self.origin; + var_00.notti = 1; + self.setspawnpoint = var_00; + self notify("faux_spawn"); + self.faux_spawn_stance = self getstance(); + thread maps\mp\gametypes\_playerlogic::spawnplayer(1); +} + +//Function Number: 10 +onplayerkilled(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09) +{ + if(isdefined(param_01) && isplayer(param_01) && param_01 != self && self.team == "allies" && self.team != param_01.team) + { + self.addtoteam = "axis"; + level.infect_teamscores["allies"]--; + level.infect_teamscores["axis"]++; + func_3A2B(); + if(isdefined(param_01.isinitialinfected)) + { + param_01 thread func_3A2A(); + } + + param_01 thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_DRAFTED"); + lib_036E::func_2B7B("draft_rogue",param_01,self,1); + param_01 thread maps\mp\gametypes\_rank::giverankxp("draft_rogue"); + if(level.infect_teamscores["allies"] > 1) + { + maps\mp\_utility::playsoundonplayers("mp_enemy_obj_captured","allies"); + maps\mp\_utility::playsoundonplayers("mp_war_objective_taken","axis"); + thread maps\mp\_utility::teamplayercardsplash("callout_got_drafted",self,"allies"); + thread maps\mp\_utility::teamplayercardsplash("callout_drafted_rogue",param_01,"axis"); + foreach(var_0B in level.players) + { + if(var_0B.team == "allies" && var_0B != self) + { + var_0B thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_SURVIVOR"); + lib_036E::func_2B7B("survivor",var_0B,undefined,1); + var_0B thread maps\mp\gametypes\_rank::giverankxp("survivor"); + } + } + } + + if(level.infect_teamscores["allies"] == 1) + { + maps\mp\_utility::playsoundonplayers("mp_obj_captured"); + foreach(var_0B in level.players) + { + if(var_0B.team == "allies" && var_0B != self) + { + var_0B thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_FINAL_ROGUE"); + lib_036E::func_2B7B("final_rogue",var_0B,undefined,1); + var_0B thread maps\mp\gametypes\_rank::giverankxp("final_rogue"); + thread maps\mp\_utility::teamplayercardsplash("callout_final_rogue",var_0B); + break; + } + } + + return; + } + + if(level.infect_teamscores["allies"] == 0) + { + level.finalkillcam_winner = "axis"; + level thread maps\mp\gametypes\_gamelogic::endgame("axis",game["strings"]["allies_eliminated"]); + return; + } + } +} + +//Function Number: 11 +ondisconnect() +{ + level endon("game_ended"); + self endon("eliminated"); + self waittill("disconnect"); + if(self.team == "spectator") + { + return; + } + + level.infect_teamscores[self.team]--; + func_3A2B(); + if(isdefined(self.infect_isbeingchosen) || level.infect_chosefirstinfected) + { + if(level.infect_teamscores["allies"] == 0) + { + level.finalkillcam_winner = "axis"; + level thread maps\mp\gametypes\_gamelogic::endgame("axis",game["strings"]["allies_eliminated"]); + return; + } + + if(level.infect_teamscores["axis"] == 0) + { + if(level.infect_teamscores["allies"] > 1) + { + level.infect_chosefirstinfected = 0; + level thread func_3A28(); + return; + } + + level.finalkillcam_winner = "allies"; + level thread maps\mp\gametypes\_gamelogic::endgame("allies",game["strings"]["allies_eliminated"]); + return; + } + } +} + +//Function Number: 12 +onplayereliminated() +{ + level endon("game_ended"); + for(;;) + { + level waittill("player_eliminated",var_00); + var_00 notify("eliminated"); + level.infect_teamscores[var_00.team]--; + func_3A2B(); + if(level.infect_teamscores["allies"] == 0) + { + level.finalkillcam_winner = "axis"; + level thread maps\mp\gametypes\_gamelogic::endgame("axis",game["strings"]["allies_eliminated"]); + continue; + } + + if(level.infect_teamscores["axis"] == 0) + { + level.finalkillcam_winner = "allies"; + level thread maps\mp\gametypes\_gamelogic::endgame("allies",game["strings"]["axis_eliminated"]); + } + } +} + +//Function Number: 13 +ondeadevent(param_00) +{ +} + +//Function Number: 14 +ontimelimit() +{ + level.finalkillcam_winner = "allies"; + level thread maps\mp\gametypes\_gamelogic::endgame("allies",game["strings"]["time_limit_reached"]); +} + +//Function Number: 15 +func_3A2B() +{ + game["teamScores"]["axis"] = level.infect_teamscores["axis"]; + setteamscore("axis",level.infect_teamscores["axis"]); + game["teamScores"]["allies"] = level.infect_teamscores["allies"]; + setteamscore("allies",level.infect_teamscores["allies"]); +} + +//Function Number: 16 +func_3989() +{ + if(isusingmatchrulesdata() && getmatchrulesdata("defaultClasses","axis",0,"class","inUse")) + { + level.infect_loadouts["axis"] = maps\mp\_utility::getmatchrulesspecialclass("axis",0); + level.infect_loadouts["axis"]["loadoutStreakType"] = "assault"; + level.infect_loadouts["axis"]["loadoutKillstreak1"] = "none"; + level.infect_loadouts["axis"]["loadoutKillstreak2"] = "none"; + level.infect_loadouts["axis"]["loadoutKillstreak3"] = "none"; + } + else + { + level.infect_loadouts["axis"]["loadoutPrimary"] = "iw5_fmg9"; + level.infect_loadouts["axis"]["loadoutPrimaryAttachment"] = "reflex"; + level.infect_loadouts["axis"]["loadoutPrimaryAttachment2"] = "none"; + level.infect_loadouts["axis"]["loadoutPrimaryBuff"] = "specialty_null"; + level.infect_loadouts["axis"]["loadoutPrimaryCamo"] = "none"; + level.infect_loadouts["axis"]["loadoutPrimaryReticle"] = "none"; + level.infect_loadouts["axis"]["loadoutSecondary"] = "none"; + level.infect_loadouts["axis"]["loadoutSecondaryAttachment"] = "none"; + level.infect_loadouts["axis"]["loadoutSecondaryAttachment2"] = "none"; + level.infect_loadouts["axis"]["loadoutSecondaryBuff"] = "specialty_null"; + level.infect_loadouts["axis"]["loadoutSecondaryCamo"] = "none"; + level.infect_loadouts["axis"]["loadoutSecondaryReticle"] = "none"; + level.infect_loadouts["axis"]["loadoutEquipment"] = "throwingknife_mp"; + level.infect_loadouts["axis"]["loadoutOffhand"] = "none"; + level.infect_loadouts["axis"]["loadoutPerk1"] = "specialty_longersprint"; + level.infect_loadouts["axis"]["loadoutPerk2"] = "specialty_quickdraw"; + level.infect_loadouts["axis"]["loadoutPerk3"] = "specialty_quieter"; + level.infect_loadouts["axis"]["loadoutStreakType"] = "assault"; + level.infect_loadouts["axis"]["loadoutKillstreak1"] = "none"; + level.infect_loadouts["axis"]["loadoutKillstreak2"] = "none"; + level.infect_loadouts["axis"]["loadoutKillstreak3"] = "none"; + level.infect_loadouts["axis"]["loadoutDeathstreak"] = "specialty_grenadepulldeath"; + level.infect_loadouts["axis"]["loadoutJuggernaut"] = 0; + } + + if(isusingmatchrulesdata() && getmatchrulesdata("defaultClasses","axis",5,"class","inUse")) + { + level.infect_loadouts["axis_initial"] = maps\mp\_utility::getmatchrulesspecialclass("axis",5); + level.infect_loadouts["axis_initial"]["loadoutStreakType"] = "assault"; + level.infect_loadouts["axis_initial"]["loadoutKillstreak1"] = "none"; + level.infect_loadouts["axis_initial"]["loadoutKillstreak2"] = "none"; + level.infect_loadouts["axis_initial"]["loadoutKillstreak3"] = "none"; + } + else + { + level.infect_loadouts["axis_initial"]["loadoutPrimary"] = "iw5_scar"; + level.infect_loadouts["axis_initial"]["loadoutPrimaryAttachment"] = "reflex"; + level.infect_loadouts["axis_initial"]["loadoutPrimaryAttachment2"] = "xmags"; + level.infect_loadouts["axis_initial"]["loadoutPrimaryBuff"] = "specialty_bling"; + level.infect_loadouts["axis_initial"]["loadoutPrimaryCamo"] = "none"; + level.infect_loadouts["axis_initial"]["loadoutPrimaryReticle"] = "none"; + level.infect_loadouts["axis_initial"]["loadoutSecondary"] = "none"; + level.infect_loadouts["axis_initial"]["loadoutSecondaryAttachment"] = "none"; + level.infect_loadouts["axis_initial"]["loadoutSecondaryAttachment2"] = "none"; + level.infect_loadouts["axis_initial"]["loadoutSecondaryBuff"] = "specialty_null"; + level.infect_loadouts["axis_initial"]["loadoutSecondaryCamo"] = "none"; + level.infect_loadouts["axis_initial"]["loadoutSecondaryReticle"] = "none"; + level.infect_loadouts["axis_initial"]["loadoutEquipment"] = "specialty_null"; + level.infect_loadouts["axis_initial"]["loadoutOffhand"] = "none"; + level.infect_loadouts["axis_initial"]["loadoutPerk1"] = "specialty_longersprint"; + level.infect_loadouts["axis_initial"]["loadoutPerk2"] = "specialty_quickdraw"; + level.infect_loadouts["axis_initial"]["loadoutPerk3"] = "specialty_bulletaccuracy"; + level.infect_loadouts["axis_initial"]["loadoutStreakType"] = "assault"; + level.infect_loadouts["axis_initial"]["loadoutKillstreak1"] = "none"; + level.infect_loadouts["axis_initial"]["loadoutKillstreak2"] = "none"; + level.infect_loadouts["axis_initial"]["loadoutKillstreak3"] = "none"; + level.infect_loadouts["axis_initial"]["loadoutDeathstreak"] = "specialty_grenadepulldeath"; + level.infect_loadouts["axis_initial"]["loadoutJuggernaut"] = 0; + } + + if(isusingmatchrulesdata() && getmatchrulesdata("defaultClasses","allies",0,"class","inUse")) + { + level.infect_loadouts["allies"] = maps\mp\_utility::getmatchrulesspecialclass("allies",0); + return; + } + + level.infect_loadouts["allies"]["loadoutPrimary"] = "iw5_spas12"; + level.infect_loadouts["allies"]["loadoutPrimaryAttachment"] = "silencer03"; + level.infect_loadouts["allies"]["loadoutPrimaryAttachment2"] = "none"; + level.infect_loadouts["allies"]["loadoutPrimaryBuff"] = "specialty_longerrange"; + level.infect_loadouts["allies"]["loadoutPrimaryCamo"] = "none"; + level.infect_loadouts["allies"]["loadoutPrimaryReticle"] = "none"; + level.infect_loadouts["allies"]["loadoutSecondary"] = "none"; + level.infect_loadouts["allies"]["loadoutSecondaryAttachment"] = "none"; + level.infect_loadouts["allies"]["loadoutSecondaryAttachment2"] = "none"; + level.infect_loadouts["allies"]["loadoutSecondaryBuff"] = "specialty_null"; + level.infect_loadouts["allies"]["loadoutSecondaryCamo"] = "none"; + level.infect_loadouts["allies"]["loadoutSecondaryReticle"] = "none"; + level.infect_loadouts["allies"]["loadoutEquipment"] = "claymore_mp"; + level.infect_loadouts["allies"]["loadoutOffhand"] = "flash_grenade_mp"; + level.infect_loadouts["allies"]["loadoutPerk1"] = "specialty_scavenger"; + level.infect_loadouts["allies"]["loadoutPerk2"] = "specialty_quickdraw"; + level.infect_loadouts["allies"]["loadoutPerk3"] = "specialty_quieter"; + level.infect_loadouts["allies"]["loadoutDeathstreak"] = "specialty_null"; + level.infect_loadouts["allies"]["loadoutJuggernaut"] = 0; +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/gametypes/jugg.gsc b/MW3/PC/MP/maps/mp/gametypes/jugg.gsc new file mode 100644 index 0000000..ab2d102 --- /dev/null +++ b/MW3/PC/MP/maps/mp/gametypes/jugg.gsc @@ -0,0 +1,424 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\jugg.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 17 + * Decompile Time: 232 ms + * Timestamp: 10/27/2023 2:13:19 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + maps\mp\gametypes\_globallogic::init(); + maps\mp\gametypes\_callbacksetup::setupcallbacks(); + maps\mp\gametypes\_globallogic::setupcallbacks(); + if(isusingmatchrulesdata()) + { + level.initializematchrules = ::initializematchrules; + [[ level.initializematchrules ]](); + level thread maps\mp\_utility::reinitializematchrulesonmigration(); + } + else + { + maps\mp\_utility::registertimelimitdvar(level.gametype,10); + maps\mp\_utility::registerroundlimitdvar(level.gametype,1); + maps\mp\_utility::registerscorelimitdvar(level.gametype,10); + maps\mp\_utility::registerwinlimitdvar(level.gametype,1); + maps\mp\_utility::registernumlivesdvar(level.gametype,0); + maps\mp\_utility::registerhalftimedvar(level.gametype,0); + level.matchrules_respawnnewjugg = 0; + level.matchrules_showjuggradaricon = 1; + level.matchrules_showjuggworldicon = 0; + level.matchrules_damagemultiplier = 0; + level.matchrules_vampirism = 0; + } + + func_3989(); + level.teambased = 1; + level.doprematch = 1; + level.onprecachegametype = ::onprecachegametype; + level.onstartgametype = ::onstartgametype; + level.getspawnpoint = ::getspawnpoint; + level.onspawnplayer = ::onspawnplayer; + level.onplayerkilled = ::onplayerkilled; + level.ontimelimit = ::ontimelimit; + if(level.matchrules_damagemultiplier || level.matchrules_vampirism) + { + level.modifyplayerdamage = ::maps\mp\gametypes\_damage::gamemodemodifyplayerdamage; + } +} + +//Function Number: 2 +initializematchrules() +{ + maps\mp\_utility::setcommonrulesfrommatchrulesdata(); + level.matchrules_respawnnewjugg = getmatchrulesdata("juggData","respawnNewJugg"); + level.matchrules_showjuggradaricon = getmatchrulesdata("juggData","showJuggRadarIcon"); + level.matchrules_showjuggworldicon = getmatchrulesdata("juggData","showJuggWorldIcon"); + setdynamicdvar("scr_jugg_roundswitch",0); + maps\mp\_utility::registerroundswitchdvar("jugg",0,0,9); + setdynamicdvar("scr_jugg_roundlimit",1); + maps\mp\_utility::registerroundlimitdvar("jugg",1); + setdynamicdvar("scr_jugg_winlimit",1); + maps\mp\_utility::registerwinlimitdvar("jugg",1); + setdynamicdvar("scr_jugg_halftime",0); + maps\mp\_utility::registerhalftimedvar("jugg",0); + setdynamicdvar("scr_jugg_promode",0); +} + +//Function Number: 3 +onprecachegametype() +{ + precachestring(&"MP_JUGG_NEXT_JUGG_IN"); + precacheshader("waypoint_kill"); +} + +//Function Number: 4 +onstartgametype() +{ + setclientnamemode("auto_change"); + maps\mp\_utility::setobjectivetext("allies",&"OBJECTIVES_JUGG"); + maps\mp\_utility::setobjectivetext("axis",&"OBJECTIVES_JUGG"); + if(level.splitscreen) + { + maps\mp\_utility::setobjectivescoretext("allies",&"OBJECTIVES_JUGG"); + maps\mp\_utility::setobjectivescoretext("axis",&"OBJECTIVES_JUGG"); + } + else + { + maps\mp\_utility::setobjectivescoretext("allies",&"OBJECTIVES_JUGG_SCORE"); + maps\mp\_utility::setobjectivescoretext("axis",&"OBJECTIVES_JUGG_SCORE"); + } + + maps\mp\_utility::setobjectivehinttext("allies",&"OBJECTIVES_JUGG_HINT"); + maps\mp\_utility::setobjectivehinttext("axis",&"OBJECTIVES_JUGG_HINT"); + level.spawnmins = (0,0,0); + level.spawnmaxs = (0,0,0); + maps\mp\gametypes\_spawnlogic::addspawnpoints("allies","mp_tdm_spawn"); + maps\mp\gametypes\_spawnlogic::addspawnpoints("axis","mp_tdm_spawn"); + level.mapcenter = maps\mp\gametypes\_spawnlogic::findboxcenter(level.spawnmins,level.spawnmaxs); + setmapcenter(level.mapcenter); + maps\mp\gametypes\_rank::registerscoreinfo("got_juggernaut",250); + maps\mp\gametypes\_rank::registerscoreinfo("kill_as_juggernaut",50); + var_00 = []; + maps\mp\gametypes\_gameobjects::main(var_00); + level.quickmessagetoall = 1; + level.blockweapondrops = 1; + level.jugg_juggernaut = undefined; + level.jugg_choosingjugg = 0; + level thread onplayerconnect(); + level.jugg_timerdisplay = maps\mp\gametypes\_hud_util::createservertimer("objective",1.4); + level.jugg_timerdisplay maps\mp\gametypes\_hud_util::setpoint("TOPLEFT","TOPLEFT",115,5); + level.jugg_timerdisplay.label = &"MP_JUGG_NEXT_JUGG_IN"; + level.jugg_timerdisplay.alpha = 0; + level.jugg_timerdisplay.archived = 0; + level.jugg_timerdisplay.hidewheninmenu = 1; + thread func_39A2(level.jugg_timerdisplay); + level.killstreakrewards = 0; +} + +//Function Number: 5 +func_3A33() +{ + level endon("game_ended"); + level notify("chooseInitialJugg"); + level endon("chooseInitialJugg"); + maps\mp\_utility::gameflagwait("prematch_done"); + level.jugg_timerdisplay.label = &"MP_JUGG_NEXT_JUGG_IN"; + level.jugg_timerdisplay settimer(8); + level.jugg_timerdisplay.alpha = 1; + maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause(8); + level.jugg_timerdisplay.alpha = 0; + func_3A38(level.players[randomint(level.players.size)],undefined,1); +} + +//Function Number: 6 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_00.jugg_juggscore = 0; + var_00.jugg_firstspawn = 1; + var_00 thread ondisconnect(); + } +} + +//Function Number: 7 +ondisconnect() +{ + level endon("game_ended"); + self waittill("disconnect"); + func_3A3A(); +} + +//Function Number: 8 +onspawnplayer() +{ + if(!level.jugg_choosingjugg) + { + level.jugg_choosingjugg = 1; + level thread func_3A33(); + } + + self.pers["gamemodeLoadout"] = level.jugg_loadouts[self.pers["team"]]; + level notify("spawned_player"); +} + +//Function Number: 9 +getspawnpoint() +{ + if(self.jugg_firstspawn) + { + self.jugg_firstspawn = 0; + self.pers["class"] = "gamemode"; + self.pers["lastClass"] = ""; + self.class = self.pers["class"]; + self.lastclass = self.pers["lastClass"]; + maps\mp\gametypes\_menus::addtoteam("axis",1); + } + + if(level.ingraceperiod) + { + var_00 = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_tdm_spawn"); + var_01 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random(var_00); + } + else + { + var_00 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints(self.pers["team"]); + var_01 = maps\mp\gametypes\_spawnlogic::getspawnpoint_nearteam(var_01); + } + + return var_01; +} + +//Function Number: 10 +onplayerkilled(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09) +{ + if(isdefined(param_01) && isplayer(param_01) && param_01 != self) + { + if(isdefined(level.jugg_juggernaut) && level.jugg_juggernaut == self) + { + if(level.matchrules_showjuggworldicon) + { + self.jugg_headicon destroy(); + } + + func_3A38(param_01,self); + return; + } + + if(isdefined(level.jugg_juggernaut) && level.jugg_juggernaut == param_01) + { + param_01.jugg_juggscore++; + param_01 lib_036E::func_2B88(param_01.pers["team"],1); + param_01 thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_JUGGERNAUT_KILL"); + lib_036E::func_2B7B("kill_as_juggernaut",param_01,self,1); + param_01 thread maps\mp\gametypes\_rank::giverankxp("kill_as_juggernaut"); + return; + } + + return; + } + + if(isdefined(level.jugg_juggernaut) && level.jugg_juggernaut == self) + { + self.addtoteam = "axis"; + maps\mp\_utility::playsoundonplayers("mp_enemy_obj_captured"); + level.jugg_juggernaut = undefined; + level thread func_3A33(); + } +} + +//Function Number: 11 +func_3A38(param_00,param_01,param_02) +{ + if(isdefined(param_01)) + { + param_01.addtoteam = "axis"; + } + + if(isdefined(level.jugg_juggernaut)) + { + maps\mp\_utility::playsoundonplayers("mp_enemy_obj_captured"); + level.jugg_juggernaut = undefined; + } + else + { + maps\mp\_utility::playsoundonplayers("mp_obj_captured"); + } + + param_00 endon("disconnect"); + param_00 thread func_0038(); + if(param_00 maps\mp\_utility::isjuggernaut()) + { + param_00 notify("lost_juggernaut"); + wait 0.05; + } + + while(!isalive(param_00)) + { + wait 0.05; + } + + param_00 maps\mp\gametypes\_menus::addtoteam("allies"); + level.jugg_juggernaut = param_00; + if(isdefined(param_02)) + { + func_3A3A(); + } + else + { + param_00.jugg_juggscore++; + func_3A3A(); + param_00 lib_036E::func_2B88("allies",1); + } + + if(isdefined(param_02)) + { + param_00 thread func_3A39(1); + return; + } + + param_00 thread func_3A39(); +} + +//Function Number: 12 +func_3A39(param_00) +{ + self.pers["gamemodeLoadout"] = level.jugg_loadouts[self.pers["team"]]; + if(level.matchrules_respawnnewjugg) + { + self notify("faux_spawn"); + self.faux_spawn_stance = self getstance(); + thread maps\mp\gametypes\_playerlogic::spawnplayer(1); + } + else + { + var_01 = spawn("script_model",self.origin); + var_01.angles = self.angles; + var_01.playerspawnpos = self.origin; + var_01.notti = 1; + self.setspawnpoint = var_01; + self notify("faux_spawn"); + self.faux_spawn_stance = self getstance(); + thread maps\mp\gametypes\_playerlogic::spawnplayer(1); + } + + if(level.matchrules_showjuggworldicon) + { + self.jugg_headicon = maps\mp\_entityheadicons::setheadicon(level.otherteam[self.team],"waypoint_kill",(0,0,85),24,24,undefined,undefined,undefined,undefined,undefined,0); + } + + if(!isdefined(param_00)) + { + var_02 = maps\mp\gametypes\_rank::getscoreinfovalue("got_juggernaut"); + thread maps\mp\gametypes\_hud_message::splashnotify("got_juggernaut",var_02); + lib_036E::func_2B7B("got_juggernaut",self,undefined,1); + thread maps\mp\gametypes\_rank::giverankxp("got_juggernaut"); + } + + level thread maps\mp\_utility::teamplayercardsplash("callout_new_juggernaut",self,level.otherteam[self.team]); +} + +//Function Number: 13 +func_3A3A() +{ + if(isdefined(level.jugg_juggernaut)) + { + game["teamScores"]["allies"] = level.jugg_juggernaut.jugg_juggscore; + setteamscore("allies",level.jugg_juggernaut.jugg_juggscore); + } + else + { + game["teamScores"]["allies"] = 0; + setteamscore("allies",0); + } + + game["teamScores"]["axis"] = 0; + setteamscore("axis",0); +} + +//Function Number: 14 +func_0038() +{ + level endon("game_ended"); + self endon("death"); + self waittill("disconnect"); + level thread func_3A33(); +} + +//Function Number: 15 +ontimelimit() +{ + level.finalkillcam_winner = "axis"; + level thread maps\mp\gametypes\_gamelogic::endgame("axis",game["strings"]["time_limit_reached"]); +} + +//Function Number: 16 +func_39A2(param_00) +{ + level waittill("game_ended"); + param_00.alpha = 0; +} + +//Function Number: 17 +func_3989() +{ + if(isusingmatchrulesdata() && getmatchrulesdata("defaultClasses","axis",0,"class","inUse")) + { + level.jugg_loadouts["axis"] = maps\mp\_utility::getmatchrulesspecialclass("axis",0); + level.jugg_loadouts["axis"]["loadoutJuggernaut"] = 0; + } + else + { + level.jugg_loadouts["axis"]["loadoutPrimary"] = "iw5_usas12"; + level.jugg_loadouts["axis"]["loadoutPrimaryAttachment"] = "none"; + level.jugg_loadouts["axis"]["loadoutPrimaryAttachment2"] = "none"; + level.jugg_loadouts["axis"]["loadoutPrimaryBuff"] = "specialty_longerrange"; + level.jugg_loadouts["axis"]["loadoutPrimaryCamo"] = "none"; + level.jugg_loadouts["axis"]["loadoutPrimaryReticle"] = "none"; + level.jugg_loadouts["axis"]["loadoutSecondary"] = "iw5_44magnum"; + level.jugg_loadouts["axis"]["loadoutSecondaryAttachment"] = "none"; + level.jugg_loadouts["axis"]["loadoutSecondaryAttachment2"] = "none"; + level.jugg_loadouts["axis"]["loadoutSecondaryBuff"] = "specialty_null"; + level.jugg_loadouts["axis"]["loadoutSecondaryCamo"] = "none"; + level.jugg_loadouts["axis"]["loadoutSecondaryReticle"] = "none"; + level.jugg_loadouts["axis"]["loadoutEquipment"] = "claymore_mp"; + level.jugg_loadouts["axis"]["loadoutOffhand"] = "flash_grenade_mp"; + level.jugg_loadouts["axis"]["loadoutPerk1"] = "specialty_longersprint"; + level.jugg_loadouts["axis"]["loadoutPerk2"] = "specialty_quickdraw"; + level.jugg_loadouts["axis"]["loadoutPerk3"] = "specialty_bulletaccuracy"; + level.jugg_loadouts["axis"]["loadoutDeathstreak"] = "specialty_grenadepulldeath"; + level.jugg_loadouts["axis"]["loadoutJuggernaut"] = 0; + } + + if(isusingmatchrulesdata() && getmatchrulesdata("defaultClasses","allies",5,"class","inUse")) + { + level.jugg_loadouts["allies"] = maps\mp\_utility::getmatchrulesspecialclass("allies",5); + level.jugg_loadouts["allies"]["loadoutJuggernaut"] = 1; + return; + } + + level.jugg_loadouts["allies"]["loadoutPrimary"] = "iw5_scar"; + level.jugg_loadouts["allies"]["loadoutPrimaryAttachment"] = "none"; + level.jugg_loadouts["allies"]["loadoutPrimaryAttachment2"] = "none"; + level.jugg_loadouts["allies"]["loadoutPrimaryBuff"] = "specialty_bulletpenetration"; + level.jugg_loadouts["allies"]["loadoutPrimaryCamo"] = "none"; + level.jugg_loadouts["allies"]["loadoutPrimaryReticle"] = "none"; + level.jugg_loadouts["allies"]["loadoutSecondary"] = "rpg"; + level.jugg_loadouts["allies"]["loadoutSecondaryAttachment"] = "none"; + level.jugg_loadouts["allies"]["loadoutSecondaryAttachment2"] = "none"; + level.jugg_loadouts["allies"]["loadoutSecondaryBuff"] = "specialty_null"; + level.jugg_loadouts["allies"]["loadoutSecondaryCamo"] = "none"; + level.jugg_loadouts["allies"]["loadoutSecondaryReticle"] = "none"; + level.jugg_loadouts["allies"]["loadoutEquipment"] = "frag_grenade_mp"; + level.jugg_loadouts["allies"]["loadoutOffhand"] = "smoke_grenade_mp"; + level.jugg_loadouts["allies"]["loadoutPerk1"] = "specialty_scavenger"; + level.jugg_loadouts["allies"]["loadoutPerk2"] = "_specialty_blastshield"; + level.jugg_loadouts["allies"]["loadoutPerk3"] = "specialty_bulletaccuracy"; + level.jugg_loadouts["allies"]["loadoutDeathstreak"] = "specialty_null"; + level.jugg_loadouts["allies"]["loadoutJuggernaut"] = 1; +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/gametypes/koth.gsc b/MW3/PC/MP/maps/mp/gametypes/koth.gsc new file mode 100644 index 0000000..54a4894 --- /dev/null +++ b/MW3/PC/MP/maps/mp/gametypes/koth.gsc @@ -0,0 +1,1036 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\koth.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 23 + * Decompile Time: 352 ms + * Timestamp: 10/27/2023 2:13:20 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(getdvar("mapname") == "mp_background") + { + return; + } + + maps\mp\gametypes\_globallogic::init(); + maps\mp\gametypes\_callbacksetup::setupcallbacks(); + maps\mp\gametypes\_globallogic::setupcallbacks(); + if(isusingmatchrulesdata()) + { + level.initializematchrules = ::initializematchrules; + [[ level.initializematchrules ]](); + level thread maps\mp\_utility::reinitializematchrulesonmigration(); + } + else + { + maps\mp\_utility::registertimelimitdvar(level.gametype,30); + maps\mp\_utility::registerscorelimitdvar(level.gametype,300); + maps\mp\_utility::registerroundlimitdvar(level.gametype,1); + maps\mp\_utility::registerwinlimitdvar(level.gametype,1); + maps\mp\_utility::registernumlivesdvar(level.gametype,0); + maps\mp\_utility::registerhalftimedvar(level.gametype,0); + level.matchrules_damagemultiplier = 0; + level.matchrules_vampirism = 0; + } + + level.teambased = 1; + level.doprematch = 1; + level.onstartgametype = ::onstartgametype; + level.getspawnpoint = ::getspawnpoint; + level.onspawnplayer = ::onspawnplayer; + level.onplayerkilled = ::onplayerkilled; + level.initgametypeawards = ::initgametypeawards; + if(level.matchrules_damagemultiplier || level.matchrules_vampirism) + { + level.modifyplayerdamage = ::maps\mp\gametypes\_damage::gamemodemodifyplayerdamage; + } + + precacheshader("waypoint_captureneutral"); + precacheshader("waypoint_capture"); + precacheshader("waypoint_defend"); + precacheshader("waypoint_targetneutral"); + precacheshader("waypoint_captureneutral"); + precacheshader("waypoint_capture"); + precacheshader("waypoint_defend"); + precachestring(&"MP_WAITING_FOR_HQ"); + if(getdvar("koth_autodestroytime") == "") + { + setdvar("koth_autodestroytime","60"); + } + + level.hqautodestroytime = getdvarint("koth_autodestroytime"); + if(getdvar("koth_spawntime") == "") + { + setdvar("koth_spawntime","0"); + } + + level.hqspawntime = getdvarint("koth_spawntime"); + if(getdvar("koth_kothmode") == "") + { + setdvar("koth_kothmode","1"); + } + + level.kothmode = getdvarint("koth_kothmode"); + if(getdvar("koth_captureTime") == "") + { + setdvar("koth_captureTime","20"); + } + + level.capturetime = getdvarint("koth_captureTime"); + if(getdvar("koth_destroyTime") == "") + { + setdvar("koth_destroyTime","10"); + } + + level.destroytime = getdvarint("koth_destroyTime"); + if(getdvar("koth_delayPlayer") == "") + { + setdvar("koth_delayPlayer",1); + } + + level.delayplayer = getdvarint("koth_delayPlayer"); + if(getdvar("koth_spawnDelay") == "") + { + setdvar("koth_spawnDelay",0); + } + + level.spawndelay = getdvarint("koth_spawnDelay"); + if(getdvar("koth_extraDelay") == "") + { + setdvar("koth_extraDelay",0); + } + + level.extradelay = getdvarint("koth_extraDelay"); + setdvarifuninitialized("koth_proMode",0); + level.promode = getdvarint("koth_proMode"); + level.iconoffset = (0,0,32); + level.onrespawndelay = ::func_3995; + game["dialog"]["gametype"] = "headquarters"; + if(getdvarint("g_hardcore")) + { + if(getmapcustom("allieschar") == "us_army") + { + game["dialog"]["allies_gametype"] = "hc_hq"; + } + + if(getmapcustom("axischar") == "us_army") + { + game["dialog"]["axis_gametype"] = "hc_hq"; + } + + game["dialog"]["gametype"] = "hc_" + game["dialog"]["gametype"]; + return; + } + + if(getdvarint("camera_thirdPerson")) + { + game["dialog"]["gametype"] = "thirdp_" + game["dialog"]["gametype"]; + return; + } + + if(getdvarint("scr_diehard")) + { + game["dialog"]["gametype"] = "dh_" + game["dialog"]["gametype"]; + return; + } + + if(getdvarint("scr_" + level.gametype + "_promode")) + { + game["dialog"]["gametype"] = game["dialog"]["gametype"] + "_pro"; + return; + } +} + +//Function Number: 2 +initializematchrules() +{ + maps\mp\_utility::setcommonrulesfrommatchrulesdata(); + setdynamicdvar("koth_autodestroytime",getmatchrulesdata("hqData","HQLifetime")); + setdynamicdvar("koth_spawntime",getmatchrulesdata("hqData","HQActivateDelay")); + setdynamicdvar("scr_koth_roundswitch",1); + maps\mp\_utility::registerroundswitchdvar("koth",1,0,9); + setdynamicdvar("scr_koth_roundlimit",1); + maps\mp\_utility::registerroundlimitdvar("koth",1); + setdynamicdvar("scr_koth_winlimit",1); + maps\mp\_utility::registerwinlimitdvar("koth",1); + setdynamicdvar("scr_koth_halftime",0); + maps\mp\_utility::registerhalftimedvar("koth",0); + setdynamicdvar("koth_kothmode",0); + setdynamicdvar("koth_capturetime",20); + setdynamicdvar("koth_destroytime",10); + setdynamicdvar("koth_delayPlayer",0); + setdynamicdvar("koth_spawnDelay",60); + setdynamicdvar("koth_extraDelay",0); + setdynamicdvar("koth_proMode",0); + setdynamicdvar("scr_koth_promode",0); +} + +//Function Number: 3 +func_3994(param_00,param_01) +{ + game["strings"]["objective_hint_allies"] = param_00; + game["strings"]["objective_hint_axis"] = param_01; + for(var_02 = 0;var_02 < level.players.size;var_02++) + { + var_03 = level.players[var_02]; + if(isdefined(var_03.pers["team"]) && var_03.pers["team"] != "spectator") + { + var_04 = maps\mp\_utility::getobjectivehinttext(var_03.pers["team"]); + var_03 thread maps\mp\gametypes\_hud_message::hintmessage(var_04); + } + } +} + +//Function Number: 4 +func_3995() +{ + maps\mp\_utility::clearlowermessage("hq_respawn"); + if(!isdefined(level.radioobject)) + { + return undefined; + } + + var_00 = level.radioobject maps\mp\gametypes\_gameobjects::getownerteam(); + if(self.pers["team"] == var_00) + { + if(!isdefined(level.hqdestroytime)) + { + return undefined; + } + + if(!level.spawndelay) + { + return undefined; + } + + var_01 = level.hqdestroytime - gettime() / 1000; + var_01 = var_01 + level.extradelay + 1; + if(level.spawndelay >= level.hqautodestroytime) + { + maps\mp\_utility::setlowermessage("hq_respawn",&"MP_WAITING_FOR_HQ",undefined,10); + } + + if(!isalive(self)) + { + self.forcespawnnearteammates = 1; + } + + if(level.delayplayer) + { + return min(level.spawndelay,var_01); + } + + return int(var_01) % level.spawndelay; + } +} + +//Function Number: 5 +onstartgametype() +{ + maps\mp\_utility::setobjectivetext("allies",&"OBJECTIVES_KOTH"); + maps\mp\_utility::setobjectivetext("axis",&"OBJECTIVES_KOTH"); + if(level.splitscreen) + { + maps\mp\_utility::setobjectivescoretext("allies",&"OBJECTIVES_KOTH"); + maps\mp\_utility::setobjectivescoretext("axis",&"OBJECTIVES_KOTH"); + } + else + { + maps\mp\_utility::setobjectivescoretext("allies",&"OBJECTIVES_KOTH_SCORE"); + maps\mp\_utility::setobjectivescoretext("axis",&"OBJECTIVES_KOTH_SCORE"); + } + + level.objectivehintpreparehq = &"MP_CONTROL_HQ"; + level.objectivehintcapturehq = &"MP_CAPTURE_HQ"; + level.objectivehintdestroyhq = &"MP_DESTROY_HQ"; + level.objectivehintdefendhq = &"MP_DEFEND_HQ"; + precachestring(level.objectivehintpreparehq); + precachestring(level.objectivehintcapturehq); + precachestring(level.objectivehintdestroyhq); + precachestring(level.objectivehintdefendhq); + if(level.kothmode) + { + level.objectivehintdestroyhq = level.objectivehintcapturehq; + } + + if(level.hqspawntime) + { + func_3994(level.objectivehintpreparehq,level.objectivehintpreparehq); + } + else + { + func_3994(level.objectivehintcapturehq,level.objectivehintcapturehq); + } + + setclientnamemode("auto_change"); + level.spawnmins = (0,0,0); + level.spawnmaxs = (0,0,0); + maps\mp\gametypes\_spawnlogic::addspawnpoints("allies","mp_tdm_spawn"); + maps\mp\gametypes\_spawnlogic::addspawnpoints("axis","mp_tdm_spawn"); + level.mapcenter = maps\mp\gametypes\_spawnlogic::findboxcenter(level.spawnmins,level.spawnmaxs); + setmapcenter(level.mapcenter); + level.spawn_all = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_tdm_spawn"); + if(!level.spawn_all.size) + { + maps\mp\gametypes\_callbacksetup::abortlevel(); + return; + } + + var_00[0] = "hq"; + maps\mp\gametypes\_gameobjects::main(var_00); + thread func_39AA(); + maps\mp\gametypes\_rank::registerscoreinfo("kill",50); + maps\mp\gametypes\_rank::registerscoreinfo("headshot",50); + maps\mp\gametypes\_rank::registerscoreinfo("assist",10); + maps\mp\gametypes\_rank::registerscoreinfo("defend",10); + maps\mp\gametypes\_rank::registerscoreinfo("assault",10); + maps\mp\gametypes\_rank::registerscoreinfo("capture",250); + thread func_399C(); +} + +//Function Number: 6 +func_399C() +{ + level endon("game_ended"); + level.hqrevealtime = -100000; + var_00 = &"MP_HQ_AVAILABLE_IN"; + if(level.kothmode) + { + var_01 = &"MP_HQ_DESPAWN_IN"; + var_02 = &"MP_HQ_DESPAWN_IN"; + } + else if(!level.splitscreen) + { + var_01 = &"MP_HQ_REINFORCEMENTS_IN"; + var_02 = &"MP_HQ_DESPAWN_IN"; + } + else + { + var_01 = &"MP_HQ_REINFORCEMENTS_IN_SPLITSCREEN"; + var_02 = &"MP_HQ_DESPAWN_IN"; + } + + precachestring(var_00); + precachestring(var_01); + precachestring(var_02); + precachestring(&"MP_CAPTURING_HQ"); + precachestring(&"MP_DESTROYING_HQ"); + maps\mp\_utility::gameflagwait("prematch_done"); + wait 5; + var_03 = []; + var_7B["allies"] maps\mp\gametypes\_hud_util::setpoint("TOP LEFT","TOP LEFT",125,2); + var_7B["allies"].label = var_01; + var_7B["allies"].alpha = 0; + var_7B["allies"].archived = 0; + var_7B["allies"].hidewheninmenu = 1; + var_7B["axis"] maps\mp\gametypes\_hud_util::setpoint("TOP LEFT","TOP LEFT",125,2); + var_7B["axis"].label = var_01; + var_7B["axis"].alpha = 0; + var_7B["axis"].archived = 0; + var_7B["axis"].hidewheninmenu = 1; + level.timerdisplay = var_7B; + thread func_39A2(var_7B["allies"]); + thread func_39A2(var_7B["axis"]); + var_04 = maps\mp\gametypes\_gameobjects::getnextobjid(); + objective_add(var_04,"invisible",(0,0,0)); + for(;;) + { + var_05 = func_39B3(); + var_05 func_39AF(); + maps\mp\_utility::playsoundonplayers("mp_suitcase_pickup"); + maps\mp\_utility::leaderdialog("hq_located"); + var_06 = var_05.gameobject; + level.radioobject = var_06; + var_06 maps\mp\gametypes\_gameobjects::setmodelvisibility(1); + level.hqrevealtime = gettime(); + if(level.hqspawntime) + { + var_07 = maps\mp\gametypes\_objpoints::createteamobjpoint("objpoint_next_hq",var_05.origin + level.iconoffset,"all","waypoint_targetneutral"); + var_07 setwaypoint(1,1); + objective_position(var_04,var_05.trigorigin); + objective_icon(var_04,"waypoint_targetneutral"); + objective_state(var_04,"active"); + func_3994(level.objectivehintpreparehq,level.objectivehintpreparehq); + var_7B["allies"].label = var_01; + var_7B["allies"] settimer(level.hqspawntime); + var_7B["allies"].alpha = 1; + var_7B["axis"].label = var_01; + var_7B["axis"] settimer(level.hqspawntime); + var_7B["axis"].alpha = 1; + wait level.hqspawntime; + maps\mp\gametypes\_objpoints::deleteobjpoint(var_07); + objective_state(var_04,"invisible"); + maps\mp\_utility::leaderdialog("hq_online"); + } + + var_7B["allies"].alpha = 0; + var_7B["axis"].alpha = 0; + waittillframeend; + maps\mp\_utility::leaderdialog("obj_capture"); + func_3994(level.objectivehintcapturehq,level.objectivehintcapturehq); + maps\mp\_utility::playsoundonplayers("mp_killstreak_radar"); + var_06 maps\mp\gametypes\_gameobjects::allowuse("any"); + var_06 maps\mp\gametypes\_gameobjects::setusetime(level.capturetime); + var_06 maps\mp\gametypes\_gameobjects::setusetext(&"MP_CAPTURING_HQ"); + var_06 maps\mp\gametypes\_gameobjects::set2dicon("enemy","waypoint_captureneutral"); + var_06 maps\mp\gametypes\_gameobjects::set3dicon("enemy","waypoint_captureneutral"); + var_06 maps\mp\gametypes\_gameobjects::setvisibleteam("any"); + var_06.onuse = ::func_39A4; + var_06.onbeginuse = ::onbeginuse; + var_06.onenduse = ::onenduse; + level waittill(maps\mp\gametypes\_hud_util::createservertimer("objective",1.4,"allies"),var_7B["allies"],maps\mp\gametypes\_hud_util::createservertimer("objective",1.4,"axis"),var_7B["axis"],"hq_captured"); + var_08 = var_06 maps\mp\gametypes\_gameobjects::getownerteam(); + var_09 = maps\mp\_utility::getotherteam(var_08); + if(level.hqautodestroytime) + { + thread func_39A6(level.hqautodestroytime); + var_7B[var_08] settimer(level.hqautodestroytime + level.extradelay); + var_7B[var_09] settimer(level.hqautodestroytime); + } + else + { + level.hqdestroyedbytimer = 0; + } + + for(;;) + { + var_08 = var_06 maps\mp\gametypes\_gameobjects::getownerteam(); + var_09 = maps\mp\_utility::getotherteam(var_08); + if(var_08 == "allies") + { + func_3994(level.objectivehintdefendhq,level.objectivehintdestroyhq); + } + else + { + func_3994(level.objectivehintdestroyhq,level.objectivehintdefendhq); + } + + var_06 maps\mp\gametypes\_gameobjects::allowuse("enemy"); + var_06 maps\mp\gametypes\_gameobjects::set2dicon("friendly","waypoint_defend"); + var_06 maps\mp\gametypes\_gameobjects::set3dicon("friendly","waypoint_defend"); + var_06 maps\mp\gametypes\_gameobjects::set2dicon("enemy","waypoint_capture"); + var_06 maps\mp\gametypes\_gameobjects::set3dicon("enemy","waypoint_capture"); + if(!level.kothmode) + { + var_06 maps\mp\gametypes\_gameobjects::setusetext(&"MP_DESTROYING_HQ"); + } + + var_06.onuse = ::func_39A5; + if(level.hqautodestroytime) + { + var_7B[var_08].label = var_02; + var_7B[var_08].alpha = 1; + var_7B[var_09].label = var_03; + var_7B[var_09].alpha = 1; + } + + level waittill("hq_destroyed"); + var_7B[var_09].alpha = 0; + if(!level.kothmode || level.hqdestroyedbytimer) + { + break; + } + + thread func_39A3(var_08); + var_06 maps\mp\gametypes\_gameobjects::setownerteam(maps\mp\_utility::getotherteam(var_08)); + } + + level notify("hq_reset"); + var_06 maps\mp\gametypes\_gameobjects::allowuse("none"); + var_06 maps\mp\gametypes\_gameobjects::setownerteam("neutral"); + var_06 maps\mp\gametypes\_gameobjects::setmodelvisibility(0); + var_05 func_39B0(); + level.radioobject = undefined; + thread func_39A3(var_08,level.extradelay); + wait level.extradelay; + wait max(1,6 - level.extradelay); + } +} + +//Function Number: 7 +func_39A2(param_00) +{ + level waittill("game_ended"); + param_00.alpha = 0; +} + +//Function Number: 8 +func_39A3(param_00,param_01) +{ + if(param_01) + { + foreach(var_03 in level.players) + { + if(isalive(var_03)) + { + continue; + } + + if(var_03.pers["team"] == param_00) + { + var_03 maps\mp\_utility::setlowermessage("hq_respawn",game["strings"]["waiting_to_spawn"]); + } + } + + wait param_01; + } + + level.timerdisplay[param_00].alpha = 0; + foreach(var_03 in level.players) + { + if(var_03.pers["team"] == param_00) + { + var_03 maps\mp\_utility::clearlowermessage("hq_respawn"); + if(!isalive(var_03)) + { + var_03.forcespawnnearteammates = 1; + } + + var_03 notify("force_spawn"); + } + } +} + +//Function Number: 9 +onbeginuse(param_00) +{ + var_01 = maps\mp\gametypes\_gameobjects::getownerteam(); + if(var_01 == "neutral") + { + self.objpoints[param_00.pers["team"]] thread maps\mp\gametypes\_objpoints::startflashing(); + return; + } + + self.objpoints["allies"] thread maps\mp\gametypes\_objpoints::startflashing(); + self.objpoints["axis"] thread maps\mp\gametypes\_objpoints::startflashing(); +} + +//Function Number: 10 +onenduse(param_00,param_01,param_02) +{ + self.objpoints["allies"] thread maps\mp\gametypes\_objpoints::stopflashing(); + self.objpoints["axis"] thread maps\mp\gametypes\_objpoints::stopflashing(); +} + +//Function Number: 11 +func_39A4(param_00) +{ + var_01 = param_00.pers["team"]; + param_00 thread [[ level.onxpevent ]]("capture"); + lib_036E::func_2B7B("capture",param_00); + foreach(var_03 in self.touchlist[var_01]) + { + var_04 = var_03.player; + var_04 maps\mp\_utility::incplayerstat("hqscaptured",1); + var_04 maps\mp\_utility::incpersstat("captures",1); + var_04 maps\mp\gametypes\_persistance::statsetchild("round","captures",param_00.pers["captures"]); + } + + param_00 thread maps\mp\_matchdata::loggameevent("capture",param_00.origin); + var_06 = maps\mp\gametypes\_gameobjects::getownerteam(); + maps\mp\gametypes\_gameobjects::setownerteam(var_01); + if(!level.kothmode) + { + maps\mp\gametypes\_gameobjects::setusetime(level.destroytime); + } + + var_07 = "axis"; + if(var_01 == "axis") + { + var_07 = "allies"; + } + + maps\mp\_utility::teamplayercardsplash("callout_capturedhq",param_00); + maps\mp\_utility::leaderdialog("hq_secured",var_01); + maps\mp\_utility::leaderdialog("hq_enemy_captured",var_07); + thread maps\mp\_utility::playsoundonplayers("mp_war_objective_taken",var_01); + thread maps\mp\_utility::playsoundonplayers("mp_war_objective_lost",var_07); + level thread func_39A7(var_01); + param_00 notify("objective","captured"); + level notify("hq_captured"); +} + +//Function Number: 12 +func_39A5(param_00) +{ + var_01 = param_00.pers["team"]; + var_02 = "axis"; + if(var_01 == "axis") + { + var_02 = "allies"; + } + + param_00 thread [[ level.onxpevent ]]("capture"); + lib_036E::func_2B7B("capture",param_00); + foreach(var_04 in self.touchlist[var_01]) + { + var_05 = var_04.player; + var_05 maps\mp\_utility::incplayerstat("hqsdestroyed",1); + var_05 maps\mp\_utility::incpersstat("destructions",1); + var_05 maps\mp\gametypes\_persistance::statsetchild("round","destructions",param_00.pers["destructions"]); + } + + param_00 thread maps\mp\_matchdata::loggameevent("destroy",param_00.origin); + if(level.kothmode) + { + maps\mp\_utility::teamplayercardsplash("callout_capturedhq",param_00); + maps\mp\_utility::leaderdialog("hq_secured",var_01); + maps\mp\_utility::leaderdialog("hq_enemy_captured",var_02); + } + else + { + maps\mp\_utility::teamplayercardsplash("callout_destroyedhq",param_00); + maps\mp\_utility::leaderdialog("hq_secured",var_01); + maps\mp\_utility::leaderdialog("hq_enemy_destroyed",var_02); + } + + thread maps\mp\_utility::playsoundonplayers("mp_war_objective_taken",var_01); + thread maps\mp\_utility::playsoundonplayers("mp_war_objective_lost",var_02); + level notify("hq_destroyed"); + if(level.kothmode) + { + level thread func_39A7(var_01); + } +} + +//Function Number: 13 +func_39A6(param_00) +{ + level endon("game_ended"); + level endon("hq_reset"); + level.hqdestroytime = gettime() + param_00 * 1000; + level.hqdestroyedbytimer = 0; + wait param_00; + level.hqdestroyedbytimer = 1; + maps\mp\_utility::leaderdialog("hq_offline"); + level notify("hq_destroyed"); +} + +//Function Number: 14 +func_39A7(param_00) +{ + level endon("game_ended"); + level endon("hq_destroyed"); + level notify("awardHQPointsRunning"); + level endon("awardHQPointsRunning"); + var_01 = 12; + var_02 = 5; + var_03 = 5; + var_04 = 10; + if(level.promode) + { + var_05 = int(level.hqautodestroytime / var_01); + } + else + { + var_05 = 5; + } + + var_06 = 0; + while(!level.gameended) + { + if(level.promode && level.hqautodestroytime) + { + lib_036E::func_2B88(param_00,int(var_04 * var_06 + 1)); + } + else + { + lib_036E::func_2B88(param_00,var_04); + } + + for(var_07 = 0;var_07 < level.players.size;var_07++) + { + var_08 = level.players[var_07]; + if(var_08.pers["team"] == param_00) + { + if(level.promode) + { + if(level.hqautodestroytime) + { + var_08 thread maps\mp\gametypes\_rank::giverankxp("defend",int(var_02 + var_03 * var_06)); + } + else + { + var_08 thread maps\mp\gametypes\_rank::giverankxp("defend",int(var_02 + var_03)); + } + } + else + { + var_08 thread maps\mp\gametypes\_rank::giverankxp("defend"); + } + + if(isalive(var_08)) + { + lib_036E::func_2B7B("defend",var_08); + } + } + } + + var_06++; + wait var_05; + maps\mp\gametypes\_hostmigration::waittillhostmigrationdone(); + } +} + +//Function Number: 15 +getspawnpoint() +{ + var_00 = undefined; + if(isdefined(level.radioobject)) + { + var_01 = level.radioobject maps\mp\gametypes\_gameobjects::getownerteam(); + if(self.pers["team"] == var_01) + { + var_00 = maps\mp\gametypes\_spawnlogic::getspawnpoint_nearteam(level.spawn_all,level.radioobject.nearspawns); + } + else + { + var_00 = maps\mp\gametypes\_spawnlogic::getspawnpoint_nearteam(level.spawn_all,level.radioobject.outerspawns); + } + } + + if(!isdefined(var_00)) + { + var_00 = maps\mp\gametypes\_spawnlogic::getspawnpoint_nearteam(level.spawn_all); + } + + return var_00; +} + +//Function Number: 16 +onspawnplayer() +{ + maps\mp\_utility::clearlowermessage("hq_respawn"); + self.forcespawnnearteammates = undefined; +} + +//Function Number: 17 +func_39AA() +{ + var_00 = []; + var_01 = getentarray("hq_hardpoint","targetname"); + if(var_01.size < 2) + { + var_00[var_00.size] = "There are not at least 2 entities with targetname \"radio\"; + } + + var_02 = getentarray("radiotrigger","targetname"); + for(var_03 = 0;var_03 < var_01.size;var_03++) + { + var_04 = 0; + var_05 = var_01[var_03]; + var_05.trig = undefined; + for(var_06 = 0;var_06 < var_02.size;var_06++) + { + if(var_05 istouching(var_02[var_06])) + { + if(isdefined(var_05.trig)) + { + var_00[var_00.size] = "Radio at " + var_05.origin + " is touching more than one \"radiotrigger\" trigger"; + var_04 = 1; + break; + } + + var_05.trig = var_02[var_06]; + break; + } + } + + if(!isdefined(var_05.trig)) + { + if(!var_04) + { + var_00[var_00.size] = "Radio at " + var_05.origin + " is not inside any \"radiotrigger\" trigger"; + continue; + } + } + + var_05.trigorigin = var_05.trig.origin; + var_07 = []; + var_07[0] = var_05; + var_08 = getentarray(var_05.target,"targetname"); + for(var_06 = 0;var_06 < var_08.size;var_06++) + { + var_07[var_07.size] = var_08[var_06]; + } + + var_05.visuals = var_07; + var_05 maps\mp\gametypes\_gameobjects::setmodelvisibility(0); + } + + if(var_00.size > 0) + { + for(var_03 = 0;var_03 < var_00.size;var_03++) + { + } + + common_scripts\utility::error("Map errors. See above"); + maps\mp\gametypes\_callbacksetup::abortlevel(); + return; + } + + level.radios = var_01; + level.prevradio = undefined; + level.prevradio2 = undefined; + return 1; +} + +//Function Number: 18 +func_39AF() +{ + self.gameobject = maps\mp\gametypes\_gameobjects::createuseobject("neutral",self.trig,self.visuals,self.origin - self.trigorigin + level.iconoffset); + self.gameobject maps\mp\gametypes\_gameobjects::setmodelvisibility(0); + self.trig.useobj = self.gameobject; + func_39B1(); +} + +//Function Number: 19 +func_39B0() +{ + self.gameobject maps\mp\gametypes\_gameobjects::deleteuseobject(); + self.gameobject = undefined; +} + +//Function Number: 20 +func_39B1() +{ + var_00 = level.spawn_all; + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + var_00[var_01].distsq = distancesquared(var_00[var_01].origin,self.origin); + } + + for(var_01 = 1;var_01 < var_00.size;var_01++) + { + var_02 = var_00[var_01]; + for(var_03 = var_01 - 1;var_03 >= 0 && var_02.distsq < var_00[var_03].distsq;var_03--) + { + var_00[var_03 + 1] = var_00[var_03]; + } + + var_00[var_03 + 1] = var_02; + } + + var_04 = []; + var_05 = []; + var_06 = var_00.size / 3; + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + if(var_01 <= var_06 || var_00[var_01].distsq <= 490000) + { + var_04[var_04.size] = var_00[var_01]; + } + + if(var_01 > var_06 || var_00[var_01].distsq > 1000000) + { + if(var_05.size < 10 || var_00[var_01].distsq < 2250000) + { + var_05[var_05.size] = var_00[var_01]; + } + } + } + + self.gameobject.nearspawns = var_04; + self.gameobject.outerspawns = var_05; +} + +//Function Number: 21 +func_39B3() +{ + var_00 = []; + var_01 = []; + foreach(var_03 in level.players) + { + if(var_03.team == "spectator") + { + continue; + } + + if(!isalive(var_03)) + { + continue; + } + + var_03.dist = 0; + if(var_03.team == "allies") + { + var_00[var_00.size] = var_03; + continue; + } + + var_01[var_01.size] = var_03; + } + + if(!var_00.size || !var_01.size) + { + var_05 = level.radios[randomint(level.radios.size)]; + while(isdefined(level.prevradio) && var_05 == level.prevradio) + { + var_05 = level.radios[randomint(level.radios.size)]; + } + + level.prevradio2 = level.prevradio; + level.prevradio = var_05; + return var_05; + } + + for(var_06 = 0;var_06 < var_01.size;var_06++) + { + for(var_07 = var_06 + 1;var_07 < var_01.size;var_07++) + { + var_08 = distancesquared(var_01[var_06].origin,var_01[var_07].origin); + var_01[var_06].dist = var_01[var_06].dist + var_08; + var_01[var_07].dist = var_01[var_07].dist + var_08; + } + } + + for(var_06 = 0;var_06 < var_02.size;var_06++) + { + for(var_07 = var_06 + 1;var_07 < var_02.size;var_07++) + { + var_08 = distancesquared(var_02[var_06].origin,var_02[var_07].origin); + var_02[var_06].dist = var_02[var_06].dist + var_08; + var_02[var_07].dist = var_02[var_07].dist + var_08; + } + } + + var_09 = var_01[0]; + foreach(var_04 in var_01) + { + if(var_04.dist < var_09.dist) + { + var_09 = var_04; + } + } + + var_0C["allies"] = var_09.origin; + var_09 = var_02[0]; + foreach(var_04 in var_02) + { + if(var_04.dist < var_09.dist) + { + var_09 = var_04; + } + } + + var_0C["axis"] = var_02[0].origin; + var_0F = undefined; + var_10 = undefined; + var_06 = 0; + while(var_05 < level.radios.size) + { + var_10 = level.radios[var_05]; + var_11 = abs(distance(var_10.origin,var_0B["allies"]) - distance(var_10.origin,var_0B["axis"])); + if(isdefined(level.prevradio) && var_10 == level.prevradio) + { + continue; + } + + if(isdefined(level.prevradio2) && var_10 == level.prevradio2) + { + if(level.radios.size > 2) + { + continue; + } + else + { + var_11 = var_11 + 512; + } + } + + if(!isdefined(var_0F) || var_11 < var_0F) + { + var_0F = var_11; + var_0E = var_10; + } + + var_05++; + } + + level.prevradio2 = level.prevradio; + level.prevradio = var_0E; + return var_0E; +} + +//Function Number: 22 +onplayerkilled(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09) +{ + if(!isplayer(param_01) || !self.touchtriggers.size && !param_01.touchtriggers.size || param_01.pers["team"] == self.pers["team"]) + { + return; + } + + if(self.touchtriggers.size) + { + foreach(var_0B in self.touchtriggers) + { + if(!isdefined(var_0B.useobj)) + { + continue; + } + + var_0C = var_0B.useobj.ownerteam; + var_0D = self.pers["team"]; + if(var_0C == "neutral") + { + continue; + } + + var_0D = self.pers["team"]; + if(var_0D == var_0C) + { + param_01 thread [[ level.onxpevent ]]("assault"); + lib_036E::func_2B7B("assault",param_01); + thread maps\mp\_matchdata::logkillevent(param_09,"defending"); + continue; + } + + param_01 thread [[ level.onxpevent ]]("defend"); + lib_036E::func_2B7B("defend",param_01); + param_01 maps\mp\_utility::incpersstat("defends",1); + param_01 maps\mp\gametypes\_persistance::statsetchild("round","defends",param_01.pers["defends"]); + thread maps\mp\_matchdata::logkillevent(param_09,"assaulting"); + } + } + + if(param_01.touchtriggers.size) + { + foreach(var_0B in param_01.touchtriggers) + { + if(!isdefined(var_0B.useobj)) + { + continue; + } + + var_0C = var_0B.useobj.ownerteam; + var_0D = param_01.pers["team"]; + if(var_0C == "neutral") + { + var_0D = param_01.pers["team"]; + } + + if(var_0D == var_0C) + { + param_01 thread [[ level.onxpevent ]]("defend"); + lib_036E::func_2B7B("defend",param_01); + thread maps\mp\_matchdata::logkillevent(param_09,"assaulting"); + continue; + } + + param_01 thread [[ level.onxpevent ]]("assault"); + lib_036E::func_2B7B("assault",param_01); + thread maps\mp\_matchdata::logkillevent(param_09,"defending"); + } + } +} + +//Function Number: 23 +initgametypeawards() +{ + maps\mp\_awards::initstataward("hqsdestroyed",0,::maps\mp\_awards::highestwins); + maps\mp\_awards::initstataward("hqscaptured",0,::maps\mp\_awards::highestwins); +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/gametypes/oneflag.gsc b/MW3/PC/MP/maps/mp/gametypes/oneflag.gsc new file mode 100644 index 0000000..ba8514c --- /dev/null +++ b/MW3/PC/MP/maps/mp/gametypes/oneflag.gsc @@ -0,0 +1,510 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\oneflag.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 23 + * Decompile Time: 321 ms + * Timestamp: 10/27/2023 2:13:21 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + maps\mp\gametypes\_globallogic::init(); + maps\mp\gametypes\_callbacksetup::setupcallbacks(); + maps\mp\gametypes\_globallogic::setupcallbacks(); + maps\mp\_utility::registertimelimitdvar(level.gametype,3,0,1440); + maps\mp\_utility::registerscorelimitdvar(level.gametype,1,0,10000); + maps\mp\_utility::registerroundlimitdvar(level.gametype,0,0,30); + maps\mp\_utility::registerwinlimitdvar(level.gametype,4,0,10); + maps\mp\_utility::registerroundswitchdvar(level.gametype,3,0,30); + maps\mp\_utility::registernumlivesdvar(level.gametype,0,0,10); + maps\mp\_utility::registerhalftimedvar(level.gametype,0,0,1); + level.objectivebased = 1; + level.teambased = 1; + level.onprecachegametype = ::onprecachegametype; + level.onstartgametype = ::onstartgametype; + level.getspawnpoint = ::getspawnpoint; + level.onspawnplayer = ::onspawnplayer; + level.onplayerkilled = ::onplayerkilled; + level.ontimelimit = ::ontimelimit; + level.initgametypeawards = ::initgametypeawards; + game["dialog"]["gametype"] = "oneflag"; + if(getdvarint("g_hardcore")) + { + game["dialog"]["gametype"] = "hc_" + game["dialog"]["gametype"]; + } + else if(getdvarint("camera_thirdPerson")) + { + game["dialog"]["gametype"] = "thirdp_" + game["dialog"]["gametype"]; + } + else if(getdvarint("scr_diehard")) + { + game["dialog"]["gametype"] = "dh_" + game["dialog"]["gametype"]; + } + else if(getdvarint("scr_" + level.gametype + "_promode")) + { + game["dialog"]["gametype"] = game["dialog"]["gametype"] + "_pro"; + } + + if(getdvar("scr_oneflag_returntime") == "") + { + setdvar("scr_oneflag_returntime","15"); + } + + level.flagreturntime = getdvarint("scr_oneflag_returntime"); +} + +//Function Number: 2 +onprecachegametype() +{ + precachestring(&"MP_FLAG_TAKEN_BY"); + precachestring(&"MP_ENEMY_FLAG_TAKEN_BY"); + precachestring(&"MP_FLAG_CAPTURED_BY"); + precachestring(&"MP_ENEMY_FLAG_CAPTURED_BY"); + precachestring(&"MP_FLAG_RETURNED"); + precachestring(&"MP_ENEMY_FLAG_RETURNED"); + precachestring(&"MP_YOUR_FLAG_RETURNING_IN"); + precachestring(&"MP_ENEMY_FLAG_RETURNING_IN"); + precachestring(&"MP_ENEMY_FLAG_DROPPED_BY"); + precachestring(&"MP_DOM_NEUTRAL_FLAG_CAPTURED"); +} + +//Function Number: 3 +onstartgametype() +{ + if(!isdefined(game["switchedsides"])) + { + game["switchedsides"] = 0; + } + + if(!isdefined(game["original_defenders"])) + { + game["original_defenders"] = game["defenders"]; + } + + if(game["switchedsides"]) + { + var_00 = game["attackers"]; + var_01 = game["defenders"]; + game["attackers"] = var_01; + game["defenders"] = var_00; + } + + setclientnamemode("auto_change"); + maps\mp\_utility::setobjectivetext(game["attackers"],&"OBJECTIVES_CTF"); + maps\mp\_utility::setobjectivetext(game["defenders"],&"OBJECTIVES_CTF"); + if(level.splitscreen) + { + maps\mp\_utility::setobjectivescoretext(game["attackers"],&"OBJECTIVES_ONE_FLAG_ATTACKER"); + maps\mp\_utility::setobjectivescoretext(game["defenders"],&"OBJECTIVES_ONE_FLAG_DEFENDER"); + } + else + { + maps\mp\_utility::setobjectivescoretext(game["attackers"],&"OBJECTIVES_ONE_FLAG_ATTACKER_SCORE"); + maps\mp\_utility::setobjectivescoretext(game["defenders"],&"OBJECTIVES_ONE_FLAG_DEFENDER_SCORE"); + } + + maps\mp\_utility::setobjectivehinttext(game["attackers"],&"OBJECTIVES_ONE_FLAG_ATTACKER_HINT"); + maps\mp\_utility::setobjectivehinttext(game["defenders"],&"OBJECTIVES_ONE_FLAG_DEFENDER_HINT"); + level.spawnmins = (0,0,0); + level.spawnmaxs = (0,0,0); + maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_ctf_spawn_allies_start"); + maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_ctf_spawn_axis_start"); + maps\mp\gametypes\_spawnlogic::addspawnpoints("allies","mp_ctf_spawn_allies"); + maps\mp\gametypes\_spawnlogic::addspawnpoints("axis","mp_ctf_spawn_axis"); + level.mapcenter = maps\mp\gametypes\_spawnlogic::findboxcenter(level.spawnmins,level.spawnmaxs); + setmapcenter(level.mapcenter); + var_02[0] = "ctf"; + maps\mp\gametypes\_gameobjects::main(var_02); + maps\mp\gametypes\_rank::registerscoreinfo("kill",100); + maps\mp\gametypes\_rank::registerscoreinfo("headshot",100); + maps\mp\gametypes\_rank::registerscoreinfo("assist",20); + maps\mp\gametypes\_rank::registerscoreinfo("pickup",100); + maps\mp\gametypes\_rank::registerscoreinfo("return",50); + maps\mp\gametypes\_rank::registerscoreinfo("capture",500); + maps\mp\gametypes\_rank::registerscoreinfo("kill_carrier",100); + maps\mp\gametypes\_rank::registerscoreinfo("defend",100); + maps\mp\gametypes\_rank::registerscoreinfo("defend_assist",100); + maps\mp\gametypes\_rank::registerscoreinfo("assault",200); + maps\mp\gametypes\_rank::registerscoreinfo("assault_assist",40); + thread func_39B6(); +} + +//Function Number: 4 +getspawnpoint() +{ + var_00 = self.pers["team"]; + if(game["switchedsides"]) + { + var_00 = maps\mp\_utility::getotherteam(var_00); + } + + if(level.ingraceperiod) + { + var_01 = getentarray("mp_ctf_spawn_" + var_00 + "_start","classname"); + var_02 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random(var_01); + } + else + { + var_01 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints(var_02); + var_02 = maps\mp\gametypes\_spawnlogic::getspawnpoint_nearteam(var_02); + } + + return var_02; +} + +//Function Number: 5 +onspawnplayer() +{ + self.usingobj = undefined; +} + +//Function Number: 6 +func_39B6() +{ + level.flagmodel["allies"] = maps\mp\gametypes\_teams::getteamflagmodel("allies"); + level.icon2d["allies"] = maps\mp\gametypes\_teams::getteamflagicon("allies"); + level.carryflag["allies"] = maps\mp\gametypes\_teams::getteamflagcarrymodel("allies"); + precachemodel(level.flagmodel["allies"]); + precachemodel(level.carryflag["allies"]); + level.flagmodel["axis"] = maps\mp\gametypes\_teams::getteamflagmodel("axis"); + level.icon2d["axis"] = maps\mp\gametypes\_teams::getteamflagicon("axis"); + level.carryflag["axis"] = maps\mp\gametypes\_teams::getteamflagcarrymodel("axis"); + precachemodel(level.flagmodel["axis"]); + precachemodel(level.carryflag["axis"]); + level.iconcapture3d = "waypoint_capture"; + level.iconcapture2d = "compass_waypoint_capture"; + level.icondefend3d = "waypoint_defend"; + level.icondefend2d = "compass_waypoint_defend"; + level.icontarget3d = "waypoint_target"; + level.icontarget2d = "compass_waypoint_target"; + precacheshader(level.icon2d["axis"]); + precacheshader(level.icon2d["allies"]); + precacheshader(level.iconcapture3d); + precacheshader(level.icondefend3d); + precacheshader(level.iconcapture2d); + precacheshader(level.icondefend2d); + precacheshader(level.icontarget3d); + precacheshader(level.icontarget2d); + precacheshader("waypoint_kill"); + level.teamflags[game["defenders"]] = func_39C2(game["defenders"]); + level.capzones[game["attackers"]] = func_39C3(game["attackers"]); + level.flagcaptured = 0; +} + +//Function Number: 7 +spawnfxdelay(param_00,param_01,param_02,param_03,param_04) +{ + wait param_04; + var_05 = spawnfx(param_00,param_01,param_02,param_03); + triggerfx(var_05); +} + +//Function Number: 8 +func_39C2(param_00) +{ + var_01 = game["original_defenders"]; + var_02 = getent("ctf_trig_" + var_01,"targetname"); + if(!isdefined(var_02)) + { + common_scripts\utility::error("No ctf_trig_" + var_01 + " trigger found in map."); + return; + } + + var_03[0] = getent("ctf_flag_" + var_01,"targetname"); + if(!isdefined(var_03[0])) + { + common_scripts\utility::error("No ctf_flag_" + var_01 + " script_model found in map."); + return; + } + + var_04 = spawn("trigger_radius",var_02.origin,0,96,var_02.height); + var_02 delete(); + var_02 = var_04; + var_03[0] setmodel(level.flagmodel[param_00]); + var_05 = maps\mp\gametypes\_gameobjects::createcarryobject(param_00,var_02,var_03,(0,0,85)); + var_05 maps\mp\gametypes\_gameobjects::setteamusetime("friendly",15); + var_05 maps\mp\gametypes\_gameobjects::setteamusetime("enemy",0); + var_05 maps\mp\gametypes\_gameobjects::setteamusetext("enemy",&"MP_CAPTURING_FLAG"); + var_05 maps\mp\gametypes\_gameobjects::setteamusetext("friendly",&"MP_RETURNING_FLAG"); + var_05 maps\mp\gametypes\_gameobjects::allowcarry("enemy"); + var_05 maps\mp\gametypes\_gameobjects::setvisibleteam("any"); + var_05 maps\mp\gametypes\_gameobjects::set2dicon("friendly",level.icondefend2d); + var_05 maps\mp\gametypes\_gameobjects::set3dicon("friendly",level.icondefend3d); + var_05 maps\mp\gametypes\_gameobjects::set2dicon("enemy",level.iconcapture2d); + var_05 maps\mp\gametypes\_gameobjects::set3dicon("enemy",level.iconcapture3d); + var_05 maps\mp\gametypes\_gameobjects::setcarryicon(level.icon2d[param_00]); + var_05.allowweapons = 1; + var_05.onpickup = ::onpickup; + var_05.onpickupfailed = ::onpickup; + var_05.ondrop = ::ondrop; + var_05.onreset = ::onreset; + var_05.oldradius = var_02.radius; + var_06 = var_02.origin + (0,0,32); + var_07 = var_02.origin + (0,0,-32); + var_08 = bullettrace(var_06,var_07,0,undefined); + var_09 = maps\mp\gametypes\_teams::getteamflagfx(param_00); + var_0A = loadfx(var_09); + var_0B = vectortoangles(var_08["normal"]); + var_0C = anglestoforward(var_0B); + var_0D = anglestoright(var_0B); + thread spawnfxdelay(var_0A,var_08["position"],var_0C,var_0D,0.5); + return var_05; +} + +//Function Number: 9 +func_39C3(param_00) +{ + var_01 = level.otherteam[game["original_defenders"]]; + var_02 = getent("ctf_zone_" + var_01,"targetname"); + if(!isdefined(var_02)) + { + common_scripts\utility::error("No ctf_zone_" + var_01 + " trigger found in map."); + return; + } + + var_03[0] = getent("ctf_flag_" + var_01,"targetname"); + if(!isdefined(var_03[0])) + { + common_scripts\utility::error("No ctf_flag_" + var_01 + " script_model found in map."); + return; + } + + var_03[0] hide(); + var_03 = []; + var_04 = maps\mp\gametypes\_gameobjects::createuseobject(param_00,var_02,var_03,(0,0,85)); + var_04 maps\mp\gametypes\_gameobjects::allowuse("friendly"); + var_04 maps\mp\gametypes\_gameobjects::setvisibleteam("none"); + var_04 maps\mp\gametypes\_gameobjects::set2dicon("friendly",level.icontarget2d); + var_04 maps\mp\gametypes\_gameobjects::set3dicon("friendly",level.icontarget3d); + var_04 maps\mp\gametypes\_gameobjects::setusetime(0); + var_04 maps\mp\gametypes\_gameobjects::setkeyobject(level.teamflags[maps\mp\_utility::getotherteam(param_00)]); + var_04.onuse = ::onuse; + var_04.oncantuse = ::oncantuse; + var_05 = var_02.origin + (0,0,32); + var_06 = var_02.origin + (0,0,-32); + var_07 = bullettrace(var_05,var_06,0,undefined); + var_08 = maps\mp\gametypes\_teams::getteamflagfx(param_00); + var_09 = loadfx(var_08); + var_0A = vectortoangles(var_07["normal"]); + var_0B = anglestoforward(var_0A); + var_0C = anglestoright(var_0A); + thread spawnfxdelay(var_09,var_07["position"],var_0B,var_0C,0.5); + return var_04; +} + +//Function Number: 10 +onbeginuse(param_00) +{ + var_01 = param_00.pers["team"]; + if(var_01 == maps\mp\gametypes\_gameobjects::getownerteam()) + { + self.trigger.radius = 1024; + return; + } + + self.trigger.radius = self.oldradius; +} + +//Function Number: 11 +onenduse(param_00,param_01,param_02) +{ + self.trigger.radius = self.oldradius; +} + +//Function Number: 12 +onpickup(param_00) +{ + var_01 = param_00.pers["team"]; + if(var_01 == "allies") + { + var_02 = "axis"; + } + else + { + var_02 = "allies"; + } + + if(var_01 == maps\mp\gametypes\_gameobjects::getownerteam()) + { + param_00 thread maps\mp\gametypes\_hud_message::splashnotify("flagreturn",maps\mp\gametypes\_rank::getscoreinfovalue("pickup")); + param_00 thread [[ level.onxpevent ]]("pickup"); + thread func_39C4(); + param_00 maps\mp\_utility::incplayerstat("flagsreturned",1); + param_00 thread maps\mp\_matchdata::loggameevent("return",param_00.origin); + return; + } + + param_00 func_39C5(); + level.capzones[var_01] maps\mp\gametypes\_gameobjects::setvisibleteam("any"); + maps\mp\gametypes\_gameobjects::set3dicon("enemy","waypoint_defend"); + maps\mp\gametypes\_gameobjects::set3dicon("friendly","waypoint_kill"); + maps\mp\gametypes\_gameobjects::set2dicon("friendly",level.icontarget2d); + maps\mp\_utility::printandsoundoneveryone(var_01,var_02,&"MP_ENEMY_FLAG_TAKEN_BY",&"MP_FLAG_TAKEN_BY","mp_obj_taken","mp_enemy_obj_taken",param_00); + maps\mp\_utility::leaderdialog("enemy_flag_taken",var_01,"status"); + maps\mp\_utility::leaderdialog("flag_taken",var_02,"status"); + param_00 thread maps\mp\gametypes\_hud_message::splashnotify("flagpickup",maps\mp\gametypes\_rank::getscoreinfovalue("pickup")); + lib_036E::func_2B7B("pickup",param_00); + param_00 thread [[ level.onxpevent ]]("pickup"); + param_00 maps\mp\_utility::incplayerstat("flagscarried",1); + param_00 thread maps\mp\_matchdata::loggameevent("pickup",param_00.origin); +} + +//Function Number: 13 +func_39C4() +{ + var_00 = maps\mp\gametypes\_gameobjects::getownerteam(); + var_01 = level.otherteam[var_00]; + maps\mp\gametypes\_gameobjects::returnhome(); + maps\mp\gametypes\_gameobjects::setvisibleteam("any"); + maps\mp\gametypes\_gameobjects::allowcarry("enemy"); + level.capzones[var_01] maps\mp\gametypes\_gameobjects::setvisibleteam("none"); + maps\mp\_utility::printandsoundoneveryone(var_00,maps\mp\_utility::getotherteam(var_00),&"MP_FLAG_RETURNED",&"MP_ENEMY_FLAG_RETURNED","mp_obj_returned","mp_obj_returned",""); + maps\mp\_utility::leaderdialog("enemy_flag_returned",var_01,"status"); + maps\mp\_utility::leaderdialog("flag_returned",var_00,"status"); +} + +//Function Number: 14 +ondrop(param_00) +{ + var_01 = maps\mp\gametypes\_gameobjects::getownerteam(); + var_02 = level.otherteam[var_01]; + maps\mp\gametypes\_gameobjects::set3dicon("friendly",level.icondefend3d); + maps\mp\gametypes\_gameobjects::set2dicon("friendly",level.icondefend2d); + maps\mp\gametypes\_gameobjects::set3dicon("enemy",level.iconcapture3d); + maps\mp\gametypes\_gameobjects::setvisibleteam("any"); + maps\mp\gametypes\_gameobjects::allowcarry("any"); + level.capzones[var_02] maps\mp\gametypes\_gameobjects::setvisibleteam("none"); + if(isdefined(param_00)) + { + if(isdefined(param_00.carryflag)) + { + param_00 func_39C6(); + } + + maps\mp\_utility::printandsoundoneveryone(var_02,"none",&"MP_ENEMY_FLAG_DROPPED_BY","","mp_war_objective_lost","",param_00); + } + else + { + maps\mp\_utility::playsoundonplayers("mp_war_objective_lost",var_02); + } + + maps\mp\_utility::leaderdialog("enemy_flag_dropped",var_02,"status"); + maps\mp\_utility::leaderdialog("flag_dropped",var_01,"status"); +} + +//Function Number: 15 +onreset() +{ + self notify("flag_reset"); + var_00 = maps\mp\gametypes\_gameobjects::getownerteam(); + var_01 = level.otherteam[var_00]; + maps\mp\gametypes\_gameobjects::setvisibleteam("any"); + maps\mp\gametypes\_gameobjects::set3dicon("friendly",level.icondefend3d); + maps\mp\gametypes\_gameobjects::set2dicon("friendly",level.icondefend2d); + maps\mp\gametypes\_gameobjects::set3dicon("enemy",level.iconcapture3d); + level.capzones[var_01] maps\mp\gametypes\_gameobjects::setvisibleteam("none"); +} + +//Function Number: 16 +onuse(param_00) +{ + var_01 = param_00.pers["team"]; + if(var_01 == "allies") + { + var_02 = "axis"; + } + else + { + var_02 = "allies"; + } + + maps\mp\_utility::leaderdialog("enemy_flag_captured",var_01,"status"); + maps\mp\_utility::leaderdialog("flag_captured",var_02,"status"); + lib_036E::func_2B7B("capture",param_00); + param_00 thread [[ level.onxpevent ]]("capture"); + param_00 maps\mp\_utility::incplayerstat("flagscaptured",1); + param_00 notify("objective","captured"); + param_00 thread maps\mp\_matchdata::loggameevent("capture",param_00.origin); + maps\mp\_utility::printandsoundoneveryone(var_01,var_02,&"MP_ENEMY_FLAG_CAPTURED_BY",&"MP_FLAG_CAPTURED_BY","mp_obj_captured","mp_enemy_obj_captured",param_00); + thread flagcaptured(var_01,&"MP_DOM_NEUTRAL_FLAG_CAPTURED"); + level.teamflags[var_02] maps\mp\gametypes\_gameobjects::allowcarry("none"); + level.teamflags[var_02] maps\mp\gametypes\_gameobjects::setvisibleteam("none"); + level.teamflags[var_02] maps\mp\gametypes\_gameobjects::disableobject(); + level.capzones[var_01] maps\mp\gametypes\_gameobjects::allowuse("none"); + if(isdefined(param_00.carryflag)) + { + param_00 func_39C6(); + } +} + +//Function Number: 17 +flagcaptured(param_00,param_01) +{ + maps\mp\gametypes\_gamelogic::endgame(param_00,param_01); + level.flagcaptured = 1; +} + +//Function Number: 18 +ontimelimit() +{ + if(level.flagcaptured) + { + return; + } + + maps\mp\gametypes\_gamelogic::endgame(game["defenders"],game["strings"]["time_limit_reached"]); +} + +//Function Number: 19 +oncantuse(param_00) +{ +} + +//Function Number: 20 +onplayerkilled(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09) +{ + if(isdefined(param_01) && isplayer(param_01) && param_01.pers["team"] != self.pers["team"]) + { + if(isdefined(param_01.carryflag)) + { + param_01 maps\mp\_utility::incplayerstat("killsasflagcarrier",1); + } + + if(isdefined(self.carryflag)) + { + param_01 thread [[ level.onxpevent ]]("kill_carrier"); + lib_036E::func_2B7B("kill_carrier",param_01); + param_01 maps\mp\_utility::incplayerstat("flagcarrierkills",1); + thread maps\mp\_matchdata::logkillevent(param_09,"carrying"); + func_39C6(); + } + } +} + +//Function Number: 21 +func_39C5() +{ + var_00 = level.otherteam[self.pers["team"]]; + self attach(level.carryflag[var_00],"J_spine4",1); + self.carryflag = level.carryflag[var_00]; +} + +//Function Number: 22 +func_39C6() +{ + self detach(self.carryflag,"J_spine4"); + self.carryflag = undefined; +} + +//Function Number: 23 +initgametypeawards() +{ + maps\mp\_awards::initstataward("flagscaptured",0,::maps\mp\_awards::highestwins); + maps\mp\_awards::initstataward("flagsreturned",0,::maps\mp\_awards::highestwins); + maps\mp\_awards::initstataward("flagcarrierkills",0,::maps\mp\_awards::highestwins); + maps\mp\_awards::initstataward("flagscarried",0,::maps\mp\_awards::highestwins); + maps\mp\_awards::initstataward("killsasflagcarrier",0,::maps\mp\_awards::highestwins); +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/gametypes/sab.gsc b/MW3/PC/MP/maps/mp/gametypes/sab.gsc new file mode 100644 index 0000000..101169c --- /dev/null +++ b/MW3/PC/MP/maps/mp/gametypes/sab.gsc @@ -0,0 +1,992 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\sab.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 37 + * Decompile Time: 3341 ms + * Timestamp: 10/27/2023 2:13:32 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(getdvar("mapname") == "mp_background") + { + return; + } + + maps\mp\gametypes\_globallogic::init(); + maps\mp\gametypes\_callbacksetup::setupcallbacks(); + maps\mp\gametypes\_globallogic::setupcallbacks(); + level.teambased = 1; + if(isusingmatchrulesdata()) + { + level.initializematchrules = ::initializematchrules; + [[ level.initializematchrules ]](); + level thread maps\mp\_utility::reinitializematchrulesonmigration(); + } + else + { + maps\mp\_utility::registerroundswitchdvar(level.gametype,0,0,9); + maps\mp\_utility::registertimelimitdvar(level.gametype,10); + maps\mp\_utility::registerscorelimitdvar(level.gametype,0); + maps\mp\_utility::registerroundlimitdvar(level.gametype,1); + maps\mp\_utility::registerwinlimitdvar(level.gametype,1); + maps\mp\_utility::registernumlivesdvar(level.gametype,0); + maps\mp\_utility::registerhalftimedvar(level.gametype,0); + level.matchrules_damagemultiplier = 0; + level.matchrules_vampirism = 0; + } + + maps\mp\_utility::setovertimelimitdvar(2); + func_3989(); + level.onprecachegametype = ::onprecachegametype; + level.onstartgametype = ::onstartgametype; + level.getspawnpoint = ::getspawnpoint; + level.onspawnplayer = ::onspawnplayer; + level.ononeleftevent = ::ononeleftevent; + level.ontimelimit = ::ontimelimit; + level.onnormaldeath = ::onnormaldeath; + level.initgametypeawards = ::initgametypeawards; + if(level.matchrules_damagemultiplier || level.matchrules_vampirism) + { + level.modifyplayerdamage = ::maps\mp\gametypes\_damage::gamemodemodifyplayerdamage; + } + + game["dialog"]["gametype"] = "sabotage"; + if(getdvarint("g_hardcore")) + { + game["dialog"]["gametype"] = "hc_" + game["dialog"]["gametype"]; + } + else if(getdvarint("camera_thirdPerson")) + { + game["dialog"]["gametype"] = "thirdp_" + game["dialog"]["gametype"]; + } + else if(getdvarint("scr_diehard")) + { + game["dialog"]["gametype"] = "dh_" + game["dialog"]["gametype"]; + } + else if(getdvarint("scr_" + level.gametype + "_promode")) + { + game["dialog"]["gametype"] = game["dialog"]["gametype"] + "_pro"; + } + + game["dialog"]["offense_obj"] = "capture_obj"; + game["dialog"]["defense_obj"] = "capture_obj"; + var_00 = getent("sab_bomb_defuse_allies","targetname"); + if(isdefined(var_00)) + { + var_00 delete(); + } + + var_00 = getent("sab_bomb_defuse_axis","targetname"); + if(isdefined(var_00)) + { + var_00 delete(); + } + + makedvarserverinfo("ui_bomb_timer_endtime",-1); +} + +//Function Number: 2 +initializematchrules() +{ + maps\mp\_utility::setcommonrulesfrommatchrulesdata(); + setdynamicdvar("scr_sab_bombtimer",getmatchrulesdata("sabData","bombTimer")); + setdynamicdvar("scr_sab_planttime",getmatchrulesdata("sabData","plantTime")); + setdynamicdvar("scr_sab_defusetime",getmatchrulesdata("sabData","defuseTime")); + setdynamicdvar("scr_sab_hotpotato",getmatchrulesdata("sabData","sharedBombTimer")); + setdynamicdvar("scr_sab_roundswitch",1); + maps\mp\_utility::registerroundswitchdvar("sab",1,0,9); + setdynamicdvar("scr_sab_roundlimit",1); + maps\mp\_utility::registerroundlimitdvar("sab",1); + setdynamicdvar("scr_sab_winlimit",1); + maps\mp\_utility::registerwinlimitdvar("sab",1); + setdynamicdvar("scr_sab_halftime",0); + maps\mp\_utility::registerhalftimedvar("sab",0); + setdynamicdvar("scr_sab_promode",0); +} + +//Function Number: 3 +onprecachegametype() +{ + game["bomb_dropped_sound"] = "mp_war_objective_lost"; + game["bomb_recovered_sound"] = "mp_war_objective_taken"; + precacheshader("waypoint_bomb"); + precacheshader("waypoint_kill"); + precacheshader("waypoint_bomb_enemy"); + precacheshader("waypoint_defend"); + precacheshader("waypoint_defuse"); + precacheshader("waypoint_target"); + precacheshader("waypoint_escort"); + precacheshader("waypoint_bomb"); + precacheshader("waypoint_defend"); + precacheshader("waypoint_defuse"); + precacheshader("waypoint_target"); + precacheshader("hud_suitcase_bomb"); + precachestring(&"MP_EXPLOSIVES_RECOVERED_BY"); + precachestring(&"MP_EXPLOSIVES_DROPPED_BY"); + precachestring(&"MP_EXPLOSIVES_PLANTED_BY"); + precachestring(&"MP_EXPLOSIVES_DEFUSED_BY"); + precachestring(&"MP_YOU_HAVE_RECOVERED_THE_BOMB"); + precachestring(&"PLATFORM_HOLD_TO_PLANT_EXPLOSIVES"); + precachestring(&"PLATFORM_HOLD_TO_DEFUSE_EXPLOSIVES"); + precachestring(&"MP_PLANTING_EXPLOSIVE"); + precachestring(&"MP_DEFUSING_EXPLOSIVE"); + precachestring(&"MP_TARGET_DESTROYED"); + precachestring(&"MP_NO_RESPAWN"); + precachestring(&"MP_TIE_BREAKER"); + precachestring(&"MP_NO_RESPAWN"); + precachestring(&"MP_SUDDEN_DEATH"); +} + +//Function Number: 4 +onstartgametype() +{ + if(!isdefined(game["switchedsides"])) + { + game["switchedsides"] = 0; + } + + setclientnamemode("auto_change"); + game["strings"]["target_destroyed"] = &"MP_TARGET_DESTROYED"; + game["strings"]["target_defended"] = &"MP_TARGET_DEDEFEND"; + maps\mp\_utility::setobjectivetext("allies",&"OBJECTIVES_SAB"); + maps\mp\_utility::setobjectivetext("axis",&"OBJECTIVES_SAB"); + if(level.splitscreen) + { + maps\mp\_utility::setobjectivescoretext("allies",&"OBJECTIVES_SAB"); + maps\mp\_utility::setobjectivescoretext("axis",&"OBJECTIVES_SAB"); + } + else + { + maps\mp\_utility::setobjectivescoretext("allies",&"OBJECTIVES_SAB_SCORE"); + maps\mp\_utility::setobjectivescoretext("axis",&"OBJECTIVES_SAB_SCORE"); + } + + maps\mp\_utility::setobjectivehinttext("allies",&"OBJECTIVES_SAB_HINT"); + maps\mp\_utility::setobjectivehinttext("axis",&"OBJECTIVES_SAB_HINT"); + level.spawnmins = (0,0,0); + level.spawnmaxs = (0,0,0); + maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_sab_spawn_allies_start"); + maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_sab_spawn_axis_start"); + maps\mp\gametypes\_spawnlogic::addspawnpoints("allies","mp_sab_spawn_allies"); + maps\mp\gametypes\_spawnlogic::addspawnpoints("axis","mp_sab_spawn_axis"); + maps\mp\gametypes\_spawnlogic::addspawnpoints("allies","mp_sab_spawn_allies_planted",1); + maps\mp\gametypes\_spawnlogic::addspawnpoints("axis","mp_sab_spawn_axis_planted",1); + level.mapcenter = maps\mp\gametypes\_spawnlogic::findboxcenter(level.spawnmins,level.spawnmaxs); + setmapcenter(level.mapcenter); + level.spawn_axis = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_sab_spawn_axis"); + level.spawn_axis_planted = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_sab_spawn_axis_planted"); + level.spawn_axis_planted = common_scripts\utility::array_combine(level.spawn_axis_planted,level.spawn_axis); + level.spawn_allies = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_sab_spawn_allies"); + level.spawn_allies_planted = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_sab_spawn_allies_planted"); + level.spawn_allies_planted = common_scripts\utility::array_combine(level.spawn_allies_planted,level.spawn_allies); + level.spawn_axis_start = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_sab_spawn_axis_start"); + level.spawn_allies_start = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_sab_spawn_allies_start"); + maps\mp\gametypes\_rank::registerscoreinfo("plant",200); + maps\mp\gametypes\_rank::registerscoreinfo("destroy",1000); + maps\mp\gametypes\_rank::registerscoreinfo("defuse",150); + var_00[0] = "sab"; + maps\mp\gametypes\_gameobjects::main(var_00); + thread updategametypedvars(); + thread func_397C(); +} + +//Function Number: 5 +getspawnpoint() +{ + var_00 = self.pers["team"]; + if(game["switchedsides"]) + { + var_00 = maps\mp\_utility::getotherteam(var_00); + } + + if(level.usestartspawns) + { + if(var_00 == "axis") + { + var_01 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random(level.spawn_axis_start); + } + else + { + var_01 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random(level.spawn_allies_start); + } + } + else if(isdefined(level.bombplanted) && level.bombplanted && isdefined(level.bombowner) && var_01 == level.bombowner.team) + { + if(var_01 == "axis") + { + var_01 = maps\mp\gametypes\_spawnlogic::getspawnpoint_nearteam(level.spawn_axis_planted); + } + else + { + var_01 = maps\mp\gametypes\_spawnlogic::getspawnpoint_nearteam(level.spawn_allies_planted); + } + } + else if(var_01 == "axis") + { + var_01 = maps\mp\gametypes\_spawnlogic::getspawnpoint_nearteam(level.spawn_axis); + } + else + { + var_01 = maps\mp\gametypes\_spawnlogic::getspawnpoint_nearteam(level.spawn_allies); + } + + return var_01; +} + +//Function Number: 6 +onspawnplayer() +{ + self.isplanting = 0; + self.isdefusing = 0; + self.isbombcarrier = 0; + if(maps\mp\_utility::inovertime() && !isdefined(self.otspawned)) + { + thread func_3979(); + } +} + +//Function Number: 7 +func_3979() +{ + self endon("disconnect"); + wait 0.25; + thread maps\mp\gametypes\_hud_message::splashnotify("sudden_death"); + self.otspawned = 1; +} + +//Function Number: 8 +updategametypedvars() +{ + level.planttime = maps\mp\_utility::dvarfloatvalue("planttime",5,0,20); + level.defusetime = maps\mp\_utility::dvarfloatvalue("defusetime",5,0,20); + level.bombtimer = maps\mp\_utility::dvarfloatvalue("bombtimer",45,1,300); + level.hotpotato = maps\mp\_utility::dvarintvalue("hotpotato",1,0,1); + level.scoremode = maps\mp\_utility::getwatcheddvar("scorelimit"); +} + +//Function Number: 9 +func_397C() +{ + level.bombplanted = 0; + level.bombexploded = 0; + level._effect["bombexplosion"] = loadfx("explosions/tanker_explosion"); + var_00 = getent("sab_bomb_pickup_trig","targetname"); + if(!isdefined(var_00)) + { + common_scripts\utility::error("No sab_bomb_pickup_trig trigger found in map."); + return; + } + + var_01[0] = getent("sab_bomb","targetname"); + if(!isdefined(var_01[0])) + { + common_scripts\utility::error("No sab_bomb script_model found in map."); + return; + } + + precachemodel("prop_suitcase_bomb"); + var_01[0] setmodel("prop_suitcase_bomb"); + level.sabbomb = maps\mp\gametypes\_gameobjects::createcarryobject("neutral",var_00,var_01,(0,0,32)); + level.sabbomb maps\mp\gametypes\_gameobjects::allowcarry("any"); + level.sabbomb maps\mp\gametypes\_gameobjects::set2dicon("enemy","waypoint_bomb"); + level.sabbomb maps\mp\gametypes\_gameobjects::set3dicon("enemy","waypoint_bomb"); + level.sabbomb maps\mp\gametypes\_gameobjects::set2dicon("friendly","waypoint_bomb"); + level.sabbomb maps\mp\gametypes\_gameobjects::set3dicon("friendly","waypoint_bomb"); + level.sabbomb maps\mp\gametypes\_gameobjects::setcarryicon("hud_suitcase_bomb"); + level.sabbomb maps\mp\gametypes\_gameobjects::setvisibleteam("any"); + level.sabbomb.objidpingenemy = 1; + level.sabbomb.onpickup = ::onpickup; + level.sabbomb.ondrop = ::ondrop; + level.sabbomb.allowweapons = 1; + level.sabbomb.objpoints["allies"].archived = 1; + level.sabbomb.objpoints["axis"].archived = 1; + level.sabbomb.autoresettime = 60; + if(!isdefined(getent("sab_bomb_axis","targetname"))) + { + common_scripts\utility::error("No sab_bomb_axis trigger found in map."); + return; + } + + if(!isdefined(getent("sab_bomb_allies","targetname"))) + { + common_scripts\utility::error("No sab_bomb_allies trigger found in map."); + return; + } + + if(game["switchedsides"]) + { + level.bombzones["allies"] = func_3982("allies",getent("sab_bomb_axis","targetname")); + level.bombzones["axis"] = func_3982("axis",getent("sab_bomb_allies","targetname")); + } + else + { + level.bombzones["allies"] = func_3982("allies",getent("sab_bomb_allies","targetname")); + level.bombzones["axis"] = func_3982("axis",getent("sab_bomb_axis","targetname")); + } + + if(level.scoremode) + { + level thread func_3980(); + } + + if(maps\mp\_utility::inovertime()) + { + level thread func_3984(); + } +} + +//Function Number: 10 +func_397E() +{ + if(distance2d(self.origin,level.bombzones["allies"].trigger.origin) < distance2d(self.origin,level.bombzones["axis"].trigger.origin)) + { + return "allies"; + } + + return "axis"; +} + +//Function Number: 11 +func_397F(param_00) +{ + return distance2d(self.origin,level.bombzones[param_00].trigger.origin); +} + +//Function Number: 12 +func_3980() +{ + level.bombdistance = distance2d(getent("sab_bomb_axis","targetname") getorigin(),getent("sab_bomb_allies","targetname") getorigin()); + var_00 = level.bombdistance / 2 - 384; + var_01 = level.sabbomb.trigger; + if(var_00 > var_01 func_397F("allies") || var_00 > var_01 func_397F("axis")) + { + var_00 = var_01 func_397F(var_01 func_397E()) - 128; + } + + var_02 = ""; + for(;;) + { + if(isdefined(level.sabbomb.carrier)) + { + var_01 = level.sabbomb.carrier; + } + else + { + var_01 = level.sabbomb.trigger; + } + + var_03 = var_02; + var_02 = "none"; + if(var_01 func_397F("allies") < var_00) + { + var_02 = level.bombzones["allies"] maps\mp\gametypes\_gameobjects::getownerteam(); + } + else if(var_01 func_397F("axis") < var_00) + { + var_02 = level.bombzones["axis"] maps\mp\gametypes\_gameobjects::getownerteam(); + } + else if(var_01 func_397F("allies") > level.bombdistance && var_01 func_397E() != "allies") + { + var_02 = level.bombzones["axis"] maps\mp\gametypes\_gameobjects::getownerteam(); + } + else if(var_01 func_397F("axis") > level.bombdistance && var_01 func_397E() != "axis") + { + var_02 = level.bombzones["allies"] maps\mp\gametypes\_gameobjects::getownerteam(); + } + + if(var_02 != "none") + { + if(!level.bombplanted || !maps\mp\_utility::getwatcheddvar("scorelimit") || level.bombplanted && lib_036E::func_2B96(level.otherteam[var_02]) < maps\mp\_utility::getwatcheddvar("scorelimit") - 1) + { + lib_036E::func_2B8F(level.otherteam[var_02],lib_036E::func_2B96(level.otherteam[var_02]) + 1); + lib_036E::func_2B93(level.otherteam[var_02]); + } + } + + if(var_02 != var_03 && !level.bombexploded) + { + setdvar("ui_danger_team",var_02); + } + + wait 2.5; + } +} + +//Function Number: 13 +func_3982(param_00,param_01) +{ + var_02 = getentarray(param_01.target,"targetname"); + var_03 = maps\mp\gametypes\_gameobjects::createuseobject(param_00,param_01,var_02,(0,0,64)); + var_03 func_3987(); + var_03.onuse = ::onuse; + var_03.onbeginuse = ::onbeginuse; + var_03.onenduse = ::onenduse; + var_03.oncantuse = ::oncantuse; + var_03.useweapon = "briefcase_bomb_mp"; + for(var_04 = 0;var_04 < var_02.size;var_04++) + { + if(isdefined(var_02[var_04].script_exploder)) + { + var_03.exploderindex = var_02[var_04].script_exploder; + var_02[var_04] thread func_3967(); + break; + } + } + + return var_03; +} + +//Function Number: 14 +func_3967() +{ + var_00 = spawn("script_origin",self.origin); + var_00.angles = self.angles; + var_00 rotateyaw(-45,0.05); + wait 0.05; + var_01 = self.origin + (0,0,5); + var_02 = self.origin + anglestoforward(var_00.angles) * 100 + (0,0,128); + var_03 = bullettrace(var_01,var_02,0,self); + self.killcament = spawn("script_model",var_03["position"]); + self.killcament setscriptmoverkillcam("explosive"); + var_00 delete(); +} + +//Function Number: 15 +onbeginuse(param_00) +{ + if(!maps\mp\gametypes\_gameobjects::isfriendlyteam(param_00.pers["team"])) + { + param_00.isplanting = 1; + return; + } + + param_00.isdefusing = 1; +} + +//Function Number: 16 +onenduse(param_00,param_01,param_02) +{ + if(!isalive(param_01)) + { + return; + } + + param_01.isplanting = 0; + param_01.isdefusing = 0; +} + +//Function Number: 17 +onpickup(param_00) +{ + level notify("bomb_picked_up"); + self.autoresettime = 60; + level.usestartspawns = 0; + var_01 = param_00.pers["team"]; + if(var_01 == "allies") + { + var_02 = "axis"; + } + else + { + var_02 = "allies"; + } + + param_00 playlocalsound("mp_suitcase_pickup"); + param_00 maps\mp\_utility::leaderdialogonplayer("obj_destroy","bomb"); + var_03[0] = param_00; + maps\mp\_utility::leaderdialog("bomb_taken",var_01,"bomb",var_03); + if(!level.splitscreen) + { + maps\mp\_utility::leaderdialog("bomb_lost",var_02,"bomb"); + maps\mp\_utility::leaderdialog("obj_defend",var_02,"bomb"); + } + + param_00.isbombcarrier = 1; + if(isdefined(level.sab_loadouts) && isdefined(level.sab_loadouts[var_01])) + { + param_00 thread func_396C(); + } + + if(var_01 == maps\mp\gametypes\_gameobjects::getownerteam()) + { + maps\mp\_utility::playsoundonplayers(game["bomb_recovered_sound"],var_01); + } + else + { + maps\mp\_utility::playsoundonplayers(game["bomb_recovered_sound"]); + } + + maps\mp\gametypes\_gameobjects::setownerteam(var_01); + maps\mp\gametypes\_gameobjects::setvisibleteam("any"); + maps\mp\gametypes\_gameobjects::set2dicon("enemy","waypoint_target"); + maps\mp\gametypes\_gameobjects::set3dicon("enemy","waypoint_kill"); + maps\mp\gametypes\_gameobjects::set2dicon("friendly","waypoint_escort"); + maps\mp\gametypes\_gameobjects::set3dicon("friendly","waypoint_escort"); + level.bombzones[var_01] maps\mp\gametypes\_gameobjects::setvisibleteam("none"); + level.bombzones[var_02] maps\mp\gametypes\_gameobjects::setvisibleteam("any"); + param_00 maps\mp\_utility::incplayerstat("bombscarried",1); + param_00 thread maps\mp\_matchdata::loggameevent("pickup",param_00.origin); +} + +//Function Number: 18 +ondrop(param_00) +{ + if(level.bombplanted) + { + return; + } + + if(isdefined(param_00)) + { + maps\mp\_utility::printonteamarg(&"MP_EXPLOSIVES_DROPPED_BY",maps\mp\gametypes\_gameobjects::getownerteam(),param_00); + } + + maps\mp\_utility::playsoundonplayers(game["bomb_dropped_sound"],maps\mp\gametypes\_gameobjects::getownerteam()); + thread func_3983(0); +} + +//Function Number: 19 +func_3983(param_00) +{ + level endon("bomb_picked_up"); + wait param_00; + if(isdefined(self.carrier)) + { + return; + } + + if(maps\mp\gametypes\_gameobjects::getownerteam() == "allies") + { + var_01 = "axis"; + } + else + { + var_01 = "allies"; + } + + maps\mp\_utility::playsoundonplayers(game["bomb_dropped_sound"],var_01); + maps\mp\gametypes\_gameobjects::setownerteam("neutral"); + maps\mp\gametypes\_gameobjects::setvisibleteam("any"); + maps\mp\gametypes\_gameobjects::set2dicon("enemy","waypoint_bomb"); + maps\mp\gametypes\_gameobjects::set3dicon("enemy","waypoint_bomb"); + maps\mp\gametypes\_gameobjects::set2dicon("friendly","waypoint_bomb"); + maps\mp\gametypes\_gameobjects::set3dicon("friendly","waypoint_bomb"); + level.bombzones["allies"] maps\mp\gametypes\_gameobjects::setvisibleteam("none"); + level.bombzones["axis"] maps\mp\gametypes\_gameobjects::setvisibleteam("none"); +} + +//Function Number: 20 +onuse(param_00) +{ + var_01 = param_00.pers["team"]; + var_02 = level.otherteam[var_01]; + if(!maps\mp\gametypes\_gameobjects::isfriendlyteam(param_00.pers["team"])) + { + param_00 notify("bomb_planted"); + param_00 notify("objective","plant"); + param_00 playsound("mp_bomb_plant"); + level thread maps\mp\_utility::teamplayercardsplash("callout_bombplanted",param_00); + maps\mp\_utility::leaderdialog("bomb_planted"); + param_00 thread maps\mp\gametypes\_hud_message::splashnotify("plant",maps\mp\gametypes\_rank::getscoreinfovalue("plant")); + param_00 thread maps\mp\gametypes\_rank::giverankxp("plant"); + lib_036E::func_2B7B("plant",param_00); + param_00 maps\mp\_utility::incplayerstat("bombsplanted",1); + param_00 thread maps\mp\_matchdata::loggameevent("plant",param_00.origin); + param_00.bombplantedtime = gettime(); + param_00 maps\mp\_utility::incpersstat("plants",1); + param_00 maps\mp\gametypes\_persistance::statsetchild("round","plants",param_00.pers["plants"]); + level thread bombplanted(self,param_00.pers["team"]); + level.bombowner = param_00; + if(isdefined(level.sab_loadouts) && isdefined(level.sab_loadouts[var_01])) + { + param_00 thread func_396D(); + } + + level.sabbomb.autoresettime = undefined; + level.sabbomb maps\mp\gametypes\_gameobjects::allowcarry("none"); + level.sabbomb maps\mp\gametypes\_gameobjects::setvisibleteam("none"); + level.sabbomb maps\mp\gametypes\_gameobjects::setdropped(); + self.useweapon = "briefcase_bomb_defuse_mp"; + func_3988(); + return; + } + + param_00 notify("bomb_defused"); + param_00 notify("objective","defuse"); + maps\mp\_utility::leaderdialog("bomb_defused"); + level thread maps\mp\_utility::teamplayercardsplash("callout_bombdefused",param_00); + if(isdefined(level.bombowner) && level.bombowner.bombplantedtime + 3000 + level.defusetime * 1000 > gettime() && maps\mp\_utility::isreallyalive(level.bombowner)) + { + param_00 thread maps\mp\gametypes\_hud_message::splashnotify("ninja_defuse",maps\mp\gametypes\_rank::getscoreinfovalue("defuse")); + } + else + { + param_00 thread maps\mp\gametypes\_hud_message::splashnotify("defuse",maps\mp\gametypes\_rank::getscoreinfovalue("defuse")); + } + + param_00 thread maps\mp\gametypes\_rank::giverankxp("defuse"); + lib_036E::func_2B7B("defuse",param_00); + param_00 maps\mp\_utility::incpersstat("defuses",1); + param_00 maps\mp\gametypes\_persistance::statsetchild("round","defuses",param_00.pers["defuses"]); + param_00 thread maps\mp\_matchdata::loggameevent("defuse",param_00.origin); + if(maps\mp\_utility::inovertime()) + { + level.finalkillcam_winner = var_01; + thread maps\mp\gametypes\_gamelogic::endgame(var_01,game["strings"]["target_destroyed"]); + return; + } + + level thread bombdefused(self); + func_3987(); + level.sabbomb maps\mp\gametypes\_gameobjects::allowcarry("any"); + level.sabbomb maps\mp\gametypes\_gameobjects::setpickedup(param_00); +} + +//Function Number: 21 +func_396C() +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + if(isdefined(self.iscarrying) && self.iscarrying == 1) + { + self notify("force_cancel_placement"); + wait 0.05; + } + + if(maps\mp\_utility::isjuggernaut()) + { + self notify("lost_juggernaut"); + wait 0.05; + } + + self.pers["gamemodeLoadout"] = level.sab_loadouts[self.team]; + var_00 = spawn("script_model",self.origin); + var_00.angles = self.angles; + var_00.playerspawnpos = self.origin; + var_00.notti = 1; + self.setspawnpoint = var_00; + self.gamemode_chosenclass = self.class; + self.pers["class"] = "gamemode"; + self.pers["lastClass"] = "gamemode"; + self.class = "gamemode"; + self.lastclass = "gamemode"; + self notify("faux_spawn"); + self.gameobject_fauxspawn = 1; + self.faux_spawn_stance = self getstance(); + thread maps\mp\gametypes\_playerlogic::spawnplayer(1); +} + +//Function Number: 22 +func_396D() +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + if(isdefined(self.iscarrying) && self.iscarrying == 1) + { + self notify("force_cancel_placement"); + wait 0.05; + } + + if(maps\mp\_utility::isjuggernaut()) + { + self notify("lost_juggernaut"); + wait 0.05; + } + + self.pers["gamemodeLoadout"] = undefined; + var_00 = spawn("script_model",self.origin); + var_00.angles = self.angles; + var_00.playerspawnpos = self.origin; + var_00.notti = 1; + self.setspawnpoint = var_00; + self notify("faux_spawn"); + self.faux_spawn_stance = self getstance(); + thread maps\mp\gametypes\_playerlogic::spawnplayer(1); +} + +//Function Number: 23 +oncantuse(param_00) +{ + param_00 iprintlnbold(&"MP_CANT_PLANT_WITHOUT_BOMB"); +} + +//Function Number: 24 +bombplanted(param_00,param_01) +{ + level endon("overtime"); + maps\mp\gametypes\_gamelogic::pausetimer(); + level.bombplanted = 1; + level.timelimitoverride = 1; + level.scorelimitoverride = 1; + setdvar("ui_bomb_timer",1); + setgameendtime(int(gettime() + level.bombtimer * 1000)); + param_00.visuals[0] thread maps\mp\gametypes\_gamelogic::playtickingsound(); + var_02 = gettime(); + func_3970(); + setdvar("ui_bomb_timer",0); + param_00.visuals[0] maps\mp\gametypes\_gamelogic::stoptickingsound(); + if(!level.bombplanted) + { + if(level.hotpotato) + { + var_03 = gettime() - var_02 / 1000; + level.bombtimer = level.bombtimer - var_03; + } + + return; + } + + var_04 = level.sabbomb.visuals[0].origin; + level.bombexploded = 1; + setdvar("ui_danger_team","BombExploded"); + if(isdefined(level.bombowner)) + { + param_00.visuals[0] radiusdamage(var_04,512,200,20,level.bombowner,"MOD_EXPLOSIVE","bomb_site_mp"); + level.bombowner maps\mp\_utility::incpersstat("destructions",1); + level.bombowner maps\mp\gametypes\_persistance::statsetchild("round","destructions",level.bombowner.pers["destructions"]); + } + else + { + param_00.visuals[0] radiusdamage(var_04,512,200,20,undefined,"MOD_EXPLOSIVE","bomb_site_mp"); + } + + var_05 = randomfloat(360); + var_06 = spawnfx(level._effect["bombexplosion"],var_04 + (0,0,50),(0,0,1),(cos(var_05),sin(var_05),0)); + triggerfx(var_06); + playrumbleonposition("grenade_rumble",var_04); + earthquake(0.75,2,var_04,2000); + thread maps\mp\_utility::playsoundinspace("exp_suitcase_bomb_main",var_04); + if(isdefined(param_00.exploderindex)) + { + common_scripts\utility::exploder(param_00.exploderindex); + } + + level.sabbomb maps\mp\gametypes\_gameobjects::setvisibleteam("none"); + level.bombzones["allies"] maps\mp\gametypes\_gameobjects::setvisibleteam("none"); + level.bombzones["axis"] maps\mp\gametypes\_gameobjects::setvisibleteam("none"); + setgameendtime(0); + level.scorelimitoverride = 1; + if(level.scoremode) + { + lib_036E::func_2B8F(param_01,int(max(maps\mp\_utility::getwatcheddvar("scorelimit"),lib_036E::func_2B96(level.otherteam[param_01]) + 1))); + } + else + { + lib_036E::func_2B8F(param_01,1); + } + + lib_036E::func_2B93(param_01); + if(isdefined(level.bombowner)) + { + level.bombowner thread maps\mp\gametypes\_rank::giverankxp("destroy"); + lib_036E::func_2B7B("destroy",level.bombowner); + level thread maps\mp\_utility::teamplayercardsplash("callout_destroyed_objective",level.bombowner); + } + + wait 3; + level.finalkillcam_winner = param_01; + thread maps\mp\gametypes\_gamelogic::endgame(param_01,game["strings"]["target_destroyed"]); +} + +//Function Number: 25 +func_3970() +{ + level endon("bomb_defused"); + level endon("overtime_ended"); + var_00 = level.bombtimer * 1000 + gettime(); + setdvar("ui_bomb_timer_endtime",var_00); + level thread func_3971(var_00); + maps\mp\gametypes\_hostmigration::waitlongdurationwithgameendtimeupdate(level.bombtimer); +} + +//Function Number: 26 +func_3971(param_00) +{ + level endon("bomb_defused"); + level endon("overtime_ended"); + level endon("game_ended"); + level endon("disconnect"); + level waittill("host_migration_begin"); + var_01 = maps\mp\gametypes\_hostmigration::waittillhostmigrationdone(); + if(var_01 > 0) + { + setdvar("ui_bomb_timer_endtime",param_00 + var_01); + } +} + +//Function Number: 27 +givelastonteamwarning() +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + maps\mp\_utility::waittillrecoveredhealth(3); + var_00 = maps\mp\_utility::getotherteam(self.pers["team"]); + level thread maps\mp\_utility::teamplayercardsplash("callout_lastteammemberalive",self,self.pers["team"]); + level thread maps\mp\_utility::teamplayercardsplash("callout_lastenemyalive",self,var_00); + level notify("last_alive",self); +} + +//Function Number: 28 +ontimelimit() +{ + if(level.bombexploded) + { + return; + } + + if(game["teamScores"]["axis"] > game["teamScores"]["allies"]) + { + level.finalkillcam_winner = "axis"; + thread maps\mp\gametypes\_gamelogic::endgame("axis",game["strings"]["time_limit_reached"]); + return; + } + + if(game["teamScores"]["axis"] < game["teamScores"]["allies"]) + { + level.finalkillcam_winner = "allies"; + thread maps\mp\gametypes\_gamelogic::endgame("allies",game["strings"]["time_limit_reached"]); + return; + } + + if(game["teamScores"]["axis"] == game["teamScores"]["allies"]) + { + level.finalkillcam_winner = "none"; + if(maps\mp\_utility::inovertime()) + { + thread maps\mp\gametypes\_gamelogic::endgame("tie",game["strings"]["time_limit_reached"]); + return; + } + + thread maps\mp\gametypes\_gamelogic::endgame("overtime",game["strings"]["time_limit_reached"]); + return; + } +} + +//Function Number: 29 +func_3984(param_00) +{ + level endon("game_ended"); + level.inovertime = 1; + wait 5; + level.disablespawning = 1; +} + +//Function Number: 30 +func_3985() +{ + level endon("game_ended"); + if(common_scripts\utility::cointoss()) + { + level.dangerteam = "allies"; + } + else + { + level.dangerteam = "axis"; + } + + for(;;) + { + if(isdefined(level.sabbomb.carrier)) + { + var_00 = level.sabbomb.carrier; + } + else + { + var_00 = level.sabbomb.visuals[0]; + } + + if(distance(var_00.origin,level.bombzones[maps\mp\_utility::getotherteam(level.dangerteam)].visuals[0].origin) < distance(var_00.origin,level.bombzones[level.dangerteam].visuals[0].origin)) + { + level.dangerteam = maps\mp\_utility::getotherteam(level.dangerteam); + } + + wait 0.05; + } +} + +//Function Number: 31 +func_3987() +{ + maps\mp\gametypes\_gameobjects::allowuse("enemy"); + maps\mp\gametypes\_gameobjects::setusetime(level.planttime); + maps\mp\gametypes\_gameobjects::setusetext(&"MP_PLANTING_EXPLOSIVE"); + maps\mp\gametypes\_gameobjects::setusehinttext(&"PLATFORM_HOLD_TO_PLANT_EXPLOSIVES"); + maps\mp\gametypes\_gameobjects::setkeyobject(level.sabbomb); + maps\mp\gametypes\_gameobjects::set2dicon("friendly","waypoint_defend"); + maps\mp\gametypes\_gameobjects::set3dicon("friendly","waypoint_defend"); + maps\mp\gametypes\_gameobjects::set2dicon("enemy","waypoint_target"); + maps\mp\gametypes\_gameobjects::set3dicon("enemy","waypoint_target"); + maps\mp\gametypes\_gameobjects::setvisibleteam("none"); + self.useweapon = "briefcase_bomb_mp"; +} + +//Function Number: 32 +func_3988() +{ + maps\mp\gametypes\_gameobjects::allowuse("friendly"); + maps\mp\gametypes\_gameobjects::setusetime(level.defusetime); + maps\mp\gametypes\_gameobjects::setusetext(&"MP_DEFUSING_EXPLOSIVE"); + maps\mp\gametypes\_gameobjects::setusehinttext(&"PLATFORM_HOLD_TO_DEFUSE_EXPLOSIVES"); + maps\mp\gametypes\_gameobjects::setkeyobject(undefined); + maps\mp\gametypes\_gameobjects::set2dicon("friendly","waypoint_defuse"); + maps\mp\gametypes\_gameobjects::set3dicon("friendly","waypoint_defuse"); + maps\mp\gametypes\_gameobjects::set2dicon("enemy","waypoint_defend"); + maps\mp\gametypes\_gameobjects::set3dicon("enemy","waypoint_defend"); + maps\mp\gametypes\_gameobjects::setvisibleteam("any"); +} + +//Function Number: 33 +bombdefused(param_00) +{ + setdvar("ui_bomb_timer",0); + maps\mp\gametypes\_gamelogic::resumetimer(); + level.bombplanted = 0; + level.timelimitoverride = 0; + level.scorelimitoverride = 0; + level notify("bomb_defused"); +} + +//Function Number: 34 +ononeleftevent(param_00) +{ + if(level.bombexploded) + { + return; + } + + var_01 = maps\mp\_utility::getlastlivingplayer(param_00); + var_01 thread givelastonteamwarning(); +} + +//Function Number: 35 +//Function Number: 36 +initgametypeawards() +{ + maps\mp\_awards::initstataward("targetsdestroyed",0,::maps\mp\_awards::highestwins); + maps\mp\_awards::initstataward("bombsplanted",0,::maps\mp\_awards::highestwins); + maps\mp\_awards::initstataward("bombsdefused",0,::maps\mp\_awards::highestwins); + maps\mp\_awards::initstataward("bombcarrierkills",0,::maps\mp\_awards::highestwins); + maps\mp\_awards::initstataward("bombscarried",0,::maps\mp\_awards::highestwins); + maps\mp\_awards::initstataward("killsasbombcarrier",0,::maps\mp\_awards::highestwins); +} + +//Function Number: 37 +func_3989() +{ + if(isusingmatchrulesdata() && getmatchrulesdata("defaultClasses","axis",5,"class","inUse")) + { + level.sab_loadouts["axis"] = maps\mp\_utility::getmatchrulesspecialclass("axis",5); + } + + if(isusingmatchrulesdata() && getmatchrulesdata("defaultClasses","allies",5,"class","inUse")) + { + level.sab_loadouts["allies"] = maps\mp\_utility::getmatchrulesspecialclass("allies",5); + } +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/gametypes/sd.gsc b/MW3/PC/MP/maps/mp/gametypes/sd.gsc new file mode 100644 index 0000000..529b883 --- /dev/null +++ b/MW3/PC/MP/maps/mp/gametypes/sd.gsc @@ -0,0 +1,955 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\sd.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 35 + * Decompile Time: 540 ms + * Timestamp: 10/27/2023 2:13:34 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(getdvar("mapname") == "mp_background") + { + return; + } + + maps\mp\gametypes\_globallogic::init(); + maps\mp\gametypes\_callbacksetup::setupcallbacks(); + maps\mp\gametypes\_globallogic::setupcallbacks(); + if(isusingmatchrulesdata()) + { + level.initializematchrules = ::initializematchrules; + [[ level.initializematchrules ]](); + level thread maps\mp\_utility::reinitializematchrulesonmigration(); + } + else + { + maps\mp\_utility::registerroundswitchdvar(level.gametype,3,0,9); + maps\mp\_utility::registertimelimitdvar(level.gametype,2.5); + maps\mp\_utility::registerscorelimitdvar(level.gametype,1); + maps\mp\_utility::registerroundlimitdvar(level.gametype,0); + maps\mp\_utility::registerwinlimitdvar(level.gametype,4); + maps\mp\_utility::registernumlivesdvar(level.gametype,1); + maps\mp\_utility::registerhalftimedvar(level.gametype,0); + level.matchrules_damagemultiplier = 0; + level.matchrules_vampirism = 0; + } + + level.objectivebased = 1; + level.teambased = 1; + level.onprecachegametype = ::onprecachegametype; + level.onstartgametype = ::onstartgametype; + level.getspawnpoint = ::getspawnpoint; + level.onspawnplayer = ::onspawnplayer; + level.onplayerkilled = ::onplayerkilled; + level.ondeadevent = ::ondeadevent; + level.ononeleftevent = ::ononeleftevent; + level.ontimelimit = ::ontimelimit; + level.onnormaldeath = ::onnormaldeath; + level.initgametypeawards = ::initgametypeawards; + if(level.matchrules_damagemultiplier || level.matchrules_vampirism) + { + level.modifyplayerdamage = ::maps\mp\gametypes\_damage::gamemodemodifyplayerdamage; + } + + game["dialog"]["gametype"] = "searchdestroy"; + if(getdvarint("g_hardcore")) + { + game["dialog"]["gametype"] = "hc_" + game["dialog"]["gametype"]; + } + else if(getdvarint("camera_thirdPerson")) + { + game["dialog"]["gametype"] = "thirdp_" + game["dialog"]["gametype"]; + } + else if(getdvarint("scr_diehard")) + { + game["dialog"]["gametype"] = "dh_" + game["dialog"]["gametype"]; + } + else if(getdvarint("scr_" + level.gametype + "_promode")) + { + game["dialog"]["gametype"] = game["dialog"]["gametype"] + "_pro"; + } + + game["dialog"]["offense_obj"] = "obj_destroy"; + game["dialog"]["defense_obj"] = "obj_defend"; + makedvarserverinfo("ui_bomb_timer_endtime",-1); +} + +//Function Number: 2 +initializematchrules() +{ + maps\mp\_utility::setcommonrulesfrommatchrulesdata(); + var_00 = getmatchrulesdata("sdData","roundLength"); + setdynamicdvar("scr_sd_timelimit",var_00); + maps\mp\_utility::registertimelimitdvar("sd",var_00); + var_01 = getmatchrulesdata("sdData","roundSwitch"); + setdynamicdvar("scr_sd_roundswitch",var_01); + maps\mp\_utility::registerroundswitchdvar("sd",var_01,0,9); + var_02 = getmatchrulesdata("commonOption","scoreLimit"); + setdynamicdvar("scr_sd_winlimit",var_02); + maps\mp\_utility::registerwinlimitdvar("sd",var_02); + setdynamicdvar("scr_sd_bombtimer",getmatchrulesdata("sdData","bombTimer")); + setdynamicdvar("scr_sd_planttime",getmatchrulesdata("sdData","plantTime")); + setdynamicdvar("scr_sd_defusetime",getmatchrulesdata("sdData","defuseTime")); + setdynamicdvar("scr_sd_multibomb",getmatchrulesdata("sdData","multiBomb")); + setdynamicdvar("scr_sd_roundlimit",0); + maps\mp\_utility::registerroundlimitdvar("sd",0); + setdynamicdvar("scr_sd_scorelimit",1); + maps\mp\_utility::registerscorelimitdvar("sd",1); + setdynamicdvar("scr_sd_halftime",0); + maps\mp\_utility::registerhalftimedvar("sd",0); + setdynamicdvar("scr_sd_promode",0); +} + +//Function Number: 3 +onprecachegametype() +{ + game["bomb_dropped_sound"] = "mp_war_objective_lost"; + game["bomb_recovered_sound"] = "mp_war_objective_taken"; + precacheshader("waypoint_bomb"); + precacheshader("hud_suitcase_bomb"); + precacheshader("waypoint_target"); + precacheshader("waypoint_target_a"); + precacheshader("waypoint_target_b"); + precacheshader("waypoint_defend"); + precacheshader("waypoint_defend_a"); + precacheshader("waypoint_defend_b"); + precacheshader("waypoint_defuse"); + precacheshader("waypoint_defuse_a"); + precacheshader("waypoint_defuse_b"); + precacheshader("waypoint_escort"); + precachestring(&"MP_EXPLOSIVES_RECOVERED_BY"); + precachestring(&"MP_EXPLOSIVES_DROPPED_BY"); + precachestring(&"MP_EXPLOSIVES_PLANTED_BY"); + precachestring(&"MP_EXPLOSIVES_DEFUSED_BY"); + precachestring(&"PLATFORM_HOLD_TO_PLANT_EXPLOSIVES"); + precachestring(&"PLATFORM_HOLD_TO_DEFUSE_EXPLOSIVES"); + precachestring(&"MP_CANT_PLANT_WITHOUT_BOMB"); + precachestring(&"MP_PLANTING_EXPLOSIVE"); + precachestring(&"MP_DEFUSING_EXPLOSIVE"); +} + +//Function Number: 4 +onstartgametype() +{ + if(!isdefined(game["switchedsides"])) + { + game["switchedsides"] = 0; + } + + if(game["switchedsides"]) + { + var_00 = game["attackers"]; + var_01 = game["defenders"]; + game["attackers"] = var_01; + game["defenders"] = var_00; + } + + setclientnamemode("manual_change"); + game["strings"]["target_destroyed"] = &"MP_TARGET_DESTROYED"; + game["strings"]["bomb_defused"] = &"MP_BOMB_DEFUSED"; + precachestring(game["strings"]["target_destroyed"]); + precachestring(game["strings"]["bomb_defused"]); + level._effect["bombexplosion"] = loadfx("explosions/tanker_explosion"); + maps\mp\_utility::setobjectivetext(game["attackers"],&"OBJECTIVES_SD_ATTACKER"); + maps\mp\_utility::setobjectivetext(game["defenders"],&"OBJECTIVES_SD_DEFENDER"); + if(level.splitscreen) + { + maps\mp\_utility::setobjectivescoretext(game["attackers"],&"OBJECTIVES_SD_ATTACKER"); + maps\mp\_utility::setobjectivescoretext(game["defenders"],&"OBJECTIVES_SD_DEFENDER"); + } + else + { + maps\mp\_utility::setobjectivescoretext(game["attackers"],&"OBJECTIVES_SD_ATTACKER_SCORE"); + maps\mp\_utility::setobjectivescoretext(game["defenders"],&"OBJECTIVES_SD_DEFENDER_SCORE"); + } + + maps\mp\_utility::setobjectivehinttext(game["attackers"],&"OBJECTIVES_SD_ATTACKER_HINT"); + maps\mp\_utility::setobjectivehinttext(game["defenders"],&"OBJECTIVES_SD_DEFENDER_HINT"); + level.spawnmins = (0,0,0); + level.spawnmaxs = (0,0,0); + maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_sd_spawn_attacker"); + maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_sd_spawn_defender"); + level.mapcenter = maps\mp\gametypes\_spawnlogic::findboxcenter(level.spawnmins,level.spawnmaxs); + setmapcenter(level.mapcenter); + var_02[0] = "sd"; + maps\mp\gametypes\_gameobjects::main(var_7B); + maps\mp\gametypes\_rank::registerscoreinfo("win",2); + maps\mp\gametypes\_rank::registerscoreinfo("loss",1); + maps\mp\gametypes\_rank::registerscoreinfo("tie",1.5); + maps\mp\gametypes\_rank::registerscoreinfo("kill",50); + maps\mp\gametypes\_rank::registerscoreinfo("headshot",50); + maps\mp\gametypes\_rank::registerscoreinfo("assist",20); + maps\mp\gametypes\_rank::registerscoreinfo("plant",100); + maps\mp\gametypes\_rank::registerscoreinfo("defuse",100); + thread updategametypedvars(); + func_3972(); + thread func_3962(); +} + +//Function Number: 5 +getspawnpoint() +{ + if(self.pers["team"] == game["attackers"]) + { + var_00 = "mp_sd_spawn_attacker"; + } + else + { + var_00 = "mp_sd_spawn_defender"; + } + + var_01 = maps\mp\gametypes\_spawnlogic::getspawnpointarray(var_00); + var_02 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random(var_01); + return var_02; +} + +//Function Number: 6 +onspawnplayer() +{ + self.isplanting = 0; + self.isdefusing = 0; + self.isbombcarrier = 0; + if(level.multibomb && !isdefined(self.carryicon) && self.pers["team"] == game["attackers"] && !level.bombplanted) + { + if(level.splitscreen) + { + self.carryicon = maps\mp\gametypes\_hud_util::createicon("hud_suitcase_bomb",33,33); + self.carryicon maps\mp\gametypes\_hud_util::setpoint("BOTTOM RIGHT","BOTTOM RIGHT",-50,-78); + self.carryicon.alpha = 0.75; + } + else + { + self.carryicon = maps\mp\gametypes\_hud_util::createicon("hud_suitcase_bomb",50,50); + self.carryicon maps\mp\gametypes\_hud_util::setpoint("BOTTOM RIGHT","BOTTOM RIGHT",-50,-65); + self.carryicon.alpha = 0.75; + } + + self.carryicon.hidewheninmenu = 1; + thread hidecarryiconongameend(); + } + + level notify("spawned_player"); +} + +//Function Number: 7 +hidecarryiconongameend() +{ + self endon("disconnect"); + level waittill("game_ended"); + if(isdefined(self.carryicon)) + { + self.carryicon.alpha = 0; + } +} + +//Function Number: 8 +onplayerkilled(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09) +{ + thread func_3959(); +} + +//Function Number: 9 +func_3959() +{ + wait 0.05; + var_00 = 0; + if(!level.alivecount[game["attackers"]]) + { + level.spectateoverride[game["attackers"]].allowenemyspectate = 1; + var_00 = 1; + } + + if(!level.alivecount[game["defenders"]]) + { + level.spectateoverride[game["defenders"]].allowenemyspectate = 1; + var_00 = 1; + } + + if(var_00) + { + maps\mp\gametypes\_spectating::updatespectatesettings(); + } +} + +//Function Number: 10 +func_395A(param_00,param_01) +{ + level.finalkillcam_winner = param_00; + if(param_01 == game["strings"]["target_destroyed"] || param_01 == game["strings"]["bomb_defused"]) + { + var_02 = 1; + foreach(var_04 in level.bombzones) + { + if(isdefined(level.finalkillcam_killcamentityindex[param_00]) && level.finalkillcam_killcamentityindex[param_00] == var_04.killcamentnum) + { + var_02 = 0; + break; + } + } + + if(var_02) + { + maps\mp\gametypes\_damage::erasefinalkillcam(); + } + } + + thread maps\mp\gametypes\_gamelogic::endgame(param_00,param_01); +} + +//Function Number: 11 +ondeadevent(param_00) +{ + if(level.bombexploded || level.bombdefused) + { + return; + } + + if(param_00 == "all") + { + if(level.bombplanted) + { + func_395A(game["attackers"],game["strings"][game["defenders"] + "_eliminated"]); + return; + } + + func_395A(game["defenders"],game["strings"][game["attackers"] + "_eliminated"]); + return; + } + + if(param_00 == game["attackers"]) + { + if(level.bombplanted) + { + return; + } + + level thread func_395A(game["defenders"],game["strings"][game["attackers"] + "_eliminated"]); + return; + } + + if(param_00 == game["defenders"]) + { + level thread func_395A(game["attackers"],game["strings"][game["defenders"] + "_eliminated"]); + return; + } +} + +//Function Number: 12 +ononeleftevent(param_00) +{ + if(level.bombexploded || level.bombdefused) + { + return; + } + + var_01 = maps\mp\_utility::getlastlivingplayer(param_00); + var_01 thread givelastonteamwarning(); +} + +//Function Number: 13 +onnormaldeath(param_00,param_01,param_02) +{ + var_03 = maps\mp\gametypes\_rank::getscoreinfovalue("kill"); + var_04 = param_00.team; + if(game["state"] == "postgame" && param_00.team == game["defenders"] || !level.bombplanted) + { + param_01.finalkill = 1; + } + + if(param_00.isplanting) + { + thread maps\mp\_matchdata::logkillevent(param_02,"planting"); + param_01 maps\mp\_utility::incpersstat("defends",1); + param_01 maps\mp\gametypes\_persistance::statsetchild("round","defends",param_01.pers["defends"]); + } + else if(param_00.isbombcarrier) + { + param_01 maps\mp\_utility::incplayerstat("bombcarrierkills",1); + thread maps\mp\_matchdata::logkillevent(param_02,"carrying"); + } + else if(param_00.isdefusing) + { + thread maps\mp\_matchdata::logkillevent(param_02,"defusing"); + param_01 maps\mp\_utility::incpersstat("defends",1); + param_01 maps\mp\gametypes\_persistance::statsetchild("round","defends",param_01.pers["defends"]); + } + + if(param_01.isbombcarrier) + { + param_01 maps\mp\_utility::incplayerstat("killsasbombcarrier",1); + } +} + +//Function Number: 14 +givelastonteamwarning() +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + maps\mp\_utility::waittillrecoveredhealth(3); + var_00 = maps\mp\_utility::getotherteam(self.pers["team"]); + level thread maps\mp\_utility::teamplayercardsplash("callout_lastteammemberalive",self,self.pers["team"]); + level thread maps\mp\_utility::teamplayercardsplash("callout_lastenemyalive",self,var_00); + level notify("last_alive",self); + maps\mp\gametypes\_missions::lastmansd(); +} + +//Function Number: 15 +ontimelimit() +{ + func_395A(game["defenders"],game["strings"]["time_limit_reached"]); +} + +//Function Number: 16 +updategametypedvars() +{ + level.planttime = maps\mp\_utility::dvarfloatvalue("planttime",5,0,20); + level.defusetime = maps\mp\_utility::dvarfloatvalue("defusetime",5,0,20); + level.bombtimer = maps\mp\_utility::dvarfloatvalue("bombtimer",45,1,300); + level.multibomb = maps\mp\_utility::dvarintvalue("multibomb",0,0,1); +} + +//Function Number: 17 +func_3960(param_00) +{ + var_01 = []; + var_02 = getentarray("script_brushmodel","classname"); + foreach(var_04 in var_02) + { + if(isdefined(var_04.script_gameobjectname) && var_04.script_gameobjectname == "bombzone") + { + foreach(var_06 in param_00) + { + if(distance(var_04.origin,var_06.origin) < 100 && issubstr(tolower(var_06.script_label),"c")) + { + var_06.relatedbrushmodel = var_04; + var_01[var_01.size] = var_06; + break; + } + } + } + } + + foreach(var_0A in var_01) + { + var_0A.relatedbrushmodel delete(); + var_0B = getentarray(var_0A.target,"targetname"); + foreach(var_0D in var_0B) + { + var_0D delete(); + } + + var_0A delete(); + } + + return common_scripts\utility::array_removeundefined(param_00); +} + +//Function Number: 18 +func_3962() +{ + level.bombplanted = 0; + level.bombdefused = 0; + level.bombexploded = 0; + var_00 = getent("sd_bomb_pickup_trig","targetname"); + if(!isdefined(var_00)) + { + common_scripts\utility::error("No sd_bomb_pickup_trig trigger found in map."); + return; + } + + var_01[0] = getent("sd_bomb","targetname"); + if(!isdefined(var_01[0])) + { + common_scripts\utility::error("No sd_bomb script_model found in map."); + return; + } + + precachemodel("prop_suitcase_bomb"); + var_01[0] setmodel("prop_suitcase_bomb"); + if(!level.multibomb) + { + level.sdbomb = maps\mp\gametypes\_gameobjects::createcarryobject(game["attackers"],var_00,var_01,(0,0,32)); + level.sdbomb maps\mp\gametypes\_gameobjects::allowcarry("friendly"); + level.sdbomb maps\mp\gametypes\_gameobjects::set2dicon("friendly","waypoint_bomb"); + level.sdbomb maps\mp\gametypes\_gameobjects::set3dicon("friendly","waypoint_bomb"); + level.sdbomb maps\mp\gametypes\_gameobjects::setvisibleteam("friendly"); + level.sdbomb maps\mp\gametypes\_gameobjects::setcarryicon("hud_suitcase_bomb"); + level.sdbomb.allowweapons = 1; + level.sdbomb.onpickup = ::onpickup; + level.sdbomb.ondrop = ::ondrop; + } + else + { + var_00 delete(); + var_01[0] delete(); + } + + level.bombzones = []; + var_02 = getentarray("bombzone","targetname"); + var_02 = func_3960(var_02); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + var_00 = var_02[var_03]; + var_01 = getentarray(var_02[var_03].target,"targetname"); + var_04 = maps\mp\gametypes\_gameobjects::createuseobject(game["defenders"],var_00,var_01,(0,0,64)); + var_04 maps\mp\gametypes\_gameobjects::allowuse("enemy"); + var_04 maps\mp\gametypes\_gameobjects::setusetime(level.planttime); + var_04 maps\mp\gametypes\_gameobjects::setusetext(&"MP_PLANTING_EXPLOSIVE"); + var_04 maps\mp\gametypes\_gameobjects::setusehinttext(&"PLATFORM_HOLD_TO_PLANT_EXPLOSIVES"); + if(!level.multibomb) + { + var_04 maps\mp\gametypes\_gameobjects::setkeyobject(level.sdbomb); + } + + var_05 = var_04 maps\mp\gametypes\_gameobjects::getlabel(); + var_04.label = var_05; + var_04 maps\mp\gametypes\_gameobjects::set2dicon("friendly","waypoint_defend" + var_05); + var_04 maps\mp\gametypes\_gameobjects::set3dicon("friendly","waypoint_defend" + var_05); + var_04 maps\mp\gametypes\_gameobjects::set2dicon("enemy","waypoint_target" + var_05); + var_04 maps\mp\gametypes\_gameobjects::set3dicon("enemy","waypoint_target" + var_05); + var_04 maps\mp\gametypes\_gameobjects::setvisibleteam("any"); + var_04.onbeginuse = ::onbeginuse; + var_04.onenduse = ::onenduse; + var_04.onuse = ::func_3969; + var_04.oncantuse = ::oncantuse; + var_04.useweapon = "briefcase_bomb_mp"; + for(var_06 = 0;var_06 < var_01.size;var_06++) + { + if(isdefined(var_01[var_06].script_exploder)) + { + var_04.exploderindex = var_01[var_06].script_exploder; + var_01[var_06] thread func_3967(var_04); + break; + } + } + + level.bombzones[level.bombzones.size] = var_04; + var_04.bombdefusetrig = getent(var_01[0].target,"targetname"); + var_04.bombdefusetrig.origin = var_04.bombdefusetrig.origin + (0,0,-10000); + var_04.bombdefusetrig.label = var_05; + } + + for(var_03 = 0;var_03 < level.bombzones.size;var_03++) + { + var_07 = []; + for(var_08 = 0;var_08 < level.bombzones.size;var_08++) + { + if(var_08 != var_03) + { + var_07[var_07.size] = level.bombzones[var_08]; + } + } + + level.bombzones[var_03].otherbombzones = var_07; + } +} + +//Function Number: 19 +func_3967(param_00) +{ + var_01 = spawn("script_origin",self.origin); + var_01.angles = self.angles; + var_01 rotateyaw(-45,0.05); + wait 0.05; + var_02 = self.origin + (0,0,5); + var_03 = self.origin + anglestoforward(var_01.angles) * 100 + (0,0,128); + var_04 = bullettrace(var_02,var_03,0,self); + self.killcament = spawn("script_model",var_04["position"]); + self.killcament setscriptmoverkillcam("explosive"); + param_00.killcamentnum = self.killcament getentitynumber(); + var_01 delete(); +} + +//Function Number: 20 +onbeginuse(param_00) +{ + if(maps\mp\gametypes\_gameobjects::isfriendlyteam(param_00.pers["team"])) + { + param_00 playsound("mp_bomb_defuse"); + param_00.isdefusing = 1; + if(isdefined(level.sdbombmodel)) + { + level.sdbombmodel hide(); + return; + } + + return; + } + + param_00.isplanting = 1; + if(level.multibomb) + { + for(var_01 = 0;var_01 < self.otherbombzones.size;var_01++) + { + self.otherbombzones[var_01] maps\mp\gametypes\_gameobjects::allowuse("none"); + self.otherbombzones[var_01] maps\mp\gametypes\_gameobjects::setvisibleteam("friendly"); + } + } +} + +//Function Number: 21 +onenduse(param_00,param_01,param_02) +{ + if(!isdefined(param_01)) + { + return; + } + + if(isalive(param_01)) + { + param_01.isdefusing = 0; + param_01.isplanting = 0; + } + + if(maps\mp\gametypes\_gameobjects::isfriendlyteam(param_01.pers["team"])) + { + if(isdefined(level.sdbombmodel) && !param_02) + { + level.sdbombmodel show(); + return; + } + + return; + } + + if(level.multibomb && !param_02) + { + for(var_03 = 0;var_03 < self.otherbombzones.size;var_03++) + { + self.otherbombzones[var_03] maps\mp\gametypes\_gameobjects::allowuse("enemy"); + self.otherbombzones[var_03] maps\mp\gametypes\_gameobjects::setvisibleteam("any"); + } + } +} + +//Function Number: 22 +oncantuse(param_00) +{ + param_00 iprintlnbold(&"MP_CANT_PLANT_WITHOUT_BOMB"); +} + +//Function Number: 23 +func_3969(param_00) +{ + if(!maps\mp\gametypes\_gameobjects::isfriendlyteam(param_00.pers["team"])) + { + level thread bombplanted(self,param_00); + for(var_01 = 0;var_01 < level.bombzones.size;var_01++) + { + if(level.bombzones[var_01] == self) + { + continue; + } + + level.bombzones[var_01] maps\mp\gametypes\_gameobjects::disableobject(); + } + + param_00 playsound("mp_bomb_plant"); + param_00 notify("bomb_planted"); + param_00 notify("objective","plant"); + param_00 maps\mp\_utility::incpersstat("plants",1); + param_00 maps\mp\gametypes\_persistance::statsetchild("round","plants",param_00.pers["plants"]); + if(isdefined(level.sd_loadout) && isdefined(level.sd_loadout[param_00.team])) + { + param_00 thread func_396D(); + } + + maps\mp\_utility::leaderdialog("bomb_planted"); + level thread maps\mp\_utility::teamplayercardsplash("callout_bombplanted",param_00); + level.bombowner = param_00; + param_00 thread maps\mp\gametypes\_hud_message::splashnotify("plant",maps\mp\gametypes\_rank::getscoreinfovalue("plant")); + param_00 thread maps\mp\gametypes\_rank::giverankxp("plant"); + param_00.bombplantedtime = gettime(); + lib_036E::func_2B7B("plant",param_00); + param_00 thread maps\mp\_matchdata::loggameevent("plant",param_00.origin); + } +} + +//Function Number: 24 +func_396C() +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + if(isdefined(self.iscarrying) && self.iscarrying == 1) + { + self notify("force_cancel_placement"); + wait 0.05; + } + + if(maps\mp\_utility::isjuggernaut()) + { + self notify("lost_juggernaut"); + wait 0.05; + } + + self.pers["gamemodeLoadout"] = level.sd_loadout[self.team]; + var_00 = spawn("script_model",self.origin); + var_00.angles = self.angles; + var_00.playerspawnpos = self.origin; + var_00.notti = 1; + self.setspawnpoint = var_00; + self.gamemode_chosenclass = self.class; + self.pers["class"] = "gamemode"; + self.pers["lastClass"] = "gamemode"; + self.class = "gamemode"; + self.lastclass = "gamemode"; + self notify("faux_spawn"); + self.gameobject_fauxspawn = 1; + self.faux_spawn_stance = self getstance(); + thread maps\mp\gametypes\_playerlogic::spawnplayer(1); +} + +//Function Number: 25 +func_396D() +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + if(isdefined(self.iscarrying) && self.iscarrying == 1) + { + self notify("force_cancel_placement"); + wait 0.05; + } + + if(maps\mp\_utility::isjuggernaut()) + { + self notify("lost_juggernaut"); + wait 0.05; + } + + self.pers["gamemodeLoadout"] = undefined; + var_00 = spawn("script_model",self.origin); + var_00.angles = self.angles; + var_00.playerspawnpos = self.origin; + var_00.notti = 1; + self.setspawnpoint = var_00; + self notify("faux_spawn"); + self.faux_spawn_stance = self getstance(); + thread maps\mp\gametypes\_playerlogic::spawnplayer(1); +} + +//Function Number: 26 +func_396E(param_00) +{ + param_00 notify("bomb_defused"); + param_00 notify("objective","defuse"); + level thread bombdefused(); + maps\mp\gametypes\_gameobjects::disableobject(); + maps\mp\_utility::leaderdialog("bomb_defused"); + level thread maps\mp\_utility::teamplayercardsplash("callout_bombdefused",param_00); + if(isdefined(level.bombowner) && level.bombowner.bombplantedtime + 3000 + level.defusetime * 1000 > gettime() && maps\mp\_utility::isreallyalive(level.bombowner)) + { + param_00 thread maps\mp\gametypes\_hud_message::splashnotify("ninja_defuse",maps\mp\gametypes\_rank::getscoreinfovalue("defuse")); + } + else + { + param_00 thread maps\mp\gametypes\_hud_message::splashnotify("defuse",maps\mp\gametypes\_rank::getscoreinfovalue("defuse")); + } + + param_00 thread maps\mp\gametypes\_rank::giverankxp("defuse"); + lib_036E::func_2B7B("defuse",param_00); + param_00 maps\mp\_utility::incpersstat("defuses",1); + param_00 maps\mp\gametypes\_persistance::statsetchild("round","defuses",param_00.pers["defuses"]); + param_00 thread maps\mp\_matchdata::loggameevent("defuse",param_00.origin); +} + +//Function Number: 27 +ondrop(param_00) +{ + maps\mp\gametypes\_gameobjects::set2dicon("friendly","waypoint_bomb"); + maps\mp\gametypes\_gameobjects::set3dicon("friendly","waypoint_bomb"); + maps\mp\_utility::playsoundonplayers(game["bomb_dropped_sound"],game["attackers"]); +} + +//Function Number: 28 +onpickup(param_00) +{ + param_00.isbombcarrier = 1; + param_00 maps\mp\_utility::incplayerstat("bombscarried",1); + param_00 thread maps\mp\_matchdata::loggameevent("pickup",param_00.origin); + maps\mp\gametypes\_gameobjects::set2dicon("friendly","waypoint_escort"); + maps\mp\gametypes\_gameobjects::set3dicon("friendly","waypoint_escort"); + if(isdefined(level.sd_loadout) && isdefined(level.sd_loadout[param_00.team])) + { + param_00 thread func_396C(); + } + + if(!level.bombdefused) + { + maps\mp\_utility::teamplayercardsplash("callout_bombtaken",param_00,param_00.team); + maps\mp\_utility::leaderdialog("bomb_taken",param_00.pers["team"]); + } + + maps\mp\_utility::playsoundonplayers(game["bomb_recovered_sound"],game["attackers"]); +} + +//Function Number: 29 +onreset() +{ +} + +//Function Number: 30 +bombplanted(param_00,param_01) +{ + maps\mp\gametypes\_gamelogic::pausetimer(); + level.bombplanted = 1; + param_00.visuals[0] thread maps\mp\gametypes\_gamelogic::playtickingsound(); + level.tickingobject = param_00.visuals[0]; + level.timelimitoverride = 1; + setgameendtime(int(gettime() + level.bombtimer * 1000)); + setdvar("ui_bomb_timer",1); + if(!level.multibomb) + { + level.sdbomb maps\mp\gametypes\_gameobjects::allowcarry("none"); + level.sdbomb maps\mp\gametypes\_gameobjects::setvisibleteam("none"); + level.sdbomb maps\mp\gametypes\_gameobjects::setdropped(); + level.sdbombmodel = level.sdbomb.visuals[0]; + } + else + { + for(var_02 = 0;var_02 < level.players.size;var_02++) + { + if(isdefined(level.players[var_02].carryicon)) + { + level.players[var_02].carryicon maps\mp\gametypes\_hud_util::destroyelem(); + } + } + + var_03 = bullettrace(param_01.origin + (0,0,20),param_01.origin - (0,0,2000),0,param_01); + var_04 = randomfloat(360); + var_05 = (cos(var_04),sin(var_04),0); + var_05 = vectornormalize(var_05 - var_03["normal"] * vectordot(var_05,var_03["normal"])); + var_06 = vectortoangles(var_05); + level.sdbombmodel = spawn("script_model",var_03["position"]); + level.sdbombmodel.angles = var_06; + level.sdbombmodel setmodel("prop_suitcase_bomb"); + } + + param_00 maps\mp\gametypes\_gameobjects::allowuse("none"); + param_00 maps\mp\gametypes\_gameobjects::setvisibleteam("none"); + var_07 = param_00 maps\mp\gametypes\_gameobjects::getlabel(); + var_08 = param_00.bombdefusetrig; + var_08.origin = level.sdbombmodel.origin; + var_09 = []; + var_0A = maps\mp\gametypes\_gameobjects::createuseobject(game["defenders"],var_08,var_09,(0,0,32)); + var_0A maps\mp\gametypes\_gameobjects::allowuse("friendly"); + var_0A maps\mp\gametypes\_gameobjects::setusetime(level.defusetime); + var_0A maps\mp\gametypes\_gameobjects::setusetext(&"MP_DEFUSING_EXPLOSIVE"); + var_0A maps\mp\gametypes\_gameobjects::setusehinttext(&"PLATFORM_HOLD_TO_DEFUSE_EXPLOSIVES"); + var_0A maps\mp\gametypes\_gameobjects::setvisibleteam("any"); + var_0A maps\mp\gametypes\_gameobjects::set2dicon("friendly","waypoint_defuse" + var_07); + var_0A maps\mp\gametypes\_gameobjects::set2dicon("enemy","waypoint_defend" + var_07); + var_0A maps\mp\gametypes\_gameobjects::set3dicon("friendly","waypoint_defuse" + var_07); + var_0A maps\mp\gametypes\_gameobjects::set3dicon("enemy","waypoint_defend" + var_07); + var_0A.label = var_07; + var_0A.onbeginuse = ::onbeginuse; + var_0A.onenduse = ::onenduse; + var_0A.onuse = ::func_396E; + var_0A.useweapon = "briefcase_bomb_defuse_mp"; + func_3970(); + setdvar("ui_bomb_timer",0); + param_00.visuals[0] maps\mp\gametypes\_gamelogic::stoptickingsound(); + if(level.gameended || level.bombdefused) + { + return; + } + + level.bombexploded = 1; + var_0B = level.sdbombmodel.origin; + level.sdbombmodel hide(); + if(isdefined(param_01)) + { + param_00.visuals[0] radiusdamage(var_0B,512,200,20,param_01,"MOD_EXPLOSIVE","bomb_site_mp"); + param_01 maps\mp\_utility::incpersstat("destructions",1); + param_01 maps\mp\gametypes\_persistance::statsetchild("round","destructions",param_01.pers["destructions"]); + } + else + { + param_00.visuals[0] radiusdamage(var_0B,512,200,20,undefined,"MOD_EXPLOSIVE","bomb_site_mp"); + } + + var_0C = randomfloat(360); + var_0D = spawnfx(level._effect["bombexplosion"],var_0B + (0,0,50),(0,0,1),(cos(var_0C),sin(var_0C),0)); + triggerfx(var_0D); + playrumbleonposition("grenade_rumble",var_0B); + earthquake(0.75,2,var_0B,2000); + thread maps\mp\_utility::playsoundinspace("exp_suitcase_bomb_main",var_0B); + if(isdefined(param_00.exploderindex)) + { + common_scripts\utility::exploder(param_00.exploderindex); + } + + for(var_02 = 0;var_02 < level.bombzones.size;var_02++) + { + level.bombzones[var_02] maps\mp\gametypes\_gameobjects::disableobject(); + } + + var_0A maps\mp\gametypes\_gameobjects::disableobject(); + setgameendtime(0); + wait 3; + func_395A(game["attackers"],game["strings"]["target_destroyed"]); +} + +//Function Number: 31 +func_3970() +{ + level endon("game_ended"); + level endon("bomb_defused"); + var_00 = level.bombtimer * 1000 + gettime(); + setdvar("ui_bomb_timer_endtime",var_00); + level thread func_3971(var_00); + maps\mp\gametypes\_hostmigration::waitlongdurationwithgameendtimeupdate(level.bombtimer); +} + +//Function Number: 32 +func_3971(param_00) +{ + level endon("game_ended"); + level endon("bomb_defused"); + level endon("game_ended"); + level endon("disconnect"); + level waittill("host_migration_begin"); + var_01 = maps\mp\gametypes\_hostmigration::waittillhostmigrationdone(); + if(var_01 > 0) + { + setdvar("ui_bomb_timer_endtime",param_00 + var_01); + } +} + +//Function Number: 33 +bombdefused() +{ + level.tickingobject maps\mp\gametypes\_gamelogic::stoptickingsound(); + level.bombdefused = 1; + setdvar("ui_bomb_timer",0); + level notify("bomb_defused"); + wait 1.5; + setgameendtime(0); + func_395A(game["defenders"],game["strings"]["bomb_defused"]); +} + +//Function Number: 34 +initgametypeawards() +{ + maps\mp\_awards::initstataward("targetsdestroyed",0,::maps\mp\_awards::highestwins); + maps\mp\_awards::initstataward("bombsplanted",0,::maps\mp\_awards::highestwins); + maps\mp\_awards::initstataward("bombsdefused",0,::maps\mp\_awards::highestwins); + maps\mp\_awards::initstataward("bombcarrierkills",0,::maps\mp\_awards::highestwins); + maps\mp\_awards::initstataward("bombscarried",0,::maps\mp\_awards::highestwins); + maps\mp\_awards::initstataward("killsasbombcarrier",0,::maps\mp\_awards::highestwins); +} + +//Function Number: 35 +func_3972() +{ + if(isusingmatchrulesdata() && getmatchrulesdata("defaultClasses","axis",5,"class","inUse")) + { + level.sd_loadout[game["attackers"]] = maps\mp\_utility::getmatchrulesspecialclass("axis",5); + } +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/gametypes/tdef.gsc b/MW3/PC/MP/maps/mp/gametypes/tdef.gsc new file mode 100644 index 0000000..572ef86 --- /dev/null +++ b/MW3/PC/MP/maps/mp/gametypes/tdef.gsc @@ -0,0 +1,599 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\tdef.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 23 + * Decompile Time: 388 ms + * Timestamp: 10/27/2023 2:13:35 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(getdvar("mapname") == "mp_background") + { + return; + } + + maps\mp\gametypes\_globallogic::init(); + maps\mp\gametypes\_callbacksetup::setupcallbacks(); + maps\mp\gametypes\_globallogic::setupcallbacks(); + if(isusingmatchrulesdata()) + { + level.initializematchrules = ::initializematchrules; + [[ level.initializematchrules ]](); + level thread maps\mp\_utility::reinitializematchrulesonmigration(); + } + else + { + maps\mp\_utility::registerroundswitchdvar(level.gametype,0,0,9); + maps\mp\_utility::registertimelimitdvar(level.gametype,10); + maps\mp\_utility::registerscorelimitdvar(level.gametype,7500); + maps\mp\_utility::registerroundlimitdvar(level.gametype,1); + maps\mp\_utility::registerwinlimitdvar(level.gametype,1); + maps\mp\_utility::registernumlivesdvar(level.gametype,0); + maps\mp\_utility::registerhalftimedvar(level.gametype,0); + level.matchrules_enemyflagradar = 1; + level.matchrules_damagemultiplier = 0; + level.matchrules_vampirism = 0; + } + + func_3989(); + level.teambased = 1; + level.initgametypeawards = ::initgametypeawards; + level.onprecachegametype = ::onprecachegametype; + level.onstartgametype = ::onstartgametype; + level.getspawnpoint = ::getspawnpoint; + level.onnormaldeath = ::onnormaldeath; + if(level.matchrules_damagemultiplier || level.matchrules_vampirism) + { + level.modifyplayerdamage = ::maps\mp\gametypes\_damage::gamemodemodifyplayerdamage; + } + + precacheshader("waypoint_targetneutral"); + game["dialog"]["gametype"] = "team_def"; + if(getdvarint("g_hardcore")) + { + game["dialog"]["gametype"] = "hc_" + game["dialog"]["gametype"]; + } + + game["strings"]["overtime_hint"] = &"MP_FIRST_BLOOD"; +} + +//Function Number: 2 +initializematchrules() +{ + maps\mp\_utility::setcommonrulesfrommatchrulesdata(); + level.matchrules_enemyflagradar = getmatchrulesdata("tdefData","enemyFlagRadar"); + setdynamicdvar("scr_tdef_roundswitch",0); + maps\mp\_utility::registerroundswitchdvar("tdef",0,0,9); + setdynamicdvar("scr_tdef_roundlimit",1); + maps\mp\_utility::registerroundlimitdvar("tdef",1); + setdynamicdvar("scr_tdef_winlimit",1); + maps\mp\_utility::registerwinlimitdvar("tdef",1); + setdynamicdvar("scr_tdef_halftime",0); + maps\mp\_utility::registerhalftimedvar("tdef",0); + setdynamicdvar("scr_tdef_promode",0); +} + +//Function Number: 3 +onprecachegametype() +{ + precachestring(&"MP_NEUTRAL_FLAG_CAPTURED_BY"); + precachestring(&"MP_NEUTRAL_FLAG_DROPPED_BY"); + precachestring(&"MP_GRABBING_FLAG"); + precachestring(&"OBJECTIVES_TDEF_ATTACKER_HINT"); + precachestring(&"OBJECTIVES_TDEF_DEFENDER_HINT"); + precachestring(&"OBJECTIVES_TDEF"); + precachestring(&"OBJECTIVES_TDEF_SCORE"); + precachestring(&"OBJECTIVES_TDEF_HINT"); +} + +//Function Number: 4 +onstartgametype() +{ + setclientnamemode("auto_change"); + if(!isdefined(game["switchedsides"])) + { + game["switchedsides"] = 0; + } + + if(game["switchedsides"]) + { + var_00 = game["attackers"]; + var_01 = game["defenders"]; + game["attackers"] = var_01; + game["defenders"] = var_00; + } + + maps\mp\_utility::setobjectivetext("allies",&"OBJECTIVES_TDEF"); + maps\mp\_utility::setobjectivetext("axis",&"OBJECTIVES_TDEF"); + if(level.splitscreen) + { + maps\mp\_utility::setobjectivescoretext("allies",&"OBJECTIVES_TDEF"); + maps\mp\_utility::setobjectivescoretext("axis",&"OBJECTIVES_TDEF"); + } + else + { + maps\mp\_utility::setobjectivescoretext("allies",&"OBJECTIVES_TDEF_SCORE"); + maps\mp\_utility::setobjectivescoretext("axis",&"OBJECTIVES_TDEF_SCORE"); + } + + maps\mp\_utility::setobjectivehinttext("allies",&"OBJECTIVES_TDEF_ATTACKER_HINT"); + maps\mp\_utility::setobjectivehinttext("axis",&"OBJECTIVES_TDEF_ATTACKER_HINT"); + level.spawnmins = (0,0,0); + level.spawnmaxs = (0,0,0); + maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_tdm_spawn_allies_start"); + maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_tdm_spawn_axis_start"); + maps\mp\gametypes\_spawnlogic::addspawnpoints("allies","mp_tdm_spawn"); + maps\mp\gametypes\_spawnlogic::addspawnpoints("axis","mp_tdm_spawn"); + level.mapcenter = maps\mp\gametypes\_spawnlogic::findboxcenter(level.spawnmins,level.spawnmaxs); + setmapcenter(level.mapcenter); + maps\mp\gametypes\_rank::registerscoreinfo("firstblood",200); + maps\mp\gametypes\_rank::registerscoreinfo("kill",50); + maps\mp\gametypes\_rank::registerscoreinfo("kill_bonus",50); + maps\mp\gametypes\_rank::registerscoreinfo("capture",100); + maps\mp\gametypes\_rank::registerscoreinfo("kill_carrier",50); + maps\mp\gametypes\_rank::registerscoreinfo("team_assist",20); + var_02[0] = level.gametype; + maps\mp\gametypes\_gameobjects::main(var_7B); + func_3A0E(); +} + +//Function Number: 5 +func_3A0E() +{ + level.icon2d["allies"] = maps\mp\gametypes\_teams::getteamflagicon("allies"); + level.icon2d["axis"] = maps\mp\gametypes\_teams::getteamflagicon("axis"); + precacheshader(level.icon2d["axis"]); + precacheshader(level.icon2d["allies"]); + level.carryflag["allies"] = maps\mp\gametypes\_teams::getteamflagcarrymodel("allies"); + level.carryflag["axis"] = maps\mp\gametypes\_teams::getteamflagcarrymodel("axis"); + level.carryflag["neutral"] = "prop_flag_neutral"; + precachemodel(level.carryflag["allies"]); + precachemodel(level.carryflag["axis"]); + precachemodel(level.carryflag["neutral"]); + level.iconescort3d = "waypoint_defend"; + level.iconescort2d = "waypoint_defend"; + precacheshader(level.iconescort3d); + precacheshader(level.iconescort2d); + level.iconkill3d = "waypoint_kill"; + level.iconkill2d = "waypoint_kill"; + precacheshader(level.iconkill3d); + precacheshader(level.iconkill2d); + level.iconcaptureflag3d = "waypoint_capture_flag"; + level.iconcaptureflag2d = "waypoint_capture_flag"; + precacheshader(level.iconcaptureflag3d); + precacheshader(level.iconcaptureflag2d); + precacheshader("waypoint_flag_friendly"); + precacheshader("waypoint_flag_enemy"); + level.gameflag = undefined; +} + +//Function Number: 6 +onnormaldeath(param_00,param_01,param_02) +{ + var_03 = maps\mp\gametypes\_rank::getscoreinfovalue("kill"); + if(isdefined(level.gameflag) && level.gameflag maps\mp\gametypes\_gameobjects::getownerteam() == param_01.pers["team"]) + { + if(isdefined(param_01.carryflag)) + { + param_01 maps\mp\_utility::incplayerstat("killsasflagcarrier",1); + } + else + { + level.gameflag.carrier thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_TEAM_ASSIST"); + lib_036E::func_2B7B("team_assist",level.gameflag.carrier,param_00,1); + level.gameflag.carrier thread maps\mp\gametypes\_rank::giverankxp("team_assist"); + } + + param_01 thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_X2_BONUS"); + lib_036E::func_2B7B("kill_bonus",param_01,param_00,1); + param_01 thread maps\mp\gametypes\_rank::giverankxp("kill_bonus"); + var_03 = var_03 * 2; + } + else if(!isdefined(level.gameflag) && cancreateflagatvictimorigin(param_00)) + { + level.gameflag = func_3A15(param_00); + var_03 = var_03 + maps\mp\gametypes\_rank::getscoreinfovalue("firstblood"); + lib_036E::func_2B7B("firstblood",param_01,param_00,1); + } + else if(isdefined(param_00.carryflag)) + { + var_04 = maps\mp\gametypes\_rank::getscoreinfovalue("kill_carrier"); + thread maps\mp\_utility::teamplayercardsplash("callout_killflagcarrier",param_01); + param_01 thread maps\mp\gametypes\_hud_message::splashnotify("flag_carrier_killed",var_04); + lib_036E::func_2B7B("kill_carrier",param_01,param_00,1); + param_01 maps\mp\_utility::incplayerstat("flagcarrierkills",1); + param_01 thread [[ level.onxpevent ]]("kill_carrier"); + param_01 notify("objective","kill_carrier"); + param_01 thread maps\mp\_matchdata::loggameevent("kill_carrier",param_01.origin); + var_03 = var_03 + var_04; + } + + param_01 lib_036E::func_2B88(param_01.pers["team"],var_03); + if(game["state"] == "postgame" && game["teamScores"][param_01.team] > game["teamScores"][level.otherteam[param_01.team]]) + { + param_01.finalkill = 1; + } +} + +//Function Number: 7 +ondrop(param_00) +{ + if(isdefined(param_00.tdef_flagtime)) + { + var_01 = int(gettime() - param_00.tdef_flagtime); + param_00 maps\mp\_utility::incplayerstat("holdingteamdefenderflag",var_01); + if(var_01 / 100 / 60 < 1) + { + var_02 = 0; + } + else + { + var_02 = int(var_02 / 100 / 60); + } + + param_00 maps\mp\_utility::incpersstat("destructions",var_02); + param_00 maps\mp\gametypes\_persistance::statsetchild("round","destructions",param_00.pers["destructions"]); + param_00.tdef_flagtime = undefined; + param_00 notify("dropped_flag"); + } + + var_03 = maps\mp\gametypes\_gameobjects::getownerteam(); + var_04 = level.otherteam[var_03]; + if(isdefined(self.portable_radar)) + { + level maps\mp\gametypes\_portable_radar::deleteportableradar(self.portable_radar); + self.portable_radar = undefined; + } + + self.currentcarrier = undefined; + maps\mp\gametypes\_gameobjects::setownerteam("neutral"); + maps\mp\gametypes\_gameobjects::allowcarry("any"); + maps\mp\gametypes\_gameobjects::setvisibleteam("any"); + maps\mp\gametypes\_gameobjects::set2dicon("friendly",level.iconcaptureflag2d); + maps\mp\gametypes\_gameobjects::set3dicon("friendly",level.iconcaptureflag3d); + maps\mp\gametypes\_gameobjects::set2dicon("enemy",level.iconcaptureflag2d); + maps\mp\gametypes\_gameobjects::set3dicon("enemy",level.iconcaptureflag3d); + if(isdefined(param_00)) + { + if(isdefined(param_00.carryflag)) + { + param_00 func_39C6(); + } + + maps\mp\_utility::printandsoundoneveryone(var_03,var_04,&"MP_NEUTRAL_FLAG_DROPPED_BY",&"MP_NEUTRAL_FLAG_DROPPED_BY","mp_war_objective_lost","mp_war_objective_lost",param_00); + } + else + { + maps\mp\_utility::playsoundonplayers("mp_war_objective_lost",var_03); + maps\mp\_utility::playsoundonplayers("mp_war_objective_lost",var_04); + } + + maps\mp\_utility::leaderdialog("dropped_flag",var_03,"status"); + maps\mp\_utility::leaderdialog("enemy_dropped_flag",var_04,"status"); +} + +//Function Number: 8 +onpickup(param_00) +{ + self notify("picked_up"); + param_00.tdef_flagtime = gettime(); + param_00 thread func_3A14(); + var_01 = maps\mp\gametypes\_rank::getscoreinfovalue("capture"); + var_02 = param_00.pers["team"]; + var_03 = level.otherteam[var_02]; + if(isdefined(level.tdef_loadouts) && isdefined(level.tdef_loadouts[var_02])) + { + param_00 thread func_39DA(); + } + else + { + param_00 func_39C5(); + } + + self.currentcarrier = param_00; + param_00.carryicon setshader(level.icon2d[var_02],param_00.carryicon.width,param_00.carryicon.height); + maps\mp\gametypes\_gameobjects::setownerteam(var_02); + maps\mp\gametypes\_gameobjects::setvisibleteam("any"); + maps\mp\gametypes\_gameobjects::set2dicon("friendly",level.iconescort2d); + maps\mp\gametypes\_gameobjects::set3dicon("friendly",level.iconescort2d); + maps\mp\gametypes\_gameobjects::set2dicon("enemy",level.iconkill3d); + maps\mp\gametypes\_gameobjects::set3dicon("enemy",level.iconkill3d); + maps\mp\_utility::leaderdialog("got_flag",var_02,"status"); + maps\mp\_utility::leaderdialog("enemy_got_flag",var_03,"status"); + thread maps\mp\_utility::teamplayercardsplash("callout_flagcapture",param_00); + param_00 thread maps\mp\gametypes\_hud_message::splashnotify("flag_capture",var_01); + lib_036E::func_2B7B("capture",param_00,undefined,1); + param_00 thread [[ level.onxpevent ]]("capture"); + param_00 maps\mp\_utility::incplayerstat("flagscaptured",1); + param_00 notify("objective","captured"); + param_00 thread maps\mp\_matchdata::loggameevent("capture",param_00.origin); + maps\mp\_utility::printandsoundoneveryone(var_02,var_03,&"MP_NEUTRAL_FLAG_CAPTURED_BY",&"MP_NEUTRAL_FLAG_CAPTURED_BY","mp_obj_captured","mp_enemy_obj_captured",param_00); + if(self.currentteam == var_03) + { + param_00 lib_036E::func_2B88(var_02,var_01); + } + + self.currentteam = var_02; + if(level.matchrules_enemyflagradar) + { + thread func_3A16(var_03); + } +} + +//Function Number: 9 +func_39DA() +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + if(isdefined(self.iscarrying) && self.iscarrying == 1) + { + self notify("force_cancel_placement"); + wait 0.05; + } + + if(maps\mp\_utility::isjuggernaut()) + { + self notify("lost_juggernaut"); + wait 0.05; + } + + self.pers["gamemodeLoadout"] = level.tdef_loadouts[self.team]; + var_00 = spawn("script_model",self.origin); + var_00.angles = self.angles; + var_00.playerspawnpos = self.origin; + var_00.notti = 1; + self.setspawnpoint = var_00; + self.gamemode_chosenclass = self.class; + self.pers["class"] = "gamemode"; + self.pers["lastClass"] = "gamemode"; + self.class = "gamemode"; + self.lastclass = "gamemode"; + thread waitattachflag(); + self notify("faux_spawn"); + self.gameobject_fauxspawn = 1; + self.faux_spawn_stance = self getstance(); + thread maps\mp\gametypes\_playerlogic::spawnplayer(1); +} + +//Function Number: 10 +waitattachflag() +{ + level endon("game_ende"); + self endon("disconnect"); + self endon("death"); + self waittill("spawned_player"); + func_39C5(); +} + +//Function Number: 11 +func_3A14() +{ + self endon("dropped_flag"); + self endon("disconnect"); + level waittill("game_ended"); + if(isdefined(self)) + { + if(isdefined(self.tdef_flagtime)) + { + var_00 = int(gettime() - self.tdef_flagtime); + maps\mp\_utility::incplayerstat("holdingteamdefenderflag",var_00); + if(var_00 / 100 / 60 < 1) + { + var_01 = 0; + } + else + { + var_01 = int(var_01 / 100 / 60); + } + + maps\mp\_utility::incpersstat("destructions",var_01); + maps\mp\gametypes\_persistance::statsetchild("round","destructions",self.pers["destructions"]); + } + } +} + +//Function Number: 12 +cancreateflagatvictimorigin(param_00) +{ + var_01 = getentarray("minefield","targetname"); + var_02 = getentarray("trigger_hurt","classname"); + var_03 = getentarray("radiation","targetname"); + for(var_04 = 0;var_04 < var_03.size;var_04++) + { + if(param_00 istouching(var_03[var_04])) + { + return 0; + } + } + + for(var_04 = 0;var_04 < var_01.size;var_04++) + { + if(param_00 istouching(var_01[var_04])) + { + return 0; + } + } + + for(var_04 = 0;var_04 < var_02.size;var_04++) + { + if(param_00 istouching(var_02[var_04])) + { + return 0; + } + } + + return 1; +} + +//Function Number: 13 +func_3A15(param_00) +{ + var_01[0] = spawn("script_model",param_00.origin); + var_01[0] setmodel(level.carryflag["neutral"]); + var_02 = spawn("trigger_radius",param_00.origin,0,96,72); + var_03 = maps\mp\gametypes\_gameobjects::createcarryobject("neutral",var_02,var_01,(0,0,85)); + var_03 maps\mp\gametypes\_gameobjects::setteamusetime("friendly",0.5); + var_03 maps\mp\gametypes\_gameobjects::setteamusetime("enemy",0.5); + var_03 maps\mp\gametypes\_gameobjects::setteamusetext("enemy",&"MP_GRABBING_FLAG"); + var_03 maps\mp\gametypes\_gameobjects::setteamusetext("friendly",&"MP_GRABBING_FLAG"); + var_03 maps\mp\gametypes\_gameobjects::allowcarry("any"); + var_03 maps\mp\gametypes\_gameobjects::setvisibleteam("any"); + var_03 maps\mp\gametypes\_gameobjects::set2dicon("enemy",level.iconcaptureflag2d); + var_03 maps\mp\gametypes\_gameobjects::set3dicon("enemy",level.iconcaptureflag3d); + var_03 maps\mp\gametypes\_gameobjects::set2dicon("friendly",level.iconcaptureflag2d); + var_03 maps\mp\gametypes\_gameobjects::set3dicon("friendly",level.iconcaptureflag3d); + var_03 maps\mp\gametypes\_gameobjects::setcarryicon(level.icon2d["axis"]); + var_03.allowweapons = 1; + var_03.onpickup = ::onpickup; + var_03.onpickupfailed = ::onpickup; + var_03.ondrop = ::ondrop; + var_03.oldradius = 96; + var_03.currentteam = "none"; + var_03.requireslos = 1; + level.favorclosespawnent = var_03.trigger; + level.favorclosespawnscalar = 3; + var_03 thread updatebaseposition(); + return var_03; +} + +//Function Number: 14 +updatebaseposition() +{ + level endon("game_ended"); + for(;;) + { + if(isdefined(self.safeorigin)) + { + self.baseorigin = self.safeorigin; + self.trigger.baseorigin = self.safeorigin; + self.visuals[0].baseorigin = self.safeorigin; + } + + wait 0.05; + } +} + +//Function Number: 15 +func_39C5() +{ + self attach(level.carryflag[self.pers["team"]],"J_spine4",1); + self.carryflag = level.carryflag[self.pers["team"]]; + level.favorclosespawnent = self; +} + +//Function Number: 16 +func_39C6() +{ + self detach(self.carryflag,"J_spine4"); + self.carryflag = undefined; + level.favorclosespawnent = level.gameflag.trigger; +} + +//Function Number: 17 +func_3A16(param_00) +{ + level endon("game_ended"); + self endon("dropped"); + var_01 = func_3A17(param_00); + var_02 = spawn("script_model",self.currentcarrier.origin); + var_02.team = param_00; + var_02.owner = var_01; + var_02 makeportableradar(var_01); + self.portable_radar = var_02; + thread func_3A18(); + thread func_3A19(); +} + +//Function Number: 18 +func_3A17(param_00) +{ + level endon("game_ended"); + self endon("dropped"); + for(;;) + { + foreach(var_02 in level.players) + { + if(isalive(var_02) && var_02.pers["team"] == param_00) + { + return var_02; + } + } + + wait 0.05; + } +} + +//Function Number: 19 +func_3A18() +{ + level endon("game_ended"); + self endon("dropped"); + self.portable_radar endon("death"); + for(;;) + { + self.portable_radar moveto(self.currentcarrier.origin,0.05); + wait 0.05; + } +} + +//Function Number: 20 +func_3A19() +{ + level endon("game_ended"); + self endon("dropped"); + var_00 = self.portable_radar.team; + self.portable_radar.owner common_scripts\utility::waittill_any("disconnect","joined_team","joined_spectators"); + level maps\mp\gametypes\_portable_radar::deleteportableradar(self.portable_radar); + self.portable_radar = undefined; + func_3A16(var_00); +} + +//Function Number: 21 +getspawnpoint() +{ + var_00 = self.pers["team"]; + if(game["switchedsides"]) + { + var_00 = maps\mp\_utility::getotherteam(var_00); + } + + if(level.ingraceperiod) + { + var_01 = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_tdm_spawn_" + var_00 + "_start"); + var_02 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random(var_01); + } + else + { + var_01 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints(var_02); + var_02 = maps\mp\gametypes\_spawnlogic::getspawnpoint_nearteam(var_02); + } + + return var_02; +} + +//Function Number: 22 +initgametypeawards() +{ + maps\mp\_awards::initstataward("flagscaptured",0,::maps\mp\_awards::highestwins); + maps\mp\_awards::initstataward("flagcarrierkills",0,::maps\mp\_awards::highestwins); + maps\mp\_awards::initstataward("killsasflagcarrier",0,::maps\mp\_awards::highestwins); +} + +//Function Number: 23 +func_3989() +{ + if(isusingmatchrulesdata() && getmatchrulesdata("defaultClasses","axis",5,"class","inUse")) + { + level.tdef_loadouts["axis"] = maps\mp\_utility::getmatchrulesspecialclass("axis",5); + } + + if(isusingmatchrulesdata() && getmatchrulesdata("defaultClasses","allies",5,"class","inUse")) + { + level.tdef_loadouts["allies"] = maps\mp\_utility::getmatchrulesspecialclass("allies",5); + } +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/gametypes/tjugg.gsc b/MW3/PC/MP/maps/mp/gametypes/tjugg.gsc new file mode 100644 index 0000000..f75c355 --- /dev/null +++ b/MW3/PC/MP/maps/mp/gametypes/tjugg.gsc @@ -0,0 +1,643 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\tjugg.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 18 + * Decompile Time: 255 ms + * Timestamp: 10/27/2023 2:13:36 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + maps\mp\gametypes\_globallogic::init(); + maps\mp\gametypes\_callbacksetup::setupcallbacks(); + maps\mp\gametypes\_globallogic::setupcallbacks(); + if(isusingmatchrulesdata()) + { + level.initializematchrules = ::initializematchrules; + [[ level.initializematchrules ]](); + level thread maps\mp\_utility::reinitializematchrulesonmigration(); + } + else + { + maps\mp\_utility::registertimelimitdvar(level.gametype,10); + maps\mp\_utility::registerroundlimitdvar(level.gametype,1); + maps\mp\_utility::registerscorelimitdvar(level.gametype,7500); + maps\mp\_utility::registerwinlimitdvar(level.gametype,1); + maps\mp\_utility::registernumlivesdvar(level.gametype,0); + maps\mp\_utility::registerhalftimedvar(level.gametype,0); + level.matchrules_juggswitchtime = 90; + level.matchrules_damagemultiplier = 0; + level.matchrules_vampirism = 0; + } + + func_3989(); + level.teambased = 1; + level.doprematch = 1; + level.onprecachegametype = ::onprecachegametype; + level.onstartgametype = ::onstartgametype; + level.getspawnpoint = ::getspawnpoint; + level.onplayerkilled = ::onplayerkilled; + if(level.matchrules_damagemultiplier || level.matchrules_vampirism) + { + level.modifyplayerdamage = ::maps\mp\gametypes\_damage::gamemodemodifyplayerdamage; + } +} + +//Function Number: 2 +initializematchrules() +{ + maps\mp\_utility::setcommonrulesfrommatchrulesdata(); + level.matchrules_juggswitchtime = getmatchrulesdata("tjuggData","juggSwitchTime"); + setdynamicdvar("scr_tjugg_roundswitch",0); + maps\mp\_utility::registerroundswitchdvar("tjugg",0,0,9); + setdynamicdvar("scr_tjugg_roundlimit",1); + maps\mp\_utility::registerroundlimitdvar("tjugg",1); + setdynamicdvar("scr_tjugg_winlimit",1); + maps\mp\_utility::registerwinlimitdvar("tjugg",1); + setdynamicdvar("scr_tjugg_halftime",0); + maps\mp\_utility::registerhalftimedvar("tjugg",0); + setdynamicdvar("scr_team_fftype",0); + setdynamicdvar("scr_tjugg_promode",0); +} + +//Function Number: 3 +onprecachegametype() +{ + precachestring(&"MP_JUGG_NEXT_JUGG_IN"); +} + +//Function Number: 4 +onstartgametype() +{ + setclientnamemode("auto_change"); + maps\mp\_utility::setobjectivetext("allies",&"OBJECTIVES_TJUGG"); + maps\mp\_utility::setobjectivetext("axis",&"OBJECTIVES_TJUGG"); + if(level.splitscreen) + { + maps\mp\_utility::setobjectivescoretext("allies",&"OBJECTIVES_TJUGG"); + maps\mp\_utility::setobjectivescoretext("axis",&"OBJECTIVES_TJUGG"); + } + else + { + maps\mp\_utility::setobjectivescoretext("allies",&"OBJECTIVES_TJUGG_SCORE"); + maps\mp\_utility::setobjectivescoretext("axis",&"OBJECTIVES_TJUGG_SCORE"); + } + + maps\mp\_utility::setobjectivehinttext("allies",&"OBJECTIVES_TJUGG_HINT"); + maps\mp\_utility::setobjectivehinttext("axis",&"OBJECTIVES_TJUGG_HINT"); + level.spawnmins = (0,0,0); + level.spawnmaxs = (0,0,0); + maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_tdm_spawn_allies_start"); + maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_tdm_spawn_axis_start"); + maps\mp\gametypes\_spawnlogic::addspawnpoints("allies","mp_tdm_spawn"); + maps\mp\gametypes\_spawnlogic::addspawnpoints("axis","mp_tdm_spawn"); + level.mapcenter = maps\mp\gametypes\_spawnlogic::findboxcenter(level.spawnmins,level.spawnmaxs); + setmapcenter(level.mapcenter); + maps\mp\gametypes\_rank::registerscoreinfo("got_juggernaut",250); + maps\mp\gametypes\_rank::registerscoreinfo("kill_juggernaut",250); + maps\mp\gametypes\_rank::registerscoreinfo("kill_as_juggernaut",100); + maps\mp\gametypes\_rank::registerscoreinfo("jugg_on_jugg",400); + var_00[0] = "tjugg"; + maps\mp\gametypes\_gameobjects::main(var_00); + level.quickmessagetoall = 1; + level.blockweapondrops = 1; + level.respawnoldjugg_fx = loadfx("explosions/bouncing_betty_explosion"); + level.jugg_available = []; + level.jugg_available["axis"] = 1; + level.jugg_available["allies"] = 1; + level.jugg_attackers = []; + level.jugg_attackers["axis"] = []; + level.jugg_attackers["allies"] = []; + level.jugg_currjugg = []; + level.jugg_currjugg["axis"] = undefined; + level.jugg_currjugg["allies"] = undefined; + level.tjugg_timerdisplay = []; + level.tjugg_timerdisplay["allies"] = maps\mp\gametypes\_hud_util::createservertimer("objective",1.4,"allies"); + level.tjugg_timerdisplay["allies"] maps\mp\gametypes\_hud_util::setpoint("TOPLEFT","TOPLEFT",115,5); + level.tjugg_timerdisplay["allies"].label = &"MP_JUGG_NEXT_JUGG_IN"; + level.tjugg_timerdisplay["allies"].alpha = 0; + level.tjugg_timerdisplay["allies"].archived = 0; + level.tjugg_timerdisplay["allies"].hidewheninmenu = 1; + level.tjugg_timerdisplay["axis"] = maps\mp\gametypes\_hud_util::createservertimer("objective",1.4,"axis"); + level.tjugg_timerdisplay["axis"] maps\mp\gametypes\_hud_util::setpoint("TOPLEFT","TOPLEFT",115,5); + level.tjugg_timerdisplay["axis"].label = &"MP_JUGG_NEXT_JUGG_IN"; + level.tjugg_timerdisplay["axis"].alpha = 0; + level.tjugg_timerdisplay["axis"].archived = 0; + level.tjugg_timerdisplay["axis"].hidewheninmenu = 1; + thread func_39A2(level.tjugg_timerdisplay["allies"]); + thread func_39A2(level.tjugg_timerdisplay["axis"]); + level.favorclosespawnscalar = 5; + level thread onplayerconnect(); +} + +//Function Number: 5 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_00.jugg_alligience = 0; + } +} + +//Function Number: 6 +getspawnpoint() +{ + if(level.ingraceperiod) + { + var_00 = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_tdm_spawn_" + self.pers["team"] + "_start"); + var_01 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random(var_00); + } + else + { + level.favorclosespawnent = level.jugg_currjugg[self.pers["team"]]; + var_00 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints(self.pers["team"]); + var_01 = maps\mp\gametypes\_spawnlogic::getspawnpoint_nearteam(var_01); + } + + return var_01; +} + +//Function Number: 7 +onplayerkilled(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09) +{ + if(param_03 == "MOD_SUICIDE" && param_04 == "none") + { + return; + } + + var_0A = self; + if(isdefined(param_01) && isplayer(param_01)) + { + var_0B = 0; + var_0C = 0; + var_0D = 0; + var_0E = 0; + var_0F = 0; + var_10 = 0; + var_11 = 0; + if(param_01 == var_0A) + { + if(isdefined(var_0A.isjuggmodejuggernaut)) + { + var_0C = 1; + } + } + else if(param_01.team != var_0A.team) + { + var_11 = var_11 + maps\mp\gametypes\_rank::getscoreinfovalue("kill"); + if(isdefined(var_0A.isjuggmodejuggernaut)) + { + var_0C = 1; + if(isdefined(param_01.isjuggmodejuggernaut)) + { + var_0D = 1; + } + else + { + var_0E = 1; + } + } + else if(isdefined(param_01.isjuggmodejuggernaut)) + { + var_0F = 1; + } + + if(level.jugg_available[param_01.team]) + { + var_0B = 1; + } + } + else if(isdefined(var_0A.isjuggmodejuggernaut) && param_01.team == var_0A.team) + { + var_0A thread func_3A39(); + return; + } + + if(var_0B) + { + func_3A38(param_01); + } + + if(var_0C) + { + var_12 = func_3A56(var_0A.team,0); + if(!isdefined(var_12)) + { + var_12 = func_3A56(var_0A.team,1); + } + + if(!isdefined(var_12)) + { + var_12 = var_0A; + } + + func_3A38(var_12,var_0A); + } + + if(var_0B || var_0C) + { + maps\mp\_utility::playsoundonplayers("mp_enemy_obj_captured"); + } + + if(param_01 != var_0A && param_01.team != var_0A.team && !isdefined(param_01.isjuggmodejuggernaut)) + { + param_01.jugg_alligience = param_01.jugg_alligience + 50; + if(var_0E) + { + param_01.jugg_alligience = param_01.jugg_alligience + 100; + } + + if(isdefined(level.jugg_attackers[param_01.team][var_0A.guid])) + { + var_10 = 1; + param_01.jugg_alligience = param_01.jugg_alligience + 100; + level.jugg_attackers[param_01.team][var_0A.guid] = undefined; + } + } + + if(var_0E) + { + var_13 = maps\mp\gametypes\_rank::getscoreinfovalue("kill_juggernaut"); + var_11 = var_11 + var_13; + param_01 thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_KILLED_JUGGERNAUT"); + lib_036E::func_2B7B("kill_juggernaut",param_01,var_0A,1); + param_01 thread maps\mp\gametypes\_rank::giverankxp("kill_juggernaut"); + } + else if(var_0D) + { + var_11 = var_11 + maps\mp\gametypes\_rank::getscoreinfovalue("jugg_on_jugg"); + param_01 thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_JUGGERNAUT_KILL_JUGGERNAUT"); + lib_036E::func_2B7B("jugg_on_jugg",param_01,var_0A,1); + param_01 thread maps\mp\gametypes\_rank::giverankxp("jugg_on_jugg"); + } + else if(var_0F) + { + var_11 = var_11 + maps\mp\gametypes\_rank::getscoreinfovalue("kill_as_juggernaut"); + param_01 thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_JUGGERNAUT_KILL"); + lib_036E::func_2B7B("kill_as_juggernaut",param_01,var_0A,1); + param_01 thread maps\mp\gametypes\_rank::giverankxp("kill_as_juggernaut"); + } + + if(var_11) + { + param_01 lib_036E::func_2B88(param_01.pers["team"],var_11); + } + + if(param_01.team != var_0A.team && game["state"] == "postgame" && game["teamScores"][param_01.team] > game["teamScores"][level.otherteam[param_01.team]]) + { + param_01.finalkill = 1; + return; + } + + return; + } + + if(isdefined(var_0A.isjuggmodejuggernaut)) + { + var_12 = func_3A56(var_0A.team,0); + if(!isdefined(var_12)) + { + var_12 = func_3A56(var_0A.team,1); + } + + if(!isdefined(var_12)) + { + var_12 = var_0A; + } + + func_3A38(var_12,var_0A); + } +} + +//Function Number: 8 +func_3A38(param_00,param_01) +{ + if(isdefined(param_01)) + { + param_01.isjuggmodejuggernaut = undefined; + } + else + { + level.jugg_available[param_00.team] = 0; + } + + level.jugg_currjugg[param_00.team] = undefined; + level.tjugg_timerdisplay[param_00.team].alpha = 0; + level.jugg_attackers[param_00.team] = []; + foreach(var_03 in level.players) + { + if(var_03.team == param_00.team) + { + var_03.jugg_alligience = 0; + } + } + + param_00 thread func_3A39(); +} + +//Function Number: 9 +func_3A39() +{ + if(!maps\mp\_utility::isreallyalive(self) || maps\mp\_utility::isusingremote()) + { + self endon("disconnect"); + thread func_3A55(0); + while(!maps\mp\_utility::isreallyalive(self) || maps\mp\_utility::isusingremote()) + { + wait 0.05; + } + + self notify("end_resetJuggLoadoutOnDisconnect"); + } + + if(isdefined(self.iscarrying) && self.iscarrying == 1) + { + self notify("force_cancel_placement"); + wait 0.05; + } + + if(maps\mp\_utility::isjuggernaut()) + { + self notify("lost_juggernaut"); + wait 0.05; + } + + self.isjuggmodejuggernaut = 1; + level.jugg_currjugg[self.team] = self; + self.pers["gamemodeLoadout"] = level.tjugg_loadouts[self.pers["team"]]; + var_00 = spawn("script_model",self.origin); + var_00.angles = self.angles; + var_00.playerspawnpos = self.origin; + var_00.notti = 1; + self.setspawnpoint = var_00; + self.gamemode_chosenclass = self.class; + self.pers["class"] = "gamemode"; + self.pers["lastClass"] = "gamemode"; + self.class = "gamemode"; + self.lastclass = "gamemode"; + self notify("faux_spawn"); + self.faux_spawn_stance = self getstance(); + thread maps\mp\gametypes\_playerlogic::spawnplayer(1); + var_01 = maps\mp\gametypes\_rank::getscoreinfovalue("got_juggernaut"); + thread maps\mp\gametypes\_hud_message::splashnotify("got_juggernaut",var_01); + lib_036E::func_2B7B("got_juggernaut",self,undefined,1); + thread func_3A55(1); + thread resetjuggloadoutonchangeteam(); + thread func_3A53(); + thread func_3A54(); + thread func_3A51(); +} + +//Function Number: 10 +func_3A51() +{ + level endon("game_ended"); + self endon("disconnect"); + self endon("death"); + level.tjugg_timerdisplay[self.team].label = &"MP_JUGG_NEXT_JUGG_IN"; + level.tjugg_timerdisplay[self.team] settimer(level.matchrules_juggswitchtime); + level.tjugg_timerdisplay[self.team].alpha = 1; + maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause(level.matchrules_juggswitchtime); + level.tjugg_timerdisplay[self.team].alpha = 0; + var_00 = func_3A56(self.team,0); + if(!isdefined(var_00)) + { + var_00 = func_3A56(self.team,1); + } + + if(!isdefined(var_00)) + { + var_00 = self; + } + + maps\mp\_utility::playsoundonplayers("mp_enemy_obj_captured"); + func_3A38(var_00,self); + if(var_00 != self) + { + thread func_3A52(); + } +} + +//Function Number: 11 +func_3A52() +{ + level endon("game_ended"); + self endon("disconnect"); + while(!maps\mp\_utility::isreallyalive(self) || maps\mp\_utility::isusingremote()) + { + wait 0.05; + } + + if(isdefined(self.iscarrying) && self.iscarrying == 1) + { + self notify("force_cancel_placement"); + wait 0.05; + } + + playfx(level.respawnoldjugg_fx,self.origin); + self notify("lost_juggernaut"); + wait 0.05; + self notify("faux_spawn"); + self.faux_spawn_stance = self getstance(); + thread maps\mp\gametypes\_playerlogic::spawnplayer(1); +} + +//Function Number: 12 +func_3A53() +{ + level endon("game_ended"); + self endon("death"); + self endon("disconnect"); + for(;;) + { + wait 1; + foreach(var_01 in level.players) + { + if(maps\mp\_utility::isreallyalive(var_01) && !var_01 maps\mp\_utility::isusingremote() && var_01 != self && var_01.team == self.team && distancesquared(var_01.origin,self.origin) < -17136) + { + var_01.jugg_alligience = var_01.jugg_alligience + 25; + } + } + } +} + +//Function Number: 13 +func_3A54() +{ + level endon("game_ended"); + self endon("death"); + self endon("disconnect"); + for(;;) + { + self waittill("damage",var_00,var_01); + if(isplayer(var_01) && var_01.team != self.team) + { + if(!isdefined(level.jugg_attackers[self.team][var_01.guid])) + { + level.jugg_attackers[self.team][var_01.guid] = 1; + } + } + } +} + +//Function Number: 14 +func_3A55(param_00) +{ + level endon("game_ended"); + if(param_00) + { + self endon("death"); + } + else + { + self endon("end_resetJuggLoadoutOnDisconnect"); + } + + var_01 = self.team; + self waittill("disconnect"); + var_02 = func_3A56(var_01,0); + if(!isdefined(var_02)) + { + var_02 = func_3A56(var_01,1); + } + + if(isdefined(var_02)) + { + maps\mp\_utility::playsoundonplayers("mp_enemy_obj_captured"); + func_3A38(var_02); + return; + } + + level.jugg_available[var_01] = 1; + level.jugg_currjugg[var_01] = undefined; + level.tjugg_timerdisplay[var_01].alpha = 0; + level.jugg_attackers[var_01] = []; + foreach(var_04 in level.players) + { + if(var_04.team == var_01) + { + var_04.jugg_alligience = 0; + } + } +} + +//Function Number: 15 +resetjuggloadoutonchangeteam() +{ + level endon("game_ended"); + self endon("disconnect"); + var_00 = self.team; + common_scripts\utility::waittill_any("joined_team","joined_spectators"); + self.isjuggmodejuggernaut = undefined; + var_01 = func_3A56(var_00,0); + if(!isdefined(var_01)) + { + var_01 = func_3A56(var_00,1); + } + + if(isdefined(var_01)) + { + maps\mp\_utility::playsoundonplayers("mp_enemy_obj_captured"); + func_3A38(var_01); + return; + } + + level.jugg_available[var_00] = 1; + level.jugg_currjugg[var_00] = undefined; + level.tjugg_timerdisplay[var_00].alpha = 0; + level.jugg_attackers[var_00] = []; + foreach(var_03 in level.players) + { + if(var_03.team == var_00) + { + var_03.jugg_alligience = 0; + } + } +} + +//Function Number: 16 +func_3A56(param_00,param_01) +{ + var_02 = undefined; + var_03 = -1; + foreach(var_05 in level.players) + { + if((param_01 || !var_05 maps\mp\_utility::isusingremote()) && var_05 != self && var_05.team == param_00 && var_05.jugg_alligience > var_03) + { + var_02 = var_05; + var_03 = var_05.jugg_alligience; + } + } + + return var_02; +} + +//Function Number: 17 +func_39A2(param_00) +{ + level waittill("game_ended"); + param_00.alpha = 0; +} + +//Function Number: 18 +func_3989() +{ + if(isusingmatchrulesdata() && getmatchrulesdata("defaultClasses","axis",5,"class","inUse")) + { + level.tjugg_loadouts["axis"] = maps\mp\_utility::getmatchrulesspecialclass("axis",5); + level.tjugg_loadouts["axis"]["loadoutJuggernaut"] = 1; + } + else + { + level.tjugg_loadouts["axis"]["loadoutPrimary"] = "iw5_scar"; + level.tjugg_loadouts["axis"]["loadoutPrimaryAttachment"] = "none"; + level.tjugg_loadouts["axis"]["loadoutPrimaryAttachment2"] = "none"; + level.tjugg_loadouts["axis"]["loadoutPrimaryBuff"] = "specialty_bulletpenetration"; + level.tjugg_loadouts["axis"]["loadoutPrimaryCamo"] = "none"; + level.tjugg_loadouts["axis"]["loadoutPrimaryReticle"] = "none"; + level.tjugg_loadouts["axis"]["loadoutSecondary"] = "rpg"; + level.tjugg_loadouts["axis"]["loadoutSecondaryAttachment"] = "none"; + level.tjugg_loadouts["axis"]["loadoutSecondaryAttachment2"] = "none"; + level.tjugg_loadouts["axis"]["loadoutSecondaryBuff"] = "specialty_null"; + level.tjugg_loadouts["axis"]["loadoutSecondaryCamo"] = "none"; + level.tjugg_loadouts["axis"]["loadoutSecondaryReticle"] = "none"; + level.tjugg_loadouts["axis"]["loadoutEquipment"] = "frag_grenade_mp"; + level.tjugg_loadouts["axis"]["loadoutOffhand"] = "smoke_grenade_mp"; + level.tjugg_loadouts["axis"]["loadoutPerk1"] = "specialty_scavenger"; + level.tjugg_loadouts["axis"]["loadoutPerk2"] = "_specialty_blastshield"; + level.tjugg_loadouts["axis"]["loadoutPerk3"] = "specialty_bulletaccuracy"; + level.tjugg_loadouts["axis"]["loadoutDeathstreak"] = "specialty_null"; + level.tjugg_loadouts["axis"]["loadoutJuggernaut"] = 1; + } + + if(isusingmatchrulesdata() && getmatchrulesdata("defaultClasses","allies",5,"class","inUse")) + { + level.tjugg_loadouts["allies"] = maps\mp\_utility::getmatchrulesspecialclass("allies",5); + level.tjugg_loadouts["allies"]["loadoutJuggernaut"] = 1; + return; + } + + level.tjugg_loadouts["allies"]["loadoutPrimary"] = "iw5_scar"; + level.tjugg_loadouts["allies"]["loadoutPrimaryAttachment"] = "none"; + level.tjugg_loadouts["allies"]["loadoutPrimaryAttachment2"] = "none"; + level.tjugg_loadouts["allies"]["loadoutPrimaryBuff"] = "specialty_bulletpenetration"; + level.tjugg_loadouts["allies"]["loadoutPrimaryCamo"] = "none"; + level.tjugg_loadouts["allies"]["loadoutPrimaryReticle"] = "none"; + level.tjugg_loadouts["allies"]["loadoutSecondary"] = "rpg"; + level.tjugg_loadouts["allies"]["loadoutSecondaryAttachment"] = "none"; + level.tjugg_loadouts["allies"]["loadoutSecondaryAttachment2"] = "none"; + level.tjugg_loadouts["allies"]["loadoutSecondaryBuff"] = "specialty_null"; + level.tjugg_loadouts["allies"]["loadoutSecondaryCamo"] = "none"; + level.tjugg_loadouts["allies"]["loadoutSecondaryReticle"] = "none"; + level.tjugg_loadouts["allies"]["loadoutEquipment"] = "frag_grenade_mp"; + level.tjugg_loadouts["allies"]["loadoutOffhand"] = "smoke_grenade_mp"; + level.tjugg_loadouts["allies"]["loadoutPerk1"] = "specialty_scavenger"; + level.tjugg_loadouts["allies"]["loadoutPerk2"] = "_specialty_blastshield"; + level.tjugg_loadouts["allies"]["loadoutPerk3"] = "specialty_bulletaccuracy"; + level.tjugg_loadouts["allies"]["loadoutDeathstreak"] = "specialty_null"; + level.tjugg_loadouts["allies"]["loadoutJuggernaut"] = 1; +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/gametypes/vip.gsc b/MW3/PC/MP/maps/mp/gametypes/vip.gsc new file mode 100644 index 0000000..8fe6cf9 --- /dev/null +++ b/MW3/PC/MP/maps/mp/gametypes/vip.gsc @@ -0,0 +1,433 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\vip.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 23 + * Decompile Time: 322 ms + * Timestamp: 10/27/2023 2:13:37 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(getdvar("mapname") == "mp_background") + { + return; + } + + maps\mp\gametypes\_globallogic::init(); + maps\mp\gametypes\_callbacksetup::setupcallbacks(); + maps\mp\gametypes\_globallogic::setupcallbacks(); + maps\mp\_utility::registerroundswitchdvar(level.gametype,0,0,9); + maps\mp\_utility::registertimelimitdvar(level.gametype,10,0,1440); + maps\mp\_utility::registerscorelimitdvar(level.gametype,500,0,5000); + maps\mp\_utility::registerroundlimitdvar(level.gametype,1,0,10); + maps\mp\_utility::registerwinlimitdvar(level.gametype,1,0,10); + maps\mp\_utility::registerroundswitchdvar(level.gametype,3,0,30); + maps\mp\_utility::registernumlivesdvar(level.gametype,1,0,10); + maps\mp\_utility::registerwatchdvarint("halftime",0); + level.teambased = 1; + level.objectivebased = 1; + level.onprecachegametype = ::onprecachegametype; + level.onstartgametype = ::onstartgametype; + level.getspawnpoint = ::getspawnpoint; + level.onspawnplayer = ::onspawnplayer; + level.onnormaldeath = ::onnormaldeath; + level.onplayerkilled = ::onplayerkilled; + level.ondeadevent = ::ondeadevent; + game["dialog"]["gametype"] = "VIP"; +} + +//Function Number: 2 +onprecachegametype() +{ + precacheshader("compass_waypoint_captureneutral"); + precacheshader("compass_waypoint_capture"); + precacheshader("compass_waypoint_defend"); + precacheshader("waypoint_captureneutral"); + precacheshader("waypoint_capture"); + precacheshader("waypoint_defend"); + precachestring(&"MP_ELIMINATED_VIP"); + precachestring(&"MP_DEFENDED_VIP"); + precachestring(&"SPLASHES_VIP"); + game["flagmodels"] = []; + game["flagmodels"]["neutral"] = "prop_flag_neutral"; + game["flagmodels"]["allies"] = maps\mp\gametypes\_teams::getteamflagmodel("allies"); + game["flagmodels"]["axis"] = maps\mp\gametypes\_teams::getteamflagmodel("axis"); + precachemodel(game["flagmodels"]["neutral"]); + precachemodel(game["flagmodels"]["allies"]); + precachemodel(game["flagmodels"]["axis"]); +} + +//Function Number: 3 +onstartgametype() +{ + setclientnamemode("auto_change"); + if(!isdefined(game["switchedsides"])) + { + game["switchedsides"] = 0; + } + + if(game["switchedsides"]) + { + var_00 = game["attackers"]; + var_01 = game["defenders"]; + game["attackers"] = var_01; + game["defenders"] = var_00; + } + + maps\mp\_utility::setobjectivetext("allies",&"OBJECTIVES_VIP"); + maps\mp\_utility::setobjectivetext("axis",&"OBJECTIVES_VIP"); + if(level.splitscreen) + { + maps\mp\_utility::setobjectivescoretext("allies",&"OBJECTIVES_VIP"); + maps\mp\_utility::setobjectivescoretext("axis",&"OBJECTIVES_VIP"); + } + else + { + maps\mp\_utility::setobjectivescoretext("allies",&"OBJECTIVES_VIP_SCORE"); + maps\mp\_utility::setobjectivescoretext("axis",&"OBJECTIVES_VIP_SCORE"); + } + + maps\mp\_utility::setobjectivehinttext("allies",&"OBJECTIVES_VIP_HINT"); + maps\mp\_utility::setobjectivehinttext("axis",&"OBJECTIVES_VIP_HINT"); + level.spawnmins = (0,0,0); + level.spawnmaxs = (0,0,0); + maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_tdm_spawn_allies_start"); + maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_tdm_spawn_axis_start"); + maps\mp\gametypes\_spawnlogic::addspawnpoints("allies","mp_tdm_spawn"); + maps\mp\gametypes\_spawnlogic::addspawnpoints("axis","mp_tdm_spawn"); + level.mapcenter = maps\mp\gametypes\_spawnlogic::findboxcenter(level.spawnmins,level.spawnmaxs); + setmapcenter(level.mapcenter); + var_02[0] = "vip"; + maps\mp\gametypes\_gameobjects::main(var_7B); + thread func_3A69(); +} + +//Function Number: 4 +func_3A69() +{ + level endon("game_end"); + level endon("waitSkipped"); + thread extractionzone(); + thread func_3A78(); + maps\mp\_utility::gameflagwait("prematch_done"); + maps\mp\_utility::gameflagwait("graceperiod_done"); + self notify("graceComplete"); + thread func_3A7B(); +} + +//Function Number: 5 +func_3A78() +{ + self endon("graceComplete"); + for(;;) + { + if(level.players.size > 2) + { + break; + } + + wait 0.5; + } + + self notify("waitSkipped"); + thread func_3A7B(); +} + +//Function Number: 6 +getspawnpoint() +{ + var_00 = self.pers["team"]; + if(game["switchedsides"]) + { + var_00 = maps\mp\_utility::getotherteam(var_00); + } + + if(level.ingraceperiod) + { + var_01 = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_tdm_spawn_" + var_00 + "_start"); + var_02 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random(var_01); + } + else + { + var_01 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints(var_02); + var_02 = maps\mp\gametypes\_spawnlogic::getspawnpoint_nearteam(var_02); + } + + return var_02; +} + +//Function Number: 7 +onspawnplayer() +{ + self.isvip = 0; + self.usingobj = undefined; + level notify("spawned_player"); +} + +//Function Number: 8 +onnormaldeath(param_00,param_01,param_02) +{ + var_03 = maps\mp\gametypes\_rank::getscoreinfovalue("kill"); + param_01 lib_036E::func_2B88(param_01.pers["team"],var_03); + var_04 = param_00.team; + if(isdefined(param_00.isvip) && param_00.isvip) + { + level thread func_3A7A(game["attackers"],&"MP_ELIMINATED_VIP"); + param_01.finalkill = 1; + } +} + +//Function Number: 9 +onplayerkilled(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09) +{ + thread func_3959(); +} + +//Function Number: 10 +ontimelimit() +{ + if(game["status"] == "overtime") + { + var_00 = "forfeit"; + } + else if(game["teamScores"]["allies"] == game["teamScores"]["axis"]) + { + var_00 = "overtime"; + } + else if(game["teamScores"]["axis"] > game["teamScores"]["allies"]) + { + var_00 = "axis"; + } + else + { + var_00 = "allies"; + } + + thread maps\mp\gametypes\_gamelogic::endgame(var_00,game["strings"]["time_limit_reached"]); +} + +//Function Number: 11 +func_3959() +{ + wait 0.05; + var_00 = 0; + if(!level.alivecount[game["attackers"]]) + { + level.spectateoverride[game["attackers"]].allowenemyspectate = 1; + var_00 = 1; + } + + if(!level.alivecount[game["defenders"]]) + { + level.spectateoverride[game["defenders"]].allowenemyspectate = 1; + var_00 = 1; + } + + if(var_00) + { + maps\mp\gametypes\_spectating::updatespectatesettings(); + } +} + +//Function Number: 12 +ondeadevent(param_00) +{ + if(param_00 == game["attackers"]) + { + level thread func_3A7A(game["defenders"],game["strings"][game["attackers"] + "_eliminated"]); + return; + } + + if(param_00 == game["defenders"]) + { + level thread func_3A7A(game["attackers"],game["strings"][game["defenders"] + "_eliminated"]); + } +} + +//Function Number: 13 +func_3A7A(param_00,param_01) +{ + thread maps\mp\gametypes\_gamelogic::endgame(param_00,param_01); +} + +//Function Number: 14 +func_3A7B() +{ + var_00 = []; + var_01 = 0; + for(;;) + { + if(level.players.size >= 2) + { + break; + } + + if(var_01 >= 100) + { + iprintlnbold("Game mode only playable with 2 or more players"); + wait 2; + maps\mp\gametypes\_callbacksetup::abortlevel(); + } + + var_01++; + wait 0.1; + } + + foreach(var_03 in level.players) + { + if(var_03.team == game["defenders"]) + { + var_00[var_00.size] = var_03; + } + } + + var_05 = randomintrange(0,var_00.size); + var_06 = var_00[var_05]; + if(!isalive(var_06) && !issubstr(var_06.guid,"bot")) + { + var_06 func_3A81(); + } + + func_3A7C(var_06); +} + +//Function Number: 15 +func_3A7C(param_00) +{ + param_00 takeallweapons(); + param_00 maps\mp\_utility::_clearperks(); + param_00.isvip = 1; + param_00 giveweapon("deserteagle_fmj_mp"); + param_00 givestartammo("deserteagle_fmj_mp"); + param_00 giveweapon("riotshield_mp"); + param_00 switchtoweapon("riotshield_mp"); + param_00 maps\mp\_utility::giveperk("specialty_armorvest",0); + param_00 maps\mp\_utility::giveperk("specialty_finalstand",0); + param_00 iprintlnbold("You Are the VIP"); +} + +//Function Number: 16 +extractionzone() +{ + var_00 = getentarray("extraction_vip","targetname"); + if(!isdefined(var_00)) + { + maps\mp\gametypes\_callbacksetup::abortlevel(); + return; + } + else + { + level.extractionzone = var_00; + } + + var_01 = level.extractionzone[0]; + if(isdefined(var_01.target)) + { + var_02[0] = getent(var_01.target,"targetname"); + } + else + { + var_00[0] = spawn("script_model",var_02.origin); + var_02[0].angles = var_01.angles; + } + + var_00 = maps\mp\gametypes\_gameobjects::createuseobject(game["defenders"],var_01,var_02,(0,0,100)); + var_00 maps\mp\gametypes\_gameobjects::allowuse("friendly"); + var_00 maps\mp\gametypes\_gameobjects::setvisibleteam("none"); + var_00 maps\mp\gametypes\_gameobjects::setusetext(&"MP_CALLING_EXTRACTION"); + var_00 maps\mp\gametypes\_gameobjects::setusetime(0); + var_00.onuse = ::onuse; + var_00.oncantuse = ::oncantuse; + var_03 = var_01.origin + (0,0,32); + var_04 = var_01.origin + (0,0,-32); + var_05 = bullettrace(var_03,var_04,0,undefined); + var_06 = maps\mp\gametypes\_teams::getteamflagfx(game["defenders"]); + var_07 = loadfx(var_06); + var_08 = vectortoangles(var_05["normal"]); + var_09 = anglestoforward(var_08); + var_0A = anglestoright(var_08); + thread spawnfxdelay(var_07,var_05["position"],var_09,var_0A,0.5); + var_00 maps\mp\gametypes\_gameobjects::set2dicon("friendly","compass_waypoint_defend"); + var_00 maps\mp\gametypes\_gameobjects::set3dicon("friendly","waypoint_defend"); + var_00 maps\mp\gametypes\_gameobjects::setvisibleteam("friendly"); + level.extractionzone = var_00; +} + +//Function Number: 17 +func_3A7E() +{ + foreach(var_01 in level.players) + { + if(!var_01.isvip) + { + self.trigger disableplayeruse(var_01); + } + } +} + +//Function Number: 18 +onuse(param_00) +{ + if(!isdefined(param_00.isvip) || !param_00.isvip) + { + return; + } + + iprintlnbold("Extraction on its way"); + func_3A7F(param_00); +} + +//Function Number: 19 +func_3A7F(param_00) +{ + param_00 endon("death"); + level endon("game_end"); + level.extractiontime = 45; + maps\mp\gametypes\_gamelogic::pausetimer(); + level.timelimitoverride = 1; + setgameendtime(int(gettime() + level.extractiontime * 1000)); + wait level.extractiontime; + level thread func_3A7A(game["defenders"],&"MP_DEFENDED_VIP"); +} + +//Function Number: 20 +onenduse(param_00,param_01,param_02) +{ +} + +//Function Number: 21 +oncantuse(param_00) +{ +} + +//Function Number: 22 +spawnfxdelay(param_00,param_01,param_02,param_03,param_04) +{ + wait param_04; + var_05 = spawnfx(param_00,param_01,param_02,param_03); + triggerfx(var_05); +} + +//Function Number: 23 +func_3A81() +{ + self endon("death"); + self endon("disconnect"); + self endon("spawned"); + if(self.hasspawned) + { + return; + } + + if(!maps\mp\_utility::isvalidclass(self.pers["class"])) + { + self.pers["class"] = "CLASS_CUSTOM1"; + self.class = self.pers["class"]; + } + + maps\mp\_utility::closemenus(); + thread maps\mp\gametypes\_playerlogic::spawnclient(); +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/gametypes/war.gsc b/MW3/PC/MP/maps/mp/gametypes/war.gsc new file mode 100644 index 0000000..8c2f18f --- /dev/null +++ b/MW3/PC/MP/maps/mp/gametypes/war.gsc @@ -0,0 +1,188 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\war.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 6 + * Decompile Time: 96 ms + * Timestamp: 10/27/2023 2:13:38 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(getdvar("mapname") == "mp_background") + { + return; + } + + maps\mp\gametypes\_globallogic::init(); + maps\mp\gametypes\_callbacksetup::setupcallbacks(); + maps\mp\gametypes\_globallogic::setupcallbacks(); + if(isusingmatchrulesdata()) + { + level.initializematchrules = ::initializematchrules; + [[ level.initializematchrules ]](); + level thread maps\mp\_utility::reinitializematchrulesonmigration(); + } + else + { + maps\mp\_utility::registerroundswitchdvar(level.gametype,0,0,9); + maps\mp\_utility::registertimelimitdvar(level.gametype,10); + maps\mp\_utility::registerscorelimitdvar(level.gametype,500); + maps\mp\_utility::registerroundlimitdvar(level.gametype,1); + maps\mp\_utility::registerwinlimitdvar(level.gametype,1); + maps\mp\_utility::registernumlivesdvar(level.gametype,0); + maps\mp\_utility::registerhalftimedvar(level.gametype,0); + level.matchrules_damagemultiplier = 0; + level.matchrules_vampirism = 0; + } + + level.teambased = 1; + level.onstartgametype = ::onstartgametype; + level.getspawnpoint = ::getspawnpoint; + level.onnormaldeath = ::onnormaldeath; + if(level.matchrules_damagemultiplier || level.matchrules_vampirism) + { + level.modifyplayerdamage = ::maps\mp\gametypes\_damage::gamemodemodifyplayerdamage; + } + + game["dialog"]["gametype"] = "tm_death"; + if(getdvarint("g_hardcore")) + { + game["dialog"]["gametype"] = "hc_" + game["dialog"]["gametype"]; + } + else if(getdvarint("camera_thirdPerson")) + { + game["dialog"]["gametype"] = "thirdp_" + game["dialog"]["gametype"]; + } + else if(getdvarint("scr_diehard")) + { + game["dialog"]["gametype"] = "dh_" + game["dialog"]["gametype"]; + } + else if(getdvarint("scr_" + level.gametype + "_promode")) + { + game["dialog"]["gametype"] = game["dialog"]["gametype"] + "_pro"; + } + + game["strings"]["overtime_hint"] = &"MP_FIRST_BLOOD"; +} + +//Function Number: 2 +initializematchrules() +{ + maps\mp\_utility::setcommonrulesfrommatchrulesdata(); + setdynamicdvar("scr_war_roundswitch",0); + maps\mp\_utility::registerroundswitchdvar("war",0,0,9); + setdynamicdvar("scr_war_roundlimit",1); + maps\mp\_utility::registerroundlimitdvar("war",1); + setdynamicdvar("scr_war_winlimit",1); + maps\mp\_utility::registerwinlimitdvar("war",1); + setdynamicdvar("scr_war_halftime",0); + maps\mp\_utility::registerhalftimedvar("war",0); + setdynamicdvar("scr_war_promode",0); +} + +//Function Number: 3 +onstartgametype() +{ + setclientnamemode("auto_change"); + if(!isdefined(game["switchedsides"])) + { + game["switchedsides"] = 0; + } + + if(game["switchedsides"]) + { + var_00 = game["attackers"]; + var_01 = game["defenders"]; + game["attackers"] = var_01; + game["defenders"] = var_00; + } + + maps\mp\_utility::setobjectivetext("allies",&"OBJECTIVES_WAR"); + maps\mp\_utility::setobjectivetext("axis",&"OBJECTIVES_WAR"); + if(level.splitscreen) + { + maps\mp\_utility::setobjectivescoretext("allies",&"OBJECTIVES_WAR"); + maps\mp\_utility::setobjectivescoretext("axis",&"OBJECTIVES_WAR"); + } + else + { + maps\mp\_utility::setobjectivescoretext("allies",&"OBJECTIVES_WAR_SCORE"); + maps\mp\_utility::setobjectivescoretext("axis",&"OBJECTIVES_WAR_SCORE"); + } + + maps\mp\_utility::setobjectivehinttext("allies",&"OBJECTIVES_WAR_HINT"); + maps\mp\_utility::setobjectivehinttext("axis",&"OBJECTIVES_WAR_HINT"); + level.spawnmins = (0,0,0); + level.spawnmaxs = (0,0,0); + maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_tdm_spawn_allies_start"); + maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_tdm_spawn_axis_start"); + maps\mp\gametypes\_spawnlogic::addspawnpoints("allies","mp_tdm_spawn"); + maps\mp\gametypes\_spawnlogic::addspawnpoints("axis","mp_tdm_spawn"); + level.mapcenter = maps\mp\gametypes\_spawnlogic::findboxcenter(level.spawnmins,level.spawnmaxs); + setmapcenter(level.mapcenter); + var_02[0] = level.gametype; + maps\mp\gametypes\_gameobjects::main(var_7B); +} + +//Function Number: 4 +getspawnpoint() +{ + var_00 = self.pers["team"]; + if(game["switchedsides"]) + { + var_00 = maps\mp\_utility::getotherteam(var_00); + } + + if(level.ingraceperiod) + { + var_01 = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_tdm_spawn_" + var_00 + "_start"); + var_02 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random(var_01); + } + else + { + var_01 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints(var_02); + var_02 = maps\mp\gametypes\_spawnlogic::getspawnpoint_nearteam(var_02); + } + + return var_02; +} + +//Function Number: 5 +onnormaldeath(param_00,param_01,param_02) +{ + var_03 = maps\mp\gametypes\_rank::getscoreinfovalue("kill"); + param_01 lib_036E::func_2B88(param_01.pers["team"],var_03); + if(game["state"] == "postgame" && game["teamScores"][param_01.team] > game["teamScores"][level.otherteam[param_01.team]]) + { + param_01.finalkill = 1; + } +} + +//Function Number: 6 +ontimelimit() +{ + level.finalkillcam_winner = "none"; + if(game["status"] == "overtime") + { + var_00 = "forfeit"; + } + else if(game["teamScores"]["allies"] == game["teamScores"]["axis"]) + { + var_00 = "overtime"; + } + else if(game["teamScores"]["axis"] > game["teamScores"]["allies"]) + { + level.finalkillcam_winner = "axis"; + var_00 = "axis"; + } + else + { + level.finalkillcam_winner = "allies"; + var_00 = "allies"; + } + + thread maps\mp\gametypes\_gamelogic::endgame(var_00,game["strings"]["time_limit_reached"]); +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/killstreaks/_a10.gsc b/MW3/PC/MP/maps/mp/killstreaks/_a10.gsc new file mode 100644 index 0000000..17d39cb --- /dev/null +++ b/MW3/PC/MP/maps/mp/killstreaks/_a10.gsc @@ -0,0 +1,567 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\killstreaks\_a10.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 22 + * Decompile Time: 291 ms + * Timestamp: 10/27/2023 2:13:39 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + precachestring(&"MP_WAR_AIRSTRIKE_INBOUND"); + precachestring(&"SPLASHES_DESTROYED_A10"); + precachestring(&"KILLSTREAKS_A10_SUPPORT"); + precachemodel("vehicle_a10_warthog"); + precacheitem("a10_30mm_mp"); + precachempanim("MP_A10_strafing_run"); + precacheshader("compass_objpoint_a10_friendly"); + precacheshader("compass_objpoint_a10_enemy"); + precacheminimapicon("compass_objpoint_a10_friendly"); + precacheminimapicon("compass_objpoint_a10_enemy"); + level.a10_fx["bullet_rain"] = loadfx("misc/warthog_volley_runner"); + level.a10_fx["bullet_impacts"] = loadfx("impacts/warthog_volley_runner"); + level.a10_fx["bullet_dust"] = loadfx("dust/wing_drop_dust"); + level.a10_fx["afterburner"] = loadfx("fire/jet_afterburner"); + level.a10_fx["contrail"] = loadfx("smoke/jet_contrail"); + level.a10_fx["wingtip_light_green"] = loadfx("misc/aircraft_light_wingtip_green"); + level.a10_fx["wingtip_light_red"] = loadfx("misc/aircraft_light_wingtip_red"); + level.killstreakfuncs["a10_support"] = ::tryusea10strike; + level.killstreaksetupfuncs["a10_support"] = ::a10supportsetup; + level.a10maxhealth = 350; + level.a10speed = 100; + level.a10speedreduction = 75; + level.a10startpointoffset = 5000; + level.a10impactfxdelay = 0.5; + level.a10damage = 200; + level.a10damageradius = 384; + level.a10damagedelay = 0.5; + level.a10bulletraindelay = 0.5; + level.a10bulletimpactsdelay = 0.5; + level.a10earthquakemagnitude = 0.1; + level.a10earthquakeduration = 0.5; + level.a10earthquakedelay = 0.5; + level.a10dirteffectradius = 350; + level.a10shootinggroundsounddelay = 0.1; + level.a10startpositionscalar = 2000; +} + +//Function Number: 2 +a10supportsetup() +{ + self.useduava10 = 0; +} + +//Function Number: 3 +tryusea10strike(param_00) +{ + var_01 = undefined; + if(isdefined(level.civilianjetflyby)) + { + self iprintlnbold(&"MP_CIVILIAN_AIR_TRAFFIC"); + return 0; + } + + if(maps\mp\_utility::isusingremote()) + { + return 0; + } + + if(maps\mp\_utility::isairdenied()) + { + return 0; + } + + if(maps\mp\_utility::isemped()) + { + return 0; + } + + var_02 = "a10_support"; + if(!self.useduava10) + { + self.useduava10 = 1; + maps\mp\killstreaks\_uav::func_356B(var_02); + } + + var_01 = selecta10strikelocation(param_00,var_02); + if(!isdefined(var_01) || !var_01) + { + return 0; + } + + return 1; +} + +//Function Number: 4 +selecta10strikelocation(param_00,param_01) +{ + self playlocalsound("US_KS_hqr_a10"); + maps\mp\_utility::_beginlocationselection(param_01,"map_artillery_selector",1,500); + self endon("stop_location_selection"); + self waittill("confirm_location",var_02,var_03); + self playlocalsound("US_KS_a10_inbound"); + thread finisha10strikeusage(param_00,var_02,::calla10strike,var_03); + self setblurforplayer(0,0.3); + return 1; +} + +//Function Number: 5 +finisha10strikeusage(param_00,param_01,param_02,param_03) +{ + self notify("used"); + wait 0.05; + thread maps\mp\_utility::stoplocationselection(0); + self thread [[ param_02 ]](param_00,param_01,param_03); + return 1; +} + +//Function Number: 6 +calla10strike(param_00,param_01,param_02) +{ + if(!isdefined(self)) + { + return; + } + + if(level.teambased) + { + var_03 = level.players; + foreach(var_05 in level.players) + { + var_06 = var_05.pers["team"]; + if(isdefined(var_06)) + { + if(var_06 == self.team) + { + var_05 iprintln(&"MP_WAR_AIRSTRIKE_INBOUND",self); + } + } + } + } + + var_08 = (0,param_02,0); + var_09 = 12000; + var_0A = param_01 + anglestoforward(var_08) * -1 * var_09; + var_0B = param_01 + anglestoforward(var_08) * var_09 * 2; + var_0A = var_0A * (1,1,0); + var_0B = var_0B * (1,1,0); + var_0C = getbestheight(var_0A,var_0B); + var_0B = var_0B + (0,0,var_0C); + var_0A = var_0A + (0,0,var_0C); + self endon("disconnect"); + var_0D = self.lifeid; + level thread doa10strike(param_00,self,var_0D,param_01,var_0A,var_0B,var_08,0); +} + +//Function Number: 7 +getbestheight(param_00,param_01) +{ + var_02 = getent("airstrikeheight","targetname"); + var_03 = level.spawnpoints; + var_04 = var_03[0]; + foreach(var_06 in var_03) + { + if(var_06.origin[2] < var_04.origin[2]) + { + var_04 = var_06; + } + } + + if(isdefined(var_02)) + { + var_08 = var_02.origin[2]; + } + else if(isdefined(level.airstrikeheightscale)) + { + var_08 = 850 * level.airstrikeheightscale; + } + else + { + var_08 = 850; + } + + var_09 = var_08; + var_0A = var_08; + var_0B = var_04.origin[2]; + var_0C = undefined; + var_0D = 0; + for(;;) + { + var_0E = var_0A - var_0B / 2 + var_0B; + var_0F = bullettrace(param_00 + (0,0,var_0E),param_01 + (0,0,var_0E),0,undefined); + if(var_0F["surfacetype"] != "none") + { + var_0B = var_0E; + var_0D++; + if(var_0D > 4 && isdefined(var_0C)) + { + var_08 = var_0C; + break; + } + else if(var_0D > 6) + { + var_08 = var_09; + break; + } + } + else + { + var_0C = var_0E; + var_0A = var_0E; + if(var_0E < var_04.origin[2] + 512) + { + var_08 = var_04.origin[2] + 512; + break; + } + } + + wait 0.05; + } + + var_0D = 0; + for(;;) + { + wait 0.05; + var_10 = bullettrace(param_00 + (0,0,var_08),param_01 + (0,0,var_08),0,undefined); + var_11 = bullettrace(param_00 + (50,50,var_08 + 50),param_01 + (50,50,var_08 + 50),0,undefined); + wait 0.05; + var_12 = bullettrace(param_00 + (-50,-50,var_08 - 50),param_01 + (-50,-50,var_08 - 50),0,undefined); + var_13 = bullettrace(param_00 + (50,50,var_08 - 50),param_01 + (50,50,var_08 - 50),0,undefined); + wait 0.05; + var_14 = bullettrace(param_00 + (-50,-50,var_08 + 50),param_01 + (-50,-50,var_08 + 50),0,undefined); + if(var_10["surfacetype"] != "none" || var_11["surfacetype"] != "none" || var_12["surfacetype"] != "none" || var_13["surfacetype"] != "none" || var_14["surfacetype"] != "none") + { + var_0D++; + var_08 = var_08 + 200; + if(var_0D > 5) + { + var_08 = var_09; + break; + } + + continue; + } + + break; + } + + return var_08 + 175; +} + +//Function Number: 8 +doa10strike(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07) +{ + if(!isdefined(param_01)) + { + return; + } + + var_08 = spawna10(param_01,param_04,param_05,param_03,param_07); + var_08.lifeid = param_00; + var_08 playloopsound("veh_mig29_dist_loop"); + var_09 = level.spawnpoints; + var_0A = var_09[0]; + foreach(var_0C in var_09) + { + if(var_0C.origin[2] > var_0A.origin[2]) + { + var_0A = var_0C; + } + } + + var_08.killcament = spawn("script_model",(var_08.origin[0],var_08.origin[1],var_0A.origin[2] + 5000)); + var_08.killcament linkto(var_08); + param_01.a10 = var_08; + var_08 thread watchtimeout(); + var_08 thread watchdeath(); + var_08 endon("death"); + var_08 thread a10startmove(); +} + +//Function Number: 9 +watchtimeout() +{ + level endon("game_ended"); + self endon("gone"); + self endon("death"); + maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause(35); + self notify("death"); +} + +//Function Number: 10 +a10startmove() +{ + self endon("death"); + wait self.initialdelay; + var_00 = self.startpoint; + var_01 = self.attackpoint; + var_02 = self.endpoint; + var_01 = (var_01[0],var_01[1],var_00[2] - level.a10startpointoffset); + var_03 = distance(var_00,var_01) * 0.5; + var_04 = float(level.a10speed); + var_05 = var_03 / var_04 / 60; + var_06 = var_00 + vectornormalize(var_01 - var_00) * var_03; + thread a10playenginefx(); + self moveto(var_06,var_05); + wait var_05; + var_03 = distance(var_00,var_01) * 0.5; + var_04 = float(level.a10speed - level.a10speedreduction); + var_05 = var_03 / var_04 / 60; + self moveto(var_01,var_05); + thread starta10shooting(var_05); + thread monitorkills(); + wait var_05; + self notify("stopShooting"); + var_03 = distance2d(var_01,var_02); + var_04 = level.a10speed; + var_05 = var_03 / var_04 / 60; + self moveto(var_02,var_05); + var_07 = vectortoangles(var_02 - var_01); + self waittill("movedone"); + self notify("gone"); + wait 0.5; + removea10(); +} + +//Function Number: 11 +a10playenginefx() +{ + self endon("death"); + wait 0.5; + playfxontag(level.a10_fx["afterburner"],self,"tag_engine_right"); + wait 0.5; + playfxontag(level.a10_fx["afterburner"],self,"tag_engine_left"); + wait 0.5; + playfxontag(level.a10_fx["contrail"],self,"tag_right_wingtip"); + wait 0.5; + playfxontag(level.a10_fx["contrail"],self,"tag_left_wingtip"); + wait 0.5; + playfxontag(level.a10_fx["wingtip_light_red"],self,"tag_right_wingtip"); + wait 0.5; + playfxontag(level.a10_fx["wingtip_light_green"],self,"tag_left_wingtip"); +} + +//Function Number: 12 +monitorkills() +{ + level endon("game_ended"); + self endon("gone"); + self endon("death"); + self endon("stopShooting"); + for(;;) + { + self waittill("killedPlayer"); + self.killcount++; + } +} + +//Function Number: 13 +spawna10(param_00,param_01,param_02,param_03,param_04) +{ + param_01 = param_01 + (0,0,level.a10startpointoffset); + var_05 = vectortoangles(param_02 - param_01); + var_06 = spawn("script_model",param_01); + var_07 = spawnplane(param_00,"script_model",param_01,"compass_objpoint_a10_friendly","compass_objpoint_a10_enemy"); + if(!isdefined(var_06)) + { + return; + } + + var_07 linkto(var_06); + var_06.fakea10 = var_07; + var_06 setmodel("vehicle_a10_warthog"); + var_06.health = 999999; + var_06.maxhealth = level.a10maxhealth; + var_06.damagetaken = 0; + var_06.owner = param_00; + var_06.team = param_00.team; + var_06.killcount = 0; + var_06.startpoint = param_01; + var_06.endpoint = param_02; + var_06.attackpoint = param_03; + var_06.initialdelay = param_04; + var_06.angles = var_05; + return var_06; +} + +//Function Number: 14 +starta10shooting(param_00) +{ + self endon("gone"); + self endon("death"); + self endon("stopShooting"); + var_01 = level.spawnpoints; + var_02 = var_01[0]; + var_03 = vectornormalize(self.origin - self.attackpoint) * level.a10startpositionscalar; + var_03 = self.attackpoint + (var_03[0],var_03[1],0); + var_04 = vectornormalize(self.origin - self.attackpoint) * -1 * level.a10startpositionscalar; + var_04 = self.attackpoint + (var_04[0],var_04[1],0); + var_05 = vectornormalize(var_04 - var_03); + var_06 = distance2d(var_03,var_04) / param_00 / 0.05; + self.a10shootingpos = (var_03[0],var_03[1],var_02.origin[2] - 128); + var_07 = var_05 * var_06; + thread playbulletrain(); + thread manageshootingloopsound(); + thread manageshootinggroundsound(); + thread a10earthquake(); + while(param_00 > 0) + { + foreach(var_09 in level.players) + { + if(level.teambased) + { + if(var_09.team != self.owner.team) + { + var_0A = pointonsegmentnearesttopoint(self.origin,self.a10shootingpos,var_09.origin); + if(distancesquared(var_0A,var_09.origin) < level.a10damageradius * level.a10damageradius) + { + radiusdamage(var_0A,level.a10damageradius,level.a10damage,level.a10damage,self,"MOD_RIFLE_BULLET","a10_30mm_mp"); + } + } + + continue; + } + + var_0A = pointonsegmentnearesttopoint(self.origin,self.a10shootingpos,var_09.origin); + if(distancesquared(var_0A,var_09.origin) < level.a10damageradius * level.a10damageradius) + { + radiusdamage(var_0A,level.a10damageradius,level.a10damage,level.a10damage,self,"MOD_RIFLE_BULLET","a10_30mm_mp"); + } + } + + var_0C = self gettagorigin("tag_gun"); + for(var_0D = 0;var_0D < 1;var_0D++) + { + magicbullet("a10_30mm_mp",var_0C,self.a10shootingpos + (randomintrange(-100,100),randomintrange(-100,100),0),self.owner); + } + + self.a10shootingpos = self.a10shootingpos + (var_07[0],var_07[1],0); + param_00 = param_00 - 0.05; + wait 0.05; + } +} + +//Function Number: 15 +playbulletrain() +{ + self endon("gone"); + self endon("death"); + self endon("stopShooting"); + for(;;) + { + var_00 = self gettagorigin("tag_gun"); + var_01 = self.a10shootingpos - var_00; + var_02 = anglestoup(var_01); + playfx(level.a10_fx["bullet_rain"],var_00,var_01,var_02); + wait level.a10bulletraindelay; + } +} + +//Function Number: 16 +manageshootingloopsound() +{ + var_00 = spawn("script_origin",self gettagorigin("tag_gun")); + if(!isdefined(var_00)) + { + return; + } + + var_00 linkto(self,"tag_gun"); + var_00 playloopsound("pavelow_mg_loop"); + common_scripts\utility::waittill_any("stopShooting","gone","death"); + var_00 stoploopsound("pavelow_mg_loop"); + wait 0.5; + var_00 delete(); +} + +//Function Number: 17 +manageshootinggroundsound() +{ + self endon("death"); + self endon("gone"); + self endon("stopShooting"); + for(;;) + { + level thread common_scripts\utility::play_sound_in_space("bullet_a10warthog_default",self.a10shootingpos); + wait level.a10shootinggroundsounddelay; + } +} + +//Function Number: 18 +a10earthquake() +{ + self endon("death"); + self endon("gone"); + self endon("stopShooting"); + for(;;) + { + playrumbleonposition("grenade_rumble",self.a10shootingpos); + earthquake(level.a10earthquakemagnitude,level.a10earthquakeduration,self.a10shootingpos,level.a10damageradius); + foreach(var_01 in level.players) + { + if(var_01 maps\mp\_utility::isusingremote()) + { + continue; + } + + if(distance(self.a10shootingpos,var_01.origin) > level.a10dirteffectradius) + { + continue; + } + + if(var_01 damageconetrace(self.a10shootingpos)) + { + var_01 thread maps\mp\gametypes\_shellshock::dirteffect(self.a10shootingpos); + } + } + + wait level.a10earthquakedelay; + } +} + +//Function Number: 19 +watchdeath() +{ + self endon("gone"); + self waittill("death"); + thread a10destroyed(); +} + +//Function Number: 20 +a10destroyed() +{ + self endon("gone"); + if(!isdefined(self)) + { + return; + } + + wait randomfloatrange(0.5,1.5); + a10explode(); +} + +//Function Number: 21 +a10explode() +{ + self notify("explode"); + removea10(); +} + +//Function Number: 22 +removea10() +{ + if(isdefined(self.killcament)) + { + self.killcament delete(); + } + + if(isdefined(self.fakea10)) + { + self.fakea10 delete(); + } + + self delete(); +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/killstreaks/_aamissile.gsc b/MW3/PC/MP/maps/mp/killstreaks/_aamissile.gsc new file mode 100644 index 0000000..2483a1f --- /dev/null +++ b/MW3/PC/MP/maps/mp/killstreaks/_aamissile.gsc @@ -0,0 +1,253 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\killstreaks\_aamissile.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 11 + * Decompile Time: 154 ms + * Timestamp: 10/27/2023 2:13:40 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + precacheitem("aamissile_projectile_mp"); + precacheshader("ac130_overlay_grain"); + level.aamissilelaunchvert = 14000; + level.aamissilelaunchhorz = 30000; + level.aamissilelaunchtargetdist = 1500; + level.rockets = []; + level.killstreakfuncs["aamissile"] = ::tryuseaamissile; +} + +//Function Number: 2 +tryuseaamissile(param_00) +{ + if(isdefined(level.civilianjetflyby)) + { + self iprintlnbold(&"MP_CIVILIAN_AIR_TRAFFIC"); + return 0; + } + + maps\mp\_utility::setusingremote("aamissile"); + var_01 = maps\mp\killstreaks\_killstreaks::initridekillstreak(); + if(var_01 != "success") + { + if(var_01 != "disconnect") + { + maps\mp\_utility::clearusingremote(); + } + + return 0; + } + + level thread aa_missile_fire(param_00,self); + return 1; +} + +//Function Number: 3 +drawline(param_00,param_01,param_02,param_03) +{ + var_04 = int(param_02 * 20); + for(var_05 = 0;var_05 < var_04;var_05++) + { + wait 0.05; + } +} + +//Function Number: 4 +gettargets() +{ + var_00 = []; + var_01 = []; + if(isdefined(level.littlebirds) && level.littlebirds.size) + { + foreach(var_03 in level.littlebirds) + { + if(var_03.team != self.team) + { + var_00[var_00.size] = var_03; + } + } + } + + if(isdefined(level.helis) && level.helis.size) + { + foreach(var_06 in level.helis) + { + if(var_06.team != self.team) + { + var_01[var_01.size] = var_06; + } + } + } + + if(level.ac130inuse && isdefined(level.ac130.owner) && level.ac130.owner.team != self.team) + { + return level.ac130.planemodel; + } + + if(isdefined(var_01) && var_01.size) + { + return var_01[0]; + } + + if(isdefined(var_00) && var_00.size) + { + return var_00[0]; + } +} + +//Function Number: 5 +aa_missile_fire(param_00,param_01) +{ + var_02 = undefined; + var_03 = (0,0,level.aamissilelaunchvert); + var_04 = level.aamissilelaunchhorz; + var_05 = level.aammissilelaunchtargetdist; + var_06 = param_01 gettargets(); + if(!isdefined(var_06)) + { + var_07 = (0,0,0); + } + else + { + var_07 = var_07.origin; + var_03 = (0,0,1) * var_07 + (0,0,1000); + } + + var_08 = anglestoforward(param_01.angles); + var_09 = param_01.origin + var_03 + var_08 * var_04 * -1; + var_0A = magicbullet("aamissile_projectile_mp",var_09,var_07,param_01); + if(!isdefined(var_0A)) + { + param_01 maps\mp\_utility::clearusingremote(); + return; + } + + var_0A.lifeid = param_00; + var_0A.type = "remote"; + missileeyes(param_01,var_0A); +} + +//Function Number: 6 +missileeyes(param_00,param_01) +{ + param_00 endon("joined_team"); + param_00 endon("joined_spectators"); + param_01 thread rocket_cleanupondeath(); + param_00 thread player_cleanupongameended(param_01); + param_00 thread player_cleanuponteamchange(param_01); + param_00 visionsetmissilecamforplayer("black_bw",0); + param_00 endon("disconnect"); + if(isdefined(param_01)) + { + param_00 visionsetmissilecamforplayer(game["thermal_vision"],1); + param_00 thread delayedfofoverlay(); + param_00 cameralinkto(param_01,"tag_origin"); + param_00 controlslinkto(param_01); + if(getdvarint("camera_thirdPerson")) + { + param_00 maps\mp\_utility::setthirdpersondof(0); + } + + param_01 waittill("death"); + if(isdefined(param_01)) + { + param_00 maps\mp\_matchdata::logkillstreakevent("predator_missile",param_01.origin); + } + + param_00 controlsunlink(); + param_00 maps\mp\_utility::freezecontrolswrapper(1); + if(!level.gameended || isdefined(param_00.finalkill)) + { + param_00 thread staticeffect(0.5); + } + + wait 0.5; + param_00 thermalvisionfofoverlayoff(); + param_00 cameraunlink(); + if(getdvarint("camera_thirdPerson")) + { + param_00 maps\mp\_utility::setthirdpersondof(1); + } + } + + param_00 maps\mp\_utility::clearusingremote(); +} + +//Function Number: 7 +delayedfofoverlay() +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + wait 0.15; + self thermalvisionfofoverlayon(); +} + +//Function Number: 8 +staticeffect(param_00) +{ + self endon("disconnect"); + var_01 = newclienthudelem(self); + var_01.horzalign = "fullscreen"; + var_01.vertalign = "fullscreen"; + var_01 setshader("white",640,480); + var_01.archive = 1; + var_01.sort = 10; + var_02 = newclienthudelem(self); + var_02.horzalign = "fullscreen"; + var_02.vertalign = "fullscreen"; + var_02 setshader("ac130_overlay_grain",640,480); + var_02.archive = 1; + var_02.sort = 20; + wait param_00; + var_02 destroy(); + var_01 destroy(); +} + +//Function Number: 9 +player_cleanuponteamchange(param_00) +{ + param_00 endon("death"); + self endon("disconnect"); + common_scripts\utility::waittill_any("joined_team","joined_spectators"); + if(self.team != "spectator") + { + self thermalvisionfofoverlayoff(); + self controlsunlink(); + self cameraunlink(); + if(getdvarint("camera_thirdPerson")) + { + maps\mp\_utility::setthirdpersondof(1); + } + } + + maps\mp\_utility::clearusingremote(); + level.remotemissileinprogress = undefined; +} + +//Function Number: 10 +rocket_cleanupondeath() +{ + var_00 = self getentitynumber(); + level.rockets[var_00] = self; + self waittill("death"); + level.rockets[var_00] = undefined; +} + +//Function Number: 11 +player_cleanupongameended(param_00) +{ + param_00 endon("death"); + self endon("death"); + level waittill("game_ended"); + self thermalvisionfofoverlayoff(); + self controlsunlink(); + self cameraunlink(); + if(getdvarint("camera_thirdPerson")) + { + maps\mp\_utility::setthirdpersondof(1); + } +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/killstreaks/_aastrike.gsc b/MW3/PC/MP/maps/mp/killstreaks/_aastrike.gsc new file mode 100644 index 0000000..abeed62 --- /dev/null +++ b/MW3/PC/MP/maps/mp/killstreaks/_aastrike.gsc @@ -0,0 +1,318 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\killstreaks\_aastrike.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 11 + * Decompile Time: 168 ms + * Timestamp: 10/27/2023 2:13:40 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + precacheitem("aamissile_projectile_mp"); + precachemodel("vehicle_av8b_harrier_jet_mp"); + precachestring(&"MP_NO_AIR_TARGETS"); + level.teamairdenied["axis"] = 0; + level.teamairdenied["allies"] = 0; + level.rockets = []; + level.killstreakfuncs["aastrike"] = ::tryuseaastrike; +} + +//Function Number: 2 +tryuseaastrike(param_00) +{ + if(isdefined(level.civilianjetflyby)) + { + self iprintlnbold(&"MP_CIVILIAN_AIR_TRAFFIC"); + return 0; + } + + if(maps\mp\_utility::isusingremote()) + { + return 0; + } + + if(maps\mp\_utility::isairdenied()) + { + return 0; + } + + if(maps\mp\_utility::isemped()) + { + return 0; + } + + maps\mp\_matchdata::logkillstreakevent("aastrike",self.origin); + thread finishaastrike(param_00); + thread maps\mp\_utility::teamplayercardsplash("used_aastrike",self,self.team); + return 1; +} + +//Function Number: 3 +cycletargets() +{ + self endon("stopFindingTargets"); + self endon("disconnect"); + self endon("joined_team"); + self endon("joined_spectators"); + self endon("game_ended"); + for(;;) + { + wait 0.05; + findtargets(); + wait randomintrange(4,5); + } +} + +//Function Number: 4 +findtargets() +{ + self endon("disconnect"); + self endon("joined_team"); + self endon("joined_spectators"); + self endon("game_ended"); + var_00 = []; + var_01 = []; + var_02 = []; + if(isdefined(level.littlebirds) && level.littlebirds.size) + { + foreach(var_04 in level.littlebirds) + { + if(isdefined(var_04.team) && var_04.team != self.team) + { + var_00[var_00.size] = var_04; + } + } + } + + if(isdefined(level.helis) && level.helis.size) + { + foreach(var_07 in level.helis) + { + if(var_07.team != self.team) + { + var_01[var_01.size] = var_07; + } + } + } + + var_09 = maps\mp\_utility::getotherteam(self.team); + if(isdefined(level.activeuavs[var_09])) + { + foreach(var_0B in level.uavmodels[var_09]) + { + var_02[var_02.size] = var_0B; + } + } + + var_0D = 0; + foreach(var_04 in var_00) + { + wait 3; + if(var_0D % 2) + { + thread fireattarget(var_04,self.team,1); + } + else + { + thread fireattarget(var_04,self.team,0); + } + + var_0D++; + } + + foreach(var_07 in var_01) + { + wait 3; + thread fireattarget(var_07,self.team,1); + } + + foreach(var_0B in var_02) + { + wait 0.5; + thread fireattarget(var_0B,self.team,0); + } + + if(level.ac130inuse && isdefined(level.ac130.owner) && level.ac130.owner.team != self.team) + { + var_14 = level.ac130.planemodel; + wait 6; + thread fireattarget(var_14,self.team,1); + } +} + +//Function Number: 5 +earlyabortwatcher() +{ + self endon("stopFindingTargets"); + var_00 = self.team; + common_scripts\utility::waittill_any("disconnect","joined_team","joined_spectators","game_ended"); + level.teamairdenied[maps\mp\_utility::getotherteam(var_00)] = 0; + level.airdeniedplayer = undefined; +} + +//Function Number: 6 +finishaastrike(param_00) +{ + self endon("disconnect"); + self endon("joined_team"); + self endon("joined_spectators"); + self endon("game_ended"); + level.teamairdenied[maps\mp\_utility::getotherteam(self.team)] = 1; + level.airdeniedplayer = self; + thread earlyabortwatcher(); + thread cycletargets(); + for(var_01 = 0;var_01 < 4;var_01++) + { + wait 6; + if(var_01 == 1 || var_01 == 3) + { + thread doflyby(1); + continue; + } + + thread doflyby(0); + } + + wait 3; + self notify("stopFindingTargets"); + level.teamairdenied[maps\mp\_utility::getotherteam(self.team)] = 0; + level.airdeniedplayer = undefined; +} + +//Function Number: 7 +fireattarget(param_00,param_01,param_02) +{ + if(!isdefined(param_00)) + { + return; + } + + var_03 = (0,0,14000); + var_04 = (0,0,1500); + var_05 = 15000; + var_06 = 20000; + var_07 = param_00.origin; + var_03 = (0,0,1) * var_07 + (0,0,1000); + var_08 = param_00.angles * (0,1,0); + var_09 = anglestoforward(var_08); + var_0A = param_00.origin + var_04 + var_09 * var_05 * -1; + var_0B = param_00.origin + var_04 + var_09 * var_06; + var_0C = magicbullet("aamissile_projectile_mp",var_0A + (0,0,-75),param_00.origin,self); + var_0C missile_settargetent(param_00); + var_0C missile_setflightmodedirect(); + var_0D = magicbullet("aamissile_projectile_mp",var_0A + (randomint(500),randomint(500),-75),param_00.origin,self); + var_0D missile_settargetent(param_00); + var_0D missile_setflightmodedirect(); + if(param_02) + { + var_0E = spawnplane(self,"script_model",var_0A,"hud_minimap_harrier_green","hud_minimap_harrier_red"); + } + else + { + var_0E = spawnplane(self,"script_model",var_0B); + } + + if(self.team == "allies") + { + var_0E setmodel("vehicle_av8b_harrier_jet_mp"); + } + else + { + var_0E setmodel("vehicle_av8b_harrier_jet_opfor_mp"); + } + + var_0F = distance(var_0A,var_0B); + var_0E.angles = vectortoangles(var_0B - var_0A); + var_0E thread aasoundmanager(var_0F); + var_0E thread playplanefx(); + var_0F = distance(var_0A,var_0B); + var_0E moveto(var_0B * 2,var_0F / 2000,0,0); + wait var_0F / 3000; + var_0E delete(); +} + +//Function Number: 8 +aasoundmanager(param_00) +{ + self playloopsound("veh_aastrike_flyover_loop"); + wait param_00 / 2 / 2000; + self stoploopsound(); + self playloopsound("veh_aastrike_flyover_outgoing_loop"); +} + +//Function Number: 9 +doflyby(param_00) +{ + self endon("disconnect"); + var_01 = randomint(level.spawnpoints.size - 1); + var_02 = level.spawnpoints[var_01].origin * (1,1,0); + var_03 = 20000; + var_04 = 20000; + var_05 = getent("airstrikeheight","targetname"); + var_06 = (0,0,var_05.origin[2] + randomintrange(-100,600)); + var_07 = anglestoforward((0,randomint(45),0)); + var_08 = var_02 + var_06 + var_07 * var_03 * -1; + var_09 = var_02 + var_06 + var_07 * var_04; + var_0A = var_08 + (randomintrange(400,500),randomintrange(400,500),randomintrange(200,300)); + var_0B = var_09 + (randomintrange(400,500),randomintrange(400,500),randomintrange(200,300)); + if(param_00) + { + var_0C = spawnplane(self,"script_model",var_08,"hud_minimap_harrier_green","hud_minimap_harrier_red"); + } + else + { + var_0C = spawnplane(self,"script_model",var_09); + } + + var_0D = spawnplane(self,"script_model",var_0A); + if(self.team == "allies") + { + var_0C setmodel("vehicle_av8b_harrier_jet_mp"); + var_0D setmodel("vehicle_av8b_harrier_jet_mp"); + } + else + { + var_0C setmodel("vehicle_av8b_harrier_jet_opfor_mp"); + var_0D setmodel("vehicle_av8b_harrier_jet_opfor_mp"); + } + + var_0C.angles = vectortoangles(var_09 - var_08); + var_0C playloopsound("veh_aastrike_flyover_loop"); + var_0C thread playplanefx(); + var_0D.angles = vectortoangles(var_09 - var_0A); + var_0D thread playplanefx(); + var_0E = distance(var_08,var_09); + var_0C moveto(var_09 * 2,var_0E / 1800,0,0); + wait randomfloatrange(0.25,0.5); + var_0D moveto(var_0B * 2,var_0E / 1800,0,0); + wait var_0E / 1600; + var_0C delete(); + var_0D delete(); +} + +//Function Number: 10 +drawline(param_00,param_01,param_02,param_03) +{ + var_04 = int(param_02 * 20); + for(var_05 = 0;var_05 < var_04;var_05++) + { + wait 0.05; + } +} + +//Function Number: 11 +playplanefx() +{ + self endon("death"); + wait 0.5; + playfxontag(level.fx_airstrike_afterburner,self,"tag_engine_right"); + wait 0.5; + playfxontag(level.fx_airstrike_afterburner,self,"tag_engine_left"); + wait 0.5; + playfxontag(level.fx_airstrike_contrail,self,"tag_right_wingtip"); + wait 0.5; + playfxontag(level.fx_airstrike_contrail,self,"tag_left_wingtip"); +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/killstreaks/_ac130.gsc b/MW3/PC/MP/maps/mp/killstreaks/_ac130.gsc new file mode 100644 index 0000000..bfab413 --- /dev/null +++ b/MW3/PC/MP/maps/mp/killstreaks/_ac130.gsc @@ -0,0 +1,1908 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\killstreaks\_ac130.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 77 + * Decompile Time: 1066 ms + * Timestamp: 10/27/2023 2:13:44 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level.ac130_use_duration = 40; + level.ac130_num_flares = 2; + makedvarserverinfo("ui_ac130usetime",level.ac130_use_duration); + precacheshader("black"); + precachestring(&"AC130_HUD_FLIR"); + precachestring(&"AC130_HUD_OPTICS"); + precachemenu("ac130timer"); + precachemodel("vehicle_ac130_coop"); + precacheitem("ac130_25mm_mp"); + precacheitem("ac130_40mm_mp"); + precacheitem("ac130_105mm_mp"); + precacheminimapicon("compass_objpoint_ac130_friendly"); + precacheminimapicon("compass_objpoint_ac130_enemy"); + precacheshellshock("ac130"); + angelflareprecache(); + level._effect["cloud"] = loadfx("misc/ac130_cloud"); + level._effect["beacon"] = loadfx("misc/ir_beacon_coop"); + level._effect["ac130_explode"] = loadfx("explosions/aerial_explosion_ac130_coop"); + level._effect["ac130_flare"] = loadfx("misc/flares_cobra"); + level._effect["ac130_light_red"] = loadfx("misc/aircraft_light_wingtip_red"); + level._effect["ac130_light_white_blink"] = loadfx("misc/aircraft_light_white_blink"); + level._effect["ac130_light_red_blink"] = loadfx("misc/aircraft_light_red_blink"); + level._effect["ac130_engineeffect"] = loadfx("fire/jet_engine_ac130"); + level._effect["coop_muzzleflash_105mm"] = loadfx("muzzleflashes/ac130_105mm"); + level._effect["coop_muzzleflash_40mm"] = loadfx("muzzleflashes/ac130_40mm"); + level.radioforcedtransmissionqueue = []; + level.enemieskilledintimewindow = 0; + level.lastradiotransmission = gettime(); + level.color["white"] = (1,1,1); + level.color["red"] = (1,0,0); + level.color["blue"] = (0.1,0.3,1); + level.cosine = []; + level.cosine["45"] = cos(45); + level.cosine["5"] = cos(5); + level.huditem = []; + level.physicssphereradius["ac130_25mm_mp"] = 60; + level.physicssphereradius["ac130_40mm_mp"] = 600; + level.physicssphereradius["ac130_105mm_mp"] = 1000; + level.physicssphereforce["ac130_25mm_mp"] = 0; + level.physicssphereforce["ac130_40mm_mp"] = 3; + level.physicssphereforce["ac130_105mm_mp"] = 6; + level.weaponreloadtime["ac130_25mm_mp"] = 1.5; + level.weaponreloadtime["ac130_40mm_mp"] = 3; + level.weaponreloadtime["ac130_105mm_mp"] = 5; + level.ac130_speed["move"] = 250; + level.ac130_speed["rotate"] = 70; + common_scripts\utility::flag_init("allow_context_sensative_dialog"); + common_scripts\utility::flag_set("allow_context_sensative_dialog"); + var_00 = getentarray("minimap_corner","targetname"); + var_01 = (0,0,0); + if(var_00.size) + { + var_01 = maps\mp\gametypes\_spawnlogic::findboxcenter(var_00[0].origin,var_00[1].origin); + } + + level.ac130 = spawn("script_model",var_01); + level.ac130 setmodel("c130_zoomrig"); + level.ac130.angles = (0,115,0); + level.ac130.owner = undefined; + level.ac130.thermal_vision = "ac130_thermal_mp"; + level.ac130.enhanced_vision = "ac130_enhanced_mp"; + level.ac130.targetname = "ac130rig_script_model"; + level.ac130 hide(); + level.ac130inuse = 0; + init_sounds(); + thread rotateplane("on"); + thread ac130_spawn(); + thread onplayerconnect(); + thread handleincomingstinger(); + thread handleincomingsam(); + level.killstreakfuncs["ac130"] = ::tryuseac130; + level.ac130queue = []; +} + +//Function Number: 2 +tryuseac130(param_00) +{ + if(isdefined(level.civilianjetflyby)) + { + self iprintlnbold(&"MP_CIVILIAN_AIR_TRAFFIC"); + return 0; + } + + if(isdefined(level.ac130player) || level.ac130inuse) + { + self iprintlnbold(&"MP_AIR_SPACE_TOO_CROWDED"); + return 0; + } + + if(maps\mp\_utility::isusingremote()) + { + return 0; + } + + if(maps\mp\_utility::isairdenied()) + { + return 0; + } + + if(maps\mp\_utility::isemped()) + { + return 0; + } + + maps\mp\_utility::setusingremote("ac130"); + var_01 = maps\mp\killstreaks\_killstreaks::initridekillstreak(); + if(var_01 != "success") + { + if(var_01 != "disconnect") + { + maps\mp\_utility::clearusingremote(); + } + + return 0; + } + + var_01 = setac130player(self); + if(isdefined(var_01) && var_01) + { + maps\mp\_matchdata::logkillstreakevent("ac130",self.origin); + level.ac130.planemodel.crashed = undefined; + level.ac130inuse = 1; + } + else + { + maps\mp\_utility::clearusingremote(); + } + + return isdefined(var_01) && var_01; +} + +//Function Number: 3 +init_sounds() +{ + setac130ambience("ambient_ac130_int1"); + level.scr_sound["foo"]["bar"] = ""; + add_context_sensative_dialog("ai","in_sight",0,"ac130_fco_moreenemy"); + add_context_sensative_dialog("ai","in_sight",1,"ac130_fco_getthatguy"); + add_context_sensative_dialog("ai","in_sight",2,"ac130_fco_guymovin"); + add_context_sensative_dialog("ai","in_sight",3,"ac130_fco_getperson"); + add_context_sensative_dialog("ai","in_sight",4,"ac130_fco_guyrunnin"); + add_context_sensative_dialog("ai","in_sight",5,"ac130_fco_gotarunner"); + add_context_sensative_dialog("ai","in_sight",6,"ac130_fco_backonthose"); + add_context_sensative_dialog("ai","in_sight",7,"ac130_fco_gonnagethim"); + add_context_sensative_dialog("ai","in_sight",8,"ac130_fco_personnelthere"); + add_context_sensative_dialog("ai","in_sight",9,"ac130_fco_nailthoseguys"); + add_context_sensative_dialog("ai","in_sight",11,"ac130_fco_lightemup"); + add_context_sensative_dialog("ai","in_sight",12,"ac130_fco_takehimout"); + add_context_sensative_dialog("ai","in_sight",14,"ac130_plt_yeahcleared"); + add_context_sensative_dialog("ai","in_sight",15,"ac130_plt_copysmoke"); + add_context_sensative_dialog("ai","in_sight",16,"ac130_fco_rightthere"); + add_context_sensative_dialog("ai","in_sight",17,"ac130_fco_tracking"); + add_context_sensative_dialog("ai","wounded_crawl",0,"ac130_fco_movingagain"); + add_context_sensative_timeout("ai","wounded_crawl",undefined,6); + add_context_sensative_dialog("ai","wounded_pain",0,"ac130_fco_doveonground"); + add_context_sensative_dialog("ai","wounded_pain",1,"ac130_fco_knockedwind"); + add_context_sensative_dialog("ai","wounded_pain",2,"ac130_fco_downstillmoving"); + add_context_sensative_dialog("ai","wounded_pain",3,"ac130_fco_gettinbackup"); + add_context_sensative_dialog("ai","wounded_pain",4,"ac130_fco_yepstillmoving"); + add_context_sensative_dialog("ai","wounded_pain",5,"ac130_fco_stillmoving"); + add_context_sensative_timeout("ai","wounded_pain",undefined,12); + add_context_sensative_dialog("weapons","105mm_ready",0,"ac130_gnr_gunready1"); + add_context_sensative_dialog("weapons","105mm_fired",0,"ac130_gnr_shot1"); + add_context_sensative_dialog("plane","rolling_in",0,"ac130_plt_rollinin"); + add_context_sensative_dialog("explosion","secondary",0,"ac130_nav_secondaries1"); + add_context_sensative_dialog("explosion","secondary",1,"ac130_tvo_directsecondary1"); + add_context_sensative_dialog("explosion","secondary",1,"ac130_tvo_directsecondary2"); + add_context_sensative_timeout("explosion","secondary",undefined,7); + add_context_sensative_dialog("kill","single",0,"ac130_plt_gottahurt"); + add_context_sensative_dialog("kill","single",1,"ac130_fco_iseepieces"); + add_context_sensative_dialog("kill","single",2,"ac130_fco_oopsiedaisy"); + add_context_sensative_dialog("kill","single",3,"ac130_fco_goodkill"); + add_context_sensative_dialog("kill","single",4,"ac130_fco_yougothim"); + add_context_sensative_dialog("kill","single",5,"ac130_fco_yougothim2"); + add_context_sensative_dialog("kill","single",6,"ac130_fco_thatsahit"); + add_context_sensative_dialog("kill","single",7,"ac130_fco_directhit"); + add_context_sensative_dialog("kill","single",8,"ac130_fco_rightontarget"); + add_context_sensative_dialog("kill","single",9,"ac130_fco_okyougothim"); + add_context_sensative_dialog("kill","single",10,"ac130_fco_within2feet"); + add_context_sensative_dialog("kill","small_group",0,"ac130_fco_nice"); + add_context_sensative_dialog("kill","small_group",1,"ac130_fco_directhits"); + add_context_sensative_dialog("kill","small_group",2,"ac130_fco_iseepieces"); + add_context_sensative_dialog("kill","small_group",3,"ac130_fco_goodkill"); + add_context_sensative_dialog("kill","small_group",4,"ac130_fco_yougothim"); + add_context_sensative_dialog("kill","small_group",5,"ac130_fco_yougothim2"); + add_context_sensative_dialog("kill","small_group",6,"ac130_fco_thatsahit"); + add_context_sensative_dialog("kill","small_group",7,"ac130_fco_directhit"); + add_context_sensative_dialog("kill","small_group",8,"ac130_fco_rightontarget"); + add_context_sensative_dialog("kill","small_group",9,"ac130_fco_okyougothim"); + add_context_sensative_dialog("misc","action",0,"ac130_plt_scanrange"); + add_context_sensative_timeout("misc","action",0,70); + add_context_sensative_dialog("misc","action",1,"ac130_plt_cleanup"); + add_context_sensative_timeout("misc","action",1,80); + add_context_sensative_dialog("misc","action",2,"ac130_plt_targetreset"); + add_context_sensative_timeout("misc","action",2,55); + add_context_sensative_dialog("misc","action",3,"ac130_plt_azimuthsweep"); + add_context_sensative_timeout("misc","action",3,100); +} + +//Function Number: 4 +add_context_sensative_dialog(param_00,param_01,param_02,param_03) +{ + var_04 = maps\mp\gametypes\_teams::getteamvoiceprefix("allies") + param_03; + var_04 = maps\mp\gametypes\_teams::getteamvoiceprefix("axis") + param_03; + if(!isdefined(level.scr_sound[param_00]) || !isdefined(level.scr_sound[param_00][param_01]) || !isdefined(level.scr_sound[param_00][param_01][param_02])) + { + level.scr_sound[param_00][param_01][param_02] = spawnstruct(); + level.scr_sound[param_00][param_01][param_02].played = 0; + level.scr_sound[param_00][param_01][param_02].sounds = []; + } + + var_05 = level.scr_sound[param_00][param_01][param_02].sounds.size; + level.scr_sound[param_00][param_01][param_02].sounds[var_05] = param_03; +} + +//Function Number: 5 +add_context_sensative_timeout(param_00,param_01,param_02,param_03) +{ + if(!isdefined(level.context_sensative_dialog_timeouts)) + { + level.context_sensative_dialog_timeouts = []; + } + + var_04 = 0; + if(!isdefined(level.context_sensative_dialog_timeouts[param_00])) + { + var_04 = 1; + } + else if(!isdefined(level.context_sensative_dialog_timeouts[param_00][param_01])) + { + var_04 = 1; + } + + if(var_04) + { + level.context_sensative_dialog_timeouts[param_00][param_01] = spawnstruct(); + } + + if(isdefined(param_02)) + { + level.context_sensative_dialog_timeouts[param_00][param_01].groups = []; + level.context_sensative_dialog_timeouts[param_00][param_01].groups[string(param_02)] = spawnstruct(); + level.context_sensative_dialog_timeouts[param_00][param_01].groups[string(param_02)].v["timeoutDuration"] = param_03 * 1000; + level.context_sensative_dialog_timeouts[param_00][param_01].groups[string(param_02)].v["lastPlayed"] = param_03 * -1000; + return; + } + + level.context_sensative_dialog_timeouts[param_00][param_01].v["timeoutDuration"] = param_03 * 1000; + level.context_sensative_dialog_timeouts[param_00][param_01].v["lastPlayed"] = param_03 * -1000; +} + +//Function Number: 6 +play_sound_on_entity(param_00) +{ + maps\mp\_utility::play_sound_on_tag(param_00); +} + +//Function Number: 7 +within_fov(param_00,param_01,param_02,param_03) +{ + var_04 = vectornormalize(param_02 - param_00); + var_05 = anglestoforward(param_01); + var_06 = vectordot(var_05,var_04); + return var_06 >= param_03; +} + +//Function Number: 8 +array_remove_nokeys(param_00,param_01) +{ + var_02 = []; + for(var_03 = 0;var_03 < param_00.size;var_03++) + { + if(param_00[var_03] != param_01) + { + var_02[var_02.size] = param_00[var_03]; + } + } + + return var_02; +} + +//Function Number: 9 +array_remove_index(param_00,param_01) +{ + var_02 = []; + var_03 = getarraykeys(param_00); + for(var_04 = var_03.size - 1;var_04 >= 0;var_04--) + { + if(var_03[var_04] != param_01) + { + var_02[var_02.size] = param_00[var_03[var_04]]; + } + } + + return var_02; +} + +//Function Number: 10 +string(param_00) +{ + return "" + param_00; +} + +//Function Number: 11 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_00 thread onplayerspawned(); + } +} + +//Function Number: 12 +onplayerspawned() +{ + self endon("disconnect"); + self waittill("spawned_player"); +} + +//Function Number: 13 +deleteonac130playerremoved() +{ + level waittill("ac130player_removed"); + self delete(); +} + +//Function Number: 14 +setac130player(param_00) +{ + self endon("ac130player_removed"); + if(isdefined(level.ac130player)) + { + return 0; + } + + level.ac130player = param_00; + level.ac130.owner = param_00; + level.ac130.planemodel show(); + level.ac130.planemodel thread playac130effects(); + level.ac130.incomingmissile = 0; + level.ac130.planemodel playloopsound("veh_ac130_ext_dist"); + level.ac130.planemodel thread damagetracker(); + var_01 = spawnplane(param_00,"script_model",level.ac130.planemodel.origin,"compass_objpoint_ac130_friendly","compass_objpoint_ac130_enemy"); + var_01 notsolid(); + var_01 linkto(level.ac130,"tag_player",(0,80,32),(0,-90,0)); + var_01 thread deleteonac130playerremoved(); + param_00 startac130(); + param_00 openmenu("ac130timer"); + level.ac130.numflares = level.ac130_num_flares; + thread maps\mp\_utility::teamplayercardsplash("used_ac130",param_00); + param_00 thread waitsetthermal(1); + param_00 thread maps\mp\_utility::reinitializethermal(level.ac130.planemodel); + if(getdvarint("camera_thirdPerson")) + { + param_00 maps\mp\_utility::setthirdpersondof(0); + } + + param_00 maps\mp\_utility::_giveweapon("ac130_105mm_mp"); + param_00 maps\mp\_utility::_giveweapon("ac130_40mm_mp"); + param_00 maps\mp\_utility::_giveweapon("ac130_25mm_mp"); + param_00 switchtoweapon("ac130_105mm_mp"); + param_00 setplayerdata("ac130Ammo105mm",param_00 getweaponammoclip("ac130_105mm_mp")); + param_00 setplayerdata("ac130Ammo40mm",param_00 getweaponammoclip("ac130_40mm_mp")); + param_00 setplayerdata("ac130Ammo25mm",param_00 getweaponammoclip("ac130_25mm_mp")); + param_00 thread overlay(param_00); + param_00 thread attachplayer(param_00); + param_00 thread changeweapons(); + param_00 thread weaponfiredthread(); + param_00 thread context_sensative_dialog(); + param_00 thread shotfired(); + param_00 thread clouds(); + param_00 thread removeac130playeraftertime(level.ac130_use_duration * param_00.killstreakscaler); + param_00 thread removeac130playerondisconnect(); + param_00 thread removeac130playeronchangeteams(); + param_00 thread removeac130playeronspectate(); + param_00 thread removeac130playeroncrash(); + param_00 thread removeac130playerongamecleanup(); + thread ac130_altscene(); + return 1; +} + +//Function Number: 15 +waitsetthermal(param_00) +{ + self endon("disconnect"); + level endon("ac130player_removed"); + wait param_00; + self visionsetthermalforplayer(game["thermal_vision"],0); + self thermalvisionfofoverlayon(); + thread thermalvision(); +} + +//Function Number: 16 +playac130effects() +{ + wait 0.05; + playfxontag(level._effect["ac130_light_red_blink"],self,"tag_light_belly"); + playfxontag(level._effect["ac130_engineeffect"],self,"tag_body"); + wait 0.5; + playfxontag(level._effect["ac130_light_white_blink"],self,"tag_light_tail"); + playfxontag(level._effect["ac130_light_red"],self,"tag_light_top"); +} + +//Function Number: 17 +ac130_altscene() +{ + foreach(var_01 in level.players) + { + if(var_01 != level.ac130player && var_01.team == level.ac130player.team) + { + var_01 thread maps\mp\_utility::setaltsceneobj(level.ac130.cameramodel,"tag_origin",20); + } + } +} + +//Function Number: 18 +removeac130playerongameend() +{ + self endon("ac130player_removed"); + level waittill("game_ended"); + level thread removeac130player(self,0); +} + +//Function Number: 19 +removeac130playerongamecleanup() +{ + self endon("ac130player_removed"); + level waittill("game_cleanup"); + level thread removeac130player(self,0); +} + +//Function Number: 20 +removeac130playerondeath() +{ + self endon("ac130player_removed"); + self waittill("death"); + level thread removeac130player(self,0); +} + +//Function Number: 21 +removeac130playeroncrash() +{ + self endon("ac130player_removed"); + level.ac130.planemodel waittill("crashing"); + level thread removeac130player(self,0); +} + +//Function Number: 22 +removeac130playerondisconnect() +{ + self endon("ac130player_removed"); + self waittill("disconnect"); + level thread removeac130player(self,1); +} + +//Function Number: 23 +removeac130playeronchangeteams() +{ + self endon("ac130player_removed"); + self waittill("joined_team"); + level thread removeac130player(self,0); +} + +//Function Number: 24 +removeac130playeronspectate() +{ + self endon("ac130player_removed"); + common_scripts\utility::waittill_any("joined_spectators","spawned"); + level thread removeac130player(self,0); +} + +//Function Number: 25 +removeac130playeraftertime(param_00) +{ + self endon("ac130player_removed"); + var_01 = param_00; + setdvar("ui_ac130usetime",var_01); + maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause(var_01); + level thread removeac130player(self,0); +} + +//Function Number: 26 +removeac130player(param_00,param_01) +{ + param_00 notify("ac130player_removed"); + level notify("ac130player_removed"); + level.ac130.cameramodel notify("death"); + waittillframeend; + if(!param_01) + { + param_00 maps\mp\_utility::clearusingremote(); + param_00 stoplocalsound("missile_incoming"); + param_00 show(); + param_00 unlink(); + param_00 thermalvisionoff(); + param_00 thermalvisionfofoverlayoff(); + param_00 visionsetthermalforplayer(level.ac130.thermal_vision,0); + param_00.lastvisionsetthermal = level.ac130.thermal_vision; + param_00 setblurforplayer(0,0); + param_00 stopac130(); + if(getdvarint("camera_thirdPerson")) + { + param_00 maps\mp\_utility::setthirdpersondof(1); + } + + var_02 = maps\mp\killstreaks\_killstreaks::getkillstreakweapon("ac130"); + param_00 takeweapon(var_02); + param_00 takeweapon("ac130_105mm_mp"); + param_00 takeweapon("ac130_40mm_mp"); + param_00 takeweapon("ac130_25mm_mp"); + if(isdefined(param_00.darkscreenoverlay)) + { + param_00.darkscreenoverlay destroy(); + } + + var_03 = getarraykeys(level.huditem); + foreach(var_05 in var_03) + { + level.huditem[var_05] destroy(); + level.huditem[var_05] = undefined; + } + } + + wait 0.5; + level.ac130.planemodel playsound("veh_ac130_ext_dist_fade"); + wait 0.5; + level.ac130player = undefined; + level.ac130.planemodel hide(); + level.ac130.planemodel stoploopsound(); + if(isdefined(level.ac130.planemodel.crashed)) + { + level.ac130inuse = 0; + return; + } + + var_07 = spawn("script_model",level.ac130.planemodel gettagorigin("tag_origin")); + var_07.angles = level.ac130.planemodel.angles; + var_07 setmodel("vehicle_ac130_coop"); + var_08 = var_07.origin + anglestoright(var_07.angles) * 20000; + var_07 thread playac130effects(); + var_07 moveto(var_08,40,0,0); + var_07 thread deployflares(1); + wait 5; + var_07 thread deployflares(1); + wait 5; + var_07 thread deployflares(1); + level.ac130inuse = 0; + wait 30; + var_07 delete(); +} + +//Function Number: 27 +damagetracker() +{ + self endon("death"); + self endon("crashing"); + level endon("game_ended"); + level endon("ac130player_removed"); + self.health = 999999; + self.maxhealth = 1000; + self.damagetaken = 0; + for(;;) + { + self waittill("damage",var_00,var_01,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09); + if(isdefined(level.ac130player) && level.teambased && isplayer(var_01) && var_01.team == level.ac130player.team && !isdefined(level.nukedetonated)) + { + continue; + } + + if(var_04 == "MOD_RIFLE_BULLET" || var_04 == "MOD_PISTOL_BULLET" || var_04 == "MOD_EXPLOSIVE_BULLET") + { + continue; + } + + self.wasdamaged = 1; + var_0A = var_00; + if(isplayer(var_01)) + { + var_01 maps\mp\gametypes\_damagefeedback::updatedamagefeedback("ac130"); + } + + if(isdefined(var_01.owner) && isplayer(var_01.owner)) + { + var_01.owner maps\mp\gametypes\_damagefeedback::updatedamagefeedback("ac130"); + } + + self.damagetaken = self.damagetaken + var_0A; + if(self.damagetaken >= self.maxhealth) + { + if(isplayer(var_01)) + { + thread maps\mp\gametypes\_missions::vehiclekilled(level.ac130player,self,undefined,var_01,var_00,var_04,var_09); + thread maps\mp\_utility::teamplayercardsplash("callout_destroyed_ac130",var_01); + var_01 thread maps\mp\gametypes\_rank::giverankxp("kill",400,var_09,var_04); + var_01 notify("destroyed_killstreak"); + } + + level thread crashplane(10); + } + } +} + +//Function Number: 28 +ac130_spawn() +{ + wait 0.05; + var_00 = spawn("script_model",level.ac130 gettagorigin("tag_player")); + var_00 setmodel("vehicle_ac130_coop"); + var_00.targetname = "vehicle_ac130_coop"; + var_00 setcandamage(1); + var_00.maxhealth = 1000; + var_00.health = var_00.maxhealth; + var_00 linkto(level.ac130,"tag_player",(0,80,32),(-25,0,0)); + level.ac130.planemodel = var_00; + level.ac130.planemodel hide(); + var_01 = spawn("script_model",level.ac130 gettagorigin("tag_player")); + var_01 setmodel("tag_origin"); + var_01 hide(); + var_01.targetname = "ac130CameraModel"; + var_01 linkto(level.ac130,"tag_player",(0,0,32),(-25,0,0)); + level.ac130.cameramodel = var_01; + level.ac130player = level.players[0]; +} + +//Function Number: 29 +overlay(param_00) +{ + level.huditem = []; + level.huditem["thermal_vision"] = newclienthudelem(param_00); + level.huditem["thermal_vision"].x = 200; + level.huditem["thermal_vision"].y = 0; + level.huditem["thermal_vision"].alignx = "left"; + level.huditem["thermal_vision"].aligny = "top"; + level.huditem["thermal_vision"].horzalign = "left"; + level.huditem["thermal_vision"].vertalign = "top"; + level.huditem["thermal_vision"].fontscale = 2.5; + level.huditem["thermal_vision"] settext(&"AC130_HUD_FLIR"); + level.huditem["thermal_vision"].alpha = 1; + level.huditem["enhanced_vision"] = newclienthudelem(param_00); + level.huditem["enhanced_vision"].x = -200; + level.huditem["enhanced_vision"].y = 0; + level.huditem["enhanced_vision"].alignx = "right"; + level.huditem["enhanced_vision"].aligny = "top"; + level.huditem["enhanced_vision"].horzalign = "right"; + level.huditem["enhanced_vision"].vertalign = "top"; + level.huditem["enhanced_vision"].fontscale = 2.5; + level.huditem["enhanced_vision"] settext(&"AC130_HUD_OPTICS"); + level.huditem["enhanced_vision"].alpha = 1; + param_00 thread overlay_coords(); + param_00 setblurforplayer(1.2,0); +} + +//Function Number: 30 +overlay_coords() +{ + self endon("ac130player_removed"); + level.huditem["coord1_posx"] = newclienthudelem(self); + level.huditem["coord1_posx"].x = 60; + level.huditem["coord1_posx"].y = 100; + level.huditem["coord1_posx"].alignx = "right"; + level.huditem["coord1_posx"].aligny = "middle"; + level.huditem["coord1_posx"].horzalign = "center"; + level.huditem["coord1_posx"].vertalign = "middle"; + level.huditem["coord1_posx"].fontscale = 1; + level.huditem["coord1_posx"].alpha = 1; + level.huditem["coord1_posy"] = newclienthudelem(self); + level.huditem["coord1_posy"].x = 100; + level.huditem["coord1_posy"].y = 100; + level.huditem["coord1_posy"].alignx = "right"; + level.huditem["coord1_posy"].aligny = "middle"; + level.huditem["coord1_posy"].horzalign = "center"; + level.huditem["coord1_posy"].vertalign = "middle"; + level.huditem["coord1_posy"].fontscale = 1; + level.huditem["coord1_posy"].alpha = 1; + level.huditem["coord1_posz"] = newclienthudelem(self); + level.huditem["coord1_posz"].x = 140; + level.huditem["coord1_posz"].y = 100; + level.huditem["coord1_posz"].alignx = "right"; + level.huditem["coord1_posz"].aligny = "middle"; + level.huditem["coord1_posz"].horzalign = "center"; + level.huditem["coord1_posz"].vertalign = "middle"; + level.huditem["coord1_posz"].fontscale = 1; + level.huditem["coord1_posz"].alpha = 1; + level.huditem["coord2_posx"] = newclienthudelem(self); + level.huditem["coord2_posx"].x = 60; + level.huditem["coord2_posx"].y = 110; + level.huditem["coord2_posx"].alignx = "right"; + level.huditem["coord2_posx"].aligny = "middle"; + level.huditem["coord2_posx"].horzalign = "center"; + level.huditem["coord2_posx"].vertalign = "middle"; + level.huditem["coord2_posx"].fontscale = 1; + level.huditem["coord2_posx"].alpha = 1; + level.huditem["coord2_posy"] = newclienthudelem(self); + level.huditem["coord2_posy"].x = 100; + level.huditem["coord2_posy"].y = 110; + level.huditem["coord2_posy"].alignx = "right"; + level.huditem["coord2_posy"].aligny = "middle"; + level.huditem["coord2_posy"].horzalign = "center"; + level.huditem["coord2_posy"].vertalign = "middle"; + level.huditem["coord2_posy"].fontscale = 1; + level.huditem["coord2_posy"].alpha = 1; + level.huditem["coord2_posz"] = newclienthudelem(self); + level.huditem["coord2_posz"].x = 140; + level.huditem["coord2_posz"].y = 110; + level.huditem["coord2_posz"].alignx = "right"; + level.huditem["coord2_posz"].aligny = "middle"; + level.huditem["coord2_posz"].horzalign = "center"; + level.huditem["coord2_posz"].vertalign = "middle"; + level.huditem["coord2_posz"].fontscale = 1; + level.huditem["coord2_posz"].alpha = 1; + level.huditem["coord3_posx"] = newclienthudelem(self); + level.huditem["coord3_posx"].x = -120; + level.huditem["coord3_posx"].y = 100; + level.huditem["coord3_posx"].alignx = "right"; + level.huditem["coord3_posx"].aligny = "middle"; + level.huditem["coord3_posx"].horzalign = "center"; + level.huditem["coord3_posx"].vertalign = "middle"; + level.huditem["coord3_posx"].fontscale = 1; + level.huditem["coord3_posx"].alpha = 1; + level.huditem["coord3_posy"] = newclienthudelem(self); + level.huditem["coord3_posy"].x = -80; + level.huditem["coord3_posy"].y = 100; + level.huditem["coord3_posy"].alignx = "right"; + level.huditem["coord3_posy"].aligny = "middle"; + level.huditem["coord3_posy"].horzalign = "center"; + level.huditem["coord3_posy"].vertalign = "middle"; + level.huditem["coord3_posy"].fontscale = 1; + level.huditem["coord3_posy"].alpha = 1; + level.huditem["coord3_posz"] = newclienthudelem(self); + level.huditem["coord3_posz"].x = -40; + level.huditem["coord3_posz"].y = 100; + level.huditem["coord3_posz"].alignx = "right"; + level.huditem["coord3_posz"].aligny = "middle"; + level.huditem["coord3_posz"].horzalign = "center"; + level.huditem["coord3_posz"].vertalign = "middle"; + level.huditem["coord3_posz"].fontscale = 1; + level.huditem["coord3_posz"].alpha = 1; + wait 0.05; + thread updateaimingcoords(); + for(;;) + { + level.huditem["coord1_posx"] setvalue(abs(level.ac130.planemodel.origin[0])); + level.huditem["coord1_posy"] setvalue(abs(level.ac130.planemodel.origin[1])); + level.huditem["coord1_posz"] setvalue(abs(level.ac130.planemodel.origin[2])); + level.huditem["coord2_posx"] setvalue(abs(self.origin[0])); + level.huditem["coord2_posy"] setvalue(abs(self.origin[1])); + level.huditem["coord2_posz"] setvalue(abs(self.origin[2])); + wait 0.5; + } +} + +//Function Number: 31 +updateaimingcoords() +{ + self endon("ac130player_removed"); + for(;;) + { + var_00 = self geteye(); + var_01 = self getplayerangles(); + var_02 = anglestoforward(var_01); + var_03 = var_00 + var_02 * 15000; + var_04 = physicstrace(var_00,var_03); + level.huditem["coord3_posx"] setvalue(abs(var_04[0])); + level.huditem["coord3_posy"] setvalue(abs(var_04[1])); + level.huditem["coord3_posz"] setvalue(abs(var_04[2])); + wait 0.05; + } +} + +//Function Number: 32 +ac130shellshock() +{ + self endon("ac130player_removed"); + level endon("post_effects_disabled"); + var_00 = 5; + for(;;) + { + self shellshock("ac130",var_00); + wait var_00; + } +} + +//Function Number: 33 +rotateplane(param_00) +{ + level notify("stop_rotatePlane_thread"); + level endon("stop_rotatePlane_thread"); + if(param_00 == "on") + { + var_01 = 10; + var_02 = level.ac130_speed["rotate"] / 360 * var_01; + level.ac130 rotateyaw(level.ac130.angles[2] + var_01,var_02,var_02,0); + for(;;) + { + level.ac130 rotateyaw(360,level.ac130_speed["rotate"]); + wait level.ac130_speed["rotate"]; + } + + return; + } + + if(param_00 == "off") + { + var_03 = 10; + var_02 = level.ac130_speed["rotate"] / 360 * var_03; + level.ac130 rotateyaw(level.ac130.angles[2] + var_03,var_02,0,var_02); + } +} + +//Function Number: 34 +attachplayer(param_00) +{ + self playerlinkweaponviewtodelta(level.ac130,"tag_player",1,35,35,35,35); + self setplayerangles(level.ac130 gettagangles("tag_player")); +} + +//Function Number: 35 +changeweapons() +{ + self endon("ac130player_removed"); + wait 0.05; + self enableweapons(); + for(;;) + { + self waittill("weapon_change",var_00); + thread play_sound_on_entity("ac130_weapon_switch"); + } +} + +//Function Number: 36 +weaponfiredthread() +{ + self endon("ac130player_removed"); + for(;;) + { + self waittill("weapon_fired"); + var_00 = self getcurrentweapon(); + switch(var_00) + { + case "ac130_105mm_mp": + thread gun_fired_and_ready_105mm(); + earthquake(0.2,1,level.ac130.planemodel.origin,1000); + self setplayerdata("ac130Ammo105mm",self getweaponammoclip(var_00)); + break; + + case "ac130_40mm_mp": + earthquake(0.1,0.5,level.ac130.planemodel.origin,1000); + self setplayerdata("ac130Ammo40mm",self getweaponammoclip(var_00)); + break; + + case "ac130_25mm_mp": + self setplayerdata("ac130Ammo25mm",self getweaponammoclip(var_00)); + break; + } + + if(self getweaponammoclip(var_00)) + { + continue; + } + + thread weaponreload(var_00); + } +} + +//Function Number: 37 +weaponreload(param_00) +{ + self endon("ac130player_removed"); + wait level.weaponreloadtime[param_00]; + self setweaponammoclip(param_00,9999); + switch(param_00) + { + case "ac130_105mm_mp": + self setplayerdata("ac130Ammo105mm",self getweaponammoclip(param_00)); + break; + + case "ac130_40mm_mp": + self setplayerdata("ac130Ammo40mm",self getweaponammoclip(param_00)); + break; + + case "ac130_25mm_mp": + self setplayerdata("ac130Ammo25mm",self getweaponammoclip(param_00)); + break; + } + + if(self getcurrentweapon() == param_00) + { + self takeweapon(param_00); + maps\mp\_utility::_giveweapon(param_00); + self switchtoweapon(param_00); + } +} + +//Function Number: 38 +thermalvision() +{ + self endon("ac130player_removed"); + if(maps\mp\_utility::getintproperty("ac130_thermal_enabled",1) == 0) + { + return; + } + + var_00 = 0; + self thermalvisionoff(); + self visionsetthermalforplayer(level.ac130.enhanced_vision,1); + self.lastvisionsetthermal = level.ac130.enhanced_vision; + level.huditem["thermal_vision"].alpha = 0.25; + level.huditem["enhanced_vision"].alpha = 1; + self notifyonplayercommand("switch thermal","+usereload"); + self notifyonplayercommand("switch thermal","+activate"); + for(;;) + { + self waittill("switch thermal"); + if(!var_00) + { + self thermalvisionon(); + self visionsetthermalforplayer(level.ac130.thermal_vision,0.62); + self.lastvisionsetthermal = level.ac130.thermal_vision; + level.huditem["thermal_vision"].alpha = 1; + level.huditem["enhanced_vision"].alpha = 0.25; + } + else + { + self thermalvisionoff(); + self visionsetthermalforplayer(level.ac130.enhanced_vision,0.51); + self.lastvisionsetthermal = level.ac130.enhanced_vision; + level.huditem["thermal_vision"].alpha = 0.25; + level.huditem["enhanced_vision"].alpha = 1; + } + + var_00 = !var_00; + } +} + +//Function Number: 39 +clouds() +{ + self endon("ac130player_removed"); + wait 6; + clouds_create(); + for(;;) + { + wait randomfloatrange(40,80); + clouds_create(); + } +} + +//Function Number: 40 +clouds_create() +{ + if(isdefined(level.playerweapon) && issubstr(tolower(level.playerweapon),"25")) + { + return; + } + + playfxontagforclients(level._effect["cloud"],level.ac130,"tag_player",level.ac130player); +} + +//Function Number: 41 +gun_fired_and_ready_105mm() +{ + self endon("ac130player_removed"); + level notify("gun_fired_and_ready_105mm"); + level endon("gun_fired_and_ready_105mm"); + wait 0.5; + if(randomint(2) == 0) + { + thread context_sensative_dialog_play_random_group_sound("weapons","105mm_fired"); + } + + wait 5; + thread context_sensative_dialog_play_random_group_sound("weapons","105mm_ready"); +} + +//Function Number: 42 +shotfired() +{ + self endon("ac130player_removed"); + for(;;) + { + self waittill("projectile_impact",var_00,var_01,var_02); + if(issubstr(tolower(var_00),"105")) + { + earthquake(0.4,1,var_01,3500); + thread shotfireddarkscreenoverlay(); + } + else if(issubstr(tolower(var_00),"40")) + { + earthquake(0.2,0.5,var_01,2000); + } + + if(maps\mp\_utility::getintproperty("ac130_ragdoll_deaths",0)) + { + thread shotfiredphysicssphere(var_01,var_00); + } + + wait 0.05; + } +} + +//Function Number: 43 +shotfiredphysicssphere(param_00,param_01) +{ + wait 0.1; + physicsexplosionsphere(param_00,level.physicssphereradius[param_01],level.physicssphereradius[param_01] / 2,level.physicssphereforce[param_01]); +} + +//Function Number: 44 +shotfireddarkscreenoverlay() +{ + self endon("ac130player_removed"); + self notify("darkScreenOverlay"); + self endon("darkScreenOverlay"); + if(!isdefined(self.darkscreenoverlay)) + { + self.darkscreenoverlay = newclienthudelem(self); + self.darkscreenoverlay.x = 0; + self.darkscreenoverlay.y = 0; + self.darkscreenoverlay.alignx = "left"; + self.darkscreenoverlay.aligny = "top"; + self.darkscreenoverlay.horzalign = "fullscreen"; + self.darkscreenoverlay.vertalign = "fullscreen"; + self.darkscreenoverlay setshader("black",640,480); + self.darkscreenoverlay.sort = -10; + self.darkscreenoverlay.alpha = 0; + } + + self.darkscreenoverlay.alpha = 0; + self.darkscreenoverlay fadeovertime(0.2); + self.darkscreenoverlay.alpha = 0.6; + wait 0.4; + self.darkscreenoverlay fadeovertime(0.8); + self.darkscreenoverlay.alpha = 0; +} + +//Function Number: 45 +add_beacon_effect() +{ + self endon("death"); + var_00 = 0.75; + wait randomfloat(3); + for(;;) + { + if(level.ac130player) + { + playfxontagforclients(level._effect["beacon"],self,"j_spine4",level.ac130player); + } + + wait var_00; + } +} + +//Function Number: 46 +context_sensative_dialog() +{ + thread enemy_killed_thread(); + thread context_sensative_dialog_guy_in_sight(); + thread context_sensative_dialog_guy_crawling(); + thread context_sensative_dialog_guy_pain(); + thread context_sensative_dialog_secondary_explosion_vehicle(); + thread context_sensative_dialog_kill_thread(); + thread context_sensative_dialog_locations(); + thread context_sensative_dialog_filler(); +} + +//Function Number: 47 +context_sensative_dialog_guy_in_sight() +{ + self endon("ac130player_removed"); + for(;;) + { + if(context_sensative_dialog_guy_in_sight_check()) + { + thread context_sensative_dialog_play_random_group_sound("ai","in_sight"); + } + + wait randomfloatrange(1,3); + } +} + +//Function Number: 48 +context_sensative_dialog_guy_in_sight_check() +{ + var_00 = []; + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + if(!isdefined(var_00[var_01])) + { + continue; + } + + if(!isalive(var_00[var_01])) + { + continue; + } + + if(within_fov(level.ac130player geteye(),level.ac130player getplayerangles(),var_00[var_01].origin,level.cosine["5"])) + { + return 1; + } + + wait 0.05; + } + + return 0; +} + +//Function Number: 49 +context_sensative_dialog_guy_crawling() +{ + self endon("ac130player_removed"); + for(;;) + { + level waittill("ai_crawling",var_00); + thread context_sensative_dialog_play_random_group_sound("ai","wounded_crawl"); + } +} + +//Function Number: 50 +context_sensative_dialog_guy_pain() +{ + self endon("ac130player_removed"); + for(;;) + { + level waittill("ai_pain",var_00); + thread context_sensative_dialog_play_random_group_sound("ai","wounded_pain"); + } +} + +//Function Number: 51 +context_sensative_dialog_secondary_explosion_vehicle() +{ + self endon("ac130player_removed"); + for(;;) + { + level waittill("player_destroyed_car",var_00,var_01); + wait 1; + thread context_sensative_dialog_play_random_group_sound("explosion","secondary"); + } +} + +//Function Number: 52 +enemy_killed_thread() +{ + self endon("ac130player_removed"); + for(;;) + { + level waittill("ai_killed",var_00); + thread context_sensative_dialog_kill(var_00,level.ac130player); + } +} + +//Function Number: 53 +context_sensative_dialog_kill(param_00,param_01) +{ + if(!isdefined(param_01)) + { + return; + } + + if(!isplayer(param_01)) + { + return; + } + + level.enemieskilledintimewindow++; + level notify("enemy_killed"); +} + +//Function Number: 54 +context_sensative_dialog_kill_thread() +{ + self endon("ac130player_removed"); + var_00 = 1; + for(;;) + { + level waittill("enemy_killed"); + wait var_00; + var_01 = "kill"; + var_02 = undefined; + if(level.enemieskilledintimewindow >= 2) + { + var_02 = "small_group"; + } + else + { + var_02 = "single"; + if(randomint(3) != 1) + { + level.enemieskilledintimewindow = 0; + continue; + } + } + + level.enemieskilledintimewindow = 0; + thread context_sensative_dialog_play_random_group_sound(var_01,var_02,1); + } +} + +//Function Number: 55 +context_sensative_dialog_locations() +{ + common_scripts\utility::array_thread(getentarray("context_dialog_car","targetname"),::context_sensative_dialog_locations_add_notify_event,"car"); + common_scripts\utility::array_thread(getentarray("context_dialog_truck","targetname"),::context_sensative_dialog_locations_add_notify_event,"truck"); + common_scripts\utility::array_thread(getentarray("context_dialog_building","targetname"),::context_sensative_dialog_locations_add_notify_event,"building"); + common_scripts\utility::array_thread(getentarray("context_dialog_wall","targetname"),::context_sensative_dialog_locations_add_notify_event,"wall"); + common_scripts\utility::array_thread(getentarray("context_dialog_field","targetname"),::context_sensative_dialog_locations_add_notify_event,"field"); + common_scripts\utility::array_thread(getentarray("context_dialog_road","targetname"),::context_sensative_dialog_locations_add_notify_event,"road"); + common_scripts\utility::array_thread(getentarray("context_dialog_church","targetname"),::context_sensative_dialog_locations_add_notify_event,"church"); + common_scripts\utility::array_thread(getentarray("context_dialog_ditch","targetname"),::context_sensative_dialog_locations_add_notify_event,"ditch"); + thread context_sensative_dialog_locations_thread(); +} + +//Function Number: 56 +context_sensative_dialog_locations_thread() +{ + self endon("ac130player_removed"); + for(;;) + { + level waittill("context_location",var_00); + if(!isdefined(var_00)) + { + continue; + } + + if(!common_scripts\utility::flag("allow_context_sensative_dialog")) + { + continue; + } + + thread context_sensative_dialog_play_random_group_sound("location",var_00); + wait 5 + randomfloat(10); + } +} + +//Function Number: 57 +context_sensative_dialog_locations_add_notify_event(param_00) +{ + self endon("ac130player_removed"); + for(;;) + { + self waittill("trigger",var_01); + if(!isdefined(var_01)) + { + continue; + } + + if(!isdefined(var_01.team) || var_01.team != "axis") + { + continue; + } + + level notify("context_location",param_00); + wait 5; + } +} + +//Function Number: 58 +context_sensative_dialog_vehiclespawn(param_00) +{ + if(param_00.script_team != "axis") + { + return; + } + + thread context_sensative_dialog_vehicledeath(param_00); + param_00 endon("death"); + while(!within_fov(level.ac130player geteye(),level.ac130player getplayerangles(),param_00.origin,level.cosine["45"])) + { + wait 0.5; + } + + context_sensative_dialog_play_random_group_sound("vehicle","incoming"); +} + +//Function Number: 59 +context_sensative_dialog_vehicledeath(param_00) +{ + param_00 waittill("death"); + thread context_sensative_dialog_play_random_group_sound("vehicle","death"); +} + +//Function Number: 60 +context_sensative_dialog_filler() +{ + self endon("ac130player_removed"); + for(;;) + { + if(isdefined(level.radio_in_use) && level.radio_in_use == 1) + { + level waittill("radio_not_in_use"); + } + + var_00 = gettime(); + if(var_00 - level.lastradiotransmission >= 3000) + { + level.lastradiotransmission = var_00; + thread context_sensative_dialog_play_random_group_sound("misc","action"); + } + + wait 0.25; + } +} + +//Function Number: 61 +context_sensative_dialog_play_random_group_sound(param_00,param_01,param_02) +{ + level endon("ac130player_removed"); + if(!isdefined(param_02)) + { + param_02 = 0; + } + + if(!common_scripts\utility::flag("allow_context_sensative_dialog")) + { + if(param_02) + { + common_scripts\utility::flag_wait("allow_context_sensative_dialog"); + } + else + { + return; + } + } + + var_03 = undefined; + var_04 = randomint(level.scr_sound[param_00][param_01].size); + if(level.scr_sound[param_00][param_01][var_04].played == 1) + { + for(var_05 = 0;var_05 < level.scr_sound[param_00][param_01].size;var_05++) + { + var_04++; + if(var_04 >= level.scr_sound[param_00][param_01].size) + { + var_04 = 0; + } + + if(level.scr_sound[param_00][param_01][var_04].played == 1) + { + continue; + } + + var_03 = var_04; + break; + } + + if(!isdefined(var_03)) + { + for(var_05 = 0;var_05 < level.scr_sound[param_00][param_01].size;var_05++) + { + level.scr_sound[param_00][param_01][var_05].played = 0; + } + + var_03 = randomint(level.scr_sound[param_00][param_01].size); + } + } + else + { + var_03 = var_04; + } + + if(context_sensative_dialog_timedout(param_00,param_01,var_03)) + { + return; + } + + level.scr_sound[param_00][param_01][var_03].played = 1; + var_06 = randomint(level.scr_sound[param_00][param_01][var_03].size); + playsoundoverradio(level.scr_sound[param_00][param_01][var_03].sounds[var_06],param_02); +} + +//Function Number: 62 +context_sensative_dialog_timedout(param_00,param_01,param_02) +{ + if(!isdefined(level.context_sensative_dialog_timeouts)) + { + return 0; + } + + if(!isdefined(level.context_sensative_dialog_timeouts[param_00])) + { + return 0; + } + + if(!isdefined(level.context_sensative_dialog_timeouts[param_00][param_01])) + { + return 0; + } + + if(isdefined(level.context_sensative_dialog_timeouts[param_00][param_01].groups) && isdefined(level.context_sensative_dialog_timeouts[param_00][param_01].groups[string(param_02)])) + { + var_03 = gettime(); + if(var_03 - level.context_sensative_dialog_timeouts[param_00][param_01].groups[string(param_02)].v["lastPlayed"] < level.context_sensative_dialog_timeouts[param_00][param_01].groups[string(param_02)].v["timeoutDuration"]) + { + return 1; + } + + level.context_sensative_dialog_timeouts[param_00][param_01].groups[string(param_02)].v["lastPlayed"] = var_03; + } + else if(isdefined(level.context_sensative_dialog_timeouts[param_00][param_01].v)) + { + var_03 = gettime(); + if(var_03 - level.context_sensative_dialog_timeouts[param_00][param_01].v["lastPlayed"] < level.context_sensative_dialog_timeouts[param_00][param_01].v["timeoutDuration"]) + { + return 1; + } + + level.context_sensative_dialog_timeouts[param_00][param_01].v["lastPlayed"] = var_03; + } + + return 0; +} + +//Function Number: 63 +playsoundoverradio(param_00,param_01,param_02) +{ + if(!isdefined(level.radio_in_use)) + { + level.radio_in_use = 0; + } + + if(!isdefined(param_01)) + { + param_01 = 0; + } + + if(!isdefined(param_02)) + { + param_02 = 0; + } + + param_02 = param_02 * 1000; + var_03 = gettime(); + var_04 = 0; + var_04 = playaliasoverradio(param_00); + if(var_04) + { + return; + } + + if(!param_01) + { + return; + } + + level.radioforcedtransmissionqueue[level.radioforcedtransmissionqueue.size] = param_00; + while(!var_04) + { + if(level.radio_in_use) + { + level waittill("radio_not_in_use"); + } + + if(param_02 > 0 && gettime() - var_03 > param_02) + { + break; + } + + if(!isdefined(level.ac130player)) + { + break; + } + + var_04 = playaliasoverradio(level.radioforcedtransmissionqueue[0]); + if(!level.radio_in_use && isdefined(level.ac130player) && !var_04) + { + } + } + + level.radioforcedtransmissionqueue = array_remove_index(level.radioforcedtransmissionqueue,0); +} + +//Function Number: 64 +playaliasoverradio(param_00) +{ + if(level.radio_in_use) + { + return 0; + } + + if(!isdefined(level.ac130player)) + { + return 0; + } + + level.radio_in_use = 1; + if(self.team == "allies" || self.team == "axis") + { + param_00 = maps\mp\gametypes\_teams::getteamvoiceprefix(self.team) + param_00; + level.ac130player playlocalsound(param_00); + } + + wait 4; + level.radio_in_use = 0; + level.lastradiotransmission = gettime(); + level notify("radio_not_in_use"); + return 1; +} + +//Function Number: 65 +debug_circle(param_00,param_01,param_02,param_03,param_04,param_05) +{ + var_06 = 16; + var_07 = 360 / var_06; + var_08 = []; + for(var_09 = 0;var_09 < var_06;var_09++) + { + var_0A = var_07 * var_09; + var_0B = cos(var_0A) * param_01; + var_0C = sin(var_0A) * param_01; + var_0D = param_00[0] + var_0B; + var_0E = param_00[1] + var_0C; + var_0F = param_00[2]; + var_08[var_08.size] = (var_0D,var_0E,var_0F); + } + + if(isdefined(param_04)) + { + wait param_04; + } + + thread debug_circle_drawlines(var_08,param_02,param_03,param_05,param_00); +} + +//Function Number: 66 +debug_circle_drawlines(param_00,param_01,param_02,param_03,param_04) +{ + if(!isdefined(param_03)) + { + param_03 = 0; + } + + if(!isdefined(param_04)) + { + param_03 = 0; + } + + for(var_05 = 0;var_05 < param_00.size;var_05++) + { + var_06 = param_00[var_05]; + if(var_05 + 1 >= param_00.size) + { + var_07 = param_00[0]; + } + else + { + var_07 = param_00[var_05 + 1]; + } + + thread debug_line(var_06,var_07,param_01,param_02); + if(param_03) + { + thread debug_line(param_04,var_06,param_01,param_02); + } + } +} + +//Function Number: 67 +debug_line(param_00,param_01,param_02,param_03) +{ + if(!isdefined(param_03)) + { + param_03 = (1,1,1); + } + + for(var_04 = 0;var_04 < param_02 * 20;var_04++) + { + wait 0.05; + } +} + +//Function Number: 68 +handleincomingstinger() +{ + level endon("game_ended"); + for(;;) + { + level waittill("stinger_fired",var_00,var_01,var_02); + if(!isdefined(var_02) || var_02 != level.ac130.planemodel) + { + continue; + } + + var_01 thread stingerproximitydetonate(var_00,var_00.team); + } +} + +//Function Number: 69 +deleteaftertime(param_00) +{ + wait param_00; + self delete(); +} + +//Function Number: 70 +stingerproximitydetonate(param_00,param_01) +{ + self endon("death"); + if(isdefined(level.ac130player)) + { + level.ac130player playlocalsound("missile_incoming"); + } + + level.ac130.incomingmissile = 1; + var_02 = level.ac130.planemodel; + self missile_settargetent(var_02); + var_03 = 0; + var_04 = var_02 getpointinbounds(0,0,0); + var_05 = distance(self.origin,var_04); + var_06 = vectornormalize(var_04 - self.origin); + for(;;) + { + if(!isdefined(level.ac130player) || isdefined(level.ac130.planemodel.crashed) && level.ac130.planemodel.crashed == 1) + { + self missile_settargetpos(level.ac130.origin + (0,0,100000)); + return; + } + + var_04 = var_02 getpointinbounds(0,0,0); + var_07 = distance(self.origin,var_04); + if(var_07 < 3000 && var_02 == level.ac130.planemodel && level.ac130.numflares > 0) + { + level.ac130.numflares--; + var_08 = var_02 deployflares(); + self missile_settargetent(var_08); + var_02 = var_08; + if(isdefined(level.ac130player)) + { + level.ac130player stoplocalsound("missile_incoming"); + } + + return; + } + + if(var_0B < var_06) + { + var_09 = var_06 - var_0B * 20; + var_0A = var_0B / var_09; + if(var_0A < 1.5 && !var_04 && var_03 == level.ac130.planemodel) + { + if(isdefined(level.ac130player)) + { + level.ac130player playlocalsound("fasten_seatbelts"); + } + + var_04 = 1; + } + + var_06 = var_0B; + } + + var_08 = vectornormalize(var_05 - self.origin); + if(vectordot(var_08,var_07) < 0) + { + if(isdefined(level.ac130player)) + { + level.ac130player stoplocalsound("missile_incoming"); + if(level.ac130player.team != var_02) + { + radiusdamage(self.origin,1000,1000,1000,param_01,"MOD_EXPLOSIVE","stinger_mp"); + } + } + + self hide(); + wait 0.05; + self delete(); + } + else + { + var_07 = var_08; + } + + wait 0.05; + } +} + +//Function Number: 71 +handleincomingsam() +{ + level endon("game_ended"); + for(;;) + { + level waittill("sam_fired",var_00,var_01,var_02); + if(!isdefined(var_02) || var_02 != level.ac130.planemodel) + { + continue; + } + + level thread samproximitydetonate(var_00,var_00.team,var_01); + } +} + +//Function Number: 72 +samproximitydetonate(param_00,param_01,param_02) +{ + if(isdefined(level.ac130player)) + { + level.ac130player playlocalsound("missile_incoming"); + } + + level.ac130.incomingmissile = 1; + var_03 = level.ac130.planemodel; + var_04 = 0; + var_05 = []; + var_06 = var_03 getpointinbounds(0,0,0); + for(var_07 = 0;var_07 < param_02.size;var_07++) + { + if(isdefined(param_02[var_07])) + { + var_05[var_07] = distance(param_02[var_07].origin,var_06); + param_02[var_07].lastvectotarget = vectornormalize(var_06 - param_02[var_07].origin); + continue; + } + + var_05[var_07] = undefined; + } + + for(;;) + { + if(!isdefined(level.ac130player) || isdefined(level.ac130.planemodel.crashed) && level.ac130.planemodel.crashed == 1) + { + for(var_07 = 0;var_07 < param_02.size;var_07++) + { + if(isdefined(param_02[var_07])) + { + param_02[var_07] missile_settargetpos(level.ac130.origin + (0,0,100000)); + } + } + + return; + } + + var_06 = var_03 getpointinbounds(0,0,0); + var_08 = []; + var_07 = 0; + while(var_07 < param_02.size) + { + if(isdefined(param_02[var_07])) + { + } + + var_08++ = var_7B[var_07]; + } + + if(!isdefined(level.ac130player)) + { + return; + } + + var_08 = 0; + while(var_08 < var_7B.size) + { + if(isdefined(var_7B[var_08])) + { + if(var_7B[var_08] < 3000 && var_04 == level.ac130.planemodel && level.ac130.numflares > 0) + { + level.ac130.numflares-- = distance(param_02[var_07].origin,var_06); + var_09 = var_04 deployflares(); + for(var_0A = 0;var_0A < var_03.size;var_0A++) + { + if(isdefined(var_03[var_0A])) + { + var_03[var_0A] missile_settargetent(var_09); + } + } + + if(isdefined(level.ac130player)) + { + level.ac130player stoplocalsound("missile_incoming"); + } + + return; + } + + if(var_0A[var_09] < var_08[var_09]) + { + var_0B = var_08[var_09] - var_0A[var_09] * 20; + var_0C = var_0A[var_09] / var_0B; + if(var_0C < 1.5 && !var_07 && var_06 == level.ac130.planemodel) + { + if(isdefined(level.ac130player)) + { + level.ac130player playlocalsound("fasten_seatbelts"); + } + + var_07 = 1; + } + + var_08[var_09] = var_0A[var_09]; + } + + var_0D = vectornormalize(var_7B - var_05[var_09].origin); + if(vectordot(var_0D,var_05[var_09].lastvectotarget) < 0) + { + if(isdefined(level.ac130player)) + { + level.ac130player stoplocalsound("missile_incoming"); + if(level.teambased) + { + if(level.ac130player.team != var_04) + { + radiusdamage(var_05[var_09].origin,1000,1000,1000,var_03,"MOD_EXPLOSIVE","sam_projectile_mp"); + } + } + else + { + radiusdamage(var_05[var_09].origin,1000,1000,1000,var_03,"MOD_EXPLOSIVE","sam_projectile_mp"); + } + } + + var_05[var_09] hide(); + wait 0.05; + var_05[var_09] delete(); + } + } + + var_09++; + } + + wait 0.05; + } +} + +//Function Number: 73 +crashplane(param_00) +{ + level.ac130.planemodel notify("crashing"); + level.ac130.planemodel.crashed = 1; + playfxontag(level._effect["ac130_explode"],level.ac130.planemodel,"tag_deathfx"); + wait 0.25; + level.ac130.planemodel hide(); +} + +//Function Number: 74 +playflarefx(param_00) +{ + for(var_01 = 0;var_01 < param_00;var_01++) + { + thread angel_flare(); + wait randomfloatrange(0.1,0.25); + } +} + +//Function Number: 75 +deployflares(param_00) +{ + self playsound("ac130_flare_burst"); + if(!isdefined(param_00)) + { + var_01 = spawn("script_origin",level.ac130.planemodel.origin); + var_01.angles = level.ac130.planemodel.angles; + var_01 movegravity((0,0,0),5); + thread playflarefx(10); + var_01 thread deleteaftertime(5); + return var_01; + } + + thread playflarefx(5); +} + +//Function Number: 76 +angelflareprecache() +{ + precachemodel("angel_flare_rig"); + precachempanim("ac130_angel_flares01"); + precachempanim("ac130_angel_flares02"); + precachempanim("ac130_angel_flares03"); + level._effect["angel_flare_geotrail"] = loadfx("smoke/angel_flare_geotrail"); + level._effect["angel_flare_swirl"] = loadfx("smoke/angel_flare_swirl_runner"); +} + +//Function Number: 77 +angel_flare() +{ + var_00 = spawn("script_model",self.origin); + var_00 setmodel("angel_flare_rig"); + var_00.origin = self gettagorigin("tag_flash_flares"); + var_00.angles = self gettagangles("tag_flash_flares"); + var_00.angles = (var_00.angles[0],var_00.angles[1] + 180,var_00.angles[2] + -90); + var_01 = level._effect["angel_flare_geotrail"]; + var_00 scriptmodelplayanim("ac130_angel_flares0" + randomint(3) + 1); + wait 0.1; + playfxontag(var_01,var_00,"flare_left_top"); + playfxontag(var_01,var_00,"flare_right_top"); + wait 0.05; + playfxontag(var_01,var_00,"flare_left_bot"); + playfxontag(var_01,var_00,"flare_right_bot"); + wait 3; + stopfxontag(var_01,var_00,"flare_left_top"); + stopfxontag(var_01,var_00,"flare_right_top"); + stopfxontag(var_01,var_00,"flare_left_bot"); + stopfxontag(var_01,var_00,"flare_right_bot"); + var_00 delete(); +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/killstreaks/_airdrop.gsc b/MW3/PC/MP/maps/mp/killstreaks/_airdrop.gsc new file mode 100644 index 0000000..0e3fa00 --- /dev/null +++ b/MW3/PC/MP/maps/mp/killstreaks/_airdrop.gsc @@ -0,0 +1,2388 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\killstreaks\_airdrop.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 90 + * Decompile Time: 1294 ms + * Timestamp: 10/27/2023 2:13:48 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + precachevehicle("littlebird_mp"); + precachemodel("com_plasticcase_friendly"); + precachemodel("com_plasticcase_enemy"); + precachemodel("com_plasticcase_trap_friendly"); + precachemodel("com_plasticcase_trap_bombsquad"); + precachemodel("vehicle_little_bird_armed"); + precachemodel("vehicle_ac130_low_mp"); + precachemodel("sentry_minigun_folded"); + precachestring(&"PLATFORM_GET_RANDOM"); + precachestring(&"PLATFORM_GET_KILLSTREAK"); + precachestring(&"PLATFORM_CALL_NUKE"); + precachestring(&"MP_CAPTURING_CRATE"); + precacheshader("compassping_friendly_mp"); + precacheshader("compassping_enemy"); + precacheitem("airdrop_trap_explosive_mp"); + precachemodel(maps\mp\gametypes\_teams::getteamcratemodel("allies")); + precachemodel(maps\mp\gametypes\_teams::getteamcratemodel("axis")); + precachemodel("prop_suitcase_bomb"); + precacheshader(maps\mp\gametypes\_teams::getteamhudicon("allies")); + precacheshader(maps\mp\gametypes\_teams::getteamhudicon("axis")); + precacheshader("waypoint_ammo_friendly"); + precacheshader("compass_objpoint_ammo_friendly"); + precacheshader("compass_objpoint_trap_friendly"); + precacheshader("compass_objpoint_ammo_enemy"); + precacheminimapicon("compass_objpoint_c130_friendly"); + precacheminimapicon("compass_objpoint_c130_enemy"); + game["strings"]["ammo_hint"] = &"MP_AMMO_PICKUP"; + game["strings"]["explosive_ammo_hint"] = &"MP_EXPLOSIVE_AMMO_PICKUP"; + game["strings"]["uav_hint"] = &"MP_UAV_PICKUP"; + game["strings"]["counter_uav_hint"] = &"MP_COUNTER_UAV_PICKUP"; + game["strings"]["sentry_hint"] = &"MP_SENTRY_PICKUP"; + game["strings"]["juggernaut_hint"] = &"MP_JUGGERNAUT_PICKUP"; + game["strings"]["airdrop_juggernaut_hint"] = &"MP_JUGGERNAUT_PICKUP"; + game["strings"]["airdrop_juggernaut_def_hint"] = &"MP_JUGGERNAUT_PICKUP"; + game["strings"]["airdrop_juggernaut_gl_hint"] = &"MP_JUGGERNAUT_PICKUP"; + game["strings"]["airdrop_juggernaut_recon_hint"] = &"MP_JUGGERNAUT_PICKUP"; + game["strings"]["trophy_hint"] = &"MP_PICKUP_TROPHY"; + game["strings"]["predator_missile_hint"] = &"MP_PREDATOR_MISSILE_PICKUP"; + game["strings"]["airstrike_hint"] = &"MP_AIRSTRIKE_PICKUP"; + game["strings"]["precision_airstrike_hint"] = &"MP_PRECISION_AIRSTRIKE_PICKUP"; + game["strings"]["harrier_airstrike_hint"] = &"MP_HARRIER_AIRSTRIKE_PICKUP"; + game["strings"]["helicopter_hint"] = &"MP_HELICOPTER_PICKUP"; + game["strings"]["helicopter_flares_hint"] = &"MP_HELICOPTER_FLARES_PICKUP"; + game["strings"]["stealth_airstrike_hint"] = &"MP_STEALTH_AIRSTRIKE_PICKUP"; + game["strings"]["helicopter_minigun_hint"] = &"MP_HELICOPTER_MINIGUN_PICKUP"; + game["strings"]["ac130_hint"] = &"MP_AC130_PICKUP"; + game["strings"]["emp_hint"] = &"MP_EMP_PICKUP"; + game["strings"]["littlebird_support_hint"] = &"MP_LITTLEBIRD_SUPPORT_PICKUP"; + game["strings"]["littlebird_flock_hint"] = &"MP_LITTLEBIRD_FLOCK_PICKUP"; + game["strings"]["uav_strike_hint"] = &"MP_UAV_STRIKE_PICKUP"; + game["strings"]["light_armor_hint"] = &"MP_LIGHT_ARMOR_PICKUP"; + game["strings"]["minigun_turret_hint"] = &"MP_MINIGUN_TURRET_PICKUP"; + game["strings"]["team_ammo_refill_hint"] = &"MP_TEAM_AMMO_REFILL_PICKUP"; + game["strings"]["deployable_vest_hint"] = &"MP_DEPLOYABLE_VEST_PICKUP"; + game["strings"]["deployable_exp_ammo_hint"] = &"MP_DEPLOYABLE_EXP_AMMO_PICKUP"; + game["strings"]["gl_turret_hint"] = &"MP_GL_TURRET_PICKUP"; + game["strings"]["directional_uav_hint"] = &"MP_DIRECTIONAL_UAV_PICKUP"; + game["strings"]["ims_hint"] = &"MP_IMS_PICKUP"; + game["strings"]["heli_sniper_hint"] = &"MP_HELI_SNIPER_PICKUP"; + game["strings"]["heli_minigunner_hint"] = &"MP_HELI_MINIGUNNER_PICKUP"; + game["strings"]["remote_mortar_hint"] = &"MP_REMOTE_MORTAR_PICKUP"; + game["strings"]["remote_uav_hint"] = &"MP_REMOTE_UAV_PICKUP"; + game["strings"]["littlebird_support_hint"] = &"MP_LITTLEBIRD_SUPPORT_PICKUP"; + game["strings"]["osprey_gunner_hint"] = &"MP_OSPREY_GUNNER_PICKUP"; + game["strings"]["remote_tank_hint"] = &"MP_REMOTE_TANK_PICKUP"; + game["strings"]["triple_uav_hint"] = &"MP_TRIPLE_UAV_PICKUP"; + game["strings"]["remote_mg_turret_hint"] = &"MP_REMOTE_MG_TURRET_PICKUP"; + game["strings"]["sam_turret_hint"] = &"MP_SAM_TURRET_PICKUP"; + game["strings"]["escort_airdrop_hint"] = &"MP_ESCORT_AIRDROP_PICKUP"; + level.airdropcrates = getentarray("care_package","targetname"); + level.oldairdropcrates = getentarray("airdrop_crate","targetname"); + if(!level.airdropcrates.size) + { + level.airdropcrates = level.oldairdropcrates; + level.airdropcratecollision = getent(level.airdropcrates[0].target,"targetname"); + } + else + { + foreach(var_01 in level.oldairdropcrates) + { + var_01 deletecrate(); + } + + level.airdropcratecollision = getent(level.airdropcrates[0].target,"targetname"); + level.oldairdropcrates = getentarray("airdrop_crate","targetname"); + } + + if(level.airdropcrates.size) + { + foreach(var_01 in level.airdropcrates) + { + var_01 deletecrate(); + } + } + + level.numdropcrates = 0; + level.killstreakfuncs["airdrop_assault"] = ::tryuseassaultairdrop; + level.killstreakfuncs["airdrop_support"] = ::tryusesupportairdrop; + level.killstreakfuncs["airdrop_mega"] = ::tryusemegaairdrop; + level.killstreakfuncs["airdrop_predator_missile"] = ::tryuseairdroppredatormissile; + level.killstreakfuncs["airdrop_sentry_minigun"] = ::tryuseairdropsentryminigun; + level.killstreakfuncs["airdrop_juggernaut"] = ::tryusejuggernautairdrop; + level.killstreakfuncs["airdrop_juggernaut_def"] = ::tryusejuggernautdefairdrop; + level.killstreakfuncs["airdrop_juggernaut_gl"] = ::tryusejuggernautglairdrop; + level.killstreakfuncs["airdrop_juggernaut_recon"] = ::tryusejuggernautreconairdrop; + level.killstreakfuncs["airdrop_trophy"] = ::tryusetrophyairdrop; + level.killstreakfuncs["airdrop_trap"] = ::tryuseairdroptrap; + level.killstreakfuncs["airdrop_remote_tank"] = ::tryuseairdropremotetank; + level.killstreakfuncs["ammo"] = ::tryuseammo; + level.killstreakfuncs["explosive_ammo"] = ::tryuseexplosiveammo; + level.killstreakfuncs["explosive_ammo_2"] = ::tryuseexplosiveammo; + level.killstreakfuncs["light_armor"] = ::tryuselightarmor; + level.littlebirds = []; + level.cratetypes = []; + addcratetype("airdrop_assault","uav",10,::killstreakcratethink); + addcratetype("airdrop_assault","ims",20,::killstreakcratethink); + addcratetype("airdrop_assault","predator_missile",20,::killstreakcratethink); + addcratetype("airdrop_assault","sentry",20,::killstreakcratethink); + addcratetype("airdrop_assault","precision_airstrike",6,::killstreakcratethink); + addcratetype("airdrop_assault","helicopter",4,::killstreakcratethink); + addcratetype("airdrop_assault","littlebird_support",4,::killstreakcratethink); + addcratetype("airdrop_assault","littlebird_flock",4,::killstreakcratethink); + addcratetype("airdrop_assault","remote_mortar",3,::killstreakcratethink); + addcratetype("airdrop_assault","remote_tank",3,::killstreakcratethink); + addcratetype("airdrop_assault","helicopter_flares",2,::killstreakcratethink); + addcratetype("airdrop_assault","ac130",2,::killstreakcratethink); + addcratetype("airdrop_assault","airdrop_juggernaut",1,::juggernautcratethink); + addcratetype("airdrop_assault","osprey_gunner",1,::killstreakcratethink); + addcratetype("airdrop_osprey_gunner","uav",10,::killstreakcratethink); + addcratetype("airdrop_osprey_gunner","ims",20,::killstreakcratethink); + addcratetype("airdrop_osprey_gunner","predator_missile",20,::killstreakcratethink); + addcratetype("airdrop_osprey_gunner","sentry",20,::killstreakcratethink); + addcratetype("airdrop_osprey_gunner","precision_airstrike",8,::killstreakcratethink); + addcratetype("airdrop_osprey_gunner","littlebird_flock",8,::killstreakcratethink); + addcratetype("airdrop_osprey_gunner","remote_mortar",5,::killstreakcratethink); + addcratetype("airdrop_osprey_gunner","remote_tank",2,::killstreakcratethink); + addcratetype("airdrop_osprey_gunner","helicopter_flares",2,::killstreakcratethink); + addcratetype("airdrop_osprey_gunner","airdrop_juggernaut",1,::juggernautcratethink); + addcratetype("airdrop_osprey_gunner","ac130",1,::killstreakcratethink); + addcratetype("airdrop_support","uav",9,::killstreakcratethink); + addcratetype("airdrop_support","counter_uav",9,::killstreakcratethink); + addcratetype("airdrop_support","deployable_vest",8,::killstreakcratethink); + addcratetype("airdrop_support","sam_turret",6,::killstreakcratethink); + addcratetype("airdrop_support","remote_uav",5,::killstreakcratethink); + addcratetype("airdrop_support","remote_mg_turret",5,::killstreakcratethink); + addcratetype("airdrop_support","stealth_airstrike",4,::killstreakcratethink); + addcratetype("airdrop_support","triple_uav",3,::killstreakcratethink); + addcratetype("airdrop_support","airdrop_juggernaut_recon",2,::juggernautcratethink); + addcratetype("airdrop_support","escort_airdrop",1,::killstreakcratethink); + addcratetype("airdrop_support","emp",1,::killstreakcratethink); + addcratetype("airdrop_escort","airdrop_trap",10,::trapcratethink); + addcratetype("airdrop_escort","uav",8,::killstreakcratethink); + addcratetype("airdrop_escort","counter_uav",8,::killstreakcratethink); + addcratetype("airdrop_escort","deployable_vest",7,::killstreakcratethink); + addcratetype("airdrop_escort","sentry",7,::killstreakcratethink); + addcratetype("airdrop_escort","ims",7,::killstreakcratethink); + addcratetype("airdrop_escort","sam_turret",6,::killstreakcratethink); + addcratetype("airdrop_escort","stealth_airstrike",5,::killstreakcratethink); + addcratetype("airdrop_escort","airdrop_juggernaut_recon",5,::juggernautcratethink); + addcratetype("airdrop_escort","remote_uav",5,::killstreakcratethink); + addcratetype("airdrop_escort","triple_uav",3,::killstreakcratethink); + addcratetype("airdrop_escort","remote_mg_turret",3,::killstreakcratethink); + addcratetype("airdrop_escort","emp",1,::killstreakcratethink); + addcratetype("airdrop_trapcontents","ims",6,::trapnullfunc); + addcratetype("airdrop_trapcontents","predator_missile",7,::trapnullfunc); + addcratetype("airdrop_trapcontents","sentry",7,::trapnullfunc); + addcratetype("airdrop_trapcontents","precision_airstrike",7,::trapnullfunc); + addcratetype("airdrop_trapcontents","helicopter",8,::trapnullfunc); + addcratetype("airdrop_trapcontents","littlebird_support",8,::trapnullfunc); + addcratetype("airdrop_trapcontents","littlebird_flock",8,::trapnullfunc); + addcratetype("airdrop_trapcontents","remote_mortar",9,::trapnullfunc); + addcratetype("airdrop_trapcontents","remote_tank",9,::trapnullfunc); + addcratetype("airdrop_trapcontents","helicopter_flares",10,::trapnullfunc); + addcratetype("airdrop_trapcontents","ac130",10,::trapnullfunc); + addcratetype("airdrop_trapcontents","airdrop_juggernaut",10,::trapnullfunc); + addcratetype("airdrop_trapcontents","osprey_gunner",10,::trapnullfunc); + addcratetype("airdrop_grnd","uav",25,::killstreakcratethink); + addcratetype("airdrop_grnd","counter_uav",25,::killstreakcratethink); + addcratetype("airdrop_grnd","deployable_vest",21,::killstreakcratethink); + addcratetype("airdrop_grnd","sentry",21,::killstreakcratethink); + addcratetype("airdrop_grnd","remote_mg_turret",17,::killstreakcratethink); + addcratetype("airdrop_grnd","ims",17,::killstreakcratethink); + addcratetype("airdrop_grnd","triple_uav",13,::killstreakcratethink); + addcratetype("airdrop_grnd","predator_missile",13,::killstreakcratethink); + addcratetype("airdrop_grnd","airdrop_trap",11,::trapcratethink); + addcratetype("airdrop_grnd","precision_airstrike",9,::killstreakcratethink); + addcratetype("airdrop_grnd","stealth_airstrike",9,::killstreakcratethink); + addcratetype("airdrop_grnd","helicopter",9,::killstreakcratethink); + addcratetype("airdrop_grnd","remote_tank",7,::killstreakcratethink); + addcratetype("airdrop_grnd","sam_turret",7,::killstreakcratethink); + addcratetype("airdrop_grnd","remote_uav",7,::killstreakcratethink); + addcratetype("airdrop_grnd","littlebird_support",4,::killstreakcratethink); + addcratetype("airdrop_grnd","airdrop_juggernaut_recon",4,::juggernautcratethink); + addcratetype("airdrop_grnd","littlebird_flock",2,::killstreakcratethink); + addcratetype("airdrop_grnd","helicopter_flares",2,::killstreakcratethink); + addcratetype("airdrop_grnd","remote_mortar",2,::killstreakcratethink); + addcratetype("airdrop_grnd","ac130",2,::killstreakcratethink); + addcratetype("airdrop_grnd","airdrop_juggernaut",1,::juggernautcratethink); + addcratetype("airdrop_grnd","osprey_gunner",1,::killstreakcratethink); + addcratetype("airdrop_grnd","emp",1,::killstreakcratethink); + addcratetype("airdrop_sentry_minigun","sentry",100,::killstreakcratethink); + addcratetype("airdrop_juggernaut","airdrop_juggernaut",100,::juggernautcratethink); + addcratetype("airdrop_juggernaut_recon","airdrop_juggernaut_recon",100,::juggernautcratethink); + addcratetype("airdrop_trophy","airdrop_trophy",100,::trophycratethink); + addcratetype("airdrop_trap","airdrop_trap",100,::trapcratethink); + addcratetype("littlebird_support","littlebird_support",100,::killstreakcratethink); + addcratetype("airdrop_remote_tank","remote_tank",100,::killstreakcratethink); + foreach(var_0A, var_06 in level.cratetypes) + { + level.cratemaxval[var_0A] = 0; + foreach(var_09, var_08 in level.cratetypes[var_0A]) + { + if(!var_08) + { + continue; + } + + level.cratemaxval[var_0A] = level.cratemaxval[var_0A] + var_08; + level.cratetypes[var_0A][var_09] = level.cratemaxval[var_0A]; + } + } + + var_0B = getentarray("mp_tdm_spawn","classname"); + var_0C = undefined; + foreach(var_0E in var_0B) + { + if(!isdefined(var_0C) || var_0E.origin[2] < var_0C.origin[2]) + { + var_0C = var_0E; + } + } + + level.lowspawn = var_0C; +} + +//Function Number: 2 +addcratetype(param_00,param_01,param_02,param_03) +{ + level.cratetypes[param_00][param_01] = param_02; + level.cratefuncs[param_00][param_01] = param_03; +} + +//Function Number: 3 +getrandomcratetype(param_00) +{ + var_01 = randomint(level.cratemaxval[param_00]); + if(isdefined(self.owner) && self.owner maps\mp\_utility::_hasperk("specialty_luckycharm")) + { + var_02 = 1; + } + else + { + var_02 = 0; + } + + var_03 = undefined; + foreach(var_06, var_05 in level.cratetypes[param_00]) + { + if(!var_05) + { + continue; + } + + var_03 = var_06; + if(var_05 > var_01) + { + if(var_02) + { + var_02 = 0; + continue; + } + + break; + } + } + + return var_03; +} + +//Function Number: 4 +getcratetypefordroptype(param_00) +{ + switch(param_00) + { + case "airdrop_sentry_minigun": + return "sentry"; + + case "airdrop_predator_missile": + return "predator_missile"; + + case "airdrop_juggernaut": + return "airdrop_juggernaut"; + + case "airdrop_juggernaut_def": + return "airdrop_juggernaut_def"; + + case "airdrop_juggernaut_gl": + return "airdrop_juggernaut_gl"; + + case "airdrop_juggernaut_recon": + return "airdrop_juggernaut_recon"; + + case "airdrop_trap": + return "airdrop_trap"; + + case "airdrop_trophy": + return "airdrop_trophy"; + + case "airdrop_remote_tank": + return "remote_tank"; + + case "airdrop_grnd_mega": + case "airdrop_grnd": + case "airdrop_support": + case "airdrop_escort": + case "airdrop_mega": + case "airdrop_assault": + default: + return getrandomcratetype(param_00); + } +} + +//Function Number: 5 +drawline(param_00,param_01,param_02) +{ + var_03 = int(param_02 * 20); + for(var_04 = 0;var_04 < var_03;var_04++) + { + wait 0.05; + } +} + +//Function Number: 6 +tryuseassaultairdrop(param_00,param_01) +{ + return tryuseairdrop(param_00,param_01,"airdrop_assault"); +} + +//Function Number: 7 +tryusesupportairdrop(param_00,param_01) +{ + return tryuseairdrop(param_00,param_01,"airdrop_support"); +} + +//Function Number: 8 +tryuseairdroppredatormissile(param_00,param_01) +{ + return tryuseairdrop(param_00,param_01,"airdrop_predator_missile"); +} + +//Function Number: 9 +tryuseairdropsentryminigun(param_00,param_01) +{ + return tryuseairdrop(param_00,param_01,"airdrop_sentry_minigun"); +} + +//Function Number: 10 +tryusejuggernautairdrop(param_00,param_01) +{ + return tryuseairdrop(param_00,param_01,"airdrop_juggernaut"); +} + +//Function Number: 11 +tryusejuggernautglairdrop(param_00,param_01) +{ + return tryuseairdrop(param_00,param_01,"airdrop_juggernaut_gl"); +} + +//Function Number: 12 +tryusejuggernautreconairdrop(param_00,param_01) +{ + return tryuseairdrop(param_00,param_01,"airdrop_juggernaut_recon"); +} + +//Function Number: 13 +tryusejuggernautdefairdrop(param_00,param_01) +{ + return tryuseairdrop(param_00,param_01,"airdrop_juggernaut_def"); +} + +//Function Number: 14 +tryusetrophyairdrop(param_00,param_01) +{ + return tryuseairdrop(param_00,param_01,"airdrop_trophy"); +} + +//Function Number: 15 +tryusemegaairdrop(param_00,param_01) +{ + return tryuseairdrop(param_00,param_01,"airdrop_mega"); +} + +//Function Number: 16 +tryuseairdroptrap(param_00,param_01) +{ + if(tryuseairdrop(param_00,param_01,"airdrop_trap")) + { + if(level.teambased) + { + thread maps\mp\_utility::leaderdialog(level.otherteam[self.team] + "_enemy_airdrop_assault_inbound",level.otherteam[self.team]); + } + else + { + var_02[0] = self; + thread maps\mp\_utility::leaderdialog(level.otherteam[self.team] + "_enemy_airdrop_assault_inbound",undefined,undefined,var_02); + } + + return 1; + } + + return 0; +} + +//Function Number: 17 +tryuseairdropremotetank(param_00,param_01) +{ + return tryuseairdrop(param_00,param_01,"airdrop_remote_tank"); +} + +//Function Number: 18 +tryuseammo(param_00) +{ + if(maps\mp\_utility::isjuggernaut()) + { + return 0; + } + + refillammo(1); + return 1; +} + +//Function Number: 19 +tryuseexplosiveammo(param_00) +{ + if(maps\mp\_utility::isjuggernaut()) + { + return 0; + } + + refillammo(0); + maps\mp\_utility::giveperk("specialty_explosivebullets",0); + return 1; +} + +//Function Number: 20 +tryuselightarmor(param_00) +{ + if(maps\mp\_utility::isjuggernaut()) + { + return 0; + } + + thread maps\mp\perks\_perkfunctions::givelightarmor(); + return 1; +} + +//Function Number: 21 +tryuseairdrop(param_00,param_01,param_02) +{ + var_03 = undefined; + if(!isdefined(param_02)) + { + param_02 = "airdrop_assault"; + } + + var_04 = 1; + if((level.littlebirds.size >= 4 || level.fauxvehiclecount >= 4) && param_02 != "airdrop_mega" && !issubstr(tolower(param_02),"juggernaut")) + { + self iprintlnbold(&"MP_AIR_SPACE_TOO_CROWDED"); + return 0; + } + else if(maps\mp\_utility::currentactivevehiclecount() >= maps\mp\_utility::maxvehiclesallowed() || level.fauxvehiclecount + var_04 >= maps\mp\_utility::maxvehiclesallowed()) + { + self iprintlnbold(&"MP_TOO_MANY_VEHICLES"); + return 0; + } + else if(isdefined(level.civilianjetflyby)) + { + self iprintlnbold(&"MP_CIVILIAN_AIR_TRAFFIC"); + return 0; + } + else if(maps\mp\_utility::isusingremote()) + { + return 0; + } + else if(!maps\mp\_utility::validateusestreak()) + { + return 0; + } + + if(param_02 != "airdrop_mega" && !issubstr(tolower(param_02),"juggernaut")) + { + thread watchdisconnect(); + } + + if(!issubstr(param_02,"juggernaut")) + { + maps\mp\_utility::incrementfauxvehiclecount(); + } + + var_03 = beginairdropviamarker(param_00,param_01,param_02); + if(!isdefined(var_03) || !var_03) + { + self notify("markerDetermined"); + maps\mp\_utility::decrementfauxvehiclecount(); + return 0; + } + + if(param_02 == "airdrop_mega") + { + thread maps\mp\_utility::teamplayercardsplash("used_airdrop_mega",self); + } + + self notify("markerDetermined"); + maps\mp\_matchdata::logkillstreakevent(param_02,self.origin); + return 1; +} + +//Function Number: 22 +watchdisconnect() +{ + self endon("markerDetermined"); + self waittill("disconnect"); +} + +//Function Number: 23 +beginairdropviamarker(param_00,param_01,param_02) +{ + self notify("beginAirdropViaMarker"); + self endon("beginAirdropViaMarker"); + self endon("disconnect"); + level endon("game_ended"); + self.threwairdropmarker = undefined; + thread watchairdropweaponchange(param_00,param_01,param_02); + thread watchairdropmarkerusage(param_00,param_01,param_02); + thread watchairdropmarker(param_00,param_01,param_02); + var_03 = common_scripts\utility::waittill_any_return("notAirDropWeapon","markerDetermined"); + if(isdefined(var_03) && var_03 == "markerDetermined") + { + return 1; + } + else if(!isdefined(var_03) && isdefined(self.threwairdropmarker)) + { + return 1; + } + + return 0; +} + +//Function Number: 24 +watchairdropweaponchange(param_00,param_01,param_02) +{ + level endon("game_ended"); + self notify("watchAirDropWeaponChange"); + self endon("watchAirDropWeaponChange"); + self endon("disconnect"); + self endon("markerDetermined"); + while(maps\mp\_utility::ischangingweapon()) + { + wait 0.05; + } + + var_03 = self getcurrentweapon(); + if(isairdropmarker(var_03)) + { + var_04 = var_03; + } + else + { + var_04 = undefined; + } + + while(isairdropmarker(var_03)) + { + self waittill("weapon_change",var_03); + if(isairdropmarker(var_03)) + { + var_04 = var_03; + } + } + + if(isdefined(self.threwairdropmarker)) + { + var_05 = maps\mp\killstreaks\_killstreaks::getkillstreakweapon(self.pers["killstreaks"][self.killstreakindexweapon].streakname); + self takeweapon(var_05); + self notify("markerDetermined"); + return; + } + + self notify("notAirDropWeapon"); +} + +//Function Number: 25 +watchairdropmarkerusage(param_00,param_01,param_02) +{ + level endon("game_ended"); + self notify("watchAirDropMarkerUsage"); + self endon("watchAirDropMarkerUsage"); + self endon("disconnect"); + self endon("markerDetermined"); + for(;;) + { + self waittill("grenade_pullback",var_03); + if(!isairdropmarker(var_03)) + { + continue; + } + + common_scripts\utility::_disableusability(); + beginairdropmarkertracking(); + } +} + +//Function Number: 26 +watchairdropmarker(param_00,param_01,param_02) +{ + level endon("game_ended"); + self notify("watchAirDropMarker"); + self endon("watchAirDropMarker"); + self endon("disconnect"); + self endon("markerDetermined"); + for(;;) + { + self waittill("grenade_fire",var_03,var_04); + if(!isairdropmarker(var_04)) + { + continue; + } + + self.threwairdropmarker = 1; + var_03 thread airdropdetonateonstuck(); + var_03.owner = self; + var_03.weaponname = var_04; + var_03 thread airdropmarkeractivate(param_02); + } +} + +//Function Number: 27 +beginairdropmarkertracking() +{ + level endon("game_ended"); + self notify("beginAirDropMarkerTracking"); + self endon("beginAirDropMarkerTracking"); + self endon("death"); + self endon("disconnect"); + common_scripts\utility::waittill_any("grenade_fire","weapon_change"); + common_scripts\utility::_enableusability(); +} + +//Function Number: 28 +airdropmarkeractivate(param_00,param_01) +{ + level endon("game_ended"); + self notify("airDropMarkerActivate"); + self endon("airDropMarkerActivate"); + self waittill("explode",var_02); + var_03 = self.owner; + if(!isdefined(var_03)) + { + return; + } + + if(var_03 maps\mp\_utility::isemped()) + { + return; + } + + if(var_03 maps\mp\_utility::isairdenied()) + { + return; + } + + if(issubstr(tolower(param_00),"escort_airdrop") && isdefined(level.chopper)) + { + return; + } + + wait 0.05; + if(issubstr(tolower(param_00),"juggernaut")) + { + level doc130flyby(var_03,var_02,randomfloat(360),param_00); + return; + } + + if(issubstr(tolower(param_00),"escort_airdrop")) + { + var_03 maps\mp\killstreaks\_escortairdrop::finishsupportescortusage(param_01,var_02,randomfloat(360),"escort_airdrop"); + return; + } + + level doflyby(var_03,var_02,randomfloat(360),param_00); +} + +//Function Number: 29 +initairdropcrate() +{ + self.inuse = 0; + self hide(); + if(isdefined(self.target)) + { + self.collision = getent(self.target,"targetname"); + self.collision notsolid(); + return; + } + + self.collision = undefined; +} + +//Function Number: 30 +deleteonownerdeath(param_00) +{ + wait 0.25; + self linkto(param_00,"tag_origin",(0,0,0),(0,0,0)); + param_00 waittill("death"); + self delete(); +} + +//Function Number: 31 +crateteammodelupdater() +{ + self endon("death"); + self hide(); + foreach(var_01 in level.players) + { + if(var_01.team != "spectator") + { + self showtoplayer(var_01); + } + } + + for(;;) + { + level waittill("joined_team"); + self hide(); + foreach(var_01 in level.players) + { + if(var_01.team != "spectator") + { + self showtoplayer(var_01); + } + } + } +} + +//Function Number: 32 +cratemodelteamupdater(param_00) +{ + self endon("death"); + self hide(); + foreach(var_02 in level.players) + { + if(var_02.team == param_00) + { + self showtoplayer(var_02); + } + } + + for(;;) + { + level waittill("joined_team"); + self hide(); + foreach(var_02 in level.players) + { + if(var_02.team == param_00) + { + self showtoplayer(var_02); + } + } + } +} + +//Function Number: 33 +cratemodelplayerupdater(param_00,param_01) +{ + self endon("death"); + self hide(); + foreach(var_03 in level.players) + { + if(param_01 && isdefined(param_00) && var_03 != param_00) + { + continue; + } + + if(!param_01 && isdefined(param_00) && var_03 == param_00) + { + continue; + } + + self showtoplayer(var_03); + } + + for(;;) + { + level waittill("joined_team"); + self hide(); + foreach(var_03 in level.players) + { + if(param_01 && isdefined(param_00) && var_03 != param_00) + { + continue; + } + + if(!param_01 && isdefined(param_00) && var_03 == param_00) + { + continue; + } + + self showtoplayer(var_03); + } + } +} + +//Function Number: 34 +crateuseteamupdater(param_00) +{ + self endon("death"); + for(;;) + { + setusablebyteam(param_00); + level waittill("joined_team"); + } +} + +//Function Number: 35 +crateusejuggernautupdater() +{ + if(!issubstr(self.cratetype,"juggernaut")) + { + return; + } + + self endon("death"); + level endon("game_ended"); + for(;;) + { + level waittill("juggernaut_equipped",var_00); + self disableplayeruse(var_00); + thread crateusepostjuggernautupdater(var_00); + } +} + +//Function Number: 36 +crateusepostjuggernautupdater(param_00) +{ + self endon("death"); + level endon("game_ended"); + param_00 endon("disconnect"); + param_00 waittill("death"); + self enableplayeruse(param_00); +} + +//Function Number: 37 +createairdropcrate(param_00,param_01,param_02,param_03) +{ + var_04 = spawn("script_model",param_03); + var_04.curprogress = 0; + var_04.usetime = 0; + var_04.userate = 0; + var_04.team = self.team; + if(isdefined(param_00)) + { + var_04.owner = param_00; + } + else + { + var_04.owner = undefined; + } + + var_04.cratetype = param_02; + var_04.droptype = param_01; + var_04.targetname = "care_package"; + var_04 setmodel(maps\mp\gametypes\_teams::getteamcratemodel(var_04.team)); + var_04 thread crateteammodelupdater(); + var_05 = "com_plasticcase_friendly"; + if(param_02 == "airdrop_trap") + { + var_05 = "com_plasticcase_trap_friendly"; + var_04 thread trap_createbombsquadmodel(); + } + + var_04.friendlymodel = spawn("script_model",param_03); + var_04.friendlymodel setmodel(var_05); + var_04.enemymodel = spawn("script_model",param_03); + var_04.enemymodel setmodel("com_plasticcase_enemy"); + var_04.friendlymodel thread deleteonownerdeath(var_04); + if(level.teambased) + { + var_04.friendlymodel thread cratemodelteamupdater(var_04.team); + } + else + { + var_04.friendlymodel thread cratemodelplayerupdater(param_00,1); + } + + var_04.enemymodel thread deleteonownerdeath(var_04); + if(level.teambased) + { + var_04.enemymodel thread cratemodelteamupdater(level.otherteam[var_04.team]); + } + else + { + var_04.enemymodel thread cratemodelplayerupdater(param_00,0); + } + + var_04.inuse = 0; + var_04 clonebrushmodeltoscriptmodel(level.airdropcratecollision); + var_04.killcament = spawn("script_model",var_04.origin + (0,0,300)); + var_04.killcament setscriptmoverkillcam("explosive"); + var_04.killcament linkto(var_04); + level.numdropcrates++; + var_04 thread dropcrateexistence(); + return var_04; +} + +//Function Number: 38 +dropcrateexistence() +{ + level endon("game_ended"); + self waittill("death"); + level.numdropcrates--; +} + +//Function Number: 39 +trap_createbombsquadmodel() +{ + var_00 = spawn("script_model",self.origin); + var_00.angles = self.angles; + var_00 hide(); + var_01 = level.otherteam[self.team]; + var_00 thread maps\mp\gametypes\_weapons::bombsquadvisibilityupdater(var_01,self.owner); + var_00 setmodel("com_plasticcase_trap_bombsquad"); + var_00 linkto(self); + var_00 setcontents(0); + self waittill("death"); + var_00 delete(); +} + +//Function Number: 40 +cratesetupforuse(param_00,param_01,param_02) +{ + self setcursorhint("HINT_NOICON"); + self sethintstring(param_00); + self makeusable(); + self.mode = param_01; + if(level.teambased || isdefined(self.owner)) + { + var_03 = maps\mp\gametypes\_gameobjects::getnextobjid(); + objective_add(var_03,"invisible",(0,0,0)); + objective_position(var_03,self.origin); + objective_state(var_03,"active"); + var_04 = "compass_objpoint_ammo_friendly"; + if(param_01 == "trap") + { + var_04 = "compass_objpoint_trap_friendly"; + } + + objective_icon(var_03,var_04); + if(!level.teambased && isdefined(self.owner)) + { + objective_playerteam(var_03,self.owner getentitynumber()); + } + else + { + objective_team(var_03,self.team); + } + + self.objidfriendly = var_03; + } + + var_03 = maps\mp\gametypes\_gameobjects::getnextobjid(); + objective_add(var_03,"invisible",(0,0,0)); + objective_position(var_03,self.origin); + objective_state(var_03,"active"); + objective_icon(var_03,"compass_objpoint_ammo_enemy"); + if(!level.teambased && isdefined(self.owner)) + { + objective_playerenemyteam(var_03,self.owner getentitynumber()); + } + else + { + objective_team(var_03,level.otherteam[self.team]); + } + + self.objidenemy = var_03; + if(param_01 == "trap") + { + thread crateuseteamupdater(maps\mp\_utility::getotherteam(self.team)); + } + else + { + thread crateuseteamupdater(); + if(issubstr(self.cratetype,"juggernaut")) + { + foreach(var_06 in level.players) + { + if(var_06 maps\mp\_utility::isjuggernaut()) + { + thread crateusepostjuggernautupdater(var_06); + } + } + } + + if(level.teambased) + { + maps\mp\_entityheadicons::setheadicon(self.team,param_02,(0,0,24),14,14,undefined,undefined,undefined,undefined,undefined,0); + } + else if(isdefined(self.owner)) + { + maps\mp\_entityheadicons::setheadicon(self.owner,param_02,(0,0,24),14,14,undefined,undefined,undefined,undefined,undefined,0); + } + } + + thread crateusejuggernautupdater(); +} + +//Function Number: 41 +setusablebyteam(param_00) +{ + foreach(var_02 in level.players) + { + if(issubstr(self.cratetype,"juggernaut") && var_02 maps\mp\_utility::isjuggernaut()) + { + self disableplayeruse(var_02); + continue; + } + + if(!level.teambased && self.mode == "trap") + { + if(isdefined(self.owner) && var_02 == self.owner) + { + self disableplayeruse(var_02); + } + else + { + self enableplayeruse(var_02); + } + + continue; + } + + if(!isdefined(param_00) || param_00 == var_02.team) + { + self enableplayeruse(var_02); + continue; + } + + self disableplayeruse(var_02); + } +} + +//Function Number: 42 +dropthecrate(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08) +{ + var_09 = []; + self.owner endon("disconnect"); + if(!isdefined(param_04)) + { + if(isdefined(param_07)) + { + var_0A = undefined; + var_0B = undefined; + for(var_0C = 0;var_0C < 100;var_0C++) + { + var_0B = getcratetypefordroptype(param_01); + var_0A = 0; + for(var_0D = 0;var_0D < param_07.size;var_0D++) + { + if(var_0B == param_07[var_0D]) + { + var_0A = 1; + break; + } + } + + if(var_0A == 0) + { + break; + } + } + + if(var_0A == 1) + { + var_0B = getcratetypefordroptype(param_01); + } + } + else + { + var_0B = getcratetypefordroptype(param_02); + } + } + else + { + var_0B = param_05; + } + + if(!isdefined(param_06)) + { + param_06 = (randomint(5),randomint(5),randomint(5)); + } + + var_09 = createairdropcrate(self.owner,param_01,var_0B,param_05); + switch(param_01) + { + case "nuke_drop": + case "airdrop_mega": + case "airdrop_juggernaut_recon": + case "airdrop_juggernaut": + var_09 linkto(self,"tag_ground",(64,32,-128),(0,0,0)); + break; + + case "airdrop_osprey_gunner": + case "airdrop_escort": + var_09 linkto(self,param_08,(0,0,0),(0,0,0)); + break; + + default: + var_09 linkto(self,"tag_ground",(32,0,5),(0,0,0)); + break; + } + + var_09.angles = (0,0,0); + var_09 show(); + var_0E = self.veh_speed; + thread waitfordropcratemsg(var_09,param_06,param_01,var_0B); + return var_0B; +} + +//Function Number: 43 +waitfordropcratemsg(param_00,param_01,param_02,param_03) +{ + self waittill("drop_crate"); + param_00 unlink(); + param_00 physicslaunchserver((0,0,0),param_01); + param_00 thread physicswaiter(param_02,param_03); + if(isdefined(param_00.killcament)) + { + param_00.killcament unlink(); + var_04 = bullettrace(param_00.origin,param_00.origin + (0,0,-10000),0,param_00); + var_05 = distance(param_00.origin,var_04["position"]); + var_06 = var_05 / 800; + param_00.killcament moveto(var_04["position"] + (0,0,300),var_06); + } +} + +//Function Number: 44 +physicswaiter(param_00,param_01) +{ + self waittill("physics_finished"); + self thread [[ level.cratefuncs[param_00][param_01] ]](param_00); + level thread droptimeout(self,self.owner,param_01); + if(abs(self.origin[2] - level.lowspawn.origin[2]) > 3000) + { + deletecrate(); + } +} + +//Function Number: 45 +droptimeout(param_00,param_01,param_02) +{ + level endon("game_ended"); + param_00 endon("death"); + if(param_00.droptype == "nuke_drop") + { + return; + } + + maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause(90); + while(param_00.curprogress != 0) + { + wait 1; + } + + param_00 deletecrate(); +} + +//Function Number: 46 +getpathstart(param_00,param_01) +{ + var_02 = 100; + var_03 = 15000; + var_04 = (0,param_01,0); + var_05 = param_00 + anglestoforward(var_04) * -1 * var_03; + var_05 = var_05 + (randomfloat(2) - 1 * var_02,randomfloat(2) - 1 * var_02,0); + return var_05; +} + +//Function Number: 47 +getpathend(param_00,param_01) +{ + var_02 = 150; + var_03 = 15000; + var_04 = (0,param_01,0); + var_05 = param_00 + anglestoforward(var_04 + (0,90,0)) * var_03; + var_05 = var_05 + (randomfloat(2) - 1 * var_02,randomfloat(2) - 1 * var_02,0); + return var_05; +} + +//Function Number: 48 +getflyheightoffset(param_00) +{ + var_01 = 850; + var_02 = getent("airstrikeheight","targetname"); + if(!isdefined(var_02)) + { + if(isdefined(level.airstrikeheightscale)) + { + if(level.airstrikeheightscale > 2) + { + var_01 = 1500; + return var_01 * level.airstrikeheightscale; + } + + return var_01 * level.airstrikeheightscale + 256 + param_00[2]; + } + + return var_01 + param_00[2]; + } + + return var_02.origin[2]; +} + +//Function Number: 49 +doflyby(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if(!isdefined(param_00)) + { + return; + } + + var_06 = getflyheightoffset(param_01); + if(isdefined(param_04)) + { + var_06 = var_06 + param_04; + } + + foreach(var_08 in level.littlebirds) + { + if(isdefined(var_08.droptype)) + { + var_06 = var_06 + 128; + } + } + + var_0A = param_01 * (1,1,0) + (0,0,var_06); + var_0B = getpathstart(var_0A,param_02); + var_0C = getpathend(var_0A,param_02); + var_0A = var_0A + anglestoforward((0,param_02,0)) * -50; + var_0D = helisetup(param_00,var_0B,var_0A); + var_0D endon("death"); + if(!isdefined(param_05)) + { + param_05 = undefined; + } + + var_0D.droptype = param_03; + var_0D setvehgoalpos(var_0A,1); + var_0D thread dropthecrate(param_01,param_03,var_06,0,param_05,var_0B); + wait 2; + var_0D vehicle_setspeed(75,40); + var_0D setyawspeed(180,180,180,0.3); + var_0D waittill("goal"); + wait 0.1; + var_0D notify("drop_crate"); + var_0D setvehgoalpos(var_0C,1); + var_0D vehicle_setspeed(300,75); + var_0D.leaving = 1; + var_0D waittill("goal"); + var_0D notify("leaving"); + var_0D notify("delete"); + maps\mp\_utility::decrementfauxvehiclecount(); + var_0D delete(); +} + +//Function Number: 50 +domegaflyby(param_00,param_01,param_02,param_03) +{ + level thread doflyby(param_00,param_01,param_02,param_03,0); + wait randomintrange(1,2); + level thread doflyby(param_00,param_01 + (128,128,0),param_02,param_03,128); + wait randomintrange(1,2); + level thread doflyby(param_00,param_01 + (172,256,0),param_02,param_03,256); + wait randomintrange(1,2); + level thread doflyby(param_00,param_01 + (64,0,0),param_02,param_03,0); +} + +//Function Number: 51 +doc130flyby(param_00,param_01,param_02,param_03) +{ + var_04 = 18000; + var_05 = 3000; + var_06 = vectortoyaw(param_01 - param_00.origin); + var_07 = (0,var_06,0); + var_08 = getflyheightoffset(param_01); + var_09 = param_01 + anglestoforward(var_07) * -1 * var_04; + var_09 = var_09 * (1,1,0) + (0,0,var_08); + var_0A = param_01 + anglestoforward(var_07) * var_04; + var_0A = var_0A * (1,1,0) + (0,0,var_08); + var_0B = length(var_09 - var_0A); + var_0C = var_0B / var_05; + var_0D = c130setup(param_00,var_09,var_0A); + var_0D.veh_speed = var_05; + var_0D.droptype = param_03; + var_0D playloopsound("veh_ac130_dist_loop"); + var_0D.angles = var_07; + var_0E = anglestoforward(var_07); + var_0D moveto(var_0A,var_0C,0,0); + var_0F = distance2d(var_0D.origin,param_01); + var_10 = 0; + for(;;) + { + var_11 = distance2d(var_0D.origin,param_01); + if(var_11 < var_0F) + { + var_0F = var_11; + } + else if(var_11 > var_0F) + { + break; + } + + if(var_11 < 320) + { + break; + } + else if(var_11 < 768) + { + earthquake(0.15,1.5,param_01,1500); + if(!var_10) + { + var_0D playsound("veh_ac130_sonic_boom"); + var_10 = 1; + } + } + + wait 0.05; + } + + wait 0.05; + var_12 = (0.25,0,0); + var_13[0] = var_0D thread dropthecrate(param_01,param_03,var_08,0,undefined,var_09,var_12); + wait 0.05; + var_0D notify("drop_crate"); + var_14 = param_01 + anglestoforward(var_07) * var_04 * 1.5; + var_0D moveto(var_14,var_0C / 2,0,0); + wait 6; + var_0D delete(); +} + +//Function Number: 52 +domegac130flyby(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = 24000; + var_06 = 2000; + var_07 = vectortoyaw(param_01 - param_00.origin); + var_08 = (0,var_07,0); + var_09 = anglestoforward(var_08); + if(isdefined(param_04)) + { + param_01 = param_01 + var_09 * param_04; + } + + var_0A = getflyheightoffset(param_01); + var_0B = param_01 + anglestoforward(var_08) * -1 * var_05; + var_0B = var_0B * (1,1,0) + (0,0,var_0A); + var_0C = param_01 + anglestoforward(var_08) * var_05; + var_0C = var_0C * (1,1,0) + (0,0,var_0A); + var_0D = length(var_0B - var_0C); + var_0E = var_0D / var_06; + var_0F = c130setup(param_00,var_0B,var_0C); + var_0F.veh_speed = var_06; + var_0F.droptype = param_03; + var_0F playloopsound("veh_ac130_dist_loop"); + var_0F.angles = var_08; + var_09 = anglestoforward(var_08); + var_0F moveto(var_0C,var_0E,0,0); + var_10 = distance2d(var_0F.origin,param_01); + var_11 = 0; + for(;;) + { + var_12 = distance2d(var_0F.origin,param_01); + if(var_12 < var_10) + { + var_10 = var_12; + } + else if(var_12 > var_10) + { + break; + } + + if(var_12 < 256) + { + break; + } + else if(var_12 < 768) + { + earthquake(0.15,1.5,param_01,1500); + if(!var_11) + { + var_0F playsound("veh_ac130_sonic_boom"); + var_11 = 1; + } + } + + wait 0.05; + } + + wait 0.05; + var_13[0] = var_0F thread dropthecrate(param_01,param_03,var_0A,0,undefined,var_0B); + wait 0.05; + var_0F notify("drop_crate"); + wait 0.05; + wait 0.05; + var_10 notify("drop_crate",var_7B[1],var_0F thread dropthecrate(param_01,param_03,var_0A,0,undefined,var_0B,undefined,var_13)); + wait 0.05; + wait 0.05; + var_10 notify("drop_crate",var_7B[2],var_10 thread dropthecrate(param_02,param_04,var_0B,0,undefined,var_0C,undefined,var_7B)); + wait 0.05; + wait 0.05; + var_10 notify("drop_crate",var_7B[3],var_10 thread dropthecrate(param_02,param_04,var_0B,0,undefined,var_0C,undefined,var_7B)); + wait 4; + var_10 delete(); +} + +//Function Number: 53 +dropnuke(param_00,param_01,param_02) +{ + var_03 = 24000; + var_04 = 2000; + var_05 = randomint(360); + var_06 = (0,var_05,0); + var_07 = getflyheightoffset(param_00); + var_08 = param_00 + anglestoforward(var_06) * -1 * var_03; + var_08 = var_08 * (1,1,0) + (0,0,var_07); + var_09 = param_00 + anglestoforward(var_06) * var_03; + var_09 = var_09 * (1,1,0) + (0,0,var_07); + var_0A = length(var_08 - var_09); + var_0B = var_0A / var_04; + var_0C = c130setup(param_01,var_08,var_09); + var_0C.veh_speed = var_04; + var_0C.droptype = param_02; + var_0C playloopsound("veh_ac130_dist_loop"); + var_0C.angles = var_06; + var_0D = anglestoforward(var_06); + var_0C moveto(var_09,var_0B,0,0); + var_0E = 0; + var_0F = distance2d(var_0C.origin,param_00); + for(;;) + { + var_10 = distance2d(var_0C.origin,param_00); + if(var_10 < var_0F) + { + var_0F = var_10; + } + else if(var_10 > var_0F) + { + break; + } + + if(var_10 < 256) + { + break; + } + else if(var_10 < 768) + { + earthquake(0.15,1.5,param_00,1500); + if(!var_0E) + { + var_0C playsound("veh_ac130_sonic_boom"); + var_0E = 1; + } + } + + wait 0.05; + } + + var_0C thread dropthecrate(param_00,param_02,var_07,0,"nuke",var_08); + wait 0.05; + var_0C notify("drop_crate"); + wait 4; + var_0C delete(); +} + +//Function Number: 54 +stoploopafter(param_00) +{ + self endon("death"); + wait param_00; + self stoploopsound(); +} + +//Function Number: 55 +playlooponent(param_00) +{ + var_01 = spawn("script_origin",(0,0,0)); + var_01 hide(); + var_01 endon("death"); + thread common_scripts\utility::delete_on_death(var_01); + var_01.origin = self.origin; + var_01.angles = self.angles; + var_01 linkto(self); + var_01 playloopsound(param_00); + self waittill("stop sound" + param_00); + var_01 stoploopsound(param_00); + var_01 delete(); +} + +//Function Number: 56 +c130setup(param_00,param_01,param_02) +{ + var_03 = vectortoangles(param_02 - param_01); + var_04 = spawnplane(param_00,"script_model",param_01,"compass_objpoint_c130_friendly","compass_objpoint_c130_enemy"); + var_04 setmodel("vehicle_ac130_low_mp"); + if(!isdefined(var_04)) + { + return; + } + + var_04.owner = param_00; + var_04.team = param_00.team; + level.c130 = var_04; + return var_04; +} + +//Function Number: 57 +helisetup(param_00,param_01,param_02) +{ + var_03 = vectortoangles(param_02 - param_01); + var_04 = spawnhelicopter(param_00,param_01,var_03,"littlebird_mp","vehicle_little_bird_armed"); + if(!isdefined(var_04)) + { + return; + } + + var_04 maps\mp\killstreaks\_helicopter::addtolittlebirdlist(); + var_04 thread maps\mp\killstreaks\_helicopter::removefromlittlebirdlistondeath(); + var_04.health = 999999; + var_04.maxhealth = 500; + var_04.damagetaken = 0; + var_04 setcandamage(1); + var_04.owner = param_00; + var_04.team = param_00.team; + var_04.isairdrop = 1; + var_04 thread watchtimeout(); + var_04 thread heli_existence(); + var_04 thread helidestroyed(); + var_04 thread heli_handledamage(); + var_04 setmaxpitchroll(45,85); + var_04 vehicle_setspeed(250,175); + var_04.helitype = "airdrop"; + var_04.specialdamagecallback = ::callback_vehicledamage; + return var_04; +} + +//Function Number: 58 +watchtimeout() +{ + level endon("game_ended"); + self endon("leaving"); + self endon("helicopter_gone"); + self endon("death"); + maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause(25); + self notify("death"); +} + +//Function Number: 59 +heli_existence() +{ + common_scripts\utility::waittill_any("crashing","leaving"); + self notify("helicopter_gone"); +} + +//Function Number: 60 +heli_handledamage() +{ + self endon("death"); + level endon("game_ended"); + for(;;) + { + self waittill("damage",var_00,var_01,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09); + if(isdefined(self.specialdamagecallback)) + { + self [[ self.specialdamagecallback ]](undefined,var_01,var_00,var_08,var_04,var_09,var_03,var_02,undefined,undefined,var_05,var_07); + } + } +} + +//Function Number: 61 +callback_vehicledamage(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A,param_0B) +{ + if(isdefined(self.alreadydead) && self.alreadydead) + { + return; + } + + if(!isdefined(param_01) || param_01 == self) + { + return; + } + + if(!maps\mp\gametypes\_weapons::friendlyfirecheck(self.owner,param_01)) + { + return; + } + + if(isdefined(param_03) && param_03 & level.idflags_penetration) + { + self.wasdamagedfrombulletpenetration = 1; + } + + self.wasdamaged = 1; + var_0C = param_02; + if(isplayer(param_01)) + { + param_01 maps\mp\gametypes\_damagefeedback::updatedamagefeedback("helicopter"); + if(param_04 == "MOD_RIFLE_BULLET" || param_04 == "MOD_PISTOL_BULLET") + { + if(param_01 maps\mp\_utility::_hasperk("specialty_armorpiercing")) + { + var_0C = var_0C + param_02 * level.armorpiercingmod; + } + } + } + + if(isdefined(param_01.owner) && isplayer(param_01.owner)) + { + param_01.owner maps\mp\gametypes\_damagefeedback::updatedamagefeedback("helicopter"); + } + + if(isdefined(param_05)) + { + switch(param_05) + { + case "javelin_mp": + case "stinger_mp": + case "remote_mortar_missile_mp": + case "remotemissile_projectile_mp": + case "ac130_40mm_mp": + case "ac130_105mm_mp": + self.var_30C8 = 1; + var_0C = self.maxhealth + 1; + break; + + case "sam_projectile_mp": + self.var_30C8 = 1; + var_0C = self.maxhealth * 0.5; + break; + + case "emp_grenade_mp": + self.var_30C8 = 0; + var_0C = self.maxhealth + 1; + break; + } + } + + self.damagetaken = self.damagetaken + var_0C; + if(self.damagetaken >= self.maxhealth) + { + if(isplayer(param_01) && !isdefined(self.owner) || param_01 != self.owner) + { + self.alreadydead = 1; + param_01 notify("destroyed_helicopter"); + param_01 notify("destroyed_killstreak",param_05); + thread maps\mp\_utility::teamplayercardsplash("callout_destroyed_helicopter",param_01); + param_01 thread maps\mp\gametypes\_rank::giverankxp("kill",300,param_05,param_04); + param_01 thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_DESTROYED_HELICOPTER"); + thread maps\mp\gametypes\_missions::vehiclekilled(self.owner,self,undefined,param_01,param_02,param_04,param_05); + } + + self notify("death"); + } +} + +//Function Number: 62 +helidestroyed() +{ + self endon("leaving"); + self endon("helicopter_gone"); + self waittill("death"); + if(!isdefined(self)) + { + return; + } + + self vehicle_setspeed(25,5); + thread lbspin(randomintrange(180,220)); + wait randomfloatrange(0.5,1.5); + self notify("drop_crate"); + lbexplode(); +} + +//Function Number: 63 +lbexplode() +{ + var_00 = self.origin + (0,0,1) - self.origin; + playfx(level.chopper_fx["explode"]["death"]["cobra"],self.origin,var_00); + self playsound("cobra_helicopter_crash"); + self notify("explode"); + self delete(); +} + +//Function Number: 64 +lbspin(param_00) +{ + self endon("explode"); + playfxontag(level.chopper_fx["explode"]["medium"],self,"tail_rotor_jnt"); + playfxontag(level.chopper_fx["fire"]["trail"]["medium"],self,"tail_rotor_jnt"); + self setyawspeed(param_00,param_00,param_00); + while(isdefined(self)) + { + self settargetyaw(self.angles[1] + param_00 * 0.9); + wait 1; + } +} + +//Function Number: 65 +nukecapturethink() +{ + while(isdefined(self)) + { + self waittill("trigger",var_00); + if(!var_00 isonground()) + { + continue; + } + + if(!useholdthink(var_00)) + { + continue; + } + + self notify("captured",var_00); + } +} + +//Function Number: 66 +crateothercapturethink(param_00) +{ + while(isdefined(self)) + { + self waittill("trigger",var_01); + if(isdefined(self.owner) && var_01 == self.owner) + { + continue; + } + + if(!validateopenconditions(var_01)) + { + continue; + } + + var_01.iscapturingcrate = 1; + var_02 = createuseent(); + var_03 = var_02 useholdthink(var_01,undefined,param_00); + if(isdefined(var_02)) + { + var_02 delete(); + } + + if(!var_03) + { + var_01.iscapturingcrate = 0; + continue; + } + + var_01.iscapturingcrate = 0; + self notify("captured",var_01); + } +} + +//Function Number: 67 +crateownercapturethink(param_00) +{ + while(isdefined(self)) + { + self waittill("trigger",var_01); + if(isdefined(self.owner) && var_01 != self.owner) + { + continue; + } + + if(!validateopenconditions(var_01)) + { + continue; + } + + var_01.iscapturingcrate = 1; + if(!useholdthink(var_01,500,param_00)) + { + var_01.iscapturingcrate = 0; + continue; + } + + var_01.iscapturingcrate = 0; + self notify("captured",var_01); + } +} + +//Function Number: 68 +validateopenconditions(param_00) +{ + if((self.cratetype == "airdrop_juggernaut_def" || self.cratetype == "airdrop_juggernaut") && param_00 maps\mp\_utility::isjuggernaut()) + { + return 0; + } + + var_01 = param_00 getcurrentweapon(); + if(maps\mp\_utility::iskillstreakweapon(var_01) && !issubstr(var_01,"jugg_mp")) + { + return 0; + } + + if(isdefined(param_00.changingweapon) && maps\mp\_utility::iskillstreakweapon(param_00.changingweapon) && !issubstr(param_00.changingweapon,"jugg_mp")) + { + return 0; + } + + return 1; +} + +//Function Number: 69 +killstreakcratethink(param_00) +{ + self endon("death"); + if(isdefined(game["strings"][self.cratetype + "_hint"])) + { + var_01 = game["strings"][self.cratetype + "_hint"]; + } + else + { + var_01 = &"PLATFORM_GET_KILLSTREAK"; + } + + cratesetupforuse(var_01,"all",maps\mp\killstreaks\_killstreaks::getkillstreakcrateicon(self.cratetype)); + thread crateothercapturethink(); + thread crateownercapturethink(); + for(;;) + { + self waittill("captured",var_02); + if(isdefined(self.owner) && var_02 != self.owner) + { + if(!level.teambased || var_02.team != self.team) + { + switch(param_00) + { + case "airdrop_support": + case "airdrop_osprey_gunner": + case "airdrop_escort": + case "airdrop_assault": + var_02 thread maps\mp\gametypes\_missions::genericchallenge("hijacker_airdrop"); + var_02 thread hijacknotify(self,"airdrop"); + break; + + case "airdrop_sentry_minigun": + var_02 thread maps\mp\gametypes\_missions::genericchallenge("hijacker_airdrop"); + var_02 thread hijacknotify(self,"sentry"); + break; + + case "airdrop_remote_tank": + var_02 thread maps\mp\gametypes\_missions::genericchallenge("hijacker_airdrop"); + var_02 thread hijacknotify(self,"remote_tank"); + break; + + case "airdrop_mega": + var_02 thread maps\mp\gametypes\_missions::genericchallenge("hijacker_airdrop_mega"); + var_02 thread hijacknotify(self,"emergency_airdrop"); + break; + } + } + else + { + self.owner thread maps\mp\gametypes\_rank::giverankxp("killstreak_giveaway",int(maps\mp\killstreaks\_killstreaks::getstreakcost(self.cratetype) / 10 * 50)); + self.owner thread maps\mp\gametypes\_hud_message::splashnotifydelayed("sharepackage",int(maps\mp\killstreaks\_killstreaks::getstreakcost(self.cratetype) / 10 * 50)); + } + } + + var_02 playlocalsound("ammo_crate_use"); + var_02 thread maps\mp\killstreaks\_killstreaks::givekillstreak(self.cratetype,0,0,self.owner); + deletecrate(); + } +} + +//Function Number: 70 +nukecratethink(param_00) +{ + self endon("death"); + cratesetupforuse(&"PLATFORM_CALL_NUKE","nukeDrop",maps\mp\killstreaks\_killstreaks::getkillstreakcrateicon(self.cratetype)); + thread nukecapturethink(); + for(;;) + { + self waittill("captured",var_01); + var_01 thread [[ level.killstreakfuncs[self.cratetype] ]](level.gtnw); + level notify("nukeCaptured",var_01); + if(isdefined(level.gtnw) && level.gtnw) + { + var_01.capturednuke = 1; + } + + var_01 playlocalsound("ammo_crate_use"); + deletecrate(); + } +} + +//Function Number: 71 +trophycratethink(param_00) +{ + self endon("death"); + cratesetupforuse(game["strings"]["trophy_hint"],"all",maps\mp\killstreaks\_killstreaks::getkillstreakcrateicon(self.cratetype)); + thread crateothercapturethink(); + thread crateownercapturethink(); + for(;;) + { + self waittill("captured",var_01); + if(isdefined(self.owner) && var_01 != self.owner) + { + if(!level.teambased || var_01.team != self.team) + { + var_01 thread hijacknotify(self,"trophy"); + } + else + { + self.owner thread maps\mp\gametypes\_rank::giverankxp("killstreak_giveaway",int(maps\mp\killstreaks\_killstreaks::getstreakcost("airdrop_trophy") / 10) * 50); + self.owner maps\mp\gametypes\_hud_message::playercardsplashnotify("giveaway_trophy",var_01); + } + } + + var_01 playlocalsound("ammo_crate_use"); + var_01 thread givelocaltrophy(param_00); + deletecrate(); + } +} + +//Function Number: 72 +juggernautcratethink(param_00) +{ + self endon("death"); + cratesetupforuse(game["strings"]["juggernaut_hint"],"all",maps\mp\killstreaks\_killstreaks::getkillstreakcrateicon(self.cratetype)); + thread crateothercapturethink(); + thread crateownercapturethink(); + for(;;) + { + self waittill("captured",var_01); + if(isdefined(self.owner) && var_01 != self.owner) + { + if(!level.teambased || var_01.team != self.team) + { + var_01 thread hijacknotify(self,"juggernaut"); + } + else + { + self.owner thread maps\mp\gametypes\_rank::giverankxp("killstreak_giveaway",int(maps\mp\killstreaks\_killstreaks::getstreakcost(self.cratetype) / 10) * 50); + self.owner maps\mp\gametypes\_hud_message::playercardsplashnotify("giveaway_juggernaut",var_01); + } + } + + var_01 playlocalsound("ammo_crate_use"); + var_02 = "juggernaut"; + switch(self.cratetype) + { + case "airdrop_juggernaut": + var_02 = "juggernaut"; + break; + + case "airdrop_juggernaut_recon": + var_02 = "juggernaut_recon"; + break; + } + + var_01 thread maps\mp\killstreaks\_juggernaut::givejuggernaut(var_02); + deletecrate(); + } +} + +//Function Number: 73 +sentrycratethink(param_00) +{ + self endon("death"); + cratesetupforuse(game["strings"]["sentry_hint"],"all",maps\mp\killstreaks\_killstreaks::getkillstreakcrateicon(self.cratetype)); + thread crateothercapturethink(); + thread crateownercapturethink(); + for(;;) + { + self waittill("captured",var_01); + if(isdefined(self.owner) && var_01 != self.owner) + { + if(!level.teambased || var_01.team != self.team) + { + if(issubstr(param_00,"airdrop_sentry")) + { + var_01 thread hijacknotify(self,"sentry"); + } + else + { + var_01 thread hijacknotify(self,"emergency_airdrop"); + } + } + else + { + self.owner thread maps\mp\gametypes\_rank::giverankxp("killstreak_giveaway",int(maps\mp\killstreaks\_killstreaks::getstreakcost("sentry") / 10) * 50); + self.owner maps\mp\gametypes\_hud_message::playercardsplashnotify("giveaway_sentry",var_01); + } + } + + var_01 playlocalsound("ammo_crate_use"); + var_01 thread sentryusetracker(); + deletecrate(); + } +} + +//Function Number: 74 +trapnullfunc() +{ +} + +//Function Number: 75 +trapcratethink(param_00) +{ + self endon("death"); + var_01 = getrandomcratetype("airdrop_trapcontents"); + cratesetupforuse(game["strings"][var_01 + "_hint"],"trap","none"); + self.bomb = spawn("script_model",self.origin); + var_02 = bullettrace(self.bomb.origin,self.bomb.origin + (100,100,128),0,self.bomb); + self.bomb.killcament = spawn("script_model",var_02["position"]); + self.bomb.killcament setscriptmoverkillcam("explosive"); + thread crateothercapturethink(); + for(;;) + { + self waittill("captured",var_03); + var_03 thread detonatetrap(self.bomb,self,self.owner); + } +} + +//Function Number: 76 +detonatetrap(param_00,param_01,param_02) +{ + param_01 endon("death"); + param_00 rotatevelocity((0,300,0),3); + param_00 setmodel("prop_suitcase_bomb"); + var_03 = param_01.origin; + thread common_scripts\utility::play_sound_in_space("javelin_clu_lock",var_03); + wait 1; + var_04 = var_03 + (0,0,1) - var_03; + playfx(level.chopper_fx["explode"]["death"]["cobra"],var_03,var_04); + thread common_scripts\utility::play_sound_in_space("cobra_helicopter_crash",var_03); + if(isdefined(param_02)) + { + param_00 radiusdamage(var_03,400,200,50,param_02,"MOD_EXPLOSIVE","airdrop_trap_explosive_mp"); + } + else + { + param_00 radiusdamage(var_03,400,200,50,undefined,"MOD_EXPLOSIVE","airdrop_trap_explosive_mp"); + } + + param_01 deletecrate(); +} + +//Function Number: 77 +deletecrate() +{ + if(isdefined(self.objidfriendly)) + { + maps\mp\_utility::_objective_delete(self.objidfriendly); + } + + if(isdefined(self.objidenemy)) + { + maps\mp\_utility::_objective_delete(self.objidenemy); + } + + if(isdefined(self.bomb) && isdefined(self.bomb.killcament)) + { + self.bomb.killcament delete(); + } + + if(isdefined(self.bomb)) + { + self.bomb delete(); + } + + if(isdefined(self.killcament)) + { + self.killcament delete(); + } + + self delete(); +} + +//Function Number: 78 +sentryusetracker() +{ + if(!maps\mp\killstreaks\_autosentry::givesentry("sentry_minigun")) + { + maps\mp\killstreaks\_killstreaks::givekillstreak("sentry"); + } +} + +//Function Number: 79 +givelocaltrophy(param_00) +{ + self.activetrophy = 1; + self.trophyammo = 6; + thread personaltrophyactive(); +} + +//Function Number: 80 +hijacknotify(param_00,param_01) +{ + self notify("hijacker",param_01,param_00.owner); +} + +//Function Number: 81 +refillammo(param_00) +{ + var_01 = self getweaponslistall(); + if(param_00) + { + if(maps\mp\_utility::_hasperk("specialty_tacticalinsertion") && self getammocount("flare_mp") < 1) + { + maps\mp\_utility::giveperk("specialty_tacticalinsertion",0); + } + + if(maps\mp\_utility::_hasperk("specialty_scrambler") && self getammocount("scrambler_mp") < 1) + { + maps\mp\_utility::giveperk("specialty_scrambler",0); + } + + if(maps\mp\_utility::_hasperk("specialty_portable_radar") && self getammocount("portable_radar_mp") < 1) + { + maps\mp\_utility::giveperk("specialty_portable_radar",0); + } + } + + foreach(var_03 in var_01) + { + if(issubstr(var_03,"grenade") || getsubstr(var_03,0,2) == "gl") + { + if(!param_00 || self getammocount(var_03) >= 1) + { + continue; + } + } + + self givemaxammo(var_03); + } +} + +//Function Number: 82 +useholdthink(param_00,param_01,param_02) +{ + param_00 playerlinkto(self); + param_00 playerlinkedoffsetenable(); + param_00 common_scripts\utility::_disableweapon(); + self.curprogress = 0; + self.inuse = 1; + self.userate = 0; + if(isdefined(param_01)) + { + self.usetime = param_01; + } + else + { + self.usetime = 3000; + } + + param_00 thread personalusebar(self,param_02); + var_03 = useholdthinkloop(param_00); + if(isalive(param_00)) + { + param_00 common_scripts\utility::_enableweapon(); + param_00 unlink(); + } + + if(!isdefined(self)) + { + return 0; + } + + self.inuse = 0; + self.curprogress = 0; + return var_03; +} + +//Function Number: 83 +personalusebar(param_00,param_01) +{ + self endon("disconnect"); + var_02 = maps\mp\gametypes\_hud_util::createprimaryprogressbar(0,25); + var_03 = maps\mp\gametypes\_hud_util::createprimaryprogressbartext(0,25); + if(!isdefined(param_01)) + { + param_01 = &"MP_CAPTURING_CRATE"; + } + + var_03 settext(param_01); + var_04 = -1; + while(maps\mp\_utility::isreallyalive(self) && isdefined(param_00) && param_00.inuse && !level.gameended) + { + if(var_04 != param_00.userate) + { + if(param_00.curprogress > param_00.usetime) + { + param_00.curprogress = param_00.usetime; + } + + var_02 maps\mp\gametypes\_hud_util::updatebar(param_00.curprogress / param_00.usetime,1000 / param_00.usetime * param_00.userate); + if(!param_00.userate) + { + var_02 maps\mp\gametypes\_hud_util::hideelem(); + var_03 maps\mp\gametypes\_hud_util::hideelem(); + } + else + { + var_02 maps\mp\gametypes\_hud_util::showelem(); + var_03 maps\mp\gametypes\_hud_util::showelem(); + } + } + + var_04 = param_00.userate; + wait 0.05; + } + + var_02 maps\mp\gametypes\_hud_util::destroyelem(); + var_03 maps\mp\gametypes\_hud_util::destroyelem(); +} + +//Function Number: 84 +useholdthinkloop(param_00) +{ + while(!level.gameended && isdefined(self) && maps\mp\_utility::isreallyalive(param_00) && param_00 usebuttonpressed() && self.curprogress < self.usetime) + { + self.curprogress = self.curprogress + 50 * self.userate; + if(isdefined(self.objectivescaler)) + { + self.userate = 1 * self.objectivescaler; + } + else + { + self.userate = 1; + } + + if(self.curprogress >= self.usetime) + { + return maps\mp\_utility::isreallyalive(param_00); + } + + wait 0.05; + } + + return 0; +} + +//Function Number: 85 +isairdropmarker(param_00) +{ + switch(param_00) + { + case "airdrop_escort_marker_mp": + case "airdrop_trap_marker_mp": + case "airdrop_tank_marker_mp": + case "airdrop_juggernaut_def_mp": + case "airdrop_juggernaut_mp": + case "airdrop_sentry_marker_mp": + case "airdrop_mega_marker_mp": + case "airdrop_marker_mp": + return 1; + + default: + return 0; + } +} + +//Function Number: 86 +createuseent() +{ + var_00 = spawn("script_origin",self.origin); + var_00.curprogress = 0; + var_00.usetime = 0; + var_00.userate = 3000; + var_00.inuse = 0; + var_00 thread deleteuseent(self); + return var_00; +} + +//Function Number: 87 +deleteuseent(param_00) +{ + self endon("death"); + param_00 waittill("death"); + self delete(); +} + +//Function Number: 88 +airdropdetonateonstuck() +{ + self endon("death"); + self waittill("missile_stuck"); + self detonate(); +} + +//Function Number: 89 +projectileexplode(param_00) +{ + self endon("death"); + var_01 = param_00.origin; + var_02 = param_00.model; + var_03 = param_00.angles; + param_00 delete(); + playfx(level.mine_explode,var_01,anglestoforward(var_03),anglestoup(var_03)); + radiusdamage(var_01,65,75,10,self); +} + +//Function Number: 90 +personaltrophyactive() +{ + self endon("disconnect"); + self endon("death"); + var_00 = self.origin; + for(;;) + { + if(!isdefined(level.grenades) || level.grenades.size < 1) + { + wait 0.05; + continue; + } + + var_01 = maps\mp\_utility::combinearrays(level.grenades,level.missiles); + foreach(var_03 in var_01) + { + wait 0.05; + if(!isdefined(var_03)) + { + continue; + } + + if(var_03 == self) + { + continue; + } + + if(isdefined(var_03.weaponname) && var_03.weaponname == "trophy_mp") + { + continue; + } + + if(var_03.model == "weapon_parabolic_knife") + { + continue; + } + + if(!isdefined(var_03.owner)) + { + var_03.owner = getmissileowner(var_03); + } + + if(isdefined(var_03.owner) && level.teambased && var_03.owner.team == self.team) + { + continue; + } + + var_04 = distancesquared(var_03.origin,self.origin); + if(var_04 < 147456) + { + if(bullettracepassed(var_03.origin,self.origin,0,self)) + { + playfx(level.sentry_fire,self.origin + (0,0,32),var_03.origin - self.origin,anglestoup(self.angles)); + thread projectileexplode(var_03); + self.trophyammo--; + if(self.trophyammo <= 0) + { + return; + } + } + } + } + } +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/killstreaks/_airstrike.gsc b/MW3/PC/MP/maps/mp/killstreaks/_airstrike.gsc new file mode 100644 index 0000000..18b62a1 --- /dev/null +++ b/MW3/PC/MP/maps/mp/killstreaks/_airstrike.gsc @@ -0,0 +1,1017 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\killstreaks\_airstrike.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 40 + * Decompile Time: 591 ms + * Timestamp: 10/27/2023 2:13:50 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + precachelocationselector("map_artillery_selector"); + precachestring(&"KILLSTREAKS_PRECISION_AIRSTRIKE"); + precachestring(&"KILLSTREAKS_STEALTH_AIRSTRIKE"); + precachestring(&"KILLSTREAKS_HARRIER_AIRSTRIKE"); + precacheitem("stealth_bomb_mp"); + precacheitem("artillery_mp"); + precacheitem("harrier_missile_mp"); + precachemodel("vehicle_av8b_harrier_jet_mp"); + precachemodel("vehicle_av8b_harrier_jet_opfor_mp"); + precachemodel("weapon_minigun"); + precachemodel("vehicle_b2_bomber"); + precachevehicle("harrier_mp"); + precacheturret("harrier_FFAR_mp"); + precacheminimapicon("compass_objpoint_airstrike_friendly"); + precacheminimapicon("compass_objpoint_airstrike_busy"); + precacheminimapicon("compass_objpoint_b2_airstrike_friendly"); + precacheminimapicon("compass_objpoint_b2_airstrike_enemy"); + precacheminimapicon("hud_minimap_harrier_green"); + precacheminimapicon("hud_minimap_harrier_red"); + level.var_3442 = loadfx("fire/fire_smoke_trail_L"); + level.var_3443 = loadfx("explosions/clusterbomb"); + level.var_1A8 = loadfx("explosions/clusterbomb_no_fount"); + level.airstrikessfx = loadfx("explosions/clusterbomb_exp_direct_runner"); + level.mortareffect = loadfx("explosions/clusterbomb_exp_direct_runner_stealth"); + level.bombstrike = loadfx("explosions/wall_explosion_pm_a"); + level.stealthbombfx = loadfx("explosions/stealth_bomb_mp"); + level.airplane = []; + level.harriers = []; + level.planes = 0; + level.harrier_smoke = loadfx("fire/jet_afterburner_harrier_damaged"); + level.harrier_deathfx = loadfx("explosions/aerial_explosion_harrier"); + level.harrier_afterburnerfx = loadfx("fire/jet_afterburner_harrier"); + level.fx_airstrike_afterburner = loadfx("fire/jet_afterburner"); + level.fx_airstrike_contrail = loadfx("smoke/jet_contrail"); + level.dangermaxradius["stealth_airstrike"] = 900; + level.dangerminradius["stealth_airstrike"] = 750; + level.dangerforwardpush["stealth_airstrike"] = 1; + level.dangerovalscale["stealth_airstrike"] = 6; + level.dangermaxradius["airstrike"] = 550; + level.dangerminradius["airstrike"] = 300; + level.dangerforwardpush["airstrike"] = 1.5; + level.dangerovalscale["airstrike"] = 6; + level.dangermaxradius["precision_airstrike"] = 550; + level.dangerminradius["precision_airstrike"] = 300; + level.dangerforwardpush["precision_airstrike"] = 2; + level.dangerovalscale["precision_airstrike"] = 6; + level.dangermaxradius["harrier_airstrike"] = 550; + level.dangerminradius["harrier_airstrike"] = 300; + level.dangerforwardpush["harrier_airstrike"] = 1.5; + level.dangerovalscale["harrier_airstrike"] = 6; + level.artillerydangercenters = []; + level.killstreakfuncs["airstrike"] = ::tryusedefaultairstrike; + level.killstreakfuncs["precision_airstrike"] = ::tryuseprecisionairstrike; + level.killstreakfuncs["super_airstrike"] = ::tryusesuperairstrike; + level.killstreakfuncs["harrier_airstrike"] = ::tryuseharrierairstrike; + level.killstreakfuncs["stealth_airstrike"] = ::tryusestealthairstrike; + level.planes = []; +} + +//Function Number: 2 +tryusedefaultairstrike(param_00) +{ + return tryuseairstrike(param_00,"airstrike"); +} + +//Function Number: 3 +tryuseprecisionairstrike(param_00) +{ + return tryuseairstrike(param_00,"precision_airstrike"); +} + +//Function Number: 4 +tryusesuperairstrike(param_00) +{ + return tryuseairstrike(param_00,"super_airstrike"); +} + +//Function Number: 5 +tryuseharrierairstrike(param_00) +{ + return tryuseairstrike(param_00,"harrier_airstrike"); +} + +//Function Number: 6 +tryusestealthairstrike(param_00) +{ + return tryuseairstrike(param_00,"stealth_airstrike"); +} + +//Function Number: 7 +tryuseairstrike(param_00,param_01) +{ + if(!maps\mp\_utility::validateusestreak()) + { + return 0; + } + + if(isdefined(level.civilianjetflyby)) + { + self iprintlnbold(&"MP_CIVILIAN_AIR_TRAFFIC"); + return 0; + } + + if(maps\mp\_utility::isusingremote()) + { + return 0; + } + + switch(param_01) + { + case "precision_airstrike": + break; + + case "stealth_airstrike": + break; + + case "harrier_airstrike": + if(level.planes > 1) + { + self iprintlnbold(&"MP_AIR_SPACE_TOO_CROWDED"); + return 0; + } + break; + + case "super_airstrike": + break; + } + + var_02 = selectairstrikelocation(param_00,param_01); + if(!isdefined(var_02) || !var_02) + { + return 0; + } + + return 1; +} + +//Function Number: 8 +doairstrike(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if(param_05 == "harrier_airstrike") + { + level.planes++; + } + + if(isdefined(level.airstrikeinprogress)) + { + while(isdefined(level.airstrikeinprogress)) + { + level waittill("begin_airstrike"); + } + + level.airstrikeinprogress = 1; + wait 2; + } + + if(!isdefined(param_03)) + { + if(param_05 == "harrier_airstrike") + { + level.planes--; + } + + return; + } + + level.airstrikeinprogress = 1; + var_06 = 17 + randomint(3); + var_07 = bullettrace(param_01,param_01 + (0,0,-1000000),0,undefined); + var_08 = var_07["position"]; + var_09 = spawnstruct(); + var_09.origin = var_08; + var_09.forward = anglestoforward((0,param_02,0)); + var_09.streakname = param_05; + level.artillerydangercenters[level.artillerydangercenters.size] = var_09; + var_0A = callstrike(param_00,param_03,var_08,param_02,param_05); + wait 1; + level.airstrikeinprogress = undefined; + param_03 notify("begin_airstrike"); + level notify("begin_airstrike"); + wait 7.5; + var_0B = 0; + var_0C = []; + for(var_0D = 0;var_0D < level.artillerydangercenters.size;var_0D++) + { + if(!var_0B && level.artillerydangercenters[var_0D].origin == var_08) + { + var_0B = 1; + continue; + } + + var_0C[var_0C.size] = level.artillerydangercenters[var_0D]; + } + + level.artillerydangercenters = var_0C; + if(param_05 != "harrier_airstrike") + { + return; + } + + while(isdefined(var_0A)) + { + wait 0.1; + } + + level.planes--; +} + +//Function Number: 9 +clearprogress(param_00) +{ + wait 2; + level.airstrikeinprogress = undefined; +} + +//Function Number: 10 +getairstrikedanger(param_00) +{ + var_01 = 0; + for(var_02 = 0;var_02 < level.artillerydangercenters.size;var_02++) + { + var_03 = level.artillerydangercenters[var_02].origin; + var_04 = level.artillerydangercenters[var_02].forward; + var_05 = level.artillerydangercenters[var_02].streakname; + var_01 = var_01 + getsingleairstrikedanger(param_00,var_03,var_04,var_05); + } + + return var_01; +} + +//Function Number: 11 +getsingleairstrikedanger(param_00,param_01,param_02,param_03) +{ + var_04 = param_01 + level.dangerforwardpush[param_03] * level.dangermaxradius[param_03] * param_02; + var_05 = param_00 - var_04; + var_05 = (var_05[0],var_05[1],0); + var_06 = vectordot(var_05,param_02) * param_02; + var_07 = var_05 - var_06; + var_08 = var_07 + var_06 / level.dangerovalscale[param_03]; + var_09 = lengthsquared(var_08); + if(var_09 > level.dangermaxradius[param_03] * level.dangermaxradius[param_03]) + { + return 0; + } + + if(var_09 < level.dangerminradius[param_03] * level.dangerminradius[param_03]) + { + return 1; + } + + var_0A = sqrt(var_09); + var_0B = var_0A - level.dangerminradius[param_03] / level.dangermaxradius[param_03] - level.dangerminradius[param_03]; + return 1 - var_0B; +} + +//Function Number: 12 +pointisinairstrikearea(param_00,param_01,param_02,param_03) +{ + return distance2d(param_00,param_01) <= level.dangermaxradius[param_03] * 1.25; +} + +//Function Number: 13 +losradiusdamage(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + var_07 = maps\mp\gametypes\_weapons::getdamageableents(param_00,param_01,1); + glassradiusdamage(param_00,param_01,param_02,param_03); + for(var_08 = 0;var_08 < var_07.size;var_08++) + { + if(var_07[var_08].entity == self) + { + continue; + } + + var_09 = distance(param_00,var_07[var_08].damagecenter); + if(var_07[var_08].isplayer || isdefined(var_07[var_08].issentry) && var_07[var_08].issentry) + { + var_0A = !bullettracepassed(var_07[var_08].entity.origin,var_07[var_08].entity.origin + (0,0,130),0,undefined); + if(var_0A) + { + var_0A = !bullettracepassed(var_07[var_08].entity.origin + (0,0,130),param_00 + (0,0,114),0,undefined); + if(var_0A) + { + var_09 = var_09 * 4; + if(var_09 > param_01) + { + continue; + } + } + } + } + + var_07[var_08].damage = int(param_02 + param_03 - param_02 * var_09 / param_01); + var_07[var_08].pos = param_00; + var_07[var_08].damageowner = param_04; + var_07[var_08].einflictor = param_05; + level.airstrikedamagedents[level.airstrikedamagedentscount] = var_07[var_08]; + level.airstrikedamagedentscount++; + } + + thread airstrikedamageentsthread(param_06); +} + +//Function Number: 14 +airstrikedamageentsthread(param_00) +{ + self notify("airstrikeDamageEntsThread"); + self endon("airstrikeDamageEntsThread"); + while(level.airstrikedamagedentsindex < level.airstrikedamagedentscount) + { + if(!isdefined(level.airstrikedamagedents[level.airstrikedamagedentsindex])) + { + continue; + } + + var_01 = level.airstrikedamagedents[level.airstrikedamagedentsindex]; + if(!isdefined(var_01.entity)) + { + continue; + } + + if(!var_01.isplayer || isalive(var_01.entity)) + { + var_01 maps\mp\gametypes\_weapons::damageent(var_01.einflictor,var_01.damageowner,var_01.damage,"MOD_PROJECTILE_SPLASH",param_00,var_01.pos,vectornormalize(var_01.damagecenter - var_01.pos)); + level.airstrikedamagedents[level.airstrikedamagedentsindex] = undefined; + if(var_01.isplayer) + { + wait 0.05; + } + + continue; + } + + level.airstrikedamagedents[level.airstrikedamagedentsindex] = undefined; + level.airstrikedamagedentsindex++; + } +} + +//Function Number: 15 +radiusartilleryshellshock(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = level.players; + foreach(var_07 in level.players) + { + if(!isalive(var_07)) + { + continue; + } + + if(var_07.team == param_04 || var_07.team == "spectator") + { + continue; + } + + var_08 = var_07.origin + (0,0,32); + var_09 = distance(param_00,var_08); + if(var_09 > param_01) + { + continue; + } + + var_0A = int(param_02 + param_03 - param_02 * var_09 / param_01); + var_07 thread artilleryshellshock("default",var_0A); + } +} + +//Function Number: 16 +artilleryshellshock(param_00,param_01) +{ + self endon("disconnect"); + if(isdefined(self.beingartilleryshellshocked) && self.beingartilleryshellshocked) + { + return; + } + + self.beingartilleryshellshocked = 1; + self shellshock(param_00,param_01); + wait param_01 + 1; + self.beingartilleryshellshocked = 0; +} + +//Function Number: 17 +dobomberstrike(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09) +{ + if(!isdefined(param_01)) + { + return; + } + + var_0A = 100; + var_0B = 150; + var_0C = param_04 + (randomfloat(2) - 1 * var_0A,randomfloat(2) - 1 * var_0A,0); + var_0D = param_05 + (randomfloat(2) - 1 * var_0B,randomfloat(2) - 1 * var_0B,0); + var_0E = spawnplane(param_01,"script_model",var_0C,"compass_objpoint_b2_airstrike_friendly","compass_objpoint_b2_airstrike_enemy"); + addplanetolist(var_0E); + var_0E thread handledeath(); + var_0E playloopsound("veh_b2_dist_loop"); + var_0E setmodel("vehicle_b2_bomber"); + var_0E thread handleemp(param_01); + var_0E.lifeid = param_00; + var_0E.angles = param_08; + var_0F = anglestoforward(param_08); + var_0E moveto(var_0D,param_07,0,0); + thread stealthbomber_killcam(var_0E,var_0D,param_07,param_09); + thread bomberdropbombs(var_0E,param_03,param_01); + var_0E endon("death"); + wait param_07 * 0.65; + removeplanefromlist(var_0E); + var_0E notify("delete"); + var_0E delete(); +} + +//Function Number: 18 +bomberdropbombs(param_00,param_01,param_02) +{ + param_00 endon("death"); + while(!targetisclose(param_00,param_01,5000)) + { + wait 0.05; + } + + var_03 = 1; + var_04 = 0; + param_00 notify("start_bombing"); + param_00 thread playbombfx(); + for(var_05 = targetgetdist(param_00,param_01);var_05 < 5000;var_05 = targetgetdist(param_00,param_01)) + { + if(var_05 < 1500 && !var_04) + { + param_00 playsound("veh_b2_sonic_boom"); + var_04 = 1; + } + + var_03 = !var_03; + if(var_05 < 4500) + { + param_00 thread callstrike_bomb(param_00.origin,param_02,(0,0,0),var_03); + } + + wait 0.1; + } + + param_00 notify("stop_bombing"); +} + +//Function Number: 19 +playbombfx() +{ + self endon("stop_bombing"); + self endon("death"); + for(;;) + { + playfxontag(level.stealthbombfx,self,"tag_left_alamo_missile"); + playfxontag(level.stealthbombfx,self,"tag_right_alamo_missile"); + wait 0.5; + } +} + +//Function Number: 20 +stealthbomber_killcam(param_00,param_01,param_02,param_03) +{ + param_00 waittill("start_bombing"); + var_04 = anglestoforward(param_00.angles); + var_05 = spawn("script_model",param_00.origin + (0,0,100) - var_04 * 200); + param_00.killcament = var_05; + param_00.killcament setscriptmoverkillcam("airstrike"); + param_00.airstriketype = param_03; + var_05.starttime = gettime(); + var_05 thread deleteaftertime(15); + var_05 linkto(param_00,"tag_origin",(-256,768,768),(0,0,0)); +} + +//Function Number: 21 +callstrike_bomb(param_00,param_01,param_02,param_03) +{ + if(!isdefined(param_01) || param_01 maps\mp\_utility::isemped() || param_01 maps\mp\_utility::isairdenied()) + { + self notify("stop_bombing"); + return; + } + + var_04 = 512; + var_05 = (0,randomint(360),0); + var_06 = param_00 + anglestoforward(var_05) * randomfloat(var_04); + var_07 = bullettrace(var_06,var_06 + (0,0,-10000),0,undefined); + var_06 = var_07["position"]; + var_08 = distance(param_00,var_06); + if(var_08 > 5000) + { + return; + } + + wait 0.85 * var_08 / 2000; + if(!isdefined(param_01) || param_01 maps\mp\_utility::isemped() || param_01 maps\mp\_utility::isairdenied()) + { + self notify("stop_bombing"); + return; + } + + if(param_03) + { + playfx(level.mortareffect,var_06); + playrumbleonposition("grenade_rumble",var_06); + earthquake(1,0.6,var_06,2000); + } + + thread maps\mp\_utility::playsoundinspace("exp_airstrike_bomb",var_06); + radiusartilleryshellshock(var_06,512,8,4,param_01.team); + losradiusdamage(var_06 + (0,0,16),896,300,50,param_01,self,"stealth_bomb_mp"); +} + +//Function Number: 22 +doplanestrike(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09) +{ + if(!isdefined(param_01)) + { + return; + } + + var_0A = 100; + var_0B = 150; + var_0C = param_04 + (randomfloat(2) - 1 * var_0A,randomfloat(2) - 1 * var_0A,0); + var_0D = param_05 + (randomfloat(2) - 1 * var_0B,randomfloat(2) - 1 * var_0B,0); + if(param_09 == "harrier_airstrike") + { + var_0E = spawnplane(param_01,"script_model",var_0C,"hud_minimap_harrier_green","hud_minimap_harrier_red"); + } + else + { + var_0E = spawnplane(param_02,"script_model",var_0D,"compass_objpoint_airstrike_friendly","compass_objpoint_airstrike_busy"); + } + + addplanetolist(var_0E); + var_0E thread handledeath(); + if(param_09 == "harrier_airstrike") + { + if(param_01.team == "allies") + { + var_0E setmodel("vehicle_av8b_harrier_jet_mp"); + } + else + { + var_0E setmodel("vehicle_av8b_harrier_jet_opfor_mp"); + } + } + else + { + var_0E setmodel("vehicle_mig29_desert"); + } + + var_0E playloopsound("veh_mig29_dist_loop"); + var_0E thread handleemp(param_01); + var_0E.lifeid = param_00; + var_0E.angles = param_08; + var_0F = anglestoforward(param_08); + var_0E thread playplanefx(); + var_0E moveto(var_0D,param_07,0,0); + thread callstrike_bombeffect(var_0E,var_0D,param_07,param_06 - 1,param_01,param_02,param_09); + var_0E endon("death"); + wait param_07; + removeplanefromlist(var_0E); + var_0E notify("delete"); + var_0E delete(); +} + +//Function Number: 23 +handledeath() +{ + level endon("game_ended"); + self endon("delete"); + self waittill("death"); + var_00 = anglestoforward(self.angles) * 200; + playfx(level.harrier_deathfx,self.origin,var_00); + removeplanefromlist(self); + self delete(); +} + +//Function Number: 24 +addplanetolist(param_00) +{ + level.planes[level.planes.size] = param_00; +} + +//Function Number: 25 +removeplanefromlist(param_00) +{ + for(var_01 = 0;var_01 < level.planes.size;var_01++) + { + if(isdefined(level.planes[var_01]) && level.planes[var_01] == param_00) + { + level.planes[var_01] = undefined; + } + } +} + +//Function Number: 26 +callstrike_bombeffect(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + param_00 endon("death"); + wait param_03; + if(!isdefined(param_04) || param_04 maps\mp\_utility::isemped() || param_04 maps\mp\_utility::isairdenied()) + { + return; + } + + param_00 playsound("veh_mig29_sonic_boom"); + var_07 = anglestoforward(param_00.angles); + var_08 = spawnbomb(param_00.origin,param_00.angles); + var_08 movegravity(anglestoforward(param_00.angles) * 4666.667,3); + var_08.lifeid = param_05; + var_09 = spawn("script_model",param_00.origin + (0,0,100) - var_07 * 200); + var_08.killcament = var_09; + var_08.killcament setscriptmoverkillcam("airstrike"); + var_08.airstriketype = param_06; + var_09.starttime = gettime(); + var_09 thread deleteaftertime(15); + var_09.angles = var_07; + var_09 moveto(param_01 + (0,0,100),param_02,0,0); + wait 0.4; + var_09 moveto(var_09.origin + var_07 * 4000,1,0,0); + wait 0.45; + var_09 moveto(var_09.origin + var_07 + (0,0,-0.2) * 3500,2,0,0); + wait 0.15; + var_0A = spawn("script_model",var_08.origin); + var_0A setmodel("tag_origin"); + var_0A.origin = var_08.origin; + var_0A.angles = var_08.angles; + var_08 setmodel("tag_origin"); + wait 0.1; + var_0B = var_0A.origin; + var_0C = var_0A.angles; + if(level.splitscreen) + { + playfxontag(level.var_1A8,var_0A,"tag_origin"); + } + else + { + playfxontag(level.var_3443,var_0A,"tag_origin"); + } + + wait 0.05; + var_09 moveto(var_09.origin + var_07 + (0,0,-0.25) * 2500,2,0,0); + wait 0.25; + var_09 moveto(var_09.origin + var_07 + (0,0,-0.35) * 2000,2,0,0); + wait 0.2; + var_09 moveto(var_09.origin + var_07 + (0,0,-0.45) * 1500,2,0,0); + wait 0.5; + var_0D = 12; + var_0E = 5; + var_0F = 55; + var_10 = var_0F - var_0E / var_0D; + var_11 = (0,0,0); + for(var_12 = 0;var_12 < var_0D;var_12++) + { + var_13 = anglestoforward(var_0C + (var_0F - var_10 * var_12,randomint(10) - 5,0)); + var_14 = var_0B + var_13 * 10000; + var_15 = bullettrace(var_0B,var_14,0,undefined); + var_16 = var_15["position"]; + var_11 = var_11 + var_16; + playfx(level.airstrikessfx,var_16); + thread losradiusdamage(var_16 + (0,0,16),512,200,30,param_04,var_08,"artillery_mp"); + if(var_12 % 3 == 0) + { + thread maps\mp\_utility::playsoundinspace("exp_airstrike_bomb",var_16); + playrumbleonposition("artillery_rumble",var_16); + earthquake(0.7,0.75,var_16,1000); + } + + wait 0.05; + } + + var_11 = var_11 / var_0D + (0,0,128); + var_09 moveto(var_08.killcament.origin * 0.35 + var_11 * 0.65,1.5,0,0.5); + wait 5; + var_0A delete(); + var_08 delete(); +} + +//Function Number: 27 +spawnbomb(param_00,param_01) +{ + var_02 = spawn("script_model",param_00); + var_02.angles = param_01; + var_02 setmodel("projectile_cbu97_clusterbomb"); + return var_02; +} + +//Function Number: 28 +deleteaftertime(param_00) +{ + self endon("death"); + wait 10; + self delete(); +} + +//Function Number: 29 +playplanefx() +{ + self endon("death"); + wait 0.5; + playfxontag(level.fx_airstrike_afterburner,self,"tag_engine_right"); + wait 0.5; + playfxontag(level.fx_airstrike_afterburner,self,"tag_engine_left"); + wait 0.5; + playfxontag(level.fx_airstrike_contrail,self,"tag_right_wingtip"); + wait 0.5; + playfxontag(level.fx_airstrike_contrail,self,"tag_left_wingtip"); +} + +//Function Number: 30 +callstrike(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = undefined; + var_06 = 0; + var_07 = (0,param_03,0); + var_05 = getent("airstrikeheight","targetname"); + if(param_04 == "stealth_airstrike") + { + thread maps\mp\_utility::teamplayercardsplash("used_stealth_airstrike",param_01,param_01.team); + var_08 = 12000; + var_09 = 2000; + if(!isdefined(var_05)) + { + var_0A = 950; + var_06 = 1500; + if(isdefined(level.airstrikeheightscale)) + { + var_0A = var_0A * level.airstrikeheightscale; + } + } + else + { + var_0A = var_06.origin[2]; + if(getdvar("mapname") == "mp_exchange") + { + var_0A = var_0A + 1024; + } + + var_06 = getexplodedistance(var_0A); + } + } + else + { + var_08 = 24000; + var_09 = 7000; + if(!isdefined(var_06)) + { + var_0A = 850; + var_06 = 1500; + if(isdefined(level.airstrikeheightscale)) + { + var_0A = var_0A * level.airstrikeheightscale; + } + } + else + { + var_0A = var_06.origin[2]; + var_06 = getexplodedistance(var_0A); + } + } + + var_0B = param_02 + anglestoforward(var_07) * -1 * var_08; + if(isdefined(var_05)) + { + var_0B = var_0B * (1,1,0); + } + + var_0B = var_0B + (0,0,var_0A); + if(param_04 == "stealth_airstrike") + { + var_0C = param_02 + anglestoforward(var_07) * var_08 * 4; + } + else + { + var_0C = param_03 + anglestoforward(var_08) * var_09; + } + + if(isdefined(var_05)) + { + var_0C = var_0C * (1,1,0); + } + + var_0C = var_0C + (0,0,var_0A); + var_0D = length(var_0B - var_0C); + var_0E = var_0D / var_09; + var_0D = abs(var_0D / 2 + var_06); + var_0F = var_0D / var_09; + param_01 endon("disconnect"); + var_10 = param_00; + level.airstrikedamagedents = []; + level.airstrikedamagedentscount = 0; + level.airstrikedamagedentsindex = 0; + if(param_04 == "harrier_airstrike") + { + level thread doplanestrike(param_00,param_01,var_10,param_02,var_0B + (0,0,randomint(500)),var_0C + (0,0,randomint(500)),var_0F,var_0E,var_07,param_04); + wait randomfloatrange(1.5,2.5); + maps\mp\gametypes\_hostmigration::waittillhostmigrationdone(); + level thread doplanestrike(param_00,param_01,var_10,param_02,var_0B + (0,0,randomint(200)),var_0C + (0,0,randomint(200)),var_0F,var_0E,var_07,param_04); + wait randomfloatrange(1.5,2.5); + maps\mp\gametypes\_hostmigration::waittillhostmigrationdone(); + var_11 = maps\mp\killstreaks\_harrier::beginharrier(param_00,var_0B,param_02); + param_01 thread maps\mp\killstreaks\_harrier::defendlocation(var_11); + return var_11; + } + + if(var_05 == "stealth_airstrike") + { + level thread dobomberstrike(param_01,param_02,var_11,param_03,var_0C + (0,0,randomint(1000)),var_0D + (0,0,randomint(1000)),var_10,var_0F,var_08,var_05); + return; + } + + level thread doplanestrike(param_01,param_02,var_11,param_03,var_0C + (0,0,randomint(500)),var_0D + (0,0,randomint(500)),var_10,var_0F,var_08,var_05); + wait randomfloatrange(1.5,2.5); + maps\mp\gametypes\_hostmigration::waittillhostmigrationdone(); + level thread doplanestrike(param_01,param_02,var_11,param_03,var_0C + (0,0,randomint(200)),var_0D + (0,0,randomint(200)),var_10,var_0F,var_08,var_05); + wait randomfloatrange(1.5,2.5); + maps\mp\gametypes\_hostmigration::waittillhostmigrationdone(); + level thread doplanestrike(param_01,param_02,var_11,param_03,var_0C + (0,0,randomint(200)),var_0D + (0,0,randomint(200)),var_10,var_0F,var_08,var_05); + if(var_05 == "super_airstrike") + { + wait randomfloatrange(2.5,3.5); + maps\mp\gametypes\_hostmigration::waittillhostmigrationdone(); + level thread doplanestrike(param_01,param_02,var_11,param_03,var_0C + (0,0,randomint(200)),var_0D + (0,0,randomint(200)),var_10,var_0F,var_08,var_05); + return; + } +} + +//Function Number: 31 +getexplodedistance(param_00) +{ + var_01 = 850; + var_02 = 1500; + var_03 = var_01 / param_00; + var_04 = var_03 * var_02; + return var_04; +} + +//Function Number: 32 +targetgetdist(param_00,param_01) +{ + var_02 = targetisinfront(param_00,param_01); + if(var_02) + { + var_03 = 1; + } + else + { + var_03 = -1; + } + + var_04 = common_scripts\utility::flat_origin(param_00.origin); + var_05 = var_04 + anglestoforward(common_scripts\utility::flat_angle(param_00.angles)) * var_03 * 100000; + var_06 = pointonsegmentnearesttopoint(var_04,var_05,param_01); + var_07 = distance(var_04,var_06); + return var_07; +} + +//Function Number: 33 +targetisclose(param_00,param_01,param_02) +{ + if(!isdefined(param_02)) + { + param_02 = 3000; + } + + var_03 = targetisinfront(param_00,param_01); + if(var_03) + { + var_04 = 1; + } + else + { + var_04 = -1; + } + + var_05 = common_scripts\utility::flat_origin(param_00.origin); + var_06 = var_05 + anglestoforward(common_scripts\utility::flat_angle(param_00.angles)) * var_04 * 100000; + var_07 = pointonsegmentnearesttopoint(var_05,var_06,param_01); + var_08 = distance(var_05,var_07); + if(var_08 < param_02) + { + return 1; + } + + return 0; +} + +//Function Number: 34 +targetisinfront(param_00,param_01) +{ + var_02 = anglestoforward(common_scripts\utility::flat_angle(param_00.angles)); + var_03 = vectornormalize(common_scripts\utility::flat_origin(param_01) - param_00.origin); + var_04 = vectordot(var_02,var_03); + if(var_04 > 0) + { + return 1; + } + + return 0; +} + +//Function Number: 35 +waitforairstrikecancel() +{ + self waittill("cancel_location"); + self setblurforplayer(0,0.3); +} + +//Function Number: 36 +selectairstrikelocation(param_00,param_01) +{ + var_02 = level.mapsize / 6.46875; + if(level.splitscreen) + { + var_02 = var_02 * 1.5; + } + + var_03 = 0; + switch(param_01) + { + case "precision_airstrike": + var_03 = 1; + self playlocalsound(game["voice"][self.team] + "KS_hqr_airstrike"); + break; + + case "stealth_airstrike": + var_03 = 1; + self playlocalsound(game["voice"][self.team] + "KS_hqr_bomber"); + break; + } + + maps\mp\_utility::_beginlocationselection(param_01,"map_artillery_selector",var_03,var_02); + self endon("stop_location_selection"); + self waittill("confirm_location",var_04,var_05); + if(!var_03) + { + var_05 = randomint(360); + } + + self setblurforplayer(0,0.3); + if(param_01 == "harrier_airstrike" && level.planes > 1) + { + self notify("cancel_location"); + self iprintlnbold(&"MP_AIR_SPACE_TOO_CROWDED"); + return 0; + } + + thread airstrikemadeselectionvo(param_01); + maps\mp\_matchdata::logkillstreakevent(param_01,var_04); + thread finishairstrikeusage(param_00,var_04,var_05,param_01); + return 1; +} + +//Function Number: 37 +finishairstrikeusage(param_00,param_01,param_02,param_03) +{ + self notify("used"); + var_04 = bullettrace(level.mapcenter + (0,0,1000000),level.mapcenter,0,undefined); + param_01 = (param_01[0],param_01[1],var_04["position"][2] - 514); + thread doairstrike(param_00,param_01,param_02,self,self.pers["team"],param_03); +} + +//Function Number: 38 +useairstrike(param_00,param_01,param_02) +{ +} + +//Function Number: 39 +handleemp(param_00) +{ + self endon("death"); + if(param_00 maps\mp\_utility::isemped()) + { + self notify("death"); + return; + } + + for(;;) + { + level waittill("emp_update"); + if(!param_00 maps\mp\_utility::isemped()) + { + continue; + } + + self notify("death"); + } +} + +//Function Number: 40 +airstrikemadeselectionvo(param_00) +{ + self endon("death"); + self endon("disconnect"); + switch(param_00) + { + case "precision_airstrike": + self playlocalsound(game["voice"][self.team] + "KS_ast_inbound"); + break; + + case "stealth_airstrike": + self playlocalsound(game["voice"][self.team] + "KS_bmb_inbound"); + break; + } +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/killstreaks/_autosentry.gsc b/MW3/PC/MP/maps/mp/killstreaks/_autosentry.gsc new file mode 100644 index 0000000..ca3f3c5 --- /dev/null +++ b/MW3/PC/MP/maps/mp/killstreaks/_autosentry.gsc @@ -0,0 +1,1606 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\killstreaks\_autosentry.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 56 + * Decompile Time: 1119 ms + * Timestamp: 10/27/2023 2:13:54 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level.sentrytype = []; + level.sentrytype["sentry_minigun"] = "sentry"; + level.sentrytype["sam_turret"] = "sam_turret"; + level.killstreakfuncs[level.sentrytype["sentry_minigun"]] = ::tryuseautosentry; + level.killstreakfuncs[level.sentrytype["sam_turret"]] = ::tryusesam; + level.sentrysettings = []; + level.sentrysettings["sentry_minigun"] = spawnstruct(); + level.sentrysettings["sentry_minigun"].health = 999999; + level.sentrysettings["sentry_minigun"].maxhealth = 1000; + level.sentrysettings["sentry_minigun"].burstmin = 20; + level.sentrysettings["sentry_minigun"].burstmax = 120; + level.sentrysettings["sentry_minigun"].pausemin = 0.15; + level.sentrysettings["sentry_minigun"].pausemax = 0.35; + level.sentrysettings["sentry_minigun"].sentrymodeon = "sentry"; + level.sentrysettings["sentry_minigun"].sentrymodeoff = "sentry_offline"; + level.sentrysettings["sentry_minigun"].timeout = 90; + level.sentrysettings["sentry_minigun"].spinuptime = 0.05; + level.sentrysettings["sentry_minigun"].overheattime = 8; + level.sentrysettings["sentry_minigun"].cooldowntime = 0.1; + level.sentrysettings["sentry_minigun"].fxtime = 0.3; + level.sentrysettings["sentry_minigun"].streakname = "sentry"; + level.sentrysettings["sentry_minigun"].weaponinfo = "sentry_minigun_mp"; + level.sentrysettings["sentry_minigun"].modelbase = "sentry_minigun_weak"; + level.sentrysettings["sentry_minigun"].modelplacement = "sentry_minigun_weak_obj"; + level.sentrysettings["sentry_minigun"].modelplacementfailed = "sentry_minigun_weak_obj_red"; + level.sentrysettings["sentry_minigun"].modeldestroyed = "sentry_minigun_weak_destroyed"; + level.sentrysettings["sentry_minigun"].hintstring = &"SENTRY_PICKUP"; + level.sentrysettings["sentry_minigun"].headicon = 1; + level.sentrysettings["sentry_minigun"].teamsplash = "used_sentry"; + level.sentrysettings["sentry_minigun"].shouldsplash = 0; + level.sentrysettings["sentry_minigun"].vodestroyed = "sentry_destroyed"; + level.sentrysettings["sam_turret"] = spawnstruct(); + level.sentrysettings["sam_turret"].health = 999999; + level.sentrysettings["sam_turret"].maxhealth = 1000; + level.sentrysettings["sam_turret"].burstmin = 20; + level.sentrysettings["sam_turret"].burstmax = 120; + level.sentrysettings["sam_turret"].pausemin = 0.15; + level.sentrysettings["sam_turret"].pausemax = 0.35; + level.sentrysettings["sam_turret"].sentrymodeon = "sentry"; + level.sentrysettings["sam_turret"].sentrymodeoff = "sentry_offline"; + level.sentrysettings["sam_turret"].timeout = 90; + level.sentrysettings["sam_turret"].spinuptime = 0.05; + level.sentrysettings["sam_turret"].overheattime = 8; + level.sentrysettings["sam_turret"].cooldowntime = 0.1; + level.sentrysettings["sam_turret"].fxtime = 0.3; + level.sentrysettings["sam_turret"].streakname = "sam_turret"; + level.sentrysettings["sam_turret"].weaponinfo = "sam_mp"; + level.sentrysettings["sam_turret"].modelbase = "mp_sam_turret"; + level.sentrysettings["sam_turret"].modelplacement = "mp_sam_turret_placement"; + level.sentrysettings["sam_turret"].modelplacementfailed = "mp_sam_turret_placement_failed"; + level.sentrysettings["sam_turret"].modeldestroyed = "mp_sam_turret"; + level.sentrysettings["sam_turret"].hintstring = &"SENTRY_PICKUP"; + level.sentrysettings["sam_turret"].headicon = 1; + level.sentrysettings["sam_turret"].teamsplash = "used_sam_turret"; + level.sentrysettings["sam_turret"].shouldsplash = 0; + level.sentrysettings["sam_turret"].vodestroyed = "sam_destroyed"; + foreach(var_01 in level.sentrysettings) + { + precacheitem(var_01.weaponinfo); + precachemodel(var_01.modelbase); + precachemodel(var_01.modelplacement); + precachemodel(var_01.modelplacementfailed); + precachemodel(var_01.modeldestroyed); + precachestring(var_01.hintstring); + if(isdefined(var_01.ownerhintstring)) + { + precachestring(var_01.ownerhintstring); + } + } + + precacheitem("sam_projectile_mp"); + level._effect["sentry_overheat_mp"] = loadfx("smoke/sentry_turret_overheat_smoke"); + level._effect["sentry_explode_mp"] = loadfx("explosions/sentry_gun_explosion"); + level._effect["sentry_smoke_mp"] = loadfx("smoke/car_damage_blacksmoke"); +} + +//Function Number: 2 +tryuseautosentry(param_00) +{ + var_01 = givesentry("sentry_minigun"); + if(var_01) + { + maps\mp\_matchdata::logkillstreakevent(level.sentrysettings["sentry_minigun"].streakname,self.origin); + } + + return var_01; +} + +//Function Number: 3 +tryusesam(param_00) +{ + var_01 = givesentry("sam_turret"); + if(var_01) + { + maps\mp\_matchdata::logkillstreakevent(level.sentrysettings["sam_turret"].streakname,self.origin); + } + + return var_01; +} + +//Function Number: 4 +givesentry(param_00) +{ + if(!maps\mp\_utility::validateusestreak()) + { + return 0; + } + + self.last_sentry = param_00; + var_01 = createsentryforplayer(param_00,self); + removeperks(); + var_02 = setcarryingsentry(var_01,1); + thread waitrestoreperks(); + self.iscarrying = 0; + if(isdefined(var_01)) + { + return 1; + } + + return 0; +} + +//Function Number: 5 +setcarryingsentry(param_00,param_01) +{ + self endon("death"); + self endon("disconnect"); + param_00 sentry_setcarried(self); + common_scripts\utility::_disableweapon(); + self notifyonplayercommand("place_sentry","+attack"); + self notifyonplayercommand("place_sentry","+attack_akimbo_accessible"); + self notifyonplayercommand("cancel_sentry","+actionslot 4"); + for(;;) + { + var_02 = common_scripts\utility::waittill_any_return("place_sentry","cancel_sentry","force_cancel_placement"); + if(var_02 == "cancel_sentry" || var_02 == "force_cancel_placement") + { + if(!param_01 && var_02 == "cancel_sentry") + { + continue; + } + + var_03 = maps\mp\killstreaks\_killstreaks::getkillstreakweapon(level.sentrysettings[param_00.sentrytype].streakname); + if(isdefined(self.killstreakindexweapon) && var_03 == maps\mp\killstreaks\_killstreaks::getkillstreakweapon(self.pers["killstreaks"][self.killstreakindexweapon].streakname) && !self getweaponslistitems().size) + { + maps\mp\_utility::_giveweapon(var_03,0); + maps\mp\_utility::_setactionslot(4,"weapon",var_03); + } + + param_00 sentry_setcancelled(); + common_scripts\utility::_enableweapon(); + return 0; + } + + if(!param_01.canbeplaced) + { + continue; + } + + param_01 sentry_setplaced(); + common_scripts\utility::_enableweapon(); + return 1; + } +} + +//Function Number: 6 +removeweapons() +{ + if(self hasweapon("riotshield_mp")) + { + self.restoreweapon = "riotshield_mp"; + self takeweapon("riotshield_mp"); + } +} + +//Function Number: 7 +removeperks() +{ + if(maps\mp\_utility::_hasperk("specialty_explosivebullets")) + { + self.restoreperk = "specialty_explosivebullets"; + maps\mp\_utility::_unsetperk("specialty_explosivebullets"); + } +} + +//Function Number: 8 +restoreweapons() +{ + if(isdefined(self.restoreweapon)) + { + maps\mp\_utility::_giveweapon(self.restoreweapon); + self.restoreweapon = undefined; + } +} + +//Function Number: 9 +restoreperks() +{ + if(isdefined(self.restoreperk)) + { + maps\mp\_utility::giveperk(self.restoreperk,0); + self.restoreperk = undefined; + } +} + +//Function Number: 10 +waitrestoreperks() +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + wait 0.05; + restoreperks(); +} + +//Function Number: 11 +createsentryforplayer(param_00,param_01) +{ + var_02 = spawnturret("misc_turret",param_01.origin,level.sentrysettings[param_00].weaponinfo); + var_02.angles = param_01.angles; + var_02 sentry_initsentry(param_00,param_01); + return var_02; +} + +//Function Number: 12 +sentry_initsentry(param_00,param_01) +{ + self.sentrytype = param_00; + self.canbeplaced = 1; + self setmodel(level.sentrysettings[self.sentrytype].modelbase); + self.shouldsplash = 1; + self setcandamage(1); + switch(param_00) + { + case "gl_turret": + case "minigun_turret": + self setleftarc(80); + self setrightarc(80); + self setbottomarc(50); + self setdefaultdroppitch(0); + self.originalowner = param_01; + break; + + case "sam_turret": + self maketurretinoperable(); + self setleftarc(180); + self setrightarc(180); + self settoparc(80); + self setdefaultdroppitch(-89); + self.laser_on = 0; + var_02 = spawn("script_model",self gettagorigin("tag_laser")); + var_02 linkto(self); + self.killcament = var_02; + self.killcament setscriptmoverkillcam("explosive"); + break; + + default: + self maketurretinoperable(); + self setdefaultdroppitch(-89); + break; + } + + self setturretmodechangewait(1); + sentry_setinactive(); + sentry_setowner(param_01); + thread sentry_handledamage(); + thread sentry_handledeath(); + thread sentry_timeout(); + switch(param_00) + { + case "minigun_turret": + self.momentum = 0; + self.heatlevel = 0; + self.overheated = 0; + thread sentry_heatmonitor(); + break; + + case "gl_turret": + self.momentum = 0; + self.heatlevel = 0; + self.cooldownwaittime = 0; + self.overheated = 0; + thread turret_heatmonitor(); + thread turret_coolmonitor(); + break; + + case "sam_turret": + thread sentry_handleuse(); + thread sentry_beepsounds(); + break; + + default: + thread sentry_handleuse(); + thread sentry_attacktargets(); + thread sentry_beepsounds(); + break; + } +} + +//Function Number: 13 +sentry_handledamage() +{ + self endon("death"); + level endon("game_ended"); + self.health = level.sentrysettings[self.sentrytype].health; + self.maxhealth = level.sentrysettings[self.sentrytype].maxhealth; + self.damagetaken = 0; + for(;;) + { + self waittill("damage",var_00,var_01,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09); + if(!maps\mp\gametypes\_weapons::friendlyfirecheck(self.owner,var_01)) + { + continue; + } + + if(isdefined(var_08) && var_08 & level.idflags_penetration) + { + self.wasdamagedfrombulletpenetration = 1; + } + + switch(var_09) + { + case "stealth_bomb_mp": + case "artillery_mp": + var_00 = var_00 * 4; + break; + + case "bomb_site_mp": + var_00 = self.maxhealth; + break; + } + + if(var_04 == "MOD_MELEE") + { + self.damagetaken = self.damagetaken + self.maxhealth; + } + + var_0A = var_00; + if(isplayer(var_01)) + { + var_01 maps\mp\gametypes\_damagefeedback::updatedamagefeedback("sentry"); + if(var_01 maps\mp\_utility::_hasperk("specialty_armorpiercing")) + { + var_0A = var_00 * level.armorpiercingmod; + } + } + + if(isdefined(var_01.owner) && isplayer(var_01.owner)) + { + var_01.owner maps\mp\gametypes\_damagefeedback::updatedamagefeedback("sentry"); + } + + if(isdefined(var_09)) + { + switch(var_09) + { + case "javelin_mp": + case "stinger_mp": + case "remote_mortar_missile_mp": + case "remotemissile_projectile_mp": + case "ac130_40mm_mp": + case "ac130_105mm_mp": + self.var_30C8 = 1; + var_0A = self.maxhealth + 1; + break; + + case "stealth_bomb_mp": + case "artillery_mp": + self.var_30C8 = 0; + var_0A = var_0A + var_00 * 4; + break; + + case "bomb_site_mp": + case "emp_grenade_mp": + self.var_30C8 = 0; + var_0A = self.maxhealth + 1; + break; + } + } + + self.damagetaken = self.damagetaken + var_0A; + if(self.damagetaken >= self.maxhealth) + { + thread maps\mp\gametypes\_missions::vehiclekilled(self.owner,self,undefined,var_01,var_00,var_04,var_09); + if(isplayer(var_01) && !isdefined(self.owner) || var_01 != self.owner) + { + var_01 thread maps\mp\gametypes\_rank::giverankxp("kill",100,var_09,var_04); + var_01 notify("destroyed_killstreak"); + if(isdefined(self.uavremotemarkedby) && self.uavremotemarkedby != var_01) + { + self.uavremotemarkedby thread maps\mp\killstreaks\_remoteuav::remoteuav_processtaggedassist(); + } + } + + if(isdefined(self.owner)) + { + self.owner thread maps\mp\_utility::leaderdialogonplayer(level.sentrysettings[self.sentrytype].vodestroyed); + } + + self notify("death"); + return; + } + } +} + +//Function Number: 14 +sentry_watchdisabled() +{ + self endon("carried"); + self endon("death"); + level endon("game_ended"); + for(;;) + { + self waittill("emp_damage",var_00,var_01); + playfxontag(common_scripts\utility::getfx("sentry_explode_mp"),self,"tag_aim"); + self setdefaultdroppitch(40); + self setmode(level.sentrysettings[self.sentrytype].sentrymodeoff); + wait var_01; + self setdefaultdroppitch(-89); + self setmode(level.sentrysettings[self.sentrytype].sentrymodeon); + } +} + +//Function Number: 15 +sentry_handledeath() +{ + self waittill("death"); + if(!isdefined(self)) + { + return; + } + + self setmodel(level.sentrysettings[self.sentrytype].modeldestroyed); + sentry_setinactive(); + self setdefaultdroppitch(40); + self setsentryowner(undefined); + self setturretminimapvisible(0); + if(isdefined(self.ownertrigger)) + { + self.ownertrigger delete(); + } + + self playsound("sentry_explode"); + switch(self.sentrytype) + { + case "gl_turret": + case "minigun_turret": + self.forcedisable = 1; + self turretfiredisable(); + break; + + default: + break; + } + + if(isdefined(self.inuseby)) + { + playfxontag(common_scripts\utility::getfx("sentry_explode_mp"),self,"tag_origin"); + playfxontag(common_scripts\utility::getfx("sentry_smoke_mp"),self,"tag_aim"); + self.inuseby.turret_overheat_bar maps\mp\gametypes\_hud_util::destroyelem(); + self.inuseby restoreperks(); + self.inuseby restoreweapons(); + self notify("deleting"); + wait 1; + stopfxontag(common_scripts\utility::getfx("sentry_explode_mp"),self,"tag_origin"); + stopfxontag(common_scripts\utility::getfx("sentry_smoke_mp"),self,"tag_aim"); + } + else + { + playfxontag(common_scripts\utility::getfx("sentry_explode_mp"),self,"tag_aim"); + wait 1.5; + self playsound("sentry_explode_smoke"); + var_00 = 8; + while(var_00 > 0) + { + playfxontag(common_scripts\utility::getfx("sentry_smoke_mp"),self,"tag_aim"); + wait 0.4; + var_00 = var_00 - 0.4; + } + + self notify("deleting"); + } + + if(isdefined(self.killcament)) + { + self.killcament delete(); + } + + self delete(); +} + +//Function Number: 16 +sentry_handleuse() +{ + self endon("death"); + level endon("game_ended"); + for(;;) + { + self waittill("trigger",var_00); + if(!maps\mp\_utility::isreallyalive(var_00)) + { + continue; + } + + if(self.sentrytype == "sam_turret") + { + self setmode(level.sentrysettings[self.sentrytype].sentrymodeoff); + } + + var_00 setcarryingsentry(self,0); + } +} + +//Function Number: 17 +turret_handlepickup(param_00) +{ + self endon("disconnect"); + level endon("game_ended"); + param_00 endon("death"); + if(!isdefined(param_00.ownertrigger)) + { + return; + } + + var_01 = 0; + for(;;) + { + if(isalive(self) && self istouching(param_00.ownertrigger) && !isdefined(param_00.inuseby) && !isdefined(param_00.carriedby) && self isonground()) + { + if(self usebuttonpressed()) + { + if(isdefined(self.using_remote_turret) && self.using_remote_turret) + { + continue; + } + + var_01 = 0; + while(self usebuttonpressed()) + { + var_01 = var_01 + 0.05; + wait 0.05; + } + + if(var_01 >= 0.5) + { + continue; + } + + var_01 = 0; + while(!self usebuttonpressed() && var_01 < 0.5) + { + var_01 = var_01 + 0.05; + wait 0.05; + } + + if(var_01 >= 0.5) + { + continue; + } + + if(!maps\mp\_utility::isreallyalive(self)) + { + continue; + } + + if(isdefined(self.using_remote_turret) && self.using_remote_turret) + { + continue; + } + + param_00 setmode(level.sentrysettings[param_00.sentrytype].sentrymodeoff); + thread setcarryingsentry(param_00,0); + param_00.ownertrigger delete(); + return; + } + } + + wait 0.05; + } +} + +//Function Number: 18 +turret_handleuse() +{ + self notify("turret_handluse"); + self endon("turret_handleuse"); + self endon("deleting"); + level endon("game_ended"); + self.forcedisable = 0; + var_00 = (1,0.9,0.7); + var_01 = (1,0.65,0); + var_02 = (1,0.25,0); + for(;;) + { + self waittill("trigger",var_03); + if(isdefined(self.carriedby)) + { + continue; + } + + if(isdefined(self.inuseby)) + { + continue; + } + + if(!maps\mp\_utility::isreallyalive(var_03)) + { + continue; + } + + var_03 removeperks(); + var_03 removeweapons(); + self.inuseby = var_03; + self setmode(level.sentrysettings[self.sentrytype].sentrymodeoff); + sentry_setowner(var_03); + self setmode(level.sentrysettings[self.sentrytype].sentrymodeon); + var_03 thread turret_shotmonitor(self); + var_03.turret_overheat_bar = var_03 maps\mp\gametypes\_hud_util::createbar(var_00,100,6); + var_03.turret_overheat_bar maps\mp\gametypes\_hud_util::setpoint("CENTER","BOTTOM",0,-70); + var_03.turret_overheat_bar.alpha = 0.65; + var_03.turret_overheat_bar.bar.alpha = 0.65; + var_04 = 0; + for(;;) + { + if(!maps\mp\_utility::isreallyalive(var_03)) + { + self.inuseby = undefined; + var_03.turret_overheat_bar maps\mp\gametypes\_hud_util::destroyelem(); + break; + } + + if(!var_03 isusingturret()) + { + self notify("player_dismount"); + self.inuseby = undefined; + var_03.turret_overheat_bar maps\mp\gametypes\_hud_util::destroyelem(); + var_03 restoreperks(); + var_03 restoreweapons(); + self sethintstring(level.sentrysettings[self.sentrytype].hintstring); + self setmode(level.sentrysettings[self.sentrytype].sentrymodeoff); + sentry_setowner(self.originalowner); + self setmode(level.sentrysettings[self.sentrytype].sentrymodeon); + break; + } + + if(self.heatlevel >= level.sentrysettings[self.sentrytype].overheattime) + { + var_05 = 1; + } + else + { + var_05 = self.heatlevel / level.sentrysettings[self.sentrytype].overheattime; + } + + var_03.turret_overheat_bar maps\mp\gametypes\_hud_util::updatebar(var_05); + if(self.forcedisable || self.overheated) + { + self turretfiredisable(); + var_03.turret_overheat_bar.bar.color = var_02; + var_04 = 0; + } + else if(self.heatlevel > level.sentrysettings[self.sentrytype].overheattime * 0.75 && self.sentrytype == "minigun_turret") + { + var_03.turret_overheat_bar.bar.color = var_01; + if(randomintrange(0,10) < 6) + { + self turretfireenable(); + } + else + { + self turretfiredisable(); + } + + if(!var_04) + { + var_04 = 1; + thread playheatfx(); + } + } + else + { + var_03.turret_overheat_bar.bar.color = var_00; + self turretfireenable(); + var_04 = 0; + self notify("not_overheated"); + } + + wait 0.05; + } + + self setdefaultdroppitch(0); + } +} + +//Function Number: 19 +sentry_handleownerdisconnect() +{ + self endon("death"); + level endon("game_ended"); + self notify("sentry_handleOwner"); + self endon("sentry_handleOwner"); + self.owner common_scripts\utility::waittill_any("disconnect","joined_team","joined_spectators"); + self notify("death"); +} + +//Function Number: 20 +sentry_setowner(param_00) +{ + self.owner = param_00; + self setsentryowner(self.owner); + self setturretminimapvisible(1,self.sentrytype); + if(level.teambased) + { + self.team = self.owner.team; + self setturretteam(self.team); + } + + thread sentry_handleownerdisconnect(); +} + +//Function Number: 21 +sentry_setplaced() +{ + self setmodel(level.sentrysettings[self.sentrytype].modelbase); + if(self getmode() == "manual") + { + self setmode(level.sentrysettings[self.sentrytype].sentrymodeoff); + } + + self setsentrycarrier(undefined); + self setcandamage(1); + switch(self.sentrytype) + { + case "gl_turret": + case "minigun_turret": + self.angles = self.carriedby.angles; + if(isalive(self.originalowner)) + { + self.originalowner maps\mp\_utility::setlowermessage("pickup_hint",level.sentrysettings[self.sentrytype].ownerhintstring,3,undefined,undefined,undefined,undefined,undefined,1); + } + + self.ownertrigger = spawn("trigger_radius",self.origin + (0,0,1),0,105,64); + self.originalowner thread turret_handlepickup(self); + thread turret_handleuse(); + break; + + default: + break; + } + + sentry_makesolid(); + self.carriedby forceusehintoff(); + self.carriedby = undefined; + if(isdefined(self.owner)) + { + self.owner.iscarrying = 0; + } + + sentry_setactive(); + self playsound("sentry_gun_plant"); + self notify("placed"); +} + +//Function Number: 22 +sentry_setcancelled() +{ + self.carriedby forceusehintoff(); + if(isdefined(self.owner)) + { + self.owner.iscarrying = 0; + } + + self delete(); +} + +//Function Number: 23 +sentry_setcarried(param_00) +{ + if(isdefined(self.originalowner)) + { + } + else + { + } + + self setmodel(level.sentrysettings[self.sentrytype].modelplacement); + self setsentrycarrier(param_00); + self setcandamage(0); + sentry_makenotsolid(); + self.carriedby = param_00; + param_00.iscarrying = 1; + param_00 thread updatesentryplacement(self); + thread sentry_oncarrierdeath(param_00); + thread sentry_oncarrierdisconnect(param_00); + thread sentry_oncarrierchangedteam(param_00); + thread sentry_ongameended(); + self setdefaultdroppitch(-89); + sentry_setinactive(); + self notify("carried"); +} + +//Function Number: 24 +updatesentryplacement(param_00) +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + param_00 endon("placed"); + param_00 endon("death"); + param_00.canbeplaced = 1; + var_01 = -1; + for(;;) + { + var_02 = self canplayerplacesentry(); + param_00.origin = var_02["origin"]; + param_00.angles = var_02["angles"]; + param_00.canbeplaced = self isonground() && var_02["result"] && abs(param_00.origin[2] - self.origin[2]) < 10; + if(param_00.canbeplaced != var_01) + { + if(param_00.canbeplaced) + { + param_00 setmodel(level.sentrysettings[param_00.sentrytype].modelplacement); + self forceusehinton(&"SENTRY_PLACE"); + } + else + { + param_00 setmodel(level.sentrysettings[param_00.sentrytype].modelplacementfailed); + self forceusehinton(&"SENTRY_CANNOT_PLACE"); + } + } + + var_01 = param_00.canbeplaced; + wait 0.05; + } +} + +//Function Number: 25 +sentry_oncarrierdeath(param_00) +{ + self endon("placed"); + self endon("death"); + param_00 waittill("death"); + if(self.canbeplaced) + { + sentry_setplaced(); + return; + } + + self delete(); +} + +//Function Number: 26 +sentry_oncarrierdisconnect(param_00) +{ + self endon("placed"); + self endon("death"); + param_00 waittill("disconnect"); + self delete(); +} + +//Function Number: 27 +sentry_oncarrierchangedteam(param_00) +{ + self endon("placed"); + self endon("death"); + param_00 common_scripts\utility::waittill_any("joined_team","joined_spectators"); + self delete(); +} + +//Function Number: 28 +sentry_ongameended(param_00) +{ + self endon("placed"); + self endon("death"); + level waittill("game_ended"); + self delete(); +} + +//Function Number: 29 +sentry_setactive() +{ + self setmode(level.sentrysettings[self.sentrytype].sentrymodeon); + self setcursorhint("HINT_NOICON"); + self sethintstring(level.sentrysettings[self.sentrytype].hintstring); + if(level.sentrysettings[self.sentrytype].headicon) + { + if(level.teambased) + { + maps\mp\_entityheadicons::setteamheadicon(self.team,(0,0,65)); + } + else + { + maps\mp\_entityheadicons::setplayerheadicon(self.owner,(0,0,65)); + } + } + + self makeusable(); + foreach(var_01 in level.players) + { + switch(self.sentrytype) + { + case "gl_turret": + case "minigun_turret": + self enableplayeruse(var_01); + break; + + default: + var_02 = self getentitynumber(); + addtoturretlist(var_02); + if(var_01 == self.owner) + { + self enableplayeruse(var_01); + } + else + { + self disableplayeruse(var_01); + } + break; + } + } + + if(self.shouldsplash) + { + level thread maps\mp\_utility::teamplayercardsplash(level.sentrysettings[self.sentrytype].teamsplash,self.owner,self.owner.team); + self.shouldsplash = 0; + } + + if(self.sentrytype == "sam_turret") + { + thread sam_attacktargets(); + } + + thread sentry_watchdisabled(); +} + +//Function Number: 30 +sentry_setinactive() +{ + self setmode(level.sentrysettings[self.sentrytype].sentrymodeoff); + self makeunusable(); + var_00 = self getentitynumber(); + switch(self.sentrytype) + { + case "gl_turret": + break; + + default: + removefromturretlist(var_00); + break; + } + + if(level.teambased) + { + maps\mp\_entityheadicons::setteamheadicon("none",(0,0,0)); + return; + } + + if(isdefined(self.owner)) + { + maps\mp\_entityheadicons::setplayerheadicon(undefined,(0,0,0)); + } +} + +//Function Number: 31 +sentry_makesolid() +{ + self maketurretsolid(); +} + +//Function Number: 32 +sentry_makenotsolid() +{ + self setcontents(0); +} + +//Function Number: 33 +isfriendlytosentry(param_00) +{ + if(level.teambased && self.team == param_00.team) + { + return 1; + } + + return 0; +} + +//Function Number: 34 +addtoturretlist(param_00) +{ + level.turrets[param_00] = self; +} + +//Function Number: 35 +removefromturretlist(param_00) +{ + level.turrets[param_00] = undefined; +} + +//Function Number: 36 +sentry_attacktargets() +{ + self endon("death"); + level endon("game_ended"); + self.momentum = 0; + self.heatlevel = 0; + self.overheated = 0; + thread sentry_heatmonitor(); + for(;;) + { + common_scripts\utility::waittill_either("turretstatechange","cooled"); + if(self isfiringturret()) + { + thread sentry_burstfirestart(); + continue; + } + + sentry_spindown(); + thread sentry_burstfirestop(); + } +} + +//Function Number: 37 +sentry_timeout() +{ + self endon("death"); + level endon("game_ended"); + var_00 = level.sentrysettings[self.sentrytype].timeout; + while(var_00) + { + wait 1; + maps\mp\gametypes\_hostmigration::waittillhostmigrationdone(); + if(!isdefined(self.carriedby)) + { + var_00 = max(0,var_00 - 1); + } + } + + if(isdefined(self.owner)) + { + if(self.sentrytype == "sam_turret") + { + self.owner thread maps\mp\_utility::leaderdialogonplayer("sam_gone"); + } + else + { + self.owner thread maps\mp\_utility::leaderdialogonplayer("sentry_gone"); + } + } + + self notify("death"); +} + +//Function Number: 38 +sentry_targetlocksound() +{ + self endon("death"); + self playsound("sentry_gun_beep"); + wait 0.1; + self playsound("sentry_gun_beep"); + wait 0.1; + self playsound("sentry_gun_beep"); +} + +//Function Number: 39 +sentry_spinup() +{ + thread sentry_targetlocksound(); + while(self.momentum < level.sentrysettings[self.sentrytype].spinuptime) + { + self.momentum = self.momentum + 0.1; + wait 0.1; + } +} + +//Function Number: 40 +sentry_spindown() +{ + self.momentum = 0; +} + +//Function Number: 41 +sentry_burstfirestart() +{ + self endon("death"); + self endon("stop_shooting"); + level endon("game_ended"); + sentry_spinup(); + var_00 = weaponfiretime(level.sentrysettings[self.sentrytype].weaponinfo); + var_01 = level.sentrysettings[self.sentrytype].burstmin; + var_02 = level.sentrysettings[self.sentrytype].burstmax; + var_03 = level.sentrysettings[self.sentrytype].pausemin; + var_04 = level.sentrysettings[self.sentrytype].pausemax; + for(;;) + { + var_05 = randomintrange(var_01,var_02 + 1); + for(var_06 = 0;var_06 < var_05 && !self.overheated;var_06++) + { + self shootturret(); + self.heatlevel = self.heatlevel + var_00; + wait var_00; + } + + wait randomfloatrange(var_03,var_04); + } +} + +//Function Number: 42 +sentry_burstfirestop() +{ + self notify("stop_shooting"); +} + +//Function Number: 43 +turret_shotmonitor(param_00) +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + param_00 endon("death"); + param_00 endon("player_dismount"); + var_01 = weaponfiretime(level.sentrysettings[param_00.sentrytype].weaponinfo); + for(;;) + { + param_00 waittill("turret_fire"); + param_00.heatlevel = param_00.heatlevel + var_01; + param_00.cooldownwaittime = var_01; + } +} + +//Function Number: 44 +sentry_heatmonitor() +{ + self endon("death"); + var_00 = weaponfiretime(level.sentrysettings[self.sentrytype].weaponinfo); + var_01 = 0; + var_02 = 0; + var_03 = level.sentrysettings[self.sentrytype].overheattime; + var_04 = level.sentrysettings[self.sentrytype].cooldowntime; + for(;;) + { + if(self.heatlevel != var_01) + { + wait var_00; + } + else + { + self.heatlevel = max(0,self.heatlevel - 0.05); + } + + if(self.heatlevel > var_03) + { + self.overheated = 1; + thread playheatfx(); + switch(self.sentrytype) + { + case "minigun_turret": + playfxontag(common_scripts\utility::getfx("sentry_smoke_mp"),self,"tag_aim"); + break; + + default: + break; + } + + while(self.heatlevel) + { + self.heatlevel = max(0,self.heatlevel - var_04); + wait 0.1; + } + + self.overheated = 0; + self notify("not_overheated"); + } + + var_01 = self.heatlevel; + wait 0.05; + } +} + +//Function Number: 45 +turret_heatmonitor() +{ + self endon("death"); + var_00 = level.sentrysettings[self.sentrytype].overheattime; + for(;;) + { + if(self.heatlevel > var_00) + { + self.overheated = 1; + thread playheatfx(); + switch(self.sentrytype) + { + case "gl_turret": + playfxontag(common_scripts\utility::getfx("sentry_smoke_mp"),self,"tag_aim"); + break; + + default: + break; + } + + while(self.heatlevel) + { + wait 0.1; + } + + self.overheated = 0; + self notify("not_overheated"); + } + + wait 0.05; + } +} + +//Function Number: 46 +turret_coolmonitor() +{ + self endon("death"); + for(;;) + { + if(self.heatlevel > 0) + { + if(self.cooldownwaittime <= 0) + { + self.heatlevel = max(0,self.heatlevel - 0.05); + } + else + { + self.cooldownwaittime = max(0,self.cooldownwaittime - 0.05); + } + } + + wait 0.05; + } +} + +//Function Number: 47 +playheatfx() +{ + self endon("death"); + self endon("not_overheated"); + level endon("game_ended"); + self notify("playing_heat_fx"); + self endon("playing_heat_fx"); + for(;;) + { + playfxontag(common_scripts\utility::getfx("sentry_overheat_mp"),self,"tag_flash"); + wait level.sentrysettings[self.sentrytype].fxtime; + } +} + +//Function Number: 48 +playsmokefx() +{ + self endon("death"); + self endon("not_overheated"); + level endon("game_ended"); + for(;;) + { + playfxontag(common_scripts\utility::getfx("sentry_smoke_mp"),self,"tag_aim"); + wait 0.4; + } +} + +//Function Number: 49 +sentry_beepsounds() +{ + self endon("death"); + level endon("game_ended"); + for(;;) + { + wait 3; + if(!isdefined(self.carriedby)) + { + self playsound("sentry_gun_beep"); + } + } +} + +//Function Number: 50 +sam_attacktargets() +{ + self endon("carried"); + self endon("death"); + level endon("game_ended"); + self.samtargetent = undefined; + self.sammissilegroups = []; + for(;;) + { + self.samtargetent = sam_acquiretarget(); + sam_fireontarget(); + wait 0.05; + } +} + +//Function Number: 51 +sam_acquiretarget() +{ + var_00 = self gettagorigin("tag_laser"); + if(!isdefined(self.samtargetent)) + { + if(level.teambased) + { + foreach(var_02 in level.uavmodels[level.otherteam[self.team]]) + { + if(isdefined(var_02.isleaving) && var_02.isleaving) + { + continue; + } + + if(sighttracepassed(var_00,var_02.origin,0,self)) + { + return var_02; + } + } + + foreach(var_05 in level.littlebirds) + { + if(isdefined(var_05.team) && var_05.team == self.team) + { + continue; + } + + if(sighttracepassed(var_00,var_05.origin,0,self)) + { + return var_05; + } + } + + foreach(var_08 in level.helis) + { + if(isdefined(var_08.team) && var_08.team == self.team) + { + continue; + } + + if(sighttracepassed(var_00,var_08.origin,0,self)) + { + return var_08; + } + } + + if(level.ac130inuse && isdefined(level.ac130.owner) && level.ac130.owner.team != self.team) + { + if(sighttracepassed(var_00,level.ac130.planemodel.origin,0,self)) + { + return level.ac130.planemodel; + } + } + + foreach(var_02 in level.remote_uav) + { + if(!isdefined(var_02)) + { + continue; + } + + if(isdefined(var_02.team) && var_02.team == self.team) + { + continue; + } + + if(sighttracepassed(var_00,var_02.origin,0,self,var_02)) + { + return var_02; + } + } + } + else + { + foreach(var_02 in level.uavmodels) + { + if(isdefined(var_02.isleaving) && var_02.isleaving) + { + continue; + } + + if(isdefined(var_02.owner) && isdefined(self.owner) && var_02.owner == self.owner) + { + continue; + } + + if(sighttracepassed(var_00,var_02.origin,0,self)) + { + return var_02; + } + } + + foreach(var_05 in level.littlebirds) + { + if(isdefined(var_05.owner) && isdefined(self.owner) && var_05.owner == self.owner) + { + continue; + } + + if(sighttracepassed(var_00,var_05.origin,0,self)) + { + return var_05; + } + } + + foreach(var_08 in level.helis) + { + if(isdefined(var_08.owner) && isdefined(self.owner) && var_08.owner == self.owner) + { + continue; + } + + if(sighttracepassed(var_00,var_08.origin,0,self)) + { + return var_08; + } + } + + if(level.ac130inuse && isdefined(level.ac130.owner) && isdefined(self.owner) && level.ac130.owner != self.owner) + { + if(sighttracepassed(var_00,level.ac130.planemodel.origin,0,self)) + { + return level.ac130.planemodel; + } + } + + foreach(var_02 in level.remote_uav) + { + if(!isdefined(var_02)) + { + continue; + } + + if(isdefined(var_02.owner) && isdefined(self.owner) && var_02.owner == self.owner) + { + continue; + } + + if(sighttracepassed(var_00,var_02.origin,0,self,var_02)) + { + return var_02; + } + } + } + + self cleartargetentity(); + return undefined; + } + + if(!sighttracepassed(var_08,self.samtargetent.origin,0,self)) + { + self cleartargetentity(); + return undefined; + } + + return self.samtargetent; +} + +//Function Number: 52 +sam_fireontarget() +{ + if(isdefined(self.samtargetent)) + { + if(self.samtargetent == level.ac130.planemodel && !isdefined(level.ac130player)) + { + self.samtargetent = undefined; + self cleartargetentity(); + return; + } + + self settargetentity(self.samtargetent); + self waittill("turret_on_target"); + if(!isdefined(self.samtargetent)) + { + return; + } + + if(!self.laser_on) + { + thread sam_watchlaser(); + thread sam_watchcrashing(); + thread sam_watchleaving(); + thread sam_watchlineofsight(); + } + + wait 2; + if(!isdefined(self.samtargetent)) + { + return; + } + + if(self.samtargetent == level.ac130.planemodel && !isdefined(level.ac130player)) + { + self.samtargetent = undefined; + self cleartargetentity(); + return; + } + + var_00 = []; + var_01 = self.sammissilegroups.size; + for(var_02 = 0;var_02 < 4;var_02++) + { + if(!isdefined(self.samtargetent)) + { + return; + } + + if(isdefined(self.carriedby)) + { + return; + } + + self shootturret(); + var_03 = magicbullet("sam_projectile_mp",var_7B[var_02],self.samtargetent.origin,self.owner); + var_03 missile_settargetent(self.samtargetent); + var_03 missile_setflightmodedirect(); + var_03.samturret = self; + var_03.sammissilegroup = var_01; + self.sammissilegroups[var_01][var_02] = var_03; + level notify("sam_missile_fired",self.owner,var_03,self.samtargetent,var_7B[3],self gettagorigin("tag_ri_missile2"),var_7B[2],self gettagorigin("tag_ri_missile1"),var_7B[1],self gettagorigin("tag_le_missile2"),var_7B[0],self gettagorigin("tag_le_missile1")); + if(var_02 == 3) + { + break; + } + + wait 0.25; + } + + level notify("sam_fired",self.owner,self.sammissilegroups[var_01],self.samtargetent); + wait 3; + } +} + +//Function Number: 53 +sam_watchlineofsight() +{ + level endon("game_ended"); + self endon("death"); + while(isdefined(self.samtargetent) && isdefined(self getturrettarget(1)) && self getturrettarget(1) == self.samtargetent) + { + var_00 = self gettagorigin("tag_laser"); + if(!sighttracepassed(var_00,self.samtargetent.origin,0,self,self.samtargetent)) + { + self cleartargetentity(); + self.samtargetent = undefined; + break; + } + + wait 0.05; + } +} + +//Function Number: 54 +sam_watchlaser() +{ + self endon("death"); + self laseron(); + self.laser_on = 1; + while(isdefined(self.samtargetent) && isdefined(self getturrettarget(1)) && self getturrettarget(1) == self.samtargetent) + { + wait 0.05; + } + + self laseroff(); + self.laser_on = 0; +} + +//Function Number: 55 +sam_watchcrashing() +{ + self endon("death"); + self.samtargetent endon("death"); + if(!isdefined(self.samtargetent.helitype)) + { + return; + } + + self.samtargetent waittill("crashing"); + self cleartargetentity(); + self.samtargetent = undefined; +} + +//Function Number: 56 +sam_watchleaving() +{ + self endon("death"); + self.samtargetent endon("death"); + if(!isdefined(self.samtargetent.model)) + { + return; + } + + if(self.samtargetent.model == "vehicle_uav_static_mp") + { + self.samtargetent waittill("leaving"); + self cleartargetentity(); + self.samtargetent = undefined; + } +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/killstreaks/_autoshotgun.gsc b/MW3/PC/MP/maps/mp/killstreaks/_autoshotgun.gsc new file mode 100644 index 0000000..a7d9b23 --- /dev/null +++ b/MW3/PC/MP/maps/mp/killstreaks/_autoshotgun.gsc @@ -0,0 +1,132 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\killstreaks\_autoshotgun.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 9 + * Decompile Time: 173 ms + * Timestamp: 10/27/2023 2:13:54 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level.killstreakfuncs["auto_shotgun"] = ::tryuseautoshotgun; + level.killstreaksetupfuncs["auto_shotgun"] = ::shotgunsetup; + level.killstreakfuncs["thumper"] = ::tryusethumper; + level.killstreaksetupfuncs["thumper"] = ::thumpersetup; + thread onplayerconnect(); +} + +//Function Number: 2 +shotgunsetup() +{ + self givemaxammo("aa12_mp"); + thread saveweaponammoondeath("aa12_mp"); +} + +//Function Number: 3 +tryuseautoshotgun(param_00) +{ + thread removeweapononoutofammo("aa12_mp"); + return 1; +} + +//Function Number: 4 +thumpersetup() +{ + self givemaxammo("m79_mp"); + thread saveweaponammoondeath("m79_mp"); +} + +//Function Number: 5 +tryusethumper() +{ + thread removeweapononoutofammo("m79_mp"); + return 1; +} + +//Function Number: 6 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_00 thread onplayerspawned(); + } +} + +//Function Number: 7 +onplayerspawned() +{ + self endon("disconnect"); + for(;;) + { + self waittill("spawned_player"); + if(!isdefined(self.pers["ksWeapon_clip_ammo"]) || !isdefined(self.pers["ksWeapon_name"])) + { + continue; + } + + var_00 = self.pers["ksWeapon_name"]; + if(isdefined(self.pers["killstreak"]) && maps\mp\killstreaks\_killstreaks::getkillstreakweapon(self.pers["killstreak"]) != var_00) + { + self.pers["ksWeapon_name"] = undefined; + self.pers["ksWeapon_clip_ammo"] = undefined; + self.pers["ksWeapon_stock_ammo"] = undefined; + continue; + } + + maps\mp\killstreaks\_killstreaks::givekillstreakweapon(var_00); + self setweaponammostock(var_00,self.pers["ksWeapon_stock_ammo"]); + self setweaponammoclip(var_00,self.pers["ksWeapon_clip_ammo"]); + thread removeweapononoutofammo(var_00); + thread saveweaponammoondeath(var_00); + } +} + +//Function Number: 8 +saveweaponammoondeath(param_00) +{ + self endon("disconnect"); + self endon("got_killstreak"); + self notify("saveWeaponAmmoOnDeath"); + self endon("saveWeaponAmmoOnDeath"); + self.pers["ksWeapon_name"] = undefined; + self.pers["ksWeapon_clip_ammo"] = undefined; + self.pers["ksWeapon_stock_ammo"] = undefined; + self waittill("death"); + if(!self hasweapon(param_00)) + { + return; + } + + self.pers["ksWeapon_name"] = param_00; + self.pers["ksWeapon_clip_ammo"] = self getweaponammoclip(param_00); + self.pers["ksWeapon_stock_ammo"] = self getweaponammostock(param_00); +} + +//Function Number: 9 +removeweapononoutofammo(param_00) +{ + self endon("disconnect"); + self endon("death"); + self notify(param_00 + "_ammo_monitor"); + self endon(param_00 + "_ammo_monitor"); + for(;;) + { + self waittill("end_firing"); + if(self getcurrentweapon() != param_00) + { + continue; + } + + var_01 = self getweaponammoclip(param_00) + self getweaponammostock(param_00); + if(var_01) + { + continue; + } + + self takeweapon(param_00); + } +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/killstreaks/_deployablebox.gsc b/MW3/PC/MP/maps/mp/killstreaks/_deployablebox.gsc new file mode 100644 index 0000000..6afe360 --- /dev/null +++ b/MW3/PC/MP/maps/mp/killstreaks/_deployablebox.gsc @@ -0,0 +1,755 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\killstreaks\_deployablebox.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 28 + * Decompile Time: 508 ms + * Timestamp: 10/27/2023 2:13:57 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level.killstreakfuncs["deployable_vest"] = ::tryusedeployablevest; + level.boxsettings = []; + level.boxsettings["deployable_vest"] = spawnstruct(); + level.boxsettings["deployable_vest"].weaponinfo = "deployable_vest_marker_mp"; + level.boxsettings["deployable_vest"].modelbase = "com_deploy_ballistic_vest_friend_world"; + level.boxsettings["deployable_vest"].hintstring = &"MP_LIGHT_ARMOR_PICKUP"; + level.boxsettings["deployable_vest"].capturingstring = &"MP_BOX_GETTING_VEST"; + level.boxsettings["deployable_vest"].eventstring = &"MP_DEPLOYED_VEST"; + level.boxsettings["deployable_vest"].streakname = "deployable_vest"; + level.boxsettings["deployable_vest"].splashname = "used_deployable_vest"; + level.boxsettings["deployable_vest"].shadername = "compass_objpoint_deploy_friendly"; + level.boxsettings["deployable_vest"].lifespan = 60; + level.boxsettings["deployable_vest"].xp = 50; + level.boxsettings["deployable_vest"].vodestroyed = "ballistic_vest_destroyed"; + foreach(var_01 in level.boxsettings) + { + precacheitem(var_01.weaponinfo); + precachemodel(var_01.modelbase); + precachestring(var_01.hintstring); + precachestring(var_01.capturingstring); + precachestring(var_01.eventstring); + precacheshader(var_01.shadername); + } + + precachestring(&"PLATFORM_HOLD_TO_USE"); + level._effect["box_explode_mp"] = loadfx("fire/ballistic_vest_death"); +} + +//Function Number: 2 +tryusedeployablevest(param_00) +{ + var_01 = begindeployableviamarker(param_00,"deployable_vest"); + if(!isdefined(var_01) || !var_01) + { + return 0; + } + + maps\mp\_matchdata::logkillstreakevent("deployable_vest",self.origin); + return 1; +} + +//Function Number: 3 +begindeployableviamarker(param_00,param_01) +{ + self endon("death"); + self.marker = undefined; + thread watchmarkerusage(param_00,param_01); + var_02 = self getcurrentweapon(); + if(ismarker(var_02)) + { + var_03 = var_02; + } + else + { + var_03 = undefined; + } + + while(ismarker(var_02)) + { + self waittill("weapon_change",var_02); + if(ismarker(var_02)) + { + var_03 = var_02; + } + } + + self notify("stopWatchingMarker"); + if(!isdefined(var_03)) + { + return 0; + } + + return !self getammocount(var_03) && self hasweapon(var_03); +} + +//Function Number: 4 +watchmarkerusage(param_00,param_01) +{ + self notify("watchMarkerUsage"); + self endon("death"); + self endon("disconnect"); + self endon("watchMarkerUsage"); + self endon("stopWatchingMarker"); + thread watchmarker(param_00,param_01); + for(;;) + { + self waittill("grenade_pullback",var_02); + if(!ismarker(var_02)) + { + continue; + } + + common_scripts\utility::_disableusability(); + beginmarkertracking(); + } +} + +//Function Number: 5 +watchmarker(param_00,param_01) +{ + self notify("watchMarker"); + self endon("watchMarker"); + self endon("spawned_player"); + self endon("disconnect"); + self endon("stopWatchingMarker"); + for(;;) + { + self waittill("grenade_fire",var_02,var_03); + if(!ismarker(var_03)) + { + continue; + } + + if(!isalive(self)) + { + var_02 delete(); + return; + } + + var_02.owner = self; + var_02.weaponname = var_03; + self.marker = var_02; + thread takeweapononstuck(var_02,var_03); + var_02 thread markeractivate(param_00,param_01,::box_setactive); + } +} + +//Function Number: 6 +takeweapononstuck(param_00,param_01) +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + param_00 playsoundtoplayer("mp_vest_deployed_ui",self); + if(self hasweapon(param_01)) + { + self takeweapon(param_01); + self switchtoweapon(common_scripts\utility::getlastweapon()); + } +} + +//Function Number: 7 +beginmarkertracking() +{ + self notify("beginMarkerTracking"); + self endon("beginMarkerTracking"); + self endon("death"); + self endon("disconnect"); + common_scripts\utility::waittill_any("grenade_fire","weapon_change"); + common_scripts\utility::_enableusability(); +} + +//Function Number: 8 +markeractivate(param_00,param_01,param_02) +{ + self notify("markerActivate"); + self endon("markerActivate"); + self waittill("missile_stuck"); + var_03 = self.owner; + var_04 = self.origin; + if(!isdefined(var_03)) + { + return; + } + + var_05 = createboxforplayer(param_01,var_04,var_03); + wait 0.05; + var_05 thread [[ param_02 ]](); + self delete(); +} + +//Function Number: 9 +ismarker(param_00) +{ + switch(param_00) + { + case "deployable_vest_marker_mp": + return 1; + + default: + return 0; + } +} + +//Function Number: 10 +createboxforplayer(param_00,param_01,param_02) +{ + var_03 = spawn("script_model",param_01); + var_03 setmodel(level.boxsettings[param_00].modelbase); + var_03.health = 1000; + var_03.angles = param_02.angles; + var_03.boxtype = param_00; + var_03.owner = param_02; + var_03.team = param_02.team; + var_03 box_setinactive(); + var_03 thread box_handleownerdisconnect(); + return var_03; +} + +//Function Number: 11 +box_setactive() +{ + self setcursorhint("HINT_NOICON"); + self sethintstring(level.boxsettings[self.boxtype].hintstring); + self.inuse = 0; + if(level.teambased) + { + var_00 = maps\mp\gametypes\_gameobjects::getnextobjid(); + objective_add(var_00,"invisible",(0,0,0)); + objective_position(var_00,self.origin); + objective_state(var_00,"active"); + objective_icon(var_00,level.boxsettings[self.boxtype].shadername); + objective_team(var_00,self.team); + self.objidfriendly = var_00; + foreach(var_02 in level.players) + { + if(self.team == var_02.team && !var_02 maps\mp\_utility::isjuggernaut()) + { + maps\mp\_entityheadicons::setheadicon(var_02,maps\mp\killstreaks\_killstreaks::getkillstreakcrateicon(level.boxsettings[self.boxtype].streakname),(0,0,20),14,14,undefined,undefined,undefined,undefined,undefined,0); + } + } + } + else + { + var_00 = maps\mp\gametypes\_gameobjects::getnextobjid(); + objective_add(var_00,"invisible",(0,0,0)); + objective_position(var_00,self.origin); + objective_state(var_00,"active"); + objective_icon(var_00,level.boxsettings[self.boxtype].shadername); + objective_player(var_00,self.owner getentitynumber()); + self.objidfriendly = var_00; + if(!self.owner maps\mp\_utility::isjuggernaut()) + { + maps\mp\_entityheadicons::setheadicon(self.owner,maps\mp\killstreaks\_killstreaks::getkillstreakcrateicon(level.boxsettings[self.boxtype].streakname),(0,0,20),14,14,undefined,undefined,undefined,undefined,undefined,0); + } + } + + self makeusable(); + self.isusable = 1; + self setcandamage(1); + thread box_handledamage(); + thread box_handledeath(); + thread box_timeout(); + thread disablewhenjuggernaut(); + foreach(var_02 in level.players) + { + if(level.teambased) + { + if(self.team == var_02.team) + { + if(var_02 maps\mp\_utility::isjuggernaut()) + { + self disableplayeruse(var_02); + thread doubledip(var_02); + } + else + { + self enableplayeruse(var_02); + } + + thread boxthink(var_02); + } + else + { + self disableplayeruse(var_02); + } + + thread box_playerjoinedteam(var_02); + continue; + } + + if(isdefined(self.owner) && self.owner == var_02) + { + if(var_02 maps\mp\_utility::isjuggernaut()) + { + self disableplayeruse(var_02); + thread doubledip(var_02); + } + else + { + self enableplayeruse(var_02); + } + + thread boxthink(var_02); + continue; + } + + self disableplayeruse(var_02); + } + + level thread maps\mp\_utility::teamplayercardsplash(level.boxsettings[self.boxtype].splashname,self.owner,self.team); + thread box_playerconnected(); +} + +//Function Number: 12 +box_playerconnected() +{ + self endon("death"); + level waittill("connected",var_00); + var_00 waittill("spawned_player"); + if(level.teambased) + { + if(self.team == var_00.team) + { + self enableplayeruse(var_00); + thread boxthink(var_00); + maps\mp\_entityheadicons::setheadicon(var_00,maps\mp\killstreaks\_killstreaks::getkillstreakcrateicon(level.boxsettings[self.boxtype].streakname),(0,0,20),14,14,undefined,undefined,undefined,undefined,undefined,0); + return; + } + + self disableplayeruse(var_00); + maps\mp\_entityheadicons::setheadicon(var_00,"",(0,0,0)); + } +} + +//Function Number: 13 +box_playerjoinedteam(param_00) +{ + self endon("death"); + param_00 endon("disconnect"); + for(;;) + { + param_00 waittill("joined_team"); + if(level.teambased) + { + if(self.team == param_00.team) + { + self enableplayeruse(param_00); + thread boxthink(param_00); + maps\mp\_entityheadicons::setheadicon(param_00,maps\mp\killstreaks\_killstreaks::getkillstreakcrateicon(level.boxsettings[self.boxtype].streakname),(0,0,20),14,14,undefined,undefined,undefined,undefined,undefined,0); + continue; + } + + self disableplayeruse(param_00); + maps\mp\_entityheadicons::setheadicon(param_00,"",(0,0,0)); + } + } +} + +//Function Number: 14 +box_setinactive() +{ + self makeunusable(); + self.isusable = 0; + maps\mp\_entityheadicons::setheadicon("none","",(0,0,0)); + if(isdefined(self.objidfriendly)) + { + maps\mp\_utility::_objective_delete(self.objidfriendly); + } +} + +//Function Number: 15 +box_handledamage() +{ + self.health = 999999; + self.maxhealth = 300; + self.damagetaken = 0; + for(;;) + { + self waittill("damage",var_00,var_01,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09); + if(!maps\mp\gametypes\_weapons::friendlyfirecheck(self.owner,var_01)) + { + continue; + } + + if(isdefined(var_09)) + { + switch(var_09) + { + case "flash_grenade_mp": + case "smoke_grenade_mp": + case "concussion_grenade_mp": + break; + } + } + + if(!isdefined(self)) + { + return; + } + + if(var_04 == "MOD_MELEE") + { + self.damagetaken = self.damagetaken + self.maxhealth; + } + + if(isdefined(var_08) && var_08 & level.idflags_penetration) + { + self.wasdamagedfrombulletpenetration = 1; + } + + self.wasdamaged = 1; + var_0A = var_00; + if(isplayer(var_01)) + { + var_01 maps\mp\gametypes\_damagefeedback::updatedamagefeedback("deployable_bag"); + if(var_04 == "MOD_RIFLE_BULLET" || var_04 == "MOD_PISTOL_BULLET") + { + if(var_01 maps\mp\_utility::_hasperk("specialty_armorpiercing")) + { + var_0A = var_0A + var_00 * level.armorpiercingmod; + } + } + } + + if(isdefined(var_01.owner) && isplayer(var_01.owner)) + { + var_01.owner maps\mp\gametypes\_damagefeedback::updatedamagefeedback("deployable_bag"); + } + + if(isdefined(var_09)) + { + switch(var_09) + { + case "javelin_mp": + case "stinger_mp": + case "remote_mortar_missile_mp": + case "remotemissile_projectile_mp": + case "ac130_40mm_mp": + case "ac130_105mm_mp": + self.var_30C8 = 1; + var_0A = self.maxhealth + 1; + break; + + case "stealth_bomb_mp": + case "artillery_mp": + self.var_30C8 = 0; + var_0A = var_0A + var_00 * 4; + break; + + case "bomb_site_mp": + self.var_30C8 = 0; + var_0A = self.maxhealth + 1; + break; + } + } + + self.damagetaken = self.damagetaken + var_0A; + if(self.damagetaken >= self.maxhealth) + { + if(isplayer(var_01) && !isdefined(self.owner) || var_01 != self.owner) + { + var_01 thread maps\mp\gametypes\_rank::giverankxp("kill",100,var_09,var_04); + var_01 notify("destroyed_killstreak"); + } + + if(isdefined(self.owner)) + { + self.owner thread maps\mp\_utility::leaderdialogonplayer(level.boxsettings[self.boxtype].vodestroyed); + } + + self notify("death"); + return; + } + } +} + +//Function Number: 16 +box_handledeath() +{ + self waittill("death"); + if(!isdefined(self)) + { + return; + } + + box_setinactive(); + playfx(common_scripts\utility::getfx("box_explode_mp"),self.origin); + wait 0.5; + self notify("deleting"); + self delete(); +} + +//Function Number: 17 +box_handleownerdisconnect() +{ + self endon("death"); + level endon("game_ended"); + self notify("box_handleOwner"); + self endon("box_handleOwner"); + self.owner common_scripts\utility::waittill_any("disconnect","joined_team","joined_spectators"); + self notify("death"); +} + +//Function Number: 18 +boxthink(param_00) +{ + self endon("death"); + thread boxcapturethink(param_00); + for(;;) + { + self waittill("captured",var_01); + if(var_01 != param_00) + { + continue; + } + + switch(self.boxtype) + { + case "deployable_vest": + param_00 playlocalsound("ammo_crate_use"); + param_00 [[ level.killstreakfuncs["light_armor"] ]](); + break; + } + + if(isdefined(self.owner) && param_00 != self.owner) + { + self.owner thread maps\mp\gametypes\_rank::func_2F45(level.boxsettings[self.boxtype].eventstring); + self.owner thread maps\mp\gametypes\_rank::giverankxp("support",level.boxsettings[self.boxtype].xp); + } + + maps\mp\_entityheadicons::setheadicon(param_00,"",(0,0,0)); + self disableplayeruse(param_00); + thread doubledip(param_00); + } +} + +//Function Number: 19 +doubledip(param_00) +{ + self endon("death"); + param_00 endon("disconnect"); + param_00 waittill("death"); + if(level.teambased) + { + if(self.team == param_00.team) + { + maps\mp\_entityheadicons::setheadicon(param_00,maps\mp\killstreaks\_killstreaks::getkillstreakcrateicon(level.boxsettings[self.boxtype].streakname),(0,0,20),14,14,undefined,undefined,undefined,undefined,undefined,0); + self enableplayeruse(param_00); + return; + } + + return; + } + + if(isdefined(self.owner) && self.owner == param_00) + { + maps\mp\_entityheadicons::setheadicon(param_00,maps\mp\killstreaks\_killstreaks::getkillstreakcrateicon(level.boxsettings[self.boxtype].streakname),(0,0,20),14,14,undefined,undefined,undefined,undefined,undefined,0); + self enableplayeruse(param_00); + } +} + +//Function Number: 20 +boxcapturethink(param_00) +{ + while(isdefined(self)) + { + self waittill("trigger",var_01); + if(var_01 != param_00) + { + continue; + } + + if(!useholdthink(param_00,2000)) + { + continue; + } + + self notify("captured",param_00); + } +} + +//Function Number: 21 +isfriendlytobox(param_00) +{ + if(level.teambased && self.team == param_00.team) + { + return 1; + } + + return 0; +} + +//Function Number: 22 +box_timeout() +{ + self endon("death"); + level endon("game_ended"); + var_00 = level.boxsettings[self.boxtype].lifespan; + while(var_00) + { + wait 1; + maps\mp\gametypes\_hostmigration::waittillhostmigrationdone(); + if(!isdefined(self.carriedby)) + { + var_00 = max(0,var_00 - 1); + } + } + + self notify("death"); +} + +//Function Number: 23 +deleteonownerdeath(param_00) +{ + wait 0.25; + self linkto(param_00,"tag_origin",(0,0,0),(0,0,0)); + param_00 waittill("death"); + self delete(); +} + +//Function Number: 24 +box_modelteamupdater(param_00) +{ + self endon("death"); + self hide(); + foreach(var_02 in level.players) + { + if(var_02.team == param_00) + { + self showtoplayer(var_02); + } + } + + for(;;) + { + level waittill("joined_team"); + self hide(); + foreach(var_02 in level.players) + { + if(var_02.team == param_00) + { + self showtoplayer(var_02); + } + } + } +} + +//Function Number: 25 +useholdthink(param_00,param_01) +{ + param_00 playerlinkto(self); + param_00 playerlinkedoffsetenable(); + param_00 common_scripts\utility::_disableweapon(); + param_00.boxparams = spawnstruct(); + param_00.boxparams.curprogress = 0; + param_00.boxparams.inuse = 1; + param_00.boxparams.userate = 0; + if(isdefined(param_01)) + { + param_00.boxparams.usetime = param_01; + } + else + { + param_00.boxparams.usetime = 3000; + } + + param_00 thread personalusebar(self); + var_02 = useholdthinkloop(param_00); + if(isalive(param_00)) + { + param_00 common_scripts\utility::_enableweapon(); + param_00 unlink(); + } + + if(!isdefined(self)) + { + return 0; + } + + param_00.boxparams.inuse = 0; + param_00.boxparams.curprogress = 0; + return var_02; +} + +//Function Number: 26 +personalusebar(param_00) +{ + self endon("disconnect"); + var_01 = maps\mp\gametypes\_hud_util::createprimaryprogressbar(0,25); + var_02 = maps\mp\gametypes\_hud_util::createprimaryprogressbartext(0,25); + var_02 settext(level.boxsettings[param_00.boxtype].capturingstring); + var_03 = -1; + while(maps\mp\_utility::isreallyalive(self) && isdefined(param_00) && self.boxparams.inuse && param_00.isusable && !level.gameended) + { + if(var_03 != self.boxparams.userate) + { + if(self.boxparams.curprogress > self.boxparams.usetime) + { + self.boxparams.curprogress = self.boxparams.usetime; + } + + var_01 maps\mp\gametypes\_hud_util::updatebar(self.boxparams.curprogress / self.boxparams.usetime,1000 / self.boxparams.usetime * self.boxparams.userate); + if(!self.boxparams.userate) + { + var_01 maps\mp\gametypes\_hud_util::hideelem(); + var_02 maps\mp\gametypes\_hud_util::hideelem(); + } + else + { + var_01 maps\mp\gametypes\_hud_util::showelem(); + var_02 maps\mp\gametypes\_hud_util::showelem(); + } + } + + var_03 = self.boxparams.userate; + wait 0.05; + } + + var_01 maps\mp\gametypes\_hud_util::destroyelem(); + var_02 maps\mp\gametypes\_hud_util::destroyelem(); +} + +//Function Number: 27 +useholdthinkloop(param_00) +{ + while(!level.gameended && isdefined(self) && maps\mp\_utility::isreallyalive(param_00) && param_00 usebuttonpressed() && param_00.boxparams.curprogress < param_00.boxparams.usetime) + { + param_00.boxparams.curprogress = param_00.boxparams.curprogress + 50 * param_00.boxparams.userate; + if(isdefined(param_00.objectivescaler)) + { + param_00.boxparams.userate = 1 * param_00.objectivescaler; + } + else + { + param_00.boxparams.userate = 1; + } + + if(param_00.boxparams.curprogress >= param_00.boxparams.usetime) + { + return maps\mp\_utility::isreallyalive(param_00); + } + + wait 0.05; + } + + return 0; +} + +//Function Number: 28 +disablewhenjuggernaut() +{ + level endon("game_ended"); + self endon("death"); + for(;;) + { + level waittill("juggernaut_equipped",var_00); + maps\mp\_entityheadicons::setheadicon(var_00,"",(0,0,0)); + self disableplayeruse(var_00); + thread doubledip(var_00); + } +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/killstreaks/_emp.gsc b/MW3/PC/MP/maps/mp/killstreaks/_emp.gsc new file mode 100644 index 0000000..fc55e3c --- /dev/null +++ b/MW3/PC/MP/maps/mp/killstreaks/_emp.gsc @@ -0,0 +1,558 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\killstreaks\_emp.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 21 + * Decompile Time: 395 ms + * Timestamp: 10/27/2023 2:13:58 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level._effect["emp_flash"] = loadfx("explosions/emp_flash_mp"); + level.teamemped["allies"] = 0; + level.teamemped["axis"] = 0; + level.empplayer = undefined; + level.emptimeout = 60; + level.emptimeremaining = int(level.emptimeout); + if(level.teambased) + { + level thread emp_teamtracker(); + } + else + { + level thread emp_playertracker(); + } + + level.killstreakfuncs["emp"] = ::emp_use; + level thread onplayerconnect(); +} + +//Function Number: 2 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_00 thread onplayerspawned(); + } +} + +//Function Number: 3 +onplayerspawned() +{ + self endon("disconnect"); + for(;;) + { + self waittill("spawned_player"); + if((level.teambased && level.teamemped[self.team]) || !level.teambased && isdefined(level.empplayer) && level.empplayer != self) + { + self setempjammed(1); + } + } +} + +//Function Number: 4 +emp_use(param_00) +{ + if(!maps\mp\_utility::validateusestreak()) + { + return 0; + } + + var_01 = self.pers["team"]; + var_02 = level.otherteam[var_01]; + if(level.teambased) + { + thread emp_jamteam(var_02); + } + else + { + thread emp_jamplayers(self); + } + + maps\mp\_matchdata::logkillstreakevent("emp",self.origin); + self notify("used_emp"); + return 1; +} + +//Function Number: 5 +emp_jamteam(param_00) +{ + level endon("game_ended"); + thread maps\mp\_utility::teamplayercardsplash("used_emp",self); + level notify("EMP_JamTeam" + param_00); + level endon("EMP_JamTeam" + param_00); + foreach(var_02 in level.players) + { + var_02 playlocalsound("emp_activate"); + if(var_02.team != param_00) + { + continue; + } + + if(var_02 maps\mp\_utility::_hasperk("specialty_localjammer")) + { + var_02 radarjamoff(); + } + } + + visionsetnaked("coup_sunblind",0.1); + thread empeffects(); + wait 0.1; + visionsetnaked("coup_sunblind",0); + if(isdefined(level.nukedetonated)) + { + visionsetnaked(level.nukevisionset,3); + } + else + { + visionsetnaked("",3); + } + + level.teamemped[param_00] = 1; + level notify("emp_update"); + level func_35BE(self,param_00); + level thread keepemptimeremaining(); + maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause(level.emptimeout); + level.teamemped[param_00] = 0; + foreach(var_02 in level.players) + { + if(var_02.team != param_00) + { + continue; + } + + if(var_02 maps\mp\_utility::_hasperk("specialty_localjammer")) + { + var_02 radarjamon(); + } + } + + level notify("emp_update"); +} + +//Function Number: 6 +emp_jamplayers(param_00) +{ + level notify("EMP_JamPlayers"); + level endon("EMP_JamPlayers"); + foreach(var_02 in level.players) + { + var_02 playlocalsound("emp_activate"); + if(var_02 == param_00) + { + continue; + } + + if(var_02 maps\mp\_utility::_hasperk("specialty_localjammer")) + { + var_02 radarjamoff(); + } + } + + visionsetnaked("coup_sunblind",0.1); + thread empeffects(); + wait 0.1; + visionsetnaked("coup_sunblind",0); + if(isdefined(level.nukedetonated)) + { + visionsetnaked(level.nukevisionset,3); + } + else + { + visionsetnaked("",3); + } + + level notify("emp_update"); + level.empplayer = param_00; + level.empplayer thread empplayerffadisconnect(); + level func_35BE(param_00); + level notify("emp_update"); + level thread keepemptimeremaining(); + maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause(level.emptimeout); + foreach(var_02 in level.players) + { + if(var_02 == param_00) + { + continue; + } + + if(var_02 maps\mp\_utility::_hasperk("specialty_localjammer")) + { + var_02 radarjamon(); + } + } + + level.empplayer = undefined; + level notify("emp_update"); + level notify("emp_ended"); +} + +//Function Number: 7 +keepemptimeremaining() +{ + level notify("keepEMPTimeRemaining"); + level endon("keepEMPTimeRemaining"); + level endon("emp_ended"); + level.emptimeremaining = int(level.emptimeout); + while(level.emptimeremaining) + { + wait 1; + level.emptimeremaining--; + } +} + +//Function Number: 8 +empplayerffadisconnect() +{ + level endon("EMP_JamPlayers"); + level endon("emp_ended"); + self waittill("disconnect"); + level notify("emp_update"); +} + +//Function Number: 9 +empeffects() +{ + foreach(var_01 in level.players) + { + var_02 = anglestoforward(var_01.angles); + var_02 = (var_02[0],var_02[1],0); + var_02 = vectornormalize(var_02); + var_03 = 20000; + var_04 = spawn("script_model",var_01.origin + (0,0,8000) + var_02 * var_03); + var_04 setmodel("tag_origin"); + var_04.angles = var_04.angles + (270,0,0); + var_04 thread empeffect(var_01); + } +} + +//Function Number: 10 +empeffect(param_00) +{ + param_00 endon("disconnect"); + wait 0.5; + playfxontagforclients(level._effect["emp_flash"],self,"tag_origin",param_00); +} + +//Function Number: 11 +emp_teamtracker() +{ + level endon("game_ended"); + for(;;) + { + level common_scripts\utility::waittill_either("joined_team","emp_update"); + foreach(var_01 in level.players) + { + if(var_01.team == "spectator") + { + continue; + } + + if(!level.teamemped[var_01.team] && !var_01 maps\mp\_utility::isemped()) + { + var_01 setempjammed(0); + continue; + } + + var_01 setempjammed(1); + } + } +} + +//Function Number: 12 +emp_playertracker() +{ + level endon("game_ended"); + for(;;) + { + level common_scripts\utility::waittill_either("joined_team","emp_update"); + foreach(var_01 in level.players) + { + if(var_01.team == "spectator") + { + continue; + } + + if(isdefined(level.empplayer) && level.empplayer != var_01) + { + var_01 setempjammed(1); + continue; + } + + if(!var_01 maps\mp\_utility::isemped()) + { + var_01 setempjammed(0); + } + } + } +} + +//Function Number: 13 +func_35BE(param_00,param_01) +{ + thread destroyactivehelis(param_00,param_01); + thread destroyactivelittlebirds(param_00,param_01); + thread destroyactiveturrets(param_00,param_01); + thread destroyactiverockets(param_00,param_01); + thread destroyactiveuavs(param_00,param_01); + thread destroyactiveimss(param_00,param_01); + thread destroyactiveugvs(param_00,param_01); + thread destroyactiveac130(param_00,param_01); +} + +//Function Number: 14 +destroyactivehelis(param_00,param_01) +{ + var_02 = "MOD_EXPLOSIVE"; + var_03 = "killstreak_emp_mp"; + var_04 = 5000; + var_05 = (0,0,0); + var_06 = (0,0,0); + var_07 = ""; + var_08 = ""; + var_09 = ""; + var_0A = undefined; + foreach(var_0C in level.helis) + { + if(level.teambased && isdefined(param_01)) + { + if(isdefined(var_0C.team) && var_0C.team != param_01) + { + continue; + } + } + else if(isdefined(var_0C.owner) && var_0C.owner == param_00) + { + continue; + } + + var_0C notify("damage",var_04,param_00,var_05,var_06,var_02,var_07,var_08,var_09,var_0A,var_03); + wait 0.05; + } +} + +//Function Number: 15 +destroyactivelittlebirds(param_00,param_01) +{ + var_02 = "MOD_EXPLOSIVE"; + var_03 = "killstreak_emp_mp"; + var_04 = 5000; + var_05 = (0,0,0); + var_06 = (0,0,0); + var_07 = ""; + var_08 = ""; + var_09 = ""; + var_0A = undefined; + foreach(var_0C in level.littlebirds) + { + if(level.teambased && isdefined(param_01)) + { + if(isdefined(var_0C.team) && var_0C.team != param_01) + { + continue; + } + } + else if(isdefined(var_0C.owner) && var_0C.owner == param_00) + { + continue; + } + + var_0C notify("damage",var_04,param_00,var_05,var_06,var_02,var_07,var_08,var_09,var_0A,var_03); + wait 0.05; + } +} + +//Function Number: 16 +destroyactiveturrets(param_00,param_01) +{ + var_02 = "MOD_EXPLOSIVE"; + var_03 = "killstreak_emp_mp"; + var_04 = 5000; + var_05 = (0,0,0); + var_06 = (0,0,0); + var_07 = ""; + var_08 = ""; + var_09 = ""; + var_0A = undefined; + foreach(var_0C in level.turrets) + { + if(level.teambased && isdefined(param_01)) + { + if(isdefined(var_0C.team) && var_0C.team != param_01) + { + continue; + } + } + else if(isdefined(var_0C.owner) && var_0C.owner == param_00) + { + continue; + } + + var_0C notify("damage",var_04,param_00,var_05,var_06,var_02,var_07,var_08,var_09,var_0A,var_03); + wait 0.05; + } +} + +//Function Number: 17 +destroyactiverockets(param_00,param_01) +{ + var_02 = "MOD_EXPLOSIVE"; + var_03 = "killstreak_emp_mp"; + var_04 = 5000; + var_05 = (0,0,0); + var_06 = (0,0,0); + var_07 = ""; + var_08 = ""; + var_09 = ""; + var_0A = undefined; + foreach(var_0C in level.rockets) + { + if(level.teambased && isdefined(param_01)) + { + if(isdefined(var_0C.team) && var_0C.team != param_01) + { + continue; + } + } + else if(isdefined(var_0C.owner) && var_0C.owner == param_00) + { + continue; + } + + playfx(level.remotemissile_fx["explode"],var_0C.origin); + var_0C delete(); + wait 0.05; + } +} + +//Function Number: 18 +destroyactiveuavs(param_00,param_01) +{ + var_02 = "MOD_EXPLOSIVE"; + var_03 = "killstreak_emp_mp"; + var_04 = 5000; + var_05 = (0,0,0); + var_06 = (0,0,0); + var_07 = ""; + var_08 = ""; + var_09 = ""; + var_0A = undefined; + var_0B = level.uavmodels; + if(level.teambased && isdefined(param_01)) + { + var_0B = level.uavmodels[param_01]; + } + + foreach(var_0D in var_0B) + { + if(level.teambased && isdefined(param_01)) + { + } + else if(isdefined(var_0D.owner) && var_0D.owner == param_00) + { + continue; + } + + var_0D notify("damage",var_04,param_00,var_05,var_06,var_02,var_07,var_08,var_09,var_0A,var_03); + wait 0.05; + } +} + +//Function Number: 19 +destroyactiveimss(param_00,param_01) +{ + var_02 = "MOD_EXPLOSIVE"; + var_03 = "killstreak_emp_mp"; + var_04 = 5000; + var_05 = (0,0,0); + var_06 = (0,0,0); + var_07 = ""; + var_08 = ""; + var_09 = ""; + var_0A = undefined; + foreach(var_0C in level.ims) + { + if(level.teambased && isdefined(param_01)) + { + if(isdefined(var_0C.team) && var_0C.team != param_01) + { + continue; + } + } + else if(isdefined(var_0C.owner) && var_0C.owner == param_00) + { + continue; + } + + var_0C notify("damage",var_04,param_00,var_05,var_06,var_02,var_07,var_08,var_09,var_0A,var_03); + wait 0.05; + } +} + +//Function Number: 20 +destroyactiveugvs(param_00,param_01) +{ + var_02 = "MOD_EXPLOSIVE"; + var_03 = "killstreak_emp_mp"; + var_04 = 5000; + var_05 = (0,0,0); + var_06 = (0,0,0); + var_07 = ""; + var_08 = ""; + var_09 = ""; + var_0A = undefined; + foreach(var_0C in level.ugvs) + { + if(level.teambased && isdefined(param_01)) + { + if(isdefined(var_0C.team) && var_0C.team != param_01) + { + continue; + } + } + else if(isdefined(var_0C.owner) && var_0C.owner == param_00) + { + continue; + } + + var_0C notify("damage",var_04,param_00,var_05,var_06,var_02,var_07,var_08,var_09,var_0A,var_03); + wait 0.05; + } +} + +//Function Number: 21 +destroyactiveac130(param_00,param_01) +{ + var_02 = "MOD_EXPLOSIVE"; + var_03 = "killstreak_emp_mp"; + var_04 = 5000; + var_05 = (0,0,0); + var_06 = (0,0,0); + var_07 = ""; + var_08 = ""; + var_09 = ""; + var_0A = undefined; + if(level.teambased && isdefined(param_01)) + { + if(isdefined(level.ac130player) && isdefined(level.ac130player.team) && level.ac130player.team == param_01) + { + level.ac130.planemodel notify("damage",var_04,param_00,var_05,var_06,var_02,var_07,var_08,var_09,var_0A,var_03); + return; + } + + return; + } + + if(isdefined(level.ac130player)) + { + if(!isdefined(level.ac130.owner) || isdefined(level.ac130.owner) && level.ac130.owner != param_00) + { + level.ac130.planemodel notify("damage",var_04,param_00,var_05,var_06,var_02,var_07,var_08,var_09,var_0A,var_03); + return; + } + } +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/killstreaks/_escortairdrop.gsc b/MW3/PC/MP/maps/mp/killstreaks/_escortairdrop.gsc new file mode 100644 index 0000000..06e0d6b --- /dev/null +++ b/MW3/PC/MP/maps/mp/killstreaks/_escortairdrop.gsc @@ -0,0 +1,887 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\killstreaks\_escortairdrop.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 31 + * Decompile Time: 519 ms + * Timestamp: 10/27/2023 2:14:00 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level.ospreysettings = []; + level.ospreysettings["escort_airdrop"] = spawnstruct(); + level.ospreysettings["escort_airdrop"].vehicle = "osprey_mp"; + level.ospreysettings["escort_airdrop"].modelbase = "vehicle_v22_osprey_body_mp"; + level.ospreysettings["escort_airdrop"].modelblades = "vehicle_v22_osprey_blades_mp"; + level.ospreysettings["escort_airdrop"].taghatchl = "tag_le_door_attach"; + level.ospreysettings["escort_airdrop"].taghatchr = "tag_ri_door_attach"; + level.ospreysettings["escort_airdrop"].tagdropcrates = "tag_turret_attach"; + level.ospreysettings["escort_airdrop"].prompt = &"MP_DEFEND_AIRDROP_PACKAGES"; + level.ospreysettings["escort_airdrop"].name = &"KILLSTREAKS_ESCORT_AIRDROP"; + level.ospreysettings["escort_airdrop"].weaponinfo = "osprey_minigun_mp"; + level.ospreysettings["escort_airdrop"].helitype = "osprey"; + level.ospreysettings["escort_airdrop"].droptype = "airdrop_escort"; + level.ospreysettings["escort_airdrop"].maxhealth = level.heli_maxhealth * 2; + level.ospreysettings["escort_airdrop"].timeout = 60; + level.ospreysettings["osprey_gunner"] = spawnstruct(); + level.ospreysettings["osprey_gunner"].vehicle = "osprey_player_mp"; + level.ospreysettings["osprey_gunner"].modelbase = "vehicle_v22_osprey_body_mp"; + level.ospreysettings["osprey_gunner"].modelblades = "vehicle_v22_osprey_blades_mp"; + level.ospreysettings["osprey_gunner"].taghatchl = "tag_le_door_attach"; + level.ospreysettings["osprey_gunner"].taghatchr = "tag_ri_door_attach"; + level.ospreysettings["osprey_gunner"].tagdropcrates = "tag_turret_attach"; + level.ospreysettings["osprey_gunner"].prompt = &"MP_DEFEND_AIRDROP_PACKAGES"; + level.ospreysettings["osprey_gunner"].name = &"KILLSTREAKS_OSPREY_GUNNER"; + level.ospreysettings["osprey_gunner"].weaponinfo = "osprey_player_minigun_mp"; + level.ospreysettings["osprey_gunner"].helitype = "osprey_gunner"; + level.ospreysettings["osprey_gunner"].droptype = "airdrop_osprey_gunner"; + level.ospreysettings["osprey_gunner"].maxhealth = level.heli_maxhealth * 2; + level.ospreysettings["osprey_gunner"].timeout = 75; + foreach(var_01 in level.ospreysettings) + { + precachevehicle(var_01.vehicle); + precacheitem(var_01.weaponinfo); + precachemodel(var_01.modelbase); + precachemodel(var_01.modelblades); + precachestring(var_01.prompt); + precachestring(var_01.name); + level.chopper_fx["explode"]["death"][var_01.modelbase] = loadfx("explosions/helicopter_explosion_osprey"); + level.chopper_fx["explode"]["air_death"][var_01.modelbase] = loadfx("explosions/helicopter_explosion_osprey_air_mp"); + level.chopper_fx["anim"]["blades_anim_up"][var_01.modelbase] = loadfx("props/osprey_blades_anim_up"); + level.chopper_fx["anim"]["blades_anim_down"][var_01.modelbase] = loadfx("props/osprey_blades_anim_down"); + level.chopper_fx["anim"]["blades_static_up"][var_01.modelbase] = loadfx("props/osprey_blades_up"); + level.chopper_fx["anim"]["blades_static_down"][var_01.modelbase] = loadfx("props/osprey_blades_default"); + level.chopper_fx["anim"]["hatch_left_static_up"][var_01.modelbase] = loadfx("props/osprey_bottom_door_left_default"); + level.chopper_fx["anim"]["hatch_left_anim_down"][var_01.modelbase] = loadfx("props/osprey_bottom_door_left_anim_open"); + level.chopper_fx["anim"]["hatch_left_static_down"][var_01.modelbase] = loadfx("props/osprey_bottom_door_left_up"); + level.chopper_fx["anim"]["hatch_left_anim_up"][var_01.modelbase] = loadfx("props/osprey_bottom_door_left_anim_close"); + level.chopper_fx["anim"]["hatch_right_static_up"][var_01.modelbase] = loadfx("props/osprey_bottom_door_right_default"); + level.chopper_fx["anim"]["hatch_right_anim_down"][var_01.modelbase] = loadfx("props/osprey_bottom_door_right_anim_open"); + level.chopper_fx["anim"]["hatch_right_static_down"][var_01.modelbase] = loadfx("props/osprey_bottom_door_right_up"); + level.chopper_fx["anim"]["hatch_right_anim_up"][var_01.modelbase] = loadfx("props/osprey_bottom_door_right_anim_close"); + } + + level.air_support_locs = []; + level.killstreakfuncs["escort_airdrop"] = ::tryuseescortairdrop; + level.killstreakfuncs["osprey_gunner"] = ::tryuseospreygunner; +} + +//Function Number: 2 +tryuseescortairdrop(param_00,param_01) +{ + var_02 = 1; + if(isdefined(self.laststand) && !maps\mp\_utility::_hasperk("specialty_finalstand")) + { + self iprintlnbold(&"MP_UNAVILABLE_IN_LASTSTAND"); + return 0; + } + else if(isdefined(level.civilianjetflyby)) + { + self iprintlnbold(&"MP_CIVILIAN_AIR_TRAFFIC"); + return 0; + } + else if(isdefined(level.chopper)) + { + self iprintlnbold(&"MP_AIR_SPACE_TOO_CROWDED"); + return 0; + } + else if(maps\mp\_utility::currentactivevehiclecount() >= maps\mp\_utility::maxvehiclesallowed() || level.fauxvehiclecount + var_02 >= maps\mp\_utility::maxvehiclesallowed()) + { + self iprintlnbold(&"MP_TOO_MANY_VEHICLES"); + return 0; + } + else if(maps\mp\_utility::isusingremote()) + { + return 0; + } + + if(maps\mp\_utility::isairdenied()) + { + return 0; + } + + if(maps\mp\_utility::isemped()) + { + return 0; + } + + maps\mp\_utility::incrementfauxvehiclecount(); + var_04 = maps\mp\killstreaks\_airdrop::beginairdropviamarker(param_00,param_01,"escort_airdrop"); + if(!isdefined(var_04) || !var_04) + { + self notify("markerDetermined"); + maps\mp\_utility::decrementfauxvehiclecount(); + return 0; + } + + maps\mp\_matchdata::logkillstreakevent("escort_airdrop",self.origin); + return 1; +} + +//Function Number: 3 +tryuseospreygunner(param_00,param_01) +{ + var_02 = 1; + if(isdefined(self.laststand) && !maps\mp\_utility::_hasperk("specialty_finalstand")) + { + self iprintlnbold(&"MP_UNAVILABLE_IN_LASTSTAND"); + return 0; + } + else if(isdefined(level.civilianjetflyby)) + { + self iprintlnbold(&"MP_CIVILIAN_AIR_TRAFFIC"); + return 0; + } + else if(isdefined(level.chopper)) + { + self iprintlnbold(&"MP_AIR_SPACE_TOO_CROWDED"); + return 0; + } + else if(maps\mp\_utility::currentactivevehiclecount() >= maps\mp\_utility::maxvehiclesallowed() || level.fauxvehiclecount + var_02 >= maps\mp\_utility::maxvehiclesallowed()) + { + self iprintlnbold(&"MP_TOO_MANY_VEHICLES"); + return 0; + } + else if(maps\mp\_utility::isusingremote()) + { + return 0; + } + + if(maps\mp\_utility::isairdenied()) + { + return 0; + } + + if(maps\mp\_utility::isemped()) + { + return 0; + } + + maps\mp\_utility::incrementfauxvehiclecount(); + var_04 = selectdroplocation(param_00,"osprey_gunner","compass_objpoint_osprey_friendly","compass_objpoint_osprey_enemy",&"MP_SELECT_MOBILE_MORTAR_LOCATION"); + if(!isdefined(var_04) || !var_04) + { + maps\mp\_utility::decrementfauxvehiclecount(); + return 0; + } + + maps\mp\_matchdata::logkillstreakevent("osprey_gunner",self.origin); + return 1; +} + +//Function Number: 4 +finishsupportescortusage(param_00,param_01,param_02,param_03) +{ + self notify("used"); + var_04 = (0,param_02,0); + var_05 = 12000; + var_06 = getent("airstrikeheight","targetname"); + var_07 = var_06.origin[2]; + var_08 = level.heli_start_nodes[randomint(level.heli_start_nodes.size)]; + var_09 = var_08.origin; + var_0A = (param_01[0],param_01[1],var_07); + var_0B = param_01 + anglestoforward(var_04) * var_05; + var_0C = vectortoangles(var_0A - var_09); + var_0D = param_01; + param_01 = (param_01[0],param_01[1],var_07); + var_0E = createairship(self,param_00,var_09,var_0C,param_01,param_03); + var_09 = var_08; + usesupportescortairdrop(param_00,var_0E,var_09,var_0A,var_0B,var_07,var_0D); +} + +//Function Number: 5 +finishospreygunnerusage(param_00,param_01,param_02,param_03) +{ + self notify("used"); + var_04 = (0,param_02,0); + var_05 = 12000; + var_06 = getent("airstrikeheight","targetname"); + var_07 = var_06.origin[2]; + var_08 = level.heli_start_nodes[randomint(level.heli_start_nodes.size)]; + var_09 = var_08.origin; + var_0A = (param_01[0],param_01[1],var_07); + var_0B = param_01 + anglestoforward(var_04) * var_05; + var_0C = vectortoangles(var_0A - var_09); + param_01 = (param_01[0],param_01[1],var_07); + var_0D = createairship(self,param_00,var_09,var_0C,param_01,param_03); + var_09 = var_08; + useospreygunner(param_00,var_0D,var_09,var_0A,var_0B,var_07); +} + +//Function Number: 6 +stopselectionwatcher() +{ + self waittill("stop_location_selection",var_00); + switch(var_00) + { + case "emp": + case "cancel_location": + case "disconnect": + case "death": + self notify("customCancelLocation"); + break; + } +} + +//Function Number: 7 +selectdroplocation(param_00,param_01,param_02,param_03,param_04) +{ + self endon("customCancelLocation"); + var_05 = undefined; + var_06 = level.mapsize / 6.46875; + if(level.splitscreen) + { + var_06 = var_06 * 1.5; + } + + maps\mp\_utility::_beginlocationselection(param_01,"map_artillery_selector",0,500); + thread stopselectionwatcher(); + self waittill("confirm_location",var_07,var_08); + maps\mp\_utility::stoplocationselection(0); + maps\mp\_utility::setusingremote(param_01); + var_09 = maps\mp\killstreaks\_killstreaks::initridekillstreak(param_01); + if(var_09 != "success") + { + if(var_09 != "disconnect") + { + maps\mp\_utility::clearusingremote(); + } + + return 0; + } + + if(isdefined(level.chopper)) + { + maps\mp\_utility::clearusingremote(); + self iprintlnbold(&"MP_AIR_SPACE_TOO_CROWDED"); + return 0; + } + else if(maps\mp\_utility::currentactivevehiclecount() >= maps\mp\_utility::maxvehiclesallowed() || level.fauxvehiclecount >= maps\mp\_utility::maxvehiclesallowed()) + { + maps\mp\_utility::clearusingremote(); + self iprintlnbold(&"MP_TOO_MANY_VEHICLES"); + return 0; + } + + thread finishospreygunnerusage(param_00,var_07,var_08,param_01); + return 1; +} + +//Function Number: 8 +showicons(param_00,param_01,param_02,param_03) +{ + var_04 = maps\mp\gametypes\_hud_util::createfontstring("bigfixed",0.5); + var_04 maps\mp\gametypes\_hud_util::setpoint("CENTER","CENTER",0,-150); + var_04 settext(param_02); + self.locationobjectives = []; + for(var_05 = 0;var_05 < param_03;var_05++) + { + self.locationobjectives[var_05] = maps\mp\gametypes\_gameobjects::getnextobjid(); + objective_add(self.locationobjectives[var_05],"invisible",(0,0,0)); + objective_position(self.locationobjectives[var_05],level.air_support_locs[level.script][var_05]["origin"]); + objective_state(self.locationobjectives[var_05],"active"); + objective_player(self.locationobjectives[var_05],self getentitynumber()); + if(level.air_support_locs[level.script][var_05]["in_use"] == 1) + { + objective_icon(self.locationobjectives[var_05],param_01); + continue; + } + + objective_icon(self.locationobjectives[var_05],param_00); + } + + common_scripts\utility::waittill_any("cancel_location","picked_location","stop_location_selection"); + var_04 maps\mp\gametypes\_hud_util::destroyelem(); + for(var_05 = 0;var_05 < param_03;var_05++) + { + maps\mp\_utility::_objective_delete(self.locationobjectives[var_05]); + } +} + +//Function Number: 9 +createairship(param_00,param_01,param_02,param_03,param_04,param_05) +{ + var_06 = spawnhelicopter(param_00,param_02,param_03,level.ospreysettings[param_05].vehicle,level.ospreysettings[param_05].modelbase); + if(!isdefined(var_06)) + { + return undefined; + } + + var_06.ospreytype = param_05; + var_06.heli_type = level.ospreysettings[param_05].modelbase; + var_06.helitype = level.ospreysettings[param_05].helitype; + var_06.attractor = missile_createattractorent(var_06,level.heli_attract_strength,level.heli_attract_range); + var_06.lifeid = param_01; + var_06.team = param_00.pers["team"]; + var_06.pers["team"] = param_00.pers["team"]; + var_06.owner = param_00; + var_06.maxhealth = level.ospreysettings[param_05].maxhealth; + var_06.zoffset = (0,0,0); + var_06.targeting_delay = level.heli_targeting_delay; + var_06.primarytarget = undefined; + var_06.secondarytarget = undefined; + var_06.attacker = undefined; + var_06.currentstate = "ok"; + var_06.droptype = level.ospreysettings[param_05].droptype; + level.chopper = var_06; + var_06 maps\mp\killstreaks\_helicopter::addtohelilist(); + var_06 thread maps\mp\killstreaks\_helicopter::heli_flares_monitor(); + var_06 thread maps\mp\killstreaks\_helicopter::heli_leave_on_disconnect(param_00); + var_06 thread maps\mp\killstreaks\_helicopter::heli_leave_on_changeteams(param_00); + var_06 thread maps\mp\killstreaks\_helicopter::heli_leave_on_gameended(param_00); + var_07 = level.ospreysettings[param_05].timeout; + var_06 thread maps\mp\killstreaks\_helicopter::heli_leave_on_timeout(var_07); + var_06 thread maps\mp\killstreaks\_helicopter::heli_damage_monitor(); + var_06 thread maps\mp\killstreaks\_helicopter::heli_health(); + var_06 thread maps\mp\killstreaks\_helicopter::heli_existance(); + var_06 thread airshipfx(); + if(param_05 == "escort_airdrop") + { + var_08 = var_06.origin + anglestoforward(var_06.angles) * -200 + anglestoright(var_06.angles) * -200 + (0,0,200); + var_06.killcament = spawn("script_model",var_08); + var_06.killcament setscriptmoverkillcam("explosive"); + var_06.killcament linkto(var_06,"tag_origin"); + } + + return var_06; +} + +//Function Number: 10 +airshipfx() +{ + self endon("death"); + wait 0.05; + playfxontag(level.chopper_fx["anim"]["blades_static_down"][level.ospreysettings[self.ospreytype].modelbase],self,"TAG_BLADES_ATTACH"); + wait 0.05; + playfxontag(level.chopper_fx["anim"]["hatch_left_static_up"][level.ospreysettings[self.ospreytype].modelbase],self,level.ospreysettings[self.ospreytype].taghatchl); + wait 0.05; + playfxontag(level.chopper_fx["anim"]["hatch_right_static_up"][level.ospreysettings[self.ospreytype].modelbase],self,level.ospreysettings[self.ospreytype].taghatchr); + wait 0.05; + playfxontag(level.chopper_fx["light"]["belly"],self,"tag_light_belly"); + wait 0.05; + playfxontag(level.chopper_fx["light"]["tail"],self,"tag_light_tail"); +} + +//Function Number: 11 +usesupportescortairdrop(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + param_01 thread airshipflydefense(self,param_02,param_03,param_04,param_05,param_06); +} + +//Function Number: 12 +useospreygunner(param_00,param_01,param_02,param_03,param_04,param_05) +{ + thread ridegunner(param_00,param_01); + param_01 thread airshipflygunner(self,param_02,param_03,param_04,param_05); +} + +//Function Number: 13 +ridegunner(param_00,param_01) +{ + self endon("disconnect"); + param_01 endon("helicopter_done"); + thread maps\mp\_utility::teamplayercardsplash("used_osprey_gunner",self); + maps\mp\_utility::_giveweapon("heli_remote_mp"); + self switchtoweapon("heli_remote_mp"); + if(getdvarint("camera_thirdPerson")) + { + maps\mp\_utility::setthirdpersondof(0); + } + + param_01 vehicleturretcontrolon(self); + self playerlinkweaponviewtodelta(param_01,"tag_player",1,0,0,0,0,1); + self setplayerangles(param_01 gettagangles("tag_player")); + param_01 thread maps\mp\killstreaks\_helicopter::heli_targeting(); + thread maps\mp\killstreaks\_helicopter::weaponlockthink(param_01); + param_01.gunner = self; + self.heliridelifeid = param_00; + thread endrideonairshipdone(param_01); + thread waitsetthermal(1,param_01); + thread maps\mp\_utility::reinitializethermal(param_01); + for(;;) + { + param_01 waittill("turret_fire"); + param_01 fireweapon(); + earthquake(0.2,1,param_01.origin,1000); + } +} + +//Function Number: 14 +waitsetthermal(param_00,param_01) +{ + self endon("disconnect"); + param_01 endon("death"); + param_01 endon("helicopter_done"); + param_01 endon("crashing"); + param_01 endon("leaving"); + wait param_00; + self visionsetthermalforplayer(level.ac130.enhanced_vision,0); + self.lastvisionsetthermal = level.ac130.enhanced_vision; + self thermalvisionon(); + self thermalvisionfofoverlayon(); + thread maps\mp\killstreaks\_helicopter::thermalvision(param_01); +} + +//Function Number: 15 +showdefendprompt(param_00) +{ + self endon("disconnect"); + param_00 endon("helicopter_done"); + self.escort_prompt = maps\mp\gametypes\_hud_util::createfontstring("bigfixed",1.5); + self.escort_prompt maps\mp\gametypes\_hud_util::setpoint("CENTER","CENTER",0,-150); + self.escort_prompt settext(level.ospreysettings[param_00.ospreytype].prompt); + wait 6; + if(isdefined(self.escort_prompt)) + { + self.escort_prompt maps\mp\gametypes\_hud_util::destroyelem(); + } +} + +//Function Number: 16 +airshippitchpropsup() +{ + self endon("crashing"); + self endon("death"); + stopfxontag(level.chopper_fx["anim"]["blades_static_down"][level.ospreysettings[self.ospreytype].modelbase],self,"TAG_BLADES_ATTACH"); + playfxontag(level.chopper_fx["anim"]["blades_anim_up"][level.ospreysettings[self.ospreytype].modelbase],self,"TAG_BLADES_ATTACH"); + wait 1; + if(isdefined(self)) + { + playfxontag(level.chopper_fx["anim"]["blades_static_up"][level.ospreysettings[self.ospreytype].modelbase],self,"TAG_BLADES_ATTACH"); + } +} + +//Function Number: 17 +airshippitchpropsdown() +{ + self endon("crashing"); + self endon("death"); + stopfxontag(level.chopper_fx["anim"]["blades_static_up"][level.ospreysettings[self.ospreytype].modelbase],self,"TAG_BLADES_ATTACH"); + playfxontag(level.chopper_fx["anim"]["blades_anim_down"][level.ospreysettings[self.ospreytype].modelbase],self,"TAG_BLADES_ATTACH"); + wait 1; + if(isdefined(self)) + { + playfxontag(level.chopper_fx["anim"]["blades_static_down"][level.ospreysettings[self.ospreytype].modelbase],self,"TAG_BLADES_ATTACH"); + } +} + +//Function Number: 18 +airshippitchhatchup() +{ + self endon("crashing"); + self endon("death"); + stopfxontag(level.chopper_fx["anim"]["hatch_left_static_down"][level.ospreysettings[self.ospreytype].modelbase],self,level.ospreysettings[self.ospreytype].taghatchl); + playfxontag(level.chopper_fx["anim"]["hatch_left_anim_up"][level.ospreysettings[self.ospreytype].modelbase],self,level.ospreysettings[self.ospreytype].taghatchl); + stopfxontag(level.chopper_fx["anim"]["hatch_right_static_down"][level.ospreysettings[self.ospreytype].modelbase],self,level.ospreysettings[self.ospreytype].taghatchr); + playfxontag(level.chopper_fx["anim"]["hatch_right_anim_up"][level.ospreysettings[self.ospreytype].modelbase],self,level.ospreysettings[self.ospreytype].taghatchr); + wait 1; + if(isdefined(self)) + { + playfxontag(level.chopper_fx["anim"]["hatch_left_static_up"][level.ospreysettings[self.ospreytype].modelbase],self,level.ospreysettings[self.ospreytype].taghatchl); + playfxontag(level.chopper_fx["anim"]["hatch_right_static_up"][level.ospreysettings[self.ospreytype].modelbase],self,level.ospreysettings[self.ospreytype].taghatchr); + } +} + +//Function Number: 19 +airshippitchhatchdown() +{ + self endon("crashing"); + self endon("death"); + stopfxontag(level.chopper_fx["anim"]["hatch_left_static_up"][level.ospreysettings[self.ospreytype].modelbase],self,level.ospreysettings[self.ospreytype].taghatchl); + playfxontag(level.chopper_fx["anim"]["hatch_left_anim_down"][level.ospreysettings[self.ospreytype].modelbase],self,level.ospreysettings[self.ospreytype].taghatchl); + stopfxontag(level.chopper_fx["anim"]["hatch_right_static_up"][level.ospreysettings[self.ospreytype].modelbase],self,level.ospreysettings[self.ospreytype].taghatchr); + playfxontag(level.chopper_fx["anim"]["hatch_right_anim_down"][level.ospreysettings[self.ospreytype].modelbase],self,level.ospreysettings[self.ospreytype].taghatchr); + wait 1; + if(isdefined(self)) + { + playfxontag(level.chopper_fx["anim"]["hatch_left_static_down"][level.ospreysettings[self.ospreytype].modelbase],self,level.ospreysettings[self.ospreytype].taghatchl); + playfxontag(level.chopper_fx["anim"]["hatch_right_static_down"][level.ospreysettings[self.ospreytype].modelbase],self,level.ospreysettings[self.ospreytype].taghatchr); + } + + self notify("hatch_down"); +} + +//Function Number: 20 +getbestheight(param_00) +{ + self endon("helicopter_removed"); + self endon("heightReturned"); + var_01 = getent("airstrikeheight","targetname"); + if(isdefined(var_01)) + { + var_02 = var_01.origin[2]; + } + else if(isdefined(level.airstrikeheightscale)) + { + var_02 = 850 * level.airstrikeheightscale; + } + else + { + var_02 = 850; + } + + self.bestheight = var_02; + var_03 = 200; + var_04 = 0; + var_05 = 0; + for(var_06 = 0;var_06 < 125;var_06++) + { + wait 0.05; + var_07 = var_06 % 8; + var_08 = var_06 * 3; + switch(var_07) + { + case 0: + var_04 = var_08; + var_05 = var_08; + break; + + case 1: + var_04 = var_08 * -1; + var_05 = var_08 * -1; + break; + + case 2: + var_04 = var_08 * -1; + var_05 = var_08; + break; + + case 3: + var_04 = var_08; + var_05 = var_08 * -1; + break; + + case 4: + var_04 = 0; + var_05 = var_08 * -1; + break; + + case 5: + var_04 = var_08 * -1; + var_05 = 0; + break; + + case 6: + var_04 = var_08; + var_05 = 0; + break; + + case 7: + var_04 = 0; + var_05 = var_08; + break; + + default: + break; + } + + var_09 = bullettrace(param_00 + (var_04,var_05,1000),param_00 + (var_04,var_05,-10000),1,self); + if(var_09["position"][2] > var_03) + { + var_03 = var_09["position"][2]; + } + } + + self.bestheight = var_03 + 300; +} + +//Function Number: 21 +airshipflydefense(param_00,param_01,param_02,param_03,param_04,param_05) +{ + self notify("airshipFlyDefense"); + self endon("airshipFlyDefense"); + self endon("helicopter_removed"); + self endon("death"); + thread getbestheight(param_02); + maps\mp\killstreaks\_helicopter::heli_fly_simple_path(param_01); + self.pathgoal = param_02; + var_06 = self.angles; + self setyawspeed(30,30,30,0.3); + var_07 = self.origin; + var_08 = self.angles[1]; + var_09 = self.angles[0]; + self.timeout = level.ospreysettings[self.ospreytype].timeout; + self setvehgoalpos(param_02,1); + var_0A = gettime(); + self waittill("goal"); + var_0B = gettime() - var_0A * 0.001; + self.timeout = self.timeout - var_0B; + thread airshippitchpropsup(); + var_0C = param_02 * (1,1,0); + var_0C = var_0C + (0,0,self.bestheight); + self vehicle_setspeed(25,10,10); + self setyawspeed(20,10,10,0.3); + self setvehgoalpos(var_0C,1); + var_0A = gettime(); + self waittill("goal"); + var_0B = gettime() - var_0A * 0.001; + self.timeout = self.timeout - var_0B; + self sethoverparams(65,50,50); + ospreydropcrateslowimpulse(1,level.ospreysettings[self.ospreytype].tagdropcrates,var_0C); + thread killguysnearcrates(param_05); + self waittill("leaving"); + self notify("osprey_leaving"); + thread airshippitchpropsdown(); +} + +//Function Number: 22 +wait_and_delete(param_00) +{ + self endon("death"); + level endon("game_ended"); + wait param_00; + self delete(); +} + +//Function Number: 23 +killguysnearcrates(param_00) +{ + self endon("osprey_leaving"); + self endon("helicopter_removed"); + self endon("death"); + var_01 = param_00; + for(;;) + { + foreach(var_03 in level.players) + { + wait 0.05; + if(!isdefined(self)) + { + return; + } + + if(!isdefined(var_03)) + { + continue; + } + + if(!maps\mp\_utility::isreallyalive(var_03)) + { + continue; + } + + if(level.teambased && var_03.team == self.team) + { + continue; + } + + if(isdefined(self.owner) && var_03 == self.owner) + { + continue; + } + + if(var_03 maps\mp\_utility::_hasperk("specialty_blindeye")) + { + continue; + } + + if(distancesquared(var_01,var_03.origin) > 500000) + { + continue; + } + + thread aishootplayer(var_03,var_01); + waitforconfirmation(); + } + } +} + +//Function Number: 24 +aishootplayer(param_00,param_01) +{ + self notify("aiShootPlayer"); + self endon("aiShootPlayer"); + self endon("helicopter_removed"); + self endon("leaving"); + param_00 endon("death"); + self setturrettargetent(param_00); + self setlookatent(param_00); + thread targetdeathwaiter(param_00); + var_02 = 6; + var_03 = 2; + for(;;) + { + var_02--; + self fireweapon("tag_flash",param_00); + wait 0.15; + if(var_02 <= 0) + { + var_03--; + var_02 = 6; + if(distancesquared(param_00.origin,param_01) > 500000 || var_03 <= 0 || !maps\mp\_utility::isreallyalive(param_00)) + { + self notify("abandon_target"); + return; + } + + wait 1; + } + } +} + +//Function Number: 25 +targetdeathwaiter(param_00) +{ + self endon("abandon_target"); + self endon("leaving"); + self endon("helicopter_removed"); + param_00 waittill("death"); + self notify("target_killed"); +} + +//Function Number: 26 +waitforconfirmation() +{ + self endon("helicopter_removed"); + self endon("leaving"); + self endon("target_killed"); + self endon("abandon_target"); + wait 0.05; +} + +//Function Number: 27 +airshipflygunner(param_00,param_01,param_02,param_03,param_04) +{ + self notify("airshipFlyGunner"); + self endon("airshipFlyGunner"); + self endon("helicopter_removed"); + self endon("death"); + thread getbestheight(param_02); + maps\mp\killstreaks\_helicopter::heli_fly_simple_path(param_01); + thread maps\mp\killstreaks\_helicopter::heli_leave_on_timeout(level.ospreysettings[self.ospreytype].timeout); + var_05 = self.angles; + self setyawspeed(30,30,30,0.3); + var_06 = self.origin; + var_07 = self.angles[1]; + var_08 = self.angles[0]; + self.timeout = level.ospreysettings[self.ospreytype].timeout; + self setvehgoalpos(param_02,1); + var_09 = gettime(); + self waittill("goal"); + var_0A = gettime() - var_09 * 0.001; + self.timeout = self.timeout - var_0A; + thread airshippitchpropsup(); + var_0B = param_02 * (1,1,0); + var_0B = var_0B + (0,0,self.bestheight); + self vehicle_setspeed(25,10,10); + self setyawspeed(20,10,10,0.3); + self setvehgoalpos(var_0B,1); + var_09 = gettime(); + self waittill("goal"); + var_0A = gettime() - var_09 * 0.001; + self.timeout = self.timeout - var_0A; + ospreydropcrates(1,level.ospreysettings[self.ospreytype].tagdropcrates,var_0B); + var_0C = 1; + if(isdefined(param_00)) + { + param_00 common_scripts\utility::waittill_any_timeout(var_0C,"disconnect"); + } + + self.timeout = self.timeout - var_0C; + self setvehgoalpos(param_02,1); + var_09 = gettime(); + self waittill("goal"); + var_0A = gettime() - var_09 * 0.001; + self.timeout = self.timeout - var_0A; + var_0D = getentarray("heli_attack_area","targetname"); + var_0E = level.heli_loop_nodes[randomint(level.heli_loop_nodes.size)]; + if(var_0D.size) + { + thread maps\mp\killstreaks\_helicopter::heli_fly_well(var_0D); + } + else + { + thread maps\mp\killstreaks\_helicopter::heli_fly_loop_path(var_0E); + } + + self waittill("leaving"); + thread airshippitchpropsdown(); +} + +//Function Number: 28 +ospreydropcrateslowimpulse(param_00,param_01,param_02) +{ + thread airshippitchhatchdown(); + self waittill("hatch_down"); + var_03[0] = thread maps\mp\killstreaks\_airdrop::dropthecrate(undefined,self.droptype,undefined,0,undefined,self.origin,(randomint(10),randomint(10),randomint(10)),undefined,param_01); + wait 0.05; + self notify("drop_crate"); + wait param_00; + wait 0.05; + self notify("drop_crate",var_7B[1],thread maps\mp\killstreaks\_airdrop::dropthecrate(undefined,self.droptype,undefined,0,undefined,self.origin,(randomint(100),randomint(100),randomint(100)),var_03,param_01)); + wait param_01; + wait 0.05; + self notify("drop_crate",var_7B[2],thread maps\mp\killstreaks\_airdrop::dropthecrate(undefined,self.droptype,undefined,0,undefined,self.origin,(randomint(50),randomint(50),randomint(50)),var_7B,param_02)); + wait param_01; + wait 0.05; + self notify("drop_crate",var_7B[3],thread maps\mp\killstreaks\_airdrop::dropthecrate(undefined,self.droptype,undefined,0,undefined,self.origin,(randomintrange(-100,0),randomintrange(-100,0),randomintrange(-100,0)),var_7B,param_02)); + wait param_01; + thread maps\mp\killstreaks\_airdrop::dropthecrate(undefined,self.droptype,undefined,0,undefined,self.origin,(randomintrange(-50,0),randomintrange(-50,0),randomintrange(-50,0)),var_7B,param_02); + wait 0.05; + self notify("drop_crate"); + wait 1; + thread airshippitchhatchup(); +} + +//Function Number: 29 +ospreydropcrates(param_00,param_01,param_02) +{ + thread airshippitchhatchdown(); + self waittill("hatch_down"); + var_03[0] = thread maps\mp\killstreaks\_airdrop::dropthecrate(undefined,self.droptype,undefined,0,undefined,self.origin,(randomint(10),randomint(10),randomint(10)),undefined,param_01); + wait 0.05; + self.timeout = self.timeout - 0.05; + self notify("drop_crate"); + wait param_00; + self.timeout = self.timeout - param_00; + wait 0.05; + self.timeout = self.timeout - 0.05; + self notify("drop_crate",var_7B[1],thread maps\mp\killstreaks\_airdrop::dropthecrate(undefined,self.droptype,undefined,0,undefined,self.origin,(randomint(100),randomint(100),randomint(100)),var_03,param_01)); + wait param_01; + self.timeout = self.timeout - param_01; + wait 0.05; + self.timeout = self.timeout - 0.05; + self notify("drop_crate",var_7B[2],thread maps\mp\killstreaks\_airdrop::dropthecrate(undefined,self.droptype,undefined,0,undefined,self.origin,(randomint(50),randomint(50),randomint(50)),var_7B,param_02)); + wait 1; + thread airshippitchhatchup(); +} + +//Function Number: 30 +endride(param_00) +{ + if(isdefined(self.escort_prompt)) + { + self.escort_prompt maps\mp\gametypes\_hud_util::destroyelem(); + } + + self remotecamerasoundscapeoff(); + self thermalvisionoff(); + self thermalvisionfofoverlayoff(); + self unlink(); + maps\mp\_utility::clearusingremote(); + if(getdvarint("camera_thirdPerson")) + { + maps\mp\_utility::setthirdpersondof(1); + } + + self visionsetthermalforplayer(game["thermal_vision"],0); + if(isdefined(param_00)) + { + param_00 vehicleturretcontroloff(self); + } + + self notify("heliPlayer_removed"); + self switchtoweapon(common_scripts\utility::getlastweapon()); + self takeweapon("heli_remote_mp"); +} + +//Function Number: 31 +endrideonairshipdone(param_00) +{ + self endon("disconnect"); + param_00 waittill("helicopter_done"); + endride(param_00); +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/killstreaks/_harrier.gsc b/MW3/PC/MP/maps/mp/killstreaks/_harrier.gsc new file mode 100644 index 0000000..12dd75d --- /dev/null +++ b/MW3/PC/MP/maps/mp/killstreaks/_harrier.gsc @@ -0,0 +1,1184 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\killstreaks\_harrier.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 46 + * Decompile Time: 1007 ms + * Timestamp: 10/27/2023 2:14:03 AM +*******************************************************************/ + +//Function Number: 1 +beginharrier(param_00,param_01,param_02) +{ + var_03 = getent("airstrikeheight","targetname"); + if(isdefined(var_03)) + { + var_04 = var_03.origin[2]; + } + else if(isdefined(level.airstrikeheightscale)) + { + var_04 = 850 * level.airstrikeheightscale; + } + else + { + var_04 = 850; + } + + param_02 = param_02 * (1,1,0); + var_05 = param_02 + (0,0,var_04); + var_06 = spawndefensiveharrier(param_00,self,param_01,var_05); + var_06.pathgoal = var_05; + return var_06; +} + +//Function Number: 2 +getcorrectheight(param_00,param_01,param_02) +{ + var_03 = 1200; + var_04 = tracegroundpoint(param_00,param_01); + var_05 = var_04 + var_03; + if(isdefined(level.airstrikeheightscale) && var_05 < 850 * level.airstrikeheightscale) + { + var_05 = 950 * level.airstrikeheightscale; + } + + var_05 = var_05 + randomint(param_02); + return var_05; +} + +//Function Number: 3 +spawndefensiveharrier(param_00,param_01,param_02,param_03) +{ + var_04 = vectortoangles(param_03 - param_02); + if(param_01.team == "allies") + { + var_05 = spawnhelicopter(param_01,param_02,var_04,"harrier_mp","vehicle_av8b_harrier_jet_mp"); + } + else + { + var_05 = spawnhelicopter(param_02,param_03,var_05,"harrier_mp","vehicle_av8b_harrier_jet_opfor_mp"); + } + + if(!isdefined(var_05)) + { + return; + } + + var_05 addtohelilist(); + var_05 thread removefromhelilistondeath(); + var_05.speed = 250; + var_05.accel = 175; + var_05.health = 3000; + var_05.maxhealth = var_05.health; + var_05.team = param_01.team; + var_05.owner = param_01; + var_05 setcandamage(1); + var_05.owner = param_01; + var_05 thread harrierdestroyed(); + var_05 setmaxpitchroll(0,90); + var_05 vehicle_setspeed(var_05.speed,var_05.accel); + var_05 thread playharrierfx(); + var_05 setdamagestate(3); + var_05.missiles = 6; + var_05.pers["team"] = var_05.team; + var_05 sethoverparams(50,100,50); + var_05 setturningability(0.05); + var_05 setyawspeed(45,25,25,0.5); + var_05.defendloc = param_03; + var_05.lifeid = param_00; + var_05.damagecallback = ::callback_vehicledamage; + level.harriers = common_scripts\utility::array_removeundefined(level.harriers); + level.harriers[level.harriers.size] = var_05; + return var_05; +} + +//Function Number: 4 +defendlocation(param_00) +{ + param_00 endon("death"); + param_00 thread harriertimer(); + param_00 setvehgoalpos(param_00.pathgoal,1); + param_00 thread closetogoalcheck(param_00.pathgoal); + param_00 waittill("goal"); + param_00 stopharrierwingfx(); + param_00 engageground(); +} + +//Function Number: 5 +closetogoalcheck(param_00) +{ + self endon("goal"); + self endon("death"); + for(;;) + { + if(distance2d(self.origin,param_00) < 768) + { + self setmaxpitchroll(45,25); + break; + } + + wait 0.05; + } +} + +//Function Number: 6 +engageground() +{ + self notify("engageGround"); + self endon("engageGround"); + self endon("death"); + thread harriergettargets(); + thread randomharriermovement(); + var_00 = self.defendloc; + self vehicle_setspeed(15,5); + self setvehgoalpos(var_00,1); + self waittill("goal"); +} + +//Function Number: 7 +harrierleave() +{ + self endon("death"); + self setmaxpitchroll(0,0); + self notify("leaving"); + breaktarget(1); + self notify("stopRand"); + for(;;) + { + self vehicle_setspeed(35,25); + var_00 = self.origin + anglestoforward((0,randomint(360),0)) * 500; + var_00 = var_00 + (0,0,900); + var_01 = bullettrace(self.origin,self.origin + (0,0,900),0,self); + if(var_01["surfacetype"] == "none") + { + break; + } + + wait 0.1; + } + + self setvehgoalpos(var_00,1); + thread startharrierwingfx(); + self waittill("goal"); + self playsound("harrier_fly_away"); + var_02 = getpathend(); + self vehicle_setspeed(250,75); + self setvehgoalpos(var_02,1); + self waittill("goal"); + level.airplane[level.airplane.size - 1] = undefined; + self notify("harrier_gone"); + thread harrierdelete(); +} + +//Function Number: 8 +harrierdelete() +{ + self delete(); +} + +//Function Number: 9 +harriertimer() +{ + self endon("death"); + maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause(45); + harrierleave(); +} + +//Function Number: 10 +randomharriermovement() +{ + self notify("randomHarrierMovement"); + self endon("randomHarrierMovement"); + self endon("stopRand"); + self endon("death"); + self endon("acquiringTarget"); + self endon("leaving"); + var_00 = self.defendloc; + for(;;) + { + var_01 = getnewpoint(self.origin); + self setvehgoalpos(var_01,1); + self waittill("goal"); + wait randomintrange(3,6); + self notify("randMove"); + } +} + +//Function Number: 11 +getnewpoint(param_00,param_01) +{ + self endon("stopRand"); + self endon("death"); + self endon("acquiringTarget"); + self endon("leaving"); + if(!isdefined(param_01)) + { + var_02 = []; + foreach(var_04 in level.players) + { + if(var_04 == self) + { + continue; + } + + if(!level.teambased || var_04.team != self.team) + { + var_02[var_02.size] = var_04.origin; + } + } + + if(var_02.size > 0) + { + var_06 = averagepoint(var_02); + var_07 = var_06[0]; + var_08 = var_06[1]; + } + else + { + var_09 = level.mapcenter; + var_0A = level.mapsize / 6 - 200; + var_07 = randomfloatrange(var_09[0] - var_0A,var_09[0] + var_0A); + var_08 = randomfloatrange(var_09[1] - var_0A,var_09[1] + var_0A); + } + + var_0B = getcorrectheight(var_07,var_08,20); + } + else if(common_scripts\utility::cointoss()) + { + var_0C = self.origin - self.besttarget.origin; + var_07 = var_0C[0]; + var_08 = var_0C[1] * -1; + var_0B = getcorrectheight(var_07,var_08,20); + var_0D = (var_08,var_07,var_0B); + if(distance2d(self.origin,var_0D) > 1200) + { + var_08 = var_08 * 0.5; + var_07 = var_07 * 0.5; + var_0D = (var_08,var_07,var_0B); + } + } + else + { + if(distance2d(self.origin,self.besttarget.origin) < 200) + { + return; + } + + var_0E = self.angles[1]; + var_0F = (0,var_0E,0); + var_10 = self.origin + anglestoforward(var_0F) * randomintrange(200,400); + var_0B = getcorrectheight(var_10[0],var_10[1],20); + var_07 = var_10[0]; + var_08 = var_10[1]; + } + + for(;;) + { + var_11 = tracenewpoint(var_07,var_08,var_0B); + if(var_11 != 0) + { + return var_11; + } + + var_07 = randomfloatrange(param_00[0] - 1200,param_00[0] + 1200); + var_08 = randomfloatrange(param_00[1] - 1200,param_00[1] + 1200); + var_0B = getcorrectheight(var_07,var_08,20); + } +} + +//Function Number: 12 +tracenewpoint(param_00,param_01,param_02) +{ + self endon("stopRand"); + self endon("death"); + self endon("acquiringTarget"); + self endon("leaving"); + self endon("randMove"); + for(var_03 = 1;var_03 <= 10;var_03++) + { + switch(var_03) + { + case 1: + var_04 = bullettrace(self.origin,(param_00,param_01,param_02),0,self); + break; + + case 2: + var_04 = bullettrace(self gettagorigin("tag_left_wingtip"),(param_00,param_01,param_02),0,self); + break; + + case 3: + var_04 = bullettrace(self gettagorigin("tag_right_wingtip"),(param_00,param_01,param_02),0,self); + break; + + case 4: + var_04 = bullettrace(self gettagorigin("tag_engine_left2"),(param_00,param_01,param_02),0,self); + break; + + case 5: + var_04 = bullettrace(self gettagorigin("tag_engine_right2"),(param_00,param_01,param_02),0,self); + break; + + case 6: + var_04 = bullettrace(self gettagorigin("tag_right_alamo_missile"),(param_00,param_01,param_02),0,self); + break; + + case 7: + var_04 = bullettrace(self gettagorigin("tag_left_alamo_missile"),(param_00,param_01,param_02),0,self); + break; + + case 8: + var_04 = bullettrace(self gettagorigin("tag_right_archer_missile"),(param_00,param_01,param_02),0,self); + break; + + case 9: + var_04 = bullettrace(self gettagorigin("tag_left_archer_missile"),(param_00,param_01,param_02),0,self); + break; + + case 10: + var_04 = bullettrace(self gettagorigin("tag_light_tail"),(param_00,param_01,param_02),0,self); + break; + + default: + var_04 = bullettrace(self.origin,(param_00,param_01,param_02),0,self); + break; + } + + if(var_04["surfacetype"] != "none") + { + return 0; + } + + wait 0.05; + } + + var_05 = (param_00,param_01,param_02); + return var_05; +} + +//Function Number: 13 +tracegroundpoint(param_00,param_01) +{ + self endon("death"); + self endon("acquiringTarget"); + self endon("leaving"); + var_02 = -9999999; + var_03 = 9999999; + var_04 = -9999999; + var_05 = self.origin[2]; + var_06 = undefined; + var_07 = undefined; + for(var_08 = 1;var_08 <= 5;var_08++) + { + switch(var_08) + { + case 1: + var_09 = bullettrace((param_00,param_01,var_05),(param_00,param_01,var_04),0,self); + break; + + case 2: + var_09 = bullettrace((param_00 + 20,param_01 + 20,var_05),(param_00 + 20,param_01 + 20,var_04),0,self); + break; + + case 3: + var_09 = bullettrace((param_00 - 20,param_01 - 20,var_05),(param_00 - 20,param_01 - 20,var_04),0,self); + break; + + case 4: + var_09 = bullettrace((param_00 + 20,param_01 - 20,var_05),(param_00 + 20,param_01 - 20,var_04),0,self); + break; + + case 5: + var_09 = bullettrace((param_00 - 20,param_01 + 20,var_05),(param_00 - 20,param_01 + 20,var_04),0,self); + break; + + default: + var_09 = bullettrace(self.origin,(param_00,param_01,var_04),0,self); + break; + } + + if(var_09["position"][2] > var_02) + { + var_02 = var_09["position"][2]; + var_06 = var_09; + } + else if(var_09["position"][2] < var_03) + { + var_03 = var_09["position"][2]; + var_07 = var_09; + } + + wait 0.05; + } + + return var_02; +} + +//Function Number: 14 +playharrierfx() +{ + self endon("death"); + wait 0.2; + playfxontag(level.fx_airstrike_contrail,self,"tag_right_wingtip"); + playfxontag(level.fx_airstrike_contrail,self,"tag_left_wingtip"); + wait 0.2; + playfxontag(level.harrier_afterburnerfx,self,"tag_engine_right"); + playfxontag(level.harrier_afterburnerfx,self,"tag_engine_left"); + wait 0.2; + playfxontag(level.harrier_afterburnerfx,self,"tag_engine_right2"); + playfxontag(level.harrier_afterburnerfx,self,"tag_engine_left2"); + wait 0.2; + playfxontag(level.chopper_fx["light"]["left"],self,"tag_light_L_wing"); + wait 0.2; + playfxontag(level.chopper_fx["light"]["right"],self,"tag_light_R_wing"); + wait 0.2; + playfxontag(level.chopper_fx["light"]["belly"],self,"tag_light_belly"); + wait 0.2; + playfxontag(level.chopper_fx["light"]["tail"],self,"tag_light_tail"); +} + +//Function Number: 15 +stopharrierwingfx() +{ + stopfxontag(level.fx_airstrike_contrail,self,"tag_right_wingtip"); + stopfxontag(level.fx_airstrike_contrail,self,"tag_left_wingtip"); +} + +//Function Number: 16 +startharrierwingfx() +{ + wait 3; + if(!isdefined(self)) + { + return; + } + + playfxontag(level.fx_airstrike_contrail,self,"tag_right_wingtip"); + playfxontag(level.fx_airstrike_contrail,self,"tag_left_wingtip"); +} + +//Function Number: 17 +getpathstart(param_00) +{ + var_01 = 100; + var_02 = 15000; + var_03 = 850; + var_04 = randomfloat(360); + var_05 = (0,var_04,0); + var_06 = param_00 + anglestoforward(var_05) * -1 * var_02; + var_06 = var_06 + (randomfloat(2) - 1 * var_01,randomfloat(2) - 1 * var_01,0); + return var_06; +} + +//Function Number: 18 +getpathend() +{ + var_00 = 150; + var_01 = 15000; + var_02 = 850; + var_03 = self.angles[1]; + var_04 = (0,var_03,0); + var_05 = self.origin + anglestoforward(var_04) * var_01; + return var_05; +} + +//Function Number: 19 +fireontarget(param_00,param_01) +{ + self endon("leaving"); + self endon("stopfiring"); + self endon("explode"); + self endon("death"); + self.besttarget endon("death"); + self.besttarget endon("disconnect"); + var_02 = gettime(); + var_03 = gettime(); + var_04 = 0; + self setvehweapon("harrier_20mm_mp"); + if(!isdefined(param_01)) + { + param_01 = 50; + } + + for(;;) + { + if(isreadytofire(param_00)) + { + break; + } + else + { + wait 0.25; + } + } + + self setturrettargetent(self.besttarget,(0,0,50)); + var_05 = 25; + for(;;) + { + if(var_05 == 25) + { + self playloopsound("weap_cobra_20mm_fire_npc"); + } + + var_05--; + self fireweapon("tag_flash",self.besttarget,(0,0,0),0.05); + wait 0.1; + if(var_05 <= 0) + { + self stoploopsound(); + wait 1; + var_05 = 25; + } + } +} + +//Function Number: 20 +isreadytofire(param_00) +{ + self endon("death"); + self endon("leaving"); + if(!isdefined(param_00)) + { + param_00 = 10; + } + + var_01 = anglestoforward(self.angles); + var_02 = self.besttarget.origin - self.origin; + var_01 = var_01 * (1,1,0); + var_02 = var_02 * (1,1,0); + var_02 = vectornormalize(var_02); + var_01 = vectornormalize(var_01); + var_03 = vectordot(var_02,var_01); + var_04 = cos(param_00); + if(var_03 >= var_04) + { + return 1; + } + + return 0; +} + +//Function Number: 21 +acquiregroundtarget(param_00) +{ + self endon("death"); + self endon("leaving"); + if(param_00.size == 1) + { + self.besttarget = param_00[0]; + } + else + { + self.besttarget = getbesttarget(param_00); + } + + backtodefendlocation(0); + self notify("acquiringTarget"); + self setturrettargetent(self.besttarget); + self setlookatent(self.besttarget); + var_01 = getnewpoint(self.origin,1); + self setvehgoalpos(var_01,1); + thread watchtargetdeath(); + thread watchtargetlos(); + self setvehweapon("harrier_20mm_mp"); + thread fireontarget(); +} + +//Function Number: 22 +backtodefendlocation(param_00) +{ + self setvehgoalpos(self.defendloc,1); + if(isdefined(param_00) && param_00) + { + self waittill("goal"); + } +} + +//Function Number: 23 +wouldcollide(param_00) +{ + var_01 = bullettrace(self.origin,param_00,1,self); + if(var_01["position"] == param_00) + { + return 0; + } + + return 1; +} + +//Function Number: 24 +watchtargetdeath() +{ + self notify("watchTargetDeath"); + self endon("watchTargetDeath"); + self endon("newTarget"); + self endon("death"); + self endon("leaving"); + self.besttarget waittill("death"); + thread breaktarget(); +} + +//Function Number: 25 +watchtargetlos(param_00) +{ + self endon("death"); + self.besttarget endon("death"); + self.besttarget endon("disconnect"); + self endon("leaving"); + self endon("newTarget"); + var_01 = undefined; + if(!isdefined(param_00)) + { + param_00 = 1000; + } + + for(;;) + { + if(!istarget(self.besttarget)) + { + thread breaktarget(); + return; + } + + if(!isdefined(self.besttarget)) + { + thread breaktarget(); + return; + } + + if(self.besttarget sightconetrace(self.origin,self) < 1) + { + if(!isdefined(var_01)) + { + var_01 = gettime(); + } + + if(gettime() - var_01 > param_00) + { + thread breaktarget(); + return; + } + } + else + { + var_01 = undefined; + } + + wait 0.25; + } +} + +//Function Number: 26 +breaktarget(param_00) +{ + self endon("death"); + self clearlookatent(); + self stoploopsound(); + self notify("stopfiring"); + if(isdefined(param_00) && param_00) + { + return; + } + + thread randomharriermovement(); + self notify("newTarget"); + thread harriergettargets(); +} + +//Function Number: 27 +harriergettargets() +{ + self notify("harrierGetTargets"); + self endon("harrierGetTargets"); + self endon("death"); + self endon("leaving"); + var_00 = []; + for(;;) + { + var_00 = []; + var_01 = level.players; + if(isdefined(level.chopper) && level.chopper.team != self.team && isalive(level.chopper)) + { + if(!isdefined(level.chopper.nontarget) || isdefined(level.chopper.nontarget) && !level.chopper.nontarget) + { + thread engagevehicle(level.chopper); + return; + } + else + { + backtodefendlocation(1); + } + } + + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + var_03 = var_01[var_02]; + if(istarget(var_03)) + { + if(isdefined(var_01[var_02])) + { + var_00[var_00.size] = var_01[var_02]; + } + } + else + { + continue; + } + + wait 0.05; + } + + if(var_00.size > 0) + { + acquiregroundtarget(var_00); + return; + } + + wait 1; + } +} + +//Function Number: 28 +istarget(param_00) +{ + self endon("death"); + if(!isalive(param_00) || param_00.sessionstate != "playing") + { + return 0; + } + + if(isdefined(self.owner) && param_00 == self.owner) + { + return 0; + } + + if(distance(param_00.origin,self.origin) > 8192) + { + return 0; + } + + if(distance2d(param_00.origin,self.origin) < 768) + { + return 0; + } + + if(!isdefined(param_00.pers["team"])) + { + return 0; + } + + if(level.teambased && param_00.pers["team"] == self.team) + { + return 0; + } + + if(param_00.pers["team"] == "spectator") + { + return 0; + } + + if(isdefined(param_00.spawntime) && gettime() - param_00.spawntime / 1000 <= 5) + { + return 0; + } + + if(param_00 maps\mp\_utility::_hasperk("specialty_blindeye")) + { + return 0; + } + + var_01 = self.origin + (0,0,-160); + var_02 = anglestoforward(self.angles); + var_03 = var_01 + 144 * var_02; + var_04 = param_00 sightconetrace(self.origin,self); + if(var_04 < 1) + { + return 0; + } + + return 1; +} + +//Function Number: 29 +getbesttarget(param_00) +{ + self endon("death"); + var_01 = self gettagorigin("tag_flash"); + var_02 = self.origin; + var_03 = anglestoforward(self.angles); + var_04 = undefined; + var_05 = undefined; + var_06 = 0; + foreach(var_08 in param_00) + { + var_09 = abs(vectortoangles(var_08.origin - self.origin)[1]); + var_0A = abs(self gettagangles("tag_flash")[1]); + var_09 = abs(var_09 - var_0A); + var_0B = var_08 getweaponslistitems(); + foreach(var_0D in var_0B) + { + if(issubstr(var_0D,"at4") || issubstr(var_0D,"stinger") || issubstr(var_0D,"jav")) + { + var_09 = var_09 - 40; + } + } + + if(distance(self.origin,var_08.origin) > 2000) + { + var_09 = var_09 + 40; + } + + if(!isdefined(var_04)) + { + var_04 = var_09; + var_05 = var_08; + continue; + } + + if(var_04 > var_09) + { + var_04 = var_09; + var_05 = var_08; + } + } + + return var_05; +} + +//Function Number: 30 +firemissile(param_00) +{ + self endon("death"); + self endon("leaving"); + if(self.missiles <= 0) + { + return; + } + + var_01 = checkforfriendlies(param_00,256); + if(!isdefined(param_00)) + { + return; + } + + if(distance2d(self.origin,param_00.origin) < 512) + { + return; + } + + if(isdefined(var_01) && var_01) + { + return; + } + + self.missiles--; + self setvehweapon("harrier_FFAR_mp"); + if(isdefined(param_00.targetent)) + { + var_02 = self fireweapon("tag_flash",param_00.targetent,(0,0,-250)); + } + else + { + var_02 = self fireweapon("tag_flash",var_01,(0,0,-250)); + } + + var_02 missile_setflightmodedirect(); + var_02 missile_settargetent(param_00); +} + +//Function Number: 31 +checkforfriendlies(param_00,param_01) +{ + self endon("death"); + self endon("leaving"); + var_02 = []; + var_03 = level.players; + var_04 = param_00.origin; + for(var_05 = 0;var_05 < var_03.size;var_05++) + { + var_06 = var_03[var_05]; + if(var_06.team != self.team) + { + continue; + } + + var_07 = var_06.origin; + if(distance2d(var_07,var_04) < 512) + { + return 1; + } + } + + return 0; +} + +//Function Number: 32 +callback_vehicledamage(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A,param_0B) +{ + if((param_01 == self || isdefined(param_01.pers) && param_01.pers["team"] == self.team && level.teambased) && param_01 != self.owner) + { + return; + } + + if(self.health <= 0) + { + return; + } + + switch(param_05) + { + case "javelin_mp": + case "stinger_mp": + case "remotemissile_projectile_mp": + case "ac130_40mm_mp": + case "ac130_105mm_mp": + self.var_30C8 = 1; + param_02 = self.maxhealth + 1; + break; + + case "rpg_mp": + case "at4_mp": + self.var_30C8 = 1; + param_02 = self.maxhealth - 900; + break; + + default: + if(param_05 != "none") + { + param_02 = int(param_02 / 2); + } + + self.var_30C8 = 0; + break; + } + + param_01 maps\mp\gametypes\_damagefeedback::updatedamagefeedback(""); + if(isplayer(param_01) && param_01 maps\mp\_utility::_hasperk("specialty_armorpiercing")) + { + var_0C = int(param_02 * level.armorpiercingmod); + param_02 = param_02 + var_0C; + } + + if(self.health <= param_02) + { + if(isplayer(param_01) && !isdefined(self.owner) || param_01 != self.owner) + { + thread maps\mp\_utility::teamplayercardsplash("callout_destroyed_harrier",param_01); + param_01 thread maps\mp\gametypes\_rank::giverankxp("kill",300,param_05,param_04); + thread maps\mp\gametypes\_missions::vehiclekilled(self.owner,self,undefined,param_01,param_02,param_04,param_05); + param_01 notify("destroyed_killstreak"); + } + + self notify("death"); + } + + if(self.health - param_02 <= 900 && !isdefined(self.smoking) || !self.smoking) + { + thread playdamageefx(); + self.smoking = 1; + } + + self vehicle_finishdamage(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A,param_0B); +} + +//Function Number: 33 +playdamageefx() +{ + self endon("death"); + stopfxontag(level.harrier_afterburnerfx,self,"tag_engine_left"); + playfxontag(level.harrier_smoke,self,"tag_engine_left"); + stopfxontag(level.harrier_afterburnerfx,self,"tag_engine_right"); + playfxontag(level.harrier_smoke,self,"tag_engine_right"); + wait 0.15; + stopfxontag(level.harrier_afterburnerfx,self,"tag_engine_left2"); + playfxontag(level.harrier_smoke,self,"tag_engine_left2"); + stopfxontag(level.harrier_afterburnerfx,self,"tag_engine_right2"); + playfxontag(level.harrier_smoke,self,"tag_engine_right2"); + playfxontag(level.chopper_fx["damage"]["heavy_smoke"],self,"tag_engine_left"); +} + +//Function Number: 34 +harrierdestroyed() +{ + self endon("harrier_gone"); + self waittill("death"); + if(!isdefined(self)) + { + return; + } + + if(!isdefined(self.var_30C8)) + { + self vehicle_setspeed(25,5); + thread harrierspin(randomintrange(180,220)); + wait randomfloatrange(0.5,1.5); + } + + harrierexplode(); +} + +//Function Number: 35 +harrierexplode() +{ + self playsound("harrier_jet_crash"); + level.airplane[level.airplane.size - 1] = undefined; + var_00 = self gettagangles("tag_deathfx"); + playfx(level.harrier_deathfx,self gettagorigin("tag_deathfx"),anglestoforward(var_00),anglestoup(var_00)); + self notify("explode"); + wait 0.05; + thread harrierdelete(); +} + +//Function Number: 36 +harrierspin(param_00) +{ + self endon("explode"); + playfxontag(level.chopper_fx["explode"]["medium"],self,"tag_origin"); + self setyawspeed(param_00,param_00,param_00); + while(isdefined(self)) + { + self settargetyaw(self.angles[1] + param_00 * 0.9); + wait 1; + } +} + +//Function Number: 37 +engagevehicle(param_00) +{ + param_00 endon("death"); + param_00 endon("leaving"); + param_00 endon("crashing"); + self endon("death"); + acquirevehicletarget(param_00); + thread fireonvehicletarget(); +} + +//Function Number: 38 +fireonvehicletarget() +{ + self endon("leaving"); + self endon("stopfiring"); + self endon("explode"); + self.besttarget endon("crashing"); + self.besttarget endon("leaving"); + self.besttarget endon("death"); + var_00 = gettime(); + if(isdefined(self.besttarget) && self.besttarget.classname == "script_vehicle") + { + self setturrettargetent(self.besttarget); + for(;;) + { + var_01 = distance2d(self.origin,self.besttarget.origin); + if(gettime() - var_00 > 2500 && var_01 > 1000) + { + firemissile(self.besttarget); + var_00 = gettime(); + } + + wait 0.1; + } + } +} + +//Function Number: 39 +acquirevehicletarget(param_00) +{ + self endon("death"); + self endon("leaving"); + self notify("newTarget"); + self.besttarget = param_00; + self notify("acquiringVehTarget"); + self setlookatent(self.besttarget); + thread watchvehtargetdeath(); + thread watchvehtargetcrash(); + self setturrettargetent(self.besttarget); +} + +//Function Number: 40 +watchvehtargetcrash() +{ + self endon("death"); + self endon("leaving"); + self.besttarget endon("death"); + self.besttarget endon("drop_crate"); + self.besttarget waittill("crashing"); + breakvehtarget(); +} + +//Function Number: 41 +watchvehtargetdeath() +{ + self endon("death"); + self endon("leaving"); + self.besttarget endon("crashing"); + self.besttarget endon("drop_crate"); + self.besttarget waittill("death"); + breakvehtarget(); +} + +//Function Number: 42 +breakvehtarget() +{ + self clearlookatent(); + if(isdefined(self.besttarget) && !isdefined(self.besttarget.nontarget)) + { + self.besttarget.nontarget = 1; + } + + self notify("stopfiring"); + self notify("newTarget"); + thread stopharrierwingfx(); + thread engageground(); +} + +//Function Number: 43 +evasivemanuverone() +{ + self setmaxpitchroll(15,80); + self vehicle_setspeed(50,100); + self setyawspeed(90,30,30,0.5); + var_00 = self.origin; + var_01 = self.angles[1]; + if(common_scripts\utility::cointoss()) + { + var_02 = (0,var_01 + 90,0); + } + else + { + var_02 = (0,var_02 - 90,0); + } + + var_03 = self.origin + anglestoforward(var_02) * 500; + self setvehgoalpos(var_03,1); + self waittill("goal"); +} + +//Function Number: 44 +drawline(param_00,param_01,param_02,param_03) +{ + if(!isdefined(param_03)) + { + param_03 = (1,1,1); + } + + var_04 = int(param_02 * 20); + for(var_05 = 0;var_05 < var_04;var_05++) + { + wait 0.05; + } +} + +//Function Number: 45 +addtohelilist() +{ + level.helis[self getentitynumber()] = self; +} + +//Function Number: 46 +removefromhelilistondeath() +{ + var_00 = self getentitynumber(); + self waittill("death"); + level.helis[var_00] = undefined; +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/killstreaks/_helicopter.gsc b/MW3/PC/MP/maps/mp/killstreaks/_helicopter.gsc new file mode 100644 index 0000000..e08cd07 --- /dev/null +++ b/MW3/PC/MP/maps/mp/killstreaks/_helicopter.gsc @@ -0,0 +1,2405 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\killstreaks\_helicopter.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 87 + * Decompile Time: 1719 ms + * Timestamp: 10/27/2023 2:14:09 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + var_00 = getentarray("heli_start","targetname"); + var_01 = getentarray("heli_loop_start","targetname"); + if(!var_00.size && !var_01.size) + { + return; + } + + level.heli_types = []; + precacheitem("heli_remote_mp"); + precachehelicopter("vehicle_cobra_helicopter_fly_low","cobra"); + precachehelicopter("vehicle_mi24p_hind_mp","hind"); + precachevehicle("cobra_mp"); + precacheitem("cobra_20mm_mp"); + precachehelicopter("vehicle_pavelow","pavelow"); + precachehelicopter("vehicle_pavelow_opfor","pavelow"); + precachevehicle("pavelow_mp"); + precacheturret("pavelow_minigun_mp"); + precachestring(&"SPLASHES_DESTROYED_PAVELOW"); + precachestring(&"SPLASHES_DESTROYED_MINIGUNNER"); + precachestring(&"SPLASHES_DESTROYED_HELICOPTER"); + level.chopper = undefined; + level.heli_start_nodes = getentarray("heli_start","targetname"); + level.heli_loop_nodes = getentarray("heli_loop_start","targetname"); + level.heli_leave_nodes = getentarray("heli_leave","targetname"); + level.heli_crash_nodes = getentarray("heli_crash_start","targetname"); + level.heli_missile_rof = 5; + level.heli_maxhealth = 2000; + level.heli_debug = 0; + level.heli_targeting_delay = 0.5; + level.heli_turretreloadtime = 1.5; + level.heli_turretclipsize = 40; + level.heli_visual_range = 3700; + level.heli_target_spawnprotection = 5; + level.heli_target_recognition = 0.5; + level.heli_missile_friendlycare = 256; + level.heli_missile_target_cone = 0.3; + level.heli_armor_bulletdamage = 0.3; + level.heli_attract_strength = 1000; + level.heli_attract_range = 4096; + level.heli_angle_offset = 90; + level.heli_forced_wait = 0; + level.chopper_fx["explode"]["death"] = []; + level.chopper_fx["explode"]["large"] = loadfx("explosions/helicopter_explosion_secondary_small"); + level.chopper_fx["explode"]["medium"] = loadfx("explosions/aerial_explosion"); + level.chopper_fx["smoke"]["trail"] = loadfx("smoke/smoke_trail_white_heli"); + level.chopper_fx["fire"]["trail"]["medium"] = loadfx("fire/fire_smoke_trail_L_emitter"); + level.chopper_fx["fire"]["trail"]["large"] = loadfx("fire/fire_smoke_trail_L"); + level.chopper_fx["damage"]["light_smoke"] = loadfx("smoke/smoke_trail_white_heli_emitter"); + level.chopper_fx["damage"]["heavy_smoke"] = loadfx("smoke/smoke_trail_black_heli_emitter"); + level.chopper_fx["damage"]["on_fire"] = loadfx("fire/fire_smoke_trail_L_emitter"); + level.chopper_fx["light"]["left"] = loadfx("misc/aircraft_light_wingtip_green"); + level.chopper_fx["light"]["right"] = loadfx("misc/aircraft_light_wingtip_red"); + level.chopper_fx["light"]["belly"] = loadfx("misc/aircraft_light_red_blink"); + level.chopper_fx["light"]["tail"] = loadfx("misc/aircraft_light_white_blink"); + level.fx_heli_dust = loadfx("treadfx/heli_dust_default"); + level.fx_heli_water = loadfx("treadfx/heli_water"); + makehelitype("cobra","explosions/helicopter_explosion_cobra_low",::defaultlightfx); + addairexplosion("cobra","explosions/aerial_explosion_cobra_low_mp"); + makehelitype("pavelow","explosions/helicopter_explosion_pavelow",::pavelowlightfx); + addairexplosion("pavelow","explosions/aerial_explosion_pavelow_mp"); + makehelitype("mi28","explosions/helicopter_explosion_mi28_flying",::defaultlightfx); + addairexplosion("mi28","explosions/aerial_explosion_mi28_flying_mp"); + makehelitype("hind","explosions/helicopter_explosion_hind_chernobyl",::defaultlightfx); + addairexplosion("hind","explosions/aerial_explosion_hind_chernobyl_mp"); + makehelitype("apache","explosions/helicopter_explosion_apache",::defaultlightfx); + addairexplosion("apache","explosions/aerial_explosion_apache_mp"); + makehelitype("littlebird","explosions/aerial_explosion_littlebird_mp",::defaultlightfx); + addairexplosion("littlebird","explosions/aerial_explosion_littlebird_mp"); + level.killstreakfuncs["helicopter"] = ::usehelicopter; + level.killstreakfuncs["helicopter_blackbox"] = ::usehelicopterblackbox; + level.killstreakfuncs["helicopter_flares"] = ::usehelicopterflares; + level.killstreakfuncs["helicopter_minigun"] = ::usehelicopterminigun; + level.killstreakfuncs["helicopter_mk19"] = ::usehelicoptermk19; + level.helidialog["tracking"][0] = "ac130_fco_moreenemy"; + level.helidialog["tracking"][1] = "ac130_fco_getthatguy"; + level.helidialog["tracking"][2] = "ac130_fco_guyrunnin"; + level.helidialog["tracking"][3] = "ac130_fco_gotarunner"; + level.helidialog["tracking"][4] = "ac130_fco_personnelthere"; + level.helidialog["tracking"][5] = "ac130_fco_rightthere"; + level.helidialog["tracking"][6] = "ac130_fco_tracking"; + level.helidialog["locked"][0] = "ac130_fco_lightemup"; + level.helidialog["locked"][1] = "ac130_fco_takehimout"; + level.helidialog["locked"][2] = "ac130_fco_nailthoseguys"; + level.lasthelidialogtime = 0; + maps\mp\_utility::queuecreate("helicopter"); +} + +//Function Number: 2 +makehelitype(param_00,param_01,param_02) +{ + level.chopper_fx["explode"]["death"][param_00] = loadfx(param_01); + level.lightfxfunc[param_00] = param_02; +} + +//Function Number: 3 +addairexplosion(param_00,param_01) +{ + level.chopper_fx["explode"]["air_death"][param_00] = loadfx(param_01); +} + +//Function Number: 4 +pavelowlightfx() +{ + playfxontag(level.chopper_fx["light"]["left"],self,"tag_light_L_wing1"); + wait 0.05; + playfxontag(level.chopper_fx["light"]["right"],self,"tag_light_R_wing1"); + wait 0.05; + playfxontag(level.chopper_fx["light"]["belly"],self,"tag_light_belly"); + wait 0.05; + playfxontag(level.chopper_fx["light"]["tail"],self,"tag_light_tail"); + wait 0.05; + playfxontag(level.chopper_fx["light"]["tail"],self,"tag_light_tail2"); + wait 0.05; + playfxontag(level.chopper_fx["light"]["belly"],self,"tag_light_cockpit01"); +} + +//Function Number: 5 +defaultlightfx() +{ + playfxontag(level.chopper_fx["light"]["left"],self,"tag_light_L_wing"); + wait 0.05; + playfxontag(level.chopper_fx["light"]["right"],self,"tag_light_R_wing"); + wait 0.05; + playfxontag(level.chopper_fx["light"]["belly"],self,"tag_light_belly"); + wait 0.05; + playfxontag(level.chopper_fx["light"]["tail"],self,"tag_light_tail"); +} + +//Function Number: 6 +usehelicopter(param_00) +{ + return tryusehelicopter(param_00,"helicopter"); +} + +//Function Number: 7 +usehelicopterblackbox(param_00) +{ + return tryusehelicopter(param_00,"blackbox"); +} + +//Function Number: 8 +usehelicopterflares(param_00) +{ + return tryusehelicopter(param_00,"flares"); +} + +//Function Number: 9 +usehelicopterminigun(param_00) +{ + if(isdefined(self.laststand) && !maps\mp\_utility::_hasperk("specialty_finalstand")) + { + self iprintlnbold(&"MP_UNAVILABLE_IN_LASTSTAND"); + return 0; + } + + return tryusehelicopter(param_00,"minigun"); +} + +//Function Number: 10 +usehelicoptermk19(param_00) +{ + if(isdefined(self.laststand) && !maps\mp\_utility::_hasperk("specialty_finalstand")) + { + self iprintlnbold(&"MP_UNAVILABLE_IN_LASTSTAND"); + return 0; + } + + return tryusehelicopter(param_00,"mk19"); +} + +//Function Number: 11 +tryusehelicopter(param_00,param_01) +{ + if(isdefined(level.civilianjetflyby)) + { + self iprintlnbold(&"MP_CIVILIAN_AIR_TRAFFIC"); + return 0; + } + + if(maps\mp\_utility::isairdenied()) + { + return 0; + } + + if(maps\mp\_utility::isemped()) + { + return 0; + } + + var_02 = 1; + if((!isdefined(param_01) || param_01 == "flares") && isdefined(level.chopper)) + { + self iprintlnbold(&"MP_HELI_IN_QUEUE"); + if(isdefined(param_01)) + { + var_03 = "helicopter_" + param_01; + } + else + { + var_03 = "helicopter"; + } + + thread maps\mp\killstreaks\_killstreaks::updatekillstreaks(); + var_04 = spawn("script_origin",(0,0,0)); + var_04 hide(); + var_04 thread deleteonentnotify(self,"disconnect"); + var_04.player = self; + var_04.lifeid = param_00; + var_04.helitype = param_01; + var_04.streakname = var_03; + maps\mp\_utility::queueadd("helicopter",var_04); + var_05 = undefined; + if(!self hasweapon(common_scripts\utility::getlastweapon())) + { + var_05 = maps\mp\killstreaks\_killstreaks::getfirstprimaryweapon(); + } + else + { + var_05 = common_scripts\utility::getlastweapon(); + } + + var_06 = maps\mp\killstreaks\_killstreaks::getkillstreakweapon("helicopter_flares"); + thread maps\mp\killstreaks\_killstreaks::waittakekillstreakweapon(var_06,var_05); + return 0; + } + else if(isdefined(level.chopper)) + { + self iprintlnbold(&"MP_AIR_SPACE_TOO_CROWDED"); + return 0; + } + else if(maps\mp\_utility::currentactivevehiclecount() >= maps\mp\_utility::maxvehiclesallowed() || level.fauxvehiclecount + var_06 >= maps\mp\_utility::maxvehiclesallowed()) + { + self iprintlnbold(&"MP_TOO_MANY_VEHICLES"); + return 0; + } + + var_06 = 1; + if(isdefined(var_05) && var_05 == "minigun") + { + maps\mp\_utility::setusingremote("helicopter_" + var_05); + var_07 = maps\mp\killstreaks\_killstreaks::initridekillstreak(); + if(var_07 != "success") + { + if(var_07 != "disconnect") + { + maps\mp\_utility::clearusingremote(); + } + + return 0; + } + + if(isdefined(level.chopper)) + { + maps\mp\_utility::clearusingremote(); + self iprintlnbold(&"MP_AIR_SPACE_TOO_CROWDED"); + return 0; + } + else if(maps\mp\_utility::currentactivevehiclecount() >= maps\mp\_utility::maxvehiclesallowed() || level.fauxvehiclecount + var_06 >= maps\mp\_utility::maxvehiclesallowed()) + { + maps\mp\_utility::clearusingremote(); + self iprintlnbold(&"MP_TOO_MANY_VEHICLES"); + return 0; + } + } + + starthelicopter(var_04,var_05); + return 1; +} + +//Function Number: 12 +deleteonentnotify(param_00,param_01) +{ + self endon("death"); + param_00 waittill(param_01); + self delete(); +} + +//Function Number: 13 +starthelicopter(param_00,param_01) +{ + maps\mp\_utility::incrementfauxvehiclecount(); + if(!isdefined(param_01)) + { + param_01 = ""; + } + + switch(param_01) + { + case "flares": + thread pavelowmadeselectionvo(); + var_02 = "helicopter_flares"; + break; + + case "minigun": + var_02 = "helicopter_minigun"; + break; + + default: + var_02 = "helicopter"; + break; + } + + var_03 = self.pers["team"]; + var_04 = level.heli_start_nodes[randomint(level.heli_start_nodes.size)]; + maps\mp\_matchdata::logkillstreakevent(var_02,self.origin); + thread heli_think(param_00,self,var_04,self.pers["team"],param_01); +} + +//Function Number: 14 +precachehelicopter(param_00,param_01) +{ + var_02 = loadfx("explosions/tanker_explosion"); + precachemodel(param_00); + level.heli_types[param_00] = param_01; + level.cobra_missile_models = []; + level.cobra_missile_models["cobra_Hellfire"] = "projectile_hellfire_missile"; + precachemodel(level.cobra_missile_models["cobra_Hellfire"]); + level.heli_sound["allies"]["hit"] = "cobra_helicopter_hit"; + level.heli_sound["allies"]["hitsecondary"] = "cobra_helicopter_secondary_exp"; + level.heli_sound["allies"]["damaged"] = "cobra_helicopter_damaged"; + level.heli_sound["allies"]["spinloop"] = "cobra_helicopter_dying_loop"; + level.heli_sound["allies"]["spinstart"] = "cobra_helicopter_dying_layer"; + level.heli_sound["allies"]["crash"] = "cobra_helicopter_crash"; + level.heli_sound["allies"]["missilefire"] = "weap_cobra_missile_fire"; + level.heli_sound["axis"]["hit"] = "cobra_helicopter_hit"; + level.heli_sound["axis"]["hitsecondary"] = "cobra_helicopter_secondary_exp"; + level.heli_sound["axis"]["damaged"] = "cobra_helicopter_damaged"; + level.heli_sound["axis"]["spinloop"] = "cobra_helicopter_dying_loop"; + level.heli_sound["axis"]["spinstart"] = "cobra_helicopter_dying_layer"; + level.heli_sound["axis"]["crash"] = "cobra_helicopter_crash"; + level.heli_sound["axis"]["missilefire"] = "weap_cobra_missile_fire"; +} + +//Function Number: 15 +spawn_helicopter(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = spawnhelicopter(param_00,param_01,param_02,param_03,param_04); + if(!isdefined(var_05)) + { + return undefined; + } + + var_05.heli_type = level.heli_types[param_04]; + var_05 thread [[ level.lightfxfunc[var_05.heli_type] ]](); + var_05 addtohelilist(); + var_05.zoffset = (0,0,var_05 gettagorigin("tag_origin")[2] - var_05 gettagorigin("tag_ground")[2]); + var_05.attractor = missile_createattractorent(var_05,level.heli_attract_strength,level.heli_attract_range); + return var_05; +} + +//Function Number: 16 +heliride(param_00,param_01) +{ + self endon("disconnect"); + param_01 endon("helicopter_done"); + thread maps\mp\_utility::teamplayercardsplash("used_helicopter_minigun",self); + self visionsetthermalforplayer("black_bw",0); + maps\mp\_utility::_giveweapon("heli_remote_mp"); + self switchtoweapon("heli_remote_mp"); + self visionsetthermalforplayer(game["thermal_vision"],6); + self thermalvisionon(); + self thermalvisionfofoverlayon(); + thread thermalvision(param_01); + if(getdvarint("camera_thirdPerson")) + { + maps\mp\_utility::setthirdpersondof(0); + } + + param_01 vehicleturretcontrolon(self); + self playerlinkweaponviewtodelta(param_01,"tag_player",1,180,180,0,180,1); + param_01.gunner = self; + self.heliridelifeid = param_00; + thread endrideonhelicopterdone(param_01); + thread weaponlockthink(param_01); + for(;;) + { + param_01 waittill("turret_fire"); + param_01 fireweapon(); + earthquake(0.2,1,param_01.origin,1000); + } +} + +//Function Number: 17 +thermalvision(param_00) +{ + param_00 endon("helicopter_done"); + if(maps\mp\_utility::getintproperty("ac130_thermal_enabled",1) == 0) + { + return; + } + + var_01 = 0; + self visionsetthermalforplayer(level.ac130.enhanced_vision,1); + self.lastvisionsetthermal = level.ac130.enhanced_vision; + self thermalvisionoff(); + self notifyonplayercommand("switch thermal","+usereload"); + self notifyonplayercommand("switch thermal","+activate"); + for(;;) + { + self waittill("switch thermal"); + if(!var_01) + { + self visionsetthermalforplayer(level.ac130.thermal_vision,0.62); + self.lastvisionsetthermal = level.ac130.thermal_vision; + self thermalvisionon(); + } + else + { + self visionsetthermalforplayer(level.ac130.enhanced_vision,0.51); + self.lastvisionsetthermal = level.ac130.enhanced_vision; + self thermalvisionoff(); + } + + var_01 = !var_01; + } +} + +//Function Number: 18 +weaponlockthink(param_00) +{ + self endon("disconnect"); + param_00 endon("helicopter_done"); + if(!isdefined(level.helitargetorigin)) + { + level.helitargetorigin = spawn("script_origin",(0,0,0)); + level.helitargetorigin hide(); + } + + for(;;) + { + var_01 = bullettrace(self geteye(),self geteye() + anglestoforward(self getplayerangles()) * 100000,1,self); + level.helitargetorigin.origin = var_01["position"]; + var_02 = []; + var_03 = []; + foreach(var_05 in level.players) + { + if(!isalive(var_05)) + { + continue; + } + + if(level.teambased && var_05.team == self.team) + { + continue; + } + + if(var_05 == self) + { + continue; + } + + if(var_05 maps\mp\_utility::_hasperk("specialty_blindeye")) + { + continue; + } + + if(isdefined(var_05.spawntime) && gettime() - var_05.spawntime / 1000 <= 5) + { + continue; + } + + var_05.remotehelilos = 1; + if(!bullettracepassed(self geteye(),var_05.origin + (0,0,32),0,param_00)) + { + var_03[var_03.size] = var_05; + continue; + } + + var_02[var_02.size] = var_05; + } + + var_07 = []; + var_07 = var_02; + foreach(var_09 in var_03) + { + var_02[var_02.size] = var_09; + } + + if(var_07.size != 0) + { + var_0B = sortbydistance(var_07,var_01["position"]); + if(distance(var_0B[0].origin,var_01["position"]) < 384 && var_0B[0] damageconetrace(var_01["position"])) + { + self weaponlockfinalize(var_0B[0]); + helidialog("locked"); + } + else + { + self weaponlockstart(var_0B[0]); + helidialog("tracking"); + } + } + else + { + self weaponlockfree(); + } + + wait 0.05; + } +} + +//Function Number: 19 +helidialog(param_00) +{ + if(gettime() - level.lasthelidialogtime < 6000) + { + return; + } + + level.lasthelidialogtime = gettime(); + var_01 = randomint(level.helidialog[param_00].size); + var_02 = level.helidialog[param_00][var_01]; + var_03 = maps\mp\gametypes\_teams::getteamvoiceprefix(self.team) + var_02; + self playlocalsound(var_03); +} + +//Function Number: 20 +endride(param_00) +{ + self remotecamerasoundscapeoff(); + self thermalvisionoff(); + self thermalvisionfofoverlayoff(); + self unlink(); + self switchtoweapon(common_scripts\utility::getlastweapon()); + maps\mp\_utility::clearusingremote(); + if(getdvarint("camera_thirdPerson")) + { + maps\mp\_utility::setthirdpersondof(1); + } + + self visionsetthermalforplayer(game["thermal_vision"],0); + if(isdefined(param_00)) + { + var_01 = maps\mp\killstreaks\_killstreaks::getkillstreakweapon("helicopter_minigun"); + self takeweapon(var_01); + param_00 vehicleturretcontroloff(self); + } + + self notify("heliPlayer_removed"); +} + +//Function Number: 21 +endrideonhelicopterdone(param_00) +{ + self endon("disconnect"); + param_00 waittill("helicopter_done"); + endride(param_00); +} + +//Function Number: 22 +getposnearenemies() +{ + var_00 = []; + foreach(var_02 in level.players) + { + if(var_02.team == "spectator") + { + continue; + } + + if(var_02.team == self.team) + { + continue; + } + + if(!isalive(var_02)) + { + continue; + } + + if(!bullettracepassed(var_02.origin,var_02.origin + (0,0,2048),0,var_02)) + { + continue; + } + + var_02.remotehelidist = 0; + var_00[var_00.size] = var_02; + } + + if(!var_00.size) + { + return undefined; + } + + for(var_04 = 0;var_04 < var_00.size;var_04++) + { + for(var_05 = var_04 + 1;var_05 < var_00.size;var_05++) + { + var_06 = distancesquared(var_00[var_04].origin,var_00[var_05].origin); + var_00[var_04].remotehelidist = var_00[var_04].remotehelidist + var_06; + var_00[var_05].remotehelidist = var_00[var_05].remotehelidist + var_06; + } + } + + var_07 = var_00[0]; + foreach(var_02 in var_00) + { + if(var_02.remotehelidist < var_07.remotehelidist) + { + var_07 = var_02; + } + } + + return var_07.origin; +} + +//Function Number: 23 +updateareanodes(param_00) +{ + var_01 = []; + foreach(var_03 in param_00) + { + var_03.validplayers = []; + var_03.nodescore = 0; + } + + foreach(var_06 in level.players) + { + if(!isalive(var_06)) + { + continue; + } + + if(var_06.team == self.team) + { + continue; + } + + foreach(var_03 in param_00) + { + if(distancesquared(var_06.origin,var_03.origin) > 1048576) + { + continue; + } + + var_03.validplayers[var_03.validplayers.size] = var_06; + } + } + + var_0A = param_00[0]; + foreach(var_03 in param_00) + { + var_0C = getent(var_03.target,"targetname"); + foreach(var_06 in var_03.validplayers) + { + var_03.nodescore = var_03.nodescore + 1; + if(bullettracepassed(var_06.origin + (0,0,32),var_0C.origin,0,var_06)) + { + var_03.nodescore = var_03.nodescore + 3; + } + } + + if(var_03.nodescore > var_0A.nodescore) + { + var_0A = var_03; + } + } + + return getent(var_0A.target,"targetname"); +} + +//Function Number: 24 +heli_think(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = param_02.origin; + var_06 = param_02.angles; + switch(param_04) + { + case "minigun": + var_07 = "cobra_minigun_mp"; + if(param_01.team == "allies") + { + var_08 = "vehicle_apache_mp"; + } + else + { + var_08 = "vehicle_mi-28_mp"; + } + break; + + case "flares": + var_07 = "pavelow_mp"; + if(param_02.team == "allies") + { + var_08 = "vehicle_pavelow"; + } + else + { + var_08 = "vehicle_pavelow_opfor"; + } + break; + + default: + var_07 = "cobra_mp"; + if(param_02.team == "allies") + { + var_08 = "vehicle_cobra_helicopter_fly_low"; + } + else + { + var_08 = "vehicle_mi24p_hind_mp"; + } + break; + } + + var_09 = spawn_helicopter(param_01,var_05,var_06,var_07,var_08); + if(!isdefined(var_09)) + { + return; + } + + level.chopper = var_09; + var_09.helitype = param_04; + var_09.lifeid = param_00; + var_09.team = param_03; + var_09.pers["team"] = param_03; + var_09.owner = param_01; + if(param_04 == "flares") + { + var_09.maxhealth = level.heli_maxhealth * 2; + } + else + { + var_09.maxhealth = level.heli_maxhealth; + } + + var_09.targeting_delay = level.heli_targeting_delay; + var_09.primarytarget = undefined; + var_09.secondarytarget = undefined; + var_09.attacker = undefined; + var_09.currentstate = "ok"; + var_09.empgrenaded = 0; + if(param_04 == "flares" || param_04 == "minigun") + { + var_09 thread heli_flares_monitor(); + } + + var_09 thread heli_leave_on_disconnect(param_01); + var_09 thread heli_leave_on_changeteams(param_01); + var_09 thread heli_leave_on_gameended(param_01); + var_09 thread heli_damage_monitor(); + var_09 thread heli_health(); + var_09 thread heli_existance(); + var_09 endon("helicopter_done"); + var_09 endon("crashing"); + var_09 endon("leaving"); + var_09 endon("death"); + if(param_04 == "minigun") + { + param_01 thread heliride(param_00,var_09); + var_09 thread heli_leave_on_spawned(param_01); + } + + var_0A = getentarray("heli_attack_area","targetname"); + var_0B = level.heli_loop_nodes[randomint(level.heli_loop_nodes.size)]; + switch(param_04) + { + case "minigun": + var_09 thread heli_targeting(); + var_09 heli_fly_simple_path(param_02); + var_09 thread heli_leave_on_timeout(40); + if(var_0A.size) + { + var_09 thread heli_fly_well(var_0A); + } + else + { + var_09 thread heli_fly_loop_path(var_0B); + } + break; + + case "flares": + var_09 thread makegunship(); + thread maps\mp\_utility::teamplayercardsplash("used_helicopter_flares",param_01); + var_09 heli_fly_simple_path(param_02); + var_09 thread heli_leave_on_timeout(60); + var_09 thread heli_fly_loop_path(var_0B); + break; + + default: + var_09 thread attack_targets(); + var_09 thread heli_targeting(); + var_09 heli_fly_simple_path(param_02); + var_09 thread heli_leave_on_timeout(60); + var_09 thread heli_fly_loop_path(var_0B); + break; + } +} + +//Function Number: 25 +makegunship() +{ + self endon("death"); + self endon("helicopter_done"); + wait 0.5; + var_00 = spawnturret("misc_turret",self.origin,"pavelow_minigun_mp"); + var_00.lifeid = self.lifeid; + var_00 linkto(self,"tag_gunner_left",(0,0,0),(0,0,0)); + var_00 setmodel("weapon_minigun"); + var_00.owner = self.owner; + var_00.team = self.team; + var_00 maketurretinoperable(); + var_00.pers["team"] = self.team; + var_00.killcament = self; + self.mgturretleft = var_00; + self.mgturretleft setdefaultdroppitch(0); + var_00 = spawnturret("misc_turret",self.origin,"pavelow_minigun_mp"); + var_00.lifeid = self.lifeid; + var_00 linkto(self,"tag_gunner_right",(0,0,0),(0,0,0)); + var_00 setmodel("weapon_minigun"); + var_00.owner = self.owner; + var_00.team = self.team; + var_00 maketurretinoperable(); + var_00.pers["team"] = self.team; + var_00.killcament = self; + self.mgturretright = var_00; + self.mgturretright setdefaultdroppitch(0); + if(level.teambased) + { + self.mgturretleft setturretteam(self.team); + self.mgturretright setturretteam(self.team); + } + + self.mgturretleft setmode("auto_nonai"); + self.mgturretright setmode("auto_nonai"); + self.mgturretleft setsentryowner(self.owner); + self.mgturretright setsentryowner(self.owner); + self.mgturretleft setturretminimapvisible(0); + self.mgturretright setturretminimapvisible(0); + self.mgturretleft.chopper = self; + self.mgturretright.chopper = self; + self.mgturretleft thread sentry_attacktargets(); + self.mgturretright thread sentry_attacktargets(); + thread deleteturretswhendone(); +} + +//Function Number: 26 +deleteturretswhendone() +{ + self waittill("helicopter_done"); + self.mgturretright delete(); + self.mgturretleft delete(); +} + +//Function Number: 27 +sentry_attacktargets() +{ + self endon("death"); + self endon("helicopter_done"); + level endon("game_ended"); + for(;;) + { + self waittill("turretstatechange"); + if(self isfiringturret() && !self.chopper.empgrenaded) + { + thread sentry_burstfirestart(); + continue; + } + + thread sentry_burstfirestop(); + } +} + +//Function Number: 28 +sentry_burstfirestart() +{ + self endon("death"); + self endon("stop_shooting"); + self endon("leaving"); + level endon("game_ended"); + var_00 = 0.1; + var_01 = 40; + var_02 = 80; + var_03 = 1; + var_04 = 2; + for(;;) + { + var_05 = randomintrange(var_01,var_02 + 1); + for(var_06 = 0;var_06 < var_05;var_06++) + { + var_07 = self getturrettarget(0); + if(isdefined(var_07) && !isdefined(var_07.spawntime) || gettime() - var_07.spawntime / 1000 > 5) + { + self shootturret(); + } + + wait var_00; + } + + wait randomfloatrange(var_03,var_04); + } +} + +//Function Number: 29 +sentry_burstfirestop() +{ + self notify("stop_shooting"); +} + +//Function Number: 30 +heli_existance() +{ + var_00 = self getentitynumber(); + common_scripts\utility::waittill_any("death","crashing","leaving"); + removefromhelilist(var_00); + self notify("helicopter_done"); + self notify("helicopter_removed"); + var_01 = undefined; + var_02 = maps\mp\_utility::queueremovefirst("helicopter"); + if(!isdefined(var_02)) + { + level.chopper = undefined; + return; + } + + var_01 = var_02.player; + var_03 = var_02.lifeid; + var_04 = var_02.streakname; + var_05 = var_02.helitype; + var_02 delete(); + if(isdefined(var_01) && var_01.sessionstate == "playing" || var_01.sessionstate == "dead") + { + var_01 maps\mp\killstreaks\_killstreaks::func_30BE(var_04,1); + var_01 starthelicopter(var_03,var_05); + return; + } + + level.chopper = undefined; +} + +//Function Number: 31 +heli_targeting() +{ + self endon("death"); + self endon("helicopter_done"); + for(;;) + { + var_00 = []; + self.primarytarget = undefined; + self.secondarytarget = undefined; + var_01 = level.players; + foreach(var_03 in level.players) + { + if(!cantarget_turret(var_03)) + { + continue; + } + + var_00[var_00.size] = var_03; + } + + if(var_00.size) + { + for(var_05 = getbestprimarytarget(var_00);!isdefined(var_05);var_05 = getbestprimarytarget(var_00)) + { + wait 0.05; + } + + self.primarytarget = var_05; + self notify("primary acquired"); + } + + if(isdefined(level.harriers)) + { + foreach(var_07 in level.harriers) + { + if(!isdefined(var_07)) + { + continue; + } + + if((level.teambased && var_07.team != self.team) || !level.teambased && var_07.owner != self.owner) + { + self notify("secondary acquired"); + self.secondarytarget = var_07; + } + } + } + + wait 0.5; + } +} + +//Function Number: 32 +cantarget_turret(param_00) +{ + var_01 = 1; + if(!isalive(param_00) || param_00.sessionstate != "playing") + { + return 0; + } + + if(self.helitype == "remote_mortar") + { + if(param_00 sightconetrace(self.origin,self) < 1) + { + return 0; + } + } + else if(self.helitype != "flares") + { + if(!self vehicle_canturrettargetpoint(param_00.origin + (0,0,40),1,self)) + { + return 0; + } + } + + if(distance(param_00.origin,self.origin) > level.heli_visual_range) + { + return 0; + } + + if(level.teambased && param_00.pers["team"] == self.team) + { + return 0; + } + + if(param_00 == self.owner) + { + return 0; + } + + if(isdefined(param_00.spawntime) && gettime() - param_00.spawntime / 1000 <= 5) + { + return 0; + } + + if(param_00 maps\mp\_utility::_hasperk("specialty_blindeye")) + { + return 0; + } + + var_02 = self.origin + (0,0,-160); + var_03 = anglestoforward(self.angles); + var_04 = var_02 + 144 * var_03; + if(param_00 sightconetrace(var_04,self) < level.heli_target_recognition) + { + return 0; + } + + return var_01; +} + +//Function Number: 33 +getbestprimarytarget(param_00) +{ + foreach(var_02 in param_00) + { + update_player_threat(var_02); + } + + var_04 = 0; + var_05 = undefined; + var_06 = getentarray("minimap_corner","targetname"); + foreach(var_02 in param_00) + { + if(var_06.size == 2) + { + var_08 = var_06[0].origin; + var_09 = var_06[0].origin; + if(var_06[1].origin[0] > var_09[0]) + { + var_09 = (var_06[1].origin[0],var_09[1],var_09[2]); + } + else + { + var_08 = (var_06[1].origin[0],var_08[1],var_08[2]); + } + + if(var_06[1].origin[1] > var_09[1]) + { + var_09 = (var_09[0],var_06[1].origin[1],var_09[2]); + } + else + { + var_08 = (var_08[0],var_06[1].origin[1],var_08[2]); + } + + if(var_02.origin[0] < var_08[0] || var_02.origin[0] > var_09[0] || var_02.origin[1] < var_08[1] || var_02.origin[1] > var_09[1]) + { + continue; + } + } + + if(var_02.threatlevel < var_04) + { + continue; + } + + var_04 = var_02.threatlevel; + var_05 = var_02; + } + + return var_05; +} + +//Function Number: 34 +update_player_threat(param_00) +{ + param_00.threatlevel = 0; + var_01 = distance(param_00.origin,self.origin); + param_00.threatlevel = param_00.threatlevel + level.heli_visual_range - var_01 / level.heli_visual_range * 100; + if(isdefined(self.attacker) && param_00 == self.attacker) + { + param_00.threatlevel = param_00.threatlevel + 100; + } + + param_00.threatlevel = param_00.threatlevel + param_00.score * 4; + if(isdefined(param_00.antithreat)) + { + param_00.threatlevel = param_00.threatlevel - param_00.antithreat; + } + + if(param_00.threatlevel <= 0) + { + param_00.threatlevel = 1; + } +} + +//Function Number: 35 +heli_reset() +{ + self cleartargetyaw(); + self cleargoalyaw(); + self vehicle_setspeed(60,25); + self setyawspeed(75,45,45); + self setmaxpitchroll(30,30); + self setneargoalnotifydist(256); + self setturningability(0.9); +} + +//Function Number: 36 +addrecentdamage(param_00) +{ + self endon("death"); + self.recentdamageamount = self.recentdamageamount + param_00; + wait 4; + self.recentdamageamount = self.recentdamageamount - param_00; +} + +//Function Number: 37 +heli_damage_monitor() +{ + self endon("death"); + self endon("crashing"); + self endon("leaving"); + self.health = 999999; + self.damagetaken = 0; + self.recentdamageamount = 0; + for(;;) + { + self waittill("damage",var_00,var_01,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09); + if(isdefined(var_01.class) && var_01.class == "worldspawn") + { + continue; + } + else if(var_01 == self) + { + continue; + } + + if(!maps\mp\gametypes\_weapons::friendlyfirecheck(self.owner,var_01)) + { + continue; + } + + self.attacker = var_01; + var_0A = var_00; + if(isplayer(var_01)) + { + var_01 maps\mp\gametypes\_damagefeedback::updatedamagefeedback(""); + if(var_04 == "MOD_RIFLE_BULLET" || var_04 == "MOD_PISTOL_BULLET") + { + if(self.helitype == "flares") + { + var_0A = var_0A * level.heli_armor_bulletdamage; + } + + if(var_01 maps\mp\_utility::_hasperk("specialty_armorpiercing")) + { + var_0A = var_0A + var_00 * level.armorpiercingmod; + } + } + } + + if(isdefined(var_01.owner) && isplayer(var_01.owner)) + { + var_01.owner maps\mp\gametypes\_damagefeedback::updatedamagefeedback("helicopter"); + } + + if(isdefined(var_09)) + { + switch(var_09) + { + case "javelin_mp": + case "stinger_mp": + case "remote_mortar_missile_mp": + case "remotemissile_projectile_mp": + case "ac130_40mm_mp": + case "ac130_105mm_mp": + self.var_30C8 = 1; + var_0A = self.maxhealth + 1; + break; + + case "sam_projectile_mp": + self.var_30C8 = 1; + switch(self.helitype) + { + case "flares": + case "osprey_gunner": + case "osprey": + var_0A = self.maxhealth * 0.07; + break; + + case "helicopter": + case "littlebird": + var_0A = self.maxhealth * 0.09; + break; + } + break; + + case "emp_grenade_mp": + var_0A = 0; + thread heli_empgrenaded(); + break; + + case "osprey_player_minigun_mp": + self.var_30C8 = 0; + var_0A = var_0A * 2; + break; + } + } + + self.damagetaken = self.damagetaken + var_0A; + thread addrecentdamage(var_0A); + if(self.damagetaken >= self.maxhealth) + { + if((level.teambased && self.team != var_01.team) || !level.teambased) + { + var_0B = undefined; + if(isdefined(var_01.owner) && !isdefined(self.owner) || var_01.owner != self.owner) + { + var_0B = var_01.owner; + } + else if(!isdefined(var_01.owner) && var_01.classname == "script_vehicle") + { + return; + } + else if(!isdefined(self.owner) || var_01 != self.owner) + { + var_0B = var_01; + } + + if(isdefined(var_0B)) + { + var_0B notify("destroyed_helicopter"); + switch(self.helitype) + { + case "flares": + var_0B thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_DESTROYED_PAVELOW"); + thread maps\mp\_utility::teamplayercardsplash("callout_destroyed_helicopter_flares",var_0B); + var_0C = 400; + break; + + case "minigun": + var_0C thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_DESTROYED_MINIGUNNER"); + thread maps\mp\_utility::teamplayercardsplash("callout_destroyed_helicopter_minigun",var_0C); + var_0C = 300; + break; + + case "osprey_gunner": + case "osprey": + var_0C thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_DESTROYED_OSPREY"); + thread maps\mp\_utility::teamplayercardsplash("callout_destroyed_osprey",var_0C); + var_0C = 300; + break; + + case "littlebird": + var_0C thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_DESTROYED_LITTLE_BIRD"); + thread maps\mp\_utility::teamplayercardsplash("callout_destroyed_little_bird",var_0C); + var_0C = 200; + break; + + default: + var_0B thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_DESTROYED_HELICOPTER"); + thread maps\mp\_utility::teamplayercardsplash("callout_destroyed_helicopter",var_0B); + var_0C = 200; + break; + } + + var_0B thread maps\mp\gametypes\_rank::giverankxp("kill",var_0C,var_09,var_04); + thread maps\mp\gametypes\_missions::vehiclekilled(self.owner,self,undefined,var_0B,var_00,var_04,var_09); + } + } + } + } +} + +//Function Number: 38 +heli_empgrenaded() +{ + self notify("heli_EMPGrenaded"); + self endon("heli_EMPGrenaded"); + self endon("death"); + self endon("leaving"); + self endon("crashing"); + self.owner endon("disconnect"); + level endon("game_ended"); + self.empgrenaded = 1; + if(isdefined(self.mgturretleft)) + { + self.mgturretleft notify("stop_shooting"); + } + + if(isdefined(self.mgturretright)) + { + self.mgturretright notify("stop_shooting"); + } + + wait 3.5; + self.empgrenaded = 0; + if(isdefined(self.mgturretleft)) + { + self.mgturretleft notify("turretstatechange"); + } + + if(isdefined(self.mgturretright)) + { + self.mgturretright notify("turretstatechange"); + } +} + +//Function Number: 39 +heli_health() +{ + self endon("death"); + self endon("leaving"); + self endon("crashing"); + self.currentstate = "ok"; + self.laststate = "ok"; + self setdamagestate(3); + var_00 = 3; + self setdamagestate(var_00); + for(;;) + { + if(self.damagetaken >= self.maxhealth * 0.33 && var_00 == 3) + { + var_00 = 2; + self setdamagestate(var_00); + self.currentstate = "light smoke"; + playfxontag(level.chopper_fx["damage"]["light_smoke"],self,"tag_engine_left"); + } + else if(self.damagetaken >= self.maxhealth * 0.66 && var_00 == 2) + { + var_00 = 1; + self setdamagestate(var_00); + self.currentstate = "heavy smoke"; + stopfxontag(level.chopper_fx["damage"]["light_smoke"],self,"tag_engine_left"); + playfxontag(level.chopper_fx["damage"]["heavy_smoke"],self,"tag_engine_left"); + } + else if(self.damagetaken > self.maxhealth) + { + var_00 = 0; + self setdamagestate(var_00); + stopfxontag(level.chopper_fx["damage"]["heavy_smoke"],self,"tag_engine_left"); + if(isdefined(self.var_30C8) && self.var_30C8) + { + thread heli_explode(1); + } + else + { + playfxontag(level.chopper_fx["damage"]["on_fire"],self,"tag_engine_left"); + thread heli_crash(); + } + } + + wait 0.05; + } +} + +//Function Number: 40 +heli_crash() +{ + self notify("crashing"); + var_00 = level.heli_crash_nodes[randomint(level.heli_crash_nodes.size)]; + thread heli_spin(180); + thread heli_secondary_explosions(); + heli_fly_simple_path(var_00); + thread heli_explode(); +} + +//Function Number: 41 +heli_secondary_explosions() +{ + playfxontag(level.chopper_fx["explode"]["large"],self,"tag_engine_left"); + self playsound(level.heli_sound[self.team]["hitsecondary"]); + wait 3; + if(!isdefined(self)) + { + return; + } + + playfxontag(level.chopper_fx["explode"]["large"],self,"tag_engine_left"); + self playsound(level.heli_sound[self.team]["hitsecondary"]); +} + +//Function Number: 42 +heli_spin(param_00) +{ + self endon("death"); + self playsound(level.heli_sound[self.team]["hit"]); + thread spinsoundshortly(); + self setyawspeed(param_00,param_00,param_00); + while(isdefined(self)) + { + self settargetyaw(self.angles[1] + param_00 * 0.9); + wait 1; + } +} + +//Function Number: 43 +spinsoundshortly() +{ + self endon("death"); + wait 0.25; + self stoploopsound(); + wait 0.05; + self playloopsound(level.heli_sound[self.team]["spinloop"]); + wait 0.05; + self playloopsound(level.heli_sound[self.team]["spinstart"]); +} + +//Function Number: 44 +heli_explode(param_00) +{ + self notify("death"); + if(isdefined(param_00) && isdefined(level.chopper_fx["explode"]["air_death"][self.heli_type])) + { + var_01 = self gettagangles("tag_deathfx"); + playfx(level.chopper_fx["explode"]["air_death"][self.heli_type],self gettagorigin("tag_deathfx"),anglestoforward(var_01),anglestoup(var_01)); + } + else + { + var_02 = self.origin; + var_03 = self.origin + (0,0,1) - self.origin; + playfx(level.chopper_fx["explode"]["death"][self.heli_type],var_02,var_03); + } + + self playsound(level.heli_sound[self.team]["crash"]); + wait 0.05; + if(isdefined(self.killcament)) + { + self.killcament delete(); + } + + maps\mp\_utility::decrementfauxvehiclecount(); + self delete(); +} + +//Function Number: 45 +fire_missile(param_00,param_01,param_02) +{ + if(!isdefined(param_01)) + { + param_01 = 1; + } + + var_03 = undefined; + var_04 = undefined; + var_05 = "cobra_20mm_mp"; + var_06 = []; + switch(param_00) + { + case "ffar": + var_03 = "harrier_FFAR_mp"; + break; + var_7B[0] + "tag_store_r_2" + break; + + default: + break; + } + + var_05 = weaponfiretime(var_04); + self setvehweapon(var_04); + var_07 = -1; + for(var_08 = 0;var_08 < param_02;var_08++) + { + var_07++; + if(var_07 >= var_7B.size) + { + var_07 = 0; + } + + self setvehweapon("harrier_FFAR_mp"); + if(isdefined(var_03)) + { + var_09 = self fireweapon(var_7B[var_07],var_03); + var_09 missile_setflightmodedirect(); + var_09 missile_settargetent(var_03); + } + else + { + var_09 = self fireweapon(var_7B[var_07]); + var_09 missile_setflightmodedirect(); + var_09 missile_settargetent(var_03); + } + + if(var_08 < param_02 - 1) + { + wait var_05; + } + } +} + +//Function Number: 46 +check_owner() +{ + if(!isdefined(self.owner) || !isdefined(self.owner.pers["team"]) || self.owner.pers["team"] != self.team) + { + thread heli_leave(); + return 0; + } + + return 1; +} + +//Function Number: 47 +heli_leave_on_disconnect(param_00) +{ + self endon("death"); + self endon("helicopter_done"); + param_00 waittill("disconnect"); + thread heli_leave(); +} + +//Function Number: 48 +heli_leave_on_changeteams(param_00) +{ + self endon("death"); + self endon("helicopter_done"); + param_00 common_scripts\utility::waittill_any("joined_team","joined_spectators"); + thread heli_leave(); +} + +//Function Number: 49 +heli_leave_on_spawned(param_00) +{ + self endon("death"); + self endon("helicopter_done"); + param_00 waittill("spawned"); + thread heli_leave(); +} + +//Function Number: 50 +heli_leave_on_gameended(param_00) +{ + self endon("death"); + self endon("helicopter_done"); + level waittill("game_ended"); + thread heli_leave(); +} + +//Function Number: 51 +heli_leave_on_timeout(param_00) +{ + self endon("death"); + self endon("helicopter_done"); + maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause(param_00); + thread heli_leave(); +} + +//Function Number: 52 +attack_targets() +{ + thread attack_primary(); + thread attack_secondary(); +} + +//Function Number: 53 +attack_secondary() +{ + self endon("death"); + self endon("crashing"); + self endon("leaving"); + for(;;) + { + if(isdefined(self.secondarytarget)) + { + self.secondarytarget.antithreat = undefined; + self.var_30D9 = self.secondarytarget; + var_00 = 0; + while(isdefined(self.var_30D9) && isalive(self.var_30D9)) + { + if(missile_target_sight_check(self.var_30D9)) + { + thread missile_support(self.var_30D9,level.heli_missile_rof); + } + else + { + break; + } + + self waittill("missile ready"); + if(!isdefined(self.secondarytarget) || isdefined(self.secondarytarget) && self.var_30D9 != self.secondarytarget) + { + break; + } + } + + if(isdefined(self.var_30D9)) + { + self.var_30D9.antithreat = undefined; + } + } + + self waittill("secondary acquired"); + check_owner(); + } +} + +//Function Number: 54 +missile_target_sight_check(param_00) +{ + var_01 = vectornormalize(param_00.origin - self.origin); + var_02 = anglestoforward(self.angles); + var_03 = vectornormalize(var_02); + var_04 = vectordot(var_01,var_03); + if(var_04 >= level.heli_missile_target_cone) + { + debug_print3d_simple("Missile sight: " + var_04,self,(0,0,-40),40); + return 1; + } + + return 0; +} + +//Function Number: 55 +missile_support(param_00,param_01) +{ + self endon("death"); + self endon("crashing"); + self endon("leaving"); + if(isdefined(param_00)) + { + if(level.teambased) + { + if(isdefined(param_00.owner) && param_00.team != self.team) + { + fire_missile("ffar",1,param_00); + self notify("missile fired"); + } + } + else if(isdefined(param_00.owner) && param_00.owner != self.owner) + { + fire_missile("ffar",1,param_00); + self notify("missile fired"); + } + } + + wait param_01; + self notify("missile ready"); +} + +//Function Number: 56 +attack_primary() +{ + self endon("death"); + self endon("crashing"); + self endon("leaving"); + for(;;) + { + wait 0.05; + if(!isalive(self.primarytarget)) + { + continue; + } + + var_00 = self.primarytarget; + var_00.antithreat = 0; + if(randomint(5) < 3) + { + var_01 = var_00.angles[1] + randomfloatrange(-30,30); + } + else + { + var_01 = randomint(360); + } + + var_02 = 96; + var_03 = cos(var_01) * var_02; + var_04 = sin(var_01) * var_02; + self setturrettargetent(var_00,(var_03,var_04,40)); + waitontargetordeath(var_00,3); + if(!isalive(var_00) || !self vehicle_canturrettargetpoint(var_00.origin + (0,0,40))) + { + continue; + } + + var_05 = weaponfiretime("cobra_20mm_mp"); + var_06 = 1; + var_07 = 0; + self playloopsound("weap_cobra_20mm_fire_npc"); + for(var_08 = 0;var_08 < level.heli_turretclipsize;var_08++) + { + if(self.empgrenaded) + { + break; + } + + self setvehweapon("cobra_20mm_mp"); + self fireweapon("tag_flash"); + if(var_08 < level.heli_turretclipsize - 1) + { + wait var_05; + } + + if(!isdefined(var_00)) + { + break; + } + + if(self vehicle_canturrettargetpoint(var_00.origin + (0,0,40),1,self)) + { + var_06 = max(var_06 - 0.05,0); + var_07 = 0; + } + else + { + var_07++; + } + + if(var_07 > 10) + { + break; + } + + var_09 = (var_03 * var_06 + randomfloatrange(-6,6),var_04 * var_06 + randomfloatrange(-6,6),40 + randomfloatrange(-6,6)); + self setturrettargetent(var_00,var_09); + } + + self stoploopsound(); + if(isalive(var_00)) + { + var_00.antithreat = var_00.antithreat + 100; + } + + wait randomfloatrange(0.5,2); + } +} + +//Function Number: 57 +waitontargetordeath(param_00,param_01) +{ + self endon("death"); + self endon("helicopter_done"); + param_00 endon("death"); + param_00 endon("disconnect"); + common_scripts\utility::waittill_notify_or_timeout("turret_on_target",param_01); +} + +//Function Number: 58 +firemissile(param_00) +{ + self endon("death"); + self endon("crashing"); + self endon("leaving"); + if(!isdefined(param_00)) + { + return; + } + + if(distance2d(self.origin,param_00.origin) < 512) + { + return; + } + + self setvehweapon("harrier_FFAR_mp"); + var_01 = self fireweapon("tag_flash",param_00); + var_01 missile_setflightmodedirect(); + var_01 missile_settargetent(param_00); +} + +//Function Number: 59 +getoriginoffsets(param_00) +{ + var_01 = self.origin; + var_02 = param_00.origin; + var_03 = 0; + var_04 = 40; + var_05 = (0,0,-196); + for(var_06 = bullettrace(var_01 + var_05,var_02 + var_05,0,self);distancesquared(var_06["position"],var_02 + var_05) > 10 && var_03 < var_04;var_06 = bullettrace(var_01 + var_05,var_02 + var_05,0,self)) + { + if(var_01[2] < var_02[2]) + { + var_01 = var_01 + (0,0,128); + } + else if(var_01[2] > var_02[2]) + { + var_02 = var_02 + (0,0,128); + } + else + { + var_01 = var_01 + (0,0,128); + var_02 = var_02 + (0,0,128); + } + + var_03++; + } + + var_07 = []; + return var_7B; +} + +//Function Number: 60 +traveltonode(param_00) +{ + var_01 = getoriginoffsets(param_00); + if(var_01["start"] != self.origin) + { + if(isdefined(param_00.script_airspeed) && isdefined(param_00.script_accel)) + { + var_02 = param_00.script_airspeed; + var_03 = param_00.script_accel; + } + else + { + var_02 = 30 + randomint(20); + var_03 = 15 + randomint(15); + } + + self vehicle_setspeed(var_02,var_03); + self setvehgoalpos(var_01["start"] + (0,0,30),0); + self setgoalyaw(param_00.angles[1] + level.heli_angle_offset); + self waittill("goal"); + } + + if(var_01["end"] != param_00.origin) + { + if(isdefined(param_00.script_airspeed) && isdefined(param_00.script_accel)) + { + var_02 = param_00.script_airspeed; + var_03 = param_00.script_accel; + } + else + { + var_02 = 30 + randomint(20); + var_03 = 15 + randomint(15); + } + + self vehicle_setspeed(var_02,var_03); + self setvehgoalpos(var_01["end"] + (0,0,30),0); + self setgoalyaw(param_00.angles[1] + level.heli_angle_offset); + self waittill("goal"); + } +} + +//Function Number: 61 +heli_fly_simple_path(param_00) +{ + self endon("death"); + self endon("leaving"); + self notify("flying"); + self endon("flying"); + heli_reset(); + for(var_01 = param_00;isdefined(var_01.target);var_01 = var_02) + { + var_02 = getent(var_01.target,"targetname"); + if(isdefined(var_01.script_airspeed) && isdefined(var_01.script_accel)) + { + var_03 = var_01.script_airspeed; + var_04 = var_01.script_accel; + } + else + { + var_03 = 30 + randomint(20); + var_04 = 15 + randomint(15); + } + + self vehicle_setspeed(var_03,var_04); + if(!isdefined(var_02.target)) + { + self setvehgoalpos(var_02.origin + self.zoffset,1); + self waittill("near_goal"); + continue; + } + + self setvehgoalpos(var_02.origin + self.zoffset,0); + self waittill("near_goal"); + self setgoalyaw(var_02.angles[1]); + self waittillmatch("goal"); + } +} + +//Function Number: 62 +heli_fly_loop_path(param_00) +{ + self endon("death"); + self endon("crashing"); + self endon("leaving"); + self notify("flying"); + self endon("flying"); + heli_reset(); + thread heli_loop_speed_control(param_00); + for(var_01 = param_00;isdefined(var_01.target);var_01 = var_02) + { + var_02 = getent(var_01.target,"targetname"); + if(isdefined(var_01.script_airspeed) && isdefined(var_01.script_accel)) + { + self.desired_speed = var_01.script_airspeed; + self.desired_accel = var_01.script_accel; + } + else + { + self.desired_speed = 30 + randomint(20); + self.desired_accel = 15 + randomint(15); + } + + if(self.helitype == "flares") + { + self.desired_speed = self.desired_speed * 0.5; + self.desired_accel = self.desired_accel * 0.5; + } + + if(isdefined(var_02.script_delay) && isdefined(self.primarytarget) && !heli_is_threatened()) + { + self setvehgoalpos(var_02.origin + self.zoffset,1); + self waittill("near_goal"); + wait var_02.script_delay; + continue; + } + + self setvehgoalpos(var_02.origin + self.zoffset,0); + self waittill("near_goal"); + self setgoalyaw(var_02.angles[1]); + self waittillmatch("goal"); + } +} + +//Function Number: 63 +heli_loop_speed_control(param_00) +{ + self endon("death"); + self endon("crashing"); + self endon("leaving"); + if(isdefined(param_00.script_airspeed) && isdefined(param_00.script_accel)) + { + self.desired_speed = param_00.script_airspeed; + self.desired_accel = param_00.script_accel; + } + else + { + self.desired_speed = 30 + randomint(20); + self.desired_accel = 15 + randomint(15); + } + + var_01 = 0; + var_02 = 0; + for(;;) + { + var_03 = self.desired_speed; + var_04 = self.desired_accel; + if(self.helitype != "flares" && isdefined(self.primarytarget) && !heli_is_threatened()) + { + var_03 = var_03 * 0.25; + } + + if(var_01 != var_03 || var_02 != var_04) + { + self vehicle_setspeed(var_03,var_04); + var_01 = var_03; + var_02 = var_04; + } + + wait 0.05; + } +} + +//Function Number: 64 +heli_is_threatened() +{ + if(self.recentdamageamount > 50) + { + return 1; + } + + if(self.currentstate == "heavy smoke") + { + return 1; + } + + return 0; +} + +//Function Number: 65 +heli_fly_well(param_00) +{ + self notify("flying"); + self endon("flying"); + self endon("death"); + self endon("crashing"); + self endon("leaving"); + for(;;) + { + var_01 = get_best_area_attack_node(param_00); + traveltonode(var_01); + if(isdefined(var_01.script_airspeed) && isdefined(var_01.script_accel)) + { + var_02 = var_01.script_airspeed; + var_03 = var_01.script_accel; + } + else + { + var_02 = 30 + randomint(20); + var_03 = 15 + randomint(15); + } + + self vehicle_setspeed(var_02,var_03); + self setvehgoalpos(var_01.origin + self.zoffset,1); + self setgoalyaw(var_01.angles[1] + level.heli_angle_offset); + if(level.heli_forced_wait != 0) + { + self waittill("near_goal"); + wait level.heli_forced_wait; + continue; + } + + if(!isdefined(var_01.script_delay)) + { + self waittill("near_goal"); + wait 5 + randomint(5); + continue; + } + + self waittillmatch("goal"); + wait var_01.script_delay; + } +} + +//Function Number: 66 +get_best_area_attack_node(param_00) +{ + return updateareanodes(param_00); +} + +//Function Number: 67 +heli_leave(param_00) +{ + self notify("leaving"); + if(isdefined(self.helitype) && self.helitype == "osprey" && isdefined(self.pathgoal)) + { + self setvehgoalpos(self.pathgoal,1); + common_scripts\utility::waittill_any_timeout(5,"goal"); + } + + if(!isdefined(param_00)) + { + var_01 = level.heli_leave_nodes[randomint(level.heli_leave_nodes.size)]; + param_00 = var_01.origin; + } + + var_02 = spawn("script_origin",param_00); + if(isdefined(var_02)) + { + self setlookatent(var_02); + var_02 thread wait_and_delete(3); + } + + heli_reset(); + self vehicle_setspeed(100,45); + self setvehgoalpos(param_00,1); + self waittillmatch("goal"); + self notify("death"); + wait 0.05; + if(isdefined(self.killcament)) + { + self.killcament delete(); + } + + maps\mp\_utility::decrementfauxvehiclecount(); + self delete(); +} + +//Function Number: 68 +wait_and_delete(param_00) +{ + self endon("death"); + level endon("game_ended"); + wait param_00; + self delete(); +} + +//Function Number: 69 +debug_print3d(param_00,param_01,param_02,param_03,param_04) +{ + if(isdefined(level.heli_debug) && level.heli_debug == 1) + { + thread draw_text(param_00,param_01,param_02,param_03,param_04); + } +} + +//Function Number: 70 +debug_print3d_simple(param_00,param_01,param_02,param_03) +{ + if(isdefined(level.heli_debug) && level.heli_debug == 1) + { + if(isdefined(param_03)) + { + thread draw_text(param_00,(0.8,0.8,0.8),param_01,param_02,param_03); + return; + } + + thread draw_text(param_00,(0.8,0.8,0.8),param_01,param_02,0); + } +} + +//Function Number: 71 +debug_line(param_00,param_01,param_02,param_03) +{ + if(isdefined(level.heli_debug) && level.heli_debug == 1 && !isdefined(param_03)) + { + thread draw_line(param_00,param_01,param_02); + return; + } + + if(isdefined(level.heli_debug) && level.heli_debug == 1) + { + thread draw_line(param_00,param_01,param_02,param_03); + } +} + +//Function Number: 72 +draw_text(param_00,param_01,param_02,param_03,param_04) +{ + if(param_04 == 0) + { + while(isdefined(param_02)) + { + wait 0.05; + } + + return; + } + + for(var_05 = 0;var_05 < param_04;var_05++) + { + if(!isdefined(param_02)) + { + break; + } + + wait 0.05; + } +} + +//Function Number: 73 +draw_line(param_00,param_01,param_02,param_03) +{ + if(isdefined(param_03)) + { + for(var_04 = 0;var_04 < param_03;var_04++) + { + wait 0.05; + } + + return; + } + + wait 0.05; +} + +//Function Number: 74 +addtohelilist() +{ + level.helis[self getentitynumber()] = self; +} + +//Function Number: 75 +removefromhelilist(param_00) +{ + level.helis[param_00] = undefined; +} + +//Function Number: 76 +addtolittlebirdlist() +{ + level.littlebirds[self getentitynumber()] = self; +} + +//Function Number: 77 +removefromlittlebirdlistondeath() +{ + var_00 = self getentitynumber(); + self waittill("death"); + level.littlebirds[var_00] = undefined; +} + +//Function Number: 78 +exceededmaxlittlebirds(param_00) +{ + if(level.littlebirds.size >= 4 || level.littlebirds.size >= 2 && param_00 == "littlebird_flock") + { + return 1; + } + + return 0; +} + +//Function Number: 79 +playflarefx() +{ + for(var_00 = 0;var_00 < 10;var_00++) + { + if(!isdefined(self)) + { + return; + } + + playfxontag(level._effect["ac130_flare"],self,"TAG_FLARE"); + wait 0.15; + } +} + +//Function Number: 80 +deployflares() +{ + var_00 = spawn("script_origin",self.origin + (0,0,-256)); + var_00.angles = self.angles; + var_00 movegravity((0,0,-1),5); + var_00 thread deleteaftertime(5); + return var_00; +} + +//Function Number: 81 +heli_flares_monitor() +{ + switch(self.helitype) + { + case "osprey_gunner": + self.numflares = 2; + break; + + default: + self.numflares = 1; + break; + } + + thread handleincomingsam(); + thread handleincomingstinger(); +} + +//Function Number: 82 +handleincomingstinger(param_00) +{ + level endon("game_ended"); + self endon("death"); + self endon("crashing"); + self endon("leaving"); + self endon("helicopter_done"); + for(;;) + { + level waittill("stinger_fired",var_01,var_02,var_03); + if(!isdefined(var_03) || var_03 != self) + { + continue; + } + + if(isdefined(param_00)) + { + var_02 thread [[ param_00 ]](var_01,var_01.team,var_03); + continue; + } + + var_02 thread watchstingerproximity(var_01,var_01.team,var_03); + } +} + +//Function Number: 83 +watchstingerproximity(param_00,param_01,param_02) +{ + self endon("death"); + for(;;) + { + if(!isdefined(param_02)) + { + break; + } + + var_03 = param_02 getpointinbounds(0,0,0); + var_04 = distance(self.origin,var_03); + if(var_04 < 4000 && param_02.numflares > 0) + { + param_02.numflares--; + param_02 thread playflarefx(); + var_05 = param_02 deployflares(); + self missile_settargetent(var_05); + return; + } + + wait 0.05; + } +} + +//Function Number: 84 +handleincomingsam(param_00) +{ + level endon("game_ended"); + self endon("death"); + self endon("crashing"); + self endon("leaving"); + self endon("helicopter_done"); + for(;;) + { + level waittill("sam_fired",var_01,var_02,var_03); + if(!isdefined(var_03) || var_03 != self) + { + continue; + } + + if(isdefined(param_00)) + { + level thread [[ param_00 ]](var_01,var_01.team,var_03,var_02); + continue; + } + + level thread watchsamproximity(var_01,var_01.team,var_03,var_02); + } +} + +//Function Number: 85 +watchsamproximity(param_00,param_01,param_02,param_03) +{ + level endon("game_ended"); + param_02 endon("death"); + for(;;) + { + var_04 = param_02 getpointinbounds(0,0,0); + var_05 = []; + for(var_06 = 0;var_06 < param_03.size;var_06++) + { + if(isdefined(param_03[var_06])) + { + var_05[var_06] = distance(param_03[var_06].origin,var_04); + } + } + + var_06 = 0; + while(var_06 < var_05.size) + { + if(isdefined(var_05[var_06])) + { + if(var_05[var_06] < 4000 && param_02.numflares > 0) + { + param_02.numflares--; + param_02 thread playflarefx(); + var_07 = param_02 deployflares(); + for(var_08 = 0;var_08 < param_03.size;var_08++) + { + if(isdefined(param_03[var_08])) + { + param_03[var_08] missile_settargetent(var_07); + } + } + + return; + } + } + + var_08++; + } + + wait 0.05; + } +} + +//Function Number: 86 +deleteaftertime(param_00) +{ + wait param_00; + self delete(); +} + +//Function Number: 87 +pavelowmadeselectionvo() +{ + self endon("death"); + self endon("disconnect"); + self playlocalsound(game["voice"][self.team] + "KS_hqr_pavelow"); + wait 3.5; + self playlocalsound(game["voice"][self.team] + "KS_pvl_inbound"); +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/killstreaks/_helicopter_flock.gsc b/MW3/PC/MP/maps/mp/killstreaks/_helicopter_flock.gsc new file mode 100644 index 0000000..0cc5aca --- /dev/null +++ b/MW3/PC/MP/maps/mp/killstreaks/_helicopter_flock.gsc @@ -0,0 +1,468 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\killstreaks\_helicopter_flock.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 21 + * Decompile Time: 379 ms + * Timestamp: 10/27/2023 2:14:10 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + precachevehicle("attack_littlebird_mp"); + precachemodel("vehicle_apache_mp"); + precachemodel("vehicle_apache_mg"); + precacheturret("apache_minigun_mp"); + precachevehicle("apache_strafe_mp"); + level.killstreakfuncs["littlebird_flock"] = ::tryuselbflock; + level.heli_flock = []; +} + +//Function Number: 2 +tryuselbflock(param_00,param_01) +{ + if(!maps\mp\_utility::validateusestreak()) + { + return 0; + } + + var_02 = 5; + if(heliflockactive() || maps\mp\_utility::currentactivevehiclecount() >= maps\mp\_utility::maxvehiclesallowed() || level.fauxvehiclecount + var_02 >= maps\mp\_utility::maxvehiclesallowed()) + { + self iprintlnbold(&"MP_TOO_MANY_VEHICLES"); + return 0; + } + + maps\mp\_utility::incrementfauxvehiclecount(); + maps\mp\_utility::incrementfauxvehiclecount(); + maps\mp\_utility::incrementfauxvehiclecount(); + maps\mp\_utility::incrementfauxvehiclecount(); + maps\mp\_utility::incrementfauxvehiclecount(); + var_03 = selectlbstrikelocation(param_00,"littlebird_flock"); + if(!isdefined(var_03) || !var_03) + { + maps\mp\_utility::decrementfauxvehiclecount(); + maps\mp\_utility::decrementfauxvehiclecount(); + maps\mp\_utility::decrementfauxvehiclecount(); + maps\mp\_utility::decrementfauxvehiclecount(); + maps\mp\_utility::decrementfauxvehiclecount(); + return 0; + } + + level thread maps\mp\_utility::teamplayercardsplash("used_littlebird_flock",self,self.team); + return 1; +} + +//Function Number: 3 +heliflockactive() +{ + var_00 = 0; + for(var_01 = 0;var_01 < level.heli_flock.size;var_01++) + { + if(isdefined(level.heli_flock[var_01])) + { + var_00 = 1; + break; + } + } + + return var_00; +} + +//Function Number: 4 +selectlbstrikelocation(param_00,param_01) +{ + self playlocalsound(game["voice"][self.team] + "KS_lbd_inposition"); + maps\mp\_utility::_beginlocationselection(param_01,"map_artillery_selector",1,500); + self endon("stop_location_selection"); + self waittill("confirm_location",var_02,var_03); + if(heliflockactive() || maps\mp\_utility::currentactivevehiclecount() >= maps\mp\_utility::maxvehiclesallowed() || level.fauxvehiclecount >= maps\mp\_utility::maxvehiclesallowed()) + { + self iprintlnbold(&"MP_TOO_MANY_VEHICLES"); + self notify("cancel_location"); + return 0; + } + + level.heli_flock = []; + level.heli_flock_victims = []; + thread littlebirdmadeselectionvo(); + thread finishlbstrikeusage(param_00,var_02,::callstrike,var_03); + self setblurforplayer(0,0.3); + return 1; +} + +//Function Number: 5 +littlebirdmadeselectionvo() +{ + self endon("death"); + self endon("disconnect"); + self playlocalsound(game["voice"][self.team] + "KS_hqr_littlebird"); + wait 3; + self playlocalsound(game["voice"][self.team] + "KS_lbd_inbound"); +} + +//Function Number: 6 +finishlbstrikeusage(param_00,param_01,param_02,param_03) +{ + self notify("used"); + wait 0.05; + thread maps\mp\_utility::stoplocationselection(0); + if(isdefined(self)) + { + self thread [[ param_02 ]](param_00,param_01,param_03); + } +} + +//Function Number: 7 +callstrike(param_00,param_01,param_02) +{ + level endon("game_ended"); + self endon("disconnect"); + var_03 = getflightpath(param_01,param_02,0); + var_04 = getflightpath(param_01,param_02,-520); + var_05 = getflightpath(param_01,param_02,520); + var_06 = getflightpath(param_01,param_02,-1040); + var_07 = getflightpath(param_01,param_02,1040); + level thread dolbstrike(param_00,self,var_03,0); + wait 0.3; + level thread dolbstrike(param_00,self,var_04,1); + level thread dolbstrike(param_00,self,var_05,2); + wait 0.3; + level thread dolbstrike(param_00,self,var_06,3); + level thread dolbstrike(param_00,self,var_07,4); + maps\mp\_matchdata::logkillstreakevent("littlebird_flock",param_01); +} + +//Function Number: 8 +getflightpath(param_00,param_01,param_02) +{ + param_00 = param_00 * (1,1,0); + var_03 = (0,param_01,0); + var_04 = 12000; + var_05 = []; + if(isdefined(param_02) && param_02 != 0) + { + param_00 = param_00 + anglestoright(var_03) * param_02 + (0,0,randomint(300)); + } + + var_06 = param_00 + anglestoforward(var_03) * -1 * var_04; + var_07 = param_00 + anglestoforward(var_03) * var_04; + var_08 = maps\mp\killstreaks\_airdrop::getflyheightoffset(param_00) + 256; + var_05["start"] = var_06 + (0,0,var_08); + var_05["end"] = var_07 + (0,0,var_08); + return var_05; +} + +//Function Number: 9 +dolbstrike(param_00,param_01,param_02,param_03) +{ + level endon("game_ended"); + if(!isdefined(param_01)) + { + return; + } + + var_04 = vectortoangles(param_02["end"] - param_02["start"]); + var_05 = spawnattacklittlebird(param_01,param_02["start"],var_04,param_03); + var_05.lifeid = param_00; + var_05.alreadydead = 0; + var_05 thread watchtimeout(); + var_05 thread watchdeath(); + var_05 thread flock_handledamage(); + var_05 thread startlbfiring1(); + var_05 thread monitorkills(); + var_05 endon("death"); + var_05 setmaxpitchroll(120,60); + var_05 vehicle_setspeed(48,48); + var_05 setvehgoalpos(param_02["end"],0); + var_05 waittill("goal"); + var_05 setmaxpitchroll(30,40); + var_05 vehicle_setspeed(32,32); + var_05 setvehgoalpos(param_02["start"],0); + wait 2; + var_05 setmaxpitchroll(100,60); + var_05 vehicle_setspeed(64,64); + var_05 waittill("goal"); + var_05 notify("gone"); + var_05 removelittlebird(); +} + +//Function Number: 10 +spawnattacklittlebird(param_00,param_01,param_02,param_03) +{ + var_04 = spawnhelicopter(param_00,param_01,param_02,"apache_strafe_mp","vehicle_apache_mp"); + if(!isdefined(var_04)) + { + return; + } + + var_04 maps\mp\killstreaks\_helicopter::addtolittlebirdlist(); + var_04 thread maps\mp\killstreaks\_helicopter::removefromlittlebirdlistondeath(); + var_04.health = 999999; + var_04.maxhealth = 2000; + var_04.damagetaken = 0; + var_04 setcandamage(1); + var_04.owner = param_00; + var_04.team = param_00.team; + var_04.killcount = 0; + var_04.streakname = "littlebird_flock"; + var_04.helitype = "littlebird"; + var_04.specialdamagecallback = ::callback_vehicledamage; + var_05 = spawnturret("misc_turret",var_04.origin,"apache_minigun_mp"); + var_05 linkto(var_04,"tag_turret",(0,0,0),(0,0,0)); + var_05 setmodel("vehicle_apache_mg"); + var_05.angles = var_04.angles; + var_05.owner = var_04.owner; + var_05.team = var_05.owner.team; + var_05 maketurretinoperable(); + var_05.vehicle = var_04; + var_06 = var_04.origin + anglestoforward(var_04.angles) * -200 + anglestoright(var_04.angles) * -200 + (0,0,50); + var_05.killcament = spawn("script_model",var_06); + var_05.killcament setscriptmoverkillcam("explosive"); + var_05.killcament linkto(var_04,"tag_origin"); + var_04.mgturret1 = var_05; + var_04.mgturret1 setdefaultdroppitch(0); + var_04.mgturret1 setmode("auto_nonai"); + var_04.mgturret1 setsentryowner(var_04.owner); + if(level.teambased) + { + var_04.mgturret1 setturretteam(var_04.owner.team); + } + + level.heli_flock[param_03] = var_04; + return var_04; +} + +//Function Number: 11 +watchtimeout() +{ + level endon("game_ended"); + self endon("gone"); + self endon("death"); + maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause(60); + self notify("death"); +} + +//Function Number: 12 +monitorkills() +{ + level endon("game_ended"); + self endon("gone"); + self endon("death"); + self endon("stopFiring"); + for(;;) + { + self waittill("killedPlayer",var_00); + self.killcount++; + level.heli_flock_victims[level.heli_flock_victims.size] = var_00; + } +} + +//Function Number: 13 +startlbfiring1() +{ + self endon("gone"); + self endon("death"); + self endon("stopFiring"); + for(;;) + { + self.mgturret1 waittill("turret_on_target"); + var_00 = 1; + var_01 = self.mgturret1 getturrettarget(0); + foreach(var_03 in level.heli_flock_victims) + { + if(var_01 == var_03) + { + self.mgturret1 cleartargetentity(); + var_00 = 0; + break; + } + } + + if(var_00) + { + self.mgturret1 shootturret(); + } + } +} + +//Function Number: 14 +flock_handledamage() +{ + self endon("death"); + level endon("game_ended"); + for(;;) + { + self waittill("damage",var_00,var_01,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09); + if(isdefined(self.specialdamagecallback)) + { + self [[ self.specialdamagecallback ]](undefined,var_01,var_00,var_08,var_04,var_09,var_03,var_02,undefined,undefined,var_05,var_07); + } + } +} + +//Function Number: 15 +callback_vehicledamage(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A,param_0B) +{ + if(isdefined(self.alreadydead) && self.alreadydead) + { + return; + } + + if(!isdefined(param_01) || param_01 == self) + { + return; + } + + if(!maps\mp\gametypes\_weapons::friendlyfirecheck(self.owner,param_01)) + { + return; + } + + if(isdefined(param_03) && param_03 & level.idflags_penetration) + { + self.wasdamagedfrombulletpenetration = 1; + } + + self.wasdamaged = 1; + var_0C = param_02; + if(isplayer(param_01)) + { + param_01 maps\mp\gametypes\_damagefeedback::updatedamagefeedback("helicopter"); + if(param_04 == "MOD_RIFLE_BULLET" || param_04 == "MOD_PISTOL_BULLET") + { + if(param_01 maps\mp\_utility::_hasperk("specialty_armorpiercing")) + { + var_0C = var_0C + param_02 * level.armorpiercingmod; + } + } + } + + if(isdefined(param_01.owner) && isplayer(param_01.owner)) + { + param_01.owner maps\mp\gametypes\_damagefeedback::updatedamagefeedback("helicopter"); + } + + if(isdefined(param_05)) + { + switch(param_05) + { + case "javelin_mp": + case "stinger_mp": + case "remote_mortar_missile_mp": + case "remotemissile_projectile_mp": + case "ac130_40mm_mp": + case "ac130_105mm_mp": + self.var_30C8 = 1; + var_0C = self.maxhealth + 1; + break; + + case "sam_projectile_mp": + self.var_30C8 = 1; + var_0C = self.maxhealth * 0.25; + break; + + case "emp_grenade_mp": + self.var_30C8 = 0; + var_0C = self.maxhealth + 1; + break; + } + } + + self.damagetaken = self.damagetaken + var_0C; + if(self.damagetaken >= self.maxhealth) + { + if(isplayer(param_01) && !isdefined(self.owner) || param_01 != self.owner) + { + self.alreadydead = 1; + param_01 notify("destroyed_helicopter"); + param_01 notify("destroyed_killstreak",param_05); + thread maps\mp\_utility::teamplayercardsplash("callout_destroyed_helicopter",param_01); + param_01 thread maps\mp\gametypes\_rank::giverankxp("kill",300,param_05,param_04); + param_01 thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_DESTROYED_HELICOPTER"); + thread maps\mp\gametypes\_missions::vehiclekilled(self.owner,self,undefined,param_01,param_02,param_04,param_05); + } + + self notify("death"); + } +} + +//Function Number: 16 +watchdeath() +{ + self endon("gone"); + self waittill("death"); + thread helidestroyed(); +} + +//Function Number: 17 +helidestroyed() +{ + self endon("gone"); + if(!isdefined(self)) + { + return; + } + + self vehicle_setspeed(25,5); + thread lbspin(randomintrange(180,220)); + wait randomfloatrange(0.5,1.5); + lbexplode(); +} + +//Function Number: 18 +lbspin(param_00) +{ + self endon("explode"); + playfxontag(level.chopper_fx["explode"]["medium"],self,"tail_rotor_jnt"); + thread trail_fx(level.chopper_fx["smoke"]["trail"],"tail_rotor_jnt","stop tail smoke"); + self setyawspeed(param_00,param_00,param_00); + while(isdefined(self)) + { + self settargetyaw(self.angles[1] + param_00 * 0.9); + wait 1; + } +} + +//Function Number: 19 +trail_fx(param_00,param_01,param_02) +{ + self notify(param_02); + self endon(param_02); + self endon("death"); + for(;;) + { + playfxontag(param_00,self,param_01); + wait 0.05; + } +} + +//Function Number: 20 +lbexplode() +{ + var_00 = self.origin + (0,0,1) - self.origin; + var_01 = self gettagangles("tag_deathfx"); + playfx(level.chopper_fx["explode"]["air_death"]["littlebird"],self gettagorigin("tag_deathfx"),anglestoforward(var_01),anglestoup(var_01)); + self playsound("cobra_helicopter_crash"); + self notify("explode"); + removelittlebird(); +} + +//Function Number: 21 +removelittlebird() +{ + if(isdefined(self.mgturret1)) + { + if(isdefined(self.mgturret1.killcament)) + { + self.mgturret1.killcament delete(); + } + + self.mgturret1 delete(); + } + + maps\mp\_utility::decrementfauxvehiclecount(); + self delete(); +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/killstreaks/_helicopter_guard.gsc b/MW3/PC/MP/maps/mp/killstreaks/_helicopter_guard.gsc new file mode 100644 index 0000000..269a7db --- /dev/null +++ b/MW3/PC/MP/maps/mp/killstreaks/_helicopter_guard.gsc @@ -0,0 +1,1011 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\killstreaks\_helicopter_guard.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 35 + * Decompile Time: 750 ms + * Timestamp: 10/27/2023 2:14:13 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level.killstreakfuncs["littlebird_support"] = ::tryuselbsupport; + level.heliguardsettings = []; + level.heliguardsettings["littlebird_support"] = spawnstruct(); + level.heliguardsettings["littlebird_support"].timeout = 60; + level.heliguardsettings["littlebird_support"].health = 999999; + level.heliguardsettings["littlebird_support"].maxhealth = 2000; + level.heliguardsettings["littlebird_support"].streakname = "littlebird_support"; + level.heliguardsettings["littlebird_support"].vehicleinfo = "attack_littlebird_mp"; + level.heliguardsettings["littlebird_support"].weaponinfo = "littlebird_guard_minigun_mp"; + level.heliguardsettings["littlebird_support"].weaponmodelleft = "vehicle_little_bird_minigun_left"; + level.heliguardsettings["littlebird_support"].weaponmodelright = "vehicle_little_bird_minigun_right"; + level.heliguardsettings["littlebird_support"].weapontagleft = "tag_minigun_attach_left"; + level.heliguardsettings["littlebird_support"].weapontagright = "tag_minigun_attach_right"; + level.heliguardsettings["littlebird_support"].sentrymode = "auto_nonai"; + level.heliguardsettings["littlebird_support"].modelbase = "vehicle_little_bird_armed"; + level.heliguardsettings["littlebird_support"].teamsplash = "used_littlebird_support"; + foreach(var_01 in level.heliguardsettings) + { + precachevehicle(var_01.vehicleinfo); + precacheturret(var_01.weaponinfo); + precachemodel(var_01.weaponmodelleft); + precachemodel(var_01.weaponmodelright); + precachemodel(var_01.modelbase); + } + + lbsupport_setairstartnodes(); + lbsupport_setairnodemesh(); +} + +//Function Number: 2 +tryuselbsupport(param_00) +{ + var_01 = "littlebird_support"; + var_02 = 1; + if(isdefined(level.civilianjetflyby)) + { + self iprintlnbold(&"MP_CIVILIAN_AIR_TRAFFIC"); + return 0; + } + else if(maps\mp\_utility::isusingremote()) + { + return 0; + } + else if(isdefined(level.littlebirdguard) || maps\mp\killstreaks\_helicopter::exceededmaxlittlebirds(var_01)) + { + self iprintlnbold(&"MP_AIR_SPACE_TOO_CROWDED"); + return 0; + } + else if(!level.air_node_mesh.size) + { + self iprintlnbold(&"MP_UNAVAILABLE_IN_LEVEL"); + return 0; + } + else if(maps\mp\_utility::currentactivevehiclecount() >= maps\mp\_utility::maxvehiclesallowed() || level.fauxvehiclecount + var_02 >= maps\mp\_utility::maxvehiclesallowed()) + { + self iprintlnbold(&"MP_TOO_MANY_VEHICLES"); + return 0; + } + + maps\mp\_utility::incrementfauxvehiclecount(); + var_03 = createlbguard(var_01); + if(!isdefined(var_03)) + { + maps\mp\_utility::decrementfauxvehiclecount(); + return 0; + } + + thread startlbsupport(var_03); + level thread maps\mp\_utility::teamplayercardsplash(level.heliguardsettings[var_01].teamsplash,self,self.team); + return 1; +} + +//Function Number: 3 +createlbguard(param_00) +{ + var_01 = lbsupport_getcloseststartnode(self.origin); + if(isdefined(var_01.angles)) + { + var_02 = var_01.angles; + } + else + { + var_02 = (0,0,0); + } + + var_03 = maps\mp\killstreaks\_airdrop::getflyheightoffset(self.origin); + var_04 = lbsupport_getclosestnode(self.origin); + var_04 = lbsupport_tu0_new_incoming_position(var_04); + var_05 = anglestoforward(self.angles); + var_06 = var_04.origin * (1,1,0) + (0,0,1) * var_03 + var_05 * -100; + var_07 = var_01.origin; + var_08 = spawnhelicopter(self,var_07,var_02,level.heliguardsettings[param_00].vehicleinfo,level.heliguardsettings[param_00].modelbase); + if(!isdefined(var_08)) + { + return; + } + + var_08 maps\mp\killstreaks\_helicopter::addtolittlebirdlist(); + var_08 thread maps\mp\killstreaks\_helicopter::removefromlittlebirdlistondeath(); + var_08.health = level.heliguardsettings[param_00].health; + var_08.maxhealth = level.heliguardsettings[param_00].maxhealth; + var_08.damagetaken = 0; + var_08.speed = 100; + var_08.followspeed = 40; + var_08.owner = self; + var_08.team = self.team; + var_08 setmaxpitchroll(45,45); + var_08 vehicle_setspeed(var_08.speed,100,40); + var_08 setyawspeed(120,60); + var_08 setneargoalnotifydist(512); + var_08.killcount = 0; + var_08.helitype = "littlebird"; + var_08.heliguardtype = "littlebird_support"; + var_08.targettingradius = 2000; + var_08.targetpos = var_06; + var_08.currentnode = var_04; + var_09 = spawnturret("misc_turret",var_08.origin,level.heliguardsettings[param_00].weaponinfo); + var_09 linkto(var_08,level.heliguardsettings[param_00].weapontagleft,(0,0,0),(0,0,0)); + var_09 setmodel(level.heliguardsettings[param_00].weaponmodelleft); + var_09.angles = var_08.angles; + var_09.owner = var_08.owner; + var_09.team = self.team; + var_09 maketurretinoperable(); + var_09.vehicle = var_08; + var_08.mgturretleft = var_09; + var_08.mgturretleft setdefaultdroppitch(0); + var_0A = var_08.origin + anglestoforward(var_08.angles) * -100 + anglestoright(var_08.angles) * -100 + (0,0,50); + var_09.killcament = spawn("script_model",var_0A); + var_09.killcament setscriptmoverkillcam("explosive"); + var_09.killcament linkto(var_08,"tag_origin"); + var_09 = spawnturret("misc_turret",var_08.origin,level.heliguardsettings[param_00].weaponinfo); + var_09 linkto(var_08,level.heliguardsettings[param_00].weapontagright,(0,0,0),(0,0,0)); + var_09 setmodel(level.heliguardsettings[param_00].weaponmodelright); + var_09.angles = var_08.angles; + var_09.owner = var_08.owner; + var_09.team = self.team; + var_09 maketurretinoperable(); + var_09.vehicle = var_08; + var_08.mgturretright = var_09; + var_08.mgturretright setdefaultdroppitch(0); + var_0A = var_08.origin + anglestoforward(var_08.angles) * -100 + anglestoright(var_08.angles) * 100 + (0,0,50); + var_09.killcament = spawn("script_model",var_0A); + var_09.killcament setscriptmoverkillcam("explosive"); + var_09.killcament linkto(var_08,"tag_origin"); + if(level.teambased) + { + var_08.mgturretleft setturretteam(self.team); + var_08.mgturretright setturretteam(self.team); + } + + var_08.mgturretleft setmode(level.heliguardsettings[param_00].sentrymode); + var_08.mgturretright setmode(level.heliguardsettings[param_00].sentrymode); + var_08.mgturretleft setsentryowner(self); + var_08.mgturretright setsentryowner(self); + var_08.mgturretleft thread lbsupport_attacktargets(); + var_08.mgturretright thread lbsupport_attacktargets(); + var_08.attract_strength = 10000; + var_08.attract_range = 150; + var_08.attractor = missile_createattractorent(var_08,var_08.attract_strength,var_08.attract_range); + var_08.hasdodged = 0; + var_08.empgrenaded = 0; + var_08 thread lbsupport_handledamage(); + var_08 thread lbsupport_watchdeath(); + var_08 thread lbsupport_watchtimeout(); + var_08 thread lbsupport_watchownerloss(); + var_08 thread lbsupport_watchownerdamage(); + var_08 thread lbsupport_watchroundend(); + var_08 thread lbsupport_lightfx(); + level.littlebirdguard = var_08; + var_08.owner maps\mp\_matchdata::logkillstreakevent(level.heliguardsettings[var_08.heliguardtype].streakname,var_08.targetpos); + return var_08; +} + +//Function Number: 4 +lbsupport_lightfx() +{ + playfxontag(level.chopper_fx["light"]["left"],self,"tag_light_nose"); + wait 0.05; + playfxontag(level.chopper_fx["light"]["belly"],self,"tag_light_belly"); + wait 0.05; + playfxontag(level.chopper_fx["light"]["tail"],self,"tag_light_tail1"); + wait 0.05; + playfxontag(level.chopper_fx["light"]["tail"],self,"tag_light_tail2"); +} + +//Function Number: 5 +startlbsupport(param_00) +{ + level endon("game_ended"); + param_00 endon("death"); + param_00 setlookatent(self); + param_00 setvehgoalpos(param_00.targetpos); + param_00 waittill("near_goal"); + param_00 vehicle_setspeed(param_00.speed,60,30); + param_00 waittill("goal"); + param_00 setvehgoalpos(param_00.currentnode.origin,1); + param_00 waittill("goal"); + param_00 thread lbsupport_followplayer(); + param_00 thread maps\mp\killstreaks\_helicopter::handleincomingsam(::lbsupport_watchsamproximity); + param_00 thread maps\mp\killstreaks\_helicopter::handleincomingstinger(::lbsupport_watchstingerproximity); +} + +//Function Number: 6 +lbsupport_followplayer() +{ + level endon("game_ended"); + self endon("death"); + self endon("leaving"); + if(!isdefined(self.owner)) + { + thread lbsupport_leave(); + return; + } + + self.owner endon("disconnect"); + self.owner endon("joined_team"); + self.owner endon("joined_spectators"); + self vehicle_setspeed(self.followspeed,20,20); + for(;;) + { + if(isdefined(self.owner) && isalive(self.owner)) + { + var_00 = lbsupport_getclosestlinkednode(self.owner.origin); + if(isdefined(var_00) && var_00 != self.currentnode) + { + self.currentnode = var_00; + lbsupport_movetoplayer(); + continue; + } + } + + wait 1; + } +} + +//Function Number: 7 +lbsupport_movetoplayer() +{ + level endon("game_ended"); + self endon("death"); + self endon("leaving"); + self.owner endon("death"); + self.owner endon("disconnect"); + self.owner endon("joined_team"); + self.owner endon("joined_spectators"); + self notify("lbSupport_moveToPlayer"); + self endon("lbSupport_moveToPlayer"); + self.intransit = 1; + self setvehgoalpos(self.currentnode.origin,1); + self waittill("goal"); + self.intransit = 0; + self notify("hit_goal"); +} + +//Function Number: 8 +lbsupport_watchdeath() +{ + level endon("game_ended"); + self endon("gone"); + self waittill("death"); + thread helidestroyed(); +} + +//Function Number: 9 +lbsupport_watchtimeout() +{ + level endon("game_ended"); + self endon("death"); + self.owner endon("disconnect"); + self.owner endon("joined_team"); + self.owner endon("joined_spectators"); + var_00 = level.heliguardsettings[self.heliguardtype].timeout; + maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause(var_00); + thread lbsupport_leave(); +} + +//Function Number: 10 +lbsupport_watchownerloss() +{ + level endon("game_ended"); + self endon("death"); + self endon("leaving"); + self.owner common_scripts\utility::waittill_any("disconnect","joined_team","joined_spectators"); + thread lbsupport_leave(); +} + +//Function Number: 11 +lbsupport_watchownerdamage() +{ + level endon("game_ended"); + self endon("death"); + self endon("leaving"); + self.owner endon("disconnect"); + self.owner endon("joined_team"); + self.owner endon("joined_spectators"); + for(;;) + { + self.owner waittill("damage",var_00,var_01,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09); + if(isplayer(var_01)) + { + if(var_01 != self.owner && distance2d(var_01.origin,self.origin) <= self.targettingradius && !var_01 maps\mp\_utility::_hasperk("specialty_blindeye") && !level.hardcoremode && level.teambased && var_01.team == self.team) + { + self setlookatent(var_01); + self.mgturretleft settargetentity(var_01); + self.mgturretright settargetentity(var_01); + } + } + } +} + +//Function Number: 12 +lbsupport_watchroundend() +{ + level endon("game_ended"); + self endon("death"); + self endon("leaving"); + self.owner endon("disconnect"); + self.owner endon("joined_team"); + self.owner endon("joined_spectators"); + level waittill("round_end_finished"); + thread lbsupport_leave(); +} + +//Function Number: 13 +lbsupport_leave() +{ + self endon("death"); + self notify("leaving"); + level.littlebirdguard = undefined; + self clearlookatent(); + var_00 = maps\mp\killstreaks\_airdrop::getflyheightoffset(self.origin); + var_01 = self.origin + (0,0,var_00); + self vehicle_setspeed(self.speed,60); + self setmaxpitchroll(45,180); + self setvehgoalpos(var_01); + self waittill("goal"); + var_01 = var_01 + anglestoforward(self.angles) * 15000; + var_02 = spawn("script_origin",var_01); + if(isdefined(var_02)) + { + self setlookatent(var_02); + var_02 thread wait_and_delete(3); + } + + self setvehgoalpos(var_01); + self waittill("goal"); + self notify("gone"); + removelittlebird(); +} + +//Function Number: 14 +wait_and_delete(param_00) +{ + self endon("death"); + level endon("game_ended"); + wait param_00; + self delete(); +} + +//Function Number: 15 +lbsupport_handledamage() +{ + self endon("death"); + level endon("game_ended"); + self setcandamage(1); + for(;;) + { + self waittill("damage",var_00,var_01,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09); + if(!maps\mp\gametypes\_weapons::friendlyfirecheck(self.owner,var_01)) + { + continue; + } + + if(!isdefined(self)) + { + return; + } + + if(isdefined(var_08) && var_08 & level.idflags_penetration) + { + self.wasdamagedfrombulletpenetration = 1; + } + + self.wasdamaged = 1; + var_0A = var_00; + if(isplayer(var_01)) + { + if(var_01 != self.owner && distance2d(var_01.origin,self.origin) <= self.targettingradius && !var_01 maps\mp\_utility::_hasperk("specialty_blindeye") && !level.hardcoremode && level.teambased && var_01.team == self.team) + { + self setlookatent(var_01); + self.mgturretleft settargetentity(var_01); + self.mgturretright settargetentity(var_01); + } + + var_01 maps\mp\gametypes\_damagefeedback::updatedamagefeedback("helicopter"); + if(var_04 == "MOD_RIFLE_BULLET" || var_04 == "MOD_PISTOL_BULLET") + { + if(var_01 maps\mp\_utility::_hasperk("specialty_armorpiercing")) + { + var_0A = var_0A + var_00 * level.armorpiercingmod; + } + } + } + + if(isdefined(var_01.owner) && isplayer(var_01.owner)) + { + var_01.owner maps\mp\gametypes\_damagefeedback::updatedamagefeedback("helicopter"); + } + + if(isdefined(var_09)) + { + switch(var_09) + { + case "javelin_mp": + case "stinger_mp": + case "remote_mortar_missile_mp": + case "remotemissile_projectile_mp": + case "ac130_40mm_mp": + case "ac130_105mm_mp": + self.var_30C8 = 1; + var_0A = self.maxhealth + 1; + break; + + case "sam_projectile_mp": + self.var_30C8 = 1; + var_0A = self.maxhealth * 0.25; + break; + + case "emp_grenade_mp": + var_0A = 0; + thread lbsupport_empgrenaded(); + break; + + case "osprey_player_minigun_mp": + self.var_30C8 = 0; + var_0A = var_0A * 2; + break; + } + } + + self.damagetaken = self.damagetaken + var_0A; + if(self.damagetaken >= self.maxhealth) + { + if(isplayer(var_01) && !isdefined(self.owner) || var_01 != self.owner) + { + var_01 notify("destroyed_helicopter"); + var_01 notify("destroyed_killstreak",var_09); + thread maps\mp\_utility::teamplayercardsplash("callout_destroyed_little_bird",var_01); + var_01 thread maps\mp\gametypes\_rank::giverankxp("kill",300,var_09,var_04); + var_01 thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_DESTROYED_LITTLE_BIRD"); + thread maps\mp\gametypes\_missions::vehiclekilled(self.owner,self,undefined,var_01,var_00,var_04,var_09); + } + + if(isdefined(self.owner)) + { + self.owner thread maps\mp\_utility::leaderdialogonplayer("lbguard_destroyed"); + } + + self notify("death"); + return; + } + } +} + +//Function Number: 16 +lbsupport_empgrenaded() +{ + self notify("lbSupport_EMPGrenaded"); + self endon("lbSupport_EMPGrenaded"); + self endon("death"); + self.owner endon("disconnect"); + level endon("game_ended"); + self.empgrenaded = 1; + self.mgturretright notify("stop_shooting"); + self.mgturretleft notify("stop_shooting"); + if(isdefined(level._effect["ims_sensor_explode"])) + { + playfxontag(common_scripts\utility::getfx("ims_sensor_explode"),self.mgturretright,"tag_aim"); + playfxontag(common_scripts\utility::getfx("ims_sensor_explode"),self.mgturretleft,"tag_aim"); + } + + wait 3.5; + self.empgrenaded = 0; + self.mgturretright notify("turretstatechange"); + self.mgturretleft notify("turretstatechange"); +} + +//Function Number: 17 +helidestroyed() +{ + level.littlebirdguard = undefined; + if(!isdefined(self)) + { + return; + } + + self vehicle_setspeed(25,5); + thread lbspin(randomintrange(180,220)); + wait randomfloatrange(0.5,1.5); + lbexplode(); +} + +//Function Number: 18 +lbexplode() +{ + var_00 = self.origin + (0,0,1) - self.origin; + var_01 = self gettagangles("tag_deathfx"); + playfx(level.chopper_fx["explode"]["air_death"]["littlebird"],self gettagorigin("tag_deathfx"),anglestoforward(var_01),anglestoup(var_01)); + self playsound("cobra_helicopter_crash"); + self notify("explode"); + removelittlebird(); +} + +//Function Number: 19 +lbspin(param_00) +{ + self endon("explode"); + playfxontag(level.chopper_fx["explode"]["medium"],self,"tail_rotor_jnt"); + thread trail_fx(level.chopper_fx["smoke"]["trail"],"tail_rotor_jnt","stop tail smoke"); + self setyawspeed(param_00,param_00,param_00); + while(isdefined(self)) + { + self settargetyaw(self.angles[1] + param_00 * 0.9); + wait 1; + } +} + +//Function Number: 20 +trail_fx(param_00,param_01,param_02) +{ + self notify(param_02); + self endon(param_02); + self endon("death"); + for(;;) + { + playfxontag(param_00,self,param_01); + wait 0.05; + } +} + +//Function Number: 21 +removelittlebird() +{ + level.var_3589 = 0; + if(isdefined(self.mgturretleft)) + { + if(isdefined(self.mgturretleft.killcament)) + { + self.mgturretleft.killcament delete(); + } + + self.mgturretleft delete(); + } + + if(isdefined(self.mgturretright)) + { + if(isdefined(self.mgturretright.killcament)) + { + self.mgturretright.killcament delete(); + } + + self.mgturretright delete(); + } + + if(isdefined(self.marker)) + { + self.marker delete(); + } + + maps\mp\_utility::decrementfauxvehiclecount(); + self delete(); +} + +//Function Number: 22 +lbsupport_watchsamproximity(param_00,param_01,param_02,param_03) +{ + level endon("game_ended"); + param_02 endon("death"); + for(var_04 = 0;var_04 < param_03.size;var_04++) + { + if(isdefined(param_03[var_04]) && !param_02.hasdodged) + { + param_02.hasdodged = 1; + var_05 = spawn("script_origin",param_02.origin); + var_05.angles = param_02.angles; + var_05 movegravity(anglestoright(param_03[var_04].angles) * -1000,0.05); + var_05 thread maps\mp\killstreaks\_helicopter::deleteaftertime(5); + for(var_06 = 0;var_06 < param_03.size;var_06++) + { + if(isdefined(param_03[var_06])) + { + param_03[var_06] missile_settargetent(var_05); + } + } + + var_07 = param_02.origin + anglestoright(param_03[var_04].angles) * 200; + param_02 vehicle_setspeed(param_02.speed,100,40); + param_02 setvehgoalpos(var_07,1); + wait 2; + param_02 vehicle_setspeed(param_02.followspeed,20,20); + break; + } + } +} + +//Function Number: 23 +lbsupport_watchstingerproximity(param_00,param_01,param_02) +{ + level endon("game_ended"); + param_02 endon("death"); + if(isdefined(self) && !param_02.hasdodged) + { + param_02.hasdodged = 1; + var_03 = spawn("script_origin",param_02.origin); + var_03.angles = param_02.angles; + var_03 movegravity(anglestoright(self.angles) * -1000,0.05); + var_03 thread maps\mp\killstreaks\_helicopter::deleteaftertime(5); + self missile_settargetent(var_03); + var_04 = param_02.origin + anglestoright(self.angles) * 200; + param_02 vehicle_setspeed(param_02.speed,100,40); + param_02 setvehgoalpos(var_04,1); + wait 2; + param_02 vehicle_setspeed(param_02.followspeed,20,20); + } +} + +//Function Number: 24 +lbsupport_getcloseststartnode(param_00) +{ + var_01 = undefined; + var_02 = 999999; + foreach(var_04 in level.air_start_nodes) + { + var_05 = distance(var_04.origin,param_00); + if(var_05 < var_02) + { + var_01 = var_04; + var_02 = var_05; + } + } + + return var_01; +} + +//Function Number: 25 +lbsupport_getclosestnode(param_00) +{ + var_01 = undefined; + var_02 = 999999; + foreach(var_04 in level.air_node_mesh) + { + var_05 = distance(var_04.origin,param_00); + if(var_05 < var_02) + { + var_01 = var_04; + var_02 = var_05; + } + } + + return var_01; +} + +//Function Number: 26 +lbsupport_getclosestlinkednode(param_00) +{ + var_01 = undefined; + var_02 = distance2d(self.currentnode.origin,param_00); + var_03 = var_02; + foreach(var_05 in self.currentnode.neighbors) + { + var_06 = distance2d(var_05.origin,param_00); + if(var_06 < var_02 && var_06 < var_03) + { + var_01 = var_05; + var_03 = var_06; + } + } + + return var_01; +} + +//Function Number: 27 +lbsupport_arraycontains(param_00,param_01) +{ + if(param_00.size <= 0) + { + return 0; + } + + foreach(var_03 in param_00) + { + if(var_03 == param_01) + { + return 1; + } + } + + return 0; +} + +//Function Number: 28 +lbsupport_getlinkedstructs() +{ + var_00 = []; + if(isdefined(self.script_linkto)) + { + var_01 = common_scripts\utility::get_links(); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + var_03 = common_scripts\utility::getstruct(var_01[var_02],"script_linkname"); + if(isdefined(var_03)) + { + var_00[var_00.size] = var_03; + } + } + } + + return var_00; +} + +//Function Number: 29 +lbsupport_setairstartnodes() +{ + level.air_start_nodes = common_scripts\utility::getstructarray("chopper_boss_path_start","targetname"); + foreach(var_01 in level.air_start_nodes) + { + var_01.neighbors = var_01 lbsupport_getlinkedstructs(); + } +} + +//Function Number: 30 +lbsupport_setairnodemesh() +{ + level.air_node_mesh = common_scripts\utility::getstructarray("so_chopper_boss_path_struct","script_noteworthy"); + lbsupport_tu0_raise_positions(); + foreach(var_01 in level.air_node_mesh) + { + var_01.neighbors = var_01 lbsupport_getlinkedstructs(); + foreach(var_03 in level.air_node_mesh) + { + if(var_01 == var_03) + { + continue; + } + + if(!lbsupport_arraycontains(var_01.neighbors,var_03) && lbsupport_arraycontains(var_03 lbsupport_getlinkedstructs(),var_01)) + { + var_01.neighbors[var_01.neighbors.size] = var_03; + } + } + } +} + +//Function Number: 31 +lbsupport_tu0_raise_positions() +{ + switch(getdvar("mapname")) + { + case "mp_lambeth": + var_00 = []; + var_01 = []; + var_02 = 0; + while(var_02 < level.air_node_mesh.size) + { + foreach(var_04 in var_7B) + { + if(int(level.air_node_mesh[var_02].origin[0]) == int(var_04[0]) && int(level.air_node_mesh[var_02].origin[1]) == int(var_04[1]) && int(level.air_node_mesh[var_02].origin[2]) == int(var_04[2])) + { + level.air_node_mesh[var_02].origin = level.air_node_mesh[var_02].origin + (0,0,192); + break; + } + } + + foreach(var_04 in var_01) + { + if(int(level.air_node_mesh[var_02].origin[0]) == int(var_04[0]) && int(level.air_node_mesh[var_02].origin[1]) == int(var_04[1]) && int(level.air_node_mesh[var_02].origin[2]) == int(var_04[2])) + { + level.air_node_mesh[var_02].origin = level.air_node_mesh[var_02].origin + (0,0,300); + break; + } + } + + var_02++ = var_7B[var_01.size]; + } + + break; + (-1027.1,-1180.7,312) + var_7B[var_7B.size] + (2732.9,83.3,376) + var_7B[var_7B.size] + (2748.9,963.3,328) + var_7B[var_7B.size] + (956.9,2931.3,216) + var_7B[var_7B.size] + (-467.1,-316.7,184) + var_7B[var_7B.size] + (-1155.1,1187.3,344) + var_7B[var_7B.size] + (-947.1,1859.3,376) + var_7B[var_00.size] + (-291.1,1587.3,184) + break; + + case "mp_village": + var_08 = []; + var_09 = []; + var_0A = []; + var_0B = (-1155.1,-1260.7,1096); + var_02 = 0; + while(var_02 < level.air_node_mesh.size) + { + foreach(var_04 in var_7B) + { + if(int(level.air_node_mesh[var_02].origin[0]) == int(var_04[0]) && int(level.air_node_mesh[var_02].origin[1]) == int(var_04[1]) && int(level.air_node_mesh[var_02].origin[2]) == int(var_04[2])) + { + level.air_node_mesh[var_02].origin = level.air_node_mesh[var_02].origin + (0,0,200); + break; + } + } + + foreach(var_04 in var_09) + { + if(int(level.air_node_mesh[var_02].origin[0]) == int(var_04[0]) && int(level.air_node_mesh[var_02].origin[1]) == int(var_04[1]) && int(level.air_node_mesh[var_02].origin[2]) == int(var_04[2])) + { + level.air_node_mesh[var_02].origin = level.air_node_mesh[var_02].origin + (0,0,250); + break; + } + } + + foreach(var_04 in var_0A) + { + if(int(level.air_node_mesh[var_02].origin[0]) == int(var_04[0]) && int(level.air_node_mesh[var_02].origin[1]) == int(var_04[1]) && int(level.air_node_mesh[var_02].origin[2]) == int(var_04[2])) + { + level.air_node_mesh[var_02].origin = level.air_node_mesh[var_02].origin + (0,0,400); + break; + } + } + + if(int(level.air_node_mesh[var_02].origin[0]) == int(var_0B[0]) && int(level.air_node_mesh[var_02].origin[1]) == int(var_0B[1]) && int(level.air_node_mesh[var_02].origin[2]) == int(var_0B[2])) + { + level.air_node_mesh[var_02].origin = (-1003,-1035,986); + continue; + } + + var_02++ = var_7B[var_0A.size]; + } + + break; + (1100.9,1155.3,632) + var_7B[var_09.size] + (1600,352,752) + var_7B[var_09.size] + (352,800,736) + var_7B[var_7B.size] + (412.9,67.3,680) + var_7B[var_7B.size] + (1756.9,-444.7,744) + var_7B[var_7B.size] + (972.9,163.3,744) + var_7B[var_7B.size] + (60.9,1363.3,728) + var_7B[var_08.size] + (684.9,2227.3,680) + break; + + case "mp_interchange": + var_12 = []; + var_02 = 0; + while(var_02 < level.air_node_mesh.size) + { + foreach(var_04 in var_7B) + { + if(int(level.air_node_mesh[var_02].origin[0]) == int(var_04[0]) && int(level.air_node_mesh[var_02].origin[1]) == int(var_04[1]) && int(level.air_node_mesh[var_02].origin[2]) == int(var_04[2])) + { + level.air_node_mesh[var_02].origin = level.air_node_mesh[var_02].origin + (0,0,100); + break; + } + } + + var_02++ = var_7B[var_12.size]; + } + + break; + (-755.1,-1788.7,360) + break; + + default: + break; + } +} + +//Function Number: 32 +lbsupport_tu0_new_incoming_position(param_00) +{ + switch(getdvar("mapname")) + { + case "mp_interchange": + var_01 = []; + var_02 = []; + var_01[var_02.size][0] = (1340.9,1299.3,360); + var_01[var_02.size][1] = (2220.9,115.3,408); + var_02[var_7B.size][0] = (-755.1,-588.7,728); + var_02[var_7B.size][1] = (-2563.1,-1580.7,1192); + var_02[var_7B.size][0] = (-35.1,-2492.7,488); + var_02[var_7B.size][1] = (396.9,-1884.7,696); + var_03 = randomintrange(0,100) > 50; + var_04 = 0; + while(var_04 < var_7B.size) + { + if(int(var_01.origin[0]) == int(var_7B[var_04][0]) && int(var_01.origin[1]) == int(var_7B[var_04][1]) && int(var_01.origin[2]) == int(var_7B[var_04][2])) + { + var_05 = 0; + while(var_05 < level.air_node_mesh.size) + { + if(int(level.air_node_mesh[var_05].origin[0]) == int(var_02[var_04][var_03][0]) && int(level.air_node_mesh[var_05].origin[1]) == int(var_02[var_04][var_03][1]) && int(level.air_node_mesh[var_05].origin[2]) == int(var_02[var_04][var_03][2])) + { + return level.air_node_mesh[var_05]; + } + + var_05++ = var_7B[var_7B.size]; + } + } + + var_04++ = (-755.1,-1788.7,460); + } + + break; + var_7B[var_7B.size] + (-1363.1,-1164.7,472) + var_7B[var_02.size] + (1884.9,787.3,312) + break; + + default: + break; + } + + return var_01; +} + +//Function Number: 33 +lbsupport_attacktargets() +{ + self.vehicle endon("death"); + level endon("game_ended"); + for(;;) + { + self waittill("turretstatechange"); + if(self isfiringturret() && !self.vehicle.empgrenaded) + { + thread lbsupport_burstfirestart(); + continue; + } + + thread lbsupport_burstfirestop(); + } +} + +//Function Number: 34 +lbsupport_burstfirestart() +{ + self.vehicle endon("death"); + self.vehicle endon("leaving"); + self endon("stop_shooting"); + level endon("game_ended"); + var_00 = 0.1; + var_01 = 40; + var_02 = 80; + var_03 = 1; + var_04 = 2; + for(;;) + { + var_05 = randomintrange(var_01,var_02 + 1); + for(var_06 = 0;var_06 < var_05;var_06++) + { + var_07 = self getturrettarget(0); + if(isdefined(var_07) && !isdefined(var_07.spawntime) || gettime() - var_07.spawntime / 1000 > 5 && isdefined(var_07.team) && var_07.team != "spectator" && maps\mp\_utility::isreallyalive(var_07)) + { + self.vehicle setlookatent(var_07); + self shootturret(); + } + + wait var_00; + } + + wait randomfloatrange(var_03,var_04); + } +} + +//Function Number: 35 +lbsupport_burstfirestop() +{ + self notify("stop_shooting"); + if(isdefined(self.vehicle.owner)) + { + self.vehicle setlookatent(self.vehicle.owner); + } +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/killstreaks/_ims.gsc b/MW3/PC/MP/maps/mp/killstreaks/_ims.gsc new file mode 100644 index 0000000..96ccdfb --- /dev/null +++ b/MW3/PC/MP/maps/mp/killstreaks/_ims.gsc @@ -0,0 +1,1239 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\killstreaks\_ims.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 37 + * Decompile Time: 893 ms + * Timestamp: 10/27/2023 2:14:16 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level.killstreakfuncs["ims"] = ::tryuseims; + level.imssettings = []; + level.imssettings["ims"] = spawnstruct(); + level.imssettings["ims"].weaponinfo = "ims_projectile_mp"; + level.imssettings["ims"].modelbase = "ims_scorpion_body"; + level.imssettings["ims"].modelplacement = "ims_scorpion_body_placement"; + level.imssettings["ims"].modelplacementfailed = "ims_scorpion_body_placement_failed"; + level.imssettings["ims"].modeldestroyed = "ims_scorpion_body"; + level.imssettings["ims"].modelbombsquad = "ims_scorpion_body_bombsquad"; + level.imssettings["ims"].hintstring = &"MP_IMS_PICKUP"; + level.imssettings["ims"].placestring = &"MP_IMS_PLACE"; + level.imssettings["ims"].cannotplacestring = &"MP_IMS_CANNOT_PLACE"; + level.imssettings["ims"].streakname = "ims"; + level.imssettings["ims"].splashname = "used_ims"; + level.imssettings["ims"].lifespan = 90; + level.imssettings["ims"].graceperiod = 0.4; + level.imssettings["ims"].attacks = 4; + level.imssettings["ims"].modelexplosive1 = "ims_scorpion_explosive1"; + level.imssettings["ims"].modelexplosive2 = "ims_scorpion_explosive2"; + level.imssettings["ims"].modelexplosive3 = "ims_scorpion_explosive3"; + level.imssettings["ims"].modelexplosive4 = "ims_scorpion_explosive4"; + level.imssettings["ims"].modellid1 = "ims_scorpion_lid1"; + level.imssettings["ims"].modellid2 = "ims_scorpion_lid2"; + level.imssettings["ims"].modellid3 = "ims_scorpion_lid3"; + level.imssettings["ims"].modellid4 = "ims_scorpion_lid4"; + level.imssettings["ims"].tagexplosive1 = "tag_explosive1"; + level.imssettings["ims"].tagexplosive2 = "tag_explosive2"; + level.imssettings["ims"].tagexplosive3 = "tag_explosive3"; + level.imssettings["ims"].tagexplosive4 = "tag_explosive4"; + level.imssettings["ims"].taglid1 = "tag_lid1"; + level.imssettings["ims"].taglid2 = "tag_lid2"; + level.imssettings["ims"].taglid3 = "tag_lid3"; + level.imssettings["ims"].taglid4 = "tag_lid4"; + foreach(var_01 in level.imssettings) + { + precacheitem(var_01.weaponinfo); + precachemodel(var_01.modelbase); + precachemodel(var_01.modelplacement); + precachemodel(var_01.modelplacementfailed); + precachemodel(var_01.modeldestroyed); + precachemodel(var_01.modelbombsquad); + precachemodel(var_01.modelexplosive1); + precachemodel(var_01.modelexplosive2); + precachemodel(var_01.modelexplosive3); + precachemodel(var_01.modelexplosive4); + precachemodel(var_01.modellid1); + precachemodel(var_01.modellid2); + precachemodel(var_01.modellid3); + precachemodel(var_01.modellid4); + precachestring(var_01.hintstring); + precachestring(var_01.placestring); + precachestring(var_01.cannotplacestring); + } + + precachestring(&"PLATFORM_HOLD_TO_USE"); + level._effect["ims_explode_mp"] = loadfx("explosions/sentry_gun_explosion"); + level._effect["ims_smoke_mp"] = loadfx("smoke/car_damage_blacksmoke"); + level._effect["ims_sensor_trail"] = loadfx("smoke/smoke_geotrail_rpg"); + level._effect["ims_sensor_explode"] = loadfx("explosions/generator_sparks_d"); + level._effect["ims_antenna_light_mp"] = loadfx("lights/light_detonator_blink"); +} + +//Function Number: 2 +tryuseims(param_00) +{ + var_01 = []; + if(isdefined(self.imslist)) + { + var_01 = self.imslist; + } + + var_02 = giveims("ims"); + if(!isdefined(var_02)) + { + var_02 = 0; + if(isdefined(self.imslist)) + { + if(!var_01.size && self.imslist.size) + { + var_02 = 1; + } + + if(var_01.size && var_01[0] != self.imslist[0]) + { + var_02 = 1; + } + } + } + + if(var_02) + { + maps\mp\_matchdata::logkillstreakevent(level.imssettings["ims"].streakname,self.origin); + } + + self.iscarrying = 0; + return var_02; +} + +//Function Number: 3 +giveims(param_00) +{ + var_01 = createimsforplayer(param_00,self); + removeperks(); + var_02 = setcarryingims(var_01,1); + thread restoreperks(); + return var_02; +} + +//Function Number: 4 +setcarryingims(param_00,param_01) +{ + self endon("death"); + self endon("disconnect"); + param_00 thread ims_setcarried(self); + common_scripts\utility::_disableweapon(); + self notifyonplayercommand("place_ims","+attack"); + self notifyonplayercommand("place_ims","+attack_akimbo_accessible"); + self notifyonplayercommand("cancel_ims","+actionslot 4"); + for(;;) + { + var_02 = common_scripts\utility::waittill_any_return("place_ims","cancel_ims","force_cancel_placement"); + if(var_02 == "cancel_ims" || var_02 == "force_cancel_placement") + { + if(!param_01 && var_02 == "cancel_ims") + { + continue; + } + + var_03 = maps\mp\killstreaks\_killstreaks::getkillstreakweapon(level.imssettings[param_00.imstype].streakname); + if(isdefined(self.killstreakindexweapon) && var_03 == maps\mp\killstreaks\_killstreaks::getkillstreakweapon(self.pers["killstreaks"][self.killstreakindexweapon].streakname) && !self getweaponslistitems().size) + { + maps\mp\_utility::_giveweapon(var_03,0); + maps\mp\_utility::_setactionslot(4,"weapon",var_03); + } + + param_00 ims_setcancelled(); + common_scripts\utility::_enableweapon(); + return 0; + } + + if(!param_01.canbeplaced) + { + continue; + } + + param_01 thread ims_setplaced(); + common_scripts\utility::_enableweapon(); + return 1; + } +} + +//Function Number: 5 +removeweapons() +{ + if(self hasweapon("riotshield_mp")) + { + self.restoreweapon = "riotshield_mp"; + self takeweapon("riotshield_mp"); + } +} + +//Function Number: 6 +removeperks() +{ + if(maps\mp\_utility::_hasperk("specialty_explosivebullets")) + { + self.restoreperk = "specialty_explosivebullets"; + maps\mp\_utility::_unsetperk("specialty_explosivebullets"); + } +} + +//Function Number: 7 +restoreweapons() +{ + if(isdefined(self.restoreweapon)) + { + maps\mp\_utility::_giveweapon(self.restoreweapon); + self.restoreweapon = undefined; + } +} + +//Function Number: 8 +restoreperks() +{ + if(isdefined(self.restoreperk)) + { + maps\mp\_utility::giveperk(self.restoreperk,0); + self.restoreperk = undefined; + } +} + +//Function Number: 9 +waitrestoreperks() +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + wait 0.05; + restoreperks(); +} + +//Function Number: 10 +createimsforplayer(param_00,param_01) +{ + var_02 = spawnturret("misc_turret",param_01.origin + (0,0,25),"sentry_minigun_mp"); + var_02.angles = param_01.angles; + var_02.imstype = param_00; + var_02.owner = param_01; + var_02 setmodel(level.imssettings[param_00].modelbase); + var_02 maketurretinoperable(); + var_02 setturretmodechangewait(1); + var_02 setmode("sentry_offline"); + var_02 makeunusable(); + var_02 setsentryowner(param_01); + return var_02; +} + +//Function Number: 11 +createims(param_00) +{ + var_01 = param_00.owner; + var_02 = param_00.imstype; + var_03 = spawn("script_model",param_00.origin); + var_03 setmodel(level.imssettings[var_02].modelbase); + var_03.scale = 3; + var_03.health = 1000; + var_03.angles = var_01.angles; + var_03.imstype = var_02; + var_03.owner = var_01; + var_03.team = var_01.team; + var_03.shouldsplash = 0; + var_03.hidden = 0; + var_03.attacks = level.imssettings[var_02].attacks; + var_03.lid1 = spawn("script_model",var_03 gettagorigin(level.imssettings[var_02].taglid1 + "_attach")); + var_03.lid1 setmodel(level.imssettings[var_02].modellid1); + var_03.lid1.tag = level.imssettings[var_02].taglid1; + var_03.lid1 linkto(var_03); + var_03.lid2 = spawn("script_model",var_03 gettagorigin(level.imssettings[var_02].taglid2 + "_attach")); + var_03.lid2 setmodel(level.imssettings[var_02].modellid2); + var_03.lid2.tag = level.imssettings[var_02].taglid2; + var_03.lid2 linkto(var_03); + var_03.lid3 = spawn("script_model",var_03 gettagorigin(level.imssettings[var_02].taglid3 + "_attach")); + var_03.lid3 setmodel(level.imssettings[var_02].modellid3); + var_03.lid3.tag = level.imssettings[var_02].taglid3; + var_03.lid3 linkto(var_03); + var_03.lid4 = spawn("script_model",var_03 gettagorigin(level.imssettings[var_02].taglid4 + "_attach")); + var_03.lid4 setmodel(level.imssettings[var_02].modellid4); + var_03.lid4.tag = level.imssettings[var_02].taglid4; + var_03.lid4 linkto(var_03); + var_03.explosive1 = spawn("script_model",var_03 gettagorigin(level.imssettings[var_02].tagexplosive1 + "_attach")); + var_03.explosive1 setmodel(level.imssettings[var_02].modelexplosive1); + var_03.explosive1.tag = level.imssettings[var_02].tagexplosive1; + var_03.explosive1 linkto(var_03); + var_03.explosive2 = spawn("script_model",var_03 gettagorigin(level.imssettings[var_02].tagexplosive2 + "_attach")); + var_03.explosive2 setmodel(level.imssettings[var_02].modelexplosive2); + var_03.explosive2.tag = level.imssettings[var_02].tagexplosive2; + var_03.explosive2 linkto(var_03); + var_03.explosive3 = spawn("script_model",var_03 gettagorigin(level.imssettings[var_02].tagexplosive3 + "_attach")); + var_03.explosive3 setmodel(level.imssettings[var_02].modelexplosive3); + var_03.explosive3.tag = level.imssettings[var_02].tagexplosive3; + var_03.explosive3 linkto(var_03); + var_03.explosive4 = spawn("script_model",var_03 gettagorigin(level.imssettings[var_02].tagexplosive4 + "_attach")); + var_03.explosive4 setmodel(level.imssettings[var_02].modelexplosive4); + var_03.explosive4.tag = level.imssettings[var_02].tagexplosive4; + var_03.explosive4 linkto(var_03); + var_03 ims_setinactive(); + var_03 thread ims_handleownerdisconnect(); + var_03 thread ims_handledeath(); + var_03 thread ims_handleuse(); + var_03 thread ims_handledamage(); + var_03 thread ims_timeout(); + var_03 thread ims_createbombsquadmodel(); + return var_03; +} + +//Function Number: 12 +ims_createbombsquadmodel() +{ + var_00 = spawn("script_model",self.origin); + var_00.angles = self.angles; + var_00 hide(); + var_01 = level.otherteam[self.team]; + var_00 thread maps\mp\gametypes\_weapons::bombsquadvisibilityupdater(var_01,self.owner); + var_00 setmodel(level.imssettings[self.imstype].modelbombsquad); + var_00 linkto(self); + var_00 setcontents(0); + self.var_13 = var_00; + self waittill("death"); + var_00 delete(); +} + +//Function Number: 13 +ims_handledamage() +{ + self endon("death"); + level endon("game_ended"); + self.health = 999999; + self.maxhealth = 300; + self.damagetaken = 0; + for(;;) + { + self waittill("damage",var_00,var_01,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09); + if(!maps\mp\gametypes\_weapons::friendlyfirecheck(self.owner,var_01)) + { + continue; + } + + if(isdefined(var_09)) + { + switch(var_09) + { + case "ims_projectile_mp": + case "flash_grenade_mp": + case "smoke_grenade_mp": + case "concussion_grenade_mp": + break; + } + } + + if(!isdefined(self)) + { + return; + } + + if(self.hidden) + { + return; + } + + if(var_04 == "MOD_MELEE") + { + self.damagetaken = self.damagetaken + self.maxhealth; + } + + if(isexplosivedamagemod(var_04)) + { + var_00 = var_00 * 1.5; + } + + if(isdefined(var_08) && var_08 & level.idflags_penetration) + { + self.wasdamagedfrombulletpenetration = 1; + } + + self.wasdamaged = 1; + var_0A = var_00; + if(isplayer(var_01)) + { + var_01 maps\mp\gametypes\_damagefeedback::updatedamagefeedback("ims"); + if(var_01 maps\mp\_utility::_hasperk("specialty_armorpiercing")) + { + var_0A = var_00 * level.armorpiercingmod; + } + } + + if(isdefined(var_01.owner) && isplayer(var_01.owner)) + { + var_01.owner maps\mp\gametypes\_damagefeedback::updatedamagefeedback("ims"); + } + + if(isdefined(var_09)) + { + switch(var_09) + { + case "javelin_mp": + case "stinger_mp": + case "remote_mortar_missile_mp": + case "remotemissile_projectile_mp": + case "ac130_40mm_mp": + case "ac130_105mm_mp": + self.var_30C8 = 1; + var_0A = self.maxhealth + 1; + break; + + case "stealth_bomb_mp": + case "artillery_mp": + self.var_30C8 = 0; + var_0A = var_0A + var_00 * 4; + break; + + case "bomb_site_mp": + case "emp_grenade_mp": + self.var_30C8 = 0; + var_0A = self.maxhealth + 1; + break; + } + } + + self.damagetaken = self.damagetaken + var_0A; + if(self.damagetaken >= self.maxhealth) + { + thread maps\mp\gametypes\_missions::vehiclekilled(self.owner,self,undefined,var_01,var_00,var_04,var_09); + if(isplayer(var_01) && !isdefined(self.owner) || var_01 != self.owner) + { + var_01 thread maps\mp\gametypes\_rank::giverankxp("kill",100,var_09,var_04); + var_01 notify("destroyed_killstreak"); + } + + if(isdefined(self.owner)) + { + self.owner thread maps\mp\_utility::leaderdialogonplayer("ims_destroyed"); + } + + self notify("death"); + return; + } + } +} + +//Function Number: 14 +ims_handledeath() +{ + var_00 = self getentitynumber(); + addtoimslist(var_00); + self waittill("death"); + removefromimslist(var_00); + if(!isdefined(self)) + { + return; + } + + self setmodel(level.imssettings[self.imstype].modeldestroyed); + ims_setinactive(); + self playsound("ims_destroyed"); + if(isdefined(self.inuseby)) + { + playfx(common_scripts\utility::getfx("ims_explode_mp"),self.origin + (0,0,10)); + playfx(common_scripts\utility::getfx("ims_smoke_mp"),self.origin); + self.inuseby restoreperks(); + self.inuseby restoreweapons(); + self notify("deleting"); + wait 1; + } + else + { + playfx(common_scripts\utility::getfx("ims_explode_mp"),self.origin + (0,0,10)); + wait 1.5; + self playsound("ims_fire"); + var_01 = 8; + while(var_01 > 0) + { + playfx(common_scripts\utility::getfx("ims_smoke_mp"),self.origin); + wait 0.4; + var_01 = var_01 - 0.4; + } + + self notify("deleting"); + } + + if(isdefined(self.objidfriendly)) + { + maps\mp\_utility::_objective_delete(self.objidfriendly); + } + + if(isdefined(self.objidenemy)) + { + maps\mp\_utility::_objective_delete(self.objidenemy); + } + + if(isdefined(self.lid1)) + { + self.lid1 delete(); + } + + if(isdefined(self.lid2)) + { + self.lid2 delete(); + } + + if(isdefined(self.lid3)) + { + self.lid3 delete(); + } + + if(isdefined(self.lid4)) + { + self.lid4 delete(); + } + + if(isdefined(self.explosive1)) + { + if(isdefined(self.explosive1.killcament)) + { + self.explosive1.killcament delete(); + } + + self.explosive1 delete(); + } + + if(isdefined(self.explosive2)) + { + if(isdefined(self.explosive2.killcament)) + { + self.explosive2.killcament delete(); + } + + self.explosive2 delete(); + } + + if(isdefined(self.explosive3)) + { + if(isdefined(self.explosive3.killcament)) + { + self.explosive3.killcament delete(); + } + + self.explosive3 delete(); + } + + if(isdefined(self.explosive4)) + { + if(isdefined(self.explosive4.killcament)) + { + self.explosive4.killcament delete(); + } + + self.explosive4 delete(); + } + + self delete(); +} + +//Function Number: 15 +ims_handleuse() +{ + self endon("death"); + level endon("game_ended"); + for(;;) + { + self waittill("trigger",var_00); + if(!maps\mp\_utility::isreallyalive(var_00)) + { + continue; + } + + var_01 = createimsforplayer(self.imstype,var_00); + var_01.ims = self; + ims_setinactive(); + ims_hideallparts(); + var_00 setcarryingims(var_01,0); + } +} + +//Function Number: 16 +ims_handleownerdisconnect() +{ + self endon("death"); + level endon("game_ended"); + self notify("ims_handleOwner"); + self endon("ims_handleOwner"); + self.owner common_scripts\utility::waittill_any("disconnect","joined_team","joined_spectators"); + self notify("death"); +} + +//Function Number: 17 +ims_setplaced() +{ + self endon("death"); + level endon("game_ended"); + self.carriedby forceusehintoff(); + self.carriedby = undefined; + if(isdefined(self.owner)) + { + self.owner.iscarrying = 0; + } + + var_00 = undefined; + if(isdefined(self.ims)) + { + var_00 = self.ims; + var_00 endon("death"); + var_00.origin = self.origin; + var_00.angles = self.angles; + var_00.carriedby = undefined; + wait 0.05; + var_00 ims_showallparts(); + if(isdefined(var_00.var_13)) + { + var_00.var_13 show(); + level notify("update_bombsquad"); + } + } + else + { + var_00 = createims(self); + } + + var_00 setcandamage(1); + self playsound("ims_plant"); + self notify("placed"); + var_00 thread ims_setactive(); + self delete(); +} + +//Function Number: 18 +ims_setcancelled() +{ + if(isdefined(self.carriedby)) + { + self.carriedby forceusehintoff(); + } + + if(isdefined(self.owner)) + { + self.owner.iscarrying = 0; + } + + if(isdefined(self.lid1)) + { + self.lid1 delete(); + } + + if(isdefined(self.lid2)) + { + self.lid2 delete(); + } + + if(isdefined(self.lid3)) + { + self.lid3 delete(); + } + + if(isdefined(self.lid4)) + { + self.lid4 delete(); + } + + if(isdefined(self.explosive1)) + { + self.explosive1 delete(); + } + + if(isdefined(self.explosive2)) + { + self.explosive2 delete(); + } + + if(isdefined(self.explosive3)) + { + self.explosive3 delete(); + } + + if(isdefined(self.explosive4)) + { + self.explosive4 delete(); + } + + self delete(); +} + +//Function Number: 19 +ims_setcarried(param_00) +{ + self setmodel(level.imssettings[self.imstype].modelplacement); + self setsentrycarrier(param_00); + self setcontents(0); + self setcandamage(0); + self.carriedby = param_00; + param_00.iscarrying = 1; + param_00 thread updateimsplacement(self); + thread ims_oncarrierdeath(param_00); + thread ims_oncarrierdisconnect(param_00); + thread ims_ongameended(); + self notify("carried"); + if(isdefined(self.ims)) + { + self.ims notify("carried"); + self.ims.carriedby = param_00; + if(isdefined(self.ims.var_13)) + { + self.ims.var_13 hide(); + } + } +} + +//Function Number: 20 +updateimsplacement(param_00) +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + param_00 endon("placed"); + param_00 endon("death"); + param_00.canbeplaced = 1; + var_01 = -1; + for(;;) + { + var_02 = self canplayerplacesentry(); + param_00.origin = var_02["origin"]; + param_00.angles = var_02["angles"]; + param_00.canbeplaced = self isonground() && var_02["result"] && abs(param_00.origin[2] - self.origin[2]) < 10; + if(param_00.canbeplaced != var_01) + { + if(param_00.canbeplaced) + { + param_00 setmodel(level.imssettings[param_00.imstype].modelplacement); + self forceusehinton(level.imssettings[param_00.imstype].placestring); + } + else + { + param_00 setmodel(level.imssettings[param_00.imstype].modelplacementfailed); + self forceusehinton(level.imssettings[param_00.imstype].cannotplacestring); + } + } + + var_01 = param_00.canbeplaced; + wait 0.05; + } +} + +//Function Number: 21 +ims_oncarrierdeath(param_00) +{ + self endon("placed"); + self endon("death"); + param_00 waittill("death"); + if(self.canbeplaced) + { + thread ims_setplaced(); + return; + } + + ims_setcancelled(); +} + +//Function Number: 22 +ims_oncarrierdisconnect(param_00) +{ + self endon("placed"); + self endon("death"); + param_00 waittill("disconnect"); + ims_setcancelled(); +} + +//Function Number: 23 +ims_ongameended(param_00) +{ + self endon("placed"); + self endon("death"); + level waittill("game_ended"); + ims_setcancelled(); +} + +//Function Number: 24 +ims_setactive() +{ + self setcursorhint("HINT_NOICON"); + self sethintstring(level.imssettings[self.imstype].hintstring); + var_00 = self.owner; + var_00 forceusehintoff(); + if(level.teambased) + { + maps\mp\_entityheadicons::setteamheadicon(self.team,(0,0,45)); + } + else + { + maps\mp\_entityheadicons::setplayerheadicon(var_00,(0,0,45)); + } + + self makeusable(); + self setcandamage(1); + if(isdefined(var_00.imslist)) + { + foreach(var_02 in var_00.imslist) + { + if(var_02 == self) + { + continue; + } + + var_02 notify("death"); + } + } + + var_00.imslist = []; + var_00.imslist[0] = self; + foreach(var_05 in level.players) + { + if(var_05 == var_00) + { + self enableplayeruse(var_05); + continue; + } + + self disableplayeruse(var_05); + } + + if(self.shouldsplash) + { + level thread maps\mp\_utility::teamplayercardsplash(level.imssettings[self.imstype].splashname,var_00); + self.shouldsplash = 0; + } + + var_07 = (0,0,20); + var_08 = (0,0,256); + var_09 = []; + var_0A = self gettagorigin(level.imssettings[self.imstype].tagexplosive1) + var_07; + var_09[0] = bullettrace(var_0A,var_0A + var_08 - var_07,0,self); + var_0A = self gettagorigin(level.imssettings[self.imstype].tagexplosive2) + var_07; + var_09[1] = bullettrace(var_0A,var_0A + var_08 - var_07,0,self); + var_0A = self gettagorigin(level.imssettings[self.imstype].tagexplosive3) + var_07; + var_09[2] = bullettrace(var_0A,var_0A + var_08 - var_07,0,self); + var_0A = self gettagorigin(level.imssettings[self.imstype].tagexplosive4) + var_07; + var_09[3] = bullettrace(var_0A,var_0A + var_08 - var_07,0,self); + var_0B = var_09[0]; + for(var_0C = 0;var_0C < var_09.size;var_0C++) + { + if(var_09[var_0C]["position"][2] < var_0B["position"][2]) + { + var_0B = var_09[var_0C]; + } + } + + self.attackheightpos = var_0B["position"] - (0,0,20); + var_0D = spawn("trigger_radius",self.origin,0,256,100); + self.attacktrigger = var_0D; + self.attackmovetime = distance(self.origin,self.attackheightpos) / 200; + self.killcamoffset = (0,0,12); + if(isdefined(self.explosive1.killcament)) + { + self.explosive1.killcament delete(); + } + + if(isdefined(self.explosive2.killcament)) + { + self.explosive2.killcament delete(); + } + + if(isdefined(self.explosive3.killcament)) + { + self.explosive3.killcament delete(); + } + + if(isdefined(self.explosive4.killcament)) + { + self.explosive4.killcament delete(); + } + + var_00.imskillcament = undefined; + if(isdefined(self.explosive1)) + { + self.explosive1.killcament = spawn("script_model",self.explosive1.origin + self.killcamoffset); + self.explosive1.killcament setscriptmoverkillcam("explosive"); + if(!isdefined(var_00.imskillcament)) + { + var_00.imskillcament = self.explosive1.killcament; + } + } + + if(isdefined(self.explosive2)) + { + self.explosive2.killcament = spawn("script_model",self.explosive2.origin + self.killcamoffset); + self.explosive2.killcament setscriptmoverkillcam("explosive"); + if(!isdefined(var_00.imskillcament)) + { + var_00.imskillcament = self.explosive2.killcament; + } + } + + if(isdefined(self.explosive3)) + { + self.explosive3.killcament = spawn("script_model",self.explosive3.origin + self.killcamoffset); + self.explosive3.killcament setscriptmoverkillcam("explosive"); + if(!isdefined(var_00.imskillcament)) + { + var_00.imskillcament = self.explosive3.killcament; + } + } + + if(isdefined(self.explosive4)) + { + self.explosive4.killcament = spawn("script_model",self.explosive4.origin + self.killcamoffset); + self.explosive4.killcament setscriptmoverkillcam("explosive"); + if(!isdefined(var_00.imskillcament)) + { + var_00.imskillcament = self.explosive4.killcament; + } + } + + thread ims_blinky_light(); + thread ims_attacktargets(); + thread ims_playerconnected(); + foreach(var_05 in level.players) + { + thread ims_playerjoinedteam(var_05); + } +} + +//Function Number: 25 +ims_playerconnected() +{ + self endon("death"); + level waittill("connected",var_00); + var_00 waittill("spawned_player"); + self disableplayeruse(var_00); +} + +//Function Number: 26 +ims_playerjoinedteam(param_00) +{ + self endon("death"); + param_00 endon("disconnect"); + for(;;) + { + param_00 waittill("joined_team"); + self disableplayeruse(param_00); + } +} + +//Function Number: 27 +ims_blinky_light() +{ + self endon("death"); + self endon("carried"); + for(;;) + { + playfxontag(common_scripts\utility::getfx("ims_antenna_light_mp"),self,"tag_fx"); + wait 1; + stopfxontag(common_scripts\utility::getfx("ims_antenna_light_mp"),self,"tag_fx"); + } +} + +//Function Number: 28 +ims_setinactive() +{ + self makeunusable(); + if(level.teambased) + { + maps\mp\_entityheadicons::setteamheadicon("none",(0,0,0)); + } + else if(isdefined(self.owner)) + { + maps\mp\_entityheadicons::setplayerheadicon(undefined,(0,0,0)); + } + + if(isdefined(self.attacktrigger)) + { + self.attacktrigger delete(); + } +} + +//Function Number: 29 +isfriendlytoims(param_00) +{ + if(level.teambased && self.team == param_00.team) + { + return 1; + } + + return 0; +} + +//Function Number: 30 +ims_attacktargets() +{ + level endon("game_ended"); + for(;;) + { + if(!isdefined(self.attacktrigger)) + { + break; + } + + self.attacktrigger waittill("trigger",var_00); + if(isplayer(var_00)) + { + if(isdefined(self.owner) && var_00 == self.owner) + { + continue; + } + + if(level.teambased && var_00.pers["team"] == self.team) + { + continue; + } + + if(!maps\mp\_utility::isreallyalive(var_00)) + { + continue; + } + } + else if(isdefined(var_00.owner)) + { + if(isdefined(self.owner) && var_00.owner == self.owner) + { + continue; + } + + if(level.teambased && var_00.owner.pers["team"] == self.team) + { + continue; + } + } + + if(!sighttracepassed(self.attackheightpos,var_00.origin + (0,0,50),0,self) || !sighttracepassed(self gettagorigin(level.imssettings[self.imstype].taglid1) + (0,0,5),var_00.origin + (0,0,50),0,self) && !sighttracepassed(self gettagorigin(level.imssettings[self.imstype].taglid2) + (0,0,5),var_00.origin + (0,0,50),0,self) && !sighttracepassed(self gettagorigin(level.imssettings[self.imstype].taglid3) + (0,0,5),var_00.origin + (0,0,50),0,self) && !sighttracepassed(self gettagorigin(level.imssettings[self.imstype].taglid4) + (0,0,5),var_00.origin + (0,0,50),0,self)) + { + continue; + } + + self playsound("ims_trigger"); + if(isplayer(var_00) && var_00 maps\mp\_utility::_hasperk("specialty_delaymine")) + { + var_00 notify("triggered_ims"); + wait level.delayminetime; + if(!isdefined(self.attacktrigger)) + { + break; + } + } + else + { + wait level.imssettings[self.imstype].graceperiod; + } + + if(isdefined(self.explosive1) && !isdefined(self.explosive1.fired)) + { + fire_sensor(var_00,self.explosive1,self.lid1); + } + else if(isdefined(self.explosive2) && !isdefined(self.explosive2.fired)) + { + fire_sensor(var_00,self.explosive2,self.lid2); + } + else if(isdefined(self.explosive3) && !isdefined(self.explosive3.fired)) + { + fire_sensor(var_00,self.explosive3,self.lid3); + } + else if(isdefined(self.explosive4) && !isdefined(self.explosive4.fired)) + { + fire_sensor(var_00,self.explosive4,self.lid4); + } + + self.attacks--; + if(self.attacks <= 0) + { + break; + } + + wait 2; + if(!isdefined(self.owner)) + { + break; + } + } + + if(isdefined(self.carriedby) && isdefined(self.owner) && self.carriedby == self.owner) + { + return; + } + + self notify("death"); +} + +//Function Number: 31 +fire_sensor(param_00,param_01,param_02) +{ + playfx(level._effect["ims_sensor_explode"],param_02.origin); + param_02 hide(); + param_01.fired = 1; + param_01 unlink(); + param_01 rotateyaw(3600,self.attackmovetime); + param_01 moveto(self.attackheightpos,self.attackmovetime,self.attackmovetime * 0.25,self.attackmovetime * 0.25); + if(isdefined(param_01.killcament)) + { + if(isdefined(self.owner)) + { + self.owner.imskillcament = param_01.killcament; + } + + param_01.killcament moveto(self.attackheightpos + self.killcamoffset,self.attackmovetime,self.attackmovetime * 0.25,self.attackmovetime * 0.25); + param_01.killcament thread deleteaftertime(5); + } + + param_01 playsound("ims_launch"); + param_01 waittill("movedone"); + playfx(level._effect["ims_sensor_explode"],param_01.origin); + var_03 = []; + for(var_04 = 0;var_04 < var_7B.size;var_04++ = var_7B[0]) + { + if(isdefined(self.owner)) + { + magicbullet("ims_projectile_mp",param_02.origin,var_7B[var_04],self.owner); + continue; + } + + magicbullet("ims_projectile_mp",param_02.origin,var_7B[var_04]); + } + + var_03 delete(); + param_02 delete(); +} + +//Function Number: 32 +deleteaftertime(param_00) +{ + self endon("death"); + level maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause(param_00); + if(isdefined(self)) + { + self delete(); + } +} + +//Function Number: 33 +ims_timeout() +{ + self endon("death"); + level endon("game_ended"); + var_00 = level.imssettings[self.imstype].lifespan; + while(var_00) + { + wait 1; + maps\mp\gametypes\_hostmigration::waittillhostmigrationdone(); + if(!isdefined(self.carriedby)) + { + var_00 = max(0,var_00 - 1); + } + } + + self notify("death"); +} + +//Function Number: 34 +addtoimslist(param_00) +{ + level.ims[param_00] = self; +} + +//Function Number: 35 +removefromimslist(param_00) +{ + level.ims[param_00] = undefined; +} + +//Function Number: 36 +ims_hideallparts() +{ + if(isdefined(self.lid1)) + { + self.lid1 hide(); + } + + if(isdefined(self.lid2)) + { + self.lid2 hide(); + } + + if(isdefined(self.lid3)) + { + self.lid3 hide(); + } + + if(isdefined(self.lid4)) + { + self.lid4 hide(); + } + + if(isdefined(self.explosive1)) + { + self.explosive1 hide(); + } + + if(isdefined(self.explosive2)) + { + self.explosive2 hide(); + } + + if(isdefined(self.explosive3)) + { + self.explosive3 hide(); + } + + if(isdefined(self.explosive4)) + { + self.explosive4 hide(); + } + + self hide(); + self.hidden = 1; +} + +//Function Number: 37 +ims_showallparts() +{ + if(isdefined(self.lid1)) + { + self.lid1 show(); + } + + if(isdefined(self.lid2)) + { + self.lid2 show(); + } + + if(isdefined(self.lid3)) + { + self.lid3 show(); + } + + if(isdefined(self.lid4)) + { + self.lid4 show(); + } + + if(isdefined(self.explosive1)) + { + self.explosive1 show(); + } + + if(isdefined(self.explosive2)) + { + self.explosive2 show(); + } + + if(isdefined(self.explosive3)) + { + self.explosive3 show(); + } + + if(isdefined(self.explosive4)) + { + self.explosive4 show(); + } + + self show(); + self.hidden = 0; +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/killstreaks/_juggernaut.gsc b/MW3/PC/MP/maps/mp/killstreaks/_juggernaut.gsc new file mode 100644 index 0000000..fb7148c --- /dev/null +++ b/MW3/PC/MP/maps/mp/killstreaks/_juggernaut.gsc @@ -0,0 +1,186 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\killstreaks\_juggernaut.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 7 + * Decompile Time: 125 ms + * Timestamp: 10/27/2023 2:14:17 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level.juggsettings = []; + level.juggsettings["juggernaut"] = spawnstruct(); + level.juggsettings["juggernaut"].splashusedname = "used_juggernaut"; + level.juggsettings["juggernaut"].overlay = "goggles_overlay"; + level.juggsettings["juggernaut_recon"] = spawnstruct(); + level.juggsettings["juggernaut_recon"].splashusedname = "used_juggernaut"; + level.juggsettings["juggernaut_recon"].overlay = "goggles_overlay"; + foreach(var_01 in level.juggsettings) + { + precacheshader(var_01.overlay); + } +} + +//Function Number: 2 +givejuggernaut(param_00) +{ + self endon("death"); + self endon("disconnect"); + wait 0.05; + if(isdefined(self.haslightarmor) && self.haslightarmor == 1) + { + maps\mp\perks\_perkfunctions::removelightarmor(self.previousmaxhealth); + } + + if(maps\mp\_utility::_hasperk("specialty_explosivebullets")) + { + maps\mp\_utility::_unsetperk("specialty_explosivebullets"); + } + + switch(param_00) + { + case "juggernaut": + self.isjuggernaut = 1; + self.juggmovespeedscaler = 0.65; + maps\mp\gametypes\_class::giveloadout(self.pers["team"],param_00,0,0); + self.movespeedscaler = 0.65; + break; + + case "juggernaut_recon": + self.isjuggernautrecon = 1; + self.juggmovespeedscaler = 0.75; + maps\mp\gametypes\_class::giveloadout(self.pers["team"],param_00,0,0); + self.movespeedscaler = 0.75; + var_01 = spawn("script_model",self.origin); + var_01.team = self.team; + var_01 makeportableradar(self); + self.personalradar = var_01; + thread radarmover(var_01); + break; + } + + maps\mp\gametypes\_weapons::updatemovespeedscale(); + self disableweaponpickup(); + if(!getdvarint("camera_thirdPerson")) + { + self.juggernautoverlay = newclienthudelem(self); + self.juggernautoverlay.x = 0; + self.juggernautoverlay.y = 0; + self.juggernautoverlay.alignx = "left"; + self.juggernautoverlay.aligny = "top"; + self.juggernautoverlay.horzalign = "fullscreen"; + self.juggernautoverlay.vertalign = "fullscreen"; + self.juggernautoverlay setshader(level.juggsettings[param_00].overlay,640,480); + self.juggernautoverlay.sort = -10; + self.juggernautoverlay.archived = 1; + self.juggernautoverlay.hidein3rdperson = 1; + } + + thread juggernautsounds(); + self setperk("specialty_radarjuggernaut",1,0); + thread maps\mp\_utility::teamplayercardsplash(level.juggsettings[param_00].splashusedname,self); + if(self.streaktype == "specialist") + { + thread maps\mp\killstreaks\_killstreaks::clearkillstreaks(); + } + else + { + thread maps\mp\killstreaks\_killstreaks::updatekillstreaks(1); + } + + thread juggremover(); + if(isdefined(self.carryflag)) + { + wait 0.05; + self attach(self.carryflag,"J_spine4",1); + } + + level notify("juggernaut_equipped",self); + maps\mp\_matchdata::logkillstreakevent("juggernaut",self.origin); +} + +//Function Number: 3 +juggernautsounds() +{ + level endon("game_ended"); + self endon("death"); + self endon("disconnect"); + self endon("jugg_removed"); + for(;;) + { + wait 3; + self playsound("juggernaut_breathing_sound"); + } +} + +//Function Number: 4 +radarmover(param_00) +{ + level endon("game_ended"); + self endon("disconnect"); + self endon("jugg_removed"); + self endon("jugdar_removed"); + for(;;) + { + param_00 moveto(self.origin,0.05); + wait 0.05; + } +} + +//Function Number: 5 +juggremover() +{ + level endon("game_ended"); + self endon("disconnect"); + self endon("jugg_removed"); + thread juggremoveongameended(); + thread func_01A7(); + common_scripts\utility::waittill_any("death","joined_team","joined_spectators","lost_juggernaut"); + self enableweaponpickup(); + self.isjuggernaut = 0; + self.isjuggernautdef = 0; + self.isjuggernautgl = 0; + self.isjuggernautrecon = 0; + if(isdefined(self.juggernautoverlay)) + { + self.juggernautoverlay destroy(); + } + + self unsetperk("specialty_radarjuggernaut",1); + if(isdefined(self.personalradar)) + { + self notify("jugdar_removed"); + level maps\mp\gametypes\_portable_radar::deleteportableradar(self.personalradar); + self.personalradar = undefined; + } + + self notify("jugg_removed"); +} + +//Function Number: 6 +juggremoveongameended() +{ + self endon("disconnect"); + self endon("jugg_removed"); + level waittill("game_ended"); + if(isdefined(self.juggernautoverlay)) + { + self.juggernautoverlay destroy(); + } +} + +//Function Number: 7 +func_01A7() +{ + self endon("jugg_removed"); + level endon("game_ended"); + var_00 = self.personalradar; + self waittill("disconnect"); + if(isdefined(var_00)) + { + level maps\mp\gametypes\_portable_radar::deleteportableradar(var_00); + } +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/killstreaks/_killstreaks.gsc b/MW3/PC/MP/maps/mp/killstreaks/_killstreaks.gsc new file mode 100644 index 0000000..c475f20 --- /dev/null +++ b/MW3/PC/MP/maps/mp/killstreaks/_killstreaks.gsc @@ -0,0 +1,1979 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\killstreaks\_killstreaks.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 63 + * Decompile Time: 1130 ms + * Timestamp: 10/27/2023 2:14:20 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + precachestring(&"MP_KILLSTREAK_N"); + precachestring(&"MP_NUKE_ALREADY_INBOUND"); + precachestring(&"MP_UNAVILABLE_IN_LASTSTAND"); + precachestring(&"MP_UNAVAILABLE_FOR_N_WHEN_EMP"); + precachestring(&"MP_UNAVAILABLE_FOR_N_WHEN_NUKE"); + precachestring(&"MP_UNAVAILABLE_USING_TURRET"); + precachestring(&"MP_UNAVAILABLE_WHEN_INCAP"); + precachestring(&"MP_HELI_IN_QUEUE"); + precachestring(&"MP_SPECIALIST_STREAKING_XP"); + precachestring(&"MP_AIR_SPACE_TOO_CROWDED"); + precachestring(&"MP_CIVILIAN_AIR_TRAFFIC"); + precachestring(&"MP_TOO_MANY_VEHICLES"); + precachestring(&"SPLASHES_HEADSHOT"); + precachestring(&"SPLASHES_FIRSTBLOOD"); + precachestring(&"MP_ASSIST"); + precachestring(&"MP_ASSIST_TO_KILL"); + precacheshader("hud_killstreak_dpad_arrow_down"); + precacheshader("hud_killstreak_dpad_arrow_right"); + precacheshader("hud_killstreak_dpad_arrow_up"); + precacheshader("hud_killstreak_frame"); + precacheshader("hud_killstreak_frame_fade_top"); + precacheshader("hud_killstreak_highlight"); + precacheshader("hud_killstreak_bar_empty"); + precacheshader("hud_killstreak_bar_full"); + initkillstreakdata(); + level.killstreakfuncs = []; + level.killstreaksetupfuncs = []; + level.killstreakweapons = []; + thread maps\mp\killstreaks\_ac130::init(); + thread maps\mp\killstreaks\_remotemissile::init(); + thread maps\mp\killstreaks\_uav::init(); + thread maps\mp\killstreaks\_airstrike::init(); + thread maps\mp\killstreaks\_airdrop::init(); + thread maps\mp\killstreaks\_helicopter::init(); + thread maps\mp\killstreaks\_helicopter_flock::init(); + thread maps\mp\killstreaks\_helicopter_guard::init(); + thread maps\mp\killstreaks\_autosentry::init(); + thread maps\mp\killstreaks\_emp::init(); + thread maps\mp\killstreaks\_nuke::init(); + thread maps\mp\killstreaks\_escortairdrop::init(); + thread maps\mp\killstreaks\_remotemortar::init(); + thread maps\mp\killstreaks\_deployablebox::init(); + thread maps\mp\killstreaks\_ims::init(); + thread maps\mp\killstreaks\_perkstreaks::init(); + thread maps\mp\killstreaks\_remoteturret::init(); + thread maps\mp\killstreaks\_remoteuav::init(); + thread maps\mp\killstreaks\_remotetank::init(); + thread maps\mp\killstreaks\_juggernaut::init(); + level.killstreakweildweapons = []; + level.killstreakweildweapons["cobra_player_minigun_mp"] = 1; + level.killstreakweildweapons["artillery_mp"] = 1; + level.killstreakweildweapons["stealth_bomb_mp"] = 1; + level.killstreakweildweapons["pavelow_minigun_mp"] = 1; + level.killstreakweildweapons["sentry_minigun_mp"] = 1; + level.killstreakweildweapons["harrier_20mm_mp"] = 1; + level.killstreakweildweapons["ac130_105mm_mp"] = 1; + level.killstreakweildweapons["ac130_40mm_mp"] = 1; + level.killstreakweildweapons["ac130_25mm_mp"] = 1; + level.killstreakweildweapons["remotemissile_projectile_mp"] = 1; + level.killstreakweildweapons["cobra_20mm_mp"] = 1; + level.killstreakweildweapons["nuke_mp"] = 1; + level.killstreakweildweapons["apache_minigun_mp"] = 1; + level.killstreakweildweapons["littlebird_guard_minigun_mp"] = 1; + level.killstreakweildweapons["uav_strike_marker_mp"] = 1; + level.killstreakweildweapons["osprey_minigun_mp"] = 1; + level.killstreakweildweapons["strike_marker_mp"] = 1; + level.killstreakweildweapons["a10_30mm_mp"] = 1; + level.killstreakweildweapons["manned_minigun_turret_mp"] = 1; + level.killstreakweildweapons["manned_gl_turret_mp"] = 1; + level.killstreakweildweapons["airdrop_trap_explosive_mp"] = 1; + level.killstreakweildweapons["uav_strike_projectile_mp"] = 1; + level.killstreakweildweapons["remote_mortar_missile_mp"] = 1; + level.killstreakweildweapons["manned_littlebird_sniper_mp"] = 1; + level.killstreakweildweapons["iw5_m60jugg_mp"] = 1; + level.killstreakweildweapons["iw5_mp412jugg_mp"] = 1; + level.killstreakweildweapons["iw5_riotshieldjugg_mp"] = 1; + level.killstreakweildweapons["iw5_usp45jugg_mp"] = 1; + level.killstreakweildweapons["remote_turret_mp"] = 1; + level.killstreakweildweapons["osprey_player_minigun_mp"] = 1; + level.killstreakweildweapons["deployable_vest_marker_mp"] = 1; + level.killstreakweildweapons["ugv_turret_mp"] = 1; + level.killstreakweildweapons["ugv_gl_turret_mp"] = 1; + level.killstreakweildweapons["uav_remote_mp"] = 1; + level.killstreakchainingweapons = []; + level.killstreakchainingweapons["remotemissile_projectile_mp"] = "predator_missile"; + level.killstreakchainingweapons["ims_projectile_mp"] = "ims"; + level.killstreakchainingweapons["sentry_minigun_mp"] = "airdrop_sentry_minigun"; + level.killstreakchainingweapons["artillery_mp"] = "precision_airstrike"; + level.killstreakchainingweapons["cobra_20mm_mp"] = "helicopter"; + level.killstreakchainingweapons["apache_minigun_mp"] = "littlebird_flock"; + level.killstreakchainingweapons["littlebird_guard_minigun_mp"] = "littlebird_support"; + level.killstreakchainingweapons["remote_mortar_missile_mp"] = "remote_mortar"; + level.killstreakchainingweapons["ugv_turret_mp"] = "airdrop_remote_tank"; + level.killstreakchainingweapons["ugv_gl_turret_mp"] = "airdrop_remote_tank"; + level.killstreakchainingweapons["pavelow_minigun_mp"] = "helicopter_flares"; + level.killstreakchainingweapons["ac130_105mm_mp"] = "ac130"; + level.killstreakchainingweapons["ac130_40mm_mp"] = "ac130"; + level.killstreakchainingweapons["ac130_25mm_mp"] = "ac130"; + level.killstreakchainingweapons["iw5_m60jugg_mp"] = "airdrop_juggernaut"; + level.killstreakchainingweapons["iw5_mp412jugg_mp"] = "airdrop_juggernaut"; + level.killstreakchainingweapons["osprey_player_minigun_mp"] = "osprey_gunner"; + level.killstreakrounddelay = maps\mp\_utility::getintproperty("scr_game_killstreakdelay",8); + level thread onplayerconnect(); +} + +//Function Number: 2 +initkillstreakdata() +{ + var_00 = 1; + for(;;) + { + var_01 = tablelookup("mp/killstreakTable.csv",0,var_00,1); + if(!isdefined(var_01) || var_01 == "") + { + break; + } + + var_02 = tablelookup("mp/killstreakTable.csv",0,var_00,1); + var_03 = tablelookupistring("mp/killstreakTable.csv",0,var_00,6); + precachestring(var_03); + var_04 = tablelookup("mp/killstreakTable.csv",0,var_00,8); + game["dialog"][var_02] = var_04; + var_05 = tablelookup("mp/killstreakTable.csv",0,var_00,9); + game["dialog"]["allies_friendly_" + var_02 + "_inbound"] = "use_" + var_05; + game["dialog"]["allies_enemy_" + var_02 + "_inbound"] = "enemy_" + var_05; + var_06 = tablelookup("mp/killstreakTable.csv",0,var_00,10); + game["dialog"]["axis_friendly_" + var_02 + "_inbound"] = "use_" + var_06; + game["dialog"]["axis_enemy_" + var_02 + "_inbound"] = "enemy_" + var_06; + var_07 = tablelookup("mp/killstreakTable.csv",0,var_00,12); + precacheitem(var_07); + var_08 = int(tablelookup("mp/killstreakTable.csv",0,var_00,13)); + maps\mp\gametypes\_rank::registerscoreinfo("killstreak_" + var_02,var_08); + var_09 = tablelookup("mp/killstreakTable.csv",0,var_00,14); + precacheshader(var_09); + var_09 = tablelookup("mp/killstreakTable.csv",0,var_00,15); + if(var_09 != "") + { + precacheshader(var_09); + } + + var_09 = tablelookup("mp/killstreakTable.csv",0,var_00,16); + if(var_09 != "") + { + precacheshader(var_09); + } + + var_09 = tablelookup("mp/killstreakTable.csv",0,var_00,17); + if(var_09 != "") + { + precacheshader(var_09); + } + + var_00++; + } +} + +//Function Number: 3 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + if(!isdefined(var_00.pers["killstreaks"])) + { + var_00.pers["killstreaks"] = []; + } + + if(!isdefined(var_00.pers["kID"])) + { + var_00.pers["kID"] = 10; + } + + var_00.lifeid = 0; + var_00.curdefvalue = 0; + if(isdefined(var_00.pers["deaths"])) + { + var_00.lifeid = var_00.pers["deaths"]; + } + + var_00 visionsetmissilecamforplayer(game["thermal_vision"]); + var_00 thread onplayerspawned(); + var_00.spupdatetotal = 0; + } +} + +//Function Number: 4 +onplayerspawned() +{ + self endon("disconnect"); + for(;;) + { + self waittill("spawned_player"); + thread usedkillstreak(); + thread waitforchangeteam(); + thread streakselectuptracker(); + thread streakselectdowntracker(); + thread streaknotifytracker(); + if(!isdefined(self.pers["killstreaks"][0])) + { + initplayerkillstreaks(); + } + + if(!isdefined(self.earnedstreaklevel)) + { + self.earnedstreaklevel = 0; + } + + if(!isdefined(self.adrenaline)) + { + self.adrenaline = self getplayerdata("killstreaksState","count"); + } + + setstreakcounttonext(); + updatestreakslots(); + if(self.streaktype == "specialist") + { + updatespecialistkillstreaks(); + continue; + } + + giveownedkillstreakitem(); + } +} + +//Function Number: 5 +initplayerkillstreaks() +{ + if(!isdefined(self.streaktype)) + { + return; + } + + if(self.streaktype == "specialist") + { + self setplayerdata("killstreaksState","isSpecialist",1); + } + else + { + self setplayerdata("killstreaksState","isSpecialist",0); + } + + self.pers["killstreaks"][0] = spawnstruct(); + self.pers["killstreaks"][0].available = 0; + self.pers["killstreaks"][0].streakname = undefined; + self.pers["killstreaks"][0].earned = 0; + self.pers["killstreaks"][0].awardxp = undefined; + self.pers["killstreaks"][0].owner = undefined; + self.pers["killstreaks"][0].kid = undefined; + self.pers["killstreaks"][0].lifeid = undefined; + self.pers["killstreaks"][0].isgimme = 1; + self.pers["killstreaks"][0].isspecialist = 0; + self.pers["killstreaks"][0].nextslot = undefined; + for(var_00 = 1;var_00 < 4;var_00++) + { + self.pers["killstreaks"][var_00] = spawnstruct(); + self.pers["killstreaks"][var_00].available = 0; + self.pers["killstreaks"][var_00].streakname = undefined; + self.pers["killstreaks"][var_00].earned = 1; + self.pers["killstreaks"][var_00].awardxp = 1; + self.pers["killstreaks"][var_00].owner = undefined; + self.pers["killstreaks"][var_00].kid = undefined; + self.pers["killstreaks"][var_00].lifeid = -1; + self.pers["killstreaks"][var_00].isgimme = 0; + self.pers["killstreaks"][var_00].isspecialist = 0; + } + + self.pers["killstreaks"][4] = spawnstruct(); + self.pers["killstreaks"][4].available = 0; + self.pers["killstreaks"][4].streakname = "all_perks_bonus"; + self.pers["killstreaks"][4].earned = 1; + self.pers["killstreaks"][4].awardxp = 0; + self.pers["killstreaks"][4].owner = undefined; + self.pers["killstreaks"][4].kid = undefined; + self.pers["killstreaks"][4].lifeid = -1; + self.pers["killstreaks"][4].isgimme = 0; + self.pers["killstreaks"][4].isspecialist = 1; + for(var_00 = 0;var_00 < 4;var_00++) + { + self setplayerdata("killstreaksState","icons",var_00,0); + } + + self setplayerdata("killstreaksState","hasStreak",0,0); + var_01 = 1; + foreach(var_03 in self.killstreaks) + { + self.pers["killstreaks"][var_01].streakname = var_03; + self.pers["killstreaks"][var_01].isspecialist = self.streaktype == "specialist"; + var_04 = self.pers["killstreaks"][var_01].streakname; + if(self.streaktype == "specialist") + { + var_05 = strtok(self.pers["killstreaks"][var_01].streakname,"_"); + if(var_05[var_05.size - 1] == "ks") + { + var_06 = undefined; + foreach(var_08 in var_05) + { + if(var_08 != "ks") + { + if(!isdefined(var_06)) + { + var_06 = var_08; + continue; + } + + var_06 = var_06 + "_" + var_08; + } + } + + if(maps\mp\_utility::isstrstart(self.pers["killstreaks"][var_01].streakname,"_")) + { + var_06 = "_" + var_06; + } + + if(isdefined(var_06) && maps\mp\gametypes\_class::getperkupgrade(var_06) != "specialty_null") + { + var_04 = self.pers["killstreaks"][var_01].streakname + "_pro"; + } + } + } + + self setplayerdata("killstreaksState","icons",var_01,getkillstreakindex(var_04)); + self setplayerdata("killstreaksState","hasStreak",var_01,0); + var_01++; + } + + self setplayerdata("killstreaksState","nextIndex",1); + self setplayerdata("killstreaksState","selectedIndex",-1); + self setplayerdata("killstreaksState","numAvailable",0); + self setplayerdata("killstreaksState","hasStreak",4,0); +} + +//Function Number: 6 +updatestreakcount() +{ + if(!isdefined(self.pers["killstreaks"])) + { + return; + } + + if(self.adrenaline == self.previousadrenaline) + { + return; + } + + var_00 = self.adrenaline; + self setplayerdata("killstreaksState","count",self.adrenaline); + if(self.adrenaline >= self getplayerdata("killstreaksState","countToNext")) + { + setstreakcounttonext(); + } +} + +//Function Number: 7 +resetstreakcount() +{ + self setplayerdata("killstreaksState","count",0); + setstreakcounttonext(); +} + +//Function Number: 8 +setstreakcounttonext() +{ + if(!isdefined(self.streaktype)) + { + self setplayerdata("killstreaksState","countToNext",0); + return; + } + + if(getmaxstreakcost() == 0) + { + self setplayerdata("killstreaksState","countToNext",0); + return; + } + + if(self.streaktype == "specialist") + { + if(self.adrenaline >= getmaxstreakcost()) + { + return; + } + } + + var_00 = getnextstreakname(); + if(!isdefined(var_00)) + { + return; + } + + var_01 = getstreakcost(var_00); + self setplayerdata("killstreaksState","countToNext",var_01); +} + +//Function Number: 9 +getnextstreakname() +{ + if(self.adrenaline == getmaxstreakcost() && self.streaktype != "specialist") + { + var_00 = 0; + } + else + { + var_00 = self.adrenaline; + } + + foreach(var_02 in self.killstreaks) + { + var_03 = getstreakcost(var_02); + if(var_03 > var_00) + { + return var_02; + } + } + + return undefined; +} + +//Function Number: 10 +getmaxstreakcost() +{ + var_00 = 0; + foreach(var_02 in self.killstreaks) + { + var_03 = getstreakcost(var_02); + if(var_03 > var_00) + { + var_00 = var_03; + } + } + + return var_00; +} + +//Function Number: 11 +updatestreakslots() +{ + if(!isdefined(self.streaktype)) + { + return; + } + + if(!maps\mp\_utility::isreallyalive(self)) + { + return; + } + + var_00 = 0; + for(var_01 = 0;var_01 < 4;var_01++) + { + if(isdefined(self.pers["killstreaks"][var_01]) && isdefined(self.pers["killstreaks"][var_01].streakname)) + { + self setplayerdata("killstreaksState","hasStreak",var_01,self.pers["killstreaks"][var_01].available); + if(self.pers["killstreaks"][var_01].available == 1) + { + var_00++; + } + } + } + + if(self.streaktype != "specialist") + { + self setplayerdata("killstreaksState","numAvailable",var_00); + } + + var_02 = self.earnedstreaklevel; + var_03 = getmaxstreakcost(); + if(self.earnedstreaklevel == var_03 && self.streaktype != "specialist") + { + var_02 = 0; + } + + var_04 = 1; + foreach(var_06 in self.killstreaks) + { + var_07 = getstreakcost(var_06); + if(var_07 > var_02) + { + var_08 = var_06; + break; + } + + if(self.streaktype == "specialist") + { + if(self.earnedstreaklevel == var_03) + { + break; + } + } + + var_04++; + } + + self setplayerdata("killstreaksState","nextIndex",var_04); + if(isdefined(self.killstreakindexweapon) && self.streaktype != "specialist") + { + self setplayerdata("killstreaksState","selectedIndex",self.killstreakindexweapon); + return; + } + + if(self.streaktype == "specialist" && self.pers["killstreaks"][0].available) + { + self setplayerdata("killstreaksState","selectedIndex",0); + return; + } + + self setplayerdata("killstreaksState","selectedIndex",-1); +} + +//Function Number: 12 +waitforchangeteam() +{ + self endon("disconnect"); + self endon("faux_spawn"); + self notify("waitForChangeTeam"); + self endon("waitForChangeTeam"); + for(;;) + { + self waittill("joined_team"); + clearkillstreaks(); + } +} + +//Function Number: 13 +isridekillstreak(param_00) +{ + switch(param_00) + { + case "helicopter_mk19": + case "helicopter_minigun": + case "remote_tank": + case "remote_uav": + case "remote_mortar": + case "osprey_gunner": + case "predator_missile": + case "ac130": + return 1; + + default: + return 0; + } +} + +//Function Number: 14 +iscarrykillstreak(param_00) +{ + switch(param_00) + { + case "deployable_exp_ammo": + case "gl_turret": + case "sentry_gl": + case "ims": + case "deployable_vest": + case "minigun_turret": + case "sentry": + return 1; + + default: + return 0; + } +} + +//Function Number: 15 +deadlykillstreak(param_00) +{ + switch(param_00) + { + case "harrier_airstrike": + case "helicopter_minigun": + case "littlebird_support": + case "remote_tank": + case "remote_mortar": + case "osprey_gunner": + case "stealth_airstrike": + case "littlebird_flock": + case "helicopter_flares": + case "predator_missile": + case "precision_airstrike": + case "ac130": + case "helicopter": + return 1; + } + + return 0; +} + +//Function Number: 16 +killstreakusepressed() +{ + var_00 = self.pers["killstreaks"][self.killstreakindexweapon].streakname; + var_01 = self.pers["killstreaks"][self.killstreakindexweapon].lifeid; + var_02 = self.pers["killstreaks"][self.killstreakindexweapon].earned; + var_03 = self.pers["killstreaks"][self.killstreakindexweapon].awardxp; + var_04 = self.pers["killstreaks"][self.killstreakindexweapon].kid; + var_05 = self.pers["killstreaks"][self.killstreakindexweapon].isgimme; + if(!self isonground() && isridekillstreak(var_00) || iscarrykillstreak(var_00)) + { + return 0; + } + + if(maps\mp\_utility::isusingremote()) + { + return 0; + } + + if(isdefined(self.selectinglocation)) + { + return 0; + } + + if(deadlykillstreak(var_00) && level.killstreakrounddelay && maps\mp\_utility::getgametypenumlives()) + { + if(level.graceperiod - level.ingraceperiod < level.killstreakrounddelay) + { + self iprintlnbold(&"MP_UNAVAILABLE_FOR_N",level.killstreakrounddelay - level.graceperiod - level.ingraceperiod); + return 0; + } + } + + if((level.teambased && level.teamemped[self.team]) || !level.teambased && isdefined(level.empplayer) && level.empplayer != self) + { + if(var_00 != "deployable_vest") + { + self iprintlnbold(&"MP_UNAVAILABLE_FOR_N_WHEN_EMP",level.emptimeremaining); + return 0; + } + } + + if(isdefined(self.nuked) && self.nuked) + { + if(var_00 != "deployable_vest") + { + self iprintlnbold(&"MP_UNAVAILABLE_FOR_N_WHEN_NUKE",level.nukeemptimeremaining); + return 0; + } + } + + if(self isusingturret() && isridekillstreak(var_00) || iscarrykillstreak(var_00)) + { + self iprintlnbold(&"MP_UNAVAILABLE_USING_TURRET"); + return 0; + } + + if(isdefined(self.laststand) && isridekillstreak(var_00)) + { + self iprintlnbold(&"MP_UNAVILABLE_IN_LASTSTAND"); + return 0; + } + + if(!common_scripts\utility::isweaponenabled()) + { + return 0; + } + + var_06 = 0; + if(maps\mp\_utility::_hasperk("specialty_explosivebullets") && !issubstr(var_00,"explosive_ammo")) + { + var_06 = 1; + } + + if(issubstr(var_00,"airdrop") || var_00 == "littlebird_flock") + { + if(!self [[ level.killstreakfuncs[var_00] ]](var_01,var_04)) + { + return 0; + } + } + else if(!self [[ level.killstreakfuncs[var_00] ]](var_01)) + { + return 0; + } + + if(var_06) + { + maps\mp\_utility::_unsetperk("specialty_explosivebullets"); + } + + thread updatekillstreaks(); + func_30BE(var_00,var_03); + return 1; +} + +//Function Number: 17 +func_30BE(param_00,param_01) +{ + self playlocalsound("weap_c4detpack_trigger_plr"); + if(param_01) + { + self thread [[ level.onxpevent ]]("killstreak_" + param_00); + thread maps\mp\gametypes\_missions::usehardpoint(param_00); + } + + var_02 = maps\mp\_awards::getkillstreakawardref(param_00); + if(isdefined(var_02)) + { + thread maps\mp\_utility::incplayerstat(var_02,1); + } + + if(isassaultkillstreak(param_00)) + { + thread maps\mp\_utility::incplayerstat("assaultkillstreaksused",1); + } + else if(issupportkillstreak(param_00)) + { + thread maps\mp\_utility::incplayerstat("supportkillstreaksused",1); + } + else if(isspecialistkillstreak(param_00)) + { + thread maps\mp\_utility::incplayerstat("specialistkillstreaksearned",1); + return; + } + + var_03 = self.team; + if(level.teambased) + { + thread maps\mp\_utility::leaderdialog(var_03 + "_friendly_" + param_00 + "_inbound",var_03); + if(getkillstreakinformenemy(param_00)) + { + thread maps\mp\_utility::leaderdialog(var_03 + "_enemy_" + param_00 + "_inbound",level.otherteam[var_03]); + return; + } + + return; + } + + thread maps\mp\_utility::leaderdialogonplayer(var_03 + "_friendly_" + param_00 + "_inbound"); + if(getkillstreakinformenemy(param_00)) + { + var_04[0] = self; + thread maps\mp\_utility::leaderdialog(var_03 + "_enemy_" + param_00 + "_inbound",undefined,undefined,var_04); + } +} + +//Function Number: 18 +updatekillstreaks(param_00) +{ + if(!isdefined(param_00)) + { + self.pers["killstreaks"][self.killstreakindexweapon].available = 0; + if(self.killstreakindexweapon == 0) + { + self.pers["killstreaks"][self.pers["killstreaks"][0].nextslot] = undefined; + var_01 = undefined; + for(var_02 = 5;var_02 < self.pers["killstreaks"].size;var_02++) + { + if(!isdefined(self.pers["killstreaks"][var_02]) || !isdefined(self.pers["killstreaks"][var_02].streakname)) + { + continue; + } + + var_01 = self.pers["killstreaks"][var_02].streakname; + self.pers["killstreaks"][0].nextslot = var_02; + } + + if(isdefined(var_01)) + { + self.pers["killstreaks"][0].available = 1; + self.pers["killstreaks"][0].streakname = var_01; + var_03 = getkillstreakindex(var_01); + self setplayerdata("killstreaksState","icons",0,var_03); + } + } + } + + var_04 = undefined; + if(self.streaktype == "specialist") + { + if(self.pers["killstreaks"][0].available) + { + var_04 = 0; + } + } + else + { + for(var_02 = 0;var_02 < 4;var_02++) + { + if(isdefined(self.pers["killstreaks"][var_02]) && isdefined(self.pers["killstreaks"][var_02].streakname) && self.pers["killstreaks"][var_02].available) + { + var_04 = var_02; + } + } + } + + if(isdefined(var_04)) + { + self.killstreakindexweapon = var_04; + self.pers["lastEarnedStreak"] = self.pers["killstreaks"][var_04].streakname; + giveselectedkillstreakitem(); + return; + } + + self.killstreakindexweapon = undefined; + self.pers["lastEarnedStreak"] = undefined; + updatestreakslots(); +} + +//Function Number: 19 +clearkillstreaks() +{ + for(var_00 = self.pers["killstreaks"].size - 1;var_00 > -1;var_00--) + { + if(isdefined(self.pers["killstreaks"][var_00])) + { + self.pers["killstreaks"][var_00] = undefined; + } + } + + initplayerkillstreaks(); + resetadrenaline(); + self.killstreakindexweapon = undefined; + updatestreakslots(); +} + +//Function Number: 20 +updatespecialistkillstreaks() +{ + if(self.adrenaline == 0) + { + for(var_00 = 1;var_00 < 4;var_00++) + { + if(isdefined(self.pers["killstreaks"][var_00])) + { + self.pers["killstreaks"][var_00].available = 0; + self setplayerdata("killstreaksState","hasStreak",var_00,0); + } + } + + self setplayerdata("killstreaksState","nextIndex",1); + self setplayerdata("killstreaksState","hasStreak",4,0); + } + else + { + for(var_00 = 1;var_00 < 4;var_00++) + { + if(isdefined(self.pers["killstreaks"][var_00]) && isdefined(self.pers["killstreaks"][var_00].streakname) && self.pers["killstreaks"][var_00].available) + { + var_01 = getstreakcost(self.pers["killstreaks"][var_00].streakname); + if(var_01 > self.adrenaline) + { + self.pers["killstreaks"][var_00].available = 0; + self setplayerdata("killstreaksState","hasStreak",var_00,0); + continue; + } + + if(self.adrenaline >= var_01) + { + if(self getplayerdata("killstreaksState","hasStreak",var_00)) + { + if(isdefined(level.killstreakfuncs[self.pers["killstreaks"][var_00].streakname])) + { + self [[ level.killstreakfuncs[self.pers["killstreaks"][var_00].streakname] ]](); + } + + continue; + } + + givekillstreak(self.pers["killstreaks"][var_00].streakname,self.pers["killstreaks"][var_00].earned,0,self,1); + } + } + } + + var_02 = 8; + if(maps\mp\_utility::_hasperk("specialty_hardline")) + { + var_02--; + } + + if(self.adrenaline >= var_02) + { + self setplayerdata("killstreaksState","hasStreak",4,1); + giveallperks(); + } + else + { + self setplayerdata("killstreaksState","hasStreak",4,0); + } + } + + if(self.pers["killstreaks"][0].available) + { + var_03 = self.pers["killstreaks"][0].streakname; + var_04 = getkillstreakweapon(var_03); + givekillstreakweapon(var_04); + self.killstreakindexweapon = 0; + } +} + +//Function Number: 21 +getfirstprimaryweapon() +{ + var_00 = self getweaponslistprimaries(); + return var_00[0]; +} + +//Function Number: 22 +usedkillstreak() +{ + self endon("disconnect"); + self endon("finish_death"); + self endon("joined_team"); + self endon("faux_spawn"); + level endon("game_ended"); + self notify("killstreakUseWaiter"); + self endon("killstreakUseWaiter"); + self.lastkillstreak = 0; + if(!isdefined(self.pers["lastEarnedStreak"])) + { + self.pers["lastEarnedStreak"] = undefined; + } + + thread finishdeathwaiter(); + for(;;) + { + self waittill("weapon_change",var_00); + if(!isalive(self)) + { + continue; + } + + if(!isdefined(self.killstreakindexweapon)) + { + continue; + } + + if(!isdefined(self.pers["killstreaks"][self.killstreakindexweapon]) || !isdefined(self.pers["killstreaks"][self.killstreakindexweapon].streakname)) + { + continue; + } + + var_01 = getkillstreakweapon(self.pers["killstreaks"][self.killstreakindexweapon].streakname); + if(var_00 != var_01) + { + if(maps\mp\_utility::isstrstart(var_00,"airdrop_")) + { + self takeweapon(var_00); + self switchtoweapon(self.lastdroppableweapon); + } + + continue; + } + + waittillframeend; + var_02 = self.pers["killstreaks"][self.killstreakindexweapon].streakname; + var_03 = self.pers["killstreaks"][self.killstreakindexweapon].isgimme; + var_04 = killstreakusepressed(); + var_05 = undefined; + if(!var_04 && !isalive(self) && !self hasweapon(common_scripts\utility::getlastweapon())) + { + var_05 = common_scripts\utility::getlastweapon(); + maps\mp\_utility::_giveweapon(var_05); + } + else if(!self hasweapon(common_scripts\utility::getlastweapon())) + { + var_05 = getfirstprimaryweapon(); + } + else + { + var_05 = common_scripts\utility::getlastweapon(); + } + + if(var_04) + { + thread waittakekillstreakweapon(var_01,var_05); + } + + if(shouldswitchweaponpostkillstreak(var_04,var_02)) + { + self switchtoweapon(var_05); + } + + if(self getcurrentweapon() == "none") + { + while(self getcurrentweapon() == "none") + { + wait 0.05; + } + + waittillframeend; + } + } +} + +//Function Number: 23 +waittakekillstreakweapon(param_00,param_01) +{ + self endon("disconnect"); + self endon("finish_death"); + self endon("joined_team"); + level endon("game_ended"); + self notify("waitTakeKillstreakWeapon"); + self endon("waitTakeKillstreakWeapon"); + var_02 = self getcurrentweapon() == "none"; + self waittill("weapon_change",var_03); + if(var_03 == param_01) + { + takekillstreakweaponifnodupe(param_00); + return; + } + + if(var_03 != param_00) + { + thread waittakekillstreakweapon(param_00,param_01); + return; + } + + if(var_02 && self getcurrentweapon() == param_00) + { + thread waittakekillstreakweapon(param_00,param_01); + return; + } +} + +//Function Number: 24 +takekillstreakweaponifnodupe(param_00) +{ + var_01 = 0; + for(var_02 = 0;var_02 < self.pers["killstreaks"].size;var_02++) + { + if(isdefined(self.pers["killstreaks"][var_02]) && isdefined(self.pers["killstreaks"][var_02].streakname) && self.pers["killstreaks"][var_02].available) + { + if(param_00 == getkillstreakweapon(self.pers["killstreaks"][var_02].streakname)) + { + var_01 = 1; + break; + } + } + } + + if(var_01) + { + if(isdefined(self.killstreakindexweapon) && param_00 != getkillstreakweapon(self.pers["killstreaks"][self.killstreakindexweapon].streakname)) + { + self takeweapon(param_00); + return; + } + + if(isdefined(self.killstreakindexweapon) && param_00 == getkillstreakweapon(self.pers["killstreaks"][self.killstreakindexweapon].streakname)) + { + self takeweapon(param_00); + maps\mp\_utility::_giveweapon(param_00,0); + maps\mp\_utility::_setactionslot(4,"weapon",param_00); + return; + } + + return; + } + + self takeweapon(param_00); +} + +//Function Number: 25 +shouldswitchweaponpostkillstreak(param_00,param_01) +{ + switch(param_01) + { + case "uav_strike": + if(!param_00) + { + return 0; + } + + break; + } + + if(!param_00) + { + return 1; + } + + if(isridekillstreak(param_01)) + { + return 0; + } + + return 1; +} + +//Function Number: 26 +finishdeathwaiter() +{ + self endon("disconnect"); + level endon("game_ended"); + self notify("finishDeathWaiter"); + self endon("finishDeathWaiter"); + self waittill("death"); + wait 0.05; + self notify("finish_death"); + self.pers["lastEarnedStreak"] = undefined; +} + +//Function Number: 27 +checkstreakreward() +{ + foreach(var_01 in self.killstreaks) + { + var_02 = getstreakcost(var_01); + if(var_02 > self.adrenaline) + { + break; + } + + if(self.previousadrenaline < var_02 && self.adrenaline >= var_02) + { + earnkillstreak(var_01,var_02); + break; + } + } +} + +//Function Number: 28 +getcustomclassloc() +{ + if(getdvarint("xblive_privatematch")) + { + return "privateMatchCustomClasses"; + } + + return "customClasses"; +} + +//Function Number: 29 +killstreakearned(param_00) +{ + var_01 = "assault"; + switch(self.streaktype) + { + case "assault": + var_01 = "assaultStreaks"; + break; + + case "support": + var_01 = "defenseStreaks"; + break; + + case "specialist": + var_01 = "specialistStreaks"; + break; + } + + if(isdefined(self.class_num)) + { + var_02 = getcustomclassloc(); + if(self getplayerdata(var_02,self.class_num,var_01,0) == param_00) + { + self.firstkillstreakearned = gettime(); + return; + } + + if(self getplayerdata(var_02,self.class_num,var_01,2) == param_00 && isdefined(self.firstkillstreakearned)) + { + if(gettime() - self.firstkillstreakearned < 20000) + { + thread maps\mp\gametypes\_missions::genericchallenge("wargasm"); + return; + } + + return; + } + } +} + +//Function Number: 30 +earnkillstreak(param_00,param_01) +{ + level notify("gave_killstreak",param_00); + self.earnedstreaklevel = param_01; + if(!level.gameended) + { + var_02 = undefined; + if(self.streaktype == "specialist") + { + var_03 = getsubstr(param_00,0,param_00.size - 3); + if(maps\mp\gametypes\_class::isperkupgraded(var_03)) + { + var_02 = "pro"; + } + } + + thread maps\mp\gametypes\_hud_message::killstreaksplashnotify(param_00,param_01,var_02); + } + + thread killstreakearned(param_00); + self.pers["lastEarnedStreak"] = param_00; + setstreakcounttonext(); + givekillstreak(param_00,1,1); +} + +//Function Number: 31 +givekillstreak(param_00,param_01,param_02,param_03,param_04) +{ + if(!isdefined(level.killstreakfuncs[param_00]) || tablelookup("mp/killstreakTable.csv",1,param_00,0) == "") + { + return; + } + + if(!isdefined(self.pers["killstreaks"])) + { + return; + } + + self endon("disconnect"); + if(!isdefined(param_04)) + { + param_04 = 0; + } + + var_05 = undefined; + if(!isdefined(param_01) || param_01 == 0) + { + var_06 = self.pers["killstreaks"].size; + if(!isdefined(self.pers["killstreaks"][var_06])) + { + self.pers["killstreaks"][var_06] = spawnstruct(); + } + + self.pers["killstreaks"][var_06].available = 0; + self.pers["killstreaks"][var_06].streakname = param_00; + self.pers["killstreaks"][var_06].earned = 0; + self.pers["killstreaks"][var_06].awardxp = isdefined(param_02) && param_02; + self.pers["killstreaks"][var_06].owner = param_03; + self.pers["killstreaks"][var_06].kid = self.pers["kID"]; + self.pers["killstreaks"][var_06].lifeid = -1; + self.pers["killstreaks"][var_06].isgimme = 1; + self.pers["killstreaks"][var_06].isspecialist = 0; + self.pers["killstreaks"][0].nextslot = var_06; + self.pers["killstreaks"][0].streakname = param_00; + var_05 = 0; + var_07 = getkillstreakindex(param_00); + self setplayerdata("killstreaksState","icons",0,var_07); + if(!param_04) + { + showselectedstreakhint(param_00); + } + } + else + { + for(var_08 = 1;var_08 < 4;var_08++) + { + if(isdefined(self.pers["killstreaks"][var_08]) && isdefined(self.pers["killstreaks"][var_08].streakname) && param_00 == self.pers["killstreaks"][var_08].streakname) + { + var_05 = var_08; + break; + } + } + + if(!isdefined(var_05)) + { + return; + } + } + + self.pers["killstreaks"][var_05].available = 1; + self.pers["killstreaks"][var_05].earned = isdefined(param_01) && param_01; + self.pers["killstreaks"][var_05].awardxp = isdefined(param_02) && param_02; + self.pers["killstreaks"][var_05].owner = param_03; + self.pers["killstreaks"][var_05].kid = self.pers["kID"]; + self.pers["kID"]++; + if(!self.pers["killstreaks"][var_05].earned) + { + self.pers["killstreaks"][var_05].lifeid = -1; + } + else + { + self.pers["killstreaks"][var_05].lifeid = self.pers["deaths"]; + } + + if(self.streaktype == "specialist" && var_05 != 0) + { + self.pers["killstreaks"][var_05].isspecialist = 1; + if(isdefined(level.killstreakfuncs[param_00])) + { + self [[ level.killstreakfuncs[param_00] ]](); + } + + func_30BE(param_00,param_02); + } + else + { + var_09 = getkillstreakweapon(param_00); + givekillstreakweapon(var_09); + if(isdefined(self.killstreakindexweapon)) + { + param_00 = self.pers["killstreaks"][self.killstreakindexweapon].streakname; + var_0A = getkillstreakweapon(param_00); + if(self getcurrentweapon() != var_0A) + { + self.killstreakindexweapon = var_05; + } + } + else + { + self.killstreakindexweapon = var_05; + } + } + + updatestreakslots(); + if(isdefined(level.killstreaksetupfuncs[param_00])) + { + self [[ level.killstreaksetupfuncs[param_00] ]](); + } + + if(isdefined(param_01) && param_01 && isdefined(param_02) && param_02) + { + self notify("received_earned_killstreak"); + } +} + +//Function Number: 32 +givekillstreakweapon(param_00) +{ + self endon("disconnect"); + var_01 = self getweaponslistitems(); + foreach(var_03 in var_01) + { + if(!maps\mp\_utility::isstrstart(var_03,"killstreak_") && !maps\mp\_utility::isstrstart(var_03,"airdrop_") && !maps\mp\_utility::isstrstart(var_03,"deployable_")) + { + continue; + } + + if(self getcurrentweapon() == var_03) + { + continue; + } + + while(maps\mp\_utility::ischangingweapon()) + { + wait 0.05; + } + + self takeweapon(var_03); + } + + if(isdefined(self.killstreakindexweapon)) + { + var_05 = self.pers["killstreaks"][self.killstreakindexweapon].streakname; + var_06 = getkillstreakweapon(var_05); + if(self getcurrentweapon() != var_06) + { + maps\mp\_utility::_giveweapon(param_00,0); + maps\mp\_utility::_setactionslot(4,"weapon",param_00); + return; + } + + return; + } + + maps\mp\_utility::_giveweapon(param_00,0); + maps\mp\_utility::_setactionslot(4,"weapon",param_00); +} + +//Function Number: 33 +getstreakcost(param_00) +{ + var_01 = int(tablelookup("mp/killstreakTable.csv",1,param_00,4)); + if(isdefined(self) && isplayer(self)) + { + if(isspecialistkillstreak(param_00)) + { + if(isdefined(self.pers["gamemodeLoadout"])) + { + if(isdefined(self.pers["gamemodeLoadout"]["loadoutKillstreak1"]) && self.pers["gamemodeLoadout"]["loadoutKillstreak1"] == param_00) + { + var_01 = 2; + } + else if(isdefined(self.pers["gamemodeLoadout"]["loadoutKillstreak2"]) && self.pers["gamemodeLoadout"]["loadoutKillstreak2"] == param_00) + { + var_01 = 4; + } + else if(isdefined(self.pers["gamemodeLoadout"]["loadoutKillstreak3"]) && self.pers["gamemodeLoadout"]["loadoutKillstreak3"] == param_00) + { + var_01 = 6; + } + else + { + } + } + else if(issubstr(self.curclass,"custom")) + { + var_02 = getcustomclassloc(); + for(var_03 = 0;var_03 < 3;var_03++) + { + var_04 = self getplayerdata(var_02,self.class_num,"specialistStreaks",var_03); + if(var_04 == param_00) + { + break; + } + } + + var_01 = self getplayerdata(var_02,self.class_num,"specialistStreakKills",var_03); + } + else if(issubstr(self.curclass,"axis") || issubstr(self.curclass,"allies")) + { + var_03 = 0; + var_05 = "none"; + if(issubstr(self.curclass,"axis")) + { + var_05 = "axis"; + } + else if(issubstr(self.curclass,"allies")) + { + var_05 = "allies"; + } + + var_06 = maps\mp\gametypes\_class::getclassindex(self.curclass); + while(var_03 < 3) + { + var_04 = getmatchrulesdata("defaultClasses",var_05,var_06,"class","specialistStreaks",var_03); + if(var_04 == param_00) + { + break; + } + + var_03++; + } + + var_01 = getmatchrulesdata("defaultClasses",var_05,var_06,"class","specialistStreakKills",var_03); + } + } + + if(maps\mp\_utility::_hasperk("specialty_hardline") && var_01 > 0) + { + var_01--; + } + } + + return var_01; +} + +//Function Number: 34 +isassaultkillstreak(param_00) +{ + switch(param_00) + { + case "littlebird_support": + case "airdrop_remote_tank": + case "remote_mortar": + case "ims": + case "osprey_gunner": + case "littlebird_flock": + case "helicopter_flares": + case "airdrop_juggernaut": + case "airdrop_sentry_minigun": + case "airdrop_assault": + case "predator_missile": + case "precision_airstrike": + case "uav": + case "ac130": + case "helicopter": + return 1; + + default: + return 0; + } +} + +//Function Number: 35 +issupportkillstreak(param_00) +{ + switch(param_00) + { + case "sam_turret": + case "remote_uav": + case "uav_support": + case "airdrop_juggernaut_recon": + case "remote_mg_turret": + case "deployable_vest": + case "escort_airdrop": + case "airdrop_trap": + case "stealth_airstrike": + case "counter_uav": + case "triple_uav": + case "emp": + return 1; + + default: + return 0; + } +} + +//Function Number: 36 +isspecialistkillstreak(param_00) +{ + switch(param_00) + { + case "all_perks_bonus": + case "specialty_stalker_ks": + case "specialty_quieter_ks": + case "specialty_bulletaccuracy_ks": + case "specialty_autospot_ks": + case "specialty_detectexplosive_ks": + case "_specialty_blastshield_ks": + case "specialty_assists_ks": + case "specialty_quickdraw_ks": + case "specialty_coldblooded_ks": + case "specialty_hardline_ks": + case "specialty_paint_ks": + case "specialty_blindeye_ks": + case "specialty_scavenger_ks": + case "specialty_fastreload_ks": + case "specialty_longersprint_ks": + return 1; + + default: + return 0; + } +} + +//Function Number: 37 +getkillstreakhint(param_00) +{ + return tablelookupistring("mp/killstreakTable.csv",1,param_00,6); +} + +//Function Number: 38 +getkillstreakinformenemy(param_00) +{ + return int(tablelookup("mp/killstreakTable.csv",1,param_00,11)); +} + +//Function Number: 39 +getkillstreaksound(param_00) +{ + return tablelookup("mp/killstreakTable.csv",1,param_00,7); +} + +//Function Number: 40 +getkillstreakdialog(param_00) +{ + return tablelookup("mp/killstreakTable.csv",1,param_00,8); +} + +//Function Number: 41 +getkillstreakweapon(param_00) +{ + return tablelookup("mp/killstreakTable.csv",1,param_00,12); +} + +//Function Number: 42 +getkillstreakicon(param_00) +{ + return tablelookup("mp/killstreakTable.csv",1,param_00,14); +} + +//Function Number: 43 +getkillstreakcrateicon(param_00) +{ + return tablelookup("mp/killstreakTable.csv",1,param_00,15); +} + +//Function Number: 44 +getkillstreakdpadicon(param_00) +{ + return tablelookup("mp/killstreakTable.csv",1,param_00,16); +} + +//Function Number: 45 +getkillstreakindex(param_00) +{ + return tablelookuprownum("mp/killstreakTable.csv",1,param_00) - 1; +} + +//Function Number: 46 +streaktyperesetsondeath(param_00) +{ + switch(param_00) + { + case "assault": + case "specialist": + return 1; + + case "support": + return 0; + } +} + +//Function Number: 47 +giveownedkillstreakitem(param_00) +{ + var_01 = -1; + var_02 = -1; + for(var_03 = 0;var_03 < 4;var_03++) + { + if(isdefined(self.pers["killstreaks"][var_03]) && isdefined(self.pers["killstreaks"][var_03].streakname) && self.pers["killstreaks"][var_03].available && getstreakcost(self.pers["killstreaks"][var_03].streakname) > var_02) + { + var_02 = 0; + if(!self.pers["killstreaks"][var_03].isgimme) + { + var_02 = getstreakcost(self.pers["killstreaks"][var_03].streakname); + } + + var_01 = var_03; + } + } + + if(var_01 != -1) + { + self.killstreakindexweapon = var_01; + var_04 = self.pers["killstreaks"][self.killstreakindexweapon].streakname; + var_05 = getkillstreakweapon(var_04); + givekillstreakweapon(var_05); + if(!isdefined(param_00) && !level.ingraceperiod) + { + showselectedstreakhint(var_04); + } + } + else + { + self.killstreakindexweapon = undefined; + } + + updatestreakslots(); +} + +//Function Number: 48 +initridekillstreak(param_00) +{ + common_scripts\utility::_disableusability(); + var_01 = initridekillstreak_internal(param_00); + if(isdefined(self)) + { + common_scripts\utility::_enableusability(); + } + + return var_01; +} + +//Function Number: 49 +initridekillstreak_internal(param_00) +{ + if(isdefined(param_00) && param_00 == "osprey_gunner" || param_00 == "remote_uav" || param_00 == "remote_tank") + { + var_01 = "timeout"; + } + else + { + var_01 = common_scripts\utility::waittill_any_timeout(1,"disconnect","death","weapon_switch_started"); + } + + maps\mp\gametypes\_hostmigration::waittillhostmigrationdone(); + if(var_01 == "weapon_switch_started") + { + return "fail"; + } + + if(!isalive(self)) + { + return "fail"; + } + + if(var_01 == "disconnect" || var_01 == "death") + { + if(var_01 == "disconnect") + { + return "disconnect"; + } + + if(self.team == "spectator") + { + return "fail"; + } + + return "success"; + } + + if(maps\mp\_utility::isemped() || maps\mp\_utility::isnuked() || maps\mp\_utility::isairdenied()) + { + return "fail"; + } + + self visionsetnakedforplayer("black_bw",0.75); + var_02 = common_scripts\utility::waittill_any_timeout(0.8,"disconnect","death"); + maps\mp\gametypes\_hostmigration::waittillhostmigrationdone(); + if(var_02 != "disconnect") + { + thread clearrideintro(1); + if(self.team == "spectator") + { + return "fail"; + } + } + + if(self isonladder()) + { + return "fail"; + } + + if(!isalive(self)) + { + return "fail"; + } + + if(maps\mp\_utility::isemped() || maps\mp\_utility::isnuked() || maps\mp\_utility::isairdenied()) + { + return "fail"; + } + + if(var_02 == "disconnect") + { + return "disconnect"; + } + + return "success"; +} + +//Function Number: 50 +clearrideintro(param_00) +{ + self endon("disconnect"); + if(isdefined(param_00)) + { + wait param_00; + } + + if(isdefined(level.nukedetonated)) + { + self visionsetnakedforplayer(level.nukevisionset,0); + return; + } + + self visionsetnakedforplayer("",0); +} + +//Function Number: 51 +giveselectedkillstreakitem() +{ + var_00 = self.pers["killstreaks"][self.killstreakindexweapon].streakname; + var_01 = getkillstreakweapon(var_00); + givekillstreakweapon(var_01); + updatestreakslots(); +} + +//Function Number: 52 +showselectedstreakhint(param_00) +{ + var_01 = spawnstruct(); + var_01.name = "selected_" + param_00; + var_01.type = "killstreak_minisplash"; + var_01.optionalnumber = getstreakcost(param_00); + var_01.leadersound = param_00; + var_01.leadersoundgroup = "killstreak_earned"; + var_01.slot = 0; + self.notifytext.alpha = 0; + self.notifytext2.alpha = 0; + self.notifyicon.alpha = 0; + thread maps\mp\gametypes\_hud_message::actionnotifymessage(var_01); +} + +//Function Number: 53 +getkillstreakcount() +{ + var_00 = 0; + for(var_01 = 0;var_01 < 4;var_01++) + { + if(isdefined(self.pers["killstreaks"][var_01]) && isdefined(self.pers["killstreaks"][var_01].streakname) && self.pers["killstreaks"][var_01].available) + { + var_00++; + } + } + + return var_00; +} + +//Function Number: 54 +shufflekillstreaksup() +{ + if(getkillstreakcount() > 1) + { + for(;;) + { + self.killstreakindexweapon++; + if(self.killstreakindexweapon > 3) + { + self.killstreakindexweapon = 0; + } + + if(self.pers["killstreaks"][self.killstreakindexweapon].available == 1) + { + break; + } + } + + giveselectedkillstreakitem(); + showselectedstreakhint(self.pers["killstreaks"][self.killstreakindexweapon].streakname); + } +} + +//Function Number: 55 +shufflekillstreaksdown() +{ + if(getkillstreakcount() > 1) + { + for(;;) + { + self.killstreakindexweapon--; + if(self.killstreakindexweapon < 0) + { + self.killstreakindexweapon = 3; + } + + if(self.pers["killstreaks"][self.killstreakindexweapon].available == 1) + { + break; + } + } + + giveselectedkillstreakitem(); + showselectedstreakhint(self.pers["killstreaks"][self.killstreakindexweapon].streakname); + } +} + +//Function Number: 56 +streakselectuptracker() +{ + self endon("death"); + self endon("disconnect"); + self endon("faux_spawn"); + level endon("game_ended"); + for(;;) + { + self waittill("toggled_up"); + if(!self ismantling() && !isdefined(self.changingweapon) || isdefined(self.changingweapon) && self.changingweapon == "none" && !maps\mp\_utility::iskillstreakweapon(self getcurrentweapon()) || maps\mp\_utility::iskillstreakweapon(self getcurrentweapon()) && maps\mp\_utility::isjuggernaut() && self.streaktype != "specialist" && !isdefined(self.iscarrying) || isdefined(self.iscarrying) && self.iscarrying == 0) + { + shufflekillstreaksup(); + } + + wait 0.12; + } +} + +//Function Number: 57 +streakselectdowntracker() +{ + self endon("death"); + self endon("disconnect"); + self endon("faux_spawn"); + level endon("game_ended"); + for(;;) + { + self waittill("toggled_down"); + if(!self ismantling() && !isdefined(self.changingweapon) || isdefined(self.changingweapon) && self.changingweapon == "none" && !maps\mp\_utility::iskillstreakweapon(self getcurrentweapon()) || maps\mp\_utility::iskillstreakweapon(self getcurrentweapon()) && maps\mp\_utility::isjuggernaut() && self.streaktype != "specialist" && !isdefined(self.iscarrying) || isdefined(self.iscarrying) && self.iscarrying == 0) + { + shufflekillstreaksdown(); + } + + wait 0.12; + } +} + +//Function Number: 58 +streaknotifytracker() +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + maps\mp\_utility::gameflagwait("prematch_done"); + self notifyonplayercommand("toggled_up","+actionslot 1"); + self notifyonplayercommand("toggled_down","+actionslot 2"); +} + +//Function Number: 59 +registeradrenalineinfo(param_00,param_01) +{ + if(!isdefined(level.adrenalineinfo)) + { + level.adrenalineinfo = []; + } + + level.adrenalineinfo[param_00] = param_01; +} + +//Function Number: 60 +giveadrenaline(param_00) +{ + if(level.adrenalineinfo[param_00] == 0) + { + return; + } + + var_01 = self.adrenaline + level.adrenalineinfo[param_00]; + var_02 = var_01; + var_03 = getmaxstreakcost(); + if(var_02 > var_03 && self.streaktype != "specialist") + { + var_02 = var_02 - var_03; + } + else if(level.killstreakrewards && var_02 > var_03 && self.streaktype == "specialist") + { + var_04 = 8; + if(maps\mp\_utility::_hasperk("specialty_hardline")) + { + var_04--; + } + + if(var_02 == var_04) + { + giveallperks(); + func_30BE("all_perks_bonus",1); + thread maps\mp\gametypes\_hud_message::killstreaksplashnotify("all_perks_bonus",var_04); + self setplayerdata("killstreaksState","hasStreak",4,1); + self.pers["killstreaks"][4].available = 1; + } + + if(var_03 > 0 && !var_02 - var_03 % 2) + { + thread maps\mp\gametypes\_rank::func_2F45(&"MP_SPECIALIST_STREAKING_XP"); + thread maps\mp\gametypes\_rank::giverankxp("kill"); + } + } + + setadrenaline(var_02); + checkstreakreward(); + if(var_01 == var_03 && self.streaktype != "specialist") + { + setadrenaline(0); + } +} + +//Function Number: 61 +giveallperks() +{ + var_00 = []; + foreach(var_02 in var_7B) + { + if(!maps\mp\_utility::_hasperk(var_02)) + { + maps\mp\_utility::giveperk(var_02,0); + if(maps\mp\gametypes\_class::isperkupgraded(var_02)) + { + var_03 = tablelookup("mp/perktable.csv",1,var_02,8); + maps\mp\_utility::giveperk(var_03,0); + } + } + } +} + +//Function Number: 62 +resetadrenaline() +{ + self.earnedstreaklevel = 0; + setadrenaline(0); + resetstreakcount(); + if(isdefined(self.pers["lastEarnedStreak"])) + { + self.pers["lastEarnedStreak"] = undefined; + } +} + +//Function Number: 63 +setadrenaline(param_00) +{ + if(param_00 < 0) + { + param_00 = 0; + } + + if(isdefined(self.adrenaline)) + { + self.previousadrenaline = self.adrenaline; + } + else + { + self.previousadrenaline = 0; + } + + self.adrenaline = param_00; + self setclientdvar("ui_adrenaline",self.adrenaline); + updatestreakcount(); +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/killstreaks/_mobilemortar.gsc b/MW3/PC/MP/maps/mp/killstreaks/_mobilemortar.gsc new file mode 100644 index 0000000..38c3bc4 --- /dev/null +++ b/MW3/PC/MP/maps/mp/killstreaks/_mobilemortar.gsc @@ -0,0 +1,660 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\killstreaks\_mobilemortar.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 16 + * Decompile Time: 314 ms + * Timestamp: 10/27/2023 2:14:22 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + precachemodel("vehicle_bradley"); + precachemodel("vehicle_bradley_destroyed"); + precacheshader("compass_objpoint_tank_friendly"); + precacheshader("compass_objpoint_tank_enemy"); + precacheshader("compass_objpoint_mortar_target"); + precachestring(&"KILLSTREAKS_MOBILE_MORTAR"); + precachestring(&"MP_GROUND_APPROACHES_TOO_CROWDED"); + precachestring(&"MP_SELECT_MOBILE_MORTAR_LOCATION"); + level.tankfire = loadfx("props/barrelexp"); + level.tankexplode = loadfx("explosions/large_vehicle_explosion"); + level.tankflash = loadfx("muzzleflashes/ac130_105mm"); + level.tankdust1 = loadfx("smoke/ground_smoke_launch_a"); + level.tankdust2 = loadfx("smoke/ground_smoke_launch_a"); + level.ground_support_locs = []; + level.ground_support_locs["mp_alpha"][0]["origin"] = (-2748.91,2921.33,125.394); + level.ground_support_locs["mp_alpha"][0]["angles"] = (0,16,0); + level.ground_support_locs["mp_alpha"][1]["origin"] = (707.795,-499.191,-7.875); + level.ground_support_locs["mp_alpha"][1]["angles"] = (0,90,0); + level.ground_support_locs["mp_alpha"][2]["origin"] = (81.8557,2343.87,-7.875); + level.ground_support_locs["mp_alpha"][2]["angles"] = (0,-90.1,0); + level.ground_support_locs["mp_bravo"][0]["origin"] = (-761.529,1221.7,1212.13); + level.ground_support_locs["mp_bravo"][0]["angles"] = (0,-92.373,0); + level.ground_support_locs["mp_bravo"][1]["origin"] = (1474.99,971.865,1140.13); + level.ground_support_locs["mp_bravo"][1]["angles"] = (0,-178.401,0); + level.ground_support_locs["mp_bravo"][2]["origin"] = (-1366.57,-370.995,975.807); + level.ground_support_locs["mp_bravo"][2]["angles"] = (0,0.807495,0); + level.ground_support_locs["mp_dome"][0]["origin"] = (960.279,-482.564,-388.872); + level.ground_support_locs["mp_dome"][0]["angles"] = (0,100.536,0); + level.ground_support_locs["mp_dome"][1]["origin"] = (-921.941,166.449,-418.131); + level.ground_support_locs["mp_dome"][1]["angles"] = (0,25.4524,0); + level.ground_support_locs["mp_dome"][2]["origin"] = (43.3564,2102.85,-290.875); + level.ground_support_locs["mp_dome"][2]["angles"] = (0,-95.0347,0); + level.ground_support_locs["mp_plaza2"][0]["origin"] = (-1579.34,-2349.41,556.125); + level.ground_support_locs["mp_plaza2"][0]["angles"] = (0,5.32288,0); + level.ground_support_locs["mp_plaza2"][1]["origin"] = (-135.286,1622.04,607.13); + level.ground_support_locs["mp_plaza2"][1]["angles"] = (0,173.639,0); + level.ground_support_locs["mp_plaza2"][2]["origin"] = (-1544.55,1966.84,632.024); + level.ground_support_locs["mp_plaza2"][2]["angles"] = (0,0.796509,0); + level.ground_support_locs["mp_radar"][0]["origin"] = (896.685,2692.74,1208.13); + level.ground_support_locs["mp_radar"][0]["angles"] = (0,-178.313,0); + level.ground_support_locs["mp_radar"][1]["origin"] = (-2455.87,1564.41,1308.9); + level.ground_support_locs["mp_radar"][1]["angles"] = (0,1.93471,0); + level.ground_support_locs["mp_radar"][2]["origin"] = (1609,-1098.99,1162.13); + level.ground_support_locs["mp_radar"][2]["angles"] = (0,170.421,0); + level.ground_support_locs["mp_interchange"][0]["origin"] = (-2067.08,1218.17,-82.0487); + level.ground_support_locs["mp_interchange"][0]["angles"] = (0,-26.2946,0); + level.ground_support_locs["mp_interchange"][1]["origin"] = (-1198.2,-1782.62,103.665); + level.ground_support_locs["mp_interchange"][1]["angles"] = (0,23.3544,0); + level.ground_support_locs["mp_interchange"][2]["origin"] = (2391.95,899.034,87.7839); + level.ground_support_locs["mp_interchange"][2]["angles"] = (0,-136.134,0); + level.ground_support_locs["mp_lambeth"][0]["origin"] = (1641.37,-1318.01,-260.173); + level.ground_support_locs["mp_lambeth"][0]["angles"] = (0,133.329,0); + level.ground_support_locs["mp_lambeth"][1]["origin"] = (-1346.56,-880.226,-191.875); + level.ground_support_locs["mp_lambeth"][1]["angles"] = (0,0.432892,0); + level.ground_support_locs["mp_lambeth"][2]["origin"] = (1403.95,3083.4,-287.354); + level.ground_support_locs["mp_lambeth"][2]["angles"] = (0,-106.321,0); + level.ground_support_locs["mp_paris"][0]["origin"] = (-2427.42,619.217,188.826); + level.ground_support_locs["mp_paris"][0]["angles"] = (0,-2.90588,0); + level.ground_support_locs["mp_paris"][1]["origin"] = (2066.95,796.542,-88.322); + level.ground_support_locs["mp_paris"][1]["angles"] = (0,177.292,0); + level.ground_support_locs["mp_paris"][2]["origin"] = (506.406,-2165.36,-64.1201); + level.ground_support_locs["mp_paris"][2]["angles"] = (0,89.5715,0); + level.ground_support_locs["mp_hardhat"][0]["origin"] = (2033.65,-1428.62,299.86); + level.ground_support_locs["mp_hardhat"][0]["angles"] = (0,177.979,0); + level.ground_support_locs["mp_hardhat"][1]["origin"] = (-1044.73,82.9179,181.022); + level.ground_support_locs["mp_hardhat"][1]["angles"] = (0,-2.68066,0); + level.ground_support_locs["mp_hardhat"][2]["origin"] = (1248.95,1322.56,304.125); + level.ground_support_locs["mp_hardhat"][2]["angles"] = (0,-93.4772,0); + level.ground_support_locs["mp_carbon"][0]["origin"] = (-47.1408,-2841.26,3940.01); + level.ground_support_locs["mp_carbon"][0]["angles"] = (0,-101.667,0); + level.ground_support_locs["mp_carbon"][1]["origin"] = (-1686.2,-4727.09,3756.16); + level.ground_support_locs["mp_carbon"][1]["angles"] = (0,87.6436,0); + level.ground_support_locs["mp_carbon"][2]["origin"] = (-3761.18,-3716.69,3568.91); + level.ground_support_locs["mp_carbon"][2]["angles"] = (0,-4.20761,0); + level.ground_support_locs["mp_seatown"][0]["origin"] = (1339.87,763.592,175.114); + level.ground_support_locs["mp_seatown"][0]["angles"] = (0,178.551,0); + level.ground_support_locs["mp_seatown"][1]["origin"] = (1317.92,-725.589,232.125); + level.ground_support_locs["mp_seatown"][1]["angles"] = (0,177.738,0); + level.ground_support_locs["mp_seatown"][2]["origin"] = (-961.699,-1581.56,144.125); + level.ground_support_locs["mp_seatown"][2]["angles"] = (0,90.0176,0); + level.ground_support_locs["mp_bootleg"][0]["origin"] = (-988.964,1833.74,-99.9509); + level.ground_support_locs["mp_bootleg"][0]["angles"] = (0,-78.8909,0); + level.ground_support_locs["mp_bootleg"][1]["origin"] = (1105.84,-1116.13,-72.3048); + level.ground_support_locs["mp_bootleg"][1]["angles"] = (0,176.558,0); + level.ground_support_locs["mp_bootleg"][2]["origin"] = (-2027.31,84.2235,-51.875); + level.ground_support_locs["mp_bootleg"][2]["angles"] = (0,-5.12868,0); + level.ground_support_locs["mp_meteora"][0]["origin"] = (-590.972,1667.65,-99.6187); + level.ground_support_locs["mp_meteora"][0]["angles"] = (0,-89.7745,0); + level.ground_support_locs["mp_meteora"][1]["origin"] = (-1371.02,-1095.66,4.125); + level.ground_support_locs["mp_meteora"][1]["angles"] = (0,179.879,0); + level.ground_support_locs["mp_meteora"][2]["origin"] = (938.851,-1376.99,-60.0877); + level.ground_support_locs["mp_meteora"][2]["angles"] = (0,110.545,0); + level.killstreakfuncs["mobile_mortar"] = ::tryusemobilemortar; +} + +//Function Number: 2 +tryusemobilemortar(param_00,param_01) +{ + if(!isdefined(level.ground_support_locs[level.script])) + { + self iprintlnbold(&"MP_UNAVAILABLE_IN_LEVEL"); + return 0; + } + + if(isdefined(self.laststand) && !maps\mp\_utility::_hasperk("specialty_finalstand")) + { + self iprintlnbold(&"MP_UNAVILABLE_IN_LASTSTAND"); + return 0; + } + else if(isdefined(level.mobilemortar)) + { + self iprintlnbold(&"MP_GROUND_APPROACHES_TOO_CROWDED"); + return 0; + } + else if(maps\mp\_utility::isusingremote()) + { + return 0; + } + + var_02 = selectentrancelocation(); + if(!isdefined(var_02)) + { + return 0; + } + else + { + thread maps\mp\_utility::stoplocationselection(0); + } + + var_03 = createmobilemortar(self,var_02); + if(!isdefined(var_03)) + { + return 0; + } + + var_03 thread movetoposition("entrance"); + return 1; +} + +//Function Number: 3 +selectentrancelocation() +{ + var_00 = undefined; + for(;;) + { + thread showicons(); + maps\mp\_utility::_beginlocationselection("mobile_mortar","map_artillery_selector",0,500); + self endon("stop_location_selection"); + self waittill("confirm_location",var_01); + for(var_02 = 0;var_02 < 3;var_02++) + { + var_03 = level.ground_support_locs[level.script][var_02]["origin"] * (1,1,0); + var_04 = distancesquared(var_01,var_03); + if(var_04 < -5536) + { + var_00 = var_02; + break; + } + } + + if(isdefined(var_00)) + { + for(var_02 = 0;var_02 < 3;var_02++) + { + if(var_02 == var_00) + { + objective_icon(self.locationobjectives[var_02],"compass_objpoint_mortar_target"); + continue; + } + + objective_state(self.locationobjectives[var_02],"invisible"); + } + } + else + { + for(var_02 = 0;var_02 < 3;var_02++) + { + objective_icon(self.locationobjectives[var_02],"compass_objpoint_tank_enemy"); + } + } + + wait 0.5; + self notify("picked_location"); + wait 0.05; + if(isdefined(var_00)) + { + break; + } + } + + return var_00; +} + +//Function Number: 4 +showicons() +{ + var_00 = maps\mp\gametypes\_hud_util::createfontstring("bigfixed",0.5); + var_00 maps\mp\gametypes\_hud_util::setpoint("CENTER","CENTER",0,-150); + var_00 settext(&"MP_SELECT_MOBILE_MORTAR_LOCATION"); + self.locationobjectives = []; + for(var_01 = 0;var_01 < 3;var_01++) + { + self.locationobjectives[var_01] = maps\mp\gametypes\_gameobjects::getnextobjid(); + objective_add(self.locationobjectives[var_01],"invisible",(0,0,0)); + objective_position(self.locationobjectives[var_01],level.ground_support_locs[level.script][var_01]["origin"]); + objective_state(self.locationobjectives[var_01],"active"); + objective_team(self.locationobjectives[var_01],self.team); + objective_icon(self.locationobjectives[var_01],"compass_objpoint_tank_friendly"); + } + + common_scripts\utility::waittill_any("cancel_location","picked_location","stop_location_selection"); + var_00 maps\mp\gametypes\_hud_util::destroyelem(); + for(var_01 = 0;var_01 < 3;var_01++) + { + maps\mp\_utility::_objective_delete(self.locationobjectives[var_01]); + } +} + +//Function Number: 5 +createmobilemortar(param_00,param_01) +{ + var_02 = maps\mp\killstreaks\_airdrop::getflyheightoffset(level.ground_support_locs[level.script][param_01]["origin"]); + var_03 = bullettrace(level.ground_support_locs[level.script][param_01]["origin"] + (0,0,var_02),level.ground_support_locs[level.script][param_01]["origin"] - (0,0,var_02),0); + var_04 = var_03["position"] + anglestoforward(level.ground_support_locs[level.script][param_01]["angles"]) * -1000; + var_05 = spawn("script_model",var_04); + if(!isdefined(var_05)) + { + return undefined; + } + + var_05.angles = level.ground_support_locs[level.script][param_01]["angles"]; + var_05 setmodel("vehicle_bradley"); + var_05 setcandamage(1); + var_05.maxhealth = level.heli_maxhealth * 2; + var_05.health = var_05.maxhealth; + var_05.owner = param_00; + var_05.playersattacked = []; + var_05.lasttarget = var_05.origin; + if(level.teambased) + { + var_05.team = param_00.team; + } + + var_05.lowx = level.spawnpoints[0].origin[0]; + var_05.highx = level.spawnpoints[0].origin[0]; + var_05.lowy = level.spawnpoints[0].origin[1]; + var_05.highy = level.spawnpoints[0].origin[1]; + var_06 = 200; + if(level.spawnpoints.size > 1) + { + for(var_07 = 1;var_07 < level.spawnpoints.size;var_07++) + { + if(level.spawnpoints[var_07].origin[0] < var_05.lowx) + { + var_05.lowx = level.spawnpoints[var_07].origin[0]; + } + else if(level.spawnpoints[var_07].origin[0] > var_05.highx) + { + var_05.highx = level.spawnpoints[var_07].origin[0]; + } + + if(level.spawnpoints[var_07].origin[1] < var_05.lowy) + { + var_05.lowy = level.spawnpoints[var_07].origin[1]; + continue; + } + + if(level.spawnpoints[var_07].origin[1] > var_05.highy) + { + var_05.highy = level.spawnpoints[var_07].origin[1]; + } + } + } + else + { + var_06 = -2000; + } + + var_05.lowx = var_05.lowx + var_06; + var_05.highx = var_05.highx - var_06; + var_05.lowy = var_05.lowy + var_06; + var_05.highy = var_05.highy - var_06; + if(level.teambased) + { + var_08 = maps\mp\gametypes\_gameobjects::getnextobjid(); + objective_add(var_08,"invisible",(0,0,0)); + objective_position(var_08,var_03["position"]); + objective_state(var_08,"active"); + objective_team(var_08,var_05.team); + objective_icon(var_08,"compass_objpoint_tank_friendly"); + var_05.objidfriendly = var_08; + var_08 = maps\mp\gametypes\_gameobjects::getnextobjid(); + objective_add(var_08,"invisible",(0,0,0)); + objective_position(var_08,var_03["position"]); + objective_state(var_08,"active"); + objective_team(var_08,level.otherteam[var_05.team]); + objective_icon(var_08,"compass_objpoint_tank_enemy"); + var_05.objidenemy = var_08; + } + + var_05 thread watchtimeout(); + var_05 thread maps\mp\killstreaks\_helicopter::heli_damage_monitor(); + var_05 thread watchdeath(); + var_05 thread watchproximity(); + level.mobilemortar = var_05; + return var_05; +} + +//Function Number: 6 +movetoposition(param_00) +{ + level endon("game_ended"); + self endon("death"); + if(param_00 == "entrance") + { + var_01 = self.origin + anglestoforward(self.angles) * 1000; + } + else + { + self notify("leaving"); + var_01 = self.origin + anglestoforward(self.angles) * -1000; + } + + var_02 = 3; + self moveto(var_01,var_02,var_02 * 0.6,var_02 * 0.4); + wait var_02; + if(param_00 == "entrance") + { + thread mortarattack(); + return; + } + + stopfxontag(level.tankdust1,self.fxent,"tag_origin"); + stopfxontag(level.tankdust2,self.fxent,"tag_origin"); + self.fxent delete(); + maps\mp\_utility::_objective_delete(self.objidfriendly); + maps\mp\_utility::_objective_delete(self.objidenemy); + level.mobilemortar = undefined; + self delete(); +} + +//Function Number: 7 +findtarget() +{ + var_00 = undefined; + foreach(var_02 in level.players) + { + if(var_02 == self.owner) + { + continue; + } + + if(var_02 maps\mp\_utility::_hasperk("specialty_blindeye")) + { + continue; + } + + if(level.teambased && var_02.team == self.owner.team) + { + continue; + } + + if(distancesquared(self.origin,var_02.origin) < 1000000) + { + continue; + } + + for(var_03 = 0;var_03 < self.playersattacked.size;var_03++) + { + if(var_02 == self.playersattacked[var_03]) + { + continue; + } + } + + if(distancesquared(var_02.origin,self.lasttarget) < 500000) + { + continue; + } + + if(level.teambased) + { + var_04 = 0; + for(var_03 = 0;var_03 < level.players.size;var_03++) + { + if(level.players[var_03].team != var_02.team && distancesquared(var_02.origin,level.players[var_03].origin) < 250000) + { + var_04 = 1; + break; + } + } + + if(var_04 == 1) + { + continue; + } + } + + wait 0.05; + var_05 = bullettrace(var_02.origin + (0,0,var_02 maps\mp\killstreaks\_airdrop::getflyheightoffset(var_02.origin)),var_02.origin + (0,0,100),0); + if(var_05["surfacetype"] != "none") + { + continue; + } + + var_00 = var_02.origin; + self.lasttarget = var_02.origin; + self.playersattacked[self.playersattacked.size] = var_02; + break; + } + + return var_00; +} + +//Function Number: 8 +findrandomtarget() +{ + var_00 = undefined; + for(var_01 = 0;var_01 < 20;var_01++) + { + var_02 = (randomfloatrange(self.lowx,self.highx),randomfloatrange(self.lowy,self.highy),0); + if(distancesquared(self.origin * (1,1,0),var_02) < 1000000) + { + continue; + } + + if(distancesquared(self.owner.origin * (1,1,0),var_02) < 250000) + { + continue; + } + + if(distancesquared(self.origin * (1,1,0),self.lasttarget) < 500000) + { + continue; + } + + var_03 = 0; + if(level.teambased) + { + foreach(var_05 in level.players) + { + if(var_05.team == self.owner.team && distancesquared(var_05.origin * (1,1,0),var_02) < 250000) + { + var_03 = 1; + break; + } + } + } + + if(var_03 == 0) + { + var_00 = var_02; + self.lasttarget = var_02; + break; + } + } + + if(!isdefined(var_00)) + { + var_00 = (randomfloatrange(self.lowx,self.highx),randomfloatrange(self.lowy,self.highy),0); + } + + return var_00; +} + +//Function Number: 9 +mortarattack() +{ + level endon("game_ended"); + self endon("death"); + self endon("leaving"); + var_00 = 0; + self.fxent = spawn("script_model",self.origin); + self.fxent setmodel("tag_origin"); + self.fxent.angles = self.angles; + self.fxent addpitch(-90); + for(;;) + { + var_01 = findtarget(); + if(!isdefined(var_01)) + { + var_01 = findrandomtarget(); + } + + var_02 = self.origin[2] + 3500; + var_03 = bullettrace(var_01 + (0,0,var_02),var_01 - (0,0,var_02),0); + var_04 = var_01 + (0,0,var_02); + var_05 = var_01 + (0,0,var_03["position"][2]); + self playsound("bmp_fire"); + playfx(level.tankflash,self.origin + anglestoforward(self.angles) * 50); + if(var_00 < 3) + { + playfxontag(level.tankdust1,self.fxent,"tag_origin"); + playfxontag(level.tankdust2,self.fxent,"tag_origin"); + var_00++; + } + + thread mortarrecoil(); + level thread firemortar(self,var_04,var_05); + self waittill("mortar_fire_done"); + wait 2.5; + } +} + +//Function Number: 10 +firemortar(param_00,param_01,param_02) +{ + level endon("game_ended"); + var_03 = param_00.owner; + var_04 = magicbullet("javelin_mp",param_00.origin + (0,0,150),param_01,var_03); + var_05 = maps\mp\gametypes\_gameobjects::getnextobjid(); + objective_add(var_05,"invisible",(0,0,0)); + objective_position(var_05,param_02); + objective_state(var_05,"active"); + objective_team(var_05,param_00.team); + objective_icon(var_05,"compass_objpoint_mortar_target"); + var_04.objidfriendly = var_05; + var_06 = maps\mp\gametypes\_gameobjects::getnextobjid(); + objective_add(var_06,"invisible",(0,0,0)); + objective_position(var_06,param_02); + objective_state(var_06,"active"); + objective_team(var_06,level.otherteam[param_00.team]); + objective_icon(var_06,"compass_objpoint_mortar_target"); + var_04.objidenemy = var_06; + var_07 = 0; + for(;;) + { + if(!isdefined(var_04) || var_07 > 115 || distancesquared(var_04.origin,param_01) < 500) + { + break; + } + else + { + wait 0.05; + } + + var_07++; + } + + if(isdefined(var_04)) + { + var_04 delete(); + } + + if(isdefined(var_03)) + { + var_08 = magicbullet("javelin_mp",param_01 + (0,0,200),param_02,var_03); + } + else + { + var_08 = magicbullet("javelin_mp",param_02 + (0,0,200),var_03); + } + + var_08.objidfriendly = var_05; + var_08.objidenemy = var_06; + var_08 thread watchprojectileonminimap(param_00); +} + +//Function Number: 11 +watchprojectileonminimap(param_00) +{ + level endon("game_ended"); + self waittill("death"); + maps\mp\_utility::_objective_delete(self.objidfriendly); + maps\mp\_utility::_objective_delete(self.objidenemy); + if(isdefined(param_00)) + { + param_00 notify("mortar_fire_done"); + } +} + +//Function Number: 12 +mortarrecoil() +{ + level endon("game_ended"); + self endon("death"); + self endon("leaving"); + var_00 = self.origin + anglestoforward(self.angles) * -20; + var_01 = self.origin; + var_02 = self.angles; + self moveto(var_00,0.1); + self rotatepitch(-3,0.1); + wait 0.1; + self moveto(var_01,0.15); + self rotateto(var_02,0.15); + wait 0.15; +} + +//Function Number: 13 +watchtimeout() +{ + level endon("game_ended"); + self endon("death"); + maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause(90); + self setcandamage(0); + thread movetoposition("exit"); +} + +//Function Number: 14 +watchproximity() +{ + level endon("game_ended"); + self endon("death"); + self endon("leaving"); + for(;;) + { + radiusdamage(self.origin,200,20,20); + wait 1; + } +} + +//Function Number: 15 +watchdeath() +{ + level endon("game_ended"); + self endon("leaving"); + self waittill("death"); + playfx(level.tankfire,self.origin); + playfx(level.tankexplode,self.origin); + var_00 = spawn("script_model",self.origin); + var_00 setmodel("vehicle_bradley_destroyed"); + var_00.angles = self.angles; + stopfxontag(level.tankdust1,self.fxent,"tag_origin"); + stopfxontag(level.tankdust2,self.fxent,"tag_origin"); + maps\mp\_utility::_objective_delete(self.objidfriendly); + maps\mp\_utility::_objective_delete(self.objidenemy); + self.fxent delete(); + self delete(); + wait 3.5; + var_00 delete(); + level.mobilemortar = undefined; +} + +//Function Number: 16 +watchdamage() +{ + level endon("game_ended"); + self endon("death"); + for(;;) + { + self waittill("damage",var_00,var_01,var_02,var_03,var_04); + if(self.health < 0) + { + break; + } + } +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/killstreaks/_nuke.gsc b/MW3/PC/MP/maps/mp/killstreaks/_nuke.gsc new file mode 100644 index 0000000..870965d --- /dev/null +++ b/MW3/PC/MP/maps/mp/killstreaks/_nuke.gsc @@ -0,0 +1,403 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\killstreaks\_nuke.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 20 + * Decompile Time: 362 ms + * Timestamp: 10/27/2023 2:14:23 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + precacheitem("nuke_mp"); + precachelocationselector("map_nuke_selector"); + precachestring(&"MP_TACTICAL_NUKE_CALLED"); + precachestring(&"MP_FRIENDLY_TACTICAL_NUKE"); + precachestring(&"MP_TACTICAL_NUKE"); + level.nukevisionset = "aftermath"; + level._effect["nuke_player"] = loadfx("explosions/player_death_nuke"); + level._effect["nuke_flash"] = loadfx("explosions/player_death_nuke_flash"); + level._effect["nuke_aftermath"] = loadfx("dust/nuke_aftermath_mp"); + game["strings"]["nuclear_strike"] = &"MP_TACTICAL_NUKE"; + level.killstreakfuncs["nuke"] = ::tryusenuke; + setdvarifuninitialized("scr_nukeTimer",10); + setdvarifuninitialized("scr_nukeCancelMode",0); + level.nuketimer = getdvarint("scr_nukeTimer"); + level.cancelmode = getdvarint("scr_nukeCancelMode"); + level.teamnukeemped["allies"] = 0; + level.teamnukeemped["axis"] = 0; + level.nukeemptimeout = 60; + level.nukeemptimeremaining = int(level.nukeemptimeout); + level.nukeinfo = spawnstruct(); + level.nukeinfo.var_36 = 2; + level.nukedetonated = undefined; + level thread nuke_empteamtracker(); + level thread onplayerconnect(); +} + +//Function Number: 2 +tryusenuke(param_00,param_01) +{ + if(isdefined(level.nukeincoming)) + { + self iprintlnbold(&"MP_NUKE_ALREADY_INBOUND"); + return 0; + } + + if(maps\mp\_utility::isusingremote() && !isdefined(level.gtnw) || !level.gtnw) + { + return 0; + } + + if(!isdefined(param_01)) + { + param_01 = 1; + } + + thread donuke(param_01); + self notify("used_nuke"); + maps\mp\_matchdata::logkillstreakevent("nuke",self.origin); + return 1; +} + +//Function Number: 3 +delaythread_nuke(param_00,param_01) +{ + level endon("nuke_cancelled"); + maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause(param_00); + thread [[ param_01 ]](); +} + +//Function Number: 4 +donuke(param_00) +{ + level endon("nuke_cancelled"); + level.nukeinfo.player = self; + level.nukeinfo.team = self.pers["team"]; + level.nukeincoming = 1; + setdvar("ui_bomb_timer",4); + if(level.teambased) + { + thread maps\mp\_utility::teamplayercardsplash("used_nuke",self,self.team); + } + else if(!level.hardcoremode) + { + self iprintlnbold(&"MP_FRIENDLY_TACTICAL_NUKE"); + } + + level thread delaythread_nuke(level.nuketimer - 3.3,::nukesoundincoming); + level thread delaythread_nuke(level.nuketimer,::nukesoundexplosion); + level thread delaythread_nuke(level.nuketimer,::nukeslowmo); + level thread delaythread_nuke(level.nuketimer,::nukeeffects); + level thread delaythread_nuke(level.nuketimer + 0.25,::nukevision); + level thread delaythread_nuke(level.nuketimer + 1.5,::nukedeath); + level thread delaythread_nuke(level.nuketimer + 1.5,::nukeearthquake); + level thread nukeaftermatheffect(); + level thread update_ui_timers(); + if(level.cancelmode && param_00) + { + level thread cancelnukeondeath(self); + } + + if(!isdefined(level.nuke_clockobject)) + { + level.nuke_clockobject = spawn("script_origin",(0,0,0)); + level.nuke_clockobject hide(); + } + + if(!isdefined(level.nuke_soundobject)) + { + level.nuke_soundobject = spawn("script_origin",(0,0,1)); + level.nuke_soundobject hide(); + } + + for(var_01 = level.nuketimer;var_01 > 0;var_01--) + { + level.nuke_clockobject playsound("ui_mp_nukebomb_timer"); + wait 1; + } +} + +//Function Number: 5 +cancelnukeondeath(param_00) +{ + param_00 common_scripts\utility::waittill_any("death","disconnect"); + if(isdefined(param_00) && level.cancelmode == 2) + { + param_00 thread maps\mp\killstreaks\_emp::emp_use(0,0); + } + + setdvar("ui_bomb_timer",0); + level.nukeincoming = undefined; + level notify("nuke_cancelled"); +} + +//Function Number: 6 +nukesoundincoming() +{ + level endon("nuke_cancelled"); + if(isdefined(level.nuke_soundobject)) + { + level.nuke_soundobject playsound("nuke_incoming"); + } +} + +//Function Number: 7 +nukesoundexplosion() +{ + level endon("nuke_cancelled"); + if(isdefined(level.nuke_soundobject)) + { + level.nuke_soundobject playsound("nuke_explosion"); + level.nuke_soundobject playsound("nuke_wave"); + } +} + +//Function Number: 8 +nukeeffects() +{ + level endon("nuke_cancelled"); + setdvar("ui_bomb_timer",0); + level.nukedetonated = 1; + foreach(var_01 in level.players) + { + var_02 = anglestoforward(var_01.angles); + var_02 = (var_02[0],var_02[1],0); + var_02 = vectornormalize(var_02); + var_03 = 5000; + var_04 = spawn("script_model",var_01.origin + var_02 * var_03); + var_04 setmodel("tag_origin"); + var_04.angles = (0,var_01.angles[1] + 180,90); + var_04 thread nukeeffect(var_01); + } +} + +//Function Number: 9 +nukeeffect(param_00) +{ + level endon("nuke_cancelled"); + param_00 endon("disconnect"); + common_scripts\utility::waitframe(); + playfxontagforclients(level._effect["nuke_flash"],self,"tag_origin",param_00); +} + +//Function Number: 10 +nukeaftermatheffect() +{ + level endon("nuke_cancelled"); + level waittill("spawning_intermission"); + var_00 = getentarray("mp_global_intermission","classname"); + var_00 = var_00[0]; + var_01 = anglestoup(var_00.angles); + var_02 = anglestoright(var_00.angles); + playfx(level._effect["nuke_aftermath"],var_00.origin,var_01,var_02); +} + +//Function Number: 11 +nukeslowmo() +{ + level endon("nuke_cancelled"); + setslowmotion(1,0.25,0.5); + level waittill("nuke_death"); + setslowmotion(0.25,1,2); +} + +//Function Number: 12 +nukevision() +{ + level endon("nuke_cancelled"); + level.nukevisioninprogress = 1; + visionsetnaked("mpnuke",3); + level waittill("nuke_death"); + visionsetnaked(level.nukevisionset,5); + visionsetpain(level.nukevisionset); +} + +//Function Number: 13 +nukedeath() +{ + level endon("nuke_cancelled"); + level notify("nuke_death"); + maps\mp\gametypes\_hostmigration::waittillhostmigrationdone(); + ambientstop(1); + foreach(var_01 in level.players) + { + if(level.teambased) + { + if(isdefined(level.nukeinfo.team) && var_01.team == level.nukeinfo.team) + { + continue; + } + } + else if(isdefined(level.nukeinfo.player) && var_01 == level.nukeinfo.player) + { + continue; + } + + var_01.nuked = 1; + if(isalive(var_01)) + { + var_01 thread maps\mp\gametypes\_damage::finishplayerdamagewrapper(level.nukeinfo.player,level.nukeinfo.player,999999,0,"MOD_EXPLOSIVE","nuke_mp",var_01.origin,var_01.origin,"none",0,0); + } + } + + level thread nuke_empjam(); + level.nukeincoming = undefined; +} + +//Function Number: 14 +nukeearthquake() +{ + level endon("nuke_cancelled"); + level waittill("nuke_death"); +} + +//Function Number: 15 +nuke_empjam() +{ + level endon("game_ended"); + level maps\mp\killstreaks\_emp::func_35BE(level.nukeinfo.player,maps\mp\_utility::getotherteam(level.nukeinfo.team)); + level notify("nuke_EMPJam"); + level endon("nuke_EMPJam"); + if(level.teambased) + { + level.teamnukeemped[maps\mp\_utility::getotherteam(level.nukeinfo.team)] = 1; + } + else + { + level.teamnukeemped[level.nukeinfo.team] = 1; + level.teamnukeemped[maps\mp\_utility::getotherteam(level.nukeinfo.team)] = 1; + } + + level notify("nuke_emp_update"); + level thread keepnukeemptimeremaining(); + maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause(level.nukeemptimeout); + if(level.teambased) + { + level.teamnukeemped[maps\mp\_utility::getotherteam(level.nukeinfo.team)] = 0; + } + else + { + level.teamnukeemped[level.nukeinfo.team] = 0; + level.teamnukeemped[maps\mp\_utility::getotherteam(level.nukeinfo.team)] = 0; + } + + foreach(var_01 in level.players) + { + if(level.teambased && var_01.team == level.nukeinfo.team) + { + continue; + } + + var_01.nuked = undefined; + } + + level notify("nuke_emp_update"); + level notify("nuke_emp_ended"); +} + +//Function Number: 16 +keepnukeemptimeremaining() +{ + level notify("keepNukeEMPTimeRemaining"); + level endon("keepNukeEMPTimeRemaining"); + level endon("nuke_emp_ended"); + level.nukeemptimeremaining = int(level.nukeemptimeout); + while(level.nukeemptimeremaining) + { + wait 1; + level.nukeemptimeremaining--; + } +} + +//Function Number: 17 +nuke_empteamtracker() +{ + level endon("game_ended"); + for(;;) + { + level common_scripts\utility::waittill_either("joined_team","nuke_emp_update"); + foreach(var_01 in level.players) + { + if(var_01.team == "spectator") + { + continue; + } + + if(level.teambased) + { + if(isdefined(level.nukeinfo.team) && var_01.team == level.nukeinfo.team) + { + continue; + } + } + else if(isdefined(level.nukeinfo.player) && var_01 == level.nukeinfo.player) + { + continue; + } + + if(!level.teamnukeemped[var_01.team] && !var_01 maps\mp\_utility::isemped()) + { + var_01 setempjammed(0); + continue; + } + + var_01 setempjammed(1); + } + } +} + +//Function Number: 18 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_00 thread onplayerspawned(); + } +} + +//Function Number: 19 +onplayerspawned() +{ + self endon("disconnect"); + for(;;) + { + self waittill("spawned_player"); + if(level.teamnukeemped[self.team]) + { + if(level.teambased) + { + self setempjammed(1); + } + else if(!isdefined(level.nukeinfo.player) || isdefined(level.nukeinfo.player) && self != level.nukeinfo.player) + { + self setempjammed(1); + } + } + + if(isdefined(level.nukedetonated)) + { + self visionsetnakedforplayer(level.nukevisionset,0); + } + } +} + +//Function Number: 20 +update_ui_timers() +{ + level endon("game_ended"); + level endon("disconnect"); + level endon("nuke_cancelled"); + level endon("nuke_death"); + var_00 = level.nuketimer * 1000 + gettime(); + setdvar("ui_nuke_end_milliseconds",var_00); + level waittill("host_migration_begin"); + var_01 = maps\mp\gametypes\_hostmigration::waittillhostmigrationdone(); + if(var_01 > 0) + { + setdvar("ui_nuke_end_milliseconds",var_00 + var_01); + } +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/killstreaks/_perkstreaks.gsc b/MW3/PC/MP/maps/mp/killstreaks/_perkstreaks.gsc new file mode 100644 index 0000000..90988d9 --- /dev/null +++ b/MW3/PC/MP/maps/mp/killstreaks/_perkstreaks.gsc @@ -0,0 +1,178 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\killstreaks\_perkstreaks.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 22 + * Decompile Time: 402 ms + * Timestamp: 10/27/2023 2:14:24 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level.killstreakfuncs["specialty_longersprint_ks"] = ::tryuseextremeconditioning; + level.killstreakfuncs["specialty_fastreload_ks"] = ::tryusesleightofhand; + level.killstreakfuncs["specialty_scavenger_ks"] = ::tryusescavenger; + level.killstreakfuncs["specialty_blindeye_ks"] = ::tryuseblindeye; + level.killstreakfuncs["specialty_paint_ks"] = ::tryusepaint; + level.killstreakfuncs["specialty_hardline_ks"] = ::tryusehardline; + level.killstreakfuncs["specialty_coldblooded_ks"] = ::tryusecoldblooded; + level.killstreakfuncs["specialty_quickdraw_ks"] = ::tryusequickdraw; + level.killstreakfuncs["specialty_assists_ks"] = ::tryuseassists; + level.killstreakfuncs["_specialty_blastshield_ks"] = ::tryuseblastshield; + level.killstreakfuncs["specialty_detectexplosive_ks"] = ::tryusesitrep; + level.killstreakfuncs["specialty_autospot_ks"] = ::tryuseironlungs; + level.killstreakfuncs["specialty_bulletaccuracy_ks"] = ::tryusesteadyaim; + level.killstreakfuncs["specialty_quieter_ks"] = ::tryusedeadsilence; + level.killstreakfuncs["specialty_stalker_ks"] = ::tryusestalker; + level.killstreakfuncs["all_perks_bonus"] = ::tryuseallperks; +} + +//Function Number: 2 +tryuseallperks() +{ +} + +//Function Number: 3 +tryuseblindeye(param_00) +{ + doperkfunctions("specialty_blindeye"); +} + +//Function Number: 4 +tryusepaint(param_00) +{ + doperkfunctions("specialty_paint"); +} + +//Function Number: 5 +tryuseassists(param_00) +{ + doperkfunctions("specialty_assists"); +} + +//Function Number: 6 +tryusesteadyaim(param_00) +{ + doperkfunctions("specialty_bulletaccuracy"); +} + +//Function Number: 7 +tryusestalker(param_00) +{ + doperkfunctions("specialty_stalker"); +} + +//Function Number: 8 +tryuseextremeconditioning(param_00) +{ + doperkfunctions("specialty_longersprint"); +} + +//Function Number: 9 +tryusesleightofhand(param_00) +{ + doperkfunctions("specialty_fastreload"); +} + +//Function Number: 10 +tryusescavenger(param_00) +{ + doperkfunctions("specialty_scavenger"); +} + +//Function Number: 11 +tryusehardline(param_00) +{ + doperkfunctions("specialty_hardline"); + maps\mp\killstreaks\_killstreaks::setstreakcounttonext(); +} + +//Function Number: 12 +tryusecoldblooded(param_00) +{ + doperkfunctions("specialty_coldblooded"); +} + +//Function Number: 13 +tryusequickdraw(param_00) +{ + doperkfunctions("specialty_quickdraw"); +} + +//Function Number: 14 +tryuseblastshield(param_00) +{ + doperkfunctions("_specialty_blastshield"); +} + +//Function Number: 15 +tryusesitrep(param_00) +{ + doperkfunctions("specialty_detectexplosive"); +} + +//Function Number: 16 +tryuseironlungs(param_00) +{ + doperkfunctions("specialty_autospot"); +} + +//Function Number: 17 +tryuseassassin(param_00) +{ + doperkfunctions("specialty_heartbreaker"); +} + +//Function Number: 18 +tryusedeadsilence(param_00) +{ + doperkfunctions("specialty_quieter"); +} + +//Function Number: 19 +doperkfunctions(param_00) +{ + maps\mp\_utility::giveperk(param_00,0); + thread watchdeath(param_00); + thread checkforperkupgrade(param_00); + maps\mp\_matchdata::logkillstreakevent(param_00 + "_ks",self.origin); +} + +//Function Number: 20 +watchdeath(param_00) +{ + self endon("disconnect"); + self waittill("death"); + maps\mp\_utility::_unsetperk(param_00); + maps\mp\_utility::_unsetextraperks(param_00); +} + +//Function Number: 21 +checkforperkupgrade(param_00) +{ + var_01 = maps\mp\gametypes\_class::getperkupgrade(param_00); + if(var_01 != "specialty_null") + { + maps\mp\_utility::giveperk(var_01,0); + thread watchdeath(var_01); + } +} + +//Function Number: 22 +isperkstreakon(param_00) +{ + for(var_01 = 1;var_01 < 4;var_01++) + { + if(isdefined(self.pers["killstreaks"][var_01].streakname) && self.pers["killstreaks"][var_01].streakname == param_00) + { + if(self.pers["killstreaks"][var_01].available) + { + return 1; + } + } + } + + return 0; +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/killstreaks/_remotemissile.gsc b/MW3/PC/MP/maps/mp/killstreaks/_remotemissile.gsc new file mode 100644 index 0000000..29875fa --- /dev/null +++ b/MW3/PC/MP/maps/mp/killstreaks/_remotemissile.gsc @@ -0,0 +1,334 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\killstreaks\_remotemissile.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 12 + * Decompile Time: 226 ms + * Timestamp: 10/27/2023 2:14:25 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + var_00 = getdvar("mapname"); + if(var_00 == "mp_suburbia") + { + level.missileremotelaunchvert = 7000; + level.missileremotelaunchhorz = 10000; + level.missileremotelaunchtargetdist = 2000; + } + else if(var_00 == "mp_mainstreet") + { + level.missileremotelaunchvert = 7000; + level.missileremotelaunchhorz = 10000; + level.missileremotelaunchtargetdist = 2000; + } + else + { + level.missileremotelaunchvert = 14000; + level.missileremotelaunchhorz = 7000; + level.missileremotelaunchtargetdist = 1500; + } + + precacheitem("remotemissile_projectile_mp"); + precacheshader("ac130_overlay_grain"); + level.rockets = []; + level.killstreakfuncs["predator_missile"] = ::tryusepredatormissile; + level.missilesforsighttraces = []; + level.remotemissile_fx["explode"] = loadfx("explosions/aerial_explosion"); +} + +//Function Number: 2 +tryusepredatormissile(param_00) +{ + if(isdefined(level.civilianjetflyby)) + { + self iprintlnbold(&"MP_CIVILIAN_AIR_TRAFFIC"); + return 0; + } + + maps\mp\_utility::setusingremote("remotemissile"); + var_01 = maps\mp\killstreaks\_killstreaks::initridekillstreak(); + if(var_01 != "success") + { + if(var_01 != "disconnect") + { + maps\mp\_utility::clearusingremote(); + } + + return 0; + } + + level thread _fire(param_00,self); + return 1; +} + +//Function Number: 3 +getbestspawnpoint(param_00) +{ + var_01 = []; + foreach(var_03 in param_00) + { + var_03.validplayers = []; + var_03.spawnscore = 0; + } + + foreach(var_06 in level.players) + { + if(!maps\mp\_utility::isreallyalive(var_06)) + { + continue; + } + + if(var_06.team == self.team) + { + continue; + } + + if(var_06.team == "spectator") + { + continue; + } + + var_07 = 999999999; + var_08 = undefined; + foreach(var_03 in param_00) + { + var_03.validplayers[var_03.validplayers.size] = var_06; + var_0A = distance2d(var_03.targetent.origin,var_06.origin); + if(var_0A <= var_07) + { + var_07 = var_0A; + var_08 = var_03; + } + } + + var_08.spawnscore = var_08.spawnscore + 2; + } + + var_0D = param_00[0]; + foreach(var_03 in param_00) + { + foreach(var_06 in var_03.validplayers) + { + var_03.spawnscore = var_03.spawnscore + 1; + if(bullettracepassed(var_06.origin + (0,0,32),var_03.origin,0,var_06)) + { + var_03.spawnscore = var_03.spawnscore + 3; + } + + if(var_03.spawnscore > var_0D.spawnscore) + { + var_0D = var_03; + continue; + } + + if(var_03.spawnscore == var_0D.spawnscore) + { + if(common_scripts\utility::cointoss()) + { + var_0D = var_03; + } + } + } + } + + return var_0D; +} + +//Function Number: 4 +drawline(param_00,param_01,param_02,param_03) +{ + var_04 = int(param_02 * 20); + for(var_05 = 0;var_05 < var_04;var_05++) + { + wait 0.05; + } +} + +//Function Number: 5 +_fire(param_00,param_01) +{ + var_02 = getentarray("remoteMissileSpawn","targetname"); + foreach(var_04 in var_02) + { + if(isdefined(var_04.target)) + { + var_04.targetent = getent(var_04.target,"targetname"); + } + } + + if(var_02.size > 0) + { + var_06 = param_01 getbestspawnpoint(var_02); + } + else + { + var_06 = undefined; + } + + if(isdefined(var_06)) + { + var_07 = var_06.origin; + var_08 = var_06.targetent.origin; + var_09 = vectornormalize(var_07 - var_08); + var_07 = var_09 * 14000 + var_08; + var_0A = magicbullet("remotemissile_projectile_mp",var_07,var_08,param_01); + } + else + { + var_0B = (0,0,level.missileremotelaunchvert); + var_0C = level.missileremotelaunchhorz; + var_0D = level.missileremotelaunchtargetdist; + var_0E = anglestoforward(param_01.angles); + var_07 = param_01.origin + var_0B + var_0E * var_0C * -1; + var_08 = param_01.origin + var_0E * var_0D; + var_0A = magicbullet("remotemissile_projectile_mp",var_07,var_08,param_01); + } + + if(!isdefined(var_0A)) + { + param_01 maps\mp\_utility::clearusingremote(); + return; + } + + var_0A thread maps\mp\gametypes\_weapons::addmissiletosighttraces(param_01.team); + var_0A thread handledamage(); + var_0A.lifeid = param_00; + var_0A.type = "remote"; + missileeyes(param_01,var_0A); +} + +//Function Number: 6 +handledamage() +{ + self endon("death"); + self endon("deleted"); + self setcandamage(1); + self waittill("damage"); +} + +//Function Number: 7 +missileeyes(param_00,param_01) +{ + param_00 endon("joined_team"); + param_00 endon("joined_spectators"); + param_01 thread rocket_cleanupondeath(); + param_00 thread player_cleanupongameended(param_01); + param_00 thread player_cleanuponteamchange(param_01); + param_00 visionsetmissilecamforplayer("black_bw",0); + param_00 endon("disconnect"); + if(isdefined(param_01)) + { + param_00 visionsetmissilecamforplayer(game["thermal_vision"],1); + param_00 thermalvisionon(); + param_00 thread delayedfofoverlay(); + param_00 cameralinkto(param_01,"tag_origin"); + param_00 controlslinkto(param_01); + if(getdvarint("camera_thirdPerson")) + { + param_00 maps\mp\_utility::setthirdpersondof(0); + } + + param_01 waittill("death"); + param_00 thermalvisionoff(); + if(isdefined(param_01)) + { + param_00 maps\mp\_matchdata::logkillstreakevent("predator_missile",param_01.origin); + } + + param_00 controlsunlink(); + param_00 maps\mp\_utility::freezecontrolswrapper(1); + if(!level.gameended || isdefined(param_00.finalkill)) + { + param_00 thread staticeffect(0.5); + } + + wait 0.5; + param_00 thermalvisionfofoverlayoff(); + param_00 cameraunlink(); + if(getdvarint("camera_thirdPerson")) + { + param_00 maps\mp\_utility::setthirdpersondof(1); + } + } + + param_00 maps\mp\_utility::clearusingremote(); +} + +//Function Number: 8 +delayedfofoverlay() +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + wait 0.15; + self thermalvisionfofoverlayon(); +} + +//Function Number: 9 +staticeffect(param_00) +{ + self endon("disconnect"); + var_01 = newclienthudelem(self); + var_01.horzalign = "fullscreen"; + var_01.vertalign = "fullscreen"; + var_01 setshader("white",640,480); + var_01.archive = 1; + var_01.sort = 10; + var_02 = newclienthudelem(self); + var_02.horzalign = "fullscreen"; + var_02.vertalign = "fullscreen"; + var_02 setshader("ac130_overlay_grain",640,480); + var_02.archive = 1; + var_02.sort = 20; + wait param_00; + var_02 destroy(); + var_01 destroy(); +} + +//Function Number: 10 +player_cleanuponteamchange(param_00) +{ + param_00 endon("death"); + self endon("disconnect"); + common_scripts\utility::waittill_any("joined_team","joined_spectators"); + if(self.team != "spectator") + { + self thermalvisionfofoverlayoff(); + self controlsunlink(); + self cameraunlink(); + if(getdvarint("camera_thirdPerson")) + { + maps\mp\_utility::setthirdpersondof(1); + } + } + + maps\mp\_utility::clearusingremote(); + level.remotemissileinprogress = undefined; +} + +//Function Number: 11 +rocket_cleanupondeath() +{ + var_00 = self getentitynumber(); + level.rockets[var_00] = self; + self waittill("death"); + level.rockets[var_00] = undefined; +} + +//Function Number: 12 +player_cleanupongameended(param_00) +{ + param_00 endon("death"); + self endon("death"); + level waittill("game_ended"); + self thermalvisionfofoverlayoff(); + self controlsunlink(); + self cameraunlink(); + if(getdvarint("camera_thirdPerson")) + { + maps\mp\_utility::setthirdpersondof(1); + } +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/killstreaks/_remotemortar.gsc b/MW3/PC/MP/maps/mp/killstreaks/_remotemortar.gsc new file mode 100644 index 0000000..6fa0091 --- /dev/null +++ b/MW3/PC/MP/maps/mp/killstreaks/_remotemortar.gsc @@ -0,0 +1,778 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\killstreaks\_remotemortar.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 26 + * Decompile Time: 506 ms + * Timestamp: 10/27/2023 2:14:27 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + precachestring(&"MP_LASE_TARGET_FOR_GUIDED_MORTAR"); + precachestring(&"MP_WAIT_FOR_MORTAR_READY"); + precachestring(&"MP_MORTAR_ROUNDS_DEPLETED"); + precachestring(&"SPLASHES_DESTROYED_REMOTE_MORTAR"); + precachemodel("vehicle_predator_b"); + precacheitem("remote_mortar_missile_mp"); + precacheitem("mortar_remote_mp"); + precacheitem("mortar_remote_zoom_mp"); + precacheshader("compass_waypoint_bomb"); + precacheshader("viper_locked_box"); + precacheminimapicon("compass_objpoint_reaper_friendly"); + precacheminimapicon("compass_objpoint_reaper_enemy"); + level.remote_mortar_fx["laserTarget"] = loadfx("misc/laser_glow"); + level.remote_mortar_fx["missileExplode"] = loadfx("explosions/bouncing_betty_explosion"); + level.killstreakfuncs["remote_mortar"] = ::tryuseremotemortar; + level.remote_mortar = undefined; +} + +//Function Number: 2 +tryuseremotemortar(param_00) +{ + if(isdefined(level.remote_mortar)) + { + self iprintlnbold(&"MP_AIR_SPACE_TOO_CROWDED"); + return 0; + } + + if(!maps\mp\_utility::validateusestreak()) + { + return 0; + } + + maps\mp\_utility::setusingremote("remote_mortar"); + var_01 = maps\mp\killstreaks\_killstreaks::initridekillstreak("remote_mortar"); + if(var_01 != "success") + { + if(var_01 != "disconnect") + { + maps\mp\_utility::clearusingremote(); + } + + return 0; + } + else if(isdefined(level.remote_mortar)) + { + self iprintlnbold(&"MP_AIR_SPACE_TOO_CROWDED"); + maps\mp\_utility::clearusingremote(); + return 0; + } + + maps\mp\_matchdata::logkillstreakevent("remote_mortar",self.origin); + return startremotemortar(param_00); +} + +//Function Number: 3 +startremotemortar(param_00) +{ + var_01 = spawnremote(param_00,self); + if(!isdefined(var_01)) + { + return 0; + } + + level.remote_mortar = var_01; + remoteride(var_01); + thread maps\mp\_utility::teamplayercardsplash("used_remote_mortar",self); + return 1; +} + +//Function Number: 4 +spawnremote(param_00,param_01) +{ + var_02 = spawnplane(param_01,"script_model",level.uavrig gettagorigin("tag_origin"),"compass_objpoint_reaper_friendly","compass_objpoint_reaper_enemy"); + if(!isdefined(var_02)) + { + return undefined; + } + + var_02 setmodel("vehicle_predator_b"); + var_02.lifeid = param_00; + var_02.team = param_01.team; + var_02.owner = param_01; + var_02.numflares = 1; + var_02 setcandamage(1); + var_02 thread damagetracker(); + var_02.helitype = "remote_mortar"; + var_02.uavtype = "remote_mortar"; + var_02 maps\mp\killstreaks\_uav::adduavmodel(); + var_03 = 6300; + var_04 = randomint(360); + var_05 = 6100; + var_06 = cos(var_04) * var_05; + var_07 = sin(var_04) * var_05; + var_08 = vectornormalize((var_06,var_07,var_03)); + var_08 = var_08 * 6100; + var_02 linkto(level.uavrig,"tag_origin",var_08,(0,var_04 - 90,10)); + param_01 setclientdvar("ui_reaper_targetDistance",-1); + param_01 setclientdvar("ui_reaper_ammoCount",14); + var_02 thread handledeath(param_01); + var_02 thread handletimeout(param_01); + var_02 thread handleownerchangeteam(param_01); + var_02 thread handleownerdisconnect(param_01); + var_02 thread handleincomingstinger(); + var_02 thread handleincomingsam(); + return var_02; +} + +//Function Number: 5 +lookcenter(param_00) +{ + self endon("disconnect"); + level endon("game_ended"); + param_00 endon("death"); + wait 0.05; + var_01 = vectortoangles(level.uavrig.origin - param_00 gettagorigin("tag_player")); + self setplayerangles(var_01); +} + +//Function Number: 6 +remoteride(param_00) +{ + maps\mp\_utility::_giveweapon("mortar_remote_mp"); + self switchtoweapon("mortar_remote_mp"); + thread waitsetthermal(1,param_00); + thread maps\mp\_utility::reinitializethermal(param_00); + if(getdvarint("camera_thirdPerson")) + { + maps\mp\_utility::setthirdpersondof(0); + } + + self playerlinkweaponviewtodelta(param_00,"tag_player",1,40,40,25,40); + thread lookcenter(param_00); + common_scripts\utility::_disableweaponswitch(); + thread remotetargeting(param_00); + thread remotefiring(param_00); + thread remotezoom(param_00); +} + +//Function Number: 7 +waitsetthermal(param_00,param_01) +{ + self endon("disconnect"); + param_01 endon("death"); + wait param_00; + self visionsetthermalforplayer(level.ac130.enhanced_vision,0); + self.lastvisionsetthermal = level.ac130.enhanced_vision; + self thermalvisionfofoverlayon(); +} + +//Function Number: 8 +remotetargeting(param_00) +{ + level endon("game_ended"); + self endon("disconnect"); + param_00 endon("remote_done"); + param_00 endon("death"); + param_00.targetent = spawnfx(level.remote_mortar_fx["laserTarget"],(0,0,0)); + for(;;) + { + var_01 = self geteye(); + var_02 = anglestoforward(self getplayerangles()); + var_03 = var_01 + var_02 * 15000; + var_04 = bullettrace(var_01,var_03,0,param_00.targetent); + if(isdefined(var_04["position"])) + { + param_00.targetent.origin = var_04["position"]; + triggerfx(param_00.targetent); + } + + wait 0.05; + } +} + +//Function Number: 9 +remotefiring(param_00) +{ + level endon("game_ended"); + self endon("disconnect"); + param_00 endon("remote_done"); + param_00 endon("death"); + var_01 = gettime(); + var_02 = var_01 - 2200; + var_03 = 14; + self.firingreaper = 0; + for(;;) + { + var_01 = gettime(); + if(self attackbuttonpressed() && var_01 - var_02 > 3000) + { + var_03--; + self setclientdvar("ui_reaper_ammoCount",var_03); + var_02 = var_01; + self.firingreaper = 1; + self playlocalsound("reaper_fire"); + self playrumbleonentity("damage_heavy"); + var_04 = self geteye(); + var_05 = anglestoforward(self getplayerangles()); + var_06 = anglestoright(self getplayerangles()); + var_07 = var_04 + var_05 * 100 + var_06 * -100; + var_08 = magicbullet("remote_mortar_missile_mp",var_07,param_00.targetent.origin,self); + earthquake(0.3,0.5,var_04,256); + var_08 missile_settargetent(param_00.targetent); + var_08 missile_setflightmodedirect(); + var_08 thread remotemissiledistance(param_00); + var_08 thread remotemissilelife(param_00); + var_08 waittill("death"); + self setclientdvar("ui_reaper_targetDistance",-1); + self.firingreaper = 0; + if(var_03 == 0) + { + break; + } + + continue; + } + + wait 0.05; + } + + self notify("removed_reaper_ammo"); + remoteendride(param_00); + param_00 thread remoteleave(); +} + +//Function Number: 10 +handletogglezoom(param_00) +{ + level endon("game_ended"); + self endon("disconnect"); + param_00 endon("remote_done"); + param_00 endon("death"); + self notifyonplayercommand("remote_mortar_toggleZoom1","+ads_akimbo_accessible"); + for(;;) + { + var_01 = common_scripts\utility::waittill_any_return("remote_mortar_toggleZoom1"); + if(!isdefined(self.remote_mortar_togglezoom)) + { + self.remote_mortar_togglezoom = 0; + } + + self.remote_mortar_togglezoom = 1 - self.remote_mortar_togglezoom; + } +} + +//Function Number: 11 +remotezoom(param_00) +{ + level endon("game_ended"); + self endon("disconnect"); + param_00 endon("remote_done"); + param_00 endon("death"); + self.remote_mortar_togglezoom = undefined; + thread handletogglezoom(param_00); + param_00.var_35DF = 0; + var_01 = 0; + for(;;) + { + if(self adsbuttonpressed()) + { + wait 0.05; + if(isdefined(self.remote_mortar_togglezoom)) + { + var_01 = 1; + } + + break; + } + + wait 0.05; + } + + for(;;) + { + if((!var_01 && self adsbuttonpressed()) || var_01 && self.remote_mortar_togglezoom) + { + if(param_00.var_35DF == 0) + { + maps\mp\_utility::_giveweapon("mortar_remote_zoom_mp"); + self switchtoweapon("mortar_remote_zoom_mp"); + param_00.var_35DF = 1; + } + } + else if((!var_01 && !self adsbuttonpressed()) || var_01 && !self.remote_mortar_togglezoom) + { + if(param_00.var_35DF == 1) + { + maps\mp\_utility::_giveweapon("mortar_remote_mp"); + self switchtoweapon("mortar_remote_mp"); + param_00.var_35DF = 0; + } + } + + wait 0.05; + } +} + +//Function Number: 12 +remotemissiledistance(param_00) +{ + level endon("game_ended"); + param_00 endon("death"); + param_00 endon("remote_done"); + self endon("death"); + for(;;) + { + var_01 = distance(self.origin,param_00.targetent.origin); + param_00.owner setclientdvar("ui_reaper_targetDistance",int(var_01 / 12)); + wait 0.05; + } +} + +//Function Number: 13 +remotemissilelife(param_00) +{ + self endon("death"); + maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause(6); + playfx(level.remote_mortar_fx["missileExplode"],self.origin); + self delete(); +} + +//Function Number: 14 +remoteendride(param_00) +{ + if(!maps\mp\_utility::isusingremote()) + { + return; + } + + if(isdefined(param_00)) + { + param_00 notify("helicopter_done"); + } + + self thermalvisionoff(); + self thermalvisionfofoverlayoff(); + self visionsetthermalforplayer(game["thermal_vision"],0); + if(isdefined(level.nukedetonated)) + { + self visionsetnakedforplayer(level.nukevisionset,0); + } + else + { + self visionsetnakedforplayer("",0); + } + + self unlink(); + maps\mp\_utility::clearusingremote(); + if(getdvarint("camera_thirdPerson")) + { + maps\mp\_utility::setthirdpersondof(1); + } + + self switchtoweapon(common_scripts\utility::getlastweapon()); + var_01 = maps\mp\killstreaks\_killstreaks::getkillstreakweapon("remote_mortar"); + self takeweapon(var_01); + self takeweapon("mortar_remote_zoom_mp"); + self takeweapon("mortar_remote_mp"); + common_scripts\utility::_enableweaponswitch(); +} + +//Function Number: 15 +handletimeout(param_00) +{ + level endon("game_ended"); + param_00 endon("disconnect"); + param_00 endon("removed_reaper_ammo"); + self endon("death"); + var_01 = 40; + maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause(var_01); + while(param_00.firingreaper) + { + wait 0.05; + } + + if(isdefined(param_00)) + { + param_00 remoteendride(self); + } + + thread remoteleave(); +} + +//Function Number: 16 +handledeath(param_00) +{ + level endon("game_ended"); + param_00 endon("disconnect"); + self endon("remote_removed"); + self endon("remote_done"); + self waittill("death"); + if(isdefined(param_00)) + { + param_00 remoteendride(self); + } + + level thread removeremote(self); +} + +//Function Number: 17 +handleownerchangeteam(param_00) +{ + level endon("game_ended"); + self endon("remote_done"); + self endon("death"); + param_00 endon("disconnect"); + param_00 endon("removed_reaper_ammo"); + param_00 common_scripts\utility::waittill_any("joined_team","joined_spectators"); + if(isdefined(param_00)) + { + param_00 remoteendride(self); + } + + thread remoteleave(); +} + +//Function Number: 18 +handleownerdisconnect(param_00) +{ + level endon("game_ended"); + self endon("remote_done"); + self endon("death"); + param_00 endon("removed_reaper_ammo"); + param_00 waittill("disconnect"); + thread remoteleave(); +} + +//Function Number: 19 +removeremote(param_00) +{ + self notify("remote_removed"); + if(isdefined(param_00.targetent)) + { + param_00.targetent delete(); + } + + if(isdefined(param_00)) + { + param_00 delete(); + param_00 maps\mp\killstreaks\_uav::removeuavmodel(); + } + + level.remote_mortar = undefined; +} + +//Function Number: 20 +remoteleave() +{ + level endon("game_ended"); + self endon("death"); + self notify("remote_done"); + self unlink(); + var_00 = self.origin + anglestoforward(self.angles) * 20000; + self moveto(var_00,30); + playfxontag(level._effect["ac130_engineeffect"],self,"tag_origin"); + maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause(3); + self moveto(var_00,4,4,0); + maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause(4); + level thread removeremote(self); +} + +//Function Number: 21 +remoteexplode() +{ + self notify("death"); + self hide(); + var_00 = anglestoright(self.angles) * 200; + playfx(level.uav_fx["explode"],self.origin,var_00); +} + +//Function Number: 22 +damagetracker() +{ + level endon("game_ended"); + self.owner endon("disconnect"); + self.health = 999999; + self.maxhealth = 1500; + self.damagetaken = 0; + for(;;) + { + self waittill("damage",var_00,var_01,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09); + if(!maps\mp\gametypes\_weapons::friendlyfirecheck(self.owner,var_01)) + { + continue; + } + + if(!isdefined(self)) + { + return; + } + + if(isdefined(var_08) && var_08 & level.idflags_penetration) + { + self.wasdamagedfrombulletpenetration = 1; + } + + self.wasdamaged = 1; + var_0A = var_00; + if(isplayer(var_01)) + { + var_01 maps\mp\gametypes\_damagefeedback::updatedamagefeedback(""); + if(var_04 == "MOD_RIFLE_BULLET" || var_04 == "MOD_PISTOL_BULLET") + { + if(var_01 maps\mp\_utility::_hasperk("specialty_armorpiercing")) + { + var_0A = var_0A + var_00 * level.armorpiercingmod; + } + } + } + + if(isdefined(var_09)) + { + switch(var_09) + { + case "javelin_mp": + case "stinger_mp": + self.var_30C8 = 1; + var_0A = self.maxhealth + 1; + break; + + case "sam_projectile_mp": + self.var_30C8 = 1; + break; + } + } + + self.damagetaken = self.damagetaken + var_0A; + if(isdefined(self.owner)) + { + self.owner playlocalsound("reaper_damaged"); + } + + if(self.damagetaken >= self.maxhealth) + { + if(isplayer(var_01) && !isdefined(self.owner) || var_01 != self.owner) + { + var_01 notify("destroyed_killstreak",var_09); + thread maps\mp\_utility::teamplayercardsplash("callout_destroyed_remote_mortar",var_01); + var_01 thread maps\mp\gametypes\_rank::giverankxp("kill",50,var_09,var_04); + var_01 thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_DESTROYED_REMOTE_MORTAR"); + thread maps\mp\gametypes\_missions::vehiclekilled(self.owner,self,undefined,var_01,var_00,var_04,var_09); + } + + thread remoteexplode(); + return; + } + } +} + +//Function Number: 23 +handleincomingstinger() +{ + level endon("game_ended"); + self endon("death"); + self endon("remote_done"); + for(;;) + { + level waittill("stinger_fired",var_00,var_01,var_02); + if(!isdefined(var_02) || var_02 != self) + { + continue; + } + + var_01 thread stingerproximitydetonate(var_02,var_00); + } +} + +//Function Number: 24 +stingerproximitydetonate(param_00,param_01) +{ + self endon("death"); + param_00 endon("death"); + if(isdefined(param_00.owner)) + { + param_00.owner playlocalsound("missile_incoming"); + } + + self missile_settargetent(param_00); + var_02 = distance(self.origin,param_00 getpointinbounds(0,0,0)); + var_03 = param_00 getpointinbounds(0,0,0); + for(;;) + { + if(!isdefined(param_00)) + { + var_04 = var_03; + } + else + { + var_04 = param_00 getpointinbounds(0,0,0); + } + + var_03 = var_04; + var_05 = distance(self.origin,var_04); + if(var_05 < 3000 && param_00.numflares > 0) + { + param_00.numflares--; + param_00 thread maps\mp\killstreaks\_helicopter::playflarefx(); + var_06 = param_00 maps\mp\killstreaks\_helicopter::deployflares(); + self missile_settargetent(var_06); + param_00 = var_06; + if(isdefined(param_00.owner)) + { + param_00.owner stoplocalsound("missile_incoming"); + } + + return; + } + + if(var_06 < var_03) + { + var_03 = var_06; + } + + if(var_06 > var_03) + { + if(var_06 > 1536) + { + return; + } + + if(isdefined(param_01.owner)) + { + param_01.owner stoplocalsound("missile_incoming"); + if(level.teambased) + { + if(param_01.team != var_02.team) + { + radiusdamage(self.origin,1000,1000,1000,var_02,"MOD_EXPLOSIVE","stinger_mp"); + } + } + else + { + radiusdamage(self.origin,1000,1000,1000,var_02,"MOD_EXPLOSIVE","stinger_mp"); + } + } + + self hide(); + wait 0.05; + self delete(); + } + + wait 0.05; + } +} + +//Function Number: 25 +handleincomingsam() +{ + level endon("game_ended"); + self endon("death"); + self endon("remote_done"); + for(;;) + { + level waittill("sam_fired",var_00,var_01,var_02); + if(!isdefined(var_02) || var_02 != self) + { + continue; + } + + level thread samproximitydetonate(var_02,var_00,var_01); + } +} + +//Function Number: 26 +samproximitydetonate(param_00,param_01,param_02) +{ + param_00 endon("death"); + if(isdefined(param_00.owner)) + { + param_00.owner playlocalsound("missile_incoming"); + } + + var_03 = 150; + var_04 = 1000; + var_05 = []; + for(var_06 = 0;var_06 < param_02.size;var_06++) + { + if(isdefined(param_02[var_06])) + { + var_05[var_06] = distance(param_02[var_06].origin,param_00 getpointinbounds(0,0,0)); + continue; + } + + var_05[var_06] = undefined; + } + + for(;;) + { + var_07 = param_00 getpointinbounds(0,0,0); + var_08 = []; + var_06 = 0; + while(var_06 < param_02.size) + { + if(isdefined(param_02[var_06])) + { + } + + var_07++ = var_7B[var_06]; + } + + var_07 = 0; + while(var_07 < var_7B.size) + { + if(isdefined(var_7B[var_07])) + { + if(var_7B[var_07] < 3000 && param_01.numflares > 0) + { + param_01.numflares-- = distance(param_02[var_06].origin,var_07); + param_01 thread maps\mp\killstreaks\_helicopter::playflarefx(); + var_09 = param_01 maps\mp\killstreaks\_helicopter::deployflares(); + for(var_0A = 0;var_0A < var_03.size;var_0A++) + { + if(isdefined(var_03[var_0A])) + { + var_03[var_0A] missile_settargetent(var_09); + } + } + + if(isdefined(param_01.owner)) + { + param_01.owner stoplocalsound("missile_incoming"); + } + + return; + } + + if(var_0A[var_7B] < var_08[var_7B]) + { + var_08[var_7B] = var_0A[var_7B]; + } + + if(var_0A[var_7B] > var_08[var_7B]) + { + if(var_0A[var_7B] > 1536) + { + continue; + } + + if(isdefined(var_03.owner)) + { + var_03.owner stoplocalsound("missile_incoming"); + if(level.teambased) + { + if(var_03.team != var_04.team) + { + radiusdamage(var_05[var_7B].origin,var_07,var_06,var_06,var_04,"MOD_EXPLOSIVE","sam_projectile_mp"); + } + } + else + { + radiusdamage(var_05[var_7B].origin,var_07,var_06,var_06,var_04,"MOD_EXPLOSIVE","sam_projectile_mp"); + } + } + + var_05[var_7B] hide(); + wait 0.05; + var_05[var_7B] delete(); + } + } + + var_7B++; + } + + wait 0.05; + } +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/killstreaks/_remotetank.gsc b/MW3/PC/MP/maps/mp/killstreaks/_remotetank.gsc new file mode 100644 index 0000000..93c758c --- /dev/null +++ b/MW3/PC/MP/maps/mp/killstreaks/_remotetank.gsc @@ -0,0 +1,1087 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\killstreaks\_remotetank.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 43 + * Decompile Time: 802 ms + * Timestamp: 10/27/2023 2:14:30 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level.killstreakfuncs["remote_tank"] = ::tryuseremotetank; + level.tanksettings = []; + level.tanksettings["remote_tank"] = spawnstruct(); + level.tanksettings["remote_tank"].timeout = 60; + level.tanksettings["remote_tank"].health = 99999; + level.tanksettings["remote_tank"].maxhealth = 1000; + level.tanksettings["remote_tank"].streakname = "remote_tank"; + level.tanksettings["remote_tank"].mgturretinfo = "ugv_turret_mp"; + level.tanksettings["remote_tank"].missileinfo = "remote_tank_projectile_mp"; + level.tanksettings["remote_tank"].sentrymodeoff = "sentry_offline"; + level.tanksettings["remote_tank"].vehicleinfo = "remote_ugv_mp"; + level.tanksettings["remote_tank"].modelbase = "vehicle_ugv_talon_mp"; + level.tanksettings["remote_tank"].modelmgturret = "vehicle_ugv_talon_gun_mp"; + level.tanksettings["remote_tank"].modelplacement = "vehicle_ugv_talon_obj"; + level.tanksettings["remote_tank"].modelplacementfailed = "vehicle_ugv_talon_obj_red"; + level.tanksettings["remote_tank"].modeldestroyed = "vehicle_ugv_talon_mp"; + level.tanksettings["remote_tank"].stringplace = &"MP_REMOTE_TANK_PLACE"; + level.tanksettings["remote_tank"].stringcannotplace = &"MP_REMOTE_TANK_CANNOT_PLACE"; + level.tanksettings["remote_tank"].laptopinfo = "killstreak_remote_tank_laptop_mp"; + level.tanksettings["remote_tank"].remoteinfo = "killstreak_remote_tank_remote_mp"; + makedvarserverinfo("ui_remoteTankUseTime",level.tanksettings["remote_tank"].timeout); + precachemenu("remotetank_timer"); + foreach(var_01 in level.tanksettings) + { + precachemodel(var_01.modelbase); + precachemodel(var_01.modelmgturret); + precachemodel(var_01.modelplacement); + precachemodel(var_01.modelplacementfailed); + precachemodel(var_01.modeldestroyed); + precacheturret(var_01.mgturretinfo); + precachevehicle(var_01.vehicleinfo); + precachestring(var_01.stringplace); + precachestring(var_01.stringcannotplace); + precacheitem(var_01.laptopinfo); + precacheitem(var_01.remoteinfo); + precacheitem(var_01.missileinfo); + } + + level._effect["remote_tank_dying"] = loadfx("explosions/killstreak_explosion_quick"); + level._effect["remote_tank_explode"] = loadfx("explosions/bouncing_betty_explosion"); + level._effect["remote_tank_spark"] = loadfx("impacts/large_metal_painted_hit"); + level._effect["remote_tank_antenna_light_mp"] = loadfx("misc/aircraft_light_red_blink"); + level._effect["remote_tank_camera_light_mp"] = loadfx("misc/aircraft_light_wingtip_green"); + level.remote_tank_armor_bulletdamage = 0.5; +} + +//Function Number: 2 +tryuseremotetank(param_00) +{ + var_01 = 1; + if(!maps\mp\_utility::validateusestreak()) + { + return 0; + } + else if(maps\mp\_utility::currentactivevehiclecount() >= maps\mp\_utility::maxvehiclesallowed() || level.fauxvehiclecount + var_01 >= maps\mp\_utility::maxvehiclesallowed()) + { + self iprintlnbold(&"MP_TOO_MANY_VEHICLES"); + return 0; + } + + maps\mp\_utility::incrementfauxvehiclecount(); + var_02 = givetank(param_00,"remote_tank"); + if(var_02) + { + maps\mp\_matchdata::logkillstreakevent("remote_tank",self.origin); + thread maps\mp\_utility::teamplayercardsplash("used_remote_tank",self); + takekillstreakweapons("remote_tank"); + } + else + { + maps\mp\_utility::decrementfauxvehiclecount(); + } + + self.iscarrying = 0; + return var_02; +} + +//Function Number: 3 +takekillstreakweapons(param_00) +{ + var_01 = maps\mp\killstreaks\_killstreaks::getkillstreakweapon(level.tanksettings[param_00].streakname); + maps\mp\killstreaks\_killstreaks::takekillstreakweaponifnodupe(var_01); + self takeweapon(level.tanksettings[param_00].laptopinfo); + self takeweapon(level.tanksettings[param_00].remoteinfo); +} + +//Function Number: 4 +removeperks() +{ + if(maps\mp\_utility::_hasperk("specialty_explosivebullets")) + { + self.restoreperk = "specialty_explosivebullets"; + maps\mp\_utility::_unsetperk("specialty_explosivebullets"); + } +} + +//Function Number: 5 +restoreperks() +{ + if(isdefined(self.restoreperk)) + { + maps\mp\_utility::giveperk(self.restoreperk,0); + self.restoreperk = undefined; + } +} + +//Function Number: 6 +waitrestoreperks() +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + wait 0.05; + restoreperks(); +} + +//Function Number: 7 +removeweapons() +{ + foreach(var_01 in self.weaponlist) + { + var_02 = strtok(var_01,"_"); + if(var_02[0] == "alt") + { + self.restoreweaponclipammo[var_01] = self getweaponammoclip(var_01); + self.restoreweaponstockammo[var_01] = self getweaponammostock(var_01); + continue; + } + + self.restoreweaponclipammo[var_01] = self getweaponammoclip(var_01); + self.restoreweaponstockammo[var_01] = self getweaponammostock(var_01); + } + + self.weaponstorestore = []; + foreach(var_01 in self.weaponlist) + { + var_02 = strtok(var_01,"_"); + if(var_02[0] == "alt") + { + continue; + } + + self.weaponstorestore[self.weaponstorestore.size] = var_01; + self takeweapon(var_01); + } +} + +//Function Number: 8 +restoreweapons() +{ + if(!isdefined(self.restoreweaponclipammo) || !isdefined(self.restoreweaponstockammo) || !isdefined(self.weaponstorestore)) + { + return; + } + + var_00 = []; + foreach(var_02 in self.weaponstorestore) + { + var_03 = strtok(var_02,"_"); + if(var_03[0] == "alt") + { + var_00[var_00.size] = var_02; + continue; + } + + maps\mp\_utility::_giveweapon(var_02); + if(isdefined(self.restoreweaponclipammo[var_02])) + { + self setweaponammoclip(var_02,self.restoreweaponclipammo[var_02]); + } + + if(isdefined(self.restoreweaponstockammo[var_02])) + { + self setweaponammostock(var_02,self.restoreweaponstockammo[var_02]); + } + } + + foreach(var_06 in var_00) + { + if(isdefined(self.restoreweaponclipammo[var_06])) + { + self setweaponammoclip(var_06,self.restoreweaponclipammo[var_06]); + } + + if(isdefined(self.restoreweaponstockammo[var_06])) + { + self setweaponammostock(var_06,self.restoreweaponstockammo[var_06]); + } + } + + self.restoreweaponclipammo = undefined; + self.restoreweaponstockammo = undefined; +} + +//Function Number: 9 +waitrestoreweapons() +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + wait 0.05; + restoreweapons(); +} + +//Function Number: 10 +givetank(param_00,param_01) +{ + var_02 = createtankforplayer(param_01,self); + var_02.lifeid = param_00; + removeperks(); + removeweapons(); + var_03 = setcarryingtank(var_02,1); + thread restoreperks(); + thread restoreweapons(); + if(!isdefined(var_03)) + { + var_03 = 0; + } + + return var_03; +} + +//Function Number: 11 +createtankforplayer(param_00,param_01) +{ + var_02 = spawnturret("misc_turret",param_01.origin + (0,0,25),level.tanksettings[param_00].mgturretinfo); + var_02.angles = param_01.angles; + var_02.tanktype = param_00; + var_02.owner = param_01; + var_02 setmodel(level.tanksettings[param_00].modelbase); + var_02 maketurretinoperable(); + var_02 setturretmodechangewait(1); + var_02 setmode("sentry_offline"); + var_02 makeunusable(); + var_02 setsentryowner(param_01); + return var_02; +} + +//Function Number: 12 +setcarryingtank(param_00,param_01) +{ + self endon("death"); + self endon("disconnect"); + param_00 thread tank_setcarried(self); + common_scripts\utility::_disableweapon(); + self notifyonplayercommand("place_tank","+attack"); + self notifyonplayercommand("place_tank","+attack_akimbo_accessible"); + self notifyonplayercommand("cancel_tank","+actionslot 4"); + for(;;) + { + var_02 = common_scripts\utility::waittill_any_return("place_tank","cancel_tank","force_cancel_placement"); + if(var_02 == "cancel_tank" || var_02 == "force_cancel_placement") + { + if(!param_01 && var_02 == "cancel_tank") + { + continue; + } + + var_03 = maps\mp\killstreaks\_killstreaks::getkillstreakweapon(level.tanksettings[param_00.tanktype].streakname); + if(isdefined(self.killstreakindexweapon) && var_03 == maps\mp\killstreaks\_killstreaks::getkillstreakweapon(self.pers["killstreaks"][self.killstreakindexweapon].streakname) && !self getweaponslistitems().size) + { + maps\mp\_utility::_giveweapon(var_03,0); + maps\mp\_utility::_setactionslot(4,"weapon",var_03); + } + + param_00 tank_setcancelled(); + common_scripts\utility::_enableweapon(); + return 0; + } + + if(!param_01.canbeplaced) + { + continue; + } + + param_01 thread tank_setplaced(); + common_scripts\utility::_enableweapon(); + return 1; + } +} + +//Function Number: 13 +tank_setcarried(param_00) +{ + self setmodel(level.tanksettings[self.tanktype].modelplacement); + self setsentrycarrier(param_00); + self setcontents(0); + self setcandamage(0); + self.carriedby = param_00; + param_00.iscarrying = 1; + param_00 thread updatetankplacement(self); + thread tank_oncarrierdeath(param_00); + thread tank_oncarrierdisconnect(param_00); + thread tank_ongameended(); + self notify("carried"); +} + +//Function Number: 14 +updatetankplacement(param_00) +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + param_00 endon("placed"); + param_00 endon("death"); + param_00.canbeplaced = 1; + var_01 = -1; + for(;;) + { + var_02 = self canplayerplacetank(25,25,50,40,80,0.7); + param_00.origin = var_02["origin"]; + param_00.angles = var_02["angles"]; + param_00.canbeplaced = self isonground() && var_02["result"] && abs(var_02["origin"][2] - self.origin[2]) < 20; + if(param_00.canbeplaced != var_01) + { + if(param_00.canbeplaced) + { + param_00 setmodel(level.tanksettings[param_00.tanktype].modelplacement); + if(self.team != "spectator") + { + self forceusehinton(level.tanksettings[param_00.tanktype].stringplace); + } + } + else + { + param_00 setmodel(level.tanksettings[param_00.tanktype].modelplacementfailed); + if(self.team != "spectator") + { + self forceusehinton(level.tanksettings[param_00.tanktype].stringcannotplace); + } + } + } + + var_01 = param_00.canbeplaced; + wait 0.05; + } +} + +//Function Number: 15 +tank_oncarrierdeath(param_00) +{ + self endon("placed"); + self endon("death"); + param_00 waittill("death"); + tank_setcancelled(); +} + +//Function Number: 16 +tank_oncarrierdisconnect(param_00) +{ + self endon("placed"); + self endon("death"); + param_00 waittill("disconnect"); + tank_setcancelled(); +} + +//Function Number: 17 +tank_ongameended(param_00) +{ + self endon("placed"); + self endon("death"); + level waittill("game_ended"); + tank_setcancelled(); +} + +//Function Number: 18 +tank_setcancelled() +{ + if(isdefined(self.carriedby)) + { + self.carriedby forceusehintoff(); + } + + if(isdefined(self.owner)) + { + self.owner.iscarrying = 0; + } + + self delete(); +} + +//Function Number: 19 +tank_setplaced() +{ + self endon("death"); + level endon("game_ended"); + self notify("placed"); + self.carriedby forceusehintoff(); + self.carriedby = undefined; + if(!isdefined(self.owner)) + { + return 0; + } + + var_00 = self.owner; + var_00.iscarrying = 0; + var_01 = createtank(self); + if(!isdefined(var_01)) + { + return 0; + } + + var_01 playsound("sentry_gun_plant"); + var_01 notify("placed"); + var_01 thread tank_setactive(); + self delete(); +} + +//Function Number: 20 +tank_giveweapononplaced() +{ + self endon("death"); + level endon("game_ended"); + if(!isdefined(self.owner)) + { + return; + } + + var_00 = self.owner; + var_00 endon("death"); + self waittill("placed"); + var_00 takekillstreakweapons(self.tanktype); + var_00 maps\mp\_utility::_giveweapon(level.tanksettings[self.tanktype].laptopinfo); + var_00 switchtoweaponimmediate(level.tanksettings[self.tanktype].laptopinfo); +} + +//Function Number: 21 +createtank(param_00) +{ + var_01 = param_00.owner; + var_02 = param_00.tanktype; + var_03 = param_00.lifeid; + var_04 = spawnvehicle(level.tanksettings[var_02].modelbase,var_02,level.tanksettings[var_02].vehicleinfo,param_00.origin,param_00.angles,var_01); + if(!isdefined(var_04)) + { + return undefined; + } + + var_05 = var_04 gettagorigin("tag_turret_attach"); + var_06 = spawnturret("misc_turret",var_05,level.tanksettings[var_02].mgturretinfo,0); + var_06 linkto(var_04,"tag_turret_attach",(0,0,0),(0,0,0)); + var_06 setmodel(level.tanksettings[var_02].modelmgturret); + var_06.health = level.tanksettings[var_02].health; + var_06.owner = var_01; + var_06.angles = var_01.angles; + var_06.specialdamagecallback = ::callback_vehicledamage; + var_06.tank = var_04; + var_06 makeunusable(); + var_06 setdefaultdroppitch(0); + var_06 setcandamage(0); + var_04.specialdamagecallback = ::callback_vehicledamage; + var_04.lifeid = var_03; + var_04.team = var_01.team; + var_04.owner = var_01; + var_04.mgturret = var_06; + var_04.health = level.tanksettings[var_02].health; + var_04.maxhealth = level.tanksettings[var_02].maxhealth; + var_04.damagetaken = 0; + var_04.destroyed = 0; + var_04 setcandamage(0); + var_04.tanktype = var_02; + var_06 setturretmodechangewait(1); + var_04 tank_setinactive(); + var_06 setsentryowner(var_01); + var_01.using_remote_tank = 0; + var_01 setplayerdata("ugvMissile",1); + var_01 setplayerdata("ugvDamageFade",1); + var_01 setplayerdata("ugvDamaged",0); + var_01 setplayerdata("ugvDamageState",0); + var_01 setplayerdata("ugvBullets",0); + var_01 setplayerdata("ugvMaxBullets",0); + var_04.empgrenaded = 0; + var_04.damagefade = 1; + var_04 thread tank_incrementdamagefade(); + var_04 thread tank_watchlowhealth(); + var_04 thread tank_giveweapononplaced(); + return var_04; +} + +//Function Number: 22 +tank_setactive() +{ + self endon("death"); + self.owner endon("disconnect"); + level endon("game_ended"); + self makeunusable(); + self.mgturret maketurretsolid(); + self.mgturret setcandamage(1); + self makevehiclesolidcapsule(23,23,23); + self setcandamage(1); + if(!isdefined(self.owner)) + { + return; + } + + var_00 = self.owner; + var_01 = (0,0,20); + if(level.teambased) + { + self.team = var_00.team; + self.mgturret.team = var_00.team; + self.mgturret setturretteam(var_00.team); + foreach(var_03 in level.players) + { + if(var_03 != var_00 && var_03.team == var_00.team) + { + var_04 = self.mgturret maps\mp\_entityheadicons::setheadicon(var_03,maps\mp\gametypes\_teams::init(self.team),var_01,10,10,0,0.05,0,1,0,1); + if(isdefined(var_04)) + { + var_04 settargetent(self); + } + } + } + } + + thread tank_handledisconnect(); + thread tank_handlechangeteams(); + thread tank_handledeath(); + thread tank_handletimeout(); + thread tank_blinkylightantenna(); + thread tank_blinkylightcamera(); + startusingtank(); + var_00 openmenu("remotetank_timer"); +} + +//Function Number: 23 +startusingtank() +{ + var_00 = self.owner; + var_00 maps\mp\_utility::setusingremote(self.tanktype); + if(getdvarint("camera_thirdPerson")) + { + var_00 maps\mp\_utility::setthirdpersondof(0); + } + + var_00.restoreangles = var_00.angles; + var_00 maps\mp\_utility::freezecontrolswrapper(1); + var_01 = var_00 maps\mp\killstreaks\_killstreaks::initridekillstreak(); + if(var_01 != "success") + { + if(var_01 != "disconnect") + { + var_00 maps\mp\_utility::clearusingremote(); + } + + if(isdefined(var_00.disabledweapon) && var_00.disabledweapon) + { + var_00 common_scripts\utility::_enableweapon(); + } + + self notify("death"); + return 0; + } + + var_00 maps\mp\_utility::freezecontrolswrapper(0); + var_00 remotecontrolvehicle(self); + var_00 remotecontrolturret(self.mgturret); + var_00 thread tank_watchfiring(self); + var_00 thread tank_firemissiles(self); + thread tank_earthquake(); + thread tank_playerexit(); + var_00.using_remote_tank = 1; + if(var_00 maps\mp\_utility::isjuggernaut()) + { + var_00.juggernautoverlay.alpha = 0; + } + + var_00 maps\mp\_utility::_giveweapon(level.tanksettings[self.tanktype].remoteinfo); + var_00 switchtoweaponimmediate(level.tanksettings[self.tanktype].remoteinfo); + thread tank_handledamage(); + self.mgturret thread tank_turret_handledamage(); +} + +//Function Number: 24 +tank_blinkylightantenna() +{ + self endon("death"); + for(;;) + { + playfxontag(common_scripts\utility::getfx("remote_tank_antenna_light_mp"),self.mgturret,"tag_headlight_right"); + wait 1; + stopfxontag(common_scripts\utility::getfx("remote_tank_antenna_light_mp"),self.mgturret,"tag_headlight_right"); + } +} + +//Function Number: 25 +tank_blinkylightcamera() +{ + self endon("death"); + for(;;) + { + playfxontag(common_scripts\utility::getfx("remote_tank_camera_light_mp"),self.mgturret,"tag_tail_light_right"); + wait 2; + stopfxontag(common_scripts\utility::getfx("remote_tank_camera_light_mp"),self.mgturret,"tag_tail_light_right"); + } +} + +//Function Number: 26 +tank_setinactive() +{ + self.mgturret setmode(level.tanksettings[self.tanktype].sentrymodeoff); + if(level.teambased) + { + maps\mp\_entityheadicons::setteamheadicon("none",(0,0,0)); + } + else if(isdefined(self.owner)) + { + maps\mp\_entityheadicons::setplayerheadicon(undefined,(0,0,0)); + } + + if(!isdefined(self.owner)) + { + return; + } + + var_00 = self.owner; + if(isdefined(var_00.using_remote_tank) && var_00.using_remote_tank) + { + var_00 notify("end_remote"); + var_00 remotecontrolvehicleoff(self); + var_00 remotecontrolturretoff(self.mgturret); + var_00 switchtoweapon(var_00 common_scripts\utility::getlastweapon()); + var_00 maps\mp\_utility::clearusingremote(); + var_00 setplayerangles(var_00.restoreangles); + if(getdvarint("camera_thirdPerson")) + { + var_00 maps\mp\_utility::setthirdpersondof(1); + } + + if(isdefined(var_00.disabledusability) && var_00.disabledusability) + { + var_00 common_scripts\utility::_enableusability(); + } + + var_00 takekillstreakweapons(level.tanksettings[self.tanktype].streakname); + var_00.using_remote_tank = 0; + var_00 thread tank_freezebuffer(); + } +} + +//Function Number: 27 +tank_freezebuffer() +{ + self endon("disconnect"); + self endon("death"); + level endon("game_ended"); + maps\mp\_utility::freezecontrolswrapper(1); + wait 0.5; + maps\mp\_utility::freezecontrolswrapper(0); +} + +//Function Number: 28 +tank_handledisconnect() +{ + self endon("death"); + self.owner waittill("disconnect"); + self notify("death"); +} + +//Function Number: 29 +tank_handlechangeteams() +{ + self endon("death"); + self.owner common_scripts\utility::waittill_any("joined_team","joined_spectators"); + self notify("death"); +} + +//Function Number: 30 +tank_handletimeout() +{ + self endon("death"); + var_00 = level.tanksettings[self.tanktype].timeout; + setdvar("ui_remoteTankUseTime",var_00); + maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause(var_00); + self notify("death"); +} + +//Function Number: 31 +tank_handledeath() +{ + level endon("game_ended"); + var_00 = self getentitynumber(); + addtougvlist(var_00); + self waittill("death"); + self playsound("talon_destroyed"); + removefromugvlist(var_00); + self setmodel(level.tanksettings[self.tanktype].modeldestroyed); + if(isdefined(self.owner) && self.owner.using_remote_tank || self.owner maps\mp\_utility::isusingremote()) + { + self.owner setplayerdata("ugvDamageState",0); + tank_setinactive(); + self.owner.using_remote_tank = 0; + if(self.owner maps\mp\_utility::isjuggernaut()) + { + self.owner.juggernautoverlay.alpha = 1; + } + } + + self.mgturret setdefaultdroppitch(40); + self.mgturret setsentryowner(undefined); + self playsound("sentry_explode"); + playfxontag(level._effect["remote_tank_dying"],self.mgturret,"tag_aim"); + wait 2; + playfx(level._effect["remote_tank_explode"],self.origin); + self.mgturret delete(); + maps\mp\_utility::decrementfauxvehiclecount(); + self delete(); +} + +//Function Number: 32 +callback_vehicledamage(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A,param_0B) +{ + var_0C = self; + if(isdefined(self.tank)) + { + var_0C = self.tank; + } + + if(isdefined(var_0C.alreadydead) && var_0C.alreadydead) + { + return; + } + + if(!maps\mp\gametypes\_weapons::friendlyfirecheck(var_0C.owner,param_01)) + { + return; + } + + if(isdefined(param_03) && param_03 & level.idflags_penetration) + { + var_0C.wasdamagedfrombulletpenetration = 1; + } + + var_0C.wasdamaged = 1; + var_0C.damagefade = 0; + var_0C.owner setplayerdata("ugvDamaged",1); + playfxontagforclients(level._effect["remote_tank_spark"],var_0C,"tag_player",var_0C.owner); + switch(param_05) + { + case "stealth_bomb_mp": + case "artillery_mp": + param_02 = param_02 * 4; + break; + } + + if(param_04 == "MOD_MELEE") + { + param_02 = var_0C.maxhealth * 0.5; + } + + var_0D = param_02; + if(isplayer(param_01)) + { + param_01 maps\mp\gametypes\_damagefeedback::updatedamagefeedback("remote_tank"); + if(param_04 == "MOD_RIFLE_BULLET" || param_04 == "MOD_PISTOL_BULLET") + { + if(param_01 maps\mp\_utility::_hasperk("specialty_armorpiercing")) + { + var_0D = var_0D + param_02 * level.armorpiercingmod; + } + } + + if(isexplosivedamagemod(param_04)) + { + var_0D = var_0D + param_02; + } + } + + if(isexplosivedamagemod(param_04) && param_05 == "destructible_car") + { + var_0D = var_0C.maxhealth; + } + + if(isdefined(param_01.owner) && isplayer(param_01.owner)) + { + param_01.owner maps\mp\gametypes\_damagefeedback::updatedamagefeedback("remote_tank"); + } + + if(isdefined(param_05)) + { + switch(param_05) + { + case "javelin_mp": + case "stinger_mp": + case "remote_mortar_missile_mp": + case "remotemissile_projectile_mp": + case "ac130_40mm_mp": + case "ac130_105mm_mp": + var_0C.var_30C8 = 1; + var_0D = var_0C.maxhealth + 1; + break; + + case "stealth_bomb_mp": + case "artillery_mp": + var_0C.var_30C8 = 0; + var_0D = var_0C.maxhealth * 0.5; + break; + + case "bomb_site_mp": + var_0C.var_30C8 = 0; + var_0D = var_0C.maxhealth + 1; + break; + + case "emp_grenade_mp": + var_0D = 0; + var_0C thread tank_empgrenaded(); + break; + + case "ims_projectile_mp": + var_0C.var_30C8 = 1; + var_0D = var_0C.maxhealth * 0.5; + break; + } + } + + var_0C.damagetaken = var_0C.damagetaken + var_0D; + var_0C playsound("talon_damaged"); + if(var_0C.damagetaken >= var_0C.maxhealth) + { + if(isplayer(param_01) && !isdefined(var_0C.owner) || param_01 != var_0C.owner) + { + var_0C.alreadydead = 1; + param_01 notify("destroyed_killstreak",param_05); + thread maps\mp\_utility::teamplayercardsplash("callout_destroyed_remote_tank",param_01); + param_01 thread maps\mp\gametypes\_rank::giverankxp("kill",300,param_05,param_04); + param_01 thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_DESTROYED_REMOTE_TANK"); + thread maps\mp\gametypes\_missions::vehiclekilled(var_0C.owner,var_0C,undefined,param_01,param_02,param_04,param_05); + } + + var_0C notify("death"); + } +} + +//Function Number: 33 +tank_empgrenaded() +{ + self notify("tank_EMPGrenaded"); + self endon("tank_EMPGrenaded"); + self endon("death"); + self.owner endon("disconnect"); + level endon("game_ended"); + self.empgrenaded = 1; + self.owner setplayerdata("ugvDamageFade",0); + var_00 = self.owner getplayerdata("ugvBullets"); + self.owner setplayerdata("ugvBullets",0); + self.owner setplayerdata("ugvMissile",0); + self.mgturret turretfiredisable(); + wait 3.5; + self.empgrenaded = 0; + self.owner setplayerdata("ugvBullets",var_00); + self.owner setplayerdata("ugvMissile",1); + self.mgturret turretfireenable(); +} + +//Function Number: 34 +tank_incrementdamagefade() +{ + self endon("death"); + level endon("game_ended"); + var_00 = 0; + for(;;) + { + if(!self.empgrenaded) + { + if(self.damagefade < 1) + { + self.owner setplayerdata("ugvDamageFade",self.damagefade); + self.damagefade = self.damagefade + 0.1; + var_00 = 1; + } + else if(var_00) + { + self.damagefade = 1; + self.owner setplayerdata("ugvDamageFade",self.damagefade); + self.owner setplayerdata("ugvDamaged",0); + var_00 = 0; + } + } + + wait 0.1; + } +} + +//Function Number: 35 +tank_watchlowhealth() +{ + self endon("death"); + level endon("game_ended"); + var_00 = 0.1; + var_01 = 1; + var_02 = 1; + for(;;) + { + if(var_02) + { + if(self.damagetaken > 0) + { + var_02 = 0; + self.owner setplayerdata("ugvDamageState",var_01); + var_01++; + } + } + else if(self.damagetaken >= self.maxhealth * var_00 * var_01) + { + self.owner setplayerdata("ugvDamageState",var_01); + var_01++; + } + + wait 0.05; + } +} + +//Function Number: 36 +tank_handledamage() +{ + self endon("death"); + level endon("game_ended"); + for(;;) + { + self waittill("damage",var_00,var_01,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09); + if(isdefined(self.specialdamagecallback)) + { + self [[ self.specialdamagecallback ]](undefined,var_01,var_00,var_08,var_04,var_09,var_03,var_02,undefined,undefined,var_05,var_07); + } + } +} + +//Function Number: 37 +tank_turret_handledamage() +{ + self endon("death"); + level endon("game_ended"); + for(;;) + { + self waittill("damage",var_00,var_01,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09); + if(isdefined(self.specialdamagecallback) && isdefined(self.tank) && !isexplosivedamagemod(var_04) || isdefined(var_09) && isexplosivedamagemod(var_04) && var_09 == "stealth_bomb_mp" || var_09 == "artillery_mp") + { + self.tank [[ self.specialdamagecallback ]](undefined,var_01,var_00,var_08,var_04,var_09,var_03,var_02,undefined,undefined,var_05,var_07); + } + } +} + +//Function Number: 38 +tank_watchfiring(param_00) +{ + self endon("disconnect"); + self endon("end_remote"); + param_00 endon("death"); + var_01 = 50; + var_02 = var_01; + self setplayerdata("ugvMaxBullets",var_01); + self setplayerdata("ugvBullets",var_02); + var_03 = weaponfiretime(level.tanksettings[param_00.tanktype].mgturretinfo); + for(;;) + { + if(param_00.mgturret isfiringvehicleturret()) + { + var_02--; + self setplayerdata("ugvBullets",var_02); + if(var_02 <= 0) + { + param_00.mgturret turretfiredisable(); + wait 2.5; + param_00 playsound("talon_reload"); + self playlocalsound("talon_reload_plr"); + var_02 = var_01; + self setplayerdata("ugvBullets",var_02); + param_00.mgturret turretfireenable(); + } + } + + wait var_03; + } +} + +//Function Number: 39 +tank_firemissiles(param_00) +{ + self endon("disconnect"); + self endon("end_remote"); + level endon("game_ended"); + param_00 endon("death"); + var_01 = 0; + for(;;) + { + if(self fragbuttonpressed() && !param_00.empgrenaded) + { + var_02 = param_00.mgturret.origin; + var_03 = param_00.mgturret.angles; + switch(var_01) + { + case 0: + var_02 = param_00.mgturret gettagorigin("tag_missile1"); + var_03 = param_00.mgturret gettagangles("tag_player"); + break; + + case 1: + var_02 = param_00.mgturret gettagorigin("tag_missile2"); + var_03 = param_00.mgturret gettagangles("tag_player"); + break; + } + + param_00 playsound("talon_missile_fire"); + self playlocalsound("talon_missile_fire_plr"); + var_04 = var_02 + anglestoforward(var_03) * 100; + var_05 = magicbullet(level.tanksettings[param_00.tanktype].missileinfo,var_02,var_04,self); + var_01 = var_01 + 1 % 2; + self setplayerdata("ugvMissile",0); + wait 5; + param_00 playsound("talon_rocket_reload"); + self playlocalsound("talon_rocket_reload_plr"); + self setplayerdata("ugvMissile",1); + continue; + } + + wait 0.05; + } +} + +//Function Number: 40 +tank_earthquake() +{ + self endon("death"); + self.owner endon("end_remote"); + for(;;) + { + earthquake(0.1,0.25,self.mgturret gettagorigin("tag_player"),50); + wait 0.25; + } +} + +//Function Number: 41 +addtougvlist(param_00) +{ + level.ugvs[param_00] = self; +} + +//Function Number: 42 +removefromugvlist(param_00) +{ + level.ugvs[param_00] = undefined; +} + +//Function Number: 43 +tank_playerexit() +{ + if(!isdefined(self.owner)) + { + return; + } + + var_00 = self.owner; + level endon("game_ended"); + var_00 endon("disconnect"); + var_00 endon("end_remote"); + self endon("death"); + for(;;) + { + var_01 = 0; + while(var_00 usebuttonpressed()) + { + var_01 = var_01 + 0.05; + if(var_01 > 0.75) + { + self notify("death"); + return; + } + + wait 0.05; + } + + wait 0.05; + } +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/killstreaks/_remoteturret.gsc b/MW3/PC/MP/maps/mp/killstreaks/_remoteturret.gsc new file mode 100644 index 0000000..7973c49 --- /dev/null +++ b/MW3/PC/MP/maps/mp/killstreaks/_remoteturret.gsc @@ -0,0 +1,1152 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\killstreaks\_remoteturret.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 36 + * Decompile Time: 700 ms + * Timestamp: 10/27/2023 2:14:33 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level.turrettype = []; + level.turrettype["mg_turret"] = "remote_mg_turret"; + level.killstreakfuncs["remote_mg_turret"] = ::tryuseremotemgturret; + level.turretsettings = []; + level.turretsettings["mg_turret"] = spawnstruct(); + level.turretsettings["mg_turret"].sentrymodeon = "manual"; + level.turretsettings["mg_turret"].sentrymodeoff = "sentry_offline"; + level.turretsettings["mg_turret"].timeout = 60; + level.turretsettings["mg_turret"].health = 999999; + level.turretsettings["mg_turret"].maxhealth = 1000; + level.turretsettings["mg_turret"].streakname = "remote_mg_turret"; + level.turretsettings["mg_turret"].weaponinfo = "remote_turret_mp"; + level.turretsettings["mg_turret"].modelbase = "mp_remote_turret"; + level.turretsettings["mg_turret"].modelplacement = "mp_remote_turret_placement"; + level.turretsettings["mg_turret"].modelplacementfailed = "mp_remote_turret_placement_failed"; + level.turretsettings["mg_turret"].modeldestroyed = "mp_remote_turret"; + level.turretsettings["mg_turret"].teamsplash = "used_remote_mg_turret"; + level.turretsettings["mg_turret"].hintenter = &"MP_ENTER_REMOTE_TURRET"; + level.turretsettings["mg_turret"].hintexit = &"MP_EARLY_EXIT"; + level.turretsettings["mg_turret"].hintpickup = &"MP_DOUBLE_TAP_TO_CARRY"; + level.turretsettings["mg_turret"].placestring = &"MP_TURRET_PLACE"; + level.turretsettings["mg_turret"].cannotplacestring = &"MP_TURRET_CANNOT_PLACE"; + level.turretsettings["mg_turret"].vodestroyed = "remote_sentry_destroyed"; + level.turretsettings["mg_turret"].laptopinfo = "killstreak_remote_turret_laptop_mp"; + level.turretsettings["mg_turret"].remoteinfo = "killstreak_remote_turret_remote_mp"; + foreach(var_01 in level.turretsettings) + { + precacheitem(var_01.weaponinfo); + precachemodel(var_01.modelbase); + precachemodel(var_01.modelplacement); + precachemodel(var_01.modelplacementfailed); + precachemodel(var_01.modeldestroyed); + precachestring(var_01.hintenter); + precachestring(var_01.hintexit); + precachestring(var_01.placestring); + precachestring(var_01.cannotplacestring); + precacheitem(var_01.laptopinfo); + precacheitem(var_01.remoteinfo); + } + + level._effect["sentry_explode_mp"] = loadfx("explosions/sentry_gun_explosion"); + level._effect["sentry_smoke_mp"] = loadfx("smoke/car_damage_blacksmoke"); + level._effect["antenna_light_mp"] = loadfx("lights/light_detonator_blink"); +} + +//Function Number: 2 +tryuseremotemgturret(param_00) +{ + var_01 = tryuseremoteturret(param_00,"mg_turret"); + if(var_01) + { + maps\mp\_matchdata::logkillstreakevent(level.turretsettings["mg_turret"].streakname,self.origin); + } + + self.iscarrying = 0; + return var_01; +} + +//Function Number: 3 +takekillstreakweapons(param_00) +{ + self takeweapon(level.turretsettings[param_00].laptopinfo); + self takeweapon(level.turretsettings[param_00].remoteinfo); +} + +//Function Number: 4 +tryuseremoteturret(param_00,param_01) +{ + if(maps\mp\_utility::isusingremote()) + { + return 0; + } + + var_02 = createturretforplayer(param_01,self); + removeperks(); + setcarryingturret(var_02,1); + thread restoreperks(); + if(isdefined(var_02)) + { + return 1; + } + + return 0; +} + +//Function Number: 5 +setcarryingturret(param_00,param_01) +{ + self endon("death"); + self endon("disconnect"); + param_00 turret_setcarried(self); + common_scripts\utility::_disableweapon(); + self notifyonplayercommand("place_turret","+attack"); + self notifyonplayercommand("place_turret","+attack_akimbo_accessible"); + self notifyonplayercommand("cancel_turret","+actionslot 4"); + for(;;) + { + var_02 = common_scripts\utility::waittill_any_return("place_turret","cancel_turret","force_cancel_placement"); + if(var_02 == "cancel_turret" || var_02 == "force_cancel_placement") + { + if(var_02 == "cancel_turret" && !param_01) + { + continue; + } + + var_03 = maps\mp\killstreaks\_killstreaks::getkillstreakweapon(level.turretsettings[param_00.turrettype].streakname); + if(isdefined(self.killstreakindexweapon) && var_03 == maps\mp\killstreaks\_killstreaks::getkillstreakweapon(self.pers["killstreaks"][self.killstreakindexweapon].streakname) && !self getweaponslistitems().size) + { + maps\mp\_utility::_giveweapon(var_03,0); + maps\mp\_utility::_setactionslot(4,"weapon",var_03); + } + + param_00 turret_setcancelled(); + common_scripts\utility::_enableweapon(); + return 0; + } + + if(!param_01.canbeplaced) + { + continue; + } + + param_01 turret_setplaced(); + common_scripts\utility::_enableweapon(); + return 1; + } +} + +//Function Number: 6 +removeperks() +{ + if(maps\mp\_utility::_hasperk("specialty_explosivebullets")) + { + self.restoreperk = "specialty_explosivebullets"; + maps\mp\_utility::_unsetperk("specialty_explosivebullets"); + } +} + +//Function Number: 7 +restoreperks() +{ + if(isdefined(self.restoreperk)) + { + maps\mp\_utility::giveperk(self.restoreperk,0); + self.restoreperk = undefined; + } +} + +//Function Number: 8 +waitrestoreperks() +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + wait 0.05; + restoreperks(); +} + +//Function Number: 9 +removeweapons() +{ + foreach(var_01 in self.weaponlist) + { + var_02 = strtok(var_01,"_"); + if(var_02[0] == "alt") + { + self.restoreweaponclipammo[var_01] = self getweaponammoclip(var_01); + self.restoreweaponstockammo[var_01] = self getweaponammostock(var_01); + continue; + } + + self.restoreweaponclipammo[var_01] = self getweaponammoclip(var_01); + self.restoreweaponstockammo[var_01] = self getweaponammostock(var_01); + } + + self.weaponstorestore = []; + foreach(var_01 in self.weaponlist) + { + var_02 = strtok(var_01,"_"); + if(var_02[0] == "alt") + { + continue; + } + + self.weaponstorestore[self.weaponstorestore.size] = var_01; + self takeweapon(var_01); + } +} + +//Function Number: 10 +restoreweapons() +{ + if(!isdefined(self.restoreweaponclipammo) || !isdefined(self.restoreweaponstockammo) || !isdefined(self.weaponstorestore)) + { + return; + } + + var_00 = []; + foreach(var_02 in self.weaponstorestore) + { + var_03 = strtok(var_02,"_"); + if(var_03[0] == "alt") + { + var_00[var_00.size] = var_02; + continue; + } + + maps\mp\_utility::_giveweapon(var_02); + if(isdefined(self.restoreweaponclipammo[var_02])) + { + self setweaponammoclip(var_02,self.restoreweaponclipammo[var_02]); + } + + if(isdefined(self.restoreweaponstockammo[var_02])) + { + self setweaponammostock(var_02,self.restoreweaponstockammo[var_02]); + } + } + + foreach(var_06 in var_00) + { + if(isdefined(self.restoreweaponclipammo[var_06])) + { + self setweaponammoclip(var_06,self.restoreweaponclipammo[var_06]); + } + + if(isdefined(self.restoreweaponstockammo[var_06])) + { + self setweaponammostock(var_06,self.restoreweaponstockammo[var_06]); + } + } + + self.restoreweaponclipammo = undefined; + self.restoreweaponstockammo = undefined; +} + +//Function Number: 11 +waitrestoreweapons() +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + wait 0.05; + restoreweapons(); +} + +//Function Number: 12 +turret_setplaced() +{ + self setmodel(level.turretsettings[self.turrettype].modelbase); + self setsentrycarrier(undefined); + self setcandamage(1); + self.carriedby forceusehintoff(); + self.carriedby = undefined; + if(isdefined(self.owner)) + { + self.owner.iscarrying = 0; + } + + self playsound("sentry_gun_plant"); + thread turret_setactive(); + self notify("placed"); +} + +//Function Number: 13 +turret_setcancelled() +{ + self.carriedby forceusehintoff(); + if(isdefined(self.owner)) + { + self.owner.iscarrying = 0; + } + + self delete(); +} + +//Function Number: 14 +turret_setcarried(param_00) +{ + self setmodel(level.turretsettings[self.turrettype].modelplacement); + self setcandamage(0); + self setsentrycarrier(param_00); + self setcontents(0); + self.carriedby = param_00; + param_00.iscarrying = 1; + param_00 thread updateturretplacement(self); + thread turret_oncarrierdeath(param_00); + thread turret_oncarrierdisconnect(param_00); + thread turret_oncarrierchangedteam(param_00); + thread turret_ongameended(); + self setdefaultdroppitch(-89); + turret_setinactive(); + self notify("carried"); +} + +//Function Number: 15 +updateturretplacement(param_00) +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + param_00 endon("placed"); + param_00 endon("death"); + param_00.canbeplaced = 1; + var_01 = -1; + for(;;) + { + var_02 = self canplayerplacesentry(); + param_00.origin = var_02["origin"]; + param_00.angles = var_02["angles"]; + param_00.canbeplaced = self isonground() && var_02["result"] && abs(param_00.origin[2] - self.origin[2]) < 10; + if(param_00.canbeplaced != var_01) + { + if(param_00.canbeplaced) + { + param_00 setmodel(level.turretsettings[param_00.turrettype].modelplacement); + self forceusehinton(level.turretsettings[param_00.turrettype].placestring); + } + else + { + param_00 setmodel(level.turretsettings[param_00.turrettype].modelplacementfailed); + self forceusehinton(level.turretsettings[param_00.turrettype].cannotplacestring); + } + } + + var_01 = param_00.canbeplaced; + wait 0.05; + } +} + +//Function Number: 16 +turret_oncarrierdeath(param_00) +{ + self endon("placed"); + self endon("death"); + param_00 waittill("death"); + if(self.canbeplaced) + { + turret_setplaced(); + return; + } + + self delete(); +} + +//Function Number: 17 +turret_oncarrierdisconnect(param_00) +{ + self endon("placed"); + self endon("death"); + param_00 waittill("disconnect"); + self delete(); +} + +//Function Number: 18 +turret_oncarrierchangedteam(param_00) +{ + self endon("placed"); + self endon("death"); + param_00 common_scripts\utility::waittill_any("joined_team","joined_spectators"); + self delete(); +} + +//Function Number: 19 +turret_ongameended(param_00) +{ + self endon("placed"); + self endon("death"); + level waittill("game_ended"); + self delete(); +} + +//Function Number: 20 +createturretforplayer(param_00,param_01) +{ + var_02 = spawnturret("misc_turret",param_01.origin,level.turretsettings[param_00].weaponinfo); + var_02.angles = param_01.angles; + var_02 setmodel(level.turretsettings[param_00].modelbase); + var_02.owner = param_01; + var_02.health = level.turretsettings[param_00].health; + var_02.maxhealth = level.turretsettings[param_00].maxhealth; + var_02.damagetaken = 0; + var_02.turrettype = param_00; + var_02.stunned = 0; + var_02.stunnedtime = 5; + var_02 setturretmodechangewait(1); + var_02 turret_setinactive(); + var_02 setsentryowner(param_01); + var_02 setturretminimapvisible(1,param_00); + var_02 setdefaultdroppitch(-89); + var_02 thread turret_handleownerdisconnect(); + param_01 setplayerdata("remoteTurretDamageFade",1); + param_01 setplayerdata("remoteTurretDamaged",0); + param_01 setplayerdata("remoteTurretDamageState",0); + var_02.damagefade = 1; + var_02 thread turret_incrementdamagefade(); + var_02 thread turret_watchlowhealth(); + return var_02; +} + +//Function Number: 21 +turret_setactive() +{ + self endon("death"); + self.owner endon("disconnect"); + self setdefaultdroppitch(0); + self makeunusable(); + self maketurretsolid(); + if(!isdefined(self.owner)) + { + return; + } + + var_00 = self.owner; + if(isdefined(var_00.remoteturretlist)) + { + foreach(var_02 in var_00.remoteturretlist) + { + var_02 notify("death"); + } + } + + var_00.remoteturretlist = []; + var_00.remoteturretlist[0] = self; + var_00.using_remote_turret = 0; + var_00.pickup_message_deleted = 0; + var_00.var_3668 = 1; + if(isalive(var_00)) + { + var_00 maps\mp\_utility::setlowermessage("pickup_remote_turret",level.turretsettings[self.turrettype].hintpickup,undefined,undefined,undefined,undefined,undefined,undefined,1); + } + + var_00 thread watchownermessageondeath(self); + if(level.teambased) + { + self.team = var_00.team; + self setturretteam(var_00.team); + maps\mp\_entityheadicons::setteamheadicon(self.team,(0,0,65)); + } + else + { + maps\mp\_entityheadicons::setplayerheadicon(self.owner,(0,0,65)); + } + + self.ownertrigger = spawn("trigger_radius",self.origin + (0,0,1),0,32,64); + var_00 thread turret_handlepickup(self); + thread watchenterandexit(); + thread turret_handledeath(); + thread turret_handledamage(); + thread turret_timeout(); + thread turret_blinky_light(); +} + +//Function Number: 22 +startusingremoteturret() +{ + var_00 = self.owner; + var_00 maps\mp\_utility::setusingremote(self.turrettype); + var_00 maps\mp\_utility::freezecontrolswrapper(1); + var_01 = var_00 maps\mp\killstreaks\_killstreaks::initridekillstreak(); + if(var_01 != "success") + { + if(var_01 != "disconnect") + { + var_00 maps\mp\_utility::clearusingremote(); + } + + return 0; + } + + var_00 maps\mp\_utility::_giveweapon(level.turretsettings[self.turrettype].remoteinfo); + var_00 switchtoweaponimmediate(level.turretsettings[self.turrettype].remoteinfo); + var_00 maps\mp\_utility::freezecontrolswrapper(0); + var_00 thread waitsetthermal(1,self); + if(isdefined(level.huditem["thermal_mode"])) + { + level.huditem["thermal_mode"] settext(""); + } + + if(getdvarint("camera_thirdPerson")) + { + var_00 maps\mp\_utility::setthirdpersondof(0); + } + + var_00 playerlinkweaponviewtodelta(self,"tag_player",0,180,180,50,25,0); + var_00 playerlinkedsetviewznear(0); + var_00 playerlinkedsetusebaseangleforviewclamp(1); + var_00 remotecontrolturret(self); + var_00 maps\mp\_utility::clearlowermessage("enter_remote_turret"); + var_00 maps\mp\_utility::clearlowermessage("pickup_remote_turret"); + var_00 maps\mp\_utility::setlowermessage("early_exit",level.turretsettings[self.turrettype].hintexit,undefined,undefined,undefined,undefined,undefined,undefined,1); + if(var_00 maps\mp\_utility::isjuggernaut()) + { + var_00.juggernautoverlay.alpha = 0; + } +} + +//Function Number: 23 +waitsetthermal(param_00,param_01) +{ + self endon("disconnect"); + param_01 endon("death"); + wait param_00; + self visionsetthermalforplayer(game["thermal_vision"],1.5); + self thermalvisionon(); + self thermalvisionfofoverlayon(); +} + +//Function Number: 24 +stopusingremoteturret() +{ + var_00 = self.owner; + if(var_00 maps\mp\_utility::isusingremote()) + { + var_00 thermalvisionoff(); + var_00 thermalvisionfofoverlayoff(); + var_00 remotecontrolturretoff(self); + var_00 unlink(); + var_00 switchtoweapon(var_00 common_scripts\utility::getlastweapon()); + var_00 maps\mp\_utility::clearusingremote(); + if(getdvarint("camera_thirdPerson")) + { + var_00 maps\mp\_utility::setthirdpersondof(1); + } + + var_00 visionsetthermalforplayer(game["thermal_vision"],0); + var_01 = maps\mp\killstreaks\_killstreaks::getkillstreakweapon(level.turretsettings[self.turrettype].streakname); + var_00 maps\mp\killstreaks\_killstreaks::takekillstreakweaponifnodupe(var_01); + } + + if(self.stunned) + { + var_00 stopshellshock(); + } + + var_00 maps\mp\_utility::clearlowermessage("early_exit"); + if(!isdefined(var_00.using_remote_turret_when_died) || !var_00.using_remote_turret_when_died) + { + var_00 maps\mp\_utility::setlowermessage("enter_remote_turret",level.turretsettings[self.turrettype].hintenter,undefined,undefined,undefined,1,0.25,1.5,1); + } + + if(var_00 maps\mp\_utility::isjuggernaut()) + { + var_00.juggernautoverlay.alpha = 1; + } + + self notify("exit"); +} + +//Function Number: 25 +watchownermessageondeath(param_00) +{ + self endon("disconnect"); + param_00 endon("death"); + self.using_remote_turret_when_died = 0; + for(;;) + { + if(isalive(self)) + { + self waittill("death"); + } + + maps\mp\_utility::clearlowermessage("enter_remote_turret"); + maps\mp\_utility::clearlowermessage("pickup_remote_turret"); + if(self.using_remote_turret) + { + self.using_remote_turret_when_died = 1; + } + else + { + self.using_remote_turret_when_died = 0; + } + + self waittill("spawned_player"); + if(!self.using_remote_turret_when_died) + { + maps\mp\_utility::setlowermessage("enter_remote_turret",level.turretsettings[param_00.turrettype].hintenter,undefined,undefined,undefined,1,0.25,1.5,1); + continue; + } + + param_00 notify("death"); + } +} + +//Function Number: 26 +watchenterandexit() +{ + self endon("death"); + self endon("carried"); + level endon("game_ended"); + var_00 = self.owner; + for(;;) + { + var_01 = var_00 getcurrentweapon(); + if(maps\mp\_utility::iskillstreakweapon(var_01) && var_01 != level.turretsettings[self.turrettype].weaponinfo && var_01 != level.turretsettings[self.turrettype].laptopinfo && var_01 != level.turretsettings[self.turrettype].remoteinfo && var_01 != "none" && !var_00 maps\mp\_utility::isjuggernaut() || var_00 maps\mp\_utility::isusingremote()) + { + if(!isdefined(var_00.var_3668) || !var_00.var_3668) + { + var_00.var_3668 = 1; + var_00 maps\mp\_utility::clearlowermessage("enter_remote_turret"); + } + + wait 0.05; + continue; + } + + if(var_00 istouching(self.ownertrigger)) + { + if(!isdefined(var_00.var_3668) || !var_00.var_3668) + { + var_00.var_3668 = 1; + var_00 maps\mp\_utility::clearlowermessage("enter_remote_turret"); + } + + wait 0.05; + continue; + } + + if(isdefined(var_00.empgrenaded) && var_00.empgrenaded) + { + if(!isdefined(var_00.var_3668) || !var_00.var_3668) + { + var_00.var_3668 = 1; + var_00 maps\mp\_utility::clearlowermessage("enter_remote_turret"); + } + + wait 0.05; + continue; + } + + if(isdefined(var_00.var_3668) && var_00.var_3668 && var_01 != "none") + { + var_00 maps\mp\_utility::setlowermessage("enter_remote_turret",level.turretsettings[self.turrettype].hintenter,undefined,undefined,undefined,1,0.25,1.5,1); + var_00.var_3668 = 0; + } + + var_02 = 0; + while(var_00 usebuttonpressed() && !var_00 fragbuttonpressed() && !isdefined(var_00.throwinggrenade) && !var_00 secondaryoffhandbuttonpressed() && !var_00 isusingturret() && var_00 isonground() && !var_00 istouching(self.ownertrigger) && !isdefined(var_00.empgrenaded) || !var_00.empgrenaded) + { + if(isdefined(var_00.iscarrying) && var_00.iscarrying) + { + break; + } + + if(isdefined(var_00.iscapturingcrate) && var_00.iscapturingcrate) + { + break; + } + + if(!isalive(var_00)) + { + break; + } + + if(!var_00.using_remote_turret && var_00 maps\mp\_utility::isusingremote()) + { + break; + } + + var_02 = var_02 + 0.05; + if(var_02 > 0.75) + { + var_00.using_remote_turret = !var_00.using_remote_turret; + if(var_00.using_remote_turret) + { + var_00 removeweapons(); + var_00 takekillstreakweapons(self.turrettype); + var_00 maps\mp\_utility::_giveweapon(level.turretsettings[self.turrettype].laptopinfo); + var_00 switchtoweaponimmediate(level.turretsettings[self.turrettype].laptopinfo); + startusingremoteturret(); + var_00 restoreweapons(); + } + else + { + var_00 takekillstreakweapons(self.turrettype); + stopusingremoteturret(); + } + + wait 2; + break; + } + + wait 0.05; + } + + wait 0.05; + } +} + +//Function Number: 27 +turret_handlepickup(param_00) +{ + self endon("disconnect"); + level endon("game_ended"); + param_00 endon("death"); + if(!isdefined(param_00.ownertrigger)) + { + return; + } + + if(isdefined(self.pers["isBot"]) && self.pers["isBot"]) + { + return; + } + + var_01 = 0; + for(;;) + { + var_02 = self getcurrentweapon(); + if(maps\mp\_utility::iskillstreakweapon(var_02) && var_02 != "killstreak_remote_turret_mp" && var_02 != level.turretsettings[param_00.turrettype].weaponinfo && var_02 != level.turretsettings[param_00.turrettype].laptopinfo && var_02 != level.turretsettings[param_00.turrettype].remoteinfo && var_02 != "none" && !maps\mp\_utility::isjuggernaut() || maps\mp\_utility::isusingremote()) + { + if(!isdefined(self.pickup_message_deleted) || !self.pickup_message_deleted) + { + self.pickup_message_deleted = 1; + maps\mp\_utility::clearlowermessage("pickup_remote_turret"); + } + + wait 0.05; + continue; + } + + if(!self istouching(param_00.ownertrigger)) + { + if(!isdefined(self.pickup_message_deleted) || !self.pickup_message_deleted) + { + self.pickup_message_deleted = 1; + maps\mp\_utility::clearlowermessage("pickup_remote_turret"); + } + + wait 0.05; + continue; + } + + if(maps\mp\_utility::isreallyalive(self) && self istouching(param_00.ownertrigger) && !isdefined(param_00.carriedby) && self isonground()) + { + if(isdefined(self.pickup_message_deleted) && self.pickup_message_deleted && var_02 != "none") + { + maps\mp\_utility::setlowermessage("pickup_remote_turret",level.turretsettings[param_00.turrettype].hintpickup,undefined,undefined,undefined,undefined,undefined,undefined,1); + self.pickup_message_deleted = 0; + } + + if(self usebuttonpressed()) + { + if(isdefined(self.using_remote_turret) && self.using_remote_turret) + { + continue; + } + + var_01 = 0; + while(self usebuttonpressed()) + { + var_01 = var_01 + 0.05; + wait 0.05; + } + + if(var_01 >= 0.5) + { + continue; + } + + var_01 = 0; + while(!self usebuttonpressed() && var_01 < 0.5) + { + var_01 = var_01 + 0.05; + wait 0.05; + } + + if(var_01 >= 0.5) + { + continue; + } + + if(!maps\mp\_utility::isreallyalive(self)) + { + continue; + } + + if(isdefined(self.using_remote_turret) && self.using_remote_turret) + { + continue; + } + + param_00 setmode(level.turretsettings[param_00.turrettype].sentrymodeoff); + thread setcarryingturret(param_00,0); + param_00.ownertrigger delete(); + self.remoteturretlist = undefined; + maps\mp\_utility::clearlowermessage("pickup_remote_turret"); + return; + } + } + + wait 0.05; + } +} + +//Function Number: 28 +turret_blinky_light() +{ + self endon("death"); + self endon("carried"); + for(;;) + { + playfxontag(common_scripts\utility::getfx("antenna_light_mp"),self,"tag_fx"); + wait 1; + stopfxontag(common_scripts\utility::getfx("antenna_light_mp"),self,"tag_fx"); + } +} + +//Function Number: 29 +turret_setinactive() +{ + self setmode(level.turretsettings[self.turrettype].sentrymodeoff); + if(level.teambased) + { + maps\mp\_entityheadicons::setteamheadicon("none",(0,0,0)); + } + else if(isdefined(self.owner)) + { + maps\mp\_entityheadicons::setplayerheadicon(undefined,(0,0,0)); + } + + if(!isdefined(self.owner)) + { + return; + } + + var_00 = self.owner; + if(isdefined(var_00.using_remote_turret) && var_00.using_remote_turret) + { + var_00 thermalvisionoff(); + var_00 thermalvisionfofoverlayoff(); + var_00 remotecontrolturretoff(self); + var_00 unlink(); + var_00 switchtoweapon(var_00 common_scripts\utility::getlastweapon()); + var_00 maps\mp\_utility::clearusingremote(); + if(getdvarint("camera_thirdPerson")) + { + var_00 maps\mp\_utility::setthirdpersondof(1); + } + + var_00 maps\mp\killstreaks\_killstreaks::clearrideintro(); + var_00 visionsetthermalforplayer(game["thermal_vision"],0); + if(isdefined(var_00.disabledusability) && var_00.disabledusability) + { + var_00 common_scripts\utility::_enableusability(); + } + + var_00 takekillstreakweapons(self.turrettype); + if(var_00 maps\mp\_utility::isjuggernaut()) + { + var_00.juggernautoverlay.alpha = 1; + } + } +} + +//Function Number: 30 +turret_handleownerdisconnect() +{ + self endon("death"); + level endon("game_ended"); + self notify("turret_handleOwner"); + self endon("turret_handleOwner"); + self.owner common_scripts\utility::waittill_any("disconnect","joined_team","joined_spectators"); + self notify("death"); +} + +//Function Number: 31 +turret_timeout() +{ + self endon("death"); + level endon("game_ended"); + var_00 = level.turretsettings[self.turrettype].timeout; + while(var_00) + { + wait 1; + maps\mp\gametypes\_hostmigration::waittillhostmigrationdone(); + if(!isdefined(self.carriedby)) + { + var_00 = max(0,var_00 - 1); + } + } + + if(isdefined(self.owner)) + { + self.owner thread maps\mp\_utility::leaderdialogonplayer("sentry_gone"); + } + + self notify("death"); +} + +//Function Number: 32 +turret_handledeath() +{ + self endon("carried"); + var_00 = self getentitynumber(); + maps\mp\killstreaks\_autosentry::addtoturretlist(var_00); + self waittill("death"); + maps\mp\killstreaks\_autosentry::removefromturretlist(var_00); + if(!isdefined(self)) + { + return; + } + + self setmodel(level.turretsettings[self.turrettype].modeldestroyed); + turret_setinactive(); + self setdefaultdroppitch(40); + self setsentryowner(undefined); + self setturretminimapvisible(0); + if(isdefined(self.ownertrigger)) + { + self.ownertrigger delete(); + } + + var_01 = self.owner; + if(isdefined(var_01)) + { + var_01.using_remote_turret = 0; + var_01 maps\mp\_utility::clearlowermessage("enter_remote_turret"); + var_01 maps\mp\_utility::clearlowermessage("early_exit"); + var_01 maps\mp\_utility::clearlowermessage("pickup_remote_turret"); + var_01 setplayerdata("remoteTurretDamageState",0); + var_01 restoreperks(); + var_01 restoreweapons(); + if(var_01 getcurrentweapon() == "none") + { + var_01 switchtoweapon(var_01 common_scripts\utility::getlastweapon()); + } + } + + self playsound("sentry_explode"); + playfxontag(common_scripts\utility::getfx("sentry_explode_mp"),self,"tag_aim"); + wait 1.5; + self playsound("sentry_explode_smoke"); + var_02 = 8; + while(var_02 > 0) + { + playfxontag(common_scripts\utility::getfx("sentry_smoke_mp"),self,"tag_aim"); + wait 0.4; + var_02 = var_02 - 0.4; + } + + self notify("deleting"); + if(isdefined(self.target_ent)) + { + self.target_ent delete(); + } + + self delete(); +} + +//Function Number: 33 +turret_handledamage() +{ + self endon("death"); + self endon("carried"); + self setcandamage(1); + for(;;) + { + self waittill("damage",var_00,var_01,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09); + if(!maps\mp\gametypes\_weapons::friendlyfirecheck(self.owner,var_01)) + { + continue; + } + + if(isdefined(var_09)) + { + switch(var_09) + { + case "flash_grenade_mp": + case "concussion_grenade_mp": + if(var_04 == "MOD_GRENADE_SPLASH" && self.owner.using_remote_turret) + { + self.stunned = 1; + thread turret_stun(); + } + + break; + + case "smoke_grenade_mp": + break; + } + } + + if(!isdefined(self)) + { + return; + } + + if(var_04 == "MOD_MELEE") + { + self.damagetaken = self.damagetaken + self.maxhealth; + } + + if(isdefined(var_08) && var_08 & level.idflags_penetration) + { + self.wasdamagedfrombulletpenetration = 1; + } + + self.wasdamaged = 1; + self.damagefade = 0; + self.owner setplayerdata("remoteTurretDamaged",1); + var_0A = var_00; + if(isplayer(var_01)) + { + var_01 maps\mp\gametypes\_damagefeedback::updatedamagefeedback("remote_turret"); + if(var_01 maps\mp\_utility::_hasperk("specialty_armorpiercing")) + { + var_0A = var_00 * level.armorpiercingmod; + } + } + + if(isdefined(var_01.owner) && isplayer(var_01.owner)) + { + var_01.owner maps\mp\gametypes\_damagefeedback::updatedamagefeedback("remote_turret"); + } + + if(isdefined(var_09)) + { + switch(var_09) + { + case "javelin_mp": + case "stinger_mp": + case "remote_mortar_missile_mp": + case "remotemissile_projectile_mp": + case "ac130_40mm_mp": + case "ac130_105mm_mp": + self.var_30C8 = 1; + var_0A = self.maxhealth + 1; + break; + + case "stealth_bomb_mp": + case "artillery_mp": + self.var_30C8 = 0; + var_0A = var_0A + var_00 * 4; + break; + + case "bomb_site_mp": + case "emp_grenade_mp": + self.var_30C8 = 0; + var_0A = self.maxhealth + 1; + break; + } + } + + self.damagetaken = self.damagetaken + var_0A; + if(self.damagetaken >= self.maxhealth) + { + if(isplayer(var_01) && !isdefined(self.owner) || var_01 != self.owner) + { + var_01 thread maps\mp\gametypes\_rank::giverankxp("kill",100,var_09,var_04); + var_01 notify("destroyed_killstreak"); + } + + if(isdefined(self.owner)) + { + self.owner thread maps\mp\_utility::leaderdialogonplayer(level.turretsettings[self.turrettype].vodestroyed); + } + + self notify("death"); + return; + } + } +} + +//Function Number: 34 +turret_incrementdamagefade() +{ + self endon("death"); + level endon("game_ended"); + var_00 = 0; + for(;;) + { + if(self.damagefade < 1) + { + self.owner setplayerdata("remoteTurretDamageFade",self.damagefade); + self.damagefade = self.damagefade + 0.1; + var_00 = 1; + } + else if(var_00) + { + self.damagefade = 1; + self.owner setplayerdata("remoteTurretDamageFade",self.damagefade); + self.owner setplayerdata("remoteTurretDamaged",0); + var_00 = 0; + } + + wait 0.1; + } +} + +//Function Number: 35 +turret_watchlowhealth() +{ + self endon("death"); + level endon("game_ended"); + var_00 = 0.1; + var_01 = 1; + var_02 = 1; + for(;;) + { + if(var_02) + { + if(self.damagetaken > 0) + { + var_02 = 0; + self.owner setplayerdata("remoteTurretDamageState",var_01); + var_01++; + } + } + else if(self.damagetaken >= self.maxhealth * var_00 * var_01) + { + self.owner setplayerdata("remoteTurretDamageState",var_01); + var_01++; + } + + wait 0.05; + } +} + +//Function Number: 36 +turret_stun() +{ + self notify("stunned"); + self endon("stunned"); + self endon("death"); + while(self.stunned) + { + self.owner shellshock("concussion_grenade_mp",self.stunnedtime); + playfxontag(common_scripts\utility::getfx("sentry_explode_mp"),self,"tag_origin"); + var_00 = 0; + while(var_00 < self.stunnedtime) + { + var_00 = var_00 + 0.05; + wait 0.05; + } + + self.stunned = 0; + } +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/killstreaks/_remoteuav.gsc b/MW3/PC/MP/maps/mp/killstreaks/_remoteuav.gsc new file mode 100644 index 0000000..40ec084 --- /dev/null +++ b/MW3/PC/MP/maps/mp/killstreaks/_remoteuav.gsc @@ -0,0 +1,1716 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\killstreaks\_remoteuav.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 58 + * Decompile Time: 1075 ms + * Timestamp: 10/27/2023 2:14:36 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + precachemodel("vehicle_remote_uav"); + precachemodel("test_vehicle_little_bird_toy_placement"); + precachemodel("test_vehicle_little_bird_toy_placement_failed"); + precachevehicle("remote_uav_mp"); + precacheitem("uav_remote_mp"); + precacheitem("killstreak_remote_uav_mp"); + precacheshader("veh_hud_target"); + precacheshader("veh_hud_target_marked"); + precacheshader("veh_hud_target_unmarked"); + precacheshader("compassping_sentry_enemy"); + precacheshader("compassping_enemy_uav"); + precacheshader("hud_fofbox_hostile_vehicle"); + precacherumble("damage_light"); + precachestring(&"MP_REMOTE_UAV_PLACE"); + precachestring(&"MP_REMOTE_UAV_CANNOT_PLACE"); + precachestring(&"SPLASHES_DESTROYED_REMOTE_UAV"); + precachestring(&"SPLASHES_MARKED_BY_REMOTE_UAV"); + precachestring(&"SPLASHES_REMOTE_UAV_MARKED"); + precachestring(&"SPLASHES_TURRET_MARKED_BY_REMOTE_UAV"); + precachestring(&"SPLASHES_REMOTE_UAV_ASSIST"); + level.remoteuav_fx["hit"] = loadfx("impacts/large_metal_painted_hit"); + level.remoteuav_fx["smoke"] = loadfx("smoke/remote_heli_damage_smoke_runner"); + level.remoteuav_fx["explode"] = loadfx("explosions/bouncing_betty_explosion"); + level.remoteuav_fx["missile_explode"] = loadfx("explosions/stinger_explosion"); + level.remoteuav_dialog["launch"][0] = "ac130_plt_yeahcleared"; + level.remoteuav_dialog["launch"][1] = "ac130_plt_rollinin"; + level.remoteuav_dialog["launch"][2] = "ac130_plt_scanrange"; + level.remoteuav_dialog["out_of_range"][0] = "ac130_plt_cleanup"; + level.remoteuav_dialog["out_of_range"][1] = "ac130_plt_targetreset"; + level.remoteuav_dialog["track"][0] = "ac130_fco_moreenemy"; + level.remoteuav_dialog["track"][1] = "ac130_fco_getthatguy"; + level.remoteuav_dialog["track"][2] = "ac130_fco_guymovin"; + level.remoteuav_dialog["track"][3] = "ac130_fco_getperson"; + level.remoteuav_dialog["track"][4] = "ac130_fco_guyrunnin"; + level.remoteuav_dialog["track"][5] = "ac130_fco_gotarunner"; + level.remoteuav_dialog["track"][6] = "ac130_fco_backonthose"; + level.remoteuav_dialog["track"][7] = "ac130_fco_gonnagethim"; + level.remoteuav_dialog["track"][8] = "ac130_fco_personnelthere"; + level.remoteuav_dialog["track"][9] = "ac130_fco_rightthere"; + level.remoteuav_dialog["track"][10] = "ac130_fco_tracking"; + level.remoteuav_dialog["tag"][0] = "ac130_fco_nice"; + level.remoteuav_dialog["tag"][1] = "ac130_fco_yougothim"; + level.remoteuav_dialog["tag"][2] = "ac130_fco_yougothim2"; + level.remoteuav_dialog["tag"][3] = "ac130_fco_okyougothim"; + level.remoteuav_dialog["assist"][0] = "ac130_fco_goodkill"; + level.remoteuav_dialog["assist"][1] = "ac130_fco_thatsahit"; + level.remoteuav_dialog["assist"][2] = "ac130_fco_directhit"; + level.remoteuav_dialog["assist"][3] = "ac130_fco_rightontarget"; + level.remoteuav_lastdialogtime = 0; + level.remoteuav_nodeployzones = getentarray("no_vehicles","targetname"); + level.killstreakfuncs["remote_uav"] = ::useremoteuav; + level.remote_uav = []; +} + +//Function Number: 2 +useremoteuav(param_00) +{ + return tryuseremoteuav(param_00,"remote_uav"); +} + +//Function Number: 3 +func_0011(param_00) +{ + if(level.gametype == "dm") + { + if(isdefined(level.remote_uav[param_00]) || isdefined(level.remote_uav[level.otherteam[param_00]])) + { + return 1; + } + + return 0; + } + + if(isdefined(level.remote_uav[param_00])) + { + return 1; + } + + return 0; +} + +//Function Number: 4 +tryuseremoteuav(param_00,param_01) +{ + common_scripts\utility::_disableusability(); + if(maps\mp\_utility::isusingremote() || self isusingturret() || isdefined(level.nukeincoming)) + { + common_scripts\utility::_enableusability(); + return 0; + } + + var_02 = 1; + if(func_0011(self.team) || level.littlebirds.size >= 4) + { + self iprintlnbold(&"MP_AIR_SPACE_TOO_CROWDED"); + common_scripts\utility::_enableusability(); + return 0; + } + else if(maps\mp\_utility::currentactivevehiclecount() >= maps\mp\_utility::maxvehiclesallowed() || level.fauxvehiclecount + var_02 >= maps\mp\_utility::maxvehiclesallowed()) + { + self iprintlnbold(&"MP_TOO_MANY_VEHICLES"); + common_scripts\utility::_enableusability(); + return 0; + } + + self setplayerdata("reconDroneState","staticAlpha",0); + self setplayerdata("reconDroneState","incomingMissile",0); + maps\mp\_utility::incrementfauxvehiclecount(); + var_03 = givecarryremoteuav(param_00,param_01); + if(var_03) + { + maps\mp\_matchdata::logkillstreakevent(param_01,self.origin); + thread maps\mp\_utility::teamplayercardsplash("used_remote_uav",self); + } + else + { + maps\mp\_utility::decrementfauxvehiclecount(); + } + + self.iscarrying = 0; + return var_03; +} + +//Function Number: 5 +givecarryremoteuav(param_00,param_01) +{ + var_02 = createcarryremoteuav(param_01,self); + self takeweapon("killstreak_uav_mp"); + maps\mp\_utility::_giveweapon("killstreak_remote_uav_mp"); + self switchtoweaponimmediate("killstreak_remote_uav_mp"); + setcarryingremoteuav(var_02); + if(isalive(self) && isdefined(var_02)) + { + var_03 = var_02.origin; + var_04 = self.angles; + var_02.var_12 delete(); + var_02 delete(); + var_05 = startremoteuav(param_00,param_01,var_03,var_04); + } + else + { + var_05 = 0; + if(isalive(self)) + { + self takeweapon("killstreak_remote_uav_mp"); + maps\mp\_utility::_giveweapon("killstreak_uav_mp"); + } + } + + return var_05; +} + +//Function Number: 6 +createcarryremoteuav(param_00,param_01) +{ + var_02 = param_01.origin + anglestoforward(param_01.angles) * 4 + anglestoup(param_01.angles) * 50; + var_03 = spawnturret("misc_turret",var_02,"sentry_minigun_mp"); + var_03.origin = var_02; + var_03.angles = param_01.angles; + var_03.sentrytype = "sentry_minigun"; + var_03.canbeplaced = 1; + var_03 setturretmodechangewait(1); + var_03 setmode("sentry_offline"); + var_03 makeunusable(); + var_03 maketurretinoperable(); + var_03.owner = param_01; + var_03 setsentryowner(var_03.owner); + var_03.scale = 3; + var_03.largeprojectiledamage = 0; + var_03 thread carryremoteuav_handleexistence(); + var_03.rangetrigger = getent("remote_uav_range","targetname"); + if(!isdefined(var_03.rangetrigger)) + { + var_04 = getent("airstrikeheight","targetname"); + var_03.var_310E = var_04.origin[2]; + var_03.var_310F = 3600; + } + + var_03.var_12 = spawn("script_origin",var_03.origin); + var_03.var_12.angles = var_03.angles; + var_03.var_12.origin = var_03.origin; + var_03.var_12 linkto(var_03); + var_03.var_12 playloopsound("recondrone_idle_high"); + return var_03; +} + +//Function Number: 7 +setcarryingremoteuav(param_00) +{ + self endon("death"); + self endon("disconnect"); + thread carryremoteuav_ondisconnect(param_00); + param_00 thread carryremoteuav_setcarried(self); + self notifyonplayercommand("place_carryRemoteUAV","+attack"); + self notifyonplayercommand("place_carryRemoteUAV","+attack_akimbo_accessible"); + self notifyonplayercommand("cancel_carryRemoteUAV","+actionslot 4"); + for(;;) + { + var_01 = common_scripts\utility::waittill_any_return("place_carryRemoteUAV","cancel_carryRemoteUAV","weapon_switch_started","force_cancel_placement"); + self forceusehintoff(); + if(var_01 != "place_carryRemoteUAV") + { + self.iscarrying = 0; + param_00.var_12 delete(); + param_00 delete(); + break; + } + + if(!param_00.canbeplaced) + { + if(self.team != "spectator") + { + self forceusehinton(&"MP_REMOTE_UAV_CANNOT_PLACE"); + } + + continue; + } + + if(isdefined(level.nukeincoming) || maps\mp\_utility::isemped() || func_0011(self.team) || maps\mp\_utility::currentactivevehiclecount() >= maps\mp\_utility::maxvehiclesallowed() || level.fauxvehiclecount >= maps\mp\_utility::maxvehiclesallowed()) + { + if(isdefined(level.nukeincoming) || maps\mp\_utility::isemped()) + { + self iprintlnbold(&"MP_UNAVAILABLE_FOR_N_WHEN_EMP",level.emptimeremaining); + } + else + { + self iprintlnbold(&"MP_TOO_MANY_VEHICLES"); + } + + self.iscarrying = 0; + param_00.var_12 delete(); + param_00 delete(); + break; + } + + self.iscarrying = 0; + param_00.carriedby = undefined; + param_00 playsound("sentry_gun_plant"); + param_00 notify("placed"); + break; + } + + common_scripts\utility::_enableusability(); +} + +//Function Number: 8 +carryremoteuav_setcarried(param_00) +{ + self setcandamage(0); + self setsentrycarrier(param_00); + self setcontents(0); + self.carriedby = param_00; + param_00.iscarrying = 1; + param_00 thread updatecarryremoteuavplacement(self); + self notify("carried"); +} + +//Function Number: 9 +carryremoteuav_ondisconnect(param_00) +{ + level endon("game_ended"); + self endon("death"); + self endon("place_carryRemoteUAV"); + self endon("cancel_carryRemoteUAV"); + self endon("weapon_switch_started"); + self endon("force_cancel_placement"); + self waittill("disconnect"); + if(isdefined(param_00)) + { + if(isdefined(param_00.var_12)) + { + param_00.var_12 delete(); + } + + param_00 delete(); + } +} + +//Function Number: 10 +func_3113() +{ + if(isdefined(level.remoteuav_nodeployzones) && level.remoteuav_nodeployzones.size) + { + foreach(var_01 in level.remoteuav_nodeployzones) + { + if(self istouching(var_01)) + { + return 1; + } + } + } + + return 0; +} + +//Function Number: 11 +updatecarryremoteuavplacement(param_00) +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + param_00 endon("placed"); + param_00 endon("death"); + param_00.canbeplaced = 1; + var_01 = -1; + for(;;) + { + var_02 = 18; + switch(self getstance()) + { + case "stand": + var_02 = 40; + break; + + case "crouch": + var_02 = 25; + break; + + case "prone": + var_02 = 10; + break; + } + + var_03 = self canplayerplacetank(22,22,50,var_02,0,0); + param_00.origin = var_03["origin"] + anglestoup(self.angles) * 27; + param_00.angles = var_03["angles"]; + param_00.canbeplaced = self isonground() && var_03["result"] && param_00 remoteuav_in_range() && !param_00 func_3113(); + if(param_00.canbeplaced != var_01) + { + if(param_00.canbeplaced) + { + if(self.team != "spectator") + { + self forceusehinton(&"MP_REMOTE_UAV_PLACE"); + } + + if(self attackbuttonpressed()) + { + self notify("place_carryRemoteUAV"); + } + } + else if(self.team != "spectator") + { + self forceusehinton(&"MP_REMOTE_UAV_CANNOT_PLACE"); + } + } + + var_01 = param_00.canbeplaced; + wait 0.05; + } +} + +//Function Number: 12 +carryremoteuav_handleexistence() +{ + level endon("game_ended"); + self.owner endon("place_carryRemoteUAV"); + self.owner endon("cancel_carryRemoteUAV"); + self.owner common_scripts\utility::waittill_any("death","disconnect","joined_team","joined_spectators"); + if(isdefined(self)) + { + self delete(); + } +} + +//Function Number: 13 +removeremoteweapon() +{ + level endon("game_ended"); + self endon("disconnect"); + wait 0.7; +} + +//Function Number: 14 +startremoteuav(param_00,param_01,param_02,param_03) +{ + lockplayerforremoteuavlaunch(); + maps\mp\_utility::setusingremote(param_01); + maps\mp\_utility::_giveweapon("uav_remote_mp"); + self switchtoweaponimmediate("uav_remote_mp"); + self visionsetnakedforplayer("black_bw",0); + var_04 = maps\mp\killstreaks\_killstreaks::initridekillstreak("remote_uav"); + if(var_04 != "success") + { + if(var_04 != "disconnect") + { + self notify("remoteuav_unlock"); + self takeweapon("uav_remote_mp"); + maps\mp\_utility::clearusingremote(); + } + + return 0; + } + + if(func_0011(self.team) || maps\mp\_utility::currentactivevehiclecount() >= maps\mp\_utility::maxvehiclesallowed() || level.fauxvehiclecount >= maps\mp\_utility::maxvehiclesallowed()) + { + self iprintlnbold(&"MP_TOO_MANY_VEHICLES"); + self notify("remoteuav_unlock"); + self takeweapon("uav_remote_mp"); + maps\mp\_utility::clearusingremote(); + return 0; + } + + self notify("remoteuav_unlock"); + var_05 = createremoteuav(param_00,self,param_01,param_02,param_03); + if(isdefined(var_05)) + { + thread remoteuav_ride(param_00,var_05,param_01); + return 1; + } + + self iprintlnbold(&"MP_TOO_MANY_VEHICLES"); + self takeweapon("uav_remote_mp"); + maps\mp\_utility::clearusingremote(); + return 0; +} + +//Function Number: 15 +remoteuav_clearrideintro() +{ + if(isdefined(level.nukedetonated)) + { + self visionsetnakedforplayer(level.nukevisionset,0); + return; + } + + self visionsetnakedforplayer("",0); +} + +//Function Number: 16 +lockplayerforremoteuavlaunch() +{ + var_00 = spawn("script_origin",self.origin); + var_00 hide(); + self playerlinkto(var_00); + thread clearplayerlockfromremoteuavlaunch(var_00); +} + +//Function Number: 17 +clearplayerlockfromremoteuavlaunch(param_00) +{ + level endon("game_ended"); + var_01 = common_scripts\utility::waittill_any_return("disconnect","death","remoteuav_unlock"); + if(var_01 != "disconnect") + { + self unlink(); + } + + param_00 delete(); +} + +//Function Number: 18 +createremoteuav(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = spawnhelicopter(param_01,param_03,param_04,"remote_uav_mp","vehicle_remote_uav"); + if(!isdefined(var_05)) + { + return undefined; + } + + var_05 maps\mp\killstreaks\_helicopter::addtolittlebirdlist(); + var_05 thread maps\mp\killstreaks\_helicopter::removefromlittlebirdlistondeath(); + var_05 makevehiclesolidcapsule(18,-9,18); + var_05.lifeid = param_00; + var_05.team = param_01.team; + var_05.pers["team"] = param_01.team; + var_05.owner = param_01; + var_05.health = 999999; + var_05.maxhealth = 250; + var_05.damagetaken = 0; + var_05.destroyed = 0; + var_05 setcandamage(1); + var_05.specialdamagecallback = ::callback_vehicledamage; + var_05.scrambler = spawn("script_model",param_03); + var_05.scrambler linkto(var_05,"tag_origin",(0,0,-160),(0,0,0)); + var_05.scrambler makescrambler(param_01); + var_05.smoking = 0; + var_05.largeprojectiledamage = 0; + var_05.helitype = "remote_uav"; + var_05.markedplayers = []; + var_05 thread remoteuav_light_fx(); + var_05 thread remoteuav_explode_on_disconnect(); + var_05 thread remoteuav_explode_on_changeteams(); + var_05 thread remoteuav_explode_on_death(); + var_05 thread remoteuav_clear_marked_on_gameended(); + var_05 thread remoteuav_leave_on_timeout(); + var_05 thread remoteuav_watch_distance(); + var_05 thread remoteuav_watchheliproximity(); + var_05 thread remoteuav_handledamage(); + var_05.numflares = 2; + var_05.hasincoming = 0; + var_05.incomingmissiles = []; + var_05 thread remoteuav_clearincomingwarning(); + var_05 thread remoteuav_handleincomingstinger(); + var_05 thread remoteuav_handleincomingsam(); + level.remote_uav[var_05.team] = var_05; + return var_05; +} + +//Function Number: 19 +remoteuav_ride(param_00,param_01,param_02) +{ + param_01.playerlinked = 1; + self.restoreangles = self.angles; + if(getdvarint("camera_thirdPerson")) + { + maps\mp\_utility::setthirdpersondof(0); + } + + if(maps\mp\_utility::isjuggernaut()) + { + self.juggernautoverlay.alpha = 0; + } + + if(isdefined(self.haslightarmor)) + { + self.combathighoverlay.alpha = 0; + } + + self cameralinkto(param_01,"tag_origin"); + self remotecontrolvehicle(param_01); + thread remoteuav_playerexit(param_01); + thread remoteuav_track(param_01); + thread remoteuav_fire(param_01); + self.var_3127 = param_00; + self.remoteuav = param_01; + thread remoteuav_delaylaunchdialog(param_01); + self visionsetnakedforplayer("black_bw",0); + if(isdefined(level.nukedetonated)) + { + self visionsetnakedforplayer(level.nukevisionset,1); + return; + } + + self visionsetnakedforplayer("",1); +} + +//Function Number: 20 +remoteuav_delaylaunchdialog(param_00) +{ + level endon("game_ended"); + self endon("disconnect"); + param_00 endon("death"); + param_00 endon("end_remote"); + param_00 endon("end_launch_dialog"); + wait 3; + remoteuav_dialog("launch"); +} + +//Function Number: 21 +remoteuav_endride(param_00) +{ + if(isdefined(param_00)) + { + param_00.playerlinked = 0; + param_00 notify("end_remote"); + maps\mp\_utility::clearusingremote(); + if(getdvarint("camera_thirdPerson")) + { + maps\mp\_utility::setthirdpersondof(1); + } + + if(maps\mp\_utility::isjuggernaut()) + { + self.juggernautoverlay.alpha = 1; + } + + if(isdefined(self.haslightarmor)) + { + self.combathighoverlay.alpha = 1; + } + + self cameraunlink(param_00); + self remotecontrolvehicleoff(param_00); + self thermalvisionoff(); + self setplayerangles(self.restoreangles); + self switchtoweapon(common_scripts\utility::getlastweapon()); + self takeweapon("uav_remote_mp"); + thread remoteuav_freezebuffer(); + } + + self.remoteuav = undefined; +} + +//Function Number: 22 +remoteuav_freezebuffer() +{ + self endon("disconnect"); + self endon("death"); + level endon("game_ended"); + maps\mp\_utility::freezecontrolswrapper(1); + wait 0.5; + maps\mp\_utility::freezecontrolswrapper(0); +} + +//Function Number: 23 +remoteuav_playerexit(param_00) +{ + level endon("game_ended"); + self endon("disconnect"); + param_00 endon("death"); + param_00 endon("end_remote"); + wait 2; + for(;;) + { + var_01 = 0; + while(self usebuttonpressed()) + { + var_01 = var_01 + 0.05; + if(var_01 > 0.75) + { + param_00 thread remoteuav_leave(); + return; + } + + wait 0.05; + } + + wait 0.05; + } +} + +//Function Number: 24 +remoteuav_track(param_00) +{ + level endon("game_ended"); + self endon("disconnect"); + param_00 endon("death"); + param_00 endon("end_remote"); + param_00.lasttrackingdialogtime = 0; + self.lockedtarget = undefined; + self weaponlockfree(); + wait 1; + for(;;) + { + var_01 = param_00 gettagorigin("tag_turret"); + var_02 = anglestoforward(self getplayerangles()); + var_03 = var_01 + var_02 * 1024; + var_04 = bullettrace(var_01,var_03,1,param_00); + if(isdefined(var_04["position"])) + { + var_05 = var_04["position"]; + } + else + { + var_05 = var_03; + var_04["endpos"] = var_03; + } + + param_00.var_3130 = var_04; + var_06 = remoteuav_trackentities(param_00,level.players,var_05); + var_07 = remoteuav_trackentities(param_00,level.turrets,var_05); + var_08 = undefined; + if(level.teambased) + { + var_08 = remoteuav_trackentities(param_00,level.uavmodels[level.otherteam[self.team]],var_05); + } + else + { + var_08 = remoteuav_trackentities(param_00,level.uavmodels,var_05); + } + + var_09 = undefined; + if(isdefined(var_06)) + { + var_09 = var_06; + } + else if(isdefined(var_07)) + { + var_09 = var_07; + } + else if(isdefined(var_08)) + { + var_09 = var_08; + } + + if(isdefined(var_09)) + { + if(!isdefined(self.lockedtarget) || isdefined(self.lockedtarget) && self.lockedtarget != var_09) + { + self weaponlockfinalize(var_09); + self.lockedtarget = var_09; + if(isdefined(var_06)) + { + param_00 notify("end_launch_dialog"); + remoteuav_dialog("track"); + } + } + } + else + { + self weaponlockfree(); + self.lockedtarget = undefined; + } + + wait 0.05; + } +} + +//Function Number: 25 +remoteuav_trackentities(param_00,param_01,param_02) +{ + level endon("game_ended"); + var_03 = undefined; + foreach(var_05 in param_01) + { + if(level.teambased && !isdefined(var_05.team) || var_05.team == self.team) + { + continue; + } + + if(isplayer(var_05)) + { + if(!maps\mp\_utility::isreallyalive(var_05)) + { + continue; + } + + if(var_05 == self) + { + continue; + } + + var_06 = var_05.guid; + } + else + { + var_06 = var_05.birthtime; + } + + if(isdefined(var_05.sentrytype) || isdefined(var_05.turrettype)) + { + var_07 = (0,0,32); + var_08 = "hud_fofbox_hostile_vehicle"; + } + else if(isdefined(var_05.uavtype)) + { + var_07 = (0,0,-52); + var_08 = "hud_fofbox_hostile_vehicle"; + } + else + { + var_07 = (0,0,26); + var_08 = "veh_hud_target_unmarked"; + } + + if(isdefined(var_05.uavremotemarkedby)) + { + if(!isdefined(param_00.markedplayers[var_06])) + { + param_00.markedplayers[var_06] = []; + param_00.markedplayers[var_06]["player"] = var_05; + param_00.markedplayers[var_06]["icon"] = var_05 maps\mp\_entityheadicons::setheadicon(self,"veh_hud_target_marked",var_07,10,10,0,0.05,0,0,0,0); + param_00.markedplayers[var_06]["icon"].shader = "veh_hud_target_marked"; + if(!isdefined(var_05.sentrytype) || !isdefined(var_05.turrettype)) + { + param_00.markedplayers[var_06]["icon"] settargetent(var_05); + } + } + else if(isdefined(param_00.markedplayers[var_06]) && isdefined(param_00.markedplayers[var_06]["icon"]) && isdefined(param_00.markedplayers[var_06]["icon"].shader) && param_00.markedplayers[var_06]["icon"].shader != "veh_hud_target_marked") + { + param_00.markedplayers[var_06]["icon"].shader = "veh_hud_target_marked"; + param_00.markedplayers[var_06]["icon"] setshader("veh_hud_target_marked",10,10); + param_00.markedplayers[var_06]["icon"] setwaypoint(0,0,0,0); + } + + continue; + } + + if(isplayer(var_05)) + { + var_09 = isdefined(var_05.spawntime) && gettime() - var_05.spawntime / 1000 <= 5; + var_0A = var_05 maps\mp\_utility::_hasperk("specialty_blindeye"); + var_0B = 0; + var_0C = 0; + } + else + { + var_09 = 0; + var_0A = 0; + var_0B = isdefined(var_07.carriedby); + var_0C = isdefined(var_06.isleaving) && var_06.isleaving == 1; + } + + if(!isdefined(param_00.markedplayers[var_06]) && !var_09 && !var_0A && !var_0B && !var_0C) + { + param_00.markedplayers[var_06] = []; + param_00.markedplayers[var_06]["player"] = var_05; + param_00.markedplayers[var_06]["icon"] = var_05 maps\mp\_entityheadicons::setheadicon(self,var_08,var_07,10,10,0,0.05,0,0,0,0); + param_00.markedplayers[var_06]["icon"].shader = var_08; + if(!isdefined(var_05.sentrytype) || !isdefined(var_05.turrettype)) + { + param_00.markedplayers[var_06]["icon"] settargetent(var_05); + } + } + + if(((!isdefined(var_03) || var_03 != var_05) && isdefined(param_00.var_3130["entity"]) && param_00.var_3130["entity"] == var_05 && !var_0B && !var_0C) || distance(var_05.origin,param_02) < 200 * param_00.var_3130["fraction"] && !var_09 && !var_0B && !var_0C || !var_0C && remoteuav_cantargetuav(param_00,var_05)) + { + var_0D = bullettrace(param_00.origin,var_05.origin + (0,0,32),1,param_00); + if((isdefined(var_0D["entity"]) && var_0D["entity"] == var_05) || var_0D["fraction"] == 1) + { + self playlocalsound("recondrone_lockon"); + var_03 = var_05; + } + } + } + + return var_03; +} + +//Function Number: 26 +remoteuav_cantargetuav(param_00,param_01) +{ + if(isdefined(param_01.uavtype)) + { + var_02 = anglestoforward(self getplayerangles()); + var_03 = vectornormalize(param_01.origin - param_00 gettagorigin("tag_turret")); + var_04 = vectordot(var_02,var_03); + if(var_04 > 0.985) + { + return 1; + } + } + + return 0; +} + +//Function Number: 27 +remoteuav_fire(param_00) +{ + self endon("disconnect"); + param_00 endon("death"); + level endon("game_ended"); + param_00 endon("end_remote"); + wait 1; + self notifyonplayercommand("remoteUAV_tag","+attack"); + self notifyonplayercommand("remoteUAV_tag","+attack_akimbo_accessible"); + for(;;) + { + self waittill("remoteUAV_tag"); + if(isdefined(self.lockedtarget)) + { + self playlocalsound("recondrone_tag"); + maps\mp\gametypes\_damagefeedback::updatedamagefeedback(""); + thread remoteuav_markplayer(self.lockedtarget); + thread remoteuav_rumble(param_00,3); + wait 0.25; + continue; + } + + wait 0.05; + } +} + +//Function Number: 28 +remoteuav_rumble(param_00,param_01) +{ + self endon("disconnect"); + param_00 endon("death"); + level endon("game_ended"); + param_00 endon("end_remote"); + param_00 notify("end_rumble"); + param_00 endon("end_rumble"); + for(var_02 = 0;var_02 < param_01;var_02++) + { + self playrumbleonentity("damage_heavy"); + wait 0.05; + } +} + +//Function Number: 29 +remoteuav_markplayer(param_00) +{ + level endon("game_ended"); + param_00.uavremotemarkedby = self; + if(isplayer(param_00) && !param_00 maps\mp\_utility::isusingremote()) + { + param_00 playlocalsound("player_hit_while_ads_hurt"); + param_00 thread maps\mp\_flashgrenades::applyflash(2,1); + param_00 thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_MARKED_BY_REMOTE_UAV"); + } + else if(isdefined(param_00.uavtype)) + { + param_00.birth_time = param_00.birthtime; + } + else if(isdefined(param_00.owner) && isalive(param_00.owner)) + { + param_00.owner thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_TURRET_MARKED_BY_REMOTE_UAV"); + } + + remoteuav_dialog("tag"); + thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_REMOTE_UAV_MARKED"); + if(level.gametype != "dm") + { + if(isplayer(param_00)) + { + lib_036E::func_2B7B("kill",self,undefined,1); + thread maps\mp\gametypes\_rank::giverankxp("kill"); + } + } + + if(isplayer(param_00)) + { + param_00 setperk("specialty_radarblip",1,0); + } + else + { + if(isdefined(param_00.uavtype)) + { + var_01 = "compassping_enemy_uav"; + } + else + { + var_01 = "compassping_sentry_enemy"; + } + + if(level.teambased) + { + var_02 = maps\mp\gametypes\_gameobjects::getnextobjid(); + objective_add(var_02,"invisible",(0,0,0)); + objective_onentity(var_02,param_00); + objective_state(var_02,"active"); + objective_team(var_02,self.team); + objective_icon(var_02,var_01); + param_00.remoteuavmarkedobjid01 = var_02; + } + else + { + var_02 = maps\mp\gametypes\_gameobjects::getnextobjid(); + objective_add(var_02,"invisible",(0,0,0)); + objective_onentity(var_02,param_00); + objective_state(var_02,"active"); + objective_team(var_02,level.otherteam[self.team]); + objective_icon(var_02,var_01); + param_00.remoteuavmarkedobjid02 = var_02; + var_02 = maps\mp\gametypes\_gameobjects::getnextobjid(); + objective_add(var_02,"invisible",(0,0,0)); + objective_onentity(var_02,param_00); + objective_state(var_02,"active"); + objective_team(var_02,self.team); + objective_icon(var_02,var_01); + param_00.remoteuavmarkedobjid03 = var_02; + } + } + + param_00 thread remoteuav_unmarkremovedplayer(self.remoteuav); +} + +//Function Number: 30 +remoteuav_processtaggedassist(param_00) +{ + remoteuav_dialog("assist"); + thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_REMOTE_UAV_ASSIST"); + if(level.gametype != "dm") + { + self.taggedassist = 1; + if(isdefined(param_00)) + { + thread lib_036E::func_2BA1(param_00); + return; + } + + lib_036E::func_2B7B("assist",self,undefined,1); + thread maps\mp\gametypes\_rank::giverankxp("assist"); + } +} + +//Function Number: 31 +remoteuav_unmarkremovedplayer(param_00) +{ + level endon("game_ended"); + var_01 = common_scripts\utility::waittill_any_return("death","disconnect","carried","leaving"); + if(var_01 == "leaving" || !isdefined(self.uavtype)) + { + self.uavremotemarkedby = undefined; + } + + if(isdefined(param_00)) + { + if(isplayer(self)) + { + var_02 = self.guid; + } + else if(isdefined(self.birthtime)) + { + var_02 = self.birthtime; + } + else + { + var_02 = self.birth_time; + } + + if(var_01 == "carried" || var_01 == "leaving") + { + param_00.markedplayers[var_02]["icon"] destroy(); + param_00.markedplayers[var_02]["icon"] = undefined; + } + + if(isdefined(var_02) && isdefined(param_00.markedplayers[var_02])) + { + param_00.markedplayers[var_02] = undefined; + param_00.markedplayers = common_scripts\utility::array_removeundefined(param_00.markedplayers); + } + } + + if(isplayer(self)) + { + self unsetperk("specialty_radarblip",1); + return; + } + + if(isdefined(self.remoteuavmarkedobjid01)) + { + maps\mp\_utility::_objective_delete(self.remoteuavmarkedobjid01); + } + + if(isdefined(self.remoteuavmarkedobjid02)) + { + maps\mp\_utility::_objective_delete(self.remoteuavmarkedobjid02); + } + + if(isdefined(self.remoteuavmarkedobjid03)) + { + maps\mp\_utility::_objective_delete(self.remoteuavmarkedobjid03); + } +} + +//Function Number: 32 +remoteuav_clearmarkedforowner() +{ + foreach(var_01 in self.markedplayers) + { + if(isdefined(var_01["icon"])) + { + var_01["icon"] destroy(); + var_01["icon"] = undefined; + } + } + + self.markedplayers = undefined; +} + +//Function Number: 33 +remoteuav_operationrumble(param_00) +{ + self endon("disconnect"); + param_00 endon("death"); + level endon("game_ended"); + param_00 endon("end_remote"); + for(;;) + { + self playrumbleonentity("damage_light"); + wait 0.5; + } +} + +//Function Number: 34 +remoteuav_watch_distance() +{ + self endon("death"); + self.rangetrigger = getent("remote_uav_range","targetname"); + if(!isdefined(self.rangetrigger)) + { + var_00 = getent("airstrikeheight","targetname"); + self.var_310E = var_00.origin[2]; + self.var_310F = 12800; + } + + self.var_3142 = spawn("script_model",level.mapcenter); + var_01 = self.origin; + self.var_3143 = 0; + for(;;) + { + if(!remoteuav_in_range()) + { + var_02 = 0; + while(!remoteuav_in_range()) + { + self.owner remoteuav_dialog("out_of_range"); + if(!self.var_3143) + { + self.var_3143 = 1; + thread remoteuav_rangecountdown(); + } + + if(isdefined(self.heliinproximity)) + { + var_03 = distance(self.origin,self.heliinproximity.origin); + var_02 = 1 - var_03 - 150 / 150; + } + else + { + var_03 = distance(self.origin,var_01); + var_02 = min(1,var_03 / 200); + } + + self.owner setplayerdata("reconDroneState","staticAlpha",var_02); + wait 0.05; + } + + self notify("in_range"); + self.var_3143 = 0; + thread remoteuav_staticfade(var_02); + } + + var_01 = self.origin; + wait 0.05; + } +} + +//Function Number: 35 +remoteuav_in_range() +{ + if(isdefined(self.rangetrigger)) + { + if(!self istouching(self.rangetrigger) && !self.largeprojectiledamage) + { + return 1; + } + } + else if(distance2d(self.origin,level.mapcenter) < self.var_310F && self.origin[2] < self.var_310E && !self.largeprojectiledamage) + { + return 1; + } + + return 0; +} + +//Function Number: 36 +remoteuav_staticfade(param_00) +{ + self endon("death"); + while(remoteuav_in_range()) + { + param_00 = param_00 - 0.05; + if(param_00 < 0) + { + self.owner setplayerdata("reconDroneState","staticAlpha",0); + break; + } + + self.owner setplayerdata("reconDroneState","staticAlpha",param_00); + wait 0.05; + } +} + +//Function Number: 37 +remoteuav_rangecountdown() +{ + self endon("death"); + self endon("in_range"); + if(isdefined(self.heliinproximity)) + { + var_00 = 3; + } + else + { + var_00 = 6; + } + + maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause(var_00); + self notify("death"); +} + +//Function Number: 38 +remoteuav_explode_on_disconnect() +{ + self endon("death"); + self.owner waittill("disconnect"); + self notify("death"); +} + +//Function Number: 39 +remoteuav_explode_on_changeteams() +{ + self endon("death"); + self.owner common_scripts\utility::waittill_any("joined_team","joined_spectators"); + self notify("death"); +} + +//Function Number: 40 +remoteuav_clear_marked_on_gameended() +{ + self endon("death"); + level waittill("game_ended"); + remoteuav_clearmarkedforowner(); +} + +//Function Number: 41 +remoteuav_leave_on_timeout() +{ + self endon("death"); + var_00 = 60; + maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause(var_00); + thread remoteuav_leave(); +} + +//Function Number: 42 +remoteuav_leave() +{ + level endon("game_ended"); + self endon("death"); + self notify("leaving"); + self.owner remoteuav_endride(self); + self notify("death"); +} + +//Function Number: 43 +remoteuav_explode_on_death() +{ + level endon("game_ended"); + self waittill("death"); + self playsound("recondrone_destroyed"); + playfx(level.remoteuav_fx["explode"],self.origin); + remoteuav_cleanup(); +} + +//Function Number: 44 +remoteuav_cleanup() +{ + if(self.playerlinked == 1 && isdefined(self.owner)) + { + self.owner remoteuav_endride(self); + } + + if(isdefined(self.scrambler)) + { + self.scrambler delete(); + } + + if(isdefined(self.var_3142)) + { + self.var_3142 delete(); + } + + remoteuav_clearmarkedforowner(); + stopfxontag(level.remoteuav_fx["smoke"],self,"tag_origin"); + level.remote_uav[self.team] = undefined; + maps\mp\_utility::decrementfauxvehiclecount(); + self delete(); +} + +//Function Number: 45 +remoteuav_light_fx() +{ + playfxontag(level.chopper_fx["light"]["belly"],self,"tag_light_nose"); + wait 0.05; + playfxontag(level.chopper_fx["light"]["tail"],self,"tag_light_tail1"); +} + +//Function Number: 46 +remoteuav_dialog(param_00) +{ + if(param_00 == "tag") + { + var_01 = 1000; + } + else + { + var_01 = 5000; + } + + if(gettime() - level.remoteuav_lastdialogtime < var_01) + { + return; + } + + level.remoteuav_lastdialogtime = gettime(); + var_02 = randomint(level.remoteuav_dialog[param_00].size); + var_03 = level.remoteuav_dialog[param_00][var_02]; + var_04 = maps\mp\gametypes\_teams::getteamvoiceprefix(self.team) + var_03; + self playlocalsound(var_04); +} + +//Function Number: 47 +remoteuav_handleincomingstinger() +{ + level endon("game_ended"); + self endon("death"); + self endon("end_remote"); + for(;;) + { + level waittill("stinger_fired",var_00,var_01,var_02); + if(!isdefined(var_01) || !isdefined(var_02) || var_02 != self) + { + continue; + } + + self.owner playlocalsound("javelin_clu_lock"); + self.owner setplayerdata("reconDroneState","incomingMissile",1); + self.hasincoming = 1; + self.incomingmissiles[self.incomingmissiles.size] = var_01; + var_01.owner = var_00; + var_01 thread watchstingerproximity(var_02); + } +} + +//Function Number: 48 +remoteuav_handleincomingsam() +{ + level endon("game_ended"); + self endon("death"); + self endon("end_remote"); + for(;;) + { + level waittill("sam_fired",var_00,var_01,var_02); + if(!isdefined(var_02) || var_02 != self) + { + continue; + } + + var_03 = 0; + foreach(var_05 in var_01) + { + if(isdefined(var_05)) + { + self.incomingmissiles[self.incomingmissiles.size] = var_05; + var_05.owner = var_00; + var_03++; + } + } + + if(var_03) + { + self.owner playlocalsound("javelin_clu_lock"); + self.owner setplayerdata("reconDroneState","incomingMissile",1); + self.hasincoming = 1; + level thread watchsamproximity(var_02,var_01); + } + } +} + +//Function Number: 49 +watchstingerproximity(param_00) +{ + level endon("game_ended"); + self endon("death"); + self missile_settargetent(param_00); + var_01 = vectornormalize(param_00.origin - self.origin); + while(isdefined(param_00)) + { + var_02 = param_00 getpointinbounds(0,0,0); + var_03 = distance(self.origin,var_02); + if(param_00.numflares > 0 && var_03 < 4000) + { + var_04 = param_00 deployflares(); + self missile_settargetent(var_04); + return; + } + else + { + var_04 = vectornormalize(var_01.origin - self.origin); + if(vectordot(var_04,var_02) < 0) + { + self playsound("exp_stinger_armor_destroy"); + playfx(level.remoteuav_fx["missile_explode"],self.origin); + if(isdefined(self.owner)) + { + radiusdamage(self.origin,400,1000,1000,self.owner,"MOD_EXPLOSIVE","stinger_mp"); + } + else + { + radiusdamage(self.origin,400,1000,1000,undefined,"MOD_EXPLOSIVE","stinger_mp"); + } + + self hide(); + wait 0.05; + self delete(); + continue; + } + + var_02 = var_04; + } + + wait 0.05; + } +} + +//Function Number: 50 +watchsamproximity(param_00,param_01) +{ + level endon("game_ended"); + param_00 endon("death"); + foreach(var_03 in param_01) + { + if(isdefined(var_03)) + { + var_03 missile_settargetent(param_00); + var_03.lastvectotarget = vectornormalize(param_00.origin - var_03.origin); + } + } + + while(param_01.size && isdefined(param_00)) + { + var_05 = param_00 getpointinbounds(0,0,0); + foreach(var_0D, var_03 in param_01) + { + if(isdefined(var_03)) + { + if(isdefined(self.markfordetete)) + { + self delete(); + continue; + } + + if(param_00.numflares > 0) + { + var_07 = distance(var_03.origin,var_05); + if(var_07 < 4000) + { + var_08 = param_00 deployflares(); + foreach(var_0A in param_01) + { + if(isdefined(var_0A)) + { + var_0A missile_settargetent(var_08); + } + } + + return; + } + + continue; + } + + var_0C = vectornormalize(var_04.origin - var_0D.origin); + if(vectordot(var_0C,var_0D.lastvectotarget) < 0) + { + var_0D playsound("exp_stinger_armor_destroy"); + playfx(level.remoteuav_fx["missile_explode"],var_0D.origin); + if(isdefined(var_0D.owner)) + { + radiusdamage(var_0D.origin,400,1000,1000,var_0D.owner,"MOD_EXPLOSIVE","stinger_mp"); + } + else + { + radiusdamage(var_0D.origin,400,1000,1000,undefined,"MOD_EXPLOSIVE","stinger_mp"); + } + + var_0D hide(); + var_0D.markfordetete = 1; + } + else + { + var_0D.lastvectotarget = var_0C; + } + } + } + + var_05 = common_scripts\utility::array_removeundefined(var_05); + wait 0.05; + } +} + +//Function Number: 51 +deployflares() +{ + self.numflares--; + self.owner thread remoteuav_rumble(self,6); + self playsound("WEAP_SHOTGUNATTACH_FIRE_NPC"); + thread playflarefx(); + var_00 = self.origin + (0,0,-100); + var_01 = spawn("script_origin",var_00); + var_01.angles = self.angles; + var_01 movegravity((0,0,-1),5); + var_01 thread deleteaftertime(5); + return var_01; +} + +//Function Number: 52 +playflarefx() +{ + for(var_00 = 0;var_00 < 5;var_00++) + { + if(!isdefined(self)) + { + return; + } + + playfxontag(level._effect["ac130_flare"],self,"TAG_FLARE"); + wait 0.15; + } +} + +//Function Number: 53 +deleteaftertime(param_00) +{ + wait param_00; + self delete(); +} + +//Function Number: 54 +remoteuav_clearincomingwarning() +{ + level endon("game_ended"); + self endon("death"); + self endon("end_remote"); + for(;;) + { + var_00 = 0; + for(var_01 = 0;var_01 < self.incomingmissiles.size;var_01++) + { + if(isdefined(self.incomingmissiles[var_01]) && missile_isincoming(self.incomingmissiles[var_01],self)) + { + var_00++; + } + } + + if(self.hasincoming && !var_00) + { + self.hasincoming = 0; + self.owner setplayerdata("reconDroneState","incomingMissile",0); + } + + self.incomingmissiles = common_scripts\utility::array_removeundefined(self.incomingmissiles); + wait 0.05; + } +} + +//Function Number: 55 +missile_isincoming(param_00,param_01) +{ + var_02 = vectornormalize(param_01.origin - param_00.origin); + var_03 = anglestoforward(param_00.angles); + return vectordot(var_02,var_03) > 0; +} + +//Function Number: 56 +remoteuav_watchheliproximity() +{ + level endon("game_ended"); + self endon("death"); + self endon("end_remote"); + for(;;) + { + var_00 = 0; + foreach(var_02 in level.helis) + { + if(distance(var_02.origin,self.origin) < 300) + { + var_00 = 1; + self.heliinproximity = var_02; + } + } + + foreach(var_05 in level.littlebirds) + { + if(var_05 != self && !isdefined(var_05.helitype) || var_05.helitype != "remote_uav" && distance(var_05.origin,self.origin) < 300) + { + var_00 = 1; + self.heliinproximity = var_05; + } + } + + if(!self.largeprojectiledamage && var_00) + { + self.largeprojectiledamage = 1; + } + else if(self.largeprojectiledamage && !var_00) + { + self.largeprojectiledamage = 0; + self.heliinproximity = undefined; + } + + wait 0.05; + } +} + +//Function Number: 57 +remoteuav_handledamage() +{ + level endon("game_ended"); + self endon("death"); + self endon("end_remote"); + for(;;) + { + self waittill("damage",var_00,var_01,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09); + if(isdefined(self.specialdamagecallback)) + { + self [[ self.specialdamagecallback ]](undefined,var_01,var_00,var_08,var_04,var_09,var_03,var_02,undefined,undefined,var_05,var_07); + } + } +} + +//Function Number: 58 +callback_vehicledamage(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A,param_0B) +{ + if(self.destroyed == 1) + { + return; + } + + var_0C = self.team; + if(isdefined(param_01.team)) + { + var_0D = param_01.team; + } + else + { + var_0D = "none"; + } + + if(!isdefined(param_01) || param_01 != self.owner && level.teambased && var_0D == var_0C) + { + return; + } + + if(isdefined(param_03) && param_03 & level.idflags_penetration) + { + self.wasdamagedfrombulletpenetration = 1; + } + + var_0E = param_02; + if(isplayer(param_01)) + { + param_01 maps\mp\gametypes\_damagefeedback::updatedamagefeedback("remote_uav"); + if(param_01 maps\mp\_utility::_hasperk("specialty_armorpiercing")) + { + var_0E = param_02 * level.armorpiercingmod; + } + } + + if(isdefined(param_01.owner) && isplayer(param_01.owner)) + { + param_01.owner maps\mp\gametypes\_damagefeedback::updatedamagefeedback("remote_uav"); + } + + if(isdefined(param_05)) + { + switch(param_05) + { + case "javelin_mp": + case "stinger_mp": + case "remote_mortar_missile_mp": + case "remotemissile_projectile_mp": + case "ac130_40mm_mp": + case "ac130_105mm_mp": + self.var_30C8 = 1; + var_0E = self.maxhealth + 1; + break; + + case "bomb_site_mp": + case "emp_grenade_mp": + self.var_30C8 = 0; + var_0E = self.maxhealth + 1; + break; + } + } + + if(isdefined(param_04) && param_04 == "MOD_MELEE") + { + var_0E = self.maxhealth + 1; + } + + self.damagetaken = self.damagetaken + var_0E; + playfxontagforclients(level.remoteuav_fx["hit"],self,"tag_origin",self.owner); + self playsound("recondrone_damaged"); + if(self.smoking == 0 && self.damagetaken >= self.maxhealth / 2) + { + self.smoking = 1; + playfxontag(level.remoteuav_fx["smoke"],self,"tag_origin"); + } + + if(self.damagetaken >= self.maxhealth && (level.teambased && var_0C != var_0D) || !level.teambased) + { + self.destroyed = 1; + var_0F = undefined; + if(isdefined(param_01.owner) && !isdefined(self.owner) || param_01.owner != self.owner) + { + var_0F = param_01.owner; + } + else if(!isdefined(self.owner) || param_01 != self.owner) + { + var_0F = param_01; + } + + if(!isdefined(param_01.owner) && param_01.classname == "script_vehicle") + { + var_0F = undefined; + } + + if(isdefined(param_01.class) && param_01.class == "worldspawn") + { + var_0F = undefined; + } + + if(param_01.classname == "trigger_hurt") + { + var_0F = undefined; + } + + if(isdefined(var_0F)) + { + var_0F notify("destroyed_killstreak",param_05); + thread maps\mp\_utility::teamplayercardsplash("callout_destroyed_remote_uav",var_0F); + var_0F thread maps\mp\gametypes\_rank::giverankxp("kill",50,param_05,param_04); + var_0F thread maps\mp\gametypes\_rank::func_2F45(&"SPLASHES_DESTROYED_REMOTE_UAV"); + thread maps\mp\gametypes\_missions::vehiclekilled(self.owner,self,undefined,var_0F,param_02,param_04,param_05); + } + + self notify("death"); + } +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/killstreaks/_tank.gsc b/MW3/PC/MP/maps/mp/killstreaks/_tank.gsc new file mode 100644 index 0000000..ed7dcc6 --- /dev/null +++ b/MW3/PC/MP/maps/mp/killstreaks/_tank.gsc @@ -0,0 +1,2141 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\killstreaks\_tank.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 80 + * Decompile Time: 1404 ms + * Timestamp: 10/27/2023 2:15:26 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ +} + +//Function Number: 2 +func_3869(param_00,param_01,param_02) +{ + var_03 = self dospawn("tank",param_00); + var_03.health = 3000; + var_03.targeting_delay = 1; + var_03.team = param_00.team; + var_03.pers["team"] = var_03.team; + var_03.owner = param_00; + var_03 setcandamage(1); + var_03.var_386A = 12; + var_03 thread func_386B(); + var_03 func_38A8(); + var_03.damagecallback = ::callback_vehicledamage; + return var_03; +} + +//Function Number: 3 +func_386B() +{ + self endon("death"); + var_00 = self.origin[2]; + for(;;) + { + if(var_00 - self.origin[2] > 2048) + { + self.health = 0; + self notify("death"); + return; + } + + wait 1; + } +} + +//Function Number: 4 +func_386C(param_00) +{ + return func_386D(); +} + +//Function Number: 5 +func_386D() +{ + if(isdefined(level.var_386E) && level.var_386E) + { + self iprintlnbold("Armor support unavailable."); + return 0; + } + + if(!isdefined(getvehiclenode("startnode","targetname"))) + { + self iprintlnbold("Tank is currently not supported in this level, bug your friendly neighborhood LD."); + return 0; + } + + if(!vehicle_getspawnerarray().size) + { + return 0; + } + + if(self.team == "allies") + { + var_00 = level.var_386F["allies"] func_3869(self,"vehicle_bradley"); + } + else + { + var_00 = level.var_386F["axis"] func_3869(self,"vehicle_bmp"); + } + + var_00 func_3870(); + return 1; +} + +//Function Number: 6 +func_3870(param_00) +{ + var_01 = getvehiclenode("startnode","targetname"); + var_02 = getvehiclenode("waitnode","targetname"); + self.var_3871 = getvehiclenodearray("info_vehicle_node","classname"); + level.var_386E = 1; + thread func_3883(var_01,var_02); + thread func_3886(); + level.tank = self; + if(level.teambased) + { + var_03 = maps\mp\gametypes\_gameobjects::getnextobjid(); + objective_add(var_03,"invisible",(0,0,0)); + objective_team(var_03,"allies"); + level.tank.objid["allies"] = var_03; + var_04 = maps\mp\gametypes\_gameobjects::getnextobjid(); + objective_add(var_04,"invisible",(0,0,0)); + objective_team(var_04,"axis"); + level.tank.objid["axis"] = var_04; + var_05 = self.team; + level.tank.team = var_05; + level.tank.pers["team"] = var_05; + } + + var_06 = spawnturret("misc_turret",self.origin,"abrams_minigun_mp"); + var_06 linkto(self,"tag_engine_left",(0,0,-20),(0,0,0)); + var_06 setmodel("sentry_minigun"); + var_06.angles = self.angles; + var_06.owner = self.owner; + var_06 maketurretinoperable(); + self.mgturret = var_06; + self.mgturret setdefaultdroppitch(0); + var_07 = self.angles; + self.angles = (0,0,0); + var_08 = self gettagorigin("tag_flash"); + self.angles = var_07; + var_09 = var_08 - self.origin; + thread func_3875(); + thread func_3876(); + self.var_3873 = gettime(); + var_0A = spawn("script_origin",self gettagorigin("tag_flash")); + var_0A linkto(self,"tag_origin",var_09,(0,0,0)); + var_0A hide(); + self.var_3874 = var_0A; + thread func_3893(); + thread func_388F(); + thread func_389F(); + thread func_3881(); + thread func_388C(); +} + +//Function Number: 7 +func_3875() +{ + self endon("death"); + self.owner endon("disconnect"); + self.owner waittill("joined_team"); + self.health = 0; + self notify("death"); +} + +//Function Number: 8 +func_3876() +{ + self endon("death"); + self.owner waittill("disconnect"); + self.health = 0; + self notify("death"); +} + +//Function Number: 9 +func_3877(param_00) +{ + if(self.veh_pathdir != param_00) + { + if(param_00 == "forward") + { + func_3880(); + return; + } + + func_387F(); + } +} + +//Function Number: 10 +func_3878() +{ + self endon("death"); + self notify("path_abandoned"); + while(isdefined(self.var_3879)) + { + wait 0.05; + } + + var_00 = 2; + self vehicle_setspeed(var_00,10,10); + self.var_387A = "engage"; +} + +//Function Number: 11 +func_387B() +{ + self endon("death"); + self notify("path_abandoned"); + while(isdefined(self.var_3879)) + { + wait 0.05; + } + + var_00 = 2; + self vehicle_setspeed(var_00,10,10); + self.var_387A = "engage"; +} + +//Function Number: 12 +func_387C() +{ + self endon("death"); + while(isdefined(self.var_3879)) + { + wait 0.05; + } + + self vehicle_setspeed(self.var_386A,10,10); + self.var_387A = "standard"; +} + +//Function Number: 13 +func_387D() +{ + self endon("death"); + while(isdefined(self.var_3879)) + { + wait 0.05; + } + + self vehicle_setspeed(15,15,15); + self.var_387A = "evade"; + wait 1.5; + self vehicle_setspeed(self.var_386A,10,10); +} + +//Function Number: 14 +func_387E() +{ + self endon("death"); + while(isdefined(self.var_3879)) + { + wait 0.05; + } + + self vehicle_setspeed(5,5,5); + self.var_387A = "danger"; +} + +//Function Number: 15 +func_387F() +{ + func_38D9("tank changing direction at " + gettime()); + self vehicle_setspeed(0,5,6); + self.var_3879 = 1; + while(self.veh_speed > 0) + { + wait 0.05; + } + + wait 0.25; + self.var_3879 = undefined; + func_38D9("tank done changing direction"); + self.veh_transmission = "reverse"; + self.veh_pathdir = "reverse"; + self vehicle_setspeed(self.var_386A,5,6); +} + +//Function Number: 16 +func_3880() +{ + func_38D9("tank changing direction at " + gettime()); + self vehicle_setspeed(0,5,6); + self.var_3879 = 1; + while(self.veh_speed > 0) + { + wait 0.05; + } + + wait 0.25; + self.var_3879 = undefined; + func_38D9("tank done changing direction"); + self.veh_transmission = "forward"; + self.veh_pathdir = "forward"; + self vehicle_setspeed(self.var_386A,5,6); +} + +//Function Number: 17 +func_3881() +{ + self endon("death"); + var_00 = []; + var_01 = level.players; + self.var_3882 = 0; + for(;;) + { + foreach(var_03 in var_01) + { + if(!isdefined(var_03)) + { + continue; + } + + if(var_03.team == self.team) + { + wait 0.05; + continue; + } + + var_04 = distance2d(var_03.origin,self.origin); + if(var_04 < 2048) + { + self.var_3882++; + } + + wait 0.05; + } + + if(isdefined(self.var_387A) && self.var_387A == "evade" || self.var_387A == "engage") + { + self.var_3882 = 0; + continue; + } + + if(self.var_3882 > 1) + { + thread func_387E(); + } + else + { + thread func_387C(); + } + + self.var_3882 = 0; + wait 0.05; + } +} + +//Function Number: 18 +func_3883(param_00,param_01) +{ + self endon("tankDestroyed"); + self endon("death"); + if(!isdefined(level.var_3884)) + { + self startpath(param_00); + return; + } + + self attachpath(param_00); + self startpath(param_00); + param_00 notify("trigger",self,1); + wait 0.05; + for(;;) + { + while(isdefined(self.var_3879)) + { + wait 0.05; + } + + var_02 = func_38AA(); + if(isdefined(var_02)) + { + self.var_3885 = var_02; + } + else + { + self.var_3885 = undefined; + } + + wait 0.65; + } +} + +//Function Number: 19 +callback_vehicledamage(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A,param_0B) +{ + if((param_01 == self || param_01 == self.mgturret || isdefined(param_01.pers) && param_01.pers["team"] == self.team) && param_01 != self.owner || param_04 == "MOD_MELEE") + { + return; + } + + var_0C = func_388E(param_04,param_02,param_01); + self vehicle_finishdamage(param_00,param_01,var_0C,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A,param_0B); +} + +//Function Number: 20 +func_3886() +{ + self endon("death"); + self.damagetaken = 0; + var_00 = self vehicle_getspeed(); + var_01 = self.health; + var_02 = 0; + var_03 = 0; + var_04 = 0; + for(;;) + { + self waittill("damage",var_05,var_06,var_07,var_08,var_09); + if(isdefined(var_06.classname) && var_06.classname == "script_vehicle") + { + if(isdefined(self.besttarget) && self.besttarget != var_06) + { + self.var_3887 = var_06; + thread func_3897(); + } + } + else if(isplayer(var_06)) + { + var_06 maps\mp\gametypes\_damagefeedback::updatedamagefeedback("hitHelicopter"); + if(var_06 maps\mp\_utility::_hasperk("specialty_armorpiercing")) + { + var_0A = var_05 * level.armorpiercingmod; + self.health = self.health - int(var_0A); + } + } + + if(self.health <= 0) + { + self notify("death"); + return; + } + else if(self.health < var_01 / 4 && var_04 == 0) + { + var_04 = 1; + } + else if(self.health < var_01 / 2 && var_03 == 0) + { + var_03 = 1; + } + else if(self.health < var_01 / 1.5 && var_02 == 0) + { + var_02 = 1; + } + + if(var_05 > 1000) + { + func_3888(var_06); + } + } +} + +//Function Number: 21 +func_3888(param_00) +{ + self endon("death"); + var_01 = randomint(100); + if(isdefined(self.besttarget) && self.besttarget != param_00 && var_01 > 30) + { + var_02 = []; + func_3897(1,self.besttarget); + thread func_3895(var_7B); + return; + } + + if(!isdefined(self.besttarget) && var_02 > 30) + { + var_02 = []; + thread func_3895(var_7B); + return; + } + + if(var_02 < 30) + { + playfx(level.var_3889,self.origin); + thread func_387D(); + return; + } + + self fireweapon(); + self playsound("bmp_fire"); +} + +//Function Number: 22 +func_388A(param_00) +{ + self endon("death"); + var_01 = func_388B(param_00); + var_02 = distance(self.origin,param_00.origin); + if(randomint(4) < 3) + { + return; + } + + if(var_01 == "front" && var_02 < 768) + { + thread func_387D(); + return; + } + + if(var_01 == "rear_side" || var_01 == "rear" && var_02 >= 768) + { + playfx(level.var_3889,self.origin); + thread func_387D(); + return; + } + + if(var_01 == "rear" && var_02 < 768) + { + func_387F(); + func_387D(); + wait 4; + func_3880(); + return; + } + + if(var_01 == "front_side" || var_01 == "front") + { + playfx(level.var_3889,self.origin); + func_387F(); + func_387D(); + wait 8; + func_3880(); + return; + } +} + +//Function Number: 23 +func_388B(param_00) +{ + self endon("death"); + param_00 endon("death"); + param_00 endon("disconnect"); + var_01 = anglestoforward(self.angles); + var_02 = param_00.origin - self.origin; + var_01 = var_01 * (1,1,0); + var_02 = var_02 * (1,1,0); + var_02 = vectornormalize(var_02); + var_01 = vectornormalize(var_01); + var_03 = vectordot(var_02,var_01); + if(var_03 > 0) + { + if(var_03 > 0.9) + { + return "front"; + } + else + { + return "front_side"; + } + } + else if(var_03 < -0.9) + { + return "rear"; + } + else + { + return "rear_side"; + } + + param_00 iprintlnbold(var_03); +} + +//Function Number: 24 +func_388C() +{ + self endon("death"); + for(;;) + { + var_00 = []; + var_01 = level.players; + foreach(var_03 in var_01) + { + if(!isdefined(var_03)) + { + wait 0.05; + continue; + } + + if(!istarget(var_03)) + { + wait 0.05; + continue; + } + + var_04 = var_03 getcurrentweapon(); + if(issubstr(var_04,"at4") || issubstr(var_04,"stinger") || issubstr(var_04,"javelin")) + { + thread func_388A(var_03); + wait 8; + } + + wait 0.15; + } + } +} + +//Function Number: 25 +func_388D() +{ + if(!isdefined(self.owner) || !isdefined(self.owner.pers["team"]) || self.owner.pers["team"] != self.team) + { + self notify("abandoned"); + return 0; + } + + return 1; +} + +//Function Number: 26 +drawline(param_00,param_01,param_02,param_03) +{ + var_04 = int(param_02 * 20); + for(var_05 = 0;var_05 < var_04;var_05++) + { + wait 0.05; + } +} + +//Function Number: 27 +func_388E(param_00,param_01,param_02) +{ + if(param_00 == "MOD_RIFLE_BULLET") + { + return param_01; + } + + if(param_00 == "MOD_PISTOL_BULLET") + { + return param_01; + } + + if(param_00 == "MOD_IMPACT") + { + return param_01; + } + + if(param_00 == "MOD_MELEE") + { + return 0; + } + + if(param_00 == "MOD_EXPLOSIVE_BULLET") + { + return param_01; + } + + if(param_00 == "MOD_GRENADE") + { + return param_01 * 5; + } + + if(param_00 == "MOD_GRENADE_SPLASH") + { + return param_01 * 5; + } + + return param_01 * 10; +} + +//Function Number: 28 +func_388F() +{ + self waittill("death"); + if(level.teambased) + { + var_00 = level.tank.team; + objective_state(level.tank.objid[var_00],"invisible"); + objective_state(level.tank.objid[level.otherteam[var_00]],"invisible"); + } + + self notify("tankDestroyed"); + self vehicle_setspeed(0,10,10); + level.var_386E = 0; + playfx(level.spawnfire,self.origin); + playfx(level.tankfire,self.origin); + func_38A9(); + var_01 = spawn("script_model",self.origin); + var_01 setmodel("vehicle_m1a1_abrams_d_static"); + var_01.angles = self.angles; + self.mgturret delete(); + self delete(); + wait 4; + var_01 delete(); +} + +//Function Number: 29 +func_3891() +{ + self notify("onTargOrTimeOut"); + self endon("onTargOrTimeOut"); + self endon("turret_on_target"); + self waittill("turret_pitch_clamped"); + thread func_3897(0,self.besttarget); +} + +//Function Number: 30 +fireontarget() +{ + self endon("abandonedTarget"); + self endon("killedTarget"); + self endon("death"); + self endon("targetRemoved"); + self endon("lostLOS"); + for(;;) + { + func_3891(); + if(!isdefined(self.besttarget)) + { + continue; + } + + var_00 = self gettagorigin("tag_flash"); + var_01 = bullettrace(self.origin,var_00,0,self); + if(var_01["position"] != var_00) + { + thread func_3897(0,self.besttarget); + } + + var_01 = bullettrace(var_00,self.besttarget.origin,1,self); + var_02 = distance(self.origin,var_01["position"]); + var_03 = distance(self.besttarget.origin,self.origin); + if(var_02 < 384 || var_02 + 256 < var_03) + { + wait 0.5; + if(var_02 > 384) + { + func_3892(); + self fireweapon(); + self playsound("bmp_fire"); + self.var_3873 = gettime(); + } + + var_04 = func_388B(self.besttarget); + thread func_3897(0,self.besttarget); + return; + } + + func_3892(); + self fireweapon(); + self playsound("bmp_fire"); + self.var_3873 = gettime(); + } +} + +//Function Number: 31 +func_3892() +{ + self endon("abandonedTarget"); + self endon("killedTarget"); + self endon("death"); + self endon("targetRemoved"); + self endon("lostLOS"); + var_00 = gettime() - self.var_3873; + if(var_00 < 1499) + { + wait 1.5 - var_00 / 1000; + } +} + +//Function Number: 32 +func_3893(param_00) +{ + self endon("death"); + self endon("leaving"); + var_01 = []; + for(;;) + { + var_01 = []; + var_02 = level.players; + if(isdefined(self.var_3887)) + { + var_01 = []; + var_01[0] = self.var_3887; + func_3895(var_01); + self.var_3887 = undefined; + } + + if(isdefined(level.var_3894) && level.var_3894.team != self.team && isalive(level.var_3894)) + { + if(func_389C(level.tank)) + { + var_01[var_01.size] = level.tank; + } + } + + if(isdefined(level.chopper) && level.chopper.team != self.team && isalive(level.chopper)) + { + if(func_389C(level.chopper)) + { + var_01[var_01.size] = level.chopper; + } + } + + foreach(var_04 in var_02) + { + if(!isdefined(var_04)) + { + wait 0.05; + continue; + } + + if(isdefined(param_00) && var_04 == param_00) + { + continue; + } + + if(istarget(var_04)) + { + if(isdefined(var_04)) + { + var_01[var_01.size] = var_04; + } + + continue; + } + + continue; + } + + if(var_01.size > 0) + { + func_3895(var_01); + continue; + } + + wait 1; + } +} + +//Function Number: 33 +func_3895(param_00) +{ + self endon("death"); + if(param_00.size == 1) + { + self.besttarget = param_00[0]; + } + else + { + self.besttarget = getbesttarget(param_00); + } + + thread func_3878(); + thread watchtargetdeath(param_00); + self setturrettargetent(self.besttarget); + fireontarget(); + thread func_3896(); +} + +//Function Number: 34 +func_3896() +{ + self endon("death"); + func_387C(); + func_389A(); + self setturrettargetent(self.var_3874); +} + +//Function Number: 35 +getbesttarget(param_00) +{ + self endon("death"); + var_01 = self gettagorigin("tag_flash"); + var_02 = self.origin; + var_03 = undefined; + var_04 = undefined; + var_05 = 0; + foreach(var_07 in param_00) + { + var_08 = abs(vectortoangles(var_07.origin - self.origin)[1]); + var_09 = abs(self gettagangles("tag_flash")[1]); + var_08 = abs(var_08 - var_09); + if(isdefined(level.chopper) && var_07 == level.chopper) + { + return var_07; + } + + if(isdefined(level.var_3894) && var_07 == level.var_3894) + { + return var_07; + } + + var_0A = var_07 getweaponslistitems(); + foreach(var_0C in var_0A) + { + if(issubstr(var_0C,"at4") || issubstr(var_0C,"jav") || issubstr(var_0C,"c4")) + { + var_08 = var_08 - 40; + } + } + + if(!isdefined(var_03)) + { + var_03 = var_08; + var_04 = var_07; + continue; + } + + if(var_03 > var_08) + { + var_03 = var_08; + var_04 = var_07; + } + } + + return var_04; +} + +//Function Number: 36 +watchtargetdeath(param_00) +{ + self endon("abandonedTarget"); + self endon("lostLOS"); + self endon("death"); + self endon("targetRemoved"); + var_01 = self.besttarget; + var_01 endon("disconnect"); + var_01 waittill("death"); + self notify("killedTarget"); + func_389A(); + func_387C(); + thread func_3896(); +} + +//Function Number: 37 +func_3897(param_00,param_01) +{ + self endon("death"); + self notify("abandonedTarget"); + func_387C(); + thread func_3896(); + func_389A(); + if(isdefined(param_01)) + { + self.var_3898 = param_01; + func_3899(); + } + + if(isdefined(param_00) && param_00) + { + } +} + +//Function Number: 38 +func_3899() +{ + self endon("death"); + wait 1.5; + self.var_3898 = undefined; +} + +//Function Number: 39 +func_389A() +{ + self notify("targetRemoved"); + self.besttarget = undefined; + self.var_389B = undefined; +} + +//Function Number: 40 +func_389C(param_00) +{ + if(distance2d(param_00.origin,self.origin) > 4096) + { + return 0; + } + + if(distance(param_00.origin,self.origin) < 512) + { + return 0; + } + + return func_389D(param_00,0); +} + +//Function Number: 41 +istarget(param_00) +{ + self endon("death"); + var_01 = distancesquared(param_00.origin,self.origin); + if(!level.teambased && isdefined(self.owner) && param_00 == self.owner) + { + return 0; + } + + if(!isalive(param_00) || param_00.sessionstate != "playing") + { + return 0; + } + + if(var_01 > 16777216) + { + return 0; + } + + if(var_01 < 262144) + { + return 0; + } + + if(!isdefined(param_00.pers["team"])) + { + return 0; + } + + if(param_00 == self.owner) + { + return 0; + } + + if(level.teambased && param_00.pers["team"] == self.team) + { + return 0; + } + + if(param_00.pers["team"] == "spectator") + { + return 0; + } + + if(isdefined(param_00.spawntime) && gettime() - param_00.spawntime / 1000 <= 5) + { + return 0; + } + + if(param_00 maps\mp\_utility::_hasperk("specialty_blindeye")) + { + return 0; + } + + return self vehicle_canturrettargetpoint(param_00.origin,1,self); +} + +//Function Number: 42 +func_389D(param_00,param_01) +{ + var_02 = param_00 sightconetrace(self gettagorigin("tag_turret"),self); + if(var_02 < 0.7) + { + return 0; + } + + if(isdefined(param_01) && param_01) + { + thread drawline(param_00.origin,self gettagorigin("tag_turret"),10,(1,0,0)); + } + + return 1; +} + +//Function Number: 43 +func_389E(param_00) +{ + self endon("death"); + if(!isalive(param_00) || param_00.sessionstate != "playing") + { + return 0; + } + + if(!isdefined(param_00.pers["team"])) + { + return 0; + } + + if(param_00 == self.owner) + { + return 0; + } + + if(distancesquared(param_00.origin,self.origin) > 1048576) + { + return 0; + } + + if(level.teambased && param_00.pers["team"] == self.team) + { + return 0; + } + + if(param_00.pers["team"] == "spectator") + { + return 0; + } + + if(isdefined(param_00.spawntime) && gettime() - param_00.spawntime / 1000 <= 5) + { + return 0; + } + + if(isdefined(self)) + { + var_01 = self.mgturret.origin + (0,0,64); + var_02 = param_00 sightconetrace(var_01,self); + if(var_02 < 1) + { + return 0; + } + } + + return 1; +} + +//Function Number: 44 +func_389F() +{ + self endon("death"); + self endon("leaving"); + var_00 = []; + for(;;) + { + var_00 = []; + var_01 = level.players; + for(var_02 = 0;var_02 <= var_01.size;var_02++) + { + if(func_389E(var_01[var_02])) + { + if(isdefined(var_01[var_02])) + { + var_00[var_00.size] = var_01[var_02]; + } + } + else + { + continue; + } + + wait 0.05; + } + + if(var_00.size > 0) + { + func_38A1(var_00); + return; + } + else + { + wait 0.5; + } + } +} + +//Function Number: 45 +func_38A0(param_00) +{ + self endon("death"); + var_01 = self.origin; + var_02 = undefined; + var_03 = undefined; + foreach(var_05 in param_00) + { + var_06 = distance(self.origin,var_05.origin); + var_07 = var_05 getcurrentweapon(); + if(issubstr(var_07,"at4") || issubstr(var_07,"jav") || issubstr(var_07,"c4") || issubstr(var_07,"smart") || issubstr(var_07,"grenade")) + { + var_06 = var_06 - 200; + } + + if(!isdefined(var_02)) + { + var_02 = var_06; + var_03 = var_05; + continue; + } + + if(var_02 > var_06) + { + var_02 = var_06; + var_03 = var_05; + } + } + + return var_03; +} + +//Function Number: 46 +func_38A1(param_00) +{ + self endon("death"); + if(param_00.size == 1) + { + self.var_38A2 = param_00[0]; + } + else + { + self.var_38A2 = func_38A0(param_00); + } + + if(distance2d(self.origin,self.var_38A2.origin) > 768) + { + thread func_387B(); + } + + self notify("acquiringMiniTarget"); + self.mgturret settargetentity(self.var_38A2,(0,0,64)); + wait 0.15; + thread func_38A3(); + thread func_38A4(param_00); + thread func_38A5(param_00); + thread func_38A6(self.var_38A2); +} + +//Function Number: 47 +func_38A3() +{ + self endon("death"); + self endon("abandonedMiniTarget"); + self endon("killedMiniTarget"); + var_00 = undefined; + var_01 = gettime(); + if(!isdefined(self.var_38A2)) + { + return; + } + + for(;;) + { + if(!isdefined(self.mgturret getturrettarget(1))) + { + if(!isdefined(var_00)) + { + var_00 = gettime(); + } + + var_02 = gettime(); + if(var_00 - var_02 > 1) + { + var_00 = undefined; + thread func_38A7(); + return; + } + + wait 0.5; + continue; + } + + if(gettime() > var_01 + 1000 && !isdefined(self.besttarget)) + { + if(distance2d(self.origin,self.var_38A2.origin) > 768) + { + var_01[0] = self.var_38A2; + func_3895(var_05); + } + } + + var_04 = randomintrange(10,16); + for(var_05 = 0;var_05 < var_04;var_05++) + { + self.mgturret shootturret(); + wait 0.1; + } + + wait randomfloatrange(0.5,3); + } +} + +//Function Number: 48 +func_38A4(param_00) +{ + self endon("abandonedMiniTarget"); + self endon("death"); + if(!isdefined(self.var_38A2)) + { + return; + } + + self.var_38A2 waittill("death"); + self notify("killedMiniTarget"); + self.var_38A2 = undefined; + self.mgturret cleartargetentity(); + func_389F(); +} + +//Function Number: 49 +func_38A5(param_00) +{ + self endon("abandonedMiniTarget"); + self endon("death"); + for(;;) + { + if(!isdefined(self.var_38A2)) + { + return; + } + + var_01 = bullettrace(self.mgturret.origin,self.var_38A2.origin,0,self); + var_02 = distance(self.origin,var_01["position"]); + if(var_02 > 1024) + { + thread func_38A7(); + return; + } + + wait 2; + } +} + +//Function Number: 50 +func_38A6(param_00) +{ + self endon("abandonedMiniTarget"); + self endon("death"); + self endon("killedMiniTarget"); + for(;;) + { + var_01 = []; + var_02 = level.players; + for(var_03 = 0;var_03 <= var_02.size;var_03++) + { + if(func_389E(var_02[var_03])) + { + if(!isdefined(var_02[var_03])) + { + continue; + } + + if(!isdefined(param_00)) + { + return; + } + + var_04 = distance(self.origin,param_00.origin); + var_05 = distance(self.origin,var_02[var_03].origin); + if(var_05 < var_04) + { + thread func_38A7(); + return; + } + } + + wait 0.05; + } + + wait 0.25; + } +} + +//Function Number: 51 +func_38A7(param_00) +{ + self notify("abandonedMiniTarget"); + self.var_38A2 = undefined; + self.mgturret cleartargetentity(); + if(isdefined(param_00) && param_00) + { + return; + } + + thread func_389F(); +} + +//Function Number: 52 +func_38A8() +{ + level.tanks[self getentitynumber()] = self; +} + +//Function Number: 53 +func_38A9() +{ + level.tanks[self getentitynumber()] = undefined; +} + +//Function Number: 54 +func_38AA() +{ + var_00 = []; + foreach(var_02 in level.players) + { + if(var_02.team == "spectator") + { + continue; + } + + if(var_02.team == self.team) + { + continue; + } + + if(!isalive(var_02)) + { + continue; + } + + var_02.dist = 0; + var_00[var_00.size] = var_02; + } + + if(!var_00.size) + { + return undefined; + } + + for(var_04 = 0;var_04 < var_00.size;var_04++) + { + for(var_05 = var_04 + 1;var_05 < var_00.size;var_05++) + { + var_06 = distancesquared(var_00[var_04].origin,var_00[var_05].origin); + var_00[var_04].dist = var_00[var_04].dist + var_06; + var_00[var_05].dist = var_00[var_05].dist + var_06; + } + } + + var_07 = var_00[0]; + foreach(var_02 in var_00) + { + if(var_02.dist < var_07.dist) + { + var_07 = var_02; + } + } + + var_0A = var_07.origin; + var_0B = sortbydistance(level.var_3884,var_0A); + return var_0B[0]; +} + +//Function Number: 55 +func_38AC() +{ + var_00 = []; + var_01 = []; + var_02 = []; + var_03 = []; + var_04 = getvehiclenode("startnode","targetname"); + var_00[var_00.size] = var_04; + var_01[var_01.size] = var_04; + while(isdefined(var_04.target)) + { + var_05 = var_04; + var_04 = getvehiclenode(var_04.target,"targetname"); + var_04.var_147B = var_05; + if(var_04 == var_00[0]) + { + break; + } + + var_00[var_00.size] = var_04; + if(!isdefined(var_04.target)) + { + return; + } + } + + var_00[0].var_38AD = []; + var_00[0] thread func_38B7("forward"); + var_03[var_03.size] = var_00[0]; + var_06 = getvehiclenodearray("branchnode","targetname"); + foreach(var_08 in var_06) + { + var_04 = var_08; + var_00[var_00.size] = var_04; + var_01[var_01.size] = var_04; + while(isdefined(var_04.target)) + { + var_05 = var_04; + var_04 = getvehiclenode(var_04.target,"targetname"); + var_00[var_00.size] = var_04; + var_04.var_147B = var_05; + if(!isdefined(var_04.target)) + { + var_02[var_02.size] = var_04; + } + } + } + + foreach(var_04 in var_00) + { + var_0B = 0; + foreach(var_0D in var_01) + { + if(var_0D == var_04) + { + continue; + } + + if(var_0D.target == var_04.targetname) + { + continue; + } + + if(isdefined(var_04.target) && var_04.target == var_0D.targetname) + { + continue; + } + + if(distance2d(var_04.origin,var_0D.origin) > 80) + { + continue; + } + + var_0D thread func_38B9(var_04,"reverse"); + var_0D.var_147B = var_04; + if(!isdefined(var_04.var_38AD)) + { + var_04.var_38AD = []; + } + + var_04.var_38AD[var_04.var_38AD.size] = var_0D; + var_0B = 1; + } + + if(var_0B) + { + var_04 thread func_38B7("forward"); + } + + var_0F = 0; + foreach(var_11 in var_02) + { + if(var_11 == var_04) + { + continue; + } + + if(!isdefined(var_04.target)) + { + continue; + } + + if(var_04.target == var_11.targetname) + { + continue; + } + + if(isdefined(var_11.target) && var_11.target == var_04.targetname) + { + continue; + } + + if(distance2d(var_04.origin,var_11.origin) > 80) + { + continue; + } + + var_11 thread func_38B9(var_04,"forward"); + var_11.var_38AE = getvehiclenode(var_04.targetname,"targetname"); + var_11.var_38AF = distance(var_11.origin,var_04.origin); + if(!isdefined(var_04.var_38AD)) + { + var_04.var_38AD = []; + } + + var_04.var_38AD[var_04.var_38AD.size] = var_11; + var_0F = 1; + } + + if(var_0F) + { + var_04 thread func_38B7("reverse"); + } + + if(var_0F || var_0B) + { + var_03[var_03.size] = var_04; + } + } + + if(var_03.size < 3) + { + level notify("end_tankPathHandling"); + return; + } + + var_14 = []; + foreach(var_04 in var_00) + { + if(!isdefined(var_04.var_38AD)) + { + continue; + } + + var_14[var_14.size] = var_04; + } + + foreach(var_18 in var_14) + { + var_04 = var_18; + var_19 = 0; + while(isdefined(var_04.target)) + { + var_1A = var_04; + var_04 = getvehiclenode(var_04.target,"targetname"); + var_19 = var_19 + distance(var_04.origin,var_1A.origin); + if(var_04 == var_18) + { + break; + } + + if(isdefined(var_04.var_38AD)) + { + break; + } + } + + if(var_19 > 1000) + { + var_04 = var_18; + var_1B = 0; + while(isdefined(var_04.target)) + { + var_1A = var_04; + var_04 = getvehiclenode(var_04.target,"targetname"); + var_1B = var_1B + distance(var_04.origin,var_1A.origin); + if(var_1B < var_19 / 2) + { + continue; + } + + var_04.var_38AD = []; + var_04 thread func_38B7("forward"); + var_03[var_03.size] = var_04; + break; + } + } + } + + level.var_3884 = func_38C2(var_03); + foreach(var_04 in var_00) + { + if(!isdefined(var_04.var_38B0)) + { + var_04 thread func_38BA(); + } + } +} + +//Function Number: 56 +func_38B1(param_00) +{ + var_01 = []; + foreach(var_04, var_03 in self.var_38B2) + { + if(self.var_38B3[var_04] != param_00) + { + continue; + } + + var_01[var_01.size] = var_03; + } + + return var_01[randomint(var_01.size)]; +} + +//Function Number: 57 +func_38B4(param_00,param_01) +{ + var_02 = level.var_3884[self.var_38B0]; + var_03 = func_38CA(var_02,param_00,undefined,param_01); + var_04 = var_03[0].var_38B5; + var_05 = func_38CA(var_02,param_00,undefined,level.var_38B6[param_01]); + var_06 = var_05[0].var_38B5; + if(!getdvarint("tankDebug")) + { + var_06 = 9999999; + } + + if(var_04 <= var_06) + { + return var_03[1]; + } +} + +//Function Number: 58 +func_38B7(param_00) +{ + level endon("end_tankPathHandling"); + for(;;) + { + self waittill("trigger",var_01,var_02); + var_03 = level.var_3884[self.var_38B0]; + var_01.node = self; + var_04 = undefined; + if(isdefined(var_01.var_3885) && var_01.var_3885 != var_03) + { + var_04 = func_38B4(var_01.var_3885,var_01.veh_pathdir); + if(!isdefined(var_04)) + { + var_01 thread func_3877(level.var_38B6[var_01.veh_pathdir]); + } + } + + if(!isdefined(var_04) || var_04 == var_03) + { + var_04 = var_03 func_38B1(var_01.veh_pathdir); + } + + var_05 = var_03.var_38B8[var_04.var_38B0]; + if(var_01.veh_pathdir == "forward") + { + var_06 = func_38C0(); + } + else + { + var_06 = func_38C1(); + } + + if(var_06 != var_05) + { + var_01 startpath(var_05); + } + } +} + +//Function Number: 59 +func_38B9(param_00,param_01) +{ + for(;;) + { + self waittill("trigger",var_02); + if(var_02.veh_pathdir != param_01) + { + continue; + } + + func_38D9("tank starting path at join node: " + param_00.var_38B0); + var_02 startpath(param_00); + } +} + +//Function Number: 60 +func_38BA() +{ + self.var_38BB = func_38BE().var_38B0; + self.var_38BC = func_38BF().var_38B0; + for(;;) + { + self waittill("trigger",var_00,var_01); + var_00.node = self; + var_00.var_38BB = self.var_38BB; + var_00.var_38BC = self.var_38BC; + if(!isdefined(self.target) || self.targetname == "branchnode") + { + var_02 = "TRANS"; + } + else + { + var_02 = "NODE"; + } + + if(isdefined(var_01)) + { + func_38DA(self.origin,var_02,(1,0.5,0),1,2,100); + continue; + } + + func_38DA(self.origin,var_02,(0,1,0),1,2,100); + } +} + +//Function Number: 61 +func_38BD(param_00,param_01,param_02) +{ + param_01 endon("trigger"); + param_00 endon("trigger"); + param_02 endon("death"); + var_03 = distancesquared(param_02.origin,param_01.origin); + var_04 = param_02.veh_pathdir; + func_38DA(param_00.origin + (0,0,30),"LAST",(0,0,1),0.5,1,100); + func_38DA(param_01.origin + (0,0,60),"NEXT",(0,1,0),0.5,1,100); + var_05 = 0; + for(;;) + { + wait 0.05; + if(var_04 != param_02.veh_pathdir) + { + func_38D9("tank missed node: reversing direction"); + param_02 thread func_38BD(param_01,param_00,param_02); + return; + } + + if(var_05) + { + func_38D9("... sending notify."); + param_01 notify("trigger",param_02,1); + return; + } + + var_06 = distancesquared(param_02.origin,param_01.origin); + if(var_06 > var_03) + { + var_05 = 1; + func_38D9("tank missed node: forcing notify in one frame..."); + } + + var_03 = var_06; + } +} + +//Function Number: 62 +func_38BE() +{ + for(var_00 = self;!isdefined(var_00.var_38B0);var_00 = var_00 func_38C0()) + { + } + + return var_00; +} + +//Function Number: 63 +func_38BF() +{ + for(var_00 = self;!isdefined(var_00.var_38B0);var_00 = var_00 func_38C1()) + { + } + + return var_00; +} + +//Function Number: 64 +func_38C0() +{ + if(isdefined(self.target)) + { + return getvehiclenode(self.target,"targetname"); + } + + return self.var_38AE; +} + +//Function Number: 65 +func_38C1() +{ + return self.var_147B; +} + +//Function Number: 66 +func_38C2(param_00) +{ + var_01 = []; + foreach(var_03 in param_00) + { + var_04 = spawnstruct(); + var_04.var_38C3 = []; + var_04.var_38B2 = []; + var_04.var_38C4 = []; + var_04.var_38B3 = []; + var_04.var_38B8 = []; + var_04.node = var_03; + var_04.origin = var_03.origin; + var_04.var_38B0 = var_01.size; + var_03.var_38B0 = var_01.size; + func_38DA(var_04.origin + (0,0,80),var_04.var_38B0,(1,1,1),0.65,2,100000); + var_01[var_01.size] = var_04; + } + + foreach(var_03 in param_00) + { + var_07 = var_03.var_38B0; + var_08 = getvehiclenode(var_03.target,"targetname"); + var_09 = distance(var_03.origin,var_08.origin); + var_0A = var_08; + while(!isdefined(var_08.var_38B0)) + { + var_09 = var_09 + distance(var_08.origin,var_08.var_147B.origin); + if(isdefined(var_08.target)) + { + var_08 = getvehiclenode(var_08.target,"targetname"); + continue; + } + + var_08 = var_08.var_38AE; + } + + var_01[var_07] func_38C5(var_01[var_08.var_38B0],var_09,"forward",var_0A); + var_08 = var_03.var_147B; + var_09 = distance(var_03.origin,var_08.origin); + var_0A = var_08; + while(!isdefined(var_08.var_38B0)) + { + var_09 = var_09 + distance(var_08.origin,var_08.var_147B.origin); + var_08 = var_08.var_147B; + } + + var_01[var_07] func_38C5(var_01[var_08.var_38B0],var_09,"reverse",var_0A); + foreach(var_0C in var_03.var_38AD) + { + var_08 = var_0C; + var_09 = distance(var_03.origin,var_08.origin); + var_0A = var_08; + if(var_08.targetname == "branchnode") + { + while(!isdefined(var_08.var_38B0)) + { + if(isdefined(var_08.target)) + { + var_0D = getvehiclenode(var_08.target,"targetname"); + } + else + { + var_0D = var_08.var_38AE; + } + + var_09 = var_09 + distance(var_08.origin,var_0D.origin); + var_08 = var_0D; + } + + var_01[var_07] func_38C5(var_01[var_08.var_38B0],var_09,"forward",var_0A); + continue; + } + + while(!isdefined(var_08.var_38B0)) + { + var_09 = var_09 + distance(var_08.origin,var_08.var_147B.origin); + var_08 = var_08.var_147B; + } + + var_01[var_07] func_38C5(var_01[var_08.var_38B0],var_09,"reverse",var_0A); + } + } + + return var_01; +} + +//Function Number: 67 +func_38C5(param_00,param_01,param_02,param_03) +{ + self.var_38B2[param_00.var_38B0] = param_00; + self.var_38C4[param_00.var_38B0] = param_01; + self.var_38B3[param_00.var_38B0] = param_02; + self.var_38B8[param_00.var_38B0] = param_03; + var_04 = spawnstruct(); + var_04.var_38C6 = param_00; + var_04.var_38C7 = param_00.var_38B0; + var_04.var_38AF = param_01; + var_04.direction = param_02; + var_04.var_38C9 = param_03; + self.var_38C3[param_00.var_38B0] = var_04; +} + +//Function Number: 68 +func_38CA(param_00,param_01,param_02,param_03) +{ + level.var_38CB = []; + level.var_38CC = []; + var_04 = 0; + var_05 = []; + if(!isdefined(param_02)) + { + param_02 = []; + } + + param_01.var_38B5 = 0; + param_01.var_38CD = func_38D4(param_01,param_00); + param_01.var_38CE = param_01.var_38B5 + param_01.var_38CD; + func_38D3(param_01); + var_06 = param_01; + for(;;) + { + foreach(var_08 in var_06.var_38B2) + { + if(is_in_array(param_02,var_08)) + { + continue; + } + + if(is_in_array(level.var_38CC,var_08)) + { + continue; + } + + if(isdefined(param_03) && var_08.var_38B3[var_06.var_38B0] != param_03) + { + continue; + } + + if(!is_in_array(level.var_38CB,var_08)) + { + func_38D0(var_08); + var_08.var_38CF = var_06; + var_08.var_38B5 = func_38D5(var_08,var_06); + var_08.var_38CD = func_38D4(var_08,param_00); + var_08.var_38CE = var_08.var_38B5 + var_08.var_38CD; + if(var_08 == param_00) + { + var_04 = 1; + } + + continue; + } + + if(var_08.var_38B5 < func_38D5(var_06,var_08)) + { + continue; + } + + var_08.var_38CF = var_06; + var_08.var_38B5 = func_38D5(var_08,var_06); + var_08.var_38CE = var_08.var_38B5 + var_08.var_38CD; + } + + if(var_04) + { + break; + } + + func_38D3(var_06); + var_0A = level.var_38CB[0]; + foreach(var_0C in level.var_38CB) + { + if(var_0C.var_38CE > var_0A.var_38CE) + { + continue; + } + + var_0A = var_0C; + } + + func_38D3(var_0A); + var_06 = var_0A; + } + + var_06 = param_00; + while(var_06 != param_01) + { + var_05[var_05.size] = var_06; + var_06 = var_06.var_38CF; + } + + var_05[var_05.size] = var_06; + return var_05; +} + +//Function Number: 69 +func_38D0(param_00) +{ + param_00.var_38D1 = level.var_38CB.size; + level.var_38CB[level.var_38CB.size] = param_00; + param_00.var_38D2 = undefined; +} + +//Function Number: 70 +func_38D3(param_00) +{ + if(isdefined(param_00.var_38D2)) + { + return; + } + + param_00.var_38D2 = level.var_38CC.size; + level.var_38CC[level.var_38CC.size] = param_00; + if(!is_in_array(level.var_38CB,param_00)) + { + return; + } + + level.var_38CB[param_00.var_38D1] = level.var_38CB[level.var_38CB.size - 1]; + level.var_38CB[param_00.var_38D1].var_38D1 = param_00.var_38D1; + level.var_38CB[level.var_38CB.size - 1] = undefined; + param_00.var_38D1 = undefined; +} + +//Function Number: 71 +func_38D4(param_00,param_01) +{ + return distance(param_00.node.origin,param_01.node.origin); +} + +//Function Number: 72 +func_38D5(param_00,param_01) +{ + return param_00.var_38CF.var_38B5 + param_00.var_38C4[param_01.var_38B0]; +} + +//Function Number: 73 +is_in_array(param_00,param_01) +{ + for(var_02 = 0;var_02 < param_00.size;var_02++) + { + if(param_00[var_02] == param_01) + { + return 1; + } + } + + return 0; +} + +//Function Number: 74 +func_38D6(param_00) +{ + for(var_01 = 1;var_01 < param_00.size;var_01++) + { + var_02 = param_00[var_01 - 1]; + var_03 = param_00[var_01]; + if(var_02.var_38B3[var_03.var_38B0] == "reverse") + { + level thread func_38D8(var_02.node.origin,var_03.node.origin,(1,0,0)); + } + else + { + level thread func_38D8(var_02.node.origin,var_03.node.origin,(0,1,0)); + } + + var_04 = var_02.var_38B8[var_03.var_38B0]; + level thread func_38D8(var_02.node.origin + (0,0,4),var_04.origin + (0,0,4),(0,0,1)); + if(var_02.var_38B3[var_03.var_38B0] == "reverse") + { + while(!isdefined(var_04.var_38B0)) + { + var_05 = var_04; + var_04 = var_04.var_147B; + level thread func_38D8(var_05.origin + (0,0,4),var_04.origin + (0,0,4),(0,1,1)); + } + + continue; + } + + while(!isdefined(var_04.var_38B0)) + { + var_05 = var_04; + if(isdefined(var_04.target)) + { + var_04 = getvehiclenode(var_04.target,"targetname"); + continue; + } + + var_04 = var_04.var_38AE; + level thread func_38D8(var_05.origin + (0,0,4),var_04.origin + (0,0,4),(0,1,1)); + } + } +} + +//Function Number: 75 +func_38D7(param_00) +{ +} + +//Function Number: 76 +func_38D8(param_00,param_01,param_02) +{ + level endon("endpath"); + wait 0.05; +} + +//Function Number: 77 +func_38D9(param_00) +{ +} + +//Function Number: 78 +debugprint(param_00) +{ +} + +//Function Number: 79 +func_38DA(param_00,param_01,param_02,param_03,param_04,param_05) +{ +} + +//Function Number: 80 +func_38DB() +{ +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/killstreaks/_teamammorefill.gsc b/MW3/PC/MP/maps/mp/killstreaks/_teamammorefill.gsc new file mode 100644 index 0000000..2284723 --- /dev/null +++ b/MW3/PC/MP/maps/mp/killstreaks/_teamammorefill.gsc @@ -0,0 +1,87 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\killstreaks\_teamammorefill.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 4 + * Decompile Time: 91 ms + * Timestamp: 10/27/2023 2:14:37 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level.killstreakfuncs["team_ammo_refill"] = ::tryuseteamammorefill; +} + +//Function Number: 2 +tryuseteamammorefill(param_00) +{ + var_01 = giveteamammorefill(); + if(var_01) + { + maps\mp\_matchdata::logkillstreakevent("team_ammo_refill",self.origin); + } + + return var_01; +} + +//Function Number: 3 +giveteamammorefill() +{ + if(level.teambased) + { + foreach(var_01 in level.players) + { + if(var_01.team == self.team) + { + var_01 refillammo(1); + } + } + } + else + { + refillammo(1); + } + + level thread maps\mp\_utility::teamplayercardsplash("used_team_ammo_refill",self); + return 1; +} + +//Function Number: 4 +refillammo(param_00) +{ + var_01 = self getweaponslistall(); + if(param_00) + { + if(maps\mp\_utility::_hasperk("specialty_tacticalinsertion") && self getammocount("flare_mp") < 1) + { + maps\mp\_utility::giveperk("specialty_tacticalinsertion",0); + } + + if(maps\mp\_utility::_hasperk("specialty_scrambler") && self getammocount("scrambler_mp") < 1) + { + maps\mp\_utility::giveperk("specialty_scrambler",0); + } + + if(maps\mp\_utility::_hasperk("specialty_portable_radar") && self getammocount("portable_radar_mp") < 1) + { + maps\mp\_utility::giveperk("specialty_portable_radar",0); + } + } + + foreach(var_03 in var_01) + { + if(issubstr(var_03,"grenade") || getsubstr(var_03,0,2) == "gl") + { + if(!param_00 || self getammocount(var_03) >= 1) + { + continue; + } + } + + self givemaxammo(var_03); + } + + self playlocalsound("ammo_crate_use"); +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/killstreaks/_uav.gsc b/MW3/PC/MP/maps/mp/killstreaks/_uav.gsc new file mode 100644 index 0000000..dc00d6a --- /dev/null +++ b/MW3/PC/MP/maps/mp/killstreaks/_uav.gsc @@ -0,0 +1,1058 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\killstreaks\_uav.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 38 + * Decompile Time: 829 ms + * Timestamp: 10/27/2023 2:14:40 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + precachestring(&"MP_WAR_RADAR_ACQUIRED"); + precachestring(&"MP_WAR_RADAR_ACQUIRED_ENEMY"); + precachestring(&"MP_WAR_RADAR_EXPIRED"); + precachestring(&"MP_WAR_RADAR_EXPIRED_ENEMY"); + precachestring(&"MP_WAR_COUNTER_RADAR_ACQUIRED"); + precachestring(&"MP_WAR_COUNTER_RADAR_ACQUIRED_ENEMY"); + precachestring(&"MP_WAR_COUNTER_RADAR_EXPIRED"); + precachestring(&"MP_WAR_COUNTER_RADAR_EXPIRED_ENEMY"); + precachestring(&"MP_LASE_TARGET_FOR_PREDATOR_STRIKE"); + precachemodel("vehicle_uav_static_mp"); + precachemodel("vehicle_phantom_ray"); + precacheitem("uav_strike_marker_mp"); + precacheitem("uav_strike_projectile_mp"); + level.radarviewtime = 30; + level.uavblocktime = 30; + level.uav_fx["explode"] = loadfx("explosions/uav_advanced_death"); + level.uav_fx["trail"] = loadfx("smoke/advanced_uav_contrail"); + level.killstreakfuncs["uav"] = ::tryuseuav; + level.killstreakfuncs["uav_support"] = ::tryuseuavsupport; + level.killstreakfuncs["uav_2"] = ::tryuseuav; + level.killstreakfuncs["double_uav"] = ::tryusedoubleuav; + level.killstreakfuncs["triple_uav"] = ::tryusetripleuav; + level.killstreakfuncs["counter_uav"] = ::tryusecounteruav; + level.killstreakfuncs["uav_strike"] = ::tryuseuavstrike; + level.killstreaksetupfuncs["uav_strike"] = ::uavstrikesetup; + level.killstreakfuncs["directional_uav"] = ::tryusedirectionaluav; + level._effect["laserTarget"] = loadfx("misc/laser_glow"); + var_00 = getentarray("minimap_corner","targetname"); + if(var_00.size) + { + var_01 = maps\mp\gametypes\_spawnlogic::findboxcenter(var_00[0].origin,var_00[1].origin); + } + else + { + var_01 = (0,0,0); + } + + level.uavrig = spawn("script_model",var_01); + level.uavrig setmodel("c130_zoomrig"); + level.uavrig.angles = (0,115,0); + level.uavrig hide(); + level.uavrig.targetname = "uavrig_script_model"; + level.uavrig thread rotateuavrig(); + if(level.teambased) + { + level.radarmode["allies"] = "normal_radar"; + level.radarmode["axis"] = "normal_radar"; + level.activeuavs["allies"] = 0; + level.activeuavs["axis"] = 0; + level.activecounteruavs["allies"] = 0; + level.activecounteruavs["axis"] = 0; + level.uavmodels["allies"] = []; + level.uavmodels["axis"] = []; + } + else + { + level.radarmode = []; + level.activeuavs = []; + level.activecounteruavs = []; + level.uavmodels = []; + level thread onplayerconnect(); + } + + level thread uavtracker(); +} + +//Function Number: 2 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + level.activeuavs[var_00.guid] = 0; + level.activeuavs[var_00.guid + "_radarStrength"] = 0; + level.activecounteruavs[var_00.guid] = 0; + level.radarmode[var_00.guid] = "normal_radar"; + } +} + +//Function Number: 3 +rotateuavrig() +{ + for(;;) + { + self rotateyaw(-360,60); + wait 60; + } +} + +//Function Number: 4 +launchuav(param_00,param_01,param_02,param_03) +{ + if(param_03 == "counter_uav") + { + var_04 = 1; + } + else + { + var_04 = 0; + } + + var_05 = spawn("script_model",level.uavrig gettagorigin("tag_origin")); + var_05.value = 1; + if(param_03 == "double_uav") + { + var_05.value = 2; + } + else if(param_03 == "triple_uav") + { + var_05.value = 3; + } + + if(var_05.value != 3) + { + var_05 setmodel("vehicle_uav_static_mp"); + var_05 thread damagetracker(var_04,0); + } + else + { + var_05 setmodel("vehicle_phantom_ray"); + var_05 thread spawnfxdelay(level.uav_fx["trail"],"tag_jet_trail"); + var_05 thread damagetracker(var_04,1); + } + + var_05.team = param_01; + var_05.owner = param_00; + var_05.timetoadd = 0; + var_05 thread handleincomingstinger(); + var_05 adduavmodel(); + var_06 = randomintrange(3000,5000); + if(isdefined(level.spawnpoints)) + { + var_07 = level.spawnpoints; + } + else + { + var_07 = level.startspawnpoints; + } + + var_08 = var_07[0]; + foreach(var_0A in var_07) + { + if(var_0A.origin[2] < var_08.origin[2]) + { + var_08 = var_0A; + } + } + + var_0C = var_08.origin[2]; + var_0D = level.uavrig.origin[2]; + if(var_0C < 0) + { + var_0D = var_0D + var_0C * -1; + var_0C = 0; + } + + var_0E = var_0D - var_0C; + if(var_0E + var_06 > 8100) + { + var_06 = var_06 - var_0E + var_06 - 8100; + } + + var_0F = randomint(360); + var_10 = randomint(2000) + 5000; + var_11 = cos(var_0F) * var_10; + var_12 = sin(var_0F) * var_10; + var_13 = vectornormalize((var_11,var_12,var_06)); + var_13 = var_13 * randomintrange(6000,7000); + var_05 linkto(level.uavrig,"tag_origin",var_13,(0,var_0F - 90,0)); + var_05 thread updateuavmodelvisibility(); + if(var_04) + { + var_05.uavtype = "counter"; + var_05 addactivecounteruav(); + } + else + { + var_05 addactiveuav(); + var_05.uavtype = "standard"; + } + + if(isdefined(level.activeuavs[param_01])) + { + foreach(var_15 in level.uavmodels[param_01]) + { + if(var_15 == var_05) + { + continue; + } + + if(var_15.uavtype == "counter" && var_04) + { + var_15.timetoadd = var_15.timetoadd + 5; + continue; + } + + if(var_15.uavtype == "standard" && !var_04) + { + var_15.timetoadd = var_15.timetoadd + 5; + } + } + } + + level notify("uav_update"); + switch(param_03) + { + case "uav_strike": + param_02 = 2; + break; + + default: + param_02 = param_02 - 7; + break; + } + + var_05 waittill_notify_or_timeout_hostmigration_pause("death",param_02); + if(var_05.damagetaken < var_05.maxhealth) + { + var_05 unlink(); + var_17 = var_05.origin + anglestoforward(var_05.angles) * 20000; + var_05 moveto(var_17,60); + playfxontag(level._effect["ac130_engineeffect"],var_05,"tag_origin"); + var_05 waittill_notify_or_timeout_hostmigration_pause("death",3); + if(var_05.damagetaken < var_05.maxhealth) + { + var_05 notify("leaving"); + var_05.isleaving = 1; + var_05 moveto(var_17,4,4,0); + } + + var_05 waittill_notify_or_timeout_hostmigration_pause("death",4 + var_05.timetoadd); + } + + if(var_04) + { + var_05 removeactivecounteruav(); + } + else + { + var_05 removeactiveuav(); + } + + var_05 delete(); + var_05 removeuavmodel(); + if(param_03 == "directional_uav") + { + param_00.radarshowenemydirection = 0; + if(level.teambased) + { + foreach(var_19 in level.players) + { + if(var_19.pers["team"] == param_01) + { + var_19.radarshowenemydirection = 0; + } + } + } + } + + level notify("uav_update"); +} + +//Function Number: 5 +spawnfxdelay(param_00,param_01) +{ + self endon("death"); + level endon("game_ended"); + wait 0.5; + playfxontag(param_00,self,param_01); +} + +//Function Number: 6 +monitoruavstrike() +{ + level endon("game_ended"); + for(;;) + { + var_00 = common_scripts\utility::waittill_any_return("death","uav_strike_cancel","uav_strike_successful"); + if(var_00 == "uav_strike_successful") + { + return 1; + } + else + { + return 0; + } + } +} + +//Function Number: 7 +showlazemessage() +{ + var_00 = maps\mp\gametypes\_hud_util::createfontstring("bigfixed",0.75); + var_00 maps\mp\gametypes\_hud_util::setpoint("CENTER","CENTER",0,150); + var_00 settext(&"MP_LASE_TARGET_FOR_PREDATOR_STRIKE"); + common_scripts\utility::waittill_any_timeout(4,"death","uav_strike_cancel","uav_strike_successful"); + var_00 maps\mp\gametypes\_hud_util::destroyelem(); +} + +//Function Number: 8 +waitforlazediscard() +{ + level endon("game_ended"); + self endon("death"); + self endon("uav_strike_used"); + for(;;) + { + self waittill("weapon_change",var_00); + if(var_00 != "uav_strike_marker_mp") + { + self notify("uav_strike_cancel"); + break; + } + else + { + wait 0.05; + } + } +} + +//Function Number: 9 +waitforlazedtarget() +{ + level endon("game_ended"); + self endon("death"); + thread showlazemessage(); + thread waitforlazediscard(); + var_00 = common_scripts\utility::getlastweapon(); + var_01 = undefined; + var_02 = self getweaponslistprimaries(); + foreach(var_04 in var_02) + { + if(var_04 != var_00) + { + var_01 = var_04; + self takeweapon(var_01); + break; + } + } + + maps\mp\_utility::_giveweapon("uav_strike_marker_mp"); + self switchtoweapon("uav_strike_marker_mp"); + var_06 = undefined; + for(;;) + { + var_07 = common_scripts\utility::waittill_any_return("weapon_fired","uav_strike_cancel"); + if(var_07 == "uav_strike_cancel") + { + break; + } + + var_08 = self geteye(); + var_09 = anglestoforward(self getplayerangles()); + var_0A = var_08 + var_09 * 15000; + var_06 = bullettrace(var_08,var_0A,1,self); + if(isdefined(var_06["position"])) + { + break; + } + } + + if(isdefined(var_06)) + { + self notify("uav_strike_used"); + var_0B = var_06["position"]; + var_0C = spawnfx(level._effect["laserTarget"],var_0B); + triggerfx(var_0C); + var_0C thread waitfxentdie(); + magicbullet("uav_strike_projectile_mp",var_0B + (0,0,4000),var_0B,self); + } + + self takeweapon("uav_strike_marker_mp"); + if(var_07 != "uav_strike_cancel") + { + self switchtoweapon(var_00); + } + + if(isdefined(var_01)) + { + maps\mp\_utility::_giveweapon(var_01); + } + + if(isdefined(var_06)) + { + self notify("uav_strike_successful"); + } +} + +//Function Number: 10 +waitfxentdie() +{ + wait 2; + self delete(); +} + +//Function Number: 11 +waittill_notify_or_timeout_hostmigration_pause(param_00,param_01) +{ + self endon(param_00); + maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause(param_01); +} + +//Function Number: 12 +updateuavmodelvisibility() +{ + self endon("death"); + for(;;) + { + level common_scripts\utility::waittill_either("joined_team","uav_update"); + self hide(); + foreach(var_01 in level.players) + { + if(level.teambased) + { + if(var_01.team != self.team) + { + self showtoplayer(var_01); + } + + continue; + } + + if(isdefined(self.owner) && var_01 == self.owner) + { + continue; + } + + self showtoplayer(var_01); + } + } +} + +//Function Number: 13 +damagetracker(param_00,param_01) +{ + level endon("game_ended"); + self setcandamage(1); + self.health = 999999; + if(param_01) + { + self.maxhealth = 2000; + } + else + { + self.maxhealth = 1000; + } + + self.damagetaken = 0; + for(;;) + { + self waittill("damage",var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09,var_0A,var_0B); + if(!isplayer(var_03)) + { + if(!isdefined(self)) + { + return; + } + + continue; + } + + if(isdefined(var_0A) && var_0A & level.idflags_penetration) + { + self.wasdamagedfrombulletpenetration = 1; + } + + self.wasdamaged = 1; + var_0C = var_02; + if(isplayer(var_03)) + { + var_03 maps\mp\gametypes\_damagefeedback::updatedamagefeedback(""); + if(var_06 == "MOD_RIFLE_BULLET" || var_06 == "MOD_PISTOL_BULLET") + { + if(var_03 maps\mp\_utility::_hasperk("specialty_armorpiercing")) + { + var_0C = var_0C + var_02 * level.armorpiercingmod; + } + } + } + + if(isdefined(var_0B)) + { + switch(var_0B) + { + case "javelin_mp": + case "stinger_mp": + self.var_30C8 = 1; + var_0C = self.maxhealth + 1; + break; + + case "sam_projectile_mp": + self.var_30C8 = 1; + var_0D = 0.25; + if(param_01) + { + var_0D = 0.15; + } + + var_0C = self.maxhealth * var_0D; + break; + } + } + + self.damagetaken = self.damagetaken + var_0C; + if(self.damagetaken >= self.maxhealth) + { + if(isplayer(var_03) && !isdefined(self.owner) || var_03 != self.owner) + { + self hide(); + var_0E = anglestoright(self.angles) * 200; + playfx(level.uav_fx["explode"],self.origin,var_0E); + if(isdefined(self.uavtype) && self.uavtype == "remote_mortar") + { + thread maps\mp\_utility::teamplayercardsplash("callout_destroyed_remote_mortar",var_03); + } + else if(param_00) + { + thread maps\mp\_utility::teamplayercardsplash("callout_destroyed_counter_uav",var_03); + } + else + { + thread maps\mp\_utility::teamplayercardsplash("callout_destroyed_uav",var_03); + } + + thread maps\mp\gametypes\_missions::vehiclekilled(self.owner,self,undefined,var_03,var_02,var_06,var_0B); + var_03 thread maps\mp\gametypes\_rank::giverankxp("kill",50,var_0B,var_06); + var_03 notify("destroyed_killstreak"); + if(isdefined(self.uavremotemarkedby) && self.uavremotemarkedby != var_03) + { + self.uavremotemarkedby thread maps\mp\killstreaks\_remoteuav::remoteuav_processtaggedassist(); + } + } + + self notify("death"); + return; + } + } +} + +//Function Number: 14 +tryuseuav(param_00) +{ + return func_356B("uav"); +} + +//Function Number: 15 +tryuseuavsupport(param_00) +{ + return func_356B("uav_support"); +} + +//Function Number: 16 +tryusedoubleuav(param_00) +{ + return func_356B("double_uav"); +} + +//Function Number: 17 +tryusetripleuav(param_00) +{ + return func_356B("triple_uav"); +} + +//Function Number: 18 +tryusecounteruav(param_00) +{ + return func_356B("counter_uav"); +} + +//Function Number: 19 +uavstrikesetup() +{ + self.usedstrikeuav = 0; +} + +//Function Number: 20 +tryuseuavstrike(param_00) +{ + if(self.usedstrikeuav == 0) + { + self.usedstrikeuav = 1; + func_356B("uav_strike"); + } + + thread waitforlazedtarget(); + return monitoruavstrike(); +} + +//Function Number: 21 +tryusedirectionaluav(param_00) +{ + return func_356B("directional_uav"); +} + +//Function Number: 22 +func_356B(param_00) +{ + if(!maps\mp\_utility::validateusestreak()) + { + return 0; + } + + maps\mp\_matchdata::logkillstreakevent(param_00,self.origin); + var_01 = self.pers["team"]; + var_02 = level.radarviewtime; + level thread launchuav(self,var_01,var_02,param_00); + switch(param_00) + { + case "counter_uav": + self notify("used_counter_uav"); + break; + + case "double_uav": + self notify("used_double_uav"); + break; + + case "triple_uav": + level thread maps\mp\_utility::teamplayercardsplash("used_triple_uav",self,var_01); + self notify("used_triple_uav"); + break; + + case "directional_uav": + self.radarshowenemydirection = 1; + if(level.teambased) + { + foreach(var_04 in level.players) + { + if(var_04.pers["team"] == var_01) + { + var_04.radarshowenemydirection = 1; + } + } + } + + level thread maps\mp\_utility::teamplayercardsplash("used_directional_uav",self,var_01); + self notify("used_directional_uav"); + break; + + default: + self notify("used_uav"); + break; + } + + return 1; +} + +//Function Number: 23 +uavtracker() +{ + level endon("game_ended"); + for(;;) + { + level waittill("uav_update"); + if(level.teambased) + { + updateteamuavstatus("allies"); + updateteamuavstatus("axis"); + continue; + } + + updateplayersuavstatus(); + } +} + +//Function Number: 24 +_getradarstrength(param_00) +{ + var_01 = 0; + var_02 = 0; + foreach(var_04 in level.uavmodels[param_00]) + { + if(var_04.uavtype == "counter") + { + continue; + } + + if(var_04.uavtype == "remote_mortar") + { + continue; + } + + var_01 = var_01 + var_04.value; + } + + foreach(var_04 in level.uavmodels[level.otherteam[param_00]]) + { + if(var_04.uavtype != "counter") + { + continue; + } + + var_02 = var_02 + var_04.value; + } + + if(var_02 > 0) + { + var_08 = -3; + } + else + { + var_08 = var_02; + } + + var_09 = getuavstrengthmin(); + var_0A = getuavstrengthmax(); + if(var_08 <= var_09) + { + var_08 = var_09; + } + else if(var_08 >= var_0A) + { + var_08 = var_0A; + } + + return var_08; +} + +//Function Number: 25 +updateteamuavstatus(param_00) +{ + var_01 = _getradarstrength(param_00); + setteamradarstrength(param_00,var_01); + if(var_01 >= getuavstrengthlevelneutral()) + { + unblockteamradar(param_00); + } + else + { + blockteamradar(param_00); + } + + if(var_01 <= getuavstrengthlevelneutral()) + { + setteamradarwrapper(param_00,0); + updateteamuavtype(param_00); + return; + } + + if(var_01 >= getuavstrengthlevelshowenemyfastsweep()) + { + level.radarmode[param_00] = "fast_radar"; + } + else + { + level.radarmode[param_00] = "normal_radar"; + } + + updateteamuavtype(param_00); + setteamradarwrapper(param_00,1); +} + +//Function Number: 26 +updateplayersuavstatus() +{ + var_00 = getuavstrengthmin(); + var_01 = getuavstrengthmax(); + var_02 = getuavstrengthlevelshowenemydirectional(); + foreach(var_04 in level.players) + { + var_05 = level.activeuavs[var_04.guid + "_radarStrength"]; + foreach(var_07 in level.players) + { + if(var_07 == var_04) + { + continue; + } + + var_08 = level.activecounteruavs[var_07.guid]; + if(var_08 > 0) + { + var_05 = -3; + break; + } + } + + if(var_05 <= var_00) + { + var_05 = var_00; + } + else if(var_05 >= var_01) + { + var_05 = var_01; + } + + var_04.radarstrength = var_05; + if(var_05 >= getuavstrengthlevelneutral()) + { + var_04.isradarblocked = 0; + } + else + { + var_04.isradarblocked = 1; + } + + if(var_05 <= getuavstrengthlevelneutral()) + { + var_04.hasradar = 0; + var_04.radarshowenemydirection = 0; + continue; + } + + if(var_05 >= getuavstrengthlevelshowenemyfastsweep()) + { + var_04.radarmode = "fast_radar"; + } + else + { + var_04.radarmode = "normal_radar"; + } + + var_04.radarshowenemydirection = var_05 >= var_02; + var_04.hasradar = 1; + } +} + +//Function Number: 27 +blockplayeruav() +{ + self endon("disconnect"); + self notify("blockPlayerUAV"); + self endon("blockPlayerUAV"); + self.isradarblocked = 1; + wait level.uavblocktime; + self.isradarblocked = 0; +} + +//Function Number: 28 +updateteamuavtype(param_00) +{ + var_01 = _getradarstrength(param_00) >= getuavstrengthlevelshowenemydirectional(); + foreach(var_03 in level.players) + { + if(var_03.team == "spectator") + { + continue; + } + + var_03.radarmode = level.radarmode[var_03.team]; + if(var_03.team == param_00) + { + var_03.radarshowenemydirection = var_01; + } + } +} + +//Function Number: 29 +useplayeruav(param_00,param_01) +{ + level endon("game_ended"); + self endon("disconnect"); + self notify("usePlayerUAV"); + self endon("usePlayerUAV"); + if(param_00) + { + self.radarmode = "fast_radar"; + } + else + { + self.radarmode = "normal_radar"; + } + + self.hasradar = 1; + wait param_01; + self.hasradar = 0; +} + +//Function Number: 30 +setteamradarwrapper(param_00,param_01) +{ + setteamradar(param_00,param_01); + level notify("radar_status_change",param_00); +} + +//Function Number: 31 +handleincomingstinger() +{ + level endon("game_ended"); + self endon("death"); + for(;;) + { + level waittill("stinger_fired",var_00,var_01,var_02); + if(!isdefined(var_02) || var_02 != self) + { + continue; + } + + var_01 thread stingerproximitydetonate(var_02,var_00); + } +} + +//Function Number: 32 +stingerproximitydetonate(param_00,param_01) +{ + self endon("death"); + var_02 = distance(self.origin,param_00 getpointinbounds(0,0,0)); + var_03 = param_00 getpointinbounds(0,0,0); + for(;;) + { + if(!isdefined(param_00)) + { + var_04 = var_03; + } + else + { + var_04 = param_00 getpointinbounds(0,0,0); + } + + var_03 = var_04; + var_05 = distance(self.origin,var_04); + if(var_05 < var_02) + { + var_02 = var_05; + } + + if(var_05 > var_02) + { + if(var_05 > 1536) + { + return; + } + + radiusdamage(self.origin,1536,600,600,param_01,"MOD_EXPLOSIVE","stinger_mp"); + playfx(level.stingerfxid,self.origin); + self hide(); + self notify("deleted"); + wait 0.05; + self delete(); + param_01 notify("killstreak_destroyed"); + } + + wait 0.05; + } +} + +//Function Number: 33 +adduavmodel() +{ + if(level.teambased) + { + level.uavmodels[self.team][level.uavmodels[self.team].size] = self; + return; + } + + level.uavmodels[self.owner.guid + "_" + gettime()] = self; +} + +//Function Number: 34 +removeuavmodel() +{ + var_00 = []; + if(level.teambased) + { + var_01 = self.team; + foreach(var_03 in level.uavmodels[var_01]) + { + if(!isdefined(var_03)) + { + continue; + } + + var_00[var_00.size] = var_03; + } + + level.uavmodels[var_01] = var_00; + return; + } + + foreach(var_03 in level.uavmodels) + { + if(!isdefined(var_03)) + { + continue; + } + + var_00[var_00.size] = var_03; + } + + level.uavmodels = var_00; +} + +//Function Number: 35 +addactiveuav() +{ + if(level.teambased) + { + level.activeuavs[self.team]++; + return; + } + + level.activeuavs[self.owner.guid]++; + level.activeuavs[self.owner.guid + "_radarStrength"] = level.activeuavs[self.owner.guid + "_radarStrength"] + self.value; +} + +//Function Number: 36 +addactivecounteruav() +{ + if(level.teambased) + { + level.activecounteruavs[self.team]++; + return; + } + + level.activecounteruavs[self.owner.guid]++; +} + +//Function Number: 37 +removeactiveuav() +{ + if(level.teambased) + { + level.activeuavs[self.team]--; + if(!level.activeuavs[self.team]) + { + return; + } + + return; + } + + if(isdefined(self.owner)) + { + level.activeuavs[self.owner.guid]--; + level.activeuavs[self.owner.guid + "_radarStrength"] = level.activeuavs[self.owner.guid + "_radarStrength"] - self.value; + } +} + +//Function Number: 38 +removeactivecounteruav() +{ + if(level.teambased) + { + level.activecounteruavs[self.team]--; + if(!level.activecounteruavs[self.team]) + { + return; + } + + return; + } + + if(isdefined(self.owner)) + { + level.activecounteruavs[self.owner.guid]--; + } +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/perks/_perkfunctions.gsc b/MW3/PC/MP/maps/mp/perks/_perkfunctions.gsc new file mode 100644 index 0000000..cc263ce --- /dev/null +++ b/MW3/PC/MP/maps/mp/perks/_perkfunctions.gsc @@ -0,0 +1,1684 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\perks\_perkfunctions.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 131 + * Decompile Time: 2696 ms + * Timestamp: 10/27/2023 2:14:48 AM +*******************************************************************/ + +//Function Number: 1 +setoverkillpro() +{ +} + +//Function Number: 2 +unsetoverkillpro() +{ +} + +//Function Number: 3 +setempimmune() +{ +} + +//Function Number: 4 +unsetempimmune() +{ +} + +//Function Number: 5 +setautospot() +{ + autospotadswatcher(); + autospotdeathwatcher(); +} + +//Function Number: 6 +autospotdeathwatcher() +{ + self waittill("death"); + self endon("disconnect"); + self endon("endAutoSpotAdsWatcher"); + level endon("game_ended"); + self autospotoverlayoff(); +} + +//Function Number: 7 +unsetautospot() +{ + self notify("endAutoSpotAdsWatcher"); + self autospotoverlayoff(); +} + +//Function Number: 8 +autospotadswatcher() +{ + self endon("death"); + self endon("disconnect"); + self endon("endAutoSpotAdsWatcher"); + level endon("game_ended"); + var_00 = 0; + for(;;) + { + wait 0.05; + if(self isusingturret()) + { + self autospotoverlayoff(); + continue; + } + + var_01 = self playerads(); + if(var_01 < 1 && var_00) + { + var_00 = 0; + self autospotoverlayoff(); + } + + if(var_01 < 1 && !var_00) + { + continue; + } + + if(var_01 == 1 && !var_00) + { + var_00 = 1; + self autospotoverlayon(); + } + } +} + +//Function Number: 9 +setregenspeed() +{ +} + +//Function Number: 10 +unsetregenspeed() +{ +} + +//Function Number: 11 +sethardshell() +{ + self.shellshockreduction = 0.25; +} + +//Function Number: 12 +unsethardshell() +{ + self.shellshockreduction = 0; +} + +//Function Number: 13 +setsharpfocus() +{ + self setviewkickscale(0.5); +} + +//Function Number: 14 +unsetsharpfocus() +{ + self setviewkickscale(1); +} + +//Function Number: 15 +setdoubleload() +{ + self endon("death"); + self endon("disconnect"); + self endon("endDoubleLoad"); + level endon("game_ended"); + for(;;) + { + self waittill("reload"); + var_00 = self getweaponslist("primary"); + foreach(var_02 in var_00) + { + var_03 = self getweaponammoclip(var_02); + var_04 = weaponclipsize(var_02); + var_05 = var_04 - var_03; + var_06 = self getweaponammostock(var_02); + if(var_03 != var_04 && var_06 > 0) + { + if(var_03 + var_06 >= var_04) + { + self setweaponammoclip(var_02,var_04); + self setweaponammostock(var_02,var_06 - var_05); + continue; + } + + self setweaponammoclip(var_02,var_03 + var_06); + if(var_06 - var_05 > 0) + { + self setweaponammostock(var_02,var_06 - var_05); + continue; + } + + self setweaponammostock(var_02,0); + } + } + } +} + +//Function Number: 16 +unsetdoubleload() +{ + self notify("endDoubleLoad"); +} + +//Function Number: 17 +setmarksman() +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + maps\mp\_utility::setrecoilscale(10); + self.recoilscale = 10; +} + +//Function Number: 18 +unsetmarksman() +{ + maps\mp\_utility::setrecoilscale(0); + self.recoilscale = 0; +} + +//Function Number: 19 +setstunresistance() +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + self.stunscaler = 0.5; +} + +//Function Number: 20 +unsetstunresistance() +{ + self.stunscaler = 1; +} + +//Function Number: 21 +setsteadyaimpro() +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + self setaimspreadmovementscale(0.5); +} + +//Function Number: 22 +unsetsteadyaimpro() +{ + self notify("end_SteadyAimPro"); + self setaimspreadmovementscale(1); +} + +//Function Number: 23 +blastshieldusetracker(param_00,param_01) +{ + self endon("death"); + self endon("disconnect"); + self endon("end_perkUseTracker"); + level endon("game_ended"); + for(;;) + { + self waittill("empty_offhand"); + if(!common_scripts\utility::isoffhandweaponenabled()) + { + continue; + } + + self [[ param_01 ]](maps\mp\_utility::_hasperk("_specialty_blastshield")); + } +} + +//Function Number: 24 +perkusedeathtracker() +{ + self endon("disconnect"); + self waittill("death"); + self._useperkenabled = undefined; +} + +//Function Number: 25 +setrearview() +{ +} + +//Function Number: 26 +unsetrearview() +{ + self notify("end_perkUseTracker"); +} + +//Function Number: 27 +setendgame() +{ + if(isdefined(self.endgame)) + { + return; + } + + self.maxhealth = maps\mp\gametypes\_tweakables::gettweakablevalue("player","maxhealth") * 4; + self.health = self.maxhealth; + self.endgame = 1; + self.attackertable[0] = ""; + self visionsetnakedforplayer("end_game",5); + thread endgamedeath(7); + self.hasdonecombat = 1; +} + +//Function Number: 28 +unsetendgame() +{ + self notify("stopEndGame"); + self.endgame = undefined; + revertvisionset(); + if(!isdefined(self.endgametimer)) + { + return; + } + + self.endgametimer maps\mp\gametypes\_hud_util::destroyelem(); + self.endgameicon maps\mp\gametypes\_hud_util::destroyelem(); +} + +//Function Number: 29 +revertvisionset() +{ + if(isdefined(level.nukedetonated)) + { + self visionsetnakedforplayer(level.nukevisionset,1); + return; + } + + self visionsetnakedforplayer("",1); +} + +//Function Number: 30 +endgamedeath(param_00) +{ + self endon("death"); + self endon("disconnect"); + self endon("joined_team"); + level endon("game_ended"); + self endon("stopEndGame"); + wait param_00 + 1; + maps\mp\_utility::_suicide(); +} + +//Function Number: 31 +setsiege() +{ + thread tracksiegeenable(); + thread tracksiegedissable(); +} + +//Function Number: 32 +tracksiegeenable() +{ + self endon("death"); + self endon("disconnect"); + self endon("stop_trackSiege"); + for(;;) + { + self waittill("gambit_on"); + self.movespeedscaler = 0; + maps\mp\gametypes\_weapons::updatemovespeedscale(); + var_00 = weaponclass(self getcurrentweapon()); + if(var_00 == "pistol" || var_00 == "smg") + { + self setspreadoverride(1); + } + else + { + self setspreadoverride(2); + } + + self player_recoilscaleon(0); + self allowjump(0); + } +} + +//Function Number: 33 +tracksiegedissable() +{ + self endon("death"); + self endon("disconnect"); + self endon("stop_trackSiege"); + for(;;) + { + self waittill("gambit_off"); + unsetsiege(); + } +} + +//Function Number: 34 +stancestatelistener() +{ + self endon("death"); + self endon("disconnect"); + self notifyonplayercommand("adjustedStance","+stance"); + for(;;) + { + self waittill("adjustedStance"); + if(self.movespeedscaler != 0) + { + continue; + } + + unsetsiege(); + } +} + +//Function Number: 35 +jumpstatelistener() +{ + self endon("death"); + self endon("disconnect"); + self notifyonplayercommand("jumped","+goStand"); + for(;;) + { + self waittill("jumped"); + if(self.movespeedscaler != 0) + { + continue; + } + + unsetsiege(); + } +} + +//Function Number: 36 +unsetsiege() +{ + self.movespeedscaler = 1; + self resetspreadoverride(); + maps\mp\gametypes\_weapons::updatemovespeedscale(); + self player_recoilscaleoff(); + self allowjump(1); +} + +//Function Number: 37 +setchallenger() +{ + if(!level.hardcoremode) + { + self.maxhealth = maps\mp\gametypes\_tweakables::gettweakablevalue("player","maxhealth"); + if(isdefined(self.xpscaler) && self.xpscaler == 1 && self.maxhealth > 30) + { + self.xpscaler = 2; + } + } +} + +//Function Number: 38 +unsetchallenger() +{ + self.xpscaler = 1; +} + +//Function Number: 39 +setsaboteur() +{ + self.objectivescaler = 1.2; +} + +//Function Number: 40 +unsetsaboteur() +{ + self.objectivescaler = 1; +} + +//Function Number: 41 +setlightweight() +{ + self.movespeedscaler = maps\mp\_utility::lightweightscalar(); + maps\mp\gametypes\_weapons::updatemovespeedscale(); +} + +//Function Number: 42 +unsetlightweight() +{ + self.movespeedscaler = 1; + maps\mp\gametypes\_weapons::updatemovespeedscale(); +} + +//Function Number: 43 +setblackbox() +{ + self.killstreakscaler = 1.5; +} + +//Function Number: 44 +unsetblackbox() +{ + self.killstreakscaler = 1; +} + +//Function Number: 45 +setsteelnerves() +{ + maps\mp\_utility::giveperk("specialty_bulletaccuracy",1); + maps\mp\_utility::giveperk("specialty_holdbreath",0); +} + +//Function Number: 46 +unsetsteelnerves() +{ + maps\mp\_utility::_unsetperk("specialty_bulletaccuracy"); + maps\mp\_utility::_unsetperk("specialty_holdbreath"); +} + +//Function Number: 47 +setdelaymine() +{ +} + +//Function Number: 48 +unsetdelaymine() +{ +} + +//Function Number: 49 +setbackshield() +{ + self attachshieldmodel("weapon_riot_shield_mp","tag_shield_back"); +} + +//Function Number: 50 +unsetbackshield() +{ + self detachshieldmodel("weapon_riot_shield_mp","tag_shield_back"); +} + +//Function Number: 51 +setlocaljammer() +{ + if(!maps\mp\_utility::isemped()) + { + self radarjamon(); + } +} + +//Function Number: 52 +unsetlocaljammer() +{ + self radarjamoff(); +} + +//Function Number: 53 +setac130() +{ + thread killstreakthink("ac130",7,"end_ac130Think"); +} + +//Function Number: 54 +unsetac130() +{ + self notify("end_ac130Think"); +} + +//Function Number: 55 +setsentryminigun() +{ + thread killstreakthink("airdrop_sentry_minigun",2,"end_sentry_minigunThink"); +} + +//Function Number: 56 +unsetsentryminigun() +{ + self notify("end_sentry_minigunThink"); +} + +//Function Number: 57 +settank() +{ + thread killstreakthink("tank",6,"end_tankThink"); +} + +//Function Number: 58 +unsettank() +{ + self notify("end_tankThink"); +} + +//Function Number: 59 +setprecision_airstrike() +{ + thread killstreakthink("precision_airstrike",6,"end_precision_airstrike"); +} + +//Function Number: 60 +unsetprecision_airstrike() +{ + self notify("end_precision_airstrike"); +} + +//Function Number: 61 +setpredatormissile() +{ + thread killstreakthink("predator_missile",4,"end_predator_missileThink"); +} + +//Function Number: 62 +unsetpredatormissile() +{ + self notify("end_predator_missileThink"); +} + +//Function Number: 63 +sethelicopterminigun() +{ + thread killstreakthink("helicopter_minigun",5,"end_helicopter_minigunThink"); +} + +//Function Number: 64 +unsethelicopterminigun() +{ + self notify("end_helicopter_minigunThink"); +} + +//Function Number: 65 +killstreakthink(param_00,param_01,param_02) +{ + self endon("death"); + self endon("disconnect"); + self endon(param_02); + for(;;) + { + self waittill("killed_enemy"); + if(self.pers["cur_kill_streak"] != param_01) + { + continue; + } + + thread maps\mp\killstreaks\_killstreaks::givekillstreak(param_00); + thread maps\mp\gametypes\_hud_message::killstreaksplashnotify(param_00,param_01); + } +} + +//Function Number: 66 +setthermal() +{ + self thermalvisionon(); +} + +//Function Number: 67 +unsetthermal() +{ + self thermalvisionoff(); +} + +//Function Number: 68 +setonemanarmy() +{ + thread onemanarmyweaponchangetracker(); +} + +//Function Number: 69 +unsetonemanarmy() +{ + self notify("stop_oneManArmyTracker"); +} + +//Function Number: 70 +onemanarmyweaponchangetracker() +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + self endon("stop_oneManArmyTracker"); + for(;;) + { + self waittill("weapon_change",var_00); + if(var_00 != "onemanarmy_mp") + { + continue; + } + + thread selectonemanarmyclass(); + } +} + +//Function Number: 71 +isonemanarmymenu(param_00) +{ + if(param_00 == game["menu_onemanarmy"]) + { + return 1; + } + + if(isdefined(game["menu_onemanarmy_defaults_splitscreen"]) && param_00 == game["menu_onemanarmy_defaults_splitscreen"]) + { + return 1; + } + + if(isdefined(game["menu_onemanarmy_custom_splitscreen"]) && param_00 == game["menu_onemanarmy_custom_splitscreen"]) + { + return 1; + } + + return 0; +} + +//Function Number: 72 +selectonemanarmyclass() +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + common_scripts\utility::_disableweaponswitch(); + common_scripts\utility::_disableoffhandweapons(); + common_scripts\utility::_disableusability(); + self openpopupmenu(game["menu_onemanarmy"]); + thread closeomamenuondeath(); + self waittill("menuresponse",var_00,var_01); + common_scripts\utility::_enableweaponswitch(); + common_scripts\utility::_enableoffhandweapons(); + common_scripts\utility::_enableusability(); + if(var_01 == "back" || !isonemanarmymenu(var_00) || maps\mp\_utility::isusingremote()) + { + if(self getcurrentweapon() == "onemanarmy_mp") + { + common_scripts\utility::_disableweaponswitch(); + common_scripts\utility::_disableoffhandweapons(); + common_scripts\utility::_disableusability(); + self switchtoweapon(common_scripts\utility::getlastweapon()); + self waittill("weapon_change"); + common_scripts\utility::_enableweaponswitch(); + common_scripts\utility::_enableoffhandweapons(); + common_scripts\utility::_enableusability(); + } + + return; + } + + thread giveonemanarmyclass(var_01); +} + +//Function Number: 73 +closeomamenuondeath() +{ + self endon("menuresponse"); + self endon("disconnect"); + level endon("game_ended"); + self waittill("death"); + common_scripts\utility::_enableweaponswitch(); + common_scripts\utility::_enableoffhandweapons(); + common_scripts\utility::_enableusability(); + self closepopupmenu(); +} + +//Function Number: 74 +giveonemanarmyclass(param_00) +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + if(maps\mp\_utility::_hasperk("specialty_omaquickchange")) + { + var_01 = 3; + self playlocalsound("foly_onemanarmy_bag3_plr"); + self playsoundtoteam("foly_onemanarmy_bag3_npc","allies",self); + self playsoundtoteam("foly_onemanarmy_bag3_npc","axis",self); + } + else + { + var_01 = 6; + self playlocalsound("foly_onemanarmy_bag6_plr"); + self playsoundtoteam("foly_onemanarmy_bag6_npc","allies",self); + self playsoundtoteam("foly_onemanarmy_bag6_npc","axis",self); + } + + thread omausebar(var_01); + common_scripts\utility::_disableweapon(); + common_scripts\utility::_disableoffhandweapons(); + common_scripts\utility::_disableusability(); + wait var_01; + common_scripts\utility::_enableweapon(); + common_scripts\utility::_enableoffhandweapons(); + common_scripts\utility::_enableusability(); + self.omaclasschanged = 1; + maps\mp\gametypes\_class::giveloadout(self.pers["team"],param_00,0); + if(isdefined(self.carryflag)) + { + self attach(self.carryflag,"J_spine4",1); + } + + self notify("changed_kit"); + level notify("changed_kit"); +} + +//Function Number: 75 +omausebar(param_00) +{ + self endon("disconnect"); + var_01 = maps\mp\gametypes\_hud_util::createprimaryprogressbar(0,-25); + var_02 = maps\mp\gametypes\_hud_util::createprimaryprogressbartext(0,-25); + var_02 settext(&"MPUI_CHANGING_KIT"); + var_01 maps\mp\gametypes\_hud_util::updatebar(0,1 / param_00); + var_03 = 0; + while(var_03 < param_00 && isalive(self) && !level.gameended) + { + wait 0.05; + var_03 = var_03 + 0.05; + } + + var_01 maps\mp\gametypes\_hud_util::destroyelem(); + var_02 maps\mp\gametypes\_hud_util::destroyelem(); +} + +//Function Number: 76 +setblastshield() +{ + self setweaponhudiconoverride("primaryoffhand","specialty_blastshield"); +} + +//Function Number: 77 +unsetblastshield() +{ + self setweaponhudiconoverride("primaryoffhand","none"); +} + +//Function Number: 78 +setfreefall() +{ +} + +//Function Number: 79 +unsetfreefall() +{ +} + +//Function Number: 80 +settacticalinsertion() +{ + self setoffhandsecondaryclass("flash"); + maps\mp\_utility::_giveweapon("flare_mp",0); + self givestartammo("flare_mp"); + thread monitortiuse(); +} + +//Function Number: 81 +unsettacticalinsertion() +{ + self notify("end_monitorTIUse"); +} + +//Function Number: 82 +clearprevioustispawnpoint() +{ + common_scripts\utility::waittill_any("disconnect","joined_team","joined_spectators"); + if(isdefined(self.setspawnpoint)) + { + deleteti(self.setspawnpoint); + } +} + +//Function Number: 83 +updatetispawnposition() +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + self endon("end_monitorTIUse"); + while(maps\mp\_utility::isreallyalive(self)) + { + if(isvalidtispawnposition()) + { + self.tispawnposition = self.origin; + } + + wait 0.05; + } +} + +//Function Number: 84 +isvalidtispawnposition() +{ + if(canspawn(self.origin) && self isonground()) + { + return 1; + } + + return 0; +} + +//Function Number: 85 +monitortiuse() +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + self endon("end_monitorTIUse"); + thread updatetispawnposition(); + thread clearprevioustispawnpoint(); + for(;;) + { + self waittill("grenade_fire",var_00,var_01); + if(var_01 != "flare_mp") + { + continue; + } + + if(isdefined(self.setspawnpoint)) + { + deleteti(self.setspawnpoint); + } + + if(!isdefined(self.tispawnposition)) + { + continue; + } + + if(maps\mp\_utility::touchingbadtrigger()) + { + continue; + } + + var_02 = playerphysicstrace(self.tispawnposition + (0,0,16),self.tispawnposition - (0,0,2048)) + (0,0,1); + var_03 = spawn("script_model",var_02); + var_03.angles = self.angles; + var_03.team = self.team; + var_03.owner = self; + var_03.enemytrigger = spawn("script_origin",var_02); + var_03 thread glowsticksetupandwaitfordeath(self); + var_03.playerspawnpos = self.tispawnposition; + var_03 thread maps\mp\gametypes\_weapons::createbombsquadmodel("weapon_light_stick_tactical_bombsquad","tag_fire_fx",level.otherteam[self.team],self); + self.setspawnpoint = var_03; + } +} + +//Function Number: 86 +glowsticksetupandwaitfordeath(param_00) +{ + self setmodel(level.spawnglowmodel["enemy"]); + if(level.teambased) + { + maps\mp\_entityheadicons::setteamheadicon(self.team,(0,0,20)); + } + else + { + maps\mp\_entityheadicons::setplayerheadicon(param_00,(0,0,20)); + } + + thread glowstickdamagelistener(param_00); + thread glowstickenemyuselistener(param_00); + thread glowstickuselistener(param_00); + thread glowstickteamupdater(level.otherteam[self.team],level.spawnglow["enemy"],param_00); + var_01 = spawn("script_model",self.origin + (0,0,0)); + var_01.angles = self.angles; + var_01 setmodel(level.spawnglowmodel["friendly"]); + var_01 setcontents(0); + var_01 thread glowstickteamupdater(self.team,level.spawnglow["friendly"],param_00); + var_01 playloopsound("emt_road_flare_burn"); + self waittill("death"); + var_01 stoploopsound(); + var_01 delete(); +} + +//Function Number: 87 +glowstickteamupdater(param_00,param_01,param_02) +{ + self endon("death"); + wait 0.05; + var_03 = self gettagangles("tag_fire_fx"); + var_04 = spawnfx(param_01,self gettagorigin("tag_fire_fx"),anglestoforward(var_03),anglestoup(var_03)); + triggerfx(var_04); + thread deleteondeath(var_04); + for(;;) + { + self hide(); + var_04 hide(); + foreach(var_06 in level.players) + { + if(var_06.team == param_00 && level.teambased) + { + self showtoplayer(var_06); + var_04 showtoplayer(var_06); + continue; + } + + if(!level.teambased && var_06 == param_02 && param_01 == level.spawnglow["friendly"]) + { + self showtoplayer(var_06); + var_04 showtoplayer(var_06); + continue; + } + + if(!level.teambased && var_06 != param_02 && param_01 == level.spawnglow["enemy"]) + { + self showtoplayer(var_06); + var_04 showtoplayer(var_06); + } + } + + level common_scripts\utility::waittill_either("joined_team","player_spawned"); + } +} + +//Function Number: 88 +deleteondeath(param_00) +{ + self waittill("death"); + if(isdefined(param_00)) + { + param_00 delete(); + } +} + +//Function Number: 89 +glowstickdamagelistener(param_00) +{ + self endon("death"); + self setcandamage(1); + self.health = 999999; + self.maxhealth = 100; + self.damagetaken = 0; + for(;;) + { + self waittill("damage",var_01,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09,var_0A); + if(!maps\mp\gametypes\_weapons::friendlyfirecheck(self.owner,var_02)) + { + continue; + } + + if(isdefined(var_0A)) + { + switch(var_0A) + { + case "flash_grenade_mp": + case "smoke_grenade_mp": + case "concussion_grenade_mp": + break; + } + } + + if(!isdefined(self)) + { + return; + } + + if(var_05 == "MOD_MELEE") + { + self.damagetaken = self.damagetaken + self.maxhealth; + } + + if(isdefined(var_09) && var_09 & level.idflags_penetration) + { + self.wasdamagedfrombulletpenetration = 1; + } + + self.wasdamaged = 1; + self.damagetaken = self.damagetaken + var_01; + if(isplayer(var_02)) + { + var_02 maps\mp\gametypes\_damagefeedback::updatedamagefeedback("tactical_insertion"); + } + + if(self.damagetaken >= self.maxhealth) + { + if(isdefined(param_00) && var_02 != param_00) + { + var_02 notify("destroyed_insertion",param_00); + var_02 notify("destroyed_explosive"); + param_00 thread maps\mp\_utility::leaderdialogonplayer("ti_destroyed"); + } + + var_02 thread deleteti(self); + } + } +} + +//Function Number: 90 +glowstickuselistener(param_00) +{ + self endon("death"); + level endon("game_ended"); + param_00 endon("disconnect"); + self setcursorhint("HINT_NOICON"); + self sethintstring(&"MP_PATCH_PICKUP_TI"); + thread updateenemyuse(param_00); + for(;;) + { + self waittill("trigger",var_01); + var_01 playsound("chemlight_pu"); + var_01 thread settacticalinsertion(); + var_01 thread deleteti(self); + } +} + +//Function Number: 91 +updateenemyuse(param_00) +{ + self endon("death"); + for(;;) + { + maps\mp\_utility::setselfusable(param_00); + level common_scripts\utility::waittill_either("joined_team","player_spawned"); + } +} + +//Function Number: 92 +deleteti(param_00) +{ + if(isdefined(param_00.enemytrigger)) + { + param_00.enemytrigger delete(); + } + + var_01 = param_00.origin; + var_02 = param_00.angles; + param_00 delete(); + var_03 = spawn("script_model",var_01); + var_03.angles = var_02; + var_03 setmodel(level.spawnglowmodel["friendly"]); + var_03 setcontents(0); + thread dummyglowstickdelete(var_03); +} + +//Function Number: 93 +dummyglowstickdelete(param_00) +{ + wait 2.5; + param_00 delete(); +} + +//Function Number: 94 +glowstickenemyuselistener(param_00) +{ + self endon("death"); + level endon("game_ended"); + param_00 endon("disconnect"); + self.enemytrigger setcursorhint("HINT_NOICON"); + self.enemytrigger sethintstring(&"MP_PATCH_DESTROY_TI"); + self.enemytrigger maps\mp\_utility::makeenemyusable(param_00); + for(;;) + { + self.enemytrigger waittill("trigger",var_01); + var_01 notify("destroyed_insertion",param_00); + var_01 notify("destroyed_explosive"); + if(isdefined(param_00) && var_01 != param_00) + { + param_00 thread maps\mp\_utility::leaderdialogonplayer("ti_destroyed"); + } + + var_01 thread deleteti(self); + } +} + +//Function Number: 95 +setlittlebirdsupport() +{ + thread killstreakthink("littlebird_support",2,"end_littlebird_support_think"); +} + +//Function Number: 96 +unsetlittlebirdsupport() +{ + self notify("end_littlebird_support_think"); +} + +//Function Number: 97 +setpainted() +{ + if(isplayer(self)) + { + var_00 = 10; + if(maps\mp\_utility::_hasperk("specialty_quieter")) + { + var_00 = var_00 * 0.5; + } + + self.painted = 1; + self setperk("specialty_radararrow",1,0); + thread unsetpainted(var_00); + thread watchpainteddeath(); + } +} + +//Function Number: 98 +watchpainteddeath() +{ + self endon("disconnect"); + level endon("game_ended"); + self waittill("death"); + self.painted = 0; +} + +//Function Number: 99 +unsetpainted(param_00) +{ + self notify("painted_again"); + self endon("painted_again"); + self endon("disconnect"); + self endon("death"); + level endon("game_ended"); + wait param_00; + self.painted = 0; + self unsetperk("specialty_radararrow",1); +} + +//Function Number: 100 +ispainted() +{ + return isdefined(self.painted) && self.painted; +} + +//Function Number: 101 +setfinalstand() +{ + maps\mp\_utility::giveperk("specialty_pistoldeath",0); +} + +//Function Number: 102 +unsetfinalstand() +{ + maps\mp\_utility::_unsetperk("specialty_pistoldeath"); +} + +//Function Number: 103 +setcarepackage() +{ + thread maps\mp\killstreaks\_killstreaks::givekillstreak("airdrop_assault",0,0,self,1); +} + +//Function Number: 104 +unsetcarepackage() +{ +} + +//Function Number: 105 +setuav() +{ + thread maps\mp\killstreaks\_killstreaks::givekillstreak("uav",0,0,self,1); +} + +//Function Number: 106 +unsetuav() +{ +} + +//Function Number: 107 +setstoppingpower() +{ + maps\mp\_utility::giveperk("specialty_bulletdamage",0); + thread watchstoppingpowerkill(); +} + +//Function Number: 108 +watchstoppingpowerkill() +{ + self notify("watchStoppingPowerKill"); + self endon("watchStoppingPowerKill"); + self endon("disconnect"); + level endon("game_ended"); + self waittill("killed_enemy"); + unsetstoppingpower(); +} + +//Function Number: 109 +unsetstoppingpower() +{ + maps\mp\_utility::_unsetperk("specialty_bulletdamage"); + self notify("watchStoppingPowerKill"); +} + +//Function Number: 110 +setc4death() +{ + if(!maps\mp\_utility::_hasperk("specialty_pistoldeath")) + { + maps\mp\_utility::giveperk("specialty_pistoldeath",0); + } +} + +//Function Number: 111 +unsetc4death() +{ + if(maps\mp\_utility::_hasperk("specialty_pistoldeath")) + { + maps\mp\_utility::_unsetperk("specialty_pistoldeath"); + } +} + +//Function Number: 112 +setjuiced() +{ + self endon("death"); + self endon("faux_spawn"); + self endon("disconnect"); + self endon("unset_juiced"); + level endon("end_game"); + self.isjuiced = 1; + self.movespeedscaler = 1.25; + maps\mp\gametypes\_weapons::updatemovespeedscale(); + if(level.splitscreen) + { + var_00 = 56; + var_01 = 21; + } + else + { + var_00 = 80; + var_01 = 32; + } + + self.juicedtimer = maps\mp\gametypes\_hud_util::createtimer("hudsmall",1); + self.juicedtimer maps\mp\gametypes\_hud_util::setpoint("CENTER","CENTER",0,var_00); + self.juicedtimer settimer(7); + self.juicedtimer.color = (0.8,0.8,0); + self.juicedtimer.archived = 0; + self.juicedtimer.foreground = 1; + self.juicedicon = maps\mp\gametypes\_hud_util::createicon("specialty_juiced",var_01,var_01); + self.juicedicon.alpha = 0; + self.juicedicon maps\mp\gametypes\_hud_util::setparent(self.juicedtimer); + self.juicedicon maps\mp\gametypes\_hud_util::setpoint("BOTTOM","TOP"); + self.juicedicon.archived = 1; + self.juicedicon.sort = 1; + self.juicedicon.foreground = 1; + self.juicedicon fadeovertime(1); + self.juicedicon.alpha = 0.85; + thread unsetjuicedondeath(); + thread unsetjuicedonride(); + wait 5; + if(isdefined(self.juicedicon)) + { + self.juicedicon fadeovertime(2); + self.juicedicon.alpha = 0; + } + + if(isdefined(self.juicedtimer)) + { + self.juicedtimer fadeovertime(2); + self.juicedtimer.alpha = 0; + } + + wait 2; + unsetjuiced(); +} + +//Function Number: 113 +unsetjuiced(param_00) +{ + if(!isdefined(param_00)) + { + if(maps\mp\_utility::isjuggernaut()) + { + self.movespeedscaler = self.juggmovespeedscaler; + } + else + { + self.movespeedscaler = 1; + if(maps\mp\_utility::_hasperk("specialty_lightweight")) + { + self.movespeedscaler = maps\mp\_utility::lightweightscalar(); + } + } + + maps\mp\gametypes\_weapons::updatemovespeedscale(); + } + + if(isdefined(self.juicedicon)) + { + self.juicedicon destroy(); + } + + if(isdefined(self.juicedtimer)) + { + self.juicedtimer destroy(); + } + + self.isjuiced = undefined; + self notify("unset_juiced"); +} + +//Function Number: 114 +unsetjuicedonride() +{ + self endon("disconnect"); + self endon("unset_juiced"); + for(;;) + { + wait 0.05; + if(maps\mp\_utility::isusingremote()) + { + thread unsetjuiced(); + break; + } + } +} + +//Function Number: 115 +unsetjuicedondeath() +{ + self endon("disconnect"); + self endon("unset_juiced"); + common_scripts\utility::waittill_any("death","faux_spawn"); + thread unsetjuiced(1); +} + +//Function Number: 116 +setcombathigh() +{ + self endon("death"); + self endon("disconnect"); + self endon("unset_combathigh"); + level endon("end_game"); + self.damageblockedtotal = 0; + if(level.splitscreen) + { + var_00 = 56; + var_01 = 21; + } + else + { + var_00 = 112; + var_01 = 32; + } + + if(isdefined(self.juicedtimer)) + { + self.juicedtimer destroy(); + } + + if(isdefined(self.juicedicon)) + { + self.juicedicon destroy(); + } + + self.combathighoverlay = newclienthudelem(self); + self.combathighoverlay.x = 0; + self.combathighoverlay.y = 0; + self.combathighoverlay.alignx = "left"; + self.combathighoverlay.aligny = "top"; + self.combathighoverlay.horzalign = "fullscreen"; + self.combathighoverlay.vertalign = "fullscreen"; + self.combathighoverlay setshader("combathigh_overlay",640,480); + self.combathighoverlay.sort = -10; + self.combathighoverlay.archived = 1; + self.combathightimer = maps\mp\gametypes\_hud_util::createtimer("hudsmall",1); + self.combathightimer maps\mp\gametypes\_hud_util::setpoint("CENTER","CENTER",0,var_00); + self.combathightimer settimer(10); + self.combathightimer.color = (0.8,0.8,0); + self.combathightimer.archived = 0; + self.combathightimer.foreground = 1; + self.combathighicon = maps\mp\gametypes\_hud_util::createicon("specialty_painkiller",var_01,var_01); + self.combathighicon.alpha = 0; + self.combathighicon maps\mp\gametypes\_hud_util::setparent(self.combathightimer); + self.combathighicon maps\mp\gametypes\_hud_util::setpoint("BOTTOM","TOP"); + self.combathighicon.archived = 1; + self.combathighicon.sort = 1; + self.combathighicon.foreground = 1; + self.combathighoverlay.alpha = 0; + self.combathighoverlay fadeovertime(1); + self.combathighicon fadeovertime(1); + self.combathighoverlay.alpha = 1; + self.combathighicon.alpha = 0.85; + thread unsetcombathighondeath(); + thread unsetcombathighonride(); + wait 8; + self.combathighicon fadeovertime(2); + self.combathighicon.alpha = 0; + self.combathighoverlay fadeovertime(2); + self.combathighoverlay.alpha = 0; + self.combathightimer fadeovertime(2); + self.combathightimer.alpha = 0; + wait 2; + self.damageblockedtotal = undefined; + maps\mp\_utility::_unsetperk("specialty_combathigh"); +} + +//Function Number: 117 +unsetcombathighondeath() +{ + self endon("disconnect"); + self endon("unset_combathigh"); + self waittill("death"); + thread maps\mp\_utility::_unsetperk("specialty_combathigh"); +} + +//Function Number: 118 +unsetcombathighonride() +{ + self endon("disconnect"); + self endon("unset_combathigh"); + for(;;) + { + wait 0.05; + if(maps\mp\_utility::isusingremote()) + { + thread maps\mp\_utility::_unsetperk("specialty_combathigh"); + break; + } + } +} + +//Function Number: 119 +unsetcombathigh() +{ + self notify("unset_combathigh"); + self.combathighoverlay destroy(); + self.combathighicon destroy(); + self.combathightimer destroy(); +} + +//Function Number: 120 +setlightarmor() +{ + thread givelightarmor(); +} + +//Function Number: 121 +givelightarmor() +{ + self notify("give_light_armor"); + self endon("give_light_armor"); + self endon("death"); + self endon("disconnect"); + level endon("end_game"); + if(isdefined(self.haslightarmor) && self.haslightarmor == 1) + { + removelightarmor(self.previousmaxhealth); + } + + var_00 = 200; + thread removelightarmorondeath(); + self.haslightarmor = 1; + self.combathighoverlay = newclienthudelem(self); + self.combathighoverlay.x = 0; + self.combathighoverlay.y = 0; + self.combathighoverlay.alignx = "left"; + self.combathighoverlay.aligny = "top"; + self.combathighoverlay.horzalign = "fullscreen"; + self.combathighoverlay.vertalign = "fullscreen"; + self.combathighoverlay setshader("combathigh_overlay",640,480); + self.combathighoverlay.sort = -10; + self.combathighoverlay.archived = 1; + self.previousmaxhealth = self.maxhealth; + self.maxhealth = var_00; + self.health = self.maxhealth; + var_01 = 50; + var_02 = self.health; + for(;;) + { + if(self.maxhealth != var_00) + { + removelightarmor(); + break; + } + + if(self.health < 100) + { + removelightarmor(self.previousmaxhealth); + break; + } + + if(self.health < var_02) + { + var_01 = var_01 - var_02 - self.health; + var_02 = self.health; + if(var_01 <= 0) + { + removelightarmor(self.previousmaxhealth); + break; + } + } + + wait 0.5; + } +} + +//Function Number: 122 +removelightarmorondeath() +{ + self endon("disconnect"); + self endon("give_light_armor"); + self endon("remove_light_armor"); + self waittill("death"); + removelightarmor(); +} + +//Function Number: 123 +removelightarmor(param_00) +{ + if(isdefined(param_00)) + { + self.maxhealth = param_00; + } + + if(isdefined(self.combathighoverlay)) + { + self.combathighoverlay destroy(); + } + + self.haslightarmor = undefined; + self notify("remove_light_armor"); +} + +//Function Number: 124 +unsetlightarmor() +{ + thread removelightarmor(self.previousmaxhealth); +} + +//Function Number: 125 +setrevenge() +{ + self notify("stopRevenge"); + wait 0.05; + if(!isdefined(self.lastkilledby)) + { + return; + } + + if(level.teambased && self.team == self.lastkilledby.team) + { + return; + } + + var_00 = spawnstruct(); + var_00.showto = self; + var_00.icon = "compassping_revenge"; + var_00.offset = (0,0,64); + var_00.width = 10; + var_00.height = 10; + var_00.archived = 0; + var_00.delay = 1.5; + var_00.constantsize = 0; + var_00.pintoscreenedge = 1; + var_00.fadeoutpinnedicon = 0; + var_00.is3d = 0; + self.revengeparams = var_00; + self.lastkilledby maps\mp\_entityheadicons::setheadicon(var_00.showto,var_00.icon,var_00.offset,var_00.width,var_00.height,var_00.archived,var_00.delay,var_00.constantsize,var_00.pintoscreenedge,var_00.fadeoutpinnedicon,var_00.is3d); + thread watchrevengedeath(); + thread watchrevengekill(); + thread watchrevengedisconnected(); + thread watchrevengevictimdisconnected(); + thread watchstoprevenge(); +} + +//Function Number: 126 +watchrevengedeath() +{ + self endon("stopRevenge"); + self endon("disconnect"); + var_00 = self.lastkilledby; + for(;;) + { + var_00 waittill("spawned_player"); + var_00 maps\mp\_entityheadicons::setheadicon(self.revengeparams.showto,self.revengeparams.icon,self.revengeparams.offset,self.revengeparams.width,self.revengeparams.height,self.revengeparams.archived,self.revengeparams.delay,self.revengeparams.constantsize,self.revengeparams.pintoscreenedge,self.revengeparams.fadeoutpinnedicon,self.revengeparams.is3d); + } +} + +//Function Number: 127 +watchrevengekill() +{ + self endon("stopRevenge"); + self waittill("killed_enemy"); + self notify("stopRevenge"); +} + +//Function Number: 128 +watchrevengedisconnected() +{ + self endon("stopRevenge"); + self.lastkilledby waittill("disconnect"); + self notify("stopRevenge"); +} + +//Function Number: 129 +watchstoprevenge() +{ + var_00 = self.lastkilledby; + self waittill("stopRevenge"); + if(!isdefined(var_00)) + { + return; + } + + foreach(var_02 in var_00.entityheadicons) + { + if(!isdefined(var_02)) + { + continue; + } + + var_02 destroy(); + } +} + +//Function Number: 130 +watchrevengevictimdisconnected() +{ + var_00 = self.objidfriendly; + var_01 = self.lastkilledby; + var_01 endon("disconnect"); + level endon("game_ended"); + self endon("stopRevenge"); + self waittill("disconnect"); + if(!isdefined(var_01)) + { + return; + } + + foreach(var_03 in var_01.entityheadicons) + { + if(!isdefined(var_03)) + { + continue; + } + + var_03 destroy(); + } +} + +//Function Number: 131 +unsetrevenge() +{ + self notify("stopRevenge"); +} \ No newline at end of file diff --git a/MW3/PC/MP/maps/mp/perks/_perks.gsc b/MW3/PC/MP/maps/mp/perks/_perks.gsc new file mode 100644 index 0000000..757dbff --- /dev/null +++ b/MW3/PC/MP/maps/mp/perks/_perks.gsc @@ -0,0 +1,561 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\perks\_perks.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 12 + * Decompile Time: 227 ms + * Timestamp: 10/27/2023 2:14:49 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level.perkfuncs = []; + precacheshader("combathigh_overlay"); + precacheshader("specialty_juiced"); + precacheshader("compassping_revenge"); + precacheshader("specialty_c4death"); + precacheshader("specialty_finalstand"); + precachemodel("weapon_riot_shield_mp"); + precachemodel("viewmodel_riot_shield_mp"); + precachestring(&"MPUI_CHANGING_KIT"); + level.spawnglowmodel["enemy"] = "mil_emergency_flare_mp"; + level.spawnglowmodel["friendly"] = "mil_emergency_flare_mp"; + level.spawnglow["enemy"] = loadfx("misc/flare_ambient"); + level.spawnglow["friendly"] = loadfx("misc/flare_ambient_green"); + level.c4death = loadfx("explosions/javelin_explosion"); + level.spawnfire = loadfx("props/barrelexp"); + precachemodel(level.spawnglowmodel["friendly"]); + precachemodel(level.spawnglowmodel["enemy"]); + precachestring(&"MP_DESTROY_TI"); + precacheshaders(); + level._effect["ricochet"] = loadfx("impacts/large_metalhit_1"); + level.scriptperks = []; + level.perksetfuncs = []; + level.perkunsetfuncs = []; + level.fauxperks = []; + level.scriptperks["specialty_blastshield"] = 1; + level.scriptperks["_specialty_blastshield"] = 1; + level.scriptperks["specialty_akimbo"] = 1; + level.scriptperks["specialty_siege"] = 1; + level.scriptperks["specialty_falldamage"] = 1; + level.scriptperks["specialty_shield"] = 1; + level.scriptperks["specialty_feigndeath"] = 1; + level.scriptperks["specialty_shellshock"] = 1; + level.scriptperks["specialty_delaymine"] = 1; + level.scriptperks["specialty_localjammer"] = 1; + level.scriptperks["specialty_thermal"] = 1; + level.scriptperks["specialty_blackbox"] = 1; + level.scriptperks["specialty_steelnerves"] = 1; + level.scriptperks["specialty_flashgrenade"] = 1; + level.scriptperks["specialty_smokegrenade"] = 1; + level.scriptperks["specialty_concussiongrenade"] = 1; + level.scriptperks["specialty_challenger"] = 1; + level.scriptperks["specialty_saboteur"] = 1; + level.scriptperks["specialty_endgame"] = 1; + level.scriptperks["specialty_rearview"] = 1; + level.scriptperks["specialty_hardline"] = 1; + level.scriptperks["specialty_ac130"] = 1; + level.scriptperks["specialty_sentry_minigun"] = 1; + level.scriptperks["specialty_predator_missile"] = 1; + level.scriptperks["specialty_helicopter_minigun"] = 1; + level.scriptperks["specialty_tank"] = 1; + level.scriptperks["specialty_precision_airstrike"] = 1; + level.scriptperks["specialty_onemanarmy"] = 1; + level.scriptperks["specialty_littlebird_support"] = 1; + level.scriptperks["specialty_primarydeath"] = 1; + level.scriptperks["specialty_secondarybling"] = 1; + level.scriptperks["specialty_explosivedamage"] = 1; + level.scriptperks["specialty_laststandoffhand"] = 1; + level.scriptperks["specialty_dangerclose"] = 1; + level.scriptperks["specialty_luckycharm"] = 1; + level.scriptperks["specialty_hardjack"] = 1; + level.scriptperks["specialty_extraspecialduration"] = 1; + level.scriptperks["specialty_rollover"] = 1; + level.scriptperks["specialty_armorpiercing"] = 1; + level.scriptperks["specialty_omaquickchange"] = 1; + level.scriptperks["_specialty_rearview"] = 1; + level.scriptperks["_specialty_onemanarmy"] = 1; + level.scriptperks["specialty_steadyaimpro"] = 1; + level.scriptperks["specialty_stun_resistance"] = 1; + level.scriptperks["specialty_double_load"] = 1; + level.scriptperks["specialty_hard_shell"] = 1; + level.scriptperks["specialty_regenspeed"] = 1; + level.scriptperks["specialty_twoprimaries"] = 1; + level.scriptperks["specialty_autospot"] = 1; + level.scriptperks["specialty_overkillpro"] = 1; + level.scriptperks["specialty_anytwo"] = 1; + level.scriptperks["specialty_assists"] = 1; + level.scriptperks["specialty_fasterlockon"] = 1; + level.scriptperks["specialty_paint"] = 1; + level.scriptperks["specialty_paint_pro"] = 1; + level.fauxperks["specialty_shield"] = 1; + level.scriptperks["specialty_marksman"] = 1; + level.scriptperks["specialty_sharp_focus"] = 1; + level.scriptperks["specialty_bling"] = 1; + level.scriptperks["specialty_moredamage"] = 1; + level.scriptperks["specialty_copycat"] = 1; + level.scriptperks["specialty_combathigh"] = 1; + level.scriptperks["specialty_finalstand"] = 1; + level.scriptperks["specialty_c4death"] = 1; + level.scriptperks["specialty_juiced"] = 1; + level.scriptperks["specialty_revenge"] = 1; + level.scriptperks["specialty_light_armor"] = 1; + level.scriptperks["specialty_carepackage"] = 1; + level.scriptperks["specialty_stopping_power"] = 1; + level.scriptperks["specialty_uav"] = 1; + level.scriptperks["bouncingbetty_mp"] = 1; + level.scriptperks["c4_mp"] = 1; + level.scriptperks["claymore_mp"] = 1; + level.scriptperks["frag_grenade_mp"] = 1; + level.scriptperks["semtex_mp"] = 1; + level.scriptperks["throwingknife_mp"] = 1; + level.scriptperks["concussion_grenade_mp"] = 1; + level.scriptperks["flash_grenade_mp"] = 1; + level.scriptperks["smoke_grenade_mp"] = 1; + level.scriptperks["specialty_portable_radar"] = 1; + level.scriptperks["specialty_scrambler"] = 1; + level.scriptperks["specialty_tacticalinsertion"] = 1; + level.scriptperks["trophy_mp"] = 1; + level.scriptperks["specialty_null"] = 1; + level.perksetfuncs["specialty_blastshield"] = ::maps\mp\perks\_perkfunctions::setblastshield; + level.perkunsetfuncs["specialty_blastshield"] = ::maps\mp\perks\_perkfunctions::unsetblastshield; + level.perksetfuncs["specialty_siege"] = ::maps\mp\perks\_perkfunctions::setsiege; + level.perkunsetfuncs["specialty_siege"] = ::maps\mp\perks\_perkfunctions::unsetsiege; + level.perksetfuncs["specialty_falldamage"] = ::maps\mp\perks\_perkfunctions::setfreefall; + level.perkunsetfuncs["specialty_falldamage"] = ::maps\mp\perks\_perkfunctions::unsetfreefall; + level.perksetfuncs["specialty_localjammer"] = ::maps\mp\perks\_perkfunctions::setlocaljammer; + level.perkunsetfuncs["specialty_localjammer"] = ::maps\mp\perks\_perkfunctions::unsetlocaljammer; + level.perksetfuncs["specialty_thermal"] = ::maps\mp\perks\_perkfunctions::setthermal; + level.perkunsetfuncs["specialty_thermal"] = ::maps\mp\perks\_perkfunctions::unsetthermal; + level.perksetfuncs["specialty_blackbox"] = ::maps\mp\perks\_perkfunctions::setblackbox; + level.perkunsetfuncs["specialty_blackbox"] = ::maps\mp\perks\_perkfunctions::unsetblackbox; + level.perksetfuncs["specialty_lightweight"] = ::maps\mp\perks\_perkfunctions::setlightweight; + level.perkunsetfuncs["specialty_lightweight"] = ::maps\mp\perks\_perkfunctions::unsetlightweight; + level.perksetfuncs["specialty_steelnerves"] = ::maps\mp\perks\_perkfunctions::setsteelnerves; + level.perkunsetfuncs["specialty_steelnerves"] = ::maps\mp\perks\_perkfunctions::unsetsteelnerves; + level.perksetfuncs["specialty_delaymine"] = ::maps\mp\perks\_perkfunctions::setdelaymine; + level.perkunsetfuncs["specialty_delaymine"] = ::maps\mp\perks\_perkfunctions::unsetdelaymine; + level.perksetfuncs["specialty_challenger"] = ::maps\mp\perks\_perkfunctions::setchallenger; + level.perkunsetfuncs["specialty_challenger"] = ::maps\mp\perks\_perkfunctions::unsetchallenger; + level.perksetfuncs["specialty_saboteur"] = ::maps\mp\perks\_perkfunctions::setsaboteur; + level.perkunsetfuncs["specialty_saboteur"] = ::maps\mp\perks\_perkfunctions::unsetsaboteur; + level.perksetfuncs["specialty_endgame"] = ::maps\mp\perks\_perkfunctions::setendgame; + level.perkunsetfuncs["specialty_endgame"] = ::maps\mp\perks\_perkfunctions::unsetendgame; + level.perksetfuncs["specialty_rearview"] = ::maps\mp\perks\_perkfunctions::setrearview; + level.perkunsetfuncs["specialty_rearview"] = ::maps\mp\perks\_perkfunctions::unsetrearview; + level.perksetfuncs["specialty_ac130"] = ::maps\mp\perks\_perkfunctions::setac130; + level.perkunsetfuncs["specialty_ac130"] = ::maps\mp\perks\_perkfunctions::unsetac130; + level.perksetfuncs["specialty_sentry_minigun"] = ::maps\mp\perks\_perkfunctions::setsentryminigun; + level.perkunsetfuncs["specialty_sentry_minigun"] = ::maps\mp\perks\_perkfunctions::unsetsentryminigun; + level.perksetfuncs["specialty_predator_missile"] = ::maps\mp\perks\_perkfunctions::setpredatormissile; + level.perkunsetfuncs["specialty_predator_missile"] = ::maps\mp\perks\_perkfunctions::unsetpredatormissile; + level.perksetfuncs["specialty_tank"] = ::maps\mp\perks\_perkfunctions::settank; + level.perkunsetfuncs["specialty_tank"] = ::maps\mp\perks\_perkfunctions::unsettank; + level.perksetfuncs["specialty_precision_airstrike"] = ::maps\mp\perks\_perkfunctions::setprecision_airstrike; + level.perkunsetfuncs["specialty_precision_airstrike"] = ::maps\mp\perks\_perkfunctions::unsetprecision_airstrike; + level.perksetfuncs["specialty_helicopter_minigun"] = ::maps\mp\perks\_perkfunctions::sethelicopterminigun; + level.perkunsetfuncs["specialty_helicopter_minigun"] = ::maps\mp\perks\_perkfunctions::unsethelicopterminigun; + level.perksetfuncs["specialty_onemanarmy"] = ::maps\mp\perks\_perkfunctions::setonemanarmy; + level.perkunsetfuncs["specialty_onemanarmy"] = ::maps\mp\perks\_perkfunctions::unsetonemanarmy; + level.perksetfuncs["specialty_littlebird_support"] = ::maps\mp\perks\_perkfunctions::setlittlebirdsupport; + level.perkunsetfuncs["specialty_littlebird_support"] = ::maps\mp\perks\_perkfunctions::unsetlittlebirdsupport; + level.perksetfuncs["specialty_tacticalinsertion"] = ::maps\mp\perks\_perkfunctions::settacticalinsertion; + level.perkunsetfuncs["specialty_tacticalinsertion"] = ::maps\mp\perks\_perkfunctions::unsettacticalinsertion; + level.perksetfuncs["specialty_scrambler"] = ::maps\mp\gametypes\_scrambler::setscrambler; + level.perkunsetfuncs["specialty_scrambler"] = ::maps\mp\gametypes\_scrambler::unsetscrambler; + level.perksetfuncs["specialty_portable_radar"] = ::maps\mp\gametypes\_portable_radar::setportableradar; + level.perkunsetfuncs["specialty_portable_radar"] = ::maps\mp\gametypes\_portable_radar::unsetportableradar; + level.perksetfuncs["specialty_steadyaimpro"] = ::maps\mp\perks\_perkfunctions::setsteadyaimpro; + level.perkunsetfuncs["specialty_steadyaimpro"] = ::maps\mp\perks\_perkfunctions::unsetsteadyaimpro; + level.perksetfuncs["specialty_stun_resistance"] = ::maps\mp\perks\_perkfunctions::setstunresistance; + level.perkunsetfuncs["specialty_stun_resistance"] = ::maps\mp\perks\_perkfunctions::unsetstunresistance; + level.perksetfuncs["specialty_marksman"] = ::maps\mp\perks\_perkfunctions::setmarksman; + level.perkunsetfuncs["specialty_marksman"] = ::maps\mp\perks\_perkfunctions::unsetmarksman; + level.perksetfuncs["specialty_double_load"] = ::maps\mp\perks\_perkfunctions::setdoubleload; + level.perkunsetfuncs["specialty_double_load"] = ::maps\mp\perks\_perkfunctions::unsetdoubleload; + level.perksetfuncs["specialty_sharp_focus"] = ::maps\mp\perks\_perkfunctions::setsharpfocus; + level.perkunsetfuncs["specialty_sharp_focus"] = ::maps\mp\perks\_perkfunctions::unsetsharpfocus; + level.perksetfuncs["specialty_hard_shell"] = ::maps\mp\perks\_perkfunctions::sethardshell; + level.perkunsetfuncs["specialty_hard_shell"] = ::maps\mp\perks\_perkfunctions::unsethardshell; + level.perksetfuncs["specialty_regenspeed"] = ::maps\mp\perks\_perkfunctions::setregenspeed; + level.perkunsetfuncs["specialty_regenspeed"] = ::maps\mp\perks\_perkfunctions::unsetregenspeed; + level.perksetfuncs["specialty_autospot"] = ::maps\mp\perks\_perkfunctions::setautospot; + level.perkunsetfuncs["specialty_autospot"] = ::maps\mp\perks\_perkfunctions::unsetautospot; + level.perksetfuncs["specialty_empimmune"] = ::maps\mp\perks\_perkfunctions::setempimmune; + level.perkunsetfuncs["specialty_empimmune"] = ::maps\mp\perks\_perkfunctions::unsetempimmune; + level.perksetfuncs["specialty_overkill_pro"] = ::maps\mp\perks\_perkfunctions::setoverkillpro; + level.perkunsetfuncs["specialty_overkill_pro"] = ::maps\mp\perks\_perkfunctions::unsetoverkillpro; + level.perksetfuncs["specialty_combathigh"] = ::maps\mp\perks\_perkfunctions::setcombathigh; + level.perkunsetfuncs["specialty_combathigh"] = ::maps\mp\perks\_perkfunctions::unsetcombathigh; + level.perksetfuncs["specialty_light_armor"] = ::maps\mp\perks\_perkfunctions::setlightarmor; + level.perkunsetfuncs["specialty_light_armor"] = ::maps\mp\perks\_perkfunctions::unsetlightarmor; + level.perksetfuncs["specialty_revenge"] = ::maps\mp\perks\_perkfunctions::setrevenge; + level.perkunsetfuncs["specialty_revenge"] = ::maps\mp\perks\_perkfunctions::unsetrevenge; + level.perksetfuncs["specialty_c4death"] = ::maps\mp\perks\_perkfunctions::setc4death; + level.perkunsetfuncs["specialty_c4death"] = ::maps\mp\perks\_perkfunctions::unsetc4death; + level.perksetfuncs["specialty_finalstand"] = ::maps\mp\perks\_perkfunctions::setfinalstand; + level.perkunsetfuncs["specialty_finalstand"] = ::maps\mp\perks\_perkfunctions::unsetfinalstand; + level.perksetfuncs["specialty_juiced"] = ::maps\mp\perks\_perkfunctions::setjuiced; + level.perkunsetfuncs["specialty_juiced"] = ::maps\mp\perks\_perkfunctions::unsetjuiced; + level.perksetfuncs["specialty_carepackage"] = ::maps\mp\perks\_perkfunctions::setcarepackage; + level.perkunsetfuncs["specialty_carepackage"] = ::maps\mp\perks\_perkfunctions::unsetcarepackage; + level.perksetfuncs["specialty_stopping_power"] = ::maps\mp\perks\_perkfunctions::setstoppingpower; + level.perkunsetfuncs["specialty_stopping_power"] = ::maps\mp\perks\_perkfunctions::unsetstoppingpower; + level.perksetfuncs["specialty_uav"] = ::maps\mp\perks\_perkfunctions::setuav; + level.perkunsetfuncs["specialty_uav"] = ::maps\mp\perks\_perkfunctions::unsetuav; + initperkdvars(); + level thread onplayerconnect(); +} + +//Function Number: 2 +precacheshaders() +{ + precacheshader("specialty_blastshield"); +} + +//Function Number: 3 +validateperk(param_00,param_01) +{ + if(getdvarint("scr_game_perks") == 0) + { + if(tablelookup("mp/perkTable.csv",1,param_01,5) != "equipment") + { + return "specialty_null"; + } + } + + return param_01; +} + +//Function Number: 4 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_00 thread onplayerspawned(); + } +} + +//Function Number: 5 +onplayerspawned() +{ + self endon("disconnect"); + self.perks = []; + self.weaponlist = []; + self.omaclasschanged = 0; + for(;;) + { + self waittill("spawned_player"); + self.omaclasschanged = 0; + thread playerproximitytracker(); + thread maps\mp\gametypes\_scrambler::scramblerproximitytracker(); + } +} + +//Function Number: 6 +playerproximitytracker() +{ + self endon("disconnect"); + self endon("death"); + self endon("faux_spawn"); + level endon("game_ended"); + self.proximityactive = 0; + for(;;) + { + foreach(var_01 in level.players) + { + wait 0.05; + if(!isdefined(var_01)) + { + continue; + } + + if(var_01.team != self.team) + { + continue; + } + + if(var_01 == self) + { + continue; + } + + if(!maps\mp\_utility::isreallyalive(var_01)) + { + continue; + } + + if(!maps\mp\_utility::isreallyalive(self)) + { + continue; + } + + var_02 = distancesquared(var_01.origin,self.origin); + if(var_02 < 262144) + { + self.proximityactive = 1; + break; + } + } + + wait 0.25; + } +} + +//Function Number: 7 +drawline(param_00,param_01,param_02) +{ + var_03 = int(param_02 * 20); + for(var_04 = 0;var_04 < var_03;var_04++) + { + wait 0.05; + } +} + +//Function Number: 8 +cac_modified_damage(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07) +{ + var_08 = 0; + if(maps\mp\_utility::isbulletdamage(param_03)) + { + if(isplayer(param_01) && param_01 maps\mp\_utility::_hasperk("specialty_paint_pro") && !maps\mp\_utility::iskillstreakweapon(param_04)) + { + if(!param_00 maps\mp\perks\_perkfunctions::ispainted()) + { + param_01 maps\mp\gametypes\_missions::processchallenge("ch_bulletpaint"); + } + + param_00 thread maps\mp\perks\_perkfunctions::setpainted(); + } + + if(isplayer(param_01) && isdefined(param_04) && maps\mp\_utility::getweaponclass(param_04) == "weapon_sniper" && issubstr(param_04,"silencer")) + { + param_02 = param_02 * 0.75; + } + + if(isplayer(param_01) && (param_01 maps\mp\_utility::_hasperk("specialty_stopping_power") && param_01 maps\mp\_utility::_hasperk("specialty_bulletdamage")) || param_01 maps\mp\_utility::_hasperk("specialty_moredamage")) + { + param_02 = param_02 + param_02 * level.bulletdamagemod; + } + + if(param_00 maps\mp\_utility::isjuggernaut()) + { + param_02 = param_02 * level.armorvestmod; + } + } + else if(isexplosivedamagemod(param_03)) + { + if(isplayer(param_01) && param_01 != param_00 && param_01 isitemunlocked("specialty_paint") && param_01 maps\mp\_utility::_hasperk("specialty_paint") && !maps\mp\_utility::iskillstreakweapon(param_04)) + { + if(!param_00 maps\mp\perks\_perkfunctions::ispainted()) + { + param_01 maps\mp\gametypes\_missions::processchallenge("ch_paint_pro"); + } + + param_00 thread maps\mp\perks\_perkfunctions::setpainted(); + } + + if(isplayer(param_01) && weaponinheritsperks(param_04) && param_01 maps\mp\_utility::_hasperk("specialty_explosivedamage") && param_00 maps\mp\_utility::_hasperk("_specialty_blastshield")) + { + var_08 = var_08 + 0; + } + else if(isplayer(param_01) && weaponinheritsperks(param_04) && param_01 maps\mp\_utility::_hasperk("specialty_explosivedamage")) + { + var_08 = var_08 + param_02 * level.explosivedamagemod; + } + else if(param_00 maps\mp\_utility::_hasperk("_specialty_blastshield") && param_04 != "semtex_mp" || param_02 != 120) + { + var_08 = var_08 - int(param_02 * 1 - level.blastshieldmod); + } + + if(maps\mp\_utility::iskillstreakweapon(param_04) && isplayer(param_01) && param_01 maps\mp\_utility::_hasperk("specialty_dangerclose")) + { + var_08 = var_08 + param_02 * level.dangerclosemod; + } + + if(param_00 maps\mp\_utility::isjuggernaut()) + { + switch(param_04) + { + case "ac130_25mm_mp": + param_02 = param_02 * level.armorvestmod; + break; + + case "remote_mortar_missile_mp": + param_02 = param_02 * 0.2; + break; + + default: + if(param_02 < 1000) + { + if(param_02 > 1) + { + param_02 = param_02 * level.armorvestmod; + } + } + break; + } + } + + if(10 - level.graceperiod - level.ingraceperiod > 0) + { + param_02 = param_02 * level.armorvestmod; + } + } + else if(param_03 == "MOD_FALLING") + { + if(param_00 isitemunlocked("specialty_falldamage") && param_00 maps\mp\_utility::_hasperk("specialty_falldamage")) + { + if(param_02 > 0) + { + param_00 maps\mp\gametypes\_missions::processchallenge("ch_falldamage"); + } + + var_08 = 0; + param_02 = 0; + } + } + else if(param_03 == "MOD_MELEE") + { + if(isdefined(param_00.haslightarmor) && param_00.haslightarmor) + { + if(issubstr(param_04,"riotshield")) + { + param_02 = int(param_00.maxhealth * 0.66); + } + else + { + param_02 = param_00.maxhealth + 1; + } + } + + if(param_00 maps\mp\_utility::isjuggernaut()) + { + param_02 = 20; + var_08 = 0; + } + } + else if(param_03 == "MOD_IMPACT") + { + if(param_00 maps\mp\_utility::isjuggernaut()) + { + switch(param_04) + { + case "semtex_mp": + case "flash_grenade_mp": + case "smoke_grenade_mp": + case "frag_grenade_mp": + case "concussion_grenade_mp": + param_02 = 5; + break; + + default: + if(param_02 < 1000) + { + param_02 = 25; + } + break; + } + + var_08 = 0; + } + } + + if(param_00 maps\mp\_utility::_hasperk("specialty_combathigh")) + { + if(isdefined(self.damageblockedtotal) && !level.teambased || isdefined(param_01) && isdefined(param_01.team) && param_00.team != param_01.team) + { + var_09 = param_02 + var_08; + var_0A = var_09 - var_09 / 3; + self.damageblockedtotal = self.damageblockedtotal + var_0A; + if(self.damageblockedtotal >= 101) + { + self notify("combathigh_survived"); + self.damageblockedtotal = undefined; + } + } + + if(param_04 != "throwingknife_mp") + { + switch(param_03) + { + case "MOD_FALLING": + case "MOD_MELEE": + break; + + default: + param_02 = int(param_02 / 3); + var_08 = int(var_08 / 3); + break; + } + } + } + + if(isdefined(param_00.haslightarmor) && param_00.haslightarmor && param_04 == "throwingknife_mp") + { + param_02 = param_00.health; + var_08 = 0; + } + + if(param_02 <= 1) + { + param_02 = 1; + return param_02; + } + + return int(param_02 + var_08); +} + +//Function Number: 9 +initperkdvars() +{ + level.bulletdamagemod = maps\mp\_utility::getintproperty("perk_bulletDamage",40) / 100; + level.armorvestmod = 0.08; + level.armorvestdefmod = 0.08; + level.armorpiercingmod = 1.5; + level.explosivedamagemod = maps\mp\_utility::getintproperty("perk_explosiveDamage",40) / 100; + level.blastshieldmod = maps\mp\_utility::getintproperty("perk_blastShield",45) / 100; + level.riotshieldmod = maps\mp\_utility::getintproperty("perk_riotShield",100) / 100; + level.dangerclosemod = maps\mp\_utility::getintproperty("perk_dangerClose",100) / 100; +} + +//Function Number: 10 +cac_selector() +{ + var_00 = self.specialty; +} + +//Function Number: 11 +gambitusetracker() +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + if(getdvarint("scr_game_perks") != 1) + { + return; + } + + maps\mp\_utility::gameflagwait("prematch_done"); + self notifyonplayercommand("gambit_on","+frag"); +} + +//Function Number: 12 +giveblindeyeafterspawn() +{ + self endon("death"); + self endon("disconnect"); + maps\mp\_utility::giveperk("specialty_blindeye",0); + self.spawnperk = 1; + while(self.avoidkillstreakonspawntimer > 0) + { + self.avoidkillstreakonspawntimer = self.avoidkillstreakonspawntimer - 0.05; + wait 0.05; + } + + maps\mp\_utility::_unsetperk("specialty_blindeye"); + self.spawnperk = 0; +} \ No newline at end of file diff --git a/MW3/PC/SP/104.gsc b/MW3/PC/SP/104.gsc new file mode 100644 index 0000000..9762159 --- /dev/null +++ b/MW3/PC/SP/104.gsc @@ -0,0 +1,217 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 104.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 13 + * Decompile Time: 1 ms + * Timestamp: 10/27/2023 2:19:39 AM +*******************************************************************/ + +//Function Number: 1 +func_1477() +{ + level._audio.var_1478 = spawnstruct(); + level._audio.var_1478.music = spawnstruct(); + level._audio.var_1478.music.var_147A = func_148A(); + level._audio.var_1478.music.var_147B = func_148A(); + level._audio.var_1478.var_147C = spawnstruct(); + level._audio.var_1478.var_147C.var_147A = func_148A(); + level._audio.var_1478.var_147C.var_147B = func_148A(); +} + +//Function Number: 2 +func_147D(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = 1; + if(isdefined(param_01)) + { + var_05 = max(param_01,0); + } + + var_06 = 1; + if(isdefined(param_04)) + { + var_06 = max(param_04,0); + } + + func_1489(level._audio.var_1478.var_147C.var_147B,level._audio.var_1478.var_147C.var_147A.name,level._audio.var_1478.var_147C.var_147A.vol,level._audio.var_1478.var_147C.var_147A.fade); + func_1489(level._audio.var_1478.var_147C.var_147A,param_00,var_06,var_05); + ambientplay(param_00,var_05,var_06); +} + +//Function Number: 3 +func_1480(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = 1; + if(isdefined(param_01)) + { + var_05 = max(param_01,0); + } + + var_06 = 1; + if(isdefined(param_02)) + { + var_06 = param_02; + } + + var_07 = 1; + if(isdefined(param_03)) + { + var_07 = max(param_03,0); + } + + func_1489(level._audio.var_1478.music.var_147B,level._audio.var_1478.music.var_147A.name,level._audio.var_1478.music.var_147A.vol,level._audio.var_1478.music.var_147A.fade); + func_1489(level._audio.var_1478.music.var_147A,param_00,var_07,var_05); + if(isdefined(param_04)) + { + musicstop(var_06,param_04); + musicplay(param_00,var_05,var_07,0); + return; + } + + musicplay(param_00,var_05,var_07); +} + +//Function Number: 4 +func_1481(param_00,param_01) +{ + if(param_00 != "none") + { + var_02 = 1; + if(isdefined(param_01)) + { + var_02 = max(param_01,0); + } + + if(level._audio.var_1478.var_147C.var_147A.name == param_00) + { + level._audio.var_1478.var_147C.var_147A = level._audio.var_1478.var_147C.var_147B; + func_148B(level._audio.var_1478.var_147C.var_147B); + } + else if(level._audio.var_1478.var_147C.var_147B.name == param_00) + { + func_148B(level._audio.var_1478.var_147C.var_147B); + } + + ambientstop(var_02,param_00); + } +} + +//Function Number: 5 +func_1482(param_00,param_01) +{ + var_02 = 1; + if(isdefined(param_01)) + { + var_02 = max(param_01,0); + } + + if(level._audio.var_1478.music.var_147A.name == param_00) + { + level._audio.var_1478.music.var_147A = level._audio.var_1478.music.var_147B; + func_148B(level._audio.var_1478.music.var_147B); + } + else if(level._audio.var_1478.var_147C.var_147B.name == param_00) + { + func_148B(level._audio.var_1478.music.var_147B); + } + + musicstop(var_02,param_00); +} + +//Function Number: 6 +func_1483(param_00) +{ + var_01 = 1; + if(isdefined(param_00)) + { + var_01 = param_00; + } + + ambientstop(var_01); +} + +//Function Number: 7 +func_1484(param_00) +{ + var_01 = 1; + if(isdefined(param_00)) + { + var_01 = param_00; + } + + func_148B(level._audio.var_1478.music.var_147A); + func_148B(level._audio.var_1478.music.var_147B); + musicstop(var_01); +} + +//Function Number: 8 +func_1485(param_00) +{ + var_01 = 0.009; + if(param_00.size == 1) + { + func_1489(level._audio.var_1478.var_147C.var_147A,param_00[0].alias,param_00[0].vol,param_00[0].fade); + } + else if(param_00.size == 2) + { + func_1489(level._audio.var_1478.var_147C.var_147B,param_00[0].alias,param_00[0].vol,param_00[0].fade); + func_1489(level._audio.var_1478.var_147C.var_147A,param_00[1].alias,param_00[1].vol,param_00[1].fade); + } + + for(var_06 = 0;var_06 < param_00.size;var_06++) + { + var_07 = param_00[var_06].alias; + var_08 = max(param_00[var_06].vol,0); + var_09 = clamp(param_00[var_06].fade,0,1); + if(var_07 != "none") + { + if(var_08 < var_01) + { + ambientstop(var_09,var_07); + continue; + } + + ambientplay(var_07,var_09,var_08,0); + } + } +} + +//Function Number: 9 +func_1487() +{ + return level._audio.var_1478.var_147C.var_147A.name; +} + +//Function Number: 10 +func_1488() +{ + return level._audio.var_1478.music.var_147A.name; +} + +//Function Number: 11 +func_1489(param_00,param_01,param_02,param_03) +{ + param_00.name = param_01; + param_00.vol = param_02; + param_00.fade = param_03; +} + +//Function Number: 12 +func_148A() +{ + var_00 = spawnstruct(); + var_00.name = ""; + var_00.vol = 0; + var_00.fade = 0; + return var_00; +} + +//Function Number: 13 +func_148B(param_00) +{ + param_00.name = ""; + param_00.vol = 0; + param_00.fade = 0; +} \ No newline at end of file diff --git a/MW3/PC/SP/134.gsc b/MW3/PC/SP/134.gsc new file mode 100644 index 0000000..700f239 --- /dev/null +++ b/MW3/PC/SP/134.gsc @@ -0,0 +1,303 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 134.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 15 + * Decompile Time: 3 ms + * Timestamp: 10/27/2023 2:19:59 AM +*******************************************************************/ + +//Function Number: 1 +func_1455(param_00) +{ + if(!isdefined(level._audio)) + { + level._audio = spawnstruct(); + } + + level._audio.var_1457 = spawnstruct(); + level._audio.var_1457.use_string_table_presets = 0; + level._audio.var_1457.use_iw_presets = 0; + level._audio.var_1457.var_145A = ""; +} + +//Function Number: 2 +func_145B() +{ + level._audio.var_1457.use_string_table_presets = 1; + level._audio.var_1457.use_iw_presets = 0; +} + +//Function Number: 3 +func_145C() +{ + level._audio.var_1457.use_iw_presets = 1; + level._audio.var_1457.use_string_table_presets = 0; +} + +//Function Number: 4 +func_145D(param_00,param_01) +{ + param_01 = clamp(param_01,0,1); + param_00.var_145E = param_01; +} + +//Function Number: 5 +func_145F(param_00,param_01) +{ + param_01 = clamp(param_01,0,1); + param_00.var_1460 = param_01; +} + +//Function Number: 6 +func_1461(param_00,param_01) +{ + if(!isdefined(level._audio.var_1457.var_1462) || level._audio.var_1457.var_1462 != param_00) + { + level._audio.var_1457.var_1462 = param_00; + var_02 = undefined; + if(isdefined(param_01)) + { + var_02 = param_01; + } + else + { + var_02 = param_00.var_1463; + } + + level.player setreverb(param_00.priority,param_00.var_1464,param_00.var_145E,param_00.var_1460,var_02); + } +} + +//Function Number: 7 +func_1465(param_00,param_01) +{ + if(level.player maps\_utility::ent_flag("player_has_red_flashing_overlay")) + { + if(isdefined(param_00) && param_00 != "none") + { + var_02 = func_1472(param_00); + if(!isdefined(var_02)) + { + maps\_audio::aud_print_warning("Failed to load reverb preset: " + param_00); + return; + } + + if(param_00 != "deathsdoor") + { + func_1468(param_00,var_02); + level._audio.var_1467.var_1457 = param_00; + } + } + else + { + func_1468("none",undefined); + level._audio.var_1467.var_1457 = "none"; + } + + return; + } + + if(((isdefined(param_00) && param_00 == "none") || !isdefined(param_00)) && isdefined(level._audio.var_145A)) + { + level.player deactivatereverb("snd_enveffectsprio_level",1); + level._audio.var_145A = undefined; + level._audio.var_1457.var_145A = ""; + return; + } + else if(!isdefined(param_00) || isdefined(param_00) && param_00 == "none") + { + return; + } + + var_02 = func_1472(param_00); + if(!isdefined(var_02)) + { + maps\_audio::aud_print_warning("Failed to load reverb preset: " + param_00); + return; + } + + level._audio.var_145A = param_00; + if(param_00 != "deathsdoor") + { + func_1468(param_00,var_02); + } + + if(level._audio.var_1457.var_145A != param_00) + { + level._audio.var_1457.var_145A = param_00; + func_1461(var_02,param_01); + } +} + +//Function Number: 8 +func_1468(param_00,param_01) +{ + if(param_00 != "deathsdoor") + { + level.reverb_track = param_00; + if(param_00 == "none" && !isdefined(level.ambient_reverb["none"])) + { + level.ambient_reverb["none"] = 1; + return; + } + + if(!isdefined(level.ambient_reverb[param_00])) + { + level.ambient_reverb[param_00] = []; + level.ambient_reverb[param_00]["priority"] = "snd_enveffectsprio_level"; + level.ambient_reverb[param_00]["roomtype"] = param_01.var_1464; + level.ambient_reverb[param_00]["drylevel"] = param_01.var_145E; + level.ambient_reverb[param_00]["wetlevel"] = param_01.var_1460; + level.ambient_reverb[param_00]["fadetime"] = param_01.var_1463; + return; + } + } +} + +//Function Number: 9 +func_146B() +{ + level.reverb_track = ""; + level.player deactivatereverb("snd_enveffectsprio_level",2); + level._audio.var_145A = undefined; + level._audio.var_1457.var_145A = ""; +} + +//Function Number: 10 +func_146C() +{ + var_00 = undefined; + if(isdefined(level._audio.var_1457.var_1462)) + { + var_00 = level._audio.var_1457.var_1462; + } + + return var_00; +} + +//Function Number: 11 +func_146D(param_00,param_01) +{ + var_02 = maps\_audio::get_reverb_stringtable(); + var_03 = "soundtables/common_reverb.csv"; + var_04 = []; + if(param_01) + { + var_04 = func_146F(var_02,param_00); + } + + if(!isdefined(var_04) || var_04.size == 0) + { + var_04 = func_146F(var_03,param_00); + } + + if(!isdefined(var_04) || var_04.size == 0) + { + return; + } + + return var_04; +} + +//Function Number: 12 +func_146F(param_00,param_01) +{ + var_02 = []; + var_03 = ""; + var_04 = ""; + var_05 = 6; + for(var_06 = 1;var_06 < var_05;var_06++) + { + var_03 = tablelookup(param_00,0,"reverb_names",var_06); + var_04 = tablelookup(param_00,0,param_01,var_06); + if(var_03 != "comments" && var_04 != "") + { + if(var_03 != "roomtype") + { + var_02[var_03] = float(var_04); + continue; + } + + var_02[var_03] = var_04; + } + } + + return var_02; +} + +//Function Number: 13 +func_1470() +{ + while(!isdefined(level.player)) + { + wait 0.5; + } + + func_1461(level._audio.var_1457.var_1471); +} + +//Function Number: 14 +func_1472(param_00) +{ + if(!isdefined(level._audio.var_1457.preset_cache)) + { + level._audio.var_1457.preset_cache = []; + } + + var_01 = func_1476(); + var_02 = []; + if(isdefined(level._audio.level_audio_filter_function)) + { + var_02 = [[ level._audio.level_audio_filter_function ]](param_00,var_02); + } + else if(isdefined(level._audio.var_1457.preset_cache[param_00])) + { + var_02 = level._audio.var_1457.preset_cache[param_00]; + } + else if(level._audio.var_1457.use_string_table_presets) + { + var_02 = func_146D(param_00,1); + if(!isdefined(var_02)) + { + return; + } + + level._audio.var_1457.preset_cache[param_00] = var_02; + } + else + { + var_02 = func_146D(param_00,0); + if(!isdefined(var_02) || var_02.size == 0) + { + var_02 = maps\_audio::audio_presets_reverb(param_00,var_02); + } + + if(!isdefined(var_02)) + { + return; + } + + level._audio.var_1457.preset_cache[param_00] = var_02; + } + + var_01.name = param_00; + var_01.var_1464 = var_02["roomtype"]; + var_01.var_145E = var_02["drylevel"]; + var_01.var_1460 = var_02["wetlevel"]; + var_01.var_1463 = var_02["fadetime"]; + return var_01; +} + +//Function Number: 15 +func_1476() +{ + var_00 = spawnstruct(); + var_00.var_1464 = "generic"; + var_00.var_145E = 1; + var_00.var_1460 = 0.5; + var_00.var_1463 = 0; + var_00.priority = "snd_enveffectsprio_level"; + return var_00; +} \ No newline at end of file diff --git a/MW3/PC/SP/1343.gsc b/MW3/PC/SP/1343.gsc new file mode 100644 index 0000000..be646f8 --- /dev/null +++ b/MW3/PC/SP/1343.gsc @@ -0,0 +1,16 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1343.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:19:59 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + var_00[0] = "head_gign_a"; + return var_7B; +} \ No newline at end of file diff --git a/MW3/PC/SP/1344.gsc b/MW3/PC/SP/1344.gsc new file mode 100644 index 0000000..ab2cc16 --- /dev/null +++ b/MW3/PC/SP/1344.gsc @@ -0,0 +1,19 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1344.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:20:00 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + wait 0; + if(isdefined(self)) + { + self delete(); + } +} \ No newline at end of file diff --git a/MW3/PC/SP/1345.gsc b/MW3/PC/SP/1345.gsc new file mode 100644 index 0000000..577bf4f --- /dev/null +++ b/MW3/PC/SP/1345.gsc @@ -0,0 +1,23 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1345.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:20:00 AM +*******************************************************************/ + +//Function Number: 1 +func_067D() +{ + level.struct = []; +} + +//Function Number: 2 +func_067E() +{ + var_00 = spawnstruct(); + level.struct[level.struct.size] = var_00; + return var_00; +} \ No newline at end of file diff --git a/MW3/PC/SP/1346.gsc b/MW3/PC/SP/1346.gsc new file mode 100644 index 0000000..ce518ae --- /dev/null +++ b/MW3/PC/SP/1346.gsc @@ -0,0 +1,14 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1346.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:20:00 AM +*******************************************************************/ + +//Function Number: 1 +main(param_00,param_01) +{ +} \ No newline at end of file diff --git a/MW3/PC/SP/135.gsc b/MW3/PC/SP/135.gsc new file mode 100644 index 0000000..6ac0135 --- /dev/null +++ b/MW3/PC/SP/135.gsc @@ -0,0 +1,1362 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 135.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 62 + * Decompile Time: 71 ms + * Timestamp: 10/27/2023 2:20:03 AM +*******************************************************************/ + +//Function Number: 1 +func_14FC() +{ + if(!isdefined(level._audio)) + { + level._audio = spawnstruct(); + } + + if(!isdefined(level._audio.indexed)) + { + level._audio.indexed = spawnstruct(); + } + + func_1558(); + level._audio.indexed.use_string_table_presets = 0; + level._audio.indexed.use_iw_presets = 0; + level._audio.indexed.var_14FE = 0; + level._audio.indexed.var_14FF = 0; + var_00 = 10; + thread func_154D(var_00); + thread func_154C(var_00); + level._audio.indexed.var_1500 = ""; + level._audio.indexed.var_1501 = ""; + level._audio.indexed.var_1502 = []; + if(!isdefined(level._audio.var_1503)) + { + level._audio.var_1503 = []; + } + + level._audio.indexed.var_1504 = []; + level._audio.indexed.preset_cache = []; + level._audio.indexed.var_1505 = []; + level._audio.indexed.var_1506 = 0.85; + level._audio.indexed.var_1507 = 0; + level._audio.indexed.var_1508 = ""; + thread func_153E(); + waittillframeend; + thread func_1545(); +} + +//Function Number: 2 +func_1509(param_00) +{ + func_1556(param_00); +} + +//Function Number: 3 +func_150A(param_00,param_01,param_02) +{ + if(!level._audio.indexed.var_14FF) + { + var_03 = 1; + if(isdefined(param_02)) + { + var_03 = param_02; + } + + level._audio.indexed.var_1506 = param_01; + var_04 = func_1556(param_00); + if(isdefined(var_04)) + { + level._audio.indexed.var_150B = var_04; + func_153C(var_03,param_00); + } + } +} + +//Function Number: 4 +func_150C() +{ + level._audio.indexed.var_14FF = 1; +} + +//Function Number: 5 +func_150D() +{ + level._audio.indexed.var_14FF = 0; +} + +//Function Number: 6 +func_150E() +{ + level._audio.indexed.use_string_table_presets = 1; + level._audio.indexed.use_iw_presets = 0; +} + +//Function Number: 7 +func_150F(param_00,param_01) +{ + if(!level._audio.indexed.var_14FF && !level._audio.indexed.var_14FE) + { + if(param_00 != level._audio.indexed.var_1500) + { + func_153B(0); + func_1535(param_00,param_01); + } + } +} + +//Function Number: 8 +func_1510(param_00) +{ + if(!level._audio.indexed.var_14FF && !level._audio.indexed.var_14FE) + { + var_01 = func_1556(param_00); + if(!isdefined(var_01)) + { + return; + } + + if(isdefined(level._audio.indexed.var_1503["zone_mix"])) + { + foreach(var_04, var_03 in level._audio.indexed.var_1503["zone_mix"]) + { + if(var_04 != "fade_time" && var_04 != "preset_name") + { + level._audio.indexed.var_1503["zone_mix"][var_04].var_1511 = 1; + } + } + } + else + { + level._audio.indexed.var_1503["zone_mix"] = []; + } + + level._audio.indexed.var_1503["zone_mix"]["preset_name"] = param_00; + foreach(var_04, var_03 in var_01) + { + if(var_04 != "fade_time" && var_04 != "name") + { + level._audio.indexed.var_1503["zone_mix"][var_04] = spawnstruct(); + level._audio.indexed.var_1503["zone_mix"][var_04].var_1511 = var_03; + level._audio.indexed.var_1503["zone_mix"][var_04].var_1512 = var_03; + } + } + + var_06 = 1; + if(isdefined(var_01["fade_time"])) + { + var_06 = var_01["fade_time"]; + } + + func_153C(var_06,"zone_mix"); + } +} + +//Function Number: 9 +func_1513(param_00) +{ + var_01 = 1; + if(isdefined(param_00)) + { + var_01 = param_00; + } + + if(isdefined(level._audio.indexed.var_1503["zone_mix"])) + { + level._audio.indexed.var_1503["zone_mix"]["CLEAR"] = 1; + func_153C(var_01,"zone_mix"); + } +} + +//Function Number: 10 +func_1514(param_00) +{ + func_153B(1,param_00); +} + +//Function Number: 11 +func_1515(param_00) +{ + level._audio.indexed.var_1502[param_00] = 1; +} + +//Function Number: 12 +func_1516(param_00) +{ + level._audio.indexed.var_1502[param_00] = undefined; +} + +//Function Number: 13 +func_1517(param_00,param_01,param_02) +{ + if(!level._audio.indexed.var_14FF && !level._audio.indexed.var_14FE) + { + func_1535(param_00,param_01,param_02); + } +} + +//Function Number: 14 +func_1518(param_00,param_01,param_02,param_03) +{ + if(!isdefined(level._audio.indexed.var_1504[param_01])) + { + var_04 = func_1538(undefined,param_00,param_02); + if(!isdefined(var_04)) + { + return; + } + + level._audio.indexed.var_1504[param_01] = var_04; + func_153C(param_03,param_00); + } +} + +//Function Number: 15 +func_1519(param_00,param_01,param_02,param_03,param_04) +{ + if(!isdefined(level._audio.indexed.var_1504[param_02])) + { + var_05 = func_1538(param_00,param_01,param_03); + if(!isdefined(var_05)) + { + return; + } + + level._audio.indexed.var_1504[param_02] = var_05; + func_153C(param_04,param_02); + } +} + +//Function Number: 16 +func_151A(param_00,param_01,param_02) +{ + if(isdefined(level._audio.indexed.var_1504[param_00])) + { + level._audio.indexed.var_1504[param_00].var_151B = clamp(param_01,0,1); + func_153C(param_02,param_00); + } +} + +//Function Number: 17 +func_151C(param_00,param_01) +{ + if(isdefined(level._audio.indexed.var_1504[param_00])) + { + level._audio.indexed.var_1504[param_00].var_151D = 1; + func_153C(param_01,param_00); + } +} + +//Function Number: 18 +func_151E(param_00,param_01,param_02) +{ + if(!level._audio.indexed.var_14FF && !level._audio.indexed.var_14FE) + { + if(isdefined(level._audio.indexed.var_1503[param_00])) + { + func_1536(param_00,param_01); + } + else + { + func_1537(param_00,param_01); + } + + func_153C(param_02,param_00); + } +} + +//Function Number: 19 +func_151F(param_00,param_01) +{ + if(!level._audio.indexed.var_14FF && !level._audio.indexed.var_14FE) + { + if(isdefined(level._audio.indexed.var_1503[param_00])) + { + level._audio.indexed.var_1503[param_00].var_1511 = level._audio.indexed.var_1503[param_00].var_1512; + func_153C(param_01,param_00); + } + } +} + +//Function Number: 20 +func_1520(param_00,param_01) +{ + if(!level._audio.indexed.var_14FF && !level._audio.indexed.var_14FE) + { + if(param_00 == "default") + { + return; + } + + if(!isdefined(level._audio.indexed.var_1502[param_00]) && isdefined(level._audio.indexed.var_1503[param_00])) + { + level._audio.indexed.var_1503[param_00]["CLEAR"] = 1; + func_153C(param_01,param_00); + } + } +} + +//Function Number: 21 +func_1521() +{ + return level._audio.indexed.var_1500; +} + +//Function Number: 22 +func_1522(param_00,param_01,param_02) +{ + if(!level._audio.indexed.var_14FF) + { + if(isdefined(level._audio.indexed.var_1503[param_00])) + { + return; + } + + level._audio.indexed.var_1503[param_00] = []; + var_03 = 0; + var_04 = undefined; + foreach(var_06 in param_01) + { + if(maps\_audio::aud_is_even(var_03)) + { + var_04 = var_06; + } + else + { + if(!func_155F(var_04)) + { + level._audio.indexed.var_1503[param_00] = undefined; + return; + } + + level._audio.indexed.var_1503[param_00][var_04] = spawnstruct(); + level._audio.indexed.var_1503[param_00][var_04].var_1511 = var_06; + level._audio.indexed.var_1503[param_00][var_04].var_1512 = var_06; + var_04 = undefined; + } + + var_03++; + } + + func_153C(param_02,param_00); + } +} + +//Function Number: 23 +func_1524(param_00,param_01,param_02) +{ + if(!level._audio.indexed.var_14FF) + { + level._audio.indexed.var_1503[param_00] = []; + var_03 = 0; + var_04 = undefined; + foreach(var_06 in param_01) + { + if(maps\_audio::aud_is_even(var_03)) + { + var_04 = var_06; + } + else + { + level._audio.indexed.var_1503[param_00][var_04] = spawnstruct(); + level._audio.indexed.var_1503[param_00][var_04].var_1511 = var_06; + level._audio.indexed.var_1503[param_00][var_04].var_1512 = var_06; + var_04 = undefined; + } + + var_03++; + } + + func_153C(param_02,param_00); + } +} + +//Function Number: 24 +func_1525(param_00) +{ + return isdefined(level._audio.indexed.var_1503[param_00]); +} + +//Function Number: 25 +func_1526(param_00,param_01) +{ + if(!level._audio.indexed.var_14FF) + { + level._audio.indexed.var_1503["mm_mute"] = []; + if(isstring(param_00)) + { + if(!isdefined(level._audio.indexed.var_1503["mm_mute"][param_00])) + { + level._audio.indexed.var_1503["mm_mute"][param_00] = spawnstruct(); + } + + level._audio.indexed.var_1503["mm_mute"][param_00].var_1511 = 0; + level._audio.indexed.var_1503["mm_mute"][param_00].var_1512 = 1; + } + else + { + foreach(var_03 in param_00) + { + if(!isdefined(level._audio.indexed.var_1503["mm_mute"][var_03])) + { + level._audio.indexed.var_1503["mm_mute"][var_03] = spawnstruct(); + } + + level._audio.indexed.var_1503["mm_mute"][var_03].var_1511 = 0; + level._audio.indexed.var_1503["mm_mute"][var_03].var_1512 = 1; + } + } + + func_153C(param_01,"mm_mute"); + } +} + +//Function Number: 26 +func_1527(param_00) +{ + if(isdefined(level._audio.var_1503["mm_mute"])) + { + level._audio.var_1503["mm_mute"] = undefined; + func_153C(param_00,"mm_mute"); + } +} + +//Function Number: 27 +func_1528(param_00,param_01) +{ + if(!level._audio.indexed.var_14FF) + { + level._audio.indexed.var_1503["mm_solo"] = []; + foreach(var_04, var_03 in level._audio.indexed.var_1529) + { + level._audio.indexed.var_1503["mm_solo"][var_04] = spawnstruct(); + level._audio.indexed.var_1503["mm_solo"][var_04].var_1511 = 0; + level._audio.indexed.var_1503["mm_solo"][var_04].var_1512 = 1; + } + + if(isstring(param_00)) + { + level._audio.indexed.var_1503["mm_solo"][param_00].var_1511 = 1; + } + else + { + foreach(var_06 in param_00) + { + level._audio.indexed.var_1503["mm_solo"][var_06].var_1511 = 1; + } + } + + func_153C(param_01,"mm_solo"); + } +} + +//Function Number: 28 +func_152A(param_00) +{ + if(isdefined(level._audio.indexed.var_1503["mm_solo"])) + { + level._audio.indexed.var_1503["mm_solo"] = undefined; + func_153C(param_00,"mm_solo"); + } +} + +//Function Number: 29 +func_152B() +{ + return level._audio.indexed.var_152C; +} + +//Function Number: 30 +func_152D() +{ + return level._audio.indexed.var_1503.size; +} + +//Function Number: 31 +func_152E() +{ + return 0; +} + +//Function Number: 32 +func_152F(param_00) +{ + var_01 = undefined; + if(isdefined(level._audio.indexed.var_1503) && param_00 < level._audio.indexed.var_1503.size) + { + var_02 = 0; + foreach(var_06, var_04 in level._audio.indexed.var_1503) + { + if(var_04.size > 0) + { + if(var_02 == param_00) + { + if(var_06 == "zone_mix") + { + var_05 = level._audio.indexed.var_1503["zone_mix"]["preset_name"]; + var_06 = "zone_mix : " + var_05; + } + + var_01 = var_06; + break; + } + + var_02++; + } + } + } + + return var_01; +} + +//Function Number: 33 +func_1530(param_00) +{ + var_01 = undefined; + if(getsubstr(param_00,0,8) == "zone_mix") + { + param_00 = "zone_mix"; + } + + if(isdefined(level._audio.indexed.var_1503) && isdefined(level._audio.indexed.var_1503[param_00])) + { + if(level._audio.indexed.var_1503[param_00].size > 0) + { + var_01 = level._audio.indexed.var_1503[param_00]; + } + } + + return var_01; +} + +//Function Number: 34 +func_1531(param_00,param_01,param_02) +{ + param_01 = clamp(param_01,0,1); + if(isdefined(level._audio.indexed.var_1503["default"])) + { + if(isdefined(level._audio.indexed.var_1503["default"][param_00])) + { + level._audio.indexed.var_1503["default"][param_00].var_1511 = param_01; + func_153C(param_02,"default"); + return; + } + + maps\_audio::aud_print_error("Trying to set a volmod value on the default submix but the volmod doesn\'t exist: " + param_00); + return; + } + + maps\_audio::aud_print_error("Trying to set a volmod value on the default submix but \"default\" doesn\'t exist."); +} + +//Function Number: 35 +func_1533(param_00) +{ + var_01 = undefined; + if(isdefined(level._audio.indexed.var_1503["default"])) + { + if(isdefined(level._audio.indexed.var_1503["default"][param_00])) + { + var_01 = level._audio.indexed.var_1503["default"][param_00].var_1512; + } + else + { + maps\_audio::aud_print_error("Trying to set a volmod value on the default submix but the volmod doesn\'t exist: " + param_00); + } + } + else + { + maps\_audio::aud_print_error("Trying to set a volmod value on the default submix but \"default\" doesn\'t exist."); + } + + return var_01; +} + +//Function Number: 36 +func_1534(param_00,param_01) +{ + var_02 = func_1533(param_00); + if(isdefined(var_02)) + { + func_1531(param_00,var_02,param_01); + } +} + +//Function Number: 37 +func_1535(param_00,param_01,param_02) +{ + func_1537(param_00,param_02); + level._audio.indexed.var_1501 = level._audio.indexed.var_1500; + level._audio.indexed.var_1500 = param_00; + func_153C(param_01,param_00); +} + +//Function Number: 38 +func_1536(param_00,param_01) +{ + if(isdefined(level._audio.indexed.var_1503[param_00])) + { + foreach(var_04, var_03 in level._audio.indexed.var_1503[param_00]) + { + level._audio.indexed.var_1503[param_00][var_04].var_1511 = var_03.var_1512 * param_01; + } + } +} + +//Function Number: 39 +func_1537(param_00,param_01) +{ + if(param_00 == "default") + { + return; + } + + if(!isdefined(level._audio.indexed.var_1503[param_00])) + { + var_02 = func_1556(param_00); + if(!isdefined(var_02)) + { + return; + } + + var_03 = 1; + if(isdefined(param_01)) + { + var_03 = param_01; + var_03 = max(var_03,0); + } + + level._audio.indexed.var_1503[param_00] = []; + foreach(var_06, var_05 in var_02) + { + if(var_06 != "name" && var_06 != "fade_time") + { + level._audio.indexed.var_1503[param_00][var_06] = spawnstruct(); + level._audio.indexed.var_1503[param_00][var_06].var_1511 = var_05 * var_03; + level._audio.indexed.var_1503[param_00][var_06].var_1512 = var_05; + } + } + } +} + +//Function Number: 40 +func_1538(param_00,param_01,param_02) +{ + var_03 = 0; + if(isdefined(param_02)) + { + var_03 = clamp(param_02,0,1); + } + + var_04 = spawnstruct(); + var_05 = func_1556(param_01); + if(!isdefined(var_05)) + { + return; + } + + var_04.var_1539 = var_05; + var_04.var_1539["fade_time"] = undefined; + var_04.var_1539["name"] = undefined; + if(isdefined(param_00)) + { + var_06 = func_1556(param_00); + if(!isdefined(var_06)) + { + return; + } + + var_04.var_153A = var_06; + var_04.var_153A["fade_time"] = undefined; + var_04.var_153A["name"] = undefined; + } + else + { + var_04.var_153A = []; + foreach(var_09, var_08 in var_04.var_1539) + { + var_04.var_153A[var_09] = 1; + } + } + + var_04.var_151B = var_03; + return var_04; +} + +//Function Number: 41 +func_153B(param_00,param_01) +{ + var_02 = 1; + if(isdefined(param_00)) + { + var_02 = param_00; + } + + foreach(var_05, var_04 in level._audio.indexed.var_1503) + { + if(var_05 != "default" && var_05 != "zone_mix" && !isdefined(level._audio.indexed.var_1502[var_05]) && var_05 != "mm_solo" && var_05 != "mm_mute") + { + level._audio.indexed.var_1503[var_05]["CLEAR"] = 1; + level._audio.indexed.var_1505[var_05] = 1; + } + } + + if(var_02) + { + func_153C(param_01,undefined); + } +} + +//Function Number: 42 +func_153C(param_00,param_01) +{ + level._audio.indexed.var_153D = param_00; + if(isdefined(param_01)) + { + level._audio.indexed.var_1505[param_01] = 1; + } + + level notify("mix_update"); +} + +//Function Number: 43 +func_153E() +{ + level waittill("mix_update"); + for(;;) + { + waittillframeend; + var_00 = 0; + if(isdefined(level._audio.indexed.var_153D)) + { + var_00 = level._audio.indexed.var_153D; + } + + func_1541(var_00); + level waittill("mix_update"); + } +} + +//Function Number: 44 +func_153F() +{ + var_00 = []; + foreach(var_03, var_02 in level._audio.indexed.var_1503) + { + if(!isdefined(level._audio.indexed.var_1505[var_03])) + { + var_00[var_03] = 1; + } + } + + foreach(var_08, var_05 in level._audio.indexed.var_1540) + { + foreach(var_03, var_07 in var_00) + { + if(isdefined(level._audio.indexed.var_1503[var_03][var_08])) + { + level._audio.indexed.var_1540[var_08] = level._audio.indexed.var_1540[var_08] * level._audio.indexed.var_1503[var_03][var_08].var_1511; + } + } + } +} + +//Function Number: 45 +func_1541(param_00) +{ + var_01 = 1; + if(isdefined(param_00)) + { + var_01 = param_00; + var_01 = max(var_01,0); + } + + level._audio.indexed.var_1540 = undefined; + func_1544(0); + func_153F(); + var_02 = 0; + foreach(var_05, var_04 in level._audio.indexed.var_1540) + { + if(var_05 != "voiceover_critical" && var_05 != "fullvolume") + { + var_04 = var_04 * level._audio.indexed.var_1506; + } + + if(var_04 != level._audio.indexed.var_1529[var_05].volume) + { + var_02 = 1; + level._audio.indexed.var_1529[var_05].volume = var_04; + level._audio.indexed.var_1529[var_05].completedindex = var_01; + func_1547(var_05,var_04,var_01); + } + } + + level._audio.indexed.var_1505 = []; + if(var_02) + { + level notify("aud_new_volmod_set"); + } +} + +//Function Number: 46 +func_1544(param_00) +{ + level._audio.indexed.var_1540 = []; + var_01 = []; + foreach(var_10, var_03 in level._audio.indexed.var_1505) + { + if(isdefined(level._audio.indexed.var_1503[var_10])) + { + var_04 = level._audio.indexed.var_1503[var_10]; + var_04["name"] = undefined; + var_04["fade_time"] = undefined; + var_04["preset_name"] = undefined; + var_05 = 0; + if(isdefined(var_04["CLEAR"])) + { + var_05 = 1; + } + + var_04["CLEAR"] = undefined; + foreach(var_08, var_07 in var_04) + { + if(isdefined(level._audio.indexed.var_1540[var_08]) && !var_05) + { + level._audio.indexed.var_1540[var_08] = level._audio.indexed.var_1540[var_08] * var_07.var_1511; + continue; + } + + if(var_05 && !isdefined(level._audio.indexed.var_1540[var_08])) + { + level._audio.indexed.var_1540[var_08] = 1; + continue; + } + + if(!var_05) + { + level._audio.indexed.var_1540[var_08] = var_07.var_1511; + } + } + + if(var_05) + { + level._audio.indexed.var_1503[var_10] = undefined; + } + + continue; + } + + if(isdefined(level._audio.indexed.var_1504[var_10])) + { + var_09 = level._audio.indexed.var_1504[var_10]; + var_05 = 0; + if(isdefined(var_09.var_151D)) + { + var_05 = 1; + } + + foreach(var_08, var_0B in var_09.var_153A) + { + if(!isdefined(var_01[var_08])) + { + var_01[var_08] = 1; + } + + if(!var_05) + { + var_0C = var_09.var_1539[var_08]; + var_0D = var_09.var_153A[var_08]; + var_0E = var_09.var_151B; + var_0F = var_0E * var_0C - var_0D + var_0D; + var_01[var_08] = var_01[var_08] * var_0F; + } + } + + if(var_05) + { + level._audio.indexed.var_1504[var_10] = undefined; + } + } + } + + foreach(var_12, var_0B in var_01) + { + if(isdefined(level._audio.indexed.var_1540[var_12])) + { + level._audio.indexed.var_1540[var_12] = level._audio.indexed.var_1540[var_12] * var_0B; + continue; + } + + level._audio.indexed.var_1540[var_12] = var_0B; + } +} + +//Function Number: 47 +func_1545() +{ + var_00 = undefined; + var_01 = undefined; +} + +//Function Number: 48 +func_1546(param_00) +{ + if(level._audio.indexed.var_14FF) + { + while(!isdefined(level.player)) + { + wait 0.05; + } + + func_1535(param_00); + } +} + +//Function Number: 49 +func_1547(param_00,param_01,param_02) +{ + if(!isdefined(level._audio.indexed.var_1548)) + { + level._audio.indexed.var_1548 = []; + level._audio.indexed.var_1549 = 0; + } + + var_03 = 0; + foreach(var_06, var_05 in level._audio.indexed.var_1548) + { + if(var_05["volmod"] == param_00) + { + var_03 = 1; + level._audio.indexed.var_1548[var_06]["volume"] = param_01; + level._audio.indexed.var_1548[var_06]["fade_time"] = param_02; + break; + } + } + + if(!var_03) + { + var_07 = []; + level._audio.indexed.var_1548[level._audio.indexed.var_1549] = var_7B; + level._audio.indexed.var_1549++ = var_7B["fade_time"]; + } +} + +//Function Number: 50 +func_154A(param_00,param_01,param_02) +{ + if(!isdefined(level._audio.indexed.var_154B)) + { + level._audio.indexed.var_154B = []; + level._audio.indexed.index = 0; + } + + var_03 = 0; + foreach(var_06, var_05 in level._audio.indexed.var_154B) + { + if(var_05["channel"] == param_00) + { + var_03 = 1; + level._audio.indexed.var_154B[var_06]["volume"] = param_01; + level._audio.indexed.var_154B[var_06]["fade_time"] = param_02; + break; + } + } + + if(!var_03) + { + var_07 = []; + level._audio.indexed.var_154B[level._audio.indexed.index] = var_7B; + level._audio.indexed.index++ = var_7B["fade_time"]; + } +} + +//Function Number: 51 +func_154C(param_00) +{ + if(!isdefined(level._audio.indexed.var_1548)) + { + level._audio.indexed.var_1548 = []; + level._audio.indexed.var_1549 = 0; + } + + var_01 = 5; + if(isdefined(param_00)) + { + var_01 = param_00; + var_01 = max(var_01,1); + } + + for(;;) + { + level waittill("aud_new_volmod_set"); + while(level._audio.indexed.var_1548.size > 0) + { + var_02 = 0; + var_03 = []; + foreach(var_0A, var_05 in level._audio.indexed.var_1548) + { + if(var_02 < var_01) + { + var_02++; + var_03[var_03.size] = var_0A; + var_06 = level._audio.indexed.var_1548[var_0A]; + var_07 = var_06["volmod"]; + var_08 = var_06["volume"]; + var_09 = var_06["fade_time"]; + var_08 = clamp(var_08,0,1); + level.player setvolmod(var_07,var_08,var_09); + continue; + } + + break; + } + + for(var_0B = 0;var_0B < var_03.size;var_0B++) + { + var_0C = var_03[var_0B]; + level._audio.indexed.var_1548[var_0C] = undefined; + } + + wait 0.05; + } + } +} + +//Function Number: 52 +func_154D(param_00) +{ + if(!isdefined(level._audio.indexed.var_154B)) + { + level._audio.indexed.var_154B = []; + level._audio.indexed.index = 0; + } + + var_01 = 5; + if(isdefined(param_00)) + { + var_01 = param_00; + var_01 = max(var_01,1); + } + + for(;;) + { + level waittill("aud_new_mix_set"); + while(level._audio.indexed.var_154B.size > 0) + { + var_02 = 0; + var_03 = []; + foreach(var_0A, var_05 in level._audio.indexed.var_154B) + { + if(var_02 < var_01) + { + var_02++; + var_03[var_03.size] = var_0A; + var_06 = level._audio.indexed.var_154B[var_0A]; + var_07 = var_06["channel"]; + var_08 = var_06["volume"]; + var_09 = var_06["fade_time"]; + var_08 = clamp(var_08,0,1); + level.player setchannelvolume(var_07,var_08,var_09); + continue; + } + + break; + } + + for(var_0B = 0;var_0B < var_03.size;var_0B++) + { + var_0C = var_03[var_0B]; + level._audio.indexed.var_154B[var_0C] = undefined; + } + + wait 0.05; + } + } +} + +//Function Number: 53 +func_154E(param_00,param_01) +{ + var_02 = []; + var_03 = maps\_audio::get_mix_stringtable(); + var_04 = "soundtables/common_mix.csv"; + if(!isdefined(level._audio.indexed.preset_cache)) + { + level._audio.indexed.preset_cache = []; + } + + if(isdefined(level._audio.indexed.preset_cache[param_00])) + { + var_02 = level._audio.indexed.preset_cache[param_00]; + } + else + { + if(param_01) + { + var_02 = func_1550(var_03,param_00,0); + } + + if(!isdefined(var_02) || var_02.size == 0) + { + var_02 = func_1550(var_04,param_00,1); + } + + if(!isdefined(var_02) || var_02.size == 0) + { + return; + } + + level._audio.indexed.preset_cache[param_00] = var_02; + } + + return var_02; +} + +//Function Number: 54 +func_1550(param_00,param_01,param_02) +{ + var_03 = 4; + var_04 = ""; + var_05 = 0; + var_06 = 0; + var_07 = 0; + var_08 = undefined; + var_09 = []; + if(!isdefined(level._audio.indexed.var_1551)) + { + level._audio.indexed.var_1551 = []; + } + + if(!isdefined(level._audio.indexed.var_1551[param_00])) + { + level._audio.indexed.var_1551[param_00] = []; + for(var_0A = 1;var_0A < var_03;var_0A++) + { + var_0B = tablelookupbyrow(param_00,0,var_0A); + level._audio.indexed.var_1551[param_00][var_0B] = var_0A; + } + } + + var_0C = maps\_audio::get_indexed_preset("mix",param_01,param_02); + if(var_0C != -1) + { + var_05 = var_0C; + } + else if((param_02 && maps\_audio::aud_is_common_indexed()) || !param_02 && maps\_audio::aud_is_local_indexed()) + { + return var_09; + } + + var_0D = 0; + while(var_04 != "EOF" && var_07 < 10) + { + var_04 = tablelookupbyrow(param_00,var_05,0); + if(var_04 != "") + { + var_07 = 0; + } + + while(var_04 == param_01) + { + var_06 = 1; + if(!isdefined(var_08)) + { + var_0E = level._audio.indexed.var_1551[param_00]["fade_time"]; + var_08 = tablelookupbyrow(param_00,var_05,var_0E); + if(!isdefined(var_08) || isdefined(var_08) && var_08 == "") + { + var_08 = 1; + } + } + + var_0F = level._audio.indexed.var_1551[param_00]["channels"]; + var_10 = level._audio.indexed.var_1551[param_00]["value"]; + var_11 = tablelookupbyrow(param_00,var_05,var_0F); + var_12 = tablelookupbyrow(param_00,var_05,var_10); + if(var_11 == "set_all" || var_11 == "setall") + { + if(float(var_12) < 1) + { + var_09 = func_155C(float(var_12)); + } + } + else + { + if(!isdefined(level._audio.indexed.var_1555[var_11])) + { + maps\_audio::aud_print_error("In soundtable " + param_00 + ", " + param_01 + " uses a volmod group name that doesn\'t exist in the volmodgroups.csv file."); + return; + } + + var_09[var_11] = float(var_12); + } + + var_05++; + var_04 = tablelookupbyrow(param_00,var_05,0); + var_0D++; + } + + var_07++; + if(var_06) + { + break; + } + + var_05++; + } + + if(var_06 && isdefined(var_08)) + { + var_09["fade_time"] = float(var_08); + } + + return var_09; +} + +//Function Number: 55 +func_1556(param_00) +{ + if(!isdefined(level._audio.indexed.preset_cache)) + { + level._audio.indexed.preset_cache = []; + } + + var_01 = []; + if(isdefined(level._audio.indexed.preset_cache[param_00])) + { + var_01 = level._audio.indexed.preset_cache[param_00]; + } + else + { + var_01 = undefined; + if(level._audio.indexed.use_string_table_presets) + { + var_01 = func_154E(param_00,1); + } + else + { + var_01 = func_154E(param_00,0); + if(!isdefined(var_01) || var_01.size == 0) + { + var_01 = maps\_audio::audio_presets_mix(param_00,var_01); + } + } + + if(!isdefined(var_01) || var_01.size == 0) + { + return; + } + + if(!isdefined(var_7B["fade_time"])) + { + } + + level._audio.indexed.preset_cache[var_01] = var_7B; + } + + return var_7B; +} + +//Function Number: 56 +func_1558() +{ + if(!isdefined(level._audio.indexed.var_1555)) + { + func_155D(); + } + + level._audio.indexed.var_1529 = []; + foreach(var_02, var_01 in level._audio.indexed.var_1555) + { + level._audio.indexed.var_1529[var_02] = spawnstruct(); + level._audio.indexed.var_1529[var_02].volume = var_01; + level._audio.indexed.var_1529[var_02].completedindex = 0; + } + + func_1559(); +} + +//Function Number: 57 +func_1559() +{ + if(!isdefined(level._audio.indexed.var_152C)) + { + var_00 = []; + level._audio.indexed.var_152C = var_7B; + } +} + +//Function Number: 58 +func_155A() +{ + return level._audio.indexed.var_155B; +} + +//Function Number: 59 +func_155C(param_00) +{ + var_01 = []; + foreach(var_04, var_03 in level._audio.indexed.var_1555) + { + if(var_04 != "hud" && var_04 != "interface" && var_04 != "interface_music") + { + var_01[var_04] = param_00; + } + } + + return var_01; +} + +//Function Number: 60 +func_155D() +{ + var_00 = "soundaliases/volumemodgroups.svmod"; + level._audio.indexed.var_1555 = []; + var_01 = 10; + var_02 = 0; + for(var_03 = 0;var_02 < var_01;var_03++) + { + var_04 = tablelookupbyrow(var_00,var_03,0); + if(var_04 == "") + { + var_02++; + continue; + } + + var_05 = getsubstr(var_04,0,0); + if(var_05 == "#") + { + continue; + } + + var_06 = tablelookupbyrow(var_00,var_03,1); + level._audio.indexed.var_1555[var_04] = float(var_06); + } + + if(!isdefined(level._audio.var_1503)) + { + level._audio.var_1503 = []; + } + + level._audio.indexed.var_1503["default"] = []; + foreach(var_04, var_08 in level._audio.indexed.var_1555) + { + level._audio.indexed.var_1503["default"][var_04] = spawnstruct(); + level._audio.indexed.var_1503["default"][var_04].var_1511 = var_08; + level._audio.indexed.var_1503["default"][var_04].var_1512 = var_08; + } +} + +//Function Number: 61 +func_155E(param_00) +{ + return isdefined(level._audio.indexed.var_152C[param_00]); +} + +//Function Number: 62 +func_155F(param_00) +{ + return isdefined(level._audio.indexed.var_1555[param_00]); +} \ No newline at end of file diff --git a/MW3/PC/SP/1355.gsc b/MW3/PC/SP/1355.gsc new file mode 100644 index 0000000..c53932a --- /dev/null +++ b/MW3/PC/SP/1355.gsc @@ -0,0 +1,14 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1355.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:20:05 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ +} \ No newline at end of file diff --git a/MW3/PC/SP/1439.gsc b/MW3/PC/SP/1439.gsc new file mode 100644 index 0000000..a78c996 --- /dev/null +++ b/MW3/PC/SP/1439.gsc @@ -0,0 +1,402 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1439.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 15 + * Decompile Time: 21 ms + * Timestamp: 10/27/2023 2:20:30 AM +*******************************************************************/ + +//Function Number: 1 +func_43E6(param_00) +{ + level notify("rain_change","hard",param_00); + level thread func_43EE(10,param_00); + wait param_00 * 0.5; + level.var_43E7["rain"] = ""; + wait param_00 * 0.5; +} + +//Function Number: 2 +func_43E8(param_00) +{ + level notify("rain_change","hard",param_00); + level thread func_43EE(8,param_00); + wait param_00 * 0.5; + level.var_43E7["rain"] = ""; + wait param_00 * 0.5; +} + +//Function Number: 3 +func_43E9(param_00) +{ + level notify("rain_change","light",param_00); + level thread func_43EE(5,param_00); + wait param_00 * 0.5; + level.var_43E7["rain"] = "light"; + wait param_00 * 0.5; +} + +//Function Number: 4 +func_43EA(param_00) +{ + level notify("rain_change","none",param_00); + level thread func_43EE(0,param_00); + wait param_00 * 0.5; + level.var_43E7["rain"] = "norain"; + wait param_00 * 0.5; +} + +//Function Number: 5 +func_43EB(param_00) +{ + common_scripts\utility::flag_init("_weather_lightning_enabled"); + common_scripts\utility::flag_set("_weather_lightning_enabled"); + if(param_00 == "none") + { + level.var_43EC = 0; + level._effect["rain_drops"] = level._effect["rain_" + level.var_43EC]; + func_43EA(0.1); + return; + } + + if(param_00 == "light") + { + level.var_43EC = 5; + level._effect["rain_drops"] = level._effect["rain_" + level.var_43EC]; + func_43E9(0.1); + return; + } + + level.var_43EC = 10; + level._effect["rain_drops"] = level._effect["rain_" + level.var_43EC]; + func_43E6(0.1); +} + +//Function Number: 6 +func_43ED(param_00,param_01) +{ + [[ param_00 ]](); + waittillframeend; + func_43F5(param_00,param_01); +} + +//Function Number: 7 +func_43EE(param_00,param_01) +{ + level notify("rain_level_change"); + level endon("rain_level_change"); + if(level.var_43EC > param_00) + { + var_02 = level.var_43EC - param_00; + param_01 = param_01 / var_02; + for(var_03 = 0;var_03 < var_02;var_03++) + { + wait param_01; + level.var_43EC--; + level._effect["rain_drops"] = level._effect["rain_" + level.var_43EC]; + } + } + + if(level.var_43EC < param_00) + { + var_02 = param_00 - level.var_43EC; + param_01 = param_01 / var_02; + for(var_03 = 0;var_03 < var_02;var_03++) + { + wait param_01; + level.var_43EC++; + level._effect["rain_drops"] = level._effect["rain_" + level.var_43EC]; + } + } +} + +//Function Number: 8 +func_43EF(param_00) +{ + if(!isdefined(level.var_43F0)) + { + level.var_43F0 = []; + level.var_43F1 = 0; + } + + level.var_43F0[level.var_43F0.size] = param_00; +} + +//Function Number: 9 +func_43F2() +{ + var_00 = getentarray("player","classname")[0]; + for(;;) + { + playfx(level._effect["rain_drops"],var_00.origin + (0,0,650),var_00.origin + (0,0,680)); + wait 0.3; + } +} + +//Function Number: 10 +func_43F3() +{ + if(level.var_43EC == 0) + { + return randomfloat(30); + } + + if(level.var_43EC == 1) + { + return randomfloat(24); + } + + if(level.var_43EC == 2) + { + return randomfloat(20); + } + + if(level.var_43EC == 3) + { + return randomfloat(15); + } + + if(level.var_43EC == 4) + { + return randomfloat(12); + } + + if(level.var_43EC == 5) + { + return randomfloat(9); + } + + if(level.var_43EC == 6) + { + return randomfloat(8); + } + + if(level.var_43EC == 7) + { + return randomfloat(8); + } + + if(level.var_43EC == 8) + { + return randomfloat(7); + } + + if(level.var_43EC == 9) + { + return randomfloat(6); + } + + if(level.var_43EC == 10) + { + return randomfloat(5); + } +} + +//Function Number: 11 +func_43F4() +{ + if(level.var_43EC == 0) + { + return 20; + } + + if(level.var_43EC == 1) + { + return 18; + } + + if(level.var_43EC == 2) + { + return 16; + } + + if(level.var_43EC == 3) + { + return 14; + } + + if(level.var_43EC == 4) + { + return 12; + } + + if(level.var_43EC == 5) + { + return 10; + } + + if(level.var_43EC == 6) + { + return 9; + } + + if(level.var_43EC == 7) + { + return 8; + } + + if(level.var_43EC == 8) + { + return 7; + } + + if(level.var_43EC == 9) + { + return 6; + } + + if(level.var_43EC == 10) + { + return 5; + } +} + +//Function Number: 12 +func_43F5(param_00,param_01) +{ + level endon("rain_change"); + var_02 = gettime() + func_43F4() + func_43F3() * 1000; + if(var_02 < level.var_43F6) + { + level.var_43F6 = var_02; + } + + for(;;) + { + common_scripts\utility::flag_wait("_weather_lightning_enabled"); + var_03 = level.var_43F6 - gettime() * 0.001; + if(var_03 > 0) + { + wait var_03; + } + + if(!common_scripts\utility::flag("_weather_lightning_enabled")) + { + continue; + } + + func_43F8(param_00,param_01); + level.var_43F6 = gettime() + func_43F4() + func_43F3() * 1000; + } +} + +//Function Number: 13 +func_43F7(param_00) +{ + if(isdefined(level.var_43F1)) + { + common_scripts\utility::exploder(level.var_43F0[level.var_43F1]); + } + + [[ param_00 ]](); +} + +//Function Number: 14 +func_43F8(param_00,param_01,param_02) +{ + var_03[0] = "quick"; + thread func_43F9(); + if(!isdefined(var_03)) + { + var_03 = randomint(var_7B.size); + } + + var_04 = 0; + if(isdefined(level.var_43F1)) + { + while(var_04 == level.var_43F1) + { + var_04 = randomint(level.var_43F0.size); + } + + level.var_43F1 = var_04; + } + + switch(var_7B[var_03]) + { + case "quick": + func_43F7(param_02); + break; + + case "double": + func_43F7(param_02); + wait 0.05; + func_43F7(param_02); + break; + + case "triple": + func_43F7(param_02); + wait 0.05; + func_43F7(param_02); + wait 0.5; + func_43F7(param_02); + break; + } +} + +//Function Number: 15 +func_43F9() +{ + if(level.var_43EC == 0) + { + wait 6 + randomfloat(2); + } + else if(level.var_43EC == 1) + { + wait 5 + randomfloat(1.8); + } + else if(level.var_43EC == 2) + { + wait 4.5 + randomfloat(1.6); + } + else if(level.var_43EC == 3) + { + wait 4 + randomfloat(1.6); + } + else if(level.var_43EC == 4) + { + wait 3.5 + randomfloat(1.5); + } + else if(level.var_43EC == 5) + { + wait 3 + randomfloat(1.5); + } + else if(level.var_43EC == 6) + { + wait 2.5 + randomfloat(1.2); + } + else if(level.var_43EC == 7) + { + wait 2 + randomfloat(1); + } + else if(level.var_43EC == 8) + { + wait 1.9 + randomfloat(0.5); + } + else if(level.var_43EC == 9) + { + wait 1.5; + } + else if(level.var_43EC == 10) + { + wait 1; + } + + var_00 = spawn("script_origin",(0,0,0)); + var_00.origin = level.player.origin + (0,0,60); + var_00 linkto(level.player); + if(level.var_43EC <= 8) + { + var_00 playsound("elm_thunder_distant","sounddone"); + } + else + { + var_00 playsound("elm_thunder_distant","sounddone"); + var_00 thread maps\_utility::play_sound_on_entity("elm_thunder_strike"); + } + + var_00 waittill("sounddone"); + var_00 delete(); +} \ No newline at end of file diff --git a/MW3/PC/SP/1440.gsc b/MW3/PC/SP/1440.gsc new file mode 100644 index 0000000..6f1cafe --- /dev/null +++ b/MW3/PC/SP/1440.gsc @@ -0,0 +1,197 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1440.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 5 + * Decompile Time: 7 ms + * Timestamp: 10/27/2023 2:20:31 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + maps\_utility::precache("woodgib_medium"); + maps\_utility::precache("woodgib_big"); + maps\_utility::precache("woodgib_small1"); + maps\_utility::precache("woodgib_small2"); + maps\_utility::precache("wood_plank2"); + maps\_utility::precache("gib_woodplank"); + var_00 = getentarray("wood_splinter","targetname"); + maps\_utility::array_thread(var_00,::func_43FA); +} + +//Function Number: 2 +func_43FA() +{ + if(!isdefined(self.target)) + { + return; + } + + var_00 = getentarray(self.target,"targetname"); + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + if(isdefined(var_00[var_01].script_noteworthy) && var_00[var_01].script_noteworthy == "notsolid") + { + var_00[var_01] notsolid(); + } + + if(!isdefined(var_00[var_01].target)) + { + continue; + } + + var_00[var_01].var_43FB = getentarray(var_00[var_01].target,"targetname"); + for(var_02 = 0;var_02 < var_00[var_01].var_43FB.size;var_02++) + { + if(isdefined(var_00[var_01].var_43FB[var_02])) + { + var_00[var_01].var_43FB[var_02] hide(); + } + } + } + + if(isdefined(self.script_noteworthy)) + { + level waittill(self.script_noteworthy); + } + + self waittill("trigger",var_03); + if(isplayer(var_03)) + { + var_04 = var_03 getorigin(); + } + else + { + var_04 = var_04.origin; + } + + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + if(!isdefined(var_00[var_01].target)) + { + continue; + } + + var_00[var_01].var_43FB = getentarray(var_00[var_01].target,"targetname"); + for(var_02 = 0;var_02 < var_00[var_01].var_43FB.size;var_02++) + { + if(isdefined(var_00[var_01].var_43FB[var_02])) + { + var_00[var_01].var_43FB[var_02] show(); + } + } + } + + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + if(!isdefined(var_00[var_01])) + { + continue; + } + + var_00[var_01] playsound("wood_break"); + var_00[var_01] thread func_43FC(var_04); + var_00[var_01] delete(); + } +} + +//Function Number: 3 +func_43FC(param_00) +{ + var_01 = spawn("script_model",(0,0,0)); + if(randomint(100) > 25) + { + if(isdefined(self.script_noteworthy) && self.script_noteworthy == "dark") + { + if(randomint(100) > 50) + { + var_01 setmodel("wood_plank2"); + } + else + { + var_01 setmodel("gib_woodplank"); + } + } + else if(randomint(100) > 50) + { + var_01 setmodel("woodgib_big"); + } + else + { + var_01 setmodel("woodgib_medium"); + } + } + + var_01.origin = self getorigin(); + var_01 thread func_43FD(param_00); + if(isdefined(self.script_noteworthy) && self.script_noteworthy == "dark") + { + return; + } + + func_43FE(var_01.origin,param_00); +} + +//Function Number: 4 +func_43FD(param_00) +{ + var_01 = vectornormalize(self.origin - param_00); + var_01 = var_01 * 250 + randomint(100); + var_02 = var_01[0]; + var_03 = var_01[1]; + var_04 = 200 + randomint(100); + if(var_02 > 0) + { + self rotateroll(1500 + randomfloat(2500) * -1,5,0,0); + } + else + { + self rotateroll(1500 + randomfloat(2500),5,0,0); + } + + self movegravity((var_02,var_03,var_04),12); + wait 6; + self delete(); +} + +//Function Number: 5 +func_43FE(param_00,param_01) +{ + var_02 = []; + for(var_03 = 0;var_03 < randomint(6) + 1;var_03++) + { + var_02[var_03] = spawn("script_model",param_00); + var_02[var_03].origin = var_02[var_03].origin + (randomfloat(10) - 5,0,randomfloat(30) - 15); + if(randomint(100) > 50) + { + var_02[var_03] setmodel("woodgib_small1"); + } + else + { + var_02[var_03] setmodel("woodgib_small2"); + } + + param_01 = param_01 + (50 - randomint(100),50 - randomint(100),0); + var_04 = vectornormalize(param_00 - param_01); + var_04 = var_04 * 300 + randomint(150); + var_05 = var_04[0]; + var_06 = var_04[1]; + var_07 = 120 + randomint(200); + var_02[var_03] movegravity((var_05,var_06,var_07),12); + if(var_05 > 0) + { + var_02[var_03] rotateroll(1500 + randomfloat(2500) * -1,5,0,0); + continue; + } + + var_02[var_03] rotateroll(1500 + randomfloat(2500),5,0,0); + } + + wait 6; + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + var_02[var_03] delete(); + } +} \ No newline at end of file diff --git a/MW3/PC/SP/1442.gsc b/MW3/PC/SP/1442.gsc new file mode 100644 index 0000000..748f5ea --- /dev/null +++ b/MW3/PC/SP/1442.gsc @@ -0,0 +1,1905 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1442.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 82 + * Decompile Time: 80 ms + * Timestamp: 10/27/2023 2:20:32 AM +*******************************************************************/ + +//Function Number: 1 +func_166A(param_00) +{ + var_01 = common_scripts\utility::getstruct(param_00,"targetname"); + level.player setorigin(var_01.origin); + var_02 = undefined; + if(isdefined(var_01.target)) + { + var_02 = getent(var_01.target,"targetname"); + } + + if(isdefined(var_02)) + { + level.player setplayerangles(vectortoangles(var_02.origin - var_01.origin)); + return; + } + + level.player setplayerangles(var_01.angles); +} + +//Function Number: 2 +func_166B(param_00) +{ + self endon("death"); + self endon("stop_random_tank_fire"); + var_01 = undefined; + for(;;) + { + if(isdefined(var_01) && var_01.health > 0) + { + self setturrettargetent(var_01,(randomintrange(-64,64),randomintrange(-64,64),randomintrange(-16,100))); + if(sighttracepassed(self.origin + (0,0,100),var_01.origin + (0,0,40),0,self)) + { + self.var_166C++; + self fireweapon(); + if(self.var_166C >= 3) + { + if((!isdefined(var_01.damageshield) || var_01.damageshield == 0) && !isdefined(var_01.magic_bullet_shield) || var_01.magic_bullet_shield == 0) + { + var_01 notify("death"); + } + } + + wait randomintrange(4,10); + } + else + { + var_01 = undefined; + wait 1; + } + } + else + { + if(!isalive(self)) + { + break; + } + + var_01 = func_166D(param_00); + self.var_166C = 0; + wait 1; + } + + wait randomfloatrange(0.05,0.5); + } +} + +//Function Number: 3 +func_166D(param_00) +{ + var_01 = getentarray(param_00,"script_noteworthy"); + if(isdefined(var_01)) + { + var_02 = common_scripts\utility::random(var_01); + if(isdefined(var_02) && !isspawner(var_02) && var_02.health > 0) + { + var_03 = var_02; + self notify("new_target"); + return var_03; + } + else + { + return undefined; + } + } + + return undefined; +} + +//Function Number: 4 +func_166E(param_00,param_01,param_02,param_03) +{ + if(!isdefined(param_02)) + { + param_02 = 1; + } + + var_04 = getentarray(param_01,"script_noteworthy"); + var_05 = []; + var_06 = 0; + var_07 = []; + foreach(var_09 in var_04) + { + if(isspawner(var_09)) + { + var_05[var_05.size] = var_09; + } + } + + var_0B = common_scripts\utility::getstruct(param_00,"targetname"); + var_0C = 0; + foreach(var_0E in var_05) + { + var_0F = var_0E maps\_utility::spawn_ai(1); + if(param_02) + { + var_0F thread maps\_utility::replace_on_death(); + } + + var_0F forceteleport(var_0B.origin,var_0B.angles); + var_0F setgoalpos(var_0F.origin); + var_07 = maps\_utility::array_add(var_07,var_0F); + var_0C++; + if(isdefined(param_03) && var_0C >= param_03) + { + return var_07; + } + } + + return var_07; +} + +//Function Number: 5 +func_1670() +{ + if(level.player isthrowinggrenade()) + { + wait 1.2; + } + + level.player allowmelee(0); + level.player disableoffhandweapons(); + level.player allowcrouch(0); + level.player allowprone(0); + level.player allowsprint(0); + if(level.player getstance() != "stand") + { + level.player setstance("stand"); + wait 0.4; + } +} + +//Function Number: 6 +func_1671() +{ + level.player allowsprint(1); + level.player allowprone(1); + level.player allowcrouch(1); + level.player enableoffhandweapons(); + level.player allowmelee(1); +} + +//Function Number: 7 +func_1672(param_00) +{ + if(!isdefined(param_00)) + { + param_00 = 1; + } + + level.var_1673 = level.player getcurrentweapon(); + level.player giveweapon(level.var_1674); + level.player givemaxammo(level.var_1674); + level.player switchtoweaponimmediate(level.var_1674); + if(param_00) + { + level.player enableweapons(); + } + + level.player disableweaponswitch(); +} + +//Function Number: 8 +func_1675(param_00) +{ + if(!isdefined(param_00)) + { + param_00 = 1; + } + + level.player takeweapon(level.var_1674); + if(isdefined(level.var_1673)) + { + level.player switchtoweapon(level.var_1673); + } + + if(param_00) + { + level.player enableweapons(); + level.player enableweaponswitch(); + } + + level.var_1673 = undefined; +} + +//Function Number: 9 +func_1676() +{ + foreach(var_01 in level.players) + { + if(!isdefined(var_01.var_1678)) + { + var_01.var_1678 = var_01 maps\_hud_util::createclientfontstring("default",1.75); + var_01.var_1678.horzalign = "center"; + var_01.var_1678.vertalign = "top"; + var_01.var_1678.alignx = "center"; + var_01.var_1678.aligny = "top"; + var_01.var_1678.x = 0; + var_01.var_1678.y = 20; + var_01.var_1678 settext(&"VARIABLE_SCOPE_SNIPER_ZOOM"); + var_01.var_1678.alpha = 0; + var_01.var_1678.sort = 0.5; + var_01.var_1678.foreground = 1; + } + + var_01.var_1679 = 1; + } + + var_03 = 0; + level.players[0].var_167A = "cg_playerFovScale0"; + if(level.players.size == 2) + { + level.players[1].var_167A = "cg_playerFovScale1"; + } + + foreach(var_01 in level.players) + { + var_01 thread func_1680(); + var_01 thread func_1681(); + } + + if(!isdefined(level.var_167B)) + { + level.var_167B = []; + } + + var_06 = undefined; + var_07 = undefined; + for(;;) + { + var_08 = 0; + var_07 = var_06; + var_06 = undefined; + foreach(var_0A in level.var_167B) + { + foreach(var_01 in level.players) + { + if(var_01 getcurrentweapon() == var_0A && isalive(var_01)) + { + var_08 = 1; + var_06 = var_01; + break; + } + } + + if(var_08) + { + break; + } + } + + if(var_08 && !var_06 isreloading() && !var_06 isswitchingweapon()) + { + if(var_06 maps\_utility::isads() && var_06 adsbuttonpressed()) + { + var_06 func_167E(var_03); + var_03 = 1; + if(isdefined(level.var_167D)) + { + var_0E = undefined; + var_0F = undefined; + var_10 = anglestoforward(var_06 getplayerangles()); + var_11 = var_06.origin; + foreach(var_13 in level.var_167D) + { + var_14 = anglestoforward(vectortoangles(var_13 - var_11)); + var_15 = vectordot(var_10,var_14); + if(!isdefined(var_0E) || var_15 > var_0F) + { + var_0E = var_13; + var_0F = var_15; + } + } + + if(isdefined(var_0E)) + { + setsaveddvar("sm_sunShadowCenter",var_0E); + } + } + } + else if(var_03) + { + var_03 = 0; + if(isdefined(var_06)) + { + var_06 func_167F(); + } + + setsaveddvar("sm_sunShadowCenter","0 0 0"); + } + } + else if(var_03) + { + var_03 = 0; + if(isdefined(var_07)) + { + var_07 func_167F(); + } + + setsaveddvar("sm_sunShadowCenter","0 0 0"); + } + + wait 0.05; + } +} + +//Function Number: 10 +func_167E(param_00) +{ + self disableoffhandweapons(); + setsaveddvar(self.var_167A,self.var_1679); + self.var_1678.alpha = 1; + if(!param_00) + { + level notify("variable_sniper_hud_enter"); + } +} + +//Function Number: 11 +func_167F() +{ + level notify("variable_sniper_hud_exit"); + self enableoffhandweapons(); + setsaveddvar(self.var_167A,1); + self.var_1678.alpha = 0; +} + +//Function Number: 12 +func_1680() +{ + notifyoncommand("mag_cycle","+melee_zoom"); + notifyoncommand("mag_cycle","+sprint_zoom"); + for(;;) + { + self waittill("mag_cycle"); + if(self.var_1678.alpha) + { + if(self.var_1679 == 0.5) + { + self.var_1679 = 1; + continue; + } + + self.var_1679 = 0.5; + } + } +} + +//Function Number: 13 +func_1681() +{ + self waittill("death"); + func_167F(); +} + +//Function Number: 14 +func_1682(param_00) +{ + if(param_00 == 0.5) + { + return 10; + } + + if(param_00 == 1) + { + return 5; + } + + return 5; +} + +//Function Number: 15 +func_1683(param_00) +{ + var_01 = param_00 - self.origin; + return (vectordot(var_01,anglestoforward(self.angles)),-1 * vectordot(var_01,anglestoright(self.angles)),vectordot(var_01,anglestoup(self.angles))); +} + +//Function Number: 16 +func_1684(param_00,param_01) +{ + return (param_00[1] * param_01[2] - param_00[2] * param_01[1],param_00[2] * param_01[0] - param_00[0] * param_01[2],param_00[0] * param_01[1] - param_00[1] * param_01[0]); +} + +//Function Number: 17 +func_1685(param_00,param_01,param_02,param_03,param_04,param_05) +{ + var_06 = 2; + if(isdefined(param_05)) + { + var_06 = param_05; + } + + var_07 = level.player maps\_hud_util::createclientfontstring("default",var_06); + var_07.x = param_01; + var_07.y = param_02; + var_07.sort = 1; + var_07.horzalign = "fullscreen"; + var_07.vertalign = "fullscreen"; + var_07.alpha = 1; + if(!isdefined(param_03)) + { + param_03 = (1,1,1); + } + + var_07.color = param_03; + if(isdefined(param_04)) + { + var_07.label = param_04; + } + + level.var_1686[param_00] = var_07; +} + +//Function Number: 18 +func_1687(param_00,param_01) +{ + level.var_1686[param_00] setvalue(param_01); +} + +//Function Number: 19 +func_1688(param_00,param_01) +{ + level.var_1686[param_00] settext(param_01); +} + +//Function Number: 20 +func_1689(param_00,param_01) +{ + level.var_1686[param_00].color = param_01; +} + +//Function Number: 21 +func_168A(param_00) +{ + level.var_1686[param_00] destroy(); + level.var_1686[param_00] = undefined; +} + +//Function Number: 22 +func_168B(param_00,param_01,param_02,param_03,param_04) +{ + level endon("stop_reminders"); + level endon("missionfailed"); + var_05 = undefined; + if(!isdefined(param_03)) + { + param_03 = 10; + } + + if(!isdefined(param_04)) + { + param_04 = 20; + } + + while(!common_scripts\utility::flag(param_01)) + { + var_06 = randomfloatrange(param_03,param_04); + var_07 = common_scripts\utility::random(param_02); + if(isdefined(var_05) && var_07 == var_05) + { + continue; + } + else + { + var_05 = var_07; + wait var_06; + if(!common_scripts\utility::flag(param_01)) + { + if(isstring(param_00) && param_00 == "radio") + { + func_168D(); + maps\_utility::radio_dialogue(var_07); + func_168E(); + continue; + } + + func_168D(); + param_00 maps\_utility::dialogue_queue(var_07); + func_168E(); + } + } + } +} + +//Function Number: 23 +func_168D() +{ + if(!common_scripts\utility::flag_exist("flag_conversation_in_progress")) + { + common_scripts\utility::flag_init("flag_conversation_in_progress"); + } + + common_scripts\utility::flag_waitopen("flag_conversation_in_progress"); + common_scripts\utility::flag_set("flag_conversation_in_progress"); +} + +//Function Number: 24 +func_168E() +{ + common_scripts\utility::flag_clear("flag_conversation_in_progress"); +} + +//Function Number: 25 +func_168F(param_00,param_01) +{ + foreach(var_04, var_03 in param_00) + { + if(var_03 == param_01) + { + return var_04; + } + } + + return undefined; +} + +//Function Number: 26 +func_1690(param_00,param_01) +{ + var_02 = []; + foreach(var_04 in param_00) + { + if(!isdefined(func_168F(var_02,var_04))) + { + var_02[var_02.size] = var_04; + } + } + + foreach(var_04 in param_01) + { + if(!isdefined(func_168F(var_02,var_04))) + { + var_02[var_02.size] = var_04; + } + } + + return var_02; +} + +//Function Number: 27 +func_1691(param_00) +{ + var_01 = getentarray(); + foreach(var_03 in var_01) + { + if(isdefined(var_03.script_flag) && common_scripts\utility::string_starts_with(var_03.script_flag,param_00)) + { + var_03.script_specialops = 1; + } + } +} + +//Function Number: 28 +func_1694(param_00) +{ + var_01 = getentarray(); + foreach(var_03 in var_01) + { + if(isdefined(var_03.classname) && var_03.classname == param_00) + { + var_03.script_specialops = 1; + } + } +} + +//Function Number: 29 +func_1695(param_00) +{ + param_00 endon("remove_laser_targeting_device"); + param_00.var_1696 = undefined; + param_00.var_1697 = 0; + param_00 setweaponhudiconoverride("actionslot4","dpad_laser_designator"); + param_00 thread func_169C(); + param_00 notifyonplayercommand("use_laser","+actionslot 4"); + param_00 notifyonplayercommand("fired_laser","+attack"); + param_00 notifyonplayercommand("fired_laser","+attack_akimbo_accessible"); + param_00.var_1698 = 1; + param_00.var_1699 = 20; + param_00 childthread func_169D(); + for(;;) + { + param_00 waittill("use_laser"); + if(param_00.var_1697 || !param_00.var_1698 || param_00 func_169A()) + { + param_00 notify("cancel_laser"); + param_00 laserforceoff(); + param_00.var_1697 = 0; + param_00 allowads(1); + wait 0.2; + param_00 allowfire(1); + continue; + } + + param_00 laserforceon(); + param_00 allowfire(0); + param_00.var_1697 = 1; + param_00 allowads(0); + param_00 thread func_169E(); + } +} + +//Function Number: 30 +func_169A() +{ + var_00 = self getcurrentweapon(); + if(var_00 == "rpg") + { + return 1; + } + + if(common_scripts\utility::string_starts_with(var_00,"gl")) + { + return 1; + } + + if(isdefined(level.var_169B) && isarray(level.var_169B)) + { + foreach(var_02 in level.var_169B) + { + if(var_00 == var_02) + { + return 1; + } + } + } + + if(self isreloading()) + { + return 1; + } + + if(self isthrowinggrenade()) + { + return 1; + } + + return 0; +} + +//Function Number: 31 +func_169C() +{ + self waittill("remove_laser_targeting_device"); + self setweaponhudiconoverride("actionslot4","none"); + self notify("cancel_laser"); + self laserforceoff(); + self.var_1697 = undefined; + self allowfire(1); + self allowads(1); +} + +//Function Number: 32 +func_169D() +{ + for(;;) + { + if(func_169A() && isdefined(self.var_1697) && self.var_1697) + { + self notify("use_laser"); + wait 2; + } + + wait 0.05; + } +} + +//Function Number: 33 +func_169E() +{ + self endon("cancel_laser"); + for(;;) + { + self waittill("fired_laser"); + var_00 = func_16A2(); + var_01 = var_00["position"]; + var_02 = var_00["entity"]; + level notify("laser_coordinates_received"); + var_03 = undefined; + if(isdefined(level.var_169F) && isdefined(var_02) && maps\_utility::array_contains(level.var_169F,var_02)) + { + var_03 = var_02; + level.var_169F = common_scripts\utility::array_remove(level.var_169F,var_02); + } + else + { + var_03 = func_16A0(var_01); + } + + if(isdefined(var_03)) + { + thread func_16A3(var_03); + level notify("laser_target_painted"); + wait 0.5; + self notify("use_laser"); + } + } +} + +//Function Number: 34 +func_16A0(param_00) +{ + if(!isdefined(level.var_16A1) || level.var_16A1.size == 0) + { + return undefined; + } + + foreach(var_02 in level.var_16A1) + { + var_03 = distance2d(param_00,var_02.origin); + var_04 = param_00[2] - var_02.origin[2]; + if(!isdefined(var_02.radius)) + { + continue; + } + + if(!isdefined(var_02.height)) + { + continue; + } + + if(var_03 <= var_02.radius && var_04 <= var_02.height && var_04 >= 0) + { + level.var_16A1 = common_scripts\utility::array_remove(level.var_16A1,var_02); + return getent(var_02.target,"script_noteworthy"); + } + } + + return undefined; +} + +//Function Number: 35 +func_16A2() +{ + var_00 = self geteye(); + var_01 = self getplayerangles(); + var_02 = anglestoforward(var_01); + var_03 = var_00 + var_02 * 7000; + var_04 = bullettrace(var_00,var_03,1,self); + var_05 = var_04["entity"]; + if(isdefined(var_05)) + { + var_04["position"] = var_05.origin; + } + + return var_04; +} + +//Function Number: 36 +func_16A3(param_00) +{ + level.player endon("remove_laser_targeting_device"); + level.player.var_1698 = 0; + self setweaponhudiconoverride("actionslot4","dpad_killstreak_hellfire_missile_inactive"); + maps\_utility::flavorbursts_off("allies"); + var_01 = level.player; + wait 2.5; + if(!isdefined(param_00.script_index)) + { + param_00.script_index = 99; + } + + wait 1; + if(isdefined(param_00.var_16A6)) + { + var_02 = func_16A7("geo_before",param_00.var_16A6); + if(var_02.size > 0) + { + common_scripts\utility::array_call(var_02,::hide); + } + + var_03 = func_16A7("geo_after",param_00.var_16A6); + if(var_03.size > 0) + { + common_scripts\utility::array_call(var_03,::show); + } + } + + wait level.player.var_1699; + level.player.var_1698 = 1; + self setweaponhudiconoverride("actionslot4","dpad_laser_designator"); +} + +//Function Number: 37 +func_16A7(param_00,param_01) +{ + var_02 = getentarray(param_00,"targetname"); + var_03 = []; + foreach(var_05 in var_02) + { + if(isdefined(var_05.var_16A6) && var_05.var_16A6 == param_01) + { + var_03[var_03.size] = var_05; + } + } + + return var_03; +} + +//Function Number: 38 +func_16A8(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07) +{ + if(!isdefined(self.inuse) || self.inuse == 0) + { + self.inuse = 1; + } + else + { + wait 0.05; + return 0; + } + + var_08 = 0; + if(!isdefined(param_02)) + { + param_02 = 3; + } + + var_09 = 57; + var_0A = maps\_hud_util::createclientprogressbar(param_00,var_09); + param_00 playerlinkto(self); + param_00 playerlinkedoffsetenable(); + param_00 disableweapons(); + param_00 disableoffhandweapons(); + param_00 allowmelee(0); + var_0B = undefined; + if(isdefined(param_03)) + { + var_0B = param_00 maps\_hud_util::createclientfontstring("default",1.2); + var_0B maps\_hud_util::setpoint("CENTER",undefined,0,45); + var_0B settext(param_03); + } + + var_0C = 0; + while(param_00 usebuttonpressed()) + { + var_0A maps\_hud_util::updatebar(var_08 / param_02); + wait 0.05; + var_08 = var_08 + 0.05; + if(var_08 > param_02) + { + if(isdefined(param_04)) + { + thread func_16AD(param_00,param_04); + } + + if(isdefined(param_01)) + { + [[ param_01 ]](); + } + + var_0C = 1; + break; + } + + if(param_00.laststand == 1) + { + break; + } + + if(isdefined(param_07) && common_scripts\utility::flag(param_07)) + { + break; + } + + if(common_scripts\utility::flag("missionfailed")) + { + break; + } + } + + if(!var_0C) + { + if(isdefined(param_06)) + { + thread func_16AB(param_00,param_06); + } + + if(isdefined(param_05)) + { + [[ param_05 ]](); + } + } + + param_00 allowmelee(1); + param_00 enableoffhandweapons(); + if(!isdefined(param_07) && param_07 == "dog_attack" && common_scripts\utility::flag("dog_attack")) + { + param_00 enableweapons(); + param_00 unlink(); + } + + self.inuse = 0; + if(isdefined(var_0B)) + { + var_0B maps\_hud_util::destroyelem(); + } + + var_0A maps\_hud_util::destroyelem(); + return var_0C; +} + +//Function Number: 39 +func_16AA(param_00,param_01,param_02,param_03) +{ + if(isdefined(self)) + { + self playsound(param_03,"sound_played",1); + } + + var_04 = newclienthudelem(param_00); + var_04.alignx = "center"; + var_04.aligny = "middle"; + var_04.horzalign = "center"; + var_04.vertalign = "middle"; + var_04.font = "hudsmall"; + var_04.foreground = 1; + var_04.hidewheninmenu = 1; + var_04.hidewhendead = 1; + var_04.sort = 2; + var_04.label = param_01; + var_04 [[ param_02 ]](); + var_04 thread func_16AF(); + wait 2; + var_04 notify("stop_blink"); + wait 0.05; + var_04 destroy(); +} + +//Function Number: 40 +func_16AB(param_00,param_01) +{ + func_16AA(param_00,param_01,::maps\_specialops::set_hud_red,"so_sample_not_collected"); +} + +//Function Number: 41 +func_16AD(param_00,param_01) +{ + func_16AA(param_00,param_01,::maps\_specialops::set_hud_green,"arcademode_2x"); +} + +//Function Number: 42 +func_16AF(param_00) +{ + self endon("stop_blink"); + self endon("death"); + var_01 = 0.1; + var_02 = 0.5; + for(;;) + { + self fadeovertime(var_01); + self.alpha = 1; + wait var_02; + self fadeovertime(var_01); + self.alpha = 0; + wait var_02; + } +} + +//Function Number: 43 +func_16B0() +{ + var_00 = getentarray("shg_vision_multiple_trigger","targetname"); + foreach(var_02 in var_00) + { + var_02 thread func_16B1(); + } +} + +//Function Number: 44 +func_16B1() +{ + var_00 = common_scripts\utility::getstructarray(self.target,"targetname"); + foreach(var_02 in var_00) + { + var_03 = vectornormalize(self.origin - var_02.origin); + var_02.var_16B2 = var_03; + } + + for(;;) + { + self waittill("trigger",var_05); + if(isplayer(var_05)) + { + var_06 = anglestoforward(var_05 getplayerangles()); + var_07 = undefined; + var_08 = 0; + foreach(var_02 in var_00) + { + var_0A = vectordot(var_06,var_02.var_16B2); + if(!isdefined(var_07) || var_0A < var_08) + { + var_07 = var_02; + var_08 = var_0A; + } + } + + var_0C = 1; + if(isdefined(var_07.script_duration)) + { + var_0C = var_07.script_duration; + } + + var_07 maps\_lights::set_sun_shadow_params(var_0C); + wait var_0C; + } + } +} + +//Function Number: 45 +func_16B3(param_00) +{ + self setmodel(param_00); + func_16B4(self.weapon); +} + +//Function Number: 46 +func_16B4(param_00,param_01) +{ + if(isdefined(param_00) && param_00 != "none") + { + var_02 = getweaponhidetags(param_00); + var_03 = 0; + var_04 = getweaponmodel(param_00,var_03); + if(isdefined(param_01)) + { + var_04 = param_01; + } + + for(var_05 = 0;var_05 < var_02.size;var_05++) + { + self hidepart(var_02[var_05],var_04); + } + } +} + +//Function Number: 47 +func_16B5(param_00,param_01,param_02) +{ + if(issplitscreen()) + { + if(self == level.player) + { + param_00 = param_00 + 2; + } + + param_00 = param_00 / 2; + } + + return maps\_specialops::so_create_hud_item(param_00,param_01,param_02,self); +} + +//Function Number: 48 +func_16B7(param_00,param_01,param_02,param_03,param_04,param_05) +{ + level.var_16B8 = "award_positive"; + level.var_16B9 = "award_positive"; + level.var_16BA = func_16BE(param_00,param_01,param_02); + level.var_16BB = func_16BE(param_03,param_04,param_05); + common_scripts\utility::array_thread(level.players,::func_16BF); + level.var_16BC = 1; + level.var_16BD = ::func_16C2; + func_16D5(); +} + +//Function Number: 49 +func_16BE(param_00,param_01,param_02) +{ + var_03 = []; + if(isdefined(param_00)) + { + } + else + { + var_7B["max_successes"] = undefined; + } + + return var_7B; +} + +//Function Number: 50 +func_16BF() +{ + if(!isdefined(self.var_16C0)) + { + self.var_16C0 = 0; + } + + if(!isdefined(self.var_16C1)) + { + self.var_16C1 = 0; + } +} + +//Function Number: 51 +func_16C2() +{ + if(issplitscreen()) + { + setdvar("ui_hide_hint",1); + } + + if(!level.missionfailed) + { + setdvar("ui_hide_hint",1); + } + + level.challenge_time_limit = func_16CA(); + level.var_16C4 = 0; + foreach(var_01 in level.players) + { + var_01.var_16C5 = func_16CD(var_01); + level.var_16C4 = level.var_16C4 + var_01.var_16C5["kill_score"]; + level.var_16C4 = level.var_16C4 + var_01.var_16C5["challenge_1"]; + level.var_16C4 = level.var_16C4 + var_01.var_16C5["challenge_2"]; + } + + level.var_16C4 = level.var_16C4 + level.players[0].var_16C5["gameskill_score"]; + level.var_16C4 = level.var_16C4 + level.players[0].var_16C5["time_score"]; + level.var_16C4 = int(level.var_16C4); + foreach(var_01 in level.players) + { + var_01 maps\_specialops::override_summary_score(level.var_16C4); + if(maps\_utility::is_coop()) + { + var_04 = maps\_utility::get_other_player(var_01); + var_01 maps\_utility::add_custom_eog_summary_line("","@SPECIAL_OPS_PERFORMANCE_YOU","@SPECIAL_OPS_PERFORMANCE_PARTNER"); + var_01 maps\_utility::add_custom_eog_summary_line("@SPECIAL_OPS_UI_DIFFICULTY",var_01.var_16C5["difficulty"],var_04.var_16C5["difficulty"]); + var_01 maps\_utility::add_custom_eog_summary_line("@SPECIAL_OPS_UI_KILLS",var_01.var_16C5["kills_num"],var_04.var_16C5["kills_num"]); + var_01 maps\_utility::add_custom_eog_summary_line(level.var_16BA["description"],var_01.var_16C5["ch_1_tally"],var_04.var_16C5["ch_1_tally"]); + if(level.var_16BB["value"] > 0) + { + var_01 maps\_utility::add_custom_eog_summary_line(level.var_16BB["description"],var_01.var_16C5["ch_2_tally"],var_04.var_16C5["ch_2_tally"]); + } + + var_01 maps\_utility::add_custom_eog_summary_line(var_01.var_16C5["t_message"],"",var_04.var_16C5["time_string"]); + if(level.var_16BB["value"] <= 0 || !issplitscreen()) + { + var_01 maps\_utility::add_custom_eog_summary_line_blank(); + } + + if(!level.missionfailed) + { + var_01 maps\_utility::add_custom_eog_summary_line("@SPECIAL_OPS_UI_SCORE","",level.var_16C4); + } + + continue; + } + + if(!level.missionfailed) + { + var_01 maps\_utility::add_custom_eog_summary_line("","","@SPECIAL_OPS_POINTS"); + var_01 maps\_utility::add_custom_eog_summary_line("@SPECIAL_OPS_UI_DIFFICULTY",var_01.var_16C5["difficulty"],var_01.var_16C5["gameskill_score"]); + var_01 maps\_utility::add_custom_eog_summary_line(var_01.var_16C5["t_message"],var_01.var_16C5["time_string"],var_01.var_16C5["time_score"]); + var_01 maps\_utility::add_custom_eog_summary_line("@SPECIAL_OPS_UI_KILLS",var_01.var_16C5["kills_num"],var_01.var_16C5["kill_score"]); + var_01 maps\_utility::add_custom_eog_summary_line(level.var_16BA["description"],var_01.var_16C5["ch_1_tally"],var_01.var_16C5["challenge_1"]); + if(level.var_16BB["value"] > 0) + { + var_01 maps\_utility::add_custom_eog_summary_line(level.var_16BB["description"],var_01.var_16C5["ch_2_tally"],var_01.var_16C5["challenge_2"]); + } + + if(level.var_16BB["value"] <= 0 || !issplitscreen()) + { + var_01 maps\_utility::add_custom_eog_summary_line_blank(); + } + + var_01 maps\_utility::add_custom_eog_summary_line("@SPECIAL_OPS_UI_SCORE"," ",level.var_16C4); + continue; + } + + var_01 maps\_utility::add_custom_eog_summary_line("@SPECIAL_OPS_UI_DIFFICULTY","",var_01.var_16C5["difficulty"]); + var_01 maps\_utility::add_custom_eog_summary_line(var_01.var_16C5["t_message"],"",var_01.var_16C5["time_string"]); + var_01 maps\_utility::add_custom_eog_summary_line("@SPECIAL_OPS_UI_KILLS","",var_01.var_16C5["kills_num"]); + var_01 maps\_utility::add_custom_eog_summary_line(level.var_16BA["description"],"",var_01.var_16C5["ch_1_tally"]); + if(level.var_16BB["value"] > 0) + { + var_01 maps\_utility::add_custom_eog_summary_line(level.var_16BB["description"],"",var_01.var_16C5["ch_2_tally"]); + } + } +} + +//Function Number: 52 +func_16CA() +{ + if(!isdefined(level.var_16CB)) + { + level.var_16CB = 420000; + } + + if(!isdefined(level.var_4412)) + { + level.var_4412 = 0; + } + + if(!isdefined(level.challenge_time_limit)) + { + level.var_16CC = 0; + level.challenge_time_limit = level.var_16CB; + } + else + { + level.var_16CC = 1; + } + + level.var_4413 = level.var_16CB - level.var_4412; + return level.challenge_time_limit; +} + +//Function Number: 53 +func_16CD(param_00,param_01,param_02) +{ + param_00.var_16C5 = []; + param_00.var_16C5["final_score"] = 0; + param_00.var_16C5["level_time"] = level.challenge_end_time - level.challenge_start_time; + if(level.challenge_time_limit > param_00.var_16C5["level_time"]) + { + param_00.var_16C5["t_message"] = func_16D4("bonus"); + param_00.var_16C5["remaining_time"] = int(level.challenge_time_limit - param_00.var_16C5["level_time"]); + if(!level.missionfailed) + { + } + + if(!level.var_16CC) + { + if(level.var_4412 <= param_00.var_16C5["level_time"]) + { + param_00.var_16C5["time_percent"] = max(level.var_4413 - param_00.var_16C5["level_time"] - level.var_4412 / level.var_4413,0); + } + else + { + param_00.var_16C5["time_percent"] = 1; + } + } + else if(level.var_4412 >= param_00.var_16C5["remaining_time"]) + { + param_00.var_16C5["time_percent"] = max(param_00.var_16C5["remaining_time"] / level.var_4413,0); + } + else + { + param_00.var_16C5["time_percent"] = 1; + } + + param_00.var_16C5["time_score"] = int(param_00.var_16C5["time_percent"] * 5000); + if(level.var_16CC) + { + param_00.var_16C5["time_string"] = maps\_utility::convert_to_time_string(param_00.var_16C5["remaining_time"] * 0.001,1); + } + else + { + param_00.var_16C5["time_string"] = maps\_utility::convert_to_time_string(param_00.var_16C5["level_time"] * 0.001,1); + } + + param_00.var_16C5["final_score"] = param_00.var_16C5["final_score"] + param_00.var_16C5["time_score"]; + } + else + { + param_00.var_16C5["t_message"] = func_16D4("no_bonus"); + param_00.var_16C5["time_string"] = maps\_utility::convert_to_time_string(param_00.var_16C5["level_time"] * 0.001,1); + param_00.var_16C5["time_score"] = 0; + } + + param_00.var_16C5["gameskill_low"] = level.so_enable_wait_for_players; + param_00.var_16C5["gameskill_score"] = max(10000 * param_00.var_16C5["gameskill_low"],0); + param_00.var_16C5["final_score"] = param_00.var_16C5["final_score"] + param_00.var_16C5["gameskill_score"]; + if(isdefined(level.var_16BA["max_successes"])) + { + param_00.var_16C5["challenge_1"] = min(level.var_16BA["value"] * param_00.var_16C0,level.var_16BA["value"] * level.var_16BA["max_successes"]); + } + else + { + param_00.var_16C5["challenge_1"] = level.var_16BA["value"] * param_00.var_16C0; + } + + if(isdefined(level.var_16BB["max_successes"])) + { + param_00.var_16C5["challenge_2"] = min(level.var_16BB["value"] * param_00.var_16C1,level.var_16BB["value"] * level.var_16BB["max_successes"]); + } + else + { + param_00.var_16C5["challenge_2"] = level.var_16BB["value"] * param_00.var_16C1; + } + + param_00.var_16C5["final_score"] = param_00.var_16C5["final_score"] + param_00.var_16C5["challenge_1"] + param_00.var_16C5["challenge_2"]; + param_00.var_16C5["ch_1_tally"] = func_16D3(param_00.var_16C0,level.var_16BA["max_successes"]); + param_00.var_16C5["ch_2_tally"] = func_16D3(param_00.var_16C1,level.var_16BB["max_successes"]); + param_00.var_16C5["kills_num"] = param_00.stats["kills"]; + param_00.var_16C5["kill_score"] = min(param_00.stats["kills"] * 25,2500); + param_00.var_16C5["final_score"] = param_00.var_16C5["final_score"] + param_00.var_16C5["kill_score"]; + param_00.var_16C5["final_score"] = func_16E0(param_00,param_00.var_16C5["final_score"],param_00.var_16C5["gameskill_score"]); + param_00.var_16C5["difficulty"] = maps\_specialops::so_get_difficulty_menu_string(param_00.gameskill); + return param_00.var_16C5; +} + +//Function Number: 54 +func_16D3(param_00,param_01) +{ + if(!isdefined(param_01) && param_00 > 0) + { + return param_00; + } + + if(!isdefined(param_01) && param_00 == 0) + { + return "@SPECIAL_OPS_UI_CHALLENGE_FAIL"; + } + + if(isdefined(param_01) && param_01 == 1 && param_00 >= 1) + { + return "@SPECIAL_OPS_UI_CHALLENGE_COMPLETE"; + } + + if(isdefined(param_01) && param_00 == 0) + { + return "@SPECIAL_OPS_UI_CHALLENGE_FAIL"; + } + + if(isdefined(param_01) && param_00 > param_01) + { + param_00 = param_01; + } + + if(maps\_utility::is_coop()) + { + return param_00; + } + + return param_00 + " / " + param_01; +} + +//Function Number: 55 +func_16D4(param_00) +{ + if(param_00 == "bonus") + { + return "@SPECIAL_OPS_UI_TIME"; + } + + if(param_00 == "no_bonus") + { + return "@SPECIAL_OPS_UI_TIME"; + } +} + +//Function Number: 56 +func_16D5(param_00) +{ + foreach(var_02 in level.players) + { + var_02 thread func_16D6(level.var_16BA["value"],level.var_16BB["value"]); + } +} + +//Function Number: 57 +func_16D6(param_00,param_01) +{ + self.var_16D8 = func_16DB(1,level.var_16BA,level.var_16B8,param_00,level.var_16D7); + self.var_16DA = func_16DB(2,level.var_16BB,level.var_16B9,param_01,level.var_16D9); + thread func_16DF(); + thread func_16E1(self.var_16D8); + thread func_16E2(self.var_16DA); + thread monitor_challenges(); +} + +//Function Number: 58 +monitor_challenges(param_00) +{ + var_01 = self.var_16C0; + var_02 = self.var_16C1; + for(;;) + { + if(self.var_16C0 != var_01) + { + func_16DD(self.var_16D8,var_01,1); + var_01 = self.var_16C0; + } + + if(self.var_16C1 != var_02) + { + func_16DD(self.var_16DA,var_02,2); + var_02 = self.var_16C1; + } + + wait 0.05; + } +} + +//Function Number: 59 +func_16DB(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = []; + return var_7B; +} + +//Function Number: 60 +func_16DC(param_00) +{ + if(param_00 == 1) + { + return self.var_16C0; + } + + if(param_00 == 2) + { + return self.var_16C1; + } +} + +//Function Number: 61 +func_16DD(param_00,param_01,param_02) +{ + var_03 = func_16DC(param_02); + if(isdefined(param_00["max"]) && var_03 < param_00["max"]) + { + func_16DE(param_00,param_01,param_02); + return; + } + + if(!isdefined(param_00["max"])) + { + func_16DE(param_00,param_01,param_02); + } +} + +//Function Number: 62 +func_16DE(param_00,param_01,param_02) +{ + var_03 = func_16DC(param_02); + for(var_04 = 0;var_04 < var_03 - param_01;var_04++) + { + if(param_02 == 1) + { + self notify("bonus1_achieved"); + } + else + { + self notify("bonus2_achieved"); + } + + self notify("bonus_achieved"); + } +} + +//Function Number: 63 +func_16DF() +{ + for(;;) + { + self waittill("bonus_achieved"); + thread common_scripts\utility::play_sound_in_space("arcademode_2x",self geteye()); + wait 0.5; + } +} + +//Function Number: 64 +func_16E0(param_00,param_01,param_02) +{ + var_03 = param_02 + 29999; + param_01 = int(min(param_01,var_03)); + return param_01; +} + +//Function Number: 65 +func_16E1(param_00) +{ + for(;;) + { + self waittill("bonus1_achieved"); + func_16E3(150,115,1,param_00); + } +} + +//Function Number: 66 +func_16E2(param_00) +{ + for(;;) + { + self waittill("bonus2_achieved"); + func_16E3(170,135,2,param_00); + } +} + +//Function Number: 67 +func_16E3(param_00,param_01,param_02,param_03) +{ + if(isdefined(param_03["text"])) + { + var_04["bar"] = func_16E6(59,param_00,"right",0); + var_04["bar"] func_16E5(18); + var_05 = []; + var_7B["text"] settext(var_04["text"]); + var_7B["text"] thread func_16E4(); + var_7B["num"] thread func_16E4(); + var_06 = func_16DC(param_03); + for(var_07 = 0;var_07 < 90;var_07++ = var_7B["num"]) + { + var_08 = func_16DC(param_03); + var_09 = func_16D3(var_08,var_04["max"]); + var_7B["num"] settext(" " + var_09); + if(var_06 != var_08) + { + var_06 = var_08; + var_7B["num"] thread func_16E4(); + } + + wait 0.05; + } + + if(isdefined(var_05["bar"])) + { + var_05["bar"] destroy(); + } + + if(isdefined(var_7B["text"])) + { + var_7B["text"] destroy(); + } + + if(isdefined(var_7B["num"])) + { + var_7B["num"] destroy(); + } + } +} + +//Function Number: 68 +func_16E4() +{ + for(var_00 = 0;var_00 < 2;var_00++) + { + if(isdefined(self)) + { + self changefontscaleovertime(0.25); + self.fontscale = 0.9; + self.color = (0.65,1,0.65); + wait 0.25; + } + + if(isdefined(self)) + { + self changefontscaleovertime(0.25); + self.fontscale = 0.75; + self.color = (1,1,1); + wait 0.25; + } + } +} + +//Function Number: 69 +func_16E5(param_00) +{ + self scaleovertime(0.25,100,param_00); + wait 0.25; +} + +//Function Number: 70 +func_16E6(param_00,param_01,param_02,param_03) +{ + var_04 = newclienthudelem(self); + var_04 = func_16E8(var_04,59,param_01,"right",0); + var_04 setshader("hud_white_box",100,1); + var_04.alpha = 0.5; + var_04.color = (0.7,0.8,0.7); + return var_04; +} + +//Function Number: 71 +func_16E7(param_00,param_01,param_02,param_03) +{ + var_04 = maps\_hud_util::createclientfontstring("hudsmall",0.75); + var_04 = func_16E8(var_04,76,param_01,param_02,2); + return var_04; +} + +//Function Number: 72 +func_16E8(param_00,param_01,param_02,param_03,param_04) +{ + param_00.x = param_01; + param_00.y = param_02; + param_00.alignx = param_03; + param_00.aligny = "middle"; + param_00.foreground = 1; + param_00.font = "hudsmall"; + param_00.hidewheninmenu = 1; + param_00.hidewhendead = 1; + param_00.sort = param_04; + return param_00; +} + +//Function Number: 73 +func_16E9(param_00) +{ + maps\_utility::bcs_scripted_dialogue_start(); + if(isdefined(self.last_queue_time)) + { + maps\_utility::wait_for_buffer_time_to_pass(self.last_queue_time,0.5); + } + + var_01 = []; + maps\_utility::function_stack(::func_16EB,var_7B,var_01); + if(isalive(self)) + { + self.last_queue_time = gettime(); + } +} + +//Function Number: 74 +func_16EB(param_00,param_01,param_02) +{ + var_03 = self; + var_04 = []; + foreach(var_07, var_06 in param_00) + { + var_04[var_07] = var_06[0]; + } + + foreach(var_09 in var_04) + { + if(!isdefined(var_09)) + { + continue; + } + + if(!isdefined(var_09._animactive)) + { + var_09._animactive = 0; + } + + var_09._animactive++; + } + + var_0B = maps\_anim::get_anim_position(param_02); + var_0C = var_0B["origin"]; + var_0D = var_0B["angles"]; + var_0E = "single anim"; + var_0F = spawnstruct(); + var_10 = 0; + foreach(var_07, var_09 in var_04) + { + var_12 = 0; + var_13 = 0; + var_14 = 0; + var_15 = 0; + var_16 = undefined; + var_17 = undefined; + var_18 = var_09.animname; + if(isdefined(level.scr_face[var_18]) && isdefined(level.scr_face[var_18][param_01])) + { + var_12 = 1; + var_17 = level.scr_face[var_18][param_01]; + } + + if(isdefined(level.scr_sound[var_18]) && isdefined(level.scr_sound[var_18][param_01])) + { + var_13 = 1; + var_16 = level.scr_sound[var_18][param_01]; + } + + if(isdefined(level.scr_anim[var_18]) && isdefined(level.scr_anim[var_18][param_01]) && !isai(var_09) || !var_09 maps\_utility::doinglongdeath()) + { + var_14 = 1; + } + + if(isdefined(level.scr_animsound[var_18]) && isdefined(level.scr_animsound[var_18][param_01])) + { + var_09 playsound(level.scr_animsound[var_18][param_01]); + } + + if(var_14) + { + var_09 maps\_anim::last_anim_time_check(); + if(isplayer(var_09)) + { + var_19 = level.scr_anim[var_18]["root"]; + var_09 setanim(var_19,0,0.2); + var_1A = level.scr_anim[var_18][param_01]; + var_09 setflaggedanim(var_0E,var_1A,1,0.2); + } + else if(var_09.code_classname == "misc_turret") + { + var_1A = level.scr_anim[var_18][param_01]; + var_09 setflaggedanim(var_0E,var_1A,1,0.2); + } + else + { + var_09 animscripted(var_0E,var_0C,var_0D,level.scr_anim[var_18][param_01]); + } + + thread maps\_anim::start_notetrack_wait(var_09,var_0E,param_01,var_18); + thread maps\_anim::animscriptdonotetracksthread(var_09,var_0E,param_01); + } + + if(var_12 || var_13) + { + if(var_12) + { + if(var_13) + { + var_09 thread func_16F0(param_01,var_12,var_16,level.scr_face[var_18][param_01]); + } + + thread maps\_anim::anim_facialanim(var_09,param_01,level.scr_face[var_18][param_01]); + } + else if(isai(var_09)) + { + if(var_14) + { + var_09 animscripts/face::func_C46(var_17,var_16,1); + } + else + { + var_09 thread maps\_anim::anim_facialfiller("single dialogue"); + var_09 animscripts/face::func_C46(var_17,var_16,1,"single dialogue"); + } + } + else + { + var_09 thread maps\_utility::play_sound_on_entity(var_16,"single dialogue"); + } + } + + if(var_14) + { + var_1B = getanimlength(level.scr_anim[var_18][param_01]); + var_0F thread func_16EC(var_09,param_01); + var_0F thread func_16EF(var_09,param_01,var_1B,param_00[var_07][1]); + var_10++; + continue; + } + + if(var_12) + { + var_0F thread func_16EC(var_09,param_01); + var_0F thread func_16ED(var_09,param_01,var_17); + var_10++; + continue; + } + + if(var_13) + { + var_0F thread func_16EC(var_09,param_01); + var_0F thread func_16EE(var_09,param_01); + var_10++; + } + } + + while(var_10 > 0) + { + var_0F waittill(param_01,var_09); + var_10--; + if(!isdefined(var_09)) + { + continue; + } + + if(isplayer(var_09)) + { + var_18 = var_09.animname; + if(isdefined(level.scr_anim[var_18][param_01])) + { + var_19 = level.scr_anim[var_18]["root"]; + var_09 setanim(var_19,1,0.2); + var_1A = level.scr_anim[var_18][param_01]; + var_09 clearanim(var_1A,0.2); + } + } + + var_09._animactive--; + var_09._lastanimtime = gettime(); + } + + self notify(param_01); +} + +//Function Number: 75 +func_16EC(param_00,param_01) +{ + param_00 endon("kill_anim_end_notify_" + param_01); + param_00 waittill("death"); + self notify(param_01,param_00); + param_00 notify("kill_anim_end_notify_" + param_01); +} + +//Function Number: 76 +func_16ED(param_00,param_01,param_02) +{ + param_00 endon("kill_anim_end_notify_" + param_01); + var_03 = getanimlength(param_02); + wait var_03; + self notify(param_01,param_00); + param_00 notify("kill_anim_end_notify_" + param_01); +} + +//Function Number: 77 +func_16EE(param_00,param_01) +{ + param_00 endon("kill_anim_end_notify_" + param_01); + param_00 waittill("single dialogue"); + self notify(param_01,param_00); + param_00 notify("kill_anim_end_notify_" + param_01); +} + +//Function Number: 78 +func_16EF(param_00,param_01,param_02,param_03) +{ + param_00 endon("kill_anim_end_notify_" + param_01); + param_02 = param_02 - param_03; + if(param_03 > 0 && param_02 > 0) + { + param_00 maps\_utility::waittill_match_or_timeout("single anim","end",param_02); + param_00 stopanimscripted(); + } + else + { + param_00 waittillmatch("end","single anim"); + } + + param_00 notify("anim_ended"); + self notify(param_01,param_00); + param_00 notify("kill_anim_end_notify_" + param_01); +} + +//Function Number: 79 +func_16F0(param_00,param_01,param_02,param_03) +{ + if(param_01) + { + thread func_16F1(param_00); + thread func_16F2(param_00); + thread func_16F3(param_00); + var_04 = []; + if(!isarray(param_02)) + { + } + else + { + var_7B = param_03; + } + + foreach(var_06 in var_7B) + { + self waittillmatch(param_02,var_7B[0],"dialogue_line","face_done_" + param_01); + animscripts/face::func_C46(undefined,var_06,1); + } + + self notify("all_facial_lines_done"); + return; + } + + animscripts/face::func_C46(undefined,param_03,1,"single dialogue"); +} + +//Function Number: 80 +func_16F1(param_00) +{ + self endon("death"); + self waittillmatch("end","face_done_" + param_00); + self notify("facial_anim_end_" + param_00); +} + +//Function Number: 81 +func_16F2(param_00) +{ + self endon("death"); + self endon("all_facial_lines_done"); + self waittill("facial_anim_end_" + param_00); +} + +//Function Number: 82 +func_16F3(param_00) +{ + self endon("death"); + self endon("facial_anim_end_" + param_00); + self waittill("all_facial_lines_done"); + self waittillmatch("dialogue_line","face_done_" + param_00); +} \ No newline at end of file diff --git a/MW3/PC/SP/1463.gsc b/MW3/PC/SP/1463.gsc new file mode 100644 index 0000000..e0867fc --- /dev/null +++ b/MW3/PC/SP/1463.gsc @@ -0,0 +1,16 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1463.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:20:32 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + var_00[0] = "body_chemwar_russian_assault_c"; + return var_7B; +} \ No newline at end of file diff --git a/MW3/PC/SP/1464.gsc b/MW3/PC/SP/1464.gsc new file mode 100644 index 0000000..c5ea676 --- /dev/null +++ b/MW3/PC/SP/1464.gsc @@ -0,0 +1,25 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1464.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:20:32 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_0144::func_1E55(lib_05B7::main()); + self attach("head_opforce_arab_c","",1); + self.var_1E5A = "head_opforce_arab_c"; + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + lib_0144::func_1E56(lib_05B7::main()); + precachemodel("head_opforce_arab_c"); +} \ No newline at end of file diff --git a/MW3/PC/SP/1465.gsc b/MW3/PC/SP/1465.gsc new file mode 100644 index 0000000..13bc72b --- /dev/null +++ b/MW3/PC/SP/1465.gsc @@ -0,0 +1,16 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1465.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:20:32 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + var_00[0] = "head_africa_militia_a_hat"; + return var_7B; +} \ No newline at end of file diff --git a/MW3/PC/SP/1466.gsc b/MW3/PC/SP/1466.gsc new file mode 100644 index 0000000..5b9075a --- /dev/null +++ b/MW3/PC/SP/1466.gsc @@ -0,0 +1,16 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1466.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:20:33 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + var_00[0] = "hat_africa_militia_a"; + return var_7B; +} \ No newline at end of file diff --git a/MW3/PC/SP/1467.gsc b/MW3/PC/SP/1467.gsc new file mode 100644 index 0000000..63713e7 --- /dev/null +++ b/MW3/PC/SP/1467.gsc @@ -0,0 +1,16 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1467.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:20:33 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + var_00[0] = "hat_africa_militia_b"; + return var_7B; +} \ No newline at end of file diff --git a/MW3/PC/SP/1468.gsc b/MW3/PC/SP/1468.gsc new file mode 100644 index 0000000..57e81a5 --- /dev/null +++ b/MW3/PC/SP/1468.gsc @@ -0,0 +1,16 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1468.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:20:33 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + var_00[0] = "hat_africa_militia_c"; + return var_7B; +} \ No newline at end of file diff --git a/MW3/PC/SP/1469.gsc b/MW3/PC/SP/1469.gsc new file mode 100644 index 0000000..5fe6252 --- /dev/null +++ b/MW3/PC/SP/1469.gsc @@ -0,0 +1,30 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1469.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:20:33 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("body_africa_militia_smg_a"); + lib_0144::func_1E57("alias_africa_militia_heads_a",lib_05B9::main()); + if(isendstr(self.var_1E5A,"_hat")) + { + lib_0144::func_1E5B("alias_africa_militia_hats_a",lib_05BA::main()); + } + + self.voice = "african"; +} + +//Function Number: 2 +precache() +{ + precachemodel("body_africa_militia_smg_a"); + lib_0144::func_1E56(lib_05B9::main()); + lib_0144::func_1E56(lib_05BA::main()); +} \ No newline at end of file diff --git a/MW3/PC/SP/1470.gsc b/MW3/PC/SP/1470.gsc new file mode 100644 index 0000000..86e78ff --- /dev/null +++ b/MW3/PC/SP/1470.gsc @@ -0,0 +1,31 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1470.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:20:34 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("body_africa_militia_smg_b"); + self attach("head_africa_militia_b_hat","",1); + self.var_1E5A = "head_africa_militia_b_hat"; + if(isendstr(self.var_1E5A,"_hat")) + { + lib_0144::func_1E5B("alias_africa_militia_hats_b",lib_05BB::main()); + } + + self.voice = "african"; +} + +//Function Number: 2 +precache() +{ + precachemodel("body_africa_militia_smg_b"); + precachemodel("head_africa_militia_b_hat"); + lib_0144::func_1E56(lib_05BB::main()); +} \ No newline at end of file diff --git a/MW3/PC/SP/1471.gsc b/MW3/PC/SP/1471.gsc new file mode 100644 index 0000000..745aa96 --- /dev/null +++ b/MW3/PC/SP/1471.gsc @@ -0,0 +1,31 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1471.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:20:34 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("body_africa_militia_smg_c"); + self attach("head_africa_militia_c_hat","",1); + self.var_1E5A = "head_africa_militia_c_hat"; + if(isendstr(self.var_1E5A,"_hat")) + { + lib_0144::func_1E5B("alias_africa_militia_hats_c",lib_05BC::main()); + } + + self.voice = "african"; +} + +//Function Number: 2 +precache() +{ + precachemodel("body_africa_militia_smg_c"); + precachemodel("head_africa_militia_c_hat"); + lib_0144::func_1E56(lib_05BC::main()); +} \ No newline at end of file diff --git a/MW3/PC/SP/1472.gsc b/MW3/PC/SP/1472.gsc new file mode 100644 index 0000000..db87aed --- /dev/null +++ b/MW3/PC/SP/1472.gsc @@ -0,0 +1,16 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1472.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:20:34 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + var_00[0] = "head_russian_military_a"; + return var_7B; +} \ No newline at end of file diff --git a/MW3/PC/SP/1473.gsc b/MW3/PC/SP/1473.gsc new file mode 100644 index 0000000..4803fcc --- /dev/null +++ b/MW3/PC/SP/1473.gsc @@ -0,0 +1,24 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1473.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:20:34 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("body_russian_military_smg_a_airborne"); + lib_0144::func_1E57("alias_so_regular_smg_heads",lib_05C0::main()); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("body_russian_military_smg_a_airborne"); + lib_0144::func_1E56(lib_05C0::main()); +} \ No newline at end of file diff --git a/MW3/PC/SP/1475.gsc b/MW3/PC/SP/1475.gsc new file mode 100644 index 0000000..13e20cd --- /dev/null +++ b/MW3/PC/SP/1475.gsc @@ -0,0 +1,16 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1475.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:20:35 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + var_00[0] = "head_russian_military_d_black"; + return var_7B; +} \ No newline at end of file diff --git a/MW3/PC/SP/1476.gsc b/MW3/PC/SP/1476.gsc new file mode 100644 index 0000000..a52c795 --- /dev/null +++ b/MW3/PC/SP/1476.gsc @@ -0,0 +1,24 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1476.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:20:35 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("body_russian_military_assault_a_black"); + lib_0144::func_1E57("alias_so_veteran_ar_heads",lib_05C3::main()); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("body_russian_military_assault_a_black"); + lib_0144::func_1E56(lib_05C3::main()); +} \ No newline at end of file diff --git a/MW3/PC/SP/1477.gsc b/MW3/PC/SP/1477.gsc new file mode 100644 index 0000000..4a3f760 --- /dev/null +++ b/MW3/PC/SP/1477.gsc @@ -0,0 +1,22 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1477.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:20:36 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("body_complete_sp_juggernaut"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("body_complete_sp_juggernaut"); +} \ No newline at end of file diff --git a/MW3/PC/SP/1479.gsc b/MW3/PC/SP/1479.gsc new file mode 100644 index 0000000..8436ac9 --- /dev/null +++ b/MW3/PC/SP/1479.gsc @@ -0,0 +1,22 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1479.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:20:36 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("fullbody_juggernaut_novisor_b"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("fullbody_juggernaut_novisor_b"); +} \ No newline at end of file diff --git a/MW3/PC/SP/1481.gsc b/MW3/PC/SP/1481.gsc new file mode 100644 index 0000000..4a03156 --- /dev/null +++ b/MW3/PC/SP/1481.gsc @@ -0,0 +1,22 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1481.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:20:38 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("fullbody_juggernaut_explosive_so"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("fullbody_juggernaut_explosive_so"); +} \ No newline at end of file diff --git a/MW3/PC/SP/1482.gsc b/MW3/PC/SP/1482.gsc new file mode 100644 index 0000000..bbd4978 --- /dev/null +++ b/MW3/PC/SP/1482.gsc @@ -0,0 +1,32 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1482.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:20:38 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("body_so_juggernaut_blue"); + self attach("head_so_juggernaut_blue_hat","",1); + self.var_1E5A = "head_so_juggernaut_blue_hat"; + if(isendstr(self.var_1E5A,"_hat")) + { + self.hatmodel = "hat_so_juggernaut_blue"; + self attach(self.hatmodel); + } + + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("body_so_juggernaut_blue"); + precachemodel("head_so_juggernaut_blue_hat"); + precachemodel("hat_so_juggernaut_blue"); +} \ No newline at end of file diff --git a/MW3/PC/SP/1483.gsc b/MW3/PC/SP/1483.gsc new file mode 100644 index 0000000..4a00270 --- /dev/null +++ b/MW3/PC/SP/1483.gsc @@ -0,0 +1,16 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1483.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:20:38 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + var_00[0] = "head_chemwar_russian_a"; + return var_7B; +} \ No newline at end of file diff --git a/MW3/PC/SP/1484.gsc b/MW3/PC/SP/1484.gsc new file mode 100644 index 0000000..563d653 --- /dev/null +++ b/MW3/PC/SP/1484.gsc @@ -0,0 +1,22 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1484.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:20:39 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("fullbody_chemwar_russian_assault_a"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("fullbody_chemwar_russian_assault_a"); +} \ No newline at end of file diff --git a/MW3/PC/SP/1485.gsc b/MW3/PC/SP/1485.gsc new file mode 100644 index 0000000..6a9fe77 --- /dev/null +++ b/MW3/PC/SP/1485.gsc @@ -0,0 +1,24 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1485.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:20:39 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("body_chemwar_russian_assault_b"); + lib_0144::func_1E57("alias_chemwar_russian_heads_masked",lib_05CB::main()); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("body_chemwar_russian_assault_b"); + lib_0144::func_1E56(lib_05CB::main()); +} \ No newline at end of file diff --git a/MW3/PC/SP/1486.gsc b/MW3/PC/SP/1486.gsc new file mode 100644 index 0000000..d8f082a --- /dev/null +++ b/MW3/PC/SP/1486.gsc @@ -0,0 +1,24 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1486.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:20:39 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("body_chemwar_russian_assault_c"); + lib_0144::func_1E57("alias_chemwar_russian_heads_masked",lib_05CB::main()); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("body_chemwar_russian_assault_c"); + lib_0144::func_1E56(lib_05CB::main()); +} \ No newline at end of file diff --git a/MW3/PC/SP/1487.gsc b/MW3/PC/SP/1487.gsc new file mode 100644 index 0000000..582289e --- /dev/null +++ b/MW3/PC/SP/1487.gsc @@ -0,0 +1,24 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1487.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:20:39 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("body_chemwar_russian_assault_d"); + lib_0144::func_1E57("alias_chemwar_russian_heads_masked",lib_05CB::main()); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("body_chemwar_russian_assault_d"); + lib_0144::func_1E56(lib_05CB::main()); +} \ No newline at end of file diff --git a/MW3/PC/SP/1488.gsc b/MW3/PC/SP/1488.gsc new file mode 100644 index 0000000..396353e --- /dev/null +++ b/MW3/PC/SP/1488.gsc @@ -0,0 +1,24 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1488.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:20:40 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("body_chemwar_russian_assault_e"); + lib_0144::func_1E57("alias_chemwar_russian_heads_masked",lib_05CB::main()); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("body_chemwar_russian_assault_e"); + lib_0144::func_1E56(lib_05CB::main()); +} \ No newline at end of file diff --git a/MW3/PC/SP/1489.gsc b/MW3/PC/SP/1489.gsc new file mode 100644 index 0000000..0f47728 --- /dev/null +++ b/MW3/PC/SP/1489.gsc @@ -0,0 +1,22 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1489.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:20:40 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("fullbody_chemwar_russian_assault_aa"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("fullbody_chemwar_russian_assault_aa"); +} \ No newline at end of file diff --git a/MW3/PC/SP/1490.gsc b/MW3/PC/SP/1490.gsc new file mode 100644 index 0000000..e579af2 --- /dev/null +++ b/MW3/PC/SP/1490.gsc @@ -0,0 +1,24 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1490.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:20:40 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("body_chemwar_russian_assault_bb"); + lib_0144::func_1E57("alias_chemwar_russian_heads_masked",lib_05CB::main()); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("body_chemwar_russian_assault_bb"); + lib_0144::func_1E56(lib_05CB::main()); +} \ No newline at end of file diff --git a/MW3/PC/SP/1491.gsc b/MW3/PC/SP/1491.gsc new file mode 100644 index 0000000..9161a04 --- /dev/null +++ b/MW3/PC/SP/1491.gsc @@ -0,0 +1,24 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1491.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:20:41 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("body_chemwar_russian_assault_cc"); + lib_0144::func_1E57("alias_chemwar_russian_heads_masked",lib_05CB::main()); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("body_chemwar_russian_assault_cc"); + lib_0144::func_1E56(lib_05CB::main()); +} \ No newline at end of file diff --git a/MW3/PC/SP/1492.gsc b/MW3/PC/SP/1492.gsc new file mode 100644 index 0000000..db21f72 --- /dev/null +++ b/MW3/PC/SP/1492.gsc @@ -0,0 +1,24 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1492.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:20:41 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("body_chemwar_russian_assault_dd"); + lib_0144::func_1E57("alias_chemwar_russian_heads_masked",lib_05CB::main()); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("body_chemwar_russian_assault_dd"); + lib_0144::func_1E56(lib_05CB::main()); +} \ No newline at end of file diff --git a/MW3/PC/SP/1493.gsc b/MW3/PC/SP/1493.gsc new file mode 100644 index 0000000..6ff9403 --- /dev/null +++ b/MW3/PC/SP/1493.gsc @@ -0,0 +1,24 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1493.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:20:41 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("body_chemwar_russian_assault_ee"); + lib_0144::func_1E57("alias_chemwar_russian_heads_masked",lib_05CB::main()); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("body_chemwar_russian_assault_ee"); + lib_0144::func_1E56(lib_05CB::main()); +} \ No newline at end of file diff --git a/MW3/PC/SP/1494.gsc b/MW3/PC/SP/1494.gsc new file mode 100644 index 0000000..7a9e328 --- /dev/null +++ b/MW3/PC/SP/1494.gsc @@ -0,0 +1,16 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1494.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:20:42 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + var_00[0] = "body_russian_naval_assault_c"; + return var_7B; +} \ No newline at end of file diff --git a/MW3/PC/SP/1495.gsc b/MW3/PC/SP/1495.gsc new file mode 100644 index 0000000..2ea6567 --- /dev/null +++ b/MW3/PC/SP/1495.gsc @@ -0,0 +1,16 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1495.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:20:42 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + var_00[0] = "head_russian_naval_a"; + return var_7B; +} \ No newline at end of file diff --git a/MW3/PC/SP/1496.gsc b/MW3/PC/SP/1496.gsc new file mode 100644 index 0000000..93f9394 --- /dev/null +++ b/MW3/PC/SP/1496.gsc @@ -0,0 +1,24 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1496.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:20:42 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_0144::func_1E55(lib_05D6::main()); + lib_0144::func_1E57("alias_russian_naval_heads",lib_05D7::main()); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + lib_0144::func_1E56(lib_05D6::main()); + lib_0144::func_1E56(lib_05D7::main()); +} \ No newline at end of file diff --git a/MW3/PC/SP/1497.gsc b/MW3/PC/SP/1497.gsc new file mode 100644 index 0000000..06d0e9c --- /dev/null +++ b/MW3/PC/SP/1497.gsc @@ -0,0 +1,16 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1497.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:20:43 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + var_00[0] = "head_chemwar_russian_d"; + return var_7B; +} \ No newline at end of file diff --git a/MW3/PC/SP/1498.gsc b/MW3/PC/SP/1498.gsc new file mode 100644 index 0000000..2ce517d --- /dev/null +++ b/MW3/PC/SP/1498.gsc @@ -0,0 +1,24 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1498.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:20:43 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("body_chemwar_russian_assault_d"); + lib_0144::func_1E57("alias_chemwar_russian_heads_so",lib_05D9::main()); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("body_chemwar_russian_assault_d"); + lib_0144::func_1E56(lib_05D9::main()); +} \ No newline at end of file diff --git a/MW3/PC/SP/1499.gsc b/MW3/PC/SP/1499.gsc new file mode 100644 index 0000000..8a822a5 --- /dev/null +++ b/MW3/PC/SP/1499.gsc @@ -0,0 +1,24 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1499.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:20:43 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("body_chemwar_russian_assault_dd"); + lib_0144::func_1E57("alias_chemwar_russian_heads_so",lib_05D9::main()); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("body_chemwar_russian_assault_dd"); + lib_0144::func_1E56(lib_05D9::main()); +} \ No newline at end of file diff --git a/MW3/PC/SP/1500.gsc b/MW3/PC/SP/1500.gsc new file mode 100644 index 0000000..779f5ba --- /dev/null +++ b/MW3/PC/SP/1500.gsc @@ -0,0 +1,16 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1500.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:20:44 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + var_00[0] = "head_russian_military_bb"; + return var_7B; +} \ No newline at end of file diff --git a/MW3/PC/SP/1544.gsc b/MW3/PC/SP/1544.gsc new file mode 100644 index 0000000..aa2e6d8 --- /dev/null +++ b/MW3/PC/SP/1544.gsc @@ -0,0 +1,24 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1544.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:20:44 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("body_russian_military_assault_b_woodland"); + lib_0144::func_1E57("alias_so_hardened_ar_heads",lib_05DC::main()); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("body_russian_military_assault_b_woodland"); + lib_0144::func_1E56(lib_05DC::main()); +} \ No newline at end of file diff --git a/MW3/PC/SP/1545.gsc b/MW3/PC/SP/1545.gsc new file mode 100644 index 0000000..c19c015 --- /dev/null +++ b/MW3/PC/SP/1545.gsc @@ -0,0 +1,24 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1545.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:20:44 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("body_gign_paris_smg"); + lib_0144::func_1E57("alias_gign_heads",lib_053F::main()); + self.voice = "french"; +} + +//Function Number: 2 +precache() +{ + precachemodel("body_gign_paris_smg"); + lib_0144::func_1E56(lib_053F::main()); +} \ No newline at end of file diff --git a/MW3/PC/SP/1546.gsc b/MW3/PC/SP/1546.gsc new file mode 100644 index 0000000..12a6695 --- /dev/null +++ b/MW3/PC/SP/1546.gsc @@ -0,0 +1,24 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1546.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:20:45 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("body_gign_paris_assault"); + lib_0144::func_1E57("alias_gign_heads",lib_053F::main()); + self.voice = "french"; +} + +//Function Number: 2 +precache() +{ + precachemodel("body_gign_paris_assault"); + lib_0144::func_1E56(lib_053F::main()); +} \ No newline at end of file diff --git a/MW3/PC/SP/1547.gsc b/MW3/PC/SP/1547.gsc new file mode 100644 index 0000000..38133e9 --- /dev/null +++ b/MW3/PC/SP/1547.gsc @@ -0,0 +1,24 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1547.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:20:45 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("body_delta_elite_assault_aa"); + lib_0144::func_1E57("alias_delta_elite_heads",lib_019D::main()); + self.voice = "delta"; +} + +//Function Number: 2 +precache() +{ + precachemodel("body_delta_elite_assault_aa"); + lib_0144::func_1E56(lib_019D::main()); +} \ No newline at end of file diff --git a/MW3/PC/SP/1548.gsc b/MW3/PC/SP/1548.gsc new file mode 100644 index 0000000..59cc49c --- /dev/null +++ b/MW3/PC/SP/1548.gsc @@ -0,0 +1,24 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1548.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:20:46 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("body_delta_elite_assault_ab"); + lib_0144::func_1E57("alias_delta_elite_heads_longsleeves",lib_01C2::main()); + self.voice = "delta"; +} + +//Function Number: 2 +precache() +{ + precachemodel("body_delta_elite_assault_ab"); + lib_0144::func_1E56(lib_01C2::main()); +} \ No newline at end of file diff --git a/MW3/PC/SP/1549.gsc b/MW3/PC/SP/1549.gsc new file mode 100644 index 0000000..7ad55b4 --- /dev/null +++ b/MW3/PC/SP/1549.gsc @@ -0,0 +1,24 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1549.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:20:46 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("body_delta_elite_assault_ba"); + lib_0144::func_1E57("alias_delta_elite_heads",lib_019D::main()); + self.voice = "delta"; +} + +//Function Number: 2 +precache() +{ + precachemodel("body_delta_elite_assault_ba"); + lib_0144::func_1E56(lib_019D::main()); +} \ No newline at end of file diff --git a/MW3/PC/SP/1550.gsc b/MW3/PC/SP/1550.gsc new file mode 100644 index 0000000..b00a636 --- /dev/null +++ b/MW3/PC/SP/1550.gsc @@ -0,0 +1,22 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1550.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:20:46 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("german_sheperd_dog"); + self.voice = "arab"; +} + +//Function Number: 2 +precache() +{ + precachemodel("german_sheperd_dog"); +} \ No newline at end of file diff --git a/MW3/PC/SP/1558.gsc b/MW3/PC/SP/1558.gsc new file mode 100644 index 0000000..04425cd --- /dev/null +++ b/MW3/PC/SP/1558.gsc @@ -0,0 +1,1973 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1558.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 82 + * Decompile Time: 90 ms + * Timestamp: 10/27/2023 2:21:00 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + func_3C66(); + func_3C6A(); + func_3C6C(); + if(common_scripts\utility::issp_towerdefense()) + { + func_3C6B(); + func_3C6D(); + } +} + +//Function Number: 2 +func_3C66() +{ + precachestring(&"SENTRY_MOVE"); + precachestring(&"SENTRY_PICKUP"); + precachestring(&"SENTRY_PLACE"); + precachestring(&"SENTRY_CANNOT_PLACE"); + precachemodel("tag_laser"); + level.placed_sentry = []; + level.var_3C68 = []; + level.var_3C69 = []; + level.var_3C69["easy"] = []; + level.var_3C69["easy"]["convergencePitchTime"] = 2.5; + level.var_3C69["easy"]["convergenceYawTime"] = 2.5; + level.var_3C69["easy"]["suppressionTime"] = 3; + level.var_3C69["easy"]["aiSpread"] = 2; + level.var_3C69["easy"]["playerSpread"] = 0.5; + level._effect["sentry_turret_overheat_smoke_sp"] = loadfx("smoke/sentry_turret_overheat_smoke_sp"); + level._effect["sentry_turret_explode"] = loadfx("explosions/sentry_gun_explosion"); + level._effect["sentry_turret_explode_smoke"] = loadfx("smoke/car_damage_blacksmoke"); +} + +//Function Number: 3 +func_3C6A() +{ + precachemodel("sentry_minigun"); + precachemodel("sentry_minigun_obj"); + precachemodel("sentry_minigun_obj_red"); + precachemodel("sentry_minigun_folded_obj"); + precachemodel("sentry_minigun_destroyed"); + if(common_scripts\utility::issp() && !is_specialop()) + { + precacheturret("sentry_minigun"); + precacheturret("sentry_minigun_enemy"); + } + else if(is_specialop()) + { + precacheturret("sentry_minigun_so"); + } + else + { + precacheturret("sentry_minigun_mp"); + } + + level.var_3C68["sentry_minigun"] = spawnstruct(); + func_3C7D("sentry_minigun"); + func_3C6E("sentry_minigun"); + common_scripts\utility::array_thread(getentarray("script_model_pickup_sentry_minigun","classname"),::func_3C7F,"sentry_minigun"); +} + +//Function Number: 4 +func_3C6B() +{ + precachemodel("sentry_minigun_weak"); + precachemodel("sentry_minigun_weak_destroyed"); + precachemodel("sentry_minigun_weak_obj"); + precachemodel("sentry_minigun_weak_obj_red"); + precachemodel("sentry_minigun_weak_folded_obj"); + precacheturret("sentry_minigun_weak"); + level.var_3C68["sentry_minigun_weak"] = spawnstruct(); + func_3C7E("sentry_minigun_weak"); + func_3C6E("sentry_minigun_weak"); + common_scripts\utility::array_thread(getentarray("script_model_pickup_sentry_minigun_weak","classname"),::func_3C7F,"sentry_minigun_weak"); +} + +//Function Number: 5 +func_3C6C() +{ + precachemodel("sentry_grenade_launcher_upgrade"); + precachemodel("sentry_grenade_launcher_upgrade_destroyed"); + precachemodel("sentry_grenade_launcher_upgrade_obj"); + precachemodel("sentry_grenade_launcher_upgrade_obj_red"); + precachemodel("sentry_grenade_launcher_upgrade_folded_obj"); + if(common_scripts\utility::issp() && !is_specialop()) + { + precacheturret("sentry_gun"); + } + else if(is_specialop()) + { + precacheturret("sentry_gun_so"); + } + else + { + precacheturret("sentry_gun_mp"); + } + + level.var_3C68["sentry_gun"] = spawnstruct(); + func_3C6F("sentry_gun"); + func_3C6E("sentry_gun"); + common_scripts\utility::array_thread(getentarray("script_model_pickup_sentry_gun","classname"),::func_3C7F,"sentry_gun"); +} + +//Function Number: 6 +func_3C6D() +{ + precachemodel("sentry_grenade_launcher"); + precachemodel("sentry_grenade_launcher_destroyed"); + precachemodel("sentry_grenade_launcher_obj"); + precachemodel("sentry_grenade_launcher_obj_red"); + precachemodel("sentry_grenade_launcher_folded_obj"); + precacheturret("sentry_gun_weak"); + level.var_3C68["sentry_gun_weak"] = spawnstruct(); + func_3C7C("sentry_gun_weak"); + func_3C6E("sentry_gun_weak"); + common_scripts\utility::array_thread(getentarray("script_model_pickup_sentry_gun_weak","classname"),::func_3C7F,"sentry_gun_weak"); +} + +//Function Number: 7 +func_3C6E(param_00) +{ + var_01 = getentarray(param_00,"targetname"); + foreach(var_03 in var_01) + { + var_03 func_3C80(undefined,param_00); + } +} + +//Function Number: 8 +func_3C6F(param_00) +{ + level.var_3C68[param_00].ammo = 100; + level.var_3C68[param_00].var_3C70 = 1; + level.var_3C68[param_00].var_3C71 = 1; + level.var_3C68[param_00].var_3C72 = 2; + level.var_3C68[param_00].var_3C73 = 1; + level.var_3C68[param_00].var_3C74 = 1.5; + level.var_3C68[param_00].var_3C75 = 1; + level.var_3C68[param_00].model = "sentry_grenade_launcher_upgrade"; + level.var_3C68[param_00].var_3C76 = "sentry_grenade_launcher_upgrade_destroyed"; + level.var_3C68[param_00].var_3C77 = "sentry_grenade_launcher_upgrade_folded"; + level.var_3C68[param_00].var_3C78 = "sentry_grenade_launcher_upgrade_folded_obj"; + level.var_3C68[param_00].var_3C79 = "sentry_grenade_launcher_upgrade_obj"; + level.var_3C68[param_00].var_3C7A = "sentry_grenade_launcher_upgrade_obj_red"; + level.var_3C68[param_00].health = 350; + if(common_scripts\utility::issp() && !is_specialop()) + { + level.var_3C68[param_00].var_3C7B = 15; + level.var_3C68[param_00].weaponinfo = "sentry_gun"; + level.var_3C68[param_00].targetname = "sentry_gun"; + return; + } + + if(is_specialop()) + { + level.var_3C68[param_00].ammo = 50; + level.var_3C68[param_00].var_3C7B = 8; + level.var_3C68[param_00].weaponinfo = "sentry_gun_so"; + level.var_3C68[param_00].targetname = "sentry_gun_so"; + level.var_3C68[param_00].health = 1200; + return; + } + + level.var_3C68[param_00].var_3C7B = 5; + level.var_3C68[param_00].weaponinfo = "sentry_gun_mp"; + level.var_3C68[param_00].targetname = "sentry_gun_mp"; +} + +//Function Number: 9 +func_3C7C(param_00) +{ + level.var_3C68[param_00].var_3C70 = 0; + level.var_3C68[param_00].var_3C71 = 1; + level.var_3C68[param_00].var_3C72 = 2; + level.var_3C68[param_00].var_3C73 = 1; + level.var_3C68[param_00].var_3C74 = 1.5; + level.var_3C68[param_00].var_3C75 = 1; + level.var_3C68[param_00].model = "sentry_grenade_launcher"; + level.var_3C68[param_00].var_3C76 = "sentry_grenade_launcher_destroyed"; + level.var_3C68[param_00].var_3C77 = "sentry_grenade_launcher_folded"; + level.var_3C68[param_00].var_3C78 = "sentry_grenade_launcher_folded_obj"; + level.var_3C68[param_00].var_3C79 = "sentry_grenade_launcher_obj"; + level.var_3C68[param_00].var_3C7A = "sentry_grenade_launcher_obj_red"; + level.var_3C68[param_00].health = int(175); + if(common_scripts\utility::issp()) + { + level.var_3C68[param_00].var_3C7B = 15; + level.var_3C68[param_00].weaponinfo = "sentry_gun_weak"; + level.var_3C68[param_00].targetname = "sentry_gun_weak"; + return; + } + + level.var_3C68[param_00].var_3C7B = 5; + level.var_3C68[param_00].weaponinfo = "sentry_gun_mp"; + level.var_3C68[param_00].targetname = "sentry_gun_mp"; +} + +//Function Number: 10 +func_3C7D(param_00) +{ + level.var_3C68[param_00].ammo = 1000; + level.var_3C68[param_00].var_3C70 = 1; + level.var_3C68[param_00].var_3C71 = 20; + level.var_3C68[param_00].var_3C72 = 60; + level.var_3C68[param_00].var_3C73 = 0.5; + level.var_3C68[param_00].var_3C74 = 1.3; + level.var_3C68[param_00].var_3C75 = 0; + level.var_3C68[param_00].model = "sentry_minigun"; + level.var_3C68[param_00].var_3C76 = "sentry_minigun_destroyed"; + level.var_3C68[param_00].var_3C77 = "sentry_minigun_folded"; + level.var_3C68[param_00].var_3C78 = "sentry_minigun_folded_obj"; + level.var_3C68[param_00].var_3C79 = "sentry_minigun_obj"; + level.var_3C68[param_00].var_3C7A = "sentry_minigun_obj_red"; + level.var_3C68[param_00].health = 190; + if(common_scripts\utility::issp() && !is_specialop()) + { + level.var_3C68[param_00].var_3C7B = 15; + level.var_3C68[param_00].anim_loop = %minigun_spin_loop; + level.var_3C68[param_00].weaponinfo = "sentry_minigun"; + level.var_3C68[param_00].targetname = "sentry_minigun"; + return; + } + + if(is_specialop()) + { + level.var_3C68[param_00].ammo = 800; + level.var_3C68[param_00].var_3C7B = 8; + level.var_3C68[param_00].anim_loop = %minigun_spin_loop; + level.var_3C68[param_00].weaponinfo = "sentry_minigun_so"; + level.var_3C68[param_00].targetname = "sentry_minigun_so"; + level.var_3C68[param_00].health = 800; + return; + } + + level.var_3C68[param_00].var_3C7B = 5; + level.var_3C68[param_00].weaponinfo = "sentry_minigun_mp"; + level.var_3C68[param_00].targetname = "sentry_minigun_mp"; +} + +//Function Number: 11 +func_3C7E(param_00) +{ + level.var_3C68[param_00].ammo = 800; + level.var_3C68[param_00].var_3C70 = 0; + level.var_3C68[param_00].var_3C71 = 10; + level.var_3C68[param_00].var_3C72 = 30; + level.var_3C68[param_00].var_3C73 = 1; + level.var_3C68[param_00].var_3C74 = 2.6; + level.var_3C68[param_00].var_3C75 = 0; + level.var_3C68[param_00].model = "sentry_minigun_weak"; + level.var_3C68[param_00].var_3C76 = "sentry_minigun_weak_destroyed"; + level.var_3C68[param_00].var_3C77 = "sentry_minigun_weak_folded"; + level.var_3C68[param_00].var_3C78 = "sentry_minigun_weak_folded_obj"; + level.var_3C68[param_00].var_3C79 = "sentry_minigun_weak_obj"; + level.var_3C68[param_00].var_3C7A = "sentry_minigun_weak_obj_red"; + level.var_3C68[param_00].health = int(95); + if(common_scripts\utility::issp()) + { + level.var_3C68[param_00].var_3C7B = 15; + level.var_3C68[param_00].anim_loop = %minigun_spin_loop; + level.var_3C68[param_00].weaponinfo = "sentry_minigun_weak"; + level.var_3C68[param_00].targetname = "sentry_minigun_weak"; + return; + } + + level.var_3C68[param_00].var_3C7B = 5; + level.var_3C68[param_00].weaponinfo = "sentry_minigun_mp"; + level.var_3C68[param_00].targetname = "sentry_minigun_mp"; +} + +//Function Number: 12 +func_3C7F(param_00) +{ + self setmodel(self.model); + self.sentrytype = param_00; + self setcursorhint("HINT_NOICON"); + self sethintstring(&"SENTRY_PICKUP"); + self makeusable(); + thread func_3CBA(param_00); +} + +//Function Number: 13 +givesentry(param_00) +{ + self.last_sentry = param_00; + thread func_3CAE(param_00); +} + +//Function Number: 14 +func_3C80(param_00,param_01,param_02) +{ + if(common_scripts\utility::issp()) + { + level.var_3C81 = 1; + level.var_3C82 = 1; + if(!isdefined(level.var_3C83)) + { + level.var_3C83 = 5; + } + + if(!isdefined(level.var_3C84)) + { + level.var_3C84 = 2; + } + } + + if(!isdefined(param_00)) + { + if(!isdefined(self.script_team)) + { + self.script_team = "axis"; + } + + param_00 = self.script_team; + } + + self setturretmodechangewait(1); + func_3CBF(); + self maketurretinoperable(); + func_3CC1(); + self setcandamage(1); + self setdefaultdroppitch(-89); + if(common_scripts\utility::issp() || level.teambased || is_survival()) + { + self setturretteam(param_00); + } + + self.sentrytype = param_01; + self.issentrygun = 1; + self.var_3C85 = 350; + self.var_3C86 = 400; + self.var_3C87 = 60; + self.var_3C88 = level.var_3C68[self.sentrytype].ammo; + if(common_scripts\utility::issp()) + { + if(self.weaponinfo == "sentry_gun") + { + self.bullet_armor = 2000; + } + else + { + self.bullet_armor = 1200; + } + } + else if(self.weaponinfo == "sentry_gun") + { + self.bullet_armor = 300; + } + else + { + self.bullet_armor = 300; + } + + if(common_scripts\utility::issp()) + { + self [[ level.makeentitysentient_func ]](param_00); + common_scripts\utility::self_func("seanimtree",#animtree); + if(isdefined(self.script_team) && self.script_team == "axis") + { + thread func_3CBD(); + } + } + + self.health = level.var_3C68[param_01].health; + func_3C90(); + thread func_3CAD(); + thread func_3C96(); + thread func_3C89(); + if(!common_scripts\utility::issp()) + { + thread func_3CD4(); + thread func_3CD3(); + } + + thread func_3CBB(); + if(getdvarint("survival_chaos") != 1) + { + thread func_3C8F(); + } + + if(!isdefined(param_02)) + { + if(common_scripts\utility::issp()) + { + param_02 = level.player; + } + } + + func_3CC8(param_02); + thread func_3CCA(param_02); + if(!isdefined(self.damage_functions)) + { + self.damage_functions = []; + } +} + +//Function Number: 15 +func_3C89() +{ + self endon("deleted"); + self waittill("death",var_00,var_01,var_02); + level notify("a_sentry_died"); + if(isdefined(var_00) && isdefined(var_00.team) && self.team != var_00.team && isdefined(level.stat_track_kill_func)) + { + var_00 [[ level.stat_track_kill_func ]](self,var_01,var_02); + } + + if(!common_scripts\utility::issp()) + { + removefromturretlist(); + thread func_3CC7(); + } + + thread func_3CA1(); + thread func_3CD7(); + self setmodel(level.var_3C68[self.sentrytype].var_3C76); + func_3CC3(); + if(common_scripts\utility::issp()) + { + self [[ level.freeentitysentient_func ]](); + } + + if(!common_scripts\utility::issp() && isdefined(var_00) && isplayer(var_00)) + { + if(isdefined(self.owner)) + { + self.owner thread [[ level.leaderdialogonplayer_func ]]("destroy_sentry","sentry_status"); + } + + var_00 thread [[ level.onxpevent ]]("kill"); + } + + self setsentrycarrier(undefined); + self.carrier = undefined; + self setcandamage(1); + self.ignoreme = 1; + self makeunusable(); + self setsentryowner(undefined); + self setturretminimapvisible(0); + self playsound("sentry_explode"); + playfxontag(common_scripts\utility::getfx("sentry_turret_explode"),self,"tag_aim"); + if(common_scripts\utility::issp() && !isdefined(self.var_3C8A) || !self.var_3C8A) + { + self setcontents(0); + } + + wait 1.5; + self playsound("sentry_explode_smoke"); + var_03 = level.var_3C68[self.sentrytype].var_3C7B * 1000; + var_04 = gettime(); + for(;;) + { + playfxontag(common_scripts\utility::getfx("sentry_turret_explode_smoke"),self,"tag_aim"); + wait 0.4; + if(gettime() - var_04 > var_03) + { + break; + } + } + + level.placed_sentry = common_scripts\utility::array_remove(level.placed_sentry,self); + if(!common_scripts\utility::issp() || getdvar("specialops") == "1") + { + thread func_3CCE(); + } +} + +//Function Number: 16 +func_3C8B(param_00) +{ + level endon("game_ended"); + self endon("sentry_placement_finished"); + self waittill("death"); + if(common_scripts\utility::issp()) + { + param_00 notify("death"); + return; + } + + if(!self.var_3C8C) + { + param_00 func_3CC7(); + param_00 notify("deleted"); + waittillframeend; + param_00 delete(); + return; + } + + if(!common_scripts\utility::issp()) + { + thread func_3C94(param_00); + } +} + +//Function Number: 17 +func_3C8D(param_00) +{ + level endon("game_ended"); + self endon("sentry_placement_finished"); + self waittill("disconnect"); + param_00 notify("death"); +} + +//Function Number: 18 +func_3C8E(param_00) +{ + level endon("game_ended"); + self endon("sentry_placement_finished"); + self waittill("sentry_placement_canceled"); + param_00 func_3CC7(); + func_3CB9(); + param_00 notify("death"); +} + +//Function Number: 19 +func_3C8F() +{ + level endon("game_ended"); + self endon("death"); + if(self.health <= 0) + { + return; + } + + self makeusable(); + for(;;) + { + self waittill("trigger",var_00); + if(isdefined(var_00.placingsentry)) + { + continue; + } + + if(!common_scripts\utility::issp()) + { + } + + break; + } + + var_00 thread func_3C8E(self); + var_00 thread func_3C8B(self); + var_00 thread func_3C8D(self); + var_00 thread func_3CB1(self); + if(!common_scripts\utility::issp() && !isalive(var_00)) + { + return; + } + + if(!common_scripts\utility::issp()) + { + func_3CC6(); + } + + func_3CC3(); + var_00.placingsentry = self; + self setsentrycarrier(var_00); + self.carrier = var_00; + self.ignoreme = 1; + self setcandamage(0); + self makeunusable(); + var_00 common_scripts\utility::_disableweapon(); + func_3CC0(); + func_3C92(); + var_00 thread func_3C93(self); + var_00 thread func_3CB5(self); +} + +//Function Number: 20 +func_3C90() +{ + if(!common_scripts\utility::issp()) + { + return; + } + + self.var_3C91 = "" + gettime(); + [[ level.badplace_cylinder_func ]](self.var_3C91,0,self.origin,32,128,self.team,"neutral"); +} + +//Function Number: 21 +func_3C92() +{ + if(!common_scripts\utility::issp()) + { + return; + } + + [[ level.badplace_delete_func ]](self.var_3C91); + self.var_3C91 = undefined; +} + +//Function Number: 22 +func_3C93(param_00) +{ + level endon("game_ended"); + param_00 endon("death"); + param_00 endon("deleted"); + self endon("death"); + self endon("disconnect"); + param_00 notify("sentry_move_started",self); + self.carrying_pickedup_sentry = 1; + for(;;) + { + func_3CBE(0); + func_3CBE(1); + func_3CB6(param_00); + if(self.var_3C8C) + { + break; + } + } + + param_00 notify("sentry_move_finished",self); + self.carrying_pickedup_sentry = 0; + func_3C94(param_00); +} + +//Function Number: 23 +func_3C94(param_00) +{ + if(!common_scripts\utility::issp()) + { + self endon("death"); + level endon("end_game"); + } + + self.placingsentry = undefined; + param_00 setsentrycarrier(undefined); + param_00.carrier = undefined; + param_00 setcandamage(1); + param_00.ignoreme = 0; + common_scripts\utility::_enableweapon(); + param_00 func_3CBF(); + param_00 setmodel(level.var_3C68[param_00.sentrytype].model); + param_00 func_3C90(); + param_00 setcontents(param_00.var_3C95); + param_00 func_3CC8(self); + self notify("sentry_placement_finished",param_00); + param_00 notify("sentry_carried"); + param_00.overheated = 0; + func_3CB9(); + if(!common_scripts\utility::issp()) + { + param_00 func_3CC5(); + } + + param_00 func_3CC1(); + thread common_scripts\utility::play_sound_in_space("sentry_gun_plant",param_00.origin); + func_3CBE(0); + if(getdvarint("survival_chaos") != 1) + { + param_00 thread func_3C8F(); + } +} + +//Function Number: 24 +func_3C96() +{ + level endon("game_ended"); + self endon("death"); + thread func_3C97(); + for(;;) + { + common_scripts\utility::waittill_either("turretstatechange","cooled"); + if(self isfiringturret()) + { + thread func_3C9D(); + thread func_3CD6(); + continue; + } + + thread func_3CA1(); + thread func_3CD7(); + } +} + +//Function Number: 25 +func_3C97() +{ + self endon("death"); + if(self.sentrytype != "sentry_minigun") + { + return; + } + + if(!isdefined(level.var_3C81)) + { + return; + } + + self.overheat = 0; + self.overheated = 0; + if(getdvarint("sentry_overheat_debug") == 1) + { + thread func_3C9A(); + } + + for(;;) + { + if(self.overheat >= level.var_3C83 * 10) + { + thread func_3C9B(); + common_scripts\utility::waittill_either("cooled","sentry_carried"); + } + + if(self isfiringturret()) + { + self.overheat = self.overheat + 1; + } + else if(self.overheat > 0) + { + self.overheat = self.overheat - 1; + } + + wait 0.1 / level.var_3C81; + } +} + +//Function Number: 26 +func_3C99() +{ + self endon("death"); + while(self.overheated) + { + if(self.overheat > 0) + { + self.overheat = self.overheat - 1; + } + + wait 0.1 / level.var_3C81; + } +} + +//Function Number: 27 +func_3C9A() +{ + self endon("death"); + for(;;) + { + var_00 = self.overheat / level.var_3C83 * 10; + var_01 = "[ "; + var_02 = " ]"; + if(self.overheated) + { + var_01 = "{{{ "; + var_02 = " }}}"; + } + + wait 0.2; + } +} + +//Function Number: 28 +func_3C9B() +{ + self endon("death"); + self notify("overheated"); + self.overheated = 1; + func_3CA1(); + thread func_3C9C(); +} + +//Function Number: 29 +func_3C9C() +{ + self endon("death"); + self endon("sentry_carried"); + thread func_3C99(); + wait level.var_3C84; + self notify("cooled"); + self.overheat = 0; + self.overheated = 0; +} + +//Function Number: 30 +func_3C9D() +{ + self endon("death"); + level endon("game_ended"); + if(level.var_3C68[self.sentrytype].var_3C75) + { + self waittill("turret_on_target"); + } + + if(isdefined(self.overheated) && self.overheated) + { + return; + } + + thread func_3CA5(); + self endon("stop_shooting"); + self notify("shooting"); + var_00 = weaponfiretime(self.weaponinfo); + for(;;) + { + func_3CA3(); + var_01 = randomintrange(level.var_3C68[self.sentrytype].var_3C71,level.var_3C68[self.sentrytype].var_3C72); + for(var_02 = 0;var_02 < var_01;var_02++) + { + if(func_3CA0()) + { + self shootturret(); + } + + self notify("bullet_fired"); + wait var_00; + } + + wait randomfloatrange(level.var_3C68[self.sentrytype].var_3C73,level.var_3C68[self.sentrytype].var_3C74); + } +} + +//Function Number: 31 +func_3C9E(param_00,param_01) +{ + self notify("allowFireThread"); + self endon("allowFireThread"); + self endon("death"); + self.var_3C9F = param_00; + if(isdefined(param_01) && !param_00) + { + wait param_01; + if(isdefined(self)) + { + thread func_3C9E(1); + } + } +} + +//Function Number: 32 +func_3CA0() +{ + if(!isdefined(self.var_3C9F)) + { + return 1; + } + + return self.var_3C9F; +} + +//Function Number: 33 +func_3CA1() +{ + thread func_3CA9(); + self notify("stop_shooting"); + thread func_3CA2(); +} + +//Function Number: 34 +func_3CA2() +{ + self endon("shooting"); + self endon("deleted"); + wait randomfloatrange(0,1); + var_00 = 6000; + var_01 = gettime(); + if(isdefined(self)) + { + self playsound("sentry_steam"); + } + + while(isdefined(self)) + { + playfxontag(common_scripts\utility::getfx("sentry_turret_overheat_smoke_sp"),self,"tag_flash"); + wait 0.3; + if(gettime() - var_01 > var_00) + { + break; + } + } +} + +//Function Number: 35 +func_3CA3() +{ + if(isdefined(self.var_3CA4) && self.var_3CA4 == 0) + { + self waittill("allow_fire"); + } +} + +//Function Number: 36 +func_3CA5() +{ + self notify("anim_state_change"); + self endon("anim_state_change"); + self endon("stop_shooting"); + self endon("deleted"); + level endon("game_ended"); + self endon("death"); + if(!isdefined(level.var_3C68[self.sentrytype].anim_loop)) + { + return; + } + + self.var_3CA4 = 0; + if(!isdefined(self.momentum)) + { + self.momentum = 0; + } + + thread func_3CAA(); + for(;;) + { + if(self.momentum >= 1) + { + break; + } + + self.momentum = self.momentum + 0.1; + self.momentum = clamp(self.momentum,0,1); + if(common_scripts\utility::issp()) + { + common_scripts\utility::self_func("setanim",level.var_3C68[self.sentrytype].anim_loop,1,0.2,self.momentum); + } + + wait 0.2; + } + + self.var_3CA4 = 1; + self notify("allow_fire"); +} + +//Function Number: 37 +func_3CA6() +{ + self notify("deleted"); + wait 0.05; + self notify("death"); + if(isdefined(self.var_3CA7)) + { + self.var_3CA7 delete(); + } + + if(isdefined(self.var_3CA8)) + { + self.var_3CA8 delete(); + } + + self delete(); +} + +//Function Number: 38 +func_3CA9() +{ + self notify("anim_state_change"); + self endon("anim_state_change"); + if(!isdefined(level.var_3C68[self.sentrytype].anim_loop)) + { + return; + } + + thread func_3CAC(); + self.var_3CA4 = 0; + for(;;) + { + if(!isdefined(self.momentum)) + { + break; + } + + if(self.momentum <= 0) + { + break; + } + + self.momentum = self.momentum - 0.1; + self.momentum = clamp(self.momentum,0,1); + if(common_scripts\utility::issp()) + { + common_scripts\utility::self_func("setanim",level.var_3C68[self.sentrytype].anim_loop,1,0.2,self.momentum); + } + + wait 0.2; + } +} + +//Function Number: 39 +func_3CAA() +{ + self notify("sound_state_change"); + self endon("sound_state_change"); + self endon("deleted"); + if(self.momentum < 0.25) + { + self playsound("sentry_minigun_spinup1"); + wait 0.6; + self playsound("sentry_minigun_spinup2"); + wait 0.5; + self playsound("sentry_minigun_spinup3"); + wait 0.5; + self playsound("sentry_minigun_spinup4"); + wait 0.5; + } + else if(self.momentum < 0.5) + { + self playsound("sentry_minigun_spinup2"); + wait 0.5; + self playsound("sentry_minigun_spinup3"); + wait 0.5; + self playsound("sentry_minigun_spinup4"); + wait 0.5; + } + else if(self.momentum < 0.75) + { + self playsound("sentry_minigun_spinup3"); + wait 0.5; + self playsound("sentry_minigun_spinup4"); + wait 0.5; + } + else if(self.momentum < 1) + { + self playsound("sentry_minigun_spinup4"); + wait 0.5; + } + + thread func_3CAB(); +} + +//Function Number: 40 +func_3CAB() +{ + self endon("death"); + self notify("sound_state_change"); + self endon("sound_state_change"); + for(;;) + { + self playsound("sentry_minigun_spin"); + wait 2.5; + } +} + +//Function Number: 41 +func_3CAC() +{ + self notify("sound_state_change"); + self endon("sound_state_change"); + self endon("deleted"); + if(!isdefined(self.momentum)) + { + return; + } + + if(self.momentum > 0.75) + { + self stopsounds(); + self playsound("sentry_minigun_spindown4"); + wait 0.5; + self playsound("sentry_minigun_spindown3"); + wait 0.5; + self playsound("sentry_minigun_spindown2"); + wait 0.5; + self playsound("sentry_minigun_spindown1"); + wait 0.65; + return; + } + + if(self.momentum > 0.5) + { + self playsound("sentry_minigun_spindown3"); + wait 0.5; + self playsound("sentry_minigun_spindown2"); + wait 0.5; + self playsound("sentry_minigun_spindown1"); + wait 0.65; + return; + } + + if(self.momentum > 0.25) + { + self playsound("sentry_minigun_spindown2"); + wait 0.5; + self playsound("sentry_minigun_spindown1"); + wait 0.65; + return; + } + + self playsound("sentry_minigun_spindown1"); + wait 0.65; +} + +//Function Number: 42 +func_3CAD() +{ + self endon("death"); + for(;;) + { + wait randomfloatrange(3.5,4.5); + thread common_scripts\utility::play_sound_in_space("sentry_gun_beep",self.origin + (0,0,40)); + } +} + +//Function Number: 43 +func_3CAE(param_00,param_01,param_02,param_03) +{ + level endon("game_ended"); + if(isdefined(self.placingsentry)) + { + return undefined; + } + + common_scripts\utility::_disableweapon(); + self notify("placingSentry"); + self.sentry_placement_failed = undefined; + if(!isdefined(param_01)) + { + param_01 = self.origin; + } + + if(!isdefined(param_02)) + { + param_02 = self.angles; + } + + if(!isdefined(param_03)) + { + param_03 = 0; + } + + var_04 = spawnturret("misc_turret",param_01,level.var_3C68[param_00].weaponinfo); + var_04 setmodel(level.var_3C68[param_00].var_3C79); + var_04.weaponinfo = level.var_3C68[param_00].weaponinfo; + var_04.targetname = level.var_3C68[param_00].targetname; + var_04.weaponname = level.var_3C68[param_00].weaponinfo; + var_04.angles = param_02; + var_04.team = self.team; + var_04.attacker = self; + var_04.sentrytype = param_00; + var_04 maketurretinoperable(); + var_04 func_3CC3(); + var_04 setcandamage(0); + var_04 func_3CC8(self); + var_04 setdefaultdroppitch(-89); + self.placingsentry = var_04; + var_04 setsentrycarrier(self); + var_04.carrier = self; + var_04 setcandamage(0); + var_04.ignoreme = 1; + if(!common_scripts\utility::issp()) + { + var_04 addtoturretlist(); + } + + if(!param_03) + { + thread func_3CB0(var_04); + thread func_3CB1(var_04); + } + + thread func_3CB3(var_04,param_03); + if(!param_03) + { + thread func_3CB5(var_04); + if(!common_scripts\utility::issp()) + { + common_scripts\utility::waittill_any("sentry_placement_finished","sentry_placement_canceled","death"); + } + else + { + common_scripts\utility::waittill_any("sentry_placement_finished","sentry_placement_canceled"); + } + } + + func_3CB9(); + common_scripts\utility::_enableweapon(); + self.placingsentry = undefined; + self setcandamage(1); + var_04 setsentrycarrier(undefined); + var_04.carrier = undefined; + var_04.ignoreme = 0; + if(is_survival()) + { + waittillframeend; + if(isdefined(self.sentry_placement_failed) && self.sentry_placement_failed) + { + return undefined; + } + } + + level.placed_sentry[level.placed_sentry.size] = var_04; + self notify("new_sentry",var_04); + return var_04; +} + +//Function Number: 44 +func_3CB0(param_00) +{ + self endon("sentry_placement_finished"); + if(!common_scripts\utility::issp()) + { + common_scripts\utility::waittill_any("sentry_placement_canceled","death","disconnect"); + } + else + { + common_scripts\utility::waittill_any("sentry_placement_canceled"); + } + + if(is_survival()) + { + self.sentry_placement_failed = 1; + } + + waittillframeend; + param_00 delete(); +} + +//Function Number: 45 +func_3CB1(param_00) +{ + self endon("sentry_placement_finished"); + if(common_scripts\utility::issp()) + { + return; + } + + level waittill("game_ended"); + if(!isdefined(param_00)) + { + return; + } + + if(!self.var_3C8C) + { + param_00 notify("deleted"); + waittillframeend; + param_00 delete(); + return; + } + + thread func_3C94(param_00); +} + +//Function Number: 46 +func_3CB2() +{ + level endon("game_ended"); + self endon("disconnect"); + self endon("restock_reset"); + self notifyonplayercommand("cancel sentry","+actionslot 4"); + common_scripts\utility::waittill_any("death","cancel sentry"); + self notify("sentry_placement_canceled"); +} + +//Function Number: 47 +func_3CB3(param_00,param_01) +{ + level endon("game_ended"); + self endon("sentry_placement_canceled"); + if(!isdefined(param_01)) + { + param_01 = 0; + } + + if(!common_scripts\utility::issp()) + { + self endon("disconnect"); + param_00 thread func_3CD0(); + thread func_3CB2(); + } + + if(!param_01) + { + param_00 makeunusable(); + while(self usebuttonpressed()) + { + wait 0.05; + } + + for(;;) + { + func_3CBE(0); + func_3CBE(1); + func_3CB6(param_00); + if(self.var_3C8C) + { + break; + } + } + } + + if(!common_scripts\utility::issp()) + { + self notify("restock_reset"); + } + + if(!common_scripts\utility::issp()) + { + param_00.lifeid = self.lifeid; + func_3CC4(param_00); + } + + thread common_scripts\utility::play_sound_in_space("sentry_gun_plant",param_00.origin); + param_00 setmodel(level.var_3C68[param_00.sentrytype].model); + param_00 func_3C80(self.team,param_00.sentrytype,self); + self notify("sentry_placement_finished",param_00); + if(!param_01) + { + waittillframeend; + } + + if(isdefined(level.var_3CB4) && level.var_3CB4) + { + param_00 thread func_3CCC(); + } + + if(!common_scripts\utility::issp()) + { + param_00 thread func_3CCB(); + } +} + +//Function Number: 48 +func_3CB5(param_00) +{ + level endon("game_ended"); + param_00 notify("sentry_placement_started"); + self endon("sentry_placement_canceled"); + self endon("sentry_placement_finished"); + param_00 endon("death"); + param_00 endon("deleted"); + if(!common_scripts\utility::issp()) + { + self endon("disconnect"); + self endon("death"); + } + + for(;;) + { + func_3CB6(param_00); + wait 0.05; + } +} + +//Function Number: 49 +func_3CB6(param_00) +{ + var_01 = self canplayerplacesentry(); + param_00.origin = var_01["origin"]; + param_00.angles = var_01["angles"]; + self.var_3C8C = self isonground() && var_01["result"]; + func_3CB7(self.var_3C8C); + if(self.var_3C8C) + { + param_00 setmodel(level.var_3C68[param_00.sentrytype].var_3C79); + return; + } + + param_00 setmodel(level.var_3C68[param_00.sentrytype].var_3C7A); +} + +//Function Number: 50 +func_3CB7(param_00) +{ + if(isdefined(self.var_3CB8) && self.var_3CB8 == param_00) + { + return; + } + + self.var_3CB8 = param_00; + if(getdvarint("survival_chaos") == 1) + { + if(self.var_3CB8) + { + self notify("sentry_notification",&"SENTRY_PLACE"); + return; + } + + self notify("sentry_notification",&"SENTRY_CANNOT_PLACE"); + return; + } + + if(self.var_3CB8) + { + self forceusehinton(&"SENTRY_PLACE"); + return; + } + + self forceusehinton(&"SENTRY_CANNOT_PLACE"); +} + +//Function Number: 51 +func_3CB9() +{ + if(!isdefined(self.var_3CB8)) + { + return; + } + + if(getdvarint("survival_chaos") == 1) + { + self notify("sentry_notification"); + } + else + { + self forceusehintoff(); + } + + self.var_3CB8 = undefined; +} + +//Function Number: 52 +func_3CBA(param_00) +{ + self.var_3CA7 = spawn("script_model",self.origin); + self.var_3CA7.angles = self.angles; + self.var_3CA7 setmodel(level.var_3C68[param_00].var_3C78); + for(;;) + { + self waittill("trigger",var_01); + if(!isdefined(var_01)) + { + continue; + } + + if(isdefined(var_01.placingsentry)) + { + continue; + } + + if(!common_scripts\utility::issp()) + { + if(var_01 != self.owner) + { + continue; + } + } + + break; + } + + thread common_scripts\utility::play_sound_in_space("sentry_pickup"); + self.var_3CA7 delete(); + self delete(); + var_01 thread func_3CAE(param_00); +} + +//Function Number: 53 +func_3CBB() +{ + self.healthbuffer = 20000; + self.health = self.health + self.healthbuffer; + self.currenthealth = self.health; + var_00 = undefined; + var_01 = undefined; + var_02 = 0; + var_03 = 0; + var_04 = gettime(); + while(self.health > 0) + { + self waittill("damage",var_05,var_00,var_06,var_07,var_01,var_08,var_09); + if(isdefined(var_00) && !isplayer(var_00)) + { + var_02 = var_02 + var_05; + var_03 = var_03 + gettime() - var_04; + var_04 = gettime(); + if(var_03 < 3000 && var_02 > 300) + { + var_0A = 0; + foreach(var_0C in level.players) + { + if(distancesquared(var_0C.origin,self.origin) <= squared(500)) + { + var_0A = 1; + } + } + + if(!var_0A) + { + level notify("a_sentry_is_underattack"); + } + + var_02 = 0; + var_03 = 0; + } + + if(var_03 >= 3000) + { + var_02 = 0; + var_03 = 0; + } + } + + if(!common_scripts\utility::issp() && isdefined(var_00) && isplayer(var_00) && var_00 func_3CD2(self)) + { + self.health = self.currenthealth; + return; + } + + if(isdefined(level.stat_track_damage_func) && isdefined(var_00)) + { + var_00 [[ level.stat_track_damage_func ]](); + } + + if(isdefined(var_00) && isplayer(var_00)) + { + if(!common_scripts\utility::issp()) + { + var_00 [[ level.func["damagefeedback"] ]]("false"); + } + + thread func_3C9E(0,2); + } + + if(func_3CBC(var_01,var_00)) + { + self.health = self.currenthealth; + self.bullet_armor = self.bullet_armor - var_05; + continue; + } + + self.currenthealth = self.health; + if(self.health < self.healthbuffer) + { + break; + } + } + + if(!common_scripts\utility::issp() && var_00 func_3CD1(self)) + { + var_00 thread [[ level.onxpevent ]]("kill"); + } + + self notify("death",var_00,var_01); +} + +//Function Number: 54 +func_3CBC(param_00,param_01) +{ + if(isdefined(param_01) && isai(param_01) && isdefined(param_01.juggernaut) && param_01.juggernaut) + { + return 0; + } + + if(self.bullet_armor <= 0) + { + return 0; + } + + if(!isdefined(param_00)) + { + return 0; + } + + if(!issubstr(param_00,"BULLET")) + { + return 0; + } + + return 1; +} + +//Function Number: 55 +func_3CBD() +{ + var_00 = "easy"; + self setconvergencetime(level.var_3C69[var_00]["convergencePitchTime"],"pitch"); + self setconvergencetime(level.var_3C69[var_00]["convergenceYawTime"],"yaw"); + self setsuppressiontime(level.var_3C69[var_00]["suppressionTime"]); + self setaispread(level.var_3C69[var_00]["aiSpread"]); + self setplayerspread(level.var_3C69[var_00]["playerSpread"]); + self.maxrange = 1100; + self.bullet_armor = 0; +} + +//Function Number: 56 +func_3CBE(param_00) +{ + if(!common_scripts\utility::issp()) + { + self endon("death"); + self endon("disconnect"); + } + + if(param_00 == 1) + { + while(!self attackbuttonpressed() && !self usebuttonpressed()) + { + wait 0.05; + } + + return; + } + + if(param_00 == 0) + { + while(self attackbuttonpressed() || self usebuttonpressed()) + { + wait 0.05; + } + } +} + +//Function Number: 57 +func_3CBF() +{ + self maketurretsolid(); +} + +//Function Number: 58 +func_3CC0() +{ + self.var_3C95 = self setcontents(0); +} + +//Function Number: 59 +func_3CC1() +{ + if(!issentient(self) && isdefined(self.owner) && isdefined(self.owner.team)) + { + self [[ level.makeentitysentient_func ]](self.owner.team); + } + + self setmode("sentry"); + self.var_3CC2 = 1; +} + +//Function Number: 60 +func_3CC3() +{ + if(issentient(self)) + { + self [[ level.freeentitysentient_func ]](); + } + + self setmode("sentry_offline"); + self.var_3CC2 = 0; +} + +//Function Number: 61 +func_3CC4(param_00) +{ + if(isdefined(self.pers["team"])) + { + param_00.pers["team"] = self.pers["team"]; + } + + param_00 func_3CC5(); +} + +//Function Number: 62 +func_3CC5() +{ + var_00 = (0,0,65); + if(self.sentrytype == "sentry_gun") + { + var_00 = (0,0,75); + } + + self [[ level.func["setTeamHeadIcon"] ]](self.pers["team"],var_00); +} + +//Function Number: 63 +func_3CC6() +{ + self [[ level.func["setTeamHeadIcon"] ]]("none",(0,0,0)); +} + +//Function Number: 64 +func_3CC7() +{ + if(!isdefined(self.carrier)) + { + return; + } + + self.carrier notify("sentry_placement_canceled"); + self.carrier common_scripts\utility::_enableweapon(); + self.carrier.placingsentry = undefined; + self setsentrycarrier(undefined); + self.carrier = undefined; + self setcandamage(1); + self.ignoreme = 0; +} + +//Function Number: 65 +func_3CC8(param_00) +{ + if(isdefined(self.owner) && self.owner == param_00) + { + return; + } + + param_00.var_3CC9 = self; + self.owner = param_00; + self setsentryowner(param_00); + self setturretminimapvisible(1); +} + +//Function Number: 66 +func_3CCA(param_00) +{ + level endon("game_ended"); + self endon("death"); + param_00 common_scripts\utility::waittill_any("disconnect","joined_team","joined_spectators"); + self notify("death"); +} + +//Function Number: 67 +func_3CCB() +{ + level endon("game_ended"); + self endon("death"); + self endon("deleted"); + self notify("battery_count_started"); + self endon("battery_count_started"); + while(self.var_3C87 >= 0) + { + if(self.var_3CC2) + { + self.var_3C87 = self.var_3C87 - 1; + } + + wait 1; + } + + self notify("death"); +} + +//Function Number: 68 +func_3CCC() +{ + level endon("game_ended"); + self endon("death"); + self endon("deleted"); + self notify("ammo_count_started"); + self endon("ammo_count_started"); + thread func_3CCD(); + while(self.var_3C88 >= 0) + { + self waittill("bullet_fired"); + self.var_3C88 = self.var_3C88 - 1; + } + + thread func_3CA1(); + thread func_3CD7(); + wait 1; + func_3CC3(); + wait 5; + self notify("death"); +} + +//Function Number: 69 +func_3CCD() +{ + self endon("death"); + for(;;) + { + var_00 = level.var_3C68[self.sentrytype].ammo; + var_01 = self.var_3C88; + var_02 = var_01 / var_00; + var_03 = "Ammo: " + var_01 + "/" + var_00; + var_04 = level.var_3C68[self.sentrytype].health; + var_05 = self.health - self.healthbuffer; + var_06 = var_05 / var_04; + var_07 = "Health: " + var_05 + "/" + var_04; + wait 0.05; + } +} + +//Function Number: 70 +func_3CCE() +{ + if(isdefined(self.var_3CCF) && self.var_3CCF) + { + return; + } + + func_3CA6(); +} + +//Function Number: 71 +func_3CD0() +{ + self endon("death"); + self endon("deleted"); + self.owner common_scripts\utility::waittill_any("death","disconnect"); + if(isdefined(self.owner.placingsentry) && self.owner.placingsentry == self) + { + self.owner.placingsentry = undefined; + self setsentrycarrier(undefined); + self.carrier = undefined; + self setcandamage(1); + self.ignoreme = 0; + self notify("death"); + } +} + +//Function Number: 72 +func_3CD1(param_00) +{ + if(!isdefined(self)) + { + return 0; + } + + if(!isplayer(self)) + { + return 0; + } + + if(!isdefined(level.onxpevent)) + { + return 0; + } + + if(!isdefined(self.pers["team"])) + { + return 0; + } + + if(!isdefined(param_00.team)) + { + return 0; + } + + if(!level.teambased && self == param_00.owner) + { + return 0; + } + + if(level.teambased && self.pers["team"] == param_00.team) + { + return 0; + } + + return 1; +} + +//Function Number: 73 +func_3CD2(param_00) +{ + if(!isdefined(self)) + { + return 0; + } + + if(!isplayer(self)) + { + return 0; + } + + if(!level.teambased) + { + return 0; + } + + if(self == param_00.owner) + { + return 0; + } + + if(self.team != param_00.team) + { + return 0; + } + + return 1; +} + +//Function Number: 74 +func_3CD3() +{ + self endon("deleted"); + self endon("death"); + for(;;) + { + self waittill("emp_damage",var_00,var_01); + thread func_3CA1(); + thread func_3CD7(); + func_3CC3(); + playfxontag(common_scripts\utility::getfx("sentry_turret_explode"),self,"tag_aim"); + wait var_01; + func_3CC1(); + } +} + +//Function Number: 75 +func_3CD4() +{ + self endon("deleted"); + self endon("death"); + for(;;) + { + level waittill("emp_update"); + if(level.teamemped[self.team]) + { + thread func_3CA1(); + thread func_3CD7(); + func_3CC3(); + playfxontag(common_scripts\utility::getfx("sentry_turret_explode"),self,"tag_aim"); + continue; + } + + func_3CC1(); + } +} + +//Function Number: 76 +addtoturretlist() +{ + level.turrets[self getentitynumber()] = self; +} + +//Function Number: 77 +removefromturretlist() +{ + level.turrets[self getentitynumber()] = undefined; +} + +//Function Number: 78 +func_3CD5(param_00,param_01,param_02,param_03) +{ + param_00 endon(param_01); + param_02 endon(param_03); + level waittill("hell_freezes_over_AND_THEN_thaws_out"); +} + +//Function Number: 79 +func_3CD6() +{ + if(!level.var_3C68[self.sentrytype].var_3C70) + { + return; + } + + if(!isdefined(level.laseron_func)) + { + return; + } + + self [[ level.laseron_func ]](); +} + +//Function Number: 80 +func_3CD7() +{ + if(!level.var_3C68[self.sentrytype].var_3C70) + { + return; + } + + if(!isdefined(level.laseroff_func)) + { + return; + } + + self [[ level.laseroff_func ]](); +} + +//Function Number: 81 +is_specialop() +{ + return getdvarint("specialops") >= 1; +} + +//Function Number: 82 +is_survival() +{ + return is_specialop() && getdvarint("so_survival") > 0; +} \ No newline at end of file diff --git a/MW3/PC/SP/1565.gsc b/MW3/PC/SP/1565.gsc new file mode 100644 index 0000000..852de01 --- /dev/null +++ b/MW3/PC/SP/1565.gsc @@ -0,0 +1,51 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1565.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:21:15 AM +*******************************************************************/ + +//Function Number: 1 +main(param_00,param_01,param_02) +{ + maps\_vehicle::build_template("mi17_noai",param_00,param_01,param_02); + maps\_vehicle::build_localinit(::init_local); + maps\_vehicle::build_deathmodel("vehicle_mi17_woodland"); + maps\_vehicle::build_deathmodel("vehicle_mi17_woodland_fly"); + maps\_vehicle::build_deathmodel("vehicle_mi17_woodland_fly_cheap"); + maps\_vehicle::build_deathmodel("vehicle_mi17_woodland_landing"); + var_03 = []; + maps\_vehicle::build_deathfx("fire/fire_smoke_trail_L","tag_engine_right","mi17_helicopter_dying_loop",1,0.05,1,0.5,1); + maps\_vehicle::build_deathfx("explosions/aerial_explosion","tag_engine_right","mi17_helicopter_secondary_exp",undefined,undefined,undefined,2.5,1); + maps\_vehicle::build_deathfx("explosions/aerial_explosion","tag_deathfx","mi17_helicopter_secondary_exp",undefined,undefined,undefined,4); + maps\_vehicle::build_deathfx(var_7B[param_01],undefined,"mi17_helicopter_crash",undefined,undefined,undefined,-1,undefined,"stop_crash_loop_sound"); + maps\_vehicle::build_drive(%mi17_heli_rotors,undefined,0); + maps\_vehicle::build_deathfx("explosions/grenadeexp_default","tag_engine_left","mi17_helicopter_hit",undefined,undefined,undefined,0.2,1); + maps\_vehicle::build_deathfx("explosions/grenadeexp_default","tag_engine_right","mi17_helicopter_hit",undefined,undefined,undefined,0.5,1); + maps\_vehicle::build_treadfx(); + maps\_vehicle::build_life(999,500,1500); + maps\_vehicle::build_rumble("tank_rumble",0.15,4.5,600,1,1); + maps\_vehicle::build_team("axis"); + maps\_vehicle::build_bulletshield(1); + var_04 = randomfloatrange(0,1); + var_05 = maps\_vehicle::get_light_model(param_01,var_03); + maps\_vehicle::build_light(var_05,"cockpit_blue_cargo01","tag_light_cargo01","misc/aircraft_light_cockpit_red","interior",0); + maps\_vehicle::build_light(var_05,"cockpit_blue_cockpit01","tag_light_cockpit01","misc/aircraft_light_cockpit_blue","interior",0.1); + maps\_vehicle::build_light(var_05,"white_blink","tag_light_belly","misc/aircraft_light_white_blink","running",var_04); + maps\_vehicle::build_light(var_05,"white_blink_tail","tag_light_tail","misc/aircraft_light_red_blink","running",var_04); + maps\_vehicle::build_light(var_05,"wingtip_green","tag_light_L_wing","misc/aircraft_light_wingtip_green","running",var_04); + maps\_vehicle::build_light(var_05,"wingtip_red","tag_light_R_wing","misc/aircraft_light_wingtip_red","running",var_04); +} + +//Function Number: 2 +init_local() +{ + self.originheightoffset = distance(self gettagorigin("tag_origin"),self gettagorigin("tag_ground")); + self.fastropeoffset = 710; + self.script_badplace = 0; + maps\_vehicle::lights_on("running"); + maps\_vehicle::lights_on("interior"); +} \ No newline at end of file diff --git a/MW3/PC/SP/1566.gsc b/MW3/PC/SP/1566.gsc new file mode 100644 index 0000000..b370148 --- /dev/null +++ b/MW3/PC/SP/1566.gsc @@ -0,0 +1,242 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1566.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 7 + * Decompile Time: 3 ms + * Timestamp: 10/27/2023 2:21:16 AM +*******************************************************************/ + +//Function Number: 1 +func_3E56(param_00) +{ + return param_00 == "vehicle_little_bird_armed"; +} + +//Function Number: 2 +main(param_00,param_01,param_02) +{ + if(func_3E56(param_00)) + { + lib_016B::func_2874(); + } + + maps\_vehicle::build_template("littlebird",param_00,param_01,param_02); + maps\_vehicle::build_localinit(::init_local); + maps\_vehicle::build_deathmodel("vehicle_little_bird_armed"); + maps\_vehicle::build_deathmodel("vehicle_little_bird_bench"); + maps\_vehicle::build_drive(%mi28_rotors,undefined,0,3); + maps\_vehicle::build_deathfx("explosions/helicopter_explosion_secondary_small","tag_engine","littlebird_helicopter_secondary_exp",undefined,undefined,undefined,0,1); + maps\_vehicle::build_deathfx("fire/fire_smoke_trail_L","tag_engine","littlebird_helicopter_dying_loop",1,0.05,1,0.5,1); + maps\_vehicle::build_deathfx("explosions/helicopter_explosion_secondary_small","tag_engine",undefined,undefined,undefined,undefined,2.5,1); + maps\_vehicle::build_deathfx("explosions/helicopter_explosion_little_bird",undefined,"littlebird_helicopter_crash",undefined,undefined,undefined,-1,undefined,"stop_crash_loop_sound"); + maps\_vehicle::build_rocket_deathfx("explosions/helicopter_explosion_little_bird_dcburn","tag_deathfx","littlebird_helicopter_crash",undefined,undefined,undefined,undefined,1,undefined,0); + maps\_vehicle::build_deathquake(0.8,1.6,2048); + maps\_vehicle::build_treadfx(); + maps\_vehicle::build_life(799); + maps\_vehicle::build_team("axis"); + maps\_vehicle::build_mainturret(); + maps\_vehicle::build_unload_groups(::func_3E58); + maps\_vehicle::build_aianims(::func_3A9D,::func_3A9C); + var_03 = randomfloatrange(0,1); + var_04 = maps\_vehicle::get_light_model(param_00,param_02); + maps\_vehicle::build_light(var_04,"white_blink","TAG_LIGHT_BELLY","misc/aircraft_light_white_blink","running",var_03); + maps\_vehicle::build_light(var_04,"red_blink1","TAG_LIGHT_TAIL1","misc/aircraft_light_red_blink_occ","running",var_03); + maps\_vehicle::build_light(var_04,"red_blink2","TAG_LIGHT_TAIL2","misc/aircraft_light_red_blink_occ","running",var_03); + var_05 = getdvar("mapname"); + if(!isdefined(level.script)) + { + level.script = tolower(var_05); + } + + var_06 = "minigun_littlebird_spinnup"; + if(func_3E57()) + { + var_06 = "minigun_littlebird"; + } + + maps\_vehicle::build_turret(var_06,"TAG_MINIGUN_ATTACH_LEFT","vehicle_little_bird_minigun_left"); + maps\_vehicle::build_turret(var_06,"TAG_MINIGUN_ATTACH_RIGHT","vehicle_little_bird_minigun_right"); +} + +//Function Number: 3 +func_3E57() +{ + return issubstr(level.script,"oilrig"); +} + +//Function Number: 4 +init_local() +{ + self endon("death"); + self.originheightoffset = distance(self gettagorigin("tag_origin"),self gettagorigin("tag_ground")); + self.script_badplace = 0; + self.dontdisconnectpaths = 1; + thread maps\_vehicle::littlebird_landing(); + thread maps\_vehicle::lights_on("running"); + waittillframeend; + if(!func_3E57()) + { + foreach(var_01 in self.mgturret) + { + var_01 setautorotationdelay(4); + } + } + + if(func_3E56(self.model)) + { + return; + } + + maps\_vehicle::mgoff(); + foreach(var_01 in self.mgturret) + { + var_01 hide(); + } +} + +//Function Number: 5 +func_3A9C(param_00) +{ + return param_00; +} + +//Function Number: 6 +func_3A9D() +{ + level.scr_anim["generic"]["stage_littlebird_right"] = %little_bird_premount_guy3; + level.scr_anim["generic"]["stage_littlebird_left"] = %little_bird_premount_guy3; + var_00 = []; + for(var_01 = 0;var_01 < 8;var_01++) + { + var_00[var_01] = spawnstruct(); + } + + var_00[0].sittag = "tag_pilot1"; + var_00[1].sittag = "tag_pilot2"; + var_00[2].sittag = "tag_detach_right"; + var_00[3].sittag = "tag_detach_right"; + var_00[4].sittag = "tag_detach_right"; + var_00[5].sittag = "tag_detach_left"; + var_00[6].sittag = "tag_detach_left"; + var_00[7].sittag = "tag_detach_left"; + var_00[0].idle[0] = %helicopter_pilot1_idle; + var_00[0].idle[1] = %helicopter_pilot1_twitch_clickpannel; + var_00[0].idle[2] = %helicopter_pilot1_twitch_lookback; + var_00[0].idle[3] = %helicopter_pilot1_twitch_lookoutside; + var_00[0].idleoccurrence[0] = 500; + var_00[0].idleoccurrence[1] = 100; + var_00[0].idleoccurrence[2] = 100; + var_00[0].idleoccurrence[3] = 100; + var_00[1].idle[0] = %helicopter_pilot2_idle; + var_00[1].idle[1] = %helicopter_pilot2_twitch_clickpannel; + var_00[1].idle[2] = %helicopter_pilot2_twitch_lookoutside; + var_00[1].idle[3] = %helicopter_pilot2_twitch_radio; + var_00[1].idleoccurrence[0] = 450; + var_00[1].idleoccurrence[1] = 100; + var_00[1].idleoccurrence[2] = 100; + var_00[1].idleoccurrence[3] = 100; + var_00[2].idle[0] = %little_bird_casual_idle_guy1; + var_00[3].idle[0] = %little_bird_casual_idle_guy3; + var_00[4].idle[0] = %little_bird_casual_idle_guy2; + var_00[5].idle[0] = %little_bird_casual_idle_guy1; + var_00[6].idle[0] = %little_bird_casual_idle_guy3; + var_00[7].idle[0] = %little_bird_casual_idle_guy2; + var_00[2].idleoccurrence[0] = 100; + var_00[3].idleoccurrence[0] = 166; + var_00[4].idleoccurrence[0] = 122; + var_00[5].idleoccurrence[0] = 177; + var_00[6].idleoccurrence[0] = 136; + var_00[7].idleoccurrence[0] = 188; + var_00[2].idle[1] = %little_bird_aim_idle_guy1; + var_00[3].idle[1] = %little_bird_aim_idle_guy3; + var_00[4].idle[1] = %little_bird_aim_idle_guy2; + var_00[5].idle[1] = %little_bird_aim_idle_guy1; + var_00[7].idle[1] = %little_bird_aim_idle_guy2; + var_00[2].idleoccurrence[1] = 200; + var_00[3].idleoccurrence[1] = 266; + var_00[4].idleoccurrence[1] = 156; + var_00[5].idleoccurrence[1] = 277; + var_00[7].idleoccurrence[1] = 288; + var_00[2].idle_alert = %little_bird_alert_idle_guy1; + var_00[3].idle_alert = %little_bird_alert_idle_guy3; + var_00[4].idle_alert = %little_bird_alert_idle_guy2; + var_00[5].idle_alert = %little_bird_alert_idle_guy1; + var_00[6].idle_alert = %little_bird_alert_idle_guy3; + var_00[7].idle_alert = %little_bird_alert_idle_guy2; + var_00[2].idle_alert_to_casual = %little_bird_alert_2_aim_guy1; + var_00[3].idle_alert_to_casual = %little_bird_alert_2_aim_guy3; + var_00[4].idle_alert_to_casual = %little_bird_alert_2_aim_guy2; + var_00[5].idle_alert_to_casual = %little_bird_alert_2_aim_guy1; + var_00[6].idle_alert_to_casual = %little_bird_alert_2_aim_guy3; + var_00[7].idle_alert_to_casual = %little_bird_alert_2_aim_guy2; + var_00[2].getout = %little_bird_dismount_guy1; + var_00[3].getout = %little_bird_dismount_guy3; + var_00[4].getout = %little_bird_dismount_guy2; + var_00[5].getout = %little_bird_dismount_guy1; + var_00[6].getout = %little_bird_dismount_guy3; + var_00[7].getout = %little_bird_dismount_guy2; + var_00[2].littlebirde_getout_unlinks = 1; + var_00[3].littlebirde_getout_unlinks = 1; + var_00[4].littlebirde_getout_unlinks = 1; + var_00[5].littlebirde_getout_unlinks = 1; + var_00[6].littlebirde_getout_unlinks = 1; + var_00[7].littlebirde_getout_unlinks = 1; + var_00[2].getin = %little_bird_mount_guy1; + var_00[2].getin_enteredvehicletrack = "mount_finish"; + var_00[3].getin = %little_bird_mount_guy3; + var_00[3].getin_enteredvehicletrack = "mount_finish"; + var_00[4].getin = %little_bird_mount_guy2; + var_00[4].getin_enteredvehicletrack = "mount_finish"; + var_00[5].getin = %little_bird_mount_guy1; + var_00[5].getin_enteredvehicletrack = "mount_finish"; + var_00[6].getin = %little_bird_mount_guy3; + var_00[6].getin_enteredvehicletrack = "mount_finish"; + var_00[7].getin = %little_bird_mount_guy2; + var_00[7].getin_enteredvehicletrack = "mount_finish"; + var_00[2].getin_idle_func = ::maps\_vehicle_aianim::guy_idle_alert; + var_00[3].getin_idle_func = ::maps\_vehicle_aianim::guy_idle_alert; + var_00[4].getin_idle_func = ::maps\_vehicle_aianim::guy_idle_alert; + var_00[5].getin_idle_func = ::maps\_vehicle_aianim::guy_idle_alert; + var_00[6].getin_idle_func = ::maps\_vehicle_aianim::guy_idle_alert; + var_00[7].getin_idle_func = ::maps\_vehicle_aianim::guy_idle_alert; + var_00[2].pre_unload = %little_bird_aim_2_prelanding_guy1; + var_00[3].pre_unload = %little_bird_aim_2_prelanding_guy3; + var_00[4].pre_unload = %little_bird_aim_2_prelanding_guy2; + var_00[5].pre_unload = %little_bird_aim_2_prelanding_guy1; + var_00[6].pre_unload = %little_bird_aim_2_prelanding_guy3; + var_00[7].pre_unload = %little_bird_aim_2_prelanding_guy2; + var_00[2].pre_unload_idle = %little_bird_prelanding_idle_guy1; + var_00[3].pre_unload_idle = %little_bird_prelanding_idle_guy3; + var_00[4].pre_unload_idle = %little_bird_prelanding_idle_guy2; + var_00[5].pre_unload_idle = %little_bird_prelanding_idle_guy1; + var_00[6].pre_unload_idle = %little_bird_prelanding_idle_guy3; + var_00[7].pre_unload_idle = %little_bird_prelanding_idle_guy2; + var_00[0].bhasgunwhileriding = 0; + var_00[1].bhasgunwhileriding = 0; + return var_00; +} + +//Function Number: 7 +func_3E58() +{ + var_00 = []; + var_1C["first_guy_left"] = 0; + var_1C["first_guy_right"] = 0; + var_1C["stage_guy_left"] = 0; + var_1C["stage_guy_right"] = 0; + var_1C["left"] = var_1C["left"].size; + var_1C["left"] = var_1C["left"].size; + var_1C["left"] = var_1C["left"].size; + var_1C["right"] = var_1C["right"].size; + var_1C["right"] = var_1C["right"].size; + var_1C["right"] = var_1C["right"].size; + var_1C["passengers"] = var_1C["passengers"].size; + var_1C["passengers"] = var_1C["passengers"].size; + var_1C["passengers"] = var_1C["passengers"].size; + var_1C["passengers"] = var_1C["passengers"].size; + var_1C["passengers"] = var_1C["passengers"].size; + var_1C["passengers"] = var_1C["passengers"].size; + return var_1C; +} \ No newline at end of file diff --git a/MW3/PC/SP/1567.gsc b/MW3/PC/SP/1567.gsc new file mode 100644 index 0000000..d733671 --- /dev/null +++ b/MW3/PC/SP/1567.gsc @@ -0,0 +1,80 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1567.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 7 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:21:16 AM +*******************************************************************/ + +//Function Number: 1 +main(param_00,param_01,param_02) +{ + maps\_vehicle::build_template("ucav",param_00,param_01,param_02); + maps\_vehicle::build_localinit(::init_local); + maps\_vehicle::build_deathmodel("vehicle_ucav"); + level._effect["jettrail"] = loadfx("smoke/jet_contrail"); + maps\_vehicle::build_deathfx("explosions/large_vehicle_explosion",undefined,"explo_metal_rand"); + maps\_vehicle::build_life(999,500,1500); + maps\_vehicle::build_team("allies"); + maps\_vehicle::build_mainturret(); +} + +//Function Number: 2 +init_local() +{ + thread func_3E5A(); + self.missiletags[0] = "tag_missile_left"; + self.missiletags[1] = "tag_missile_right"; + self.nextmissiletag = 0; +} + +//Function Number: 3 +func_3A9C(param_00) +{ + return param_00; +} + +//Function Number: 4 +func_3A9D() +{ + var_00 = []; + for(var_01 = 0;var_01 < 1;var_01++) + { + var_00[var_01] = spawnstruct(); + } + + return var_00; +} + +//Function Number: 5 +func_3E5A() +{ + playfxontag(level._effect["jettrail"],self,"TAG_JET_TRAIL"); +} + +//Function Number: 6 +func_3E81() +{ + self waittill("trigger",var_00); + var_00 endon("death"); + thread func_3E81(); + var_00 thread maps\_utility::play_sound_on_entity("veh_uav_flyby"); +} + +//Function Number: 7 +func_3E82() +{ + self waittill("trigger",var_00); + var_00 endon("death"); + thread func_3E82(); + var_00 setvehweapon("ucav_sidewinder"); + var_01 = common_scripts\utility::get_linked_ent(); + var_00 fireweapon(var_00.missiletags[var_00.nextmissiletag],var_01,(0,0,0)); + var_00.nextmissiletag++; + if(var_00.nextmissiletag >= var_00.missiletags.size) + { + var_00.nextmissiletag = 0; + } +} \ No newline at end of file diff --git a/MW3/PC/SP/1568.gsc b/MW3/PC/SP/1568.gsc new file mode 100644 index 0000000..3544481 --- /dev/null +++ b/MW3/PC/SP/1568.gsc @@ -0,0 +1,215 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1568.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 7 + * Decompile Time: 6 ms + * Timestamp: 10/27/2023 2:21:16 AM +*******************************************************************/ + +//Function Number: 1 +main(param_00,param_01,param_02) +{ + var_03 = "mi17"; + if(isdefined(param_01) && param_01 == "mi17_so") + { + var_03 = "mi17_so"; + } + else if(isdefined(param_01) && param_01 == "mi17_so_takes_damage") + { + var_03 = "mi17_so_takes_damage"; + } + + lib_061D::main(param_00,var_03,param_02); + maps\_vehicle::build_drive(%mi17_heli_rotors,undefined,0); + maps\_vehicle::build_deathmodel("vehicle_mi17_woodland"); + maps\_vehicle::build_deathmodel("vehicle_mi17_woodland_fly"); + maps\_vehicle::build_deathmodel("vehicle_mi17_woodland_landing"); + maps\_vehicle::build_deathmodel("vehicle_mi17_woodland_fly_cheap"); + maps\_vehicle::build_localinit(::init_local); + maps\_vehicle::build_treadfx(); + maps\_vehicle::build_aianims(::func_3A9D,::func_3A9C); + maps\_vehicle::build_attach_models(::func_3E84); + maps\_vehicle::build_unload_groups(::func_3E58); +} + +//Function Number: 2 +init_local() +{ + if(maps\_utility::is_iw4_map_sp()) + { + self.originheightoffset = distance(self gettagorigin("tag_origin"),self gettagorigin("tag_ground")); + self.fastropeoffset = 710; + } + else + { + self.fastropeoffset = 710 + distance(self gettagorigin("tag_origin"),self gettagorigin("tag_ground")); + } + + self.script_badplace = 0; + maps\_vehicle::lights_on("running"); +} + +//Function Number: 3 +func_3A9C(param_00) +{ + for(var_01 = 0;var_01 < param_00.size;var_01++) + { + param_00[var_01].vehicle_getoutanim = %mi17_heli_idle; + } + + return param_00; +} + +//Function Number: 4 +func_3E83(param_00) +{ + return param_00; +} + +//Function Number: 5 +func_3A9D() +{ + var_00 = []; + for(var_01 = 0;var_01 < 10;var_01++) + { + var_00[var_01] = spawnstruct(); + } + + var_00[1].idle = %mi17_1_idle; + var_00[2].idle = %mi17_2_idle; + var_00[3].idle = %mi17_3_idle; + var_00[4].idle = %mi17_4_idle; + var_00[5].idle = %mi17_5_idle; + var_00[6].idle = %mi17_6_idle; + var_00[7].idle = %mi17_7_idle; + var_00[8].idle = %mi17_8_idle; + var_00[0].idle[0] = %helicopter_pilot1_idle; + var_00[0].idle[1] = %helicopter_pilot1_twitch_clickpannel; + var_00[0].idle[2] = %helicopter_pilot1_twitch_lookback; + var_00[0].idle[3] = %helicopter_pilot1_twitch_lookoutside; + var_00[0].idleoccurrence[0] = 500; + var_00[0].idleoccurrence[1] = 100; + var_00[0].idleoccurrence[2] = 100; + var_00[0].idleoccurrence[3] = 100; + var_00[0].bhasgunwhileriding = 0; + var_00[9].bhasgunwhileriding = 0; + var_00[9].idle[0] = %helicopter_pilot2_idle; + var_00[9].idle[1] = %helicopter_pilot2_twitch_clickpannel; + var_00[9].idle[2] = %helicopter_pilot2_twitch_lookoutside; + var_00[9].idle[3] = %helicopter_pilot2_twitch_radio; + var_00[9].idleoccurrence[0] = 450; + var_00[9].idleoccurrence[1] = 100; + var_00[9].idleoccurrence[2] = 100; + var_00[9].idleoccurrence[3] = 100; + var_00[0].sittag = "tag_driver"; + var_00[1].sittag = "tag_detach"; + var_00[2].sittag = "tag_detach"; + var_00[3].sittag = "tag_detach"; + var_00[4].sittag = "tag_detach"; + var_00[5].sittag = "tag_detach"; + var_00[6].sittag = "tag_detach"; + var_00[7].sittag = "tag_detach"; + var_00[8].sittag = "tag_detach"; + var_00[9].sittag = "tag_passenger"; + var_00[1].getout = %mi17_1_drop; + var_00[2].getout = %mi17_2_drop; + var_00[3].getout = %mi17_3_drop; + var_00[4].getout = %mi17_4_drop; + var_00[5].getout = %mi17_5_drop; + var_00[6].getout = %mi17_6_drop; + var_00[7].getout = %mi17_7_drop; + var_00[8].getout = %mi17_8_drop; + var_00[1].getoutstance = "crouch"; + var_00[2].getoutstance = "crouch"; + var_00[3].getoutstance = "crouch"; + var_00[4].getoutstance = "crouch"; + var_00[5].getoutstance = "crouch"; + var_00[6].getoutstance = "crouch"; + var_00[7].getoutstance = "crouch"; + var_00[8].getoutstance = "crouch"; + var_00[2].ragdoll_getout_death = 1; + var_00[3].ragdoll_getout_death = 1; + var_00[4].ragdoll_getout_death = 1; + var_00[5].ragdoll_getout_death = 1; + var_00[6].ragdoll_getout_death = 1; + var_00[7].ragdoll_getout_death = 1; + var_00[8].ragdoll_getout_death = 1; + var_00[2].ragdoll_fall_anim = %fastrope_fall; + var_00[3].ragdoll_fall_anim = %fastrope_fall; + var_00[4].ragdoll_fall_anim = %fastrope_fall; + var_00[5].ragdoll_fall_anim = %fastrope_fall; + var_00[6].ragdoll_fall_anim = %fastrope_fall; + var_00[7].ragdoll_fall_anim = %fastrope_fall; + var_00[8].ragdoll_fall_anim = %fastrope_fall; + var_00[1].rappel_kill_achievement = 1; + var_00[2].rappel_kill_achievement = 1; + var_00[3].rappel_kill_achievement = 1; + var_00[4].rappel_kill_achievement = 1; + var_00[5].rappel_kill_achievement = 1; + var_00[6].rappel_kill_achievement = 1; + var_00[7].rappel_kill_achievement = 1; + var_00[8].rappel_kill_achievement = 1; + var_00[1].getoutloopsnd = "fastrope_loop_npc"; + var_00[2].getoutloopsnd = "fastrope_loop_npc"; + var_00[3].getoutloopsnd = "fastrope_loop_npc"; + var_00[4].getoutloopsnd = "fastrope_loop_npc"; + var_00[5].getoutloopsnd = "fastrope_loop_npc"; + var_00[6].getoutloopsnd = "fastrope_loop_npc"; + var_00[7].getoutloopsnd = "fastrope_loop_npc"; + var_00[8].getoutloopsnd = "fastrope_loop_npc"; + var_00[1].fastroperig = "TAG_FastRope_RI"; + var_00[2].fastroperig = "TAG_FastRope_RI"; + var_00[3].fastroperig = "TAG_FastRope_RI"; + var_00[4].fastroperig = "TAG_FastRope_RI"; + var_00[5].fastroperig = "TAG_FastRope_LE"; + var_00[6].fastroperig = "TAG_FastRope_LE"; + var_00[7].fastroperig = "TAG_FastRope_LE"; + var_00[8].fastroperig = "TAG_FastRope_LE"; + return func_3E83(var_00); +} + +//Function Number: 6 +func_3E58() +{ + var_00 = []; + var_1C["back"] = var_7B["back"].size; + var_1C["back"] = var_1C["back"].size; + var_1C["back"] = var_1C["back"].size; + var_1C["back"] = var_1C["back"].size; + var_1C["front"] = var_1C["front"].size; + var_1C["front"] = var_1C["front"].size; + var_1C["front"] = var_1C["front"].size; + var_1C["front"] = var_1C["front"].size; + var_1C["both"] = var_1C["both"].size; + var_1C["both"] = var_1C["both"].size; + var_1C["both"] = var_1C["both"].size; + var_1C["both"] = var_1C["both"].size; + var_1C["both"] = var_1C["both"].size; + var_1C["both"] = var_1C["both"].size; + var_1C["both"] = var_1C["both"].size; + var_1C["both"] = var_1C["both"].size; + return var_1C; +} + +//Function Number: 7 +func_3E84() +{ + var_00 = []; + var_7B["TAG_FastRope_LE"].model = "rope_test"; + var_7B["TAG_FastRope_LE"].tag = "TAG_FastRope_LE"; + var_7B["TAG_FastRope_LE"].idleanim = %mi17_rope_idle_le; + var_7B["TAG_FastRope_LE"].dropanim = %mi17_rope_drop_le; + var_7B["TAG_FastRope_RI"].model = "rope_test_ri"; + var_7B["TAG_FastRope_RI"].tag = "TAG_FastRope_RI"; + var_7B["TAG_FastRope_RI"].idleanim = %mi17_rope_idle_ri; + var_7B["TAG_FastRope_RI"].dropanim = %mi17_rope_drop_ri; + var_01 = getarraykeys(var_7B); + for(var_02 = 0;var_02 < var_01.size;var_02++ = var_7B["TAG_FastRope_RI"]) + { + precachemodel(var_7B[var_01[var_02]].model); + } + + return var_7B; +} \ No newline at end of file diff --git a/MW3/PC/SP/1569.gsc b/MW3/PC/SP/1569.gsc new file mode 100644 index 0000000..72462f9 --- /dev/null +++ b/MW3/PC/SP/1569.gsc @@ -0,0 +1 @@ +Failed to decompile this file, open a ticket if you need this fixed. \ No newline at end of file diff --git a/MW3/PC/SP/1571.gsc b/MW3/PC/SP/1571.gsc new file mode 100644 index 0000000..6bac18c --- /dev/null +++ b/MW3/PC/SP/1571.gsc @@ -0,0 +1,2501 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1571.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 107 + * Decompile Time: 137 ms + * Timestamp: 10/27/2023 2:21:19 AM +*******************************************************************/ + +//Function Number: 1 +func_3F62(param_00) +{ + return tablelookup(level.var_3F63,1,param_00,2); +} + +//Function Number: 2 +func_3F64(param_00) +{ + return tablelookup(level.var_3F63,2,param_00,3); +} + +//Function Number: 3 +func_3F65() +{ + if(getdvarint("survival_chaos") == 1) + { + thread maps/_so_survival_chaos::chaos_pre_preload(); + } + + maps\so_survival_precache::main(); + if(!isdefined(level.var_3F63)) + { + level.var_3F63 = "sp/survival_waves.csv"; + } + + level.uav_missile_override = "remote_missile_survival"; + level.givexp_kill_func = ::maps\_so_survival_ai::givexp_kill; + maps\_so_survival_armory::armory_preload(); + maps\_so_survival_ai::ai_preload(); + maps\_so_survival_perks::perks_preload(); + maps\_so_survival_challenge::precache_challenge_strings(); + precacheitem("smoke_grenade_fast"); + precacherumble("damage_light"); + precacheminimapsentrycodeassets(); + precachestring(&"SO_SURVIVAL_SURVIVAL_OBJECTIVE"); + precachestring(&"SO_SURVIVAL_WAVE_TITLE"); + precachestring(&"SO_SURVIVAL_WAVE_SUCCESS_TITLE"); + precachestring(&"SO_SURVIVAL_SURVIVE_TIME"); + precachestring(&"SO_SURVIVAL_WAVE_TIME"); + precachestring(&"SO_SURVIVAL_PARTNER_READY"); + precachestring(&"SO_SURVIVAL_READY_UP_WAIT"); + precachestring(&"SO_SURVIVAL_READY_UP"); + precacheshader("gradient_inset_rect"); + precacheshader("teamperk_blast_shield"); + precacheshader("specialty_self_revive"); + maps\_so_survival_code::precache_loadout_item(func_3F62("weapon_1")); + maps\_so_survival_code::precache_loadout_item(func_3F62("weapon_2")); + maps\_so_survival_code::precache_loadout_item(func_3F62("weapon_3")); + maps\_load::set_player_viewhand_model("viewhands_player_delta"); + thread maps\_so_survival_code::mp_ents_cleanup(); + thread func_00D8(); + level.cheap_air_strobe_fx = 1; + if(getdvarint("survival_chaos") == 1) + { + thread maps/_so_survival_chaos::chaos_preload(); + } + + precachemenu("so_survival_dvar_reset"); +} + +//Function Number: 4 +func_00D8() +{ + var_00 = getentarray("trigger_multiple_flag_set","classname"); + foreach(var_02 in var_00) + { + if(isdefined(var_02.script_flag) && var_02.script_flag == "start_survival") + { + var_02 common_scripts\utility::trigger_off(); + } + } +} + +//Function Number: 5 +hurtplayersthink(param_00) +{ + level endon("special_op_terminated"); + for(;;) + { + param_00 waittill("trigger",var_01); + if(isdefined(var_01) && isplayer(var_01) && var_01 == self) + { + break; + } + } + + maps\_utility::kill_wrapper(); +} + +//Function Number: 6 +func_3F66() +{ + maps\_so_survival_armory::armory_postload(); + maps\_so_survival_loot::loot_postload(); + if(getdvarint("survival_chaos") == 1) + { + thread maps/_so_survival_chaos::chaos_postload(); + } +} + +//Function Number: 7 +func_3F67() +{ + foreach(var_01 in level.players) + { + var_01 openpopupmenu("so_survival_dvar_reset"); + } + + common_scripts\utility::flag_init("bosses_spawned"); + common_scripts\utility::flag_init("aggressive_mode"); + common_scripts\utility::flag_init("boss_music"); + common_scripts\utility::flag_init("slamzoom_finished"); + common_scripts\utility::flag_set("so_player_death_nofail"); + level.var_16BC = 1; + level.var_16BD = ::func_16C2; + level.suppress_challenge_success_print = 1; + level.var_17F7 = 5; + level.var_1990 = ::func_3F69; + level.var_1991 = ::func_3F68; + level.skip_pilot_kill_count = 1; + level.var_3C36 = 128; + level.var_3C37 = 0; + setsaveddvar("ai_foliageSeeThroughDist",-15536); + setsaveddvar("g_friendlyfireDamageScale",0.5); + forcesharedammo(); + thread maps\_specialops::enable_challenge_timer("start_survival","win_survival",undefined,1); + thread maps\_specialops::fade_challenge_in(undefined,0); + thread maps\_specialops::fade_challenge_out("win_survival"); + level.wave_spawn_locs = maps\_squad_enemies::squad_setup(1); + maps\_drone_ai::init(); + maps\_so_survival_armory::armory_init(); + maps\_so_survival_loot::loot_init(); + maps\_so_survival_ai::ai_init(); + maps\_so_survival_perks::perks_init(); + if(getdvarint("survival_chaos") != 1) + { + maps\_so_survival_challenge::challenge_init(); + } + + maps\_so_survival_dialog::survival_dialog_init(); + maps\_audio::aud_disable_deathsdoor_audio(); + thread func_3F71(); + thread func_3F6C(); + if(getdvarint("survival_chaos") == 1) + { + thread maps/_so_survival_chaos::chaos_init(); + } +} + +//Function Number: 8 +func_3F68() +{ + return level.current_wave; +} + +//Function Number: 9 +func_3F69() +{ + foreach(var_01 in level.players) + { + } + + var_03 = level.challenge_end_time - level.challenge_start_time / 1000; + var_04 = level.current_wave; + var_05 = 0; + foreach(var_01 in level.players) + { + var_05 = var_05 + var_01.game_performance["credits"]; + } + + var_08 = 999 * min(var_05 / var_04 * 10000,1); + if(var_04 == 1) + { + return int(var_08); + } + + var_09 = var_04 * 1000; + var_0A = int(var_09 + var_08); + return var_0A; +} + +//Function Number: 10 +func_3F6A(param_00,param_01) +{ + if(maps\_utility::is_coop()) + { + return maps\_utility::get_other_player(param_00).game_performance[param_01]; + } + + return undefined; +} + +//Function Number: 11 +func_16C2() +{ + var_00 = int(min(level.challenge_end_time - level.challenge_start_time,86400000)); + var_01 = int(var_00 % 1000 / 100); + var_02 = int(var_00 / 1000) % 60; + var_03 = int(var_00 / -5536) % 60; + var_04 = int(var_00 / 3600000); + if(var_04 < 10) + { + var_04 = "0" + var_04; + } + + if(var_03 < 10) + { + var_03 = "0" + var_03; + } + + if(var_02 < 10) + { + var_02 = "0" + var_02; + } + + var_05 = var_04 + ":" + var_03 + ":" + var_02 + "." + var_01; + var_06 = func_3F69(); + foreach(var_08 in level.players) + { + var_09 = var_08.game_performance["kill"]; + var_0A = func_3F6A(var_08,"kill"); + var_0B = var_08.game_performance["headshot"]; + var_0C = func_3F6A(var_08,"headshot"); + var_0D = var_08.game_performance["accuracy"] + "%"; + var_0E = func_3F6A(var_08,"accuracy"); + if(isdefined(var_0E)) + { + var_0E = var_0E + "%"; + } + + var_0F = var_08.game_performance["credits"]; + var_10 = func_3F6A(var_08,"credits"); + var_11 = var_08.game_performance["downed"]; + var_12 = func_3F6A(var_08,"downed"); + var_13 = var_08.game_performance["revives"]; + var_14 = func_3F6A(var_08,"revives"); + var_08 maps\_utility::set_eog_success_heading(level.current_wave); + if(maps\_utility::is_coop()) + { + setdvar("ui_hide_hint",1); + var_08 maps\_utility::add_custom_eog_summary_line("","@SPECIAL_OPS_PERFORMANCE_YOU","@SPECIAL_OPS_PERFORMANCE_PARTNER"); + var_08 maps\_utility::add_custom_eog_summary_line("@SO_SURVIVAL_PERFORMANCE_KILLS",var_09,var_0A); + var_08 maps\_utility::add_custom_eog_summary_line("@SO_SURVIVAL_PERFORMANCE_HEADSHOT",var_0B,var_0C); + var_08 maps\_utility::add_custom_eog_summary_line("@SO_SURVIVAL_PERFORMANCE_ACCURACY",var_0D,var_0E); + var_08 maps\_utility::add_custom_eog_summary_line("@SO_SURVIVAL_PERFORMANCE_REVIVES",var_13,var_14); + var_08 maps\_utility::add_custom_eog_summary_line("@SO_SURVIVAL_PERFORMANCE_CREDITS_EARNED",var_0F,var_10); + var_08 maps\_utility::add_custom_eog_summary_line_blank(); + var_08 maps\_utility::add_custom_eog_summary_line("@SO_SURVIVAL_PERFORMANCE_TIME",var_05); + var_08 maps\_utility::add_custom_eog_summary_line("@SO_SURVIVAL_PERFORMANCE_SCORE",var_06); + continue; + } + + setdvar("ui_hide_hint",0); + var_08 maps\_utility::add_custom_eog_summary_line("@SO_SURVIVAL_PERFORMANCE_KILLS",var_09); + var_08 maps\_utility::add_custom_eog_summary_line("@SO_SURVIVAL_PERFORMANCE_HEADSHOT",var_0B); + var_08 maps\_utility::add_custom_eog_summary_line("@SO_SURVIVAL_PERFORMANCE_ACCURACY",var_0D); + var_08 maps\_utility::add_custom_eog_summary_line("@SO_SURVIVAL_PERFORMANCE_CREDITS_EARNED",var_0F); + var_08 maps\_utility::add_custom_eog_summary_line_blank(); + var_08 maps\_utility::add_custom_eog_summary_line("@SO_SURVIVAL_PERFORMANCE_TIME",var_05); + var_08 maps\_utility::add_custom_eog_summary_line("@SO_SURVIVAL_PERFORMANCE_SCORE",var_06); + } +} + +//Function Number: 12 +func_3F6C() +{ + wait 0.05; + maps\_so_survival_armory::armory_setup_players(); + thread func_3F6D(); + thread func_3F6E(); + if(getdvarint("survival_chaos") == 1) + { + thread maps/_so_survival_chaos::chaos_wave(); + } + else + { + thread survival_wave(); + } + + thread func_3FB8(); + thread func_3FB1(); + thread func_3FD9(); +} + +//Function Number: 13 +func_3F6D() +{ + wait 2; + if(getdvarint("survival_chaos") == 1) + { + objective_add(1,"active",&"SO_SURVIVAL_CHAOS_OBJECTIVE"); + } + else + { + objective_add(1,"active",&"SO_SURVIVAL_SURVIVAL_OBJECTIVE"); + } + + objective_current_nomessage(1); +} + +//Function Number: 14 +func_3F6E() +{ + level waittill("so_player_has_died"); + if(!common_scripts\utility::flag("start_survival")) + { + common_scripts\utility::flag_wait("start_survival"); + } + + if(!common_scripts\utility::flag("so_player_death_nofail")) + { + return; + } + + common_scripts\utility::flag_set("win_survival"); +} + +//Function Number: 15 +func_3F6F() +{ + level endon("special_op_terminated"); + for(;;) + { + level waittill("wave_ended",var_00); + if(var_00 >= 0) + { + common_scripts\utility::flag_set("so_player_death_nofail"); + return; + } + } +} + +//Function Number: 16 +func_3F70() +{ + common_scripts\utility::flag_wait_or_timeout("start_survival",5); +} + +//Function Number: 17 +func_3F71() +{ + if(level.console) + { + setsaveddvar("aim_aimAssistRangeScale","1"); + setsaveddvar("aim_autoAimRangeScale","0"); + } + + var_00 = getentarray("trigger_hurt","classname"); + foreach(var_02 in level.players) + { + var_02 thread func_3F7F(); + var_02 thread give_loadout(); + foreach(var_04 in var_00) + { + var_02 thread hurtplayersthink(var_04); + } + } + + thread func_3F93(); + func_3F70(); + level.var_D9 = []; + level.var_DA = []; + foreach(var_02 in level.players) + { + var_02 thread func_3FA8(); + var_02 thread func_3F78(); + var_02 thread func_3F79(); + var_02 thread func_00DB(); + } +} + +//Function Number: 18 +func_00DB() +{ + self endon("death"); + self endon("disconnect"); + thread func_00DC(); + thread func_00DD(); +} + +//Function Number: 19 +func_00DC() +{ + self endon("death"); + self endon("disconnect"); + for(;;) + { + self waittill("grenade_fire",var_00,var_01); + if(isdefined(var_00) && isdefined(var_01) && isdefined(weaponinventorytype(var_01)) && weaponinventorytype(var_01) == "item" && issubstr(var_01,"c4")) + { + if(level.var_D9.size) + { + level.var_D9 = common_scripts\utility::array_removeundefined(level.var_D9); + if(level.var_D9.size >= 20) + { + level.var_D9[0] detonate(); + } + } + + level.var_D9[level.var_D9.size] = var_00; + } + } +} + +//Function Number: 20 +func_00DD() +{ + self endon("death"); + self endon("disconnect"); + for(;;) + { + self waittill("grenade_fire",var_00,var_01); + if(isdefined(var_00) && isdefined(var_01) && isdefined(weaponinventorytype(var_01)) && weaponinventorytype(var_01) == "item" && issubstr(var_01,"claymore")) + { + if(level.var_DA.size) + { + level.var_DA = common_scripts\utility::array_removeundefined(level.var_DA); + if(level.var_DA.size >= 20) + { + level.var_DA[0] detonate(); + } + } + + level.var_DA[level.var_DA.size] = var_00; + } + } +} + +//Function Number: 21 +give_loadout() +{ + self endon("death"); + self takeallweapons(); + func_3F72("weapon_1"); + func_3F72("weapon_2"); + func_3F72("weapon_3"); + func_3F73("grenade_1"); + func_3F73("grenade_2"); + func_3F74("armor_1"); + wait 0.05; + func_3F75("equipment_1"); + func_3F75("equipment_2"); + func_3F75("equipment_3"); + func_3F76("airsupport_1"); + func_3F76("airsupport_2"); + func_3F76("airsupport_3"); + func_3F77("perk_1"); + func_3F77("perk_2"); + func_3F77("perk_3"); +} + +//Function Number: 22 +func_3F72(param_00) +{ + var_01 = func_3F62(param_00); + var_02 = func_3F64(var_01); + if(var_01 != "") + { + self giveweapon(var_01); + var_03 = weaponclass(var_01); + if(var_03 == "pistol") + { + level.coop_incap_weapon = var_01; + } + + if(var_02 == "max") + { + self setweaponammostock(var_01,weaponmaxammo(var_01)); + } + else + { + self setweaponammostock(var_01,int(var_02)); + } + + if(param_00 == "weapon_1") + { + self switchtoweapon(var_01); + } + } +} + +//Function Number: 23 +func_3F73(param_00) +{ + var_01 = func_3F62(param_00); + var_02 = func_3F64(var_01); + if(var_01 != "") + { + self giveweapon(var_01); + if(var_02 == "max") + { + self setweaponammostock(var_01,weaponmaxammo(var_01)); + } + else + { + self setweaponammostock(var_01,int(var_02)); + } + + if(var_01 == "flash_grenade") + { + self setoffhandsecondaryclass("flash"); + } + } +} + +//Function Number: 24 +func_3F74(param_00) +{ + var_01 = func_3F62(param_00); + var_02 = int(func_3F64(var_01)); + if(var_01 != "") + { + maps\_so_survival_armory::give_armor_amount(var_01,var_02); + } +} + +//Function Number: 25 +func_3F75(param_00) +{ + var_01 = func_3F62(param_00); + if(var_01 != "") + { + var_02 = maps\_so_survival_armory::get_func_give("equipment",var_01); + self thread [[ var_02 ]](var_01); + } +} + +//Function Number: 26 +func_3F76(param_00) +{ + var_01 = func_3F62(param_00); + if(var_01 != "") + { + var_02 = maps\_so_survival_armory::get_func_give("airsupport",var_01); + self thread [[ var_02 ]](var_01); + } +} + +//Function Number: 27 +func_3F77(param_00) +{ + var_01 = func_3F62(param_00); + if(var_01 != "") + { + thread maps\_so_survival_perks::give_perk(var_01); + } +} + +//Function Number: 28 +func_3F78() +{ + if(!maps\_utility::is_coop()) + { + return; + } + + for(;;) + { + level waittill("wave_ended"); + var_00 = 120; + var_00 = var_00 - level.current_wave * 8; + var_00 = max(var_00,30); + self.laststand_info.bleedout_time_default = var_00; + } +} + +//Function Number: 29 +func_3F79() +{ + level endon("special_op_terminated"); + self endon("death"); + if(!isdefined(self.var_3F7A)) + { + self.var_3F7A = []; + } + + var_00 = self getweaponslistprimaries(); + for(;;) + { + self waittill("weapon_change",var_01); + if(!func_3F7B(var_01)) + { + continue; + } + + var_02 = !maps\_utility::array_contains(var_00,var_01); + if(!var_02) + { + continue; + } + + if(!func_3F7C(var_01)) + { + if(func_3F7D(var_01)) + { + func_3F07(var_01); + } + } + + var_03 = self getweaponslistprimaries(); + foreach(var_05 in var_00) + { + if(!maps\_utility::array_contains(var_03,var_05)) + { + if(!func_3F7B(var_05)) + { + continue; + } + + func_3F07(var_05); + } + } + + var_00 = var_03; + func_3F7E(); + } +} + +//Function Number: 30 +func_3F7B(param_00) +{ + if(weaponclass(param_00) == "none" || weaponclass(param_00) == "rocketlauncher" || weaponclass(param_00) == "item") + { + return 0; + } + + if(weaponinventorytype(param_00) != "primary") + { + return 0; + } + + return 1; +} + +//Function Number: 31 +func_3F7C(param_00) +{ + if(!isdefined(self.var_3F7A)) + { + return 0; + } + + if(!isdefined(self.var_3F7A[param_00])) + { + return 0; + } + + if(gettime() - self.var_3F7A[param_00] <= 10000) + { + return 1; + } + + return 0; +} + +//Function Number: 32 +func_3F7D(param_00) +{ + var_01 = self getweaponammoclip(param_00); + var_02 = self getweaponammostock(param_00); + var_03 = weaponclipsize(param_00); + var_04 = weaponmaxammo(param_00); + if(var_01 == var_03) + { + return 0; + } + + if(var_02 <= 0) + { + return 0; + } + + var_05 = var_03 - var_01; + var_06 = 0; + if(var_05 > var_02) + { + var_06 = var_02; + } + else + { + var_06 = var_05; + } + + self setweaponammoclip(param_00,var_01 + var_06); + self setweaponammostock(param_00,var_02 - var_06); + return 1; +} + +//Function Number: 33 +func_3F07(param_00) +{ + if(!isdefined(self.var_3F7A)) + { + self.var_3F7A = []; + } + + self.var_3F7A[param_00] = gettime(); +} + +//Function Number: 34 +func_3F7E() +{ + if(!isdefined(self.var_3F7A) || !self.var_3F7A.size) + { + return; + } + + var_00 = []; + foreach(var_03, var_02 in self.var_3F7A) + { + if(func_3F7C(var_03)) + { + var_00[var_03] = self.var_3F7A[var_03]; + } + } + + self.var_3F7A = var_00; +} + +//Function Number: 35 +func_3F7F() +{ + self disableweapons(); + self disableoffhandweapons(); + self freezecontrols(1); + if(isdefined(self.last_modelfunc)) + { + self detachall(); + self setmodel(""); + } + + var_00 = 1.75; + var_01 = 16000; + var_02 = self.origin; + self playersetstreamorigin(var_02); + self.origin = var_02 + (0,0,var_01); + var_03 = spawn("script_model",(69,69,69)); + var_03 setmodel("tag_origin"); + var_03.origin = self.origin; + var_03.angles = self.angles; + self playerlinkto(var_03,undefined,1,0,0,0,0); + var_03.angles = (var_03.angles[0] + 89,var_03.angles[1],0); + var_03 moveto(var_02 + (0,0,0),var_00,0,var_00); + wait 0.05; + self playsound("survival_slamzoom_out"); + wait var_00 - 0.55; + self visionsetnakedforplayer("coup_sunblind",0.25); + var_03 rotateto((var_03.angles[0] - 89,var_03.angles[1],0),0.5,0.3,0.2); + wait 0.2; + self visionsetnakedforplayer("",1); + wait 0.5; + self unlink(); + self enableweapons(); + self enableoffhandweapons(); + self freezecontrols(0); + self playerclearstreamorigin(); + self notify("player_update_model"); + wait 0.5; + common_scripts\utility::flag_set("slamzoom_finished"); + var_03 delete(); +} + +//Function Number: 36 +func_3F80() +{ + level.pmc_alljuggernauts = 0; + level.skip_juggernaut_intro_sound = 1; + level.survival_wave_intermission = 0; + level.remotemissile.fov_is_altered = 12; + setsaveddvar("g_compassShowEnemies","0"); + common_scripts\utility::array_thread(level.players,::maps\_remotemissile_utility::setup_remote_missile_target); + maps\_utility::add_global_spawn_function("axis",::maps\_so_survival_code::ai_remote_missile_fof_outline); + level.current_wave = 1; + level thread func_3F81(); +} + +//Function Number: 37 +func_3F81() +{ + level endon("special_op_terminated"); + var_00 = undefined; + var_01 = 0; + for(;;) + { + level waittill("wave_ended",var_02); + var_03 = var_02 + 1; + if(!maps\_so_survival_ai::wave_exist(var_03)) + { + if(!isdefined(var_00)) + { + var_00 = 0; + var_01 = 1; + } + + if(var_00 == level.survival_repeat_wave.size) + { + var_00 = 0; + var_01++; + } + + var_04 = spawnstruct(); + var_04.idx = var_03 - 1; + var_04.num = var_03; + var_04.survival_ai_class_overrides = level.survival_repeat_wave[var_00].survival_ai_class_overrides; + var_04.var_3D4C = level.survival_repeat_wave[var_00].var_3D4C; + var_04.var_3D4D = level.survival_repeat_wave[var_00].var_3D4D; + var_04.var_3D4E = level.survival_repeat_wave[var_00].var_3D4E; + var_04.bossai = level.survival_repeat_wave[var_00].bossai; + var_04.bossnonai = level.survival_repeat_wave[var_00].bossnonai; + var_04.var_3D4F = level.survival_repeat_wave[var_00].var_3D4F; + var_04.dogtype = level.survival_repeat_wave[var_00].dogtype; + var_04.dogquantity = level.survival_repeat_wave[var_00].dogquantity; + var_04.repeating = level.survival_repeat_wave[var_00].repeating; + var_05 = level.survival_wave[var_02]; + level.survival_wave = []; + level.survival_wave[var_02] = var_05; + level.survival_wave[var_04.num] = var_04; + var_00++; + level.survival_waves_repeated++; + } + } +} + +//Function Number: 38 +survival_wave() +{ + level endon("special_op_terminated"); + func_3F80(); + thread func_3FB6(); + func_3F70(); + if(!common_scripts\utility::flag("start_survival")) + { + common_scripts\utility::flag_set("start_survival"); + } + + level notify("wave_started",level.current_wave); + setsaveddvar("bg_viewKickScale","0.2"); + for(;;) + { + if(isdefined(level.leaders.size) && level.leaders.size >= 3) + { + } + + var_00 = maps\_so_survival_ai::get_squad_array(level.current_wave); + var_01 = 0; + foreach(var_03 in var_00) + { + if(var_03 > 0) + { + var_01 = var_01 + func_3F8A(1,var_03); + } + } + + level.special_ai = []; + var_05 = maps\_so_survival_ai::get_special_ai(level.current_wave); + if(isdefined(var_05)) + { + foreach(var_07 in var_05) + { + if(issubstr(var_07,"dog")) + { + thread maps\_so_survival_ai::spawn_dogs(var_07,maps\_so_survival_ai::get_dog_quantity(level.current_wave)); + continue; + } + + var_08 = maps\_so_survival_ai::get_special_ai_type_quantity(level.current_wave,var_07); + if(isdefined(var_08) && var_08 > 0) + { + var_09 = func_3F8C(var_07,var_08); + } + } + } + + if(var_00[0] > 0) + { + thread func_3F8D(1,var_00[0]); + } + + if(func_3F8F(level.current_wave)) + { + thread func_3F90(); + } + + level thread func_3F82(); + var_0B = getaiarray("axis").size + maps\_so_survival_ai::dog_get_count(); + while(var_0B > 4) + { + level common_scripts\utility::waittill_any_timeout(1,"axis_died"); + var_0B = getaiarray("axis").size + maps\_so_survival_ai::dog_get_count(); + } + + common_scripts\utility::flag_set("aggressive_mode"); + maps\_squad_enemies::squad_disband(0,::maps\_so_survival_ai::aggressive_squad_leader); + level.squad_leader_behavior_func = ::maps\_so_survival_ai::aggressive_ai; + level.special_ai_behavior_func = ::maps\_so_survival_ai::aggressive_ai; + if(isdefined(level.special_ai) && level.special_ai.size > 0) + { + foreach(var_0D in level.special_ai) + { + var_0D thread maps\_so_survival_ai::aggressive_ai(); + } + } + + var_0B = getaiarray("axis").size + maps\_so_survival_ai::dog_get_count(); + while(var_0B > 0) + { + level common_scripts\utility::waittill_any_timeout(1,"axis_died"); + var_0B = getaiarray("axis").size + maps\_so_survival_ai::dog_get_count(); + } + + level.squad_leader_behavior_func = ::maps\_so_survival_ai::default_ai; + level.special_ai_behavior_func = ::maps\_so_survival_ai::default_ai; + if(func_3F8F(level.current_wave)) + { + common_scripts\utility::flag_wait("bosses_spawned"); + while(isdefined(level.bosses) && level.bosses.size) + { + wait 0.1; + } + } + + common_scripts\utility::flag_clear("aggressive_mode"); + level notify("wave_ended",level.current_wave); + setsaveddvar("g_compassShowEnemies","0"); + if(common_scripts\utility::flag("boss_music")) + { + level notify("end_boss_music"); + common_scripts\utility::flag_clear("boss_music"); + maps\_utility::music_stop(3); + } + + func_3F89(); + survival_wave_intermission(); + level.current_wave++; + level notify("wave_started",level.current_wave); + } +} + +//Function Number: 39 +func_3F82() +{ + level endon("wave_ended"); + wait 7; + setsaveddvar("g_compassShowEnemies","1"); +} + +//Function Number: 40 +survival_wave_intermission() +{ + level endon("special_op_terminated"); + level.survival_wave_intermission = 1; + var_00 = 30; + var_01 = 5; + if(var_00 > 0) + { + wait 5; + var_00 = var_00 - 5; + common_scripts\utility::array_thread(level.players,::func_3F83,"survival_all_ready",var_00 + var_01); + level common_scripts\utility::waittill_any_timeout(var_00,"survival_all_ready"); + level notify("survival_all_ready"); + } + + foreach(var_03 in level.players) + { + var_03 thread matchstarttimer(var_01); + } + + wait var_01; + level.survival_wave_intermission = 0; +} + +//Function Number: 41 +func_3F83(param_00,param_01) +{ + self endon("death"); + level endon("special_op_terminated"); + level endon(param_00); + var_02 = maps\_specialops::so_hud_ypos() - 130; + self.var_3F84 = maps\_specialops::so_create_hud_item(-2,var_02,&"SO_SURVIVAL_READY_UP",self,1); + self.var_3F84 func_3F86(); + thread func_3F87("survival_player_ready",param_00,self.var_3F84,param_01); + thread func_3F88(param_00); + if(level.console) + { + self notifyonplayercommand("survival_player_ready","+stance"); + } + else + { + self notifyonplayercommand("survival_player_ready","skip"); + } + + self waittill("survival_player_ready"); + if(!isdefined(level.var_3F85)) + { + level.var_3F85 = 1; + } + else + { + level.var_3F85++; + } + + self.var_3F84 maps\_specialops::so_remove_hud_item(1); + if(level.var_3F85 == level.players.size) + { + level notify(param_00); + return; + } + + var_03 = maps\_utility::get_other_player(self); + if(isdefined(var_03) && isdefined(var_03.var_3F84)) + { + var_03.var_3F84.label = &"SO_SURVIVAL_PARTNER_READY"; + } + + self.var_3F84 = maps\_specialops::so_create_hud_item(-2,var_02,&"SO_SURVIVAL_READY_UP_WAIT",self,1); + self.var_3F84 func_3F86(); +} + +//Function Number: 42 +func_3F86() +{ + self.alignx = "left"; + self.fontscale = 0.75; + self.alpha = 0; + if(issplitscreen()) + { + self.horzalign = "center"; + self.x = 36; + self.y = -22; + } + + thread maps\_hud_util::fade_over_time(1,0.5); +} + +//Function Number: 43 +func_3F87(param_00,param_01,param_02,param_03) +{ + level endon(param_01); + self endon(param_00); + for(param_03 = int(param_03);isdefined(param_02) && param_03 > 0;param_03--) + { + param_02 setvalue(param_03); + wait 1; + } +} + +//Function Number: 44 +func_3F88(param_00) +{ + level waittill(param_00); + level.var_3F85 = undefined; + if(isdefined(self.var_3F84)) + { + self.var_3F84 maps\_specialops::so_remove_hud_item(1); + } +} + +//Function Number: 45 +func_3F89() +{ + foreach(var_01 in level.players) + { + if(maps\_utility::is_player_down(var_01)) + { + var_01.laststand_getup_fast = 1; + } + } +} + +//Function Number: 46 +func_3F8A(param_00,param_01) +{ + level endon("special_op_terminated"); + for(param_00 = int(param_00);param_00;param_00--) + { + var_02 = maps\_squad_enemies::spawn_far_squad(level.wave_spawn_locs,func_3F8B("leader"),func_3F8B("follower"),param_01 - 1); + foreach(var_04 in var_02) + { + var_04 setthreatbiasgroup("axis"); + var_04 thread maps\_so_survival_ai::setup_ai_weapon(); + } + } + + return level.leaders.size; +} + +//Function Number: 47 +func_3F8B(param_00) +{ + var_01 = maps\_so_survival_ai::get_squad_type(level.current_wave); + var_02 = maps\_so_survival_ai::get_ai_classname(var_01); + if(isdefined(param_00)) + { + } + + return var_02; +} + +//Function Number: 48 +func_3F8C(param_00,param_01) +{ + var_02 = []; + if(maps\_utility::is_coop()) + { + } + + var_03 = maps\_so_survival_ai::get_ai_classname(param_01); + var_04 = maps\_so_survival_code::get_spawners_by_classname(var_03)[0]; + var_05 = 0; + while(var_05 < var_02) + { + wait 0.05; + var_06 = maps\_so_survival_code::get_furthest_from_these(level.wave_spawn_locs,var_7B,4); + var_04.count = 1; + var_04.origin = var_06.origin; + var_04.angles = var_06.angles; + if(getdvarint("survival_chaos") == 1) + { + var_07 = var_04 maps\_utility::spawn_ai(); + } + else + { + var_07 = var_04 maps\_utility::spawn_ai(1); + } + + if(isdefined(var_07)) + { + var_07 setthreatbiasgroup("axis"); + var_07.ally_ref = maps\_so_survival_ai::get_ai_struct(param_01); + level.special_ai[level.special_ai.size] = var_07; + var_07 thread maps\_so_survival_code::clear_from_special_ai_array_when_dead(); + var_07 thread maps\_so_survival_ai::setup_ai_weapon(); + var_07 thread [[ level.special_ai_behavior_func ]](); + } + + var_05++ = var_7B[var_7B.size]; + } + + return level.special_ai; +} + +//Function Number: 49 +func_3F8D(param_00,param_01) +{ + level endon("special_op_terminated"); + level endon("wave_ended"); + var_02 = level.leaders.size; + for(var_03 = 0;var_03 < param_00;var_03++) + { + if(level.leaders.size >= var_02) + { + wait 0.05; + continue; + } + + var_04 = getaiarray(); + if(var_04.size >= 32 - param_01) + { + wait 0.05; + continue; + } + + var_05 = maps\_squad_enemies::spawn_far_squad(level.wave_spawn_locs,func_3F8B("leader"),func_3F8B("follower"),param_01 - 1); + foreach(var_07 in var_05) + { + var_07 setthreatbiasgroup("axis"); + var_07 thread maps\_so_survival_ai::setup_ai_weapon(); + } + } +} + +//Function Number: 50 +func_3F8E(param_00,param_01) +{ + level endon("special_op_terminated"); + level endon("wave_ended"); + var_02 = level.special_ai.size; + var_03 = 0; + while(var_03 < param_01) + { + if(level.special_ai.size >= var_02) + { + wait 0.05; + continue; + } + + var_04 = getaiarray(); + if(var_04.size > 31) + { + wait 0.05; + continue; + } + + func_3F8C(param_00,1); + var_03++; + wait 0.05; + } +} + +//Function Number: 51 +func_3F8F(param_00) +{ + var_01 = maps\_so_survival_ai::get_bosses_ai(param_00); + var_02 = maps\_so_survival_ai::get_bosses_nonai(param_00); + if(isdefined(var_01) || isdefined(var_02)) + { + return 1; + } + + return 0; +} + +//Function Number: 52 +func_3F90() +{ + common_scripts\utility::flag_clear("bosses_spawned"); + if(level.survival_wave[level.current_wave].var_3D4F && common_scripts\utility::flag_exist("aggressive_mode") && !common_scripts\utility::flag("aggressive_mode")) + { + common_scripts\utility::flag_wait("aggressive_mode"); + } + + level notify("boss_spawning",level.current_wave); + level.bosses = []; + var_00 = maps\_so_survival_ai::get_bosses_ai(level.current_wave); + var_01 = maps\_so_survival_ai::get_bosses_nonai(level.current_wave); + if(isdefined(var_00)) + { + if(getdvarint("survival_chaos") == 1) + { + func_3F91(var_00,0); + } + else + { + func_3F91(var_00,1); + } + + if(level.bosses.size && isdefined(var_01)) + { + level common_scripts\utility::waittill_any_timeout(30,"juggernaut_jumpedout"); + wait 6; + } + } + + if(isdefined(var_01)) + { + thread func_3F92(var_01,!isdefined(var_00)); + } + + common_scripts\utility::flag_set("bosses_spawned"); +} + +//Function Number: 53 +func_3F91(param_00,param_01) +{ + foreach(var_03 in param_00) + { + if(var_03 == "jug_minigun") + { + continue; + } + + if(!issubstr(var_03,"jug_")) + { + continue; + } + + var_04 = maps\_so_survival_code::chopper_wait_for_cloest_open_path_start(maps\_so_survival_code::random_player_origin(),"drop_path_start","script_unload"); + thread maps\_so_survival_ai::spawn_juggernaut(var_03,var_04); + wait 0.5; + } + + if(param_01) + { + thread func_3FB7("juggernaut"); + } +} + +//Function Number: 54 +func_3F92(param_00,param_01) +{ + foreach(var_03 in param_00) + { + if(issubstr(var_03,"chopper")) + { + var_04 = maps\_so_survival_code::chopper_wait_for_cloest_open_path_start(maps\_so_survival_code::random_player_origin(),"chopper_boss_path_start","script_stopnode"); + var_05 = maps\_so_survival_ai::spawn_chopper_boss(var_03,var_04); + continue; + } + } + + if(param_01) + { + thread func_3FB7("chopper"); + } +} + +//Function Number: 55 +spawn_allies(param_00,param_01,param_02) +{ + var_03 = maps\_so_survival_code::chopper_wait_for_cloest_open_path_start(param_00,"drop_path_start","script_unload"); + level notify("so_airsupport_incoming",param_01); + maps\_so_survival_ai::spawn_ally_team(param_01,3,var_03,param_02); +} + +//Function Number: 56 +func_3F93() +{ + wait 0.05; + level.var_3F94["accuracy"] = 3; + level.var_3F94["damagetaken"] = 2; + level.var_3F94["time"] = 2; + if(maps\_utility::is_coop()) + { + level.var_3F94["wavebonus"] = 50; + level.var_3F94["headshot"] = 50; + level.var_3F94["kill"] = 50; + } + else + { + level.var_3F94["wavebonus"] = 25; + level.var_3F94["headshot"] = 20; + level.var_3F94["kill"] = 10; + } + + foreach(var_01 in level.players) + { + var_01.game_performance = []; + var_01.game_performance["headshot"] = 0; + var_01.game_performance["accuracy"] = 0; + var_01.game_performance["damagetaken"] = 0; + var_01.game_performance["kill"] = 0; + var_01.game_performance["credits"] = 0; + var_01.game_performance["downed"] = 0; + var_01.game_performance["revives"] = 0; + var_01.var_3F95 = []; + var_01.var_3F95["headshot"] = 0; + var_01.var_3F95["accuracy"] = 0; + var_01.var_3F95["time"] = 0; + var_01.var_3F95["damagetaken"] = 0; + var_01.var_3F95["kill"] = 0; + var_01.var_3F95["wavebonus"] = 0; + var_01 func_3FD2(); + var_01 thread func_3F97(); + } + + maps\_utility::add_global_spawn_function("axis",::func_3F9E); +} + +//Function Number: 57 +func_3F96() +{ + maps\_specialops::_setplayerdata_single("surHUD_performance_reward",0); + foreach(var_02, var_01 in self.var_3F95) + { + self.var_3F95[var_02] = 0; + maps\_specialops::_setplayerdata_array("surHUD_performance",var_02,0); + maps\_specialops::_setplayerdata_array("surHUD_performance_p2",var_02,0); + maps\_specialops::_setplayerdata_array("surHUD_performance_credit",var_02,0); + } +} + +//Function Number: 58 +func_3F97() +{ + self endon("death"); + thread func_3F99(); + thread func_3F9B(); + thread func_3F9A(); + thread func_3F9C(); + thread func_3F9D(); + thread func_3F9F(); + thread func_3FA2(); + thread func_3FA3(); + thread func_3FA4(); + for(;;) + { + level waittill("wave_ended"); + maps\_player_stats::career_stat_increment("waves_survived",1); + waittillframeend; + var_00 = func_3FA6(); + if(var_00["total"]) + { + thread maps\_utility::givexp("personal_wave_reward",var_00["total"]); + } + + thread func_3FD3(var_00); + level waittill("wave_started"); + self.var_3F98 = 0; + } +} + +//Function Number: 59 +func_3F99() +{ + level endon("special_op_terminated"); + self endon("death"); + for(;;) + { + level waittill("wave_started"); + func_3F96(); + self.stats["kills"] = 0; + self.stats["shots_fired"] = 0; + self.stats["shots_hit"] = 0; + } +} + +//Function Number: 60 +func_3F9A() +{ + level endon("special_op_terminated"); + self endon("death"); + for(;;) + { + self waittill("so_revive_success"); + self.game_performance["revives"]++; + } +} + +//Function Number: 61 +func_3F9B() +{ + level endon("special_op_terminated"); + self endon("death"); + for(;;) + { + self waittill("player_downed"); + self.game_performance["downed"]++; + } +} + +//Function Number: 62 +func_3F9C() +{ + level endon("special_op_terminated"); + self endon("death"); + for(;;) + { + self waittill("deposit_credits",var_00,var_01); + if(self.survival_credit >= -15536 && !isdefined(self.var_DE)) + { + self.var_DE = 1; + thread maps\_specialops::so_achievement_update("GET_RICH_OR_DIE_TRYING"); + } + + if(isdefined(var_01) && var_01) + { + continue; + } + + if(var_00 > 0) + { + self.game_performance["credits"] = self.game_performance["credits"] + var_00; + } + } +} + +//Function Number: 63 +func_3F9D() +{ + level endon("special_op_terminated"); + self endon("death"); + func_3F70(); + for(;;) + { + var_00 = gettime(); + level waittill("wave_ended"); + self.var_3F95["time"] = gettime() - var_00; + level waittill("wave_started"); + } +} + +//Function Number: 64 +func_3F9E() +{ + level endon("special_op_terminated"); + if(!isai(self)) + { + return; + } + + var_00 = 0; + self waittill("death",var_01,var_02,var_03,var_04,var_05,var_06,var_07); + if(maps\_so_survival_code::was_headshot() && isplayer(var_01)) + { + var_08 = "player.performance array is missing headshot setting"; + var_01.var_3F95["headshot"]++; + var_01.game_performance["headshot"]++; + var_01 notify("sur_ch_headshot"); + } +} + +//Function Number: 65 +func_3F9F() +{ + level endon("special_op_terminated"); + self endon("death"); + if(isdefined(self.armor)) + { + self.var_3FA0 = self.armor["points"]; + } + else + { + self.var_3FA0 = 0; + } + + for(;;) + { + self waittill("damage",var_00,var_01,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09); + if(isdefined(var_01) && var_01 != self && isdefined(var_01.team) && var_01.team == self.team) + { + continue; + } + + thread func_3FA1(var_00); + } +} + +//Function Number: 66 +func_3FA1(param_00) +{ + var_01 = 100 + self.var_3FA0; + var_02 = int(min(var_01,param_00)); + self.var_3F95["damagetaken"] = self.var_3F95["damagetaken"] + var_02; + self.game_performance["damagetaken"] = self.game_performance["damagetaken"] + var_02; + waittillframeend; + if(isdefined(self.armor)) + { + self.var_3FA0 = self.armor["points"]; + return; + } + + self.var_3FA0 = 0; +} + +//Function Number: 67 +func_3FA2() +{ + level endon("special_op_terminated"); + self endon("death"); + var_00 = 0; + var_01 = 0; + for(;;) + { + self waittill("weapon_fired"); + var_02 = max(1,float(self.stats["shots_fired"])); + var_03 = float(self.stats["shots_hit"]); + var_00 = var_00 + var_02; + var_01 = var_01 + var_03; + self.var_3F95["accuracy"] = maps\_so_survival_code::int_capped(100 * var_03 / var_02,0,100); + self.game_performance["accuracy"] = maps\_so_survival_code::int_capped(100 * var_01 / var_00,0,100); + } +} + +//Function Number: 68 +func_3FA3() +{ + level endon("special_op_terminated"); + self endon("death"); + for(;;) + { + level waittill("specops_player_kill",var_00); + if(isdefined(var_00) && isplayer(var_00) && var_00 == self) + { + self.var_3F95["kill"]++; + self.game_performance["kill"]++; + } + } +} + +//Function Number: 69 +func_3FA4() +{ + level endon("special_op_terminated"); + self endon("death"); + for(;;) + { + level waittill("wave_ended",var_00); + self.var_3F95["wavebonus"] = var_00; + if(!isdefined(self.var_DF)) + { + self.var_DF = 1; + thread maps\_specialops::so_achievement_update("I_LIVE"); + } + + if(var_00 == 9) + { + thread maps\_specialops::so_achievement_update("SURVIVOR"); + } + + if(var_00 == 14) + { + thread maps\_specialops::so_achievement_update("UNSTOPPABLE"); + } + } +} + +//Function Number: 70 +func_3FA6() +{ + var_00 = self.var_3F95["headshot"] * level.var_3F94["headshot"]; + var_01 = int(max(self.var_3F95["accuracy"] - 25,0)) * level.var_3F94["accuracy"]; + var_02 = 400; + var_02 = var_02 - self.var_3F95["damagetaken"] * level.var_3F94["damagetaken"]; + var_02 = int(max(var_02,0)); + var_03 = self.var_3F95["kill"] * level.var_3F94["kill"]; + var_04 = 0; + var_05 = 90; + var_06 = max(var_05 - int(self.var_3F95["time"] / 1000),0); + var_04 = int(level.var_3F94["time"] * var_06); + var_07 = self.var_3F95["wavebonus"] * level.var_3F94["wavebonus"]; + var_08 = []; + var_09 = 0; + foreach(var_0B in var_7B) + { + var_09 = var_09 + var_0B; + } + + var_7B["total"] = func_3FA7(var_09); + thread func_3FD4(var_7B); + return var_7B; +} + +//Function Number: 71 +func_3FA7(param_00) +{ + return int(max(0,int(param_00))); +} + +//Function Number: 72 +func_3FA8() +{ + self endon("death"); + if(!isdefined(self.var_3FA9)) + { + self.var_3FA9 = 0; + } + + self.var_3FAA = []; + self.var_3F98 = 0; + thread func_3FAD(); + var_00 = self.origin; + var_01 = 0; + var_02 = 0; + for(;;) + { + self.var_3FAB = 0; + self.var_3FAC = self.origin; + var_01 = 0; + var_00 = self.origin; + while(var_01 <= 20) + { + if(distance(var_00,self.origin) < 220) + { + var_01++; + } + else + { + var_01 = var_01 - 2; + } + + if(self.health < 40) + { + var_01--; + } + + if(self.stats["kills"] - var_02 > 0) + { + var_01 = var_01 + self.stats["kills"] - var_02; + } + + if(var_01 <= 0 || level.survival_wave_intermission || maps\_utility::ent_flag_exist("laststand_downed") && maps\_utility::ent_flag("laststand_downed")) + { + var_01 = 0; + var_00 = self.origin; + } + + var_02 = self.stats["kills"]; + wait 1; + } + + self.var_3FAB = 1; + self.var_3FAC = self.origin; + self.var_3FAA[self.var_3FAA.size] = self.var_3FAC; + self notify("camping"); + while(distance(var_00,self.origin) < 260) + { + self.var_3F98++; + wait 1; + } + + self notify("stopped camping"); + } +} + +//Function Number: 73 +func_3FAD() +{ + self endon("death"); + level.var_3FAE = 8; + for(;;) + { + wait 0.05; + if(!isdefined(self.var_3FAB) || !isdefined(self.var_3FAC) || !isdefined(self.var_3F98)) + { + continue; + } + + if(self.var_3FAB) + { + thread func_3FAF(self.var_3FAC,self.var_3F98); + thread func_3FB0(self.var_3FAC,self.var_3F98); + wait level.var_3FAE; + } + } +} + +//Function Number: 74 +func_3FAF(param_00,param_01) +{ + var_02 = getaiarray("axis"); + foreach(var_04 in var_02) + { + var_04 thread maps\_so_survival_code::throw_grenade_at_player(self); + } +} + +//Function Number: 75 +func_3FB0(param_00,param_01) +{ + if(isdefined(level.bosses) && level.bosses.size) + { + var_02 = level.bosses[randomint(level.bosses.size)]; + } +} + +//Function Number: 76 +func_3FB1() +{ + level endon("special_op_terminated"); + foreach(var_01 in level.players) + { + var_01 func_3FB9(); + } + + func_3F70(); + foreach(var_01 in level.players) + { + var_01.survival_credit = 0; + if(getdvarint("survival_chaos") != 1) + { + var_01 thread func_3FB2(); + var_01 thread func_3FB5(); + } + } +} + +//Function Number: 77 +func_3FB2() +{ + self endon("death"); + for(;;) + { + self.var_3FB3 = self.summary["rankxp"]; + self.var_3FB4 = self.survival_credit; + self waittill("xp_updated",var_00); + if(!isdefined(var_00)) + { + continue; + } + + var_01 = self.summary["rankxp"] - self.var_3FB3; + self.survival_credit = self.survival_credit + var_01; + if(isdefined(self.rankupdatetotal) && self.rankupdatetotal > var_01) + { + thread func_3FBA(self.var_3FB4,self.rankupdatetotal); + } + else + { + thread func_3FBA(self.var_3FB4,var_01); + } + + self notify("deposit_credits",var_01); + } +} + +//Function Number: 78 +func_3FB5() +{ + self endon("death"); + for(;;) + { + self.var_3FB3 = self.summary["rankxp"]; + self.var_3FB4 = self.survival_credit; + self waittill("credit_updated",var_00); + var_01 = self.survival_credit - self.var_3FB4; + if(isdefined(self.rankupdatetotal) && self.rankupdatetotal > var_01) + { + thread func_3FBA(self.var_3FB4,self.rankupdatetotal); + } + else + { + thread func_3FBA(self.var_3FB4,var_01); + } + + self notify("deposit_credits",var_01,var_00); + } +} + +//Function Number: 79 +func_3FB6(param_00) +{ + level endon("special_op_terminated"); + var_01 = "so_survival_regular_music"; + wait 1.5; + maps\_utility::musicplaywrapper(var_01); + wait 5; + maps\_utility::music_stop(20); +} + +//Function Number: 80 +func_3FB7(param_00) +{ + level endon("special_op_terminated"); + level endon("end_boss_music"); + common_scripts\utility::flag_set("boss_music"); + maps\_utility::music_stop(3); + if(param_00 == "chopper") + { + var_01 = "so_survival_boss_music_01"; + } + else if(var_01 == "juggernaut") + { + var_01 = "so_survival_boss_music_02"; + } + else + { + var_01 = "so_survival_boss_music_01"; + } + + var_02 = maps\_utility::musiclength(var_01) + 2; + while(common_scripts\utility::flag("boss_music")) + { + maps\_utility::musicplaywrapper(var_01); + wait var_02; + } +} + +//Function Number: 81 +hud_init() +{ + level endon("special_op_terminated"); +} + +//Function Number: 82 +func_3FB8() +{ + thread hud_init(); + thread func_3FD5(); + foreach(var_01 in level.players) + { + var_01 maps\_so_survival_code::player_reward_splash_init(); + var_01 thread func_3FD0(); + var_01 thread func_3FBF(); + if(getdvarint("survival_chaos") != 1) + { + var_01 thread func_3FCD(); + } + + var_01 thread perk_hud(); + var_01 thread func_3FC8(); + } +} + +//Function Number: 83 +func_3FB9() +{ + maps\_specialops::_setplayerdata_single("surHUD_credits",0); + maps\_specialops::_setplayerdata_single("surHUD_credits_delta",0); + maps\_specialops::surhud_enable("credits"); +} + +//Function Number: 84 +func_3FBA(param_00,param_01) +{ + self notify("stop_animate_credits"); + self endon("stop_animate_credits"); + maps\_specialops::_setplayerdata_single("surHUD_credits_delta",0); + maps\_specialops::surhud_animate("credits"); + maps\_specialops::_setplayerdata_single("surHUD_credits",self.survival_credit); + maps\_specialops::_setplayerdata_single("surHUD_credits_delta",param_01); +} + +//Function Number: 85 +func_3FBB() +{ + level endon("special_op_terminated"); + var_00 = "Player is either dead or removed while trying to setup its hud."; + var_01 = 28; + var_02 = maps\_specialops::so_hud_ypos(); + var_03 = var_02 + 12 + var_01; + self.var_3FBC = maps\_specialops::so_create_hud_item(-1,var_02,&"SO_SURVIVAL_SURVIVE_TIME",self,1); + self.var_3FBD = maps\_specialops::so_create_hud_item(-1,var_02 - var_01,undefined,self,1); + self.var_3FBC.alignx = "left"; + self.var_3FBD.alignx = "left"; + self.var_3FBD setshader("hud_show_timer",var_01,var_01); + self.var_3FBD.alpha = 0; + self.var_3FBC.alpha = 0; + thread func_3FBE(self.var_3FBC,self.var_3FBD); +} + +//Function Number: 86 +func_3FBE(param_00,param_01) +{ + level endon("special_op_terminated"); + self endon("death"); + func_3F70(); + for(;;) + { + param_00.label = ""; + param_00 settenthstimerup(0); + var_02 = gettime(); + param_00 thread maps\_hud_util::fade_over_time(1,0.5); + param_01 thread maps\_hud_util::fade_over_time(1,0.5); + level waittill("wave_ended"); + param_00.label = ""; + var_03 = max(1,gettime() - var_02 / 1000); + param_00 settenthstimerstatic(var_03); + var_04 = ""; + if(1) + { + var_04 = common_scripts\utility::waittill_any_timeout(1.75,"wave_started"); + } + + if(isdefined(var_04) && var_04 == "wave_started") + { + param_00 thread maps\_hud_util::fade_over_time(0,0); + param_01 thread maps\_hud_util::fade_over_time(0,0); + continue; + } + + param_00 thread maps\_hud_util::fade_over_time(0,0.5); + param_01 thread maps\_hud_util::fade_over_time(0,0.5); + level waittill("wave_started"); + } +} + +//Function Number: 87 +func_3FBF() +{ + self endon("death"); + self.var_3FC0 = 0; + if(issplitscreen()) + { + self.var_3FC1 = 112 + self == level.player * 27; + } + else + { + self.var_3FC1 = 196; + } + + if(getdvarint("survival_chaos") == 1) + { + self.var_3FC2 = 38; + } + else + { + self.var_3FC2 = 28; + } + + self.var_3FC3 = func_3FCF(self.var_3FC0,self.var_3FC1); + self.var_3FC3 setshader("teamperk_blast_shield",self.var_3FC2,self.var_3FC2); + self.var_3FC3.alpha = 0.85; + self.var_3FC4 = func_3FCF(self.var_3FC0,self.var_3FC1); + self.var_3FC4.alpha = 0; + thread func_3FC6(); + waittillframeend; + for(;;) + { + if(isdefined(self.armor) && isdefined(self.armor["points"]) && self.armor["points"]) + { + if(getdvarint("survival_chaos") == 1) + { + var_00 = 250; + } + else + { + var_00 = 100; + } + + var_01 = maps\_so_survival_code::float_capped(self.armor["points"] / var_00 / 2,0,1); + var_02 = 1 - maps\_so_survival_code::float_capped(self.armor["points"] - var_00 / 2 / var_00 / 2,0,1); + self.var_3FC3.alpha = 0.85; + self.var_3FC3.color = (1,maps\_so_survival_code::float_capped(var_01,0,0.95),maps\_so_survival_code::float_capped(var_01,0,0.7)); + if(getdvarint("survival_chaos") == 1) + { + if(self.armor["points"] < var_00) + { + thread func_3FC5(); + } + } + else + { + thread func_3FC5(); + } + } + else + { + self.var_3FC3.alpha = 0; + } + + common_scripts\utility::waittill_any("damage","health_update"); + } +} + +//Function Number: 88 +func_3FC5() +{ + self endon("death"); + self.var_3FC4.alpha = 0.85; + var_00 = 20; + for(var_01 = 0;var_01 <= var_00;var_01++) + { + var_02 = randomint(int(max(1,5 - var_01 / var_00 / 5))) - int(2 - var_01 / var_00 / 2); + self.var_3FC3.x = self.var_3FC0 + var_02; + self.var_3FC3.y = self.var_3FC1 + var_02; + var_03 = int(var_01 * 40 / var_00); + self.var_3FC4 setshader("teamperk_blast_shield",self.var_3FC2 + var_03,self.var_3FC2 + var_03); + self.var_3FC4.alpha = max(var_00 * 0.85 - var_01 / var_00,0); + wait 0.05; + } + + self.var_3FC4.alpha = 0; + self.var_3FC3.x = self.var_3FC0; + self.var_3FC3.y = self.var_3FC1; +} + +//Function Number: 89 +func_3FC6(param_00) +{ + self endon("death"); + self.var_3FC7 = func_3FCF(self.var_3FC0,self.var_3FC1); + self.var_3FC7.alpha = 0.85; + self.var_3FC7.elemtype = "font"; + self.var_3FC7.label = &"SO_SURVIVAL_ARMOR_POINTS"; + self.var_3FC7.y = self.var_3FC7.y - 2; + self.var_3FC7.x = self.var_3FC7.x - 58; + self.var_3FC7.font = "hudbig"; + self.var_3FC7.fontscale = 0.5; + self.var_3FC7.width = 0; + self.var_3FC7.color = (1,0.95,0.7); + self.var_3FC7.alignx = "left"; + if(isdefined(self.armor)) + { + self.var_3FC7 setvalue(self.armor["points"]); + } + else + { + self.var_3FC7 setvalue(0); + } + + var_01 = 14; + for(;;) + { + if(!isdefined(self.armor) || !isdefined(self.armor["points"]) || !self.armor["points"]) + { + self.var_3FC7.alpha = 0; + wait 0.05; + continue; + } + + self.var_3FC7.alpha = 0.85; + var_02 = ""; + var_03 = 2; + var_04 = 6; + while(var_04 > 0 || var_01 > 0) + { + var_02 = common_scripts\utility::waittill_any_timeout(0.5,"damage","health_update"); + self.var_3FC7 setvalue(self.armor["points"]); + var_04 = var_04 - 0.5; + if(var_01 > 0) + { + var_01 = var_01 - 0.5; + } + + if(self.armor["points"] <= 0) + { + var_03 = 0.5; + break; + } + } + + self.var_3FC7 fadeovertime(var_03); + self.var_3FC7.alpha = 0; + if(var_02 != "damage" && var_02 != "health_update") + { + common_scripts\utility::waittill_any("damage","health_update"); + } + } +} + +//Function Number: 90 +func_3FC8() +{ + self endon("death"); + maps\_specialops::surhud_disable("enemy"); + maps\_specialops::_setplayerdata_single("surHUD_enemy",0); + for(;;) + { + level common_scripts\utility::waittill_either("axis_spawned","axis_died"); + if(!common_scripts\utility::flag("aggressive_mode")) + { + maps\_specialops::surhud_disable("enemy"); + continue; + } + + if(getdvarint("survival_chaos") != 1) + { + maps\_specialops::surhud_enable("enemy"); + maps\_specialops::_setplayerdata_single("surHUD_enemy",level.enemy_remaining); + } + } +} + +//Function Number: 91 +perk_hud() +{ + self endon("death"); + self.var_3FC9 = spawnstruct(); + if(getdvarint("survival_chaos") == 1) + { + self.var_3FC9.var_3FCA = -138 + level.perk_offset; + } + else + { + self.var_3FC9.var_3FCA = -138; + } + + if(issplitscreen()) + { + self.var_3FC9.var_3FCB = 112 + self == level.player * 27; + } + else + { + self.var_3FC9.var_3FCB = 196; + } + + self.var_3FC9.var_3FCC = 28; + self.var_3FC9.icon = func_3FCF(self.var_3FC9.var_3FCA,self.var_3FC9.var_3FCB); + self.var_3FC9.icon.color = (1,1,1); + self.var_3FC9.icon.alpha = 0; + for(;;) + { + self waittill("give_perk",var_00); + var_01 = level.armory["airsupport"][var_00].icon; + self.var_3FC9.icon setshader(var_01,self.var_3FC9.var_3FCC,self.var_3FC9.var_3FCC); + self.var_3FC9.icon.alpha = 0.85; + } +} + +//Function Number: 92 +func_3FCD() +{ + self endon("death"); + self.var_3FCE = spawnstruct(); + self.var_3FCE.var_3FCA = -104; + if(issplitscreen()) + { + self.var_3FCE.var_3FCB = 112 + self == level.player * 27; + } + else + { + self.var_3FCE.var_3FCB = 196; + } + + self.var_3FCE.var_3FCC = 28; + self.var_3FCE.icon = func_3FCF(self.var_3FCE.var_3FCA,self.var_3FCE.var_3FCB); + self.var_3FCE.icon setshader("specialty_self_revive",self.var_3FCE.var_3FCC,self.var_3FCE.var_3FCC); + self.var_3FCE.icon.color = (1,1,1); + self.var_3FCE.icon.alpha = 0; + for(;;) + { + var_00 = common_scripts\utility::waittill_any_return("laststand_lives_updated","player_downed"); + if(var_00 == "player_downed") + { + self.var_3FCE.icon.alpha = 0; + continue; + } + + if(maps\_laststand::get_lives_remaining() > 0) + { + self.var_3FCE.icon.alpha = 1; + continue; + } + + self.var_3FCE.icon.alpha = 0; + } +} + +//Function Number: 93 +func_3FCF(param_00,param_01) +{ + var_02 = newclienthudelem(self); + var_02.hidden = 0; + var_02.elemtype = "icon"; + var_02.hidewheninmenu = 1; + var_02.archived = 0; + var_02.x = param_00; + var_02.y = param_01; + var_02.alignx = "center"; + var_02.aligny = "middle"; + var_02.horzalign = "center"; + var_02.vertalign = "middle"; + return var_02; +} + +//Function Number: 94 +func_3FD0() +{ + self endon("death"); + maps\_specialops::surhud_disable("wave"); + maps\_specialops::_setplayerdata_single("surHUD_wave",0); + for(;;) + { + level waittill("wave_started"); + maps\_specialops::surhud_enable("wave"); + maps\_specialops::_setplayerdata_single("surHUD_wave",level.current_wave); + } +} + +//Function Number: 95 +matchstarttimer(param_00) +{ + var_01 = func_3FD1("hudbig",1); + var_01 maps\_hud_util::setpoint("CENTER","CENTER",0,0); + var_01.sort = 1001; + var_01.glowcolor = (0.15,0.35,0.85); + var_01.color = (0.95,0.95,0.95); + var_01.foreground = 0; + var_01.hidewheninmenu = 1; + var_01 fontpulseinit(); + matchstarttimer_internal(int(param_00),var_01); + var_01 destroy(); +} + +//Function Number: 96 +fontpulseinit(param_00) +{ + self.basefontscale = self.fontscale; + if(isdefined(param_00)) + { + self.maxfontscale = min(param_00,6.3); + } + else + { + self.maxfontscale = min(self.fontscale * 2,6.3); + } + + self.inframes = 2; + self.outframes = 4; +} + +//Function Number: 97 +func_3FD1(param_00,param_01) +{ + var_02 = newclienthudelem(self); + var_02.elemtype = "font"; + var_02.font = "hudbig"; + var_02.fontscale = param_01; + var_02.basefontscale = param_01; + var_02.x = 0; + var_02.y = 0; + var_02.width = 0; + var_02.height = int(level.fontheight * param_01); + var_02.xoffset = 0; + var_02.yoffset = 0; + var_02.children = []; + var_02 maps\_hud_util::setparent(level.uiparent); + var_02.hidden = 0; + return var_02; +} + +//Function Number: 98 +matchstarttimer_internal(param_00,param_01) +{ + while(param_00 > 0) + { + if(param_00 > 99) + { + param_01.alpha = 0; + } + else + { + param_01.alpha = 1; + } + + foreach(var_03 in level.players) + { + var_03 playsound("so_countdown_beep"); + } + + param_01 thread fontpulse(); + wait param_01.inframes * 0.05; + param_01 setvalue(param_00); + param_00--; + wait 1 - param_01.inframes * 0.05; + } +} + +//Function Number: 99 +fontpulse() +{ + self notify("fontPulse"); + self endon("fontPulse"); + self endon("death"); + self changefontscaleovertime(self.inframes * 0.05); + self.fontscale = self.maxfontscale; + wait self.inframes * 0.05; + self changefontscaleovertime(self.outframes * 0.05); + self.fontscale = self.basefontscale; +} + +//Function Number: 100 +func_3FD2() +{ + func_3F96(); + maps\_specialops::surhud_disable("performance"); +} + +//Function Number: 101 +func_3FD3(param_00) +{ + self endon("death"); + if(maps\_utility::is_coop()) + { + waittillframeend; + } + + foreach(var_04, var_02 in self.var_3F95) + { + maps\_specialops::_setplayerdata_array("surHUD_performance",var_04,self.var_3F95[var_04]); + maps\_specialops::_setplayerdata_array("surHUD_performance_credit",var_04,param_00[var_04]); + if(maps\_utility::is_coop()) + { + var_03 = maps\_utility::get_other_player(self); + maps\_specialops::_setplayerdata_array("surHUD_performance_p2",var_04,var_03.var_3F95[var_04]); + } + } + + maps\_specialops::_setplayerdata_single("surHUD_performance_reward",param_00["total"]); + wait 1; + maps\_specialops::surhud_animate("performance"); +} + +//Function Number: 102 +func_3FD4(param_00) +{ + var_01 = "---------------------------------------------"; + var_02 = "COOP"; + if(!maps\_utility::is_coop()) + { + var_02 = "SOLO"; + } + + foreach(var_05, var_04 in param_00) + { + if(var_05 == "total") + { + continue; + } + } +} + +//Function Number: 103 +func_3FD5() +{ + level endon("special_op_terminated"); + func_3F70(); + for(;;) + { + level waittill("wave_started"); + thread func_3FD6(""); + level waittill("wave_ended",var_00); + maps\_so_survival_code::waittill_players_ready_for_splash(10); + thread func_3FD7(var_00); + } +} + +//Function Number: 104 +func_3FD6(param_00) +{ + var_01 = spawnstruct(); + var_01.title = &"SO_SURVIVAL_WAVE_TITLE"; + var_01.duration = 1.5; + var_01.sound = "survival_wave_start_splash"; + common_scripts\utility::array_thread(level.players,::func_3FD8,var_01); +} + +//Function Number: 105 +func_3FD7(param_00) +{ + var_01 = spawnstruct(); + var_01.title = &"SO_SURVIVAL_WAVE_SUCCESS_TITLE"; + var_01.title_set_value = param_00; + var_01.duration = 2.5; + var_01.sound = "survival_wave_end_splash"; + common_scripts\utility::array_thread(level.players,::func_3FD8,var_01); +} + +//Function Number: 106 +func_3FD8(param_00) +{ + if(isdefined(self.doingnotify) && self.doingnotify) + { + while(self.doingnotify) + { + wait 0.05; + } + } + + if(!isdefined(param_00.duration)) + { + param_00.duration = 1.5; + } + + param_00.title_glowcolor = (0.15,0.35,0.85); + param_00.title_color = (0.95,0.95,0.95); + param_00.type = "wave"; + param_00.title_font = "hudbig"; + param_00.playsoundlocally = 1; + param_00.zoomin = 1; + param_00.var_3E34 = 1; + param_00.fadein = 1; + param_00.fadeout = 1; + if(issplitscreen()) + { + param_00.title_basefontscale = 1; + param_00.desc_basefontscale = 1.2; + } + else + { + param_00.title_basefontscale = 1.1; + param_00.desc_basefontscale = 1.2; + } + + maps\_so_survival_code::splash_notify_message(param_00); +} + +//Function Number: 107 +func_3FD9() +{ + level endon("special_op_terminated"); + foreach(var_01 in level.players) + { + var_01 maps\_specialops::surhud_disable("armory"); + var_01 maps\_specialops::_setplayerdata_array("surHUD_unlock_hint_armory","name",""); + var_01 maps\_specialops::_setplayerdata_array("surHUD_unlock_hint_armory","icon",""); + var_01 maps\_specialops::_setplayerdata_array("surHUD_unlock_hint_armory","desc",""); + } + + for(;;) + { + level waittill("armory_open",var_03); + var_04 = ""; + var_05 = ""; + var_06 = var_03.icon; + if(var_03.armory_type == "weapon") + { + var_04 = "@SO_SURVIVAL_ARMORY_WEAPON_AV"; + var_05 = "@SO_SURVIVAL_ARMORY_WEAPON_DESC"; + } + else if(var_03.armory_type == "airsupport") + { + var_04 = "@SO_SURVIVAL_ARMORY_AIRSUPPORT_AV"; + var_05 = "@SO_SURVIVAL_ARMORY_AIRSUPPORT_DESC"; + } + else if(var_03.armory_type == "equipment") + { + var_04 = "@SO_SURVIVAL_ARMORY_EQUIPMENT_AV"; + var_05 = "@SO_SURVIVAL_ARMORY_EQUIPMENT_DESC"; + } + + foreach(var_01 in level.players) + { + var_01 maps\_specialops::_setplayerdata_array("surHUD_unlock_hint_armory","name",var_04); + var_01 maps\_specialops::_setplayerdata_array("surHUD_unlock_hint_armory","icon",var_06); + var_01 maps\_specialops::_setplayerdata_array("surHUD_unlock_hint_armory","desc",var_05); + var_01 maps\_specialops::surhud_animate("armory"); + } + } +} \ No newline at end of file diff --git a/MW3/PC/SP/1577.gsc b/MW3/PC/SP/1577.gsc new file mode 100644 index 0000000..ce4fec6 --- /dev/null +++ b/MW3/PC/SP/1577.gsc @@ -0,0 +1,15 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1577.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 2 ms + * Timestamp: 10/27/2023 2:21:28 AM +*******************************************************************/ + +//Function Number: 1 +main(param_00,param_01,param_02) +{ + lib_061E::main(param_00,"littlebird_player",param_02); +} \ No newline at end of file diff --git a/MW3/PC/SP/1721.gsc b/MW3/PC/SP/1721.gsc new file mode 100644 index 0000000..e448494 --- /dev/null +++ b/MW3/PC/SP/1721.gsc @@ -0,0 +1,24 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 1721.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:21:28 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("body_delta_elite_assault_bb"); + lib_0144::func_1E57("alias_delta_elite_heads_longsleeves",lib_01C2::main()); + self.voice = "delta"; +} + +//Function Number: 2 +precache() +{ + precachemodel("body_delta_elite_assault_bb"); + lib_0144::func_1E56(lib_01C2::main()); +} \ No newline at end of file diff --git a/MW3/PC/SP/18380.gsc b/MW3/PC/SP/18380.gsc new file mode 100644 index 0000000..b60110e --- /dev/null +++ b/MW3/PC/SP/18380.gsc @@ -0,0 +1,22 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 18380.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:21:59 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("fullbody_juggernaut_c"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("fullbody_juggernaut_c"); +} \ No newline at end of file diff --git a/MW3/PC/SP/18661.gsc b/MW3/PC/SP/18661.gsc new file mode 100644 index 0000000..3b49682 --- /dev/null +++ b/MW3/PC/SP/18661.gsc @@ -0,0 +1,18 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 18661.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:22:00 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + level.var_E13["chicken_cage_loop_01"] = %chicken_cage_loop_01; + level.var_E13["chicken_cage_loop_02"] = %chicken_cage_loop_02; + level.var_E13["chicken_cage_death"] = %chicken_cage_death; + level.var_E13["chicken_cage_death_02"] = %chicken_cage_death_02; +} \ No newline at end of file diff --git a/MW3/PC/SP/18662.gsc b/MW3/PC/SP/18662.gsc new file mode 100644 index 0000000..46fd209 --- /dev/null +++ b/MW3/PC/SP/18662.gsc @@ -0,0 +1,34 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 18662.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:22:01 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(!isdefined(level.anim_prop_models)) + { + level.anim_prop_models = []; + } + + var_00 = tolower(getdvar("mapname")); + var_01 = 1; + if(common_scripts\utility::string_starts_with(var_00,"mp_")) + { + var_01 = 0; + } + + var_02 = "hanging_sheet"; + if(var_01) + { + level.anim_prop_models[var_02]["wind_medium"] = %hanging_clothes_sheet_wind_medium; + return; + } + + level.anim_prop_models[var_02]["wind_medium"] = "hanging_clothes_sheet_wind_medium"; +} \ No newline at end of file diff --git a/MW3/PC/SP/18663.gsc b/MW3/PC/SP/18663.gsc new file mode 100644 index 0000000..ceaa1c5 --- /dev/null +++ b/MW3/PC/SP/18663.gsc @@ -0,0 +1,15 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 18663.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:22:01 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + level.var_3A9E = 1; +} \ No newline at end of file diff --git a/MW3/PC/SP/18664.gsc b/MW3/PC/SP/18664.gsc new file mode 100644 index 0000000..8d0fb2c --- /dev/null +++ b/MW3/PC/SP/18664.gsc @@ -0,0 +1,1413 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 18664.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 68 ms + * Timestamp: 10/27/2023 2:22:02 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((786.467,1902.25,281.199),(355.149,248.15,-3.53516)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((617.784,1869.41,271.792),(355.149,248.15,-3.53516)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((474.112,1799.69,273.456),(355.149,248.15,-3.53516)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((757.747,2204.41,297.929),(355.149,248.15,-3.53516)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((573.629,2285.92,278.469),(355.149,248.15,-3.53516)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((442.28,2130.58,273.495),(355.149,248.15,-3.53516)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((294.965,1997.16,270.538),(355.149,248.15,-3.53516)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((120.989,1841.77,270.355),(355.149,248.15,-3.53516)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-37.9112,1765.5,272.891),(355.149,248.15,-3.53516)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((104.954,1706.04,280.241),(355.149,248.15,-3.53516)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-37.4471,1613.62,272.252),(355.149,248.15,-3.53516)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((105.602,1567.48,276.164),(355.149,248.15,-3.53516)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((38.1377,1454.72,267.451),(355.149,248.15,-3.53516)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-70.1655,1364.14,280.503),(355.149,248.15,-3.53516)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((164.108,1362.51,264.607),(355.149,248.15,-3.53516)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((242.576,1568.7,277.386),(355.149,248.15,-3.53516)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((424.562,1566.18,274.889),(355.149,248.15,-3.53516)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((589.098,1657.96,277.816),(355.149,248.15,-3.53516)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((735.7,1587.35,283.379),(355.149,248.15,-3.53516)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((859.264,1762.35,287.877),(355.149,248.15,-3.53516)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((924.537,1587.15,291.519),(358.755,290.064,-5.86977)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((809.637,1468.67,282.85),(357.951,282.101,-5.64053)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((1076.76,1459.96,284.67),(356.478,266.15,-4.86022)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((1037.24,1334.47,280.787),(357.756,280.109,-5.56593)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((910.052,1301.31,284.532),(359.582,298.022,-5.98545)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((593.183,1506.35,278.371),(355.149,248.15,-3.53516)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((73.6873,1279.61,263.691),(355.149,248.15,-3.53516)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((238.541,1228.63,267.423),(355.149,248.15,-3.53516)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((118.457,1109,266.179),(355.149,248.15,-3.53516)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((233.846,1045.85,263.234),(355.149,248.15,-3.53516)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((343.535,935.712,262.847),(355.149,248.15,-3.53516)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((416.375,795.665,263.298),(355.149,248.15,-3.53516)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((481.453,703.29,266.285),(355.149,248.15,-3.53516)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((612.805,836.307,274.608),(355.149,248.15,-3.53516)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((752.11,842.632,280.586),(355.149,248.15,-3.53516)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((687.237,714.342,282.02),(355.149,248.15,-3.53516)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((577.443,586.158,273.903),(355.149,248.15,-3.53516)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((576.253,454.672,268.303),(355.149,248.15,-3.53516)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((714.675,439.63,273.024),(355.149,248.15,-3.53516)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((828.445,369.203,274.061),(355.149,248.15,-3.53516)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((894.751,265.442,269.462),(355.149,248.15,-3.53516)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((1013.66,341.934,274.986),(355.149,248.15,-3.53516)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((1056.6,193.394,268.511),(355.149,248.15,-3.53516)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((1075.22,78.7364,271.637),(355.149,248.15,-3.53516)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((1244.26,189.431,268.499),(355.149,248.15,-3.53516)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((1380.01,249.817,254.322),(355.149,248.15,-3.53516)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((1497.21,213.255,238.209),(355.149,248.15,-3.53516)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((1491.62,371.027,239.966),(1.13765,247.781,-3.52318)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((1656.85,497.27,240),(359.141,247.903,-3.52288)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((1518.25,572.298,244.402),(355.149,248.15,-3.53516)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((1592.71,778.331,240),(355.149,248.15,-3.53516)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((1534.78,920.794,240),(355.149,248.15,-3.53516)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((1358.44,1183.19,241.954),(355.149,248.15,-3.53516)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((1490.28,1298.71,234.976),(355.149,248.15,-3.53516)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((1186.61,1023.91,240),(355.149,248.15,-3.53516)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((885.067,1116.18,240.96),(355.149,248.15,-3.53516)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((1088.73,1044.41,240),(355.149,248.15,-3.53516)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((999.413,957.711,240.461),(355.149,248.15,-3.53516)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((694.53,943.585,282.307),(355.149,248.15,-3.53516)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((794.227,688.614,281.406),(355.149,248.15,-3.53516)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((1311.08,1275.09,238.838),(355.149,248.15,-3.53516)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((1603.72,1057.6,242.981),(355.149,248.15,-3.53516)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((1777.24,658.434,241.074),(0.291561,229.899,-1.85108)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((1649.83,114.26,233.386),(1.25676,281.84,-3.40143)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((1675.91,356.665,232.384),(359.64,255.889,-3.60799)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((1605.32,-7.12134,236.723),(1.25676,281.84,-3.40143)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((1726.16,-105.425,232.594),(1.25676,281.84,-3.40143)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((1668.89,-179.902,237.236),(1.25676,281.84,-3.40143)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((1771.39,-280.552,232.612),(0.522591,269.861,-3.58811)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((1647.09,-330.925,236),(0,261.877,-3.62587)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((1795.99,-437.847,233.573),(359.019,245.907,-3.49085)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((1690.11,-477.737,233.133),(358.66,239.917,-3.36939)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((1572.74,-537.039,246.215),(332.606,192.491,-1.41553)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((1422.4,-563.993,270.46),(356.599,191.915,-1.25897)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((1218.05,-641.59,280.379),(357.684,221.934,-2.79103)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((1303.44,-518.231,276.875),(357.319,213.934,-2.4417)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((1125.61,-460.126,270.946),(357.319,213.934,-2.4417)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((1114.23,-303.472,270.477),(358.204,231.927,-3.15037)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((1136.34,-179.925,286.955),(358.543,237.92,-3.32062)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((1002.4,-495.151,275.126),(357.588,219.934,-2.70851)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((1105.38,-821.279,269.644),(357.783,223.933,-2.87004)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((1060.17,-720.274,294.289),(357.588,219.934,-2.70851)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((1009.33,-938.677,264.895),(357.885,225.932,-2.94559)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((913.674,-902.16,262.144),(359.019,245.907,-3.49084)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((1015.82,-1101.73,265.913),(357.588,219.934,-2.70851)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((994.041,-1213.33,275.073),(357.319,213.935,-2.4417)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((870.4,-1172.91,270.631),(356.558,189.912,-1.1394)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((878.687,-1263.26,279.667),(356.407,163.862,0.486974)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((742.765,-1254.11,273.888),(356.396,177.89,-0.397901)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((765.01,-1145.93,267.847),(356.75,197.923,-1.60782)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((599.725,-1218.36,258.482),(356.396,177.89,-0.397901)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((642.316,-1407.18,284.495),(356.695,195.921,-1.49332)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((573.922,-1124.18,245.608),(356.546,153.844,1.10423)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((457.634,-1008.07,220.551),(3.37415,128.082,2.5089)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((406.385,-881.087,207.219),(12.1509,112.602,3.20212)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((350.098,-748.36,189.106),(8.15703,112.377,3.16233)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((485.008,-695.007,186.78),(10.3183,132.912,7.19988)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((656.724,-675.911,207.858),(10.0241,169.943,12.0178)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((789.238,-712.94,235.767),(13.2815,143.568,-3.01187)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((941.524,-788.882,268.53),(5.86754,185.911,-1.3197)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((859.84,-575.771,265.981),(5.8952,210.04,1.18957)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((662.021,-778.023,258.661),(5.06167,165.835,-3.25123)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((274.786,-598.958,175.602),(1.59102,123.898,-1.80006)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((327.597,-460.378,160.135),(0.879591,103.906,-2.23549)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((250.024,-436.895,164.5),(1.18209,111.902,-2.09141)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((154.916,-402.239,172.073),(355.622,124.505,4.18519)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((12.1824,-296.575,193.199),(355.622,124.505,-1.81481)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((31.0002,-209.509,207.431),(355.622,124.505,-1.81481)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-76.6411,-197.044,215.687),(354.299,148.563,2.04031)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-51.8393,-102.035,218.208),(0.874199,168.227,-7.22188)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((255.455,-270.414,163.086),(358.5,92.588,5.86583)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((340.486,-184.759,176.918),(356.586,112.516,-6.99721)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((246.227,-127.496,180.813),(358.572,112.272,-6.98692)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((227.142,67.2946,180.701),(356.586,112.516,-6.99721)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((104.602,53.2989,173.024),(358.111,124.431,-5.55041)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((63.2771,196.824,174.529),(0.730811,150.303,-1.81641)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-18.5408,158.869,186.982),(0.337265,138.308,8.07139)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-84.8317,261.872,176.831),(357.565,158.12,-0.295068)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-229.637,250.243,167.435),(0.337265,138.308,8.07139)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-272.786,381.651,166.63),(357.565,158.12,-0.295068)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-385.386,353.176,156.807),(4.31846,108.542,-1.16629)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-392.748,553.167,129.947),(357.993,116.089,-0.589025)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-470.095,472.389,141.608),(3.98151,96.5154,-2.03985)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-507.087,601.089,143.75),(3.74652,90.5063,-2.44517)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-150.748,190.607,228.611),(3.98755,150.657,2.028)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-363.591,223.729,219.755),(4.41874,132.613,0.694522)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-524.299,399.694,224.791),(4.27511,106.537,-1.31655)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-8.83301,69.6368,209.851),(348.454,111.109,5.22931)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((221.445,241.378,207.149),(0.980511,164.924,-6.28415)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((12.0189,313.911,210.623),(0.980511,164.924,-6.28415)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-153.617,399.427,224.011),(0.980511,164.924,-6.28415)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-256.945,483.691,195.747),(357.508,133.105,-5.8531)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-365.092,689.274,136.54),(357.713,135.096,-5.93611)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-505.62,782.983,128.596),(356.347,121.144,2.79042)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((401.067,-255.238,193.5),(355.196,107.153,-4.1728)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-278.096,-145.929,219.673),(354.403,190.778,-2.31153)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-451.924,-222.576,210.431),(353.946,168.667,0)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-366.07,-362.858,217.125),(355.341,128.507,3.86974)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-417.32,-481.26,227.509),(354.639,140.533,2.81561)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-671.826,-585.469,317.222),(356.943,108.525,5.22807)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-624.778,-277.954,224.867),(355.77,122.505,4.33532)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-702.775,-156.996,225.894),(355.77,122.505,4.33532)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-800.75,-119.002,229.794),(355.77,122.505,4.33532)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-830.177,20.1207,226.643),(355.341,128.507,3.86974)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-940.552,114.487,238.38),(355.341,128.507,3.86974)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-906.295,227.911,249.656),(355.341,128.507,3.86974)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1024.52,253.351,252.225),(354.639,140.533,2.81561)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1167.62,244.953,250.487),(354.032,158.612,1.01621)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-973.241,370.683,258.991),(354.231,150.572,1.83958)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1003.06,526.938,256.425),(354,160.623,0.80657)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-923.464,644.591,270.324),(354.89,200.81,-3.24995)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-811.596,739.999,289.108),(4.1167,218.171,1.32877)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-701.273,818.379,313.741),(4.1167,218.171,1.32877)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-614.047,818.391,319.94),(4.1167,218.171,1.32877)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-663.506,921.059,319.272),(4.1167,218.171,1.32877)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-558.401,917.43,315.673),(4.30285,206.14,0.44234)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-449.214,908.68,310.38),(354.325,200.125,0)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-493.281,995.962,309.039),(358.118,218.033,1.32605)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-376.391,1012.43,296.592),(358.118,218.033,1.32605)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-409.844,1113.59,297.626),(358.118,218.033,1.32606)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-303.63,1112.45,290.755),(358.118,218.033,1.32606)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-186.766,1076.65,276.75),(354.119,217.94,1.33235)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-170.237,1221.06,279.648),(354.119,217.94,1.33235)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-106.534,1155.32,269.49),(353.062,201.873,-2.86235)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1122.91,647.516,254.721),(354.487,192.786,-2.50593)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1186.75,496.007,245.705),(0,158.718,1.01067)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1332.15,603.903,245.952),(354.032,158.612,1.01617)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1375.67,457.928,245.835),(356.454,144.632,2.42721)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1379.55,215.371,245.389),(355.94,170.666,-0.459494)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1525.76,319.356,244.636),(355.129,204.818,-3.59878)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1619.82,200.077,250.447),(353.946,168.667,0)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1580.25,76.4513,273.715),(354.89,200.81,-3.24995)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1705.4,79.0219,273.971),(355.677,212.825,7.75839)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1761.25,-22.6567,280.915),(355.677,212.825,7.75839)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1932,-88.7801,274.11),(352.226,244.826,4.29531)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1931.91,-306.961,266.045),(351.155,269.061,0.740846)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1867.58,-475.944,272.706),(351.196,281.205,-1.12893)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1778.51,-662.444,285.835),(357.155,269.139,0.732938)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1675.02,-623.241,311.662),(3.49225,257.464,2.55318)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1567.64,-618.214,333.369),(359.929,249.375,3.70345)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1458.37,-567.906,353.672),(359.109,265.257,3.01028)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1262.24,-541.316,364.498),(359.109,265.257,3.01028)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1096.35,-547.995,366),(359.109,265.257,3.01028)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-850.837,-643.89,333.988),(359.109,265.257,3.01028)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-723.133,-643.87,331.412),(359.109,265.257,3.01028)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-953.267,-739.68,360.569),(359.109,265.257,3.01028)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1084.45,-817.992,366),(359.109,265.257,3.01028)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1294.53,-862.447,351.3),(359.109,265.257,3.01028)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1435.02,-796.554,347.513),(359.109,265.257,3.01028)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1745.2,-875.671,326.529),(341.56,258.211,-3.05184)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1686.58,-967.078,353.836),(357.343,251.6,-0.983811)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1795.68,-1050.39,358.623),(357.343,251.6,-0.983811)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1707.79,-1126.52,363.293),(357.343,251.6,-0.983811)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1819.81,-1216.17,369.209),(359.972,275.544,-1.97846)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1864.27,-1333.28,369.663),(358.772,295.605,-2.55338)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1748.81,-1348.89,371.482),(358.772,295.605,-2.55337)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1617.33,-1384.5,371.962),(0.113813,323.575,-2.83089)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1686.39,-1527.81,366.046),(0.113813,323.575,-2.83089)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1452.89,-1407.28,370.921),(0.2125,325.572,-2.8252)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1458.26,-1543.8,369.395),(359.234,305.596,-2.72767)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1362.51,-1528.81,372.591),(359.234,305.596,-2.72767)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1335.28,-1659.8,373.478),(0.506534,331.565,-2.78756)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1218.35,-1666.5,373.617),(359.234,305.596,-2.72767)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1209.28,-943.984,355.448),(3.7742,269.428,-1.75942)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1056.27,-1019.69,356.453),(3.459,257.474,-1.2573)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1257.03,-1104.63,354.957),(357.777,269.612,-1.75692)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1117.96,-1188.52,350.201),(1.04834,251.51,-2.83649)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1236.99,-1278.02,363.331),(356.4,239.772,-3.41464)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1183.21,-1518.5,362.032),(350.411,240.134,-3.45625)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1269.15,-1412.06,371.998),(3.04589,251.41,-2.84003)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1088.05,-1373.85,348.04),(358.396,239.653,-3.40923)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-960.129,-1274.77,336.112),(358.396,239.653,-3.40923)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-837.071,-1168.68,314.277),(351.802,225.891,-1.48855)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-962.875,-1134.89,336.382),(350.102,234.054,-2.42636)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-761.114,-1028.35,294.129),(350.102,234.054,-2.42636)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-625.254,-1013.73,298.297),(3.79808,225.581,-1.47658)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-504.597,-890.271,323.958),(3.79809,225.581,-1.47658)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-283.914,-805.995,360.899),(10.2486,180.378,-4.17704)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-625.495,-883.344,306.636),(356.097,233.8,-2.3958)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-527.629,-718.901,294.936),(351.339,252.252,-5.38514)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-42.264,-639.468,396.699),(10.8867,212.939,1.95485)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-96.3961,-597.531,390.261),(10.6724,241.519,0.910933)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-170.431,-573.308,383.78),(10.6724,241.519,0.910933)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-297.549,-660.606,355.344),(16.6507,194.299,16.4797)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1144.26,-1812.47,372.668),(357.852,119.547,3.09522)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-995.275,-1813.88,362.661),(356.923,139.547,2.17412)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1067.22,-2032.63,375.319),(358.542,107.561,3.47381)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-933.323,-1989.01,365.53),(357.54,125.544,2.85389)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-746.891,-1862.27,325.576),(350.927,139.317,2.19851)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-657.113,-2005.95,299.063),(355.854,119.439,3.10116)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-988.412,-2277.27,379.725),(357.852,119.547,3.09522)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-763.072,-2284.43,332.494),(356.712,145.552,1.84042)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-518.896,-2228.84,298.898),(356.923,139.547,2.17412)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-490.642,-1887.36,293.589),(356.443,155.566,1.2411)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-646.158,-1731.16,327.375),(356.262,167.59,0.47319)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-313.878,-2153.96,327.765),(356.333,161.577,0.862041)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-144.635,-2029.34,317.178),(356.263,167.59,0.473465)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-139.048,-2214.95,327.365),(356.592,149.557,1.60646)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((31.4691,-2362.88,320.68),(357.082,135.544,2.38351)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((207.289,-2430.39,336.06),(2.62683,150.815,-15.4388)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((96.5965,-2527.04,323.576),(359.436,133.344,-5.50568)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((284.854,-2589.51,348.524),(1.16548,169.352,-5.96036)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((349.142,-2456.37,369.111),(1.78101,175.323,-5.80675)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((458.17,-2364.99,374.963),(1.67499,227.457,-2.16545)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((588.908,-2422.83,379.87),(2.26209,245.458,-1.54195)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((560.903,-2580.86,383.739),(1.43953,221.459,-2.32859)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((416.383,-2790.66,377.878),(0.92411,209.468,-2.57683)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((338.763,-3044.78,369.088),(1.18832,215.463,-2.46621)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((261.844,-3212.08,368.225),(359.234,173.506,-2.62804)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((64.4731,-3198.47,359.539),(6.45301,155.202,-2.27652)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-64.4454,-3102.55,328.864),(3.83298,137.345,-1.67875)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((264.285,-2821.19,350.891),(5.78975,185.207,-2.74384)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((86.0377,-2789.24,318.886),(6.04468,191.234,-2.12197)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-56.2504,-2909.7,303.731),(5.09295,173.173,-3.88921)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-247.885,-2985.97,299.554),(358.982,129.512,-6.33155)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-297.483,-2813.24,310.186),(358.285,141.645,-5.99158)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-475.578,-2821.93,330.933),(1.96332,133.227,-2.28902)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-539.177,-2591.79,329.091),(1.44468,121.233,-2.64699)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-817.649,-2508.3,357.845),(355.968,133.467,-2.29335)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-889.26,-2343.93,348.793),(0.556434,103.252,-2.96359)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-525.354,-2411.57,311.163),(359.928,91.2682,-3.01447)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-404.229,-2185.8,320.414),(354.461,101.567,-2.99508)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-669.314,-2202.17,301.934),(358.966,111.342,-2.85751)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-344.331,-1923.55,301.957),(0.556424,103.252,-2.96359)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-520.228,-1675.09,289.468),(359.614,85.2763,-2.99052)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-74.0083,-1876.33,284.905),(4.89488,70.9986,-2.81829)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((22.5131,-1721.22,235.771),(4.89488,70.9986,-2.81829)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((113.574,-1605.16,217.788),(4.89488,70.9986,-2.81829)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((80.433,-1505.11,202.921),(5.56284,91.072,-0.970109)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((144.206,-1309.98,182.022),(5.16253,77.0158,-2.29037)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((23.6637,-1313.51,181.24),(4.57361,64.9867,-3.31494)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((129.511,-1199.39,190.2),(5.07947,75.0095,-2.46947)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((149.28,-1009.93,192.27),(4.4552,62.984,-3.47258)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((196.957,-849.436,183.166),(3.63652,50.9818,-4.32251)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-43.9129,-1062.41,186.373),(359.648,51.283,-4.31387)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-219.435,-1245.68,190.755),(4.98024,48.9158,-0.742658)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-236.449,-1419.19,191.785),(5.02553,60.9617,0.311678)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-435.145,-1327.36,214.958),(4.95127,46.9084,13.0836)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-533.424,-1504.87,248.18),(4.09305,59.0793,17.8366)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-638.625,-1592.47,315.955),(15.4995,62.8686,18.4847)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((590.685,-1541.67,284.039),(359.682,221.837,-2.78877)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((544.01,-1655,289.053),(358.898,243.911,-3.45458)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((578.355,-1765.57,305.141),(353.153,248.275,-3.54788)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((432.587,-1866.89,335.293),(356.069,280.291,-6.63571)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((560.394,-1933.23,336.982),(354.778,268.322,-5.6772)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((458.474,-2038.92,349.826),(357.029,288.247,-7.11544)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((575.309,-2129.36,363.144),(354.039,260.318,-4.89606)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((513.289,-2217.18,370.527),(354.778,268.322,-5.6772)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((580.484,-2291.57,378.66),(4.17444,261.434,-5.08852)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((464.162,-2502.83,375.128),(358.558,235.971,-2.233)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1863.09,238.042,244.649),(356.848,205.325,2.65334)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1492.79,604.949,245.874),(359.148,167.368,4.03004)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1503.36,733.935,245.78),(0.434169,149.413,4.09602)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1654.08,825.828,253.294),(0,155.398,4.11892)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1671.74,679.239,257.436),(0.859591,143.428,4.02838)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1794.64,796.001,260.597),(359.008,169.363,3.99794)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1919.62,726.063,276.562),(357.822,187.331,3.49686)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-2012.68,622.894,274.888),(357.143,199.324,2.96816)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-2034.91,467.555,261.416),(357.584,191.327,3.33662)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1958.39,875.207,284.118),(359.008,169.363,3.99794)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1804.01,937.011,275.009),(358.869,171.359,3.96098)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1913.96,1022.32,279.496),(358.199,181.34,3.70505)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1833.58,1146.49,272.349),(358.596,175.35,3.87267)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-2001.3,1131.71,283.133),(358.596,175.35,3.87267)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1948.32,1265.03,279.512),(358.869,171.359,3.96098)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-2063.41,1350.23,281.414),(358.199,181.34,3.70505)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-2166.03,1268.69,285.672),(1.00343,169.503,-2.00204)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-2287.11,1302.07,291.267),(1.20717,175.5,-1.88624)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-2092.83,920.189,290.497),(0.565363,157.509,-2.16683)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-2184.33,1115.86,282.163),(1.39769,181.499,-1.74977)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1580.82,1198.66,260.68),(1.20717,175.5,-1.88624)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-114.722,1956.55,267.728),(2.23204,237.524,0.180745)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-274.269,1978.57,264.57),(2.22082,225.514,-0.287507)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-386.552,1882.15,261.196),(2.2387,231.519,0)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-517.991,1995.38,261.252),(2.2387,231.519,0)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-703.852,1890.67,251.106),(2.03556,257.537,0.933556)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-647.492,2036.26,260.843),(1.96548,261.539,1.07331)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-591.706,1772.1,234.743),(2.18515,245.529,0.489775)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-529.09,1627.3,222.264),(10.1118,213.401,-0.75436)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-754.743,1485.83,170.695),(10.1118,213.401,-0.75436)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-751.686,1672.51,202.102),(10.1118,213.401,-0.75436)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-784.941,1295.59,135.146),(10.1118,213.401,-0.75436)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-717.657,1157.81,130.013),(358.113,213.558,-0.743035)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1106.23,1430.86,165.549),(332.115,213.927,-0.840198)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1242.12,1413.01,221.181),(344.31,201.275,2.63336)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1473.65,1457.85,242.835),(352.122,207.639,0.909417)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1377.16,1258.85,257.18),(352.484,195.535,2.53659)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1619.72,1404.77,256.508),(352.484,195.535,2.53659)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1784.01,1416,263.944),(352.325,199.567,2.00339)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1903.16,1409.48,272.616),(352.325,199.567,2.00339)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_detail_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1198.66,1233.14,253.46),(353.982,173.429,5.17399)); + var_00 = common_scripts\utility::createoneshoteffect("trash_spiral_runner"); + var_00 common_scripts\_createfx::set_origin_and_angles((674.023,2294.11,289.933),(270,0,0)); + var_00.v["soundalias"] = "emt_paper_flutter_rustle_ext"; + var_00 = common_scripts\utility::createoneshoteffect("dust_spiral_runner_small"); + var_00 common_scripts\_createfx::set_origin_and_angles((282.44,2103.5,266.683),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("dust_spiral_runner_small"); + var_00 common_scripts\_createfx::set_origin_and_angles((1043.11,1569.31,302.968),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("dust_spiral_runner_small"); + var_00 common_scripts\_createfx::set_origin_and_angles((904.783,1267.04,286.636),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("dust_spiral_runner_small"); + var_00 common_scripts\_createfx::set_origin_and_angles((1473.17,1335.77,237.093),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("dust_spiral_runner_small"); + var_00 common_scripts\_createfx::set_origin_and_angles((1442.97,948.828,240),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("dust_spiral_runner_small"); + var_00 common_scripts\_createfx::set_origin_and_angles((1739.55,662.578,242.761),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("trash_spiral_runner"); + var_00 common_scripts\_createfx::set_origin_and_angles((581.451,373.831,274.485),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("trash_spiral_runner"); + var_00 common_scripts\_createfx::set_origin_and_angles((1269.23,468.799,304.826),(270,0,0)); + var_00.v["soundalias"] = "emt_paper_flutter_rustle_both"; + var_00 = common_scripts\utility::createoneshoteffect("trash_spiral_runner"); + var_00 common_scripts\_createfx::set_origin_and_angles((1850.01,-571.428,244.956),(270,0,0)); + var_00.v["soundalias"] = "emt_paper_flutter_rustle_ext"; + var_00 = common_scripts\utility::createoneshoteffect("trash_spiral_runner"); + var_00 common_scripts\_createfx::set_origin_and_angles((1194.84,-220.585,294.35),(270,0,0)); + var_00.v["soundalias"] = "emt_paper_flutter_rustle_ext"; + var_00 = common_scripts\utility::createoneshoteffect("trash_spiral_runner"); + var_00 common_scripts\_createfx::set_origin_and_angles((806.474,-2627.31,390.447),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_cliff_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((1340.47,-2286.85,501.026),(0.833577,262.043,5.94202)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_cliff_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((1204.36,-2558.81,448.214),(0.833577,262.043,5.94202)); + var_00 = common_scripts\utility::createoneshoteffect("sand_spray_cliff_oriented_runner_hardhat"); + var_00 common_scripts\_createfx::set_origin_and_angles((767.895,-3373.93,416.085),(0.833577,262.043,5.94202)); + var_00 = common_scripts\utility::createoneshoteffect("trash_spiral_runner"); + var_00 common_scripts\_createfx::set_origin_and_angles((258.751,-3286.69,368.485),(270,0,0)); + var_00.v["soundalias"] = "emt_paper_flutter_rustle_ext"; + var_00 = common_scripts\utility::createoneshoteffect("trash_spiral_runner"); + var_00 common_scripts\_createfx::set_origin_and_angles((1148.2,-2390.45,450.355),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("trash_spiral_runner"); + var_00 common_scripts\_createfx::set_origin_and_angles((416.394,-1575.39,339.426),(270,0,0)); + var_00.v["soundalias"] = "emt_paper_flutter_rustle_ext"; + var_00 = common_scripts\utility::createoneshoteffect("trash_spiral_runner"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1663.87,1101.89,283.94),(270,0,0)); + var_00.v["soundalias"] = "emt_paper_flutter_rustle_ext"; + var_00 = common_scripts\utility::createoneshoteffect("trash_spiral_runner"); + var_00 common_scripts\_createfx::set_origin_and_angles((-146.426,1759.15,270.73),(270,0,0)); + var_00.v["soundalias"] = "emt_paper_flutter_rustle_ext"; + var_00 = common_scripts\utility::createoneshoteffect("trash_spiral_runner"); + var_00 common_scripts\_createfx::set_origin_and_angles((254.11,1758.67,281.691),(270,0,0)); + var_00.v["soundalias"] = "emt_paper_flutter_rustle_ext"; + var_00 = common_scripts\utility::createoneshoteffect("trash_spiral_runner"); + var_00 common_scripts\_createfx::set_origin_and_angles((-147.157,1392.13,299.951),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("trash_spiral_runner"); + var_00 common_scripts\_createfx::set_origin_and_angles((767.266,574.632,300.735),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("trash_spiral_runner"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1351.44,1204.81,282.879),(270,0,0)); + var_00.v["soundalias"] = "emt_paper_flutter_rustle_ext"; + var_00 = common_scripts\utility::createoneshoteffect("trash_spiral_runner"); + var_00 common_scripts\_createfx::set_origin_and_angles((-325.711,533.04,148.952),(270,0,0)); + var_00.v["soundalias"] = "emt_paper_flutter_rustle_ext"; + var_00 = common_scripts\utility::createoneshoteffect("trash_spiral_runner"); + var_00 common_scripts\_createfx::set_origin_and_angles((298.062,123.884,190.216),(270,0,0)); + var_00.v["soundalias"] = "emt_paper_flutter_rustle_ext"; + var_00 = common_scripts\utility::createoneshoteffect("trash_spiral_runner"); + var_00 common_scripts\_createfx::set_origin_and_angles((1009.27,-733.069,294.168),(270,0,0)); + var_00.v["soundalias"] = "emt_paper_flutter_rustle_ext"; + var_00 = common_scripts\utility::createoneshoteffect("trash_spiral_runner"); + var_00 common_scripts\_createfx::set_origin_and_angles((516.539,-1233.78,258.541),(270,0,0)); + var_00.v["soundalias"] = "emt_paper_flutter_rustle_ext"; + var_00 = common_scripts\utility::createoneshoteffect("falling_dirt_area_runner"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1874.11,-170.668,464.05),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("falling_dirt_area_runner"); + var_00 common_scripts\_createfx::set_origin_and_angles((-632.933,-1690.77,512.623),(270,0,0)); + var_00.v["delay"] = 25; + var_00 = common_scripts\utility::createoneshoteffect("falling_dirt_area_runner"); + var_00 common_scripts\_createfx::set_origin_and_angles((-48.7742,-2268.12,462.17),(270,0,0)); + var_00.v["delay"] = -25; + var_00 = common_scripts\utility::createoneshoteffect("falling_dirt_area_runner"); + var_00 common_scripts\_createfx::set_origin_and_angles((-469.447,-1964.43,468.568),(270,0,0)); + var_00.v["delay"] = 25; + var_00 = common_scripts\utility::createoneshoteffect("falling_dirt_area_runner"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1189.23,-1787.8,544.924),(270,0,0)); + var_00.v["delay"] = 25; + var_00 = common_scripts\utility::createoneshoteffect("falling_dirt_area_runner"); + var_00 common_scripts\_createfx::set_origin_and_angles((-606.002,-2651.77,513.481),(270,0,0)); + var_00.v["delay"] = 25; + var_00 = common_scripts\utility::createoneshoteffect("falling_dirt_area_runner"); + var_00 common_scripts\_createfx::set_origin_and_angles((-118.416,-1973.25,476.399),(270,0,0)); + var_00.v["delay"] = 25; + var_00 = common_scripts\utility::createoneshoteffect("leaves_fall_gentlewind_mp_village"); + var_00 common_scripts\_createfx::set_origin_and_angles((154.221,-3000,607.943),(270,0,-162)); + var_00 = common_scripts\utility::createoneshoteffect("falling_dirt_area_runner"); + var_00 common_scripts\_createfx::set_origin_and_angles((141.953,-3252.06,368.04),(270,0,0)); + var_00.v["delay"] = 25; + var_00 = common_scripts\utility::createoneshoteffect("leaves_fall_gentlewind_mp_village"); + var_00 common_scripts\_createfx::set_origin_and_angles((605.399,-853.56,381.731),(270,0,-162)); + var_00 = common_scripts\utility::createoneshoteffect("leaves_fall_gentlewind_mp_village"); + var_00 common_scripts\_createfx::set_origin_and_angles((190.598,-954.435,355.305),(270,0,-162)); + var_00 = common_scripts\utility::createoneshoteffect("leaves_fall_gentlewind_mp_village"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1248.6,1186,638.124),(270,0,-162)); + var_00 = common_scripts\utility::createoneshoteffect("leaves_fall_gentlewind_mp_village"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1786.13,1280.55,510),(270,0,-162)); + var_00 = common_scripts\utility::createoneshoteffect("leaves_fall_gentlewind_mp_village"); + var_00 common_scripts\_createfx::set_origin_and_angles((-582.281,1460.77,564.674),(270,0,-162)); + var_00 = common_scripts\utility::createoneshoteffect("leaves_fall_gentlewind_mp_village_far"); + var_00 common_scripts\_createfx::set_origin_and_angles((-633.696,2815.25,1203.75),(270,0,-162)); + var_00 = common_scripts\utility::createoneshoteffect("leaves_fall_gentlewind_mp_village"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1419.97,1964.13,654.106),(270,0,-162)); + var_00 = common_scripts\utility::createoneshoteffect("leaves_fall_gentlewind_mp_village_far"); + var_00 common_scripts\_createfx::set_origin_and_angles((-2486.32,1793.61,947.223),(270,0,-162)); + var_00 = common_scripts\utility::createoneshoteffect("leaves_fall_gentlewind_mp_village"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1738.8,568.678,606.504),(270,0,-162)); + var_00 = common_scripts\utility::createoneshoteffect("leaves_fall_gentlewind_mp_village"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1731.6,-938.823,589.633),(270,0,-162)); + var_00 = common_scripts\utility::createoneshoteffect("leaves_fall_gentlewind_mp_village"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1865.72,-628.034,582.549),(270,0,-162)); + var_00 = common_scripts\utility::createoneshoteffect("leaves_fall_gentlewind_mp_village"); + var_00 common_scripts\_createfx::set_origin_and_angles((-2224.71,-1609.72,726.102),(270,0,-162)); + var_00 = common_scripts\utility::createoneshoteffect("leaves_fall_gentlewind_mp_village"); + var_00 common_scripts\_createfx::set_origin_and_angles((-2311.92,-1173.43,888.589),(270,0,-162)); + var_00 = common_scripts\utility::createoneshoteffect("leaves_fall_gentlewind_mp_village"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1750.32,-1142.31,524.21),(270,0,-162)); + var_00 = common_scripts\utility::createoneshoteffect("leaves_fall_gentlewind_mp_village"); + var_00 common_scripts\_createfx::set_origin_and_angles((-664.84,-2007.81,789.903),(270,0,-162)); + var_00 = common_scripts\utility::createoneshoteffect("leaves_fall_gentlewind_mp_village"); + var_00 common_scripts\_createfx::set_origin_and_angles((1563.94,-2389.49,894.809),(270,0,-162)); + var_00 = common_scripts\utility::createoneshoteffect("leaves_fall_gentlewind_mp_village"); + var_00 common_scripts\_createfx::set_origin_and_angles((1622.46,-3636.97,784.047),(270,0,-162)); + var_00 = common_scripts\utility::createoneshoteffect("leaves_fall_gentlewind_mp_village_far"); + var_00 common_scripts\_createfx::set_origin_and_angles((1247.37,-4522.34,653.476),(270,0,-162)); + var_00 = common_scripts\utility::createoneshoteffect("leaves_fall_gentlewind_mp_village"); + var_00 common_scripts\_createfx::set_origin_and_angles((1057,-1456.49,694.115),(270,0,-162)); + var_00 = common_scripts\utility::createoneshoteffect("leaves_fall_gentlewind_mp_village"); + var_00 common_scripts\_createfx::set_origin_and_angles((1505.87,-1575.77,775.551),(270,0,-162)); + var_00 = common_scripts\utility::createoneshoteffect("leaves_fall_gentlewind_mp_village"); + var_00 common_scripts\_createfx::set_origin_and_angles((1360.24,-802.073,532),(270,0,-162)); + var_00 = common_scripts\utility::createoneshoteffect("leaves_fall_gentlewind_mp_village_far"); + var_00 common_scripts\_createfx::set_origin_and_angles((2561.41,-180.93,990.199),(270,0,-162)); + var_00 = common_scripts\utility::createoneshoteffect("leaves_fall_gentlewind_mp_village_far"); + var_00 common_scripts\_createfx::set_origin_and_angles((3262.49,-1001.48,1648.61),(270,0,-162)); + var_00 = common_scripts\utility::createoneshoteffect("leaves_fall_gentlewind_mp_village_far"); + var_00 common_scripts\_createfx::set_origin_and_angles((3526.29,1571.91,1273.18),(270,0,-162)); + var_00 = common_scripts\utility::createoneshoteffect("leaves_fall_gentlewind_mp_village"); + var_00 common_scripts\_createfx::set_origin_and_angles((4939.56,3216.34,1517.13),(270,0,-162)); + var_00 = common_scripts\utility::createoneshoteffect("birds_takeoff_infrequent_runner"); + var_00 common_scripts\_createfx::set_origin_and_angles((-491.888,1396.77,289.52),(270,0,0)); + var_00.v["delay"] = -45; + var_00 = common_scripts\utility::createoneshoteffect("birds_takeoff_infrequent_runner"); + var_00 common_scripts\_createfx::set_origin_and_angles((3410.37,-978.272,1823.63),(270,0,0)); + var_00.v["delay"] = -150; + var_00 = common_scripts\utility::createoneshoteffect("leaves_fall_gentlewind_mp_village_far"); + var_00 common_scripts\_createfx::set_origin_and_angles((-3101.55,-195.008,2087.91),(270,0,0)); + var_00.v["delay"] = -95; + var_00 = common_scripts\utility::createoneshoteffect("birds_takeoff_infrequent_runner"); + var_00 common_scripts\_createfx::set_origin_and_angles((47.7728,488.594,497.138),(270,0,-178)); + var_00.v["delay"] = -125; + var_00 = common_scripts\utility::createoneshoteffect("insect_trail_runner_icbm"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1157.01,710.854,249.989),(270,10.9541,-78.954)); + var_00 = common_scripts\utility::createoneshoteffect("insect_trail_runner_icbm"); + var_00 common_scripts\_createfx::set_origin_and_angles((-746.599,847.599,312.298),(270,10.9541,-78.954)); + var_00 = common_scripts\utility::createoneshoteffect("insects_light_hunted_a_mp"); + var_00 common_scripts\_createfx::set_origin_and_angles((-539.387,800.374,318.139),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("insect_trail_runner_icbm"); + var_00 common_scripts\_createfx::set_origin_and_angles((-326.83,991.893,296.605),(270,10.9541,-78.954)); + var_00 = common_scripts\utility::createoneshoteffect("insects_light_hunted_a_mp"); + var_00 common_scripts\_createfx::set_origin_and_angles((-383.342,1176.03,295.168),(270,10.9541,-78.954)); + var_00 = common_scripts\utility::createoneshoteffect("insects_light_hunted_a_mp"); + var_00 common_scripts\_createfx::set_origin_and_angles((315.788,1162.44,281.269),(270,10.9541,-78.954)); + var_00 = common_scripts\utility::createoneshoteffect("insects_light_hunted_a_mp"); + var_00 common_scripts\_createfx::set_origin_and_angles((-178.138,1626.63,272.956),(270,10.9541,-78.954)); + var_00 = common_scripts\utility::createoneshoteffect("insect_trail_runner_icbm"); + var_00 common_scripts\_createfx::set_origin_and_angles((-586.345,1789.53,238.946),(270,1.68468,-55.6846)); + var_00 = common_scripts\utility::createoneshoteffect("insects_light_hunted_a_mp"); + var_00 common_scripts\_createfx::set_origin_and_angles((-358.015,1865.72,261.394),(270,4.08562,-132.086)); + var_00 = common_scripts\utility::createoneshoteffect("insect_trail_runner_icbm"); + var_00 common_scripts\_createfx::set_origin_and_angles((-718.549,1476.09,183.193),(270,3.57633,-85.5763)); + var_00 = common_scripts\utility::createoneshoteffect("insect_trail_runner_icbm"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1383.57,1539,242.661),(270,356.634,-70.6335)); + var_00 = common_scripts\utility::createoneshoteffect("insect_trail_runner_icbm"); + var_00 common_scripts\_createfx::set_origin_and_angles((-789.116,1037.51,135.915),(270,349.38,-121.38)); + var_00 = common_scripts\utility::createoneshoteffect("insects_light_hunted_a_mp"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1644.2,1460.04,262.016),(270,0,0)); + var_00.v["soundalias"] = "emt_cicada_loop"; + var_00 = common_scripts\utility::createoneshoteffect("insects_light_hunted_a_mp"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1762.6,1199.37,268.344),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("insects_light_hunted_a_mp"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1736.98,866.196,261.483),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("insect_trail_runner_icbm"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1632.96,598.713,247.792),(270,356.987,87.0128)); + var_00 = common_scripts\utility::createoneshoteffect("insects_light_hunted_a_mp"); + var_00 common_scripts\_createfx::set_origin_and_angles((-2043.81,301.096,262.552),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("insects_light_hunted_a_mp"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1664.5,-30.686,300.649),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("insects_light_hunted_a_mp"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1911.64,-0.5522,270.91),(270,0,0)); + var_00.v["soundalias"] = "emt_cricket_loop"; + var_00 = common_scripts\utility::createoneshoteffect("insect_trail_runner_icbm"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1907.69,-437.117,275.035),(270,1.2946,30.7054)); + var_00 = common_scripts\utility::createoneshoteffect("insects_light_hunted_a_mp"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1857.05,-852.015,341.756),(270,0,0)); + var_00.v["soundalias"] = "emt_cicada_loop"; + var_00 = common_scripts\utility::createoneshoteffect("insects_light_hunted_a_mp"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1563.83,-544.528,339.288),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("insect_trail_runner_icbm"); + var_00 common_scripts\_createfx::set_origin_and_angles((-716.823,-714.491,334.857),(270,0,80)); + var_00 = common_scripts\utility::createoneshoteffect("insect_trail_runner_icbm"); + var_00 common_scripts\_createfx::set_origin_and_angles((-68.9483,-573.393,388.784),(270,0,170)); + var_00 = common_scripts\utility::createoneshoteffect("insects_light_hunted_a_mp"); + var_00 common_scripts\_createfx::set_origin_and_angles((-733.148,-546.587,332.367),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("leaves_fall_gentlewind_mp_village_far"); + var_00 common_scripts\_createfx::set_origin_and_angles((-913.141,-3246.55,2389.47),(270,0,-162)); + var_00 = common_scripts\utility::createoneshoteffect("insects_dragonfly_runner_a"); + var_00 common_scripts\_createfx::set_origin_and_angles((-401.528,-873.581,347.698),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("insects_dragonfly_runner_a"); + var_00 common_scripts\_createfx::set_origin_and_angles((-234.454,-245.574,218.6),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("insects_dragonfly_runner_a"); + var_00 common_scripts\_createfx::set_origin_and_angles((-918.805,1277,131.454),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("insects_dragonfly_runner_a"); + var_00 common_scripts\_createfx::set_origin_and_angles((286.567,771.273,263.831),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("insects_dragonfly_runner_a"); + var_00 common_scripts\_createfx::set_origin_and_angles((759.713,-773.827,243.817),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("insects_dragonfly_runner_a"); + var_00 common_scripts\_createfx::set_origin_and_angles((490.146,-1774.78,312.532),(270,355.236,94.7636)); + var_00 = common_scripts\utility::createoneshoteffect("insects_dragonfly_runner_a"); + var_00 common_scripts\_createfx::set_origin_and_angles((-59.4488,-2228.5,334.635),(270,0,-36)); + var_00 = common_scripts\utility::createoneshoteffect("insects_dragonfly_runner_a"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1103.53,-1893.62,373.899),(270,350.538,-68.5376)); + var_00 = common_scripts\utility::createoneshoteffect("insects_dragonfly_runner_a"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1376.56,-925.413,350.624),(270,0,154)); + var_00 = common_scripts\utility::createoneshoteffect("insect_trail_runner_icbm"); + var_00 common_scripts\_createfx::set_origin_and_angles((-687.548,-1144.13,307.41),(270,359.306,16.694)); + var_00 = common_scripts\utility::createoneshoteffect("insect_trail_runner_icbm"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1266.28,-1670.78,373.844),(270,359.068,34.9315)); + var_00 = common_scripts\utility::createoneshoteffect("insect_trail_runner_icbm"); + var_00 common_scripts\_createfx::set_origin_and_angles((-817.369,-1973.86,337.106),(270,2.60256,51.3974)); + var_00 = common_scripts\utility::createoneshoteffect("insect_trail_runner_icbm"); + var_00 common_scripts\_createfx::set_origin_and_angles((-529.263,-2043.52,325.824),(270,0,124)); + var_00 = common_scripts\utility::createoneshoteffect("insect_trail_runner_icbm"); + var_00 common_scripts\_createfx::set_origin_and_angles((127.466,-2483.78,325.705),(270,359.19,14.8098)); + var_00 = common_scripts\utility::createoneshoteffect("insect_trail_runner_icbm"); + var_00 common_scripts\_createfx::set_origin_and_angles((-332.601,-2867.38,313.747),(270,0,6)); + var_00 = common_scripts\utility::createoneshoteffect("insect_trail_runner_icbm"); + var_00 common_scripts\_createfx::set_origin_and_angles((-517.054,-1883.92,291.817),(270,355.236,148.764)); + var_00 = common_scripts\utility::createoneshoteffect("insect_trail_runner_icbm"); + var_00 common_scripts\_createfx::set_origin_and_angles((-741.868,-1772.74,334.042),(270,3.57633,86.4236)); + var_00 = common_scripts\utility::createoneshoteffect("insect_trail_runner_icbm"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1009.15,-1900.35,372.014),(270,0,46)); + var_00 = common_scripts\utility::createoneshoteffect("insect_trail_runner_icbm"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1506.76,-1608.45,374.83),(270,2.60256,51.3974)); + var_00 = common_scripts\utility::createoneshoteffect("insect_trail_runner_icbm"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1703.36,-1280.46,371.072),(270,357.337,36.663)); + var_00 = common_scripts\utility::createoneshoteffect("insect_trail_runner_icbm"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1672.01,-812.572,319.501),(270,1.55604,-1.55614)); + var_00 = common_scripts\utility::createoneshoteffect("insect_trail_runner_icbm"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1026.1,-1111.62,347.866),(270,3.57633,86.4236)); + var_00 = common_scripts\utility::createoneshoteffect("insect_trail_runner_icbm"); + var_00 common_scripts\_createfx::set_origin_and_angles((-272.169,-715.563,365.563),(270,0,106)); + var_00 = common_scripts\utility::createoneshoteffect("insect_trail_runner_icbm"); + var_00 common_scripts\_createfx::set_origin_and_angles((304.845,-564.754,174.019),(270,358.017,17.9835)); + var_00 = common_scripts\utility::createoneshoteffect("insect_trail_runner_icbm"); + var_00 common_scripts\_createfx::set_origin_and_angles((824.302,-612.91,258.621),(270,2.86241,133.138)); + var_00 = common_scripts\utility::createoneshoteffect("insect_trail_runner_icbm"); + var_00 common_scripts\_createfx::set_origin_and_angles((1092.4,-250.43,271.131),(270,0.629166,-2.62917)); + var_00 = common_scripts\utility::createoneshoteffect("insect_trail_runner_icbm"); + var_00 common_scripts\_createfx::set_origin_and_angles((846.022,342.591,272.516),(270,0,76)); + var_00 = common_scripts\utility::createoneshoteffect("insects_carcass_runner"); + var_00 common_scripts\_createfx::set_origin_and_angles((-243.97,1275.53,322.582),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("insects_carcass_runner"); + var_00 common_scripts\_createfx::set_origin_and_angles((-136.912,1462.37,304.893),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("insects_carcass_runner"); + var_00 common_scripts\_createfx::set_origin_and_angles((248.728,1743.74,284.773),(270,0,0)); + var_00.v["soundalias"] = "emt_fly_loop_ext"; + var_00 = common_scripts\utility::createoneshoteffect("insects_carcass_runner"); + var_00 common_scripts\_createfx::set_origin_and_angles((751.693,2242.2,299.018),(270,0,0)); + var_00.v["soundalias"] = "emt_fly_loop_ext"; + var_00 = common_scripts\utility::createoneshoteffect("insects_carcass_runner"); + var_00 common_scripts\_createfx::set_origin_and_angles((923.573,1753.15,294.852),(270,0,0)); + var_00.v["soundalias"] = "emt_fly_loop_ext"; + var_00 = common_scripts\utility::createoneshoteffect("insects_carcass_runner"); + var_00 common_scripts\_createfx::set_origin_and_angles((1023.31,1571.14,300.333),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("insects_carcass_runner"); + var_00 common_scripts\_createfx::set_origin_and_angles((649.224,791.559,286.117),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("insects_carcass_runner"); + var_00 common_scripts\_createfx::set_origin_and_angles((762.277,600.899,297.391),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("insects_carcass_runner"); + var_00 common_scripts\_createfx::set_origin_and_angles((525.759,415.926,276.638),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("insects_carcass_runner"); + var_00 common_scripts\_createfx::set_origin_and_angles((1157.36,421.266,284.337),(270,0,0)); + var_00.v["soundalias"] = "emt_fly_loop_both"; + var_00 = common_scripts\utility::createoneshoteffect("insects_carcass_runner"); + var_00 common_scripts\_createfx::set_origin_and_angles((1243.7,976.214,240),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("insects_carcass_runner"); + var_00 common_scripts\_createfx::set_origin_and_angles((1246.06,1123.52,284.125),(270,0,0)); + var_00.v["soundalias"] = "emt_fly_loop_ext"; + var_00 = common_scripts\utility::createoneshoteffect("insects_carcass_runner"); + var_00 common_scripts\_createfx::set_origin_and_angles((1805.24,563.754,330.435),(270,0,0)); + var_00.v["soundalias"] = "emt_fly_loop_ext"; + var_00 = common_scripts\utility::createoneshoteffect("insects_carcass_runner"); + var_00 common_scripts\_createfx::set_origin_and_angles((1877.64,-599.199,254.894),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("insects_carcass_runner"); + var_00 common_scripts\_createfx::set_origin_and_angles((1538.06,-619.642,289.966),(270,0,0)); + var_00.v["soundalias"] = "emt_fly_loop_ext"; + var_00 = common_scripts\utility::createoneshoteffect("insects_carcass_runner"); + var_00 common_scripts\_createfx::set_origin_and_angles((1150.84,-666.73,287.8),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("insects_carcass_runner"); + var_00 common_scripts\_createfx::set_origin_and_angles((976.504,-756.009,280.19),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("insects_carcass_runner"); + var_00 common_scripts\_createfx::set_origin_and_angles((489.331,-1221.34,255.293),(270,0,0)); + var_00.v["soundalias"] = "emt_fly_loop_ext"; + var_00 = common_scripts\utility::createoneshoteffect("insects_carcass_runner"); + var_00 common_scripts\_createfx::set_origin_and_angles((470.278,-3277.94,375.765),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("insect_trail_runner_icbm"); + var_00 common_scripts\_createfx::set_origin_and_angles((-632.864,-921.319,303.225),(270,357.397,148.603)); + var_00 = common_scripts\utility::createoneshoteffect("insect_trail_runner_icbm"); + var_00 common_scripts\_createfx::set_origin_and_angles((-56.384,-148.829,215.038),(270,358.238,49.7624)); + var_00 = common_scripts\utility::createoneshoteffect("insects_carcass_runner"); + var_00 common_scripts\_createfx::set_origin_and_angles((297.33,70.0731,191.786),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("insects_carcass_runner"); + var_00 common_scripts\_createfx::set_origin_and_angles((-260.432,429.326,175.473),(270,0,0)); + var_00.v["soundalias"] = "emt_fly_loop_ext"; + var_00 = common_scripts\utility::createoneshoteffect("insects_carcass_runner"); + var_00 common_scripts\_createfx::set_origin_and_angles((-109.379,352.239,176.47),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("insects_light_hunted_a_mp"); + var_00 common_scripts\_createfx::set_origin_and_angles((-387.885,700.802,134.153),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("insects_light_hunted_a_mp"); + var_00 common_scripts\_createfx::set_origin_and_angles((-766.092,1222.66,131.224),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("insects_light_hunted_a_mp"); + var_00 common_scripts\_createfx::set_origin_and_angles((419.661,911.371,273.989),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("insects_light_hunted_a_mp"); + var_00 common_scripts\_createfx::set_origin_and_angles((488.282,522.066,265.096),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("insects_light_hunted_a_mp"); + var_00 common_scripts\_createfx::set_origin_and_angles((1553.05,80.1005,237.436),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("insects_light_hunted_a_mp"); + var_00 common_scripts\_createfx::set_origin_and_angles((1741.75,-702.383,279.602),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("insects_light_hunted_a_mp"); + var_00 common_scripts\_createfx::set_origin_and_angles((1409.24,-666.096,284.55),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("insect_trail_runner_icbm"); + var_00 common_scripts\_createfx::set_origin_and_angles((1041.77,-874.921,269.609),(270,0,-42)); + var_00 = common_scripts\utility::createoneshoteffect("insect_trail_runner_icbm"); + var_00 common_scripts\_createfx::set_origin_and_angles((622.717,-1386.34,281.397),(270,0.651986,-0.651985)); + var_00 = common_scripts\utility::createoneshoteffect("insect_trail_runner_icbm"); + var_00 common_scripts\_createfx::set_origin_and_angles((565.324,-2174.92,367.476),(270,2.72631,43.2737)); + var_00 = common_scripts\utility::createoneshoteffect("insect_trail_runner_icbm"); + var_00 common_scripts\_createfx::set_origin_and_angles((175.476,-2588.24,333.899),(270,0,-98)); + var_00 = common_scripts\utility::createoneshoteffect("insects_light_hunted_a_mp"); + var_00 common_scripts\_createfx::set_origin_and_angles((230.456,-2893.56,351.774),(270,357.064,74.9356)); + var_00 = common_scripts\utility::createoneshoteffect("insects_light_hunted_a_mp"); + var_00 common_scripts\_createfx::set_origin_and_angles((-85.1414,-3214.37,335.866),(270,1.79693,-1.79708)); + var_00 = common_scripts\utility::createoneshoteffect("insects_light_hunted_a_mp"); + var_00 common_scripts\_createfx::set_origin_and_angles((-313.053,-3011,310.287),(270,0,92)); + var_00 = common_scripts\utility::createoneshoteffect("insects_light_hunted_a_mp"); + var_00 common_scripts\_createfx::set_origin_and_angles((-440.394,-2677.3,326.328),(270,358.315,47.6846)); + var_00 = common_scripts\utility::createoneshoteffect("insects_light_hunted_a_mp"); + var_00 common_scripts\_createfx::set_origin_and_angles((-583.952,-2733.1,341.282),(270,3.46823,12.5316)); + var_00.v["soundalias"] = "emt_cicada_loop"; + var_00 = common_scripts\utility::createoneshoteffect("insects_light_hunted_a_mp"); + var_00 common_scripts\_createfx::set_origin_and_angles((-956.288,-2420.8,367.152),(270,2.33731,27.6625)); + var_00 = common_scripts\utility::createoneshoteffect("insects_light_hunted_a_mp"); + var_00 common_scripts\_createfx::set_origin_and_angles((-820.032,-1947.43,341.456),(270,14.0362,113.964)); + var_00 = common_scripts\utility::createoneshoteffect("insects_light_hunted_a_mp"); + var_00 common_scripts\_createfx::set_origin_and_angles((-675.1,-1544.95,350.613),(270,357.064,74.9356)); + var_00 = common_scripts\utility::createoneshoteffect("insects_light_hunted_a_mp"); + var_00 common_scripts\_createfx::set_origin_and_angles((-376.014,-1208,216.223),(270,357.064,74.9356)); + var_00 = common_scripts\utility::createoneshoteffect("insects_light_hunted_a_mp"); + var_00 common_scripts\_createfx::set_origin_and_angles((51.4454,-968.3,182.81),(270,357.064,74.9356)); + var_00 = common_scripts\utility::createoneshoteffect("insects_light_hunted_a_mp"); + var_00 common_scripts\_createfx::set_origin_and_angles((466.432,-775.654,194.129),(270,0,92)); + var_00 = common_scripts\utility::createoneshoteffect("insects_light_hunted_a_mp"); + var_00 common_scripts\_createfx::set_origin_and_angles((513.141,-529.291,264.832),(270,357.064,74.9356)); + var_00.v["soundalias"] = "emt_cicada_loop"; + var_00 = common_scripts\utility::createoneshoteffect("insects_light_hunted_a_mp"); + var_00 common_scripts\_createfx::set_origin_and_angles((415.107,-169.656,257.838),(270,14.0362,113.964)); + var_00 = common_scripts\utility::createoneshoteffect("insects_light_hunted_a_mp"); + var_00 common_scripts\_createfx::set_origin_and_angles((-150.149,-264.656,220.719),(270,358.568,-176.568)); + var_00 = common_scripts\utility::createoneshoteffect("insects_light_hunted_a_mp"); + var_00 common_scripts\_createfx::set_origin_and_angles((53.8365,-499.275,232.33),(270,7.12502,136.875)); + var_00 = common_scripts\utility::createoneshoteffect("insects_light_hunted_a_mp"); + var_00 common_scripts\_createfx::set_origin_and_angles((-286.678,-14.0934,230.426),(270,357.064,74.9356)); + var_00 = common_scripts\utility::createoneshoteffect("insects_light_hunted_a_mp"); + var_00 common_scripts\_createfx::set_origin_and_angles((-551.365,-146.601,213.444),(270,3.57633,110.424)); + var_00.v["soundalias"] = "emt_cicada_loop"; + var_00 = common_scripts\utility::createoneshoteffect("insects_light_hunted_a_mp"); + var_00 common_scripts\_createfx::set_origin_and_angles((-558.711,-492.54,250.603),(270,14.0362,113.964)); + var_00 = common_scripts\utility::createoneshoteffect("insects_light_hunted_a_mp"); + var_00 common_scripts\_createfx::set_origin_and_angles((-601.608,-700.32,292.465),(270,1.78991,-175.79)); + var_00 = common_scripts\utility::createoneshoteffect("insects_light_hunted_a_mp"); + var_00 common_scripts\_createfx::set_origin_and_angles((-809.449,-242.617,250.162),(270,0.895174,-162.895)); + var_00 = common_scripts\utility::createoneshoteffect("insects_light_hunted_a_mp"); + var_00 common_scripts\_createfx::set_origin_and_angles((-827.312,166.476,239.937),(270,0,-144)); + var_00 = common_scripts\utility::createoneshoteffect("insects_light_hunted_a_mp"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1117.88,84.7945,254.962),(270,2.60256,-120.603)); + var_00 = common_scripts\utility::createoneshoteffect("insects_light_hunted_a_mp"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1717.35,471.423,263.517),(270,0,-132)); + var_00 = common_scripts\utility::createoneshoteffect("insects_light_hunted_a_mp"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1839.37,117.688,259.488),(270,0,-154)); + var_00 = common_scripts\utility::createoneshoteffect("heat_haze_mirage"); + var_00 common_scripts\_createfx::set_origin_and_angles((770.159,1824.42,283.943),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("heat_haze_mirage"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1739.33,1192.7,267.013),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("heat_haze_mirage"); + var_00 common_scripts\_createfx::set_origin_and_angles((-548.248,1900.04,252.991),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("heat_haze_mirage"); + var_00 common_scripts\_createfx::set_origin_and_angles((-332.381,512.628,147.406),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("heat_haze_mirage"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1020.35,1527.57,131.803),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("heat_haze_mirage"); + var_00 common_scripts\_createfx::set_origin_and_angles((627.02,-1308.58,275.093),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("heat_haze_mirage"); + var_00 common_scripts\_createfx::set_origin_and_angles((1021.63,-685.436,292.679),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("heat_haze_mirage"); + var_00 common_scripts\_createfx::set_origin_and_angles((-190.764,-1266.53,190.829),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("heat_haze_mirage"); + var_00 common_scripts\_createfx::set_origin_and_angles((487.93,-1811.76,321.499),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("heat_haze_mirage"); + var_00 common_scripts\_createfx::set_origin_and_angles((1588.95,914.382,240),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("heat_haze_mirage"); + var_00 common_scripts\_createfx::set_origin_and_angles((1731.3,-510.165,229.888),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("heat_haze_mirage"); + var_00 common_scripts\_createfx::set_origin_and_angles((962.155,138.7,266.943),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("heat_haze_mirage"); + var_00 common_scripts\_createfx::set_origin_and_angles((654.96,601.642,274.07),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("heat_haze_mirage"); + var_00 common_scripts\_createfx::set_origin_and_angles((-180.554,1965.86,264.431),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("heat_haze_mirage"); + var_00 common_scripts\_createfx::set_origin_and_angles((109.327,1337.11,262.087),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("heat_haze_mirage"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1674.65,151.345,257.003),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("heat_haze_mirage"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1028.43,551.334,256.649),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("heat_haze_mirage"); + var_00 common_scripts\_createfx::set_origin_and_angles((-555.051,885.775,314.815),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("heat_haze_mirage"); + var_00 common_scripts\_createfx::set_origin_and_angles((651.816,1841.42,277.425),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("heat_haze_mirage"); + var_00 common_scripts\_createfx::set_origin_and_angles((95.9969,1428.39,265.044),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("heat_haze_mirage"); + var_00 common_scripts\_createfx::set_origin_and_angles((-224.557,1167.94,280.796),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("heat_haze_mirage"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1864.84,836.211,270.341),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("heat_haze_mirage"); + var_00 common_scripts\_createfx::set_origin_and_angles((-808.137,-3.76495,226.305),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("heat_haze_mirage"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1607.78,679.938,246.759),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("heat_haze_mirage"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1099.46,1584.87,261.789),(270,0,0)); + var_00.v["soundalias"] = "emt_wood_creak_light_res"; + var_00 = common_scripts\utility::createoneshoteffect("heat_haze_mirage"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1645.17,1311.16,260.39),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("heat_haze_mirage"); + var_00 common_scripts\_createfx::set_origin_and_angles((-2126.22,1214.4,284.1),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("heat_haze_mirage"); + var_00 common_scripts\_createfx::set_origin_and_angles((313.251,950.597,262.695),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("heat_haze_mirage"); + var_00 common_scripts\_createfx::set_origin_and_angles((334.016,-634.27,181.618),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("heat_haze_mirage"); + var_00 common_scripts\_createfx::set_origin_and_angles((242.511,-20.124,178.216),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("heat_haze_mirage"); + var_00 common_scripts\_createfx::set_origin_and_angles((-171.9,-120.61,224.111),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("heat_haze_mirage"); + var_00 common_scripts\_createfx::set_origin_and_angles((519.737,-2382.87,377.21),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("heat_haze_mirage"); + var_00 common_scripts\_createfx::set_origin_and_angles((214.466,-3040.43,377.321),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("heat_haze_mirage"); + var_00 common_scripts\_createfx::set_origin_and_angles((307.528,-2776.52,357.811),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("heat_haze_mirage"); + var_00 common_scripts\_createfx::set_origin_and_angles((-462.977,-1905.49,295.498),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("heat_haze_mirage"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1244.37,-1664.42,373.712),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("heat_haze_mirage"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1696.88,-1406.57,370.005),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("heat_haze_mirage"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1718.97,-744.182,298.288),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("heat_haze_mirage"); + var_00 common_scripts\_createfx::set_origin_and_angles((-953.301,-631.945,354.91),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("heat_haze_mirage"); + var_00 common_scripts\_createfx::set_origin_and_angles((-144.828,-648.539,389.745),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("heat_haze_mirage"); + var_00 common_scripts\_createfx::set_origin_and_angles((-488.209,-362.044,246.328),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("heat_haze_mirage"); + var_00 common_scripts\_createfx::set_origin_and_angles((-433.102,569.63,126.518),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("heat_haze_mirage"); + var_00 common_scripts\_createfx::set_origin_and_angles((-56.5274,281.947,175.805),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("heat_haze_mirage"); + var_00 common_scripts\_createfx::set_origin_and_angles((425.603,-962.586,215.971),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("heat_haze_mirage"); + var_00 common_scripts\_createfx::set_origin_and_angles((973.057,-944.85,264.401),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("heat_haze_mirage"); + var_00 common_scripts\_createfx::set_origin_and_angles((536.852,-766.599,216.385),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("heat_haze_mirage"); + var_00 common_scripts\_createfx::set_origin_and_angles((-723.204,-232.469,236.098),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("heat_haze_mirage"); + var_00 common_scripts\_createfx::set_origin_and_angles((979.576,335.376,273.876),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("leaves_fall_gentlewind_mp_village_far"); + var_00 common_scripts\_createfx::set_origin_and_angles((2126.98,3606.65,1228.39),(270,0,-162)); + var_00 = common_scripts\utility::createoneshoteffect("waterfall_village_1"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1078.82,-2246.96,922.355),(88,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("waterfall_village_2"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1123.22,-2168.01,933.843),(76.0016,0.576527,-1.43574)); + var_00 = common_scripts\utility::createoneshoteffect("waterfall_village_2"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1182.41,-2106.96,928.991),(72,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("waterfall_drainage_splash_large"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1052.58,-2242.05,395.768),(279.949,33.5061,-126.528)); + var_00 = common_scripts\utility::createoneshoteffect("waterfall_drainage_splash_large"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1063.96,-2171.69,392.695),(274,334,-90)); + var_00.v["soundalias"] = "emt_water_fall_gurgle"; + var_00 = common_scripts\utility::createoneshoteffect("waterfall_drainage_splash_large"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1050.92,-2110.95,384.272),(270,358.772,-120.772)); + var_00 = common_scripts\utility::createoneshoteffect("waterfall_village_1"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1059.31,-2160.96,773.444),(88,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("waterfall_village_1"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1033.95,-2105.73,708.667),(88,180,180)); + var_00 = common_scripts\utility::createoneshoteffect("waterfall_mist_ground"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1058.62,-2169.83,387.847),(270,0,0)); + var_00.v["soundalias"] = "emt_water_fall_flowing"; + var_00 = common_scripts\utility::createoneshoteffect("waterfall_mist_mp_village"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1074.88,-2246.23,957.064),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("waterfall_mist_mp_village"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1107.71,-2171.42,899.928),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("waterfall_mist_mp_village"); + var_00 common_scripts\_createfx::set_origin_and_angles((-1132.77,-2102.68,881.582),(270,0,0)); + var_00 = common_scripts\utility::createoneshoteffect("waterfall_drainage_splash"); + var_00 common_scripts\_createfx::set_origin_and_angles((-902.773,-2065.17,362.843),(289.32,4.15959,-71.5428)); + var_00 = common_scripts\utility::createoneshoteffect("waterfall_drainage_splash"); + var_00 common_scripts\_createfx::set_origin_and_angles((-690.904,-2075.4,299.092),(277.443,327.914,-36.0401)); + var_00 = common_scripts\utility::createoneshoteffect("waterfall_drainage_splash"); + var_00 common_scripts\_createfx::set_origin_and_angles((-864.209,-2012.34,348.272),(277.443,327.914,-36.0401)); + var_00 = common_scripts\utility::createoneshoteffect("waterfall_drainage_splash"); + var_00 common_scripts\_createfx::set_origin_and_angles((-871.623,-2188.93,350.397),(283.111,344.178,-52.4496)); + var_00 = common_scripts\_createfx::createloopsound(); + var_00.v["origin"] = (-650.822,860.79,145.127); + var_00.v["angles"] = (270,0,0); + var_00.v["soundalias"] = "emt_cricket_loop"; + var_00 = common_scripts\_createfx::createloopsound(); + var_00.v["origin"] = (-157.27,-337.071,305.712); + var_00.v["angles"] = (270,0,0); + var_00.v["soundalias"] = "emt_tree_palm_rustle_ext"; + var_00 = common_scripts\_createfx::createloopsound(); + var_00.v["origin"] = (-980.241,-45.3107,334.166); + var_00.v["angles"] = (270,0,0); + var_00.v["soundalias"] = "emt_tree_palm_rustle_ext"; + var_00 = common_scripts\_createfx::createloopsound(); + var_00.v["origin"] = (-1381.39,66.4292,343.426); + var_00.v["angles"] = (270,0,0); + var_00.v["soundalias"] = "emt_tree_palm_rustle_ext"; + var_00 = common_scripts\_createfx::createloopsound(); + var_00.v["origin"] = (912.859,1290.42,412.469); + var_00.v["angles"] = (270,0,0); + var_00.v["soundalias"] = "emt_tree_palm_rustle_ext"; + var_00 = common_scripts\_createfx::createloopsound(); + var_00.v["origin"] = (903.556,1132.39,346.062); + var_00.v["angles"] = (270,0,0); + var_00.v["soundalias"] = "emt_tree_palm_rustle_ext"; + var_00 = common_scripts\_createfx::createloopsound(); + var_00.v["origin"] = (1627.91,1469.91,381.013); + var_00.v["angles"] = (270,0,0); + var_00.v["soundalias"] = "emt_tree_palm_rustle_ext"; + var_00 = common_scripts\_createfx::createloopsound(); + var_00.v["origin"] = (1815.87,366.983,325.628); + var_00.v["angles"] = (270,0,0); + var_00.v["soundalias"] = "emt_tree_palm_rustle_ext"; + var_00 = common_scripts\_createfx::createloopsound(); + var_00.v["origin"] = (782.31,-948.502,354.002); + var_00.v["angles"] = (270,0,0); + var_00.v["soundalias"] = "emt_tree_palm_rustle_ext"; + var_00 = common_scripts\_createfx::createloopsound(); + var_00.v["origin"] = (247.723,-1238.39,315.77); + var_00.v["angles"] = (270,0,0); + var_00.v["soundalias"] = "emt_tree_palm_rustle_ext"; + var_00 = common_scripts\_createfx::createloopsound(); + var_00.v["origin"] = (-928.814,-913.798,454.31); + var_00.v["angles"] = (270,0,0); + var_00.v["soundalias"] = "emt_tree_palm_rustle_ext"; + var_00 = common_scripts\_createfx::createloopsound(); + var_00.v["origin"] = (-2128.61,1033.47,320.58); + var_00.v["angles"] = (270,0,0); + var_00.v["soundalias"] = "emt_aftermath_heli_radio"; + var_00 = common_scripts\_createfx::createloopsound(); + var_00.v["origin"] = (-2132.94,799.721,388.617); + var_00.v["angles"] = (270,0,0); + var_00.v["soundalias"] = "emt_cloth_flap_tent"; + var_00 = common_scripts\_createfx::createloopsound(); + var_00.v["origin"] = (-1801.75,1288.71,364.457); + var_00.v["angles"] = (270,0,0); + var_00.v["soundalias"] = "emt_tree_leaf_rustle_ext"; + var_00 = common_scripts\_createfx::createloopsound(); + var_00.v["origin"] = (-509.342,1510.11,337.432); + var_00.v["angles"] = (270,0,0); + var_00.v["soundalias"] = "emt_tree_leaf_rustle_ext"; + var_00 = common_scripts\_createfx::createloopsound(); + var_00.v["origin"] = (-1819.61,521.982,373.082); + var_00.v["angles"] = (270,0,0); + var_00.v["soundalias"] = "emt_tree_leaf_rustle_ext"; + var_00 = common_scripts\_createfx::createloopsound(); + var_00.v["origin"] = (304.497,775.683,331.428); + var_00.v["angles"] = (270,0,0); + var_00.v["soundalias"] = "emt_tree_leaf_rustle_ext"; + var_00 = common_scripts\_createfx::createloopsound(); + var_00.v["origin"] = (559.22,450.111,332.223); + var_00.v["angles"] = (270,0,0); + var_00.v["soundalias"] = "emt_tree_leaf_rustle_ext"; + var_00 = common_scripts\_createfx::createloopsound(); + var_00.v["origin"] = (1388.62,-732.451,354.71); + var_00.v["angles"] = (270,0,0); + var_00.v["soundalias"] = "emt_tree_leaf_rustle_ext"; + var_00 = common_scripts\_createfx::createloopsound(); + var_00.v["origin"] = (360.32,261.759,308.48); + var_00.v["angles"] = (270,0,0); + var_00.v["soundalias"] = "emt_tree_palm_rustle_ext"; + var_00 = common_scripts\_createfx::createloopsound(); + var_00.v["origin"] = (55.298,487.947,313.689); + var_00.v["angles"] = (270,0,0); + var_00.v["soundalias"] = "emt_tree_palm_rustle_ext"; + var_00 = common_scripts\_createfx::createloopsound(); + var_00.v["origin"] = (-1149.12,3248.44,134.978); + var_00.v["angles"] = (270,0,0); + var_00.v["soundalias"] = "emt_bird_distant_caw_loop"; + var_00 = common_scripts\_createfx::createloopsound(); + var_00.v["origin"] = (-477.129,-1242.37,319.874); + var_00.v["angles"] = (270,0,0); + var_00.v["soundalias"] = "emt_tree_palm_rustle_ext"; + var_00 = common_scripts\_createfx::createloopsound(); + var_00.v["origin"] = (-84.4975,-868.493,500.81); + var_00.v["angles"] = (270,0,0); + var_00.v["soundalias"] = "emt_tree_palm_rustle_ext"; + var_00 = common_scripts\_createfx::createloopsound(); + var_00.v["origin"] = (-260.413,-967.823,496.202); + var_00.v["angles"] = (270,0,0); + var_00.v["soundalias"] = "emt_tree_palm_rustle_ext"; + var_00 = common_scripts\_createfx::createloopsound(); + var_00.v["origin"] = (1173.14,-847.921,309.953); + var_00.v["angles"] = (270,0,0); + var_00.v["soundalias"] = "emt_mtl_chainlink_rattle_ext"; + var_00 = common_scripts\_createfx::createloopsound(); + var_00.v["origin"] = (970.429,-370.702,317.623); + var_00.v["angles"] = (270,0,0); + var_00.v["soundalias"] = "emt_mtl_chainlink_rattle_ext"; + var_00 = common_scripts\_createfx::createloopsound(); + var_00.v["origin"] = (-1214.57,813.585,330.96); + var_00.v["angles"] = (270,0,0); + var_00.v["soundalias"] = "emt_mtl_chainlink_rattle_ext"; + var_00 = common_scripts\_createfx::createloopsound(); + var_00.v["origin"] = (-2040.65,-119.545,292.273); + var_00.v["angles"] = (270,0,0); + var_00.v["soundalias"] = "emt_cricket_loop"; + var_00 = common_scripts\_createfx::createloopsound(); + var_00.v["origin"] = (668.568,-2441.63,422.654); + var_00.v["angles"] = (270,0,0); + var_00.v["soundalias"] = "emt_mtl_chainlink_rattle_ext"; + var_00 = common_scripts\_createfx::createloopsound(); + var_00.v["origin"] = (373.393,-3168.09,405.62); + var_00.v["angles"] = (270,0,0); + var_00.v["soundalias"] = "emt_mtl_chainlink_rattle_ext"; + var_00 = common_scripts\_createfx::createloopsound(); + var_00.v["origin"] = (75.1307,-3079.73,453.428); + var_00.v["angles"] = (270,0,0); + var_00.v["soundalias"] = "emt_tree_leaf_rustle_ext"; + var_00 = common_scripts\_createfx::createloopsound(); + var_00.v["origin"] = (146.495,-2987.44,454.317); + var_00.v["angles"] = (270,0,0); + var_00.v["soundalias"] = "emt_tree_leaf_rustle_ext"; + var_00 = common_scripts\_createfx::createloopsound(); + var_00.v["origin"] = (-554.544,-2370.65,318.63); + var_00.v["angles"] = (270,0,0); + var_00.v["soundalias"] = "emt_cricket_loop"; + var_00 = common_scripts\_createfx::createloopsound(); + var_00.v["origin"] = (-413.509,-1736.53,215.758); + var_00.v["angles"] = (270,0,0); + var_00.v["soundalias"] = "emt_frog_loop1"; + var_00 = common_scripts\_createfx::createloopsound(); + var_00.v["origin"] = (-1692.56,-1186.12,528.451); + var_00.v["angles"] = (270,0,0); + var_00.v["soundalias"] = "emt_tree_leaf_rustle_ext"; + var_00 = common_scripts\_createfx::createloopsound(); + var_00.v["origin"] = (256.484,-950.942,341.731); + var_00.v["angles"] = (270,0,0); + var_00.v["soundalias"] = "emt_tree_leaf_rustle_ext"; + var_00 = common_scripts\_createfx::createloopsound(); + var_00.v["origin"] = (700.752,1681.33,314.979); + var_00.v["angles"] = (270,0,0); + var_00.v["soundalias"] = "emt_metal_sheet_knocking_ext"; + var_00 = common_scripts\_createfx::createloopsound(); + var_00.v["origin"] = (1835.68,685.791,299.97); + var_00.v["angles"] = (270,0,0); + var_00.v["soundalias"] = "emt_mtl_chainlink_rattle_ext"; + var_00 = common_scripts\_createfx::createloopsound(); + var_00.v["origin"] = (1652.89,-96.9445,361.038); + var_00.v["angles"] = (270,0,0); + var_00.v["soundalias"] = "emt_mtl_corrugate_rattle_ext"; + var_00 = common_scripts\_createfx::createloopsound(); + var_00.v["origin"] = (480.226,-1258.31,286.112); + var_00.v["angles"] = (270,0,0); + var_00.v["soundalias"] = "emt_metal_sheet_knocking_ext"; + var_00 = common_scripts\_createfx::createloopsound(); + var_00.v["origin"] = (484.917,-1469.92,403.542); + var_00.v["angles"] = (270,0,0); + var_00.v["soundalias"] = "emt_powerline_hum"; + var_00 = common_scripts\_createfx::createloopsound(); + var_00.v["origin"] = (860.195,2227.48,449.424); + var_00.v["angles"] = (270,0,0); + var_00.v["soundalias"] = "emt_powerline_hum"; + var_00 = common_scripts\_createfx::createloopsound(); + var_00.v["origin"] = (-69.726,1038.85,335.356); + var_00.v["angles"] = (270,0,0); + var_00.v["soundalias"] = "emt_powerline_hum"; + var_00 = common_scripts\_createfx::createloopsound(); + var_00.v["origin"] = (-473.766,-1801.61,238.075); + var_00.v["angles"] = (270,0,0); + var_00.v["soundalias"] = "emt_water_drain"; + var_00 = common_scripts\_createfx::createloopsound(); + var_00.v["origin"] = (596.342,-2255.34,430.852); + var_00.v["angles"] = (270,0,0); + var_00.v["soundalias"] = "emt_powerline_hum"; + var_00 = common_scripts\_createfx::createloopsound(); + var_00.v["origin"] = (533.224,2009,382.5); + var_00.v["angles"] = (270,0,0); + var_00.v["soundalias"] = "emt_mtl_drum_pings_ext"; + var_00 = common_scripts\_createfx::createloopsound(); + var_00.v["origin"] = (557.256,1344.03,281.003); + var_00.v["angles"] = (270,0,0); + var_00.v["soundalias"] = "emt_wood_creak_light_res_int"; + var_00 = common_scripts\_createfx::createloopsound(); + var_00.v["origin"] = (-198.428,1717.26,359.893); + var_00.v["angles"] = (270,0,0); + var_00.v["soundalias"] = "emt_powerline_hum"; + var_00 = common_scripts\_createfx::createloopsound(); + var_00.v["origin"] = (1520.15,134.78,408.218); + var_00.v["angles"] = (270,0,0); + var_00.v["soundalias"] = "emt_powerline_hum"; + var_00 = common_scripts\_createfx::createloopsound(); + var_00.v["origin"] = (-1258.47,-679.129,443.579); + var_00.v["angles"] = (270,0,0); + var_00.v["soundalias"] = "emt_wood_creak_light_res"; + var_00 = common_scripts\_createfx::createloopsound(); + var_00.v["origin"] = (1208.93,443.077,286.725); + var_00.v["angles"] = (270,0,0); + var_00.v["soundalias"] = "emt_wood_creak_light_res_int"; +} \ No newline at end of file diff --git a/MW3/PC/SP/18665.gsc b/MW3/PC/SP/18665.gsc new file mode 100644 index 0000000..c0cc0ea --- /dev/null +++ b/MW3/PC/SP/18665.gsc @@ -0,0 +1,30 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 18665.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:22:02 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + var_00 = maps\_utility::create_vision_set_fog("mp_village"); + var_00.startdist = 700; + var_00.halfwaydist = 4792; + var_00.red = 0.467; + var_00.green = 0.499; + var_00.blue = 0.478; + var_00.maxopacity = 0.663; + var_00.sunendfadeangle = 1; + var_00.sunfogenabled = 1; + var_00.sunred = 0.819; + var_00.sungreen = 0.708; + var_00.sunblue = 0.622; + var_00.sundir = (0.268,0.844,0.465); + var_00.sunbeginfadeangle = 0; + var_00.var_1AF5 = 38; + var_00.normalfogscale = 0.68; +} \ No newline at end of file diff --git a/MW3/PC/SP/324.gsc b/MW3/PC/SP/324.gsc new file mode 100644 index 0000000..4869cf1 --- /dev/null +++ b/MW3/PC/SP/324.gsc @@ -0,0 +1,258 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 324.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 13 + * Decompile Time: 4 ms + * Timestamp: 10/27/2023 2:23:06 AM +*******************************************************************/ + +//Function Number: 1 +func_1E55(param_00) +{ + self setmodel(param_00[randomint(param_00.size)]); +} + +//Function Number: 2 +func_1E56(param_00) +{ + for(var_01 = 0;var_01 < param_00.size;var_01++) + { + precachemodel(param_00[var_01]); + } +} + +//Function Number: 3 +func_1E57(param_00,param_01) +{ + if(!isdefined(level.var_1E58)) + { + level.var_1E58 = []; + } + + if(!isdefined(level.var_1E58[param_00])) + { + level.var_1E58[param_00] = randomint(param_01.size); + } + + var_02 = level.var_1E58[param_00] + 1 % param_01.size; + if(isdefined(self.script_char_index)) + { + var_02 = self.script_char_index % param_01.size; + } + + level.var_1E58[param_00] = var_02; + self attach(param_01[var_02],"",1); + self.var_1E5A = param_01[var_02]; +} + +//Function Number: 4 +func_1E5B(param_00,param_01) +{ + if(!isdefined(level.var_1E5C)) + { + level.var_1E5C = []; + } + + if(!isdefined(level.var_1E5C[param_00])) + { + level.var_1E5C[param_00] = randomint(param_01.size); + } + + var_02 = level.var_1E5C[param_00] + 1 % param_01.size; + level.var_1E5C[param_00] = var_02; + self attach(param_01[var_02]); + self.hatmodel = param_01[var_02]; +} + +//Function Number: 5 +func_1E5D() +{ + self detachall(); + var_00 = self.var_1E5E; + if(!isdefined(var_00)) + { + return; + } + + self.var_1E5E = "none"; + self [[ level.var_1E5F ]](var_00); +} + +//Function Number: 6 +func_1E60() +{ + var_00["gunHand"] = self.var_1E5E; + if(isdefined(self.name)) + { + } + else + { + } + + var_01 = self getattachsize(); + for(var_02 = 0;var_02 < var_01;var_02++ = var_7B["name"]) + { + var_7B["attach"][var_02]["model"] = self getattachmodelname(var_02); + var_7B["attach"][var_02]["tag"] = self getattachtagname(var_02); + } + + return var_7B; +} + +//Function Number: 7 +func_1E62(param_00) +{ + self detachall(); + self.var_1E5E = param_00["gunHand"]; + self.var_1E61 = param_00["gunInHand"]; + self setmodel(param_00["model"]); + self.hatmodel = param_00["hatModel"]; + if(isdefined(param_00["name"])) + { + self.name = param_00["name"]; + } + else + { + } + + var_01 = param_00["attach"]; + var_02 = var_01.size; + for(var_03 = 0;var_03 < var_02;var_03++) + { + self attach(var_01[var_03]["model"],var_01[var_03]["tag"]); + } +} + +//Function Number: 8 +precache(param_00) +{ + if(isdefined(param_00["name"])) + { + } + else + { + } + + precachemodel(param_00["model"]); + var_01 = param_00["attach"]; + var_02 = var_01.size; + for(var_03 = 0;var_03 < var_02;var_03++) + { + precachemodel(var_01[var_03]["model"]); + } +} + +//Function Number: 9 +func_1E63(param_00) +{ + var_01 = strtok(self.classname,"_"); + if(!common_scripts\utility::issp()) + { + if(isdefined(self.pers["modelIndex"]) && self.pers["modelIndex"] < param_00) + { + return self.pers["modelIndex"]; + } + + var_02 = randomint(param_00); + self.pers["modelIndex"] = var_02; + return var_02; + } + else if(var_02.size <= 2) + { + return randomint(var_01); + } + + var_03 = "auto"; + var_02 = undefined; + var_04 = var_01[2]; + if(isdefined(self.script_char_index)) + { + var_03 = self.script_char_index; + } + + if(isdefined(self.script_char_group)) + { + var_05 = "grouped"; + var_02 = "group_" + self.script_char_group; + } + + if(!isdefined(level.var_1E65)) + { + level.var_1E65 = []; + } + + if(!isdefined(level.var_1E65[var_04])) + { + level.var_1E65[var_04] = []; + } + + if(!isdefined(level.var_1E65[var_04][var_02])) + { + func_1E67(var_04,var_02,param_00); + } + + if(!isdefined(var_03)) + { + var_03 = func_1E66(var_04,var_02); + if(!isdefined(var_03)) + { + var_03 = randomint(5000); + } + } + + while(var_03 >= param_00) + { + var_03 = var_03 - param_00; + } + + level.var_1E65[var_04][var_02][var_03]++; + return var_03; +} + +//Function Number: 10 +func_1E66(param_00,param_01) +{ + var_02 = []; + var_03 = level.var_1E65[param_00][param_01][0]; + var_02[0] = 0; + for(var_04 = 1;var_04 < level.var_1E65[param_00][param_01].size;var_04++) + { + if(level.var_1E65[param_00][param_01][var_04] > var_03) + { + continue; + } + + if(level.var_1E65[param_00][param_01][var_04] < var_03) + { + var_02 = []; + var_03 = level.var_1E65[param_00][param_01][var_04]; + } + + var_02[var_02.size] = var_04; + } + + return random(var_02); +} + +//Function Number: 11 +func_1E67(param_00,param_01,param_02) +{ + for(var_03 = 0;var_03 < param_02;var_03++) + { + level.var_1E65[param_00][param_01][var_03] = 0; + } +} + +//Function Number: 12 +func_1E68(param_00) +{ + return randomint(param_00); +} + +//Function Number: 13 +random(param_00) +{ + return param_00[randomint(param_00.size)]; +} \ No newline at end of file diff --git a/MW3/PC/SP/363.gsc b/MW3/PC/SP/363.gsc new file mode 100644 index 0000000..3351aea --- /dev/null +++ b/MW3/PC/SP/363.gsc @@ -0,0 +1,1854 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 363.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 71 + * Decompile Time: 86 ms + * Timestamp: 10/27/2023 2:23:16 AM +*******************************************************************/ + +//Function Number: 1 +func_2874() +{ + precacheitem("turret_attackheli"); + precacheitem("missile_attackheli"); + func_2875(); + thread init(); +} + +//Function Number: 2 +func_2875() +{ + if(getdvarint("sm_enable") && getdvar("r_zfeather") != "0") + { + level._effect["_attack_heli_spotlight"] = loadfx("misc/hunted_spotlight_model"); + return; + } + + level._effect["_attack_heli_spotlight"] = loadfx("misc/spotlight_large"); +} + +//Function Number: 3 +init() +{ + if(isdefined(level.var_2876)) + { + return; + } + + while(!isdefined(level.gameskill)) + { + wait 0.05; + } + + if(!isdefined(level.cosine)) + { + level.cosine = []; + } + + if(!isdefined(level.cosine["25"])) + { + level.cosine["25"] = cos(25); + } + + if(!isdefined(level.cosine["35"])) + { + level.cosine["35"] = cos(35); + } + + if(!isdefined(level.var_2878)) + { + level.var_2878 = 3500; + } + + if(!isdefined(level.var_2879)) + { + level.var_2879 = 0; + } + + if(!isdefined(level.var_287A)) + { + level.var_287A = cos(30); + } + + level.var_2876 = 1; + level.var_287B = 3; + level.var_287C = 6; + level.var_287D = 3; + switch(level.gameskill) + { + case 0: + level.var_287E = 9; + level.var_287F = 1; + break; + + case 1: + level.var_287E = 7; + level.var_287F = 2; + break; + + case 2: + level.var_287E = 5; + level.var_287F = 3; + break; + + case 3: + level.var_287E = 3; + level.var_287F = 5; + break; + } +} + +//Function Number: 4 +func_2880(param_00) +{ + if(!isdefined(param_00)) + { + param_00 = "kill_heli"; + } + + var_01 = maps\_vehicle::spawn_vehicle_from_targetname_and_drive(param_00); + var_01 = func_2882(var_01); + return var_01; +} + +//Function Number: 5 +func_2882(param_00,param_01) +{ + param_00 endon("death"); + param_00 endon("heli_players_dead"); + if(level.gameskill == 0 || level.gameskill == 1) + { + var_02 = spawn("script_origin",param_00.origin + (0,0,-20)); + var_02 linkto(param_00); + param_00 thread common_scripts\utility::delete_on_death(var_02); + var_03 = undefined; + if(level.gameskill == 0) + { + var_03 = 2800; + } + else + { + var_03 = 2200; + } + + if(!isdefined(param_00.var_2883)) + { + param_00.attractor = missile_createattractorent(var_02,var_03,10000,level.player); + if(maps\_utility::is_coop()) + { + param_00.var_2885 = missile_createattractorent(var_02,var_03,10000,level.player2); + } + } + } + + param_00 enableaimassist(); + param_00.var_2886 = spawn("script_origin",param_00.origin); + param_00 thread common_scripts\utility::delete_on_death(param_00.var_2886); + if(!isdefined(param_00.var_2887)) + { + param_00.var_2887 = 0; + } + + param_00.var_2888 = 1; + param_00.var_2889 = 0; + param_00.var_288A = 1; + param_00.var_288B = 0; + param_00.var_288C = undefined; + param_00 thread func_28B5(); + param_00 thread func_28B6(); + thread func_289B(param_00,param_01); + param_00.turrettype = undefined; + param_00 func_2893(); + param_00 thread func_2892(); + switch(param_00.vehicletype) + { + case "ny_harbor_hind": + case "hind": + param_00.turrettype = "default"; + break; + + case "mi28": + param_00.turrettype = "default"; + break; + + case "littlebird": + param_00 setyawspeed(90,30,20); + param_00 setmaxpitchroll(40,40); + param_00 sethoverparams(100,20,5); + param_00 func_2896(); + break; + + default: + break; + } + + param_00.var_288F = param_00.var_288E; + if(isdefined(param_00.var_2890) && param_00.var_2890 == 1 && !isdefined(param_00.var_2891)) + { + param_00 thread func_28DE(undefined,1); + } + + param_00 thread func_28D9(); + return param_00; +} + +//Function Number: 6 +func_2892() +{ + foreach(var_01 in level.players) + { + var_01 maps\_utility::add_wait(::maps\_utility::waittill_msg,"death"); + } + + maps\_utility::do_wait_any(); + self notify("heli_players_dead"); +} + +//Function Number: 7 +func_2893() +{ + var_00 = undefined; + var_01 = undefined; + switch(self.vehicletype) + { + case "ny_harbor_hind": + case "hind": + var_01 = 600; + var_00 = -100; + break; + + case "mi28": + var_01 = 600; + var_00 = -100; + break; + + case "littlebird": + var_01 = 600; + var_00 = -204; + break; + + default: + break; + } + + self.var_288E = spawn("script_origin",self.origin); + self.var_288E.angles = self.angles; + self.var_288E.origin = self.origin; + var_02 = spawnstruct(); + var_02.entity = self.var_288E; + var_02.forward = var_01; + var_02.up = var_00; + var_02 maps\_utility::translate_local(); + self.var_288E linkto(self); + self.var_288E thread func_2899(self); +} + +//Function Number: 8 +func_2894() +{ + if(isdefined(self.turrets)) + { + return self.turrets; + } + + func_2896(); + return self.turrets; +} + +//Function Number: 9 +func_2896() +{ + self.turrettype = "miniguns"; + self.var_2897 = 0; + self.var_2898 = 0; + if(!isdefined(self.mgturret)) + { + return; + } + + self.turrets = self.mgturret; + common_scripts\utility::array_thread(self.turrets,::func_28D7,self); +} + +//Function Number: 10 +func_2899(param_00) +{ + param_00 common_scripts\utility::waittill_either("death","crash_done"); + if(isdefined(self)) + { + self delete(); + } +} + +//Function Number: 11 +func_289A(param_00,param_01) +{ + if(!isdefined(param_00)) + { + param_00 = "kill_heli"; + } + + var_02 = maps\_vehicle::spawn_vehicle_from_targetname_and_drive(param_00); + var_02.var_2886 = spawn("script_origin",var_02.origin); + var_02 thread common_scripts\utility::delete_on_death(var_02.var_2886); + var_02.var_2887 = 1; + var_02.var_2888 = 1; + var_02.var_2889 = 0; + var_02 thread func_28B5(); + var_02 thread func_28B6(); + thread func_289B(var_02,param_01); + return var_02; +} + +//Function Number: 12 +func_289B(param_00,param_01) +{ + if(!isdefined(param_00)) + { + param_00 = maps\_vehicle::spawn_vehicle_from_targetname_and_drive("kill_heli"); + param_00.var_2888 = 1; + param_00.var_2889 = 0; + param_00 thread func_28B5(); + param_00 thread func_28B6(); + } + + var_02 = undefined; + if(!isdefined(param_00.script_airspeed)) + { + var_02 = 40; + } + else + { + var_02 = param_00.script_airspeed; + } + + if(!isdefined(level.var_289D)) + { + level.var_289D = 0; + } + + if(!isdefined(level.var_289E)) + { + level.var_289E = 0; + } + + if(!isdefined(level.var_289F)) + { + level.var_289F = 0; + } + + level.var_28A0 = undefined; + var_03 = getentarray("attack_heli_safe_volume","script_noteworthy"); + if(var_03.size > 0) + { + level.var_28A0 = var_03; + } + + if(!level.var_289D) + { + thread func_28CC(param_00); + } + + if(!isdefined(param_00.var_28A1)) + { + switch(param_00.vehicletype) + { + case "mi28": + target_set(param_00,(0,0,-80)); + break; + + case "ny_harbor_hind": + case "hind": + target_set(param_00,(0,0,-96)); + break; + + case "littlebird": + target_set(param_00,(0,0,-80)); + break; + + default: + break; + } + + target_setjavelinonly(param_00,1); + } + + param_00 thread heli_damage_monitor(); + param_00 thread func_28CB(); + param_00 endon("death"); + param_00 endon("heli_players_dead"); + param_00 endon("returning_home"); + param_00 setvehweapon("turret_attackheli"); + if(!isdefined(param_00.var_2887)) + { + param_00.var_2887 = 0; + } + + if(!param_00.var_2887) + { + param_00 setneargoalnotifydist(100); + if(!isdefined(param_00.var_28A2)) + { + param_00 waittill("reached_dynamic_path_end"); + } + } + else + { + param_00 setneargoalnotifydist(500); + param_00 waittill("near_goal"); + } + + param_00 thread func_28A6(); + if(param_00.var_2887) + { + param_00 thread func_28A3(param_01,var_02); + return; + } + + param_00 thread func_28A4(var_02); +} + +//Function Number: 13 +func_28A3(param_00,param_01) +{ + if(!isdefined(param_00)) + { + param_00 = "attack_heli_circle_node"; + } + + var_02 = getentarray(param_00,"targetname"); + if(!isdefined(var_02) || var_02.size < 1) + { + var_02 = common_scripts\utility::getstructarray(param_00,"targetname"); + } + + var_03 = self; + var_03 endon("stop_circling"); + var_03 endon("death"); + var_03 endon("returning_home"); + var_03 endon("heli_players_dead"); + for(;;) + { + var_03 vehicle_setspeed(param_01,param_01 / 4,param_01 / 4); + var_03 setneargoalnotifydist(100); + var_04 = maps\_utility::get_closest_player_healthy(var_03.origin); + var_05 = var_04.origin; + var_03 setlookatent(var_04); + var_06 = maps\_utility::getclosest(var_05,var_02); + var_07 = getentarray(var_06.target,"targetname"); + if(!isdefined(var_07) || var_07.size < 1) + { + var_07 = common_scripts\utility::getstructarray(var_06.target,"targetname"); + } + + var_08 = var_07[randomint(var_07.size)]; + var_03 setvehgoalpos(var_08.origin,1); + var_03 waittill("near_goal"); + if(!isdefined(var_04.is_controlling_uav)) + { + wait 1; + wait randomfloatrange(0.8,1.3); + } + } +} + +//Function Number: 14 +func_28A4(param_00) +{ + self endon("death"); + var_01 = getentarray("kill_heli_spot","targetname"); + var_02 = self; + var_03 = maps\_utility::getclosest(var_02.origin,var_01); + var_04 = var_03; + var_02 endon("death"); + var_02 endon("returning_home"); + var_02 endon("heli_players_dead"); + var_05 = undefined; + for(;;) + { + wait 0.05; + var_02 vehicle_setspeed(param_00,param_00 / 2,param_00 / 10); + var_02 setneargoalnotifydist(100); + var_06 = maps\_utility::get_closest_player_healthy(var_02.origin); + var_07 = var_06.origin; + if(var_03 == var_04 && var_02.var_288B) + { + var_08 = func_28C4(var_02,var_03,var_01,var_06,var_07); + var_03 = maps\_utility::getclosest(var_07,var_08); + } + + var_02 setvehgoalpos(var_03.origin,1); + var_02.var_288A = 1; + var_06 = maps\_utility::get_closest_player_healthy(var_02.origin); + if(isdefined(self.var_288F) && isdefined(self.var_288F.classname) && self.var_288F.classname == "script_origin") + { + var_05 = var_06; + } + else if(isdefined(self.var_288F)) + { + var_05 = self.var_288F; + } + else + { + var_05 = self.var_288E; + } + + var_02 setlookatent(var_05); + var_02 waittill("near_goal"); + var_02.var_288A = 0; + if(!maps\_utility::is_coop()) + { + if(level.gameskill == 0 || level.gameskill == 1) + { + while(func_28A5(var_02)) + { + wait 0.5; + } + + wait 3; + } + } + + var_06 = maps\_utility::get_closest_player_healthy(var_02.origin); + var_07 = var_06.origin; + var_08 = func_28C4(var_02,var_03,var_01,var_06,var_07); + var_08[var_08.size] = var_03; + var_04 = var_03; + var_09 = maps\_utility::getclosest(var_07,var_01); + var_0A = maps\_utility::getclosest(var_07,var_08); + foreach(var_0C in var_08) + { + if(var_06 sightconetrace(var_0C.origin,var_02) != 1) + { + var_08 = common_scripts\utility::array_remove(var_08,var_0C); + continue; + } + } + + var_0E = maps\_utility::getclosest(var_07,var_08); + if(var_08.size < 2) + { + var_03 = var_0A; + } + else if(var_0E != var_09) + { + var_03 = var_0E; + } + else + { + var_0F = []; + var_09 = maps\_utility::get_array_of_closest(var_08,var_09,var_7B,2); + var_10 = randomint(var_09.size); + if(randomint(100) > 50) + { + var_04 = var_09[var_10]; + } + else + { + var_04 = var_0A; + } + } + + var_0F = randomfloatrange(level.var_287D - 0.5,level.var_287D + 0.5); + common_scripts\utility::waittill_notify_or_timeout("damage_by_player",var_0F); + } +} + +//Function Number: 15 +func_28A5(param_00) +{ + if(!level.player func_28CE()) + { + return 0; + } + + if(!level.player adsbuttonpressed()) + { + return 0; + } + + var_01 = level.player geteye(); + if(sighttracepassed(var_01,param_00.origin,0,level.player)) + { + return 1; + } + + return 0; +} + +//Function Number: 16 +func_28A6() +{ + self endon("stop_shooting"); + self endon("death"); + self endon("heli_players_dead"); + thread func_28B0(); + var_00 = level.var_2878 * level.var_2878; + level.var_28A7 = 0; + while(isdefined(self)) + { + wait randomfloatrange(0.8,1.3); + if(!func_28AB() || !func_28AA()) + { + var_01 = func_28AE(); + if(isplayer(var_01)) + { + self.var_288F = var_01; + } + } + + if(func_28AA() && level.players.size > 1) + { + var_02 = maps\_utility::get_closest_player_healthy(self.origin); + if(self.var_288F != var_02) + { + var_01 = func_28AE(); + if(isplayer(var_01)) + { + self.var_288F = var_01; + } + } + } + + if(func_28AA()) + { + if(!func_28A9() || level.var_28A7 == 1) + { + var_01 = func_28AF(); + self.var_288F = var_01; + } + } + + if(isdefined(self.var_288C) && isplayer(self.var_288C)) + { + self.var_288F = self.var_288C; + } + else if(!func_28AB()) + { + var_01 = func_28AF(); + self.var_288F = var_01; + } + + if(!func_28AB()) + { + continue; + } + + if(self.var_288F func_28C9(self)) + { + continue; + } + + if(func_28AB() && distancesquared(self.var_288F.origin,self.origin) > var_00) + { + continue; + } + + if(self.turrettype == "default" && func_28AA()) + { + func_28C2(self.var_288F); + wait randomfloatrange(0.8,1.3); + func_28C2(self.var_288F); + wait randomfloatrange(0.8,1.3); + while(func_28C3(self.var_288F) && !self.var_288F func_28C9(self)) + { + func_28B7(); + wait randomfloatrange(2,4); + } + + continue; + } + + if(isplayer(self.var_288F) || isai(self.var_288F)) + { + func_28B7(); + } + + if(isplayer(self.var_288F)) + { + thread func_28A8(self); + } + + common_scripts\utility::waittill_notify_or_timeout("damage_by_player",level.var_287C); + } +} + +//Function Number: 17 +func_28A8(param_00) +{ + level notify("player_is_heli_target"); + level endon("player_is_heli_target"); + level.var_28A7 = 1; + param_00 common_scripts\utility::waittill_notify_or_timeout("damage_by_player",level.var_287E); + level.var_28A7 = 0; +} + +//Function Number: 18 +func_28A9() +{ + if(!isdefined(self.var_288F)) + { + return 0; + } + + var_00 = self.var_288F.origin + (0,0,32); + if(isplayer(self.var_288F)) + { + var_00 = self.var_288F geteye(); + } + + var_01 = self gettagorigin("tag_flash"); + var_02 = sighttracepassed(var_01,var_00,0,self); + return var_02; +} + +//Function Number: 19 +func_28AA() +{ + if(!isdefined(self.var_288F)) + { + return 0; + } + + if(isplayer(self.var_288F)) + { + return 1; + } + + return 0; +} + +//Function Number: 20 +func_28AB() +{ + if(!isdefined(self.var_288F)) + { + return 0; + } + + if(!isalive(self.var_288F)) + { + return 0; + } + + if(self.var_288F == self.var_288E) + { + return 0; + } + + return 1; +} + +//Function Number: 21 +func_28AC() +{ + var_00 = maps\_helicopter_globals::getenemytarget(level.var_2878,level.var_287A,1,1,0,1,level.var_28AD); + if(isdefined(var_00) && isplayer(var_00)) + { + var_00 = self.var_288E; + } + + if(!isdefined(var_00)) + { + var_00 = self.var_288E; + } + + return var_00; +} + +//Function Number: 22 +func_28AE() +{ + var_00 = getaiarray("allies"); + var_01 = maps\_helicopter_globals::getenemytarget(level.var_2878,level.var_287A,1,0,0,0,var_00); + if(!isdefined(var_01)) + { + var_01 = self.var_288E; + } + + return var_01; +} + +//Function Number: 23 +func_28AF() +{ + var_00 = maps\_helicopter_globals::getenemytarget(level.var_2878,level.var_287A,1,1,0,1,level.players); + if(!isdefined(var_00)) + { + var_00 = self.var_288E; + } + + return var_00; +} + +//Function Number: 24 +func_28B0() +{ + if(!isdefined(self.var_28B1)) + { + return; + } + + self endon("death"); + self endon("heli_players_dead"); + self endon("stop_shooting"); + var_00 = undefined; + var_01 = "turret_attackheli"; + var_02 = "missile_attackheli"; + var_03 = undefined; + var_04 = undefined; + var_05 = []; + switch(self.vehicletype) + { + case "mi28": + var_00 = 1; + var_03 = 1; + var_04 = 0.5; + break; + var_7B[7] + "tag_store_R_2_d" + var_7B[6] + "tag_store_L_2_d" + var_7B[5] + "tag_store_R_2_c" + var_7B[4] + "tag_store_L_2_c" + var_7B[3] + "tag_store_R_2_b" + var_7B[2] + "tag_store_L_2_b" + var_7B[1] + "tag_store_R_2_a" + var_7B[0] + "tag_store_L_2_a" + break; + + case "littlebird": + var_01 = 1; + var_04 = 1; + var_05 = 0.5; + break; + var_7B[1] + "tag_missile_right" + var_7B[0] + "tag_missile_left" + break; + + default: + break; + } + + var_06 = -1; + for(;;) + { + wait 0.05; + self waittill("fire_missiles",var_07); + if(!isplayer(var_07)) + { + continue; + } + + var_08 = var_07; + if(!func_28B2(var_08)) + { + continue; + } + + for(var_09 = 0;var_09 < var_01;var_09++) + { + var_06++; + if(var_06 >= var_7B.size) + { + var_06 = 0; + } + + self setvehweapon(var_03); + self.var_2889 = 1; + var_0A = self fireweapon(var_7B[var_06],var_08); + var_0A thread missilelosetarget(var_05); + var_0A thread func_28B3(); + if(var_09 < var_01 - 1) + { + wait var_04; + } + } + + self.var_2889 = 0; + self setvehweapon(var_02); + wait 10; + } +} + +//Function Number: 25 +func_28B2(param_00) +{ + if(self.var_288A) + { + return 0; + } + + return 1; +} + +//Function Number: 26 +func_28B3() +{ + if(distancesquared(self.origin,level.player.origin) > 9000000) + { + return; + } + + var_00 = self.origin; + while(isdefined(self)) + { + var_00 = self.origin; + wait 0.1; + } + + earthquake(0.7,1.5,var_00,1600); +} + +//Function Number: 27 +missilelosetarget(param_00) +{ + self endon("death"); + self endon("heli_players_dead"); + wait param_00; + if(isdefined(self)) + { + self missile_cleartarget(); + } +} + +//Function Number: 28 +func_28B4(param_00) +{ + for(var_01 = 0;var_01 < level.players.size;var_01++) + { + if(param_00 != level.players[var_01]) + { + return level.players[var_01]; + } + } + + return level.players[0]; +} + +//Function Number: 29 +func_28B5() +{ + self notify("notify_disable_thread"); + self endon("notify_disable_thread"); + self endon("death"); + self endon("heli_players_dead"); + for(;;) + { + self waittill("disable_turret"); + self.var_2888 = 0; + } +} + +//Function Number: 30 +func_28B6() +{ + self notify("notify_enable_thread"); + self endon("notify_enable_thread"); + self endon("death"); + self endon("heli_players_dead"); + for(;;) + { + self waittill("enable_turret"); + self.var_2888 = 1; + } +} + +//Function Number: 31 +func_28B7() +{ + switch(self.turrettype) + { + case "default": + var_00 = randomintrange(5,10); + var_01 = weaponfiretime("turret_attackheli"); + func_28BA(self.var_288F,var_00,var_01); + break; + + case "miniguns": + var_00 = func_28B8(self.var_288F); + if(self.var_2888 && !self.var_2889) + { + func_28BB(self.var_288F,var_00); + } + break; + + default: + break; + } +} + +//Function Number: 32 +func_28B8(param_00) +{ + var_01 = undefined; + if(!isplayer(param_00)) + { + var_01 = level.var_2876; + return var_01; + } + + switch(level.gameskill) + { + case 3: + case 2: + case 1: + case 0: + var_01 = randomintrange(2,3); + break; + } + + return var_01; +} + +//Function Number: 33 +func_28B9(param_00) +{ + self endon("death"); + self endon("heli_players_dead"); + wait param_00; + if(!isplayer(self.var_288F)) + { + return; + } + + self notify("fire_missiles",self.var_288F); +} + +//Function Number: 34 +func_28BA(param_00,param_01,param_02) +{ + thread func_28B9(randomfloatrange(0.2,2)); + for(var_03 = 0;var_03 < param_01;var_03++) + { + self setturrettargetent(param_00,common_scripts\utility::randomvector(50) + (0,0,32)); + if(self.var_2888 && !self.var_2889) + { + self fireweapon(); + } + + wait param_02; + } +} + +//Function Number: 35 +func_28BB(param_00,param_01,param_02) +{ + self endon("death"); + self endon("heli_players_dead"); + self notify("firing_miniguns"); + self endon("firing_miniguns"); + var_03 = func_2894(); + common_scripts\utility::array_thread(var_03,::func_28BE,param_00,self); + if(!self.var_2897) + { + self.var_2898 = 1; + thread maps\_utility::play_sound_on_tag("littlebird_gatling_spinup","tag_flash"); + wait 2.1; + thread maps\_utility::play_loop_sound_on_tag("littlebird_minigun_spinloop","tag_flash"); + } + + self.var_2897 = 1; + if(!isdefined(param_02)) + { + param_02 = 3; + } + + var_04 = 0.5; + if(var_04 > param_02) + { + var_04 = param_02; + } + + if(var_04 > 0) + { + wait randomfloatrange(var_04,param_02); + } + + func_28BC(param_00,param_01); + var_03 = func_2894(); + common_scripts\utility::array_call(var_03,::stopfiring); + thread func_28C0(param_00); + self notify("stopping_firing"); +} + +//Function Number: 36 +func_28BC(param_00,param_01) +{ + self endon("death"); + self endon("heli_players_dead"); + if(isplayer(param_00)) + { + self endon("cant_see_player"); + } + + var_02 = func_2894(); + common_scripts\utility::array_call(var_02,::startfiring); + wait randomfloatrange(1,2); + if(isplayer(param_00)) + { + thread func_28BD(param_00); + } + + if(isplayer(param_00)) + { + var_03 = randomfloatrange(0.5,3); + thread func_28B9(var_03); + } + + wait param_01; +} + +//Function Number: 37 +func_28BD(param_00) +{ + self endon("death"); + self endon("heli_players_dead"); + self endon("stopping_firing"); + self notify("tracking_player"); + self endon("tracking_player"); + for(;;) + { + if(!func_28C3(param_00)) + { + break; + } + + wait 0.5; + } + + wait level.var_287F; + self notify("cant_see_player"); +} + +//Function Number: 38 +func_28BE(param_00,param_01) +{ + param_01 endon("death"); + param_01 endon("heli_players_dead"); + self notify("miniguns_have_new_target"); + self endon("miniguns_have_new_target"); + if(!isplayer(param_00) && isai(param_00) && level.var_2879 == 0) + { + var_02 = spawn("script_origin",param_00.origin + (0,0,100)); + var_02 linkto(param_00); + thread func_28BF(var_02); + param_00 = var_02; + } + + for(;;) + { + wait 0.5; + self settargetentity(param_00); + } +} + +//Function Number: 39 +func_28BF(param_00) +{ + common_scripts\utility::waittill_either("death","miniguns_have_new_target"); + param_00 delete(); +} + +//Function Number: 40 +func_28C0(param_00) +{ + self endon("death"); + self endon("heli_players_dead"); + self endon("firing_miniguns"); + if(isplayer(param_00)) + { + wait randomfloatrange(3,4); + } + else + { + wait randomfloatrange(1,2); + } + + thread func_28C1(); + self.var_2898 = 0; +} + +//Function Number: 41 +func_28C1() +{ + self notify("stop soundlittlebird_minigun_spinloop"); + self.var_2897 = 0; + maps\_utility::play_sound_on_tag("littlebird_gatling_cooldown","tag_flash"); +} + +//Function Number: 42 +func_28C2(param_00) +{ + var_01 = anglestoforward(level.player.angles); + var_02 = var_01 * 400; + var_03 = var_02 + common_scripts\utility::randomvector(50); + var_04 = randomintrange(10,20); + var_05 = weaponfiretime("turret_attackheli"); + for(var_06 = 0;var_06 < var_04;var_06++) + { + var_03 = var_02 + common_scripts\utility::randomvector(50); + self setturrettargetent(param_00,var_03); + if(self.var_2888) + { + self fireweapon(); + } + + wait var_05; + } +} + +//Function Number: 43 +func_28C3(param_00) +{ + self endon("death"); + self endon("heli_players_dead"); + var_01 = self gettagorigin("tag_flash"); + if(sighttracepassed(var_01,param_00 geteye(),0,undefined)) + { + return 1; + } + + return 0; +} + +//Function Number: 44 +func_28C4(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = []; + var_06 = strtok(param_01.script_linkto," "); + for(var_07 = 0;var_07 < param_02.size;var_07++) + { + for(var_08 = 0;var_08 < var_06.size;var_08++) + { + if(param_02[var_07].script_linkname == var_06[var_08]) + { + var_05[var_05.size] = param_02[var_07]; + } + } + } + + foreach(var_0A in var_05) + { + if(var_0A.origin[2] < param_04[2]) + { + var_05 = common_scripts\utility::array_remove(var_05,var_0A); + continue; + } + } + + return var_05; +} + +//Function Number: 45 +heli_damage_monitor() +{ + self endon("death"); + self endon("heli_players_dead"); + self endon("crashing"); + self endon("leaving"); + self.damagetaken = 0; + self.var_28C6 = undefined; + for(;;) + { + self waittill("damage",var_00,var_01,var_02,var_03,var_04); + if(!isdefined(var_01) || !isplayer(var_01)) + { + continue; + } + + self notify("damage_by_player"); + thread func_28C7(); + thread func_28C8(var_01); + if(maps\_utility::is_damagefeedback_enabled()) + { + var_01 thread updatedamagefeedback(); + } + } +} + +//Function Number: 46 +func_28C7() +{ + self notify("taking damage"); + self endon("taking damage"); + self endon("death"); + self endon("heli_players_dead"); + self.var_288B = 1; + wait 1; + self.var_288B = 0; +} + +//Function Number: 47 +func_28C8(param_00) +{ + self notify("attacker_seen"); + self endon("attacker_seen"); + self.var_28C6 = param_00; + self.var_288C = param_00; + wait level.var_287B; + self.var_288C = undefined; + self.var_28C6 = undefined; +} + +//Function Number: 48 +func_28C9(param_00) +{ + if(isdefined(param_00.var_28C6)) + { + if(param_00.var_28C6 == self) + { + return 0; + } + } + + if(isdefined(level.var_28A0)) + { + foreach(var_02 in level.var_28A0) + { + if(self istouching(var_02)) + { + return 1; + } + } + } + + return 0; +} + +//Function Number: 49 +updatedamagefeedback() +{ + if(!isplayer(self)) + { + return; + } + + self.hud_damagefeedback setshader("damage_feedback",24,48); + self playlocalsound("player_feedback_hit_alert"); + self.hud_damagefeedback.alpha = 1; + self.hud_damagefeedback fadeovertime(1); + self.hud_damagefeedback.alpha = 0; +} + +//Function Number: 50 +func_28CA() +{ + for(var_00 = 0;var_00 < level.players.size;var_00++) + { + var_01 = level.players[var_00]; + var_01.hud_damagefeedback = newclienthudelem(var_01); + var_01.hud_damagefeedback.horzalign = "center"; + var_01.hud_damagefeedback.vertalign = "middle"; + var_01.hud_damagefeedback.x = -12; + var_01.hud_damagefeedback.y = -12; + var_01.hud_damagefeedback.alpha = 0; + var_01.hud_damagefeedback.archived = 1; + var_01.hud_damagefeedback setshader("damage_feedback",24,48); + } +} + +//Function Number: 51 +func_28CB() +{ + self waittill("death"); + level notify("attack_heli_destroyed"); + level.var_289D = 1; + wait 15; + level.var_289F = 0; +} + +//Function Number: 52 +func_28CC(param_00) +{ + param_00 endon("death"); + param_00 endon("heli_players_dead"); + wait 30; + if(!level.var_289F) + { + return; + } + + func_28CD("co_cf_cmd_heli_small_fire"); + if(!level.var_289F) + { + return; + } + + func_28CD("co_cf_cmd_rpg_stinger"); + wait 30; + if(!level.var_289F) + { + return; + } + + func_28CD("co_cf_cmd_heli_wonders"); +} + +//Function Number: 53 +func_28CD(param_00) +{ + while(level.var_289E) + { + wait 1; + } + + level.var_289E = 1; + level.player playsound(param_00,"sounddone"); + level.player waittill("sounddone"); + wait 0.5; + level.var_289E = 0; +} + +//Function Number: 54 +func_28CE() +{ + var_00 = self getcurrentweapon(); + if(!isdefined(var_00)) + { + return 0; + } + + if(issubstr(tolower(var_00),"rpg")) + { + return 1; + } + + if(issubstr(tolower(var_00),"stinger")) + { + return 1; + } + + if(issubstr(tolower(var_00),"at4")) + { + return 1; + } + + return 0; +} + +//Function Number: 55 +func_28CF(param_00) +{ + common_scripts\utility::waittill_any("death","crash_done","turn_off_spotlight"); + self.var_2891 = undefined; + if(isdefined(self)) + { + stopfxontag(common_scripts\utility::getfx("_attack_heli_spotlight"),self,param_00); + } +} + +//Function Number: 56 +func_28D0() +{ + self endon("death"); + self endon("heli_players_dead"); + if(self.vehicletype != "littlebird") + { + return; + } + + thread func_28D2(); + var_00 = undefined; + for(;;) + { + wait 0.05; + switch(self.vehicletype) + { + case "littlebird": + var_00 = self.var_28D1; + break; + + default: + var_00 = self.var_288F; + break; + } + + if(isdefined(var_00)) + { + self setturrettargetent(var_00,(0,0,0)); + } + } +} + +//Function Number: 57 +func_28D2() +{ + self endon("death"); + self endon("heli_players_dead"); + var_00 = self.var_288E; + var_00.targetname = "original_ent"; + self.var_28D3 = spawn("script_origin",var_00.origin); + self.var_28D3.origin = var_00.origin; + self.var_28D3.angles = var_00.angles; + self.var_28D3.targetname = "left_ent"; + self.var_28D4 = spawn("script_origin",var_00.origin); + self.var_28D4.origin = var_00.origin; + self.var_28D4.angles = var_00.angles; + self.var_28D4.targetname = "right_ent"; + var_01 = spawnstruct(); + var_01.entity = self.var_28D3; + var_01.right = 250; + var_01 maps\_utility::translate_local(); + self.var_28D3 linkto(self); + var_02 = spawnstruct(); + var_02.entity = self.var_28D4; + var_02.right = -250; + var_02 maps\_utility::translate_local(); + self.var_28D4 linkto(self); + var_03 = []; + self.var_28D1 = var_01; + common_scripts\utility::array_thread(var_7B,::func_28D6,self); + for(;;) + { + wait randomfloatrange(1,3); + if(func_28AA() && !func_28D5()) + { + self.var_28D1 = self.var_288F; + continue; + } + + var_04 = randomint(var_7B.size); + self.var_288E = var_7B[var_04]; + self.var_28D1 = self.var_288E; + } +} + +//Function Number: 58 +func_28D5() +{ + self endon("death"); + self endon("heli_players_dead"); + if(!isdefined(self.var_288F)) + { + return 0; + } + + if(!isplayer(self.var_288F)) + { + return 0; + } + + var_00 = self.var_288F; + var_01 = maps\_utility::within_fov(var_00 geteye(),var_00 getplayerangles(),self.origin,level.cosine["35"]); + return var_01; +} + +//Function Number: 59 +func_28D6(param_00) +{ + param_00 common_scripts\utility::waittill_either("death","crash_done"); + if(isdefined(self)) + { + self delete(); + } +} + +//Function Number: 60 +func_28D7(param_00) +{ + var_01 = self; + var_01 maps\_vehicle::turret_set_default_on_mode("manual"); + if(isdefined(param_00.var_288E)) + { + var_01 settargetentity(param_00.var_288E); + } + + var_01 setmode("manual"); + param_00 waittill("death"); + if(isdefined(param_00.var_2898) && param_00.var_2898 == 1) + { + thread func_28C1(); + } +} + +//Function Number: 61 +func_28D9() +{ + common_scripts\utility::waittill_either("death","crash_done"); + if(isdefined(self.attractor)) + { + missile_deleteattractor(self.attractor); + } + + if(isdefined(self.var_2885)) + { + missile_deleteattractor(self.var_2885); + } +} + +//Function Number: 62 +func_28DA(param_00) +{ + self endon("death"); + self endon("heli_players_dead"); + self endon("stop_default_heli_missiles"); + self.var_28DB = undefined; + while(isdefined(self)) + { + wait 0.05; + var_01 = undefined; + var_02 = undefined; + var_03 = undefined; + self.var_28DB = undefined; + var_04 = undefined; + if(isdefined(self.currentnode) && isdefined(self.currentnode.target)) + { + var_04 = maps\_utility::getent_or_struct(self.currentnode.target,"targetname"); + } + + if(isdefined(var_04) && isdefined(var_04.script_linkto)) + { + self.var_28DB = maps\_utility::getent_or_struct(var_04.script_linkto,"script_linkname"); + } + + if(isdefined(self.var_28DB)) + { + var_01 = self.var_28DB; + var_02 = var_01.var_28DC; + var_03 = var_01.script_delay; + var_04 waittill("trigger"); + continue; + } + + common_scripts\utility::waittill_any("near_goal","goal"); + if(isdefined(var_01)) + { + thread func_28E2(var_01,var_02,var_03,param_00); + } + } +} + +//Function Number: 63 +func_28DD() +{ + self notify("stop_default_heli_missiles"); +} + +//Function Number: 64 +func_28DE(param_00,param_01) +{ + if(!isdefined(param_00)) + { + param_00 = "tag_barrel"; + } + + if(!isdefined(param_01)) + { + param_01 = 0; + } + + playfxontag(common_scripts\utility::getfx("_attack_heli_spotlight"),self,param_00); + self.var_2891 = 1; + thread func_28CF(param_00); + if(param_01) + { + self endon("death"); + self endon("heli_players_dead"); + var_02 = self gettagorigin("tag_origin"); + if(!isdefined(self.var_288E)) + { + func_2893(); + } + + self setturrettargetent(self.var_288E); + thread func_28D0(); + } +} + +//Function Number: 65 +func_28DF() +{ + self notify("turn_off_spotlight"); +} + +//Function Number: 66 +func_28E0() +{ + self endon("death"); + self endon("heli_players_dead"); + self endon("stop_spotlight_random_targets"); + if(!isdefined(self.var_288E)) + { + thread func_2893(); + } + + if(!isdefined(self.var_28D3)) + { + thread func_28D2(); + } + + while(isdefined(self)) + { + wait 0.05; + self setturrettargetent(self.var_288E,(0,0,0)); + } +} + +//Function Number: 67 +func_28E1() +{ + self notify("stop_spotlight_random_targets"); +} + +//Function Number: 68 +func_28E2(param_00,param_01,param_02,param_03) +{ + self endon("death"); + self endon("heli_players_dead"); + if(isdefined(self.var_28E3)) + { + var_04 = self.var_28E3; + } + else + { + var_04 = "turret_attackheli"; + } + + var_05 = "missile_attackheli"; + if(isdefined(param_03)) + { + var_05 = param_03; + } + + var_06 = undefined; + var_07 = []; + self setvehweapon(var_04); + if(!isdefined(param_01)) + { + param_01 = 1; + } + + if(!isdefined(param_02)) + { + param_02 = 1; + } + + if(!isdefined(param_00.classname)) + { + if(!isdefined(self.var_28E4)) + { + self.var_28E4 = spawn("script_origin",param_00.origin); + thread common_scripts\utility::delete_on_death(self.var_28E4); + } + + self.var_28E4.origin = param_00.origin; + param_00 = self.var_28E4; + } + + switch(self.vehicletype) + { + case "mi28": + var_06 = 0.5; + break; + var_7B[7] + "tag_store_R_2_d" + var_7B[6] + "tag_store_L_2_d" + var_7B[5] + "tag_store_R_2_c" + var_7B[4] + "tag_store_L_2_c" + var_7B[3] + "tag_store_R_2_b" + var_7B[2] + "tag_store_L_2_b" + var_7B[1] + "tag_store_R_2_a" + var_7B[0] + "tag_store_L_2_a" + break; + + case "littlebird": + var_07 = 0.5; + break; + var_7B[1] + "tag_missile_right" + var_7B[0] + "tag_missile_left" + break; + + default: + break; + } + + var_08 = -1; + for(var_09 = 0;var_09 < param_02;var_09++) + { + var_08++; + if(var_08 >= var_7B.size) + { + var_08 = 0; + } + + self setvehweapon(var_06); + self.var_2889 = 1; + var_0A = self fireweapon(var_7B[var_08],param_01); + var_0A thread func_28B3(); + if(var_09 < param_02 - 1) + { + wait param_03; + } + } + + self.var_2889 = 0; + self setvehweapon(var_05); +} + +//Function Number: 69 +func_28E5() +{ + self waittill("trigger",var_00); + var_01 = common_scripts\utility::getstructarray(self.target,"targetname"); + var_01 = maps\_utility::array_index_by_script_index(var_01); + func_28E7(var_00,var_01); +} + +//Function Number: 70 +func_28E6() +{ + self waittill("trigger",var_00); + var_01 = maps\_utility::get_linked_structs(); + var_01 = maps\_utility::array_index_by_script_index(var_01); + func_28E7(var_00,var_01); +} + +//Function Number: 71 +func_28E7(param_00,param_01) +{ + var_02 = []; + if(level.script == "roadkill") + { + } + + if(param_01.vehicletype == "cobra") + { + } + + var_03 = []; + for(var_04 = 0;var_04 < var_02.size;var_04++ = var_7B[1]) + { + var_03[var_04] = spawn("script_origin",var_02[var_04].origin); + param_01 setvehweapon("littlebird_FFAR"); + param_01 setturrettargetent(var_03[var_04]); + var_05 = param_01 fireweapon(var_7B[var_04 % var_7B.size],var_03[var_04],(0,0,0)); + var_05 common_scripts\utility::delaycall(1,::missile_cleartarget); + wait randomfloatrange(0.2,0.3); + } + + wait 2; + foreach(var_07 in var_03) + { + var_07 delete(); + } +} \ No newline at end of file diff --git a/MW3/PC/SP/413.gsc b/MW3/PC/SP/413.gsc new file mode 100644 index 0000000..1593d65 --- /dev/null +++ b/MW3/PC/SP/413.gsc @@ -0,0 +1,16 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 413.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:23:17 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + var_00[0] = "head_delta_elite_a"; + return var_7B; +} \ No newline at end of file diff --git a/MW3/PC/SP/450.gsc b/MW3/PC/SP/450.gsc new file mode 100644 index 0000000..c6a896f --- /dev/null +++ b/MW3/PC/SP/450.gsc @@ -0,0 +1,16 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 450.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:23:17 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + var_00[0] = "head_delta_elite_a"; + return var_7B; +} \ No newline at end of file diff --git a/MW3/PC/SP/6363.gsc b/MW3/PC/SP/6363.gsc new file mode 100644 index 0000000..75f2e5e --- /dev/null +++ b/MW3/PC/SP/6363.gsc @@ -0,0 +1,24 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 6363.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:23:22 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + var_00 = maps\_utility::create_vision_set_fog("so_survival_mp_village"); + var_00.startdist = 17346.26; + var_00.halfwaydist = 32487.6; + var_00.red = 0.583682; + var_00.green = 0.52939; + var_00.blue = 0.302793; + var_00.maxopacity = 1; + var_00.sunendfadeangle = 0; + var_00.sunfogenabled = 0; + maps\_utility::vision_set_fog_changes("so_survival_mp_village",0); +} \ No newline at end of file diff --git a/MW3/PC/SP/6364.gsc b/MW3/PC/SP/6364.gsc new file mode 100644 index 0000000..cf060cd --- /dev/null +++ b/MW3/PC/SP/6364.gsc @@ -0,0 +1,17 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 6364.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:23:22 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + level.var_3A9E = 1; + level.player = getentarray("player","classname")[0]; + lib_18DB::main(); +} \ No newline at end of file diff --git a/MW3/PC/SP/739.gsc b/MW3/PC/SP/739.gsc new file mode 100644 index 0000000..8d18ba8 --- /dev/null +++ b/MW3/PC/SP/739.gsc @@ -0,0 +1,14 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 739.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:24:55 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ +} \ No newline at end of file diff --git a/MW3/PC/SP/912.gsc b/MW3/PC/SP/912.gsc new file mode 100644 index 0000000..4ffe86c --- /dev/null +++ b/MW3/PC/SP/912.gsc @@ -0,0 +1,16 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 912.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:24:56 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_48E5::main(); + lib_48E6::main(); +} \ No newline at end of file diff --git a/MW3/PC/SP/913.gsc b/MW3/PC/SP/913.gsc new file mode 100644 index 0000000..52e9c00 --- /dev/null +++ b/MW3/PC/SP/913.gsc @@ -0,0 +1,38 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: 913.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 0 ms + * Timestamp: 10/27/2023 2:24:56 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + level._effect["heat_haze_mirage"] = loadfx("distortion/heat_haze_mirage"); + level._effect["falling_dirt_area_runner"] = loadfx("dust/falling_dirt_area_runner"); + level._effect["sand_spray_detail_oriented_runner_hardhat"] = loadfx("dust/sand_spray_detail_oriented_runner_hardhat"); + level._effect["sand_spray_cliff_oriented_runner_hardhat"] = loadfx("dust/sand_spray_cliff_oriented_runner_hardhat"); + level._effect["dust_spiral_runner_small"] = loadfx("dust/dust_spiral_runner_small"); + level._effect["car_fire_mp"] = loadfx("fire/car_fire_mp"); + level._effect["car_fire_mp_far"] = loadfx("fire/car_fire_mp_far"); + level._effect["trash_spiral_runner"] = loadfx("misc/trash_spiral_runner"); + level._effect["birds_takeoff_infrequent_runner"] = loadfx("misc/birds_takeoff_infrequent_runner"); + level._effect["leaves_fall_gentlewind_mp_village"] = loadfx("misc/leaves_fall_gentlewind_mp_village"); + level._effect["leaves_fall_gentlewind_mp_village_far"] = loadfx("misc/leaves_fall_gentlewind_mp_village_far"); + level._effect["insects_carcass_runner"] = loadfx("misc/insects_carcass_runner"); + level._effect["insects_light_hunted_a_mp"] = loadfx("misc/insects_light_hunted_a_mp"); + level._effect["insect_trail_runner_icbm"] = loadfx("misc/insect_trail_runner_icbm"); + level._effect["insects_dragonfly_runner_a"] = loadfx("misc/insects_dragonfly_runner_a"); + level._effect["hallway_smoke_light"] = loadfx("smoke/hallway_smoke_light"); + level._effect["room_smoke_400"] = loadfx("smoke/room_smoke_400"); + level._effect["waterfall_mist_mp_village"] = loadfx("water/waterfall_mist_mp_village"); + level._effect["waterfall_mist_ground"] = loadfx("water/waterfall_mist_ground"); + level._effect["waterfall_village_1"] = loadfx("water/waterfall_village_1"); + level._effect["waterfall_village_2"] = loadfx("water/waterfall_village_2"); + level._effect["waterfall_drainage_splash"] = loadfx("water/waterfall_drainage_splash"); + level._effect["waterfall_drainage_splash_mp"] = loadfx("water/waterfall_drainage_splash_mp"); + level._effect["waterfall_drainage_splash_large"] = loadfx("water/waterfall_drainage_splash_large"); +} \ No newline at end of file diff --git a/MW3/PC/SP/aitype/ally_so_delta.gsc b/MW3/PC/SP/aitype/ally_so_delta.gsc new file mode 100644 index 0000000..c6b9670 --- /dev/null +++ b/MW3/PC/SP/aitype/ally_so_delta.gsc @@ -0,0 +1,65 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: aitype\ally_so_delta.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 3 + * Decompile Time: 77 ms + * Timestamp: 10/27/2023 2:17:02 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self.var_3AA1 = ""; + self.var_3AA2 = ""; + self.team = "allies"; + self.type = "human"; + self.subclass = "regular"; + self.accuracy = 0.2; + self.health = 100; + self.secondaryweapon = ""; + self.sidearm = ""; + self.grenadeweapon = ""; + self.grenadeammo = 0; + if(isai(self)) + { + self setengagementmindist(256,0); + self setengagementmaxdist(768,1024); + } + + self.weapon = "none"; + switch(lib_0144::func_1E63(4)) + { + case 0: + lib_060B::main(); + break; + + case 1: + lib_060C::main(); + break; + + case 2: + lib_060D::main(); + break; + + case 3: + lib_06B9::main(); + break; + } +} + +//Function Number: 2 +spawner() +{ + self setspawnerteam("allies"); +} + +//Function Number: 3 +precache() +{ + lib_060B::precache(); + lib_060C::precache(); + lib_060D::precache(); + lib_06B9::precache(); +} \ No newline at end of file diff --git a/MW3/PC/SP/aitype/ally_so_riotshield.gsc b/MW3/PC/SP/aitype/ally_so_riotshield.gsc new file mode 100644 index 0000000..b880eb9 --- /dev/null +++ b/MW3/PC/SP/aitype/ally_so_riotshield.gsc @@ -0,0 +1,57 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: aitype\ally_so_riotshield.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 3 + * Decompile Time: 59 ms + * Timestamp: 10/27/2023 2:17:02 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self.var_3AA1 = ""; + self.var_3AA2 = ""; + self.team = "allies"; + self.type = "human"; + self.subclass = "riotshield"; + self.accuracy = 0.2; + self.health = 100; + self.secondaryweapon = "iw5_riotshield_so"; + self.sidearm = ""; + self.grenadeweapon = ""; + self.grenadeammo = 0; + if(isai(self)) + { + self setengagementmindist(256,0); + self setengagementmaxdist(768,1024); + } + + self.weapon = "none"; + switch(lib_0144::func_1E63(2)) + { + case 0: + lib_0609::main(); + break; + + case 1: + lib_060A::main(); + break; + } +} + +//Function Number: 2 +spawner() +{ + self setspawnerteam("allies"); +} + +//Function Number: 3 +precache() +{ + lib_0609::precache(); + lib_060A::precache(); + precacheitem("iw5_riotshield_so"); + maps\_riotshield::init_riotshield(); +} \ No newline at end of file diff --git a/MW3/PC/SP/aitype/enemy_docks_gasmask_smg.gsc b/MW3/PC/SP/aitype/enemy_docks_gasmask_smg.gsc new file mode 100644 index 0000000..a722b0f --- /dev/null +++ b/MW3/PC/SP/aitype/enemy_docks_gasmask_smg.gsc @@ -0,0 +1,129 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: aitype\enemy_docks_gasmask_smg.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 3 + * Decompile Time: 63 ms + * Timestamp: 10/27/2023 2:17:03 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self.var_3AA1 = ""; + self.var_3AA2 = ""; + self.team = "axis"; + self.type = "human"; + self.subclass = "regular"; + self.accuracy = 0.2; + self.health = 150; + self.secondaryweapon = ""; + self.sidearm = "fnfiveseven"; + self.grenadeweapon = "fraggrenade"; + self.grenadeammo = 0; + if(isai(self)) + { + self setengagementmindist(256,0); + self setengagementmaxdist(768,1024); + } + + switch(lib_0144::func_1E68(6)) + { + case 0: + self.weapon = "p90"; + break; + + case 1: + self.weapon = "p90_eotech"; + break; + + case 2: + self.weapon = "p90_reflex"; + break; + + case 3: + self.weapon = "pp90m1"; + break; + + case 4: + self.weapon = "pp90m1_eotech"; + break; + + case 5: + self.weapon = "pp90m1_reflex"; + break; + } + + switch(lib_0144::func_1E63(10)) + { + case 0: + lib_05CC::main(); + break; + + case 1: + lib_05CD::main(); + break; + + case 2: + lib_05CE::main(); + break; + + case 3: + lib_05CF::main(); + break; + + case 4: + lib_05D0::main(); + break; + + case 5: + lib_05D1::main(); + break; + + case 6: + lib_05D2::main(); + break; + + case 7: + lib_05D3::main(); + break; + + case 8: + lib_05D4::main(); + break; + + case 9: + lib_05D5::main(); + break; + } +} + +//Function Number: 2 +spawner() +{ + self setspawnerteam("axis"); +} + +//Function Number: 3 +precache() +{ + lib_05CC::precache(); + lib_05CD::precache(); + lib_05CE::precache(); + lib_05CF::precache(); + lib_05D0::precache(); + lib_05D1::precache(); + lib_05D2::precache(); + lib_05D3::precache(); + lib_05D4::precache(); + lib_05D5::precache(); + precacheitem("p90"); + precacheitem("p90_eotech"); + precacheitem("p90_reflex"); + precacheitem("pp90m1"); + precacheitem("pp90m1_eotech"); + precacheitem("pp90m1_reflex"); + precacheitem("fnfiveseven"); + precacheitem("fraggrenade"); +} \ No newline at end of file diff --git a/MW3/PC/SP/aitype/enemy_dog.gsc b/MW3/PC/SP/aitype/enemy_dog.gsc new file mode 100644 index 0000000..a6dbd79 --- /dev/null +++ b/MW3/PC/SP/aitype/enemy_dog.gsc @@ -0,0 +1,49 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: aitype\enemy_dog.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 3 + * Decompile Time: 63 ms + * Timestamp: 10/27/2023 2:17:03 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self.var_3AA1 = "dog.atr"; + self.var_3AA2 = "common_dogs.csv"; + self.team = "axis"; + self.type = "dog"; + self.subclass = "regular"; + self.accuracy = 0.2; + self.health = 200; + self.secondaryweapon = "dog_bite"; + self.sidearm = ""; + self.grenadeweapon = "fraggrenade"; + self.grenadeammo = 0; + if(isai(self)) + { + self setengagementmindist(256,0); + self setengagementmaxdist(768,1024); + } + + self.weapon = "dog_bite"; + lib_060E::main(); +} + +//Function Number: 2 +spawner() +{ + self setspawnerteam("axis"); +} + +//Function Number: 3 +precache() +{ + lib_060E::precache(); + precacheitem("dog_bite"); + precacheitem("dog_bite"); + precacheitem("fraggrenade"); + animscripts/dog/dog_init::func_3AF2(); +} \ No newline at end of file diff --git a/MW3/PC/SP/aitype/enemy_juggernaut_bfg.gsc b/MW3/PC/SP/aitype/enemy_juggernaut_bfg.gsc new file mode 100644 index 0000000..c70fabf --- /dev/null +++ b/MW3/PC/SP/aitype/enemy_juggernaut_bfg.gsc @@ -0,0 +1,50 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: aitype\enemy_juggernaut_bfg.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 3 + * Decompile Time: 64 ms + * Timestamp: 10/27/2023 2:17:04 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self.var_3AA1 = ""; + self.var_3AA2 = "juggernaut.csv"; + self.team = "axis"; + self.type = "human"; + self.subclass = "juggernaut"; + self.accuracy = 0.2; + self.health = 3600; + self.secondaryweapon = "beretta"; + self.sidearm = "beretta"; + self.grenadeweapon = "fraggrenade"; + self.grenadeammo = 0; + if(isai(self)) + { + self setengagementmindist(0,0); + self setengagementmaxdist(256,1024); + } + + self.weapon = "pecheneg"; + lib_05C5::main(); +} + +//Function Number: 2 +spawner() +{ + self setspawnerteam("axis"); +} + +//Function Number: 3 +precache() +{ + lib_05C5::precache(); + precacheitem("pecheneg"); + precacheitem("beretta"); + precacheitem("beretta"); + precacheitem("fraggrenade"); + maps\_juggernaut::main(); +} \ No newline at end of file diff --git a/MW3/PC/SP/aitype/enemy_juggernaut_explosive.gsc b/MW3/PC/SP/aitype/enemy_juggernaut_explosive.gsc new file mode 100644 index 0000000..bcd1115 --- /dev/null +++ b/MW3/PC/SP/aitype/enemy_juggernaut_explosive.gsc @@ -0,0 +1,50 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: aitype\enemy_juggernaut_explosive.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 3 + * Decompile Time: 62 ms + * Timestamp: 10/27/2023 2:17:04 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self.var_3AA1 = ""; + self.var_3AA2 = "juggernaut.csv"; + self.team = "axis"; + self.type = "human"; + self.subclass = "juggernaut"; + self.accuracy = 0.2; + self.health = 3600; + self.secondaryweapon = "fnfiveseven"; + self.sidearm = "fnfiveseven"; + self.grenadeweapon = "fraggrenade"; + self.grenadeammo = 0; + if(isai(self)) + { + self setengagementmindist(0,0); + self setengagementmaxdist(256,1024); + } + + self.weapon = "pecheneg"; + lib_05C9::main(); +} + +//Function Number: 2 +spawner() +{ + self setspawnerteam("axis"); +} + +//Function Number: 3 +precache() +{ + lib_05C9::precache(); + precacheitem("pecheneg"); + precacheitem("fnfiveseven"); + precacheitem("fnfiveseven"); + precacheitem("fraggrenade"); + maps\_juggernaut::main(); +} \ No newline at end of file diff --git a/MW3/PC/SP/aitype/enemy_juggernaut_headshot.gsc b/MW3/PC/SP/aitype/enemy_juggernaut_headshot.gsc new file mode 100644 index 0000000..554b3d2 --- /dev/null +++ b/MW3/PC/SP/aitype/enemy_juggernaut_headshot.gsc @@ -0,0 +1,50 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: aitype\enemy_juggernaut_headshot.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 3 + * Decompile Time: 59 ms + * Timestamp: 10/27/2023 2:17:05 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self.var_3AA1 = ""; + self.var_3AA2 = "juggernaut.csv"; + self.team = "axis"; + self.type = "human"; + self.subclass = "juggernaut"; + self.accuracy = 0.2; + self.health = 3600; + self.secondaryweapon = "beretta"; + self.sidearm = "beretta"; + self.grenadeweapon = "fraggrenade"; + self.grenadeammo = 0; + if(isai(self)) + { + self setengagementmindist(0,0); + self setengagementmaxdist(256,1024); + } + + self.weapon = "pecheneg"; + lib_05CA::main(); +} + +//Function Number: 2 +spawner() +{ + self setspawnerteam("axis"); +} + +//Function Number: 3 +precache() +{ + lib_05CA::precache(); + precacheitem("pecheneg"); + precacheitem("beretta"); + precacheitem("beretta"); + precacheitem("fraggrenade"); + maps\_juggernaut::main(); +} \ No newline at end of file diff --git a/MW3/PC/SP/aitype/enemy_juggernaut_riotshield.gsc b/MW3/PC/SP/aitype/enemy_juggernaut_riotshield.gsc new file mode 100644 index 0000000..b28b986 --- /dev/null +++ b/MW3/PC/SP/aitype/enemy_juggernaut_riotshield.gsc @@ -0,0 +1,51 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: aitype\enemy_juggernaut_riotshield.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 3 + * Decompile Time: 62 ms + * Timestamp: 10/27/2023 2:17:05 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self.var_3AA1 = ""; + self.var_3AA2 = "juggernaut_riotshield.csv"; + self.team = "axis"; + self.type = "human"; + self.subclass = "riotshield"; + self.accuracy = 0.2; + self.health = 3600; + self.secondaryweapon = "iw5_riotshield_so"; + self.sidearm = "fnfiveseven"; + self.grenadeweapon = "fraggrenade"; + self.grenadeammo = 0; + if(isai(self)) + { + self setengagementmindist(0,0); + self setengagementmaxdist(256,1024); + } + + self.weapon = "pecheneg"; + lib_05C7::main(); +} + +//Function Number: 2 +spawner() +{ + self setspawnerteam("axis"); +} + +//Function Number: 3 +precache() +{ + lib_05C7::precache(); + precacheitem("pecheneg"); + precacheitem("iw5_riotshield_so"); + precacheitem("fnfiveseven"); + precacheitem("fraggrenade"); + maps\_riotshield::init_riotshield(); + maps\_juggernaut::main(); +} \ No newline at end of file diff --git a/MW3/PC/SP/aitype/enemy_juggernaut_so_survival.gsc b/MW3/PC/SP/aitype/enemy_juggernaut_so_survival.gsc new file mode 100644 index 0000000..6ce4c5e --- /dev/null +++ b/MW3/PC/SP/aitype/enemy_juggernaut_so_survival.gsc @@ -0,0 +1,50 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: aitype\enemy_juggernaut_so_survival.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 3 + * Decompile Time: 62 ms + * Timestamp: 10/27/2023 2:17:06 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self.var_3AA1 = ""; + self.var_3AA2 = "juggernaut.csv"; + self.team = "axis"; + self.type = "human"; + self.subclass = "juggernaut"; + self.accuracy = 0.2; + self.health = 3600; + self.secondaryweapon = "fnfiveseven"; + self.sidearm = "fnfiveseven"; + self.grenadeweapon = "fraggrenade"; + self.grenadeammo = 0; + if(isai(self)) + { + self setengagementmindist(0,0); + self setengagementmaxdist(256,1024); + } + + self.weapon = "pecheneg"; + lib_05C7::main(); +} + +//Function Number: 2 +spawner() +{ + self setspawnerteam("axis"); +} + +//Function Number: 3 +precache() +{ + lib_05C7::precache(); + precacheitem("pecheneg"); + precacheitem("fnfiveseven"); + precacheitem("fnfiveseven"); + precacheitem("fraggrenade"); + maps\_juggernaut::main(); +} \ No newline at end of file diff --git a/MW3/PC/SP/aitype/enemy_so_chemical.gsc b/MW3/PC/SP/aitype/enemy_so_chemical.gsc new file mode 100644 index 0000000..d8f46e7 --- /dev/null +++ b/MW3/PC/SP/aitype/enemy_so_chemical.gsc @@ -0,0 +1,66 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: aitype\enemy_so_chemical.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 3 + * Decompile Time: 58 ms + * Timestamp: 10/27/2023 2:17:06 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self.var_3AA1 = ""; + self.var_3AA2 = ""; + self.team = "axis"; + self.type = "human"; + self.subclass = "regular"; + self.accuracy = 0.2; + self.health = 150; + self.secondaryweapon = ""; + self.sidearm = ""; + self.grenadeweapon = "fraggrenade"; + self.grenadeammo = 0; + if(isai(self)) + { + self setengagementmindist(256,0); + self setengagementmaxdist(768,1024); + } + + self.weapon = "none"; + switch(lib_0144::func_1E63(4)) + { + case 0: + lib_05CC::main(); + break; + + case 1: + lib_05D1::main(); + break; + + case 2: + lib_05DA::main(); + break; + + case 3: + lib_05DB::main(); + break; + } +} + +//Function Number: 2 +spawner() +{ + self setspawnerteam("axis"); +} + +//Function Number: 3 +precache() +{ + lib_05CC::precache(); + lib_05D1::precache(); + lib_05DA::precache(); + lib_05DB::precache(); + precacheitem("fraggrenade"); +} \ No newline at end of file diff --git a/MW3/PC/SP/aitype/enemy_so_claymore.gsc b/MW3/PC/SP/aitype/enemy_so_claymore.gsc new file mode 100644 index 0000000..4ed4cff --- /dev/null +++ b/MW3/PC/SP/aitype/enemy_so_claymore.gsc @@ -0,0 +1,47 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: aitype\enemy_so_claymore.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 3 + * Decompile Time: 58 ms + * Timestamp: 10/27/2023 2:17:06 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self.var_3AA1 = ""; + self.var_3AA2 = "common_rambo_anims.csv"; + self.team = "axis"; + self.type = "human"; + self.subclass = "militia"; + self.accuracy = 0.2; + self.health = 150; + self.secondaryweapon = ""; + self.sidearm = ""; + self.grenadeweapon = "fraggrenade"; + self.grenadeammo = 0; + if(isai(self)) + { + self setengagementmindist(0,0); + self setengagementmaxdist(350,600); + } + + self.weapon = "none"; + lib_05D8::main(); +} + +//Function Number: 2 +spawner() +{ + self setspawnerteam("axis"); +} + +//Function Number: 3 +precache() +{ + lib_05D8::precache(); + precacheitem("fraggrenade"); + maps\_rambo::main(); +} \ No newline at end of file diff --git a/MW3/PC/SP/aitype/enemy_so_easy.gsc b/MW3/PC/SP/aitype/enemy_so_easy.gsc new file mode 100644 index 0000000..d1a83de --- /dev/null +++ b/MW3/PC/SP/aitype/enemy_so_easy.gsc @@ -0,0 +1,61 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: aitype\enemy_so_easy.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 3 + * Decompile Time: 61 ms + * Timestamp: 10/27/2023 2:17:07 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self.var_3AA1 = ""; + self.var_3AA2 = ""; + self.team = "axis"; + self.type = "human"; + self.subclass = "regular"; + self.accuracy = 0.2; + self.health = 150; + self.secondaryweapon = ""; + self.sidearm = ""; + self.grenadeweapon = "fraggrenade"; + self.grenadeammo = 0; + if(isai(self)) + { + self setengagementmindist(256,0); + self setengagementmaxdist(768,1024); + } + + self.weapon = "none"; + switch(lib_0144::func_1E63(3)) + { + case 0: + lib_05BD::main(); + break; + + case 1: + lib_05BE::main(); + break; + + case 2: + lib_05BF::main(); + break; + } +} + +//Function Number: 2 +spawner() +{ + self setspawnerteam("axis"); +} + +//Function Number: 3 +precache() +{ + lib_05BD::precache(); + lib_05BE::precache(); + lib_05BF::precache(); + precacheitem("fraggrenade"); +} \ No newline at end of file diff --git a/MW3/PC/SP/aitype/enemy_so_easy_v2.gsc b/MW3/PC/SP/aitype/enemy_so_easy_v2.gsc new file mode 100644 index 0000000..0a3fd16 --- /dev/null +++ b/MW3/PC/SP/aitype/enemy_so_easy_v2.gsc @@ -0,0 +1,46 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: aitype\enemy_so_easy_v2.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 3 + * Decompile Time: 60 ms + * Timestamp: 10/27/2023 2:17:07 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self.var_3AA1 = ""; + self.var_3AA2 = ""; + self.team = "axis"; + self.type = "human"; + self.subclass = "regular"; + self.accuracy = 0.2; + self.health = 150; + self.secondaryweapon = ""; + self.sidearm = ""; + self.grenadeweapon = "fraggrenade"; + self.grenadeammo = 0; + if(isai(self)) + { + self setengagementmindist(256,0); + self setengagementmaxdist(768,1024); + } + + self.weapon = "none"; + lib_05D8::main(); +} + +//Function Number: 2 +spawner() +{ + self setspawnerteam("axis"); +} + +//Function Number: 3 +precache() +{ + lib_05D8::precache(); + precacheitem("fraggrenade"); +} \ No newline at end of file diff --git a/MW3/PC/SP/aitype/enemy_so_elite.gsc b/MW3/PC/SP/aitype/enemy_so_elite.gsc new file mode 100644 index 0000000..6fc777e --- /dev/null +++ b/MW3/PC/SP/aitype/enemy_so_elite.gsc @@ -0,0 +1,46 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: aitype\enemy_so_elite.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 3 + * Decompile Time: 65 ms + * Timestamp: 10/27/2023 2:17:08 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self.var_3AA1 = ""; + self.var_3AA2 = ""; + self.team = "axis"; + self.type = "human"; + self.subclass = "regular"; + self.accuracy = 0.2; + self.health = 150; + self.secondaryweapon = ""; + self.sidearm = ""; + self.grenadeweapon = "fraggrenade"; + self.grenadeammo = 0; + if(isai(self)) + { + self setengagementmindist(256,0); + self setengagementmaxdist(768,1024); + } + + self.weapon = "none"; + lib_47CC::main(); +} + +//Function Number: 2 +spawner() +{ + self setspawnerteam("axis"); +} + +//Function Number: 3 +precache() +{ + lib_47CC::precache(); + precacheitem("fraggrenade"); +} \ No newline at end of file diff --git a/MW3/PC/SP/aitype/enemy_so_hardened.gsc b/MW3/PC/SP/aitype/enemy_so_hardened.gsc new file mode 100644 index 0000000..593cc77 --- /dev/null +++ b/MW3/PC/SP/aitype/enemy_so_hardened.gsc @@ -0,0 +1,46 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: aitype\enemy_so_hardened.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 3 + * Decompile Time: 66 ms + * Timestamp: 10/27/2023 2:17:08 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self.var_3AA1 = ""; + self.var_3AA2 = ""; + self.team = "axis"; + self.type = "human"; + self.subclass = "regular"; + self.accuracy = 0.2; + self.health = 150; + self.secondaryweapon = ""; + self.sidearm = ""; + self.grenadeweapon = "fraggrenade"; + self.grenadeammo = 0; + if(isai(self)) + { + self setengagementmindist(256,0); + self setengagementmaxdist(768,1024); + } + + self.weapon = "none"; + lib_0608::main(); +} + +//Function Number: 2 +spawner() +{ + self setspawnerteam("axis"); +} + +//Function Number: 3 +precache() +{ + lib_0608::precache(); + precacheitem("fraggrenade"); +} \ No newline at end of file diff --git a/MW3/PC/SP/aitype/enemy_so_martyrdom.gsc b/MW3/PC/SP/aitype/enemy_so_martyrdom.gsc new file mode 100644 index 0000000..a6641e1 --- /dev/null +++ b/MW3/PC/SP/aitype/enemy_so_martyrdom.gsc @@ -0,0 +1,46 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: aitype\enemy_so_martyrdom.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 3 + * Decompile Time: 60 ms + * Timestamp: 10/27/2023 2:17:09 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self.var_3AA1 = ""; + self.var_3AA2 = ""; + self.team = "axis"; + self.type = "human"; + self.subclass = "regular"; + self.accuracy = 0.2; + self.health = 150; + self.secondaryweapon = ""; + self.sidearm = ""; + self.grenadeweapon = "fraggrenade"; + self.grenadeammo = 0; + if(isai(self)) + { + self setengagementmindist(256,0); + self setengagementmaxdist(768,1024); + } + + self.weapon = "none"; + lib_05B8::main(); +} + +//Function Number: 2 +spawner() +{ + self setspawnerteam("axis"); +} + +//Function Number: 3 +precache() +{ + lib_05B8::precache(); + precacheitem("fraggrenade"); +} \ No newline at end of file diff --git a/MW3/PC/SP/aitype/enemy_so_regular.gsc b/MW3/PC/SP/aitype/enemy_so_regular.gsc new file mode 100644 index 0000000..c50eb69 --- /dev/null +++ b/MW3/PC/SP/aitype/enemy_so_regular.gsc @@ -0,0 +1,47 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: aitype\enemy_so_regular.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 3 + * Decompile Time: 65 ms + * Timestamp: 10/27/2023 2:17:09 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self.var_3AA1 = ""; + self.var_3AA2 = "common_rambo_anims.csv"; + self.team = "axis"; + self.type = "human"; + self.subclass = "militia"; + self.accuracy = 0.2; + self.health = 150; + self.secondaryweapon = ""; + self.sidearm = ""; + self.grenadeweapon = "fraggrenade"; + self.grenadeammo = 0; + if(isai(self)) + { + self setengagementmindist(256,0); + self setengagementmaxdist(768,1024); + } + + self.weapon = "none"; + lib_05C1::main(); +} + +//Function Number: 2 +spawner() +{ + self setspawnerteam("axis"); +} + +//Function Number: 3 +precache() +{ + lib_05C1::precache(); + precacheitem("fraggrenade"); + maps\_rambo::main(); +} \ No newline at end of file diff --git a/MW3/PC/SP/aitype/enemy_so_veteran.gsc b/MW3/PC/SP/aitype/enemy_so_veteran.gsc new file mode 100644 index 0000000..6089010 --- /dev/null +++ b/MW3/PC/SP/aitype/enemy_so_veteran.gsc @@ -0,0 +1,46 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: aitype\enemy_so_veteran.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 3 + * Decompile Time: 70 ms + * Timestamp: 10/27/2023 2:17:10 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self.var_3AA1 = ""; + self.var_3AA2 = ""; + self.team = "axis"; + self.type = "human"; + self.subclass = "regular"; + self.accuracy = 0.2; + self.health = 150; + self.secondaryweapon = ""; + self.sidearm = ""; + self.grenadeweapon = "fraggrenade"; + self.grenadeammo = 0; + if(isai(self)) + { + self setengagementmindist(256,0); + self setengagementmaxdist(768,1024); + } + + self.weapon = "none"; + lib_05C4::main(); +} + +//Function Number: 2 +spawner() +{ + self setspawnerteam("axis"); +} + +//Function Number: 3 +precache() +{ + lib_05C4::precache(); + precacheitem("fraggrenade"); +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/animmode.gsc b/MW3/PC/SP/animscripts/animmode.gsc new file mode 100644 index 0000000..7ea0a41 --- /dev/null +++ b/MW3/PC/SP/animscripts/animmode.gsc @@ -0,0 +1,131 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\animmode.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 60 ms + * Timestamp: 10/27/2023 2:17:35 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self endon("death"); + self endon("stop_animmode"); + self notify("killanimscript"); + self._tag_entity endon(self._anime); + if(isdefined(self._custom_anim_thread)) + { + self thread [[ self._custom_anim_thread ]](); + self._custom_anim_thread = undefined; + } + + var_00 = isdefined(self._custom_anim_loop) && self._custom_anim_loop; + if(var_00) + { + self endon("stop_loop"); + self._custom_anim_loop = undefined; + } + else + { + thread func_0C63(self._anime); + } + + var_01 = self._anime; + self._anime = undefined; + var_02 = 0; + if(var_00) + { + var_02 = level.scr_anim[self._animname][var_01].size; + var_03 = level.scr_anim[self._animname][var_01][randomint(var_02)]; + } + else + { + var_03 = level.scr_anim[self._animname][var_02]; + } + + var_04 = getstartorigin(self._tag_entity.origin,self._tag_entity.angles,var_03); + var_05 = getstartangles(self._tag_entity.origin,self._tag_entity.angles,var_03); + var_06 = self getdroptofloorposition(var_04); + if(isdefined(var_06)) + { + var_04 = var_06; + } + else + { + } + + if(!isdefined(self.noteleport)) + { + self teleport(var_04,var_05); + } + + self.pushable = 0; + var_07 = 0.3; + var_08 = 0.2; + if(isdefined(self.var_C5F)) + { + var_07 = self.var_C5F; + var_08 = self.var_C5F; + } + + self animmode(self._animmode); + self clearanim(self.var_C56,var_07); + self orientmode("face angle",var_05[1]); + var_09 = "custom_animmode"; + self setflaggedanimrestart(var_09,var_03,1,var_08,1); + self._tag_entity thread maps\_anim::start_notetrack_wait(self,var_09,var_01,self._animname); + self._tag_entity thread maps\_anim::animscriptdonotetracksthread(self,var_09,var_01); + var_0A = self._tag_entity; + self._tag_entity = undefined; + self._animmode = undefined; + self endon("killanimscript"); + var_0B = "end"; + if(!var_00) + { + if(animhasnotetrack(var_03,"finish")) + { + var_0B = "finish"; + } + else if(animhasnotetrack(var_03,"stop anim")) + { + var_0B = "stop anim"; + } + } + + for(;;) + { + self waittillmatch(var_0B,var_09); + if(var_00) + { + var_03 = level.scr_anim[self._animname][var_01][randomint(var_02)]; + self setflaggedanimknoblimitedrestart(var_09,var_03,1,0.2,1); + if(isdefined(var_0A)) + { + var_0A thread maps\_anim::start_notetrack_wait(self,var_09,var_01,self._animname); + var_0A thread maps\_anim::animscriptdonotetracksthread(self,var_09,var_01); + } + + continue; + } + + break; + } + + if(var_0B != "end") + { + self orientmode("face motion"); + } + + self notify("finished_custom_animmode" + var_01); +} + +//Function Number: 2 +func_0C63(param_00) +{ + self endon("death"); + self endon("finished_custom_animmode" + param_00); + self waittill("killanimscript"); + self notify("finished_custom_animmode" + param_00); +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/animset.gsc b/MW3/PC/SP/animscripts/animset.gsc new file mode 100644 index 0000000..2f522ab --- /dev/null +++ b/MW3/PC/SP/animscripts/animset.gsc @@ -0,0 +1,669 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\animset.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 37 + * Decompile Time: 721 ms + * Timestamp: 10/27/2023 2:17:37 AM +*******************************************************************/ + +//Function Number: 1 +func_0C64() +{ + anim.animsets = spawnstruct(); + level.animsets.move = []; + func_0C77(); + func_0C73(); + func_0C6C(); + func_0C6F(); + func_0C71(); + func_0C75(); + func_0C79(); + func_0C7B(); + func_0C7D(); + func_0C7F(); + func_0C67(); + func_0C6A(); + func_0C6B(); + func_0C69(); + func_0C9D(); +} + +//Function Number: 2 +func_0C67() +{ + anim.var_C68 = []; + level.var_C68["sprint"] = %sprint_loop_distant; + level.var_C68["sprint_short"] = %sprint1_loop; + level.var_C68["prone"] = %prone_crawl; + level.var_C68["straight"] = %run_lowready_f; + level.var_C68["move_f"] = %walk_forward; + level.var_C68["move_l"] = %walk_left; + level.var_C68["move_r"] = %walk_right; + level.var_C68["move_b"] = %walk_backward; + level.var_C68["crouch"] = %crouch_fastwalk_f; + level.var_C68["crouch_l"] = %crouch_fastwalk_l; + level.var_C68["crouch_r"] = %crouch_fastwalk_r; + level.var_C68["crouch_b"] = %crouch_fastwalk_b; + level.var_C68["stairs_up"] = %traverse_stair_run_01; + level.var_C68["stairs_down"] = %traverse_stair_run_down; + level.animsets.move["run"] = level.var_C68; +} + +//Function Number: 3 +func_0C69() +{ + anim.var_C68 = level.animsets.move["run"]; + level.var_C68["straight"] = %heat_run_loop; + level.animsets.move["heat_run"] = level.var_C68; +} + +//Function Number: 4 +func_0C6A() +{ + anim.var_C68 = []; + level.var_C68["sprint"] = %sprint_loop_distant; + level.var_C68["sprint_short"] = %sprint1_loop; + level.var_C68["prone"] = %prone_crawl; + level.var_C68["straight"] = %walk_cqb_f; + level.var_C68["move_f"] = %walk_cqb_f; + level.var_C68["move_l"] = %walk_left; + level.var_C68["move_r"] = %walk_right; + level.var_C68["move_b"] = %walk_backward; + level.var_C68["crouch"] = %crouch_fastwalk_f; + level.var_C68["crouch_l"] = %crouch_fastwalk_l; + level.var_C68["crouch_r"] = %crouch_fastwalk_r; + level.var_C68["crouch_b"] = %crouch_fastwalk_b; + level.var_C68["stairs_up"] = %traverse_stair_run; + level.var_C68["stairs_down"] = %traverse_stair_run_down_01; + level.animsets.move["walk"] = level.var_C68; +} + +//Function Number: 5 +func_0C6B() +{ + anim.var_C68 = []; + level.var_C68["sprint"] = %sprint_loop_distant; + level.var_C68["sprint_short"] = %sprint1_loop; + level.var_C68["straight"] = %run_cqb_f_search_v1; + level.var_C68["move_f"] = %walk_cqb_f; + level.var_C68["move_l"] = %walk_left; + level.var_C68["move_r"] = %walk_right; + level.var_C68["move_b"] = %walk_backward; + level.var_C68["stairs_up"] = %traverse_stair_run; + level.var_C68["stairs_down"] = %traverse_stair_run_down_01; + level.animsets.move["cqb"] = level.var_C68; +} + +//Function Number: 6 +func_0C6C() +{ + anim.var_C68 = []; + level.var_C68["add_aim_up"] = %pistol_stand_aim_8_add; + level.var_C68["add_aim_down"] = %pistol_stand_aim_2_add; + level.var_C68["add_aim_left"] = %pistol_stand_aim_4_add; + level.var_C68["add_aim_right"] = %pistol_stand_aim_6_add; + level.var_C68["straight_level"] = %pistol_stand_aim_5; + level.var_C68["fire"] = %pistol_stand_fire_a; + level.var_C68["single"] = animscripts/utility::array(%pistol_stand_fire_a); + level.var_C68["reload"] = animscripts/utility::array(%pistol_stand_reload_a); + level.var_C68["reload_crouchhide"] = animscripts/utility::array(); + level.var_C68["exposed_idle"] = animscripts/utility::array(%exposed_idle_alert_v1,%exposed_idle_alert_v2,%exposed_idle_alert_v3); + func_0C8A(); + level.var_C68["add_turn_aim_up"] = %pistol_stand_aim_8_alt; + level.var_C68["add_turn_aim_down"] = %pistol_stand_aim_2_alt; + level.var_C68["add_turn_aim_left"] = %pistol_stand_aim_4_alt; + level.var_C68["add_turn_aim_right"] = %pistol_stand_aim_6_alt; + level.animsets.var_C6E = level.var_C68; +} + +//Function Number: 7 +func_0C6F() +{ + anim.var_C68 = []; + level.var_C68["add_aim_up"] = %rpg_stand_aim_8; + level.var_C68["add_aim_down"] = %rpg_stand_aim_2; + level.var_C68["add_aim_left"] = %rpg_stand_aim_4; + level.var_C68["add_aim_right"] = %rpg_stand_aim_6; + level.var_C68["straight_level"] = %rpg_stand_aim_5; + level.var_C68["fire"] = %rpg_stand_fire; + level.var_C68["single"] = animscripts/utility::array(%exposed_shoot_semi1); + level.var_C68["reload"] = animscripts/utility::array(%rpg_stand_reload); + level.var_C68["reload_crouchhide"] = animscripts/utility::array(); + level.var_C68["exposed_idle"] = animscripts/utility::array(%rpg_stand_idle); + func_0C8D(); + func_0C8B(); + func_0C92(); + level.animsets.var_C70 = level.var_C68; +} + +//Function Number: 8 +func_0C71() +{ + anim.var_C68 = []; + level.var_C68["add_aim_up"] = %shotgun_aim_8; + level.var_C68["add_aim_down"] = %shotgun_aim_2; + level.var_C68["add_aim_left"] = %shotgun_aim_4; + level.var_C68["add_aim_right"] = %shotgun_aim_6; + level.var_C68["straight_level"] = %shotgun_aim_5; + level.var_C68["fire"] = %exposed_shoot_auto_v3; + level.var_C68["single"] = animscripts/utility::array(%shotgun_stand_fire_1a,%shotgun_stand_fire_1b); + func_0C8E(); + level.var_C68["exposed_idle"] = animscripts/utility::array(%exposed_idle_alert_v1,%exposed_idle_alert_v2,%exposed_idle_alert_v3); + level.var_C68["reload"] = animscripts/utility::array(%shotgun_stand_reload_a,%shotgun_stand_reload_b,%shotgun_stand_reload_c,%shotgun_stand_reload_c,%shotgun_stand_reload_c); + level.var_C68["reload_crouchhide"] = animscripts/utility::array(%shotgun_stand_reload_a,%shotgun_stand_reload_b); + func_0C8D(); + func_0C8B(); + func_0C92(); + level.animsets.var_C72 = level.var_C68; +} + +//Function Number: 9 +func_0C73() +{ + anim.var_C68 = []; + level.var_C68["add_aim_up"] = %cqb_stand_aim8; + level.var_C68["add_aim_down"] = %cqb_stand_aim2; + level.var_C68["add_aim_left"] = %cqb_stand_aim4; + level.var_C68["add_aim_right"] = %cqb_stand_aim6; + level.var_C68["straight_level"] = %cqb_stand_aim5; + level.var_C68["fire"] = %exposed_shoot_auto_v3; + level.var_C68["single"] = animscripts/utility::array(%exposed_shoot_semi1); + func_0C8E(); + level.var_C68["exposed_idle"] = animscripts/utility::array(%exposed_idle_alert_v1,%exposed_idle_alert_v2,%exposed_idle_alert_v3); + level.var_C68["reload"] = animscripts/utility::array(%cqb_stand_reload_steady); + level.var_C68["reload_crouchhide"] = animscripts/utility::array(%cqb_stand_reload_knee); + func_0C8D(); + func_0C8B(); + func_0C92(); + level.animsets.var_C74 = level.var_C68; +} + +//Function Number: 10 +func_0C75() +{ + anim.var_C68 = []; + level.var_C68["add_aim_up"] = %heat_stand_aim_8; + level.var_C68["add_aim_down"] = %heat_stand_aim_2; + level.var_C68["add_aim_left"] = %heat_stand_aim_4; + level.var_C68["add_aim_right"] = %heat_stand_aim_6; + level.var_C68["straight_level"] = %heat_stand_aim_5; + level.var_C68["fire"] = %heat_stand_fire_auto; + level.var_C68["single"] = animscripts/utility::array(%heat_stand_fire_single); + func_0C8F(%heat_stand_fire_burst); + level.var_C68["exposed_idle"] = animscripts/utility::array(%heat_stand_idle,%heat_stand_scana,%heat_stand_scanb); + level.var_C68["reload"] = animscripts/utility::array(%heat_exposed_reload); + level.var_C68["reload_crouchhide"] = animscripts/utility::array(); + func_0C8D(); + level.var_C68["turn_left_45"] = %heat_stand_turn_l; + level.var_C68["turn_left_90"] = %heat_stand_turn_l; + level.var_C68["turn_left_135"] = %heat_stand_turn_180; + level.var_C68["turn_left_180"] = %heat_stand_turn_180; + level.var_C68["turn_right_45"] = %heat_stand_turn_r; + level.var_C68["turn_right_90"] = %heat_stand_turn_r; + level.var_C68["turn_right_135"] = %heat_stand_turn_180; + level.var_C68["turn_right_180"] = %heat_stand_turn_180; + func_0C92(); + level.animsets.var_C76 = level.var_C68; +} + +//Function Number: 11 +func_0C77() +{ + anim.var_C68 = []; + level.var_C68["add_aim_up"] = %exposed_aim_8; + level.var_C68["add_aim_down"] = %exposed_aim_2; + level.var_C68["add_aim_left"] = %exposed_aim_4; + level.var_C68["add_aim_right"] = %exposed_aim_6; + level.var_C68["straight_level"] = %exposed_aim_5; + level.var_C68["fire"] = %exposed_shoot_auto_v3; + level.var_C68["single"] = animscripts/utility::array(%exposed_shoot_semi1); + func_0C8E(); + level.var_C68["exposed_idle"] = animscripts/utility::array(%exposed_idle_alert_v1,%exposed_idle_alert_v2,%exposed_idle_alert_v3); + level.var_C68["exposed_grenade"] = animscripts/utility::array(%exposed_grenadethrowb,%exposed_grenadethrowc); + level.var_C68["reload"] = animscripts/utility::array(%exposed_reload); + level.var_C68["reload_crouchhide"] = animscripts/utility::array(%exposed_reloadb); + func_0C8D(); + func_0C8B(); + func_0C92(); + level.animsets.var_C78 = level.var_C68; +} + +//Function Number: 12 +func_0C79() +{ + anim.var_C68 = []; + level.var_C68["add_aim_up"] = %exposed_crouch_aim_8; + level.var_C68["add_aim_down"] = %exposed_crouch_aim_2; + level.var_C68["add_aim_left"] = %exposed_crouch_aim_4; + level.var_C68["add_aim_right"] = %exposed_crouch_aim_6; + level.var_C68["straight_level"] = %exposed_crouch_aim_5; + level.var_C68["fire"] = %exposed_crouch_shoot_auto_v2; + level.var_C68["single"] = animscripts/utility::array(%exposed_crouch_shoot_semi1); + func_0C90(); + level.var_C68["reload"] = animscripts/utility::array(%exposed_crouch_reload); + level.var_C68["exposed_idle"] = animscripts/utility::array(%exposed_crouch_idle_alert_v1,%exposed_crouch_idle_alert_v2,%exposed_crouch_idle_alert_v3); + func_0C8D(); + func_0C8C(); + func_0C93(); + level.animsets.var_C7A = level.var_C68; +} + +//Function Number: 13 +func_0C7B() +{ + anim.var_C68 = []; + level.var_C68["add_aim_up"] = %rpg_crouch_aim_8; + level.var_C68["add_aim_down"] = %rpg_crouch_aim_2; + level.var_C68["add_aim_left"] = %rpg_crouch_aim_4; + level.var_C68["add_aim_right"] = %rpg_crouch_aim_6; + level.var_C68["straight_level"] = %rpg_crouch_aim_5; + level.var_C68["fire"] = %rpg_crouch_fire; + level.var_C68["single"] = animscripts/utility::array(%rpg_crouch_fire); + level.var_C68["reload"] = animscripts/utility::array(%rpg_crouch_reload); + level.var_C68["exposed_idle"] = animscripts/utility::array(%rpg_crouch_idle); + func_0C8D(); + func_0C8C(); + func_0C93(); + level.animsets.var_C7C = level.var_C68; +} + +//Function Number: 14 +func_0C7D() +{ + anim.var_C68 = []; + level.var_C68["add_aim_up"] = %exposed_crouch_aim_8; + level.var_C68["add_aim_down"] = %exposed_crouch_aim_2; + level.var_C68["add_aim_left"] = %exposed_crouch_aim_4; + level.var_C68["add_aim_right"] = %exposed_crouch_aim_6; + level.var_C68["straight_level"] = %exposed_crouch_aim_5; + level.var_C68["fire"] = %exposed_crouch_shoot_auto_v2; + level.var_C68["single"] = animscripts/utility::array(%shotgun_crouch_fire); + func_0C90(); + level.var_C68["reload"] = animscripts/utility::array(%shotgun_crouch_reload); + level.var_C68["exposed_idle"] = animscripts/utility::array(%exposed_crouch_idle_alert_v1,%exposed_crouch_idle_alert_v2,%exposed_crouch_idle_alert_v3); + func_0C8D(); + func_0C8C(); + func_0C93(); + level.animsets.var_C7E = level.var_C68; +} + +//Function Number: 15 +func_0C7F() +{ + anim.var_C68 = []; + level.var_C68["add_aim_up"] = %prone_aim_8_add; + level.var_C68["add_aim_down"] = %prone_aim_2_add; + level.var_C68["add_aim_left"] = %prone_aim_4_add; + level.var_C68["add_aim_right"] = %prone_aim_6_add; + level.var_C68["straight_level"] = %prone_aim_5; + level.var_C68["fire"] = %prone_fire_1; + level.var_C68["single"] = animscripts/utility::array(%prone_fire_1); + level.var_C68["reload"] = animscripts/utility::array(%prone_reload); + level.var_C68["burst2"] = %prone_fire_burst; + level.var_C68["burst3"] = %prone_fire_burst; + level.var_C68["burst4"] = %prone_fire_burst; + level.var_C68["burst5"] = %prone_fire_burst; + level.var_C68["burst6"] = %prone_fire_burst; + level.var_C68["semi2"] = %prone_fire_burst; + level.var_C68["semi3"] = %prone_fire_burst; + level.var_C68["semi4"] = %prone_fire_burst; + level.var_C68["semi5"] = %prone_fire_burst; + level.var_C68["exposed_idle"] = animscripts/utility::array(%exposed_crouch_idle_alert_v1,%exposed_crouch_idle_alert_v2,%exposed_crouch_idle_alert_v3); + func_0C8D(); + level.animsets.var_C80 = level.var_C68; +} + +//Function Number: 16 +func_0C81(param_00) +{ + self.var_C82 = param_00; +} + +//Function Number: 17 +func_0C83(param_00,param_01,param_02,param_03) +{ + anim.var_C68 = level.animsets.var_C78; + if(isdefined(param_01)) + { + level.var_C68["straight_level"] = param_01; + } + + if(isdefined(param_00)) + { + level.var_C68["fire"] = param_00; + level.var_C68["single"] = animscripts/utility::array(param_00); + func_0C8F(param_00); + } + + if(isdefined(param_02)) + { + level.var_C68["exposed_idle"] = animscripts/utility::array(param_02); + } + + if(isdefined(param_03)) + { + level.var_C68["reload"] = animscripts/utility::array(param_03); + level.var_C68["reload_crouchhide"] = animscripts/utility::array(param_03); + } + + self.var_C82 = level.var_C68; +} + +//Function Number: 18 +func_0C84(param_00) +{ + self.var_C85 = param_00; +} + +//Function Number: 19 +func_0C86(param_00,param_01,param_02) +{ + anim.var_C68 = level.animsets.var_C7A; + if(isdefined(param_00)) + { + level.var_C68["fire"] = param_00; + level.var_C68["single"] = animscripts/utility::array(param_00); + func_0C91(param_00); + } + + if(isdefined(param_01)) + { + level.var_C68["exposed_idle"] = animscripts/utility::array(param_01); + } + + if(isdefined(param_02)) + { + level.var_C68["reload"] = animscripts/utility::array(param_02); + } + + self.var_C85 = level.var_C68; +} + +//Function Number: 20 +func_0C87() +{ + self.custommoveanimset = undefined; + self.var_C89 = undefined; + self.var_C82 = undefined; + self.var_C85 = undefined; +} + +//Function Number: 21 +func_0C8A(param_00) +{ + level.var_C68["turn_left_45"] = %pistol_stand_turn45l; + level.var_C68["turn_left_90"] = %pistol_stand_turn90l; + level.var_C68["turn_left_135"] = %pistol_stand_turn90l; + level.var_C68["turn_left_180"] = %pistol_stand_turn180l; + level.var_C68["turn_right_45"] = %pistol_stand_turn45r; + level.var_C68["turn_right_90"] = %pistol_stand_turn90r; + level.var_C68["turn_right_135"] = %pistol_stand_turn90r; + level.var_C68["turn_right_180"] = %pistol_stand_turn180l; +} + +//Function Number: 22 +func_0C8B() +{ + level.var_C68["turn_left_45"] = %exposed_tracking_turn45l; + level.var_C68["turn_left_90"] = %exposed_tracking_turn90l; + level.var_C68["turn_left_135"] = %exposed_tracking_turn135l; + level.var_C68["turn_left_180"] = %exposed_tracking_turn180l; + level.var_C68["turn_right_45"] = %exposed_tracking_turn45r; + level.var_C68["turn_right_90"] = %exposed_tracking_turn90r; + level.var_C68["turn_right_135"] = %exposed_tracking_turn135r; + level.var_C68["turn_right_180"] = %exposed_tracking_turn180r; +} + +//Function Number: 23 +func_0C8C() +{ + level.var_C68["turn_left_45"] = %exposed_crouch_turn_90_left; + level.var_C68["turn_left_90"] = %exposed_crouch_turn_90_left; + level.var_C68["turn_left_135"] = %exposed_crouch_turn_180_left; + level.var_C68["turn_left_180"] = %exposed_crouch_turn_180_left; + level.var_C68["turn_right_45"] = %exposed_crouch_turn_90_right; + level.var_C68["turn_right_90"] = %exposed_crouch_turn_90_right; + level.var_C68["turn_right_135"] = %exposed_crouch_turn_180_right; + level.var_C68["turn_right_180"] = %exposed_crouch_turn_180_right; +} + +//Function Number: 24 +func_0C8D() +{ + level.var_C68["crouch_2_stand"] = %exposed_crouch_2_stand; + level.var_C68["crouch_2_prone"] = %crouch_2_prone; + level.var_C68["stand_2_crouch"] = %exposed_stand_2_crouch; + level.var_C68["stand_2_prone"] = %stand_2_prone; + level.var_C68["prone_2_crouch"] = %prone_2_crouch; + level.var_C68["prone_2_stand"] = %prone_2_stand; +} + +//Function Number: 25 +func_0C8E() +{ + level.var_C68["burst2"] = %exposed_shoot_burst3; + level.var_C68["burst3"] = %exposed_shoot_burst3; + level.var_C68["burst4"] = %exposed_shoot_burst4; + level.var_C68["burst5"] = %exposed_shoot_burst5; + level.var_C68["burst6"] = %exposed_shoot_burst6; + level.var_C68["semi2"] = %exposed_shoot_semi2; + level.var_C68["semi3"] = %exposed_shoot_semi3; + level.var_C68["semi4"] = %exposed_shoot_semi4; + level.var_C68["semi5"] = %exposed_shoot_semi5; +} + +//Function Number: 26 +func_0C8F(param_00) +{ + level.var_C68["burst2"] = param_00; + level.var_C68["burst3"] = param_00; + level.var_C68["burst4"] = param_00; + level.var_C68["burst5"] = param_00; + level.var_C68["burst6"] = param_00; + level.var_C68["semi2"] = param_00; + level.var_C68["semi3"] = param_00; + level.var_C68["semi4"] = param_00; + level.var_C68["semi5"] = param_00; +} + +//Function Number: 27 +func_0C90() +{ + level.var_C68["burst2"] = %exposed_crouch_shoot_burst3; + level.var_C68["burst3"] = %exposed_crouch_shoot_burst3; + level.var_C68["burst4"] = %exposed_crouch_shoot_burst4; + level.var_C68["burst5"] = %exposed_crouch_shoot_burst5; + level.var_C68["burst6"] = %exposed_crouch_shoot_burst6; + level.var_C68["semi2"] = %exposed_crouch_shoot_semi2; + level.var_C68["semi3"] = %exposed_crouch_shoot_semi3; + level.var_C68["semi4"] = %exposed_crouch_shoot_semi4; + level.var_C68["semi5"] = %exposed_crouch_shoot_semi5; +} + +//Function Number: 28 +func_0C91(param_00) +{ + level.var_C68["burst2"] = param_00; + level.var_C68["burst3"] = param_00; + level.var_C68["burst4"] = param_00; + level.var_C68["burst5"] = param_00; + level.var_C68["burst6"] = param_00; + level.var_C68["semi2"] = param_00; + level.var_C68["semi3"] = param_00; + level.var_C68["semi4"] = param_00; + level.var_C68["semi5"] = param_00; +} + +//Function Number: 29 +func_0C92() +{ + level.var_C68["add_turn_aim_up"] = %exposed_turn_aim_8; + level.var_C68["add_turn_aim_down"] = %exposed_turn_aim_2; + level.var_C68["add_turn_aim_left"] = %exposed_turn_aim_4; + level.var_C68["add_turn_aim_right"] = %exposed_turn_aim_6; +} + +//Function Number: 30 +func_0C93() +{ + level.var_C68["add_turn_aim_up"] = %exposed_crouch_turn_aim_8; + level.var_C68["add_turn_aim_down"] = %exposed_crouch_turn_aim_2; + level.var_C68["add_turn_aim_left"] = %exposed_crouch_turn_aim_4; + level.var_C68["add_turn_aim_right"] = %exposed_crouch_turn_aim_6; +} + +//Function Number: 31 +func_0C94() +{ + if(animscripts/utility::func_C95()) + { + self.a.array = level.animsets.var_C6E; + return; + } + + if(isdefined(self.var_C82)) + { + self.a.array = self.var_C82; + return; + } + + if(isdefined(self.heat)) + { + self.a.array = level.animsets.var_C76; + return; + } + + if(animscripts/utility::func_BB6()) + { + self.a.array = level.animsets.var_C70; + return; + } + + if(isdefined(self.weapon) && animscripts/utility::func_C97()) + { + self.a.array = level.animsets.var_C72; + return; + } + + if(animscripts/utility::func_C98()) + { + self.a.array = level.animsets.var_C74; + return; + } + + self.a.array = level.animsets.var_C78; +} + +//Function Number: 32 +func_0C99() +{ + if(animscripts/utility::func_C95()) + { + animscripts/shared::func_C9B(self.primaryweapon,"right"); + } + + if(isdefined(self.var_C85)) + { + self.a.array = self.var_C85; + return; + } + + if(animscripts/utility::func_BB6()) + { + self.a.array = level.animsets.var_C7C; + return; + } + + if(isdefined(self.weapon) && animscripts/utility::func_C97()) + { + self.a.array = level.animsets.var_C7E; + return; + } + + self.a.array = level.animsets.var_C7A; +} + +//Function Number: 33 +func_0C9C() +{ + if(animscripts/utility::func_C95()) + { + animscripts/shared::func_C9B(self.primaryweapon,"right"); + } + + self.a.array = level.animsets.var_C80; +} + +//Function Number: 34 +func_0C9D() +{ + level.var_C9E["L90"] = %run_turn_l90; + level.var_C9E["R90"] = %run_turn_r90; + level.var_C9E["L45"] = %run_turn_l45; + level.var_C9E["R45"] = %run_turn_r45; + level.var_C9E["L135"] = %run_turn_l135; + level.var_C9E["R135"] = %run_turn_r135; + level.var_C9E["180"] = %run_turn_180; + level.var_C9F["L90"] = %cqb_walk_turn_4; + level.var_C9F["R90"] = %cqb_walk_turn_6; + level.var_C9F["L45"] = %cqb_walk_turn_7; + level.var_C9F["R45"] = %cqb_walk_turn_9; + level.var_C9F["L135"] = %cqb_walk_turn_1; + level.var_C9F["R135"] = %cqb_walk_turn_3; + level.var_C9F["180"] = %cqb_walk_turn_2; +} + +//Function Number: 35 +func_0CA0() +{ + self.var_CA1 = 130; + self.var_CA2 = 0.4615385; + self.var_CA3 = 0.3; + self.var_CA4["F"] = %run_n_gun_f; + self.var_CA4["L"] = %run_n_gun_l; + self.var_CA4["R"] = %run_n_gun_r; + self.var_CA4["LB"] = %run_n_gun_l_120; + self.var_CA4["RB"] = %run_n_gun_r_120; +} + +//Function Number: 36 +func_0CA5() +{ + self.a.var_CA6["move_l"] = %combatwalk_l; + self.a.var_CA6["move_r"] = %combatwalk_r; + self.a.var_CA6["move_b"] = %combatwalk_b; +} + +//Function Number: 37 +func_0CA7() +{ + if(self.weapon != self.primaryweapon) + { + return animscripts/utility::func_CA8("reload"); + } + + if(isdefined(self.node)) + { + if(self nearclaimnodeandangle()) + { + var_00 = undefined; + if(self.node.type == "Cover Left") + { + var_00 = %heat_cover_reload_r; + } + else if(self.node.type == "Cover Right") + { + var_00 = %heat_cover_reload_l; + } + + if(isdefined(var_00)) + { + return var_00; + } + } + } + + return %heat_exposed_reload; +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/atv.gsc b/MW3/PC/SP/animscripts/atv.gsc new file mode 100644 index 0000000..100a7ed --- /dev/null +++ b/MW3/PC/SP/animscripts/atv.gsc @@ -0,0 +1,655 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\atv.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 27 + * Decompile Time: 478 ms + * Timestamp: 10/27/2023 2:17:39 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self.var_EE8 = "none"; + self.var_EE9 = undefined; + func_24CB(); + func_0EF0(); +} + +//Function Number: 2 +func_24CB() +{ + self.grenadeawareness = 0; + self.a.pose = "crouch"; + maps\_utility::disable_surprise(); + self.allowpain = 0; + self.getoffvehiclefunc = ::func_24CC; + self.var_D4B = ::func_24E1; + self.disablebulletwhizbyreaction = 1; +} + +//Function Number: 3 +func_24CC() +{ + self.allowpain = 1; + self.getoffvehiclefunc = undefined; + self.var_D4B = undefined; + self.a.var_CE6 = undefined; + self.disablebulletwhizbyreaction = undefined; +} + +//Function Number: 4 +func_0EF0() +{ + var_00 = self.ridingvehicle.var_EF2 || self.ridingvehicle.riders.size == 1; + func_24E4(var_00); + if(var_00) + { + animscripts/shared::func_C9B(self.primaryweapon,"left"); + self.var_716 = 90; + self.var_717 = -90; + animscripts/track::func_CC4(1,0.2); + thread func_24DC(); + thread func_24CE(); + } + else + { + animscripts/shared::func_C9B(self.primaryweapon,"none"); + thread func_24CD(); + } + + func_24D0("driver"); +} + +//Function Number: 5 +func_24CD() +{ + self endon("death"); + self endon("killanimscript"); + var_00 = "left2right"; + var_01 = []; + self setanimknoball(%atv_turn,%body,1,0); + self setanim(animscripts/utility::func_D4D("drive"),1,0); + self setanimknob(animscripts/utility::func_D4D(var_01),1,0); + self setanimtime(animscripts/utility::func_D4D(var_01),0.5); + for(;;) + { + if(self.ridingvehicle.steering_enable) + { + var_02 = 0.5 * 1 + maps\_vehicle::update_steering(self.ridingvehicle); + var_03 = self getanimtime(animscripts/utility::func_D4D(var_01)); + if(var_01 == "right2left") + { + var_03 = 1 - var_03; + } + + var_04 = 20 * abs(var_03 - var_02); + if(var_03 < var_02) + { + var_01 = "left2right"; + var_04 = var_04 * var_7B["left2right"]; + } + else + { + var_01 = "right2left"; + var_04 = var_04 * var_7B["right2left"]; + var_03 = 1 - var_03; + } + } + else + { + var_01 = "left2right"; + var_04 = 0; + var_03 = 0.5; + } + + self setanimknoblimited(animscripts/utility::func_D4D(var_01),1,0.1,var_04); + self setanimtime(animscripts/utility::func_D4D(var_01),var_03); + wait 0.05; + } +} + +//Function Number: 6 +func_24CE() +{ + self endon("death"); + self endon("killanimscript"); + var_00 = 0.05; + var_01 = 0; + self setanimknoball(%atv_aiming,%body,1,0); + self setanimknob(animscripts/utility::func_D4D("idle"),1,0); + for(;;) + { + if(self.var_EE8 != "none") + { + self waittill("atv_event_finished"); + continue; + } + + var_02 = maps\_vehicle::update_steering(self.ridingvehicle); + var_03 = 1 - abs(var_02); + var_04 = max(0,0 - var_02); + var_05 = max(0,var_02); + self setanimlimited(animscripts/utility::func_D4D("straight_level_center"),var_03,var_00); + self setanimlimited(animscripts/utility::func_D4D("straight_level_left"),var_04,var_00); + self setanimlimited(animscripts/utility::func_D4D("straight_level_right"),var_05,var_00); + if(self.bulletsinclip <= 0) + { + animscripts/weaponlist::func_CD0(); + var_01 = gettime() + 3000; + } + + if(var_01 <= gettime()) + { + func_24D1(); + } + + self setanimknoblimited(animscripts/utility::func_D4D("add_aim_left_center"),var_03,var_00); + self setanimlimited(animscripts/utility::func_D4D("add_aim_left_left"),var_04,var_00); + self setanimlimited(animscripts/utility::func_D4D("add_aim_left_right"),var_05,var_00); + self setanimknoblimited(animscripts/utility::func_D4D("add_aim_right_center"),var_03,var_00); + self setanimlimited(animscripts/utility::func_D4D("add_aim_right_left"),var_04,var_00); + self setanimlimited(animscripts/utility::func_D4D("add_aim_right_right"),var_05,var_00); + thread func_24D2(); + wait 0.05; + } +} + +//Function Number: 7 +func_24CF(param_00) +{ + self endon("death"); + self.ridingvehicle.steering_enable = 0; + self setflaggedanimknoblimitedrestart("atv_event",param_00,1,0.17); + animscripts/shared::donotetracks("atv_event",::func_24DB); + self setanimknoblimited(animscripts/utility::func_D4D("event_restore"),1,0.1); + self.ridingvehicle.steering_enable = 1; + self.var_EE8 = "none"; + self notify("atv_event_finished"); +} + +//Function Number: 8 +func_24D0(param_00) +{ + self endon("death"); + self endon("killanimscript"); + var_01 = self.ridingvehicle; + for(;;) + { + if(var_01.event["jump"][param_00]) + { + var_01.event["jump"][param_00] = 0; + self notify("atv_event_occurred"); + self.var_EE8 = "jump"; + var_01.steering_enable = 0; + self setflaggedanimknoblimitedrestart("jump",animscripts/utility::func_D4D("event_jump"),1,0.17); + } + + if(var_01.event["bump"][param_00]) + { + var_01.event["bump"][param_00] = 0; + self notify("atv_event_occurred"); + if(self.var_EE8 != "bump_big") + { + thread func_24CF(animscripts/utility::func_D4D("event_bump")); + } + } + + if(var_01.event["bump_big"][param_00]) + { + var_01.event["bump_big"][param_00] = 0; + self notify("atv_event_occurred"); + self.var_EE8 = "bump_big"; + thread func_24CF(animscripts/utility::func_D4D("event_bump_big")); + } + + if(var_01.event["sway_left"][param_00]) + { + var_01.event["sway_left"][param_00] = 0; + self notify("atv_event_occurred"); + if(self.var_EE8 != "bump_big") + { + thread func_24CF(animscripts/utility::func_D4D("event_sway")["left"]); + } + } + + if(var_01.event["sway_right"][param_00]) + { + var_01.event["sway_right"][param_00] = 0; + self notify("atv_event_occurred"); + if(self.var_EE8 != "bump_big") + { + thread func_24CF(animscripts/utility::func_D4D("event_sway")["right"]); + } + } + + wait 0.05; + } +} + +//Function Number: 9 +func_24D1() +{ + self notify("want_shoot_while_driving"); + self setanim(%atv_add_fire,1,0.2); + if(isdefined(self.var_EE9)) + { + return; + } + + self.var_EE9 = 1; + thread func_24D3(); + thread func_24D6(); +} + +//Function Number: 10 +func_24D2() +{ + self endon("killanimscript"); + self endon("want_shoot_while_driving"); + wait 0.05; + self notify("end_shoot_while_driving"); + self.var_EE9 = undefined; + self clearanim(%atv_add_fire,0.2); +} + +//Function Number: 11 +func_24D3() +{ + self endon("killanimscript"); + self endon("end_shoot_while_driving"); + self.a.var_CE6 = ::func_24D5; + func_24D4(); + self.var_EE9 = undefined; +} + +//Function Number: 12 +func_24D4() +{ + self endon("atv_event_occurred"); + animscripts/shoot_behavior::func_CD7("normal"); +} + +//Function Number: 13 +func_24D5() +{ + if(!isdefined(self.enemy)) + { + self.var_CAB = undefined; + self.var_CB1 = undefined; + self.var_CDA = "none"; + return; + } + + self.var_CAB = self.enemy; + self.var_CB1 = self.enemy getshootatpos(); + var_00 = distancesquared(self.origin,self.enemy.origin); + if(var_00 < 1000000) + { + self.var_CDA = "full"; + } + else if(var_00 < 4000000) + { + self.var_CDA = "burst"; + } + else + { + self.var_CDA = "single"; + } + + if(isdefined(self.enemy.vehicle)) + { + var_01 = 0.5; + var_02 = self.var_CAB.vehicle; + var_03 = self.ridingvehicle; + var_04 = var_03.origin - var_02.origin; + var_05 = anglestoforward(var_02.angles); + var_06 = anglestoright(var_02.angles); + var_07 = vectordot(var_04,var_05); + if(var_07 < 0) + { + var_08 = var_02 vehicle_getspeed() * var_01; + var_08 = var_08 * 17.6; + if(var_08 > 50) + { + var_09 = vectordot(var_04,var_06); + var_09 = var_09 / 3; + if(var_09 > 128) + { + var_09 = 128; + } + else if(var_09 < -128) + { + var_09 = -128; + } + + if(var_09 > 0) + { + var_09 = 128 - var_09; + } + else + { + var_09 = -128 - var_09; + } + + self.var_CAB = undefined; + self.var_CB1 = var_02.origin + var_08 * var_05 + var_09 * var_06; + return; + } + } + } +} + +//Function Number: 14 +func_24D6() +{ + self endon("killanimscript"); + self endon("end_shoot_while_driving"); + self notify("doing_shootWhileDriving"); + self endon("doing_shootWhileDriving"); + for(;;) + { + if(!self.bulletsinclip) + { + wait 0.5; + continue; + } + + animscripts/combat_utility::func_F06(); + } +} + +//Function Number: 15 +func_24D7() +{ + if(!self.ridingvehicle.steering_enable) + { + return 0; + } + + if(!animscripts/combat_utility::func_F08(0)) + { + return 0; + } + + if(!animscripts/utility::func_EE3()) + { + return 0; + } + + func_24D8(); + self notify("abort_reload"); + return 1; +} + +//Function Number: 16 +func_24D8() +{ + self endon("atv_event_occurred"); + self.var_F0A = 1; + self waittill("start_blending_reload"); + self setanim(%atv_aiming,0,0.25); + self setflaggedanimrestart("gun_down",animscripts/utility::func_D4D("gun_down"),1,0.25); + animscripts/shared::donotetracks("gun_down"); + self clearanim(animscripts/utility::func_D4D("gun_down"),0); + self setflaggedanimknoballrestart("reload_anim",animscripts/utility::func_D4D("reload"),%body,1,0.25); + animscripts/shared::donotetracks("reload_anim"); + self clearanim(%atv_reload,0.2); + self setflaggedanimrestart("gun_up",animscripts/utility::func_D4D("gun_up"),1,0.25); + self.var_F0B = 1; + animscripts/shared::donotetracks("gun_up",::func_24D9); + self.var_F0A = undefined; + self clearanim(%atv_reload,0.1); + self setanim(%atv_aiming,1,0.1); + if(isdefined(self.var_F0B)) + { + self.var_F0B = undefined; + animscripts/shared::donotetracks("gun_up",::func_24DA); + self clearanim(animscripts/utility::func_D4D("gun_up"),0); + } +} + +//Function Number: 17 +func_24D9(param_00) +{ + if(param_00 == "start_aim") + { + return 1; + } +} + +//Function Number: 18 +func_24DA(param_00) +{ + if(param_00 == "end") + { + return 1; + } +} + +//Function Number: 19 +func_24DB(param_00) +{ + if(param_00 == "start_lean") + { + return 1; + } +} + +//Function Number: 20 +func_24DC() +{ + self endon("killanimscript"); + self endon("stop tracking"); + var_00 = 0.05; + var_01 = 8; + var_02 = 0; + var_03 = 0; + var_04 = 1; + for(;;) + { + animscripts/track::func_CC9(); + var_05 = (self.origin[0],self.origin[1],self geteye()[2]); + var_06 = self.var_CB1; + if(isdefined(self.var_CAB)) + { + var_06 = self.var_CAB getshootatpos(); + } + + if(!isdefined(var_06)) + { + var_03 = 0; + var_07 = self getanglestolikelyenemypath(); + if(isdefined(var_07)) + { + var_03 = angleclamp180(self.angles[1] - var_07[1]); + } + } + else + { + var_08 = var_06 - var_05; + var_09 = vectortoangles(var_08); + var_03 = self.angles[1] - var_09[1]; + var_03 = angleclamp180(var_03); + } + + if(var_03 > self.var_716 || var_03 < self.var_717) + { + var_03 = 0; + } + + if(var_04) + { + var_04 = 0; + } + else + { + var_0A = var_03 - var_02; + if(abs(var_0A) > var_01) + { + var_03 = var_02 + var_01 * common_scripts\utility::sign(var_0A); + } + } + + var_02 = var_03; + var_0B = min(max(0 - var_03,0),90) / 90 * self.a.var_CC3; + var_0C = min(max(var_03,0),90) / 90 * self.a.var_CC3; + self setanimlimited(%atv_aim_4,var_0B,var_00); + self setanimlimited(%atv_aim_6,var_0C,var_00); + wait 0.05; + } +} + +//Function Number: 21 +func_24DD(param_00,param_01,param_02) +{ + var_03 = undefined; + var_04 = undefined; + var_05 = 0; + for(var_06 = 0;var_06 < param_00.size;var_06++) + { + var_07 = animscripts/utility::func_D61(param_02 - param_01[var_06]); + if(!isdefined(var_03) || var_07 < var_05) + { + var_04 = var_03; + var_03 = param_00[var_06]; + var_05 = var_07; + continue; + } + + if(!isdefined(var_04)) + { + var_04 = param_00[var_06]; + } + } + + var_08 = var_03; + if(isdefined(level.var_24DE) && var_08 == level.var_24DE && gettime() - level.var_24DF < 500) + { + var_08 = var_04; + } + + anim.var_24DE = var_08; + anim.var_24DF = gettime(); + return var_08; +} + +//Function Number: 22 +func_24E0() +{ + var_00 = self.ridingvehicle; + var_01 = var_00.var_F15; + var_01 = (var_01[0],var_01[1],randomfloatrange(200,400)) * 0.75; + if(lengthsquared(var_01) > 1000000) + { + var_01 = vectornormalize(var_01) * 1000; + } + + var_02 = spawn("script_origin",self.origin); + var_02 moveslide((0,0,40),15,var_01); + self linkto(var_02); + var_02 thread func_0F18(); +} + +//Function Number: 23 +func_24E1() +{ + var_00 = []; + var_01 = []; + var_02 = func_24DD(var_7B,var_01,self.var_723); + animscripts/death::func_D56(var_02); + return 1; +} + +//Function Number: 24 +func_24E2() +{ + var_00 = self.ridingvehicle; + if(!isdefined(var_00)) + { + return func_24E1(); + } + + var_01 = var_00.var_F15; + func_24E0(); + var_02 = vectortoangles(var_01); + var_03 = angleclamp180(var_02[1] - self.angles[1]); + var_04 = []; + var_05 = []; + var_06 = func_24DD(var_7B,var_05,var_04); + animscripts/death::func_D56(var_06); + return 1; +} + +//Function Number: 25 +func_0F18() +{ + var_00 = self.origin; + for(var_01 = 0;var_01 < 60;var_01++) + { + wait 0.05; + var_00 = self.origin; + } + + wait 3; + if(isdefined(self)) + { + self delete(); + } +} + +//Function Number: 26 +func_24E3(param_00) +{ + self.a.array["idle"] = level.scr_anim["atv"][param_00]["idle"]; + self.a.array["drive"] = level.scr_anim["atv"][param_00]["drive"]; + self.a.array["fire"] = level.scr_anim["atv"][param_00]["fire"]; + self.a.array["single"] = animscripts/utility::array(level.scr_anim["atv"][param_00]["single"]); + self.a.array["burst2"] = level.scr_anim["atv"][param_00]["fire"]; + self.a.array["burst3"] = level.scr_anim["atv"][param_00]["fire"]; + self.a.array["burst4"] = level.scr_anim["atv"][param_00]["fire"]; + self.a.array["burst5"] = level.scr_anim["atv"][param_00]["fire"]; + self.a.array["burst6"] = level.scr_anim["atv"][param_00]["fire"]; + self.a.array["semi2"] = level.scr_anim["atv"][param_00]["fire"]; + self.a.array["semi3"] = level.scr_anim["atv"][param_00]["fire"]; + self.a.array["semi4"] = level.scr_anim["atv"][param_00]["fire"]; + self.a.array["semi5"] = level.scr_anim["atv"][param_00]["fire"]; +} + +//Function Number: 27 +func_24E4(param_00) +{ + self.a.array = []; + func_24E3("driver"); + self.a.array["left2right"] = level.scr_anim["atv"]["driver"]["left2right"]; + self.a.array["right2left"] = level.scr_anim["atv"]["driver"]["right2left"]; + self.a.array["straight_level_left"] = level.scr_anim["atv"]["driver"]["straight_level"]["left"]; + self.a.array["straight_level_center"] = level.scr_anim["atv"]["driver"]["straight_level"]["center"]; + self.a.array["straight_level_right"] = level.scr_anim["atv"]["driver"]["straight_level"]["right"]; + self.a.array["add_aim_left_left"] = level.scr_anim["atv"]["driver"]["add_aim_left"]["left"]; + self.a.array["add_aim_left_center"] = level.scr_anim["atv"]["driver"]["add_aim_left"]["center"]; + self.a.array["add_aim_left_right"] = level.scr_anim["atv"]["driver"]["add_aim_left"]["right"]; + self.a.array["add_aim_right_left"] = level.scr_anim["atv"]["driver"]["add_aim_right"]["left"]; + self.a.array["add_aim_right_center"] = level.scr_anim["atv"]["driver"]["add_aim_right"]["center"]; + self.a.array["add_aim_right_right"] = level.scr_anim["atv"]["driver"]["add_aim_right"]["right"]; + if(param_00) + { + self.a.array["event_jump"] = level.scr_anim["atv"]["driver"]["shoot_jump"]; + self.a.array["event_bump"] = level.scr_anim["atv"]["driver"]["shoot_bump"]; + self.a.array["event_bump_big"] = level.scr_anim["atv"]["driver"]["shoot_bump_big"]; + self.a.array["event_sway"] = []; + self.a.array["event_sway"]["left"] = level.scr_anim["atv"]["driver"]["shoot_sway_left"]; + self.a.array["event_sway"]["right"] = level.scr_anim["atv"]["driver"]["shoot_sway_right"]; + self.a.array["event_restore"] = %atv_aiming; + return; + } + + self.a.array["event_jump"] = level.scr_anim["atv"]["driver"]["drive_jump"]; + self.a.array["event_bump"] = level.scr_anim["atv"]["driver"]["drive_bump"]; + self.a.array["event_bump_big"] = level.scr_anim["atv"]["driver"]["drive_bump_big"]; + self.a.array["event_sway"] = []; + self.a.array["event_sway"]["left"] = level.scr_anim["atv"]["driver"]["drive_sway_left"]; + self.a.array["event_sway"]["right"] = level.scr_anim["atv"]["driver"]["drive_sway_right"]; + self.a.array["event_restore"] = %atv_turn; +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/battlechatter.gsc b/MW3/PC/SP/animscripts/battlechatter.gsc new file mode 100644 index 0000000..017c173 --- /dev/null +++ b/MW3/PC/SP/animscripts/battlechatter.gsc @@ -0,0 +1,3935 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\battlechatter.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 157 + * Decompile Time: 2937 ms + * Timestamp: 10/27/2023 2:17:48 AM +*******************************************************************/ + +//Function Number: 1 +func_0B6B() +{ + if(isdefined(level.chatinitialized) && level.chatinitialized) + { + return; + } + + setdvarifuninitialized("bcs_enable","on"); + if(getdvar("bcs_enable","on") == "off") + { + anim.chatinitialized = 0; + level.player.chatinitialized = 0; + return; + } + + anim.chatinitialized = 1; + level.player.chatinitialized = 0; + setdvarifuninitialized("bcs_filterThreat","off"); + setdvarifuninitialized("bcs_filterInform","off"); + setdvarifuninitialized("bcs_filterOrder","off"); + setdvarifuninitialized("bcs_filterReaction","off"); + setdvarifuninitialized("bcs_filterResponse","off"); + setdvarifuninitialized("bcs_forceEnglish","0"); + setdvarifuninitialized("bcs_allowsamevoiceresponse","off"); + setdvarifuninitialized("debug_bcprint","off"); + setdvarifuninitialized("debug_bcprintdump","off"); + setdvarifuninitialized("debug_bcprintdumptype","csv"); + setdvarifuninitialized("debug_bcshowqueue","off"); + anim.bcprintfailprefix = "^3***** BCS FAILURE: "; + anim.var_B6C = "^3***** BCS WARNING: "; + func_0B8B(); + func_0B8C(); + level.var_AD0["american"] = "1"; + level.var_AD0["seal"] = "1"; + level.var_AD0["taskforce"] = "1"; + level.var_AD0["secretservice"] = "1"; + level.var_AD0["delta"] = "1"; + thread func_0B9F(); + anim.var_ABB = []; + level.var_ABB["russian"] = []; + level.var_ABB["russian"][0] = spawnstruct(); + level.var_ABB["russian"][0].count = 0; + level.var_ABB["russian"][0].var_AB6 = "0"; + level.var_ABB["russian"][1] = spawnstruct(); + level.var_ABB["russian"][1].count = 0; + level.var_ABB["russian"][1].var_AB6 = "1"; + level.var_ABB["russian"][2] = spawnstruct(); + level.var_ABB["russian"][2].count = 0; + level.var_ABB["russian"][2].var_AB6 = "2"; + level.var_ABB["russian"][3] = spawnstruct(); + level.var_ABB["russian"][3].count = 0; + level.var_ABB["russian"][3].var_AB6 = "3"; + level.var_ABB["russian"][4] = spawnstruct(); + level.var_ABB["russian"][4].count = 0; + level.var_ABB["russian"][4].var_AB6 = "4"; + level.var_ABB["portuguese"] = []; + level.var_ABB["portuguese"][0] = spawnstruct(); + level.var_ABB["portuguese"][0].count = 0; + level.var_ABB["portuguese"][0].var_AB6 = "0"; + level.var_ABB["portuguese"][1] = spawnstruct(); + level.var_ABB["portuguese"][1].count = 0; + level.var_ABB["portuguese"][1].var_AB6 = "1"; + level.var_ABB["portuguese"][2] = spawnstruct(); + level.var_ABB["portuguese"][2].count = 0; + level.var_ABB["portuguese"][2].var_AB6 = "2"; + level.var_ABB["shadowcompany"] = []; + level.var_ABB["shadowcompany"][0] = spawnstruct(); + level.var_ABB["shadowcompany"][0].count = 0; + level.var_ABB["shadowcompany"][0].var_AB6 = "0"; + level.var_ABB["shadowcompany"][1] = spawnstruct(); + level.var_ABB["shadowcompany"][1].count = 0; + level.var_ABB["shadowcompany"][1].var_AB6 = "1"; + level.var_ABB["shadowcompany"][2] = spawnstruct(); + level.var_ABB["shadowcompany"][2].count = 0; + level.var_ABB["shadowcompany"][2].var_AB6 = "2"; + level.var_ABB["shadowcompany"][3] = spawnstruct(); + level.var_ABB["shadowcompany"][3].count = 0; + level.var_ABB["shadowcompany"][3].var_AB6 = "3"; + level.var_ABB["british"] = []; + level.var_ABB["british"][0] = spawnstruct(); + level.var_ABB["british"][0].count = 0; + level.var_ABB["british"][0].var_AB6 = "0"; + level.var_ABB["british"][1] = spawnstruct(); + level.var_ABB["british"][1].count = 0; + level.var_ABB["british"][1].var_AB6 = "1"; + level.var_ABB["american"] = []; + level.var_ABB["american"][0] = spawnstruct(); + level.var_ABB["american"][0].count = 0; + level.var_ABB["american"][0].var_AB6 = "0"; + level.var_ABB["american"][1] = spawnstruct(); + level.var_ABB["american"][1].count = 0; + level.var_ABB["american"][1].var_AB6 = "1"; + level.var_ABB["american"][2] = spawnstruct(); + level.var_ABB["american"][2].count = 0; + level.var_ABB["american"][2].var_AB6 = "2"; + level.var_ABB["seal"] = []; + level.var_ABB["seal"][0] = spawnstruct(); + level.var_ABB["seal"][0].count = 0; + level.var_ABB["seal"][0].var_AB6 = "0"; + level.var_ABB["seal"][1] = spawnstruct(); + level.var_ABB["seal"][1].count = 0; + level.var_ABB["seal"][1].var_AB6 = "1"; + level.var_ABB["seal"][2] = spawnstruct(); + level.var_ABB["seal"][2].count = 0; + level.var_ABB["seal"][2].var_AB6 = "2"; + level.var_ABB["seal"][3] = spawnstruct(); + level.var_ABB["seal"][3].count = 0; + level.var_ABB["seal"][3].var_AB6 = "3"; + level.var_ABB["taskforce"] = []; + level.var_ABB["taskforce"][0] = spawnstruct(); + level.var_ABB["taskforce"][0].count = 0; + level.var_ABB["taskforce"][0].var_AB6 = "0"; + level.var_ABB["secretservice"] = []; + level.var_ABB["secretservice"][0] = spawnstruct(); + level.var_ABB["secretservice"][0].count = 0; + level.var_ABB["secretservice"][0].var_AB6 = "0"; + level.var_ABB["secretservice"][1] = spawnstruct(); + level.var_ABB["secretservice"][1].count = 0; + level.var_ABB["secretservice"][1].var_AB6 = "1"; + level.var_ABB["secretservice"][2] = spawnstruct(); + level.var_ABB["secretservice"][2].count = 0; + level.var_ABB["secretservice"][2].var_AB6 = "2"; + level.var_ABB["secretservice"][3] = spawnstruct(); + level.var_ABB["secretservice"][3].count = 0; + level.var_ABB["secretservice"][3].var_AB6 = "3"; + level.var_ABB["arab"] = []; + level.var_ABB["arab"][0] = spawnstruct(); + level.var_ABB["arab"][0].count = 0; + level.var_ABB["arab"][0].var_AB6 = "0"; + level.var_ABB["arab"][1] = spawnstruct(); + level.var_ABB["arab"][1].count = 0; + level.var_ABB["arab"][1].var_AB6 = "1"; + level.var_ABB["arab"][2] = spawnstruct(); + level.var_ABB["arab"][2].count = 0; + level.var_ABB["arab"][2].var_AB6 = "2"; + level.var_ABB["delta"] = []; + level.var_ABB["delta"][0] = spawnstruct(); + level.var_ABB["delta"][0].count = 0; + level.var_ABB["delta"][0].var_AB6 = "0"; + level.var_ABB["delta"][1] = spawnstruct(); + level.var_ABB["delta"][1].count = 0; + level.var_ABB["delta"][1].var_AB6 = "1"; + level.var_ABB["delta"][2] = spawnstruct(); + level.var_ABB["delta"][2].count = 0; + level.var_ABB["delta"][2].var_AB6 = "2"; + level.var_ABB["french"] = []; + level.var_ABB["french"][0] = spawnstruct(); + level.var_ABB["french"][0].count = 0; + level.var_ABB["french"][0].var_AB6 = "0"; + level.var_ABB["african"] = []; + level.var_ABB["african"][0] = spawnstruct(); + level.var_ABB["african"][0].count = 0; + level.var_ABB["african"][0].var_AB6 = "0"; + level.var_ABB["african"][1] = spawnstruct(); + level.var_ABB["african"][1].count = 0; + level.var_ABB["african"][1].var_AB6 = "1"; + level.var_ABB["african"][2] = spawnstruct(); + level.var_ABB["african"][2].count = 0; + level.var_ABB["african"][2].var_AB6 = "2"; + level.var_ABB["czech"] = []; + level.var_ABB["czech"][0] = spawnstruct(); + level.var_ABB["czech"][0].count = 0; + level.var_ABB["czech"][0].var_AB6 = "0"; + level.var_ABB["czech"][1] = spawnstruct(); + level.var_ABB["czech"][1].count = 0; + level.var_ABB["czech"][1].var_AB6 = "1"; + level.var_ABB["czech"][2] = spawnstruct(); + level.var_ABB["czech"][2].count = 0; + level.var_ABB["czech"][2].var_AB6 = "2"; + level.var_ABB["pmc"] = []; + level.var_ABB["pmc"][0] = spawnstruct(); + level.var_ABB["pmc"][0].count = 0; + level.var_ABB["pmc"][0].var_AB6 = "0"; + level.var_ABB["pmc"][1] = spawnstruct(); + level.var_ABB["pmc"][1].count = 0; + level.var_ABB["pmc"][1].var_AB6 = "1"; + level.var_ABB["pmc"][2] = spawnstruct(); + level.var_ABB["pmc"][2].count = 0; + level.var_ABB["pmc"][2].var_AB6 = "2"; + func_0B90(); + if(!isdefined(level.friendlyfire_warnings)) + { + level.friendlyfire_warnings = 0; + } + + anim.eventtypeminwait = []; + level.eventtypeminwait["threat"] = []; + level.eventtypeminwait["response"] = []; + level.eventtypeminwait["reaction"] = []; + level.eventtypeminwait["order"] = []; + level.eventtypeminwait["inform"] = []; + level.eventtypeminwait["custom"] = []; + level.eventtypeminwait["direction"] = []; + if(isdefined(level._stealth)) + { + level.var_B6F["threat"]["self"] = 20000; + level.var_B6F["threat"]["squad"] = 30000; + } + else + { + level.var_B6F["threat"]["self"] = 12500; + level.var_B6F["threat"]["squad"] = 7500; + } + + level.var_B6F["threat"]["location_repeat"] = 5000; + level.var_B6F["response"]["self"] = 1000; + level.var_B6F["response"]["squad"] = 1000; + level.var_B6F["reaction"]["self"] = 1000; + level.var_B6F["reaction"]["squad"] = 1000; + level.var_B6F["order"]["self"] = 8000; + level.var_B6F["order"]["squad"] = 10000; + level.var_B6F["inform"]["self"] = 6000; + level.var_B6F["inform"]["squad"] = 8000; + level.var_B6F["custom"]["self"] = 0; + level.var_B6F["custom"]["squad"] = 0; + level.eventtypeminwait["playername"] = -15536; + level.eventtypeminwait["reaction"]["casualty"] = 14000; + level.eventtypeminwait["reaction"]["friendlyfire"] = 5000; + level.eventtypeminwait["reaction"]["taunt"] = 30000; + level.eventtypeminwait["inform"]["reloading"] = 20000; + level.eventtypeminwait["inform"]["killfirm"] = 15000; + level.var_B70["threat"]["infantry"] = 0.5; + level.var_B70["threat"]["vehicle"] = 0.7; + level.var_B70["response"]["ack"] = 0.9; + level.var_B70["response"]["exposed"] = 0.8; + level.var_B70["response"]["callout"] = 0.9; + level.var_B70["response"]["echo"] = 0.9; + level.var_B70["reaction"]["casualty"] = 0.5; + level.var_B70["reaction"]["friendlyfire"] = 1; + level.var_B70["reaction"]["taunt"] = 0.9; + level.var_B70["order"]["action"] = 0.3; + level.var_B70["order"]["move"] = 0.3; + level.var_B70["order"]["displace"] = 0.5; + level.var_B70["inform"]["attack"] = 0.9; + level.var_B70["inform"]["incoming"] = 0.9; + level.var_B70["inform"]["reloading"] = 0.2; + level.var_B70["inform"]["suppressed"] = 0.2; + level.var_B70["inform"]["killfirm"] = 0.7; + level.var_B70["custom"]["generic"] = 1; + level.var_B71["threat"]["infantry"] = 1000; + level.var_B71["threat"]["vehicle"] = 1000; + level.var_B71["response"]["exposed"] = 2000; + level.var_B71["response"]["callout"] = 2000; + level.var_B71["response"]["echo"] = 2000; + level.var_B71["response"]["ack"] = 1750; + level.var_B71["reaction"]["casualty"] = 2000; + level.var_B71["reaction"]["friendlyfire"] = 1000; + level.var_B71["reaction"]["taunt"] = 2000; + level.var_B71["order"]["action"] = 3000; + level.var_B71["order"]["move"] = 3000; + level.var_B71["order"]["displace"] = 3000; + level.var_B71["inform"]["attack"] = 1000; + level.var_B71["inform"]["incoming"] = 1500; + level.var_B71["inform"]["reloading"] = 1000; + level.var_B71["inform"]["suppressed"] = 2000; + level.var_B71["inform"]["killfirm"] = 2000; + level.var_B71["custom"]["generic"] = 1000; + level.var_B2D["response"]["exposed"] = 75; + level.var_B2D["response"]["reload"] = 65; + level.var_B2D["response"]["callout"] = 75; + level.var_B2D["response"]["callout_negative"] = 20; + level.var_B2D["response"]["order"] = 40; + level.var_B2D["moveEvent"]["coverme"] = 70; + level.var_B2D["moveEvent"]["ordertoplayer"] = 10; + anim.var_B72 = 620; + anim.var_B73 = 12; + anim.var_B74 = 24; + anim.var_B75 = 2; + anim.var_B76 = 5; + anim.var_B77 = spawn("script_origin",(0,0,0)); + if(!isdefined(level.var_B78)) + { + level.var_B78 = 1500; + } + + if(!isdefined(level.var_B1D)) + { + level.var_B1D = 2500; + } + + level.var_B79 = 96; + level.var_B7A = 8; + level.var_B7B = 45; + maps\_bcs_location_trigs::bcs_location_trigs_init(); + anim.var_B7C = []; + anim.var_B7D = 4000; + anim.var_B7E = 3000; + level.var_A60[level.var_A60.size] = ::func_0AAC; + level.var_A61[level.var_A61.size] = "::init_squadBattleChatter"; + foreach(var_01 in level.teams) + { + level.isteamspeaking[var_01] = 0; + level.var_B81[var_01]["threat"] = 0; + level.var_B81[var_01]["order"] = 0; + level.var_B81[var_01]["reaction"] = 0; + level.var_B81[var_01]["response"] = 0; + level.var_B81[var_01]["inform"] = 0; + level.var_B81[var_01]["custom"] = 0; + } + + func_0B8D(); + if(!isdefined(level.var_B82)) + { + anim.var_B82 = []; + level.var_B82["american"] = 1; + level.var_B82["delta"] = 0; + level.var_B82["french"] = 0; + level.var_B82["czech"] = 0; + level.var_B82["pmc"] = 0; + level.var_B82["african"] = 0; + level.var_B82["shadowcompany"] = 1; + level.var_B82["seal"] = 0; + level.var_B82["taskforce"] = 0; + level.var_B82["secretservice"] = 0; + level.var_B82["british"] = 0; + } + + func_0B8F(); + anim.lastteamspeaktime = []; + anim.var_B84 = []; + anim.var_B85 = []; + foreach(var_01 in level.teams) + { + level.lastteamspeaktime[var_01] = --15536; + level.var_B84[var_01] = "none"; + level.var_B85[var_01] = -100000; + } + + anim.var_B86 = 120000; + for(var_05 = 0;var_05 < level.var_A63.size;var_05++) + { + if(isdefined(level.var_A63[var_05].chatinitialized) && level.var_A63[var_05].chatinitialized) + { + continue; + } + + level.var_A63[var_05] func_0AAC(); + } + + anim.var_B87 = []; + level.var_B87["rpg"] = 100; + level.var_B87["exposed"] = 25; + level.var_B87["player_distance"] = 25; + level.var_B87["player_obvious"] = 25; + level.var_B87["player_contact_clock"] = 25; + level.var_B87["player_target_clock"] = 25; + level.var_B87["player_target_clock_high"] = 25; + level.var_B87["player_cardinal"] = 20; + level.var_B87["ai_distance"] = 25; + level.var_B87["ai_obvious"] = 25; + level.var_B87["ai_contact_clock"] = 20; + level.var_B87["ai_target_clock"] = 20; + level.var_B87["ai_target_clock_high"] = 75; + level.var_B87["ai_cardinal"] = 10; + level.var_B87["player_location"] = 95; + level.var_B87["ai_location"] = 100; + level.var_B87["generic_location"] = 90; + anim.var_B88 = []; + anim.var_B89 = []; + foreach(var_01 in level.teams) + { + level.var_B88[var_01] = undefined; + level.var_B89[var_01] = undefined; + } + + anim.var_B8A = 120000; + level notify("battlechatter initialized"); + anim notify("battlechatter initialized"); +} + +//Function Number: 2 +func_0B8B() +{ + if(!isdefined(level.teams)) + { + anim.teams = []; + level.teams[level.teams.size] = "axis"; + level.teams[level.teams.size] = "allies"; + level.teams[level.teams.size] = "team3"; + level.teams[level.teams.size] = "neutral"; + } +} + +//Function Number: 3 +func_0B8C() +{ + if(!isdefined(level.countryids)) + { + level.countryids["british"] = "UK"; + level.countryids["american"] = "US"; + level.countryids["seal"] = "NS"; + level.countryids["taskforce"] = "TF"; + level.countryids["secretservice"] = "SS"; + level.countryids["russian"] = "RU"; + level.countryids["arab"] = "AB"; + level.countryids["portuguese"] = "PG"; + level.countryids["shadowcompany"] = "SC"; + level.countryids["delta"] = "DF"; + level.countryids["french"] = "FR"; + level.countryids["african"] = "AF"; + level.countryids["czech"] = "CZ"; + level.countryids["pmc"] = "PC"; + } +} + +//Function Number: 4 +func_0B8D() +{ + func_0B8B(); + if(!isdefined(level.battlechatter)) + { + level.battlechatter = []; + foreach(var_01 in level.teams) + { + maps\_utility::set_battlechatter_variable(var_01,1); + } + } +} + +//Function Number: 5 +func_0B8F() +{ + func_0B8B(); + if(!isdefined(level.flavorbursts)) + { + level.flavorbursts = []; + foreach(var_01 in level.teams) + { + level.flavorbursts[var_01] = 1; + } + } +} + +//Function Number: 6 +func_0B90() +{ + level.flavorbursts["american"] = []; + var_00 = 41; + var_01 = []; + if(level.script == "roadkill" || level.script == "trainer") + { + } + + var_02 = 0; + while(var_02 < var_01) + { + if(var_7B.size) + { + var_03 = 0; + foreach(var_05 in var_7B) + { + if(var_05 == var_02) + { + var_03 = 1; + break; + } + } + + if(var_03) + { + continue; + } + } + + level.flavorbursts["american"][var_02] = maps\_utility::string(var_02 + 1); + var_02++ = var_7B[var_7B.size]; + } + + level.flavorbursts["shadowcompany"] = []; + var_01 = 9; + for(var_02 = 1;var_02 <= var_01;var_02++ = 38) + { + level.flavorbursts["shadowcompany"][var_02] = maps\_utility::string(var_02 + 1); + } + + anim.var_B92 = []; +} + +//Function Number: 7 +func_0B93() +{ + anim.countryids = undefined; + anim.eventtypeminwait = undefined; + anim.var_B6F = undefined; + anim.eventtypeminwait = undefined; + anim.var_B70 = undefined; + anim.var_B71 = undefined; + anim.var_B77 = undefined; + anim.var_B7D = undefined; + anim.var_B7E = undefined; + anim.var_B7C = undefined; + anim.var_ABB = undefined; + anim.var_B92 = undefined; + anim.var_B88 = undefined; + anim.var_B89 = undefined; + anim.var_B86 = undefined; + anim.var_B84 = undefined; + anim.var_B85 = undefined; + anim.chatinitialized = 0; + level.player.chatinitialized = 0; + level.battlechatter = undefined; + for(var_00 = 0;var_00 < level.var_A60.size;var_00++) + { + if(level.var_A61[var_00] != "::init_squadBattleChatter") + { + continue; + } + + if(var_00 != level.var_A60.size - 1) + { + level.var_A60[var_00] = level.var_A60[level.var_A60.size - 1]; + level.var_A61[var_00] = level.var_A61[level.var_A61.size - 1]; + } + + level.var_A60[level.var_A60.size - 1] = undefined; + level.var_A61[level.var_A61.size - 1] = undefined; + } + + level notify("battlechatter disabled"); + anim notify("battlechatter disabled"); +} + +//Function Number: 8 +func_0AAC() +{ + var_00 = self; + var_00.var_B94 = 0; + var_00.var_B95 = 1; + var_00.var_AC7 = gettime() + 50; + var_00.var_AC8["threat"] = gettime() + 50; + var_00.var_AC8["order"] = gettime() + 50; + var_00.var_AC8["reaction"] = gettime() + 50; + var_00.var_AC8["response"] = gettime() + 50; + var_00.var_AC8["inform"] = gettime() + 50; + var_00.var_AC8["custom"] = gettime() + 50; + var_00.var_B96["threat"] = []; + var_00.var_B96["order"] = []; + var_00.var_B96["reaction"] = []; + var_00.var_B96["response"] = []; + var_00.var_B96["inform"] = []; + var_00.var_B96["custom"] = []; + var_00.var_B97["threat"] = 0; + var_00.var_B97["order"] = 0; + var_00.var_B97["reaction"] = 0; + var_00.var_B97["response"] = 0; + var_00.var_B97["inform"] = 0; + var_00.var_B97["custom"] = 0; + var_00.var_B98 = ""; + var_00.var_A6F[var_00.var_A6F.size] = ::animscripts/battlechatter_ai::func_AA9; + var_00.var_A70[var_00.var_A70.size] = "::addToSystem"; + var_00.var_A71[var_00.var_A71.size] = ::animscripts/battlechatter_ai::func_AC5; + var_00.var_A72[var_00.var_A72.size] = "::removeFromSystem"; + var_00.var_A73[var_00.var_A73.size] = ::func_0C1E; + var_00.var_A74[var_00.var_A74.size] = "::initContact"; + var_00.var_B99 = 1; + var_00.var_B9A = undefined; + for(var_01 = 0;var_01 < level.var_A63.size;var_01++) + { + var_00 thread func_0C1E(level.var_A63[var_01].var_A66); + } + + var_00 thread animscripts/battlechatter_ai::func_B1F(); + var_00 thread animscripts/battlechatter_ai::func_AE8(); + var_00 thread func_0C22(); + var_00.chatinitialized = 1; + var_00 notify("squad chat initialized"); +} + +//Function Number: 9 +func_0B9B() +{ + var_00 = self; + var_00.var_B94 = undefined; + var_00.var_B95 = undefined; + var_00.var_AC7 = undefined; + var_00.var_AC8 = undefined; + var_00.var_B96 = undefined; + var_00.var_B97 = undefined; + var_00.var_B99 = undefined; + var_00.var_B9A = undefined; + for(var_01 = 0;var_01 < var_00.var_A6F.size;var_01++) + { + if(var_00.var_A70[var_01] != "::addToSystem") + { + continue; + } + + if(var_01 != var_00.var_A6F.size - 1) + { + var_00.var_A6F[var_01] = var_00.var_A6F[var_00.var_A6F.size - 1]; + var_00.var_A70[var_01] = var_00.var_A70[var_00.var_A70.size - 1]; + } + + var_00.var_A6F[var_00.var_A6F.size - 1] = undefined; + var_00.var_A70[var_00.var_A70.size - 1] = undefined; + } + + for(var_01 = 0;var_01 < var_00.var_A71.size;var_01++) + { + if(var_00.var_A72[var_01] != "::removeFromSystem") + { + continue; + } + + if(var_01 != var_00.var_A71.size - 1) + { + var_00.var_A71[var_01] = var_00.var_A71[var_00.var_A71.size - 1]; + var_00.var_A72[var_01] = var_00.var_A72[var_00.var_A72.size - 1]; + } + + var_00.var_A71[var_00.var_A71.size - 1] = undefined; + var_00.var_A72[var_00.var_A72.size - 1] = undefined; + } + + for(var_01 = 0;var_01 < var_00.var_A73.size;var_01++) + { + if(var_00.var_A74[var_01] != "::initContact") + { + continue; + } + + if(var_01 != var_00.var_A73.size - 1) + { + var_00.var_A73[var_01] = var_00.var_A73[var_00.var_A73.size - 1]; + var_00.var_A74[var_01] = var_00.var_A74[var_00.var_A74.size - 1]; + } + + var_00.var_A73[var_00.var_A73.size - 1] = undefined; + var_00.var_A74[var_00.var_A74.size - 1] = undefined; + } + + for(var_01 = 0;var_01 < level.var_A63.size;var_01++) + { + var_00 func_0C1F(level.var_A63[var_01].var_A66); + } + + var_00.chatinitialized = 0; +} + +//Function Number: 10 +func_0AAA() +{ + return level.chatinitialized; +} + +//Function Number: 11 +func_0B9C() +{ + var_00 = getdvar("bcs_enable","on"); + for(;;) + { + var_01 = getdvar("bcs_enable","on"); + if(var_01 != var_00) + { + switch(var_01) + { + case "on": + if(!level.chatinitialized) + { + func_0B9D(); + } + break; + + case "off": + if(level.chatinitialized) + { + func_0B9E(); + } + break; + } + + var_00 = var_01; + } + + wait 1; + } +} + +//Function Number: 12 +func_0B9D() +{ + func_0B6B(); + level.player thread animscripts/battlechatter_ai::func_AA9(); + var_00 = getaiarray(); + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + var_00[var_01] animscripts/battlechatter_ai::func_AA9(); + } +} + +//Function Number: 13 +func_0B9E() +{ + func_0B93(); + var_00 = getaiarray(); + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + if(isdefined(var_00[var_01].var_A7A) && var_00[var_01].var_A7A.chatinitialized) + { + var_00[var_01].var_A7A func_0B9B(); + } + + var_00[var_01] animscripts/battlechatter_ai::func_AC5(); + } +} + +//Function Number: 14 +func_0B9F(param_00,param_01) +{ + if(isdefined(param_00) && isdefined(param_01)) + { + level.player.var_BA0 = param_00; + level.player.var_BA1 = param_01; + return; + } + + while(!isdefined(level.campaign)) + { + wait 0.1; + } + + var_02 = level.campaign; + var_03 = level.var_AD0[var_02]; + var_04 = level.countryids[var_02]; + if(isdefined(var_03)) + { + level.player.var_BA0 = var_03; + } + + if(isdefined(var_04)) + { + level.player.var_BA1 = var_04; + } +} + +//Function Number: 15 +func_0ABF() +{ + if(!isalive(self)) + { + return; + } + + if(!func_0AAA()) + { + return; + } + + if(self._animactive > 0) + { + return; + } + + if(isdefined(self.isspeaking) && self.isspeaking) + { + return; + } + + if(self.team == "allies" && isdefined(level.scripteddialoguestarttime)) + { + if(level.scripteddialoguestarttime + level.var_B7D > gettime()) + { + return; + } + } + + if(func_0C37()) + { + return; + } + + if(!isdefined(self.battlechatter) || !self.battlechatter) + { + return; + } + + if(self.team == "allies" && getdvarint("bcs_forceEnglish",0)) + { + return; + } + + if(level.isteamspeaking[self.team]) + { + return; + } + + self endon("death"); + var_00 = func_0BE2(); + if(!isdefined(var_00)) + { + return; + } + + switch(var_00) + { + case "custom": + thread func_0BD7(); + break; + + case "response": + thread func_0BC9(); + break; + + case "order": + thread func_0BCD(); + break; + + case "threat": + thread func_0BA5(); + break; + + case "reaction": + thread func_0BC5(); + break; + + case "inform": + thread func_0BD1(); + break; + } +} + +//Function Number: 16 +func_0BA5() +{ + self endon("death"); + self endon("removed from battleChatter"); + self endon("cancel speaking"); + self.var_BA6 = self.var_AC6["threat"]; + var_00 = self.var_AC6["threat"].var_AD9; + if(!isalive(var_00)) + { + return; + } + + if(func_0AD7(var_00) && !isplayer(var_00)) + { + return; + } + + anim thread func_0BDF(self,"threat"); + var_01 = 0; + switch(self.var_AC6["threat"].var_BA7) + { + case "infantry": + if(isplayer(var_00) || !isdefined(var_00 getturret())) + { + var_01 = func_0BAA(var_00); + } + else + { + } + break; + + case "dog": + var_01 = func_0BC1(var_00); + break; + + case "vehicle": + break; + } + + self notify("done speaking"); + if(!var_01) + { + return; + } + + if(!isalive(var_00)) + { + return; + } + + var_00.var_AAE[self.var_A7A.var_A66] = spawnstruct(); + var_00.var_AAE[self.var_A7A.var_A66].var_BA8 = self; + var_00.var_AAE[self.var_A7A.var_A66].var_BA9 = self.var_AC6["threat"].var_BA7; + var_00.var_AAE[self.var_A7A.var_A66].var_ACB = gettime() + level.var_B7E; + if(isdefined(var_00.var_A7A)) + { + self.var_A7A.var_A6E[var_00.var_A7A.var_A66].var_AAE = 1; + } +} + +//Function Number: 17 +func_0AD7(param_00) +{ + if(isdefined(param_00.var_AAE) && isdefined(param_00.var_AAE[self.var_A7A.var_A66])) + { + if(param_00.var_AAE[self.var_A7A.var_A66].var_ACB < gettime()) + { + return 1; + } + } + + return 0; +} + +//Function Number: 18 +func_0BAA(param_00,param_01) +{ + self endon("cancel speaking"); + var_02 = func_0B45(); + var_02.var_BAB = 1; + var_02.var_BAC = param_00; + var_03 = func_0BB4(param_00); + if(!isdefined(var_03) || isdefined(var_03) && !isdefined(var_03.type)) + { + return 0; + } + + switch(var_03.type) + { + case "rpg": + var_02 func_0BC4(param_00); + break; + + case "exposed": + var_04 = func_0BB1(var_03.var_BAD); + if(var_04 && func_0C08(var_03.var_BAD)) + { + var_02 func_0B4D(var_03.var_BAD.var_AC2); + var_02.looktarget = var_03.var_BAD; + } + + var_02 func_0BC2(param_00); + if(var_04) + { + if(randomint(100) < level.var_B2D["response"]["callout_negative"]) + { + var_03.var_BAD animscripts/battlechatter_ai::func_ADB("callout","neg",self,0.9); + } + else + { + var_03.var_BAD animscripts/battlechatter_ai::func_ADB("exposed","acquired",self,0.9); + } + } + break; + + case "player_obvious": + var_02 func_0C05(); + var_02 func_0C0E(); + break; + + case "player_distance": + var_05 = func_0BFF(level.player.origin,param_00.origin); + var_02 func_0C05(); + var_02 func_0C0F(var_05); + break; + + case "player_contact_clock": + var_02 func_0C05(); + var_02 func_0C15("contactclock",var_03.var_BAF); + break; + + case "player_target_clock": + var_02 func_0C05(); + var_02 func_0C15("targetclock",var_03.var_BAF); + break; + + case "player_target_clock_high": + var_02 func_0C05(); + var_06 = func_0C02(level.player.origin,param_00.origin); + if(var_06 >= 20 && var_06 <= 50) + { + var_02 func_0C15("targetclock",var_03.var_BAF); + var_02 func_0C10(var_06); + } + else + { + var_02 func_0C15("targetclock",var_03.var_BAF + "_high"); + } + break; + + case "player_cardinal": + var_02 func_0C05(); + var_07 = func_0BFD(level.player.origin,param_00.origin); + var_08 = func_0BFC(var_07); + if(var_08 == "impossible") + { + return 0; + } + + var_02 func_0C15("cardinal",var_08); + break; + + case "ai_obvious": + if(isdefined(var_03.var_BAD) && func_0C08(var_03.var_BAD)) + { + var_02 func_0B4D(var_03.var_BAD.var_AC2); + var_02.looktarget = var_03.var_BAD; + } + + var_02 func_0C0E(); + var_02 func_0BB3(self,var_03,param_00); + break; + + case "ai_distance": + var_09 = self; + if(self.team == "allies") + { + var_09 = level.player; + } + else if(isdefined(var_03.var_BAD) && randomint(100) < level.var_B2D["response"]["callout"]) + { + var_09 = var_03.var_BAD; + } + + var_05 = func_0BFF(var_09.origin,param_00.origin); + var_02 func_0C0F(var_05); + var_02 func_0BB3(self,var_03,param_00); + break; + + case "ai_contact_clock": + var_09 = self; + if(self.team == "allies") + { + var_09 = level.player; + } + else if(isdefined(var_03.var_BAD) && randomint(100) < level.var_B2D["response"]["callout"]) + { + var_09 = var_03.var_BAD; + } + + var_0A = func_0BF9(var_09); + var_0B = func_0C01(var_0A,var_09.origin,param_00.origin); + var_02 func_0C15("contactclock",var_0B); + var_02 func_0BB3(self,var_03,param_00); + break; + + case "ai_target_clock": + var_09 = self; + if(self.team == "allies") + { + var_09 = level.player; + } + else if(isdefined(var_03.var_BAD) && randomint(100) < level.var_B2D["response"]["callout"]) + { + var_09 = var_03.var_BAD; + } + + var_0A = func_0BF9(var_09); + var_0B = func_0C01(var_0A,var_09.origin,param_00.origin); + var_02 func_0C15("targetclock",var_0B); + var_02 func_0BB3(self,var_03,param_00); + break; + + case "ai_target_clock_high": + var_09 = self; + if(self.team == "allies") + { + var_09 = level.player; + } + else if(isdefined(var_03.var_BAD) && randomint(100) < level.var_B2D["response"]["callout"]) + { + var_09 = var_03.var_BAD; + } + + var_0A = func_0BF9(var_09); + var_0B = func_0C01(var_0A,var_09.origin,param_00.origin); + var_06 = func_0C02(var_09.origin,param_00.origin); + if(var_06 >= 20 && var_06 <= 50) + { + var_02 func_0C15("targetclock",var_0B); + var_02 func_0C10(var_06); + } + else + { + var_02 func_0C15("targetclock",var_0B + "_high"); + } + + var_02 func_0BB3(self,var_03,param_00); + break; + + case "ai_cardinal": + var_09 = self; + if(self.team == "allies") + { + var_09 = level.player; + } + + var_07 = func_0BFD(var_09.origin,param_00.origin); + var_08 = func_0BFC(var_07); + if(var_08 == "impossible") + { + return 0; + } + + var_02 func_0C15("cardinal",var_08); + break; + + case "generic_location": + var_0C = var_02 func_0BB2(var_03); + if(!var_0C) + { + return 0; + } + break; + + case "player_location": + var_02 func_0C05(); + var_0C = var_02 func_0BB2(var_03); + if(!var_0C) + { + return 0; + } + break; + + case "ai_location": + if(func_0C08(var_03.var_BAD)) + { + var_02 func_0B4D(var_03.var_BAD.var_AC2); + var_02.looktarget = var_03.var_BAD; + } + + var_0C = var_02 func_0BB2(var_03); + if(!var_0C) + { + return 0; + } + + var_0D = var_02.var_BB0.size - 1; + var_0E = var_02.var_BB0[var_0D]; + if(func_0BBA(var_0E)) + { + var_03.var_BAD animscripts/battlechatter_ai::func_ADB("callout","echo",self,0.9,var_0E); + } + else if(func_0BBB(var_0E,self)) + { + var_03.var_BAD animscripts/battlechatter_ai::func_ADB("callout","QA",self,0.9,var_0E,var_03.location); + } + else if(randomint(100) < level.var_B2D["response"]["callout_negative"]) + { + var_03.var_BAD animscripts/battlechatter_ai::func_ADB("callout","neg",self,0.9); + } + else + { + var_03.var_BAD animscripts/battlechatter_ai::func_ADB("exposed","acquired",self,0.9); + } + break; + } + + func_0BBF(var_03.type); + func_0BD9(var_02); + return 1; +} + +//Function Number: 19 +func_0BB1(param_00) +{ + if(!isdefined(param_00)) + { + return 0; + } + + if(param_00.var_AB4 != "US" && param_00.var_AB4 != "NS" && param_00.var_AB4 != "TF") + { + return 0; + } + + if(randomint(100) > level.var_B2D["response"]["exposed"]) + { + return 0; + } + + return 1; +} + +//Function Number: 20 +func_0BB2(param_00) +{ + var_01 = func_0C18(param_00.location); + return var_01; +} + +//Function Number: 21 +func_0BB3(param_00,param_01,param_02) +{ + if(!isdefined(param_01.var_BAD)) + { + return; + } + + if(randomint(100) > level.var_B2D["response"]["callout"]) + { + return; + } + + var_03 = "affirm"; + if(!param_01.var_BAD cansee(param_02) && randomint(100) < level.var_B2D["response"]["callout_negative"]) + { + var_03 = "neg"; + } + + param_01.var_BAD animscripts/battlechatter_ai::func_ADB("callout",var_03,param_00,0.9); +} + +//Function Number: 22 +func_0BB4(param_00) +{ + var_01 = param_00 func_0AED(); + var_02 = func_0C01(self.angles,self.origin,param_00.origin); + var_03 = func_0B2C(64,1024,"response"); + var_04 = undefined; + if(isdefined(var_03)) + { + var_04 = func_0C01(var_03.angles,var_03.origin,param_00.origin); + } + + var_05 = func_0C01(level.player.angles,level.player.origin,param_00.origin); + if(self.team == "allies") + { + var_06 = var_05; + var_07 = level.player; + } + else if(isdefined(var_05)) + { + var_06 = var_06; + var_07 = var_04; + } + else + { + var_06 = var_04; + var_07 = self; + } + + var_08 = func_0BFE(var_07.origin,param_00.origin); + self.var_BB5 = []; + if(!isplayer(param_00) && param_00 animscripts/utility::func_BB6()) + { + func_0BBD("rpg"); + } + + if(param_00 func_0AA8()) + { + func_0BBD("exposed"); + } + + if(self.team == "allies") + { + var_09 = 0; + if(param_00.origin[2] - var_07.origin[2] >= level.var_B79) + { + if(func_0BBD("player_target_clock_high")) + { + var_09 = 1; + } + } + + if(!var_09) + { + if(var_06 == "12") + { + func_0BBD("player_obvious"); + if(var_08 > level.var_B7A && var_08 < level.var_B7B) + { + func_0BBD("player_distance"); + } + } + + if(func_0C0A() && var_06 != "12") + { + func_0BBD("player_contact_clock"); + func_0BBD("player_target_clock"); + func_0BBD("player_cardinal"); + } + } + } + + var_09 = 0; + if(param_00.origin[2] - var_07.origin[2] >= level.var_B79) + { + if(func_0BBD("ai_target_clock_high")) + { + var_09 = 1; + } + } + + if(!var_09) + { + if(var_06 == "12") + { + func_0BBD("ai_distance"); + if(var_08 > level.var_B7A && var_08 < level.var_B7B) + { + func_0BBD("ai_obvious"); + } + } + + func_0BBD("ai_contact_clock"); + func_0BBD("ai_target_clock"); + func_0BBD("ai_cardinal"); + } + + if(isdefined(var_01)) + { + var_0A = var_01 func_0BB8(self); + if(isdefined(var_0A)) + { + if(isdefined(var_03)) + { + func_0BBD("ai_location"); + } + else + { + if(func_0C0A()) + { + func_0BBD("player_location"); + } + + func_0BBD("generic_location"); + } + } + else + { + if(isdefined(var_03)) + { + func_0BBD("ai_location"); + } + + if(func_0C0A()) + { + func_0BBD("player_location"); + } + + func_0BBD("generic_location"); + } + } + + if(!self.var_BB5.size) + { + return undefined; + } + + var_0C = getweightedchanceroll(self.var_BB5,level.var_B87); + var_0D = spawnstruct(); + var_0D.type = var_0C; + var_0D.var_BAD = var_03; + var_0D.var_BB7 = var_04; + var_0D.var_BAF = var_05; + if(isdefined(var_01)) + { + var_0D.location = var_01; + } + + return var_0D; +} + +//Function Number: 23 +func_0BB8(param_00) +{ + var_01 = undefined; + var_02 = self.locationaliases; + foreach(var_04 in var_02) + { + if(func_0BBB(var_04,param_00) && !isdefined(self.var_BB9)) + { + var_01 = var_04; + break; + } + + if(func_0BBA(var_04)) + { + var_01 = var_04; + } + } + + return var_01; +} + +//Function Number: 24 +func_0BBA(param_00) +{ + return issubstr(param_00,"_report"); +} + +//Function Number: 25 +func_0BBB(param_00,param_01) +{ + if(issubstr(param_00,"_qa") && soundexists(param_00)) + { + return 1; + } + + var_02 = param_01 func_0BBC(param_00,0); + if(soundexists(var_02)) + { + return 1; + } + + return 0; +} + +//Function Number: 26 +func_0BBC(param_00,param_01) +{ + var_02 = self.var_AB4 + "_" + self.var_AB6 + "_co_"; + var_02 = var_02 + param_00; + var_02 = var_02 + "_qa" + param_01; + return var_02; +} + +//Function Number: 27 +func_0ACF(param_00) +{ + self.var_ACE[self.var_ACE.size] = param_00; +} + +//Function Number: 28 +func_0BBD(param_00) +{ + var_01 = 0; + foreach(var_03 in self.var_ACE) + { + if(var_03 == param_00) + { + if(!func_0BBE(param_00)) + { + var_01 = 1; + } + + break; + } + } + + if(!var_01) + { + return var_01; + } + + self.var_BB5[self.var_BB5.size] = param_00; + return var_01; +} + +//Function Number: 29 +func_0BBE(param_00) +{ + if(!isdefined(level.var_B88[self.team])) + { + return 0; + } + + if(!isdefined(level.var_B89[self.team])) + { + return 0; + } + + var_01 = level.var_B88[self.team]; + var_02 = level.var_B89[self.team]; + var_03 = level.var_B8A; + if(param_00 == var_01 && gettime() - var_02 < var_03) + { + return 1; + } + + return 0; +} + +//Function Number: 30 +func_0BBF(param_00) +{ + level.var_B88[self.team] = param_00; + level.var_B89[self.team] = gettime(); +} + +//Function Number: 31 +getweightedchanceroll(param_00,param_01) +{ + var_02 = undefined; + var_03 = -1; + foreach(var_05 in param_00) + { + if(param_01[var_05] <= 0) + { + continue; + } + + var_06 = randomint(param_01[var_05]); + if(isdefined(var_02) && param_01[var_02] >= 100) + { + if(param_01[var_05] < 100) + { + continue; + } + + continue; + } + + if(param_01[var_05] >= 100) + { + var_02 = var_05; + var_03 = var_06; + continue; + } + + if(var_06 > var_03) + { + var_02 = var_05; + var_03 = var_06; + } + } + + return var_02; +} + +//Function Number: 32 +func_0BC1(param_00,param_01) +{ + self endon("cancel speaking"); + var_02 = func_0B45(); + var_02.var_BAB = 1; + var_02.var_BAC = param_00; + var_02 func_0C0C("dog","generic"); + func_0BD9(var_02); + return 1; +} + +//Function Number: 33 +func_0BC2(param_00) +{ + var_01 = []; + var_01 = maps\_utility::array_add(var_01,"open"); + var_01 = maps\_utility::array_add(var_01,"breaking"); + if(self.owner.team == "allies" && self.owner.var_AB4 != "RU") + { + var_01 = maps\_utility::array_add(var_01,"movement"); + } + + var_02 = var_01[randomint(var_01.size)]; + func_0C0D(var_02); +} + +//Function Number: 34 +func_0BC4(param_00) +{ + func_0C0C("rpg"); +} + +//Function Number: 35 +func_0BC5() +{ + self endon("death"); + self endon("removed from battleChatter"); + self.var_BA6 = self.var_AC6["reaction"]; + var_00 = self.var_AC6["reaction"].var_AE5; + var_01 = self.var_AC6["reaction"].var_AE0; + anim thread func_0BDF(self,"reaction"); + switch(self.var_AC6["reaction"].var_BA7) + { + case "casualty": + func_0BC6(var_00,var_01); + break; + + case "taunt": + func_0BC7(var_00,var_01); + break; + + case "friendlyfire": + func_0BC8(var_00,var_01); + break; + } + + self notify("done speaking"); +} + +//Function Number: 36 +func_0BC6(param_00,param_01) +{ + self endon("death"); + self endon("removed from battleChatter"); + var_02 = func_0B45(); + var_02 func_0C1A("casualty","generic"); + func_0BD9(var_02); +} + +//Function Number: 37 +func_0BC7(param_00,param_01) +{ + self endon("death"); + self endon("removed from battleChatter"); + var_02 = func_0B45(); + if(isdefined(param_01) && param_01 == "hostileburst") + { + var_02 func_0C1D(); + } + else + { + var_02 func_0C1C("taunt","generic"); + } + + func_0BD9(var_02); +} + +//Function Number: 38 +func_0BC8(param_00,param_01) +{ + self endon("death"); + self endon("removed from battleChatter"); + var_02 = func_0B45(); + var_02 func_0C1B(); + func_0BD9(var_02); +} + +//Function Number: 39 +func_0BC9() +{ + self endon("death"); + self endon("removed from battleChatter"); + self.var_BA6 = self.var_AC6["response"]; + var_00 = self.var_AC6["response"].var_AE0; + var_01 = self.var_AC6["response"].var_ADF; + if(!isalive(var_01)) + { + return; + } + + if(self.var_AC6["response"].var_AE0 == "follow" && self.a.var_A98 != "move") + { + return; + } + + anim thread func_0BDF(self,"response"); + switch(self.var_AC6["response"].var_BA7) + { + case "exposed": + func_0BCA(var_01,var_00); + break; + + case "callout": + func_0BCB(var_01,var_00); + break; + + case "ack": + func_0BCC(var_01,var_00); + break; + } + + self notify("done speaking"); +} + +//Function Number: 40 +func_0BCA(param_00,param_01) +{ + self endon("death"); + self endon("removed from battleChatter"); + if(!isalive(param_00)) + { + return; + } + + var_02 = func_0B45(); + var_02 func_0C0D(param_01); + var_02.looktarget = param_00; + var_02.var_BAB = 1; + func_0BD9(var_02); +} + +//Function Number: 41 +func_0BCB(param_00,param_01) +{ + self endon("death"); + self endon("removed from battleChatter"); + if(!isalive(param_00)) + { + return; + } + + var_02 = func_0B45(); + var_03 = 0; + if(param_01 == "echo") + { + var_03 = var_02 func_0C11(self.var_BA6.var_ADE,param_00); + } + else if(param_01 == "QA") + { + var_03 = var_02 func_0C13(param_00,self.var_BA6.var_ADE,self.var_BA6.location); + } + else + { + var_03 = var_02 func_0C12(param_01); + } + + if(!var_03) + { + return; + } + + var_02.looktarget = param_00; + var_02.var_BAB = 1; + func_0BD9(var_02); +} + +//Function Number: 42 +func_0BCC(param_00,param_01) +{ + self endon("death"); + self endon("removed from battleChatter"); + if(!isalive(param_00)) + { + return; + } + + var_02 = self.var_AC6["response"].var_BA7; + var_03 = func_0B45(); + var_03 func_0C19(var_02,param_01); + var_03.looktarget = param_00; + var_03.var_BAB = 1; + func_0BD9(var_03); +} + +//Function Number: 43 +func_0BCD() +{ + self endon("death"); + self endon("removed from battleChatter"); + self.var_BA6 = self.var_AC6["order"]; + var_00 = self.var_AC6["order"].var_AE0; + var_01 = self.var_AC6["order"].var_AE7; + anim thread func_0BDF(self,"order"); + switch(self.var_AC6["order"].var_BA7) + { + case "action": + func_0BCE(var_00,var_01); + break; + + case "move": + func_0BCF(var_00,var_01); + break; + + case "displace": + func_0BD0(var_00); + break; + } + + self notify("done speaking"); +} + +//Function Number: 44 +func_0BCE(param_00,param_01) +{ + self endon("death"); + self endon("removed from battleChatter"); + var_02 = func_0B45(); + func_0B43(var_02,param_01); + var_02 func_0B47("action",param_00); + func_0BD9(var_02); +} + +//Function Number: 45 +func_0BCF(param_00,param_01) +{ + self endon("death"); + self endon("removed from battleChatter"); + var_02 = func_0B45(); + func_0B43(var_02,param_01); + var_02 func_0B47("move",param_00); + func_0BD9(var_02); +} + +//Function Number: 46 +func_0BD0(param_00) +{ + self endon("death"); + self endon("removed from battleChatter"); + var_01 = func_0B45(); + var_01 func_0B47("displace",param_00); + func_0BD9(var_01,1); +} + +//Function Number: 47 +func_0B43(param_00,param_01) +{ + if(randomint(100) > level.var_B2D["response"]["order"]) + { + if(!isdefined(param_01) || isdefined(param_01) && !isplayer(param_01)) + { + return; + } + } + + if(isdefined(param_01) && isplayer(param_01) && isdefined(level.player.var_BA0)) + { + param_00 func_0C05(); + param_00.looktarget = level.player; + return; + } + + if(isdefined(param_01) && func_0C08(param_01)) + { + param_00 func_0B4D(param_01.var_AC2); + param_00.looktarget = param_01; + param_01 animscripts/battlechatter_ai::func_ADB("ack","yes",self,0.9); + return; + } + + level notify("follow order",self); +} + +//Function Number: 48 +func_0BD1() +{ + self endon("death"); + self endon("removed from battleChatter"); + self.var_BA6 = self.var_AC6["inform"]; + var_00 = self.var_AC6["inform"].var_AE0; + anim thread func_0BDF(self,"inform"); + switch(self.var_AC6["inform"].var_BA7) + { + case "incoming": + func_0BD4(var_00); + break; + + case "attack": + func_0BD5(var_00); + break; + + case "reloading": + func_0BD2(var_00); + break; + + case "suppressed": + func_0BD3(var_00); + break; + + case "killfirm": + func_0BD6(var_00); + break; + } + + self notify("done speaking"); +} + +//Function Number: 49 +func_0BD2(param_00) +{ + self endon("death"); + self endon("removed from battleChatter"); + var_01 = func_0B45(); + var_01 func_0B4B("reloading",param_00); + func_0BD9(var_01); +} + +//Function Number: 50 +func_0BD3(param_00) +{ + self endon("death"); + self endon("removed from battleChatter"); + var_01 = func_0B45(); + var_01 func_0B4B("suppressed",param_00); + func_0BD9(var_01); +} + +//Function Number: 51 +func_0BD4(param_00) +{ + self endon("death"); + self endon("removed from battleChatter"); + var_01 = func_0B45(); + if(param_00 == "grenade") + { + var_01.var_BAB = 1; + } + + var_01 func_0B4B("incoming",param_00); + func_0BD9(var_01); +} + +//Function Number: 52 +func_0BD5(param_00) +{ + self endon("death"); + self endon("removed from battleChatter"); + var_01 = func_0B45(); + var_01 func_0B4B("attack",param_00); + func_0BD9(var_01); +} + +//Function Number: 53 +func_0BD6(param_00) +{ + self endon("death"); + self endon("removed from battleChatter"); + var_01 = func_0B45(); + var_01 func_0B4B("killfirm",param_00); + func_0BD9(var_01); +} + +//Function Number: 54 +func_0BD7() +{ + self endon("death"); + self endon("removed from battleChatter"); + self.var_BA6 = self.var_AC6["custom"]; + anim thread func_0BDF(self,self.var_BA6.type,1); + func_0BD9(self.var_B42); + self notify("done speaking"); + self.var_BD8 = undefined; + self.var_B42 = undefined; +} + +//Function Number: 55 +func_0BD9(param_00,param_01) +{ + anim endon("battlechatter disabled"); + self endon("death"); + if(isdefined(param_01)) + { + return; + } + + if(func_0C2C() || func_0C2D()) + { + var_02 = []; + foreach(var_04 in param_00.var_BB0) + { + var_02[var_02.size] = var_04; + } + + if(func_0C2C()) + { + func_0C2E(var_02); + } + + if(func_0C2D()) + { + var_06 = self.var_BA6.var_BDA + "_" + self.var_BA6.var_BA7; + if(isdefined(self.var_BA6.var_AE0)) + { + var_06 = var_06 + "_" + self.var_BA6.var_AE0; + } + + thread func_0C2F(var_02,var_06); + } + } + + for(var_07 = 0;var_07 < param_00.var_BB0.size;var_07++) + { + if(!self.battlechatter) + { + if(!func_0BDC(self.var_BA6)) + { + } + else + { + } + else if(!func_0C38(0)) + { + } + else if(self._animactive > 0) + { + } + else if(func_0BE6(self.var_BA6.var_BDA)) + { + wait 0.85; + } + else if(!soundexists(param_00.var_BB0[var_07])) + { + } + else + { + var_08 = gettime(); + var_09 = spawn("script_origin",self gettagorigin("j_head")); + var_09 linkto(self); + if(param_00.var_BAB && self.team == "allies") + { + thread maps\_anim::anim_facialfiller(param_00.var_BB0[var_07],param_00.looktarget); + var_09 playsoundasmaster(param_00.var_BB0[var_07],param_00.var_BB0[var_07],1); + var_09 waittill(param_00.var_BB0[var_07]); + self notify(param_00.var_BB0[var_07]); + } + else + { + thread maps\_anim::anim_facialfiller(param_00.var_BB0[var_07],param_00.looktarget); + if(getdvarint("bcs_forceEnglish",0)) + { + var_09 playsoundasmaster(param_00.var_BB0[var_07],param_00.var_BB0[var_07],1); + } + else + { + var_09 playsound(param_00.var_BB0[var_07],param_00.var_BB0[var_07],1); + } + + var_09 waittill(param_00.var_BB0[var_07]); + self notify(param_00.var_BB0[var_07]); + } + + var_09 delete(); + if(gettime() < var_08 + 250) + { + } + } + } + } + + self notify("playPhrase_done"); + func_0BE9(self.var_BA6.var_BDA,self.var_BA6.var_BA7); +} + +//Function Number: 56 +func_0BDC(param_00) +{ + if(!isdefined(param_00.var_BDA) || !isdefined(param_00.var_BA7)) + { + return 0; + } + + if(param_00.var_BDA == "reaction" && param_00.var_BA7 == "friendlyfire") + { + return 1; + } + + return 0; +} + +//Function Number: 57 +func_0BDD(param_00) +{ + self endon("death"); + wait 25; + func_0BDE(param_00); +} + +//Function Number: 58 +func_0BDE(param_00) +{ + self.isspeaking = 0; + self.var_AC6[param_00].var_ACB = 0; + self.var_AC6[param_00].priority = 0; + self.var_AC8[param_00] = gettime() + level.var_B6F[param_00]["self"]; +} + +//Function Number: 59 +func_0BDF(param_00,param_01,param_02) +{ + anim endon("battlechatter disabled"); + var_03 = param_00.var_A7A; + var_04 = param_00.team; + param_00.isspeaking = 1; + param_00 thread func_0BDD(param_01); + var_03.var_B97[param_01] = 1; + var_03.var_B94++; + level.isteamspeaking[var_04] = 1; + level.var_B81[var_04][param_01] = 1; + var_05 = param_00 common_scripts\utility::waittill_any_return("death","done speaking","cancel speaking"); + var_03.var_B97[param_01] = 0; + var_03.var_B94--; + level.isteamspeaking[var_04] = 0; + level.var_B81[var_04][param_01] = 0; + if(var_05 == "cancel speaking") + { + return; + } + + level.lastteamspeaktime[var_04] = gettime(); + if(isalive(param_00)) + { + param_00 func_0BDE(param_01); + } + + var_03.var_AC8[param_01] = gettime() + level.var_B6F[param_01]["squad"]; +} + +//Function Number: 60 +func_0ADA(param_00,param_01) +{ + if(gettime() - self.var_A6E[param_00].var_BE0 > 10000) + { + var_02 = 0; + for(var_03 = 0;var_03 < self.members.size;var_03++) + { + if(self.members[var_03] != param_01 && isalive(self.members[var_03].enemy) && isdefined(self.members[var_03].enemy.var_A7A) && self.members[var_03].enemy.var_A7A.var_A66 == param_00) + { + var_02 = 1; + } + } + + if(!var_02) + { + self.var_A6E[param_00].var_BE1 = gettime(); + self.var_A6E[param_00].var_AAE = 0; + } + } + + self.var_A6E[param_00].var_BE0 = gettime(); +} + +//Function Number: 61 +func_0AD6(param_00,param_01,param_02,param_03) +{ + self endon("death"); + self endon("removed from battleChatter"); + if(isplayer(self)) + { + return 0; + } + + if(distance(level.player.origin,self.origin) > level.var_B78) + { + return 0; + } + + if(!isdefined(self.battlechatter) || !self.battlechatter) + { + return 0; + } + + if(isdefined(param_02) && param_02 >= 1) + { + return 1; + } + + if(gettime() + level.var_B6F[param_00]["self"] < self.var_AC8[param_00]) + { + return 0; + } + + if(gettime() + level.var_B6F[param_00]["squad"] < self.var_A7A.var_AC8[param_00]) + { + return 0; + } + + if(isdefined(param_01) && func_0BE8(param_00,param_01)) + { + return 0; + } + + if(isdefined(param_01) && level.var_B70[param_00][param_01] < self.var_ACD) + { + return 0; + } + + return 1; +} + +//Function Number: 62 +func_0BE2() +{ + var_00 = undefined; + var_01 = -999999999; + foreach(var_04, var_03 in self.var_AC6) + { + if(func_0BE7(var_04)) + { + if(var_03.priority > var_01) + { + var_00 = var_04; + var_01 = var_03.priority; + } + } + } + + return var_00; +} + +//Function Number: 63 +func_0BE3(param_00) +{ + var_01 = self.var_A7A; + var_02 = []; + for(var_03 = 0;var_03 < var_01.members.size;var_03++) + { + if(isdefined(var_01.members[var_03].enemy) && var_01.members[var_03].enemy == param_00) + { + var_02[var_02.size] = var_01.members[var_03]; + } + } + + if(!isdefined(var_02[0])) + { + return undefined; + } + + var_04 = undefined; + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + if(var_02[var_03] func_0AD6("response")) + { + return var_04; + } + } + + return maps\_utility::getclosest(self.origin,var_02); +} + +//Function Number: 64 +func_0BE4() +{ + var_00 = []; + var_01 = []; + var_00[0] = "custom"; + var_00[1] = "response"; + var_00[2] = "order"; + var_00[3] = "threat"; + var_00[4] = "inform"; + for(var_02 = var_00.size - 1;var_02 >= 0;var_02--) + { + for(var_03 = 1;var_03 <= var_02;var_03++) + { + if(self.var_AC6[var_00[var_03 - 1]].priority < self.var_AC6[var_00[var_03]].priority) + { + var_04 = var_00[var_03 - 1]; + var_00[var_03 - 1] = var_00[var_03]; + var_00[var_03] = var_04; + } + } + } + + var_05 = 0; + for(var_02 = 0;var_02 < var_00.size;var_02++) + { + var_06 = func_0BE5(var_00[var_02]); + if(var_06 == " valid" && !var_05) + { + var_05 = 1; + var_01[var_02] = "g " + var_00[var_02] + var_06 + " " + self.var_AC6[var_00[var_02]].priority; + continue; + } + + if(var_06 == " valid") + { + var_01[var_02] = "y " + var_00[var_02] + var_06 + " " + self.var_AC6[var_00[var_02]].priority; + continue; + } + + if(self.var_AC6[var_00[var_02]].var_ACB == 0) + { + var_01[var_02] = "b " + var_00[var_02] + var_06 + " " + self.var_AC6[var_00[var_02]].priority; + continue; + } + + var_01[var_02] = "r " + var_00[var_02] + var_06 + " " + self.var_AC6[var_00[var_02]].priority; + } + + return var_01; +} + +//Function Number: 65 +func_0BE5(param_00) +{ + var_01 = ""; + if(self.var_A7A.var_B97[param_00]) + { + var_01 = var_01 + " playing"; + } + + if(gettime() > self.var_AC6[param_00].var_ACB) + { + var_01 = var_01 + " expired"; + } + + if(gettime() < self.var_A7A.var_AC8[param_00]) + { + var_01 = var_01 + " cantspeak"; + } + + if(var_01 == "") + { + var_01 = " valid"; + } + + return var_01; +} + +//Function Number: 66 +func_0BE6(param_00) +{ + if(getdvar("bcs_filter" + param_00,"off") == "on" || getdvar("bcs_filter" + param_00,"off") == "1") + { + return 1; + } + + return 0; +} + +//Function Number: 67 +func_0BE7(param_00) +{ + if(!self.var_A7A.var_B97[param_00] && !level.var_B81[self.team][param_00] && gettime() < self.var_AC6[param_00].var_ACB && gettime() > self.var_A7A.var_AC8[param_00]) + { + if(!func_0BE8(param_00,self.var_AC6[param_00].var_BA7)) + { + return 1; + } + } + + return 0; +} + +//Function Number: 68 +func_0BE8(param_00,param_01) +{ + if(!isdefined(level.eventtypeminwait[param_00][param_01])) + { + return 0; + } + + if(!isdefined(self.var_A7A.var_B96[param_00][param_01])) + { + return 0; + } + + if(gettime() > self.var_A7A.var_B96[param_00][param_01]) + { + return 0; + } + + return 1; +} + +//Function Number: 69 +func_0BE9(param_00,param_01) +{ + if(!isdefined(level.eventtypeminwait[param_00][param_01])) + { + return; + } + + self.var_A7A.var_B96[param_00][param_01] = gettime() + level.eventtypeminwait[param_00][param_01]; +} + +//Function Number: 70 +func_0BEA() +{ + if(isplayer(self)) + { + return 0; + } + + if(func_0AA8()) + { + return 0; + } + + return animscripts/utility::func_BEB(self.weapon); +} + +//Function Number: 71 +func_0AA8() +{ + if(distance(self.origin,level.player.origin) > 1500) + { + return 0; + } + + if(isdefined(func_0AED())) + { + return 0; + } + + var_00 = func_0BED(); + if(!isdefined(var_00)) + { + return 1; + } + + if(!func_0B2B()) + { + return 0; + } + + return 1; +} + +//Function Number: 72 +func_0B2B() +{ + var_00 = self.node; + if(!isdefined(var_00)) + { + return 0; + } + + if(issubstr(var_00.type,"Cover") || issubstr(var_00.type,"Conceal")) + { + return 1; + } + + return 0; +} + +//Function Number: 73 +func_0BEC(param_00) +{ + if(param_00.var_A6D > 0) + { + return 1; + } + + return 0; +} + +//Function Number: 74 +func_0A83() +{ + var_00 = getrank(); + if(!isdefined(var_00)) + { + return 0; + } + + if(var_00 == "sergeant" || var_00 == "lieutenant" || var_00 == "captain" || var_00 == "sergeant") + { + return 1; + } + + return 0; +} + +//Function Number: 75 +func_0BED() +{ + if(isplayer(self)) + { + return self.node; + } + + return animscripts/utility::func_BEE(); +} + +//Function Number: 76 +func_0BEF() +{ + if(self isbadguy()) + { + return 1; + } + + return 0; +} + +//Function Number: 77 +func_0AC1() +{ + if(func_0BEF()) + { + var_00 = self.ainame; + } + else if(self.team == "allies") + { + var_00 = self.name; + } + else + { + var_00 = undefined; + } + + if(!isdefined(var_00)) + { + return undefined; + } + + var_01 = strtok(var_00," "); + if(var_01.size < 2) + { + return var_00; + } + + return var_01[1]; +} + +//Function Number: 78 +getrank() +{ + return self.airank; +} + +//Function Number: 79 +func_0BF2(param_00) +{ + var_01 = func_0BF3(param_00,self.team); + var_02 = maps\_utility::getclosest(self.origin,var_01); + return var_02; +} + +//Function Number: 80 +func_0BF3(param_00,param_01) +{ + var_02 = []; + var_03 = getaiarray(param_01); + for(var_04 = 0;var_04 < var_03.size;var_04++) + { + if(var_03[var_04] == self) + { + continue; + } + + if(!var_03[var_04] func_0AD6(param_00)) + { + continue; + } + + var_02[var_02.size] = var_03[var_04]; + } + + return var_02; +} + +//Function Number: 81 +func_0B2C(param_00,param_01,param_02) +{ + var_03 = undefined; + if(!isdefined(param_02)) + { + param_02 = "response"; + } + + var_04 = maps\_utility::array_randomize(self.var_A7A.members); + param_00 = param_00 * param_00; + param_01 = param_01 * param_01; + for(var_05 = 0;var_05 < var_04.size;var_05++) + { + if(var_04[var_05] == self) + { + continue; + } + + if(!isalive(var_04[var_05])) + { + continue; + } + + var_06 = distancesquared(self.origin,var_04[var_05].origin); + if(var_06 < param_00) + { + continue; + } + + if(var_06 > param_01) + { + continue; + } + + if(func_0ADD(var_04[var_05])) + { + continue; + } + + if(!var_04[var_05] func_0AD6(param_02)) + { + continue; + } + + var_03 = var_04[var_05]; + if(func_0C08(var_03)) + { + break; + } + } + + return var_03; +} + +//Function Number: 82 +func_0AED() +{ + var_00 = func_0BF4(); + var_00 = maps\_utility::array_randomize(var_00); + if(var_00.size) + { + foreach(var_02 in var_00) + { + if(!func_0BF6(var_02)) + { + return var_02; + } + } + + foreach(var_02 in var_00) + { + if(!func_0AEE(var_02)) + { + return var_02; + } + } + } + + return undefined; +} + +//Function Number: 83 +func_0BF4() +{ + var_00 = level.bcs_locations; + var_01 = []; + foreach(var_03 in var_00) + { + if(self istouching(var_03) && isdefined(var_03.locationaliases)) + { + var_01[var_01.size] = var_03; + } + } + + return var_01; +} + +//Function Number: 84 +func_0BF5() +{ + if(isdefined(level.bcs_locations)) + { + anim.bcs_locations = common_scripts\utility::array_removeundefined(level.bcs_locations); + } +} + +//Function Number: 85 +func_0B22() +{ + var_00 = func_0BF4(); + foreach(var_02 in var_00) + { + if(!func_0AEE(var_02)) + { + return 1; + } + } + + return 0; +} + +//Function Number: 86 +func_0BF6(param_00) +{ + var_01 = func_0BF8(param_00); + if(!isdefined(var_01)) + { + return 0; + } + + return 1; +} + +//Function Number: 87 +func_0AEE(param_00) +{ + var_01 = func_0BF8(param_00); + if(!isdefined(var_01)) + { + return 0; + } + + var_02 = var_01 + level.var_B6F["threat"]["location_repeat"]; + if(gettime() < var_02) + { + return 1; + } + + return 0; +} + +//Function Number: 88 +func_0BF7(param_00) +{ + level.var_B7C[param_00.classname] = gettime(); +} + +//Function Number: 89 +func_0BF8(param_00) +{ + if(isdefined(level.var_B7C[param_00.classname])) + { + return level.var_B7C[param_00.classname]; + } + + return undefined; +} + +//Function Number: 90 +func_0BF9(param_00) +{ + var_01 = param_00.angles; + if(!isplayer(param_00)) + { + var_02 = param_00 func_0BED(); + if(isdefined(var_02)) + { + var_01 = var_02.angles; + } + } + + return var_01; +} + +//Function Number: 91 +func_0BFA(param_00) +{ + if(param_00 == "left" || param_00 == "right") + { + return 1; + } + + return 0; +} + +//Function Number: 92 +func_0BFB(param_00,param_01,param_02) +{ + var_03 = vectortoangles(param_02); + var_04 = vectortoangles(param_01 - param_00); + var_05 = var_03[1] - var_04[1]; + var_05 = var_05 + 360; + var_05 = int(var_05) % 360; + if(var_05 > 315 || var_05 < 45) + { + var_06 = "front"; + } + else if(var_06 < 135) + { + var_06 = "right"; + } + else if(var_06 < 225) + { + var_06 = "rear"; + } + else + { + var_06 = "left"; + } + + return var_06; +} + +//Function Number: 93 +func_0BFC(param_00) +{ + var_01 = undefined; + switch(param_00) + { + case "north": + var_01 = "n"; + break; + + case "northwest": + var_01 = "nw"; + break; + + case "west": + var_01 = "w"; + break; + + case "southwest": + var_01 = "sw"; + break; + + case "south": + var_01 = "s"; + break; + + case "southeast": + var_01 = "se"; + break; + + case "east": + var_01 = "e"; + break; + + case "northeast": + var_01 = "ne"; + break; + + case "impossible": + var_01 = "impossible"; + break; + + default: + break; + } + + return var_01; +} + +//Function Number: 94 +func_0BFD(param_00,param_01) +{ + var_02 = vectortoangles(param_01 - param_00); + var_03 = var_02[1]; + var_04 = getnorthyaw(); + var_03 = var_03 - var_04; + if(var_03 < 0) + { + var_03 = var_03 + 360; + } + else if(var_03 > 360) + { + var_03 = var_03 - 360; + } + + if(var_03 < 22.5 || var_03 > 337.5) + { + var_05 = "north"; + } + else if(var_04 < 67.5) + { + var_05 = "northwest"; + } + else if(var_04 < 112.5) + { + var_05 = "west"; + } + else if(var_04 < 157.5) + { + var_05 = "southwest"; + } + else if(var_04 < 202.5) + { + var_05 = "south"; + } + else if(var_04 < 247.5) + { + var_05 = "southeast"; + } + else if(var_04 < 292.5) + { + var_05 = "east"; + } + else if(var_04 < 337.5) + { + var_05 = "northeast"; + } + else + { + var_05 = "impossible"; + } + + return var_05; +} + +//Function Number: 95 +func_0BFE(param_00,param_01) +{ + var_02 = distance2d(param_00,param_01); + var_03 = 0.0254 * var_02; + return var_03; +} + +//Function Number: 96 +func_0BFF(param_00,param_01) +{ + var_02 = func_0BFE(param_00,param_01); + if(var_02 < 15) + { + return "10"; + } + + if(var_02 < 25) + { + return "20"; + } + + if(var_02 < 35) + { + return "30"; + } + + return "40"; +} + +//Function Number: 97 +func_0C00(param_00) +{ + var_01 = "undefined"; + if(param_00 == "10" || param_00 == "11") + { + var_01 = "10"; + } + else if(param_00 == "12") + { + var_01 = param_00; + } + else if(param_00 == "1" || param_00 == "2") + { + var_01 = "2"; + } + + return var_01; +} + +//Function Number: 98 +func_0C01(param_00,param_01,param_02) +{ + var_03 = anglestoforward(param_00); + var_04 = vectornormalize(var_03); + var_05 = vectortoangles(var_04); + var_06 = vectortoangles(param_02 - param_01); + var_07 = var_05[1] - var_06[1]; + var_07 = var_07 + 360; + var_07 = int(var_07) % 360; + if(var_07 > 345 || var_07 < 15) + { + var_08 = "12"; + } + else if(var_08 < 45) + { + var_08 = "1"; + } + else if(var_08 < 75) + { + var_08 = "2"; + } + else if(var_08 < 105) + { + var_08 = "3"; + } + else if(var_08 < 135) + { + var_08 = "4"; + } + else if(var_08 < 165) + { + var_08 = "5"; + } + else if(var_08 < 195) + { + var_08 = "6"; + } + else if(var_08 < 225) + { + var_08 = "7"; + } + else if(var_08 < 255) + { + var_08 = "8"; + } + else if(var_08 < 285) + { + var_08 = "9"; + } + else if(var_08 < 315) + { + var_08 = "10"; + } + else + { + var_08 = "11"; + } + + return var_08; +} + +//Function Number: 99 +func_0C02(param_00,param_01) +{ + var_02 = param_01[2] - param_00[2]; + var_03 = distance2d(param_00,param_01); + var_04 = atan(var_02 / var_03); + if(var_04 < 15 || var_04 > 55) + { + return var_04; + } + + if(var_04 < 25) + { + return 20; + } + + if(var_04 < 35) + { + return 30; + } + + if(var_04 < 45) + { + return 40; + } + + if(var_04 < 55) + { + return 50; + } +} + +//Function Number: 100 +getvectorrightangle(param_00) +{ + return (param_00[1],0 - param_00[0],param_00[2]); +} + +//Function Number: 101 +func_0C04(param_00) +{ + var_01 = (0,0,0); + for(var_02 = 0;var_02 < param_00.size;var_02++) + { + var_01 = var_01 + param_00[var_02]; + } + + return (var_01[0] / param_00.size,var_01[1] / param_00.size,var_01[2] / param_00.size); +} + +//Function Number: 102 +func_0B4D(param_00) +{ + self.var_BB0[self.var_BB0.size] = self.owner.var_AB4 + "_" + self.owner.var_AB6 + "_name_" + param_00; + level.var_B84[self.owner.team] = param_00; + level.var_B85[self.owner.team] = gettime(); +} + +//Function Number: 103 +func_0C05() +{ + if(!self.owner func_0C0A()) + { + return; + } + + anim.var_C06 = gettime(); + var_00 = self.owner.var_AB4 + "_" + self.owner.var_AB6 + "_name_player_" + level.player.var_BA1 + "_" + level.player.var_BA0; + self.var_BB0[self.var_BB0.size] = var_00; + self.looktarget = level.player; +} + +//Function Number: 104 +func_0C07(param_00) +{ + self.var_BB0[self.var_BB0.size] = self.owner.var_AB4 + "_" + self.owner.var_AB6 + "_rank_" + param_00; +} + +//Function Number: 105 +func_0C08(param_00) +{ + if(func_0BEF()) + { + return 0; + } + + if(!isdefined(param_00.var_AC2)) + { + return 0; + } + + if(param_00.battlechatter == 0) + { + return 0; + } + + if(!isdefined(param_00.var_AB4)) + { + return 0; + } + + if(self.var_AB4 != param_00.var_AB4) + { + return 0; + } + + if(func_0C09(param_00)) + { + return 0; + } + + var_01 = self.var_AB4 + "_" + self.var_AB6 + "_name_" + param_00.var_AC2; + if(soundexists(var_01)) + { + return 1; + } + + return 0; +} + +//Function Number: 106 +func_0C09(param_00) +{ + if(level.var_B84[self.team] == param_00.var_AC2 || gettime() - level.var_B85[self.team] < level.var_B86) + { + return 1; + } + + return 0; +} + +//Function Number: 107 +func_0C0A() +{ + if(func_0BEF()) + { + return 0; + } + + if(!isdefined(level.player.var_BA0) || !isdefined(level.player.var_BA1)) + { + return 0; + } + + if(func_0C0B()) + { + return 0; + } + + var_00 = self.var_AB4 + "_" + self.var_AB6 + "_name_player_" + level.player.var_BA1 + "_" + level.player.var_BA0; + if(soundexists(var_00)) + { + return 1; + } + + return 0; +} + +//Function Number: 108 +func_0C0B() +{ + if(!isdefined(level.var_C06)) + { + return 0; + } + + if(gettime() - level.var_C06 >= level.eventtypeminwait["playername"]) + { + return 0; + } + + return 1; +} + +//Function Number: 109 +func_0ADD(param_00) +{ + if(isstring(self.var_AB6) && isstring(param_00.var_AB6) && self.var_AB6 == param_00.var_AB6) + { + return 1; + } + + if(!isstring(self.var_AB6) && !isstring(param_00.var_AB6) && self.var_AB6 == param_00.var_AB6) + { + return 1; + } + + return 0; +} + +//Function Number: 110 +func_0C0C(param_00,param_01) +{ + var_02 = self.owner.var_AB4 + "_" + self.owner.var_AB6 + "_threat_" + param_00; + if(isdefined(param_01)) + { + var_02 = var_02 + "_" + param_01; + } + + self.var_BB0 = maps\_utility::array_add(self.var_BB0,var_02); + return 1; +} + +//Function Number: 111 +func_0C0D(param_00) +{ + var_01 = self.owner.var_AB4 + "_" + self.owner.var_AB6 + "_exposed_" + param_00; + self.var_BB0[self.var_BB0.size] = var_01; + return 1; +} + +//Function Number: 112 +func_0C0E() +{ + var_00 = self.owner.var_AB4 + "_" + self.owner.var_AB6 + "_order_action_suppress"; + self.var_BB0[self.var_BB0.size] = var_00; + return 1; +} + +//Function Number: 113 +func_0C0F(param_00) +{ + var_01 = self.owner.var_AB4 + "_" + self.owner.var_AB6 + "_co_dist_" + param_00; + self.var_BB0[self.var_BB0.size] = var_01; + return 1; +} + +//Function Number: 114 +func_0C10(param_00) +{ + var_01 = self.owner.var_AB4 + "_" + self.owner.var_AB6 + "_co_elev_" + param_00; + self.var_BB0[self.var_BB0.size] = var_01; + return 1; +} + +//Function Number: 115 +func_0C11(param_00,param_01) +{ + var_02 = func_0C14(param_00,param_01); + if(!soundexists(var_02)) + { + return 0; + } + + self.var_BB0[self.var_BB0.size] = var_02; + return 1; +} + +//Function Number: 116 +func_0C12(param_00) +{ + var_01 = self.owner.var_AB4 + "_" + self.owner.var_AB6 + "_resp_ack_co_gnrc_" + param_00; + if(!soundexists(var_01)) + { + return 0; + } + + self.var_BB0[self.var_BB0.size] = var_01; + return 1; +} + +//Function Number: 117 +func_0C13(param_00,param_01,param_02) +{ + var_03 = undefined; + foreach(var_05 in param_02.locationaliases) + { + if(issubstr(param_01,var_05)) + { + var_03 = var_05; + break; + } + } + + var_07 = self.owner.var_AB4 + "_" + self.owner.var_AB6 + "_co_"; + var_08 = getsubstr(param_01,param_01.size - 1,param_01.size); + var_09 = int(var_08) + 1; + var_0A = var_07 + var_03 + "_qa" + var_09; + if(!soundexists(var_0A)) + { + if(randomint(100) < level.var_B2D["response"]["callout_negative"]) + { + param_00 animscripts/battlechatter_ai::func_ADB("callout","neg",self.owner,0.9); + } + else + { + param_00 animscripts/battlechatter_ai::func_ADB("exposed","acquired",self.owner,0.9); + } + + param_02.var_BB9 = 1; + return 0; + } + + param_00 animscripts/battlechatter_ai::func_ADB("callout","QA",self.owner,0.9,var_0A,param_02); + self.var_BB0[self.var_BB0.size] = var_0A; + return 1; +} + +//Function Number: 118 +func_0C14(param_00,param_01) +{ + var_02 = "_report"; + var_03 = "_echo"; + var_04 = self.owner.var_AB4 + "_" + self.owner.var_AB6 + "_"; + var_05 = param_00.size - var_02.size; + var_06 = self.owner.var_AB4 + "_" + param_01.var_AB6 + "_"; + var_07 = var_06.size; + var_08 = getsubstr(param_00,var_07,var_05); + var_09 = var_04 + var_08 + var_03; + return var_09; +} + +//Function Number: 119 +func_0C15(param_00,param_01) +{ + var_02 = self.owner.var_AB4 + "_" + self.owner.var_AB6 + "_callout_" + param_00 + "_" + param_01; + self.var_BB0[self.var_BB0.size] = var_02; + return 1; +} + +//Function Number: 120 +func_0C16(param_00,param_01,param_02) +{ + var_03 = param_00.var_C17; + if(!isdefined(param_02)) + { + param_02 = 0; + } + + var_04 = self.owner.var_AB4 + "_" + self.owner.var_AB6 + "_callout_obj_" + var_03; + if(param_02) + { + var_04 = var_04 + "_y"; + } + + var_04 = var_04 + "_" + param_01; + if(!soundexists(var_04)) + { + return 0; + } + + self.var_BB0[self.var_BB0.size] = var_04; + return 1; +} + +//Function Number: 121 +func_0C18(param_00) +{ + var_01 = undefined; + var_02 = param_00.locationaliases; + var_03 = var_02[0]; + if(var_02.size > 1) + { + var_04 = undefined; + var_04 = param_00 func_0BB8(self.owner); + if(isdefined(var_04)) + { + var_03 = var_04; + } + else + { + var_03 = common_scripts\utility::random(var_02); + } + } + + var_05 = undefined; + if(!isdefined(param_00.var_BB9) && func_0BBB(var_03,self.owner)) + { + var_05 = self.owner func_0BBC(var_03,0); + } + else + { + var_06 = self.owner.var_AB4 + "_" + self.owner.var_AB6 + "_"; + if(!issubstr(var_03,"callout")) + { + var_06 = var_06 + "co_"; + } + + var_05 = var_06 + var_03; + } + + if(soundexists(var_05)) + { + var_01 = var_05; + } + + if(!isdefined(var_01)) + { + return 0; + } + + func_0BF7(param_00); + self.var_BB0[self.var_BB0.size] = var_01; + return 1; +} + +//Function Number: 122 +func_0B4B(param_00,param_01) +{ + var_02 = self.owner.var_AB4 + "_" + self.owner.var_AB6 + "_inform_" + param_00 + "_" + param_01; + self.var_BB0[self.var_BB0.size] = var_02; +} + +//Function Number: 123 +func_0C19(param_00,param_01) +{ + var_02 = self.owner.var_AB4 + "_" + self.owner.var_AB6 + "_response_" + param_00 + "_" + param_01; + self.var_BB0[self.var_BB0.size] = var_02; + return 1; +} + +//Function Number: 124 +func_0C1A(param_00,param_01) +{ + var_02 = self.owner.var_AB4 + "_" + self.owner.var_AB6 + "_reaction_" + param_00 + "_" + param_01; + self.var_BB0[self.var_BB0.size] = var_02; + return 1; +} + +//Function Number: 125 +func_0C1B() +{ + var_00 = self.owner.var_AB4 + "_" + self.owner.var_AB6 + "_check_fire"; + self.var_BB0[self.var_BB0.size] = var_00; + return 1; +} + +//Function Number: 126 +func_0C1C(param_00,param_01) +{ + var_02 = self.owner.var_AB4 + "_" + self.owner.var_AB6 + "_taunt"; + self.var_BB0[self.var_BB0.size] = var_02; + return 1; +} + +//Function Number: 127 +func_0C1D() +{ + var_00 = self.owner.var_AB4 + "_" + self.owner.var_AB6 + "_hostile_burst"; + self.var_BB0[self.var_BB0.size] = var_00; + return 1; +} + +//Function Number: 128 +func_0B47(param_00,param_01) +{ + var_02 = self.owner.var_AB4 + "_" + self.owner.var_AB6 + "_order_" + param_00 + "_" + param_01; + self.var_BB0[self.var_BB0.size] = var_02; + return 1; +} + +//Function Number: 129 +func_0C1E(param_00) +{ + if(!isdefined(self.var_A6E[param_00].var_AAE)) + { + self.var_A6E[param_00].var_AAE = 0; + } + + if(!isdefined(self.var_A6E[param_00].var_BE1)) + { + self.var_A6E[param_00].var_BE1 = 2000000000; + } + + if(!isdefined(self.var_A6E[param_00].var_BE0)) + { + self.var_A6E[param_00].var_BE0 = 0; + } +} + +//Function Number: 130 +func_0C1F(param_00) +{ + self.var_A6E[param_00].var_AAE = undefined; + self.var_A6E[param_00].var_BE1 = undefined; + self.var_A6E[param_00].var_BE0 = undefined; +} + +//Function Number: 131 +func_0AD8(param_00,param_01,param_02) +{ + var_03 = spawnstruct(); + var_03.owner = self; + var_03.var_BA7 = param_01; + var_03.var_BDA = param_00; + if(isdefined(param_02)) + { + var_03.priority = param_02; + } + else + { + var_03.priority = level.var_B70[param_00][param_01]; + } + + var_03.var_ACB = gettime() + level.var_B71[param_00][param_01]; + return var_03; +} + +//Function Number: 132 +func_0B45() +{ + var_00 = spawnstruct(); + var_00.owner = self; + var_00.var_BB0 = []; + var_00.var_BAB = 0; + return var_00; +} + +//Function Number: 133 +func_0C20(param_00) +{ + return maps\_utility::within_fov(self.origin,self.angles,param_00,0.766); +} + +//Function Number: 134 +func_0B1E(param_00) +{ + return maps\_utility::within_fov(self.origin,self.angles,param_00.origin,0); +} + +//Function Number: 135 +func_0C22() +{ + anim endon("battlechatter disabled"); + self endon("squad_deleting"); + if(self.team != "allies") + { + if(level.script != "af_caves") + { + return; + } + } + + while(self.var_A6A <= 0) + { + wait 0.5; + } + + var_00 = 0; + while(isdefined(self)) + { + if(!func_0C23(self)) + { + var_00 = 1; + wait 1; + continue; + } + else if(self.var_B99) + { + if(!var_00) + { + wait randomfloat(level.var_B73); + } + + if(var_00) + { + var_00 = 0; + } + + self.var_B99 = 0; + } + else + { + if(!var_00) + { + wait randomfloatrange(level.var_B73,level.var_B74); + } + + if(var_00) + { + var_00 = 0; + } + } + + var_01 = func_0C25(self); + if(!isdefined(var_01)) + { + continue; + } + + var_02 = var_01.voice; + var_03 = func_0C27(self,var_02); + var_04 = func_0C29(var_02,var_03); + foreach(var_08, var_06 in var_04) + { + if(!var_01 func_0C24() || distance(level.player.origin,var_01.origin) > level.var_B72) + { + for(var_07 = 0;var_07 < self.members.size;var_07++) + { + var_01 = func_0C25(self); + if(!isdefined(var_01)) + { + continue; + } + + if(var_01.voice == var_02) + { + break; + } + } + + if(!isdefined(var_01) || var_01.voice != var_02) + { + break; + } + } + + thread func_0C2A(var_01,var_06); + self waittill("burst_line_done"); + if(var_08 != var_04.size - 1) + { + wait randomfloatrange(level.var_B75,level.var_B76); + } + } + } +} + +//Function Number: 136 +func_0C23(param_00) +{ + var_01 = 0; + foreach(var_03 in param_00.members) + { + if(var_03 func_0C24()) + { + var_01 = 1; + break; + } + } + + return var_01; +} + +//Function Number: 137 +func_0C24() +{ + var_00 = 0; + if(!isplayer(self) && isalive(self) && self.classname != "actor_enemy_dog" && level.flavorbursts[self.team] && func_0AD2() && self.flavorbursts) + { + var_00 = 1; + } + + return var_00; +} + +//Function Number: 138 +func_0AD2() +{ + if(isdefined(level.var_B82[self.voice]) && level.var_B82[self.voice]) + { + return 1; + } + + return 0; +} + +//Function Number: 139 +func_0C25(param_00) +{ + var_01 = undefined; + var_02 = maps\_utility::get_array_of_farthest(level.player.origin,param_00.members); + foreach(var_04 in var_02) + { + if(var_04 func_0C24()) + { + var_01 = var_04; + if(!isdefined(param_00.var_B9A)) + { + break; + } + + if(isdefined(param_00.var_B9A) && param_00.var_B9A == var_01.unique_id) + { + continue; + } + } + } + + if(isdefined(var_01)) + { + param_00.var_B9A = var_01.unique_id; + } + + return var_01; +} + +//Function Number: 140 +func_0C27(param_00,param_01) +{ + var_02 = maps\_utility::array_randomize(level.flavorbursts[param_01]); + if(level.var_B92.size >= var_02.size) + { + anim.var_B92 = []; + } + + var_03 = undefined; + foreach(var_05 in var_02) + { + var_03 = var_05; + if(!func_0C28(var_03)) + { + break; + } + } + + level.var_B92[level.var_B92.size] = var_03; + return var_03; +} + +//Function Number: 141 +func_0C28(param_00) +{ + if(!level.var_B92.size) + { + return 0; + } + + var_01 = 0; + foreach(var_03 in level.var_B92) + { + if(var_03 == param_00) + { + var_01 = 1; + break; + } + } + + return var_01; +} + +//Function Number: 142 +func_0C29(param_00,param_01,param_02) +{ + if(!isdefined(param_02)) + { + param_02 = 1; + } + + var_03 = param_02; + var_04 = []; + for(;;) + { + var_05 = "FB_" + level.countryids[param_00] + "_" + param_01 + "_" + var_03; + var_03++; + if(soundexists(var_05)) + { + var_04[var_04.size] = var_05; + continue; + } + + break; + } + + return var_04; +} + +//Function Number: 143 +func_0C2A(param_00,param_01) +{ + anim endon("battlechatter disabled"); + var_02 = spawn("script_origin",param_00 gettagorigin("j_head")); + var_02 linkto(param_00); + var_02 playsound(param_01,param_01,1); + var_02 waittill(param_01); + var_02 delete(); + if(isdefined(self)) + { + self notify("burst_line_done"); + } +} + +//Function Number: 144 +func_0C2B(param_00,param_01) +{ + self endon("burst_line_done"); + wait 0.05; +} + +//Function Number: 145 +func_0C2C() +{ + return 0; +} + +//Function Number: 146 +func_0C2D() +{ + return 0; +} + +//Function Number: 147 +func_0C2E(param_00) +{ + if(param_00.size <= 0) + { + return; + } + + if(!func_0C2C()) + { + return; + } + + var_01 = "^5 "; + if(func_0BEF()) + { + var_01 = "^6 "; + } + + foreach(var_03 in param_00) + { + } +} + +//Function Number: 148 +func_0C2F(param_00,param_01) +{ +} + +//Function Number: 149 +func_0C30(param_00) +{ + var_01 = self.var_AB4 + "_" + self.var_AB6 + "_"; + var_02 = getsubstr(param_00,var_01.size,param_00.size); + return var_02; +} + +//Function Number: 150 +func_0C31(param_00,param_01,param_02) +{ + if(common_scripts\utility::flag(param_02)) + { + common_scripts\utility::flag_wait(param_02); + } + + common_scripts\utility::flag_set(param_02); + common_scripts\utility::flag_clear(param_02); +} + +//Function Number: 151 +func_0C32() +{ + for(var_00 = 0;var_00 < level.bcs_locations.size;var_00++) + { + var_01 = level.bcs_locations[var_00].locationaliases; + if(!isdefined(var_01)) + { + continue; + } + + var_02 = ""; + foreach(var_04 in var_01) + { + var_02 = var_02 + var_04; + } + + thread func_0C33("Location: " + var_02,level.bcs_locations[var_00] getorigin(),(0,0,8),(1,1,1)); + } +} + +//Function Number: 152 +func_0C33(param_00,param_01,param_02,param_03) +{ + for(;;) + { + if(distance(level.player.origin,param_01) > 2048) + { + wait 0.1; + continue; + } + + wait 0.05; + } +} + +//Function Number: 153 +func_0C34(param_00,param_01,param_02) +{ + var_03 = param_00 getorigin(); + for(;;) + { + if(distance(level.player.origin,var_03) > 2048) + { + wait 0.1; + continue; + } + + var_04 = func_0BFD(level.player.origin,var_03); + var_04 = func_0BFC(var_04); + var_05 = func_0C01(level.player.angles,level.player.origin,var_03); + var_06 = var_04 + ", " + var_05 + ":00"; + wait 0.05; + } +} + +//Function Number: 154 +func_0C35(param_00,param_01) +{ + var_02 = getaiarray(param_00); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + var_04 = var_02[var_03]; + if(!isalive(var_04)) + { + continue; + } + + if(!isdefined(var_04.battlechatter)) + { + continue; + } + + var_04.var_AC8[param_01] = gettime() + 350; + var_04.var_A7A.var_AC8[param_01] = gettime() + 350; + } +} + +//Function Number: 155 +func_0C36() +{ + self endon("death"); + if(self.voice == "british") + { + return 1; + } + + return 0; +} + +//Function Number: 156 +func_0C37() +{ + if(!func_0C38()) + { + return 0; + } + + func_0BE9("reaction","friendlyfire"); + thread func_0BC5(); + return 1; +} + +//Function Number: 157 +func_0C38(param_00) +{ + if(isdefined(self.friendlyfire_warnings_disable)) + { + return 0; + } + + if(!isdefined(self.var_AC6)) + { + return 0; + } + + if(!isdefined(self.var_AC6["reaction"]) || !isdefined(self.var_AC6["reaction"].var_BA7)) + { + return 0; + } + + if(self.var_AC6["reaction"].var_BA7 != "friendlyfire") + { + return 0; + } + + if(gettime() > self.var_AC6["reaction"].var_ACB) + { + return 0; + } + + if(!isdefined(param_00)) + { + param_00 = 1; + } + + if(param_00) + { + if(isdefined(self.var_A7A.var_B96["reaction"]["friendlyfire"])) + { + if(gettime() < self.var_A7A.var_B96["reaction"]["friendlyfire"]) + { + return 0; + } + } + } + + return 1; +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/battlechatter_ai.gsc b/MW3/PC/SP/animscripts/battlechatter_ai.gsc new file mode 100644 index 0000000..88c1675 --- /dev/null +++ b/MW3/PC/SP/animscripts/battlechatter_ai.gsc @@ -0,0 +1,1358 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\battlechatter_ai.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 55 + * Decompile Time: 963 ms + * Timestamp: 10/27/2023 2:17:52 AM +*******************************************************************/ + +//Function Number: 1 +func_0AA9(param_00) +{ + self endon("death"); + if(!animscripts/battlechatter::func_AAA()) + { + return; + } + + if(self.chatinitialized) + { + return; + } + + if(!isdefined(self.var_A7A.chatinitialized) || !self.var_A7A.chatinitialized) + { + self.var_A7A animscripts/battlechatter::func_AAC(); + } + + self.var_AAD = "infantry"; + self.var_AAE = []; + if(isplayer(self)) + { + self.battlechatter = 0; + self.flavorbursts = 0; + self.type = "human"; + return; + } + + if(self.type == "dog") + { + self.var_AAD = undefined; + self.battlechatter = 0; + self.flavorbursts = 0; + return; + } + + if(self.team == "neutral") + { + self.var_AAD = undefined; + self.battlechatter = 0; + self.flavorbursts = 0; + return; + } + + if(func_0AB7()) + { + if(self.team == "allies") + { + self.var_AB1 = 0; + } + else + { + self.voice = "american"; + } + } + + self.var_AB4 = level.countryids[self.voice]; + if(isdefined(self.script_friendname)) + { + var_01 = tolower(self.script_friendname); + if(issubstr(var_01,"price")) + { + self.var_AB6 = "pri"; + } + else if(issubstr(var_01,"mactavish") || issubstr(var_01,"soap")) + { + self.var_AB6 = "mct"; + } + else if(issubstr(var_01,"wallcroft")) + { + self.var_AB6 = "wcf"; + } + else if(issubstr(var_01,"griffin")) + { + self.var_AB6 = "grf"; + } + else if(issubstr(var_01,"grinch")) + { + self.var_AB6 = "grn"; + } + else if(issubstr(var_01,"truck")) + { + self.var_AB6 = "trk"; + } + else if(issubstr(var_01,"sandman")) + { + self.var_AB6 = "snd"; + } + else if(issubstr(var_01,"yuri")) + { + self.var_AB6 = "yri"; + } + else + { + func_0ABA(); + } + } + else + { + func_0ABA(); + } + + thread func_0AC0(); + func_0ACA(); + thread func_0AB8(); +} + +//Function Number: 2 +func_0AB7() +{ + if(!getdvarint("bcs_forceEnglish",0)) + { + return 0; + } + + switch(level.script) + { + case "pmc_strike": + return 1; + } + + return 0; +} + +//Function Number: 3 +func_0AB8() +{ + self endon("death"); + self endon("removed from battleChatter"); + var_00 = 0.5; + wait var_00; + thread func_0B27(); + thread func_0B30(); + if(self.team == "allies") + { + wait var_00; + thread func_0B28(); + if(self.var_AB4 == "CZ") + { + thread func_0ABD(); + } + } + else if((self.team == "axis" || self.team == "team3") && !func_0AB9(self.var_AB4)) + { + thread func_0ABD(); + } + + if(self.team == level.player.team) + { + thread func_0B31(); + } + + wait var_00; + thread func_0ABE(); +} + +//Function Number: 4 +func_0AB9(param_00) +{ + if(param_00 == "UK" || param_00 == "US" || param_00 == "NS" || param_00 == "TF" || param_00 == "SS") + { + return 1; + } + + return 0; +} + +//Function Number: 5 +func_0ABA() +{ + var_00 = level.var_ABB[self.voice]; + var_01 = var_00.size; + var_02 = randomintrange(0,var_01); + var_03 = var_02; + for(var_04 = 0;var_04 <= var_01;var_04++) + { + if(var_00[var_02 + var_04 % var_01].count < var_00[var_03].count) + { + var_03 = var_02 + var_04 % var_01; + } + } + + thread func_0ABC(var_03); + self.var_AB6 = var_00[var_03].var_AB6; +} + +//Function Number: 6 +func_0ABC(param_00) +{ + level.var_ABB[self.voice][param_00].count++; + common_scripts\utility::waittill_either("death","removed from battleChatter"); + if(!animscripts/battlechatter::func_AAA()) + { + return; + } + + level.var_ABB[self.voice][param_00].count--; +} + +//Function Number: 7 +func_0ABD() +{ + self endon("death"); + self endon("removed from battleChatter"); + for(;;) + { + if(distance(self.origin,level.player.origin) < 1024) + { + if(isdefined(self.var_A7A.var_A6A) && self.var_A7A.var_A6A > 1) + { + func_0AE4("taunt","hostileburst"); + } + } + + wait randomfloatrange(2,5); + } +} + +//Function Number: 8 +func_0ABE() +{ + self endon("death"); + self endon("removed from battleChatter"); + for(;;) + { + animscripts/battlechatter::func_ABF(); + wait 0.3 + randomfloat(0.2); + } +} + +//Function Number: 9 +func_0AC0() +{ + self endon("death"); + self endon("removed from battleChatter"); + for(;;) + { + self.var_AC2 = animscripts/battlechatter::func_AC1(); + self.var_AC4 = animscripts/battlechatter::getrank(); + self waittill("set name and rank"); + } +} + +//Function Number: 10 +func_0AC5(param_00) +{ + if(!isalive(self) && animscripts/battlechatter::func_AAA()) + { + func_0B21(); + func_0B24(); + } + + if(isdefined(self)) + { + self.battlechatter = 0; + self.chatinitialized = 0; + } + + self notify("removed from battleChatter"); + if(isdefined(self)) + { + self.var_AC6 = undefined; + self.var_AC7 = undefined; + self.var_AC8 = undefined; + self.isspeaking = undefined; + self.var_AAD = undefined; + self.var_AAE = undefined; + self.var_AB4 = undefined; + self.var_AB6 = undefined; + } +} + +//Function Number: 11 +func_0ACA() +{ + self.var_AC6 = []; + self.var_AC6["threat"] = spawnstruct(); + self.var_AC6["threat"].var_ACB = 0; + self.var_AC6["threat"].priority = 0; + self.var_AC6["response"] = spawnstruct(); + self.var_AC6["response"].var_ACB = 0; + self.var_AC6["response"].priority = 0; + self.var_AC6["reaction"] = spawnstruct(); + self.var_AC6["reaction"].var_ACB = 0; + self.var_AC6["reaction"].priority = 0; + self.var_AC6["inform"] = spawnstruct(); + self.var_AC6["inform"].var_ACB = 0; + self.var_AC6["inform"].priority = 0; + self.var_AC6["order"] = spawnstruct(); + self.var_AC6["order"].var_ACB = 0; + self.var_AC6["order"].priority = 0; + self.var_AC6["custom"] = spawnstruct(); + self.var_AC6["custom"].var_ACB = 0; + self.var_AC6["custom"].priority = 0; + self.var_AC7 = gettime() + 50; + self.var_AC8["threat"] = 0; + self.var_AC8["reaction"] = 0; + self.var_AC8["response"] = 0; + self.var_AC8["inform"] = 0; + self.var_AC8["order"] = 0; + self.var_AC8["custom"] = 0; + self.isspeaking = 0; + self.var_ACD = 0; + self.var_ACE = []; + animscripts/battlechatter::func_ACF("rpg"); + animscripts/battlechatter::func_ACF("exposed"); + if(self.voice != "shadowcompany") + { + if(self.voice != "british" && self.voice != "pmc") + { + animscripts/battlechatter::func_ACF("ai_obvious"); + } + + animscripts/battlechatter::func_ACF("ai_contact_clock"); + animscripts/battlechatter::func_ACF("ai_target_clock"); + animscripts/battlechatter::func_ACF("ai_cardinal"); + } + + if(self.voice == "delta") + { + animscripts/battlechatter::func_ACF("player_distance"); + animscripts/battlechatter::func_ACF("player_target_clock_high"); + animscripts/battlechatter::func_ACF("ai_distance"); + animscripts/battlechatter::func_ACF("ai_target_clock_high"); + } + + if(self.team == "allies") + { + if(maps\_utility::array_contains(level.var_AD0,self.voice)) + { + animscripts/battlechatter::func_ACF("player_contact_clock"); + animscripts/battlechatter::func_ACF("player_target_clock"); + animscripts/battlechatter::func_ACF("player_cardinal"); + if(self.voice != "british" && self.voice != "pmc") + { + animscripts/battlechatter::func_ACF("player_obvious"); + } + + animscripts/battlechatter::func_ACF("player_object_clock"); + if(self.voice != "french") + { + animscripts/battlechatter::func_ACF("player_location"); + } + } + + if(self.voice != "french") + { + animscripts/battlechatter::func_ACF("ai_location"); + animscripts/battlechatter::func_ACF("generic_location"); + } + } + + if(isdefined(self.var_AB1) && !self.var_AB1) + { + self.battlechatter = 0; + } + else + { + self.battlechatter = level.battlechatter[self.team]; + } + + if(animscripts/battlechatter::func_AD2()) + { + self.flavorbursts = 1; + } + else + { + self.flavorbursts = 0; + } + + if(level.friendlyfire_warnings) + { + maps\_utility::set_friendlyfire_warnings(1); + } + else + { + maps\_utility::set_friendlyfire_warnings(0); + } + + self.chatinitialized = 1; +} + +//Function Number: 12 +func_0AD5(param_00,param_01,param_02) +{ + self endon("death"); + self endon("removed from battleChatter"); + if(!animscripts/battlechatter::func_AD6("threat",param_00,param_02)) + { + return; + } + + if(animscripts/battlechatter::func_AD7(param_01) && !isplayer(param_01)) + { + return; + } + + var_03 = animscripts/battlechatter::func_AD8("threat",param_00,param_02); + switch(param_00) + { + case "infantry": + var_03.var_AD9 = param_01; + break; + } + + if(isdefined(param_01.var_A7A)) + { + self.var_A7A animscripts/battlechatter::func_ADA(param_01.var_A7A.var_A66,self); + } + + self.var_AC6["threat"] = undefined; + self.var_AC6["threat"] = var_03; +} + +//Function Number: 13 +func_0ADB(param_00,param_01,param_02,param_03,param_04,param_05) +{ + thread func_0ADC(param_00,param_01,param_02,param_03,param_04,param_05); +} + +//Function Number: 14 +func_0ADC(param_00,param_01,param_02,param_03,param_04,param_05) +{ + self endon("death"); + self endon("removed from battleChatter"); + self endon("responseEvent_failsafe"); + thread func_0AE1(param_02); + var_06 = param_02 common_scripts\utility::waittill_any_return("death","done speaking","cancel speaking"); + if(var_06 == "cancel speaking") + { + return; + } + + if(!isalive(param_02)) + { + return; + } + + if(!animscripts/battlechatter::func_AD6("response",param_00,param_03,param_01)) + { + return; + } + + if(!isplayer(param_02)) + { + if(animscripts/battlechatter::func_ADD(param_02)) + { + return; + } + } + + var_07 = animscripts/battlechatter::func_AD8("response",param_00,param_03); + if(isdefined(param_04)) + { + var_07.var_ADE = param_04; + } + + if(isdefined(param_05)) + { + var_07.location = param_05; + } + + var_07.var_ADF = param_02; + var_07.var_AE0 = param_01; + self.var_AC6["response"] = undefined; + self.var_AC6["response"] = var_07; +} + +//Function Number: 15 +func_0AE1(param_00) +{ + self endon("death"); + self endon("removed from battleChatter"); + param_00 endon("death"); + param_00 endon("done speaking"); + param_00 endon("cancel speaking"); + wait 25; + self notify("responseEvent_failsafe"); +} + +//Function Number: 16 +func_0AE2(param_00,param_01,param_02,param_03) +{ + self endon("death"); + self endon("removed from battleChatter"); + if(!animscripts/battlechatter::func_AD6("inform",param_00,param_03,param_01)) + { + return; + } + + var_04 = animscripts/battlechatter::func_AD8("inform",param_00,param_03); + switch(param_00) + { + case "reloading": + var_04.var_AE0 = param_01; + var_04.var_AE3 = param_02; + break; + + default: + var_04.var_AE0 = param_01; + break; + } + + self.var_AC6["inform"] = undefined; + self.var_AC6["inform"] = var_04; +} + +//Function Number: 17 +func_0AE4(param_00,param_01,param_02,param_03) +{ + self endon("death"); + self endon("removed from battleChatter"); + if(!isdefined(self.var_AC6)) + { + return; + } + + var_04 = animscripts/battlechatter::func_AD8("reaction",param_00,param_03); + var_04.var_AE5 = param_02; + var_04.var_AE0 = param_01; + self.var_AC6["reaction"] = undefined; + self.var_AC6["reaction"] = var_04; +} + +//Function Number: 18 +func_0AE6(param_00,param_01,param_02,param_03) +{ + self endon("death"); + self endon("removed from battleChatter"); + if(!animscripts/battlechatter::func_AD6("order",param_00,param_03,param_01)) + { + return; + } + + if(isdefined(param_02) && param_02.type == "dog") + { + return; + } + + var_04 = animscripts/battlechatter::func_AD8("order",param_00,param_03); + var_04.var_AE0 = param_01; + var_04.var_AE7 = param_02; + self.var_AC6["order"] = undefined; + self.var_AC6["order"] = var_04; +} + +//Function Number: 19 +func_0AE8() +{ + anim endon("battlechatter disabled"); + anim endon("squad deleted " + self.var_A66); + for(;;) + { + var_00 = undefined; + if(self.var_A6C.size) + { + var_01 = self.var_A6C; + } + else + { + var_01 = self.members; + } + + var_02 = []; + for(var_03 = 0;var_03 < var_01.size;var_03++) + { + if(isalive(var_01[var_03])) + { + var_02[var_02.size] = var_01[var_03]; + } + } + + if(var_02.size) + { + var_00 = maps\_utility::getclosest(level.player.origin,var_02); + var_00 func_0B26(); + var_00 waittill("death"); + } + + wait 3; + } +} + +//Function Number: 20 +func_0AEA(param_00) +{ + var_01 = []; + for(var_02 = 0;var_02 < param_00.size;var_02++) + { + if(!isdefined(param_00[var_02].var_AAD)) + { + continue; + } + + if(!func_0AEF(param_00[var_02])) + { + continue; + } + + param_00[var_02].var_AEB = var_01.size; + var_01[var_01.size] = param_00[var_02]; + } + + var_01 = maps\_utility::get_array_of_closest(level.player.origin,var_01); + var_03 = []; + var_04 = []; + foreach(var_06 in var_01) + { + var_07 = var_06 animscripts/battlechatter::func_AED(); + if(isdefined(var_07) && !animscripts/battlechatter::func_AEE(var_07)) + { + var_03[var_03.size] = var_06; + continue; + } + + var_04[var_04.size] = var_06; + } + + var_01 = common_scripts\utility::array_combine(var_03,var_04); + return var_01; +} + +//Function Number: 21 +func_0AEF(param_00) +{ + var_01 = level.var_B1D * level.var_B1D; + if(distancesquared(level.player.origin,param_00.origin) > var_01) + { + return 0; + } + + if(!level.player animscripts/battlechatter::func_B1E(param_00)) + { + return 0; + } + + return 1; +} + +//Function Number: 22 +func_0B1F() +{ + anim endon("battlechatter disabled"); + anim endon("squad deleted " + self.var_A66); + for(;;) + { + wait randomfloatrange(0.25,0.75); + if(self.team == "allies") + { + var_00 = func_0AEA(getaiarray("axis","team3")); + } + else if(self.team == "team3") + { + var_00 = func_0AEA(getaiarray("allies","axis")); + } + else + { + var_00 = getaiarray("allies","team3"); + var_00[var_00.size] = level.player; + } + + if(!var_00.size) + { + continue; + } + + var_01 = []; + foreach(var_03 in self.members) + { + if(!isalive(var_03)) + { + continue; + } + + if(!var_00.size) + { + var_00 = var_01; + var_01 = []; + } + + foreach(var_06, var_05 in var_00) + { + if(!isdefined(var_05)) + { + if(var_06 == 0) + { + var_00 = []; + } + + continue; + } + + if(!isalive(var_05)) + { + continue; + } + + if(!isdefined(var_05.var_AAD)) + { + continue; + } + + if(!var_03 cansee(var_05)) + { + if(isplayer(var_05)) + { + continue; + } + + if(var_05.team == level.player.team) + { + continue; + } + + if(!maps\_utility::player_can_see_ai(var_05,250)) + { + continue; + } + } + + var_03 func_0AD5(var_05.var_AAD,var_05); + var_01[var_01.size] = var_05; + var_00 = common_scripts\utility::array_remove(var_00,var_05); + break; + } + + wait 0.05; + } + } +} + +//Function Number: 23 +func_0B21() +{ + var_00 = self.attacker; + common_scripts\utility::array_thread(self.var_A7A.members,::func_0B23); + if(isalive(var_00) && issentient(var_00) && isdefined(var_00.var_A7A) && var_00.battlechatter) + { + if(isdefined(var_00.var_AAE[var_00.var_A7A.var_A66])) + { + var_00.var_AAE[var_00.var_A7A.var_A66] = undefined; + } + + if(!isdefined(var_00.var_AAD)) + { + return; + } + + if(!var_00 animscripts/battlechatter::func_B22()) + { + return; + } + + foreach(var_02 in self.var_A7A.members) + { + if(gettime() > var_02.var_A7F + 2000) + { + continue; + } + + var_02 func_0AD5(var_00.var_AAD,var_00); + } + } +} + +//Function Number: 24 +func_0B23() +{ + if(!isalive(self)) + { + return; + } + + self endon("death"); + self endon("removed from battleChatter"); + self notify("aiDeathEventThread"); + self endon("aiDeathEventThread"); + wait 1.5; + func_0AE4("casualty","generic",self,0.9); +} + +//Function Number: 25 +func_0B24() +{ + var_00 = self.attacker; + if(!isalive(var_00) || !issentient(var_00) || !isdefined(var_00.var_A7A)) + { + return; + } + + if(!isdefined(var_00.var_AB4) || var_00.var_AB4 != "NS") + { + return; + } + + if(!isplayer(var_00)) + { + var_00 thread func_0B25(); + } +} + +//Function Number: 26 +func_0B25() +{ + self endon("death"); + self endon("removed from battleChatter"); + wait 1.5; + func_0AE2("killfirm","generic"); +} + +//Function Number: 27 +func_0B26() +{ + self endon("death"); + self endon("removed from battleChatter"); + if(!isdefined(self.var_A7A.chatinitialized)) + { + self.var_A7A waittill("squad chat initialized"); + } + + for(;;) + { + if(getdvar("bcs_enable","on") == "off") + { + wait 1; + continue; + } + + func_0B3B(); + wait randomfloatrange(3,6); + } +} + +//Function Number: 28 +func_0B27() +{ + self endon("death"); + self endon("removed from battleChatter"); + for(;;) + { + self waittill("grenade danger",var_00); + if(getdvar("bcs_enable","on") == "off") + { + continue; + } + + if(!isdefined(var_00) || var_00.model != "projectile_m67fraggrenade") + { + continue; + } + + if(distance(var_00.origin,level.player.origin) < 512) + { + func_0AE2("incoming","grenade"); + } + } +} + +//Function Number: 29 +func_0B28() +{ + self endon("death"); + self endon("removed from battleChatter"); + for(;;) + { + self waittill("trigger"); + if(getdvar("bcs_enable","on") == "off") + { + continue; + } + + if(gettime() < self.a.var_B29 + 4000) + { + continue; + } + + func_0ADB("ack","yes",level.player,1); + } +} + +//Function Number: 30 +func_0B2A(param_00) +{ + self endon("death"); + self endon("removed from battleChatter"); + if(!animscripts/battlechatter::func_AAA()) + { + return; + } + + if(!isdefined(self.node)) + { + return; + } + + var_01 = distance(self.origin,self.node.origin); + if(var_01 < 512) + { + return; + } + + if(!animscripts/battlechatter::func_B2B()) + { + return; + } + + if(!func_0B2E()) + { + return; + } + + var_02 = animscripts/battlechatter::func_B2C(24,1024,"response"); + if(self.team != "axis" && self.team != "team3") + { + if(!isdefined(var_02)) + { + var_02 = level.player; + } + else if(randomint(100) < level.var_B2D["moveEvent"]["ordertoplayer"]) + { + var_02 = level.player; + } + } + + if(self.var_A80 > 0) + { + if(randomint(100) < level.var_B2D["moveEvent"]["coverme"]) + { + func_0AE6("action","coverme",var_02); + return; + } + + func_0AE6("move","combat",var_02); + return; + } + + if(func_0B2F()) + { + func_0AE6("move","noncombat",var_02); + } +} + +//Function Number: 31 +func_0B2E() +{ + if(self.var_AB4 == "SS") + { + return 0; + } + + return 1; +} + +//Function Number: 32 +func_0B2F() +{ + if(self.var_AB4 == "US") + { + return 1; + } + + return 0; +} + +//Function Number: 33 +func_0B30() +{ + self endon("death"); + self endon("removed from battleChatter"); + for(;;) + { + level waittill("follow order",var_00); + if(!animscripts/battlechatter::func_AAA()) + { + return; + } + + if(var_00.team != self.team) + { + continue; + } + + if(distance(self.origin,var_00.origin) < 600) + { + func_0ADB("ack","yes",var_00,0.9); + } + } +} + +//Function Number: 34 +func_0B31() +{ + self endon("death"); + self endon("removed from battleChatter"); + thread func_0B33(); + for(;;) + { + self waittill("bulletwhizby",var_00,var_01); + if(!animscripts/battlechatter::func_AAA()) + { + continue; + } + + if(!isplayer(var_00)) + { + continue; + } + + if(func_0B35(var_00,var_01)) + { + func_0B32(); + wait 3; + } + } +} + +//Function Number: 35 +func_0B32() +{ + func_0AE4("friendlyfire",undefined,level.player,1); +} + +//Function Number: 36 +func_0B33() +{ + self endon("death"); + self endon("removed from battleChatter"); + for(;;) + { + self waittill("damage",var_00,var_01,var_02,var_03,var_04); + if(isdefined(var_01) && isplayer(var_01)) + { + if(func_0B34(var_04)) + { + func_0B32(); + } + } + } +} + +//Function Number: 37 +func_0B34(param_00) +{ + if(!isdefined(param_00)) + { + return 0; + } + + switch(param_00) + { + case "MOD_IMPACT": + case "MOD_CRUSH": + case "MOD_MELEE": + case "MOD_GRENADE_SPLASH": + case "MOD_GRENADE": + return 0; + } + + return 1; +} + +//Function Number: 38 +func_0B35(param_00,param_01) +{ + var_02 = 65536; + var_03 = 42; + if(distancesquared(param_00.origin,self.origin) < var_02) + { + return 0; + } + + if(param_01 > var_03) + { + return 0; + } + + return 1; +} + +//Function Number: 39 +func_0B36() +{ + self endon("death"); + self endon("removed from battleChatter"); + if(!animscripts/battlechatter::func_AAA()) + { + return; + } + + func_0AE2("reloading","generic"); +} + +//Function Number: 40 +func_0B37() +{ + self endon("death"); + self endon("removed from battleChatter"); + if(!animscripts/battlechatter::func_AAA()) + { + return 0; + } + + if(!isdefined(self.enemy)) + { + return 0; + } + + return 0; +} + +//Function Number: 41 +func_0B38() +{ + self endon("death"); + self endon("removed from battleChatter"); + if(!animscripts/battlechatter::func_AAA()) + { + return; + } + + if(!isdefined(self.enemy)) + { + } +} + +//Function Number: 42 +func_0B39() +{ + self endon("death"); + self endon("removed from battleChatter"); + if(!animscripts/battlechatter::func_AAA()) + { + return; + } + + if(!self.var_A9D) + { + return; + } + + func_0AE2("suppressed","generic"); +} + +//Function Number: 43 +func_0B3A(param_00) +{ + self endon("death"); + self endon("removed from battleChatter"); + if(!animscripts/battlechatter::func_AAA()) + { + return; + } + + func_0AE2("attack","grenade"); +} + +//Function Number: 44 +func_0B3B() +{ + self endon("death"); + self endon("removed from battleChatter"); + if(self.var_A7A.var_AA0["combat"].var_AA2) + { + func_0B3C(); + } +} + +//Function Number: 45 +func_0B3C() +{ + self endon("death"); + self endon("removed from battleChatter"); + var_00 = self.var_A7A; + var_00 animscripts/squadmanager::func_A99(); + if(var_00.var_AA0["suppressed"].var_AA2) + { + if(var_00.var_AA0["cover"].var_AA2) + { + var_01 = animscripts/battlechatter::func_B2C(96,512,"response"); + func_0AE6("action","grenade",var_01); + } + else + { + func_0AE6("displace","generic"); + } + } + else if(var_00.var_AA0["combat"].var_AA2) + { + if(self.var_AB4 != "SS") + { + var_01 = animscripts/battlechatter::func_B2C(24,1024,"response"); + func_0AE6("action","suppress",var_01); + } + } +} + +//Function Number: 46 +func_0B3D() +{ + var_00 = []; + level.var_B3E = var_7B; +} + +//Function Number: 47 +func_0B3F(param_00) +{ + var_01 = 0; + foreach(var_03 in level.var_B3E) + { + if(var_03 == param_00) + { + var_01 = 1; + break; + } + } + + return var_01; +} + +//Function Number: 48 +func_0B40(param_00) +{ + if(!isdefined(level.var_B3E)) + { + func_0B3D(); + } + + param_00 = tolower(param_00); + var_01 = level.bcprintfailprefix + "custom battlechatter phrase \'" + param_00 + "\' isn\'t valid. look at _utility::custom_battlechatter_init_valid_phrases(), or the util script documentation for custom_battlechatter(), for a list of valid phrases."; + var_02 = level.bcprintfailprefix + "AI at origin " + self.origin + "wasn\'t able to play custom battlechatter because his nationality is \'" + self.var_AB4 + "\'."; + if(!func_0B3F(param_00)) + { + return 0; + } + + var_03 = animscripts/battlechatter::func_B2C(24,512,"response"); + func_0B44(); + switch(param_00) + { + case "order_move_combat": + if(!func_0B2E()) + { + return 0; + } + + animscripts/battlechatter::func_B43(self.var_B42,var_03); + func_0B48(); + break; + + case "order_move_noncombat": + if(!func_0B2F()) + { + return 0; + } + + func_0B49(); + break; + + case "order_action_coverme": + animscripts/battlechatter::func_B43(self.var_B42,var_03); + func_0B46(); + break; + + case "inform_reloading": + func_0B4A(); + break; + + default: + return 0; + } + + func_0B4E(2000); + return 1; +} + +//Function Number: 49 +func_0B44() +{ + if(!animscripts/battlechatter::func_AAA()) + { + return; + } + + self.var_B42 = animscripts/battlechatter::func_B45(); +} + +//Function Number: 50 +func_0B46() +{ + self.var_B42 animscripts/battlechatter::func_B47("action","coverme"); +} + +//Function Number: 51 +func_0B48() +{ + self.var_B42 animscripts/battlechatter::func_B47("move","combat"); +} + +//Function Number: 52 +func_0B49() +{ + self.var_B42 animscripts/battlechatter::func_B47("move","noncombat"); +} + +//Function Number: 53 +func_0B4A() +{ + self.var_B42 animscripts/battlechatter::func_B4B("reloading","generic"); +} + +//Function Number: 54 +func_0B4C(param_00) +{ + if(!animscripts/battlechatter::func_AAA()) + { + return; + } + + self.var_B42 animscripts/battlechatter::func_B4D(param_00); +} + +//Function Number: 55 +func_0B4E(param_00,param_01) +{ + if(!animscripts/battlechatter::func_AAA()) + { + return; + } + + var_02 = animscripts/battlechatter::func_AD8("custom","generic",1); + if(isdefined(param_00)) + { + var_02.var_ACB = gettime() + param_00; + } + + if(isdefined(param_01)) + { + var_02.type = param_01; + } + else + { + var_02.type = "custom"; + } + + self.var_AC6["custom"] = undefined; + self.var_AC6["custom"] = var_02; +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/civilian.gsc b/MW3/PC/SP/animscripts/civilian.gsc new file mode 100644 index 0000000..af2f7f1 --- /dev/null +++ b/MW3/PC/SP/animscripts/civilian.gsc @@ -0,0 +1,69 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\civilian.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 4 + * Decompile Time: 77 ms + * Timestamp: 10/27/2023 2:17:52 AM +*******************************************************************/ + +//Function Number: 1 +func_400A() +{ + self endon("killanimscript"); + self clearanim(%root,0.2); + if(animscripts/utility::func_A69()) + { + var_00 = "idle_combat"; + } + else + { + var_00 = "idle_noncombat"; + } + + var_01 = undefined; + if(isdefined(self.animname) && isdefined(level.scr_anim[self.animname])) + { + var_01 = level.scr_anim[self.animname][var_00]; + } + + if(!isdefined(var_01)) + { + if(!isdefined(level.scr_anim["default_civilian"])) + { + return; + } + + var_01 = level.scr_anim["default_civilian"][var_00]; + } + + thread func_400B(); + for(;;) + { + self setflaggedanimknoball("idle",common_scripts\utility::random(var_01),%root,1,0.2,1); + self waittillmatch("end","idle"); + } +} + +//Function Number: 2 +func_400B() +{ + self endon("killanimscript"); + while(!isdefined(self.var_400C)) + { + wait 1; + } +} + +//Function Number: 3 +func_400D() +{ + func_400A(); +} + +//Function Number: 4 +func_400E() +{ + return level.var_400F[randomint(level.var_400F.size)]; +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/combat.gsc b/MW3/PC/SP/animscripts/combat.gsc new file mode 100644 index 0000000..09e7fe5 --- /dev/null +++ b/MW3/PC/SP/animscripts/combat.gsc @@ -0,0 +1,1533 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\combat.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 62 + * Decompile Time: 1046 ms + * Timestamp: 10/27/2023 2:17:55 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(isdefined(self.var_10EF)) + { + return; + } + + if(isdefined(self.onsnowmobile)) + { + animscripts/snowmobile::main(); + return; + } + + if(isdefined(self.custom_animscript_table)) + { + if(isdefined(self.custom_animscript_table["combat"])) + { + [[ self.custom_animscript_table["combat"] ]](); + return; + } + } + + self endon("killanimscript"); + [[ self.var_8BE["exposed"] ]](); + animscripts/utility::func_D15("combat"); + self.a.var_10DF = undefined; + if(isdefined(self.node) && self.node.type == "Ambush" && self nearnode(self.node)) + { + self.var_CF1 = self.node; + } + + func_1107(); + func_1105(); + animscripts/stop::func_10F5(); + func_1109(); + func_111D(); + self notify("stop_deciding_how_to_shoot"); +} + +//Function Number: 2 +func_067F() +{ + self.var_CF1 = undefined; +} + +//Function Number: 3 +func_1105() +{ + if(self.team != "allies") + { + return; + } + + if(self ismovesuppressed() && self.var_788 == "move" && self.a.pose == "stand" && !isdefined(self.var_1106)) + { + if(isdefined(self.enemy) && distancesquared(self.origin,self.enemy.origin) < squared(128)) + { + return; + } + + self animmode("zonly_physics"); + self setflaggedanimknoballrestart("react",%surprise_stop_v1,%root,1,0.2,self.var_10F7); + animscripts/shared::donotetracks("react"); + } +} + +//Function Number: 4 +func_1107() +{ + if(isdefined(self.specialidleanim) || isdefined(self.var_C89)) + { + return; + } + + if(isdefined(self.enemy) && distancesquared(self.origin,self.enemy.origin) < 262144) + { + return; + } + + if(self.var_788 == "stop" && !animscripts/utility::func_C98() && self.a.pose == "stand") + { + self animmode("zonly_physics"); + self setflaggedanimknoballrestart("transition",%casual_stand_idle_trans_out,%root,1,0.2,1.2 * self.var_10F7); + animscripts/shared::donotetracks("transition"); + } +} + +//Function Number: 5 +func_1108() +{ + if(self.a.pose == "stand") + { + animscripts/animset::func_C94(); + return; + } + + if(self.a.pose == "crouch") + { + animscripts/animset::func_C99(); + return; + } + + if(self.a.pose == "prone") + { + animscripts/animset::func_C9C(); + return; + } +} + +//Function Number: 6 +func_1109() +{ + if(animscripts/utility::func_C95() && self isstanceallowed("stand")) + { + func_113F("stand"); + } + + func_1108(); + func_110E(); + thread func_110D(); + self.var_110A = 0; + self clearanim(%root,0.2); + animscripts/combat_utility::func_110B(0.2); + thread animscripts/combat_utility::aimidlethread(); + self.a.var_110C = "aim"; + func_1142(); +} + +//Function Number: 7 +func_110D() +{ + self endon("killanimscript"); + wait 0.2; + self.a.movement = "stop"; +} + +//Function Number: 8 +func_110E() +{ + self setdefaultaimlimits(); + if(self.a.pose == "stand") + { + self.var_714 = 60; + self.var_715 = -60; + } + + self.var_F72 = self.var_110F; +} + +//Function Number: 9 +func_1110() +{ + thread animscripts/track::func_CA9(); + thread func_115E(); + thread animscripts/shoot_behavior::func_CD7("normal"); + thread func_1128(); + func_1127(); + if(isdefined(self.a.var_1111)) + { + animscripts/weaponlist::func_CD0(); + self.a.var_1111 = undefined; + } + + self.a.var_1112 = gettime() + randomintrange(500,1500); +} + +//Function Number: 10 +func_1113(param_00) +{ + if(animscripts/utility::func_BB6() && param_00 < 262144 || self.a.rockets < 1) + { + if(self.a.pose != "stand" && self.a.pose != "crouch") + { + func_113F("crouch"); + } + + if(self.a.pose == "stand") + { + animscripts/shared::func_F87(%rpg_stand_throw); + } + else + { + animscripts/shared::func_F87(%rpg_crouch_throw); + } + + self clearanim(%root,0.2); + animscripts/combat_utility::func_F85(); + func_1108(); + animscripts/combat_utility::func_1114(); + return 1; + } + + return 0; +} + +//Function Number: 11 +func_1115(param_00) +{ + if(self.a.pose != "stand" && self isstanceallowed("stand")) + { + if(param_00 < 81225) + { + func_113F("stand"); + return 1; + } + + if(func_1120()) + { + return 1; + } + } + + if(param_00 > 262144 && self.a.pose != "crouch" && self isstanceallowed("crouch") && !animscripts/utility::func_C95() && !isdefined(self.heat) && gettime() >= self.a.var_1112 && lengthsquared(self.var_D81) < 10000) + { + if(!isdefined(self.var_CB1) || sighttracepassed(self.origin + (0,0,36),self.var_CB1,0,undefined)) + { + func_113F("crouch"); + return 1; + } + } + + return 0; +} + +//Function Number: 12 +func_1116(param_00) +{ + if(!animscripts/utility::func_C95()) + { + if(isdefined(self.var_1117) && self.a.pose == "stand") + { + if(func_1150()) + { + return 1; + } + } + + if(animscripts/combat_utility::issniper() && param_00 < 167772.2) + { + if(func_1150()) + { + return 1; + } + } + } + + if(animscripts/combat_utility::func_F08(0)) + { + if(!animscripts/utility::func_C95() && common_scripts\utility::cointoss() && !animscripts/utility::func_BB6() && animscripts/utility::func_1118() && param_00 < 167772.2 && self isstanceallowed("stand")) + { + if(self.a.pose != "stand") + { + func_113F("stand"); + return 1; + } + + if(func_1150()) + { + return 1; + } + } + + if(func_1144(0)) + { + return 1; + } + } + + return 0; +} + +//Function Number: 13 +func_1119(param_00) +{ + if(animscripts/utility::func_C95() && self.a.pose == "stand" && !isdefined(self.var_1117)) + { + if(param_00 > 262144 || self.combatmode == "ambush_nodes_only" && !isdefined(self.enemy) || !self cansee(self.enemy)) + { + func_1159(%pistol_stand_switch); + } + } +} + +//Function Number: 14 +func_111A() +{ + if(isdefined(self.heat) && self nearclaimnodeandangle()) + { + self safeteleport(self.var_757,self.node.angles); + } +} + +//Function Number: 15 +func_111B() +{ + if(func_1121()) + { + var_00 = 0.25; + if(isdefined(self.var_CAB) && !issentient(self.var_CAB)) + { + var_00 = 1.5; + } + + var_01 = animscripts/shared::func_111C(var_00); + if(func_0F73(var_01)) + { + return 1; + } + } + + return 0; +} + +//Function Number: 16 +func_111D() +{ + self endon("killanimscript"); + self endon("combat_restart"); + func_1110(); + self animmode("zonly_physics",0); + self orientmode("face angle",self.angles[1]); + for(;;) + { + if(animscripts/utility::func_BB6()) + { + self.deathfunction = undefined; + } + + animscripts/utility::func_A69(); + if(func_1122()) + { + continue; + } + + func_1141(); + func_111A(); + if(!isdefined(self.var_CB1)) + { + func_1123(); + if(!isdefined(self.enemy)) + { + var_00 = 1; + } + + continue; + } + + func_1127(); + var_01 = lengthsquared(self.origin - self.var_CB1); + if(func_1113(var_01)) + { + continue; + } + + if(func_111B()) + { + continue; + } + + if(func_10E7()) + { + continue; + } + + if(func_1116(var_01)) + { + continue; + } + + if(animscripts/utility::func_BB6() && self.a.pose != "crouch" && randomfloat(1) > 0.65) + { + self.deathfunction = ::func_115D; + } + + func_1119(var_01); + if(func_1115(var_01)) + { + continue; + } + + if(animscripts/combat_utility::func_10E4()) + { + func_1136(); + animscripts/combat_utility::func_111E(); + continue; + } + + func_111F(); + } +} + +//Function Number: 17 +func_111F() +{ + if(!isdefined(self.enemy) || !self cansee(self.enemy)) + { + self endon("enemy"); + self endon("shoot_behavior_change"); + wait 0.2 + randomfloat(0.1); + self waittill("do_slow_things"); + return; + } + + wait 0.05; +} + +//Function Number: 18 +func_1120() +{ + if(isdefined(self.enemy) && !self cansee(self.enemy) || !self canshootenemy() && sighttracepassed(self.origin + (0,0,64),self.enemy getshootatpos(),0,undefined)) + { + self.a.var_1112 = gettime() + 3000; + func_113F("stand"); + return 1; + } + + return 0; +} + +//Function Number: 19 +func_1121() +{ + var_00 = self.var_CB1; + if(!isdefined(var_00)) + { + return 0; + } + + var_01 = self.angles[1] - vectortoyaw(var_00 - self.origin); + var_02 = distancesquared(self.origin,var_00); + if(var_02 < 65536) + { + var_03 = sqrt(var_02); + if(var_03 > 3) + { + var_01 = var_01 + asin(-3 / var_03); + } + } + + return animscripts/utility::func_D61(var_01) > self.var_F72; +} + +//Function Number: 20 +func_1122() +{ + var_00 = self.a.pose; + if(isdefined(self.a.var_D29)) + { + wait 0.1; + return 1; + } + + if(var_00 == "stand" && isdefined(self.heat)) + { + return 0; + } + + if(!self isstanceallowed(var_00)) + { + var_01 = "crouch"; + if(var_00 == "crouch") + { + var_01 = "stand"; + } + + if(self isstanceallowed(var_01)) + { + if(var_00 == "stand" && animscripts/utility::func_C95()) + { + return 0; + } + + func_113F(var_01); + return 1; + } + } + + return 0; +} + +//Function Number: 21 +func_1123() +{ + if(self.a.pose != "stand" && self isstanceallowed("stand") && func_1120()) + { + return 1; + } + + var_00 = gettime(); + self.a.var_1112 = var_00 + 1500; + if(isdefined(self.group) && isdefined(self.group.forward)) + { + var_01 = angleclamp180(self.angles[1] - vectortoyaw(self.group.forward)); + if(func_0F73(var_01)) + { + return 1; + } + } + + if(isdefined(self.node) && isdefined(level.var_CBD[self.node.type])) + { + var_01 = angleclamp180(self.angles[1] - self.node.angles[1]); + if(func_0F73(var_01)) + { + return 1; + } + } + else if((isdefined(self.enemy) && self seerecently(self.enemy,2)) || var_00 > self.a.var_1019 + 1200) + { + var_01 = undefined; + var_02 = self getanglestolikelyenemypath(); + if(isdefined(var_02)) + { + var_01 = angleclamp180(self.angles[1] - var_02[1]); + } + else if(isdefined(self.node)) + { + var_01 = angleclamp180(self.angles[1] - self.node.angles[1]); + } + else if(isdefined(self.enemy)) + { + var_02 = vectortoangles(self lastknownpos(self.enemy) - self.origin); + var_01 = angleclamp180(self.angles[1] - var_02[1]); + } + + if(isdefined(var_01) && func_0F73(var_01)) + { + return 1; + } + } + else if(isdefined(self.heat) && self nearclaimnode()) + { + var_01 = angleclamp180(self.angles[1] - self.node.angles[1]); + if(func_0F73(var_01)) + { + return 1; + } + } + + if(func_10E7()) + { + return 1; + } + + var_03 = self.a.var_1125 < var_00; + var_04 = 0; + if(var_03) + { + var_04 = 0.99999; + } + + if(func_1144(var_04)) + { + return 1; + } + + if(var_03 && animscripts/utility::func_C95()) + { + if(func_1159(%pistol_stand_switch)) + { + return 1; + } + } + + func_1126(); + return 1; +} + +//Function Number: 22 +func_1126() +{ + self endon("shoot_behavior_change"); + wait 0.4 + randomfloat(0.4); + self waittill("do_slow_things"); +} + +//Function Number: 23 +func_1127() +{ + self.a.var_1125 = gettime() + randomintrange(2000,4000); +} + +//Function Number: 24 +func_0F73(param_00) +{ + if(param_00 < 0 - self.var_F72) + { + if(self.a.pose == "prone") + { + animscripts/cover_prone::func_10B0("crouch"); + animscripts/animset::func_C99(); + } + + func_112E("left",0 - param_00); + maps\_gameskill::didsomethingotherthanshooting(); + return 1; + } + + if(param_00 > self.var_F72) + { + if(self.a.pose == "prone") + { + animscripts/cover_prone::func_10B0("crouch"); + animscripts/animset::func_C99(); + } + + func_112E("right",param_00); + maps\_gameskill::didsomethingotherthanshooting(); + return 1; + } + + return 0; +} + +//Function Number: 25 +func_1128() +{ + self endon("killanimscript"); + self.var_D81 = (0,0,0); + var_00 = undefined; + var_01 = self.origin; + var_02 = 0.15; + for(;;) + { + if(isdefined(self.var_CAB) && isdefined(var_00) && self.var_CAB == var_00) + { + var_03 = self.var_CAB.origin; + self.var_D81 = var_03 - var_01 * 1 / var_02; + var_01 = var_03; + } + else + { + if(isdefined(self.var_CAB)) + { + var_01 = self.var_CAB.origin; + } + else + { + var_01 = self.origin; + } + + var_00 = self.var_CAB; + self.var_D81 = (0,0,0); + } + + wait var_02; + } +} + +//Function Number: 26 +func_1129() +{ + return 0; +} + +//Function Number: 27 +func_112A(param_00) +{ + self endon("killanimscript"); + animscripts/shared::donotetracks(param_00); +} + +//Function Number: 28 +func_112B() +{ + self endon("killanimscript"); + self notify("facing_enemy_immediately"); + self endon("facing_enemy_immediately"); + var_00 = 5; + for(;;) + { + var_01 = 0 - animscripts/utility::func_D5C(); + if(abs(var_01) < 2) + { + break; + } + + if(abs(var_01) > var_00) + { + var_01 = var_00 * common_scripts\utility::sign(var_01); + } + + self orientmode("face angle",self.angles[1] + var_01); + wait 0.05; + } + + self orientmode("face current"); + self notify("can_stop_turning"); +} + +//Function Number: 29 +func_112C(param_00) +{ + var_01 = getmovedelta(param_00,0,1); + var_02 = self localtoworldcoords(var_01); + return self isingoal(var_02) && self maymovetopoint(var_02); +} + +//Function Number: 30 +func_112D(param_00) +{ + var_01 = getmovedelta(param_00,0,1); + var_02 = self localtoworldcoords(var_01); + return self isingoal(var_02); +} + +//Function Number: 31 +func_112E(param_00,param_01) +{ + var_02 = isdefined(self.var_CB1); + var_03 = 1; + var_04 = 0.2; + var_05 = isdefined(self.enemy) && !isdefined(self.var_F3D) && self seerecently(self.enemy,2) && distancesquared(self.enemy.origin,self.origin) < 262144; + if(self.a.var_1019 + 500 > gettime()) + { + var_04 = 0.25; + if(var_05) + { + thread func_112B(); + } + } + else if(var_05) + { + var_06 = 1 - distance(self.enemy.origin,self.origin) / 512; + var_03 = 1 + var_06 * 1; + if(var_03 > 2) + { + var_04 = 0.05; + } + else if(var_03 > 1.3) + { + var_04 = 0.1; + } + else + { + var_04 = 0.15; + } + } + + var_07 = 0; + if(param_01 > 157.5) + { + var_07 = 180; + } + else if(param_01 > 112.5) + { + var_07 = 135; + } + else if(param_01 > 67.5) + { + var_07 = 90; + } + else + { + var_07 = 45; + } + + var_08 = "turn_" + param_00 + "_" + var_07; + var_09 = animscripts/utility::func_D4D(var_08); + if(isdefined(self.var_F3D)) + { + self animmode("angle deltas",0); + } + else if(isdefined(self.node) && isdefined(level.var_112F[self.node.type]) && distancesquared(self.origin,self.node.origin) < 256) + { + self animmode("angle deltas",0); + } + else if(func_112D(var_09)) + { + self animmode("zonly_physics",0); + } + else + { + self animmode("angle deltas",0); + } + + self setanimknoball(%exposed_aiming,%body,1,var_04); + if(!isdefined(self.var_F3D)) + { + func_1133(var_04); + } + + self setanimlimited(%turn,1,var_04); + if(isdefined(self.heat)) + { + var_03 = min(1,var_03); + } + else if(isdefined(self.var_F3D)) + { + var_03 = max(1.5,var_03); + } + + self setflaggedanimknoblimitedrestart("turn",var_09,1,var_04,var_03); + self notify("turning"); + if(var_02 && !isdefined(self.var_F3D) && !isdefined(self.heat)) + { + thread func_1135(); + } + + func_1131(); + self setanimlimited(%turn,0,0.2); + if(!isdefined(self.var_F3D)) + { + func_1134(0.2); + } + + if(!isdefined(self.var_F3D)) + { + self clearanim(%turn,0.2); + self setanimknob(%exposed_aiming,1,0.2,1); + } + else + { + self clearanim(%exposed_modern,0.3); + } + + if(isdefined(self.var_1130)) + { + self.var_1130 = undefined; + thread func_112B(); + } + + self animmode("zonly_physics",0); + self notify("done turning"); +} + +//Function Number: 32 +func_1131() +{ + self endon("can_stop_turning"); + animscripts/shared::donotetracks("turn"); +} + +//Function Number: 33 +func_1132() +{ + self endon("killanimscript"); + self endon("done turning"); + var_00 = self.angles[1]; + wait 0.3; + if(self.angles[1] == var_00) + { + self notify("turning_isnt_working"); + self.var_1130 = 1; + } +} + +//Function Number: 34 +func_1133(param_00) +{ + self setanimlimited(animscripts/utility::func_D4D("straight_level"),0,param_00); + self setanim(%add_idle,0,param_00); + if(!animscripts/utility::func_C97()) + { + self clearanim(%add_fire,0.2); + } +} + +//Function Number: 35 +func_1134(param_00) +{ + self setanimlimited(animscripts/utility::func_D4D("straight_level"),1,param_00); + self setanim(%add_idle,1,param_00); +} + +//Function Number: 36 +func_1135() +{ + self endon("killanimscript"); + self endon("done turning"); + if(animscripts/utility::func_BB6()) + { + return; + } + + animscripts/combat_utility::func_F06(); + self clearanim(%add_fire,0.2); +} + +//Function Number: 37 +func_1136() +{ + thread func_1137(); + self endon("need_to_turn"); + thread func_1140(); + animscripts/combat_utility::func_F06(); + self notify("stop_watching_for_need_to_turn"); + self notify("stop_trying_to_melee"); +} + +//Function Number: 38 +func_1137() +{ + self endon("killanimscript"); + self endon("stop_watching_for_need_to_turn"); + var_00 = gettime() + 4000 + randomint(2000); + for(;;) + { + if(gettime() > var_00 || func_1121()) + { + self notify("need_to_turn"); + break; + } + + wait 0.1; + } +} + +//Function Number: 39 +func_10E7() +{ + if(!animscripts/combat_utility::func_1138()) + { + return 0; + } + + if(isdefined(level.throwgrenadeatplayerasap) && isalive(level.player)) + { + if(func_113B(level.player,200)) + { + return 1; + } + } + + if(isdefined(self.enemy) && func_113B(self.enemy,self.minexposedgrenadedist)) + { + return 1; + } + + self.a.var_113A = gettime() + 500; + return 0; +} + +//Function Number: 40 +func_113B(param_00,param_01) +{ + var_02 = 0; + if(isdefined(self.dontevershoot) || isdefined(param_00.var_FA0)) + { + return 0; + } + + if(!isdefined(self.a.array["exposed_grenade"])) + { + return 0; + } + + var_03 = param_00.origin; + if(!self cansee(param_00)) + { + if(isdefined(self.enemy) && param_00 == self.enemy && isdefined(self.var_CB1)) + { + var_03 = self.var_CB1; + } + } + + if(!self cansee(param_00)) + { + param_01 = 100; + } + + if(distancesquared(self.origin,var_03) > param_01 * param_01 && self.a.pose == self.a.var_113C) + { + animscripts/combat_utility::func_1093(param_00); + if(!animscripts/combat_utility::func_113D(param_00)) + { + return 0; + } + + var_04 = animscripts/utility::func_113E(var_03); + if(abs(var_04) < 60) + { + var_05 = []; + foreach(var_07 in self.a.array["exposed_grenade"]) + { + if(func_112C(var_07)) + { + var_05[var_05.size] = var_07; + } + } + + if(var_05.size > 0) + { + self setanim(%exposed_aiming,0,0.1); + self animmode("zonly_physics"); + animscripts/track::func_CC4(0,0); + var_02 = animscripts/combat_utility::func_FA1(param_00,var_05[randomint(var_05.size)]); + self setanim(%exposed_aiming,1,0.1); + if(var_02) + { + animscripts/track::func_CC4(1,0.5); + } + else + { + animscripts/track::func_CC4(1,0); + } + } + } + } + + if(var_02) + { + maps\_gameskill::didsomethingotherthanshooting(); + } + + return var_02; +} + +//Function Number: 41 +func_113F(param_00) +{ + if(param_00 == self.a.pose) + { + return; + } + + var_01 = self.a.pose + "_2_" + param_00; + if(!isdefined(self.a.array)) + { + return; + } + + var_02 = self.a.array[var_01]; + if(!isdefined(var_02)) + { + return; + } + + self clearanim(%root,0.3); + animscripts/combat_utility::func_F85(); + if(param_00 == "stand") + { + var_03 = 2; + } + else + { + var_03 = 1.5; + } + + if(!animhasnotetrack(var_02,"anim_pose = \" + param_00 + "\")) + { + } + + self setflaggedanimknoballrestart("trans",var_02,%body,1,0.2,var_03); + var_04 = getanimlength(var_02) / var_03; + var_05 = var_04 - 0.3; + if(var_05 < 0.2) + { + var_05 = 0.2; + } + + animscripts/notetracks::func_D4F(var_05,"trans"); + self.a.pose = param_00; + func_1108(); + animscripts/combat_utility::func_1114(); + maps\_gameskill::didsomethingotherthanshooting(); +} + +//Function Number: 42 +func_1140() +{ + self endon("killanimscript"); + self endon("stop_trying_to_melee"); + self endon("done turning"); + self endon("need_to_turn"); + self endon("shoot_behavior_change"); + for(;;) + { + wait 0.2 + randomfloat(0.3); + if(isdefined(self.enemy)) + { + if(isplayer(self.enemy)) + { + var_00 = -25536; + } + else + { + var_00 = 10000; + } + + if(distancesquared(self.enemy.origin,self.origin) < var_00) + { + func_1141(); + } + } + } +} + +//Function Number: 43 +func_1141() +{ + animscripts/melee::func_1009(); +} + +//Function Number: 44 +func_1142() +{ + if(isdefined(self.var_1143)) + { + return; + } + + if(isplayer(self.enemy)) + { + return; + } + + animscripts/melee::func_1021(self.enemy); +} + +//Function Number: 45 +func_1144(param_00) +{ + if(animscripts/combat_utility::func_F08(param_00)) + { + self.a.var_1145 = 1; + animscripts/combat_utility::func_F85(); + var_01 = undefined; + if(isdefined(self.specialreloadanimfunc)) + { + var_01 = self [[ self.specialreloadanimfunc ]](); + self.var_766 = 1; + } + else + { + var_01 = animscripts/utility::func_CA8("reload"); + if(self.a.pose == "stand" && animscripts/utility::func_F8D("reload_crouchhide") && common_scripts\utility::cointoss()) + { + var_01 = animscripts/utility::func_CA8("reload_crouchhide"); + } + } + + thread func_1140(); + self.var_1147 = 0; + if(weaponclass(self.weapon) == "pistol") + { + self orientmode("face default"); + } + + func_1148(var_01,param_00 > 0.05); + self notify("abort_reload"); + self orientmode("face current"); + if(self.var_1147) + { + animscripts/weaponlist::func_CD0(); + } + + self clearanim(%reload,0.2); + self.var_766 = 0; + self notify("stop_trying_to_melee"); + self.a.var_1145 = 0; + self.var_1147 = undefined; + maps\_gameskill::didsomethingotherthanshooting(); + animscripts/combat_utility::func_1114(); + return 1; + } + + return 0; +} + +//Function Number: 46 +func_1148(param_00,param_01) +{ + self endon("abort_reload"); + if(param_01) + { + thread func_1149(); + } + + var_02 = 1; + if(!animscripts/utility::func_C95() && !animscripts/utility::func_CEA(self.weapon) && isdefined(self.enemy) && self cansee(self.enemy) && distancesquared(self.enemy.origin,self.origin) < 1048576) + { + var_02 = 1.2; + } + + var_03 = "reload_" + animscripts/combat_utility::func_FF4(); + self clearanim(%root,0.2); + self setflaggedanimrestart(var_03,param_00,1,0.2,var_02); + thread func_114A("abort_reload",var_03); + self endon("start_aim"); + animscripts/shared::donotetracks(var_03); + self.var_1147 = 1; +} + +//Function Number: 47 +func_1149() +{ + self endon("abort_reload"); + self endon("killanimscript"); + for(;;) + { + if(isdefined(self.var_CAB) && self cansee(self.var_CAB)) + { + break; + } + + wait 0.05; + } + + self notify("abort_reload"); +} + +//Function Number: 48 +func_114A(param_00,param_01) +{ + self endon(param_00); + self waittillmatch("start_aim",param_01); + self.var_1147 = 1; + self notify("start_aim"); +} + +//Function Number: 49 +func_10EB(param_00) +{ + self endon("killanimscript"); + animscripts/shared::donotetracks(param_00); +} + +//Function Number: 50 +func_114B() +{ + maps\_mgturret::dropturret(); + animscripts/weaponlist::func_CD0(); + self.a.var_114D = 0; + self notify("dropped_gun"); + maps\_mgturret::restoredefaults(); +} + +//Function Number: 51 +func_114F() +{ + func_114B(); +} + +//Function Number: 52 +func_1150() +{ + if(isdefined(self.secondaryweapon) && animscripts/utility::func_CEA(self.secondaryweapon)) + { + return 0; + } + + if(isdefined(self.no_pistol_switch)) + { + return 0; + } + + self.a.pose = "stand"; + func_1152(%pistol_stand_pullout); + return 1; +} + +//Function Number: 53 +func_1152(param_00) +{ + self endon("killanimscript"); + thread animscripts/combat_utility::func_1153(); + animscripts/combat_utility::func_F85(); + self.var_1154 = param_00; + self setflaggedanimknoballrestart("weapon swap",param_00,%body,1,0.2,animscripts/combat_utility::func_F7B()); + func_1155("weapon swap",::func_1158,"end_weapon_swap"); + self clearanim(self.var_1154,0.2); + self notify("facing_enemy_immediately"); + self notify("switched_to_sidearm"); + maps\_gameskill::didsomethingotherthanshooting(); +} + +//Function Number: 54 +func_1155(param_00,param_01,param_02) +{ + self endon(param_02); + animscripts/notetracks::func_1156(param_00,param_01); +} + +//Function Number: 55 +func_1157(param_00) +{ + self endon("killanimscript"); + wait param_00; + func_112B(); +} + +//Function Number: 56 +func_1158(param_00) +{ + if(param_00 == "pistol_pickup") + { + self clearanim(animscripts/utility::func_D4D("straight_level"),0); + animscripts/animset::func_C94(); + thread func_1157(0.25); + return; + } + + if(param_00 == "start_aim") + { + animscripts/combat_utility::func_1114(); + if(func_1121()) + { + self notify("end_weapon_swap"); + return; + } + } +} + +//Function Number: 57 +func_1159(param_00,param_01) +{ + self endon("killanimscript"); + if(animscripts/utility::func_CEA(self.primaryweapon) && isdefined(self.wantshotgun) && !self.wantshotgun && self.lastweapon == animscripts/utility::func_115A()) + { + return 0; + } + + animscripts/combat_utility::func_F85(); + self.var_1154 = param_00; + self setflaggedanimknoballrestart("weapon swap",param_00,%body,1,0.1,1); + if(isdefined(param_01)) + { + func_1155("weapon swap",::func_115C,"end_weapon_swap"); + } + else + { + func_1155("weapon swap",::func_115B,"end_weapon_swap"); + } + + self clearanim(self.var_1154,0.2); + self notify("switched_to_lastweapon"); + maps\_gameskill::didsomethingotherthanshooting(); + return 1; +} + +//Function Number: 58 +func_115B(param_00) +{ + if(param_00 == "pistol_putaway") + { + self clearanim(animscripts/utility::func_D4D("straight_level"),0); + animscripts/animset::func_C94(); + thread animscripts/combat_utility::func_1153(); + return; + } + + if(param_00 == "start_aim") + { + animscripts/combat_utility::func_1114(); + if(func_1121()) + { + self notify("end_weapon_swap"); + return; + } + } +} + +//Function Number: 59 +func_115C(param_00) +{ + if(param_00 == "pistol_putaway") + { + thread animscripts/combat_utility::func_1153(); + return; + } + + if(issubstr(param_00,"anim_gunhand")) + { + self notify("end_weapon_swap"); + } +} + +//Function Number: 60 +func_115D() +{ + if(!animscripts/utility::func_BB6() || self.bulletsinclip == 0) + { + return 0; + } + + if(randomfloat(1) > 0.5) + { + self setflaggedanimknoball("deathanim",%rpg_stand_death,%root,1,0.05,1); + } + else + { + self setflaggedanimknoball("deathanim",%rpg_stand_death_stagger,%root,1,0.05,1); + } + + animscripts/shared::donotetracks("deathanim"); + animscripts/shared::func_D73(); +} + +//Function Number: 61 +func_115E() +{ + self endon("killanimscript"); + self.a.var_1145 = 0; + for(;;) + { + wait 0.2; + if(isdefined(self.enemy) && !self seerecently(self.enemy,2)) + { + if(self.combatmode == "ambush" || self.combatmode == "ambush_nodes_only") + { + continue; + } + } + + func_115F(); + } +} + +//Function Number: 62 +func_115F() +{ + if(self.fixednode) + { + return; + } + + if(!isdefined(self.enemy)) + { + self.var_1160 = 0; + return; + } + + if(gettime() < self.var_720) + { + self.var_1160 = 0; + return; + } + + if(isdefined(self.var_1161) && self.var_1161 != self.enemy) + { + self.var_1160 = 0; + self.var_1161 = undefined; + return; + } + + self.var_1161 = self.enemy; + if(self cansee(self.enemy) && self canshootenemy()) + { + self.var_1160 = 0; + return; + } + + if(isdefined(self.var_1147) && !self.var_1147) + { + self.var_1160 = 0; + return; + } + + if(!isdefined(self.reacquire_without_facing) || !self.reacquire_without_facing) + { + var_00 = vectornormalize(self.enemy.origin - self.origin); + var_01 = anglestoforward(self.angles); + if(vectordot(var_00,var_01) < 0.5) + { + self.var_1160 = 0; + return; + } + } + + if(self.a.var_1145 && animscripts/combat_utility::func_F08(0.25) && self.enemy.health > self.enemy.maxhealth * 0.5) + { + self.var_1160 = 0; + return; + } + + if(animscripts/combat_utility::func_F34() && self.var_1160 < 3) + { + self.var_1160 = 3; + } + + switch(self.var_1160) + { + case 0: + if(self reacquirestep(32)) + { + return; + } + break; + + case 1: + if(self reacquirestep(64)) + { + self.var_1160 = 0; + return; + } + break; + + case 2: + if(self reacquirestep(96)) + { + self.var_1160 = 0; + return; + } + break; + + case 3: + if(animscripts/combat_utility::func_F35(0)) + { + self.var_1160 = 0; + return; + } + break; + + case 4: + if(!self cansee(self.enemy) || !self canshootenemy()) + { + self flagenemyunattackable(); + } + break; + + default: + if(self.var_1160 > 15) + { + self.var_1160 = 0; + return; + } + break; + } + + self.var_1160++; +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/combat_say.gsc b/MW3/PC/SP/animscripts/combat_say.gsc new file mode 100644 index 0000000..6497054 --- /dev/null +++ b/MW3/PC/SP/animscripts/combat_say.gsc @@ -0,0 +1,21 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\combat_say.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 44 ms + * Timestamp: 10/27/2023 2:17:56 AM +*******************************************************************/ + +//Function Number: 1 +func_3FDA() +{ + animscripts/battlechatter::func_ABF(); +} + +//Function Number: 2 +func_3FDB(param_00) +{ + animscripts/battlechatter::func_ABF(); +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/combat_utility.gsc b/MW3/PC/SP/animscripts/combat_utility.gsc new file mode 100644 index 0000000..403e3ee --- /dev/null +++ b/MW3/PC/SP/animscripts/combat_utility.gsc @@ -0,0 +1,1898 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\combat_utility.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 84 + * Decompile Time: 1377 ms + * Timestamp: 10/27/2023 2:18:00 AM +*******************************************************************/ + +//Function Number: 1 +func_2373(param_00) +{ + var_01 = self getshootatpos() + (0,0,-3); + var_02 = (var_01[0] - param_00[0],var_01[1] - param_00[1],var_01[2] - param_00[2]); + var_02 = vectornormalize(var_02); + var_03 = var_02[2] * -1; + return var_03; +} + +//Function Number: 2 +func_2374() +{ + if(isplayer(self.enemy)) + { + return randomfloatrange(self.enemy.gs.min_sniper_burst_delay_time,self.enemy.gs.max_sniper_burst_delay_time); + } + + return randomfloatrange(level.min_sniper_burst_delay_time,level.max_sniper_burst_delay_time); +} + +//Function Number: 3 +func_2375() +{ + var_00 = gettime() - self.a.lastshoottime / 1000; + var_01 = func_2376(); + if(var_01 > var_00) + { + return var_01 - var_00; + } + + return 0; +} + +//Function Number: 4 +func_2376() +{ + if(animscripts/utility::func_C95()) + { + return randomfloatrange(0.15,0.55); + } + + if(animscripts/utility::func_C97()) + { + return randomfloatrange(1,1.7); + } + + if(issniper()) + { + return func_2374(); + } + + if(self.var_CDB) + { + return randomfloatrange(0.1,0.35); + } + + return randomfloatrange(0.4,0.9); +} + +//Function Number: 5 +func_2377() +{ + if(self.bulletsinclip) + { + if(self.var_CDA == "full" && !self.var_CDB) + { + if(self.a.lastshoottime == gettime()) + { + wait 0.05; + } + + return; + } + + var_00 = func_2375(); + if(var_00) + { + wait var_00; + } + } +} + +//Function Number: 6 +func_10BB() +{ + if(!isdefined(self.enemy)) + { + return 0; + } + + if(self.team != "allies") + { + if(!isplayer(self.enemy)) + { + return 0; + } + + if(self.enemy maps\_utility::ent_flag("player_is_invulnerable")) + { + return 0; + } + } + + if(animscripts/utility::func_C95() || animscripts/utility::func_BB6()) + { + return 0; + } + + if(gettime() - self.var_10BA < self.var_20B7) + { + return 0; + } + + if(!self cansee(self.enemy) && distancesquared(self.origin,self.enemy.origin) > 65536) + { + return 0; + } + + self.bulletsinclip = int(weaponclipsize(self.weapon) / 2); + if(self.bulletsinclip > weaponclipsize(self.weapon)) + { + self.bulletsinclip = weaponclipsize(self.weapon); + } + + self.var_10BA = gettime(); + return 1; +} + +//Function Number: 7 +func_2378() +{ + for(var_00 = int(60);var_00 > 0;var_00--) + { + if(isdefined(self.dontevershoot) || isdefined(self.enemy) && isdefined(self.enemy.var_FA0)) + { + wait 0.05; + continue; + } + + return 0; + } + + return 1; +} + +//Function Number: 8 +func_0F06() +{ + self endon("shoot_behavior_change"); + self endon("stopShooting"); + if(func_23BD()) + { + if(isdefined(self.enemy) && isai(self.enemy) && distancesquared(level.player.origin,self.enemy.origin) < 147456) + { + self.enemy animscripts/battlechatter_ai::func_AD5("infantry",self,1); + } + + if(animscripts/utility::func_BB6() && issentient(self.enemy)) + { + wait randomfloat(2); + } + } + + if(isdefined(self.enemy) && distancesquared(self.origin,self.enemy.origin) > squared(400)) + { + var_00 = randomintrange(1,5); + } + else + { + var_00 = 10; + } + + for(;;) + { + func_2377(); + if(func_2378()) + { + break; + } + + if(self.var_CDA == "full") + { + func_237E(animscripts/utility::func_D4D("fire"),1,animscripts/shared::func_2379()); + } + else if(self.var_CDA == "burst" || self.var_CDA == "semi") + { + var_01 = animscripts/shared::func_237A(); + if(var_01 == 1) + { + func_237E(animscripts/utility::func_CA8("single"),1,var_01); + } + else + { + func_237E(animscripts/utility::func_D4D(self.var_CDA + var_01),1,var_01); + } + } + else if(self.var_CDA == "single") + { + func_237E(animscripts/utility::func_CA8("single"),1,1); + } + else + { + self waittill("hell freezes over"); + } + + if(!self.bulletsinclip) + { + break; + } + + var_00--; + if(var_00 < 0) + { + self.var_CDC = 1; + break; + } + } +} + +//Function Number: 9 +func_0FF4() +{ + level.var_20C9++; + return level.var_20C9; +} + +//Function Number: 10 +func_110B(param_00) +{ + self setanim(%exposed_aiming,1,0.2); + self setanimknoblimited(animscripts/utility::func_D4D("straight_level"),1,param_00); + self setanimknoblimited(animscripts/utility::func_D4D("add_aim_up"),1,param_00); + self setanimknoblimited(animscripts/utility::func_D4D("add_aim_down"),1,param_00); + self setanimknoblimited(animscripts/utility::func_D4D("add_aim_left"),1,param_00); + self setanimknoblimited(animscripts/utility::func_D4D("add_aim_right"),1,param_00); +} + +//Function Number: 11 +func_1114() +{ + if(!isdefined(self.a.aimidlethread)) + { + func_110B(0.2); + thread aimidlethread(); + thread animscripts/track::func_CA9(); + } +} + +//Function Number: 12 +func_0F85() +{ + func_0F9D(); + self clearanim(%add_fire,0.1); + self notify("stop tracking"); +} + +//Function Number: 13 +func_237B() +{ + if(isdefined(self.a.aimidlethread)) + { + self setanim(%add_idle,0,0.2); + } + + self setanim(%add_fire,1,0.1); +} + +//Function Number: 14 +func_111E() +{ + if(isdefined(self.a.aimidlethread)) + { + self setanim(%add_idle,1,0.2); + } + + self setanim(%add_fire,0,0.1); +} + +//Function Number: 15 +aimidlethread(param_00) +{ + self endon("killanimscript"); + self endon("end_aim_idle_thread"); + if(isdefined(self.a.aimidlethread)) + { + return; + } + + self.a.aimidlethread = 1; + wait 0.1; + self setanimlimited(%add_idle,1,0.2); + var_01 = 0; + for(;;) + { + var_02 = "idle" + var_01; + if(isdefined(self.a.var_237C)) + { + var_03 = animscripts/utility::func_CA8("lean_idle"); + } + else + { + var_03 = animscripts/utility::func_CA8("exposed_idle"); + } + + self setflaggedanimknoblimitedrestart(var_02,var_03,1,0.2); + self waittillmatch("end",var_02); + var_01++; + } + + self clearanim(%add_idle,0.1); +} + +//Function Number: 16 +func_0F9D() +{ + self notify("end_aim_idle_thread"); + self.a.aimidlethread = undefined; + self clearanim(%add_idle,0.1); +} + +//Function Number: 17 +func_237D() +{ + if(animscripts/utility::func_C97()) + { + return 1; + } + + if(animscripts/weaponlist::func_CCA()) + { + return animscripts/weaponlist::func_CCC() * 0.7; + } + + return 0.4; +} + +//Function Number: 18 +func_237E(param_00,param_01,param_02) +{ + var_03 = "fireAnim_" + func_0FF4(); + maps\_gameskill::resetmisstime(); + while(!func_10E4()) + { + wait 0.05; + } + + func_237B(); + var_04 = 1; + if(isdefined(self.var_237F)) + { + var_04 = self.var_237F; + } + else if(self.var_CDA == "full") + { + var_04 = animscripts/weaponlist::func_CCC() * randomfloatrange(0.5,1); + } + else if(self.var_CDA == "burst") + { + var_04 = animscripts/weaponlist::func_CCD(); + } + else if(animscripts/utility::func_C95()) + { + var_04 = 3; + } + else if(animscripts/utility::func_2380()) + { + var_04 = func_237D(); + } + + self setflaggedanimknobrestart(var_03,param_00,1,0.2,var_04); + self updateplayersightaccuracy(); + if(!isdefined(self.var_23F)) + { + self.var_23F = 0; + } + + self.var_23F++; + func_2381(var_03,param_00,param_01,param_02); + self.var_23F = 0; + func_111E(); +} + +//Function Number: 19 +func_2381(param_00,param_01,param_02,param_03) +{ + self endon("enemy"); + if(isplayer(self.enemy) && self.var_CDA == "full" || self.var_CDA == "semi") + { + level endon("player_becoming_invulnerable"); + } + + if(param_02) + { + thread func_2382(param_00,"fireAnimEnd"); + self endon("fireAnimEnd"); + } + + if(!isdefined(param_03)) + { + param_03 = -1; + } + + var_04 = 0; + var_05 = animhasnotetrack(param_01,"fire"); + var_06 = weaponclass(self.weapon) == "rocketlauncher"; + while(var_04 < param_03 && param_03 > 0) + { + if(var_05) + { + self waittillmatch("fire",param_00); + } + + if(!self.bulletsinclip) + { + if(!func_10BB()) + { + break; + } + } + + if(!func_10E4()) + { + break; + } + + func_2383(); + if(isplayer(self.enemy) && self.enemy maps\_utility::ent_flag("player_is_invulnerable")) + { + if(randomint(3) == 0) + { + self.bulletsinclip--; + } + } + else + { + self.bulletsinclip--; + } + + if(var_06) + { + self.a.rockets--; + if(self.weapon == "rpg") + { + self hidepart("tag_rocket"); + self.a.var_CD2 = 0; + } + } + + var_04++; + thread func_2387(param_00); + if(self.var_CDB && var_04 == param_03) + { + break; + } + + if(!var_05 || param_03 == 1 && self.var_CDA == "single") + { + self waittillmatch("end",param_00); + } + } + + if(param_02) + { + self notify("fireAnimEnd"); + } +} + +//Function Number: 20 +func_10E4() +{ + if(!isdefined(self.var_CB1)) + { + return 1; + } + + var_00 = self getmuzzleangle(); + var_01 = animscripts/shared::func_CB0(); + var_02 = vectortoangles(self.var_CB1 - var_01); + var_03 = animscripts/utility::func_D61(var_00[1] - var_02[1]); + if(var_03 > level.var_209E) + { + if(distancesquared(self geteye(),self.var_CB1) > level.var_209F || var_03 > level.var_20A0) + { + return 0; + } + } + + return animscripts/utility::func_D61(var_00[0] - var_02[0]) <= level.var_20A1; +} + +//Function Number: 21 +func_2382(param_00,param_01) +{ + self endon("killanimscript"); + self endon(param_01); + self waittillmatch("end",param_00); + self notify(param_01); +} + +//Function Number: 22 +func_2383() +{ + if(isdefined(self.var_CAB)) + { + if(isdefined(self.enemy) && self.var_CAB == self.enemy) + { + animscripts/utility::func_D5F(); + } + } + else + { + animscripts/utility::func_2384(self.var_CB1); + } +} + +//Function Number: 23 +func_2385() +{ + if(self.weapon != "rpg") + { + return; + } + + self.a.var_CD2 = 1; + self showpart("tag_rocket"); + self notify("showing_rocket"); +} + +//Function Number: 24 +func_0CD3() +{ + if(self.weapon != "rpg") + { + return; + } + + self endon("death"); + self endon("showing_rocket"); + self waittill("killanimscript"); + func_2385(); +} + +//Function Number: 25 +func_2386() +{ + if(self.bulletsinclip) + { + self.bulletsinclip--; + } +} + +//Function Number: 26 +func_2387(param_00) +{ + if(!animscripts/utility::func_C97()) + { + return; + } + + self endon("killanimscript"); + self notify("shotgun_pump_sound_end"); + self endon("shotgun_pump_sound_end"); + thread func_2388(2); + self waittillmatch("rechamber",param_00); + self playsound("ai_shotgun_pump"); + self notify("shotgun_pump_sound_end"); +} + +//Function Number: 27 +func_2388(param_00) +{ + self endon("killanimscript"); + self endon("shotgun_pump_sound_end"); + wait param_00; + self notify("shotgun_pump_sound_end"); +} + +//Function Number: 28 +func_2389(param_00) +{ +} + +//Function Number: 29 +func_0F08(param_00) +{ + if(self.weapon == "none") + { + return 0; + } + + if(isdefined(self.var_238A)) + { + if(self.bulletsinclip < weaponclipsize(self.weapon) * 0.5) + { + self.bulletsinclip = int(weaponclipsize(self.weapon) * 0.5); + } + + if(self.bulletsinclip <= 0) + { + self.bulletsinclip = 0; + } + + return 0; + } + + if(self.bulletsinclip <= weaponclipsize(self.weapon) * param_00) + { + if(param_00 == 0) + { + if(func_10BB()) + { + return 0; + } + } + + return 1; + } + + return 0; +} + +//Function Number: 30 +func_1153() +{ + self endon("weapon_switch_done"); + self endon("death"); + self waittill("killanimscript"); + animscripts/shared::func_C9B(self.primaryweapon,"right"); +} + +//Function Number: 31 +func_0F54(param_00,param_01) +{ + self endon("killanimscript"); + if(!func_0F08(param_00)) + { + return 0; + } + + animscripts/battlechatter_ai::func_B36(); + animscripts/battlechatter::func_ABF(); + if(isdefined(param_01)) + { + self setflaggedanimknoball("reloadanim",param_01,%body,1,0.1,1); + animscripts/shared::donotetracks("reloadanim"); + animscripts/weaponlist::func_CD0(); + self.a.var_114D = 0; + } + else + { + if(self.a.pose == "prone") + { + self setflaggedanimknoball("reloadanim",%prone_reload,%body,1,0.1,1); + self updateprone(%prone_legs_up,%prone_legs_down,1,0.1,1); + } + else + { + wait 2; + return; + } + + animscripts/shared::donotetracks("reloadanim"); + animscripts/weaponlist::func_CD0(); + self.a.var_114D = 0; + } + + return 1; +} + +//Function Number: 32 +func_238B(param_00,param_01) +{ + if(!isdefined(level.var_238C)) + { + anim.var_238C = []; + anim.var_238D = []; + } + + var_02 = level.var_238C.size; + level.var_238C[var_02] = param_00; + level.var_238D[var_02] = param_01; +} + +//Function Number: 33 +func_20E7() +{ + func_238B(%exposed_grenadethrowb,(41.5391,7.28883,72.2128)); + func_238B(%exposed_grenadethrowc,(34.8849,-4.77048,74.0488)); + func_238B(%corner_standl_grenade_a,(41.605,6.80107,81.4785)); + func_238B(%corner_standl_grenade_b,(24.1585,-14.7221,29.2992)); + func_238B(%cornercrl_grenadea,(25.8988,-10.2811,30.4813)); + func_238B(%cornercrl_grenadeb,(24.688,45.0702,64.377)); + func_238B(%corner_standr_grenade_a,(37.1254,-32.7053,76.5745)); + func_238B(%corner_standr_grenade_b,(19.356,15.5341,16.5036)); + func_238B(%cornercrr_grenadea,(39.8857,5.92472,24.5878)); + func_238B(%covercrouch_grenadea,(-1.6363,-0.693674,60.1009)); + func_238B(%covercrouch_grenadeb,(-1.6363,-0.693674,60.1009)); + func_238B(%coverstand_grenadea,(10.8573,7.12614,77.2356)); + func_238B(%coverstand_grenadeb,(19.1804,5.68214,73.2278)); + func_238B(%prone_grenade_a,(12.2859,-1.3019,33.4307)); + func_238B(%cqb_stand_grenade_throw,(35.7494,26.6052,37.7086)); +} + +//Function Number: 34 +func_1094(param_00) +{ + var_01 = (0,0,64); + if(isdefined(param_00)) + { + foreach(var_04, var_03 in level.var_238C) + { + if(param_00 == var_03) + { + var_01 = level.var_238D[var_04]; + break; + } + } + } + + if(var_01[2] == 64) + { + if(isdefined(param_00)) + { + } + else + { + } + } + + return var_01; +} + +//Function Number: 35 +func_238E() +{ + for(var_00 = 0;var_00 < level.players.size;var_00++) + { + if(level.players[var_00].var_20E4 == 0) + { + level.players[var_00].var_20E3["fraggrenade"] = 0; + level.players[var_00].var_20E3["flash_grenade"] = 0; + } + } + + anim.throwgrenadeatplayerasap = 1; +} + +//Function Number: 36 +func_1093(param_00) +{ + self.var_238F = spawnstruct(); + if(isplayer(param_00)) + { + self.var_238F.var_2390 = 1; + self.var_238F.player = param_00; + self.var_238F.var_2391 = self.grenadeweapon; + return; + } + + self.var_238F.var_2390 = 0; + self.var_238F.var_2391 = "AI_" + self.grenadeweapon; +} + +//Function Number: 37 +func_2392() +{ + return self.var_238F.var_2390; +} + +//Function Number: 38 +func_2393(param_00,param_01) +{ + if(param_00.var_2390) + { + var_02 = param_00.player; + var_03 = var_02.var_20E3[param_00.var_2391]; + var_02.var_20E3[param_00.var_2391] = max(param_01,var_03); + return; + } + + var_03 = level.var_20E3[param_01.var_2391]; + level.var_20E3[param_00.var_2391] = max(param_01,var_03); +} + +//Function Number: 39 +func_2394() +{ + var_00 = undefined; + if(func_2392()) + { + var_01 = self.var_238F.player; + var_00 = gettime() + var_01.gs.playergrenadebasetime + randomint(var_01.gs.playergrenaderangetime); + } + else + { + var_00 = gettime() + 30000 + randomint(30000); + } + + return var_00; +} + +//Function Number: 40 +func_2395(param_00) +{ + if(param_00.var_2390) + { + return param_00.player.var_20E3[param_00.var_2391]; + } + + return level.var_20E3[param_00.var_2391]; +} + +//Function Number: 41 +func_2396(param_00) +{ + if(!isplayer(param_00) && self isbadguy()) + { + if(gettime() < func_2395(self.var_238F)) + { + if(level.player.ignoreme) + { + return param_00; + } + + var_01 = self getthreatbiasgroup(); + var_02 = level.player getthreatbiasgroup(); + if(var_01 != "" && var_02 != "" && getthreatbias(var_02,var_01) < -10000) + { + return param_00; + } + + if(self cansee(level.player) || isai(param_00) && param_00 cansee(level.player)) + { + if(isdefined(self.var_CAF)) + { + var_03 = vectortoangles(level.player.origin - self.origin); + var_04 = angleclamp180(self.var_CAF.angles[1] - var_03[1]); + } + else + { + var_04 = animscripts/utility::func_113E(level.player.origin); + } + + if(abs(var_04) < 60) + { + param_00 = level.player; + func_1093(param_00); + } + } + } + } + + return param_00; +} + +//Function Number: 42 +func_2397(param_00) +{ + if(maps\_utility::player_died_recently()) + { + return 0; + } + + if(!param_00.gs.double_grenades_allowed) + { + return 0; + } + + var_01 = gettime(); + if(var_01 < param_00.var_20E3["double_grenade"]) + { + return 0; + } + + if(var_01 > param_00.var_20E6 + 3000) + { + return 0; + } + + if(var_01 < param_00.var_20E6 + 500) + { + return 0; + } + + return param_00.var_20E4 < 2; +} + +//Function Number: 43 +func_1138() +{ + return gettime() >= self.a.var_113A; +} + +//Function Number: 44 +func_113D(param_00) +{ + if(maps\_utility::player_died_recently()) + { + return 0; + } + + if(self.script_forcegrenade == 1) + { + return 1; + } + + if(!func_1138()) + { + return 0; + } + + if(gettime() >= func_2395(self.var_238F)) + { + return 1; + } + + if(self.var_238F.var_2390 && self.var_238F.var_2391 == "fraggrenade") + { + return func_2397(param_00); + } + + return 0; +} + +//Function Number: 45 +func_2399(param_00,param_01,param_02,param_03) +{ + if(!self isgrenadepossafe(param_00,param_01)) + { + return 0; + } + else if(distancesquared(self.origin,param_01) < -25536) + { + return 0; + } + + var_04 = physicstrace(param_01 + (0,0,1),param_01 + (0,0,-500)); + if(var_04 == param_01 + (0,0,-500)) + { + return 0; + } + + var_04 = var_04 + (0,0,0.1); + return func_1095(param_00,var_04,param_02,param_03); +} + +//Function Number: 46 +func_0FA1(param_00,param_01) +{ + if(self.weapon == "mg42" || self.grenadeammo <= 0) + { + return 0; + } + + func_1093(param_00); + param_00 = func_2396(param_00); + if(!func_113D(param_00)) + { + return 0; + } + + var_02 = func_1094(param_01); + if(isdefined(self.enemy) && param_00 == self.enemy) + { + if(!func_23B7()) + { + return 0; + } + + if(isplayer(self.enemy) && maps\_utility::is_player_down(self.enemy)) + { + return 0; + } + + if(animscripts/utility::func_F4A()) + { + if(!self isgrenadepossafe(param_00,param_00.origin)) + { + return 0; + } + + return func_1095(param_00,undefined,param_01,var_02); + } + else if(animscripts/utility::func_F39()) + { + return func_2399(param_00,animscripts/utility::func_CEE(),param_01,var_02); + } + else + { + if(!self isgrenadepossafe(param_00,param_00.origin)) + { + return 0; + } + + return func_1095(param_00,undefined,param_01,var_02); + } + + return 0; + } + + return func_2399(param_00,param_00.origin,param_01,var_02); +} + +//Function Number: 47 +func_1095(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + if(gettime() < 10000 && !isdefined(level.var_239A)) + { + return 0; + } + + if(!isdefined(param_05)) + { + param_05 = 1; + } + + if(isdefined(param_02)) + { + var_07 = param_02; + var_08 = self.a.var_20A7; + } + else + { + switch(self.a.var_D19) + { + case "cover_crouch": + case "none": + if(self.a.pose == "stand") + { + param_05 = (0,0,80); + var_07 = %stand_grenade_throw; + } + else + { + param_05 = (0,0,65); + var_07 = %crouch_grenade_throw; + } + + var_08 = "left"; + break; + + default: + var_07 = undefined; + var_08 = undefined; + break; + } + } + + if(!isdefined(var_07)) + { + return 0; + } + + if(isdefined(param_01)) + { + if(!isdefined(param_04)) + { + var_09 = self checkgrenadethrowpos(param_03,param_01,param_05,"min energy","min time","max time"); + } + else + { + var_09 = self checkgrenadethrowpos(param_04,param_02,param_06,"min time","min energy"); + } + } + else + { + var_0A = self.var_20B6; + var_0B = distance(param_00.origin,self.origin); + if(var_0B < 800) + { + if(var_0B < 256) + { + var_0A = 0; + } + else + { + var_0A = var_0A * var_0B - 256 / 544; + } + } + + if(!isdefined(param_04)) + { + var_09 = self checkgrenadethrow(param_03,var_0A,"min energy","min time","max time"); + } + else + { + var_09 = self checkgrenadethrow(param_03,var_0A,"min time","min energy"); + } + } + + self.a.var_113A = gettime() + randomintrange(1000,2000); + if(isdefined(var_09)) + { + if(!isdefined(self.var_239B)) + { + self.var_239B = self.grenadeawareness; + } + + self.grenadeawareness = 0; + var_0C = func_2394(); + func_2393(self.var_238F,min(gettime() + 3000,var_0C)); + var_0D = 0; + if(func_2392()) + { + param_00.var_20E4++; + thread func_239C(param_00); + if(param_00.var_20E4 > 1) + { + var_0D = 1; + } + + if(self.var_238F.var_2391 == "fraggrenade") + { + if(param_00.var_20E4 <= 1) + { + param_00.var_20E6 = gettime(); + } + } + } + + if(isdefined(param_06)) + { + thread func_239D(var_07,var_09,var_0C,var_0D); + } + else + { + func_239D(var_07,var_09,var_0C,var_0D); + } + + return 1; + } + else + { + } + + return 0; +} + +//Function Number: 48 +func_239C(param_00) +{ + self endon("dont_reduce_giptp_on_killanimscript"); + self waittill("killanimscript"); + param_00.var_20E4--; +} + +//Function Number: 49 +func_239D(param_00,param_01,param_02,param_03) +{ + self endon("killanimscript"); + if(self.script == "combat" || self.script == "move") + { + self orientmode("face direction",param_01); + } + + animscripts/battlechatter_ai::func_B3A(self.grenadeweapon); + self notify("stop_aiming_at_enemy"); + self setflaggedanimknoballrestart("throwanim",param_00,%body,func_0F7B(),0.1,1); + thread animscripts/notetracks::func_239E("throwanim","killanimscript"); + var_04 = animscripts/utility::func_239F(); + var_05 = "none"; + for(;;) + { + self waittill("throwanim",var_06); + if(var_06 == "grenade_left" || var_06 == "grenade_right") + { + var_05 = func_23A6(var_04,"TAG_INHAND"); + self.var_23A0 = 1; + } + + if(var_06 == "grenade_throw" || var_06 == "grenade throw") + { + break; + } + + if(var_06 == "end") + { + self.var_238F.player.var_20E4--; + self notify("dont_reduce_giptp_on_killanimscript"); + return 0; + } + } + + self notify("dont_reduce_giptp_on_killanimscript"); + if(func_2392()) + { + thread func_23A1(self.var_238F.player,param_02); + } + + self throwgrenade(); + if(!func_2392()) + { + func_2393(self.var_238F,param_02); + } + + if(param_03) + { + var_0D = self.var_238F.player; + if(var_0D.var_20E4 > 1 || gettime() - var_0D.var_20E5 < 2000) + { + var_0D.var_20E3["double_grenade"] = gettime() + min(5000,var_0D.gs.playerdoublegrenadetime); + } + } + + self notify("stop grenade check"); + if(var_05 != "none") + { + self detach(var_04,var_05); + } + else + { + } + + self.var_23A0 = undefined; + self.grenadeawareness = self.var_239B; + self.var_239B = undefined; + self waittillmatch("end","throwanim"); + self notify("done_grenade_throw"); + self notify("weapon_switch_done"); + self setanim(%exposed_modern,1,0.2); + self setanim(%exposed_aiming,1); + self clearanim(param_00,0.2); +} + +//Function Number: 50 +func_23A1(param_00,param_01) +{ + param_00 endon("death"); + func_23A2(param_01); + param_00.var_20E4--; +} + +//Function Number: 51 +func_23A2(param_00) +{ + var_01 = self.var_238F; + var_02 = spawnstruct(); + var_02 thread func_23A5(5); + var_02 endon("watchGrenadeTowardsPlayerTimeout"); + var_03 = self.grenadeweapon; + var_04 = func_23A4(); + if(!isdefined(var_04)) + { + return; + } + + func_2393(var_01,min(gettime() + 5000,param_00)); + var_05 = -3036; + var_06 = 160000; + if(var_03 == "flash_grenade") + { + var_05 = 810000; + var_06 = 1690000; + } + + var_07 = level.players; + var_08 = var_04.origin; + for(;;) + { + wait 0.1; + if(!isdefined(var_04)) + { + break; + } + + if(distancesquared(var_04.origin,var_08) < 400) + { + var_09 = []; + for(var_0A = 0;var_0A < var_07.size;var_0A++) + { + var_0B = var_07[var_0A]; + var_0C = distancesquared(var_04.origin,var_0B.origin); + if(var_0C < var_05) + { + var_0B func_23A3(var_01,param_00); + continue; + } + + if(var_0C < var_06) + { + var_09[var_09.size] = var_0B; + } + } + + var_07 = var_09; + if(var_07.size == 0) + { + break; + } + } + + var_08 = var_04.origin; + } +} + +//Function Number: 52 +func_23A3(param_00,param_01) +{ + var_02 = self; + anim.throwgrenadeatplayerasap = undefined; + if(gettime() - var_02.var_20E5 < 3000) + { + var_02.var_20E3["double_grenade"] = gettime() + var_02.gs.playerdoublegrenadetime; + } + + var_02.var_20E5 = gettime(); + var_03 = var_02.var_20E3[param_00.var_2391]; + var_02.var_20E3[param_00.var_2391] = max(param_01,var_03); +} + +//Function Number: 53 +func_23A4() +{ + self endon("killanimscript"); + self waittill("grenade_fire",var_00); + return var_00; +} + +//Function Number: 54 +func_23A5(param_00) +{ + wait param_00; + self notify("watchGrenadeTowardsPlayerTimeout"); +} + +//Function Number: 55 +func_23A6(param_00,param_01) +{ + self attach(param_00,param_01); + thread func_23A7(param_00,param_01); + return param_01; +} + +//Function Number: 56 +func_23A7(param_00,param_01) +{ + self endon("stop grenade check"); + self waittill("killanimscript"); + if(!isdefined(self)) + { + return; + } + + if(isdefined(self.var_239B)) + { + self.grenadeawareness = self.var_239B; + self.var_239B = undefined; + } + + self detach(param_00,param_01); +} + +//Function Number: 57 +func_23A8(param_00) +{ + var_01 = anglestoforward(self.angles); + var_02 = anglestoright(self.angles); + var_03 = anglestoup(self.angles); + var_01 = var_01 * param_00[0]; + var_02 = var_02 * param_00[1]; + var_03 = var_03 * param_00[2]; + return var_01 + var_02 + var_03; +} + +//Function Number: 58 +func_23A9(param_00,param_01) +{ + level notify("armoffset"); + level endon("armoffset"); + param_00 = self.origin + func_23A8(param_00); + wait 0.05; +} + +//Function Number: 59 +func_0D7E() +{ + var_00 = randomfloat(360); + var_01 = randomfloatrange(30,75); + var_02 = sin(var_01); + var_03 = cos(var_01); + var_04 = cos(var_00) * var_03; + var_05 = sin(var_00) * var_03; + var_06 = randomfloatrange(100,200); + var_07 = (var_04,var_05,var_02) * var_06; + return var_07; +} + +//Function Number: 60 +func_23AA() +{ + var_00 = self gettagorigin("tag_inhand"); + var_01 = func_0D7E(); + self magicgrenademanual(var_00,var_01,3); +} + +//Function Number: 61 +func_0F3B() +{ + if(!isdefined(self.enemy)) + { + return 0; + } + + if(self.fixednode || self.var_748) + { + return 0; + } + + var_00 = func_23AB(); + if(isdefined(var_00)) + { + return func_23AC(var_00); + } + + return 0; +} + +//Function Number: 62 +func_23AB() +{ + var_00 = self findbestcovernode(); + if(!isdefined(var_00)) + { + return undefined; + } + + var_01 = animscripts/utility::func_BEE(); + if(isdefined(var_01) && var_00 == var_01) + { + return undefined; + } + + if(isdefined(self.var_CAF) && var_00 == self.var_CAF) + { + return undefined; + } + + return var_00; +} + +//Function Number: 63 +func_23AC(param_00) +{ + var_01 = self.keepclaimednodeifvalid; + var_02 = self.var_766; + self.keepclaimednodeifvalid = 0; + self.var_766 = 0; + if(self usecovernode(param_00)) + { + return 1; + } + else + { + } + + self.keepclaimednodeifvalid = var_01; + self.var_766 = var_02; + return 0; +} + +//Function Number: 64 +func_0F34() +{ + if(level.var_20ED[self.team] > 0 && level.var_20ED[self.team] < level.advancetoenemygroupmax) + { + if(gettime() - level.lastadvancetoenemytime[self.team] > 4000) + { + return 0; + } + + var_00 = level.var_20EC[self.team]; + var_01 = isdefined(var_00) && distancesquared(self.origin,var_00.origin) < 65536; + if((var_01 || distancesquared(self.origin,level.var_20EB[self.team]) < 65536) && !isdefined(self.enemy) || distancesquared(self.enemy.origin,level.var_20EA[self.team]) < 262144) + { + return 1; + } + } + + return 0; +} + +//Function Number: 65 +func_23AD() +{ + if(!isdefined(level.lastadvancetoenemytime[self.team])) + { + return 0; + } + + if(func_0F34()) + { + return 1; + } + + if(gettime() - level.lastadvancetoenemytime[self.team] < level.advancetoenemyinterval) + { + return 0; + } + + if(!issentient(self.enemy)) + { + return 0; + } + + if(level.var_20ED[self.team]) + { + level.var_20ED[self.team] = 0; + } + + var_00 = isdefined(self.advance_regardless_of_numbers) && self.advance_regardless_of_numbers; + if(!var_00 && getaicount(self.team) < getaicount(self.enemy.team)) + { + return 0; + } + + return 1; +} + +//Function Number: 66 +func_0F35(param_00) +{ + if(!isdefined(self.enemy)) + { + return 0; + } + + if(self.fixednode) + { + return 0; + } + + if(self.combatmode == "ambush" || self.combatmode == "ambush_nodes_only") + { + return 0; + } + + if(!self isingoal(self.enemy.origin)) + { + return 0; + } + + if(func_23BD()) + { + return 0; + } + + if(!func_23AD()) + { + return 0; + } + + self findreacquiredirectpath(param_00); + if(self reacquiremove()) + { + self.keepclaimednodeifvalid = 0; + self.var_766 = 0; + self.a.var_1111 = 1; + if(level.var_20ED[self.team] == 0) + { + level.lastadvancetoenemytime[self.team] = gettime(); + level.var_20EC[self.team] = self; + } + + level.var_20EB[self.team] = self.origin; + level.var_20EA[self.team] = self.enemy.origin; + level.var_20ED[self.team]++; + return 1; + } + + return 0; +} + +//Function Number: 67 +func_23AE(param_00) +{ + self endon("death"); + wait 0.5; + var_01 = "" + level.var_20DD; + badplace_cylinder(var_01,5,param_00,16,64,self.team); + level.badplaces[level.badplaces.size] = var_01; + if(level.badplaces.size >= 10) + { + var_02 = []; + for(var_03 = 1;var_03 < level.badplaces.size;var_03++) + { + var_02[var_02.size] = level.badplaces[var_03]; + } + + badplace_delete(level.badplaces[0]); + anim.badplaces = var_02; + } + + level.var_20DD++; + if(level.var_20DD > 10) + { + anim.var_20DD = level.var_20DD - 20; + } +} + +//Function Number: 68 +func_23AF(param_00,param_01,param_02) +{ + if(param_00 > param_01 && param_00 < param_02) + { + return 1; + } + + return 0; +} + +//Function Number: 69 +func_23B0() +{ + if(!isdefined(self.var_CB1)) + { + return 0; + } + + var_00 = self getmuzzleangle()[1] - animscripts/utility::func_101A(self.var_CB1); + var_00 = angleclamp180(var_00); + return var_00; +} + +//Function Number: 70 +func_23B1() +{ + if(!isdefined(self.var_CB1)) + { + return 0; + } + + var_00 = self getmuzzleangle()[0] - vectortoangles(self.var_CB1 - self getmuzzlepos())[0]; + var_00 = angleclamp180(var_00); + return var_00; +} + +//Function Number: 71 +func_23B2() +{ + if(!isdefined(self.enemy)) + { + return 0; + } + + var_00 = self.enemy getshootatpos() - self getshootatpos(); + var_00 = vectornormalize(var_00); + var_01 = 360 - vectortoangles(var_00)[0]; + return angleclamp180(var_01); +} + +//Function Number: 72 +func_23B3(param_00) +{ + if(!isdefined(param_00)) + { + return 0; + } + + var_01 = param_00 - self getshootatpos(); + var_01 = vectornormalize(var_01); + var_02 = 360 - vectortoangles(var_01)[0]; + return angleclamp180(var_02); +} + +//Function Number: 73 +func_20DE() +{ + self.var_F53 = 0; + self.var_23B4 = -1; + for(;;) + { + self waittill("reload_start"); + self.var_F53 = 1; + self.var_23B4 = gettime(); + func_23B5(); + self.var_F53 = 0; + } +} + +//Function Number: 74 +func_23B5() +{ + thread func_23B6(4,"reloadtimeout"); + self endon("reloadtimeout"); + self endon("weapon_taken"); + for(;;) + { + self waittill("reload"); + var_00 = self getcurrentweapon(); + if(var_00 == "none") + { + break; + } + + if(self getcurrentweaponclipammo() >= weaponclipsize(var_00)) + { + break; + } + } + + self notify("reloadtimeout"); +} + +//Function Number: 75 +func_23B6(param_00,param_01) +{ + self endon(param_01); + wait param_00; + self notify(param_01); +} + +//Function Number: 76 +func_23B7() +{ + var_00 = self.enemy.origin - self.origin; + var_01 = lengthsquared((var_00[0],var_00[1],0)); + if(self.grenadeweapon == "flash_grenade") + { + return var_01 < 589824; + } + + return var_01 >= -25536 && var_01 <= 1562500; +} + +//Function Number: 77 +monitorflash() +{ + self endon("death"); + if(!isdefined(level.var_23B8)) + { + self endon("stop_monitoring_flash"); + } + + for(;;) + { + var_00 = undefined; + var_01 = undefined; + var_02 = undefined; + var_03 = undefined; + var_04 = undefined; + self waittill("flashbang",var_01,var_00,var_02,var_03,var_04); + if(isdefined(self.flashbangimmunity) && self.flashbangimmunity) + { + continue; + } + + if(isdefined(self.var_23B9) && self.var_23B9 != 0) + { + continue; + } + + if(isdefined(self.onsnowmobile) || isdefined(self.onatv)) + { + continue; + } + + if(isdefined(self.team) && isdefined(var_04) && self.team == var_04) + { + var_00 = 3 * var_00 - 0.75; + if(var_00 < 0) + { + continue; + } + + if(isdefined(self.teamflashbangimmunity)) + { + continue; + } + } + + var_05 = 0.2; + if(var_00 > 1 - var_05) + { + var_00 = 1; + } + else + { + var_00 = var_00 / 1 - var_05; + } + + var_06 = 4.5 * var_00; + if(var_06 < 0.25) + { + continue; + } + + self.flashingteam = var_04; + maps\_utility::flashbangstart(var_06); + self notify("doFlashBanged",var_01,var_03); + } +} + +//Function Number: 78 +func_23BC() +{ + return animscripts/utility::func_CEA(self.primaryweapon); +} + +//Function Number: 79 +issniper() +{ + return animscripts/utility::func_BEB(self.primaryweapon); +} + +//Function Number: 80 +func_23BD() +{ + return issniper() || animscripts/utility::func_BB6(); +} + +//Function Number: 81 +func_0F7B() +{ + return 1.5; +} + +//Function Number: 82 +func_0F97() +{ + return randomfloatrange(1,1.2); +} + +//Function Number: 83 +func_0FB6(param_00) +{ + if(param_00.size == 0) + { + return undefined; + } + + if(param_00.size == 1) + { + return param_00[0]; + } + + if(isdefined(self.a.var_F3E) && randomint(100) > 20) + { + foreach(var_03, var_02 in param_00) + { + if(var_02 == self.a.var_F3E) + { + if(var_03 < param_00.size - 1) + { + param_00[var_03] = param_00[param_00.size - 1]; + } + + param_00[param_00.size - 1] = undefined; + break; + } + } + } + + return param_00[randomint(param_00.size)]; +} + +//Function Number: 84 +func_0D0E() +{ + var_00 = self geteye(); + foreach(var_02 in level.players) + { + if(!self cansee(var_02)) + { + continue; + } + + var_03 = var_02 geteye(); + var_04 = vectortoangles(var_00 - var_03); + var_05 = anglestoforward(var_04); + var_06 = var_02 getplayerangles(); + var_07 = anglestoforward(var_06); + var_08 = vectordot(var_05,var_07); + if(var_08 < 0.805) + { + continue; + } + + if(common_scripts\utility::cointoss() && var_08 >= 0.996) + { + continue; + } + + return 1; + } + + return 0; +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/corner.gsc b/MW3/PC/SP/animscripts/corner.gsc new file mode 100644 index 0000000..b16da0a --- /dev/null +++ b/MW3/PC/SP/animscripts/corner.gsc @@ -0,0 +1,1431 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\corner.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 55 + * Decompile Time: 1002 ms + * Timestamp: 10/27/2023 2:18:04 AM +*******************************************************************/ + +//Function Number: 1 +func_2442(param_00,param_01) +{ + self endon("killanimscript"); + self.var_2443["exposed"]["stand"] = ::func_2476; + self.var_2443["exposed"]["crouch"] = ::func_2477; + self.var_CAF = self.node; + self.var_2444 = param_00; + self.a.var_CAE = "unknown"; + self.a.aimidlethread = undefined; + animscripts/cover_behavior::func_F71(param_01); + func_244A(); + self.var_2445 = 0; + self.var_2446 = 0; + self.var_2447 = 0; + animscripts/track::func_CC4(0); + self.var_2448 = 0; + var_02 = spawnstruct(); + if(!self.fixednode) + { + var_02.var_F37 = ::animscripts/cover_behavior::func_F37; + } + + var_02.var_F36 = ::func_0F36; + var_02.var_F54 = ::func_246B; + var_02.var_F55 = ::func_245E; + var_02.var_7A8 = ::func_0F56; + var_02.var_F57 = ::func_0F57; + var_02.idle = ::idle; + var_02.var_73C = ::func_0F61; + var_02.var_F63 = ::func_0F9E; + var_02.var_F64 = ::func_0F64; + animscripts/cover_behavior::main(var_02); +} + +//Function Number: 2 +func_2449() +{ + self.var_CB5 = undefined; + self.a.var_237C = undefined; +} + +//Function Number: 3 +func_244A() +{ + if(self.a.pose == "crouch") + { + func_246E("crouch"); + return; + } + + if(self.a.pose == "stand") + { + func_246E("stand"); + return; + } + + animscripts/utility::func_F7D(1); + self.a.pose = "crouch"; + func_246E("crouch"); +} + +//Function Number: 4 +func_244B() +{ + if(!isdefined(self.enemy)) + { + return 0; + } + + if(!isdefined(self.var_244C)) + { + self.var_244C = gettime() + randomintrange(5000,20000); + } + + if(gettime() > self.var_244C) + { + self.var_244C = gettime() + randomintrange(5000,20000); + if(isdefined(self.rambochance) && self.a.pose == "stand") + { + return 0; + } + + self.a.var_F3E = undefined; + return 1; + } + + return 0; +} + +//Function Number: 5 +func_0F36() +{ + var_00 = "stand"; + if(self.a.pose == "crouch") + { + var_00 = "crouch"; + if(self.var_CAF doesnodeallowstance("stand")) + { + if(!self.var_CAF doesnodeallowstance("crouch") || func_244B()) + { + var_00 = "stand"; + } + } + } + else if(self.var_CAF doesnodeallowstance("crouch")) + { + if(!self.var_CAF doesnodeallowstance("stand") || func_244B()) + { + var_00 = "crouch"; + } + } + + if(self.var_2448) + { + func_2470(var_00); + return; + } + + if(self.a.pose == var_00) + { + func_2471(animscripts/utility::func_D4D("alert_idle"),0.3,0.4); + } + else + { + var_01 = animscripts/utility::func_D4D("stance_change"); + func_2471(var_01,0.3,getanimlength(var_01)); + func_246E(var_00); + } + + self.var_2448 = 1; +} + +//Function Number: 6 +func_244D() +{ + wait 2; + for(;;) + { + func_2467(); + wait 0.05; + } +} + +//Function Number: 7 +func_244E(param_00,param_01) +{ + var_02 = param_01 animscripts/utility::func_244F(param_00); + if(var_02 > 60 || var_02 < -60) + { + return 0; + } + + if(param_01.type == "Cover Left" && var_02 > 14) + { + return 0; + } + + if(param_01.type == "Cover Right" && var_02 < -12) + { + return 0; + } + + return 1; +} + +//Function Number: 8 +func_2450() +{ + if(!isdefined(self.var_CB1)) + { + return 0; + } + + var_00 = self.var_CAF animscripts/utility::func_244F(self.var_CB1); + if(self.a.var_CAE == "over") + { + return var_00 < self.var_717 || self.var_716 < var_00; + } + + if(self.var_2444 == "left") + { + if(self.a.var_CAE == "B") + { + return var_00 < 0 - self.var_2451 || var_00 > 14; + } + + if(self.a.var_CAE == "A") + { + return var_00 > 0 - self.var_2451; + } + + return var_00 < -50 || var_00 > 8; + } + + if(self.a.var_CAE == "B") + { + return var_00 > self.var_2451 || var_00 < -12; + } + + if(self.a.var_CAE == "A") + { + return var_00 < self.var_2451; + } + + return var_00 > 50 || var_00 < -8; +} + +//Function Number: 9 +func_2452(param_00,param_01) +{ + var_02 = 0; + var_03 = 0; + if(isdefined(param_01)) + { + var_03 = param_00 animscripts/utility::func_244F(param_01); + } + + var_04 = []; + if(isdefined(param_00) && self.a.pose == "crouch" && var_03 > self.var_717 && self.var_716 > var_03) + { + var_04 = param_00 getvalidcoverpeekouts(); + } + + if(self.var_2444 == "left") + { + if(func_2455(var_03,-40,0)) + { + var_02 = func_2456(); + } + + if(!var_03 && var_04 < 14) + { + if(var_04 < 0 - self.var_2451) + { + } + else + { + } + } + } + else + { + if(func_2455(var_04,0,40)) + { + var_03 = func_2456(); + } + + if(!var_03 && var_04 > -12) + { + if(var_04 > self.var_2451) + { + } + else + { + } + } + } + + return animscripts/combat_utility::func_FB6(var_7B); +} + +//Function Number: 10 +func_2453() +{ + var_00 = 0; + if(animscripts/utility::func_CF3()) + { + var_00 = self.var_CAF animscripts/utility::func_244F(animscripts/utility::func_CEE()); + } + else if(self.var_748 && isdefined(self.var_CB1)) + { + var_00 = self.var_CAF animscripts/utility::func_244F(self.var_CB1); + } + + if(self.a.var_CAE == "lean") + { + return "lean"; + } + + if(self.a.var_CAE == "over") + { + return "over"; + } + + if(self.a.var_CAE == "B") + { + if(self.var_2444 == "left") + { + if(var_00 < 0 - self.var_2451) + { + return "A"; + } + } + else if(self.var_2444 == "right") + { + if(var_00 > self.var_2451) + { + return "A"; + } + } + + return "B"; + } + + if(self.a.var_CAE == "A") + { + var_02 = "B"; + if(self.var_2444 == "left") + { + if(var_00 > 0 - self.var_2451) + { + return "B"; + } + } + else if(self.var_2444 == "right") + { + if(var_00 < self.var_2451) + { + return "B"; + } + } + + return "A"; + } +} + +//Function Number: 11 +func_2454() +{ + self endon("killanimscript"); + var_00 = func_2453(); + if(var_00 == self.a.var_CAE) + { + return 0; + } + + self.var_CDD = 1; + self notify("done_changing_cover_pos"); + var_01 = self.a.var_CAE + "_to_" + var_00; + var_02 = animscripts/utility::func_CA8(var_01); + var_03 = func_246D(); + if(!self maymovetopoint(var_03)) + { + return 0; + } + + if(!self maymovefrompointtopoint(var_03,animscripts/utility::func_F99(var_02))) + { + return 0; + } + + animscripts/combat_utility::func_F9D(); + func_2459(0.3); + var_04 = self.a.pose; + self setanimlimited(animscripts/utility::func_D4D("straight_level"),0,0.2); + self setflaggedanimknob("changeStepOutPos",var_02,1,0.2,1.2); + thread func_112A("changeStepOutPos"); + if(animhasnotetrack(var_02,"start_aim")) + { + self waittillmatch("start_aim","changeStepOutPos"); + } + else + { + self waittillmatch("end","changeStepOutPos"); + } + + thread func_2457(undefined,0,0.3); + self waittillmatch("end","changeStepOutPos"); + self clearanim(var_02,0.1); + self.a.var_CAE = var_00; + self.var_CDD = 0; + self.var_CFD = gettime(); + if(self.a.pose != var_04) + { + func_246E(self.a.pose); + } + + thread func_2458(undefined,1,0.3); + return 1; +} + +//Function Number: 12 +func_2455(param_00,param_01,param_02) +{ + if(self.a.var_20A5) + { + return 0; + } + + return param_01 <= param_00 && param_00 <= param_02; +} + +//Function Number: 13 +func_2456() +{ + if(self.team == "allies") + { + return 1; + } + + if(animscripts/utility::func_F62()) + { + return 1; + } + + return 0; +} + +//Function Number: 14 +func_112A(param_00) +{ + self endon("killanimscript"); + animscripts/shared::donotetracks(param_00); +} + +//Function Number: 15 +func_2457(param_00,param_01,param_02) +{ + self.var_2447 = 1; + if(self.a.var_CAE == "lean") + { + self.a.var_237C = 1; + } + else + { + self.a.var_237C = undefined; + } + + func_245A(param_00,param_01,param_02); +} + +//Function Number: 16 +func_2458(param_00,param_01,param_02) +{ + if(self.a.var_CAE == "lean") + { + self.a.var_237C = 1; + } + else + { + self.a.var_237C = undefined; + } + + func_245A(param_00,param_01,param_02); +} + +//Function Number: 17 +func_2459(param_00) +{ + self.var_2447 = 0; + self clearanim(%add_fire,param_00); + animscripts/track::func_CC4(0,param_00); +} + +//Function Number: 18 +func_245A(param_00,param_01,param_02) +{ + self.var_245B = param_00; + self setanimlimited(%exposed_modern,1,param_02); + self setanimlimited(%exposed_aiming,1,param_02); + self setanimlimited(%add_idle,1,param_02); + animscripts/track::func_CC4(1,param_02); + var_03 = undefined; + if(isdefined(self.a.array["lean_aim_straight"])) + { + var_03 = self.a.array["lean_aim_straight"]; + } + + thread animscripts/combat_utility::aimidlethread(); + if(isdefined(self.a.var_237C)) + { + self setanimlimited(var_03,1,param_02); + self setanimlimited(animscripts/utility::func_D4D("straight_level"),0,0); + self setanimknoblimited(animscripts/utility::func_D4D("lean_aim_left"),1,param_02); + self setanimknoblimited(animscripts/utility::func_D4D("lean_aim_right"),1,param_02); + self setanimknoblimited(animscripts/utility::func_D4D("lean_aim_up"),1,param_02); + self setanimknoblimited(animscripts/utility::func_D4D("lean_aim_down"),1,param_02); + return; + } + + if(param_01) + { + self setanimlimited(animscripts/utility::func_D4D("straight_level"),1,param_02); + if(isdefined(var_03)) + { + self setanimlimited(var_03,0,0); + } + + self setanimknoblimited(animscripts/utility::func_D4D("add_aim_up"),1,param_02); + self setanimknoblimited(animscripts/utility::func_D4D("add_aim_down"),1,param_02); + self setanimknoblimited(animscripts/utility::func_D4D("add_aim_left"),1,param_02); + self setanimknoblimited(animscripts/utility::func_D4D("add_aim_right"),1,param_02); + return; + } + + self setanimlimited(animscripts/utility::func_D4D("straight_level"),0,param_02); + if(isdefined(var_03)) + { + self setanimlimited(var_03,0,0); + } + + self setanimknoblimited(animscripts/utility::func_D4D("add_turn_aim_up"),1,param_02); + self setanimknoblimited(animscripts/utility::func_D4D("add_turn_aim_down"),1,param_02); + self setanimknoblimited(animscripts/utility::func_D4D("add_turn_aim_left"),1,param_02); + self setanimknoblimited(animscripts/utility::func_D4D("add_turn_aim_right"),1,param_02); +} + +//Function Number: 19 +func_245C() +{ + if(self.a.var_CAE == "over") + { + return 1; + } + + return animscripts/combat_utility::func_F97(); +} + +//Function Number: 20 +func_245D() +{ + self.a.var_CAE = "alert"; + if(self.goalradius < 64) + { + self.goalradius = 64; + } + + self animmode("zonly_physics"); + if(self.a.pose == "stand") + { + self.var_2451 = 38; + } + else + { + self.var_2451 = 31; + } + + var_00 = self.a.pose; + func_246E(var_00); + self setdefaultaimlimits(); + var_01 = "none"; + if(animscripts/utility::func_F8C()) + { + var_01 = func_2452(self.var_CAF,animscripts/utility::func_CEE()); + } + else + { + var_01 = func_2452(self.var_CAF); + } + + if(!isdefined(var_01)) + { + return 0; + } + + var_02 = "alert_to_" + var_01; + var_03 = animscripts/utility::func_CA8(var_02); + if(var_01 == "lean" && !func_2468()) + { + return 0; + } + + if(var_01 != "over" && !func_246C(var_03,var_01 != "lean")) + { + return 0; + } + + self.a.var_CAE = var_01; + self.a.var_F3E = var_01; + if(self.a.var_CAE == "lean") + { + self setdefaultaimlimits(self.var_CAF); + } + + if(var_01 == "A" || var_01 == "B") + { + self.a.var_D19 = "cover_" + self.var_2444 + "_" + self.a.pose + "_" + var_01; + } + else if(var_01 == "over") + { + self.a.var_D19 = "cover_crouch_aim"; + } + else + { + self.a.var_D19 = "none"; + } + + self.keepclaimednodeifvalid = 1; + var_04 = 0; + self.var_CDD = 1; + self notify("done_changing_cover_pos"); + var_05 = func_245C(); + self.pushable = 0; + self setflaggedanimknoballrestart("stepout",var_03,%root,1,0.2,var_05); + thread func_112A("stepout"); + var_04 = animhasnotetrack(var_03,"start_aim"); + if(var_04) + { + self.var_CB5 = self.angles[1] + getangledelta(var_03,0,1); + self waittillmatch("start_aim","stepout"); + } + else + { + self waittillmatch("end","stepout"); + } + + if(var_01 == "B" && common_scripts\utility::cointoss() && self.var_2444 == "right") + { + self.a.var_D19 = "corner_right_martyrdom"; + } + + func_246F(var_00); + var_06 = var_01 == "over"; + func_2457(undefined,var_06,0.3); + thread animscripts/track::func_CA9(); + if(var_04) + { + self waittillmatch("end","stepout"); + self.var_CB5 = undefined; + } + + func_2458(undefined,1,0.2); + self clearanim(%cover,0.1); + self clearanim(%corner,0.1); + self.var_CDD = 0; + self.var_CFD = gettime(); + self.pushable = 1; + return 1; +} + +//Function Number: 21 +func_245E() +{ + self.keepclaimednodeifvalid = 1; + if(isdefined(self.rambochance) && randomfloat(1) < self.rambochance) + { + if(func_0F8B()) + { + return 1; + } + } + + if(!func_245D()) + { + return 0; + } + + func_0F88(); + if(isdefined(self.var_CB1)) + { + var_00 = lengthsquared(self.origin - self.var_CB1); + if(animscripts/utility::func_BB6() && var_00 < squared(512) || self.a.rockets < 1) + { + if(self.a.pose == "stand") + { + animscripts/shared::func_F87(%rpg_stand_throw); + } + else + { + animscripts/shared::func_F87(%rpg_crouch_throw); + } + + thread func_2478(); + return; + } + } + + func_2465(); + self.keepclaimednodeifvalid = 0; + return 1; +} + +//Function Number: 22 +func_245F(param_00) +{ + if(!isdefined(self.var_F91)) + { + return 1; + } + + return gettime() - self.var_F91 > param_00 * 1000; +} + +//Function Number: 23 +func_0F8B() +{ + if(!animscripts/utility::func_F8C()) + { + return 0; + } + + var_00 = 0; + var_01 = 90; + var_02 = self.var_CAF animscripts/utility::func_244F(animscripts/utility::func_CEE()); + if(self.var_2444 == "left") + { + var_02 = 0 - var_02; + } + + if(var_02 > 30) + { + var_01 = 45; + if(self.var_2444 == "left") + { + var_00 = 45; + } + else + { + var_00 = -45; + } + } + + var_03 = "rambo" + var_01; + if(!animscripts/utility::func_F8D(var_03)) + { + return 0; + } + + var_04 = animscripts/utility::func_CA8(var_03); + var_05 = func_246D(48); + if(!self maymovetopoint(var_05)) + { + return 0; + } + + self.var_CFD = gettime(); + self animmode("zonly_physics"); + self.keepclaimednodeifvalid = 1; + self.isrambo = 1; + self.a.var_F3E = "rambo"; + self.var_CDD = 1; + thread animscripts/shared::func_F90(var_00); + self setflaggedanimknoballrestart("rambo",var_04,%body,1,0,1); + animscripts/shared::donotetracks("rambo"); + self notify("rambo_aim_end"); + self.var_CDD = 0; + self.keepclaimednodeifvalid = 0; + self.var_F91 = gettime(); + self.var_CDD = 0; + self.isrambo = undefined; + return 1; +} + +//Function Number: 24 +func_0F88() +{ + maps\_gameskill::didsomethingotherthanshooting(); + for(;;) + { + for(;;) + { + if(isdefined(self.var_CDC)) + { + break; + } + + if(!isdefined(self.var_CB1)) + { + self waittill("do_slow_things"); + waittillframeend; + if(isdefined(self.var_CB1)) + { + continue; + } + + break; + } + + if(!self.bulletsinclip) + { + break; + } + + if(func_2450()) + { + if(!func_2454()) + { + if(func_2453() == self.a.var_CAE) + { + break; + } + + func_2460(0.2); + continue; + } + + if(func_2450()) + { + break; + } + + continue; + } + + func_2462(1); + self clearanim(%add_fire,0.2); + } + + if(func_2464(self.a.var_CAE != "lean")) + { + break; + } + + if(func_2450() && func_2454()) + { + continue; + } + + func_2460(0.2); + } +} + +//Function Number: 25 +func_2460(param_00) +{ + thread func_2461(param_00); + var_01 = gettime(); + func_2462(0); + self notify("stopNotifyStopShootingAfterTime"); + var_02 = gettime() - var_01 / 1000; + if(var_02 < param_00) + { + wait param_00 - var_02; + } +} + +//Function Number: 26 +func_2461(param_00) +{ + self endon("killanimscript"); + self endon("stopNotifyStopShootingAfterTime"); + wait param_00; + self notify("stopShooting"); +} + +//Function Number: 27 +func_2462(param_00) +{ + self endon("return_to_cover"); + if(param_00) + { + thread func_0FB3(); + } + + thread animscripts/combat_utility::aimidlethread(); + animscripts/combat_utility::func_F06(); +} + +//Function Number: 28 +func_0FB3() +{ + self endon("killanimscript"); + self notify("newAngleRangeCheck"); + self endon("newAngleRangeCheck"); + self endon("take_cover_at_corner"); + for(;;) + { + if(func_2450()) + { + break; + } + + wait 0.1; + } + + self notify("stopShooting"); +} + +//Function Number: 29 +func_2463() +{ + self.enemy endon("death"); + self endon("enemy"); + self endon("stopshowstate"); + wait 0.05; +} + +//Function Number: 30 +func_2464(param_00) +{ + if(param_00) + { + var_01 = func_246D(); + if(!self maymovetopoint(var_01)) + { + return 0; + } + + return self maymovefrompointtopoint(var_01,self.var_CAF.origin); + } + + return self maymovetopoint(self.var_CAF.origin); +} + +//Function Number: 31 +func_2465() +{ + animscripts/combat_utility::func_F85(); + var_00 = animscripts/utility::func_F4C(); + self notify("take_cover_at_corner"); + self.var_CDD = 1; + self notify("done_changing_cover_pos"); + var_01 = self.a.var_CAE + "_to_alert"; + var_02 = animscripts/utility::func_CA8(var_01); + func_2459(0.3); + var_03 = 0; + if(self.a.var_CAE != "lean" && var_00 && animscripts/utility::func_F8D(var_01 + "_reload") && randomfloat(100) < 75) + { + var_02 = animscripts/utility::func_CA8(var_01 + "_reload"); + var_03 = 1; + } + + var_04 = func_245C(); + self clearanim(%body,0.1); + self setflaggedanimrestart("hide",var_02,1,0.1,var_04); + animscripts/shared::donotetracks("hide"); + if(var_03) + { + animscripts/weaponlist::func_CD0(); + } + + self.var_CDD = 0; + if(self.var_2444 == "left") + { + self.a.var_D19 = "cover_left"; + } + else + { + self.a.var_D19 = "cover_right"; + } + + self.keepclaimednodeifvalid = 0; + self clearanim(var_02,0.2); +} + +//Function Number: 32 +func_0F64() +{ + if(!animscripts/utility::func_F8D("blind_fire")) + { + return 0; + } + + self animmode("zonly_physics"); + self.keepclaimednodeifvalid = 1; + self setflaggedanimknoballrestart("blindfire",animscripts/utility::func_CA8("blind_fire"),%body,1,0,1); + animscripts/shared::donotetracks("blindfire"); + self.keepclaimednodeifvalid = 0; + return 1; +} + +//Function Number: 33 +func_2466(param_00,param_01,param_02) +{ + if(!isdefined(param_02)) + { + param_02 = (1,1,1); + } + + for(var_03 = 0;var_03 < 100;var_03++) + { + wait 0.05; + } +} + +//Function Number: 34 +func_0F9E(param_00) +{ + return func_0F61(param_00,1); +} + +//Function Number: 35 +func_0F61(param_00,param_01) +{ + if(!self maymovetopoint(func_246D())) + { + return 0; + } + + if(isdefined(self.dontevershoot) || isdefined(param_00.var_FA0)) + { + return 0; + } + + var_02 = undefined; + if(isdefined(self.rambochance) && randomfloat(1) < self.rambochance) + { + if(isdefined(self.a.array["grenade_rambo"])) + { + var_02 = animscripts/utility::func_D4D("grenade_rambo"); + } + } + + if(!isdefined(var_02)) + { + if(isdefined(param_01) && param_01) + { + if(!isdefined(self.a.array["grenade_safe"])) + { + return 0; + } + + var_02 = animscripts/utility::func_D4D("grenade_safe"); + } + else + { + if(!isdefined(self.a.array["grenade_exposed"])) + { + return 0; + } + + var_02 = animscripts/utility::func_D4D("grenade_exposed"); + } + } + + self animmode("zonly_physics"); + self.keepclaimednodeifvalid = 1; + var_03 = animscripts/combat_utility::func_FA1(param_00,var_02); + self.keepclaimednodeifvalid = 0; + return var_03; +} + +//Function Number: 36 +func_2467() +{ +} + +//Function Number: 37 +func_0F56(param_00) +{ + if(!isdefined(self.a.array["alert_to_look"])) + { + return 0; + } + + self animmode("zonly_physics"); + self.keepclaimednodeifvalid = 1; + if(!func_0F94()) + { + return 0; + } + + animscripts/shared::func_F93(animscripts/utility::func_D4D("look_idle"),param_00,::func_246A); + var_01 = undefined; + if(animscripts/utility::func_F4C()) + { + var_01 = animscripts/utility::func_D4D("look_to_alert_fast"); + } + else + { + var_01 = animscripts/utility::func_D4D("look_to_alert"); + } + + self setflaggedanimknoballrestart("looking_end",var_01,%body,1,0.1,1); + animscripts/shared::donotetracks("looking_end"); + self animmode("zonly_physics"); + self.keepclaimednodeifvalid = 0; + return 1; +} + +//Function Number: 38 +func_2468() +{ + var_00 = self geteye(); + var_01 = anglestoright(self.var_CAF.angles); + if(self.var_2444 == "right") + { + var_00 = var_00 + var_01 * 30; + } + else + { + var_00 = var_00 - var_01 * 30; + } + + var_02 = var_00 + anglestoforward(self.var_CAF.angles) * 30; + return sighttracepassed(var_00,var_02,1,self); +} + +//Function Number: 39 +func_0F94() +{ + if(isdefined(self.var_CAF.var_F95)) + { + return 0; + } + + if(isdefined(self.var_2469) && gettime() < self.var_2469) + { + return 0; + } + + if(!func_2468()) + { + self.var_2469 = gettime() + 3000; + return 0; + } + + var_00 = animscripts/utility::func_D4D("alert_to_look"); + self setflaggedanimknoball("looking_start",var_00,%body,1,0.2,1); + animscripts/shared::donotetracks("looking_start"); + return 1; +} + +//Function Number: 40 +func_246A() +{ + return self maymovetopoint(self.var_CAF.origin); +} + +//Function Number: 41 +func_0F57() +{ + return 0; +} + +//Function Number: 42 +func_246B() +{ + var_00 = animscripts/utility::func_CA8("reload"); + self setflaggedanimknobrestart("cornerReload",var_00,1,0.2); + animscripts/shared::donotetracks("cornerReload"); + animscripts/weaponlist::func_CD0(); + self setanimrestart(animscripts/utility::func_D4D("alert_idle"),1,0.2); + self clearanim(var_00,0.2); + return 1; +} + +//Function Number: 43 +func_246C(param_00,param_01) +{ + if(param_01) + { + var_02 = func_246D(); + if(!self maymovetopoint(var_02)) + { + return 0; + } + + return self maymovefrompointtopoint(var_02,animscripts/utility::func_F99(param_00)); + } + + return self maymovetopoint(animscripts/utility::func_F99(param_01)); +} + +//Function Number: 44 +func_246D(param_00) +{ + var_01 = self.var_CAF.angles; + var_02 = anglestoright(var_01); + if(!isdefined(param_00)) + { + param_00 = 36; + } + + switch(self.script) + { + case "cover_left": + var_02 = var_02 * 0 - param_00; + break; + + case "cover_right": + var_02 = var_02 * param_00; + break; + + default: + break; + } + + return self.var_CAF.origin + (var_02[0],var_02[1],0); +} + +//Function Number: 45 +idle() +{ + self endon("end_idle"); + for(;;) + { + var_00 = randomint(2) == 0 && animscripts/utility::func_F8D("alert_idle_twitch"); + if(var_00) + { + var_01 = animscripts/utility::func_CA8("alert_idle_twitch"); + } + else + { + var_01 = animscripts/utility::func_D4D("alert_idle"); + } + + func_0F92(var_01,var_00); + } +} + +//Function Number: 46 +func_0F5B() +{ + if(!animscripts/utility::func_F8D("alert_idle_flinch")) + { + return 0; + } + + func_0F92(animscripts/utility::func_CA8("alert_idle_flinch"),1); + return 1; +} + +//Function Number: 47 +func_0F92(param_00,param_01) +{ + if(param_01) + { + self setflaggedanimknoballrestart("idle",param_00,%body,1,0.1,1); + } + else + { + self setflaggedanimknoball("idle",param_00,%body,1,0.1,1); + } + + animscripts/shared::donotetracks("idle"); +} + +//Function Number: 48 +func_246E(param_00) +{ + [[ self.var_2443["hiding"][param_00] ]](); + [[ self.var_2443["exposed"][param_00] ]](); +} + +//Function Number: 49 +func_246F(param_00) +{ + [[ self.var_2443["exposed"][param_00] ]](); +} + +//Function Number: 50 +func_2470(param_00) +{ + if(self.a.pose == param_00) + { + func_246E(param_00); + return; + } + + self setflaggedanimknoballrestart("changeStance",animscripts/utility::func_D4D("stance_change"),%body); + func_246E(param_00); + animscripts/shared::donotetracks("changeStance"); + wait 0.2; +} + +//Function Number: 51 +func_2471(param_00,param_01,param_02) +{ + var_03 = animscripts/utility::func_2472(); + var_04 = animscripts/utility::func_2473(); + var_05 = var_03 + self.var_2474; + self orientmode("face angle",var_05); + self animmode("normal"); + thread animscripts/shared::func_F7C(var_04,param_01); + self setflaggedanimknoballrestart("coveranim",param_00,%body,1,param_01); + animscripts/notetracks::func_D4F(param_02,"coveranim"); + while(animscripts/utility::func_D61(self.angles[1] - var_05) > 1) + { + animscripts/notetracks::func_D4F(0.1,"coveranim"); + } + + self animmode("zonly_physics"); + if(self.var_2444 == "left") + { + self.a.var_D19 = "cover_left"; + return; + } + + self.a.var_D19 = "cover_right"; +} + +//Function Number: 52 +func_2475() +{ + self endon("killanimscript"); + wait 0.05; +} + +//Function Number: 53 +func_2476() +{ + if(!isdefined(self.a.array)) + { + } + + self.a.array["add_aim_up"] = %exposed_aim_8; + self.a.array["add_aim_down"] = %exposed_aim_2; + self.a.array["add_aim_left"] = %exposed_aim_4; + self.a.array["add_aim_right"] = %exposed_aim_6; + self.a.array["add_turn_aim_up"] = %exposed_turn_aim_8; + self.a.array["add_turn_aim_down"] = %exposed_turn_aim_2; + self.a.array["add_turn_aim_left"] = %exposed_turn_aim_4; + self.a.array["add_turn_aim_right"] = %exposed_turn_aim_6; + self.a.array["straight_level"] = %exposed_aim_5; + if(self.a.var_CAE == "lean") + { + var_00 = self.a.array["lean_fire"]; + var_01 = self.a.array["lean_single"]; + self.a.array["fire"] = var_00; + self.a.array["single"] = animscripts/utility::array(var_01); + self.a.array["semi2"] = var_01; + self.a.array["semi3"] = var_01; + self.a.array["semi4"] = var_01; + self.a.array["semi5"] = var_01; + self.a.array["burst2"] = var_00; + self.a.array["burst3"] = var_00; + self.a.array["burst4"] = var_00; + self.a.array["burst5"] = var_00; + self.a.array["burst6"] = var_00; + } + else + { + self.a.array["fire"] = %exposed_shoot_auto_v2; + self.a.array["semi2"] = %exposed_shoot_semi2; + self.a.array["semi3"] = %exposed_shoot_semi3; + self.a.array["semi4"] = %exposed_shoot_semi4; + self.a.array["semi5"] = %exposed_shoot_semi5; + if(animscripts/utility::func_C97()) + { + self.a.array["single"] = animscripts/utility::array(%shotgun_stand_fire_1a); + } + else + { + self.a.array["single"] = animscripts/utility::array(%exposed_shoot_semi1); + } + + self.a.array["burst2"] = %exposed_shoot_burst3; + self.a.array["burst3"] = %exposed_shoot_burst3; + self.a.array["burst4"] = %exposed_shoot_burst4; + self.a.array["burst5"] = %exposed_shoot_burst5; + self.a.array["burst6"] = %exposed_shoot_burst6; + } + + self.a.array["exposed_idle"] = animscripts/utility::array(%exposed_idle_alert_v1,%exposed_idle_alert_v2,%exposed_idle_alert_v3); +} + +//Function Number: 54 +func_2477() +{ + if(!isdefined(self.a.array)) + { + } + + if(self.a.var_CAE == "over") + { + self.a.array["add_aim_up"] = %covercrouch_aim8_add; + self.a.array["add_aim_down"] = %covercrouch_aim2_add; + self.a.array["add_aim_left"] = %covercrouch_aim4_add; + self.a.array["add_aim_right"] = %covercrouch_aim6_add; + self.a.array["straight_level"] = %covercrouch_aim5; + var_00["fire"] = %exposed_shoot_auto_v2; + if(animscripts/utility::func_C97()) + { + } + else + { + } + + self.a.array["exposed_idle"] = animscripts/utility::array(%exposed_idle_alert_v1,%exposed_idle_alert_v2,%exposed_idle_alert_v3); + return; + } + + if(self.a.var_CAE == "lean") + { + var_01 = self.a.array["lean_fire"]; + var_02 = self.a.array["lean_single"]; + self.a.array["fire"] = var_01; + self.a.array["single"] = animscripts/utility::array(var_02); + self.a.array["semi2"] = var_02; + self.a.array["semi3"] = var_02; + self.a.array["semi4"] = var_02; + self.a.array["semi5"] = var_02; + self.a.array["burst2"] = var_01; + self.a.array["burst3"] = var_01; + self.a.array["burst4"] = var_01; + self.a.array["burst5"] = var_01; + self.a.array["burst6"] = var_01; + } + else + { + self.a.array["fire"] = %exposed_crouch_shoot_auto_v2; + self.a.array["semi2"] = %exposed_crouch_shoot_semi2; + self.a.array["semi3"] = %exposed_crouch_shoot_semi3; + self.a.array["semi4"] = %exposed_crouch_shoot_semi4; + self.a.array["semi5"] = %exposed_crouch_shoot_semi5; + if(animscripts/utility::func_C97()) + { + self.a.array["single"] = animscripts/utility::array(%shotgun_crouch_fire); + } + else + { + self.a.array["single"] = animscripts/utility::array(%exposed_crouch_shoot_semi1); + } + + self.a.array["burst2"] = %exposed_crouch_shoot_burst3; + self.a.array["burst3"] = %exposed_crouch_shoot_burst3; + self.a.array["burst4"] = %exposed_crouch_shoot_burst4; + self.a.array["burst5"] = %exposed_crouch_shoot_burst5; + self.a.array["burst6"] = %exposed_crouch_shoot_burst6; + } + + self.a.array["add_aim_up"] = %exposed_crouch_aim_8; + self.a.array["add_aim_down"] = %exposed_crouch_aim_2; + self.a.array["add_aim_left"] = %exposed_crouch_aim_4; + self.a.array["add_aim_right"] = %exposed_crouch_aim_6; + self.a.array["add_turn_aim_up"] = %exposed_crouch_turn_aim_8; + self.a.array["add_turn_aim_down"] = %exposed_crouch_turn_aim_2; + self.a.array["add_turn_aim_left"] = %exposed_crouch_turn_aim_4; + self.a.array["add_turn_aim_right"] = %exposed_crouch_turn_aim_6; + self.a.array["straight_level"] = %exposed_crouch_aim_5; + self.a.array["exposed_idle"] = animscripts/utility::array(%exposed_crouch_idle_alert_v1,%exposed_crouch_idle_alert_v2,%exposed_crouch_idle_alert_v3); +} + +//Function Number: 55 +func_2478() +{ + self notify("killanimscript"); + thread animscripts/combat::main(); +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/cover_arrival.gsc b/MW3/PC/SP/animscripts/cover_arrival.gsc new file mode 100644 index 0000000..cb0ed10 --- /dev/null +++ b/MW3/PC/SP/animscripts/cover_arrival.gsc @@ -0,0 +1,1534 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\cover_arrival.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 49 + * Decompile Time: 869 ms + * Timestamp: 10/27/2023 2:18:07 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self endon("killanimscript"); + self endon("abort_approach"); + var_00 = self.var_1162; + var_01 = level.var_1164[self.var_1163][var_00]; + if(!isdefined(self.heat)) + { + thread func_116A(); + } + + self clearanim(%body,0.2); + self setflaggedanimrestart("coverArrival",var_01,1,0.2,self.var_1165); + animscripts/shared::donotetracks("coverArrival",::func_1168); + var_02 = level.var_1166[self.var_1163]; + if(isdefined(var_02)) + { + self.a.pose = var_02; + } + + self.a.movement = "stop"; + self.a.var_10DF = self.var_1163; + self clearanim(%root,0.3); + self.var_1167 = undefined; +} + +//Function Number: 2 +func_1168(param_00) +{ + if(param_00 == "start_aim") + { + if(self.a.pose == "stand") + { + animscripts/animset::func_C94(); + } + else if(self.a.pose == "crouch") + { + animscripts/animset::func_C99(); + } + else + { + } + + animscripts/combat::func_110E(); + self.var_110A = 0; + animscripts/combat_utility::func_110B(0); + thread animscripts/track::func_CA9(); + } +} + +//Function Number: 3 +func_1169() +{ + if(!isdefined(self.node)) + { + return 0; + } + + if(isdefined(self.enemy) && self seerecently(self.enemy,1.5) && distancesquared(self.origin,self.enemy.origin) < 250000) + { + return !self iscovervalidagainstenemy(); + } + + return 0; +} + +//Function Number: 4 +func_116A() +{ + self endon("killanimscript"); + for(;;) + { + if(!isdefined(self.node)) + { + return; + } + + if(func_1169()) + { + self clearanim(%root,0.3); + self notify("abort_approach"); + self.var_1167 = gettime(); + return; + } + + wait 0.1; + } +} + +//Function Number: 5 +func_116B(param_00) +{ + if(isdefined(self.heat)) + { + return 0; + } + + if(param_00 == "left" || param_00 == "left_crouch") + { + return 90; + } + else if(param_00 == "right" || param_00 == "right_crouch") + { + return -90; + } + + return 0; +} + +//Function Number: 6 +func_116C(param_00) +{ + if(!animscripts/utility::func_F79()) + { + return 0; + } + + if(!isdefined(param_00.turretinfo)) + { + return 0; + } + + if(param_00.type != "Cover Stand" && param_00.type != "Cover Prone" && param_00.type != "Cover Crouch") + { + return 0; + } + + if(isdefined(self.enemy) && distancesquared(self.enemy.origin,param_00.origin) < 65536) + { + return 0; + } + + if(animscripts/utility::func_116D() > 40 || animscripts/utility::func_116D() < -40) + { + return 0; + } + + return 1; +} + +//Function Number: 7 +func_116E(param_00) +{ + if(func_116C(param_00)) + { + if(param_00.type == "Cover Stand") + { + return "stand_saw"; + } + + if(param_00.type == "Cover Crouch") + { + return "crouch_saw"; + } + else if(param_00.type == "Cover Prone") + { + return "prone_saw"; + } + } + + if(!isdefined(level.var_116F[param_00.type])) + { + return; + } + + if(isdefined(param_00.arrivalstance)) + { + var_01 = param_00.arrivalstance; + } + else + { + var_01 = var_01 gethighestnodestance(); + } + + if(var_01 == "prone") + { + var_01 = "crouch"; + } + + var_02 = level.var_116F[param_00.type][var_01]; + if(func_11B2() && var_02 == "exposed") + { + var_02 = "exposed_ready"; + } + + if(animscripts/utility::func_CB2()) + { + var_03 = var_02 + "_cqb"; + if(isdefined(level.var_1164[var_03])) + { + var_02 = var_03; + } + } + + return var_02; +} + +//Function Number: 8 +func_1171(param_00) +{ + if(func_116C(param_00)) + { + if(param_00.type == "Cover Stand") + { + return "stand_saw"; + } + + if(param_00.type == "Cover Crouch") + { + return "crouch_saw"; + } + else if(param_00.type == "Cover Prone") + { + return "prone_saw"; + } + } + + if(!isdefined(level.var_116F[param_00.type])) + { + return; + } + + if(isdefined(level.var_1172[param_00.type]) && level.var_1172[param_00.type] != self.a.pose) + { + return; + } + + var_01 = self.a.pose; + if(var_01 == "prone") + { + var_01 = "crouch"; + } + + var_02 = level.var_116F[param_00.type][var_01]; + if(func_11B2() && var_02 == "exposed") + { + var_02 = "exposed_ready"; + } + + if(animscripts/utility::func_CB2()) + { + var_03 = var_02 + "_cqb"; + if(isdefined(level.var_1173[var_03])) + { + var_02 = var_03; + } + } + + return var_02; +} + +//Function Number: 9 +func_1174(param_00) +{ + if(isdefined(self.heat)) + { + return "heat"; + } + + if(isdefined(param_00.arrivalstance)) + { + var_01 = param_00.arrivalstance; + } + else + { + var_01 = var_01 gethighestnodestance(); + } + + if(var_01 == "prone") + { + var_01 = "crouch"; + } + + if(var_01 == "crouch") + { + var_02 = "exposed_crouch"; + } + else + { + var_02 = "exposed"; + } + + if(var_02 == "exposed" && func_11B2()) + { + var_02 = var_02 + "_ready"; + } + + if(animscripts/utility::func_CB2()) + { + return var_02 + "_cqb"; + } + + return var_02; +} + +//Function Number: 10 +func_1175(param_00) +{ + var_01 = spawnstruct(); + if(isdefined(param_00) && isdefined(level.var_1176[param_00.type])) + { + var_01.var_1176 = level.var_1176[param_00.type]; + var_01.var_1177 = level.var_1177[param_00.type]; + } + else + { + var_01.var_1176 = 9; + var_01.var_1177 = -1; + } + + return var_01; +} + +//Function Number: 11 +func_1178(param_00) +{ + if(!isdefined(self.enemy)) + { + return 0; + } + + if(animscripts/combat_utility::func_F08(0.5)) + { + return 0; + } + + if(animscripts/utility::func_F4C()) + { + return 0; + } + + if(isdefined(level.var_1179[param_00])) + { + return 0; + } + + if(param_00 == "left_crouch" || param_00 == "right_crouch") + { + return 0; + } + + return animscripts/utility::func_117A(self.enemy getshootatpos(),self.node); +} + +//Function Number: 12 +func_117B(param_00,param_01) +{ + var_02 = anglestoright(param_00); + var_03 = anglestoforward(param_00); + return var_03 * param_01[0] + var_02 * 0 - param_01[1]; +} + +//Function Number: 13 +func_117C() +{ + if(isdefined(self.scriptedarrivalent)) + { + return self.scriptedarrivalent; + } + + if(isdefined(self.node)) + { + return self.node; + } + + return undefined; +} + +//Function Number: 14 +func_117D(param_00,param_01) +{ + if(param_01 == "stand_saw") + { + var_02 = (param_00.turretinfo.origin[0],param_00.turretinfo.origin[1],param_00.origin[2]); + var_03 = anglestoforward((0,param_00.turretinfo.angles[1],0)); + var_04 = anglestoright((0,param_00.turretinfo.angles[1],0)); + var_02 = var_02 + var_03 * -32.545 - var_04 * 6.899; + } + else if(var_02 == "crouch_saw") + { + var_02 = (param_01.turretinfo.origin[0],param_01.turretinfo.origin[1],param_01.origin[2]); + var_03 = anglestoforward((0,param_00.turretinfo.angles[1],0)); + var_04 = anglestoright((0,param_00.turretinfo.angles[1],0)); + var_02 = var_02 + var_03 * -32.545 - var_04 * 6.899; + } + else if(var_02 == "prone_saw") + { + var_02 = (param_01.turretinfo.origin[0],param_01.turretinfo.origin[1],param_01.origin[2]); + var_03 = anglestoforward((0,param_00.turretinfo.angles[1],0)); + var_04 = anglestoright((0,param_00.turretinfo.angles[1],0)); + var_02 = var_02 + var_03 * -37.36 - var_04 * 13.279; + } + else if(isdefined(self.scriptedarrivalent)) + { + var_02 = self.goalpos; + } + else + { + var_02 = param_01.origin; + } + + return var_02; +} + +//Function Number: 15 +func_117E() +{ + if(isdefined(self getnegotiationstartnode())) + { + return 0; + } + + if(isdefined(self.disablearrivals) && self.disablearrivals) + { + return 0; + } + + return 1; +} + +//Function Number: 16 +func_1180(param_00,param_01,param_02) +{ + if(isdefined(level.var_1179[param_00])) + { + return 0; + } + + if(param_00 == "stand" || param_00 == "crouch") + { + if(animscripts/utility::func_D61(vectortoyaw(param_01) - param_02.angles[1] + 180) < 60) + { + return 0; + } + } + + if(func_1169() || isdefined(self.var_1167) && self.var_1167 + 500 > gettime()) + { + return 0; + } + + return 1; +} + +//Function Number: 17 +func_10A9(param_00) +{ + self endon("killanimscript"); + if(isdefined(self.heat)) + { + thread func_118B(); + return; + } + + if(param_00) + { + self.var_779 = 1; + } + + self.a.var_10DF = undefined; + thread func_118B(); + self waittill("cover_approach",var_01); + if(!func_117E()) + { + return; + } + + thread func_10A9(0); + var_02 = "exposed"; + var_03 = self.pathgoalpos; + var_04 = vectortoyaw(var_01); + var_05 = var_04; + var_06 = func_117C(); + if(isdefined(var_06)) + { + var_02 = func_116E(var_06); + if(isdefined(var_02) && var_02 != "exposed") + { + var_03 = func_117D(var_06,var_02); + var_04 = var_06.angles[1]; + var_05 = animscripts/utility::func_F41(var_06); + } + } + else if(func_11B2()) + { + if(animscripts/utility::func_CB2()) + { + var_02 = "exposed_ready_cqb"; + } + else + { + var_02 = "exposed_ready"; + } + } + + if(!func_1180(var_02,var_01,var_06)) + { + return; + } + + func_1183(var_02,var_03,var_04,var_05,var_01); +} + +//Function Number: 18 +func_1181(param_00,param_01,param_02,param_03,param_04) +{ + if(isdefined(self.disablearrivals) && self.disablearrivals) + { + return 0; + } + + if(abs(self getmotionangle()) > 45 && isdefined(self.enemy) && vectordot(anglestoforward(self.angles),vectornormalize(self.enemy.origin - self.origin)) > 0.8) + { + return 0; + } + + if(self.a.pose != "stand" || self.a.movement != "run" && !animscripts/utility::func_10B9()) + { + return 0; + } + + if(animscripts/utility::func_D61(param_04 - self.angles[1]) > 30) + { + if(isdefined(self.enemy) && self cansee(self.enemy) && distancesquared(self.origin,self.enemy.origin) < 65536) + { + if(vectordot(anglestoforward(self.angles),self.enemy.origin - self.origin) > 0) + { + return 0; + } + } + } + + if(!func_11B1(param_00,param_01,param_02,param_03,0)) + { + return 0; + } + + return 1; +} + +//Function Number: 19 +func_1182(param_00,param_01) +{ + if(!isdefined(param_00)) + { + return; + } + + for(;;) + { + if(!isdefined(self.pathgoalpos)) + { + func_1197(); + } + + var_02 = distance(self.origin,self.pathgoalpos); + if(var_02 <= param_01 + 8) + { + break; + } + + var_03 = var_02 - param_01 / 250 - 0.1; + if(var_03 < 0.05) + { + var_03 = 0.05; + } + + wait var_03; + } +} + +//Function Number: 20 +func_1183(param_00,param_01,param_02,param_03,param_04) +{ + self endon("killanimscript"); + self endon("cover_approach"); + var_05 = func_117C(); + var_06 = func_1175(var_05); + var_07 = var_06.var_1176; + var_08 = var_06.var_1177; + var_09 = vectordot(param_04,anglestoforward(var_05.angles)) >= 0; + var_06 = func_1189(param_01,param_03,param_00,param_04,var_07,var_08,var_09); + if(var_06.var_1162 < 0) + { + return; + } + + var_0A = var_06.var_1162; + if(level.var_1184 && var_0A <= 6 && var_09) + { + self endon("goal_changed"); + self.var_10AD = level.var_1185[param_00]; + func_1182(var_05,self.var_10AD); + var_0B = vectornormalize(param_01 - self.origin); + var_06 = func_1189(param_01,param_03,param_00,var_0B,var_07,var_08,var_09); + self.var_10AD = length(level.var_1186[param_00][var_0A]); + func_1182(var_05,self.var_10AD); + if(!self maymovetopoint(param_01)) + { + self.var_10AD = undefined; + return; + } + + if(var_06.var_1162 < 0) + { + self.var_10AD = undefined; + return; + } + + var_0A = var_06.var_1162; + var_0C = param_03 - level.var_1187[param_00][var_0A]; + } + else + { + self setruntopos(self.var_1188); + self waittill("runto_arrived"); + var_0C = param_04 - level.var_1187[param_01][var_0C]; + if(!func_1181(param_01,param_03,param_00,var_0A,var_0C)) + { + return; + } + } + + self.var_1162 = var_0A; + self.var_1163 = param_00; + self.var_10AD = undefined; + self startcoverarrival(self.var_1188,var_0C); +} + +//Function Number: 21 +func_1189(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + var_07 = spawnstruct(); + func_11A8(var_07,param_02,1,param_01,param_03,param_04,param_05); + func_11AA(var_07,param_04); + var_08 = spawnstruct(); + var_09 = (0,0,0); + var_08.var_1162 = -1; + var_0A = 2; + for(var_0B = 1;var_0B <= var_0A;var_0B++) + { + var_08.var_1162 = var_07.var_118A[var_0B]; + if(!func_11B1(param_00,param_01,param_02,var_08.var_1162,param_06)) + { + continue; + } + + break; + } + + if(var_0B > var_0A) + { + var_08.var_1162 = -1; + return var_08; + } + + var_0C = distancesquared(param_00,self.origin); + var_0D = distancesquared(param_00,self.var_1188); + if(var_0C < var_0D * 2 * 2) + { + if(var_0C < var_0D) + { + var_08.var_1162 = -1; + return var_08; + } + + if(!level.var_1184 || !param_06) + { + var_0E = vectornormalize(self.var_1188 - self.origin); + var_0F = param_01 - level.var_1187[param_02][var_08.var_1162]; + var_10 = anglestoforward((0,var_0F,0)); + var_11 = vectordot(var_0E,var_10); + if(var_11 < 0.707) + { + var_08.var_1162 = -1; + return var_08; + } + } + } + + return var_08; +} + +//Function Number: 22 +func_118B() +{ + self endon("killanimscript"); + self endon("move_interrupt"); + self notify("doing_last_minute_exposed_approach"); + self endon("doing_last_minute_exposed_approach"); + thread func_118C(); + for(;;) + { + func_1192(); + for(;;) + { + common_scripts\utility::waittill_any("goal_changed","goal_changed_previous_frame"); + if(isdefined(self.var_1188) && isdefined(self.pathgoalpos) && distance2d(self.var_1188,self.pathgoalpos) < 1) + { + continue; + } + + break; + } + } +} + +//Function Number: 23 +func_118C() +{ + self endon("killanimscript"); + self endon("doing_last_minute_exposed_approach"); + for(;;) + { + self waittill("goal_changed"); + wait 0.05; + self notify("goal_changed_previous_frame"); + } +} + +//Function Number: 24 +func_118D(param_00,param_01) +{ + if(!isdefined(self.pathgoalpos)) + { + return 0; + } + + if(isdefined(self.disablearrivals) && self.disablearrivals) + { + return 0; + } + + if(isdefined(self.var_118E)) + { + if(!self [[ self.var_118E ]](param_00)) + { + return 0; + } + } + else + { + if(!self.var_781 && !isdefined(param_00) || param_00.type == "Path") + { + return 0; + } + + if(self.a.pose != "stand") + { + return 0; + } + } + + if(func_1169() || isdefined(self.var_1167) && self.var_1167 + 500 > gettime()) + { + return 0; + } + + if(!self maymovetopoint(self.pathgoalpos)) + { + return 0; + } + + return 1; +} + +//Function Number: 25 +func_118F() +{ + for(;;) + { + if(!isdefined(self.pathgoalpos)) + { + func_1197(); + } + + var_00 = func_117C(); + if(isdefined(var_00) && !isdefined(self.heat)) + { + var_01 = var_00.origin; + } + else + { + var_01 = self.pathgoalpos; + } + + var_02 = distance(self.origin,var_01); + var_03 = level.var_1190; + if(var_02 <= var_03 + 8) + { + break; + } + + var_04 = var_02 - level.var_1190 / 250 - 0.1; + if(var_04 < 0) + { + break; + } + + if(var_04 < 0.05) + { + var_04 = 0.05; + } + + wait var_04; + } +} + +//Function Number: 26 +func_1191(param_00) +{ + if(!isdefined(self.enemy)) + { + return 0; + } + + if(isdefined(self.heat) && isdefined(param_00)) + { + return 0; + } + + if(self.combatmode == "cover" && issentient(self.enemy) && gettime() - self lastknowntime(self.enemy) > 15000) + { + return 0; + } + + return sighttracepassed(self.enemy getshootatpos(),self.pathgoalpos + (0,0,60),0,undefined); +} + +//Function Number: 27 +func_1192() +{ + self endon("goal_changed"); + self endon("move_interrupt"); + if(isdefined(self getnegotiationstartnode())) + { + return; + } + + func_118F(); + if(isdefined(self.var_73C) && isdefined(self.var_73C.var_7C1) && self.var_73C.var_7C1 == self) + { + return; + } + + var_00 = "exposed"; + var_01 = 1; + if(isdefined(self.var_1193)) + { + var_00 = self [[ self.var_1193 ]](); + } + else if(func_11B2()) + { + if(animscripts/utility::func_CB2()) + { + var_00 = "exposed_ready_cqb"; + } + else + { + var_00 = "exposed_ready"; + } + } + else if(animscripts/utility::func_CB2()) + { + var_00 = "exposed_cqb"; + } + else if(isdefined(self.heat)) + { + var_00 = "heat"; + var_01 = 4096; + } + + var_02 = func_117C(); + if(isdefined(var_02) && isdefined(self.pathgoalpos) && !isdefined(self.var_1194)) + { + var_03 = distancesquared(self.pathgoalpos,var_02.origin) < var_01; + } + else + { + var_03 = 0; + } + + if(var_03) + { + var_00 = func_1174(var_02); + } + + var_04 = vectornormalize(self.pathgoalpos - self.origin); + var_05 = vectortoyaw(var_04); + if(isdefined(self.var_1195)) + { + var_05 = self.angles[1]; + } + else if(func_1191(var_02)) + { + var_05 = vectortoyaw(self.enemy.origin - self.pathgoalpos); + } + else + { + var_06 = isdefined(var_02) && var_03; + var_06 = var_06 && var_02.type != "Path" && var_02.type != "Ambush" || !animscripts/utility::func_CBC(); + if(var_06) + { + var_05 = animscripts/utility::func_F41(var_02); + } + else + { + var_07 = self getanglestolikelyenemypath(); + if(isdefined(var_07)) + { + var_05 = var_07[1]; + } + } + } + + var_08 = spawnstruct(); + func_11A8(var_08,var_00,1,var_05,var_04,9,-1); + var_09 = 1; + for(var_0A = 2;var_0A <= 9;var_0A++) + { + if(var_08.var_1196[var_0A] > var_08.var_1196[var_09]) + { + var_09 = var_0A; + } + } + + self.var_1162 = var_08.var_118A[var_09]; + self.var_1163 = var_00; + var_0B = level.var_1164[var_00][self.var_1162]; + var_0C = length(level.var_1186[var_00][self.var_1162]); + var_0D = var_0C + 8; + var_0D = var_0D * var_0D; + while(isdefined(self.pathgoalpos) && distancesquared(self.origin,self.pathgoalpos) > var_0D) + { + wait 0.05; + } + + if(isdefined(self.var_10AD) && self.var_10AD < var_0C + 8) + { + return; + } + + if(!func_118D(var_02,var_03)) + { + return; + } + + var_0E = distance(self.origin,self.pathgoalpos); + if(abs(var_0E - var_0C) > 8) + { + return; + } + + var_0F = vectortoyaw(self.pathgoalpos - self.origin); + if(isdefined(self.heat) && var_03) + { + var_10 = var_05 - level.var_1187[var_00][self.var_1162]; + var_11 = func_11AE(self.pathgoalpos,var_05,var_00,self.var_1162); + } + else if(var_0E > 0) + { + var_12 = level.var_1186[var_02][self.var_1162]; + var_13 = atan(var_12[1] / var_12[0]); + if(!isdefined(self.var_1195) || self.var_781) + { + var_10 = var_0F - var_13; + if(animscripts/utility::func_D61(var_10 - self.angles[1]) > 30) + { + return; + } + } + else + { + var_10 = self.angles[1]; + } + + var_14 = var_0E - var_0C; + var_11 = self.origin + vectornormalize(self.pathgoalpos - self.origin) * var_14; + } + else + { + var_10 = self.angles[1]; + var_11 = self.origin; + } + + self startcoverarrival(var_11,var_10); +} + +//Function Number: 28 +func_1197() +{ + for(;;) + { + if(isdefined(self.pathgoalpos)) + { + return; + } + + wait 0.1; + } +} + +//Function Number: 29 +func_1198() +{ + if(!isdefined(self.pathgoalpos)) + { + return 0; + } + + if(!self shouldfacemotion()) + { + return 0; + } + + if(self.a.pose == "prone") + { + return 0; + } + + if(isdefined(self.disableexits) && self.disableexits) + { + return 0; + } + + if(self.var_786 != "none") + { + return 0; + } + + if(!self isstanceallowed("stand") && !isdefined(self.heat)) + { + return 0; + } + + if(distancesquared(self.origin,self.pathgoalpos) < 10000) + { + return 0; + } + + return 1; +} + +//Function Number: 30 +func_119A(param_00,param_01) +{ + if(!isdefined(param_00)) + { + return 0; + } + + if(param_00 == "exposed" || isdefined(self.heat)) + { + if(self.a.pose != "stand" && self.a.pose != "crouch") + { + return 0; + } + + if(self.a.movement != "stop") + { + return 0; + } + } + + if(!isdefined(self.heat) && isdefined(self.enemy) && vectordot(self.var_773,self.enemy.origin - self.origin) < 0) + { + if(animscripts/utility::func_F4A() && distancesquared(self.origin,self.enemy.origin) < 90000) + { + return 0; + } + } + + return 1; +} + +//Function Number: 31 +func_119B() +{ + var_00 = undefined; + if(!isdefined(self.heat)) + { + var_01 = 400; + } + else + { + var_01 = 4096; + } + + if(isdefined(self.node) && distancesquared(self.origin,self.node.origin) < var_01) + { + var_00 = self.node; + } + else if(isdefined(self.var_79E) && distancesquared(self.origin,self.var_79E.origin) < var_01) + { + var_00 = self.var_79E; + } + + if(isdefined(var_00) && isdefined(self.heat) && animscripts/utility::func_D61(self.angles[1] - var_00.angles[1]) > 30) + { + return undefined; + } + + return var_00; +} + +//Function Number: 32 +func_119C() +{ + if(!isdefined(self.startmovetransitionanim)) + { + return; + } + + self animmode("zonly_physics",0); + self orientmode("face current"); + self setflaggedanimknoballrestart("move",self.startmovetransitionanim,%root,1); + if(animhasnotetrack(self.startmovetransitionanim,"code_move")) + { + animscripts/shared::donotetracks("move"); + self orientmode("face motion"); + self animmode("none",0); + } + + animscripts/shared::donotetracks("move"); +} + +//Function Number: 33 +func_119E(param_00) +{ + if(self.a.pose == "stand") + { + param_00 = "exposed"; + } + else + { + param_00 = "exposed_crouch"; + } + + if(func_11B2()) + { + param_00 = "exposed_ready"; + } + + if(animscripts/utility::func_CB2()) + { + param_00 = param_00 + "_cqb"; + } + else if(isdefined(self.heat)) + { + param_00 = "heat"; + } + + return param_00; +} + +//Function Number: 34 +func_119F(param_00,param_01) +{ + if(param_00.type == "Cover Right") + { + param_01 = "heat_right"; + } + else if(param_00.type == "Cover Left") + { + param_01 = "heat_left"; + } + + return param_01; +} + +//Function Number: 35 +func_10A6() +{ + if(isdefined(self.custommovetransition)) + { + var_00 = self.custommovetransition; + if(!isdefined(self.var_11A1)) + { + self.custommovetransition = undefined; + } + + [[ var_00 ]](); + if(!isdefined(self.var_11A1)) + { + self.startmovetransitionanim = undefined; + } + + self clearanim(%root,0.2); + self orientmode("face default"); + self animmode("none",0); + return; + } + + self endon("killanimscript"); + if(!func_1198()) + { + return; + } + + var_01 = self.origin; + var_02 = self.angles[1]; + var_03 = "exposed"; + var_04 = 0; + var_05 = func_119B(); + if(isdefined(var_05)) + { + var_06 = func_1171(var_05); + if(isdefined(var_06)) + { + var_03 = var_06; + var_04 = 1; + if(isdefined(self.heat)) + { + var_03 = func_119F(var_05,var_03); + } + + if(!isdefined(level.var_1179[var_03]) && var_03 != "stand_saw" && var_03 != "crouch_saw") + { + var_07 = animscripts/utility::func_D61(self.angles[1] - animscripts/utility::func_F41(var_05)); + if(var_07 < 5) + { + if(!isdefined(self.heat)) + { + var_01 = var_05.origin; + } + + var_02 = animscripts/utility::func_F41(var_05); + } + } + } + } + + if(!func_119A(var_03,var_05)) + { + return; + } + + var_08 = isdefined(level.var_1179[var_03]); + if(!var_04) + { + var_03 = func_119E(); + } + + var_09 = (-1 * self.var_773[0],-1 * self.var_773[1],0); + var_0A = func_1175(var_05); + var_0B = var_0A.var_1176; + var_0C = var_0A.var_1177; + var_0D = spawnstruct(); + func_11A8(var_0D,var_03,0,var_02,var_09,var_0B,var_0C); + func_11AA(var_0D,var_0B); + var_0E = -1; + var_0F = 3; + if(var_08) + { + var_0F = 1; + } + + for(var_10 = 1;var_10 <= var_0F;var_10++) + { + var_0E = var_0D.var_118A[var_10]; + if(func_11AB(var_01,var_02,var_03,var_08,var_0E)) + { + break; + } + } + + if(var_10 > var_0F) + { + return; + } + + var_11 = distancesquared(self.origin,self.var_11A2) * 1.25 * 1.25; + if(distancesquared(self.origin,self.pathgoalpos) < var_11) + { + return; + } + + func_11A4(var_03,var_0E); +} + +//Function Number: 36 +func_11A3(param_00) +{ + if(!isdefined(param_00)) + { + return "{undefined}"; + } + + return param_00; +} + +//Function Number: 37 +func_11A4(param_00,param_01) +{ + var_02 = level.var_1173[param_00][param_01]; + var_03 = vectortoangles(self.var_773); + if(self.a.pose == "prone") + { + return; + } + + var_05 = 0.2; + self animmode("zonly_physics",0); + self orientmode("face angle",self.angles[1]); + self setflaggedanimknoballrestart("coverexit",var_02,%body,1,var_05,self.var_1165); + animscripts/shared::donotetracks("coverexit"); + self.a.pose = "stand"; + self.a.movement = "run"; + self.var_10A8 = undefined; + self orientmode("face motion"); + self animmode("none",0); + func_11A5("coverexit"); + self clearanim(%root,0.2); + self orientmode("face default"); + self animmode("normal",0); +} + +//Function Number: 38 +func_11A5(param_00) +{ + self endon("move_loop_restart"); + animscripts/shared::donotetracks(param_00); +} + +//Function Number: 39 +func_11A6(param_00,param_01,param_02,param_03) +{ + for(var_04 = 0;var_04 < param_02 * 100;var_04++) + { + wait 0.05; + } +} + +//Function Number: 40 +func_11A7(param_00) +{ + self endon("killanimscript"); + for(;;) + { + if(!isdefined(self.node)) + { + break; + } + + wait 0.05; + } +} + +//Function Number: 41 +func_11A8(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + param_00.var_1196 = []; + param_00.var_118A = []; + var_07 = undefined; + var_08 = 1; + var_09 = 0; + if(param_02) + { + var_07 = level.var_1187[param_01]; + var_08 = -1; + var_09 = 0; + } + else + { + var_07 = level.var_11A9[param_01]; + var_08 = 1; + var_09 = 180; + } + + for(var_0A = 1;var_0A <= param_05;var_0A++) + { + param_00.var_118A[var_0A] = var_0A; + if(var_0A == 5 || var_0A == param_06 || !isdefined(var_07[var_0A])) + { + param_00.var_1196[var_0A] = -1.0003; + continue; + } + + var_0B = (0,param_03 + var_08 * var_07[var_0A] + var_09,0); + var_0C = vectornormalize(anglestoforward(var_0B)); + param_00.var_1196[var_0A] = vectordot(param_04,var_0C); + } +} + +//Function Number: 42 +func_11AA(param_00,param_01) +{ + for(var_02 = 2;var_02 <= param_01;var_02++) + { + var_03 = param_00.var_1196[param_00.var_118A[var_02]]; + var_04 = param_00.var_118A[var_02]; + for(var_05 = var_02 - 1;var_05 >= 1;var_05--) + { + if(var_03 < param_00.var_1196[param_00.var_118A[var_05]]) + { + break; + } + + param_00.var_118A[var_05 + 1] = param_00.var_118A[var_05]; + } + + param_00.var_118A[var_05 + 1] = var_04; + } +} + +//Function Number: 43 +func_11AB(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = (0,param_01,0); + var_06 = anglestoforward(var_05); + var_07 = anglestoright(var_05); + var_08 = var_06 * level.var_11AC[param_02][param_04][0]; + var_09 = var_07 * level.var_11AC[param_02][param_04][1]; + var_0A = param_00 + var_08 - var_09; + self.var_11A2 = var_0A; + if(!param_03 && !self checkcoverexitposwithpath(var_0A)) + { + return 0; + } + + if(!self maymovefrompointtopoint(self.origin,var_0A)) + { + return 0; + } + + if(param_04 <= 6 || param_03) + { + return 1; + } + + var_08 = var_06 * level.var_11AD[param_02][param_04][0]; + var_09 = var_07 * level.var_11AD[param_02][param_04][1]; + var_0B = var_0A + var_08 - var_09; + self.var_11A2 = var_0B; + return self maymovefrompointtopoint(var_0A,var_0B); +} + +//Function Number: 44 +func_11AE(param_00,param_01,param_02,param_03) +{ + var_04 = (0,param_01 - level.var_1187[param_02][param_03],0); + var_05 = anglestoforward(var_04); + var_06 = anglestoright(var_04); + var_07 = var_05 * level.var_1186[param_02][param_03][0]; + var_08 = var_06 * level.var_1186[param_02][param_03][1]; + return param_00 - var_07 + var_08; +} + +//Function Number: 45 +func_11AF(param_00,param_01,param_02,param_03) +{ + var_04 = (0,param_01 - level.var_1187[param_02][param_03],0); + var_05 = anglestoforward(var_04); + var_06 = anglestoright(var_04); + var_07 = var_05 * level.var_11B0[param_02][param_03][0]; + var_08 = var_06 * level.var_11B0[param_02][param_03][1]; + return param_00 - var_07 + var_08; +} + +//Function Number: 46 +func_11B1(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = func_11AE(param_00,param_01,param_02,param_03); + self.var_1188 = var_05; + if(level.var_1184 && param_03 <= 6 && param_04) + { + return 1; + } + + if(!self maymovefrompointtopoint(var_05,param_00)) + { + return 0; + } + + if(param_03 <= 6 || isdefined(level.var_1179[param_02])) + { + return 1; + } + + var_06 = func_11AF(var_05,param_01,param_02,param_03); + self.var_1188 = var_06; + return self maymovefrompointtopoint(var_06,var_05); +} + +//Function Number: 47 +func_11B2() +{ + if(!isdefined(level.var_11B3)) + { + return 0; + } + + if(!level.var_11B3) + { + return 0; + } + + if(!isdefined(self.busereadyidle)) + { + return 0; + } + + if(!self.busereadyidle) + { + return 0; + } + + return 1; +} + +//Function Number: 48 +func_11B4() +{ + return 0; +} + +//Function Number: 49 +func_11B5(param_00) +{ + if(!func_11B4()) + { + } +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/cover_behavior.gsc b/MW3/PC/SP/animscripts/cover_behavior.gsc new file mode 100644 index 0000000..9274035 --- /dev/null +++ b/MW3/PC/SP/animscripts/cover_behavior.gsc @@ -0,0 +1,982 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\cover_behavior.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 37 + * Decompile Time: 637 ms + * Timestamp: 10/27/2023 2:18:09 AM +*******************************************************************/ + +//Function Number: 1 +main(param_00) +{ + self.var_CF9 = self.origin; + var_01 = gettime(); + var_02 = spawnstruct(); + var_02.var_F2E = var_01 - 1; + var_02.var_F2F = var_01 - 1; + func_0F69(); + func_0F68(); + self.var_F30 = gettime(); + self.a.var_F31 = var_01; + self.a.var_F32 = 0; + self.a.movement = "stop"; + self.var_F33 = var_01 + 3000; + thread func_0F50(); + var_03 = gettime() > 2500; + var_04 = func_0F40(); + for(;;) + { + if(animscripts/combat_utility::func_F34()) + { + if(animscripts/combat_utility::func_F35(1)) + { + wait 0.05; + continue; + } + } + + if(isdefined(param_00.var_F36)) + { + var_05 = gettime(); + thread func_0F60(); + [[ param_00.var_F36 ]](); + if(gettime() == var_05) + { + self notify("dont_end_idle"); + } + } + + if(isdefined(param_00.var_F37)) + { + if([[ param_00.var_F37 ]]()) + { + continue; + } + } + + self safeteleport(self.var_CAF.origin,var_04); + if(!var_03) + { + idle(param_00,0.05 + randomfloat(1.5)); + var_03 = 1; + continue; + } + + if(func_0F44(param_00)) + { + continue; + } + + if(isdefined(level.throwgrenadeatplayerasap) && isalive(level.player)) + { + if(func_0F61(param_00,level.player)) + { + continue; + } + } + + if(func_0F42()) + { + return; + } + + var_06 = 0; + var_07 = 0; + if(isalive(self.enemy)) + { + var_06 = func_0F49(); + var_07 = animscripts/utility::func_F39(); + } + + if(var_06) + { + if(self.a.var_F3A < gettime()) + { + if(animscripts/combat_utility::func_F3B()) + { + return; + } + } + + func_0F45(param_00); + continue; + } + + if(isdefined(self.aggressivemode) || func_0F67()) + { + if(func_0F6D()) + { + return; + } + } + + if(var_07) + { + func_0F46(param_00,var_02); + continue; + } + + if(func_0F48(param_00,var_02)) + { + return; + } + } +} + +//Function Number: 2 +func_067F(param_00) +{ + self.var_F3D = undefined; + self.a.var_F3E = undefined; + if(isdefined(self.var_F33) && self.var_F33 <= gettime()) + { + self.var_F3F = gettime() + 5000; + self.var_F33 = undefined; + } +} + +//Function Number: 3 +func_0F40() +{ + var_00 = (self.var_CAF.angles[0],animscripts/utility::func_F41(self.var_CAF),self.var_CAF.angles[2]); + return var_00; +} + +//Function Number: 4 +func_0F42() +{ + if(self atdangerousnode() && self.a.var_F43 < gettime()) + { + if(animscripts/combat_utility::func_F3B()) + { + return 1; + } + + self.a.var_F43 = gettime() + 30000; + } + + return 0; +} + +//Function Number: 5 +func_0F44(param_00) +{ + if(func_0F4B(param_00)) + { + if(func_0F49()) + { + func_0F6B(); + } + + self.a.var_F31 = gettime(); + return 1; + } + + if(func_0F52(param_00,0)) + { + return 1; + } + + return 0; +} + +//Function Number: 6 +func_0F45(param_00) +{ + if(distancesquared(self.origin,self.enemy.origin) > 562500) + { + if(func_0F61(param_00,self.enemy)) + { + return; + } + } + + if(func_0F55(param_00,"normal")) + { + func_0F6B(); + self.a.var_F31 = gettime(); + return; + } + + idle(param_00); +} + +//Function Number: 7 +func_0F46(param_00,param_01) +{ + if(self.var_748) + { + if(func_0F55(param_00,"ambush")) + { + return; + } + } + else if(self.providecoveringfire || gettime() >= param_01.var_F2F) + { + var_02 = "suppress"; + if(!self.providecoveringfire && gettime() - self.var_F47 > 5000 && randomint(3) < 2) + { + var_02 = "ambush"; + } + else if(!animscripts/shoot_behavior::func_CE9()) + { + var_02 = "ambush"; + } + + if(func_0F55(param_00,var_02)) + { + param_01.var_F2F = gettime() + randomintrange(3000,20000); + if(func_0F49()) + { + self.a.var_F31 = gettime(); + } + + return; + } + } + + if(func_0F61(param_00,self.enemy)) + { + return; + } + + idle(param_00); +} + +//Function Number: 8 +func_0F48(param_00,param_01) +{ + if(func_0F52(param_00,0.1)) + { + return 0; + } + + if(isdefined(self.enemy)) + { + if(func_0F61(param_00,self.enemy)) + { + return 0; + } + } + + if(!self.var_748 && gettime() >= param_01.var_F2E) + { + if(func_0F56(param_00)) + { + param_01.var_F2E = gettime() + randomintrange(4000,15000); + return 0; + } + } + + if(gettime() > self.a.var_F3A) + { + if(func_0F6C()) + { + return 1; + } + } + + if(self.var_748 || gettime() >= param_01.var_F2F && isdefined(self.enemy)) + { + if(func_0F55(param_00,"ambush")) + { + if(func_0F49()) + { + func_0F6B(); + } + + self.a.var_F31 = gettime(); + param_01.var_F2F = gettime() + randomintrange(6000,20000); + return 0; + } + } + + idle(param_00); + return 0; +} + +//Function Number: 9 +func_0F49() +{ + if(!isdefined(self.enemy)) + { + return 0; + } + + if(distancesquared(self.enemy.origin,self.var_CF9) < 256) + { + return 0; + } + + return animscripts/utility::func_F4A(); +} + +//Function Number: 10 +func_0F4B(param_00) +{ + if(!animscripts/utility::func_F4C()) + { + return 0; + } + + var_01 = gettime(); + var_02 = 1; + while(animscripts/utility::func_F4C()) + { + var_02 = 0; + self safeteleport(self.var_CAF.origin); + var_03 = 1; + if(isdefined(self.favor_blindfire)) + { + var_03 = common_scripts\utility::cointoss(); + } + + if(var_03) + { + if(func_0F6E(param_00)) + { + self notify("killanimscript"); + return 1; + } + } + + if(self.a.var_CE2 && animscripts/utility::func_CE3()) + { + return 0; + } + + if(func_0F49() || animscripts/utility::func_F39()) + { + if(isdefined(level.throwgrenadeatplayerasap) && isalive(level.player)) + { + if(func_0F61(param_00,level.player)) + { + continue; + } + } + + if(func_0F52(param_00,0)) + { + continue; + } + + if(self.team != "allies" && gettime() >= var_01) + { + if(func_0F64(param_00)) + { + var_01 = gettime(); + if(!isdefined(self.favor_blindfire)) + { + var_01 = var_01 + randomintrange(3000,12000); + } + + continue; + } + } + + if(func_0F61(param_00,self.enemy)) + { + var_02 = 1; + continue; + } + } + + if(func_0F52(param_00,0.1)) + { + continue; + } + + idle(param_00); + } + + if(!var_02 && randomint(2) == 0) + { + func_0F58(param_00); + } + + return 1; +} + +//Function Number: 11 +func_0F4E(param_00) +{ + var_01 = []; + if(param_00 == 1) + { + } + else if(var_01 == 2) + { + } + else + { + for(var_02 = 0;var_02 < var_01;var_02++ = var_7B[1]) + { + var_7B[var_02] = var_02; + } + + for(var_02 = 0;var_02 < var_01;var_02++ = 1 - var_7B[0]) + { + var_03 = var_02 + randomint(var_01 - var_02); + var_04 = var_7B[var_03]; + var_7B[var_03] = var_7B[var_02]; + var_7B[var_02] = var_04; + } + } + + return var_7B; +} + +//Function Number: 12 +func_0F4F(param_00,param_01,param_02,param_03) +{ + if(!isdefined(param_00)) + { + return 0; + } + + thread func_0F60(); + var_04 = gettime(); + var_05 = undefined; + if(isdefined(param_03)) + { + var_05 = [[ param_00 ]](param_01,param_02,param_03); + } + else if(isdefined(param_02)) + { + var_05 = [[ param_00 ]](param_01,param_02); + } + else if(isdefined(param_01)) + { + var_05 = [[ param_00 ]](param_01); + } + else + { + var_05 = [[ param_00 ]](); + } + + if(!var_05) + { + self notify("dont_end_idle"); + } + + return var_05; +} + +//Function Number: 13 +func_0F50() +{ + self endon("killanimscript"); + self.var_F47 = gettime() - 100000; + self.var_F51 = self.var_F47; + for(;;) + { + self waittill("suppression"); + var_00 = gettime(); + if(self.var_F47 < var_00 - 700) + { + self.var_F51 = var_00; + } + + self.var_F47 = var_00; + } +} + +//Function Number: 14 +func_0F52(param_00,param_01) +{ + if(self.bulletsinclip > weaponclipsize(self.weapon) * param_01) + { + return 0; + } + + self.var_F53 = 1; + var_02 = func_0F4F(param_00.var_F54); + self.var_F53 = 0; + return var_02; +} + +//Function Number: 15 +func_0F55(param_00,param_01) +{ + thread animscripts/shoot_behavior::func_CD7(param_01); + if(!self.fixednode && !self.var_748) + { + thread func_0F66(); + } + + var_02 = func_0F4F(param_00.var_F55); + self notify("stop_deciding_how_to_shoot"); + return var_02; +} + +//Function Number: 16 +func_0F56(param_00) +{ + if(self.a.var_CE2 && animscripts/utility::func_CE3()) + { + return 0; + } + + if(self.a.var_F31 + 6000 > gettime()) + { + return func_0F58(param_00); + } + + var_01 = func_0F4F(param_00.var_7A8,2 + randomfloat(2)); + if(var_01) + { + return 1; + } + + return func_0F4F(param_00.var_F57); +} + +//Function Number: 17 +func_0F58(param_00) +{ + var_01 = func_0F4F(param_00.var_F57); + if(var_01) + { + return 1; + } + + return func_0F4F(param_00.var_7A8,0); +} + +//Function Number: 18 +idle(param_00,param_01) +{ + self.var_F5A = 0; + if(isdefined(param_00.var_F5B)) + { + if(!self.a.var_F32 && gettime() - self.var_F51 < 600) + { + if([[ param_00.var_F5B ]]()) + { + return 1; + } + } + else + { + thread func_0F5F(param_00); + } + } + + if(!self.a.var_F32) + { + thread func_0F5E(param_00.idle); + self.a.var_F32 = 1; + } + + if(isdefined(param_01)) + { + func_0F5C(param_01); + } + else + { + func_0F5D(); + } + + if(self.var_F5A) + { + self waittill("flinch_done"); + } + + self notify("stop_waiting_to_flinch"); +} + +//Function Number: 19 +func_0F5C(param_00) +{ + self endon("end_idle"); + wait param_00; +} + +//Function Number: 20 +func_0F5D() +{ + self endon("end_idle"); + wait 0.3 + randomfloat(0.1); + self waittill("do_slow_things"); +} + +//Function Number: 21 +func_0F5E(param_00) +{ + self endon("killanimscript"); + self [[ param_00 ]](); +} + +//Function Number: 22 +func_0F5F(param_00) +{ + self endon("killanimscript"); + self endon("stop_waiting_to_flinch"); + var_01 = self.var_F47; + for(;;) + { + self waittill("suppression"); + var_02 = gettime(); + if(var_01 < var_02 - 2000) + { + break; + } + + var_01 = var_02; + } + + self.var_F5A = 1; + thread func_0F60(); + var_03 = [[ param_00.var_F5B ]](); + if(!var_03) + { + self notify("dont_end_idle"); + } + + self.var_F5A = 0; + self notify("flinch_done"); +} + +//Function Number: 23 +func_0F60() +{ + self endon("killanimscript"); + self endon("dont_end_idle"); + waittillframeend; + if(!isdefined(self)) + { + return; + } + + self notify("end_idle"); + self.a.var_F32 = 0; +} + +//Function Number: 24 +func_0F61(param_00,param_01) +{ + var_02 = anglestoforward(self.angles); + var_03 = vectornormalize(param_01.origin - self.origin); + if(vectordot(var_02,var_03) < 0) + { + return 0; + } + + if(self.var_748 && !animscripts/utility::func_CBC()) + { + return 0; + } + + if(animscripts/utility::func_F62()) + { + return func_0F4F(param_00.var_F63,param_01); + } + + return func_0F4F(param_00.var_73C,param_01); +} + +//Function Number: 25 +func_0F64(param_00) +{ + if(!animscripts/utility::func_F65()) + { + return 0; + } + + return func_0F4F(param_00.var_F64); +} + +//Function Number: 26 +func_0F66() +{ + self endon("killanimscript"); + self endon("stop_deciding_how_to_shoot"); + for(;;) + { + if(self.fixednode || self.var_748) + { + return; + } + + wait 0.5 + randomfloat(0.75); + if(!isdefined(self.enemy)) + { + continue; + } + + if(func_0F67()) + { + if(func_0F6D()) + { + return; + } + } + + if(!animscripts/utility::func_CBC() && !animscripts/utility::func_CF3()) + { + if(gettime() > self.a.var_F3A) + { + if(func_0F6C()) + { + return; + } + } + } + } +} + +//Function Number: 27 +func_0F67() +{ + if(!isdefined(self.enemy)) + { + return 0; + } + + if(self.enemy common_scripts\utility::isflashed()) + { + return 1; + } + + if(isplayer(self.enemy)) + { + if(isdefined(self.enemy.health) && self.enemy.health < self.enemy.maxhealth) + { + return 1; + } + } + else if(isai(self.enemy) && self.enemy animscripts/utility::func_F4C()) + { + return 1; + } + + if(isdefined(self.enemy.var_F53) && self.enemy.var_F53) + { + return 1; + } + + return 0; +} + +//Function Number: 28 +func_0F68() +{ + self.a.var_F43 = 0; +} + +//Function Number: 29 +func_0F69() +{ + var_00 = gettime(); + if(isdefined(self.var_F6A) && var_00 > self.a.var_F3A) + { + self.a.var_F3A = var_00 + randomintrange(2000,5000); + return; + } + + if(isdefined(self.enemy)) + { + var_01 = distance2d(self.origin,self.enemy.origin); + if(var_01 < self.var_77C) + { + self.a.var_F3A = var_00 + randomintrange(5000,10000); + return; + } + + if(var_01 > self.var_77E && var_01 < self.goalradius) + { + self.a.var_F3A = var_00 + randomintrange(2000,5000); + return; + } + + self.a.var_F3A = var_00 + randomintrange(10000,15000); + return; + } + + self.a.var_F3A = var_00 + randomintrange(5000,15000); +} + +//Function Number: 30 +func_0F6B() +{ + if(isdefined(self.aggressivemode)) + { + self.var_F30 = gettime() + randomintrange(500,1000); + return; + } + + self.var_F30 = gettime() + randomintrange(3000,5000); +} + +//Function Number: 31 +func_0F6C() +{ + return func_0F6D(); +} + +//Function Number: 32 +func_0F6D() +{ + if(self.fixednode || self.var_748) + { + return 0; + } + + if(isdefined(self.aggressivemode) && gettime() >= self.var_F30) + { + return animscripts/combat_utility::func_F35(0); + } + + var_00 = 0; + if(!isdefined(self.enemy) || !self.enemy common_scripts\utility::isflashed()) + { + var_00 = animscripts/combat_utility::func_F3B(); + } + + if(!var_00 && isdefined(self.enemy) && !animscripts/utility::func_F4A()) + { + if(gettime() >= self.var_F30) + { + return animscripts/combat_utility::func_F35(0); + } + } + + return var_00; +} + +//Function Number: 33 +func_0F6E(param_00) +{ + if(isdefined(param_00.var_F37)) + { + if([[ param_00.var_F37 ]]()) + { + return 1; + } + } + + return animscripts/combat_utility::func_F3B(); +} + +//Function Number: 34 +func_0F6F() +{ + self.a.array["turn_left_45"] = %exposed_tracking_turn45l; + self.a.array["turn_left_90"] = %exposed_tracking_turn90l; + self.a.array["turn_left_135"] = %exposed_tracking_turn135l; + self.a.array["turn_left_180"] = %exposed_tracking_turn180l; + self.a.array["turn_right_45"] = %exposed_tracking_turn45r; + self.a.array["turn_right_90"] = %exposed_tracking_turn90r; + self.a.array["turn_right_135"] = %exposed_tracking_turn135r; + self.a.array["turn_right_180"] = %exposed_tracking_turn180r; +} + +//Function Number: 35 +func_0F70() +{ + self.a.array["turn_left_45"] = %exposed_crouch_turn_90_left; + self.a.array["turn_left_90"] = %exposed_crouch_turn_90_left; + self.a.array["turn_left_135"] = %exposed_crouch_turn_180_left; + self.a.array["turn_left_180"] = %exposed_crouch_turn_180_left; + self.a.array["turn_right_45"] = %exposed_crouch_turn_90_right; + self.a.array["turn_right_90"] = %exposed_crouch_turn_90_right; + self.a.array["turn_right_135"] = %exposed_crouch_turn_180_right; + self.a.array["turn_right_180"] = %exposed_crouch_turn_180_right; +} + +//Function Number: 36 +func_0F71(param_00) +{ + if(isdefined(self.node)) + { + var_01 = self.node; + var_02 = abs(angleclamp180(self.angles[1] - var_01.angles[1] + param_00)); + if(self.a.pose == "stand" && var_01 gethighestnodestance() != "stand") + { + if(var_02 > 45 && var_02 < 90) + { + self orientmode("face angle",self.angles[1]); + } + else + { + self orientmode("face current"); + } + + var_03 = 1.5; + var_04 = getnotetracktimes(%exposed_stand_2_crouch,"anim_pose = \"crouch\")[0]; + var_04 = min(1,var_04 * 1.1); + var_05 = var_04 * getanimlength(%exposed_stand_2_crouch) / var_03; + self setflaggedanimknoballrestart("crouchanim",%exposed_stand_2_crouch,%body,1,0.2,var_03); + animscripts/notetracks::func_D4F(var_05,"crouchanim"); + self clearanim(%body,0.2); + } + + self orientmode("face angle",self.angles[1]); + var_06 = angleclamp180(self.angles[1] - var_01.angles[1] + param_00); + if(abs(var_06) > 45) + { + if(self.a.pose == "stand") + { + func_0F6F(); + } + else + { + func_0F70(); + } + + self.var_F72 = 45; + self.var_F3D = 1; + animscripts/combat::func_F73(var_06); + self.var_F3D = undefined; + } + } +} + +//Function Number: 37 +func_0F37() +{ + if(!isdefined(self.enemy)) + { + return 0; + } + + if(isdefined(self.var_F6A)) + { + self.var_F6A = undefined; + return 0; + } + + if(!isdefined(self.node)) + { + return 0; + } + + if(randomint(3) == 0) + { + return 0; + } + + if(self.fixednode || self.var_748 || self.var_766 || self.keepclaimednodeifvalid) + { + return 0; + } + + if(distancesquared(self.origin,self.node.origin) > 256) + { + return 0; + } + + var_00 = self findshufflecovernode(); + if(isdefined(var_00) && var_00 != self.node && self usecovernode(var_00)) + { + self.var_F74 = 1; + self.var_F75 = var_00; + self.var_F6A = 1; + wait 0.5; + return 1; + } + + return 0; +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/cover_crouch.gsc b/MW3/PC/SP/animscripts/cover_crouch.gsc new file mode 100644 index 0000000..2c25053 --- /dev/null +++ b/MW3/PC/SP/animscripts/cover_crouch.gsc @@ -0,0 +1,24 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\cover_crouch.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 45 ms + * Timestamp: 10/27/2023 2:18:09 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self endon("killanimscript"); + animscripts/utility::func_D15("cover_crouch"); + animscripts/cover_wall::func_F76("crouch"); +} + +//Function Number: 2 +func_067F() +{ + self.var_CAC = undefined; + animscripts/cover_behavior::func_67F("crouch"); +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/cover_left.gsc b/MW3/PC/SP/animscripts/cover_left.gsc new file mode 100644 index 0000000..7a5c35a --- /dev/null +++ b/MW3/PC/SP/animscripts/cover_left.gsc @@ -0,0 +1,47 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\cover_left.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 4 + * Decompile Time: 89 ms + * Timestamp: 10/27/2023 2:18:10 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self.var_2443 = []; + self.var_2443["hiding"]["stand"] = ::func_3FDC; + self.var_2443["hiding"]["crouch"] = ::func_3FDD; + self endon("killanimscript"); + animscripts/utility::func_D15("cover_left"); + animscripts/corner::func_2442("left",90); +} + +//Function Number: 2 +func_067F() +{ + animscripts/corner::func_2449(); + animscripts/cover_behavior::func_67F("left"); +} + +//Function Number: 3 +func_3FDC() +{ + var_00 = []; + if(isdefined(level.ramboanims)) + { + } + + self.var_2474 = 90; + self.a.array = var_7B; +} + +//Function Number: 4 +func_3FDD() +{ + var_00 = []; + self.var_2474 = 90; + self.a.array = var_7B; +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/cover_prone.gsc b/MW3/PC/SP/animscripts/cover_prone.gsc new file mode 100644 index 0000000..9145d2b --- /dev/null +++ b/MW3/PC/SP/animscripts/cover_prone.gsc @@ -0,0 +1,313 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\cover_prone.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 14 + * Decompile Time: 231 ms + * Timestamp: 10/27/2023 2:18:11 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self endon("killanimscript"); + animscripts/utility::func_D15("cover_prone"); + if(weaponclass(self.weapon) == "rocketlauncher") + { + animscripts/combat::main(); + return; + } + + if(isdefined(self.a.var_10DF) && self.a.var_10DF == "prone_saw") + { + animscripts/cover_wall::func_FA5("saw_bipod_prone","weapon_saw_MG_Setup"); + } + else if(isdefined(self.node.turret)) + { + animscripts/cover_wall::func_FA7(); + } + + if(isdefined(self.enemy) && lengthsquared(self.origin - self.enemy.origin) < squared(512)) + { + thread animscripts/combat::main(); + return; + } + + func_10E6(); + self.var_CAF = self.node; + self orientmode("face angle",self.var_CAF.angles[1]); + self.a.var_10E0 = 1; + self setproneanimnodes(-45,45,%prone_legs_down,%exposed_modern,%prone_legs_up); + if(self.a.pose != "prone") + { + func_10EA("prone"); + } + else + { + animscripts/utility::func_10E1(0); + } + + thread animscripts/combat_utility::aimidlethread(); + func_10EC(0.2); + self setanim(%prone_aim_5,1,0.1); + self orientmode("face angle",self.var_CAF.angles[1]); + self animmode("zonly_physics"); + func_10E3(); + self notify("stop_deciding_how_to_shoot"); +} + +//Function Number: 2 +func_067F() +{ + self.a.var_10E0 = undefined; +} + +//Function Number: 3 +func_0F5E() +{ + self endon("killanimscript"); + self endon("kill_idle_thread"); + for(;;) + { + var_00 = animscripts/utility::func_CA8("prone_idle"); + self setflaggedanimlimited("idle",var_00); + self waittillmatch("end","idle"); + self clearanim(var_00,0.2); + } +} + +//Function Number: 4 +func_10E2(param_00) +{ + self updateprone(%prone_aim_feet_45up,%prone_aim_feet_45down,1,param_00,1); + self setanim(%exposed_aiming,1,0.2); +} + +//Function Number: 5 +func_10E3() +{ + self endon("killanimscript"); + thread animscripts/track::func_CA9(); + thread animscripts/shoot_behavior::func_CD7("normal"); + var_00 = gettime() > 2500; + for(;;) + { + animscripts/utility::func_A69(); + func_10E2(0.05); + if(!var_00) + { + wait 0.05 + randomfloat(1.5); + var_00 = 1; + continue; + } + + if(!isdefined(self.var_CB1)) + { + if(func_10E7()) + { + continue; + } + + wait 0.05; + continue; + } + + var_01 = lengthsquared(self.origin - self.var_CB1); + if(self.a.pose != "crouch" && self isstanceallowed("crouch") && var_01 < squared(400)) + { + if(var_01 < squared(285)) + { + func_10EA("crouch"); + thread animscripts/combat::main(); + return; + } + } + + if(func_10E7()) + { + continue; + } + + if(func_10E5(0)) + { + continue; + } + + if(animscripts/combat_utility::func_10E4()) + { + animscripts/combat_utility::func_F06(); + self clearanim(%add_fire,0.2); + continue; + } + + wait 0.05; + } +} + +//Function Number: 6 +func_10E5(param_00) +{ + return animscripts/combat_utility::func_F54(param_00,animscripts/utility::func_D4D("reload")); +} + +//Function Number: 7 +func_10E6() +{ + self setdefaultaimlimits(self.node); + var_00 = []; + self.a.array = var_7B; +} + +//Function Number: 8 +func_0F61(param_00,param_01) +{ + var_02 = undefined; + if(isdefined(param_01) && param_01) + { + var_02 = animscripts/utility::func_CA8("grenade_safe"); + } + else + { + var_02 = animscripts/utility::func_CA8("grenade_exposed"); + } + + self animmode("zonly_physics"); + self.keepclaimednodeifvalid = 1; + var_03 = (32,20,64); + var_04 = animscripts/combat_utility::func_FA1(param_00,var_02); + self.keepclaimednodeifvalid = 0; + return var_04; +} + +//Function Number: 9 +func_10E7() +{ + if(isdefined(level.throwgrenadeatplayerasap) && isalive(level.player)) + { + if(func_0F61(level.player,200)) + { + return 1; + } + } + + if(isdefined(self.enemy)) + { + return func_0F61(self.enemy,850); + } + + return 0; +} + +//Function Number: 10 +func_10E8() +{ + if(!isdefined(self.weapon) || !weaponisauto(self.weapon)) + { + return 0; + } + + if(isdefined(self.node) && distancesquared(self.origin,self.node.origin) < 256) + { + return 0; + } + + if(isdefined(self.enemy) && self cansee(self.enemy) && !isdefined(self.var_73C) && animscripts/shared::func_10E9() < 20) + { + return animscripts/move::func_FDE(); + } + + return 0; +} + +//Function Number: 11 +func_10EA(param_00) +{ + if(param_00 == self.a.pose) + { + return; + } + + self clearanim(%root,0.3); + animscripts/combat_utility::func_F85(); + if(func_10E8()) + { + var_01 = animscripts/utility::func_D4D(self.a.pose + "_2_" + param_00 + "_firing"); + } + else + { + var_01 = animscripts/utility::func_D4D(self.a.pose + "_2_" + var_01); + } + + if(param_00 == "prone") + { + } + + self setflaggedanimknoballrestart("trans",var_01,%body,1,0.2,1); + animscripts/shared::donotetracks("trans"); + self setanimknoballrestart(animscripts/utility::func_D4D("straight_level"),%body,1,0.25); + func_10EC(0.25); +} + +//Function Number: 12 +func_10EB(param_00) +{ + self endon("killanimscript"); + animscripts/shared::donotetracks(param_00); +} + +//Function Number: 13 +func_10EC(param_00) +{ + self setanimknoball(%prone_aim_5,%body,1,param_00); + self setanimlimited(%prone_aim_2_add,1,param_00); + self setanimlimited(%prone_aim_4_add,1,param_00); + self setanimlimited(%prone_aim_6_add,1,param_00); + self setanimlimited(%prone_aim_8_add,1,param_00); +} + +//Function Number: 14 +func_10B0(param_00,param_01) +{ + self clearanim(%root,0.3); + var_02 = undefined; + if(func_10E8()) + { + if(param_00 == "crouch") + { + var_02 = %prone_2_crouch_firing; + } + else if(param_00 == "stand") + { + var_02 = %prone_2_stand_firing; + } + } + else if(param_00 == "crouch") + { + var_02 = %prone_2_crouch; + } + else if(param_00 == "stand") + { + var_02 = %prone_2_stand_nodelta; + } + + if(isdefined(self.var_10ED)) + { + var_02 = self.var_10ED; + } + + if(isdefined(self.var_10EE)) + { + param_01 = self.var_10EE; + } + + if(!isdefined(param_01)) + { + param_01 = 1; + } + + animscripts/utility::func_F7D(getanimlength(var_02) / 2); + self setflaggedanimknoballrestart("trans",var_02,%body,1,0.2,param_01); + animscripts/shared::donotetracks("trans"); + self clearanim(var_02,0.1); +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/cover_right.gsc b/MW3/PC/SP/animscripts/cover_right.gsc new file mode 100644 index 0000000..a2c863a --- /dev/null +++ b/MW3/PC/SP/animscripts/cover_right.gsc @@ -0,0 +1,47 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\cover_right.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 4 + * Decompile Time: 78 ms + * Timestamp: 10/27/2023 2:18:11 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self.var_2443 = []; + self.var_2443["hiding"]["stand"] = ::func_3FDE; + self.var_2443["hiding"]["crouch"] = ::func_3FDF; + self endon("killanimscript"); + animscripts/utility::func_D15("cover_right"); + animscripts/corner::func_2442("right",-90); +} + +//Function Number: 2 +func_067F() +{ + animscripts/corner::func_2449(); + animscripts/cover_behavior::func_67F("right"); +} + +//Function Number: 3 +func_3FDE() +{ + var_00 = []; + if(isdefined(level.ramboanims)) + { + } + + self.var_2474 = -90; + self.a.array = var_7B; +} + +//Function Number: 4 +func_3FDF() +{ + var_00 = []; + self.var_2474 = -90; + self.a.array = var_7B; +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/cover_stand.gsc b/MW3/PC/SP/animscripts/cover_stand.gsc new file mode 100644 index 0000000..870874e --- /dev/null +++ b/MW3/PC/SP/animscripts/cover_stand.gsc @@ -0,0 +1,23 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\cover_stand.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 44 ms + * Timestamp: 10/27/2023 2:18:12 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self endon("killanimscript"); + animscripts/utility::func_D15("cover_stand"); + animscripts/cover_wall::func_F76("stand"); +} + +//Function Number: 2 +func_067F() +{ + animscripts/cover_behavior::func_67F("stand"); +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/cover_wall.gsc b/MW3/PC/SP/animscripts/cover_wall.gsc new file mode 100644 index 0000000..359f537 --- /dev/null +++ b/MW3/PC/SP/animscripts/cover_wall.gsc @@ -0,0 +1,856 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\cover_wall.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 35 + * Decompile Time: 592 ms + * Timestamp: 10/27/2023 2:18:14 AM +*******************************************************************/ + +//Function Number: 1 +func_0F76(param_00) +{ + self endon("killanimscript"); + self.var_CAF = self.node; + self.var_F77 = param_00; + if(!isdefined(self.node.turret)) + { + animscripts/cover_behavior::func_F71(0); + } + + if(param_00 == "crouch") + { + func_0F81("unknown"); + self.var_CAF func_0F7F(); + } + else + { + func_0F82("unknown"); + } + + self.a.aimidlethread = undefined; + self orientmode("face angle",self.var_CAF.angles[1]); + if(isdefined(self.weapon) && animscripts/utility::func_F79() && isdefined(self.node) && isdefined(self.node.turretinfo) && canspawnturret()) + { + if(param_00 == "crouch") + { + if(func_0F7E(self.weapon)) + { + var_01 = "rpd_bipod_crouch"; + } + else + { + var_01 = "saw_bipod_crouch"; + } + } + else if(func_0F7E(self.weapon)) + { + var_01 = "rpd_bipod_stand"; + } + else + { + var_01 = "saw_bipod_stand"; + } + + if(func_0F7E(self.weapon)) + { + var_02 = "weapon_rpd_MG_Setup"; + } + else + { + var_02 = "weapon_saw_MG_Setup"; + } + + func_0FA5(var_01,var_02); + } + else if(isdefined(self.node) && isdefined(self.node.turret)) + { + func_0FA7(); + } + + self animmode("normal"); + if(param_00 == "crouch" && self.a.pose == "stand") + { + var_03 = animscripts/utility::func_D4D("stand_2_hide"); + var_04 = getanimlength(var_03); + self setanimknoballrestart(var_03,%body,1,0.2,animscripts/combat_utility::func_F7B()); + thread animscripts/shared::func_F7C(self.var_CAF.origin,var_04); + wait var_04; + self.a.var_CF8 = "hide"; + } + else + { + func_0FB2(0.4); + if(distancesquared(self.origin,self.var_CAF.origin) > 1) + { + thread animscripts/shared::func_F7C(self.var_CAF.origin,0.4); + wait 0.2; + if(param_00 == "crouch") + { + self.a.pose = "crouch"; + } + + wait 0.2; + } + else + { + wait 0.1; + } + } + + self animmode("zonly_physics"); + if(param_00 == "crouch") + { + if(self.a.pose == "prone") + { + animscripts/utility::func_F7D(1); + } + + self.a.pose = "crouch"; + } + + if(self.var_F77 == "stand") + { + self.a.var_D19 = "cover_stand"; + } + else + { + self.a.var_D19 = "cover_crouch"; + } + + var_05 = spawnstruct(); + if(!self.fixednode) + { + var_05.var_F37 = ::animscripts/cover_behavior::func_F37; + } + + var_05.var_F54 = ::func_0F52; + var_05.var_F55 = ::func_0F83; + var_05.var_7A8 = ::func_07A8; + var_05.var_F57 = ::func_0F57; + var_05.idle = ::idle; + var_05.var_F5B = ::func_0F5B; + var_05.var_73C = ::func_0F61; + var_05.var_F63 = ::func_0F9E; + var_05.var_F64 = ::func_0F64; + animscripts/cover_behavior::main(var_05); +} + +//Function Number: 2 +func_0F7E(param_00) +{ + return getsubstr(param_00,0,3) == "rpd" && param_00.size == 3 || param_00[3] == "_"; +} + +//Function Number: 3 +func_0F7F() +{ + if(isdefined(self.var_F80)) + { + return; + } + + var_00 = (0,0,42); + var_01 = anglestoforward(self.angles); + self.var_F80 = sighttracepassed(self.origin + var_00,self.origin + var_00 + var_01 * 64,0,undefined); +} + +//Function Number: 4 +func_0F81(param_00) +{ + self setdefaultaimlimits(self.var_CAF); + func_0FA9(param_00); +} + +//Function Number: 5 +func_0F82(param_00) +{ + self setdefaultaimlimits(self.var_CAF); + func_0FAE(param_00); +} + +//Function Number: 6 +func_0F52() +{ + animscripts/combat_utility::func_F54(2,animscripts/utility::func_D4D("reload")); + return 1; +} + +//Function Number: 7 +func_0F83() +{ + self.keepclaimednodeifvalid = 1; + if(isdefined(self.rambochance) && randomfloat(1) < self.rambochance) + { + if(func_0F8B()) + { + return 1; + } + } + + if(!func_0F98()) + { + return 0; + } + + func_0F88(); + animscripts/combat_utility::func_F85(); + if(isdefined(self.var_CB1)) + { + var_00 = lengthsquared(self.origin - self.var_CB1); + if(animscripts/utility::func_BB6() && var_00 < squared(512) || self.a.rockets < 1) + { + if(self.a.pose == "stand") + { + animscripts/shared::func_F87(%rpg_stand_throw); + } + else + { + animscripts/shared::func_F87(%rpg_crouch_throw); + } + } + } + + func_0F9C(); + self.var_CAC = undefined; + self.keepclaimednodeifvalid = 0; + return 1; +} + +//Function Number: 8 +func_0F88() +{ + self endon("return_to_cover"); + maps\_gameskill::didsomethingotherthanshooting(); + for(;;) + { + if(isdefined(self.var_CDC)) + { + break; + } + + if(!isdefined(self.var_CB1)) + { + self waittill("do_slow_things"); + waittillframeend; + if(isdefined(self.var_CB1)) + { + continue; + } + + break; + } + + if(!self.bulletsinclip) + { + break; + } + + if(self.var_F77 == "crouch" && func_0FB4()) + { + break; + } + + func_0F8A(); + self clearanim(%add_fire,0.2); + } +} + +//Function Number: 9 +func_0F8A() +{ + if(self.var_F77 == "crouch") + { + thread func_0FB3(); + } + + thread animscripts/combat_utility::aimidlethread(); + animscripts/combat_utility::func_F06(); +} + +//Function Number: 10 +func_0F8B() +{ + if(!animscripts/utility::func_F8C()) + { + return 0; + } + + var_00 = "rambo"; + if(randomint(10) < 2) + { + var_00 = "rambo_fail"; + } + + if(!animscripts/utility::func_F8D(var_00)) + { + return 0; + } + + if(self.var_F77 == "crouch" && !self.var_CAF.var_F80) + { + return 0; + } + + var_01 = func_0FB7(self.var_CAF.origin + animscripts/utility::func_F8E(self.var_CAF)); + if(var_01 > 15) + { + return 0; + } + + var_02 = anglestoforward(self.angles); + var_03 = self.origin + var_02 * -16; + if(!self maymovetopoint(var_03)) + { + return 0; + } + + self.var_CFD = gettime(); + self animmode("zonly_physics"); + self.keepclaimednodeifvalid = 1; + self.isrambo = 1; + self.a.var_F3E = "rambo"; + self.var_CDD = 1; + thread animscripts/shared::func_F90(0); + var_04 = animscripts/utility::func_CA8(var_00); + self setflaggedanimknoballrestart("rambo",var_04,%body,1,0.2,1); + animscripts/shared::donotetracks("rambo"); + self notify("rambo_aim_end"); + self.var_CDD = 0; + self.keepclaimednodeifvalid = 0; + self.var_F91 = gettime(); + self.var_CDD = 0; + self.isrambo = undefined; + return 1; +} + +//Function Number: 11 +idle() +{ + self endon("end_idle"); + for(;;) + { + var_00 = randomint(2) == 0 && animscripts/utility::func_F8D("hide_idle_twitch"); + if(var_00) + { + var_01 = animscripts/utility::func_CA8("hide_idle_twitch"); + } + else + { + var_01 = animscripts/utility::func_D4D("hide_idle"); + } + + func_0F92(var_01,var_00); + } +} + +//Function Number: 12 +func_0F5B() +{ + if(!animscripts/utility::func_F8D("hide_idle_flinch")) + { + return 0; + } + + var_00 = anglestoforward(self.angles); + var_01 = self.origin + var_00 * -16; + if(!self maymovetopoint(var_01)) + { + return 0; + } + + self animmode("zonly_physics"); + self.keepclaimednodeifvalid = 1; + var_02 = animscripts/utility::func_CA8("hide_idle_flinch"); + func_0F92(var_02,1); + self.keepclaimednodeifvalid = 0; + return 1; +} + +//Function Number: 13 +func_0F92(param_00,param_01) +{ + if(param_01) + { + self setflaggedanimknoballrestart("idle",param_00,%body,1,0.25,1); + } + else + { + self setflaggedanimknoball("idle",param_00,%body,1,0.25,1); + } + + self.a.var_CF8 = "hide"; + animscripts/shared::donotetracks("idle"); +} + +//Function Number: 14 +func_07A8(param_00) +{ + if(!isdefined(self.a.array["hide_to_look"])) + { + return 0; + } + + if(!func_0F94()) + { + return 0; + } + + animscripts/shared::func_F93(animscripts/utility::func_D4D("look_idle"),param_00); + var_01 = undefined; + if(animscripts/utility::func_F4C()) + { + var_01 = animscripts/utility::func_D4D("look_to_hide_fast"); + } + else + { + var_01 = animscripts/utility::func_D4D("look_to_hide"); + } + + self setflaggedanimknoballrestart("looking_end",var_01,%body,1,0.1); + animscripts/shared::donotetracks("looking_end"); + return 1; +} + +//Function Number: 15 +func_0F94() +{ + if(isdefined(self.var_CAF.var_F95)) + { + return 0; + } + + self setflaggedanimknoball("looking_start",animscripts/utility::func_D4D("hide_to_look"),%body,1,0.2); + animscripts/shared::donotetracks("looking_start"); + return 1; +} + +//Function Number: 16 +func_0F57() +{ + self setflaggedanimknoballrestart("look",animscripts/utility::func_CA8("look"),%body,1,0.1); + animscripts/shared::donotetracks("look"); + return 1; +} + +//Function Number: 17 +func_0F96() +{ + if(self.a.var_CF8 == "left" || self.a.var_CF8 == "right" || self.a.var_CF8 == "over") + { + return 1; + } + + return animscripts/combat_utility::func_F97(); +} + +//Function Number: 18 +func_0F98() +{ + var_00 = func_0FB5(); + var_01 = 0.1; + var_02 = animscripts/utility::func_D4D("hide_2_" + var_00); + if(!self maymovetopoint(animscripts/utility::func_F99(var_02))) + { + return 0; + } + + if(self.script == "cover_crouch" && var_00 == "lean") + { + self.var_CAC = 1; + } + + if(self.var_F77 == "crouch") + { + func_0F81(var_00); + } + else + { + func_0F82(var_00); + } + + self.a.var_D19 = "none"; + self.var_D4B = undefined; + if(self.var_F77 == "stand") + { + self.a.var_D19 = "cover_stand_aim"; + } + else + { + self.a.var_D19 = "cover_crouch_aim"; + } + + self.var_CDD = 1; + self notify("done_changing_cover_pos"); + self animmode("zonly_physics"); + var_03 = func_0F96(); + self setflaggedanimknoballrestart("pop_up",var_02,%body,1,0.1,var_03); + thread func_0F9A("pop_up"); + if(animhasnotetrack(var_02,"start_aim")) + { + self waittillmatch("start_aim","pop_up"); + var_01 = getanimlength(var_02) / var_03 * 1 - self getanimtime(var_02); + } + else + { + self waittillmatch("end","pop_up"); + var_01 = 0.1; + } + + self clearanim(var_02,var_01 + 0.05); + self.a.var_CF8 = var_00; + self.a.var_F3E = var_00; + func_0F9B(var_01); + thread animscripts/track::func_CA9(); + wait var_01; + if(animscripts/combat_utility::issniper()) + { + thread animscripts/shoot_behavior::func_D0C(); + } + + self.var_CDD = 0; + self.var_CFD = gettime(); + self notify("stop_popup_donotetracks"); + return 1; +} + +//Function Number: 19 +func_0F9A(param_00) +{ + self endon("killanimscript"); + self endon("stop_popup_donotetracks"); + animscripts/shared::donotetracks(param_00); +} + +//Function Number: 20 +func_0F9B(param_00) +{ + if(self.a.var_CF8 == "left" || self.a.var_CF8 == "right") + { + var_01 = "crouch"; + } + else + { + var_01 = self.a.var_CF8; + } + + self setanimknoball(animscripts/utility::func_D4D(var_01 + "_aim"),%body,1,param_00); + if(var_01 == "crouch") + { + self setanimlimited(%covercrouch_aim2_add,1,0); + self setanimlimited(%covercrouch_aim4_add,1,0); + self setanimlimited(%covercrouch_aim6_add,1,0); + self setanimlimited(%covercrouch_aim8_add,1,0); + return; + } + + if(var_01 == "stand") + { + self setanimlimited(%exposed_aim_2,1,0); + self setanimlimited(%exposed_aim_4,1,0); + self setanimlimited(%exposed_aim_6,1,0); + self setanimlimited(%exposed_aim_8,1,0); + return; + } + + if(var_01 == "lean") + { + self setanimlimited(%exposed_aim_2,1,0); + self setanimlimited(%exposed_aim_4,1,0); + self setanimlimited(%exposed_aim_6,1,0); + self setanimlimited(%exposed_aim_8,1,0); + return; + } + + if(var_01 == "over") + { + self setanimlimited(%coverstandaim_aim2_add,1,0); + self setanimlimited(%coverstandaim_aim4_add,1,0); + self setanimlimited(%coverstandaim_aim6_add,1,0); + self setanimlimited(%coverstandaim_aim8_add,1,0); + return; + } +} + +//Function Number: 21 +func_0F9C() +{ + self notify("return_to_cover"); + self.var_CDD = 1; + self notify("done_changing_cover_pos"); + animscripts/combat_utility::func_F9D(); + var_00 = func_0F96(); + self setflaggedanimknoball("go_to_hide",animscripts/utility::func_D4D(self.a.var_CF8 + "_2_hide"),%body,1,0.2,var_00); + self clearanim(%exposed_modern,0.2); + animscripts/shared::donotetracks("go_to_hide"); + self.a.var_CF8 = "hide"; + if(self.var_F77 == "stand") + { + self.a.var_D19 = "cover_stand"; + } + else + { + self.a.var_D19 = "cover_crouch"; + } + + self.var_CDD = 0; +} + +//Function Number: 22 +func_0F9E(param_00) +{ + return func_0F61(param_00,1); +} + +//Function Number: 23 +func_0F61(param_00,param_01) +{ + if(isdefined(self.dontevershoot) || isdefined(param_00.var_FA0)) + { + return 0; + } + + var_02 = undefined; + if(isdefined(self.rambochance) && randomfloat(1) < self.rambochance) + { + var_02 = animscripts/utility::func_CA8("grenade_rambo"); + } + else if(isdefined(param_01) && param_01) + { + var_02 = animscripts/utility::func_CA8("grenade_safe"); + } + else + { + var_02 = animscripts/utility::func_CA8("grenade_exposed"); + } + + self animmode("zonly_physics"); + self.keepclaimednodeifvalid = 1; + var_03 = animscripts/combat_utility::func_FA1(param_00,var_02); + self.keepclaimednodeifvalid = 0; + return var_03; +} + +//Function Number: 24 +func_0F64() +{ + if(!animscripts/utility::func_F8D("blind_fire")) + { + return 0; + } + + self animmode("zonly_physics"); + self.keepclaimednodeifvalid = 1; + self setflaggedanimknoballrestart("blindfire",animscripts/utility::func_CA8("blind_fire"),%body,1,0.2,1); + animscripts/shared::donotetracks("blindfire"); + self.keepclaimednodeifvalid = 0; + return 1; +} + +//Function Number: 25 +func_0FA2(param_00,param_01,param_02) +{ + var_03 = spawnturret("misc_turret",param_00.origin,param_01); + var_03.angles = param_00.angles; + var_03.var_FA3 = self; + var_03 setmodel(param_02); + var_03 makeusable(); + var_03 setdefaultdroppitch(0); + if(isdefined(param_00.leftarc)) + { + var_03.leftarc = param_00.leftarc; + } + + if(isdefined(param_00.rightarc)) + { + var_03.rightarc = param_00.rightarc; + } + + if(isdefined(param_00.toparc)) + { + var_03.toparc = param_00.toparc; + } + + if(isdefined(param_00.bottomarc)) + { + var_03.bottomarc = param_00.bottomarc; + } + + return var_03; +} + +//Function Number: 26 +func_0FA4(param_00) +{ + self endon("death"); + self endon("being_used"); + wait 0.1; + if(isdefined(param_00)) + { + param_00 notify("turret_use_failed"); + } + + self delete(); +} + +//Function Number: 27 +func_0FA5(param_00,param_01) +{ + var_02 = func_0FA2(self.node.turretinfo,param_00,param_01); + if(self useturret(var_02)) + { + var_02 thread func_0FA4(self); + if(isdefined(self.var_FA6)) + { + thread [[ self.var_FA6 ]](var_02); + } + + self waittill("turret_use_failed"); + return; + } + + var_02 delete(); +} + +//Function Number: 28 +func_0FA7() +{ + var_00 = self.node.turret; + if(!var_00.issetup) + { + return; + } + + thread maps\_mg_penetration::gunner_think(var_00); + self waittill("continue_cover_script"); +} + +//Function Number: 29 +func_0FA9(param_00) +{ + var_01 = []; + if(animscripts/utility::func_C97()) + { + if(var_01 == "lean" || var_01 == "stand") + { + } + else + { + } + } + else + { + } + + if(isdefined(level.ramboanims)) + { + } + + self.a.array = var_7B; +} + +//Function Number: 30 +func_0FAE(param_00) +{ + var_01 = []; + if(var_01 == "over") + { + } + else if(animscripts/utility::func_C97()) + { + } + else + { + } + + if(isdefined(level.ramboanims)) + { + } + + self.a.array = var_7B; +} + +//Function Number: 31 +func_0FB2(param_00) +{ + if(!isdefined(param_00)) + { + param_00 = 0.1; + } + + self setanimknoballrestart(animscripts/utility::func_D4D("hide_idle"),%body,1,param_00); + self.a.var_CF8 = "hide"; +} + +//Function Number: 32 +func_0FB3() +{ + self endon("killanimscript"); + self notify("newAngleRangeCheck"); + self endon("newAngleRangeCheck"); + self endon("return_to_cover"); + for(;;) + { + if(func_0FB4()) + { + break; + } + + wait 0.1; + } + + self notify("stopShooting"); +} + +//Function Number: 33 +func_0FB4() +{ + if(self.var_F77 != "crouch") + { + return 0; + } + + var_00 = func_0FB7(self geteye()); + if(self.a.var_CF8 == "lean") + { + return var_00 < 10; + } + + return var_00 > 45; +} + +//Function Number: 34 +func_0FB5() +{ + var_00 = []; + if(self.var_F77 == "stand") + { + var_00 = self.var_CAF getvalidcoverpeekouts(); + } + else + { + var_01 = func_0FB7(self.var_CAF.origin + animscripts/utility::func_F8E(self.var_CAF)); + if(var_01 > 30) + { + return "lean"; + } + + if(var_01 > 15 || !self.var_CAF.var_F80) + { + return "stand"; + } + + var_7B = self.var_CAF getvalidcoverpeekouts(); + var_7B[var_7B.size] = "crouch"; + } + + return animscripts/combat_utility::func_FB6(var_7B); +} + +//Function Number: 35 +func_0FB7(param_00) +{ + var_01 = animscripts/utility::func_FB8(); + return angleclamp180(vectortoangles(var_01 - param_00)[0]); +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/cqb.gsc b/MW3/PC/SP/animscripts/cqb.gsc new file mode 100644 index 0000000..96560db --- /dev/null +++ b/MW3/PC/SP/animscripts/cqb.gsc @@ -0,0 +1,193 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\cqb.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 5 + * Decompile Time: 94 ms + * Timestamp: 10/27/2023 2:18:14 AM +*******************************************************************/ + +//Function Number: 1 +func_1075() +{ + animscripts/run::func_FFD(); + if(self.a.pose != "stand") + { + self clearanim(%root,0.2); + if(self.a.pose == "prone") + { + animscripts/utility::func_F7D(1); + } + + self.a.pose = "stand"; + } + + self.a.movement = self.movemode; + thread func_1079(); + var_00 = func_1076(); + var_01 = self.moveplaybackrate; + if(self.movemode == "walk") + { + var_01 = var_01 * 0.6; + } + + if(self.var_786 == "none") + { + var_02 = 0.3; + } + else + { + var_02 = 0.1; + } + + self setflaggedanimknoball("runanim",var_00,%walk_and_run_loops,1,var_02,var_01,1); + animscripts/run::func_FF7(%walk_backward,%walk_left,%walk_right); + thread animscripts/run::func_FF8("cqb"); + animscripts/notetracks::func_D4F(0.2,"runanim"); + thread animscripts/run::func_FE5(); +} + +//Function Number: 2 +func_1076() +{ + if(isdefined(self.custommoveanimset) && isdefined(self.custommoveanimset["cqb"])) + { + return animscripts/run::func_FC2(); + } + + if(self.var_786 == "up") + { + return %traverse_stair_run; + } + + if(self.var_786 == "down") + { + return %traverse_stair_run_down_01; + } + + if(self.movemode == "walk") + { + return %walk_cqb_f; + } + + var_00 = animscripts/utility::func_1078(self.a.var_1077,2); + if(var_00 == 0) + { + return %run_cqb_f_search_v1; + } + + return %run_cqb_f_search_v2; +} + +//Function Number: 3 +func_1079() +{ + if(animscripts/move::func_FDE()) + { + animscripts/run::func_FE3(); + } + + animscripts/run::func_FE1(); +} + +//Function Number: 4 +func_107A() +{ + level.var_107B = []; + var_00 = getentarray("cqb_point_of_interest","targetname"); + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + level.var_107B[var_01] = var_00[var_01].origin; + var_00[var_01] delete(); + } +} + +//Function Number: 5 +func_107C() +{ + if(isdefined(level.var_107D)) + { + return; + } + + anim.var_107D = 1; + if(!level.var_107B.size) + { + return; + } + + for(;;) + { + var_00 = getaiarray(); + var_01 = 0; + foreach(var_03 in var_00) + { + if(isalive(var_03) && var_03 animscripts/utility::func_C98() && !isdefined(var_03.var_107E)) + { + var_04 = var_03.a.movement != "stop"; + var_05 = (var_03.origin[0],var_03.origin[1],var_03 getshootatpos()[2]); + var_06 = var_05; + var_07 = anglestoforward(var_03.angles); + if(var_04) + { + var_08 = bullettrace(var_06,var_06 + var_07 * 128,0,undefined); + var_06 = var_08["position"]; + } + + var_09 = -1; + var_0A = 1048576; + for(var_0B = 0;var_0B < level.var_107B.size;var_0B++) + { + var_0C = level.var_107B[var_0B]; + var_0D = distancesquared(var_0C,var_06); + if(var_0D < var_0A) + { + if(var_04) + { + if(distancesquared(var_0C,var_05) < 4096) + { + continue; + } + + var_0E = vectordot(vectornormalize(var_0C - var_05),var_07); + if(var_0E < 0.643 || var_0E > 0.966) + { + continue; + } + } + else if(var_0D < 2500) + { + continue; + } + + if(!sighttracepassed(var_06,var_0C,0,undefined)) + { + continue; + } + + var_0A = var_0D; + var_09 = var_0B; + } + } + + if(var_09 < 0) + { + var_03.cqb_point_of_interest = undefined; + } + else + { + var_03.cqb_point_of_interest = level.var_107B[var_09]; + } + + wait 0.05; + var_01 = 1; + } + } + + if(!var_01) + { + wait 0.25; + } + } +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/death.gsc b/MW3/PC/SP/animscripts/death.gsc new file mode 100644 index 0000000..83d9498 --- /dev/null +++ b/MW3/PC/SP/animscripts/death.gsc @@ -0,0 +1,933 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\death.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 31 + * Decompile Time: 575 ms + * Timestamp: 10/27/2023 2:18:16 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self endon("killanimscript"); + self stopsoundchannel("voice"); + var_00 = 0.3; + self clearanim(%scripted_talking,var_00); + if(self.a.var_D55 == 1) + { + return; + } + + if(isdefined(self.deathfunction)) + { + var_01 = self [[ self.deathfunction ]](); + if(!isdefined(var_01)) + { + var_01 = 1; + } + + if(var_01) + { + return; + } + } + + animscripts/utility::func_D15("death"); + func_0ED1(self.origin); + level.var_D43--; + level.var_D6B--; + if(isdefined(self.var_EC0) || self.var_746) + { + func_0EC2(); + } + + if(isdefined(self.deathanim)) + { + func_0D56(self.deathanim); + if(isdefined(self.deathanimscript)) + { + self [[ self.deathanimscript ]](); + } + + return; + } + + var_02 = animscripts/pain::func_D1F(); + if(self.damagelocation == "helmet" || self.damagelocation == "head") + { + func_0D17(); + } + else if(var_02 && randomint(3) == 0) + { + func_0D17(); + } + + self clearanim(%root,0.3); + if(!animscripts/utility::func_D2F("head","helmet")) + { + if(self.diequietly) + { + } + else + { + playdeathsound(); + } + } + + if(var_02 && func_0EE7()) + { + return; + } + + if(isdefined(self.var_D4B)) + { + if([[ self.var_D4B ]]()) + { + return; + } + } + + if(specialdeath()) + { + return; + } + + var_03 = func_0ED8(); + func_0D56(var_03); +} + +//Function Number: 2 +func_0EC2() +{ + animscripts/shared::func_D73(); + self.skipdeathanim = 1; + var_00 = 10; + var_01 = common_scripts\_destructible::getdamagetype(self.var_726); + if(isdefined(self.attacker) && self.attacker == level.player && var_01 == "melee") + { + var_00 = 5; + } + + var_02 = self.damagetaken; + if(var_01 == "bullet") + { + var_02 = max(var_02,300); + } + + var_03 = var_00 * var_02; + var_04 = max(0.3,self.var_722[2]); + var_05 = (self.var_722[0],self.var_722[1],var_04); + if(isdefined(self.var_EC4)) + { + var_05 = var_05 * self.var_EC4; + } + else + { + var_05 = var_05 * var_03; + } + + if(self.var_746) + { + var_05 = var_05 + self.var_777 * 20 * 10; + } + + if(isdefined(self.var_EC5)) + { + var_05 = var_05 + self.var_EC5 * 10; + } + + self startragdollfromimpact(self.damagelocation,var_05); + wait 0.05; +} + +//Function Number: 3 +func_0D56(param_00) +{ + if(!animhasnotetrack(param_00,"dropgun") && !animhasnotetrack(param_00,"fire_spray")) + { + animscripts/shared::func_D73(); + } + + self setflaggedanimknoballrestart("deathanim",param_00,%body,1,0.1); + if(isdefined(self.skipdeathanim)) + { + if(!isdefined(self.noragdoll)) + { + self startragdoll(); + } + + wait 0.05; + self animmode("gravity"); + } + else if(isdefined(self.var_EC7)) + { + thread func_0EC8(self.var_EC7); + } + else if(!animhasnotetrack(param_00,"start_ragdoll")) + { + thread func_0EC8(getanimlength(param_00) * 0.35); + } + + if(!isdefined(self.skipdeathanim)) + { + thread func_0EC9(); + } + + animscripts/shared::donotetracks("deathanim"); + animscripts/shared::func_D73(); +} + +//Function Number: 4 +func_0EC8(param_00) +{ + wait param_00; + if(isdefined(self)) + { + animscripts/shared::func_D73(); + } + + if(isdefined(self) && !isdefined(self.noragdoll)) + { + self startragdoll(); + } +} + +//Function Number: 5 +func_0EC9() +{ + self endon("killanimscript"); + if(self.var_786 != "none") + { + return; + } + + wait 2; + func_0ECA(); +} + +//Function Number: 6 +func_0ECA(param_00,param_01) +{ + if(!isdefined(self)) + { + return; + } + + if(isdefined(self.skipbloodpool)) + { + return; + } + + var_02 = self gettagorigin("j_SpineUpper"); + var_03 = self gettagangles("j_SpineUpper"); + var_04 = anglestoforward(var_03); + var_05 = anglestoup(var_03); + var_06 = anglestoright(var_03); + var_02 = var_02 + var_04 * -8.5 + var_05 * 5 + var_06 * 0; + var_07 = bullettrace(var_02 + (0,0,30),var_02 - (0,0,100),0,undefined); + if(var_07["normal"][2] > 0.9) + { + playfx(level._effect["deathfx_bloodpool_generic"],var_02); + } +} + +//Function Number: 7 +specialdeath() +{ + if(self.a.var_D19 == "none") + { + return 0; + } + + switch(self.a.var_D19) + { + case "cover_right": + if(self.a.pose == "stand") + { + var_00 = []; + func_0ECD(var_7B); + } + else + { + var_00 = []; + if(animscripts/utility::func_D2F("head","neck")) + { + } + else + { + } + + func_0ECD(var_7B); + } + + return 1; + var_7B[1] + %cornercrr_alert_death_back + var_7B[0] + %cornercrr_alert_death_slideout + var_7B[0] + %cornercrr_alert_death_slideout + var_7B[1] + %corner_standr_deathb + var_7B[0] + %corner_standr_deatha + break; + + case "cover_left": + if(self.a.pose == "stand") + { + var_00 = []; + func_0ECD(var_7B); + } + else + { + var_00 = []; + func_0ECD(var_7B); + } + + return 1; + var_7B[1] + %cornercrl_death_back + var_7B[0] + %cornercrl_death_side + var_7B[1] + %corner_standl_deathb + var_7B[0] + %corner_standl_deatha + break; + + case "cover_stand": + var_00 = []; + func_0ECD(var_7B); + return 1; + var_7B[1] + %coverstand_death_right + var_7B[0] + %coverstand_death_left + break; + + case "cover_crouch": + var_00 = []; + if(animscripts/utility::func_D2F("head","neck") && self.var_723 > 135 || self.var_723 <= -45) + { + } + + if(self.var_723 > -45 && self.var_723 <= 45) + { + } + + func_0ECD(var_7B); + return 1; + var_7B[var_7B.size] + %covercrouch_death_2 + var_7B[var_7B.size] + %covercrouch_death_3 + var_7B[var_7B.size] + %covercrouch_death_1 + break; + + case "saw": + if(self.a.pose == "stand") + { + func_0ECD(animscripts/utility::array(%saw_gunner_death)); + } + else if(self.a.pose == "crouch") + { + func_0ECD(animscripts/utility::array(%saw_gunner_lowwall_death)); + } + else + { + func_0ECD(animscripts/utility::array(%saw_gunner_prone_death)); + } + return 1; + + case "dying_crawl": + if(isdefined(self.a.var_D29) && self.a.pose == "crouch") + { + var_00 = animscripts/utility::array(%dying_back_death_v2,%dying_back_death_v3,%dying_back_death_v4); + func_0ECD(var_7B); + } + else + { + var_00 = animscripts/utility::array(%dying_crawl_death_v1,%dying_crawl_death_v2); + func_0ECD(var_7B); + } + return 1; + } + + return 0; +} + +//Function Number: 8 +func_0ECD(param_00) +{ + var_01 = param_00[randomint(param_00.size)]; + func_0D56(var_01); + if(isdefined(self.deathanimscript)) + { + self [[ self.deathanimscript ]](); + } +} + +//Function Number: 9 +playdeathsound() +{ + animscripts/face::func_C41("death"); +} + +//Function Number: 10 +func_0ECE(param_00,param_01,param_02) +{ + var_03 = param_02 * 20; + for(var_04 = 0;var_04 < var_03;var_04++) + { + wait 0.05; + } +} + +//Function Number: 11 +func_0D17() +{ + if(!isdefined(self)) + { + return; + } + + if(!isdefined(self.hatmodel)) + { + return; + } + + var_00 = getpartname(self.hatmodel,0); + var_01 = spawn("script_model",self.origin + (0,0,64)); + var_01 setmodel(self.hatmodel); + var_01.origin = self gettagorigin(var_00); + var_01.angles = self gettagangles(var_00); + var_01 thread func_0ED0(self.var_722); + var_02 = self.hatmodel; + self.hatmodel = undefined; + wait 0.05; + if(!isdefined(self)) + { + return; + } + + self detach(var_02,""); +} + +//Function Number: 12 +func_0ED0(param_00) +{ + var_01 = param_00; + var_01 = var_01 * randomfloatrange(2000,4000); + var_02 = var_01[0]; + var_03 = var_01[1]; + var_04 = randomfloatrange(1500,3000); + var_05 = self.origin + (randomfloatrange(-1,1),randomfloatrange(-1,1),randomfloatrange(-1,1)) * 5; + self physicslaunchclient(var_05,(var_02,var_03,var_04)); + wait 60; + for(;;) + { + if(!isdefined(self)) + { + return; + } + + if(distancesquared(self.origin,level.player.origin) > 262144) + { + break; + } + + wait 30; + } + + self delete(); +} + +//Function Number: 13 +func_0ED1(param_00) +{ + for(var_01 = 0;var_01 < level.var_A63.size;var_01++) + { + level.var_A63[var_01] func_0ED2(param_00); + } +} + +//Function Number: 14 +func_0ED2(param_00) +{ + if(!isdefined(self.var_ED3)) + { + return; + } + + if(distance(param_00,self.var_ED3) < 80) + { + self.var_ED3 = undefined; + self.var_A67 = gettime(); + } +} + +//Function Number: 15 +func_0ED4() +{ + if(self.a.movement != "run") + { + return 0; + } + + if(self getmotionangle() > 60 || self getmotionangle() < -60) + { + return 0; + } + + return 1; +} + +//Function Number: 16 +func_0ED5(param_00,param_01,param_02,param_03) +{ + if(isdefined(self.a.doinglongdeath)) + { + return 0; + } + + if(self.a.pose == "prone" || isdefined(self.a.var_D29)) + { + return 0; + } + + if(param_00 == "none") + { + return 0; + } + + if(param_02 > 500) + { + return 1; + } + + if(param_01 == "MOD_MELEE") + { + return 0; + } + + if(self.a.movement == "run" && !func_0ED7(param_03,275)) + { + if(randomint(100) < 65) + { + return 0; + } + } + + if(animscripts/utility::func_BEB(param_00) && self.maxhealth < param_02) + { + return 1; + } + + if(animscripts/utility::func_CEA(param_00) && func_0ED7(param_03,512)) + { + return 1; + } + + if(func_0ED6(param_00) && func_0ED7(param_03,425)) + { + return 1; + } + + return 0; +} + +//Function Number: 17 +func_0ED6(param_00) +{ + if(param_00 == "deserteagle") + { + return 1; + } + + return 0; +} + +//Function Number: 18 +func_0ED7(param_00,param_01) +{ + if(!isdefined(param_00)) + { + return 0; + } + + if(distance(self.origin,param_00.origin) > param_01) + { + return 0; + } + + return 1; +} + +//Function Number: 19 +func_0ED8() +{ + if(func_0ED5(self.damageweapon,self.var_726,self.damagetaken,self.attacker)) + { + var_00 = func_0ED9(); + if(isdefined(var_00)) + { + return var_00; + } + } + + if(isdefined(self.a.var_D29)) + { + if(self.a.pose == "crouch") + { + return func_0EE1(); + } + else + { + animscripts/notetracks::func_D2A(); + } + } + + if(self.a.pose == "stand") + { + if(func_0ED4()) + { + return func_0EDA(); + } + + return func_0EDD(); + } + + if(self.a.pose == "crouch") + { + return func_0EDE(); + } + + if(self.a.pose == "prone") + { + return func_0EDF(); + } +} + +//Function Number: 20 +func_0ED9() +{ + var_00 = abs(self.var_723); + if(var_00 < 45) + { + return; + } + + if(var_00 > 150) + { + if(animscripts/utility::func_D2F("left_leg_upper","left_leg_lower","right_leg_upper","right_leg_lower","left_foot","right_foot")) + { + var_01 = animscripts/utility::array(%death_shotgun_legs,%death_stand_sniper_leg); + } + else + { + var_01 = []; + if(self.damagelocation == "torso_lower") + { + } + } + } + else if(self.var_723 < 0) + { + var_01 = animscripts/utility::array(%death_shotgun_spinl,%death_stand_sniper_spin1,%death_stand_sniper_chest1,%death_stand_sniper_chest2); + } + else + { + var_01 = animscripts/utility::array(%death_shotgun_spinr,%death_stand_sniper_spin2,%death_stand_sniper_chest1,%death_stand_sniper_chest2); + } + + return var_7B[randomint(var_7B.size)]; +} + +//Function Number: 21 +func_0EDA() +{ + var_00 = []; + var_7B = animscripts/pain::func_D32(var_7B); + if(!var_7B.size) + { + return func_0EDD(); + } + + return var_7B[randomint(var_7B.size)]; +} + +//Function Number: 22 +func_0EDB(param_00) +{ + var_01 = []; + for(var_02 = 0;var_02 < param_00.size;var_02++) + { + if(!isdefined(param_00[var_02])) + { + continue; + } + + var_01[var_01.size] = param_00[var_02]; + } + + return var_01; +} + +//Function Number: 23 +func_0EDC() +{ + var_00 = []; + if(abs(self.var_723) < 50) + { + } + else + { + if(abs(self.var_723) < 110) + { + } + + if(animscripts/utility::func_D2F("torso_lower","torso_upper","left_leg_upper","left_leg_lower","right_leg_upper","right_leg_lower")) + { + if(!animscripts/utility::func_D2F("torso_upper")) + { + } + } + + if(!animscripts/utility::func_D2F("head","neck","helmet","left_foot","right_foot","left_hand","right_hand","gun") && randomint(2) == 0) + { + } + + if(var_7B.size == 0 || animscripts/utility::func_D2F("torso_lower","torso_upper","neck","head","helmet","right_arm_upper","left_arm_upper")) + { + } + } + + return var_7B; +} + +//Function Number: 24 +func_0EDD() +{ + var_00 = []; + var_01 = []; + if(animscripts/utility::func_C95()) + { + var_00 = func_0EDC(); + } + else + { + if(animscripts/utility::func_D2F("torso_lower","left_leg_upper","left_leg_lower","right_leg_lower","right_leg_lower")) + { + var_00[var_00.size] = func_0EE5(%exposed_death_groin); + var_00[var_00.size] = func_0EE5(%stand_death_leg); + } + + if(animscripts/utility::func_D2F("head","helmet")) + { + var_01[var_01.size] = func_0EE5(%exposed_death_headshot); + var_01[var_01.size] = func_0EE5(%exposed_death_flop); + } + + if(animscripts/utility::func_D2F("neck")) + { + var_01[var_01.size] = func_0EE5(%exposed_death_neckgrab); + } + + if(animscripts/utility::func_D2F("torso_upper","left_arm_upper")) + { + var_01[var_01.size] = func_0EE5(%exposed_death_twist); + var_01[var_01.size] = func_0EE5(%stand_death_shoulder_spin); + var_01[var_01.size] = func_0EE5(%stand_death_shoulderback); + } + + if(animscripts/utility::func_D2F("torso_upper")) + { + var_01[var_01.size] = func_0EE5(%stand_death_tumbleforward); + var_01[var_01.size] = func_0EE5(%stand_death_stumbleforward); + } + + if(self.var_723 > 135 || self.var_723 <= -135) + { + if(animscripts/utility::func_D2F("neck","head","helmet")) + { + var_01[var_01.size] = func_0EE5(%stand_death_face); + var_01[var_01.size] = func_0EE5(%stand_death_headshot_slowfall); + } + + if(animscripts/utility::func_D2F("torso_upper")) + { + var_01[var_01.size] = func_0EE5(%stand_death_tumbleback); + } + } + else if(self.var_723 > -45 && self.var_723 <= 45) + { + var_01[var_01.size] = func_0EE5(%exposed_death_falltoknees); + var_01[var_01.size] = func_0EE5(%exposed_death_falltoknees_02); + } + + var_02 = var_01.size > 0; + if(!var_02 || randomint(100) < 15) + { + var_01[var_01.size] = func_0EE5(%exposed_death_02); + var_01[var_01.size] = func_0EE5(%exposed_death_nerve); + } + + if(randomint(100) < 10 && func_0EE2()) + { + var_01[var_01.size] = func_0EE6(%exposed_death_firing_02); + var_01[var_01.size] = func_0EE6(%exposed_death_firing); + var_01 = func_0EDB(var_01); + } + } + + if(var_01.size == 0) + { + var_01[var_01.size] = %exposed_death; + } + + if(!self.a.disablelongdeath && self.var_786 == "none" && !isdefined(self.a.var_D13)) + { + var_03 = randomint(var_01.size + var_7B.size); + if(var_03 < var_01.size) + { + return var_01[var_03]; + } + else + { + return var_7B[var_03 - var_01.size]; + } + } + + return var_01[randomint(var_01.size)]; +} + +//Function Number: 25 +func_0EDE() +{ + var_00 = []; + if(animscripts/utility::func_D2F("head","neck")) + { + } + + if(animscripts/utility::func_D2F("torso_upper","torso_lower","left_arm_upper","right_arm_upper","neck")) + { + } + + if(var_7B.size < 2) + { + } + + if(var_7B.size < 2) + { + } + + return var_7B[randomint(var_7B.size)]; +} + +//Function Number: 26 +func_0EDF() +{ + if(isdefined(self.a.var_EE0)) + { + return %prone_death_quickdeath; + } + + return %dying_crawl_death_v1; +} + +//Function Number: 27 +func_0EE1() +{ + var_00 = animscripts/utility::array(%dying_back_death_v1,%dying_back_death_v2,%dying_back_death_v3,%dying_back_death_v4); + return var_00[randomint(var_00.size)]; +} + +//Function Number: 28 +func_0EE2() +{ + if(!isdefined(self.weapon) || !animscripts/utility::func_EE3() || !weaponisauto(self.weapon) || self.diequietly) + { + return 0; + } + + if(self.a.weaponpos["right"] == "none") + { + return 0; + } + + return 1; +} + +//Function Number: 29 +func_0EE5(param_00) +{ + return param_00; +} + +//Function Number: 30 +func_0EE6(param_00) +{ + return param_00; +} + +//Function Number: 31 +func_0EE7() +{ + if(isdefined(self.juggernaut)) + { + return 0; + } + + if(self.damagelocation != "none") + { + return 0; + } + + var_00 = []; + if(self.a.movement != "run") + { + if(self.var_723 > 135 || self.var_723 <= -135) + { + } + else if(self.var_723 > 45 && self.var_723 <= 135) + { + } + else if(self.var_723 > -45 && self.var_723 <= 45) + { + } + else + { + } + } + else if(self.var_723 > 135 || self.var_723 <= -135) + { + } + else if(self.var_723 > 45 && self.var_723 <= 135) + { + } + else if(self.var_723 > -45 && self.var_723 <= 45) + { + } + else + { + } + + var_01 = var_7B[randomint(var_7B.size)]; + if(getdvar("scr_expDeathMayMoveCheck","on") == "on") + { + var_02 = getmovedelta(var_01,0,1); + var_03 = self localtoworldcoords(var_02); + if(!self maymovetopoint(var_03,0)) + { + return 0; + } + } + + self animmode("nogravity"); + func_0D56(var_01); + return 1; +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/dog/dog_combat.gsc b/MW3/PC/SP/animscripts/dog/dog_combat.gsc new file mode 100644 index 0000000..72462f9 --- /dev/null +++ b/MW3/PC/SP/animscripts/dog/dog_combat.gsc @@ -0,0 +1 @@ +Failed to decompile this file, open a ticket if you need this fixed. \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/dog/dog_death.gsc b/MW3/PC/SP/animscripts/dog/dog_death.gsc new file mode 100644 index 0000000..773ac75 --- /dev/null +++ b/MW3/PC/SP/animscripts/dog/dog_death.gsc @@ -0,0 +1,47 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\dog\dog_death.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 39 ms + * Timestamp: 10/27/2023 2:17:13 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self endon("killanimscript"); + if(isdefined(self.a.var_D55)) + { + wait 1.1; + var_00 = self getdroptofloorposition(); + if(isdefined(var_00)) + { + var_01 = common_scripts\utility::spawn_tag_origin(); + var_01.origin = self.origin; + var_01.angles = self.angles; + self linkto(var_01); + var_01 moveto(var_00,0.5); + wait 0.5; + self unlink(); + var_01 delete(); + } + else + { + wait 0.5; + } + + return; + } + + self unlink(); + if(isdefined(self.enemy) && isdefined(self.enemy.var_78A) && self.enemy.var_78A == self) + { + self.enemy.var_78A = undefined; + } + + self clearanim(%root,0.2); + self setflaggedanimrestart("dog_anim",%german_shepherd_death_front,1,0.2,1); + animscripts/shared::donotetracks("dog_anim"); +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/dog/dog_flashed.gsc b/MW3/PC/SP/animscripts/dog/dog_flashed.gsc new file mode 100644 index 0000000..c445ab0 --- /dev/null +++ b/MW3/PC/SP/animscripts/dog/dog_flashed.gsc @@ -0,0 +1,40 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\dog\dog_flashed.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 31 ms + * Timestamp: 10/27/2023 2:17:13 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self endon("killanimscript"); + self endon("stop_flashbang_effect"); + wait randomfloatrange(0,0.4); + self clearanim(%root,0.1); + var_00 = maps\_utility::flashbanggettimeleftsec(); + if(var_00 > 2 && randomint(100) > 60) + { + self setflaggedanimrestart("flashed_anim",%german_shepherd_run_pain,1,0.2,self.var_10F7 * 0.75); + } + else + { + self setflaggedanimrestart("flashed_anim",%german_shepherd_run_flashbang_b,1,0.2,self.var_10F7); + } + + var_01 = getanimlength(%german_shepherd_run_flashbang_b) * self.var_10F7; + if(var_00 < var_01) + { + animscripts/notetracks::func_D4F(var_00,"flashed_anim"); + } + else + { + animscripts/shared::donotetracks("flashed_anim"); + } + + self.var_2097 = 0; + self notify("stop_flashbang_effect"); +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/dog/dog_init.gsc b/MW3/PC/SP/animscripts/dog/dog_init.gsc new file mode 100644 index 0000000..72462f9 --- /dev/null +++ b/MW3/PC/SP/animscripts/dog/dog_init.gsc @@ -0,0 +1 @@ +Failed to decompile this file, open a ticket if you need this fixed. \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/dog/dog_move.gsc b/MW3/PC/SP/animscripts/dog/dog_move.gsc new file mode 100644 index 0000000..413572d --- /dev/null +++ b/MW3/PC/SP/animscripts/dog/dog_move.gsc @@ -0,0 +1,432 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\dog\dog_move.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 15 + * Decompile Time: 270 ms + * Timestamp: 10/27/2023 2:17:15 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self endon("killanimscript"); + self clearanim(%root,0.2); + self clearanim(%german_shepherd_run_stop,0); + if(!isdefined(self.var_3B58) && !isdefined(self.var_3B0C) && self.a.movement == "run" && !isdefined(self.disableexits) || self.disableexits == 0) + { + func_3B61(); + } + + thread func_3B64(); + self.var_3B58 = undefined; + self.var_3B0C = undefined; + if(self.a.movement == "run") + { + var_00 = undefined; + var_00 = func_3B65(); + self setanimrestart(%german_shepherd_run,var_00["center"],0.2,1); + self setanimrestart(%german_shepherd_run_lean_l,var_00["left"],0.1,1); + self setanimrestart(%german_shepherd_run_lean_r,var_00["right"],0.1,1); + self setflaggedanimknob("dog_run",%german_shepherd_run_knob,1,0.2,self.moveplaybackrate); + animscripts/notetracks::func_D4F(0.1,"dog_run"); + } + else + { + self setflaggedanimrestart("dog_walk",%german_shepherd_walk,1,0.2,self.moveplaybackrate); + } + + thread animscripts/dog/dog_stop::func_3B01("normal"); + for(;;) + { + func_3B59(); + if(self.a.movement == "run") + { + if(self.disablearrivals == 0) + { + thread func_3B62(); + } + + self waittill("run"); + self clearanim(%german_shepherd_run_stop,0.1); + } + } +} + +//Function Number: 2 +func_3B59() +{ + self endon("killanimscript"); + self endon("stop_soon"); + self.var_10B7 = undefined; + for(;;) + { + if(self.disablearrivals) + { + self.stopanimdistsq = 0; + } + else + { + self.stopanimdistsq = level.var_3AEE; + } + + if(isdefined(self.var_10B7)) + { + self [[ self.var_10B7 ]](); + self.var_10B7 = undefined; + } + + if(isdefined(self.var_10AB)) + { + self [[ self.var_10AB ]](); + continue; + } + + func_3B5A(); + } +} + +//Function Number: 3 +func_3B5A() +{ + self endon("move_loop_restart"); + if(self.a.movement == "run") + { + var_00 = func_3B65(); + self clearanim(%german_shepherd_walk,0.3); + self setanim(%german_shepherd_run,var_00["center"],0.2,1); + self setanim(%german_shepherd_run_lean_l,var_00["left"],0.1,1); + self setanim(%german_shepherd_run_lean_r,var_00["right"],0.1,1); + self setflaggedanimknob("dog_run",%german_shepherd_run_knob,1,0.2,self.moveplaybackrate); + animscripts/notetracks::func_D4F(0.2,"dog_run"); + return; + } + + self clearanim(%german_shepherd_run_knob,0.3); + self setflaggedanim("dog_walk",%german_shepherd_walk,1,0.2,self.moveplaybackrate); + animscripts/notetracks::func_D4F(0.2,"dog_walk"); +} + +//Function Number: 4 +func_1090() +{ + self endon("killanimscript"); + self.var_10A8 = undefined; + for(;;) + { + self waittill("path_changed",var_00,var_01); + if(isdefined(self.var_10A8) || isdefined(self.noturnanims)) + { + continue; + } + + if(self.a.movement != "run") + { + continue; + } + + var_02 = angleclamp180(self.angles[1] - vectortoyaw(var_01)); + var_03 = func_3B5C(var_02); + if(isdefined(var_03)) + { + self.var_10C0 = var_03; + self.var_10C1 = gettime(); + self.var_10AB = ::func_3B5D; + self notify("move_loop_restart"); + } + } +} + +//Function Number: 5 +func_3B5B() +{ + self endon("killanimscript"); + self.var_10A8 = undefined; + for(;;) + { + if(self.var_774 > 40 && !isdefined(self.var_10AB) && !isdefined(self.var_10A8) && !isdefined(self.noturnanims) && self.a.movement == "run") + { + var_00 = vectortoyaw(self.var_773); + var_01 = angleclamp180(self.angles[1] - var_00); + var_02 = func_3B5C(var_01); + if(isdefined(var_02)) + { + self.var_10C0 = var_02; + self.var_10C1 = gettime(); + self.var_10AB = ::func_3B5D; + self notify("move_loop_restart"); + } + } + + wait 0.05; + } +} + +//Function Number: 6 +func_3B5C(param_00) +{ + var_01 = undefined; + if(param_00 < -135) + { + var_01 = %german_shepherd_run_start_180_l; + } + else if(param_00 > 135) + { + var_01 = %german_shepherd_run_start_180_r; + } + else if(param_00 < -60) + { + var_01 = %german_shepherd_run_start_l; + } + else if(param_00 > 60) + { + var_01 = %german_shepherd_run_start_r; + } + + return var_01; +} + +//Function Number: 7 +func_3B5D() +{ + self endon("killanimscript"); + self.var_10AB = undefined; + var_00 = self.var_10C0; + if(gettime() > self.var_10C1 + 50) + { + return; + } + + self animmode("zonly_physics",0); + self clearanim(%root,0.2); + self.var_10B7 = ::func_3B5E; + self.var_10A8 = 1; + self setflaggedanimrestart("turnAnim",var_00,1,0.2,self.moveplaybackrate); + self orientmode("face current"); + var_01 = getanimlength(var_00) * self.moveplaybackrate; + animscripts/notetracks::func_D4F(var_01 * 0.2,"turnAnim"); + self orientmode("face motion"); + self animmode("none",0); + var_02 = self.turnrate; + self.turnrate = 0.4; + animscripts/notetracks::func_D4F(var_01 * 0.65,"turnAnim"); + self.turnrate = var_02; + self.var_10A8 = undefined; +} + +//Function Number: 8 +func_3B5E() +{ + self.var_10A8 = undefined; + self orientmode("face default"); + self clearanim(%root,0.2); + self animmode("none",0); +} + +//Function Number: 9 +func_3B5F() +{ + self endon("killanimscript"); + for(var_00 = 0;var_00 < 2;var_00++) + { + var_01 = vectortoangles(self.var_773); + self orientmode("face angle",var_01); + } +} + +//Function Number: 10 +func_3B60() +{ + self endon("move_loop_restart"); + if(self.var_774 == 0) + { + thread func_3B5B(); + return; + } + + var_00 = self.origin; + var_01 = level.var_3AF5 * 0.6; + var_00 = var_00 + self.var_773 * var_01; + var_02 = distancesquared(self.origin,self.pathgoalpos) < var_01 * var_01; + var_03 = vectortoangles(self.var_773); + if(!var_02 && self maymovetopoint(var_00)) + { + var_04 = angleclamp180(var_03[1] - self.angles[1]); + if(var_04 >= 0) + { + if(var_04 < 45) + { + var_05 = 8; + } + else if(var_05 < 135) + { + var_05 = 6; + } + else + { + var_05 = 3; + } + } + else if(var_05 > -45) + { + var_05 = 8; + } + else if(var_05 > -135) + { + var_05 = 4; + } + else + { + var_05 = 1; + } + + self setanimrestart(level.var_3AF8[var_05],1,0.2,1); + var_06 = self.angles[1] + level.var_3AF7[var_05]; + var_07 = angleclamp180(var_03[1] - var_06); + self orientmode("face angle",self.angles[1] + var_07); + self animmode("zonly_physics",0); + var_08 = getanimlength(level.var_3AF8[var_05]) * self.moveplaybackrate; + animscripts/notetracks::func_D4F(var_08 * 0.6,"turnAnim"); + self orientmode("face motion"); + self animmode("none",0); + thread func_3B5B(); + animscripts/notetracks::func_D4F(var_08 * 0.25,"turnAnim"); + return; + } + + self orientmode("face angle",var_03[1]); + self animmode("none"); + self.var_3AFC = self.turnrate; + self.turnrate = 0.5; + var_09 = angleclamp180(var_03[1] - self.angles[1]); + if(abs(var_09) > 20) + { + if(var_09 > 0) + { + var_0A = %german_shepherd_rotate_ccw; + } + else + { + var_0A = %german_shepherd_rotate_cw; + } + + self setflaggedanimrestart("dog_turn",var_0A,1,0.2,1); + animscripts/shared::donotetracks("dog_turn"); + self clearanim(%german_shepherd_rotate_cw,0.2); + self clearanim(%german_shepherd_rotate_ccw,0.2); + } + + thread func_3B5B(); + self.turnrate = self.var_3AFC; + self.var_3AFC = undefined; + self orientmode("face motion"); +} + +//Function Number: 11 +func_3B61() +{ + if(isdefined(self.pathgoalpos)) + { + if(isdefined(self.pathgoalpos)) + { + func_3B60(); + self clearanim(%root,0.2); + return; + } + } + + self orientmode("face default"); + self setflaggedanimknobrestart("dog_prerun",%german_shepherd_run_start,1,0.2,self.moveplaybackrate); + animscripts/shared::donotetracks("dog_prerun"); + self animmode("none",0); + self clearanim(%root,0.2); +} + +//Function Number: 12 +func_3B62() +{ + self endon("killanimscript"); + self endon("run"); + self clearanim(%german_shepherd_run_knob,0.1); + self setflaggedanimrestart("stop_anim",%german_shepherd_run_stop,1,0.2,1); + animscripts/shared::donotetracks("stop_anim"); +} + +//Function Number: 13 +func_3B63(param_00,param_01) +{ + maps\_utility::play_sound_on_tag_endon_death(param_00,"tag_eye"); + if(isalive(self)) + { + self notify(param_01); + } +} + +//Function Number: 14 +func_3B64() +{ + self endon("killanimscript"); + wait 0.2; + for(;;) + { + var_00 = undefined; + if(isdefined(self.var_23DB)) + { + var_00 = "anml_dog_growl"; + } + else if(!isdefined(self.script_nobark)) + { + var_00 = "anml_dog_bark"; + } + + if(!isdefined(var_00)) + { + break; + } + + thread func_3B63(var_00,"randomRunSound"); + self waittill("randomRunSound"); + wait randomfloatrange(0.1,0.3); + } +} + +//Function Number: 15 +func_3B65() +{ + var_00 = []; + if(self.var_76C > 0) + { + if(self.var_76C < 0.95) + { + self.var_76C = 0.95; + } + + if(var_7B["right"] > 1) + { + } + else if(var_7B["right"] < 0) + { + } + } + else if(self.var_76C < 0) + { + if(self.var_76C > -0.95) + { + self.var_76C = -0.95; + } + + if(var_7B["left"] > 1) + { + } + + if(var_7B["left"] < 0) + { + } + } + else + { + } + + return var_7B; +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/dog/dog_pain.gsc b/MW3/PC/SP/animscripts/dog/dog_pain.gsc new file mode 100644 index 0000000..d54d26a --- /dev/null +++ b/MW3/PC/SP/animscripts/dog/dog_pain.gsc @@ -0,0 +1,24 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\dog\dog_pain.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 32 ms + * Timestamp: 10/27/2023 2:17:15 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self endon("killanimscript"); + if(isdefined(self.enemy) && isdefined(self.enemy.var_78A) && self.enemy.var_78A == self) + { + self unlink(); + self.enemy.var_78A = undefined; + } + + self clearanim(%root,0.2); + self setflaggedanimrestart("dog_pain_anim",%german_shepherd_run_pain,1,0.2,1); + animscripts/shared::donotetracks("dog_pain_anim"); +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/dog/dog_reactions.gsc b/MW3/PC/SP/animscripts/dog/dog_reactions.gsc new file mode 100644 index 0000000..8ced0d4 --- /dev/null +++ b/MW3/PC/SP/animscripts/dog/dog_reactions.gsc @@ -0,0 +1,14 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\dog\dog_reactions.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 30 ms + * Timestamp: 10/27/2023 2:17:16 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/dog/dog_scripted.gsc b/MW3/PC/SP/animscripts/dog/dog_scripted.gsc new file mode 100644 index 0000000..b8a3955 --- /dev/null +++ b/MW3/PC/SP/animscripts/dog/dog_scripted.gsc @@ -0,0 +1,51 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\dog\dog_scripted.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 44 ms + * Timestamp: 10/27/2023 2:17:16 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self endon("death"); + self notify("killanimscript"); + self.var_3B66["root"] = %root; + self endon("end_sequence"); + self startscriptedanim(self.var_3B66["notifyName"],self.var_3B66["origin"],self.var_3B66["angles"],self.var_3B66["anim"],self.var_3B66["animMode"],self.var_3B66["root"]); + self.var_3B66 = undefined; + if(isdefined(self.var_3B67)) + { + self.var_3B68 = self.var_3B67; + } + + self waittill("killanimscript"); +} + +//Function Number: 2 +init(param_00,param_01,param_02,param_03,param_04,param_05) +{ + self.var_3B66["notifyName"] = param_00; + self.var_3B66["origin"] = param_01; + self.var_3B66["angles"] = param_02; + self.var_3B66["anim"] = param_03; + if(isdefined(param_04)) + { + self.var_3B66["animMode"] = param_04; + } + else + { + self.var_3B66["animMode"] = "normal"; + } + + if(isdefined(param_05)) + { + self.var_3B66["root"] = param_05; + return; + } + + self.var_3B66["root"] = %root; +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/dog/dog_stop.gsc b/MW3/PC/SP/animscripts/dog/dog_stop.gsc new file mode 100644 index 0000000..12aa118 --- /dev/null +++ b/MW3/PC/SP/animscripts/dog/dog_stop.gsc @@ -0,0 +1,174 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\dog\dog_stop.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 6 + * Decompile Time: 109 ms + * Timestamp: 10/27/2023 2:17:17 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self endon("killanimscript"); + self clearanim(%root,0.1); + self clearanim(%german_shepherd_idle,0.2); + self clearanim(%german_shepherd_attackidle_knob,0.2); + thread func_3B01("attackIdle"); + for(;;) + { + if(func_3AFF()) + { + self clearanim(%german_shepherd_idle,0.2); + func_3AFE(); + } + else + { + self orientmode("face current"); + self clearanim(%german_shepherd_attackidle_knob,0.2); + self setflaggedanimrestart("dog_idle",%german_shepherd_idle,1,0.2,self.var_10F7); + } + + animscripts/shared::donotetracks("dog_idle"); + if(isdefined(self.var_3AFC)) + { + self.turnrate = self.var_3AFC; + self.var_3AFC = undefined; + } + } +} + +//Function Number: 2 +func_3AFD(param_00) +{ + var_01 = self.enemy.origin - self.origin; + var_02 = length(var_01); + if(var_02 < 1) + { + return 1; + } + + var_03 = anglestoforward(self.angles); + return var_03[0] * var_01[0] + var_03[1] * var_01[1] / var_02 > param_00; +} + +//Function Number: 3 +func_3AFE() +{ + self clearanim(%german_shepherd_attackidle_knob,0.1); + if(func_3AFD(0.866)) + { + self orientmode("face angle",self.angles[1]); + } + else + { + if(isdefined(self.enemy)) + { + var_00 = vectortoyaw(self.enemy.origin - self.origin); + var_01 = angleclamp180(var_00 - self.angles[1]); + if(abs(var_01) > 10) + { + self orientmode("face enemy"); + self.var_3AFC = self.turnrate; + self.turnrate = 0.3; + if(var_01 > 0) + { + var_02 = %german_shepherd_rotate_ccw; + } + else + { + var_02 = %german_shepherd_rotate_cw; + } + + self setflaggedanimrestart("dog_turn",var_02,1,0.2,1); + animscripts/shared::donotetracks("dog_turn"); + self.turnrate = self.var_3AFC; + self.var_3AFC = undefined; + self clearanim(%german_shepherd_rotate_cw,0.2); + self clearanim(%german_shepherd_rotate_ccw,0.2); + } + } + + self orientmode("face angle",self.angles[1]); + } + + if(func_3B00()) + { + self setflaggedanimrestart("dog_idle",%german_shepherd_attackidle_growl,1,0.2,1); + return; + } + + var_03 = 33; + var_04 = 66; + if(isdefined(self.mode)) + { + if(self.mode == "growl") + { + var_03 = 15; + var_04 = 30; + } + else if(self.mode == "bark") + { + var_03 = 15; + var_04 = 85; + } + } + + var_05 = randomint(100); + if(var_05 < var_03) + { + self setflaggedanimrestart("dog_idle",%german_shepherd_attackidle_b,1,0.2,self.var_10F7); + return; + } + + if(var_05 < var_04) + { + self setflaggedanimrestart("dog_idle",%german_shepherd_attackidle_bark,1,0.2,self.var_10F7); + return; + } + + self setflaggedanimrestart("dog_idle",%german_shepherd_attackidle_growl,1,0.2,self.var_10F7); +} + +//Function Number: 4 +func_3AFF() +{ + return isdefined(self.enemy) && isalive(self.enemy) && distancesquared(self.origin,self.enemy.origin) < 1000000; +} + +//Function Number: 5 +func_3B00() +{ + if(isdefined(self.var_23DB)) + { + return 1; + } + + if(!isalive(self.enemy)) + { + return 1; + } + + return !self cansee(self.enemy); +} + +//Function Number: 6 +func_3B01(param_00) +{ + self endon("killanimscript"); + self endon("stop tracking"); + self clearanim(%german_shepherd_look_2,0); + self clearanim(%german_shepherd_look_4,0); + self clearanim(%german_shepherd_look_6,0); + self clearanim(%german_shepherd_look_8,0); + self setdefaultaimlimits(); + self.var_716 = 90; + self.var_717 = -90; + self setanimlimited(level.var_3AF9[param_00][2],1,0); + self setanimlimited(level.var_3AF9[param_00][4],1,0); + self setanimlimited(level.var_3AF9[param_00][6],1,0); + self setanimlimited(level.var_3AF9[param_00][8],1,0); + animscripts/track::func_CC4(1,0.2); + animscripts/track::func_CAA(%german_shepherd_look_2,%german_shepherd_look_4,%german_shepherd_look_6,%german_shepherd_look_8); +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/door.gsc b/MW3/PC/SP/animscripts/door.gsc new file mode 100644 index 0000000..5a72a03 --- /dev/null +++ b/MW3/PC/SP/animscripts/door.gsc @@ -0,0 +1,309 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\door.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 11 + * Decompile Time: 206 ms + * Timestamp: 10/27/2023 2:18:17 AM +*******************************************************************/ + +//Function Number: 1 +func_1088() +{ + self endon("killanimscript"); + if(isdefined(self.var_1089)) + { + return; + } + + for(;;) + { + var_00 = self getdoorpathnode(); + if(isdefined(var_00)) + { + break; + } + + wait 0.2; + } + + var_01 = var_00.type == "Door Interior" || self comparenodedirtopathdir(var_00); + if(var_01) + { + func_10A1(var_00); + } + else + { + func_10A4(var_00); + } + + for(;;) + { + var_02 = self getdoorpathnode(); + if(!isdefined(var_02) || var_02 != var_00) + { + break; + } + + wait 0.2; + } + + thread func_1088(); +} + +//Function Number: 2 +func_108A() +{ + self endon("killanimscript"); + self.teamflashbangimmunity = 1; + wait 5; + self.teamflashbangimmunity = undefined; +} + +//Function Number: 3 +func_108C(param_00) +{ + thread func_108A(); + if(self.grenadeweapon == "flash_grenade") + { + self notify("flashbang_thrown"); + } + + self orientmode("face current"); + param_00.var_108D = gettime() + 5000; + self.var_108E = gettime() + 100000; + self notify("move_interrupt"); + self.var_FC9 = undefined; + self clearanim(%combatrun,0.2); + self.a.movement = "stop"; + self waittill("done_grenade_throw"); + self orientmode("face default"); + self.var_108E = gettime() + 5000; + self.grenadeweapon = self.var_108F; + self.var_108F = undefined; + animscripts/run::func_FE2(); + thread animscripts/move::func_1090(); + thread animscripts/move::func_1091(1); +} + +//Function Number: 4 +func_1092(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = 0; + var_06 = 3; + var_07 = undefined; + var_07 = %cqb_stand_grenade_throw; + var_08 = anglestoforward(param_00.angles); + if(param_00.type == "Door Interior" && !self comparenodedirtopathdir(param_00)) + { + var_08 = -1 * var_08; + } + + var_09 = (param_00.origin[0],param_00.origin[1],param_00.origin[2] + 64); + var_0A = var_09; + if(param_02) + { + var_0B = anglestoright(param_00.angles); + var_0C = param_00.origin - self.origin; + var_0D = vectordot(var_0B,var_0C); + if(var_0D > 20) + { + var_0D = 20; + } + else if(var_0D < -20) + { + var_0D = -20; + } + + var_0A = var_09 + var_0D * var_0B; + } + + while(var_06 > 0) + { + if(isdefined(self.var_73C) || !isdefined(self.enemy)) + { + return; + } + + if(func_10A0(param_00,var_08)) + { + return; + } + + if(!self seerecently(self.enemy,0.2) && self.a.pose == "stand" && func_109F(self.enemy.origin - param_00.origin,360000,16384)) + { + if(isdefined(param_00.var_108D) && param_00.var_108D > gettime()) + { + return; + } + + if(self canshootenemy()) + { + return; + } + + var_0C = param_00.origin - self.origin; + if(lengthsquared(var_0C) < param_03) + { + return; + } + + if(vectordot(var_0C,var_08) < 0) + { + return; + } + + self.var_108F = self.grenadeweapon; + self.grenadeweapon = param_01; + animscripts/combat_utility::func_1093(self.enemy); + if(!var_05) + { + var_0E = var_09 + var_08 * 100; + if(!self isgrenadepossafe(self.enemy,var_0E,128)) + { + return; + } + } + + var_05 = 1; + if(animscripts/combat_utility::func_1095(self.enemy,var_0A,var_07,animscripts/combat_utility::func_1094(var_07),1,0,1)) + { + func_108C(param_00); + return; + } + } + + var_06--; + wait param_04; + var_0F = self getdoorpathnode(); + if(!isdefined(var_0F) || var_0F != param_00) + { + return; + } + } +} + +//Function Number: 5 +func_1096() +{ + self endon("killanimscript"); + if(isdefined(self.var_1089)) + { + return; + } + + self.var_1097 = 0; + for(;;) + { + if(self isindoor() && !self.var_748) + { + func_1098(); + } + else if(!isdefined(self.var_108E) || self.var_108E < gettime()) + { + self.var_108E = undefined; + func_109C(); + } + + wait 0.2; + } +} + +//Function Number: 6 +func_1098() +{ + if(!isdefined(self.neverenablecqb) && !self.var_748) + { + self.var_1097 = 1; + if(!isdefined(self.cqbwalking) || !self.cqbwalking) + { + maps\_utility::enable_cqbwalk(1); + } + } +} + +//Function Number: 7 +func_109C() +{ + if(!isdefined(self.cqbenabled)) + { + self.var_1097 = 0; + if(isdefined(self.cqbwalking) && self.cqbwalking) + { + maps\_utility::disable_cqbwalk(); + } + } +} + +//Function Number: 8 +func_109F(param_00,param_01,param_02) +{ + return param_00[0] * param_00[0] + param_00[1] * param_00[1] < param_01 && param_00[2] * param_00[2] < param_02; +} + +//Function Number: 9 +func_10A0(param_00,param_01) +{ + var_02 = param_00.origin - self.origin; + var_03 = param_00.origin - self.enemy.origin; + return vectordot(var_02,param_01) * vectordot(var_03,param_01) > 0; +} + +//Function Number: 10 +func_10A1(param_00) +{ + for(;;) + { + if(isdefined(self.var_10A2) && self.var_10A2 == 0 || self.var_10A2 < randomfloat(1)) + { + break; + } + + if(func_109F(self.origin - param_00.origin,562500,25600)) + { + func_1092(param_00,"fraggrenade",0,302500,0.3); + param_00 = self getdoorpathnode(); + if(!isdefined(param_00)) + { + return; + } + + break; + } + + wait 0.1; + } + + for(;;) + { + if(func_109F(self.origin - param_00.origin,-28672,6400)) + { + func_1098(); + self.var_108E = gettime() + 6000; + if(isdefined(self.doorflashchance) && self.doorflashchance == 0 || self.doorflashchance < randomfloat(1)) + { + return; + } + + func_1092(param_00,"flash_grenade",1,4096,0.2); + return; + } + + wait 0.1; + } +} + +//Function Number: 11 +func_10A4(param_00) +{ + for(;;) + { + if(!self.var_1097 || distancesquared(self.origin,param_00.origin) < 1024) + { + return; + } + + wait 0.1; + } +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/face.gsc b/MW3/PC/SP/animscripts/face.gsc new file mode 100644 index 0000000..c018291 --- /dev/null +++ b/MW3/PC/SP/animscripts/face.gsc @@ -0,0 +1,349 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\face.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 13 + * Decompile Time: 231 ms + * Timestamp: 10/27/2023 2:18:18 AM +*******************************************************************/ + +//Function Number: 1 +func_0C3A() +{ + if(!level.usefacialanims) + { + return; + } + + if(!isdefined(self.a.var_C3C)) + { + self.a.var_C3C = 0; + self.a.var_C3E = level.var_C3D; + self.var_C3F = []; + self.var_C40 = 0; + } +} + +//Function Number: 2 +func_0C41(param_00) +{ + var_01 = undefined; + switch(self.voice) + { + case "seal": + case "taskforce": + case "french": + case "pmc": + case "czech": + case "delta": + case "american": + var_02 = "friendly"; + var_03 = level.var_C42; + break; + + default: + var_02 = "enemy"; + var_03 = level.var_C43; + break; + } + + var_01 = 1 + self getentitynumber() % var_03; + var_02 = var_02 + "_" + var_01; + var_04 = undefined; + switch(param_00) + { + case "meleeattack": + case "meleecharge": + var_05 = 0.5; + break; + + case "flashbang": + var_05 = 0.7; + break; + + case "pain": + var_05 = 0.9; + break; + + case "death": + var_05 = 1; + break; + + default: + var_05 = 0.3; + break; + } + + var_06 = "generic_" + param_00 + "_" + var_02; + thread func_0C49(var_04,var_06,var_05); +} + +//Function Number: 3 +func_0C44(param_00) +{ + animscripts/battlechatter::func_ABF(); + self.a.var_C3E = param_00; +} + +//Function Number: 4 +func_0C45(param_00) +{ + if(!level.usefacialanims) + { + return; + } + + animscripts/battlechatter::func_ABF(); + self.a.var_C3E = param_00; + func_0C48(); +} + +//Function Number: 5 +func_0C46(param_00,param_01,param_02,param_03,param_04,param_05) +{ + thread func_0C49(param_00,param_01,param_02,param_03,param_04,param_05); +} + +//Function Number: 6 +func_0C47(param_00) +{ +} + +//Function Number: 7 +func_0C48() +{ +} + +//Function Number: 8 +func_0C49(param_00,param_01,param_02,param_03,param_04,param_05) +{ + self.a.var_C4A = 1; + self.a.var_C4B = 1; + if(isdefined(param_03)) + { + if(isdefined(param_01)) + { + self playsoundatviewheight(param_01,"animscript facesound" + param_03,1); + thread func_0C52(param_03); + } + } + else + { + self playsoundatviewheight(param_01); + } + + if(!level.usefacialanims) + { + return; + } + + func_0C3A(); + if(!isdefined(param_00) && !isdefined(param_01)) + { + if(isdefined(param_03)) + { + wait 0; + self.var_C4C = "failed"; + self notify(param_03); + } + + return; + } + + self endon("death"); + if(isstring(param_02)) + { + switch(param_02) + { + case "any": + param_02 = 0.1; + break; + + case "pain": + param_02 = 0.9; + break; + + case "death": + param_02 = 1; + break; + } + } + + if(param_02 <= self.a.var_C3C && isdefined(param_04) && param_04 == "wait") + { + var_06 = self.var_C3F.size; + var_07 = self.var_C40 + 1; + self.var_C3F[var_06]["facialanim"] = param_00; + self.var_C3F[var_06]["soundAlias"] = param_01; + self.var_C3F[var_06]["importance"] = param_02; + self.var_C3F[var_06]["notifyString"] = param_03; + self.var_C3F[var_06]["waitOrNot"] = param_04; + self.var_C3F[var_06]["timeToWait"] = param_05; + self.var_C3F[var_06]["notifyNum"] = var_07; + thread func_0C53("animscript face stop waiting " + self.var_C3F[var_06]["notifyNum"],"Face done waiting","Face done waiting"); + if(isdefined(param_05)) + { + thread func_0C54(param_05,"Face done waiting","Face done waiting"); + } + + self waittill("Face done waiting"); + var_06 = undefined; + for(var_08 = 0;var_08 < self.var_C3F.size;var_08++) + { + if(self.var_C3F[var_08]["notifyNum"] == var_07) + { + var_06 = var_08; + break; + } + } + + if(self.a.var_C4D == "notify") + { + func_0C49(self.var_C3F[var_06]["facialanim"],self.var_C3F[var_06]["soundAlias"],self.var_C3F[var_06]["importance"],self.var_C3F[var_06]["notifyString"]); + } + else if(isdefined(param_03)) + { + self.var_C4C = "failed"; + self notify(param_03); + } + + for(var_08 = var_06 + 1;var_08 < self.var_C3F.size;var_08++) + { + self.var_C3F[var_08 - 1]["facialanim"] = self.var_C3F[var_08]["facialanim"]; + self.var_C3F[var_08 - 1]["soundAlias"] = self.var_C3F[var_08]["soundAlias"]; + self.var_C3F[var_08 - 1]["importance"] = self.var_C3F[var_08]["importance"]; + self.var_C3F[var_08 - 1]["notifyString"] = self.var_C3F[var_08]["notifyString"]; + self.var_C3F[var_08 - 1]["waitOrNot"] = self.var_C3F[var_08]["waitOrNot"]; + self.var_C3F[var_08 - 1]["timeToWait"] = self.var_C3F[var_08]["timeToWait"]; + self.var_C3F[var_08 - 1]["notifyNum"] = self.var_C3F[var_08]["notifyNum"]; + } + + self.var_C3F[self.var_C3F.size - 1] = undefined; + return; + } + + if(param_02 >= self.a.var_C3C) + { + self notify("end current face"); + self endon("end current face"); + if(isdefined(param_03)) + { + if(isdefined(self.a.var_C4E)) + { + self.var_C4C = "interrupted"; + self notify(self.a.var_C4E); + } + } + + self.a.var_C3C = param_02; + self.a.var_C4F = param_01; + self.a.var_C4E = param_03; + self.a.var_C4A = 1; + self.a.var_C4B = 1; + if(isdefined(param_00)) + { + self setflaggedanimknobrestart("animscript faceanim",param_00,1,0.1,1); + self.a.var_C4A = 0; + thread func_0C50(); + } + + if(isdefined(param_01)) + { + self playsoundatviewheight(param_01,"animscript facesound",1); + self.a.var_C4B = 0; + thread func_0C52(); + } + + while(!self.a.var_C4A || !self.a.var_C4B) + { + self waittill("animscript facedone"); + } + + self.a.var_C3C = 0; + self.a.var_C4F = undefined; + self.a.var_C4E = undefined; + if(isdefined(param_03)) + { + self.var_C4C = "finished"; + self notify(param_03); + } + + if(isdefined(self.var_C3F) && self.var_C3F.size > 0) + { + var_09 = 0; + var_0A = 1; + for(var_08 = 0;var_08 < self.var_C3F.size;var_08++) + { + if(self.var_C3F[var_08]["importance"] > var_09) + { + var_09 = self.var_C3F[var_08]["importance"]; + var_0A = var_08; + } + } + + self notify("animscript face stop waiting " + self.var_C3F[var_0A]["notifyNum"]); + return; + } + + if(isai(self)) + { + func_0C48(); + return; + } + + return; + } + + if(isdefined(param_03)) + { + self.var_C4C = "failed"; + self notify(param_03); + return; + } +} + +//Function Number: 9 +func_0C50() +{ + self endon("death"); + self endon("end current face"); + animscripts/shared::donotetracks("animscript faceanim"); + self.a.var_C4A = 1; + self notify("animscript facedone"); +} + +//Function Number: 10 +func_0C52(param_00) +{ + self endon("death"); + self waittill("animscript facesound" + param_00); + self notify(param_00); +} + +//Function Number: 11 +func_0C53(param_00,param_01,param_02) +{ + self endon("death"); + self endon(param_02); + self waittill(param_00); + self.a.var_C4D = "notify"; + self notify(param_01); +} + +//Function Number: 12 +func_0C54(param_00,param_01,param_02) +{ + self endon("death"); + self endon(param_02); + wait param_00; + self.a.var_C4D = "time"; + self notify(param_01); +} + +//Function Number: 13 +func_0C55() +{ + anim.var_C42 = 8; + anim.var_C43 = 8; +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/first_frame.gsc b/MW3/PC/SP/animscripts/first_frame.gsc new file mode 100644 index 0000000..99faab3 --- /dev/null +++ b/MW3/PC/SP/animscripts/first_frame.gsc @@ -0,0 +1,23 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\first_frame.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 29 ms + * Timestamp: 10/27/2023 2:18:19 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self endon("death"); + self endon("stop_first_frame"); + self notify("killanimscript"); + self.pushable = 0; + self clearanim(self.var_C56,0.3); + self orientmode("face angle",self.angles[1]); + self setanim(level.scr_anim[self._animname][self._first_frame_anim],1,0,0); + self._first_frame_anim = undefined; + self waittill("killanimscript"); +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/flashed.gsc b/MW3/PC/SP/animscripts/flashed.gsc new file mode 100644 index 0000000..05257a0 --- /dev/null +++ b/MW3/PC/SP/animscripts/flashed.gsc @@ -0,0 +1,95 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\flashed.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 6 + * Decompile Time: 110 ms + * Timestamp: 10/27/2023 2:18:19 AM +*******************************************************************/ + +//Function Number: 1 +func_208E() +{ + level.var_208F[0] = %exposed_flashbang_v1; + level.var_208F[1] = %exposed_flashbang_v2; + level.var_208F[2] = %exposed_flashbang_v3; + level.var_208F[3] = %exposed_flashbang_v4; + level.var_208F[4] = %exposed_flashbang_v5; + func_2091(); + anim.var_2090 = 0; +} + +//Function Number: 2 +func_2091() +{ + for(var_00 = 0;var_00 < level.var_208F.size;var_00++) + { + var_01 = randomint(level.var_208F.size); + var_02 = level.var_208F[var_00]; + level.var_208F[var_00] = level.var_208F[var_01]; + level.var_208F[var_01] = var_02; + } +} + +//Function Number: 3 +func_2092() +{ + level.var_2090++; + if(level.var_2090 >= level.var_208F.size) + { + anim.var_2090 = 0; + func_2091(); + } + + return level.var_208F[level.var_2090]; +} + +//Function Number: 4 +func_2093(param_00) +{ + self endon("killanimscript"); + self setflaggedanimknoball("flashed_anim",param_00,%body,0.2,randomfloatrange(0.9,1.1)); + animscripts/shared::donotetracks("flashed_anim"); +} + +//Function Number: 5 +main() +{ + self endon("death"); + self endon("killanimscript"); + animscripts/utility::func_D15("flashed"); + var_00 = maps\_utility::flashbanggettimeleftsec(); + if(var_00 <= 0) + { + return; + } + + animscripts/face::func_C41("flashbang"); + if(isdefined(self.var_2095)) + { + self [[ self.var_2095 ]](); + return; + } + + var_01 = func_2092(); + func_2096(var_01,var_00); +} + +//Function Number: 6 +func_2096(param_00,param_01) +{ + self endon("death"); + self endon("killanimscript"); + if(self.a.pose == "prone") + { + animscripts/utility::func_F7D(1); + } + + self.a.pose = "stand"; + self.allowdeath = 1; + thread func_2093(param_00); + wait param_01; + self notify("stop_flashbang_effect"); + self.var_2097 = 0; +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/grenade_cower.gsc b/MW3/PC/SP/animscripts/grenade_cower.gsc new file mode 100644 index 0000000..b2c2ca2 --- /dev/null +++ b/MW3/PC/SP/animscripts/grenade_cower.gsc @@ -0,0 +1,99 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\grenade_cower.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 3 + * Decompile Time: 71 ms + * Timestamp: 10/27/2023 2:18:20 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self endon("killanimscript"); + animscripts/utility::func_D15("grenadecower"); + if(isdefined(self.var_3ACA)) + { + self [[ self.var_3ACA ]](); + return; + } + + if(self.a.pose == "prone") + { + animscripts/stop::main(); + return; + } + + self animmode("zonly_physics"); + self orientmode("face angle",self.angles[1]); + var_00 = 0; + if(isdefined(self.var_73C)) + { + var_00 = angleclamp180(vectortoangles(self.var_73C.origin - self.origin)[1] - self.angles[1]); + } + else + { + var_00 = self.angles[1]; + } + + if(self.a.pose == "stand") + { + if(isdefined(self.var_73C) && func_3FE0(var_00)) + { + return; + } + + self setflaggedanimknoballrestart("cowerstart",%exposed_squat_down_grenade_f,%body,1,0.2); + animscripts/shared::donotetracks("cowerstart"); + } + + self.a.pose = "crouch"; + self.a.movement = "stop"; + self setflaggedanimknoballrestart("cower",%exposed_squat_idle_grenade_f,%body,1,0.2); + animscripts/shared::donotetracks("cower"); + self waittill("never"); +} + +//Function Number: 2 +func_067F() +{ + self.var_765 = 1; +} + +//Function Number: 3 +func_3FE0(param_00) +{ + if(randomint(2) == 0) + { + return 0; + } + + if(self.var_786 != "none") + { + return 0; + } + + var_01 = undefined; + if(abs(param_00) > 90) + { + var_01 = %exposed_dive_grenade_b; + } + else + { + var_01 = %exposed_dive_grenade_f; + } + + var_02 = getmovedelta(var_01,0,0.5); + var_03 = self localtoworldcoords(var_02); + if(!self maymovetopoint(var_03)) + { + return 0; + } + + self.var_765 = 0; + self setflaggedanimknoballrestart("cowerstart",var_01,%body,1,0.2); + animscripts/shared::donotetracks("cowerstart"); + self.var_765 = 1; + return 1; +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/grenade_return_throw.gsc b/MW3/PC/SP/animscripts/grenade_return_throw.gsc new file mode 100644 index 0000000..d8ff732 --- /dev/null +++ b/MW3/PC/SP/animscripts/grenade_return_throw.gsc @@ -0,0 +1,98 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\grenade_return_throw.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 4 + * Decompile Time: 83 ms + * Timestamp: 10/27/2023 2:18:21 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self orientmode("face default"); + self endon("killanimscript"); + animscripts/utility::func_D15("grenade_return_throw"); + self animmode("zonly_physics"); + var_00 = undefined; + var_01 = 1000; + if(isdefined(self.enemy)) + { + var_01 = distance(self.origin,self.enemy.origin); + } + + var_02 = []; + if(var_01 < 600 && func_3FE1()) + { + if(var_01 < 300) + { + } + else + { + } + } + + if(var_7B.size == 0) + { + } + + var_01 = var_7B[randomint(var_7B.size)]; + self setflaggedanimknoballrestart("throwanim",var_01,%body,1,0.3); + var_04 = animhasnotetrack(var_01,"grenade_left") || animhasnotetrack(var_01,"grenade_right"); + if(var_04) + { + animscripts/shared::func_C9B(self.weapon,"left"); + thread func_3FE2(); + thread func_3FE3("throwanim","grenade_left"); + thread func_3FE3("throwanim","grenade_right"); + self waittill(%grenade_return_running_throw_forward,var_7B[0],%grenade_return_standing_throw_forward_1,var_7B[1],%grenade_return_running_throw_forward,var_7B[0],%grenade_return_standing_throw_overhand_forward,var_7B[1],%grenade_return_standing_throw_overhand_forward,var_7B[0],"grenade_pickup"); + self pickupgrenade(); + animscripts/battlechatter_ai::func_B3A("grenade"); + self waittillmatch("grenade_throw","throwanim"); + } + else + { + self waittillmatch("grenade_throw","throwanim"); + self pickupgrenade(); + animscripts/battlechatter_ai::func_B3A("grenade"); + } + + if(isdefined(self.var_73C)) + { + self throwgrenade(); + } + + wait 1; + if(var_04) + { + self notify("put_weapon_back_in_right_hand"); + animscripts/shared::func_C9B(self.weapon,"right"); + } +} + +//Function Number: 2 +func_3FE1() +{ + var_00 = (self.origin[0],self.origin[1],self.origin[2] + 20); + var_01 = var_00 + anglestoforward(self.angles) * 50; + return sighttracepassed(var_00,var_01,0,undefined); +} + +//Function Number: 3 +func_3FE2() +{ + self endon("death"); + self endon("put_weapon_back_in_right_hand"); + self waittill("killanimscript"); + animscripts/shared::func_C9B(self.weapon,"right"); +} + +//Function Number: 4 +func_3FE3(param_00,param_01) +{ + self endon("killanimscript"); + self endon("grenade_pickup"); + self waittillmatch(param_01,param_00); + self notify("grenade_pickup"); +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/init.gsc b/MW3/PC/SP/animscripts/init.gsc new file mode 100644 index 0000000..6f50f65 --- /dev/null +++ b/MW3/PC/SP/animscripts/init.gsc @@ -0,0 +1,629 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\init.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 25 + * Decompile Time: 432 ms + * Timestamp: 10/27/2023 2:18:22 AM +*******************************************************************/ + +//Function Number: 1 +func_2098(param_00) +{ + self.weaponinfo[param_00] = spawnstruct(); + self.weaponinfo[param_00].position = "none"; + self.weaponinfo[param_00].var_209A = 1; + if(getweaponclipmodel(param_00) != "") + { + self.weaponinfo[param_00].var_209B = 1; + return; + } + + self.weaponinfo[param_00].var_209B = 0; +} + +//Function Number: 2 +func_209C(param_00) +{ + return isdefined(self.weaponinfo[param_00]); +} + +//Function Number: 3 +func_209D() +{ + anim.var_CAD = 55; + anim.var_209E = 10; + anim.var_209F = 4096; + anim.var_20A0 = 45; + anim.var_20A1 = 20; + anim.var_D62 = 25; + anim.var_D63 = level.var_209F; + anim.var_D64 = level.var_20A0; + anim.var_D65 = 30; + anim.var_CC0 = 65; + anim.var_CC1 = 65; +} + +//Function Number: 4 +func_20A2() +{ + if(animscripts/utility::func_CEA(self.secondaryweapon)) + { + return 1; + } + + if(weaponclass(self.primaryweapon) == "rocketlauncher") + { + return 1; + } + + return 0; +} + +//Function Number: 5 +main() +{ + self.a = spawnstruct(); + self.a.var_CDF = 0; + self.primaryweapon = self.weapon; + func_20C5(); + if(self.primaryweapon == "") + { + self.primaryweapon = "none"; + } + + if(self.secondaryweapon == "") + { + self.secondaryweapon = "none"; + } + + if(self.sidearm == "") + { + self.sidearm = "none"; + } + + func_2098(self.primaryweapon); + func_2098(self.secondaryweapon); + func_2098(self.sidearm); + self setdefaultaimlimits(); + self.a.weaponpos["left"] = "none"; + self.a.weaponpos["right"] = "none"; + self.a.weaponpos["chest"] = "none"; + self.a.weaponpos["back"] = "none"; + self.a.var_20A4["left"] = "none"; + self.a.var_20A4["right"] = "none"; + self.a.var_20A4["chest"] = "none"; + self.a.var_20A4["back"] = "none"; + self.lastweapon = self.weapon; + self.var_C56 = %root; + thread begingrenadetracking(); + var_00 = animscripts/utility::func_BB6(); + self.a.var_20A5 = var_00; + if(var_00) + { + thread animscripts/shared::func_20A6(); + } + + self.a.rockets = 3; + self.a.var_CD2 = 1; + self.a.pose = "stand"; + self.a.var_113C = "stand"; + self.a.movement = "stop"; + self.a.var_A98 = "stop"; + self.a.var_D19 = "none"; + self.a.var_20A7 = "none"; + self.a.var_20A8 = -1; + self.dropweapon = 1; + self.minexposedgrenadedist = 750; + animscripts/shared::func_C9B(self.primaryweapon,"right"); + if(animscripts/utility::func_CEA(self.secondaryweapon)) + { + animscripts/shared::func_C9B(self.secondaryweapon,"back"); + } + + self.a.var_114D = 0; + self.a.var_20A9 = gettime(); + self.a.var_20AA = gettime(); + self.a.var_20AB = 0; + self.a.disablelongdeath = !self isbadguy(); + self.a.var_20AC = 0; + self.a.var_B29 = 0; + self.a.lastshoottime = 0; + self.a.var_113A = 0; + self.a.var_FDD = 0.8; + if(self.team != "allies") + { + self.has_no_ir = 1; + } + + self.a.var_20AD = undefined; + self.a.stance = "stand"; + self.var_FBA = ::animscripts/utility::func_10AF; + self._animactive = 0; + self._lastanimtime = 0; + thread func_20C1(); + self.baseaccuracy = 1; + self.a.misstime = 0; + self.a.var_D55 = 0; + self.a.misstime = 0; + self.a.misstimedebounce = 0; + self.a.disablepain = 0; + self.var_20B1 = 1; + self.chatinitialized = 0; + self.var_20B2 = 0; + self.var_20B3 = 1; + self.var_20B4 = 1; + self.var_110F = 55; + self.a.var_D14 = 0; + if(!isdefined(self.script_forcegrenade)) + { + self.script_forcegrenade = 0; + } + + func_20BD(); + animscripts/weaponlist::func_CD0(); + self.var_A7F = 0; + self.var_A80 = 0; + self.var_A9D = 0; + self.var_A9E = 0; + if(self.team == "allies") + { + self.var_CFB = 0.5; + } + else + { + self.var_CFB = 0; + } + + if(self.team == "allies") + { + self.var_20B6 = 0; + } + else + { + self.var_20B6 = 256; + } + + self.var_20B7 = 8000; + self.var_10BA = 0; + animscripts/animset::func_CA0(); + self.var_8BE = []; + self.var_8BE["corner"] = 1; + self.var_8BE["cover_crouch"] = 1; + self.var_8BE["stop"] = 1; + self.var_8BE["stop_immediate"] = 1; + self.var_8BE["move"] = 1; + self.var_8BE["exposed"] = 1; + self.var_8BE["corner_normal"] = 1; + var_01 = getarraykeys(self.var_8BE); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + common_scripts\utility::clear_exception(var_01[var_02]); + } + + self.var_1160 = 0; + thread func_20BB(); + self.var_20B8 = 0; + thread animscripts/combat_utility::monitorflash(); + thread ondeath(); +} + +//Function Number: 6 +func_20BA(param_00) +{ + var_01[0] = "m4_grenadier"; + if(!isdefined(var_01)) + { + return 0; + } + + for(var_02 = 0;var_02 < var_7B.size;var_02++ = var_7B[3]) + { + if(issubstr(var_01,var_7B[var_02])) + { + return 1; + } + } + + return 0; +} + +//Function Number: 7 +func_20BB() +{ + self endon("death"); + if(!isdefined(level.loadoutcomplete)) + { + level waittill("loadout complete"); + } + + maps\_names::get_name(); + thread animscripts/squadmanager::func_A7E(); +} + +//Function Number: 8 +func_20BC() +{ + for(;;) + { + if(self isstanceallowed("stand")) + { + var_00[0] = "stand allowed"; + var_01[0] = (0,1,0); + } + else + { + var_00[0] = "stand not allowed"; + var_01[0] = (1,0,0); + } + + if(self isstanceallowed("crouch")) + { + var_00[1] = "crouch allowed"; + var_01[1] = (0,1,0); + } + else + { + var_00[1] = "crouch not allowed"; + var_01[1] = (1,0,0); + } + + if(self isstanceallowed("prone")) + { + var_00[2] = "prone allowed"; + var_01[2] = (0,1,0); + } + else + { + var_00[2] = "prone not allowed"; + var_01[2] = (1,0,0); + } + + var_02 = self getshootatpos() + (0,0,30); + var_03 = (0,0,-10); + for(var_04 = 0;var_04 < var_00.size;var_04++) + { + var_05 = (var_02[0] + var_03[0] * var_04,var_02[1] + var_03[1] * var_04,var_02[2] + var_03[2] * var_04); + } + + wait 0.05; + } +} + +//Function Number: 9 +func_20BD() +{ + if(!isdefined(self.var_10F7) || !isdefined(self.moveplaybackrate)) + { + func_20BE(); + } +} + +//Function Number: 10 +func_20BE() +{ + self.var_10F7 = 0.9 + randomfloat(0.2); + self.var_1165 = 0.9 + randomfloat(0.2); + self.moveplaybackrate = 1; + self.var_FE0 = 1.35; +} + +//Function Number: 11 +func_20BF(param_00,param_01,param_02,param_03) +{ + anim waittill("new exceptions"); +} + +//Function Number: 12 +empty(param_00,param_01,param_02,param_03) +{ +} + +//Function Number: 13 +func_20C1() +{ + self endon("death"); + if(1) + { + return; + } + + for(;;) + { + self waittill("enemy"); + if(!isalive(self.enemy)) + { + continue; + } + + while(isplayer(self.enemy)) + { + if(animscripts/utility::func_F8C()) + { + level.lastplayersighted = gettime(); + } + + wait 2; + } + } +} + +//Function Number: 14 +func_20C3() +{ + level.var_20C4[0] = -36.8552; + level.var_20C4[1] = -27.0095; + level.var_20C4[2] = -15.5981; + level.var_20C4[3] = -4.37769; + level.var_20C4[4] = 17.7776; + level.var_20C4[5] = 59.8499; + level.var_20C4[6] = 104.808; + level.var_20C4[7] = 152.325; + level.var_20C4[8] = 201.052; + level.var_20C4[9] = 250.244; + level.var_20C4[10] = 298.971; + level.var_20C4[11] = 330.681; +} + +//Function Number: 15 +func_20C5() +{ + if(isdefined(level.var_20C6)) + { + return; + } + + anim.var_20C6 = 1; + animscripts/animset::func_C64(); + anim.usefacialanims = 0; + maps\_load::init_level_players(); + level.player.var_20C7 = 0; + level.nextgrenadedrop = randomint(3); + level.lastplayersighted = 100; + anim.var_8BD = ::empty; + func_20DF(); + setdvar("scr_expDeathMayMoveCheck","on"); + maps\_names::setup_names(); + anim.var_20C9 = 0; + animscripts/init_move_transitions::func_2087(); + animscripts/reactions::func_F1C(); + anim.var_20CA = 10000; + anim.var_20CB = 6000; + func_20E2(); + func_20E8(); + animscripts/utility::func_20CC("none"); + if(!isdefined(level.var_20CD)) + { + anim.var_20CF = ::animscripts/notetracks::func_20CE; + anim.var_20CD = ::animscripts/notetracks::func_20D0; + } + + if(!isdefined(level.var_20D1)) + { + anim.var_20D1 = []; + } + + if(!isdefined(level.var_20D2)) + { + anim.var_20D2 = []; + } + + anim.var_20D4 = ::animscripts/utility::func_20D3; + level.fire_notetrack_functions["scripted"] = ::animscripts/notetracks::func_20D5; + level.fire_notetrack_functions["cover_right"] = ::animscripts/notetracks::func_20D7; + level.fire_notetrack_functions["cover_left"] = ::animscripts/notetracks::func_20D7; + level.fire_notetrack_functions["cover_crouch"] = ::animscripts/notetracks::func_20D7; + level.fire_notetrack_functions["cover_stand"] = ::animscripts/notetracks::func_20D7; + level.fire_notetrack_functions["move"] = ::animscripts/notetracks::func_20D7; + animscripts/notetracks::func_1E73(); + if(!isdefined(level.flag)) + { + common_scripts\utility::init_flags(); + } + + maps\_gameskill::setskill(); + level.painai = undefined; + animscripts/setposemovement::func_20D9(); + animscripts/face::func_C55(); + anim.var_20DA = animscripts/utility::array(1,2,2,2,3,3,3,3,4,4,5); + anim.var_20DB = animscripts/utility::array(2,3,3,3,4,4,4,5,5); + anim.var_20DC = animscripts/utility::array(1,2,2,3,3,4,4,4,4,5,5,5); + anim.badplaces = []; + anim.var_20DD = 0; + anim.player = getentarray("player","classname")[0]; + func_20E0(); + func_20C3(); + animscripts/flashed::func_208E(); + animscripts/cqb::func_107A(); + func_20E1(); + func_209D(); + anim.var_D20 = -100000; + func_20F5(); + level.player thread animscripts/combat_utility::func_20DE(); + thread func_20F0(); +} + +//Function Number: 16 +func_20DF() +{ +} + +//Function Number: 17 +func_20E0() +{ + animscripts/squadmanager::func_A5E(); + level.player thread animscripts/squadmanager::func_A78(); + animscripts/battlechatter::func_B6B(); + level.player thread animscripts/battlechatter_ai::func_AA9(); + anim thread animscripts/battlechatter::func_B9C(); +} + +//Function Number: 18 +func_20E1() +{ + anim.var_D43 = randomintrange(0,15); + anim.var_D6B = randomintrange(0,10); + anim.var_D44 = gettime() + randomintrange(0,20000); + anim.var_D42 = gettime() + randomintrange(0,10000); + anim.var_D6C = gettime() + randomintrange(0,15000); +} + +//Function Number: 19 +func_20E2() +{ + for(var_00 = 0;var_00 < level.players.size;var_00++) + { + var_01 = level.players[var_00]; + var_01.var_20E3["fraggrenade"] = randomintrange(1000,20000); + var_01.var_20E3["flash_grenade"] = randomintrange(1000,20000); + var_01.var_20E3["double_grenade"] = randomintrange(1000,-5536); + var_01.var_20E4 = 0; + var_01.var_20E5 = -1000000; + var_01.var_20E6 = -1000000; + var_01 thread func_20F1(); + } + + level.var_20E3["AI_fraggrenade"] = randomintrange(0,20000); + level.var_20E3["AI_flash_grenade"] = randomintrange(0,20000); + level.var_20E3["AI_smoke_grenade_american"] = randomintrange(0,20000); + animscripts/combat_utility::func_20E7(); +} + +//Function Number: 20 +func_20E8() +{ + level.lastadvancetoenemytime = []; + level.lastadvancetoenemytime["axis"] = 0; + level.lastadvancetoenemytime["allies"] = 0; + level.lastadvancetoenemytime["team3"] = 0; + level.lastadvancetoenemytime["neutral"] = 0; + level.var_20EA = []; + level.var_20EA["axis"] = (0,0,0); + level.var_20EA["allies"] = (0,0,0); + level.var_20EA["team3"] = (0,0,0); + level.var_20EA["neutral"] = (0,0,0); + level.var_20EB = []; + level.var_20EB["axis"] = (0,0,0); + level.var_20EB["allies"] = (0,0,0); + level.var_20EB["team3"] = (0,0,0); + level.var_20EB["neutral"] = (0,0,0); + level.var_20EC = []; + level.var_20ED = []; + level.var_20ED["axis"] = 0; + level.var_20ED["allies"] = 0; + level.var_20ED["team3"] = 0; + level.var_20ED["neutral"] = 0; + level.advancetoenemyinterval = 30000; + level.advancetoenemygroupmax = 3; +} + +//Function Number: 21 +func_20F0() +{ + var_00 = 0; + var_01 = 3; + for(;;) + { + var_02 = getaiarray(); + if(var_02.size == 0) + { + wait 0.05; + var_00 = 0; + continue; + } + + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + if(!isdefined(var_02[var_03])) + { + continue; + } + + var_02[var_03] notify("do_slow_things"); + var_00++; + if(var_00 == var_01) + { + wait 0.05; + var_00 = 0; + } + } + } +} + +//Function Number: 22 +func_20F1() +{ + waittillframeend; + if(isdefined(self.gs.playergrenaderangetime)) + { + var_00 = int(self.gs.playergrenaderangetime * 0.7); + if(var_00 < 1) + { + var_00 = 1; + } + + self.var_20E3["fraggrenade"] = randomintrange(0,var_00); + self.var_20E3["flash_grenade"] = randomintrange(0,var_00); + } + + if(isdefined(self.gs.playerdoublegrenadetime)) + { + var_00 = int(self.gs.playerdoublegrenadetime); + var_01 = int(var_00 / 2); + if(var_00 <= var_01) + { + var_00 = var_01 + 1; + } + + self.var_20E3["double_grenade"] = randomintrange(var_01,var_00); + } +} + +//Function Number: 23 +begingrenadetracking() +{ + self endon("death"); + for(;;) + { + self waittill("grenade_fire",var_00,var_01); + var_00 thread maps\_utility::grenade_earthquake(); + } +} + +//Function Number: 24 +func_20F5() +{ + anim.var_20F6 = 60; + anim.var_20F7 = []; + for(var_00 = 0;var_00 < level.var_20F6;var_00++) + { + level.var_20F7[var_00] = var_00; + } + + for(var_00 = 0;var_00 < level.var_20F6;var_00++) + { + var_01 = randomint(level.var_20F6); + var_02 = level.var_20F7[var_00]; + level.var_20F7[var_00] = level.var_20F7[var_01]; + level.var_20F7[var_01] = var_02; + } +} + +//Function Number: 25 +ondeath() +{ + if(isdefined(level.var_20F9)) + { + return; + } + + self waittill("death"); + if(!isdefined(self)) + { + if(isdefined(self.a.var_20FA)) + { + self.a.var_20FA delete(); + } + } +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/init_move_transitions.gsc b/MW3/PC/SP/animscripts/init_move_transitions.gsc new file mode 100644 index 0000000..6104e26 --- /dev/null +++ b/MW3/PC/SP/animscripts/init_move_transitions.gsc @@ -0,0 +1,613 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\init_move_transitions.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 5 + * Decompile Time: 108 ms + * Timestamp: 10/27/2023 2:18:23 AM +*******************************************************************/ + +//Function Number: 1 +func_2082() +{ + if(isdefined(level.var_2083)) + { + return; + } + + anim.var_2083 = 1; + if(!isdefined(level.var_1164)) + { + anim.var_1164 = []; + } + + if(!isdefined(level.var_1173)) + { + anim.var_1173 = []; + } + + anim.var_1176 = []; + anim.var_1177 = []; + anim.var_2084 = []; + if(!isdefined(level.var_1185)) + { + anim.var_1185 = []; + } + + if(!isdefined(level.var_1186)) + { + anim.var_1186 = []; + } + + if(!isdefined(level.var_11AC)) + { + anim.var_11AC = []; + } + + anim.var_11AD = []; + anim.var_11B0 = []; + if(!isdefined(level.var_1187)) + { + anim.var_1187 = []; + } + + if(!isdefined(level.var_11A9)) + { + anim.var_11A9 = []; + } + + anim.var_2085 = []; + anim.var_2086 = []; + anim.var_1166 = []; +} + +//Function Number: 2 +func_2087() +{ + func_2082(); + level.var_1184 = 1; + var_00 = []; + var_01 = 6; + anim.var_116F = []; + level.var_116F["Cover Left"] = []; + level.var_116F["Cover Left"]["stand"] = "left"; + level.var_116F["Cover Left"]["crouch"] = "left_crouch"; + level.var_1176["Cover Left"] = 9; + level.var_1177["Cover Left"] = 9; + level.var_116F["Cover Right"] = []; + level.var_116F["Cover Right"]["stand"] = "right"; + level.var_116F["Cover Right"]["crouch"] = "right_crouch"; + level.var_1176["Cover Right"] = 9; + level.var_1177["Cover Right"] = 7; + level.var_116F["Cover Crouch"] = []; + level.var_116F["Cover Crouch"]["stand"] = "crouch"; + level.var_116F["Cover Crouch"]["crouch"] = "crouch"; + level.var_116F["Conceal Crouch"] = level.var_116F["Cover Crouch"]; + level.var_116F["Cover Crouch Window"] = level.var_116F["Cover Crouch"]; + level.var_1176["Cover Crouch"] = 6; + level.var_1177["Cover Crouch"] = -1; + level.var_1176["Conceal Crouch"] = 6; + level.var_1177["Conceal Crouch"] = -1; + level.var_116F["Cover Stand"] = []; + level.var_116F["Cover Stand"]["stand"] = "stand"; + level.var_116F["Cover Stand"]["crouch"] = "stand"; + level.var_116F["Conceal Stand"] = level.var_116F["Cover Stand"]; + level.var_1176["Cover Stand"] = 6; + level.var_1177["Cover Stand"] = -1; + level.var_1176["Conceal Stand"] = 6; + level.var_1177["Conceal Stand"] = -1; + level.var_116F["Cover Prone"] = []; + level.var_116F["Cover Prone"]["stand"] = "exposed"; + level.var_116F["Cover Prone"]["crouch"] = "exposed"; + level.var_116F["Conceal Prone"] = level.var_116F["Cover Prone"]; + level.var_1177["Conceal Prone"] = -1; + level.var_116F["Path"] = []; + level.var_116F["Path"]["stand"] = "exposed"; + level.var_116F["Path"]["crouch"] = "exposed_crouch"; + level.var_116F["Guard"] = level.var_116F["Path"]; + level.var_116F["Ambush"] = level.var_116F["Path"]; + level.var_116F["Scripted"] = level.var_116F["Path"]; + level.var_116F["Exposed"] = level.var_116F["Path"]; + level.var_112F["Guard"] = 1; + level.var_112F["Ambush"] = 1; + level.var_112F["Exposed"] = 1; + level.var_CBD["Guard"] = 1; + level.var_CBD["Exposed"] = 1; + level.var_1164["right"][1] = %corner_standr_trans_in_1; + level.var_1164["right"][2] = %corner_standr_trans_in_2; + level.var_1164["right"][3] = %corner_standr_trans_in_3; + level.var_1164["right"][4] = %corner_standr_trans_in_4; + level.var_1164["right"][6] = %corner_standr_trans_in_6; + level.var_1164["right"][8] = %corner_standr_trans_in_8; + level.var_1164["right"][9] = %corner_standr_trans_in_9; + level.var_1164["right_crouch"][1] = %cornercrr_trans_in_ml; + level.var_1164["right_crouch"][2] = %cornercrr_trans_in_m; + level.var_1164["right_crouch"][3] = %cornercrr_trans_in_mr; + level.var_1164["right_crouch"][4] = %cornercrr_trans_in_l; + level.var_1164["right_crouch"][6] = %cornercrr_trans_in_r; + level.var_1164["right_crouch"][8] = %cornercrr_trans_in_f; + level.var_1164["right_crouch"][9] = %cornercrr_trans_in_mf; + level.var_1164["right_cqb"][1] = %corner_standr_trans_cqb_in_1; + level.var_1164["right_cqb"][2] = %corner_standr_trans_cqb_in_2; + level.var_1164["right_cqb"][3] = %corner_standr_trans_cqb_in_3; + level.var_1164["right_cqb"][4] = %corner_standr_trans_cqb_in_4; + level.var_1164["right_cqb"][6] = %corner_standr_trans_cqb_in_6; + level.var_1164["right_cqb"][8] = %corner_standr_trans_cqb_in_8; + level.var_1164["right_cqb"][9] = %corner_standr_trans_cqb_in_9; + level.var_1164["right_crouch_cqb"][1] = %cornercrr_cqb_trans_in_1; + level.var_1164["right_crouch_cqb"][2] = %cornercrr_cqb_trans_in_2; + level.var_1164["right_crouch_cqb"][3] = %cornercrr_cqb_trans_in_3; + level.var_1164["right_crouch_cqb"][4] = %cornercrr_cqb_trans_in_4; + level.var_1164["right_crouch_cqb"][6] = %cornercrr_cqb_trans_in_6; + level.var_1164["right_crouch_cqb"][8] = %cornercrr_cqb_trans_in_8; + level.var_1164["right_crouch_cqb"][9] = %cornercrr_cqb_trans_in_9; + level.var_1164["left"][1] = %corner_standl_trans_in_1; + level.var_1164["left"][2] = %corner_standl_trans_in_2; + level.var_1164["left"][3] = %corner_standl_trans_in_3; + level.var_1164["left"][4] = %corner_standl_trans_in_4; + level.var_1164["left"][6] = %corner_standl_trans_in_6; + level.var_1164["left"][7] = %corner_standl_trans_in_7; + level.var_1164["left"][8] = %corner_standl_trans_in_8; + level.var_1164["left_crouch"][1] = %cornercrl_trans_in_ml; + level.var_1164["left_crouch"][2] = %cornercrl_trans_in_m; + level.var_1164["left_crouch"][3] = %cornercrl_trans_in_mr; + level.var_1164["left_crouch"][4] = %cornercrl_trans_in_l; + level.var_1164["left_crouch"][6] = %cornercrl_trans_in_r; + level.var_1164["left_crouch"][7] = %cornercrl_trans_in_mf; + level.var_1164["left_crouch"][8] = %cornercrl_trans_in_f; + level.var_1164["left_cqb"][1] = %corner_standl_trans_cqb_in_1; + level.var_1164["left_cqb"][2] = %corner_standl_trans_cqb_in_2; + level.var_1164["left_cqb"][3] = %corner_standl_trans_cqb_in_3; + level.var_1164["left_cqb"][4] = %corner_standl_trans_cqb_in_4; + level.var_1164["left_cqb"][6] = %corner_standl_trans_cqb_in_6; + level.var_1164["left_cqb"][7] = %corner_standl_trans_cqb_in_7; + level.var_1164["left_cqb"][8] = %corner_standl_trans_cqb_in_8; + level.var_1164["left_crouch_cqb"][1] = %cornercrl_cqb_trans_in_1; + level.var_1164["left_crouch_cqb"][2] = %cornercrl_cqb_trans_in_2; + level.var_1164["left_crouch_cqb"][3] = %cornercrl_cqb_trans_in_3; + level.var_1164["left_crouch_cqb"][4] = %cornercrl_cqb_trans_in_4; + level.var_1164["left_crouch_cqb"][6] = %cornercrl_cqb_trans_in_6; + level.var_1164["left_crouch_cqb"][7] = %cornercrl_cqb_trans_in_7; + level.var_1164["left_crouch_cqb"][8] = %cornercrl_cqb_trans_in_8; + level.var_1164["crouch"][1] = %covercrouch_run_in_ml; + level.var_1164["crouch"][2] = %covercrouch_run_in_m; + level.var_1164["crouch"][3] = %covercrouch_run_in_mr; + level.var_1164["crouch"][4] = %covercrouch_run_in_l; + level.var_1164["crouch"][6] = %covercrouch_run_in_r; + level.var_1164["stand"][1] = %coverstand_trans_in_ml; + level.var_1164["stand"][2] = %coverstand_trans_in_m; + level.var_1164["stand"][3] = %coverstand_trans_in_mr; + level.var_1164["stand"][4] = %coverstand_trans_in_l; + level.var_1164["stand"][6] = %coverstand_trans_in_r; + level.var_1164["stand_saw"][1] = %saw_gunner_runin_ml; + level.var_1164["stand_saw"][2] = %saw_gunner_runin_m; + level.var_1164["stand_saw"][3] = %saw_gunner_runin_mr; + level.var_1164["stand_saw"][4] = %saw_gunner_runin_l; + level.var_1164["stand_saw"][6] = %saw_gunner_runin_r; + level.var_1164["crouch_saw"][1] = %saw_gunner_lowwall_runin_ml; + level.var_1164["crouch_saw"][2] = %saw_gunner_lowwall_runin_m; + level.var_1164["crouch_saw"][3] = %saw_gunner_lowwall_runin_mr; + level.var_1164["crouch_saw"][4] = %saw_gunner_lowwall_runin_l; + level.var_1164["crouch_saw"][6] = %saw_gunner_lowwall_runin_r; + level.var_1164["prone_saw"][1] = %saw_gunner_prone_runin_ml; + level.var_1164["prone_saw"][2] = %saw_gunner_prone_runin_m; + level.var_1164["prone_saw"][3] = %saw_gunner_prone_runin_mr; + level.var_1164["exposed"] = []; + level.var_1164["exposed"][1] = %cqb_stop_1; + level.var_1164["exposed"][2] = %run_2_stand_f_6; + level.var_1164["exposed"][3] = %cqb_stop_3; + level.var_1164["exposed"][4] = %run_2_stand_90l; + level.var_1164["exposed"][6] = %run_2_stand_90r; + level.var_1164["exposed"][7] = %cqb_stop_7; + level.var_1164["exposed"][8] = %run_2_stand_180l; + level.var_1164["exposed"][9] = %cqb_stop_9; + level.var_1164["exposed_crouch"] = []; + level.var_1164["exposed_crouch"][1] = %cqb_crouch_stop_1; + level.var_1164["exposed_crouch"][2] = %run_2_crouch_f; + level.var_1164["exposed_crouch"][3] = %cqb_crouch_stop_3; + level.var_1164["exposed_crouch"][4] = %run_2_crouch_90l; + level.var_1164["exposed_crouch"][6] = %run_2_crouch_90r; + level.var_1164["exposed_crouch"][7] = %cqb_crouch_stop_7; + level.var_1164["exposed_crouch"][8] = %run_2_crouch_180l; + level.var_1164["exposed_crouch"][9] = %cqb_crouch_stop_9; + level.var_1164["exposed_cqb"] = []; + level.var_1164["exposed_cqb"][1] = %cqb_stop_1; + level.var_1164["exposed_cqb"][2] = %cqb_stop_2; + level.var_1164["exposed_cqb"][3] = %cqb_stop_3; + level.var_1164["exposed_cqb"][4] = %cqb_stop_4; + level.var_1164["exposed_cqb"][6] = %cqb_stop_6; + level.var_1164["exposed_cqb"][7] = %cqb_stop_7; + level.var_1164["exposed_cqb"][8] = %cqb_stop_8; + level.var_1164["exposed_cqb"][9] = %cqb_stop_9; + level.var_1164["exposed_crouch_cqb"] = []; + level.var_1164["exposed_crouch_cqb"][1] = %cqb_crouch_stop_1; + level.var_1164["exposed_crouch_cqb"][2] = %cqb_crouch_stop_2; + level.var_1164["exposed_crouch_cqb"][3] = %cqb_crouch_stop_3; + level.var_1164["exposed_crouch_cqb"][4] = %cqb_crouch_stop_4; + level.var_1164["exposed_crouch_cqb"][6] = %cqb_crouch_stop_6; + level.var_1164["exposed_crouch_cqb"][7] = %cqb_crouch_stop_7; + level.var_1164["exposed_crouch_cqb"][8] = %cqb_crouch_stop_8; + level.var_1164["exposed_crouch_cqb"][9] = %cqb_crouch_stop_9; + level.var_1164["heat"] = []; + level.var_1164["heat"][1] = %heat_approach_1; + level.var_1164["heat"][2] = %heat_approach_2; + level.var_1164["heat"][3] = %heat_approach_3; + level.var_1164["heat"][4] = %heat_approach_4; + level.var_1164["heat"][6] = %heat_approach_6; + level.var_1164["heat"][8] = %heat_approach_8; + level.var_1164["heat_left"] = []; + level.var_1164["heat_right"] = []; + anim.var_2088 = []; + level.var_2088["right"] = %corner_standr_trans_b_2_alert; + level.var_2088["right_crouch"] = %cornercrr_trans_b_2_alert; + level.var_2088["left"] = %corner_standl_trans_b_2_alert_v2; + level.var_2088["left_crouch"] = %cornercrl_trans_b_2_alert; + level.var_2088["crouch"] = %covercrouch_aim_2_hide; + level.var_2088["stand"] = %coverstand_aim_2_hide; + anim.var_2089 = []; + anim.var_208A = []; + for(var_02 = 0;var_02 < var_01;var_02++ = var_7B[22]) + { + var_03 = var_7B[var_02]; + level.var_2089[var_03] = getmovedelta(level.var_2088[var_03],0,1); + level.var_208A[var_03] = getangledelta(level.var_2088[var_03],0,1); + } + + level.var_208A["right"] = level.var_208A["right"] + 90; + level.var_208A["right_crouch"] = level.var_208A["right_crouch"] + 90; + level.var_208A["left"] = level.var_208A["left"] - 90; + level.var_208A["left_crouch"] = level.var_208A["left_crouch"] - 90; + level.var_1164["wall_over_96"][1] = %traverse90_in_ml; + level.var_1164["wall_over_96"][2] = %traverse90_in_m; + level.var_1164["wall_over_96"][3] = %traverse90_in_mr; + level.var_2084["wall_over_96"]["height"] = 96; + level.var_1164["wall_over_40"][1] = %traverse_window_m_2_run; + level.var_1164["wall_over_40"][2] = %traverse_window_m_2_run; + level.var_1164["wall_over_40"][3] = %traverse_window_m_2_run; + level.var_1173["right"][1] = %corner_standr_trans_out_1; + level.var_1173["right"][2] = %corner_standr_trans_out_2; + level.var_1173["right"][3] = %corner_standr_trans_out_3; + level.var_1173["right"][4] = %corner_standr_trans_out_4; + level.var_1173["right"][6] = %corner_standr_trans_out_6; + level.var_1173["right"][8] = %corner_standr_trans_out_8; + level.var_1173["right"][9] = %corner_standr_trans_out_9; + level.var_1173["right_crouch"][1] = %cornercrr_trans_out_ml; + level.var_1173["right_crouch"][2] = %cornercrr_trans_out_m; + level.var_1173["right_crouch"][3] = %cornercrr_trans_out_mr; + level.var_1173["right_crouch"][4] = %cornercrr_trans_out_l; + level.var_1173["right_crouch"][6] = %cornercrr_trans_out_r; + level.var_1173["right_crouch"][8] = %cornercrr_trans_out_f; + level.var_1173["right_crouch"][9] = %cornercrr_trans_out_mf; + level.var_1173["right_cqb"][1] = %corner_standr_trans_cqb_out_1; + level.var_1173["right_cqb"][2] = %corner_standr_trans_cqb_out_2; + level.var_1173["right_cqb"][3] = %corner_standr_trans_cqb_out_3; + level.var_1173["right_cqb"][4] = %corner_standr_trans_cqb_out_4; + level.var_1173["right_cqb"][6] = %corner_standr_trans_cqb_out_6; + level.var_1173["right_cqb"][8] = %corner_standr_trans_cqb_out_8; + level.var_1173["right_cqb"][9] = %corner_standr_trans_cqb_out_9; + level.var_1173["right_crouch_cqb"][1] = %cornercrr_cqb_trans_out_1; + level.var_1173["right_crouch_cqb"][2] = %cornercrr_cqb_trans_out_2; + level.var_1173["right_crouch_cqb"][3] = %cornercrr_cqb_trans_out_3; + level.var_1173["right_crouch_cqb"][4] = %cornercrr_cqb_trans_out_4; + level.var_1173["right_crouch_cqb"][6] = %cornercrr_cqb_trans_out_6; + level.var_1173["right_crouch_cqb"][8] = %cornercrr_cqb_trans_out_8; + level.var_1173["right_crouch_cqb"][9] = %cornercrr_cqb_trans_out_9; + level.var_1173["left"][1] = %corner_standl_trans_out_1; + level.var_1173["left"][2] = %corner_standl_trans_out_2; + level.var_1173["left"][3] = %corner_standl_trans_out_3; + level.var_1173["left"][4] = %corner_standl_trans_out_4; + level.var_1173["left"][6] = %corner_standl_trans_out_6; + level.var_1173["left"][7] = %corner_standl_trans_out_7; + level.var_1173["left"][8] = %corner_standl_trans_out_8; + level.var_1173["left_crouch"][1] = %cornercrl_trans_out_ml; + level.var_1173["left_crouch"][2] = %cornercrl_trans_out_m; + level.var_1173["left_crouch"][3] = %cornercrl_trans_out_mr; + level.var_1173["left_crouch"][4] = %cornercrl_trans_out_l; + level.var_1173["left_crouch"][6] = %cornercrl_trans_out_r; + level.var_1173["left_crouch"][7] = %cornercrl_trans_out_mf; + level.var_1173["left_crouch"][8] = %cornercrl_trans_out_f; + level.var_1173["left_cqb"][1] = %corner_standl_trans_cqb_out_1; + level.var_1173["left_cqb"][2] = %corner_standl_trans_cqb_out_2; + level.var_1173["left_cqb"][3] = %corner_standl_trans_cqb_out_3; + level.var_1173["left_cqb"][4] = %corner_standl_trans_cqb_out_4; + level.var_1173["left_cqb"][6] = %corner_standl_trans_cqb_out_6; + level.var_1173["left_cqb"][7] = %corner_standl_trans_cqb_out_7; + level.var_1173["left_cqb"][8] = %corner_standl_trans_cqb_out_8; + level.var_1173["left_crouch_cqb"][1] = %cornercrl_cqb_trans_out_1; + level.var_1173["left_crouch_cqb"][2] = %cornercrl_cqb_trans_out_2; + level.var_1173["left_crouch_cqb"][3] = %cornercrl_cqb_trans_out_3; + level.var_1173["left_crouch_cqb"][4] = %cornercrl_cqb_trans_out_4; + level.var_1173["left_crouch_cqb"][6] = %cornercrl_cqb_trans_out_6; + level.var_1173["left_crouch_cqb"][7] = %cornercrl_cqb_trans_out_7; + level.var_1173["left_crouch_cqb"][8] = %cornercrl_cqb_trans_out_8; + level.var_1173["crouch"][1] = %covercrouch_run_out_ml; + level.var_1173["crouch"][2] = %covercrouch_run_out_m; + level.var_1173["crouch"][3] = %covercrouch_run_out_mr; + level.var_1173["crouch"][4] = %covercrouch_run_out_l; + level.var_1173["crouch"][6] = %covercrouch_run_out_r; + level.var_1173["stand"][1] = %coverstand_trans_out_ml; + level.var_1173["stand"][2] = %coverstand_trans_out_m; + level.var_1173["stand"][3] = %coverstand_trans_out_mr; + level.var_1173["stand"][4] = %coverstand_trans_out_l; + level.var_1173["stand"][6] = %coverstand_trans_out_r; + level.var_1173["stand_saw"][1] = %saw_gunner_runout_ml; + level.var_1173["stand_saw"][2] = %saw_gunner_runout_m; + level.var_1173["stand_saw"][3] = %saw_gunner_runout_mr; + level.var_1173["stand_saw"][4] = %saw_gunner_runout_l; + level.var_1173["stand_saw"][6] = %saw_gunner_runout_r; + level.var_1173["prone_saw"][2] = %saw_gunner_prone_runout_m; + level.var_1173["prone_saw"][4] = %saw_gunner_prone_runout_l; + level.var_1173["prone_saw"][6] = %saw_gunner_prone_runout_r; + level.var_1173["prone_saw"][8] = %saw_gunner_prone_runout_f; + level.var_1173["crouch_saw"][1] = %saw_gunner_lowwall_runout_ml; + level.var_1173["crouch_saw"][2] = %saw_gunner_lowwall_runout_m; + level.var_1173["crouch_saw"][3] = %saw_gunner_lowwall_runout_mr; + level.var_1173["crouch_saw"][4] = %saw_gunner_lowwall_runout_l; + level.var_1173["crouch_saw"][6] = %saw_gunner_lowwall_runout_r; + level.var_1173["exposed"] = []; + level.var_1173["exposed"][1] = %cqb_start_1; + level.var_1173["exposed"][2] = %stand_2_run_180l; + level.var_1173["exposed"][3] = %cqb_start_3; + level.var_1173["exposed"][4] = %stand_2_run_l; + level.var_1173["exposed"][6] = %stand_2_run_r; + level.var_1173["exposed"][7] = %cqb_start_7; + level.var_1173["exposed"][8] = %surprise_start_v1; + level.var_1173["exposed"][9] = %cqb_start_9; + level.var_1173["exposed_crouch"] = []; + level.var_1173["exposed_crouch"][1] = %cqb_crouch_start_1; + level.var_1173["exposed_crouch"][2] = %crouch_2run_180; + level.var_1173["exposed_crouch"][3] = %cqb_crouch_start_3; + level.var_1173["exposed_crouch"][4] = %crouch_2run_l; + level.var_1173["exposed_crouch"][6] = %crouch_2run_r; + level.var_1173["exposed_crouch"][7] = %cqb_crouch_start_7; + level.var_1173["exposed_crouch"][8] = %crouch_2run_f; + level.var_1173["exposed_crouch"][9] = %cqb_crouch_start_9; + level.var_1173["exposed_cqb"] = []; + level.var_1173["exposed_cqb"][1] = %cqb_start_1; + level.var_1173["exposed_cqb"][2] = %cqb_start_2; + level.var_1173["exposed_cqb"][3] = %cqb_start_3; + level.var_1173["exposed_cqb"][4] = %cqb_start_4; + level.var_1173["exposed_cqb"][6] = %cqb_start_6; + level.var_1173["exposed_cqb"][7] = %cqb_start_7; + level.var_1173["exposed_cqb"][8] = %cqb_start_8; + level.var_1173["exposed_cqb"][9] = %cqb_start_9; + level.var_1173["exposed_crouch_cqb"] = []; + level.var_1173["exposed_crouch_cqb"][1] = %cqb_crouch_start_1; + level.var_1173["exposed_crouch_cqb"][2] = %cqb_crouch_start_2; + level.var_1173["exposed_crouch_cqb"][3] = %cqb_crouch_start_3; + level.var_1173["exposed_crouch_cqb"][4] = %cqb_crouch_start_4; + level.var_1173["exposed_crouch_cqb"][6] = %cqb_crouch_start_6; + level.var_1173["exposed_crouch_cqb"][7] = %cqb_crouch_start_7; + level.var_1173["exposed_crouch_cqb"][8] = %cqb_crouch_start_8; + level.var_1173["exposed_crouch_cqb"][9] = %cqb_crouch_start_9; + level.var_1173["heat"] = []; + level.var_1173["heat"][1] = %heat_exit_1; + level.var_1173["heat"][2] = %heat_exit_2; + level.var_1173["heat"][3] = %heat_exit_3; + level.var_1173["heat"][4] = %heat_exit_4; + level.var_1173["heat"][6] = %heat_exit_6; + level.var_1173["heat"][7] = %heat_exit_7; + level.var_1173["heat"][8] = %heat_exit_8; + level.var_1173["heat"][9] = %heat_exit_9; + level.var_1173["heat_left"] = []; + level.var_1173["heat_left"][1] = %heat_exit_1; + level.var_1173["heat_left"][2] = %heat_exit_2; + level.var_1173["heat_left"][3] = %heat_exit_3; + level.var_1173["heat_left"][4] = %heat_exit_4; + level.var_1173["heat_left"][6] = %heat_exit_6; + level.var_1173["heat_left"][7] = %heat_exit_8l; + level.var_1173["heat_left"][8] = %heat_exit_8l; + level.var_1173["heat_left"][9] = %heat_exit_8r; + level.var_1173["heat_right"] = []; + level.var_1173["heat_right"][1] = %heat_exit_1; + level.var_1173["heat_right"][2] = %heat_exit_2; + level.var_1173["heat_right"][3] = %heat_exit_3; + level.var_1173["heat_right"][4] = %heat_exit_4; + level.var_1173["heat_right"][6] = %heat_exit_6; + level.var_1173["heat_right"][7] = %heat_exit_8l; + level.var_1173["heat_right"][8] = %heat_exit_8r; + level.var_1173["heat_right"][9] = %heat_exit_8r; + for(var_02 = 1;var_02 <= 6;var_02++ = var_7B[21]) + { + if(var_02 == 5) + { + continue; + } + + for(var_04 = 0;var_04 < var_7B.size;var_04++ = "exposed_ready_cqb") + { + var_03 = var_7B[var_04]; + if(isdefined(level.var_1164[var_03]) && isdefined(level.var_1164[var_03][var_02])) + { + level.var_1186[var_03][var_02] = getmovedelta(level.var_1164[var_03][var_02],0,1); + level.var_1187[var_03][var_02] = getangledelta(level.var_1164[var_03][var_02],0,1); + } + + if(isdefined(level.var_1173[var_03]) && isdefined(level.var_1173[var_03][var_02])) + { + if(animhasnotetrack(level.var_1173[var_03][var_02],"code_move")) + { + var_05 = getnotetracktimes(level.var_1173[var_03][var_02],"code_move")[0]; + } + else + { + var_05 = 1; + } + + level.var_11AC[var_03][var_02] = getmovedelta(level.var_1173[var_03][var_02],0,var_05); + level.var_11A9[var_03][var_02] = getangledelta(level.var_1173[var_03][var_02],0,1); + } + } + } + + for(var_04 = 0;var_04 < var_7B.size;var_04++ = var_7B[20]) + { + var_03 = var_7B[var_04]; + level.var_1185[var_03] = 0; + for(var_02 = 1;var_02 <= 6;var_02++ = "exposed_ready") + { + if(var_02 == 5 || !isdefined(level.var_1164[var_03]) || !isdefined(level.var_1164[var_03][var_02])) + { + continue; + } + + var_06 = lengthsquared(level.var_1186[var_03][var_02]); + if(level.var_1185[var_03] < var_06) + { + level.var_1185[var_03] = var_06; + } + } + + level.var_1185[var_03] = sqrt(level.var_1185[var_03]); + } + + level.var_1179["exposed"] = 1; + level.var_1179["exposed_crouch"] = 1; + level.var_1179["exposed_cqb"] = 1; + level.var_1179["exposed_crouch_cqb"] = 1; + level.var_1179["exposed_ready_cqb"] = 1; + level.var_1179["exposed_ready"] = 1; + level.var_1179["heat"] = 1; + if(!isdefined(level.var_1190)) + { + anim.var_1190 = 0; + } + + foreach(var_03, var_08 in level.var_1179) + { + for(var_02 = 7;var_02 <= 9;var_02++ = "heat_right") + { + if(isdefined(level.var_1164[var_03]) && isdefined(level.var_1164[var_03][var_02])) + { + level.var_1186[var_03][var_02] = getmovedelta(level.var_1164[var_03][var_02],0,1); + level.var_1187[var_03][var_02] = getangledelta(level.var_1164[var_03][var_02],0,1); + } + + if(isdefined(level.var_1173[var_03]) && isdefined(level.var_1173[var_03][var_02])) + { + var_05 = getnotetracktimes(level.var_1173[var_03][var_02],"code_move")[0]; + level.var_11AC[var_03][var_02] = getmovedelta(level.var_1173[var_03][var_02],0,var_05); + level.var_11A9[var_03][var_02] = getangledelta(level.var_1173[var_03][var_02],0,1); + } + } + + for(var_02 = 1;var_02 <= 9;var_02++ = var_7B[19]) + { + if(!isdefined(level.var_1164[var_03]) || !isdefined(level.var_1164[var_03][var_02])) + { + continue; + } + + var_09 = length(level.var_1186[var_03][var_02]); + if(var_09 > level.var_1190) + { + anim.var_1190 = var_09; + } + } + } + + level.var_2086["left"][7] = 0.369369; + level.var_2086["left_crouch"][7] = 0.319319; + level.var_2086["left_cqb"][7] = 0.451451; + level.var_2086["left_crouch_cqb"][7] = 0.246246; + level.var_2085["left"][7] = 0.547548; + level.var_2085["left_crouch"][7] = 0.593594; + level.var_2085["left_cqb"][7] = 0.702703; + level.var_2085["left_crouch_cqb"][7] = 0.718719; + level.var_2085["heat_left"][7] = 0.42; + level.var_2086["left"][8] = 0.525526; + level.var_2086["left_crouch"][8] = 0.428428; + level.var_2086["left_cqb"][8] = 0.431431; + level.var_2086["left_crouch_cqb"][8] = 0.33033; + level.var_2085["left"][8] = 0.614615; + level.var_2085["left_crouch"][8] = 0.451451; + level.var_2085["left_cqb"][8] = 0.451451; + level.var_2085["left_crouch_cqb"][8] = 0.603604; + level.var_2085["heat_left"][8] = 0.42; + level.var_2086["right"][8] = 0.458458; + level.var_2086["right_crouch"][8] = 0.248248; + level.var_2086["right_cqb"][8] = 0.458458; + level.var_2086["right_crouch_cqb"][8] = 0.311311; + level.var_2085["right"][8] = 0.457457; + level.var_2085["right_crouch"][8] = 0.545546; + level.var_2085["right_cqb"][8] = 0.540541; + level.var_2085["right_crouch_cqb"][8] = 0.399399; + level.var_2085["heat_right"][8] = 0.4; + level.var_2086["right"][9] = 0.546547; + level.var_2086["right_crouch"][9] = 0.2002; + level.var_2086["right_cqb"][9] = 0.546547; + level.var_2086["right_crouch_cqb"][9] = 0.232232; + level.var_2085["right"][9] = 0.483483; + level.var_2085["right_crouch"][9] = 0.493493; + level.var_2085["right_cqb"][9] = 0.565566; + level.var_2085["right_crouch_cqb"][9] = 0.518519; + level.var_2085["heat_right"][9] = 0.4; + var_0A = []; + var_0B = []; + func_208B(7,8,0,var_0A,var_0B); + var_0A = []; + var_0A["right"] = 1; + var_0A["right_crouch"] = 1; + var_0A["right_cqb"] = 1; + var_0A["right_crouch_cqb"] = 1; + var_0B = []; + func_208B(8,9,1,var_0A,var_0B); + level.var_1166["left"] = "stand"; + level.var_1166["left_cqb"] = "stand"; + level.var_1166["right"] = "stand"; + level.var_1166["right_cqb"] = "stand"; + level.var_1166["stand"] = "stand"; + level.var_1166["stand_saw"] = "stand"; + level.var_1166["exposed"] = "stand"; + level.var_1166["exposed_cqb"] = "stand"; + level.var_1166["heat"] = "stand"; + level.var_1166["left_crouch"] = "crouch"; + level.var_1166["left_crouch_cqb"] = "crouch"; + level.var_1166["right_crouch"] = "crouch"; + level.var_1166["right_crouch_cqb"] = "crouch"; + level.var_1166["crouch_saw"] = "crouch"; + level.var_1166["crouch"] = "crouch"; + level.var_1166["exposed_crouch"] = "crouch"; + level.var_1166["exposed_crouch_cqb"] = "crouch"; + level.var_1166["prone_saw"] = "prone"; + level.var_1166["exposed_ready"] = "stand"; + level.var_1166["exposed_ready_cqb"] = "stand"; + level.var_1172["Cover Stand"] = "stand"; + level.var_1172["Conceal Stand"] = "stand"; + level.var_1172["Cover Crouch"] = "crouch"; + level.var_1172["Conceal Crouch"] = "crouch"; +} + +//Function Number: 3 +func_208B(param_00,param_01,param_02,param_03,param_04) +{ + for(var_05 = param_00;var_05 <= param_01;var_05++) + { + foreach(var_08, var_07 in param_03) + { + level.var_11B0[var_08][var_05] = getmovedelta(level.var_1164[var_08][var_05],0,func_208D(var_08,var_05)); + level.var_1186[var_08][var_05] = getmovedelta(level.var_1164[var_08][var_05],0,1) - level.var_11B0[var_08][var_05]; + level.var_1187[var_08][var_05] = getangledelta(level.var_1164[var_08][var_05],0,1); + } + + foreach(var_08, var_07 in param_04) + { + level.var_11AC[var_08][var_05] = getmovedelta(level.var_1173[var_08][var_05],0,func_208C(var_08,var_05)); + level.var_11AD[var_08][var_05] = getmovedelta(level.var_1173[var_08][var_05],0,1) - level.var_11AC[var_08][var_05]; + level.var_11A9[var_08][var_05] = getangledelta(level.var_1173[var_08][var_05],0,1); + } + } +} + +//Function Number: 4 +func_208C(param_00,param_01) +{ + return level.var_2085[param_00][param_01]; +} + +//Function Number: 5 +func_208D(param_00,param_01) +{ + return level.var_2086[param_00][param_01]; +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/melee.gsc b/MW3/PC/SP/animscripts/melee.gsc new file mode 100644 index 0000000..4948af7 --- /dev/null +++ b/MW3/PC/SP/animscripts/melee.gsc @@ -0,0 +1,1564 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\melee.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 59 + * Decompile Time: 1065 ms + * Timestamp: 10/27/2023 2:18:26 AM +*******************************************************************/ + +//Function Number: 1 +func_1006() +{ + precachemodel("weapon_parabolic_knife"); + level._effect["melee_knife_ai"] = loadfx("impacts/flesh_hit_knife"); +} + +//Function Number: 2 +func_1007() +{ + if(!isdefined(self._stealth)) + { + return 0; + } + + if(isdefined(self.ent_flag) && isdefined(self.ent_flag["_stealth_enabled"]) && self.ent_flag["_stealth_enabled"]) + { + if(isdefined(self.ent_flag["_stealth_attack"]) && !self.ent_flag["_stealth_attack"]) + { + return 1; + } + } + + return 0; +} + +//Function Number: 3 +func_1009() +{ + if(!isdefined(self.enemy)) + { + return 0; + } + + if(isdefined(self.dontmelee)) + { + return 0; + } + + if(func_1007()) + { + return 0; + } + + if(!func_1073(self.enemy)) + { + return 0; + } + + func_100B(); + if(!func_100F()) + { + func_1074(self.enemy); + return 0; + } + + self animcustom(::func_1020,::func_1072); +} + +//Function Number: 4 +func_100B() +{ + self.melee.target = self.enemy; + self.melee.var_100D = 0; + self.melee.var_100E = 0; +} + +//Function Number: 5 +func_100F() +{ + if(!func_1016()) + { + return 0; + } + + self.melee.var_100D = 1; + if(func_1040()) + { + self.melee.func = ::func_1047; + return 1; + } + + if(func_1025()) + { + if(isdefined(self.var_1010)) + { + self.melee.func = self.var_1010; + } + else + { + self.melee.func = ::func_1029; + } + + return 1; + } + + self.melee.func = undefined; + self.var_1011 = gettime() + 150; + self.var_1012 = self.melee.target; + return 0; +} + +//Function Number: 6 +func_1013() +{ + var_00 = 1; + var_01 = distance2d(self.melee.startpos,self.melee.target.origin); + if(var_01 < 32) + { + var_02 = vectornormalize((self.melee.startpos[0] - self.melee.target.origin[0],self.melee.startpos[1] - self.melee.target.origin[1],0)); + self.melee.startpos = self.melee.startpos + var_02 * 32 - var_01; + var_00 = 0; + } + + var_03 = self getdroptofloorposition(self.melee.startpos); + if(!isdefined(var_03)) + { + return 0; + } + + if(abs(self.melee.startpos[2] - var_03[2]) > 51.2) + { + return 0; + } + + if(abs(self.origin[2] - var_03[2]) > 51.2) + { + return 0; + } + + self.melee.startpos = var_03; + if(!self maymovetopoint(self.melee.startpos,1,var_00)) + { + return 0; + } + + if(isdefined(self.melee.var_1015)) + { + var_04 = self.melee.startpos - self.melee.target.origin; + var_05 = anglestoforward(self.melee.var_1015); + var_06 = vectordot(var_05,var_04); + var_07 = self.melee.startpos - var_05 * var_06; + var_08 = self.melee.target.origin - var_07; + var_09 = distance2d(self.melee.target.origin,var_07); + if(var_09 < 32) + { + var_07 = var_07 - var_08 * 32 - var_09 / 32; + } + } + else + { + var_02 = vectornormalize((self.melee.startpos[0] - self.melee.target.origin[0],self.melee.startpos[1] - self.melee.target.origin[1],0)); + var_07 = self.melee.target.origin + var_02 * 32; + } + + if(!self maymovefrompointtopoint(self.melee.startpos,var_07,1,0)) + { + return 0; + } + + if(!self maymovefrompointtopoint(var_07,self.melee.target.origin,1,1)) + { + return 0; + } + + return 1; +} + +//Function Number: 7 +func_1016() +{ + if(!isdefined(self.melee.target)) + { + return 0; + } + + var_00 = self.melee.target; + if(isdefined(var_00.dontmelee)) + { + return 0; + } + + var_01 = distancesquared(self.origin,var_00.origin); + if(isdefined(self.var_1017)) + { + var_02 = self.var_1017; + } + else if(isplayer(var_01)) + { + var_02 = -25536; + } + else + { + var_02 = 25600; + } + + if(!self.melee.var_100D && var_01 > var_02) + { + return 0; + } + + if(!isalive(self)) + { + return 0; + } + + if(isdefined(self.a.var_1018) && self.a.var_1019 >= gettime() + 50) + { + return 0; + } + + if(isdefined(self.var_1011) && isdefined(self.var_1012) && gettime() < self.var_1011 && self.var_1012 == var_00) + { + return 0; + } + + if(isdefined(self.a.var_D29) || self.a.pose == "prone") + { + return 0; + } + + if(animscripts/utility::func_C95()) + { + return 0; + } + + if(isdefined(self.var_73C) && self.var_772 == 1) + { + return 0; + } + + if(!isalive(var_00)) + { + return 0; + } + + if(isdefined(var_00.var_FA0) || isdefined(var_00.ignoreme) && var_00.ignoreme) + { + return 0; + } + + if(!isai(var_00) && !isplayer(var_00)) + { + return 0; + } + + if(isai(var_00)) + { + if(var_00 isinscriptedstate()) + { + return 0; + } + + if(var_00 maps\_utility::doinglongdeath() || var_00.var_744) + { + return 0; + } + } + + if(isplayer(var_00)) + { + var_03 = var_00 getstance(); + } + else + { + var_03 = var_01.a.pose; + } + + if(var_03 != "stand" && var_03 != "crouch") + { + return 0; + } + + if(isdefined(self.magic_bullet_shield) && isdefined(var_00.magic_bullet_shield)) + { + return 0; + } + + if(isdefined(var_00.var_73C)) + { + return 0; + } + + if(self.melee.var_100E) + { + var_04 = 110; + } + else + { + var_04 = 60; + } + + var_05 = angleclamp180(self.angles[1] - animscripts/utility::func_101A(var_00.origin)); + if(abs(var_05) > var_04) + { + return 0; + } + + if(var_01 <= 4096) + { + return 1; + } + + if(self.melee.var_100E) + { + return 0; + } + + if(isdefined(self.var_101B) && isdefined(self.var_101C) && gettime() < self.var_101B && self.var_101C == var_00) + { + return 0; + } + + return 1; +} + +//Function Number: 8 +func_101D() +{ + self.melee.var_101E = 1; + self.a.movement = "run"; +} + +//Function Number: 9 +func_101F() +{ + self clearanim(%body,0.2); + self.melee.var_101E = undefined; + self.a.movement = "stop"; + self orientmode("face default"); +} + +//Function Number: 10 +func_1020() +{ + self endon("killanimscript"); + self endon("end_melee"); + for(;;) + { + var_00 = self.melee.func; + [[ self.melee.func ]](); + if(!isdefined(self.melee.func) || var_00 == self.melee.func) + { + break; + } + } +} + +//Function Number: 11 +func_1021(param_00) +{ + if(!isdefined(param_00)) + { + return; + } + + self.var_1022 = gettime() + 2500; + self.var_1023 = param_00; +} + +//Function Number: 12 +func_1024() +{ + var_00 = distancesquared(self.melee.target.origin,self.origin); + if(var_00 > 4096 && isdefined(self.var_1022) && isdefined(self.var_1023) && gettime() < self.var_1022 && self.var_1023 == self.melee.target) + { + return 0; + } + + return 1; +} + +//Function Number: 13 +func_1025() +{ + if(isdefined(self.melee.target.magic_bullet_shield)) + { + return 0; + } + + if(!func_1024()) + { + return 0; + } + + if(isdefined(self.melee.target.var_1026)) + { + return 0; + } + + return func_102B(); +} + +//Function Number: 14 +func_1027() +{ + if(isdefined(self.var_1017)) + { + var_00 = self.var_1017; + } + else if(isplayer(self.melee.target)) + { + var_00 = -25536; + } + else + { + var_00 = 25600; + } + + if(distancesquared(self.origin,self.melee.target.origin) > var_00) + { + self.melee.var_1028 = gettime() + 3000; + return; + } + + self.melee.var_1028 = gettime() + 1000; +} + +//Function Number: 15 +func_1029() +{ + self animmode("zonly_physics"); + if(isdefined(self.melee.target)) + { + func_1027(); + } + + while(isdefined(self.melee.target)) + { + if(!func_102D()) + { + self.var_101B = gettime() + 1500; + self.var_101C = self.melee.target; + break; + } + + if(!isdefined(self.melee.target)) + { + break; + } + + animscripts/battlechatter_ai::func_B37(); + self orientmode("face point",self.melee.target.origin); + self setflaggedanimknoballrestart("meleeanim",%melee_1,%body,1,0.2,1); + self.melee.var_100E = 1; + if(!func_102A()) + { + func_1021(self.melee.target); + break; + } + } + + self animmode("none"); +} + +//Function Number: 16 +func_102A() +{ + for(;;) + { + self waittill("meleeanim",var_00); + if(var_00 == "end") + { + return 1; + } + + if(var_00 == "stop") + { + if(!func_100F()) + { + return 0; + } + + if(self.melee.func != ::func_1029) + { + return 1; + } + } + + if(var_00 == "fire") + { + if(isdefined(self.melee.target)) + { + var_01 = self.melee.target.health; + self melee(); + if(isdefined(self.melee.target) && self.melee.target.health < var_01) + { + func_1027(); + } + } + } + } +} + +//Function Number: 17 +func_102B() +{ + if(!isdefined(self.melee.target)) + { + return 0; + } + + if(!func_1016()) + { + return 0; + } + + var_00 = vectornormalize(self.melee.target.origin - self.origin); + self.melee.startpos = self.melee.target.origin - 40 * var_00; + return func_1013(); +} + +//Function Number: 18 +func_102C(param_00,param_01) +{ + var_02 = (param_00[0] - param_01[0],param_00[1] - param_01[1],0); + return lengthsquared(var_02); +} + +//Function Number: 19 +func_102D() +{ + if(!func_102B()) + { + return 0; + } + + var_00 = func_102C(self.origin,self.melee.target.origin); + if(var_00 <= 4096) + { + self setflaggedanimknoball("readyanim",%stand_2_melee_1,%body,1,0.3,1); + animscripts/shared::donotetracks("readyanim"); + return 1; + } + + func_102E(); + var_01 = self.melee.target.origin; + var_02 = 0.1; + var_03 = length(getmovedelta(%run_2_melee_charge,0,1)); + var_04 = 32; + var_05 = 48 + var_04 + var_03; + var_06 = var_05 * var_05; + var_07 = 64 + var_04; + var_08 = var_07 * var_07; + var_09 = getanimlength(%run_2_melee_charge) * 1000; + var_0A = var_09 - 100; + var_0B = var_09 - 200; + var_0C = 0; + var_0D = undefined; + var_0E = %run_lowready_f; + if(isplayer(self.melee.target) && self.melee.target == self.enemy) + { + self orientmode("face enemy"); + } + else + { + self orientmode("face point",self.melee.target.origin); + } + + self setflaggedanimknoball("chargeanim",var_0E,%body,1,0.3,1); + var_0F = 0; + for(;;) + { + var_10 = gettime(); + var_11 = isdefined(var_0D) && var_0D <= var_06; + if(!var_0F) + { + if(var_11) + { + func_101D(); + self setflaggedanimknoballrestart("chargeanim",%run_2_melee_charge,%body,1,0.2,1); + var_0C = var_10; + var_0F = 1; + } + } + else + { + var_12 = var_00 <= var_06; + if(var_10 - var_0C >= var_0A || !var_11 && !var_12) + { + func_101D(); + self setflaggedanimknoball("chargeanim",var_0E,%body,1,0.3,1); + var_0F = 0; + } + } + + animscripts/notetracks::func_D4F(var_02,"chargeanim"); + if(!func_102B()) + { + func_101F(); + return 0; + } + + var_00 = func_102C(self.origin,self.melee.target.origin); + var_13 = self.melee.target.origin - var_01 * 1 / gettime() - var_10; + var_01 = self.melee.target.origin; + var_14 = self.melee.target.origin + var_13 * var_0B; + var_0D = func_102C(self.origin,var_14); + if(var_0F && var_00 <= var_08 && gettime() - var_0C >= var_0A || !isplayer(self.melee.target)) + { + break; + } + + if(!var_0F && gettime() >= self.melee.var_1028) + { + func_101F(); + return 0; + } + } + + func_101F(); + return 1; +} + +//Function Number: 20 +func_102E() +{ + if(!isdefined(self.a.var_102F)) + { + self.a.var_102F = 0; + } + + if((isdefined(self.enemy) && isplayer(self.enemy)) || randomint(3) == 0) + { + if(gettime() > self.a.var_102F) + { + animscripts/face::func_C41("meleecharge"); + self.a.var_102F = gettime() + 8000; + } + } +} + +//Function Number: 21 +func_1030(param_00) +{ + var_01 = 90; + if(self.melee.var_100E) + { + var_01 = var_01 + 50; + } + + if(abs(param_00) < var_01) + { + return 0; + } + + var_02 = self.melee.target; + func_103C(); + if(self.melee.winner) + { + self.melee.animname = %melee_f_awin_attack; + var_02.melee.animname = %melee_f_awin_defend; + var_02.melee.var_1033 = %melee_f_awin_defend_survive; + } + else + { + self.melee.animname = %melee_f_dwin_attack; + var_02.melee.animname = %melee_f_dwin_defend; + } + + return 1; +} + +//Function Number: 22 +func_1034(param_00) +{ + var_01 = 100; + if(self.melee.var_100E) + { + var_01 = var_01 + 50; + } + + if(abs(param_00) < var_01) + { + return 0; + } + + var_02 = self.melee.target; + if(isdefined(var_02.magic_bullet_shield)) + { + return 0; + } + + if(isdefined(var_02.meleealwayswin)) + { + return 0; + } + + self.melee.winner = 1; + self.melee.animname = %bog_melee_r_attack; + var_02.melee.animname = %bog_melee_r_defend; + var_02.melee.var_1033 = %bog_melee_r_backdeath2; + return 1; +} + +//Function Number: 23 +func_1036(param_00) +{ + if(-90 > param_00 || param_00 > 0) + { + return 0; + } + + var_01 = self.melee.target; + if(isdefined(var_01.magic_bullet_shield)) + { + return 0; + } + + if(isdefined(var_01.meleealwayswin)) + { + return 0; + } + + self.melee.winner = 1; + self.melee.animname = %melee_sync_attack; + var_01.melee.animname = %melee_sync_defend; + return 1; +} + +//Function Number: 24 +func_1037() +{ + if(isdefined(self.var_1038)) + { + var_00[0] = ::func_1030; + } + else if(isdefined(self.var_1039)) + { + var_00[0] = ::func_1034; + } + else + { + var_01 = randomint(2); + var_02 = 1 - var_01; + var_03 = 2; + var_00[var_01] = ::func_1030; + var_00[var_02] = ::func_1034; + var_00[var_03] = ::func_1036; + } + + return var_00; +} + +//Function Number: 25 +func_103A() +{ + var_00 = self.melee.target; + var_01 = vectortoangles(var_00.origin - self.origin); + var_02 = angleclamp180(var_00.angles[1] - var_01[1]); + var_03 = func_1037(); + for(var_04 = 0;var_04 < var_03.size;var_04++) + { + if([[ var_03[var_04] ]](var_02)) + { + self.melee.var_103B = (0,var_01[1],0); + self.melee.startpos = getstartorigin(var_00.origin,var_00.angles,self.melee.animname); + if(func_1013()) + { + return 1; + } + } + } + + return 0; +} + +//Function Number: 26 +func_103C() +{ + var_00 = self.melee.target; + if(isdefined(self.meleealwayswin)) + { + self.melee.winner = 1; + return; + } + else if(isdefined(var_00.meleealwayswin)) + { + self.melee.winner = 0; + return; + } + + if(isdefined(self.magic_bullet_shield)) + { + self.melee.winner = 1; + return; + } + + if(isdefined(var_00.magic_bullet_shield)) + { + self.melee.winner = 0; + return; + } + + self.melee.winner = common_scripts\utility::cointoss(); +} + +//Function Number: 27 +func_103D() +{ + var_00 = self.melee.target; + func_103C(); + if(var_00.var_CAF.type == "Cover Left") + { + if(self.melee.winner) + { + self.melee.animname = %cornersdl_melee_wina_attacker; + var_00.melee.animname = %cornersdl_melee_wina_defender; + var_00.melee.var_1033 = %cornersdl_melee_wina_defender_survive; + } + else + { + self.melee.animname = %cornersdl_melee_wind_attacker; + self.melee.var_1033 = %cornersdl_melee_wind_attacker_survive; + var_00.melee.animname = %cornersdl_melee_wind_defender; + } + } + else if(self.melee.winner) + { + self.melee.animname = %cornersdr_melee_wina_attacker; + var_00.melee.animname = %cornersdr_melee_wina_defender; + } + else + { + self.melee.animname = %cornersdr_melee_wind_attacker; + var_00.melee.animname = %cornersdr_melee_wind_defender; + } + + self.melee.startpos = getstartorigin(var_00.var_CAF.origin,var_00.var_CAF.angles,self.melee.animname); + self.melee.var_103B = (var_00.var_CAF.angles[0],angleclamp180(var_00.var_CAF.angles[1] + 180),var_00.var_CAF.angles[2]); + var_00.melee.var_103E = animscripts/utility::func_F41(var_00.var_CAF); + self.melee.var_1015 = var_00.var_CAF.angles; + if(!func_1013()) + { + self.melee.var_1015 = undefined; + return 0; + } + + return 1; +} + +//Function Number: 28 +func_103F() +{ + var_00 = self.melee.target.var_CAF; + if(!isdefined(var_00)) + { + return 0; + } + + if(distancesquared(var_00.origin,self.melee.target.origin) > 16 && isdefined(self.melee.target.a.var_CF8) && self.melee.target.a.var_CF8 != "hide" && self.melee.target.a.var_CF8 != "lean") + { + return 0; + } + + var_01 = vectortoangles(self.origin - var_00.origin); + var_02 = angleclamp180(var_00.angles[1] - var_01[1]); + if(var_00.type == "Cover Left") + { + if(var_02 >= -50 && var_02 <= 0) + { + return 1; + } + } + else if(var_00.type == "Cover Right") + { + if(var_02 >= 0 && var_02 <= 50) + { + return 1; + } + } + + return 0; +} + +//Function Number: 29 +func_1040() +{ + var_00 = self.melee.target; + if(!isai(var_00) || var_00.type != "human") + { + return 0; + } + + if(self.var_786 != "none" || var_00.var_786 != "none") + { + return 0; + } + + if(isdefined(self.meleealwayswin) && isdefined(var_00.meleealwayswin)) + { + return 0; + } + + if(isdefined(self.magic_bullet_shield) && isdefined(var_00.magic_bullet_shield)) + { + return 0; + } + + if((isdefined(self.meleealwayswin) && isdefined(var_00.magic_bullet_shield)) || isdefined(var_00.meleealwayswin) && isdefined(self.magic_bullet_shield)) + { + return 0; + } + + if(isdefined(self.var_1026)) + { + if(![[ self.var_1026 ]]()) + { + return 0; + } + + self.melee.var_1041 = 1; + } + else if(isdefined(var_00.var_1026)) + { + return 0; + } + else if(func_103F() && func_103D()) + { + self.melee.var_1041 = 1; + } + else + { + if(!func_103A()) + { + return 0; + } + + self.melee.var_1041 = 0; + } + + if(!isdefined(var_00.melee.var_103E)) + { + var_00.melee.var_103E = var_00.angles[1]; + } + + self.melee.var_1042 = self.melee.startpos - var_00.origin; + return 1; +} + +//Function Number: 30 +func_1043(param_00) +{ + self.melee.var_1044 = param_00; + param_00.melee.var_1044 = undefined; +} + +//Function Number: 31 +func_1045(param_00) +{ + if(!isdefined(param_00.melee)) + { + return; + } + + func_102E(); + if(!isalive(param_00)) + { + return; + } + + self.var_78A = param_00; + param_00.var_78A = self; + self.melee.var_1046 = 1; + param_00.melee.var_1046 = 1; + self linktoblendtotag(param_00,"tag_sync",1,1); +} + +//Function Number: 32 +func_1047() +{ + if(!func_1051()) + { + self.var_101B = gettime() + 1500; + self.var_101C = self.melee.target; + return; + } + + var_00 = self.melee.target; + func_1043(var_00); + if(self.melee.winner) + { + self.melee.death = undefined; + var_00.melee.death = 1; + } + else + { + var_00.melee.death = undefined; + self.melee.death = 1; + } + + self.melee.var_1049 = var_00; + var_00.melee.var_1049 = self; + if(animscripts/utility::func_C95()) + { + maps\_utility::forceuseweapon(self.primaryweapon,"primary"); + self.lastweapon = self.primaryweapon; + } + + if(var_00 animscripts/utility::func_C95()) + { + var_00 maps\_utility::forceuseweapon(var_00.primaryweapon,"primary"); + var_00.lastweapon = var_00.primaryweapon; + } + + self.melee.weapon = self.weapon; + self.melee.var_104C = animscripts/utility::func_104B(); + var_00.melee.weapon = var_00.weapon; + var_00.melee.var_104C = var_00 animscripts/utility::func_104B(); + self.melee.var_100E = 1; + var_00 animcustom(::func_1052,::func_1072); + var_00 thread func_104D(self); + self.melee.target = undefined; + func_1052(); +} + +//Function Number: 33 +func_104D(param_00) +{ + self endon("end_melee"); + self endon("melee_aivsai_execute"); + wait 0.1; + if(isdefined(param_00)) + { + param_00 notify("end_melee"); + } + + self notify("end_melee"); +} + +//Function Number: 34 +func_104E(param_00,param_01) +{ + if(isdefined(param_01) && param_01 <= gettime()) + { + return 0; + } + + if(!func_1016()) + { + return 0; + } + + var_02 = self.melee.target; + var_03 = distancesquared(var_02.origin,param_00); + if(self.melee.var_1041) + { + var_04 = 256; + } + else + { + var_04 = 1296; + } + + if(var_03 > var_04) + { + return 0; + } + + self.melee.startpos = var_02.origin + self.melee.var_1042; + if(!func_1013()) + { + return 0; + } + + return 1; +} + +//Function Number: 35 +func_104F(param_00) +{ + var_01 = distancesquared((self.origin[0],self.origin[1],0),(self.melee.startpos[0],self.melee.startpos[1],0)); + if(var_01 < 64 && abs(self.melee.startpos[2] - self.origin[2]) < 64) + { + return 1; + } + + var_02 = distancesquared((param_00[0],param_00[1],0),(self.melee.startpos[0],self.melee.startpos[1],0)); + var_03 = distancesquared((self.origin[0],self.origin[1],0),(self.melee.target.origin[0],self.melee.target.origin[1],0)); + if(var_02 > var_03 && abs(self.melee.target.origin[2] - self.origin[2]) < 64) + { + return 1; + } + + return 0; +} + +//Function Number: 36 +func_1050(param_00) +{ + func_101F(); + if(self.melee.var_1041) + { + self forceteleport(self.melee.startpos,self.melee.var_103B); + wait 0.05; + } + else + { + self orientmode("face angle",self.melee.var_103B[1]); + wait 0.05; + } + + return func_104E(param_00); +} + +//Function Number: 37 +func_1051() +{ + if(!func_1016()) + { + return 0; + } + + func_101D(); + self clearanim(%body,0.2); + self setanimknoball(animscripts/run::func_FC2(),%body,1,0.2); + self animmode("zonly_physics"); + self.var_766 = 1; + var_00 = gettime() + 1500; + var_01 = self.melee.target.origin; + while(func_104E(var_01,var_00)) + { + if(func_104F(var_01)) + { + return func_1050(var_01); + } + + self orientmode("face point",self.melee.startpos); + wait 0.05; + } + + func_101F(); + return 0; +} + +//Function Number: 38 +func_1052() +{ + self endon("killanimscript"); + self endon("end_melee"); + self notify("melee_aivsai_execute"); + self animmode("zonly_physics"); + self.a.var_D19 = "none"; + self.var_D4B = undefined; + thread func_105C(); + thread func_105F(); + if(isdefined(self.melee.var_103E)) + { + self orientmode("face angle",self.melee.var_103E); + } + else + { + self orientmode("face current"); + } + + self.a.pose = "stand"; + self clearanim(%body,0.2); + if(isdefined(self.melee.death)) + { + func_1054(); + } + + self setflaggedanimknoballrestart("meleeAnim",self.melee.animname,%body,1,0.2); + var_00 = animscripts/shared::donotetracks("meleeAnim",::func_1068); + if(var_00 == "melee_death" && isdefined(self.melee.var_1053)) + { + func_105A(); + self setflaggedanimknoballrestart("meleeAnim",self.melee.var_1033,%body,1,0.2); + var_00 = animscripts/shared::donotetracks("meleeAnim",::func_1068); + } + + if(isdefined(self.melee) && isdefined(self.melee.death)) + { + self kill(); + } + + self.var_766 = 0; +} + +//Function Number: 39 +func_1054() +{ + self.melee.var_1055 = self.allowpain; + self.melee.var_1056 = self.flashbangimmunity; + maps\_utility::disable_pain(); + maps\_utility::setflashbangimmunity(1); +} + +//Function Number: 40 +func_1059() +{ + return isdefined(self.melee.weapon) && self.melee.weapon != "none" && self.weapon != self.melee.weapon; +} + +//Function Number: 41 +func_105A() +{ + if(self.weapon != "none" && self.lastweapon != "none") + { + return; + } + + if(!isdefined(self.melee.weapon) || self.melee.weapon == "none") + { + return; + } + + maps\_utility::forceuseweapon(self.melee.weapon,self.melee.var_104C); + if(isdefined(self.melee.var_105B)) + { + self.melee.var_105B delete(); + self.melee.var_105B = undefined; + } +} + +//Function Number: 42 +func_105C() +{ + self endon("killanimscript"); + self endon("end_melee"); + self waittill("weapon_dropped",var_00); + if(isdefined(var_00)) + { + self.melee.var_105B = var_00; + } +} + +//Function Number: 43 +func_105D() +{ + if(!isdefined(self.melee.var_1033)) + { + return 0; + } + + if(!isdefined(self.melee.var_105E)) + { + return 0; + } + + return 1; +} + +//Function Number: 44 +func_105F() +{ + self endon("killanimscript"); + self endon("end_melee"); + self waittill("partner_end_melee"); + if(isdefined(self.melee.death)) + { + if(isdefined(self.melee.var_1060) || isdefined(self.melee.var_1061)) + { + self kill(); + return; + } + + self.melee.death = undefined; + if(func_105D()) + { + self.melee.var_1053 = 1; + return; + } + + self notify("end_melee"); + return; + } + + if(!isdefined(self.melee.var_1062)) + { + self notify("end_melee"); + } +} + +//Function Number: 45 +func_1063() +{ + if(!isdefined(self.melee.var_1046)) + { + return; + } + + if(isdefined(self.var_78A)) + { + self.var_78A func_1064(); + } + + func_1064(); +} + +//Function Number: 46 +func_1064() +{ + self unlink(); + self.var_78A = undefined; + if(!isalive(self)) + { + return; + } + + self.melee.var_1046 = undefined; + self animmode("zonly_physics"); + self orientmode("face angle",self.angles[1]); +} + +//Function Number: 47 +func_1065() +{ + func_1063(); + self.melee.var_1062 = 1; + if(isdefined(self.melee.var_1049) && isdefined(self.melee.var_1049.melee)) + { + self.melee.var_1049.melee.var_1062 = 1; + } +} + +//Function Number: 48 +func_1066() +{ + if(animhasnotetrack(self.melee.animname,"melee_death")) + { + return 0; + } + + return isdefined(self.melee.death); +} + +//Function Number: 49 +func_1067(param_00) +{ + if(isdefined(param_00) && param_00) + { + self.melee.var_1061 = 1; + return; + } + + self.melee.var_1060 = 1; +} + +//Function Number: 50 +func_1068(param_00) +{ + if(issubstr(param_00,"ps_")) + { + var_01 = getsubstr(param_00,3); + self playsound(var_01); + return; + } + + if(var_01 == "sync") + { + if(isdefined(self.melee.var_1044)) + { + func_1045(self.melee.var_1044); + self.melee.var_1044 = undefined; + return; + } + + return; + } + + if(var_01 == "unsync") + { + func_1065(); + if(func_1066()) + { + func_1067(); + return; + } + + return; + } + + if(var_01 == "melee_interact") + { + self.melee.var_105E = 1; + return; + } + + if(var_01 == "melee_death") + { + if(isdefined(self.melee.var_1053)) + { + return var_01; + } + + func_1067(); + if(isdefined(self.melee.var_1060)) + { + return var_01; + } + + return; + } + + if(var_01 == "attach_knife") + { + self attach("weapon_parabolic_knife","TAG_INHAND",1); + self.melee.var_1069 = 1; + return; + } + + if(var_01 == "detach_knife") + { + self detach("weapon_parabolic_knife","TAG_INHAND",1); + self.melee.var_1069 = undefined; + return; + } + + if(var_01 == "stab") + { + self playsound("melee_knife_hit_body"); + playfxontag(level._effect["melee_knife_ai"],self,"TAG_KNIFE_FX"); + if(isdefined(self.melee.var_1049) && isdefined(self.melee.var_1049.melee)) + { + self.melee.var_1049 func_1067(1); + return; + } + + return; + } +} + +//Function Number: 51 +func_106A() +{ + self endon("end_melee"); + animscripts/shared::func_D73(); + return 0; +} + +//Function Number: 52 +func_106B() +{ + self endon("end_melee"); + animscripts/notetracks::func_106C("meleeAnim",10); + animscripts/shared::func_D73(); + self startragdoll(); + return 1; +} + +//Function Number: 53 +func_106D() +{ + if(!isalive(self) && isdefined(self.melee.death)) + { + if(isdefined(self.melee.var_1060)) + { + self.deathfunction = ::func_106B; + return; + } + + self.deathfunction = ::func_106A; + } +} + +//Function Number: 54 +func_106E() +{ + if(!isalive(self)) + { + return; + } + + if(isdefined(self.melee.var_101E)) + { + func_101F(); + } + + var_00 = self getdroptofloorposition(); + if(isdefined(var_00)) + { + self forceteleport(var_00,self.angles); + } +} + +//Function Number: 55 +func_106F() +{ + if(isdefined(self.melee.var_1069)) + { + self detach("weapon_parabolic_knife","TAG_INHAND",1); + } + + if(isalive(self)) + { + func_105A(); + } +} + +//Function Number: 56 +func_1070() +{ + if(isdefined(self.melee.var_1055)) + { + if(self.melee.var_1055) + { + maps\_utility::enable_pain(); + } + else + { + maps\_utility::disable_pain(); + } + } + + if(isdefined(self.melee.var_1056)) + { + maps\_utility::setflashbangimmunity(self.melee.var_1056); + } +} + +//Function Number: 57 +func_1072() +{ + func_1063(); + func_106D(); + func_106E(); + func_106F(); + func_1070(); + if(isdefined(self.melee.var_1049)) + { + self.melee.var_1049 notify("partner_end_melee"); + } + + func_1074(self.melee.target); +} + +//Function Number: 58 +func_1073(param_00) +{ + if(isdefined(self.melee)) + { + return 0; + } + + if(isdefined(param_00.melee)) + { + return 0; + } + + self.melee = spawnstruct(); + param_00.melee = spawnstruct(); + return 1; +} + +//Function Number: 59 +func_1074(param_00) +{ + self.melee = undefined; + if(isdefined(param_00)) + { + param_00.melee = undefined; + } +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/move.gsc b/MW3/PC/SP/animscripts/move.gsc new file mode 100644 index 0000000..714b979 --- /dev/null +++ b/MW3/PC/SP/animscripts/move.gsc @@ -0,0 +1,1110 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\move.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 38 + * Decompile Time: 699 ms + * Timestamp: 10/27/2023 2:18:29 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(isdefined(self.custom_animscript_table)) + { + if(isdefined(self.custom_animscript_table["move"])) + { + [[ self.custom_animscript_table["move"] ]](); + return; + } + } + + self endon("killanimscript"); + [[ self.var_8BE["move"] ]](); + func_10AC(); + func_10AE(); + animscripts/utility::func_D15("move"); + var_00 = func_10B1(); + if(var_00 && isdefined(self.var_F74)) + { + func_10D9(); + func_10DB(); + } + else if(isdefined(self.battlechatter) && self.battlechatter) + { + func_10B2(var_00); + animscripts/battlechatter::func_ABF(); + } + + thread func_10BD(); + thread func_1090(); + thread func_10CB(); + animscripts/cover_arrival::func_10A6(); + self.var_10A7 = undefined; + self.var_10A8 = undefined; + thread func_10BC(); + thread animscripts/cover_arrival::func_10A9(1); + self.var_FE4 = undefined; + self.var_FD2 = undefined; + self.var_FC8 = undefined; + func_10B3(1); +} + +//Function Number: 2 +func_067F() +{ + if(isdefined(self.var_108F)) + { + self.grenadeweapon = self.var_108F; + self.var_108F = undefined; + } + + self.teamflashbangimmunity = undefined; + self.var_108E = undefined; + self.var_10A8 = undefined; + self.var_F74 = undefined; + self.var_F75 = undefined; + self.var_FC8 = undefined; + self.var_FCF = undefined; + self.var_FD1 = undefined; + self.var_10AA = undefined; + self.var_10AB = undefined; +} + +//Function Number: 3 +func_10AC() +{ + self.var_FCF = undefined; + self.var_FD1 = undefined; + self.var_FC9 = undefined; + self.var_FF5 = undefined; + self.var_FCB = 0; + self.var_10AD = undefined; +} + +//Function Number: 4 +func_10AE() +{ + if(self.a.pose == "prone") + { + var_00 = animscripts/utility::func_10AF("stand"); + if(var_00 != "prone") + { + self orientmode("face current"); + self animmode("zonly_physics",0); + var_01 = 1; + if(isdefined(self.var_73C)) + { + var_01 = 2; + } + + animscripts/cover_prone::func_10B0(var_00,var_01); + self animmode("none",0); + self orientmode("face default"); + } + } +} + +//Function Number: 5 +func_10B1() +{ + switch(self.var_788) + { + case "concealment_stand": + case "concealment_prone": + case "concealment_crouch": + case "cover_wide_right": + case "cover_wide_left": + case "cover_prone": + case "cover_stand": + case "cover_left": + case "turret": + case "cover_crouch": + case "cover_right": + case "hide": + return 1; + } + + return 0; +} + +//Function Number: 6 +func_10B2(param_00) +{ + if(self.movemode == "run") + { + animscripts/battlechatter_ai::func_B2A(param_00); + } +} + +//Function Number: 7 +func_10B3(param_00) +{ + func_10B6(param_00); + self notify("abort_reload"); +} + +//Function Number: 8 +func_10B4(param_00) +{ + if(param_00 != self.var_10B5) + { + if(isdefined(self.custommoveanimset) && isdefined(self.custommoveanimset[param_00])) + { + self.a.var_CA6 = self.custommoveanimset[param_00]; + } + else + { + self.a.var_CA6 = level.animsets.move[param_00]; + if((self.combatmode == "ambush" || self.combatmode == "ambush_nodes_only") && isdefined(self.pathgoalpos) && distancesquared(self.origin,self.pathgoalpos) > squared(100)) + { + self.var_FE0 = 1; + animscripts/animset::func_CA5(); + } + else + { + self.var_FE0 = 1.35; + } + } + + self.var_10B5 = param_00; + } +} + +//Function Number: 9 +func_10B6(param_00) +{ + self endon("killanimscript"); + self endon("move_interrupt"); + var_01 = self getanimtime(%walk_and_run_loops); + self.a.var_1077 = randomint(10000); + self.var_10B5 = "none"; + self.var_10B7 = undefined; + for(;;) + { + var_02 = self getanimtime(%walk_and_run_loops); + if(var_02 < var_01) + { + self.a.var_1077++; + } + + var_01 = var_02; + func_10B4(self.movemode); + func_10B8(self.movemode); + if(isdefined(self.var_10B7)) + { + self [[ self.var_10B7 ]](); + self.var_10B7 = undefined; + } + + self notify("abort_reload"); + } +} + +//Function Number: 10 +func_10B8(param_00) +{ + self endon("move_loop_restart"); + animscripts/face::func_C44(level.var_C3D); + if(isdefined(self.var_10AB)) + { + self [[ self.var_10AB ]](); + } + else if(animscripts/utility::func_CB2()) + { + animscripts/cqb::func_1075(); + } + else if(param_00 == "run") + { + animscripts/run::func_FB9(); + } + else + { + animscripts/walk::func_107F(); + } + + self.var_FD1 = undefined; +} + +//Function Number: 11 +func_0FDE() +{ + if(self.weapon == "none") + { + return 0; + } + + var_00 = weaponclass(self.weapon); + if(!animscripts/utility::func_EE3()) + { + return 0; + } + + if(animscripts/combat_utility::issniper()) + { + if(!animscripts/utility::func_C98() && self.var_781) + { + return 0; + } + } + + if(isdefined(self.dontshootwhilemoving)) + { + return 0; + } + + return 1; +} + +//Function Number: 12 +func_0FE8() +{ + self endon("killanimscript"); + self notify("doing_shootWhileMoving"); + self endon("doing_shootWhileMoving"); + if(isdefined(self.var_C82) && isdefined(self.var_C82["fire"])) + { + self.a.array["fire"] = self.var_C82["fire"]; + } + else + { + self.a.array["fire"] = %exposed_shoot_auto_v3; + } + + if(isdefined(self.weapon) && animscripts/utility::func_C97()) + { + self.a.array["single"] = animscripts/utility::array(%shotgun_stand_fire_1a,%shotgun_stand_fire_1b); + } + else + { + self.a.array["single"] = animscripts/utility::array(%exposed_shoot_semi1); + } + + self.a.array["burst2"] = %exposed_shoot_burst3; + self.a.array["burst3"] = %exposed_shoot_burst3; + self.a.array["burst4"] = %exposed_shoot_burst4; + self.a.array["burst5"] = %exposed_shoot_burst5; + self.a.array["burst6"] = %exposed_shoot_burst6; + self.a.array["semi2"] = %exposed_shoot_semi2; + self.a.array["semi3"] = %exposed_shoot_semi3; + self.a.array["semi4"] = %exposed_shoot_semi4; + self.a.array["semi5"] = %exposed_shoot_semi5; + for(;;) + { + if(!self.bulletsinclip) + { + if(animscripts/utility::func_10B9()) + { + self.var_10BA = 0; + animscripts/combat_utility::func_10BB(); + } + + if(!self.bulletsinclip) + { + wait 0.5; + continue; + } + } + + animscripts/combat_utility::func_F06(); + self clearanim(%exposed_aiming,0.2); + } +} + +//Function Number: 13 +func_10BC() +{ + self endon("killanimscript"); + wait 0.05; + thread func_10D4(); + thread func_10D2(); + thread animscripts/door::func_1096(); + thread animscripts/door::func_1088(); +} + +//Function Number: 14 +func_10BD() +{ + self endon("killanimscript"); + self.var_10BE = self.var_786; + for(;;) + { + wait 0.05; + if(self.var_10BE != self.var_786) + { + if(!isdefined(self.var_10A8) || self.var_786 != "none") + { + self notify("move_loop_restart"); + } + } + + self.var_10BE = self.var_786; + } +} + +//Function Number: 15 +func_1091(param_00) +{ + self endon("killanimscript"); + if(!param_00) + { + animscripts/cover_arrival::func_10A6(); + } + + self.var_10A8 = undefined; + self clearanim(%root,0.1); + self orientmode("face default"); + self animmode("none",0); + self.var_779 = 1; + func_10B3(!param_00); +} + +//Function Number: 16 +func_1090() +{ + self endon("killanimscript"); + self endon("move_interrupt"); + self.var_10A8 = 1; + for(;;) + { + self waittill("path_changed",var_00,var_01); + if(isdefined(self.var_10A8) || isdefined(self.noturnanims)) + { + continue; + } + + if(!self.var_781 || abs(self getmotionangle()) > 15) + { + continue; + } + + if(self.a.movement != "run" && self.a.movement != "walk") + { + continue; + } + + if(self.a.pose != "stand") + { + continue; + } + + self notify("stop_move_anim_update"); + self.var_FC9 = undefined; + var_02 = angleclamp180(self.angles[1] - vectortoyaw(var_01)); + var_03 = func_10C2(var_02); + if(isdefined(var_03)) + { + self.var_10C0 = var_03; + self.var_10C1 = gettime(); + self.var_10AB = ::func_10C5; + self notify("move_loop_restart"); + animscripts/run::func_FE2(); + } + } +} + +//Function Number: 17 +func_10C2(param_00) +{ + if(isdefined(self.var_10C3)) + { + return [[ self.var_10C3 ]](param_00); + } + + var_01 = undefined; + var_02 = undefined; + if(animscripts/utility::func_CB2() || self.movemode == "walk") + { + var_03 = level.var_C9F; + } + else + { + var_03 = level.var_C9E; + } + + if(param_00 < -30) + { + if(param_00 > -60) + { + var_01 = var_03["L45"]; + } + else if(param_00 > -112.5) + { + var_01 = var_03["L90"]; + if(param_00 > -90) + { + var_02 = var_03["L45"]; + } + else + { + var_02 = var_03["L135"]; + } + } + else if(param_00 > -157.5) + { + var_01 = var_03["L135"]; + if(param_00 > -135) + { + var_02 = var_03["L90"]; + } + else + { + var_02 = var_03["180"]; + } + } + else + { + var_01 = var_03["180"]; + var_02 = var_03["L135"]; + } + } + else if(param_00 > 30) + { + if(param_00 < 60) + { + var_01 = var_03["R45"]; + } + else if(param_00 < 112.5) + { + var_01 = var_03["R90"]; + if(param_00 < 90) + { + var_02 = var_03["R45"]; + } + else + { + var_02 = var_03["R135"]; + } + } + else if(param_00 < 157.5) + { + var_01 = var_03["R135"]; + if(param_00 < 135) + { + var_02 = var_03["R90"]; + } + else + { + var_02 = var_03["180"]; + } + } + else + { + var_01 = var_03["180"]; + var_02 = var_03["R135"]; + } + } + + if(isdefined(var_01)) + { + if(func_10C4(var_01)) + { + return var_01; + } + } + + if(isdefined(var_02)) + { + if(func_10C4(var_02)) + { + return var_02; + } + } + + return undefined; +} + +//Function Number: 18 +func_10C4(param_00) +{ + if(!isdefined(self.pathgoalpos)) + { + return 0; + } + + var_01 = getnotetracktimes(param_00,"code_move"); + var_02 = var_01[0]; + var_03 = getmovedelta(param_00,0,var_02); + var_04 = self localtoworldcoords(var_03); + if(isdefined(self.var_10AD) && squared(self.var_10AD) > distancesquared(self.pathgoalpos,var_04)) + { + return 0; + } + + var_03 = getmovedelta(param_00,0,1); + var_05 = self localtoworldcoords(var_03); + var_05 = var_04 + vectornormalize(var_05 - var_04) * 20; + return self maymovefrompointtopoint(var_04,var_05,1,1); +} + +//Function Number: 19 +func_10C5() +{ + self endon("killanimscript"); + self.var_10AB = undefined; + var_00 = self.var_10C0; + if(gettime() > self.var_10C1 + 50) + { + return; + } + + self animmode("zonly_physics",0); + self clearanim(%body,0.1); + self.var_10B7 = ::func_10C8; + self.var_10A8 = 1; + var_01 = 0.05; + if(isdefined(self.var_10C6)) + { + var_01 = isdefined(self.var_10C6); + } + + self setflaggedanimrestart("turnAnim",var_00,1,var_01,self.moveplaybackrate); + self orientmode("face current"); + animscripts/shared::donotetracks("turnAnim"); + self.var_10A8 = undefined; + self orientmode("face motion"); + self animmode("none",0); + animscripts/shared::donotetracks("turnAnim"); +} + +//Function Number: 20 +func_10C7() +{ + self.var_10AB = undefined; + if(gettime() > self.var_10C1 + 50) + { + return; + } + + self.var_10B7 = ::func_10C8; + animscripts/cover_arrival::func_10A6(); +} + +//Function Number: 21 +func_10C8() +{ + self.var_10A8 = undefined; + self orientmode("face default"); + self clearanim(%root,0.1); + self animmode("none",0); +} + +//Function Number: 22 +func_10C9() +{ + self pushplayer(1); + self animmode("zonly_physics",0); + self clearanim(%body,0.2); + self setflaggedanimrestart("dodgeAnim",self.var_10AA,1,0.2,1); + animscripts/shared::donotetracks("dodgeAnim"); + self animmode("none",0); + self orientmode("face default"); + if(animhasnotetrack(self.var_10AA,"code_move")) + { + animscripts/shared::donotetracks("dodgeAnim"); + } + + self clearanim(%civilian_dodge,0.2); + self pushplayer(0); + self.var_10AA = undefined; + self.var_10AB = undefined; + return 1; +} + +//Function Number: 23 +func_10CA(param_00,param_01) +{ + var_02 = (self.var_773[1],-1 * self.var_773[0],0); + var_03 = self.var_773 * param_01[0]; + var_04 = var_02 * param_01[1]; + var_05 = self.origin + var_03 - var_04; + self pushplayer(1); + if(self maymovetopoint(var_05)) + { + self.var_10AA = param_00; + self.var_10AB = ::func_10C9; + self notify("move_loop_restart"); + return 1; + } + + self pushplayer(0); + return 0; +} + +//Function Number: 24 +func_10CB() +{ + if(!isdefined(self.var_10CC) || !isdefined(self.var_10CD)) + { + return; + } + + self endon("killanimscript"); + self endon("move_interrupt"); + for(;;) + { + self waittill("path_need_dodge",var_00,var_01); + if(animscripts/utility::func_A69()) + { + self.nododgemove = 0; + return; + } + + if(!issentient(var_00)) + { + continue; + } + + var_02 = vectornormalize(var_01 - self.origin); + if(self.var_773[0] * var_02[1] - var_02[0] * self.var_773[1] > 0) + { + if(!func_10CA(self.var_10CD,self.var_10CE)) + { + func_10CA(self.var_10CC,self.var_10CF); + } + } + else if(!func_10CA(self.var_10CC,self.var_10CF)) + { + func_10CA(self.var_10CD,self.var_10CE); + } + + if(isdefined(self.var_10AA)) + { + wait getanimlength(self.var_10AA); + continue; + } + + wait 0.1; + } +} + +//Function Number: 25 +func_10D0(param_00,param_01) +{ + self.nododgemove = 1; + self.var_10CC = param_00; + self.var_10CD = param_01; + var_02 = 1; + if(animhasnotetrack(param_00,"code_move")) + { + var_02 = getnotetracktimes(param_00,"code_move")[0]; + } + + self.var_10CF = getmovedelta(param_00,0,var_02); + var_02 = 1; + if(animhasnotetrack(param_01,"code_move")) + { + var_02 = getnotetracktimes(param_01,"code_move")[0]; + } + + self.var_10CE = getmovedelta(param_01,0,var_02); + self.interval = 80; +} + +//Function Number: 26 +func_10D1() +{ + self.nododgemove = 0; + self.var_10CC = undefined; + self.var_10CD = undefined; + self.var_10CF = undefined; + self.var_10CE = undefined; +} + +//Function Number: 27 +func_10D2() +{ + self endon("killanimscript"); + for(;;) + { + if(isdefined(self.enemy) && isai(self.enemy) || isdefined(self.var_10D3)) + { + if(abs(self getmotionangle()) <= 135) + { + animscripts/melee::func_1009(); + } + } + + wait 0.1; + } +} + +//Function Number: 28 +func_10D4() +{ + self endon("killanimscript"); + if(isdefined(self.disablebulletwhizbyreaction)) + { + return; + } + + for(;;) + { + self waittill("bulletwhizby",var_00); + if(self.movemode != "run" || !self.var_781 || self.a.pose != "stand" || isdefined(self.var_FCF)) + { + continue; + } + + if(self.var_786 != "none") + { + continue; + } + + if(!isdefined(self.enemy) && !self.ignoreall && isdefined(var_00.team) && isenemyteam(self.team,var_00.team)) + { + self.var_F24 = var_00; + self animcustom(::animscripts/reactions::func_F23); + continue; + } + + if(self.var_775 || self.var_774 < 100) + { + continue; + } + + if(isdefined(self.pathgoalpos) && distancesquared(self.origin,self.pathgoalpos) < 10000) + { + wait 0.2; + continue; + } + + self.var_FD1 = gettime(); + self notify("move_loop_restart"); + animscripts/run::func_FE2(); + } +} + +//Function Number: 29 +func_10D5(param_00,param_01) +{ + if(param_01.type == "Cover Left") + { + return %cornercrl_alert_2_shuffle; + } + + if(param_01.type == "Cover Right") + { + return %cornercrr_alert_2_shuffle; + } + + if(param_00) + { + return %covercrouch_hide_2_shufflel; + } + + return %covercrouch_hide_2_shuffler; +} + +//Function Number: 30 +func_10D6(param_00,param_01,param_02) +{ + var_03 = []; + if(param_02.type == "Cover Left") + { + } + else if(var_03.type == "Cover Right") + { + } + else if(var_03.type == "Cover Stand" && param_02.type == var_03.type) + { + if(param_01) + { + } + else + { + } + } + else if(param_01) + { + if(var_03.type == "Cover Stand") + { + } + else + { + } + } + else if(var_03.type == "Cover Stand") + { + } + else + { + } + + self.a.array = var_7B; +} + +//Function Number: 31 +func_10D7(param_00,param_01) +{ + if(self.a.pose == "stand" && param_01.type != "Cover Stand" || param_00.type != "Cover Stand") + { + self.a.pose = "crouch"; + return 0; + } + + return 1; +} + +//Function Number: 32 +func_10D8(param_00) +{ + if(self.a.pose == "crouch" && param_00.type == "Cover Stand") + { + self.a.pose = "stand"; + return 0; + } + + return 1; +} + +//Function Number: 33 +func_10D9() +{ + self endon("killanimscript"); + self endon("goal_changed"); + var_00 = self.var_F75; + self.var_F74 = undefined; + self.var_F75 = undefined; + self.var_10DA = 1; + if(!isdefined(self.var_79E)) + { + return; + } + + if(!isdefined(self.node) || !isdefined(var_00) || self.node != var_00) + { + return; + } + + var_01 = self.var_79E; + var_02 = self.node; + var_03 = var_02.origin - self.origin; + if(lengthsquared(var_03) < 1) + { + return; + } + + var_03 = vectornormalize(var_03); + var_04 = anglestoforward(var_02.angles); + var_05 = var_04[0] * var_03[1] - var_04[1] * var_03[0] > 0; + if(func_10DC(var_05,var_01,var_02)) + { + return; + } + + if(func_10D7(var_01,var_02)) + { + var_06 = 0.1; + } + else + { + var_06 = 0.4; + } + + func_10D6(var_05,var_01,var_02); + self animmode("zonly_physics",0); + self clearanim(%body,var_06); + var_07 = animscripts/utility::func_D4D("shuffle_start"); + var_08 = animscripts/utility::func_D4D("shuffle"); + var_09 = animscripts/utility::func_D4D("shuffle_end"); + if(animhasnotetrack(var_07,"finish")) + { + var_0A = getnotetracktimes(var_07,"finish")[0]; + } + else + { + var_0A = 1; + } + + var_0B = length(getmovedelta(var_07,0,var_0A)); + var_0C = length(getmovedelta(var_08,0,1)); + var_0D = length(getmovedelta(var_09,0,1)); + var_0E = distance(self.origin,var_02.origin); + if(var_0E > var_0B) + { + self orientmode("face angle",animscripts/utility::func_F41(var_01)); + self setflaggedanimrestart("shuffle_start",var_07,1,var_06); + animscripts/shared::donotetracks("shuffle_start"); + self clearanim(var_07,0.2); + var_0E = var_0E - var_0B; + var_06 = 0.2; + } + else + { + self orientmode("face angle",var_02.angles[1]); + } + + var_0F = 0; + if(var_0E > var_0D) + { + var_0F = 1; + var_0E = var_0E - var_0D; + } + + var_10 = getanimlength(var_08); + var_11 = var_10 * var_0E / var_0C * 0.9; + var_11 = floor(var_11 * 20) * 0.05; + self setflaggedanim("shuffle",var_08,1,var_06); + animscripts/notetracks::func_D4F(var_11,"shuffle"); + for(var_12 = 0;var_12 < 2;var_12++) + { + var_0E = distance(self.origin,var_02.origin); + if(var_0F) + { + var_0E = var_0E - var_0D; + } + + if(var_0E < 4) + { + break; + } + + var_11 = var_10 * var_0E / var_0C * 0.9; + var_11 = floor(var_11 * 20) * 0.05; + if(var_11 < 0.05) + { + break; + } + + animscripts/notetracks::func_D4F(var_11,"shuffle"); + } + + if(var_0F) + { + if(func_10D8(var_02)) + { + var_06 = 0.2; + } + else + { + var_06 = 0.4; + } + + self clearanim(var_08,var_06); + self setflaggedanim("shuffle_end",var_09,1,var_06); + animscripts/shared::donotetracks("shuffle_end"); + } + + self safeteleport(var_02.origin); + self animmode("normal"); + self.var_10DA = undefined; +} + +//Function Number: 34 +func_10DB() +{ + if(isdefined(self.var_10DA)) + { + self clearanim(%cover_shuffle,0.2); + self.var_10DA = undefined; + self animmode("none",0); + self orientmode("face default"); + return; + } + + wait 0.2; + self clearanim(%cover_shuffle,0.2); +} + +//Function Number: 35 +func_10DC(param_00,param_01,param_02) +{ + var_03 = undefined; + if(param_01.type == "Cover Right" && param_02.type == "Cover Left" && !param_00) + { + var_03 = %corner_standr_door_r2l; + } + else if(param_01.type == "Cover Left" && param_02.type == "Cover Right" && param_00) + { + var_03 = %corner_standl_door_l2r; + } + + if(!isdefined(var_03)) + { + return 0; + } + + self animmode("zonly_physics",0); + self orientmode("face current"); + self setflaggedanimrestart("sideToSide",var_03,1,0.2); + animscripts/shared::donotetracks("sideToSide",::func_10DD); + var_04 = self getanimtime(var_03); + var_05 = param_02.origin - param_01.origin; + var_05 = vectornormalize((var_05[0],var_05[1],0)); + var_06 = getmovedelta(var_03,var_04,1); + var_07 = param_02.origin - self.origin; + var_07 = (var_07[0],var_07[1],0); + var_08 = vectordot(var_07,var_05) - abs(var_06[1]); + if(var_08 > 2) + { + var_09 = getnotetracktimes(var_03,"slide_end")[0]; + var_0A = var_09 - var_04 * getanimlength(var_03); + var_0B = int(ceil(var_0A / 0.05)); + var_0C = var_05 * var_08 / var_0B; + thread func_10DE(var_0C,var_0B); + } + + animscripts/shared::donotetracks("sideToSide"); + self safeteleport(param_02.origin); + self animmode("none"); + self orientmode("face default"); + self.var_10DA = undefined; + wait 0.2; + return 1; +} + +//Function Number: 36 +func_10DD(param_00) +{ + if(param_00 == "slide_start") + { + return 1; + } +} + +//Function Number: 37 +func_10DE(param_00,param_01) +{ + self endon("killanimscript"); + self endon("goal_changed"); + while(param_01 > 0) + { + self safeteleport(self.origin + param_00); + param_01--; + wait 0.05; + } +} + +//Function Number: 38 +func_0FBE(param_00,param_01) +{ + self endon("movemode"); + self clearanim(%combatrun,0.6); + self setanimknoball(%combatrun,%body,1,0.5,self.moveplaybackrate); + if(isdefined(self.var_FD1) && gettime() - self.var_FD1 < 100 && isdefined(self.var_FD4) && randomfloat(1) < self.a.var_FDD) + { + animscripts/run::func_FD3(); + return; + } + + if(isarray(param_00)) + { + if(isdefined(self.run_override_weights)) + { + var_02 = common_scripts\utility::choose_from_weighted_array(param_00,param_01); + } + else + { + var_02 = param_01[randomint(param_01.size)]; + } + } + else + { + var_02 = param_01; + } + + self setflaggedanimknob("moveanim",var_02,1,0.2); + animscripts/shared::donotetracks("moveanim"); +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/notetracks.gsc b/MW3/PC/SP/animscripts/notetracks.gsc new file mode 100644 index 0000000..8d3af90 --- /dev/null +++ b/MW3/PC/SP/animscripts/notetracks.gsc @@ -0,0 +1,986 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\notetracks.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 58 + * Decompile Time: 943 ms + * Timestamp: 10/27/2023 2:18:32 AM +*******************************************************************/ + +//Function Number: 1 +func_23D8(param_00) +{ + if(param_00 == "sound_dogstep_run_default") + { + self playsound("dogstep_run_default"); + return 1; + } + + var_01 = getsubstr(param_00,0,5); + if(var_01 != "sound") + { + return 0; + } + + var_02 = "anml" + getsubstr(param_00,5); + if(isalive(self)) + { + thread maps\_utility::play_sound_on_tag_endon_death(var_02,"tag_eye"); + } + else + { + thread common_scripts\utility::play_sound_in_space(var_02,self geteye()); + } + + return 1; +} + +//Function Number: 2 +func_23DA() +{ + return isdefined(self.var_23DB); +} + +//Function Number: 3 +func_1E73() +{ + level.notetracks["anim_pose = \"stand\"] = ::func_23E9; + level.notetracks["anim_pose = \"crouch\"] = ::func_23EA; + level.notetracks["anim_pose = \"prone\"] = ::func_23EB; + level.notetracks["anim_pose = \"crawl\"] = ::func_23EC; + level.notetracks["anim_pose = \"back\"] = ::func_0D74; + level.notetracks["anim_movement = \"stop\"] = ::func_23E2; + level.notetracks["anim_movement = \"walk\"] = ::func_23E3; + level.notetracks["anim_movement = \"run\"] = ::func_23E4; + level.notetracks["anim_aiming = 1"] = ::func_23E5; + level.notetracks["anim_aiming = 0"] = ::func_23E7; + level.notetracks["anim_alertness = causal"] = ::func_23E6; + level.notetracks["anim_alertness = alert"] = ::func_23E7; + level.notetracks["anim_alertness = aiming"] = ::func_23E5; + level.notetracks["gunhand = (gunhand)_left"] = ::func_23ED; + level.notetracks["anim_gunhand = \"left\"] = ::func_23ED; + level.notetracks["gunhand = (gunhand)_right"] = ::func_23ED; + level.notetracks["anim_gunhand = \"right\"] = ::func_23ED; + level.notetracks["anim_gunhand = \"none\"] = ::func_23ED; + level.notetracks["gun drop"] = ::func_23EE; + level.notetracks["dropgun"] = ::func_23EE; + level.notetracks["gun_2_chest"] = ::func_23EF; + level.notetracks["gun_2_back"] = ::func_23F0; + level.notetracks["pistol_pickup"] = ::func_23F2; + level.notetracks["pistol_putaway"] = ::func_23F3; + level.notetracks["drop clip"] = ::func_23F4; + level.notetracks["refill clip"] = ::func_23F5; + level.notetracks["reload done"] = ::func_23F5; + level.notetracks["load_shell"] = ::func_23F6; + level.notetracks["pistol_rechamber"] = ::func_23F7; + level.notetracks["gravity on"] = ::func_23F8; + level.notetracks["gravity off"] = ::func_23F8; + level.notetracks["footstep_right_large"] = ::func_23F9; + level.notetracks["footstep_right_small"] = ::func_23F9; + level.notetracks["footstep_left_large"] = ::func_23F9; + level.notetracks["footstep_left_small"] = ::func_23F9; + level.notetracks["footscrape"] = ::func_23FE; + level.notetracks["land"] = ::func_23FF; + level.notetracks["bodyfall large"] = ::func_2402; + level.notetracks["bodyfall small"] = ::func_2402; + level.notetracks["code_move"] = ::func_2400; + level.notetracks["face_enemy"] = ::func_2401; + level.notetracks["laser_on"] = ::func_23DD; + level.notetracks["laser_off"] = ::func_23DD; + level.notetracks["start_ragdoll"] = ::func_23E0; + level.notetracks["fire"] = ::func_23DC; + level.notetracks["fire_spray"] = ::func_240C; + level.notetracks["bloodpool"] = ::animscripts/death::func_ECA; + if(isdefined(level._notetrackfx)) + { + var_00 = getarraykeys(level._notetrackfx); + foreach(var_02 in var_00) + { + level.notetracks[var_02] = ::func_23FB; + } + } +} + +//Function Number: 4 +func_23DC(param_00,param_01) +{ + if(isdefined(level.fire_notetrack_functions[self.script])) + { + thread [[ level.fire_notetrack_functions[self.script] ]](); + return; + } + + thread [[ ::func_20D7 ]](); +} + +//Function Number: 5 +func_23DD(param_00,param_01) +{ + if(issubstr(param_00,"on")) + { + self.a.var_CDF = 1; + } + else + { + self.a.var_CDF = 0; + } + + animscripts/shared::func_CE0(); +} + +//Function Number: 6 +func_23DE(param_00,param_01) +{ +} + +//Function Number: 7 +func_23DF() +{ + wait 0.1; + if(isdefined(self)) + { + self unlink(); + } +} + +//Function Number: 8 +func_23E0(param_00,param_01) +{ + if(isdefined(self.noragdoll)) + { + return; + } + + if(isdefined(self.var_EC7)) + { + return; + } + + if(!isdefined(self.var_23E1)) + { + thread func_23DF(); + } + + self startragdoll(); +} + +//Function Number: 9 +func_23E2(param_00,param_01) +{ + self.a.movement = "stop"; +} + +//Function Number: 10 +func_23E3(param_00,param_01) +{ + self.a.movement = "walk"; +} + +//Function Number: 11 +func_23E4(param_00,param_01) +{ + self.a.movement = "run"; +} + +//Function Number: 12 +func_23E5(param_00,param_01) +{ +} + +//Function Number: 13 +func_23E6(param_00,param_01) +{ +} + +//Function Number: 14 +func_23E7(param_00,param_01) +{ +} + +//Function Number: 15 +func_0D2A() +{ + animscripts/utility::func_F7D(1); + self.a.var_D29 = undefined; +} + +//Function Number: 16 +func_23E8(param_00) +{ + self.a.pose = param_00; + if(isdefined(self.a.var_D29)) + { + func_0D2A(); + } + + self notify("entered_pose" + param_00); +} + +//Function Number: 17 +func_23E9(param_00,param_01) +{ + if(self.a.pose == "prone") + { + self orientmode("face default"); + animscripts/utility::func_F7D(1); + } + + func_23E8("stand"); +} + +//Function Number: 18 +func_23EA(param_00,param_01) +{ + if(self.a.pose == "prone") + { + self orientmode("face default"); + animscripts/utility::func_F7D(1); + } + + func_23E8("crouch"); +} + +//Function Number: 19 +func_23EB(param_00,param_01) +{ + if(!issentient(self)) + { + return; + } + + self setproneanimnodes(-45,45,%prone_legs_down,%exposed_aiming,%prone_legs_up); + animscripts/utility::func_10E1(1); + func_23E8("prone"); + if(isdefined(self.a.var_10E0)) + { + self.a.var_EE0 = 1; + return; + } + + self.a.var_EE0 = undefined; +} + +//Function Number: 20 +func_23EC(param_00,param_01) +{ + if(!issentient(self)) + { + return; + } + + self setproneanimnodes(-45,45,%prone_legs_down,%exposed_aiming,%prone_legs_up); + animscripts/utility::func_10E1(1); + func_23E8("prone"); + self.a.var_EE0 = undefined; +} + +//Function Number: 21 +func_0D74(param_00,param_01) +{ + if(!issentient(self)) + { + return; + } + + func_23E8("crouch"); + self.a.var_D29 = 1; + self.a.movement = "stop"; + self setproneanimnodes(-90,90,%prone_legs_down,%exposed_aiming,%prone_legs_up); + animscripts/utility::func_10E1(1); +} + +//Function Number: 22 +func_23ED(param_00,param_01) +{ + if(issubstr(param_00,"left")) + { + animscripts/shared::func_C9B(self.weapon,"left"); + self notify("weapon_switch_done"); + return; + } + + if(issubstr(param_00,"right")) + { + animscripts/shared::func_C9B(self.weapon,"right"); + self notify("weapon_switch_done"); + return; + } + + if(issubstr(param_00,"none")) + { + animscripts/shared::func_C9B(self.weapon,"none"); + return; + } +} + +//Function Number: 23 +func_23EE(param_00,param_01) +{ + animscripts/shared::func_23C8(); + self.lastweapon = self.weapon; +} + +//Function Number: 24 +func_23EF(param_00,param_01) +{ + animscripts/shared::func_C9B(self.weapon,"chest"); +} + +//Function Number: 25 +func_23F0(param_00,param_01) +{ + animscripts/shared::func_C9B(self.weapon,"back"); + self.weapon = animscripts/utility::func_23F1(); + self.bulletsinclip = weaponclipsize(self.weapon); +} + +//Function Number: 26 +func_23F2(param_00,param_01) +{ + animscripts/shared::func_C9B(self.sidearm,"right"); + self.bulletsinclip = weaponclipsize(self.weapon); + self notify("weapon_switch_done"); +} + +//Function Number: 27 +func_23F3(param_00,param_01) +{ + animscripts/shared::func_C9B(self.weapon,"none"); + self.weapon = animscripts/utility::func_23F1(); + self.bulletsinclip = weaponclipsize(self.weapon); +} + +//Function Number: 28 +func_23F4(param_00,param_01) +{ + thread animscripts/shared::func_23D1(param_01); +} + +//Function Number: 29 +func_23F5(param_00,param_01) +{ + if(weaponclass(self.weapon) == "rocketlauncher") + { + animscripts/combat_utility::func_2385(); + } + + animscripts/weaponlist::func_CD0(); + self.a.var_114D = 0; +} + +//Function Number: 30 +func_23F6(param_00,param_01) +{ + self playsound("weap_reload_shotgun_loop_npc"); +} + +//Function Number: 31 +func_23F7(param_00,param_01) +{ + self playsound("weap_reload_pistol_chamber_npc"); +} + +//Function Number: 32 +func_23F8(param_00,param_01) +{ + if(issubstr(param_00,"on")) + { + self animmode("gravity"); + return; + } + + if(issubstr(param_00,"off")) + { + self animmode("nogravity"); + } +} + +//Function Number: 33 +func_23F9(param_00,param_01) +{ + var_02 = issubstr(param_00,"left"); + var_03 = issubstr(param_00,"large"); + func_2409(var_02,var_03); + var_04 = func_23FA(); + self playsound("gear_rattle_" + var_04); +} + +//Function Number: 34 +func_23FA() +{ + var_00 = "run"; + if(isdefined(self.sprint)) + { + var_00 = "sprint"; + } + + if(isdefined(self.a)) + { + if(isdefined(self.a.movement)) + { + if(self.a.movement == "walk") + { + var_00 = "walk"; + } + } + + if(isdefined(self.a.pose)) + { + if(self.a.pose == "prone") + { + var_00 = "prone"; + } + } + } + + return var_00; +} + +//Function Number: 35 +func_23FB(param_00,param_01) +{ + if(isdefined(self.var_752)) + { + var_02 = self.var_752; + } + else + { + var_02 = "dirt"; + } + + var_03 = undefined; + if(isdefined(level._notetrackfx[param_00][var_02])) + { + var_03 = level._notetrackfx[param_00][var_02]; + } + else if(isdefined(level._notetrackfx[param_00]["all"])) + { + var_03 = level._notetrackfx[param_00]["all"]; + } + + if(!isdefined(var_03)) + { + return; + } + + if(isai(self)) + { + playfxontag(var_03.fx,self,var_03.tag); + } + + if(!isdefined(var_03.var_23FC) && !isdefined(var_03.var_23FD)) + { + return; + } + + var_04 = "" + var_03.var_23FC + var_02 + var_03.var_23FD; + self playsound(var_04); +} + +//Function Number: 36 +func_23FE(param_00,param_01) +{ + if(isdefined(self.var_752)) + { + var_02 = self.var_752; + } + else + { + var_02 = "dirt"; + } + + self playsound("step_scrape_" + var_02); +} + +//Function Number: 37 +func_23FF(param_00,param_01) +{ + if(isdefined(self.var_752)) + { + var_02 = self.var_752; + } + else + { + var_02 = "dirt"; + } + + self playsound("land_" + var_02); +} + +//Function Number: 38 +func_2400(param_00,param_01) +{ + return "code_move"; +} + +//Function Number: 39 +func_2401(param_00,param_01) +{ + if(self.script != "reactions") + { + self orientmode("face enemy"); + return; + } + + if(isdefined(self.enemy) && distancesquared(self.enemy.origin,self.var_731) < 4096) + { + self orientmode("face enemy"); + return; + } + + self orientmode("face point",self.var_731); +} + +//Function Number: 40 +func_2402(param_00,param_01) +{ + var_02 = "_small"; + if(issubstr(param_00,"large")) + { + var_02 = "_large"; + } + + if(isdefined(self.var_752)) + { + var_03 = self.var_752; + } + else + { + var_03 = "dirt"; + } + + self playsound("bodyfall_" + var_03 + var_02); +} + +//Function Number: 41 +func_23CA(param_00,param_01,param_02) +{ + if(isai(self) && self.type == "dog") + { + if(func_23D8(param_00)) + { + return; + } + } + + var_03 = level.notetracks[param_00]; + if(isdefined(var_03)) + { + return [[ var_03 ]](param_00,param_01); + } + + switch(param_00) + { + case "undefined": + case "finish": + case "end": + return param_00; + + case "finish early": + if(isdefined(self.enemy)) + { + return param_00; + } + break; + + case "swish small": + thread common_scripts\utility::play_sound_in_space("melee_swing_small",self gettagorigin("TAG_WEAPON_RIGHT")); + break; + + case "swish large": + thread common_scripts\utility::play_sound_in_space("melee_swing_large",self gettagorigin("TAG_WEAPON_RIGHT")); + break; + + case "rechamber": + if(animscripts/utility::func_C97()) + { + self playsound("weap_reload_shotgun_pump_npc"); + } + + self.a.var_114D = 0; + break; + + case "no death": + self.a.var_D55 = 1; + break; + + case "no pain": + self.allowpain = 0; + break; + + case "allow pain": + self.allowpain = 1; + break; + + case "anim_melee = \"right\": + case "anim_melee = right": + self.a.var_110C = "right"; + break; + + case "anim_melee = \"left\": + case "anim_melee = left": + self.a.var_110C = "left"; + break; + + case "swap taghelmet to tagleft": + if(isdefined(self.hatmodel)) + { + if(isdefined(self.var_2403)) + { + self detach(self.var_2403,"TAG_HELMETSIDE"); + self.var_2403 = undefined; + } + + self detach(self.hatmodel,""); + self attach(self.hatmodel,"TAG_WEAPON_LEFT"); + self.hatmodel = undefined; + } + break; + + case "stop anim": + maps\_utility::anim_stopanimscripted(); + return param_00; + + case "break glass": + level notify("glass_break",self); + break; + + case "break_glass": + level notify("glass_break",self); + break; + + default: + if(isdefined(param_02)) + { + return [[ param_02 ]](param_00); + } + break; + } +} + +//Function Number: 42 +func_0D4C(param_00,param_01,param_02) +{ + for(;;) + { + self waittill(param_00,var_03); + if(!isdefined(var_03)) + { + var_03 = "undefined"; + } + + var_04 = [[ param_01 ]](var_03); + if(isdefined(var_04) && var_04) + { + continue; + } + + var_05 = func_23CA(var_03,param_00); + if(isdefined(var_05)) + { + return var_05; + } + } +} + +//Function Number: 43 +func_1156(param_00,param_01) +{ + for(;;) + { + self waittill(param_00,var_02); + if(!isdefined(var_02)) + { + var_02 = "undefined"; + } + + var_03 = func_23CA(var_02,param_00); + [[ param_01 ]](var_02); + if(isdefined(var_03)) + { + return var_03; + } + } +} + +//Function Number: 44 +func_2404(param_00,param_01,param_02,param_03) +{ + animscripts/shared::donotetracks(param_00,param_02,param_03); +} + +//Function Number: 45 +func_239E(param_00,param_01,param_02,param_03) +{ + func_2406(::animscripts/shared::donotetracks,param_00,param_01,param_02,param_03); +} + +//Function Number: 46 +func_2405(param_00,param_01,param_02,param_03) +{ + func_2406(::func_0D4C,param_00,param_01,param_02,param_03); +} + +//Function Number: 47 +func_2406(param_00,param_01,param_02,param_03,param_04) +{ + if(isdefined(param_02)) + { + self endon(param_02); + } + + self endon("killanimscript"); + if(!isdefined(param_04)) + { + param_04 = "undefined"; + } + + for(;;) + { + var_05 = gettime(); + var_06 = [[ param_00 ]](param_01,param_03,param_04); + var_07 = gettime() - var_05; + if(var_07 < 0.05) + { + var_05 = gettime(); + var_06 = [[ param_00 ]](param_01,param_03,param_04); + var_07 = gettime() - var_05; + if(var_07 < 0.05) + { + wait 0.05 - var_07; + } + } + } +} + +//Function Number: 48 +func_106C(param_00,param_01,param_02,param_03) +{ + var_04 = spawnstruct(); + var_04 thread func_2408(param_01); + func_2407(::func_2404,param_00,param_02,param_03,var_04); +} + +//Function Number: 49 +func_0D4F(param_00,param_01,param_02,param_03) +{ + var_04 = spawnstruct(); + var_04 thread func_2408(param_00); + func_2407(::func_239E,param_01,param_02,param_03,var_04); +} + +//Function Number: 50 +func_1001(param_00,param_01,param_02,param_03) +{ + var_04 = spawnstruct(); + var_04 thread func_2408(param_00); + func_2407(::func_2405,param_01,param_02,param_03,var_04); +} + +//Function Number: 51 +func_2407(param_00,param_01,param_02,param_03,param_04) +{ + param_04 endon("stop_notetracks"); + [[ param_00 ]](param_01,undefined,param_02,param_03); +} + +//Function Number: 52 +func_2408(param_00) +{ + wait param_00; + self notify("stop_notetracks"); +} + +//Function Number: 53 +func_2409(param_00,param_01) +{ + if(!isai(self)) + { + self playsound("step_run_dirt"); + return; + } + + var_02 = undefined; + if(!isdefined(self.var_752)) + { + if(!isdefined(self.var_240A)) + { + self playsound("step_run_dirt"); + return; + } + + var_02 = self.var_240A; + } + else + { + var_02 = self.var_752; + self.var_240A = self.var_752; + } + + var_03 = "J_Ball_RI"; + if(param_00) + { + var_03 = "J_Ball_LE"; + } + + var_04 = func_23FA(); + self playsound("step_" + var_04 + "_" + var_02); + if(param_01) + { + if(![[ level.var_20CD ]](var_03,var_02)) + { + func_20CE(var_03,var_02); + return; + } + + return; + } + + if(![[ level.var_20CF ]](var_03,var_02)) + { + func_20D0(var_03,var_02); + } +} + +//Function Number: 54 +func_20D0(param_00,param_01) +{ + var_02 = 0; + while(var_02 < level.var_20D1.size) + { + if(param_01 != level.var_20D1[var_02]) + { + continue; + } + + var_03 = self gettagorigin(param_00); + var_04 = self.angles; + var_05 = anglestoforward(var_04); + var_06 = var_05 * -1; + var_07 = anglestoup(var_04); + playfx(level._effect["step_" + level.var_20D1[var_02]],var_03,var_07,var_06); + return 1; + var_07++; + } + + return 0; +} + +//Function Number: 55 +func_20CE(param_00,param_01) +{ + var_02 = 0; + while(var_02 < level.var_20D2.size) + { + if(param_01 != level.var_20D2[var_02]) + { + continue; + } + + var_03 = self gettagorigin(param_00); + var_04 = self.angles; + var_05 = anglestoforward(var_04); + var_06 = var_05 * -1; + var_07 = anglestoup(var_04); + playfx(level._effect["step_small_" + level.var_20D2[var_02]],var_03,var_07,var_06); + return 1; + var_07++; + } + + return 0; +} + +//Function Number: 56 +func_20D7() +{ + waittillframeend; + if(isdefined(self) && gettime() > self.a.lastshoottime) + { + animscripts/utility::func_D5F(); + animscripts/combat_utility::func_2386(); + if(weaponclass(self.weapon) == "rocketlauncher") + { + self.a.rockets--; + } + } +} + +//Function Number: 57 +func_20D5() +{ + if(self.a.weaponpos["right"] == "none") + { + return; + } + + if(isdefined(self.var_240B)) + { + func_20D7(); + return; + } + + var_00 = self gettagorigin("tag_weapon"); + var_01 = anglestoforward(self getmuzzleangle()); + var_02 = var_00 + var_01 * 1000; + self shoot(1,var_02); + animscripts/combat_utility::func_2386(); +} + +//Function Number: 58 +func_240C(param_00,param_01) +{ + if(!isalive(self) && self isbadguy()) + { + if(isdefined(self.var_240D)) + { + return; + } + + self.var_240D = 1; + var_02["axis"] = "team3"; + self.team = var_7B[self.team]; + } + + if(!issentient(self)) + { + self notify("fire",var_7B["team3"],"axis"); + return; + } + + if(self.a.weaponpos["right"] == "none") + { + return; + } + + var_03 = self getmuzzlepos(); + var_04 = anglestoforward(self getmuzzleangle()); + var_05 = 10; + if(isdefined(self.isrambo)) + { + var_05 = 20; + } + + var_06 = 0; + if(isalive(self.enemy) && issentient(self.enemy) && self canshootenemy()) + { + var_07 = vectornormalize(self.enemy geteye() - var_03); + if(vectordot(var_04,var_07) > cos(var_05)) + { + var_06 = 1; + } + } + + if(var_06) + { + animscripts/utility::func_D5F(); + } + else + { + var_04 = var_04 + (randomfloat(2) - 1 * 0.1,randomfloat(2) - 1 * 0.1,randomfloat(2) - 1 * 0.1); + var_08 = var_03 + var_04 * 1000; + animscripts/utility::func_2384(var_08); + } + + animscripts/combat_utility::func_2386(); +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/pain.gsc b/MW3/PC/SP/animscripts/pain.gsc new file mode 100644 index 0000000..55fee94 --- /dev/null +++ b/MW3/PC/SP/animscripts/pain.gsc @@ -0,0 +1,1573 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\pain.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 48 + * Decompile Time: 900 ms + * Timestamp: 10/27/2023 2:18:35 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(isdefined(self.var_D0F)) + { + self waittill("killanimscript"); + return; + } + + if([[ level.pain_test ]]()) + { + return; + } + + if(self.a.disablepain) + { + return; + } + + self notify("kill_long_death"); + if(isdefined(self.a.var_B29)) + { + self.a.var_D12 = self.a.var_B29; + } + else + { + self.a.var_D12 = 0; + } + + self.a.var_B29 = gettime(); + if(self.var_786 != "none") + { + self.a.var_D13 = 1; + } + else + { + self.a.var_D13 = undefined; + } + + if(self.a.var_D14) + { + self.health = 1; + } + + var_00 = 0; + var_01 = 0; + var_02 = self.health / self.maxhealth; + self notify("anim entered pain"); + self endon("killanimscript"); + animscripts/utility::func_D15("pain"); + self animmode("gravity"); + if(!isdefined(self.var_D16)) + { + animscripts/face::func_C41("pain"); + } + + if(self.damagelocation == "helmet") + { + animscripts/death::func_D17(); + } + else if(func_0D1F() && randomint(2) == 0) + { + animscripts/death::func_D17(); + } + + if(isdefined(self.var_D18)) + { + self [[ self.var_D18 ]](); + return; + } + + if(func_0D3F()) + { + return; + } + + if(func_0D38(self.a.var_D19)) + { + return; + } + + var_03 = func_0D27(); + func_0D35(var_03); +} + +//Function Number: 2 +func_0D1A() +{ + level._effect["crawling_death_blood_smear"] = loadfx("impacts/blood_smear_decal"); +} + +//Function Number: 3 +func_067F() +{ + if(isdefined(self.var_D1B)) + { + self.var_D1C = undefined; + self.var_D1B = undefined; + self.allowpain = 1; + if(!isdefined(self.var_D1D)) + { + self.ignoreme = 0; + } + + self.var_D1D = undefined; + } + + if(isdefined(self.var_D1E)) + { + self.var_D1E = undefined; + self.allowpain = 1; + } +} + +//Function Number: 4 +func_0D1F() +{ + if(isexplosivedamagemod(self.var_726)) + { + return 1; + } + + if(gettime() - level.var_D20 <= 50) + { + var_00 = level.var_D21 * level.var_D21 * 1.2 * 1.2; + if(distancesquared(self.origin,level.var_D22) < var_00) + { + var_01 = var_00 * 0.5 * 0.5; + self.var_D24 = distancesquared(self.origin,level.var_D23) < var_01; + return 1; + } + } + + return 0; +} + +//Function Number: 5 +func_0D25() +{ + if(self.a.pose == "prone") + { + return; + } + + if(isdefined(self.lastattacker) && isdefined(self.lastattacker.team) && self.lastattacker.team == self.team) + { + return; + } + + if(!isdefined(self.var_D1C) || gettime() - self.a.var_D12 > 1500) + { + self.var_D1C = randomintrange(2,3); + } + + if(isdefined(self.lastattacker) && distancesquared(self.origin,self.lastattacker.origin) < squared(512)) + { + self.var_D1C = 0; + } + + if(self.var_D1C > 0) + { + self.var_D1C--; + return; + } + + self.var_D1B = 1; + self.allowpain = 0; + if(self.ignoreme) + { + self.var_D1D = 1; + } + else + { + self.ignoreme = 1; + } + + if(animscripts/utility::func_C95()) + { + animscripts/shared::func_C9B(self.primaryweapon,"right"); + } + + if(self.a.pose == "crouch") + { + return %exposed_crouch_extendedpaina; + } + + var_00 = animscripts/utility::array(%stand_exposed_extendedpain_chest,%stand_exposed_extendedpain_head_2_crouch,%stand_exposed_extendedpain_hip_2_crouch); + return var_00[randomint(var_00.size)]; +} + +//Function Number: 6 +func_0D27() +{ + if(self.damageshield && !isdefined(self.var_D28)) + { + var_00 = func_0D25(); + if(isdefined(var_00)) + { + return var_00; + } + } + + if(isdefined(self.a.var_D29)) + { + if(self.a.pose == "crouch") + { + return %back_pain; + } + else + { + animscripts/notetracks::func_D2A(); + } + } + + if(self.a.pose == "stand") + { + var_01 = isdefined(self.node) && distancesquared(self.origin,self.node.origin) < 4096; + if(!var_01 && self.a.movement == "run" && abs(self getmotionangle()) < 60) + { + return func_0D2C(); + } + + self.a.movement = "stop"; + return func_0D30(); + } + + if(self.a.pose == "crouch") + { + self.a.movement = "stop"; + return func_0D33(); + } + + if(self.a.pose == "prone") + { + self.a.movement = "stop"; + return func_0D34(); + } +} + +//Function Number: 7 +func_0D2C() +{ + var_00 = []; + var_01 = 0; + var_02 = 0; + var_03 = 0; + if(self maymovetopoint(self localtoworldcoords((300,0,0)))) + { + var_02 = 1; + var_01 = 1; + } + else if(self maymovetopoint(self localtoworldcoords((200,0,0)))) + { + var_01 = 1; + } + + if(isdefined(self.a.var_D2D)) + { + var_02 = 0; + var_01 = 0; + } + + if(var_02) + { + var_00[var_00.size] = %run_pain_leg; + var_00[var_00.size] = %run_pain_shoulder; + var_00[var_00.size] = %run_pain_stomach_stumble; + var_00[var_00.size] = %run_pain_head; + } + + if(var_01) + { + var_00[var_00.size] = %run_pain_fallonknee_02; + var_00[var_00.size] = %run_pain_stomach; + var_00[var_00.size] = %run_pain_stumble; + var_00[var_00.size] = %run_pain_stomach_fast; + var_00[var_00.size] = %run_pain_leg_fast; + var_00[var_00.size] = %run_pain_fall; + } + else if(self maymovetopoint(self localtoworldcoords((120,0,0)))) + { + var_00[var_00.size] = %run_pain_fallonknee; + var_00[var_00.size] = %run_pain_fallonknee_03; + } + + if(!var_00.size) + { + self.a.movement = "stop"; + return func_0D30(); + } + + return var_00[randomint(var_00.size)]; +} + +//Function Number: 8 +func_0D2E() +{ + var_00 = []; + if(animscripts/utility::func_D2F("torso_upper","torso_lower","left_arm_upper","right_arm_upper","neck")) + { + } + + if(animscripts/utility::func_D2F("torso_lower","left_leg_upper","right_leg_upper")) + { + } + + if(animscripts/utility::func_D2F("head","neck")) + { + } + + if(animscripts/utility::func_D2F("left_arm_lower","left_arm_upper","torso_upper")) + { + } + + if(animscripts/utility::func_D2F("right_arm_lower","right_arm_upper","torso_upper")) + { + } + + if(var_7B.size < 2) + { + } + + if(var_7B.size < 2) + { + } + + return var_7B[randomint(var_7B.size)]; +} + +//Function Number: 9 +func_0D30() +{ + if(animscripts/utility::func_C95()) + { + return func_0D2E(); + } + + var_00 = []; + var_01 = []; + if(animscripts/utility::func_D2F("torso_upper","torso_lower")) + { + } + + if(animscripts/utility::func_D2F("torso_upper","head","helmet","neck")) + { + var_01[var_01.size] = %exposed_pain_face; + var_01[var_01.size] = %stand_exposed_extendedpain_neck; + } + + if(animscripts/utility::func_D2F("right_arm_upper","right_arm_lower")) + { + var_01[var_01.size] = %exposed_pain_right_arm; + } + + if(animscripts/utility::func_D2F("left_arm_lower","left_arm_upper")) + { + var_01[var_01.size] = %stand_exposed_extendedpain_shoulderswing; + } + + if(animscripts/utility::func_D2F("torso_lower","left_leg_upper","right_leg_upper")) + { + var_01[var_01.size] = %exposed_pain_groin; + var_01[var_01.size] = %stand_exposed_extendedpain_hip; + } + + if(animscripts/utility::func_D2F("left_foot","right_foot","left_leg_lower","right_leg_lower")) + { + var_01[var_01.size] = %stand_exposed_extendedpain_thigh; + } + + if(var_01.size < 2) + { + if(!self.a.disablelongdeath) + { + var_01[var_01.size] = %exposed_pain_2_crouch; + var_01[var_01.size] = %stand_extendedpainb; + } + else + { + var_01[var_01.size] = %exposed_pain_right_arm; + var_01[var_01.size] = %exposed_pain_face; + var_01[var_01.size] = %exposed_pain_groin; + } + } + + if(var_7B.size < 2) + { + } + + if(!self.damageshield && !self.a.disablelongdeath) + { + var_02 = randomint(var_01.size + var_7B.size); + if(var_02 < var_01.size) + { + return var_01[var_02]; + } + else + { + return var_7B[var_02 - var_01.size]; + } + } + + return var_01[randomint(var_01.size)]; +} + +//Function Number: 10 +func_0D32(param_00) +{ + var_01 = []; + for(var_02 = 0;var_02 < param_00.size;var_02++) + { + var_03 = param_00[var_02]; + var_04 = 1; + if(animhasnotetrack(var_03,"code_move")) + { + var_04 = getnotetracktimes(var_03,"code_move")[0]; + } + + var_05 = getmovedelta(var_03,0,var_04); + var_06 = self localtoworldcoords(var_05); + if(self maymovetopoint(var_06,1,1)) + { + var_01[var_01.size] = var_03; + } + } + + return var_01; +} + +//Function Number: 11 +func_0D33() +{ + var_00 = []; + if(!self.damageshield && !self.a.disablelongdeath) + { + } + + if(animscripts/utility::func_D2F("left_hand","left_arm_lower","left_arm_upper")) + { + } + + if(animscripts/utility::func_D2F("right_hand","right_arm_lower","right_arm_upper")) + { + } + + return var_7B[randomint(var_7B.size)]; +} + +//Function Number: 12 +func_0D34() +{ + if(randomint(2) == 0) + { + return %prone_reaction_a; + } + + return %prone_reaction_b; +} + +//Function Number: 13 +func_0D35(param_00) +{ + var_01 = 1; + self setflaggedanimknoballrestart("painanim",param_00,%body,1,0.1,var_01); + if(self.a.pose == "prone") + { + self updateprone(%prone_legs_up,%prone_legs_down,1,0.1,1); + } + + if(animhasnotetrack(param_00,"start_aim")) + { + thread func_0D36("painanim"); + self endon("start_aim"); + } + + if(animhasnotetrack(param_00,"code_move")) + { + animscripts/shared::donotetracks("painanim"); + } + + animscripts/shared::donotetracks("painanim"); +} + +//Function Number: 14 +func_0D36(param_00) +{ + self endon("killanimscript"); + self waittillmatch("start_aim",param_00); + self notify("start_aim"); +} + +//Function Number: 15 +func_0D37() +{ + self endon("killanimscript"); + self.var_D1E = 1; + self.allowpain = 0; + wait 0.5; + self.var_D1E = undefined; + self.allowpain = 1; +} + +//Function Number: 16 +func_0D38(param_00) +{ + if(param_00 == "none") + { + return 0; + } + + self.a.var_D19 = "none"; + thread func_0D37(); + switch(param_00) + { + case "cover_left": + if(self.a.pose == "stand") + { + var_01 = []; + func_0D3A(var_7B); + var_01 = 1; + } + else if(self.a.pose == "crouch") + { + var_01 = []; + func_0D3A(var_7B); + var_01 = 1; + } + else + { + var_02 = 0; + } + + break; + var_7B[var_01.size] + %cornercrl_painb + var_7B[var_7B.size] + %corner_standl_paine + var_7B[var_7B.size] + %corner_standl_paind + var_7B[var_7B.size] + %corner_standl_painc + var_7B[var_01.size] + %corner_standl_painb + break; + + case "cover_right": + if(self.a.pose == "stand") + { + var_01 = []; + func_0D3A(var_7B); + var_01 = 1; + } + else if(self.a.pose == "crouch") + { + var_01 = []; + func_0D3A(var_7B); + var_01 = 1; + } + else + { + var_02 = 0; + } + + break; + var_7B[var_7B.size] + %cornercrr_alert_painc + var_7B[var_01.size] + %cornercrr_alert_paina + var_7B[2] + %corner_standr_painc + var_7B[1] + %corner_standr_painb + var_7B[0] + %corner_standr_pain + break; + + case "cover_right_stand_A": + var_02 = 0; + break; + + case "cover_right_stand_B": + func_0D3B(%corner_standr_pain_b_2_alert); + var_02 = 1; + break; + + case "cover_left_stand_A": + func_0D3B(%corner_standl_pain_a_2_alert); + var_02 = 1; + break; + + case "cover_left_stand_B": + func_0D3B(%corner_standl_pain_b_2_alert); + var_02 = 1; + break; + + case "cover_crouch": + var_01 = []; + func_0D3A(var_7B); + var_01 = 1; + break; + var_7B[var_7B.size] + %covercrouch_pain_left_3 + var_7B[var_7B.size] + %covercrouch_pain_front + var_7B[var_01.size] + %covercrouch_pain_right + break; + + case "cover_stand": + var_01 = []; + func_0D3A(var_7B); + var_01 = 1; + break; + var_7B[var_7B.size] + %coverstand_pain_leg + var_7B[var_01.size] + %coverstand_pain_groin + break; + + case "cover_stand_aim": + var_01 = []; + func_0D3A(var_7B); + var_01 = 1; + break; + var_7B[var_7B.size] + %coverstand_pain_aim_2_hide_02 + var_7B[var_01.size] + %coverstand_pain_aim_2_hide_01 + break; + + case "cover_crouch_aim": + func_0D3B(%covercrouch_pain_aim_2_hide_01); + var_02 = 1; + break; + + case "saw": + if(self.a.pose == "stand") + { + var_03 = %saw_gunner_pain; + } + else if(self.a.pose == "crouch") + { + var_03 = %saw_gunner_lowwall_pain_02; + } + else + { + var_03 = %saw_gunner_prone_pain; + } + + self setflaggedanimknob("painanim",var_03,1,0.3,1); + animscripts/shared::donotetracks("painanim"); + var_01 = 1; + break; + + case "mg42": + func_0D3C(self.a.pose); + var_02 = 1; + break; + + case "minigun": + var_02 = 0; + break; + + case "corner_right_martyrdom": + var_02 = func_0D70(); + break; + + case "rambo": + case "rambo_right": + case "rambo_left": + case "dying_crawl": + var_02 = 0; + break; + + default: + var_02 = 0; + break; + } + + return var_01; +} + +//Function Number: 17 +func_0D39() +{ + self endon("death"); + wait 0.05; + self notify("pain_death"); +} + +//Function Number: 18 +func_0D3A(param_00) +{ + var_01 = param_00[randomint(param_00.size)]; + self setflaggedanimknob("painanim",var_01,1,0.3,1); + animscripts/shared::donotetracks("painanim"); +} + +//Function Number: 19 +func_0D3B(param_00) +{ + self setflaggedanimknob("painanim",param_00,1,0.3,1); + animscripts/shared::donotetracks("painanim"); +} + +//Function Number: 20 +func_0D3C(param_00) +{ + self setflaggedanimknob("painanim",level.mg_animmg["pain_" + param_00],1,0.1,1); + animscripts/shared::donotetracks("painanim"); +} + +//Function Number: 21 +func_0D3E(param_00,param_01) +{ + self endon("killanimscript"); + self endon("death"); + if(isdefined(param_01)) + { + self endon(param_01); + } + + wait param_00; + self.a.movement = "stop"; +} + +//Function Number: 22 +func_0D3F() +{ + if(self.a.disablelongdeath || self.diequietly || self.damageshield) + { + return 0; + } + + if(self.var_786 != "none") + { + return 0; + } + + if(isdefined(self.a.var_D29)) + { + return 0; + } + + var_00["prone"] = animscripts/utility::array(%dying_crawl_2_back); + self.a.var_D40 = var_7B[self.a.pose][randomint(var_7B[self.a.pose].size)]; + if(isdefined(self.forcelongdeath)) + { + self.health = 10; + thread func_0D4A(); + self waittill(animscripts/utility::array(%dying_stand_2_back_v1,%dying_stand_2_back_v2),var_7B["stand"],animscripts/utility::array(%dying_crouch_2_back),var_7B["crouch"],"killanimscript"); + return 1; + } + + if(!func_0D46(self.a.var_D40)) + { + return 0; + } + + if(self.health > 100) + { + return 0; + } + + var_01 = animscripts/utility::func_D2F("left_leg_upper","left_leg_lower","right_leg_upper","right_leg_lower","left_foot","right_foot"); + if(var_01 && self.health < self.maxhealth * 0.4) + { + if(gettime() < level.var_D42) + { + return 0; + } + } + else + { + if(level.var_D43 > 0) + { + return 0; + } + + if(gettime() < level.var_D44) + { + return 0; + } + } + + if(isdefined(self.deathfunction)) + { + return 0; + } + + foreach(var_03 in level.players) + { + if(distance(self.origin,var_03.origin) < 175) + { + return 0; + } + } + + if(animscripts/utility::func_D2F("head","helmet","gun","right_hand","left_hand")) + { + return 0; + } + + if(animscripts/utility::func_C95()) + { + return 0; + } + + anim.var_D44 = gettime() + 3000; + anim.var_D42 = gettime() + 3000; + thread func_0D4A(); + self waittill("killanimscript"); + return 1; +} + +//Function Number: 23 +func_0D46(param_00) +{ + if(isdefined(self.a.force_num_crawls)) + { + return 1; + } + + var_01 = getmovedelta(param_00,0,1); + var_02 = self localtoworldcoords(var_01); + return self maymovetopoint(var_02); +} + +//Function Number: 24 +func_0D48() +{ + self.a.array = []; + self.a.array["stand_2_crawl"] = animscripts/utility::array(%dying_stand_2_crawl_v1,%dying_stand_2_crawl_v2,%dying_stand_2_crawl_v3); + self.a.array["crouch_2_crawl"] = animscripts/utility::array(%dying_crouch_2_crawl); + self.a.array["crawl"] = %dying_crawl; + self.a.array["death"] = animscripts/utility::array(%dying_crawl_death_v1,%dying_crawl_death_v2); + self.a.array["back_idle"] = %dying_back_idle; + self.a.array["back_idle_twitch"] = animscripts/utility::array(%dying_back_twitch_a,%dying_back_twitch_b); + self.a.array["back_crawl"] = %dying_crawl_back; + self.a.array["back_fire"] = %dying_back_fire; + self.a.array["back_death"] = animscripts/utility::array(%dying_back_death_v1,%dying_back_death_v2,%dying_back_death_v3); + if(isdefined(self.crawlingpainanimoverridefunc)) + { + [[ self.crawlingpainanimoverridefunc ]](); + } +} + +//Function Number: 25 +func_0D4A() +{ + self endon("kill_long_death"); + self endon("death"); + func_0D48(); + thread func_0D67("crawling"); + self.a.var_D19 = "none"; + self.var_D4B = undefined; + thread func_0D39(); + level notify("ai_crawling",self); + thread func_0D51(); + self setanimknoball(%dying,%body,1,0.1,1); + if(!func_0D53()) + { + return; + } + + self setflaggedanimknob("transition",self.a.var_D40,1,0.5,1); + animscripts/notetracks::func_D4C("transition",::func_0D5E); + self.a.var_D19 = "dying_crawl"; + thread func_0D5A(); + if(isdefined(self.enemy)) + { + self setlookatentity(self.enemy); + } + + func_0D6D(); + while(func_0D6F()) + { + var_00 = animscripts/utility::func_D4D("back_crawl"); + if(!func_0D46(var_00)) + { + break; + } + + self setflaggedanimknobrestart("back_crawl",var_00,1,0.1,1); + animscripts/notetracks::func_D4C("back_crawl",::func_0D5E); + } + + self.var_D4E = gettime() + randomintrange(4000,20000); + while(func_0D52()) + { + if(animscripts/utility::func_CE3() && func_0D60()) + { + var_01 = animscripts/utility::func_D4D("back_fire"); + self setflaggedanimknobrestart("back_idle_or_fire",var_01,1,0.2,1); + animscripts/shared::donotetracks("back_idle_or_fire"); + continue; + } + + var_01 = animscripts/utility::func_D4D("back_idle"); + if(randomfloat(1) < 0.4) + { + var_01 = animscripts/utility::func_CA8("back_idle_twitch"); + } + + self setflaggedanimknobrestart("back_idle_or_fire",var_01,1,0.1,1); + var_02 = getanimlength(var_01); + while(var_02 > 0) + { + if(animscripts/utility::func_CE3() && func_0D60()) + { + break; + } + + var_03 = 0.5; + if(var_03 > var_02) + { + var_03 = var_02; + var_02 = 0; + continue; + } + + var_02 = var_02 - var_03; + animscripts/notetracks::func_D4F(var_03,"back_idle_or_fire"); + } + } + + self notify("end_dying_crawl_back_aim"); + self clearanim(%dying_back_aim_4_wrapper,0.3); + self clearanim(%dying_back_aim_6_wrapper,0.3); + self.deathanim = animscripts/utility::func_CA8("back_death"); + func_0D79(); + self.a.var_D19 = "none"; + self.var_D4B = undefined; +} + +//Function Number: 26 +func_0D51() +{ + if(self.team == "allies") + { + return; + } + + self endon("end_dying_crawl_back_aim"); + self waittill("death",var_00,var_01); + if(!isdefined(self) || !isdefined(var_00) || !isplayer(var_00)) + { + } +} + +//Function Number: 27 +func_0D52() +{ + if(!func_0D66(anglestoforward(self.angles))) + { + return 0; + } + + return gettime() < self.var_D4E; +} + +//Function Number: 28 +func_0D53() +{ + if(!isdefined(self.forcelongdeath)) + { + if(self.a.pose == "prone") + { + return 1; + } + + if(self.a.movement == "stop") + { + if(randomfloat(1) < 0.4) + { + if(randomfloat(1) < 0.5) + { + return 1; + } + } + else if(abs(self.var_723) > 90) + { + return 1; + } + } + else if(abs(self getmotionangle()) > 90) + { + return 1; + } + } + + if(self.a.pose != "prone") + { + var_00 = animscripts/utility::func_CA8(self.a.pose + "_2_crawl"); + if(!func_0D46(var_00)) + { + return 1; + } + + thread func_0D57(); + self setflaggedanimknob("falling",var_00,1,0.5,1); + animscripts/shared::donotetracks("falling"); + } + else + { + thread func_0D57(); + } + + self.a.var_D40 = %dying_crawl_2_back; + self.a.var_D19 = "dying_crawl"; + func_0D6D(); + while(func_0D6F()) + { + var_01 = animscripts/utility::func_D4D("crawl"); + if(!func_0D46(var_01)) + { + return 1; + } + + if(isdefined(self.var_D54)) + { + self playsound(self.var_D54); + } + + self setflaggedanimknobrestart("crawling",var_01,1,0.1,1); + animscripts/shared::donotetracks("crawling"); + } + + self notify("done_crawling"); + if(!isdefined(self.forcelongdeath) && func_0D66(anglestoforward(self.angles) * -1)) + { + return 1; + } + + var_02 = animscripts/utility::func_CA8("death"); + if(var_02 != %dying_crawl_death_v2) + { + self.a.var_D55 = 1; + } + + animscripts/death::func_D56(var_02); + func_0D79(); + self.a.var_D19 = "none"; + self.var_D4B = undefined; + return 0; +} + +//Function Number: 29 +func_0D57() +{ + self endon("death"); + if(self.a.pose != "prone") + { + for(;;) + { + self waittill("falling",var_00); + if(issubstr(var_00,"bodyfall")) + { + break; + } + } + } + + var_01 = "J_SpineLower"; + var_02 = "tag_origin"; + var_03 = 0.25; + var_04 = level._effect["crawling_death_blood_smear"]; + if(isdefined(self.a.crawl_fx_rate)) + { + var_03 = self.a.crawl_fx_rate; + } + + if(isdefined(self.a.crawl_fx)) + { + var_04 = level._effect[self.a.crawl_fx]; + } + + while(var_03) + { + var_05 = self gettagorigin(var_01); + var_06 = self gettagangles(var_02); + var_07 = anglestoright(var_06); + var_08 = anglestoforward((270,0,0)); + playfx(var_04,var_05,var_08,var_07); + wait var_03; + } +} + +//Function Number: 30 +func_0D5A() +{ + self endon("kill_long_death"); + self endon("death"); + self endon("end_dying_crawl_back_aim"); + if(isdefined(self.var_D5B)) + { + return; + } + + self.var_D5B = 1; + self setanimlimited(%dying_back_aim_4,1,0); + self setanimlimited(%dying_back_aim_6,1,0); + var_00 = 0; + for(;;) + { + var_01 = animscripts/utility::func_D5C(); + var_02 = angleclamp180(var_01 - var_00); + if(abs(var_02) > 3) + { + var_02 = common_scripts\utility::sign(var_02) * 3; + } + + var_01 = angleclamp180(var_00 + var_02); + if(var_01 < 0) + { + if(var_01 < -45) + { + var_01 = -45; + } + + var_03 = var_01 / -45; + self setanim(%dying_back_aim_4_wrapper,var_03,0.05); + self setanim(%dying_back_aim_6_wrapper,0,0.05); + } + else + { + if(var_01 > 45) + { + var_01 = 45; + } + + var_03 = var_01 / 45; + self setanim(%dying_back_aim_6_wrapper,var_03,0.05); + self setanim(%dying_back_aim_4_wrapper,0,0.05); + } + + var_00 = var_01; + wait 0.05; + } +} + +//Function Number: 31 +func_0D5D() +{ + self endon("kill_long_death"); + self endon("death"); + wait 0.5; + thread func_0D5A(); +} + +//Function Number: 32 +func_0D5E(param_00) +{ + if(param_00 == "fire_spray") + { + if(!animscripts/utility::func_CE3()) + { + return 1; + } + + if(!func_0D60()) + { + return 1; + } + + animscripts/utility::func_D5F(); + return 1; + } + else if(param_00 == "pistol_pickup") + { + thread func_0D5D(); + return 0; + } + + return 0; +} + +//Function Number: 33 +func_0D60() +{ + var_00 = self.enemy getshootatpos(); + var_01 = self getmuzzleangle(); + var_02 = vectortoangles(var_00 - self getmuzzlepos()); + var_03 = animscripts/utility::func_D61(var_01[1] - var_02[1]); + if(var_03 > level.var_D62) + { + if(distancesquared(self geteye(),var_00) > level.var_D63 || var_03 > level.var_D64) + { + return 0; + } + } + + return animscripts/utility::func_D61(var_01[0] - var_02[0]) <= level.var_D65; +} + +//Function Number: 34 +func_0D66(param_00) +{ + if(!isdefined(self.enemy)) + { + return 0; + } + + var_01 = vectornormalize(self.enemy getshootatpos() - self geteye()); + return vectordot(var_01,param_00) > 0.5; +} + +//Function Number: 35 +func_0D67(param_00) +{ + self endon("kill_long_death"); + self endon("death"); + self.flashbangimmunity = 1; + self.var_D0F = 1; + self.a.doinglongdeath = 1; + self notify("long_death"); + self.health = 10000; + self.threatbias = self.threatbias - 2000; + wait 0.75; + if(self.health > 1) + { + self.health = 1; + } + + wait 0.05; + self.var_D0F = undefined; + self.a.var_D6A = 1; + if(param_00 == "crawling") + { + wait 1; + if(isdefined(level.player) && distancesquared(self.origin,level.player.origin) < 1048576) + { + anim.var_D43 = randomintrange(10,30); + anim.var_D44 = gettime() + randomintrange(15000,-5536); + } + else + { + anim.var_D43 = randomintrange(5,12); + anim.var_D44 = gettime() + randomintrange(5000,25000); + } + + anim.var_D42 = gettime() + randomintrange(7000,13000); + return; + } + + if(param_00 == "corner_grenade") + { + wait 1; + if(isdefined(level.player) && distancesquared(self.origin,level.player.origin) < 490000) + { + anim.var_D6B = randomintrange(10,30); + anim.var_D6C = gettime() + randomintrange(15000,-5536); + return; + } + + anim.var_D6B = randomintrange(5,12); + anim.var_D6C = gettime() + randomintrange(5000,25000); + return; + } +} + +//Function Number: 36 +func_0D6D() +{ + if(isdefined(self.a.force_num_crawls)) + { + self.a.var_D6E = self.a.force_num_crawls; + return; + } + + self.a.var_D6E = randomintrange(1,5); +} + +//Function Number: 37 +func_0D6F() +{ + if(!self.a.var_D6E) + { + self.a.var_D6E = undefined; + return 0; + } + + self.a.var_D6E--; + return 1; +} + +//Function Number: 38 +func_0D70() +{ + if(level.var_D6B > 0) + { + return 0; + } + + if(gettime() < level.var_D6C) + { + return 0; + } + + if(self.a.disablelongdeath || self.diequietly || self.damageshield) + { + return 0; + } + + if(isdefined(self.deathfunction)) + { + return 0; + } + + if(distance(self.origin,level.player.origin) < 175) + { + return 0; + } + + anim.var_D6C = gettime() + 3000; + thread func_0D71(); + self waittill("killanimscript"); + return 1; +} + +//Function Number: 39 +func_0D71() +{ + self endon("kill_long_death"); + self endon("death"); + thread func_0D39(); + thread func_0D67("corner_grenade"); + thread maps\_utility::set_battlechatter(0); + self.threatbias = -1000; + self setflaggedanimknoballrestart("corner_grenade_pain",%corner_standr_death_grenade_hit,%body,1,0.1); + self waittillmatch("dropgun","corner_grenade_pain"); + animscripts/shared::func_D73(); + self waittillmatch("anim_pose = \"back\","corner_grenade_pain"); + animscripts/notetracks::func_D74(); + self waittillmatch("grenade_left","corner_grenade_pain"); + var_00 = getweaponmodel("fraggrenade"); + self attach(var_00,"tag_inhand"); + self.deathfunction = ::func_0D7D; + self waittillmatch("end","corner_grenade_pain"); + var_01 = gettime() + randomintrange(25000,-5536); + self setflaggedanimknoballrestart("corner_grenade_idle",%corner_standr_death_grenade_idle,%body,1,0.2); + thread func_0D80(); + while(!func_0D7B()) + { + if(gettime() >= var_01) + { + break; + } + + animscripts/notetracks::func_D4F(0.1,"corner_grenade_idle"); + } + + var_02 = %corner_standr_death_grenade_slump; + self setflaggedanimknoballrestart("corner_grenade_release",var_02,%body,1,0.2); + var_03 = getnotetracktimes(var_02,"grenade_drop"); + var_04 = var_03[0] * getanimlength(var_02); + wait var_04 - 1; + animscripts/death::playdeathsound(); + wait 0.7; + self.deathfunction = ::func_0D7F; + var_05 = (0,0,30) - anglestoright(self.angles) * 70; + func_0D76(var_05,randomfloatrange(2,3)); + wait 0.05; + self detach(var_00,"tag_inhand"); + thread func_0D78(); +} + +//Function Number: 40 +func_0D76(param_00,param_01) +{ + var_02 = self gettagorigin("tag_inhand"); + var_03 = var_02 + (0,0,20); + var_04 = var_02 - (0,0,20); + var_05 = bullettrace(var_03,var_04,0,undefined); + if(var_05["fraction"] < 0.5) + { + var_02 = var_05["position"]; + } + + var_06 = "default"; + if(var_05["surfacetype"] != "none") + { + var_06 = var_05["surfacetype"]; + } + + thread func_0D77("grenade_bounce_" + var_06,var_02); + self.grenadeweapon = "fraggrenade"; + self magicgrenademanual(var_02,param_00,param_01); +} + +//Function Number: 41 +func_0D77(param_00,param_01) +{ + var_02 = spawn("script_origin",param_01); + var_02 playsound(param_00,"sounddone"); + var_02 waittill("sounddone"); + var_02 delete(); +} + +//Function Number: 42 +func_0D78() +{ + self.a.var_D55 = 1; + func_0D79(); + self startragdoll(); + wait 0.1; + self notify("grenade_drop_done"); +} + +//Function Number: 43 +func_0D79() +{ + if(isdefined(self.last_dmg_player)) + { + self kill(self.origin,self.last_dmg_player); + return; + } + + self kill(); +} + +//Function Number: 44 +func_0D7B() +{ + if(!isdefined(self.enemy)) + { + return 0; + } + + if(distancesquared(self.origin,self.enemy.origin) > 147456) + { + return 0; + } + + if(distancesquared(self.origin,self.enemy.origin) < 16384) + { + return 1; + } + + var_00 = self.enemy.origin + self.var_D7C * 3; + var_01 = self.enemy.origin; + if(self.enemy.origin != var_00) + { + var_01 = pointonsegmentnearesttopoint(self.enemy.origin,var_00,self.origin); + } + + if(distancesquared(self.origin,var_01) < 16384) + { + return 1; + } + + return 0; +} + +//Function Number: 45 +func_0D7D() +{ + var_00 = animscripts/utility::array(%dying_back_death_v1,%dying_back_death_v2,%dying_back_death_v3,%dying_back_death_v4); + var_01 = var_00[randomint(var_00.size)]; + animscripts/death::playdeathsound(); + self setflaggedanimknoballrestart("corner_grenade_die",var_01,%body,1,0.2); + var_02 = animscripts/combat_utility::func_D7E(); + func_0D76(var_02,3); + var_03 = getweaponmodel("fraggrenade"); + self detach(var_03,"tag_inhand"); + wait 0.05; + self startragdoll(); + self waittillmatch("end","corner_grenade_die"); +} + +//Function Number: 46 +func_0D7F() +{ + self waittill("grenade_drop_done"); +} + +//Function Number: 47 +func_0D80() +{ + self endon("kill_long_death"); + self endon("death"); + self.var_D7C = (0,0,0); + var_00 = undefined; + var_01 = self.origin; + var_02 = 0.15; + for(;;) + { + if(isdefined(self.enemy) && isdefined(var_00) && self.enemy == var_00) + { + var_03 = self.enemy.origin; + self.var_D7C = var_03 - var_01 * 1 / var_02; + var_01 = var_03; + } + else + { + if(isdefined(self.enemy)) + { + var_01 = self.enemy.origin; + } + else + { + var_01 = self.origin; + } + + var_00 = self.enemy; + self.var_D81 = (0,0,0); + } + + wait var_02; + } +} + +//Function Number: 48 +func_0D82(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + self endon("death"); + if(!isdefined(self)) + { + return; + } + + if(isdefined(self.var_D83)) + { + return; + } + + if(param_00 < self.minpaindamage) + { + return; + } + + self.var_D83 = 1; + var_07 = animscripts/utility::array(%pain_add_standing_belly,%pain_add_standing_left_arm,%pain_add_standing_right_arm); + var_08 = %pain_add_standing_belly; + if(animscripts/utility::func_D2F("left_arm_lower","left_arm_upper","left_hand")) + { + var_08 = %pain_add_standing_left_arm; + } + + if(animscripts/utility::func_D2F("right_arm_lower","right_arm_upper","right_hand")) + { + var_08 = %pain_add_standing_right_arm; + } + else if(animscripts/utility::func_D2F("left_leg_upper","left_leg_lower","left_foot")) + { + var_08 = %pain_add_standing_left_leg; + } + else if(animscripts/utility::func_D2F("right_leg_upper","right_leg_lower","right_foot")) + { + var_08 = %pain_add_standing_right_leg; + } + else + { + var_08 = var_07[randomint(var_07.size)]; + } + + self setanimlimited(%add_pain,1,0.1,1); + self setanimlimited(var_08,1,0,1); + wait 0.4; + self clearanim(var_08,0.2); + self clearanim(%add_pain,0.2); + self.var_D83 = undefined; +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/reactions.gsc b/MW3/PC/SP/animscripts/reactions.gsc new file mode 100644 index 0000000..01ec290 --- /dev/null +++ b/MW3/PC/SP/animscripts/reactions.gsc @@ -0,0 +1,284 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\reactions.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 11 + * Decompile Time: 182 ms + * Timestamp: 10/27/2023 2:18:36 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self endon("killanimscript"); + animscripts/utility::func_D15("reactions"); + func_0F2C(); +} + +//Function Number: 2 +func_0F1C() +{ + anim.var_F1D = []; + level.var_F1D[level.var_F1D.size] = %run_react_duck; + level.var_F1D[level.var_F1D.size] = %run_react_flinch; + level.var_F1D[level.var_F1D.size] = %run_react_stumble; + anim.var_F1E = 0; + anim.var_F1F = []; + level.var_F1F["cover_stand"] = animscripts/utility::array(%stand_cover_reaction_a,%stand_cover_reaction_b); + level.var_F1F["cover_crouch"] = animscripts/utility::array(%crouch_cover_reaction_a,%crouch_cover_reaction_b); + level.var_F1F["cover_left"] = animscripts/utility::array(%cornerstndl_react_a); + level.var_F1F["cover_right"] = animscripts/utility::array(%cornerstndr_react_a); +} + +//Function Number: 3 +func_0F20() +{ + thread func_0F27(); +} + +//Function Number: 4 +func_0F21() +{ + return !isdefined(self.var_F22) || gettime() - self.var_F22 > 2000; +} + +//Function Number: 5 +func_0F23() +{ + self endon("killanimscript"); + self.var_F22 = gettime(); + self.a.movement = "stop"; + var_00 = isdefined(self.var_F24) && distancesquared(self.origin,self.var_F24.origin) < 160000; + self animmode("gravity"); + self orientmode("face current"); + if(var_00 || common_scripts\utility::cointoss()) + { + self clearanim(%root,0.1); + var_01 = []; + var_02 = var_7B[randomint(var_7B.size)]; + if(var_01) + { + var_03 = 1 + randomfloat(0.5); + } + else + { + var_03 = 0.2 + randomfloat(0.5); + } + + self setflaggedanimknobrestart("reactanim",var_02,1,0.1,1); + animscripts/notetracks::func_D4F(var_03,"reactanim"); + self clearanim(%root,0.1); + if(!var_01 && self.var_786 == "none" && !isdefined(self.var_F25)) + { + var_04 = 1 + randomfloat(0.2); + var_05 = animscripts/utility::func_F26(%exposed_dive_grenade_b,%exposed_dive_grenade_f); + self setflaggedanimknobrestart("dive",var_05,1,0.1,var_04); + animscripts/shared::donotetracks("dive"); + } + } + else + { + wait randomfloat(0.2); + var_04 = 1.2 + randomfloat(0.3); + if(self.a.pose == "stand") + { + self clearanim(%root,0.1); + self setflaggedanimknobrestart("crouch",%exposed_stand_2_crouch,1,0.1,var_04); + animscripts/shared::donotetracks("crouch"); + } + + var_06 = anglestoforward(self.angles); + if(isdefined(self.var_F24)) + { + var_07 = vectornormalize(self.var_F24.origin - self.origin); + } + else + { + var_07 = var_07; + } + + if(vectordot(var_07,var_06) > 0) + { + var_08 = animscripts/utility::func_F26(%exposed_crouch_idle_twitch_v2,%exposed_crouch_idle_twitch_v3); + self clearanim(%root,0.1); + self setflaggedanimknobrestart("twitch",var_08,1,0.1,1); + animscripts/shared::donotetracks("twitch"); + } + else + { + var_09 = animscripts/utility::func_F26(%exposed_crouch_turn_180_left,%exposed_crouch_turn_180_right); + self clearanim(%root,0.1); + self setflaggedanimknobrestart("turn",var_09,1,0.1,1); + animscripts/shared::donotetracks("turn"); + } + } + + self clearanim(%root,0.1); + self.var_F24 = undefined; + self animmode("normal"); + self orientmode("face default"); +} + +//Function Number: 6 +func_0F27() +{ + self endon("killanimscript"); + if(isdefined(self.disablebulletwhizbyreaction)) + { + return; + } + + for(;;) + { + self waittill("bulletwhizby",var_00); + if(!isdefined(var_00.team) || self.team == var_00.team) + { + continue; + } + + if(isdefined(self.var_CAF) || isdefined(self.var_CF1)) + { + continue; + } + + if(self.a.pose != "stand") + { + continue; + } + + if(!func_0F21()) + { + continue; + } + + self.var_F24 = var_00; + self animcustom(::func_0F23); + } +} + +//Function Number: 7 +func_0F28() +{ + self endon("killanimscript"); + wait 0.3; + self setlookatentity(); +} + +//Function Number: 8 +func_0F29() +{ + var_00 = undefined; + if(self nearclaimnodeandangle() && isdefined(level.var_F1F[self.var_788])) + { + var_01 = anglestoforward(self.node.angles); + var_02 = vectornormalize(self.var_731 - self.origin); + if(vectordot(var_01,var_02) < -0.5) + { + self orientmode("face current"); + var_03 = randomint(level.var_F1F[self.var_788].size); + var_00 = level.var_F1F[self.var_788][var_03]; + } + } + + if(!isdefined(var_00)) + { + var_04 = []; + if(isdefined(self.enemy) && distancesquared(self.enemy.origin,self.var_731) < 65536) + { + self orientmode("face enemy"); + } + else + { + self orientmode("face point",self.var_731); + } + + if(self.a.pose == "crouch") + { + var_02 = vectornormalize(self.var_731 - self.origin); + var_05 = anglestoforward(self.angles); + if(vectordot(var_05,var_02) < -0.5) + { + self orientmode("face current"); + var_7B[0] = %crouch_cover_reaction_a; + var_7B[1] = %crouch_cover_reaction_b; + } + } + + var_04 = var_7B[randomint(var_7B.size)]; + } + + return var_04; +} + +//Function Number: 9 +func_0F2A() +{ + self clearanim(%root,0.2); + if(randomint(4) < 3) + { + self orientmode("face enemy"); + self setflaggedanimknobrestart("reactanim",%exposed_idle_reactb,1,0.2,1); + var_00 = getanimlength(%exposed_idle_reactb); + animscripts/notetracks::func_D4F(var_00 * 0.8,"reactanim"); + self orientmode("face current"); + return; + } + + self orientmode("face enemy"); + self setflaggedanimknobrestart("reactanim",%exposed_backpedal,1,0.2,1); + var_00 = getanimlength(%exposed_backpedal); + animscripts/notetracks::func_D4F(var_00 * 0.8,"reactanim"); + self orientmode("face current"); + self clearanim(%root,0.2); + self setflaggedanimknobrestart("reactanim",%exposed_backpedal_v2,1,0.2,1); + animscripts/shared::donotetracks("reactanim"); +} + +//Function Number: 10 +func_0F2B() +{ + self endon("death"); + self endon("endNewEnemyReactionAnim"); + self.var_F22 = gettime(); + self.a.movement = "stop"; + if(isdefined(self._stealth) && self.var_74A != "combat") + { + func_0F2A(); + } + else + { + var_00 = func_0F29(); + self clearanim(%root,0.2); + self setflaggedanimknobrestart("reactanim",var_00,1,0.2,1); + animscripts/shared::donotetracks("reactanim"); + } + + self notify("newEnemyReactionDone"); +} + +//Function Number: 11 +func_0F2C() +{ + self endon("death"); + if(isdefined(self.var_F2D)) + { + return; + } + + if(!func_0F21()) + { + return; + } + + if(self.a.pose == "prone" || isdefined(self.a.var_D29)) + { + return; + } + + self animmode("gravity"); + if(isdefined(self.enemy)) + { + func_0F2B(); + } +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/riotshield/riotshield.gsc b/MW3/PC/SP/animscripts/riotshield/riotshield.gsc new file mode 100644 index 0000000..6f99681 --- /dev/null +++ b/MW3/PC/SP/animscripts/riotshield/riotshield.gsc @@ -0,0 +1,738 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\riotshield\riotshield.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 28 + * Decompile Time: 478 ms + * Timestamp: 10/27/2023 2:17:19 AM +*******************************************************************/ + +//Function Number: 1 +func_3AB4() +{ + level.notetracks["detach shield"] = ::func_3AB5; + animscripts/init_move_transitions::func_2082(); + level.var_1164["riotshield"] = []; + level.var_1164["riotshield"][1] = %riotshield_run_approach_1; + level.var_1164["riotshield"][2] = %riotshield_run_approach_2; + level.var_1164["riotshield"][3] = %riotshield_run_approach_3; + level.var_1164["riotshield"][4] = %riotshield_run_approach_4; + level.var_1164["riotshield"][6] = %riotshield_run_approach_6; + level.var_1164["riotshield"][7] = undefined; + level.var_1164["riotshield"][8] = %riotshield_walk2crouch_8; + level.var_1164["riotshield"][9] = undefined; + level.var_1164["riotshield_crouch"] = []; + level.var_1164["riotshield_crouch"][1] = %riotshield_walk_approach_1; + level.var_1164["riotshield_crouch"][2] = %riotshield_walk_approach_2; + level.var_1164["riotshield_crouch"][3] = %riotshield_walk_approach_3; + level.var_1164["riotshield_crouch"][4] = %riotshield_walk_approach_4; + level.var_1164["riotshield_crouch"][6] = %riotshield_walk_approach_6; + level.var_1164["riotshield_crouch"][7] = undefined; + level.var_1164["riotshield_crouch"][8] = %riotshield_walk2crouch_8; + level.var_1164["riotshield_crouch"][9] = undefined; + var_00 = []; + for(var_01 = 0;var_01 < var_7B.size;var_01++ = "riotshield_crouch") + { + var_02 = var_7B[var_01]; + for(var_03 = 1;var_03 <= 9;var_03++ = var_7B[1]) + { + if(var_03 == 5) + { + continue; + } + + if(isdefined(level.var_1164[var_02][var_03])) + { + level.var_1186[var_02][var_03] = getmovedelta(level.var_1164[var_02][var_03],0,1); + } + } + } + + level.var_1187["riotshield_crouch"][1] = 45; + level.var_1187["riotshield_crouch"][2] = 0; + level.var_1187["riotshield_crouch"][3] = -45; + level.var_1187["riotshield_crouch"][4] = 90; + level.var_1187["riotshield_crouch"][6] = -90; + level.var_1187["riotshield_crouch"][8] = 180; + level.var_1187["riotshield"][1] = 45; + level.var_1187["riotshield"][2] = 0; + level.var_1187["riotshield"][3] = -45; + level.var_1187["riotshield"][4] = 90; + level.var_1187["riotshield"][6] = -90; + level.var_1187["riotshield"][8] = 180; + level.var_1166["riotshield"] = "crouch"; + level.var_1166["riotshield_crouch"] = "crouch"; + animscripts/combat_utility::func_238B(%riotshield_crouch_grenade_toss,(-3.20014,1.7098,55.6886)); +} + +//Function Number: 2 +func_3AB5(param_00,param_01) +{ + animscripts/shared::func_23C8(self.secondaryweapon); + self.secondaryweapon = "none"; + if(isalive(self)) + { + func_3AD4(); + } +} + +//Function Number: 3 +func_3AB6() +{ + if(self.a.pose == "crouch") + { + return "riotshield_crouch"; + } + + return "riotshield"; +} + +//Function Number: 4 +func_3AB7(param_00) +{ + return 1; +} + +//Function Number: 5 +func_3AB8() +{ + animscripts/shared::func_C9B(self.secondaryweapon,"left",0); + self initriotshieldhealth(self.secondaryweapon); + self.var_23C2 = 0; + thread func_3AD5(); + self.subclass = "riotshield"; + self.var_1193 = ::func_3AB6; + self.var_118E = ::func_3AB7; + self.var_1195 = 1; + self.var_1194 = 1; + self.pathrandompercent = 0; + self.interval = 0; + self.var_1089 = 1; + self.no_pistol_switch = 1; + self.dontshootwhilemoving = 1; + self.disablebulletwhizbyreaction = 1; + self.var_1106 = 1; + self.neversprintforvariation = 1; + self.combatmode = "no_cover"; + self.fixednode = 0; + self.maxfaceenemydist = 1500; + self.var_1143 = 1; + self.var_1017 = squared(256); + self.var_10D3 = 1; + self.var_23CD = 1; + if(level.gameskill < 1) + { + self.shieldbulletblocklimit = randomintrange(4,8); + } + else + { + self.shieldbulletblocklimit = randomintrange(8,12); + } + + self.var_3ABA = 0; + self.var_3ABB = 0; + self.walkdist = 500; + self.walkdistfacingmotion = 500; + self.grenadeawareness = 1; + self.var_772 = 0.5; + self.var_770 = 1; + self.a.var_113C = "crouch"; + self.minexposedgrenadedist = 400; + self.ignoresuppression = 1; + self.var_1010 = ::func_3ABD; + self.var_1026 = ::func_3ABE; + maps\_utility::disable_turnanims(); + maps\_utility::disable_surprise(); + maps\_utility::disable_cqbwalk(); + func_3AC9(); + if(level.gameskill < 1) + { + self.bullet_resistance = 30; + } + else + { + self.bullet_resistance = 40; + } + + maps\_utility::add_damage_function(::maps\_spawner::bullet_resistance); + maps\_utility::add_damage_function(::animscripts/pain::func_D82); +} + +//Function Number: 6 +func_3ABC() +{ + if(!animscripts/melee::func_102B()) + { + return 0; + } + + var_00 = getmovedelta(%riotshield_basha_attack,0,1); + var_01 = lengthsquared(var_00); + if(distancesquared(self.origin,self.melee.target.origin) < var_01) + { + return 1; + } + + animscripts/melee::func_102E(); + var_02 = 0.1; + var_03 = 1; + for(;;) + { + if(!animscripts/melee::func_102B()) + { + return 0; + } + + if(var_03) + { + self.a.pose = "stand"; + self setflaggedanimknoball("chargeanim",%riotshield_sprint,%body,1,0.2,1); + var_03 = 0; + } + + self orientmode("face point",self.melee.target.origin); + animscripts/notetracks::func_D4F(var_02,"chargeanim"); + var_04 = distancesquared(self.origin,self.melee.target.origin); + if(var_04 < var_01) + { + break; + } + + if(gettime() >= self.melee.var_1028) + { + return 0; + } + } + + return 1; +} + +//Function Number: 7 +func_3ABD() +{ + self animmode("zonly_physics"); + animscripts/melee::func_1027(); + for(;;) + { + if(!func_3ABC()) + { + self.var_101B = gettime() + 1500; + self.var_101C = self.melee.target; + break; + } + + animscripts/battlechatter_ai::func_B37(); + self orientmode("face point",self.melee.target.origin); + self setflaggedanimknoballrestart("meleeanim",%riotshield_bash_vs_player,%body,1,0.2,1); + self.melee.var_100E = 1; + if(!animscripts/melee::func_102A()) + { + animscripts/melee::func_1021(self.melee.target); + break; + } + + self animmode("none"); + } + + self animmode("none"); +} + +//Function Number: 8 +func_3ABE() +{ + var_00 = self.melee.target; + if(self.subclass == "riotshield" && var_00.subclass == "riotshield") + { + return 0; + } + + animscripts/melee::func_103C(); + var_01 = vectortoangles(var_00.origin - self.origin); + var_02 = angleclamp180(var_00.angles[1] - var_01[1]); + if(abs(var_02) > 100) + { + if(self.melee.winner) + { + if(self.subclass == "riotshield") + { + self.melee.animname = %riotshield_basha_attack; + var_00.melee.animname = %riotshield_basha_defend; + var_00.melee.var_1033 = %riotshield_basha_defend_survive; + } + else + { + self.melee.animname = %riotshield_bashb_defend; + var_00.melee.animname = %riotshield_bashb_attack; + } + } + else if(self.subclass == "riotshield") + { + self.melee.animname = %riotshield_bashb_attack; + var_00.melee.animname = %riotshield_bashb_defend; + } + else + { + self.melee.animname = %riotshield_basha_defend; + var_00.melee.animname = %riotshield_basha_attack; + } + } + else + { + return 0; + } + + self.melee.startpos = getstartorigin(var_00.origin,var_00.angles,self.melee.animname); + self.melee.var_103B = (var_00.angles[0],angleclamp180(var_00.angles[1] + 180),var_00.angles[2]); + self.lockorientation = 0; + var_00.lockorientation = 0; + return animscripts/melee::func_1013(); +} + +//Function Number: 9 +func_3ABF() +{ + if(isdefined(self.disableexits)) + { + return; + } + + self orientmode("face angle",self.angles[1]); + self animmode("zonly_physics",0); + if(self.a.pose == "crouch") + { + if(isdefined(self.sprint) || isdefined(self.var_3AC0)) + { + var_00 = %riotshield_crouch2stand; + } + else + { + var_00 = %riotshield_crouch2walk; + } + + var_01 = randomfloatrange(0.9,1.1); + self setflaggedanimknoballrestart("startmove",var_00,%body,1,0.1,var_01); + animscripts/shared::donotetracks("startmove"); + self clearanim(%riotshield_crouch2walk,0.5); + } + + if(isdefined(self.sprint) || isdefined(self.var_3AC0)) + { + self allowedstances("stand","crouch"); + self.a.pose = "stand"; + } + + self orientmode("face default"); + self animmode("normal",0); + thread func_3AC3(); +} + +//Function Number: 10 +func_3AC1() +{ + if(self.var_788 == "move" && self.a.pose == "crouch") + { + self clearanim(%root,0.2); + var_00 = randomfloatrange(0.9,1.1); + self animmode("zonly_physics"); + self setflaggedanimknoballrestart("endmove",%riotshield_walk2crouch_8,%body,1,0.2,var_00); + animscripts/shared::donotetracks("endmove"); + self animmode("normal"); + } + + self allowedstances("crouch"); +} + +//Function Number: 11 +func_3AC2() +{ + func_3AC1(); + self.pushable = 0; + thread func_3AC3(); +} + +//Function Number: 12 +func_3AC3() +{ + self endon("killanimscript"); + for(;;) + { + self waittill("bullet_hitshield"); + var_00 = gettime(); + if(var_00 - self.var_3ABB > 500) + { + self.var_3ABA = 0; + } + else + { + self.var_3ABA++; + } + + self.var_3ABB = var_00; + if(self.var_3ABA > self.shieldbulletblocklimit) + { + self dodamage(1,(0,0,0)); + } + + if(common_scripts\utility::cointoss()) + { + var_01 = %riotshield_reacta; + } + else + { + var_01 = %riotshield_reactb; + } + + self notify("new_hit_react"); + self setflaggedanimrestart("hitreact",var_01,1,0.1,1); + thread func_3AC4(); + } +} + +//Function Number: 13 +func_3AC4() +{ + self endon("killanimscript"); + self endon("new_hit_react"); + self waittillmatch("end","hitreact"); + self clearanim(%riotshield_react,0.1); +} + +//Function Number: 14 +func_3AC5() +{ + if(self.a.pose == "stand") + { + self clearanim(%root,0.2); + self setflaggedanimknoballrestart("trans",%riotshield_walk2crouch_8,%body,1,0.2,1.2); + animscripts/shared::donotetracks("trans"); + } + + if(isdefined(self.var_73C)) + { + var_00 = 1; + var_01 = self.var_73C.origin - self.origin; + if(isdefined(self.enemy)) + { + var_02 = self.enemy.origin - self.origin; + if(vectordot(var_01,var_02) < 0) + { + var_00 = 0; + } + } + + if(var_00) + { + var_03 = angleclamp180(self.angles[1] - vectortoyaw(var_01)); + if(!isdefined(self.var_F72)) + { + self.var_F72 = 55; + } + + while(abs(var_03) > self.var_F72) + { + if(!isdefined(self.a.array)) + { + animscripts/combat::func_1108(); + } + + if(!animscripts/combat::func_F73(var_03)) + { + break; + } + + var_03 = angleclamp180(self.angles[1] - vectortoyaw(var_01)); + } + } + } + + self setanimknoball(%riotshield_crouch_aim_5,%body,1,0.2,1); + self setflaggedanimknoballrestart("grenadecower",%riotshield_crouch_idle_add,%add_idle,1,0.2,self.var_10F7); + animscripts/shared::donotetracks("grenadecower"); +} + +//Function Number: 15 +func_3AC6() +{ + self notify("flashed"); + if(!isdefined(self.a.var_D29)) + { + var_00 = randomfloatrange(0.9,1.1); + self.var_772 = 1; + var_01 = []; + var_02 = var_7B[randomint(var_7B.size)]; + self setflaggedanimknoballrestart("flashanim",var_02,%body,1,0.1,var_01); + self.minpaindamage = 1000; + animscripts/shared::donotetracks("flashanim"); + } + else + { + wait 0.1; + } + + self.minpaindamage = 0; + if(isdefined(self.subclass) && self.subclass == "riotshield") + { + self.var_772 = 0.5; + } +} + +//Function Number: 16 +func_3AC7() +{ + self.a.pose = "crouch"; + if(animscripts/utility::func_C95()) + { + maps\_utility::forceuseweapon(self.primaryweapon,"primary"); + } + + if(!isdefined(self.a.var_D29)) + { + var_00 = randomfloatrange(0.8,1.15); + self.var_772 = 1; + if((self.var_723 < -120 || self.var_723 > 120) && isexplosivedamagemod(self.var_726)) + { + var_01 = []; + var_02 = var_7B[randomint(var_7B.size)]; + self setflaggedanimknoballrestart("painanim",var_02,%body,1,0.2,var_01); + self.minpaindamage = 1000; + } + else + { + self setflaggedanimknoballrestart("painanim",%riotshield_crouch_pain,%body,1,0.2,var_01); + } + + animscripts/shared::donotetracks("painanim"); + } + else + { + wait 0.1; + } + + self.minpaindamage = 0; + if(isdefined(self.subclass) && self.subclass == "riotshield") + { + self.var_772 = 0.5; + } +} + +//Function Number: 17 +func_3AC8() +{ + if(isdefined(self.a.var_D29) && self.a.pose == "crouch") + { + var_00 = []; + var_01 = var_7B[randomint(var_7B.size)]; + animscripts/death::func_D56(var_01); + return 1; + } + + if(self.var_788 == "pain" || self.var_788 == "flashed") + { + var_02 = randomint(2) == 0; + } + else + { + var_02 = 1; + } + + if(var_02) + { + if(common_scripts\utility::cointoss()) + { + var_01 = %riotshield_crouch_death; + } + else + { + var_01 = %riotshield_crouch_death_fallback; + } + + animscripts/death::func_D56(var_02); + return 1; + } + + self.a.pose = "crouch"; + return 0; +} + +//Function Number: 18 +func_3AC9() +{ + var_00 = []; + self.custommoveanimset["run"] = var_7B; + self.custommoveanimset["walk"] = var_7B; + self.custommoveanimset["cqb"] = var_7B; + self.var_C89 = []; + self.var_C89["crouch"] = %riotshield_crouch_aim_5; + self.var_C89["crouch_add"] = %riotshield_crouch_idle_add; + self.var_C89["stand"] = %riotshield_crouch_aim_5; + self.var_C89["stand_add"] = %riotshield_crouch_idle_add; + self.a.pose = "crouch"; + self allowedstances("crouch"); + var_7B = level.animsets.var_C78; + animscripts/animset::func_C81(var_7B); + animscripts/animset::func_C84(var_7B); + self.var_FBA = ::func_3ACB; + self.var_D18 = ::func_3AC7; + self.var_D4B = ::func_3AC8; + self.var_2095 = ::func_3AC6; + self.var_3ACA = ::func_3AC5; + self.custommovetransition = ::func_3ABF; + self.var_11A1 = 1; + common_scripts\utility::set_exception("exposed",::func_3AC2); +} + +//Function Number: 19 +func_3ACB(param_00) +{ + if(isdefined(self.var_73C)) + { + return "stand"; + } + + return animscripts/utility::func_10AF(param_00); +} + +//Function Number: 20 +riotshield_sprint_on() +{ + self.maxfaceenemydist = 128; + self.sprint = 1; + self orientmode("face default"); + self.lockorientation = 0; + self.walkdist = 32; + self.walkdistfacingmotion = 32; +} + +//Function Number: 21 +riotshield_fastwalk_on() +{ + self.maxfaceenemydist = 128; + self.var_3AC0 = 1; + self.walkdist = 32; + self.walkdistfacingmotion = 32; +} + +//Function Number: 22 +riotshield_sprint_off() +{ + self.maxfaceenemydist = 1500; + self.walkdist = 500; + self.walkdistfacingmotion = 500; + self.sprint = undefined; + self allowedstances("crouch"); +} + +//Function Number: 23 +riotshield_fastwalk_off() +{ + self.maxfaceenemydist = 1500; + self.walkdist = 500; + self.walkdistfacingmotion = 500; + self.var_3AC0 = undefined; + self allowedstances("crouch"); +} + +//Function Number: 24 +func_3AD0() +{ +} + +//Function Number: 25 +func_3AD1() +{ + if(self.script == "move") + { + self animcustom(::func_3AD0); + } + + self.custommovetransition = ::func_3AD2; +} + +//Function Number: 26 +func_3AD2() +{ + self.custommovetransition = ::func_3ABF; + self animmode("zonly_physics",0); + self orientmode("face current"); + if(!isdefined(self.var_3AD3) && isdefined(self.enemy) && vectordot(self.var_773,anglestoforward(self.angles)) < 0) + { + var_00 = %riotshield_crouch2walk_2flee; + } + else + { + var_00 = %riotshield_crouch2stand_shield_drop; + } + + var_01 = randomfloatrange(0.85,1.1); + self setflaggedanimknoball("fleeanim",var_00,%root,1,0.1,var_01); + animscripts/shared::donotetracks("fleeanim"); + self.maxfaceenemydist = 32; + self.lockorientation = 0; + self orientmode("face default"); + self animmode("normal",0); + animscripts/shared::donotetracks("fleeanim"); + self clearanim(var_00,0.2); + self.maxfaceenemydist = 128; +} + +//Function Number: 27 +func_3AD4() +{ + self.subclass = "regular"; + self.combatmode = "cover"; + self.var_1193 = undefined; + self.var_118E = undefined; + self.var_1195 = undefined; + self.var_1194 = undefined; + self.pathrandompercent = 0; + self.interval = 80; + self.var_1089 = undefined; + self.no_pistol_switch = undefined; + self.dontshootwhilemoving = undefined; + self.disablebulletwhizbyreaction = undefined; + self.var_1106 = undefined; + self.neversprintforvariation = undefined; + self.maxfaceenemydist = 128; + self.var_1143 = undefined; + self.var_1017 = undefined; + self.var_10D3 = undefined; + self.var_23CD = undefined; + self.pathenemyfightdist = 128; + self.pathenemylookahead = 128; + self.walkdist = 256; + self.walkdistfacingmotion = 64; + self.lockorientation = 0; + self.var_772 = 1; + self.var_770 = 0; + self.ignoresuppression = 0; + self.sprint = undefined; + self allowedstances("stand","crouch","prone"); + self.var_1010 = undefined; + self.var_1026 = undefined; + maps\_utility::enable_turnanims(); + self.bullet_resistance = undefined; + maps\_utility::remove_damage_function(::maps\_spawner::bullet_resistance); + maps\_utility::remove_damage_function(::animscripts/pain::func_D82); + animscripts/animset::func_C87(); + self.var_FBA = ::animscripts/utility::func_10AF; + self.var_D18 = undefined; + self.var_D4B = undefined; + self.var_2095 = undefined; + self.var_3ACA = undefined; + self.custommovetransition = undefined; + self.var_11A1 = undefined; + common_scripts\utility::clear_exception("exposed"); + common_scripts\utility::clear_exception("stop_immediate"); +} + +//Function Number: 28 +func_3AD5() +{ + self endon("death"); + self waittill("riotshield_damaged"); + self.var_23C3 = 1; + animscripts/shared::func_23C1(); + self.var_23C2 = 1; + animscripts/shared::func_23C4(); +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/run.gsc b/MW3/PC/SP/animscripts/run.gsc new file mode 100644 index 0000000..f4c6c76 --- /dev/null +++ b/MW3/PC/SP/animscripts/run.gsc @@ -0,0 +1,967 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\run.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 43 + * Decompile Time: 744 ms + * Timestamp: 10/27/2023 2:18:38 AM +*******************************************************************/ + +//Function Number: 1 +func_0FB9() +{ + var_00 = [[ self.var_FBA ]]("stand"); + switch(var_00) + { + case "stand": + if(animscripts/setposemovement::func_FBB()) + { + return; + } + + if(isdefined(self.run_overrideanim)) + { + animscripts/move::func_FBE(self.run_overrideanim,self.run_override_weights); + return; + } + + if(func_0FFD()) + { + return; + } + + if(func_0FF0()) + { + return; + } + + if(animscripts/utility::func_A69()) + { + func_0FDC(); + } + else + { + func_0FED(); + } + break; + + case "crouch": + if(animscripts/setposemovement::func_FBF()) + { + return; + } + + if(isdefined(self.crouchrun_combatanim)) + { + func_0FEE(); + } + else + { + func_0FEF(); + } + break; + + default: + if(animscripts/setposemovement::func_FC1()) + { + return; + } + + func_0FC5(); + break; + } +} + +//Function Number: 2 +func_0FC2() +{ + if(!isdefined(self.a.var_CA6)) + { + return %run_lowready_f; + } + + if(!self.var_781) + { + if(self.var_786 == "none" || abs(self getmotionangle()) > 45) + { + return animscripts/utility::func_FC3("move_f"); + } + } + + if(self.var_786 == "up") + { + return animscripts/utility::func_FC3("stairs_up"); + } + else if(self.var_786 == "down") + { + return animscripts/utility::func_FC3("stairs_down"); + } + + return animscripts/utility::func_FC3("straight"); +} + +//Function Number: 3 +func_0FC4() +{ + if(!isdefined(self.a.var_CA6)) + { + return %crouch_fastwalk_f; + } + + return animscripts/utility::func_FC3("crouch"); +} + +//Function Number: 4 +func_0FC5() +{ + self.a.movement = "run"; + self setflaggedanimknob("runanim",animscripts/utility::func_FC3("prone"),1,0.3,self.moveplaybackrate); + animscripts/notetracks::func_D4F(0.25,"runanim"); +} + +//Function Number: 5 +func_0FC7() +{ + if(!isdefined(self.var_FC8)) + { + self notify("stop_move_anim_update"); + self.var_FC9 = undefined; + self clearanim(%combatrun_backward,0.2); + self clearanim(%combatrun_right,0.2); + self clearanim(%combatrun_left,0.2); + self clearanim(%w_aim_2,0.2); + self clearanim(%w_aim_4,0.2); + self clearanim(%w_aim_6,0.2); + self clearanim(%w_aim_8,0.2); + self.var_FC8 = 1; + } +} + +//Function Number: 6 +func_0FCA() +{ + if(isdefined(self.var_FC8)) + { + self clearanim(%run_n_gun,0.2); + self.var_FC8 = undefined; + } + + return 0; +} + +//Function Number: 7 +func_0FC8(param_00) +{ + if(param_00) + { + var_01 = func_0FEC(0.2); + var_02 = var_01 < 0; + } + else + { + var_01 = 0; + var_02 = self.var_FCB < 0; + } + + var_03 = 1 - var_02; + var_04 = self.var_CA1; + var_05 = self.var_CA2; + var_06 = self.var_CA3; + if(!param_00 || squared(var_01) > var_04 * var_04) + { + self clearanim(%add_fire,0); + if(squared(self.var_FCB) < var_06 * var_06) + { + self.var_FCB = 0; + self.var_FC8 = undefined; + return 0; + } + else if(self.var_FCB > 0) + { + self.var_FCB = self.var_FCB - var_06; + } + else + { + self.var_FCB = self.var_FCB + var_06; + } + } + else + { + var_07 = var_01 / var_04; + var_08 = var_07 - self.var_FCB; + if(abs(var_08) < var_05 * 0.7) + { + self.var_FCB = var_07; + } + else if(var_08 > 0) + { + self.var_FCB = self.var_FCB + var_06; + } + else + { + self.var_FCB = self.var_FCB - var_06; + } + } + + func_0FC7(); + var_09 = abs(self.var_FCB); + if(var_09 > var_05) + { + var_0A = var_09 - var_05 / var_05; + var_0A = clamp(var_0A,0,1); + self clearanim(self.var_CA4["F"],0.2); + self setanimlimited(self.var_CA4["L"],1 - var_0A * var_02,0.2); + self setanimlimited(self.var_CA4["R"],1 - var_0A * var_03,0.2); + self setanimlimited(self.var_CA4["LB"],var_0A * var_02,0.2); + self setanimlimited(self.var_CA4["RB"],var_0A * var_03,0.2); + } + else + { + var_0A = clamp(var_0A / var_06,0,1); + self setanimlimited(self.var_CA4["F"],1 - var_0A,0.2); + self setanimlimited(self.var_CA4["L"],var_0A * var_02,0.2); + self setanimlimited(self.var_CA4["R"],var_0A * var_03,0.2); + if(var_05 < 1) + { + self clearanim(self.var_CA4["LB"],0.2); + self clearanim(self.var_CA4["RB"],0.2); + } + } + + self setflaggedanimknob("runanim",%run_n_gun,1,0.3,0.8); + self.a.var_FCC = gettime() + 500; + if(param_00 && isplayer(self.enemy)) + { + self updateplayersightaccuracy(); + } + + return 1; +} + +//Function Number: 8 +func_0FCD() +{ + func_0FC7(); + self setflaggedanimknob("runanim",%combatwalk_b,1,0.3,0.8); + if(isplayer(self.enemy)) + { + self updateplayersightaccuracy(); + } + + animscripts/notetracks::func_D4F(0.2,"runanim"); + thread func_0FE5(); + self clearanim(%combatwalk_b,0.2); +} + +//Function Number: 9 +func_0FCE() +{ + self endon("killanimscript"); + for(;;) + { + wait 0.2; + if(!isdefined(self.var_FCF)) + { + break; + } + + if(!isdefined(self.pathgoalpos) || distancesquared(self.pathgoalpos,self.origin) < squared(80)) + { + func_0FD0(); + self notify("interrupt_react_to_bullet"); + break; + } + } +} + +//Function Number: 10 +func_0FD0() +{ + self orientmode("face default"); + self.var_FCF = undefined; + self.var_FD1 = undefined; +} + +//Function Number: 11 +func_0F1D() +{ + self.var_FD2 = undefined; + self notify("end_face_enemy_tracking"); + self endon("interrupt_react_to_bullet"); + self.var_FCF = 1; + self orientmode("face motion"); + var_00 = randomint(level.var_F1D.size); + if(var_00 == level.var_F1E) + { + var_00 = var_00 + 1 % level.var_F1D.size; + } + + anim.var_F1E = var_00; + var_01 = level.var_F1D[var_00]; + self setflaggedanimknobrestart("reactanim",var_01,1,0.5); + thread func_0FCE(); + animscripts/shared::donotetracks("reactanim"); + func_0FD0(); +} + +//Function Number: 12 +func_0FD3() +{ + self.var_FD2 = undefined; + self notify("end_face_enemy_tracking"); + self.var_FCF = 1; + self orientmode("face motion"); + var_00 = randomint(self.var_FD4.size); + var_01 = self.var_FD4[var_00]; + self setflaggedanimknobrestart("reactanim",var_01,1,0.5); + thread func_0FCE(); + animscripts/shared::donotetracks("reactanim"); + func_0FD0(); +} + +//Function Number: 13 +func_0FD5() +{ + var_00 = undefined; + if(isdefined(self.var_73C)) + { + var_00 = animscripts/utility::func_FC3("sprint_short"); + } + + if(!isdefined(var_00)) + { + var_00 = animscripts/utility::func_FC3("sprint"); + } + + return var_00; +} + +//Function Number: 14 +func_0FD6() +{ + if(isdefined(self.sprint)) + { + return 1; + } + + if(isdefined(self.var_73C) && isdefined(self.enemy) && self.var_772 == 1) + { + return distancesquared(self.origin,self.enemy.origin) > 90000; + } + + return 0; +} + +//Function Number: 15 +func_0FD8() +{ + if(isdefined(self.neversprintforvariation)) + { + return 0; + } + + if(!self.var_781 || self.var_786 != "none") + { + return 0; + } + + var_00 = gettime(); + if(isdefined(self.var_FDA)) + { + if(var_00 < self.var_FDA) + { + return 1; + } + + if(var_00 - self.var_FDA < 6000) + { + return 0; + } + } + + if(!isdefined(self.enemy) || !issentient(self.enemy)) + { + return 0; + } + + if(randomint(100) < 25 && self lastknowntime(self.enemy) + 2000 > var_00) + { + self.var_FDA = var_00 + 2000 + randomint(1000); + return 1; + } + + return 0; +} + +//Function Number: 16 +func_0FDB() +{ + var_00 = self.moveplaybackrate; + if(self.var_775 && self.var_786 == "none" && self.var_774 < 300) + { + var_00 = var_00 * 0.75; + } + + return var_00; +} + +//Function Number: 17 +func_0FDC() +{ + var_00 = func_0FDB(); + self setanimknob(%combatrun,1,0.5,var_00); + var_01 = 0; + if(isdefined(self.var_FD1) && gettime() - self.var_FD1 < 100 && randomfloat(1) < self.a.var_FDD) + { + func_0FCA(); + func_0F1D(); + return; + } + + if(func_0FD6()) + { + self setflaggedanimknob("runanim",func_0FD5(),1,0.5); + var_01 = 1; + } + else if(isdefined(self.enemy) && animscripts/move::func_FDE()) + { + func_0FE3(); + if(!self.var_781) + { + thread func_0FE1(); + } + else if(self.var_CDA != "none" && !isdefined(self.norunngun)) + { + self notify("end_face_enemy_tracking"); + self.var_FD2 = undefined; + if(func_0FE9()) + { + var_01 = func_0FC8(1); + } + else if(func_0FEA()) + { + func_0FCD(); + return; + } + } + else if(isdefined(self.var_FCB) && self.var_FCB != 0) + { + var_01 = func_0FC8(0); + } + } + else if(isdefined(self.var_FCB) && self.var_FCB != 0) + { + var_01 = func_0FC8(0); + } + + if(!var_01) + { + func_0FCA(); + if(isdefined(self.var_FD1) && gettime() - self.var_FD1 < 100 && self.a.var_FDD != 0) + { + func_0F1D(); + return; + } + + if(func_0FD8()) + { + var_02 = animscripts/utility::func_FC3("sprint_short"); + } + else + { + var_02 = func_0FC2(); + } + + self setflaggedanimknoblimited("runanim",var_02,1,0.1,1,1); + func_0FF7(animscripts/utility::func_FC3("move_b"),animscripts/utility::func_FC3("move_l"),animscripts/utility::func_FC3("move_r"),self.var_FE0); + thread func_0FF8("run"); + } + + animscripts/notetracks::func_D4F(0.2,"runanim"); + thread func_0FE5(); +} + +//Function Number: 18 +func_0FE1() +{ + self notify("want_aim_while_moving"); + if(isdefined(self.var_FD2)) + { + return; + } + + self.var_FD2 = 1; + self endon("killanimscript"); + self endon("end_face_enemy_tracking"); + self setdefaultaimlimits(); + if(!isdefined(self.var_C82) || !isdefined(self.var_C82["walk_aims"])) + { + self setanimlimited(%walk_aim_2); + self setanimlimited(%walk_aim_4); + self setanimlimited(%walk_aim_6); + self setanimlimited(%walk_aim_8); + } + else + { + self setanimlimited(self.var_C82["walk_aims"]["walk_aim_2"]); + self setanimlimited(self.var_C82["walk_aims"]["walk_aim_4"]); + self setanimlimited(self.var_C82["walk_aims"]["walk_aim_6"]); + self setanimlimited(self.var_C82["walk_aims"]["walk_aim_8"]); + } + + animscripts/track::func_CAA(%w_aim_2,%w_aim_4,%w_aim_6,%w_aim_8); +} + +//Function Number: 19 +func_0FE2() +{ + self.var_FD2 = undefined; + self notify("end_face_enemy_tracking"); +} + +//Function Number: 20 +func_0FE3() +{ + self notify("want_shoot_while_moving"); + if(isdefined(self.var_FE4)) + { + return; + } + + self.var_FE4 = 1; + thread func_0FE6(); + thread func_0FE7(); +} + +//Function Number: 21 +func_0FE5() +{ + self endon("killanimscript"); + self endon("want_shoot_while_moving"); + self endon("want_aim_while_moving"); + wait 0.05; + self notify("end_shoot_while_moving"); + self notify("end_face_enemy_tracking"); + self.var_FE4 = undefined; + self.var_FD2 = undefined; + self.var_FC8 = undefined; +} + +//Function Number: 22 +func_0FE6() +{ + self endon("killanimscript"); + self endon("end_shoot_while_moving"); + animscripts/shoot_behavior::func_CD7("normal"); +} + +//Function Number: 23 +func_0FE7() +{ + self endon("killanimscript"); + self endon("end_shoot_while_moving"); + animscripts/move::func_FE8(); +} + +//Function Number: 24 +func_0D60() +{ + var_00 = self getmuzzleangle(); + var_01 = vectortoangles(self.enemy getshootatpos() - self getmuzzlepos()); + if(animscripts/utility::func_D61(var_00[1] - var_01[1]) > 15) + { + return 0; + } + + return animscripts/utility::func_D61(var_00[0] - var_01[0]) <= 20; +} + +//Function Number: 25 +func_0FE9() +{ + if((!isdefined(self.var_FCB) || self.var_FCB == 0) && abs(self getmotionangle()) > self.var_CA1) + { + return 0; + } + + return 1; +} + +//Function Number: 26 +func_0FEA() +{ + if(180 - abs(self getmotionangle()) >= 45) + { + return 0; + } + + var_00 = func_0FEC(0.2); + if(abs(var_00) > 30) + { + return 0; + } + + return 1; +} + +//Function Number: 27 +func_0FEB() +{ + return animscripts/move::func_FDE() && isdefined(self.enemy) && func_0FE9() || func_0FEA(); +} + +//Function Number: 28 +func_0FEC(param_00) +{ + var_01 = self.origin; + var_02 = self.angles[1] + self getmotionangle(); + var_01 = var_01 + (cos(var_02),sin(var_02),0) * length(self.velocity) * param_00; + var_03 = self.angles[1] - vectortoyaw(self.enemy.origin - var_01); + var_03 = angleclamp180(var_03); + return var_03; +} + +//Function Number: 29 +func_0FED() +{ + self endon("movemode"); + self clearanim(%combatrun,0.6); + var_00 = func_0FDB(); + self setanimknoball(%combatrun,%body,1,0.2,var_00); + if(func_0FD6()) + { + var_01 = func_0FD5(); + } + else + { + var_01 = func_0FC2(); + } + + if(self.var_786 == "none") + { + var_02 = 0.3; + } + else + { + var_02 = 0.1; + } + + self setflaggedanimknob("runanim",var_01,1,var_02,1,1); + func_0FF7(animscripts/utility::func_FC3("move_b"),animscripts/utility::func_FC3("move_l"),animscripts/utility::func_FC3("move_r")); + thread func_0FF8("run"); + animscripts/notetracks::func_D4F(0.2,"runanim"); +} + +//Function Number: 30 +func_0FEE() +{ + self endon("movemode"); + self setflaggedanimknoball("runanim",self.crouchrun_combatanim,%body,1,0.4,self.moveplaybackrate); + animscripts/shared::donotetracks("runanim"); +} + +//Function Number: 31 +func_0FEF() +{ + self endon("movemode"); + var_00 = func_0FC4(); + self setanimknob(var_00,1,0.4); + thread func_0FF9("crouchrun",var_00,%crouch_fastwalk_b,%crouch_fastwalk_l,%crouch_fastwalk_r); + self setflaggedanimknoball("runanim",%crouchrun,%body,1,0.2,self.moveplaybackrate); + animscripts/notetracks::func_D4F(0.2,"runanim"); +} + +//Function Number: 32 +func_0FF0() +{ + var_00 = isdefined(self.a.var_FCC) && self.a.var_FCC > gettime(); + var_00 = var_00 || isdefined(self.enemy) && distancesquared(self.origin,self.enemy.origin) < 65536; + if(var_00) + { + if(!animscripts/combat_utility::func_F08(0)) + { + return 0; + } + } + else if(!animscripts/combat_utility::func_F08(0.5)) + { + return 0; + } + + if(isdefined(self.var_73C)) + { + return 0; + } + + if(!self.var_781 || self.var_786 != "none") + { + return 0; + } + + if(isdefined(self.dontshootwhilemoving) || isdefined(self.var_FF2)) + { + return 0; + } + + if(func_0FEB() && !animscripts/combat_utility::func_F08(0)) + { + return 0; + } + + if(!isdefined(self.pathgoalpos) || distancesquared(self.origin,self.pathgoalpos) < 65536) + { + return 0; + } + + var_01 = angleclamp180(self getmotionangle()); + if(abs(var_01) > 25) + { + return 0; + } + + if(!animscripts/utility::func_EE3()) + { + return 0; + } + + if(!func_0FF6()) + { + return 0; + } + + func_0FF3(); + self notify("abort_reload"); + self orientmode("face default"); + return 1; +} + +//Function Number: 33 +func_0FF3() +{ + self endon("movemode"); + self orientmode("face motion"); + var_00 = "reload_" + animscripts/combat_utility::func_FF4(); + self setflaggedanimknoballrestart(var_00,%run_lowready_reload,%body,1,0.25); + self.var_FF5 = 1; + func_0FF7(animscripts/utility::func_FC3("move_b"),animscripts/utility::func_FC3("move_l"),animscripts/utility::func_FC3("move_r")); + thread func_0FF8("run"); + animscripts/shared::donotetracks(var_00); + self.var_FF5 = undefined; +} + +//Function Number: 34 +func_0FF6() +{ + var_00 = self getanimtime(%walk_and_run_loops); + var_01 = getanimlength(%run_lowready_f) / 3; + var_00 = var_00 * 3; + if(var_00 > 3) + { + var_00 = var_00 - 2; + } + else if(var_00 > 2) + { + var_00 = var_00 - 1; + } + + if(var_00 < 0.15 / var_01) + { + return 1; + } + + if(var_00 > 1 - 0.3 / var_01) + { + return 1; + } + + return 0; +} + +//Function Number: 35 +func_0FF7(param_00,param_01,param_02,param_03) +{ + if(!isdefined(param_03)) + { + param_03 = 1; + } + + self setanimknoblimited(param_00,1,0.1,param_03,1); + self setanimknoblimited(param_01,1,0.1,param_03,1); + self setanimknoblimited(param_02,1,0.1,param_03,1); +} + +//Function Number: 36 +func_0FF8(param_00) +{ + func_0FF9(param_00,%combatrun_forward,%combatrun_backward,%combatrun_left,%combatrun_right); +} + +//Function Number: 37 +func_0FF9(param_00,param_01,param_02,param_03,param_04) +{ + if(isdefined(self.var_FC9) && self.var_FC9 == param_00) + { + return; + } + + self notify("stop_move_anim_update"); + self.var_FC9 = param_00; + self.var_FFA = undefined; + self endon("killanimscript"); + self endon("move_interrupt"); + self endon("stop_move_anim_update"); + for(;;) + { + func_0FFB(param_01,param_02,param_03,param_04); + wait 0.05; + waittillframeend; + } +} + +//Function Number: 38 +func_0FFB(param_00,param_01,param_02,param_03) +{ + if(self.var_781 && !animscripts/utility::func_CB2() && !isdefined(self.var_FF5)) + { + if(!isdefined(self.var_FFA)) + { + self.var_FFA = 1; + self setanim(param_00,1,0.2,1,1); + self setanim(param_01,0,0.2,1,1); + self setanim(param_02,0,0.2,1,1); + self setanim(param_03,0,0.2,1,1); + return; + } + + return; + } + + self.var_FFA = undefined; + var_04 = animscripts/utility::func_FFC(self getmotionangle()); + if(isdefined(self.var_FF5)) + { + if(var_7B["front"] < 0.2) + { + } + } + + self setanim(param_01,var_7B["front"],0.2,1,1); + self setanim(param_02,var_7B["back"],0.2,1,1); + self setanim(param_03,var_7B["left"],0.2,1,1); + self setanim(var_04,var_7B["right"],0.2,1,1); +} + +//Function Number: 39 +func_0FFD() +{ + var_00 = isdefined(self.wantshotgun) && self.wantshotgun; + var_01 = animscripts/utility::func_CEA(self.weapon); + if(var_00 == var_01) + { + return 0; + } + + if(!isdefined(self.pathgoalpos) || distancesquared(self.origin,self.pathgoalpos) < 65536) + { + return 0; + } + + if(animscripts/utility::func_C95()) + { + return 0; + } + + if(self.weapon == self.primaryweapon) + { + if(!var_00) + { + return 0; + } + + if(animscripts/utility::func_CEA(self.secondaryweapon)) + { + return 0; + } + } + else + { + if(var_00) + { + return 0; + } + + if(animscripts/utility::func_CEA(self.primaryweapon)) + { + return 0; + } + } + + var_02 = angleclamp180(self getmotionangle()); + if(abs(var_02) > 25) + { + return 0; + } + + if(!func_0FF6()) + { + return 0; + } + + if(var_00) + { + func_1000("shotgunPullout",%shotgun_cqbrun_pullout,"gun_2_chest","none",self.secondaryweapon,"shotgun_pickup"); + } + else + { + func_1000("shotgunPutaway",%shotgun_cqbrun_putaway,"gun_2_back","back",self.primaryweapon,"shotgun_pickup"); + } + + self notify("switchEnded"); + return 1; +} + +//Function Number: 40 +func_1000(param_00,param_01,param_02,param_03,param_04,param_05) +{ + self endon("movemode"); + self setflaggedanimknoballrestart(param_00,param_01,%body,1,0.25); + self.var_FF5 = 1; + func_0FF7(animscripts/utility::func_FC3("move_b"),animscripts/utility::func_FC3("move_l"),animscripts/utility::func_FC3("move_r")); + thread func_0FF8("run"); + thread func_1003(param_00,param_02,param_03,param_04,param_05); + animscripts/notetracks::func_1001(getanimlength(param_01) - 0.25,param_00,::func_1002); + self.var_FF5 = undefined; +} + +//Function Number: 41 +func_1002(param_00) +{ + if(param_00 == "gun_2_chest" || param_00 == "gun_2_back") + { + return 1; + } +} + +//Function Number: 42 +func_1003(param_00,param_01,param_02,param_03,param_04) +{ + self endon("killanimscript"); + self endon("movemode"); + self endon("switchEnded"); + self waittillmatch(param_01,param_00); + animscripts/shared::func_C9B(self.weapon,param_02); + thread func_1004(param_03); + self waittillmatch(param_04,param_00); + self notify("complete_weapon_switch"); +} + +//Function Number: 43 +func_1004(param_00) +{ + self endon("death"); + common_scripts\utility::waittill_any("killanimscript","movemode","switchEnded","complete_weapon_switch"); + self.lastweapon = self.weapon; + animscripts/shared::func_C9B(param_00,"right"); + self.bulletsinclip = weaponclipsize(self.weapon); +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/scripted.gsc b/MW3/PC/SP/animscripts/scripted.gsc new file mode 100644 index 0000000..ef7f023 --- /dev/null +++ b/MW3/PC/SP/animscripts/scripted.gsc @@ -0,0 +1,60 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\scripted.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 45 ms + * Timestamp: 10/27/2023 2:18:39 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self endon("death"); + self notify("killanimscript"); + self notify("clearSuppressionAttack"); + self.a.var_20AB = 0; + self.var_3B66["root"] = %body; + self endon("end_sequence"); + self startscriptedanim(self.var_3B66["notifyName"],self.var_3B66["origin"],self.var_3B66["angles"],self.var_3B66["anim"],self.var_3B66["animMode"],self.var_3B66["root"]); + self.var_3B66 = undefined; + if(isdefined(self.var_3FE4) || isdefined(self.var_3FE5)) + { + animscripts/face::func_C46(self.var_3FE5,self.var_3FE4,0.9,"scripted_anim_facedone"); + self.var_3FE5 = undefined; + self.var_3FE4 = undefined; + } + + if(isdefined(self.var_3B67)) + { + self.var_3B68 = self.var_3B67; + } + + self waittill("killanimscript"); +} + +//Function Number: 2 +init(param_00,param_01,param_02,param_03,param_04,param_05) +{ + self.var_3B66["notifyName"] = param_00; + self.var_3B66["origin"] = param_01; + self.var_3B66["angles"] = param_02; + self.var_3B66["anim"] = param_03; + if(isdefined(param_04)) + { + self.var_3B66["animMode"] = param_04; + } + else + { + self.var_3B66["animMode"] = "normal"; + } + + if(isdefined(param_05)) + { + self.var_3B66["root"] = param_05; + return; + } + + self.var_3B66["root"] = %body; +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/setposemovement.gsc b/MW3/PC/SP/animscripts/setposemovement.gsc new file mode 100644 index 0000000..063d543 --- /dev/null +++ b/MW3/PC/SP/animscripts/setposemovement.gsc @@ -0,0 +1,967 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\setposemovement.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 55 + * Decompile Time: 837 ms + * Timestamp: 10/27/2023 2:18:41 AM +*******************************************************************/ + +//Function Number: 1 +func_10F1(param_00,param_01) +{ + if(param_00 == "") + { + if(self.a.pose == "prone" && param_01 == "walk" || param_01 == "run") + { + param_00 = "crouch"; + } + else + { + param_00 = self.a.pose; + } + } + + if(!isdefined(param_01) || param_01 == "") + { + param_01 = self.a.movement; + } + + [[ level.var_240E[param_00][param_01] ]](); +} + +//Function Number: 2 +func_20D9() +{ + level.var_240E["stand"]["stop"] = ::func_240F; + level.var_240E["stand"]["walk"] = ::func_1080; + level.var_240E["stand"]["run"] = ::func_0FBB; + level.var_240E["crouch"]["stop"] = ::func_2410; + level.var_240E["crouch"]["walk"] = ::func_1083; + level.var_240E["crouch"]["run"] = ::func_0FBF; + level.var_240E["prone"]["stop"] = ::func_2411; + level.var_240E["prone"]["walk"] = ::func_1084; + level.var_240E["prone"]["run"] = ::func_0FC1; +} + +//Function Number: 3 +func_240F() +{ + switch(self.a.pose) + { + case "stand": + switch(self.a.movement) + { + case "stop": + return 0; + + case "walk": + func_2414(); + break; + + default: + func_2416(); + break; + } + break; + + case "crouch": + switch(self.a.movement) + { + case "stop": + func_241C(); + break; + + case "walk": + func_2421(); + break; + + default: + func_2423(); + break; + } + break; + + default: + switch(self.a.movement) + { + case "stop": + func_242E(); + break; + + default: + func_242E(); + break; + } + break; + } + + return 1; +} + +//Function Number: 4 +func_1080() +{ + switch(self.a.pose) + { + case "stand": + switch(self.a.movement) + { + case "stop": + func_241A(); + break; + + case "walk": + return 0; + + default: + func_241A(); + break; + } + break; + + case "crouch": + switch(self.a.movement) + { + case "stop": + func_241F(); + break; + + case "walk": + func_241A(); + break; + + default: + func_241A(); + break; + } + break; + + default: + func_242F(); + break; + } + + return 1; +} + +//Function Number: 5 +func_0FBB() +{ + switch(self.a.pose) + { + case "stand": + switch(self.a.movement) + { + case "walk": + case "stop": + return func_2419(); + + default: + return 0; + } + break; + + case "crouch": + switch(self.a.movement) + { + case "stop": + return func_2425(); + + default: + return func_2419(); + } + break; + + default: + func_2428(); + break; + } + + return 1; +} + +//Function Number: 6 +func_2410() +{ + switch(self.a.pose) + { + case "stand": + switch(self.a.movement) + { + case "stop": + func_242B(); + break; + + case "walk": + func_2415(); + break; + + case "run": + func_2417(); + break; + + default: + break; + } + break; + + case "crouch": + switch(self.a.movement) + { + case "stop": + break; + + case "walk": + func_2420(); + break; + + case "run": + func_2422(); + break; + + default: + break; + } + break; + + case "prone": + func_242D(); + break; + + default: + break; + } +} + +//Function Number: 7 +func_1083() +{ + switch(self.a.pose) + { + case "stand": + switch(self.a.movement) + { + case "stop": + func_242A(); + break; + + case "walk": + func_242A(); + break; + + default: + func_242A(); + break; + } + break; + + case "crouch": + switch(self.a.movement) + { + case "stop": + func_241E(); + break; + + case "walk": + return 0; + + default: + func_242A(); + break; + } + break; + + default: + func_2429(); + break; + } + + return 1; +} + +//Function Number: 8 +func_0FBF() +{ + switch(self.a.pose) + { + case "stand": + switch(self.a.movement) + { + case "stop": + func_2426(); + break; + + default: + func_2426(); + break; + } + break; + + case "crouch": + switch(self.a.movement) + { + case "stop": + func_2424(); + break; + + case "walk": + func_2426(); + break; + + default: + return 0; + } + break; + + default: + func_2427(); + break; + } + + return 1; +} + +//Function Number: 9 +func_2411() +{ + switch(self.a.pose) + { + case "stand": + switch(self.a.movement) + { + case "stop": + func_2436(); + break; + + case "walk": + func_2436(); + break; + + case "run": + func_2439(); + break; + + default: + break; + } + break; + + case "crouch": + switch(self.a.movement) + { + case "stop": + func_2433(); + break; + + case "walk": + func_2433(); + break; + + case "run": + func_2439(); + break; + + default: + break; + } + break; + + case "prone": + switch(self.a.movement) + { + case "stop": + break; + + case "walk": + case "run": + func_2432(); + break; + + default: + break; + } + break; + + default: + break; + } +} + +//Function Number: 10 +func_1084() +{ + switch(self.a.pose) + { + case "stand": + switch(self.a.movement) + { + case "stop": + func_2437(); + break; + + default: + func_243B(); + break; + } + break; + + case "crouch": + switch(self.a.movement) + { + case "stop": + func_2434(); + break; + + default: + func_243B(); + break; + } + break; + + default: + switch(self.a.movement) + { + case "stop": + func_2431(); + break; + + default: + self.a.movement = "walk"; + return 0; + } + break; + } + + return 1; +} + +//Function Number: 11 +func_0FC1() +{ + switch(self.a.pose) + { + case "stand": + switch(self.a.movement) + { + case "stop": + func_2438(); + break; + + default: + func_243C(); + break; + } + break; + + case "crouch": + switch(self.a.movement) + { + case "stop": + func_2435(); + break; + + default: + func_243C(); + break; + } + break; + + default: + switch(self.a.movement) + { + case "stop": + func_2431(); + break; + + default: + self.a.movement = "run"; + return 0; + } + break; + } + + return 1; +} + +//Function Number: 12 +func_2412(param_00,param_01,param_02,param_03) +{ + var_04 = gettime() + param_01 * 1000; + if(isarray(param_00)) + { + param_00 = param_00[randomint(param_00.size)]; + } + + self setflaggedanimknoball("blendTransition",param_00,%body,1,param_01,1); + animscripts/notetracks::func_D4F(param_01 / 2,"blendTransition"); + self.a.pose = param_02; + self.a.movement = param_03; + var_05 = var_04 - gettime() / 1000; + if(var_05 < 0.05) + { + var_05 = 0.05; + } + + animscripts/notetracks::func_D4F(var_05,"blendTransition"); +} + +//Function Number: 13 +func_2413(param_00,param_01) +{ + func_243E(param_00,"stand","walk",param_01); +} + +//Function Number: 14 +func_2414() +{ + self.a.movement = "stop"; +} + +//Function Number: 15 +func_2415() +{ + func_2414(); + func_242B(); +} + +//Function Number: 16 +func_2416() +{ + self.a.movement = "stop"; +} + +//Function Number: 17 +func_2417() +{ + self.a.movement = "stop"; + self.a.pose = "crouch"; +} + +//Function Number: 18 +func_2418(param_00) +{ + var_01 = 0.3; + if(self.a.movement != "stop") + { + self endon("movemode"); + var_01 = 1; + } + + func_2412(param_00,var_01,"stand","run"); +} + +//Function Number: 19 +func_2419() +{ + if(!self.var_781) + { + self.a.movement = "run"; + self.a.pose = "stand"; + return 0; + } + + if(isdefined(self.run_overrideanim)) + { + func_2418(self.run_overrideanim); + return 1; + } + + var_00 = 0.1; + if(self.a.movement != "stop" && self.var_786 == "none") + { + var_00 = 0.5; + } + + if(isdefined(self.sprint)) + { + self setanimknoblimited(animscripts/utility::func_FC3("sprint"),1,var_00,1); + } + else + { + self setanimknoblimited(animscripts/run::func_FC2(),1,var_00,1); + } + + animscripts/run::func_FF7(animscripts/utility::func_FC3("move_b"),animscripts/utility::func_FC3("move_l"),animscripts/utility::func_FC3("move_r"),self.var_FE0); + thread animscripts/run::func_FF8("run"); + wait 0.05; + func_2418(%combatrun); + return 1; +} + +//Function Number: 20 +func_241A() +{ + if(self.a.movement != "stop") + { + self endon("movemode"); + } + + if(!isdefined(self.alwaysrunforward) && self.a.pose != "prone") + { + animscripts/run::func_FF7(animscripts/utility::func_FC3("move_b"),animscripts/utility::func_FC3("move_l"),animscripts/utility::func_FC3("move_r")); + } + + self.a.pose = "stand"; + self.a.movement = "walk"; +} + +//Function Number: 21 +func_241C() +{ + var_00 = 1; + if(isdefined(self.var_241D)) + { + var_00 = 1.8; + self.var_241D = undefined; + } + + if(animscripts/utility::func_C95()) + { + func_243E(%pistol_crouchaimstraight2stand,"stand","stop",undefined,var_00); + return; + } + + animscripts/utility::func_10F0(); + func_243E(%crouch2stand,"stand","stop",undefined,var_00); +} + +//Function Number: 22 +func_241E() +{ + func_242A(); +} + +//Function Number: 23 +func_241F() +{ + func_241E(); + func_241A(); +} + +//Function Number: 24 +func_2420() +{ + self.a.movement = "stop"; +} + +//Function Number: 25 +func_2421() +{ + func_2420(); + func_241C(); +} + +//Function Number: 26 +func_2422() +{ + self.a.movement = "stop"; +} + +//Function Number: 27 +func_2423() +{ + func_2422(); + func_241C(); +} + +//Function Number: 28 +func_2424() +{ + func_2426(); +} + +//Function Number: 29 +func_2425() +{ + return func_2419(); +} + +//Function Number: 30 +func_2426() +{ + if(isdefined(self.crouchrun_combatanim)) + { + func_2412(self.crouchrun_combatanim,0.6,"crouch","run"); + return; + } + + self setanimknob(%crouchrun,1,0.4,self.moveplaybackrate); + thread animscripts/run::func_FF9("crouchrun",animscripts/utility::func_FC3("crouch"),animscripts/utility::func_FC3("crouch_b"),animscripts/utility::func_FC3("crouch_l"),animscripts/utility::func_FC3("crouch_r")); + wait 0.05; + func_2412(%crouchrun,0.4,"crouch","run"); +} + +//Function Number: 31 +func_2427() +{ + self orientmode("face current"); + animscripts/utility::func_F7D(1); + func_2441(0.2); + animscripts/cover_prone::func_10E2(0.1); + func_243E(%prone_2_crouch,"crouch","run",animscripts/run::func_FC4()); +} + +//Function Number: 32 +func_2428() +{ + func_2427(); + func_2419(); +} + +//Function Number: 33 +func_2429() +{ + func_2427(); + func_242A(); +} + +//Function Number: 34 +func_242A() +{ + if(isdefined(self.crouchrun_combatanim)) + { + self setanimknoball(self.crouchrun_combatanim,%body,1,0.4); + func_2412(self.crouchrun_combatanim,0.6,"crouch","walk"); + self notify("BlendIntoCrouchWalk"); + return; + } + + self setanimknob(%crouchrun,1,0.4,self.moveplaybackrate); + thread animscripts/run::func_FF9("crouchrun",animscripts/utility::func_FC3("crouch"),animscripts/utility::func_FC3("crouch_b"),animscripts/utility::func_FC3("crouch_l"),animscripts/utility::func_FC3("crouch_r")); + wait 0.05; + func_2412(%crouchrun,0.4,"crouch","run"); +} + +//Function Number: 35 +func_242B() +{ + animscripts/utility::func_10F0(); + var_00 = 1; + if(isdefined(self.var_242C)) + { + var_00 = 1.8; + self.var_242C = undefined; + } + + func_243E(%exposed_stand_2_crouch,"crouch","stop",undefined,var_00); +} + +//Function Number: 36 +func_242D() +{ + animscripts/utility::func_10F0(); + self orientmode("face current"); + animscripts/utility::func_F7D(1); + func_2441(0.1); + animscripts/cover_prone::func_10E2(0.1); + func_243E(%prone_2_crouch,"crouch","stop"); +} + +//Function Number: 37 +func_242E() +{ + self orientmode("face current"); + animscripts/utility::func_F7D(1); + func_2441(0.1); + animscripts/cover_prone::func_10E2(0.1); + func_243E(%prone_2_stand,"stand","stop"); +} + +//Function Number: 38 +func_242F() +{ + func_242D(); + func_241E(); + func_241A(); +} + +//Function Number: 39 +func_2430(param_00) +{ + func_2441(0.1); + func_243E(%prone_2_prone_crawl,"prone",param_00,%prone_crawl); + animscripts/cover_prone::func_10E2(0.1); +} + +//Function Number: 40 +func_2431() +{ + func_2430("run"); +} + +//Function Number: 41 +func_2432() +{ + func_2441(0.1); + animscripts/cover_prone::func_10E2(0.1); + func_243E(%prone_crawl_2_prone,"prone","stop"); +} + +//Function Number: 42 +func_2433() +{ + self setproneanimnodes(-45,45,%prone_legs_down,%exposed_aiming,%prone_legs_up); + animscripts/utility::func_10E1(1); + func_2441(0.3); + animscripts/cover_prone::func_10E2(0.1); + func_243E(%crouch_2_prone,"prone","stop"); +} + +//Function Number: 43 +func_2434() +{ + func_2433(); + func_2431(); +} + +//Function Number: 44 +func_2435() +{ + func_2433(); + func_2431(); +} + +//Function Number: 45 +func_2436() +{ + self endon("entered_poseprone"); + var_00 = 0.5; + thread func_243D(%stand_2_prone,"prone","stop",undefined,var_00); + self waittillmatch("anim_pose = \"crouch\","transAnimDone2"); + waittillframeend; + self setproneanimnodes(-45,45,%prone_legs_down,%exposed_aiming,%prone_legs_up); + animscripts/utility::func_10E1(var_00); + self.a.movement = "stop"; + func_2441(0.2); + animscripts/cover_prone::func_10E2(0.1); + self waittillmatch("end","transAnimDone2"); +} + +//Function Number: 46 +func_2437() +{ + func_2436(); + func_2431(); +} + +//Function Number: 47 +func_2438() +{ + func_2436(); + func_2431(); +} + +//Function Number: 48 +func_2439() +{ + var_00 = 0.5; + self setproneanimnodes(-45,45,%prone_legs_down,%exposed_aiming,%prone_legs_up); + animscripts/utility::func_10E1(var_00); + func_2441(0.2); + animscripts/cover_prone::func_10E2(0.1); + var_01 = animscripts/utility::func_243A(self getmotionangle()); + var_02 = %crouch_2_prone; + var_03 = getmovedelta(var_02,0,1); + var_04 = self localtoworldcoords(var_03); + if(self maymovetopoint(var_04)) + { + func_243E(var_02,"prone","stop",undefined,var_00); + return; + } + + func_243E(%crouch_2_prone_firing,"prone","stop",undefined,var_00); +} + +//Function Number: 49 +func_243B() +{ + func_2439(); + func_2431(); +} + +//Function Number: 50 +func_243C() +{ + func_2439(); + func_2431(); +} + +//Function Number: 51 +func_243D(param_00,param_01,param_02,param_03,param_04) +{ + self endon("killanimscript"); + self endon("entered_pose" + param_01); + func_243F(param_00,param_01,param_02,param_03,param_04,0); +} + +//Function Number: 52 +func_243E(param_00,param_01,param_02,param_03,param_04) +{ + func_243F(param_00,param_01,param_02,param_03,param_04,1); +} + +//Function Number: 53 +func_243F(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if(!isdefined(param_04)) + { + param_04 = 1; + } + + if(param_05) + { + thread func_2440(getanimlength(param_00) / 2,"killtimerscript",param_01); + } + + self setflaggedanimknoballrestart("transAnimDone2",param_00,%body,1,0.2,param_04); + if(!isdefined(self.a.pose)) + { + self.pose = "undefined"; + } + + if(!isdefined(self.a.movement)) + { + self.movement = "undefined"; + } + + var_06 = ""; + animscripts/shared::donotetracks("transAnimDone2",undefined,var_06); + self notify("killtimerscript"); + self.a.pose = param_01; + self notify("entered_pose" + param_01); + self.a.movement = param_02; + if(isdefined(param_03)) + { + self setanimknoball(param_03,%body,1,0.3,param_04); + } +} + +//Function Number: 54 +func_2440(param_00,param_01,param_02) +{ + self endon("killanimscript"); + self endon("death"); + self endon(param_01); + var_03 = self.a.pose; + wait param_00; + if(var_03 != "prone" && param_02 == "prone") + { + animscripts/cover_prone::func_10E2(0.1); + animscripts/utility::func_10E1(1); + return; + } + + if(var_03 == "prone" && param_02 != "prone") + { + animscripts/utility::func_F7D(1); + self orientmode("face default"); + } +} + +//Function Number: 55 +func_2441(param_00) +{ + self setanimknoball(%prone_legsstraight,%body,1,param_00,1); +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/shared.gsc b/MW3/PC/SP/animscripts/shared.gsc new file mode 100644 index 0000000..c3c2f4d --- /dev/null +++ b/MW3/PC/SP/animscripts/shared.gsc @@ -0,0 +1,823 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\shared.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 34 + * Decompile Time: 590 ms + * Timestamp: 10/27/2023 2:18:43 AM +*******************************************************************/ + +//Function Number: 1 +func_0C9B(param_00,param_01,param_02) +{ + self notify("weapon_position_change"); + var_03 = self.weaponinfo[param_00].position; + if(param_01 != "none" && self.a.weaponpos[param_01] == param_00) + { + return; + } + + func_23C1(); + if(var_03 != "none") + { + func_23BE(param_00); + } + + if(param_01 == "none") + { + func_23C4(); + return; + } + + if(self.a.weaponpos[param_01] != "none") + { + func_23BE(self.a.weaponpos[param_01]); + } + + if(!isdefined(param_02)) + { + param_02 = 1; + } + + if(param_02 && param_01 == "left" || param_01 == "right") + { + func_23BF(param_00,param_01); + self.weapon = param_00; + } + else + { + func_23BF(param_00,param_01); + } + + func_23C4(); +} + +//Function Number: 2 +func_23BE(param_00) +{ + self.a.weaponpos[self.weaponinfo[param_00].position] = "none"; + self.weaponinfo[param_00].position = "none"; +} + +//Function Number: 3 +func_23BF(param_00,param_01) +{ + self.weaponinfo[param_00].position = param_01; + self.a.weaponpos[param_01] = param_00; + if(self.a.var_20A4[param_01] != "none") + { + self notify("end_weapon_drop_" + param_01); + self.a.var_20A4[param_01] = "none"; + } +} + +//Function Number: 4 +func_23C0(param_00) +{ + var_01 = self.a.weaponpos[param_00]; + if(var_01 == "none") + { + return self.a.var_20A4[param_00]; + } + + return var_01; +} + +//Function Number: 5 +func_23C1() +{ + var_00 = []; + self laseroff(); + foreach(var_02 in var_7B) + { + var_03 = func_23C0(var_02); + if(var_03 == "none") + { + continue; + } + + if(weapontype(var_03) == "riotshield" && isdefined(self.var_23C2)) + { + if(isdefined(self.var_23C3) && self.var_23C3) + { + playfxontag(common_scripts\utility::getfx("riot_shield_dmg"),self,"TAG_BRASS"); + self.var_23C3 = undefined; + } + + self detach(getweaponmodel(var_03,self.var_23C2),func_23C7(var_02)); + continue; + } + + self detach(getweaponmodel(var_03),func_23C7(var_02)); + } +} + +//Function Number: 6 +func_23C4() +{ + var_00 = []; + foreach(var_02 in var_7B) + { + var_03 = func_23C0(var_02); + if(var_03 == "none") + { + continue; + } + + var_04 = 0; + if(weapontype(var_03) == "riotshield" && isdefined(self.var_23C2)) + { + var_04 = self.var_23C2; + } + + var_05 = getweaponmodel(var_03,var_04); + if(weapontype(var_03) == "riotshield") + { + self attach(var_05,func_23C7(var_02)); + } + else + { + self attach(var_05,func_23C7(var_02),1); + } + + var_06 = getweaponhidetags(var_03); + var_07 = 0; + while(var_07 < var_06.size) + { + self hidepart(var_06[var_07],var_05); + var_07++ = var_7B[var_7B.size]; + } + + if(self.weaponinfo[var_03].var_209B && !self.weaponinfo[var_03].var_209A) + { + self hidepart("tag_clip"); + } + } + + func_0CE0(); +} + +//Function Number: 7 +func_0CE0() +{ + if(isdefined(self.var_23C5)) + { + [[ self.var_23C5 ]](); + return; + } + + if(self.a.weaponpos["right"] == "none") + { + return; + } + + if(func_23C6()) + { + self laseron(); + return; + } + + self laseroff(); +} + +//Function Number: 8 +func_23C6() +{ + if(!self.a.var_CDF) + { + return 0; + } + + if(animscripts/utility::func_CEA(self.weapon)) + { + return 0; + } + + return isalive(self); +} + +//Function Number: 9 +func_23C7(param_00) +{ + switch(param_00) + { + case "chest": + return "tag_weapon_chest"; + + case "back": + return "tag_stowed_back"; + + case "left": + return "tag_weapon_left"; + + case "right": + return "tag_weapon_right"; + + case "hand": + return "tag_inhand"; + + default: + break; + } +} + +//Function Number: 10 +func_23C8(param_00) +{ + if(!isdefined(param_00)) + { + param_00 = self.weapon; + } + + if(param_00 == "none") + { + return; + } + + if(isdefined(self.nodrop)) + { + return; + } + + func_23C1(); + var_01 = self.weaponinfo[param_00].position; + if(self.dropweapon && var_01 != "none") + { + thread func_23C9(param_00,var_01); + } + + func_23BE(param_00); + if(param_00 == self.weapon) + { + self.weapon = "none"; + } + + func_23C4(); +} + +//Function Number: 11 +func_0D73() +{ + if(isdefined(self.nodrop)) + { + return "none"; + } + + var_00 = []; + func_23C1(); + foreach(var_02 in var_7B) + { + var_03 = self.a.weaponpos[var_02]; + if(var_03 == "none") + { + continue; + } + + self.weaponinfo[var_03].position = "none"; + self.a.weaponpos[var_02] = "none"; + if(self.dropweapon) + { + thread func_23C9(var_03,var_02); + } + } + + self.weapon = "none"; + func_23C4(); +} + +//Function Number: 12 +func_23C9(param_00,param_01) +{ + if(self isragdoll()) + { + return "none"; + } + + self.a.var_20A4[param_01] = param_00; + var_02 = param_00; + if(issubstr(tolower(var_02),"rpg")) + { + var_02 = "rpg_player"; + } + + self dropweapon(var_02,param_01,0); + self endon("end_weapon_drop_" + param_01); + wait 0.1; + if(!isdefined(self)) + { + return; + } + + func_23C1(); + self.a.var_20A4[param_01] = "none"; + func_23C4(); +} + +//Function Number: 13 +donotetracks(param_00,param_01,param_02) +{ + for(;;) + { + self waittill(param_00,var_03); + if(!isdefined(var_03)) + { + var_03 = "undefined"; + } + + var_04 = animscripts/notetracks::func_23CA(var_03,param_00,param_01); + if(isdefined(var_04)) + { + return var_04; + } + } +} + +//Function Number: 14 +func_111C(param_00) +{ + if(!isdefined(self.var_CAB)) + { + if(!isdefined(self.var_CB1)) + { + return 0; + } + + return func_23CE(self.var_CB1); + } + + var_01 = self.var_CAB.origin + self.var_D81 * param_00; + return func_23CE(var_01); +} + +//Function Number: 15 +func_10E9() +{ + if(!isdefined(self.var_CAB)) + { + if(!isdefined(self.var_CB1)) + { + return 0; + } + + return func_23CE(self.var_CB1); + } + + return func_23CE(self.var_CAB getshootatpos()); +} + +//Function Number: 16 +func_23CB() +{ + var_00 = func_23CC(); + if(self.script == "cover_crouch" && isdefined(self.a.var_CF8) && self.a.var_CF8 == "lean") + { + var_00 = var_00 - level.var_CAD; + } + + return var_00; +} + +//Function Number: 17 +func_23CC() +{ + if(!isdefined(self.var_CAB)) + { + if(!isdefined(self.var_CB1)) + { + return 0; + } + + return animscripts/combat_utility::func_23B3(self.var_CB1); + } + + return animscripts/combat_utility::func_23B3(self.var_CAB getshootatpos()); +} + +//Function Number: 18 +func_0CB0() +{ + if(isdefined(self.var_23CD)) + { + var_00 = self getmuzzlesideoffsetpos(); + return (var_00[0],var_00[1],self geteye()[2]); + } + + return (self.origin[0],self.origin[1],self geteye()[2]); +} + +//Function Number: 19 +func_23CE(param_00) +{ + var_01 = animscripts/utility::func_113E(param_00); + var_02 = distance(self.origin,param_00); + if(var_02 > 3) + { + var_03 = asin(-3 / var_02); + var_01 = var_01 + var_03; + } + + var_01 = angleclamp180(var_01); + return var_01; +} + +//Function Number: 20 +func_0F90(param_00) +{ + self endon("killanimscript"); + func_23CF(param_00); + self clearanim(%generic_aim_left,0.5); + self clearanim(%generic_aim_right,0.5); +} + +//Function Number: 21 +func_23CF(param_00) +{ + self endon("rambo_aim_end"); + waittillframeend; + self clearanim(%generic_aim_left,0.2); + self clearanim(%generic_aim_right,0.2); + self setanimlimited(%generic_aim_45l,1,0.2); + self setanimlimited(%generic_aim_45r,1,0.2); + var_01 = 0.2; + var_02 = 0; + for(;;) + { + if(isdefined(self.var_CB1)) + { + var_03 = animscripts/utility::func_101A(self.var_CB1) - self.var_CAF.angles[1]; + var_03 = angleclamp180(var_03 - param_00); + if(abs(var_03 - var_02) > 10) + { + if(var_03 > var_02) + { + var_03 = var_02 + 10; + } + else + { + var_03 = var_02 - 10; + } + } + + var_02 = var_03; + } + + if(var_02 < 0) + { + var_04 = var_02 / -45; + if(var_04 > 1) + { + var_04 = 1; + } + + self setanimlimited(%generic_aim_right,var_04,var_01); + self setanimlimited(%generic_aim_left,0,var_01); + } + else + { + var_04 = var_02 / 45; + if(var_04 > 1) + { + var_04 = 1; + } + + self setanimlimited(%generic_aim_left,var_04,var_01); + self setanimlimited(%generic_aim_right,0,var_01); + } + + wait var_01; + } +} + +//Function Number: 22 +func_237A() +{ + var_00 = 0; + var_01 = weaponburstcount(self.weapon); + if(var_01) + { + var_00 = var_01; + } + else if(animscripts/weaponlist::func_CCB()) + { + var_00 = level.var_20DC[randomint(level.var_20DC.size)]; + } + else if(self.var_CDB) + { + var_00 = level.var_20DB[randomint(level.var_20DB.size)]; + } + else + { + var_00 = level.var_20DA[randomint(level.var_20DA.size)]; + } + + if(var_00 <= self.bulletsinclip) + { + return var_00; + } + + if(self.bulletsinclip <= 0) + { + return 1; + } + + return self.bulletsinclip; +} + +//Function Number: 23 +func_2379() +{ + var_00 = self.bulletsinclip; + if(weaponclass(self.weapon) == "mg") + { + var_01 = randomfloat(10); + if(var_01 < 3) + { + var_00 = randomintrange(2,6); + } + else if(var_01 < 8) + { + var_00 = randomintrange(6,12); + } + else + { + var_00 = randomintrange(12,20); + } + } + + return var_00; +} + +//Function Number: 24 +func_23D0(param_00,param_01) +{ +} + +//Function Number: 25 +func_23D1(param_00) +{ + self endon("killanimscript"); + self endon("abort_reload"); + var_01 = undefined; + if(self.weaponinfo[self.weapon].var_209B) + { + var_01 = getweaponclipmodel(self.weapon); + } + + if(self.weaponinfo[self.weapon].var_209A) + { + if(animscripts/utility::func_C95()) + { + self playsound("weap_reload_pistol_clipout_npc"); + } + else + { + self playsound("weap_reload_smg_clipout_npc"); + } + + if(isdefined(var_01)) + { + self hidepart("tag_clip"); + thread func_23D3(var_01,"tag_clip"); + self.weaponinfo[self.weapon].var_209A = 0; + thread func_23D2(var_01); + } + } + + for(;;) + { + self waittill(param_00,var_02); + switch(var_02) + { + case "attach clip right": + case "attach clip left": + if(isdefined(var_01)) + { + self attach(var_01,"tag_inhand"); + thread func_23D2(var_01,"tag_inhand"); + } + + animscripts/weaponlist::func_CD0(); + break; + + case "detach clip nohand": + if(isdefined(var_01)) + { + self detach(var_01,"tag_inhand"); + } + break; + + case "detach clip right": + case "detach clip left": + if(isdefined(var_01)) + { + self detach(var_01,"tag_inhand"); + self showpart("tag_clip"); + self notify("clip_detached"); + self.weaponinfo[self.weapon].var_209A = 1; + } + + if(animscripts/utility::func_C95()) + { + self playsound("weap_reload_pistol_clipin_npc"); + } + else + { + self playsound("weap_reload_smg_clipin_npc"); + } + self.a.var_114D = 0; + break; + } + } +} + +//Function Number: 26 +func_23D2(param_00,param_01) +{ + self notify("clip_detached"); + self endon("clip_detached"); + common_scripts\utility::waittill_any("killanimscript","abort_reload"); + if(!isdefined(self)) + { + return; + } + + if(isdefined(param_01)) + { + self detach(param_00,param_01); + } + + if(isalive(self)) + { + if(self.weapon != "none" && self.weaponinfo[self.weapon].position != "none") + { + self showpart("tag_clip"); + } + + self.weaponinfo[self.weapon].var_209A = 1; + return; + } + + if(isdefined(param_01)) + { + func_23D3(param_00,param_01); + } +} + +//Function Number: 27 +func_23D3(param_00,param_01) +{ + var_02 = spawn("script_model",self gettagorigin(param_01)); + var_02 setmodel(param_00); + var_02.angles = self gettagangles(param_01); + var_02 physicslaunchclient(var_02.origin,(0,0,0)); + wait 10; + if(isdefined(var_02)) + { + var_02 delete(); + } +} + +//Function Number: 28 +func_0F7C(param_00,param_01) +{ + self endon("killanimscript"); + var_02 = distancesquared(self.origin,param_00); + if(var_02 < 1) + { + self safeteleport(param_00); + return; + } + + if(var_02 > 256 && !self maymovetopoint(param_00)) + { + return; + } + + self.keepclaimednodeifvalid = 1; + var_03 = self.origin - param_00; + var_04 = int(param_01 * 20); + var_05 = var_03 * 1 / var_04; + for(var_06 = 0;var_06 < var_04;var_06++) + { + var_03 = var_03 - var_05; + self safeteleport(param_00 + var_03); + wait 0.05; + } + + self.keepclaimednodeifvalid = 0; +} + +//Function Number: 29 +func_23D4() +{ + return 1; +} + +//Function Number: 30 +func_0F93(param_00,param_01,param_02) +{ + if(!isdefined(param_02)) + { + param_02 = ::func_23D4; + } + + for(var_03 = 0;var_03 < param_01 * 10;var_03++) + { + if(isalive(self.enemy)) + { + if(animscripts/utility::func_CE3() && [[ param_02 ]]()) + { + return; + } + } + + if(animscripts/utility::func_F4C() && [[ param_02 ]]()) + { + return; + } + + self setanimknoball(param_00,%body,1,0.1); + wait 0.1; + } +} + +//Function Number: 31 +func_0F87(param_00) +{ + self endon("killanimscript"); + func_0C9B(self.secondaryweapon,"right"); + maps\_gameskill::didsomethingotherthanshooting(); +} + +//Function Number: 32 +func_20A6() +{ + var_00 = func_23D6(); + if(var_00 == 0) + { + return; + } + + self endon("death"); + for(;;) + { + level waittill("an_enemy_shot",var_01); + if(var_01 != self) + { + continue; + } + + if(!isdefined(var_01.enemy)) + { + continue; + } + + if(var_01.enemy != level.player) + { + continue; + } + + if(isdefined(level.var_23D5) && level.var_23D5 == 0) + { + continue; + } + + thread func_23D7(); + var_00--; + if(var_00 <= 0) + { + return; + } + } +} + +//Function Number: 33 +func_23D6() +{ + var_00 = maps\_utility::getdifficulty(); + switch(var_00) + { + case "gimp": + case "easy": + return 2; + + case "difficult": + case "hard": + case "medium": + return 1; + + case "fu": + return 0; + } + + return 2; +} + +//Function Number: 34 +func_23D7() +{ + var_00 = missile_createrepulsorent(level.player,5000,800); + wait 4; + missile_deleteattractor(var_00); +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/shoot_behavior.gsc b/MW3/PC/SP/animscripts/shoot_behavior.gsc new file mode 100644 index 0000000..ee50635 --- /dev/null +++ b/MW3/PC/SP/animscripts/shoot_behavior.gsc @@ -0,0 +1,724 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\shoot_behavior.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 27 + * Decompile Time: 437 ms + * Timestamp: 10/27/2023 2:18:45 AM +*******************************************************************/ + +//Function Number: 1 +func_0CD7(param_00) +{ + self endon("killanimscript"); + self notify("stop_deciding_how_to_shoot"); + self endon("stop_deciding_how_to_shoot"); + self endon("death"); + maps\_gameskill::resetmisstime(); + self.var_CD9 = param_00; + self.var_CAB = undefined; + self.var_CB1 = undefined; + self.var_CDA = "none"; + self.var_CDB = 0; + self.var_CDC = undefined; + if(!isdefined(self.var_CDD)) + { + self.var_CDD = 0; + } + + var_01 = isdefined(self.var_CAF) && self.var_CAF.type != "Cover Prone" && self.var_CAF.type != "Conceal Prone"; + if(var_01) + { + wait 0.05; + } + + var_02 = self.var_CAB; + var_03 = self.var_CB1; + var_04 = self.var_CDA; + if(!isdefined(self.has_no_ir)) + { + self.a.var_CDF = 1; + animscripts/shared::func_CE0(); + } + + if(animscripts/combat_utility::issniper()) + { + func_0D09(); + } + + if(var_01 && !self.a.var_CE2 || !animscripts/utility::func_CE3()) + { + thread func_0CFA(); + } + + thread func_0CFE(); + self.var_CE4 = undefined; + for(;;) + { + if(isdefined(self.var_CE5)) + { + if(!isdefined(self.enemy)) + { + self.var_CB1 = self.var_CE5; + self.var_CE5 = undefined; + func_0CE7(); + } + else + { + self.var_CE5 = undefined; + } + } + + var_05 = undefined; + if(self.weapon == "none") + { + func_0CE8(); + } + else if(animscripts/utility::func_BB6()) + { + var_05 = func_0CF5(); + } + else if(animscripts/utility::func_C95()) + { + var_05 = func_0CF6(); + } + else + { + var_05 = func_0CF2(); + } + + if(isdefined(self.a.var_CE6)) + { + [[ self.a.var_CE6 ]](); + } + + if(func_0CFF(var_02,self.var_CAB) || !isdefined(self.var_CAB) && func_0CFF(var_03,self.var_CB1) || func_0CFF(var_04,self.var_CDA)) + { + self notify("shoot_behavior_change"); + } + + var_02 = self.var_CAB; + var_03 = self.var_CB1; + var_04 = self.var_CDA; + if(!isdefined(var_05)) + { + func_0CE7(); + } + } +} + +//Function Number: 2 +func_0CE7() +{ + self endon("enemy"); + self endon("done_changing_cover_pos"); + self endon("weapon_position_change"); + self endon("enemy_visible"); + if(isdefined(self.var_CAB)) + { + self.var_CAB endon("death"); + self endon("do_slow_things"); + wait 0.05; + while(isdefined(self.var_CAB)) + { + self.var_CB1 = self.var_CAB getshootatpos(); + wait 0.05; + } + + return; + } + + self waittill("do_slow_things"); +} + +//Function Number: 3 +func_0CE8() +{ + self.var_CAB = undefined; + self.var_CB1 = undefined; + self.var_CDA = "none"; + self.var_CD9 = "normal"; +} + +//Function Number: 4 +func_0CE9() +{ + return !animscripts/combat_utility::issniper() && !animscripts/utility::func_CEA(self.weapon); +} + +//Function Number: 5 +func_0CEB() +{ + if(!animscripts/utility::func_CE3()) + { + return 0; + } + + if(!isdefined(self.var_CAF) && !self canshootenemy()) + { + return 0; + } + + return 1; +} + +//Function Number: 6 +func_0CEC() +{ + if(!func_0CEB()) + { + if(animscripts/combat_utility::issniper()) + { + func_0D09(); + } + + if(self.var_748) + { + self.var_CD9 = "ambush"; + return "retry"; + } + + if(!isdefined(self.enemy)) + { + func_0D01(); + return; + } + + func_0CF7(); + if((self.providecoveringfire || randomint(5) > 0) && func_0CE9()) + { + self.var_CD9 = "suppress"; + } + else + { + self.var_CD9 = "ambush"; + } + + return "retry"; + } + + func_0D00(); + func_0D03(); +} + +//Function Number: 7 +func_0CED(param_00) +{ + if(!param_00) + { + func_0D01(); + return; + } + + self.var_CAB = undefined; + self.var_CB1 = animscripts/utility::func_CEE(); + func_0D05(); +} + +//Function Number: 8 +func_0CEF(param_00) +{ + self.var_CDA = "none"; + self.var_CAB = undefined; + if(!param_00) + { + func_0CF0(); + if(func_0CF4()) + { + self.var_CE4 = undefined; + self notify("return_to_cover"); + self.var_CDC = 1; + return; + } + + return; + } + + self.var_CB1 = animscripts/utility::func_CEE(); + if(func_0CF4()) + { + self.var_CE4 = undefined; + if(func_0CE9()) + { + self.var_CD9 = "suppress"; + } + + if(randomint(3) == 0) + { + self notify("return_to_cover"); + self.var_CDC = 1; + } + + return "retry"; + } +} + +//Function Number: 9 +func_0CF0() +{ + if(isdefined(self.enemy) && self cansee(self.enemy)) + { + func_0D00(); + return; + } + + var_00 = self getanglestolikelyenemypath(); + if(!isdefined(var_00)) + { + if(isdefined(self.var_CAF)) + { + var_00 = self.var_CAF.angles; + } + else if(isdefined(self.var_CF1)) + { + var_00 = self.var_CF1.angles; + } + else if(isdefined(self.enemy)) + { + var_00 = vectortoangles(self lastknownpos(self.enemy) - self.origin); + } + else + { + var_00 = self.angles; + } + } + + var_01 = 1024; + if(isdefined(self.enemy)) + { + var_01 = distance(self.origin,self.enemy.origin); + } + + var_02 = self geteye() + anglestoforward(var_00) * var_01; + if(!isdefined(self.var_CB1) || distancesquared(var_02,self.var_CB1) > 25) + { + self.var_CB1 = var_02; + } +} + +//Function Number: 10 +func_0CF2() +{ + if(self.var_CD9 == "normal") + { + func_0CEC(); + return; + } + + if(func_0CEB()) + { + self.var_CD9 = "normal"; + self.var_CE4 = undefined; + return "retry"; + } + + func_0CF7(); + if(animscripts/combat_utility::issniper()) + { + func_0D09(); + } + + var_00 = animscripts/utility::func_CF3(); + if(self.var_CD9 == "suppress" || self.team == "allies" && !isdefined(self.enemy) && !var_00) + { + func_0CED(var_00); + return; + } + + func_0CEF(var_00); +} + +//Function Number: 11 +func_0CF4() +{ + if(!isdefined(self.var_CE4)) + { + if(self isbadguy()) + { + self.var_CE4 = gettime() + randomintrange(10000,-5536); + } + else + { + self.var_CE4 = gettime() + randomintrange(4000,10000); + } + } + + return self.var_CE4 < gettime(); +} + +//Function Number: 12 +func_0CF5() +{ + if(!func_0CEB()) + { + func_0CF7(); + func_0D01(); + return; + } + + func_0D00(); + self.var_CDA = "single"; + var_00 = lengthsquared(self.origin - self.var_CB1); + if(var_00 < squared(512)) + { + self notify("return_to_cover"); + self.var_CDC = 1; + } +} + +//Function Number: 13 +func_0CF6() +{ + if(self.var_CD9 == "normal") + { + if(!func_0CEB()) + { + if(!isdefined(self.enemy)) + { + func_0D01(); + return; + } + + func_0CF7(); + self.var_CD9 = "ambush"; + return "retry"; + } + + func_0D00(); + self.var_CDA = "single"; + return; + } + + if(func_0CEB()) + { + self.var_CD9 = "normal"; + self.var_CE4 = undefined; + return "retry"; + } + + func_0CF7(); + self.var_CAB = undefined; + self.var_CDA = "none"; + self.var_CB1 = animscripts/utility::func_CEE(); + if(!isdefined(self.var_CE4)) + { + self.var_CE4 = gettime() + randomintrange(4000,8000); + } + + if(self.var_CE4 < gettime()) + { + self.var_CD9 = "normal"; + self.var_CE4 = undefined; + return "retry"; + } +} + +//Function Number: 14 +func_0CF7() +{ + if(isdefined(self.enemy) && !self.var_CDD && self.script != "combat") + { + if(isai(self.enemy) && isdefined(self.enemy.script) && self.enemy.script == "cover_stand" || self.enemy.script == "cover_crouch") + { + if(isdefined(self.enemy.a.var_CF8) && self.enemy.a.var_CF8 == "hide") + { + return; + } + } + + self.var_CF9 = self.enemy.origin; + } +} + +//Function Number: 15 +func_0CFA() +{ + self endon("killanimscript"); + self endon("stop_deciding_how_to_shoot"); + for(;;) + { + self waittill("suppression"); + if(self.var_738 > self.var_CFB) + { + if(func_0CFC()) + { + self notify("return_to_cover"); + self.var_CDC = 1; + } + } + } +} + +//Function Number: 16 +func_0CFC() +{ + if(self.var_CDD) + { + return 0; + } + + if(!isdefined(self.enemy) || !self cansee(self.enemy)) + { + return 1; + } + + if(gettime() < self.var_CFD + 800) + { + return 0; + } + + if(isplayer(self.enemy) && self.enemy.health < self.enemy.maxhealth * 0.5) + { + if(gettime() < self.var_CFD + 3000) + { + return 0; + } + } + + return 1; +} + +//Function Number: 17 +func_0CFE() +{ + self endon("death"); + common_scripts\utility::waittill_any("killanimscript","stop_deciding_how_to_shoot"); + self.a.var_CDF = 0; + animscripts/shared::func_CE0(); +} + +//Function Number: 18 +func_0CFF(param_00,param_01) +{ + if(isdefined(param_00) != isdefined(param_01)) + { + return 1; + } + + if(!isdefined(param_01)) + { + return 0; + } + + return param_00 != param_01; +} + +//Function Number: 19 +func_0D00() +{ + self.var_CAB = self.enemy; + self.var_CB1 = self.var_CAB getshootatpos(); +} + +//Function Number: 20 +func_0D01() +{ + self.var_CAB = undefined; + self.var_CB1 = undefined; + self.var_CDA = "none"; + if(self.var_748) + { + self.var_CD9 = "ambush"; + } + + if(!self.var_CDD) + { + self notify("return_to_cover"); + self.var_CDC = 1; + } +} + +//Function Number: 21 +func_0D02() +{ + return level.gameskill == 3 && isplayer(self.enemy); +} + +//Function Number: 22 +func_0D03() +{ + if(isdefined(self.var_CAB.enemy) && isdefined(self.var_CAB.enemy.var_78A)) + { + return func_0D06("single",0); + } + + if(animscripts/combat_utility::issniper()) + { + return func_0D06("single",0); + } + + if(animscripts/utility::func_CEA(self.weapon)) + { + if(animscripts/utility::func_C97()) + { + return func_0D06("single",0); + } + else + { + return func_0D06("semi",0); + } + } + + if(weaponburstcount(self.weapon) > 0) + { + return func_0D06("burst",0); + } + + if(isdefined(self.juggernaut) && self.juggernaut) + { + return func_0D06("full",1); + } + + var_00 = distancesquared(self getshootatpos(),self.var_CB1); + var_01 = weaponclass(self.weapon) == "mg"; + if(self.providecoveringfire && var_01) + { + return func_0D06("full",0); + } + + if(var_00 < -3036) + { + if(isdefined(self.var_CAB) && isdefined(self.var_CAB.magic_bullet_shield)) + { + return func_0D06("single",0); + } + else + { + return func_0D06("full",0); + } + } + else if(var_00 < 810000 || func_0D02()) + { + if(weaponissemiauto(self.weapon) || func_0D07()) + { + return func_0D06("semi",1); + } + else + { + return func_0D06("burst",1); + } + } + else if(self.providecoveringfire || var_01 || var_00 < 2560000) + { + if(func_0D07()) + { + return func_0D06("semi",0); + } + else + { + return func_0D06("burst",0); + } + } + + return func_0D06("single",0); +} + +//Function Number: 23 +func_0D05() +{ + var_00 = distancesquared(self getshootatpos(),self.var_CB1); + if(weaponissemiauto(self.weapon)) + { + if(var_00 < 2560000) + { + return func_0D06("semi",0); + } + + return func_0D06("single",0); + } + + if(weaponclass(self.weapon) == "mg") + { + return func_0D06("full",0); + } + + if(self.providecoveringfire || var_00 < 2560000) + { + if(func_0D07()) + { + return func_0D06("semi",0); + } + else + { + return func_0D06("burst",0); + } + } + + return func_0D06("single",0); +} + +//Function Number: 24 +func_0D06(param_00,param_01) +{ + self.var_CDA = param_00; + self.var_CDB = param_01; +} + +//Function Number: 25 +func_0D07() +{ + if(weaponclass(self.weapon) != "rifle") + { + return 0; + } + + if(self.team != "allies") + { + return 0; + } + + var_00 = animscripts/utility::func_D08(int(self.origin[1]),10000) + 2000; + var_01 = int(self.origin[0]) + gettime(); + return var_01 % 2 * var_00 > var_00; +} + +//Function Number: 26 +func_0D09() +{ + self.snipershotcount = 0; + self.sniperhitcount = 0; + thread func_0D0C(); +} + +//Function Number: 27 +func_0D0C() +{ + self endon("killanimscript"); + self endon("enemy"); + self endon("return_to_cover"); + self notify("new_glint_thread"); + self endon("new_glint_thread"); + if(isdefined(self.var_D0D) && self.var_D0D) + { + return; + } + + if(!isdefined(level._effect["sniper_glint"])) + { + return; + } + + if(!isalive(self.enemy)) + { + return; + } + + var_00 = common_scripts\utility::getfx("sniper_glint"); + wait 0.2; + for(;;) + { + if(self.weapon == self.primaryweapon && animscripts/combat_utility::func_D0E()) + { + if(distancesquared(self.origin,self.enemy.origin) > 65536) + { + playfxontag(var_00,self,"tag_flash"); + } + + var_01 = randomfloatrange(3,5); + wait var_01; + } + + wait 0.2; + } +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/snowmobile.gsc b/MW3/PC/SP/animscripts/snowmobile.gsc new file mode 100644 index 0000000..985b5f7 --- /dev/null +++ b/MW3/PC/SP/animscripts/snowmobile.gsc @@ -0,0 +1,898 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\snowmobile.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 32 + * Decompile Time: 526 ms + * Timestamp: 10/27/2023 2:18:47 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self.var_EE8 = "none"; + self.var_EE9 = undefined; + func_0EEB(); + if(isdefined(self.drivingvehicle)) + { + func_0EF0(); + return; + } + + func_0EF3(); +} + +//Function Number: 2 +func_0EEB() +{ + self.grenadeawareness = 0; + self.a.pose = "crouch"; + maps\_utility::disable_surprise(); + self.allowpain = 0; + self.getoffvehiclefunc = ::func_0EEF; + self.var_D4B = ::func_0F16; + self.disablebulletwhizbyreaction = 1; +} + +//Function Number: 3 +func_0EEF() +{ + self.allowpain = 1; + self.getoffvehiclefunc = undefined; + self.var_D4B = undefined; + self.a.var_CE6 = undefined; + self.disablebulletwhizbyreaction = undefined; +} + +//Function Number: 4 +func_0EF0() +{ + var_00 = self.ridingvehicle.var_EF2 || self.ridingvehicle.riders.size == 1; + func_0F1A(var_00); + if(var_00) + { + animscripts/shared::func_C9B(self.primaryweapon,"left"); + self.var_716 = 90; + self.var_717 = -90; + animscripts/track::func_CC4(1,0.2); + thread func_0F0F(); + thread func_0EFA(); + } + else + { + animscripts/shared::func_C9B(self.primaryweapon,"none"); + thread func_0EF6(); + } + + func_0EFD("driver"); +} + +//Function Number: 5 +func_0EF3() +{ + func_0F1B(self.ridingvehicle.var_EF4); + if(self.ridingvehicle.var_EF4) + { + self.var_716 = 180; + self.var_717 = -180; + self.var_EF5 = 1; + animscripts/track::func_CC4(1,0.2); + thread func_0F10(); + thread func_0EFB(); + } + else + { + thread func_0EF9(); + } + + func_0EFD("passenger"); +} + +//Function Number: 6 +func_0EF6() +{ + self endon("death"); + self endon("killanimscript"); + var_00 = "left2right"; + var_01 = []; + self setanimknoball(%sm_turn,%body,1,0); + self setanim(animscripts/utility::func_D4D("drive"),1,0); + self setanimknob(animscripts/utility::func_D4D(var_01),1,0); + self setanimtime(animscripts/utility::func_D4D(var_01),0.5); + for(;;) + { + if(self.ridingvehicle.steering_enable) + { + var_02 = 0.5 * 1 + maps\_vehicle::update_steering(self.ridingvehicle); + var_03 = self getanimtime(animscripts/utility::func_D4D(var_01)); + if(var_01 == "right2left") + { + var_03 = 1 - var_03; + } + + var_04 = 20 * abs(var_03 - var_02); + if(var_03 < var_02) + { + var_01 = "left2right"; + var_04 = var_04 * var_7B["left2right"]; + } + else + { + var_01 = "right2left"; + var_04 = var_04 * var_7B["right2left"]; + var_03 = 1 - var_03; + } + } + else + { + var_01 = "left2right"; + var_04 = 0; + var_03 = 0.5; + } + + self setanimknoblimited(animscripts/utility::func_D4D(var_01),1,0.1,var_04); + self setanimtime(animscripts/utility::func_D4D(var_01),var_03); + wait 0.05; + } +} + +//Function Number: 7 +func_0EF9() +{ + self endon("death"); + self endon("killanimscript"); + self setanimknoball(animscripts/utility::func_D4D("hide"),%body,1,0); + self setanimknob(animscripts/utility::func_D4D("drive"),1,0); + for(;;) + { + var_00 = maps\_vehicle::update_steering(self.ridingvehicle); + self setanimlimited(%sm_lean,abs(var_00),0.05); + if(var_00 >= 0) + { + self setanimknoblimited(animscripts/utility::func_D4D("lean_right"),1,0.05); + } + else + { + self setanimknoblimited(animscripts/utility::func_D4D("lean_left"),1,0.05); + } + + wait 0.05; + } +} + +//Function Number: 8 +func_0EFA() +{ + self endon("death"); + self endon("killanimscript"); + var_00 = 0.05; + var_01 = 0; + self setanimknoball(%sm_aiming,%body,1,0); + self setanimknob(animscripts/utility::func_D4D("idle"),1,0); + for(;;) + { + if(self.var_EE8 != "none") + { + self waittill("snowmobile_event_finished"); + continue; + } + + var_02 = maps\_vehicle::update_steering(self.ridingvehicle); + var_03 = 1 - abs(var_02); + var_04 = max(0,0 - var_02); + var_05 = max(0,var_02); + self setanimlimited(animscripts/utility::func_D4D("straight_level_center"),var_03,var_00); + self setanimlimited(animscripts/utility::func_D4D("straight_level_left"),var_04,var_00); + self setanimlimited(animscripts/utility::func_D4D("straight_level_right"),var_05,var_00); + if(self.bulletsinclip <= 0) + { + animscripts/weaponlist::func_CD0(); + var_01 = gettime() + 3000; + } + + if(var_01 <= gettime()) + { + func_0EFF(); + } + + self setanimknoblimited(animscripts/utility::func_D4D("add_aim_left_center"),var_03,var_00); + self setanimlimited(animscripts/utility::func_D4D("add_aim_left_left"),var_04,var_00); + self setanimlimited(animscripts/utility::func_D4D("add_aim_left_right"),var_05,var_00); + self setanimknoblimited(animscripts/utility::func_D4D("add_aim_right_center"),var_03,var_00); + self setanimlimited(animscripts/utility::func_D4D("add_aim_right_left"),var_04,var_00); + self setanimlimited(animscripts/utility::func_D4D("add_aim_right_right"),var_05,var_00); + thread func_0F00(); + wait 0.05; + } +} + +//Function Number: 9 +func_0EFB() +{ + self endon("death"); + self endon("killanimscript"); + var_00 = 0.05; + self setanimknoball(%sm_aiming,%body,1,0); + self setanimknob(animscripts/utility::func_D4D("idle"),1,0); + for(;;) + { + if(self.var_EE8 != "none") + { + self waittill("snowmobile_event_finished"); + continue; + } + + if(func_0F07()) + { + continue; + } + + var_01 = maps\_vehicle::update_steering(self.ridingvehicle); + var_02 = 1 - abs(var_01); + var_03 = max(0,0 - var_01); + var_04 = max(0,var_01); + self setanimlimited(animscripts/utility::func_D4D("straight_level_center"),var_02,var_00); + self setanimlimited(animscripts/utility::func_D4D("straight_level_left"),var_03,var_00); + self setanimlimited(animscripts/utility::func_D4D("straight_level_right"),var_04,var_00); + func_0EFF(); + self setanimlimited(animscripts/utility::func_D4D("aim_left_center"),var_02,var_00); + self setanimlimited(animscripts/utility::func_D4D("aim_left_left"),var_03,var_00); + self setanimlimited(animscripts/utility::func_D4D("aim_left_right"),var_04,var_00); + self setanimlimited(animscripts/utility::func_D4D("aim_right_center"),var_02,var_00); + self setanimlimited(animscripts/utility::func_D4D("aim_right_left"),var_03,var_00); + self setanimlimited(animscripts/utility::func_D4D("aim_right_right"),var_04,var_00); + self setanimlimited(animscripts/utility::func_D4D("add_aim_backleft_center"),var_02,var_00); + self setanimlimited(animscripts/utility::func_D4D("add_aim_backleft_left"),var_03,var_00); + self setanimlimited(animscripts/utility::func_D4D("add_aim_backleft_right"),var_04,var_00); + self setanimlimited(animscripts/utility::func_D4D("add_aim_backright_center"),var_02,var_00); + self setanimlimited(animscripts/utility::func_D4D("add_aim_backright_left"),var_03,var_00); + self setanimlimited(animscripts/utility::func_D4D("add_aim_backright_right"),var_04,var_00); + if(isplayer(self.enemy)) + { + self updateplayersightaccuracy(); + } + + wait 0.05; + thread func_0F00(); + } +} + +//Function Number: 10 +func_0EFC(param_00) +{ + self endon("death"); + self.ridingvehicle.steering_enable = 0; + self setflaggedanimknoblimitedrestart("snowmobile_event",param_00,1,0.17); + animscripts/shared::donotetracks("snowmobile_event",::func_0F0E); + self setanimknoblimited(animscripts/utility::func_D4D("event_restore"),1,0.1); + self.ridingvehicle.steering_enable = 1; + self.var_EE8 = "none"; + self notify("snowmobile_event_finished"); +} + +//Function Number: 11 +func_0EFD(param_00) +{ + self endon("death"); + self endon("killanimscript"); + var_01 = self.ridingvehicle; + for(;;) + { + if(var_01.event["jump"][param_00]) + { + var_01.event["jump"][param_00] = 0; + self notify("snowmobile_event_occurred"); + self.var_EE8 = "jump"; + var_01.steering_enable = 0; + self setflaggedanimknoblimitedrestart("jump",animscripts/utility::func_D4D("event_jump"),1,0.17); + } + + if(var_01.event["bump"][param_00]) + { + var_01.event["bump"][param_00] = 0; + self notify("snowmobile_event_occurred"); + if(self.var_EE8 != "bump_big") + { + thread func_0EFC(animscripts/utility::func_D4D("event_bump")); + } + } + + if(var_01.event["bump_big"][param_00]) + { + var_01.event["bump_big"][param_00] = 0; + self notify("snowmobile_event_occurred"); + self.var_EE8 = "bump_big"; + thread func_0EFC(animscripts/utility::func_D4D("event_bump_big")); + } + + if(var_01.event["sway_left"][param_00]) + { + var_01.event["sway_left"][param_00] = 0; + self notify("snowmobile_event_occurred"); + if(self.var_EE8 != "bump_big") + { + thread func_0EFC(animscripts/utility::func_D4D("event_sway")["left"]); + } + } + + if(var_01.event["sway_right"][param_00]) + { + var_01.event["sway_right"][param_00] = 0; + self notify("snowmobile_event_occurred"); + if(self.var_EE8 != "bump_big") + { + thread func_0EFC(animscripts/utility::func_D4D("event_sway")["right"]); + } + } + + wait 0.05; + } +} + +//Function Number: 12 +func_0EFF() +{ + self notify("want_shoot_while_driving"); + self setanim(%sm_add_fire,1,0.2); + if(isdefined(self.var_EE9)) + { + return; + } + + self.var_EE9 = 1; + thread func_0F01(); + thread func_0F05(); +} + +//Function Number: 13 +func_0F00() +{ + self endon("killanimscript"); + self endon("want_shoot_while_driving"); + wait 0.05; + self notify("end_shoot_while_driving"); + self.var_EE9 = undefined; + self clearanim(%sm_add_fire,0.2); +} + +//Function Number: 14 +func_0F01() +{ + self endon("killanimscript"); + self endon("end_shoot_while_driving"); + self.a.var_CE6 = ::func_0F03; + func_0F02(); + self.var_EE9 = undefined; +} + +//Function Number: 15 +func_0F02() +{ + self endon("snowmobile_event_occurred"); + animscripts/shoot_behavior::func_CD7("normal"); +} + +//Function Number: 16 +func_0F03() +{ + if(!isdefined(self.enemy)) + { + self.var_CAB = undefined; + self.var_CB1 = undefined; + self.var_CDA = "none"; + return; + } + + self.var_CAB = self.enemy; + self.var_CB1 = self.enemy getshootatpos(); + var_00 = distancesquared(self.origin,self.enemy.origin); + if(var_00 < 1000000) + { + self.var_CDA = "full"; + } + else if(var_00 < 4000000) + { + self.var_CDA = "burst"; + } + else + { + self.var_CDA = "single"; + } + + if(isdefined(self.enemy.vehicle)) + { + var_01 = 0.5; + var_02 = self.var_CAB.vehicle; + var_03 = self.ridingvehicle; + var_04 = var_03.origin - var_02.origin; + var_05 = anglestoforward(var_02.angles); + var_06 = anglestoright(var_02.angles); + var_07 = vectordot(var_04,var_05); + if(var_07 < 0) + { + var_08 = var_02 vehicle_getspeed() * var_01; + var_08 = var_08 * 17.6; + if(var_08 > 50) + { + var_09 = vectordot(var_04,var_06); + var_09 = var_09 / 3; + if(var_09 > 128) + { + var_09 = 128; + } + else if(var_09 < -128) + { + var_09 = -128; + } + + if(var_09 > 0) + { + var_09 = 128 - var_09; + } + else + { + var_09 = -128 - var_09; + } + + self.var_CAB = undefined; + self.var_CB1 = var_02.origin + var_08 * var_05 + var_09 * var_06; + return; + } + } + } +} + +//Function Number: 17 +func_0F05() +{ + self endon("killanimscript"); + self endon("end_shoot_while_driving"); + self notify("doing_shootWhileDriving"); + self endon("doing_shootWhileDriving"); + for(;;) + { + if(!self.bulletsinclip) + { + wait 0.5; + continue; + } + + animscripts/combat_utility::func_F06(); + } +} + +//Function Number: 18 +func_0F07() +{ + if(!self.ridingvehicle.steering_enable) + { + return 0; + } + + if(!animscripts/combat_utility::func_F08(0)) + { + return 0; + } + + if(!animscripts/utility::func_EE3()) + { + return 0; + } + + func_0F09(); + self notify("abort_reload"); + return 1; +} + +//Function Number: 19 +func_0F09() +{ + self endon("snowmobile_event_occurred"); + self.var_F0A = 1; + self waittill("start_blending_reload"); + self setanim(%sm_aiming,0,0.25); + self setflaggedanimrestart("gun_down",animscripts/utility::func_D4D("gun_down"),1,0.25); + animscripts/shared::donotetracks("gun_down"); + self clearanim(animscripts/utility::func_D4D("gun_down"),0); + self setflaggedanimknoballrestart("reload_anim",animscripts/utility::func_D4D("reload"),%body,1,0.25); + animscripts/shared::donotetracks("reload_anim"); + self clearanim(%sm_reload,0.2); + self setflaggedanimrestart("gun_up",animscripts/utility::func_D4D("gun_up"),1,0.25); + self.var_F0B = 1; + animscripts/shared::donotetracks("gun_up",::func_0F0C); + self.var_F0A = undefined; + self clearanim(%sm_reload,0.1); + self setanim(%sm_aiming,1,0.1); + if(isdefined(self.var_F0B)) + { + self.var_F0B = undefined; + animscripts/shared::donotetracks("gun_up",::func_0F0D); + self clearanim(animscripts/utility::func_D4D("gun_up"),0); + } +} + +//Function Number: 20 +func_0F0C(param_00) +{ + if(param_00 == "start_aim") + { + return 1; + } +} + +//Function Number: 21 +func_0F0D(param_00) +{ + if(param_00 == "end") + { + return 1; + } +} + +//Function Number: 22 +func_0F0E(param_00) +{ + if(param_00 == "start_lean") + { + return 1; + } +} + +//Function Number: 23 +func_0F0F() +{ + self endon("killanimscript"); + self endon("stop tracking"); + var_00 = 0.05; + var_01 = 8; + var_02 = 0; + var_03 = 0; + var_04 = 1; + for(;;) + { + animscripts/track::func_CC9(); + var_05 = (self.origin[0],self.origin[1],self geteye()[2]); + var_06 = self.var_CB1; + if(isdefined(self.var_CAB)) + { + var_06 = self.var_CAB getshootatpos(); + } + + if(!isdefined(var_06)) + { + var_03 = 0; + var_07 = self getanglestolikelyenemypath(); + if(isdefined(var_07)) + { + var_03 = angleclamp180(self.angles[1] - var_07[1]); + } + } + else + { + var_08 = var_06 - var_05; + var_09 = vectortoangles(var_08); + var_03 = self.angles[1] - var_09[1]; + var_03 = angleclamp180(var_03); + } + + if(var_03 > self.var_716 || var_03 < self.var_717) + { + var_03 = 0; + } + + if(var_04) + { + var_04 = 0; + } + else + { + var_0A = var_03 - var_02; + if(abs(var_0A) > var_01) + { + var_03 = var_02 + var_01 * common_scripts\utility::sign(var_0A); + } + } + + var_02 = var_03; + var_0B = min(max(0 - var_03,0),90) / 90 * self.a.var_CC3; + var_0C = min(max(var_03,0),90) / 90 * self.a.var_CC3; + self setanimlimited(%sm_aim_4,var_0B,var_00); + self setanimlimited(%sm_aim_6,var_0C,var_00); + wait 0.05; + } +} + +//Function Number: 24 +func_0F10() +{ + self endon("killanimscript"); + self endon("stop tracking"); + var_00 = 0.05; + var_01 = 5; + var_02 = 20; + var_03 = 15; + var_04 = 40; + var_05 = 30; + var_06 = 0; + var_07 = 0; + var_08 = 1; + for(;;) + { + animscripts/track::func_CC9(); + var_09 = (self.origin[0],self.origin[1],self geteye()[2]); + var_0A = self.var_CB1; + if(isdefined(self.var_CAB)) + { + var_0A = self.var_CAB getshootatpos(); + } + + if(!isdefined(var_0A)) + { + var_07 = 0; + var_0B = self getanglestolikelyenemypath(); + if(isdefined(var_0B)) + { + var_07 = angleclamp180(self.angles[1] - var_0B[1]); + } + } + else + { + var_0C = var_0A - var_09; + var_0D = vectortoangles(var_0C); + var_07 = self.angles[1] - var_0D[1]; + var_07 = angleclamp180(var_07); + } + + if(isdefined(self.var_F0A) || var_07 > 0 && var_07 - self.var_716 * self.var_EF5 > 0 || var_07 < 0 && var_07 - self.var_717 * self.var_EF5 < 0) + { + var_07 = 0; + } + + if(var_08) + { + var_08 = 0; + } + else + { + if(var_06 < -180 + var_04 && var_07 > 180 - var_05) + { + var_07 = -179; + } + + if(var_06 > 180 - var_04 && var_07 < -180 + var_05) + { + var_07 = 179; + } + + var_0E = var_07 - var_06; + var_0F = var_02 - var_01 * abs(var_0E) / 180 + var_01; + if(isdefined(self.var_F0A)) + { + var_0F = var_03; + if(abs(var_06) < 45) + { + self notify("start_blending_reload"); + } + } + + if(abs(var_0E) > var_0F) + { + var_07 = var_06 + var_0F * common_scripts\utility::sign(var_0E); + } + } + + var_06 = var_07; + var_10 = max(-90 - var_07,0) / 90 * self.a.var_CC3; + var_11 = min(max(0 - var_07,0),90) / 90 * self.a.var_CC3; + var_12 = max(90 - abs(var_07),0) / 90 * self.a.var_CC3; + var_13 = min(max(var_07,0),90) / 90 * self.a.var_CC3; + var_14 = max(-90 + var_07,0) / 90 * self.a.var_CC3; + self setanimlimited(%sm_aim_1,var_10,var_00); + self setanimlimited(%sm_aim_4_delta,var_11,var_00); + self setanimlimited(%sm_aim_5_delta,var_12,var_00); + self setanimlimited(%sm_aim_6_delta,var_13,var_00); + self setanimlimited(%sm_aim_3,var_14,var_00); + wait 0.05; + } +} + +//Function Number: 25 +func_0F11(param_00,param_01,param_02) +{ + var_03 = undefined; + var_04 = undefined; + var_05 = 0; + for(var_06 = 0;var_06 < param_00.size;var_06++) + { + var_07 = animscripts/utility::func_D61(param_02 - param_01[var_06]); + if(!isdefined(var_03) || var_07 < var_05) + { + var_04 = var_03; + var_03 = param_00[var_06]; + var_05 = var_07; + continue; + } + + if(!isdefined(var_04)) + { + var_04 = param_00[var_06]; + } + } + + var_08 = var_03; + if(isdefined(level.var_F12) && var_08 == level.var_F12 && gettime() - level.var_F13 < 500) + { + var_08 = var_04; + } + + anim.var_F12 = var_08; + anim.var_F13 = gettime(); + return var_08; +} + +//Function Number: 26 +func_0F14() +{ + var_00 = self.ridingvehicle; + var_01 = var_00.var_F15; + var_01 = (var_01[0],var_01[1],randomfloatrange(200,400)) * 0.75; + if(lengthsquared(var_01) > 1000000) + { + var_01 = vectornormalize(var_01) * 1000; + } + + var_02 = spawn("script_origin",self.origin); + var_02 moveslide((0,0,40),15,var_01); + self linkto(var_02); + var_02 thread func_0F18(); +} + +//Function Number: 27 +func_0F16() +{ + var_00 = []; + var_01 = []; + var_02 = func_0F11(var_7B,var_01,self.var_723); + animscripts/death::func_D56(var_02); + return 1; +} + +//Function Number: 28 +func_0F17() +{ + var_00 = self.ridingvehicle; + if(!isdefined(var_00)) + { + return func_0F16(); + } + + var_01 = var_00.var_F15; + func_0F14(); + var_02 = vectortoangles(var_01); + var_03 = angleclamp180(var_02[1] - self.angles[1]); + var_04 = []; + var_05 = []; + var_06 = func_0F11(var_7B,var_05,var_04); + animscripts/death::func_D56(var_06); + return 1; +} + +//Function Number: 29 +func_0F18() +{ + var_00 = self.origin; + for(var_01 = 0;var_01 < 60;var_01++) + { + wait 0.05; + var_00 = self.origin; + } + + wait 3; + if(isdefined(self)) + { + self delete(); + } +} + +//Function Number: 30 +func_0F19(param_00) +{ + self.a.array["idle"] = level.scr_anim["snowmobile"][param_00]["idle"]; + self.a.array["drive"] = level.scr_anim["snowmobile"][param_00]["drive"]; + self.a.array["fire"] = level.scr_anim["snowmobile"][param_00]["fire"]; + self.a.array["single"] = animscripts/utility::array(level.scr_anim["snowmobile"][param_00]["single"]); + self.a.array["burst2"] = level.scr_anim["snowmobile"][param_00]["fire"]; + self.a.array["burst3"] = level.scr_anim["snowmobile"][param_00]["fire"]; + self.a.array["burst4"] = level.scr_anim["snowmobile"][param_00]["fire"]; + self.a.array["burst5"] = level.scr_anim["snowmobile"][param_00]["fire"]; + self.a.array["burst6"] = level.scr_anim["snowmobile"][param_00]["fire"]; + self.a.array["semi2"] = level.scr_anim["snowmobile"][param_00]["fire"]; + self.a.array["semi3"] = level.scr_anim["snowmobile"][param_00]["fire"]; + self.a.array["semi4"] = level.scr_anim["snowmobile"][param_00]["fire"]; + self.a.array["semi5"] = level.scr_anim["snowmobile"][param_00]["fire"]; +} + +//Function Number: 31 +func_0F1A(param_00) +{ + self.a.array = []; + func_0F19("driver"); + self.a.array["left2right"] = level.scr_anim["snowmobile"]["driver"]["left2right"]; + self.a.array["right2left"] = level.scr_anim["snowmobile"]["driver"]["right2left"]; + self.a.array["straight_level_left"] = level.scr_anim["snowmobile"]["driver"]["straight_level"]["left"]; + self.a.array["straight_level_center"] = level.scr_anim["snowmobile"]["driver"]["straight_level"]["center"]; + self.a.array["straight_level_right"] = level.scr_anim["snowmobile"]["driver"]["straight_level"]["right"]; + self.a.array["add_aim_left_left"] = level.scr_anim["snowmobile"]["driver"]["add_aim_left"]["left"]; + self.a.array["add_aim_left_center"] = level.scr_anim["snowmobile"]["driver"]["add_aim_left"]["center"]; + self.a.array["add_aim_left_right"] = level.scr_anim["snowmobile"]["driver"]["add_aim_left"]["right"]; + self.a.array["add_aim_right_left"] = level.scr_anim["snowmobile"]["driver"]["add_aim_right"]["left"]; + self.a.array["add_aim_right_center"] = level.scr_anim["snowmobile"]["driver"]["add_aim_right"]["center"]; + self.a.array["add_aim_right_right"] = level.scr_anim["snowmobile"]["driver"]["add_aim_right"]["right"]; + if(param_00) + { + self.a.array["event_jump"] = level.scr_anim["snowmobile"]["driver"]["shoot_jump"]; + self.a.array["event_bump"] = level.scr_anim["snowmobile"]["driver"]["shoot_bump"]; + self.a.array["event_bump_big"] = level.scr_anim["snowmobile"]["driver"]["shoot_bump_big"]; + self.a.array["event_sway"] = []; + self.a.array["event_sway"]["left"] = level.scr_anim["snowmobile"]["driver"]["shoot_sway_left"]; + self.a.array["event_sway"]["right"] = level.scr_anim["snowmobile"]["driver"]["shoot_sway_right"]; + self.a.array["event_restore"] = %sm_aiming; + return; + } + + self.a.array["event_jump"] = level.scr_anim["snowmobile"]["driver"]["drive_jump"]; + self.a.array["event_bump"] = level.scr_anim["snowmobile"]["driver"]["drive_bump"]; + self.a.array["event_bump_big"] = level.scr_anim["snowmobile"]["driver"]["drive_bump_big"]; + self.a.array["event_sway"] = []; + self.a.array["event_sway"]["left"] = level.scr_anim["snowmobile"]["driver"]["drive_sway_left"]; + self.a.array["event_sway"]["right"] = level.scr_anim["snowmobile"]["driver"]["drive_sway_right"]; + self.a.array["event_restore"] = %sm_turn; +} + +//Function Number: 32 +func_0F1B(param_00) +{ + self.a.array = []; + func_0F19("passenger"); + self.a.array["hide"] = level.scr_anim["snowmobile"]["passenger"]["hide"]; + self.a.array["lean_left"] = level.scr_anim["snowmobile"]["passenger"]["add_lean"]["left"]; + self.a.array["lean_right"] = level.scr_anim["snowmobile"]["passenger"]["add_lean"]["right"]; + self.a.array["reload"] = level.scr_anim["snowmobile"]["passenger"]["reload"]; + self.a.array["gun_up"] = level.scr_anim["snowmobile"]["passenger"]["gun_up"]; + self.a.array["gun_down"] = level.scr_anim["snowmobile"]["passenger"]["gun_down"]; + self.a.array["aim_left_left"] = level.scr_anim["snowmobile"]["passenger"]["aim_left"]["left"]; + self.a.array["aim_left_center"] = level.scr_anim["snowmobile"]["passenger"]["aim_left"]["center"]; + self.a.array["aim_left_right"] = level.scr_anim["snowmobile"]["passenger"]["aim_left"]["right"]; + self.a.array["aim_right_left"] = level.scr_anim["snowmobile"]["passenger"]["aim_right"]["left"]; + self.a.array["aim_right_center"] = level.scr_anim["snowmobile"]["passenger"]["aim_right"]["center"]; + self.a.array["aim_right_right"] = level.scr_anim["snowmobile"]["passenger"]["aim_right"]["right"]; + self.a.array["add_aim_backleft_left"] = level.scr_anim["snowmobile"]["passenger"]["add_aim_backleft"]["left"]; + self.a.array["add_aim_backleft_center"] = level.scr_anim["snowmobile"]["passenger"]["add_aim_backleft"]["center"]; + self.a.array["add_aim_backleft_right"] = level.scr_anim["snowmobile"]["passenger"]["add_aim_backleft"]["right"]; + self.a.array["add_aim_backright_left"] = level.scr_anim["snowmobile"]["passenger"]["add_aim_backright"]["left"]; + self.a.array["add_aim_backright_center"] = level.scr_anim["snowmobile"]["passenger"]["add_aim_backright"]["center"]; + self.a.array["add_aim_backright_right"] = level.scr_anim["snowmobile"]["passenger"]["add_aim_backright"]["right"]; + self.a.array["straight_level_left"] = level.scr_anim["snowmobile"]["passenger"]["straight_level"]["left"]; + self.a.array["straight_level_center"] = level.scr_anim["snowmobile"]["passenger"]["straight_level"]["center"]; + self.a.array["straight_level_right"] = level.scr_anim["snowmobile"]["passenger"]["straight_level"]["right"]; + if(param_00) + { + self.a.array["event_jump"] = level.scr_anim["snowmobile"]["passenger"]["drive_jump"]; + self.a.array["event_bump"] = level.scr_anim["snowmobile"]["passenger"]["drive_bump"]; + self.a.array["event_bump_big"] = level.scr_anim["snowmobile"]["passenger"]["drive_bump_big"]; + self.a.array["event_sway"] = []; + self.a.array["event_sway"]["left"] = level.scr_anim["snowmobile"]["passenger"]["drive_sway_left"]; + self.a.array["event_sway"]["right"] = level.scr_anim["snowmobile"]["passenger"]["drive_sway_right"]; + self.a.array["event_restore"] = %sm_aiming; + return; + } + + self.a.array["event_jump"] = level.scr_anim["snowmobile"]["passenger"]["hide_jump"]; + self.a.array["event_bump"] = level.scr_anim["snowmobile"]["passenger"]["hide_bump"]; + self.a.array["event_bump_big"] = level.scr_anim["snowmobile"]["passenger"]["hide_bump_big"]; + self.a.array["event_sway"] = []; + self.a.array["event_sway"]["left"] = level.scr_anim["snowmobile"]["passenger"]["hide_sway_left"]; + self.a.array["event_sway"]["right"] = level.scr_anim["snowmobile"]["passenger"]["hide_sway_right"]; + self.a.array["event_restore"] = %sm_turn; +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/squadmanager.gsc b/MW3/PC/SP/animscripts/squadmanager.gsc new file mode 100644 index 0000000..ed5ff5c --- /dev/null +++ b/MW3/PC/SP/animscripts/squadmanager.gsc @@ -0,0 +1,823 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\squadmanager.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 32 + * Decompile Time: 556 ms + * Timestamp: 10/27/2023 2:18:49 AM +*******************************************************************/ + +//Function Number: 1 +func_0A5E() +{ + if(isdefined(level.var_A5F) && level.var_A5F) + { + return; + } + + anim.var_A60 = []; + anim.var_A61 = []; + anim.var_A62 = []; + anim.var_A63 = []; + anim.var_A64 = 0; + anim.var_A5F = 1; +} + +//Function Number: 2 +func_0A65(param_00,param_01) +{ + level.var_A62[param_00] = spawnstruct(); + var_02 = level.var_A62[param_00]; + var_02.var_A66 = param_00; + var_02.team = func_0A7D(param_01); + var_02.var_A67 = 0; + var_02.origin = undefined; + var_02.forward = undefined; + var_02.enemy = undefined; + var_02.var_A69 = 0; + var_02.var_A6A = 0; + var_02.members = []; + var_02.var_A6C = []; + var_02.var_A6D = 0; + var_02.var_A6E = []; + var_02.var_A6F = []; + var_02.var_A70 = []; + var_02.var_A71 = []; + var_02.var_A72 = []; + var_02.var_A73 = []; + var_02.var_A74 = []; + var_02.var_A75 = level.var_A63.size; + var_02 func_0A9F("combat",0.75); + var_02 func_0A9F("cover",0.75); + var_02 func_0A9F("move",0.75); + var_02 func_0A9F("stop",0.75); + var_02 func_0A9F("death",0.75); + var_02 func_0A9F("suppressed",0.75); + var_02 func_0A9F("attacking",0.5); + level.var_A63[level.var_A63.size] = var_02; + var_02 func_0A94(); + level notify("squad created " + param_00); + anim notify("squad created " + param_00); + for(var_03 = 0;var_03 < level.var_A60.size;var_03++) + { + var_04 = level.var_A60[var_03]; + var_02 thread [[ var_04 ]](); + } + + for(var_03 = 0;var_03 < level.var_A63.size;var_03++) + { + level.var_A63[var_03] func_0A94(); + } + + var_02 thread func_0A89(); + var_02 thread func_0A8A(); + var_02 thread func_0A88(); + var_02 thread func_0A9A(); + return var_02; +} + +//Function Number: 3 +func_0A76(param_00) +{ + if(param_00 == "axis" || param_00 == "team3" || param_00 == "allies") + { + return; + } + + var_01 = level.var_A62[param_00].var_A75; + var_02 = level.var_A62[param_00]; + var_02 notify("squad_deleting"); + while(var_02.members.size) + { + var_02.members[0] func_0A7E(var_02.members[0].team); + } + + level.var_A63[var_01] = level.var_A63[level.var_A63.size - 1]; + level.var_A63[var_01].var_A75 = var_01; + level.var_A63[level.var_A63.size - 1] = undefined; + level.var_A62[param_00] = undefined; + level notify("squad deleted " + param_00); + anim notify("squad deleted " + param_00); + for(var_03 = 0;var_03 < level.var_A63.size;var_03++) + { + level.var_A63[var_03] func_0A94(); + } +} + +//Function Number: 4 +func_0A77() +{ + var_00 = "auto" + level.var_A64; + level.var_A64++; + return var_00; +} + +//Function Number: 5 +func_0A78(param_00) +{ + if(!isdefined(param_00)) + { + if(isdefined(self.var_A79)) + { + param_00 = self.var_A79; + } + else + { + param_00 = self.team; + } + } + + if(!isdefined(level.var_A62[param_00])) + { + anim func_0A65(param_00,self); + } + + var_01 = level.var_A62[param_00]; + self.var_A7A = var_01; +} + +//Function Number: 6 +func_0A7B() +{ + self endon("death"); + wait 10; + if(!isdefined(self.var_A79)) + { + var_00 = self.team + self.script_flanker; + } + else + { + var_00 = self.var_A79 + self.script_flanker; + } + + func_0A7E(var_00); +} + +//Function Number: 7 +func_0A7D(param_00) +{ + var_01 = "allies"; + if(param_00.team == "axis" || param_00.team == "neutral" || param_00.team == "team3") + { + var_01 = param_00.team; + } + + return var_01; +} + +//Function Number: 8 +func_0A7E(param_00) +{ + if(!isdefined(param_00)) + { + if(isdefined(self.script_flanker)) + { + thread func_0A7B(); + } + + if(isdefined(self.var_A79)) + { + param_00 = self.var_A79; + } + else + { + param_00 = self.team; + } + } + + if(!isdefined(level.var_A62[param_00])) + { + anim func_0A65(param_00,self); + } + + var_01 = level.var_A62[param_00]; + if(isdefined(self.var_A7A)) + { + if(self.var_A7A == var_01) + { + return; + } + else + { + func_0A84(); + } + } + + self.var_A7F = 0; + self.var_A80 = 0; + self.var_A7A = var_01; + self.var_A81 = var_01.members.size; + var_01.members[self.var_A81] = self; + var_01.var_A6A = var_01.members.size; + if(isdefined(level.loadoutcomplete)) + { + if(self.team == "allies" && animscripts/battlechatter::func_A83()) + { + func_0A86(); + } + } + + for(var_02 = 0;var_02 < self.var_A7A.var_A6F.size;var_02++) + { + var_03 = self.var_A7A.var_A6F[var_02]; + self thread [[ var_03 ]](self.var_A7A.var_A66); + } + + thread func_0A8D(); + thread func_0A8B(); +} + +//Function Number: 9 +func_0A84() +{ + var_00 = self.var_A7A; + var_01 = -1; + if(isdefined(self)) + { + var_01 = self.var_A81; + } + else + { + for(var_02 = 0;var_02 < var_00.members.size;var_02++) + { + if(var_00.members[var_02] == self) + { + var_01 = var_02; + } + } + } + + if(var_01 != var_00.members.size - 1) + { + var_03 = var_00.members[var_00.members.size - 1]; + var_00.members[var_01] = var_03; + if(isdefined(var_03)) + { + var_03.var_A81 = var_01; + } + } + + var_00.members[var_00.members.size - 1] = undefined; + var_00.var_A6A = var_00.members.size; + if(isdefined(self.var_A85)) + { + func_0A87(); + } + + for(var_02 = 0;var_02 < self.var_A7A.var_A71.size;var_02++) + { + var_04 = self.var_A7A.var_A71[var_02]; + self thread [[ var_04 ]](var_00.var_A66); + } + + if(var_00.var_A6A == 0) + { + func_0A76(var_00.var_A66); + } + + if(isdefined(self)) + { + self.var_A7A = undefined; + self.var_A81 = undefined; + } + + self notify("removed from squad"); +} + +//Function Number: 10 +func_0A86() +{ + var_00 = self.var_A7A; + if(isdefined(self.var_A85)) + { + return; + } + + self.var_A85 = var_00.var_A6C.size; + var_00.var_A6C[self.var_A85] = self; + var_00.var_A6D = var_00.var_A6C.size; +} + +//Function Number: 11 +func_0A87() +{ + var_00 = self.var_A7A; + var_01 = -1; + if(isdefined(self)) + { + var_01 = self.var_A85; + } + else + { + for(var_02 = 0;var_02 < var_00.var_A6C.size;var_02++) + { + if(var_00.var_A6C[var_02] == self) + { + var_01 = var_02; + } + } + } + + if(var_01 != var_00.var_A6C.size - 1) + { + var_03 = var_00.var_A6C[var_00.var_A6C.size - 1]; + var_00.var_A6C[var_01] = var_03; + if(isdefined(var_03)) + { + var_03.var_A85 = var_01; + } + } + + var_00.var_A6C[var_00.var_A6C.size - 1] = undefined; + var_00.var_A6D = var_00.var_A6C.size; + if(isdefined(self)) + { + self.var_A85 = undefined; + } +} + +//Function Number: 12 +func_0A88() +{ + if(!isdefined(level.loadoutcomplete)) + { + anim waittill("loadout complete"); + } + + for(var_00 = 0;var_00 < self.members.size;var_00++) + { + if(self.members[var_00] animscripts/battlechatter::func_A83()) + { + self.members[var_00] func_0A86(); + } + } +} + +//Function Number: 13 +func_0A89() +{ + for(;;) + { + anim waittill("squadupdate",var_00); + switch(var_00) + { + case "squadlist": + func_0A94(); + break; + + case "combat": + func_0A90(); + break; + + case "origin": + updateorigin(); + break; + + case "forward": + func_0A8E(); + break; + } + } +} + +//Function Number: 14 +func_0A8A() +{ + anim endon("squad deleted " + self.var_A66); + for(;;) + { + func_0A93(); + wait 0.1; + } +} + +//Function Number: 15 +func_0A8B() +{ + self endon("removed from squad"); + self waittill("death",var_00); + if(isdefined(self)) + { + self.attacker = var_00; + } + + func_0A84(); +} + +//Function Number: 16 +func_0A8D() +{ + self endon("removed from squad"); + for(;;) + { + self waittill("enemy"); + if(!isdefined(self.enemy)) + { + self.var_A7A notify("squadupdate","combat"); + } + else + { + self.var_A7A.var_A69 = 1; + } + + wait 0.05; + } +} + +//Function Number: 17 +func_0A8E() +{ + if(isdefined(self.enemy)) + { + self.forward = vectornormalize(self.enemy.origin - self.origin); + return; + } + + var_00 = (0,0,0); + var_01 = 0; + for(var_02 = 0;var_02 < self.members.size;var_02++) + { + if(!isalive(self.members[var_02])) + { + continue; + } + + var_00 = var_00 + anglestoforward(self.members[var_02].angles); + var_01++; + } + + if(var_01) + { + self.forward = (var_00[0] / var_01,var_00[1] / var_01,var_00[2] / var_01); + return; + } + + self.forward = var_00; +} + +//Function Number: 18 +updateorigin() +{ + var_00 = (0,0,0); + var_01 = 0; + for(var_02 = 0;var_02 < self.members.size;var_02++) + { + if(!isalive(self.members[var_02])) + { + continue; + } + + var_00 = var_00 + self.members[var_02].origin; + var_01++; + } + + if(var_01) + { + self.origin = (var_00[0] / var_01,var_00[1] / var_01,var_00[2] / var_01); + return; + } + + self.origin = var_00; +} + +//Function Number: 19 +func_0A90() +{ + self.var_A69 = 0; + for(var_00 = 0;var_00 < level.var_A63.size;var_00++) + { + self.var_A6E[level.var_A63[var_00].var_A66].var_A91 = 0; + } + + for(var_00 = 0;var_00 < self.members.size;var_00++) + { + if(isdefined(self.members[var_00].enemy) && isdefined(self.members[var_00].enemy.var_A7A) && self.members[var_00].var_A80 > 0) + { + self.var_A6E[self.members[var_00].enemy.var_A7A.var_A66].var_A91 = 1; + } + } +} + +//Function Number: 20 +func_0A92() +{ + var_00 = undefined; + for(var_01 = 0;var_01 < self.members.size;var_01++) + { + if(isdefined(self.members[var_01].enemy) && isdefined(self.members[var_01].enemy.var_A7A)) + { + if(!isdefined(var_00)) + { + var_00 = self.members[var_01].enemy.var_A7A; + continue; + } + + if(self.members[var_01].enemy.var_A7A.var_A6A > var_00.var_A6A) + { + var_00 = self.members[var_01].enemy.var_A7A; + } + } + } + + self.enemy = var_00; +} + +//Function Number: 21 +func_0A93() +{ + var_00 = (0,0,0); + var_01 = 0; + var_02 = undefined; + var_03 = 0; + func_0A90(); + for(var_04 = 0;var_04 < self.members.size;var_04++) + { + if(!isalive(self.members[var_04])) + { + continue; + } + + var_00 = var_00 + self.members[var_04].origin; + var_01++; + if(isdefined(self.members[var_04].enemy) && isdefined(self.members[var_04].enemy.var_A7A)) + { + if(!isdefined(var_02)) + { + var_02 = self.members[var_04].enemy.var_A7A; + continue; + } + + if(self.members[var_04].enemy.var_A7A.var_A6A > var_02.var_A6A) + { + var_02 = self.members[var_04].enemy.var_A7A; + } + } + } + + if(var_01) + { + self.origin = (var_00[0] / var_01,var_00[1] / var_01,var_00[2] / var_01); + } + else + { + self.origin = var_00; + } + + self.var_A69 = var_03; + self.enemy = var_02; + func_0A8E(); +} + +//Function Number: 22 +func_0A94() +{ + for(var_00 = 0;var_00 < level.var_A63.size;var_00++) + { + if(!isdefined(self.var_A6E[level.var_A63[var_00].var_A66])) + { + self.var_A6E[level.var_A63[var_00].var_A66] = spawnstruct(); + self.var_A6E[level.var_A63[var_00].var_A66].var_A91 = 0; + } + + for(var_01 = 0;var_01 < self.var_A73.size;var_01++) + { + var_02 = self.var_A73[var_01]; + self thread [[ var_02 ]](level.var_A63[var_00].var_A66); + } + } +} + +//Function Number: 23 +func_0A95(param_00,param_01,param_02,param_03) +{ + self endon("death"); + if(!isdefined(param_02)) + { + param_02 = (0,0,0); + } + + if(!isdefined(param_03)) + { + param_03 = (1,0,0); + } + + for(var_04 = 0;var_04 < param_01 * 2;var_04++) + { + if(!isalive(self)) + { + return; + } + + var_05 = self getshootatpos() + (0,0,10) + param_02; + wait 0.05; + } +} + +//Function Number: 24 +func_0A96(param_00) +{ + switch(param_00) + { + case "move": + case "combat": + case "death": + case "stop": + self.a.var_A98 = param_00; + break; + + case "grenadecower": + case "pain": + break; + + case "stalingrad_cover_crouch": + case "concealment_stand": + case "concealment_prone": + case "concealment_crouch": + case "cover_wide_right": + case "cover_wide_left": + case "cover_prone": + case "cover_stand": + case "cover_left": + case "cover_crouch": + case "cover_right": + self.a.var_A98 = "cover"; + break; + + case "l33t truckride combat": + case "aim": + self.a.var_A98 = "combat"; + break; + } +} + +//Function Number: 25 +func_0A99() +{ + func_0AA4("combat"); + func_0AA4("cover"); + func_0AA4("move"); + func_0AA4("stop"); + func_0AA4("death"); + func_0AA4("suppressed"); + func_0AA4("attacking"); + for(var_00 = 0;var_00 < self.members.size;var_00++) + { + if(!isalive(self.members[var_00])) + { + continue; + } + + func_0AA5(self.members[var_00]); + func_0AA6(self.members[var_00],"suppressed"); + func_0AA6(self.members[var_00],"combat"); + func_0AA6(self.members[var_00],"attacking"); + func_0AA6(self.members[var_00],"cover"); + } +} + +//Function Number: 26 +func_0A9A() +{ + anim endon("squad deleted " + self.var_A66); + var_00 = 0.05; + for(;;) + { + for(var_01 = 0;var_01 < self.members.size;var_01++) + { + if(!isalive(self.members[var_01])) + { + continue; + } + + self.members[var_01] func_0A9B(var_00); + self.members[var_01] func_0A9C(var_00); + } + + wait var_00; + } +} + +//Function Number: 27 +func_0A9B(param_00) +{ + if(isdefined(self.lastenemysightpos)) + { + if(self.var_A80 < 0) + { + self.var_A80 = param_00; + } + else + { + self.var_A80 = self.var_A80 + param_00; + } + + self.var_A7F = gettime(); + return; + } + else if(self issuppressed()) + { + self.var_A80 = self.var_A80 + param_00; + return; + } + + if(self.var_A80 > 0) + { + self.var_A80 = 0 - param_00; + return; + } + + self.var_A80 = self.var_A80 - param_00; +} + +//Function Number: 28 +func_0A9C(param_00) +{ + if(self.var_A9D) + { + if(self.var_A9E < 0) + { + self.var_A9E = param_00; + } + else + { + self.var_A9E = self.var_A9E + param_00; + } + + return; + } + + if(self.var_A9E > 0) + { + self.var_A9E = 0 - param_00; + return; + } + + self.var_A9E = self.var_A9E - param_00; +} + +//Function Number: 29 +func_0A9F(param_00,param_01) +{ + self.var_AA0[param_00] = spawnstruct(); + self.var_AA0[param_00].var_AA1 = param_01; + self.var_AA0[param_00].var_AA2 = 0; + self.var_AA0[param_00].var_AA3 = 0; +} + +//Function Number: 30 +func_0AA4(param_00) +{ + self.var_AA0[param_00].var_AA2 = 0; + self.var_AA0[param_00].var_AA3 = 0; +} + +//Function Number: 31 +func_0AA5(param_00) +{ + self.var_AA0[param_00.a.var_A98].var_AA3++; + if(self.var_AA0[param_00.a.var_A98].var_AA3 > self.var_AA0[param_00.a.var_A98].var_AA1 * self.members.size) + { + self.var_AA0[param_00.a.var_A98].var_AA2 = 1; + } +} + +//Function Number: 32 +func_0AA6(param_00,param_01) +{ + switch(param_01) + { + case "suppressed": + if(param_00.var_A9E > 1) + { + self.var_AA0[param_01].var_AA3++; + } + break; + + case "combat": + if(param_00.var_A80 > 0) + { + self.var_AA0[param_01].var_AA3++; + } + break; + + case "attacking": + if(gettime() < param_00.a.lastshoottime + 2000) + { + self.var_AA0[param_01].var_AA3++; + } + break; + + case "cover": + if(!param_00 animscripts/battlechatter::func_AA8()) + { + self.var_AA0[param_01].var_AA3++; + } + break; + } + + if(self.var_AA0[param_01].var_AA3 > self.var_AA0[param_01].var_AA1 * self.members.size) + { + self.var_AA0[param_01].var_AA2 = 1; + } +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/stop.gsc b/MW3/PC/SP/animscripts/stop.gsc new file mode 100644 index 0000000..1b1f1ef --- /dev/null +++ b/MW3/PC/SP/animscripts/stop.gsc @@ -0,0 +1,258 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\stop.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 9 + * Decompile Time: 165 ms + * Timestamp: 10/27/2023 2:18:50 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(isdefined(self.var_10EF)) + { + return; + } + + if(isdefined(self.onsnowmobile)) + { + animscripts/snowmobile::main(); + return; + } + + if(isdefined(self.custom_animscript_table)) + { + if(isdefined(self.custom_animscript_table["stop"])) + { + [[ self.custom_animscript_table["stop"] ]](); + return; + } + } + + self notify("stopScript"); + self endon("killanimscript"); + [[ self.var_8BE["stop_immediate"] ]](); + thread func_1104(); + animscripts/utility::func_D15("stop"); + func_10F5(); + animscripts/utility::func_10F0(); + thread func_10F3(); + thread animscripts/reactions::func_F20(); + var_00 = isdefined(self.var_C89); + if(!var_00) + { + if(self.a.weaponpos["right"] == "none" && self.a.weaponpos["left"] == "none") + { + var_00 = 1; + } + else if(angleclamp180(self getmuzzleangle()[0]) > 20) + { + var_00 = 1; + } + } + + for(;;) + { + var_01 = func_10F8(); + if(var_01 == "prone") + { + var_00 = 1; + func_1102(); + continue; + } + + if(self.a.pose != var_01) + { + self clearanim(%root,0.3); + var_00 = 0; + } + + animscripts/setposemovement::func_10F1(var_01,"stop"); + if(!var_00) + { + func_10F9(var_01,self.a.var_10F2); + var_00 = 1; + continue; + } + + func_10FB(var_01,self.a.var_10F2); + } +} + +//Function Number: 2 +func_10F3() +{ + self endon("death"); + self waittill("killanimscript"); + self.var_10F4 = gettime(); +} + +//Function Number: 3 +func_10F5() +{ + self endon("stop_specialidle"); + if(isdefined(self.specialidleanim)) + { + var_00 = self.specialidleanim; + self.specialidleanim = undefined; + self notify("clearing_specialIdleAnim"); + self animmode("gravity"); + self orientmode("face current"); + self clearanim(%root,0.2); + for(;;) + { + self setflaggedanimrestart("special_idle",var_00[randomint(var_00.size)],1,0.2,self.var_10F7); + self waittillmatch("end","special_idle"); + } + } +} + +//Function Number: 4 +func_10F8() +{ + var_00 = animscripts/utility::func_BEE(); + if(isdefined(var_00)) + { + var_01 = var_00.angles[1]; + var_02 = var_00.type; + } + else + { + var_01 = self.var_72B; + var_02 = "node was undefined"; + } + + animscripts/face::func_C45(level.var_C3D); + var_03 = animscripts/utility::func_10AF(); + if(var_02 == "Cover Stand" || var_02 == "Conceal Stand") + { + var_03 = animscripts/utility::func_10AF("stand"); + } + else if(var_02 == "Cover Crouch" || var_02 == "Conceal Crouch") + { + var_03 = animscripts/utility::func_10AF("crouch"); + } + else if(var_02 == "Cover Prone" || var_02 == "Conceal Prone") + { + var_03 = animscripts/utility::func_10AF("prone"); + } + + return var_03; +} + +//Function Number: 5 +func_10F9(param_00,param_01) +{ + if(animscripts/utility::func_C98() && self.a.pose == "stand") + { + param_00 = "stand_cqb"; + } + + if(isdefined(level.var_10FA[param_00])) + { + var_02 = level.var_10FA[param_00]["in"]; + self setflaggedanimknoballrestart("idle_transition",var_02,%body,1,0.2,self.var_10F7); + animscripts/shared::donotetracks("idle_transition"); + } +} + +//Function Number: 6 +func_10FB(param_00,param_01) +{ + if(animscripts/utility::func_C98() && self.a.pose == "stand") + { + param_00 = "stand_cqb"; + } + + var_02 = undefined; + if(isdefined(self.var_C89) && isdefined(self.var_C89[param_00])) + { + var_03 = self.var_C89[param_00]; + var_04 = param_00 + "_add"; + if(isdefined(self.var_C89[var_04])) + { + var_02 = self.var_C89[var_04]; + } + } + else if(isdefined(level.var_10FC) && param_01 == "stand" || param_01 == "stand_cqb" && isdefined(self.busereadyidle) && self.busereadyidle == 1) + { + var_03 = animscripts/utility::func_10FF(level.var_10FC["stand"][0],level.var_10FE["stand"][0]); + } + else + { + var_02 = var_02 % level.var_1100[param_01].size; + var_03 = animscripts/utility::func_10FF(level.var_1100[param_01][var_02],level.var_1101[param_01][var_02]); + } + + var_05 = 0.2; + if(gettime() == self.a.var_1019) + { + var_05 = 0.5; + } + + if(isdefined(var_02)) + { + self setanimknoball(var_03,%body,1,var_05,1); + self setanim(%add_idle); + self setflaggedanimknoballrestart("idle",var_02,%add_idle,1,var_05,self.var_10F7); + } + else + { + self setflaggedanimknoballrestart("idle",var_03,%body,1,var_05,self.var_10F7); + } + + animscripts/shared::donotetracks("idle"); +} + +//Function Number: 7 +func_1102() +{ + if(self.a.pose != "prone") + { + var_00["stand_2_prone"] = %stand_2_prone; + var_01 = var_7B[self.a.pose + "_2_prone"]; + self setflaggedanimknoballrestart("trans",var_01,%body,1,0.2,1); + animscripts/shared::donotetracks("trans"); + self.a.movement = "stop"; + self setproneanimnodes(-45,45,%prone_legs_down,%exposed_modern,%prone_legs_up); + return; + } + + thread func_1103(); + if(randomint(10) < 3) + { + var_02 = []; + var_03 = var_02[randomint(var_02.size)]; + self setflaggedanimknoball("prone_idle",var_03,%exposed_modern,1,0.2); + } + else + { + self setanimknoball(%prone_aim_5,%exposed_modern,1,0.2); + self setflaggedanimknob("prone_idle",%prone_idle,1,0.2); + } + + self waittillmatch(%crouch_2_prone,var_7B["crouch_2_prone"],%prone_twitch_ammocheck,var_7B[0],%prone_twitch_look,var_7B[1],%prone_twitch_scan,var_7B[2],%prone_twitch_lookfast,var_7B[3],%prone_twitch_lookup,var_7B[4],"end","prone_idle"); + self notify("kill UpdateProneThread"); +} + +//Function Number: 8 +func_1103() +{ + self endon("killanimscript"); + self endon("kill UpdateProneThread"); + for(;;) + { + animscripts/cover_prone::func_10E2(0.1); + wait 0.1; + } +} + +//Function Number: 9 +func_1104() +{ + self endon("killanimscript"); + wait 0.05; + [[ self.var_8BE["stop"] ]](); +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/track.gsc b/MW3/PC/SP/animscripts/track.gsc new file mode 100644 index 0000000..3832f39 --- /dev/null +++ b/MW3/PC/SP/animscripts/track.gsc @@ -0,0 +1,335 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\track.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 9 + * Decompile Time: 177 ms + * Timestamp: 10/27/2023 2:18:51 AM +*******************************************************************/ + +//Function Number: 1 +func_0CA9() +{ + self endon("killanimscript"); + self endon("stop tracking"); + self endon("melee"); + func_0CAA(%aim_2,%aim_4,%aim_6,%aim_8); +} + +//Function Number: 2 +func_0CAA(param_00,param_01,param_02,param_03) +{ + var_04 = 0; + var_05 = 0; + var_06 = (0,0,0); + var_07 = 1; + var_08 = 0; + var_09 = 0; + var_0A = 10; + var_0B = (0,0,0); + if(self.type == "dog") + { + var_0C = 0; + self.var_CAB = self.enemy; + } + else + { + var_0C = 1; + var_0D = 0; + var_0E = 0; + if(isdefined(self.var_CAC)) + { + var_0D = level.var_CAD; + } + + if((self.script == "cover_left" || self.script == "cover_right") && isdefined(self.a.var_CAE) && self.a.var_CAE == "lean") + { + var_0E = self.var_CAF.angles[1] - self.angles[1]; + } + + var_0B = (var_0D,var_0E,0); + } + + for(;;) + { + func_0CC9(); + var_0F = animscripts/shared::func_CB0(); + var_10 = self.var_CB1; + if(isdefined(self.var_CAB)) + { + var_10 = self.var_CAB getshootatpos(); + } + + if(!isdefined(var_10) && animscripts/utility::func_CB2()) + { + var_10 = func_0CB6(var_0F); + } + + var_11 = isdefined(self.onsnowmobile) || isdefined(self.onatv); + var_12 = isdefined(var_10); + var_13 = (0,0,0); + if(var_12) + { + var_13 = var_10; + } + + var_14 = 0; + var_15 = isdefined(self.var_CB5); + if(var_15) + { + var_14 = self.var_CB5; + } + + var_06 = self getaimangle(var_0F,var_13,var_12,var_0B,var_14,var_15,var_11); + var_16 = var_06[0]; + var_17 = var_06[1]; + var_06 = undefined; + if(var_09 > 0) + { + var_09 = var_09 - 1; + var_0A = max(10,var_0A - 5); + } + else if(self.var_783 && self.var_783 != var_08) + { + var_09 = 2; + var_0A = 30; + } + else + { + var_0A = 10; + } + + var_18 = squared(var_0A); + var_08 = self.var_783; + var_19 = self.movemode != "stop" || !var_07; + if(var_19) + { + var_1A = var_17 - var_04; + if(squared(var_1A) > var_18) + { + var_17 = var_04 + clamp(var_1A,-1 * var_0A,var_0A); + var_17 = clamp(var_17,self.var_717,self.var_716); + } + + var_1B = var_16 - var_05; + if(squared(var_1B) > var_18) + { + var_16 = var_05 + clamp(var_1B,-1 * var_0A,var_0A); + var_16 = clamp(var_16,self.var_715,self.var_714); + } + } + + var_07 = 0; + var_04 = var_17; + var_05 = var_16; + func_0CC2(param_00,param_01,param_02,param_03,var_16,var_17); + wait 0.05; + } +} + +//Function Number: 3 +func_0CB6(param_00) +{ + var_01 = undefined; + var_02 = anglestoforward(self.angles); + if(isdefined(self.cqb_target)) + { + var_01 = self.cqb_target getshootatpos(); + if(isdefined(self.var_CB8)) + { + if(vectordot(vectornormalize(var_01 - param_00),var_02) < 0.177) + { + var_01 = undefined; + } + } + else if(vectordot(vectornormalize(var_01 - param_00),var_02) < 0.643) + { + var_01 = undefined; + } + } + + if(!isdefined(var_01) && isdefined(self.cqb_point_of_interest)) + { + var_01 = self.cqb_point_of_interest; + if(isdefined(self.var_CBA)) + { + if(vectordot(vectornormalize(var_01 - param_00),var_02) < 0.177) + { + var_01 = undefined; + } + } + else if(vectordot(vectornormalize(var_01 - param_00),var_02) < 0.643) + { + var_01 = undefined; + } + } + + return var_01; +} + +//Function Number: 4 +func_0CBB(param_00,param_01) +{ + if(animscripts/utility::func_CBC()) + { + var_02 = self.enemy getshootatpos() - self.enemy.origin; + var_03 = self lastknownpos(self.enemy) + var_02; + return func_0CBE(var_03 - param_00,param_01); + } + + var_04 = 0; + var_05 = 0; + if(isdefined(self.node) && isdefined(level.var_CBD[self.node.type]) && distancesquared(self.origin,self.node.origin) < 16) + { + var_05 = angleclamp180(self.angles[1] - self.node.angles[1]); + } + else + { + var_06 = self getanglestolikelyenemypath(); + if(isdefined(var_06)) + { + var_05 = angleclamp180(self.angles[1] - var_06[1]); + var_04 = angleclamp180(360 - var_06[0]); + } + } + + return (var_04,var_05,0); +} + +//Function Number: 5 +func_0CBE(param_00,param_01) +{ + var_02 = vectortoangles(param_00); + var_03 = 0; + var_04 = 0; + if(self.var_786 == "up") + { + var_03 = -40; + } + else if(self.var_786 == "down") + { + var_03 = 40; + var_04 = 12; + } + + var_05 = 360 - var_02[0]; + var_05 = angleclamp180(var_05 + param_01[0] + var_03); + if(isdefined(self.var_CB5)) + { + var_06 = self.var_CB5 - var_02[1]; + } + else + { + var_07 = angleclamp180(self.var_72B - self.angles[1]) * 0.5; + var_06 = var_07 + self.angles[1] - var_02[1]; + } + + var_06 = angleclamp180(var_06 + param_01[1] + var_04); + return (var_05,var_06,0); +} + +//Function Number: 6 +func_0CBF(param_00,param_01,param_02) +{ + if(isdefined(self.onsnowmobile) || isdefined(self.onatv)) + { + if(param_01 > self.var_716 || param_01 < self.var_717) + { + param_01 = 0; + } + + if(param_00 > self.var_714 || param_00 < self.var_715) + { + param_00 = 0; + } + } + else if(param_02 && abs(param_01) > level.var_CC0 || abs(param_00) > level.var_CC1) + { + param_01 = 0; + param_00 = 0; + } + else + { + if(self.var_782) + { + param_01 = clamp(param_01,-10,10); + } + else + { + param_01 = clamp(param_01,self.var_717,self.var_716); + } + + param_00 = clamp(param_00,self.var_715,self.var_714); + } + + return (param_00,param_01,0); +} + +//Function Number: 7 +func_0CC2(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if(param_05 > 0) + { + var_06 = param_05 / self.var_716 * self.a.var_CC3; + self setanimlimited(param_01,0,0.1,1,1); + self setanimlimited(param_02,var_06,0.1,1,1); + } + else if(param_05 < 0) + { + var_06 = param_05 / self.var_717 * self.a.var_CC3; + self setanimlimited(param_02,0,0.1,1,1); + self setanimlimited(param_01,var_06,0.1,1,1); + } + + if(param_04 > 0) + { + var_06 = param_04 / self.var_714 * self.a.var_CC3; + self setanimlimited(param_00,0,0.1,1,1); + self setanimlimited(param_03,var_06,0.1,1,1); + return; + } + + if(param_04 < 0) + { + var_06 = param_04 / self.var_715 * self.a.var_CC3; + self setanimlimited(param_03,0,0.1,1,1); + self setanimlimited(param_00,var_06,0.1,1,1); + } +} + +//Function Number: 8 +func_0CC4(param_00,param_01) +{ + if(!isdefined(param_01) || param_01 <= 0) + { + self.a.var_CC3 = param_00; + self.a.var_CC5 = param_00; + self.a.var_CC6 = param_00; + self.a.var_CC7 = 0; + } + else + { + if(!isdefined(self.a.var_CC3)) + { + self.a.var_CC3 = 0; + } + + self.a.var_CC5 = self.a.var_CC3; + self.a.var_CC6 = param_00; + self.a.var_CC7 = int(param_01 * 20); + } + + self.a.var_CC8 = 0; +} + +//Function Number: 9 +func_0CC9() +{ + if(self.a.var_CC8 < self.a.var_CC7) + { + self.a.var_CC8++; + var_00 = 1 * self.a.var_CC8 / self.a.var_CC7; + self.a.var_CC3 = self.a.var_CC5 * 1 - var_00 + self.a.var_CC6 * var_00; + } +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/traverse/crawl.gsc b/MW3/PC/SP/animscripts/traverse/crawl.gsc new file mode 100644 index 0000000..4a9f96b --- /dev/null +++ b/MW3/PC/SP/animscripts/traverse/crawl.gsc @@ -0,0 +1,24 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\crawl.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 30 ms + * Timestamp: 10/27/2023 2:17:19 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + animscripts/setposemovement::func_FC1(); + animscripts/utility::func_247B(); + self endon("killanimscript"); + self traversemode("noclip"); + var_00 = self getnegotiationstartnode(); + self orientmode("face angle",var_00.angles[1]); + self setflaggedanimknoballrestart("crawlanim",%prone_crawl,%body,1,0.1,1); + animscripts/shared::donotetracks("crawlanim"); + self.a.movement = "run"; + self.a.pose = "crouch"; +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/traverse/crouch_jump_down_40.gsc b/MW3/PC/SP/animscripts/traverse/crouch_jump_down_40.gsc new file mode 100644 index 0000000..76e900c --- /dev/null +++ b/MW3/PC/SP/animscripts/traverse/crouch_jump_down_40.gsc @@ -0,0 +1,25 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\crouch_jump_down_40.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 33 ms + * Timestamp: 10/27/2023 2:17:19 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self.desired_anim_pose = "crouch"; + animscripts/utility::func_247B(); + self endon("killanimscript"); + self.a.movement = "walk"; + self traversemode("nogravity"); + var_00 = self getnegotiationstartnode(); + self orientmode("face angle",var_00.angles[1]); + self setflaggedanimknoballrestart("stepanim",%jump_across_72,%body,1,0.1,1); + wait 0.15; + self traversemode("gravity"); + animscripts/shared::donotetracks("stepanim"); +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/traverse/duck_under_56.gsc b/MW3/PC/SP/animscripts/traverse/duck_under_56.gsc new file mode 100644 index 0000000..5efc3ce --- /dev/null +++ b/MW3/PC/SP/animscripts/traverse/duck_under_56.gsc @@ -0,0 +1,25 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\duck_under_56.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 41 ms + * Timestamp: 10/27/2023 2:17:20 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self.desired_anim_pose = "stand"; + animscripts/utility::func_247B(); + self endon("killanimscript"); + self traversemode("nogravity"); + self traversemode("noclip"); + var_00 = self getnegotiationstartnode(); + self orientmode("face angle",var_00.angles[1]); + self setflaggedanimknoballrestart("jumpanim",%gulag_pipe_traverse,%body,1,0.1,1); + self waittillmatch("finish","jumpanim"); + self traversemode("gravity"); + animscripts/shared::donotetracks("jumpanim"); +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/traverse/fence_climb.gsc b/MW3/PC/SP/animscripts/traverse/fence_climb.gsc new file mode 100644 index 0000000..e86b875 --- /dev/null +++ b/MW3/PC/SP/animscripts/traverse/fence_climb.gsc @@ -0,0 +1,24 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\fence_climb.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 31 ms + * Timestamp: 10/27/2023 2:17:20 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self.desired_anim_pose = "crouch"; + animscripts/utility::func_247B(); + self endon("killanimscript"); + self traversemode("nogravity"); + self traversemode("noclip"); + var_00 = self getnegotiationstartnode(); + self orientmode("face angle",var_00.angles[1]); + self setflaggedanimknoballrestart("diveanim",%fenceclimb,%body,1,0.1,1); + animscripts/shared::donotetracks("diveanim"); + self traversemode("gravity"); +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/traverse/jump_across_100.gsc b/MW3/PC/SP/animscripts/traverse/jump_across_100.gsc new file mode 100644 index 0000000..647bb61 --- /dev/null +++ b/MW3/PC/SP/animscripts/traverse/jump_across_100.gsc @@ -0,0 +1,31 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\jump_across_100.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 35 ms + * Timestamp: 10/27/2023 2:17:21 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(self.type == "dog") + { + animscripts/traverse/shared::func_176("window_40",20); + return; + } + + self.desired_anim_pose = "stand"; + animscripts/utility::func_247B(); + self endon("killanimscript"); + self traversemode("nogravity"); + self traversemode("noclip"); + var_00 = self getnegotiationstartnode(); + self orientmode("face angle",var_00.angles[1]); + var_01 = []; + var_02 = var_7B[randomint(var_7B.size)]; + self setflaggedanimknoballrestart("jumpanim",var_02,%body,1,0.1,1); + animscripts/shared::donotetracks("jumpanim"); +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/traverse/jump_across_72.gsc b/MW3/PC/SP/animscripts/traverse/jump_across_72.gsc new file mode 100644 index 0000000..d94b3dc --- /dev/null +++ b/MW3/PC/SP/animscripts/traverse/jump_across_72.gsc @@ -0,0 +1,31 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\jump_across_72.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 28 ms + * Timestamp: 10/27/2023 2:17:21 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(self.type == "dog") + { + animscripts/traverse/shared::func_176("wallhop",20); + return; + } + + self.desired_anim_pose = "stand"; + animscripts/utility::func_247B(); + self endon("killanimscript"); + self traversemode("nogravity"); + self traversemode("noclip"); + var_00 = self getnegotiationstartnode(); + self orientmode("face angle",var_00.angles[1]); + self setflaggedanimknoballrestart("jumpanim",%jump_across_72,%body,1,0.1,1); + self waittillmatch("gravity on","jumpanim"); + self traversemode("gravity"); + animscripts/shared::donotetracks("jumpanim"); +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/traverse/jump_over_high_wall.gsc b/MW3/PC/SP/animscripts/traverse/jump_over_high_wall.gsc new file mode 100644 index 0000000..203ae90 --- /dev/null +++ b/MW3/PC/SP/animscripts/traverse/jump_over_high_wall.gsc @@ -0,0 +1,31 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\jump_over_high_wall.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 31 ms + * Timestamp: 10/27/2023 2:17:22 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self.desired_anim_pose = "crouch"; + animscripts/utility::func_247B(); + self endon("killanimscript"); + self traversemode("nogravity"); + self traversemode("noclip"); + var_00 = self getnegotiationstartnode(); + self orientmode("face angle",var_00.angles[1]); + self clearanim(%stand_and_crouch,0.1); + self setflaggedanimknoballrestart("diveanim",%jump_over_high_wall,%body,1,0.1,1); + self playsound("dive_wall"); + self waittillmatch("gravity on","diveanim"); + self traversemode("nogravity"); + self waittillmatch("noclip","diveanim"); + self traversemode("noclip"); + self waittillmatch("gravity on","diveanim"); + self traversemode("gravity"); + animscripts/shared::donotetracks("diveanim"); +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/traverse/jump_up_80.gsc b/MW3/PC/SP/animscripts/traverse/jump_up_80.gsc new file mode 100644 index 0000000..d86178c --- /dev/null +++ b/MW3/PC/SP/animscripts/traverse/jump_up_80.gsc @@ -0,0 +1,25 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\jump_up_80.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 31 ms + * Timestamp: 10/27/2023 2:17:22 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self endon("killanimscript"); + self traversemode("nogravity"); + self traversemode("noclip"); + var_00 = self getnegotiationstartnode(); + self orientmode("face angle",var_00.angles[1]); + var_01 = var_00.traverse_height - var_00.origin[2]; + thread animscripts/traverse/shared::func_3FE7(var_01 - 80); + self clearanim(%root,0.2); + self setflaggedanimrestart("jump_up_80",level.var_3AF6["jump_up_80"],1,0.2,1); + animscripts/shared::donotetracks("jump_up_80"); + self.var_3B58 = 1; +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/traverse/jumpdown_130.gsc b/MW3/PC/SP/animscripts/traverse/jumpdown_130.gsc new file mode 100644 index 0000000..6348d5e --- /dev/null +++ b/MW3/PC/SP/animscripts/traverse/jumpdown_130.gsc @@ -0,0 +1,28 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\jumpdown_130.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 56 ms + * Timestamp: 10/27/2023 2:17:22 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(self.type == "dog") + { + animscripts/traverse/shared::func_3FF8(7,0.7); + return; + } + + func_4009(); +} + +//Function Number: 2 +func_4009() +{ + var_00 = []; + animscripts/traverse/shared::func_3FEB(var_7B); +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/traverse/jumpdown_40.gsc b/MW3/PC/SP/animscripts/traverse/jumpdown_40.gsc new file mode 100644 index 0000000..19c1c3c --- /dev/null +++ b/MW3/PC/SP/animscripts/traverse/jumpdown_40.gsc @@ -0,0 +1,28 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\jumpdown_40.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 45 ms + * Timestamp: 10/27/2023 2:17:23 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(self.type == "dog") + { + animscripts/traverse/shared::func_3FF8(3,1); + return; + } + + func_4003(); +} + +//Function Number: 2 +func_4003() +{ + var_00 = []; + animscripts/traverse/shared::func_3FEB(var_7B); +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/traverse/jumpdown_56.gsc b/MW3/PC/SP/animscripts/traverse/jumpdown_56.gsc new file mode 100644 index 0000000..74090b4 --- /dev/null +++ b/MW3/PC/SP/animscripts/traverse/jumpdown_56.gsc @@ -0,0 +1,28 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\jumpdown_56.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 48 ms + * Timestamp: 10/27/2023 2:17:23 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(self.type == "dog") + { + animscripts/traverse/shared::func_3FF8(5,1); + return; + } + + func_4003(); +} + +//Function Number: 2 +func_4003() +{ + var_00 = []; + animscripts/traverse/shared::func_3FEB(var_7B); +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/traverse/jumpdown_96.gsc b/MW3/PC/SP/animscripts/traverse/jumpdown_96.gsc new file mode 100644 index 0000000..8aec178 --- /dev/null +++ b/MW3/PC/SP/animscripts/traverse/jumpdown_96.gsc @@ -0,0 +1,28 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\jumpdown_96.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 56 ms + * Timestamp: 10/27/2023 2:17:24 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(self.type == "dog") + { + animscripts/traverse/shared::func_3FF8(7,0.8); + return; + } + + func_4003(); +} + +//Function Number: 2 +func_4003() +{ + var_00 = []; + animscripts/traverse/shared::func_3FEB(var_7B); +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/traverse/ladder_down.gsc b/MW3/PC/SP/animscripts/traverse/ladder_down.gsc new file mode 100644 index 0000000..b2a6366 --- /dev/null +++ b/MW3/PC/SP/animscripts/traverse/ladder_down.gsc @@ -0,0 +1,40 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\ladder_down.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 29 ms + * Timestamp: 10/27/2023 2:17:24 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self.desired_anim_pose = "crouch"; + animscripts/utility::func_247B(); + self endon("killanimscript"); + self traversemode("nogravity"); + self traversemode("noclip"); + var_00 = self getnegotiationendnode(); + var_01 = var_00.origin; + var_02 = self getnegotiationstartnode(); + self orientmode("face angle",var_02.angles[1]); + var_03 = 1; + if(isdefined(self.moveplaybackrate)) + { + var_03 = self.moveplaybackrate; + } + + self setflaggedanimknoballrestart("climbanim",%ladder_climbon,%body,1,0.1,var_03); + animscripts/shared::donotetracks("climbanim"); + var_04 = %ladder_climbdown; + self setflaggedanimknoballrestart("climbanim",var_04,%body,1,0.1,var_03); + var_05 = getmovedelta(var_04,0,1); + var_06 = var_05[2] * var_03 / getanimlength(var_04); + var_07 = var_01[2] - self.origin[2] / var_06; + animscripts/notetracks::func_D4F(var_07,"climbanim"); + self traversemode("gravity"); + self.a.movement = "stop"; + self.a.pose = "stand"; +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/traverse/ladder_up.gsc b/MW3/PC/SP/animscripts/traverse/ladder_up.gsc new file mode 100644 index 0000000..0baceb9 --- /dev/null +++ b/MW3/PC/SP/animscripts/traverse/ladder_up.gsc @@ -0,0 +1,51 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\ladder_up.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 30 ms + * Timestamp: 10/27/2023 2:17:25 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(isdefined(self.type) && self.type == "dog") + { + return; + } + + self.desired_anim_pose = "crouch"; + animscripts/utility::func_247B(); + self endon("killanimscript"); + self traversemode("noclip"); + var_00 = %ladder_climbup; + var_01 = %ladder_climboff; + var_02 = self getnegotiationstartnode(); + self orientmode("face angle",var_02.angles[1]); + var_03 = 1; + if(isdefined(self.moveplaybackrate)) + { + var_03 = self.moveplaybackrate; + } + + self setflaggedanimknoballrestart("climbanim",var_00,%body,1,0.1,var_03); + var_04 = getmovedelta(var_01,0,1); + var_05 = self getnegotiationendnode(); + var_06 = var_05.origin - var_04 + (0,0,1); + var_07 = getmovedelta(var_00,0,1); + var_08 = var_07[2] * var_03 / getanimlength(var_00); + var_09 = var_06[2] - self.origin[2] / var_08; + if(var_09 > 0) + { + self.allowpain = 1; + animscripts/notetracks::func_D4F(var_09,"climbanim"); + self setflaggedanimknoballrestart("climbanim",var_01,%body,1,0.1,var_03); + animscripts/shared::donotetracks("climbanim"); + } + + self traversemode("gravity"); + self.a.movement = "run"; + self.a.pose = "crouch"; +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/traverse/shared.gsc b/MW3/PC/SP/animscripts/traverse/shared.gsc new file mode 100644 index 0000000..ec6d190 --- /dev/null +++ b/MW3/PC/SP/animscripts/traverse/shared.gsc @@ -0,0 +1,340 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\shared.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 14 + * Decompile Time: 262 ms + * Timestamp: 10/27/2023 2:17:26 AM +*******************************************************************/ + +//Function Number: 1 +func_3FE6(param_00,param_01) +{ + self.desired_anim_pose = "crouch"; + animscripts/utility::func_247B(); + self endon("killanimscript"); + self traversemode("nogravity"); + self traversemode("noclip"); + var_02 = self getnegotiationstartnode(); + self orientmode("face angle",var_02.angles[1]); + var_03 = var_02.traverse_height - var_02.origin[2]; + thread func_3FE7(var_03 - param_01); + var_04 = 0.15; + self clearanim(%body,var_04); + self setflaggedanimknoballrestart("traverse",param_00,%root,1,var_04,1); + var_05 = 0.2; + var_06 = 0.2; + thread animscripts/notetracks::func_239E("traverse","no clear"); + if(!animhasnotetrack(param_00,"gravity on")) + { + var_07 = 1.23; + wait var_07 - var_05; + self traversemode("gravity"); + wait var_05; + return; + } + + self waittillmatch("gravity on","traverse"); + self traversemode("gravity"); + if(!animhasnotetrack(param_00,"blend")) + { + wait var_05; + return; + } + + self waittillmatch("blend","traverse"); +} + +//Function Number: 2 +func_3FE7(param_00) +{ + self endon("killanimscript"); + self notify("endTeleportThread"); + self endon("endTeleportThread"); + var_01 = 5; + var_02 = (0,0,param_00 / var_01); + for(var_03 = 0;var_03 < var_01;var_03++) + { + self forceteleport(self.origin + var_02); + wait 0.05; + } +} + +//Function Number: 3 +func_3FE8(param_00,param_01,param_02,param_03) +{ + self endon("killanimscript"); + self notify("endTeleportThread"); + self endon("endTeleportThread"); + if(param_00 == 0 || param_02 <= 0) + { + return; + } + + if(param_01 > 0) + { + wait param_01; + } + + var_04 = (0,0,param_00 / param_02); + if(isdefined(param_03) && param_03 < 1) + { + self setflaggedanimknoball("traverseAnim",self.var_3FEA,self.var_3FE9,1,0.2,param_03); + } + + for(var_05 = 0;var_05 < param_02;var_05++) + { + self forceteleport(self.origin + var_04); + wait 0.05; + } + + if(isdefined(param_03) && param_03 < 1) + { + self setflaggedanimknoball("traverseAnim",self.var_3FEA,self.var_3FE9,1,0.2,1); + } +} + +//Function Number: 4 +func_3FEB(param_00) +{ + self endon("killanimscript"); + self.desired_anim_pose = "stand"; + animscripts/utility::func_247B(); + var_01 = self getnegotiationstartnode(); + var_02 = self getnegotiationendnode(); + self orientmode("face angle",var_01.angles[1]); + self.var_3FEC = param_00["traverseHeight"]; + self.var_3FED = var_01; + var_03 = param_00["traverseAnim"]; + var_04 = param_00["traverseToCoverAnim"]; + self traversemode("nogravity"); + self traversemode("noclip"); + self.var_3FEE = self.origin[2]; + if(!animhasnotetrack(var_03,"traverse_align")) + { + func_3FF3(); + } + + var_05 = 0; + if(isdefined(var_04) && isdefined(self.node) && self.node.type == param_00["coverType"] && distancesquared(self.node.origin,var_02.origin) < 625) + { + if(animscripts/utility::func_D61(self.node.angles[1] - var_02.angles[1]) > 160) + { + var_05 = 1; + var_03 = var_04; + } + } + + if(var_05) + { + if(isdefined(param_00["traverseToCoverSound"])) + { + thread maps\_utility::play_sound_on_entity(param_00["traverseToCoverSound"]); + } + } + else if(isdefined(param_00["traverseSound"])) + { + thread maps\_utility::play_sound_on_entity(param_00["traverseSound"]); + } + + self.var_3FEA = var_03; + self.var_3FE9 = %body; + self setflaggedanimknoballrestart("traverseAnim",var_03,%body,1,0.2,1); + self.var_3FEF = 0; + self.var_3FF0 = param_00["interruptDeathAnim"]; + animscripts/shared::donotetracks("traverseAnim",::func_3FF1); + self traversemode("gravity"); + if(self.var_744) + { + return; + } + + self.a.var_D55 = 0; + if(var_05 && isdefined(self.node) && distancesquared(self.origin,self.node.origin) < 256) + { + self.a.movement = "stop"; + self teleport(self.node.origin); + } + else if(isdefined(param_00["traverseStopsAtEnd"])) + { + self.a.movement = "stop"; + } + else + { + self.a.movement = "run"; + self clearanim(var_03,0.2); + } + + self.var_3FE9 = undefined; + self.var_3FEA = undefined; + self.deathanim = undefined; +} + +//Function Number: 5 +func_3FF1(param_00) +{ + if(param_00 == "traverse_death") + { + return func_3FF2(); + } + + if(param_00 == "traverse_align") + { + return func_3FF3(); + } + + if(param_00 == "traverse_drop") + { + return func_3FF4(); + } +} + +//Function Number: 6 +func_3FF2() +{ + if(isdefined(self.var_3FF0)) + { + var_00 = self.var_3FF0[self.var_3FEF]; + self.deathanim = var_00[randomint(var_00.size)]; + self.var_3FEF++; + } +} + +//Function Number: 7 +func_3FF3() +{ + self traversemode("nogravity"); + self traversemode("noclip"); + if(isdefined(self.var_3FEC) && isdefined(self.var_3FED.traverse_height)) + { + var_00 = self.var_3FED.traverse_height - self.var_3FEE; + thread func_3FE7(var_00 - self.var_3FEC); + } +} + +//Function Number: 8 +func_3FF4() +{ + var_00 = self.origin + (0,0,32); + var_01 = bullettrace(var_00,self.origin + (0,0,-512),0,undefined); + var_02 = var_01["position"]; + var_03 = distance(var_00,var_02); + var_04 = var_03 - 32 - 0.5; + var_05 = self getanimtime(self.var_3FEA); + var_06 = getmovedelta(self.var_3FEA,var_05,1); + var_07 = getanimlength(self.var_3FEA); + var_08 = 0 - var_06[2]; + var_09 = var_08 - var_04; + if(var_08 < var_04) + { + var_0A = var_08 / var_04; + } + else + { + var_0A = 1; + } + + var_0B = var_07 - var_05 / 3; + var_0C = ceil(var_0B * 20); + thread func_3FE8(var_09,0,var_0C,var_0A); + thread func_3FF5(var_02[2]); +} + +//Function Number: 9 +func_3FF5(param_00) +{ + self endon("killanimscript"); + param_00 = param_00 + 4; + for(;;) + { + if(self.origin[2] < param_00) + { + self traversemode("gravity"); + break; + } + + wait 0.05; + } +} + +//Function Number: 10 +func_3FF6() +{ + self animmode("zonly_physics"); + self waittill("killanimscript"); +} + +//Function Number: 11 +func_3FF7(param_00,param_01) +{ + self endon("killanimscript"); + self traversemode("nogravity"); + self traversemode("noclip"); + var_02 = self getnegotiationstartnode(); + self orientmode("face angle",var_02.angles[1]); + var_03 = var_02.traverse_height - var_02.origin[2]; + thread func_3FE7(var_03 - param_01); + self clearanim(%root,0.2); + self setflaggedanimrestart("dog_traverse",level.var_3AF6[param_00],1,0.2,1); + animscripts/shared::donotetracks("dog_traverse"); + self.var_3B58 = 1; +} + +//Function Number: 12 +func_3FF8(param_00,param_01) +{ + self endon("killanimscript"); + self traversemode("noclip"); + var_02 = self getnegotiationstartnode(); + self orientmode("face angle",var_02.angles[1]); + var_03 = self getnegotiationstartnode().origin[2] - self getnegotiationendnode().origin[2]; + self.var_3FEA = level.var_3AF6["jump_down_40"]; + self.var_3FE9 = %root; + thread func_3FE8(40 - var_03,0.1,param_00,param_01); + self clearanim(%root,0.2); + self setflaggedanimrestart("traverseAnim",self.var_3FEA,1,0.2,1); + animscripts/shared::donotetracks("traverseAnim"); + self clearanim(self.var_3FEA,0); + self traversemode("gravity"); + self.var_3B58 = 1; + self.var_3FE9 = undefined; + self.var_3FEA = undefined; +} + +//Function Number: 13 +func_3FF9(param_00,param_01) +{ + self endon("killanimscript"); + self traversemode("noclip"); + var_02 = self getnegotiationstartnode(); + self orientmode("face angle",var_02.angles[1]); + thread func_3FE8(param_00 - 40,0.2,param_01); + self clearanim(%root,0.25); + self setflaggedanimrestart("traverseAnim",level.var_3AF6["jump_up_40"],1,0.2,1); + animscripts/shared::donotetracks("traverseAnim"); + self clearanim(level.var_3AF6["jump_up_40"],0); + self traversemode("gravity"); + self.var_3B58 = 1; +} + +//Function Number: 14 +func_0176(param_00,param_01) +{ + self endon("killanimscript"); + self traversemode("nogravity"); + self traversemode("noclip"); + var_02 = self getnegotiationstartnode(); + self orientmode("face angle",var_02.angles[1]); + if(!isdefined(var_02.traverse_height)) + { + var_02.traverse_height = var_02.origin[2]; + } + + var_03 = var_02.traverse_height - var_02.origin[2]; + thread func_3FE7(var_03 - param_01); + self clearanim(%root,0.2); + self setflaggedanimrestart("dog_traverse",level.var_3AF6[param_00],1,0.2,1); + animscripts/shared::donotetracks("dog_traverse"); + self.var_3B58 = 1; +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/traverse/slide_across_car.gsc b/MW3/PC/SP/animscripts/traverse/slide_across_car.gsc new file mode 100644 index 0000000..40eb6b3 --- /dev/null +++ b/MW3/PC/SP/animscripts/traverse/slide_across_car.gsc @@ -0,0 +1,47 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\slide_across_car.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 3 + * Decompile Time: 63 ms + * Timestamp: 10/27/2023 2:17:26 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(self.type == "dog") + { + func_4005(); + return; + } + + func_4004(); +} + +//Function Number: 2 +func_4004() +{ + var_00 = []; + var_1C["interruptDeathAnim"] = 0; + animscripts/traverse/shared::func_3FEB(var_1C); +} + +//Function Number: 3 +func_4005() +{ + self endon("killanimscript"); + self traversemode("noclip"); + var_00 = self getnegotiationstartnode(); + self orientmode("face angle",var_00.angles[1]); + self clearanim(%root,0.1); + self setflaggedanimrestart("traverse",level.var_3AF6["jump_up_40"],1,0.1,1); + animscripts/shared::donotetracks("traverse"); + thread common_scripts\utility::play_sound_in_space("anml_dog_bark",self gettagorigin("tag_eye")); + self clearanim(%root,0); + self setflaggedanimrestart("traverse",level.var_3AF6["jump_down_40"],1,0,1); + animscripts/shared::donotetracks("traverse"); + self traversemode("gravity"); + self.var_3B58 = 1; +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/traverse/step_down.gsc b/MW3/PC/SP/animscripts/traverse/step_down.gsc new file mode 100644 index 0000000..1940d3b --- /dev/null +++ b/MW3/PC/SP/animscripts/traverse/step_down.gsc @@ -0,0 +1,37 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\step_down.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 49 ms + * Timestamp: 10/27/2023 2:17:27 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(self.type == "dog") + { + animscripts/traverse/shared::func_3FF8(40,3); + return; + } + + func_3FFA(); +} + +//Function Number: 2 +func_3FFA() +{ + self.desired_anim_pose = "crouch"; + animscripts/utility::func_247B(); + self endon("killanimscript"); + self.a.movement = "walk"; + self traversemode("nogravity"); + var_00 = self getnegotiationstartnode(); + self orientmode("face angle",var_00.angles[1]); + self setflaggedanimknoballrestart("stepanim",%step_down_low_wall,%body,1,0.1,1); + self waittillmatch("gravity on","stepanim"); + self traversemode("gravity"); + animscripts/shared::donotetracks("stepanim"); +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/traverse/step_up.gsc b/MW3/PC/SP/animscripts/traverse/step_up.gsc new file mode 100644 index 0000000..005a233 --- /dev/null +++ b/MW3/PC/SP/animscripts/traverse/step_up.gsc @@ -0,0 +1,38 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\step_up.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 45 ms + * Timestamp: 10/27/2023 2:17:27 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(self.type == "dog") + { + animscripts/traverse/shared::func_3FF9(40,3); + return; + } + + func_3FFB(); +} + +//Function Number: 2 +func_3FFB() +{ + self.desired_anim_pose = "crouch"; + animscripts/utility::func_247B(); + self endon("killanimscript"); + self.a.movement = "walk"; + self traversemode("nogravity"); + var_00 = self getnegotiationstartnode(); + self orientmode("face angle",var_00.angles[1]); + self setflaggedanimknoballrestart("stepanim",%step_up_low_wall,%body,1,0.1,1); + self waittillmatch("gravity on","stepanim"); + self traversemode("gravity"); + animscripts/shared::donotetracks("stepanim"); + self setanimknoballrestart(animscripts/run::func_FC4(),%body,1,0.1,1); +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/traverse/step_up_12.gsc b/MW3/PC/SP/animscripts/traverse/step_up_12.gsc new file mode 100644 index 0000000..eae41a9 --- /dev/null +++ b/MW3/PC/SP/animscripts/traverse/step_up_12.gsc @@ -0,0 +1,29 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\step_up_12.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 40 ms + * Timestamp: 10/27/2023 2:17:28 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self endon("killanimscript"); + var_00 = self getnegotiationstartnode(); + self orientmode("face angle",var_00.angles[1]); + var_01 = var_00.traverse_height - var_00.origin[2]; + var_02 = var_01; + var_03 = 6; + var_04 = (0,0,var_02 / var_03); + self traversemode("noclip"); + for(var_05 = 0;var_05 < var_03;var_05++) + { + self teleport(self.origin + var_04); + wait 0.05; + } + + self traversemode("gravity"); +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/traverse/step_up_32.gsc b/MW3/PC/SP/animscripts/traverse/step_up_32.gsc new file mode 100644 index 0000000..92721ec --- /dev/null +++ b/MW3/PC/SP/animscripts/traverse/step_up_32.gsc @@ -0,0 +1,28 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\step_up_32.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 46 ms + * Timestamp: 10/27/2023 2:17:28 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(self.type == "dog") + { + animscripts/traverse/shared::func_3FF9(32,5); + return; + } + + func_4003(); +} + +//Function Number: 2 +func_4003() +{ + var_00 = []; + animscripts/traverse/shared::func_3FEB(var_7B); +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/traverse/stepup_52.gsc b/MW3/PC/SP/animscripts/traverse/stepup_52.gsc new file mode 100644 index 0000000..a212fbe --- /dev/null +++ b/MW3/PC/SP/animscripts/traverse/stepup_52.gsc @@ -0,0 +1,28 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\stepup_52.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 49 ms + * Timestamp: 10/27/2023 2:17:29 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(self.type == "dog") + { + animscripts/traverse/shared::func_3FF9(52,5); + return; + } + + func_4003(); +} + +//Function Number: 2 +func_4003() +{ + var_00 = []; + animscripts/traverse/shared::func_3FEB(var_7B); +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/traverse/trench_jump_out.gsc b/MW3/PC/SP/animscripts/traverse/trench_jump_out.gsc new file mode 100644 index 0000000..014c0c9 --- /dev/null +++ b/MW3/PC/SP/animscripts/traverse/trench_jump_out.gsc @@ -0,0 +1,15 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\trench_jump_out.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 30 ms + * Timestamp: 10/27/2023 2:17:29 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + animscripts/traverse/shared::func_3FE6(%trench_jump_out,47.8); +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/traverse/trench_jumpout.gsc b/MW3/PC/SP/animscripts/traverse/trench_jumpout.gsc new file mode 100644 index 0000000..e1d2b6b --- /dev/null +++ b/MW3/PC/SP/animscripts/traverse/trench_jumpout.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\trench_jumpout.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 38 ms + * Timestamp: 10/27/2023 2:17:29 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self.desired_anim_pose = "crouch"; + animscripts/utility::func_247B(); + self endon("killanimscript"); + self.a.movement = "walk"; + self traversemode("nogravity"); + var_00 = self getnegotiationstartnode(); + self orientmode("face angle",var_00.angles[1]); + self setflaggedanimknoballrestart("stepanim",%gully_trenchjump,%body,1,0.1,1); + self waittillmatch("gravity on","stepanim"); + self traversemode("gravity"); + animscripts/shared::donotetracks("stepanim"); + self setanimknoballrestart(animscripts/run::func_FC4(),%body,1,0.1,1); +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/traverse/wall_dive.gsc b/MW3/PC/SP/animscripts/traverse/wall_dive.gsc new file mode 100644 index 0000000..62ce03f --- /dev/null +++ b/MW3/PC/SP/animscripts/traverse/wall_dive.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\wall_dive.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 32 ms + * Timestamp: 10/27/2023 2:17:30 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self.desired_anim_pose = "crouch"; + animscripts/utility::func_247B(); + self endon("killanimscript"); + self traversemode("nogravity"); + self traversemode("noclip"); + var_00 = self getnegotiationstartnode(); + self orientmode("face angle",var_00.angles[1]); + self setflaggedanimknoballrestart("diveanim",%jump_over_low_wall,%body,1,0.1,1); + self playsound("dive_wall"); + self waittillmatch("gravity on","diveanim"); + self traversemode("gravity"); + animscripts/shared::donotetracks("diveanim"); + self.a.movement = "run"; +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/traverse/wall_hop.gsc b/MW3/PC/SP/animscripts/traverse/wall_hop.gsc new file mode 100644 index 0000000..ed60e85 --- /dev/null +++ b/MW3/PC/SP/animscripts/traverse/wall_hop.gsc @@ -0,0 +1,33 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\wall_hop.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 46 ms + * Timestamp: 10/27/2023 2:17:30 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(self.type == "dog") + { + animscripts/traverse/shared::func_3FF7("wallhop",40); + return; + } + + func_3FFC(); +} + +//Function Number: 2 +func_3FFC() +{ + if(randomint(100) < 30) + { + animscripts/traverse/shared::func_3FE6(%traverse_wallhop_3,39.875); + return; + } + + animscripts/traverse/shared::func_3FE6(%traverse_wallhop,39.875); +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/traverse/wall_over_40.gsc b/MW3/PC/SP/animscripts/traverse/wall_over_40.gsc new file mode 100644 index 0000000..b237331 --- /dev/null +++ b/MW3/PC/SP/animscripts/traverse/wall_over_40.gsc @@ -0,0 +1,30 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\wall_over_40.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 47 ms + * Timestamp: 10/27/2023 2:17:31 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(self.type == "dog") + { + animscripts/traverse/shared::func_3FF7("window_40",40); + return; + } + + func_4003(); +} + +//Function Number: 2 +func_4003() +{ + var_00 = []; + var_1C["interruptDeathAnim"] = 0; + var_1C["interruptDeathAnim"] = 1; + animscripts/traverse/shared::func_3FEB(var_1C); +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/traverse/wall_over_96.gsc b/MW3/PC/SP/animscripts/traverse/wall_over_96.gsc new file mode 100644 index 0000000..b71a0f5 --- /dev/null +++ b/MW3/PC/SP/animscripts/traverse/wall_over_96.gsc @@ -0,0 +1,78 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\wall_over_96.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 3 + * Decompile Time: 74 ms + * Timestamp: 10/27/2023 2:17:31 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self.var_4006 = 1; + func_4007(%traverse90,96); +} + +//Function Number: 2 +func_4007(param_00,param_01) +{ + self.desired_anim_pose = "crouch"; + animscripts/utility::func_247B(); + self endon("killanimscript"); + self traversemode("nogravity"); + self traversemode("noclip"); + var_02 = self getnegotiationstartnode(); + self orientmode("face angle",var_02.angles[1]); + var_03 = var_02.traverse_height - var_02.origin[2]; + self setflaggedanimknoballrestart("traverse",param_00,%body,1,0.15,1); + var_04 = gettime(); + thread animscripts/notetracks::func_239E("traverse","no clear",::func_4008); + if(!animhasnotetrack(param_00,"gravity on")) + { + var_04 = 1.23; + var_05 = 0.2; + wait 5; + self traversemode("gravity"); + wait var_05; + return; + } + + self waittillmatch("gravity on","traverse"); + self traversemode("gravity"); + if(!animhasnotetrack(param_00,"blend")) + { + wait 0.2; + return; + } + + self waittillmatch("blend","traverse"); +} + +//Function Number: 3 +func_4008(param_00) +{ + if(param_00 != "traverse_death") + { + return; + } + + self endon("killanimscript"); + if(self.health == 1) + { + self.a.var_D55 = 1; + if(self.var_4006 > 1) + { + self setflaggedanimknoball("deathanim",%traverse90_end_death,%body,1,0.2,1); + } + else + { + self setflaggedanimknoball("deathanim",%traverse90_start_death,%body,1,0.2,1); + } + + animscripts/face::func_C41("death"); + } + + self.var_4006++; +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/traverse/window.gsc b/MW3/PC/SP/animscripts/traverse/window.gsc new file mode 100644 index 0000000..8a4f061 --- /dev/null +++ b/MW3/PC/SP/animscripts/traverse/window.gsc @@ -0,0 +1,25 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\window.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 30 ms + * Timestamp: 10/27/2023 2:17:32 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self.desired_anim_pose = "crouch"; + animscripts/utility::func_247B(); + self endon("killanimscript"); + self traversemode("nogravity"); + self traversemode("noclip"); + var_00 = self getnegotiationstartnode(); + self orientmode("face angle",var_00.angles[1]); + self setflaggedanimknoballrestart("diveanim",%windowclimb,%body,1,0.1,1); + self waittillmatch("gravity on","diveanim"); + self traversemode("gravity"); + animscripts/shared::donotetracks("diveanim"); +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/traverse/window_2.gsc b/MW3/PC/SP/animscripts/traverse/window_2.gsc new file mode 100644 index 0000000..bd3d781 --- /dev/null +++ b/MW3/PC/SP/animscripts/traverse/window_2.gsc @@ -0,0 +1,40 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\window_2.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 59 ms + * Timestamp: 10/27/2023 2:17:32 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(self.type == "dog") + { + animscripts/traverse/shared::func_3FF7("wallhop",40); + return; + } + + func_3FFD(%windowclimb,35); +} + +//Function Number: 2 +func_3FFD(param_00,param_01) +{ + self.desired_anim_pose = "crouch"; + animscripts/utility::func_247B(); + self endon("killanimscript"); + self traversemode("nogravity"); + self traversemode("noclip"); + var_02 = self getnegotiationstartnode(); + self orientmode("face angle",var_02.angles[1]); + var_03 = var_02.traverse_height - var_02.origin[2]; + self setflaggedanimknoballrestart("traverse",param_00,%body,1,0.15,1); + wait 0.7; + thread animscripts/traverse/shared::func_3FE7(var_03 - param_01); + wait 0.9; + self traversemode("gravity"); + animscripts/shared::donotetracks("traverse"); +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/traverse/window_divethrough_36.gsc b/MW3/PC/SP/animscripts/traverse/window_divethrough_36.gsc new file mode 100644 index 0000000..03aa3b7 --- /dev/null +++ b/MW3/PC/SP/animscripts/traverse/window_divethrough_36.gsc @@ -0,0 +1,28 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\window_divethrough_36.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 65 ms + * Timestamp: 10/27/2023 2:17:33 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(self.type == "dog") + { + animscripts/traverse/shared::func_3FF7("window_40",40); + return; + } + + func_4003(); +} + +//Function Number: 2 +func_4003() +{ + var_00 = []; + animscripts/traverse/shared::func_3FEB(var_7B); +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/traverse/window_down.gsc b/MW3/PC/SP/animscripts/traverse/window_down.gsc new file mode 100644 index 0000000..b311543 --- /dev/null +++ b/MW3/PC/SP/animscripts/traverse/window_down.gsc @@ -0,0 +1,91 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\window_down.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 4 + * Decompile Time: 82 ms + * Timestamp: 10/27/2023 2:17:33 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + var_00 = %windowclimb_fall; + var_01 = %windowclimb_land; + var_02 = 35; + self.desired_anim_pose = "crouch"; + animscripts/utility::func_247B(); + self endon("killanimscript"); + self traversemode("noclip"); + var_03 = self getnegotiationstartnode(); + self orientmode("face angle",var_03.angles[1]); + var_04 = var_03.traverse_height - var_03.origin[2]; + self setflaggedanimknoballrestart("traverse",var_00,%body,1,0.15,1); + thread animscripts/notetracks::func_239E("traverse","stop_traverse_notetracks"); + wait 1.5; + var_05 = (0,var_03.angles[1],0); + var_06 = anglestoforward(var_05); + var_06 = var_06 * 85; + var_07 = bullettrace(var_03.origin + var_06,var_03.origin + var_06 + (0,0,-500),0,undefined); + var_08 = var_07["position"][2]; + var_09 = var_03.origin[2] - var_08; + var_0A = 0; + for(var_0B = 0;var_0B < level.var_20C4.size;var_0B++) + { + if(var_09 < level.var_20C4[var_0B]) + { + continue; + } + + var_0A = var_09 - level.var_20C4[var_0B]; + } + + thread animscripts/traverse/shared::func_3FE7(var_0A * -1); + var_0C = self.origin[2]; + var_0D = 0; + level.var_3FFF = []; + for(;;) + { + var_0D = var_0C - self.origin[2]; + if(self.origin[2] - var_0D < var_08) + { + break; + } + + var_0C = self.origin[2]; + wait 0.05; + } + + if(isdefined(self.var_752)) + { + self playsound("Land_" + self.var_752); + } + + self notify("stop_traverse_notetracks"); + self setflaggedanimknoballrestart("traverse",var_01,%body,1,0.15,1); + self traversemode("gravity"); + animscripts/shared::donotetracks("traverse"); +} + +//Function Number: 2 +func_4000(param_00) +{ + level notify("print_this_" + param_00); + level endon("print_this_" + param_00); + wait 0.05; +} + +//Function Number: 3 +func_4001(param_00,param_01) +{ + wait 0.05; +} + +//Function Number: 4 +func_4002(param_00,param_01) +{ + level notify("prrint_this_" + param_01); + level endon("prrint_this_" + param_01); + wait 0.05; +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/traverse/window_over_40.gsc b/MW3/PC/SP/animscripts/traverse/window_over_40.gsc new file mode 100644 index 0000000..ddd4b0f --- /dev/null +++ b/MW3/PC/SP/animscripts/traverse/window_over_40.gsc @@ -0,0 +1,30 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\window_over_40.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 50 ms + * Timestamp: 10/27/2023 2:17:34 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(self.type == "dog") + { + animscripts/traverse/shared::func_3FF7("window_40",40); + return; + } + + func_3FFE(); +} + +//Function Number: 2 +func_3FFE() +{ + var_00 = []; + var_1C["interruptDeathAnim"] = 0; + var_1C["interruptDeathAnim"] = 1; + animscripts/traverse/shared::func_3FEB(var_1C); +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/traverse/window_over_quick.gsc b/MW3/PC/SP/animscripts/traverse/window_over_quick.gsc new file mode 100644 index 0000000..7561771 --- /dev/null +++ b/MW3/PC/SP/animscripts/traverse/window_over_quick.gsc @@ -0,0 +1,30 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\window_over_quick.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 48 ms + * Timestamp: 10/27/2023 2:17:34 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(self.type == "dog") + { + animscripts/traverse/shared::func_3FF7("window_40",40); + return; + } + + func_3FFE(); +} + +//Function Number: 2 +func_3FFE() +{ + var_00 = []; + var_1C["interruptDeathAnim"] = 0; + var_1C["interruptDeathAnim"] = 1; + animscripts/traverse/shared::func_3FEB(var_1C); +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/utility.gsc b/MW3/PC/SP/animscripts/utility.gsc new file mode 100644 index 0000000..378c72d --- /dev/null +++ b/MW3/PC/SP/animscripts/utility.gsc @@ -0,0 +1,2240 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\utility.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 132 + * Decompile Time: 2211 ms + * Timestamp: 10/27/2023 2:18:57 AM +*******************************************************************/ + +//Function Number: 1 +func_2479(param_00) +{ + self clearanim(%body,0.3); + self setanim(%body,1,0); + if(param_00 != "pain" && param_00 != "death") + { + self.a.var_D19 = "none"; + } + + self.var_247A = 0; + self.a.var_CC3 = 1; + self.a.var_CC5 = 1; + self.a.var_CC6 = 1; + self.a.var_CC7 = 0; + self.a.var_CC8 = 0; + func_0A69(); +} + +//Function Number: 2 +func_247B() +{ + if(isdefined(self.desired_anim_pose) && self.desired_anim_pose != self.a.pose) + { + if(self.a.pose == "prone") + { + func_0F7D(0.5); + } + + if(self.desired_anim_pose == "prone") + { + self setproneanimnodes(-45,45,%prone_legs_down,%exposed_aiming,%prone_legs_up); + func_10E1(0.5); + self setanimknoball(%prone_aim_5,%body,1,0.1,1); + } + } + + self.desired_anim_pose = undefined; +} + +//Function Number: 3 +func_0D15(param_00) +{ + if(isdefined(self.var_D0F)) + { + if(param_00 != "pain" && param_00 != "death") + { + self kill(self.origin); + } + + if(param_00 != "pain") + { + self.var_D0F = undefined; + self notify("kill_long_death"); + } + } + + if(isdefined(self.a.var_D6A) && param_00 != "death") + { + self kill(self.origin); + } + + if(isdefined(self.a.var_20AD)) + { + var_01 = self.a.var_20AD; + self.a.var_20AD = undefined; + [[ var_01 ]](param_00); + } + + if(param_00 != "combat" && param_00 != "pain" && param_00 != "death" && func_0C95()) + { + animscripts/combat::func_1159(%pistol_stand_switch,1); + } + + if(param_00 != "combat" && param_00 != "move" && param_00 != "pain") + { + self.a.var_1111 = undefined; + } + + if(param_00 != "death") + { + self.a.var_D55 = 0; + } + + if(isdefined(self.var_23A0) && param_00 == "pain" || param_00 == "death" || param_00 == "flashed") + { + animscripts/combat_utility::func_23AA(); + } + + self.var_23A0 = undefined; + animscripts/squadmanager::func_A96(param_00); + self.var_CAF = undefined; + self.var_A9D = 0; + self.var_F53 = 0; + self.var_CDD = 0; + self.a.aimidlethread = undefined; + self.a.var_1019 = gettime(); + self.a.var_CE2 = 0; + if(isdefined(self.node) && self.node.type == "Conceal Prone" || self.node.type == "Conceal Crouch" || self.node.type == "Conceal Stand") + { + self.a.var_CE2 = 1; + } + + func_2479(param_00); + func_247B(); +} + +//Function Number: 4 +func_23F1() +{ + if(isdefined(self.wantshotgun) && self.wantshotgun) + { + if(func_0CEA(self.primaryweapon)) + { + return self.primaryweapon; + } + else if(func_0CEA(self.secondaryweapon)) + { + return self.secondaryweapon; + } + } + + return self.primaryweapon; +} + +//Function Number: 5 +func_247D(param_00,param_01,param_02) +{ + for(var_03 = 0;var_03 < param_00 * 20;var_03++) + { + for(var_04 = 0;var_04 < 10;var_04++) + { + var_05 = (0,randomint(360),0); + var_06 = anglestoforward(var_05); + var_07 = var_06 * param_02; + } + + wait 0.05; + } +} + +//Function Number: 6 +func_247E() +{ + self endon("death"); + self notify("displaceprint"); + self endon("displaceprint"); + wait 0.05; +} + +//Function Number: 7 +func_0A69() +{ + if(self.var_74B > 1) + { + return 1; + } + + if(isdefined(self.enemy)) + { + self.a.var_20A9 = gettime() + level.var_20CA + randomint(level.var_20CB); + return 1; + } + + return self.a.var_20A9 > gettime(); +} + +//Function Number: 8 +func_0FB8() +{ + if(isdefined(self.enemy)) + { + self.a.var_247F = self.enemy getshootatpos(); + self.a.var_20AA = gettime(); + return self.a.var_247F; + } + + if(isdefined(self.a.var_20AA) && isdefined(self.a.var_247F) && self.a.var_20AA + 3000 < gettime()) + { + return self.a.var_247F; + } + + var_00 = self getshootatpos(); + var_00 = var_00 + (196 * self.var_70F[0],196 * self.var_70F[1],196 * self.var_70F[2]); + return var_00; +} + +//Function Number: 9 +func_0F41(param_00) +{ + if(!isdefined(self.heat)) + { + if(param_00.type == "Cover Left") + { + return param_00.angles[1] + 90; + } + else if(param_00.type == "Cover Right") + { + return param_00.angles[1] - 90; + } + } + + return param_00.angles[1]; +} + +//Function Number: 10 +func_2480(param_00) +{ + if(isdefined(self.node)) + { + var_01 = self.node.angles[1] - func_101A(param_00); + } + else + { + var_01 = self.angles[1] - func_101A(var_01); + } + + var_01 = angleclamp180(var_01); + return var_01; +} + +//Function Number: 11 +func_116D() +{ + var_00 = undefined; + if(isdefined(self.enemy)) + { + var_00 = self.enemy.origin; + } + else + { + if(isdefined(self.node)) + { + var_01 = anglestoforward(self.node.angles); + } + else + { + var_01 = anglestoforward(self.angles); + } + + var_01 = var_01 * 150; + var_00 = self.origin + var_01; + } + + if(isdefined(self.node)) + { + var_02 = self.node.angles[1] - func_101A(var_00); + } + else + { + var_02 = self.angles[1] - func_101A(var_02); + } + + var_02 = angleclamp180(var_02); + return var_02; +} + +//Function Number: 12 +func_113E(param_00) +{ + var_01 = self.angles[1] - func_101A(param_00); + var_01 = angleclamp180(var_01); + return var_01; +} + +//Function Number: 13 +func_0D5C() +{ + var_00 = undefined; + if(isdefined(self.enemy)) + { + var_00 = self.enemy.origin; + } + else + { + var_01 = anglestoforward(self.angles); + var_01 = var_01 * 150; + var_00 = self.origin + var_01; + } + + var_02 = self.angles[1] - func_101A(var_00); + var_02 = angleclamp180(var_02); + return var_02; +} + +//Function Number: 14 +func_101A(param_00) +{ + return vectortoyaw(param_00 - self.origin); +} + +//Function Number: 15 +func_2481(param_00) +{ + var_01 = vectortoangles((param_00[0],param_00[1],0) - (self.origin[0],self.origin[1],0)); + return var_01[1]; +} + +//Function Number: 16 +func_2482() +{ + var_00 = self.angles[1] - func_101A(self.enemy.origin); + var_00 = angleclamp180(var_00); + if(var_00 < 0) + { + var_00 = -1 * var_00; + } + + return var_00; +} + +//Function Number: 17 +func_2483() +{ + var_00 = self.angles[1] - func_2481(self.enemy.origin); + var_00 = angleclamp180(var_00); + if(var_00 < 0) + { + var_00 = -1 * var_00; + } + + return var_00; +} + +//Function Number: 18 +func_2484(param_00) +{ + var_01 = self.angles[1] - func_101A(param_00); + var_01 = angleclamp180(var_01); + if(var_01 < 0) + { + var_01 = -1 * var_01; + } + + return var_01; +} + +//Function Number: 19 +func_2485(param_00) +{ + var_01 = self.angles[1] - param_00; + var_01 = angleclamp180(var_01); + if(var_01 < 0) + { + var_01 = -1 * var_01; + } + + return var_01; +} + +//Function Number: 20 +func_2486(param_00,param_01) +{ + var_02 = vectortoangles(param_00 - param_01); + return var_02[1]; +} + +//Function Number: 21 +func_2487(param_00,param_01) +{ + var_02 = self gettagangles(param_00)[1] - func_2486(param_01,self gettagorigin(param_00)); + var_02 = angleclamp180(var_02); + return var_02; +} + +//Function Number: 22 +func_244F(param_00) +{ + var_01 = self.angles[1] - func_101A(param_00); + var_01 = angleclamp180(var_01); + return var_01; +} + +//Function Number: 23 +func_2488(param_00) +{ + var_01 = self gettagangles("TAG_EYE")[1] - func_101A(param_00); + var_01 = angleclamp180(var_01); + return var_01; +} + +//Function Number: 24 +func_2489(param_00) +{ + if(isdefined(self.var_CAF)) + { + return self.var_CAF doesnodeallowstance(param_00); + } + + return self isstanceallowed(param_00); +} + +//Function Number: 25 +func_10AF(param_00) +{ + if(!isdefined(param_00)) + { + param_00 = self.a.pose; + } + + switch(param_00) + { + case "stand": + if(func_2489("stand")) + { + var_01 = "stand"; + } + else if(func_2489("crouch")) + { + var_01 = "crouch"; + } + else if(func_2489("prone")) + { + var_01 = "prone"; + } + else + { + var_01 = "stand"; + } + break; + + case "crouch": + if(func_2489("crouch")) + { + var_01 = "crouch"; + } + else if(func_2489("stand")) + { + var_01 = "stand"; + } + else if(func_2489("prone")) + { + var_01 = "prone"; + } + else + { + var_01 = "crouch"; + } + break; + + case "prone": + if(func_2489("prone")) + { + var_01 = "prone"; + } + else if(func_2489("crouch")) + { + var_01 = "crouch"; + } + else if(func_2489("stand")) + { + var_01 = "stand"; + } + else + { + var_01 = "prone"; + } + break; + + default: + var_01 = "stand"; + break; + } + + return var_01; +} + +//Function Number: 26 +func_0BEE() +{ + var_00 = self.node; + if(isdefined(var_00) && self nearnode(var_00) || isdefined(self.var_CAF) && var_00 == self.var_CAF) + { + return var_00; + } + + return undefined; +} + +//Function Number: 27 +func_248A() +{ + var_00 = func_0BEE(); + if(isdefined(var_00)) + { + return var_00.type; + } + + return "none"; +} + +//Function Number: 28 +func_2472() +{ + var_00 = func_0BEE(); + if(isdefined(var_00)) + { + return var_00.angles[1]; + } + + return self.var_72B; +} + +//Function Number: 29 +func_248B() +{ + var_00 = func_0BEE(); + if(isdefined(var_00)) + { + return anglestoforward(var_00.angles); + } + + return anglestoforward(self.angles); +} + +//Function Number: 30 +func_2473() +{ + var_00 = func_0BEE(); + if(isdefined(var_00)) + { + return var_00.origin; + } + + return self.origin; +} + +//Function Number: 31 +func_0D08(param_00,param_01) +{ + var_02 = int(param_00) % param_01; + var_02 = var_02 + param_01; + return var_02 % param_01; +} + +//Function Number: 32 +func_0D61(param_00) +{ + return abs(angleclamp180(param_00)); +} + +//Function Number: 33 +func_0FFC(param_00) +{ + var_01 = cos(param_00); + var_02 = sin(param_00); + var_03["front"] = 0; + if(isdefined(self.alwaysrunforward)) + { + return var_7B; + } + + if(var_02 > 0) + { + if(var_03 > var_02) + { + } + else if(var_03 < -1 * var_02) + { + } + else + { + } + } + else + { + var_04 = -1 * var_02; + if(var_03 > var_04) + { + var_7B["left"] = 1; + } + else if(var_03 < var_02) + { + var_7B["right"] = 1; + } + else + { + var_7B["back"] = 1; + } + } + + return var_7B; +} + +//Function Number: 34 +func_243A(param_00) +{ + param_00 = angleclamp(param_00); + if(param_00 < 45 || param_00 > 315) + { + var_01 = "front"; + } + else if(var_01 < 135) + { + var_01 = "left"; + } + else if(var_01 < 225) + { + var_01 = "back"; + } + else + { + var_01 = "right"; + } + + return var_01; +} + +//Function Number: 35 +func_248C(param_00,param_01) +{ + for(var_02 = param_01.size - 1;var_02 >= 0;var_02--) + { + if(param_00 == param_01[var_02]) + { + return 1; + } + } + + return 0; +} + +//Function Number: 36 +func_248D(param_00) +{ + if(isdefined(param_00)) + { + self setflaggedanimknoballrestart("playAnim",param_00,%root,1,0.1,1); + var_01 = getanimlength(param_00); + var_01 = 3 * var_01 + 1; + thread func_248E("time is up","time is up",var_01); + self waittill("time is up"); + self notify("enddrawstring"); + } +} + +//Function Number: 37 +func_248E(param_00,param_01,param_02) +{ + self endon("death"); + self endon(param_01); + wait param_02; + self notify(param_00); +} + +//Function Number: 38 +func_248F(param_00) +{ + self endon("killanimscript"); + self endon("enddrawstring"); + wait 0.05; +} + +//Function Number: 39 +func_2490(param_00,param_01,param_02,param_03) +{ + var_04 = param_03 * 20; + for(var_05 = 0;var_05 < var_04;var_05++) + { + wait 0.05; + } +} + +//Function Number: 40 +func_2491(param_00) +{ + self notify("got known enemy2"); + self endon("got known enemy2"); + self endon("death"); + if(!isdefined(self.enemy)) + { + return; + } + + if(self.enemy.team == "allies") + { + var_01 = (0.4,0.7,1); + } + else + { + var_01 = (1,0.7,0.4); + } + + for(;;) + { + wait 0.05; + if(!isdefined(self.lastenemysightpos)) + { + continue; + } + } +} + +//Function Number: 41 +func_0F8C() +{ + if(isdefined(self.node)) + { + return func_0F4A() || func_0F39(); + } + + return func_0CE3() || func_0CF3(); +} + +//Function Number: 42 +func_0CEE() +{ + return self.goodshootpos; +} + +//Function Number: 43 +func_2492() +{ + if(!func_0F8C()) + { + return; + } + + self.var_2493 = func_0CEE(); + self.var_2494 = self.origin; +} + +//Function Number: 44 +func_2495() +{ + if(!func_0F8C()) + { + return 0; + } + + var_00 = self getmuzzlepos(); + var_01 = self getshootatpos() - var_00; + if(isdefined(self.var_2493) && isdefined(self.var_2494)) + { + if(distance(self.origin,self.var_2494) < 25) + { + return 0; + } + } + + self.var_2493 = undefined; + var_02 = self canshoot(func_0CEE(),var_01); + if(!var_02) + { + self.var_2493 = func_0CEE(); + return 0; + } + + return 1; +} + +//Function Number: 45 +func_2496() +{ + wait 5; + self notify("timeout"); +} + +//Function Number: 46 +func_2497(param_00,param_01,param_02) +{ + self endon("death"); + self notify("stop debug " + param_00); + self endon("stop debug " + param_00); + var_03 = spawnstruct(); + var_03 thread func_2496(); + var_03 endon("timeout"); + if(self.enemy.team == "allies") + { + var_04 = (0.4,0.7,1); + } + else + { + var_04 = (1,0.7,0.4); + } + + wait 0.05; +} + +//Function Number: 47 +func_2498(param_00,param_01) +{ + thread func_2497(param_00,param_01,2.15); +} + +//Function Number: 48 +func_2499(param_00,param_01,param_02) +{ + thread func_2497(param_00,param_01,param_02); +} + +//Function Number: 49 +func_249A(param_00,param_01) +{ + var_02 = param_00 / param_01; + var_03 = undefined; + if(param_00 == self.bulletsinclip) + { + var_03 = "all rounds"; + } + else if(var_02 < 0.25) + { + var_03 = "small burst"; + } + else if(var_02 < 0.5) + { + var_03 = "med burst"; + } + else + { + var_03 = "long burst"; + } + + thread func_2499(self.origin + (0,0,42),var_03,1.5); + thread func_2498(self.origin + (0,0,60),"Suppressing"); +} + +//Function Number: 50 +func_249B() +{ + self endon("death"); + self notify("stop shoot " + self.export); + self endon("stop shoot " + self.export); + var_00 = 0.25; + var_01 = var_00 * 20; + for(var_02 = 0;var_02 < var_01;var_02 = var_02 + 1) + { + wait 0.05; + } +} + +//Function Number: 51 +func_249C() +{ +} + +//Function Number: 52 +func_249D(param_00,param_01,param_02,param_03) +{ + self endon("death"); + var_04 = param_03 * 20; + for(var_05 = 0;var_05 < var_04;var_05 = var_05 + 1) + { + wait 0.05; + } +} + +//Function Number: 53 +func_249E(param_00,param_01,param_02,param_03) +{ + thread func_249D(param_00,param_01 + (0,0,-5),param_02,param_03); +} + +//Function Number: 54 +func_0D5F() +{ + [[ level.var_20D4 ]](); +} + +//Function Number: 55 +func_249F() +{ + self.a.lastshoottime = gettime(); + maps\_gameskill::set_accuracy_based_on_situation(); + self notify("shooting"); + self shoot(); +} + +//Function Number: 56 +func_20D3() +{ + level notify("an_enemy_shot",self); + func_249F(); +} + +//Function Number: 57 +func_2384(param_00) +{ + var_01 = bulletspread(self getmuzzlepos(),param_00,4); + self.a.lastshoottime = gettime(); + self notify("shooting"); + self shoot(1,var_01); +} + +//Function Number: 58 +func_24A0() +{ + var_00 = spawn("script_model",(0,0,0)); + var_00 setmodel("temp"); + var_00.origin = self gettagorigin("tag_weapon_right") + (50,50,0); + var_00.angles = self gettagangles("tag_weapon_right"); + var_01 = anglestoright(var_00.angles); + var_01 = var_01 * 15; + var_02 = anglestoforward(var_00.angles); + var_02 = var_02 * 15; + var_00 movegravity((0,50,150),100); + var_03 = "weapon_" + self.weapon; + var_04 = spawn(var_03,var_00.origin); + var_04.angles = self gettagangles("tag_weapon_right"); + var_04 linkto(var_00); + var_05 = var_00.origin; + while(isdefined(var_04) && isdefined(var_04.origin)) + { + var_06 = var_05; + var_07 = var_00.origin; + var_08 = vectortoangles(var_07 - var_06); + var_02 = anglestoforward(var_08); + var_02 = var_02 * 4; + var_09 = bullettrace(var_07,var_07 + var_02,1,var_04); + if(isalive(var_09["entity"]) && var_09["entity"] == self) + { + wait 0.05; + continue; + } + + if(var_09["fraction"] < 1) + { + break; + } + + var_05 = var_00.origin; + wait 0.05; + } + + if(isdefined(var_04) && isdefined(var_04.origin)) + { + var_04 unlink(); + } + + var_00 delete(); +} + +//Function Number: 59 +func_20CC(param_00) +{ + level.var_10FA["stand"]["in"] = %casual_stand_idle_trans_in; + level.var_1100["stand"][0][0] = %casual_stand_idle; + level.var_1100["stand"][0][1] = %casual_stand_idle_twitch; + level.var_1100["stand"][0][2] = %casual_stand_idle_twitchb; + level.var_1101["stand"][0][0] = 2; + level.var_1101["stand"][0][1] = 1; + level.var_1101["stand"][0][2] = 1; + level.var_1100["stand"][1][0] = %casual_stand_v2_idle; + level.var_1100["stand"][1][1] = %casual_stand_v2_twitch_radio; + level.var_1100["stand"][1][2] = %casual_stand_v2_twitch_shift; + level.var_1100["stand"][1][3] = %casual_stand_v2_twitch_talk; + level.var_1101["stand"][1][0] = 10; + level.var_1101["stand"][1][1] = 4; + level.var_1101["stand"][1][2] = 7; + level.var_1101["stand"][1][3] = 4; + level.var_1100["stand_cqb"][0][0] = %cqb_stand_idle; + level.var_1100["stand_cqb"][0][1] = %cqb_stand_twitch; + level.var_1101["stand_cqb"][0][0] = 2; + level.var_1101["stand_cqb"][0][1] = 1; + level.var_10FA["crouch"]["in"] = %casual_crouch_idle_in; + level.var_1100["crouch"][0][0] = %casual_crouch_idle; + level.var_1101["crouch"][0][0] = 6; +} + +//Function Number: 60 +func_24A1() +{ + var_00 = "TAG_EYE"; + self endon("death"); + self notify("stop personal effect"); + self endon("stop personal effect"); + while(isdefined(self)) + { + wait 0.05; + if(!isdefined(self)) + { + break; + } + + if(isdefined(self.a.movement) && self.a.movement == "stop") + { + if(isdefined(self.var_1097) && self.var_1097 == 1) + { + continue; + } + + playfxontag(level._effect["cold_breath"],self,var_00); + wait 2.5 + randomfloat(3); + continue; + } + + wait 0.5; + } +} + +//Function Number: 61 +func_24A2() +{ + self notify("stop personal effect"); +} + +//Function Number: 62 +func_24A3() +{ + self endon("death"); + self notify("stop personal effect"); + self endon("stop personal effect"); + for(;;) + { + self waittill("spawned",var_00); + if(maps\_utility::spawn_failed(var_00)) + { + continue; + } + + var_00 thread func_24A1(); + } +} + +//Function Number: 63 +func_0F4C() +{ + if(isdefined(self.forcesuppression)) + { + return self.forcesuppression; + } + + if(self.var_738 <= self.var_CFB) + { + return 0; + } + + return self issuppressed(); +} + +//Function Number: 64 +func_0F62() +{ + if(self.var_738 <= self.var_CFB * 0.25) + { + return 0; + } + + return self issuppressed(); +} + +//Function Number: 65 +func_0F8E(param_00) +{ + if(isdefined(param_00.offset)) + { + return param_00.offset; + } + + var_01 = (-26,0.4,36); + var_02 = (-32,7,63); + var_03 = (43.5,11,36); + var_04 = (36,8.3,63); + var_05 = (3.5,-12.5,45); + var_06 = (-3.7,-22,63); + var_07 = 0; + var_08 = (0,0,0); + var_09 = anglestoright(param_00.angles); + var_0A = anglestoforward(param_00.angles); + switch(param_00.type) + { + case "Cover Left": + if(param_00 gethighestnodestance() == "crouch") + { + var_08 = func_24A5(var_09,var_0A,var_01); + } + else + { + var_08 = func_24A5(var_09,var_0A,var_02); + } + break; + + case "Cover Right": + if(param_00 gethighestnodestance() == "crouch") + { + var_08 = func_24A5(var_09,var_0A,var_03); + } + else + { + var_08 = func_24A5(var_09,var_0A,var_04); + } + break; + + case "Turret": + case "Cover Stand": + case "Conceal Stand": + var_08 = func_24A5(var_09,var_0A,var_06); + break; + + case "Cover Crouch Window": + case "Cover Crouch": + case "Conceal Crouch": + var_08 = func_24A5(var_09,var_0A,var_05); + break; + } + + param_00.offset = var_08; + return param_00.offset; +} + +//Function Number: 66 +func_24A5(param_00,param_01,param_02) +{ + return param_00 * param_02[0] + param_01 * param_02[1] + (0,0,param_02[2]); +} + +//Function Number: 67 +func_0CBC() +{ + return isdefined(self.enemy) && self seerecently(self.enemy,5); +} + +//Function Number: 68 +func_0CE3(param_00) +{ + if(!isdefined(self.enemy)) + { + return 0; + } + + if((isdefined(param_00) && self cansee(self.enemy,param_00)) || self cansee(self.enemy)) + { + if(!func_24A6(self geteye(),self.enemy getshootatpos())) + { + return 0; + } + + self.goodshootpos = func_0FB8(); + func_24A7(); + return 1; + } + + return 0; +} + +//Function Number: 69 +func_0F4A() +{ + if(!isdefined(self.enemy)) + { + self.goodshootpos = undefined; + return 0; + } + + var_00 = func_0FB8(); + if(!isdefined(self.node)) + { + var_01 = self cansee(self.enemy); + } + else + { + var_01 = func_117A(var_01,self.node); + } + + if(var_01) + { + self.goodshootpos = var_00; + func_24A7(); + } + else + { + } + + return var_01; +} + +//Function Number: 70 +func_117A(param_00,param_01) +{ + if(param_01.type == "Cover Left" || param_01.type == "Cover Right") + { + if(!animscripts/corner::func_244E(param_00,param_01)) + { + return 0; + } + } + + var_02 = func_0F8E(param_01); + var_03 = param_01.origin + var_02; + if(!func_24A6(var_03,param_00,param_01)) + { + return 0; + } + + if(!sighttracepassed(var_03,param_00,0,undefined)) + { + if(param_01.type == "Cover Crouch" || param_01.type == "Conceal Crouch") + { + var_03 = (0,0,64) + param_01.origin; + return sighttracepassed(var_03,param_00,0,undefined); + } + + return 0; + } + + return 1; +} + +//Function Number: 71 +func_24A6(param_00,param_01,param_02) +{ + var_03 = self.var_715 - level.var_20A1; + var_04 = self.var_714 + level.var_20A1; + var_05 = angleclamp180(vectortoangles(param_01 - param_00)[0]); + if(var_05 > var_04) + { + return 0; + } + + if(var_05 < var_03) + { + if(isdefined(param_02) && param_02.type != "Cover Crouch" && param_02.type != "Conceal Crouch") + { + return 0; + } + + if(var_05 < level.var_CAD + var_03) + { + return 0; + } + } + + return 1; +} + +//Function Number: 72 +func_24A7() +{ + self.a.var_24A8 = 1; +} + +//Function Number: 73 +func_24A9() +{ + if(!isdefined(self.a.var_24A8)) + { + self.a.var_24A8 = 1; + } + + if(self.a.var_24A8) + { + self.a.var_24AA = gettime() + randomintrange(15000,30000); + self.a.var_24A8 = 0; + } +} + +//Function Number: 74 +func_24AB(param_00,param_01,param_02) +{ + for(;;) + { + wait 0.05; + wait 0.05; + } +} + +//Function Number: 75 +func_24AC() +{ + if(!self canattackenemynode()) + { + return 0; + } + + var_00 = undefined; + if(isdefined(self.enemy.node)) + { + var_01 = func_0F8E(self.enemy.node); + var_00 = self.enemy.node.origin + var_01; + } + else + { + var_00 = self.enemy getshootatpos(); + } + + if(!self canshoot(var_00)) + { + return 0; + } + + if(self.script == "combat") + { + if(!sighttracepassed(self geteye(),self getmuzzlepos(),0,undefined)) + { + return 0; + } + } + + self.goodshootpos = var_00; + return 1; +} + +//Function Number: 76 +func_0F39() +{ + if(!func_24AD()) + { + self.goodshootpos = undefined; + return 0; + } + + if(!isplayer(self.enemy)) + { + return func_24AC(); + } + + if(isdefined(self.node)) + { + if(self.node.type == "Cover Left" || self.node.type == "Cover Right") + { + if(!animscripts/corner::func_244E(func_0FB8(),self.node)) + { + return 0; + } + } + + var_00 = func_0F8E(self.node); + var_01 = self.node.origin + var_00; + } + else + { + var_01 = self getmuzzlepos(); + } + + if(!func_24A6(var_01,self.lastenemysightpos)) + { + return 0; + } + + return func_24B2(var_01); +} + +//Function Number: 77 +func_0CF3() +{ + if(!func_24AD()) + { + self.goodshootpos = undefined; + return 0; + } + + if(!isplayer(self.enemy)) + { + return func_24AC(); + } + + var_00 = self getmuzzlepos(); + if(!func_24A6(var_00,self.lastenemysightpos)) + { + return 0; + } + + return func_24B2(var_00); +} + +//Function Number: 78 +func_24AD() +{ + if(!isdefined(self.enemy)) + { + return 0; + } + + if(!isdefined(self.lastenemysightpos)) + { + return 0; + } + + func_24A9(); + if(gettime() > self.a.var_24AA) + { + return 0; + } + + if(!func_24AF()) + { + return isdefined(self.goodshootpos); + } + + return 1; +} + +//Function Number: 79 +func_24AE(param_00) +{ + if(!sighttracepassed(self getshootatpos(),param_00,0,undefined)) + { + return 0; + } + + if(self.a.weaponpos["right"] == "none") + { + return 0; + } + + var_01 = self getmuzzlepos(); + return sighttracepassed(var_01,param_00,0,undefined); +} + +//Function Number: 80 +func_24AF() +{ + if(isdefined(self.goodshootpos) && !func_24AE(self.goodshootpos)) + { + return 1; + } + + return !isdefined(self.var_24B0) || self.var_24B0 != self.lastenemysightpos || distancesquared(self.var_24B1,self.origin) > 1024; +} + +//Function Number: 81 +func_24B2(param_00) +{ + if(!func_24AF()) + { + return isdefined(self.goodshootpos); + } + + if(isdefined(self.enemy) && distancesquared(self.origin,self.enemy.origin) > squared(self.enemy.maxvisibledist)) + { + self.goodshootpos = undefined; + return 0; + } + + if(!sighttracepassed(self getshootatpos(),param_00,0,undefined)) + { + self.goodshootpos = undefined; + return 0; + } + + self.var_24B1 = self.origin; + self.var_24B0 = self.lastenemysightpos; + var_01 = func_0FB8(); + var_02 = bullettrace(self.lastenemysightpos,var_01,0,undefined); + var_03 = var_02["position"]; + var_04 = self.lastenemysightpos - var_03; + var_05 = vectornormalize(self.lastenemysightpos - param_00); + var_04 = var_04 - var_05 * vectordot(var_04,var_05); + var_06 = 20; + var_07 = int(length(var_04) / var_06 + 0.5); + if(var_07 < 1) + { + var_07 = 1; + } + + if(var_07 > 20) + { + var_07 = 20; + } + + var_08 = self.lastenemysightpos - var_03; + var_08 = (var_08[0] / var_07,var_08[1] / var_07,var_08[2] / var_07); + var_07++; + var_09 = var_03; + self.goodshootpos = undefined; + var_0A = 0; + var_0B = 2; + for(var_0C = 0;var_0C < var_07 + var_0B;var_0C++) + { + var_0D = sighttracepassed(param_00,var_09,0,undefined); + var_0E = var_09; + if(var_0C == var_07 - 1) + { + var_08 = var_08 - var_05 * vectordot(var_08,var_05); + } + + var_09 = var_09 + var_08; + if(var_0D) + { + var_0A++; + self.goodshootpos = var_0E; + if(var_0C > 0 && var_0A < var_0B && var_0C < var_07 + var_0B - 1) + { + continue; + } + + return 1; + } + else + { + var_0A = 0; + } + } + + return isdefined(self.goodshootpos); +} + +//Function Number: 82 +func_10FF(param_00,param_01) +{ + var_02 = param_00.size; + var_03 = randomint(var_02); + if(var_02 == 1) + { + return param_00[0]; + } + + var_04 = 0; + var_05 = 0; + for(var_06 = 0;var_06 < var_02;var_06++) + { + var_05 = var_05 + param_01[var_06]; + } + + var_07 = randomfloat(var_05); + var_08 = 0; + for(var_06 = 0;var_06 < var_02;var_06++) + { + var_08 = var_08 + param_01[var_06]; + if(var_07 >= var_08) + { + continue; + } + + var_03 = var_06; + break; + } + + return param_00[var_03]; +} + +//Function Number: 83 +func_24B3(param_00,param_01,param_02,param_03,param_04,param_05) +{ + var_06 = param_00 / 0.05; + for(var_07 = 0;var_07 < var_06;var_07++) + { + wait 0.05; + } +} + +//Function Number: 84 +func_24B4(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = 100; + var_06 = 0; + param_00 = param_00 + common_scripts\utility::randomvector(30); + for(var_07 = 0;var_07 < var_05;var_07++) + { + var_06 = var_06 + 0.5; + wait 0.05; + } +} + +//Function Number: 85 +func_24B5(param_00,param_01) +{ + return param_00[0] * param_01[1] - param_00[1] * param_01[0] > 0; +} + +//Function Number: 86 +func_239F() +{ + return getweaponmodel(self.grenadeweapon); +} + +//Function Number: 87 +func_24B6(param_00) +{ + if(!isdefined(param_00)) + { + param_00 = 500; + } + + return gettime() - self.var_24B7 < param_00; +} + +//Function Number: 88 +func_24B8() +{ + if(!self.grenadeammo) + { + return 0; + } + + if(self.script_forcegrenade) + { + return 1; + } + + return isplayer(self.enemy); +} + +//Function Number: 89 +func_24B9() +{ + return weaponisboltaction(self.weapon); +} + +//Function Number: 90 +func_24BA(param_00) +{ + var_01 = randomint(param_00.size); + if(param_00.size > 1) + { + var_02 = 0; + for(var_03 = 0;var_03 < param_00.size;var_03++) + { + var_02 = var_02 + param_00[var_03]; + } + + var_04 = randomfloat(var_02); + var_02 = 0; + for(var_03 = 0;var_03 < param_00.size;var_03++) + { + var_02 = var_02 + param_00[var_03]; + if(var_04 < var_02) + { + var_01 = var_03; + break; + } + } + } + + return var_01; +} + +//Function Number: 91 +func_24BB(param_00,param_01) +{ + if(!isdefined(level.var_20D1)) + { + anim.var_20D1 = []; + } + + level.var_20D1[level.var_20D1.size] = param_00; + level._effect["step_" + param_00] = param_01; +} + +//Function Number: 92 +func_24BC(param_00,param_01) +{ + if(!isdefined(level.var_20D2)) + { + anim.var_20D2 = []; + } + + level.var_20D2[level.var_20D2.size] = param_00; + level._effect["step_small_" + param_00] = param_01; +} + +//Function Number: 93 +func_24BD(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if(!isdefined(param_02)) + { + param_02 = "all"; + } + + if(!isdefined(level._notetrackfx)) + { + level._notetrackfx = []; + } + + level._notetrackfx[param_00][param_02] = spawnstruct(); + level._notetrackfx[param_00][param_02].tag = param_01; + level._notetrackfx[param_00][param_02].fx = param_03; + if(isdefined(param_04)) + { + level._notetrackfx[param_00][param_02].var_23FC = param_04; + } + + if(isdefined(param_05)) + { + level._notetrackfx[param_00][param_02].var_23FD = param_05; + } +} + +//Function Number: 94 +func_24BE(param_00,param_01) +{ + self endon("death"); + level notify("newdebugline"); + level endon("newdebugline"); + wait 0.05; +} + +//Function Number: 95 +func_10E1(param_00) +{ + thread func_24BF(param_00); +} + +//Function Number: 96 +func_24BF(param_00) +{ + self endon("death"); + self notify("anim_prone_change"); + self endon("anim_prone_change"); + self enterprone(param_00,isdefined(self.a.var_D29)); + self waittill("killanimscript"); + if(self.a.pose != "prone" && !isdefined(self.a.var_D29)) + { + self.a.pose = "prone"; + } +} + +//Function Number: 97 +func_0F7D(param_00) +{ + thread func_24C0(param_00); +} + +//Function Number: 98 +func_24C0(param_00) +{ + self endon("death"); + self notify("anim_prone_change"); + self endon("anim_prone_change"); + self exitprone(param_00); + self waittill("killanimscript"); + if(self.a.pose == "prone") + { + self.a.pose = "crouch"; + } +} + +//Function Number: 99 +func_0F65() +{ + if(self.a.var_CE2) + { + return 0; + } + + if(!animscripts/weaponlist::func_CCA()) + { + return 0; + } + + if(weaponclass(self.weapon) == "mg") + { + return 0; + } + + if(isdefined(self.disable_blindfire) && self.disable_blindfire == 1) + { + return 0; + } + + return 1; +} + +//Function Number: 100 +func_24C2() +{ + if(!func_0F8C()) + { + return 0; + } + + var_00 = self getmuzzlepos(); + return sighttracepassed(var_00,func_0CEE(),0,undefined); +} + +//Function Number: 101 +func_0FC3(param_00) +{ + return self.a.var_CA6[param_00]; +} + +//Function Number: 102 +func_0F26(param_00,param_01) +{ + if(randomint(2)) + { + return param_00; + } + + return param_01; +} + +//Function Number: 103 +func_0D4D(param_00) +{ + return self.a.array[param_00]; +} + +//Function Number: 104 +func_0F8D(param_00) +{ + return self.a.array[param_00].size > 0; +} + +//Function Number: 105 +func_0CA8(param_00) +{ + var_01 = randomint(self.a.array[param_00].size); + return self.a.array[param_00][var_01]; +} + +//Function Number: 106 +array(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,param_0D) +{ + var_0E = []; + if(isdefined(param_00)) + { + } + else + { + return var_7B; + } + + if(isdefined(param_02)) + { + } + else + { + return var_7B; + } + + if(isdefined(param_03)) + { + } + else + { + return var_7B; + } + + if(isdefined(param_04)) + { + } + else + { + return var_7B; + } + + if(isdefined(param_05)) + { + } + else + { + return var_7B; + } + + if(isdefined(param_06)) + { + } + else + { + return var_7B; + } + + if(isdefined(param_07)) + { + } + else + { + return var_7B; + } + + if(isdefined(param_08)) + { + } + else + { + return var_7B; + } + + if(isdefined(param_09)) + { + } + else + { + return var_7B; + } + + if(isdefined(param_0A)) + { + } + else + { + return var_7B; + } + + if(isdefined(param_0B)) + { + } + else + { + return var_7B; + } + + if(isdefined(param_0C)) + { + } + else + { + return var_7B; + } + + if(isdefined(param_0D)) + { + } + else + { + return var_7B; + } + + if(isdefined(var_0E)) + { + } + + return var_7B; +} + +//Function Number: 107 +func_115A() +{ + return self.primaryweapon; +} + +//Function Number: 108 +func_24C3() +{ + return self.secondaryweapon; +} + +//Function Number: 109 +func_24C4() +{ + return self.sidearm; +} + +//Function Number: 110 +func_24C5() +{ + return self.weapon; +} + +//Function Number: 111 +func_1118() +{ + return self.weapon == self.primaryweapon && self.weapon != "none"; +} + +//Function Number: 112 +func_24C6() +{ + return self.weapon == self.secondaryweapon && self.weapon != "none"; +} + +//Function Number: 113 +func_0C95() +{ + return self.weapon == self.sidearm && self.weapon != "none"; +} + +//Function Number: 114 +func_24C7() +{ + if(self.weapon == self.primaryweapon) + { + return "primary"; + } + + if(self.weapon == self.secondaryweapon) + { + return "secondary"; + } + + if(self.weapon == self.sidearm) + { + return "sidearm"; + } +} + +//Function Number: 115 +func_24C8(param_00) +{ + if(isdefined(self.weaponinfo[param_00])) + { + return 1; + } + + return 0; +} + +//Function Number: 116 +func_0F99(param_00) +{ + var_01 = getmovedelta(param_00,0,1); + return self localtoworldcoords(var_01); +} + +//Function Number: 117 +func_0D2F(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A,param_0B) +{ + if(!isdefined(param_00)) + { + return 0; + } + + if(self.damagelocation == param_00) + { + return 1; + } + + if(!isdefined(param_01)) + { + return 0; + } + + if(self.damagelocation == param_01) + { + return 1; + } + + if(!isdefined(param_02)) + { + return 0; + } + + if(self.damagelocation == param_02) + { + return 1; + } + + if(!isdefined(param_03)) + { + return 0; + } + + if(self.damagelocation == param_03) + { + return 1; + } + + if(!isdefined(param_04)) + { + return 0; + } + + if(self.damagelocation == param_04) + { + return 1; + } + + if(!isdefined(param_05)) + { + return 0; + } + + if(self.damagelocation == param_05) + { + return 1; + } + + if(!isdefined(param_06)) + { + return 0; + } + + if(self.damagelocation == param_06) + { + return 1; + } + + if(!isdefined(param_07)) + { + return 0; + } + + if(self.damagelocation == param_07) + { + return 1; + } + + if(!isdefined(param_08)) + { + return 0; + } + + if(self.damagelocation == param_08) + { + return 1; + } + + if(!isdefined(param_09)) + { + return 0; + } + + if(self.damagelocation == param_09) + { + return 1; + } + + if(!isdefined(param_0A)) + { + return 0; + } + + if(self.damagelocation == param_0A) + { + return 1; + } + + return 0; +} + +//Function Number: 118 +func_24C9() +{ + return weaponclass(self.weapon) == "pistol"; +} + +//Function Number: 119 +func_0BB6() +{ + return weaponclass(self.weapon) == "rocketlauncher"; +} + +//Function Number: 120 +func_0F79() +{ + return weaponclass(self.weapon) == "mg"; +} + +//Function Number: 121 +func_2380() +{ + return weaponclass(self.weapon) == "spread"; +} + +//Function Number: 122 +func_0EE3() +{ + var_00 = weaponclass(self.weapon); + switch(var_00) + { + case "rifle": + case "sniper": + case "smg": + case "spread": + case "mg": + return 1; + } + + return 0; +} + +//Function Number: 123 +func_24CA(param_00) +{ + self endon("killanimscript"); + var_01 = self.origin; + var_02 = (0,0,0); + for(;;) + { + wait 0.05; + var_03 = distance(self.origin,var_01); + var_01 = self.origin; + if(self.health == 1) + { + self.a.var_D55 = 1; + self startragdoll(); + self clearanim(param_00,0.1); + wait 0.05; + physicsexplosionsphere(var_01,600,0,var_03 * 0.1); + self notify("killanimscript"); + return; + } + } +} + +//Function Number: 124 +func_0CB2() +{ + return isdefined(self.cqbwalking) && !isdefined(self.var_73C); +} + +//Function Number: 125 +func_0C98() +{ + return isdefined(self.cqbwalking); +} + +//Function Number: 126 +func_10B9() +{ + return !self.var_781 || isdefined(self.cqbwalking); +} + +//Function Number: 127 +func_10F0() +{ + self.a.var_10F2 = randomint(2); +} + +//Function Number: 128 +func_0CEA(param_00) +{ + return weaponclass(param_00) == "spread"; +} + +//Function Number: 129 +func_0BEB(param_00) +{ + return weaponclass(param_00) == "sniper"; +} + +//Function Number: 130 +func_0C97() +{ + return self.weapon != "none" && weaponisboltaction(self.weapon) && weaponclass(self.weapon) == "spread"; +} + +//Function Number: 131 +func_1078(param_00,param_01) +{ + var_02 = param_00 % level.var_20F6; + return level.var_20F7[var_02] % param_01; +} + +//Function Number: 132 +func_104B() +{ + if(func_24C6()) + { + return "secondary"; + } + + if(func_0C95()) + { + return "sidearm"; + } + + return "primary"; +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/walk.gsc b/MW3/PC/SP/animscripts/walk.gsc new file mode 100644 index 0000000..94a04a3 --- /dev/null +++ b/MW3/PC/SP/animscripts/walk.gsc @@ -0,0 +1,140 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\walk.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 4 + * Decompile Time: 81 ms + * Timestamp: 10/27/2023 2:18:58 AM +*******************************************************************/ + +//Function Number: 1 +func_107F() +{ + var_00 = undefined; + if(isdefined(self.pathgoalpos) && distancesquared(self.origin,self.pathgoalpos) > 4096) + { + var_00 = "stand"; + } + + var_01 = [[ self.var_FBA ]](var_00); + switch(var_01) + { + case "stand": + if(animscripts/setposemovement::func_1080()) + { + return; + } + + if(isdefined(self.walk_overrideanim)) + { + animscripts/move::func_FBE(self.walk_overrideanim,self.walk_override_weights); + return; + } + + func_1087(func_1086("straight")); + break; + + case "crouch": + if(animscripts/setposemovement::func_1083()) + { + return; + } + + func_1087(func_1086("crouch")); + break; + + default: + if(animscripts/setposemovement::func_1084()) + { + return; + } + + self.a.movement = "walk"; + func_1087(func_1086("prone")); + break; + } +} + +//Function Number: 2 +func_1085(param_00) +{ + self endon("movemode"); + self clearanim(%combatrun,0.6); + self setanimknoball(%combatrun,%body,1,0.5,self.moveplaybackrate); + if(isarray(self.walk_overrideanim)) + { + if(isdefined(self.walk_override_weights)) + { + var_01 = common_scripts\utility::choose_from_weighted_array(self.walk_overrideanim,self.walk_override_weights); + } + else + { + var_01 = self.walk_overrideanim[randomint(self.walk_overrideanim.size)]; + } + } + else + { + var_01 = self.walk_overrideanim; + } + + self setflaggedanimknob("moveanim",var_01,1,0.2); + animscripts/shared::donotetracks("moveanim"); +} + +//Function Number: 3 +func_1086(param_00) +{ + if(self.var_786 == "up") + { + return animscripts/utility::func_FC3("stairs_up"); + } + else if(self.var_786 == "down") + { + return animscripts/utility::func_FC3("stairs_down"); + } + + var_01 = animscripts/utility::func_FC3(param_00); + if(isarray(var_01)) + { + var_01 = var_01[randomint(var_01.size)]; + } + + return var_01; +} + +//Function Number: 4 +func_1087(param_00) +{ + self endon("movemode"); + var_01 = self.moveplaybackrate; + if(self.var_786 != "none") + { + var_01 = var_01 * 0.6; + } + + if(self.a.pose == "stand") + { + if(isdefined(self.enemy)) + { + thread animscripts/cqb::func_1079(); + self setflaggedanimknoball("walkanim",animscripts/cqb::func_1076(),%walk_and_run_loops,1,1,var_01,1); + } + else + { + self setflaggedanimknoball("walkanim",param_00,%body,1,1,var_01,1); + } + + animscripts/run::func_FF7(animscripts/utility::func_FC3("move_b"),animscripts/utility::func_FC3("move_l"),animscripts/utility::func_FC3("move_r")); + thread animscripts/run::func_FF8("walk"); + } + else + { + self setflaggedanimknoball("walkanim",param_00,%body,1,1,var_01,1); + animscripts/run::func_FF7(animscripts/utility::func_FC3("move_b"),animscripts/utility::func_FC3("move_l"),animscripts/utility::func_FC3("move_r")); + thread animscripts/run::func_FF8("walk"); + } + + animscripts/notetracks::func_D4F(0.2,"walkanim"); + thread animscripts/run::func_FE5(); +} \ No newline at end of file diff --git a/MW3/PC/SP/animscripts/weaponlist.gsc b/MW3/PC/SP/animscripts/weaponlist.gsc new file mode 100644 index 0000000..d208683 --- /dev/null +++ b/MW3/PC/SP/animscripts/weaponlist.gsc @@ -0,0 +1,126 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\weaponlist.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 9 + * Decompile Time: 147 ms + * Timestamp: 10/27/2023 2:18:59 AM +*******************************************************************/ + +//Function Number: 1 +func_0CCA() +{ + return weaponisauto(self.weapon) || weaponburstcount(self.weapon) > 0; +} + +//Function Number: 2 +func_0CCB() +{ + return weaponissemiauto(self.weapon); +} + +//Function Number: 3 +func_0CCC() +{ + if(func_0CCA()) + { + return 0.1 / weaponfiretime(self.weapon); + } + + return 0.5; +} + +//Function Number: 4 +func_0CCD() +{ + if(func_0CCA()) + { + return 0.1 / weaponfiretime(self.weapon); + } + + return 0.2; +} + +//Function Number: 5 +func_0CCE() +{ + return 0.25; +} + +//Function Number: 6 +func_0CCF(param_00) +{ + if(!func_0CCA() || isdefined(param_00) && param_00 == 1) + { + var_01 = 0.5 + randomfloat(1); + return weaponfiretime(self.weapon) * var_01; + } + + return weaponfiretime(self.weapon); +} + +//Function Number: 7 +func_0CD0() +{ + if(self.weapon == "none") + { + self.bulletsinclip = 0; + return 0; + } + + if(weaponclass(self.weapon) == "rocketlauncher") + { + if(!self.a.var_CD2) + { + thread animscripts/combat_utility::func_CD3(); + } + } + + if(!isdefined(self.bulletsinclip)) + { + self.bulletsinclip = weaponclipsize(self.weapon); + } + else + { + self.bulletsinclip = weaponclipsize(self.weapon); + } + + if(self.bulletsinclip <= 0) + { + return 0; + } + + return 1; +} + +//Function Number: 8 +func_0CD4(param_00,param_01,param_02,param_03,param_04) +{ + if(!isdefined(param_02)) + { + param_02 = 3; + } + + if(!isdefined(param_03)) + { + param_02 = 1; + } + + if(!isdefined(param_04)) + { + param_04 = "rifle"; + } + + param_00 = tolower(param_00); + level.var_CD5[param_00]["type"] = param_01; + level.var_CD5[param_00]["time"] = param_02; + level.var_CD5[param_00]["clipsize"] = param_03; + level.var_CD5[param_00]["anims"] = param_04; +} + +//Function Number: 9 +func_0CD6(param_00) +{ + level.var_CD5[tolower(param_00)]["type"] = "turret"; +} \ No newline at end of file diff --git a/MW3/PC/SP/common_scripts/_artcommon.gsc b/MW3/PC/SP/common_scripts/_artcommon.gsc new file mode 100644 index 0000000..685a4cc --- /dev/null +++ b/MW3/PC/SP/common_scripts/_artcommon.gsc @@ -0,0 +1,128 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: common_scripts\_artcommon.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 10 + * Decompile Time: 163 ms + * Timestamp: 10/27/2023 2:22:04 AM +*******************************************************************/ + +//Function Number: 1 +artstartvisionfileexport() +{ + common_scripts\utility::fileprint_launcher_start_file(); +} + +//Function Number: 2 +artendvisionfileexport() +{ + return common_scripts\utility::fileprint_launcher_end_file("\\share\\raw\\vision\\" + level.script + ".vision",1); +} + +//Function Number: 3 +artstartfogfileexport() +{ + common_scripts\utility::fileprint_launcher_start_file(); +} + +//Function Number: 4 +artendfogfileexport() +{ + return common_scripts\utility::fileprint_launcher_end_file("\\share\\raw\\maps\\createart\\" + level.script + "_art.gsc",1); +} + +//Function Number: 5 +artcommonfxprintln(param_00) +{ + common_scripts\utility::fileprint_launcher(param_00); +} + +//Function Number: 6 +setfogsliders() +{ +} + +//Function Number: 7 +translatefogsliderstoscript() +{ + level.fogexphalfplane = getdvarfloat("scr_fog_exp_halfplane"); + level.fognearplane = getdvarfloat("scr_fog_nearplane"); + level.fogcolor = getdvarvector("scr_fog_color"); + level.fogmaxopacity = getdvarfloat("scr_fog_max_opacity"); + level.sunfogenabled = getdvarint("scr_sunFogEnabled"); + level.sunfogcolor = getdvarvector("scr_sunFogColor"); + level.sunfogdir = getdvarvector("scr_sunFogDir"); + level.sunfogbeginfadeangle = getdvarfloat("scr_sunFogBeginFadeAngle"); + level.sunfogendfadeangle = getdvarfloat("scr_sunFogEndFadeAngle"); + level.sunfogscale = getdvarfloat("scr_sunFogScale"); + level.fogexphalfplane = limit(level.fogexphalfplane); + level.fognearplane = limit(level.fognearplane); + var_00 = limit(level.fogcolor[0]); + var_01 = limit(level.fogcolor[1]); + var_02 = limit(level.fogcolor[2]); + level.fogcolor = (var_00,var_01,var_02); + level.fogmaxopacity = limit(level.fogmaxopacity); + level.sunfogenabled = limit(level.sunfogenabled); + var_00 = limit(level.sunfogcolor[0]); + var_01 = limit(level.sunfogcolor[1]); + var_02 = limit(level.sunfogcolor[2]); + level.sunfogcolor = (var_00,var_01,var_02); + var_03 = limit(level.sunfogdir[0]); + var_04 = limit(level.sunfogdir[1]); + var_05 = limit(level.sunfogdir[2]); + level.sunfogdir = (var_03,var_04,var_05); + level.sunfogbeginfadeangle = limit(level.sunfogbeginfadeangle); + level.sunfogendfadeangle = limit(level.sunfogendfadeangle); + level.sunfogscale = limit(level.sunfogscale); +} + +//Function Number: 8 +limit(param_00) +{ + var_01 = 0.001; + if(param_00 < var_01 && param_00 > var_01 * -1) + { + param_00 = 0; + } + + return param_00; +} + +//Function Number: 9 +updatefogfromscript() +{ + if(!getdvarint("scr_fog_disable")) + { + if(level.sunfogenabled) + { + setexpfog(level.fognearplane,level.fogexphalfplane,level.fogcolor[0],level.fogcolor[1],level.fogcolor[2],level.fogmaxopacity,0,level.sunfogcolor[0],level.sunfogcolor[1],level.sunfogcolor[2],level.sunfogdir,level.sunfogbeginfadeangle,level.sunfogendfadeangle,level.sunfogscale); + return; + } + + setexpfog(level.fognearplane,level.fogexphalfplane,level.fogcolor[0],level.fogcolor[1],level.fogcolor[2],level.fogmaxopacity,0); + return; + } + + setexpfog(1215752192,1215752193,0,0,0,0,0); +} + +//Function Number: 10 +artfxprintlnfog() +{ + common_scripts\utility::fileprint_launcher(""); + common_scripts\utility::fileprint_launcher("\t//* Fog section * "); + common_scripts\utility::fileprint_launcher(""); + common_scripts\utility::fileprint_launcher("\tsetDevDvar( \"scr_fog_disable\", \" + getdvarint("scr_fog_disable") + "\" + " );"); + common_scripts\utility::fileprint_launcher(""); + if(!getdvarint("scr_fog_disable")) + { + if(level.sunfogenabled) + { + common_scripts\utility::fileprint_launcher("\tsetExpFog( " + level.fognearplane + ", " + level.fogexphalfplane + ", " + level.fogcolor[0] + ", " + level.fogcolor[1] + ", " + level.fogcolor[2] + ", " + level.fogmaxopacity + ", 0, " + level.sunfogcolor[0] + ", " + level.sunfogcolor[1] + ", " + level.sunfogcolor[2] + ", (" + level.sunfogdir[0] + ", " + level.sunfogdir[1] + ", " + level.sunfogdir[2] + "), " + level.sunfogbeginfadeangle + ", " + level.sunfogendfadeangle + ", " + level.sunfogscale + " );"); + return; + } + + common_scripts\utility::fileprint_launcher("\tsetExpFog( " + level.fognearplane + ", " + level.fogexphalfplane + ", " + level.fogcolor[0] + ", " + level.fogcolor[1] + ", " + level.fogcolor[2] + ", " + level.fogmaxopacity + ", 0 );"); + } +} \ No newline at end of file diff --git a/MW3/PC/SP/common_scripts/_createfx.gsc b/MW3/PC/SP/common_scripts/_createfx.gsc new file mode 100644 index 0000000..f1bf3cf --- /dev/null +++ b/MW3/PC/SP/common_scripts/_createfx.gsc @@ -0,0 +1,1939 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: common_scripts\_createfx.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 83 + * Decompile Time: 1365 ms + * Timestamp: 10/27/2023 2:23:22 AM +*******************************************************************/ + +//Function Number: 1 +createeffect(param_00,param_01) +{ + var_02 = spawnstruct(); + if(!isdefined(level.createfxent)) + { + level.createfxent = []; + } + + level.createfxent[level.createfxent.size] = var_02; + var_02.v = []; + var_02.v["type"] = param_00; + var_02.v["fxid"] = param_01; + var_02.v["angles"] = (0,0,0); + var_02.v["origin"] = (0,0,0); + var_02.var_845 = 1; + if(isdefined(param_01) && isdefined(level.createfxbyfxid)) + { + var_03 = level.createfxbyfxid[param_01]; + if(!isdefined(var_03)) + { + var_03 = []; + } + + level.createfxbyfxid[var_02] = var_7B; + } + + return var_03; +} + +//Function Number: 2 +getloopeffectdelaydefault() +{ + return 0.5; +} + +//Function Number: 3 +getoneshoteffectdelaydefault() +{ + return -15; +} + +//Function Number: 4 +getexploderdelaydefault() +{ + return 0; +} + +//Function Number: 5 +getintervalsounddelaymindefault() +{ + return 0.75; +} + +//Function Number: 6 +getintervalsounddelaymaxdefault() +{ + return 2; +} + +//Function Number: 7 +add_effect(param_00,param_01) +{ + if(!isdefined(level._effect)) + { + level._effect = []; + } + + level._effect[param_00] = loadfx(param_01); +} + +//Function Number: 8 +createloopsound() +{ + var_00 = spawnstruct(); + if(!isdefined(level.createfxent)) + { + level.createfxent = []; + } + + level.createfxent[level.createfxent.size] = var_00; + var_00.v = []; + var_00.v["type"] = "soundfx"; + var_00.v["fxid"] = "No FX"; + var_00.v["soundalias"] = "nil"; + var_00.v["angles"] = (0,0,0); + var_00.v["origin"] = (0,0,0); + var_00.v["server_culled"] = 1; + if(getdvar("serverCulledSounds") != "1") + { + var_00.v["server_culled"] = 0; + } + + var_00.var_845 = 1; + return var_00; +} + +//Function Number: 9 +createintervalsound() +{ + var_00 = createloopsound(); + var_00.v["type"] = "soundfx_interval"; + var_00.v["delay_min"] = getintervalsounddelaymindefault(); + var_00.v["delay_max"] = getintervalsounddelaymaxdefault(); + return var_00; +} + +//Function Number: 10 +createnewexploder() +{ + var_00 = spawnstruct(); + if(!isdefined(level.createfxent)) + { + level.createfxent = []; + } + + level.createfxent[level.createfxent.size] = var_00; + var_00.v = []; + var_00.v["type"] = "exploder"; + var_00.v["fxid"] = "No FX"; + var_00.v["soundalias"] = "nil"; + var_00.v["loopsound"] = "nil"; + var_00.v["angles"] = (0,0,0); + var_00.v["origin"] = (0,0,0); + var_00.v["exploder"] = 1; + var_00.v["flag"] = "nil"; + var_00.v["exploder_type"] = "normal"; + var_00.var_845 = 1; + return var_00; +} + +//Function Number: 11 +createexploderex(param_00,param_01) +{ + var_02 = common_scripts\utility::createexploder(param_00); + var_02.v["exploder"] = param_01; + return var_02; +} + +//Function Number: 12 +set_origin_and_angles(param_00,param_01) +{ + self.v["origin"] = param_00; + self.v["angles"] = param_01; +} + +//Function Number: 13 +set_forward_and_up_vectors() +{ + self.v["up"] = anglestoup(self.v["angles"]); + self.v["forward"] = anglestoforward(self.v["angles"]); +} + +//Function Number: 14 +createfx_common() +{ + precacheshader("black"); + if(level.mp_createfx) + { + hack_start("painter_mp"); + } + else + { + hack_start("painter"); + } + + common_scripts\utility::flag_init("createfx_saving"); + if(!isdefined(level.createfx)) + { + level.createfx = []; + } + + level.var_852 = 0; + var_00 = getentarray(); + foreach(var_02 in var_00) + { + if(isspawner(var_02)) + { + var_02 delete(); + } + } + + var_04 = getentarray("trigger_multiple","classname"); + for(var_05 = 0;var_05 < var_04.size;var_05++) + { + var_04[var_05] delete(); + } + + var_04 = getentarray("trigger_radius","classname"); + for(var_05 = 0;var_05 < var_04.size;var_05++) + { + var_04[var_05] delete(); + } + + level notify("createfx_common_done"); +} + +//Function Number: 15 +createfxlogic() +{ + waittillframeend; + common_scripts\_createfxmenu::menu_init(); + if(!isdefined(level._effect)) + { + level._effect = []; + } + + if(getdvar("createfx_map") == "") + { + } + else if(getdvar("createfx_map") == common_scripts\utility::get_template_level()) + { + [[ level.func_position_player ]](); + } + + level.var_833 = []; + level.var_83E = 30; + var_00 = []; + var_01 = []; + var_00[0] = 0; + var_01[1] = 1; + var_01[2] = -2; + var_01[3] = 1; + var_01[4] = -2; + var_02 = newhudelem(); + var_02.location = 0; + var_02.alignx = "center"; + var_02.aligny = "middle"; + var_02.foreground = 1; + var_02.fontscale = 2; + var_02.sort = 20; + var_02.alpha = 1; + var_02.x = 320; + var_02.y = 233; + var_02 settext("."); + level.var_857 = newhudelem(); + level.var_857.alpha = 0; + level.var_857 settext("marker"); + for(var_03 = 0;var_03 < level.var_83E;var_03++ = -1) + { + var_04 = []; + for(var_05 = 0;var_05 < 1;var_05++ = var_7B[4]) + { + var_06 = newhudelem(); + var_06.alignx = "left"; + var_06.location = 0; + var_06.foreground = 1; + var_06.fontscale = 1.4; + var_06.sort = 20 - var_05; + var_06.alpha = 1; + var_06.x = 0 + var_01[var_05]; + var_06.y = 60 + var_7B[var_05] + var_03 * 15; + if(var_05 > 0) + { + var_06.color = (0,0,0); + } + + var_04[var_04.size] = var_06; + } + + level.var_833[var_03] = var_04; + } + + var_04 = []; + for(var_05 = 0;var_05 < 5;var_05++ = var_7B[3]) + { + var_06 = newhudelem(); + var_06.alignx = "center"; + var_06.location = 0; + var_06.foreground = 1; + var_06.fontscale = 1.4; + var_06.sort = 20 - var_05; + var_06.alpha = 1; + var_06.x = 320 + var_01[var_05]; + var_06.y = 80 + var_7B[var_05]; + if(var_05 > 0) + { + var_06.color = (0,0,0); + } + + var_04[var_04.size] = var_06; + } + + level.createfx_centerprint = var_04; + level.var_858 = 0; + level.var_859 = 0; + level.var_85A = 0; + level.var_85B = 0; + level.var_85C = 0; + level.var_85D = 0; + level.var_85E = []; + level.var_81F = []; + level.var_85F = []; + level.var_85F["escape"] = 1; + level.var_85F["BUTTON_LSHLDR"] = 1; + level.var_85F["BUTTON_RSHLDR"] = 1; + level.var_85F["mouse1"] = 1; + level.var_85F["ctrl"] = 1; + level.var_860 = 1; + level.var_818 = undefined; + level.var_861 = []; + var_07 = 0; + var_08 = (0,0,0); + if(!level.mp_createfx) + { + var_08 = level.player.origin; + } + + var_09 = []; + var_1C["loopfx"] = "selected"; + var_1C["loopfx"] = "highlighted"; + var_1C["loopfx"] = "default"; + var_1C["oneshotfx"] = "selected"; + var_1C["oneshotfx"] = "highlighted"; + var_1C["oneshotfx"] = "default"; + var_1C["exploder"] = "selected"; + var_1C["exploder"] = "highlighted"; + var_1C["exploder"] = "default"; + var_1C["rainfx"] = "selected"; + var_1C["rainfx"] = "highlighted"; + var_1C["rainfx"] = "default"; + var_1C["soundfx"] = "selected"; + var_1C["soundfx"] = "highlighted"; + var_1C["soundfx"] = "default"; + var_1C["soundfx_interval"] = "selected"; + var_1C["soundfx_interval"] = "highlighted"; + var_1C["soundfx_interval"] = "default"; + var_0A = undefined; + level.var_863 = 0; + common_scripts\_createfxmenu::setmenu("none"); + level.var_864 = 0; + var_0B = newhudelem(); + var_0B.x = -120; + var_0B.y = 200; + var_0B.foreground = 0; + var_0B setshader("black",250,160); + var_0B.alpha = 0; + level.var_832 = 0; + var_04 = 0; + while(var_04 < level.createfxent.size) + { + var_0C = level.createfxent[var_04]; + var_0C post_entity_creation_function(); + var_04++ = (0.2,0.9,0.2); + } + + thread draw_distance(); + var_0D = undefined; + thread createfx_autosave(); + for(;;) + { + var_0E = 0; + var_0F = anglestoright(level.player getplayerangles()); + var_10 = anglestoforward(level.player getplayerangles()); + var_11 = anglestoup(level.player getplayerangles()); + var_12 = 0.85; + var_13 = var_10 * 750; + level.var_865 = bullettrace(level.player geteye(),level.player geteye() + var_13,0,undefined); + var_14 = undefined; + level.var_866 = []; + level.var_867 = []; + process_button_held_and_clicked(); + var_15 = button_is_held("ctrl","BUTTON_LSHLDR"); + var_16 = button_is_clicked("mouse1","BUTTON_A"); + var_17 = button_is_held("mouse1","BUTTON_A"); + common_scripts\_createfxmenu::create_fx_menu(); + if(button_is_clicked("shift","BUTTON_X")) + { + var_08 = !var_08; + } + + if(button_is_clicked("F5")) + { + } + + if(getdvarint("scr_createfx_dump")) + { + generate_fx_log(); + } + + if(button_is_clicked("F2")) + { + toggle_createfx_drawing(); + } + + if(button_is_clicked("ins")) + { + insert_effect(); + } + + if(button_is_clicked("del")) + { + delete_pressed(); + } + + if(button_is_clicked("end","l")) + { + drop_selection_to_ground(); + var_0E = 1; + } + + if(button_is_clicked("escape")) + { + reset_fx_hud_colors(); + } + + if(button_is_clicked("space")) + { + turn_off_exploders(); + } + + if(button_is_clicked("g")) + { + select_all_exploders_of_currently_selected("exploder"); + select_all_exploders_of_currently_selected("flag"); + } + + if(button_is_clicked("tab","BUTTON_RSHLDR")) + { + move_selection_to_cursor(); + var_0E = 1; + } + + if(button_is_held("h","F1")) + { + show_help(); + wait 0.05; + continue; + } + + if(button_is_clicked("BUTTON_LSTICK")) + { + copy_ents(); + } + + if(button_is_clicked("BUTTON_RSTICK")) + { + paste_ents(); + } + + if(var_15) + { + if(button_is_clicked("c")) + { + copy_ents(); + } + + if(button_is_clicked("v")) + { + paste_ents(); + } + } + + if(isdefined(level.var_837)) + { + common_scripts\_createfxmenu::menu_fx_option_set(); + } + + var_04 = 0; + while(var_04 < level.createfxent.size) + { + var_0C = level.createfxent[var_04]; + var_18 = vectornormalize(var_0C.v["origin"] - level.player.origin + (0,0,55)); + var_19 = vectordot(var_10,var_18); + if(var_19 < var_12) + { + continue; + } + + var_12 = var_19; + var_14 = var_0C; + var_04++ = (0.5,1,0.75); + } + + level.var_868 = var_14; + if(isdefined(var_14)) + { + if(isdefined(var_0A)) + { + if(var_0A != var_14) + { + if(!ent_is_selected(var_0A)) + { + var_0A thread entity_highlight_disable(); + } + + if(!ent_is_selected(var_14)) + { + var_14 thread entity_highlight_enable(); + } + } + } + else if(!ent_is_selected(var_14)) + { + var_14 thread entity_highlight_enable(); + } + } + + manipulate_createfx_ents(var_14,var_16,var_17,var_15,var_1C,var_0F); + if(var_08 && level.var_81F.size > 0) + { + thread [[ level.func_process_fx_rotater ]](); + if(button_is_clicked("enter","p")) + { + reset_axis_of_selected_ents(); + } + + if(button_is_clicked("v")) + { + copy_angles_of_selected_ents(); + } + + var_04 = 0; + while(var_04 < level.var_81F.size) + { + level.var_81F[var_04] draw_axis(); + var_04++ = (1,1,0.2); + } + + if(level.var_85B != 0 || level.var_85D != 0 || level.var_85C != 0) + { + var_0E = 1; + } + + wait 0.05; + } + else + { + var_1A = get_selected_move_vector(); + var_04 = 0; + while(var_04 < level.var_81F.size) + { + var_0C = level.var_81F[var_04]; + if(isdefined(var_0C.model)) + { + continue; + } + + var_0C.v["origin"] = var_0C.v["origin"] + var_1A; + var_04++ = (0.2,0.9,0.2); + } + + if(distance((0,0,0),var_1A) > 0) + { + var_0E = 1; + } + + wait 0.05; + } + + if(var_0E) + { + update_selected_entities(); + } + + if(!level.mp_createfx) + { + var_09 = [[ level.func_position_player_get ]](var_09); + } + + var_0A = var_14; + if(last_selected_entity_has_changed(var_0D)) + { + level.var_822 = 0; + reset_fx_hud_colors(); + common_scripts\_createfxmenu::setmenu("none"); + } + + if(level.var_81F.size) + { + var_0D = level.var_81F[level.var_81F.size - 1]; + continue; + } + + var_0D = undefined; + } +} + +//Function Number: 16 +copy_angles_of_selected_ents() +{ + level notify("new_ent_selection"); + for(var_00 = 0;var_00 < level.var_81F.size;var_00++) + { + var_01 = level.var_81F[var_00]; + var_01.v["angles"] = level.var_81F[level.var_81F.size - 1].v["angles"]; + var_01 set_forward_and_up_vectors(); + } + + update_selected_entities(); +} + +//Function Number: 17 +reset_axis_of_selected_ents() +{ + level notify("new_ent_selection"); + for(var_00 = 0;var_00 < level.var_81F.size;var_00++) + { + var_01 = level.var_81F[var_00]; + var_01.v["angles"] = (0,0,0); + var_01 set_forward_and_up_vectors(); + } + + update_selected_entities(); +} + +//Function Number: 18 +last_selected_entity_has_changed(param_00) +{ + if(isdefined(param_00)) + { + if(!common_scripts\_createfxmenu::entities_are_selected()) + { + return 1; + } + } + else + { + return common_scripts\_createfxmenu::entities_are_selected(); + } + + return param_00 != level.var_81F[level.var_81F.size - 1]; +} + +//Function Number: 19 +createfx_showorigin(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,param_0D,param_0E,param_0F,param_10,param_11,param_12) +{ +} + +//Function Number: 20 +drop_selection_to_ground() +{ + for(var_00 = 0;var_00 < level.var_81F.size;var_00++) + { + var_01 = level.var_81F[var_00]; + var_02 = bullettrace(var_01.v["origin"],var_01.v["origin"] + (0,0,-2048),0,undefined); + var_01.v["origin"] = var_02["position"]; + } +} + +//Function Number: 21 +turn_off_exploders() +{ + level notify("createfx_exploder_reset"); + var_00 = []; + for(var_01 = 0;var_01 < level.var_81F.size;var_01++) + { + var_02 = level.var_81F[var_01]; + if(isdefined(var_02.v["exploder"])) + { + var_00[var_02.v["exploder"]] = 1; + } + } + + var_03 = getarraykeys(var_00); + for(var_01 = 0;var_01 < var_03.size;var_01++) + { + common_scripts\utility::exploder(var_03[var_01]); + } +} + +//Function Number: 22 +draw_distance() +{ + var_00 = 0; + if(getdvarint("createfx_drawdist") == 0) + { + } + + for(;;) + { + var_01 = getdvarint("createfx_drawdist"); + for(var_02 = 0;var_02 < level.createfxent.size;var_02++) + { + var_03 = level.createfxent[var_02]; + var_03.var_845 = distance(level.player.origin,var_03.v["origin"]) <= var_01; + var_00++; + if(var_00 > 100) + { + var_00 = 0; + wait 0.05; + } + } + + if(level.createfxent.size == 0) + { + wait 0.05; + } + } +} + +//Function Number: 23 +createfx_autosave() +{ + for(;;) + { + wait 300; + common_scripts\utility::flag_waitopen("createfx_saving"); + generate_fx_log(1); + } +} + +//Function Number: 24 +rotate_over_time(param_00,param_01) +{ + level endon("new_ent_selection"); + var_02 = 0.1; + for(var_03 = 0;var_03 < var_02 * 20;var_03++) + { + if(level.var_85B != 0) + { + param_00 addpitch(level.var_85B); + } + else if(level.var_85D != 0) + { + param_00 addyaw(level.var_85D); + } + else + { + param_00 addroll(level.var_85C); + } + + wait 0.05; + param_00 draw_axis(); + for(var_04 = 0;var_04 < level.var_81F.size;var_04++) + { + var_05 = level.var_81F[var_04]; + if(isdefined(var_05.model)) + { + continue; + } + + var_05.v["origin"] = param_01[var_04].origin; + var_05.v["angles"] = param_01[var_04].angles; + } + } +} + +//Function Number: 25 +delete_pressed() +{ + if(level.var_832) + { + remove_selected_option(); + return; + } + + delete_selection(); +} + +//Function Number: 26 +remove_selected_option() +{ + if(!isdefined(level.var_837)) + { + return; + } + + var_00 = level.var_82A[level.var_837]["name"]; + for(var_01 = 0;var_01 < level.createfxent.size;var_01++) + { + var_02 = level.createfxent[var_01]; + if(!ent_is_selected(var_02)) + { + continue; + } + + var_02 remove_option(var_00); + } + + update_selected_entities(); + reset_fx_hud_colors(); +} + +//Function Number: 27 +remove_option(param_00) +{ + self.v[param_00] = undefined; +} + +//Function Number: 28 +delete_selection() +{ + var_00 = []; + for(var_01 = 0;var_01 < level.createfxent.size;var_01++) + { + var_02 = level.createfxent[var_01]; + if(ent_is_selected(var_02)) + { + if(isdefined(var_02.looper)) + { + var_02.looper delete(); + } + + var_02 notify("stop_loop"); + continue; + } + + var_00[var_00.size] = var_02; + } + + level.createfxent = var_00; + level.var_85E = []; + level.var_81F = []; + clear_fx_hudelements(); +} + +//Function Number: 29 +move_selection_to_cursor() +{ + var_00 = level.var_865["position"]; + if(level.var_81F.size <= 0) + { + return; + } + + var_01 = get_center_of_array(level.var_81F); + var_02 = var_01 - var_00; + for(var_03 = 0;var_03 < level.var_81F.size;var_03++) + { + var_04 = level.var_81F[var_03]; + if(isdefined(var_04.model)) + { + continue; + } + + var_04.v["origin"] = var_04.v["origin"] - var_02; + } +} + +//Function Number: 30 +insert_effect() +{ + common_scripts\_createfxmenu::setmenu("creation"); + level.var_822 = 0; + clear_fx_hudelements(); + set_fx_hudelement("Pick effect type to create:"); + set_fx_hudelement("1. One Shot fx"); + set_fx_hudelement("2. Looping fx"); + set_fx_hudelement("3. Looping sound"); + set_fx_hudelement("4. Exploder"); + set_fx_hudelement("5. One Shot Sound"); + set_fx_hudelement("(c) Cancel"); + set_fx_hudelement("(x) Exit"); +} + +//Function Number: 31 +show_help() +{ + clear_fx_hudelements(); + set_fx_hudelement("Help:"); + set_fx_hudelement("Insert Insert entity"); + set_fx_hudelement("L Drop selected entities to the ground"); + set_fx_hudelement("A Add option to the selected entities"); + set_fx_hudelement("P Reset the rotation of the selected entities"); + set_fx_hudelement("V Copy the angles from the most recently selected fx onto all selected fx."); + set_fx_hudelement("Delete Kill the selected entities"); + set_fx_hudelement("ESCAPE Cancel out of option-modify-mode, must have console open"); + set_fx_hudelement("Ctrl-C Copy"); + set_fx_hudelement("Ctrl-V Paste"); + set_fx_hudelement("F2 Toggle createfx dot and text drawing"); + set_fx_hudelement("F5 SAVES your work"); + set_fx_hudelement("Dpad Move selected entitise on X/Y or rotate pitch/yaw"); + set_fx_hudelement("A button Toggle the selection of the current entity"); + set_fx_hudelement("X button Toggle entity rotation mode"); + set_fx_hudelement("Y button Move selected entites up or rotate roll"); + set_fx_hudelement("B button Move selected entites down or rotate roll"); + set_fx_hudelement("R Shoulder Move selected entities to the cursor"); + set_fx_hudelement("L Shoulder Hold to select multiple entites"); + set_fx_hudelement("L JoyClick Copy"); + set_fx_hudelement("R JoyClick Paste"); + set_fx_hudelement("N UFO"); + set_fx_hudelement("T Toggle Timescale FAST"); + set_fx_hudelement("Y Toggle Timescale SLOW"); + set_fx_hudelement("[ Toggle FX Visibility"); + set_fx_hudelement("] Toggle ShowTris"); + set_fx_hudelement("F11 Toggle FX Profile"); +} + +//Function Number: 32 +select_last_entity() +{ + select_entity(level.createfxent.size - 1,level.createfxent[level.createfxent.size - 1]); +} + +//Function Number: 33 +select_all_exploders_of_currently_selected(param_00) +{ + var_01 = []; + foreach(var_03 in level.var_81F) + { + if(!isdefined(var_03.v[param_00])) + { + continue; + } + + var_04 = var_03.v[param_00]; + var_01[var_04] = 1; + } + + foreach(var_04, var_07 in var_01) + { + foreach(var_09, var_03 in level.createfxent) + { + if(index_is_selected(var_09)) + { + continue; + } + + if(!isdefined(var_03.v[param_00])) + { + continue; + } + + if(var_03.v[param_00] != var_04) + { + continue; + } + + select_entity(var_09,var_03); + } + } + + update_selected_entities(); +} + +//Function Number: 34 +copy_ents() +{ + if(level.var_81F.size <= 0) + { + return; + } + + var_00 = []; + for(var_01 = 0;var_01 < level.var_81F.size;var_01++) + { + var_02 = level.var_81F[var_01]; + var_03 = spawnstruct(); + var_03.v = var_02.v; + var_03 post_entity_creation_function(); + var_00[var_00.size] = var_03; + } + + level.var_87D = var_00; +} + +//Function Number: 35 +post_entity_creation_function() +{ + self.var_87E = 0; + self.var_845 = 1; +} + +//Function Number: 36 +paste_ents() +{ + if(!isdefined(level.var_87D)) + { + return; + } + + clear_entity_selection(); + for(var_00 = 0;var_00 < level.var_87D.size;var_00++) + { + add_and_select_entity(level.var_87D[var_00]); + } + + move_selection_to_cursor(); + update_selected_entities(); + level.var_87D = []; + copy_ents(); +} + +//Function Number: 37 +add_and_select_entity(param_00) +{ + level.createfxent[level.createfxent.size] = param_00; + select_last_entity(); +} + +//Function Number: 38 +get_center_of_array(param_00) +{ + var_01 = (0,0,0); + for(var_02 = 0;var_02 < param_00.size;var_02++) + { + var_01 = (var_01[0] + param_00[var_02].v["origin"][0],var_01[1] + param_00[var_02].v["origin"][1],var_01[2] + param_00[var_02].v["origin"][2]); + } + + return (var_01[0] / param_00.size,var_01[1] / param_00.size,var_01[2] / param_00.size); +} + +//Function Number: 39 +ent_draw_axis() +{ + self endon("death"); + for(;;) + { + draw_axis(); + wait 0.05; + } +} + +//Function Number: 40 +rotation_is_occuring() +{ + if(level.var_85C != 0) + { + return 1; + } + + if(level.var_85B != 0) + { + return 1; + } + + return level.var_85D != 0; +} + +//Function Number: 41 +print_fx_options(param_00,param_01,param_02,param_03) +{ + for(var_04 = 0;var_04 < level.var_82A.size;var_04++) + { + var_05 = level.var_82A[var_04]; + var_06 = var_05["name"]; + if(!isdefined(param_00.v[var_06])) + { + continue; + } + + if(!common_scripts\_createfxmenu::mask(var_05["mask"],param_00.v["type"])) + { + continue; + } + + if(!level.mp_createfx) + { + if(common_scripts\_createfxmenu::mask("fx",param_00.v["type"]) && var_06 == "fxid") + { + continue; + } + + if(param_00.v["type"] == "exploder" && var_06 == "exploder") + { + continue; + } + + var_07 = param_00.v["type"] + "/" + var_06; + if(isdefined(level.var_885[var_07]) && level.var_885[var_07] == param_00.v[var_06]) + { + continue; + } + } + + if(var_05["type"] == "string") + { + var_08 = param_00.v[var_06] + ""; + if(var_08 == "nil") + { + continue; + } + + cfxprintln(param_02,param_01 + "ent.v[ \" + var_06 + "\" ] = \" + param_00.v[var_06] + "\";"); + continue; + } + + cfxprintln(param_02,param_01 + "ent.v[ \" + var_06 + "\" ] = " + param_00.v[var_06] + ";"); + } +} + +//Function Number: 42 +entity_highlight_disable() +{ + self notify("highlight change"); + self endon("highlight change"); + for(;;) + { + self.var_87E = self.var_87E * 0.85; + self.var_87E = self.var_87E - 0.05; + if(self.var_87E < 0) + { + break; + } + + wait 0.05; + } + + self.var_87E = 0; +} + +//Function Number: 43 +entity_highlight_enable() +{ + self notify("highlight change"); + self endon("highlight change"); + for(;;) + { + self.var_87E = self.var_87E + 0.05; + self.var_87E = self.var_87E * 1.25; + if(self.var_87E > 1) + { + break; + } + + wait 0.05; + } + + self.var_87E = 1; +} + +//Function Number: 44 +toggle_createfx_drawing() +{ + level.var_860 = !level.var_860; +} + +//Function Number: 45 +manipulate_createfx_ents(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if(!level.var_860) + { + return; + } + + for(var_06 = 0;var_06 < level.createfxent.size;var_06++) + { + var_07 = level.createfxent[var_06]; + if(!var_07.var_845) + { + continue; + } + + var_08 = getdvarfloat("createfx_scaleid"); + if(isdefined(param_00) && var_07 == param_00) + { + if(!common_scripts\_createfxmenu::entities_are_selected()) + { + common_scripts\_createfxmenu::display_fx_info(var_07); + } + + if(param_01) + { + var_09 = index_is_selected(var_06); + level.var_864 = !var_09; + if(!param_03) + { + var_0A = level.var_81F.size; + clear_entity_selection(); + if(var_09 && var_0A == 1) + { + select_entity(var_06,var_07); + } + } + + toggle_entity_selection(var_06,var_07); + } + else if(param_02) + { + if(param_03) + { + if(level.var_864) + { + select_entity(var_06,var_07); + } + + if(!level.var_864) + { + deselect_entity(var_06,var_07); + } + } + } + + var_0B = "highlighted"; + if(index_is_selected(var_06)) + { + var_0B = "selected"; + } + + if(var_07.var_87E > 0) + { + var_0C = param_05 * var_07.v["fxid"].size * -2.93 * var_08; + } + + continue; + } + + var_0B = "default"; + if(index_is_selected(var_06)) + { + var_0B = "selected"; + } + + if(var_07.var_87E > 0) + { + var_0C = param_05 * var_07.v["fxid"].size * -2.93; + } + } +} + +//Function Number: 46 +reset_fx_hud_colors() +{ + level.var_832 = 0; + level.var_837 = undefined; + show_hud_elements(); +} + +//Function Number: 47 +show_hud_elements() +{ + for(var_00 = 0;var_00 < level.var_83E;var_00++) + { + level.var_833[var_00][0].color = (1,1,1); + } +} + +//Function Number: 48 +button_is_held(param_00,param_01) +{ + if(isdefined(param_01)) + { + if(isdefined(level.var_861[param_01])) + { + return 1; + } + } + + return isdefined(level.var_861[param_00]); +} + +//Function Number: 49 +button_is_clicked(param_00,param_01) +{ + if(isdefined(param_01)) + { + if(isdefined(level.var_866[param_01])) + { + return 1; + } + } + + return isdefined(level.var_866[param_00]); +} + +//Function Number: 50 +toggle_entity_selection(param_00,param_01) +{ + if(isdefined(level.var_85E[param_00])) + { + deselect_entity(param_00,param_01); + return; + } + + select_entity(param_00,param_01); +} + +//Function Number: 51 +select_entity(param_00,param_01) +{ + if(isdefined(level.var_85E[param_00])) + { + return; + } + + reset_fx_hud_colors(); + level notify("new_ent_selection"); + param_01 thread entity_highlight_enable(); + level.var_85E[param_00] = 1; + level.var_81F[level.var_81F.size] = param_01; +} + +//Function Number: 52 +ent_is_highlighted(param_00) +{ + if(!isdefined(level.var_868)) + { + return 0; + } + + return param_00 == level.var_868; +} + +//Function Number: 53 +deselect_entity(param_00,param_01) +{ + if(!isdefined(level.var_85E[param_00])) + { + return; + } + + reset_fx_hud_colors(); + level notify("new_ent_selection"); + level.var_85E[param_00] = undefined; + if(!ent_is_highlighted(param_01)) + { + param_01 thread entity_highlight_disable(); + } + + var_02 = []; + for(var_03 = 0;var_03 < level.var_81F.size;var_03++) + { + if(level.var_81F[var_03] != param_01) + { + var_02[var_02.size] = level.var_81F[var_03]; + } + } + + level.var_81F = var_02; +} + +//Function Number: 54 +index_is_selected(param_00) +{ + return isdefined(level.var_85E[param_00]); +} + +//Function Number: 55 +ent_is_selected(param_00) +{ + for(var_01 = 0;var_01 < level.var_81F.size;var_01++) + { + if(level.var_81F[var_01] == param_00) + { + return 1; + } + } + + return 0; +} + +//Function Number: 56 +clear_entity_selection() +{ + for(var_00 = 0;var_00 < level.var_81F.size;var_00++) + { + if(!ent_is_highlighted(level.var_81F[var_00])) + { + level.var_81F[var_00] thread entity_highlight_disable(); + } + } + + level.var_85E = []; + level.var_81F = []; +} + +//Function Number: 57 +draw_axis() +{ + var_00 = 25 * getdvarfloat("createfx_scaleid"); + var_01 = anglestoforward(self.v["angles"]); + var_01 = var_01 * var_00; + var_02 = anglestoright(self.v["angles"]); + var_02 = var_02 * var_00; + var_03 = anglestoup(self.v["angles"]); + var_03 = var_03 * var_00; +} + +//Function Number: 58 +clear_fx_hudelements() +{ + level.var_857 clearalltextafterhudelem(); + for(var_00 = 0;var_00 < level.var_83E;var_00++) + { + for(var_01 = 0;var_01 < 1;var_01++) + { + level.var_833[var_00][var_01] settext(""); + } + } + + level.var_893 = 0; +} + +//Function Number: 59 +set_fx_hudelement(param_00) +{ + for(var_01 = 0;var_01 < 1;var_01++) + { + level.var_833[level.var_893][var_01] settext(param_00); + } + + level.var_893++; +} + +//Function Number: 60 +createfx_centerprint(param_00) +{ + thread createfx_centerprint_thread(param_00); +} + +//Function Number: 61 +createfx_centerprint_thread(param_00) +{ + level notify("new_createfx_centerprint"); + level endon("new_createfx_centerprint"); + for(var_01 = 0;var_01 < 5;var_01++) + { + level.createfx_centerprint[var_01] settext(param_00); + } + + wait 4.5; + for(var_01 = 0;var_01 < 5;var_01++) + { + level.createfx_centerprint[var_01] settext(""); + } +} + +//Function Number: 62 +buttondown(param_00,param_01) +{ + return buttonpressed_internal(param_00) || buttonpressed_internal(param_01); +} + +//Function Number: 63 +buttonpressed_internal(param_00) +{ + if(!isdefined(param_00)) + { + return 0; + } + + if(kb_locked(param_00)) + { + return 0; + } + + return level.player buttonpressed(param_00); +} + +//Function Number: 64 +get_selected_move_vector() +{ + var_00 = level.player getplayerangles()[1]; + var_01 = (0,var_00,0); + var_02 = anglestoright(var_01); + var_03 = anglestoforward(var_01); + var_04 = anglestoup(var_01); + var_05 = 0; + var_06 = 1; + if(buttondown("kp_uparrow","DPAD_UP")) + { + if(level.var_859 < 0) + { + level.var_859 = 0; + } + + level.var_859 = level.var_859 + var_06; + } + else if(buttondown("kp_downarrow","DPAD_DOWN")) + { + if(level.var_859 > 0) + { + level.var_859 = 0; + } + + level.var_859 = level.var_859 - var_06; + } + else + { + level.var_859 = 0; + } + + if(buttondown("kp_rightarrow","DPAD_RIGHT")) + { + if(level.var_85A < 0) + { + level.var_85A = 0; + } + + level.var_85A = level.var_85A + var_06; + } + else if(buttondown("kp_leftarrow","DPAD_LEFT")) + { + if(level.var_85A > 0) + { + level.var_85A = 0; + } + + level.var_85A = level.var_85A - var_06; + } + else + { + level.var_85A = 0; + } + + if(buttondown("BUTTON_Y")) + { + if(level.var_858 < 0) + { + level.var_858 = 0; + } + + level.var_858 = level.var_858 + var_06; + } + else if(buttondown("BUTTON_B")) + { + if(level.var_858 > 0) + { + level.var_858 = 0; + } + + level.var_858 = level.var_858 - var_06; + } + else + { + level.var_858 = 0; + } + + var_07 = (0,0,0); + var_07 = var_07 + var_03 * level.var_859; + var_07 = var_07 + var_02 * level.var_85A; + var_07 = var_07 + var_04 * level.var_858; + return var_07; +} + +//Function Number: 65 +process_button_held_and_clicked() +{ + add_button("mouse1"); + add_kb_button("shift"); + add_kb_button("ctrl"); + add_button("BUTTON_RSHLDR"); + add_button("BUTTON_LSHLDR"); + add_button("BUTTON_RSTICK"); + add_button("BUTTON_LSTICK"); + add_button("BUTTON_A"); + add_button("BUTTON_B"); + add_button("BUTTON_X"); + add_button("BUTTON_Y"); + add_button("DPAD_UP"); + add_button("DPAD_LEFT"); + add_button("DPAD_RIGHT"); + add_button("DPAD_DOWN"); + add_kb_button("escape"); + add_kb_button("a"); + add_kb_button("g"); + add_button("F1"); + add_button("F5"); + add_button("F2"); + add_kb_button("c"); + add_kb_button("h"); + add_kb_button("i"); + add_kb_button("k"); + add_kb_button("l"); + add_kb_button("m"); + add_kb_button("p"); + add_kb_button("x"); + add_button("del"); + add_kb_button("end"); + add_kb_button("tab"); + add_kb_button("ins"); + add_kb_button("add"); + add_kb_button("space"); + add_kb_button("enter"); + add_kb_button("v"); + add_kb_button("1"); + add_kb_button("2"); + add_kb_button("3"); + add_kb_button("4"); + add_kb_button("5"); + add_kb_button("6"); + add_kb_button("7"); + add_kb_button("8"); + add_kb_button("9"); + add_kb_button("0"); +} + +//Function Number: 66 +locked(param_00) +{ + if(isdefined(level.var_85F[param_00])) + { + return 0; + } + + return kb_locked(param_00); +} + +//Function Number: 67 +kb_locked(param_00) +{ + return level.var_832 && isdefined(level.var_867[param_00]); +} + +//Function Number: 68 +add_button(param_00) +{ + if(locked(param_00)) + { + return; + } + + if(!isdefined(level.var_861[param_00])) + { + if(level.player buttonpressed(param_00)) + { + level.var_861[param_00] = 1; + level.var_866[param_00] = 1; + return; + } + + return; + } + + if(!level.player buttonpressed(param_00)) + { + level.var_861[param_00] = undefined; + } +} + +//Function Number: 69 +add_kb_button(param_00) +{ + level.var_867[param_00] = 1; + add_button(param_00); +} + +//Function Number: 70 +set_anglemod_move_vector() +{ + var_00 = 2; + if(buttondown("kp_uparrow","DPAD_UP")) + { + if(level.var_85B < 0) + { + level.var_85B = 0; + } + + level.var_85B = level.var_85B + var_00; + } + else if(buttondown("kp_downarrow","DPAD_DOWN")) + { + if(level.var_85B > 0) + { + level.var_85B = 0; + } + + level.var_85B = level.var_85B - var_00; + } + else + { + level.var_85B = 0; + } + + if(buttondown("kp_leftarrow","DPAD_LEFT")) + { + if(level.var_85D < 0) + { + level.var_85D = 0; + } + + level.var_85D = level.var_85D + var_00; + } + else if(buttondown("kp_rightarrow","DPAD_RIGHT")) + { + if(level.var_85D > 0) + { + level.var_85D = 0; + } + + level.var_85D = level.var_85D - var_00; + } + else + { + level.var_85D = 0; + } + + if(buttondown("BUTTON_Y")) + { + if(level.var_85C < 0) + { + level.var_85C = 0; + } + + level.var_85C = level.var_85C + var_00; + return; + } + + if(buttondown("BUTTON_B")) + { + if(level.var_85C > 0) + { + level.var_85C = 0; + } + + level.var_85C = level.var_85C - var_00; + return; + } + + level.var_85C = 0; +} + +//Function Number: 71 +cfxprintlnstart() +{ + common_scripts\utility::fileprint_launcher_start_file(); +} + +//Function Number: 72 +cfxprintln(param_00,param_01) +{ + common_scripts\utility::fileprint_launcher(param_01); + if(param_00 == -1) + { + } +} + +//Function Number: 73 +cfxprintlnend(param_00,param_01,param_02) +{ + var_03 = 1; + if(param_02 != "" || param_01) + { + var_03 = 0; + } + + var_04 = common_scripts\utility::get_template_level() + param_02 + "_fx.gsc"; + if(param_01) + { + var_04 = "backup.gsc"; + } + + common_scripts\utility::fileprint_launcher_end_file("/share/raw/maps/createfx/" + var_04,var_03); +} + +//Function Number: 74 +update_selected_entities() +{ + for(var_00 = 0;var_00 < level.var_81F.size;var_00++) + { + var_01 = level.var_81F[var_00]; + var_01 [[ level.func_updatefx ]](); + } +} + +//Function Number: 75 +hack_start(param_00) +{ + if(!isdefined(param_00)) + { + param_00 = "painter_mp"; + } + + precachemenu(param_00); + wait 0.05; + if(param_00 == "painter_mp") + { + return; + } + + level.player openpopupmenu(param_00); + level.player closepopupmenu(param_00); +} + +//Function Number: 76 +get_player() +{ + return getentarray("player","classname")[0]; +} + +//Function Number: 77 +createfx_orgranize_array() +{ + var_00 = []; + var_01 = []; + foreach(var_04, var_03 in var_7B) + { + var_01[var_04] = []; + } + + foreach(var_06 in level.createfxent) + { + var_07 = 0; + foreach(var_04, var_09 in var_7B) + { + if(var_06.v["type"] != var_09) + { + continue; + } + + var_07 = 1; + var_01[var_04][var_01[var_04].size] = var_06; + break; + } + } + + var_0B = []; + for(var_0C = 0;var_0C < var_7B.size;var_0C++ = var_7B[4]) + { + foreach(var_06 in var_01[var_0C]) + { + var_0B[var_0B.size] = var_06; + } + } + + level.createfxent = var_0B; +} + +//Function Number: 78 +stop_fx_looper() +{ + if(isdefined(self.looper)) + { + self.looper delete(); + } + + stop_loopsound(); +} + +//Function Number: 79 +stop_loopsound() +{ + self notify("stop_loop"); +} + +//Function Number: 80 +func_get_level_fx() +{ + if(!isdefined(level.var_8AA)) + { + var_00 = getarraykeys(level._effect); + } + else + { + var_00 = getarraykeys(level._effect); + if(var_00.size == level.var_8AA.size) + { + return level.var_8AA; + } + } + + var_00 = common_scripts\utility::alphabetize(var_00); + level.var_8AA = var_00; + return var_00; +} + +//Function Number: 81 +restart_fx_looper() +{ + stop_fx_looper(); + set_forward_and_up_vectors(); + if(self.v["type"] == "loopfx") + { + common_scripts\_fx::create_looper(); + } + + if(self.v["type"] == "oneshotfx") + { + common_scripts\_fx::create_triggerfx(); + } + + if(self.v["type"] == "soundfx") + { + common_scripts\_fx::create_loopsound(); + } + + if(self.v["type"] == "soundfx_interval") + { + common_scripts\_fx::create_interval_sound(); + } +} + +//Function Number: 82 +process_fx_rotater() +{ + if(level.var_863) + { + return; + } + + set_anglemod_move_vector(); + if(!rotation_is_occuring()) + { + return; + } + + level.var_863 = 1; + if(level.var_81F.size > 1) + { + var_00 = get_center_of_array(level.var_81F); + var_01 = spawn("script_origin",var_00); + var_01.v["angles"] = level.var_81F[0].v["angles"]; + var_01.v["origin"] = var_00; + var_02 = []; + for(var_03 = 0;var_03 < level.var_81F.size;var_03++) + { + var_02[var_03] = spawn("script_origin",level.var_81F[var_03].v["origin"]); + var_02[var_03].angles = level.var_81F[var_03].v["angles"]; + var_02[var_03] linkto(var_01); + } + + rotate_over_time(var_01,var_02); + var_01 delete(); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + var_02[var_03] delete(); + } + } + else if(level.var_81F.size == 1) + { + var_04 = level.var_81F[0]; + var_02 = spawn("script_origin",(0,0,0)); + var_02.angles = var_04.v["angles"]; + if(level.var_85B != 0) + { + var_02 addpitch(level.var_85B); + } + else if(level.var_85D != 0) + { + var_02 addyaw(level.var_85D); + } + else + { + var_02 addroll(level.var_85C); + } + + var_04.v["angles"] = var_02.angles; + var_02 delete(); + wait 0.05; + } + + level.var_863 = 0; +} + +//Function Number: 83 +generate_fx_log(param_00) +{ +} \ No newline at end of file diff --git a/MW3/PC/SP/common_scripts/_createfxmenu.gsc b/MW3/PC/SP/common_scripts/_createfxmenu.gsc new file mode 100644 index 0000000..35b010c --- /dev/null +++ b/MW3/PC/SP/common_scripts/_createfxmenu.gsc @@ -0,0 +1,634 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: common_scripts\_createfxmenu.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 25 + * Decompile Time: 407 ms + * Timestamp: 10/27/2023 2:22:50 AM +*******************************************************************/ + +//Function Number: 1 +menu(param_00) +{ + return level.create_fx_menu == param_00; +} + +//Function Number: 2 +setmenu(param_00) +{ + level.create_fx_menu = param_00; +} + +//Function Number: 3 +create_fx_menu() +{ + if(common_scripts\_createfx::button_is_clicked("escape","x")) + { + _exit_menu(); + return; + } + + if(menu("creation")) + { + if(common_scripts\_createfx::button_is_clicked("1")) + { + setmenu("create_oneshot"); + draw_effects_list(); + return; + } + + if(common_scripts\_createfx::button_is_clicked("2")) + { + setmenu("create_loopfx"); + draw_effects_list(); + return; + } + + if(common_scripts\_createfx::button_is_clicked("3")) + { + setmenu("create_loopsound"); + var_00 = common_scripts\_createfx::createloopsound(); + finish_creating_entity(var_00); + return; + } + + if(common_scripts\_createfx::button_is_clicked("4")) + { + setmenu("create_exploder"); + var_00 = common_scripts\_createfx::createnewexploder(); + finish_creating_entity(var_00); + return; + } + + if(common_scripts\_createfx::button_is_clicked("5")) + { + setmenu("create_interval_sound"); + var_00 = common_scripts\_createfx::createintervalsound(); + finish_creating_entity(var_00); + return; + } + + return; + } + + if(menu("create_oneshot") || menu("create_loopfx") || menu("change_fxid")) + { + if(common_scripts\_createfx::button_is_clicked("m")) + { + increment_list_offset(); + draw_effects_list(); + } + + menu_fx_creation(); + return; + } + + if(menu("none")) + { + if(common_scripts\_createfx::button_is_clicked("m")) + { + increment_list_offset(); + } + + menu_change_selected_fx(); + if(entities_are_selected()) + { + var_01 = get_last_selected_entity(); + if(!isdefined(level.var_818) || var_01 != level.var_818) + { + display_fx_info(var_01); + level.var_818 = var_01; + } + + if(common_scripts\_createfx::button_is_clicked("a")) + { + common_scripts\_createfx::reset_fx_hud_colors(); + setmenu("add_options"); + return; + } + + return; + } + + return; + } + + if(menu("add_options")) + { + if(!entities_are_selected()) + { + common_scripts\_createfx::clear_fx_hudelements(); + setmenu("none"); + return; + } + + display_fx_add_options(get_last_selected_entity()); + if(common_scripts\_createfx::button_is_clicked("m")) + { + increment_list_offset(); + return; + } + + return; + } +} + +//Function Number: 4 +_exit_menu() +{ + common_scripts\_createfx::clear_fx_hudelements(); + common_scripts\_createfx::clear_entity_selection(); + common_scripts\_createfx::update_selected_entities(); + setmenu("none"); +} + +//Function Number: 5 +get_last_selected_entity() +{ + return level.var_81F[level.var_81F.size - 1]; +} + +//Function Number: 6 +menu_fx_creation() +{ + var_00 = 0; + var_01 = undefined; + var_02 = common_scripts\_createfx::func_get_level_fx(); + for(var_03 = level.var_822;var_03 < var_02.size;var_03++) + { + var_00 = var_00 + 1; + var_04 = var_00; + if(var_04 == 10) + { + var_04 = 0; + } + + if(common_scripts\_createfx::button_is_clicked(var_04 + "")) + { + var_01 = var_02[var_03]; + break; + } + + if(var_00 > level.var_823) + { + break; + } + } + + if(!isdefined(var_01)) + { + return; + } + + if(menu("change_fxid")) + { + apply_option_to_selected_fx(get_option("fxid"),var_01); + level.var_822 = 0; + common_scripts\_createfx::clear_fx_hudelements(); + setmenu("none"); + return; + } + + var_05 = undefined; + if(menu("create_loopfx")) + { + var_05 = common_scripts\utility::createloopeffect(var_01); + } + + if(menu("create_oneshot")) + { + var_05 = common_scripts\utility::createoneshoteffect(var_01); + } + + finish_creating_entity(var_05); +} + +//Function Number: 7 +finish_creating_entity(param_00) +{ + param_00.v["angles"] = vectortoangles(param_00.v["origin"] + (0,0,100) - param_00.v["origin"]); + param_00 common_scripts\_createfx::post_entity_creation_function(); + common_scripts\_createfx::clear_entity_selection(); + common_scripts\_createfx::select_last_entity(); + common_scripts\_createfx::move_selection_to_cursor(); + common_scripts\_createfx::update_selected_entities(); + setmenu("none"); +} + +//Function Number: 8 +menu_init() +{ + level.var_82A = []; + addoption("string","fxid","The FX","nil","fx"); + addoption("float","delay","Repeat rate/start delay",0.5,"fx"); + addoption("float","fire_range","Fire damage range",0,"fx"); + addoption("string","flag","Flag","nil","exploder"); + addoption("string","firefx","2nd FX id","nil","exploder"); + addoption("float","firefxdelay","2nd FX id repeat rate",0.5,"exploder"); + addoption("float","firefxtimeout","2nd FX timeout",5,"exploder"); + addoption("string","firefxsound","2nd FX soundalias","nil","exploder"); + addoption("float","damage","Radius damage",150,"exploder"); + addoption("float","damage_radius","Radius of radius damage",250,"exploder"); + addoption("float","delay_min","Minimimum time between repeats",1,"soundfx_interval"); + addoption("float","delay_max","Maximum time between repeats",2,"soundfx_interval"); + addoption("int","repeat","Number of times to repeat",5,"exploder"); + addoption("string","exploder","Exploder","1","exploder"); + addoption("string","earthquake","Earthquake","nil","exploder"); + if(!level.mp_createfx) + { + addoption("string","rumble","Rumble","nil","exploder"); + } + + addoption("string","ender","Level notify for ending 2nd FX","nil","exploder"); + addoption("string","soundalias","Soundalias","nil","all"); + addoption("string","loopsound","Loopsound","nil","exploder"); + if(!level.mp_createfx) + { + addoption("int","stoppable","Can be stopped from script","1","all"); + } + + level.var_822 = 0; + level.var_823 = 10; + level.var_82C = []; + level.var_82C["all"] = []; + level.var_82C["all"]["exploder"] = 1; + level.var_82C["all"]["oneshotfx"] = 1; + level.var_82C["all"]["loopfx"] = 1; + level.var_82C["all"]["soundfx"] = 1; + level.var_82C["all"]["soundfx_interval"] = 1; + level.var_82C["fx"] = []; + level.var_82C["fx"]["exploder"] = 1; + level.var_82C["fx"]["oneshotfx"] = 1; + level.var_82C["fx"]["loopfx"] = 1; + level.var_82C["exploder"] = []; + level.var_82C["exploder"]["exploder"] = 1; + level.var_82C["loopfx"] = []; + level.var_82C["loopfx"]["loopfx"] = 1; + level.var_82C["oneshotfx"] = []; + level.var_82C["oneshotfx"]["oneshotfx"] = 1; + level.var_82C["soundfx"] = []; + level.var_82C["soundfx"]["soundalias"] = 1; + level.var_82C["soundfx_interval"] = []; + level.var_82C["soundfx_interval"]["soundfx_interval"] = 1; +} + +//Function Number: 9 +get_last_selected_ent() +{ + return level.var_81F[level.var_81F.size - 1]; +} + +//Function Number: 10 +entities_are_selected() +{ + return level.var_81F.size > 0; +} + +//Function Number: 11 +menu_change_selected_fx() +{ + if(!level.var_81F.size) + { + return; + } + + var_00 = 0; + var_01 = 0; + var_02 = get_last_selected_ent(); + for(var_03 = 0;var_03 < level.var_82A.size;var_03++) + { + var_04 = level.var_82A[var_03]; + if(!isdefined(var_02.v[var_04["name"]])) + { + continue; + } + + var_00++; + if(var_00 < level.var_822) + { + continue; + } + + var_01++; + var_05 = var_01; + if(var_05 == 10) + { + var_05 = 0; + } + + if(common_scripts\_createfx::button_is_clicked(var_05 + "")) + { + prepare_option_for_change(var_04,var_01); + break; + } + + if(var_01 > level.var_823) + { + var_06 = 1; + break; + } + } +} + +//Function Number: 12 +prepare_option_for_change(param_00,param_01) +{ + if(param_00["name"] == "fxid") + { + setmenu("change_fxid"); + draw_effects_list(); + return; + } + + common_scripts\_createfx::createfx_centerprint("To change " + param_00["description"] + " on selected entities, type /fx newvalue"); + level.var_832 = 1; + set_option_index(param_00["name"]); + setdvar("fx","nil"); + level.var_833[param_01 + 3][0].color = (1,1,0); +} + +//Function Number: 13 +menu_fx_option_set() +{ + if(getdvar("fx") == "nil") + { + return; + } + + var_00 = get_selected_option(); + var_01 = undefined; + if(var_00["type"] == "string") + { + var_01 = getdvar("fx"); + } + + if(var_00["type"] == "int") + { + var_01 = getdvarint("fx"); + } + + if(var_00["type"] == "float") + { + var_01 = getdvarfloat("fx"); + } + + apply_option_to_selected_fx(var_00,var_01); +} + +//Function Number: 14 +apply_option_to_selected_fx(param_00,param_01) +{ + for(var_02 = 0;var_02 < level.var_81F.size;var_02++) + { + var_03 = level.var_81F[var_02]; + if(mask(param_00["mask"],var_03.v["type"])) + { + var_03.v[param_00["name"]] = param_01; + } + } + + level.var_818 = undefined; + common_scripts\_createfx::update_selected_entities(); + common_scripts\_createfx::reset_fx_hud_colors(); +} + +//Function Number: 15 +set_option_index(param_00) +{ + for(var_01 = 0;var_01 < level.var_82A.size;var_01++) + { + if(level.var_82A[var_01]["name"] != param_00) + { + continue; + } + + level.var_837 = var_01; + return; + } +} + +//Function Number: 16 +get_selected_option() +{ + return level.var_82A[level.var_837]; +} + +//Function Number: 17 +mask(param_00,param_01) +{ + return isdefined(level.var_82C[param_00][param_01]); +} + +//Function Number: 18 +addoption(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = []; + level.var_82A[level.var_82A.size] = var_7B; +} + +//Function Number: 19 +get_option(param_00) +{ + for(var_01 = 0;var_01 < level.var_82A.size;var_01++) + { + if(level.var_82A[var_01]["name"] == param_00) + { + return level.var_82A[var_01]; + } + } +} + +//Function Number: 20 +display_fx_info(param_00) +{ + if(!menu("none")) + { + return; + } + + common_scripts\_createfx::clear_fx_hudelements(); + common_scripts\_createfx::set_fx_hudelement("Name: " + param_00.v["fxid"]); + common_scripts\_createfx::set_fx_hudelement("Type: " + param_00.v["type"]); + common_scripts\_createfx::set_fx_hudelement("Origin: " + param_00.v["origin"]); + common_scripts\_createfx::set_fx_hudelement("Angles: " + param_00.v["angles"]); + if(entities_are_selected()) + { + var_01 = 0; + var_02 = 0; + var_03 = 0; + for(var_04 = 0;var_04 < level.var_82A.size;var_04++) + { + var_05 = level.var_82A[var_04]; + if(!isdefined(param_00.v[var_05["name"]])) + { + continue; + } + + var_01++; + if(var_01 < level.var_822) + { + continue; + } + + var_02++; + common_scripts\_createfx::set_fx_hudelement(var_02 + ". " + var_05["description"] + ": " + param_00.v[var_05["name"]]); + if(var_02 > level.var_823) + { + var_03 = 1; + break; + } + } + + if(var_01 > level.var_823) + { + common_scripts\_createfx::set_fx_hudelement("(m) More >"); + } + + common_scripts\_createfx::set_fx_hudelement("(a) Add >"); + common_scripts\_createfx::set_fx_hudelement("(x) Exit >"); + return; + } + + var_01 = 0; + var_03 = 0; + for(var_04 = 0;var_04 < level.var_82A.size;var_04++) + { + var_05 = level.var_82A[var_04]; + if(!isdefined(param_00.v[var_05["name"]])) + { + continue; + } + + var_01++; + common_scripts\_createfx::set_fx_hudelement(var_05["description"] + ": " + param_00.v[var_05["name"]]); + if(var_01 > level.var_83E) + { + break; + } + } +} + +//Function Number: 21 +display_fx_add_options(param_00) +{ + common_scripts\_createfx::clear_fx_hudelements(); + common_scripts\_createfx::set_fx_hudelement("Name: " + param_00.v["fxid"]); + common_scripts\_createfx::set_fx_hudelement("Type: " + param_00.v["type"]); + common_scripts\_createfx::set_fx_hudelement("Origin: " + param_00.v["origin"]); + common_scripts\_createfx::set_fx_hudelement("Angles: " + param_00.v["angles"]); + var_01 = 0; + var_02 = 0; + var_03 = 0; + if(level.var_822 >= level.var_82A.size) + { + level.var_822 = 0; + } + + for(var_04 = 0;var_04 < level.var_82A.size;var_04++) + { + var_05 = level.var_82A[var_04]; + if(isdefined(param_00.v[var_05["name"]])) + { + continue; + } + + if(!mask(var_05["mask"],param_00.v["type"])) + { + continue; + } + + var_01++; + if(var_01 < level.var_822) + { + continue; + } + + if(var_02 >= level.var_823) + { + continue; + } + + var_02++; + var_06 = var_02; + if(var_06 == 10) + { + var_06 = 0; + } + + if(common_scripts\_createfx::button_is_clicked(var_06 + "")) + { + add_option_to_selected_entities(var_05); + menunone(); + level.var_818 = undefined; + return; + } + + common_scripts\_createfx::set_fx_hudelement(var_06 + ". " + var_05["description"]); + } + + if(var_01 > level.var_823) + { + common_scripts\_createfx::set_fx_hudelement("(m) More >"); + } + + common_scripts\_createfx::set_fx_hudelement("(x) Exit >"); +} + +//Function Number: 22 +add_option_to_selected_entities(param_00) +{ + var_01 = undefined; + for(var_02 = 0;var_02 < level.var_81F.size;var_02++) + { + var_03 = level.var_81F[var_02]; + if(mask(param_00["mask"],var_03.v["type"])) + { + var_03.v[param_00["name"]] = param_00["default"]; + } + } +} + +//Function Number: 23 +menunone() +{ + level.var_822 = 0; + common_scripts\_createfx::clear_fx_hudelements(); + setmenu("none"); +} + +//Function Number: 24 +draw_effects_list() +{ + common_scripts\_createfx::clear_fx_hudelements(); + common_scripts\_createfx::set_fx_hudelement("Pick an effect:"); + var_00 = 0; + var_01 = 0; + var_02 = common_scripts\_createfx::func_get_level_fx(); + if(level.var_822 >= var_02.size) + { + level.var_822 = 0; + } + + for(var_03 = level.var_822;var_03 < var_02.size;var_03++) + { + var_00 = var_00 + 1; + common_scripts\_createfx::set_fx_hudelement(var_00 + ". " + var_02[var_03]); + if(var_00 >= level.var_823) + { + var_01 = 1; + break; + } + } + + if(var_02.size > level.var_823) + { + common_scripts\_createfx::set_fx_hudelement("(m) More >"); + } +} + +//Function Number: 25 +increment_list_offset() +{ + level.var_822 = level.var_822 + level.var_823; +} \ No newline at end of file diff --git a/MW3/PC/SP/common_scripts/_destructible.gsc b/MW3/PC/SP/common_scripts/_destructible.gsc new file mode 100644 index 0000000..d1d4c65 --- /dev/null +++ b/MW3/PC/SP/common_scripts/_destructible.gsc @@ -0,0 +1,3187 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: common_scripts\_destructible.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 99 + * Decompile Time: 1532 ms + * Timestamp: 10/27/2023 2:24:55 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level.var_E38 = 50; + level.var_E39 = []; + level.var_E3A = 0; + level.var_E3B = gettime(); + if(!isdefined(level.var_E3C)) + { + level.var_E3C = 0; + } + + if(!isdefined(level.func)) + { + level.func = []; + } + + var_00 = 1; + if(var_00) + { + find_destructibles(); + } + + var_01 = getentarray("delete_on_load","targetname"); + foreach(var_03 in var_01) + { + var_03 delete(); + } + + init_destroyed_count(); + init_destructible_frame_queue(); +} + +//Function Number: 2 +warn_about_old_destructible() +{ + wait 1; + var_00 = getentarray("destructible","targetname"); + if(var_00.size != 0) + { + foreach(var_02 in var_00) + { + } + } +} + +//Function Number: 3 +find_destructibles() +{ + var_00 = []; + switch(getdvar("mapname")) + { + case "mp_interchange": + break; + var_7B[var_7B.size] + (3.4,-912.9,646.9) + var_7B[var_7B.size] + (2096,1042.5,580.4) + var_7B[var_7B.size] + (2061.6,643.2,597.7) + var_7B[var_7B.size] + (1662.3,687.5,599.9) + var_7B[var_7B.size] + (1418.6,311.3,602.1) + var_7B[var_7B.size] + (-29.3,695.7,349) + var_7B[var_7B.size] + (-1030.6,2989.5,445.5) + var_7B[var_7B.size] + (-1347.8,2905.9,445.9) + var_7B[var_7B.size] + (-2966.6,1288.5,378) + var_7B[var_7B.size] + (-2038.3,613,378) + var_7B[var_7B.size] + (845.6,-1766.3,400.6) + var_7B[var_7B.size] + (1276.2,-1882.9,403) + var_7B[var_7B.size] + (1497.2,-2220.9,449.5) + var_7B[var_7B.size] + (2694.9,-3433,414.4) + var_7B[var_7B.size] + (2920.1,-3423.3,416.6) + var_7B[var_7B.size] + (1719.8,-711,328.5) + var_7B[var_7B.size] + (2451.2,-1034.6,345.6) + var_7B[var_7B.size] + (2852.6,-1220.7,345.6) + var_7B[var_7B.size] + (3503.7,-1634.5,345.6) + var_7B[var_7B.size] + (3333.3,-1743.4,345.6) + var_7B[var_7B.size] + (4070.5,-2049.2,349.2) + var_7B[var_00.size] + (4172.8,-1887,345.9) + break; + } + + var_01 = getentarray("destructible_vehicle","targetname"); + foreach(var_03 in var_01) + { + switch(getdvar("mapname")) + { + case "mp_interchange": + if(var_03.origin[2] > 150) + { + var_04 = 0; + foreach(var_06 in var_7B) + { + if(int(var_03.origin[0]) == int(var_06[0]) && int(var_03.origin[1]) == int(var_06[1]) && int(var_03.origin[2]) == int(var_06[2])) + { + var_04 = 1; + break; + } + } + + if(var_04) + { + break; + } + } + break; + } + + var_03 setup_destructibles(); + } + + var_09 = getentarray("destructible_toy","targetname"); + foreach(var_0B in var_09) + { + var_0B setup_destructibles(); + } +} + +//Function Number: 4 +setup_destructibles(param_00) +{ + if(!isdefined(param_00)) + { + param_00 = 0; + } + + var_01 = undefined; + self.modeldummyon = 0; + add_damage_owner_recorder(); + self.destructibleinfo = common_scripts\_destructible_types::maketype(self.destructible_type); + if(self.destructibleinfo < 0) + { + return; + } + + if(!param_00) + { + precache_destructibles(); + } + + add_destructible_fx(); + if(isdefined(level.destructible_type[self.destructibleinfo].var_E42)) + { + self.var_E43 = []; + for(var_03 = 0;var_03 < level.destructible_type[self.destructibleinfo].var_E42.size;var_03++) + { + self.var_E43[var_03] = spawnstruct(); + self.var_E43[var_03].v["currentState"] = 0; + if(isdefined(level.destructible_type[self.destructibleinfo].var_E42[var_03][0].v["health"])) + { + self.var_E43[var_03].v["health"] = level.destructible_type[self.destructibleinfo].var_E42[var_03][0].v["health"]; + } + + if(isdefined(level.destructible_type[self.destructibleinfo].var_E42[var_03][0].v["random_dynamic_attachment_1"])) + { + var_04 = randomint(level.destructible_type[self.destructibleinfo].var_E42[var_03][0].v["random_dynamic_attachment_1"].size); + var_05 = level.destructible_type[self.destructibleinfo].var_E42[var_03][0].v["random_dynamic_attachment_tag"][var_04]; + var_06 = level.destructible_type[self.destructibleinfo].var_E42[var_03][0].v["random_dynamic_attachment_1"][var_04]; + var_07 = level.destructible_type[self.destructibleinfo].var_E42[var_03][0].v["random_dynamic_attachment_2"][var_04]; + var_08 = level.destructible_type[self.destructibleinfo].var_E42[var_03][0].v["clipToRemove"][var_04]; + thread do_random_dynamic_attachment(var_05,var_06,var_07,var_08); + } + + if(var_03 == 0) + { + continue; + } + + var_09 = level.destructible_type[self.destructibleinfo].var_E42[var_03][0].v["modelName"]; + var_0A = level.destructible_type[self.destructibleinfo].var_E42[var_03][0].v["tagName"]; + for(var_0B = 1;isdefined(level.destructible_type[self.destructibleinfo].var_E42[var_03][var_0B]);var_0B++) + { + var_0C = level.destructible_type[self.destructibleinfo].var_E42[var_03][var_0B].v["tagName"]; + var_0D = level.destructible_type[self.destructibleinfo].var_E42[var_03][var_0B].v["modelName"]; + if(isdefined(var_0C) && var_0C != var_0A) + { + hideapart(var_0C); + if(self.modeldummyon) + { + self.modeldummy hideapart(var_0C); + } + } + } + } + } + + if(isdefined(self.target)) + { + thread destructible_handles_collision_brushes(); + } + + if(self.code_classname != "script_vehicle") + { + self setcandamage(1); + } + + if(common_scripts\utility::issp()) + { + thread connecttraverses(); + } + + thread destructible_think(); +} + +//Function Number: 5 +destructible_create(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if(!isdefined(level.destructible_type)) + { + level.destructible_type = []; + } + + var_06 = level.destructible_type.size; + var_06 = level.destructible_type.size; + level.destructible_type[var_06] = spawnstruct(); + level.destructible_type[var_06].v["type"] = param_00; + level.destructible_type[var_06].var_E42 = []; + level.destructible_type[var_06].var_E42[0][0] = spawnstruct(); + level.destructible_type[var_06].var_E42[0][0].v["modelName"] = self.model; + level.destructible_type[var_06].var_E42[0][0].v["tagName"] = param_01; + level.destructible_type[var_06].var_E42[0][0].v["health"] = param_02; + level.destructible_type[var_06].var_E42[0][0].v["validAttackers"] = param_03; + level.destructible_type[var_06].var_E42[0][0].v["validDamageZone"] = param_04; + level.destructible_type[var_06].var_E42[0][0].v["validDamageCause"] = param_05; + level.destructible_type[var_06].var_E42[0][0].v["godModeAllowed"] = 1; + level.destructible_type[var_06].var_E42[0][0].v["rotateTo"] = self.angles; + level.destructible_type[var_06].var_E42[0][0].v["vehicle_exclude_anim"] = 0; +} + +//Function Number: 6 +destructible_part(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09) +{ + var_0A = level.destructible_type.size - 1; + var_0B = level.destructible_type[var_0A].var_E42.size; + var_0C = 0; + destructible_info(var_0B,var_0C,param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,undefined,param_09); +} + +//Function Number: 7 +destructible_state(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07) +{ + var_08 = level.destructible_type.size - 1; + var_09 = level.destructible_type[var_08].var_E42.size - 1; + var_0A = level.destructible_type[var_08].var_E42[var_09].size; + if(!isdefined(param_00) && var_09 == 0) + { + param_00 = level.destructible_type[var_08].var_E42[var_09][0].v["tagName"]; + } + + destructible_info(var_09,var_0A,param_00,param_01,param_02,param_03,param_04,param_05,undefined,undefined,param_06,param_07); +} + +//Function Number: 8 +destructible_fx(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if(!isdefined(param_02)) + { + param_02 = 1; + } + + if(!isdefined(param_04)) + { + param_04 = 0; + } + + if(!isdefined(param_05)) + { + param_05 = 0; + } + + var_06 = level.destructible_type.size - 1; + var_07 = level.destructible_type[var_06].var_E42.size - 1; + var_08 = level.destructible_type[var_06].var_E42[var_07].size - 1; + var_09 = 0; + if(isdefined(level.destructible_type[var_06].var_E42[var_07][var_08].v["fx_filename"])) + { + if(isdefined(level.destructible_type[var_06].var_E42[var_07][var_08].v["fx_filename"][param_04])) + { + var_09 = level.destructible_type[var_06].var_E42[var_07][var_08].v["fx_filename"][param_04].size; + } + } + + if(isdefined(param_03)) + { + level.destructible_type[var_06].var_E42[var_07][var_08].v["fx_valid_damagetype"][param_04][var_09] = param_03; + } + + level.destructible_type[var_06].var_E42[var_07][var_08].v["fx_filename"][param_04][var_09] = param_01; + level.destructible_type[var_06].var_E42[var_07][var_08].v["fx_tag"][param_04][var_09] = param_00; + level.destructible_type[var_06].var_E42[var_07][var_08].v["fx_useTagAngles"][param_04][var_09] = param_02; + level.destructible_type[var_06].var_E42[var_07][var_08].v["fx_cost"][param_04][var_09] = param_05; +} + +//Function Number: 9 +destructible_loopfx(param_00,param_01,param_02,param_03) +{ + if(!isdefined(param_03)) + { + param_03 = 0; + } + + var_04 = level.destructible_type.size - 1; + var_05 = level.destructible_type[var_04].var_E42.size - 1; + var_06 = level.destructible_type[var_04].var_E42[var_05].size - 1; + var_07 = 0; + if(isdefined(level.destructible_type[var_04].var_E42[var_05][var_06].v["loopfx_filename"])) + { + var_07 = level.destructible_type[var_04].var_E42[var_05][var_06].v["loopfx_filename"].size; + } + + level.destructible_type[var_04].var_E42[var_05][var_06].v["loopfx_filename"][var_07] = param_01; + level.destructible_type[var_04].var_E42[var_05][var_06].v["loopfx_tag"][var_07] = param_00; + level.destructible_type[var_04].var_E42[var_05][var_06].v["loopfx_rate"][var_07] = param_02; + level.destructible_type[var_04].var_E42[var_05][var_06].v["loopfx_cost"][var_07] = param_03; +} + +//Function Number: 10 +destructible_healthdrain(param_00,param_01,param_02,param_03) +{ + var_04 = level.destructible_type.size - 1; + var_05 = level.destructible_type[var_04].var_E42.size - 1; + var_06 = level.destructible_type[var_04].var_E42[var_05].size - 1; + level.destructible_type[var_04].var_E42[var_05][var_06].v["healthdrain_amount"] = param_00; + level.destructible_type[var_04].var_E42[var_05][var_06].v["healthdrain_interval"] = param_01; + level.destructible_type[var_04].var_E42[var_05][var_06].v["badplace_radius"] = param_02; + level.destructible_type[var_04].var_E42[var_05][var_06].v["badplace_team"] = param_03; +} + +//Function Number: 11 +destructible_sound(param_00,param_01,param_02) +{ + var_03 = level.destructible_type.size - 1; + var_04 = level.destructible_type[var_03].var_E42.size - 1; + var_05 = level.destructible_type[var_03].var_E42[var_04].size - 1; + if(!isdefined(param_02)) + { + param_02 = 0; + } + + if(!isdefined(level.destructible_type[var_03].var_E42[var_04][var_05].v["sound"])) + { + level.destructible_type[var_03].var_E42[var_04][var_05].v["sound"] = []; + level.destructible_type[var_03].var_E42[var_04][var_05].v["soundCause"] = []; + } + + if(!isdefined(level.destructible_type[var_03].var_E42[var_04][var_05].v["sound"][param_02])) + { + level.destructible_type[var_03].var_E42[var_04][var_05].v["sound"][param_02] = []; + level.destructible_type[var_03].var_E42[var_04][var_05].v["soundCause"][param_02] = []; + } + + var_06 = level.destructible_type[var_03].var_E42[var_04][var_05].v["sound"][param_02].size; + level.destructible_type[var_03].var_E42[var_04][var_05].v["sound"][param_02][var_06] = param_00; + level.destructible_type[var_03].var_E42[var_04][var_05].v["soundCause"][param_02][var_06] = param_01; +} + +//Function Number: 12 +destructible_loopsound(param_00,param_01) +{ + var_02 = level.destructible_type.size - 1; + var_03 = level.destructible_type[var_02].var_E42.size - 1; + var_04 = level.destructible_type[var_02].var_E42[var_03].size - 1; + if(!isdefined(level.destructible_type[var_02].var_E42[var_03][var_04].v["loopsound"])) + { + level.destructible_type[var_02].var_E42[var_03][var_04].v["loopsound"] = []; + level.destructible_type[var_02].var_E42[var_03][var_04].v["loopsoundCause"] = []; + } + + var_05 = level.destructible_type[var_02].var_E42[var_03][var_04].v["loopsound"].size; + level.destructible_type[var_02].var_E42[var_03][var_04].v["loopsound"][var_05] = param_00; + level.destructible_type[var_02].var_E42[var_03][var_04].v["loopsoundCause"][var_05] = param_01; +} + +//Function Number: 13 +destructible_anim(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08) +{ + if(!isdefined(param_03)) + { + param_03 = 0; + } + + if(!isdefined(param_04)) + { + param_04 = 0; + } + + var_09 = []; + add_array_to_destructible("animation",var_7B); +} + +//Function Number: 14 +destructible_spotlight(param_00) +{ + var_01 = []; + var_02 = []; + var_7B["dvars"] = var_02; + add_keypairs_to_destructible(var_7B); +} + +//Function Number: 15 +add_key_to_destructible(param_00,param_01) +{ + var_02 = []; + add_keypairs_to_destructible(var_7B); +} + +//Function Number: 16 +add_keypairs_to_destructible(param_00) +{ + var_01 = level.destructible_type.size - 1; + var_02 = level.destructible_type[var_01].var_E42.size - 1; + var_03 = level.destructible_type[var_01].var_E42[var_02].size - 1; + foreach(var_06, var_05 in param_00) + { + level.destructible_type[var_01].var_E42[var_02][var_03].v[var_06] = var_05; + } +} + +//Function Number: 17 +add_array_to_destructible(param_00,param_01) +{ + var_02 = level.destructible_type.size - 1; + var_03 = level.destructible_type[var_02].var_E42.size - 1; + var_04 = level.destructible_type[var_02].var_E42[var_03].size - 1; + var_05 = level.destructible_type[var_02].var_E42[var_03][var_04].v; + if(!isdefined(var_05[param_00])) + { + } + + var_1C[param_01] = var_7B[param_01].size; + level.destructible_type[var_04].var_E42[var_05][var_7B].v = var_1C; +} + +//Function Number: 18 +destructible_car_alarm() +{ + var_00 = level.destructible_type.size - 1; + var_01 = level.destructible_type[var_00].var_E42.size - 1; + var_02 = level.destructible_type[var_00].var_E42[var_01].size - 1; + level.destructible_type[var_00].var_E42[var_01][var_02].v["triggerCarAlarm"] = 1; +} + +//Function Number: 19 +destructible_lights_out(param_00) +{ + if(!isdefined(param_00)) + { + param_00 = 256; + } + + var_01 = level.destructible_type.size - 1; + var_02 = level.destructible_type[var_01].var_E42.size - 1; + var_03 = level.destructible_type[var_01].var_E42[var_02].size - 1; + level.destructible_type[var_01].var_E42[var_02][var_03].v["break_nearby_lights"] = param_00; +} + +//Function Number: 20 +random_dynamic_attachment(param_00,param_01,param_02,param_03) +{ + if(!isdefined(param_02)) + { + param_02 = ""; + } + + var_04 = level.destructible_type.size - 1; + var_05 = level.destructible_type[var_04].var_E42.size - 1; + var_06 = 0; + if(!isdefined(level.destructible_type[var_04].var_E42[var_05][var_06].v["random_dynamic_attachment_1"])) + { + level.destructible_type[var_04].var_E42[var_05][var_06].v["random_dynamic_attachment_1"] = []; + level.destructible_type[var_04].var_E42[var_05][var_06].v["random_dynamic_attachment_2"] = []; + level.destructible_type[var_04].var_E42[var_05][var_06].v["random_dynamic_attachment_tag"] = []; + } + + var_07 = level.destructible_type[var_04].var_E42[var_05][var_06].v["random_dynamic_attachment_1"].size; + level.destructible_type[var_04].var_E42[var_05][var_06].v["random_dynamic_attachment_1"][var_07] = param_01; + level.destructible_type[var_04].var_E42[var_05][var_06].v["random_dynamic_attachment_2"][var_07] = param_02; + level.destructible_type[var_04].var_E42[var_05][var_06].v["random_dynamic_attachment_tag"][var_07] = param_00; + level.destructible_type[var_04].var_E42[var_05][var_06].v["clipToRemove"][var_07] = param_03; +} + +//Function Number: 21 +destructible_physics(param_00,param_01) +{ + var_02 = level.destructible_type.size - 1; + var_03 = level.destructible_type[var_02].var_E42.size - 1; + var_04 = level.destructible_type[var_02].var_E42[var_03].size - 1; + if(!isdefined(level.destructible_type[var_02].var_E42[var_03][var_04].v["physics"])) + { + level.destructible_type[var_02].var_E42[var_03][var_04].v["physics"] = []; + level.destructible_type[var_02].var_E42[var_03][var_04].v["physics_tagName"] = []; + level.destructible_type[var_02].var_E42[var_03][var_04].v["physics_velocity"] = []; + } + + var_05 = level.destructible_type[var_02].var_E42[var_03][var_04].v["physics"].size; + level.destructible_type[var_02].var_E42[var_03][var_04].v["physics"][var_05] = 1; + level.destructible_type[var_02].var_E42[var_03][var_04].v["physics_tagName"][var_05] = param_00; + level.destructible_type[var_02].var_E42[var_03][var_04].v["physics_velocity"][var_05] = param_01; +} + +//Function Number: 22 +destructible_splash_damage_scaler(param_00) +{ + var_01 = level.destructible_type.size - 1; + var_02 = level.destructible_type[var_01].var_E42.size - 1; + var_03 = level.destructible_type[var_01].var_E42[var_02].size - 1; + level.destructible_type[var_01].var_E42[var_02][var_03].v["splash_damage_scaler"] = param_00; +} + +//Function Number: 23 +destructible_explode(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A,param_0B) +{ + var_0C = level.destructible_type.size - 1; + var_0D = level.destructible_type[var_0C].var_E42.size - 1; + var_0E = level.destructible_type[var_0C].var_E42[var_0D].size - 1; + if(common_scripts\utility::issp()) + { + level.destructible_type[var_0C].var_E42[var_0D][var_0E].v["explode_range"] = param_02; + } + else + { + level.destructible_type[var_0C].var_E42[var_0D][var_0E].v["explode_range"] = param_03; + } + + level.destructible_type[var_0C].var_E42[var_0D][var_0E].v["explode"] = 1; + level.destructible_type[var_0C].var_E42[var_0D][var_0E].v["explode_force_min"] = param_00; + level.destructible_type[var_0C].var_E42[var_0D][var_0E].v["explode_force_max"] = param_01; + level.destructible_type[var_0C].var_E42[var_0D][var_0E].v["explode_mindamage"] = param_04; + level.destructible_type[var_0C].var_E42[var_0D][var_0E].v["explode_maxdamage"] = param_05; + level.destructible_type[var_0C].var_E42[var_0D][var_0E].v["continueDamage"] = param_06; + level.destructible_type[var_0C].var_E42[var_0D][var_0E].v["originOffset"] = param_07; + level.destructible_type[var_0C].var_E42[var_0D][var_0E].v["earthQuakeScale"] = param_08; + level.destructible_type[var_0C].var_E42[var_0D][var_0E].v["earthQuakeRadius"] = param_09; + level.destructible_type[var_0C].var_E42[var_0D][var_0E].v["originOffset3d"] = param_0A; + level.destructible_type[var_0C].var_E42[var_0D][var_0E].v["delaytime"] = param_0B; +} + +//Function Number: 24 +destructible_info(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(param_03)) + { + param_03 = tolower(param_03); + } + + var_0D = level.destructible_type.size - 1; + level.destructible_type[var_0D].var_E42[param_00][param_01] = spawnstruct(); + level.destructible_type[var_0D].var_E42[param_00][param_01].v["modelName"] = param_03; + level.destructible_type[var_0D].var_E42[param_00][param_01].v["tagName"] = param_02; + level.destructible_type[var_0D].var_E42[param_00][param_01].v["health"] = param_04; + level.destructible_type[var_0D].var_E42[param_00][param_01].v["validAttackers"] = param_05; + level.destructible_type[var_0D].var_E42[param_00][param_01].v["validDamageZone"] = param_06; + level.destructible_type[var_0D].var_E42[param_00][param_01].v["validDamageCause"] = param_07; + level.destructible_type[var_0D].var_E42[param_00][param_01].v["alsoDamageParent"] = param_08; + level.destructible_type[var_0D].var_E42[param_00][param_01].v["physicsOnExplosion"] = param_09; + level.destructible_type[var_0D].var_E42[param_00][param_01].v["grenadeImpactDeath"] = param_0A; + level.destructible_type[var_0D].var_E42[param_00][param_01].v["godModeAllowed"] = 0; + level.destructible_type[var_0D].var_E42[param_00][param_01].v["splashRotation"] = param_0B; + level.destructible_type[var_0D].var_E42[param_00][param_01].v["receiveDamageFromParent"] = param_0C; +} + +//Function Number: 25 +precache_destructibles() +{ + if(!isdefined(level.destructible_type[self.destructibleinfo].var_E42)) + { + return; + } + + for(var_00 = 0;var_00 < level.destructible_type[self.destructibleinfo].var_E42.size;var_00++) + { + for(var_01 = 0;var_01 < level.destructible_type[self.destructibleinfo].var_E42[var_00].size;var_01++) + { + if(level.destructible_type[self.destructibleinfo].var_E42[var_00].size <= var_01) + { + continue; + } + + if(isdefined(level.destructible_type[self.destructibleinfo].var_E42[var_00][var_01].v["modelName"])) + { + precachemodel(level.destructible_type[self.destructibleinfo].var_E42[var_00][var_01].v["modelName"]); + } + + if(isdefined(level.destructible_type[self.destructibleinfo].var_E42[var_00][var_01].v["animation"])) + { + var_02 = level.destructible_type[self.destructibleinfo].var_E42[var_00][var_01].v["animation"]; + foreach(var_04 in var_02) + { + if(isdefined(var_04["mpAnim"])) + { + common_scripts\utility::noself_func("precacheMpAnim",var_04["mpAnim"]); + } + } + } + + if(isdefined(level.destructible_type[self.destructibleinfo].var_E42[var_00][var_01].v["random_dynamic_attachment_1"])) + { + foreach(var_07 in level.destructible_type[self.destructibleinfo].var_E42[var_00][var_01].v["random_dynamic_attachment_1"]) + { + if(isdefined(var_07) && var_07 != "") + { + precachemodel(var_07); + precachemodel(var_07 + "_destroy"); + } + } + + foreach(var_07 in level.destructible_type[self.destructibleinfo].var_E42[var_00][var_01].v["random_dynamic_attachment_2"]) + { + if(isdefined(var_07) && var_07 != "") + { + precachemodel(var_07); + precachemodel(var_07 + "_destroy"); + } + } + } + } + } +} + +//Function Number: 26 +add_destructible_fx() +{ + if(!isdefined(level.destructible_type[self.destructibleinfo].var_E42)) + { + return; + } + + for(var_00 = 0;var_00 < level.destructible_type[self.destructibleinfo].var_E42.size;var_00++) + { + for(var_01 = 0;var_01 < level.destructible_type[self.destructibleinfo].var_E42[var_00].size;var_01++) + { + if(level.destructible_type[self.destructibleinfo].var_E42[var_00].size <= var_01) + { + continue; + } + + var_02 = level.destructible_type[self.destructibleinfo].var_E42[var_00][var_01]; + if(isdefined(var_02.v["fx_filename"])) + { + for(var_03 = 0;var_03 < var_02.v["fx_filename"].size;var_03++) + { + var_04 = var_02.v["fx_filename"][var_03]; + if(isdefined(var_04)) + { + if(isdefined(var_02.v["fx"]) && isdefined(var_02.v["fx"][var_03]) && var_02.v["fx"][var_03].size == var_04.size) + { + continue; + } + + foreach(var_07, var_06 in var_04) + { + level.destructible_type[self.destructibleinfo].var_E42[var_00][var_01].v["fx"][var_03][var_07] = common_scripts\utility::_loadfx(var_06); + } + } + } + } + + var_08 = level.destructible_type[self.destructibleinfo].var_E42[var_00][var_01].v["loopfx_filename"]; + if(isdefined(var_08)) + { + if(isdefined(var_02.v["loopfx"]) && var_02.v["loopfx"].size == var_08.size) + { + continue; + } + + foreach(var_07, var_0A in var_08) + { + level.destructible_type[self.destructibleinfo].var_E42[var_00][var_01].v["loopfx"][var_07] = common_scripts\utility::_loadfx(var_0A); + } + } + } + } +} + +//Function Number: 27 +candamagedestructible(param_00) +{ + foreach(var_02 in self.destructibles) + { + if(var_02 == param_00) + { + return 1; + } + } + + return 0; +} + +//Function Number: 28 +destructible_think() +{ + var_00 = 0; + var_01 = self.model; + var_02 = undefined; + var_03 = self.origin; + var_04 = undefined; + var_05 = undefined; + var_06 = undefined; + destructible_update_part(var_00,var_01,var_02,var_03,var_04,var_05,var_06); + self endon("stop_taking_damage"); + for(;;) + { + var_00 = undefined; + var_05 = undefined; + var_04 = undefined; + var_03 = undefined; + var_07 = undefined; + var_01 = undefined; + var_02 = undefined; + var_08 = undefined; + var_09 = undefined; + self waittill("damage",var_00,var_05,var_04,var_03,var_07,var_01,var_02,var_08,var_09); + if(!isdefined(var_00)) + { + continue; + } + + if(isdefined(var_05) && isdefined(var_05.type) && var_05.type == "soft_landing" && !var_05 candamagedestructible(self)) + { + continue; + } + + if(common_scripts\utility::issp()) + { + var_00 = var_00 * 0.5; + } + else + { + var_00 = var_00 * 1; + } + + if(var_00 <= 0) + { + continue; + } + + if(common_scripts\utility::issp()) + { + if(isdefined(var_05) && isplayer(var_05)) + { + self.damageowner = var_05; + } + } + else if(isdefined(var_05) && isplayer(var_05)) + { + self.damageowner = var_05; + } + else if(isdefined(var_05) && isdefined(var_05.gunner) && isplayer(var_05.gunner)) + { + self.damageowner = var_05.gunner; + } + + var_07 = getdamagetype(var_07); + if(is_shotgun_damage(var_05,var_07)) + { + if(common_scripts\utility::issp()) + { + var_00 = var_00 * 8; + } + else + { + var_00 = var_00 * 4; + } + } + + if(!isdefined(var_01) || var_01 == "") + { + var_01 = self.model; + } + + if(isdefined(var_02) && var_02 == "") + { + if(isdefined(var_08) && var_08 != "" && var_08 != "tag_body" && var_08 != "body_animate_jnt") + { + var_02 = var_08; + } + else + { + var_02 = undefined; + } + + var_0A = level.destructible_type[self.destructibleinfo].var_E42[0][0].v["tagName"]; + if(isdefined(var_0A) && isdefined(var_08) && var_0A == var_08) + { + var_02 = undefined; + } + } + + if(var_07 == "splash") + { + if(isdefined(level.destructible_type[self.destructibleinfo].var_E42[0][0].v["splash_damage_scaler"])) + { + var_00 = var_00 * level.destructible_type[self.destructibleinfo].var_E42[0][0].v["splash_damage_scaler"]; + } + else if(common_scripts\utility::issp()) + { + var_00 = var_00 * 9; + } + else + { + var_00 = var_00 * 13; + } + + destructible_splash_damage(int(var_00),var_03,var_04,var_05,var_07); + continue; + } + + thread destructible_update_part(int(var_00),var_01,var_02,var_03,var_04,var_05,var_07); + } +} + +//Function Number: 29 +is_shotgun_damage(param_00,param_01) +{ + if(param_01 != "bullet") + { + return 0; + } + + if(!isdefined(param_00)) + { + return 0; + } + + var_02 = undefined; + if(isplayer(param_00)) + { + var_02 = param_00 getcurrentweapon(); + } + else if(isdefined(level.var_E51) && level.var_E51) + { + if(isdefined(param_00.weapon)) + { + var_02 = param_00.weapon; + } + } + + if(!isdefined(var_02)) + { + return 0; + } + + var_03 = weaponclass(var_02); + if(isdefined(var_03) && var_03 == "spread") + { + return 1; + } + + return 0; +} + +//Function Number: 30 +getpartandstateindex(param_00,param_01) +{ + var_02 = spawnstruct(); + var_02.v = []; + var_03 = -1; + var_04 = -1; + if(tolower(param_00) == tolower(self.model) && !isdefined(param_01)) + { + param_00 = self.model; + param_01 = undefined; + var_03 = 0; + var_04 = 0; + } + + for(var_05 = 0;var_05 < level.destructible_type[self.destructibleinfo].var_E42.size;var_05++) + { + var_04 = self.var_E43[var_05].v["currentState"]; + if(level.destructible_type[self.destructibleinfo].var_E42[var_05].size <= var_04) + { + continue; + } + + if(!isdefined(param_01)) + { + continue; + } + + if(isdefined(level.destructible_type[self.destructibleinfo].var_E42[var_05][var_04].v["tagName"])) + { + var_06 = level.destructible_type[self.destructibleinfo].var_E42[var_05][var_04].v["tagName"]; + if(tolower(var_06) == tolower(param_01)) + { + var_03 = var_05; + break; + } + } + } + + var_02.v["stateIndex"] = var_04; + var_02.v["partIndex"] = var_03; + return var_02; +} + +//Function Number: 31 +destructible_update_part(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07) +{ + if(!isdefined(self.var_E43)) + { + return; + } + + if(self.var_E43.size == 0) + { + return; + } + + if(level.var_E3C) + { + self endon("destroyed"); + } + + var_08 = getpartandstateindex(param_01,param_02); + var_09 = var_08.v["stateIndex"]; + var_0A = var_08.v["partIndex"]; + if(var_0A < 0) + { + return; + } + + var_0B = var_09; + var_0C = 0; + var_0D = 0; + for(;;) + { + var_09 = self.var_E43[var_0A].v["currentState"]; + if(!isdefined(level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_09])) + { + break; + } + + if(isdefined(level.destructible_type[self.destructibleinfo].var_E42[var_0A][0].v["alsoDamageParent"])) + { + if(getdamagetype(param_06) != "splash") + { + var_0E = level.destructible_type[self.destructibleinfo].var_E42[var_0A][0].v["alsoDamageParent"]; + var_0F = int(param_00 * var_0E); + thread notifydamageafterframe(var_0F,param_05,param_04,param_03,param_06,"",""); + } + } + + if(getdamagetype(param_06) != "splash") + { + foreach(var_11 in level.destructible_type[self.destructibleinfo].var_E42) + { + if(!isdefined(var_11[0].v["receiveDamageFromParent"])) + { + continue; + } + + if(!isdefined(var_11[0].v["tagName"])) + { + continue; + } + + var_0E = var_11[0].v["receiveDamageFromParent"]; + var_12 = int(param_00 * var_0E); + var_13 = var_11[0].v["tagName"]; + thread notifydamageafterframe(var_12,param_05,param_04,param_03,param_06,"",var_13); + } + } + + if(!isdefined(level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_09].v["health"])) + { + break; + } + + if(!isdefined(self.var_E43[var_0A].v["health"])) + { + break; + } + + if(var_0C) + { + self.var_E43[var_0A].v["health"] = level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_09].v["health"]; + } + + var_0C = 0; + if(isdefined(level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_09].v["grenadeImpactDeath"]) && param_06 == "impact") + { + param_00 = 100000000; + } + + var_15 = self.var_E43[var_0A].v["health"]; + var_16 = isattackervalid(var_0A,var_09,param_05); + if(var_16) + { + var_17 = isvaliddamagecause(var_0A,var_09,param_06); + if(var_17) + { + if(isdefined(param_05)) + { + if(isplayer(param_05)) + { + self.player_damage = self.player_damage + param_00; + } + else if(param_05 != self) + { + self.non_player_damage = self.non_player_damage + param_00; + } + } + + if(isdefined(param_06)) + { + if(param_06 == "melee" || param_06 == "impact") + { + param_00 = 100000; + } + } + + self.var_E43[var_0A].v["health"] = self.var_E43[var_0A].v["health"] - param_00; + } + } + + if(self.var_E43[var_0A].v["health"] > 0) + { + return; + } + + if(isdefined(param_07)) + { + param_07.v["fxcost"] = get_part_fx_cost_for_action_state(var_0A,self.var_E43[var_0A].v["currentState"]); + add_destructible_to_frame_queue(self,param_07,param_00); + if(!isdefined(self.var_E55)) + { + self.var_E55 = 1; + } + else + { + self.var_E55++; + } + + self waittill("queue_processed",var_18); + self.var_E55--; + if(self.var_E55 == 0) + { + self.var_E55 = undefined; + } + + if(!var_18) + { + self.var_E43[var_0A].v["health"] = var_15; + return; + } + } + + param_00 = int(abs(self.var_E43[var_0A].v["health"])); + if(param_00 < 0) + { + return; + } + + self.var_E43[var_0A].v["currentState"]++; + var_09 = self.var_E43[var_0A].v["currentState"]; + var_19 = var_09 - 1; + var_1A = undefined; + if(isdefined(level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19])) + { + var_1A = level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v; + } + + var_1B = undefined; + if(isdefined(level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_09])) + { + var_1B = level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_09].v; + } + + if(!isdefined(level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19])) + { + return; + } + + if(isdefined(level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["explode"])) + { + self.var_E56 = 1; + } + + if(isdefined(self.var_E57) && isdefined(self.var_E57[tostring(var_0A)])) + { + for(var_1C = 0;var_1C < self.var_E57[tostring(var_0A)].size;var_1C++) + { + self notify(self.var_E57[tostring(var_0A)][var_1C]); + if(common_scripts\utility::issp() && self.modeldummyon) + { + self.modeldummy notify(self.var_E57[tostring(var_0A)][var_1C]); + } + } + + self.var_E57[tostring(var_0A)] = undefined; + } + + if(isdefined(var_1A["break_nearby_lights"])) + { + destructible_get_my_breakable_light(var_1A["break_nearby_lights"]); + } + + if(isdefined(level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_09])) + { + if(var_0A == 0) + { + var_1D = var_1B["modelName"]; + if(isdefined(var_1D) && var_1D != self.model) + { + self setmodel(var_1D); + if(common_scripts\utility::issp() && self.modeldummyon) + { + self.modeldummy setmodel(var_1D); + } + + destructible_splash_rotatation(var_1B); + } + } + else + { + hideapart(param_02); + if(common_scripts\utility::issp() && self.modeldummyon) + { + self.modeldummy hideapart(param_02); + } + + param_02 = var_1B["tagName"]; + if(isdefined(param_02)) + { + showapart(param_02); + if(common_scripts\utility::issp() && self.modeldummyon) + { + self.modeldummy showapart(param_02); + } + } + } + } + + var_1E = get_dummy(); + if(isdefined(self.var_E56)) + { + clear_anims(var_1E); + } + + var_1F = destructible_animation_think(var_1A,var_1E,param_06,var_0A); + var_1F = destructible_fx_think(var_1A,var_1E,param_06,var_0A,var_1F); + var_1F = destructible_sound_think(var_1A,var_1E,param_06,var_1F); + if(isdefined(level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["loopfx"])) + { + var_20 = level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["loopfx_filename"].size; + if(var_20 > 0) + { + self notify("FX_State_Change" + var_0A); + } + + for(var_21 = 0;var_21 < var_20;var_21++) + { + var_22 = level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["loopfx"][var_21]; + var_23 = level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["loopfx_tag"][var_21]; + var_24 = level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["loopfx_rate"][var_21]; + thread loopfx_ontag(var_22,var_23,var_24,var_0A); + } + } + + if(isdefined(level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["loopsound"])) + { + for(var_1C = 0;var_1C < level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["loopsound"].size;var_1C++) + { + var_25 = isvalidsoundcause("loopsoundCause",var_1A,var_1C,param_06); + if(var_25) + { + var_26 = level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["loopsound"][var_1C]; + var_27 = level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["tagName"]; + thread play_loop_sound_on_destructible(var_26,var_27); + if(!isdefined(self.var_E57)) + { + self.var_E57 = []; + } + + if(!isdefined(self.var_E57[tostring(var_0A)])) + { + self.var_E57[tostring(var_0A)] = []; + } + + var_28 = self.var_E57[tostring(var_0A)].size; + self.var_E57[tostring(var_0A)][var_28] = "stop sound" + var_26; + } + } + } + + if(isdefined(level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["triggerCarAlarm"])) + { + thread do_car_alarm(); + } + + if(isdefined(level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["break_nearby_lights"])) + { + thread break_nearest_light(); + } + + if(isdefined(level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["healthdrain_amount"])) + { + self notify("Health_Drain_State_Change" + var_0A); + var_29 = level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["healthdrain_amount"]; + var_2A = level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["healthdrain_interval"]; + var_2B = level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["modelName"]; + var_2C = level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["tagName"]; + var_2D = level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["badplace_radius"]; + var_2E = level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["badplace_team"]; + if(var_29 > 0) + { + thread health_drain(var_29,var_2A,var_0A,var_2B,var_2C,var_2D,var_2E); + } + } + + if(isdefined(level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["explode"])) + { + var_0D = 1; + var_2F = level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["explode_force_min"]; + var_30 = level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["explode_force_max"]; + var_31 = level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["explode_range"]; + var_32 = level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["explode_mindamage"]; + var_33 = level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["explode_maxdamage"]; + var_34 = level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["continueDamage"]; + var_35 = level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["originOffset"]; + var_36 = level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["earthQuakeScale"]; + var_37 = level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["earthQuakeRadius"]; + var_38 = level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["originOffset3d"]; + var_39 = level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["delaytime"]; + if(isdefined(param_05) && param_05 != self) + { + self.attacker = param_05; + if(self.code_classname == "script_vehicle") + { + self.damage_type = param_06; + } + } + + thread explode(var_0A,var_2F,var_30,var_31,var_32,var_33,var_34,var_35,var_36,var_37,param_05,var_38,var_39); + } + + var_3A = undefined; + if(isdefined(level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["physics"])) + { + for(var_1C = 0;var_1C < level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["physics"].size;var_1C++) + { + var_3A = undefined; + var_3B = level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["physics_tagName"][var_1C]; + var_3C = level.destructible_type[self.destructibleinfo].var_E42[var_0A][var_19].v["physics_velocity"][var_1C]; + var_3D = undefined; + if(isdefined(var_3C)) + { + var_3E = undefined; + if(isdefined(var_3B)) + { + var_3E = self gettagangles(var_3B); + } + else if(isdefined(param_02)) + { + var_3E = self gettagangles(param_02); + } + + var_3A = undefined; + if(isdefined(var_3B)) + { + var_3A = self gettagorigin(var_3B); + } + else if(isdefined(param_02)) + { + var_3A = self gettagorigin(param_02); + } + + var_3F = var_3C[0] - 5 + randomfloat(10); + var_40 = var_3C[1] - 5 + randomfloat(10); + var_41 = var_3C[2] - 5 + randomfloat(10); + var_42 = anglestoforward(var_3E) * var_3F * randomfloatrange(80,110); + var_43 = anglestoright(var_3E) * var_40 * randomfloatrange(80,110); + var_44 = anglestoup(var_3E) * var_41 * randomfloatrange(80,110); + var_3D = var_42 + var_43 + var_44; + } + else + { + var_3D = param_03; + var_45 = (0,0,0); + if(isdefined(param_05)) + { + var_45 = param_05.origin; + var_3D = vectornormalize(param_03 - var_45); + var_3D = var_3D * 200; + } + } + + if(isdefined(var_3B)) + { + var_46 = undefined; + for(var_47 = 0;var_47 < level.destructible_type[self.destructibleinfo].var_E42.size;var_47++) + { + if(!isdefined(level.destructible_type[self.destructibleinfo].var_E42[var_47][0].v["tagName"])) + { + continue; + } + + if(level.destructible_type[self.destructibleinfo].var_E42[var_47][0].v["tagName"] != var_3B) + { + continue; + } + + var_46 = var_47; + break; + } + + if(isdefined(var_3A)) + { + thread physics_launch(var_46,0,var_3A,var_3D); + } + else + { + thread physics_launch(var_46,0,param_03,var_3D); + } + + continue; + } + + if(isdefined(var_3A)) + { + thread physics_launch(var_0A,var_19,var_3A,var_3D); + } + else + { + thread physics_launch(var_0A,var_19,param_03,var_3D); + } + + return; + } + } + + var_0C = 1; + } +} + +//Function Number: 32 +destructible_splash_rotatation(param_00) +{ + var_01 = param_00["splashRotation"]; + var_02 = param_00["rotateTo"]; + if(!isdefined(var_02)) + { + return; + } + + if(!isdefined(var_01)) + { + return; + } + + if(!var_01) + { + return; + } + + self.angles = (self.angles[0],var_02[1],self.angles[2]); +} + +//Function Number: 33 +damage_not(param_00) +{ + var_01 = strtok(param_00," "); + var_02 = strtok("splash melee bullet splash impact unknown"," "); + var_03 = ""; + foreach(var_05 in var_01) + { + var_02 = common_scripts\utility::array_remove(var_02,var_05); + } + + foreach(var_08 in var_02) + { + var_03 = var_03 + var_08 + " "; + } + + return var_03; +} + +//Function Number: 34 +destructible_splash_damage(param_00,param_01,param_02,param_03,param_04) +{ + if(param_00 <= 0) + { + return; + } + + if(isdefined(self.var_946)) + { + return; + } + + if(!isdefined(level.destructible_type[self.destructibleinfo].var_E42)) + { + return; + } + + var_05 = getallactiveparts(param_02); + if(var_05.size <= 0) + { + return; + } + + var_05 = setdistanceonparts(var_05,param_01); + var_06 = getlowestpartdistance(var_05); + foreach(var_08 in var_05) + { + var_09 = var_08.v["distance"] * 1.4; + var_0A = param_00 - var_09 - var_06; + if(var_0A <= 0) + { + continue; + } + + if(isdefined(self.var_946)) + { + continue; + } + + thread destructible_update_part(var_0A,var_08.v["modelName"],var_08.v["tagName"],param_01,param_02,param_03,param_04,var_08); + } +} + +//Function Number: 35 +getallactiveparts(param_00) +{ + var_01 = []; + if(!isdefined(level.destructible_type[self.destructibleinfo].var_E42)) + { + return var_01; + } + + for(var_02 = 0;var_02 < level.destructible_type[self.destructibleinfo].var_E42.size;var_02++) + { + var_03 = var_02; + var_04 = self.var_E43[var_03].v["currentState"]; + for(var_05 = 0;var_05 < level.destructible_type[self.destructibleinfo].var_E42[var_03].size;var_05++) + { + var_06 = level.destructible_type[self.destructibleinfo].var_E42[var_03][var_05].v["splashRotation"]; + if(isdefined(var_06) && var_06) + { + var_07 = vectortoangles(param_00); + var_08 = var_07[1] - 90; + level.destructible_type[self.destructibleinfo].var_E42[var_03][var_05].v["rotateTo"] = (0,var_08,0); + } + } + + if(!isdefined(level.destructible_type[self.destructibleinfo].var_E42[var_03][var_04])) + { + continue; + } + + var_09 = level.destructible_type[self.destructibleinfo].var_E42[var_03][var_04].v["tagName"]; + if(!isdefined(var_09)) + { + var_09 = ""; + } + + if(var_09 == "") + { + continue; + } + + var_0A = level.destructible_type[self.destructibleinfo].var_E42[var_03][var_04].v["modelName"]; + if(!isdefined(var_0A)) + { + var_0A = ""; + } + + var_0B = var_01.size; + var_01[var_0B] = spawnstruct(); + var_01[var_0B].v["modelName"] = var_0A; + var_01[var_0B].v["tagName"] = var_09; + } + + return var_01; +} + +//Function Number: 36 +setdistanceonparts(param_00,param_01) +{ + for(var_02 = 0;var_02 < param_00.size;var_02++) + { + var_03 = distance(param_01,self gettagorigin(param_00[var_02].v["tagName"])); + param_00[var_02].v["distance"] = var_03; + } + + return param_00; +} + +//Function Number: 37 +getlowestpartdistance(param_00) +{ + var_01 = undefined; + foreach(var_03 in param_00) + { + var_04 = var_03.v["distance"]; + if(!isdefined(var_01)) + { + var_01 = var_04; + } + + if(var_04 < var_01) + { + var_01 = var_04; + } + } + + return var_01; +} + +//Function Number: 38 +isvalidsoundcause(param_00,param_01,param_02,param_03,param_04) +{ + if(isdefined(param_04)) + { + var_05 = param_01[param_00][param_04][param_02]; + } + else + { + var_05 = param_02[param_01][param_03]; + } + + if(!isdefined(var_05)) + { + return 1; + } + + if(var_05 == param_03) + { + return 1; + } + + return 0; +} + +//Function Number: 39 +isattackervalid(param_00,param_01,param_02) +{ + if(isdefined(self.var_E60)) + { + return 1; + } + + if(isdefined(level.destructible_type[self.destructibleinfo].var_E42[param_00][param_01].v["explode"])) + { + if(isdefined(self.var_E61)) + { + return 0; + } + } + + if(!isdefined(param_02)) + { + return 1; + } + + if(param_02 == self) + { + return 1; + } + + var_03 = level.destructible_type[self.destructibleinfo].var_E42[param_00][param_01].v["validAttackers"]; + if(!isdefined(var_03)) + { + return 1; + } + + if(var_03 == "no_player") + { + if(!isplayer(param_02)) + { + return 1; + } + + if(!isdefined(param_02.var_E62)) + { + return 1; + } + + if(param_02.var_E62 == 0) + { + return 1; + } + } + else if(var_03 == "player_only") + { + if(isplayer(param_02)) + { + return 1; + } + + if(isdefined(param_02.var_E62) && param_02.var_E62) + { + return 1; + } + } + else if(var_03 == "no_ai" && isdefined(level.isaifunc)) + { + if(![[ level.isaifunc ]](param_02)) + { + return 1; + } + } + else if(var_03 == "ai_only" && isdefined(level.isaifunc)) + { + if([[ level.isaifunc ]](param_02)) + { + return 1; + } + } + else + { + } + + return 0; +} + +//Function Number: 40 +isvaliddamagecause(param_00,param_01,param_02) +{ + if(!isdefined(param_02)) + { + return 1; + } + + var_03 = level.destructible_type[self.destructibleinfo].var_E42[param_00][param_01].v["godModeAllowed"]; + if(var_03 && (isdefined(self.godmode) && self.godmode) || isdefined(self.script_bulletshield) && self.script_bulletshield && param_02 == "bullet") + { + return 0; + } + + var_04 = level.destructible_type[self.destructibleinfo].var_E42[param_00][param_01].v["validDamageCause"]; + if(!isdefined(var_04)) + { + return 1; + } + + if(var_04 == "splash" && param_02 != "splash") + { + return 0; + } + + if(var_04 == "no_splash" && param_02 == "splash") + { + return 0; + } + + if((var_04 == "no_melee" && param_02 == "melee") || param_02 == "impact") + { + return 0; + } + + return 1; +} + +//Function Number: 41 +getdamagetype(param_00) +{ + if(!isdefined(param_00)) + { + return "unknown"; + } + + param_00 = tolower(param_00); + switch(param_00) + { + case "mod_crush": + case "mod_melee": + case "melee": + return "melee"; + + case "mod_rifle_bullet": + case "mod_pistol_bullet": + case "bullet": + return "bullet"; + + case "splash": + case "mod_explosive": + case "mod_projectile_splash": + case "mod_projectile": + case "mod_grenade_splash": + case "mod_grenade": + return "splash"; + + case "mod_impact": + return "impact"; + + case "unknown": + return "unknown"; + + default: + return "unknown"; + } +} + +//Function Number: 42 +damage_mirror(param_00,param_01,param_02) +{ + self notify("stop_damage_mirror"); + self endon("stop_damage_mirror"); + param_00 endon("stop_taking_damage"); + self setcandamage(1); + for(;;) + { + self waittill("damage",var_03,var_04,var_05,var_06,var_07); + param_00 notify("damage",var_03,var_04,var_05,var_06,var_07,param_01,param_02); + var_03 = undefined; + var_04 = undefined; + var_05 = undefined; + var_06 = undefined; + var_07 = undefined; + } +} + +//Function Number: 43 +add_damage_owner_recorder() +{ + self.player_damage = 0; + self.non_player_damage = 0; + self.car_damage_owner_recorder = 1; +} + +//Function Number: 44 +loopfx_ontag(param_00,param_01,param_02,param_03) +{ + self endon("FX_State_Change" + param_03); + self endon("delete_destructible"); + level endon("putout_fires"); + while(isdefined(self)) + { + var_04 = get_dummy(); + playfxontag(param_00,var_04,param_01); + wait param_02; + } +} + +//Function Number: 45 +health_drain(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + self endon("Health_Drain_State_Change" + param_02); + level endon("putout_fires"); + self endon("destroyed"); + if(isdefined(param_05) && isdefined(level.var_E6D)) + { + param_05 = param_05 * level.var_E6D; + } + + if(isdefined(param_00) && isdefined(level.var_E6E)) + { + param_00 = param_00 * level.var_E6E; + } + + wait param_01; + self.healthdrain = 1; + var_07 = undefined; + if(isdefined(level.var_E70) && level.var_E70) + { + param_05 = undefined; + } + + if(isdefined(param_05) && isdefined(param_06) && common_scripts\utility::issp()) + { + var_07 = "" + gettime(); + if(!isdefined(self.var_E71)) + { + if(isdefined(self.script_radius)) + { + param_05 = self.script_radius; + } + + if(param_06 == "both") + { + [[ level.badplace_cylinder_func ]](var_07,0,self.origin,param_05,128,"allies","bad_guys"); + } + else + { + [[ level.badplace_cylinder_func ]](var_07,0,self.origin,param_05,128,param_06); + } + + thread badplace_remove(var_07); + } + } + + while(isdefined(self) && self.var_E43[param_02].v["health"] > 0) + { + self notify("damage",param_00,self,(0,0,0),(0,0,0),"MOD_UNKNOWN",param_03,param_04); + wait param_01; + } + + self notify("remove_badplace"); +} + +//Function Number: 46 +badplace_remove(param_00) +{ + common_scripts\utility::waittill_any("destroyed","remove_badplace"); + [[ level.badplace_delete_func ]](param_00); +} + +//Function Number: 47 +physics_launch(param_00,param_01,param_02,param_03) +{ + var_04 = level.destructible_type[self.destructibleinfo].var_E42[param_00][param_01].v["modelName"]; + var_05 = level.destructible_type[self.destructibleinfo].var_E42[param_00][param_01].v["tagName"]; + hideapart(var_05); + if(level.var_E39.size >= level.var_E38) + { + physics_object_remove(level.var_E39[0]); + } + + var_06 = spawn("script_model",self gettagorigin(var_05)); + var_06.angles = self gettagangles(var_05); + var_06 setmodel(var_04); + level.var_E39[level.var_E39.size] = var_06; + var_06 physicslaunchclient(param_02,param_03); +} + +//Function Number: 48 +physics_object_remove(param_00) +{ + var_01 = []; + for(var_02 = 0;var_02 < level.var_E39.size;var_02++) + { + if(level.var_E39[var_02] == param_00) + { + continue; + } + + var_01[var_01.size] = level.var_E39[var_02]; + } + + level.var_E39 = var_01; + if(isdefined(param_00)) + { + param_00 delete(); + } +} + +//Function Number: 49 +explode(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(param_03) && isdefined(level.var_E78)) + { + param_03 = param_03 * level.var_E78; + } + + if(!isdefined(param_07)) + { + param_07 = 80; + } + + if(!isdefined(param_0B)) + { + param_0B = (0,0,0); + } + + if(!isdefined(param_06) || isdefined(param_06) && !param_06) + { + if(isdefined(self.var_946)) + { + return; + } + + self.var_946 = 1; + } + + if(!isdefined(param_0C)) + { + param_0C = 0; + } + + self notify("exploded",param_0A); + level notify("destructible_exploded"); + if(self.code_classname == "script_vehicle") + { + self notify("death",param_0A,self.damage_type); + } + + if(common_scripts\utility::issp()) + { + thread disconnecttraverses(); + } + + if(!level.var_E3C) + { + wait 0.05; + } + + if(!isdefined(self)) + { + return; + } + + var_0D = self.var_E43[param_00].v["currentState"]; + var_0E = undefined; + if(isdefined(level.destructible_type[self.destructibleinfo].var_E42[param_00][var_0D])) + { + var_0E = level.destructible_type[self.destructibleinfo].var_E42[param_00][var_0D].v["tagName"]; + } + + if(isdefined(var_0E)) + { + var_0F = self gettagorigin(var_0E); + } + else + { + var_0F = self.origin; + } + + self notify("damage",param_05,self,(0,0,0),var_0F,"MOD_EXPLOSIVE","",""); + self notify("stop_car_alarm"); + waittillframeend; + if(isdefined(level.destructible_type[self.destructibleinfo].var_E42)) + { + for(var_10 = level.destructible_type[self.destructibleinfo].var_E42.size - 1;var_10 >= 0;var_10--) + { + if(var_10 == param_00) + { + continue; + } + + var_11 = self.var_E43[var_10].v["currentState"]; + if(var_11 >= level.destructible_type[self.destructibleinfo].var_E42[var_10].size) + { + var_11 = level.destructible_type[self.destructibleinfo].var_E42[var_10].size - 1; + } + + var_12 = level.destructible_type[self.destructibleinfo].var_E42[var_10][var_11].v["modelName"]; + var_0E = level.destructible_type[self.destructibleinfo].var_E42[var_10][var_11].v["tagName"]; + if(!isdefined(var_12)) + { + continue; + } + + if(!isdefined(var_0E)) + { + continue; + } + + if(isdefined(level.destructible_type[self.destructibleinfo].var_E42[var_10][0].v["physicsOnExplosion"])) + { + if(level.destructible_type[self.destructibleinfo].var_E42[var_10][0].v["physicsOnExplosion"] > 0) + { + var_13 = level.destructible_type[self.destructibleinfo].var_E42[var_10][0].v["physicsOnExplosion"]; + var_14 = self gettagorigin(var_0E); + var_15 = vectornormalize(var_14 - var_0F); + var_15 = var_15 * randomfloatrange(param_01,param_02) * var_13; + thread physics_launch(var_10,var_11,var_14,var_15); + continue; + } + } + } + } + + var_16 = !isdefined(param_06) || isdefined(param_06) && !param_06; + if(var_16) + { + self notify("stop_taking_damage"); + } + + if(!level.var_E3C) + { + wait 0.05; + } + + if(!isdefined(self)) + { + return; + } + + var_17 = var_0F + (0,0,param_07) + param_0B; + var_18 = getsubstr(level.destructible_type[self.destructibleinfo].v["type"],0,7) == "vehicle"; + if(var_18) + { + anim.var_D20 = gettime(); + anim.var_D22 = var_17; + anim.var_D23 = var_0F; + anim.var_D21 = param_03; + } + + level thread set_disable_friendlyfire_value_delayed(1); + if(param_0C > 0) + { + wait param_0C; + } + + if(isdefined(level.var_E79)) + { + thread [[ level.var_E79 ]](); + } + + if(common_scripts\utility::issp()) + { + if(level.gameskill == 0 && !player_touching_post_clip()) + { + self radiusdamage(var_17,param_03,param_05,param_04,self,"MOD_RIFLE_BULLET"); + } + else + { + self radiusdamage(var_17,param_03,param_05,param_04,self); + } + + if(isdefined(self.damageowner) && var_18) + { + self.damageowner notify("destroyed_car"); + level notify("player_destroyed_car",self.damageowner,var_17); + } + } + else + { + var_19 = "destructible_toy"; + if(var_18) + { + var_19 = "destructible_car"; + } + + if(!isdefined(self.damageowner)) + { + self radiusdamage(var_17,param_03,param_05,param_04,self,"MOD_EXPLOSIVE",var_19); + } + else + { + self radiusdamage(var_17,param_03,param_05,param_04,self.damageowner,"MOD_EXPLOSIVE",var_19); + if(var_18) + { + self.damageowner notify("destroyed_car"); + level notify("player_destroyed_car",self.damageowner,var_17); + } + } + } + + if(isdefined(param_08) && isdefined(param_09)) + { + earthquake(param_08,2,var_17,param_09); + } + + level thread set_disable_friendlyfire_value_delayed(0,0.05); + var_1A = 0.01; + var_1B = param_03 * var_1A; + param_03 = param_03 * 0.99; + physicsexplosionsphere(var_17,param_03,0,var_1B); + if(var_16) + { + self setcandamage(0); + thread cleanupvars(); + } + + self notify("destroyed"); +} + +//Function Number: 50 +cleanupvars() +{ + wait 0.05; + while(isdefined(self) && isdefined(self.var_E55)) + { + self waittill("queue_processed"); + wait 0.05; + } + + if(!isdefined(self)) + { + return; + } + + self.var_E7B = undefined; + self.attacker = undefined; + self.car_damage_owner_recorder = undefined; + self.var_E7C = undefined; + self.damageowner = undefined; + self.var_E43 = undefined; + self.destructible_type = undefined; + self.destructibleinfo = undefined; + self.healthdrain = undefined; + self.non_player_damage = undefined; + self.player_damage = undefined; + if(!isdefined(level.var_E7D)) + { + return; + } + + self.script_noflip = undefined; + self.var_E56 = undefined; + self.var_E57 = undefined; + self.var_E7F = undefined; +} + +//Function Number: 51 +set_disable_friendlyfire_value_delayed(param_00,param_01) +{ + level notify("set_disable_friendlyfire_value_delayed"); + level endon("set_disable_friendlyfire_value_delayed"); + if(isdefined(param_01)) + { + wait param_01; + } + + level.friendlyfiredisabledfordestructible = param_00; +} + +//Function Number: 52 +connecttraverses() +{ + var_00 = get_traverse_disconnect_brush(); + if(!isdefined(var_00)) + { + return; + } + + var_00 [[ level.connectpathsfunction ]](); + var_00.origin = var_00.origin - (0,0,10000); +} + +//Function Number: 53 +disconnecttraverses() +{ + var_00 = get_traverse_disconnect_brush(); + if(!isdefined(var_00)) + { + return; + } + + var_00.origin = var_00.origin + (0,0,10000); + var_00 [[ level.disconnectpathsfunction ]](); + var_00.origin = var_00.origin - (0,0,10000); +} + +//Function Number: 54 +get_traverse_disconnect_brush() +{ + if(!isdefined(self.target)) + { + return undefined; + } + + var_00 = getentarray(self.target,"targetname"); + foreach(var_02 in var_00) + { + if(isspawner(var_02)) + { + continue; + } + + if(isdefined(var_02.var_E85)) + { + continue; + } + + if(var_02.code_classname == "light") + { + continue; + } + + if(!var_02.spawnflags & 1) + { + continue; + } + + return var_02; + } +} + +//Function Number: 55 +hideapart(param_00) +{ + self hidepart(param_00); +} + +//Function Number: 56 +showapart(param_00) +{ + self showpart(param_00); +} + +//Function Number: 57 +disable_explosion() +{ + self.var_E61 = 1; +} + +//Function Number: 58 +force_explosion() +{ + self.var_E61 = undefined; + self.var_E60 = 1; + self notify("damage",100000,self,self.origin,self.origin,"MOD_EXPLOSIVE","",""); +} + +//Function Number: 59 +get_dummy() +{ + if(!common_scripts\utility::issp()) + { + return self; + } + + if(self.modeldummyon) + { + var_00 = self.modeldummy; + } + else + { + var_00 = self; + } + + return var_00; +} + +//Function Number: 60 +play_loop_sound_on_destructible(param_00,param_01) +{ + var_02 = get_dummy(); + var_03 = spawn("script_origin",(0,0,0)); + if(isdefined(param_01)) + { + var_03.origin = var_02 gettagorigin(param_01); + } + else + { + var_03.origin = var_02.origin; + } + + var_03 playloopsound(param_00); + var_02 thread force_stop_sound(param_00); + var_02 waittill("stop sound" + param_00); + if(!isdefined(var_03)) + { + return; + } + + var_03 stoploopsound(param_00); + var_03 delete(); +} + +//Function Number: 61 +force_stop_sound(param_00) +{ + self endon("stop sound" + param_00); + level waittill("putout_fires"); + self notify("stop sound" + param_00); +} + +//Function Number: 62 +notifydamageafterframe(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + if(isdefined(level.notifydamageafterframe)) + { + return; + } + + level.notifydamageafterframe = 1; + waittillframeend; + if(isdefined(self.var_946)) + { + level.notifydamageafterframe = undefined; + return; + } + + if(common_scripts\utility::issp()) + { + param_00 = param_00 / 0.5; + } + else + { + param_00 = param_00 / 1; + } + + self notify("damage",param_00,param_01,param_02,param_03,param_04,param_05,param_06); + level.notifydamageafterframe = undefined; +} + +//Function Number: 63 +play_sound(param_00,param_01) +{ + if(isdefined(param_01)) + { + var_02 = spawn("script_origin",self gettagorigin(param_01)); + var_02 hide(); + var_02 linkto(self,param_01,(0,0,0),(0,0,0)); + } + else + { + var_02 = spawn("script_origin",(0,0,0)); + var_02 hide(); + var_02.origin = self.origin; + var_02.angles = self.angles; + var_02 linkto(self); + } + + var_02 playsound(param_00); + wait 5; + if(isdefined(var_02)) + { + var_02 delete(); + } +} + +//Function Number: 64 +tostring(param_00) +{ + return "" + param_00; +} + +//Function Number: 65 +do_car_alarm() +{ + if(isdefined(self.var_E7C)) + { + return; + } + + self.var_E7C = 1; + if(!should_do_car_alarm()) + { + return; + } + + self.var_E7F = spawn("script_model",self.origin); + self.var_E7F hide(); + self.var_E7F playloopsound("car_alarm"); + level.var_E3A++; + thread car_alarm_timeout(); + self waittill("stop_car_alarm"); + level.var_E91 = gettime(); + level.var_E3A--; + self.var_E7F stoploopsound("car_alarm"); + self.var_E7F delete(); +} + +//Function Number: 66 +car_alarm_timeout() +{ + self endon("stop_car_alarm"); + wait 25; + if(!isdefined(self)) + { + return; + } + + thread play_sound("car_alarm_off"); + self notify("stop_car_alarm"); +} + +//Function Number: 67 +should_do_car_alarm() +{ + if(level.var_E3A >= 2) + { + return 0; + } + + var_00 = undefined; + if(!isdefined(level.var_E91)) + { + if(common_scripts\utility::cointoss()) + { + return 1; + } + + var_00 = gettime() - level.var_E3B; + } + else + { + var_00 = gettime() - level.var_E91; + } + + if(level.var_E3A == 0 && var_00 >= 120) + { + return 1; + } + + if(randomint(100) <= 33) + { + return 1; + } + + return 0; +} + +//Function Number: 68 +do_random_dynamic_attachment(param_00,param_01,param_02,param_03) +{ + var_04 = []; + if(common_scripts\utility::issp()) + { + self attach(param_01,param_00,0); + if(isdefined(param_02) && param_02 != "") + { + self attach(param_02,param_00,0); + } + } + else + { + var_7B[0].angles = self gettagangles(param_01); + var_7B[0] setmodel(param_02); + var_7B[0] linkto(self,param_01); + if(isdefined(param_03) && param_03 != "") + { + var_7B[1].angles = self gettagangles(param_01); + var_7B[1] setmodel(param_03); + var_7B[1] linkto(self,param_01); + } + } + + if(isdefined(var_04)) + { + var_05 = self gettagorigin(param_01); + var_06 = get_closest_with_targetname(var_05,var_04); + if(isdefined(var_06)) + { + var_06 delete(); + } + } + + self waittill(spawn("script_model",self gettagorigin(param_00)),var_7B[0],spawn("script_model",self gettagorigin(param_01)),var_7B[1],"exploded"); + if(common_scripts\utility::issp()) + { + self detach(param_02,param_01); + self attach(param_02 + "_destroy",param_01,0); + if(isdefined(param_03) && param_03 != "") + { + self detach(param_03,param_01); + self attach(param_03 + "_destroy",param_01,0); + return; + } + + return; + } + + var_7B[0] setmodel(param_02 + "_destroy"); + if(isdefined(param_03) && param_03 != "") + { + var_7B[1] setmodel(param_03 + "_destroy"); + } +} + +//Function Number: 69 +get_closest_with_targetname(param_00,param_01) +{ + var_02 = undefined; + var_03 = undefined; + var_04 = getentarray(param_01,"targetname"); + foreach(var_06 in var_04) + { + var_07 = distancesquared(param_00,var_06.origin); + if(!isdefined(var_02) || var_07 < var_02) + { + var_02 = var_07; + var_03 = var_06; + } + } + + return var_03; +} + +//Function Number: 70 +player_touching_post_clip() +{ + var_00 = undefined; + if(!isdefined(self.target)) + { + return 0; + } + + var_01 = getentarray(self.target,"targetname"); + foreach(var_03 in var_01) + { + if(isdefined(var_03.var_E85) && var_03.var_E85 == "post") + { + var_00 = var_03; + break; + } + } + + if(!isdefined(var_00)) + { + return 0; + } + + var_05 = get_player_touching(var_00); + if(isdefined(var_05)) + { + return 1; + } + + return 0; +} + +//Function Number: 71 +get_player_touching(param_00) +{ + foreach(var_02 in level.players) + { + if(!isalive(var_02)) + { + continue; + } + + if(param_00 istouching(var_02)) + { + return var_02; + } + } + + return undefined; +} + +//Function Number: 72 +is_so() +{ + return getdvar("specialops") == "1"; +} + +//Function Number: 73 +destructible_handles_collision_brushes() +{ + var_00 = getentarray(self.target,"targetname"); + var_01 = []; + foreach(var_03 in var_01) + { + if(!isdefined(var_03.var_E85)) + { + continue; + } + + self thread [[ var_7B[var_03.var_E85] ]](var_03); + } +} + +//Function Number: 74 +collision_brush_pre_explosion(param_00) +{ + waittillframeend; + if(common_scripts\utility::issp() && param_00.spawnflags & 1) + { + param_00 [[ level.disconnectpathsfunction ]](); + } + + self waittill("exploded"); + if(common_scripts\utility::issp() && param_00.spawnflags & 1) + { + param_00 [[ level.connectpathsfunction ]](); + } + + param_00 delete(); +} + +//Function Number: 75 +collision_brush_post_explosion(param_00) +{ + param_00 notsolid(); + if(common_scripts\utility::issp() && param_00.spawnflags & 1) + { + param_00 [[ level.connectpathsfunction ]](); + } + + self waittill("exploded"); + waittillframeend; + if(common_scripts\utility::issp()) + { + if(param_00.spawnflags & 1) + { + param_00 [[ level.disconnectpathsfunction ]](); + } + + if(is_so()) + { + var_01 = get_player_touching(param_00); + if(isdefined(var_01)) + { + self thread [[ level.func_destructible_crush_player ]](var_01); + } + } + else + { + } + } + + param_00 solid(); +} + +//Function Number: 76 +debug_player_in_post_clip(param_00) +{ +} + +//Function Number: 77 +destructible_get_my_breakable_light(param_00) +{ + var_01 = getentarray("light_destructible","targetname"); + if(common_scripts\utility::issp()) + { + var_02 = getentarray("light_destructible","script_noteworthy"); + var_01 = common_scripts\utility::array_combine(var_01,var_02); + } + + if(!var_01.size) + { + return; + } + + var_03 = param_00 * param_00; + var_04 = undefined; + foreach(var_06 in var_01) + { + var_07 = distancesquared(self.origin,var_06.origin); + if(var_07 < var_03) + { + var_04 = var_06; + var_03 = var_07; + } + } + + if(!isdefined(var_04)) + { + return; + } + + self.var_E9F = var_04; +} + +//Function Number: 78 +break_nearest_light(param_00) +{ + if(!isdefined(self.var_E9F)) + { + return; + } + + self.var_E9F setlightintensity(0); +} + +//Function Number: 79 +debug_radiusdamage_circle(param_00,param_01,param_02,param_03) +{ + var_04 = 16; + var_05 = 360 / var_04; + var_06 = []; + for(var_07 = 0;var_07 < var_04;var_07++) + { + var_08 = var_05 * var_07; + var_09 = cos(var_08) * param_01; + var_0A = sin(var_08) * param_01; + var_0B = param_00[0] + var_09; + var_0C = param_00[1] + var_0A; + var_0D = param_00[2]; + var_06[var_06.size] = (var_0B,var_0C,var_0D); + } + + thread debug_circle_drawlines(var_06,5,(1,0,0),param_00); + var_06 = []; + for(var_07 = 0;var_07 < var_04;var_07++) + { + var_08 = var_05 * var_07; + var_09 = cos(var_08) * param_01; + var_0A = sin(var_08) * param_01; + var_0B = param_00[0]; + var_0C = param_00[1] + var_09; + var_0D = param_00[2] + var_0A; + var_06[var_06.size] = (var_0B,var_0C,var_0D); + } + + thread debug_circle_drawlines(var_06,5,(1,0,0),param_00); + var_06 = []; + for(var_07 = 0;var_07 < var_04;var_07++) + { + var_08 = var_05 * var_07; + var_09 = cos(var_08) * param_01; + var_0A = sin(var_08) * param_01; + var_0B = param_00[0] + var_0A; + var_0C = param_00[1]; + var_0D = param_00[2] + var_09; + var_06[var_06.size] = (var_0B,var_0C,var_0D); + } + + thread debug_circle_drawlines(var_06,5,(1,0,0),param_00); +} + +//Function Number: 80 +debug_circle_drawlines(param_00,param_01,param_02,param_03) +{ + for(var_04 = 0;var_04 < param_00.size;var_04++) + { + var_05 = param_00[var_04]; + if(var_04 + 1 >= param_00.size) + { + var_06 = param_00[0]; + } + else + { + var_06 = param_00[var_04 + 1]; + } + + thread debug_line(var_05,var_06,param_01,param_02); + thread debug_line(param_03,var_05,param_01,param_02); + } +} + +//Function Number: 81 +debug_line(param_00,param_01,param_02,param_03) +{ + if(!isdefined(param_03)) + { + param_03 = (1,1,1); + } + + for(var_04 = 0;var_04 < param_02 * 20;var_04++) + { + wait 0.05; + } +} + +//Function Number: 82 +spotlight_tag_origin_cleanup(param_00) +{ + param_00 endon("death"); + level waittill("new_destructible_spotlight"); + param_00 delete(); +} + +//Function Number: 83 +spotlight_fizzles_out(param_00,param_01,param_02,param_03,param_04) +{ + level endon("new_destructible_spotlight"); + thread spotlight_tag_origin_cleanup(param_04); + var_05 = param_00["spotlight_brightness"]; + common_scripts\utility::noself_func("setsaveddvar","r_spotlightbrightness",var_05); + wait randomfloatrange(2,5); + var_06 = randomintrange(5,11); + for(var_07 = 0;var_07 < var_06;var_07++) + { + common_scripts\utility::noself_func("setsaveddvar","r_spotlightbrightness",var_05 * 0.65); + wait 0.05; + common_scripts\utility::noself_func("setsaveddvar","r_spotlightbrightness",var_05); + wait 0.05; + } + + destructible_fx_think(param_00,param_01,param_02,param_03); + level.destructible_spotlight delete(); + param_04 delete(); +} + +//Function Number: 84 +destructible_spotlight_think(param_00,param_01,param_02,param_03) +{ + if(!common_scripts\utility::issp()) + { + return; + } + + if(!isdefined(self.var_E9F)) + { + return; + } + + param_01 common_scripts\utility::self_func("startignoringspotLight"); + foreach(var_06, var_05 in param_00["dvars"]) + { + common_scripts\utility::noself_func("setsaveddvar",var_06,var_05); + } + + if(!isdefined(level.destructible_spotlight)) + { + level.destructible_spotlight = common_scripts\utility::spawn_tag_origin(); + var_07 = common_scripts\utility::getfx(param_00["spotlight_fx"]); + playfxontag(var_07,level.destructible_spotlight,"tag_origin"); + } + + level notify("new_destructible_spotlight"); + level.destructible_spotlight unlink(); + var_08 = common_scripts\utility::spawn_tag_origin(); + var_08 linkto(self,param_00["spotlight_tag"],(0,0,0),(0,0,0)); + level.destructible_spotlight.origin = self.var_E9F.origin; + level.destructible_spotlight.angles = self.var_E9F.angles; + level.destructible_spotlight thread spotlight_fizzles_out(param_00,param_01,param_02,param_03,var_08); + wait 0.05; + if(isdefined(var_08)) + { + level.destructible_spotlight linkto(var_08); + } +} + +//Function Number: 85 +is_valid_damagetype(param_00,param_01,param_02,param_03) +{ + var_04 = undefined; + if(isdefined(param_01["fx_valid_damagetype"])) + { + var_04 = param_01["fx_valid_damagetype"][param_03][param_02]; + } + + if(!isdefined(var_04)) + { + return 1; + } + + return issubstr(var_04,param_00); +} + +//Function Number: 86 +destructible_sound_think(param_00,param_01,param_02,param_03) +{ + if(isdefined(self.var_946)) + { + return undefined; + } + + if(!isdefined(param_00["sound"])) + { + return undefined; + } + + if(!isdefined(param_03)) + { + param_03 = 0; + } + + for(var_04 = 0;var_04 < param_00["sound"][param_03].size;var_04++) + { + var_05 = isvalidsoundcause("soundCause",param_00,var_04,param_02,param_03); + if(!var_05) + { + continue; + } + + var_06 = param_00["sound"][param_03][var_04]; + var_07 = param_00["tagName"]; + param_01 thread play_sound(var_06,var_07); + } + + return param_03; +} + +//Function Number: 87 +destructible_fx_think(param_00,param_01,param_02,param_03,param_04) +{ + if(!isdefined(param_00["fx"])) + { + return undefined; + } + + if(!isdefined(param_04)) + { + param_04 = randomint(param_00["fx_filename"].size); + } + + if(!isdefined(param_00["fx"][param_04])) + { + param_04 = randomint(param_00["fx_filename"].size); + } + + var_05 = param_00["fx_filename"][param_04].size; + for(var_06 = 0;var_06 < var_05;var_06++) + { + if(!is_valid_damagetype(param_02,param_00,var_06,param_04)) + { + continue; + } + + var_07 = param_00["fx"][param_04][var_06]; + if(isdefined(param_00["fx_tag"][param_04][var_06])) + { + var_08 = param_00["fx_tag"][param_04][var_06]; + self notify("FX_State_Change" + param_03); + if(param_00["fx_useTagAngles"][param_04][var_06]) + { + playfxontag(var_07,param_01,var_08); + } + else + { + var_09 = param_01 gettagorigin(var_08); + var_0A = var_09 + (0,0,100) - var_09; + playfx(var_07,var_09,var_0A); + } + + continue; + } + + var_09 = param_01.origin; + var_0A = var_09 + (0,0,100) - var_09; + playfx(var_07,var_09,var_0A); + } + + return param_04; +} + +//Function Number: 88 +destructible_animation_think(param_00,param_01,param_02,param_03) +{ + if(isdefined(self.var_946)) + { + return undefined; + } + + if(!isdefined(param_00["animation"])) + { + return undefined; + } + + if(isdefined(self.var_EAB)) + { + return undefined; + } + + if(isdefined(param_00["randomly_flip"]) && !isdefined(self.script_noflip)) + { + if(common_scripts\utility::cointoss()) + { + self.angles = self.angles + (0,180,0); + } + } + + if(isdefined(param_00["spotlight_tag"])) + { + thread destructible_spotlight_think(param_00,param_01,param_02,param_03); + wait 0.05; + } + + var_04 = common_scripts\utility::random(param_00["animation"]); + var_05 = var_04["anim"]; + var_06 = var_04["animTree"]; + var_07 = var_04["groupNum"]; + var_08 = var_04["mpAnim"]; + var_09 = var_04["maxStartDelay"]; + var_0A = var_04["animRateMin"]; + var_0B = var_04["animRateMax"]; + if(!isdefined(var_0A)) + { + var_0A = 1; + } + + if(!isdefined(var_0B)) + { + var_0B = 1; + } + + if(var_0A == var_0B) + { + var_0C = var_0A; + } + else + { + var_0C = randomfloatrange(var_0B,var_0C); + } + + var_0D = var_04["vehicle_exclude_anim"]; + if(self.code_classname == "script_vehicle" && var_0D) + { + return undefined; + } + + param_01 common_scripts\utility::self_func("useanimtree",var_06); + var_0E = var_04["animType"]; + if(!isdefined(self.var_E7B)) + { + self.var_E7B = []; + } + + self.var_E7B[self.var_E7B.size] = var_05; + if(isdefined(self.var_E56)) + { + clear_anims(param_01); + } + + if(isdefined(var_09) && var_09 > 0) + { + wait randomfloat(var_09); + } + + if(!common_scripts\utility::issp()) + { + if(isdefined(var_08)) + { + common_scripts\utility::self_func("scriptModelPlayAnim",var_08); + } + + return var_07; + } + + if(var_0E == "setanim") + { + param_01 common_scripts\utility::self_func("setanim",var_05,1,1,var_0C); + return var_07; + } + + if(var_0E == "setanimknob") + { + param_01 common_scripts\utility::self_func("setanimknob",var_05,1,0,var_0C); + return var_07; + } + + return undefined; +} + +//Function Number: 89 +clear_anims(param_00) +{ + if(isdefined(self.var_E7B)) + { + foreach(var_02 in self.var_E7B) + { + if(common_scripts\utility::issp()) + { + param_00 common_scripts\utility::self_func("clearanim",var_02,0); + continue; + } + + param_00 common_scripts\utility::self_func("scriptModelClearAnim"); + } + } +} + +//Function Number: 90 +init_destroyed_count() +{ + level.var_EAE = 0; + level.var_EAF = 0.5; + if(common_scripts\utility::issp()) + { + level.var_EB0 = 20; + return; + } + + level.var_EB0 = 2; +} + +//Function Number: 91 +add_to_destroyed_count() +{ + level.var_EAE++; + wait level.var_EAF; + level.var_EAE--; +} + +//Function Number: 92 +get_destroyed_count() +{ + return level.var_EAE; +} + +//Function Number: 93 +get_max_destroyed_count() +{ + return level.var_EB0; +} + +//Function Number: 94 +init_destructible_frame_queue() +{ + level.var_EB5 = []; +} + +//Function Number: 95 +add_destructible_to_frame_queue(param_00,param_01,param_02) +{ + var_03 = self getentitynumber(); + if(!isdefined(level.var_EB5[var_03])) + { + level.var_EB5[var_03] = spawnstruct(); + level.var_EB5[var_03].entnum = var_03; + level.var_EB5[var_03].destructible = param_00; + level.var_EB5[var_03].var_EB9 = 0; + level.var_EB5[var_03].var_EBA = 9999999; + level.var_EB5[var_03].var_EBB = 0; + } + + level.var_EB5[var_03].var_EBB = level.var_EB5[var_03].var_EBB + param_01.v["fxcost"]; + level.var_EB5[var_03].var_EB9 = level.var_EB5[var_03].var_EB9 + param_02; + if(param_01.v["distance"] < level.var_EB5[var_03].var_EBA) + { + level.var_EB5[var_03].var_EBA = param_01.v["distance"]; + } + + thread handle_destructible_frame_queue(); +} + +//Function Number: 96 +handle_destructible_frame_queue() +{ + level notify("handle_destructible_frame_queue"); + level endon("handle_destructible_frame_queue"); + wait 0.05; + var_00 = level.var_EB5; + level.var_EB5 = []; + var_01 = sort_destructible_frame_queue(var_00); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + if(get_destroyed_count() < get_max_destroyed_count()) + { + if(var_01[var_02].var_EBB) + { + thread add_to_destroyed_count(); + } + + var_01[var_02].destructible notify("queue_processed",1); + continue; + } + + var_01[var_02].destructible notify("queue_processed",0); + } +} + +//Function Number: 97 +sort_destructible_frame_queue(param_00) +{ + var_01 = []; + foreach(var_03 in param_00) + { + var_01[var_01.size] = var_03; + } + + for(var_05 = 1;var_05 < var_01.size;var_05++) + { + var_06 = var_01[var_05]; + for(var_07 = var_05 - 1;var_07 >= 0 && get_better_destructible(var_06,var_01[var_07]) == var_06;var_07--) + { + var_01[var_07 + 1] = var_01[var_07]; + } + + var_01[var_07 + 1] = var_06; + } + + return var_01; +} + +//Function Number: 98 +get_better_destructible(param_00,param_01) +{ + if(param_00.var_EB9 > param_01.var_EB9) + { + return param_00; + } + + return param_01; +} + +//Function Number: 99 +get_part_fx_cost_for_action_state(param_00,param_01) +{ + var_02 = 0; + if(!isdefined(level.destructible_type[self.destructibleinfo].var_E42[param_00][param_01])) + { + return var_02; + } + + var_03 = level.destructible_type[self.destructibleinfo].var_E42[param_00][param_01].v; + if(isdefined(var_03["fx"])) + { + foreach(var_05 in var_03["fx_cost"]) + { + foreach(var_07 in var_05) + { + var_02 = var_02 + var_07; + } + } + } + + return var_02; +} \ No newline at end of file diff --git a/MW3/PC/SP/common_scripts/_destructible_types.gsc b/MW3/PC/SP/common_scripts/_destructible_types.gsc new file mode 100644 index 0000000..34f3dba --- /dev/null +++ b/MW3/PC/SP/common_scripts/_destructible_types.gsc @@ -0,0 +1,6201 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: common_scripts\_destructible_types.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 161 + * Decompile Time: 1984 ms + * Timestamp: 10/27/2023 2:25:02 AM +*******************************************************************/ + +//Function Number: 1 +maketype(param_00) +{ + var_01 = getinfoindex(param_00); + if(var_01 >= 0) + { + return var_01; + } + + switch(param_00) + { + case "rus_vx_gas_canister": + dest_pb_planter(param_00); + break; + + case "prop_ac_prs_enm_barge_a_1": + prop_ac_prs_enm_barge_a_1(); + break; + + case "prop_ac_prs_enm_barge_a_2": + prop_ac_prs_enm_barge_a_2(); + break; + + case "prop_ac_prs_enm_con_digger_a": + prop_ac_prs_enm_con_digger_a(); + break; + + case "prop_ac_prs_enm_con_dump_truck_a": + prop_ac_prs_enm_con_dump_truck_a(); + break; + + case "prop_ac_prs_enm_fuel_tank_a": + prop_ac_prs_enm_fuel_tank_a(); + break; + + case "vehicle_jeep": + vehicle_uaz_fabric(param_00); + break; + + case "vehicle_uaz_van_destructible": + vehicle_subcompact(param_00); + break; + + case "prop_ac_prs_enm_hanger_a": + prop_ac_prs_enm_hanger_a(); + break; + + case "prop_ac_prs_enm_maz_a": + prop_ac_prs_enm_maz_a(); + break; + + case "prop_ac_prs_enm_mi26_halo_a": + prop_ac_prs_enm_mi26_halo_a(); + break; + + case "prop_ac_prs_enm_mstas_a": + prop_ac_prs_enm_mstas_a(); + break; + + case "prop_ac_prs_enm_radar_maz_a": + prop_ac_prs_enm_radar_maz_a(); + break; + + case "prop_ac_prs_enm_s300v_a": + prop_ac_prs_enm_s300v_a(); + break; + + case "prop_ac_prs_enm_storage_bld_a_1": + prop_ac_prs_enm_storage_bld_a_1(); + break; + + case "prop_ac_prs_enm_storage_bld_a_2": + prop_ac_prs_enm_storage_bld_a_2(); + break; + + case "prop_ac_prs_enm_storage_bld_b": + prop_ac_prs_enm_storage_bld_b(); + break; + + case "vehicle_semi_truck": + vehicle_mig29_landed(); + break; + + case "prop_ac_prs_enm_tent_a": + prop_ac_prs_enm_tent_a(); + break; + + case "prop_ac_prs_enm_tent_b": + prop_ac_prs_enm_tent_b(); + break; + + case "prop_ac_prs_enm_tent_c": + prop_ac_prs_enm_tent_c(); + break; + + case "prop_ac_prs_enm_truck_a": + prop_ac_prs_enm_truck_a(); + break; + + case "prop_ac_prs_enm_cargo_crate_a_1": + prop_ac_prs_enm_cargo_crate_a_1(); + break; + + case "prop_ac_prs_enm_cargo_crate_a_2": + prop_ac_prs_enm_cargo_crate_a_2(); + break; + + case "prop_ac_prs_enm_crates_a_1": + prop_ac_prs_enm_crates_a_1(); + break; + + case "prop_ac_prs_enm_crates_a_2": + prop_ac_prs_enm_crates_a_2(); + break; + + case "prop_ac_prs_enm_crates_b_1": + prop_ac_prs_enm_crates_b_1(); + break; + + case "prop_ac_prs_enm_crates_b_2": + prop_ac_prs_enm_crates_b_2(); + break; + + case "prop_ac_prs_enm_mobile_crane_a": + prop_ac_prs_enm_mobile_crane_a(); + break; + + case "prop_ac_prs_enm_landing_craft_a": + prop_ac_prs_enm_landing_craft_a(); + break; + + case "prop_ac_prs_enm_speed_boat_a": + prop_ac_prs_enm_speed_boat_a(); + break; + + case "prop_ac_prs_prp_satellite_dish_a_dish": + prop_ac_prs_prp_satellite_dish_a_dish(); + break; + + case "prop_ac_prs_fps_hc_extc_balcony_a1": + prop_ac_prs_fps_hc_extc_balcony_a1(); + break; + + case "prop_ac_prs_fps_hc_extc_balcony_a2": + prop_ac_prs_fps_hc_extc_balcony_a2(); + break; + + case "prop_ac_prs_fps_hc_extc_balcony_a3": + prop_ac_prs_fps_hc_extc_balcony_a3(); + break; + + case "prop_ac_prs_fps_hc_extc_balcony_b1": + prop_ac_prs_fps_hc_extc_balcony_b1(); + break; + + case "prop_ac_prs_fps_hc_extc_balcony_b2": + prop_ac_prs_fps_hc_extc_balcony_b2(); + break; + + case "prop_ac_prs_fps_hc_extc_balcony_b3": + prop_ac_prs_fps_hc_extc_balcony_b3(); + break; + + case "prop_ac_prs_fps_hc_extc_balcony_c1": + prop_ac_prs_fps_hc_extc_balcony_c1(); + break; + + case "prop_ac_prs_fps_hc_extc_balcony_c2": + prop_ac_prs_fps_hc_extc_balcony_c2(); + break; + + case "prop_ac_prs_fps_hc_extc_column_b_a1": + prop_ac_prs_fps_hc_extc_column_b_a1(); + break; + + case "prop_ac_prs_fps_hc_extc_column_b_a2": + prop_ac_prs_fps_hc_extc_column_b_a2(); + break; + + case "prop_ac_prs_fps_hc_extc_column_b_a3": + prop_ac_prs_fps_hc_extc_column_b_a3(); + break; + + case "prop_ac_prs_fps_hc_extc_column_t_a1": + prop_ac_prs_fps_hc_extc_column_t_a1(); + break; + + case "prop_ac_prs_fps_hc_extc_column_t_a2": + prop_ac_prs_fps_hc_extc_column_t_a2(); + break; + + case "prop_ac_prs_fps_hc_extc_column_t_a3": + prop_ac_prs_fps_hc_extc_column_t_a3(); + break; + + case "prop_ac_prs_enm_missile_boat_a": + prop_ac_prs_enm_missile_boat_a(); + break; + + case "toy_glass120x110": + toy_glass("120x110"); + break; + + case "vehicle_mini_destructible_blue": + get_precached_animtree("blue"); + break; + + case "vehicle_mini_destructible_gray": + get_precached_animtree("gray"); + break; + + case "vehicle_mini_destructible_white": + get_precached_animtree("white"); + break; + + case "vehicle_mini_destructible_red": + get_precached_animtree("red"); + break; + + case "toy_glass120x44": + toy_glass("120x44"); + break; + + case "toy_glass56x59": + toy_glass("56x59"); + break; + + case "toy_glass74x110": + toy_glass("74x110"); + break; + + case "toy_glass74x44": + toy_glass("74x44"); + break; + + case "toy_dt_mirror": + toy_dt_mirror(""); + break; + + case "toy_dt_mirror_large": + toy_dt_mirror("_large"); + break; + + case "toy_icbm_consolemonitor1": + toy_icbm_consolemonitor("1"); + break; + + case "toy_icbm_consolemonitor2": + toy_icbm_consolemonitor("2"); + break; + + case "toy_icbm_consolemonitor3": + toy_icbm_consolemonitor("3"); + break; + + case "toy_icbm_consolemonitor4": + toy_icbm_consolemonitor("4"); + break; + + case "toy_icbm_consolemonitor5": + toy_icbm_consolemonitor("5"); + break; + + case "toy_icbm_consolemonitor6": + toy_icbm_consolemonitor("6"); + break; + + case "toy_tubetv_tv1": + toy_tubetv_("tv1"); + break; + + case "toy_tubetv_tv2": + toy_tubetv_("tv2"); + break; + + case "toy_tv_flatscreen_01": + toy_tvs_flatscreen("01",""); + break; + + case "toy_tv_flatscreen_02": + toy_tvs_flatscreen("02",""); + break; + + case "toy_tv_flatscreen_wallmount_01": + toy_tvs_flatscreen("01","wallmount_"); + break; + + case "toy_tv_flatscreen_wallmount_01_sturdy": + toy_tvs_flatscreen_sturdy("01","wallmount_"); + break; + + case "toy_tv_flatscreen_wallmount_02": + toy_tvs_flatscreen("02","wallmount_"); + break; + + case "toy_transformer_ratnest01": + toy_transformer_ratnest01(param_00); + break; + + case "toy_transformer_small01": + toy_transformer_small01(param_00); + break; + + case "toy_generator": + toy_generator(param_00); + break; + + case "toy_generator_on": + toy_generator_on(param_00); + break; + + case "toy_oxygen_tank_01": + toy_oxygen_tank("01"); + break; + + case "toy_oxygen_tank_02": + toy_oxygen_tank("02"); + break; + + case "toy_electricbox2": + toy_electricbox2(param_00); + break; + + case "toy_electricbox4": + toy_electricbox4(param_00); + break; + + case "toy_airconditioner": + toy_airconditioner(param_00); + break; + + case "toy_ceiling_fan": + toy_ceiling_fan(param_00); + break; + + case "toy_wall_fan": + toy_wall_fan(param_00); + break; + + case "toy_propane_tank02": + toy_propane_tank02(param_00); + break; + + case "toy_propane_tank02_small": + toy_propane_tank02_small(param_00); + break; + + case "toy_copier": + toy_copier(param_00); + break; + + case "toy_firehydrant": + toy_firehydrant(param_00); + break; + + case "toy_parkingmeter": + toy_parkingmeter(param_00); + break; + + case "toy_mailbox": + toy_mailbox(param_00); + break; + + case "toy_mailbox2_black": + toy_mailbox2("black"); + break; + + case "toy_mailbox2_green": + toy_mailbox2("green"); + break; + + case "toy_mailbox2_yellow": + toy_mailbox2("yellow"); + break; + + case "toy_newspaper_stand_red": + toy_newspaper_stand_red(param_00); + break; + + case "toy_newspaper_stand_blue": + toy_newspaper_stand_blue(param_00); + break; + + case "toy_filecabinet": + toy_filecabinet(param_00); + break; + + case "toy_trashbin_01": + toy_trashbin_01(param_00); + break; + + case "toy_trashbin_02": + toy_trashbin_02(param_00); + break; + + case "toy_trashbag1_white": + toy_trashbag1("white"); + break; + + case "toy_trashbag1_black": + toy_trashbag1("black"); + break; + + case "toy_trashbag1_green": + toy_trashbag1("green"); + break; + + case "toy_recyclebin_01": + toy_recyclebin_01(param_00); + break; + + case "toy_trashcan_metal_closed": + toy_trashcan_metal_closed(param_00); + break; + + case "toy_water_collector": + toy_water_collector(param_00); + break; + + case "toy_foliage_tree_oak_1": + toy_foliage_tree_oak_1(param_00); + break; + + case "toy_paris_tree_plane_large": + toy_paris_tree_plane_large(param_00); + break; + + case "toy_usa_gas_station_trash_bin_01": + toy_usa_gas_station_trash_bin_01(param_00); + break; + + case "toy_usa_gas_station_trash_bin_02": + toy_usa_gas_station_trash_bin_02(param_00); + break; + + case "toy_light_ceiling_round": + toy_light_ceiling_round(param_00); + break; + + case "toy_light_ceiling_fluorescent": + toy_light_ceiling_fluorescent(param_00); + break; + + case "toy_light_ceiling_fluorescent_spotlight": + toy_light_ceiling_fluorescent_spotlight(param_00); + break; + + case "toy_light_ceiling_fluorescent_single": + toy_light_ceiling_fluorescent_single(param_00); + break; + + case "toy_light_ceiling_fluorescent_single_spotlight": + toy_light_ceiling_fluorescent_single_spotlight(param_00); + break; + + case "toy_bookstore_bookstand4_books": + toy_bookstore_bookstand4_books(param_00); + break; + + case "toy_locker_double": + toy_locker_double(param_00); + break; + + case "toy_chicken": + toy_chicken(""); + break; + + case "toy_chicken_white": + toy_chicken("_white"); + break; + + case "toy_chicken_black_white": + toy_chicken("_black_white"); + break; + + case "toy_luggage_01": + toy_hide_with_fx("toy_luggage_01","luggage1_lod0","maps/hijack/luggage_1_des_hjk",120); + break; + + case "toy_luggage_02": + toy_hide_with_fx("toy_luggage_02","luggage2_lod0","maps/hijack/luggage_2_des_hjk",120); + break; + + case "toy_luggage_03": + toy_hide_with_fx("toy_luggage_03","luggage3_lod0","maps/hijack/luggage_3_des_hjk",120); + break; + + case "toy_luggage_04": + toy_hide_with_fx("toy_luggage_04","luggage4_lod0","maps/hijack/luggage_4_des_hjk",120); + break; + + case "toy_com_cardboardbox_dusty_05": + toy_hide_with_fx("toy_com_cardboardbox_dusty_05","cardboardbox_5_lod0","props/cardboardbox01_snacks_exp",30); + break; + + case "toy_com_cardboardboxshortclosed_1": + toy_hide_with_fx("toy_com_cardboardboxshortclosed_1","cardboardboxshortclosed_1_lod0","props/cardboardboxshortclosed_snacks_exp",30); + break; + + case "intro_gate_column_02_dest_01": + toy_intro_concrete_chipaway("intro_gate_column_02_dest_01",12); + break; + + case "intro_concrete_junkyardwall_01": + toy_intro_concrete_chipaway("intro_concrete_junkyardwall_01",9); + break; + + case "intro_concrete_kneehighwall_01": + toy_intro_concrete_chipaway("intro_concrete_kneehighwall_01",8); + break; + + case "dub_lobby_fish_sculpture_left_orange": + toy_dubai_fish_sculpture("dub_lobby_fish_sculpture_left_orange","orange",40); + break; + + case "dub_lobby_fish_sculpture_right_orange": + toy_dubai_fish_sculpture("dub_lobby_fish_sculpture_right_orange","orange",40); + break; + + case "dub_lobby_fish_sculpture_left_blue": + toy_dubai_fish_sculpture("dub_lobby_fish_sculpture_left_blue","blue",45); + break; + + case "dub_lobby_fish_sculpture_right_blue": + toy_dubai_fish_sculpture("dub_lobby_fish_sculpture_right_blue","blue",45); + break; + + case "dub_lobby_fish_sculpture_left_purple": + toy_dubai_fish_sculpture("dub_lobby_fish_sculpture_left_purple","purple",39); + break; + + case "dub_lobby_fish_sculpture_right_purple": + toy_dubai_fish_sculpture("dub_lobby_fish_sculpture_right_purple","purple",39); + break; + + case "vehicle_ac130_80s_sedan1_yel": + vehicle_ac130_80s_sedan1("yel"); + break; + + case "vehicle_bus_destructible": + vehicle_bus_destructible(param_00); + break; + + case "vehicle_80s_sedan1_green": + vehicle_80s_sedan1("green"); + break; + + case "vehicle_80s_sedan1_red": + vehicle_80s_sedan1("red"); + break; + + case "vehicle_80s_sedan1_silv": + vehicle_80s_sedan1("silv"); + break; + + case "vehicle_80s_sedan1_tan": + vehicle_80s_sedan1("tan"); + break; + + case "vehicle_80s_sedan1_yel": + vehicle_80s_sedan1("yel"); + break; + + case "vehicle_80s_sedan1_brn": + vehicle_80s_sedan1("brn"); + break; + + case "vehicle_80s_hatch1_green": + vehicle_80s_hatch1("green"); + break; + + case "vehicle_80s_hatch1_red": + vehicle_80s_hatch1("red"); + break; + + case "vehicle_80s_hatch1_silv": + vehicle_80s_hatch1("silv"); + break; + + case "vehicle_80s_hatch1_tan": + vehicle_80s_hatch1("tan"); + break; + + case "vehicle_80s_hatch1_yel": + vehicle_80s_hatch1("yel"); + break; + + case "vehicle_80s_hatch1_brn": + vehicle_80s_hatch1("brn"); + break; + + case "vehicle_80s_hatch2_green": + vehicle_80s_hatch2("green"); + break; + + case "vehicle_80s_hatch2_red": + vehicle_80s_hatch2("red"); + break; + + case "vehicle_80s_hatch2_silv": + vehicle_80s_hatch2("silv"); + break; + + case "vehicle_80s_hatch2_tan": + vehicle_80s_hatch2("tan"); + break; + + case "vehicle_80s_hatch2_yel": + vehicle_80s_hatch2("yel"); + break; + + case "vehicle_80s_hatch2_brn": + vehicle_80s_hatch2("brn"); + break; + + case "vehicle_80s_wagon1_green": + vehicle_80s_wagon1("green"); + break; + + case "vehicle_80s_wagon1_red": + vehicle_80s_wagon1("red"); + break; + + case "vehicle_80s_wagon1_silv": + vehicle_80s_wagon1("silv"); + break; + + case "vehicle_80s_wagon1_tan": + vehicle_80s_wagon1("tan"); + break; + + case "vehicle_80s_wagon1_yel": + vehicle_80s_wagon1("yel"); + break; + + case "vehicle_80s_wagon1_brn": + vehicle_80s_wagon1("brn"); + break; + + case "vehicle_civ_car_a_1": + vehicle_civ_car_a(1); + break; + + case "vehicle_civ_car_a_2": + vehicle_civ_car_a(2); + break; + + case "vehicle_civ_car_a_3": + vehicle_civ_car_a(3); + break; + + case "vehicle_civ_car_a_4": + vehicle_civ_car_a(4); + break; + + case "vehicle_civ_car_a_5": + vehicle_civ_car_a(5); + break; + + case "vehicle_civ_car_a_6": + vehicle_civ_car_a(6); + break; + + case "vehicle_civ_car_a_7": + vehicle_civ_car_a(7); + break; + + case "vehicle_civ_car_a_8": + vehicle_civ_car_a(8); + break; + + case "vehicle_civ_car_a_9": + vehicle_civ_car_a(9); + break; + + case "vehicle_civ_car_a_10": + vehicle_civ_car_a(10); + break; + + case "vehicle_civ_car_a_11": + vehicle_civ_car_a(11); + break; + + case "vehicle_civ_car_a_12": + vehicle_civ_car_a(12); + break; + + case "vehicle_civ_car_a_13": + vehicle_civ_car_a(13); + break; + + case "vehicle_small_hatch_blue": + vehicle_small_hatch("blue"); + break; + + case "vehicle_london_cab_black": + vehicle_london_cab_black(); + break; + + case "vehicle_small_hatch_green": + vehicle_small_hatch("green"); + break; + + case "vehicle_small_hatch_turq": + vehicle_small_hatch("turq"); + break; + + case "vehicle_small_hatch_white": + vehicle_small_hatch("white"); + break; + + case "vehicle_pickup": + vehicle_pickup(param_00); + break; + + case "vehicle_hummer": + vehicle_hummer(param_00); + break; + + case "vehicle_gaz": + vehicle_t72(param_00); + break; + + case "vehicle_gaz_harbor": + vehicle_btr(param_00); + break; + + case "vehicle_moving_truck_thai": + case "vehicle_moving_truck": + vehicle_gaz_harbor(param_00); + break; + + case "vehicle_subway_cart": + vehicle_bm21(param_00); + break; + + case "vehicle_subway_cart_windows": + vehicle_subway_cart(param_00); + break; + + case "vehicle_subway_cart_windows_small": + create_vehicle_subway_cart_window_single(param_00); + break; + + case "vehicle_bm21_mobile_bed": + vehicle_gaz(param_00,"vehicle_bm21_mobile_bed_dstry"); + break; + + case "vehicle_bm21_cover": + vehicle_gaz(param_00,"vehicle_bm21_mobile_cover_dstry"); + break; + + case "vehicle_luxurysedan_2008": + vehicle_subway_cart_windows(""); + break; + + case "vehicle_luxurysedan_2008_gray": + vehicle_subway_cart_windows("_gray"); + break; + + case "vehicle_luxurysedan_2008_white": + vehicle_subway_cart_windows("_white"); + break; + + case "vehicle_uk_truck": + vehicle_coupe(param_00); + break; + + case "vehicle_uk_police_estate": + vehicle_mini(param_00); + break; + + case "vehicle_uaz_winter": + vehicle_uk_truck(param_00); + break; + + case "vehicle_uaz_fabric": + vehicle_uk_police_estate(param_00); + break; + + case "vehicle_uaz_hardtop": + vehicle_uaz_winter(param_00); + break; + + case "vehicle_uaz_open": + vehicle_jeep(param_00); + break; + + case "vehicle_india_suv_w": + vehicle_india_rickshaw("w"); + break; + + case "vehicle_india_suv_b": + vehicle_india_rickshaw("b"); + break; + + case "vehicle_india_compact_destructible_gray": + vehicle_jeep_dusty("gray"); + break; + + case "vehicle_india_compact_destructible_red": + vehicle_jeep_dusty("red"); + break; + + case "vehicle_india_compact_destructible_brown": + vehicle_jeep_dusty("brown"); + break; + + case "vehicle_india_compact_destructible_blue": + vehicle_jeep_dusty("blue"); + break; + + case "vehicle_tuk_tuk": + vehicle_india_compact_destructible(param_00); + break; + + case "vehicle_india_rickshaw": + vehicle_uaz_open(param_00); + break; + + case "vehicle_policecar": + vehicle_tuk_tuk(param_00); + break; + + case "vehicle_policecar_russia": + vehicle_india_suv(param_00); + break; + + case "vehicle_taxi": + vehicle_policecar(param_00); + break; + + case "vehicle_taxi_dubai": + vehicle_policecar_russia(param_00); + break; + + case "vehicle_mig29_landed": + vehicle_subway_cart_windows_small(param_00); + break; + + case "vehicle_mack_truck_short_snow": + vehicle_luxurysedan("snow"); + break; + + case "vehicle_mack_truck_short_green": + vehicle_luxurysedan("green"); + break; + + case "vehicle_mack_truck_short_white": + vehicle_luxurysedan("white"); + break; + + case "vehicle_motorcycle_01": + vehicle_mack_truck_short("01"); + break; + + case "vehicle_motorcycle_02": + vehicle_mack_truck_short("02"); + break; + + case "vehicle_scooter_vespa": + vehicle_semi_truck("vehicle_scooter_vespa"); + break; + + case "vehicle_subcompact_black": + vehicle_motorcycle("black"); + break; + + case "vehicle_subcompact_blue": + vehicle_motorcycle("blue"); + break; + + case "vehicle_subcompact_dark_gray": + vehicle_motorcycle("dark_gray"); + break; + + case "vehicle_subcompact_deep_blue": + vehicle_motorcycle("deep_blue"); + break; + + case "vehicle_subcompact_gold": + vehicle_motorcycle("gold"); + break; + + case "vehicle_subcompact_gray": + vehicle_motorcycle("gray"); + break; + + case "vehicle_subcompact_green": + vehicle_motorcycle("green"); + break; + + case "vehicle_subcompact_mica": + vehicle_motorcycle("mica"); + break; + + case "vehicle_subcompact_slate": + vehicle_motorcycle("slate"); + break; + + case "vehicle_subcompact_tan": + vehicle_motorcycle("tan"); + break; + + case "vehicle_subcompact_white": + vehicle_motorcycle("white"); + break; + + case "vehicle_coupe_black": + get_precached_anim("black"); + break; + + case "vehicle_coupe_blue": + get_precached_anim("blue"); + break; + + case "vehicle_coupe_dark_gray": + get_precached_anim("dark_gray"); + break; + + case "vehicle_coupe_deep_blue": + get_precached_anim("deep_blue"); + break; + + case "vehicle_coupe_gold": + get_precached_anim("gold"); + break; + + case "vehicle_coupe_gray": + get_precached_anim("gray"); + break; + + case "vehicle_coupe_green": + get_precached_anim("green"); + break; + + case "vehicle_coupe_mica": + get_precached_anim("mica"); + break; + + case "vehicle_coupe_slate": + get_precached_anim("slate"); + break; + + case "vehicle_coupe_tan": + get_precached_anim("tan"); + break; + + case "vehicle_coupe_white": + get_precached_anim("white"); + break; + + case "vehicle_van_black": + vehicle_scooter("black"); + break; + + case "vehicle_van_blue": + vehicle_scooter("blue"); + break; + + case "vehicle_van_dark_gray": + vehicle_scooter("dark_gray"); + break; + + case "vehicle_van_deep_blue": + vehicle_scooter("deep_blue"); + break; + + case "vehicle_van_gold": + vehicle_scooter("gold"); + break; + + case "vehicle_van_gray": + vehicle_scooter("gray"); + break; + + case "vehicle_van_green": + vehicle_scooter("green"); + break; + + case "vehicle_van_mica": + vehicle_scooter("mica"); + break; + + case "vehicle_van_slate": + vehicle_scooter("slate"); + break; + + case "vehicle_van_tan": + vehicle_scooter("tan"); + break; + + case "vehicle_van_white": + vehicle_scooter("white"); + break; + + case "vehicle_suburban": + vehicle_van_iw5(param_00,""); + break; + + case "vehicle_suburban_beige": + vehicle_van_iw5(param_00,"_beige"); + break; + + case "vehicle_suburban_dull": + vehicle_van_iw5(param_00,"_dull"); + break; + + case "vehicle_suburban_red": + vehicle_van_iw5(param_00,"_red"); + break; + + case "vehicle_snowmobile": + vehicle_delivery_theme_park_truck_destructible(param_00); + break; + + case "destructible_gaspump": + vehicle_suburban(param_00); + break; + + case "destructible_electrical_transformer_large": + vehicle_snowmobile(param_00); + break; + + case "toy_new_dlc_destructible": + toy_glass("120x110"); + break; + + case "toy_security_camera": + vehicle_taxi(param_00); + break; + + case "toy_building_collapse_paris_ac130": + vehicle_taxi_dubai(param_00); + break; + + case "toy_poison_gas_attack": + toy_security_camera(param_00); + break; + + case "toy_arcade_machine_1": + toy_building_collapse_paris_ac130("_1"); + break; + + case "toy_arcade_machine_2": + toy_building_collapse_paris_ac130("_2"); + break; + + case "toy_pinball_machine_1": + toy_poison_gas_attack("_1"); + break; + + case "toy_pinball_machine_2": + toy_poison_gas_attack("_2"); + break; + + case "toy_fortune_machine": + toy_arcade_machine(param_00); + break; + + case "toy_trashcan_clown": + toy_pinball_machine(param_00); + break; + + case "toy_afrShanty1": + toy_fortune_machine(param_00); + break; + + case "vehicle_slava_ny_harbor_zonea": + toy_trashcan_clown(param_00); + break; + + case "rooftop_skylight_destructible": + toy_afrshanty1(param_00); + break; + + case "satellite_dish_big_destructible": + vehicle_slava_ny_harbor_zonea(param_00); + break; + + case "berlin_hotel_lights_ceiling1": + dest_onestate(param_00,"berlin_hotel_lights_ceiling1_destroyed"); + break; + + case "berlin_hotel_lights_ceiling1_off": + dest_onestate(param_00,"berlin_hotel_lights_ceiling1_destroyed"); + break; + + case "berlin_hotel_lights_wall1": + rooftop_skylight_destructible(param_00,"berlin_hotel_lights_wall1_destroyed","misc/light_blowout_wall2_runner"); + break; + + case "berlin_hotel_lights_wall1_off": + rooftop_skylight_destructible(param_00,"berlin_hotel_lights_wall1_destroyed","misc/light_blowout_wall2_runner"); + break; + + case "berlin_hotel_lights_wall2": + rooftop_skylight_destructible(param_00,"berlin_hotel_lights_wall2_destroyed","misc/light_blowout_wall_runner"); + break; + + case "berlin_hotel_lights_wall2_off": + rooftop_skylight_destructible(param_00,"berlin_hotel_lights_wall2_destroyed","misc/light_blowout_wall_runner"); + break; + + case "pb_cubical_planter": + satellite_dish_big_destructible(param_00,"pb_cubical_planter_dam","explosions/brick_chunk"); + break; + + case "vehicle_delivery_theme_park_truck_destructible": + vehicle_uaz_van(param_00); + break; + + case "vehicle_van_sas_dark_destructable": + vehicle_van("vehicle_van_sas_dark"); + break; + + case "vehicle_uk_police_van_destructable": + vehicle_van("vehicle_uk_police_van"); + break; + + case "vehicle_jeep_dusty": + vehicle_uaz_hardtop(param_00); + break; + + default: + break; + } + + var_01 = getinfoindex(param_00); + return var_01; +} + +//Function Number: 2 +getinfoindex(param_00) +{ + if(!isdefined(level.destructible_type)) + { + return -1; + } + + if(level.destructible_type.size == 0) + { + return -1; + } + + for(var_01 = 0;var_01 < level.destructible_type.size;var_01++) + { + if(param_00 == level.destructible_type[var_01].v["type"]) + { + return var_01; + } + } + + return -1; +} + +//Function Number: 3 +prop_ac_prs_enm_barge_a_1() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_barge_a_1","tag_origin",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("tag_origin","ac_prs_enm_barge_a_1_dam_animated",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_anim(destructible_gaspump("paris_ac130_barge_sink"),destructible_electrical_transformer_large("paris_ac130_barge_sink"),"setanim"); + common_scripts\_destructible::destructible_fx(undefined,"impacts/105mm_water_impact_fast",0); + common_scripts\_destructible::destructible_explode(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 4 +prop_ac_prs_enm_barge_a_2() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_barge_a_2","tag_origin",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("tag_origin","ac_prs_enm_barge_a_2_dam_animated",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_anim(destructible_gaspump("paris_ac130_barge_sink"),destructible_electrical_transformer_large("paris_ac130_barge_sink"),"setanim"); + common_scripts\_destructible::destructible_fx(undefined,"impacts/105mm_water_impact_fast",0); + common_scripts\_destructible::destructible_explode(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 5 +prop_ac_prs_enm_con_digger_a() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_con_digger_a","ac_prs_enm_con_digger_a_lod_0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_enm_con_digger_a_dam_lod0","ac_prs_enm_con_digger_a_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/building_explosion_paris_ac130",0); + common_scripts\_destructible::destructible_explode(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 6 +prop_ac_prs_enm_con_dump_truck_a() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_con_dump_truck_a","ac_prs_enm_con_dump_truck_a_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_enm_con_dump_truck_a_destroyed_lod0","ac_prs_enm_con_dump_truck_a_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/building_explosion_paris_ac130",0); + common_scripts\_destructible::destructible_explode(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 7 +prop_ac_prs_enm_fuel_tank_a() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_fuel_tank_a","ac_prs_enm_fuel_tank_a_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_enm_fuel_tank_a_dam_lod0","ac_prs_enm_fuel_tank_a_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/fuel_storage",0); + common_scripts\_destructible::destructible_explode(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 8 +prop_ac_prs_enm_hanger_a() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_hanger_a","ac_prs_enm_hanger_a_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_enm_hanger_a_dam_lod0","ac_prs_enm_hanger_a_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/building_explosion_paris_ac130",0); +} + +//Function Number: 9 +prop_ac_prs_enm_maz_a() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_maz_a","ac_prs_enm_maz_a",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_enm_maz_a_dam3","ac_prs_enm_maz_a_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/building_explosion_paris_ac130",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_flir_debris_explosion_a",0); + common_scripts\_destructible::destructible_explode(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 10 +prop_ac_prs_enm_mi26_halo_a() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_mi26_halo_a","ac_prs_enm_mi26_halo_a_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("polySurface80","ac_prs_enm_mi26_halo_a_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/helicopter_explosion_mi26_halo",0); + common_scripts\_destructible::destructible_explode(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 11 +prop_ac_prs_enm_mstas_a() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_mstas_a","ac_prs_enm_mstas_a_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_enm_mstas_a_dam_lod0","ac_prs_enm_mstas_a_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_flir_debris_explosion_a",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_debris_explosion_fire_a",0); + common_scripts\_destructible::destructible_explode(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 12 +prop_ac_prs_enm_radar_maz_a() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_radar_maz_a","tag_origin",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("tag_origin","ac_prs_enm_radar_maz_a",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_anim(destructible_gaspump("ac130_radartower_crash"),destructible_electrical_transformer_large("ac130_radartower_crash"),"setanim"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/building_explosion_paris_ac130",0); + common_scripts\_destructible::destructible_explode(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 13 +prop_ac_prs_enm_s300v_a() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_s300v_a","ac_prs_enm_s300v",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_enm_s300v_dam","ac_prs_enm_s300v_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/vehicle_explosion_sam",0); + common_scripts\_destructible::destructible_explode(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 14 +prop_ac_prs_enm_storage_bld_a_1() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_storage_bld_a_1","p_ac_prs_enm_storage_bld_a_1",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("p_ac_prs_enm_storage_bld_a_1_dam","ac_prs_enm_storage_bld_a_1_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/building_explosion_paris_ac130",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_flir_debris_explosion_a",0); +} + +//Function Number: 15 +prop_ac_prs_enm_storage_bld_a_2() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_storage_bld_a_2","p_ac_prs_enm_storage_bld_a_2",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("p_ac_prs_enm_storage_bld_a_2_dam","ac_prs_enm_storage_bld_a_2_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/building_explosion_paris_ac130",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_flir_debris_explosion_a",0); +} + +//Function Number: 16 +prop_ac_prs_enm_storage_bld_b() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_storage_bld_b","p_ac_prs_enm_storage_bld_b",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("p_ac_prs_enm_storage_bld_b_dam","ac_prs_enm_storage_bld_b_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/building_explosion_paris_ac130",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_flir_debris_explosion_max_a",0); +} + +//Function Number: 17 +prop_ac_prs_enm_tent_a() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_tent_a","ac_prs_enm_tent_a_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("polySurface1","ac_prs_enm_tent_a_dam1",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/tent_collapse",0); +} + +//Function Number: 18 +prop_ac_prs_enm_tent_b() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_tent_b","ac_prs_enm_tent_b_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_enm_tent_b_lod1","ac_prs_enm_tent_b_dam1",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/tent_collapse",0); +} + +//Function Number: 19 +prop_ac_prs_enm_tent_c() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_tent_c","ac_prs_enm_tent_c_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_enm_tent_c_lod1","ac_prs_enm_tent_c_dam1",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/tent_collapse",0); +} + +//Function Number: 20 +prop_ac_prs_enm_truck_a() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_truck_a","ac_prs_enm_truck_a_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_enm_truck_a_dam_lod0","ac_prs_enm_truck_a_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/building_explosion_paris_ac130",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_flir_debris_explosion_a",0); + common_scripts\_destructible::destructible_explode(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 21 +prop_ac_prs_enm_cargo_crate_a_1() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_cargo_crate_a_1","ac_prs_enm_cargo_crate_a_1_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_enm_cargo_crate_a_1_lod0","ac_prs_enm_cargo_crate_a_1_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/building_explosion_paris_ac130",0); + common_scripts\_destructible::destructible_explode(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 22 +prop_ac_prs_enm_cargo_crate_a_2() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_cargo_crate_a_2","ac_prs_enm_cargo_crate_a_2_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_enm_cargo_crate_a_2_lod0","ac_prs_enm_cargo_crate_a_2_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/building_explosion_paris_ac130",0); + common_scripts\_destructible::destructible_explode(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 23 +prop_ac_prs_enm_crates_a_1() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_crates_a_1","ac_prs_enm_crates_a_1_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_enm_crates_a_1_dam_lod0","ac_prs_enm_crates_a_1_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_enm_crates_a_explosion_1",0); +} + +//Function Number: 24 +prop_ac_prs_enm_crates_a_2() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_crates_a_2","ac_prs_enm_crates_a_2_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_enm_crates_a_2_dam_lod0","ac_prs_enm_crates_a_2_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_enm_crates_a_explosion_1",0); +} + +//Function Number: 25 +prop_ac_prs_enm_crates_b_1() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_crates_b_1","ac_prs_enm_crates_b_1_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_enm_crates_b_1_dam_lod0","ac_prs_enm_crates_b_1_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_enm_crates_b_explosion_1",0); +} + +//Function Number: 26 +prop_ac_prs_enm_crates_b_2() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_crates_b_2","ac_prs_enm_crates_b_2_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_enm_crates_b_2_dam_lod0","ac_prs_enm_crates_b_2_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_enm_crates_b_explosion_1",0); +} + +//Function Number: 27 +prop_ac_prs_enm_mobile_crane_a() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_mobile_crane_a","ac_prs_enm_mobile_crane_a_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_enm_mobile_crane_a_dam_lod0","ac_prs_enm_mobile_crane_a_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/building_explosion_paris_ac130",0); + common_scripts\_destructible::destructible_explode(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 28 +prop_ac_prs_enm_landing_craft_a() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_landing_craft_a","ac_prs_enm_landing_craft_a_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("tag_origin","ac_prs_enm_landing_craft_a_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/building_explosion_paris_ac130",0); + common_scripts\_destructible::destructible_explode(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 29 +prop_ac_prs_enm_speed_boat_a() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_speed_boat_a","ac_prs_enm_speed_boat_a",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_prp_metal_debris_a_01_lod0","ac_prs_prp_metal_debris_a_01",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/building_explosion_paris_ac130",0); + common_scripts\_destructible::destructible_explode(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 30 +prop_ac_prs_prp_satellite_dish_a_dish() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_prp_satellite_dish_a_dish","ac_prs_prp_satellite_dish_a_dish_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_prp_metal_debris_a_01_lod0","ac_prs_prp_metal_debris_a_01",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_dust_explosion_a",0); + common_scripts\_destructible::destructible_explode(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 31 +prop_ac_prs_fps_hc_extc_balcony_a1() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_fps_hc_extc_balcony_a1","ac_prs_fps_hc_extc_balcony_a_lod0",80,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_fps_hc_extc_balcony_a_dam1_lod0","ac_prs_fps_hc_extc_balcony_a_dam1",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_dust_explosion_a",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fps_extc_balcony_a_explosion_1",0); +} + +//Function Number: 32 +prop_ac_prs_fps_hc_extc_balcony_a2() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_fps_hc_extc_balcony_a2","ac_prs_fps_hc_extc_balcony_a_lod0",80,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_fps_hc_extc_balcony_a_dam2_lod0","ac_prs_fps_hc_extc_balcony_a_dam2",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_dust_explosion_a",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fps_extc_balcony_a_explosion_1",0); +} + +//Function Number: 33 +prop_ac_prs_fps_hc_extc_balcony_a3() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_fps_hc_extc_balcony_a3","ac_prs_fps_hc_extc_balcony_a_lod0",80,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_fps_hc_extc_balcony_a_dam3_lod0","ac_prs_fps_hc_extc_balcony_a_dam3",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_dust_explosion_a",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fps_extc_balcony_a_explosion_1",0); +} + +//Function Number: 34 +prop_ac_prs_fps_hc_extc_balcony_b1() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_fps_hc_extc_balcony_b1","ac_prs_fps_hc_extc_balcony_b_lod0",80,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_fps_hc_extc_balcony_b_dam1_lod0","ac_prs_fps_hc_extc_balcony_b_dam1",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_dust_explosion_a",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fps_extc_balcony_b_explosion_1",0); +} + +//Function Number: 35 +prop_ac_prs_fps_hc_extc_balcony_b2() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_fps_hc_extc_balcony_b2","ac_prs_fps_hc_extc_balcony_b_lod0",80,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_fps_hc_extc_balcony_b_dam2_lod0","ac_prs_fps_hc_extc_balcony_b_dam2",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_dust_explosion_a",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fps_extc_balcony_b_explosion_1",0); +} + +//Function Number: 36 +prop_ac_prs_fps_hc_extc_balcony_b3() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_fps_hc_extc_balcony_b3","ac_prs_fps_hc_extc_balcony_b_lod0",80,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_fps_hc_extc_balcony_b_dam3_lod0","ac_prs_fps_hc_extc_balcony_b_dam3",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_dust_explosion_a",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fps_extc_balcony_b_explosion_1",0); +} + +//Function Number: 37 +prop_ac_prs_fps_hc_extc_balcony_c1() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_fps_hc_extc_balcony_c1","ac_prs_fps_hc_extc_balcony_c_lod0",80,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_fps_hc_extc_balcony_c_dam1_lod0","ac_prs_fps_hc_extc_balcony_c_dam1",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_dust_explosion_a",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fps_extc_balcony_c_explosion_1",0); +} + +//Function Number: 38 +prop_ac_prs_fps_hc_extc_balcony_c2() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_fps_hc_extc_balcony_c2","ac_prs_fps_hc_extc_balcony_c_lod0",80,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_fps_hc_extc_balcony_c_dam2_lod0","ac_prs_fps_hc_extc_balcony_c_dam2",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_dust_explosion_a",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fps_extc_balcony_c_explosion_2",0); +} + +//Function Number: 39 +prop_ac_prs_fps_hc_extc_column_b_a1() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_fps_hc_extc_column_b_a1","ac_prs_fps_hc_extc_column_b_a_lod0",80,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_fps_hc_extc_column_b_a_dam1_lod0","ac_prs_fps_hc_extc_column_b_a_dam1",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_dust_explosion_a",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fps_extc_balcony_c_explosion_2",0); +} + +//Function Number: 40 +prop_ac_prs_fps_hc_extc_column_b_a2() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_fps_hc_extc_column_b_a2","ac_prs_fps_hc_extc_column_b_a_lod0",80,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_fps_hc_extc_column_b_a_dam2_lod0","ac_prs_fps_hc_extc_column_b_a_dam2",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_dust_explosion_a",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fps_extc_balcony_c_explosion_2",0); +} + +//Function Number: 41 +prop_ac_prs_fps_hc_extc_column_b_a3() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_fps_hc_extc_column_b_a3","ac_prs_fps_hc_extc_column_b_a_lod0",80,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_fps_hc_extc_column_b_a_dam3_lod0","ac_prs_fps_hc_extc_column_b_a_dam3",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_dust_explosion_a",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fps_extc_balcony_c_explosion_2",0); +} + +//Function Number: 42 +prop_ac_prs_fps_hc_extc_column_t_a1() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_fps_hc_extc_column_t_a1","ac_prs_fps_hc_extc_column_t_a_lod0",80,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_fps_hc_extc_column_t_a_dam1_lod0","ac_prs_fps_hc_extc_column_t_a_dam1",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_dust_explosion_a",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fps_extc_balcony_c_explosion_2",0); +} + +//Function Number: 43 +prop_ac_prs_fps_hc_extc_column_t_a2() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_fps_hc_extc_column_t_a2","ac_prs_fps_hc_extc_column_t_a_lod0",80,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_fps_hc_extc_column_t_a_dam2_lod0","ac_prs_fps_hc_extc_column_t_a_dam2",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_dust_explosion_a",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fps_extc_balcony_c_explosion_2",0); +} + +//Function Number: 44 +prop_ac_prs_fps_hc_extc_column_t_a3() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_fps_hc_extc_column_t_a3","ac_prs_fps_hc_extc_column_t_a_lod0",80,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_fps_hc_extc_column_t_a_dam3_lod0","ac_prs_fps_hc_extc_column_t_a_dam3",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_dust_explosion_a",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fps_extc_balcony_c_explosion_2",0); +} + +//Function Number: 45 +prop_ac_prs_enm_missile_boat_a() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_missile_boat_a","tag_origin",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("tag_origin","ac_prs_enm_missile_boat_a",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_anim(destructible_gaspump("paris_ac130_ship_sink"),destructible_electrical_transformer_large("paris_ac130_ship_sink"),"setanim"); + common_scripts\_destructible::destructible_fx(undefined,"impacts/105mm_water_impact_fast",0); + common_scripts\_destructible::destructible_explode(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 46 +toy_glass(param_00) +{ + common_scripts\_destructible::destructible_create("toy_glass" + param_00,"tag_origin",50); + common_scripts\_destructible::destructible_splash_damage_scaler(5); + common_scripts\_destructible::destructible_sound("building_glass_shatter"); + var_01 = "tag_glass"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/highrise_glass_" + param_00); + common_scripts\_destructible::destructible_sound("building_glass_blowout"); + common_scripts\_destructible::destructible_state(var_01 + "_des",undefined,100,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/highrise_glass_" + param_00 + "_edge"); + common_scripts\_destructible::destructible_sound("building_glass_blowout"); + common_scripts\_destructible::destructible_state(undefined); +} + +//Function Number: 47 +toy_dt_mirror(param_00) +{ + common_scripts\_destructible::destructible_create("toy_dt_mirror" + param_00,"tag_origin",150,undefined,32); + common_scripts\_destructible::destructible_splash_damage_scaler(5); + common_scripts\_destructible::destructible_fx("tag_fx","props/mirror_shatter" + param_00); + common_scripts\_destructible::destructible_sound("mirror_shatter"); + common_scripts\_destructible::destructible_state("tag_origin","dt_mirror" + param_00 + "_dam",150,undefined); + common_scripts\_destructible::destructible_fx("tag_fx","props/mirror_dt_panel" + param_00 + "_broken"); + common_scripts\_destructible::destructible_explode(1000,2000,32,32,32,48,undefined,0); + common_scripts\_destructible::destructible_state("tag_origin","dt_mirror" + param_00 + "_des",150,undefined); +} + +//Function Number: 48 +toy_icbm_consolemonitor(param_00) +{ + common_scripts\_destructible::destructible_create("toy_icbm_consolemonitor" + param_00,"television2_lod04",1,undefined,32); + common_scripts\_destructible::destructible_splash_damage_scaler(1); + common_scripts\_destructible::destructible_fx("television2_lod04","explosions/tv_explosion"); + common_scripts\_destructible::destructible_sound("tv_shot_burst","television2_lod04"); + common_scripts\_destructible::destructible_explode(20,2000,9,9,3,3,undefined,12); + common_scripts\_destructible::destructible_state("television2_lod04","hjk_icbm_consolemonitor7",undefined,undefined,"no_melee"); +} + +//Function Number: 49 +toy_tubetv_(param_00) +{ + common_scripts\_destructible::destructible_create("toy_tubetv_" + param_00,"tag_origin",1,undefined,32); + common_scripts\_destructible::destructible_splash_damage_scaler(1); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/tv_explosion"); + common_scripts\_destructible::destructible_sound("tv_shot_burst"); + common_scripts\_destructible::destructible_explode(20,2000,9,9,3,3,undefined,12); + common_scripts\_destructible::destructible_state(undefined,"com_" + param_00 + "_d",undefined,undefined,"no_melee"); +} + +//Function Number: 50 +toy_tvs_flatscreen(param_00,param_01) +{ + common_scripts\_destructible::destructible_create("toy_tv_flatscreen_" + param_01 + param_00,"tag_origin",1,undefined,32); + common_scripts\_destructible::destructible_splash_damage_scaler(1); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/tv_flatscreen_explosion"); + common_scripts\_destructible::destructible_sound("tv_shot_burst"); + common_scripts\_destructible::destructible_explode(20,2000,10,10,3,3,undefined,15); + common_scripts\_destructible::destructible_state(undefined,"ma_flatscreen_tv_" + param_01 + "broken_" + param_00,200,undefined,"no_melee"); +} + +//Function Number: 51 +toy_tvs_flatscreen_sturdy(param_00,param_01) +{ + common_scripts\_destructible::destructible_create("toy_tv_flatscreen_" + param_01 + param_00 + "_sturdy","tag_origin",1,undefined,1280); + common_scripts\_destructible::destructible_splash_damage_scaler(0.5); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/tv_flatscreen_explosion_cheap"); + common_scripts\_destructible::destructible_sound("tv_shot_burst"); + common_scripts\_destructible::destructible_explode(20,2000,10,10,3,3,undefined,15); + common_scripts\_destructible::destructible_state(undefined,"ma_flatscreen_tv_" + param_01 + "broken_" + param_00,200,undefined,"no_melee"); +} + +//Function Number: 52 +toy_transformer_ratnest01(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",75,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(15); + common_scripts\_destructible::destructible_loopfx("tag_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,75,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,150,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_sparks","explosions/transformer_spark_runner",0.5); + common_scripts\_destructible::destructible_loopsound("transformer_spark_loop"); + common_scripts\_destructible::destructible_healthdrain(24,0.2); + common_scripts\_destructible::destructible_state(undefined,undefined,250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_sparks","explosions/transformer_spark_runner",0.5); + common_scripts\_destructible::destructible_loopfx("tag_fx","fire/transformer_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("transformer01_flareup_med"); + common_scripts\_destructible::destructible_loopsound("transformer_spark_loop"); + common_scripts\_destructible::destructible_healthdrain(24,0.2,150,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,5,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/transformer_explosion",0); + common_scripts\_destructible::destructible_fx("tag_fx","fire/firelp_small_pm"); + common_scripts\_destructible::destructible_sound("transformer01_explode"); + common_scripts\_destructible::destructible_explode(7000,8000,150,256,16,100,undefined,0); + common_scripts\_destructible::destructible_state(undefined,"utility_transformer_ratnest01_dest",undefined,undefined,"no_melee"); +} + +//Function Number: 53 +toy_transformer_small01(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",75,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(15); + common_scripts\_destructible::destructible_loopfx("tag_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,75,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,150,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_fx","explosions/transformer_spark_runner",0.5); + common_scripts\_destructible::destructible_loopsound("transformer_spark_loop"); + common_scripts\_destructible::destructible_healthdrain(24,0.2); + common_scripts\_destructible::destructible_state(undefined,undefined,250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_fx","explosions/transformer_spark_runner",0.5); + common_scripts\_destructible::destructible_loopfx("tag_fx","fire/transformer_small_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("transformer01_flareup_med"); + common_scripts\_destructible::destructible_loopsound("transformer_spark_loop"); + common_scripts\_destructible::destructible_healthdrain(24,0.2,150,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,5,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/transformer_explosion",0); + common_scripts\_destructible::destructible_fx("tag_fx","fire/firelp_small_pm"); + common_scripts\_destructible::destructible_sound("transformer01_explode"); + common_scripts\_destructible::destructible_explode(7000,8000,150,256,16,100,undefined,0); + common_scripts\_destructible::destructible_state(undefined,"utility_transformer_small01_dest",undefined,undefined,"no_melee"); +} + +//Function Number: 54 +toy_generator(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_bounce",75,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(15); + common_scripts\_destructible::destructible_loopfx("tag_fx2","smoke/generator_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,75,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_fx2","smoke/generator_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_fx2","smoke/generator_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_loopfx("tag_fx4","explosions/generator_spark_runner",0.9); + common_scripts\_destructible::destructible_loopfx("tag_fx3","explosions/generator_spark_runner",0.6123); + common_scripts\_destructible::destructible_loopsound("generator_spark_loop"); + common_scripts\_destructible::destructible_healthdrain(24,0.2,64,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,5,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/generator_explosion",1); + common_scripts\_destructible::destructible_fx("tag_fx","fire/generator_des_fire",1); + common_scripts\_destructible::destructible_sound("generator01_explode"); + common_scripts\_destructible::destructible_explode(7000,8000,128,128,16,50,undefined,0); + common_scripts\_destructible::destructible_anim(destructible_gaspump("enerator_explode"),#animtree,"setanimknob",undefined,undefined,"generator_explode"); + common_scripts\_destructible::destructible_state(undefined,"machinery_generator_des",undefined,undefined,"no_melee"); +} + +//Function Number: 55 +toy_generator_on(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_bounce",0,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(15); + common_scripts\_destructible::destructible_loopfx("tag_fx2","smoke/generator_exhaust",0.4); + common_scripts\_destructible::destructible_anim(destructible_gaspump("enerator_vibration"),#animtree,"setanimknob",undefined,undefined,"generator_vibration"); + common_scripts\_destructible::destructible_loopsound("generator_running"); + common_scripts\_destructible::destructible_state("tag_origin","machinery_generator",150); + common_scripts\_destructible::destructible_loopfx("tag_fx2","smoke/generator_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_loopsound("generator_running"); + common_scripts\_destructible::destructible_state(undefined,undefined,75,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_fx2","smoke/generator_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_loopsound("generator_damage_loop"); + common_scripts\_destructible::destructible_state(undefined,undefined,250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_fx2","smoke/generator_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_loopfx("tag_fx4","explosions/generator_spark_runner",0.9); + common_scripts\_destructible::destructible_loopfx("tag_fx3","explosions/generator_spark_runner",0.6123); + common_scripts\_destructible::destructible_loopsound("generator_spark_loop"); + common_scripts\_destructible::destructible_loopsound("generator_damage_loop"); + common_scripts\_destructible::destructible_healthdrain(24,0.2,64,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,5,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/generator_explosion",0); + common_scripts\_destructible::destructible_fx("tag_fx","fire/generator_des_fire"); + common_scripts\_destructible::destructible_sound("generator01_explode"); + common_scripts\_destructible::destructible_explode(7000,8000,128,128,16,50,undefined,0); + common_scripts\_destructible::destructible_anim(destructible_gaspump("enerator_explode"),#animtree,"setanimknob",undefined,0,"generator_explode"); + common_scripts\_destructible::destructible_anim(destructible_gaspump("enerator_explode_02"),#animtree,"setanimknob",undefined,0,"generator_explode_02"); + common_scripts\_destructible::destructible_anim(destructible_gaspump("enerator_explode_03"),#animtree,"setanimknob",undefined,0,"generator_explode_03"); + common_scripts\_destructible::destructible_state(undefined,"machinery_generator_des",undefined,undefined,"no_melee"); +} + +//Function Number: 56 +toy_oxygen_tank(param_00) +{ + common_scripts\_destructible::destructible_create("toy_oxygen_tank_" + param_00,"tag_origin",150,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,64,"allies"); + common_scripts\_destructible::destructible_loopsound("oxygen_tank_leak_loop"); + common_scripts\_destructible::destructible_fx("tag_cap","props/oxygen_tank" + param_00 + "_cap"); + common_scripts\_destructible::destructible_loopfx("tag_cap","distortion/oxygen_tank_leak",0.4); + common_scripts\_destructible::destructible_state(undefined,"machinery_oxygen_tank" + param_00 + "_dam",300,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/oxygen_tank" + param_00 + "_explosion",0); + common_scripts\_destructible::destructible_sound("oxygen_tank_explode"); + common_scripts\_destructible::destructible_explode(7000,8000,150,256,16,150,undefined,32); + common_scripts\_destructible::destructible_state(undefined,"machinery_oxygen_tank" + param_00 + "_des",undefined,undefined,"no_melee"); +} + +//Function Number: 57 +toy_electricbox2(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",150,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(15); + common_scripts\_destructible::destructible_fx("tag_fx","props/electricbox4_explode",undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_sound("exp_fusebox_sparks"); + common_scripts\_destructible::destructible_explode(1000,2000,32,32,32,48,undefined,0); + common_scripts\_destructible::destructible_state(undefined,"me_electricbox2_dest",undefined,undefined,"no_melee"); + common_scripts\_destructible::destructible_part("tag_fx","me_electricbox2_door",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_door_upper","me_electricbox2_door_upper",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 58 +toy_electricbox4(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",150,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(15); + common_scripts\_destructible::destructible_fx("tag_fx","props/electricbox4_explode",undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_sound("exp_fusebox_sparks"); + common_scripts\_destructible::destructible_explode(20,2000,32,32,32,48,undefined,0); + common_scripts\_destructible::destructible_state(undefined,"me_electricbox4_dest",undefined,undefined,"no_melee"); + common_scripts\_destructible::destructible_part("tag_fx","me_electricbox4_door",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 59 +toy_airconditioner(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",0,undefined,32); + common_scripts\_destructible::destructible_anim(destructible_gaspump("x_airconditioner_fan"),#animtree,"setanimknob",undefined,undefined,"ex_airconditioner_fan"); + common_scripts\_destructible::destructible_loopsound("airconditioner_running_loop"); + common_scripts\_destructible::destructible_state("tag_origin","com_ex_airconditioner",300); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/airconditioner_ex_explode",undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_sound("airconditioner_burst"); + common_scripts\_destructible::destructible_explode(1000,2000,32,32,32,48,undefined,0); + common_scripts\_destructible::destructible_state(undefined,"com_ex_airconditioner_dam",undefined,undefined,"no_melee"); + common_scripts\_destructible::destructible_part("tag_fx","com_ex_airconditioner_fan",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 60 +toy_ceiling_fan(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",0,undefined,32); + common_scripts\_destructible::destructible_anim(destructible_gaspump("e_fanceil1_spin"),#animtree,"setanimknob",undefined,undefined,"me_fanceil1_spin"); + common_scripts\_destructible::destructible_state("tag_origin","me_fanceil1",150); + common_scripts\_destructible::destructible_anim(destructible_gaspump("e_fanceil1_spin_stop"),#animtree,"setanimknob",undefined,undefined,"me_fanceil1_spin_stop"); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/ceiling_fan_explosion"); + common_scripts\_destructible::destructible_sound("ceiling_fan_sparks"); + common_scripts\_destructible::destructible_explode(1000,2000,32,32,5,32,undefined,0); + common_scripts\_destructible::destructible_state(undefined,"me_fanceil1_des",undefined,undefined,"no_melee"); + common_scripts\_destructible::destructible_part("tag_fx",undefined,150,undefined,undefined,undefined,1); +} + +//Function Number: 61 +toy_wall_fan(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_swivel",0,undefined,32); + common_scripts\_destructible::destructible_anim(destructible_gaspump("all_fan_rotate"),#animtree,"setanimknob",undefined,undefined,"wall_fan_rotate"); + common_scripts\_destructible::destructible_loopsound("wall_fan_fanning"); + common_scripts\_destructible::destructible_state("tag_wobble","cs_wallfan1",150); + common_scripts\_destructible::destructible_anim(destructible_gaspump("all_fan_stop"),#animtree,"setanimknob",undefined,undefined,"wall_fan_wobble"); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/wallfan_explosion_dmg"); + common_scripts\_destructible::destructible_sound("wall_fan_sparks"); + common_scripts\_destructible::destructible_state("tag_wobble","cs_wallfan1",150,undefined,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/wallfan_explosion_des"); + common_scripts\_destructible::destructible_sound("wall_fan_break"); + common_scripts\_destructible::destructible_state(undefined,"cs_wallfan1_dmg",undefined,undefined,"no_melee"); +} + +//Function Number: 62 +toy_propane_tank02(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",50,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(5); + common_scripts\_destructible::destructible_state(undefined,undefined,350,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("propanetank02_gas_leak_loop"); + common_scripts\_destructible::destructible_loopfx("tag_cap","distortion/propane_cap_distortion",0.1); + common_scripts\_destructible::destructible_state(undefined,undefined,350,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_cap","fire/propane_capfire_leak",0.1); + common_scripts\_destructible::destructible_sound("propanetank02_flareup_med"); + common_scripts\_destructible::destructible_loopsound("propanetank02_fire_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,300,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,150,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_physics("tag_cap",(50,0,0)); + common_scripts\_destructible::destructible_loopfx("tag_cap","fire/propane_capfire",0.6); + common_scripts\_destructible::destructible_fx("tag_valve","fire/propane_valvefire_flareup"); + common_scripts\_destructible::destructible_physics("tag_valve",(50,0,0)); + common_scripts\_destructible::destructible_fx("tag_cap","fire/propane_capfire_flareup"); + common_scripts\_destructible::destructible_loopfx("tag_valve","fire/propane_valvefire",0.1); + common_scripts\_destructible::destructible_sound("propanetank02_flareup2_med"); + common_scripts\_destructible::destructible_loopsound("propanetank02_fire_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,150,undefined,5,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","fire/propane_small_fire"); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/propane_large_exp_fireball"); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/propane_large_exp",0); + common_scripts\_destructible::destructible_sound("propanetank02_explode"); + common_scripts\_destructible::destructible_loopsound("propanetank02_fire_blown_med"); + common_scripts\_destructible::destructible_explode(7000,8000,600,600,32,300); + common_scripts\_destructible::destructible_state(undefined,"com_propane_tank02_DES",undefined,undefined,"no_melee"); + common_scripts\_destructible::destructible_part("tag_valve","com_propane_tank02_valve"); + common_scripts\_destructible::destructible_part("tag_cap","com_propane_tank02_cap"); +} + +//Function Number: 63 +toy_propane_tank02_small(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",50,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(10); + common_scripts\_destructible::destructible_state(undefined,undefined,350,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("propanetank02_gas_leak_loop"); + common_scripts\_destructible::destructible_loopfx("tag_cap","distortion/propane_cap_distortion",0.1); + common_scripts\_destructible::destructible_state(undefined,undefined,350,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_cap","fire/propane_capfire_leak",0.1); + common_scripts\_destructible::destructible_sound("propanetank02_flareup_med"); + common_scripts\_destructible::destructible_loopsound("propanetank02_fire_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_physics("tag_cap",(50,0,0)); + common_scripts\_destructible::destructible_loopfx("tag_cap","fire/propane_capfire",0.6); + common_scripts\_destructible::destructible_fx("tag_valve","fire/propane_valvefire_flareup"); + common_scripts\_destructible::destructible_physics("tag_valve",(50,0,0)); + common_scripts\_destructible::destructible_fx("tag_cap","fire/propane_capfire_flareup"); + common_scripts\_destructible::destructible_loopfx("tag_valve","fire/propane_valvefire",0.1); + common_scripts\_destructible::destructible_sound("propanetank02_flareup_med"); + common_scripts\_destructible::destructible_loopsound("propanetank02_fire_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,5,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","fire/propane_small_fire"); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/propane_large_exp",0); + common_scripts\_destructible::destructible_sound("propanetank02_explode"); + common_scripts\_destructible::destructible_explode(7000,8000,400,400,32,100); + common_scripts\_destructible::destructible_state(undefined,"com_propane_tank02_small_DES",undefined,undefined,"no_melee"); + common_scripts\_destructible::destructible_part("tag_valve","com_propane_tank02_small_valve"); + common_scripts\_destructible::destructible_part("tag_cap","com_propane_tank02_small_cap"); +} + +//Function Number: 64 +toy_copier(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(15); + common_scripts\_destructible::destructible_loopfx("tag_left_feeder","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_left_feeder","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,500,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_fx","props/photocopier_sparks",3); + common_scripts\_destructible::destructible_loopsound("copier_spark_loop"); + common_scripts\_destructible::destructible_healthdrain(12,0.2); + common_scripts\_destructible::destructible_state(undefined,undefined,800,undefined,5,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","props/photocopier_exp",0); + common_scripts\_destructible::destructible_fx("tag_fx","props/photocopier_fire"); + common_scripts\_destructible::destructible_sound("copier_exp"); + common_scripts\_destructible::destructible_loopsound("copier_fire_loop"); + common_scripts\_destructible::destructible_explode(7000,8000,96,96,32,48); + common_scripts\_destructible::destructible_state(undefined,"prop_photocopier_destroyed",undefined,undefined,"no_melee"); + common_scripts\_destructible::destructible_part("tag_left_feeder","prop_photocopier_destroyed_left_feeder",4,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_right_shelf","prop_photocopier_destroyed_right_shelf",4,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_top","prop_photocopier_destroyed_top",4,undefined,undefined,undefined,1,1); +} + +//Function Number: 65 +toy_firehydrant(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(11); + common_scripts\_destructible::destructible_state(undefined,undefined,500,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_cap","props/firehydrant_leak",0.1); + common_scripts\_destructible::destructible_loopsound("firehydrant_spray_loop"); + common_scripts\_destructible::destructible_healthdrain(12,0.2); + common_scripts\_destructible::destructible_state(undefined,undefined,800,undefined,5,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","props/firehydrant_exp",0); + common_scripts\_destructible::destructible_fx("tag_fx","props/firehydrant_spray_10sec",0); + common_scripts\_destructible::destructible_sound("firehydrant_burst"); + common_scripts\_destructible::destructible_explode(17000,18000,96,96,32,48); + common_scripts\_destructible::destructible_state(undefined,"com_firehydrant_dest",undefined,undefined,"no_melee"); + common_scripts\_destructible::destructible_part("tag_fx","com_firehydrant_dam",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_cap","com_firehydrant_cap",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 66 +toy_parkingmeter(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_meter",120); + common_scripts\_destructible::destructible_fx("tag_fx","props/parking_meter_coins",1,common_scripts\_destructible::damage_not("splash")); + common_scripts\_destructible::destructible_fx("tag_fx","props/parking_meter_coins_exploded",1,"splash"); + common_scripts\_destructible::destructible_sound("exp_parking_meter_sweet"); + common_scripts\_destructible::destructible_explode(2800,3000,64,64,0,0,1); + common_scripts\_destructible::destructible_state(undefined,"com_parkingmeter_damaged",20,undefined,undefined,"splash"); + common_scripts\_destructible::destructible_state(undefined,"com_parkingmeter_destroyed",undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_cap","com_parkingmeter_cap",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 67 +toy_mailbox(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",200); + common_scripts\_destructible::destructible_fx("tag_fx","props/mail_box_explode",1); + common_scripts\_destructible::destructible_sound("exp_mailbox_sweet"); + common_scripts\_destructible::destructible_explode(100,2000,64,64,0,0); + common_scripts\_destructible::destructible_state("tag_origin","com_mailbox_dam"); + common_scripts\_destructible::destructible_part("tag_door","com_mailbox_door",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_flag","com_mailbox_flag",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 68 +toy_mailbox2(param_00) +{ + common_scripts\_destructible::destructible_create("toy_mailbox2_" + param_00,"tag_origin",120); + common_scripts\_destructible::destructible_fx("tag_fx","props/mail_box_explode",1,common_scripts\_destructible::damage_not("splash")); + common_scripts\_destructible::destructible_fx("tag_fx","props/mail_box_explode",1,"splash"); + common_scripts\_destructible::destructible_sound("exp_mailbox_sweet"); + common_scripts\_destructible::destructible_explode(2800,3000,64,64,0,0,1); + common_scripts\_destructible::destructible_state(undefined,"mailbox_" + param_00 + "_dam",20,undefined,undefined,"splash"); + common_scripts\_destructible::destructible_state(undefined,"mailbox_black_dest",undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_door","mailbox_" + param_00 + "_door",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_flag","mailbox_black_flag",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 69 +toy_newspaper_stand_red(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",120); + common_scripts\_destructible::destructible_fx("tag_door","props/news_stand_paper_spill",1,common_scripts\_destructible::damage_not("splash")); + common_scripts\_destructible::destructible_sound("exp_newspaper_box"); + common_scripts\_destructible::destructible_explode(2500,2501,64,64,0,0,1); + common_scripts\_destructible::destructible_state(undefined,"com_newspaperbox_red_dam",20,undefined,undefined,"splash"); + common_scripts\_destructible::destructible_fx("tag_fx","props/news_stand_explosion",1,"splash"); + common_scripts\_destructible::destructible_state(undefined,"com_newspaperbox_red_des",undefined,undefined,undefined,undefined,undefined,0); + common_scripts\_destructible::destructible_part("tag_door","com_newspaperbox_red_door",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 70 +toy_newspaper_stand_blue(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",120); + common_scripts\_destructible::destructible_fx("tag_door","props/news_stand_paper_spill_shatter",1,common_scripts\_destructible::damage_not("splash")); + common_scripts\_destructible::destructible_sound("exp_newspaper_box"); + common_scripts\_destructible::destructible_explode(800,2001,64,64,0,0,1); + common_scripts\_destructible::destructible_state(undefined,"com_newspaperbox_blue_dam",20,undefined,undefined,"splash"); + common_scripts\_destructible::destructible_fx("tag_fx","props/news_stand_explosion",1,"splash"); + common_scripts\_destructible::destructible_state(undefined,"com_newspaperbox_blue_des",undefined,undefined,undefined,undefined,undefined,0); + common_scripts\_destructible::destructible_part("tag_door","com_newspaperbox_blue_door",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 71 +toy_filecabinet(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",120); + common_scripts\_destructible::destructible_fx("tag_drawer_lower","props/filecabinet_dam",1,common_scripts\_destructible::damage_not("splash")); + common_scripts\_destructible::destructible_sound("exp_filecabinet"); + common_scripts\_destructible::destructible_state(undefined,"com_filecabinetblackclosed_dam",20,undefined,undefined,"splash"); + common_scripts\_destructible::destructible_fx("tag_drawer_upper","props/filecabinet_des",1,"splash"); + common_scripts\_destructible::destructible_sound("exp_filecabinet"); + common_scripts\_destructible::destructible_physics("tag_drawer_upper",(50,-10,5)); + common_scripts\_destructible::destructible_state(undefined,"com_filecabinetblackclosed_des",undefined,undefined,undefined,undefined,undefined,0); + common_scripts\_destructible::destructible_part("tag_drawer_upper","com_filecabinetblackclosed_drawer",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 72 +toy_trashbin_01(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",120,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","props/garbage_spew_des",1,"splash"); + common_scripts\_destructible::destructible_fx("tag_fx","props/garbage_spew",1,common_scripts\_destructible::damage_not("splash")); + common_scripts\_destructible::destructible_sound("exp_trashcan_sweet"); + common_scripts\_destructible::destructible_explode(1300,1351,1,1,10,20); + common_scripts\_destructible::destructible_state(undefined,"com_trashbin01_dmg",undefined,undefined,undefined,undefined,undefined,0); + common_scripts\_destructible::destructible_part("tag_fx","com_trashbin01_lid",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 73 +toy_trashbin_02(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",120,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","props/garbage_spew_des",1,"splash"); + common_scripts\_destructible::destructible_fx("tag_fx","props/garbage_spew",1,common_scripts\_destructible::damage_not("splash")); + common_scripts\_destructible::destructible_sound("exp_trashcan_sweet"); + common_scripts\_destructible::destructible_explode(600,800,1,1,10,20); + common_scripts\_destructible::destructible_state(undefined,"com_trashbin02_dmg",undefined,undefined,undefined,undefined,undefined,0); + common_scripts\_destructible::destructible_part("tag_fx","com_trashbin02_lid",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 74 +toy_trashbag1(param_00) +{ + common_scripts\_destructible::destructible_create("toy_trashbag1_" + param_00,"tag_origin",120,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","props/trashbag_" + param_00); + common_scripts\_destructible::destructible_state(undefined,"com_trashbag1_" + param_00 + "_dsr",undefined,undefined,undefined,undefined,undefined,0); +} + +//Function Number: 75 +toy_recyclebin_01(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",120,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","props/garbage_spew_des",1,"splash"); + common_scripts\_destructible::destructible_fx("tag_fx","props/garbage_spew",1,common_scripts\_destructible::damage_not("splash")); + common_scripts\_destructible::destructible_sound("exp_trashcan_sweet"); + common_scripts\_destructible::destructible_explode(600,651,1,1,10,20); + common_scripts\_destructible::destructible_state(undefined,"com_recyclebin01_dmg",undefined,undefined,undefined,undefined,undefined,0); + common_scripts\_destructible::destructible_part("tag_fx","com_recyclebin01_lid",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 76 +toy_trashcan_metal_closed(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",120,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","props/garbage_spew_des",1,"splash"); + common_scripts\_destructible::destructible_fx("tag_fx","props/garbage_spew",1,common_scripts\_destructible::damage_not("splash")); + common_scripts\_destructible::destructible_sound("exp_trashcan_sweet"); + common_scripts\_destructible::destructible_explode(600,651,1,1,10,20); + common_scripts\_destructible::destructible_state(undefined,"com_trashcan_metal_with_trash",undefined,undefined,undefined,undefined,undefined,0); + common_scripts\_destructible::destructible_part("tag_fx","com_trashcan_metalLID",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 77 +toy_water_collector(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",220,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/water_collector_explosion"); + common_scripts\_destructible::destructible_sound("water_collector_splash"); + common_scripts\_destructible::destructible_explode(500,800,32,32,1,10,undefined,32); + common_scripts\_destructible::destructible_state(undefined,"utility_water_collector_base_dest",undefined,undefined,"no_melee",undefined,undefined,0); + common_scripts\_destructible::destructible_part("tag_lid",undefined,220,undefined,undefined,"no_melee",1); + common_scripts\_destructible::destructible_state(undefined); +} + +//Function Number: 78 +toy_foliage_tree_oak_1(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",120,undefined,32,"splash"); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/tree_trunk_explosion_oak_1",1,"splash"); + common_scripts\_destructible::destructible_sound("large_oak_tree_impact"); + common_scripts\_destructible::destructible_sound("large_oak_tree_fall"); + common_scripts\_destructible::destructible_explode(600,651,1,1,10,20); + common_scripts\_destructible::destructible_state(undefined,"foliage_tree_oak_1_destroyed_trunk",undefined,undefined,undefined,undefined,undefined,0); +} + +//Function Number: 79 +toy_paris_tree_plane_large(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",250,undefined,32,"splash"); + common_scripts\_destructible::destructible_fx("tag_origin","props/paris_tree_plane_destruct"); + common_scripts\_destructible::destructible_explode(100,351,150,350,100,200,undefined,undefined,undefined,undefined,(-400,0,80),0.7); + common_scripts\_destructible::destructible_state(undefined,"foliage_paris_tree_plane_broken",undefined,undefined,undefined,undefined,undefined,0); +} + +//Function Number: 80 +toy_usa_gas_station_trash_bin_01(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",120,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","props/garbage_spew_des",1,"splash"); + common_scripts\_destructible::destructible_fx("tag_fx","props/garbage_spew",1,common_scripts\_destructible::damage_not("splash")); + common_scripts\_destructible::destructible_explode(600,651,1,1,10,20); + common_scripts\_destructible::destructible_state(undefined,"usa_gas_station_trash_bin_01_base",undefined,undefined,undefined,undefined,undefined,0); + common_scripts\_destructible::destructible_part("tag_fx","usa_gas_station_trash_bin_01_lid",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 81 +toy_usa_gas_station_trash_bin_02(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",120,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx_high","props/garbage_spew_des",1,"splash"); + common_scripts\_destructible::destructible_fx("tag_fx_high","props/garbage_spew",1,common_scripts\_destructible::damage_not("splash")); + common_scripts\_destructible::destructible_explode(600,651,1,1,10,20); + common_scripts\_destructible::destructible_state(undefined,"usa_gas_station_trash_bin_02_base",undefined,undefined,undefined,undefined,undefined,0); + common_scripts\_destructible::destructible_part("tag_fx_high","usa_gas_station_trash_bin_02_lid",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 82 +toy_light_ceiling_round(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",150,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(15); + common_scripts\_destructible::destructible_lights_out(16); + common_scripts\_destructible::destructible_fx("tag_fx","misc/light_blowout_runner"); + common_scripts\_destructible::destructible_state(undefined,"com_light_ceiling_round_off",undefined,undefined,"no_melee"); +} + +//Function Number: 83 +toy_light_ceiling_fluorescent(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",150,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(15); + common_scripts\_destructible::destructible_fx("tag_fx","misc/light_fluorescent_blowout_runner"); + common_scripts\_destructible::destructible_fx("tag_swing_fx","misc/light_blowout_swinging_runner"); + common_scripts\_destructible::destructible_lights_out(16); + common_scripts\_destructible::destructible_explode(20,2000,64,64,40,80); + common_scripts\_destructible::destructible_anim(destructible_gaspump("ight_fluorescent_swing"),#animtree,"setanimknob",undefined,0,"light_fluorescent_swing"); + common_scripts\_destructible::destructible_sound("fluorescent_light_fall",undefined,0); + common_scripts\_destructible::destructible_sound("fluorescent_light_bulb",undefined,0); + common_scripts\_destructible::destructible_anim(destructible_gaspump("ight_fluorescent_swing_02"),#animtree,"setanimknob",undefined,1,"light_fluorescent_swing_02"); + common_scripts\_destructible::destructible_sound("fluorescent_light_fall",undefined,1); + common_scripts\_destructible::destructible_sound("fluorescent_light_bulb",undefined,1); + common_scripts\_destructible::destructible_anim(destructible_gaspump("ight_fluorescent_null"),#animtree,"setanimknob",undefined,2,"light_fluorescent_null"); + common_scripts\_destructible::destructible_state(undefined,"me_lightfluohang_double_destroyed",undefined,undefined,"no_melee"); +} + +//Function Number: 84 +toy_light_ceiling_fluorescent_spotlight(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",150,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(15); + common_scripts\_destructible::destructible_sound("fluorescent_light_bulb"); + common_scripts\_destructible::destructible_fx("tag_fx","misc/light_fluorescent_blowout_runner"); + common_scripts\_destructible::destructible_fx("tag_swing_fx","misc/light_blowout_swinging_runner"); + common_scripts\_destructible::destructible_lights_out(16); + common_scripts\_destructible::destructible_explode(20,2000,64,64,40,80); + common_scripts\_destructible::destructible_anim(destructible_gaspump("ight_fluorescent_swing"),#animtree,"setanimknob",undefined,0,"light_fluorescent_swing"); + common_scripts\_destructible::destructible_sound("fluorescent_light_fall",undefined,0); + common_scripts\_destructible::destructible_sound("fluorescent_light_bulb",undefined,0); + common_scripts\_destructible::destructible_spotlight("tag_swing_r_far"); + common_scripts\_destructible::destructible_sound("fluorescent_light_fall"); + common_scripts\_destructible::destructible_state(undefined,"me_lightfluohang_double_destroyed",undefined,undefined,"no_melee"); +} + +//Function Number: 85 +toy_light_ceiling_fluorescent_single(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",150,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(15); + common_scripts\_destructible::destructible_fx("tag_fx","misc/light_fluorescent_single_blowout_runner"); + common_scripts\_destructible::destructible_fx("tag_swing_center_fx","misc/light_blowout_swinging_runner"); + common_scripts\_destructible::destructible_fx("tag_swing_center_fx_far","misc/light_blowout_swinging_runner"); + common_scripts\_destructible::destructible_lights_out(32); + common_scripts\_destructible::destructible_explode(20,2000,64,64,40,80); + common_scripts\_destructible::destructible_anim(destructible_gaspump("ight_fluorescent_single_swing"),#animtree,"setanimknob",undefined,0,"light_fluorescent_single_swing"); + common_scripts\_destructible::destructible_sound("fluorescent_light_fall",undefined,0); + common_scripts\_destructible::destructible_sound("fluorescent_light_bulb",undefined,0); + common_scripts\_destructible::destructible_anim(destructible_gaspump("ight_fluorescent_single_swing_02"),#animtree,"setanimknob",undefined,1,"light_fluorescent_single_swing_02"); + common_scripts\_destructible::destructible_sound("fluorescent_light_hinge",undefined,1); + common_scripts\_destructible::destructible_sound("fluorescent_light_bulb",undefined,1); + common_scripts\_destructible::destructible_anim(destructible_gaspump("ight_fluorescent_single_swing_03"),#animtree,"setanimknob",undefined,2,"light_fluorescent_single_swing_03"); + common_scripts\_destructible::destructible_sound("fluorescent_light_fall",undefined,2); + common_scripts\_destructible::destructible_sound("fluorescent_light_bulb",undefined,2); + common_scripts\_destructible::destructible_anim(destructible_gaspump("ight_fluorescent_single_null"),#animtree,"setanimknob",undefined,3,"light_fluorescent_single_null"); + common_scripts\_destructible::destructible_state(undefined,"me_lightfluohang_single_destroyed",undefined,undefined,"no_melee"); +} + +//Function Number: 86 +toy_light_ceiling_fluorescent_single_spotlight(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",150,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(15); + common_scripts\_destructible::destructible_lights_out(16); + common_scripts\_destructible::destructible_sound("fluorescent_light_bulb"); + common_scripts\_destructible::destructible_fx("tag_fx","misc/light_fluorescent_single_blowout_runner"); + common_scripts\_destructible::destructible_fx("tag_swing_center_fx","misc/light_blowout_swinging_runner"); + common_scripts\_destructible::destructible_fx("tag_swing_center_fx_far","misc/light_blowout_swinging_runner"); + common_scripts\_destructible::destructible_explode(20,2000,64,64,40,80); + common_scripts\_destructible::destructible_anim(destructible_gaspump("ight_fluorescent_single_swing_02"),#animtree,"setanimknob",undefined,undefined,"light_fluorescent_single_swing_02"); + common_scripts\_destructible::destructible_sound("fluorescent_light_fall"); + common_scripts\_destructible::destructible_spotlight("tag_swing_center_fx_far"); + common_scripts\_destructible::destructible_state(undefined,"me_lightfluohang_single_destroyed",undefined,undefined,"no_melee"); +} + +//Function Number: 87 +toy_bookstore_bookstand4_books(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(7); + common_scripts\_destructible::destructible_fx("tag_fx","props/bookshelf4_dmg",1,common_scripts\_destructible::damage_not("splash")); + common_scripts\_destructible::destructible_state(undefined,"bookstore_bookstand4",100,undefined,undefined,"splash"); + common_scripts\_destructible::destructible_fx("tag_fx","props/bookshelf4_des",1,"splash"); + common_scripts\_destructible::destructible_explode(2000,3800,32,32,1,5,undefined,0); + common_scripts\_destructible::destructible_state(undefined,"bookstore_bookstand4_null",undefined,undefined,undefined,undefined,undefined,0); +} + +//Function Number: 88 +toy_locker_double(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",150,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_anim(destructible_gaspump("ocker_broken_both_doors_1"),#animtree,"setanimknob",undefined,0,"locker_broken_both_doors_1"); + common_scripts\_destructible::destructible_fx("tag_fx","props/locker_double_des_02_right",undefined,undefined,0); + common_scripts\_destructible::destructible_sound("lockers_fast",undefined,0); + common_scripts\_destructible::destructible_anim(destructible_gaspump("ocker_broken_both_doors_2"),#animtree,"setanimknob",undefined,1,"locker_broken_both_doors_2"); + common_scripts\_destructible::destructible_fx("tag_fx","props/locker_double_des_01_left",undefined,undefined,1); + common_scripts\_destructible::destructible_sound("lockers_fast",undefined,1); + common_scripts\_destructible::destructible_anim(destructible_gaspump("ocker_broken_both_doors_4"),#animtree,"setanimknob",undefined,2,"locker_broken_both_doors_4"); + common_scripts\_destructible::destructible_fx("tag_fx","props/locker_double_des_03_both",undefined,undefined,2); + common_scripts\_destructible::destructible_sound("lockers_double",undefined,2); + common_scripts\_destructible::destructible_anim(destructible_gaspump("ocker_broken_door1_fast"),#animtree,"setanimknob",undefined,3,"locker_broken_door1_fast"); + common_scripts\_destructible::destructible_fx("tag_fx","props/locker_double_des_01_left",undefined,undefined,3); + common_scripts\_destructible::destructible_sound("lockers_fast",undefined,3); + common_scripts\_destructible::destructible_anim(destructible_gaspump("ocker_broken_door2_fast"),#animtree,"setanimknob",undefined,4,"locker_broken_door2_fast"); + common_scripts\_destructible::destructible_fx("tag_fx","props/locker_double_des_02_right",undefined,undefined,4); + common_scripts\_destructible::destructible_sound("lockers_fast",undefined,4); + common_scripts\_destructible::destructible_anim(destructible_gaspump("ocker_broken_both_doors_3"),#animtree,"setanimknob",undefined,5,"locker_broken_both_doors_3"); + common_scripts\_destructible::destructible_fx("tag_fx","misc/no_effect",undefined,undefined,5); + common_scripts\_destructible::destructible_sound("lockers_minor",undefined,5); + common_scripts\_destructible::destructible_anim(destructible_gaspump("ocker_broken_door1_slow"),#animtree,"setanimknob",undefined,6,"locker_broken_door1_slow"); + common_scripts\_destructible::destructible_fx("tag_fx","misc/no_effect",undefined,undefined,6); + common_scripts\_destructible::destructible_sound("lockers_minor",undefined,6); + common_scripts\_destructible::destructible_anim(destructible_gaspump("ocker_broken_door2_slow"),#animtree,"setanimknob",undefined,7,"locker_broken_door2_slow"); + common_scripts\_destructible::destructible_fx("tag_fx","misc/no_effect",undefined,undefined,7); + common_scripts\_destructible::destructible_sound("lockers_minor",undefined,7); + common_scripts\_destructible::destructible_state(undefined,"com_locker_double_destroyed",undefined,undefined,"no_melee"); +} + +//Function Number: 89 +toy_dubai_fish_sculpture(param_00,param_01,param_02) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",200000000,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(2); + for(var_03 = 1;var_03 <= param_02;var_03++) + { + common_scripts\_destructible::destructible_part("tag_" + param_01 + "_" + var_03,param_00,10); + common_scripts\_destructible::destructible_fx("tag_" + param_01 + "_" + var_03,"props/dub_fish_" + param_01 + "_shatter"); + common_scripts\_destructible::destructible_state(undefined); + } +} + +//Function Number: 90 +toy_intro_concrete_chipaway(param_00,param_01) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",200000000,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("tag_origin",param_00,undefined,undefined,"no_melee"); + for(var_02 = 1;var_02 <= param_01;var_02++) + { + common_scripts\_destructible::destructible_part("tag_chunk_" + var_02,param_00,200,undefined,undefined,"no_splash"); + common_scripts\_destructible::destructible_splash_damage_scaler(0.01); + common_scripts\_destructible::destructible_fx("tag_chunk_" + var_02,"props/intro_wall_chunk_exp"); + common_scripts\_destructible::destructible_state(undefined); + } +} + +//Function Number: 91 +toy_chicken(param_00) +{ + common_scripts\_destructible::destructible_create("toy_chicken" + param_00,"tag_origin",0,undefined,32); + common_scripts\_destructible::destructible_anim(destructible_gaspump("hicken_cage_loop_01"),#animtree,"setanimknob",undefined,0,"chicken_cage_loop_01",1.6); + common_scripts\_destructible::destructible_anim(destructible_gaspump("hicken_cage_loop_02"),#animtree,"setanimknob",undefined,1,"chicken_cage_loop_02",1.6); + common_scripts\_destructible::destructible_loopsound("animal_chicken_idle_loop"); + common_scripts\_destructible::destructible_state("tag_origin","chicken" + param_00,25); + common_scripts\_destructible::destructible_fx("tag_origin","props/chicken_exp" + param_00); + common_scripts\_destructible::destructible_anim(destructible_gaspump("hicken_cage_death"),#animtree,"setanimknob",undefined,0,"chicken_cage_death"); + common_scripts\_destructible::destructible_anim(destructible_gaspump("hicken_cage_death_02"),#animtree,"setanimknob",undefined,1,"chicken_cage_death_02"); + common_scripts\_destructible::destructible_sound("animal_chicken_death"); + common_scripts\_destructible::destructible_state(undefined,"chicken" + param_00,undefined,undefined,"no_melee"); +} + +//Function Number: 92 +toy_hide_with_fx(param_00,param_01,param_02,param_03) +{ + common_scripts\_destructible::destructible_create(param_00,param_01,param_03); + common_scripts\_destructible::destructible_fx("tag_origin",param_02); + common_scripts\_destructible::destructible_state("tag_origin","generic_prop_raven"); +} + +//Function Number: 93 +vehicle_ac130_80s_sedan1(param_00) +{ + common_scripts\_destructible::destructible_create("vehicle_ac130_80s_sedan1_" + param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,150,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_80s_sedan1_" + param_00 + "_destroyed",undefined,32,"_melee"); + var_01 = "tag_hood"; + common_scripts\_destructible::destructible_part(var_01,"vehicle_80s_sedan1_" + param_00 + "_hood",undefined,undefined,undefined,undefined,1,2.5); + var_01 = "tag_trunk"; + common_scripts\_destructible::destructible_part(var_01,"vehicle_80s_sedan1_" + param_00 + "_trunk",undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_80s_sedan1_" + param_00 + "_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","vehicle_80s_sedan1_" + param_00 + "_wheel_LF",20,undefined,undefined,"no_melee",undefined,2.3); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("tag_door_left_front",undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_door_left_back",undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_door_right_front","vehicle_80s_sedan1_" + param_00 + "_door_RF",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_door_right_back","vehicle_80s_sedan1_" + param_00 + "_door_RB",undefined,undefined,undefined,undefined,1,1); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_bumper_front","vehicle_80s_sedan1_" + param_00 + "_bumper_F",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_bumper_back","vehicle_80s_sedan1_" + param_00 + "_bumper_B",undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_80s_sedan1_" + param_00 + "_mirror_L",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_80s_sedan1_" + param_00 + "_mirror_R",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 94 +vehicle_bus_destructible(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + var_01 = "tag_window_front_left"; + common_scripts\_destructible::destructible_part(var_01,undefined,99,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_window_front_right"; + common_scripts\_destructible::destructible_part(var_01,undefined,99,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_window_driver"; + common_scripts\_destructible::destructible_part(var_01,undefined,99,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_window_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,99,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_window_side_1"; + common_scripts\_destructible::destructible_part(var_01,undefined,99,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_window_side_2"; + common_scripts\_destructible::destructible_part(var_01,undefined,99,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_window_side_3"; + common_scripts\_destructible::destructible_part(var_01,undefined,99,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_window_side_4"; + common_scripts\_destructible::destructible_part(var_01,undefined,99,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_window_side_5"; + common_scripts\_destructible::destructible_part(var_01,undefined,99,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_window_side_6"; + common_scripts\_destructible::destructible_part(var_01,undefined,99,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_window_side_7"; + common_scripts\_destructible::destructible_part(var_01,undefined,99,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_window_side_8"; + common_scripts\_destructible::destructible_part(var_01,undefined,99,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_window_side_9"; + common_scripts\_destructible::destructible_part(var_01,undefined,99,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_window_side_10"; + common_scripts\_destructible::destructible_part(var_01,undefined,99,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_window_side_11"; + common_scripts\_destructible::destructible_part(var_01,undefined,99,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); +} + +//Function Number: 95 +vehicle_80s_sedan1(param_00) +{ + common_scripts\_destructible::destructible_create("vehicle_80s_sedan1_" + param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,150,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,150,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_80s_sedan1_" + param_00 + "_destroyed",undefined,32,"_melee"); + var_01 = "tag_hood"; + common_scripts\_destructible::destructible_part(var_01,"vehicle_80s_sedan1_" + param_00 + "_hood",undefined,undefined,undefined,undefined,1,2.5); + var_01 = "tag_trunk"; + common_scripts\_destructible::destructible_part(var_01,"vehicle_80s_sedan1_" + param_00 + "_trunk",undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_80s_sedan1_" + param_00 + "_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","vehicle_80s_sedan1_" + param_00 + "_wheel_LF",20,undefined,undefined,"no_melee",undefined,2.3); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("tag_door_left_front",undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_door_left_back",undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_door_right_front","vehicle_80s_sedan1_" + param_00 + "_door_RF",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_door_right_back","vehicle_80s_sedan1_" + param_00 + "_door_RB",undefined,undefined,undefined,undefined,1,1); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_bumper_front","vehicle_80s_sedan1_" + param_00 + "_bumper_F",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_bumper_back","vehicle_80s_sedan1_" + param_00 + "_bumper_B",undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_80s_sedan1_" + param_00 + "_mirror_L",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_80s_sedan1_" + param_00 + "_mirror_R",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 96 +vehicle_80s_hatch1(param_00) +{ + common_scripts\_destructible::destructible_create("vehicle_80s_hatch1_" + param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,150,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,150,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_80s_hatch1_" + param_00 + "_destroyed",undefined,32,"_melee"); + var_01 = "tag_hood"; + common_scripts\_destructible::destructible_part(var_01,"vehicle_80s_hatch1_" + param_00 + "_hood",800,undefined,undefined,undefined,1,1.5); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_80s_hatch1_" + param_00 + "_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_80s_hatch1_" + param_00 + "_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("tag_door_left_front",undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_door_right_front","vehicle_80s_hatch1_" + param_00 + "_door_RF",undefined,undefined,undefined,undefined,1,1); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,10,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,10,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,10,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,10,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,10,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,10,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_bumper_front"); + common_scripts\_destructible::destructible_part("tag_bumper_back"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_80s_hatch1_" + param_00 + "_mirror_L",40); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_80s_hatch1_" + param_00 + "_mirror_R",40); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 97 +vehicle_80s_hatch2(param_00) +{ + common_scripts\_destructible::destructible_create("vehicle_80s_hatch2_" + param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,150,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,150,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_80s_hatch2_" + param_00 + "_destroyed",undefined,32,"_melee"); + var_01 = "tag_hood"; + common_scripts\_destructible::destructible_part(var_01,"vehicle_80s_hatch2_" + param_00 + "_hood",800,undefined,undefined,undefined,1,1.5); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_80s_hatch2_" + param_00 + "_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_80s_hatch2_" + param_00 + "_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("tag_door_left_front",undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_door_right_front","vehicle_80s_hatch2_" + param_00 + "_door_RF",undefined,undefined,undefined,undefined,1,1); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_bumper_front"); + common_scripts\_destructible::destructible_part("tag_bumper_back"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_80s_hatch2_" + param_00 + "_mirror_L",40); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_80s_hatch2_" + param_00 + "_mirror_R",40); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 98 +vehicle_80s_wagon1(param_00) +{ + common_scripts\_destructible::destructible_create("vehicle_80s_wagon1_" + param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,150,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,150,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_80s_wagon1_" + param_00 + "_destroyed",undefined,32,"_melee"); + var_01 = "tag_hood"; + common_scripts\_destructible::destructible_part(var_01,"vehicle_80s_wagon1_" + param_00 + "_hood",800,undefined,undefined,undefined,1,1.5); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_80s_wagon1_" + param_00 + "_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","vehicle_80s_wagon1_" + param_00 + "_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("tag_door_left_front",undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_door_left_back",undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_door_right_front",undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_door_right_back","vehicle_80s_wagon1_" + param_00 + "_door_RB",undefined,undefined,undefined,undefined,1,1); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back2"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back2_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back2"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back2_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_bumper_front","vehicle_80s_wagon1_" + param_00 + "_bumper_F",undefined,undefined,undefined,undefined,1,0.7); + common_scripts\_destructible::destructible_part("tag_bumper_back",undefined,undefined,undefined,undefined,undefined,undefined,0.6); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_80s_wagon1_" + param_00 + "_mirror_L",40); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_80s_wagon1_" + param_00 + "_mirror_R",40); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 99 +vehicle_civ_car_a(param_00) +{ + common_scripts\_destructible::destructible_create("vehicle_civ_car_a_" + param_00,"ac_prs_veh_civ_car_a_" + param_00 + "_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_veh_civ_car_a_dam" + param_00 + "_lod0","ac_prs_veh_civ_car_a_dam" + param_00,250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/small_vehicle_explosion_ac130",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 100 +vehicle_small_hatch(param_00) +{ + common_scripts\_destructible::destructible_create("vehicle_small_hatch_" + param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,150,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,150,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_small_hatch_" + param_00 + "_destroyed",undefined,32,"_melee"); + var_01 = "tag_hood"; + common_scripts\_destructible::destructible_part(var_01,"vehicle_small_hatch_" + param_00 + "_hood",800,undefined,undefined,undefined,1,1.5); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("tag_door_left_front","vehicle_small_hatch_" + param_00 + "_door_LF",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_door_right_front","vehicle_small_hatch_" + param_00 + "_door_RF",undefined,undefined,undefined,undefined,1,1); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_bumper_front",undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_bumper_back",undefined,undefined,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_small_hatch_" + param_00 + "_mirror_L",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_small_hatch_" + param_00 + "_mirror_R",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 101 +vehicle_london_cab_black() +{ + common_scripts\_destructible::destructible_create("vehicle_london_cab_black","tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,150,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,150,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_london_cab_destroyed",undefined,32,"_melee"); + var_00 = "tag_hood"; + common_scripts\_destructible::destructible_part(var_00,"vehicle_london_cab_hood",800,undefined,undefined,undefined,1,1.5); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_london_cab_wheel_lf",20,undefined,undefined,"no_melee",undefined,1); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_london_cab_wheel_lf",20,undefined,undefined,"no_melee",undefined,1); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","vehicle_london_cab_wheel_lf",20,undefined,undefined,"no_melee",undefined,1); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("tag_door_left_front","vehicle_london_cab_door_lb",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_door_right_front","vehicle_london_cab_door_lb",undefined,undefined,undefined,undefined,1,1); + var_00 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_00,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_00 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_00 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_00 = "tag_center_glass"; + common_scripts\_destructible::destructible_part(var_00,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_00 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_00 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_00 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_00,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_00 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_00 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_00 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_00,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_00 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_00 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_00 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_00,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_00 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_00 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_00 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_00,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_00 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_00 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_00 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_00,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_00 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_00 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_00 = "tag_glass_left_back_02"; + common_scripts\_destructible::destructible_part(var_00,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_00 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_00 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_00 = "tag_glass_right_back_02"; + common_scripts\_destructible::destructible_part(var_00,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_00 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_00 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_00 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_00,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_00,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_00 + "_d"); + var_00 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_00,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_00,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_00 + "_d"); + common_scripts\_destructible::destructible_part("tag_bumper_front",undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_bumper_back",undefined,undefined,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_london_cab_mirror_l",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_london_cab_mirror_r",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 102 +vehicle_pickup(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",300,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,210,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_pickup_destroyed",undefined,32,"_melee"); + var_01 = "tag_hood"; + common_scripts\_destructible::destructible_part(var_01,"vehicle_pickup_hood",800,undefined,undefined,undefined,1,2.5); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("tag_door_left_front","vehicle_pickup_door_LF",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_door_right_front","vehicle_pickup_door_RF",undefined,undefined,undefined,undefined,1,1); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_bumper_front",undefined,undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_bumper_back",undefined,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_pickup_mirror_L",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_pickup_mirror_R",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 103 +vehicle_hummer(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_deathfx","explosions/vehicle_explosion_hummer",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,210,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_hummer_destroyed",undefined,32,"_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); +} + +//Function Number: 104 +vehicle_t72(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire_gaz",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_deathfx","explosions/vehicle_explosion_gaz",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,210,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_gaz_tigr_harbor_destroyed",undefined,32,"_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_mid"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_mid_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_mid"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_mid_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back_left"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_left_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back_right"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_right_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); +} + +//Function Number: 105 +vehicle_btr(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke_moving",0.1); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire_gaz_moving",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(25,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,1000,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_deathfx","explosions/vehicle_explosion_gaz",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,210,250,50,300,undefined,undefined,0.3,500); + common_scripts\_destructible::destructible_state(undefined,"vehicle_gaz_tigr_paris_destroyed",undefined,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_part("tag_frontbumper",undefined,50,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_hood_fx","props/vehicle_gaz_frontBumper",0); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_moving",0.1); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,10,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large_moving"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med_moving"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med_moving"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_mid"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_mid_fx","props/car_glass_med_moving"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_mid"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_mid_fx","props/car_glass_med_moving"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med_moving"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med_moving"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back_left"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_left_fx","props/car_glass_med_moving"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back_right"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_right_fx","props/car_glass_med_moving"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); +} + +//Function Number: 106 +vehicle_gaz(param_00,param_01) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",300,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_deathfx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,210,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,param_01,undefined,32,"_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + var_02 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_02,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_02 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_02 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_02,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_02 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_02 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_02,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_02 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_02 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_02,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_02 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); +} + +//Function Number: 107 +vehicle_gaz_harbor(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",300,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/vehicle_explosion_medium",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,210,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6576(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + if(param_00 == "hicle_moving_truck") + { + common_scripts\_destructible::destructible_state(undefined,"vehicle_moving_truck_dst",undefined,32,"no_melee"); + } + else + { + common_scripts\_destructible::destructible_state(undefined,"vehicle_moving_truck_thai_dst",undefined,32,"no_melee"); + } + + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); +} + +//Function Number: 108 +vehicle_bm21(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",undefined,undefined,32,"no_melee"); + vehicle_moving_truck("TAG_WINDOW_SMALL_02_RI",1,"props/car_glass_subway_tall"); + vehicle_moving_truck("TAG_WINDOW_SMALL_03_RI",1,"props/car_glass_subway_tall"); + vehicle_moving_truck("TAG_WINDOW_SMALL_04_RI",1,"props/car_glass_subway_tall"); + vehicle_moving_truck("TAG_WINDOW_SMALL_05_RI",1,"props/car_glass_subway_tall"); + vehicle_moving_truck("TAG_WINDOW_SMALL_02_LE",1,"props/car_glass_subway_tall"); + vehicle_moving_truck("TAG_WINDOW_SMALL_03_LE",1,"props/car_glass_subway_tall"); + vehicle_moving_truck("TAG_WINDOW_SMALL_04_LE",1,"props/car_glass_subway_tall"); + vehicle_moving_truck("TAG_WINDOW_SMALL_05_LE",1,"props/car_glass_subway_tall"); +} + +//Function Number: 109 +vehicle_moving_truck(param_00,param_01,param_02) +{ + common_scripts\_destructible::destructible_part(param_00,undefined,140,undefined,undefined,undefined,undefined,undefined,1); + if(param_01) + { + common_scripts\_destructible::destructible_state(param_00 + "_D",undefined,80,undefined,undefined,undefined,1); + } + + common_scripts\_destructible::destructible_fx(param_00,param_02); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); +} + +//Function Number: 110 +vehicle_subway_cart(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",undefined,undefined,32,"no_melee"); + vehicle_moving_truck("TAG_FRONT_WINDOW",1,"props/car_glass_subway_tall"); + vehicle_moving_truck("TAG_WINDOW_01_LE",1,"props/car_glass_subway_large"); + vehicle_moving_truck("TAG_WINDOW_03_LE",1,"props/car_glass_subway_large"); + vehicle_moving_truck("TAG_WINDOW_04_LE",1,"props/car_glass_subway_large"); + vehicle_moving_truck("TAG_WINDOW_07_LE",1,"props/car_glass_subway_large"); + vehicle_moving_truck("TAG_WINDOW_08_LE",1,"props/car_glass_subway_large"); + vehicle_moving_truck("TAG_WINDOW_011_LE",1,"props/car_glass_subway_large"); + vehicle_moving_truck("TAG_WINDOW_012_LE",1,"props/car_glass_subway_large"); + vehicle_moving_truck("TAG_WINDOW_014_LE",1,"props/car_glass_subway_tall"); + vehicle_moving_truck("TAG_WINDOW_01_RI",1,"props/car_glass_subway_large"); + vehicle_moving_truck("TAG_WINDOW_03_RI",1,"props/car_glass_subway_large"); + vehicle_moving_truck("TAG_WINDOW_04_RI",1,"props/car_glass_subway_large"); + vehicle_moving_truck("TAG_WINDOW_07_RI",1,"props/car_glass_subway_large"); + vehicle_moving_truck("TAG_WINDOW_08_RI",1,"props/car_glass_subway_large"); + vehicle_moving_truck("TAG_WINDOW_011_RI",1,"props/car_glass_subway_large"); + vehicle_moving_truck("TAG_WINDOW_012_RI",1,"props/car_glass_subway_large"); + vehicle_moving_truck("TAG_WINDOW_014_RI",1,"props/car_glass_subway_tall"); +} + +//Function Number: 111 +create_vehicle_subway_cart_window_single(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",undefined,undefined,32,"no_melee"); + vehicle_moving_truck("TAG_WINDOW_SMALL_01_LE",1,"props/car_glass_subway_large"); + vehicle_moving_truck("TAG_WINDOW_SMALL_06_LE",1,"props/car_glass_subway_large"); + vehicle_moving_truck("TAG_WINDOW_SMALL_01_RI",1,"props/car_glass_subway_large"); + vehicle_moving_truck("TAG_WINDOW_SMALL_06_RI",1,"props/car_glass_subway_large"); +} + +//Function Number: 112 +vehicle_subway_cart_windows(param_00) +{ + common_scripts\_destructible::destructible_create("vehicle_luxurysedan_2008" + param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,210,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_luxurysedan_2008" + param_00 + "_destroy",undefined,32,"_melee"); + var_01 = "tag_hood"; + common_scripts\_destructible::destructible_part(var_01,"vehicle_luxurysedan_2008" + param_00 + "_hood",800,undefined,undefined,undefined,1,2.5); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_luxurysedan_2008" + param_00 + "_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_luxurysedan_2008" + param_00 + "_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_luxurysedan_2008" + param_00 + "_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","vehicle_luxurysedan_2008" + param_00 + "_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_part("tag_door_left_front","vehicle_luxurysedan_2008" + param_00 + "_door_LF",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_door_right_front","vehicle_luxurysedan_2008" + param_00 + "_door_RF",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_door_left_back","vehicle_luxurysedan_2008" + param_00 + "_door_LB",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_door_right_back","vehicle_luxurysedan_2008" + param_00 + "_door_RB",undefined,undefined,undefined,undefined,1,1); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_luxurysedan_2008" + param_00 + "_mirror_L",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_luxurysedan_2008" + param_00 + "_mirror_R",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 113 +vehicle_subway_cart_windows_small(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"TAG_ORIGIN",250,undefined,32,"splash"); + common_scripts\_destructible::destructible_splash_damage_scaler(11); + common_scripts\_destructible::destructible_loopfx("TAG_front_fire","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_loopfx("TAG_rear_fire","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"splash"); + common_scripts\_destructible::destructible_loopfx("TAG_front_fire","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_loopfx("TAG_rear_fire","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"splash"); + common_scripts\_destructible::destructible_loopfx("TAG_front_fire","smoke/airplane_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_loopfx("TAG_rear_fire","smoke/airplane_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,512,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"splash"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"splash"); + common_scripts\_destructible::destructible_fx("TAG_FX","explosions/vehicle_explosion_mig29",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(8000,10000,512,512,50,300,undefined,undefined,0.4,1000); + lib_0D89::func_7073(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_mig29_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_mig29_v2_dest",undefined,32,"lash"); + common_scripts\_destructible::destructible_part("TAG_COCKPIT","vehicle_mig29_dest_cockpit",40,undefined,undefined,undefined,undefined,1); +} + +//Function Number: 114 +vehicle_luxurysedan(param_00) +{ + common_scripts\_destructible::destructible_create("vehicle_mack_truck_short_" + param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/mack_truck_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_loopfx("tag_gastank","smoke/motorcycle_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("mack_truck_flareup_med"); + common_scripts\_destructible::destructible_loopsound("mack_truck_fire_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,300,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("mack_truck_fire_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_gastank","smoke/motorcycle_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_fx("tag_cab_fire","fire/firelp_med_pm"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/propane_large_exp",0); + common_scripts\_destructible::destructible_sound("mack_truck_explode"); + common_scripts\_destructible::destructible_loopsound("mack_truck_fire_med"); + common_scripts\_destructible::destructible_explode(8000,10000,512,512,100,400,undefined,undefined,0.4,1000); + common_scripts\_destructible::destructible_state(undefined,"vehicle_mack_truck_short_" + param_00 + "_destroy",undefined,32,"no_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_mack_truck_short_" + param_00 + "_wheel_lf",20,undefined,undefined,"no_melee",undefined,8); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_mack_truck_short_" + param_00 + "_wheel_lf",20,undefined,undefined,"no_melee",undefined,81); + common_scripts\_destructible::destructible_part("left_wheel_03_jnt","vehicle_mack_truck_short_" + param_00 + "_wheel_lf",20,undefined,undefined,"no_melee",undefined,8); + common_scripts\_destructible::destructible_part("tag_door_left_front","vehicle_mack_truck_short_" + param_00 + "_door_lf",undefined,undefined,undefined,undefined,1,1); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("mack_truck_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("mack_truck_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("mack_truck_glass_break_small"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("mack_truck_glass_break_small"); + common_scripts\_destructible::destructible_state(undefined); +} + +//Function Number: 115 +vehicle_mig29_landed() +{ + common_scripts\_destructible::destructible_create("vehicle_semi_truck","tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/mack_truck_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_loopfx("tag_gastank","smoke/motorcycle_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("mack_truck_flareup_med"); + common_scripts\_destructible::destructible_loopsound("mack_truck_fire_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,300,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("mack_truck_fire_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_gastank","smoke/motorcycle_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_fx("tag_cab_fire","fire/firelp_med_pm"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/propane_large_exp",0); + common_scripts\_destructible::destructible_sound("mack_truck_explode"); + common_scripts\_destructible::destructible_loopsound("mack_truck_fire_med"); + common_scripts\_destructible::destructible_explode(8000,10000,512,512,100,400,undefined,undefined,0.4,1000); + common_scripts\_destructible::destructible_state(undefined,"vehicle_semi_truck_destroyed",undefined,32,"no_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_semi_truck_wheel_lf",20,undefined,undefined,"no_melee",undefined,81); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_semi_truck_wheel_lf",20,undefined,undefined,"no_melee",undefined,81); + common_scripts\_destructible::destructible_part("left_wheel_03_jnt","vehicle_semi_truck_wheel_lf",20,undefined,undefined,"no_melee",undefined,81); + common_scripts\_destructible::destructible_part("tag_door_left_front","vehicle_semi_truck_door_lf",undefined,undefined,undefined,undefined,1,1); + var_00 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_00,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_00 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_00 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("mack_truck_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_00 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_00,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_00 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_00 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("mack_truck_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_00 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_00,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_00 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_00 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("mack_truck_glass_break_small"); + common_scripts\_destructible::destructible_state(undefined); + var_00 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_00,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_00 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("mack_truck_glass_break_small"); + common_scripts\_destructible::destructible_state(undefined); + var_00 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_00,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_00 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_00 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("mack_truck_glass_break_small"); + common_scripts\_destructible::destructible_state(undefined); + var_00 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_00,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_00 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("mack_truck_glass_break_small"); + common_scripts\_destructible::destructible_state(undefined); +} + +//Function Number: 116 +vehicle_mack_truck_short(param_00) +{ + var_01 = undefined; + var_01 = destructible_gaspump("vehicle_motorcycle_destroy_" + param_00); + common_scripts\_destructible::destructible_create("vehicle_motorcycle_" + param_00,"body_animate_jnt",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_death_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_death_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_death_fx","smoke/motorcycle_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,128,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(3000,4000,128,150,50,300); + lib_8900::func_6E0D(var_01,#animtree,"setanimknob",undefined,undefined,"vehicle_motorcycle_destroy_" + param_00); + common_scripts\_destructible::destructible_state(undefined,"vehicle_motorcycle_" + param_00 + "_destroy",undefined,32,"o_melee"); + common_scripts\_destructible::destructible_part("front_wheel","vehicle_motorcycle_01_front_wheel_d",20,undefined,undefined,"no_melee",undefined,1.7); + common_scripts\_destructible::destructible_part("rear_wheel","vehicle_motorcycle_01_rear_wheel_d",20,undefined,undefined,"no_melee",undefined,1.7); +} + +//Function Number: 117 +vehicle_semi_truck(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_engine","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_engine","smoke/scooter_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,128,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,150,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/vehicle_explosion_scooter",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(3000,4000,128,150,50,300); + common_scripts\_destructible::destructible_state(undefined,"vehicle_scooter_vespa_destroyed",undefined,32,"no_melee"); +} + +//Function Number: 118 +vehicle_motorcycle(param_00) +{ + common_scripts\_destructible::destructible_create("vehicle_subcompact_" + param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,150,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,150,250,50,300,undefined,0,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_subcompact_" + param_00 + "_destroyed",undefined,32,"_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_subcompact_wheel_lf",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","vehicle_subcompact_wheel_lf",20,undefined,undefined,"no_melee",undefined,2.3); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("tag_door_left_back","vehicle_subcompact_" + param_00 + "_door_LB",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_door_right_back","vehicle_subcompact_" + param_00 + "_door_RB",undefined,undefined,undefined,undefined,1,1); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_subcompact_" + param_00 + "_mirror_L",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_subcompact_" + param_00 + "_mirror_R",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 119 +vehicle_scooter(param_00) +{ + common_scripts\_destructible::destructible_create("vehicle_van_" + param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_van_" + param_00 + "_destroyed",undefined,32,"_melee"); + var_01 = "tag_hood"; + common_scripts\_destructible::destructible_part(var_01,"vehicle_van_" + param_00 + "_hood",undefined,undefined,undefined,undefined,1,2.5); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_van_wheel_lf",20,undefined,undefined,"no_melee",undefined,2.3); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_van_wheel_lf",20,undefined,undefined,"no_melee",undefined,2.3); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("tag_door_right_back","vehicle_van_" + param_00 + "_door_RB",undefined,undefined,undefined,undefined,1,1); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_van_" + param_00 + "_mirror_L",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_van_" + param_00 + "_mirror_R",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 120 +vehicle_subcompact(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_uaz_van_destroyed",undefined,32,"_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_uaz_van_wheel_lf",20,undefined,undefined,"no_melee",undefined,2.3); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","vehicle_uaz_van_wheel_lf",20,undefined,undefined,"no_melee",undefined,1.6); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); +} + +//Function Number: 121 +vehicle_van(param_00) +{ + common_scripts\_destructible::destructible_create(param_00 + "_destructable","tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("TAG_DEATH_FX","explosions/vehicle_explosion_medium",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,param_00 + "_destroyed",undefined,32,"_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",param_00 + "_wheel_lf",20,undefined,undefined,"no_melee",1,1); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",param_00 + "_wheel_lf",20,undefined,undefined,"no_melee",1,1); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",param_00 + "_wheel_lf",20,undefined,undefined,"no_melee",1,1); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",param_00 + "_wheel_lf",20,undefined,undefined,"no_melee",1,1); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + common_scripts\_destructible::destructible_part("tag_mirror_left",param_00 + "_mirror_lf",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right",param_00 + "_mirror_rf",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 122 +vehicle_uaz_van(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("TAG_HOOD_FX","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("TAG_HOOD_FX","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("TAG_HOOD_FX","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("TAG_DEATH_FX","explosions/vehicle_explosion_medium",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_delivery_theme_park_truck_destroyed",undefined,32,"_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_van_sas_dark_wheel_lf",20,undefined,undefined,"no_melee",1,2.7); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee",1,1); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee",1,1); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee",1,1); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + var_01 = "TAG_GLASS_FRONT1"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "TAG_GLASS_FRONT2"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "TAG_GLASS_LEFT_BACK"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "TAG_GLASS_LEFT_FRONT"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "TAG_GLASS_RIGHT_FRONT"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "TAG_GLASS_RIGHT_BACK"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); +} + +//Function Number: 123 +vehicle_van_iw5(param_00,param_01) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,300,300,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_suburban_destroyed" + param_01,undefined,32,"_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_suburban_wheel_rf",20,undefined,undefined,"no_melee",undefined,2.3); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_suburban_wheel_rf",20,undefined,undefined,"no_melee",undefined,2.3); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_part("tag_door_left_back","vehicle_suburban_door_lb" + param_01,undefined,undefined,undefined,undefined,1,1); + var_02 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_02,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_02 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_02 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_02 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_02,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_02 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_02 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_02 = "tag_center_glass"; + common_scripts\_destructible::destructible_part(var_02,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_02 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_02 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_02 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_02,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_02 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_02 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_02 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_02,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_02 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_02 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_02 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_02,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_02 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_02 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_02 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_02,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_02 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_02 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_02 = "tag_glass_left_back_02"; + common_scripts\_destructible::destructible_part(var_02,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_02 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_02 = "tag_glass_right_back_02"; + common_scripts\_destructible::destructible_part(var_02,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_02 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_02 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_02,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_02,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(var_02 + "_d"); + var_02 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_02,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_02 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_02,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(var_02 + "_d"); +} + +//Function Number: 124 +vehicle_delivery_theme_park_truck_destructible(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/snowmobile_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,150,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,150,150,50,300,undefined,undefined,0.3,500); + common_scripts\_destructible::destructible_anim(destructible_gaspump("ehicle_snowmobile_destroy_01"),#animtree,"setanimknob",undefined,undefined,"vehicle_snowmobile_destroy_01"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_snowmobile_destroyed",undefined,32,"no_melee"); + var_01 = "right_wheel_01_jnt"; + common_scripts\_destructible::destructible_part(var_01,"vehicle_snowmobile_ski_right",800,undefined,undefined,undefined,1,2.5); + common_scripts\_destructible::destructible_part("TAG_BAG_CENTER","vehicle_snowmobile_bag_center",undefined,undefined,undefined,undefined,1,2); + common_scripts\_destructible::destructible_part("TAG_BAG_LEFT","vehicle_snowmobile_bag_left",undefined,undefined,undefined,undefined,1,2); + common_scripts\_destructible::destructible_part("TAG_BAG_RIGHT","vehicle_snowmobile_bag_right",undefined,undefined,undefined,undefined,1,2); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); +} + +//Function Number: 125 +vehicle_suburban(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",150,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(15); + common_scripts\_destructible::destructible_loopfx("tag_death_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,150,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_death_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_death_fx","fire/gas_pump_fire_damage",0.4); + common_scripts\_destructible::destructible_sound("gaspump01_flareup_med"); + common_scripts\_destructible::destructible_loopsound("gaspump01_fire_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_death_fx","fire/gas_pump_fire_damage",0.4); + common_scripts\_destructible::destructible_loopsound("gaspump01_fire_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,210,"allies"); + common_scripts\_destructible::destructible_sound("gaspump01_flareup_med"); + common_scripts\_destructible::destructible_loopfx("tag_fx","fire/gas_pump_fire_handle",0.05); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"gaspump01_hose"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,5,"_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/gas_pump_exp",0); + common_scripts\_destructible::destructible_sound("gaspump01_explode"); + common_scripts\_destructible::destructible_explode(6000,8000,210,300,50,300,undefined,undefined,0.3,500); + common_scripts\_destructible::destructible_state(undefined,"furniture_gaspump01_destroyed",undefined,undefined,"no_melee"); + common_scripts\_destructible::destructible_part("tag_panel_front01","furniture_gaspump01_panel01",80,undefined,undefined,undefined,1,1,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_panel_front02","furniture_gaspump01_panel02",40,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_panel_front03","furniture_gaspump01_panel03",40,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_sound("exp_gaspump_sparks"); + common_scripts\_destructible::destructible_fx("tag_panel_front03","props/electricbox4_explode"); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_panel_back01","furniture_gaspump01_panel01",110,undefined,undefined,undefined,1,1,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_panel_back02","furniture_gaspump01_panel02",40,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_panel_back03","furniture_gaspump01_panel03",40,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_sound("exp_gaspump_sparks"); + common_scripts\_destructible::destructible_fx("tag_panel_back03","props/electricbox4_explode"); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 126 +vehicle_snowmobile(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",1500,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(2); + common_scripts\_destructible::destructible_loopsound("electrical_transformer_sparks"); + common_scripts\_destructible::destructible_loopfx("tag_fx","explosions/electrical_transformer_spark_runner",0.8); + common_scripts\_destructible::destructible_healthdrain(12,0.2,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,500,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("electrical_transformer_sparks"); + common_scripts\_destructible::destructible_fx("tag_fx_junction","explosions/generator_sparks_c",0); + common_scripts\_destructible::destructible_loopfx("tag_fx_junction","fire/electrical_transformer_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_loopfx("tag_fx","explosions/electrical_transformer_spark_runner",0.8); + common_scripts\_destructible::destructible_healthdrain(12,0.2,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("electrical_transformer_sparks"); + common_scripts\_destructible::destructible_loopfx("tag_fx_junction","fire/electrical_transformer_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_loopfx("tag_fx","explosions/electrical_transformer_spark_runner",0.8); + common_scripts\_destructible::destructible_loopfx("tag_fx_valve","explosions/generator_spark_runner",0.6); + common_scripts\_destructible::destructible_healthdrain(12,0.2,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,500,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/electrical_transformer_explosion",0); + common_scripts\_destructible::destructible_sound("electrical_transformer01_explode"); + common_scripts\_destructible::destructible_explode(6000,8000,210,300,20,300,undefined,undefined,0.3,500); + common_scripts\_destructible::destructible_state(undefined,"com_electrical_transformer_large_des",undefined,undefined,"no_melee"); + common_scripts\_destructible::destructible_part("tag_door1","com_electrical_transformer_large_dam_door1",1500,undefined,undefined,undefined,0,1,undefined,1); + common_scripts\_destructible::destructible_sound("electrical_transformer01_explode_detail"); + common_scripts\_destructible::destructible_fx("tag_door1","explosions/generator_explosion"); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_door2","com_electrical_transformer_large_dam_door2",150,undefined,undefined,undefined,0,1,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_door3","com_electrical_transformer_large_dam_door3",150,undefined,undefined,undefined,0,1,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_door4","com_electrical_transformer_large_dam_door4",150,undefined,undefined,undefined,0,1,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_door5","com_electrical_transformer_large_dam_door5",1500,undefined,undefined,undefined,0,1,undefined,1); + common_scripts\_destructible::destructible_sound("electrical_transformer01_explode_detail"); + common_scripts\_destructible::destructible_fx("tag_door5","explosions/generator_explosion"); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_door6","com_electrical_transformer_large_dam_door6",150,undefined,undefined,undefined,0,1,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_door7","com_electrical_transformer_large_dam_door7",150,undefined,undefined,undefined,0,1,undefined,1); + common_scripts\_destructible::destructible_loopsound("electrical_transformer_sparks"); + common_scripts\_destructible::destructible_fx("tag_door7","props/electricbox4_explode"); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 127 +destructible_gaspump(param_00) +{ + return level.var_E13[param_00]; +} + +//Function Number: 128 +destructible_electrical_transformer_large(param_00) +{ + return level.var_E15[param_00]; +} + +//Function Number: 129 +get_precached_anim(param_00) +{ + common_scripts\_destructible::destructible_create("vehicle_coupe_" + param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,150,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,150,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_coupe_" + param_00 + "_destroyed",undefined,32,"_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","vehicle_coupe_wheel_lf",20,undefined,undefined,"no_melee",undefined,2.3); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("tag_door_left_front","vehicle_coupe_" + param_00 + "_door_LF",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_spoiler","vehicle_coupe_" + param_00 + "_spoiler",undefined,undefined,undefined,undefined,1,2); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_coupe_" + param_00 + "_mirror_L",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_coupe_" + param_00 + "_mirror_R",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 130 +get_precached_animtree(param_00) +{ + common_scripts\_destructible::destructible_create("vehicle_mini_destructible_" + param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,150,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,150,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_mini_destroyed_" + param_00,undefined,32,"_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee",undefined,2.3); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + var_01 = "TAG_GLASS_FRONT"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_D",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_mini_mirror_lf",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_mini_mirror_rf",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 131 +vehicle_coupe(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + var_01 = "TAG_GLASS_FRONT"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_D",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "TAG_GLASS_BACK"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_D",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "TAG_GLASS_LEFT_FRONT"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_D",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "TAG_GLASS_RIGHT_FRONT"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_D",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); +} + +//Function Number: 132 +vehicle_mini(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"uk_police_estate_destroyed",undefined,32,"_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","uk_police_estate_wheel_lf",20,undefined,undefined,"no_melee",undefined,1); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","uk_police_estate_wheel_lf",20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","uk_police_estate_wheel_lf",20,undefined,undefined,"no_melee",undefined,10); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","uk_police_estate_wheel_lf",20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + var_01 = "TAG_GLASS_FRONT"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_D",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "TAG_GLASS_BACK"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_D",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "TAG_GLASS_LEFT_FRONT"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_D",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "TAG_GLASS_RIGHT_FRONT"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_D",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "TAG_GLASS_LEFT_BACK"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_D",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "TAG_GLASS_RIGHT_BACK"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_D",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "TAG_GLASS_LEFT_BACK_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_D",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "TAG_GLASS_RIGHT_BACK_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_D",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); +} + +//Function Number: 133 +vehicle_uk_truck(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_uaz_winter_destroy",undefined,32,"_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_uaz_wheel_LF_d",20,undefined,undefined,"no_melee",undefined,1); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_uaz_wheel_LF_d",20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_uaz_wheel_RF_d",20,undefined,undefined,"no_melee",undefined,10); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","vehicle_uaz_wheel_RF_d",20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_uaz_winter_mirror_L",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_uaz_winter_mirror_R",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 134 +vehicle_uk_police_estate(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_uaz_fabric_dsr",undefined,32,"_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_uaz_wheel_LF_d",20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_uaz_wheel_LF_d",20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_uaz_wheel_RF_d",20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","vehicle_uaz_wheel_RF_d",20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_uaz_mirror_L",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_uaz_mirror_R",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 135 +vehicle_uaz_winter(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_uaz_hardtop_dsr",undefined,32,"_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_uaz_wheel_LF_d",20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_uaz_wheel_LF_d",20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_uaz_wheel_RF_d",20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","vehicle_uaz_wheel_RF_d",20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_uaz_mirror_L",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_uaz_mirror_R",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 136 +vehicle_uaz_fabric(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_jeep_destroyed",undefined,32,"_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_jeep_wheel_lf",20,undefined,undefined,"no_melee",undefined,2.7); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_jeep_wheel_lf",20,undefined,undefined,"no_melee",undefined,2.7); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); +} + +//Function Number: 137 +vehicle_uaz_hardtop(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_jeep_destroyed",undefined,32,"_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_jeep_wheel_lf",20,undefined,undefined,"no_melee",undefined,2.7); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_jeep_wheel_lf",20,undefined,undefined,"no_melee",undefined,2.7); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); +} + +//Function Number: 138 +vehicle_jeep(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_uaz_open_dsr",undefined,32,"_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_uaz_wheel_LF_d",20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_uaz_wheel_LF_d",20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_uaz_wheel_LF_d",20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","vehicle_uaz_wheel_LF_d",20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_uaz_mirror_L",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_uaz_mirror_R",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 139 +vehicle_jeep_dusty(param_00) +{ + common_scripts\_destructible::destructible_create("vehicle_india_compact_destructible_" + param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/india_compact_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_india_compact_destroyed_" + param_00,undefined,32,"_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_india_compact_wheel_lf_d",20,undefined,undefined,"no_melee",undefined,1.2); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_india_compact_mirror_l",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_india_compact_mirror_r",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 140 +vehicle_uaz_open(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/rickshaw_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_deathfx","explosions/india_rickshaw_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"india_vehicle_rksw_d",undefined,32,"_melee"); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,30,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + common_scripts\_destructible::destructible_part("tag_headlight_left","intro_vehicle_rksw_light_d",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 141 +vehicle_india_compact_destructible(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/rickshaw_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/india_rickshaw_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_tuk_tuk_destroyed",undefined,32,"_melee"); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,30,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,30,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + common_scripts\_destructible::destructible_part("tag_door_left_front","vehicle_tuk_tuk_door_left",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_door_left_front","vehicle_tuk_tuk_door_right",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_tuk_tuk_mirror",10,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 142 +vehicle_india_rickshaw(param_00) +{ + common_scripts\_destructible::destructible_create("vehicle_india_suv_" + param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_deathfx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_india_suv_" + param_00 + "_dsr",undefined,32,"_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_india_suv_wheel_lf_d",20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_india_suv_wheel_lf_d",20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_india_suv_wheel_rf_d",20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","vehicle_india_suv_wheel_rf_d",20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_uaz_mirror_L",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_uaz_mirror_R",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 143 +vehicle_tuk_tuk(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode_police"); + common_scripts\_destructible::destructible_explode(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_policecar_lapd_destroy",undefined,32,"_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_policecar_lapd_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_policecar_lapd_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_policecar_lapd_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","vehicle_policecar_lapd_wheel_LF",20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("tag_door_left_front","vehicle_policecar_lapd_door_LF",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_door_right_front","vehicle_policecar_lapd_door_RF",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_door_left_back","vehicle_policecar_lapd_door_LB",undefined,undefined,undefined,undefined,1,1); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_center_glass"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("TAG_CENTER_GLASS_FX","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_policecar_lapd_mirror_L",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_policecar_lapd_mirror_R",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 144 +vehicle_india_suv(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode_police"); + common_scripts\_destructible::destructible_explode(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_policecar_russia_destroy",undefined,32,"_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_policecar_russia_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_policecar_russia_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_policecar_russia_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","vehicle_policecar_russia_wheel_LF",20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_part("tag_door_left_front","vehicle_policecar_russia_door_LF",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_door_right_front","vehicle_policecar_russia_door_RF",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_door_left_back","vehicle_policecar_russia_door_LB",undefined,undefined,undefined,undefined,1,1); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_center_glass"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("TAG_CENTER_GLASS_FX","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_policecar_russia_mirror_L",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_policecar_russia_mirror_R",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 145 +vehicle_policecar(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::random_dynamic_attachment("tag_ad","vehicle_taxi_rooftop_ad_base","vehicle_taxi_rooftop_ad_1"); + common_scripts\_destructible::random_dynamic_attachment("tag_ad","vehicle_taxi_rooftop_ad_base","vehicle_taxi_rooftop_ad_2"); + common_scripts\_destructible::random_dynamic_attachment("tag_ad","vehicle_taxi_rooftop_ad_base","vehicle_taxi_rooftop_ad_3"); + common_scripts\_destructible::random_dynamic_attachment("tag_ad","vehicle_taxi_rooftop_ad_base","vehicle_taxi_rooftop_ad_4"); + common_scripts\_destructible::random_dynamic_attachment("tag_ad","vehicle_taxi_toplight",undefined,"taxi_ad_clip"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_taxi_yellow_destroy",undefined,32,"_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee",undefined,1.7); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee",undefined,1.7); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_car_alarm(); + var_01 = "TAG_CENTER_GLASS"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_taxi_mirror_l",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_taxi_mirror_r",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 146 +vehicle_policecar_russia(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::random_dynamic_attachment("tag_ad","vehicle_taxi_toplight_dubai",undefined,"taxi_ad_clip"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::destructible_explode(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0D89::func_6F6E(%F,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_taxi_yellow_destroy_dubai",undefined,32,"_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee",undefined,1.7); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee",undefined,1.7); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0D89::func_7562(%F,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","llet"); + common_scripts\_destructible::destructible_car_alarm(); + var_01 = "TAG_CENTER_GLASS"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_taxi_mirror_l",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_taxi_mirror_r",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 147 +vehicle_taxi(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_camera_tilt",0,undefined,32); + common_scripts\_destructible::destructible_anim(destructible_gaspump("ecurity_camera_idle"),#animtree,"setanimknob",undefined,undefined,"security_camera_idle"); + common_scripts\_destructible::destructible_state("tag_camera_tilt","com_security_camera_tilt_animated",75); + common_scripts\_destructible::destructible_anim(destructible_gaspump("ecurity_camera_destroy"),#animtree,"setanimknob",undefined,undefined,"security_camera_destroy"); + common_scripts\_destructible::destructible_fx("tag_fx","props/security_camera_explosion_moving"); + common_scripts\_destructible::destructible_sound("security_camera_sparks"); + common_scripts\_destructible::destructible_state(undefined,"com_security_camera_d_tilt_animated",undefined,undefined,"no_melee"); +} + +//Function Number: 148 +vehicle_taxi_dubai(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",100,undefined,32); + common_scripts\_destructible::destructible_anim(destructible_gaspump("c130_building_collapse"),#animtree,"setanimknob",undefined,undefined,"ac130_building_collapse"); + common_scripts\_destructible::destructible_fx("tag_fx","misc/building_collapse_paris_ac130"); + common_scripts\_destructible::destructible_fx("tag_fx_base","misc/building_collapse_paris_ac130_ground"); + common_scripts\_destructible::destructible_fx("tag_fx_crack","misc/building_collapse_paris_ac130_cracks"); + common_scripts\_destructible::destructible_state(undefined,"building_collapse_paris_ac130_dest",undefined,undefined,"no_melee"); +} + +//Function Number: 149 +toy_security_camera(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",100,undefined,32); + common_scripts\_destructible::destructible_anim(destructible_gaspump("ondon_gas_attack"),#animtree,"setanimknob",undefined,undefined,"london_gas_attack"); + common_scripts\_destructible::destructible_fx("tag_origin","smoke/poison_gas_attack"); + common_scripts\_destructible::destructible_state(undefined,"fx_gas_attack",undefined,undefined,"no_melee"); +} + +//Function Number: 150 +toy_building_collapse_paris_ac130(param_00) +{ + common_scripts\_destructible::destructible_create("toy_arcade_machine" + param_00,"tag_origin",0,undefined,32); + common_scripts\_destructible::destructible_state("tag_origin","arcade_machine" + param_00,75); + common_scripts\_destructible::destructible_fx("tag_fx","props/arcade_machine_exp"); + common_scripts\_destructible::destructible_fx("tag_fx2","props/arcade_machine_coins"); + common_scripts\_destructible::destructible_sound("arcade_machine_destroy"); + common_scripts\_destructible::destructible_state(undefined,"arcade_machine" + param_00 + "_des",undefined,undefined,"no_melee"); +} + +//Function Number: 151 +toy_poison_gas_attack(param_00) +{ + common_scripts\_destructible::destructible_create("toy_pinball_machine" + param_00,"tag_origin",0,undefined,32); + common_scripts\_destructible::destructible_state("tag_origin","pinball_machine" + param_00,75); + common_scripts\_destructible::destructible_fx("tag_fx","props/pinball_machine_exp",undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_fx2","props/arcade_machine_coins"); + common_scripts\_destructible::destructible_fx("tag_fx3","props/pinball_machine_glass"); + common_scripts\_destructible::destructible_sound("pinball_machine_destroy"); + common_scripts\_destructible::destructible_state(undefined,"pinball_machine" + param_00 + "_des",undefined,undefined,"no_melee"); +} + +//Function Number: 152 +toy_arcade_machine(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",0,undefined,32); + common_scripts\_destructible::destructible_loopsound("fortune_machine_idle"); + common_scripts\_destructible::destructible_loopfx("J_Eye_RI","props/fortune_machine_glow_eyes",2.9); + common_scripts\_destructible::destructible_loopfx("J_Eye_LE","props/fortune_machine_glow_eyes",2.9); + common_scripts\_destructible::destructible_loopfx("tag_fx3","props/fortune_machine_glow_ball",4); + common_scripts\_destructible::destructible_anim(destructible_gaspump("ortune_machine_anim"),#animtree,"setanimknob",undefined,undefined,"fortune_machine_anim"); + common_scripts\_destructible::destructible_state("tag_origin","fortune_machine",75); + common_scripts\_destructible::destructible_fx("tag_fx","props/fortune_machine_exp",undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_fx2","props/fortune_machine_tickets"); + common_scripts\_destructible::destructible_sound("pinball_machine_destroy"); + common_scripts\_destructible::destructible_anim(destructible_gaspump("ortune_machine_des"),#animtree,"setanimknob",undefined,undefined,"fortune_machine_des"); + common_scripts\_destructible::destructible_explode(20,2000,20,20,40,40,undefined,64); + common_scripts\_destructible::destructible_state(undefined,"fortune_machine_des",undefined,undefined,"no_melee"); +} + +//Function Number: 153 +toy_pinball_machine(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",120,undefined,32); + common_scripts\_destructible::destructible_fx("tag_fx","props/garbage_spew_des",1,"splash"); + common_scripts\_destructible::destructible_fx("tag_fx","props/garbage_spew",1,common_scripts\_destructible::damage_not("splash")); + common_scripts\_destructible::destructible_sound("exp_trashcan_sweet"); + common_scripts\_destructible::destructible_explode(600,651,1,1,10,20); + common_scripts\_destructible::destructible_state("tag_origin","trashcan_clown_base",undefined,undefined,undefined,undefined,undefined,0); + common_scripts\_destructible::destructible_part("tag_fx","trashcan_clown_lid",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 154 +toy_fortune_machine(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",25,undefined,32); + common_scripts\_destructible::destructible_fx("tag_origin","dust/dust_shanty_explode"); + common_scripts\_destructible::destructible_anim(destructible_gaspump("fr_shanty01_explode"),#animtree,"setanimknob",undefined,undefined,"afr_shanty01_explode"); + common_scripts\_destructible::destructible_state(undefined,"afr_shanty01",undefined,undefined,"no_melee"); +} + +//Function Number: 155 +toy_trashcan_clown(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",1,undefined,32); + common_scripts\_destructible::destructible_anim(destructible_gaspump("y_harbor_slava_r2a_des"),#animtree,"setanim"); + common_scripts\_destructible::destructible_fx("tag_explosionA","maps/ny_harbor/ny_battleship_explosion"); + common_scripts\_destructible::destructible_fx("tag_explosionB","maps/ny_harbor/ny_battleship_explosion"); +} + +//Function Number: 156 +toy_afrshanty1(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",5,undefined,undefined); + common_scripts\_destructible::destructible_fx("tag_fx1","props/skylight_destroyed_windowglass"); + common_scripts\_destructible::destructible_fx("tag_fx4","props/skylight_destroyed_windowglass"); + common_scripts\_destructible::destructible_fx("tag_fx7","props/skylight_destroyed_windowglass"); + common_scripts\_destructible::destructible_fx("tag_fx4","props/skylight_destroyed_pit"); + common_scripts\_destructible::destructible_state("tag_origin","ny_rooftop_skylight_destroyed",undefined,undefined,"no_melee"); +} + +//Function Number: 157 +vehicle_slava_ny_harbor_zonea(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",150,undefined,32); + common_scripts\_destructible::destructible_fx("tag_origin","props/satellite_dish_big_des"); + common_scripts\_destructible::destructible_state("tag_origin","com_satellite_dish_big_destroyed",undefined,undefined,"no_melee"); +} + +//Function Number: 158 +rooftop_skylight_destructible(param_00,param_01,param_02,param_03) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",150,undefined,32); + common_scripts\_destructible::destructible_fx("tag_fx",param_02); + common_scripts\_destructible::destructible_state("tag_origin",param_01,undefined,undefined,"no_meele"); + if(isdefined(param_03)) + { + common_scripts\_destructible::destructible_sound(param_03); + } +} + +//Function Number: 159 +satellite_dish_big_destructible(param_00,param_01,param_02,param_03) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",1150,undefined,32); + common_scripts\_destructible::destructible_state("tag_origin",param_01,undefined,undefined,"no_meele"); + common_scripts\_destructible::destructible_fx("tag_fx",param_02); + common_scripts\_destructible::destructible_fx("tag_fx",param_02); +} + +//Function Number: 160 +dest_onestate(param_00,param_01) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",150,undefined,32); + common_scripts\_destructible::destructible_fx("tag_fx","misc/light_blowout_ceiling"); + common_scripts\_destructible::destructible_fx("tag_fx_wire","misc/light_blowout_wire_spark"); + common_scripts\_destructible::destructible_state("tag_origin",param_01,undefined,undefined,"no_meele"); +} + +//Function Number: 161 +dest_pb_planter(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("tag_origin","rus_vx_gas_canister_destroyed",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/rus_vx_gas_canister",0); + common_scripts\_destructible::destructible_explode(7000,8000,150,256,16,150,undefined); +} \ No newline at end of file diff --git a/MW3/PC/SP/common_scripts/_dynamic_world.gsc b/MW3/PC/SP/common_scripts/_dynamic_world.gsc new file mode 100644 index 0000000..ac12967 --- /dev/null +++ b/MW3/PC/SP/common_scripts/_dynamic_world.gsc @@ -0,0 +1,1488 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: common_scripts\_dynamic_world.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 64 + * Decompile Time: 1131 ms + * Timestamp: 10/27/2023 2:22:55 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + common_scripts\utility::array_thread(getentarray("com_wall_fan_blade_rotate_slow","targetname"),::fan_blade_rotate,"veryslow"); + common_scripts\utility::array_thread(getentarray("com_wall_fan_blade_rotate","targetname"),::fan_blade_rotate,"slow"); + common_scripts\utility::array_thread(getentarray("com_wall_fan_blade_rotate_fast","targetname"),::fan_blade_rotate,"fast"); + var_00 = []; + player_init(); + foreach(var_04, var_02 in var_7B) + { + var_03 = getentarray(var_04,"classname"); + common_scripts\utility::array_thread(var_03,::triggertouchthink); + common_scripts\utility::array_thread(var_03,var_02); + } + + common_scripts\utility::array_thread(getentarray("vending_machine","targetname"),::vending_machine); + common_scripts\utility::array_thread(getentarray("toggle","targetname"),::use_toggle); + level thread onplayerconnect(); + var_05 = getent("civilian_jet_origin","targetname"); + if(isdefined(var_05)) + { + var_05 thread civilian_jet_flyby(); + } +} + +//Function Number: 2 +onplayerconnect() +{ + for(;;) + { + level waittill("connecting",var_00); + var_00 thread movementtracker(); + } +} + +//Function Number: 3 +player_init() +{ + if(common_scripts\utility::issp()) + { + foreach(var_01 in level.players) + { + var_01.touchtriggers = []; + var_01 thread movementtracker(); + } + } +} + +//Function Number: 4 +ai_init() +{ + self.touchtriggers = []; + thread movementtracker(); +} + +//Function Number: 5 +civilian_jet_flyby() +{ + level endon("game_ended"); + jet_init(); + level waittill("prematch_over"); + for(;;) + { + thread jet_timer(); + self waittill("start_flyby"); + thread jet_flyby(); + self waittill("flyby_done"); + jet_reset(); + } +} + +//Function Number: 6 +jet_init() +{ + self.var_1D1E = getentarray(self.target,"targetname"); + self.var_1D1F = getent("civilian_jet_flyto","targetname"); + self.var_1D20 = getentarray("engine_fx","targetname"); + self.var_1D21 = getentarray("flash_fx","targetname"); + self.var_1D22 = loadfx("fire/jet_afterburner"); + self.var_1D23 = loadfx("misc/aircraft_light_wingtip_red"); + self.var_1D24 = loadfx("misc/aircraft_light_wingtip_green"); + self.var_1D25 = loadfx("misc/aircraft_light_red_blink"); + level.civilianjetflyby = undefined; + var_00 = vectornormalize(self.origin - self.var_1D1F.origin) * 20000; + self.var_1D1F.origin = self.var_1D1F.origin - var_00; + self.origin = self.origin + var_00; + foreach(var_02 in self.var_1D1E) + { + var_02.origin = var_02.origin + var_00; + var_02.old_origin = var_02.origin; + var_02 hide(); + } + + foreach(var_05 in self.var_1D20) + { + var_05.origin = var_05.origin + var_00; + } + + foreach(var_08 in self.var_1D21) + { + var_08.origin = var_08.origin + var_00; + } + + var_0A = self.origin; + var_0B = self.var_1D1F.origin; + self.var_1D28 = var_0B - var_0A; + var_0C = 2000; + var_0D = abs(distance(var_0A,var_0B)); + self.var_1D29 = var_0D / var_0C; +} + +//Function Number: 7 +jet_reset() +{ + foreach(var_01 in self.var_1D1E) + { + var_01.origin = var_01.old_origin; + var_01 hide(); + } +} + +//Function Number: 8 +jet_timer() +{ + level endon("game_ended"); + var_00 = gettimeinterval(); + var_01 = max(10,var_00); + var_01 = min(var_01,100); + if(getdvar("jet_flyby_timer") != "") + { + level.var_1D2C = 5 + getdvarint("jet_flyby_timer"); + } + else + { + level.var_1D2C = 0.25 + randomfloatrange(0.3,0.7) * 60 * var_01; + } + + wait level.var_1D2C; + while(isdefined(level.airstrikeinprogress) || isdefined(level.ac130player) || isdefined(level.chopper) || isdefined(level.remotemissileinprogress)) + { + wait 0.05; + } + + self notify("start_flyby"); + level.civilianjetflyby = 1; + self waittill("flyby_done"); + level.civilianjetflyby = undefined; +} + +//Function Number: 9 +gettimeinterval() +{ + if(common_scripts\utility::issp()) + { + return 10; + } + + if(isdefined(game["status"]) && game["status"] == "overtime") + { + return 1; + } + + return getwatcheddvar("timelimit"); +} + +//Function Number: 10 +getwatcheddvar(param_00) +{ + param_00 = "scr_" + level.gametype + "_" + param_00; + if(isdefined(level.overridewatchdvars) && isdefined(level.overridewatchdvars[param_00])) + { + return level.overridewatchdvars[param_00]; + } + + return level.watchdvars[param_00].value; +} + +//Function Number: 11 +jet_flyby() +{ + foreach(var_01 in self.var_1D1E) + { + var_01 show(); + } + + var_03 = []; + var_04 = []; + foreach(var_06 in self.var_1D20) + { + var_07 = spawn("script_model",var_06.origin); + var_07 setmodel("tag_origin"); + var_07.angles = var_06.angles; + var_03[var_03.size] = var_07; + } + + foreach(var_0A in self.var_1D21) + { + var_0B = spawn("script_model",var_0A.origin); + var_0B setmodel("tag_origin"); + var_0B.color = var_0A.script_noteworthy; + var_0B.angles = var_0A.angles; + var_04[var_04.size] = var_0B; + } + + thread jet_planesound(self.var_1D1E[0],level.mapcenter); + wait 0.05; + foreach(var_07 in var_03) + { + playfxontag(self.var_1D22,var_07,"tag_origin"); + } + + foreach(var_0B in var_04) + { + if(isdefined(var_0B.color) && var_0B.color == "blink") + { + playfxontag(self.var_1D25,var_0B,"tag_origin"); + continue; + } + + if(isdefined(var_0B.color) && var_0B.color == "red") + { + playfxontag(self.var_1D23,var_0B,"tag_origin"); + continue; + } + + playfxontag(self.var_1D24,var_0B,"tag_origin"); + } + + foreach(var_01 in self.var_1D1E) + { + var_01 moveto(var_01.origin + self.var_1D28,self.var_1D29); + } + + foreach(var_07 in var_03) + { + var_07 moveto(var_07.origin + self.var_1D28,self.var_1D29); + } + + foreach(var_0B in var_04) + { + var_0B moveto(var_0B.origin + self.var_1D28,self.var_1D29); + } + + wait self.var_1D29 + 1; + foreach(var_07 in var_03) + { + var_07 delete(); + } + + foreach(var_0B in var_04) + { + var_0B delete(); + } + + self notify("flyby_done"); +} + +//Function Number: 12 +jet_planesound(param_00,param_01) +{ + param_00 thread playsound_loop_on_ent("veh_mig29_dist_loop"); + while(!targetisclose(param_00,param_01)) + { + wait 0.05; + } + + param_00 thread playsound_loop_on_ent("veh_mig29_close_loop"); + while(targetisinfront(param_00,param_01)) + { + wait 0.05; + } + + wait 0.5; + param_00 thread playsound_float("veh_mig29_sonic_boom"); + while(targetisclose(param_00,param_01)) + { + wait 0.05; + } + + param_00 notify("stop soundveh_mig29_close_loop"); + self waittill("flyby_done"); + param_00 notify("stop soundveh_mig29_dist_loop"); +} + +//Function Number: 13 +playsound_float(param_00,param_01,param_02) +{ + var_03 = spawn("script_origin",(0,0,1)); + var_03 hide(); + if(!isdefined(param_01)) + { + param_01 = self.origin; + } + + var_03.origin = param_01; + if(isdefined(param_02) && param_02) + { + var_03 playsoundasmaster(param_00); + } + else + { + var_03 playsound(param_00); + } + + wait 10; + var_03 delete(); +} + +//Function Number: 14 +playsound_loop_on_ent(param_00,param_01) +{ + var_02 = spawn("script_origin",(0,0,0)); + var_02 hide(); + var_02 endon("death"); + thread common_scripts\utility::delete_on_death(var_02); + if(isdefined(param_01)) + { + var_02.origin = self.origin + param_01; + var_02.angles = self.angles; + var_02 linkto(self); + } + else + { + var_02.origin = self.origin; + var_02.angles = self.angles; + var_02 linkto(self); + } + + var_02 playloopsound(param_00); + self waittill("stop sound" + param_00); + var_02 stoploopsound(param_00); + var_02 delete(); +} + +//Function Number: 15 +targetisinfront(param_00,param_01) +{ + var_02 = anglestoforward(common_scripts\utility::flat_angle(param_00.angles)); + var_03 = vectornormalize(common_scripts\utility::flat_origin(param_01) - param_00.origin); + var_04 = vectordot(var_02,var_03); + if(var_04 > 0) + { + return 1; + } + + return 0; +} + +//Function Number: 16 +targetisclose(param_00,param_01) +{ + var_02 = targetisinfront(param_00,param_01); + if(var_02) + { + var_03 = 1; + } + else + { + var_03 = -1; + } + + var_04 = common_scripts\utility::flat_origin(param_00.origin); + var_05 = var_04 + anglestoforward(common_scripts\utility::flat_angle(param_00.angles)) * var_03 * 100000; + var_06 = pointonsegmentnearesttopoint(var_04,var_05,param_01); + var_07 = distance(var_04,var_06); + if(var_07 < 3000) + { + return 1; + } + + return 0; +} + +//Function Number: 17 +vending_machine() +{ + level endon("game_ended"); + self endon("death"); + self setcursorhint("HINT_ACTIVATE"); + self.var_1D3F = getent(self.target,"targetname"); + var_00 = getent(self.var_1D3F.target,"targetname"); + var_01 = getent(var_00.target,"targetname"); + var_02 = getent(var_01.target,"targetname"); + self.var_1D40 = var_02.origin; + var_03 = getent(var_02.target,"targetname"); + self.var_1D41 = var_03.origin; + if(isdefined(var_03.target)) + { + self.var_1D42 = getent(var_03.target,"targetname").origin; + } + + self.var_1D3F setcandamage(1); + self.var_1D43 = self.var_1D3F.model; + self.var_1D44 = self.var_1D3F.script_noteworthy; + self.var_1D45 = var_00.model; + self.var_1D46 = var_00.origin; + self.var_1D47 = var_00.angles; + self.var_1D48 = var_01.origin; + self.var_1D49 = var_01.angles; + precachemodel(self.var_1D44); + var_00 delete(); + var_01 delete(); + var_02 delete(); + var_03 delete(); + self.var_1D4A = []; + self.var_1D4B = 12; + self.var_1D4C = undefined; + self.var_1D4D = 400; + thread vending_machine_damage_monitor(self.var_1D3F); + self playloopsound("vending_machine_hum"); + for(;;) + { + self waittill("trigger",var_04); + self playsound("vending_machine_button_press"); + if(!self.var_1D4B) + { + continue; + } + + if(isdefined(self.var_1D4C)) + { + soda_can_eject(); + } + + soda_can_drop(spawn_soda()); + wait 0.05; + } +} + +//Function Number: 18 +vending_machine_damage_monitor(param_00) +{ + level endon("game_ended"); + var_01 = "mod_grenade mod_projectile mod_explosive mod_grenade_splash mod_projectile_splash splash"; + var_02 = loadfx("explosions/tv_explosion"); + for(;;) + { + var_03 = undefined; + var_04 = undefined; + var_05 = undefined; + var_06 = undefined; + var_07 = undefined; + param_00 waittill("damage",var_03,var_04,var_05,var_06,var_07); + if(isdefined(var_07)) + { + if(issubstr(var_01,tolower(var_07))) + { + var_03 = var_03 * 3; + } + + self.var_1D4D = self.var_1D4D - var_03; + if(self.var_1D4D > 0) + { + continue; + } + + self notify("death"); + self.origin = self.origin + (0,0,10000); + if(!isdefined(self.var_1D42)) + { + var_08 = self.var_1D3F.origin + (37,-31,52); + } + else + { + var_08 = self.var_1D42; + } + + playfx(var_02,var_08); + self.var_1D3F setmodel(self.var_1D44); + while(self.var_1D4B > 0) + { + if(isdefined(self.var_1D4C)) + { + soda_can_eject(); + } + + soda_can_drop(spawn_soda()); + wait 0.05; + } + + self stoploopsound("vending_machine_hum"); + return; + } + } +} + +//Function Number: 19 +spawn_soda() +{ + var_00 = spawn("script_model",self.var_1D46); + var_00 setmodel(self.var_1D45); + var_00.origin = self.var_1D46; + var_00.angles = self.var_1D47; + return var_00; +} + +//Function Number: 20 +soda_can_drop(param_00) +{ + param_00 moveto(self.var_1D48,0.2); + param_00 playsound("vending_machine_soda_drop"); + wait 0.2; + self.var_1D4C = param_00; + self.var_1D4B--; +} + +//Function Number: 21 +soda_can_eject() +{ + self endon("death"); + if(isdefined(self.var_1D4C.var_1D52) && self.var_1D4C.var_1D52 == 1) + { + return; + } + + var_00 = 1; + var_01 = var_00 * -999; + var_02 = int(-25536); + var_03 = (int(var_02 / 2),int(var_02 / 2),0) - (randomint(var_02),randomint(var_02),0); + var_04 = vectornormalize(self.var_1D41 - self.var_1D40 + var_03); + var_05 = var_04 * randomfloatrange(var_01,var_00); + self.var_1D4C physicslaunchclient(self.var_1D40,var_05); + self.var_1D4C.var_1D52 = 1; +} + +//Function Number: 22 +freefall() +{ + level endon("game_ended"); + var_00 = "briefcase_bomb_mp"; + precacheitem(var_00); + for(;;) + { + self waittill("trigger_enter",var_01); + if(!var_01 hasweapon(var_00)) + { + var_01 playsound("freefall_death"); + var_01 giveweapon(var_00); + var_01 setweaponammostock(var_00,0); + var_01 setweaponammoclip(var_00,0); + var_01 switchtoweapon(var_00); + } + } +} + +//Function Number: 23 +metal_detector() +{ + level endon("game_ended"); + var_00 = getent(self.target,"targetname"); + var_00 enablegrenadetouchdamage(); + var_01 = getent(var_00.target,"targetname"); + var_02 = getent(var_01.target,"targetname"); + var_03 = getent(var_02.target,"targetname"); + var_04 = getent(var_03.target,"targetname"); + var_05 = []; + var_06 = min(var_01.origin[0],var_02.origin[0]); + var_05[0] = var_06; + var_07 = max(var_01.origin[0],var_02.origin[0]); + var_05[1] = var_07; + var_08 = min(var_01.origin[1],var_02.origin[1]); + var_05[2] = var_08; + var_09 = max(var_01.origin[1],var_02.origin[1]); + var_05[3] = var_09; + var_0A = min(var_01.origin[2],var_02.origin[2]); + var_05[4] = var_0A; + var_0B = max(var_01.origin[2],var_02.origin[2]); + var_05[5] = var_0B; + var_01 delete(); + var_02 delete(); + if(!common_scripts\utility::issp()) + { + self.var_1D55 = 7; + } + else + { + self.var_1D55 = 2; + } + + self.var_1D56 = 0; + self.var_1D57 = 0; + self.var_1D58 = 0; + thread metal_detector_dmg_monitor(var_00); + thread metal_detector_touch_monitor(); + thread metal_detector_weapons(var_05,"weapon_claymore","weapon_c4"); + var_0C = (var_03.origin[0],var_03.origin[1],var_0B); + var_0D = (var_04.origin[0],var_04.origin[1],var_0B); + var_0E = loadfx("props/metal_detector_light"); + for(;;) + { + common_scripts\utility::waittill_any("dmg_triggered","touch_triggered","weapon_triggered"); + thread playsound_and_light("alarm_metal_detector",var_0E,var_0C,var_0D); + } +} + +//Function Number: 24 +playsound_and_light(param_00,param_01,param_02,param_03) +{ + level endon("game_ended"); + if(!self.var_1D56) + { + self.var_1D56 = 1; + thread annoyance_tracker(); + if(!self.var_1D57) + { + self playsound(param_00); + } + + playfx(param_01,param_02); + playfx(param_01,param_03); + wait self.var_1D55; + self.var_1D56 = 0; + } +} + +//Function Number: 25 +annoyance_tracker() +{ + level endon("game_ended"); + if(!self.var_1D58) + { + return; + } + + var_00 = self.var_1D55 + 0.15; + if(self.var_1D58) + { + self.var_1D58--; + } + else + { + self.var_1D57 = 1; + } + + var_01 = gettime(); + var_02 = 7; + if(common_scripts\utility::issp()) + { + var_02 = 2; + } + + waittill_any_or_timeout("dmg_triggered","touch_triggered","weapon_triggered",var_02 + 2); + var_03 = gettime() - var_01; + if(var_03 > var_02 * 1000 + 1150) + { + self.var_1D57 = 0; + self.var_1D58 = 0; + } +} + +//Function Number: 26 +waittill_any_or_timeout(param_00,param_01,param_02,param_03) +{ + level endon("game_ended"); + self endon(param_00); + self endon(param_01); + self endon(param_02); + wait param_03; +} + +//Function Number: 27 +metal_detector_weapons(param_00,param_01,param_02) +{ + level endon("game_ended"); + for(;;) + { + waittill_weapon_placed(); + var_03 = getentarray("grenade","classname"); + foreach(var_05 in var_03) + { + if(isdefined(var_05.model) && var_05.model == param_01 || var_05.model == param_02) + { + if(isinbound(var_05,param_00)) + { + thread weapon_notify_loop(var_05,param_00); + } + } + } + } +} + +//Function Number: 28 +waittill_weapon_placed() +{ + level endon("game_ended"); + self endon("dmg_triggered"); + self waittill("touch_triggered"); +} + +//Function Number: 29 +weapon_notify_loop(param_00,param_01) +{ + param_00 endon("death"); + while(isinbound(param_00,param_01)) + { + self notify("weapon_triggered"); + wait self.var_1D55; + } +} + +//Function Number: 30 +isinbound(param_00,param_01) +{ + var_02 = param_01[0]; + var_03 = param_01[1]; + var_04 = param_01[2]; + var_05 = param_01[3]; + var_06 = param_01[4]; + var_07 = param_01[5]; + var_08 = param_00.origin[0]; + var_09 = param_00.origin[1]; + var_0A = param_00.origin[2]; + if(isinbound_single(var_08,var_02,var_03)) + { + if(isinbound_single(var_09,var_04,var_05)) + { + if(isinbound_single(var_0A,var_06,var_07)) + { + return 1; + } + } + } + + return 0; +} + +//Function Number: 31 +isinbound_single(param_00,param_01,param_02) +{ + if(param_00 > param_01 && param_00 < param_02) + { + return 1; + } + + return 0; +} + +//Function Number: 32 +metal_detector_dmg_monitor(param_00) +{ + level endon("game_ended"); + for(;;) + { + param_00 waittill("damage",var_01,var_02,var_03,var_04,var_05); + if(isdefined(var_05) && alarm_validate_damage(var_05)) + { + self notify("dmg_triggered"); + } + } +} + +//Function Number: 33 +metal_detector_touch_monitor() +{ + level endon("game_ended"); + for(;;) + { + self waittill("trigger_enter"); + while(anythingtouchingtrigger(self)) + { + self notify("touch_triggered"); + wait self.var_1D55; + } + } +} + +//Function Number: 34 +alarm_validate_damage(param_00) +{ + var_01 = "mod_melee melee mod_grenade mod_projectile mod_explosive mod_impact"; + var_02 = strtok(var_01," "); + foreach(var_04 in var_02) + { + if(tolower(var_04) == tolower(param_00)) + { + return 1; + } + } + + return 0; +} + +//Function Number: 35 +creaky_board() +{ + level endon("game_ended"); + for(;;) + { + self waittill("trigger_enter",var_00); + var_00 thread do_creak(self); + } +} + +//Function Number: 36 +do_creak(param_00) +{ + self endon("disconnect"); + self endon("death"); + self playsound("step_walk_plr_woodcreak_on"); + for(;;) + { + self waittill("trigger_leave",var_01); + if(param_00 != var_01) + { + continue; + } + + self playsound("step_walk_plr_woodcreak_off"); + } +} + +//Function Number: 37 +motion_light() +{ + level endon("game_ended"); + self.var_1D66 = 1; + self.var_1D67 = 0; + var_00 = getentarray(self.target,"targetname"); + precachemodel("com_two_light_fixture_off"); + precachemodel("com_two_light_fixture_on"); + foreach(var_02 in var_00) + { + var_02.var_1D68 = []; + var_03 = getent(var_02.target,"targetname"); + if(!isdefined(var_03.target)) + { + continue; + } + + var_02.var_1D68 = getentarray(var_03.target,"targetname"); + } + + for(;;) + { + self waittill("trigger_enter"); + while(anythingtouchingtrigger(self)) + { + var_05 = 0; + foreach(var_07 in self.touchlist) + { + if(isdefined(var_07.var_1D6A) && var_07.var_1D6A > 5) + { + var_05 = 1; + } + } + + if(var_05) + { + if(!self.var_1D67) + { + self.var_1D67 = 1; + var_00[0] playsound("switch_auto_lights_on"); + foreach(var_02 in var_00) + { + var_02 setlightintensity(1); + if(isdefined(var_02.var_1D68)) + { + foreach(var_0B in var_02.var_1D68) + { + var_0B setmodel("com_two_light_fixture_on"); + } + } + } + } + + thread motion_light_timeout(var_00,10); + } + + wait 0.05; + } + } +} + +//Function Number: 38 +motion_light_timeout(param_00,param_01) +{ + self notify("motion_light_timeout"); + self endon("motion_light_timeout"); + wait param_01; + foreach(var_03 in param_00) + { + var_03 setlightintensity(0); + if(isdefined(var_03.var_1D68)) + { + foreach(var_05 in var_03.var_1D68) + { + var_05 setmodel("com_two_light_fixture_off"); + } + } + } + + param_00[0] playsound("switch_auto_lights_off"); + self.var_1D67 = 0; +} + +//Function Number: 39 +outdoor_motion_dlight() +{ + if(!isdefined(level.var_1D6D)) + { + level.var_1D6D = loadfx("misc/outdoor_motion_light"); + } + + level endon("game_ended"); + self.var_1D66 = 1; + self.var_1D67 = 0; + var_00 = getent(self.target,"targetname"); + var_01 = getentarray(var_00.target,"targetname"); + precachemodel("com_two_light_fixture_off"); + precachemodel("com_two_light_fixture_on"); + for(;;) + { + self waittill("trigger_enter"); + while(anythingtouchingtrigger(self)) + { + var_02 = 0; + foreach(var_04 in self.touchlist) + { + if(isdefined(var_04.var_1D6A) && var_04.var_1D6A > 5) + { + var_02 = 1; + } + } + + if(var_02) + { + if(!self.var_1D67) + { + self.var_1D67 = 1; + var_00 playsound("switch_auto_lights_on"); + var_00 setmodel("com_two_light_fixture_on"); + foreach(var_07 in var_01) + { + var_07.var_1D6E = spawn("script_model",var_07.origin); + var_07.var_1D6E setmodel("tag_origin"); + playfxontag(level.var_1D6D,var_07.var_1D6E,"tag_origin"); + } + } + + thread outdoor_motion_dlight_timeout(var_00,var_01,10); + } + + wait 0.05; + } + } +} + +//Function Number: 40 +outdoor_motion_dlight_timeout(param_00,param_01,param_02) +{ + self notify("motion_light_timeout"); + self endon("motion_light_timeout"); + wait param_02; + foreach(var_04 in param_01) + { + var_04.var_1D6E delete(); + } + + param_00 playsound("switch_auto_lights_off"); + param_00 setmodel("com_two_light_fixture_off"); + self.var_1D67 = 0; +} + +//Function Number: 41 +dog_bark() +{ + level endon("game_ended"); + self.var_1D66 = 1; + var_00 = getent(self.target,"targetname"); + for(;;) + { + self waittill("trigger_enter",var_01); + while(anythingtouchingtrigger(self)) + { + var_02 = 0; + foreach(var_04 in self.touchlist) + { + if(isdefined(var_04.var_1D6A) && var_04.var_1D6A > var_02) + { + var_02 = var_04.var_1D6A; + } + } + + if(var_02 > 6) + { + var_00 playsound("dyn_anml_dog_bark"); + wait randomfloatrange(16 / var_02,16 / var_02 + randomfloat(1)); + continue; + } + + wait 0.05; + } + } +} + +//Function Number: 42 +trigger_door() +{ + var_00 = getent(self.target,"targetname"); + self.var_1D72 = var_00; + self.var_1D73 = getvectorrightangle(vectornormalize(self getorigin() - var_00 getorigin())); + var_00.var_1D74 = var_00.angles[1]; + var_01 = 1; + for(;;) + { + self waittill("trigger_enter",var_02); + var_00 thread dooropen(var_01,getdoorside(var_02)); + if(anythingtouchingtrigger(self)) + { + self waittill("trigger_empty"); + } + + wait 3; + if(anythingtouchingtrigger(self)) + { + self waittill("trigger_empty"); + } + + var_00 thread doorclose(var_01); + } +} + +//Function Number: 43 +dooropen(param_00,param_01) +{ + if(param_01) + { + self rotateto((0,self.var_1D74 + 90,1),param_00,0.1,0.75); + } + else + { + self rotateto((0,self.var_1D74 - 90,1),param_00,0.1,0.75); + } + + self playsound("door_generic_house_open"); + wait param_00 + 0.05; +} + +//Function Number: 44 +doorclose(param_00) +{ + self rotateto((0,self.var_1D74,1),param_00); + self playsound("door_generic_house_close"); + wait param_00 + 0.05; +} + +//Function Number: 45 +getdoorside(param_00) +{ + return vectordot(self.var_1D73,vectornormalize(param_00.origin - self.var_1D72 getorigin())) > 0; +} + +//Function Number: 46 +getvectorrightangle(param_00) +{ + return (param_00[1],0 - param_00[0],param_00[2]); +} + +//Function Number: 47 +use_toggle() +{ + if(self.classname != "trigger_use_touch") + { + return; + } + + var_00 = getentarray(self.target,"targetname"); + self.var_1D67 = 1; + foreach(var_02 in var_00) + { + var_02 setlightintensity(1.5 * self.var_1D67); + } + + for(;;) + { + self waittill("trigger"); + self.var_1D67 = !self.var_1D67; + if(self.var_1D67) + { + foreach(var_02 in var_00) + { + var_02 setlightintensity(1.5); + } + + self playsound("switch_auto_lights_on"); + continue; + } + + foreach(var_02 in var_00) + { + var_02 setlightintensity(0); + } + + self playsound("switch_auto_lights_off"); + } +} + +//Function Number: 48 +bird_startle() +{ +} + +//Function Number: 49 +photo_copier_init(param_00) +{ + self.var_1D7B = get_photo_copier(param_00); + var_01 = getent(self.var_1D7B.target,"targetname"); + var_02 = getent(var_01.target,"targetname"); + var_02.intensity = var_02 getlightintensity(); + var_02 setlightintensity(0); + param_00.var_1D7C = var_01; + param_00.var_1D7D = var_01.origin; + param_00.var_1D7E = var_02; + var_03 = self.var_1D7B.angles + (0,90,0); + var_04 = anglestoforward(var_03); + param_00.var_1D7F = param_00.var_1D7D + var_04 * 30; +} + +//Function Number: 50 +get_photo_copier(param_00) +{ + if(!isdefined(param_00.target)) + { + var_01 = getentarray("destructible_toy","targetname"); + var_02 = var_01[0]; + foreach(var_04 in var_01) + { + if(isdefined(var_04.destructible_type) && var_04.destructible_type == "toy_copier") + { + if(distance(param_00.origin,var_02.origin) > distance(param_00.origin,var_04.origin)) + { + var_02 = var_04; + } + } + } + } + else + { + var_02 = getent(var_02.target,"targetname"); + var_02 setcandamage(1); + } + + return var_02; +} + +//Function Number: 51 +waittill_copier_copies() +{ + self.var_1D7B endon("FX_State_Change0"); + self.var_1D7B endon("death"); + self waittill("trigger_enter"); +} + +//Function Number: 52 +photo_copier() +{ + level endon("game_ended"); + photo_copier_init(self); + self.var_1D7B endon("FX_State_Change0"); + thread photo_copier_stop(); + for(;;) + { + waittill_copier_copies(); + self playsound("mach_copier_run"); + if(isdefined(self.var_1D7C)) + { + reset_copier(self); + thread photo_copier_copy_bar_goes(); + thread photo_copier_light_on(); + } + + wait 3; + } +} + +//Function Number: 53 +photo_copier_no_light() +{ + level endon("game_ended"); + self endon("death"); + if(common_scripts\utility::get_template_level() == "hamburg") + { + return; + } + + self.var_1D7B = get_photo_copier(self); + self.var_1D7B endon("FX_State_Change0"); + for(;;) + { + waittill_copier_copies(); + self playsound("mach_copier_run"); + wait 3; + } +} + +//Function Number: 54 +reset_copier(param_00) +{ + param_00.var_1D7C moveto(param_00.var_1D7D,0.2); + param_00.var_1D7E setlightintensity(0); +} + +//Function Number: 55 +photo_copier_copy_bar_goes() +{ + self.var_1D7B notify("bar_goes"); + self.var_1D7B endon("bar_goes"); + self.var_1D7B endon("FX_State_Change0"); + self.var_1D7B endon("death"); + var_00 = self.var_1D7C; + wait 2; + var_00 moveto(self.var_1D7F,1.6); + wait 1.8; + var_00 moveto(self.var_1D7D,1.6); + wait 1.6; + var_01 = self.var_1D7E; + var_02 = 0.2; + var_03 = var_02 / 0.05; + for(var_04 = 0;var_04 < var_03;var_04++) + { + var_05 = var_04 * 0.05; + var_05 = var_05 / var_02; + var_05 = 1 - var_05 * var_01.intensity; + if(var_05 > 0) + { + var_01 setlightintensity(var_05); + } + + wait 0.05; + } +} + +//Function Number: 56 +photo_copier_light_on() +{ + self.var_1D7B notify("light_on"); + self.var_1D7B endon("light_on"); + self.var_1D7B endon("FX_State_Change0"); + self.var_1D7B endon("death"); + var_00 = self.var_1D7E; + var_01 = 0.2; + var_02 = var_01 / 0.05; + for(var_03 = 0;var_03 < var_02;var_03++) + { + var_04 = var_03 * 0.05; + var_04 = var_04 / var_01; + var_00 setlightintensity(var_04 * var_00.intensity); + wait 0.05; + } + + photo_light_flicker(var_00); +} + +//Function Number: 57 +photo_copier_stop() +{ + self.var_1D7B waittill("FX_State_Change0"); + self.var_1D7B endon("death"); + reset_copier(self); +} + +//Function Number: 58 +photo_light_flicker(param_00) +{ + param_00 setlightintensity(1); + wait 0.05; + param_00 setlightintensity(0); + wait 0.1; + param_00 setlightintensity(1); + wait 0.05; + param_00 setlightintensity(0); + wait 0.1; + param_00 setlightintensity(1); +} + +//Function Number: 59 +fan_blade_rotate(param_00) +{ + var_01 = 0; + var_02 = 20000; + var_03 = 1; + if(isdefined(self.speed)) + { + var_03 = self.speed; + } + + if(param_00 == "slow") + { + if(isdefined(self.script_noteworthy) && self.script_noteworthy == "lockedspeed") + { + var_01 = 180; + } + else + { + var_01 = randomfloatrange(100 * var_03,360 * var_03); + } + } + else if(param_00 == "fast") + { + var_01 = randomfloatrange(720 * var_03,1000 * var_03); + } + else if(param_00 == "veryslow") + { + var_01 = randomfloatrange(1 * var_03,2 * var_03); + } + else + { + } + + if(isdefined(self.script_noteworthy) && self.script_noteworthy == "lockedspeed") + { + wait 0; + } + else + { + wait randomfloatrange(0,1); + } + + var_04 = self.angles; + var_05 = anglestoright(self.angles) * 100; + var_05 = vectornormalize(var_05); + for(;;) + { + var_06 = abs(vectordot(var_05,(1,0,0))); + var_07 = abs(vectordot(var_05,(0,1,0))); + var_08 = abs(vectordot(var_05,(0,0,1))); + if(var_06 > 0.9) + { + self rotatevelocity((var_01,0,0),var_02); + } + else if(var_07 > 0.9) + { + self rotatevelocity((var_01,0,0),var_02); + } + else if(var_08 > 0.9) + { + self rotatevelocity((0,var_01,0),var_02); + } + else + { + self rotatevelocity((0,var_01,0),var_02); + } + + wait var_02; + } +} + +//Function Number: 60 +triggertouchthink(param_00,param_01) +{ + level endon("game_ended"); + self.entnum = self getentitynumber(); + for(;;) + { + self waittill("trigger",var_02); + if(!isplayer(var_02) && !isdefined(var_02.finished_spawning)) + { + continue; + } + + if(!isalive(var_02)) + { + continue; + } + + if(!isdefined(var_02.touchtriggers[self.entnum])) + { + var_02 thread playertouchtriggerthink(self,param_00,param_01); + } + } +} + +//Function Number: 61 +playertouchtriggerthink(param_00,param_01,param_02) +{ + if(!isplayer(self)) + { + self endon("death"); + } + + if(!common_scripts\utility::issp()) + { + var_03 = self.guid; + } + else + { + var_03 = "player" + gettime(); + } + + param_00.touchlist[var_03] = self; + if(isdefined(param_00.var_1D66)) + { + self.var_1D8E++; + } + + param_00 notify("trigger_enter",self); + self notify("trigger_enter",param_00); + if(isdefined(param_01)) + { + self thread [[ param_01 ]](param_00); + } + + self.touchtriggers[param_00.entnum] = param_00; + while(isalive(self) && self istouching(param_00) && common_scripts\utility::issp() || !level.gameended) + { + wait 0.05; + } + + if(isdefined(self)) + { + self.touchtriggers[param_00.entnum] = undefined; + if(isdefined(param_00.var_1D66)) + { + self.var_1D8E--; + } + + self notify("trigger_leave",param_00); + if(isdefined(param_02)) + { + self thread [[ param_02 ]](param_00); + } + } + + if(!common_scripts\utility::issp() && level.gameended) + { + return; + } + + param_00.touchlist[var_03] = undefined; + param_00 notify("trigger_leave",self); + if(!anythingtouchingtrigger(param_00)) + { + param_00 notify("trigger_empty"); + } +} + +//Function Number: 62 +movementtracker() +{ + if(isdefined(level.var_1D91)) + { + return; + } + + self endon("disconnect"); + if(!isplayer(self)) + { + self endon("death"); + } + + self.var_1D8E = 0; + self.var_1D6A = 0; + for(;;) + { + self waittill("trigger_enter"); + var_00 = self.origin; + while(self.var_1D8E) + { + self.var_1D6A = distance(var_00,self.origin); + var_00 = self.origin; + wait 0.05; + } + + self.var_1D6A = 0; + } +} + +//Function Number: 63 +anythingtouchingtrigger(param_00) +{ + return param_00.touchlist.size; +} + +//Function Number: 64 +playertouchingtrigger(param_00,param_01) +{ + return isdefined(param_00.touchtriggers[param_01.entnum]); +} \ No newline at end of file diff --git a/MW3/PC/SP/common_scripts/_elevator.gsc b/MW3/PC/SP/common_scripts/_elevator.gsc new file mode 100644 index 0000000..43f360b --- /dev/null +++ b/MW3/PC/SP/common_scripts/_elevator.gsc @@ -0,0 +1,1107 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: common_scripts\_elevator.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 55 + * Decompile Time: 860 ms + * Timestamp: 10/27/2023 2:22:39 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + if(getdvar("scr_elevator_disabled") == "1") + { + return; + } + + var_00 = getentarray("elevator_group","targetname"); + if(!isdefined(var_00)) + { + return; + } + + if(!var_00.size) + { + return; + } + + precachestring(&"ELEVATOR_CALL_HINT"); + precachestring(&"ELEVATOR_USE_HINT"); + precachestring(&"ELEVATOR_FLOOR_SELECT_HINT"); + precachemenu("elevator_floor_selector"); + thread elevator_update_global_dvars(); + level.var_1CB8 = []; + level.var_1CB9 = elevator_get_dvar_int("scr_elevator_callbutton_link_v","96"); + level.var_1CBA = elevator_get_dvar_int("scr_elevator_callbutton_link_h","256"); + build_elevators(); + position_elevators(); + elevator_call(); + if(!level.var_1CB8.size) + { + return; + } + + foreach(var_02 in level.var_1CB8) + { + var_02 thread elevator_think(); + var_02 thread elevator_sound_think(); + } + + thread elevator_debug(); +} + +//Function Number: 2 +elevator_update_global_dvars() +{ + for(;;) + { + level.var_1CBC = elevator_get_dvar("scr_elevator_accel","0.2"); + level.var_1CBD = elevator_get_dvar("scr_elevator_decel","0.2"); + level.var_1CBE = elevator_get_dvar_int("scr_elevator_music","1"); + level.var_1CBF = elevator_get_dvar_int("scr_elevator_speed","96"); + level.var_1CC0 = elevator_get_dvar_int("scr_elevator_innerdoorspeed","14"); + level.var_1CC1 = elevator_get_dvar_int("scr_elevator_outterdoorspeed","16"); + level.var_1CC2 = elevator_get_dvar_int("scr_elevator_return","0"); + level.var_1CC3 = elevator_get_dvar_int("scr_elevator_waittime","6"); + level.var_1CC4 = elevator_get_dvar_int("scr_elevator_aggressive_call","0"); + level.elevator_debug = elevator_get_dvar_int("debug_elevator","0"); + if(common_scripts\utility::issp()) + { + level.var_1CC6 = elevator_get_dvar_int("scr_elevator_motion_detection","0"); + } + else + { + level.var_1CC6 = elevator_get_dvar_int("scr_elevator_motion_detection","1"); + } + + wait 1; + } +} + +//Function Number: 3 +elevator_think() +{ + elevator_fsm("[A]"); +} + +//Function Number: 4 +elevator_call() +{ + foreach(var_01 in level.var_1CC9) + { + var_01 thread monitor_callbutton(); + } +} + +//Function Number: 5 +floor_override(param_00) +{ + self endon("elevator_moving"); + self.floor_override = 0; + self.var_1CCB = undefined; + for(;;) + { + param_00 waittill("trigger",var_01); + self.floor_override = 1; + self.var_1CCB = var_01; + break; + } + + self notify("floor_override"); +} + +//Function Number: 6 +elevator_fsm(param_00) +{ + self.var_1CCD = param_00; + var_01 = get_housing_door_trigger(); + var_02 = get_housing_inside_trigger(); + for(;;) + { + if(self.var_1CCD == "[A]") + { + if(level.var_1CC2 && get_curfloor() != get_initfloor()) + { + self.var_1CCE = get_initfloor(); + thread floor_override(var_02); + waittill_or_timeout("floor_override",level.var_1CC3); + if(self.floor_override && isdefined(self.var_1CCB) && isplayer(self.var_1CCB)) + { + get_floor(self.var_1CCB); + } + + self.var_1CCD = "[B]"; + continue; + } + + for(;;) + { + if(self.var_1CCE == get_curfloor()) + { + var_03 = var_02 discrete_waittill("trigger"); + } + else + { + var_03 = "elevator_called"; + } + + if(isstring(var_03) && var_03 == "elevator_called" && self.var_1CCE != get_curfloor()) + { + self.var_1CCD = "[B]"; + break; + } + + if(isdefined(var_03) && isplayer(var_03) && isalive(var_03)) + { + var_04 = var_03 istouching(var_02); + var_05 = isdefined(var_02.var_1CCF) && var_03 istouching(var_02.var_1CCF); + var_06 = var_04 || var_05; + if(var_06) + { + var_07 = var_03; + get_floor(var_07); + if(self.var_1CCE == get_curfloor()) + { + continue; + } + + self.var_1CCD = "[B]"; + break; + } + } + } + } + + if(self.var_1CCD == "[B]") + { + thread elevator_interrupt(var_01); + var_08 = get_curfloor(); + thread close_inner_doors(); + thread close_outer_doors(var_08); + common_scripts\utility::waittill_any("closed_inner_doors","interrupted"); + if(self.var_1CD0) + { + self.var_1CCD = "[C]"; + continue; + } + + self.var_1CCD = "[D]"; + continue; + } + + if(self.var_1CCD == "[C]") + { + var_08 = get_curfloor(); + thread open_inner_doors(); + thread open_outer_doors(var_08); + self waittill("opened_floor_" + var_08 + "_outer_doors"); + if(self.var_1CD0) + { + self.var_1CCD = "[B]"; + continue; + } + + self.var_1CCD = "[A]"; + continue; + } + + if(self.var_1CCD == "[D]") + { + if(self.var_1CCE != get_curfloor()) + { + thread elevator_move(self.var_1CCE); + self waittill("elevator_moved"); + } + + self.var_1CCD = "[C]"; + continue; + } + } +} + +//Function Number: 7 +monitor_callbutton() +{ + for(;;) + { + var_00 = discrete_waittill("trigger"); + var_01 = undefined; + var_02 = []; + foreach(var_05, var_04 in self.var_1CD2) + { + var_01 = var_05; + var_02 = var_04; + } + + var_06 = 0; + foreach(var_08 in var_02) + { + var_09 = var_08 elevator_floor_update(); + if(!level.var_1CC4 && !var_09) + { + if(var_08 get_curfloor() == var_01) + { + var_06 = 1; + var_02 = []; + break; + } + } + } + + foreach(var_08 in var_02) + { + if(var_08.var_1CCD == "[A]") + { + var_08 call_elevator(var_01); + var_06 = 1; + if(!level.var_1CC4) + { + break; + } + } + } + + if(var_06) + { + self playsound("elev_bell_ding"); + } + } +} + +//Function Number: 8 +call_elevator(param_00) +{ + self.var_1CCE = param_00; + var_01 = get_housing_inside_trigger(); + var_01 notify("trigger","elevator_called"); + if(level.var_1CC6) + { + var_01.var_1CCF notify("trigger","elevator_called"); + } +} + +//Function Number: 9 +get_floor(param_00) +{ + var_01 = get_outer_doorsets(); + if(var_01.size == 2) + { + var_02 = get_curfloor(); + self.var_1CCE = !var_02; + return; + } + + var_01 openpopupmenu("elevator_floor_selector"); + var_01 setclientdvar("player_current_floor",get_curfloor()); + for(;;) + { + var_01 waittill("menuresponse",var_03,var_04); + if(var_03 == "elevator_floor_selector") + { + if(var_04 != "none") + { + self.var_1CCE = int(var_04); + } + + break; + } + } +} + +//Function Number: 10 +elevator_interrupt(param_00) +{ + self notify("interrupt_watch"); + level notify("elevator_interior_button_pressed"); + self endon("interrupt_watch"); + self endon("elevator_moving"); + self.var_1CD0 = 0; + wait 0.5; + param_00 waittill("trigger",var_01); + self notify("interrupted"); + self.var_1CD0 = 1; +} + +//Function Number: 11 +elevator_floor_update() +{ + var_00 = get_housing_mainframe(); + var_01 = var_00.origin; + var_02 = 1; + foreach(var_06, var_04 in get_outer_doorsets()) + { + var_05 = self.var_1CD2["floor" + var_06 + "_pos"]; + if(var_01 == var_05) + { + self.var_1CD2["current_floor"] = var_06; + var_02 = 0; + } + } + + return var_02; +} + +//Function Number: 12 +elevator_sound_think() +{ + var_00 = get_housing_musak_model(); + if(level.var_1CBE && isdefined(var_00)) + { + var_00 playloopsound("elev_musak_loop"); + } + + thread listen_for("closing_inner_doors"); + thread listen_for("opening_inner_doors"); + thread listen_for("closed_inner_doors"); + thread listen_for("opened_inner_doors"); + foreach(var_03, var_02 in get_outer_doorsets()) + { + thread listen_for("closing_floor_" + var_03 + "_outer_doors"); + thread listen_for("opening_floor_" + var_03 + "_outer_doors"); + thread listen_for("closed_floor_" + var_03 + "_outer_doors"); + thread listen_for("opened_floor_" + var_03 + "_outer_doors"); + } + + thread listen_for("interrupted"); + thread listen_for("elevator_moving"); + thread listen_for("elevator_moved"); +} + +//Function Number: 13 +listen_for(param_00) +{ + for(;;) + { + self waittill(param_00); + var_01 = get_housing_mainframe(); + if(issubstr(param_00,"closing_")) + { + var_01 playsound("elev_door_close"); + } + + if(issubstr(param_00,"opening_")) + { + var_01 playsound("elev_door_open"); + } + + if(param_00 == "elevator_moving") + { + var_01 playsound("elev_run_start"); + var_01 playloopsound("elev_run_loop"); + } + + if(param_00 == "interrupted") + { + var_01 playsound("elev_door_interupt"); + } + + if(param_00 == "elevator_moved") + { + var_01 stoploopsound("elev_run_loop"); + var_01 playsound("elev_run_end"); + var_01 playsound("elev_bell_ding"); + } + } +} + +//Function Number: 14 +position_elevators() +{ + foreach(var_01 in level.var_1CB8) + { + var_01.var_1CCE = var_01 get_curfloor(); + foreach(var_04, var_03 in var_01 get_outer_doorsets()) + { + if(var_01 get_curfloor() != var_04) + { + var_01 thread close_outer_doors(var_04); + } + } + } +} + +//Function Number: 15 +elevator_move(param_00) +{ + self notify("elevator_moving"); + self endon("elevator_moving"); + var_01 = get_housing_mainframe(); + var_02 = self.var_1CD2["floor" + param_00 + "_pos"] - var_01.origin; + var_03 = level.var_1CBF; + var_04 = abs(distance(self.var_1CD2["floor" + param_00 + "_pos"],var_01.origin)); + var_05 = var_04 / var_03; + var_01 moveto(var_01.origin + var_02,var_05,var_05 * level.var_1CBC,var_05 * level.var_1CBD); + foreach(var_07 in get_housing_children()) + { + var_08 = var_07.origin + var_02; + if(!issubstr(var_07.classname,"trigger_")) + { + var_07 moveto(var_08,var_05,var_05 * level.var_1CBC,var_05 * level.var_1CBD); + continue; + } + + var_07.origin = var_08; + } + + waittill_finish_moving(var_01,self.var_1CD2["floor" + param_00 + "_pos"]); + self notify("elevator_moved"); +} + +//Function Number: 16 +close_inner_doors() +{ + self notify("closing_inner_doors"); + self endon("closing_inner_doors"); + self endon("opening_inner_doors"); + var_00 = get_housing_leftdoor(); + var_01 = get_housing_rightdoor(); + var_02 = get_housing_mainframe(); + var_03 = get_housing_closedpos(); + var_04 = (var_03[0],var_03[1],var_02.origin[2]); + var_05 = level.var_1CC0; + var_06 = abs(distance(var_00.origin,var_04)); + var_07 = var_06 / var_05; + var_00 moveto(var_04,var_07,var_07 * 0.1,var_07 * 0.25); + var_01 moveto(var_04,var_07,var_07 * 0.1,var_07 * 0.25); + waittill_finish_moving(var_00,var_04,var_01,var_04); + self notify("closed_inner_doors"); +} + +//Function Number: 17 +open_inner_doors() +{ + self notify("opening_inner_doors"); + self endon("opening_inner_doors"); + var_00 = get_housing_leftdoor(); + var_01 = get_housing_rightdoor(); + var_02 = get_housing_mainframe(); + var_03 = get_housing_leftdoor_opened_pos(); + var_04 = get_housing_rightdoor_opened_pos(); + var_05 = (var_03[0],var_03[1],var_02.origin[2]); + var_06 = (var_04[0],var_04[1],var_02.origin[2]); + var_07 = level.var_1CC0; + var_08 = abs(distance(var_05,var_06) * 0.5); + var_09 = var_08 / var_07 * 0.5; + var_00 moveto(var_05,var_09,var_09 * 0.1,var_09 * 0.25); + var_01 moveto(var_06,var_09,var_09 * 0.1,var_09 * 0.25); + waittill_finish_moving(var_00,var_05,var_01,var_06); + self notify("opened_inner_doors"); +} + +//Function Number: 18 +close_outer_doors(param_00) +{ + self notify("closing_floor_" + param_00 + "_outer_doors"); + self endon("closing_floor_" + param_00 + "_outer_doors"); + self endon("opening_floor_" + param_00 + "_outer_doors"); + var_01 = get_outer_leftdoor(param_00); + var_02 = get_outer_rightdoor(param_00); + var_03 = get_outer_leftdoor_openedpos(param_00); + var_04 = get_outer_closedpos(param_00); + var_05 = level.var_1CC1; + var_06 = abs(distance(var_03,var_04)); + var_07 = var_06 / var_05; + var_01 moveto(var_04,var_07,var_07 * 0.1,var_07 * 0.25); + var_02 moveto(var_04,var_07,var_07 * 0.1,var_07 * 0.25); + waittill_finish_moving(var_01,var_04,var_02,var_04); + self notify("closed_floor_" + param_00 + "_outer_doors"); +} + +//Function Number: 19 +open_outer_doors(param_00) +{ + level notify("elevator_doors_opening"); + self notify("opening_floor_" + param_00 + "_outer_doors"); + self endon("opening_floor_" + param_00 + "_outer_doors"); + var_01 = get_outer_leftdoor(param_00); + var_02 = get_outer_rightdoor(param_00); + var_03 = get_outer_leftdoor_openedpos(param_00); + var_04 = get_outer_rightdoor_openedpos(param_00); + var_05 = get_outer_closedpos(param_00); + var_06 = level.var_1CC1; + var_07 = abs(distance(var_03,var_05)); + var_08 = var_07 / var_06 * 0.5; + var_01 moveto(var_03,var_08,var_08 * 0.1,var_08 * 0.25); + var_02 moveto(var_04,var_08,var_08 * 0.1,var_08 * 0.25); + waittill_finish_moving(var_01,var_03,var_02,var_04); + self notify("opened_floor_" + param_00 + "_outer_doors"); +} + +//Function Number: 20 +build_elevators() +{ + var_00 = getentarray("elevator_group","targetname"); + var_01 = getentarray("elevator_housing","targetname"); + var_02 = getentarray("elevator_doorset","targetname"); + foreach(var_04 in var_00) + { + var_05 = getent(var_04.target,"targetname"); + var_06 = []; + var_06[0] = min(var_04.origin[0],var_05.origin[0]); + var_06[1] = max(var_04.origin[0],var_05.origin[0]); + var_06[2] = min(var_04.origin[1],var_05.origin[1]); + var_06[3] = max(var_04.origin[1],var_05.origin[1]); + var_07 = spawnstruct(); + var_07.var_1CD2["id"] = level.var_1CB8.size; + var_07.var_1CD2["housing"] = []; + var_07.var_1CD2["housing"]["mainframe"] = []; + foreach(var_09 in var_01) + { + if(var_09 isinbound(var_06)) + { + var_07.var_1CD2["housing"]["mainframe"][var_07.var_1CD2["housing"]["mainframe"].size] = var_09; + if(var_09.classname == "script_model") + { + continue; + } + + if(var_09.code_classname == "light") + { + continue; + } + + var_0A = getent(var_09.target,"targetname"); + var_07.var_1CD2["housing"]["left_door"] = var_0A; + var_07.var_1CD2["housing"]["left_door_opened_pos"] = var_0A.origin; + var_0B = getent(var_0A.target,"targetname"); + var_07.var_1CD2["housing"]["right_door"] = var_0B; + var_07.var_1CD2["housing"]["right_door_opened_pos"] = var_0B.origin; + var_0C = var_0A.origin - var_0B.origin * (0.5,0.5,0.5) + var_0B.origin; + var_07.var_1CD2["housing"]["door_closed_pos"] = var_0C; + var_0D = getent(var_0B.target,"targetname"); + var_07.var_1CD2["housing"]["door_trigger"] = var_0D; + var_0E = getent(var_0D.target,"targetname"); + var_07.var_1CD2["housing"]["inside_trigger"] = var_0E; + var_0E make_discrete_trigger(); + var_0E.var_1CCF = spawn("trigger_radius",var_09.origin,0,64,128); + } + } + + var_07.var_1CD2["outer_doorset"] = []; + foreach(var_11 in var_02) + { + if(var_11 isinbound(var_06)) + { + var_12 = isdefined(var_11.script_noteworthy) && var_11.script_noteworthy == "closed_for_lighting"; + var_13 = var_07.var_1CD2["outer_doorset"].size; + var_07.var_1CD2["outer_doorset"][var_13] = []; + var_07.var_1CD2["outer_doorset"][var_13]["door_closed_pos"] = var_11.origin; + var_14 = getent(var_11.target,"targetname"); + var_07.var_1CD2["outer_doorset"][var_13]["left_door"] = var_14; + var_07.var_1CD2["outer_doorset"][var_13]["left_door_opened_pos"] = var_14.origin; + var_15 = getent(var_14.target,"targetname"); + var_07.var_1CD2["outer_doorset"][var_13]["right_door"] = var_15; + var_07.var_1CD2["outer_doorset"][var_13]["right_door_opened_pos"] = var_15.origin; + if(var_12) + { + var_16 = var_11.origin - var_14.origin; + var_11.origin = var_14.origin; + var_14.origin = var_14.origin + var_16; + var_15.origin = var_15.origin - var_16; + var_07.var_1CD2["outer_doorset"][var_13]["door_closed_pos"] = var_11.origin; + var_07.var_1CD2["outer_doorset"][var_13]["left_door_opened_pos"] = var_14.origin; + var_07.var_1CD2["outer_doorset"][var_13]["right_door_opened_pos"] = var_15.origin; + } + } + } + + for(var_18 = 0;var_18 < var_07.var_1CD2["outer_doorset"].size - 1;var_18++) + { + for(var_19 = 0;var_19 < var_07.var_1CD2["outer_doorset"].size - 1 - var_18;var_19++) + { + if(var_07.var_1CD2["outer_doorset"][var_19 + 1]["door_closed_pos"][2] < var_07.var_1CD2["outer_doorset"][var_19]["door_closed_pos"][2]) + { + var_1A = var_07.var_1CD2["outer_doorset"][var_19]["left_door"]; + var_1B = var_07.var_1CD2["outer_doorset"][var_19]["left_door_opened_pos"]; + var_1C = var_07.var_1CD2["outer_doorset"][var_19]["right_door"]; + var_1D = var_07.var_1CD2["outer_doorset"][var_19]["right_door_opened_pos"]; + var_1E = var_07.var_1CD2["outer_doorset"][var_19]["door_closed_pos"]; + var_07.var_1CD2["outer_doorset"][var_19]["left_door"] = var_07.var_1CD2["outer_doorset"][var_19 + 1]["left_door"]; + var_07.var_1CD2["outer_doorset"][var_19]["left_door_opened_pos"] = var_07.var_1CD2["outer_doorset"][var_19 + 1]["left_door_opened_pos"]; + var_07.var_1CD2["outer_doorset"][var_19]["right_door"] = var_07.var_1CD2["outer_doorset"][var_19 + 1]["right_door"]; + var_07.var_1CD2["outer_doorset"][var_19]["right_door_opened_pos"] = var_07.var_1CD2["outer_doorset"][var_19 + 1]["right_door_opened_pos"]; + var_07.var_1CD2["outer_doorset"][var_19]["door_closed_pos"] = var_07.var_1CD2["outer_doorset"][var_19 + 1]["door_closed_pos"]; + var_07.var_1CD2["outer_doorset"][var_19 + 1]["left_door"] = var_1A; + var_07.var_1CD2["outer_doorset"][var_19 + 1]["left_door_opened_pos"] = var_1B; + var_07.var_1CD2["outer_doorset"][var_19 + 1]["right_door"] = var_1C; + var_07.var_1CD2["outer_doorset"][var_19 + 1]["right_door_opened_pos"] = var_1D; + var_07.var_1CD2["outer_doorset"][var_19 + 1]["door_closed_pos"] = var_1E; + } + } + } + + var_1F = []; + foreach(var_18, var_21 in var_07.var_1CD2["outer_doorset"]) + { + var_22 = var_07 get_housing_mainframe(); + var_1F = (var_22.origin[0],var_22.origin[1],var_21["door_closed_pos"][2]); + var_07.var_1CD2["floor" + var_18 + "_pos"] = var_1F; + if(var_22.origin == var_1F) + { + var_07.var_1CD2["initial_floor"] = var_18; + var_07.var_1CD2["current_floor"] = var_18; + } + } + + level.var_1CB8[level.var_1CB8.size] = var_07; + var_04 delete(); + var_05 delete(); + } + + foreach(var_11 in var_02) + { + var_11 delete(); + } + + build_call_buttons(); + if(!level.var_1CC6) + { + setup_hints(); + } + + foreach(var_27 in level.var_1CB8) + { + var_28 = var_27 get_housing_primarylight(); + if(isdefined(var_28) && var_28.size) + { + foreach(var_2A in var_28) + { + var_2A setlightintensity(0.75); + } + } + } +} + +//Function Number: 21 +build_call_buttons() +{ + level.var_1CC9 = getentarray("elevator_call","targetname"); + foreach(var_01 in level.var_1CC9) + { + var_01.var_1CD2 = []; + var_02 = (0,0,var_01.origin[2]); + var_03 = (var_01.origin[0],var_01.origin[1],0); + var_04 = []; + foreach(var_06 in level.var_1CB8) + { + foreach(var_0B, var_08 in var_06 get_outer_doorsets()) + { + var_09 = (0,0,var_06.var_1CD2["floor" + var_0B + "_pos"][2]); + var_0A = (var_06.var_1CD2["floor" + var_0B + "_pos"][0],var_06.var_1CD2["floor" + var_0B + "_pos"][1],0); + if(abs(distance(var_02,var_09)) <= level.var_1CB9) + { + if(abs(distance(var_03,var_0A)) <= level.var_1CBA) + { + var_04[var_04.size] = var_06; + var_01.var_1CD2[var_0B] = var_04; + } + } + } + } + + var_01 make_discrete_trigger(); + var_01.var_1CCF = spawn("trigger_radius",var_01.origin + (0,0,-32),0,32,64); + } +} + +//Function Number: 22 +setup_hints() +{ + foreach(var_01 in level.var_1CB8) + { + var_02 = var_01 get_housing_inside_trigger(); + var_03 = var_01 get_outer_doorsets(); + var_04 = var_03.size; + var_02 setcursorhint("HINT_NOICON"); + if(var_04 > 2) + { + var_02 sethintstring(&"ELEVATOR_FLOOR_SELECT_HINT"); + continue; + } + + var_02 sethintstring(&"ELEVATOR_USE_HINT"); + } + + foreach(var_07 in level.var_1CC9) + { + var_07 setcursorhint("HINT_NOICON"); + var_07 sethintstring(&"ELEVATOR_CALL_HINT"); + } +} + +//Function Number: 23 +make_discrete_trigger() +{ + self.enabled = 1; + disable_trigger(); +} + +//Function Number: 24 +discrete_waittill(param_00) +{ + enable_trigger(); + if(level.var_1CC6) + { + self.var_1CCF waittill(param_00,var_01); + } + else + { + self waittill(var_01,var_01); + } + + disable_trigger(); + return var_01; +} + +//Function Number: 25 +enable_trigger() +{ + if(!self.enabled) + { + self.enabled = 1; + self.origin = self.origin + (0,0,10000); + if(isdefined(self.var_1CCF)) + { + self.var_1CCF.origin = self.var_1CCF.origin + (0,0,10000); + } + } +} + +//Function Number: 26 +disable_trigger() +{ + self notify("disable_trigger"); + if(self.enabled) + { + thread disable_trigger_helper(); + } +} + +//Function Number: 27 +disable_trigger_helper() +{ + self endon("disable_trigger"); + self.enabled = 0; + wait 1.5; + self.origin = self.origin + (0,0,-10000); + if(isdefined(self.var_1CCF)) + { + self.var_1CCF.origin = self.var_1CCF.origin + (0,0,-10000); + } +} + +//Function Number: 28 +get_outer_doorset(param_00) +{ + return self.var_1CD2["outer_doorset"][param_00]; +} + +//Function Number: 29 +get_outer_doorsets() +{ + return self.var_1CD2["outer_doorset"]; +} + +//Function Number: 30 +get_outer_closedpos(param_00) +{ + return self.var_1CD2["outer_doorset"][param_00]["door_closed_pos"]; +} + +//Function Number: 31 +get_outer_leftdoor(param_00) +{ + return self.var_1CD2["outer_doorset"][param_00]["left_door"]; +} + +//Function Number: 32 +get_outer_rightdoor(param_00) +{ + return self.var_1CD2["outer_doorset"][param_00]["right_door"]; +} + +//Function Number: 33 +get_outer_leftdoor_openedpos(param_00) +{ + return self.var_1CD2["outer_doorset"][param_00]["left_door_opened_pos"]; +} + +//Function Number: 34 +get_outer_rightdoor_openedpos(param_00) +{ + return self.var_1CD2["outer_doorset"][param_00]["right_door_opened_pos"]; +} + +//Function Number: 35 +get_housing_children() +{ + var_00 = []; + var_01 = get_housing_door_trigger(); + var_02 = get_housing_inside_trigger(); + var_03 = var_02.var_1CCF; + var_04 = get_housing_leftdoor(); + var_05 = get_housing_rightdoor(); + var_00[var_00.size] = var_01; + var_00[var_00.size] = var_02; + var_00[var_00.size] = var_04; + var_00[var_00.size] = var_05; + if(isdefined(var_03)) + { + var_00[var_00.size] = var_03; + } + + var_06 = get_housing_models(); + foreach(var_08 in var_06) + { + var_00[var_00.size] = var_08; + } + + var_0A = get_housing_primarylight(); + foreach(var_0C in var_0A) + { + var_00[var_00.size] = var_0C; + } + + return var_00; +} + +//Function Number: 36 +get_housing_mainframe() +{ + var_00 = self.var_1CD2["housing"]["mainframe"]; + var_01 = undefined; + foreach(var_03 in var_00) + { + if(var_03.classname != "script_model" && var_03.code_classname != "light") + { + var_01 = var_03; + } + } + + return var_01; +} + +//Function Number: 37 +get_housing_models() +{ + var_00 = self.var_1CD2["housing"]["mainframe"]; + var_01 = []; + foreach(var_03 in var_00) + { + if(var_03.classname == "script_model") + { + var_01[var_01.size] = var_03; + } + } + + return var_01; +} + +//Function Number: 38 +get_housing_primarylight() +{ + var_00 = self.var_1CD2["housing"]["mainframe"]; + var_01 = []; + foreach(var_03 in var_00) + { + if(var_03.code_classname == "light") + { + var_01[var_01.size] = var_03; + } + } + + return var_01; +} + +//Function Number: 39 +get_housing_musak_model() +{ + var_00 = get_housing_models(); + var_01 = undefined; + foreach(var_03 in var_00) + { + if(isdefined(var_03.script_noteworthy) && var_03.script_noteworthy == "play_musak") + { + var_01 = var_03; + } + } + + return var_01; +} + +//Function Number: 40 +get_housing_door_trigger() +{ + return self.var_1CD2["housing"]["door_trigger"]; +} + +//Function Number: 41 +get_housing_inside_trigger() +{ + return self.var_1CD2["housing"]["inside_trigger"]; +} + +//Function Number: 42 +get_housing_closedpos() +{ + return self.var_1CD2["housing"]["door_closed_pos"]; +} + +//Function Number: 43 +get_housing_leftdoor() +{ + return self.var_1CD2["housing"]["left_door"]; +} + +//Function Number: 44 +get_housing_rightdoor() +{ + return self.var_1CD2["housing"]["right_door"]; +} + +//Function Number: 45 +get_housing_leftdoor_opened_pos() +{ + return self.var_1CD2["housing"]["left_door_opened_pos"]; +} + +//Function Number: 46 +get_housing_rightdoor_opened_pos() +{ + return self.var_1CD2["housing"]["right_door_opened_pos"]; +} + +//Function Number: 47 +get_curfloor() +{ + var_00 = elevator_floor_update(); + return self.var_1CD2["current_floor"]; +} + +//Function Number: 48 +get_initfloor() +{ + return self.var_1CD2["initial_floor"]; +} + +//Function Number: 49 +waittill_finish_moving(param_00,param_01,param_02,param_03) +{ + if(!isdefined(param_02) && !isdefined(param_03)) + { + param_02 = param_00; + param_03 = param_01; + } + + for(;;) + { + var_04 = param_00.origin; + var_05 = param_02.origin; + if(var_04 == param_01 && var_05 == param_03) + { + break; + } + + wait 0.05; + } +} + +//Function Number: 50 +isinbound(param_00) +{ + if(level.script == "plaza" || level.script == "highrise_test") + { + return isinboundingspere(param_00); + } + + var_01 = self.origin[0]; + var_02 = self.origin[1]; + var_03 = param_00[0]; + var_04 = param_00[1]; + var_05 = param_00[2]; + var_06 = param_00[3]; + return var_01 >= var_03 && var_01 <= var_04 && var_02 >= var_05 && var_02 <= var_06; +} + +//Function Number: 51 +isinboundingspere(param_00) +{ + var_01 = self.origin[0]; + var_02 = self.origin[1]; + var_03 = param_00[0]; + var_04 = param_00[1]; + var_05 = param_00[2]; + var_06 = param_00[3]; + var_07 = var_03 + var_04 / 2; + var_08 = var_05 + var_06 / 2; + var_09 = abs(distance((var_03,var_05,0),(var_07,var_08,0))); + return abs(distance((var_01,var_02,0),(var_07,var_08,0))) < var_09; +} + +//Function Number: 52 +waittill_or_timeout(param_00,param_01) +{ + self endon(param_00); + wait param_01; +} + +//Function Number: 53 +elevator_get_dvar_int(param_00,param_01) +{ + return int(elevator_get_dvar(param_00,param_01)); +} + +//Function Number: 54 +elevator_get_dvar(param_00,param_01) +{ + if(getdvar(param_00) != "") + { + return getdvarfloat(param_00); + } + + setdvar(param_00,param_01); + return param_01; +} + +//Function Number: 55 +elevator_debug() +{ + if(!level.elevator_debug) + { + return; + } + + for(;;) + { + if(level.elevator_debug != 2) + { + continue; + } + + foreach(var_01 in level.var_1CB8) + { + var_02 = var_01 get_housing_mainframe(); + var_03 = var_01 get_housing_musak_model(); + foreach(var_05 in var_01.var_1CD2["outer_doorset"]) + { + } + } + + foreach(var_09 in level.var_1CC9) + { + foreach(var_05 in var_09.var_1CD2) + { + var_0B = 0; + foreach(var_0D in var_05) + { + var_0B++; + var_0E = var_09.origin + (0,0,var_0B * -4); + } + } + } + + wait 0.05; + } +} \ No newline at end of file diff --git a/MW3/PC/SP/common_scripts/_fx.gsc b/MW3/PC/SP/common_scripts/_fx.gsc new file mode 100644 index 0000000..ffc2d61 --- /dev/null +++ b/MW3/PC/SP/common_scripts/_fx.gsc @@ -0,0 +1,595 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: common_scripts\_fx.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 28 + * Decompile Time: 476 ms + * Timestamp: 10/27/2023 2:23:00 AM +*******************************************************************/ + +//Function Number: 1 +initfx() +{ + if(!isdefined(level.func)) + { + level.func = []; + } + + if(!isdefined(level.func["create_triggerfx"])) + { + level.func["create_triggerfx"] = ::create_triggerfx; + } + + common_scripts\utility::create_lock("createfx_looper",20); + level.var_7CD = ::common_scripts\utility::exploder_before_load; + waittillframeend; + waittillframeend; + level.var_7CD = ::common_scripts\utility::exploder_after_load; + level.var_7CF = 0; + if(getdvarint("serverCulledSounds") == 1) + { + level.var_7CF = 1; + } + + if(level.createfx_enabled) + { + level.var_7CF = 0; + } + + if(level.createfx_enabled) + { + level waittill("createfx_common_done"); + } + + if(isdefined(level.var_3FF)) + { + wait level.var_3FF; + } + + for(var_00 = 0;var_00 < level.createfxent.size;var_00++) + { + var_01 = level.createfxent[var_00]; + var_01 common_scripts\_createfx::set_forward_and_up_vectors(); + if(var_01.v["type"] == "loopfx") + { + var_01 thread loopfxthread(); + } + + if(var_01.v["type"] == "oneshotfx") + { + var_01 thread oneshotfxthread(); + } + + if(var_01.v["type"] == "soundfx") + { + var_01 thread create_loopsound(); + } + + if(var_01.v["type"] == "soundfx_interval") + { + var_01 thread create_interval_sound(); + } + } +} + +//Function Number: 2 +print_org(param_00,param_01,param_02,param_03) +{ + if(getdvar("debug") == "1") + { + } +} + +//Function Number: 3 +oneshotfx(param_00,param_01,param_02,param_03) +{ +} + +//Function Number: 4 +exploderfx(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,param_0D,param_0E,param_0F,param_10,param_11) +{ + if(1) + { + var_12 = common_scripts\utility::createexploder(param_01); + var_12.v["origin"] = param_02; + var_12.v["angles"] = (0,0,0); + if(isdefined(param_04)) + { + var_12.v["angles"] = vectortoangles(param_04 - param_02); + } + + var_12.v["delay"] = param_03; + var_12.v["exploder"] = param_00; + if(isdefined(level.createfxexploders)) + { + var_13 = level.createfxexploders[var_12.v["exploder"]]; + if(!isdefined(var_13)) + { + var_13 = []; + } + + level.createfxexploders[var_13.v["exploder"]] = var_7B; + } + + return; + } + + var_14 = spawn("script_origin",(0,0,0)); + var_14.origin = param_04; + var_14.angles = vectortoangles(param_06 - param_04); + var_14.script_exploder = param_02; + var_14.script_fxid = param_03; + var_14.script_delay = param_05; + var_14.script_firefx = param_07; + var_14.script_firefxdelay = param_08; + var_14.script_firefxsound = param_09; + var_14.script_sound = param_0A; + var_14.script_earthquake = param_0B; + var_14.script_damage = param_0C; + var_14.script_radius = param_11; + var_14.script_soundalias = param_0D; + var_14.script_firefxtimeout = var_12; + var_14.script_repeat = param_0E; + var_14.script_delay_min = param_0F; + var_14.var_7E6 = param_10; + var_14.var_7E7 = var_13; + var_15 = anglestoforward(var_14.angles); + var_15 = var_15 * 150; + var_14.targetpos = param_04 + var_15; + if(!isdefined(level.var_7E9)) + { + level.var_7E9 = []; + } + + level.var_7E9[level.var_7E9.size] = var_14; + common_scripts\_createfx::createfx_showorigin(param_03,param_04,param_05,param_06,"exploderfx",var_14,undefined,param_07,param_08,param_09,param_0A,param_0B,param_0C,param_0D,param_0E,param_0F,param_10,param_11,var_12); +} + +//Function Number: 5 +loopfx(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + var_07 = common_scripts\utility::createloopeffect(param_00); + var_07.v["origin"] = param_01; + var_07.v["angles"] = (0,0,0); + if(isdefined(param_03)) + { + var_07.v["angles"] = vectortoangles(param_03 - param_01); + } + + var_07.v["delay"] = param_02; +} + +//Function Number: 6 +create_looper() +{ + self.looper = playloopedfx(level._effect[self.v["fxid"]],self.v["delay"],self.v["origin"],0,self.v["forward"],self.v["up"]); + create_loopsound(); +} + +//Function Number: 7 +create_loopsound() +{ + self notify("stop_loop"); + if(isdefined(self.v["soundalias"]) && self.v["soundalias"] != "nil") + { + if(isdefined(self.v["stopable"]) && self.v["stopable"]) + { + if(isdefined(self.looper)) + { + self.looper thread common_scripts\utility::loop_fx_sound(self.v["soundalias"],self.v["origin"],0,"death"); + return; + } + + thread common_scripts\utility::loop_fx_sound(self.v["soundalias"],self.v["origin"],0,"stop_loop"); + return; + } + + if(isdefined(self.looper)) + { + self.looper thread common_scripts\utility::loop_fx_sound(self.v["soundalias"],self.v["origin"],0); + return; + } + + var_00 = 0; + if(level.var_7CF == 1 && isdefined(self.v["server_culled"])) + { + var_00 = self.v["server_culled"]; + } + + thread common_scripts\utility::loop_fx_sound(self.v["soundalias"],self.v["origin"],var_00); + return; + } +} + +//Function Number: 8 +create_interval_sound() +{ + self notify("stop_loop"); + if(!isdefined(self.v["soundalias"])) + { + return; + } + + if(self.v["soundalias"] == "nil") + { + return; + } + + var_00 = undefined; + var_01 = self; + if((isdefined(self.v["stopable"]) && self.v["stopable"]) || level.createfx_enabled) + { + if(isdefined(self.looper)) + { + var_01 = self.looper; + var_00 = "death"; + } + else + { + var_00 = "stop_loop"; + } + } + + var_01 thread common_scripts\utility::loop_fx_sound_interval(self.v["soundalias"],self.v["origin"],var_00,undefined,self.v["delay_min"],self.v["delay_max"]); +} + +//Function Number: 9 +loopfxthread() +{ + common_scripts\utility::waitframe(); + if(isdefined(self.var_7F6)) + { + level waittill("start fx" + self.var_7F6); + } + + for(;;) + { + create_looper(); + if(isdefined(self.timeout)) + { + thread loopfxstop(self.timeout); + } + + if(isdefined(self.var_7F8)) + { + level waittill("stop fx" + self.var_7F8); + } + else + { + return; + } + + if(isdefined(self.looper)) + { + self.looper delete(); + } + + if(isdefined(self.var_7F6)) + { + level waittill("start fx" + self.var_7F6); + continue; + } + } +} + +//Function Number: 10 +loopfxchangeid(param_00) +{ + self endon("death"); + param_00 waittill("effect id changed",var_01); +} + +//Function Number: 11 +loopfxchangeorg(param_00) +{ + self endon("death"); + for(;;) + { + param_00 waittill("effect org changed",var_01); + self.origin = var_01; + } +} + +//Function Number: 12 +loopfxchangedelay(param_00) +{ + self endon("death"); + param_00 waittill("effect delay changed",var_01); +} + +//Function Number: 13 +loopfxdeletion(param_00) +{ + self endon("death"); + param_00 waittill("effect deleted"); + self delete(); +} + +//Function Number: 14 +loopfxstop(param_00) +{ + self endon("death"); + wait param_00; + self.looper delete(); +} + +//Function Number: 15 +loopsound(param_00,param_01,param_02) +{ + level thread loopsoundthread(param_00,param_01,param_02); +} + +//Function Number: 16 +loopsoundthread(param_00,param_01,param_02) +{ + var_03 = spawn("script_origin",param_01); + var_03.origin = param_01; + var_03 playloopsound(param_00); +} + +//Function Number: 17 +gunfireloopfx(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07) +{ + thread gunfireloopfxthread(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07); +} + +//Function Number: 18 +gunfireloopfxthread(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07) +{ + level endon("stop all gunfireloopfx"); + common_scripts\utility::waitframe(); + if(param_07 < param_06) + { + var_08 = param_07; + param_07 = param_06; + param_06 = var_08; + } + + var_09 = param_06; + var_0A = param_07 - param_06; + if(param_05 < param_04) + { + var_08 = param_05; + param_05 = param_04; + param_04 = var_08; + } + + var_0B = param_04; + var_0C = param_05 - param_04; + if(param_03 < param_02) + { + var_08 = param_03; + param_03 = param_02; + param_02 = var_08; + } + + var_0D = param_02; + var_0E = param_03 - param_02; + var_0F = spawnfx(level._effect[param_00],param_01); + if(!level.createfx_enabled) + { + var_0F willneverchange(); + } + + for(;;) + { + var_10 = var_0D + randomint(var_0E); + for(var_11 = 0;var_11 < var_10;var_11++) + { + triggerfx(var_0F); + wait var_0B + randomfloat(var_0C); + } + + wait var_09 + randomfloat(var_0A); + } +} + +//Function Number: 19 +gunfireloopfxvec(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08) +{ + thread gunfireloopfxvecthread(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08); +} + +//Function Number: 20 +gunfireloopfxvecthread(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08) +{ + level endon("stop all gunfireloopfx"); + common_scripts\utility::waitframe(); + if(param_08 < param_07) + { + var_09 = param_08; + param_08 = param_07; + param_07 = var_09; + } + + var_0A = param_07; + var_0B = param_08 - param_07; + if(param_06 < param_05) + { + var_09 = param_06; + param_06 = param_05; + param_05 = var_09; + } + + var_0C = param_05; + var_0D = param_06 - param_05; + if(param_04 < param_03) + { + var_09 = param_04; + param_04 = param_03; + param_03 = var_09; + } + + var_0E = param_03; + var_0F = param_04 - param_03; + param_02 = vectornormalize(param_02 - param_01); + var_10 = spawnfx(level._effect[param_00],param_01,param_02); + if(!level.createfx_enabled) + { + var_10 willneverchange(); + } + + for(;;) + { + var_11 = var_0E + randomint(var_0F); + for(var_12 = 0;var_12 < int(var_11 / level.fxfireloopmod);var_12++) + { + triggerfx(var_10); + var_13 = var_0C + randomfloat(var_0D) * level.fxfireloopmod; + if(var_13 < 0.05) + { + var_13 = 0.05; + } + + wait var_13; + } + + wait var_0C + randomfloat(var_0D); + wait var_0A + randomfloat(var_0B); + } +} + +//Function Number: 21 +setfireloopmod(param_00) +{ + level.fxfireloopmod = 1 / param_00; +} + +//Function Number: 22 +setup_fx() +{ + if(!isdefined(self.script_fxid) || !isdefined(self.script_fxcommand) || !isdefined(self.script_delay)) + { + return; + } + + if(isdefined(self.model)) + { + if(self.model == "toilet") + { + thread burnville_paratrooper_hack(); + return; + } + } + + var_00 = undefined; + if(isdefined(self.target)) + { + var_01 = getent(self.target,"targetname"); + if(isdefined(var_01)) + { + var_00 = var_01.origin; + } + } + + var_02 = undefined; + if(isdefined(self.var_808)) + { + var_02 = self.var_808; + } + + var_03 = undefined; + if(isdefined(self.var_809)) + { + var_03 = self.var_809; + } + + if(self.script_fxcommand == "OneShotfx") + { + oneshotfx(self.script_fxid,self.origin,self.script_delay,var_00); + } + + if(self.script_fxcommand == "loopfx") + { + loopfx(self.script_fxid,self.origin,self.script_delay,var_00,var_02,var_03); + } + + if(self.script_fxcommand == "loopsound") + { + loopsound(self.script_fxid,self.origin,self.script_delay); + } + + self delete(); +} + +//Function Number: 23 +burnville_paratrooper_hack() +{ + var_00 = (0,0,self.angles[1]); + var_01 = level._effect[self.script_fxid]; + var_02 = self.origin; + wait 1; + level thread burnville_paratrooper_hack_loop(var_00,var_02,var_01); + self delete(); +} + +//Function Number: 24 +burnville_paratrooper_hack_loop(param_00,param_01,param_02) +{ + for(;;) + { + playfx(param_02,param_01); + wait 30 + randomfloat(40); + } +} + +//Function Number: 25 +create_triggerfx() +{ + if(!verify_effects_assignment(self.v["fxid"])) + { + return; + } + + self.looper = spawnfx(level._effect[self.v["fxid"]],self.v["origin"],self.v["forward"],self.v["up"]); + triggerfx(self.looper,self.v["delay"]); + if(!level.createfx_enabled) + { + self.looper willneverchange(); + } + + create_loopsound(); +} + +//Function Number: 26 +verify_effects_assignment(param_00) +{ + if(isdefined(level._effect[param_00])) + { + return 1; + } + + if(!isdefined(level.var_80E)) + { + level.var_80E = []; + } + + level.var_80E[self.v["fxid"]] = param_00; + verify_effects_assignment_print(param_00); + return 0; +} + +//Function Number: 27 +verify_effects_assignment_print(param_00) +{ + level notify("verify_effects_assignment_print"); + level endon("verify_effects_assignment_print"); + wait 0.05; + var_01 = getarraykeys(level.var_80E); + foreach(var_03 in var_01) + { + } +} + +//Function Number: 28 +oneshotfxthread() +{ + common_scripts\utility::waitframe(); + if(self.v["delay"] > 0) + { + wait self.v["delay"]; + } + + [[ level.func["create_triggerfx"] ]](); +} \ No newline at end of file diff --git a/MW3/PC/SP/common_scripts/_painter.gsc b/MW3/PC/SP/common_scripts/_painter.gsc new file mode 100644 index 0000000..4aebdfb --- /dev/null +++ b/MW3/PC/SP/common_scripts/_painter.gsc @@ -0,0 +1,1319 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: common_scripts\_painter.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 53 + * Decompile Time: 911 ms + * Timestamp: 10/27/2023 2:22:22 AM +*******************************************************************/ + +//Function Number: 1 +main(param_00) +{ + var_01 = getentarray("painter_setup","targetname"); + if(!var_01.size) + { + return; + } + + if(!getdvarint("painter")) + { + common_scripts\utility::array_thread(var_01,::painter_clean_me); + return; + } + + painter_initvars(param_00); + var_02 = []; + var_03 = get_painter_groups(var_01); + foreach(var_05 in var_03) + { + setup_painter_group(var_05); + } + + thread painter_init(); + common_scripts\utility::array_thread(level.var_1BB1,::default_undefined); + level.stop_load = 1; + level waittill("forever"); +} + +//Function Number: 2 +painter_clean_me() +{ + if(isdefined(self.target)) + { + var_00 = getent(self.target,"targetname"); + var_00 delete(); + } + + self delete(); +} + +//Function Number: 3 +default_undefined() +{ + if(!isdefined(self.var_1BB5)) + { + self.var_1BB5 = 0; + } + + if(!isdefined(self.var_1BB6)) + { + self.var_1BB6 = 0; + } + + if(!isdefined(self.var_1BB7)) + { + self.var_1BB7 = 0; + } + + if(!isdefined(self.var_1BB8)) + { + self.var_1BB8 = 0; + } + + if(!isdefined(self.var_1BB9)) + { + self.var_1BB9 = 32; + } + + if(!isdefined(self.radius)) + { + self.radius = 84; + } + + if(!isdefined(self.maxdist)) + { + self.maxdist = 1000; + } + + if(!isdefined(self.var_1BBB)) + { + self.var_1BBB = []; + } +} + +//Function Number: 4 +setup_painter_group(param_00) +{ + var_01 = 100000001; + var_02 = param_00; + var_03 = undefined; + var_04 = undefined; + var_05 = undefined; + var_06 = undefined; + var_07 = undefined; + var_08 = undefined; + var_09 = undefined; + var_0A = undefined; + foreach(var_0C in param_00) + { + var_0A = get_angle_offset(var_0C); + var_07 = get_height_offset(var_0C); + var_0D = isdefined(var_0C.script_parameters) && var_0C.script_parameters == "use_prefab_model"; + if(isdefined(var_0C.radius)) + { + var_05 = var_0C.radius; + } + + if(isdefined(var_0C.var_1BBD) && var_0C.var_1BBD) + { + var_03 = 1; + } + + if(isdefined(var_0C.var_1BBE) && var_0C.var_1BBE) + { + var_06 = var_0C.var_1BBE; + } + + if(isdefined(var_0C.var_1BBF) && var_0C.var_1BBF) + { + var_04 = 1; + } + + foreach(var_0F in var_02) + { + if(var_0C == var_0F) + { + continue; + } + + var_10 = distance(var_0C.origin,var_0F.origin); + if(var_10 < var_01) + { + var_01 = var_10; + } + } + + if(var_01 == 100000001) + { + var_01 = undefined; + } + + add_spammodel(var_0C.var_1BC0,var_0C.model,var_03,var_04,var_01,var_05,var_06,var_07,var_08,var_09,var_0A,var_0D); + } +} + +//Function Number: 5 +get_angle_offset(param_00) +{ + if(!isdefined(param_00.target)) + { + return undefined; + } + + var_01 = getent(param_00.target,"targetname"); + return var_01.angles - param_00.angles; +} + +//Function Number: 6 +get_height_offset(param_00) +{ + if(!isdefined(param_00.target)) + { + return undefined; + } + + var_01 = getent(param_00.target,"targetname"); + var_02 = var_01.origin[2] - param_00.origin[2]; + var_01 delete(); + return var_02; +} + +//Function Number: 7 +get_painter_groups(param_00) +{ + var_01 = []; + var_02 = ""; + foreach(var_04 in param_00) + { + if(!isdefined(var_04.var_1BC0)) + { + var_04.var_1BC0 = var_04.model; + } + + var_02 = var_04.var_1BC0; + level.var_1B4F = var_02; + if(!isdefined(var_01[var_02]) || !var_01[var_02].size) + { + var_01[var_02] = []; + } + + var_01[var_02][var_01[var_02].size] = var_04; + } + + return var_01; +} + +//Function Number: 8 +painter_initvars(param_00) +{ + level._clearalltextafterhudelem = 0; + level.var_1BB5 = 0; + level.var_1BB6 = 0; + level.var_1BC5 = 16; + level.var_1BC6 = 0; + level.var_1BB1 = []; + level.var_1BC7 = []; + level.var_1BC8 = 0.1; + level.var_1BC9 = 31; + level.var_1BCA = 1000; + level.var_1BCB = []; + level.var_1BCC = 0; + level.var_1BCD = 0; + level.var_1BCE = 0; + level.var_1BCF = 0; + level.var_1BD0 = 0; + level.var_1BD1 = ::add_spammodel; + level.timelimitoverride = 1; + thread hack_start(param_00); + thread hud_init(); +} + +//Function Number: 9 +hack_start(param_00) +{ + if(!isdefined(param_00)) + { + param_00 = "painter"; + } + + precachemenu(param_00); + common_scripts\utility::flag_init("user_alive"); + while(!isdefined(get_player())) + { + wait 0.05; + } + + level.var_1BD3 = get_player(); + wait 0.05; + var_01 = "team_marinesopfor"; + var_02 = "autoassign"; + level.var_1BD3 notify("menuresponse",var_01,var_02); + wait 0.05; + var_01 = "changeclass_offline"; + var_02 = "offline_class1_mp, 0"; + level.var_1BD3 notify("menuresponse",var_01,var_02); + level.var_1BD3 openpopupmenu(param_00); + wait 0.05; + level.var_1BD3 closepopupmenu(); + common_scripts\utility::flag_set("user_alive"); +} + +//Function Number: 10 +painter_init() +{ + common_scripts\utility::array_call(getentarray("script_model","classname"),::delete); + setcurrentgroup(level.var_1B4F); + level.var_1B4F = undefined; + playerinit(); +} + +//Function Number: 11 +hud_update_placed_model_count() +{ + level.hud_controler["helppm"].description setvalue(level.var_1BC7.size); + var_00 = 256; + if(level.var_1BC7.size < var_00) + { + level.hud_controler["helppm"].description.color = (1,1,1); + return; + } + + var_01 = 1; + var_02 = 1 - level.var_1BC7.size - var_00 / var_00; + var_03 = var_02; + level.hud_controler["helppm"].description.color = (var_01,var_02,var_03); +} + +//Function Number: 12 +hud_init() +{ + common_scripts\utility::flag_init("user_hud_active"); + common_scripts\utility::flag_wait("user_alive"); + var_00 = 7; + if(is_mp()) + { + var_00 = 7; + } + + var_01 = []; + var_02 = 15; + var_03 = int(var_00 / 2); + var_04 = 240 + var_03 * var_02; + var_05 = 0.5 / var_03; + var_06 = var_05; + for(var_07 = 0;var_07 < var_00;var_07++) + { + var_01[var_07] = _newhudelem(); + var_01[var_07].location = 0; + var_01[var_07].alignx = "left"; + var_01[var_07].aligny = "middle"; + var_01[var_07].foreground = 1; + var_01[var_07].fontscale = 2; + var_01[var_07].sort = 20; + if(var_07 == var_03) + { + var_01[var_07].alpha = 1; + } + else + { + var_01[var_07].alpha = var_06; + } + + var_01[var_07].x = 20; + var_01[var_07].y = var_04; + var_01[var_07] _settext("."); + if(var_07 == var_03) + { + var_05 = var_05 * -1; + } + + var_06 = var_06 + var_05; + var_04 = var_04 - var_02; + } + + level.spam_group_hudelems = var_01; + var_08 = _newhudelem(); + var_08.location = 0; + var_08.alignx = "center"; + var_08.aligny = "bottom"; + var_08.foreground = 1; + var_08.fontscale = 2; + var_08.sort = 20; + var_08.alpha = 1; + var_08.x = 320; + var_08.y = 244; + var_08 _settext("."); + level.crosshair = var_08; + var_08 = _newhudelem(); + var_08.location = 0; + var_08.alignx = "center"; + var_08.aligny = "bottom"; + var_08.foreground = 1; + var_08.fontscale = 2; + var_08.sort = 20; + var_08.alpha = 0; + var_08.x = 320; + var_08.y = 244; + var_08 setvalue(0); + level.crosshair_value = var_08; + controler_hud_add("helppm",1,"^5Placed Models: ",undefined,level.var_1BC7.size); + controler_hud_add("helpdensity",2,"^5Spacing: ",undefined,level.var_1BC5); + controler_hud_add("helpradius",3,"^5Radius: ",undefined,level.var_1BC9); + controler_hud_add("helpxy",6,"^4X / ^3Y: ",undefined,level.var_1BC9); + controler_hud_add("helpab",7,"^2A / ^1B^7: "," - "); + controler_hud_add("helplsrs",8,"^8L^7 / R Stick: "," - "); + controler_hud_add("helplbrb",9,"^8L^7 / R Shoulder: "," - "); + controler_hud_add("helpdpu",10,"^8DPad U / ^7D: "," - "); + controler_hud_add("helpdpl",11,"^8DPad L / ^7R: "," - "); + controler_hud_add("helpF",17,"^8F: ^7( dump ) ^3map_source/" + level.script + "_modeldump.map",""); + hint_buttons_main(); + common_scripts\utility::flag_set("user_hud_active"); +} + +//Function Number: 13 +hint_buttons_main() +{ + controler_hud_update_text("helpxy","^4Select Set Up ^7 / ^3Down"); + controler_hud_update_text("helpab","^2Spacing Down ^7 / ^1up "); + controler_hud_update_text("helplsrs","^8Radius Down ^7 / Up"); + controler_hud_update_text("helplbrb","^8Remove ^7 / Place"); + controler_hud_update_text("helpdpl","^8zOffset Clear ^7 / Set"); + controler_hud_update_text("helpdpu","^8Rotation Clear ^7 / Set"); +} + +//Function Number: 14 +hint_buttons_zoffset() +{ + controler_hud_update_text("helpxy","^4 - ^7 / ^3 - "); + controler_hud_update_text("helpab","^2Height Down ^7 / ^1Up "); + controler_hud_update_text("helplsrs","^8 - ^7 / - "); + controler_hud_update_text("helplbrb","^8 - ^7 / - "); + controler_hud_update_text("helpdpl","^8 - ^7 / Set"); + controler_hud_update_text("helpdpu","^8 - ^7 / - "); + controler_hud_update_text("helpF"," - "); +} + +//Function Number: 15 +hint_buttons_rotation() +{ + controler_hud_update_text("helpxy","^4 - ^7 / ^3 - "); + controler_hud_update_text("helpab","^2RotateOther Up ^7 / ^1Down "); + controler_hud_update_text("helplsrs","^8 - ^7 / - "); + controler_hud_update_text("helplbrb","^8 - ^7 / - "); + controler_hud_update_text("helpdpl","^8 - ^7 / - "); + controler_hud_update_text("helpdpu","^8Set ^7 / - "); + controler_hud_update_text("helpF"," - "); +} + +//Function Number: 16 +setcurrentgroup(param_00) +{ + common_scripts\utility::flag_wait("user_hud_active"); + level.spam_model_current_group = param_00; + var_01 = getarraykeys(level.var_1BB1); + var_02 = 0; + var_03 = int(level.spam_group_hudelems.size / 2); + for(var_04 = 0;var_04 < var_01.size;var_04++) + { + if(var_01[var_04] == param_00) + { + var_02 = var_04; + break; + } + } + + level.spam_group_hudelems[var_03] _settext(var_01[var_02]); + for(var_04 = 1;var_04 < level.spam_group_hudelems.size - var_03;var_04++) + { + if(var_02 - var_04 < 0) + { + level.spam_group_hudelems[var_03 + var_04] _settext("."); + continue; + } + + level.spam_group_hudelems[var_03 + var_04] _settext(var_01[var_02 - var_04]); + } + + for(var_04 = 1;var_04 < level.spam_group_hudelems.size - var_03;var_04++) + { + if(var_02 + var_04 > var_01.size - 1) + { + level.spam_group_hudelems[var_03 - var_04] _settext("."); + continue; + } + + level.spam_group_hudelems[var_03 - var_04] _settext(var_01[var_02 + var_04]); + } + + param_00 = getcurrent_groupstruct(); + level.var_1BB6 = param_00.var_1BB6; + level.var_1BB5 = param_00.var_1BB5; + level.var_1BCA = param_00.maxdist; + level.var_1BC9 = param_00.radius; + level.hud_controler["helpradius"].description setvalue(level.var_1BC9); + level.var_1BC5 = param_00.var_1BB9; + level.hud_controler["helpdensity"].description setvalue(level.var_1BC5); +} + +//Function Number: 17 +setgroup_up() +{ + var_00 = undefined; + var_01 = getarraykeys(level.var_1BB1); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + if(var_01[var_02] == level.spam_model_current_group) + { + var_00 = var_02 + 1; + break; + } + } + + if(var_00 == var_01.size) + { + return; + } + + setcurrentgroup(var_01[var_00]); + while(level.var_1BD3 buttonpressed("BUTTON_Y")) + { + wait 0.05; + } +} + +//Function Number: 18 +setgroup_down() +{ + var_00 = undefined; + var_01 = getarraykeys(level.var_1BB1); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + if(var_01[var_02] == level.spam_model_current_group) + { + var_00 = var_02 - 1; + break; + } + } + + if(var_00 < 0) + { + return; + } + + setcurrentgroup(var_01[var_00]); + while(level.var_1BD3 buttonpressed("BUTTON_X")) + { + wait 0.05; + } +} + +//Function Number: 19 +add_spammodel(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A,param_0B) +{ + if(!isdefined(level.var_1BB1[param_00])) + { + var_0C = spawnstruct(); + level.var_1BB1[param_00] = var_0C; + level.var_1BB1[param_00].var_1BD8 = []; + } + + if(!isdefined(param_0A)) + { + param_0A = (0,0,0); + } + + level.var_1BB1[param_00].var_1BB8 = param_03; + level.var_1BB1[param_00].var_1BB7 = param_02; + level.var_1BB1[param_00].var_1BB9 = param_04; + level.var_1BB1[param_00].radius = param_05; + level.var_1BB1[param_00].maxdist = param_06; + level.var_1BB1[param_00].var_1BB5 = param_08; + level.var_1BB1[param_00].var_1BB6 = param_09; + if(!isdefined(level.var_1BB1[param_00].var_1BBB)) + { + level.var_1BB1[param_00].var_1BBB = []; + } + + level.var_1BB1[param_00].var_1BBB[param_01] = param_0A; + if(!isdefined(level.var_1BB1[param_00].var_1BD9)) + { + level.var_1BB1[param_00].var_1BD9 = []; + } + + level.var_1BB1[param_00].var_1BD9[param_01] = param_07; + if(!isdefined(level.var_1BB1[param_00].var_1BDA)) + { + level.var_1BB1[param_00].var_1BDA = []; + } + + level.var_1BB1[param_00].var_1BDA[param_01] = param_0B; + level.var_1BB1[param_00].var_1BD8[level.var_1BB1[param_00].var_1BD8.size] = param_01; +} + +//Function Number: 20 +playerinit() +{ + level.var_1BDB = 700; + level.var_1BD3 takeallweapons(); + common_scripts\utility::flag_wait("user_hud_active"); + for(;;) + { + var_00 = player_view_trace(); + draw_placement_circle(var_00); + if(level.var_1BD3 buttonpressed("f")) + { + dump_models(); + } + + if(level.var_1BD3 buttonpressed("DPAD_UP")) + { + customrotation_mode(var_00,"DPAD_UP"); + } + else if(level.var_1BD3 buttonpressed("DPAD_DOWN")) + { + customrotation_mode_off(); + } + else if(level.var_1BD3 buttonpressed("DPAD_RIGHT")) + { + customheight_mode(var_00,"DPAD_RIGHT"); + } + else if(level.var_1BD3 buttonpressed("DPAD_LEFT")) + { + customheight_mode_off(); + } + else if(level.var_1BD3 buttonpressed("BUTTON_X")) + { + setgroup_down(); + } + else if(level.var_1BD3 buttonpressed("BUTTON_Y")) + { + setgroup_up(); + } + else if(level.var_1BD3 buttonpressed("BUTTON_LSTICK")) + { + spam_model_circlescale(var_00,-1); + } + else if(level.var_1BD3 buttonpressed("BUTTON_RSTICK")) + { + spam_model_circlescale(var_00,1); + } + else if(level.var_1BD3 buttonpressed("BUTTON_A")) + { + spam_model_densityscale(var_00,-1); + } + else if(level.var_1BD3 buttonpressed("BUTTON_B")) + { + spam_model_densityscale(var_00,1); + } + else + { + if(level.var_1BD3 buttonpressed("BUTTON_LSHLDR")) + { + spam_model_erase(var_00); + } + + if(level.var_1BD3 buttonpressed("BUTTON_RSHLDR")) + { + thread spam_model_place(var_00); + } + } + + level notify("clear_previews"); + wait 0.05; + hud_update_placed_model_count(); + } +} + +//Function Number: 21 +customheight_mode_off() +{ + level.var_1BCD = 0; + hint_buttons_main(); +} + +//Function Number: 22 +customheight_mode(param_00,param_01) +{ + if(param_00["fraction"] == 1) + { + return; + } + + while(level.var_1BD3 buttonpressed(param_01)) + { + wait 0.05; + } + + level.var_1BCD = 1; + hint_buttons_zoffset(); + var_02 = []; + var_02 = spam_models_atcircle(param_00,0,1); + var_03 = 2; + var_04 = 1; + var_05 = param_00["position"]; + while(!level.var_1BD3 buttonpressed(param_01)) + { + var_06 = level.var_1BCE; + if(level.var_1BD3 buttonpressed("BUTTON_A")) + { + var_04 = -1; + } + else if(level.var_1BD3 buttonpressed("BUTTON_B")) + { + var_04 = 1; + } + else + { + var_04 = 0; + } + + var_06 = var_06 + var_04 * var_03; + if(var_06 == 0) + { + var_06 = var_06 + var_04 * var_03; + } + + level.var_1BCE = var_06; + common_scripts\utility::array_thread(var_02,::customheight_mode_offsetmodels,param_00); + draw_placement_circle(param_00,(1,1,1)); + wait 0.05; + } + + common_scripts\utility::array_thread(var_02,::deleteme); + hint_buttons_main(); + while(level.var_1BD3 buttonpressed(param_01)) + { + wait 0.05; + } +} + +//Function Number: 23 +customheight_mode_offsetmodels(param_00) +{ + self.origin = self.var_1BDF + param_00["normal"] * level.var_1BCE; +} + +//Function Number: 24 +customrotation_mode_off() +{ + level.var_1BCC = 0; + hint_buttons_main(); +} + +//Function Number: 25 +customrotation_mode(param_00,param_01) +{ + if(param_00["fraction"] == 1) + { + return; + } + + while(level.var_1BD3 buttonpressed(param_01)) + { + wait 0.05; + } + + hint_buttons_rotation(); + level.var_1BCC = 1; + level.var_1BE2 = level.var_1BD3 getplayerangles(); + var_02 = []; + var_02 = spam_models_atcircle(param_00,1,1); + var_03 = 0; + var_04 = 1; + var_05 = 0; + while(!level.var_1BD3 buttonpressed(param_01)) + { + var_05 = 0; + if(level.var_1BD3 buttonpressed("BUTTON_A")) + { + var_05 = -1; + } + else if(level.var_1BD3 buttonpressed("BUTTON_B")) + { + var_05 = 1; + } + + var_03 = var_03 + var_05 * var_04; + if(var_03 > 360) + { + var_03 = 1; + } + + if(var_03 < 0) + { + var_03 = 359; + } + + draw_placement_circle(param_00,(0,0,1)); + level.var_1BE2 = level.var_1BD3 getplayerangles(); + level.var_1BE2 = level.var_1BE2 + (0,0,var_03); + for(var_06 = 0;var_06 < var_02.size;var_06++) + { + var_02[var_06].angles = level.var_1BE2; + } + + wait 0.05; + } + + hint_buttons_main(); + while(level.var_1BD3 buttonpressed(param_01)) + { + wait 0.05; + } + + for(var_06 = 0;var_06 < var_02.size;var_06++) + { + var_02[var_06] thread deleteme(); + } +} + +//Function Number: 26 +deleteme() +{ + self delete(); +} + +//Function Number: 27 +spam_model_clearcondition() +{ + self endon("death"); + level waittill("clear_previews"); + level.var_1BCB = common_scripts\utility::array_remove(level.var_1BCB,self); + self delete(); +} + +//Function Number: 28 +crosshair_fadetopoint() +{ + level notify("crosshair_fadetopoint"); + level endon("crosshair_fadetopoint"); + wait 2; + level.crosshair_value.alpha = 0; + level.crosshair.alpha = 1; +} + +//Function Number: 29 +spam_model_circlescale(param_00,param_01) +{ + if(gettime() - level.var_1BCF > 60) + { + level.var_1BD0 = 0; + } + + level.var_1BD0 = level.var_1BD0 + 0.05; + if(level.var_1BD0 < 0.5) + { + var_02 = 2; + } + else + { + var_02 = level.var_1BD0 / 0.3; + } + + var_03 = level.var_1BC9; + var_03 = var_03 + param_01 * var_02; + if(var_03 > 0) + { + level.var_1BC9 = var_03; + } + + level.hud_controler["helpradius"].description setvalue(level.var_1BC9); + level.var_1BCF = gettime(); +} + +//Function Number: 30 +spam_model_densityscale(param_00,param_01) +{ + var_02 = 2; + var_03 = level.var_1BC5; + var_03 = var_03 + param_01 * var_02; + if(var_03 > 0) + { + level.var_1BC5 = var_03; + } + + level.crosshair_value.alpha = 1; + level.crosshair.alpha = 0; + level.crosshair_value setvalue(level.var_1BC5); + level.hud_controler["helpdensity"].description setvalue(level.var_1BC5); + thread crosshair_fadetopoint(); +} + +//Function Number: 31 +draw_placement_circle(param_00,param_01) +{ + if(!isdefined(param_01)) + { + param_01 = (0,1,0); + } + + if(param_00["fraction"] == 1) + { + return; + } + + var_02 = vectortoangles(param_00["normal"]); + var_03 = param_00["position"]; + var_04 = level.var_1BC9; + plot_circle(var_03,var_04,var_02,param_01,40,level.var_1BC9); + if(level.var_1BCC) + { + draw_axis(var_03,level.var_1BE2); + } + + if(level.var_1BCD) + { + common_scripts\utility::draw_arrow(var_03,var_03 + param_00["normal"] * level.var_1BCE,(1,1,1)); + } +} + +//Function Number: 32 +player_view_trace() +{ + var_00 = level.var_1BCA; + var_01 = level.var_1BD3 geteye(); + return bullettrace(var_01,var_01 + anglestoforward(level.var_1BD3 getplayerangles()) * var_00,0,self); +} + +//Function Number: 33 +orienttoplayeryrot() +{ + self addyaw(level.var_1BD3 getplayerangles()[1] - common_scripts\utility::flat_angle(self.angles)[1]); +} + +//Function Number: 34 +getcurrent_groupstruct() +{ + return level.var_1BB1[level.spam_model_current_group]; +} + +//Function Number: 35 +orient_model() +{ + var_00 = getcurrent_groupstruct(); + if(level.var_1BCC) + { + self.angles = level.var_1BE2; + return; + } + + if(level.var_1BB5) + { + self.angles = level.var_1BD3 getplayerangles(); + } + + if(level.var_1BB6) + { + orienttoplayeryrot(); + } + + if(var_00.var_1BB7) + { + self.angles = common_scripts\utility::flat_angle(self.angles); + } + + if(!level.var_1BB6 && !level.var_1BB5) + { + self addyaw(randomint(360)); + } + + if(var_00.var_1BB8) + { + self.angles = common_scripts\utility::flat_angle(vectortoangles(self.origin - level.var_1BD3 geteye())); + self addyaw(90); + } + + self addroll(var_00.var_1BBB[self.model][0]); + self addpitch(var_00.var_1BBB[self.model][1]); + self addyaw(var_00.var_1BBB[self.model][2]); +} + +//Function Number: 36 +spam_model_place(param_00) +{ + if(level.var_1BC6) + { + return; + } + + if(param_00["fraction"] == 1 && !level.var_1BB5) + { + return; + } + + level.var_1BC6 = 1; + var_01 = spam_models_atcircle(param_00,1); + level.var_1BC7 = common_scripts\utility::array_combine(level.var_1BC7,var_01); + level.var_1BC6 = 0; +} + +//Function Number: 37 +getrandom_spammodel() +{ + var_00 = level.var_1BB1[level.spam_model_current_group].var_1BD8; + return var_00[randomint(var_00.size)]; +} + +//Function Number: 38 +spam_models_atcircle(param_00,param_01,param_02) +{ + if(!isdefined(param_02)) + { + param_02 = 0; + } + + var_03 = []; + var_04 = level.var_1BC5; + var_05 = level.var_1BC9; + var_06 = int(var_05 / var_04) * 2; + var_07 = 0; + var_08 = param_00["position"]; + var_09 = vectortoangles(param_00["normal"]); + if(param_01) + { + var_09 = var_09 + (0,randomfloat(360),0); + } + + var_0A = vectornormalize(anglestoright(var_09)); + var_0B = vectornormalize(anglestoup(var_09)); + var_0C = var_08; + var_0C = var_0C - var_0A * var_05; + var_0C = var_0C - var_0B * var_05; + var_0C = var_0C + var_0A * var_04; + var_0C = var_0C + var_0B * var_04; + var_0D = var_0C; + if(var_06 == 0 || level.var_1BB5) + { + if(!param_02) + { + if(is_too_dense(var_08)) + { + return var_03; + } + } + + if(!param_02) + { + if(level.var_1BC7.size + var_03.size > level.var_1BDB) + { + return var_03; + } + } + + var_0E = getrandom_spammodel(); + var_03[0] = spam_modelattrace(param_00,var_0E); + var_03[0] orient_model(); + return var_03; + } + + var_0F = []; + var_10 = var_08; + while(var_0F < var_06) + { + for(var_10 = var_07;var_10 < var_06;var_10++) + { + if(!param_02) + { + if(level.var_1BC7.size + var_03.size > level.var_1BDB) + { + return var_03; + } + } + + var_0D = var_0C; + var_0D = var_0D + var_0A * var_0F * var_04; + var_0D = var_0D + var_0B * var_10 * var_04; + if(distance(var_0D,var_08) > var_05) + { + continue; + } + + var_0E = contour_point(var_0D,var_09,level.var_1BC9); + if(var_0E["fraction"] == 1) + { + continue; + } + + if(is_too_dense(var_0E["position"])) + { + continue; + } + + var_11 = getrandom_spammodel(); + var_12 = spam_modelattrace(var_0E,var_11); + var_12 orient_model(); + var_03[var_03.size] = var_12; + } + + var_0F++; + } + + return var_03; +} + +//Function Number: 39 +is_too_dense(param_00) +{ + for(var_01 = level.var_1BC7.size - 1;var_01 >= 0;var_01--) + { + if(distance(level.var_1BC7[var_01].var_1BDF,param_00) < level.var_1BC5 - 1) + { + return 1; + } + } + + return 0; +} + +//Function Number: 40 +get_player() +{ + return getentarray("player","classname")[0]; +} + +//Function Number: 41 +spam_modelattrace(param_00,param_01) +{ + var_02 = spawn("script_model",level.var_1BD3.origin); + var_02 setmodel(param_01); + var_02 notsolid(); + var_02.origin = param_00["position"]; + var_02.angles = vectortoangles(param_00["normal"]); + var_02 addpitch(90); + var_02.var_1BDF = var_02.origin; + var_03 = getcurrent_groupstruct(); + if(level.var_1BCD) + { + var_02.origin = var_02.origin + param_00["normal"] * level.var_1BCE; + } + + var_03 = getcurrent_groupstruct(); + if(isdefined(var_03.var_1BD9[param_01])) + { + var_02.origin = var_02.origin + param_00["normal"] * var_03.var_1BD9[param_01]; + } + + if(isdefined(var_03.var_1BDA[param_01])) + { + var_02.var_1BDA = var_03.var_1BDA[param_01]; + } + + return var_02; +} + +//Function Number: 42 +contour_point(param_00,param_01,param_02) +{ + var_03 = param_02; + var_04 = anglestoforward(param_01); + var_05 = param_00 + var_04 * var_03; + var_06 = param_00 + var_04 * -1 * var_03; + return bullettrace(var_05,var_06,0,level.var_1BD3); +} + +//Function Number: 43 +plot_circle(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if(!isdefined(param_03)) + { + param_03 = (0,1,0); + } + + if(!isdefined(param_04)) + { + param_04 = 16; + } + + var_06 = param_04 / 2; + var_07 = 360 / param_04; + param_04++; + var_08 = []; + var_09 = 0; + var_08 = []; + var_09 = 0; + for(var_0A = 0;var_0A < param_04;var_0A++) + { + var_0B = param_00 + anglestoup(param_02 + (0,0,var_09)) * param_01; + var_0C = contour_point(var_0B,param_02,level.var_1BC9); + if(var_0C["fraction"] != 1) + { + var_08[var_08.size] = var_0C["position"]; + } + + var_09 = var_09 + var_07; + } + + common_scripts\utility::plot_points(var_08,param_03[0],param_03[1],param_03[2]); + var_08 = []; +} + +//Function Number: 44 +spam_model_erase(param_00) +{ + var_01 = param_00["position"]; + var_02 = []; + var_03 = []; + for(var_04 = 0;var_04 < level.var_1BC7.size;var_04++) + { + if(distance(level.var_1BC7[var_04].var_1BDF,var_01) > level.var_1BC9) + { + var_02[var_02.size] = level.var_1BC7[var_04]; + continue; + } + + var_03[var_03.size] = level.var_1BC7[var_04]; + } + + level.var_1BC7 = var_02; + for(var_04 = 0;var_04 < var_03.size;var_04++) + { + var_03[var_04] delete(); + } +} + +//Function Number: 45 +dump_models() +{ +} + +//Function Number: 46 +draw_axis(param_00,param_01) +{ + var_02 = 32; + var_03 = var_02 * anglestoforward(param_01); + var_04 = var_02 * anglestoright(param_01); + var_05 = var_02 * anglestoup(param_01); +} + +//Function Number: 47 +_newhudelem() +{ + if(!isdefined(level.scripted_elems)) + { + level.scripted_elems = []; + } + + var_00 = newhudelem(); + level.scripted_elems[level.scripted_elems.size] = var_00; + return var_00; +} + +//Function Number: 48 +_settext(param_00) +{ + self.realtext = param_00; + self settext("_"); + thread _clearalltextafterhudelem(); + var_01 = 0; + foreach(var_03 in level.scripted_elems) + { + if(isdefined(var_03.realtext)) + { + var_01 = var_01 + var_03.realtext.size; + var_03 settext(var_03.realtext); + } + } +} + +//Function Number: 49 +controler_hud_add(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = 520; + if(is_mp()) + { + var_05 = 630; + } + + var_06 = 120; + var_07 = 18; + var_08 = 0.8; + var_09 = 20; + var_0A = 1.4; + if(!isdefined(param_02)) + { + param_02 = ""; + } + + if(!isdefined(level.hud_controler) || !isdefined(level.hud_controler[param_00])) + { + level.hud_controler[param_00] = _newhudelem(); + var_0B = _newhudelem(); + } + else + { + var_0B = level.hud_controler[param_01].description; + } + + level.hud_controler[param_00].location = 0; + level.hud_controler[param_00].alignx = "right"; + level.hud_controler[param_00].aligny = "middle"; + level.hud_controler[param_00].foreground = 1; + level.hud_controler[param_00].fontscale = 1.5; + level.hud_controler[param_00].sort = 20; + level.hud_controler[param_00].alpha = var_08; + level.hud_controler[param_00].x = var_05 + var_09; + level.hud_controler[param_00].y = var_06 + param_01 * var_07; + level.hud_controler[param_00] _settext(param_02); + level.hud_controler[param_00].base_button_text = param_02; + var_0B.location = 0; + var_0B.alignx = "left"; + var_0B.aligny = "middle"; + var_0B.foreground = 1; + var_0B.fontscale = var_0A; + var_0B.sort = 20; + var_0B.alpha = var_08; + var_0B.x = var_05 + var_09; + var_0B.y = var_06 + param_01 * var_07; + if(isdefined(param_04)) + { + var_0B setvalue(param_04); + } + + if(isdefined(param_03)) + { + var_0B _settext(param_03); + } + + level.hud_controler[param_00].description = var_0B; +} + +//Function Number: 50 +controler_hud_update_text(param_00,param_01) +{ + if(is_mp()) + { + level.hud_controler[param_00] _settext(level.hud_controler[param_00].base_button_text + param_01); + level.hud_controler[param_00].description _settext(""); + return; + } + + level.hud_controler[param_00].description _settext(param_01); +} + +//Function Number: 51 +controler_hud_update_button(param_00,param_01) +{ + level.hud_controler[param_00] _settext(param_01); +} + +//Function Number: 52 +_clearalltextafterhudelem() +{ + if(level._clearalltextafterhudelem) + { + return; + } + + level._clearalltextafterhudelem = 1; + self clearalltextafterhudelem(); + wait 0.05; + level._clearalltextafterhudelem = 0; +} + +//Function Number: 53 +is_mp() +{ + return issubstr(level.script,"mp_"); +} \ No newline at end of file diff --git a/MW3/PC/SP/common_scripts/_pipes.gsc b/MW3/PC/SP/common_scripts/_pipes.gsc new file mode 100644 index 0000000..c21a2e2 --- /dev/null +++ b/MW3/PC/SP/common_scripts/_pipes.gsc @@ -0,0 +1,290 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: common_scripts\_pipes.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 12 + * Decompile Time: 179 ms + * Timestamp: 10/27/2023 2:22:50 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + level.var_1D03 = 25; + var_00 = getentarray("pipe_shootable","targetname"); + if(!var_00.size) + { + return; + } + + level.var_1D04 = spawnstruct(); + level.var_1D04.var_1D05 = 0; + var_00 thread precachefx(); + var_00 thread methodsinit(); + waittillframeend; + common_scripts\utility::array_thread(var_00,::pipesetup); +} + +//Function Number: 2 +pipesetup() +{ + self setcandamage(1); + self setcanradiusdamage(0); + self.var_1D07 = []; + var_00 = undefined; + if(isdefined(self.target)) + { + var_00 = common_scripts\utility::getstruct(self.target,"targetname"); + self.a = var_00.origin; + var_01 = anglestoforward(var_00.angles); + var_01 = var_01 * 128; + self.b = self.a + var_01; + } + else + { + var_01 = anglestoforward(self.angles); + var_02 = var_01 * 64; + self.a = self.origin + var_02; + var_02 = var_01 * -64; + self.b = self.origin + var_02; + } + + thread pipe_wait_loop(); +} + +//Function Number: 3 +pipe_wait_loop() +{ + var_00 = (0,0,0); + var_01 = 0; + var_02 = 4; + for(;;) + { + self waittill("damage",var_03,var_04,var_05,var_00,var_06); + if(var_01) + { + if(randomint(100) <= 33) + { + continue; + } + } + + var_01 = 1; + var_07 = pipe_logic(var_05,var_00,var_06,var_04); + if(var_07) + { + var_02--; + } + + if(var_02 <= 0) + { + break; + } + } + + self setcandamage(0); +} + +//Function Number: 4 +pipe_logic(param_00,param_01,param_02,param_03) +{ + if(level.var_1D04.var_1D05 > 8) + { + return 0; + } + + if(!isdefined(level.var_1D04.var_1D0B[param_02])) + { + param_01 = pipe_calc_nofx(param_01,param_02); + } + else + { + param_01 = self [[ level.var_1D04.var_1D0B[param_02] ]](param_01,param_02); + } + + if(!isdefined(param_01)) + { + return 0; + } + + if(isdefined(param_03.classname) && param_03.classname == "worldspawn") + { + return 0; + } + + foreach(var_05 in self.var_1D07) + { + if(distancesquared(param_01,var_05.origin) < 25) + { + return 0; + } + } + + var_07 = vectorfromlinetopoint(self.a,self.b,param_01); + thread pipefx(param_01,var_07,param_03); + return 1; +} + +//Function Number: 5 +pipefx(param_00,param_01,param_02) +{ + var_03 = level.var_1D04.var_1D0D[self.script_noteworthy]; + var_04 = int(level.var_1D03 / var_03); + var_05 = level.var_1D04.var_1D0E[self.script_noteworthy + "_hit"]; + var_06 = level.var_1D04.var_1D0E[self.script_noteworthy + "_loop"]; + var_07 = level.var_1D04.var_1D0E[self.script_noteworthy + "_end"]; + var_08 = spawn("script_origin",param_00); + var_08 hide(); + var_08 playsound(var_05); + var_08 playloopsound(var_06); + self.var_1D07[self.var_1D07.size] = var_08; + level.var_1D04.var_1D05++; + if(common_scripts\utility::issp() || self.script_noteworthy != "steam") + { + thread pipe_damage(param_00,param_01,param_02,var_08); + } + + playfx(level.var_1D04._effect[self.script_noteworthy],param_00,param_01); + wait var_03; + var_04--; + while(level.var_1D04.var_1D05 <= 8 && var_04 > 0) + { + playfx(level.var_1D04._effect[self.script_noteworthy],param_00,param_01); + wait var_03; + var_04--; + } + + var_08 playsound(var_07); + wait 0.5; + var_08 stoploopsound(var_06); + var_08 delete(); + self.var_1D07 = common_scripts\utility::array_removeundefined(self.var_1D07); + level.var_1D04.var_1D05--; +} + +//Function Number: 6 +pipe_damage(param_00,param_01,param_02,param_03) +{ + if(!allow_pipe_damage()) + { + return; + } + + param_03 endon("death"); + var_04 = param_03.origin + vectornormalize(param_01) * 40; + var_05 = level.var_1D04.var_1D10[self.script_noteworthy]; + for(;;) + { + if(!isdefined(self.damageowner)) + { + self radiusdamage(var_04,36,var_05,var_05 * 0.75,undefined,"MOD_TRIGGER_HURT"); + } + else + { + self radiusdamage(var_04,36,var_05,var_05 * 0.75,param_02,"MOD_TRIGGER_HURT"); + } + + wait 0.4; + } +} + +//Function Number: 7 +allow_pipe_damage() +{ + if(!common_scripts\utility::issp()) + { + return 0; + } + + if(!isdefined(level.var_1D12)) + { + return 1; + } + + return level.var_1D12; +} + +//Function Number: 8 +methodsinit() +{ + level.var_1D04.var_1D0B = []; + level.var_1D04.var_1D0B["MOD_UNKNOWN"] = ::pipe_calc_splash; + level.var_1D04.var_1D0B["MOD_PISTOL_BULLET"] = ::pipe_calc_ballistic; + level.var_1D04.var_1D0B["MOD_RIFLE_BULLET"] = ::pipe_calc_ballistic; + level.var_1D04.var_1D0B["MOD_GRENADE"] = ::pipe_calc_splash; + level.var_1D04.var_1D0B["MOD_GRENADE_SPLASH"] = ::pipe_calc_splash; + level.var_1D04.var_1D0B["MOD_PROJECTILE"] = ::pipe_calc_splash; + level.var_1D04.var_1D0B["MOD_PROJECTILE_SPLASH"] = ::pipe_calc_splash; + level.var_1D04.var_1D0B["MOD_TRIGGER_HURT"] = ::pipe_calc_splash; + level.var_1D04.var_1D0B["MOD_EXPLOSIVE"] = ::pipe_calc_splash; + level.var_1D04.var_1D0B["MOD_EXPLOSIVE_BULLET"] = ::pipe_calc_splash; +} + +//Function Number: 9 +pipe_calc_ballistic(param_00,param_01) +{ + return param_00; +} + +//Function Number: 10 +pipe_calc_splash(param_00,param_01) +{ + var_02 = vectornormalize(vectorfromlinetopoint(self.a,self.b,param_00)); + param_00 = pointonsegmentnearesttopoint(self.a,self.b,param_00); + return param_00 + var_02 * 4; +} + +//Function Number: 11 +pipe_calc_nofx(param_00,param_01) +{ + return undefined; +} + +//Function Number: 12 +precachefx() +{ + var_00 = 0; + var_01 = 0; + foreach(var_03 in self) + { + if(var_03.script_noteworthy == "water") + { + var_03.script_noteworthy = "steam"; + } + + if(var_03.script_noteworthy == "steam") + { + var_03 willneverchange(); + var_00 = 1; + continue; + } + + if(var_03.script_noteworthy == "fire") + { + var_03 willneverchange(); + var_01 = 1; + continue; + } + } + + if(var_00) + { + level.var_1D04._effect["steam"] = loadfx("impacts/pipe_steam"); + level.var_1D04.var_1D0E["steam_hit"] = "mtl_steam_pipe_hit"; + level.var_1D04.var_1D0E["steam_loop"] = "mtl_steam_pipe_hiss_loop"; + level.var_1D04.var_1D0E["steam_end"] = "mtl_steam_pipe_hiss_loop_end"; + level.var_1D04.var_1D0D["steam"] = 3; + level.var_1D04.var_1D10["steam"] = 5; + } + + if(var_01) + { + level.var_1D04._effect["fire"] = loadfx("impacts/pipe_fire"); + level.var_1D04.var_1D0E["fire_hit"] = "mtl_gas_pipe_hit"; + level.var_1D04.var_1D0E["fire_loop"] = "mtl_gas_pipe_flame_loop"; + level.var_1D04.var_1D0E["fire_end"] = "mtl_gas_pipe_flame_end"; + level.var_1D04.var_1D0D["fire"] = 3; + level.var_1D04.var_1D10["fire"] = 5; + } +} \ No newline at end of file diff --git a/MW3/PC/SP/common_scripts/utility.gsc b/MW3/PC/SP/common_scripts/utility.gsc new file mode 100644 index 0000000..2c1e4e6 --- /dev/null +++ b/MW3/PC/SP/common_scripts/utility.gsc @@ -0,0 +1,3053 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: common_scripts\utility.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 173 + * Decompile Time: 3019 ms + * Timestamp: 10/27/2023 2:22:48 AM +*******************************************************************/ + +//Function Number: 1 +scriptprintln(param_00,param_01) +{ +} + +//Function Number: 2 +debugprintln(param_00,param_01) +{ +} + +//Function Number: 3 +draw_debug_line(param_00,param_01,param_02) +{ + for(var_03 = 0;var_03 < param_02 * 20;var_03++) + { + wait 0.05; + } +} + +//Function Number: 4 +waittillend(param_00) +{ + self waittillmatch("end",param_00); +} + +//Function Number: 5 +noself_func(param_00,param_01,param_02,param_03,param_04) +{ + if(!isdefined(level.func)) + { + return; + } + + if(!isdefined(level.func[param_00])) + { + return; + } + + if(!isdefined(param_01)) + { + [[ level.func[param_00] ]](); + return; + } + + if(!isdefined(param_02)) + { + [[ level.func[param_00] ]](param_01); + return; + } + + if(!isdefined(param_03)) + { + [[ level.func[param_00] ]](param_01,param_02); + return; + } + + if(!isdefined(param_04)) + { + [[ level.func[param_00] ]](param_01,param_02,param_03); + return; + } + + [[ level.func[param_00] ]](param_01,param_02,param_03,param_04); +} + +//Function Number: 6 +self_func(param_00,param_01,param_02,param_03,param_04) +{ + if(!isdefined(level.func[param_00])) + { + return; + } + + if(!isdefined(param_01)) + { + self [[ level.func[param_00] ]](); + return; + } + + if(!isdefined(param_02)) + { + self [[ level.func[param_00] ]](param_01); + return; + } + + if(!isdefined(param_03)) + { + self [[ level.func[param_00] ]](param_01,param_02); + return; + } + + if(!isdefined(param_04)) + { + self [[ level.func[param_00] ]](param_01,param_02,param_03); + return; + } + + self [[ level.func[param_00] ]](param_01,param_02,param_03,param_04); +} + +//Function Number: 7 +randomvector(param_00) +{ + return (randomfloat(param_00) - param_00 * 0.5,randomfloat(param_00) - param_00 * 0.5,randomfloat(param_00) - param_00 * 0.5); +} + +//Function Number: 8 +randomvectorrange(param_00,param_01) +{ + var_02 = randomfloatrange(param_00,param_01); + if(randomint(2) == 0) + { + var_02 = var_02 * -1; + } + + var_03 = randomfloatrange(param_00,param_01); + if(randomint(2) == 0) + { + var_03 = var_03 * -1; + } + + var_04 = randomfloatrange(param_00,param_01); + if(randomint(2) == 0) + { + var_04 = var_04 * -1; + } + + return (var_02,var_03,var_04); +} + +//Function Number: 9 +angle_dif(param_00,param_01) +{ + if(param_00 == param_01) + { + return 0; + } + + while(param_01 > 360) + { + param_01 = param_01 - 360; + } + + while(param_01 < 0) + { + param_01 = param_01 + 360; + } + + while(param_00 > 360) + { + param_00 = param_00 - 360; + } + + while(param_00 < 0) + { + param_00 = param_00 + 360; + } + + var_02 = undefined; + var_03 = undefined; + if(param_01 > 180) + { + var_03 = 360 - param_01; + } + else + { + var_03 = param_01; + } + + if(param_00 > 180) + { + var_02 = 360 - param_00; + } + else + { + var_02 = param_00; + } + + var_04 = var_03 + var_02; + var_05 = 0; + if(param_01 > param_00) + { + var_05 = param_01 - param_00; + } + else + { + var_05 = param_00 - param_01; + } + + if(var_05 < var_04) + { + return var_05; + } + + return var_04; +} + +//Function Number: 10 +sign(param_00) +{ + if(param_00 >= 0) + { + return 1; + } + + return -1; +} + +//Function Number: 11 +track(param_00) +{ + if(isdefined(self.var_8BA)) + { + if(param_00 == self.var_8BA) + { + return; + } + } + + self.var_8BA = param_00; +} + +//Function Number: 12 +get_enemy_team(param_00) +{ + var_01 = []; + return var_7B[var_01]; +} + +//Function Number: 13 +clear_exception(param_00) +{ + self.var_8BE[param_00] = level.var_8BD; +} + +//Function Number: 14 +set_exception(param_00,param_01) +{ + self.var_8BE[param_00] = param_01; +} + +//Function Number: 15 +set_all_exceptions(param_00) +{ + var_01 = getarraykeys(self.var_8BE); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + self.var_8BE[var_01[var_02]] = param_00; + } +} + +//Function Number: 16 +cointoss() +{ + return randomint(100) >= 50; +} + +//Function Number: 17 +choose_from_weighted_array(param_00,param_01) +{ + var_02 = randomint(param_01[param_01.size - 1] + 1); + for(var_03 = 0;var_03 < param_01.size;var_03++) + { + if(var_02 <= param_01[var_03]) + { + return param_00[var_03]; + } + } +} + +//Function Number: 18 +get_cumulative_weights(param_00) +{ + var_01 = []; + var_02 = 0; + for(var_03 = 0;var_03 < param_00.size;var_03++) + { + var_02 = var_02 + param_00[var_03]; + var_01[var_03] = var_02; + } + + return var_01; +} + +//Function Number: 19 +waittill_string(param_00,param_01) +{ + if(param_00 != "death") + { + self endon("death"); + } + + param_01 endon("die"); + self waittill(param_00); + param_01 notify("returned",param_00); +} + +//Function Number: 20 +waittill_multiple(param_00,param_01,param_02,param_03,param_04) +{ + self endon("death"); + var_05 = spawnstruct(); + var_05.var_8C6 = 0; + if(isdefined(param_00)) + { + thread waittill_string(param_00,var_05); + var_05.var_8C6++; + } + + if(isdefined(param_01)) + { + thread waittill_string(param_01,var_05); + var_05.var_8C6++; + } + + if(isdefined(param_02)) + { + thread waittill_string(param_02,var_05); + var_05.var_8C6++; + } + + if(isdefined(param_03)) + { + thread waittill_string(param_03,var_05); + var_05.var_8C6++; + } + + if(isdefined(param_04)) + { + thread waittill_string(param_04,var_05); + var_05.var_8C6++; + } + + while(var_05.var_8C6) + { + var_05 waittill("returned"); + var_05.var_8C6--; + } + + var_05 notify("die"); +} + +//Function Number: 21 +waittill_multiple_ents(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07) +{ + self endon("death"); + var_08 = spawnstruct(); + var_08.var_8C6 = 0; + if(isdefined(param_00)) + { + param_00 thread waittill_string(param_01,var_08); + var_08.var_8C6++; + } + + if(isdefined(param_02)) + { + param_02 thread waittill_string(param_03,var_08); + var_08.var_8C6++; + } + + if(isdefined(param_04)) + { + param_04 thread waittill_string(param_05,var_08); + var_08.var_8C6++; + } + + if(isdefined(param_06)) + { + param_06 thread waittill_string(param_07,var_08); + var_08.var_8C6++; + } + + while(var_08.var_8C6) + { + var_08 waittill("returned"); + var_08.var_8C6--; + } + + var_08 notify("die"); +} + +//Function Number: 22 +waittill_any_return(param_00,param_01,param_02,param_03,param_04) +{ + if((!isdefined(param_00) || param_00 != "death") && !isdefined(param_01) || param_01 != "death" && !isdefined(param_02) || param_02 != "death" && !isdefined(param_03) || param_03 != "death" && !isdefined(param_04) || param_04 != "death") + { + self endon("death"); + } + + var_05 = spawnstruct(); + if(isdefined(param_00)) + { + thread waittill_string(param_00,var_05); + } + + if(isdefined(param_01)) + { + thread waittill_string(param_01,var_05); + } + + if(isdefined(param_02)) + { + thread waittill_string(param_02,var_05); + } + + if(isdefined(param_03)) + { + thread waittill_string(param_03,var_05); + } + + if(isdefined(param_04)) + { + thread waittill_string(param_04,var_05); + } + + var_05 waittill("returned",var_06); + var_05 notify("die"); + return var_06; +} + +//Function Number: 23 +waittill_any_timeout(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if((!isdefined(param_01) || param_01 != "death") && !isdefined(param_02) || param_02 != "death" && !isdefined(param_03) || param_03 != "death" && !isdefined(param_04) || param_04 != "death" && !isdefined(param_05) || param_05 != "death") + { + self endon("death"); + } + + var_06 = spawnstruct(); + if(isdefined(param_01)) + { + thread waittill_string(param_01,var_06); + } + + if(isdefined(param_02)) + { + thread waittill_string(param_02,var_06); + } + + if(isdefined(param_03)) + { + thread waittill_string(param_03,var_06); + } + + if(isdefined(param_04)) + { + thread waittill_string(param_04,var_06); + } + + if(isdefined(param_05)) + { + thread waittill_string(param_05,var_06); + } + + var_06 thread _timeout(param_00); + var_06 waittill("returned",var_07); + var_06 notify("die"); + return var_07; +} + +//Function Number: 24 +_timeout(param_00) +{ + self endon("die"); + wait param_00; + self notify("returned","timeout"); +} + +//Function Number: 25 +waittill_any(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07) +{ + if(isdefined(param_01)) + { + self endon(param_01); + } + + if(isdefined(param_02)) + { + self endon(param_02); + } + + if(isdefined(param_03)) + { + self endon(param_03); + } + + if(isdefined(param_04)) + { + self endon(param_04); + } + + if(isdefined(param_05)) + { + self endon(param_05); + } + + if(isdefined(param_06)) + { + self endon(param_06); + } + + if(isdefined(param_07)) + { + self endon(param_07); + } + + self waittill(param_00); +} + +//Function Number: 26 +waittill_any_ents(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,param_0D) +{ + if(isdefined(param_02) && isdefined(param_03)) + { + param_02 endon(param_03); + } + + if(isdefined(param_04) && isdefined(param_05)) + { + param_04 endon(param_05); + } + + if(isdefined(param_06) && isdefined(param_07)) + { + param_06 endon(param_07); + } + + if(isdefined(param_08) && isdefined(param_09)) + { + param_08 endon(param_09); + } + + if(isdefined(param_0A) && isdefined(param_0B)) + { + param_0A endon(param_0B); + } + + if(isdefined(param_0C) && isdefined(param_0D)) + { + param_0C endon(param_0D); + } + + param_00 waittill(param_01); +} + +//Function Number: 27 +isflashed() +{ + if(!isdefined(self.flashendtime)) + { + return 0; + } + + return gettime() < self.flashendtime; +} + +//Function Number: 28 +flag_exist(param_00) +{ + return isdefined(level.flag[param_00]); +} + +//Function Number: 29 +flag(param_00) +{ + return level.flag[param_00]; +} + +//Function Number: 30 +init_flags() +{ + level.flag = []; + level.flags_lock = []; + level.generic_index = 0; + if(!isdefined(level.sp_stat_tracking_func)) + { + level.sp_stat_tracking_func = ::empty_init_func; + } + + level.flag_struct = spawnstruct(); + level.flag_struct assign_unique_id(); +} + +//Function Number: 31 +flag_init(param_00) +{ + if(!isdefined(level.flag)) + { + init_flags(); + } + + level.flag[param_00] = 0; + if(!isdefined(level.trigger_flags)) + { + init_trigger_flags(); + level.trigger_flags[param_00] = []; + } + else if(!isdefined(level.trigger_flags[param_00])) + { + level.trigger_flags[param_00] = []; + } + + if(issuffix(param_00,"aa_")) + { + thread [[ level.sp_stat_tracking_func ]](param_00); + } +} + +//Function Number: 32 +empty_init_func(param_00) +{ +} + +//Function Number: 33 +issuffix(param_00,param_01) +{ + if(param_01.size > param_00.size) + { + return 0; + } + + for(var_02 = 0;var_02 < param_01.size;var_02++) + { + if(param_00[var_02] != param_01[var_02]) + { + return 0; + } + } + + return 1; +} + +//Function Number: 34 +flag_set(param_00,param_01) +{ + level.flag[param_00] = 1; + set_trigger_flag_permissions(param_00); + if(isdefined(param_01)) + { + level notify(param_00,param_01); + return; + } + + level notify(param_00); +} + +//Function Number: 35 +assign_unique_id() +{ + self.unique_id = "generic" + level.generic_index; + level.generic_index++; +} + +//Function Number: 36 +flag_wait(param_00,param_01) +{ + var_02 = undefined; + while(!flag(param_00)) + { + var_02 = undefined; + level waittill(param_00,var_02); + if(isdefined(param_01) && flag(param_00,param_01)) + { + break; + } + } + + if(isdefined(var_02)) + { + return var_02; + } +} + +//Function Number: 37 +flag_clear(param_00) +{ + if(!flag(param_00)) + { + return; + } + + level.flag[param_00] = 0; + set_trigger_flag_permissions(param_00); + level notify(param_00); +} + +//Function Number: 38 +flag_waitopen(param_00) +{ + while(flag(param_00)) + { + level waittill(param_00); + } +} + +//Function Number: 39 +waittill_either(param_00,param_01) +{ + self endon(param_00); + self waittill(param_01); +} + +//Function Number: 40 +array_thread(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A) +{ + if(!isdefined(param_02)) + { + foreach(var_0C in param_00) + { + var_0C thread [[ param_01 ]](); + } + + return; + } + + if(!isdefined(param_06)) + { + foreach(var_0E in param_03) + { + var_0E thread [[ param_03 ]](param_04); + } + + return; + } + + if(!isdefined(param_09)) + { + foreach(var_10 in param_05) + { + var_10 thread [[ param_05 ]](param_06,param_07); + } + + return; + } + + if(!isdefined(var_0C)) + { + foreach(var_12 in param_07) + { + var_12 thread [[ param_07 ]](param_08,param_09,param_0A); + } + + return; + } + + if(!isdefined(var_0F)) + { + foreach(var_14 in param_09) + { + var_14 thread [[ param_09 ]](param_0A,var_0B,var_0C,var_0D); + } + + return; + } + + if(!isdefined(var_12)) + { + foreach(var_16 in var_0B) + { + var_16 thread [[ var_0B ]](var_0C,var_0D,var_0E,var_0F,var_10); + } + + return; + } + + if(!isdefined(var_15)) + { + foreach(var_18 in var_0D) + { + var_18 thread [[ var_0D ]](var_0E,var_0F,var_10,var_11,var_12,var_13); + } + + return; + } + + if(!isdefined(var_18)) + { + foreach(var_1A in var_0F) + { + var_1A thread [[ var_0F ]](var_10,var_11,var_12,var_13,var_14,var_15,var_16); + } + + return; + } + + if(!isdefined(var_1B)) + { + foreach(var_1C in var_11) + { + var_1C thread [[ var_11 ]](var_12,var_13,var_14,var_15,var_16,var_17,var_18,var_19); + } + + return; + } + + foreach(var_1E in var_13) + { + var_1E thread [[ var_13 ]](var_14,var_15,var_16,var_17,var_18,var_19,var_1A,var_1B,var_1C); + } +} + +//Function Number: 41 +array_call(param_00,param_01,param_02,param_03,param_04) +{ + if(isdefined(param_04)) + { + foreach(var_06 in param_00) + { + var_06 [[ param_01 ]](param_02,param_03,param_04); + } + + return; + } + + if(isdefined(var_06)) + { + foreach(var_08 in param_03) + { + var_08 [[ param_03 ]](param_04,var_05); + } + + return; + } + + if(isdefined(var_07)) + { + foreach(var_0A in var_05) + { + var_0A [[ var_05 ]](var_06); + } + + return; + } + + foreach(var_0C in var_07) + { + var_0C [[ var_07 ]](); + } +} + +//Function Number: 42 +array_thread4(param_00,param_01,param_02,param_03,param_04,param_05) +{ + array_thread(param_00,param_01,param_02,param_03,param_04,param_05); +} + +//Function Number: 43 +array_thread5(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + array_thread(param_00,param_01,param_02,param_03,param_04,param_05,param_06); +} + +//Function Number: 44 +trigger_on(param_00,param_01) +{ + if(isdefined(param_00) && isdefined(param_01)) + { + var_02 = getentarray(param_00,param_01); + array_thread(var_02,::trigger_on_proc); + return; + } + + trigger_on_proc(); +} + +//Function Number: 45 +trigger_on_proc() +{ + if(isdefined(self.realorigin)) + { + self.origin = self.realorigin; + } + + self.trigger_off = undefined; +} + +//Function Number: 46 +trigger_off(param_00,param_01) +{ + if(isdefined(param_00) && isdefined(param_01)) + { + var_02 = getentarray(param_00,param_01); + array_thread(var_02,::trigger_off_proc); + return; + } + + trigger_off_proc(); +} + +//Function Number: 47 +trigger_off_proc() +{ + if(!isdefined(self.realorigin)) + { + self.realorigin = self.origin; + } + + if(self.origin == self.realorigin) + { + self.origin = self.origin + (0,0,-10000); + } + + self.trigger_off = 1; +} + +//Function Number: 48 +set_trigger_flag_permissions(param_00) +{ + if(!isdefined(level.trigger_flags)) + { + return; + } + + level.trigger_flags[param_00] = array_removeundefined(level.trigger_flags[param_00]); + array_thread(level.trigger_flags[param_00],::update_trigger_based_on_flags); +} + +//Function Number: 49 +update_trigger_based_on_flags() +{ + var_00 = 1; + if(isdefined(self.script_flag_true)) + { + var_00 = 0; + var_01 = create_flags_and_return_tokens(self.script_flag_true); + foreach(var_03 in var_01) + { + if(flag(var_03)) + { + var_00 = 1; + break; + } + } + } + + var_05 = 1; + if(isdefined(self.script_flag_false)) + { + var_01 = create_flags_and_return_tokens(self.script_flag_false); + foreach(var_03 in var_01) + { + if(flag(var_03)) + { + var_05 = 0; + break; + } + } + } + + [[ level.var_8EC[var_00 && var_05] ]](); +} + +//Function Number: 50 +create_flags_and_return_tokens(param_00) +{ + var_01 = strtok(param_00," "); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + if(!isdefined(level.flag[var_01[var_02]])) + { + flag_init(var_01[var_02]); + } + } + + return var_01; +} + +//Function Number: 51 +init_trigger_flags() +{ + level.trigger_flags = []; + level.var_8EC[1] = ::trigger_on; + level.var_8EC[0] = ::trigger_off; +} + +//Function Number: 52 +getstruct(param_00,param_01) +{ + var_02 = level.struct_class_names[param_01][param_00]; + if(!isdefined(var_02)) + { + return undefined; + } + + if(var_02.size > 1) + { + return undefined; + } + + return var_02[0]; +} + +//Function Number: 53 +getstructarray(param_00,param_01) +{ + var_02 = level.struct_class_names[param_01][param_00]; + if(!isdefined(var_02)) + { + return []; + } + + return var_02; +} + +//Function Number: 54 +struct_class_init() +{ + level.struct_class_names = []; + level.struct_class_names["target"] = []; + level.struct_class_names["targetname"] = []; + level.struct_class_names["script_noteworthy"] = []; + level.struct_class_names["script_linkname"] = []; + foreach(var_01 in level.struct) + { + if(isdefined(var_01.targetname)) + { + if(!isdefined(level.struct_class_names["targetname"][var_01.targetname])) + { + level.struct_class_names["targetname"][var_01.targetname] = []; + } + + var_02 = level.struct_class_names["targetname"][var_01.targetname].size; + level.struct_class_names["targetname"][var_01.targetname][var_02] = var_01; + } + + if(isdefined(var_01.target)) + { + if(!isdefined(level.struct_class_names["target"][var_01.target])) + { + level.struct_class_names["target"][var_01.target] = []; + } + + var_02 = level.struct_class_names["target"][var_01.target].size; + level.struct_class_names["target"][var_01.target][var_02] = var_01; + } + + if(isdefined(var_01.script_noteworthy)) + { + if(!isdefined(level.struct_class_names["script_noteworthy"][var_01.script_noteworthy])) + { + level.struct_class_names["script_noteworthy"][var_01.script_noteworthy] = []; + } + + var_02 = level.struct_class_names["script_noteworthy"][var_01.script_noteworthy].size; + level.struct_class_names["script_noteworthy"][var_01.script_noteworthy][var_02] = var_01; + } + + if(isdefined(var_01.script_linkname)) + { + level.struct_class_names["script_linkname"][var_01.script_linkname][0] = var_01; + } + } +} + +//Function Number: 55 +fileprint_start(param_00) +{ +} + +//Function Number: 56 +fileprint_map_start() +{ +} + +//Function Number: 57 +fileprint_map_header(param_00) +{ + if(!isdefined(param_00)) + { + param_00 = 0; + } +} + +//Function Number: 58 +fileprint_map_keypairprint(param_00,param_01) +{ +} + +//Function Number: 59 +fileprint_map_entity_start() +{ +} + +//Function Number: 60 +fileprint_map_entity_end() +{ +} + +//Function Number: 61 +fileprint_radiant_vec(param_00) +{ +} + +//Function Number: 62 +array_remove(param_00,param_01) +{ + var_02 = []; + foreach(var_04 in param_00) + { + if(var_04 != param_01) + { + var_02[var_02.size] = var_04; + } + } + + return var_02; +} + +//Function Number: 63 +array_remove_array(param_00,param_01) +{ + foreach(var_03 in param_01) + { + param_00 = array_remove(param_00,var_03); + } + + return param_00; +} + +//Function Number: 64 +array_removeundefined(param_00) +{ + var_01 = []; + foreach(var_03 in param_00) + { + if(!isdefined(var_03)) + { + continue; + } + + var_01[var_01.size] = var_03; + } + + return var_01; +} + +//Function Number: 65 +array_levelthread(param_00,param_01,param_02,param_03,param_04) +{ + if(isdefined(param_04)) + { + foreach(var_06 in param_00) + { + thread [[ param_01 ]](var_06,param_02,param_03,param_04); + } + + return; + } + + if(isdefined(var_06)) + { + foreach(var_08 in param_03) + { + thread [[ param_03 ]](var_08,param_04,var_05); + } + + return; + } + + if(isdefined(var_07)) + { + foreach(var_0A in var_05) + { + thread [[ var_05 ]](var_0A,var_06); + } + + return; + } + + foreach(var_0C in var_07) + { + thread [[ var_07 ]](var_0C); + } +} + +//Function Number: 66 +array_levelcall(param_00,param_01,param_02,param_03,param_04) +{ + if(isdefined(param_04)) + { + foreach(var_06 in param_00) + { + [[ param_01 ]](var_06,param_02,param_03,param_04); + } + + return; + } + + if(isdefined(var_06)) + { + foreach(var_08 in param_03) + { + [[ param_03 ]](var_08,param_04,var_05); + } + + return; + } + + if(isdefined(var_07)) + { + foreach(var_0A in var_05) + { + [[ var_05 ]](var_0A,var_06); + } + + return; + } + + foreach(var_0C in var_07) + { + [[ var_07 ]](var_0C); + } +} + +//Function Number: 67 +add_to_array(param_00,param_01) +{ + if(!isdefined(param_01)) + { + return param_00; + } + + if(!isdefined(param_00)) + { + param_00[0] = param_01; + } + else + { + param_00[param_00.size] = param_01; + } + + return param_00; +} + +//Function Number: 68 +flag_assert(param_00) +{ +} + +//Function Number: 69 +flag_wait_either(param_00,param_01) +{ + for(;;) + { + if(flag(param_00)) + { + return; + } + + if(flag(param_01)) + { + return; + } + + level waittill_either(param_00,param_01); + } +} + +//Function Number: 70 +flag_wait_either_return(param_00,param_01) +{ + for(;;) + { + if(flag(param_00)) + { + return param_00; + } + + if(flag(param_01)) + { + return param_01; + } + + var_02 = level waittill_any_return(param_00,param_01); + return var_02; + } +} + +//Function Number: 71 +flag_wait_any(param_00,param_01,param_02,param_03,param_04,param_05) +{ + var_06 = []; + if(isdefined(param_05)) + { + } + else if(isdefined(param_05)) + { + } + else if(isdefined(param_04)) + { + } + else if(isdefined(param_03)) + { + } + else if(isdefined(param_02)) + { + flag_wait_either(param_01,param_02); + return; + } + else + { + return; + } + + for(;;) + { + var_07 = 0; + while(var_07 < var_7B.size) + { + if(flag(var_7B[var_07])) + { + return; + } + + var_07++ = var_7B[var_7B.size]; + } + + level waittill_any(param_01,param_02,param_03,param_04,param_05,var_06); + } +} + +//Function Number: 72 +flag_wait_any_return(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = []; + if(isdefined(param_04)) + { + } + else if(isdefined(param_04)) + { + } + else if(isdefined(param_03)) + { + } + else if(isdefined(param_02)) + { + var_06 = flag_wait_either_return(param_01,param_02); + return var_06; + } + else + { + return; + } + + for(;;) + { + var_07 = 0; + while(var_07 < var_06.size) + { + if(flag(var_06[var_07])) + { + return var_06[var_07]; + } + + var_07++ = var_7B[var_7B.size]; + } + + var_06 = level waittill_any_return(param_02,param_03,param_04,var_05,var_7B); + return var_07; + } +} + +//Function Number: 73 +flag_wait_all(param_00,param_01,param_02,param_03) +{ + if(isdefined(param_00)) + { + flag_wait(param_00); + } + + if(isdefined(param_01)) + { + flag_wait(param_01); + } + + if(isdefined(param_02)) + { + flag_wait(param_02); + } + + if(isdefined(param_03)) + { + flag_wait(param_03); + } +} + +//Function Number: 74 +flag_wait_or_timeout(param_00,param_01) +{ + var_02 = param_01 * 1000; + var_03 = gettime(); + for(;;) + { + if(flag(param_00)) + { + break; + } + + if(gettime() >= var_03 + var_02) + { + break; + } + + var_04 = var_02 - gettime() - var_03; + var_05 = var_04 / 1000; + wait_for_flag_or_time_elapses(param_00,var_05); + } +} + +//Function Number: 75 +flag_waitopen_or_timeout(param_00,param_01) +{ + var_02 = gettime(); + for(;;) + { + if(!flag(param_00)) + { + break; + } + + if(gettime() >= var_02 + param_01 * 1000) + { + break; + } + + wait_for_flag_or_time_elapses(param_00,param_01); + } +} + +//Function Number: 76 +wait_for_flag_or_time_elapses(param_00,param_01) +{ + level endon(param_00); + wait param_01; +} + +//Function Number: 77 +delaycall(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09) +{ + thread delaycall_proc(param_01,param_00,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09); +} + +//Function Number: 78 +delaycall_proc(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09) +{ + if(issp()) + { + self endon("death"); + } + + wait param_01; + if(isdefined(param_09)) + { + self [[ param_00 ]](param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09); + return; + } + + if(isdefined(param_08)) + { + self [[ param_00 ]](param_02,param_03,param_04,param_05,param_06,param_07,param_08); + return; + } + + if(isdefined(param_07)) + { + self [[ param_00 ]](param_02,param_03,param_04,param_05,param_06,param_07); + return; + } + + if(isdefined(param_06)) + { + self [[ param_00 ]](param_02,param_03,param_04,param_05,param_06); + return; + } + + if(isdefined(param_05)) + { + self [[ param_00 ]](param_02,param_03,param_04,param_05); + return; + } + + if(isdefined(param_04)) + { + self [[ param_00 ]](param_02,param_03,param_04); + return; + } + + if(isdefined(param_03)) + { + self [[ param_00 ]](param_02,param_03); + return; + } + + if(isdefined(param_02)) + { + self [[ param_00 ]](param_02); + return; + } + + self [[ param_00 ]](); +} + +//Function Number: 79 +noself_delaycall(param_00,param_01,param_02,param_03,param_04,param_05) +{ + thread noself_delaycall_proc(param_01,param_00,param_02,param_03,param_04,param_05); +} + +//Function Number: 80 +noself_delaycall_proc(param_00,param_01,param_02,param_03,param_04,param_05) +{ + wait param_01; + if(isdefined(param_05)) + { + [[ param_00 ]](param_02,param_03,param_04,param_05); + return; + } + + if(isdefined(param_04)) + { + [[ param_00 ]](param_02,param_03,param_04); + return; + } + + if(isdefined(param_03)) + { + [[ param_00 ]](param_02,param_03); + return; + } + + if(isdefined(param_02)) + { + [[ param_00 ]](param_02); + return; + } + + [[ param_00 ]](); +} + +//Function Number: 81 +issp() +{ + if(!isdefined(level.issp)) + { + level.issp = !string_starts_with(getdvar("mapname"),"mp_"); + } + + return level.issp; +} + +//Function Number: 82 +issp_towerdefense() +{ + if(!isdefined(level.issp_towerdefense)) + { + level.issp_towerdefense = string_starts_with(getdvar("mapname"),"so_td_"); + } + + return level.issp_towerdefense; +} + +//Function Number: 83 +string_starts_with(param_00,param_01) +{ + if(param_00.size < param_01.size) + { + return 0; + } + + for(var_02 = 0;var_02 < param_01.size;var_02++) + { + if(tolower(param_00[var_02]) != tolower(param_01[var_02])) + { + return 0; + } + } + + return 1; +} + +//Function Number: 84 +plot_points(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = param_00[0]; + if(!isdefined(param_01)) + { + param_01 = 1; + } + + if(!isdefined(param_02)) + { + param_02 = 1; + } + + if(!isdefined(param_03)) + { + param_03 = 1; + } + + if(!isdefined(param_04)) + { + param_04 = 0.05; + } + + for(var_06 = 1;var_06 < param_00.size;var_06++) + { + thread draw_line_for_time(var_05,param_00[var_06],param_01,param_02,param_03,param_04); + var_05 = param_00[var_06]; + } +} + +//Function Number: 85 +draw_line_for_time(param_00,param_01,param_02,param_03,param_04,param_05) +{ + param_05 = gettime() + param_05 * 1000; + while(gettime() < param_05) + { + wait 0.05; + } +} + +//Function Number: 86 +array_combine(param_00,param_01) +{ + var_02 = []; + foreach(var_04 in param_00) + { + var_02[var_02.size] = var_04; + } + + foreach(var_04 in param_01) + { + var_02[var_02.size] = var_04; + } + + return var_02; +} + +//Function Number: 87 +flat_angle(param_00) +{ + var_01 = (0,param_00[1],0); + return var_01; +} + +//Function Number: 88 +flat_origin(param_00) +{ + var_01 = (param_00[0],param_00[1],0); + return var_01; +} + +//Function Number: 89 +draw_arrow_time(param_00,param_01,param_02,param_03) +{ + level endon("newpath"); + var_04 = []; + var_05 = vectortoangles(param_00 - param_01); + var_06 = anglestoright(var_05); + var_07 = anglestoforward(var_05); + var_08 = anglestoup(var_05); + var_09 = distance(param_00,param_01); + var_0A = []; + var_0B = 0.1; + var_0A[0] = param_00; + var_0A[1] = param_00 + var_06 * var_09 * var_0B + var_07 * var_09 * -0.1; + var_0A[2] = param_01; + var_0A[3] = param_00 + var_06 * var_09 * -1 * var_0B + var_07 * var_09 * -0.1; + var_0A[4] = param_00; + var_0A[5] = param_00 + var_08 * var_09 * var_0B + var_07 * var_09 * -0.1; + var_0A[6] = param_01; + var_0A[7] = param_00 + var_08 * var_09 * -1 * var_0B + var_07 * var_09 * -0.1; + var_0A[8] = param_00; + var_0C = param_02[0]; + var_0D = param_02[1]; + var_0E = param_02[2]; + plot_points(var_0A,var_0C,var_0D,var_0E,param_03); +} + +//Function Number: 90 +get_linked_ents() +{ + var_00 = []; + if(isdefined(self.script_linkto)) + { + var_01 = get_links(); + foreach(var_03 in var_01) + { + var_04 = getentarray(var_03,"script_linkname"); + if(var_04.size > 0) + { + var_00 = array_combine(var_00,var_04); + } + } + } + + return var_00; +} + +//Function Number: 91 +get_linked_vehicle_nodes() +{ + var_00 = []; + if(isdefined(self.script_linkto)) + { + var_01 = get_links(); + foreach(var_03 in var_01) + { + var_04 = getvehiclenodearray(var_03,"script_linkname"); + if(var_04.size > 0) + { + var_00 = array_combine(var_00,var_04); + } + } + } + + return var_00; +} + +//Function Number: 92 +get_linked_ent() +{ + var_00 = get_linked_ents(); + return var_00[0]; +} + +//Function Number: 93 +get_linked_vehicle_node() +{ + var_00 = get_linked_vehicle_nodes(); + return var_00[0]; +} + +//Function Number: 94 +get_links() +{ + return strtok(self.script_linkto," "); +} + +//Function Number: 95 +run_thread_on_targetname(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = getentarray(param_00,"targetname"); + array_thread(var_05,param_01,param_02,param_03,param_04); + var_05 = getstructarray(param_00,"targetname"); + array_thread(var_05,param_01,param_02,param_03,param_04); + var_05 = [[ level.getnodearrayfunction ]](param_00,"targetname"); + array_thread(var_05,param_01,param_02,param_03,param_04); + var_05 = getvehiclenodearray(param_00,"targetname"); + array_thread(var_05,param_01,param_02,param_03,param_04); +} + +//Function Number: 96 +run_thread_on_noteworthy(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = getentarray(param_00,"script_noteworthy"); + array_thread(var_05,param_01,param_02,param_03,param_04); + var_05 = getstructarray(param_00,"script_noteworthy"); + array_thread(var_05,param_01,param_02,param_03,param_04); + var_05 = [[ level.getnodearrayfunction ]](param_00,"script_noteworthy"); + array_thread(var_05,param_01,param_02,param_03,param_04); + var_05 = getvehiclenodearray(param_00,"script_noteworthy"); + array_thread(var_05,param_01,param_02,param_03,param_04); +} + +//Function Number: 97 +draw_arrow(param_00,param_01,param_02) +{ + level endon("newpath"); + var_03 = []; + var_04 = vectortoangles(param_00 - param_01); + var_05 = anglestoright(var_04); + var_06 = anglestoforward(var_04); + var_07 = distance(param_00,param_01); + var_08 = []; + var_09 = 0.05; + var_08[0] = param_00; + var_08[1] = param_00 + var_05 * var_07 * var_09 + var_06 * var_07 * -0.2; + var_08[2] = param_01; + var_08[3] = param_00 + var_05 * var_07 * -1 * var_09 + var_06 * var_07 * -0.2; + for(var_0A = 0;var_0A < 4;var_0A++) + { + var_0B = var_0A + 1; + if(var_0B >= 4) + { + var_0B = 0; + } + } +} + +//Function Number: 98 +getfx(param_00) +{ + return level._effect[param_00]; +} + +//Function Number: 99 +fxexists(param_00) +{ + return isdefined(level._effect[param_00]); +} + +//Function Number: 100 +print_csv_asset(param_00,param_01) +{ + var_02 = param_01 + "," + param_00; + if(isdefined(level.var_924[var_02])) + { + return; + } + + level.var_924[var_02] = 1; +} + +//Function Number: 101 +fileprint_csv_start(param_00) +{ +} + +//Function Number: 102 +_loadfx(param_00) +{ + return loadfx(param_00); +} + +//Function Number: 103 +getlastweapon() +{ + return self.saved_lastweapon; +} + +//Function Number: 104 +playerunlimitedammothread() +{ +} + +//Function Number: 105 +isusabilityenabled() +{ + return !self.disabledusability; +} + +//Function Number: 106 +_disableusability() +{ + self.disabledusability++; + self disableusability(); +} + +//Function Number: 107 +_enableusability() +{ + self.disabledusability--; + if(!self.disabledusability) + { + self enableusability(); + } +} + +//Function Number: 108 +resetusability() +{ + self.disabledusability = 0; + self enableusability(); +} + +//Function Number: 109 +_disableweapon() +{ + self.disabledweapon++; + self disableweapons(); +} + +//Function Number: 110 +_enableweapon() +{ + self.disabledweapon--; + if(!self.disabledweapon) + { + self enableweapons(); + } +} + +//Function Number: 111 +isweaponenabled() +{ + return !self.disabledweapon; +} + +//Function Number: 112 +_disableweaponswitch() +{ + self.disabledweaponswitch++; + self disableweaponswitch(); +} + +//Function Number: 113 +_enableweaponswitch() +{ + self.disabledweaponswitch--; + if(!self.disabledweaponswitch) + { + self enableweaponswitch(); + } +} + +//Function Number: 114 +isweaponswitchenabled() +{ + return !self.disabledweaponswitch; +} + +//Function Number: 115 +_disableoffhandweapons() +{ + self.disabledoffhandweapons++; + self disableoffhandweapons(); +} + +//Function Number: 116 +_enableoffhandweapons() +{ + self.disabledoffhandweapons--; + if(!self.disabledoffhandweapons) + { + self enableoffhandweapons(); + } +} + +//Function Number: 117 +isoffhandweaponenabled() +{ + return !self.disabledoffhandweapons; +} + +//Function Number: 118 +random(param_00) +{ + var_01 = []; + foreach(var_03 in param_00) + { + var_01[var_01.size] = var_03; + } + + if(!var_01.size) + { + return undefined; + } + + return var_01[randomint(var_01.size)]; +} + +//Function Number: 119 +spawn_tag_origin() +{ + var_00 = spawn("script_model",(0,0,0)); + var_00 setmodel("tag_origin"); + var_00 hide(); + if(isdefined(self.origin)) + { + var_00.origin = self.origin; + } + + if(isdefined(self.angles)) + { + var_00.angles = self.angles; + } + + return var_00; +} + +//Function Number: 120 +waittill_notify_or_timeout(param_00,param_01) +{ + self endon(param_00); + wait param_01; +} + +//Function Number: 121 +fileprint_launcher_start_file() +{ + level.var_93E = 0; + level.fileprint_launcher = 1; + fileprint_launcher("GAMEPRINTSTARTFILE:"); +} + +//Function Number: 122 +fileprint_launcher(param_00) +{ + level.var_93E++; + if(level.var_93E > 200) + { + wait 0.05; + level.var_93E = 0; + } +} + +//Function Number: 123 +fileprint_launcher_end_file(param_00,param_01) +{ + if(!isdefined(param_01)) + { + param_01 = 0; + } + + if(param_01) + { + fileprint_launcher("GAMEPRINTENDFILE:GAMEPRINTP4ENABLED:" + param_00); + } + else + { + fileprint_launcher("GAMEPRINTENDFILE:" + param_00); + } + + var_02 = gettime() + 4000; + while(getdvarint("LAUNCHER_PRINT_SUCCESS") == 0 && getdvar("LAUNCHER_PRINT_FAIL") == "0" && gettime() < var_02) + { + wait 0.05; + } + + if(!gettime() < var_02) + { + iprintlnbold("LAUNCHER_PRINT_FAIL:( TIMEOUT ): launcherconflict? restart launcher and try again? "); + level.fileprint_launcher = undefined; + return 0; + } + + var_03 = getdvar("LAUNCHER_PRINT_FAIL"); + if(var_03 != "0") + { + iprintlnbold("LAUNCHER_PRINT_FAIL:( " + var_03 + " ): launcherconflict? restart launcher and try again? "); + level.fileprint_launcher = undefined; + return 0; + } + + level.fileprint_launcher = undefined; + return 1; +} + +//Function Number: 124 +launcher_write_clipboard(param_00) +{ + level.var_93E = 0; + fileprint_launcher("LAUNCHER_CLIP:" + param_00); +} + +//Function Number: 125 +isdestructible() +{ + if(!isdefined(self)) + { + return 0; + } + + return isdefined(self.destructible_type); +} + +//Function Number: 126 +pauseeffect() +{ + common_scripts\_createfx::stop_fx_looper(); +} + +//Function Number: 127 +activate_individual_exploder() +{ + if(isdefined(self.v["firefx"])) + { + thread fire_effect(); + } + + if(isdefined(self.v["fxid"]) && self.v["fxid"] != "No FX") + { + thread cannon_effect(); + } + else if(isdefined(self.v["soundalias"]) && self.v["soundalias"] != "nil") + { + thread sound_effect(); + } + + if(isdefined(self.v["loopsound"]) && self.v["loopsound"] != "nil") + { + thread effect_loopsound(); + } + + if(isdefined(self.v["damage"])) + { + thread exploder_damage(); + } + + if(isdefined(self.v["earthquake"])) + { + thread exploder_earthquake(); + } + + if(isdefined(self.v["rumble"])) + { + thread exploder_rumble(); + } + + if(self.v["exploder_type"] == "exploder") + { + thread brush_show(); + return; + } + + if(self.v["exploder_type"] == "exploderchunk" || self.v["exploder_type"] == "exploderchunk visible") + { + thread brush_throw(); + return; + } + + thread brush_delete(); +} + +//Function Number: 128 +waitframe() +{ + wait 0.05; +} + +//Function Number: 129 +brush_delete() +{ + var_00 = self.v["exploder"]; + if(isdefined(self.v["delay"])) + { + wait self.v["delay"]; + } + else + { + wait 0.05; + } + + if(!isdefined(self.model)) + { + return; + } + + if(isdefined(self.model.classname)) + { + if(issp() && self.model.spawnflags & 1) + { + self.model [[ level.connectpathsfunction ]](); + } + } + + if(level.createfx_enabled) + { + if(isdefined(self.var_946)) + { + return; + } + + self.var_946 = 1; + self.model hide(); + self.model notsolid(); + wait 3; + self.var_946 = undefined; + self.model show(); + self.model solid(); + return; + } + + if(!isdefined(self.v["fxid"]) || self.v["fxid"] == "No FX") + { + self.v["exploder"] = undefined; + } + + waittillframeend; + if(isdefined(self.model) && isdefined(self.model.classname)) + { + self.model delete(); + } +} + +//Function Number: 130 +brush_throw() +{ + if(isdefined(self.v["delay"])) + { + wait self.v["delay"]; + } + + var_00 = undefined; + if(isdefined(self.v["target"])) + { + var_00 = get_target_ent(self.v["target"]); + } + + if(!isdefined(var_00)) + { + self.model delete(); + return; + } + + self.model show(); + if(isdefined(self.v["delay_post"])) + { + wait self.v["delay_post"]; + } + + var_01 = self.v["origin"]; + var_02 = self.v["angles"]; + var_03 = var_00.origin; + var_04 = var_03 - self.v["origin"]; + var_05 = var_04[0]; + var_06 = var_04[1]; + var_07 = var_04[2]; + var_08 = isdefined(self.v["physics"]); + if(var_08) + { + var_09 = undefined; + if(isdefined(var_00.target)) + { + var_09 = var_00 get_target_ent(); + } + + if(!isdefined(var_09)) + { + var_0A = var_01; + var_0B = var_00.origin; + } + else + { + var_0A = var_02.origin; + var_0B = var_0A.origin - var_01.origin * self.v["physics"]; + } + + self.model physicslaunchclient(var_0A,var_0B); + return; + } + else + { + self.model rotatevelocity((var_08,var_09,var_0A),12); + self.model movegravity((var_08,var_09,var_0A),12); + } + + if(level.createfx_enabled) + { + if(isdefined(self.var_946)) + { + return; + } + + self.var_946 = 1; + wait 3; + self.var_946 = undefined; + self.v["origin"] = var_04; + self.v["angles"] = var_05; + self.model hide(); + return; + } + + self.v["exploder"] = undefined; + wait 6; + self.model delete(); +} + +//Function Number: 131 +get_target_ent(param_00) +{ + if(!isdefined(param_00)) + { + param_00 = self.target; + } + + var_01 = getent(param_00,"targetname"); + if(isdefined(var_01)) + { + return var_01; + } + + if(issp()) + { + var_01 = [[ level.getnodefunction ]](param_00,"targetname"); + if(isdefined(var_01)) + { + return var_01; + } + } + + var_01 = getstruct(param_00,"targetname"); + if(isdefined(var_01)) + { + return var_01; + } + + var_01 = getvehiclenode(param_00,"targetname"); + if(isdefined(var_01)) + { + return var_01; + } +} + +//Function Number: 132 +brush_show() +{ + if(isdefined(self.v["delay"])) + { + wait self.v["delay"]; + } + + if(!isdefined(self.model.script_modelname)) + { + self.model show(); + self.model solid(); + } + else + { + var_00 = self.model spawn_tag_origin(); + if(isdefined(self.model.script_linkname)) + { + var_00.script_linkname = self.model.script_linkname; + } + + var_00 setmodel(self.model.script_modelname); + var_00 show(); + } + + self.brush_shown = 1; + if(issp() && !isdefined(self.model.script_modelname) && self.model.spawnflags & 1) + { + if(!isdefined(self.model.disconnect_paths)) + { + self.model [[ level.connectpathsfunction ]](); + } + else + { + self.model [[ level.disconnectpathsfunction ]](); + } + } + + if(level.createfx_enabled) + { + if(isdefined(self.var_946)) + { + return; + } + + self.var_946 = 1; + wait 3; + self.var_946 = undefined; + if(!isdefined(self.model.script_modelname)) + { + self.model hide(); + self.model notsolid(); + } + } +} + +//Function Number: 133 +exploder_earthquake() +{ + exploder_delay(); + do_earthquake(self.v["earthquake"],self.v["origin"]); +} + +//Function Number: 134 +do_earthquake(param_00,param_01) +{ + var_02 = level.earthquake[param_00]; + earthquake(var_02["magnitude"],var_02["duration"],param_01,var_02["radius"]); +} + +//Function Number: 135 +exploder_rumble() +{ + if(!issp()) + { + return; + } + + exploder_delay(); + level.player playrumbleonentity(self.v["rumble"]); +} + +//Function Number: 136 +exploder_delay() +{ + if(!isdefined(self.v["delay"])) + { + self.v["delay"] = 0; + } + + var_00 = self.v["delay"]; + var_01 = self.v["delay"] + 0.001; + if(isdefined(self.v["delay_min"])) + { + var_00 = self.v["delay_min"]; + } + + if(isdefined(self.v["delay_max"])) + { + var_01 = self.v["delay_max"]; + } + + if(var_00 > 0) + { + wait randomfloatrange(var_00,var_01); + } +} + +//Function Number: 137 +exploder_damage() +{ + if(isdefined(self.v["delay"])) + { + var_00 = self.v["delay"]; + } + else + { + var_00 = 0; + } + + if(isdefined(self.v["damage_radius"])) + { + var_01 = self.v["damage_radius"]; + } + else + { + var_01 = 128; + } + + var_02 = self.v["damage"]; + var_03 = self.v["origin"]; + wait var_00; + radiusdamage(var_03,var_01,var_02,var_02); +} + +//Function Number: 138 +effect_loopsound() +{ + if(isdefined(self.var_956)) + { + self.var_956 delete(); + } + + var_00 = self.v["origin"]; + var_01 = self.v["loopsound"]; + exploder_delay(); + self.var_956 = play_loopsound_in_space(var_01,var_00); +} + +//Function Number: 139 +play_loopsound_in_space(param_00,param_01) +{ + var_02 = spawn("script_origin",(0,0,0)); + if(!isdefined(param_01)) + { + param_01 = self.origin; + } + + var_02.origin = param_01; + var_02 playloopsound(param_00); + return var_02; +} + +//Function Number: 140 +sound_effect() +{ + effect_soundalias(); +} + +//Function Number: 141 +effect_soundalias() +{ + var_00 = self.v["origin"]; + var_01 = self.v["soundalias"]; + exploder_delay(); + play_sound_in_space(var_01,var_00); +} + +//Function Number: 142 +play_sound_in_space(param_00,param_01,param_02) +{ + var_03 = spawn("script_origin",(0,0,1)); + if(!isdefined(param_01)) + { + param_01 = self.origin; + } + + var_03.origin = param_01; + if(issp()) + { + if(isdefined(param_02) && param_02) + { + var_03 playsoundasmaster(param_00,"sounddone"); + } + else + { + var_03 playsound(param_00,"sounddone"); + } + } + else if(isdefined(param_02) && param_02) + { + var_03 playsoundasmaster(param_00); + } + else + { + var_03 playsound(param_00); + } + + var_03 waittill("sounddone"); + var_03 delete(); +} + +//Function Number: 143 +cannon_effect() +{ + if(isdefined(self.v["repeat"])) + { + thread exploder_playsound(); + for(var_00 = 0;var_00 < self.v["repeat"];var_00++) + { + playfx(level._effect[self.v["fxid"]],self.v["origin"],self.v["forward"],self.v["up"]); + exploder_delay(); + } + + return; + } + + exploder_delay(); + if(isdefined(self.looper)) + { + self.looper delete(); + } + + self.looper = spawnfx(getfx(self.v["fxid"]),self.v["origin"],self.v["forward"],self.v["up"]); + triggerfx(self.looper); + exploder_playsound(); +} + +//Function Number: 144 +exploder_playsound() +{ + if(!isdefined(self.v["soundalias"]) || self.v["soundalias"] == "nil") + { + return; + } + + play_sound_in_space(self.v["soundalias"],self.v["origin"]); +} + +//Function Number: 145 +fire_effect() +{ + var_00 = self.v["forward"]; + var_01 = self.v["up"]; + var_02 = undefined; + var_03 = self.v["firefxsound"]; + var_04 = self.v["origin"]; + var_05 = self.v["firefx"]; + var_06 = self.v["ender"]; + if(!isdefined(var_06)) + { + var_06 = "createfx_effectStopper"; + } + + var_07 = self.v["firefxtimeout"]; + var_08 = 0.5; + if(isdefined(self.v["firefxdelay"])) + { + var_08 = self.v["firefxdelay"]; + } + + exploder_delay(); + if(isdefined(var_03)) + { + level thread loop_fx_sound(var_03,var_04,1,var_06,var_07); + } + + playfx(level._effect[var_05],self.v["origin"],var_00,var_01); +} + +//Function Number: 146 +loop_fx_sound(param_00,param_01,param_02,param_03,param_04) +{ + if(isdefined(param_02) && param_02 == 1) + { + if(!isdefined(level.first_frame) || level.first_frame == 1) + { + spawnloopingsound(param_00,param_01); + return; + } + + return; + } + + var_05 = spawn("script_origin",(0,0,0)); + if(isdefined(param_03)) + { + thread loop_sound_delete(param_03,var_05); + self endon(param_03); + } + + var_05.origin = param_01; + var_05 playloopsound(param_00); + var_06 = 0; + if(isdefined(level.createfx_enabled)) + { + var_06 = level.createfx_enabled; + } + + if(!isdefined(param_04) && !var_06) + { + var_05 willneverchange(); + return; + } + + if(isdefined(param_04)) + { + wait param_04; + } +} + +//Function Number: 147 +loop_fx_sound_interval(param_00,param_01,param_02,param_03,param_04,param_05) +{ + var_06 = spawn("script_origin",(0,0,0)); + if(isdefined(param_02)) + { + thread loop_sound_delete(param_02,var_06); + self endon(param_02); + } + + var_06.origin = param_01; + if(param_04 >= param_05) + { + wait 0.05; + } + + if(!soundexists(param_00)) + { + wait 0.05; + } + + for(;;) + { + lock("createfx_looper"); + thread play_sound_in_space(param_00,var_06.origin); + eog_newstar("createfx_looper"); + wait randomfloatrange(param_04,param_05); + } +} + +//Function Number: 148 +loop_sound_delete(param_00,param_01) +{ + param_01 endon("death"); + self waittill(param_00); + param_01 delete(); +} + +//Function Number: 149 +exploder_before_load(param_00) +{ + waittillframeend; + waittillframeend; + activate_exploder(param_00); +} + +//Function Number: 150 +exploder_after_load(param_00) +{ + activate_exploder(param_00); +} + +//Function Number: 151 +activate_exploder(param_00) +{ + param_00 = param_00 + ""; + level notify("exploding_" + param_00); + if(isdefined(level.createfxexploders) && !level.createfx_enabled) + { + var_01 = level.createfxexploders[param_00]; + if(isdefined(var_01)) + { + foreach(var_03 in var_01) + { + var_03 activate_individual_exploder(); + } + + return; + } + + return; + } + + var_05 = 0; + while(var_03 < level.createfxent.size) + { + var_05 = level.createfxent[var_03]; + if(!isdefined(var_05)) + { + continue; + } + + if(var_05.v["type"] != "exploder") + { + continue; + } + + if(!isdefined(var_05.v["exploder"])) + { + continue; + } + + if(var_05.v["exploder"] + "" != var_02) + { + continue; + } + + var_05 activate_individual_exploder(); + var_03++; + } +} + +//Function Number: 152 +createloopeffect(param_00) +{ + var_01 = common_scripts\_createfx::createeffect("loopfx",param_00); + var_01.v["delay"] = common_scripts\_createfx::getloopeffectdelaydefault(); + return var_01; +} + +//Function Number: 153 +createoneshoteffect(param_00) +{ + var_01 = common_scripts\_createfx::createeffect("oneshotfx",param_00); + var_01.v["delay"] = common_scripts\_createfx::getoneshoteffectdelaydefault(); + return var_01; +} + +//Function Number: 154 +createexploder(param_00) +{ + var_01 = common_scripts\_createfx::createeffect("exploder",param_00); + var_01.v["delay"] = common_scripts\_createfx::getexploderdelaydefault(); + var_01.v["exploder_type"] = "normal"; + return var_01; +} + +//Function Number: 155 +alphabetize(param_00) +{ + if(param_00.size <= 1) + { + return param_00; + } + + var_01 = 0; + for(var_02 = param_00.size - 1;var_02 >= 1;var_02--) + { + var_03 = param_00[var_02]; + var_04 = var_02; + for(var_05 = 0;var_05 < var_02;var_05++) + { + var_06 = param_00[var_05]; + if(stricmp(var_06,var_03) > 0) + { + var_03 = var_06; + var_04 = var_05; + } + } + + if(var_04 != var_02) + { + param_00[var_04] = param_00[var_02]; + param_00[var_02] = var_03; + } + } + + return param_00; +} + +//Function Number: 156 +is_later_in_alphabet(param_00,param_01) +{ + return stricmp(param_00,param_01) > 0; +} + +//Function Number: 157 +alphabet_compare(param_00,param_01) +{ + var_02 = []; + var_03 = 1; + var_02["0"] = var_03; + var_03++; + var_02["1"] = var_03; + var_03++; + var_02["2"] = var_03; + var_03++; + var_02["3"] = var_03; + var_03++; + var_02["4"] = var_03; + var_03++; + var_02["5"] = var_03; + var_03++; + var_02["6"] = var_03; + var_03++; + var_02["7"] = var_03; + var_03++; + var_02["8"] = var_03; + var_03++; + var_02["9"] = var_03; + var_03++; + var_02["_"] = var_03; + var_03++; + var_02["a"] = var_03; + var_03++; + var_02["b"] = var_03; + var_03++; + var_02["c"] = var_03; + var_03++; + var_02["d"] = var_03; + var_03++; + var_02["e"] = var_03; + var_03++; + var_02["f"] = var_03; + var_03++; + var_02["g"] = var_03; + var_03++; + var_02["h"] = var_03; + var_03++; + var_02["i"] = var_03; + var_03++; + var_02["j"] = var_03; + var_03++; + var_02["k"] = var_03; + var_03++; + var_02["l"] = var_03; + var_03++; + var_02["m"] = var_03; + var_03++; + var_02["n"] = var_03; + var_03++; + var_02["o"] = var_03; + var_03++; + var_02["p"] = var_03; + var_03++; + var_02["q"] = var_03; + var_03++; + var_02["r"] = var_03; + var_03++; + var_02["s"] = var_03; + var_03++; + var_02["t"] = var_03; + var_03++; + var_02["u"] = var_03; + var_03++; + var_02["v"] = var_03; + var_03++; + var_02["w"] = var_03; + var_03++; + var_02["x"] = var_03; + var_03++; + var_02["y"] = var_03; + var_03++; + var_02["z"] = var_03; + var_03++; + param_00 = tolower(param_00); + param_01 = tolower(param_01); + var_04 = 0; + if(isdefined(var_02[param_00])) + { + var_04 = var_02[param_00]; + } + + var_05 = 0; + if(isdefined(var_02[param_01])) + { + var_05 = var_02[param_01]; + } + + if(var_04 > var_05) + { + return "1st"; + } + + if(var_04 < var_05) + { + return "2nd"; + } + + return "same"; +} + +//Function Number: 158 +play_loop_sound_on_entity(param_00,param_01) +{ + var_02 = spawn("script_origin",(0,0,0)); + var_02 endon("death"); + thread delete_on_death(var_02); + if(isdefined(param_01)) + { + var_02.origin = self.origin + param_01; + var_02.angles = self.angles; + var_02 linkto(self); + } + else + { + var_02.origin = self.origin; + var_02.angles = self.angles; + var_02 linkto(self); + } + + var_02 playloopsound(param_00); + self waittill("stop sound" + param_00); + var_02 stoploopsound(param_00); + var_02 delete(); +} + +//Function Number: 159 +stop_loop_sound_on_entity(param_00) +{ + self notify("stop sound" + param_00); +} + +//Function Number: 160 +delete_on_death(param_00) +{ + param_00 endon("death"); + self waittill("death"); + if(isdefined(param_00)) + { + param_00 delete(); + } +} + +//Function Number: 161 +error(param_00) +{ + waitframe(); +} + +//Function Number: 162 +exploder(param_00) +{ + [[ level.var_7CD ]](param_00); +} + +//Function Number: 163 +create_dvar(param_00,param_01) +{ + setdvarifuninitialized(param_00,param_01); +} + +//Function Number: 164 +void() +{ +} + +//Function Number: 165 +tag_project(param_00,param_01) +{ + var_02 = self gettagorigin(param_00); + var_03 = self gettagangles(param_00); + var_04 = anglestoforward(var_03); + var_04 = vectornormalize(var_04) * param_01; + return var_02 + var_04; +} + +//Function Number: 166 +ter_op(param_00,param_01,param_02) +{ + if(param_00) + { + return param_01; + } + + return param_02; +} + +//Function Number: 167 +create_lock(param_00,param_01) +{ + if(!isdefined(param_01)) + { + param_01 = 1; + } + + if(!isdefined(level.lock)) + { + level.lock = []; + } + + var_02 = spawnstruct(); + var_02.var_96C = param_01; + var_02.count = 0; + level.lock[param_00] = var_02; +} + +//Function Number: 168 +lock(param_00) +{ + for(var_01 = level.lock[param_00];var_01.count >= var_01.var_96C;var_01 waittill("unlocked")) + { + } + + var_01.count++; +} + +//Function Number: 169 +is_locked(param_00) +{ + var_01 = level.lock[param_00]; + return var_01.count > var_01.var_96C; +} + +//Function Number: 170 +unlock_wait(param_00) +{ + thread unlock_thread(param_00); + wait 0.05; +} + +//Function Number: 171 +eog_newstar(param_00) +{ + thread unlock_thread(param_00); +} + +//Function Number: 172 +unlock_thread(param_00) +{ + wait 0.05; + var_01 = level.lock[param_00]; + var_01.count--; + var_01 notify("unlocked"); +} + +//Function Number: 173 +get_template_level() +{ + var_00 = level.script; + if(isdefined(level.template_script)) + { + var_00 = level.template_script; + } + + return var_00; +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_air_support_strobe.gsc b/MW3/PC/SP/maps/_air_support_strobe.gsc new file mode 100644 index 0000000..bb6d099 --- /dev/null +++ b/MW3/PC/SP/maps/_air_support_strobe.gsc @@ -0,0 +1,647 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_air_support_strobe.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 32 + * Decompile Time: 515 ms + * Timestamp: 10/27/2023 2:21:19 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(isdefined(level.cheap_air_strobe_fx)) + { + level._effect["air_support_marker"] = loadfx("smoke/signal_smoke_air_support_paris_ac130"); + } + else + { + level._effect["air_support_marker"] = loadfx("smoke/signal_smoke_air_support"); + } + + level._effect["air_support_trail"] = loadfx("smoke/smoke_geotrail_air_support"); + if(isdefined(level.air_support_sticky_marker_fx)) + { + level._effect["air_support_sticky_marker"] = level.air_support_sticky_marker_fx; + } + + if(isdefined(level.enemy_air_support_marker_fx)) + { + level._effect["air_support_marker_enemy"] = level.enemy_air_support_marker_fx; + } + + if(isdefined(level.enemy_air_support_trail_fx)) + { + level._effect["air_support_trail_enemy"] = level.enemy_air_support_trail_fx; + } + + level.air_support_weapon = "ac130_40mm_air_support_strobe"; + precacheitem(level.air_support_weapon); + precacheitem("air_support_strobe"); + precacherumble("ac130_artillery_rumble"); + common_scripts\utility::flag_init("flag_strobes_in_use"); + level.air_support_strobes = []; + level.air_support_strobe_count = 0; + thread air_support_loop(); + foreach(var_01 in level.players) + { + var_01 maps\_utility::ent_flag_init("flag_strobe_ready"); + var_01 thread monitor_last_weapon(); + } + + maps\_utility::add_extra_autosave_check("autosave_check_air_support_strobe_not_in_use",::autosave_check_air_support_strobe_not_in_use,"Can\'t save because an air support strobe is in use"); +} + +//Function Number: 2 +autosave_check_air_support_strobe_not_in_use() +{ + return level.air_support_strobe_count == 0; +} + +//Function Number: 3 +fake_strobe(param_00) +{ + var_01 = common_scripts\utility::spawn_tag_origin(); + var_01.origin = param_00; + thread notify_strobe_thrown(var_01); + air_support_enqueue(var_01); +} + +//Function Number: 4 +strobe_tracking() +{ + self notify("stop_strobe_tracking"); + self endon("stop_strobe_tracking"); + self giveweapon("air_support_strobe"); + self setweaponammoclip("air_support_strobe",99); + self setactionslot(4,"weapon","air_support_strobe"); + maps\_utility::ent_flag_set("flag_strobe_ready"); + var_00 = 18; + if(isdefined(level.strobe_cooldown_override)) + { + var_00 = level.strobe_cooldown_override; + } + + var_01 = weaponfiretime("air_support_strobe") - 0.05; + for(;;) + { + self waittill("grenade_fire",var_02,var_03); + var_02.owner = self; + if(var_03 == "air_support_strobe") + { + var_02 thread strobe_think(); + wait var_01; + maps\_utility::ent_flag_clear("flag_strobe_ready"); + self takeweapon("air_support_strobe"); + ensure_player_has_weapon_selected(); + wait var_00 - var_01; + self giveweapon("air_support_strobe"); + self setweaponammoclip("air_support_strobe",99); + self setactionslot(4,"weapon","air_support_strobe"); + refreshhudammocounter(); + maps\_utility::ent_flag_set("flag_strobe_ready"); + level notify("air_support_strobe_ready"); + } + } +} + +//Function Number: 5 +disable_strobes_for_player() +{ + self takeweapon("air_support_strobe"); + ensure_player_has_weapon_selected(); + self notify("stop_strobe_tracking"); + maps\_utility::ent_flag_clear("flag_strobe_ready"); +} + +//Function Number: 6 +enable_strobes_for_player() +{ + thread strobe_tracking(); +} + +//Function Number: 7 +air_support_loop() +{ + var_00 = 2.5; + if(isdefined(level.strobe_firedelay_override)) + { + var_00 = level.strobe_firedelay_override; + } + + for(;;) + { + var_01 = air_support_dequeue(); + if(var_01 strobe_can_see_targets() || isdefined(level.strobe_no_vis_check) && level.strobe_no_vis_check) + { + level notify("air_suport_strobe_fired_upon",var_01); + thread count_strobe_kills(8); + if(!isdefined(level.strobe_no_badplace) || !level.strobe_no_badplace) + { + var_01 thread strobe_enemy_badplace(); + } + + wait var_00; + var_01 strobe_fire(); + continue; + } + + level notify("air_support_strobe_no_targets"); + wait 1; + } +} + +//Function Number: 8 +notify_strobe_thrown(param_00) +{ + level notify("air_support_strobe_thrown",param_00); + level endon("air_support_strobe_thrown"); + common_scripts\utility::flag_set("flag_strobes_in_use"); + wait 5; + for(;;) + { + while(!air_support_queue_empty()) + { + wait 1; + } + + wait 10; + if(air_support_queue_empty()) + { + break; + } + } + + common_scripts\utility::flag_clear("flag_strobes_in_use"); +} + +//Function Number: 9 +strobe_enemy_badplace() +{ + self endon("death"); + var_00 = 5.8; + if(isdefined(level.strobe_used_once)) + { + var_00 = 3; + } + + wait var_00; + var_01 = 512; + var_02 = 400; + var_03 = 11 - var_00; + badplace_cylinder("",var_03,self.origin - (0,0,var_01 / 2),var_02,var_01,"axis"); + level.strobe_used_once = 1; +} + +//Function Number: 10 +strobe_think(param_00) +{ + self endon("death"); + thread monitor_strobe_count(); + thread notify_strobe_thrown(self); + self.fx_origin = common_scripts\utility::spawn_tag_origin(); + self.fx_origin linkto(self); + wait 0.1; + if(isdefined(param_00) && param_00) + { + playfxontag(common_scripts\utility::getfx("air_support_trail_enemy"),self.fx_origin,"tag_origin"); + self.isenemystrobe = 1; + } + else + { + playfxontag(common_scripts\utility::getfx("air_support_trail"),self.fx_origin,"tag_origin"); + } + + wait 2.35; + var_01 = 0.5; + var_02 = gettime() + var_01 * 1000; + var_03 = self.origin; + while(gettime() < var_02) + { + common_scripts\utility::waitframe(); + var_04 = self.origin - var_03 * 20; + var_03 = self.origin; + if(var_04[2] >= 0) + { + break; + } + } + + var_05 = bullettrace(self.origin,self.origin + (0,0,-1024),1,undefined,1); + if(isdefined(var_05["position"])) + { + self.origin = var_05["position"]; + } + + if(isdefined(self.sticky) && self.sticky) + { + thread marker_pulse(); + } + else if(isdefined(param_00) && param_00) + { + playfx(common_scripts\utility::getfx("air_support_marker_enemy"),self.origin); + } + else + { + playfx(common_scripts\utility::getfx("air_support_marker"),self.origin); + } + + air_support_enqueue(self); + var_06 = 512; + var_07 = 650; + badplace_cylinder("",9.5,self.origin - (0,0,var_06 / 2),var_07,var_06,"allies"); + wait 15; + if(isdefined(self.fx_origin)) + { + if(isdefined(param_00) && param_00) + { + stopfxontag(common_scripts\utility::getfx("air_support_marker_enemy"),self.fx_origin,"tag_origin"); + } + else + { + stopfxontag(common_scripts\utility::getfx("air_support_marker"),self.fx_origin,"tag_origin"); + } + + self.fx_origin delete(); + } + + self delete(); +} + +//Function Number: 11 +monitor_strobe_count() +{ + if(!isdefined(self)) + { + return; + } + + level.air_support_strobe_count++; + self waittill("death"); + wait 4; + level.air_support_strobe_count--; +} + +//Function Number: 12 +marker_pulse() +{ + self endon("death"); + var_00 = 5; + var_01 = 0.3; + for(var_02 = 0;var_02 <= var_00 / var_01;var_02++) + { + if(isdefined(self.fx_origin)) + { + playfxontag(common_scripts\utility::getfx("air_support_sticky_marker"),self.fx_origin,"tag_origin"); + wait var_01; + continue; + } + + break; + } + + wait 1; + stopfxontag(common_scripts\utility::getfx("air_support_sticky_marker"),self.fx_origin,"tag_origin"); +} + +//Function Number: 13 +linkto_without_angles(param_00) +{ + self endon("death"); + self unlink(); + self rotateto((0,0,90),0.05); + while(isdefined(param_00) && isdefined(param_00.origin)) + { + self moveto(param_00.origin,0.05); + common_scripts\utility::waitframe(); + } +} + +//Function Number: 14 +air_support_enqueue(param_00) +{ + level.air_support_strobes[level.air_support_strobes.size] = param_00; + level notify("air_support_strobe_popped",param_00); +} + +//Function Number: 15 +air_support_dequeue() +{ + level.air_support_strobes = common_scripts\utility::array_removeundefined(level.air_support_strobes); + while(level.air_support_strobes.size == 0) + { + level waittill("air_support_strobe_popped",var_00); + level.air_support_strobes = common_scripts\utility::array_removeundefined(level.air_support_strobes); + } + + return level.air_support_strobes[0]; +} + +//Function Number: 16 +air_support_queue_empty() +{ + return level.air_support_strobes.size == 0; +} + +//Function Number: 17 +set_aircraft(param_00,param_01,param_02) +{ + if(isdefined(param_01)) + { + level.air_support_fake_altitude_inches = param_01; + } + + if(isdefined(param_02)) + { + level.air_support_aircraft_guntag = param_02; + } + + level.air_support_aircraft = param_00; +} + +//Function Number: 18 +get_gun_pos() +{ + if(isdefined(level.air_support_aircraft) && isalive(level.air_support_aircraft)) + { + var_00 = level.air_support_aircraft.origin; + if(isdefined(level.air_support_aircraft_guntag)) + { + var_00 = level.air_support_aircraft gettagorigin(level.air_support_aircraft_guntag); + } + + if(isdefined(level.air_support_fake_altitude_inches)) + { + var_01 = level.player geteye(); + if(var_00[2] > level.air_support_fake_altitude_inches && var_01[2] < level.air_support_fake_altitude_inches) + { + var_02 = level.air_support_fake_altitude_inches - var_01[2] / var_00[2] - var_01[2]; + var_00 = maps\_utility::linear_interpolate(var_02,level.player.origin,var_00); + } + } + + return var_00; + } + + return self.origin + (30,15,12000); +} + +//Function Number: 19 +get_gun_test_pos() +{ + return get_gun_pos(); +} + +//Function Number: 20 +strobe_can_see_targets() +{ + var_00 = compute_targets(self.origin,get_gun_pos()); + var_00 = filter_visible_targets(var_00,get_gun_test_pos()); + return var_00.size > 0; +} + +//Function Number: 21 +strobe_fire() +{ + self endon("death"); + if(!isdefined(self)) + { + return; + } + + var_00 = 10; + var_01 = 200; + var_02 = 60 / var_01; + maps\_audio::aud_send_msg("ac130_prepare_inc"); + for(var_03 = 0;var_03 < var_00;var_03++) + { + var_04 = get_gun_pos(); + var_05 = get_gun_test_pos(); + var_06 = compute_targets(self.origin,var_04); + var_06 = filter_visible_targets(var_06,var_05); + var_07 = get_best_target(var_06,var_03,var_00); + if(!isdefined(var_07)) + { + var_07 = self.origin + noise_vector(32); + } + + if(isdefined(self.isenemystrobe)) + { + var_08 = magicbullet(level.air_support_weapon,var_04,var_07); + } + else + { + var_08 = magicbullet(level.air_support_weapon,var_04,var_07,self.owner); + } + + var_08 thread projectile_impact_earthquake(0.3,0.5,1200); + var_09 = spawnstruct(); + var_09.target_pos = var_07; + var_09.fire_delay = var_02; + var_09.bullet = var_08; + maps\_audio::aud_send_msg("aud_ac130_bullet",var_09); + wait var_02; + } + + if(isdefined(self.fx_origin)) + { + stopfxontag(common_scripts\utility::getfx("air_support_marker"),self.fx_origin,"tag_origin"); + self.fx_origin delete(); + } + + self delete(); +} + +//Function Number: 22 +projectile_impact_earthquake(param_00,param_01,param_02) +{ + var_03 = self.origin; + while(isdefined(self)) + { + var_03 = self.origin; + wait 0.1; + } + + earthquake(param_00,param_01,var_03,param_02); + playrumbleonposition("ac130_artillery_rumble",var_03); +} + +//Function Number: 23 +compute_targets(param_00,param_01) +{ + var_02 = 512; + var_03 = 32; + var_04 = 64; + var_05 = 7500; + var_06 = 1.1; + var_07 = distance(param_00,param_01) / var_05 * var_06; + var_08 = []; + foreach(var_0A in vehicle_getarray()) + { + if(!isdefined(var_0A.air_support_strobe_ignore) && distance2d(var_0A.origin,param_01) < var_03) + { + var_7B[var_7B.size] = var_0A.origin + var_0A vehicle_getvelocity() * var_08 + noise_vector(var_04); + } + } + + foreach(var_0D in getaiarray("axis","neutral")) + { + if(isalive(var_0D) && !isdefined(var_0D.air_support_strobe_ignore) && distance(var_0D.origin,param_01) < var_03) + { + var_7B[var_7B.size] = var_0D.origin + noise_vector(var_04); + } + } + + return var_7B; +} + +//Function Number: 24 +get_best_target(param_00,param_01,param_02) +{ + var_03 = 512; + var_04 = self.origin + vectornormalize(self.origin - level.player.origin) * var_03; + var_05 = self.origin + vectornormalize(level.player.origin - self.origin) * var_03; + var_06 = vectorlerp(var_04,var_05,param_01 / param_02); + var_07 = 9999999; + var_08 = undefined; + foreach(var_0A in param_00) + { + var_0B = distance2d(var_06,var_0A); + if(var_0B < var_07) + { + var_07 = var_0B; + var_08 = var_0A; + } + } + + return var_08; +} + +//Function Number: 25 +filter_visible_targets(param_00,param_01) +{ + var_02 = []; + foreach(var_04 in param_00) + { + if(visibility_check(param_01,var_04)) + { + var_02[var_02.size] = var_04; + } + } + + return var_02; +} + +//Function Number: 26 +noise_vector(param_00) +{ + return common_scripts\utility::randomvectorrange(0,param_00) * (1,1,0); +} + +//Function Number: 27 +visibility_check(param_00,param_01) +{ + return bullettracepassed(param_00,param_01 + (0,0,128),0,undefined); +} + +//Function Number: 28 +count_strobe_kills(param_00) +{ + level notify("air_support_strobe_stop_damage_watcher"); + level.air_support_strobe_num_killed = 0; + level.air_support_strobe_btr_killed = 0; + foreach(var_02 in getaiarray("axis")) + { + var_02 thread damage_watcher(); + } + + foreach(var_05 in vehicle_getarray()) + { + if(isdefined(var_05.script_team) && var_05.script_team == "axis") + { + var_05 thread damage_watcher(); + } + } + + wait param_00; + level notify("air_support_strobe_stop_damage_watcher"); + level notify("air_support_strobe_killed",level.air_support_strobe_num_killed); +} + +//Function Number: 29 +get_num_kills() +{ + return level.air_support_strobe_num_killed; +} + +//Function Number: 30 +damage_watcher() +{ + level endon("air_support_strobe_stop_damage_watcher"); + if(self.health <= 0) + { + return; + } + + while(isdefined(self)) + { + self waittill("damage",var_00,var_01,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09); + var_0A = 0; + if(isdefined(self.healthbuffer)) + { + var_0A = self.healthbuffer; + } + + if(isdefined(var_09) && var_09 == level.air_support_weapon && isdefined(self) && isdefined(self.health) && self.health <= var_0A && self.health + var_00 > var_0A && !maps\_vehicle::is_godmode()) + { + level.air_support_strobe_num_killed++; + if(isdefined(level.btr_courtyard) && self == level.btr_courtyard) + { + level.air_support_strobe_btr_killed = 1; + } + + return; + } + else if(!isdefined(self) || !isdefined(self.health) || self.health <= var_0A) + { + return; + } + } +} + +//Function Number: 31 +monitor_last_weapon() +{ + self endon("death"); + var_00 = self getcurrentweapon(); + self.last_weapon = var_00; + for(;;) + { + var_00 = self getcurrentweapon(); + self waittill("weapon_change",var_01); + self.last_weapon = var_00; + var_00 = var_01; + } +} + +//Function Number: 32 +ensure_player_has_weapon_selected() +{ + if(self getcurrentweapon() == "none") + { + var_00 = 0; + if(isdefined(self.last_weapon) && self.last_weapon != "none" && self hasweapon(self.last_weapon)) + { + var_00 = self switchtoweapon(self.last_weapon); + } + else + { + var_01 = self getweaponslistprimaries(); + if(var_01.size > 0) + { + var_00 = self switchtoweapon(var_01[0]); + } + } + } +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_ambient.gsc b/MW3/PC/SP/maps/_ambient.gsc new file mode 100644 index 0000000..19de553 --- /dev/null +++ b/MW3/PC/SP/maps/_ambient.gsc @@ -0,0 +1,116 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_ambient.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 11 + * Decompile Time: 174 ms + * Timestamp: 10/27/2023 2:22:00 AM +*******************************************************************/ + +//Function Number: 1 +setup_new_eq_settings(param_00,param_01) +{ + if(!isdefined(param_00) || !isdefined(level.ambient_eq[param_00])) + { + deactivate_index(param_01); + return 0; + } + + if(level.eq_track[param_01] == param_00) + { + return 0; + } + + level.eq_track[param_01] = param_00; + use_eq_settings(param_00,param_01); + return 1; +} + +//Function Number: 2 +use_eq_settings(param_00,param_01) +{ + if(level.player maps\_utility::ent_flag("player_has_red_flashing_overlay")) + { + return; + } + + maps\_audio::aud_set_filter(param_00,param_01); +} + +//Function Number: 3 +deactivate_index(param_00) +{ + level.eq_track[param_00] = ""; + level.player deactivateeq(param_00); +} + +//Function Number: 4 +blend_to_eq_track(param_00,param_01) +{ + var_02 = 1; + if(isdefined(param_01)) + { + var_02 = param_01; + } + + var_03 = 0.05; + var_04 = var_02 / var_03; + var_05 = 1 / var_04; + for(var_06 = 0;var_06 <= 1;var_06 = var_06 + var_05) + { + level.player seteqlerp(var_06,param_00); + wait var_03; + } + + level.player seteqlerp(1,param_00); +} + +//Function Number: 5 +use_reverb_settings(param_00) +{ + if(level.player maps\_utility::ent_flag("player_has_red_flashing_overlay")) + { + return; + } + + lib_0086::func_1465(param_00); +} + +//Function Number: 6 +deactivate_reverb() +{ + lib_0086::func_146B(); +} + +//Function Number: 7 +ambientdelay(param_00,param_01,param_02) +{ + maps\_audio::aud_print_warning("ambientDelay called, this is deprecated! Use new preset string tables."); +} + +//Function Number: 8 +ambientevent(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + maps\_audio::aud_print_warning("ambientEvent called, this is deprecated! Use new preset string tables."); +} + +//Function Number: 9 +ambienteventstart(param_00) +{ + maps\_audio::aud_print_warning("ambientEventStart called, this is deprecated! Use maps_utility::set_ambient( track, fade_ )."); + maps\_utility::set_ambient(param_00); +} + +//Function Number: 10 +start_ambient_event(param_00) +{ + maps\_audio::aud_print_warning("start_ambient_event called, this is deprecated! Use maps_utility::set_ambient( track, fade_ )."); + maps\_utility::set_ambient(param_00); +} + +//Function Number: 11 +get_progess(param_00,param_01,param_02,param_03) +{ + maps\_utility::get_progress(param_00,param_01,param_03,param_02); +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_anim.gsc b/MW3/PC/SP/maps/_anim.gsc new file mode 100644 index 0000000..cd1086c --- /dev/null +++ b/MW3/PC/SP/maps/_anim.gsc @@ -0,0 +1,2409 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_anim.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 129 + * Decompile Time: 2260 ms + * Timestamp: 10/27/2023 2:24:14 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + if(!isdefined(level.scr_notetrack)) + { + level.scr_notetrack = []; + } + + if(!isdefined(level.scr_face)) + { + level.scr_face = []; + } + + if(!isdefined(level.scr_look)) + { + level.scr_look = []; + } + + if(!isdefined(level.scr_animsound)) + { + level.scr_animsound = []; + } + + if(!isdefined(level.scr_sound)) + { + level.scr_sound = []; + } + + if(!isdefined(level.scr_radio)) + { + level.scr_radio = []; + } + + if(!isdefined(level.scr_text)) + { + level.scr_text = []; + } + + if(!isdefined(level.scr_anim)) + { + level.scr_anim[0][0] = 0; + } + + if(!isdefined(level.scr_radio)) + { + level.scr_radio = []; + } +} + +//Function Number: 2 +endonremoveanimactive(param_00,param_01) +{ + self waittill(param_00); + foreach(var_03 in param_01) + { + var_04 = var_03["guy"]; + if(!isdefined(var_04)) + { + continue; + } + + var_04._animactive--; + var_04._lastanimtime = gettime(); + } +} + +//Function Number: 3 +anim_first_frame(param_00,param_01,param_02) +{ + var_03 = get_anim_position(param_02); + var_04 = var_03["origin"]; + var_05 = var_03["angles"]; + common_scripts\utility::array_levelthread(param_00,::anim_first_frame_on_guy,param_01,var_04,var_05); +} + +//Function Number: 4 +anim_generic_first_frame(param_00,param_01,param_02) +{ + var_03 = get_anim_position(param_02); + var_04 = var_03["origin"]; + var_05 = var_03["angles"]; + thread anim_first_frame_on_guy(param_00,param_01,var_04,var_05,"generic"); +} + +//Function Number: 5 +anim_generic(param_00,param_01,param_02) +{ + var_03 = []; + anim_single(var_7B,param_02,var_03,0,"generic"); +} + +//Function Number: 6 +anim_generic_gravity(param_00,param_01,param_02) +{ + var_03 = param_00.allowpain; + param_00 maps\_utility::disable_pain(); + anim_generic_custom_animmode(param_00,"gravity",param_01,param_02); + if(var_03) + { + param_00 maps\_utility::enable_pain(); + } +} + +//Function Number: 7 +anim_generic_run(param_00,param_01,param_02) +{ + var_03 = []; + anim_single(var_7B,param_02,var_03,0.25,"generic"); +} + +//Function Number: 8 +anim_generic_reach(param_00,param_01,param_02) +{ + var_03 = []; + anim_reach(var_7B,param_02,var_03,"generic"); +} + +//Function Number: 9 +anim_generic_reach_and_arrive(param_00,param_01,param_02) +{ + var_03 = []; + anim_reach_with_funcs(var_7B,param_02,var_03,"generic",::reach_with_arrivals_begin,::reach_with_standard_adjustments_end); +} + +//Function Number: 10 +anim_reach_and_plant(param_00,param_01,param_02) +{ + anim_reach_with_funcs(param_00,param_01,param_02,undefined,::reach_with_planting,::reach_with_standard_adjustments_end); +} + +//Function Number: 11 +anim_reach_and_plant_and_arrive(param_00,param_01,param_02) +{ + anim_reach_with_funcs(param_00,param_01,param_02,undefined,::reach_with_planting_and_arrivals,::reach_with_standard_adjustments_end); +} + +//Function Number: 12 +anim_generic_loop(param_00,param_01,param_02,param_03) +{ + var_04 = []; + param_00[0] = var_7B; + anim_loop_packet(var_7B,param_01,param_02,"generic"); +} + +//Function Number: 13 +anim_custom_animmode(param_00,param_01,param_02,param_03) +{ + var_04 = get_anim_position(param_03); + var_05 = var_04["origin"]; + var_06 = var_04["angles"]; + var_07 = undefined; + foreach(var_09 in param_00) + { + var_07 = var_09; + thread anim_custom_animmode_on_guy(var_09,param_01,param_02,var_05,var_06,var_09.animname,0); + } + + var_07 wait_until_anim_finishes(param_02); + self notify(param_02); +} + +//Function Number: 14 +anim_custom_animmode_loop(param_00,param_01,param_02,param_03) +{ + var_04 = get_anim_position(param_03); + var_05 = var_04["origin"]; + var_06 = var_04["angles"]; + foreach(var_08 in param_00) + { + thread anim_custom_animmode_on_guy(var_08,param_01,param_02,var_05,var_06,var_08.animname,1); + } + + param_00[0] wait_until_anim_finishes(param_02); + self notify(param_02); +} + +//Function Number: 15 +wait_until_anim_finishes(param_00) +{ + self endon("finished_custom_animmode" + param_00); + self waittill("death"); +} + +//Function Number: 16 +anim_generic_custom_animmode(param_00,param_01,param_02,param_03,param_04,param_05) +{ + var_06 = get_anim_position(param_03); + var_07 = var_06["origin"]; + var_08 = var_06["angles"]; + thread anim_custom_animmode_on_guy(param_00,param_01,param_02,var_07,var_08,"generic",0,param_04,param_05); + param_00 wait_until_anim_finishes(param_02); + self notify(param_02); +} + +//Function Number: 17 +anim_generic_custom_animmode_loop(param_00,param_01,param_02,param_03,param_04,param_05) +{ + var_06 = get_anim_position(param_03); + var_07 = var_06["origin"]; + var_08 = var_06["angles"]; + thread anim_custom_animmode_on_guy(param_00,param_01,param_02,var_07,var_08,"generic",1,param_04,param_05); + param_00 wait_until_anim_finishes(param_02); + self notify(param_02); +} + +//Function Number: 18 +anim_custom_animmode_solo(param_00,param_01,param_02,param_03) +{ + var_04 = []; + anim_custom_animmode(var_7B,param_02,param_03,var_04); +} + +//Function Number: 19 +anim_first_frame_solo(param_00,param_01,param_02) +{ + var_03 = []; + anim_first_frame(var_7B,param_02,var_03); +} + +//Function Number: 20 +anim_last_frame_solo(param_00,param_01,param_02) +{ + var_03 = []; + anim_first_frame(var_7B,param_02,var_03); + anim_set_time(var_7B,param_02,1); +} + +//Function Number: 21 +assert_existance_of_anim(param_00,param_01) +{ + if(!isdefined(param_01)) + { + param_01 = self.animname; + } + + var_02 = 0; + if(isdefined(level.scr_anim[param_01])) + { + var_02 = 1; + if(isdefined(level.scr_anim[param_01][param_00])) + { + return; + } + } + + var_03 = 0; + if(isdefined(level.scr_sound[param_01])) + { + var_03 = 1; + if(isdefined(level.scr_sound[param_01][param_00])) + { + return; + } + } + + if(var_02 || var_03) + { + if(var_02) + { + var_04 = getarraykeys(level.scr_anim[param_01]); + foreach(var_06 in var_04) + { + } + } + + if(var_03) + { + var_04 = getarraykeys(level.scr_sound[param_01]); + foreach(var_06 in var_04) + { + } + } + + return; + } + + var_0A = getarraykeys(level.scr_anim); + var_0A = common_scripts\utility::array_combine(var_0A,getarraykeys(level.scr_sound)); + foreach(var_0C in var_0A) + { + } +} + +//Function Number: 22 +anim_first_frame_on_guy(param_00,param_01,param_02,param_03,param_04) +{ + param_00.first_frame_time = gettime(); + if(isdefined(param_04)) + { + var_05 = param_04; + } + else + { + var_05 = param_01.animname; + } + + param_00 set_start_pos(param_01,param_02,param_03,var_05); + if(isai(param_00)) + { + param_00._first_frame_anim = param_01; + param_00._animname = var_05; + param_00 animcustom(::animscripts/first_frame::main); + return; + } + + param_00 stopanimscripted(); + param_00 setanimknob(level.scr_anim[var_05][param_01],1,0,0); +} + +//Function Number: 23 +anim_custom_animmode_on_guy(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08) +{ + if(isai(param_00) && param_00 maps\_utility::doinglongdeath()) + { + return; + } + + var_09 = undefined; + if(isdefined(param_05)) + { + var_09 = param_05; + } + else + { + var_09 = param_00.animname; + } + + if(!isdefined(param_08) || !param_08) + { + param_00 set_start_pos(param_02,param_03,param_04,param_05,param_06); + } + + param_00._animmode = param_01; + param_00._custom_anim = param_02; + param_00._tag_entity = self; + param_00._anime = param_02; + param_00._animname = var_09; + param_00._custom_anim_loop = param_06; + param_00._custom_anim_thread = param_07; + param_00 animcustom(::animscripts/animmode::main); +} + +//Function Number: 24 +anim_loop(param_00,param_01,param_02,param_03) +{ + var_04 = []; + foreach(var_06 in param_00) + { + var_07 = []; + var_07["guy"] = var_06; + var_07["entity"] = self; + var_07["tag"] = param_03; + var_04[var_04.size] = var_07; + } + + anim_loop_packet(var_04,param_01,param_02); +} + +//Function Number: 25 +anim_loop_packet_solo(param_00,param_01,param_02) +{ + var_03 = []; + anim_loop_packet(var_7B,param_02,var_03); +} + +//Function Number: 26 +anim_loop_packet(param_00,param_01,param_02,param_03) +{ + foreach(var_05 in param_00) + { + var_06 = var_05["guy"]; + if(!isdefined(var_06)) + { + continue; + } + + if(!isdefined(var_06._animactive)) + { + var_06._animactive = 0; + } + + var_06 endon("death"); + var_06._animactive++; + } + + var_08 = param_00[0]["guy"]; + if(!isdefined(param_02)) + { + param_02 = "stop_loop"; + } + + thread endonremoveanimactive(param_02,param_00); + self endon(param_02); + var_09 = "looping anim"; + var_0A = undefined; + if(isdefined(param_03)) + { + var_0A = param_03; + } + else + { + var_0A = var_08.animname; + } + + var_0B = 0; + var_0C = 0; + for(;;) + { + for(var_0B = anim_weight(var_0A,param_01);var_0B == var_0C && var_0B != 0;var_0B = anim_weight(var_0A,param_01)) + { + } + + var_0C = var_0B; + var_0D = undefined; + var_0E = 999999; + var_0F = undefined; + var_06 = undefined; + foreach(var_1D, var_05 in param_00) + { + var_11 = var_05["entity"]; + var_06 = var_05["guy"]; + var_12 = var_11 get_anim_position(var_05["tag"]); + var_13 = var_12["origin"]; + var_14 = var_12["angles"]; + if(isdefined(var_06.remove_from_animloop)) + { + var_06.remove_from_animloop = undefined; + param_00[var_1D] = undefined; + continue; + } + + var_15 = 0; + var_16 = 0; + var_17 = 0; + var_18 = 0; + var_19 = undefined; + var_1A = undefined; + var_1B = undefined; + if(isdefined(param_03)) + { + var_1B = param_03; + } + else + { + var_1B = var_06.animname; + } + + if(isdefined(level.scr_face[var_1B]) && isdefined(level.scr_face[var_1B][param_01]) && isdefined(level.scr_face[var_1B][param_01][var_0B])) + { + var_15 = 1; + var_19 = level.scr_face[var_1B][param_01][var_0B]; + } + + if(isdefined(level.scr_sound[var_1B]) && isdefined(level.scr_sound[var_1B][param_01]) && isdefined(level.scr_sound[var_1B][param_01][var_0B])) + { + var_16 = 1; + var_1A = level.scr_sound[var_1B][param_01][var_0B]; + } + + if(isdefined(level.scr_animsound[var_1B]) && isdefined(level.scr_animsound[var_1B][var_0B + param_01])) + { + var_06 playsound(level.scr_animsound[var_1B][var_0B + param_01]); + } + + if(isdefined(level.scr_anim[var_1B]) && isdefined(level.scr_anim[var_1B][param_01]) && !isai(var_06) || !var_06 maps\_utility::doinglongdeath()) + { + var_17 = 1; + } + + if(var_17) + { + var_06 last_anim_time_check(); + var_06 animscripted(var_09,var_13,var_14,level.scr_anim[var_1B][param_01][var_0B]); + var_1C = getanimlength(level.scr_anim[var_1B][param_01][var_0B]); + if(var_1C < var_0E) + { + var_0E = var_1C; + var_0D = var_1D; + } + + thread start_notetrack_wait(var_06,var_09,param_01,var_1B); + thread animscriptdonotetracksthread(var_06,var_09,param_01); + } + + if(var_15 || var_16) + { + if(isai(var_06)) + { + if(var_17) + { + var_06 animscripts/face::func_C46(var_19,var_1A,1); + } + else + { + var_06 animscripts/face::func_C46(var_19,var_1A,1,var_09); + } + } + else + { + var_06 maps\_utility::play_sound_on_entity(var_1A); + } + + var_0F = var_1D; + } + } + + if(!isdefined(var_06)) + { + break; + } + + if(isdefined(var_0D)) + { + param_00[var_0D]["guy"] waittillmatch("end",var_09); + continue; + } + + if(isdefined(var_0F)) + { + param_00[var_0F]["guy"] waittill(var_09); + } + } +} + +//Function Number: 27 +start_notetrack_wait(param_00,param_01,param_02,param_03) +{ + param_00 notify("stop_sequencing_notetracks"); + thread notetrack_wait(param_00,param_01,self,param_02,param_03); +} + +//Function Number: 28 +anim_single_failsafeonguy(param_00,param_01) +{ +} + +//Function Number: 29 +anim_single_failsafe(param_00,param_01) +{ + foreach(var_03 in param_00) + { + var_03 thread anim_single_failsafeonguy(self,param_01); + } +} + +//Function Number: 30 +anim_single(param_00,param_01,param_02,param_03,param_04) +{ + if(!isdefined(param_03)) + { + param_03 = 0; + } + + anim_single_internal(param_00,param_01,param_02,param_03,param_04); +} + +//Function Number: 31 +anim_single_run(param_00,param_01,param_02,param_03) +{ + anim_single_internal(param_00,param_01,param_02,0.25,param_03); +} + +//Function Number: 32 +anim_single_internal(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = self; + foreach(var_07 in param_00) + { + if(!isdefined(var_07)) + { + continue; + } + + if(!isdefined(var_07._animactive)) + { + var_07._animactive = 0; + } + + var_07._animactive++; + } + + var_09 = get_anim_position(param_02); + var_0A = var_09["origin"]; + var_0B = var_09["angles"]; + var_0C = undefined; + var_0D = 999999; + var_0E = undefined; + var_0F = undefined; + var_10 = undefined; + var_11 = "single anim"; + foreach(var_1D, var_07 in param_00) + { + var_13 = 0; + var_14 = 0; + var_15 = 0; + var_16 = 0; + var_17 = undefined; + var_18 = undefined; + var_19 = undefined; + if(isdefined(param_04)) + { + var_19 = param_04; + } + else + { + var_19 = var_07.animname; + } + + if(isdefined(level.scr_face[var_19]) && isdefined(level.scr_face[var_19][param_01])) + { + var_13 = 1; + var_18 = level.scr_face[var_19][param_01]; + var_10 = var_18; + } + + if(isdefined(level.scr_sound[var_19]) && isdefined(level.scr_sound[var_19][param_01])) + { + var_14 = 1; + var_17 = level.scr_sound[var_19][param_01]; + } + + if(isdefined(level.scr_anim[var_19]) && isdefined(level.scr_anim[var_19][param_01]) && !isai(var_07) || !var_07 maps\_utility::doinglongdeath()) + { + var_15 = 1; + } + + if(isdefined(level.scr_animsound[var_19]) && isdefined(level.scr_animsound[var_19][param_01])) + { + var_07 playsound(level.scr_animsound[var_19][param_01]); + } + + if(var_15) + { + var_07 last_anim_time_check(); + if(isplayer(var_07)) + { + var_1A = level.scr_anim[var_19]["root"]; + var_07 setanim(var_1A,0,0.2); + var_1B = level.scr_anim[var_19][param_01]; + var_07 setflaggedanim(var_11,var_1B,1,0.2); + } + else if(var_07.code_classname == "misc_turret") + { + var_1B = level.scr_anim[var_19][param_01]; + var_07 setflaggedanim(var_11,var_1B,1,0.2); + } + else + { + var_07 animscripted(var_11,var_0A,var_0B,level.scr_anim[var_19][param_01]); + } + + var_1C = getanimlength(level.scr_anim[var_19][param_01]); + if(var_1C < var_0D) + { + var_0D = var_1C; + var_0C = var_1D; + } + + thread start_notetrack_wait(var_07,var_11,param_01,var_19); + thread animscriptdonotetracksthread(var_07,var_11,param_01); + } + + if(var_13 || var_14) + { + if(var_13) + { + if(var_14) + { + var_07 thread delayeddialogue(param_01,var_13,var_17,level.scr_face[var_19][param_01]); + } + + thread anim_facialanim(var_07,param_01,level.scr_face[var_19][param_01]); + var_0F = var_1D; + } + else if(isai(var_07)) + { + if(var_15) + { + var_07 animscripts/face::func_C46(var_18,var_17,1); + } + else + { + var_07 thread anim_facialfiller("single dialogue"); + var_07 animscripts/face::func_C46(var_18,var_17,1,"single dialogue"); + } + } + else + { + var_07 thread maps\_utility::play_sound_on_entity(var_17,"single dialogue"); + } + + var_0E = var_1D; + } + } + + if(isdefined(var_0C)) + { + var_1E = spawnstruct(); + var_1E thread anim_deathnotify(param_00[var_0C],param_01); + var_1E thread anim_animationendnotify(param_00[var_0C],param_01,var_0D,param_03); + var_1E waittill(param_01); + } + else if(isdefined(var_0F)) + { + var_1E = spawnstruct(); + var_1E thread anim_deathnotify(param_00[var_0F],param_01); + var_1E thread anim_facialendnotify(param_00[var_0F],param_01,var_10); + var_1E waittill(param_01); + } + else if(isdefined(var_0E)) + { + var_1E = spawnstruct(); + var_1E thread anim_deathnotify(param_00[var_0E],param_01); + var_1E thread anim_dialogueendnotify(param_00[var_0E],param_01); + var_1E waittill(param_01); + } + + foreach(var_07 in param_00) + { + if(!isdefined(var_07)) + { + continue; + } + + if(isplayer(var_07)) + { + var_19 = undefined; + if(isdefined(param_04)) + { + var_19 = param_04; + } + else + { + var_19 = var_07.animname; + } + + if(isdefined(level.scr_anim[var_19][param_01])) + { + var_1A = level.scr_anim[var_19]["root"]; + var_07 setanim(var_1A,1,0.2); + var_1B = level.scr_anim[var_19][param_01]; + var_07 clearanim(var_1B,0.2); + } + } + + var_07._animactive--; + var_07._lastanimtime = gettime(); + } + + self notify(param_01); +} + +//Function Number: 33 +anim_deathnotify(param_00,param_01) +{ + self endon(param_01); + param_00 waittill("death"); + self notify(param_01); +} + +//Function Number: 34 +anim_facialendnotify(param_00,param_01,param_02) +{ + self endon(param_01); + var_03 = getanimlength(param_02); + wait var_03; + self notify(param_01); +} + +//Function Number: 35 +anim_dialogueendnotify(param_00,param_01) +{ + self endon(param_01); + param_00 waittill("single dialogue"); + self notify(param_01); +} + +//Function Number: 36 +anim_animationendnotify(param_00,param_01,param_02,param_03) +{ + self endon(param_01); + param_00 endon("death"); + param_02 = param_02 - param_03; + if(param_03 > 0 && param_02 > 0) + { + param_00 maps\_utility::waittill_match_or_timeout("single anim","end",param_02); + param_00 stopanimscripted(); + } + else + { + param_00 waittillmatch("end","single anim"); + } + + self notify(param_01); +} + +//Function Number: 37 +animscriptdonotetracksthread(param_00,param_01,param_02) +{ + if(isdefined(param_00.var_11E5) && param_00.var_11E5) + { + return; + } + + param_00 endon("stop_sequencing_notetracks"); + param_00 endon("death"); + param_00 animscripts/shared::donotetracks(param_01); +} + +//Function Number: 38 +add_animsound(param_00) +{ + for(var_01 = 0;var_01 < level.animsound_hudlimit;var_01++) + { + if(isdefined(self.animsounds[var_01])) + { + continue; + } + + self.animsounds[var_01] = param_00; + return; + } + + var_02 = getarraykeys(self.animsounds); + var_03 = var_02[0]; + var_04 = self.animsounds[var_03].end_time; + for(var_01 = 1;var_01 < var_02.size;var_01++) + { + var_05 = var_02[var_01]; + if(self.animsounds[var_05].end_time < var_04) + { + var_04 = self.animsounds[var_05].end_time; + var_03 = var_05; + } + } + + self.animsounds[var_03] = param_00; +} + +//Function Number: 39 +animsound_exists(param_00,param_01) +{ + param_01 = tolower(param_01); + var_02 = getarraykeys(self.animsounds); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + var_04 = var_02[var_03]; + if(self.animsounds[var_04].anime != param_00) + { + continue; + } + + if(self.animsounds[var_04].notetrack != param_01) + { + continue; + } + + self.animsounds[var_04].end_time = gettime() + -5536; + return 1; + } + + return 0; +} + +//Function Number: 40 +animsound_tracker(param_00,param_01,param_02) +{ + param_01 = tolower(param_01); + add_to_animsound(); + if(param_01 == "end") + { + return; + } + + if(animsound_exists(param_00,param_01)) + { + return; + } + + var_03 = spawnstruct(); + var_03.anime = param_00; + var_03.notetrack = param_01; + var_03.animname = param_02; + var_03.end_time = gettime() + -5536; + add_animsound(var_03); +} + +//Function Number: 41 +animsound_start_tracker(param_00,param_01) +{ + add_to_animsound(); + var_02 = spawnstruct(); + var_02.anime = param_00; + var_02.notetrack = "#" + param_00; + var_02.animname = param_01; + var_02.end_time = gettime() + -5536; + if(animsound_exists(param_00,var_02.notetrack)) + { + return; + } + + add_animsound(var_02); +} + +//Function Number: 42 +animsound_start_tracker_loop(param_00,param_01,param_02) +{ + add_to_animsound(); + param_00 = param_01 + param_00; + var_03 = spawnstruct(); + var_03.anime = param_00; + var_03.notetrack = "#" + param_00; + var_03.animname = param_02; + var_03.end_time = gettime() + -5536; + if(animsound_exists(param_00,var_03.notetrack)) + { + return; + } + + add_animsound(var_03); +} + +//Function Number: 43 +notetrack_wait(param_00,param_01,param_02,param_03,param_04) +{ + param_00 endon("stop_sequencing_notetracks"); + param_00 endon("death"); + if(isdefined(param_02)) + { + var_05 = param_02; + } + else + { + var_05 = self; + } + + var_06 = undefined; + if(isdefined(param_04)) + { + var_06 = param_04; + } + else + { + var_06 = param_00.animname; + } + + var_07 = spawnstruct(); + var_07.dialog = []; + var_08 = []; + if(isdefined(var_06) && isdefined(level.scr_notetrack[var_06])) + { + if(isdefined(level.scr_notetrack[var_06][param_03])) + { + } + + if(isdefined(level.scr_notetrack[var_07]["any"])) + { + } + } + + foreach(var_11, var_0A in var_7B) + { + foreach(var_0C in level.scr_notetrack[var_07][var_11]) + { + foreach(var_0E in var_0C) + { + if(isdefined(var_0E["dialog"])) + { + var_08.dialog[var_0E["dialog"]] = 1; + } + } + } + } + + for(;;) + { + var_08.dialoguenotetrack = 0; + var_12 = undefined; + param_01 waittill(level.scr_notetrack[var_06][param_03],var_7B[param_03],level.scr_notetrack[var_07]["any"],var_7B["any"],param_02,var_12); + if(var_12 == "end") + { + return; + } + + foreach(var_11, var_0A in var_7B) + { + if(isdefined(level.scr_notetrack[var_07][var_11][var_12])) + { + foreach(var_0E in level.scr_notetrack[var_07][var_11][var_12]) + { + anim_handle_notetrack(var_0E,param_01,var_08,var_06); + } + } + } + + var_16 = getsubstr(var_12,0,3); + if(var_16 == "ps_") + { + var_17 = getsubstr(var_12,3); + if(var_17 == "dubai_elevse_yuri_remove_plr_armor") + { + } + + param_01 thread maps\_utility::play_sound_on_tag(var_17,undefined,1); + continue; + } + + if(var_16 == "psm") + { + var_18 = getsubstr(var_12,4); + maps\_audio::aud_send_msg(var_18,param_01); + continue; + } + + var_16 = getsubstr(var_12,0,4); + if(var_16 == "psr_") + { + var_17 = getsubstr(var_12,4); + maps\_utility::radio_dialogue(var_17); + continue; + } + + switch(var_12) + { + case "ignoreall true": + self.ignoreall = 1; + break; + + case "ignoreall false": + self.ignoreall = 0; + break; + + case "ignoreme true": + self.ignoreme = 1; + break; + + case "ignoreme false": + self.ignoreme = 0; + break; + + case "allowdeath true": + self.allowdeath = 1; + break; + + case "allowdeath false": + self.allowdeath = 0; + break; + } + } +} + +//Function Number: 44 +anim_handle_notetrack(param_00,param_01,param_02,param_03) +{ + if(isdefined(param_00["function"])) + { + self thread [[ param_00["function"] ]](param_01); + } + + if(isdefined(param_00["flag"])) + { + common_scripts\utility::flag_set(param_00["flag"]); + } + + if(isdefined(param_00["flag_clear"])) + { + common_scripts\utility::flag_clear(param_00["flag_clear"]); + } + + if(isdefined(param_00["attach gun left"])) + { + param_01 gun_pickup_left(); + return; + } + + if(isdefined(param_00["attach gun right"])) + { + param_01 gun_pickup_right(); + return; + } + + if(isdefined(param_00["detach gun"])) + { + param_01 gun_leave_behind(param_00); + return; + } + + if(isdefined(param_00["attach model"])) + { + if(isdefined(param_00["selftag"])) + { + param_01 attach(param_00["attach model"],param_00["selftag"]); + } + else + { + param_03 attach(param_00["attach model"],param_00["tag"]); + } + + return; + } + + if(isdefined(param_00["detach model"])) + { + waittillframeend; + if(isdefined(param_00["selftag"])) + { + param_01 detach(param_00["detach model"],param_00["selftag"]); + } + else + { + param_03 detach(param_00["detach model"],param_00["tag"]); + } + } + + if(isdefined(param_00["sound"])) + { + param_01 thread maps\_utility::play_sound_on_tag(param_00["sound"],undefined,1); + } + + if(!param_02.dialoguenotetrack) + { + if(isdefined(param_00["dialog"]) && isdefined(param_02.dialog[param_00["dialog"]])) + { + param_01 animscripts/face::func_C46(undefined,param_00["dialog"],1); + param_02.dialog[param_00["dialog"]] = undefined; + param_02.dialoguenotetrack = 1; + } + } + + if(isdefined(param_00["create model"])) + { + anim_addmodel(param_01,param_00); + } + else if(isdefined(param_00["delete model"])) + { + anim_removemodel(param_01,param_00); + } + + if(isdefined(param_00["selftag"])) + { + if(isdefined(param_00["effect"])) + { + playfxontag(level._effect[param_00["effect"]],param_01,param_00["selftag"]); + } + + if(isdefined(param_00["stop_effect"])) + { + stopfxontag(level._effect[param_00["stop_effect"]],param_01,param_00["selftag"]); + } + } + + if(isdefined(param_00["tag"]) && isdefined(param_00["effect"])) + { + playfxontag(level._effect[param_00["effect"]],param_03,param_00["tag"]); + } + + if(isdefined(param_00["selftag"]) && isdefined(param_00["effect_looped"])) + { + playfxontag(level._effect[param_00["effect_looped"]],param_01,param_00["selftag"]); + } +} + +//Function Number: 45 +anim_addmodel(param_00,param_01) +{ + if(!isdefined(param_00.scriptmodel)) + { + param_00.scriptmodel = []; + } + + var_02 = param_00.scriptmodel.size; + param_00.scriptmodel[var_02] = spawn("script_model",(0,0,0)); + param_00.scriptmodel[var_02] setmodel(param_01["create model"]); + param_00.scriptmodel[var_02].origin = param_00 gettagorigin(param_01["selftag"]); + param_00.scriptmodel[var_02].angles = param_00 gettagangles(param_01["selftag"]); +} + +//Function Number: 46 +anim_removemodel(param_00,param_01) +{ + for(var_02 = 0;var_02 < param_00.scriptmodel.size;var_02++) + { + if(isdefined(param_01["explosion"])) + { + var_03 = anglestoforward(param_00.scriptmodel[var_02].angles); + var_03 = var_03 * 120; + var_03 = var_03 + param_00.scriptmodel[var_02].origin; + playfx(level._effect[param_01["explosion"]],param_00.scriptmodel[var_02].origin); + radiusdamage(param_00.scriptmodel[var_02].origin,350,700,50); + } + + param_00.scriptmodel[var_02] delete(); + } +} + +//Function Number: 47 +gun_pickup_left() +{ + if(!isdefined(self.gun_on_ground)) + { + return; + } + + self.gun_on_ground delete(); + self.dropweapon = 1; + animscripts/shared::func_C9B(self.weapon,"left"); +} + +//Function Number: 48 +gun_pickup_right() +{ + if(!isdefined(self.gun_on_ground)) + { + return; + } + + self.gun_on_ground delete(); + self.dropweapon = 1; + animscripts/shared::func_C9B(self.weapon,"right"); +} + +//Function Number: 49 +gun_leave_behind(param_00) +{ + if(isdefined(self.gun_on_ground)) + { + return; + } + + var_01 = self gettagorigin(param_00["tag"]); + var_02 = self gettagangles(param_00["tag"]); + var_03 = 0; + if(isdefined(param_00["suspend"])) + { + var_03 = param_00["suspend"]; + } + + var_04 = spawn("weapon_" + self.weapon,var_01,var_03); + var_04.angles = var_02; + self.gun_on_ground = var_04; + animscripts/shared::func_C9B(self.weapon,"none"); + self.dropweapon = 0; +} + +//Function Number: 50 +anim_weight(param_00,param_01) +{ + var_02 = level.scr_anim[param_00][param_01].size; + var_03 = randomint(var_02); + if(var_02 > 1) + { + var_04 = 0; + var_05 = 0; + for(var_06 = 0;var_06 < var_02;var_06++) + { + if(isdefined(level.scr_anim[param_00][param_01 + "weight"])) + { + if(isdefined(level.scr_anim[param_00][param_01 + "weight"][var_06])) + { + var_04++; + var_05 = var_05 + level.scr_anim[param_00][param_01 + "weight"][var_06]; + } + } + } + + if(var_04 == var_02) + { + var_07 = randomfloat(var_05); + var_05 = 0; + for(var_06 = 0;var_06 < var_02;var_06++) + { + var_05 = var_05 + level.scr_anim[param_00][param_01 + "weight"][var_06]; + if(var_07 < var_05) + { + var_03 = var_06; + break; + } + } + } + } + + return var_03; +} + +//Function Number: 51 +anim_reach_and_idle(param_00,param_01,param_02,param_03,param_04) +{ + thread anim_reach(param_00,param_01,param_04); + var_05 = spawnstruct(); + var_05.reachers = 0; + foreach(var_07 in param_00) + { + var_05.reachers++; + thread idle_on_reach(var_07,param_02,param_03,param_04,var_05); + } + + for(;;) + { + var_05 waittill("reached_position"); + if(var_05.reachers <= 0) + { + return; + } + } +} + +//Function Number: 52 +wait_for_guy_to_die_or_get_in_position() +{ + self endon("death"); + self waittill("anim_reach_complete"); +} + +//Function Number: 53 +idle_on_reach(param_00,param_01,param_02,param_03,param_04) +{ + param_00 wait_for_guy_to_die_or_get_in_position(); + param_04.reachers--; + param_04 notify("reached_position"); + if(isalive(param_00)) + { + anim_loop_solo(param_00,param_01,param_02,param_03); + } +} + +//Function Number: 54 +get_anim_position(param_00) +{ + var_01 = undefined; + var_02 = undefined; + if(isdefined(param_00)) + { + var_01 = self gettagorigin(param_00); + var_02 = self gettagangles(param_00); + } + else + { + var_01 = self.origin; + var_02 = self.angles; + } + + var_03 = []; + return var_7B; +} + +//Function Number: 55 +anim_reach_together(param_00,param_01,param_02,param_03) +{ + thread modify_moveplaybackrate_together(param_00); + anim_reach_with_funcs(param_00,param_01,param_02,param_03,::reach_with_standard_adjustments_begin,::reach_with_standard_adjustments_end); +} + +//Function Number: 56 +modify_moveplaybackrate_together(param_00) +{ + var_01 = 0.3; + waittillframeend; + for(;;) + { + param_00 = maps\_utility::remove_dead_from_array(param_00); + var_02 = []; + var_03 = 0; + foreach(var_08, var_05 in param_00) + { + var_06 = var_05.goalpos; + if(isdefined(var_05.reach_goal_pos)) + { + var_06 = var_05.reach_goal_pos; + } + + var_07 = distance(var_05.origin,var_06); + var_02[var_05.unique_id] = var_07; + if(var_07 <= 4) + { + param_00[var_08] = undefined; + continue; + } + + var_03 = var_03 + var_07; + } + + if(param_00.size <= 1) + { + break; + } + + var_03 = var_03 / param_00.size; + foreach(var_05 in param_00) + { + var_0A = var_02[var_05.unique_id] - var_03; + var_0B = var_0A * 0.003; + if(var_0B > var_01) + { + var_0B = var_01; + } + else if(var_0B < var_01 * -1) + { + var_0B = var_01 * -1; + } + + var_05.moveplaybackrate = 1 + var_0B; + } + + wait 0.05; + } + + foreach(var_05 in param_00) + { + if(isalive(var_05)) + { + var_05.moveplaybackrate = 1; + } + } +} + +//Function Number: 57 +anim_reach(param_00,param_01,param_02,param_03) +{ + anim_reach_with_funcs(param_00,param_01,param_02,param_03,::reach_with_standard_adjustments_begin,::reach_with_standard_adjustments_end); +} + +//Function Number: 58 +anim_reach_with_funcs(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + var_07 = get_anim_position(param_02); + var_08 = var_07["origin"]; + var_09 = var_07["angles"]; + if(isdefined(param_06)) + { + self.type = param_06; + self.arrivalstance = "stand"; + } + + var_0A = spawnstruct(); + var_0B = 0; + var_0C = 0; + foreach(var_0E in param_00) + { + if(isdefined(param_06)) + { + var_0E.scriptedarrivalent = self; + } + + if(isdefined(param_03)) + { + var_0F = param_03; + } + else + { + var_0F = var_0E.animname; + } + + if(isdefined(level.scr_anim[var_0F][param_01])) + { + if(isarray(level.scr_anim[var_0F][param_01])) + { + var_10 = getstartorigin(var_08,var_09,level.scr_anim[var_0F][param_01][0]); + } + else + { + var_10 = getstartorigin(var_08,var_09,level.scr_anim[var_0F][param_01]); + } + } + else + { + var_10 = var_08; + } + + var_0C++; + var_0E thread begin_anim_reach(var_0A,var_10,param_04,param_05); + } + + while(var_0C) + { + var_0A waittill("reach_notify"); + var_0C--; + } + + foreach(var_0E in param_00) + { + if(!isalive(var_0E)) + { + continue; + } + + var_0E.goalradius = var_0E.oldgoalradius; + var_0E.scriptedarrivalent = undefined; + var_0E.stopanimdistsq = 0; + } + + if(isdefined(param_06)) + { + self.type = undefined; + } +} + +//Function Number: 59 +anim_teleport(param_00,param_01,param_02) +{ + var_03 = get_anim_position(param_02); + var_04 = var_03["origin"]; + var_05 = var_03["angles"]; + foreach(var_07 in param_00) + { + var_08 = getstartorigin(var_04,var_05,level.scr_anim[var_07.animname][param_01]); + var_09 = getstartangles(var_04,var_05,level.scr_anim[var_07.animname][param_01]); + if(isai(var_07)) + { + var_07 teleport(var_08); + continue; + } + + var_07.origin = var_08; + var_07.angles = var_09; + } +} + +//Function Number: 60 +anim_moveto(param_00,param_01,param_02,param_03,param_04,param_05) +{ + var_06 = get_anim_position(param_02); + var_07 = var_06["origin"]; + var_08 = var_06["angles"]; + foreach(var_0A in param_00) + { + var_0B = getstartorigin(var_07,var_08,level.scr_anim[var_0A.animname][param_01]); + var_0C = getstartangles(var_07,var_08,level.scr_anim[var_0A.animname][param_01]); + if(isai(var_0A)) + { + continue; + } + + var_0A moveto(var_0B,param_03,param_04,param_05); + var_0A rotateto(var_0C,param_03,param_04,param_05); + } +} + +//Function Number: 61 +anim_generic_teleport(param_00,param_01,param_02) +{ + var_03 = get_anim_position(param_02); + var_04 = var_03["origin"]; + var_05 = var_03["angles"]; + var_06 = getstartorigin(var_04,var_05,level.scr_anim["generic"][param_01]); + var_07 = getstartangles(var_04,var_05,level.scr_anim["generic"][param_01]); + if(isai(param_00)) + { + param_00 teleport(var_06); + return; + } + + param_00.origin = var_06; + param_00.angles = var_07; +} + +//Function Number: 62 +anim_spawn_generic_model(param_00,param_01,param_02) +{ + return anim_spawn_model(param_00,"generic",param_01,param_02); +} + +//Function Number: 63 +anim_spawn_model(param_00,param_01,param_02,param_03) +{ + var_04 = get_anim_position(param_03); + var_05 = var_04["origin"]; + var_06 = var_04["angles"]; + var_07 = getstartorigin(var_05,var_06,level.scr_anim[param_01][param_02]); + var_08 = getstartorigin(var_05,var_06,level.scr_anim[param_01][param_02]); + var_09 = spawn("script_model",var_07); + var_09 setmodel(param_00); + var_09.angles = var_08; + return var_09; +} + +//Function Number: 64 +anim_spawn_tag_model(param_00,param_01) +{ + self attach(param_00,param_01); +} + +//Function Number: 65 +anim_link_tag_model(param_00,param_01) +{ + var_02 = self gettagorigin(param_01); + var_03 = spawn("script_model",var_02); + var_03 setmodel(param_00); + var_03 linkto(self,param_01,(0,0,0),(0,0,0)); + return var_03; +} + +//Function Number: 66 +anim_spawner_teleport(param_00,param_01,param_02) +{ + var_03 = get_anim_position(param_02); + var_04 = var_03["origin"]; + var_05 = var_03["angles"]; + var_06 = spawnstruct(); + foreach(var_08 in param_00) + { + var_09 = getstartorigin(var_04,var_05,level.scr_anim[var_08.animname][param_01]); + var_08.origin = var_09; + } +} + +//Function Number: 67 +reach_death_notify(param_00) +{ + common_scripts\utility::waittill_either("death","goal"); + param_00 notify("reach_notify"); +} + +//Function Number: 68 +begin_anim_reach(param_00,param_01,param_02,param_03) +{ + self endon("death"); + self endon("new_anim_reach"); + thread reach_death_notify(param_00); + param_01 = [[ param_02 ]](param_01); + maps\_utility::set_goal_pos(param_01); + self.reach_goal_pos = param_01; + self.goalradius = 0; + self.stopanimdistsq = squared(64); + self waittill("goal"); + self notify("anim_reach_complete"); + [[ param_03 ]](); + self notify("new_anim_reach"); +} + +//Function Number: 69 +reach_with_standard_adjustments_begin(param_00) +{ + self.oldgoalradius = self.goalradius; + self.oldpathenemyfightdist = self.pathenemyfightdist; + self.oldpathenemylookahead = self.pathenemylookahead; + self.pathenemyfightdist = 128; + self.pathenemylookahead = 128; + maps\_utility::disable_ai_color(); + anim_changes_pushplayer(1); + self.nododgemove = 1; + self.fixednodewason = self.fixednode; + self.fixednode = 0; + if(!isdefined(self.scriptedarrivalent)) + { + self.old_disablearrivals = self.disablearrivals; + self.disablearrivals = 1; + } + + self.reach_goal_pos = undefined; + return param_00; +} + +//Function Number: 70 +reach_with_standard_adjustments_end() +{ + anim_changes_pushplayer(0); + self.nododgemove = 0; + self.fixednode = self.fixednodewason; + self.fixednodewason = undefined; + self.pathenemyfightdist = self.oldpathenemyfightdist; + self.pathenemylookahead = self.oldpathenemylookahead; + self.disablearrivals = self.old_disablearrivals; +} + +//Function Number: 71 +anim_changes_pushplayer(param_00) +{ + if(isdefined(self.dontchangepushplayer)) + { + return; + } + + self pushplayer(param_00); +} + +//Function Number: 72 +reach_with_arrivals_begin(param_00) +{ + param_00 = reach_with_standard_adjustments_begin(param_00); + self.disablearrivals = 0; + return param_00; +} + +//Function Number: 73 +reach_with_planting(param_00) +{ + var_01 = self getdroptofloorposition(param_00); + param_00 = var_01; + param_00 = reach_with_standard_adjustments_begin(param_00); + self.disablearrivals = 1; + return param_00; +} + +//Function Number: 74 +reach_with_planting_and_arrivals(param_00) +{ + var_01 = self getdroptofloorposition(param_00); + param_00 = var_01; + param_00 = reach_with_standard_adjustments_begin(param_00); + self.disablearrivals = 0; + return param_00; +} + +//Function Number: 75 +setanimtree() +{ + self useanimtree(level.max_number_of_dead_bodies[self.animname]); +} + +//Function Number: 76 +anim_single_solo(param_00,param_01,param_02,param_03,param_04) +{ + self endon("death"); + var_05[0] = param_00; + if(!isdefined(param_03)) + { + param_03 = 0; + } + + anim_single(var_05,param_01,param_02,param_03,param_04); +} + +//Function Number: 77 +anim_single_solo_run(param_00,param_01,param_02) +{ + self endon("death"); + var_03[0] = param_00; + anim_single(var_03,param_01,param_02,0.25); +} + +//Function Number: 78 +anim_single_run_solo(param_00,param_01,param_02,param_03) +{ + self endon("death"); + var_04[0] = param_00; + anim_single(var_04,param_01,param_02,0.25); +} + +//Function Number: 79 +anim_reach_and_idle_solo(param_00,param_01,param_02,param_03,param_04) +{ + self endon("death"); + var_05[0] = param_00; + anim_reach_and_idle(var_05,param_01,param_02,param_03,param_04); +} + +//Function Number: 80 +anim_reach_solo(param_00,param_01,param_02) +{ + self endon("death"); + var_03[0] = param_00; + anim_reach(var_03,param_01,param_02); +} + +//Function Number: 81 +anim_reach_and_approach_solo(param_00,param_01,param_02,param_03) +{ + self endon("death"); + var_04[0] = param_00; + anim_reach_and_approach(var_04,param_01,param_02,param_03); +} + +//Function Number: 82 +anim_reach_and_approach_node_solo(param_00,param_01,param_02) +{ + self endon("death"); + var_03[0] = param_00; + var_04 = spawn("script_origin",self.origin); + var_04.type = self.type; + var_04.angles = self.angles; + var_04.arrivalstance = self gethighestnodestance(); + param_00.scriptedarrivalent = var_04; + anim_reach_and_approach(var_03,param_01,param_02); + param_00.scriptedarrivalent = undefined; + var_04 delete(); + while(param_00.a.movement != "stop") + { + wait 0.05; + } +} + +//Function Number: 83 +anim_reach_and_approach(param_00,param_01,param_02,param_03) +{ + self endon("death"); + anim_reach_with_funcs(param_00,param_01,param_02,undefined,::reach_with_arrivals_begin,::reach_with_standard_adjustments_end,param_03); +} + +//Function Number: 84 +anim_loop_solo(param_00,param_01,param_02,param_03) +{ + self endon("death"); + param_00 endon("death"); + var_04[0] = param_00; + anim_loop(var_04,param_01,param_02,param_03); +} + +//Function Number: 85 +anim_teleport_solo(param_00,param_01,param_02) +{ + self endon("death"); + var_03[0] = param_00; + anim_teleport(var_03,param_01,param_02); +} + +//Function Number: 86 +add_animation(param_00,param_01) +{ + if(!isdefined(level.completedanims)) + { + level.completedanims[param_00][0] = param_01; + return; + } + + if(!isdefined(level.completedanims[param_00])) + { + level.completedanims[param_00][0] = param_01; + return; + } + + for(var_02 = 0;var_02 < level.completedanims[param_00].size;var_02++) + { + if(level.completedanims[param_00][var_02] == param_01) + { + return; + } + } + + level.completedanims[param_00][level.completedanims[param_00].size] = param_01; +} + +//Function Number: 87 +anim_single_queue(param_00,param_01,param_02,param_03) +{ + if(!isdefined(param_03)) + { + param_03 = 0; + } + + if(isdefined(param_00.last_queue_time)) + { + maps\_utility::wait_for_buffer_time_to_pass(param_00.last_queue_time,0.5); + } + + maps\_utility::function_stack(::anim_single_solo,param_00,param_01,param_02,param_03); + if(isalive(param_00)) + { + param_00.last_queue_time = gettime(); + } +} + +//Function Number: 88 +anim_generic_queue(param_00,param_01,param_02,param_03,param_04) +{ + param_00 endon("death"); + if(!isdefined(param_03)) + { + param_03 = 0; + } + + if(isdefined(param_00.last_queue_time)) + { + maps\_utility::wait_for_buffer_time_to_pass(param_00.last_queue_time,0.5); + } + + if(isdefined(param_04)) + { + maps\_utility::function_stack_timeout(param_04,::anim_single_solo,param_00,param_01,param_02,param_03,"generic"); + } + else + { + maps\_utility::function_stack(::anim_single_solo,param_00,param_01,param_02,param_03,"generic"); + } + + if(isalive(param_00)) + { + param_00.last_queue_time = gettime(); + } +} + +//Function Number: 89 +anim_dontpushplayer(param_00) +{ + foreach(var_02 in param_00) + { + var_02 pushplayer(0); + } +} + +//Function Number: 90 +anim_pushplayer(param_00) +{ + foreach(var_02 in param_00) + { + var_02 pushplayer(1); + } +} + +//Function Number: 91 +addnotetrack_dialogue(param_00,param_01,param_02,param_03) +{ + param_01 = tolower(param_01); + param_02 = get_generic_anime(param_02); + var_04 = add_notetrack_and_get_index(param_00,param_01,param_02); + level.scr_notetrack[param_00][param_02][param_01][var_04] = []; + level.scr_notetrack[param_00][param_02][param_01][var_04]["dialog"] = param_03; +} + +//Function Number: 92 +add_notetrack_and_get_index(param_00,param_01,param_02) +{ + param_01 = tolower(param_01); + add_notetrack_array(param_00,param_01,param_02); + return level.scr_notetrack[param_00][param_02][param_01].size; +} + +//Function Number: 93 +add_notetrack_array(param_00,param_01,param_02) +{ + param_01 = tolower(param_01); + if(!isdefined(level.scr_notetrack)) + { + level.scr_notetrack = []; + } + + if(!isdefined(level.scr_notetrack[param_00])) + { + level.scr_notetrack[param_00] = []; + } + + if(!isdefined(level.scr_notetrack[param_00][param_02])) + { + level.scr_notetrack[param_00][param_02] = []; + } + + if(!isdefined(level.scr_notetrack[param_00][param_02][param_01])) + { + level.scr_notetrack[param_00][param_02][param_01] = []; + } +} + +//Function Number: 94 +addnotetrack_sound(param_00,param_01,param_02,param_03) +{ + param_01 = tolower(param_01); + param_02 = get_generic_anime(param_02); + var_04 = add_notetrack_and_get_index(param_00,param_01,param_02); + level.scr_notetrack[param_00][param_02][param_01][var_04] = []; + level.scr_notetrack[param_00][param_02][param_01][var_04]["sound"] = param_03; +} + +//Function Number: 95 +get_generic_anime(param_00) +{ + if(!isdefined(param_00)) + { + return "any"; + } + + return param_00; +} + +//Function Number: 96 +addonstart_animsound(param_00,param_01,param_02) +{ + if(!isdefined(level.scr_animsound[param_00])) + { + level.scr_animsound[param_00] = []; + } + + level.scr_animsound[param_00][param_01] = param_02; +} + +//Function Number: 97 +addnotetrack_animsound(param_00,param_01,param_02,param_03) +{ + param_02 = tolower(param_02); + param_01 = get_generic_anime(param_01); + var_04 = add_notetrack_and_get_index(param_00,param_02,param_01); + var_05 = []; + level.scr_notetrack[param_01][param_02][param_03][var_05] = var_7B; +} + +//Function Number: 98 +addnotetrack_attach(param_00,param_01,param_02,param_03,param_04) +{ + param_01 = tolower(param_01); + param_04 = get_generic_anime(param_04); + var_05 = add_notetrack_and_get_index(param_00,param_01,param_04); + var_06 = []; + level.scr_notetrack[param_01][var_05][param_02][var_06] = var_7B; +} + +//Function Number: 99 +addnotetrack_detach(param_00,param_01,param_02,param_03,param_04) +{ + param_01 = tolower(param_01); + param_04 = get_generic_anime(param_04); + var_05 = add_notetrack_and_get_index(param_00,param_01,param_04); + var_06 = []; + level.scr_notetrack[param_01][var_05][param_02][var_06] = var_7B; +} + +//Function Number: 100 +addnotetrack_detach_gun(param_00,param_01,param_02,param_03) +{ + param_01 = tolower(param_01); + param_02 = get_generic_anime(param_02); + var_04 = add_notetrack_and_get_index(param_00,param_01,param_02); + var_05 = []; + if(isdefined(var_04)) + { + } + + level.scr_notetrack[param_01][param_03][param_02][var_05] = var_7B; +} + +//Function Number: 101 +addnotetrack_customfunction(param_00,param_01,param_02,param_03) +{ + param_01 = tolower(param_01); + param_03 = get_generic_anime(param_03); + var_04 = add_notetrack_and_get_index(param_00,param_01,param_03); + var_05 = []; + level.scr_notetrack[param_01][var_04][param_02][var_05] = var_7B; +} + +//Function Number: 102 +addnotetrack_startfxontag(param_00,param_01,param_02,param_03,param_04) +{ + common_scripts\utility::getfx(param_03); + param_01 = tolower(param_01); + param_02 = get_generic_anime(param_02); + var_05 = add_notetrack_and_get_index(param_00,param_01,param_02); + var_06 = []; + level.scr_notetrack[param_01][param_03][param_02][var_06] = var_7B; +} + +//Function Number: 103 +addnotetrack_stopfxontag(param_00,param_01,param_02,param_03,param_04) +{ + common_scripts\utility::getfx(param_03); + param_01 = tolower(param_01); + param_02 = get_generic_anime(param_02); + var_05 = add_notetrack_and_get_index(param_00,param_01,param_02); + var_06 = []; + level.scr_notetrack[param_01][param_03][param_02][var_06] = var_7B; +} + +//Function Number: 104 +addnotetrack_flag(param_00,param_01,param_02,param_03) +{ + param_01 = tolower(param_01); + param_03 = get_generic_anime(param_03); + var_04 = add_notetrack_and_get_index(param_00,param_01,param_03); + var_05 = []; + level.scr_notetrack[param_01][var_04][param_02][var_05] = var_7B; + if(!isdefined(level.flag) || !isdefined(level.flag[param_03])) + { + common_scripts\utility::flag_init(param_03); + } +} + +//Function Number: 105 +addnotetrack_flag_clear(param_00,param_01,param_02,param_03) +{ + param_01 = tolower(param_01); + param_03 = get_generic_anime(param_03); + var_04 = add_notetrack_and_get_index(param_00,param_01,param_03); + var_05 = []; + level.scr_notetrack[param_01][var_04][param_02][var_05] = var_7B; + if(!isdefined(level.flag) || !isdefined(level.flag[param_03])) + { + common_scripts\utility::flag_init(param_03); + } +} + +//Function Number: 106 +anim_facialanim(param_00,param_01,param_02) +{ + param_00 endon("death"); + self endon(param_01); + var_03 = 0.05; + param_00 notify("newLookTarget"); + waittillframeend; + param_00 setanim(%scripted_talking,5,0.2); + param_00 setflaggedanimknobrestart("face_done_" + param_01,param_02,1,0,1); + thread force_face_anim_to_play(param_00,param_01,param_02); + thread clearfaceanimonanimdone(param_00,"face_done_" + param_01,param_01); +} + +//Function Number: 107 +force_face_anim_to_play(param_00,param_01,param_02) +{ + param_00 endon("death"); + param_00 endon("stop_loop"); + self endon(param_01); + for(;;) + { + param_00 setanim(%scripted_talking,5,0.4); + param_00 setflaggedanimknoblimited("face_done_" + param_01,param_02,1,0,1); + wait 0.05; + } +} + +//Function Number: 108 +anim_facialfiller(param_00,param_01) +{ + self endon("death"); + var_02 = 0.05; + self notify("newLookTarget"); + self endon("newLookTarget"); + waittillframeend; + if(!isdefined(param_01) && isdefined(self.looktarget)) + { + param_01 = self.looktarget; + } + + var_03 = %generic_talker_allies; + if(self isbadguy()) + { + var_03 = %generic_talker_axis; + } + + self setanimknoblimitedrestart(var_03,1,0,1); + self setanim(%scripted_talking,5,0.4); + set_talker_until_msg(param_00,var_03); + var_02 = 0.3; + self clearanim(%scripted_talking,0.2); +} + +//Function Number: 109 +set_talker_until_msg(param_00,param_01) +{ + self endon(param_00); + for(;;) + { + wait 0.2; + self setanimknoblimited(param_01,1,0,1); + self setanim(%scripted_talking,5,0.4); + } +} + +//Function Number: 110 +talk_for_time(param_00) +{ + self endon("death"); + var_01 = %generic_talker_allies; + if(self isbadguy()) + { + var_01 = %generic_talker_axis; + } + + self setanimknoblimitedrestart(var_01,1,0,1); + self setanim(%scripted_talking,5,0.4); + wait param_00; + var_02 = 0.3; + self clearanim(%scripted_talking,0.2); +} + +//Function Number: 111 +getyawangles(param_00,param_01) +{ + var_02 = param_00[1] - param_01[1]; + var_02 = angleclamp180(var_02); + return var_02; +} + +//Function Number: 112 +lookline(param_00,param_01) +{ + self notify("lookline"); + self endon("lookline"); + self endon(param_01); + self endon("death"); + wait 0.05; +} + +//Function Number: 113 +anim_reach_idle(param_00,param_01,param_02) +{ + var_03 = spawnstruct(); + var_03.count = param_00.size; + foreach(var_05 in param_00) + { + thread reachidle(var_05,param_01,param_02,var_03); + } + + while(var_03.count) + { + var_03 waittill("reached_goal"); + } + + self notify("stopReachIdle"); +} + +//Function Number: 114 +reachidle(param_00,param_01,param_02,param_03) +{ + anim_reach_solo(param_00,param_01); + param_03.count--; + param_03 notify("reached_goal"); + if(param_03.count > 0) + { + anim_loop_solo(param_00,param_02,"stopReachIdle"); + } +} + +//Function Number: 115 +delayeddialogue(param_00,param_01,param_02,param_03) +{ + if(animhasnotetrack(param_03,"dialog")) + { + self waittillmatch("dialog","face_done_" + param_00); + } + + if(param_01) + { + animscripts/face::func_C46(undefined,param_02,1); + return; + } + + animscripts/face::func_C46(undefined,param_02,1,"single dialogue"); +} + +//Function Number: 116 +clearfaceanimonanimdone(param_00,param_01,param_02) +{ + param_00 endon("death"); + param_00 waittillmatch("end",param_01); + var_03 = 0.3; + param_00 clearanim(%scripted_talking,0.2); +} + +//Function Number: 117 +anim_start_pos(param_00,param_01,param_02) +{ + var_03 = get_anim_position(param_02); + var_04 = var_03["origin"]; + var_05 = var_03["angles"]; + common_scripts\utility::array_thread(param_00,::set_start_pos,param_01,var_04,var_05); +} + +//Function Number: 118 +anim_start_pos_solo(param_00,param_01,param_02) +{ + var_03[0] = param_00; + anim_start_pos(var_03,param_01,param_02); +} + +//Function Number: 119 +set_start_pos(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = undefined; + if(isdefined(param_03)) + { + var_05 = param_03; + } + else + { + var_05 = self.animname; + } + + if(isdefined(param_04) && param_04) + { + var_06 = level.scr_anim[var_05][param_00][0]; + } + else + { + var_06 = level.scr_anim[var_06][param_01]; + } + + if(isai(self)) + { + var_07 = getstartorigin(param_01,param_02,var_06); + var_08 = getstartangles(param_01,param_02,var_06); + if(isdefined(self.anim_start_at_groundpos)) + { + var_07 = maps\_utility::groundpos(var_07); + } + + self forceteleport(var_07,var_08); + return; + } + + if(self.code_classname == "script_vehicle") + { + self vehicle_teleport(getstartorigin(param_01,param_02,var_06),getstartangles(param_01,param_02,var_06)); + return; + } + + self.origin = getstartorigin(param_01,param_02,var_06); + self.angles = getstartangles(param_01,param_02,var_06); +} + +//Function Number: 120 +anim_at_self(param_00,param_01) +{ + var_02 = []; + return var_7B; +} + +//Function Number: 121 +anim_at_entity(param_00,param_01) +{ + var_02 = []; + return var_7B; +} + +//Function Number: 122 +add_to_animsound() +{ + if(!isdefined(self.animsounds)) + { + self.animsounds = []; + } + + var_00 = 0; + for(var_01 = 0;var_01 < level.animsounds.size;var_01++) + { + if(self == level.animsounds[var_01]) + { + var_00 = 1; + break; + } + } + + if(!var_00) + { + level.animsounds[level.animsounds.size] = self; + } +} + +//Function Number: 123 +anim_set_rate_single(param_00,param_01,param_02) +{ + param_00 thread anim_set_rate_internal(param_01,param_02); +} + +//Function Number: 124 +anim_set_rate(param_00,param_01,param_02) +{ + common_scripts\utility::array_thread(param_00,::anim_set_rate_internal,param_01,param_02); +} + +//Function Number: 125 +anim_set_rate_internal(param_00,param_01,param_02) +{ + var_03 = undefined; + if(isdefined(param_02)) + { + var_03 = param_02; + } + else + { + var_03 = self.animname; + } + + self setflaggedanim("single anim",maps\_utility::getanim_from_animname(param_00,var_03),1,0,param_01); +} + +//Function Number: 126 +anim_set_time(param_00,param_01,param_02) +{ + common_scripts\utility::array_thread(param_00,::anim_self_set_time,param_01,param_02); +} + +//Function Number: 127 +anim_self_set_time(param_00,param_01) +{ + var_02 = maps\_utility::getanim(param_00); + self setanimtime(var_02,param_01); +} + +//Function Number: 128 +last_anim_time_check() +{ + if(!isdefined(self.last_anim_time)) + { + self.last_anim_time = gettime(); + return; + } + + var_00 = gettime(); + if(self.last_anim_time == var_00) + { + self endon("death"); + wait 0.05; + } + + self.last_anim_time = var_00; +} + +//Function Number: 129 +set_custom_move_start_transition(param_00,param_01) +{ + param_00.custommovetransition = ::animscripts/cover_arrival::func_119C; + param_00.startmovetransitionanim = level.scr_anim[param_00.animname][param_01]; +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_animatedmodels.gsc b/MW3/PC/SP/maps/_animatedmodels.gsc new file mode 100644 index 0000000..72462f9 --- /dev/null +++ b/MW3/PC/SP/maps/_animatedmodels.gsc @@ -0,0 +1 @@ +Failed to decompile this file, open a ticket if you need this fixed. \ No newline at end of file diff --git a/MW3/PC/SP/maps/_arcademode.gsc b/MW3/PC/SP/maps/_arcademode.gsc new file mode 100644 index 0000000..1e732cb --- /dev/null +++ b/MW3/PC/SP/maps/_arcademode.gsc @@ -0,0 +1,1998 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_arcademode.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 63 + * Decompile Time: 1079 ms + * Timestamp: 10/27/2023 2:22:08 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + precachestring(&"SCRIPT_COLON"); + precachestring(&"SCRIPT_TIME_REMAINING"); + precachestring(&"SCRIPT_TOTAL_SCORE"); + precachestring(&"SCRIPT_EXTRA_LIFE"); + precachestring(&"SCRIPT_CHECKPOINT"); + precachestring(&"SCRIPT_MISSION_SCORE"); + precachestring(&"SCRIPT_ZERO_DEATHS"); + precachestring(&"SCRIPT_PLUS"); + precachestring(&"SCRIPT_TIME_UP"); + precachestring(&"SCRIPT_1UP"); + precachestring(&"SCRIPT_GAME_OVER"); + precachestring(&"SCRIPT_DIFFICULTY_BONUS_ONEANDAHALF"); + precachestring(&"SCRIPT_DIFFICULTY_BONUS_THREE"); + precachestring(&"SCRIPT_DIFFICULTY_BONUS_FOUR"); + precachestring(&"SCRIPT_MISSION_COMPLETE"); + precachestring(&"SCRIPT_NEW_HIGH_SCORE"); + precachestring(&"SCRIPT_STREAK_BONUS_LOST"); + precachestring(&"SCRIPT_STREAK_COMPLETE"); + precachestring(&"SCRIPT_X"); + precacheshader("arcademode_life"); + level.color_cool_green = (0.8,2,0.8); + level.color_cool_green_glow = (0.3,0.6,0.3); + arcademode_init_kill_streak_colors(); + level.arcademode_checkpoint_dvars = []; + level.arcademode_checkpoint_max = 10; + level.arcademode_kills_hud = []; + level.arcademode_kill_streak_ends = 0; + level.arcademode_last_streak_time = 0; + level.arcademode_ramping_score = 0; + level.arcademode_new_kill_streak_allowed = 1; + common_scripts\utility::flag_init("arcadeMode_multiplier_maxed"); + setdvar("arcademode_lives_changed",0); + level.arcademode_kill_streak_current_multiplier = 1; + level.arcademode_kill_streak_multiplier_count = 3; + arcademode_reset_kill_streak(); + for(var_00 = 0;var_00 < level.arcademode_checkpoint_max;var_00++) + { + setdvar("arcademode_checkpoint_" + var_00,""); + } + + level.arcademode_last_multi_kill_sound = 0; + level.arcademode_success = 0; + arcademode_define_damage_multipliers(); + common_scripts\utility::flag_init("arcademode_complete"); + common_scripts\utility::flag_init("arcademode_ending_complete"); + waittillframeend; + level.global_kill_func = ::player_kill; + level.global_damage_func_ads = ::player_damage_ads; + level.global_damage_func = ::player_damage; + level.arcademode_hud_sort = 50; + level.arcademode_maxlives = 10; + level.arcademode_rewarded_lives = 0; + if(getdvar("arcademode_lives") == "" || getdvar("arcademode_full") != "1" || level.script == "cargoship") + { + setdvar("arcademode_lives",2); + level.arcademode_rewarded_lives = 2; + } + + if(getdvar("arcademode_full") == "1" && level.script == "cargoship") + { + setdvar("arcademode_lives",5); + level.arcademode_rewarded_lives = 5; + } + + var_01 = getdvarint("arcadeMode_lives"); + setdvar("arcademode_earned_lives",var_01); + level.arcademode_playthrough = getdvarint("arcademode_playthrough_count"); + level.arcademode_playthrough++; + setdvar("arcademode_playthrough_count",level.arcademode_playthrough); + setdvar("arcademode_died",0); + setdvar("arcademode_score",0); + if(getdvar("arcademode_combined_score") == "" || getdvar("arcademode_full") == "1" && level.script == "cargoship") + { + setdvar("arcademode_combined_score",0); + } + + var_02 = arcademode_get_level_time(); + var_02 = var_02 * 60; + level.arcdemode_starttime = gettime(); + level.arcademode_time = var_02; + level.arcademode_killbase = 50; + level.arcademode_damagebase = 5; + level.arcademode_multikills = []; + var_03 = getarraykeys(level.arcademode_weaponmultiplier); + for(var_00 = 0;var_00 < var_03.size;var_00++) + { + level.arcademode_multikills[var_03[var_00]] = []; + } + + var_04 = level.arcademode_multikills; + thread arcademode_update_lives(); + thread arcademode_update_score(); + thread arcademode_update_timer(); + thread arcademode_death_detection(); + arcademode_redraw_lives(var_01); + for(;;) + { + wait 0.05; + waittillframeend; + waittillframeend; + var_03 = getarraykeys(level.arcademode_multikills); + common_scripts\utility::array_levelthread(var_03,::arcademode_add_points_for_mod); + level.arcademode_multikills = var_04; + } +} + +//Function Number: 2 +arcademode_complete() +{ + if(getdvar("arcademode") != "1") + { + return 0; + } + + return common_scripts\utility::flag("arcademode_complete"); +} + +//Function Number: 3 +arcademode_get_level_time() +{ + var_00 = 20; + var_01 = []; + var_02 = 1; + if(isdefined(var_01[level.script])) + { + var_00 = var_01[level.script]; + } + + level.arcademode_difficultytimerscale = var_02; + return var_00; +} + +//Function Number: 4 +arcademode_death_detection() +{ + level endon("arcademode_complete"); + level maps\_utility::add_wait(::common_scripts\utility::flag_wait,"missionfailed"); + level.player maps\_utility::add_wait(::maps\_utility::waittill_msg,"death"); + maps\_utility::do_wait_any(); + setdvar("arcademode_died",1); + var_00 = getdvarint("arcademode_lives"); + var_01 = getdvarint("arcademode_earned_lives"); + if(var_00 > var_01) + { + var_00 = var_01; + } + + var_00 = var_00 - 1; + setdvar("arcademode_lives",var_00); + setdvar("arcademode_lives_changed",-1); + arcademode_redraw_lives(var_00 + 1); + level.arcademode_redraw_score = 1; + updatescoreelemsonce(); + if(var_00 < 0) + { + wait 1.5; + level.arcademode_failurestring = &"SCRIPT_GAME_OVER"; + thread arcademode_ends(); + return; + } + + if(isalive(level.player)) + { + missionfailed(); + } +} + +//Function Number: 5 +arcademode_update_timer() +{ + level.player endon("death"); + var_00 = newhudelem(); + var_00.foreground = 1; + var_00.alignx = "right"; + var_00.aligny = "top"; + var_00.horzalign = "right"; + var_00.vertalign = "top"; + var_00.x = 0; + var_00.y = 60; + var_00.sort = level.arcademode_hud_sort; + var_00.fontscale = 3; + var_00.color = (0.8,1,0.8); + var_00.font = "objective"; + var_00.glowcolor = (0.3,0.6,0.3); + var_00.glowalpha = 1; + var_00.hidewheninmenu = 1; + level.arcademode_hud_timer = var_00; + level endon("arcadeMode_remove_timer"); + var_01 = level.arcademode_time; + var_00 settimer(var_01 - 0.1); + wait var_01; + level.arcademode_failurestring = &"SCRIPT_TIME_UP"; + thread arcademode_ends(); +} + +//Function Number: 6 +arcademode_update_lives() +{ + level.player endon("death"); + level endon("missionfailed"); + level.arcademode_lives_hud = []; + for(var_00 = 0;var_00 < level.arcademode_maxlives;var_00++) + { + arcademode_add_life(var_00,16,78,-18,64,level.arcademode_hud_sort); + } + + for(;;) + { + var_01 = getdvarint("arcademode_lives_changed"); + if(var_01 != 0) + { + var_02 = getdvarint("arcademode_lives"); + if(var_02 < 0) + { + level.arcademode_failurestring = &"SCRIPT_GAME_OVER"; + thread arcademode_ends(); + return; + } + + if(var_01 == -1) + { + level notify("lost_streak"); + level.arcademode_kill_streak_ends = gettime(); + thread arcademode_add_kill_streak_time(0); + level.arcademode_new_kill_streak_allowed = 0; + var_03 = getdvarint("arcademode_earned_lives"); + var_03--; + var_02 = var_03; + setdvar("arcademode_earned_lives",var_03); + setdvar("arcademode_lives",var_03); + } + + arcademode_redraw_lives(var_02); + level.arcademode_redraw_score = 1; + setdvar("arcademode_lives_changed",0); + } + + wait 0.05; + } +} + +//Function Number: 7 +arcademode_convert_extra_lives() +{ + var_00 = getdvarint("arcademode_lives"); + var_01 = getdvarint("arcademode_earned_lives"); + if(var_00 > var_01) + { + thread extra_lives_display(var_00 - var_01); + } + + setdvar("arcademode_earned_lives",var_00); + thread arcademode_redraw_lives(var_00); + return var_00 > var_01; +} + +//Function Number: 8 +arcademode_checkpoint_print() +{ + if(!maps\_utility::arcademode()) + { + return; + } + + arcademode_convert_extra_lives(); + var_00 = 800; + var_01 = 0.8; + level.player thread common_scripts\utility::play_sound_in_space("arcademode_checkpoint",level.player geteye()); + thread draw_checkpoint(var_00,var_01,1); + thread draw_checkpoint(var_00,var_01,-1); +} + +//Function Number: 9 +arcademode_redraw_life(param_00,param_01) +{ + if(param_00 >= param_01) + { + self setshader("arcademode_life",64,64); + } + else + { + self setshader("stance_stand",64,64); + } + + self fadeovertime(1); + self.alpha = 1; + self.glowalpha = 1; + self.color = level.color_cool_green; +} + +//Function Number: 10 +arcademode_remove_life(param_00) +{ + if(self.alpha <= 0) + { + return; + } + + self fadeovertime(1); + self.alpha = 0; + self.color = (1,0,0); + self.glowalpha = 0; +} + +//Function Number: 11 +arcademode_redraw_lives(param_00) +{ + if(param_00 > 10) + { + param_00 = 10; + } + + var_01 = getdvarint("arcademode_earned_lives"); + for(var_02 = 0;var_02 < param_00;var_02++) + { + level.arcademode_lives_hud[var_02] arcademode_redraw_life(var_02,var_01); + } + + for(var_02 = param_00;var_02 < level.arcademode_maxlives;var_02++) + { + if(var_02 < 0) + { + continue; + } + + if(var_02 >= 10) + { + continue; + } + + level.arcademode_lives_hud[var_02] arcademode_remove_life(var_02); + } +} + +//Function Number: 12 +arcademode_update_streak_progress() +{ + for(;;) + { + level common_scripts\utility::waittill_either("arcademode_decrement_kill_streak","arcademode_new_kill"); + waittillframeend; + arcademode_redraw_streak_progress(); + } +} + +//Function Number: 13 +arcademode_redraw_streak_progress() +{ + for(var_00 = 0;var_00 < level.arcademode_kill_streak_current_count;var_00++) + { + if(var_00 >= level.arcademode_kills_hud.size) + { + return; + } + + level.arcademode_kills_hud[var_00].color = level.arcademode_streak_color[level.arcademode_kill_streak_current_multiplier - 1]; + level.arcademode_kills_hud[var_00].glowcolor = level.arcademode_streak_glow[level.arcademode_kill_streak_current_multiplier - 1]; + } + + var_01 = 0; + for(;;) + { + var_02 = level.arcademode_kill_streak_current_multiplier + var_01; + if(var_02 >= level.arcademode_streak_color.size) + { + var_02 = level.arcademode_streak_color.size - 1; + } + + for(var_00 = level.arcademode_kill_streak_current_count + var_01 * level.arcademode_kill_streak_multiplier_count;var_00 < level.arcademode_kill_streak_current_count + var_01 + 1 * level.arcademode_kill_streak_multiplier_count;var_00++) + { + if(var_00 >= level.arcademode_kills_hud.size) + { + return; + } + + level.arcademode_kills_hud[var_00].color = level.arcademode_streak_color[var_02]; + level.arcademode_kills_hud[var_00].glowcolor = level.arcademode_streak_glow[var_02]; + } + + var_01++; + } +} + +//Function Number: 14 +arcademode_add_kill(param_00,param_01,param_02,param_03,param_04,param_05) +{ + level endon("arcademode_stop_kill_streak_art"); + var_06 = newhudelem(); + var_06.foreground = 1; + var_06.x = param_01 + param_00 * param_03; + if(level.arcademode_kills_hud.size == 0) + { + level.arcademode_kill_zero_x_location = var_06.x; + } + + var_06.y = param_02; + var_06 setshader("arcademode_kill",param_04,param_04); + var_06.alignx = "right"; + var_06.aligny = "top"; + var_06.horzalign = "right"; + var_06.vertalign = "top"; + var_06.sort = param_05; + var_06.color = level.color_cool_green; + var_06.glowcolor = level.color_cool_green_glow; + var_06.glowalpha = 1; + var_06.hidewheninmenu = 1; + var_07 = 0; + level.arcademode_kills_hud[level.arcademode_kills_hud.size] = var_06; + if(level.arcademode_kills_hud.size == 10) + { + var_07 = 1; + var_06.alpha = 0; + } + else + { + var_06.alpha = 1; + } + + for(;;) + { + if(var_06.x == level.arcademode_kill_zero_x_location) + { + var_08 = 4; + if(level.arcademode_kills_hud.size == 1) + { + wait 3; + } + + var_06 fadeovertime(var_08); + var_06.color = (1,0,0); + var_06.alpha = 0; + wait var_08; + level notify("arcademode_decrement_kill_streak"); + var_06 destroy(); + for(var_09 = 0;var_09 < level.arcademode_kills_hud.size - 1;var_09++) + { + level.arcademode_kills_hud[var_09] = level.arcademode_kills_hud[var_09 + 1]; + } + + level.arcademode_kills_hud[level.arcademode_kills_hud.size - 1] = undefined; + if(!level.arcademode_kills_hud.size) + { + thread arcademode_reset_kill_streak(); + } + + return; + } + + level waittill("arcademode_decrement_kill_streak"); + wait 0.05; + var_08 moveovertime(0.5); + var_08.x = var_08.x - param_05; + if(var_09) + { + var_08 fadeovertime(0.5); + var_08.alpha = 1; + var_09 = 0; + } + } +} + +//Function Number: 15 +get_streak_hud(param_00,param_01,param_02,param_03) +{ + var_04 = newhudelem(); + var_04.foreground = 1; + var_04.x = param_00 + -4; + var_04.y = param_01 + 14; + var_04.alignx = "right"; + var_04.aligny = "top"; + var_04.horzalign = "right"; + var_04.vertalign = "top"; + var_04.color = level.color_cool_green; + var_04.sort = level.arcademode_hud_sort - 1; + var_04.alpha = 0; + var_04.glowcolor = level.color_cool_green_glow; + var_04.glowalpha = 0; + var_04.hidewheninmenu = 1; + var_04 setshader("white",param_02,param_03); + return var_04; +} + +//Function Number: 16 +arcademode_add_kill_streak_time(param_00) +{ + if(!level.arcademode_new_kill_streak_allowed) + { + return; + } + + level notify("arcademode_new_kill_streak_time"); + level endon("arcademode_new_kill_streak_time"); + if(level.arcademode_kill_streak_ends < gettime()) + { + level.arcademode_kill_streak_ends = gettime() + param_00 * 1000; + } + else + { + level.arcademode_kill_streak_ends = level.arcademode_kill_streak_ends + param_00 * 1000; + } + + waittillframeend; + if(isdefined(level.arcademode_hud_streak)) + { + level.arcademode_hud_streak fadeovertime(0.05); + level.arcademode_hud_streak.alpha = 1; + } + + var_01 = 26; + var_02 = 12; + var_03 = 90; + var_04 = level.arcademode_streak_hud; + var_05 = level.arcademode_streak_hud_shadow; + var_06 = level.arcademode_kill_streak_ends - gettime(); + var_06 = var_06 * 0.001; + if(var_06 > var_03) + { + var_06 = var_03; + } + + var_06 = var_06 * var_02; + var_06 = int(var_06); + if(var_06 > 980) + { + var_06 = 980; + } + + if(!isdefined(var_04)) + { + var_04 = get_streak_hud(0,0,var_06,var_01); + var_05 = get_streak_hud(3,3,var_06,var_01); + var_05.sort = var_05.sort - 1; + var_05.alpha = 0; + var_05.color = (0,0,0); + } + else + { + var_04 scaleovertime(1,var_06,var_01); + var_05 scaleovertime(1,var_06,var_01); + wait 1; + } + + level.arcademode_streak_hud = var_04; + level.arcademode_streak_hud_shadow = var_05; + var_04 endon("death"); + param_00 = level.arcademode_kill_streak_ends - gettime(); + param_00 = param_00 * 0.001; + var_07 = int(param_00); + if(var_07 > var_03) + { + var_07 = var_03; + wait param_00 - var_07; + } + + for(;;) + { + var_06 = level.arcademode_kill_streak_ends - gettime(); + var_06 = var_06 * 0.001; + var_08 = var_06; + if(isdefined(level.arcademode_hud_streak)) + { + level.arcademode_hud_streak fadeovertime(1); + level.arcademode_hud_streak.alpha = var_08 - 1 / 5; + } + + var_06 = var_06 * var_02; + var_06 = int(var_06); + if(var_06 <= 0) + { + var_06 = 1; + } + + if(var_06 > 980) + { + var_06 = 980; + } + + var_04 scaleovertime(1,var_06,var_01); + var_05 scaleovertime(1,var_06,var_01); + wait 1; + if(var_06 == 1) + { + break; + } + } + + thread arcademode_reset_kill_streak(); +} + +//Function Number: 17 +arcademode_add_kill_streak() +{ + if(common_scripts\utility::flag("arcadeMode_multiplier_maxed")) + { + return; + } + + level endon("arcadeMode_multiplier_maxed"); + level endon("arcademode_stop_kill_streak"); + level.arcademode_kill_streak_current_count--; + var_00 = gettime(); + if(level.arcademode_kill_streak_current_count <= 0 && var_00 > level.arcademode_last_streak_time) + { + level.arcademode_last_streak_time = var_00; + var_01 = level.arcademode_kill_streak_current_multiplier; + level.arcademode_kill_streak_current_multiplier++; + if(level.arcademode_kill_streak_current_multiplier >= level.arcademode_streak_color.size) + { + level.arcademode_kill_streak_current_multiplier = level.arcademode_streak_color.size; + thread arcademode_multiplier_maxed(); + } + + if(var_01 != level.arcademode_kill_streak_current_multiplier) + { + level notify("arcademode_new_kill_streak"); + level.player playsound("arcademode_" + level.arcademode_kill_streak_current_multiplier + "x"); + thread arcademode_draw_multiplier(); + } + + level.arcademode_kill_streak_current_count = level.arcademode_kill_streak_multiplier_count; + } + + level notify("arcademode_new_kill"); + for(;;) + { + if(level.arcademode_kills_hud.size < 10) + { + arcademode_add_kill_streak_time(5); + return; + } + + level waittill("arcademode_decrement_kill_streak"); + } +} + +//Function Number: 18 +streak_timer_color_pulse() +{ + waittillframeend; + waittillframeend; + level.arcademode_streak_hud endon("death"); + for(;;) + { + var_00 = randomfloatrange(0.1,1); + level.arcademode_streak_hud fadeovertime(var_00); + level.arcademode_streak_hud.color = (randomfloat(1),randomfloat(1),randomfloat(1)); + wait var_00; + } +} + +//Function Number: 19 +arcademode_multiplier_maxed() +{ + waittillframeend; + if(common_scripts\utility::flag("arcadeMode_multiplier_maxed")) + { + return; + } + + common_scripts\utility::flag_set("arcadeMode_multiplier_maxed"); + var_00 = 20; + level.arcademode_kill_streak_ends = gettime() + var_00 * 1000; + thread arcademode_add_kill_streak_time(0); + thread streak_timer_color_pulse(); + musicstop(); + wait 0.05; + musicplay("airplane_alt_maximum_music"); + maps\_utility::add_wait(::maps\_utility::_wait,var_00 + 1); + level maps\_utility::add_wait(::maps\_utility::waittill_msg,"lost_streak"); + maps\_utility::do_wait_any(); + thread arcademode_reset_kill_streak(); + musicstop(); + if(isdefined(level.last_song)) + { + wait 0.05; + musicplay(level.last_song); + } +} + +//Function Number: 20 +get_hud_score() +{ + var_00 = newhudelem(); + var_00.foreground = 1; + var_00.x = 0; + var_00.y = 10; + var_00.alignx = "right"; + var_00.aligny = "top"; + var_00.horzalign = "right"; + var_00.vertalign = "top"; + var_00.score = 0; + var_00.font = "objective"; + var_00.fontscale = 5; + var_00.sort = level.arcademode_hud_sort; + var_00.glowcolor = level.color_cool_green_glow; + var_00.glowalpha = 1; + var_00.hidewheninmenu = 1; + return var_00; +} + +//Function Number: 21 +arcademode_update_score() +{ + level.player endon("death"); + level.arcademode_hud_digits = 10; + level.arcademode_hud_scores = []; + for(var_00 = 0;var_00 < level.arcademode_hud_digits;var_00++) + { + level.arcademode_hud_scores[level.arcademode_hud_scores.size] = get_hud_score(); + level.arcademode_hud_scores[level.arcademode_hud_scores.size - 1].x = var_00 * -30; + } + + if(getdvarint("arcademode_full")) + { + var_01 = getdvarint("arcademode_combined_score"); + } + else + { + var_01 = getdvarint("arcademode_score"); + } + + hud_draw_score(var_01); + level.arcademode_redraw_score = 0; + for(;;) + { + wait 0.05; + updatescoreelemsonce(); + if(level.arcademode_redraw_score) + { + level.arcademode_redraw_score = 0; + } + } +} + +//Function Number: 22 +updatescoreelemsonce() +{ + if(getdvarint("arcademode_full")) + { + hud_update_score("arcadeMode_combined_score"); + return; + } + + hud_update_score("arcademode_score"); +} + +//Function Number: 23 +hud_update_score(param_00) +{ + var_01 = getdvarint(param_00); + if(level.arcademode_redraw_score) + { + level.arcademode_ramping_score = var_01; + hud_draw_score(var_01); + return; + } + + if(level.arcademode_ramping_score >= var_01) + { + return; + } + + var_02 = var_01 - level.arcademode_ramping_score; + var_03 = var_02 * 0.2 + 1; + if(var_02 <= 15) + { + var_03 = 1; + } + + level.arcademode_ramping_score = level.arcademode_ramping_score + var_03; + if(level.arcademode_ramping_score > var_01) + { + level.arcademode_ramping_score = var_01; + } + + hud_draw_score(int(level.arcademode_ramping_score)); +} + +//Function Number: 24 +get_digits_from_score(param_00) +{ + var_01 = []; + param_00 = int(param_00); + for(;;) + { + var_01 = int(var_01 * 0.1); + if(var_01 <= 0) + { + break; + } + } + + return var_7B; +} + +//Function Number: 25 +hud_draw_score(param_00) +{ + hud_draw_score_for_elements(param_00,level.arcademode_hud_scores); +} + +//Function Number: 26 +hud_draw_score_for_elements(param_00,param_01) +{ + var_02 = get_digits_from_score(param_00); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + if(var_03 >= param_01.size - 1) + { + break; + } + + param_01[var_03] setvalue(var_02[var_03]); + param_01[var_03].alpha = 1; + } + + for(var_03 = var_02.size;var_03 < param_01.size;var_03++) + { + param_01[var_03].alpha = 0; + } + + if(param_00 == 0) + { + param_01[0].alpha = 1; + param_01[0] setvalue(0); + } +} + +//Function Number: 27 +arcademode_add_life(param_00,param_01,param_02,param_03,param_04,param_05) +{ + var_06 = newhudelem(); + var_06.foreground = 1; + var_06.x = param_01 + param_00 * param_03; + var_06.y = param_02; + var_06 setshader("stance_stand",param_04,param_04); + var_06.alignx = "right"; + var_06.aligny = "top"; + var_06.horzalign = "right"; + var_06.vertalign = "top"; + var_06.sort = param_05; + var_06.color = level.color_cool_green; + var_06.glowcolor = level.color_cool_green_glow; + var_06.glowalpha = 0; + var_06.alpha = 0; + var_06.hidewheninmenu = 1; + level.arcademode_lives_hud[level.arcademode_lives_hud.size] = var_06; +} + +//Function Number: 28 +arcademode_define_damage_multipliers() +{ + var_00[0] = 40; + level.arcademode_kills_until_next_extra_life = 10; + level.arcademode_extra_lives_range = var_7B; + var_01 = []; + for(var_02 = 0;var_02 < 4;var_02++ = var_7B[3]) + { + var_01[var_02] = var_7B[var_02] * 0.15; + } + + level.arcademode_extra_lives_base = var_01; +} + +//Function Number: 29 +set_next_extra_life(param_00) +{ +} + +//Function Number: 30 +new_ending_hud(param_00,param_01,param_02,param_03) +{ + var_04 = newhudelem(); + var_04.foreground = 1; + var_04.x = param_02; + var_04.y = param_03; + var_04.alignx = param_00; + var_04.aligny = "middle"; + var_04.horzalign = param_00; + var_04.vertalign = "middle"; + var_04.fontscale = 3; + if(getdvar("widescreen") == "1") + { + var_04.fontscale = 5; + } + + var_04.color = (0.8,1,0.8); + var_04.font = "objective"; + var_04.glowcolor = (0.3,0.6,0.3); + var_04.glowalpha = 1; + var_04.alpha = 0; + var_04 fadeovertime(param_01); + var_04.alpha = 1; + var_04.hidewheninmenu = 1; + var_04.sort = level.arcademode_hud_sort + 10; + return var_04; +} + +//Function Number: 31 +extra_lives_display(param_00) +{ + for(var_01 = 0;var_01 < 5;var_01++) + { + thread extra_lives_sizzle(); + } + + var_02 = new_ending_hud("center",0.2,0,-100); + var_02.label = &"SCRIPT_EXTRA_LIFE"; + var_02 setvalue(param_00); + var_02 setpulsefx(5,3000,1000); + wait 5; + var_02 destroy(); +} + +//Function Number: 32 +fade_out(param_00) +{ + self fadeovertime(param_00); + self.alpha = 0; + wait param_00; + self destroy(); +} + +//Function Number: 33 +extra_lives_sizzle() +{ + var_00 = new_ending_hud("center",0.2,0,-100); + var_00.alpha = randomfloatrange(0.1,0.45); + var_00.sort = var_00.sort - 1; + var_00 settext(&"SCRIPT_EXTRA_LIFE"); + var_00 maps\_utility::delaythread(3,::fade_out,1); + var_00 endon("death"); + var_01 = var_00.x; + var_02 = var_00.y; + var_03 = 20; + for(;;) + { + var_04 = randomfloatrange(0.1,0.2); + var_00 moveovertime(var_04); + var_00.x = var_01 + randomfloatrange(var_03 * -1,var_03); + var_00.y = var_02 + randomfloatrange(var_03 * -1,var_03); + wait var_04; + } +} + +//Function Number: 34 +round_up_to_five(param_00) +{ + var_01 = param_00 - param_00 % 5; + if(var_01 < param_00) + { + var_01 = var_01 + 5; + } + + return var_01; +} + +//Function Number: 35 +arcademode_add_points(param_00,param_01,param_02,param_03) +{ + if(param_03 <= 0) + { + return; + } + + if(isdefined(level.arcademode_deathtypes[param_02])) + { + param_02 = level.arcademode_deathtypes[param_02]; + } + + param_03 = int(param_03); + param_03 = round_up_to_five(param_03); + param_03 = param_03 * level.arcademode_kill_streak_current_multiplier; + var_04 = getdvarint("arcademode_score"); + var_04 = var_04 + param_03; + var_05 = getdvarint("arcademode_combined_score"); + var_05 = var_05 + param_03; + setdvar("arcademode_combined_score",var_05); + setdvar("arcademode_score",var_04); + var_06 = 60; + var_07 = 1.5; + var_08 = 0.9 + param_03 - 10 * 0.01; + if(var_08 > 1.4) + { + var_08 = 1.4; + } + + var_09 = (0.75,0,0); + if(param_01) + { + thread arcademode_add_kill_streak(); + thread arcademode_add_point_towards_extra_life(); + var_09 = level.arcademode_killcolors[param_02]; + } + + level.player pointpulse(param_03); +} + +//Function Number: 36 +arcademode_add_point_towards_extra_life() +{ + level.arcademode_kills_until_next_extra_life = level.arcademode_kills_until_next_extra_life - 1; + if(level.arcademode_kills_until_next_extra_life > 0) + { + return; + } + + level.arcademode_rewarded_lives++; + var_00 = getdvarint("arcademode_lives"); + var_00++; + if(var_00 >= level.arcademode_maxlives) + { + var_00 = level.arcademode_maxlives; + } + else + { + setdvar("arcademode_lives",var_00); + setdvar("arcademode_lives_changed",1); + } + + level.arcademode_kills_until_next_extra_life = level.arcademode_extra_lives_range[level.gameskill]; +} + +//Function Number: 37 +arcademode_set_origin_in_radius() +{ + var_00 = 60; + var_01 = 90; + if(level.player.pointpulseindex > 0) + { + if(level.player.pointpulseindex == 1) + { + var_02 = randomint(1); + level.player.thirdpointpulseside = 1 - var_02; + if(var_02) + { + var_01 = 45; + } + else + { + var_01 = 135; + } + } + else if(level.player.pointpulseindex == 2) + { + var_02 = level.player.thirdpointpulseside; + if(var_02) + { + var_01 = 45; + } + else + { + var_01 = 135; + } + } + else if(level.player.pointpulseindex <= 4) + { + var_01 = randomfloatrange(0,180); + var_00 = randomfloatrange(60,120); + } + else if(level.player.pointpulseindex <= 8) + { + var_01 = randomfloatrange(0,180); + var_00 = randomfloatrange(60,160); + } + else + { + var_01 = randomfloatrange(-30,210); + var_00 = randomfloatrange(60,200); + } + } + + self.x = var_00 * cos(var_01); + self.y = 0 - var_00 * sin(var_01); +} + +//Function Number: 38 +pointpulse(param_00) +{ + if(param_00 == 0) + { + return; + } + + if(!isdefined(level.player.pointpulsecount)) + { + level.player.pointpulsecount = 0; + level.player.pointpulseindex = 0; + } + + var_01 = newhudelem(); + var_01.horzalign = "center"; + var_01.vertalign = "middle"; + var_01.alignx = "center"; + var_01.aligny = "middle"; + var_01 arcademode_set_origin_in_radius(); + var_01.font = "objective"; + var_01.fontscale = 2.5; + var_01.archived = 0; + var_01.color = (0.5,0.5,0.5); + var_01.sort = 4; + var_02 = level.arcademode_kill_streak_current_multiplier; + level.player.pointpulsecount++; + level.player.pointpulseindex++; + wait 0.05; + if(param_00 <= 0) + { + var_01.label = &""; + var_01.color = (1,0,0); + var_01.glowcolor = (0,0,0); + var_01.glowalpha = 0; + } + else + { + var_01.label = &"SCRIPT_PLUS"; + var_01.color = (1,1,1); + var_01.glowcolor = level.color_cool_green_glow; + var_01.glowalpha = 1; + } + + var_01 setvalue(param_00); + var_01.alpha = 1; + var_01 changefontscaleovertime(0.15); + var_01.fontscale = 3.5; + wait 0.15; + var_01 moveovertime(1.75); + var_01.y = var_01.y - 40; + var_01 changefontscaleovertime(0.25); + var_01.fontscale = 2.5; + wait 0.25; + wait 0.5; + var_01 fadeovertime(1); + var_01.alpha = 0; + wait 0.5; + level.player.pointpulsecount--; + if(level.player.pointpulsecount == 0) + { + level.player.pointpulseindex = 0; + } + + var_01 destroy(); +} + +//Function Number: 39 +set_circular_origin() +{ + var_00 = 50; + for(;;) + { + var_01 = randomint(var_00); + var_02 = randomint(var_00); + if(distance((0,0,0),(var_01,var_02,0)) < var_00) + { + break; + } + } + + if(common_scripts\utility::cointoss()) + { + var_01 = var_01 * -1; + } + + if(common_scripts\utility::cointoss()) + { + var_02 = var_02 * -1; + } + + self.x = var_01; + self.y = var_02; +} + +//Function Number: 40 +arcademode_add_points_for_mod(param_00) +{ + for(var_01 = 0;var_01 < level.arcademode_multikills[param_00].size;var_01++) + { + arcademode_add_points_for_individual_kill(level.arcademode_multikills[param_00][var_01],param_00,level.arcademode_multikills[param_00].size); + } +} + +//Function Number: 41 +arcademode_add_points_for_individual_kill(param_00,param_01,param_02) +{ + if(param_00["type"] != "melee") + { + var_03 = level.arcademode_killbase + level.arcademode_locationkillbonus[param_00["damage_location"]] + level.arcademode_weaponbonus[param_00["type"]]; + } + else + { + var_03 = level.arcademode_killbase + level.arcademode_weaponbonus[param_01["type"]]; + } + + thread arcademode_add_points(param_00["origin"],1,param_01,var_03); +} + +//Function Number: 42 +player_kill(param_00,param_01,param_02) +{ + if(!isdefined(param_01)) + { + param_01 = "none"; + } + + var_03 = level.arcademode_deathtypes[param_00]; + if(!isdefined(var_03)) + { + var_04 = level.arcademode_killbase; + thread arcademode_add_points(param_02,1,"melee",var_04); + return; + } + + var_05["damage_location"] = param_02; + if(var_05 == "explosive") + { + } + + level.arcademode_multikills[var_05][level.arcademode_multikills[var_05].size] = var_7B; +} + +//Function Number: 43 +player_damage(param_00,param_01,param_02) +{ + thread arcademode_add_points(param_02,0,param_00,level.arcademode_damagebase); +} + +//Function Number: 44 +player_damage_ads(param_00,param_01,param_02) +{ + thread arcademode_add_points(param_02,0,param_00,level.arcademode_damagebase * 1.25); +} + +//Function Number: 45 +end_mission() +{ + setsaveddvar("ui_nextMission","0"); + for(var_00 = 0;var_00 < level.players.size;var_00++) + { + var_01 = level.players[var_00]; + var_01.maxhealth = 0; + var_01.health = 1; + } + + missionsuccess("killhouse"); +} + +//Function Number: 46 +create_total_score_hud(param_00,param_01) +{ + level.arcademode_hud_total_scores = []; + for(var_02 = 0;var_02 < level.arcademode_hud_digits;var_02++) + { + var_03 = get_hud_score(); + level.arcademode_hud_total_scores[level.arcademode_hud_total_scores.size] = var_03; + var_03.x = var_02 * -30 + -150 + param_00; + var_03.y = param_01; + var_03.alignx = "right"; + var_03.aligny = "middle"; + var_03.horzalign = "right"; + var_03.vertalign = "middle"; + var_03.alpha = 0; + var_03.sort = level.arcademode_hud_sort + 10; + } +} + +//Function Number: 47 +set_total_score_hud(param_00) +{ + hud_draw_score_for_elements(param_00,level.arcademode_hud_total_scores); +} + +//Function Number: 48 +arcademode_ends() +{ + if(common_scripts\utility::flag("arcademode_complete")) + { + return; + } + + common_scripts\utility::flag_set("arcademode_complete"); + maps\_utility::slowmo_setlerptime_out(0.05); + maps\_utility::slowmo_lerp_out(); + maps\_utility::slowmo_end(); + if(level.arcademode_success) + { + if(arcademode_convert_extra_lives()) + { + wait 2; + } + } + + var_00 = 0; + if(isdefined(level.arcademode_stoptime)) + { + var_00 = gettime() - level.arcademode_stoptime; + var_00 = var_00 * 0.001; + } + + var_01 = gettime() - level.arcdemode_starttime; + var_01 = var_01 * 0.001; + var_01 = var_01 - var_00; + var_02 = level.arcademode_time - var_01; + var_02 = int(var_02); + if(var_02 == 0) + { + var_02++; + } + + var_03 = 0.5; + level.mission_failed_disabled = 1; + thread player_invul_forever(); + thread black_background(var_03); + wait var_03 + 0.25; + level.player freezecontrols(1); + var_04 = 1; + var_05 = -140; + var_06 = -80; + var_07 = -20; + var_08 = 40; + var_09 = 100; + var_0A = 300; + var_0B = new_ending_hud("center",var_04,0,var_05); + if(level.arcademode_success) + { + var_0B.color = (1,1,1); + var_0B settext(&"SCRIPT_MISSION_COMPLETE"); + } + else + { + var_0B.color = (1,0.4,0.2); + var_0B.glowcolor = (0.75,0.3,0.3); + var_0B settext(level.arcademode_failurestring); + } + + wait 1; + for(var_0C = 0;var_0C < level.arcademode_maxlives;var_0C++) + { + level.arcademode_lives_hud[var_0C] destroy(); + } + + var_0D = 130; + level.arcademode_lives_hud = []; + for(var_0C = 0;var_0C < level.arcademode_maxlives;var_0C++) + { + arcademode_add_life(var_0C,-135 + var_0D,var_0A,-30,96,level.arcademode_hud_sort + 10); + } + + var_0E = getdvarint("arcademode_lives"); + var_0F = level.arcademode_rewarded_lives; + if(var_0E > var_0F) + { + var_0E = var_0F; + } + + arcademode_redraw_lives(var_0E); + var_10 = 0; + var_11 = undefined; + if(getdvar("arcademode_full") == "1") + { + var_11 = new_ending_hud("left",var_04,20,var_06); + var_11 settext(&"SCRIPT_TOTAL_SCORE"); + create_total_score_hud(var_0D,var_06); + var_10 = getdvarint("arcademode_combined_score"); + set_total_score_hud(var_10); + } + + var_12 = new_ending_hud("left",var_04,20,var_07); + var_12 settext(&"SCRIPT_MISSION_SCORE"); + for(var_0C = 0;var_0C < level.arcademode_hud_digits;var_0C++) + { + var_13 = level.arcademode_hud_scores[var_0C]; + var_13.x = var_0C * -30 + -150 + var_0D; + var_13.y = var_07; + var_13.sort = level.arcademode_hud_sort + 10; + var_13.alignx = "right"; + var_13.aligny = "middle"; + var_13.horzalign = "right"; + var_13.vertalign = "middle"; + } + + hud_draw_score(0); + var_14 = 0; + var_15 = 0; + while(var_02 >= 60) + { + var_14++; + var_02 = var_02 - 60; + } + + var_15 = var_02; + var_16 = new_ending_hud("left",var_04,20,var_08); + var_16 settext(&"SCRIPT_TIME_REMAINING"); + level.arcademode_hud_timer_minutes_tens = new_ending_hud("right",var_04,-265 + var_0D,var_08); + level.arcademode_hud_timer_minutes_ones = new_ending_hud("right",var_04,-235 + var_0D,var_08); + var_17 = new_ending_hud("right",var_04,-215 + var_0D,var_08 - 5); + var_17 settext(&"SCRIPT_COLON"); + level.arcademode_hud_timer_seconds_tens = new_ending_hud("right",var_04,-180 + var_0D,var_08); + level.arcademode_hud_timer_seconds_ones = new_ending_hud("right",var_04,-150 + var_0D,var_08); + ending_set_time(var_14,var_15); + wait var_04; + wait 1; + var_18 = getdvarint("arcadeMode_score"); + var_19 = 0; + var_1A = var_10; + var_1B = 0; + for(;;) + { + var_1C = var_18 - var_19; + var_1D = var_1C * 0.2 + 1; + if(var_1C <= 15) + { + var_1D = 1; + } + + var_1D = int(var_1D); + var_19 = var_19 + var_1D; + if(var_19 > var_18) + { + var_19 = var_18; + } + + hud_draw_score(var_19); + if(var_19 == var_18) + { + break; + } + + var_1B--; + if(var_1B <= 0) + { + level.player thread common_scripts\utility::play_sound_in_space("bullet_ap_dirt",level.player geteye()); + var_1B = 3; + } + + wait 0.05; + } + + wait 1; + var_1E = 0; + var_1F = undefined; + if(level.arcademode_success) + { + var_20 = 5; + var_21 = var_14 * 60 + var_15; + var_22 = ceil(var_21 / 15); + var_23 = ceil(var_21 * var_20); + var_24 = ceil(var_23 / level.arcademode_difficultytimerscale); + var_25 = var_19; + var_26 = var_19 + var_24; + var_27 = var_10; + var_28 = var_10 + var_24; + for(var_0C = 1;var_0C <= var_22;var_0C++) + { + var_29 = var_0C * 1 / var_22; + if(var_0C == var_22) + { + var_29 = 1; + } + + var_19 = int(var_25 * 1 - var_29 + var_26 * var_29); + if(getdvar("arcademode_full") == "1") + { + var_10 = int(var_27 * 1 - var_29 + var_28 * var_29); + set_total_score_hud(var_10); + } + + hud_draw_score(var_19); + var_2A = int(var_21 * 1 - var_29); + ending_set_time(floor(var_2A / 60),var_2A % 60); + var_1B--; + if(var_1B <= 0) + { + level.player thread common_scripts\utility::play_sound_in_space("bullet_ap_metal",level.player geteye()); + var_1B = 3; + } + + wait 0.05; + } + + ending_set_time(0,0); + wait 1; + for(;;) + { + var_2B = 1; + if(var_0E > 10) + { + var_2C = var_0E % 10; + if(var_0E - var_2C >= 10) + { + var_2B = 10; + } + else + { + var_2B = var_2C; + } + + if(var_0E < 20) + { + var_2B = var_2C; + } + } + + var_0E = var_0E - var_2B; + if(var_0E < 0) + { + break; + } + + var_2D = 1000; + var_2D = var_2D * var_2B; + var_1D = int(var_2D); + if(getdvar("arcademode_full") == "1") + { + var_10 = var_10 + var_1D; + set_total_score_hud(var_10); + } + + var_19 = var_19 + var_1D; + level.player thread common_scripts\utility::play_sound_in_space("mortar_explosion",level.player geteye()); + hud_draw_score(int(var_19)); + arcademode_redraw_lives(var_0E); + wait 0.6; + } + + wait 1; + if(getdvarint("arcademode_died") != 1 && level.gameskill >= 2) + { + var_1D = int(var_19); + arcademode_end_boost(var_19,var_10,var_1D,&"SCRIPT_ZERO_DEATHS","bullet_ap_bark",var_09,var_04); + var_19 = var_19 + var_1D; + var_10 = var_10 + var_1D; + } + } + else + { + level.arcademode_hud_timer_seconds_ones setpulsefx(0,0,1000); + level.arcademode_hud_timer_seconds_tens setpulsefx(0,0,1000); + level.arcademode_hud_timer_minutes_ones setpulsefx(0,0,1000); + level.arcademode_hud_timer_minutes_tens setpulsefx(0,0,1000); + var_17 setpulsefx(0,0,1000); + var_16 setpulsefx(0,0,1000); + arcademode_redraw_lives(0); + wait 2; + } + + var_2E = level.arcademode_skillmultiplier[level.gameskill]; + if(var_2E > 1) + { + if(var_2E == 1.5) + { + var_2F = &"SCRIPT_DIFFICULTY_BONUS_ONEANDAHALF"; + } + else if(var_2F == 3) + { + var_2F = &"SCRIPT_DIFFICULTY_BONUS_THREE"; + } + else + { + var_2F = &"SCRIPT_DIFFICULTY_BONUS_FOUR"; + } + + var_1D = int(ceil(var_19 * var_2E) - var_19); + arcademode_end_boost(var_19,var_10,var_1D,var_2F,"bullet_ap_glass",var_09,var_04); + var_19 = var_19 + var_1D; + var_10 = var_10 + var_1D; + } + + var_30 = 0; + if(getdvar("arcademode_full") == "1") + { + var_31 = "s18"; + var_32 = getdvarint(var_31); + if(var_10 > var_32) + { + var_33 = get_digits_from_score(var_10); + var_34 = get_score_string_from_digits(var_33); + setdvar(var_31,var_34); + var_35 = 0; + if(!level.arcademode_success) + { + var_35 = 1; + } + + if(level.script == "airplane") + { + var_35 = 1; + } + + if(var_35) + { + var_30 = 1; + } + } + + level.player uploadscore("LB_FULL",getdvarint(var_31)); + } + else + { + var_36 = []; + } + + if(var_30) + { + if(!level.arcademode_success) + { + updategamerprofile(); + } + + wait 1; + var_37 = new_ending_hud("center",var_04,0,var_09); + var_37 settext(&"SCRIPT_NEW_HIGH_SCORE"); + var_37.alpha = 1; + var_37 fadeovertime(0.05); + var_37 setpulsefx(30,3000,1000); + wait 3.5; + } + + wait 2; + var_0B setpulsefx(0,0,1000); + wait 0.5; + var_12 setpulsefx(0,0,1000); + for(var_0C = 0;var_0C < level.arcademode_hud_digits;var_0C++) + { + var_13 = level.arcademode_hud_scores[var_0C]; + var_13 setpulsefx(0,0,1000); + } + + if(getdvar("arcademode_full") == "1") + { + var_11 setpulsefx(0,0,1000); + for(var_0C = 0;var_0C < level.arcademode_hud_digits;var_0C++) + { + var_13 = level.arcademode_hud_total_scores[var_0C]; + var_13 setpulsefx(0,0,1000); + } + } + + if(level.arcademode_success) + { + wait 0.5; + level.arcademode_hud_timer_seconds_ones setpulsefx(0,0,1000); + level.arcademode_hud_timer_seconds_tens setpulsefx(0,0,1000); + level.arcademode_hud_timer_minutes_ones setpulsefx(0,0,1000); + level.arcademode_hud_timer_minutes_tens setpulsefx(0,0,1000); + var_17 setpulsefx(0,0,1000); + var_16 setpulsefx(0,0,1000); + } + + wait 1; + if(getdvar("arcademode_full") == "1") + { + logstring("ArcadeMode Score: " + var_19 + ", mission: " + level.script + ", gameskill: " + level.gameskill + ", total: " + var_10); + } + else + { + logstring("ArcadeMode Score: " + var_19 + ", mission: " + level.script + ", gameskill: " + level.gameskill); + } + + setdvar("arcademode_combined_score",var_10); + if(!level.arcademode_success) + { + setdvar("ui_arcade_lost",1); + end_mission(); + } + else + { + setdvar("ui_arcade_lost",0); + } + + common_scripts\utility::flag_set("arcademode_ending_complete"); +} + +//Function Number: 49 +arcademode_end_boost(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + var_07 = new_ending_hud("center",param_06,0,param_05); + var_07 settext(param_03); + var_07.alpha = 1; + var_07 fadeovertime(0.05); + wait 0.05; + wait 1; + var_08 = 0; + var_09 = param_00 + param_02; + var_0A = param_01 + param_02; + for(;;) + { + var_0B = var_09 - param_00; + param_02 = var_0B * 0.2 + 1; + if(var_0B <= 15) + { + param_02 = 1; + } + + param_02 = int(param_02); + param_00 = param_00 + param_02; + if(param_00 > var_09) + { + param_00 = var_09; + } + + hud_draw_score(param_00); + if(getdvar("arcademode_full") == "1") + { + param_01 = param_01 + param_02; + if(param_01 > var_0A) + { + param_01 = var_0A; + } + + set_total_score_hud(param_01); + } + + if(param_00 == var_09) + { + break; + } + + var_08--; + if(var_08 <= 0) + { + level.player thread common_scripts\utility::play_sound_in_space(param_04,level.player geteye()); + var_08 = 3; + } + + wait 0.05; + } + + wait 0.5; + var_07 setpulsefx(0,0,1000); + wait 1; +} + +//Function Number: 50 +black_background(param_00) +{ + var_01 = newhudelem(); + var_01.foreground = 1; + var_01.x = 0; + var_01.y = 0; + var_01 setshader("black",640,480); + var_01.alignx = "left"; + var_01.aligny = "top"; + var_01.horzalign = "fullscreen"; + var_01.vertalign = "fullscreen"; + var_01.sort = level.arcademode_hud_sort + 5; + var_01.alpha = 0; + if(param_00 > 0) + { + var_01 fadeovertime(param_00); + } + + var_01.alpha = 1; +} + +//Function Number: 51 +player_invul_forever() +{ + for(;;) + { + level.player enableinvulnerability(); + level.player.deathinvulnerabletime = 70000; + level.player.ignoreme = 1; + var_00 = getaispeciesarray("all","all"); + common_scripts\utility::array_thread(var_00,::maps\_utility::set_ignoreme,1); + wait 0.05; + } +} + +//Function Number: 52 +ending_set_time(param_00,param_01) +{ + var_02 = 0; + var_03 = 0; + while(param_00 >= 10) + { + var_02++; + param_00 = param_00 - 10; + } + + while(param_01 >= 10) + { + var_03++; + param_01 = param_01 - 10; + } + + level.arcademode_hud_timer_seconds_ones setvalue(param_01); + level.arcademode_hud_timer_seconds_tens setvalue(var_03); + level.arcademode_hud_timer_minutes_ones setvalue(param_00); + level.arcademode_hud_timer_minutes_tens setvalue(var_02); +} + +//Function Number: 53 +draw_checkpoint(param_00,param_01,param_02) +{ + param_00 = param_00 * param_02; + var_03 = new_ending_hud("center",0.1,param_00,90); + var_03 settext(&"SCRIPT_CHECKPOINT"); + var_03 moveovertime(param_01); + var_03.x = 0; + wait param_01; + wait 0.5; + var_03 moveovertime(param_01); + var_03.x = param_00 * -1; + wait param_01; + var_03 destroy(); +} + +//Function Number: 54 +arcademode_checkpoint_getid(param_00) +{ + for(var_01 = 0;var_01 < level.arcademode_checkpoint_dvars.size;var_01++) + { + if(level.arcademode_checkpoint_dvars[var_01] == param_00) + { + return var_01; + } + } + + return undefined; +} + +//Function Number: 55 +arcademode_init_kill_streak_colors() +{ + level.arcademode_streak_color = []; + level.arcademode_streak_glow = []; + level.arcademode_streak_color[level.arcademode_streak_color.size] = level.color_cool_green; + level.arcademode_streak_color[level.arcademode_streak_color.size] = (0.8,0.8,2); + level.arcademode_streak_color[level.arcademode_streak_color.size] = (2,0.8,0); + level.arcademode_streak_color[level.arcademode_streak_color.size] = (0.5,2,2); + level.arcademode_streak_color[level.arcademode_streak_color.size] = (2,0.5,2); + level.arcademode_streak_color[level.arcademode_streak_color.size] = (0.3,0.3,2); + level.arcademode_streak_color[level.arcademode_streak_color.size] = (2,2,0.5); + level.arcademode_streak_color[level.arcademode_streak_color.size] = (2,2,2); + for(var_00 = 0;var_00 < level.arcademode_streak_color.size;var_00++) + { + level.arcademode_streak_glow[var_00] = (level.arcademode_streak_color[var_00][0] * 0.35,level.arcademode_streak_color[var_00][1] * 0.35,level.arcademode_streak_color[var_00][2] * 0.35); + } + + level.arcademode_streak_color[0] = level.color_cool_green_glow; +} + +//Function Number: 56 +arcademode_killstreak_complete_display() +{ + if(level.arcademode_kill_streak_current_multiplier == 1) + { + return; + } + + if(common_scripts\utility::flag("arcademode_complete")) + { + return; + } + + var_00 = new_ending_hud("right",0.2,-10,-57); + var_00 setpulsefx(5,3000,1000); + var_00.fontscale = 2; + if(level.arcademode_kill_streak_current_multiplier >= 8) + { + level.player thread common_scripts\utility::play_sound_in_space("arcademode_kill_streak_won",level.player geteye()); + var_00 settext(&"SCRIPT_STREAK_COMPLETE"); + } + else + { + level.player thread common_scripts\utility::play_sound_in_space("arcademode_kill_streak_lost",level.player geteye()); + var_00 settext(&"SCRIPT_STREAK_BONUS_LOST"); + } + + wait 5; + var_00 destroy(); +} + +//Function Number: 57 +arcademode_reset_kill_streak_art() +{ + if(isdefined(level.arcademode_streak_hud)) + { + level.arcademode_streak_hud destroy(); + level.arcademode_streak_hud = undefined; + level.arcademode_streak_hud_shadow destroy(); + } + + level notify("arcademode_stop_kill_streak_art"); + for(var_00 = 0;var_00 < level.arcademode_kills_hud.size;var_00++) + { + level.arcademode_kills_hud[var_00] destroy(); + } + + level.arcademode_kills_hud = []; +} + +//Function Number: 58 +arcademode_reset_kill_streak() +{ + level.arcademode_new_kill_streak_allowed = 1; + thread arcademode_killstreak_complete_display(); + level notify("arcademode_stop_kill_streak"); + arcademode_reset_kill_streak_art(); + common_scripts\utility::flag_clear("arcadeMode_multiplier_maxed"); + level.arcademode_kill_streak_current_count = level.arcademode_kill_streak_multiplier_count; + level.arcademode_kill_streak_current_multiplier = 1; +} + +//Function Number: 59 +get_hud_multi() +{ + var_00 = newhudelem(); + var_00.alignx = "right"; + var_00.aligny = "top"; + var_00.horzalign = "right"; + var_00.vertalign = "top"; + var_00 thread arcademode_draw_multiplier_kill(); + var_00.x = 0; + var_00.y = 126; + var_00.font = "objective"; + var_00.fontscale = 0.1; + var_00.archived = 0; + var_00.foreground = 1; + var_00.color = level.arcademode_streak_color[level.arcademode_kill_streak_current_multiplier - 1]; + var_00.glowcolor = level.arcademode_streak_glow[level.arcademode_kill_streak_current_multiplier - 1]; + var_00.sort = level.arcademode_hud_sort; + var_00.label = &"SCRIPT_X"; + var_00 setvalue(level.arcademode_kill_streak_current_multiplier); + var_00 changefontscaleovertime(0.5); + var_00.fontscale = 3; + var_00.alpha = 0; + var_00 fadeovertime(0.5); + var_00.alpha = 1; + return var_00; +} + +//Function Number: 60 +arcademode_draw_multiplier() +{ + for(var_00 = 0;var_00 < 40;var_00++) + { + var_01 = get_hud_multi(); + var_01 thread arcademode_draw_mult_sizzle(); + } + + level endon("arcademode_new_kill_streak"); + var_02 = get_hud_multi(); + level.arcademode_hud_streak = var_02; + level waittill("arcademode_stop_kill_streak"); + var_02 setpulsefx(0,0,1000); + wait 1; + var_02 destroy(); + level.arcademode_hud_streak = undefined; +} + +//Function Number: 61 +arcademode_draw_mult_sizzle() +{ + level endon("arcademode_new_kill_streak"); + wait 0.05; + var_00 = 500; + self moveovertime(2); + self.x = self.x + randomintrange(var_00 * -1,var_00); + self.y = self.y + randomintrange(var_00 * -1,var_00); + wait 0.5; + self fadeovertime(1); + self.alpha = 0; + wait 1; + self destroy(); +} + +//Function Number: 62 +arcademode_draw_multiplier_kill() +{ + self endon("death"); + level waittill("arcademode_new_kill_streak"); + self destroy(); +} + +//Function Number: 63 +get_score_string_from_digits(param_00) +{ + var_01 = ""; + for(var_02 = 0;var_02 < param_00.size;var_02++) + { + var_01 = param_00[var_02] + var_01; + } + + return var_01; +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_art.gsc b/MW3/PC/SP/maps/_art.gsc new file mode 100644 index 0000000..aa62e4f --- /dev/null +++ b/MW3/PC/SP/maps/_art.gsc @@ -0,0 +1,1267 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_art.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 40 + * Decompile Time: 644 ms + * Timestamp: 10/27/2023 2:22:15 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(getdvar("scr_cmd_plr_sun") == "") + { + } + + if(getdvar("scr_dof_enable") == "") + { + setsaveddvar("scr_dof_enable","1"); + } + + if(getdvar("scr_cinematic_autofocus") == "") + { + setdvar("scr_cinematic_autofocus","1"); + } + + setdvarifuninitialized("scr_glowTweakEnable",1); + setdvarifuninitialized("scr_glowTweakRadius0",7); + setdvarifuninitialized("scr_glowTweakBloomCutoff",0.99); + setdvarifuninitialized("scr_glowTweakBloomDesaturation",0.65); + setdvarifuninitialized("scr_glowTweakBloomIntensity0",0.36); + setdvarifuninitialized("scr_filmTweakEnable",1); + setdvarifuninitialized("scr_filmTweakContrast",1.45); + setdvarifuninitialized("scr_filmTweakBrightness",0.15); + setdvarifuninitialized("scr_filmTweakDesaturation",0.4); + setdvarifuninitialized("scr_filmTweakDesaturationDark",0.4); + setdvarifuninitialized("scr_filmTweakInvert",0); + setdvarifuninitialized("scr_filmTweakLightTint","1.14 1.07 0.877"); + setdvarifuninitialized("scr_filmTweakMediumTint","1.16 .74 .69"); + setdvarifuninitialized("scr_filmTweakDarkTint","0.7 0.76 0.86"); + setdvarifuninitialized("scr_primaryLightUseTweaks",1); + setdvarifuninitialized("scr_primaryLightTweakDiffuseStrength",1); + setdvarifuninitialized("scr_primaryLightTweakSpecularStrength",1); + level._clearalltextafterhudelem = 0; + level.dofdefault["nearStart"] = 1; + level.dofdefault["nearEnd"] = 1; + level.dofdefault["farStart"] = 500; + level.dofdefault["farEnd"] = 500; + level.dofdefault["nearBlur"] = 4.5; + level.dofdefault["farBlur"] = 0.05; + precachemenu("dev_vision_noloc"); + precachemenu("dev_vision_exec"); + var_00 = getdvarint("scr_dof_enable"); + level.special_weapon_dof_funcs = []; + level.buttons = []; + if(!isdefined(level.vision_set_vision)) + { + level.vision_set_vision = []; + } + + if(!isdefined(level.vision_set_transition_ent)) + { + level.vision_set_transition_ent = spawnstruct(); + level.vision_set_transition_ent.vision_set = ""; + level.vision_set_transition_ent.time = 0; + } + + if(!isdefined(level.vision_set_fog)) + { + level.vision_set_fog = []; + create_default_vision_set_fog(level.script); + common_scripts\_artcommon::setfogsliders(); + } + + foreach(var_03, var_02 in level.vision_set_fog) + { + create_vision_set_vision(var_03); + } + + for(var_04 = 0;var_04 < level.players.size;var_04++) + { + var_05 = level.players[var_04]; + var_05.curdof = level.dofdefault["farStart"] - level.dofdefault["nearEnd"] / 2; + if(var_00) + { + var_05 thread adsdof(); + } + } + + thread tweakart(); + if(!isdefined(level.script)) + { + level.script = tolower(getdvar("mapname")); + } +} + +//Function Number: 2 +tweakart() +{ +} + +//Function Number: 3 +button_down(param_00,param_01) +{ + var_02 = level.player buttonpressed(param_00); + if(!var_02) + { + var_02 = level.player buttonpressed(param_01); + } + + if(!isdefined(level.buttons[param_00])) + { + level.buttons[param_00] = 0; + } + + if(gettime() < level.buttons[param_00]) + { + return 0; + } + + level.buttons[param_00] = gettime() + 400; + return var_02; +} + +//Function Number: 4 +create_vision_set_vision(param_00) +{ + if(!isdefined(level.vision_set_vision)) + { + level.vision_set_vision = []; + } + + var_01 = spawnstruct(); + var_01.name = param_00; + level.vision_set_vision[param_00] = var_01; + return var_01; +} + +//Function Number: 5 +updatefogentfromscript() +{ + if(!isdefined(level.vision_set_fog)) + { + } + + var_00 = level.vision_set_fog[level.vision_set_transition_ent.vision_set]; + if(isdefined(var_00.name)) + { + var_00.startdist = level.fognearplane; + var_00.halfwaydist = level.fogexphalfplane; + var_00.red = level.fogcolor[0]; + var_00.green = level.fogcolor[1]; + var_00.blue = level.fogcolor[2]; + var_00.maxopacity = level.fogmaxopacity; + var_00.sunfogenabled = 0; + if(level.sunfogenabled) + { + var_00.sunfogenabled = 1; + var_00.sunred = level.sunfogcolor[0]; + var_00.sungreen = level.sunfogcolor[1]; + var_00.sunblue = level.sunfogcolor[2]; + var_00.sundir = level.sunfogdir; + var_00.sunbeginfadeangle = level.sunfogbeginfadeangle; + var_00.var_1AF5 = level.sunfogendfadeangle; + var_00.normalfogscale = level.sunfogscale; + } + + if(getdvarint("scr_fog_disable")) + { + var_00.startdist = 1215752192; + var_00.halfwaydist = 1215752193; + var_00.red = 0; + var_00.green = 0; + var_00.blue = 0; + var_00.maxopacity = 0; + } + + maps\_utility::set_fog_to_ent_values(var_00,0); + } +} + +//Function Number: 6 +updatevisionset() +{ + if(!isdefined(level.vision_set_vision)) + { + return; + } + + if(!isdefined(level.vision_set_transition_ent)) + { + return; + } + + if(!isdefined(level.vision_set_transition_ent.vision_set)) + { + return; + } + + if(!isdefined(level.vision_set_vision[level.vision_set_transition_ent.vision_set])) + { + return; + } + + var_00 = level.vision_set_vision[level.vision_set_transition_ent.vision_set]; + if(!isdefined(var_00.selected)) + { + return; + } + + var_00.r_glow = getdvar("r_glowTweakEnable"); + var_00.r_glowradius0 = getdvar("r_glowTweakRadius0"); + var_00.r_glowbloomcutoff = getdvar("r_glowTweakBloomCutoff"); + var_00.r_glowbloomdesaturation = getdvar("r_glowTweakBloomDesaturation"); + var_00.r_glowbloomintensity0 = getdvar("r_glowTweakBloomIntensity0"); + var_00.r_filmenable = getdvar("r_filmTweakEnable"); + var_00.r_filmcontrast = getdvar("r_filmTweakContrast"); + var_00.r_filmbrightness = getdvar("r_filmTweakBrightness"); + var_00.r_filmdesaturation = getdvar("r_filmTweakDesaturation"); + var_00.r_filmdesaturationdark = getdvar("r_filmTweakDesaturationDark"); + var_00.r_filminvert = getdvar("r_filmTweakInvert"); + var_00.r_filmlighttint = getdvar("r_filmTweakLightTint"); + var_00.r_filmmediumtint = getdvar("r_filmTweakMediumTint"); + var_00.r_filmdarktint = getdvar("r_filmTweakDarkTint"); + var_00.r_primarylightusetweaks = getdvar("r_primaryLightUseTweaks"); + var_00.r_primarylighttweakdiffusestrength = getdvar("r_primaryLightTweakDiffuseStrength"); + var_00.r_primarylighttweakspecularstrength = getdvar("r_primaryLightTweakSpecularStrength"); +} + +//Function Number: 7 +fovslidercheck() +{ + if(level.dofdefault["nearStart"] >= level.dofdefault["nearEnd"]) + { + level.dofdefault["nearStart"] = level.dofdefault["nearEnd"] - 1; + setdvar("scr_dof_nearStart",level.dofdefault["nearStart"]); + } + + if(level.dofdefault["nearEnd"] <= level.dofdefault["nearStart"]) + { + level.dofdefault["nearEnd"] = level.dofdefault["nearStart"] + 1; + setdvar("scr_dof_nearEnd",level.dofdefault["nearEnd"]); + } + + if(level.dofdefault["farStart"] >= level.dofdefault["farEnd"]) + { + level.dofdefault["farStart"] = level.dofdefault["farEnd"] - 1; + setdvar("scr_dof_farStart",level.dofdefault["farStart"]); + } + + if(level.dofdefault["farEnd"] <= level.dofdefault["farStart"]) + { + level.dofdefault["farEnd"] = level.dofdefault["farStart"] + 1; + setdvar("scr_dof_farEnd",level.dofdefault["farEnd"]); + } + + if(level.dofdefault["farBlur"] >= level.dofdefault["nearBlur"]) + { + level.dofdefault["farBlur"] = level.dofdefault["nearBlur"] - 0.1; + setdvar("scr_dof_farBlur",level.dofdefault["farBlur"]); + } + + if(level.dofdefault["farStart"] <= level.dofdefault["nearEnd"]) + { + level.dofdefault["farStart"] = level.dofdefault["nearEnd"] + 1; + setdvar("scr_dof_farStart",level.dofdefault["farStart"]); + } +} + +//Function Number: 8 +fogslidercheck() +{ + if(level.sunfogbeginfadeangle >= level.sunfogendfadeangle) + { + level.sunfogbeginfadeangle = level.sunfogendfadeangle - 1; + setdvar("scr_sunFogBeginFadeAngle",level.sunfogbeginfadeangle); + } + + if(level.sunfogendfadeangle <= level.sunfogbeginfadeangle) + { + level.sunfogendfadeangle = level.sunfogbeginfadeangle + 1; + setdvar("scr_sunFogEndFadeAngle",level.sunfogendfadeangle); + } +} + +//Function Number: 9 +construct_vision_ents() +{ + if(!isdefined(level.vision_set_fog)) + { + level.vision_set_fog = []; + } + + var_00 = getentarray("trigger_multiple_visionset","classname"); + foreach(var_02 in var_00) + { + if(isdefined(var_02.script_visionset)) + { + construct_vision_set(var_02.script_visionset); + } + + if(isdefined(var_02.script_visionset_start)) + { + construct_vision_set(var_02.script_visionset_start); + } + + if(isdefined(var_02.script_visionset_end)) + { + construct_vision_set(var_02.script_visionset_end); + } + } +} + +//Function Number: 10 +construct_vision_set(param_00) +{ + if(isdefined(level.vision_set_fog[param_00])) + { + return; + } + + create_default_vision_set_fog(param_00); + create_vision_set_vision(param_00); + iprintlnbold("new vision: " + param_00); +} + +//Function Number: 11 +create_default_vision_set_fog(param_00) +{ + var_01 = maps\_utility::create_vision_set_fog(param_00); + var_01.startdist = 3764.17; + var_01.halfwaydist = 19391; + var_01.red = 0.661137; + var_01.green = 0.554261; + var_01.blue = 0.454014; + var_01.maxopacity = 0.7; + var_01.sunendfadeangle = 0; +} + +//Function Number: 12 +dumpsettings() +{ +} + +//Function Number: 13 +print_current_vision() +{ + var_00 = level.vision_set_vision[level.vision_set_transition_ent.vision_set]; + if(!isdefined(var_00.name)) + { + return; + } + + common_scripts\utility::fileprint_launcher_start_file(); + common_scripts\utility::fileprint_launcher("r_glow \" + getdvar("r_glowTweakEnable") + "\"); + common_scripts\utility::fileprint_launcher("r_glowRadius0 \" + getdvar("r_glowTweakRadius0") + "\"); + common_scripts\utility::fileprint_launcher("r_glowBloomCutoff \" + getdvar("r_glowTweakBloomCutoff") + "\"); + common_scripts\utility::fileprint_launcher("r_glowBloomDesaturation \" + getdvar("r_glowTweakBloomDesaturation") + "\"); + common_scripts\utility::fileprint_launcher("r_glowBloomIntensity0 \" + getdvar("r_glowTweakBloomIntensity0") + "\"); + common_scripts\utility::fileprint_launcher(" "); + common_scripts\utility::fileprint_launcher("r_filmEnable \" + getdvar("r_filmTweakEnable") + "\"); + common_scripts\utility::fileprint_launcher("r_filmContrast \" + getdvar("r_filmTweakContrast") + "\"); + common_scripts\utility::fileprint_launcher("r_filmBrightness \" + getdvar("r_filmTweakBrightness") + "\"); + common_scripts\utility::fileprint_launcher("r_filmDesaturation \" + getdvar("r_filmTweakDesaturation") + "\"); + common_scripts\utility::fileprint_launcher("r_filmDesaturationDark \" + getdvar("r_filmTweakDesaturationDark") + "\"); + common_scripts\utility::fileprint_launcher("r_filmInvert \" + getdvar("r_filmTweakInvert") + "\"); + common_scripts\utility::fileprint_launcher("r_filmLightTint \" + getdvar("r_filmTweakLightTint") + "\"); + common_scripts\utility::fileprint_launcher("r_filmMediumTint \" + getdvar("r_filmTweakMediumTint") + "\"); + common_scripts\utility::fileprint_launcher("r_filmDarkTint \" + getdvar("r_filmTweakDarkTint") + "\"); + common_scripts\utility::fileprint_launcher(" "); + common_scripts\utility::fileprint_launcher("r_primaryLightUseTweaks \" + getdvar("r_primaryLightUseTweaks") + "\"); + common_scripts\utility::fileprint_launcher("r_primaryLightTweakDiffuseStrength \" + getdvar("r_primaryLightTweakDiffuseStrength") + "\"); + common_scripts\utility::fileprint_launcher("r_primaryLightTweakSpecularStrength \" + getdvar("r_primaryLightTweakSpecularStrength") + "\"); + common_scripts\utility::fileprint_launcher_end_file("\\share\\raw\\vision\\" + var_00.name + ".vision",1); +} + +//Function Number: 14 +print_fog_ents() +{ + foreach(var_01 in level.vision_set_fog) + { + if(!isdefined(var_01.name)) + { + continue; + } + + common_scripts\utility::fileprint_launcher("\tent = maps\\_utility::create_vision_set_fog( \" + var_01.name + "\" );"); + if(isdefined(var_01.startdist)) + { + common_scripts\utility::fileprint_launcher("\tent.startDist = " + var_01.startdist + ";"); + } + + if(isdefined(var_01.halfwaydist)) + { + common_scripts\utility::fileprint_launcher("\tent.halfwayDist = " + var_01.halfwaydist + ";"); + } + + if(isdefined(var_01.red)) + { + common_scripts\utility::fileprint_launcher("\tent.red = " + var_01.red + ";"); + } + + if(isdefined(var_01.green)) + { + common_scripts\utility::fileprint_launcher("\tent.green = " + var_01.green + ";"); + } + + if(isdefined(var_01.blue)) + { + common_scripts\utility::fileprint_launcher("\tent.blue = " + var_01.blue + ";"); + } + + if(isdefined(var_01.maxopacity)) + { + common_scripts\utility::fileprint_launcher("\tent.maxOpacity = " + var_01.maxopacity + ";"); + } + + if(isdefined(var_01.sunendfadeangle)) + { + common_scripts\utility::fileprint_launcher("\tent.transitionTime = " + var_01.sunendfadeangle + ";"); + } + + if(isdefined(var_01.sunfogenabled)) + { + common_scripts\utility::fileprint_launcher("\tent.sunFogEnabled = " + var_01.sunfogenabled + ";"); + } + + if(isdefined(var_01.sunred)) + { + common_scripts\utility::fileprint_launcher("\tent.sunRed = " + var_01.sunred + ";"); + } + + if(isdefined(var_01.sungreen)) + { + common_scripts\utility::fileprint_launcher("\tent.sunGreen = " + var_01.sungreen + ";"); + } + + if(isdefined(var_01.sunblue)) + { + common_scripts\utility::fileprint_launcher("\tent.sunBlue = " + var_01.sunblue + ";"); + } + + if(isdefined(var_01.sundir)) + { + common_scripts\utility::fileprint_launcher("\tent.sunDir = " + var_01.sundir + ";"); + } + + if(isdefined(var_01.sunbeginfadeangle)) + { + common_scripts\utility::fileprint_launcher("\tent.sunBeginFadeAngle = " + var_01.sunbeginfadeangle + ";"); + } + + if(isdefined(var_01.var_1AF5)) + { + common_scripts\utility::fileprint_launcher("\tent.sunEndFadeAngle = " + var_01.var_1AF5 + ";"); + } + + if(isdefined(var_01.normalfogscale)) + { + common_scripts\utility::fileprint_launcher("\tent.normalFogScale = " + var_01.normalfogscale + ";"); + } + + common_scripts\utility::fileprint_launcher(" "); + } +} + +//Function Number: 15 +print_fog_ents_csv() +{ + foreach(var_01 in level.vision_set_fog) + { + if(!isdefined(var_01.name)) + { + continue; + } + + common_scripts\utility::fileprint_launcher("rawfile,vision/" + var_01.name + ".vision"); + } +} + +//Function Number: 16 +cloudlight(param_00,param_01,param_02,param_03) +{ + level.sunlight_bright = param_00; + level.sunlight_dark = param_01; + level.diffuse_high = param_02; + level.diffuse_low = param_03; + setdvar("r_lighttweaksunlight",level.sunlight_dark); + setdvar("r_lighttweakdiffusefraction",level.diffuse_low); + var_04 = "up"; + for(;;) + { + var_05 = getdvarfloat("r_lighttweaksunlight"); + var_06 = scale(1 + randomint(21)); + var_07 = randomint(2); + if(var_07) + { + var_06 = var_06 * -1; + } + + if(var_04 == "up") + { + var_08 = var_05 + scale(30) + var_06; + } + else + { + var_08 = var_05 - scale(30) + var_06; + } + + if(var_08 >= level.sunlight_bright) + { + var_08 = level.sunlight_bright; + var_04 = "down"; + } + + if(var_08 <= level.sunlight_dark) + { + var_08 = level.sunlight_dark; + var_04 = "up"; + } + + if(var_08 > var_05) + { + brighten(var_08,3 + randomint(3),0.05); + continue; + } + + darken(var_08,3 + randomint(3),0.05); + } +} + +//Function Number: 17 +brighten(param_00,param_01,param_02) +{ + var_03 = getdvarfloat("r_lighttweaksunlight"); + var_04 = param_00 - var_03; + var_05 = var_04 / param_01 / param_02; + while(param_01 > 0) + { + param_01 = param_01 - param_02; + var_03 = var_03 + var_05; + setdvar("r_lighttweaksunlight",var_03); + var_06 = var_03 - level.sunlight_dark / level.sunlight_bright - level.sunlight_dark; + var_07 = level.diffuse_high + level.diffuse_low - level.diffuse_high * var_06; + setdvar("r_lighttweakdiffusefraction",var_07); + wait param_02; + } +} + +//Function Number: 18 +darken(param_00,param_01,param_02) +{ + var_03 = getdvarfloat("r_lighttweaksunlight"); + var_04 = var_03 - param_00; + var_05 = var_04 / param_01 / param_02; + while(param_01 > 0) + { + param_01 = param_01 - param_02; + var_03 = var_03 - var_05; + setdvar("r_lighttweaksunlight",var_03); + var_06 = var_03 - level.sunlight_dark / level.sunlight_bright - level.sunlight_dark; + var_07 = level.diffuse_high + level.diffuse_low - level.diffuse_high * var_06; + setdvar("r_lighttweakdiffusefraction",var_07); + wait param_02; + } +} + +//Function Number: 19 +scale(param_00) +{ + var_01 = param_00 / 100; + return level.sunlight_dark + var_01 * level.sunlight_bright - level.sunlight_dark - level.sunlight_dark; +} + +//Function Number: 20 +adsdof() +{ + self.dof = level.dofdefault; + var_00 = 0; + for(;;) + { + wait 0.05; + if(level.level_specific_dof) + { + continue; + } + + if(getdvarint("scr_cinematic")) + { + updatecinematicdof(); + continue; + } + + if(getdvarint("scr_dof_enable") && !var_00) + { + updatedof(); + continue; + } + + setdefaultdepthoffield(); + } +} + +//Function Number: 21 +updatecinematicdof() +{ + var_00 = self playerads(); + if(var_00 == 1 && getdvarint("scr_cinematic_autofocus")) + { + var_01 = vectornormalize(anglestoforward(self getplayerangles())); + var_02 = bullettrace(self geteye(),self geteye() + var_01 * 100000,1,self); + var_03 = getaiarray(); + var_04 = 10000; + var_05 = -1; + var_06 = self geteye(); + var_07 = self getplayerangles(); + var_08 = 0; + var_09 = undefined; + for(var_0A = 0;var_0A < var_03.size;var_0A++) + { + var_0B = var_03[var_0A].origin; + var_0C = vectornormalize(var_0B - var_06); + var_0D = anglestoforward(var_07); + var_0E = vectordot(var_0D,var_0C); + if(var_0E > var_08) + { + var_08 = var_0E; + var_09 = var_03[var_0A].origin; + } + } + + if(var_08 < 0.923) + { + var_0F = distance(var_06,var_02["position"]); + } + else + { + var_0F = distance(var_06,var_09); + } + + changedofvalue("nearStart",1,200); + changedofvalue("nearEnd",var_0F,200); + changedofvalue("farStart",var_0F + 196,200); + changedofvalue("farEnd",var_0F + 196 * 2,200); + changedofvalue("nearBlur",6,0.1); + changedofvalue("farBlur",3.6,0.1); + } + else + { + var_0F = getdvarint("scr_cinematic_doffocus") * 39; + if(self.curdof != var_0F) + { + changedofvalue("nearStart",1,100); + changedofvalue("nearEnd",var_0F,100); + changedofvalue("farStart",var_0F + 196,100); + changedofvalue("farEnd",var_0F + 196 * 2,100); + changedofvalue("nearBlur",6,0.1); + changedofvalue("farBlur",3.6,0.1); + } + } + + self.curdof = self.dof["farStart"] - self.dof["nearEnd"] / 2; + self setdepthoffield(self.dof["nearStart"],self.dof["nearEnd"],self.dof["farStart"],self.dof["farEnd"],self.dof["nearBlur"],self.dof["farBlur"]); +} + +//Function Number: 22 +updatedof() +{ + var_00 = self playerads(); + if(var_00 == 0) + { + setdefaultdepthoffield(); + return; + } + + var_01 = self geteye(); + var_02 = self getplayerangles(); + var_03 = vectornormalize(anglestoforward(var_02)); + var_04 = bullettrace(var_01,var_01 + var_03 * 8192,1,self,1); + var_05 = getaiarray("axis"); + var_06 = self getcurrentweapon(); + if(isdefined(level.special_weapon_dof_funcs[var_06])) + { + [[ level.special_weapon_dof_funcs[var_06] ]](var_04,var_05,var_01,var_03,var_00); + return; + } + + var_07 = 10000; + var_08 = -1; + for(var_09 = 0;var_09 < var_05.size;var_09++) + { + var_0A = vectornormalize(var_05[var_09].origin - var_01); + var_0B = vectordot(var_03,var_0A); + if(var_0B < 0.923) + { + continue; + } + + var_0C = distance(var_01,var_05[var_09].origin); + if(var_0C - 30 < var_07) + { + var_07 = var_0C - 30; + } + + if(var_0C + 30 > var_08) + { + var_08 = var_0C + 30; + } + } + + if(var_07 > var_08) + { + var_07 = 256; + var_08 = 2500; + } + else + { + if(var_07 < 50) + { + var_07 = 50; + } + else if(var_07 > 512) + { + var_07 = 512; + } + + if(var_08 > 2500) + { + var_08 = 2500; + } + else if(var_08 < 1000) + { + var_08 = 1000; + } + } + + var_0D = distance(var_01,var_04["position"]); + if(var_07 > var_0D) + { + var_07 = var_0D - 30; + } + + if(var_07 < 1) + { + var_07 = 1; + } + + if(var_08 < var_0D) + { + var_08 = var_0D; + } + + setdoftarget(var_00,1,var_07,var_08,var_08 * 4,6,1.8); +} + +//Function Number: 23 +javelin_dof(param_00,param_01,param_02,param_03,param_04) +{ + if(param_04 < 0.88) + { + setdefaultdepthoffield(); + return; + } + + var_05 = 10000; + var_06 = -1; + var_05 = 2400; + var_07 = 2400; + for(var_08 = 0;var_08 < param_01.size;var_08++) + { + var_09 = vectornormalize(param_01[var_08].origin - param_02); + var_0A = vectordot(param_03,var_09); + if(var_0A < 0.923) + { + continue; + } + + var_0B = distance(param_02,param_01[var_08].origin); + if(var_0B < 2500) + { + var_0B = 2500; + } + + if(var_0B - 30 < var_05) + { + var_05 = var_0B - 30; + } + + if(var_0B + 30 > var_06) + { + var_06 = var_0B + 30; + } + } + + if(var_05 > var_06) + { + var_05 = 2400; + var_06 = 3000; + } + else + { + if(var_05 < 50) + { + var_05 = 50; + } + + if(var_06 > 2500) + { + var_06 = 2500; + } + else if(var_06 < 1000) + { + var_06 = 1000; + } + } + + var_0C = distance(param_02,param_00["position"]); + if(var_0C < 2500) + { + var_0C = 2500; + } + + if(var_05 > var_0C) + { + var_05 = var_0C - 30; + } + + if(var_05 < 1) + { + var_05 = 1; + } + + if(var_06 < var_0C) + { + var_06 = var_0C; + } + + if(var_07 >= var_05) + { + var_07 = var_05 - 1; + } + + setdoftarget(param_04,var_07,var_05,var_06,var_06 * 4,4,1.8); +} + +//Function Number: 24 +setdoftarget(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + if(param_00 == 1) + { + changedofvalue("nearStart",param_01,50); + changedofvalue("nearEnd",param_02,50); + changedofvalue("farStart",param_03,400); + changedofvalue("farEnd",param_04,400); + changedofvalue("nearBlur",param_05,0.1); + changedofvalue("farBlur",param_06,0.1); + } + else + { + lerpdofvalue("nearStart",param_01,param_00); + lerpdofvalue("nearEnd",param_02,param_00); + lerpdofvalue("farStart",param_03,param_00); + lerpdofvalue("farEnd",param_04,param_00); + lerpdofvalue("nearBlur",param_05,param_00); + lerpdofvalue("farBlur",param_06,param_00); + } + + self setdepthoffield(self.dof["nearStart"],self.dof["nearEnd"],self.dof["farStart"],self.dof["farEnd"],self.dof["nearBlur"],self.dof["farBlur"]); +} + +//Function Number: 25 +changedofvalue(param_00,param_01,param_02) +{ + if(self.dof[param_00] > param_01) + { + var_03 = self.dof[param_00] - param_01 * 0.5; + if(var_03 > param_02) + { + var_03 = param_02; + } + else if(var_03 < 1) + { + var_03 = 1; + } + + if(self.dof[param_00] - var_03 < param_01) + { + self.dof[param_00] = param_01; + return; + } + + self.dof[param_00] = self.dof[param_00] - var_03; + return; + } + + if(self.dof[param_00] < param_01) + { + var_03 = param_01 - self.dof[param_00] * 0.5; + if(var_03 > param_02) + { + var_03 = param_02; + } + else if(var_03 < 1) + { + var_03 = 1; + } + + if(self.dof[param_00] + var_03 > param_01) + { + self.dof[param_00] = param_01; + return; + } + + self.dof[param_00] = self.dof[param_00] + var_03; + return; + } +} + +//Function Number: 26 +lerpdofvalue(param_00,param_01,param_02) +{ + self.dof[param_00] = level.dofdefault[param_00] + param_01 - level.dofdefault[param_00] * param_02; +} + +//Function Number: 27 +dofvarupdate() +{ + level.dofdefault["nearStart"] = getdvarint("scr_dof_nearStart"); + level.dofdefault["nearEnd"] = getdvarint("scr_dof_nearEnd"); + level.dofdefault["farStart"] = getdvarint("scr_dof_farStart"); + level.dofdefault["farEnd"] = getdvarint("scr_dof_farEnd"); + level.dofdefault["nearBlur"] = getdvarfloat("scr_dof_nearBlur"); + level.dofdefault["farBlur"] = getdvarfloat("scr_dof_farBlur"); +} + +//Function Number: 28 +setdefaultdepthoffield() +{ + if(isdefined(self.dofdefault)) + { + self setdepthoffield(self.dofdefault["nearStart"],self.dofdefault["nearEnd"],self.dofdefault["farStart"],self.dofdefault["farEnd"],self.dofdefault["nearBlur"],self.dofdefault["farBlur"]); + return; + } + + self setdepthoffield(level.dofdefault["nearStart"],level.dofdefault["nearEnd"],level.dofdefault["farStart"],level.dofdefault["farEnd"],level.dofdefault["nearBlur"],level.dofdefault["farBlur"]); +} + +//Function Number: 29 +isdofdefault() +{ + if(level.dofdefault["nearStart"] != getdvarint("scr_dof_nearStart")) + { + return 0; + } + + if(level.dofdefault["nearEnd"] != getdvarint("scr_dof_nearEnd")) + { + return 0; + } + + if(level.dofdefault["farStart"] != getdvarint("scr_dof_farStart")) + { + return 0; + } + + if(level.dofdefault["farEnd"] != getdvarint("scr_dof_farEnd")) + { + return 0; + } + + if(level.dofdefault["nearBlur"] != getdvarint("scr_dof_nearBlur")) + { + return 0; + } + + if(level.dofdefault["farBlur"] != getdvarint("scr_dof_farBlur")) + { + return 0; + } + + return 1; +} + +//Function Number: 30 +hud_init() +{ + var_00 = 7; + var_01 = []; + var_02 = 15; + var_03 = int(var_00 / 2); + var_04 = 240 + var_03 * var_02; + var_05 = 0.5 / var_03; + var_06 = var_05; + for(var_07 = 0;var_07 < var_00;var_07++) + { + var_01[var_07] = _newhudelem(); + var_01[var_07].location = 0; + var_01[var_07].alignx = "left"; + var_01[var_07].aligny = "middle"; + var_01[var_07].foreground = 1; + var_01[var_07].fontscale = 2; + var_01[var_07].sort = 20; + if(var_07 == var_03) + { + var_01[var_07].alpha = 1; + } + else + { + var_01[var_07].alpha = var_06; + } + + var_01[var_07].x = 20; + var_01[var_07].y = var_04; + var_01[var_07] _settext("."); + if(var_07 == var_03) + { + var_05 = var_05 * -1; + } + + var_06 = var_06 + var_05; + var_04 = var_04 - var_02; + } + + level.spam_group_hudelems = var_01; + var_08 = _newhudelem(); + var_08.location = 0; + var_08.alignx = "center"; + var_08.aligny = "bottom"; + var_08.foreground = 1; + var_08.fontscale = 2; + var_08.sort = 20; + var_08.alpha = 1; + var_08.x = 320; + var_08.y = 244; + var_08 _settext("."); + level.crosshair = var_08; + var_08 = _newhudelem(); + var_08.location = 0; + var_08.alignx = "center"; + var_08.aligny = "bottom"; + var_08.foreground = 1; + var_08.fontscale = 2; + var_08.sort = 20; + var_08.alpha = 0; + var_08.x = 320; + var_08.y = 244; + var_08 setvalue(0); + level.crosshair_value = var_08; +} + +//Function Number: 31 +controler_hud_add(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = 520; + var_06 = 120; + var_07 = 18; + var_08 = 0.8; + var_09 = 20; + var_0A = 1.4; + if(!isdefined(param_02)) + { + param_02 = ""; + } + + if(!isdefined(level.hud_controler) || !isdefined(level.hud_controler[param_00])) + { + level.hud_controler[param_00] = _newhudelem(); + var_0B = _newhudelem(); + } + else + { + var_0B = level.hud_controler[param_01].description; + } + + level.hud_controler[param_00].location = 0; + level.hud_controler[param_00].alignx = "right"; + level.hud_controler[param_00].aligny = "middle"; + level.hud_controler[param_00].foreground = 1; + level.hud_controler[param_00].fontscale = 1.5; + level.hud_controler[param_00].sort = 20; + level.hud_controler[param_00].alpha = var_08; + level.hud_controler[param_00].x = var_05 + var_09; + level.hud_controler[param_00].y = var_06 + param_01 * var_07; + level.hud_controler[param_00] _settext(param_02); + level.hud_controler[param_00].base_button_text = param_02; + var_0B.location = 0; + var_0B.alignx = "left"; + var_0B.aligny = "middle"; + var_0B.foreground = 1; + var_0B.fontscale = var_0A; + var_0B.sort = 20; + var_0B.alpha = var_08; + var_0B.x = var_05 + var_09; + var_0B.y = var_06 + param_01 * var_07; + if(isdefined(param_04)) + { + var_0B setvalue(param_04); + } + + if(isdefined(param_03)) + { + var_0B _settext(param_03); + } + + level.hud_controler[param_00].description = var_0B; +} + +//Function Number: 32 +_newhudelem() +{ + if(!isdefined(level.scripted_elems)) + { + level.scripted_elems = []; + } + + var_00 = newhudelem(); + level.scripted_elems[level.scripted_elems.size] = var_00; + return var_00; +} + +//Function Number: 33 +_settext(param_00) +{ + self.realtext = param_00; + self settext("_"); + thread _clearalltextafterhudelem(); + var_01 = 0; + foreach(var_03 in level.scripted_elems) + { + if(isdefined(var_03.realtext)) + { + var_01 = var_01 + var_03.realtext.size; + var_03 settext(var_03.realtext); + } + } +} + +//Function Number: 34 +_clearalltextafterhudelem() +{ + if(level._clearalltextafterhudelem) + { + return; + } + + level._clearalltextafterhudelem = 1; + self clearalltextafterhudelem(); + wait 0.05; + level._clearalltextafterhudelem = 0; +} + +//Function Number: 35 +setgroup_up() +{ + reset_cmds(); + var_00 = undefined; + var_01 = getarraykeys(level.vision_set_vision); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + if(var_01[var_02] == level.vision_set_transition_ent.vision_set) + { + var_00 = var_02 + 1; + break; + } + } + + if(var_00 == var_01.size) + { + return; + } + + setcurrentgroup(var_01[var_00]); +} + +//Function Number: 36 +setgroup_down() +{ + reset_cmds(); + var_00 = undefined; + var_01 = getarraykeys(level.vision_set_vision); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + if(var_01[var_02] == level.vision_set_transition_ent.vision_set) + { + var_00 = var_02 - 1; + break; + } + } + + if(var_00 < 0) + { + return; + } + + setcurrentgroup(var_01[var_00]); +} + +//Function Number: 37 +reset_cmds() +{ +} + +//Function Number: 38 +setcurrentgroup(param_00) +{ + level.spam_model_current_group = param_00; + var_01 = getarraykeys(level.vision_set_vision); + var_02 = 0; + var_03 = int(level.spam_group_hudelems.size / 2); + for(var_04 = 0;var_04 < var_01.size;var_04++) + { + if(var_01[var_04] == param_00) + { + var_02 = var_04; + break; + } + } + + level.spam_group_hudelems[var_03] _settext(var_01[var_02]); + for(var_04 = 1;var_04 < level.spam_group_hudelems.size - var_03;var_04++) + { + if(var_02 - var_04 < 0) + { + level.spam_group_hudelems[var_03 + var_04] _settext("."); + continue; + } + + level.spam_group_hudelems[var_03 + var_04] _settext(var_01[var_02 - var_04]); + } + + for(var_04 = 1;var_04 < level.spam_group_hudelems.size - var_03;var_04++) + { + if(var_02 + var_04 > var_01.size - 1) + { + level.spam_group_hudelems[var_03 - var_04] _settext("."); + continue; + } + + level.spam_group_hudelems[var_03 - var_04] _settext(var_01[var_02 + var_04]); + } + + maps\_utility::vision_set_fog_changes(var_01[var_02],0); +} + +//Function Number: 39 +init_fog_transition() +{ + if(!isdefined(level.fog_transition_ent)) + { + level.fog_transition_ent = spawnstruct(); + level.fog_transition_ent.fogset = ""; + level.fog_transition_ent.time = 0; + } +} + +//Function Number: 40 +playerinit() +{ + var_00 = level.vision_set_transition_ent.vision_set; + level.vision_set_transition_ent.vision_set = ""; + level.vision_set_transition_ent.time = ""; + init_fog_transition(); + level.fog_transition_ent.fogset = ""; + level.fog_transition_ent.time = ""; + setcurrentgroup(var_00); +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_audio.gsc b/MW3/PC/SP/maps/_audio.gsc new file mode 100644 index 0000000..bde4b15 --- /dev/null +++ b/MW3/PC/SP/maps/_audio.gsc @@ -0,0 +1,3235 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_audio.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 175 + * Decompile Time: 3030 ms + * Timestamp: 10/27/2023 2:19:39 AM +*******************************************************************/ + +//Function Number: 1 +aud_init() +{ + if(!isdefined(level.aud)) + { + if(!isdefined(level.script)) + { + level.script = tolower(getdvar("mapname")); + } + + level.aud = spawnstruct(); + if(!isdefined(level._audio)) + { + level._audio = spawnstruct(); + } + + level._audio.var_16F6 = 0; + level._audio.message_handlers = []; + var_00 = spawnstruct(); + level._audio.index = spawnstruct(); + level._audio.index.common = get_index_struct(); + level._audio.index.var_16F9 = get_index_struct(); + index_common_presets(); + level._audio.var_16FA = []; + level._audio.progress_trigger_callbacks = []; + level._audio.var_16FC = []; + level._audio.filter_disabled = 0; + level._audio.var_16FE = ""; + level._audio.var_16FF = ["",""]; + level._audio.var_159D = 0; + level._audio.vo_duck_active = 0; + level._audio.sticky_threat = undefined; + level._audio.player_state = spawnstruct(); + level._audio.player_state.locamote = "idle"; + level._audio.player_state.locamote_prev = "idle"; + level.ambient_reverb = []; + level.ambient_track = []; + level.fxfireloopmod = 1; + level.reverb_track = ""; + level.eq_main_track = 0; + level.eq_mix_track = 1; + level.eq_track[level.eq_main_track] = ""; + level.eq_track[level.eq_mix_track] = ""; + lib_0068::func_1477(); + maps\_audio_dynamic_ambi::damb_init(); + maps\_audio_zone_manager::azm_init(); + thread lib_0087::func_14FC(); + lib_0086::func_1455(); + maps\_audio_music::mus_init(); + maps\_audio_whizby::whiz_init(); + maps\_audio_vehicles::vm_init(); + thread aud_level_fadein(); + thread aud_wait_for_mission_fail_music(); + aud_register_msg_handler(::_audio_msg_handler); + } +} + +//Function Number: 2 +audio_presets_dynamic_ambience(param_00,param_01) +{ + aud_print_error("CALLING DYNAMIC_AMBIENCE PRESET USING OLD METHOD!"); +} + +//Function Number: 3 +audio_presets_dynamic_ambience_components(param_00,param_01) +{ + aud_print_error("CALLING DYNAMIC_AMBIENCE_COMPONENTS PRESET USING OLD METHOD!"); +} + +//Function Number: 4 +audio_presets_dynamic_ambience_loop_definitions(param_00,param_01) +{ + aud_print_error("CALLING DYNAMIC_AMBIENCE_LOOP_DEFINITIONS PRESET USING OLD METHOD!"); +} + +//Function Number: 5 +audio_presets_mix(param_00,param_01) +{ + aud_print_error("CALLING MIX PRESET USING OLD METHOD!"); +} + +//Function Number: 6 +audio_presets_occlusion(param_00,param_01) +{ + aud_print_error("CALLING OCCLUSION PRESET USING OLD METHOD!"); +} + +//Function Number: 7 +audio_presets_reverb(param_00,param_01) +{ + aud_print_error("CALLING REVERB PRESET USING OLD METHOD!"); +} + +//Function Number: 8 +audio_presets_whizby(param_00,param_01) +{ + aud_print_error("CALLING WHIZBY PRESET USING OLD METHOD!"); +} + +//Function Number: 9 +audio_presets_zones(param_00,param_01) +{ + aud_print_error("CALLING ZONE PRESET USING OLD METHOD!"); +} + +//Function Number: 10 +aud_prime_stream(param_00,param_01,param_02) +{ + var_03 = 0; + if(isdefined(param_01)) + { + var_03 = param_01; + } + + self endon("release" + param_00); + for(;;) + { + self prefetchsound(param_00,"primed" + param_00); + self waittill("primed" + param_00); + if(!isdefined(self.primed_streams)) + { + self.primed_streams = []; + } + + self.primed_streams[param_00] = 1; + if(!var_03) + { + return; + } + else if(isdefined(param_02)) + { + wait param_02; + } + } +} + +//Function Number: 11 +aud_is_stream_primed(param_00) +{ + if(isdefined(self.primed_streams) && isdefined(self.primed_streams[param_00]) && self.primed_streams[param_00]) + { + return 1; + } + + return 0; +} + +//Function Number: 12 +aud_error_if_not_primed(param_00) +{ +} + +//Function Number: 13 +aud_release_stream(param_00,param_01) +{ + var_02 = 0; + if(isdefined(param_01)) + { + var_02 = param_01; + } + + self notify("release" + param_00); + if(var_02 && isdefined(self)) + { + self stopsounds(); + } +} + +//Function Number: 14 +aud_wait_till_primed(param_00) +{ + if(isdefined(self.primed_streams) && isdefined(self.primed_streams[param_00]) && self.primed_streams[param_00]) + { + return; + } + + self waittill("primed" + param_00); + self notify("release" + param_00); +} + +//Function Number: 15 +aud_prime_and_play_internal(param_00,param_01,param_02) +{ + aud_prime_stream(param_00); + if(isdefined(param_02) && param_02) + { + aud_slomo_wait(param_01); + } + else + { + wait param_01; + } + + self playsound(param_00,"sounddone"); + self waittill("sounddone"); + wait 0.05; + self delete(); +} + +//Function Number: 16 +aud_prime_and_play(param_00,param_01,param_02,param_03) +{ + var_04 = level.player.origin; + if(isdefined(param_02)) + { + var_04 = param_02; + } + + var_05 = spawn("script_origin",var_04); + var_05 thread aud_prime_and_play_internal(param_00,param_01,param_03); + return var_05; +} + +//Function Number: 17 +aud_add_progress_map(param_00,param_01) +{ + level._audio.var_16FC[param_00] = param_01; +} + +//Function Number: 18 +aud_get_progress_map(param_00) +{ + if(isdefined(level._audio.var_16FC[param_00])) + { + return level._audio.var_16FC[param_00]; + } +} + +//Function Number: 19 +is_deathsdoor_audio_enabled() +{ + if(!isdefined(level._audio.deathsdoor_enabled)) + { + return 1; + } + + return level._audio.deathsdoor_enabled; +} + +//Function Number: 20 +aud_enable_deathsdoor_audio() +{ + level.player.disable_breathing_sound = 0; + level._audio.deathsdoor_enabled = 1; +} + +//Function Number: 21 +aud_disable_deathsdoor_audio() +{ + level.player.disable_breathing_sound = 1; + level._audio.deathsdoor_enabled = 0; +} + +//Function Number: 22 +restore_after_deathsdoor() +{ + if(is_deathsdoor_audio_enabled() || isdefined(level._audio.var_171B)) + { + level._audio.var_171B = undefined; + thread aud_set_occlusion(level._audio.var_1467.var_171C); + thread aud_set_filter(level._audio.var_1467.var_171D); + thread lib_0086::func_1465(level._audio.var_1467.var_1457); + } +} + +//Function Number: 23 +set_deathsdoor() +{ + level._audio.var_171B = 1; + if(!isdefined(level._audio.var_1467)) + { + level._audio.var_1467 = spawnstruct(); + } + + level._audio.var_1467.var_171D = undefined; + level._audio.var_1467.var_171C = undefined; + level._audio.var_1467.var_1457 = undefined; + level._audio.var_1467.var_171D = level._audio.var_16FE; + level._audio.var_1467.var_171C = level._audio.var_171F; + level._audio.var_1467.var_1457 = level._audio.var_145A; + if(is_deathsdoor_audio_enabled()) + { + thread aud_set_filter("deathsdoor"); + thread lib_0086::func_1465("deathsdoor"); + } +} + +//Function Number: 24 +aud_set_mission_failed_music(param_00) +{ + level._audio.var_1721 = param_00; +} + +//Function Number: 25 +aud_wait_for_mission_fail_music() +{ + wait 0.05; + while(!common_scripts\utility::flag_exist("missionfailed")) + { + wait 0.05; + } + + var_00 = "shg_mission_failed_stinger"; + common_scripts\utility::flag_wait("missionfailed"); + if(isdefined(level._audio.var_1721)) + { + var_00 = level._audio.var_1721; + } + + if(soundexists(var_00)) + { + maps\_audio_music::mus_play(var_00,2,4); + } +} + +//Function Number: 26 +func_1723(param_00,param_01,param_02,param_03) +{ + var_04 = 7; + var_05 = ""; + var_06 = 0; + var_07 = []; + var_08 = []; + var_09 = 0; + var_0A = 0; + param_02 = get_indexed_preset("filter",param_00,param_03); + if(param_02 != -1) + { + var_06 = param_02; + } + else if((param_03 && aud_is_common_indexed()) || !param_03 && aud_is_local_indexed()) + { + return 0; + } + + while(var_05 != "EOF" && var_0A < 10) + { + var_05 = tablelookupbyrow(param_01,var_06,0); + if(var_05 != "") + { + var_0A = 0; + } + + while(var_05 == param_00) + { + var_09 = 1; + var_07 = undefined; + for(var_0B = 1;var_0B < var_04;var_0B++) + { + if(!isdefined(var_08[var_0B])) + { + var_08[var_0B] = tablelookupbyrow(param_01,0,var_0B); + } + + var_0C = var_08[var_0B]; + var_0D = tablelookupbyrow(param_01,var_06,var_0B); + if(var_0D != "") + { + switch(var_0C) + { + case "channel_name": + var_07 = spawnstruct(); + var_07.var_1724 = var_0D; + break; + + case "band": + var_07.var_1725 = int(var_0D); + break; + + case "type": + var_07.type = var_0D; + break; + + case "freq": + var_07.var_1726 = float(var_0D); + break; + + case "gain": + var_07.current_occlusion = float(var_0D); + break; + + case "q": + var_07.zone_occlusion_and_filtering_disabled = float(var_0D); + break; + + default: + break; + } + } + } + + if(!isdefined(level._audio.var_1729[param_00])) + { + level._audio.var_1729[param_00] = []; + } + + level._audio.var_1729[param_00][level._audio.var_1729[param_00].size] = var_07; + var_06++; + var_05 = tablelookupbyrow(param_01,var_06,0); + } + + var_0A++; + if(var_09) + { + return 1; + } + + var_06++; + } + + return 0; +} + +//Function Number: 27 +func_172A(param_00,param_01,param_02) +{ + if(!isdefined(level._audio.var_1729)) + { + level._audio.var_1729 = []; + } + + var_03 = 0; + if(isdefined(param_01)) + { + var_03 = param_01; + } + + if(!isdefined(level._audio.var_1729[param_00])) + { + level._audio.var_1729[param_00] = []; + var_04 = "soundtables/common_filter.csv"; + var_05 = get_filter_stringtable(); + var_06 = 1; + var_06 = func_1723(param_00,var_05,var_03,0); + if(!var_06) + { + var_06 = func_1723(param_00,var_04,var_03,1); + } + + if(!var_06) + { + return; + } + } + + level._audio.var_16FE = param_00; + if(level._audio.var_16FF[var_03] != param_00) + { + level._audio.var_16FF[var_03] = param_00; + var_07 = 10; + if(isdefined(param_02)) + { + var_07 = param_02; + } + + var_08 = 0; + foreach(var_0A in level._audio.var_1729[param_00]) + { + level.player seteq(var_0A.var_1724,var_03,var_0A.var_1725,var_0A.type,var_0A.current_occlusion,var_0A.var_1726,var_0A.zone_occlusion_and_filtering_disabled); + if(var_08 < var_07) + { + var_08++; + continue; + } + + var_08 = 0; + wait 0.05; + } + } +} + +//Function Number: 28 +aud_clear_filter(param_00) +{ + var_01 = 0; + if(isdefined(param_00)) + { + var_01 = param_00; + } + + level._audio.var_16FF[var_01] = ""; + aud_set_filter(undefined,var_01); +} + +//Function Number: 29 +aud_disable_zone_filter() +{ + level._audio.filter_zone_disabled = 1; +} + +//Function Number: 30 +aud_enable_zone_filter() +{ + level._audio.filter_zone_disabled = undefined; +} + +//Function Number: 31 +aud_is_zone_filter_enabled() +{ + return !isdefined(level._audio.filter_zone_disabled); +} + +//Function Number: 32 +aud_set_filter(param_00,param_01,param_02,param_03) +{ + if(level._audio.filter_disabled) + { + return; + } + + if(isdefined(level.player.ent_flag) && isdefined(level.player.ent_flag["player_has_red_flashing_overlay"]) && level.player maps\_utility::ent_flag("player_has_red_flashing_overlay")) + { + return; + } + + var_04 = 0; + if(isdefined(param_01)) + { + var_04 = param_01; + } + + if(!isdefined(param_00) || isdefined(param_00) && param_00 == "") + { + level._audio.var_16FE = undefined; + level.player deactivateeq(var_04); + return; + } + + thread func_172A(param_00,param_01,param_02); +} + +//Function Number: 33 +aud_disable_filter_setting(param_00) +{ + level._audio.filter_disabled = 1; +} + +//Function Number: 34 +aud_enable_filter_setting(param_00) +{ + level._audio.filter_disabled = 0; +} + +//Function Number: 35 +aud_set_timescale_internal(param_00) +{ + var_01 = "soundtables/common_timescale.csv"; + var_02 = 2; + var_03 = ""; + var_04 = 0; + var_05 = []; + var_06 = []; + var_07 = 0; + var_08 = 0; + var_09 = get_indexed_preset("timescale",param_00,1); + if(var_09 != -1) + { + var_04 = var_09; + } + else if(aud_is_common_indexed()) + { + return 0; + } + + while(var_03 != "EOF" && var_08 < 10) + { + var_03 = tablelookupbyrow(var_01,var_04,0); + if(var_03 != "") + { + var_08 = 0; + } + + while(var_03 == param_00) + { + var_07 = 1; + var_05 = undefined; + for(var_0A = 1;var_0A < var_02 + 1;var_0A++) + { + if(!isdefined(var_06[var_0A])) + { + var_06[var_0A] = tablelookupbyrow(var_01,0,var_0A); + } + + var_0B = var_06[var_0A]; + var_0C = tablelookupbyrow(var_01,var_04,var_0A); + if(var_0C != "") + { + switch(var_0B) + { + case "channel_name": + var_05 = spawnstruct(); + var_05.var_1724 = var_0C; + break; + + case "scalefactor": + var_05.var_1732 = float(var_0C); + break; + + default: + aud_print_error("In timescale preset table, common_timescale.csv, there is an improperly labeled parameter column, \" + var_0B + "\"."); + break; + } + } + } + + if(isdefined(var_05)) + { + level._audio.timescale_presets[param_00][level._audio.timescale_presets[param_00].size] = var_05; + } + + var_04++; + var_03 = tablelookupbyrow(var_01,var_04,0); + } + + var_08++; + if(var_07) + { + return 1; + } + + var_04++; + } + + return 0; +} + +//Function Number: 36 +aud_set_timescale_threaded(param_00,param_01) +{ + var_02 = "default"; + if(isdefined(param_00)) + { + var_02 = param_00; + } + + if(!isdefined(level._audio.timescale_presets)) + { + level._audio.timescale_presets = []; + } + + var_03 = 1; + if(!isdefined(level._audio.timescale_presets[var_02])) + { + level._audio.timescale_presets[var_02] = []; + var_03 = aud_set_timescale_internal(var_02); + } + + if(!var_03) + { + return; + } + + var_04 = 10; + if(isdefined(param_01)) + { + var_04 = param_01; + } + + var_05 = 0; + foreach(var_07 in level._audio.timescale_presets[var_02]) + { + soundsettimescalefactor(var_07.var_1724,var_07.var_1732); + if(var_05 < var_04) + { + var_05++; + continue; + } + + var_05 = 0; + wait 0.05; + } +} + +//Function Number: 37 +aud_set_timescale(param_00,param_01) +{ + thread aud_set_timescale_threaded(param_00,param_01); +} + +//Function Number: 38 +aud_set_occlusion_internal(param_00) +{ + if(!isdefined(param_00)) + { + return; + } + + var_01 = "soundtables/common_occlusion.csv"; + var_02 = 5; + var_03 = ""; + var_04 = 0; + var_05 = []; + var_06 = []; + var_07 = 0; + var_08 = 0; + var_09 = get_indexed_preset("occlusion",param_00,1); + if(var_09 != -1) + { + var_04 = var_09; + } + else if(aud_is_common_indexed()) + { + return 0; + } + + while(var_03 != "EOF" && var_08 < 10) + { + var_03 = tablelookupbyrow(var_01,var_04,0); + if(var_03 != "") + { + var_08 = 0; + } + + while(var_03 == param_00) + { + var_07 = 1; + var_05 = undefined; + for(var_0A = 1;var_0A < var_02 + 1;var_0A++) + { + if(!isdefined(var_06[var_0A])) + { + var_06[var_0A] = tablelookupbyrow(var_01,0,var_0A); + } + + var_0B = var_06[var_0A]; + var_0C = tablelookupbyrow(var_01,var_04,var_0A); + if(var_0C != "") + { + switch(var_0B) + { + case "channel_name": + var_05 = spawnstruct(); + var_05.var_1724 = var_0C; + break; + + case "frequency": + var_05.var_1726 = float(var_0C); + break; + + case "type": + var_05.type = var_0C; + break; + + case "gain": + var_05.current_occlusion = float(var_0C); + break; + + case "q": + var_05.zone_occlusion_and_filtering_disabled = float(var_0C); + break; + + default: + aud_print_error("In occlusion preset table, common_occlusion.csv, there is an improperly labeled parameter column, \" + var_0B + "\"."); + break; + } + } + } + + if(!isdefined(var_05.var_1726)) + { + var_05.var_1726 = 600; + } + + if(!isdefined(var_05.type)) + { + var_05.type = "highshelf"; + } + + if(!isdefined(var_05.current_occlusion)) + { + var_05.current_occlusion = -12; + } + + if(!isdefined(var_05.zone_occlusion_and_filtering_disabled)) + { + var_05.zone_occlusion_and_filtering_disabled = 1; + } + + level._audio.q[param_00][level._audio.q[param_00].size] = var_05; + var_04++; + var_03 = tablelookupbyrow(var_01,var_04,0); + } + + var_08++; + if(var_07) + { + return 1; + } + + var_04++; + } + + return 0; +} + +//Function Number: 39 +aud_set_occlusion_threaded(param_00,param_01) +{ + var_02 = "default"; + if(isdefined(param_00)) + { + var_02 = param_00; + } + + if(!isdefined(level._audio.q)) + { + level._audio.q = []; + } + + var_03 = 1; + if(!isdefined(level._audio.q[var_02])) + { + level._audio.q[var_02] = []; + var_03 = aud_set_occlusion_internal(var_02); + } + + if(!var_03) + { + return; + } + + level._audio.var_171F = var_02; + if(!isdefined(level._audio.var_159D) && level._audio.var_159D) + { + var_04 = 10; + if(isdefined(param_01)) + { + var_04 = var_04; + } + + var_05 = 0; + foreach(var_07 in level._audio.q[var_02]) + { + level.player setocclusion(var_07.var_1724,var_07.var_1726,var_07.type,var_07.current_occlusion,var_07.zone_occlusion_and_filtering_disabled); + if(var_05 < var_04) + { + var_05++; + continue; + } + + var_05 = 0; + wait 0.05; + } + } +} + +//Function Number: 40 +aud_set_occlusion(param_00,param_01) +{ + if(isdefined(level.player.ent_flag) && isdefined(level.player.ent_flag["player_has_red_flashing_overlay"]) && level.player maps\_utility::ent_flag("player_has_red_flashing_overlay")) + { + return; + } + + if(!isdefined(param_00)) + { + level._audio.var_16FE = undefined; + return; + } + + thread aud_set_occlusion_threaded(param_00,param_01); +} + +//Function Number: 41 +aud_deactivate_occlusion(param_00) +{ + var_01 = 10; + if(isdefined(param_00)) + { + var_01 = var_01; + } + + var_02 = 0; + foreach(var_05, var_04 in level._audio.indexed.var_152C) + { + level.player deactivateocclusion(var_05); + if(var_02 < var_01) + { + var_02++; + continue; + } + + var_02 = 0; + wait 0.05; + } +} + +//Function Number: 42 +aud_disable_zone_occlusion_and_filtering(param_00) +{ + var_01 = 10; + if(isdefined(param_00)) + { + var_01 = var_01; + } + + aud_set_filter(undefined,0,var_01); + aud_set_filter(undefined,1,var_01); + aud_deactivate_occlusion(var_01); + level._audio.var_159D = 1; +} + +//Function Number: 43 +aud_enable_zone_occlusion_and_filtering(param_00) +{ + var_01 = undefined; + var_02 = "default"; + var_03 = 10; + if(isdefined(param_00)) + { + var_03 = var_03; + } + + if(isdefined(level._audio.zone_mgr.current_zone) && isdefined(level._audio.zone_mgr.zones[level._audio.zone_mgr.current_zone])) + { + var_04 = maps\_audio_zone_manager::azm_get_current_zone(); + var_05 = level._audio.zone_mgr.zones[var_04]; + if(isdefined(var_05["occlusion"]) && var_05["occlusion"] != "none") + { + var_02 = var_05["occlusion"]; + } + + if(isdefined(var_05["filter"]) && var_05["filter"] != "none") + { + var_01 = var_05["filter"]; + } + } + + if(level._audio.var_171F != var_02) + { + var_02 = level._audio.var_171F; + } + + level._audio.var_159D = 0; + aud_set_filter(var_01,0,var_03); + aud_set_filter(undefined,1,var_03); + aud_set_occlusion(var_02,var_03); +} + +//Function Number: 44 +aud_use_level_zones(param_00) +{ + level._audio.level_audio_reverb_function = param_00; +} + +//Function Number: 45 +aud_use_level_reverb(param_00) +{ + level._audio.level_audio_filter_function = param_00; +} + +//Function Number: 46 +aud_use_level_filters(param_00) +{ + level._audio.var_173E = param_00; +} + +//Function Number: 47 +aud_use_string_tables(param_00) +{ + var_01 = 1; + if(isdefined(param_00)) + { + var_01 = param_00; + } + + level._audio.var_16F6 = 1; + maps\_audio_zone_manager::azm_use_string_table(); + lib_0086::func_145B(); + maps\_audio_dynamic_ambi::damb_use_string_table(); + lib_0087::func_150E(); + maps\_audio_whizby::whiz_use_string_table(); + if(var_01) + { + aud_index_presets(); + } + + maps\_audio_whizby::whiz_set_preset("default"); +} + +//Function Number: 48 +set_stringtable_mapname(param_00) +{ + aud_use_string_tables(0); + level._audio.message_handlers["map"] = param_00; + aud_index_presets(); +} + +//Function Number: 49 +get_stringtable_mapname() +{ + if(isdefined(level._audio.message_handlers["map"])) + { + return level._audio.message_handlers["map"]; + } + + return common_scripts\utility::get_template_level(); +} + +//Function Number: 50 +set_mix_stringtable(param_00) +{ + level._audio.message_handlers["mix"] = param_00; +} + +//Function Number: 51 +get_mix_stringtable() +{ + if(!isdefined(level._audio.message_handlers["mix"])) + { + return "soundtables/" + get_stringtable_mapname() + "_mix.csv"; + } + + return "soundtables/" + level._audio.message_handlers["mix"]; +} + +//Function Number: 52 +set_damb_stringtable(param_00) +{ + level._audio.message_handlers["damb"] = param_00; +} + +//Function Number: 53 +get_damb_stringtable() +{ + if(!isdefined(level._audio.message_handlers["damb"])) + { + return "soundtables/" + get_stringtable_mapname() + "_damb.csv"; + } + + return "soundtables/" + level._audio.message_handlers["damb"]; +} + +//Function Number: 54 +set_damb_component_stringtable(param_00) +{ + level._audio.message_handlers["damb_comp"] = param_00; +} + +//Function Number: 55 +get_damb_component_stringtable(param_00) +{ + if(!isdefined(level._audio.message_handlers["damb_comp"])) + { + return "soundtables/" + get_stringtable_mapname() + "_damb_components.csv"; + } + + return "soundtables/" + level._audio.message_handlers["damb_comp"]; +} + +//Function Number: 56 +set_damb_loops_stringtable(param_00) +{ + level._audio.message_handlers["damb_loops"] = param_00; +} + +//Function Number: 57 +get_damb_loops_stringtable(param_00) +{ + if(!isdefined(level._audio.message_handlers["damb_loops"])) + { + return "soundtables/" + get_stringtable_mapname() + "_damb_loops.csv"; + } + + return "soundtables/" + level._audio.message_handlers["damb_loops"]; +} + +//Function Number: 58 +set_reverb_stringtable(param_00) +{ + level._audio.message_handlers["reverb"] = param_00; +} + +//Function Number: 59 +get_reverb_stringtable() +{ + if(!isdefined(level._audio.message_handlers["reverb"])) + { + return "soundtables/" + get_stringtable_mapname() + "_reverb.csv"; + } + + return "soundtables/" + level._audio.message_handlers["reverb"]; +} + +//Function Number: 60 +set_filter_stringtable(param_00) +{ + level._audio.message_handlers["filter"] = param_00; +} + +//Function Number: 61 +get_filter_stringtable() +{ + if(!isdefined(level._audio.message_handlers["filter"])) + { + return "soundtables/" + get_stringtable_mapname() + "_filter.csv"; + } + + return "soundtables/" + level._audio.message_handlers["filter"]; +} + +//Function Number: 62 +set_zone_stringtable(param_00) +{ + level._audio.message_handlers["zone"] = param_00; +} + +//Function Number: 63 +get_zone_stringtable() +{ + if(!isdefined(level._audio.message_handlers["zone"])) + { + return "soundtables/" + get_stringtable_mapname() + "_zone.csv"; + } + + return "soundtables/" + level._audio.message_handlers["zone"]; +} + +//Function Number: 64 +set_occlusion_stringtable(param_00) +{ + level._audio.message_handlers["occlusion"] = param_00; +} + +//Function Number: 65 +get_occlusion_stringtable() +{ + if(!isdefined(level._audio.message_handlers["occlusion"])) + { + return "soundtables/" + get_stringtable_mapname() + "_occlusion.csv"; + } + + return "soundtables/" + level._audio.message_handlers["occlusion"]; +} + +//Function Number: 66 +aud_register_msg_handler(param_00) +{ + level._audio.var_16FA[level._audio.var_16FA.size] = param_00; +} + +//Function Number: 67 +aud_send_msg(param_00,param_01,param_02) +{ + thread aud_dispatch_msg(param_00,param_01,param_02); +} + +//Function Number: 68 +aud_dispatch_msg(param_00,param_01,param_02) +{ + var_03 = 0; + var_04 = 0; + foreach(var_06 in level._audio.var_16FA) + { + var_04 = self [[ var_06 ]](param_00,param_01); + if(!var_03 && isdefined(var_04) && var_04 == 1) + { + var_03 = var_04; + continue; + } + + if(!var_03 && !isdefined(var_04)) + { + var_03 = 1; + } + } + + if(isdefined(param_02)) + { + self notify(param_02); + } + + if(!var_03) + { + aud_print_warning("\tAUDIO MESSAGE NOT HANDLED: " + param_00); + } +} + +//Function Number: 69 +aud_get_player_locamote_state() +{ + return level._audio.player_state.locamote; +} + +//Function Number: 70 +aud_get_threat_level(param_00,param_01,param_02) +{ + var_03 = 0; + var_04 = aud_get_sticky_threat(); + if(isdefined(var_04)) + { + var_03 = var_04; + } + else + { + var_05 = 3; + var_06 = 10; + var_07 = 100; + if(isdefined(param_00)) + { + var_05 = param_00; + } + + if(isdefined(param_02)) + { + var_07 = param_02; + } + + if(isdefined(param_02)) + { + var_06 = param_01; + } + + var_08 = 36 * var_07; + var_09 = 36 * var_06; + var_0A = getaiarray("bad_guys"); + var_0B = 0; + var_0C = 0; + foreach(var_0E in var_0A) + { + if(isdefined(var_0E.var_74B) && var_0E.var_74B >= var_05) + { + var_0F = distance(level.player.origin,var_0E.origin); + if(var_0F < var_08) + { + var_0B++; + if(var_0F < var_09) + { + var_10 = 1; + } + else + { + var_10 = 1 - var_10 - var_0A / var_09 - var_0A; + } + + var_0C = var_0C + var_10; + } + } + } + + if(var_0B > 0) + { + var_03 = var_0C / var_0B; + } + else + { + var_03 = 0; + } + } + + return var_03; +} + +//Function Number: 71 +aud_get_sticky_threat() +{ + return level._audio.sticky_threat; +} + +//Function Number: 72 +aud_set_sticky_threat(param_00) +{ + level._audio.sticky_threat = param_00; +} + +//Function Number: 73 +aud_clear_sticky_threat() +{ + level._audio.sticky_threat = undefined; +} + +//Function Number: 74 +aud_num_alive_enemies(param_00) +{ + var_01 = 0; + var_02 = 3600; + if(isdefined(param_00)) + { + var_02 = 36 * param_00; + } + + var_03 = getaiarray("bad_guys"); + foreach(var_05 in var_03) + { + if(isalive(var_05)) + { + var_06 = distance(level.player.origin,var_05.origin); + if(var_06 < var_02) + { + var_01++; + } + } + } + + return var_01; +} + +//Function Number: 75 +_audio_msg_handler(param_00,param_01) +{ + var_02 = 1; + switch(param_00) + { + case "level_fade_to_black": + var_03 = param_01[0]; + var_04 = param_01[1]; + wait var_03; + lib_0087::func_150F("mute_all",var_04); + break; + + case "generic_building_bomb_shake": + level.player playsound("sewer_bombs"); + break; + + case "start_player_slide_trigger": + break; + + case "end_player_slide_trigger": + break; + + case "missile_fired": + break; + + case "msg_audio_fx_ambientExp": + break; + + case "aud_play_sound_at": + aud_play_sound_at(param_01.alias,param_01.pos); + break; + + case "aud_play_dynamic_explosion": + if(isdefined(param_01.var_1755)) + { + var_05 = param_01.var_1755; + } + else + { + var_05 = undefined; + } + + if(isdefined(param_01.var_1756)) + { + var_06 = param_01.var_1756; + } + else + { + var_06 = undefined; + } + + if(isdefined(param_01.velocity)) + { + var_07 = param_01.velocity; + } + else + { + var_07 = undefined; + } + + aud_play_dynamic_explosion(param_01.var_1759,param_01.var_1758,param_01.var_1757,var_05,var_06,var_07); + break; + + case "aud_play_conversation": + aud_play_conversation(param_00,param_01); + break; + + case "xm25_contact_explode": + if(soundexists("xm25_proj_explo")) + { + var_08 = param_01; + thread common_scripts\utility::play_sound_in_space("xm25_proj_explo",var_08); + } + break; + + case "light_flicker_on": + var_09 = param_01; + aud_handle_flickering_light(var_09); + break; + + default: + var_02 = 0; + break; + } + + return var_02; +} + +//Function Number: 76 +aud_handle_flickering_light(param_00) +{ + var_01 = 0; + switch(param_00.model) + { + case "furniture_lamp_table1": + case "com_cafe_light_part1_off": + case "furniture_lamp_floor1_off": + var_01 = 1; + if(soundexists("paris_lamplight_flicker")) + { + thread common_scripts\utility::play_sound_in_space("paris_lamplight_flicker",param_00.origin); + } + break; + + default: + var_01 = 0; + break; + } + + return var_01; +} + +//Function Number: 77 +aud_play_conversation(param_00,param_01) +{ + var_02 = param_01; + var_03 = []; + for(var_04 = 0;var_04 < var_02.size;var_04++) + { + var_03[var_04] = var_02[var_04].ent.battlechatter; + var_02[var_04].ent.battlechatter = 0; + } + + foreach(var_06 in var_02) + { + if(isdefined(var_06.delay)) + { + wait var_06.delay; + } + + var_07 = spawn("script_origin",(0,0,0)); + var_07 linkto(var_06.ent,"",(0,0,0),(0,0,0)); + var_07 playsound(var_06.sound,"sounddone"); + var_07 waittill("sounddone"); + wait 0.05; + var_07 delete(); + } + + for(var_04 = 0;var_04 < var_02.size;var_04++) + { + var_02[var_04].ent.battlechatter = var_03[var_04]; + } +} + +//Function Number: 78 +trigger_multiple_audio_register_callback(param_00) +{ + if(!isdefined(level._audio.trigger_functions)) + { + level._audio.trigger_functions = []; + } + + for(var_01 = 0;var_01 < param_00.size;var_01++) + { + var_02 = param_00[var_01]; + var_03 = var_02[0]; + var_04 = var_02[1]; + level._audio.trigger_functions[var_03] = var_04; + } + + if(isdefined(level._audio.var_175E)) + { + foreach(var_03 in level._audio.var_175E) + { + } + + level._audio.var_175E = undefined; + } +} + +//Function Number: 79 +get_target_ent_target() +{ + var_00 = common_scripts\utility::get_target_ent(); + return var_00.target; +} + +//Function Number: 80 +get_target_ent_origin() +{ + var_00 = common_scripts\utility::get_target_ent(); + return var_00.origin; +} + +//Function Number: 81 +get_target_ent_target_ent() +{ + var_00 = common_scripts\utility::get_target_ent(); + return var_00 common_scripts\utility::get_target_ent(); +} + +//Function Number: 82 +get_target_ent_target_ent_origin() +{ + var_00 = get_target_ent_target_ent(); + return var_00.origin; +} + +//Function Number: 83 +get_zone_from(param_00,param_01) +{ + if(!isdefined(param_00) || !isdefined(param_01)) + { + return undefined; + } + + if(param_01) + { + return param_00[1]; + } + + return param_00[0]; +} + +//Function Number: 84 +get_zone_to(param_00,param_01) +{ + if(!isdefined(param_00) || !isdefined(param_01)) + { + return undefined; + } + + if(param_01) + { + return param_00[0]; + } + + return param_00[1]; +} + +//Function Number: 85 +trigger_multiple_audio_trigger(param_00) +{ + if(!isdefined(level._audio)) + { + level._audio = spawnstruct(); + } + + if(!isdefined(level._audio.trigger_functions)) + { + level._audio.trigger_functions = []; + } + + var_01 = undefined; + if(isdefined(param_00) && param_00) + { + if(isdefined(self.ambient)) + { + var_01 = strtok(self.ambient," "); + } + } + else if(isdefined(self.script_audio_zones)) + { + var_01 = strtok(self.script_audio_zones," "); + } + else if(isdefined(self.var_1767)) + { + var_01 = strtok(self.var_1767," "); + } + + if(isdefined(var_01) && var_01.size == 2) + { + } + else if(isdefined(var_01) && var_01.size == 1) + { + for(;;) + { + self waittill("trigger",var_02); + maps\_audio_zone_manager::azm_start_zone(var_01[0],self.script_duration); + } + } + + if(isdefined(self.var_1768)) + { + if(!isdefined(level._audio.var_16FC[self.var_1768])) + { + aud_print_error("Trying to set a progress_map_function without defining the envelope in the level.aud.envs array."); + self.var_1768 = undefined; + } + } + + if(!isdefined(level._audio.var_175E)) + { + level._audio.var_175E = []; + } + + if(isdefined(self.script_audio_enter_func)) + { + level._audio.var_175E[level._audio.var_175E.size] = self.script_audio_enter_func; + } + + if(isdefined(self.script_audio_exit_func)) + { + level._audio.var_175E[level._audio.var_175E.size] = self.script_audio_exit_func; + } + + if(isdefined(self.script_audio_progress_func)) + { + level._audio.var_175E[level._audio.var_175E.size] = self.script_audio_progress_func; + } + + if(isdefined(self.script_audio_point_func)) + { + level._audio.var_175E[level._audio.var_175E.size] = self.script_audio_point_func; + } + + if(!isdefined(self.var_176D)) + { + self.var_176D = "blend"; + } + + var_03 = undefined; + var_04 = undefined; + var_05 = undefined; + if(isdefined(self.target)) + { + if(!isdefined(common_scripts\utility::get_target_ent())) + { + aud_print_error("Audo Zone Trigger at " + self.origin + " has defined a target, " + self.target + ", but that target doesn\'t exist."); + return; + } + + if(isdefined(get_target_ent_target())) + { + var_03 = get_target_ent_origin(); + if(!isdefined(get_target_ent_target_ent())) + { + aud_print_error("Audo Zone Trigger at " + self.origin + " has defined a target, " + get_target_ent_target() + ", but that target doesn\'t exist."); + return; + } + + var_04 = get_target_ent_target_ent_origin(); + } + else + { + var_06 = common_scripts\utility::get_target_ent(); + var_07 = 2 * self.origin - var_06.origin; + var_08 = vectortoangles(var_07); + var_03 = get_target_ent_origin(); + var_04 = var_03 + var_07; + if(angleclamp180(var_08[0]) < 45) + { + var_03 = (var_03[0],var_03[1],0); + var_04 = (var_04[0],var_04[1],0); + } + } + + var_05 = distance(var_03,var_04); + } + + var_09 = 0; + for(;;) + { + self waittill("trigger",var_02); + if(aud_is_specops() && var_02 != level.player) + { + continue; + } + + if(isdefined(var_03) && isdefined(var_04)) + { + var_0A = trigger_multiple_audio_progress(var_03,var_04,var_05,var_02.origin); + if(var_0A < 0.5) + { + var_09 = 0; + if(isdefined(self.script_audio_enter_msg)) + { + if(isdefined(var_01) && isdefined(var_01[0])) + { + aud_send_msg(self.script_audio_enter_msg,var_01[0]); + } + else + { + aud_send_msg(self.script_audio_enter_msg,"front"); + } + } + + if(isdefined(self.script_audio_enter_func)) + { + if(isdefined(var_01) && isdefined(var_01[0])) + { + if(isdefined(level._audio.trigger_functions[self.script_audio_enter_func])) + { + [[ level._audio.trigger_functions[self.script_audio_enter_func] ]](var_01[0]); + } + } + else if(isdefined(level._audio.trigger_functions[self.script_audio_enter_func])) + { + [[ level._audio.trigger_functions[self.script_audio_enter_func] ]]("front"); + } + } + } + else + { + var_09 = 1; + if(isdefined(self.script_audio_enter_msg)) + { + if(isdefined(var_01) && isdefined(var_01[1])) + { + aud_send_msg(self.script_audio_enter_msg,var_01[1]); + } + else + { + aud_send_msg(self.script_audio_enter_msg,"back"); + } + } + + if(isdefined(self.script_audio_enter_func)) + { + if(isdefined(var_01) && isdefined(var_01[1])) + { + if(isdefined(level._audio.trigger_functions[self.script_audio_enter_func])) + { + [[ level._audio.trigger_functions[self.script_audio_enter_func] ]](var_01[1]); + } + } + else if(isdefined(level._audio.trigger_functions[self.script_audio_enter_func])) + { + [[ level._audio.trigger_functions[self.script_audio_enter_func] ]]("back"); + } + } + } + } + else + { + if(isdefined(self.script_audio_enter_msg)) + { + aud_send_msg(self.script_audio_enter_msg); + } + + if(isdefined(self.script_audio_enter_func)) + { + if(isdefined(level._audio.trigger_functions[self.script_audio_enter_func])) + { + [[ level._audio.trigger_functions[self.script_audio_enter_func] ]](); + } + } + } + + var_0B = undefined; + if(isdefined(get_zone_from(var_01,var_09)) && isdefined(get_zone_to(var_01,var_09))) + { + var_0B = maps\_audio_zone_manager::azmx_get_blend_args(get_zone_from(var_01,var_09),get_zone_to(var_01,var_09)); + if(!isdefined(var_0B)) + { + return; + } + + var_0B.mode = self.var_176D; + } + + if(isdefined(var_0B) && aud_is_zone_filter_enabled()) + { + if(isdefined(var_0B.filter1) || isdefined(var_0B.filter2)) + { + level.player deactivateeq(1); + } + } + + var_0C = -1; + var_0A = -1; + while(var_02 istouching(self)) + { + if(isdefined(self.script_audio_point_func)) + { + var_0D = trigger_multiple_audio_progress_point(var_03,var_04,var_02.origin); + if(isdefined(level._audio.trigger_functions[self.script_audio_point_func])) + { + [[ level._audio.trigger_functions[self.script_audio_point_func] ]](var_0D); + } + } + + if(isdefined(var_03) && isdefined(var_04)) + { + var_0A = trigger_multiple_audio_progress(var_03,var_04,var_05,var_02.origin); + if(isdefined(self.var_1768)) + { + var_0A = aud_map(var_0A,level._audio.var_16FC[self.var_1768]); + } + + if(var_0A != var_0C) + { + if(isdefined(get_zone_from(var_01,var_09)) && isdefined(get_zone_to(var_01,var_09))) + { + maps\_audio_zone_manager::azm_print_enter_blend(get_zone_from(var_01,var_09),get_zone_to(var_01,var_09),var_0A); + } + + if(isdefined(self.script_audio_progress_msg)) + { + aud_send_msg(self.script_audio_progress_msg,var_0A); + } + + if(isdefined(self.script_audio_progress_func)) + { + if(isdefined(level._audio.trigger_functions[self.script_audio_progress_func])) + { + [[ level._audio.trigger_functions[self.script_audio_progress_func] ]](var_0A); + } + } + + if(isdefined(var_0B)) + { + trigger_multiple_audio_blend(var_0A,var_0B,var_09); + } + + var_0C = var_0A; + maps\_audio_zone_manager::azm_print_progress(var_0A); + } + } + + if(isdefined(self.var_1770)) + { + wait self.var_1770; + continue; + } + + wait 0.1; + } + + if(isdefined(var_03) && isdefined(var_04)) + { + if(var_0A > 0.5) + { + if(isdefined(var_01) && isdefined(var_01[1])) + { + maps\_audio_zone_manager::azm_set_current_zone(var_01[1]); + } + + if(isdefined(self.script_audio_exit_msg)) + { + if(isdefined(var_01) && isdefined(var_01[1])) + { + aud_send_msg(self.script_audio_exit_msg,var_01[1]); + } + else + { + aud_send_msg(self.script_audio_exit_msg,"back"); + } + } + + if(isdefined(self.script_audio_exit_func)) + { + if(isdefined(var_01) && isdefined(var_01[1])) + { + if(isdefined(level._audio.trigger_functions[self.script_audio_exit_func])) + { + [[ level._audio.trigger_functions[self.script_audio_exit_func] ]](var_01[1]); + } + } + else if(isdefined(level._audio.trigger_functions[self.script_audio_exit_func])) + { + [[ level._audio.trigger_functions[self.script_audio_exit_func] ]]("back"); + } + } + + var_0A = 1; + } + else + { + if(isdefined(var_01) && isdefined(var_01[0])) + { + maps\_audio_zone_manager::azm_set_current_zone(var_01[0]); + } + + if(isdefined(self.script_audio_exit_msg)) + { + if(isdefined(var_01) && isdefined(var_01[0])) + { + aud_send_msg(self.script_audio_exit_msg,var_01[0]); + } + else + { + aud_send_msg(self.script_audio_exit_msg,"front"); + } + } + + if(isdefined(self.script_audio_exit_func)) + { + if(isdefined(var_01) && isdefined(var_01[0])) + { + if(isdefined(level._audio.trigger_functions[self.script_audio_exit_func])) + { + [[ level._audio.trigger_functions[self.script_audio_exit_func] ]](var_01[0]); + } + } + else if(isdefined(level._audio.trigger_functions[self.script_audio_exit_func])) + { + [[ level._audio.trigger_functions[self.script_audio_exit_func] ]]("front"); + } + } + + var_0A = 0; + } + + if(isdefined(var_0B)) + { + trigger_multiple_audio_blend(var_0A,var_0B,var_09); + } + + continue; + } + + if(isdefined(self.script_audio_exit_msg)) + { + aud_send_msg(self.script_audio_exit_msg); + } + + if(isdefined(self.script_audio_exit_func)) + { + if(isdefined(level._audio.trigger_functions[self.script_audio_exit_func])) + { + [[ level._audio.trigger_functions[self.script_audio_exit_func] ]](); + } + } + } +} + +//Function Number: 86 +trigger_multiple_audio_progress(param_00,param_01,param_02,param_03) +{ + var_04 = vectornormalize(param_01 - param_00); + var_05 = param_03 - param_00; + var_06 = vectordot(var_05,var_04); + var_06 = var_06 / param_02; + return clamp(var_06,0,1); +} + +//Function Number: 87 +trigger_multiple_audio_progress_point(param_00,param_01,param_02) +{ + var_03 = vectornormalize(param_01 - param_00); + var_04 = param_02 - param_00; + var_05 = vectordot(var_04,var_03); + return var_03 * var_05 + param_00; +} + +//Function Number: 88 +trigger_multiple_audio_blend(param_00,param_01,param_02) +{ + param_00 = clamp(param_00,0,1); + if(param_02) + { + param_00 = 1 - param_00; + } + + var_03 = param_01.mode; + if(var_03 == "blend") + { + var_04 = 1 - param_00; + var_05 = param_00; + maps\_audio_zone_manager::azmx_blend_zones(var_04,var_05,param_01); + return; + } + + if(param_00 < 0.33) + { + maps\_audio_zone_manager::azm_start_zone(param_01.zone_from_name); + return; + } + + if(param_00 > 0.66) + { + maps\_audio_zone_manager::azm_start_zone(param_01.zone_to_name); + return; + } +} + +//Function Number: 89 +aud_play_dynamic_explosion(param_00,param_01,param_02,param_03,param_04,param_05) +{ + var_06 = spawn("script_origin",level.player.origin); + var_07 = spawn("script_origin",param_00); + if(!isdefined(param_03)) + { + param_03 = distance(var_07.origin,var_06.origin); + } + + if(!isdefined(param_04)) + { + var_08 = 30; + param_04 = 36 * var_08; + } + + var_09 = aud_do_dynamic_explosion_math(var_07.origin,var_06.origin,param_03,param_04); + var_0A = distance(var_09.origin,var_7B[0]); + if(!isdefined(var_06)) + { + var_06 = 1800; + } + + var_0B = var_0A / var_06; + if(isdefined(var_7B) && var_7B.size == 2) + { + var_0C = spawn("script_origin",var_09.origin); + var_0D = spawn("script_origin",var_09.origin); + var_0C playsound(param_02); + var_0D playsound(param_03); + var_0C moveto(var_7B[0],var_0B,0,0); + var_0D moveto(var_7B[1],var_0B,0,0); + } +} + +//Function Number: 90 +aud_do_dynamic_explosion_math(param_00,param_01,param_02,param_03) +{ + var_04 = param_01 - param_00; + var_05 = aud_copy_vector(var_04); + var_06 = aud_copy_vector(var_04); + var_07 = aud_vector_magnitude_2d(var_05); + var_08 = 0.5 * param_02 / var_07; + var_05 = aud_scale_vector_2d(var_05,var_08); + var_06 = aud_scale_vector_2d(var_06,var_08); + var_05 = aud_rotate_vector_yaw(var_05,90); + var_06 = aud_rotate_vector_yaw(var_06,-90); + var_09 = aud_vector_magnitude_2d(var_04); + var_0A = param_03 / var_09; + var_0B = aud_scale_vector_2d(var_04,var_0A); + var_0B = var_0B + var_04; + var_0B = var_0B + var_04; + var_05 = var_05 + var_0B; + var_06 = var_06 + var_0B; + var_0C = []; + return var_7B; +} + +//Function Number: 91 +aud_get_optional_param(param_00,param_01) +{ + var_02 = param_01; + if(isdefined(param_00)) + { + var_02 = param_00; + } + + return var_02; +} + +//Function Number: 92 +aud_scale_vector_2d(param_00,param_01) +{ + return (param_00[0] * param_01,param_00[1] * param_01,param_00[2]); +} + +//Function Number: 93 +aud_scale_vector(param_00,param_01) +{ + return (param_00[0] * param_01,param_00[1] * param_01,param_00[2] * param_01); +} + +//Function Number: 94 +aud_rotate_vector_yaw(param_00,param_01) +{ + var_02 = param_00[0] * cos(param_01) - param_00[1] * sin(param_01); + var_03 = param_00[0] * sin(param_01) + param_00[1] * cos(param_01); + return (var_02,var_03,param_00[2]); +} + +//Function Number: 95 +aud_copy_vector(param_00) +{ + var_01 = (0,0,0); + var_01 = var_01 + param_00; + return var_01; +} + +//Function Number: 96 +aud_vector_magnitude_2d(param_00) +{ + return sqrt(param_00[0] * param_00[0] + param_00[1] * param_00[1]); +} + +//Function Number: 97 +aud_print_synch(param_00) +{ + aud_print(param_00,"synch_frame"); +} + +//Function Number: 98 +aud_print(param_00,param_01) +{ +} + +//Function Number: 99 +aud_print_warning(param_00) +{ + aud_print(param_00,"warning"); +} + +//Function Number: 100 +aud_print_error(param_00) +{ + aud_print(param_00,"error"); +} + +//Function Number: 101 +aud_print_debug(param_00) +{ + aud_print(param_00); +} + +//Function Number: 102 +aud_print_zone(param_00) +{ + aud_print(param_00,"zone"); +} + +//Function Number: 103 +aud_print_zone_small(param_00) +{ + aud_print(param_00,"zone_small"); +} + +//Function Number: 104 +equal_strings(param_00,param_01) +{ + if(isdefined(param_00) && isdefined(param_01)) + { + return param_00 == param_01; + } + + return !isdefined(param_00) && !isdefined(param_01); +} + +//Function Number: 105 +isundefined(param_00) +{ + return !isdefined(param_00); +} + +//Function Number: 106 +delete_on_sounddone(param_00) +{ + param_00 waittill("sounddone"); + param_00 delete_sound_entity(); +} + +//Function Number: 107 +delete_sound_entity() +{ + common_scripts\utility::delaycall(0.05,::delete); +} + +//Function Number: 108 +aud_fade_out_and_delete(param_00,param_01) +{ + param_00 scalevolume(0,param_01); + param_00 common_scripts\utility::delaycall(param_01 + 0.05,::stopsounds); + param_00 common_scripts\utility::delaycall(param_01 + 0.1,::delete); +} + +//Function Number: 109 +aud_fade_loop_out_and_delete(param_00,param_01) +{ + param_00 scalevolume(0,param_01); + wait param_01 + 0.05; + param_00 stoploopsound(); + wait 0.05; + param_00 delete(); +} + +//Function Number: 110 +aud_min(param_00,param_01) +{ + if(param_00 <= param_01) + { + return param_00; + } + + return param_01; +} + +//Function Number: 111 +aud_max(param_00,param_01) +{ + if(param_00 >= param_01) + { + return param_00; + } + + return param_01; +} + +//Function Number: 112 +aud_clamp(param_00,param_01,param_02) +{ + if(param_00 < param_01) + { + param_00 = param_01; + } + else if(param_00 > param_02) + { + param_00 = param_02; + } + + return param_00; +} + +//Function Number: 113 +aud_fade_sound_in(param_00,param_01,param_02,param_03,param_04) +{ + param_02 = aud_clamp(param_02,0,1); + param_03 = aud_max(0.05,param_03); + var_05 = 0; + if(isdefined(param_04)) + { + var_05 = param_04; + } + + if(var_05) + { + param_00 playloopsound(param_01); + } + else + { + param_00 playsound(param_01); + } + + param_00 scalevolume(0); + param_00 common_scripts\utility::delaycall(0.05,::scalevolume,param_02,param_03); +} + +//Function Number: 114 +aud_map2(param_00,param_01) +{ + var_04 = param_01[0][0]; + var_05 = param_01[param_01.size - 1][0]; + var_06 = param_01[0][1]; + var_07 = param_01[param_01.size - 1][1]; + var_08 = undefined; + if(param_00 <= var_04) + { + var_08 = var_06; + } + else if(param_00 >= var_05) + { + var_08 = var_07; + } + else + { + var_09 = undefined; + var_02 = var_04; + var_0A = var_06; + for(var_03 = 0;var_03 < param_01.size;var_03++) + { + var_09 = param_01[var_03][0]; + var_0B = param_01[var_03][1]; + if(param_00 >= var_02 && param_00 < var_09) + { + var_0C = param_00 - var_02 / var_09 - var_02; + var_08 = var_0A + var_0C * var_0B - var_0A; + break; + } + + var_02 = var_09; + var_0A = var_0B; + } + } + + return var_08; +} + +//Function Number: 115 +aud_map(param_00,param_01) +{ + var_02 = 0; + var_03 = param_01.size; + var_04 = param_01[0]; + for(var_05 = 1;var_05 < param_01.size;var_05++) + { + var_06 = param_01[var_05]; + if(param_00 >= var_04[0] && param_00 <= var_06[0]) + { + var_07 = var_04[0]; + var_08 = var_06[0]; + var_09 = var_04[1]; + var_0A = var_06[1]; + var_0B = param_00 - var_07 / var_08 - var_07; + var_02 = var_09 + var_0B * var_0A - var_09; + break; + } + else + { + var_04 = var_06; + } + } + + return var_02; +} + +//Function Number: 116 +aud_map_range(param_00,param_01,param_02,param_03) +{ + var_04 = param_00 - param_01 / param_02 - param_01; + var_04 = clamp(var_04,0,1); + return aud_map(var_04,param_03); +} + +//Function Number: 117 +aud_smooth(param_00,param_01,param_02) +{ + return param_00 + param_02 * param_01 - param_00; +} + +//Function Number: 118 +aud_is_even(param_00) +{ + return param_00 == int(param_00 / 2) * 2; +} + +//Function Number: 119 +all_mix_channels_except(param_00) +{ + var_01 = lib_0087::func_152B(); + var_02 = []; + foreach(var_04 in param_00) + { + var_01[var_04] = undefined; + } + + foreach(var_04, var_07 in var_01) + { + var_02[var_02.size] = var_04; + } + + return var_02; +} + +//Function Number: 120 +all_mix_channels() +{ + var_00 = lib_0087::func_152B(); + var_01 = []; + foreach(var_04, var_03 in var_00) + { + var_01[var_01.size] = var_04; + } + + return var_01; +} + +//Function Number: 121 +aud_setalltimescalefactors(param_00) +{ + param_00 = clamp(param_00,0,1); + var_01 = all_mix_channels(); + aud_settimescalefactors(var_01,param_00); +} + +//Function Number: 122 +aud_settimescalefactors(param_00,param_01) +{ + thread audx_settimescalefactors(param_00,param_01); +} + +//Function Number: 123 +audx_settimescalefactors(param_00,param_01) +{ + var_02 = 8; + var_03 = 0; + var_04 = 0; + var_05 = 0; + while(var_04 < param_00.size) + { + var_05 = var_04; + for(var_03 = 0;var_03 < var_02 && var_05 < param_00.size;var_03++) + { + soundsettimescalefactor(param_00[var_05],param_01); + var_05++; + } + + wait 0.05; + var_04 = var_04 + var_02; + } +} + +//Function Number: 124 +aud_set_breach_time_scale_factors() +{ + var_00 = all_mix_channels(); + aud_settimescalefactors(var_00,1); + wait 0.5; + soundsettimescalefactor("Music",0); + soundsettimescalefactor("Menu",0); + soundsettimescalefactor("local3",0); + soundsettimescalefactor("Mission",0); + soundsettimescalefactor("Announcer",0); + soundsettimescalefactor("Bulletimpact",0.6); + soundsettimescalefactor("Voice",0.4); + soundsettimescalefactor("effects1",0.2); + soundsettimescalefactor("effects2",0.2); + soundsettimescalefactor("local",0.2); + soundsettimescalefactor("local2",0.2); + soundsettimescalefactor("physics",0.2); + soundsettimescalefactor("ambient",0.5); + soundsettimescalefactor("auto",0.5); +} + +//Function Number: 125 +play_2d_sound_internal(param_00) +{ + self playsound(param_00,"sounddone"); + self waittill("sounddone"); + wait 0.05; + self delete(); +} + +//Function Number: 126 +aud_delay_play_2d_sound_internal(param_00,param_01,param_02) +{ + if(isdefined(param_02) && param_02) + { + aud_slomo_wait(param_01); + } + else + { + wait param_01; + } + + var_03 = spawn("script_origin",level.player.origin); + var_03 thread play_2d_sound_internal(param_00); + return var_03; +} + +//Function Number: 127 +aud_play_2d_sound(param_00) +{ + var_01 = spawn("script_origin",level.player.origin); + var_01 thread play_2d_sound_internal(param_00); + return var_01; +} + +//Function Number: 128 +aud_delay_play_2d_sound(param_00,param_01,param_02) +{ + var_03 = thread aud_delay_play_2d_sound_internal(param_00,param_01,param_02); + return var_03; +} + +//Function Number: 129 +audx_play_linked_sound_internal(param_00,param_01,param_02) +{ + if(param_00 == "loop") + { + level endon(param_02 + "internal"); + self playloopsound(param_01); + level waittill(param_02); + if(isdefined(self)) + { + self stoploopsound(param_01); + wait 0.05; + self delete(); + return; + } + + return; + } + + if(param_00 == "oneshot") + { + self playsound(param_01,"sounddone"); + self waittill("sounddone"); + if(isdefined(self)) + { + self delete(); + return; + } + } +} + +//Function Number: 130 +audx_monitor_linked_entity_health(param_00,param_01) +{ + level endon(param_01); + while(isdefined(self)) + { + wait 0.1; + } + + level notify(param_01 + "internal"); + if(isdefined(param_00)) + { + param_00 stoploopsound(); + wait 0.05; + param_00 delete(); + } +} + +//Function Number: 131 +aud_play_linked_sound(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = "oneshot"; + if(isdefined(param_02)) + { + var_05 = param_02; + } + + var_06 = spawn("script_origin",param_01.origin); + if(isdefined(param_04)) + { + var_06 linkto(param_01,"tag_origin",param_04,(0,0,0)); + } + else + { + var_06 linkto(param_01); + } + + if(var_05 == "loop") + { + param_01 thread audx_monitor_linked_entity_health(var_06,param_03); + } + + var_06 thread audx_play_linked_sound_internal(var_05,param_00,param_03); + return var_06; +} + +//Function Number: 132 +aud_playsound_attach(param_00,param_01,param_02) +{ + var_03 = spawn("script_origin",param_01.origin); + var_03 linkto(param_01); + var_04 = "oneshot"; + if(isdefined(param_02)) + { + var_04 = param_02; + } + + if(var_04 == "loop") + { + var_03 playloopsound(param_00); + } + else + { + var_03 playsound(param_00); + } + + return var_03; +} + +//Function Number: 133 +aud_play_sound_at_internal(param_00,param_01,param_02) +{ + self playsound(param_00,"sounddone"); + if(isdefined(param_02)) + { + wait param_02; + self stopsounds(); + } + else + { + self waittill("sounddone"); + } + + wait 0.05; + self delete(); +} + +//Function Number: 134 +aud_play_sound_at(param_00,param_01,param_02) +{ + var_03 = spawn("script_origin",param_01); + var_03 thread aud_play_sound_at_internal(param_00,param_01,param_02); + return var_03; +} + +//Function Number: 135 +aud_prime_point_source_loop(param_00,param_01) +{ + var_02 = spawn("script_origin",param_01); + var_02 thread aud_prime_stream(param_00,1,0.1); + return var_02; +} + +//Function Number: 136 +aud_play_primed_point_source_loop(param_00,param_01,param_02) +{ + var_03 = aud_get_optional_param(param_01,1); + var_04 = aud_get_optional_param(param_02,1); + aud_fade_sound_in(self,param_00,var_03,var_04,1); + aud_release_stream(param_00); +} + +//Function Number: 137 +aud_play_point_source_loop(param_00,param_01,param_02,param_03) +{ + var_04 = aud_get_optional_param(param_02,1); + var_05 = aud_get_optional_param(param_03,1); + var_06 = spawn("script_origin",param_01); + aud_fade_sound_in(var_06,param_00,var_04,var_05,1); + return var_06; +} + +//Function Number: 138 +aud_stop_point_source_loop(param_00,param_01) +{ + var_02 = aud_get_optional_param(param_01,1); + aud_fade_out_and_delete(param_00,var_02); +} + +//Function Number: 139 +aud_set_point_source_loop_volume(param_00,param_01,param_02) +{ + param_01 = clamp(param_01,0,1); + var_03 = aud_get_optional_param(param_02,1); + param_00 scalevolume(param_01,var_03); +} + +//Function Number: 140 +aud_play_loops_on_destructables_array(param_00,param_01,param_02,param_03) +{ + var_04 = 0.1; + if(isdefined(param_03)) + { + var_04 = param_03; + } + + var_05 = getentarray(param_00,"script_noteworthy"); + var_06 = var_05.size; + foreach(var_08 in var_05) + { + var_08 playloopsound(param_01); + var_08.var_17A1 = 0; + } + + while(var_06 > 0) + { + wait var_04; + foreach(var_08 in var_05) + { + if(var_08.health < 0 && !var_08.var_17A1) + { + var_06--; + var_08 stoploopsound(); + var_08.var_17A1 = 1; + if(isdefined(param_02)) + { + common_scripts\utility::play_sound_in_space(param_02,var_08.origin); + } + } + } + } +} + +//Function Number: 141 +aud_set_music_submix(param_00,param_01) +{ + var_02 = "music_submix"; + if(!lib_0087::func_1525(var_02)) + { + lib_0087::func_1522(var_02,["music",1],param_01); + lib_0087::func_1515(var_02); + } + + lib_0087::func_151E(var_02,param_00,param_01); +} + +//Function Number: 142 +aud_set_ambi_submix(param_00,param_01) +{ + var_02 = "ambi_submix"; + if(!lib_0087::func_1525(var_02)) + { + lib_0087::func_1522(var_02,["ambience",1],param_01); + lib_0087::func_1515(var_02); + } + + lib_0087::func_151E(var_02,param_00,param_01); +} + +//Function Number: 143 +aud_fade_in_music(param_00) +{ + var_01 = 10; + if(isdefined(param_00)) + { + var_01 = param_00; + } + + lib_0087::func_1517("mute_music",0.1); + wait 0.05; + lib_0087::func_1520("mute_music",var_01); +} + +//Function Number: 144 +aud_check_sound_done() +{ + self endon("cleanup"); + if(!isdefined(self.sounddone)) + { + self.sounddone = 0; + } + + self waittill("sounddone"); + if(isdefined(self)) + { + self.sounddone = 1; + self notify("cleanup"); + } +} + +//Function Number: 145 +aud_in_zone(param_00) +{ + return equal_strings(maps\_audio_zone_manager::azm_get_current_zone(),param_00); +} + +//Function Number: 146 +aud_find_exploder(param_00) +{ + if(isdefined(level.createfxexploders)) + { + var_01 = level.createfxexploders["" + param_00]; + if(isdefined(var_01)) + { + return var_01[0]; + } + } + else + { + for(var_02 = 0;var_02 < level.createfxent.size;var_02++) + { + var_03 = level.createfxent[var_02]; + if(!isdefined(var_03)) + { + continue; + } + + if(var_03.v["type"] != "exploder") + { + continue; + } + + if(!isdefined(var_03.v["exploder"])) + { + continue; + } + + if(int(var_03.v["exploder"]) != param_00) + { + continue; + } + + return var_03; + } + } + + return undefined; +} + +//Function Number: 147 +aud_duck(param_00,param_01,param_02,param_03) +{ + thread audx_duck(param_00,param_01,param_02,param_03); +} + +//Function Number: 148 +audx_duck(param_00,param_01,param_02,param_03) +{ + param_01 = clamp(param_01,0,10); + var_04 = 1; + if(isdefined(param_02)) + { + var_04 = param_02; + } + + var_05 = var_04; + if(isdefined(param_03)) + { + var_05 = param_03; + } + + lib_0087::func_1517(param_00,var_04); + wait param_01; + lib_0087::func_1520(param_00,var_05); +} + +//Function Number: 149 +get_index_struct() +{ + var_00 = spawnstruct(); + var_00.var_171D = []; + var_00.indexed = []; + var_00.var_171C = []; + var_00.var_17AA = []; + var_00.var_17AB = 0; + return var_00; +} + +//Function Number: 150 +aud_index_presets() +{ + level._audio.index.common.indexed = index_stringtable_internal(get_mix_stringtable()); + level._audio.index.common.var_171D = index_stringtable_internal(get_filter_stringtable()); + level._audio.index.common.var_17AB = 1; +} + +//Function Number: 151 +aud_is_local_indexed() +{ + return level._audio.index.common.var_17AB; +} + +//Function Number: 152 +index_common_presets() +{ + level._audio.index.var_16F9.indexed = index_stringtable_internal("soundtables/common_mix.csv"); + level._audio.index.var_16F9.var_171C = index_stringtable_internal("soundtables/common_occlusion.csv"); + level._audio.index.var_16F9.var_17AA = index_stringtable_internal("soundtables/common_timescale.csv"); + level._audio.index.var_16F9.var_171D = index_stringtable_internal("soundtables/common_filter.csv"); + level._audio.index.var_16F9.var_17AB = 1; +} + +//Function Number: 153 +aud_is_common_indexed() +{ + return level._audio.index.var_16F9.var_17AB; +} + +//Function Number: 154 +get_indexed_preset(param_00,param_01,param_02) +{ + var_03 = 1; + if(isdefined(param_02)) + { + var_03 = param_02; + } + + var_04 = undefined; + if(var_03) + { + var_04 = level._audio.index.var_16F9; + } + else + { + var_04 = level._audio.index.common; + } + + var_05 = undefined; + switch(param_00) + { + case "mix": + var_05 = var_04.indexed[param_01]; + break; + + case "filter": + var_05 = var_04.var_171D[param_01]; + break; + + case "occlusion": + var_05 = level._audio.index.var_16F9.var_171C[param_01]; + break; + + case "timescale": + var_05 = level._audio.index.var_16F9.var_17AA[param_01]; + break; + + default: + break; + } + + if(!isdefined(var_05)) + { + var_05 = -1; + } + + return var_05; +} + +//Function Number: 155 +get_mix_index(param_00,param_01) +{ + if(param_01) + { + return level._audio.index.var_16F9.indexed[param_00]; + } + + return level._audio.index.common.indexed[param_00]; +} + +//Function Number: 156 +index_stringtable_internal(param_00) +{ + var_01 = ""; + var_02 = 0; + var_03 = 1; + var_04 = []; + var_05 = ""; + while(var_02 < 10 && var_05 != "EOF") + { + var_05 = tablelookupbyrow(param_00,var_03,0); + if(isdefined(var_05) && var_05 != var_01 && var_05 != "" && var_05 != "EOF") + { + var_02 = 0; + var_01 = var_05; + var_04[var_01] = var_03; + continue; + } + + if(var_05 == "") + { + var_02++; + } + + var_03++; + } + + return var_04; +} + +//Function Number: 157 +aud_percent_chance(param_00) +{ + return randomintrange(1,100) <= param_00; +} + +//Function Number: 158 +aud_start_slow_mo_gunshot_callback(param_00,param_01) +{ + level endon("aud_stop_slow_mo_gunshot"); + var_02 = getaiarray("axis"); + foreach(var_04 in var_02) + { + var_04 thread aud_impact_monitor(param_01); + } + + var_06 = 0; + var_07 = level.player getcurrentweapon(); + for(;;) + { + if(level.player attackbuttonpressed()) + { + if(!var_06) + { + var_06 = 1; + [[ param_00 ]](var_07); + } + } + else + { + var_06 = 0; + } + + wait 0.05; + } +} + +//Function Number: 159 +aud_impact_monitor(param_00) +{ + level endon("aud_stop_slow_mo_gunshot"); + var_01 = level.player getcurrentweapon(); + for(;;) + { + self waittill("damage",var_02,var_03,var_04,var_05,var_06); + if(isdefined(var_05)) + { + [[ param_00 ]](var_01,var_02,var_03,var_05,var_06); + } + } +} + +//Function Number: 160 +aud_stop_slow_mo_gunshot_callback() +{ + level notify("aud_stop_slow_mo_gunshot"); +} + +//Function Number: 161 +aud_play_distributed_sound(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + self.var_17B5 = 1; + self.alias = param_00; + self.points = param_01; + self.var_17B7 = param_02; + self.var_17B8 = param_05; + self.var_17B9 = param_03; + self.var_17BA = param_04; + self.var_17BB = param_06; + self playloopsound(param_00); + wait 0.1; + thread audx_distributed_sound_update_loop(param_01,param_02,param_05,param_03,param_04,param_06); +} + +//Function Number: 162 +aud_stop_distributed_sound() +{ + self notify("stop"); +} + +//Function Number: 163 +aud_start_distributed_sound() +{ + if(isdefined(self.var_17B5)) + { + self playloopsound(self.alias); + wait 0.1; + thread audx_distributed_sound_update_loop(self.points,self.var_17B7,self.var_17B8,self.var_17B9,self.var_17BA,self.var_17BB); + } +} + +//Function Number: 164 +audx_distributed_sound_update_loop(param_00,param_01,param_02,param_03,param_04,param_05) +{ + self endon("stop"); + var_06 = 0.1; + if(isdefined(param_02)) + { + var_06 = param_02; + } + + var_07 = 1; + if(isdefined(param_05)) + { + var_07 = param_05; + } + + if(isdefined(param_03)) + { + if(!isdefined(param_04)) + { + return; + } + + while(isdefined(self)) + { + self setdistributed2dsound(param_00,param_01,var_06,var_07,param_03,param_04); + wait var_06; + } + + return; + } + + while(isdefined(self)) + { + self setdistributed2dsound(param_00,param_01,var_06,var_07); + wait var_06; + } +} + +//Function Number: 165 +aud_slomo_wait(param_00) +{ + var_01 = spawn("script_origin",(0,0,0)); + var_01 thread aud_slomo_wait_internal(param_00); + var_01 waittill("slo_mo_wait_done"); + var_01 delete(); +} + +//Function Number: 166 +aud_slomo_wait_internal(param_00) +{ + var_01 = 0; + while(var_01 < param_00) + { + var_02 = getdvarfloat("com_timescale"); + var_01 = var_01 + 0.05 / var_02; + wait 0.05; + } + + self notify("slo_mo_wait_done"); +} + +//Function Number: 167 +aud_set_level_fade_time(param_00) +{ + if(!isdefined(level._audio)) + { + level._audio = spawnstruct(); + } + + level._audio.specops = param_00; +} + +//Function Number: 168 +aud_level_fadein() +{ + if(!isdefined(level._audio.specops)) + { + level._audio.specops = 1; + } + + wait 0.05; + levelsoundfade(1,level._audio.specops); +} + +//Function Number: 169 +aud_is_specops() +{ + return isdefined(level._audio.var_17C5); +} + +//Function Number: 170 +audx_set_spec_ops_internal() +{ + if(!isdefined(level._audio)) + { + level._audio = spawnstruct(); + } + + level._audio.var_17C5 = 1; +} + +//Function Number: 171 +aud_set_spec_ops() +{ + thread audx_set_spec_ops_internal(); +} + +//Function Number: 172 +audx_play_line_emitter_internal() +{ + level endon(self.label + "_line_emitter_stop"); + var_00 = self.var_17C9 - self.var_17CA; + var_01 = vectornormalize(var_00); + var_02 = distance(self.var_17CA,self.var_17C9); + var_03 = 0.1; + for(;;) + { + var_04 = level.player.origin - self.var_17CA; + var_05 = vectordot(var_04,var_01); + var_05 = clamp(var_05,0,var_02); + var_06 = self.var_17CA + var_01 * var_05; + if(!self.var_17CB) + { + self.origin = var_06; + self playloopsound(self.alias); + self scalevolume(0); + wait 0.05; + self scalevolume(1,self.var_17CC); + self.var_17CB = 1; + } + else + { + self moveto(var_06,var_03); + } + + wait var_03; + } +} + +//Function Number: 173 +aud_stop_line_emitter(param_00) +{ + level notify(param_00 + "_line_emitter_stop"); +} + +//Function Number: 174 +aud_play_line_emitter(param_00,param_01,param_02,param_03,param_04,param_05) +{ + var_06 = 0.1; + var_07 = 0.1; + if(isdefined(param_04)) + { + var_06 = max(param_04,0); + var_07 = max(param_04,0); + } + + if(isdefined(param_05)) + { + var_07 = max(param_05,0); + } + + var_08 = spawn("script_origin",(0,0,0)); + var_08.alias = param_01; + var_08.var_17CB = 0; + var_08.var_17CA = param_02; + var_08.var_17C9 = param_03; + var_08.var_17CC = var_06; + var_08.label = param_00; + var_08 thread audx_play_line_emitter_internal(); + level waittill(param_00 + "_line_emitter_stop"); + var_08 scalevolume(0,var_07); + wait var_07; + var_08 stoploopsound(); + wait 0.05; + var_08 delete(); +} + +//Function Number: 175 +aud_print_3d_on_ent(param_00,param_01,param_02) +{ + if(isdefined(self)) + { + var_03 = (1,1,1); + var_04 = (1,0,0); + var_05 = (0,1,0); + var_06 = (0,1,1); + var_07 = 5; + var_08 = var_03; + if(isdefined(param_01)) + { + var_07 = param_01; + } + + if(isdefined(param_02)) + { + var_08 = param_02; + switch(var_08) + { + case "red": + var_08 = var_04; + break; + + case "white": + var_08 = var_03; + break; + + case "blue": + var_08 = var_06; + break; + + case "green": + var_08 = var_05; + break; + + default: + var_08 = var_03; + break; + } + } + + self endon("death"); + while(isdefined(self)) + { + wait 0.05; + } + } +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_audio_dynamic_ambi.gsc b/MW3/PC/SP/maps/_audio_dynamic_ambi.gsc new file mode 100644 index 0000000..48a6820 --- /dev/null +++ b/MW3/PC/SP/maps/_audio_dynamic_ambi.gsc @@ -0,0 +1,1793 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_audio_dynamic_ambi.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 55 + * Decompile Time: 6571 ms + * Timestamp: 10/27/2023 2:19:59 AM +*******************************************************************/ + +//Function Number: 1 +damb_init() +{ + if(!isdefined(level._audio)) + { + level._audio = spawnstruct(); + } + + if(!isdefined(level._audio.damb)) + { + level._audio.damb = spawnstruct(); + level._audio.damb.loop_handle_index = 0; + level._audio.damb.single_loop_handle_index = 0; + level._audio.damb.oneshot_handle_index = 0; + level._audio.damb.serial_playback_lock = 1; + level._audio.damb.playing = []; + level._audio.damb.playing["zone"] = []; + level._audio.damb.playing["free"] = []; + level._audio.damb.component_weights = []; + level._audio.damb.callbacks = []; + level._audio.damb.preset_cache = []; + level._audio.damb.component_cache = []; + level._audio.damb.loop_cache = []; + level._audio.damb.use_string_table_presets = 0; + level._audio.damb.use_iw_presets = 0; + level._audio.damb.entity_ref_count = 0; + level._audio.damb.loop_entity_ref_count = 0; + level._audio.damb.max_entities = 15; + } +} + +//Function Number: 2 +damb_set_max_entities(param_00) +{ + level._audio.damb.max_entities = param_00; +} + +//Function Number: 3 +damb_use_string_table() +{ + level._audio.damb.use_string_table_presets = 1; + level._audio.damb.use_iw_presets = 0; +} + +//Function Number: 4 +damb_use_iw_presets() +{ + level._audio.damb.use_iw_presets = 1; + level._audio.damb.use_string_table_presets = 0; +} + +//Function Number: 5 +damb_zone_start_preset(param_00,param_01) +{ + dambx_start_preset("zone",param_00,undefined,param_01); +} + +//Function Number: 6 +damb_start_preset(param_00,param_01,param_02,param_03) +{ + dambx_start_preset("free",param_00,param_01,param_02,undefined,undefined,param_03); +} + +//Function Number: 7 +damb_start_preset_at_point(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if(isdefined(param_03)) + { + thread dambx_monitor_damb_point_distance(param_00,param_01,param_02,param_03,param_04,param_05); + return; + } + + dambx_start_preset("free",param_00,param_02,undefined,param_01,param_05); +} + +//Function Number: 8 +damb_stop_preset_at_point(param_00,param_01,param_02) +{ + if(isstring(param_01)) + { + var_03 = param_01; + } + else + { + var_03 = param_01; + } + + level notify(var_03 + "dist_monitor_stop"); + damb_stop_preset(var_03,param_02); +} + +//Function Number: 9 +damb_make_linked_damb(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = spawnstruct(); + var_05.name = param_00; + var_05.point = param_01; + var_05.label = param_02; + var_05.min_delay = param_03; + var_05.max_delay = param_04; + return var_05; +} + +//Function Number: 10 +dambx_monitor_damb_point_distance(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if(isstring(param_02)) + { + level endon(param_02 + "dist_monitor_stop"); + } + else + { + level endon(param_00 + "dist_monitor_stop"); + } + + var_06 = 1; + if(isdefined(param_04)) + { + var_06 = param_04; + } + + var_07 = 1; + for(;;) + { + var_08 = distance(level.player.origin,param_01); + if(var_08 < param_03) + { + if(var_07) + { + var_07 = 0; + dambx_start_preset("free",param_00,param_02,undefined,param_01,param_05); + } + } + else if(!var_07) + { + var_07 = 1; + if(isdefined(param_02)) + { + dambx_stop_preset("free",param_02,var_06); + } + else + { + dambx_stop_preset("free",param_00,var_06); + } + } + + wait 1; + } +} + +//Function Number: 11 +damb_start_preset_on_entity(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = "attach"; + if(isdefined(param_03)) + { + var_05 = param_03; + } + + dambx_start_preset("free",param_00,param_02,param_04,undefined,param_01,var_05); +} + +//Function Number: 12 +damb_stop(param_00,param_01) +{ + var_02 = 2; + if(isdefined(param_00)) + { + var_02 = param_00; + } + + var_03 = "all"; + if(isdefined(param_01)) + { + var_03 = param_01; + } + + if(var_03 == "free" || var_03 == "all") + { + foreach(var_06, var_05 in level._audio.damb.playing["free"]) + { + damb_stop_preset(var_06,var_02); + } + } + + if(var_03 == "zone" || var_03 == "all") + { + foreach(var_06, var_05 in level._audio.damb.playing["zone"]) + { + damb_zone_stop_preset(var_06,var_02); + } + } +} + +//Function Number: 13 +damb_stop_zone(param_00) +{ + dambx_stop_preset("zone",undefined,param_00); +} + +//Function Number: 14 +damb_zone_stop_preset(param_00,param_01) +{ + dambx_stop_preset("zone",param_00,param_01); +} + +//Function Number: 15 +damb_stop_preset(param_00,param_01) +{ + dambx_stop_preset("free",param_00,param_01); +} + +//Function Number: 16 +damb_prob_mix_damb_presets(param_00,param_01,param_02,param_03) +{ + if(isdefined(param_00) && param_00 != "none") + { + if(param_01 == 0) + { + damb_zone_stop_preset(param_00,2); + } + else + { + damb_zone_start_preset(param_00,param_01); + } + } + + if(isdefined(param_02) && param_02 != "none") + { + if(param_03 == 0) + { + damb_zone_stop_preset(param_02,2); + return; + } + + damb_zone_start_preset(param_02,param_03); + } +} + +//Function Number: 17 +damb_set_oneshot_callback_for_component(param_00,param_01) +{ + if(!isdefined(level._audio.damb.callback)) + { + level._audio.damb.callback = []; + } + + level._audio.damb.callback[param_00] = param_01; +} + +//Function Number: 18 +damb_set_oneshot_callback_for_dynamic_ambience(param_00,param_01) +{ + var_02 = []; + if(isdefined(level._audio.damb.preset_cache[param_00])) + { + var_02 = level._audio.damb.preset_cache[param_00]; + } + else if(level._audio.damb.use_string_table_presets) + { + var_02 = dambx_get_preset_from_string_table(param_00,1); + level._audio.damb.preset_cache[param_00] = var_02; + } + else + { + var_02 = dambx_get_preset_from_string_table(param_00,0); + if(var_02.size == 0) + { + var_02 = maps\_audio::audio_presets_dynamic_ambience(param_00,var_02); + } + + level._audio.damb.preset_cache[param_00] = var_02; + } + + foreach(var_04 in var_02["components"]) + { + damb_set_oneshot_callback_for_component(var_04,param_01); + } +} + +//Function Number: 19 +damb_pause_damb(param_00,param_01) +{ + var_02 = "free"; + if(isdefined(param_01)) + { + var_02 = param_01; + } + + if(isdefined(level._audio.damb.playing[var_02][param_00])) + { + level._audio.damb.playing[var_02][param_00]["paused"] = 1; + } +} + +//Function Number: 20 +damb_unpause_damb(param_00,param_01) +{ + var_02 = "free"; + if(isdefined(param_01)) + { + var_02 = param_01; + } + + if(isdefined(level._audio.damb.playing[var_02][param_00])) + { + level._audio.damb.playing[var_02][param_00]["paused"] = 0; + level notify(var_02 + "_" + param_00 + "_event"); + } +} + +//Function Number: 21 +damb_manual_trigger(param_00,param_01) +{ + var_02 = "free"; + if(isdefined(param_01)) + { + var_02 = param_01; + } + + if(isdefined(level._audio.damb.playing[var_02][param_00])) + { + level notify(var_02 + "_" + param_00 + "_event"); + } +} + +//Function Number: 22 +damb_link_to_damb(param_00,param_01,param_02,param_03) +{ + var_04 = "free"; + if(isdefined(level._audio.damb.playing[var_04][param_00]) && isdefined(level._audio.damb.playing[var_04][param_01])) + { + param_02 = min(param_02,param_03); + param_03 = max(param_02,param_03); + if(!isdefined(level._audio.damb.playing[var_04][param_00]["linked_dambs"])) + { + level._audio.damb.playing[var_04][param_00]["linked_dambs"] = []; + } + + var_05 = level._audio.damb.playing[var_04][param_00]["linked_dambs"].size; + level._audio.damb.playing[var_04][param_00]["linked_dambs"][var_05] = spawnstruct(); + level._audio.damb.playing[var_04][param_00]["linked_dambs"][var_05].name = param_01; + level._audio.damb.playing[var_04][param_00]["linked_dambs"][var_05].min_delay = max(param_02,0); + level._audio.damb.playing[var_04][param_00]["linked_dambs"][var_05].max_delay = max(param_03,0); + } +} + +//Function Number: 23 +dambx_start_preset(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07) +{ + var_08 = 1; + if(isdefined(param_03)) + { + var_08 = param_03; + } + + var_09 = param_01; + if(isstring(param_02)) + { + var_09 = param_02; + } + + if(!isdefined(level._audio.damb.playing[param_00][var_09])) + { + var_0A = dambx_get_damb_preset(param_01); + if(!isdefined(var_0A)) + { + return; + } + + level._audio.damb.playing[param_00][var_09] = var_0A; + level._audio.damb.playing[param_00][var_09]["prob_scale"] = var_08; + level._audio.damb.playing[param_00][var_09]["paused"] = 0; + if(isdefined(param_07)) + { + dambx_start_linked_dambs(var_09,param_07); + } + + if(isdefined(param_05)) + { + level._audio.damb.playing[param_00][var_09]["entity"] = param_05; + level._audio.damb.playing[param_00][var_09]["mode"] = param_06; + } + + thread dambx_play(param_00,var_09,param_04); + return; + } + + if(level._audio.damb.playing[param_00][var_09]["prob_scale"] != var_08) + { + level._audio.damb.playing[param_00][var_09]["prob_scale"] = var_08; + } +} + +//Function Number: 24 +dambx_start_linked_dambs(param_00,param_01) +{ + if(isarray(param_01)) + { + foreach(var_03 in param_01) + { + dambx_start_preset("free",var_03.name,var_03.label,undefined,var_03.point); + damb_pause_damb(var_03.label); + damb_link_to_damb(param_00,var_03.label,var_03.min_delay,var_03.max_delay); + } + + return; + } + + dambx_start_preset("free",param_01.name,param_01.label,undefined,param_01.point); + damb_pause_damb(param_01.label); + damb_link_to_damb(param_00,param_01.label,param_01.min_delay,param_01.max_delay); +} + +//Function Number: 25 +dambx_stop_preset(param_00,param_01,param_02) +{ + var_03 = 2; + if(isdefined(param_02)) + { + var_03 = param_02; + } + + if(param_00 == "zone" && !isdefined(param_01)) + { + if(isdefined(level._audio.damb.playing[param_00])) + { + foreach(param_01, var_05 in level._audio.damb.playing[param_00]) + { + level._audio.damb.playing[param_00][param_01]["fade"] = var_03; + level notify(param_00 + "_" + param_01 + "_stop"); + } + + return; + } + + return; + } + + if(isdefined(level._audio.damb.playing[param_02][var_03])) + { + level._audio.damb.playing[param_02][var_03]["fade"] = var_05; + level notify(param_02 + "_" + var_03 + "_stop"); + } +} + +//Function Number: 26 +dambx_update_serially(param_00,param_01,param_02) +{ + level endon(param_00 + "_" + param_01 + "_stop"); + var_03 = level._audio.damb.playing[param_00][param_01]["event_time"]; + var_04 = min(var_03[0],var_03[1]); + var_05 = max(var_03[0],var_03[1]); + var_06 = undefined; + var_07 = undefined; + if(isdefined(level._audio.damb.playing[param_00][param_01]["first_event"])) + { + var_03 = level._audio.damb.playing[param_00][param_01]["first_event"]; + var_06 = min(var_03[0],var_03[1]); + var_07 = max(var_03[0],var_03[1]); + } + + var_08 = undefined; + if(isdefined(var_06)) + { + var_08 = randomfloatrange(var_06,var_07); + } + else + { + var_08 = randomfloatrange(var_04,var_05); + } + + for(;;) + { + if(level._audio.damb.playing[param_00][param_01]["paused"]) + { + level waittill(param_00 + "_" + param_01 + "_event"); + } + + if(!level._audio.damb.playing[param_00][param_01]["paused"]) + { + wait var_08; + } + + var_09 = dambx_pick_random_component(param_00,param_01); + if(!isdefined(var_09)) + { + continue; + } + + var_0A = dambx_get_component_data(param_00,param_01,var_09,param_01); + if(var_0A.using_oneshots_or_loops) + { + if(var_0A.using_entity && !isdefined(var_0A.ent)) + { + level notify(param_00 + "_" + param_01 + "_stop"); + break; + } + + var_0B = dambx_create_damb_event(var_0A,param_01,var_09); + if(var_0B.success) + { + if(level._audio.damb.serial_playback_lock) + { + dambx_perform_play_event(param_00,param_01,var_0B); + } + else + { + thread dambx_perform_play_event(param_00,param_01,var_0B); + } + } + } + else + { + maps\_audio::aud_print_warning("Dynamic ambience is playing back serially and using components which do not define oneshots or loops"); + } + + var_08 = randomfloatrange(var_04,var_05); + } +} + +//Function Number: 27 +dambx_play_component_loops(param_00,param_01,param_02,param_03,param_04) +{ + if(isdefined(param_02["single_loops"])) + { + foreach(var_06 in param_02["single_loops"]) + { + var_07 = undefined; + if(isdefined(param_04)) + { + var_07 = spawn("script_origin",param_04.origin); + } + else if(isdefined(param_03)) + { + var_07 = spawn("script_origin",param_03); + } + else + { + var_07 = spawn("script_origin",level.player.origin); + } + + level._audio.damb.loop_entity_ref_count++; + var_07 playloopsound(var_06); + if(isdefined(param_04)) + { + var_07 linkto(param_04); + } + + var_08 = level._audio.damb.single_loop_handle_index; + level._audio.damb.playing[param_00][param_01]["single_loops"][var_08] = var_07; + level._audio.damb.single_loop_handle_index++; + } + } +} + +//Function Number: 28 +//Function Number: 29 +dambx_monitor_single_loops_on_ent(param_00,param_01,param_02) +{ + for(;;) + { + if(!isdefined(param_02)) + { + level notify(param_00 + "_" + param_01 + "_stop"); + } + + wait 1; + } +} + +//Function Number: 30 +dambx_create_damb_event(param_00,param_01,param_02,param_03) +{ + var_04 = spawnstruct(); + if(randomfloat(1) < param_00.prob_scale) + { + var_04.success = 1; + if(isdefined(level._audio.damb.callbacks[param_01])) + { + thread [[ level._audio.damb.callback[param_01] ]](); + } + else + { + var_04.alias = dambx_pick_random_alias(param_02); + var_04.point = param_03; + var_04.ent = param_00.ent; + var_04.mode = param_00.mode; + var_05 = randomfloatrange(param_00.min_radius,param_00.max_radius); + var_06 = undefined; + if(isdefined(param_00.min_start_angle)) + { + var_06 = randomfloatrange(param_00.min_start_angle,param_00.max_start_angle); + } + else + { + var_06 = randomfloatrange(0,360); + } + + var_07 = var_05 * cos(var_06); + var_08 = var_05 * sin(var_06); + var_04.start_position = (var_07,var_08,0); + if(isdefined(param_00.min_trav_time)) + { + var_04.travel_time = randomfloatrange(param_00.min_trav_time,param_00.max_trav_time); + if(isdefined(param_00.min_delta)) + { + var_05 = randomfloatrange(param_00.min_delta,param_00.max_delta); + var_06 = randomfloatrange(0,360); + var_07 = var_05 * cos(var_06); + var_08 = var_05 * sin(var_06); + var_04.end_position = var_04.start_position + (var_07,var_08,0); + } + else + { + var_09 = randomfloatrange(param_00.min_delta_angle,param_00.max_delta_angle); + var_09 = var_09 * 0.5; + var_0A = level.player.origin; + if(isdefined(param_03)) + { + var_0A = param_03; + } + + var_0B = var_04.start_position - var_0A; + var_07 = var_0B[0] * cos(var_09) - var_0B[1] * sin(var_09); + var_08 = var_0B[0] * sin(var_09) + var_0B[1] * cos(var_09); + var_04.end_position = var_04.start_position + (var_07,var_08,0); + } + } + + if(isdefined(param_00.min_pitch)) + { + var_04.start_pitch = randomfloatrange(param_00.min_pitch,param_00.max_pitch); + } + + if(isdefined(param_00.min_pitch_time)) + { + var_04.end_pitch = randomfloatrange(param_00.min_pitch,param_00.max_pitch); + var_04.pitch_time = randomfloatrange(param_00.min_pitch_time,param_00.max_pitch_time); + } + } + } + else + { + var_04.success = 0; + } + + return var_04; +} + +//Function Number: 31 +dambx_trigger_linked_damb(param_00,param_01) +{ + wait param_01; + damb_manual_trigger(param_00); +} + +//Function Number: 32 +dambx_make_first_wait(param_00) +{ + var_01 = undefined; + if(isdefined(param_00.first_event)) + { + var_01 = randomfloatrange(param_00.first_event_min,param_00.first_event_max); + } + else + { + var_01 = randomfloatrange(param_00.min_time,param_00.max_time); + } + + return var_01; +} + +//Function Number: 33 +dambx_update(param_00,param_01,param_02,param_03) +{ + level endon(param_00 + "_" + param_01 + "_stop"); + var_04 = dambx_get_component_data(param_00,param_01,param_02,param_01); + if(var_04.single_loops) + { + dambx_play_component_loops(param_00,param_01,param_02,param_03,var_04.ent); + if(var_04.using_entity && !var_04.using_oneshots_or_loops) + { + thread dambx_monitor_single_loops_on_ent(param_00,param_01,var_04.ent); + } + } + + if(var_04.using_oneshots_or_loops) + { + var_05 = dambx_make_first_wait(var_04); + for(;;) + { + if(level._audio.damb.playing[param_00][param_01]["paused"]) + { + level waittill(param_00 + "_" + param_01 + "_event"); + } + + if(!level._audio.damb.playing[param_00][param_01]["paused"]) + { + wait var_05; + } + + if(var_04.using_entity && !isdefined(var_04.ent)) + { + level notify(param_00 + "_" + param_01 + "_stop"); + break; + } + + if(isdefined(level._audio.damb.playing[param_00][param_01]["linked_dambs"])) + { + foreach(var_07 in level._audio.damb.playing[param_00][param_01]["linked_dambs"]) + { + var_08 = randomfloatrange(var_07.min_delay,var_07.max_delay); + thread dambx_trigger_linked_damb(var_07.name,var_08); + } + } + + var_04.prob_scale = level._audio.damb.playing[param_00][param_01]["prob_scale"]; + var_0A = dambx_create_damb_event(var_04,param_01,param_02,param_03); + if(var_0A.success) + { + thread dambx_perform_play_event(param_00,param_01,var_0A); + } + + var_05 = randomfloatrange(var_04.min_time,var_04.max_time); + } + } +} + +//Function Number: 34 +dambx_wait_till_sound_done_and_remove_handle(param_00,param_01,param_02,param_03) +{ + level endon(param_00 + "_" + param_01 + "_stop"); + param_03 waittill("sounddone"); + if(isdefined(level._audio.damb.playing[param_00][param_01]["oneshots"][param_02])) + { + param_03 delete(); + decrement_ref_count(); + level._audio.damb.playing[param_00][param_01]["oneshots"][param_02] = undefined; + } +} + +//Function Number: 35 +dambx_perform_play_event(param_00,param_01,param_02) +{ + level endon(param_00 + "_" + param_01 + "_stop"); + if(param_02.alias["type"] == "loop") + { + dambx_perform_loop_event(param_00,param_01,param_02); + return; + } + + dambx_perform_oneshot_event(param_00,param_01,param_02); +} + +//Function Number: 36 +dambx_perform_oneshot_event(param_00,param_01,param_02) +{ + level endon(param_00 + "_" + param_01 + "_stop"); + var_03 = level.player.origin; + if(isdefined(param_02.ent)) + { + var_03 = param_02.ent.origin; + } + else if(isdefined(param_02.point)) + { + var_03 = param_02.point; + } + + if(level._audio.damb.entity_ref_count < level._audio.damb.max_entities) + { + var_04 = spawn("script_origin",var_03 + param_02.start_position); + if(isdefined(param_02.ent) && param_02.mode == "attach") + { + var_04 linkto(param_02.ent); + } + + var_04 playsound(param_02.alias["name"],"sounddone"); + var_04 thread maps\_audio::aud_check_sound_done(); + if(!var_04.sounddone) + { + var_05 = level._audio.damb.oneshot_handle_index; + level._audio.damb.playing[param_00][param_01]["oneshots"][var_05] = var_04; + level._audio.damb.oneshot_handle_index++; + increment_ref_count(); + if(isdefined(param_02.end_position) && !isdefined(param_02.entity)) + { + var_06 = 0.1 * param_02.travel_time; + var_04 moveto(var_03 + param_02.end_position,param_02.travel_time,var_06,var_06); + } + + if(isdefined(param_02.start_pitch)) + { + var_04 scalepitch(param_02.start_pitch); + } + + if(isdefined(param_02.pitch_time)) + { + wait 0.05; + if(isdefined(var_04) && !var_04.sounddone) + { + var_04 scalepitch(param_02.end_pitch,param_02.pitch_time); + } + } + + thread dambx_wait_till_sound_done_and_remove_handle(param_00,param_01,var_05,var_04); + var_04 waittill("sounddone"); + return; + } + + var_04 delete(); + return; + } + + maps\_audio::aud_print_warning("TRYING TO PLAY ONESHOT WITH DAMB REF COUNT AT MAXIMUM!"); +} + +//Function Number: 37 +dambx_perform_loop_event(param_00,param_01,param_02) +{ + level endon(param_00 + "_" + param_01 + "_stop"); + if(level._audio.damb.entity_ref_count < level._audio.damb.max_entities) + { + var_03 = level.player.origin; + if(isdefined(param_02.ent)) + { + var_03 = param_02.ent.origin; + } + else if(isdefined(param_02.point)) + { + var_03 = param_02.point; + } + + var_04 = param_02.alias["name"]; + var_05 = dambx_get_loop_preset(var_04); + if(!isdefined(var_05)) + { + return; + } + + var_06 = min(var_05["duration"][0],var_05["duration"][1]); + var_07 = max(var_05["duration"][0],var_05["duration"][1]); + var_08 = randomfloatrange(var_06,var_07); + var_09 = var_05["loop_alias"]; + var_0A = var_05["fade_in"]; + var_0B = var_05["fade_out"]; + var_0C = undefined; + if(isdefined(var_05["end_alias"])) + { + var_0C = var_05["end_alias"]; + } + + var_0D = spawn("script_origin",var_03 + param_02.start_position); + if(isdefined(param_02.ent) && param_02.mode == "attach") + { + var_0D linkto(param_02.ent); + } + + var_0D playloopsound(var_09); + if(isdefined(var_0A)) + { + var_0D scalevolume(0); + wait 0.05; + var_0D scalevolume(1,var_0A); + } + + var_0D thread maps\_audio::aud_check_sound_done(); + if(!var_0D.sounddone) + { + var_0E = level._audio.damb.loop_handle_index; + level._audio.damb.playing[param_00][param_01]["loops"][var_0E] = var_0D; + increment_ref_count(); + level._audio.damb.loop_handle_index++; + var_0F = 0; + if(isdefined(param_02.mode) && param_02.mode == "free" && isdefined(param_02.end_position)) + { + var_0F = 1; + } + else if(!isdefined(param_02.mode) && isdefined(param_02.end_position)) + { + var_0F = 1; + } + + if(var_0F) + { + var_10 = 0.1 * param_02.travel_time; + var_0D moveto(var_03 + param_02.end_position,param_02.travel_time,var_10,var_10); + } + + if(isdefined(param_02.start_pitch)) + { + var_0D setpitch(param_02.start_pitch); + } + + if(isdefined(param_02.pitch_time)) + { + wait 0.05; + if(isdefined(var_0D) && !var_0D.sounddone) + { + var_0D setpitch(param_02.end_pitch,param_02.pitch_time); + } + } + + wait var_08; + if(!var_0D.sounddone) + { + if(isdefined(level._audio.damb.playing[param_00][param_01]["loops"][var_0E])) + { + if(isdefined(var_0C)) + { + var_11 = spawn("script_origin",var_0D.origin); + var_11 playsound(var_0C,"sounddone"); + var_12 = level._audio.damb.oneshot_handle_index; + level._audio.damb.oneshot_handle_index++; + level._audio.damb.playing[param_00][param_01]["oneshots"][var_12] = var_11; + increment_ref_count(); + thread dambx_wait_till_sound_done_and_remove_handle(param_00,param_01,var_12,var_11); + } + + if(isdefined(var_0B)) + { + thread maps\_audio::aud_fade_loop_out_and_delete(var_0D,var_0B); + } + else + { + var_0D stoploopsound(); + wait 0.05; + var_0D delete(); + } + + decrement_ref_count(); + level._audio.damb.playing[param_00][param_01]["loops"][var_0E] = undefined; + return; + } + + return; + } + + var_0D stoploopsound(); + var_0D delete(); + decrement_ref_count(); + level._audio.damb.playing[param_00][param_01]["loops"][var_0E] = undefined; + return; + } + + var_0D delete(); + return; + } + + maps\_audio::aud_print_warning("TRYING TO PLAY LOOP WITH DAMB REF COUNT AT MAXIMUM!"); +} + +//Function Number: 38 +dambx_pick_random_component(param_00,param_01) +{ + var_02 = 0; + foreach(var_04 in level._audio.damb.playing[param_00][param_01]["components"]) + { + var_05 = var_04[1]; + var_02 = var_02 + var_05; + } + + var_07 = randomfloat(var_02); + var_08 = 0; + var_09 = undefined; + foreach(var_04 in level._audio.damb.playing[param_00][param_01]["components"]) + { + var_0B = var_08 + var_04[1]; + if(var_07 >= var_08 && var_07 < var_0B) + { + var_09 = var_04[0]; + break; + } + + var_08 = var_0B; + } + + var_0D = dambx_get_component_preset(var_09); + if(!isdefined(var_0D)) + { + return; + } + + return var_7B; +} + +//Function Number: 39 +dambx_pick_random_alias(param_00) +{ + var_01 = param_00["loops"]; + var_02 = param_00["oneshots"]; + var_03 = undefined; + if(!isdefined(level._audio.damb.component_weights[param_00["name"]])) + { + var_03 = 0; + if(isdefined(var_01)) + { + if(isstring(var_01[0])) + { + var_03 = var_03 + var_01[1]; + } + else + { + foreach(var_05 in var_01) + { + var_03 = var_03 + var_05[1]; + } + } + } + + if(isdefined(var_02)) + { + if(isstring(var_02[0])) + { + var_03 = var_03 + var_02[1]; + } + else + { + foreach(var_05 in var_02) + { + var_03 = var_03 + var_05[1]; + } + } + } + + level._audio.damb.component_weights[param_00["name"]] = var_03; + } + else + { + var_03 = level._audio.damb.component_weights[param_00["name"]]; + } + + var_09 = randomfloatrange(0,var_03); + var_0A = undefined; + var_0B = undefined; + var_0C = 0; + if(isdefined(var_01)) + { + if(isstring(var_01[0])) + { + var_0D = var_0C + var_01[1]; + if(var_09 >= var_0C && var_09 < var_0D) + { + var_0A = var_01[0]; + var_0B = "loop"; + } + else + { + var_0C = var_0D; + } + } + else + { + foreach(var_05 in var_02) + { + var_0D = var_0C + var_05[1]; + if(var_09 >= var_0C && var_09 < var_0D) + { + var_0A = var_05[0]; + var_0B = "loop"; + break; + } + else + { + var_0C = var_0D; + } + } + } + } + + if(!isdefined(var_0A) && isdefined(var_02)) + { + if(isarray(var_02)) + { + foreach(var_05 in var_02) + { + var_0D = var_0C + var_05[1]; + if(var_09 >= var_0C && var_09 < var_0D) + { + var_0A = var_05[0]; + var_0B = "oneshot"; + break; + } + else + { + var_0C = var_0D; + } + } + } + else + { + var_0D = var_0D + var_03[1]; + if(var_09 >= var_0C && var_09 < var_0D) + { + var_0A = var_02[0]; + var_0B = "oneshot"; + } + else + { + var_0C = var_0D; + } + } + } + + var_12 = []; + return var_7B; +} + +//Function Number: 40 +dambx_get_loop_preset(param_00) +{ + var_01 = []; + if(isdefined(level._audio.damb.loop_cache[param_00])) + { + var_01 = level._audio.damb.loop_cache[param_00]; + } + else if(level._audio.damb.use_string_table_presets) + { + var_01 = dambx_get_loop_def_from_string_table(param_00,1); + } + else + { + var_01 = dambx_get_loop_def_from_string_table(param_00,0); + if(!isdefined(var_01) || var_01.size == 0) + { + var_01 = maps\_audio::audio_presets_dynamic_ambience_loop_definitions(param_00,var_01); + } + } + + if(!isdefined(var_01) || var_01.size == 0) + { + return; + } + + level._audio.damb.loop_cache[param_00] = var_01; + return var_01; +} + +//Function Number: 41 +dambx_get_component_preset(param_00) +{ + if(!isdefined(level._audio.damb.component_cache)) + { + level._audio.damb.component_cache = []; + } + + var_01 = []; + if(isdefined(level._audio.damb.component_cache[param_00])) + { + var_01 = level._audio.damb.component_cache[param_00]; + } + else if(level._audio.damb.use_string_table_presets) + { + var_01 = dambx_get_component_from_string_table(param_00,1); + } + else + { + var_01 = dambx_get_component_from_string_table(param_00,0); + if(!isdefined(var_01) || var_01.size == 0) + { + var_01 = maps\_audio::audio_presets_dynamic_ambience_components(param_00,var_01); + } + } + + if(!isdefined(var_01) || var_01.size == 0) + { + return; + } + + level._audio.damb.component_cache[param_00] = var_01; + return var_01; +} + +//Function Number: 42 +dambx_play(param_00,param_01,param_02) +{ + level._audio.damb.playing[param_00][param_01]["loops"] = []; + level._audio.damb.playing[param_00][param_01]["single_loops"] = []; + level._audio.damb.playing[param_00][param_01]["oneshots"] = []; + if(!isdefined(level._audio.damb.playing[param_00][param_01]["event_time"])) + { + foreach(var_04 in level._audio.damb.playing[param_00][param_01]["components"]) + { + var_05 = dambx_get_component_preset(var_04); + if(!isdefined(var_05)) + { + return; + } + + var_05["name"] = var_04; + thread dambx_update(param_00,param_01,var_05,param_02); + } + } + else + { + thread dambx_update_serially(param_00,param_01,param_02); + } + + level waittill(param_00 + "_" + param_01 + "_stop"); + wait 0.1; + foreach(var_08 in level._audio.damb.playing[param_00][param_01]["loops"]) + { + thread dambx_fade_out_playing_loop(var_08,level._audio.damb.playing[param_00][param_01]["fade"],0); + } + + foreach(var_08 in level._audio.damb.playing[param_00][param_01]["single_loops"]) + { + thread dambx_fade_out_playing_loop(var_08,level._audio.damb.playing[param_00][param_01]["fade"],1); + } + + foreach(var_08 in level._audio.damb.playing[param_00][param_01]["oneshots"]) + { + thread dambx_fade_out_playing_sound(var_08,level._audio.damb.playing[param_00][param_01]["fade"]); + } + + level._audio.damb.playing[param_00][param_01] = undefined; +} + +//Function Number: 43 +dambx_fade_out_playing_sound(param_00,param_01) +{ + if(isdefined(param_00)) + { + param_00 scalevolume(0,param_01); + wait param_01; + param_00 stopsounds(); + wait 0.05; + param_00 delete(); + decrement_ref_count(); + } +} + +//Function Number: 44 +dambx_fade_out_playing_loop(param_00,param_01,param_02) +{ + param_00 scalevolume(0,param_01); + wait param_01; + param_00 stoploopsound(); + wait 0.05; + param_00 delete(); + if(param_02) + { + level._audio.damb.loop_entity_ref_count--; + return; + } + + decrement_ref_count(); +} + +//Function Number: 45 +dambx_get_list_value_from_string_table(param_00,param_01,param_02,param_03) +{ + var_04 = 0; + if(isdefined(param_03)) + { + var_04 = param_03; + } + + var_05 = []; + var_06 = 0; + var_07 = strtok(param_00,"+"); + var_08 = 0; + for(var_09 = 0;var_09 < var_07.size;var_09++) + { + var_0A = strtok(var_07[var_09]," "); + if(var_0A.size == 1 && var_0A[0] != "") + { + var_05[var_05.size] = var_0A[0]; + continue; + } + + var_0B = var_05.size; + var_05[var_0B] = []; + var_05[var_0B][0] = var_0A[0]; + var_05[var_0B][1] = float(var_0A[1]); + } + + if(!var_06 && var_04) + { + var_0C = []; + for(var_09 = 0;var_09 < var_05.size;var_09++) + { + var_0D = var_0C.size; + var_0C[var_0D] = []; + var_0C[var_0D][0] = var_05[var_09]; + var_0C[var_0D][1] = 1; + } + + var_05 = var_0C; + } + + return var_05; +} + +//Function Number: 46 +dambx_get_loop_def_from_string_table(param_00,param_01) +{ + var_02 = "soundtables/common_damb_loops.csv"; + var_03 = maps\_audio::get_damb_loops_stringtable(); + var_04 = []; + if(param_01) + { + var_04 = dambx_get_loop_def_from_string_table_internal(var_03,param_00); + } + + if(!isdefined(var_04) || var_04.size == 0) + { + var_04 = dambx_get_loop_def_from_string_table_internal(var_02,param_00); + } + + if(!isdefined(var_04) || var_04.size == 0) + { + return; + } + + return var_04; +} + +//Function Number: 47 +dambx_get_loop_def_from_string_table_internal(param_00,param_01) +{ + var_02 = []; + var_03 = 8; + var_04 = undefined; + var_05 = undefined; + var_06 = undefined; + var_07 = undefined; + var_08 = []; + for(var_09 = 0;var_09 < var_03;var_09++) + { + var_0A = tablelookup(param_00,0,"loop_defs",var_09); + if(!isdefined(var_0A) || var_0A == "") + { + return; + } + + var_0B = tablelookup(param_00,0,param_01,var_09); + if(var_0B != "" && var_0A != "comments") + { + switch(var_0A) + { + case "loop_alias": + var_04 = var_0B; + break; + + case "fade_in": + if(isdefined(var_0B) && var_0B != "") + { + var_06 = max(float(var_0B),0); + } + break; + + case "fade_out": + if(isdefined(var_0B) && var_0B != "") + { + var_07 = max(float(var_0B),0); + } + break; + + case "end_alias": + if(isdefined(var_0B) && var_0B != "") + { + var_05 = var_0B; + } + break; + + case "duration_min": + if(isdefined(var_0B) && var_0B != "") + { + var_08[0] = float(var_0B); + } + break; + + case "duration_max": + if(isdefined(var_0B) && var_0B != "") + { + var_08[1] = float(var_0B); + } + break; + + default: + break; + } + } + } + + var_02["loop_alias"] = var_04; + if(isdefined(var_06)) + { + var_02["fade_in"] = var_06; + } + + if(isdefined(var_07)) + { + var_02["fade_out"] = var_07; + } + + if(isdefined(var_05)) + { + var_02["end_alias"] = var_05; + } + + if(isdefined(var_08[0])) + { + var_02["duration"] = dambx_get_two_value_float_array(var_08); + } + + return var_02; +} + +//Function Number: 48 +dambx_get_two_value_float_array(param_00) +{ + var_01 = []; + return var_7B; +} + +//Function Number: 49 +dambx_get_component_from_string_table_internal(param_00,param_01) +{ + var_02 = []; + var_03 = 21; + var_04 = 8; + var_05 = []; + var_06 = []; + var_07 = []; + var_08 = []; + var_09 = []; + var_0A = []; + var_0B = []; + var_0C = []; + var_0D = []; + var_0E = []; + var_0F = []; + var_10 = 0; + for(var_11 = 1;var_11 < var_03;var_11++) + { + var_12 = tablelookup(param_00,0,"components",var_11); + if(!isdefined(var_12)) + { + return; + } + + var_13 = tablelookup(param_00,0,param_01,var_11); + if(var_13 != "" && var_12 != "comments") + { + var_10++; + switch(var_12) + { + case "oneshots": + var_05 = dambx_get_list_value_from_string_table(var_13,"component definition","oneshots",1); + break; + + case "loops": + var_06 = dambx_get_list_value_from_string_table(var_13,"component definition","loops",1); + break; + + case "single_loops": + var_07 = dambx_get_list_value_from_string_table(var_13,"component definition","single_loops",0); + break; + + case "first_event_min": + var_08[0] = float(var_13); + break; + + case "first_event_max": + var_08[1] = float(var_13); + break; + + case "event_time_min": + var_09[0] = float(var_13); + break; + + case "event_time_max": + var_09[1] = float(var_13); + break; + + case "dist_min": + var_0A[0] = float(var_13); + break; + + case "dist_max": + var_0A[1] = float(var_13); + break; + + case "cone_min": + var_0B[0] = float(var_13); + break; + + case "cone_max": + var_0B[1] = float(var_13); + break; + + case "travel_min": + var_0C[0] = float(var_13); + break; + + case "travel_max": + var_0C[1] = float(var_13); + break; + + case "travel_time_min": + var_0D[0] = float(var_13); + break; + + case "travel_time_max": + var_0D[1] = float(var_13); + break; + + case "pitch_min": + var_0E[0] = float(var_13); + break; + + case "pitch_max": + var_0E[1] = float(var_13); + break; + + case "pitch_time_min": + var_0F[0] = float(var_13); + break; + + case "pitch_time_max": + var_0F[1] = float(var_13); + break; + + default: + break; + } + } + } + + if(var_10 > 0) + { + if(isdefined(var_05[0])) + { + if(isstring(var_05[0])) + { + var_05[1] = 1; + } + + var_02["oneshots"] = var_05; + } + + if(isdefined(var_06[0])) + { + var_02["loops"] = var_06; + } + + if(isdefined(var_07[0])) + { + var_02["single_loops"] = var_07; + } + + if(isdefined(var_08[0])) + { + var_02["first_event"] = dambx_get_two_value_float_array(var_08); + } + + if(isdefined(var_09[0])) + { + var_02["event_time"] = dambx_get_two_value_float_array(var_09); + } + + if(isdefined(var_0A[0])) + { + var_02["radius"] = dambx_get_two_value_float_array(var_0A); + } + + if(isdefined(var_0B[0])) + { + var_02["cone"] = dambx_get_two_value_float_array(var_0B); + } + + if(isdefined(var_0C[0])) + { + var_02["delta"] = dambx_get_two_value_float_array(var_0C); + } + + if(isdefined(var_0D[0])) + { + var_02["travel_time"] = dambx_get_two_value_float_array(var_0D); + } + + if(isdefined(var_0E[0])) + { + var_02["pitch"] = dambx_get_two_value_float_array(var_0E); + } + + if(isdefined(var_0F[0])) + { + var_02["pitch_time"] = dambx_get_two_value_float_array(var_0F); + } + + if(!isdefined(var_02["radius"])) + { + var_02["radius"] = [0,0.01]; + } + } + + return var_02; +} + +//Function Number: 50 +dambx_get_component_from_string_table(param_00,param_01) +{ + var_02 = maps\_audio::get_damb_component_stringtable(); + var_03 = "soundtables/common_damb_components.csv"; + var_04 = []; + if(param_01) + { + var_04 = dambx_get_component_from_string_table_internal(var_02,param_00); + } + + if(!isdefined(var_04) || var_04.size == 0) + { + var_04 = dambx_get_component_from_string_table_internal(var_03,param_00); + } + + if(!isdefined(var_04) || var_04.size == 0) + { + return; + } + + return var_04; +} + +//Function Number: 51 +dambx_get_preset_from_stringtable_internal(param_00,param_01) +{ + var_02 = 7; + var_03 = []; + var_04 = []; + var_05 = []; + var_06 = []; + for(var_07 = 1;var_07 < var_02;var_07++) + { + var_08 = tablelookup(param_00,0,"dynamic_ambience",var_07); + var_09 = tablelookup(param_00,0,param_01,var_07); + var_0A = 0; + if(var_09 != "" && var_08 != "comments") + { + switch(var_08) + { + case "components": + var_04 = dambx_get_list_value_from_string_table(var_09,"preset definition","components"); + break; + + case "first_event_min": + if(isdefined(var_09) && var_09 != "") + { + var_05[0] = float(var_09); + } + break; + + case "first_event_max": + if(isdefined(var_09) && var_09 != "") + { + var_05[1] = float(var_09); + } + break; + + case "event_time_min": + if(isdefined(var_09) && var_09 != "") + { + var_06[0] = float(var_09); + } + break; + + case "event_time_max": + if(isdefined(var_09) && var_09 != "") + { + var_06[1] = float(var_09); + } + + break; + + case "comment": + break; + + default: + break; + } + } + } + + var_0A = 0; + if(isdefined(var_05[0])) + { + var_0A = 1; + var_03["first_event"] = var_05; + } + + if(isdefined(var_06[0])) + { + var_0A = 1; + var_03["event_time"] = var_06; + } + + if(var_0A) + { + if(isdefined(var_04[0][1])) + { + var_03["components"] = var_04; + } + else + { + var_03["components"] = []; + for(var_07 = 0;var_07 < var_04.size;var_07++) + { + var_03["components"][var_03["components"].size] = [var_04[0],1]; + } + + if(var_03["components"].size == 0) + { + var_03["components"] = undefined; + } + } + } + else if(var_04.size != 0) + { + var_03["components"] = var_04; + } + + return var_03; +} + +//Function Number: 52 +dambx_get_preset_from_string_table(param_00,param_01) +{ + var_02 = maps\_audio::get_damb_stringtable(); + var_03 = "soundtables/common_damb.csv"; + var_04 = []; + if(param_01) + { + var_04 = dambx_get_preset_from_stringtable_internal(var_02,param_00); + } + + if(!isdefined(var_04) || var_04.size == 0) + { + var_04 = dambx_get_preset_from_stringtable_internal(var_03,param_00); + } + + if(!isdefined(var_04) || var_04.size == 0) + { + return; + } + + return var_04; +} + +//Function Number: 53 +dambx_get_damb_preset(param_00) +{ + var_01 = []; + if(isdefined(level._audio.damb.preset_cache[param_00])) + { + var_01 = level._audio.damb.preset_cache[param_00]; + } + else + { + var_01 = dambx_get_preset_from_string_table(param_00,1); + } + + if(!isdefined(var_01) || var_01.size == 0) + { + return; + } + + level._audio.damb.preset_cache[param_00] = var_01; + return var_7B; +} + +//Function Number: 54 +increment_ref_count() +{ + level._audio.damb.entity_ref_count++; +} + +//Function Number: 55 +decrement_ref_count() +{ + level._audio.damb.entity_ref_count--; +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_audio_music.gsc b/MW3/PC/SP/maps/_audio_music.gsc new file mode 100644 index 0000000..dd7f750 --- /dev/null +++ b/MW3/PC/SP/maps/_audio_music.gsc @@ -0,0 +1,184 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_audio_music.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 12 + * Decompile Time: 183 ms + * Timestamp: 10/27/2023 2:21:29 AM +*******************************************************************/ + +//Function Number: 1 +mus_init() +{ + if(!isdefined(level._audio)) + { + level._audio = spawnstruct(); + } + + level._audio.music = spawnstruct(); + level._audio.music.cue_cash = []; + level._audio.music.curr_cue_name = ""; + level._audio.music.prev_cue_name = ""; + level._audio.music.enable_auto_mix = 0; + level._audio.music.env_threat_to_vol = [[0,0.5],[0.9,1],[1,1]]; + thread musx_monitor_game_vars(); +} + +//Function Number: 2 +mus_play(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = undefined; + var_06 = mus_get_playing_cue_preset(); + var_07 = musx_construct_cue(param_00); + var_08 = var_07["fade_in_time"]; + if(isdefined(param_01)) + { + var_08 = param_01; + } + + var_09 = 2; + if(isdefined(var_06)) + { + if(isdefined(param_02)) + { + var_09 = param_02; + } + else if(isdefined(param_01)) + { + var_09 = param_01; + } + else if(isdefined(var_06["fade_out_time"])) + { + var_09 = var_06["fade_out_time"]; + } + } + + var_0A = var_07["volume"]; + if(isdefined(param_03)) + { + var_0A = param_03; + } + + musx_start_cue(var_07["name"],var_08,var_09,var_0A,param_04); +} + +//Function Number: 3 +mus_stop(param_00) +{ + var_01 = 3; + if(mus_is_playing()) + { + var_02 = musx_get_cashed_cue(level._audio.music.curr_cue_name); + var_01 = var_02["fade_out_time"]; + } + + if(isdefined(param_00)) + { + var_01 = param_00; + } + + musx_stop_all_music(var_01); +} + +//Function Number: 4 +mus_is_playing() +{ + return isdefined(level._audio.music.curr_cue_name) && level._audio.music.curr_cue_name != ""; +} + +//Function Number: 5 +mus_get_playing_cue_preset() +{ + var_00 = undefined; + if(mus_is_playing()) + { + var_00 = musx_get_cashed_cue(level._audio.music.curr_cue_name); + } + + return var_00; +} + +//Function Number: 6 +musx_construct_cue(param_00) +{ + var_01 = musx_get_cashed_cue(param_00); + if(!isdefined(var_01)) + { + var_01 = []; + musx_cash_cue(var_7B); + } + + return var_7B; +} + +//Function Number: 7 +musx_start_cue(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = 0; + if(isdefined(param_04)) + { + var_05 = param_04; + } + + if(param_00 == level._audio.music.curr_cue_name && !var_05) + { + return; + } + + var_06 = level._audio.music.prev_cue_name; + var_07 = level._audio.music.curr_cue_name; + level._audio.music.prev_cue_name = level._audio.music.curr_cue_name; + level._audio.music.curr_cue_name = param_00; + var_08 = musx_get_cashed_cue(level._audio.music.curr_cue_name); + var_09 = musx_get_cashed_cue(level._audio.music.prev_cue_name); + var_0A = undefined; + if(isdefined(var_09)) + { + var_0A = var_09["alias"]; + } + + lib_0068::func_1480(var_08["alias"],param_01,param_02,param_03,var_0A); +} + +//Function Number: 8 +musx_stop_all_music(param_00) +{ + lib_0068::func_1484(param_00); +} + +//Function Number: 9 +musx_get_auto_mix() +{ + return level._audio.music.enable_auto_mix; +} + +//Function Number: 10 +musx_get_cashed_cue(param_00) +{ + return level._audio.music.cue_cash[param_00]; +} + +//Function Number: 11 +musx_cash_cue(param_00) +{ + level._audio.music.cue_cash[param_00["name"]] = param_00; +} + +//Function Number: 12 +musx_monitor_game_vars() +{ + if(musx_get_auto_mix()) + { + var_00 = 1; + for(;;) + { + wait var_00; + if(musx_get_auto_mix()) + { + var_01 = maps\_audio::aud_get_threat_level(); + var_02 = maps\_audio::aud_map(var_01,level._audio.music.env_threat_to_vol); + } + } + } +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_audio_presets_music.gsc b/MW3/PC/SP/maps/_audio_presets_music.gsc new file mode 100644 index 0000000..1b3b4ee --- /dev/null +++ b/MW3/PC/SP/maps/_audio_presets_music.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_audio_presets_music.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 3 + * Decompile Time: 34 ms + * Timestamp: 10/27/2023 2:20:31 AM +*******************************************************************/ + +//Function Number: 1 +audio_presets_music_moods(param_00,param_01) +{ + maps\_audio::aud_print_warning("CALLING MUSIC_MOODS PRESET USING OLD METHOD!"); +} + +//Function Number: 2 +audio_presets_music_cue_groups(param_00,param_01) +{ + maps\_audio::aud_print_warning("CALLING MUSIC_CUE_GROUPS PRESET USING OLD METHOD!"); +} + +//Function Number: 3 +audio_presets_music_cues(param_00,param_01) +{ + maps\_audio::aud_print_warning("CALLING MUSIC_CUES PRESET USING OLD METHOD!"); +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_audio_presets_vehicles.gsc b/MW3/PC/SP/maps/_audio_presets_vehicles.gsc new file mode 100644 index 0000000..c0c78b5 --- /dev/null +++ b/MW3/PC/SP/maps/_audio_presets_vehicles.gsc @@ -0,0 +1,339 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_audio_presets_vehicles.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 27 ms + * Timestamp: 10/27/2023 2:20:08 AM +*******************************************************************/ + +//Function Number: 1 +audio_presets_vehicles(param_00,param_01) +{ + switch(param_00) + { + case "nymn_player_hind": + break; + var_7B["speed"] + [["hind_move",["pitch","player_hind_move_pitch"],["volume","player_hind_move_volume"]],["hind_hover",["pitch","player_hind_hover_pitch"],["volume","player_hind_hover_volume"]],["updaterate",0.2],["smooth_up",0.3],["smooth_down",0.03],["range",1,40]] + break; + + case "nymn_broad_hind": + break; + var_7B["speed"] + [["broad_hind_move",["pitch","player_hind_move_pitch"],["volume","enemy_hind_move_volume"]],["updaterate",0.2],["smooth_up",0.3],["smooth_down",0.03],["range",1,30]] + break; + + case "paris_a_mi17": + break; + var_7B["speed"] + [["mi17_engine_high",["pitch","mi17_move_pitch"],["volume","mi17_move_volume"]],["mi17_idle_high",["pitch","mi17_hover_pitch"],["volume","mi17_hover_volume"]],["updaterate",0.2],["smooth_up",0.3],["smooth_down",0.01],["range",1,30]] + break; + + case "dubai_littlebird": + break; + var_7B["speed"] + [["dubai_littlebird_engine_high",["pitch","dubai_littlebird_move_pitch"],["volume","dubai_littlebird_move_volume"]],["dubai_littlebird_idle_high",["pitch","dubai_littlebird_hover_pitch"],["volume","dubai_littlebird_hover_volume"]],["updaterate",0.2],["smooth_up",0.3],["smooth_down",0.01],["range",1,30]] + break; + + case "paris_chase_hind": + break; + var_7B["speed"] + [["chase_hind_move",["pitch","player_hind_move_pitch"],["volume","enemy_hind_move_volume"]],["updaterate",0.2],["smooth_up",0.3],["smooth_down",0.01],["range",1,30]] + break; + + case "escape_zodiac": + break; + var_7B["start_stop"] + [["start","shg_zodiac_plr_rampup",["pitch","zodiac_player_rampup_pitch"],["volume","zodiac_player_rampup_volume"],1],["stop","shg_zodiac_plr_rampdown",["pitch","zodiac_player_rampdown_pitch"],["volume","zodiac_player_rampdown_volume"]],["updaterate",0.1],["offset",-50],["throttle_input","throttle"],["on_threshold",0.3],["off_threshold",-0.3],["smooth_up",0.5],["smooth_down",0.5]] + var_7B["speed"] + [["shg_zodiac_plr_motor_slow",["pitch","zodiac_player_slow_pitch"],["volume","zodiac_player_slow_volume"]],["shg_zodiac_plr_motor_med",["pitch","zodiac_player_medium_pitch"],["volume","zodiac_player_medium_volume"]],["shg_zodiac_plr_motor_fast",["pitch","zodiac_player_fast_pitch"],["volume","zodiac_player_fast_volume"]],["offset",-50],["updaterate",0.2],["multiply_by_throttle",1],["smooth_up",0.15],["smooth_down",0.25],["oneshot_duck",0.5],["oneshot_duck_time",1.5],["range",0,45]] + break; + + case "escape_zodiac_water": + break; + var_7B["speed"] + [["shg_zodiac_plr_water_idle",["pitch","zodiac_plr_water_idle_pitch"],["volume","zodiac_plr_water_idle_volume"]],["shg_zodiac_plr_water_slow",["pitch","zodiac_plr_water_slow_pitch"],["volume","zodiac_plr_water_slow_volume"]],["shg_zodiac_plr_water_med",["pitch","zodiac_plr_water_med_pitch"],["volume","zodiac_plr_water_med_volume"]],["shg_zodiac_plr_water_fast",["pitch","zodiac_plr_water_fast_pitch"],["volume","zodiac_plr_water_fast_volume"]],["updaterate",0.2],["smooth_up",0.3],["smooth_down",0.3],["range",1,30],["heightmax",25]] + break; + + case "sdv_motor_player": + break; + var_7B["start_stop"] + [["start","shg_sdv_plr_startup",["pitch","sdv_plr_rampup_pitch"],["volume","sdv_plr_rampup_volume"]],["stop","shg_sdv_plr_shutdown",["pitch","sdv_plr_rampdown_pitch"],["volume","sdv_plr_rampdown_volume"]],["updaterate",0.1],["throttle_input","throttle"],["on_threshold",0.3],["off_threshold",-0.3],["smooth_up",0.5],["smooth_down",0.5]] + var_7B["speed"] + [["shg_sdv_plr_motor_slow",["pitch","sdv_plr_motor_slow_pitch"],["volume","sdv_plr_motor_slow_volume"]],["shg_sdv_plr_motor_med",["pitch","sdv_plr_motor_med_pitch"],["volume","sdv_plr_motor_med_volume"]],["shg_sdv_plr_motor_fast",["pitch","sdv_plr_motor_fast_pitch"],["volume","sdv_plr_motor_fast_volume"]],["updaterate",0.2],["multiply_by_throttle",1],["throttle_input","throttle"],["smooth_up",0.1],["smooth_down",0.3],["range",1,12]] + break; + + case "ugv_motor_player": + break; + var_7B["start_stop"] + [["start","null",["pitch","sdv_plr_rampup_pitch"],["volume","sdv_plr_rampup_volume"]],["stop","null",["pitch","sdv_plr_rampdown_pitch"],["volume","sdv_plr_rampdown_volume"]],["updaterate",0.3],["throttle_input","leftstick_abs"],["on_threshold",0.3],["off_threshold",-0.3],["smooth_up",0.2],["smooth_down",0.2]] + var_7B["speed"] + [["ugv_plr_motor_slow",["pitch","sdv_plr_motor_slow_pitch"],["volume","sdv_plr_motor_slow_volume"]],["ugv_plr_motor_slow",["pitch","sdv_plr_motor_med_pitch"],["volume","sdv_plr_motor_med_volume"]],["ugv_plr_motor_fast",["pitch","sdv_plr_motor_fast_pitch"],["volume","sdv_plr_motor_fast_volume"]],["updaterate",0.1],["multiply_by_throttle",1],["throttle_input","leftstick_abs"],["smooth_up",0.2],["smooth_down",0.2],["range",1,8]] + break; + + case "ugv_treads_player": + break; + var_7B["speed"] + [["ugv_plr_treads_slow",["pitch","sdv_plr_motor_slow_pitch"],["volume","sdv_plr_motor_slow_volume"]],["ugv_plr_treads_slow",["pitch","sdv_plr_motor_med_pitch"],["volume","sdv_plr_motor_med_volume"]],["ugv_plr_treads_fast",["pitch","sdv_plr_motor_fast_pitch"],["volume","sdv_plr_motor_fast_volume"]],["updaterate",0.1],["multiply_by_throttle",1],["throttle_input","leftstick_abs"],["smooth_up",0.1],["smooth_down",0.1],["range",0.5,8]] + break; + + case "ugv_idle_player": + break; + var_7B["speed"] + [["ugv_plr_idle",["pitch","so_jeep_idle_pitch"],["volume","so_jeep_idle_volume"]],["updaterate",0.1],["smooth_up",0.2],["smooth_down",0.2],["range",0,25]] + break; + + case "sdv_water_player": + break; + var_7B["speed"] + [["shg_sdv_plr_water_slow",["pitch","sdv_plr_water_slow_pitch"],["volume","sdv_plr_water_slow_volume"]],["shg_sdv_plr_water_med",["pitch","sdv_plr_water_med_pitch"],["volume","sdv_plr_water_med_volume"]],["updaterate",0.2],["smooth_up",0.3],["smooth_down",0.1],["range",1,8]] + break; + + case "so_paris_jeep": + break; + var_7B["speed"] + [["so_jeep_slow",["pitch","so_jeep_slow_pitch"],["volume","so_jeep_slow_volume"]],["so_jeep_fast",["pitch","so_jeep_medium_pitch"],["volume","so_jeep_medium_volume"]],["so_jeep_idle",["pitch","so_jeep_idle_pitch"],["volume","so_jeep_idle_volume"]],["updaterate",0.1],["smooth_up",0.3],["smooth_down",0.1],["range",0,25]] + break; + } + + return var_7B; +} + +//Function Number: 2 +audio_presets_vehicle_maps(param_00,param_01) +{ + switch(param_00) + { + case "so_jeep_idle_pitch": + param_01 = [[0,0.5],[0.02,0.65],[0.1,0.75],[0.2,0.85],[1,1]]; + break; + + case "so_jeep_idle_volume": + param_01 = [[0,1],[0.05,0.9],[0.1,0.85],[0.25,0.45],[0.3,0.15],[0.35,0],[1,0]]; + break; + + case "so_jeep_slow_pitch": + param_01 = [[0,0.38],[0.1,0.4],[0.4,0.45],[0.45,0.5],[0.55,0.55],[0.7,0.6],[1,0.8]]; + break; + + case "so_jeep_slow_volume": + param_01 = [[0,0.01],[0.1,0.5],[0.35,0.75],[0.55,1],[0.7,0.6],[0.8,0.45],[1,0.01]]; + break; + + case "so_jeep_medium_pitch": + param_01 = [[0,0.25],[0.5,0.3],[0.65,0.35],[0.75,0.4],[0.85,0.45],[1,0.5]]; + break; + + case "so_jeep_medium_volume": + param_01 = [[0,0],[0.4,0.2],[0.6,0.6],[0.75,0.9],[1,1]]; + break; + + case "player_hind_move_volume": + param_01 = [[0,0],[0.3,0],[0.6,0.35],[0.7,0.9],[1,1]]; + break; + + case "player_hind_move_pitch": + param_01 = [[0,0.4],[0.5,0.4],[0.75,0.5],[1,0.7]]; + break; + + case "player_hind_hover_volume": + param_01 = [[0,1],[1,1]]; + break; + + case "player_hind_hover_pitch": + param_01 = [[0,0.4],[0.5,0.5],[1,0.7]]; + break; + + case "enemy_hind_move_volume": + param_01 = [[0,1],[1,1]]; + break; + + case "mi17_move_volume": + param_01 = [[0,0.75],[0.3,0.85],[0.6,0.95],[0.7,0.99],[1,1]]; + break; + + case "mi17_move_pitch": + param_01 = [[0,0.4],[0.5,0.6],[1,0.7]]; + break; + + case "mi17_hover_volume": + param_01 = [[0,1],[1,0.75]]; + break; + + case "mi17_hover_pitch": + param_01 = [[0,0.4],[0.5,0.6],[1,0.7]]; + break; + + case "dubai_littlebird_move_volume": + param_01 = [[0,0.75],[0.3,0.85],[0.6,0.95],[0.7,0.99],[1,1]]; + break; + + case "dubai_littlebird_move_pitch": + param_01 = [[0,0.4],[0.5,0.6],[1,0.7]]; + break; + + case "dubai_littlebird_hover_volume": + param_01 = [[0,1],[1,0.75]]; + break; + + case "dubai_littlebird_hover_pitch": + param_01 = [[0,0.4],[0.5,0.6],[1,0.7]]; + break; + + case "zodiac_player_rampup_pitch": + param_01 = [[0,0.45],[0.5,0.5],[1,1]]; + break; + + case "zodiac_player_rampup_volume": + param_01 = [[0,0],[0.25,0.5],[0.85,1],[1,1]]; + break; + + case "zodiac_player_rampdown_pitch": + param_01 = [[0,0.5],[0.25,0.55],[1,0.6]]; + break; + + case "zodiac_player_rampdown_volume": + param_01 = [[0,1],[0.25,0.85],[0.5,0.5],[1,0.25]]; + break; + + case "zodiac_player_idle_pitch": + param_01 = [[0,0.5],[0.02,0.65],[0.1,0.75],[0.2,0.85],[1,1]]; + break; + + case "zodiac_player_idle_volume": + param_01 = [[0,0.75],[0.05,1],[0.1,0.85],[0.25,0.45],[0.3,0.15],[0.35,0],[1,0]]; + break; + + case "zodiac_player_bottom_pitch": + param_01 = [[0,0.35],[0.1,0.4],[0.3,0.5],[0.35,0.6],[0.45,0.65],[0.6,0.7],[1,0.75]]; + break; + + case "zodiac_player_bottom_volume": + param_01 = [[0,0.75],[0.15,0.75],[0.35,1],[0.45,0.35],[0.55,0.25],[0.6,0.2],[0.7,0.15],[1,0]]; + break; + + case "zodiac_player_slow_pitch": + param_01 = [[0,0.2],[0.4,0.35],[0.45,0.45],[0.55,0.5],[0.7,0.6],[1,0.8]]; + break; + + case "zodiac_player_slow_volume": + param_01 = [[0,0.25],[0.1,0.5],[0.35,0.75],[0.55,1],[0.7,0.5],[0.8,0.35],[1,0.2]]; + break; + + case "zodiac_player_medium_pitch": + param_01 = [[0,0.35],[0.5,0.45],[0.65,0.5],[0.75,0.6],[0.85,0.7],[1,0.7]]; + break; + + case "zodiac_player_medium_volume": + param_01 = [[0,0],[0.4,0.2],[0.6,0.5],[0.75,1],[0.8,0.5],[0.9,0.25],[1,0.1]]; + break; + + case "zodiac_player_fast_pitch": + param_01 = [[0,0.45],[0.7,0.45],[0.85,0.5],[0.95,0.55],[1,0.7]]; + break; + + case "zodiac_player_fast_volume": + param_01 = [[0,0],[0.6,0],[0.7,0.25],[0.85,0.5],[0.95,0.5],[1,1]]; + break; + + case "zodiac_plr_water_idle_pitch": + param_01 = [[0,0.5],[1,0.5]]; + break; + + case "zodiac_plr_water_idle_volume": + param_01 = [[0,1],[0.1,0.5],[0.15,0.25],[0.2,0.15],[0.35,0],[1,0]]; + break; + + case "zodiac_plr_water_botm_pitch": + param_01 = [[0,0.45],[0.1,0.5],[0.3,0.5],[1,0.5]]; + break; + + case "zodiac_plr_water_botm_volume": + param_01 = [[0,0],[0.15,0.25],[0.35,1],[0.45,0.35],[0.55,0.25],[0.6,0.2],[0.7,0.15],[1,0]]; + break; + + case "zodiac_plr_water_slow_pitch": + param_01 = [[0,0.45],[0.1,0.5],[0.3,0.5],[1,0.5]]; + break; + + case "zodiac_plr_water_slow_volume": + param_01 = [[0,0],[0.1,0.25],[0.35,0.75],[0.55,1],[0.7,0.5],[0.8,0.35],[1,0.2]]; + break; + + case "zodiac_plr_water_med_pitch": + param_01 = [[0,0.45],[0.1,0.5],[0.3,0.5],[1,0.5]]; + break; + + case "zodiac_plr_water_med_volume": + param_01 = [[0,0],[0.4,0.2],[0.6,0.5],[0.75,1],[0.8,0.5],[0.9,0.25],[1,0.1]]; + break; + + case "zodiac_plr_water_fast_pitch": + param_01 = [[0,0.45],[0.1,0.5],[0.3,0.5],[1,0.5]]; + break; + + case "zodiac_plr_water_fast_volume": + param_01 = [[0,0],[0.6,0],[0.7,0.5],[0.85,1],[1,1]]; + break; + + case "sdv_plr_rampup_pitch": + param_01 = [[0,0.5],[0.5,0.5],[1,0.5]]; + break; + + case "sdv_plr_rampup_volume": + param_01 = [[0,1],[1,1]]; + break; + + case "sdv_plr_rampdown_pitch": + param_01 = [[0,0.5],[0.5,0.5],[1,0.5]]; + break; + + case "sdv_plr_rampdown_volume": + param_01 = [[0,1],[1,1]]; + break; + + case "sdv_plr_motor_slow_pitch": + param_01 = [[0,0.25],[0.15,0.4],[0.3,0.5],[0.6,0.55],[0.75,0.65],[1,0.75]]; + break; + + case "sdv_plr_motor_slow_volume": + param_01 = [[0,0],[0.05,0.5],[0.15,0.75],[0.25,1],[0.35,0.5],[0.45,0.25],[0.55,0.2],[1,0]]; + break; + + case "sdv_plr_motor_med_pitch": + param_01 = [[0,0.5],[0.6,0.5],[0.75,0.65],[1,0.75]]; + break; + + case "sdv_plr_motor_med_volume": + param_01 = [[0,0],[0.25,0.1],[0.35,0.5],[0.45,1],[0.65,1],[0.75,0.75],[0.95,0.25],[1,0.1]]; + break; + + case "sdv_plr_motor_fast_pitch": + param_01 = [[0,0.4],[0.6,0.4],[0.7,0.45],[0.85,0.5],[1,0.5]]; + break; + + case "sdv_plr_motor_fast_volume": + param_01 = [[0,0],[0.6,0.35],[0.7,0.55],[0.85,0.85],[1,1]]; + break; + + case "sdv_plr_water_slow_pitch": + param_01 = [[0,0.45],[0.1,0.5],[0.3,0.5],[1,0.5]]; + break; + + case "sdv_plr_water_slow_volume": + param_01 = [[0,0],[0.1,0.25],[0.45,0.75],[0.65,1],[0.7,0.5],[0.8,0.35],[1,0.2]]; + break; + + case "sdv_plr_water_med_pitch": + param_01 = [[0,0.45],[0.1,0.5],[0.3,0.5],[0.8,0.5],[1,0.55]]; + break; + + case "sdv_plr_water_med_volume": + param_01 = [[0,0],[0.5,0],[0.75,0],[0.85,0.25],[0.95,0.5],[1,1]]; + break; + } + + return param_01; +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_audio_vehicles.gsc b/MW3/PC/SP/maps/_audio_vehicles.gsc new file mode 100644 index 0000000..3fbd69b --- /dev/null +++ b/MW3/PC/SP/maps/_audio_vehicles.gsc @@ -0,0 +1,1468 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_audio_vehicles.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 50 + * Decompile Time: 870 ms + * Timestamp: 10/27/2023 2:21:33 AM +*******************************************************************/ + +//Function Number: 1 +vm_init() +{ + if(!isdefined(level._audio)) + { + level._audio = spawnstruct(); + } + + if(!isdefined(level._audio.veh)) + { + level._audio.veh = spawnstruct(); + level._audio.veh.minrate = 0.1; + level._audio.veh.defrate = 0.5; + level._audio.veh.defsmooth = 0.1; + level._audio.veh.minpitch = 0.5; + level._audio.veh.maxpitch = 1.5; + level._audio.veh.fadein_time = 2; + level._audio.veh.callbacks = []; + level._audio.veh.print_speed = 0; + level._audio.veh.print_tilt = 0; + level._audio.veh.print_yaw = 0; + level._audio.veh.print_roll = 0; + level._audio.veh.print_altitude = 0; + level._audio.veh.print_throttle = 0; + level._audio.veh.presets = []; + level._audio.veh.maps = []; + level._audio.veh.instances = []; + level._audio.veh.ducked_instances = []; + level._audio.veh.duck_starts = []; + level._audio.veh.duck_stops = []; + } +} + +//Function Number: 2 +vm_register_custom_callback(param_00,param_01) +{ + level._audio.veh.callbacks[param_00] = param_01; +} + +//Function Number: 3 +vm_start_preset(param_00,param_01,param_02,param_03,param_04,param_05) +{ + wait 0.25; + if(isdefined(level._audio.veh.instances[param_00])) + { + vm_stop_preset_instance(param_00); + } + + if(isdefined(param_04)) + { + thread maps\_audio::aud_play_linked_sound(param_04,param_02,undefined,undefined,param_05); + } + + level._audio.veh.instances[param_00] = []; + level._audio.veh.instances[param_00]["entity"] = param_02; + if(!isdefined(level._audio.veh.presets[param_01])) + { + var_06 = []; + var_06 = maps\_audio_presets_vehicles::audio_presets_vehicles(param_01,var_06); + level._audio.veh.presets[param_01] = var_06; + } + + level._audio.veh.instances[param_00]["entity"] = param_02; + foreach(var_13, var_08 in level._audio.veh.presets[param_01]) + { + var_09 = spawnstruct(); + var_09.instance_name = param_00; + var_09.vehicle = param_02; + switch(var_13) + { + case "tilt": + var_09.type = "tilt"; + var_09.callback = ::vmx_get_tilt; + var_09.min = -45; + var_09.max = 45; + break; + + case "yaw": + var_09.type = "yaw"; + var_09.callback = ::vmx_get_yaw; + var_09.min = 0; + var_09.max = 360; + break; + + case "roll": + var_09.type = "roll"; + var_09.callback = ::vmx_get_roll; + var_09.min = -45; + var_09.max = 45; + break; + + case "speed": + var_09.type = "speed"; + var_09.callback = ::vmx_get_speed; + var_09.min = 0; + var_09.max = 100; + break; + + case "altitude": + var_09.type = "altitude"; + var_09.callback = ::vmx_get_altitude; + var_09.min = 0; + var_09.max = 100; + break; + + case "start_stop": + var_09.type = "start_stop"; + var_09.callback = ::vmx_get_throttle; + var_09.min = 0; + var_09.max = 1; + break; + + default: + break; + } + + var_09.smoothness = level._audio.veh.defsmooth; + var_09.smooth_up = undefined; + var_09.smooth_down = undefined; + var_09.updaterate = level._audio.veh.defrate; + var_09.alias_data = []; + var_09.fadein = 0.5; + if(isdefined(param_03)) + { + var_09.fadein = param_03; + } + + foreach(var_0B in var_08) + { + switch(var_0B[0]) + { + case "updaterate": + var_09.updaterate = var_0B[1]; + break; + + case "smoothness": + var_09.smoothness = var_0B[1]; + break; + + case "smooth_up": + var_09.smooth_up = var_0B[1]; + break; + + case "smooth_down": + var_09.smooth_down = var_0B[1]; + break; + + case "heightmax": + var_09.heightmax = var_0B[1]; + break; + + case "callback": + var_0C = var_0B[1]; + var_09.custom_callback = level._audio.veh.callbacks[var_0C]; + break; + + case "range": + var_09.min = min(var_0B[1],var_0B[2]); + var_09.max = max(var_0B[1],var_0B[2]); + break; + + case "multiply_by_throttle": + var_09.multiply_by_throttle = 1; + break; + + case "multiply_by_leftstick": + var_09.multiply_by_leftstick = 1; + break; + + case "start": + var_09.start_alias_data = spawnstruct(); + var_09.start_alias_data.name = var_0B[1]; + for(var_0D = 2;var_0D < var_0B.size;var_0D++) + { + if(isarray(var_0B[var_0D])) + { + var_0E = var_0B[var_0D][0]; + var_0F = var_0B[var_0D][1]; + if(var_0E == "pitch") + { + var_09.start_alias_data.pitch_map_name = var_0F; + } + else if(var_0E == "volume") + { + var_09.start_alias_data.volume_map_name = var_0F; + } + + if(!isdefined(level._audio.veh.maps[var_0F])) + { + var_10 = []; + var_10 = maps\_audio_presets_vehicles::audio_presets_vehicle_maps(var_0F,var_10); + level._audio.veh.maps[var_0F] = var_10; + } + + continue; + } + + level._audio.veh.duck_starts[param_00] = var_0B[var_0D]; + } + break; + + case "stop": + var_09.stop_alias_data = spawnstruct(); + var_09.stop_alias_data.name = var_0B[1]; + for(var_0D = 2;var_0D < var_0B.size;var_0D++) + { + if(isarray(var_0B[var_0D])) + { + var_0E = var_0B[var_0D][0]; + var_0F = var_0B[var_0D][1]; + if(var_0E == "pitch") + { + var_09.stop_alias_data.pitch_map_name = var_0F; + } + else if(var_0E == "volume") + { + var_09.stop_alias_data.volume_map_name = var_0F; + } + + if(!isdefined(level._audio.veh.maps[var_0F])) + { + var_10 = []; + var_10 = maps\_audio_presets_vehicles::audio_presets_vehicle_maps(var_0F,var_10); + level._audio.veh.maps[var_0F] = var_10; + } + + continue; + } + + level._audio.veh.duck_stops[param_00] = var_0B[var_0D]; + } + break; + + case "throttle_input": + var_09.throttle_input = var_0B[1]; + break; + + case "on_threshold": + var_09.on_threshold = var_0B[1]; + break; + + case "off_threshold": + var_09.off_threshold = var_0B[1]; + break; + + case "oneshot_duck": + var_09.duck_amount = var_0B[1]; + break; + + case "oneshot_duck_time": + var_09.duck_time = var_0B[1]; + break; + + case "offset": + var_09.offset = var_0B[1]; + break; + + default: + var_11 = spawnstruct(); + var_11.alias_name = var_0B[0]; + for(var_0D = 1;var_0D < var_0B.size;var_0D++) + { + var_0F = var_0B[var_0D][1]; + if(var_0B[var_0D][0] == "pitch") + { + var_11.pitch_map_name = var_0F; + } + else + { + var_11.vol_map_name = var_0F; + } + + if(!isdefined(level._audio.veh.maps[var_0F])) + { + var_10 = []; + var_10 = maps\_audio_presets_vehicles::audio_presets_vehicle_maps(var_0F,var_10); + level._audio.veh.maps[var_0F] = var_10; + } + } + + var_09.alias_data[var_09.alias_data.size] = var_11; + break; + } + } + + if(var_09.type == "start_stop") + { + thread vmx_do_start_stop_callback(var_09); + continue; + } + + thread vmx_callback(var_09); + } +} + +//Function Number: 4 +vm_stop(param_00) +{ + level notify("aud_veh_stop"); + var_01 = 1; + if(isdefined(param_00)) + { + var_01 = max(0.1,param_00); + } + + foreach(var_03 in level._audio.veh.playing_presets) + { + if(var_03.size > 0) + { + foreach(var_05 in var_03) + { + thread maps\_audio::aud_fade_out_and_delete(var_05,var_01); + } + } + } + + level._audio.veh.playing_presets = []; +} + +//Function Number: 5 +vm_stop_preset_instance(param_00,param_01) +{ + var_02 = 1; + if(isdefined(param_01)) + { + var_02 = max(0.01,param_01); + } + + if(isdefined(level._audio.veh.instances[param_00])) + { + level notify("aud_veh_stop_" + param_00); + if(level._audio.veh.instances[param_00].size > 0) + { + foreach(var_05, var_04 in level._audio.veh.instances[param_00]) + { + if(var_05 != "entity" && var_05 != "speed" && var_05 != "throttle") + { + var_04 scalevolume(0,var_02); + } + } + } + + wait var_02 + 0.05; + if(level._audio.veh.instances[param_00].size > 0) + { + foreach(var_05, var_04 in level._audio.veh.instances[param_00]) + { + if(var_05 != "entity" && var_05 != "speed" && var_05 != "throttle") + { + var_04 delete(); + } + } + } + + level._audio.veh.instances[param_00] = undefined; + } +} + +//Function Number: 6 +vm_set_range(param_00,param_01,param_02) +{ + if(!isdefined(self.aud_overrides)) + { + self.aud_overrides = []; + } + + self.aud_overrides[param_00] = spawnstruct(); + self.aud_overrides[param_00].min_range = param_01; + self.aud_overrides[param_00].max_range = param_02; +} + +//Function Number: 7 +vmx_monitor_oneshot_ent() +{ + self.sound_playing = 1; + self waittill("sounddone"); + self.sound_playing = 0; +} + +//Function Number: 8 +vmx_waittill_endon_delete(param_00) +{ + level common_scripts\utility::waittill_any("aud_veh_stop","aud_veh_stop_" + param_00); + if(self.sound_playing) + { + self scalevolume(0,0.1); + wait 0.1; + self stopsounds(); + wait 0.05; + } + + self delete(); +} + +//Function Number: 9 +vmx_stop_sound(param_00) +{ + self scalevolume(0,0.05); + wait 0.05; + self stopsounds(); + wait 0.05; + self.sound_playing = 0; +} + +//Function Number: 10 +vmx_play_oneshot_sound(param_00) +{ + if(self.sound_playing) + { + vmx_stop_sound(0); + } + + self playsound(param_00,"sounddone"); + thread vmx_monitor_oneshot_ent(); +} + +//Function Number: 11 +vmx_init_oneshot_ents(param_00) +{ + if(!isdefined(level._audio.veh.start_ents)) + { + level._audio.veh.start_ents = []; + } + + if(!isdefined(level._audio.veh.stop_ents)) + { + level._audio.veh.stop_ents = []; + } + + if(!isdefined(level._audio.veh.start_ent_count)) + { + level._audio.veh.start_ent_count = []; + } + + if(!isdefined(level._audio.veh.stop_ent_count)) + { + level._audio.veh.stop_ent_count = []; + } + + level._audio.veh.start_ents[param_00] = []; + level._audio.veh.start_ent_count[param_00] = 0; + level._audio.veh.stop_ents[param_00] = []; + level._audio.veh.stop_ent_count[param_00] = 0; +} + +//Function Number: 12 +vmx_get_need_to_duck(param_00) +{ + var_01 = 0; + if(isdefined(level._audio.veh.duck_starts[param_00]) && level._audio.veh.duck_starts[param_00] && vmx_get_start_sound_playing(param_00)) + { + var_01 = 1; + } + + if(isdefined(level._audio.veh.duck_stops[param_00]) && level._audio.veh.duck_stops[param_00] && vmx_get_stop_sound_playing(param_00)) + { + var_01 = 1; + } + + return var_01; +} + +//Function Number: 13 +vmx_get_start_sound_playing(param_00) +{ + if(level._audio.veh.start_ents[param_00].size > 0) + { + return 1; + } + + return 0; +} + +//Function Number: 14 +vmx_get_stop_sound_playing(param_00) +{ + if(level._audio.veh.stop_ents[param_00].size > 0) + { + return 1; + } + + return 0; +} + +//Function Number: 15 +vmx_scale_start_sound_pitch(param_00,param_01,param_02) +{ + foreach(var_04 in level._audio.veh.start_ents[param_02]) + { + if(isdefined(var_04)) + { + var_04 setpitch(param_00,param_01); + } + } +} + +//Function Number: 16 +vmx_scale_stop_sound_pitch(param_00,param_01,param_02) +{ + foreach(var_04 in level._audio.veh.stop_ents[param_02]) + { + if(isdefined(var_04)) + { + var_04 setpitch(param_00,param_01); + } + } +} + +//Function Number: 17 +vmx_scale_start_sound_volume(param_00,param_01,param_02) +{ + foreach(var_04 in level._audio.veh.start_ents[param_02]) + { + if(isdefined(var_04)) + { + var_04 scalevolume(param_00,param_01); + } + } +} + +//Function Number: 18 +vmx_scale_stop_sound_volume(param_00,param_01,param_02) +{ + foreach(var_04 in level._audio.veh.stop_ents[param_02]) + { + if(isdefined(var_04)) + { + var_04 scalevolume(param_00,param_01); + } + } +} + +//Function Number: 19 +vmx_play_start_sound(param_00,param_01,param_02,param_03) +{ + var_04 = 0; + if(isdefined(param_03)) + { + var_04 = param_03; + } + + var_05 = spawn("script_origin",param_01.origin); + var_05 linkto(param_01,"tag_origin",(var_04,0,0),(0,0,0)); + var_05.ref = level._audio.veh.start_ent_count[param_02]; + var_05 playsound(param_00,"sounddone"); + var_05 thread vmx_monitor_start_ent(param_02); + level._audio.veh.start_ents[param_02][var_05.ref] = var_05; + level._audio.veh.start_ent_count[param_02]++; +} + +//Function Number: 20 +vmx_play_stop_sound(param_00,param_01,param_02,param_03) +{ + var_04 = 0; + if(isdefined(param_03)) + { + var_04 = param_03; + } + + var_05 = spawn("script_origin",param_01.origin); + var_05 linkto(param_01,"tag_origin",(var_04,0,0),(0,0,0)); + var_05.ref = level._audio.veh.stop_ent_count[param_02]; + var_05 playsound(param_00,"sounddone"); + level._audio.veh.stop_ents[param_02][var_05.ref] = var_05; + level._audio.veh.stop_ent_count[param_02]++; + wait 0.05; + var_05 thread vmx_monitor_stop_ent(param_02); +} + +//Function Number: 21 +vmx_monitor_start_ent(param_00) +{ + self endon("kill"); + self waittill("sounddone"); + level._audio.veh.start_ents[param_00][self.ref] = undefined; + if(isdefined(level._audio.veh.ducked_instances[param_00])) + { + level._audio.veh.ducked_instances[param_00] = undefined; + } + + self delete(); +} + +//Function Number: 22 +vmx_monitor_stop_ent(param_00) +{ + self endon("kill"); + self waittill("sounddone"); + level._audio.veh.stop_ents[param_00][self.ref] = undefined; + if(isdefined(level._audio.veh.ducked_instances[param_00])) + { + level._audio.veh.ducked_instances[param_00] = undefined; + } + + self delete(); +} + +//Function Number: 23 +vmx_stop_stop_ent(param_00,param_01,param_02) +{ + if(isdefined(level._audio.veh.ducked_instances[param_02])) + { + level._audio.veh.ducked_instances[param_02] = undefined; + } + + var_03 = 0.1; + if(isdefined(param_01)) + { + var_03 = param_01; + } + + level._audio.veh.stop_ents[param_02][param_00.ref] = undefined; + param_00 scalevolume(0,var_03 + 0.05); + param_00 notify("kill"); + wait var_03 + 0.05; + param_00 stopsounds(); + wait 0.05; + param_00 delete(); +} + +//Function Number: 24 +vmx_stop_start_ent(param_00,param_01,param_02) +{ + if(isdefined(level._audio.veh.ducked_instances[param_02])) + { + level._audio.veh.ducked_instances[param_02] = undefined; + } + + var_03 = 0.1; + if(isdefined(param_01)) + { + var_03 = param_01; + } + + level._audio.veh.start_ents[param_02][param_00.ref] = undefined; + param_00 scalevolume(0,var_03 + 0.05); + param_00 notify("kill"); + wait var_03 + 0.05; + param_00 stopsounds(); + wait 0.05; + param_00 delete(); +} + +//Function Number: 25 +vmx_do_start_stop_callback(param_00) +{ + var_01 = param_00.instance_name; + level endon("aud_veh_stop"); + level endon("aud_veh_stop_" + var_01); + level._audio.veh.instances[var_01]["entity"] endon("death"); + var_02 = 0; + var_03 = 0; + var_04 = -1; + var_05 = "off"; + var_06 = param_00.smoothness; + var_07 = param_00.smooth_up; + var_08 = param_00.smooth_down; + var_09 = param_00.min; + var_0A = param_00.max; + var_0B = 0; + vmx_init_oneshot_ents(var_01); + var_0C = gettime(); + for(;;) + { + var_0D = [[ param_00.callback ]](param_00); + var_0D = var_0D - param_00.min / param_00.max - param_00.min; + var_0D = clamp(var_0D,0,1); + var_0B = var_0D; + if(isdefined(var_07) && var_0D > var_02) + { + var_02 = var_02 + var_07 * var_0D - var_02; + } + else if(isdefined(var_08) && var_0D <= var_02) + { + var_02 = var_02 + var_08 * var_0D - var_02; + } + else + { + var_02 = var_02 + var_06 * var_0D - var_02; + } + + var_0E = var_02 - var_03; + var_03 = var_02; + var_0F = gettime(); + var_10 = var_0F - var_0C; + var_11 = 0; + var_12 = 0; + if((var_0E >= param_00.on_threshold || var_0B >= 0.99) && var_05 == "off" && var_10 > 200) + { + var_0C = var_0F; + var_05 = "on"; + var_11 = 1; + wait 0.05; + var_13 = level._audio.veh.instances[var_01]["entity"]; + thread vmx_play_start_sound(param_00.start_alias_data.name,var_13,param_00.instance_name,param_00.offset); + if(isdefined(level._audio.veh.stop_ents[param_00.instance_name])) + { + var_14 = level._audio.veh.stop_ents[param_00.instance_name]; + foreach(var_13 in var_14) + { + thread vmx_stop_stop_ent(var_13,undefined,param_00.instance_name); + } + } + } + else if((var_0E <= param_00.off_threshold || var_0B <= 0.01) && var_05 == "on" && var_10 > 200) + { + var_0C = var_0F; + var_05 = "off"; + var_12 = 1; + wait 0.05; + var_13 = level._audio.veh.instances[var_01]["entity"]; + thread vmx_play_stop_sound(param_00.stop_alias_data.name,var_13,param_00.instance_name,param_00.offset); + if(isdefined(level._audio.veh.start_ents[param_00.instance_name])) + { + var_17 = level._audio.veh.start_ents[param_00.instance_name]; + foreach(var_13 in var_17) + { + thread vmx_stop_start_ent(var_13,undefined,param_00.instance_name); + } + } + } + + var_1A = undefined; + var_1B = undefined; + if(vmx_get_start_sound_playing(param_00.instance_name)) + { + if(var_11) + { + var_11 = 0; + if(isdefined(param_00.start_alias_data.pitch_map_name)) + { + var_1A = maps\_audio::aud_map(var_02,level._audio.veh.maps[param_00.start_alias_data.pitch_map_name]); + var_1A = level._audio.veh.minpitch + var_1A * level._audio.veh.maxpitch - level._audio.veh.minpitch; + vmx_scale_start_sound_pitch(var_1A,param_00.updaterate,param_00.instance_name); + } + } + + if(isdefined(param_00.start_alias_data.vol_map_name)) + { + var_1B = maps\_audio::aud_map(var_02,level._audio.veh.maps[param_00.start_alias_data.vol_map_name]); + vmx_scale_start_sound_volume(var_1B,param_00.updaterate,param_00.instance_name); + } + } + + if(vmx_get_stop_sound_playing(param_00.instance_name)) + { + if(var_12) + { + var_12 = 0; + if(isdefined(param_00.stop_alias_data.pitch_map_name)) + { + var_1A = maps\_audio::aud_map(var_02,level._audio.veh.maps[param_00.stop_alias_data.pitch_map_name]); + var_1A = level._audio.veh.minpitch + var_1A * level._audio.veh.maxpitch - level._audio.veh.minpitch; + vmx_scale_stop_sound_pitch(var_1A,param_00.updaterate,param_00.instance_name); + } + } + + if(isdefined(param_00.stop_alias_data.vol_map_name)) + { + var_1B = maps\_audio::aud_map(var_02,level._audio.veh.maps[param_00.stop_alias_data.vol_map_name]); + vmx_scale_stop_sound_volume(var_1B,param_00.updaterate,param_00.instance_name); + } + } + + var_04 = var_02; + wait param_00.updaterate; + } +} + +//Function Number: 26 +vm_disablethrottleupdate(param_00) +{ + self.aud_engine_disable = 1; + if(isdefined(param_00)) + { + self.aud_engine_throttle_amount = param_00; + } +} + +//Function Number: 27 +vm_enablethrottleupdate() +{ + self.aud_engine_disable = undefined; +} + +//Function Number: 28 +vmx_callback(param_00) +{ + var_01 = param_00.instance_name; + level endon("aud_veh_stop"); + level endon("aud_veh_stop_" + var_01); + var_02 = undefined; + var_03 = param_00.smoothness; + var_04 = param_00.smooth_up; + var_05 = param_00.smooth_down; + var_06 = param_00.min; + var_07 = param_00.max; + if(isdefined(param_00.heightmax)) + { + var_08 = level._audio.veh.instances[var_01]["entity"]; + param_00.init_height = var_08.origin[2]; + } + + var_09 = 1; + for(;;) + { + param_00.smoothness = var_03; + param_00.smooth_up = var_04; + param_00.smooth_down = var_05; + var_08 = level._audio.veh.instances[var_01]["entity"]; + if(isdefined(var_08.aud_overrides) && isdefined(var_08.aud_overrides[param_00.type]) && isdefined(var_08.aud_overrides[param_00.type].min_range)) + { + param_00.min = var_08.aud_overrides[param_00.type].min_range; + param_00.max = var_08.aud_overrides[param_00.type].max_range; + } + else + { + param_00.min = var_06; + param_00.max = var_07; + } + + if(!isdefined(var_08)) + { + vm_stop(param_00.instance_name); + return; + } + + var_0A = 0; + var_0B = 0; + if(isdefined(var_08.aud_engine_disable)) + { + var_0A = var_08.aud_engine_disable; + if(isdefined(var_08.aud_engine_throttle_amount)) + { + var_0B = var_08.aud_engine_throttle_amount; + } + } + + var_0C = [[ param_00.callback ]](param_00); + if(isdefined(param_00.multiply_by_throttle)) + { + if(var_0A) + { + var_0D = var_0B; + } + else + { + var_0D = vmx_get_throttle(var_01); + } + + if(level._audio.veh.print_throttle) + { + iprintln("throttle: " + var_0D); + } + + var_0C = var_0C * var_0D; + } + + var_0C = var_0C - param_00.min / param_00.max - param_00.min; + var_0C = clamp(var_0C,0,1); + if(isdefined(var_02)) + { + if(isdefined(param_00.smooth_up) && var_0C > var_02) + { + var_02 = var_02 + param_00.smooth_up * var_0C - var_02; + } + else if(isdefined(param_00.smooth_down) && var_0C <= var_02) + { + var_02 = var_02 + param_00.smooth_down * var_0C - var_02; + } + else + { + var_02 = var_02 + param_00.smoothness * var_0C - var_02; + } + } + else + { + var_02 = var_0C; + } + + if(isdefined(param_00.custom_callback)) + { + [[ param_00.custom_callback ]](var_08,var_02); + } + + foreach(var_0F in param_00.alias_data) + { + thread vmx_update_sound(var_0F,param_00,var_02,var_01,var_09); + } + + if(var_09) + { + var_09 = 0; + wait param_00.fadein; + continue; + } + + wait param_00.updaterate; + } +} + +//Function Number: 29 +vmx_update_sound(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = undefined; + var_06 = undefined; + if(isdefined(param_00.pitch_map_name)) + { + var_05 = maps\_audio::aud_map(param_02,level._audio.veh.maps[param_00.pitch_map_name]); + var_05 = level._audio.veh.minpitch + var_05 * level._audio.veh.maxpitch - level._audio.veh.minpitch; + } + + if(isdefined(param_00.vol_map_name)) + { + var_06 = maps\_audio::aud_map(param_02,level._audio.veh.maps[param_00.vol_map_name]); + } + + var_07 = 0; + var_08 = 0; + if(isdefined(level._audio.veh.ducked_instances[param_03])) + { + var_09 = level._audio.veh.ducked_instances[param_03]; + var_0A = gettime(); + var_0B = 2.5; + if(isdefined(param_01.duck_time)) + { + var_0B = param_01.duck_time; + } + + if(var_0A - var_09 < var_0B * 1000) + { + var_07 = 1; + } + } + + if(!var_07) + { + if(!isdefined(level._audio.veh.ducked_instances[param_03]) && vmx_get_need_to_duck(param_03)) + { + var_07 = 1; + level._audio.veh.ducked_instances[param_03] = gettime(); + } + } + + if(var_07) + { + var_0C = 0.7; + if(isdefined(param_01.duck_amount)) + { + var_0C = param_01.duck_amount; + } + + var_06 = var_06 * var_0C; + } + + if(isdefined(param_01.heightmax)) + { + var_0D = param_01.vehicle.origin[2]; + var_0E = var_0D - param_01.init_height; + if(var_0E > param_01.heightmax) + { + var_06 = 0; + } + } + + if(!isdefined(level._audio.veh.instances[param_03][param_00.alias_name])) + { + level._audio.veh.instances[param_03][param_00.alias_name] = spawn("script_origin",param_01.vehicle.origin); + var_0F = 0; + if(isdefined(param_01.offset)) + { + var_0F = param_01.offset; + } + + level._audio.veh.instances[param_03][param_00.alias_name] linkto(param_01.vehicle,"tag_origin",(var_0F,0,0),(0,0,0)); + level._audio.veh.instances[param_03][param_00.alias_name] playloopsound(param_00.alias_name); + level._audio.veh.instances[param_03][param_00.alias_name] scalevolume(0); + wait 0.05; + level._audio.veh.instances[param_03][param_00.alias_name] scalevolume(var_06,param_01.fadein); + return; + } + + if(isdefined(var_05)) + { + level._audio.veh.instances[param_03][param_00.alias_name] setpitch(var_05,param_01.updaterate); + } + + if(isdefined(var_06)) + { + level._audio.veh.instances[param_03][param_00.alias_name] scalevolume(var_06,param_01.updaterate); + } +} + +//Function Number: 30 +vm_linkto_new_entity(param_00,param_01,param_02,param_03) +{ + var_04 = "tag_origin"; + if(isdefined(param_02)) + { + var_04 = "tag_origin"; + } + + var_05 = 0; + if(isdefined(param_03)) + { + var_05 = param_03; + } + + if(isdefined(level._audio.veh.instances[param_00])) + { + foreach(var_08, var_07 in level._audio.veh.instances[param_00]) + { + if(var_08 != "entity" && var_08 != "speed" && var_08 != "throttle") + { + var_07 unlink(); + var_07 linkto(param_01,var_04,(var_05,0,0),(0,0,0)); + } + } + + level._audio.veh.instances[param_00]["entity"] = param_01; + } +} + +//Function Number: 31 +vm_set_speed_callback(param_00,param_01) +{ + if(isdefined(level._audio.veh.instances[param_00])) + { + level._audio.veh.instances[param_00]["speed"] = param_01; + } +} + +//Function Number: 32 +vm_set_throttle_callback(param_00,param_01) +{ + if(isdefined(level._audio.veh.instances[param_00])) + { + level._audio.veh.instances[param_00]["throttle"] = param_01; + } +} + +//Function Number: 33 +vm_set_start_stop_callback(param_00,param_01) +{ + if(isdefined(level._audio.veh.instances[param_00])) + { + } +} + +//Function Number: 34 +vmx_get_tilt(param_00) +{ + var_01 = level._audio.veh.instances[param_00.instance_name]["entity"]; + var_02 = var_01.angles[0]; + if(level._audio.veh.print_tilt) + { + iprintln("tilt: " + var_02); + } + + return var_02; +} + +//Function Number: 35 +vmx_get_speed(param_00) +{ + var_01 = level._audio.veh.instances[param_00.instance_name]["entity"]; + var_02 = 0; + if(isdefined(level._audio.veh.instances[param_00.instance_name]["speed"])) + { + var_03 = level._audio.veh.instances[param_00.instance_name]["speed"]; + var_02 = var_01 [[ var_03 ]](); + } + else + { + var_02 = param_00.vehicle vehicle_getspeed(); + } + + if(level._audio.veh.print_speed) + { + iprintln("speed: " + var_02); + } + + return var_02; +} + +//Function Number: 36 +vmx_get_yaw(param_00) +{ + var_01 = level._audio.veh.instances[param_00.instance_name]["entity"]; + var_02 = var_01.angles[1]; + if(level._audio.veh.print_speed) + { + iprintln("yaw: " + var_02); + } + + return var_02; +} + +//Function Number: 37 +vmx_get_roll(param_00) +{ + var_01 = level._audio.veh.instances[param_00.instance_name]["entity"]; + var_02 = var_01.angles[2]; + if(level._audio.veh.print_roll) + { + iprintln("roll: " + var_02); + } + + return var_02; +} + +//Function Number: 38 +vmx_get_altitude(param_00) +{ + var_01 = level._audio.veh.instances[param_00.instance_name]["entity"]; + return 1; +} + +//Function Number: 39 +vmx_get_throttle(param_00) +{ + var_01 = level._audio.veh.instances[param_00.instance_name]["entity"]; + var_02 = 0; + if(isdefined(level._audio.veh.instances[param_00.instance_name]["throttle"])) + { + var_03 = level._audio.veh.instances[param_00.instance_name]["speed"]; + var_02 = var_01 [[ var_03 ]](); + } + else if(isdefined(param_00.throttle_input) && param_00.throttle_input == "leftstick") + { + var_04 = level.player getnormalizedmovement(); + var_05 = var_04[0]; + var_02 = 0; + if(var_05 >= 0) + { + var_02 = var_05; + } + } + else if(isdefined(param_00.throttle_input) && param_00.throttle_input == "leftstick_abs") + { + var_04 = level.player getnormalizedmovement(); + var_05 = abs(var_04[0]); + var_06 = abs(var_04[1]); + var_02 = 2 * sqrt(var_05 * var_05 + var_06 * var_06); + var_02 = clamp(var_02,0,1); + } + else if(isdefined(param_00.throttle_input) && param_00.throttle_input == "attack") + { + if(level.player attackbuttonpressed()) + { + var_02 = 1; + } + else + { + var_02 = 0; + } + } + else + { + var_02 = var_01 vehicle_getthrottle(); + } + + return var_02; +} + +//Function Number: 40 +vm_ground_vehicle_start(param_00,param_01,param_02,param_03,param_04,param_05) +{ + self endon("death"); + self.veh_aliases = spawnstruct(); + self.veh_aliases.move_lo_lp = param_00; + self.veh_aliases.rolling_lp = param_01; + self.veh_aliases.idle_lp = param_02; + self.veh_aliases.engine_rev_lo_os = param_03; + self.veh_aliases.breaks_os = param_04; + thread vmx_monitor_explosion(param_05); + thread vmx_ground_vehicle_monitor_death(); + thread vmx_cleanup_ents(); + vmx_vehicle_engine(); +} + +//Function Number: 41 +vmx_vehicle_engine() +{ + self endon("death"); + self.do_rev = 1; + self.ents_mixed_in = 0; + self.has_idle_played = 0; + self.has_move_played = 0; + self.has_roll_played = 0; + self.veh_mix_ents = spawnstruct(); + self.veh_mix_ents.idle_ent = spawn("script_origin",self.origin); + self.veh_mix_ents.idle_ent linkto(self); + self.veh_mix_ents.move_ent = spawn("script_origin",self.origin); + self.veh_mix_ents.move_ent linkto(self); + self.veh_mix_ents.roll_ent = spawn("script_origin",self.origin); + self.veh_mix_ents.roll_ent linkto(self); + self.veh_mix_ents.one_shot = spawn("script_origin",self.origin); + self.veh_mix_ents.one_shot linkto(self); + for(;;) + { + var_00 = self vehicle_getspeed(); + if(var_00 > 0.05) + { + self.do_rev = 1; + vmx_ground_speed_watch(var_00); + } + + wait 0.25; + } +} + +//Function Number: 42 +vmx_ground_speed_watch(param_00) +{ + self endon("death"); + var_01 = 0.5; + var_02 = 1.5; + var_03 = 0; + for(;;) + { + var_04 = param_00; + wait 0.1; + var_05 = 0.5 + self vehicle_getspeed(); + if(var_05 >= var_04) + { + if(isdefined(self.veh_aliases.idle_lp) && self.has_idle_played) + { + self.veh_mix_ents.idle_ent thread vmx_aud_ent_fade_out(0.5); + } + + if(self.do_rev) + { + self.do_rev = 0; + if(isdefined(self.veh_aliases.engine_rev_lo_os)) + { + self.veh_mix_ents.one_shot playsound(self.veh_aliases.engine_rev_lo_os); + } + } + else + { + if(isdefined(self.veh_aliases.rolling_lp) && !self.has_roll_played) + { + self.has_roll_played = 1; + self.veh_mix_ents.roll_ent playloopsound(self.veh_aliases.rolling_lp); + } + + if(isdefined(self.veh_aliases.move_lo_lp) && !self.has_move_played) + { + self.has_move_played = 1; + self.veh_mix_ents.move_ent playloopsound(self.veh_aliases.move_lo_lp); + } + + if(!var_03) + { + if(isdefined(self.veh_aliases.move_lo_lp)) + { + self.veh_mix_ents.move_ent thread vmx_aud_ent_fade_in(var_01); + } + + if(isdefined(self.veh_aliases.rolling_lp)) + { + self.veh_mix_ents.roll_ent thread vmx_aud_ent_fade_in(var_01); + } + + var_03 = 1; + } + } + } + else if(var_05 < var_04) + { + if(isdefined(self.veh_aliases.idle_lp)) + { + if(!self.has_idle_played) + { + self.has_idle_played = 1; + self.veh_mix_ents.idle_ent playloopsound(self.veh_aliases.idle_lp); + } + + self.veh_mix_ents.idle_ent thread vmx_aud_ent_fade_in(0.5); + } + + if(isdefined(self.veh_aliases.breaks_os)) + { + self.veh_mix_ents.one_shot playsound(self.veh_aliases.breaks_os); + } + + if(isdefined(self.veh_aliases.move_lo_lp)) + { + self.veh_mix_ents.move_ent thread vmx_aud_ent_fade_out(0.5); + } + + if(isdefined(self.veh_aliases.move_lo_lp)) + { + self.veh_mix_ents.roll_ent thread vmx_aud_ent_fade_out(0.1); + } + + return; + } + + wait 0.2; + } +} + +//Function Number: 43 +vmx_aud_ent_fade_out(param_00) +{ + self scalevolume(0,param_00); +} + +//Function Number: 44 +vmx_aud_ent_fade_in(param_00,param_01) +{ + var_02 = 1; + if(isdefined(param_01)) + { + var_02 = param_01; + } + + self scalevolume(0); + wait 0.05; + self scalevolume(var_02,param_00); +} + +//Function Number: 45 +vmx_cleanup_ents() +{ + self waittill("cleanup_sound_ents"); + self.veh_mix_ents.idle_ent stoploopsound(); + self.veh_mix_ents.move_ent stoploopsound(); + self.veh_mix_ents.roll_ent stoploopsound(); + self.veh_mix_ents.one_shot stopsounds(); + wait 0.05; + self.veh_mix_ents.idle_ent delete(); + self.veh_mix_ents.move_ent delete(); + self.veh_mix_ents.roll_ent delete(); + self.veh_mix_ents.one_shot delete(); +} + +//Function Number: 46 +vmx_ground_vehicle_monitor_death() +{ + self endon("cleanup_sound_ents"); + self waittill("death"); + self notify("cleanup_sound_ents"); +} + +//Function Number: 47 +vmx_monitor_explosion(param_00) +{ + self endon("cleanup_sound_ents"); + for(;;) + { + if(!isdefined(self)) + { + break; + } + + if(self.health < self.healthbuffer) + { + break; + } + + wait 0.05; + } + + self notify("died"); + if(isdefined(param_00)) + { + common_scripts\utility::play_sound_in_space(param_00,self.origin); + } + + self notify("ceanup_sound_ents"); +} + +//Function Number: 48 +vm_aud_air_vehicle_flyby(param_00,param_01,param_02,param_03,param_04,param_05) +{ + var_06 = 0; + if(isdefined(param_03)) + { + var_06 = param_03; + } + + var_07 = 0; + if(isdefined(param_04)) + { + var_07 = param_04; + } + + while(isdefined(param_00)) + { + if(var_07) + { + var_08 = distance(param_00.origin,level.player.origin); + } + else + { + var_08 = distance2d(param_00.origin,level.player.origin); + } + + if(var_06) + { + iprintln("Distance: " + var_08); + } + + if(var_08 < param_02) + { + var_09 = spawn("script_origin",param_00.origin); + var_09 linkto(param_00); + var_09 playsound(param_01,"sounddone"); + param_00 notify("flyby_sound_played"); + var_09 thread vmx_waittill_deathspin(param_00); + var_09 thread vmx_waittill_sounddone(); + var_09 waittill("flyby_ent",var_0A); + if(var_0A == "deathspin") + { + if(isdefined(param_05)) + { + thread common_scripts\utility::play_sound_in_space(param_05,var_09.origin); + } + + var_09 scalevolume(0,0.3); + wait 0.4; + var_09 stopsounds(); + wait 0.05; + var_09 delete(); + return; + } + else if(var_0A == "sounddone") + { + wait 0.1; + var_09 delete(); + return; + } + + continue; + } + + wait 0.05; + } +} + +//Function Number: 49 +vmx_waittill_deathspin(param_00) +{ + self endon("flyby_ent"); + param_00 waittill("deathspin"); + self notify("flyby_ent","deathspin"); +} + +//Function Number: 50 +vmx_waittill_sounddone() +{ + self endon("flyby_ent"); + self waittill("sounddone"); + self notify("flyby_ent","sounddone"); +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_audio_whizby.gsc b/MW3/PC/SP/maps/_audio_whizby.gsc new file mode 100644 index 0000000..1124593 --- /dev/null +++ b/MW3/PC/SP/maps/_audio_whizby.gsc @@ -0,0 +1,162 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_audio_whizby.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 9 + * Decompile Time: 294 ms + * Timestamp: 10/27/2023 2:21:30 AM +*******************************************************************/ + +//Function Number: 1 +whiz_init() +{ + setsaveddvar("snd_newWhizby",1); + level._audio.whiz = spawnstruct(); + level._audio.whiz.use_string_table_presets = 0; +} + +//Function Number: 2 +whiz_use_string_table() +{ + level._audio.whiz.use_string_table_presets = 1; +} + +//Function Number: 3 +whiz_set_preset(param_00) +{ + var_01 = []; + if(level._audio.whiz.use_string_table_presets) + { + var_01 = whizx_get_stringtable_preset(param_00); + } + else + { + var_01 = maps\_audio::audio_presets_whizby(param_00,var_01); + } + + var_02 = var_7B["probability"]; + var_03 = var_7B["spread"]; + var_04 = var_7B["radius"]; + var_05 = var_7B["offset"]; + level.player setwhizbyprobabilities(var_02[0],var_02[1],var_02[2]); + level.player setwhizbyspreads(var_03[0],var_03[1],var_03[2]); + level.player setwhizbyradii(var_04[0],var_04[1],var_04[2]); + level.player setwhizbyoffset(var_05); +} + +//Function Number: 4 +whiz_set_probabilities(param_00,param_01,param_02) +{ + level.player setwhizbyprobabilities(param_00,param_01,param_02); +} + +//Function Number: 5 +whiz_set_spreads(param_00,param_01,param_02) +{ + level.player setwhizbyspreads(param_00,param_01,param_02); +} + +//Function Number: 6 +whiz_set_radii(param_00,param_01,param_02) +{ + level.player setwhizbyradii(param_00,param_01,param_02); +} + +//Function Number: 7 +whiz_set_offset(param_00) +{ + level.player setwhizbyoffset(param_00); +} + +//Function Number: 8 +whizx_get_stringtable_preset(param_00) +{ + var_01 = "soundtables/common_whizby.csv"; + var_02 = []; + var_02 = whizx_get_mix_preset_from_stringtable_internal(var_01,param_00); + return var_02; +} + +//Function Number: 9 +whizx_get_mix_preset_from_stringtable_internal(param_00,param_01) +{ + var_02 = []; + var_03 = ""; + var_04 = ""; + var_05 = 12; + var_06 = []; + var_07 = []; + var_08 = []; + var_09 = 0; + var_0A = 0; + for(var_0B = 1;var_0B < var_05;var_0B++) + { + var_03 = tablelookup(param_00,0,"whizby_preset",var_0B); + var_04 = tablelookup(param_00,0,param_01,var_0B); + if(!isdefined(var_04)) + { + break; + } + + if(var_04 != "" && var_04 != "comments") + { + var_0A++; + switch(var_03) + { + case "radius_offset": + var_09 = float(var_04); + break; + + case "near_radius": + var_06[0] = float(var_04); + break; + + case "medium_radius": + var_06[1] = float(var_04); + break; + + case "far_radius": + var_06[2] = float(var_04); + break; + + case "near_spread": + var_07[0] = float(var_04); + break; + + case "medium_spread": + var_07[1] = float(var_04); + break; + + case "far_spread": + var_07[2] = float(var_04); + break; + + case "near_prob": + var_08[0] = float(var_04); + break; + + case "medium_prob": + var_08[1] = float(var_04); + break; + + case "far_prob": + var_08[2] = float(var_04); + break; + } + } + } + + if(var_0A > 0) + { + var_02["radius"] = var_06; + var_02["spread"] = var_07; + var_02["probability"] = var_08; + if(isdefined(var_09)) + { + var_02["offset"] = var_09; + } + } + + return var_02; +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_audio_zone_manager.gsc b/MW3/PC/SP/maps/_audio_zone_manager.gsc new file mode 100644 index 0000000..8e9a66f --- /dev/null +++ b/MW3/PC/SP/maps/_audio_zone_manager.gsc @@ -0,0 +1,873 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_audio_zone_manager.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 30 + * Decompile Time: 379 ms + * Timestamp: 10/27/2023 2:20:29 AM +*******************************************************************/ + +//Function Number: 1 +azm_init() +{ + if(!isdefined(level._audio.zone_mgr)) + { + level._audio.zone_mgr = spawnstruct(); + level._audio.zone_mgr.current_zone = ""; + level._audio.zone_mgr.zones = []; + level._audio.zone_mgr.overrides = spawnstruct(); + level._audio.zone_mgr.overrides.samb = []; + level._audio.zone_mgr.overrides.damb = []; + level._audio.zone_mgr.overrides.indexed = []; + level._audio.zone_mgr.overrides.rev = []; + level._audio.zone_mgr.overrides.occ = []; + level._audio.zone_mgr.use_string_table_presets = 0; + level._audio.zone_mgr.use_iw_presets = 0; + } + + if(!isdefined(level._audio.use_level_audio_zones)) + { + level._audio.level_audio_reverb_function = undefined; + } +} + +//Function Number: 2 +azm_use_string_table() +{ + level._audio.zone_mgr.use_string_table_presets = 1; + level._audio.zone_mgr.use_iw_presets = 0; +} + +//Function Number: 3 +azm_use_iw_presets() +{ + level._audio.zone_mgr.use_iw_presets = 1; + level._audio.zone_mgr.use_string_table_presets = 0; +} + +//Function Number: 4 +azm_start_zone(param_00,param_01,param_02) +{ + if(level._audio.zone_mgr.current_zone == param_00) + { + return; + } + else if(level._audio.zone_mgr.current_zone != "") + { + azm_stop_zone(level._audio.zone_mgr.current_zone,param_01); + } + + level._audio.zone_mgr.current_zone = param_00; + if(isdefined(level._audio.zone_mgr.zones[param_00]) && isdefined(level._audio.zone_mgr.zones[param_00]["state"]) && level._audio.zone_mgr.zones[param_00]["state"] != "stopping") + { + maps\_audio::aud_print_warning("ZONEM_start_zone(\" + param_00 + "\") being called even though audio zone, \" + param_00 + "\", is already started."); + return; + } + + var_03 = 2; + if(isdefined(param_01)) + { + var_03 = param_01; + } + + if(!isdefined(level._audio.zone_mgr.zones[param_00])) + { + var_04 = azmx_load_zone(param_00); + if(!isdefined(var_04)) + { + return; + } + + level._audio.zone_mgr.zones[param_00] = var_04; + } + + var_04 = level._audio.zone_mgr.zones[param_00]; + maps\_audio::aud_print_zone("ZONE START: " + param_00); + level._audio.zone_mgr.zones[param_00]["state"] = "playing"; + var_05 = var_04["priority"]; + var_06 = var_04["interrupt_fade"]; + if(isdefined(var_04["streamed_ambience"])) + { + if(var_04["streamed_ambience"] != "none") + { + lib_0068::func_147D(var_04["streamed_ambience"],var_03,var_05,var_06); + } + else + { + lib_0068::func_1483(var_03); + } + } + + if(isdefined(var_04["dynamic_ambience"])) + { + if(var_04["dynamic_ambience"] != "none") + { + maps\_audio_dynamic_ambi::damb_zone_start_preset(var_04["dynamic_ambience"],1); + } + else + { + maps\_audio_dynamic_ambi::damb_stop_zone(1); + } + } + + if(isdefined(var_04["occlusion"])) + { + if(var_04["occlusion"] != "none") + { + maps\_audio::aud_set_occlusion(var_04["occlusion"]); + } + else + { + maps\_audio::aud_deactivate_occlusion(); + } + } + + if(isdefined(var_04["filter"])) + { + if(var_04["filter"] != "none") + { + maps\_audio::aud_set_filter(var_04["filter"],0); + level.player seteqlerp(1,0); + } + } + + if(isdefined(var_04["reverb"])) + { + if(var_04["reverb"] != "none") + { + lib_0086::func_1465(var_04["reverb"]); + } + else + { + lib_0086::func_146B(); + } + } + + if(isdefined(var_04["mix"])) + { + if(var_04["mix"] != "none") + { + lib_0087::func_1510(var_04["mix"]); + return; + } + + lib_0087::func_1513(1); + } +} + +//Function Number: 5 +azm_set_zone_streamed_ambience(param_00,param_01,param_02) +{ + var_03 = azmx_set_param_internal(param_00,"streamed_ambience",param_01,::azmx_restart_stream,param_02); + if(!var_03) + { + if(!isdefined(param_01)) + { + param_01 = "none"; + } + + level._audio.zone_mgr.overrides.samb[param_00] = param_01; + } +} + +//Function Number: 6 +azm_set_zone_dynamic_ambience(param_00,param_01,param_02) +{ + if(!isdefined(param_01)) + { + param_01 = "none"; + } + + azmx_set_param_internal(param_00,"dynamic_ambience",param_01,::azmx_restart_damb,param_02); + level._audio.zone_mgr.overrides.damb[param_00] = param_01; +} + +//Function Number: 7 +azm_set_zone_reverb(param_00,param_01,param_02) +{ + if(!isdefined(param_01)) + { + param_01 = "none"; + } + + azmx_set_param_internal(param_00,"reverb",param_01,::azmx_restart_reverb,param_02); + level._audio.zone_mgr.overrides.rev[param_00] = param_01; +} + +//Function Number: 8 +azm_set_zone_occlusion(param_00,param_01,param_02) +{ + if(!isdefined(param_01)) + { + param_01 = "none"; + } + + azmx_set_param_internal(param_00,"occlusion",param_01,::azmx_restart_occlusion,param_02); + level._audio.zone_mgr.overrides.indexed[param_01] = param_01; +} + +//Function Number: 9 +azm_set_zone_mix(param_00,param_01,param_02) +{ + if(!isdefined(param_01)) + { + param_01 = "none"; + } + + azmx_set_param_internal(param_00,"mix",param_01,::azmx_restart_mix,param_02); + level._audio.zone_mgr.overrides.indexed[param_01] = param_01; +} + +//Function Number: 10 +azm_stop_zones(param_00) +{ + var_01 = 1; + if(isdefined(param_00)) + { + var_01 = param_00; + } + + maps\_audio::aud_print_zone("ZONE STOP ALL"); + foreach(var_03 in level._audio.zone_mgr.zones) + { + azm_stop_zone(var_03["name"],var_01,0); + } +} + +//Function Number: 11 +azm_stop_zone(param_00,param_01,param_02) +{ + if(isdefined(level._audio.zone_mgr.zones[param_00]) && isdefined(level._audio.zone_mgr.zones[param_00]["state"]) && level._audio.zone_mgr.zones[param_00]["state"] != "stopping") + { + var_03 = 1; + if(isdefined(param_01)) + { + var_03 = param_01; + } + + var_04 = level._audio.zone_mgr.zones[param_00]; + var_05 = 0; + if(isdefined(param_02)) + { + var_05 = param_02; + } + + if(var_05) + { + maps\_audio::aud_print_zone("ZONE STOP ZONE: " + param_00); + } + + if(isdefined(var_04["streamed_ambience"])) + { + lib_0068::func_1481(var_04["streamed_ambience"],var_03); + } + + if(isdefined(var_04["dynamic_ambience"])) + { + maps\_audio_dynamic_ambi::damb_zone_stop_preset(var_04["dynamic_ambience"],var_03); + } + + level._audio.zone_mgr.zones[param_00]["state"] = "stopping"; + thread azmx_wait_till_fade_done_and_remove_zone(param_00,var_03); + } +} + +//Function Number: 12 +azm_get_current_zone() +{ + return level._audio.zone_mgr.current_zone; +} + +//Function Number: 13 +azm_set_current_zone(param_00) +{ + level._audio.zone_mgr.current_zone = param_00; +} + +//Function Number: 14 +azm_print_enter_blend(param_00,param_01,param_02) +{ +} + +//Function Number: 15 +azm_print_exit_blend(param_00) +{ +} + +//Function Number: 16 +azm_print_progress(param_00) +{ +} + +//Function Number: 17 +azmx_load_zone(param_00) +{ + if(isdefined(level._audio.zone_mgr.zones[param_00])) + { + return; + } + + if(!isdefined(level._audio.zone_mgr.preset_cache)) + { + level._audio.zone_mgr.preset_cache = []; + } + + var_01 = []; + if(isdefined(level._audio.zone_mgr.preset_cache[param_00])) + { + var_01 = level._audio.zone_mgr.preset_cache[param_00]; + } + else + { + var_01 = azmx_get_preset_from_string_table(param_00,1); + } + + if(!isdefined(var_01) || var_01.size == 0) + { + return; + } + + level._audio.zone_mgr.preset_cache[param_00] = var_01; + var_02 = 0; + if(isdefined(level._audio.zone_mgr.overrides.samb[param_00])) + { + if(level._audio.zone_mgr.overrides.samb[param_00] == "none") + { + var_01["streamed_ambience"] = undefined; + } + else + { + var_01["streamed_ambience"] = level._audio.zone_mgr.overrides.samb[param_00]; + } + + var_02 = 1; + level._audio.zone_mgr.overrides.samb[param_00] = undefined; + } + + if(isdefined(level._audio.zone_mgr.overrides.damb[param_00])) + { + if(level._audio.zone_mgr.overrides.damb[param_00] == "none") + { + var_01["dynamic_ambience"] = undefined; + } + else + { + var_01["dynamic_ambience"] = level._audio.zone_mgr.overrides.damb[param_00]; + } + + var_02 = 1; + level._audio.zone_mgr.overrides.damb[param_00] = undefined; + } + + if(isdefined(level._audio.zone_mgr.overrides.rev[param_00])) + { + if(level._audio.zone_mgr.overrides.rev[param_00] == "none") + { + var_01["reverb"] = undefined; + } + else + { + var_01["reverb"] = level._audio.zone_mgr.overrides.rev[param_00]; + } + + var_02 = 1; + level._audio.zone_mgr.overrides.rev[param_00] = undefined; + } + + if(isdefined(level._audio.zone_mgr.overrides.occ[param_00])) + { + if(level._audio.zone_mgr.overrides.occ[param_00] == "none") + { + var_01["occlusion"] = undefined; + } + else + { + var_01["occlusion"] = level._audio.zone_mgr.overrides.occ[param_00]; + } + + var_02 = 1; + level._audio.zone_mgr.overrides.occ[param_00] = undefined; + } + + if(isdefined(level._audio.zone_mgr.overrides.indexed[param_00])) + { + if(level._audio.zone_mgr.overrides.indexed[param_00] == "none") + { + var_01["mix"] = undefined; + } + else + { + var_01["mix"] = level._audio.zone_mgr.overrides.indexed[param_00]; + } + + var_02 = 1; + level._audio.zone_mgr.overrides.indexed[param_00] = undefined; + } + + if(var_02) + { + level._audio.zone_mgr.preset_cache[param_00] = var_01; + } + + var_01["name"] = param_00; + if(!isdefined(var_01["priority"])) + { + var_01["priority"] = 1; + } + + if(!isdefined(var_01["interrupt_fade"])) + { + var_01["interrupt_fade"] = 0.1; + } + + return var_01; +} + +//Function Number: 18 +azmx_get_preset_from_string_table(param_00,param_01) +{ + var_02 = "soundtables/common_zone.csv"; + var_03 = maps\_audio::get_zone_stringtable(); + var_04 = []; + if(param_01) + { + var_04 = azmx_get_zone_preset_from_stringtable_internal(var_03,param_00); + } + + if(!isdefined(var_04) || var_04.size == 0) + { + var_04 = azmx_get_zone_preset_from_stringtable_internal(var_02,param_00); + } + + if(!isdefined(var_04) || var_04.size == 0) + { + return; + } + + return var_04; +} + +//Function Number: 19 +azmx_get_zone_preset_from_stringtable_internal(param_00,param_01) +{ + var_02 = []; + var_03 = ""; + var_04 = ""; + var_05 = 8; + for(var_06 = 1;var_06 < var_05;var_06++) + { + if(var_03 != "comments" && var_04 != "") + { + var_02[var_03] = var_04; + } + + var_03 = tablelookup(param_00,0,"zone_names",var_06); + var_04 = tablelookup(param_00,0,param_01,var_06); + if(var_03 != "comment" && var_03 != "comments" && var_04 != "") + { + switch(var_03) + { + case "streamed_ambience": + var_02["streamed_ambience"] = var_04; + break; + + case "dynamic_ambience": + var_02["dynamic_ambience"] = var_04; + break; + + case "mix": + var_02["mix"] = var_04; + break; + + case "reverb": + var_02["reverb"] = var_04; + break; + + case "filter": + var_02["filter"] = var_04; + break; + + case "occlusion": + var_02["occlusion"] = var_04; + break; + + default: + break; + } + } + } + + return var_02; +} + +//Function Number: 20 +azmx_restart_stream(param_00,param_01) +{ + var_02 = level._audio.zone_mgr.zones[param_00]["streamed_ambience"]; + if(isdefined(var_02)) + { + lib_0068::func_147D(var_02,param_01); + return; + } + + lib_0068::func_1483(param_01); +} + +//Function Number: 21 +azmx_restart_damb(param_00,param_01) +{ + var_02 = 1; + if(isdefined(param_01)) + { + var_02 = param_01; + } + + var_03 = level._audio.zone_mgr.zones[param_00]["dynamic_ambience"]; + if(isdefined(var_03)) + { + maps\_audio_dynamic_ambi::damb_zone_start_preset(var_03,var_02); + return; + } + + maps\_audio_dynamic_ambi::damb_zone_stop_preset(undefined,var_02); +} + +//Function Number: 22 +azmx_restart_reverb(param_00,param_01) +{ + var_02 = level._audio.zone_mgr.zones[param_00]["reverb"]; + if(isdefined(var_02)) + { + lib_0086::func_1465(var_02); + } +} + +//Function Number: 23 +azmx_restart_occlusion(param_00,param_01) +{ + var_02 = level._audio.zone_mgr.zones[param_00]["occlusion"]; + if(isdefined(var_02)) + { + maps\_audio::aud_set_occlusion(var_02); + } +} + +//Function Number: 24 +azmx_restart_mix(param_00,param_01) +{ + var_02 = level._audio.zone_mgr.zones[param_00]["mix"]; + if(isdefined(var_02)) + { + lib_0087::func_150F(var_02); + } +} + +//Function Number: 25 +azmx_set_param_internal(param_00,param_01,param_02,param_03,param_04) +{ + if(isdefined(level._audio.zone_mgr.zones[param_00])) + { + if((isdefined(level._audio.zone_mgr.zones[param_00][param_01]) && level._audio.zone_mgr.zones[param_00][param_01] != param_02) || !isdefined(level._audio.zone_mgr.zones[param_00][param_01]) && param_02 != "none") + { + if(param_02 == "none") + { + level._audio.zone_mgr.zones[param_00][param_01] = undefined; + } + else + { + level._audio.zone_mgr.zones[param_00][param_01] = param_02; + } + + if(param_00 == azm_get_current_zone()) + { + [[ param_03 ]](param_00,param_04); + } + } + + return 1; + } + + return 0; +} + +//Function Number: 26 +azmx_wait_till_fade_done_and_remove_zone(param_00,param_01) +{ + wait param_01; + wait 0.05; + if(level._audio.zone_mgr.zones[param_00]["state"] == "stopping") + { + } +} + +//Function Number: 27 +azmx_get_blend_args(param_00,param_01) +{ + var_02 = spawnstruct(); + var_02.zone_from_name = param_00; + var_02.zone_to_name = param_01; + var_02.samb1_name = undefined; + var_02.samb2_name = undefined; + var_02.damb1_name = undefined; + var_02.damb2_name = undefined; + var_02.var_158F = undefined; + var_02.var_1590 = undefined; + var_02.filter1 = undefined; + var_02.filter2 = undefined; + var_02.occlusion1 = undefined; + var_02.var_1594 = undefined; + var_02.mix1_name = undefined; + var_02.mix2_name = undefined; + if(!isdefined(level._audio.zone_mgr.zones[param_00])) + { + var_03 = azmx_load_zone(param_00); + if(!isdefined(var_03)) + { + maps\_audio::aud_print_warning("Couldn\'t find zone: " + param_00); + return; + } + + level._audio.zone_mgr.zones[param_00] = var_03; + } + + var_04 = level._audio.zone_mgr.zones[param_00]; + if(!isdefined(level._audio.zone_mgr.zones[param_01])) + { + var_03 = azmx_load_zone(param_01); + if(!isdefined(var_03)) + { + maps\_audio::aud_print_warning("Couldn\'t find zone: " + param_01); + return; + } + + level._audio.zone_mgr.zones[param_01] = var_03; + } + + var_05 = level._audio.zone_mgr.zones[param_01]; + var_02.var_158F = var_04["occlusion"]; + var_02.var_1590 = var_05["occlusion"]; + var_02.filter1 = var_04["filter"]; + var_02.filter2 = var_05["filter"]; + var_02.occlusion1 = var_04["reverb"]; + var_02.var_1594 = var_05["reverb"]; + var_02.mix2 = var_04["mix"]; + var_02.var_1598 = var_05["mix"]; + var_02.samb1_name = var_04["streamed_ambience"]; + var_02.samb2_name = var_05["streamed_ambience"]; + var_06 = level._audio.damb.playing["zone"].size; + if(var_06 != 1) + { + maps\_audio_dynamic_ambi::damb_stop(1,"zone"); + } + + if(var_06 == 1) + { + foreach(var_09, var_08 in level._audio.damb.playing["zone"]) + { + var_02.damb1_name = var_09; + break; + } + } + + var_02.damb2_name = var_05["dynamic_ambience"]; + return var_02; +} + +//Function Number: 28 +azmx_is_valid_damb_blend_request(param_00,param_01) +{ + var_02 = 0; + if(isdefined(param_00) && isdefined(param_01) && param_00 != param_01) + { + var_02 = 1; + } + else if(isdefined(param_01) && !isdefined(param_00)) + { + var_02 = 1; + } + else if(isdefined(param_00) && !isdefined(param_01)) + { + var_02 = 1; + } + + return var_02; +} + +//Function Number: 29 +azmx_is_valid_samb_blend_request(param_00,param_01) +{ + var_02 = 0; + if(isdefined(param_00) && isdefined(param_01) && param_00 != param_01) + { + var_02 = 1; + } + else if(isdefined(param_01) && !isdefined(param_00)) + { + var_02 = 1; + } + + return var_02; +} + +//Function Number: 30 +azmx_blend_zones(param_00,param_01,param_02) +{ + if(azmx_is_valid_samb_blend_request(param_02.samb1_name,param_02.samb2_name)) + { + var_03 = []; + var_04 = 0; + if(isdefined(param_02.samb1_name) && param_02.samb1_name != "") + { + var_05 = level._audio.zone_mgr.zones[param_02.zone_from_name]; + var_03[var_04] = spawnstruct(); + var_03[var_04].alias = param_02.samb1_name; + var_03[var_04].vol = param_00; + var_03[var_04].fade = var_05["interrupt_fade"]; + var_03[var_04].priority = var_05["priority"]; + var_04++; + } + + if(isdefined(param_02.samb2_name) && param_02.samb2_name != "") + { + var_06 = level._audio.zone_mgr.zones[param_02.zone_to_name]; + var_03[var_04] = spawnstruct(); + var_03[var_04].alias = param_02.samb2_name; + var_03[var_04].vol = param_01; + var_03[var_04].fade = var_06["interrupt_fade"]; + var_03[var_04].priority = var_06["priority"]; + } + + if(var_03.size > 0) + { + lib_0068::func_1485(var_03); + } + } + + if(azmx_is_valid_damb_blend_request(param_02.damb1_name,param_02.damb2_name)) + { + maps\_audio_dynamic_ambi::damb_prob_mix_damb_presets(param_02.damb1_name,param_00,param_02.damb2_name,param_01); + } + + var_07 = 0; + if(maps\_audio::aud_is_zone_filter_enabled()) + { + if(isdefined(param_02.filter1)) + { + var_07 = 1; + maps\_audio::aud_set_filter(param_02.filter1,0,0); + } + else + { + maps\_audio::aud_set_filter(undefined,0,0); + } + + if(isdefined(param_02.filter2)) + { + var_07 = 1; + maps\_audio::aud_set_filter(param_02.filter2,1,0); + } + else + { + maps\_audio::aud_set_filter(undefined,1,0); + } + + if(!isdefined(level._audio.var_159D) && level._audio.var_159D) + { + if(isdefined(param_02.filter1) || isdefined(param_02.filter2)) + { + level.player seteqlerp(param_00,0); + } + } + } + + if(param_00 >= 0.75) + { + if(isdefined(param_02.occlusion1)) + { + if(param_02.occlusion1 == "none") + { + lib_0086::func_1465(undefined); + } + else + { + lib_0086::func_1465(param_02.occlusion1); + } + } + + if(isdefined(param_02.mix2)) + { + if(param_02.mix2 == "none") + { + lib_0087::func_1513(2); + } + else + { + lib_0087::func_1510(param_02.mix2); + } + } + + if(maps\_audio::aud_is_zone_filter_enabled()) + { + if(isdefined(param_02.var_158F)) + { + if(param_02.var_158F == "none") + { + maps\_audio::aud_deactivate_occlusion(); + return; + } + + maps\_audio::aud_set_occlusion(param_02.var_158F); + return; + } + + return; + } + + return; + } + + if(param_01 >= 0.75) + { + if(isdefined(param_02.var_1594)) + { + if(param_02.var_1594 == "none") + { + lib_0086::func_1465(undefined); + } + else + { + lib_0086::func_1465(param_02.var_1594); + } + } + + if(isdefined(param_02.var_1598)) + { + if(param_02.var_1598 == "none") + { + lib_0087::func_1513(2); + } + else + { + lib_0087::func_1510(param_02.var_1598); + } + } + + if(maps\_audio::aud_is_zone_filter_enabled()) + { + if(isdefined(param_02.var_1590)) + { + if(param_02.var_1590 == "none") + { + maps\_audio::aud_deactivate_occlusion(); + return; + } + + maps\_audio::aud_set_occlusion(param_02.var_1590); + return; + } + + return; + } + } +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_autosave.gsc b/MW3/PC/SP/maps/_autosave.gsc new file mode 100644 index 0000000..d74553e --- /dev/null +++ b/MW3/PC/SP/maps/_autosave.gsc @@ -0,0 +1,777 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_autosave.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 28 + * Decompile Time: 433 ms + * Timestamp: 10/27/2023 2:22:27 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + level.lastautosavetime = 0; + common_scripts\utility::flag_init("game_saving"); + common_scripts\utility::flag_init("can_save"); + common_scripts\utility::flag_set("can_save"); + common_scripts\utility::flag_init("disable_autosaves"); + if(!isdefined(level._extra_autosave_checks)) + { + level._extra_autosave_checks = []; + } + + level.autosave_proximity_threat_func = ::autosave_proximity_threat_func; +} + +//Function Number: 2 +getdescription() +{ + return &"AUTOSAVE_AUTOSAVE"; +} + +//Function Number: 3 +getnames(param_00) +{ + if(param_00 == 0) + { + var_01 = &"AUTOSAVE_GAME"; + } + else + { + var_01 = &"AUTOSAVE_NOGAME"; + } + + return var_01; +} + +//Function Number: 4 +beginningoflevelsave() +{ + level waittill("finished final intro screen fadein"); + if(level.missionfailed) + { + return; + } + + if(maps\_arcademode::arcademode_complete()) + { + return; + } + + if(common_scripts\utility::flag("game_saving")) + { + return; + } + + common_scripts\utility::flag_set("game_saving"); + var_00 = "levelshots / autosave / autosave_" + level.script + "start"; + savegame("levelstart",&"AUTOSAVE_LEVELSTART",var_00,1); + setdvar("ui_grenade_death","0"); + common_scripts\utility::flag_clear("game_saving"); +} + +//Function Number: 5 +trigger_autosave_stealth(param_00) +{ + param_00 waittill("trigger"); + maps\_utility::autosave_stealth(); +} + +//Function Number: 6 +trigger_autosave_tactical(param_00) +{ + param_00 waittill("trigger"); + maps\_utility::autosave_tactical(); +} + +//Function Number: 7 +trigger_autosave(param_00) +{ + if(!isdefined(param_00.script_autosave)) + { + param_00.script_autosave = 0; + } + + autosaves_think(param_00); +} + +//Function Number: 8 +autosaves_think(param_00) +{ + var_01 = getnames(param_00.script_autosave); + if(!isdefined(var_01)) + { + return; + } + + param_00 waittill("trigger"); + var_02 = param_00.script_autosave; + var_03 = "levelshots / autosave / autosave_" + level.script + var_02; + tryautosave(var_02,var_01,var_03); + thread maps\_quotes::setdeadquote(); + if(isdefined(param_00)) + { + param_00 delete(); + } +} + +//Function Number: 9 +autosavenamethink(param_00) +{ + if(maps\_utility::is_no_game_start()) + { + return; + } + + param_00 waittill("trigger"); + if(isdefined(level.customautosavecheck)) + { + if(![[ level.customautosavecheck ]]()) + { + return; + } + } + + var_01 = param_00.script_autosavename; + maps\_utility::autosave_by_name(var_01); + param_00 delete(); +} + +//Function Number: 10 +trigger_autosave_immediate(param_00) +{ + param_00 waittill("trigger"); +} + +//Function Number: 11 +autosaveprint(param_00,param_01) +{ + if(isdefined(param_01)) + { + } +} + +//Function Number: 12 +autosave_timeout(param_00) +{ + level endon("trying_new_autosave"); + level endon("autosave_complete"); + wait param_00; + common_scripts\utility::flag_clear("game_saving"); + level notify("autosave_timeout"); +} + +//Function Number: 13 +_autosave_game_now_nochecks() +{ + var_00 = "levelshots / autosave / autosave_" + level.script + "start"; + savegame("levelstart",&"AUTOSAVE_LEVELSTART",var_00,1); + autosave_recon(0); +} + +//Function Number: 14 +_autosave_game_now_notrestart() +{ + var_00 = "levelshots / autosave / autosave_" + level.script + "start"; + if(getdvarint("g_reloading") == 0) + { + savegame("levelstart",&"AUTOSAVE_LEVELSTART",var_00,1); + autosave_recon(0); + } +} + +//Function Number: 15 +_autosave_game_now(param_00) +{ + if(isdefined(level.missionfailed) && level.missionfailed) + { + return; + } + + if(common_scripts\utility::flag("game_saving")) + { + return 0; + } + + if(maps\_arcademode::arcademode_complete()) + { + return 0; + } + + for(var_01 = 0;var_01 < level.players.size;var_01++) + { + var_02 = level.players[var_01]; + if(!isalive(var_02)) + { + return 0; + } + } + + var_03 = "save_now"; + var_04 = getdescription(); + if(isdefined(param_00)) + { + var_05 = savegamenocommit(var_03,var_04,"$default",1); + } + else + { + var_05 = savegamenocommit(var_04,var_05); + } + + wait 0.05; + if(issaverecentlyloaded()) + { + level.lastautosavetime = gettime(); + return 0; + } + + if(var_05 < 0) + { + return 0; + } + + if(!try_to_autosave_now()) + { + return 0; + } + + common_scripts\utility::flag_set("game_saving"); + wait 2; + common_scripts\utility::flag_clear("game_saving"); + if(!commitwouldbevalid(var_05)) + { + return 0; + } + + if(try_to_autosave_now()) + { + if(!isdefined(param_00)) + { + thread maps\_arcademode::arcademode_checkpoint_print(); + } + + autosave_recon(var_05); + commitsave(var_05); + setdvar("ui_grenade_death","0"); + } + + return 1; +} + +//Function Number: 16 +autosave_now_trigger(param_00) +{ + param_00 waittill("trigger"); + maps\_utility::autosave_now(); +} + +//Function Number: 17 +try_to_autosave_now() +{ + if(!issavesuccessful()) + { + return 0; + } + + for(var_00 = 0;var_00 < level.players.size;var_00++) + { + var_01 = level.players[var_00]; + if(!var_01 autosavehealthcheck()) + { + return 0; + } + } + + if(!common_scripts\utility::flag("can_save")) + { + return 0; + } + + return 1; +} + +//Function Number: 18 +tryautosave(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if(common_scripts\utility::flag("disable_autosaves")) + { + return 0; + } + + level endon("nextmission"); + level.player endon("death"); + if(maps\_utility::is_coop()) + { + level.player2 endon("death"); + } + + level notify("trying_new_autosave"); + if(common_scripts\utility::flag("game_saving")) + { + return 0; + } + + if(isdefined(level.nextmission)) + { + return 0; + } + + var_06 = 1.25; + var_07 = 1.25; + if(isdefined(param_03) && param_03 < var_06 + var_07) + { + } + + if(!isdefined(param_05)) + { + param_05 = 0; + } + + if(!isdefined(param_02)) + { + param_02 = "$default"; + } + + if(!isdefined(param_04)) + { + param_04 = 0; + } + + common_scripts\utility::flag_set("game_saving"); + var_08 = getdescription(); + var_09 = gettime(); + for(;;) + { + if(autosavecheck(undefined,param_04)) + { + var_0A = savegamenocommit(param_00,var_08,param_02,param_05); + if(var_0A < 0) + { + break; + } + + wait 0.05; + if(issaverecentlyloaded()) + { + level.lastautosavetime = gettime(); + break; + } + + wait var_06; + if(extra_autosave_checks_failed()) + { + continue; + } + + if(!autosavecheck(undefined,param_04)) + { + continue; + } + + wait var_07; + if(!autosavecheck_not_picky()) + { + continue; + } + + if(isdefined(param_03)) + { + if(gettime() > var_09 + param_03 * 1000) + { + break; + } + } + + if(!common_scripts\utility::flag("can_save")) + { + break; + } + + if(!commitwouldbevalid(var_0A)) + { + common_scripts\utility::flag_clear("game_saving"); + return 0; + } + + thread maps\_arcademode::arcademode_checkpoint_print(); + autosave_recon(var_0A); + commitsave(var_0A); + level.lastsavetime = gettime(); + setdvar("ui_grenade_death","0"); + break; + } + + wait 0.25; + } + + common_scripts\utility::flag_clear("game_saving"); + return 1; +} + +//Function Number: 19 +extra_autosave_checks_failed() +{ + foreach(var_01 in level._extra_autosave_checks) + { + if(![[ var_01["func"] ]]()) + { + autosaveprint("autosave failed: " + var_01["msg"]); + return 1; + } + } + + return 0; +} + +//Function Number: 20 +autosavecheck_not_picky() +{ + return autosavecheck(0,0); +} + +//Function Number: 21 +autosavecheck(param_00,param_01) +{ + if(isdefined(level.autosave_check_override)) + { + return [[ level.autosave_check_override ]](); + } + + if(isdefined(level.special_autosavecondition) && ![[ level.special_autosavecondition ]]()) + { + return 0; + } + + if(level.missionfailed) + { + return 0; + } + + if(maps\_arcademode::arcademode_complete()) + { + return 0; + } + + if(!isdefined(param_00)) + { + param_00 = level.dopickyautosavechecks; + } + + if(!isdefined(param_01)) + { + param_01 = 0; + } + + if(param_01) + { + if(![[ level.global_callbacks["_autosave_stealthcheck"] ]]()) + { + return 0; + } + } + + for(var_02 = 0;var_02 < level.players.size;var_02++) + { + var_03 = level.players[var_02]; + if(!var_03 autosavehealthcheck()) + { + return 0; + } + + if(param_00 && !var_03 autosaveammocheck()) + { + return 0; + } + } + + if(level.autosave_threat_check_enabled) + { + if(!autosavethreatcheck(param_00)) + { + return 0; + } + } + + for(var_02 = 0;var_02 < level.players.size;var_02++) + { + var_03 = level.players[var_02]; + if(!var_03 autosaveplayercheck(param_00)) + { + return 0; + } + } + + if(isdefined(level.savehere) && !level.savehere) + { + return 0; + } + + if(isdefined(level.cansave) && !level.cansave) + { + return 0; + } + + if(!issavesuccessful()) + { + autosaveprint("autosave failed: save call was unsuccessful"); + return 0; + } + + return 1; +} + +//Function Number: 22 +autosaveplayercheck(param_00) +{ + if(isdefined(level.ac130gunner) && level.ac130gunner == self) + { + return 1; + } + + if(self ismeleeing() && param_00) + { + autosaveprint("autosave failed:player is meleeing"); + return 0; + } + + if(self isthrowinggrenade() && param_00) + { + autosaveprint("autosave failed:player is throwing a grenade"); + return 0; + } + + if(self isfiring() && param_00) + { + autosaveprint("autosave failed:player is firing"); + return 0; + } + + if(isdefined(self.shellshocked) && self.shellshocked) + { + autosaveprint("autosave failed:player is in shellshock"); + return 0; + } + + if(common_scripts\utility::isflashed()) + { + autosaveprint("autosave failed:player is flashbanged"); + return 0; + } + + return 1; +} + +//Function Number: 23 +autosaveammocheck() +{ + if(isdefined(level.ac130gunner) && level.ac130gunner == self) + { + return 1; + } + + var_00 = self getweaponslistprimaries(); + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + var_02 = self getfractionmaxammo(var_00[var_01]); + if(var_02 > 0.1) + { + return 1; + } + } + + autosaveprint("autosave failed: ammo too low"); + return 0; +} + +//Function Number: 24 +autosavehealthcheck() +{ + if(isdefined(level.ac130gunner) && level.ac130gunner == self) + { + return 1; + } + + if(maps\_utility::ent_flag_exist("laststand_downed") && maps\_utility::ent_flag("laststand_downed")) + { + return 0; + } + + var_00 = self.health / self.maxhealth; + if(var_00 < 0.5) + { + return 0; + } + + if(common_scripts\utility::flag("_radiation_poisoning")) + { + return 0; + } + + if(maps\_utility::ent_flag("player_has_red_flashing_overlay")) + { + return 0; + } + + return 1; +} + +//Function Number: 25 +autosavethreatcheck(param_00) +{ + if(isdefined(level.ac130gunner) && level.ac130gunner == self) + { + return 1; + } + + var_01 = getaispeciesarray("bad_guys","all"); + foreach(var_03 in var_01) + { + if(!isdefined(var_03.enemy)) + { + continue; + } + + if(!isplayer(var_03.enemy)) + { + continue; + } + + if(var_03.type == "dog") + { + foreach(var_05 in level.players) + { + if(distance(var_03.origin,var_05.origin) < 384) + { + return 0; + } + } + + continue; + } + + if(isdefined(var_03.melee) && isdefined(var_03.melee.target) && isplayer(var_03.melee.target)) + { + return 0; + } + + var_07 = [[ level.autosave_proximity_threat_func ]](var_03); + if(var_07 == "return_even_if_low_accuracy") + { + return 0; + } + + if(var_03.finalaccuracy < 0.021 && var_03.finalaccuracy > -1) + { + continue; + } + + if(var_07 == "return") + { + return 0; + } + + if(var_07 == "none") + { + continue; + } + + if(var_03.a.lastshoottime > gettime() - 500) + { + if(param_00 || var_03 animscripts/utility::func_CE3(0) && var_03 canshootenemy(0)) + { + return 0; + } + } + + if(isdefined(var_03.a.aimidlethread) && var_03 animscripts/utility::func_CE3(0) && var_03 canshootenemy(0)) + { + return 0; + } + } + + if(maps\_utility::player_is_near_live_grenade()) + { + return 0; + } + + var_09 = getentarray("destructible","classname"); + foreach(var_0B in var_09) + { + if(!isdefined(var_0B.healthdrain)) + { + continue; + } + + foreach(var_05 in level.players) + { + if(distance(var_0B.origin,var_05.origin) < 400) + { + return 0; + } + } + } + + return 1; +} + +//Function Number: 26 +enemy_is_a_threat() +{ + if(self.finalaccuracy >= 0.021) + { + return 1; + } + + foreach(var_01 in level.players) + { + if(distance(self.origin,var_01.origin) < 500) + { + return 1; + } + } + + return 0; +} + +//Function Number: 27 +autosave_proximity_threat_func(param_00) +{ + foreach(var_02 in level.players) + { + var_03 = distance(param_00.origin,var_02.origin); + if(var_03 < 200) + { + return "return_even_if_low_accuracy"; + } + else if(var_03 < 360) + { + return "return"; + } + else if(var_03 < 1000) + { + return "threat_exists"; + } + } + + return "none"; +} + +//Function Number: 28 +autosave_recon(param_00) +{ + if(!maps\_utility::is_default_start()) + { + return; + } + + var_01 = maps\_utility_code::get_leveltime(); + var_02 = var_01; + if(isdefined(level.recon_checkpoint_lasttime)) + { + var_02 = var_01 - level.recon_checkpoint_lasttime; + } + + level.recon_checkpoint_lasttime = var_01; + reconevent("script_checkpoint: id %d, leveltime %d, deltatime %d",param_00,var_01,var_02); +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_bcs_location_trigs.gsc b/MW3/PC/SP/maps/_bcs_location_trigs.gsc new file mode 100644 index 0000000..4d52e30 --- /dev/null +++ b/MW3/PC/SP/maps/_bcs_location_trigs.gsc @@ -0,0 +1,463 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_bcs_location_trigs.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 24 + * Decompile Time: 362 ms + * Timestamp: 10/27/2023 2:24:07 AM +*******************************************************************/ + +//Function Number: 1 +bcs_location_trigs_init() +{ + level.bcs_location_mappings = []; + bcs_location_trigger_mapping(); + bcs_trigs_assign_aliases(); + level.bcs_location_mappings = undefined; +} + +//Function Number: 2 +bcs_trigs_assign_aliases() +{ + anim.bcs_locations = []; + var_00 = getentarray(); + var_01 = []; + foreach(var_03 in var_00) + { + if(isdefined(var_03.classname) && issubstr(var_03.classname,"trigger_multiple_bcs")) + { + var_01[var_01.size] = var_03; + } + } + + foreach(var_03 in var_01) + { + var_06 = parselocationaliases(level.bcs_location_mappings[var_03.classname]); + if(var_06.size > 1) + { + var_06 = maps\_utility::array_randomize(var_06); + } + + var_03.locationaliases = var_06; + } + + anim.bcs_locations = var_01; +} + +//Function Number: 3 +parselocationaliases(param_00) +{ + var_01 = strtok(param_00," "); + return var_01; +} + +//Function Number: 4 +add_bcs_location_mapping(param_00,param_01) +{ + if(isdefined(level.bcs_location_mappings[param_00])) + { + var_02 = level.bcs_location_mappings[param_00]; + var_03 = parselocationaliases(var_02); + var_04 = parselocationaliases(param_01); + foreach(var_06 in var_04) + { + foreach(var_08 in var_03) + { + if(var_06 == var_08) + { + return; + } + } + } + + var_02 = var_02 + " " + param_01; + level.bcs_location_mappings[param_00] = var_02; + return; + } + + level.bcs_location_mappings[var_09] = var_0A; +} + +//Function Number: 5 +bcs_location_trigger_mapping() +{ + generic_locations(); + vehicles(); + landmarks(); + tibet(); + ny_manhattan(); + ny_harbor(); + hijack(); + warlord(); + london(); + payback(); + hamburg(); + paris_a(); + paris_b(); + paris_ac130(); + prague(); + berlin(); + dubai(); +} + +//Function Number: 6 +generic_locations() +{ + add_bcs_location_mapping("trigger_multiple_bcs_uk_building_1stfloor","loc_1st_report"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_building_2ndfloor","loc_2nd_report"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_building_1stfloor_door_left","loc_door_1st_left_report"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_building_1stfloor_door","loc_door_1st_report"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_building_1stfloor_door_right","loc_door_1st_right_report"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_building_2ndfloor_door","loc_door_2nd_report"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_building_door","loc_door_report"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_building_1stfloor_window_left","loc_wndw_1st_left_report"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_building_1stfloor_window","loc_wndw_1st_report"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_building_1stfloor_window_right","loc_wndw_1st_right_report"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_building_2ndfloor_window_left","loc_wndw_2nd_left_report"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_building_2ndfloor_window","loc_wndw_2nd_report"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_building_2ndfloor_window_right","loc_wndw_2nd_right_report"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_callout_loc_door","callout_loc_door_report"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_callout_loc_door_1st","callout_loc_door_1st_report"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_callout_loc_door_1st_right","callout_loc_door_1st_right_report"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_callout_loc_door_1st_left","callout_loc_door_1st_left_report"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_callout_loc_door_2nd","callout_loc_door_2nd_report"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_callout_loc_wndw_1st","callout_loc_wndw_1st_report"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_callout_loc_wndw_1st_left","callout_loc_wndw_1st_left_report"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_callout_loc_wndw_1st_right","callout_loc_wndw_1st_right_report"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_callout_loc_1st","callout_loc_1st_report"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_callout_loc_2nd","callout_loc_2nd_report"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_callout_loc_wndw_2nd","callout_loc_wndw_2nd_report"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_callout_loc_wndw_2nd_left","callout_loc_wndw_2nd_left_report"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_callout_loc_wndw_2nd_right","callout_loc_wndw_2nd_right_report"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_callout_loc_wndw_3rd","callout_loc_wndw_3rd_report"); +} + +//Function Number: 7 +landmarks() +{ + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_ac_generic","loc_ac_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_airdrop_generic","loc_airdrop_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_alley_generic","loc_alley_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_balcony_2nd","loc_balcony_2nd"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_balcony_3rd","loc_balcony_3rd"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_bank_generic","loc_bank_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_bar_generic","loc_bar_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_barrels_generic","loc_barrels_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_barricade_generic","loc_barricade_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_barrier_hesco","loc_barrier_hesco"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_barrier_orange","loc_barrier_orange"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_bin_recycle","loc_bin_recycle"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_bookcase_generic","loc_bookcase_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_building_red","loc_building_red"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_bulkhead_generic","loc_bulkhead_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_bunk_generic","loc_bunk_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_bus_generic","loc_bus_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_bus_inside","loc_bus_inside"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_car_blue","loc_car_blue"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_car_burning","loc_car_burning"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_car_destroyed","loc_car_destroyed"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_car_generic","loc_car_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_car_green","loc_car_green"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_car_overturned","loc_car_overturned"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_car_parked","loc_car_parked"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_car_police","loc_car_police"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_car_yellow","loc_car_yellow"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_catwalk_generic","loc_catwalk_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_chair_blue","loc_chair_blue"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_column_generic","loc_column_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_console_generic","loc_console_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_container_generic","loc_container_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_container_red","loc_container_red"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_couch_blue","loc_couch_blue"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_couch_generic","loc_couch_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_crates_ammo","loc_crates_ammo"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_crates_generic","loc_crates_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_cubicles_left","loc_cubicles_left"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_cubicles_right","loc_cubicles_right"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_deck_generic","loc_deck_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_door_back","loc_door_back"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_door_front","loc_door_front"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_dumpster_generic","loc_dumpster_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_embassy_1st","loc_embassy_1st"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_embassy_3rd","loc_embassy_3rd"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_engine_generic","loc_engine_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_fan_exhaust","loc_fan_exhaust"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_gate_generic","loc_gate_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_hill_generic","loc_hill_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_machine_copy","loc_machine_copy"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_mg_generic","loc_mg_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_patio_generic","loc_patio_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_pipe_generic","loc_pipe_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_planter_generic","loc_planter_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_rack_bike","loc_rack_bike"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_railing_generic","loc_railing_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_ramp_down","loc_ramp_down"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_rooftop_generic","loc_rooftop_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_room_conf","loc_room_conf"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_room_middle","loc_room_middle"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_rubble_generic","loc_rubble_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_sandbags_generic","loc_sandbags_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_scaffolding_generic","loc_scaffolding_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_car_black","loc_car_black"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_shop_book","loc_shop_book"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_shop_cafe","loc_shop_cafe"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_shop_coffee","loc_shop_coffee"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_shop_restaurant","loc_shop_restaurant"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_shop_souvenir","loc_shop_souvenir"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_staircase_generic","loc_staircase_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_stairs_bottom","loc_stairs_bottom"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_stairs_generic","loc_stairs_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_stairs_top","loc_stairs_top"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_stand_hotdog","loc_stand_hotdog"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_stand_news","loc_stand_news"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_stand_trading","loc_stand_trading"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_statue_generic","loc_statue_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_stryker_destroyed","loc_stryker_destroyed"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_subway_entrance","loc_subway_entrance"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_table_computer","loc_table_computer"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_table_generic","loc_table_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_tanks_generic","loc_tanks_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_taxi_destroyed","loc_taxi_destroyed"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_taxi_generic","loc_taxi_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_tires_large","loc_tires_large"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_tower_jamming","loc_tower_jamming"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_truck_white","loc_truck_white"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_van_blue","loc_van_blue"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_vehicle_btr","loc_vehicle_btr"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_vehicle_dumptruck","loc_vehicle_dumptruck"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_vehicle_gaz","loc_vehicle_gaz"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_vehicle_hind","loc_vehicle_hind"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_vehicle_snowcat","loc_vehicle_snowcat"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_vehicle_snowmobile","loc_vehicle_snowmobile"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_wall_low","loc_wall_low"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_water_cooler","loc_water_cooler"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_wndw_3rd","callout_loc_wndw_3rd"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_alley_generic","loc_alley_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_arch_generic","loc_arch_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_balcony_2nd","loc_balcony_2nd"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_balcony_3rd","loc_balcony_3rd"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_balcony_generic","loc_balcony_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_barrels_generic","loc_barrels_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_boat_wooden","loc_boat_wooden"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_car_burning","loc_car_burning"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_car_generic","loc_car_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_car_green","loc_car_green"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_car_overturned","loc_car_overturned"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_car_yellow","loc_car_yellow"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_carport_generic","loc_carport_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_cart_generic","loc_cart_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_catwalk_generic","loc_catwalk_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_container_cargo","loc_container_cargo"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_couch_generic","loc_couch_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_counter_generic","loc_counter_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_crates_ammo","loc_crates_ammo"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_crates_generic","loc_crates_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_door_back","loc_door_back"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_door_front","loc_door_front"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_hull_3rd","loc_hull_3rd"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_market_stalls","loc_market_stalls"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_pier_far","loc_pier_far"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_pier_generic","loc_pier_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_rock_big","loc_rock_big"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_rooftop_generic","loc_rooftop_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_stairs_bottom","loc_stairs_bottom"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_stairs_generic","loc_stairs_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_stairs_top","loc_stairs_top"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_tank_welding","loc_tank_welding"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_truck_white","loc_truck_white"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_wall_broken","loc_wall_broken"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_wall_generic","loc_wall_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_generic_1st","callout_loc_1st"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_generic_2nd","callout_loc_2nd"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_generic_door_1st_left","callout_loc_door_1st_left"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_generic_door_1st_right","callout_loc_door_1st_right"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_generic_door_1st","callout_loc_door_1st"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_generic_door_2nd","callout_loc_door_2nd"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_generic_door","callout_loc_door"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_generic_wndw_1st_left","callout_loc_wndw_1st_left"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_generic_wndw_1st_right","callout_loc_wndw_1st_right"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_generic_wndw_1st","callout_loc_wndw_1st"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_generic_wndw_2nd_left","callout_loc_wndw_2nd_left"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_generic_wndw_2nd_right","callout_loc_wndw_2nd_right"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_generic_wndw_2nd","callout_loc_wndw_2nd"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_generic_container_cargo","loc_container_cargo"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_generic_balcony_generic","loc_balcony_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_generic_boat_wooden","loc_boat_wooden"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_generic_tanks_welding","loc_tanks_welding"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_generic_carport_generic","loc_carport_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_generic_rock_big","loc_rock_big"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_generic_wall_broken","loc_wall_broken"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_generic_bin_trash","loc_bin_trash"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_generic_fridge_generic","loc_fridge_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_generic_washing_machine","loc_washing_machine"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_generic_tire_stack","loc_tire_stack"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_generic_mattress_generic","loc_mattress_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_generic_umbrella_generic","loc_umbrella_generic"); +} + +//Function Number: 8 +vehicles() +{ +} + +//Function Number: 9 +tibet() +{ +} + +//Function Number: 10 +ny_manhattan() +{ + add_bcs_location_mapping("trigger_multiple_bcs_df_ny_manhattan_lm_memorial_building","lm_memorial_building"); + add_bcs_location_mapping("trigger_multiple_bcs_df_ny_manhattan_loc_cases_generic","loc_cases_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_ny_manhattan_loc_cases_left","loc_cases_left"); + add_bcs_location_mapping("trigger_multiple_bcs_df_ny_manhattan_loc_cases_right","loc_cases_right"); +} + +//Function Number: 11 +ny_harbor() +{ + add_bcs_location_mapping("trigger_multiple_bcs_df_ny_harbor_loc_reactor_generic","loc_reactor_generic"); +} + +//Function Number: 12 +hijack() +{ +} + +//Function Number: 13 +warlord() +{ + add_bcs_location_mapping("trigger_multiple_bcs_tf_warlord_church_generic","loc_church_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_warlord_shop_butcher","loc_shop_butcher"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_warlord_shop_pharmacy","loc_shop_pharmacy"); +} + +//Function Number: 14 +london() +{ + add_bcs_location_mapping("trigger_multiple_bcs_uk_landmark_barrels","loc_barrels_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_landmark_barrier","loc_barrier_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_landmark_bulldozer","loc_bulldozer_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_vehicle_car_black","loc_car_black"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_landmark_catwalk","loc_catwalk_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_landmark_cinder_blocks","loc_cinder_blocks"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_landmark_container","loc_container_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_landmark_container_open","loc_container_open"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_landmark_container_small","loc_container_small"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_landmark_crate_blue","loc_crate_blue"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_landmark_crate","loc_crate_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_landmark_dumpster_red","loc_dumpster_red"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_landmark_flatbed","loc_flatbed_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_landmark_loading_bay","loc_loading_bay"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_landmark_pipe_cement","loc_pipe_cement"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_landmark_platform_left","loc_platform_left"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_landmark_porta_john","loc_porta_john"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_landmark_scaffolding","loc_scaffolding_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_landmark_stairs_down","loc_stairs_down"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_landmark_stairs","loc_stairs_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_landmark_stairs_top","loc_stairs_top"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_vehicle_truck_charity","loc_truck_charity"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_vehicle_truck","loc_truck_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_vehicle_target","loc_vehicle_target"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_landmark_wall_low","loc_wall_low"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_landmark_warehouse","loc_warehouse_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_landmark_warehouse_south","loc_warehouse_south"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_landmark_warehouse_west","loc_warehouse_west"); +} + +//Function Number: 15 +payback() +{ + add_bcs_location_mapping("trigger_multiple_bcs_pc_payback_lm_building_tall","lm_building_tall"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_payback_lm_building_white","lm_building_white"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_payback_ship_cargo","loc_ship_cargo"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_payback_shipwreck_generic","loc_shipwreck_generic"); +} + +//Function Number: 16 +hamburg() +{ +} + +//Function Number: 17 +paris_a() +{ +} + +//Function Number: 18 +paris_b() +{ +} + +//Function Number: 19 +paris_ac130() +{ + add_bcs_location_mapping("trigger_multiple_bcs_df_parisAC130_lm_embassy","lm_embassy"); + add_bcs_location_mapping("trigger_multiple_bcs_df_parisAC130_lm_monument_courtyard","lm_monument_courtyard"); + add_bcs_location_mapping("trigger_multiple_bcs_df_parisAC130_loc_monument_top","loc_monument_top"); +} + +//Function Number: 20 +prague() +{ + add_bcs_location_mapping("trigger_multiple_bcs_tf_prague_sign_large","loc_sign_large"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_prague_car_white","loc_car_white"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_prague_shops_east","loc_shops_east"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_prague_btr_crashed","loc_btr_crashed"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_prague_bldg_west","loc_bldg_west"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_prague_cafe_tables","loc_cafe_tables"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_prague_bldg_north","loc_bldg_north"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_prague_antique_shop","loc_antique_shop"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_prague_pillars","loc_pillars"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_prague_barricades","loc_barricades"); +} + +//Function Number: 21 +berlin() +{ + add_bcs_location_mapping("trigger_multiple_bcs_df_berlin_lm_kitchen_back","lm_kitchen_back"); +} + +//Function Number: 22 +rescue() +{ +} + +//Function Number: 23 +rescue_2() +{ + add_bcs_location_mapping("trigger_multiple_bcs_tf_rescue_snowcat_generic","loc_snowcat_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_rescue_dumptruck_generic","loc_dumptruck_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_rescue_building_red","loc_building_red"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_rescue_snowmobile_generic","loc_snowmobile_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_rescue_scaffolding_generic","loc_scaffolding_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_rescue_container_red","loc_container_red"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_rescue_tires_large","loc_tires_large"); +} + +//Function Number: 24 +dubai() +{ + add_bcs_location_mapping("trigger_multiple_bcs_tf_dubai_arch_generic","loc_arch_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_dubai_bar","loc_bar"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_dubai_barricades","loc_barricades"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_dubai_car_generic","loc_car_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_dubai_chair_generic","loc_chair_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_dubai_couch_generic","loc_couch_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_dubai_counter_generic","loc_counter_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_dubai_doorway","loc_doorway"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_dubai_escalator_coming_down","loc_escalator_coming_down"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_dubai_escalator_near_right","loc_escalator_near_right"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_dubai_escalator_near_left","loc_escalator_near_left"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_dubai_escalator_top","loc_escalator_top"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_dubai_fountain_generic","loc_fountain_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_dubai_lamppost_generic","loc_lamppost_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_dubai_pillar_generic","loc_pillar_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_dubai_pillar_left","loc_pillar_left"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_dubai_pillar_right","loc_pillar_right"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_dubai_planter_generic","loc_planter_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_dubai_sedan_generic","loc_sedan_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_dubai_suv_generic","loc_suv_generic"); +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_breach.gsc b/MW3/PC/SP/maps/_breach.gsc new file mode 100644 index 0000000..a66905d --- /dev/null +++ b/MW3/PC/SP/maps/_breach.gsc @@ -0,0 +1,744 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_breach.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 24 + * Decompile Time: 305 ms + * Timestamp: 10/27/2023 2:20:01 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + level._effect["_breach_doorbreach_detpack"] = loadfx("explosions/exp_pack_doorbreach"); + level._effect["_breach_doorbreach_kick"] = loadfx("dust/door_kick"); + level.scr_sound["breach_wooden_door"] = "detpack_explo_main"; + level.scr_sound["breach_wood_door_kick"] = "wood_door_kick"; + common_scripts\utility::flag_init("begin_the_breach"); +} + +//Function Number: 2 +breach_think(param_00,param_01,param_02,param_03,param_04,param_05) +{ + self endon("breach_abort"); + if(isdefined(param_05) && param_05 == 0) + { + level.fire_notetrack_functions["scripted"] = ::breach_fire_straight; + } + + self.flashthrown = 0; + self.closestai = undefined; + self.animent = undefined; + self.breached = 0; + self.breachers = 0; + self.breachersready = 0; + self.singlebreacher = 0; + self.readytobreach = 0; + self.aiareintheroom = 0; + self.abouttobebreached = 0; + self.cleared = 0; + self.hasdoor = 1; + self.hasflashbangs = 0; + self.hostilesspawned = 0; + var_06 = getentarray(self.targetname,"targetname"); + var_07 = self.targetname; + self.sbadplacename = "badplace_" + var_07; + self.badplace = getent("badplace_" + var_07,"targetname"); + if(isdefined(self.badplace)) + { + } + + self.breachtrigger = getent("trigger_" + var_07,"targetname"); + if(!isdefined(param_04)) + { + param_04 = 1; + } + + if(isdefined(self.breachtrigger)) + { + switch(self.breachtrigger.classname) + { + case "trigger_use": + self.triggerhintstring = param_02; + break; + + case "trigger_use_touch": + self.triggerhintstring = param_02; + break; + + case "trigger_radius": + break; + + case "trigger_multiple": + break; + + default: + break; + } + } + + switch(param_01) + { + case "explosive_breach_left": + break; + + case "shotgunhinges_breach_left": + break; + + case "flash_breach_no_door_right": + self.hasdoor = 0; + self.hasflashbangs = 1; + break; + + default: + break; + } + + if(self.hasdoor == 1) + { + self.edoor = getent(self.script_linkto,"script_linkname"); + if(self.edoor.classname == "script_model") + { + self.animent = spawn("script_origin",self.edoor.origin); + self.animent.angles = self.edoor.angles; + } + else if(self.edoor.classname == "script_brushmodel") + { + self.animent = getent(self.edoor.target,"targetname"); + self.edoor.vector = anglestoforward(self.animent.angles); + } + + self.animent.type = "Cover Right"; + self.eexploderorigin = getent(self.edoor.script_linkto,"script_linkname"); + self.iexplodernum = self.eexploderorigin.script_exploder; + } + else if(self.hasdoor == 0) + { + self.animent = getent(self.script_linkto,"script_linkname"); + } + + if(self.hasflashbangs == 1) + { + self.grenadeorigin = getent("flashthrow_" + var_07,"targetname"); + self.grenadedest = getent(self.grenadeorigin.target,"targetname"); + } + + thread breach_abort(param_00); + thread breach_cleanup(param_00); + thread breach_play_fx(param_01,param_04); + var_08 = 0; + for(var_09 = 0;var_09 < param_00.size;var_09++) + { + if(isdefined(param_00[var_09].firstbreacher)) + { + var_08++; + self.closestai = param_00[var_09]; + } + } + + if(var_08 > 0) + { + } + else + { + self.closestai = maps\_utility::getclosest(self.animent.origin,param_00); + } + + if(param_00.size == 1) + { + self.singlebreacher = 1; + } + + for(var_09 = 0;var_09 < param_00.size;var_09++) + { + param_00[var_09] thread breacher_think(self,param_01,param_05); + } + + while(self.breachers < param_00.size) + { + wait 0.05; + } + + self notify("ready_to_breach"); + self.readytobreach = 1; + if(isdefined(self.breachtrigger)) + { + self.breachtrigger thread breach_trigger_think(self); + self waittill("execute_the_breach"); + } + else + { + self notify("execute_the_breach"); + } + + common_scripts\utility::flag_set("begin_the_breach"); + self.abouttobebreached = 1; + if(isdefined(param_03) && param_03 == 1) + { + var_0A = getentarray("hostiles_" + var_07,"targetname"); + self waittill("spawn_hostiles"); + spawnbreachhostiles(var_0A); + self.hostilesspawned = 1; + } + + if(isdefined(self.badplace)) + { + badplace_cylinder(self.sbadplacename,-1,self.badplace.origin,self.badplace.radius,200,"bad_guys"); + } + + var_0B = getaiarray("bad_guys"); + var_0C = []; + var_09 = 0; + while(var_09 < var_0B.size) + { + if(var_0B[var_09] istouching(self)) + { + } + + var_0B++ = var_7B[var_0C.size]; + } + + if(var_7B.size > 0) + { + common_scripts\utility::array_thread(var_7B,::breach_enemies_stunned,self); + } + + while(!self.aiareintheroom) + { + wait 0.05; + } + + self notify("breach_complete",var_0B[var_09]); + if(!var_7B.size) + { + return; + } + + while(!self.cleared) + { + wait 0.05; + for(var_0B = 0;var_0B < var_7B.size;var_0B++) + { + if(!isalive(var_7B[var_0B])) + { + var_7B = common_scripts\utility::array_remove(var_7B,var_7B[var_0B]); + } + + if(var_7B.size == 0) + { + self.cleared = 1; + } + } + } +} + +//Function Number: 3 +breach_dont_fire() +{ + while(self.breaching == 1) + { + self waittillmatch("fire","single anim"); + self.a.lastshoottime = gettime(); + } +} + +//Function Number: 4 +breacher_think(param_00,param_01,param_02) +{ + self.breaching = 1; + self.breachdonotfire = undefined; + if(!isdefined(param_02)) + { + param_02 = 1; + } + + self pushplayer(1); + thread give_infinite_ammo(); + param_00 endon("breach_abort"); + self.ender = "stop_idle_" + self getentitynumber(); + var_03 = undefined; + var_04 = undefined; + var_05 = undefined; + var_06 = undefined; + var_07 = undefined; + if(self == param_00.closestai) + { + var_03 = "01"; + } + else + { + var_03 = "02"; + } + + if(param_00.singlebreacher == 1 && param_01 == "explosive_breach_left") + { + var_03 = "02"; + } + + switch(param_01) + { + case "explosive_breach_left": + if(isdefined(self.usebreachapproach) && self.usebreachapproach == 0) + { + var_04 = "detcord_stack_left_start_no_approach_" + var_03; + } + else + { + var_04 = "detcord_stack_left_start_" + var_03; + } + + var_05 = "detcord_stack_leftidle_" + var_03; + var_06 = "detcord_stack_leftbreach_" + var_03; + break; + + case "shotgunhinges_breach_left": + var_04 = "shotgunhinges_breach_left_stack_start_" + var_03; + var_05 = "shotgunhinges_breach_left_stack_idle_" + var_03; + var_06 = "shotgunhinges_breach_left_stack_breach_" + var_03; + break; + + case "flash_breach_no_door_right": + if(param_00.singlebreacher == 1) + { + var_04 = "flash_stack_right_start_single"; + var_05 = "flash_stack_right_idle_single"; + var_06 = "flash_stack_right_breach_single"; + var_07 = "flash_stack_right_flash_single"; + } + else + { + var_04 = "flash_stack_right_start_" + var_03; + var_05 = "flash_stack_right_idle_" + var_03; + var_06 = "flash_stack_right_breach_" + var_03; + var_07 = "flash_stack_right_flash_" + var_03; + } + break; + + default: + break; + } + + breach_set_goaladius(64); + if(!isdefined(self.usebreachapproach) || self.usebreachapproach) + { + param_00.animent maps\_anim::anim_generic_reach(self,var_04); + } + else + { + self.scriptedarrivalent = param_00.animent; + param_00.animent maps\_anim::anim_generic_reach_and_arrive(self,var_04); + } + + param_00.animent maps\_anim::anim_generic(self,var_04); + param_00.animent thread maps\_anim::anim_generic_loop(self,var_05,self.ender); + self.setgoalpos = self.origin; + param_00.breachers++; + self.scriptedarrivalent = undefined; + param_00 waittill("execute_the_breach"); + if(!param_00.flashthrown && isdefined(var_07)) + { + param_00.animent notify(self.ender); + param_00.animent thread maps\_anim::anim_generic(self,var_07); + wait 1; + if(var_03 == "02" || param_00.singlebreacher == 1) + { + var_08 = "J_Mid_LE_1"; + self attach("projectile_m84_flashbang_grenade",var_08); + var_09 = self.grenadeweapon; + self.grenadeweapon = "flash_grenade"; + self.grenadeammo++; + if(var_03 == "02") + { + self waittillmatch("grenade_throw","single anim"); + } + + if(param_00.singlebreacher == 1 && var_03 == "01") + { + self waittillmatch("fire","single anim"); + } + + self magicgrenade(param_00.grenadeorigin.origin,param_00.grenadedest.origin,level.iflashfuse); + self detach("projectile_m84_flashbang_grenade",var_08); + self.grenadeweapon = var_09; + self.grenadeammo = 0; + } + + self waittillmatch("end","single anim"); + param_00.animent thread maps\_anim::anim_generic_loop(self,var_05,self.ender); + wait 0.1; + } + + param_00.animent notify(self.ender); + if(param_02 == 0) + { + self.breachdonotfire = 1; + } + + param_00.animent thread maps\_anim::anim_generic(self,var_06); + if(param_01 == "explosive_breach_left") + { + if(var_03 == "02") + { + thread detcord_logic(param_00); + self waittillmatch("pull fuse","single anim"); + wait 1; + param_00 notify("spawn_hostiles"); + param_00 notify("detpack_about_to_blow"); + self waittillmatch("explosion","single anim"); + param_00 notify("detpack_detonated"); + param_00.breached = 1; + param_00.edoor thread door_open("explosive",param_00); + param_00 notify("play_breach_fx"); + } + } + else if(param_01 == "shotgunhinges_breach_left") + { + if(var_03 == "01") + { + param_00 notify("spawn_hostiles"); + self waittillmatch("kick","single anim"); + param_00.edoor thread door_open("shotgun",param_00); + param_00 notify("play_breach_fx"); + } + } + else if(param_01 == "flash_breach_no_door_right") + { + } + + self waittillmatch("end","single anim"); + self notify("breach_complete"); + if(param_02 == 0) + { + self.breachdonotfire = undefined; + } + + if(isdefined(level.friendly_breach_thread)) + { + self thread [[ level.friendly_breach_thread ]](param_00); + } + + param_00.aiareintheroom = 1; + self pushplayer(0); + breach_reset_animname(); + while(!param_00.cleared) + { + wait 0.05; + } + + self.breaching = 0; +} + +//Function Number: 5 +breach_fire_straight() +{ + if(isdefined(self.breachdonotfire)) + { + return; + } + + animscripts/notetracks::func_20D5(); +} + +//Function Number: 6 +detcord_logic(param_00) +{ + thread sound_effect_play(param_00); + self waittillmatch("attach prop right","single anim"); + var_01 = "TAG_INHAND"; + self attach("weapon_detcord",var_01); + self waittillmatch("detach prop right","single anim"); + var_02 = self gettagorigin(var_01); + var_03 = self gettagangles(var_01); + self detach("weapon_detcord",var_01); + var_04 = spawn("script_model",var_02); + var_04 setmodel("weapon_detcord"); + var_04.angles = var_03; + param_00 waittill("detpack_detonated"); + radiusdamage(var_04.origin,64,50,25); + var_04 delete(); +} + +//Function Number: 7 +sound_effect_play(param_00) +{ + self waittillmatch("sound effect","single anim"); + thread common_scripts\utility::play_sound_in_space("detpack_plant_arming",param_00.animent.origin); +} + +//Function Number: 8 +breach_enemies_stunned(param_00) +{ + self endon("death"); + param_00 endon("breach_aborted"); + param_00 waittill("detpack_detonated"); + if(distance(self.origin,param_00.animent.origin) <= level.detpackstunradius) + { + level.stunnedanimnumber++; + if(level.stunnedanimnumber > 2) + { + level.stunnedanimnumber = 1; + } + + var_01 = "exposed_flashbang_v" + level.stunnedanimnumber; + self.allowdeath = 1; + maps\_anim::anim_generic_custom_animmode(self,"gravity",var_01); + breach_reset_animname(); + } +} + +//Function Number: 9 +breach_trigger_think(param_00) +{ + param_00 endon("execute_the_breach"); + param_00 endon("breach_aborted"); + thread breach_trigger_cleanup(param_00); + self waittill("trigger"); + param_00 notify("execute_the_breach"); +} + +//Function Number: 10 +breach_trigger_cleanup(param_00) +{ + param_00 waittill("execute_the_breach"); + common_scripts\utility::trigger_off(); + if(isdefined(param_00.ebreachmodel)) + { + param_00.ebreachmodel delete(); + } +} + +//Function Number: 11 +breach_abort(param_00) +{ + self endon("breach_complete"); + self waittill("breach_abort"); + self.cleared = 1; + thread breach_cleanup(param_00); +} + +//Function Number: 12 +breach_cleanup(param_00) +{ + while(!self.cleared) + { + wait 0.05; + } + + if(isdefined(self.badplace)) + { + badplace_delete(self.sbadplacename); + } + + while(!self.cleared) + { + wait 0.05; + } + + common_scripts\utility::array_thread(param_00,::breach_ai_reset,self); +} + +//Function Number: 13 +breach_ai_reset(param_00) +{ + self endon("death"); + breach_reset_animname(); + breach_reset_goaladius(); + param_00.animent notify(self.ender); + self notify("stop_infinite_ammo"); + self pushplayer(0); +} + +//Function Number: 14 +breach_play_fx(param_00,param_01) +{ + self endon("breach_aborted"); + self endon("breach_complete"); + switch(param_00) + { + case "explosive_breach_left": + self waittill("play_breach_fx"); + common_scripts\utility::exploder(self.iexplodernum); + thread common_scripts\utility::play_sound_in_space(level.scr_sound["breach_wooden_door"],self.eexploderorigin.origin); + if(param_01) + { + playfx(level._effect["_breach_doorbreach_detpack"],self.eexploderorigin.origin,anglestoforward(self.eexploderorigin.angles)); + } + break; + + case "shotgunhinges_breach_left": + self waittill("play_breach_fx"); + common_scripts\utility::exploder(self.iexplodernum); + if(param_01) + { + playfx(level._effect["_breach_doorbreach_kick"],self.eexploderorigin.origin,anglestoforward(self.eexploderorigin.angles)); + } + break; + + case "flash_breach_no_door_right": + break; + + default: + break; + } +} + +//Function Number: 15 +spawnhostile(param_00) +{ + var_01 = param_00 dospawn(); + maps\_utility::spawn_failed(var_01); + return var_01; +} + +//Function Number: 16 +spawnbreachhostiles(param_00) +{ + var_01 = []; + for(var_02 = 0;var_02 < param_00.size;var_02++) + { + var_03 = spawnhostile(param_00[var_02]); + var_01[var_01.size] = var_03; + } + + return var_01; +} + +//Function Number: 17 +give_infinite_ammo() +{ + self endon("death"); + self endon("stop_infinite_ammo"); + while(isdefined(self.weapon)) + { + if(isdefined(self.weapon) && self.weapon == "none") + { + break; + } + + self.bulletsinclip = weaponclipsize(self.weapon); + wait 0.5; + } +} + +//Function Number: 18 +door_open(param_00,param_01,param_02) +{ + if(!isdefined(param_02)) + { + param_02 = 1; + } + + if(param_02 == 1) + { + self playsound(level.scr_sound["breach_wood_door_kick"]); + } + + switch(param_00) + { + case "explosive": + thread door_fall_over(param_01.animent); + door_connectpaths(); + self playsound(level.scr_sound["breach_wooden_door"]); + earthquake(0.4,1,self.origin,1000); + radiusdamage(self.origin,56,level.maxdetpackdamage,level.mindetpackdamage); + break; + + case "shotgun": + thread door_fall_over(param_01.animent); + door_connectpaths(); + self playsound(level.scr_sound["breach_wooden_door"]); + break; + } +} + +//Function Number: 19 +door_connectpaths() +{ + if(self.classname == "script_brushmodel") + { + self connectpaths(); + return; + } + + var_00 = getent(self.target,"targetname"); + var_00 hide(); + var_00 notsolid(); + var_00 connectpaths(); +} + +//Function Number: 20 +door_fall_over(param_00) +{ + var_01 = undefined; + if(self.classname == "script_model") + { + var_01 = anglestoforward(self.angles); + } + else if(self.classname == "script_brushmodel") + { + var_01 = self.vector; + } + else + { + } + + var_02 = (var_01[0] * 20,var_01[1] * 20,var_01[2] * 20); + self moveto(self.origin + var_02,0.5,0,0.5); + var_03 = spawn("script_origin",(0,0,0)); + var_03.angles = param_00.angles; + var_03.origin = (self.origin[0],self.origin[1],param_00.origin[2]); + self linkto(var_03); + var_03 rotatepitch(90,0.45,0.4); + wait 0.45; + var_03 rotatepitch(-4,0.2,0,0.2); + wait 0.2; + var_03 rotatepitch(4,0.15,0.15); + wait 0.15; + self unlink(); + var_03 delete(); +} + +//Function Number: 21 +breach_set_goaladius(param_00) +{ + if(!isdefined(self.old_goalradius)) + { + self.old_goalradius = self.goalradius; + } + + self.goalradius = param_00; +} + +//Function Number: 22 +breach_reset_goaladius() +{ + if(isdefined(self.old_goalradius)) + { + self.goalradius = self.old_goalradius; + } + + self.old_goalradius = undefined; +} + +//Function Number: 23 +breach_set_animname(param_00) +{ + if(!isdefined(self.old_animname)) + { + self.old_animname = self.animname; + } + + self.animname = param_00; +} + +//Function Number: 24 +breach_reset_animname() +{ + if(isdefined(self.old_animname)) + { + self.animname = self.old_animname; + } + + self.old_animname = undefined; +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_briefing.gsc b/MW3/PC/SP/maps/_briefing.gsc new file mode 100644 index 0000000..b478e7e --- /dev/null +++ b/MW3/PC/SP/maps/_briefing.gsc @@ -0,0 +1,369 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_briefing.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 15 + * Decompile Time: 179 ms + * Timestamp: 10/27/2023 2:20:02 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + setsaveddvar("hud_drawhud",0); + level.script = tolower(getdvar("mapname")); + if(!isdefined(level.tmpmsg)) + { + level.tmpmsg = []; + } + + var_00 = getentarray("player","classname")[0]; + setsaveddvar("g_speed",0); + var_00 setviewmodel("viewmodel_hands_cloth"); + precacheshader("black"); + var_01 = 0; + for(var_02 = 0;var_02 < level.slide.size;var_02++) + { + if(isdefined(level.slide[var_02]["movie"])) + { + var_01 = 1; + break; + } + } + + if(var_01) + { + wait 0.05; + var_00 gotothelevel(0); + return; + } + + precachestring(&"SCRIPT_PLATFORM_FIRE_TO_SKIP"); + for(var_03 = 0;var_03 < level.slide.size;var_03++) + { + if(isdefined(level.slide[var_03]["image"])) + { + precacheshader(level.slide[var_03]["image"]); + } + } + + var_00 thread skipthebriefing(); + var_00 dothebriefing(); + var_00 gotothelevel(0); +} + +//Function Number: 2 +start(param_00) +{ + level.briefing_running = 1; + level.briefing_ending = 0; + level.placenextimage = "A"; + if(isdefined(level.imagea)) + { + level.imagea destroy(); + } + + if(isdefined(level.imageb)) + { + level.imageb destroy(); + } + + if(isdefined(level.blackscreen)) + { + level.blackscreen destroy(); + } + + if(isdefined(level.firetoskip)) + { + level.firetoskip destroy(); + } + + if(!isdefined(param_00) || !param_00) + { + level.briefing_fadeintime = 0.5; + level.briefing_fadeouttime = 0.5; + } + else + { + level.briefing_fadeintime = param_00; + level.briefing_fadeouttime = param_00; + } + + self endon("briefingskip"); + thread skipcheck(); + level.blackscreen = newhudelem(); + level.blackscreen.sort = -1; + level.blackscreen.alignx = "left"; + level.blackscreen.aligny = "top"; + level.blackscreen.x = 0; + level.blackscreen.y = 0; + level.blackscreen.horzalign = "fullscreen"; + level.blackscreen.vertalign = "fullscreen"; + level.blackscreen.foreground = 1; + level.blackscreen.alpha = 1; + level.blackscreen setshader("black",640,480); + level.firetoskip = newhudelem(); + level.firetoskip.sort = 1; + level.firetoskip.alignx = "center"; + level.firetoskip.aligny = "top"; + level.firetoskip.fontscale = 2; + level.firetoskip.x = 0; + level.firetoskip.y = 60; + level.firetoskip.horzalign = "center"; + level.firetoskip.vertalign = "fullscreen"; + level.firetoskip.foreground = 1; + level.firetoskip settext(&"SCRIPT_PLATFORM_FIRE_TO_SKIP"); + level.firetoskip.alpha = 0; + thread fadeinfiretoskip(); + level.imagea = newhudelem(); + level.imagea.alignx = "center"; + level.imagea.aligny = "middle"; + level.imagea.x = 320; + level.imagea.y = 240; + level.imagea.alpha = 0; + level.imagea.horzalign = "fullscreen"; + level.imagea.vertalign = "fullscreen"; + level.imagea setshader("black",640,360); + level.imagea.foreground = 1; + level.imageb = newhudelem(); + level.imageb.alignx = "center"; + level.imageb.aligny = "middle"; + level.imageb.x = 320; + level.imageb.y = 240; + level.imageb.horzalign = "fullscreen"; + level.imageb.vertalign = "fullscreen"; + level.imageb.alpha = 0; + level.imageb setshader("black",640,360); + level.imageb.foreground = 1; + self freezecontrols(1); + wait 0.5; + for(var_01 = 0;var_01 < level.slide.size;var_01++) + { + var_02 = 0; + if(isdefined(level.slide[var_01]["image"])) + { + if(level.script[0] != "m") + { + soundplay("slide_advance"); + } + + wait 0.5; + thread image(level.slide[var_01]["image"]); + } + + if(isdefined(level.slide[var_01]["dialog_wait"]) && self.dialogplaying[level.slide[var_01]["dialog_wait"]]) + { + self waittill(level.slide[var_01]["dialog_wait"] + "sounddone"); + } + + if(isdefined(level.slide[var_01]["dialog"])) + { + soundplay(level.slide[var_01]["dialog"],level.slide[var_01]["dialog"] + "sounddone"); + var_02 = 1; + } + + if(isdefined(level.slide[var_01]["delay"])) + { + wait level.slide[var_01]["delay"]; + continue; + } + + if(var_02) + { + self waittill(level.slide[var_01]["dialog"] + "sounddone"); + } + } +} + +//Function Number: 3 +fadeinfiretoskip() +{ + wait 1; + thread fadefiretoskip(); + level.firetoskip fadeovertime(level.briefing_fadeouttime); + level.firetoskip.alpha = 1; +} + +//Function Number: 4 +fadefiretoskip() +{ + wait 7; + level.firetoskip fadeovertime(level.briefing_fadeouttime); + level.firetoskip.alpha = 0; +} + +//Function Number: 5 +waittillbriefingdone() +{ + self waittill("briefingend"); +} + +//Function Number: 6 +skipcheck() +{ + self endon("briefingend"); + var_00 = getentarray("player","classname")[0]; + wait 0.05; + maps\_utility::set_console_status(); + for(;;) + { + if(level.console) + { + if(var_00 buttonpressed("BUTTON_A")) + { + self notify("briefingskip"); + end(); + return; + } + + wait 0.05; + continue; + } + + if(var_00 attackbuttonpressed()) + { + self notify("briefingskip"); + end(); + return; + } + + wait 0.05; + } +} + +//Function Number: 7 +image(param_00) +{ + self endon("briefingskip"); + if(level.placenextimage == "A") + { + level.placenextimage = "B"; + level.imagea setshader(param_00,640,360); + thread imagefadeout("B"); + level.imagea fadeovertime(level.briefing_fadeintime); + level.imagea.alpha = 1; + return; + } + + if(level.placenextimage == "B") + { + level.placenextimage = "A"; + level.imageb setshader(param_00,640,360); + thread imagefadeout("A"); + level.imageb fadeovertime(level.briefing_fadeintime); + level.imageb.alpha = 1; + } +} + +//Function Number: 8 +imagefadeout(param_00) +{ + if(param_00 == "A") + { + level.imagea fadeovertime(level.briefing_fadeouttime); + level.imagea.alpha = 0; + return; + } + + if(param_00 == "B") + { + level.imageb fadeovertime(level.briefing_fadeouttime); + level.imageb.alpha = 0; + } +} + +//Function Number: 9 +endthread() +{ + if(!level.briefing_running) + { + return; + } + + if(level.briefing_ending) + { + return; + } + + self notify("briefingend"); + level.briefing_ending = 1; + if(level.script[0] != "m") + { + self playsound("stop_voice"); + } + + thread imagefadeout("A"); + thread imagefadeout("B"); + wait 1.5; + level.briefing_ending = 0; +} + +//Function Number: 10 +end() +{ + thread endthread(); +} + +//Function Number: 11 +soundplay(param_00,param_01) +{ + if(isdefined(level.tmpmsg[param_00])) + { + iprintlnbold(level.tmpmsg[param_00]); + } + + if(isdefined(param_01)) + { + thread soundplay_flag(param_00,param_01); + self playsound(param_00,param_01); + return; + } + + self playsound(param_00); +} + +//Function Number: 12 +soundplay_flag(param_00,param_01) +{ + self.dialogplaying[param_00] = 1; + self waittill(param_01); + self.dialogplaying[param_00] = 0; +} + +//Function Number: 13 +dothebriefing() +{ + start(0.5); + if(level.script[0] != "m") + { + soundplay("slide_advance"); + } + + wait 0.5; + end(); +} + +//Function Number: 14 +skipthebriefing() +{ + self waittill("briefingskip"); + gotothelevel(1); +} + +//Function Number: 15 +gotothelevel(param_00) +{ + if(!param_00) + { + for(var_01 = 0;var_01 < level.slide.size;var_01++) + { + if(isdefined(level.slide[var_01]["movie"])) + { + cinematic(level.slide[var_01]["movie"]); + } + } + } + + changelevel(level.leveltoload,0); +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_cagedchickens.gsc b/MW3/PC/SP/maps/_cagedchickens.gsc new file mode 100644 index 0000000..bc8a04f --- /dev/null +++ b/MW3/PC/SP/maps/_cagedchickens.gsc @@ -0,0 +1,32 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_cagedchickens.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 21 ms + * Timestamp: 10/27/2023 2:20:03 AM +*******************************************************************/ + +//Function Number: 1 +initchickens() +{ + waittillframeend; + var_00 = getentarray("caged_chicken","targetname"); + common_scripts\utility::array_thread(var_00,::spawnchicken); +} + +//Function Number: 2 +spawnchicken() +{ + var_00 = maps\_utility::spawn_anim_model("chicken"); + thread maps\_anim::anim_single_solo(var_00,"cage_freakout"); + var_01 = var_00 maps\_utility::getanim("cage_freakout"); + var_02 = randomfloatrange(0,1); + var_00 setanimtime(var_01,var_02); + for(;;) + { + var_00 playsound("animal_chicken_idle","sounddone"); + var_00 waittill("sounddone"); + } +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_carry_ai.gsc b/MW3/PC/SP/maps/_carry_ai.gsc new file mode 100644 index 0000000..af32106 --- /dev/null +++ b/MW3/PC/SP/maps/_carry_ai.gsc @@ -0,0 +1,172 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_carry_ai.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 9 + * Decompile Time: 113 ms + * Timestamp: 10/27/2023 2:20:04 AM +*******************************************************************/ + +//Function Number: 1 +initcarry() +{ + anims(); +} + +//Function Number: 2 +anims() +{ + level.scr_anim["generic"]["wounded_idle"][0] = %wounded_carry_closet_idle_wounded; + level.scr_anim["generic"]["pickup_wounded"] = %wounded_carry_pickup_closet_wounded_straight; + level.scr_anim["generic"]["pickup_carrier"] = %wounded_carry_pickup_closet_carrier_straight; + level.scr_anim["generic"]["wounded_walk_loop"][0] = %wounded_carry_fastwalk_wounded_relative; + level.scr_anim["generic"]["carrier_walk_loop"] = %wounded_carry_fastwalk_carrier; + level.scr_anim["generic"]["putdown_wounded"] = %wounded_carry_putdown_closet_wounded; + level.scr_anim["generic"]["putdown_carrier"] = %wounded_carry_putdown_closet_carrier; +} + +//Function Number: 3 +setwounded(param_00) +{ + animscripts/shared::func_23C8(); + self.woundednode = param_00; + self.woundednode thread maps\_anim::anim_generic_loop(self,"wounded_idle","stop_wounded_idle"); + self.allowdeath = 1; +} + +//Function Number: 4 +end_carry_ai_logic(param_00,param_01) +{ + level notify("end_carry_ai_logic"); + setsaveddvar("ai_friendlyFireBlockDuration",2000); + param_00.allowpain = 1; + param_00.disablebulletwhizbyreaction = 0; + param_00.ignoreall = 0; + param_00.grenadeawareness = 1; + param_00 maps\_utility::setflashbangimmunity(0); + param_00.dontmelee = undefined; + param_00.neverenablecqb = undefined; + param_00.disablearrivals = undefined; + param_00.disableexits = undefined; + param_00.nododgemove = 0; + param_00 pushplayer(0); + param_01 notify("stop_carried_loop"); + param_01 unlink(); + param_00 maps\_utility::clear_generic_run_anim(); + param_01.woundednode notify("stop_wounded_idle"); + param_01.woundednode = undefined; +} + +//Function Number: 5 +move_president_to_node(param_00,param_01) +{ + level endon("end_carry_ai_logic"); + goto_and_pickup_wounded(param_00,param_01); + carry_to_and_putdown_wounded(param_00,param_01); +} + +//Function Number: 6 +move_president_to_node_nopickup(param_00,param_01) +{ + param_00 forceteleport(self.origin,self.angles); + carry_to_and_putdown_wounded(param_00,param_01); +} + +//Function Number: 7 +goto_and_pickup_wounded(param_00,param_01) +{ + level endon("end_carry_ai_logic"); + self endon("end_carry_ai"); + param_00.woundednode maps\_anim::anim_generic_reach(self,"pickup_carrier"); + param_00 notify("stop_wounded_idle"); + param_00.woundednode notify("stop_wounded_idle"); + param_00.allowdeath = 1; + param_00.woundednode thread maps\_anim::anim_generic(param_00,"pickup_wounded"); + param_00.woundednode maps\_anim::anim_generic(self,"pickup_carrier"); + self.dontmelee = 1; + param_00 invisiblenotsolid(); +} + +//Function Number: 8 +link_wounded(param_00) +{ + self endon("death"); + param_00 endon("death"); + param_00 linkto(self,"tag_origin"); + wait 0.05; + param_00 thread maps\_anim::anim_generic_loop(param_00,"wounded_walk_loop","stop_carried_loop"); +} + +//Function Number: 9 +carry_to_and_putdown_wounded(param_00,param_01) +{ + level endon("end_carry_ai_logic"); + self endon("end_carry_ai"); + param_00.being_carried = 1; + thread maps\_utility::set_generic_run_anim("carrier_walk_loop",1); + param_00 notify("stop_wounded_idle"); + param_00.woundednode notify("stop_wounded_idle"); + wait 0.05; + setsaveddvar("ai_friendlyFireBlockDuration",0); + self animmode("none"); + self.allowpain = 0; + self.disablebulletwhizbyreaction = 1; + self.ignoreall = 1; + self.ignoreme = 1; + self.grenadeawareness = 0; + maps\_utility::setflashbangimmunity(1); + self.neverenablecqb = 1; + self.disablearrivals = 1; + self.disableexits = 1; + self.nododgemove = 1; + maps\_utility::disable_cqbwalk(); + self.oldgoal = self.goalradius; + thread link_wounded(param_00); + while(isdefined(param_01.target)) + { + self.ignoresuppression = 1; + self.disablearrivals = 1; + var_02 = getent(param_01.target,"targetname"); + var_02 = common_scripts\utility::ter_op(isdefined(var_02),var_02,getnode(param_01.target,"targetname")); + if(!isdefined(var_02.target)) + { + param_01 = var_02; + break; + } + + self.goalradius = 64; + self setgoalpos(var_02.origin); + self waittill("goal"); + param_01 = var_02; + } + + param_01 maps\_anim::anim_generic_reach(self,"putdown_carrier"); + param_00.woundednode = param_01; + param_00 notify("stop_carried_loop"); + param_01 notify("stop_wounded_idle"); + param_00 unlink(); + self.ignoresuppression = 0; + self.disablearrivals = 0; + self.goalradius = self.oldgoal; + thread maps\_utility::clear_run_anim(); + param_00.woundednode thread maps\_anim::anim_generic(self,"putdown_carrier"); + param_00.woundednode maps\_anim::anim_generic(param_00,"putdown_wounded"); + setsaveddvar("ai_friendlyFireBlockDuration",2000); + self.allowpain = 1; + self.disablebulletwhizbyreaction = 0; + self.ignoreall = 0; + self.grenadeawareness = 1; + maps\_utility::setflashbangimmunity(0); + self.dontmelee = undefined; + self.neverenablecqb = undefined; + self.disablearrivals = undefined; + self.disableexits = undefined; + self.nododgemove = 0; + self pushplayer(0); + param_00 visiblesolid(); + param_00.woundednode thread maps\_anim::anim_generic_loop(param_00,"wounded_idle","stop_wounded_idle"); + param_00.allowdeath = 1; + param_00 notify("stop_putdown"); + param_00.being_carried = undefined; +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_chopperboss.gsc b/MW3/PC/SP/maps/_chopperboss.gsc new file mode 100644 index 0000000..aa32235 --- /dev/null +++ b/MW3/PC/SP/maps/_chopperboss.gsc @@ -0,0 +1,584 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_chopperboss.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 19 + * Decompile Time: 328 ms + * Timestamp: 10/27/2023 2:21:06 AM +*******************************************************************/ + +//Function Number: 1 +chopper_boss_load_fx() +{ + level._effect["chopper_boss_light_smoke"] = loadfx("smoke/smoke_trail_white_heli"); + level._effect["chopper_boss_heavy_smoke"] = loadfx("smoke/smoke_trail_black_heli"); +} + +//Function Number: 2 +chopper_boss_locs_populate(param_00,param_01) +{ + level.chopper_boss_locs = common_scripts\utility::getstructarray(param_01,param_00); + foreach(var_03 in level.chopper_boss_locs) + { + var_03.neighbors = var_03 maps\_utility::get_linked_structs(); + foreach(var_05 in level.chopper_boss_locs) + { + if(var_03 == var_05) + { + continue; + } + + if(!maps\_utility::array_contains(var_03.neighbors,var_05) && maps\_utility::array_contains(var_05 maps\_utility::get_linked_structs(),var_03)) + { + var_03.neighbors[var_03.neighbors.size] = var_05; + } + } + } +} + +//Function Number: 3 +chopper_path_release(param_00,param_01) +{ + if(isdefined(param_01)) + { + var_02 = strtok(param_01," "); + foreach(var_04 in var_02) + { + self endon(var_04); + } + } + + var_06 = strtok(param_00," "); + switch(var_06.size) + { + case 1: + self waittill(var_06[0]); + break; + + case 2: + common_scripts\utility::waittill_either(var_06[0],var_06[1]); + break; + + case 3: + common_scripts\utility::waittill_any(var_06[0],var_06[1],var_06[2]); + break; + + case 4: + common_scripts\utility::waittill_any(var_06[0],var_06[1],var_06[2],var_06[3]); + break; + + default: + break; + } + + self.loc_current.in_use = undefined; +} + +//Function Number: 4 +chopper_boss_behavior_little_bird(param_00) +{ + self endon("death"); + self endon("deathspin"); + level endon("special_op_terminated"); + self.loc_current = param_00; + self.loc_current.in_use = 1; + chopper_boss_setup(); + thread chopper_boss_damage_states(); + thread chopper_event_on_death(); + var_01 = 0; + for(;;) + { + self.heli_target = undefined; + var_02 = (isdefined(self.request_move) && self.request_move) || var_01; + while(isdefined(level.chopper_boss_finding_target) && level.chopper_boss_finding_target == 1) + { + wait 0.05; + } + + var_03 = chopper_boss_get_best_location_and_target(var_02); + if(isdefined(var_03) && self.loc_current != var_03) + { + if(isdefined(self.heli_target)) + { + self setlookatent(self.heli_target); + } + else + { + var_04 = maps\_utility::getclosest(self.origin,level.players); + if(isdefined(var_04)) + { + self setlookatent(var_04); + } + } + + self.request_move = undefined; + thread chopper_boss_move(var_03); + self waittill("reached_dynamic_path_end"); + } + + if(isdefined(self.heli_target)) + { + var_01 = chopper_boss_attempt_firing(self.heli_target); + } + + wait 0.1; + } +} + +//Function Number: 5 +chopper_boss_setup() +{ + maps\_vehicle::mgoff(); + chopper_boss_sentient(); + maps\_utility::add_damagefeedback(); + self.mgturret[1] unlink(); + self.mgturret[1] delete(); + var_00 = self.mgturret[0]; + var_00 unlink(); + var_00 linkto(self,"tag_turret",(0,0,0),(0,0,0)); + var_00 setleftarc(45); + var_00 setrightarc(45); + var_00 settoparc(45); + var_00 setbottomarc(55); + var_00 setdefaultdroppitch(-10); + self.mgturret = []; + self.mgturret[self.mgturret.size] = var_00; +} + +//Function Number: 6 +chopper_event_on_death() +{ + self waittill("death",var_00); + if(!isdefined(self)) + { + return; + } + + if(maps\_utility::is_survival()) + { + playfx(level._effect["money"],self.origin + (0,0,-32)); + } +} + +//Function Number: 7 +chopper_boss_damage_states() +{ + self endon("death"); + self endon("deathspin"); + var_00 = self.health - self.healthbuffer; + var_01 = 0; + for(;;) + { + var_02 = self.health - self.healthbuffer; + if(var_02 <= var_00 * 0.5) + { + if(var_01 == 1) + { + var_01 = 2; + self.request_move = 1; + } + + playfxontag(common_scripts\utility::getfx("chopper_boss_heavy_smoke"),self,"tag_engine"); + } + else if(var_02 <= var_00 * 0.75) + { + if(var_01 == 0) + { + var_01 = 1; + self.request_move = 1; + } + + playfxontag(common_scripts\utility::getfx("chopper_boss_light_smoke"),self,"tag_engine"); + } + + wait 0.05; + } +} + +//Function Number: 8 +chopper_boss_can_hit_from(param_00,param_01) +{ + var_02 = self.mgturret[0].origin[2] - self.origin[2]; + return bullettracepassed(param_00 + (0,0,var_02),param_01,0,self); +} + +//Function Number: 9 +chopper_boss_in_range(param_00) +{ + var_01 = distance2d(self.origin,param_00); + var_02 = 384; + if(isdefined(level.chopper_boss_min_dist2d)) + { + var_02 = level.chopper_boss_min_dist2d; + } + + return var_01 >= var_02 && var_01 <= 3072; +} + +//Function Number: 10 +chopper_boss_set_target(param_00) +{ + if(isdefined(param_00)) + { + self.heli_target = param_00; + } +} + +//Function Number: 11 +chopper_boss_attempt_firing(param_00) +{ + self endon("deathspin"); + self endon("death"); + var_01 = 0; + if(isdefined(param_00) && !isdefined(param_00.heli_shooting) && chopper_boss_in_range(param_00.origin)) + { + thread chopper_boss_manage_shooting_flag(self.heli_target); + self setlookatent(param_00); + var_02 = chopper_boss_wait_face_target(param_00,5); + if(isdefined(param_00)) + { + if(isdefined(var_02) && var_02) + { + chopper_boss_fire_turrets(param_00); + var_01 = 1; + } + } + + self notify("chopper_done_shooting"); + } + + return var_01; +} + +//Function Number: 12 +chopper_boss_manage_shooting_flag(param_00) +{ + param_00.heli_shooting = 1; + common_scripts\utility::waittill_any("death","deathspin","chopper_done_shooting"); + if(isdefined(param_00)) + { + param_00.heli_shooting = undefined; + } +} + +//Function Number: 13 +chopper_boss_wait_face_target(param_00,param_01) +{ + self endon("death"); + self endon("deathspin"); + param_00 endon("death"); + var_02 = undefined; + if(isdefined(param_01)) + { + var_02 = gettime() + param_01 * 1000; + } + + while(isdefined(param_00)) + { + if(maps\_utility::within_fov_2d(self.origin,self.angles,param_00.origin,0)) + { + return 1; + } + + if(isdefined(var_02) && gettime() >= var_02) + { + return 0; + } + + wait 0.25; + } +} + +//Function Number: 14 +chopper_boss_fire_turrets(param_00) +{ + self endon("deathspin"); + self endon("death"); + param_00 endon("death"); + var_01 = 20; + foreach(var_03 in self.mgturret) + { + if(isai(param_00)) + { + var_03 settargetentity(param_00,param_00 geteye() - param_00.origin); + } + else if(isplayer(param_00)) + { + if(maps\_utility::is_player_down(param_00)) + { + var_01 = 60; + var_03 settargetentity(param_00); + } + else + { + var_03 settargetentity(param_00,param_00 geteye() - param_00.origin); + } + } + else + { + var_03 settargetentity(param_00,(0,0,32)); + } + + var_03 startbarrelspin(); + } + + wait 2; + var_05 = weaponfiretime("minigun_littlebird_spinnup"); + var_06 = 0; + for(var_07 = 0;var_07 < var_01;var_07++) + { + self.mgturret[var_06] shootturret(); + var_06++; + if(var_06 >= self.mgturret.size) + { + var_06 = 0; + } + + wait var_05 + 0.05; + } + + wait 1; + foreach(var_03 in self.mgturret) + { + var_03 stopbarrelspin(); + } +} + +//Function Number: 15 +chopper_boss_manage_targeting_flag() +{ + level.chopper_boss_finding_target = 1; + common_scripts\utility::waittill_any("death","deathspin","chopper_done_targeting"); + level.chopper_boss_finding_target = undefined; +} + +//Function Number: 16 +chopper_boss_get_best_location_and_target(param_00) +{ + self endon("death"); + var_01 = self.loc_current.neighbors; + if(!isdefined(param_00) || param_00 == 0) + { + } + + thread chopper_boss_manage_targeting_flag(); + var_02 = []; + foreach(var_04 in level.players) + { + if(!maps\_utility::is_player_down(var_04) && !isdefined(var_04.ignoreme) || var_04.ignoreme == 0) + { + var_02[var_02.size] = var_04; + } + } + + var_06 = getaiarray("allies"); + foreach(var_08 in var_06) + { + if(!isdefined(var_08.ignoreme) || var_08.ignoreme == 0) + { + var_02[var_02.size] = var_08; + } + } + + if(isdefined(level.placed_sentry)) + { + foreach(var_0B in level.placed_sentry) + { + if(!isdefined(var_0B.ignoreme) || var_0B.ignoreme == 0) + { + var_02[var_02.size] = var_0B; + } + } + } + + if(!var_02.size) + { + foreach(var_04 in level.players) + { + if(!maps\_utility::is_player_down_and_out(var_04) && !isdefined(var_04.ignoreme) || var_04.ignoreme == 0) + { + var_02[var_02.size] = var_04; + } + } + } + + var_0F = []; + var_10 = 0; + foreach(var_12 in var_7B) + { + if(var_12 != self.loc_current && isdefined(var_12.in_use)) + { + continue; + } + + var_12.heli_target = undefined; + var_12.dist2d = undefined; + var_13 = undefined; + foreach(var_15 in var_02) + { + if(!isdefined(var_15)) + { + continue; + } + + if(var_12 chopper_boss_in_range(var_15.origin) == 0) + { + continue; + } + + var_16 = var_15.origin + (0,0,64); + if(isai(var_15) || isplayer(var_15)) + { + var_16 = var_15 geteye(); + } + + if(chopper_boss_can_hit_from(var_12.origin,var_16)) + { + if(!isdefined(var_12.heli_target)) + { + var_0F[var_0F.size] = var_12; + var_12.heli_target = var_15; + var_13 = distance2d(var_12.origin,var_15.origin); + } + else + { + var_17 = distance2d(var_12.origin,var_15.origin); + if(var_17 < var_13) + { + var_12.heli_target = var_15; + var_13 = var_17; + } + } + } + + var_10++ = var_7B[var_01.size]; + if(var_10 >= 4) + { + wait 0.05; + var_10 = 0; + } + } + } + + if(var_0F.size) + { + var_1A = []; + foreach(var_12 in var_0F) + { + if(isdefined(var_12.heli_target)) + { + var_1A[var_1A.size] = var_12; + } + } + + var_0F = var_1A; + } + + if(!var_0F.size) + { + foreach(var_12 in var_7B) + { + if(var_12 != self.loc_current && isdefined(var_12.in_use)) + { + continue; + } + + var_1E = undefined; + foreach(var_15 in var_02) + { + if(!isdefined(var_15)) + { + continue; + } + + if(!isdefined(var_1E)) + { + var_1E = var_15; + var_12.dist2d = distance2d(var_12.origin,var_15.origin); + continue; + } + + var_20 = distance2d(var_12.origin,var_15.origin); + if(var_20 < var_12.dist2d) + { + var_1E = var_15; + var_12.dist2d = var_20; + } + } + + if(isdefined(var_12.dist2d)) + { + var_0F[var_0F.size] = var_12; + } + } + } + else + { + foreach(var_12 in var_0F) + { + var_12.dist2d = distance2d(var_12.heli_target.origin,var_12.origin); + } + } + + var_25 = maps\_utility_joec::exchange_sort_by_handler(var_0F,::chopper_boss_loc_compare); + var_26 = undefined; + var_27 = 0; + foreach(var_12 in var_25) + { + var_29 = 384; + if(isdefined(level.chopper_boss_min_dist2d)) + { + var_29 = level.chopper_boss_min_dist2d; + } + + if(var_12.dist2d >= var_29 && var_12.dist2d <= 3072) + { + var_26 = var_12; + var_27 = 1; + break; + } + } + + if(!isdefined(var_26) && var_25.size) + { + var_26 = var_25[0]; + } + + if(isdefined(var_26) && isdefined(var_26.heli_target)) + { + chopper_boss_set_target(var_26.heli_target); + } + + self notify("chopper_done_targeting",self.loc_current); + if(isdefined(var_26) && var_26 != self.loc_current) + { + return var_26; + } + + return undefined; +} + +//Function Number: 17 +chopper_boss_loc_compare() +{ + return self.dist2d; +} + +//Function Number: 18 +chopper_boss_move(param_00) +{ + self.loc_current.in_use = undefined; + self.loc_current = param_00; + self.loc_current.in_use = 1; + thread maps\_vehicle::vehicle_paths(param_00); +} + +//Function Number: 19 +chopper_boss_sentient() +{ + self makeentitysentient("axis",1); + self.attackeraccuracy = 6; + self.maxvisibledist = 3072; + self.threatbias = 10000; +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_colors.gsc b/MW3/PC/SP/maps/_colors.gsc new file mode 100644 index 0000000..2f4e5e1 --- /dev/null +++ b/MW3/PC/SP/maps/_colors.gsc @@ -0,0 +1,1582 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_colors.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 72 + * Decompile Time: 1191 ms + * Timestamp: 10/27/2023 2:19:18 AM +*******************************************************************/ + +//Function Number: 1 +init_color_grouping(param_00) +{ + common_scripts\utility::flag_init("player_looks_away_from_spawner"); + common_scripts\utility::flag_init("friendly_spawner_locked"); + level.arrays_of_colorcoded_nodes = []; + level.arrays_of_colorcoded_nodes["axis"] = []; + level.arrays_of_colorcoded_nodes["allies"] = []; + level.arrays_of_colorcoded_volumes = []; + level.arrays_of_colorcoded_volumes["axis"] = []; + level.arrays_of_colorcoded_volumes["allies"] = []; + var_01 = []; + var_01 = common_scripts\utility::array_combine(var_01,getentarray("trigger_multiple","code_classname")); + var_01 = common_scripts\utility::array_combine(var_01,getentarray("trigger_radius","code_classname")); + var_01 = common_scripts\utility::array_combine(var_01,getentarray("trigger_once","code_classname")); + level.color_teams = []; + level.color_teams["allies"] = "allies"; + level.color_teams["axis"] = "axis"; + level.color_teams["team3"] = "axis"; + level.color_teams["neutral"] = "neutral"; + var_02 = getentarray("info_volume","code_classname"); + foreach(var_04 in param_00) + { + if(isdefined(var_04.script_color_allies)) + { + var_04 add_node_to_global_arrays(var_04.script_color_allies,"allies"); + } + + if(isdefined(var_04.script_color_axis)) + { + var_04 add_node_to_global_arrays(var_04.script_color_axis,"axis"); + } + } + + foreach(var_07 in var_02) + { + if(isdefined(var_07.script_color_allies)) + { + var_07 add_volume_to_global_arrays(var_07.script_color_allies,"allies"); + } + + if(isdefined(var_07.script_color_axis)) + { + var_07 add_volume_to_global_arrays(var_07.script_color_axis,"axis"); + } + } + + foreach(var_0A in var_01) + { + if(isdefined(var_0A.script_color_allies)) + { + var_0A thread trigger_issues_orders(var_0A.script_color_allies,"allies"); + } + + if(isdefined(var_0A.script_color_axis)) + { + var_0A thread trigger_issues_orders(var_0A.script_color_axis,"axis"); + } + } + + level.color_node_type_function = []; + add_cover_node("BAD NODE"); + add_cover_node("Cover Stand"); + add_cover_node("Cover Crouch"); + add_cover_node("Cover Prone"); + add_cover_node("Cover Crouch Window"); + add_cover_node("Cover Right"); + add_cover_node("Cover Left"); + add_cover_node("Cover Wide Left"); + add_cover_node("Cover Wide Right"); + add_cover_node("Conceal Stand"); + add_cover_node("Conceal Crouch"); + add_cover_node("Conceal Prone"); + add_cover_node("Reacquire"); + add_cover_node("Balcony"); + add_cover_node("Scripted"); + add_cover_node("Begin"); + add_cover_node("End"); + add_cover_node("Turret"); + add_path_node("Ambush"); + add_path_node("Guard"); + add_path_node("Path"); + add_path_node("Exposed"); + level.colorlist = []; + level.colorlist[level.colorlist.size] = "r"; + level.colorlist[level.colorlist.size] = "b"; + level.colorlist[level.colorlist.size] = "y"; + level.colorlist[level.colorlist.size] = "c"; + level.colorlist[level.colorlist.size] = "g"; + level.colorlist[level.colorlist.size] = "p"; + level.colorlist[level.colorlist.size] = "o"; + level.colorchecklist["red"] = "r"; + level.colorchecklist["r"] = "r"; + level.colorchecklist["blue"] = "b"; + level.colorchecklist["b"] = "b"; + level.colorchecklist["yellow"] = "y"; + level.colorchecklist["y"] = "y"; + level.colorchecklist["cyan"] = "c"; + level.colorchecklist["c"] = "c"; + level.colorchecklist["green"] = "g"; + level.colorchecklist["g"] = "g"; + level.colorchecklist["purple"] = "p"; + level.colorchecklist["p"] = "p"; + level.colorchecklist["orange"] = "o"; + level.colorchecklist["o"] = "o"; + level.currentcolorforced = []; + level.currentcolorforced["allies"] = []; + level.currentcolorforced["axis"] = []; + level.lastcolorforced = []; + level.lastcolorforced["allies"] = []; + level.lastcolorforced["axis"] = []; + foreach(var_0D in level.colorlist) + { + level.arrays_of_colorforced_ai["allies"][var_0D] = []; + level.arrays_of_colorforced_ai["axis"][var_0D] = []; + level.currentcolorforced["allies"][var_0D] = undefined; + level.currentcolorforced["axis"][var_0D] = undefined; + } + + thread player_color_node(); + var_0F = getspawnerteamarray("allies"); + level._color_friendly_spawners = []; + foreach(var_11 in var_0F) + { + level._color_friendly_spawners[var_11.classname] = var_11; + } +} + +//Function Number: 2 +convert_color_to_short_string() +{ + self.script_forcecolor = level.colorchecklist[self.script_forcecolor]; +} + +//Function Number: 3 +ai_picks_destination(param_00) +{ + if(isdefined(self.script_forcecolor)) + { + convert_color_to_short_string(); + self.currentcolorcode = param_00; + var_01 = self.script_forcecolor; + level.arrays_of_colorforced_ai[get_team()][var_01] = maps\_utility::array_add(level.arrays_of_colorforced_ai[get_team()][var_01],self); + thread goto_current_colorindex(); + } +} + +//Function Number: 4 +goto_current_colorindex() +{ + if(!isdefined(self.currentcolorcode)) + { + return; + } + + var_00 = level.arrays_of_colorcoded_nodes[get_team()][self.currentcolorcode]; + left_color_node(); + if(!isalive(self)) + { + return; + } + + if(!maps\_utility::has_color()) + { + return; + } + + if(!isdefined(var_00)) + { + var_01 = level.arrays_of_colorcoded_volumes[get_team()][self.currentcolorcode]; + send_ai_to_colorvolume(var_01,self.currentcolorcode); + return; + } + + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + var_03 = var_01[var_02]; + if(isalive(var_03.color_user) && !isplayer(var_03.color_user)) + { + continue; + } + + thread ai_sets_goal_with_delay(var_03); + thread decrementcolorusers(var_03); + return; + } + + no_node_to_go_to(); +} + +//Function Number: 5 +no_node_to_go_to() +{ +} + +//Function Number: 6 +get_color_list() +{ + var_00 = []; + return var_7B; +} + +//Function Number: 7 +array_remove_dupes(param_00) +{ + var_01 = []; + foreach(var_03 in param_00) + { + var_01[var_03] = 1; + } + + var_05 = []; + foreach(var_08, var_07 in var_01) + { + var_05[var_05.size] = var_08; + } + + return var_05; +} + +//Function Number: 8 +get_colorcodes_from_trigger(param_00,param_01) +{ + return get_colorcodes(param_00,param_01); +} + +//Function Number: 9 +get_colorcodes(param_00,param_01) +{ + var_02 = strtok(param_00," "); + var_02 = array_remove_dupes(var_02); + var_03 = []; + var_04 = []; + var_05 = []; + var_06 = get_color_list(); + foreach(var_08 in var_02) + { + var_09 = undefined; + foreach(var_09 in var_06) + { + if(issubstr(var_08,var_09)) + { + break; + } + } + + if(!colorcode_is_used_in_map(param_01,var_08)) + { + continue; + } + + var_04[var_09] = var_08; + var_03[var_03.size] = var_09; + var_05[var_05.size] = var_08; + } + + var_02 = var_05; + var_0D = []; + return var_7B; +} + +//Function Number: 10 +colorcode_is_used_in_map(param_00,param_01) +{ + if(isdefined(level.arrays_of_colorcoded_nodes[param_00][param_01])) + { + return 1; + } + + return isdefined(level.arrays_of_colorcoded_volumes[param_00][param_01]); +} + +//Function Number: 11 +trigger_issues_orders(param_00,param_01) +{ + var_02 = get_colorcodes_from_trigger(param_00,param_01); + var_03 = var_02["colorCodes"]; + var_04 = var_02["colorCodesByColorIndex"]; + var_05 = var_02["colors"]; + param_00 = undefined; + self endon("death"); + for(;;) + { + self waittill("trigger"); + if(isdefined(self.activated_color_trigger)) + { + self.activated_color_trigger = undefined; + continue; + } + + activate_color_trigger_internal(var_03,var_05,param_01,var_04); + if(isdefined(self.script_oneway) && self.script_oneway) + { + thread trigger_delete_target_chain(); + } + } +} + +//Function Number: 12 +trigger_delete_target_chain() +{ + var_00 = []; + var_01 = self; + while(isdefined(var_01)) + { + var_00[var_00.size] = var_01; + if(!isdefined(var_01.targetname)) + { + break; + } + + var_01 = getent(var_01.targetname,"target"); + } + + maps\_utility::array_delete(var_00); +} + +//Function Number: 13 +activate_color_trigger(param_00) +{ + if(param_00 == "allies") + { + thread get_colorcodes_and_activate_trigger(self.script_color_allies,param_00); + return; + } + + thread get_colorcodes_and_activate_trigger(self.script_color_axis,param_00); +} + +//Function Number: 14 +get_colorcodes_and_activate_trigger(param_00,param_01) +{ + var_02 = get_colorcodes_from_trigger(param_00,param_01); + var_03 = var_02["colorCodes"]; + var_04 = var_02["colorCodesByColorIndex"]; + var_05 = var_02["colors"]; + activate_color_trigger_internal(var_03,var_05,param_01,var_04); +} + +//Function Number: 15 +activate_color_trigger_internal(param_00,param_01,param_02,param_03) +{ + return activate_color_code_internal(param_00,param_01,param_02,param_03); +} + +//Function Number: 16 +activate_color_code_internal(param_00,param_01,param_02,param_03) +{ + for(var_04 = 0;var_04 < param_00.size;var_04++) + { + if(!isdefined(level.arrays_of_colorcoded_spawners[param_02][param_00[var_04]])) + { + continue; + } + + level.arrays_of_colorcoded_spawners[param_02][param_00[var_04]] = common_scripts\utility::array_removeundefined(level.arrays_of_colorcoded_spawners[param_02][param_00[var_04]]); + for(var_05 = 0;var_05 < level.arrays_of_colorcoded_spawners[param_02][param_00[var_04]].size;var_05++) + { + level.arrays_of_colorcoded_spawners[param_02][param_00[var_04]][var_05].currentcolorcode = param_00[var_04]; + } + } + + foreach(var_07 in param_01) + { + level.arrays_of_colorforced_ai[param_02][var_07] = maps\_utility::array_removedead(level.arrays_of_colorforced_ai[param_02][var_07]); + level.lastcolorforced[param_02][var_07] = level.currentcolorforced[param_02][var_07]; + level.currentcolorforced[param_02][var_07] = param_03[var_07]; + } + + var_0B = []; + for(var_04 = 0;var_04 < param_00.size;var_04++) + { + if(same_color_code_as_last_time(param_02,param_01[var_04])) + { + continue; + } + + var_0C = param_00[var_04]; + if(!isdefined(level.arrays_of_colorcoded_ai[param_02][var_0C])) + { + continue; + } + + var_0B[var_0C] = issue_leave_node_order_to_ai_and_get_ai(var_0C,param_01[var_04],param_02); + } + + for(var_04 = 0;var_04 < param_00.size;var_04++) + { + var_0C = param_00[var_04]; + if(!isdefined(var_0B[var_0C])) + { + continue; + } + + if(same_color_code_as_last_time(param_02,param_01[var_04])) + { + continue; + } + + if(!isdefined(level.arrays_of_colorcoded_ai[param_02][var_0C])) + { + continue; + } + + issue_color_order_to_ai(var_0C,param_01[var_04],param_02,var_0B[var_0C]); + } +} + +//Function Number: 17 +same_color_code_as_last_time(param_00,param_01) +{ + if(!isdefined(level.lastcolorforced[param_00][param_01])) + { + return 0; + } + + return level.lastcolorforced[param_00][param_01] == level.currentcolorforced[param_00][param_01]; +} + +//Function Number: 18 +process_cover_node_with_last_in_mind_allies(param_00,param_01) +{ + if(issubstr(param_00.script_color_allies,param_01)) + { + self.cover_nodes_last[self.cover_nodes_last.size] = param_00; + return; + } + + self.cover_nodes_first[self.cover_nodes_first.size] = param_00; +} + +//Function Number: 19 +process_cover_node_with_last_in_mind_axis(param_00,param_01) +{ + if(issubstr(param_00.script_color_axis,param_01)) + { + self.cover_nodes_last[self.cover_nodes_last.size] = param_00; + return; + } + + self.cover_nodes_first[self.cover_nodes_first.size] = param_00; +} + +//Function Number: 20 +process_cover_node(param_00,param_01) +{ + self.cover_nodes_first[self.cover_nodes_first.size] = param_00; +} + +//Function Number: 21 +process_path_node(param_00,param_01) +{ + self.path_nodes[self.path_nodes.size] = param_00; +} + +//Function Number: 22 +prioritize_colorcoded_nodes(param_00,param_01,param_02) +{ + var_03 = level.arrays_of_colorcoded_nodes[param_00][param_01]; + var_04 = spawnstruct(); + var_04.path_nodes = []; + var_04.cover_nodes_first = []; + var_04.cover_nodes_last = []; + var_05 = isdefined(level.lastcolorforced[param_00][param_02]); + for(var_06 = 0;var_06 < var_03.size;var_06++) + { + var_07 = var_03[var_06]; + var_04 [[ level.color_node_type_function[var_07.type][var_05][param_00] ]](var_07,level.lastcolorforced[param_00][param_02]); + } + + var_04.cover_nodes_first = maps\_utility::array_randomize(var_04.cover_nodes_first); + var_08 = []; + var_03 = []; + foreach(var_0A, var_07 in var_04.cover_nodes_first) + { + if(isdefined(var_07.script_colorlast)) + { + var_08[var_08.size] = var_07; + var_03[var_0A] = undefined; + continue; + } + + var_03[var_03.size] = var_07; + } + + for(var_06 = 0;var_06 < var_04.cover_nodes_last.size;var_06++) + { + var_03[var_03.size] = var_04.cover_nodes_last[var_06]; + } + + for(var_06 = 0;var_06 < var_04.path_nodes.size;var_06++) + { + var_03[var_03.size] = var_04.path_nodes[var_06]; + } + + foreach(var_07 in var_08) + { + var_03[var_03.size] = var_07; + } + + level.arrays_of_colorcoded_nodes[param_00][param_01] = var_03; +} + +//Function Number: 23 +get_prioritized_colorcoded_nodes(param_00,param_01,param_02) +{ + return level.arrays_of_colorcoded_nodes[param_00][param_01]; +} + +//Function Number: 24 +get_colorcoded_volume(param_00,param_01) +{ + return level.arrays_of_colorcoded_volumes[param_00][param_01]; +} + +//Function Number: 25 +issue_leave_node_order_to_ai_and_get_ai(param_00,param_01,param_02) +{ + level.arrays_of_colorcoded_ai[param_02][param_00] = maps\_utility::array_removedead(level.arrays_of_colorcoded_ai[param_02][param_00]); + var_03 = level.arrays_of_colorcoded_ai[param_02][param_00]; + var_03 = common_scripts\utility::array_combine(var_03,level.arrays_of_colorforced_ai[param_02][param_01]); + var_04 = []; + foreach(var_06 in var_03) + { + if(isdefined(var_06.currentcolorcode) && var_06.currentcolorcode == param_00) + { + continue; + } + + var_04[var_04.size] = var_06; + } + + var_03 = var_04; + if(!var_03.size) + { + return; + } + + common_scripts\utility::array_thread(var_03,::left_color_node); + return var_03; +} + +//Function Number: 26 +send_ai_to_colorvolume(param_00,param_01) +{ + self notify("stop_color_move"); + self.currentcolorcode = param_01; + if(isdefined(param_00.target)) + { + var_02 = getnode(param_00.target,"targetname"); + if(isdefined(var_02)) + { + self setgoalnode(var_02); + } + } + + self.fixednode = 0; + self setgoalvolumeauto(param_00); +} + +//Function Number: 27 +issue_color_order_to_ai(param_00,param_01,param_02,param_03) +{ + var_04 = param_03; + var_05 = []; + if(isdefined(level.arrays_of_colorcoded_nodes[param_02][param_00])) + { + prioritize_colorcoded_nodes(param_02,param_00,param_01); + var_05 = get_prioritized_colorcoded_nodes(param_02,param_00,param_01); + } + else + { + var_06 = get_colorcoded_volume(param_02,param_00); + common_scripts\utility::array_thread(param_03,::send_ai_to_colorvolume,var_06,param_00); + } + + var_07 = 0; + var_08 = param_03.size; + for(var_09 = 0;var_09 < var_05.size;var_09++) + { + var_0A = var_05[var_09]; + if(isalive(var_0A.color_user)) + { + continue; + } + + var_0B = maps\_utility::getclosest(var_0A.origin,param_03); + param_03 = common_scripts\utility::array_remove(param_03,var_0B); + var_0B take_color_node(var_0A,param_00,self,var_07); + var_07++; + if(!param_03.size) + { + return; + } + } +} + +//Function Number: 28 +take_color_node(param_00,param_01,param_02,param_03) +{ + self notify("stop_color_move"); + self.currentcolorcode = param_01; + thread process_color_order_to_ai(param_00,param_02,param_03); +} + +//Function Number: 29 +player_color_node() +{ + for(;;) + { + var_00 = undefined; + if(!isdefined(level.player.node)) + { + wait 0.05; + continue; + } + + var_01 = level.player.node.color_user; + var_00 = level.player.node; + var_00.color_user = level.player; + for(;;) + { + if(!isdefined(level.player.node)) + { + break; + } + + if(level.player.node != var_00) + { + break; + } + + wait 0.05; + } + + var_00.color_user = undefined; + var_00 color_node_finds_a_user(); + } +} + +//Function Number: 30 +color_node_finds_a_user() +{ + if(isdefined(self.script_color_allies)) + { + color_node_finds_user_from_colorcodes(self.script_color_allies,"allies"); + } + + if(isdefined(self.script_color_axis)) + { + color_node_finds_user_from_colorcodes(self.script_color_axis,"axis"); + } +} + +//Function Number: 31 +color_node_finds_user_from_colorcodes(param_00,param_01) +{ + if(isdefined(self.color_user)) + { + return; + } + + var_02 = strtok(param_00," "); + var_02 = array_remove_dupes(var_02); + common_scripts\utility::array_levelthread(var_02,::color_node_finds_user_for_colorcode,param_01); +} + +//Function Number: 32 +color_node_finds_user_for_colorcode(param_00,param_01) +{ + var_02 = param_00[0]; + if(!isdefined(level.currentcolorforced[param_01][var_02])) + { + return; + } + + if(level.currentcolorforced[param_01][var_02] != param_00) + { + return; + } + + var_03 = maps\_utility::get_force_color_guys(param_01,var_02); + for(var_04 = 0;var_04 < var_03.size;var_04++) + { + var_05 = var_03[var_04]; + if(var_05 occupies_colorcode(param_00)) + { + continue; + } + + var_05 take_color_node(self,param_00); + return; + } +} + +//Function Number: 33 +occupies_colorcode(param_00) +{ + if(!isdefined(self.currentcolorcode)) + { + return 0; + } + + return self.currentcolorcode == param_00; +} + +//Function Number: 34 +ai_sets_goal_with_delay(param_00) +{ + self endon("death"); + var_01 = my_current_node_delays(); + if(var_01) + { + self endon("stop_color_move"); + wait var_01; + } + + thread ai_sets_goal(param_00); +} + +//Function Number: 35 +ai_sets_goal(param_00) +{ + self notify("stop_going_to_node"); + set_goal_and_volume(param_00); + var_01 = level.arrays_of_colorcoded_volumes[get_team()][self.currentcolorcode]; + if(isdefined(self.script_careful)) + { + thread careful_logic(param_00,var_01); + } +} + +//Function Number: 36 +set_goal_and_volume(param_00) +{ + if(isdefined(self.colornode_func)) + { + self thread [[ self.colornode_func ]](param_00); + } + + if(isdefined(self._colors_go_line)) + { + thread maps\_anim::anim_single_queue(self,self._colors_go_line); + self._colors_go_line = undefined; + } + + if(isdefined(self.colornode_setgoal_func)) + { + self thread [[ self.colornode_setgoal_func ]](param_00); + } + else + { + self setgoalnode(param_00); + } + + if(is_using_forcegoal_radius(param_00)) + { + thread forcegoal_radius(param_00); + } + else if(param_00.radius > 0) + { + self.goalradius = param_00.radius; + } + + var_01 = level.arrays_of_colorcoded_volumes[get_team()][self.currentcolorcode]; + if(isdefined(var_01)) + { + self setfixednodesafevolume(var_01); + } + else + { + self clearfixednodesafevolume(); + } + + if(isdefined(param_00.fixednodesaferadius)) + { + self.fixednodesaferadius = param_00.fixednodesaferadius; + return; + } + + if(isdefined(level.fixednodesaferadius_default)) + { + self.fixednodesaferadius = level.fixednodesaferadius_default; + return; + } + + self.fixednodesaferadius = 64; +} + +//Function Number: 37 +is_using_forcegoal_radius(param_00) +{ + if(!isdefined(self.script_forcegoal)) + { + return 0; + } + + if(!self.script_forcegoal) + { + return 0; + } + + if(!isdefined(param_00.fixednodesaferadius)) + { + return 0; + } + + if(self.fixednode) + { + return 0; + } + + return 1; +} + +//Function Number: 38 +forcegoal_radius(param_00) +{ + self endon("death"); + self endon("stop_going_to_node"); + self.goalradius = param_00.fixednodesaferadius; + common_scripts\utility::waittill_either("goal","damage"); + if(param_00.radius > 0) + { + self.goalradius = param_00.radius; + } +} + +//Function Number: 39 +careful_logic(param_00,param_01) +{ + self endon("death"); + self endon("stop_being_careful"); + self endon("stop_going_to_node"); + thread recover_from_careful_disable(param_00); + for(;;) + { + wait_until_an_enemy_is_in_safe_area(param_00,param_01); + use_big_goal_until_goal_is_safe(param_00,param_01); + self.fixednode = 1; + set_goal_and_volume(param_00); + } +} + +//Function Number: 40 +recover_from_careful_disable(param_00) +{ + self endon("death"); + self endon("stop_going_to_node"); + self waittill("stop_being_careful"); + self.fixednode = 1; + set_goal_and_volume(param_00); +} + +//Function Number: 41 +use_big_goal_until_goal_is_safe(param_00,param_01) +{ + self setgoalpos(self.origin); + self.goalradius = 1024; + self.fixednode = 0; + if(isdefined(param_01)) + { + for(;;) + { + wait 1; + if(self isknownenemyinradius(param_00.origin,self.fixednodesaferadius)) + { + continue; + } + + if(self isknownenemyinvolume(param_01)) + { + continue; + } + + return; + } + + return; + } + + for(;;) + { + if(!isknownenemyinradius_tmp(param_00.origin,self.fixednodesaferadius)) + { + return; + } + + wait 1; + } +} + +//Function Number: 42 +isknownenemyinradius_tmp(param_00,param_01) +{ + var_02 = getaiarray("axis"); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + if(distance2d(var_02[var_03].origin,param_00) < param_01) + { + return 1; + } + } + + return 0; +} + +//Function Number: 43 +wait_until_an_enemy_is_in_safe_area(param_00,param_01) +{ + if(isdefined(param_01)) + { + for(;;) + { + if(self isknownenemyinradius(param_00.origin,self.fixednodesaferadius)) + { + return; + } + + if(self isknownenemyinvolume(param_01)) + { + return; + } + + wait 1; + } + + return; + } + + for(;;) + { + if(isknownenemyinradius_tmp(param_00.origin,self.fixednodesaferadius)) + { + return; + } + + wait 1; + } +} + +//Function Number: 44 +my_current_node_delays() +{ + if(!isdefined(self.node)) + { + return 0; + } + + return self.node maps\_utility::script_delay(); +} + +//Function Number: 45 +process_color_order_to_ai(param_00,param_01,param_02) +{ + thread decrementcolorusers(param_00); + self endon("stop_color_move"); + self endon("death"); + if(isdefined(param_01)) + { + param_01 maps\_utility::script_delay(); + } + + if(!my_current_node_delays()) + { + if(isdefined(param_02)) + { + wait param_02 * randomfloatrange(0.2,0.35); + } + } + + ai_sets_goal(param_00); + self.color_ordered_node_assignment = param_00; + for(;;) + { + self waittill("node_taken",var_03); + if(isplayer(var_03)) + { + wait 0.05; + } + + param_00 = get_best_available_new_colored_node(); + if(isdefined(param_00)) + { + if(isalive(self.color_node.color_user) && self.color_node.color_user == self) + { + self.color_node.color_user = undefined; + } + + self.color_node = param_00; + param_00.color_user = self; + ai_sets_goal(param_00); + } + } +} + +//Function Number: 46 +get_best_available_colored_node() +{ + var_00 = level.currentcolorforced[get_team()][self.script_forcecolor]; + var_01 = get_prioritized_colorcoded_nodes(get_team(),var_00,self.script_forcecolor); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + if(!isalive(var_01[var_02].color_user)) + { + return var_01[var_02]; + } + } +} + +//Function Number: 47 +get_best_available_new_colored_node() +{ + var_00 = level.currentcolorforced[get_team()][self.script_forcecolor]; + var_01 = get_prioritized_colorcoded_nodes(get_team(),var_00,self.script_forcecolor); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + if(var_01[var_02] == self.color_node) + { + continue; + } + + if(!isalive(var_01[var_02].color_user)) + { + return var_01[var_02]; + } + } +} + +//Function Number: 48 +process_stop_short_of_node(param_00) +{ + self endon("stopScript"); + self endon("death"); + if(isdefined(self.node)) + { + return; + } + + if(distance(param_00.origin,self.origin) < 32) + { + reached_node_but_could_not_claim_it(param_00); + return; + } + + var_01 = gettime(); + wait_for_killanimscript_or_time(1); + var_02 = gettime(); + if(var_02 - var_01 >= 1000) + { + reached_node_but_could_not_claim_it(param_00); + } +} + +//Function Number: 49 +wait_for_killanimscript_or_time(param_00) +{ + self endon("killanimscript"); + wait param_00; +} + +//Function Number: 50 +reached_node_but_could_not_claim_it(param_00) +{ + var_01 = getaiarray(); + var_02 = undefined; + for(var_03 = 0;var_03 < var_01.size;var_03++) + { + if(!isdefined(var_01[var_03].node)) + { + continue; + } + + if(var_01[var_03].node != param_00) + { + continue; + } + + var_01[var_03] notify("eject_from_my_node"); + wait 1; + self notify("eject_from_my_node"); + return 1; + } + + return 0; +} + +//Function Number: 51 +decrementcolorusers(param_00) +{ + param_00.color_user = self; + self.color_node = param_00; + self endon("stop_color_move"); + self waittill("death"); + self.color_node.color_user = undefined; +} + +//Function Number: 52 +colorislegit(param_00) +{ + for(var_01 = 0;var_01 < level.colorlist.size;var_01++) + { + if(param_00 == level.colorlist[var_01]) + { + return 1; + } + } + + return 0; +} + +//Function Number: 53 +add_volume_to_global_arrays(param_00,param_01) +{ + var_02 = strtok(param_00," "); + var_02 = array_remove_dupes(var_02); + foreach(var_04 in var_02) + { + level.arrays_of_colorcoded_volumes[param_01][var_04] = self; + level.arrays_of_colorcoded_ai[param_01][var_04] = []; + level.arrays_of_colorcoded_spawners[param_01][var_04] = []; + } +} + +//Function Number: 54 +add_node_to_global_arrays(param_00,param_01) +{ + self.color_user = undefined; + var_02 = strtok(param_00," "); + var_02 = array_remove_dupes(var_02); + foreach(var_04 in var_02) + { + if(isdefined(level.arrays_of_colorcoded_nodes[param_01]) && isdefined(level.arrays_of_colorcoded_nodes[param_01][var_04])) + { + level.arrays_of_colorcoded_nodes[param_01][var_04] = maps\_utility::array_add(level.arrays_of_colorcoded_nodes[param_01][var_04],self); + continue; + } + + level.arrays_of_colorcoded_nodes[param_01][var_04][0] = self; + level.arrays_of_colorcoded_ai[param_01][var_04] = []; + level.arrays_of_colorcoded_spawners[param_01][var_04] = []; + } +} + +//Function Number: 55 +left_color_node() +{ + if(!isdefined(self.color_node)) + { + return; + } + + if(isdefined(self.color_node.color_user) && self.color_node.color_user == self) + { + self.color_node.color_user = undefined; + } + + self.color_node = undefined; + self notify("stop_color_move"); +} + +//Function Number: 56 +getcolornumberarray() +{ + var_00 = []; + if(issubstr(self.classname,"axis") || issubstr(self.classname,"enemy") || issubstr(self.classname,"team3")) + { + } + + if(issubstr(self.classname,"ally") || self.type == "civilian") + { + } + + if(!isdefined(var_7B["colorTeam"])) + { + var_7B = undefined; + } + + return var_7B; +} + +//Function Number: 57 +removespawnerfromcolornumberarray() +{ + var_00 = getcolornumberarray(); + if(!isdefined(var_00)) + { + return; + } + + var_01 = var_00["team"]; + var_02 = var_00["colorTeam"]; + var_03 = strtok(var_02," "); + var_03 = array_remove_dupes(var_03); + for(var_04 = 0;var_04 < var_03.size;var_04++) + { + level.arrays_of_colorcoded_spawners[var_01][var_03[var_04]] = common_scripts\utility::array_remove(level.arrays_of_colorcoded_spawners[var_01][var_03[var_04]],self); + } +} + +//Function Number: 58 +add_cover_node(param_00) +{ + level.color_node_type_function[param_00][1]["allies"] = ::process_cover_node_with_last_in_mind_allies; + level.color_node_type_function[param_00][1]["axis"] = ::process_cover_node_with_last_in_mind_axis; + level.color_node_type_function[param_00][0]["allies"] = ::process_cover_node; + level.color_node_type_function[param_00][0]["axis"] = ::process_cover_node; +} + +//Function Number: 59 +add_path_node(param_00) +{ + level.color_node_type_function[param_00][1]["allies"] = ::process_path_node; + level.color_node_type_function[param_00][0]["allies"] = ::process_path_node; + level.color_node_type_function[param_00][1]["axis"] = ::process_path_node; + level.color_node_type_function[param_00][0]["axis"] = ::process_path_node; +} + +//Function Number: 60 +colornode_spawn_reinforcement(param_00,param_01) +{ + level endon("kill_color_replacements"); + level endon("kill_hidden_reinforcement_waiting"); + var_02 = spawn_hidden_reinforcement(param_00,param_01); + if(isdefined(level.friendly_startup_thread)) + { + var_02 thread [[ level.friendly_startup_thread ]](); + } + + var_02 thread colornode_replace_on_death(); +} + +//Function Number: 61 +colornode_replace_on_death() +{ + level endon("kill_color_replacements"); + self endon("_disable_reinforcement"); + if(isdefined(self.replace_on_death)) + { + return; + } + + self.replace_on_death = 1; + var_00 = self.classname; + var_01 = self.script_forcecolor; + waittillframeend; + if(isalive(self)) + { + self waittill("death"); + } + + var_02 = level.current_color_order; + if(!isdefined(self.script_forcecolor)) + { + return; + } + + thread colornode_spawn_reinforcement(var_00,self.script_forcecolor); + if(isdefined(self) && isdefined(self.script_forcecolor)) + { + var_01 = self.script_forcecolor; + } + + if(isdefined(self) && isdefined(self.origin)) + { + var_03 = self.origin; + } + + for(;;) + { + if(get_color_from_order(var_01,var_02) == "none") + { + return; + } + + var_04 = maps\_utility::get_force_color_guys("allies",var_02[var_01]); + if(!isdefined(level.color_doesnt_care_about_heroes)) + { + var_04 = maps\_utility::remove_heroes_from_array(var_04); + } + + if(!isdefined(level.color_doesnt_care_about_classname)) + { + var_04 = maps\_utility::remove_without_classname(var_04,var_00); + } + + if(!var_04.size) + { + wait 2; + continue; + } + + var_05 = maps\_utility::getclosest(level.player.origin,var_04); + waittillframeend; + if(!isalive(var_05)) + { + continue; + } + + var_05 maps\_utility::set_force_color(var_01); + if(isdefined(level.friendly_promotion_thread)) + { + var_05 [[ level.friendly_promotion_thread ]](var_01); + } + + var_01 = var_02[var_01]; + } +} + +//Function Number: 62 +get_color_from_order(param_00,param_01) +{ + if(!isdefined(param_00)) + { + return "none"; + } + + if(!isdefined(param_01)) + { + return "none"; + } + + if(!isdefined(param_01[param_00])) + { + return "none"; + } + + return param_01[param_00]; +} + +//Function Number: 63 +friendly_spawner_vision_checker() +{ + level.friendly_respawn_vision_checker_thread = 1; + var_00 = 0; + for(;;) + { + for(;;) + { + if(!respawn_friendlies_without_vision_check()) + { + break; + } + + wait 0.05; + } + + wait 1; + if(!isdefined(level.respawn_spawner_org)) + { + continue; + } + + var_01 = level.player.origin - level.respawn_spawner_org; + if(length(var_01) < 200) + { + player_sees_spawner(); + continue; + } + + var_02 = anglestoforward((0,level.player getplayerangles()[1],0)); + var_03 = vectornormalize(var_01); + var_04 = vectordot(var_02,var_03); + if(var_04 < 0.2) + { + player_sees_spawner(); + continue; + } + + var_00++; + if(var_00 < 3) + { + continue; + } + + common_scripts\utility::flag_set("player_looks_away_from_spawner"); + } +} + +//Function Number: 64 +get_color_spawner(param_00) +{ + if(isdefined(param_00)) + { + if(!isdefined(level._color_friendly_spawners[param_00])) + { + var_01 = getspawnerteamarray("allies"); + foreach(var_03 in var_01) + { + if(var_03.classname != param_00) + { + continue; + } + + level._color_friendly_spawners[param_00] = var_03; + break; + } + } + } + + if(!isdefined(param_00)) + { + var_03 = common_scripts\utility::random(level._color_friendly_spawners); + if(!isdefined(var_03)) + { + var_01 = []; + foreach(var_06, var_03 in level._color_friendly_spawners) + { + if(isdefined(var_03)) + { + var_01[var_06] = var_03; + } + } + + level._color_friendly_spawners = var_01; + return common_scripts\utility::random(level._color_friendly_spawners); + } + + return var_06; + } + + return level._color_friendly_spawners[var_06]; +} + +//Function Number: 65 +respawn_friendlies_without_vision_check() +{ + if(isdefined(level.respawn_friendlies_force_vision_check)) + { + return 0; + } + + return common_scripts\utility::flag("respawn_friendlies"); +} + +//Function Number: 66 +wait_until_vision_check_satisfied_or_disabled() +{ + if(common_scripts\utility::flag("player_looks_away_from_spawner")) + { + return; + } + + level endon("player_looks_away_from_spawner"); + for(;;) + { + if(respawn_friendlies_without_vision_check()) + { + return; + } + + wait 0.05; + } +} + +//Function Number: 67 +spawn_hidden_reinforcement(param_00,param_01) +{ + level endon("kill_color_replacements"); + level endon("kill_hidden_reinforcement_waiting"); + var_02 = undefined; + for(;;) + { + if(!respawn_friendlies_without_vision_check()) + { + if(!isdefined(level.friendly_respawn_vision_checker_thread)) + { + thread friendly_spawner_vision_checker(); + } + + for(;;) + { + wait_until_vision_check_satisfied_or_disabled(); + common_scripts\utility::flag_waitopen("friendly_spawner_locked"); + if(common_scripts\utility::flag("player_looks_away_from_spawner") || respawn_friendlies_without_vision_check()) + { + break; + } + } + + common_scripts\utility::flag_set("friendly_spawner_locked"); + } + + var_03 = get_color_spawner(param_00); + var_03.count = 1; + var_04 = var_03.origin; + var_03.origin = level.respawn_spawner_org; + var_02 = var_03 stalingradspawn(); + var_03.origin = var_04; + if(maps\_utility::spawn_failed(var_02)) + { + thread lock_spawner_for_awhile(); + wait 1; + continue; + } + + level notify("reinforcement_spawned",var_02); + break; + } + + for(;;) + { + if(!isdefined(param_01)) + { + break; + } + + if(get_color_from_order(param_01,level.current_color_order) == "none") + { + break; + } + + param_01 = level.current_color_order[param_01]; + } + + if(isdefined(param_01)) + { + var_02 maps\_utility::set_force_color(param_01); + } + + thread lock_spawner_for_awhile(); + return var_02; +} + +//Function Number: 68 +lock_spawner_for_awhile() +{ + common_scripts\utility::flag_set("friendly_spawner_locked"); + if(isdefined(level.friendly_respawn_lock_func)) + { + [[ level.friendly_respawn_lock_func ]](); + } + else + { + wait 2; + } + + common_scripts\utility::flag_clear("friendly_spawner_locked"); +} + +//Function Number: 69 +player_sees_spawner() +{ + var_00 = 0; + common_scripts\utility::flag_clear("player_looks_away_from_spawner"); +} + +//Function Number: 70 +kill_color_replacements() +{ + common_scripts\utility::flag_clear("friendly_spawner_locked"); + level notify("kill_color_replacements"); + var_00 = getaiarray(); + common_scripts\utility::array_thread(var_00,::remove_replace_on_death); +} + +//Function Number: 71 +remove_replace_on_death() +{ + self.replace_on_death = undefined; +} + +//Function Number: 72 +get_team(param_00) +{ + if(isdefined(self.team) && !isdefined(param_00)) + { + param_00 = self.team; + } + + return level.color_teams[param_00]; +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_compass.gsc b/MW3/PC/SP/maps/_compass.gsc new file mode 100644 index 0000000..e5482f9 --- /dev/null +++ b/MW3/PC/SP/maps/_compass.gsc @@ -0,0 +1,97 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_compass.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 28 ms + * Timestamp: 10/27/2023 2:23:06 AM +*******************************************************************/ + +//Function Number: 1 +setupminimap(param_00,param_01) +{ + level.minimap_image = param_00; + if(!isdefined(level._loadstarted) && !isdefined(param_01)) + { + } + + if(!isdefined(param_01)) + { + param_01 = "minimap_corner"; + } + + var_02 = getdvarfloat("scr_requiredMapAspectRatio",1); + var_03 = getentarray(param_01,"targetname"); + if(var_03.size != 2) + { + return; + } + + var_04 = (var_03[0].origin[0],var_03[0].origin[1],0); + var_05 = (var_03[1].origin[0],var_03[1].origin[1],0); + var_06 = var_05 - var_04; + var_07 = (cos(getnorthyaw()),sin(getnorthyaw()),0); + var_08 = (0 - var_07[1],var_07[0],0); + if(vectordot(var_06,var_08) > 0) + { + if(vectordot(var_06,var_07) > 0) + { + var_09 = var_05; + var_0A = var_04; + } + else + { + var_0B = vecscale(var_09,vectordot(var_08,var_09)); + var_09 = var_05 - var_0B; + var_0A = var_04 + var_0B; + } + } + else if(vectordot(var_08,var_09) > 0) + { + var_0B = vecscale(var_09,vectordot(var_08,var_09)); + var_09 = var_04 + var_0B; + var_0A = var_05 - var_0B; + } + else + { + var_09 = var_06; + var_0A = var_06; + } + + if(var_02 > 0) + { + var_0C = vectordot(var_09 - var_0A,var_07); + var_0D = vectordot(var_09 - var_0A,var_08); + var_0E = var_0D / var_0C; + if(var_0E < var_02) + { + var_0F = var_02 / var_0E; + var_10 = vecscale(var_08,var_0D * var_0F - 1 * 0.5); + } + else + { + var_0F = var_10 / var_04; + var_10 = vecscale(var_08,var_0D * var_10 - 1 * 0.5); + } + + var_09 = var_09 + var_10; + var_0A = var_0A - var_10; + } + + level.map_extents = []; + level.map_extents["top"] = var_09[1]; + level.map_extents["left"] = var_0A[0]; + level.map_extents["bottom"] = var_0A[1]; + level.map_extents["right"] = var_09[0]; + level.map_width = level.map_extents["right"] - level.map_extents["left"]; + level.map_height = level.map_extents["top"] - level.map_extents["bottom"]; + level.mapsize = vectordot(var_09 - var_0A,var_07); + setminimap(param_00,var_09[0],var_09[1],var_0A[0],var_0A[1]); +} + +//Function Number: 2 +vecscale(param_00,param_01) +{ + return (param_00[0] * param_01,param_00[1] * param_01,param_00[2] * param_01); +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_coop.gsc b/MW3/PC/SP/maps/_coop.gsc new file mode 100644 index 0000000..f040f27 --- /dev/null +++ b/MW3/PC/SP/maps/_coop.gsc @@ -0,0 +1,342 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_coop.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 20 + * Decompile Time: 309 ms + * Timestamp: 10/27/2023 2:22:03 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + common_scripts\utility::flag_init("coop_game"); + if(!maps\_utility::is_coop()) + { + return; + } + + common_scripts\utility::flag_set("coop_game"); + common_scripts\utility::flag_init("coop_show_constant_icon"); + setdvarifuninitialized("coop_show_constant_icon",1); + if(getdvarint("coop_show_constant_icon") == 1) + { + common_scripts\utility::flag_set("coop_show_constant_icon"); + } + + precacheshader("hint_health"); + precacheshader("coop_player_location"); + precacheshader("coop_player_location_fire"); + level.coop_icon_blinktime = 7; + level.coop_icon_blinkcrement = 0.375; + level.coop_revive_nag_hud_refreshtime = 20; + foreach(var_01 in level.players) + { + var_01.colorblind = var_01 getlocalplayerprofiledata("colorBlind"); + var_01 thread initialize_colors(var_01.colorblind); + var_01 thread friendly_hud_init(); + } +} + +//Function Number: 2 +initialize_colors(param_00) +{ + if(param_00) + { + var_01 = (0.35,1,1); + var_02 = (1,0.65,0.2); + var_03 = (1,1,1); + self.coop_icon_color_normal = var_01; + self.coop_icon_color_downed = var_02; + self.coop_icon_color_shoot = var_01; + self.coop_icon_color_damage = var_03; + self.coop_icon_color_dying = var_02; + self.coop_icon_color_blink = var_03; + return; + } + + var_04 = (0.635,0.929,0.604); + var_05 = (1,1,0.2); + var_02 = (1,0.65,0.2); + var_06 = (1,0.2,0.2); + var_03 = (1,1,1); + self.coop_icon_color_normal = var_04; + self.coop_icon_color_downed = var_05; + self.coop_icon_color_shoot = var_04; + self.coop_icon_color_damage = var_02; + self.coop_icon_color_dying = var_06; + self.coop_icon_color_blink = var_03; +} + +//Function Number: 3 +rebuild_friendly_icon(param_00,param_01,param_02) +{ + if(isdefined(self.nofriendlyhudicon)) + { + return; + } + + if(!isdefined(self.friendlyicon) || self.friendlyicon.material != param_01) + { + create_fresh_friendly_icon(param_01); + } + + self.friendlyicon.color = param_00; + if(isdefined(param_02) && param_02) + { + self.friendlyicon setwaypointedgestyle_rotatingicon(); + } +} + +//Function Number: 4 +create_fresh_friendly_icon(param_00) +{ + if(isdefined(self.friendlyicon)) + { + self.friendlyicon destroy(); + } + + self.friendlyicon = newclienthudelem(self); + self.friendlyicon setshader(param_00,1,1); + self.friendlyicon setwaypoint(1,1,0); + self.friendlyicon setwaypointiconoffscreenonly(); + self.friendlyicon settargetent(maps\_utility::get_other_player(self)); + self.friendlyicon.material = param_00; + self.friendlyicon.hidewheninmenu = 1; + if(common_scripts\utility::flag("coop_show_constant_icon")) + { + self.friendlyicon.alpha = 1; + return; + } + + self.friendlyicon.alpha = 0; +} + +//Function Number: 5 +friendly_hud_icon_blink_on_fire() +{ + self endon("death"); + for(;;) + { + self waittill("weapon_fired"); + var_00 = maps\_utility::get_other_player(self); + var_00 thread friendly_hud_icon_flash(var_00.coop_icon_color_shoot,"coop_player_location_fire",1); + } +} + +//Function Number: 6 +friendly_hud_icon_blink_on_damage() +{ + self endon("death"); + for(;;) + { + self waittill("damage"); + var_00 = maps\_utility::get_other_player(self); + var_00 thread friendly_hud_icon_flash(var_00.coop_icon_color_damage,"coop_player_location",1); + } +} + +//Function Number: 7 +friendly_hud_icon_flash(param_00,param_01,param_02) +{ + if(isdefined(self.nofriendlyhudicon)) + { + return; + } + + self endon("death"); + self notify("flash_color_thread"); + self endon("flash_color_thread"); + var_03 = maps\_utility::get_other_player(self); + if(maps\_utility::is_player_down(var_03)) + { + return; + } + + rebuild_friendly_icon(param_00,param_01,param_02); + wait 0.5; + param_01 = friendlyhudicon_currentmaterial(); + var_04 = friendlyhudicon_rotating(); + rebuild_friendly_icon(self.coop_icon_color_normal,param_01,var_04); +} + +//Function Number: 8 +friendly_hud_init() +{ + level endon("special_op_terminated"); + friendlyhudicon_normal(); + thread friendly_hud_icon_blink_on_fire(); + thread friendly_hud_icon_blink_on_damage(); + thread monitor_color_blind_toggle(); + thread friendly_hud_destroy_on_mission_end(); + if(isdefined(self.nofriendlyhudicon)) + { + return; + } + + self.friendlyicon.alpha = 0; + for(;;) + { + common_scripts\utility::flag_wait("coop_show_constant_icon"); + self.friendlyicon.alpha = 1; + common_scripts\utility::flag_waitopen("coop_show_constant_icon"); + self.friendlyicon.alpha = 0; + } +} + +//Function Number: 9 +friendly_hud_destroy_on_mission_end() +{ + level waittill("special_op_terminated"); + foreach(var_01 in level.players) + { + var_01 player_friendly_hud_destroy(); + } +} + +//Function Number: 10 +player_friendly_hud_destroy() +{ + if(isdefined(self.friendlyicon)) + { + self.friendlyicon destroy(); + } +} + +//Function Number: 11 +friendlyhudicon_hideall() +{ + common_scripts\utility::flag_clear("coop_show_constant_icon"); +} + +//Function Number: 12 +friendlyhudicon_showall() +{ + common_scripts\utility::flag_set("coop_show_constant_icon"); +} + +//Function Number: 13 +friendlyhudicon_disable() +{ + self.nofriendlyhudicon = 1; + player_friendly_hud_destroy(); +} + +//Function Number: 14 +friendlyhudicon_enable() +{ + self.nofriendlyhudicon = undefined; + if(!isdefined(self.friendlyicon)) + { + friendlyhudicon_normal(); + } +} + +//Function Number: 15 +friendlyhudicon_normal() +{ + if(!common_scripts\utility::flag("coop_game")) + { + return; + } + + self.coop_icon_state = "ICON_STATE_NORMAL"; + var_00 = friendlyhudicon_currentmaterial(); + var_01 = friendlyhudicon_rotating(); + rebuild_friendly_icon(self.coop_icon_color_normal,var_00,var_01); +} + +//Function Number: 16 +friendlyhudicon_downed() +{ + if(!common_scripts\utility::flag("coop_game")) + { + return; + } + + self.coop_icon_state = "ICON_STATE_DOWNED"; + var_00 = friendlyhudicon_currentmaterial(); + var_01 = friendlyhudicon_rotating(); + rebuild_friendly_icon(self.coop_icon_color_downed,var_00,var_01); +} + +//Function Number: 17 +friendlyhudicon_update(param_00) +{ + if(!common_scripts\utility::flag("coop_game")) + { + return; + } + + var_01 = friendlyhudicon_currentmaterial(); + var_02 = friendlyhudicon_rotating(); + rebuild_friendly_icon(param_00,var_01,var_02); +} + +//Function Number: 18 +friendlyhudicon_currentmaterial() +{ + var_00 = "coop_player_location"; + switch(self.coop_icon_state) + { + case "ICON_STATE_NORMAL": + var_00 = "coop_player_location"; + break; + + case "ICON_STATE_DOWNED": + var_00 = "hint_health"; + break; + + default: + break; + } + + return var_00; +} + +//Function Number: 19 +friendlyhudicon_rotating() +{ + var_00 = 0; + switch(self.coop_icon_state) + { + case "ICON_STATE_NORMAL": + var_00 = 1; + break; + + case "ICON_STATE_DOWNED": + var_00 = 0; + break; + + default: + break; + } + + return var_00; +} + +//Function Number: 20 +monitor_color_blind_toggle() +{ + for(;;) + { + if(self getlocalplayerprofiledata("colorBlind") != self.colorblind) + { + self.colorblind = self getlocalplayerprofiledata("colorBlind"); + initialize_colors(self.colorblind); + switch(self.coop_icon_state) + { + case "ICON_STATE_NORMAL": + friendlyhudicon_normal(); + break; + + case "ICON_STATE_DOWNED": + friendlyhudicon_downed(); + break; + } + } + + wait 0.05; + } +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_createfx.gsc b/MW3/PC/SP/maps/_createfx.gsc new file mode 100644 index 0000000..3300ae6 --- /dev/null +++ b/MW3/PC/SP/maps/_createfx.gsc @@ -0,0 +1,52 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_createfx.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 3 + * Decompile Time: 43 ms + * Timestamp: 10/27/2023 2:22:23 AM +*******************************************************************/ + +//Function Number: 1 +createfx() +{ + level.func_position_player = ::func_position_player; + level.func_position_player_get = ::func_position_player_get; + level.func_loopfxthread = ::common_scripts\_fx::loopfxthread; + level.func_oneshotfxthread = ::common_scripts\_fx::oneshotfxthread; + level.func_create_loopsound = ::common_scripts\_fx::create_loopsound; + level.func_updatefx = ::common_scripts\_createfx::restart_fx_looper; + level.func_process_fx_rotater = ::common_scripts\_createfx::process_fx_rotater; + level.mp_createfx = 0; + var_00 = getaiarray(); + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + var_00[var_01] delete(); + } + + thread common_scripts\_createfx::createfxlogic(); + thread common_scripts\_createfx::func_get_level_fx(); + common_scripts\_createfx::createfx_common(); + level waittill("eternity"); +} + +//Function Number: 2 +func_position_player_get(param_00) +{ + if(distance(param_00,level.player.origin) > 64) + { + setdvar("createfx_playerpos_x",level.player.origin[0]); + setdvar("createfx_playerpos_y",level.player.origin[1]); + setdvar("createfx_playerpos_z",level.player.origin[2]); + } + + return level.player.origin; +} + +//Function Number: 3 +func_position_player() +{ + var_00 = []; + level.player setorigin((var_7B[0],var_7B[1],var_7B[2])); +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_damagefeedback.gsc b/MW3/PC/SP/maps/_damagefeedback.gsc new file mode 100644 index 0000000..a3bc958 --- /dev/null +++ b/MW3/PC/SP/maps/_damagefeedback.gsc @@ -0,0 +1,118 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_damagefeedback.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 6 + * Decompile Time: 100 ms + * Timestamp: 10/27/2023 2:22:08 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + precacheshader("damage_feedback"); + common_scripts\utility::array_thread(level.players,::init_damage_feedback); + common_scripts\utility::array_thread(level.players,::monitordamage); +} + +//Function Number: 2 +init_damage_feedback() +{ + self.hud_damagefeedback = newclienthudelem(self); + self.hud_damagefeedback.alignx = "center"; + self.hud_damagefeedback.aligny = "middle"; + self.hud_damagefeedback.horzalign = "center"; + self.hud_damagefeedback.vertalign = "middle"; + self.hud_damagefeedback.alpha = 0; + self.hud_damagefeedback.archived = 1; + self.hud_damagefeedback setshader("damage_feedback",24,48); + self.hud_damagefeedback.y = 12; +} + +//Function Number: 3 +monitordamage() +{ + maps\_utility::add_damage_function(::damagefeedback_took_damage); +} + +//Function Number: 4 +stopmonitordamage() +{ + maps\_utility::remove_damage_function(::damagefeedback_took_damage); +} + +//Function Number: 5 +damagefeedback_took_damage(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + if(!isplayer(param_01)) + { + return; + } + + if(!maps\_utility::is_damagefeedback_enabled()) + { + return; + } + + if(isdefined(self.bullet_resistance)) + { + var_07 = []; + if(isdefined(var_7B[param_05])) + { + if(param_01 <= self.bullet_resistance) + { + return; + } + } + } + + param_02 updatedamagefeedback(self); +} + +//Function Number: 6 +updatedamagefeedback(param_00) +{ + if(!isplayer(self)) + { + return; + } + + if(!isdefined(param_00.team)) + { + return; + } + + if(param_00.team == self.team || param_00.team == "neutral") + { + return; + } + + if(isdefined(param_00.magic_bullet_shield) && param_00.magic_bullet_shield) + { + return; + } + + if(isdefined(param_00.godmode) && param_00.godmode) + { + return; + } + + if(isdefined(param_00.script_godmode) && param_00.script_godmode) + { + return; + } + + self playlocalsound("SP_hit_alert"); + var_01 = 1; + if(isdefined(level.slowmo.speed_slow)) + { + var_01 = level.slowmo.speed_slow; + } + + self.hud_damagefeedback.alpha = 1; + self.hud_damagefeedback fadeovertime(var_01); + self.hud_damagefeedback.alpha = 0; + var_02 = getdvarfloat("cg_crosshairVerticalOffset") * 240; + self.hud_damagefeedback.y = 12 - int(var_02); +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_deadbody.gsc b/MW3/PC/SP/maps/_deadbody.gsc new file mode 100644 index 0000000..8f77fc7 --- /dev/null +++ b/MW3/PC/SP/maps/_deadbody.gsc @@ -0,0 +1,110 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_deadbody.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 4 + * Decompile Time: 44 ms + * Timestamp: 10/27/2023 2:20:04 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + level.scr_anim["dead_guy"]["death1"] = %exposed_death_nerve; + level.scr_anim["dead_guy"]["death2"] = %exposed_death_falltoknees; + level.scr_anim["dead_guy"]["death3"] = %exposed_death_headtwist; + level.scr_anim["dead_guy"]["death4"] = %exposed_crouch_death_twist; + level.scr_anim["dead_guy"]["death5"] = %exposed_crouch_death_fetal; + level.scr_anim["dead_guy"]["death6"] = %death_sitting_pose_v1; + level.scr_anim["dead_guy"]["death7"] = %death_sitting_pose_v2; + level.scr_anim["dead_guy"]["death8"] = %death_pose_on_desk; + level.scr_anim["dead_guy"]["death9"] = %death_pose_on_window; + level.max_number_of_dead_bodies["ead_guy"] = #animtree; + level.dead_body_count = 1; + var_00 = getdvarint("ragdoll_max_simulating") - 6; + if(var_00 > 0) + { + level.var_4075 = var_00; + } + else + { + level.var_4075 = 0; + } + + var_01 = spawnstruct(); + var_01.bodies = []; + common_scripts\utility::run_thread_on_targetname("trigger_body",::trigger_body,var_01); + common_scripts\utility::run_thread_on_targetname("dead_body",::spawn_dead_body,var_01); +} + +//Function Number: 2 +trigger_body(param_00) +{ + self waittill("trigger"); + var_01 = getentarray(self.target,"targetname"); + common_scripts\utility::array_thread(var_01,::spawn_dead_body,param_00); +} + +//Function Number: 3 +spawn_dead_body(param_00) +{ + if(!getdvarint("ragdoll_enable") && isdefined(self.script_parameters) && self.script_parameters == "require_ragdoll") + { + return; + } + + if(level.var_4075 == 0) + { + return; + } + + var_01 = undefined; + if(isdefined(self.script_index)) + { + var_01 = self.script_index; + } + else + { + level.dead_body_count++; + if(level.dead_body_count > 3) + { + level.dead_body_count = 1; + } + + var_01 = level.dead_body_count; + } + + var_02 = spawn("script_model",(0,0,0)); + var_02.origin = self.origin; + var_02.angles = self.angles; + var_02.animname = "dead_guy"; + var_02 maps\_utility::assign_animtree(); + param_00 que_body(var_02); + var_02 [[ level.scr_deadbody[var_01] ]](); + if(!isdefined(self.script_trace)) + { + var_03 = bullettrace(var_02.origin + (0,0,5),var_02.origin + (0,0,-64),0,undefined); + var_02.origin = var_03["position"]; + } + + var_02 setflaggedanim("flag",var_02 maps\_utility::getanim(self.script_noteworthy),1,0,1); + var_02 waittillmatch("end","flag"); + if(!isdefined(self.script_start)) + { + var_02 startragdoll(); + } +} + +//Function Number: 4 +que_body(param_00) +{ + self.bodies[self.bodies.size] = param_00; + if(self.bodies.size <= level.var_4075) + { + return; + } + + self.bodies[0] delete(); + self.bodies = common_scripts\utility::array_removeundefined(self.bodies); +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_debug.gsc b/MW3/PC/SP/maps/_debug.gsc new file mode 100644 index 0000000..0b7d785 --- /dev/null +++ b/MW3/PC/SP/maps/_debug.gsc @@ -0,0 +1,2083 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_debug.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 103 + * Decompile Time: 1672 ms + * Timestamp: 10/27/2023 2:22:33 AM +*******************************************************************/ + +//Function Number: 1 +debugchains() +{ + var_00 = getallnodes(); + var_01 = 0; + var_02 = []; + for(var_03 = 0;var_03 < var_00.size;var_03++) + { + if(!var_00[var_03].spawnflags & 2 && (isdefined(var_00[var_03].target) && getnodearray(var_00[var_03].target,"targetname").size > 0) || isdefined(var_00[var_03].targetname) && getnodearray(var_00[var_03].targetname,"target").size > 0) + { + var_02[var_01] = var_00[var_03]; + var_01++; + } + } + + var_04 = 0; + for(;;) + { + if(getdvar("chain") == "1") + { + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + if(distance(level.player getorigin(),var_02[var_03].origin) < 1500) + { + } + } + + var_05 = getaiarray("allies"); + for(var_03 = 0;var_03 < var_05.size;var_03++) + { + var_06 = var_05[var_03] animscripts/utility::func_BEE(); + if(isdefined(var_06)) + { + } + } + } + + common_scripts\utility::waitframe(); + } +} + +//Function Number: 2 +debug_enemypos(param_00) +{ + var_01 = getaiarray(); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + if(var_01[var_02] getentitynumber() != param_00) + { + continue; + } + + var_01[var_02] thread debug_enemyposproc(); + break; + } +} + +//Function Number: 3 +debug_stopenemypos(param_00) +{ + var_01 = getaiarray(); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + if(var_01[var_02] getentitynumber() != param_00) + { + continue; + } + + var_01[var_02] notify("stop_drawing_enemy_pos"); + break; + } +} + +//Function Number: 4 +debug_enemyposproc() +{ + self endon("death"); + self endon("stop_drawing_enemy_pos"); + for(;;) + { + wait 0.05; + if(isalive(self.enemy)) + { + } + + if(!animscripts/utility::func_F8C()) + { + continue; + } + + var_00 = animscripts/utility::func_CEE(); + } +} + +//Function Number: 5 +debug_enemyposreplay() +{ + var_00 = getaiarray(); + var_01 = undefined; + for(var_02 = 0;var_02 < var_00.size;var_02++) + { + var_01 = var_00[var_02]; + if(!isalive(var_01)) + { + continue; + } + + if(isdefined(var_01.lastenemysightpos)) + { + } + + if(isdefined(var_01.goodshootpos)) + { + if(var_01 isbadguy()) + { + var_03 = (1,0,0); + } + else + { + var_03 = (0,0,1); + } + + var_04 = var_01.origin + (0,0,54); + if(isdefined(var_01.node)) + { + if(var_01.node.type == "Cover Left") + { + var_05 = 1; + var_04 = anglestoright(var_01.node.angles); + var_04 = var_04 * -32; + var_04 = (var_04[0],var_04[1],64); + var_04 = var_01.node.origin + var_04; + } + else if(var_01.node.type == "Cover Right") + { + var_05 = 1; + var_04 = anglestoright(var_01.node.angles); + var_04 = var_04 * 32; + var_04 = (var_04[0],var_04[1],64); + var_04 = var_01.node.origin + var_04; + } + } + + common_scripts\utility::draw_arrow(var_04,var_01.goodshootpos,var_03); + } + } + + if(1) + { + return; + } + + if(!isalive(var_01)) + { + return; + } + + if(isalive(var_01.enemy)) + { + } + + if(isdefined(var_01.lastenemysightpos)) + { + } + + if(isalive(var_01.goodenemy)) + { + } + + if(!var_01 animscripts/utility::func_F8C()) + { + return; + } + + var_06 = var_01 animscripts/utility::func_CEE(); + if(isdefined(var_01.goodshootpos)) + { + } +} + +//Function Number: 6 +drawenttag(param_00) +{ +} + +//Function Number: 7 +drawtag(param_00,param_01,param_02) +{ + var_03 = self gettagorigin(param_00); + var_04 = self gettagangles(param_00); + drawarrow(var_03,var_04,param_01,param_02); +} + +//Function Number: 8 +draworgforever(param_00) +{ + var_01 = undefined; + var_02 = undefined; + for(;;) + { + if(isdefined(self)) + { + var_01 = self.origin; + var_02 = self.angles; + } + + drawarrow(var_01,var_02,param_00); + wait 0.05; + } +} + +//Function Number: 9 +drawarrowforever(param_00,param_01) +{ + for(;;) + { + drawarrow(param_00,param_01); + wait 0.05; + } +} + +//Function Number: 10 +draworiginforever() +{ + while(isdefined(self)) + { + drawarrow(self.origin,self.angles); + wait 0.05; + } +} + +//Function Number: 11 +drawarrow(param_00,param_01,param_02,param_03) +{ + var_04 = 10; + var_05 = anglestoforward(param_01); + var_06 = var_05 * var_04; + var_07 = var_05 * var_04 * 0.8; + var_08 = anglestoright(param_01); + var_09 = var_08 * var_04 * -0.2; + var_0A = var_08 * var_04 * 0.2; + var_0B = anglestoup(param_01); + var_08 = var_08 * var_04; + var_0B = var_0B * var_04; + var_0C = (0.9,0.2,0.2); + var_0D = (0.2,0.9,0.2); + var_0E = (0.2,0.2,0.9); + if(isdefined(param_02)) + { + var_0C = param_02; + var_0D = param_02; + var_0E = param_02; + } + + if(!isdefined(param_03)) + { + param_03 = 1; + } +} + +//Function Number: 12 +drawforwardforever(param_00,param_01) +{ + if(!isdefined(param_00)) + { + param_00 = 100; + } + + if(!isdefined(param_01)) + { + param_01 = (0,1,0); + } + + for(;;) + { + if(!isdefined(self)) + { + return; + } + + var_02 = anglestoforward(self.angles); + wait 0.05; + } +} + +//Function Number: 13 +drawplayerviewforever() +{ + for(;;) + { + drawarrow(level.player.origin,level.player getplayerangles(),(1,1,1)); + wait 0.05; + } +} + +//Function Number: 14 +drawtagforever(param_00,param_01) +{ + for(;;) + { + if(!isdefined(self)) + { + return; + } + + drawtag(param_00,param_01); + wait 0.05; + } +} + +//Function Number: 15 +drawtagtrails(param_00,param_01) +{ + for(;;) + { + if(!isdefined(self.origin)) + { + break; + } + + drawtag(param_00,param_01,1000); + wait 0.05; + } +} + +//Function Number: 16 +dragtaguntildeath(param_00,param_01) +{ + self endon("death"); + for(;;) + { + if(!isdefined(self)) + { + break; + } + + if(!isdefined(self.origin)) + { + break; + } + + drawtag(param_00,param_01); + wait 0.05; + } +} + +//Function Number: 17 +viewtag(param_00,param_01) +{ + if(param_00 == "ai") + { + var_02 = getaiarray(); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + var_02[var_03] drawtag(param_01); + } + } +} + +//Function Number: 18 +debug_corner() +{ + level.player.ignoreme = 1; + var_00 = getallnodes(); + var_01 = []; + for(var_02 = 0;var_02 < var_00.size;var_02++) + { + if(var_00[var_02].type == "Cover Left") + { + var_01[var_01.size] = var_00[var_02]; + } + + if(var_00[var_02].type == "Cover Right") + { + var_01[var_01.size] = var_00[var_02]; + } + } + + var_03 = getaiarray(); + for(var_02 = 0;var_02 < var_03.size;var_02++) + { + var_03[var_02] delete(); + } + + level.debugspawners = getspawnerarray(); + level.activenodes = []; + level.completednodes = []; + for(var_02 = 0;var_02 < level.debugspawners.size;var_02++) + { + level.debugspawners[var_02].targetname = "blah"; + } + + var_04 = 0; + for(var_02 = 0;var_02 < 30;var_02++) + { + if(var_02 >= var_01.size) + { + break; + } + + var_01[var_02] thread covertest(); + var_04++; + } + + if(var_01.size <= 30) + { + return; + } + + for(;;) + { + level waittill("debug_next_corner"); + if(var_04 >= var_01.size) + { + var_04 = 0; + } + + var_01[var_04] thread covertest(); + var_04++; + } +} + +//Function Number: 19 +covertest() +{ + coversetupanim(); +} + +//Function Number: 20 +coversetupanim() +{ + var_00 = undefined; + var_01 = undefined; + for(;;) + { + for(var_02 = 0;var_02 < level.debugspawners.size;var_02++) + { + wait 0.05; + var_01 = level.debugspawners[var_02]; + var_03 = 0; + for(var_04 = 0;var_04 < level.activenodes.size;var_04++) + { + if(distance(level.activenodes[var_04].origin,self.origin) > 250) + { + continue; + } + + var_03 = 1; + break; + } + + if(var_03) + { + continue; + } + + var_05 = 0; + for(var_04 = 0;var_04 < level.completednodes.size;var_04++) + { + if(level.completednodes[var_04] != self) + { + continue; + } + + var_05 = 1; + break; + } + + if(var_05) + { + continue; + } + + level.activenodes[level.activenodes.size] = self; + var_01.origin = self.origin; + var_01.angles = self.angles; + var_01.count = 1; + var_00 = var_01 stalingradspawn(); + if(maps\_utility::spawn_failed(var_00)) + { + removeactivespawner(self); + continue; + } + + break; + } + + if(isalive(var_00)) + { + break; + } + } + + wait 1; + if(isalive(var_00)) + { + var_00.ignoreme = 1; + var_00.team = "neutral"; + var_00 setgoalpos(var_00.origin); + thread createline(self.origin); + var_00 thread maps\_utility::debugorigin(); + thread createlineconstantly(var_00); + var_00 waittill("death"); + } + + removeactivespawner(self); + level.completednodes[level.completednodes.size] = self; +} + +//Function Number: 21 +removeactivespawner(param_00) +{ + var_01 = []; + for(var_02 = 0;var_02 < level.activenodes.size;var_02++) + { + if(level.activenodes[var_02] == param_00) + { + continue; + } + + var_01[var_01.size] = level.activenodes[var_02]; + } + + level.activenodes = var_01; +} + +//Function Number: 22 +createline(param_00) +{ + wait 0.05; +} + +//Function Number: 23 +createlineconstantly(param_00) +{ + var_01 = undefined; + while(isalive(param_00)) + { + var_01 = param_00.origin; + wait 0.05; + } + + wait 0.05; +} + +//Function Number: 24 +debugmisstime() +{ + self notify("stopdebugmisstime"); + self endon("stopdebugmisstime"); + self endon("death"); + for(;;) + { + if(self.a.misstime <= 0) + { + } + else + { + } + + wait 0.05; + } +} + +//Function Number: 25 +debugmisstimeoff() +{ + self notify("stopdebugmisstime"); +} + +//Function Number: 26 +setemptydvar(param_00,param_01) +{ +} + +//Function Number: 27 +debugjump(param_00) +{ +} + +//Function Number: 28 +debugdvars() +{ +} + +//Function Number: 29 +remove_reflection_objects() +{ +} + +//Function Number: 30 +create_reflection_objects() +{ +} + +//Function Number: 31 +create_reflection_object() +{ +} + +//Function Number: 32 +debug_reflection() +{ +} + +//Function Number: 33 +debug_reflection_buttons() +{ +} + +//Function Number: 34 +remove_fxlighting_object() +{ +} + +//Function Number: 35 +create_fxlighting_object() +{ +} + +//Function Number: 36 +play_fxlighting_fx() +{ + self endon("death"); + for(;;) + { + playfxontag(common_scripts\utility::getfx("lighting_fraction"),self,"tag_origin"); + wait 0.1; + } +} + +//Function Number: 37 +debug_fxlighting() +{ +} + +//Function Number: 38 +debug_fxlighting_buttons() +{ +} + +//Function Number: 39 +showdebugtrace() +{ + var_00 = undefined; + var_01 = undefined; + var_00 = (15.1859,-12.2822,4.071); + var_01 = (947.2,-10918,64.9514); + for(;;) + { + wait 0.05; + var_02 = var_00; + var_03 = var_01; + if(!isdefined(var_00)) + { + var_02 = level.tracestart; + } + + if(!isdefined(var_01)) + { + var_03 = level.player geteye(); + } + + var_04 = bullettrace(var_02,var_03,0,undefined); + } +} + +//Function Number: 40 +hatmodel() +{ +} + +//Function Number: 41 +debug_character_count_old() +{ + var_00 = newhudelem(); + var_00.alignx = "left"; + var_00.aligny = "middle"; + var_00.x = 10; + var_00.y = 100; + var_00.label = &"DEBUG_DRONES"; + var_00.alpha = 0; + var_01 = newhudelem(); + var_01.alignx = "left"; + var_01.aligny = "middle"; + var_01.x = 10; + var_01.y = 115; + var_01.label = &"DEBUG_ALLIES"; + var_01.alpha = 0; + var_02 = newhudelem(); + var_02.alignx = "left"; + var_02.aligny = "middle"; + var_02.x = 10; + var_02.y = 130; + var_02.label = &"DEBUG_AXIS"; + var_02.alpha = 0; + var_03 = newhudelem(); + var_03.alignx = "left"; + var_03.aligny = "middle"; + var_03.x = 10; + var_03.y = 145; + var_03.label = &"DEBUG_VEHICLES"; + var_03.alpha = 0; + var_04 = newhudelem(); + var_04.alignx = "left"; + var_04.aligny = "middle"; + var_04.x = 10; + var_04.y = 160; + var_04.label = &"DEBUG_TOTAL"; + var_04.alpha = 0; + var_05 = "off"; + for(;;) + { + var_06 = getdvar("debug_character_count"); + if(var_06 == "off") + { + if(var_06 != var_05) + { + var_00.alpha = 0; + var_01.alpha = 0; + var_02.alpha = 0; + var_03.alpha = 0; + var_04.alpha = 0; + var_05 = var_06; + } + + wait 0.25; + continue; + } + else if(var_06 != var_05) + { + var_00.alpha = 1; + var_01.alpha = 1; + var_02.alpha = 1; + var_03.alpha = 1; + var_04.alpha = 1; + var_05 = var_06; + } + + var_07 = getentarray("drone","targetname").size; + var_00 setvalue(var_07); + var_08 = getaiarray("allies").size; + var_01 setvalue(var_08); + var_09 = getaiarray("bad_guys").size; + var_02 setvalue(var_09); + var_03 setvalue(getentarray("script_vehicle","classname").size); + var_04 setvalue(var_07 + var_08 + var_09); + wait 0.25; + } +} + +//Function Number: 42 +nuke() +{ + if(!self.damageshield) + { + self kill((0,0,-500),level.player,level.player); + } +} + +//Function Number: 43 +debug_nuke() +{ +} + +//Function Number: 44 +debug_misstime() +{ +} + +//Function Number: 45 +camera() +{ + wait 0.05; + var_00 = getentarray("camera","targetname"); + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + var_02 = getent(var_00[var_01].target,"targetname"); + var_00[var_01].origin2 = var_02.origin; + var_00[var_01].angles = vectortoangles(var_02.origin - var_00[var_01].origin); + } + + for(;;) + { + var_03 = getaiarray("axis"); + if(!var_03.size) + { + freeplayer(); + wait 0.5; + continue; + } + + var_04 = []; + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + for(var_05 = 0;var_05 < var_03.size;var_05++) + { + if(distance(var_00[var_01].origin,var_03[var_05].origin) > 256) + { + continue; + } + + var_04[var_04.size] = var_00[var_01]; + break; + } + } + + if(!var_04.size) + { + freeplayer(); + wait 0.5; + continue; + } + + var_06 = []; + for(var_01 = 0;var_01 < var_04.size;var_01++) + { + var_07 = var_04[var_01]; + var_08 = var_07.origin2; + var_09 = var_07.origin; + var_0A = vectortoangles((var_09[0],var_09[1],var_09[2]) - (var_08[0],var_08[1],var_08[2])); + var_0B = (0,var_0A[1],0); + var_0C = anglestoforward(var_0B); + var_0A = vectornormalize(var_09 - level.player.origin); + var_0D = vectordot(var_0C,var_0A); + if(var_0D < 0.85) + { + continue; + } + + var_06[var_06.size] = var_07; + } + + if(!var_06.size) + { + freeplayer(); + wait 0.5; + continue; + } + + var_0E = distance(level.player.origin,var_06[0].origin); + var_0F = var_06[0]; + for(var_01 = 1;var_01 < var_06.size;var_01++) + { + var_10 = distance(level.player.origin,var_06[var_01].origin); + if(var_10 > var_0E) + { + continue; + } + + var_0F = var_06[var_01]; + var_0E = var_10; + } + + setplayertocamera(var_0F); + wait 3; + } +} + +//Function Number: 46 +freeplayer() +{ + setdvar("cl_freemove","0"); +} + +//Function Number: 47 +setplayertocamera(param_00) +{ + setdvar("cl_freemove","2"); +} + +//Function Number: 48 +anglescheck() +{ + for(;;) + { + if(getdvar("angles","0") == "1") + { + setdvar("angles","0"); + } + + wait 1; + } +} + +//Function Number: 49 +dolly() +{ + if(!isdefined(level.dollytime)) + { + level.dollytime = 5; + } + + setdvar("dolly",""); + thread dollystart(); + thread dollyend(); + thread dollygo(); +} + +//Function Number: 50 +dollystart() +{ + for(;;) + { + if(getdvar("dolly") == "start") + { + level.dollystart = level.player.origin; + setdvar("dolly",""); + } + + wait 1; + } +} + +//Function Number: 51 +dollyend() +{ + for(;;) + { + if(getdvar("dolly") == "end") + { + level.dollyend = level.player.origin; + setdvar("dolly",""); + } + + wait 1; + } +} + +//Function Number: 52 +dollygo() +{ + for(;;) + { + wait 1; + if(getdvar("dolly") == "go") + { + setdvar("dolly",""); + if(!isdefined(level.dollystart)) + { + continue; + } + + if(!isdefined(level.dollyend)) + { + continue; + } + + var_00 = spawn("script_origin",(0,0,0)); + var_00.origin = level.dollystart; + level.player setorigin(var_00.origin); + level.player linkto(var_00); + var_00 moveto(level.dollyend,level.dollytime); + wait level.dollytime; + var_00 delete(); + } + } +} + +//Function Number: 53 +deathspawnerpreview() +{ + waittillframeend; + for(var_00 = 0;var_00 < 50;var_00++) + { + if(!isdefined(level.deathspawnerents[var_00])) + { + continue; + } + + var_01 = level.deathspawnerents[var_00]; + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + var_03 = var_01[var_02]; + if(isdefined(var_03.truecount)) + { + continue; + } + } + } +} + +//Function Number: 54 +lastsightposwatch() +{ +} + +//Function Number: 55 +watchminimap() +{ + precacheitem("defaultweapon"); + for(;;) + { + updateminimapsetting(); + wait 0.25; + } +} + +//Function Number: 56 +updateminimapsetting() +{ + var_00 = getdvarfloat("scr_requiredMapAspectRatio",1); + if(!isdefined(level.minimapcornertargetname)) + { + setdvar("scr_minimap_corner_targetname","minimap_corner"); + level.minimapcornertargetname = "minimap_corner"; + } + + if(!isdefined(level.minimapheight)) + { + setdvar("scr_minimap_height","0"); + level.minimapheight = 0; + } + + var_01 = getdvarfloat("scr_minimap_height"); + var_02 = getdvar("scr_minimap_corner_targetname"); + if(var_01 != level.minimapheight || var_02 != level.minimapcornertargetname) + { + if(isdefined(level.minimaporigin)) + { + level.minimapplayer unlink(); + level.minimaporigin delete(); + level notify("end_draw_map_bounds"); + } + + if(var_01 > 0) + { + level.minimapheight = var_01; + level.minimapcornertargetname = var_02; + var_03 = level.player; + var_04 = getentarray(var_02,"targetname"); + if(var_04.size == 2) + { + var_05 = var_04[0].origin + var_04[1].origin; + var_05 = (var_05[0] * 0.5,var_05[1] * 0.5,var_05[2] * 0.5); + var_06 = (var_04[0].origin[0],var_04[0].origin[1],var_05[2]); + var_07 = (var_04[0].origin[0],var_04[0].origin[1],var_05[2]); + if(var_04[1].origin[0] > var_04[0].origin[0]) + { + var_06 = (var_04[1].origin[0],var_06[1],var_06[2]); + } + else + { + var_07 = (var_04[1].origin[0],var_07[1],var_07[2]); + } + + if(var_04[1].origin[1] > var_04[0].origin[1]) + { + var_06 = (var_06[0],var_04[1].origin[1],var_06[2]); + } + else + { + var_07 = (var_07[0],var_04[1].origin[1],var_07[2]); + } + + var_08 = var_06 - var_05; + var_05 = (var_05[0],var_05[1],var_05[2] + var_01); + var_09 = spawn("script_origin",var_03.origin); + var_0A = (cos(getnorthyaw()),sin(getnorthyaw()),0); + var_0B = (var_0A[1],0 - var_0A[0],0); + var_0C = vectordot(var_0A,var_08); + if(var_0C < 0) + { + var_0C = 0 - var_0C; + } + + var_0D = vectordot(var_0B,var_08); + if(var_0D < 0) + { + var_0D = 0 - var_0D; + } + + if(var_00 > 0) + { + var_0E = var_0D / var_0C; + if(var_0E < var_00) + { + var_0F = var_00 / var_0E; + var_0D = var_0D * var_0F; + var_10 = vecscale(var_0B,vectordot(var_0B,var_06 - var_05) * var_0F - 1); + var_07 = var_07 - var_10; + var_06 = var_06 + var_10; + } + else + { + var_0F = var_10 / var_02; + var_0D = var_0D * var_10; + var_10 = vecscale(var_0B,vectordot(var_0B,var_07 - var_06) * var_10 - 1); + var_07 = var_07 - var_10; + var_06 = var_06 + var_10; + } + } + + if(level.console) + { + var_11 = 1.777778; + var_12 = 2 * atan(var_0D * 0.8 / var_01); + var_13 = 2 * atan(var_0C * var_11 * 0.8 / var_01); + } + else + { + var_11 = 1.333333; + var_12 = 2 * atan(var_12 * 1.05 / var_03); + var_13 = 2 * atan(var_0D * var_12 * 1.05 / var_02); + } + + if(var_12 > var_13) + { + var_14 = var_12; + } + else + { + var_14 = var_14; + } + + var_15 = var_01 - 1000; + if(var_15 < 16) + { + var_15 = 16; + } + + if(var_15 > 10000) + { + var_15 = 10000; + } + + var_03 playerlinktoabsolute(var_09); + var_09.origin = var_05 + (0,0,-62); + var_09.angles = (90,getnorthyaw(),0); + var_03 giveweapon("defaultweapon"); + setsaveddvar("cg_fov",var_14); + level.minimapplayer = var_03; + level.minimaporigin = var_09; + thread drawminimapbounds(var_05,var_07,var_06); + return; + } + + return; + } + } +} + +//Function Number: 57 +getchains() +{ + var_00 = []; + var_00 = getentarray("minimap_line","script_noteworthy"); + var_01 = []; + for(var_02 = 0;var_02 < var_00.size;var_02++) + { + var_01[var_02] = var_00[var_02] getchain(); + } + + return var_01; +} + +//Function Number: 58 +getchain() +{ + var_00 = []; + var_01 = self; + while(isdefined(var_01)) + { + var_00[var_00.size] = var_01; + if(!isdefined(var_01) || !isdefined(var_01.target)) + { + break; + } + + var_01 = getent(var_01.target,"targetname"); + if(isdefined(var_01) && var_01 == var_00[0]) + { + var_00[var_00.size] = var_01; + break; + } + } + + var_02 = []; + for(var_03 = 0;var_03 < var_00.size;var_03++) + { + var_02[var_03] = var_00[var_03].origin; + } + + return var_02; +} + +//Function Number: 59 +vecscale(param_00,param_01) +{ + return (param_00[0] * param_01,param_00[1] * param_01,param_00[2] * param_01); +} + +//Function Number: 60 +drawminimapbounds(param_00,param_01,param_02) +{ + level notify("end_draw_map_bounds"); + level endon("end_draw_map_bounds"); + var_03 = param_00[2] - param_02[2]; + var_04 = length(param_01 - param_02); + var_05 = param_01 - param_00; + var_05 = vectornormalize((var_05[0],var_05[1],0)); + param_01 = param_01 + vecscale(var_05,var_04 * 1 / 800 * 0); + var_06 = param_02 - param_00; + var_06 = vectornormalize((var_06[0],var_06[1],0)); + param_02 = param_02 + vecscale(var_06,var_04 * 1 / 800 * 0); + var_07 = (cos(getnorthyaw()),sin(getnorthyaw()),0); + var_08 = param_02 - param_01; + var_09 = vecscale(var_07,vectordot(var_08,var_07)); + var_0A = vecscale(var_07,abs(vectordot(var_08,var_07))); + var_0B = param_01; + var_0C = param_01 + var_09; + var_0D = param_02; + var_0E = param_02 - var_09; + var_0F = vecscale(param_01 + param_02,0.5) + vecscale(var_0A,0.51); + var_10 = var_04 * 0.003; + var_11 = getchains(); + for(;;) + { + common_scripts\utility::array_levelthread(var_11,::common_scripts\utility::plot_points); + wait 0.05; + } +} + +//Function Number: 61 +islookingatorigin(param_00) +{ + var_01 = vectornormalize(param_00 - self getshootatpos()); + var_02 = vectornormalize(param_00 - (0,0,24) - self getshootatpos()); + var_03 = vectordot(var_01,var_02); + var_04 = anglestoforward(self getplayerangles()); + var_05 = vectordot(var_04,var_01); + if(var_05 > var_03) + { + return 1; + } + + return 0; +} + +//Function Number: 62 +debug_colornodes() +{ + wait 0.05; + var_00 = getaiarray(); + var_01 = []; + for(var_02 = 0;var_02 < var_01.size;var_02++ = var_7B["neutral"]) + { + var_03 = var_01[var_02]; + if(!isdefined(var_03.currentcolorcode)) + { + continue; + } + + var_7B[var_03.team][var_03.currentcolorcode] = 1; + var_04 = (1,1,1); + if(isdefined(var_03.script_forcecolor)) + { + var_04 = level.color_debug[var_03.script_forcecolor]; + } + + if(var_03.team == "axis") + { + continue; + } + + var_03 try_to_draw_line_to_node(); + } + + draw_colornodes(var_7B,"allies"); + draw_colornodes(var_7B,"axis"); +} + +//Function Number: 63 +draw_colornodes(param_00,param_01) +{ + var_02 = getarraykeys(param_00[param_01]); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + var_04 = (1,1,1); + var_04 = level.color_debug[getsubstr(var_02[var_03],0,1)]; + if(isdefined(level.colornodes_debug_array[param_01][var_02[var_03]])) + { + var_05 = level.colornodes_debug_array[param_01][var_02[var_03]]; + for(var_06 = 0;var_06 < var_05.size;var_06++) + { + } + } + } +} + +//Function Number: 64 +get_team_substr() +{ + if(self.team == "allies") + { + if(!isdefined(self.node.script_color_allies)) + { + return; + } + + return self.node.script_color_allies; + } + + if(self.team == "axis") + { + if(!isdefined(self.node.script_color_axis)) + { + return; + } + + return self.node.script_color_axis; + } +} + +//Function Number: 65 +try_to_draw_line_to_node() +{ + if(!isdefined(self.node)) + { + return; + } + + if(!isdefined(self.script_forcecolor)) + { + return; + } + + var_00 = get_team_substr(); + if(!isdefined(var_00)) + { + return; + } + + if(!issubstr(var_00,self.script_forcecolor)) + { + } +} + +//Function Number: 66 +fogcheck() +{ + if(getdvar("depth_close") == "") + { + setdvar("depth_close","0"); + } + + if(getdvar("depth_far") == "") + { + setdvar("depth_far","1500"); + } + + var_00 = getdvarint("depth_close"); + var_01 = getdvarint("depth_far"); + setexpfog(var_00,var_01,1,1,1,1,0); +} + +//Function Number: 67 +debugthreat() +{ + level.last_threat_debug = gettime(); + thread debugthreatcalc(); +} + +//Function Number: 68 +debugthreatcalc() +{ +} + +//Function Number: 69 +displaythreat(param_00,param_01) +{ + if(self.team == param_00.team) + { + return; + } + + var_02 = 0; + var_02 = var_02 + self.threatbias; + var_03 = 0; + var_03 = var_03 + param_00.threatbias; + var_04 = undefined; + if(isdefined(param_01)) + { + var_04 = self getthreatbiasgroup(); + if(isdefined(var_04)) + { + var_03 = var_03 + getthreatbias(param_01,var_04); + var_02 = var_02 + getthreatbias(var_04,param_01); + } + } + + if(param_00.ignoreme || var_03 < -900000) + { + var_03 = "Ignore"; + } + + if(self.ignoreme || var_02 < -900000) + { + var_02 = "Ignore"; + } + + var_05 = 20; + var_06 = (1,0.5,0.2); + var_07 = (0.2,0.5,1); + var_08 = !isplayer(self) && self.pacifist; + for(var_09 = 0;var_09 <= var_05;var_09++) + { + if(isdefined(param_01)) + { + } + + if(isdefined(var_04)) + { + } + + if(var_08) + { + } + + wait 0.05; + } +} + +//Function Number: 70 +debugcolorfriendlies() +{ + level.debug_color_friendlies = []; + level.debug_color_huds = []; + for(;;) + { + level waittill("updated_color_friendlies"); + draw_color_friendlies(); + } +} + +//Function Number: 71 +draw_color_friendlies() +{ + level endon("updated_color_friendlies"); + var_00 = getarraykeys(level.debug_color_friendlies); + var_01 = []; + var_02 = []; + var_03 = maps\_utility::get_script_palette(); + var_04 = 0; + while(var_04 < var_7B.size) + { + var_02[var_7B[var_04]] = 0; + var_04++ = var_7B[var_7B.size]; + } + + var_04 = 0; + while(var_04 < var_01.size) + { + var_05 = level.debug_color_friendlies[var_01[var_04]]; + var_02[var_05]++ = "p"; + var_04++ = var_7B[var_7B.size]; + } + + for(var_04 = 0;var_04 < level.debug_color_huds.size;var_04++ = "b") + { + level.debug_color_huds[var_04] destroy(); + } + + level.debug_color_huds = []; + var_06 = 15; + var_07 = 365; + var_08 = 25; + var_09 = 25; + for(var_04 = 0;var_04 < var_7B.size;var_04++ = "c") + { + if(var_02[var_7B[var_04]] <= 0) + { + continue; + } + + var_0A = 0; + while(var_0A < var_02[var_7B[var_04]]) + { + var_0B = newhudelem(); + var_0B.x = var_06 + 25 * var_0A; + var_0B.y = var_07; + var_0B setshader("white",16,16); + var_0B.alignx = "left"; + var_0B.aligny = "bottom"; + var_0B.alpha = 1; + var_0B.color = var_03[var_7B[var_04]]; + level.debug_color_huds[level.debug_color_huds.size] = var_0B; + var_0A++ = var_7B[var_7B.size]; + } + + var_07 = var_07 + var_09; + } +} + +//Function Number: 72 +playernode() +{ + for(;;) + { + if(isdefined(level.player.node)) + { + } + + wait 0.05; + } +} + +//Function Number: 73 +drawusers() +{ + if(isalive(self.color_user)) + { + } +} + +//Function Number: 74 +debuggoalpos() +{ + for(;;) + { + var_00 = getaiarray(); + common_scripts\utility::array_thread(var_00,::view_goal_pos); + wait 0.05; + } +} + +//Function Number: 75 +view_goal_pos() +{ + if(!isdefined(self.goalpos)) + { + } +} + +//Function Number: 76 +colordebug() +{ + wait 0.5; + var_00 = []; + for(;;) + { + var_01 = 0; + while(var_01 < var_7B.size) + { + var_02 = level.currentcolorforced["allies"][var_7B[var_01]]; + if(isdefined(var_02)) + { + draw_colored_nodes(var_02); + } + + var_01++ = var_7B[var_7B.size]; + } + + wait 0.05; + } +} + +//Function Number: 77 +draw_colored_nodes(param_00) +{ + var_01 = level.arrays_of_colorcoded_nodes["allies"][param_00]; + common_scripts\utility::array_thread(var_01,::drawusers); +} + +//Function Number: 78 +init_animsounds() +{ + level.animsounds = []; + level.animsound_aliases = []; + waittillframeend; + waittillframeend; + var_00 = getarraykeys(level.scr_notetrack); + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + init_notetracks_for_animname(var_00[var_01]); + } + + var_00 = getarraykeys(level.scr_animsound); + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + init_animsounds_for_animname(var_00[var_01]); + } +} + +//Function Number: 79 +init_notetracks_for_animname(param_00) +{ + foreach(var_0A, var_02 in level.scr_notetrack[param_00]) + { + foreach(var_09, var_04 in var_02) + { + foreach(var_06 in var_04) + { + var_07 = var_06["sound"]; + if(!isdefined(var_07)) + { + continue; + } + + level.animsound_aliases[param_00][var_0A][var_09]["soundalias"] = var_07; + if(isdefined(var_06["created_by_animSound"])) + { + level.animsound_aliases[param_00][var_0A][var_09]["created_by_animSound"] = 1; + } + } + } + } +} + +//Function Number: 80 +init_animsounds_for_animname(param_00) +{ + var_01 = getarraykeys(level.scr_animsound[param_00]); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + var_03 = var_01[var_02]; + var_04 = level.scr_animsound[param_00][var_03]; + level.animsound_aliases[param_00][var_03]["#" + var_03]["soundalias"] = var_04; + level.animsound_aliases[param_00][var_03]["#" + var_03]["created_by_animSound"] = 1; + } +} + +//Function Number: 81 +add_hud_line(param_00,param_01,param_02) +{ + var_03 = newhudelem(); + var_03.alignx = "left"; + var_03.aligny = "middle"; + var_03.x = param_00; + var_03.y = param_01; + var_03.alpha = 1; + var_03.fontscale = 1; + var_03.label = param_02; + level.animsound_hud_extralines[level.animsound_hud_extralines.size] = var_03; + return var_03; +} + +//Function Number: 82 +debug_animsound() +{ +} + +//Function Number: 83 +draw_animsounds_in_hud() +{ + var_00 = level.animsound_tagged; + var_01 = var_00.animsounds; + var_02 = "generic"; + if(isdefined(var_00.animname)) + { + var_02 = var_00.animname; + } + + level.animsound_hud_animname.label = "Actor: " + var_02; + if(level.player buttonpressed("f12")) + { + if(!level.animsound_locked_pressed) + { + level.animsound_locked = !level.animsound_locked; + level.animsound_locked_pressed = 1; + } + } + else + { + level.animsound_locked_pressed = 0; + } + + if(level.player buttonpressed("UPARROW")) + { + if(level.animsound_input != "up") + { + level.animsound_selected--; + } + + level.animsound_input = "up"; + } + else if(level.player buttonpressed("DOWNARROW")) + { + if(level.animsound_input != "down") + { + level.animsound_selected++; + } + + level.animsound_input = "down"; + } + else + { + level.animsound_input = "none"; + } + + for(var_03 = 0;var_03 < level.animsound_hudlimit;var_03++) + { + var_04 = level.animsound_hud[var_03]; + var_04.label = ""; + var_04.color = (1,1,1); + var_04 = level.animsound_hud_timer[var_03]; + var_04.label = ""; + var_04.color = (1,1,1); + var_04 = level.animsound_hud_alias[var_03]; + var_04.label = ""; + var_04.color = (1,1,1); + } + + var_05 = getarraykeys(var_01); + var_06 = -1; + for(var_03 = 0;var_03 < var_05.size;var_03++) + { + if(var_05[var_03] > var_06) + { + var_06 = var_05[var_03]; + } + } + + if(var_06 == -1) + { + return; + } + + if(level.animsound_selected > var_06) + { + level.animsound_selected = var_06; + } + + if(level.animsound_selected < 0) + { + level.animsound_selected = 0; + } + + for(;;) + { + if(isdefined(var_01[level.animsound_selected])) + { + break; + } + + level.animsound_selected--; + if(level.animsound_selected < 0) + { + level.animsound_selected = var_06; + } + } + + level.animsound_hud_anime.label = "Anim: " + var_01[level.animsound_selected].anime; + level.animsound_hud[level.animsound_selected].color = (1,1,0); + level.animsound_hud_timer[level.animsound_selected].color = (1,1,0); + level.animsound_hud_alias[level.animsound_selected].color = (1,1,0); + var_07 = gettime(); + for(var_03 = 0;var_03 < var_05.size;var_03++) + { + var_08 = var_05[var_03]; + var_09 = var_01[var_08]; + var_04 = level.animsound_hud[var_08]; + var_0A = get_alias_from_stored(var_09); + var_04.label = var_08 + 1 + ". " + var_09.notetrack; + var_04 = level.animsound_hud_timer[var_08]; + var_04.label = int(var_07 - var_09.end_time - -5536 * 0.001); + if(isdefined(var_0A)) + { + var_04 = level.animsound_hud_alias[var_08]; + var_04.label = var_0A; + if(!is_from_animsound(var_09.animname,var_09.anime,var_09.notetrack)) + { + var_04.color = (0.7,0.7,0.7); + } + } + } + + if(level.player buttonpressed("del")) + { + var_09 = var_01[level.animsound_selected]; + var_0A = get_alias_from_stored(var_09); + if(!isdefined(var_0A)) + { + return; + } + + if(!is_from_animsound(var_09.animname,var_09.anime,var_09.notetrack)) + { + return; + } + + level.animsound_aliases[var_09.animname][var_09.anime][var_09.notetrack] = undefined; + debug_animsoundsave(); + } +} + +//Function Number: 84 +get_alias_from_stored(param_00) +{ + if(!isdefined(level.animsound_aliases[param_00.animname])) + { + return; + } + + if(!isdefined(level.animsound_aliases[param_00.animname][param_00.anime])) + { + return; + } + + if(!isdefined(level.animsound_aliases[param_00.animname][param_00.anime][param_00.notetrack])) + { + return; + } + + return level.animsound_aliases[param_00.animname][param_00.anime][param_00.notetrack]["soundalias"]; +} + +//Function Number: 85 +is_from_animsound(param_00,param_01,param_02) +{ + return isdefined(level.animsound_aliases[param_00][param_01][param_02]["created_by_animSound"]); +} + +//Function Number: 86 +display_animsound() +{ + if(distance(level.player.origin,self.origin) > 1500) + { + return; + } + + level.animsounds_thisframe[level.animsounds_thisframe.size] = self; +} + +//Function Number: 87 +debug_animsoundtag(param_00) +{ +} + +//Function Number: 88 +debug_animsoundtagselected() +{ +} + +//Function Number: 89 +tag_sound(param_00,param_01) +{ + if(!isdefined(level.animsound_tagged)) + { + return; + } + + if(!isdefined(level.animsound_tagged.animsounds[param_01])) + { + return; + } + + var_02 = level.animsound_tagged.animsounds[param_01]; + var_03 = get_alias_from_stored(var_02); + if(!isdefined(var_03) || is_from_animsound(var_02.animname,var_02.anime,var_02.notetrack)) + { + level.animsound_aliases[var_02.animname][var_02.anime][var_02.notetrack]["soundalias"] = param_00; + level.animsound_aliases[var_02.animname][var_02.anime][var_02.notetrack]["created_by_animSound"] = 1; + debug_animsoundsave(); + } +} + +//Function Number: 90 +debug_animsoundsave() +{ +} + +//Function Number: 91 +print_aliases_to_file(param_00) +{ + var_01 = " "; + var_02 = getarraykeys(level.animsound_aliases); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + var_04 = getarraykeys(level.animsound_aliases[var_02[var_03]]); + for(var_05 = 0;var_05 < var_04.size;var_05++) + { + var_06 = var_04[var_05]; + var_07 = getarraykeys(level.animsound_aliases[var_02[var_03]][var_06]); + for(var_08 = 0;var_08 < var_07.size;var_08++) + { + var_09 = var_07[var_08]; + if(!is_from_animsound(var_02[var_03],var_06,var_09)) + { + continue; + } + + var_0A = level.animsound_aliases[var_02[var_03]][var_06][var_09]["soundalias"]; + if(var_09 == "#" + var_06) + { + continue; + } + } + } + } +} + +//Function Number: 92 +tostr(param_00) +{ + var_01 = "\"; + for(var_02 = 0;var_02 < param_00.size;var_02++) + { + if(param_00[var_02] == "\") + { + var_01 = var_01 + "\\"; + var_01 = var_01 + "\"; + continue; + } + + var_01 = var_01 + param_00[var_02]; + } + + var_01 = var_01 + "\"; + return var_01; +} + +//Function Number: 93 +linedraw(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if(!isdefined(param_02)) + { + param_02 = (1,1,1); + } + + if(isdefined(param_05)) + { + param_05 = param_05 * 20; + for(var_06 = 0;var_06 < param_05;var_06++) + { + wait 0.05; + } + + return; + } + + wait 0.05; +} + +//Function Number: 94 +print3ddraw(param_00,param_01,param_02) +{ + wait 0.05; +} + +//Function Number: 95 +complete_me() +{ + if(getdvar("credits_active") == "1") + { + wait 7; + setdvar("credits_active","0"); + maps\_endmission::credits_end(); + return; + } + + wait 7; + maps\_utility::nextmission(); +} + +//Function Number: 96 +find_new_chase_target(param_00) +{ +} + +//Function Number: 97 +chasecam(param_00) +{ + if(!isdefined(level.chase_cam_last_num)) + { + level.chase_cam_last_num = -1; + } + + if(level.chase_cam_last_num == param_00) + { + return; + } + + find_new_chase_target(param_00); + if(!isdefined(level.chase_cam_target)) + { + return; + } + + level.chase_cam_last_num = param_00; + if(!isdefined(level.chase_cam_ent)) + { + level.chase_cam_ent = level.chase_cam_target common_scripts\utility::spawn_tag_origin(); + } + + thread chasecam_onent(level.chase_cam_target); +} + +//Function Number: 98 +chasecam_onent(param_00) +{ + level notify("new_chasecam"); + level endon("new_chasecam"); + param_00 endon("death"); + level.player unlink(); + level.player playerlinktoblend(level.chase_cam_ent,"tag_origin",2,0.5,0.5); + wait 2; + level.player playerlinktodelta(level.chase_cam_ent,"tag_origin",1,180,180,180,180); + for(;;) + { + wait 0.2; + if(!isdefined(level.chase_cam_target)) + { + return; + } + + var_01 = level.chase_cam_target.origin; + var_02 = level.chase_cam_target.angles; + var_03 = anglestoforward(var_02); + var_03 = var_03 * 200; + var_01 = var_01 + var_03; + var_02 = level.player getplayerangles(); + var_03 = anglestoforward(var_02); + var_03 = var_03 * -200; + level.chase_cam_ent moveto(var_01 + var_03,0.2); + } +} + +//Function Number: 99 +viewfx() +{ + foreach(var_01 in level.createfxent) + { + if(isdefined(var_01.looper)) + { + } + } +} + +//Function Number: 100 +add_key(param_00,param_01) +{ +} + +//Function Number: 101 +print_vehicle_info(param_00) +{ + if(!isdefined(level.vnum)) + { + level.vnum = 9500; + } + + level.vnum++; + var_01 = "bridge_helpers"; + add_key("origin",self.origin[0] + " " + self.origin[1] + " " + self.origin[2]); + add_key("angles",self.angles[0] + " " + self.angles[1] + " " + self.angles[2]); + add_key("targetname","helper_model"); + add_key("model",self.model); + add_key("classname","script_model"); + add_key("spawnflags","4"); + add_key("_color","0.443137 0.443137 1.000000"); + if(isdefined(param_00)) + { + add_key("script_noteworthy",param_00); + } +} + +//Function Number: 102 +draw_dot_for_ent(param_00) +{ +} + +//Function Number: 103 +draw_dot_for_guy() +{ + var_00 = level.player getplayerangles(); + var_01 = anglestoforward(var_00); + var_02 = level.player geteye(); + var_03 = self geteye(); + var_04 = vectortoangles(var_03 - var_02); + var_05 = anglestoforward(var_04); + var_06 = vectordot(var_05,var_01); +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_detonategrenades.gsc b/MW3/PC/SP/maps/_detonategrenades.gsc new file mode 100644 index 0000000..a0ea462 --- /dev/null +++ b/MW3/PC/SP/maps/_detonategrenades.gsc @@ -0,0 +1,620 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_detonategrenades.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 30 + * Decompile Time: 459 ms + * Timestamp: 10/27/2023 2:22:25 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level._effect["c4_light_blink"] = loadfx("misc/light_c4_blink"); + level._effect["claymore_laser"] = loadfx("misc/claymore_laser"); + for(var_00 = 0;var_00 < level.players.size;var_00++) + { + level.players[var_00] thread watchgrenadeusage(); + } +} + +//Function Number: 2 +watchgrenadeusage() +{ + level.c4explodethisframe = 0; + self endon("death"); + self.c4array = []; + self.throwinggrenade = 0; + thread watchc4(); + thread watchc4detonation(); + thread watchc4altdetonation(); + thread watchclaymores(); + thread begin_semtex_grenade_tracking(); + for(;;) + { + self waittill("grenade_pullback",var_00); + self.throwinggrenade = 1; + if(var_00 == "c4") + { + beginc4tracking(); + continue; + } + + if(var_00 == "smoke_grenade_american") + { + beginsmokegrenadetracking(); + continue; + } + + begingrenadetracking(); + } +} + +//Function Number: 3 +beginsmokegrenadetracking() +{ + self waittill("grenade_fire",var_00,var_01); + if(!isdefined(level.smokegrenades)) + { + level.smokegrenades = 0; + } + + var_00 thread smoke_grenade_death(); +} + +//Function Number: 4 +begin_semtex_grenade_tracking() +{ + for(;;) + { + self waittill("grenade_fire",var_00,var_01); + if(var_01 == "semtex_grenade") + { + thread track_semtex_grenade(var_00); + var_00 thread semtex_sticky_handle(self); + } + } +} + +//Function Number: 5 +track_semtex_grenade(param_00) +{ + self.throwinggrenade = 0; + if(!isdefined(level.thrown_semtex_grenades)) + { + level.thrown_semtex_grenades = 1; + } + else + { + level.thrown_semtex_grenades++; + } + + param_00 waittill("death"); + waittillframeend; + level.thrown_semtex_grenades--; +} + +//Function Number: 6 +semtex_sticky_handle(param_00) +{ + self waittill("missile_stuck",var_01); + if(!isdefined(var_01)) + { + return; + } + + if(var_01.code_classname != "script_vehicle") + { + return; + } + + var_01.has_semtex_on_it = 1; + self waittill("explode"); + if(!isdefined(var_01) || !isalive(var_01)) + { + return; + } + + if(var_01 maps\_vehicle::is_godmode() || var_01 maps\_vehicle::attacker_isonmyteam(param_00)) + { + var_01.has_semtex_on_it = undefined; + return; + } + + var_01 kill(var_01.origin,param_00); +} + +//Function Number: 7 +smoke_grenade_death() +{ + level.smokegrenades++; + wait 50; + level.smokegrenades--; +} + +//Function Number: 8 +begingrenadetracking() +{ + self endon("death"); + self waittill("grenade_fire",var_00,var_01); + if(var_01 == "fraggrenade") + { + var_00 thread maps\_utility::grenade_earthquake(); + } + else if(var_01 == "ninebang_grenade") + { + self.threw_ninebang = 1; + } + + self.throwinggrenade = 0; +} + +//Function Number: 9 +beginc4tracking() +{ + self endon("death"); + common_scripts\utility::waittill_any("grenade_fire","weapon_change"); + self.throwinggrenade = 0; +} + +//Function Number: 10 +watchc4() +{ + for(;;) + { + self waittill("grenade_fire",var_00,var_01); + if(var_01 == "c4") + { + if(!self.c4array.size) + { + thread watchc4altdetonate(); + } + + self.c4array[self.c4array.size] = var_00; + var_00.owner = self; + var_00 thread c4damage(); + thread c4death(var_00); + var_00 thread playc4effects(); + } + } +} + +//Function Number: 11 +c4death(param_00) +{ + param_00 waittill("death"); + self.c4array = maps\_utility::array_remove_nokeys(self.c4array,param_00); +} + +//Function Number: 12 +watchclaymores() +{ + self endon("spawned_player"); + self endon("disconnect"); + for(;;) + { + self waittill("grenade_fire",var_00,var_01); + if(var_01 == "claymore" || var_01 == "claymore_mp") + { + var_00.owner = self; + var_00 thread c4damage(); + var_00 thread claymoredetonation(); + var_00 thread playclaymoreeffects(); + var_00 thread claymoremakesentient(self.team); + } + } +} + +//Function Number: 13 +claymoremakesentient(param_00) +{ + self endon("death"); + wait 1; + if(isdefined(level.claymoresentientfunc)) + { + self thread [[ level.claymoresentientfunc ]](param_00); + return; + } + + self makeentitysentient(param_00,1); + self.attackeraccuracy = 2; + self.maxvisibledist = 750; + self.threatbias = -1000; +} + +//Function Number: 14 +claymoredetonation() +{ + self endon("death"); + self waittill("missile_stuck"); + var_00 = 192; + if(isdefined(self.detonateradius)) + { + var_00 = self.detonateradius; + } + + var_01 = spawn("trigger_radius",self.origin + (0,0,0 - var_00),9,var_00,var_00 * 2); + thread deleteondeath(var_01); + if(!isdefined(level.claymores)) + { + level.claymores = []; + } + + level.claymores = maps\_utility::array_add(level.claymores,self); + if(!maps\_utility::is_specialop() && level.claymores.size > 15) + { + level.claymores[0] delete(); + } + + for(;;) + { + var_01 waittill("trigger",var_02); + if(isdefined(self.owner) && var_02 == self.owner) + { + continue; + } + + if(isplayer(var_02)) + { + continue; + } + + if(var_02 damageconetrace(self.origin,self) > 0) + { + self playsound("claymore_activated_SP"); + wait 0.4; + if(isdefined(self.owner)) + { + self detonate(self.owner); + } + else + { + self detonate(undefined); + } + + return; + } + } +} + +//Function Number: 15 +deleteondeath(param_00) +{ + self waittill("death"); + level.claymores = maps\_utility::array_remove_nokeys(level.claymores,self); + wait 0.05; + if(isdefined(param_00)) + { + param_00 delete(); + } +} + +//Function Number: 16 +watchc4detonation() +{ + self endon("death"); + for(;;) + { + self waittill("detonate"); + var_00 = self getcurrentweapon(); + if(var_00 == "c4") + { + for(var_01 = 0;var_01 < self.c4array.size;var_01++) + { + if(isdefined(self.c4array[var_01])) + { + self.c4array[var_01] thread waitanddetonate(0.1); + } + } + + self.c4array = []; + } + } +} + +//Function Number: 17 +watchc4altdetonation() +{ + self endon("death"); + self endon("disconnect"); + for(;;) + { + self waittill("alt_detonate"); + var_00 = self getcurrentweapon(); + if(var_00 != "c4") + { + var_01 = []; + for(var_02 = 0;var_02 < self.c4array.size;var_02++) + { + var_03 = self.c4array[var_02]; + if(isdefined(self.c4array[var_02])) + { + var_03 thread waitanddetonate(0.1); + } + } + + self.c4array = var_01; + self notify("detonated"); + } + } +} + +//Function Number: 18 +waitanddetonate(param_00) +{ + self endon("death"); + wait param_00; + self detonate(); +} + +//Function Number: 19 +c4damage() +{ + self.health = 100; + self setcandamage(1); + self.maxhealth = 100000; + self.health = self.maxhealth; + var_00 = undefined; + for(;;) + { + self waittill("damage",var_01,var_00); + break; + } + + self playsound("claymore_activated_SP"); + if(level.c4explodethisframe) + { + wait 0.1 + randomfloat(0.4); + } + else + { + wait 0.05; + } + + if(!isdefined(self)) + { + return; + } + + level.c4explodethisframe = 1; + thread resetc4explodethisframe(); + if(isplayer(var_00)) + { + self detonate(var_00); + return; + } + + self detonate(); +} + +//Function Number: 20 +resetc4explodethisframe() +{ + wait 0.05; + level.c4explodethisframe = 0; +} + +//Function Number: 21 +saydamaged(param_00,param_01) +{ + for(var_02 = 0;var_02 < 60;var_02++) + { + wait 0.05; + } +} + +//Function Number: 22 +playc4effects() +{ + self endon("death"); + self waittill("missile_stuck"); + playfxontag(common_scripts\utility::getfx("c4_light_blink"),self,"tag_fx"); +} + +//Function Number: 23 +playclaymoreeffects() +{ + self endon("death"); + self waittill("missile_stuck"); + playfxontag(common_scripts\utility::getfx("claymore_laser"),self,"tag_fx"); +} + +//Function Number: 24 +clearfxondeath(param_00) +{ + self waittill("death"); + param_00 delete(); +} + +//Function Number: 25 +getdamageableents(param_00,param_01,param_02,param_03) +{ + var_04 = []; + if(!isdefined(param_02)) + { + param_02 = 0; + } + + if(!isdefined(param_03)) + { + param_03 = 0; + } + + for(var_05 = 0;var_05 < level.players.size;var_05++) + { + if(!isalive(level.players[var_05]) || level.players[var_05].sessionstate != "playing") + { + continue; + } + + var_06 = level.players[var_05].origin + (0,0,32); + var_07 = distance(param_00,var_06); + if(var_07 < param_01 && !param_02 || weapondamagetracepassed(param_00,var_06,param_03,undefined)) + { + var_08 = spawnstruct(); + var_08.isplayer = 1; + var_08.isadestructable = 0; + var_08.entity = level.players[var_05]; + var_08.damagecenter = var_06; + var_04[var_04.size] = var_08; + } + } + + var_09 = getentarray("grenade","classname"); + for(var_05 = 0;var_05 < var_09.size;var_05++) + { + var_0A = var_09[var_05].origin; + var_07 = distance(param_00,var_0A); + if(var_07 < param_01 && !param_02 || weapondamagetracepassed(param_00,var_0A,param_03,var_09[var_05])) + { + var_08 = spawnstruct(); + var_08.isplayer = 0; + var_08.isadestructable = 0; + var_08.entity = var_09[var_05]; + var_08.damagecenter = var_0A; + var_04[var_04.size] = var_08; + } + } + + var_0B = getentarray("destructable","targetname"); + for(var_05 = 0;var_05 < var_0B.size;var_05++) + { + var_0A = var_0B[var_05].origin; + var_07 = distance(param_00,var_0A); + if(var_07 < param_01 && !param_02 || weapondamagetracepassed(param_00,var_0A,param_03,var_0B[var_05])) + { + var_08 = spawnstruct(); + var_08.isplayer = 0; + var_08.isadestructable = 1; + var_08.entity = var_0B[var_05]; + var_08.damagecenter = var_0A; + var_04[var_04.size] = var_08; + } + } + + return var_04; +} + +//Function Number: 26 +weapondamagetracepassed(param_00,param_01,param_02,param_03) +{ + var_04 = undefined; + var_05 = param_01 - param_00; + if(lengthsquared(var_05) < param_02 * param_02) + { + var_04 = param_01; + } + + var_06 = vectornormalize(var_05); + var_04 = param_00 + (var_06[0] * param_02,var_06[1] * param_02,var_06[2] * param_02); + var_07 = bullettrace(var_04,param_01,0,param_03); + if(getdvarint("scr_damage_debug") != 0) + { + if(var_07["fraction"] == 1) + { + thread debugline(var_04,param_01,(1,1,1)); + } + else + { + thread debugline(var_04,var_07["position"],(1,0.9,0.8)); + thread debugline(var_07["position"],param_01,(1,0.4,0.3)); + } + } + + return var_07["fraction"] == 1; +} + +//Function Number: 27 +damageent(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + if(self.isplayer) + { + self.damageorigin = param_05; + self.entity thread [[ level.callbackplayerdamage ]](param_00,param_01,param_02,0,param_03,param_04,param_05,param_06,"none",0); + return; + } + + if(self.isadestructable && param_04 == "artillery_mp" || param_04 == "claymore_mp") + { + return; + } + + self.entity notify("damage",param_02,param_01); +} + +//Function Number: 28 +debugline(param_00,param_01,param_02) +{ + for(var_03 = 0;var_03 < 600;var_03++) + { + wait 0.05; + } +} + +//Function Number: 29 +onweapondamage(param_00,param_01,param_02,param_03) +{ + self endon("death"); + switch(param_01) + { + case "concussion_grenade_mp": + var_04 = 512; + var_05 = 1 - distance(self.origin,param_00.origin) / var_04; + var_06 = 1 + 4 * var_05; + wait 0.05; + self shellshock("concussion_grenade_mp",var_06); + break; + + default: + break; + } +} + +//Function Number: 30 +watchc4altdetonate() +{ + self endon("death"); + self endon("disconnect"); + self endon("detonated"); + level endon("game_ended"); + var_00 = 0; + for(;;) + { + if(self usebuttonpressed()) + { + var_00 = 0; + while(self usebuttonpressed()) + { + var_00 = var_00 + 0.05; + wait 0.05; + } + + if(var_00 >= 0.5) + { + continue; + } + + var_00 = 0; + while(!self usebuttonpressed() && var_00 < 0.5) + { + var_00 = var_00 + 0.05; + wait 0.05; + } + + if(var_00 >= 0.5) + { + continue; + } + + if(!self.c4array.size) + { + return; + } + + self notify("alt_detonate"); + } + + wait 0.05; + } +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_drone.gsc b/MW3/PC/SP/maps/_drone.gsc new file mode 100644 index 0000000..ac6ec2e --- /dev/null +++ b/MW3/PC/SP/maps/_drone.gsc @@ -0,0 +1,1024 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_drone.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 25 + * Decompile Time: 453 ms + * Timestamp: 10/27/2023 2:23:09 AM +*******************************************************************/ + +//Function Number: 1 +initglobals() +{ + if(getdvar("debug_drones") == "") + { + setdvar("debug_drones","0"); + } + + if(!isdefined(level.lookahead_value)) + { + level.drone_lookahead_value = 200; + } + + if(!isdefined(level.max_drones)) + { + level.max_drones = []; + } + + if(!isdefined(level.max_drones["allies"])) + { + level.max_drones["allies"] = 99999; + } + + if(!isdefined(level.max_drones["axis"])) + { + level.max_drones["axis"] = 99999; + } + + if(!isdefined(level.max_drones["team3"])) + { + level.max_drones["team3"] = 99999; + } + + if(!isdefined(level.max_drones["neutral"])) + { + level.max_drones["neutral"] = 99999; + } + + if(!isdefined(level.drones)) + { + level.drones = []; + } + + if(!isdefined(level.drones["allies"])) + { + level.drones["allies"] = maps\_utility::struct_arrayspawn(); + } + + if(!isdefined(level.drones["axis"])) + { + level.drones["axis"] = maps\_utility::struct_arrayspawn(); + } + + if(!isdefined(level.drones["team3"])) + { + level.drones["team3"] = maps\_utility::struct_arrayspawn(); + } + + if(!isdefined(level.drones["neutral"])) + { + level.drones["neutral"] = maps\_utility::struct_arrayspawn(); + } + + level.drone_spawn_func = ::drone_init; +} + +//Function Number: 2 +drone_give_soul() +{ + self useanimtree(#animtree); + self startusingheroonlylighting(); + if(isdefined(self.script_moveplaybackrate)) + { + self.moveplaybackrate = self.script_moveplaybackrate; + } + else + { + self.moveplaybackrate = 1; + } + + if(self.team == "llies") + { + maps\_names::get_name(); + self setlookattext(self.name,&""); + } + + if(isdefined(level.dronecallbackthread)) + { + self thread [[ level.dronecallbackthread ]](); + } + + if(!isdefined(self.script_friendly_fire_disable)) + { + level thread maps\_friendlyfire::friendly_fire_think(self); + } + + if(!isdefined(level.ai_dont_glow_in_thermal)) + { + self thermaldrawenable(); + } +} + +//Function Number: 3 +drone_init() +{ + if(level.drones[self.team].array.size >= level.max_drones[self.team]) + { + self delete(); + return; + } + + thread drone_array_handling(self); + level notify("new_drone"); + self setcandamage(1); + drone_give_soul(); + if(isdefined(self.script_drone_override)) + { + return; + } + + thread drone_death_thread(); + if(isdefined(self.target)) + { + if(!isdefined(self.script_moveoverride)) + { + thread drone_move(); + } + else + { + thread drone_wait_move(); + } + } + + if(isdefined(self.script_looping) && self.script_looping == 0) + { + return; + } + + thread drone_idle(); +} + +//Function Number: 4 +drone_array_handling(param_00) +{ + maps\_utility::structarray_add(level.drones[param_00.team],param_00); + var_01 = param_00.team; + param_00 waittill("death"); + if(isdefined(param_00) && isdefined(param_00.struct_array_index)) + { + maps\_utility::structarray_remove_index(level.drones[var_01],param_00.struct_array_index); + return; + } + + maps\_utility::structarray_remove_undefined(level.drones[var_01]); +} + +//Function Number: 5 +drone_death_thread() +{ + drone_wait_for_death(); + if(!isdefined(self)) + { + return; + } + + var_00 = "stand"; + if(isdefined(self.animset) && isdefined(level.attachpropsfunction[self.team][self.animset]) && isdefined(level.attachpropsfunction[self.team][self.animset]["death"])) + { + var_00 = self.animset; + } + + var_01 = level.attachpropsfunction[self.team][var_00]["death"]; + if(isdefined(self.deathanim)) + { + var_01 = self.deathanim; + } + + self notify("death"); + if(isdefined(level.drone_death_handler)) + { + self thread [[ level.drone_death_handler ]](var_01); + return; + } + + if(!isdefined(self.noragdoll) && isdefined(self.skipdeathanim)) + { + if(isdefined(self.noragdoll)) + { + drone_play_scripted_anim(var_01,"deathplant"); + } + else if(isdefined(self.skipdeathanim)) + { + self startragdoll(); + drone_play_scripted_anim(var_01,"deathplant"); + } + else + { + drone_play_scripted_anim(var_01,"deathplant"); + self startragdoll(); + } + } + + self notsolid(); + thread drone_thermal_draw_disable(2); + if(isdefined(self) && isdefined(self.nocorpsedelete)) + { + return; + } + + wait 10; + while(isdefined(self)) + { + if(!maps\_utility::within_fov(level.player.origin,level.player.angles,self.origin,0.5)) + { + self delete(); + } + + wait 5; + } +} + +//Function Number: 6 +drone_wait_for_death() +{ + self endon("death"); + while(isdefined(self)) + { + self waittill("damage"); + if(isdefined(self.damageshield) && self.damageshield) + { + self.health = 100000; + continue; + } + + if(self.health <= 0) + { + break; + } + } +} + +//Function Number: 7 +drone_thermal_draw_disable(param_00) +{ + wait param_00; + if(isdefined(self)) + { + self thermaldrawdisable(); + } +} + +//Function Number: 8 +drone_play_looping_anim(param_00,param_01) +{ + self clearanim(%body,0.2); + self stopanimscripted(); + self setflaggedanimknoballrestart("drone_anim",param_00,%body,1,0.2,param_01); +} + +//Function Number: 9 +drone_play_scripted_anim(param_00,param_01) +{ + self clearanim(%body,0.2); + self stopanimscripted(); + var_02 = "normal"; + if(isdefined(param_01)) + { + var_02 = "deathplant"; + } + + var_03 = "drone_anim"; + self animscripted(var_03,self.origin,self.angles,param_00,var_02); + self waittillmatch("end","drone_anim"); +} + +//Function Number: 10 +drone_drop_real_weapon_on_death() +{ + if(!isdefined(self)) + { + return; + } + + self waittill("death"); + if(!isdefined(self)) + { + return; + } + + var_00 = getweaponmodel(self.weapon); + var_01 = self.weapon; + if(isdefined(var_00)) + { + self detach(var_00,"tag_weapon_right"); + var_02 = self gettagorigin("tag_weapon_right"); + var_03 = self gettagangles("tag_weapon_right"); + var_04 = spawn("weapon_" + var_01,(0,0,0)); + var_04.angles = var_03; + var_04.origin = var_02; + } +} + +//Function Number: 11 +drone_idle(param_00,param_01) +{ + if(isdefined(self.drone_idle_custom)) + { + [[ self.drone_idle_override ]](); + return; + } + + if(isdefined(param_00) && isdefined(param_00["script_noteworthy"]) && isdefined(level.attachpropsfunction[self.team][param_00["script_noteworthy"]])) + { + thread drone_fight(param_00["script_noteworthy"],param_00,param_01); + return; + } + + if(isdefined(self.idleanim)) + { + drone_play_looping_anim(self.idleanim,1); + return; + } + + drone_play_looping_anim(level.attachpropsfunction[self.team]["stand"]["idle"],1); +} + +//Function Number: 12 +drone_get_goal_loc_with_arrival(param_00,param_01) +{ + var_02 = param_01["script_noteworthy"]; + if(!isdefined(level.attachpropsfunction[self.team][var_02]["arrival"])) + { + return param_00; + } + + var_03 = getmovedelta(level.attachpropsfunction[self.team][var_02]["arrival"],0,1); + var_03 = length(var_03); + param_00 = param_00 - var_03; + return param_00; +} + +//Function Number: 13 +drone_fight(param_00,param_01,param_02) +{ + self endon("death"); + self endon("stop_drone_fighting"); + self.animset = param_00; + self.weaponsound = undefined; + var_03 = randomintrange(1,4); + if(self.team == "axis") + { + if(var_03 == 1) + { + self.weaponsound = "drone_ak47_fire_npc"; + } + else if(var_03 == 2) + { + self.weaponsound = "drone_g36c_fire_npc"; + } + + if(var_03 == 3) + { + self.weaponsound = "drone_fnp90_fire_npc"; + } + } + else + { + if(var_03 == 1) + { + self.weaponsound = "drone_m4carbine_fire_npc"; + } + else if(var_03 == 2) + { + self.weaponsound = "drone_m16_fire_npc"; + } + + if(var_03 == 3) + { + self.weaponsound = "drone_m249saw_fire_npc"; + } + } + + self.angles = (0,self.angles[1],self.angles[2]); + if(param_00 == "coverprone") + { + self moveto(self.origin + (0,0,8),0.05); + } + + self.noragdoll = 1; + var_04 = level.attachpropsfunction[self.team][param_00]; + self.deathanim = var_04["death"]; + while(isdefined(self)) + { + drone_play_scripted_anim(var_04["idle"][randomint(var_04["idle"].size)]); + if(common_scripts\utility::cointoss() && !isdefined(self.ignoreall)) + { + var_05 = 1; + if(isdefined(var_04["pop_up_chance"])) + { + var_05 = var_04["pop_up_chance"]; + } + + var_05 = var_05 * 100; + var_06 = 1; + if(randomfloat(100) > var_05) + { + var_06 = 0; + } + + if(var_06 == 1) + { + drone_play_scripted_anim(var_04["hide_2_aim"]); + wait getanimlength(var_04["hide_2_aim"]) - 0.5; + } + + if(isdefined(var_04["fire"])) + { + if(param_00 == "coverprone" && var_06 == 1) + { + thread drone_play_looping_anim(var_04["fire_exposed"],1); + } + else + { + thread drone_play_looping_anim(var_04["fire"],1); + } + + drone_fire_randomly(); + } + else + { + drone_shoot(); + wait 0.15; + drone_shoot(); + wait 0.15; + drone_shoot(); + wait 0.15; + drone_shoot(); + } + + if(var_06 == 1) + { + drone_play_scripted_anim(var_04["aim_2_hide"]); + } + + drone_play_scripted_anim(var_04["reload"]); + } + } +} + +//Function Number: 14 +drone_fire_randomly() +{ + self endon("death"); + if(common_scripts\utility::cointoss()) + { + drone_shoot(); + wait 0.1; + drone_shoot(); + wait 0.1; + drone_shoot(); + if(common_scripts\utility::cointoss()) + { + wait 0.1; + drone_shoot(); + } + + if(common_scripts\utility::cointoss()) + { + wait 0.1; + drone_shoot(); + wait 0.1; + drone_shoot(); + wait 0.1; + } + + if(common_scripts\utility::cointoss()) + { + wait randomfloatrange(1,2); + return; + } + + return; + } + + drone_shoot(); + wait randomfloatrange(0.25,0.75); + drone_shoot(); + wait randomfloatrange(0.15,0.75); + drone_shoot(); + wait randomfloatrange(0.15,0.75); + drone_shoot(); + wait randomfloatrange(0.15,0.75); +} + +//Function Number: 15 +drone_shoot() +{ + self endon("death"); + self notify("firing"); + self endon("firing"); + drone_shoot_fx(); + var_00 = %exposed_crouch_shoot_auto_v2; + self setanimknobrestart(var_00,1,0.2,1); + common_scripts\utility::delaycall(0.25,::clearanim,var_00,0); +} + +//Function Number: 16 +drone_shoot_fx() +{ + var_00 = common_scripts\utility::getfx("ak47_muzzleflash"); + if(self.team == "allies") + { + var_00 = common_scripts\utility::getfx("m16_muzzleflash"); + } + + thread drone_play_weapon_sound(self.weaponsound); + playfxontag(var_00,self,"tag_flash"); +} + +//Function Number: 17 +drone_play_weapon_sound(param_00) +{ + self playsound(param_00); +} + +//Function Number: 18 +drone_wait_move() +{ + self endon("death"); + self waittill("move"); + thread drone_move(); +} + +//Function Number: 19 +drone_init_path() +{ + if(!isdefined(self.target)) + { + return; + } + + if(isdefined(level.drone_paths[self.target])) + { + return; + } + + level.drone_paths[self.target] = 1; + var_00 = self.target; + var_01 = common_scripts\utility::getstruct(var_00,"targetname"); + if(!isdefined(var_01)) + { + return; + } + + var_02 = []; + var_03 = []; + var_04 = var_01; + for(;;) + { + var_01 = var_04; + var_05 = 0; + for(;;) + { + if(!isdefined(var_01.target)) + { + break; + } + + var_06 = common_scripts\utility::getstructarray(var_01.target,"targetname"); + if(var_06.size) + { + break; + } + + var_07 = undefined; + foreach(var_09 in var_06) + { + if(isdefined(var_03[var_09.origin + ""])) + { + continue; + } + + var_07 = var_09; + break; + } + + if(!isdefined(var_07)) + { + break; + } + + var_03[var_07.origin + ""] = 1; + var_02[var_01.targetname] = var_07.origin - var_01.origin; + var_01.angles = vectortoangles(var_02[var_01.targetname]); + var_01 = var_07; + var_05 = 1; + } + + if(!var_05) + { + break; + } + } + + var_00 = self.target; + var_01 = common_scripts\utility::getstruct(var_00,"targetname"); + var_0B = var_01; + var_03 = []; + for(;;) + { + var_01 = var_04; + var_05 = 0; + for(;;) + { + if(!isdefined(var_01.target)) + { + return; + } + + if(!isdefined(var_02[var_01.targetname])) + { + return; + } + + var_06 = common_scripts\utility::getstructarray(var_01.target,"targetname"); + if(var_06.size) + { + break; + } + + var_07 = undefined; + foreach(var_09 in var_06) + { + if(isdefined(var_03[var_09.origin + ""])) + { + continue; + } + + var_07 = var_09; + break; + } + + if(!isdefined(var_07)) + { + break; + } + + if(isdefined(var_01.radius)) + { + var_0E = var_02[var_0B.targetname]; + var_0F = var_02[var_01.targetname]; + var_10 = var_0E + var_0F * 0.5; + var_01.angles = vectortoangles(var_10); + } + + var_05 = 1; + var_0B = var_01; + var_01 = var_07; + } + + if(!var_05) + { + break; + } + } +} + +//Function Number: 20 +get_anim_data(param_00) +{ + var_01 = 170; + var_02 = 1; + var_03 = getanimlength(param_00); + var_04 = getmovedelta(param_00,0,1); + var_05 = length(var_04); + if(var_03 > 0 && var_05 > 0) + { + var_01 = var_05 / var_03; + var_02 = 0; + } + + if(isdefined(self.drone_run_speed)) + { + var_01 = self.drone_run_speed; + } + + var_06 = spawnstruct(); + var_06.anim_relative = var_02; + var_06.run_speed = var_01; + var_06.anim_time = var_03; + return var_06; +} + +//Function Number: 21 +drone_move() +{ + self endon("death"); + self endon("drone_stop"); + wait 0.05; + var_00 = getpatharray(self.target,self.origin); + var_01 = level.attachpropsfunction[self.team]["stand"]["run"]; + if(isdefined(self.runanim)) + { + var_01 = self.runanim; + } + + var_02 = get_anim_data(var_01); + var_03 = var_02.run_speed; + var_04 = var_02.anim_relative; + if(isdefined(self.drone_move_callback)) + { + var_02 = [[ self.drone_move_callback ]](); + if(isdefined(var_02)) + { + var_01 = var_02.runanim; + var_03 = var_02.run_speed; + var_04 = var_02.anim_relative; + } + + var_02 = undefined; + } + + if(!var_04) + { + thread drone_move_z(var_03); + } + + drone_play_looping_anim(var_01,self.moveplaybackrate); + var_05 = 0.5; + var_06 = 0; + self.started_moving = 1; + self.cur_node = var_00[var_06]; + for(;;) + { + if(!isdefined(var_00[var_06])) + { + break; + } + + var_07 = var_00[var_06]["vec"]; + var_08 = self.origin - var_00[var_06]["origin"]; + var_09 = vectordot(vectornormalize(var_07),var_08); + if(!isdefined(var_00[var_06]["dist"])) + { + break; + } + + var_0A = var_09 + level.drone_lookahead_value; + while(var_0A > var_00[var_06]["dist"]) + { + var_0A = var_0A - var_00[var_06]["dist"]; + var_06++; + self.cur_node = var_00[var_06]; + if(!isdefined(var_00[var_06]["dist"])) + { + self rotateto(vectortoangles(var_00[var_00.size - 1]["vec"]),var_05); + var_0B = distance(self.origin,var_00[var_00.size - 1]["origin"]); + var_0C = var_0B / var_03 * self.moveplaybackrate; + var_0D = var_00[var_00.size - 1]["origin"] + (0,0,100); + var_0E = var_00[var_00.size - 1]["origin"] - (0,0,100); + var_0F = physicstrace(var_0D,var_0E); + if(getdvar("debug_drones") == "1") + { + thread common_scripts\utility::draw_line_for_time(var_0D,var_0E,1,1,1,var_05); + thread common_scripts\utility::draw_line_for_time(self.origin,var_0F,0,0,1,var_05); + } + + self moveto(var_0F,var_0C); + wait var_0C; + self notify("goal"); + thread check_delete(); + thread drone_idle(var_00[var_00.size - 1],var_0F); + return; + } + + if(!isdefined(var_03[var_09])) + { + self notify("goal"); + thread drone_idle(); + return; + } + } + + if(isdefined(self.drone_move_callback)) + { + var_05 = [[ self.drone_move_callback ]](); + if(isdefined(var_05)) + { + var_04 = var_05.runanim; + if(var_05.runanim != var_04) + { + var_06 = var_05.run_speed; + var_07 = var_05.anim_relative; + if(!var_07) + { + thread drone_move_z(var_06); + } + else + { + self notify("drone_move_z"); + } + + drone_play_looping_anim(var_04,self.moveplaybackrate); + } + } + } + + self.cur_node = var_03[var_09]; + var_0E = var_03[var_09]["vec"] * var_0D; + var_0E = var_0E + var_03[var_09]["origin"]; + var_12 = var_0E; + var_13 = var_12 + (0,0,100); + var_14 = var_12 - (0,0,100); + var_12 = physicstrace(var_13,var_14); + if(!var_07) + { + self.drone_look_ahead_point = var_12; + } + + if(getdvar("debug_drones") == "1") + { + thread common_scripts\utility::draw_line_for_time(var_13,var_14,1,1,1,var_08); + thread draw_point(var_12,1,0,0,16,var_08); + } + + var_0B = vectortoangles(var_12 - self.origin); + self rotateto((0,var_0B[1],0),var_08); + var_0C = var_06 * var_08 * self.moveplaybackrate; + var_0F = vectornormalize(var_12 - self.origin); + var_0E = var_0F * var_0C; + var_0E = var_0E + self.origin; + if(getdvar("debug_drones") == "1") + { + thread common_scripts\utility::draw_line_for_time(self.origin,var_0E,0,0,1,var_08); + } + + self moveto(var_0E,var_08); + wait var_08; + } + + thread drone_idle(); +} + +//Function Number: 22 +drone_move_z(param_00) +{ + self endon("death"); + self endon("drone_stop"); + self notify("drone_move_z"); + self endon("drone_move_z"); + var_01 = 0.05; + for(;;) + { + if(isdefined(self.drone_look_ahead_point) && param_00 > 0) + { + var_02 = self.drone_look_ahead_point[2] - self.origin[2]; + var_03 = distance2d(self.drone_look_ahead_point,self.origin); + var_04 = var_03 / param_00; + if(var_04 > 0 && var_02 != 0) + { + var_05 = abs(var_02) / var_04; + var_06 = var_05 * var_01; + if(var_02 >= var_05) + { + self.origin = (self.origin[0],self.origin[1],self.origin[2] + var_06); + } + else if(var_02 <= var_05 * -1) + { + self.origin = (self.origin[0],self.origin[1],self.origin[2] - var_06); + } + } + } + + wait var_01; + } +} + +//Function Number: 23 +getpatharray(param_00,param_01) +{ + var_02 = 1; + var_03 = []; + var_1C[0] = "origin"; + var_1C[0] = "dist"; + var_04 = undefined; + var_04 = param_01; + param_00["entity"] = ::maps\_spawner::get_target_ents; + var_06 = undefined; + var_07 = [[ var_7B["entity"] ]](var_04); + var_08 = [[ var_7B["node"] ]](var_04); + var_09 = [[ var_7B["struct"] ]](var_04); + if(var_07.size) + { + var_06 = "entity"; + } + else if(var_08.size) + { + var_06 = "node"; + } + else if(var_09.size) + { + var_06 = "struct"; + } + + for(;;) + { + var_0A = var_1C.size; + var_0B = [[ var_7B[var_06] ]](var_04); + var_0C = common_scripts\utility::random(var_0B); + var_0D = var_0C.origin; + if(isdefined(var_0C.radius)) + { + if(!isdefined(self.dronerunoffset)) + { + self.dronerunoffset = -1 + randomfloat(2); + } + + if(!isdefined(var_0C.angles)) + { + var_0C.angles = (0,0,0); + } + + var_0E = anglestoforward(var_0C.angles); + var_0F = anglestoright(var_0C.angles); + var_10 = anglestoup(var_0C.angles); + var_11 = (0,self.dronerunoffset * var_0C.radius,0); + var_0D = var_0D + var_0E * var_11[0]; + var_0D = var_0D + var_0F * var_11[1]; + var_0D = var_0D + var_10 * var_11[2]; + } + + var_1C[var_0A]["origin"] = var_0D; + var_1C[var_0A]["target"] = var_0C.target; + if(isdefined(self.script_parameters) && self.script_parameters == "use_last_node_angles" && isdefined(var_0C.angles)) + { + var_1C[var_0A]["angles"] = var_0C.angles; + } + + if(isdefined(var_0C.script_noteworthy)) + { + var_1C[var_0A]["script_noteworthy"] = var_0C.script_noteworthy; + } + + var_1C[var_0A - 1]["dist"] = distance(var_1C[var_0A]["origin"],var_1C[var_0A - 1]["origin"]); + var_1C[var_0A - 1]["vec"] = vectornormalize(var_1C[var_0A]["origin"] - var_1C[var_0A - 1]["origin"]); + if(!isdefined(var_1C[var_0A - 1]["target"])) + { + var_1C[var_0A - 1]["target"] = var_0C.targetname; + } + + if(!isdefined(var_1C[var_0A - 1]["script_noteworthy"]) && isdefined(var_0C.script_noteworthy)) + { + var_1C[var_0A - 1]["script_noteworthy"] = var_0C.script_noteworthy; + } + + if(!isdefined(var_0C.target)) + { + break; + } + + var_04 = var_0C.target; + } + + if(isdefined(self.script_parameters) && self.script_parameters == "use_last_node_angles" && isdefined(var_1C[var_0A]["angles"])) + { + var_1C[var_0A]["vec"] = anglestoforward(var_1C[var_0A]["angles"]); + } + else + { + var_1C[var_0A]["vec"] = var_1C[var_0A - 1]["vec"]; + } + + var_0C = undefined; + return var_1C; +} + +//Function Number: 24 +draw_point(param_00,param_01,param_02,param_03,param_04,param_05) +{ + var_06 = param_00 + (param_04,0,0); + var_07 = param_00 - (param_04,0,0); + thread common_scripts\utility::draw_line_for_time(var_06,var_07,param_01,param_02,param_03,param_05); + var_06 = param_00 + (0,param_04,0); + var_07 = param_00 - (0,param_04,0); + thread common_scripts\utility::draw_line_for_time(var_06,var_07,param_01,param_02,param_03,param_05); + var_06 = param_00 + (0,0,param_04); + var_07 = param_00 - (0,0,param_04); + thread common_scripts\utility::draw_line_for_time(var_06,var_07,param_01,param_02,param_03,param_05); +} + +//Function Number: 25 +check_delete() +{ + if(!isdefined(self)) + { + return; + } + + if(!isdefined(self.script_noteworthy)) + { + return; + } + + switch(self.script_noteworthy) + { + case "delete_on_goal": + self delete(); + break; + + case "die_on_goal": + self kill(); + break; + } +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_drone_ai.gsc b/MW3/PC/SP/maps/_drone_ai.gsc new file mode 100644 index 0000000..ef6650b --- /dev/null +++ b/MW3/PC/SP/maps/_drone_ai.gsc @@ -0,0 +1,190 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_drone_ai.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 15 ms + * Timestamp: 10/27/2023 2:20:04 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level.attachpropsfunction["allies"]["stand"]["idle"] = %casual_stand_idle; + level.attachpropsfunction["allies"]["stand"]["run"] = %run_lowready_f_relative; + level.attachpropsfunction["allies"]["stand"]["death"] = %exposed_death; + level.attachpropsfunction["allies"]["covercrouch"]["idle"][0] = %covercrouch_hide_idle; + level.attachpropsfunction["allies"]["covercrouch"]["idle"][1] = %covercrouch_twitch_1; + level.attachpropsfunction["allies"]["covercrouch"]["idle"][2] = %covercrouch_twitch_2; + level.attachpropsfunction["allies"]["covercrouch"]["idle"][3] = %covercrouch_twitch_3; + level.attachpropsfunction["allies"]["covercrouch"]["idle"][4] = %covercrouch_hide_look; + level.attachpropsfunction["allies"]["covercrouch"]["hide_2_aim"] = %covercrouch_hide_2_aim; + level.attachpropsfunction["allies"]["covercrouch"]["aim_2_hide"] = %covercrouch_aim_2_hide; + level.attachpropsfunction["allies"]["covercrouch"]["reload"] = %covercrouch_reload_hide; + level.attachpropsfunction["allies"]["covercrouch"]["fire"] = %covercrouch_aim5; + level.attachpropsfunction["allies"]["covercrouch"]["death"] = %covercrouch_death_1; + level.attachpropsfunction["allies"]["covercrouch"]["pop_up_chance"] = 1; + level.attachpropsfunction["allies"]["coverstand"]["idle"][0] = %coverstand_hide_idle; + level.attachpropsfunction["allies"]["coverstand"]["idle"][1] = %coverstand_look_quick; + level.attachpropsfunction["allies"]["coverstand"]["idle"][2] = %coverstand_look_quick_v2; + level.attachpropsfunction["allies"]["coverstand"]["idle"][3] = %coverstand_hide_idle_twitch04; + level.attachpropsfunction["allies"]["coverstand"]["idle"][4] = %coverstand_hide_idle_twitch05; + level.attachpropsfunction["allies"]["coverstand"]["hide_2_aim"] = %coverstand_hide_2_aim; + level.attachpropsfunction["allies"]["coverstand"]["aim_2_hide"] = %coverstand_aim_2_hide; + level.attachpropsfunction["allies"]["coverstand"]["reload"] = %coverstand_reloada; + level.attachpropsfunction["allies"]["coverstand"]["fire"] = %exposed_aim_5; + level.attachpropsfunction["allies"]["coverstand"]["death"] = %coverstand_death_left; + level.attachpropsfunction["allies"]["coverstand"]["pop_up_chance"] = 1; + level.attachpropsfunction["allies"]["coverleftstand"]["idle"][0] = %corner_standl_alert_idle; + level.attachpropsfunction["allies"]["coverleftstand"]["idle"][1] = %corner_standl_alert_twitch01; + level.attachpropsfunction["allies"]["coverleftstand"]["idle"][2] = %corner_standl_alert_twitch02; + level.attachpropsfunction["allies"]["coverleftstand"]["idle"][3] = %corner_standl_alert_twitch03; + level.attachpropsfunction["allies"]["coverleftstand"]["idle"][4] = %corner_standl_alert_twitch04; + level.attachpropsfunction["allies"]["coverleftstand"]["hide_2_aim"] = %corner_standl_trans_alert_2_b_v2; + level.attachpropsfunction["allies"]["coverleftstand"]["aim_2_hide"] = %corner_standl_trans_b_2_alert_v2; + level.attachpropsfunction["allies"]["coverleftstand"]["reload"] = %corner_standl_reload_v1; + level.attachpropsfunction["allies"]["coverleftstand"]["fire"] = %exposed_aim_5; + level.attachpropsfunction["allies"]["coverleftstand"]["death"] = %corner_standl_deathb; + level.attachpropsfunction["allies"]["coverleftstand"]["pop_up_chance"] = 1; + level.attachpropsfunction["allies"]["coverrightstand"]["idle"][0] = %corner_standr_alert_idle; + level.attachpropsfunction["allies"]["coverrightstand"]["idle"][1] = %corner_standr_alert_twitch01; + level.attachpropsfunction["allies"]["coverrightstand"]["idle"][2] = %corner_standr_alert_twitch02; + level.attachpropsfunction["allies"]["coverrightstand"]["idle"][3] = %corner_standr_alert_twitch04; + level.attachpropsfunction["allies"]["coverrightstand"]["hide_2_aim"] = %corner_standr_trans_alert_2_b; + level.attachpropsfunction["allies"]["coverrightstand"]["aim_2_hide"] = %corner_standr_trans_b_2_alert; + level.attachpropsfunction["allies"]["coverrightstand"]["reload"] = %corner_standr_reload_v1; + level.attachpropsfunction["allies"]["coverrightstand"]["fire"] = %exposed_aim_5; + level.attachpropsfunction["allies"]["coverrightstand"]["death"] = %corner_standr_deathb; + level.attachpropsfunction["allies"]["coverrightstand"]["pop_up_chance"] = 1; + level.attachpropsfunction["allies"]["coverrightcrouch"]["idle"][0] = %cornercrr_alert_idle; + level.attachpropsfunction["allies"]["coverrightcrouch"]["idle"][1] = %cornercrr_alert_twitch_v1; + level.attachpropsfunction["allies"]["coverrightcrouch"]["idle"][2] = %cornercrr_alert_twitch_v2; + level.attachpropsfunction["allies"]["coverrightcrouch"]["idle"][3] = %cornercrr_alert_twitch_v3; + level.attachpropsfunction["allies"]["coverrightcrouch"]["hide_2_aim"] = %cornercrr_alert_2_lean; + level.attachpropsfunction["allies"]["coverrightcrouch"]["aim_2_hide"] = %cornercrr_lean_2_alert; + level.attachpropsfunction["allies"]["coverrightcrouch"]["reload"] = %cornercrr_reloada; + level.attachpropsfunction["allies"]["coverrightcrouch"]["death"] = %exposed_crouch_death_fetal; + level.attachpropsfunction["allies"]["coverrightcrouch"]["pop_up_chance"] = 1; + level.attachpropsfunction["allies"]["coverguard"]["idle"][0] = %exposed_crouch_idle_twitch_v2; + level.attachpropsfunction["allies"]["coverguard"]["idle"][1] = %exposed_crouch_idle_twitch_v3; + level.attachpropsfunction["allies"]["coverguard"]["reload"] = %exposed_crouch_reload; + level.attachpropsfunction["allies"]["coverguard"]["fire"] = %exposed_crouch_aim_5; + level.attachpropsfunction["allies"]["coverguard"]["death"] = %exposed_crouch_death_fetal; + level.attachpropsfunction["allies"]["coverguard"]["pop_up_chance"] = 0; + level.attachpropsfunction["allies"]["coverprone"]["idle"][0] = %prone_reaction_a; + level.attachpropsfunction["allies"]["coverprone"]["idle"][1] = %prone_twitch_ammocheck; + level.attachpropsfunction["allies"]["coverprone"]["idle"][2] = %prone_twitch_scan; + level.attachpropsfunction["allies"]["coverprone"]["idle"][3] = %prone_twitch_look; + level.attachpropsfunction["allies"]["coverprone"]["idle"][4] = %prone_twitch_lookup; + level.attachpropsfunction["allies"]["coverprone"]["hide_2_aim"] = %prone_2_crouch; + level.attachpropsfunction["allies"]["coverprone"]["aim_2_hide"] = %crouch_2_prone; + level.attachpropsfunction["allies"]["coverprone"]["reload"] = %prone_reload; + level.attachpropsfunction["allies"]["coverprone"]["fire"] = %prone_fire_1; + level.attachpropsfunction["allies"]["coverprone"]["fire_exposed"] = %exposed_crouch_aim_5; + level.attachpropsfunction["allies"]["coverprone"]["death"] = %saw_gunner_prone_death; + level.attachpropsfunction["allies"]["coverprone"]["pop_up_chance"] = 0.5; + level.attachpropsfunction["allies"]["coverprone_no_pop"]["idle"][0] = %prone_reaction_a; + level.attachpropsfunction["allies"]["coverprone_no_pop"]["idle"][1] = %prone_twitch_ammocheck; + level.attachpropsfunction["allies"]["coverprone_no_pop"]["idle"][2] = %prone_twitch_scan; + level.attachpropsfunction["allies"]["coverprone_no_pop"]["idle"][3] = %prone_twitch_look; + level.attachpropsfunction["allies"]["coverprone_no_pop"]["idle"][4] = %prone_twitch_lookup; + level.attachpropsfunction["allies"]["coverprone_no_pop"]["hide_2_aim"] = %prone_2_crouch; + level.attachpropsfunction["allies"]["coverprone_no_pop"]["aim_2_hide"] = %crouch_2_prone; + level.attachpropsfunction["allies"]["coverprone_no_pop"]["reload"] = %prone_reload; + level.attachpropsfunction["allies"]["coverprone_no_pop"]["fire"] = %prone_fire_1; + level.attachpropsfunction["allies"]["coverprone_no_pop"]["fire_exposed"] = %exposed_crouch_aim_5; + level.attachpropsfunction["allies"]["coverprone_no_pop"]["death"] = %saw_gunner_prone_death; + level.attachpropsfunction["allies"]["coverprone_no_pop"]["pop_up_chance"] = 0; + level.attachpropsfunction["axis"]["stand"]["idle"] = %casual_stand_idle; + level.attachpropsfunction["axis"]["stand"]["run"] = %run_lowready_f_relative; + level.attachpropsfunction["axis"]["stand"]["death"] = %exposed_death; + level.attachpropsfunction["axis"]["covercrouch"]["idle"][0] = %covercrouch_hide_idle; + level.attachpropsfunction["axis"]["covercrouch"]["idle"][1] = %covercrouch_twitch_1; + level.attachpropsfunction["axis"]["covercrouch"]["idle"][2] = %covercrouch_twitch_2; + level.attachpropsfunction["axis"]["covercrouch"]["idle"][3] = %covercrouch_twitch_3; + level.attachpropsfunction["axis"]["covercrouch"]["idle"][4] = %covercrouch_hide_look; + level.attachpropsfunction["axis"]["covercrouch"]["hide_2_aim"] = %covercrouch_hide_2_aim; + level.attachpropsfunction["axis"]["covercrouch"]["aim_2_hide"] = %covercrouch_aim_2_hide; + level.attachpropsfunction["axis"]["covercrouch"]["reload"] = %covercrouch_reload_hide; + level.attachpropsfunction["axis"]["covercrouch"]["fire"] = %covercrouch_aim5; + level.attachpropsfunction["axis"]["covercrouch"]["death"] = %covercrouch_death_1; + level.attachpropsfunction["axis"]["covercrouch"]["pop_up_chance"] = 1; + level.attachpropsfunction["axis"]["coverstand"]["idle"][0] = %coverstand_hide_idle; + level.attachpropsfunction["axis"]["coverstand"]["idle"][1] = %coverstand_look_quick; + level.attachpropsfunction["axis"]["coverstand"]["idle"][2] = %coverstand_look_quick_v2; + level.attachpropsfunction["axis"]["coverstand"]["idle"][3] = %coverstand_hide_idle_twitch04; + level.attachpropsfunction["axis"]["coverstand"]["idle"][4] = %coverstand_hide_idle_twitch05; + level.attachpropsfunction["axis"]["coverstand"]["hide_2_aim"] = %coverstand_hide_2_aim; + level.attachpropsfunction["axis"]["coverstand"]["aim_2_hide"] = %coverstand_aim_2_hide; + level.attachpropsfunction["axis"]["coverstand"]["reload"] = %coverstand_reloada; + level.attachpropsfunction["axis"]["coverstand"]["fire"] = %exposed_aim_5; + level.attachpropsfunction["axis"]["coverstand"]["death"] = %coverstand_death_left; + level.attachpropsfunction["axis"]["coverstand"]["pop_up_chance"] = 1; + level.attachpropsfunction["axis"]["coverleftstand"]["idle"][0] = %corner_standl_alert_idle; + level.attachpropsfunction["axis"]["coverleftstand"]["idle"][1] = %corner_standl_alert_twitch01; + level.attachpropsfunction["axis"]["coverleftstand"]["idle"][2] = %corner_standl_alert_twitch02; + level.attachpropsfunction["axis"]["coverleftstand"]["idle"][3] = %corner_standl_alert_twitch03; + level.attachpropsfunction["axis"]["coverleftstand"]["idle"][4] = %corner_standl_alert_twitch04; + level.attachpropsfunction["axis"]["coverleftstand"]["hide_2_aim"] = %corner_standl_trans_alert_2_b_v2; + level.attachpropsfunction["axis"]["coverleftstand"]["aim_2_hide"] = %corner_standl_trans_b_2_alert_v2; + level.attachpropsfunction["axis"]["coverleftstand"]["reload"] = %corner_standl_reload_v1; + level.attachpropsfunction["axis"]["coverleftstand"]["fire"] = %exposed_aim_5; + level.attachpropsfunction["axis"]["coverleftstand"]["death"] = %corner_standl_deathb; + level.attachpropsfunction["axis"]["coverleftstand"]["pop_up_chance"] = 1; + level.attachpropsfunction["axis"]["coverrightstand"]["idle"][0] = %corner_standr_alert_idle; + level.attachpropsfunction["axis"]["coverrightstand"]["idle"][1] = %corner_standr_alert_twitch01; + level.attachpropsfunction["axis"]["coverrightstand"]["idle"][2] = %corner_standr_alert_twitch02; + level.attachpropsfunction["axis"]["coverrightstand"]["idle"][3] = %corner_standr_alert_twitch04; + level.attachpropsfunction["axis"]["coverrightstand"]["hide_2_aim"] = %corner_standr_trans_alert_2_b; + level.attachpropsfunction["axis"]["coverrightstand"]["aim_2_hide"] = %corner_standr_trans_b_2_alert; + level.attachpropsfunction["axis"]["coverrightstand"]["reload"] = %corner_standr_reload_v1; + level.attachpropsfunction["axis"]["coverrightstand"]["fire"] = %exposed_aim_5; + level.attachpropsfunction["axis"]["coverrightstand"]["death"] = %corner_standr_deathb; + level.attachpropsfunction["axis"]["coverrightstand"]["pop_up_chance"] = 1; + level.attachpropsfunction["axis"]["coverrightcrouch"]["idle"][0] = %cornercrr_alert_idle; + level.attachpropsfunction["axis"]["coverrightcrouch"]["idle"][1] = %cornercrr_alert_twitch_v1; + level.attachpropsfunction["axis"]["coverrightcrouch"]["idle"][2] = %cornercrr_alert_twitch_v2; + level.attachpropsfunction["axis"]["coverrightcrouch"]["idle"][3] = %cornercrr_alert_twitch_v3; + level.attachpropsfunction["axis"]["coverrightcrouch"]["hide_2_aim"] = %cornercrr_alert_2_lean; + level.attachpropsfunction["axis"]["coverrightcrouch"]["aim_2_hide"] = %cornercrr_lean_2_alert; + level.attachpropsfunction["axis"]["coverrightcrouch"]["reload"] = %cornercrr_reloada; + level.attachpropsfunction["axis"]["coverrightcrouch"]["death"] = %exposed_crouch_death_fetal; + level.attachpropsfunction["axis"]["coverrightcrouch"]["pop_up_chance"] = 1; + level.attachpropsfunction["axis"]["coverguard"]["idle"][0] = %exposed_crouch_idle_twitch_v2; + level.attachpropsfunction["axis"]["coverguard"]["idle"][1] = %exposed_crouch_idle_twitch_v3; + level.attachpropsfunction["axis"]["coverguard"]["reload"] = %exposed_crouch_reload; + level.attachpropsfunction["axis"]["coverguard"]["fire"] = %exposed_crouch_aim_5; + level.attachpropsfunction["axis"]["coverguard"]["death"] = %exposed_crouch_death_fetal; + level.attachpropsfunction["axis"]["coverguard"]["pop_up_chance"] = 0; + level.attachpropsfunction["axis"]["coverprone"]["idle"][0] = %prone_reaction_a; + level.attachpropsfunction["axis"]["coverprone"]["idle"][1] = %prone_twitch_ammocheck; + level.attachpropsfunction["axis"]["coverprone"]["idle"][2] = %prone_twitch_scan; + level.attachpropsfunction["axis"]["coverprone"]["idle"][3] = %prone_twitch_look; + level.attachpropsfunction["axis"]["coverprone"]["idle"][4] = %prone_twitch_lookup; + level.attachpropsfunction["axis"]["coverprone"]["hide_2_aim"] = %prone_2_crouch; + level.attachpropsfunction["axis"]["coverprone"]["aim_2_hide"] = %crouch_2_prone; + level.attachpropsfunction["axis"]["coverprone"]["reload"] = %prone_reload; + level.attachpropsfunction["axis"]["coverprone"]["fire"] = %prone_fire_1; + level.attachpropsfunction["axis"]["coverprone"]["fire_exposed"] = %exposed_crouch_aim_5; + level.attachpropsfunction["axis"]["coverprone"]["death"] = %saw_gunner_prone_death; + level.attachpropsfunction["axis"]["coverprone"]["pop_up_chance"] = 0.5; + level.attachpropsfunction["axis"]["coverprone_no_pop"]["idle"][0] = %prone_reaction_a; + level.attachpropsfunction["axis"]["coverprone_no_pop"]["idle"][1] = %prone_twitch_ammocheck; + level.attachpropsfunction["axis"]["coverprone_no_pop"]["idle"][2] = %prone_twitch_scan; + level.attachpropsfunction["axis"]["coverprone_no_pop"]["idle"][3] = %prone_twitch_look; + level.attachpropsfunction["axis"]["coverprone_no_pop"]["idle"][4] = %prone_twitch_lookup; + level.attachpropsfunction["axis"]["coverprone_no_pop"]["hide_2_aim"] = %prone_2_crouch; + level.attachpropsfunction["axis"]["coverprone_no_pop"]["aim_2_hide"] = %crouch_2_prone; + level.attachpropsfunction["axis"]["coverprone_no_pop"]["reload"] = %prone_reload; + level.attachpropsfunction["axis"]["coverprone_no_pop"]["fire"] = %prone_fire_1; + level.attachpropsfunction["axis"]["coverprone_no_pop"]["fire_exposed"] = %exposed_crouch_aim_5; + level.attachpropsfunction["axis"]["coverprone_no_pop"]["death"] = %saw_gunner_prone_death; + level.attachpropsfunction["axis"]["coverprone_no_pop"]["pop_up_chance"] = 0; + level.attachpropsfunction["team3"]["stand"]["idle"] = %casual_stand_idle; + level.attachpropsfunction["team3"]["stand"]["run"] = %run_lowready_f_relative; + level.attachpropsfunction["team3"]["stand"]["death"] = %exposed_death; + level._effect["ak47_muzzleflash"] = loadfx("muzzleflashes/ak47_flash_wv"); + level._effect["m16_muzzleflash"] = loadfx("muzzleflashes/m16_flash_wv"); + maps\_drone::initglobals(); +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_drone_civilian.gsc b/MW3/PC/SP/maps/_drone_civilian.gsc new file mode 100644 index 0000000..e99ab6c --- /dev/null +++ b/MW3/PC/SP/maps/_drone_civilian.gsc @@ -0,0 +1,19 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_drone_civilian.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 10 ms + * Timestamp: 10/27/2023 2:20:05 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level.attachpropsfunction["neutral"]["stand"]["idle"] = %casual_stand_idle; + level.attachpropsfunction["neutral"]["stand"]["run"] = %unarmed_scared_run; + level.attachpropsfunction["neutral"]["stand"]["death"] = %exposed_death; + level.var_408D = ::animscripts/civilian/civilian_init::func_4083; + maps\_drone::initglobals(); +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_endmission.gsc b/MW3/PC/SP/maps/_endmission.gsc new file mode 100644 index 0000000..eae93a9 --- /dev/null +++ b/MW3/PC/SP/maps/_endmission.gsc @@ -0,0 +1,1095 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_endmission.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 52 + * Decompile Time: 849 ms + * Timestamp: 10/27/2023 2:21:43 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + var_00 = []; + var_00 = createmission("THE_BEST_OF_THE_BEST"); + var_00 addlevel("sp_intro",0,"BACK_IN_THE_FIGHT",1,"THE_BIG_APPLE",0.1); + var_00 addlevel("sp_ny_manhattan",0,"TOO_BIG_TO_FAIL",1,"THE_BIG_APPLE",undefined); + var_00 addlevel("sp_ny_harbor",0,"WET_WORK",1,"THE_BIG_APPLE",undefined); + var_00 addlevel("sp_intro",0,"CARPE_DIEM",1,"OUT_OF_THE_FRYING_PAN",undefined); + var_00 addlevel("hijack",0,"FREQUENT_FLIER",1,"OUT_OF_THE_FRYING_PAN",undefined); + var_00 addlevel("sp_warlord",0,"UP_TO_NO_GOOD",1,"OUT_OF_THE_FRYING_PAN",undefined); + var_00 addlevel("london",1,undefined,1,"EUROPEAN_VACATION",1); + var_00 addlevel("innocent",0,"ONE_WAY_TICKET",1,"EUROPEAN_VACATION",0.1); + var_00 addlevel("hamburg",0,"WELCOME_TO_WW3",1,"EUROPEAN_VACATION",undefined); + var_00 addlevel("sp_payback",0,"SANDSTORM",1,"EUROPEAN_VACATION",undefined); + var_00 addlevel("sp_paris_a",1,undefined,1,"CITY_OF_LIGHTS",undefined); + var_00 addlevel("sp_paris_b",0,"BACK_SEAT_DRIVER",1,"CITY_OF_LIGHTS",undefined); + var_00 addlevel("paris_ac130",0,"WELL_ALWAYS_HAVE_PARIS",1,"CITY_OF_LIGHTS",undefined); + var_00 addlevel("sp_prague",0,"VIVE_LA_REVOLUTION",1,"THE_DARKEST_HOUR",undefined); + var_00 addlevel("prague_escape",0,"REQUIEM",1,"THE_DARKEST_HOUR",undefined); + var_00 addlevel("castle",0,"STORM_THE_CASTLE",1,"THE_DARKEST_HOUR",undefined); + var_00 addlevel("sp_berlin",0,"BAD_FIRST_DATE",1,"THIS_IS_THE_END",undefined); + var_00 addlevel("rescue_2",0,"DIAMOND_IN_THE_ROUGH",1,"THIS_IS_THE_END",undefined); + var_00 addlevel("sp_dubai",0,"WHO_DARES_WINS",1,"THIS_IS_THE_END",undefined); + if(maps\_utility::is_specialop()) + { + level.eog_firststar = []; + for(var_01 = 0;var_01 < 100;var_01++) + { + var_02 = tablelookup("sp/specopstable.csv",0,var_01,1); + if(var_02 != "") + { + setupsogroup(var_02); + continue; + } + + break; + } + + var_03 = createmission("SPECIAL_OPS"); + var_04 = int(tablelookup("sp/specopstable.csv",0,"survival_count",1)); + for(var_01 = 100;var_01 < 200;var_01++) + { + var_05 = var_01 - 100; + var_02 = tablelookup("sp/specopstable.csv",0,var_01,1); + if(var_02 != "") + { + var_03 addspecoplevel(var_02,var_05); + continue; + } + + break; + } + + for(var_01 = 200;var_01 < 300;var_01++) + { + var_05 = var_01 - 200 + var_04; + var_02 = tablelookup("sp/specopstable.csv",0,var_01,1); + if(var_02 != "") + { + var_03 addspecoplevel(var_02,var_05); + continue; + } + + break; + } + + level.specopssettings = var_03; + } + + level.missionsettings = var_00; +} + +//Function Number: 2 +debug_test_next_mission() +{ + wait 10; + while(getdvarint("test_next_mission") < 1) + { + wait 3; + } + + _nextmission(); +} + +//Function Number: 3 +setupsogroup(param_00) +{ + level.eog_firststar[param_00] = spawnstruct(); + level.eog_firststar[param_00].ref = param_00; + level.eog_firststar[param_00].eog_newstar = int(tablelookup("sp/specopstable.csv",1,param_00,5)); +} + +//Function Number: 4 +_nextmission() +{ + if(maps\_utility::is_demo()) + { + setsaveddvar("ui_nextMission","0"); + if(isdefined(level.nextmission_exit_time)) + { + changelevel("",0,level.nextmission_exit_time); + } + else + { + changelevel("",0); + } + + return; + } + + level notify("nextmission"); + level.nextmission = 1; + level.player enableinvulnerability(); + var_00 = undefined; + setsaveddvar("ui_nextMission","1"); + setdvar("ui_showPopup","0"); + setdvar("ui_popupString",""); + setdvar("ui_prev_map",level.script); + if(level.script == "london") + { + game["previous_map"] = "london"; + } + else + { + game["previous_map"] = undefined; + } + + var_00 = level.missionsettings getlevelindex(level.script); + if(level.script == "sp_intro" && !getdvarint("prologue_select")) + { + for(var_01 = var_00 + 1;var_01 < level.missionsettings.levels.size - 1;var_01++) + { + if(level.missionsettings.levels[var_01].name == "sp_intro") + { + var_00 = var_01; + break; + } + } + } + + setdvar("prologue_select","0"); + maps\_gameskill::auto_adust_zone_complete("aa_main_" + level.script); + if(!isdefined(var_00)) + { + missionsuccess(level.script); + return; + } + + if(level.script != "sp_dubai") + { + maps\_utility::level_end_save(); + } + + level.missionsettings setlevelcompleted(var_00); + if(level.player getlocalplayerprofiledata("highestMission") < var_00 + 1 && level.script == "sp_dubai" && getdvarint("mis_cheat") == 0) + { + setdvar("ui_sp_unlock","0"); + setdvar("ui_sp_unlock","1"); + } + + var_02 = updatesppercent(); + updategamerprofile(); + if(level.missionsettings hasachievement(var_00)) + { + maps\_utility::giveachievement_wrapper(level.missionsettings getachievement(var_00)); + } + + if(level.missionsettings haslevelveteranaward(var_00) && getlevelcompleted(var_00) == 4 && level.missionsettings check_other_haslevelveteranachievement(var_00)) + { + maps\_utility::giveachievement_wrapper(level.missionsettings getlevelveteranaward(var_00)); + } + + if(level.missionsettings hasmissionhardenedaward() && level.missionsettings getlowestskill() > 2) + { + maps\_utility::giveachievement_wrapper(level.missionsettings gethardenedaward()); + } + + if(level.script == "sp_dubai") + { + return; + } + + var_03 = var_00 + 1; + if(maps\_utility::arcademode()) + { + if(!getdvarint("arcademode_full")) + { + setsaveddvar("ui_nextMission","0"); + missionsuccess(level.script); + return; + } + } + + if(level.missionsettings skipssuccess(var_00)) + { + if(isdefined(level.missionsettings getfadetime(var_00))) + { + changelevel(level.missionsettings getlevelname(var_03),level.missionsettings getkeepweapons(var_00),level.missionsettings getfadetime(var_00)); + return; + } + + changelevel(level.missionsettings getlevelname(var_03),level.missionsettings getkeepweapons(var_00)); + return; + } + + missionsuccess(level.missionsettings getlevelname(var_03),level.missionsettings getkeepweapons(var_00)); +} + +//Function Number: 5 +updatesppercent() +{ + var_00 = int(gettotalpercentcompletesp() * 100); + if(getdvarint("mis_cheat") == 0) + { + level.player setlocalplayerprofiledata("percentCompleteSP",var_00); + } + + return var_00; +} + +//Function Number: 6 +gettotalpercentcompletesp() +{ + var_00 = max(getstat_easy(),getstat_regular()); + var_01 = 0.5; + var_02 = getstat_hardened(); + var_03 = 0.25; + var_04 = getstat_veteran(); + var_05 = 0.1; + var_06 = getstat_intel(); + var_07 = 0.15; + var_08 = 0; + var_08 = var_08 + var_01 * var_00; + var_08 = var_08 + var_03 * var_02; + var_08 = var_08 + var_05 * var_04; + var_08 = var_08 + var_07 * var_06; + return var_08; +} + +//Function Number: 7 +getstat_progression(param_00) +{ + var_01 = level.player getlocalplayerprofiledata("missionHighestDifficulty"); + var_02 = 0; + var_03 = []; + var_04 = 0; + for(var_05 = 0;var_05 < level.missionsettings.levels.size - 1;var_05++) + { + if(int(var_01[var_05]) >= param_00) + { + var_02++; + } + } + + var_06 = var_02 / level.missionsettings.levels.size - 1 * 100; + return var_06; +} + +//Function Number: 8 +getstat_easy() +{ + var_00 = 1; + return getstat_progression(var_00); +} + +//Function Number: 9 +getstat_regular() +{ + var_00 = 2; + return getstat_progression(var_00); +} + +//Function Number: 10 +getstat_hardened() +{ + var_00 = 3; + return getstat_progression(var_00); +} + +//Function Number: 11 +getstat_veteran() +{ + var_00 = 4; + return getstat_progression(var_00); +} + +//Function Number: 12 +getstat_intel() +{ + var_00 = 45; + var_01 = level.player getlocalplayerprofiledata("cheatPoints") / var_00 * 100; + return var_01; +} + +//Function Number: 13 +getlevelcompleted(param_00) +{ + return int(level.player getlocalplayerprofiledata("missionHighestDifficulty")[param_00]); +} + +//Function Number: 14 +getsolevelcompleted(param_00) +{ + return int(level.player getlocalplayerprofiledata("missionSOHighestDifficulty")[param_00]); +} + +//Function Number: 15 +setsolevelcompleted(param_00) +{ + foreach(var_02 in level.players) + { + if(isdefined(var_02.eog_noreward) && var_02.eog_noreward) + { + continue; + } + + var_03 = var_02 getlocalplayerprofiledata("missionSOHighestDifficulty"); + if(!isdefined(var_03)) + { + continue; + } + + if(isdefined(var_02.award_no_stars)) + { + continue; + } + + var_04 = 0; + for(var_05 = 0;var_05 < var_03.size;var_05++) + { + var_04 = var_04 + max(0,int(var_03[var_05]) - 1); + } + + if(var_03.size == 0) + { + var_03 = "00000000000000000000000000000000000000000000000000"; + } + + while(param_00 >= var_03.size) + { + var_03 = var_03 + "0"; + } + + var_06 = 0; + if(maps\_utility::is_survival()) + { + var_06 = 0; + } + else + { + var_06 = level.so_enable_wait_for_players; + if(isdefined(var_02.forcedgameskill)) + { + var_06 = var_02.forcedgameskill; + } + } + + if(int(var_03[param_00]) > var_06) + { + continue; + } + + var_07 = ""; + for(var_08 = 0;var_08 < var_03.size;var_08++) + { + if(var_08 != param_00) + { + var_07 = var_07 + var_03[var_08]; + continue; + } + + var_07 = var_07 + var_06 + 1; + } + + var_09 = 0; + for(var_05 = 0;var_05 < var_07.size;var_05++) + { + var_09 = var_09 + max(0,int(var_07[var_05]) - 1); + } + + var_0A = var_09 - var_04; + if(var_0A > 0) + { + var_02.var_196A = is_first_difficulty_star(var_07); + var_02.var_196B = 1; + var_02.var_196C = var_0A; + foreach(var_0C in level.eog_firststar) + { + if(var_0C.eog_newstar == 0) + { + continue; + } + + if(level.ps3 && issplitscreen() && isdefined(level.player2) && var_02 == level.player2) + { + continue; + } + + if(var_04 < var_0C.eog_newstar && var_09 >= var_0C.eog_newstar) + { + var_02.var_196D = 1; + var_02.var_196E = var_0C.ref; + } + } + + if(var_09 >= 48) + { + var_02.var_196D = 1; + var_02.var_196E = "so_completed"; + maps\_utility::music_stop(1); + } + } + + if(var_02 maps\_specialops_code::can_save_to_profile() || issplitscreen() && level.ps3 && isdefined(level.player2) && var_02 == level.player2) + { + var_02 setlocalplayerprofiledata("missionSOHighestDifficulty",var_07); + } + } +} + +//Function Number: 16 +is_first_difficulty_star(param_00) +{ + if(!maps\_utility::is_survival()) + { + if(int(tablelookup("sp/specOpsTable.csv",1,level.script,14)) == 0) + { + return 0; + } + } + + var_01 = int(tablelookup("sp/specopstable.csv",0,"survival_count",1)); + var_02 = int(tablelookup("sp/specopstable.csv",0,"mission_count",1)); + var_03 = var_01 + var_02; + var_04 = 0; + if(maps\_utility::is_survival()) + { + for(var_05 = 0;var_05 < var_01;var_05++) + { + var_04 = var_04 + int(max(0,int(param_00[var_05]) - 1)); + } + } + else + { + for(var_05 = var_02;var_05 < var_03;var_05++) + { + var_04 = var_04 + int(max(0,int(param_00[var_05]) - 1)); + } + } + + return var_04 == 1; +} + +//Function Number: 17 +setlevelcompleted(param_00) +{ + var_01 = level.player getlocalplayerprofiledata("missionHighestDifficulty"); + var_02 = ""; + for(var_03 = 0;var_03 < var_01.size;var_03++) + { + if(var_03 != param_00) + { + var_02 = var_02 + var_01[var_03]; + continue; + } + + if(level.gameskill + 1 > int(var_01[param_00])) + { + var_02 = var_02 + level.gameskill + 1; + continue; + } + + var_02 = var_02 + var_01[var_03]; + } + + var_04 = ""; + var_05 = 0; + var_06 = 0; + for(var_07 = 0;var_07 < var_02.size;var_07++) + { + if(int(var_02[var_07]) == 0 || var_05) + { + var_04 = var_04 + "0"; + var_05 = 1; + continue; + } + + var_04 = var_04 + var_02[var_07]; + var_06++; + } + + _sethighestmissionifnotcheating(var_06); + _setmissiondiffstringifnotcheating(var_04); +} + +//Function Number: 18 +_sethighestmissionifnotcheating(param_00) +{ + if(getdvar("mis_cheat") == "1") + { + return; + } + + level.player setlocalplayerprofiledata("highestMission",param_00); +} + +//Function Number: 19 +_setmissiondiffstringifnotcheating(param_00) +{ + if(getdvar("mis_cheat") == "1") + { + return; + } + + level.player setlocalplayerprofiledata("missionHighestDifficulty",param_00); +} + +//Function Number: 20 +getlevelskill(param_00) +{ + var_01 = level.player getlocalplayerprofiledata("missionHighestDifficulty"); + return int(var_01[param_00]); +} + +//Function Number: 21 +getmissiondvarstring(param_00) +{ + if(param_00 < 9) + { + return "mis_0" + param_00 + 1; + } + + return "mis_" + param_00 + 1; +} + +//Function Number: 22 +getlowestskill() +{ + var_00 = level.player getlocalplayerprofiledata("missionHighestDifficulty"); + var_01 = 4; + for(var_02 = 0;var_02 < self.levels.size;var_02++) + { + if(int(var_00[var_02]) < var_01) + { + var_01 = int(var_00[var_02]); + } + } + + return var_01; +} + +//Function Number: 23 +createmission(param_00) +{ + var_01 = spawnstruct(); + var_01.levels = []; + var_01.prereqs = []; + var_01.hardenedaward = param_00; + return var_01; +} + +//Function Number: 24 +addlevel(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + var_07 = self.levels.size; + self.levels[var_07] = spawnstruct(); + self.levels[var_07].name = param_00; + self.levels[var_07].var_197A = param_01; + self.levels[var_07].var_197B = param_02; + self.levels[var_07].skipssuccess = param_03; + self.levels[var_07].fade_time = param_04; + if(isdefined(param_05)) + { + self.levels[var_07].completedindex = param_05; + } +} + +//Function Number: 25 +addspecoplevel(param_00,param_01) +{ + if(isdefined(param_01)) + { + var_02 = param_01; + } + else + { + var_02 = self.levels.size; + } + + self.levels[var_02] = spawnstruct(); + self.levels[var_02].name = param_00; + var_03 = tablelookup("sp/specopstable.csv",1,param_00,13); + if(var_03 == "") + { + return; + } + + if(!isdefined(level.eog_firststar[var_03].group_members)) + { + level.eog_firststar[var_03].group_members = []; + } + + var_04 = level.eog_firststar[var_03].group_members.size; + level.eog_firststar[var_03].group_members[var_04] = param_00; +} + +//Function Number: 26 +addprereq(param_00) +{ + var_01 = self.prereqs.size; + self.prereqs[var_01] = param_00; +} + +//Function Number: 27 +getlevelindex(param_00) +{ + foreach(var_03, var_02 in self.levels) + { + if(var_02.name == param_00) + { + return var_03; + } + } + + return undefined; +} + +//Function Number: 28 +getlevelname(param_00) +{ + return self.levels[param_00].name; +} + +//Function Number: 29 +getkeepweapons(param_00) +{ + return self.levels[param_00].var_197A; +} + +//Function Number: 30 +getachievement(param_00) +{ + return self.levels[param_00].var_197B; +} + +//Function Number: 31 +getlevelveteranaward(param_00) +{ + return self.levels[param_00].fade_time; +} + +//Function Number: 32 +getfadetime(param_00) +{ + if(!isdefined(self.levels[param_00].completedindex)) + { + return undefined; + } + + return self.levels[param_00].completedindex; +} + +//Function Number: 33 +haslevelveteranaward(param_00) +{ + if(isdefined(self.levels[param_00].fade_time)) + { + return 1; + } + + return 0; +} + +//Function Number: 34 +hasachievement(param_00) +{ + if(isdefined(self.levels[param_00].var_197B)) + { + return 1; + } + + return 0; +} + +//Function Number: 35 +check_other_haslevelveteranachievement(param_00) +{ + for(var_01 = 0;var_01 < self.levels.size;var_01++) + { + if(var_01 == param_00) + { + continue; + } + + if(!haslevelveteranaward(var_01)) + { + continue; + } + + if(self.levels[var_01].fade_time == self.levels[param_00].fade_time) + { + if(getlevelcompleted(var_01) < 4) + { + return 0; + } + } + } + + return 1; +} + +//Function Number: 36 +skipssuccess(param_00) +{ + if(!isdefined(self.levels[param_00].skipssuccess)) + { + return 0; + } + + return 1; +} + +//Function Number: 37 +gethardenedaward() +{ + return self.hardenedaward; +} + +//Function Number: 38 +hasmissionhardenedaward() +{ + if(isdefined(self.hardenedaward)) + { + return 1; + } + + return 0; +} + +//Function Number: 39 +getnextlevelindex() +{ + for(var_00 = 0;var_00 < self.levels.size;var_00++) + { + if(!getlevelskill(var_00)) + { + return var_00; + } + } + + return 0; +} + +//Function Number: 40 +force_all_complete() +{ + var_00 = level.player getlocalplayerprofiledata("missionHighestDifficulty"); + var_01 = ""; + for(var_02 = 0;var_02 < var_00.size;var_02++) + { + if(var_02 < 20) + { + var_01 = var_01 + 2; + continue; + } + + var_01 = var_01 + 0; + } + + level.player setlocalplayerprofiledata("missionHighestDifficulty",var_01); + level.player setlocalplayerprofiledata("highestMission",20); +} + +//Function Number: 41 +clearall() +{ + level.player setlocalplayerprofiledata("missionHighestDifficulty","00000000000000000000000000000000000000000000000000"); + level.player setlocalplayerprofiledata("highestMission",1); +} + +//Function Number: 42 +credits_end() +{ + changelevel("airplane",0); +} + +//Function Number: 43 +so_eog_summary_calculate(param_00) +{ + if(!isdefined(self.so_eog_summary_data)) + { + self.so_eog_summary_data = []; + } + + if(!isdefined(level.challenge_start_time)) + { + level.challenge_start_time = 0; + level.challenge_end_time = 0; + } + + var_01 = min(level.challenge_end_time - level.challenge_start_time,86400000); + var_01 = maps\_utility::round_millisec_on_sec(var_01,1,0); + foreach(var_03 in level.players) + { + var_03.so_eog_summary_data["time"] = var_01; + var_03.so_eog_summary_data["name"] = var_03.var_794; + var_03.so_eog_summary_data["difficulty"] = var_03 maps\_utility::get_player_gameskill(); + if(isdefined(var_03.forcedgameskill)) + { + var_03.so_eog_summary_data["difficulty"] = var_03.forcedgameskill; + } + } + + level.var_16C4 = 0; + if(maps\_utility::is_survival()) + { + foreach(var_03 in level.players) + { + var_03.so_eog_summary_data["score"] = [[ level.var_1990 ]](); + var_03.so_eog_summary_data["wave"] = [[ level.var_1991 ]](); + var_03.so_eog_summary_data["kills"] = var_03.game_performance["kill"]; + } + + level.var_16C4 = [[ level.var_1990 ]](); + } + else + { + var_07 = 300000; + if(isdefined(level.var_16CB)) + { + var_07 = level.var_16CB; + } + + var_08 = 0; + if(var_01 < var_07) + { + var_08 = int(var_07 - var_01 / var_07 * 10000); + } + + level.var_16C4 = int(level.so_enable_wait_for_players * 10000) + var_08; + foreach(var_03 in level.players) + { + var_03.so_eog_summary_data["kills"] = var_03.stats["kills"]; + var_03.so_eog_summary_data["score"] = level.var_16C4; + } + } + + if(!isdefined(level.var_16BC) || !level.var_16BC) + { + foreach(var_03 in level.players) + { + if(maps\_utility::is_coop()) + { + var_03.eog_line = 4; + continue; + } + + var_03.eog_line = 3; + } + } + + if(isdefined(level.var_16BD)) + { + [[ level.var_16BD ]](); + } + + if(param_00) + { + common_scripts\utility::flag_set("special_op_final_xp_given"); + foreach(var_03 in level.players) + { + var_0E = calculate_xp(var_03.so_eog_summary_data["score"]); + var_0F = 0; + if(isdefined(level.never_played) && level.never_played) + { + var_03 thread maps\_utility::givexp("completion_xp"); + var_0F = maps\_rank::getscoreinfovalue("completion_xp"); + } + else + { + var_10 = undefined; + var_11 = tablelookup("sp/specOpsTable.csv",1,level.script,9); + if(isdefined(var_11) && var_11 != "") + { + var_10 = var_03 getlocalplayerprofiledata(var_11); + } + + if(isdefined(var_10) && var_10 == 0 && !maps\_utility::is_survival()) + { + var_03 thread maps\_utility::givexp("completion_xp"); + var_0F = maps\_rank::getscoreinfovalue("completion_xp"); + } + } + + if(!maps\_utility::is_survival()) + { + var_12 = var_0F + var_0E; + if(var_03.summary["rankxp"] < level.maxxp) + { + if(var_0F != 0) + { + var_03 thread maps\_utility::add_custom_eog_summary_line("@SPECIAL_OPS_UI_XP_COMPLETION_FRIST_TIME","^8+" + var_0F,"@SPECIAL_OPS_UI_XP_COMPLETION","^8+" + var_12); + } + else + { + var_03 thread maps\_utility::add_custom_eog_summary_line("@SPECIAL_OPS_UI_XP_COMPLETION","","^8+" + var_12); + } + } + + var_03 thread maps\_utility::givexp("final_score_xp",var_0E); + } + } + } + + if(!isdefined(level.var_16BC) || !level.var_16BC) + { + add_eog_default_stats(); + } +} + +//Function Number: 44 +calculate_xp(param_00) +{ + return int(param_00 / 10); +} + +//Function Number: 45 +so_eog_summary_display() +{ + if(isdefined(level.eog_summary_delay) && level.eog_summary_delay > 0) + { + wait level.eog_summary_delay; + } + + thread maps\_ambient::use_eq_settings("specialop_fadeout",level.eq_mix_track); + thread maps\_ambient::blend_to_eq_track(level.eq_mix_track,10); + reset_eog_popup_dvars(); + if(isdefined(level.player.var_196A) && level.player.var_196A) + { + setdvar("ui_first_star_player1",level.player.var_196A); + } + + if(isdefined(level.player.var_196B) && level.player.var_196B) + { + setdvar("ui_eog_player1_stars",level.player.var_196C); + } + + if(isdefined(level.player.var_196D) && level.player.var_196D) + { + setdvar("ui_eog_player1_unlock",level.player.var_196E); + } + + if(isdefined(level.player.eog_bestscore) && level.player.eog_bestscore) + { + setdvar("ui_eog_player1_bestscore",level.player.eog_bestscore_value); + } + + if(maps\_utility::is_coop()) + { + if(isdefined(level.player.eog_noreward) && level.player.eog_noreward) + { + setdvar("ui_eog_player1_noreward",level.player.eog_noreward); + } + + if(isdefined(level.player2.var_196A) && level.player2.var_196A) + { + setdvar("ui_first_star_player2",level.player2.var_196A); + } + + if(isdefined(level.player2.var_196B) && level.player2.var_196B) + { + setdvar("ui_eog_player2_stars",level.player2.var_196C); + } + + if(isdefined(level.player2.var_196D) && level.player2.var_196D) + { + setdvar("ui_eog_player2_unlock",level.player2.var_196E); + } + + if(isdefined(level.player2.eog_noreward) && level.player2.eog_noreward) + { + setdvar("ui_eog_player2_noreward",level.player2.eog_noreward); + } + + if(isdefined(level.player2.eog_bestscore) && level.player2.eog_bestscore) + { + setdvar("ui_eog_player2_bestscore",level.player2.eog_bestscore_value); + } + + wait 0.05; + level.player openpopupmenu("coop_eog_summary"); + level.player2 openpopupmenu("coop_eog_summary2"); + return; + } + + wait 0.05; + level.player openpopupmenu("sp_eog_summary"); +} + +//Function Number: 46 +reset_eog_popup_dvars() +{ + setdvar("ui_eog_player1_stars",""); + setdvar("ui_eog_player1_unlock",""); + setdvar("ui_eog_player1_besttime",""); + setdvar("ui_eog_player1_bestscore",""); + setdvar("ui_eog_player1_noreward",""); + setdvar("ui_eog_player2_stars",""); + setdvar("ui_eog_player2_unlock",""); + setdvar("ui_eog_player2_besttime",""); + setdvar("ui_eog_player2_bestscore",""); + setdvar("ui_eog_player2_noreward",""); +} + +//Function Number: 47 +add_eog_default_stats() +{ + foreach(var_01 in level.players) + { + var_01 so_eog_default_playerlabel(); + var_01 so_eog_default_kills(); + var_01 so_eog_default_time(); + var_01 so_eog_default_difficulty(); + if(!level.missionfailed) + { + var_01 so_eog_default_score(); + } + } +} + +//Function Number: 48 +so_eog_default_playerlabel() +{ + if(maps\_utility::is_coop()) + { + maps\_utility::add_custom_eog_summary_line("","@SPECIAL_OPS_PERFORMANCE_YOU","@SPECIAL_OPS_PERFORMANCE_PARTNER",undefined,1); + } +} + +//Function Number: 49 +so_eog_default_kills() +{ + var_00 = self.so_eog_summary_data["kills"]; + if(maps\_utility::is_coop()) + { + var_01 = maps\_utility::get_other_player(self).so_eog_summary_data["kills"]; + maps\_utility::add_custom_eog_summary_line("@SPECIAL_OPS_UI_KILLS",var_00,var_01,undefined,2); + return; + } + + maps\_utility::add_custom_eog_summary_line("@SPECIAL_OPS_UI_KILLS",var_00,undefined,undefined,1); +} + +//Function Number: 50 +so_eog_default_difficulty() +{ + var_00[0] = "@MENU_RECRUIT"; + var_01 = maps\_utility::get_player_gameskill(); + maps\_utility::add_custom_eog_summary_line("@SPECIAL_OPS_UI_DIFFICULTY",var_01,undefined,undefined,2 + int(maps\_utility::is_coop())); +} + +//Function Number: 51 +so_eog_default_time() +{ + var_00 = self.so_eog_summary_data["time"] * 0.001; + var_01 = maps\_utility::convert_to_time_string(var_00,1); + maps\_utility::add_custom_eog_summary_line("@SPECIAL_OPS_UI_TIME",var_01,undefined,undefined,3 + int(maps\_utility::is_coop())); +} + +//Function Number: 52 +so_eog_default_score() +{ + if(maps\_utility::is_coop()) + { + var_00 = "@SPECIAL_OPS_UI_TEAM_SCORE"; + } + else + { + var_00 = "@SPECIAL_OPS_UI_SCORE"; + } + + var_01 = self.so_eog_summary_data["score"]; + maps\_utility::add_custom_eog_summary_line(var_00,var_01); +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_escalator.gsc b/MW3/PC/SP/maps/_escalator.gsc new file mode 100644 index 0000000..a204a7c --- /dev/null +++ b/MW3/PC/SP/maps/_escalator.gsc @@ -0,0 +1,99 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_escalator.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 4 + * Decompile Time: 66 ms + * Timestamp: 10/27/2023 2:22:58 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + common_scripts\utility::flag_init("_escalator_on"); + common_scripts\utility::flag_set("_escalator_on"); + level.escalator_movespeed = 0.5; + var_00 = getentarray("escalator","targetname"); + common_scripts\utility::array_thread(var_00,::escalator_startup); +} + +//Function Number: 2 +escalator_startup() +{ + var_00 = self; + while(isdefined(var_00.target)) + { + var_00 startusinglessfrequentlighting(); + var_00.true_origin = var_00.origin; + var_00.next_step = getent(var_00.target,"targetname"); + var_00 = var_00.next_step; + } + + var_00.true_origin = var_00.origin; + var_00.last = 1; + var_00.next_step = self; + thread escalator_move(self); +} + +//Function Number: 3 +escalator_move(param_00) +{ + var_01 = param_00; + var_02 = var_01.origin; + while(common_scripts\utility::flag("_escalator_on")) + { + var_03 = level.escalator_movespeed; + var_04 = var_01.next_step; + var_01 show(); + if(var_04 != param_00) + { + var_01 moveto(var_04.true_origin,var_03); + } + else + { + var_01.origin = var_02; + } + + if(var_04 == param_00) + { + var_01 hide(); + var_01.true_origin = var_02; + param_00 = var_01; + wait var_03; + continue; + } + + var_01.true_origin = var_04.true_origin; + var_01 = var_04; + } + + var_01 = param_00; + for(;;) + { + var_03 = 2; + var_04 = var_01.next_step; + var_01 show(); + var_01 thread final_move(var_03,var_04); + if(var_04 == param_00) + { + var_01 hide(); + var_01.true_origin = var_02; + } + + var_01.true_origin = var_04.true_origin; + var_01 = var_04; + if(var_01 == param_00) + { + return; + } + } +} + +//Function Number: 4 +final_move(param_00,param_01) +{ + self moveto(param_01.true_origin,param_00,0,param_00); + wait param_00; + self moveto(self.origin,0.05); +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_flare.gsc b/MW3/PC/SP/maps/_flare.gsc new file mode 100644 index 0000000..d3c5fd0 --- /dev/null +++ b/MW3/PC/SP/maps/_flare.gsc @@ -0,0 +1,230 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_flare.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 13 + * Decompile Time: 157 ms + * Timestamp: 10/27/2023 2:20:05 AM +*******************************************************************/ + +//Function Number: 1 +main(param_00,param_01) +{ + if(!isdefined(level._effect)) + { + level._effect = []; + } + + level._effect["flare_runner_intro"] = loadfx("misc/flare_start"); + level._effect["flare_runner"] = loadfx("misc/flare"); + level._effect["flare_runner_fizzout"] = loadfx("misc/flare_end"); + maps\_vehicle::build_template("flare",param_00,param_01,"script_vehicle"); + maps\_vehicle::build_localinit(::init_local); + maps\_vehicle::build_life(9999); +} + +//Function Number: 2 +init_local() +{ +} + +//Function Number: 3 +merge_suncolor(param_00,param_01,param_02,param_03) +{ + wait param_00; + param_01 = param_01 * 20; + var_04 = []; + for(var_05 = 0;var_05 < param_01;var_05++) + { + var_06 = var_05 / param_01; + level.thedif = var_06; + var_07 = []; + for(var_08 = 0;var_08 < 3;var_08++) + { + var_07[var_08] = param_03[var_08] * var_06 + param_02[var_08] * 1 - var_06; + } + + level.sun_color = (var_07[0],var_07[1],var_07[2]); + wait 0.05; + } +} + +//Function Number: 4 +merge_sunsingledvar(param_00,param_01,param_02,param_03,param_04) +{ + setsaveddvar(param_00,param_03); + wait param_01; + param_02 = param_02 * 20; + var_05 = []; + for(var_06 = 0;var_06 < param_02;var_06++) + { + var_07 = var_06 / param_02; + level.thedif = var_07; + var_08 = param_04 * var_07 + param_03 * 1 - var_07; + setsaveddvar(param_00,var_08); + wait 0.05; + } + + setsaveddvar(param_00,param_04); +} + +//Function Number: 5 +merge_sunbrightness(param_00,param_01,param_02,param_03) +{ + wait param_00; + param_01 = param_01 * 20; + var_04 = []; + for(var_05 = 0;var_05 < param_01;var_05++) + { + var_06 = var_05 / param_01; + level.thedif = var_06; + var_07 = param_03 * var_06 + param_02 * 1 - var_06; + level.sun_brightness = var_07; + wait 0.05; + } + + level.sun_brightness = param_03; +} + +//Function Number: 6 +combine_sunlight_and_brightness() +{ + level endon("stop_combining_sunlight_and_brightness"); + wait 0.05; + for(;;) + { + var_00 = level.sun_brightness; + if(var_00 > 1) + { + var_00 = var_00 + randomfloat(0.2); + } + + var_01 = level.sun_color * var_00; + setsunlight(var_01[0],var_01[1],var_01[2]); + wait 0.05; + } +} + +//Function Number: 7 +flare_path() +{ + thread maps\_vehicle::gopath(self); + common_scripts\utility::flag_wait("flare_stop_setting_sundir"); + self delete(); +} + +//Function Number: 8 +flare_initial_fx() +{ + var_00 = spawn("script_model",(0,0,0)); + var_00 setmodel("tag_origin"); + var_00 linkto(self,"tag_origin",(0,0,0),(0,0,0)); + playfxontag(level._effect["flare_runner_intro"],var_00,"tag_origin"); + self waittillmatch("flare_intro_node","noteworthy"); + var_00 delete(); +} + +//Function Number: 9 +flare_explodes() +{ + common_scripts\utility::flag_set("flare_start_setting_sundir"); + level.sun_brightness = 1; + level.red_suncolor = (0.8,0.4,0.4); + level.original_suncolor = getmapsunlight(); + level.sun_color = level.original_suncolor; + thread merge_sunsingledvar("sm_sunSampleSizeNear",0,0.25,0.25,1); + thread combine_sunlight_and_brightness(); + thread merge_suncolor(0,0.25,level.original_suncolor,level.red_suncolor); + thread merge_sunbrightness(0,0.25,1,3); + var_00 = spawn("script_model",(0,0,0)); + var_00 setmodel("tag_origin"); + var_00 linkto(self,"tag_origin",(0,0,0),(0,0,0)); + playfxontag(level._effect["flare_runner"],var_00,"tag_origin"); + self waittillmatch("flare_fade_node","noteworthy"); + var_00 delete(); +} + +//Function Number: 10 +flare_burns_out() +{ + var_00 = spawn("script_model",(0,0,0)); + var_00 setmodel("tag_origin"); + var_00 linkto(self,"tag_origin",(0,0,0),(0,0,0)); + playfxontag(level._effect["flare_runner_fizzout"],var_00,"tag_origin"); + thread merge_sunsingledvar("sm_sunSampleSizeNear",0,1,1,0.25); + thread merge_sunbrightness(0,1,3,0); + thread merge_suncolor(0,1,level.red_suncolor,level.original_suncolor); + thread merge_sunbrightness(1,1,0,1); + var_00 delete(); + wait 1; + common_scripts\utility::flag_set("flare_stop_setting_sundir"); + resetsundirection(); + wait 1; + level notify("stop_combining_sunlight_and_brightness"); + waittillframeend; + resetsunlight(); + common_scripts\utility::flag_set("flare_complete"); +} + +//Function Number: 11 +flare_fx() +{ + flare_initial_fx(); + flare_explodes(); + flare_burns_out(); +} + +//Function Number: 12 +flag_flare(param_00) +{ + if(!isdefined(level.flag[param_00])) + { + common_scripts\utility::flag_init(param_00); + } +} + +//Function Number: 13 +flare_from_targetname(param_00) +{ + var_01 = maps\_vehicle::spawn_vehicle_from_targetname(param_00); + flag_flare("flare_in_use"); + flag_flare("flare_complete"); + flag_flare("flare_stop_setting_sundir"); + flag_flare("flare_start_setting_sundir"); + common_scripts\utility::flag_waitopen("flare_in_use"); + common_scripts\utility::flag_set("flare_in_use"); + resetsunlight(); + resetsundirection(); + var_01 thread flare_path(); + var_01 thread flare_fx(); + var_02 = getmapsundirection(); + var_03 = var_02; + var_04 = var_03 * -100; + common_scripts\utility::flag_wait("flare_start_setting_sundir"); + var_05 = getent(var_01.script_linkto,"script_linkname").origin; + var_03 = vectortoangles(var_01.origin - var_05); + var_06 = anglestoforward(var_03); + for(;;) + { + wait 0.05; + if(common_scripts\utility::flag("flare_stop_setting_sundir")) + { + break; + } + + var_03 = vectortoangles(var_01.origin - var_05); + var_07 = anglestoforward(var_03); + lerpsundirection(var_06,var_07,0.05); + var_06 = var_07; + } + + common_scripts\utility::flag_wait("flare_complete"); + waittillframeend; + common_scripts\utility::flag_clear("flare_complete"); + common_scripts\utility::flag_clear("flare_stop_setting_sundir"); + common_scripts\utility::flag_clear("flare_start_setting_sundir"); + resetsunlight(); + resetsundirection(); + common_scripts\utility::flag_clear("flare_in_use"); +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_float.gsc b/MW3/PC/SP/maps/_float.gsc new file mode 100644 index 0000000..2e89a2a --- /dev/null +++ b/MW3/PC/SP/maps/_float.gsc @@ -0,0 +1,120 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_float.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 5 + * Decompile Time: 57 ms + * Timestamp: 10/27/2023 2:20:06 AM +*******************************************************************/ + +//Function Number: 1 +main(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = getentarray("script_floater","targetname"); + if(!var_05.size) + { + return; + } + + var_06 = 10; + var_07 = 0.5; + var_08 = 50; + var_09 = (0,0,0); + var_0A = 10; + if(isdefined(param_00)) + { + var_06 = param_00; + } + + if(isdefined(param_01)) + { + var_07 = param_01; + } + + if(isdefined(param_02)) + { + var_08 = param_02; + } + + if(isdefined(param_04)) + { + var_09 = param_04; + } + + if(isdefined(param_03)) + { + var_0A = param_03; + } + + for(var_0B = 0;var_0B < var_05.size;var_0B++) + { + var_05[var_0B] thread floater_think(var_06,var_07,var_08,var_0A,var_09); + } +} + +//Function Number: 2 +floater_think(param_00,param_01,param_02,param_03,param_04) +{ + self.range = param_00; + self.time = 1 / param_01; + self.acc = self.time * 0.25; + var_05 = self getorigin(); + var_06 = 360 / param_02; + var_07 = distance(var_05,param_04); + var_08 = var_07 * var_06; + var_09 = sin(var_08); + if(cos(var_08) < 0) + { + self.range = -1 * self.range; + } + + var_0A = spawn("script_origin",var_05); + self linkto(var_0A); + var_0B = vectortoangles(var_05 - param_04); + self.nangles = var_0A.angles; + var_0A.angles = var_0A.angles + (param_03,param_03 * 0.25,var_0B[2]); + self.rangles = var_0A.angles; + thread floater_move(var_09,var_0A); + thread floater_bob(var_09,var_0A); +} + +//Function Number: 3 +floater_bob(param_00,param_01) +{ + self endon("death"); + self endon("stop_float_script"); + wait abval(self.time * param_00); + for(;;) + { + self.rangles = self.rangles * -1; + param_01 rotateto(self.rangles,self.time,self.acc,self.acc); + param_01 waittill("rotatedone"); + } +} + +//Function Number: 4 +floater_move(param_00,param_01) +{ + self endon("death"); + self endon("stop_float_script"); + wait abval(self.time * param_00); + param_01 movez(self.range * 0.5,self.time * 0.5,self.acc,self.acc); + for(;;) + { + param_01 waittill("movedone"); + self.range = -1 * self.range; + param_01 movez(self.range,self.time,self.acc,self.acc); + } +} + +//Function Number: 5 +abval(param_00) +{ + if(param_00 < 0) + { + return -1 * param_00; + } + + return param_00; +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_friendlyfire.gsc b/MW3/PC/SP/maps/_friendlyfire.gsc new file mode 100644 index 0000000..9a0f1fe --- /dev/null +++ b/MW3/PC/SP/maps/_friendlyfire.gsc @@ -0,0 +1,444 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_friendlyfire.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 15 + * Decompile Time: 246 ms + * Timestamp: 10/27/2023 2:22:59 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + level.friendlyfire["min_participation"] = -200; + level.friendlyfire["max_participation"] = 1000; + level.friendlyfire["enemy_kill_points"] = 250; + level.friendlyfire["friend_kill_points"] = -650; + level.friendlyfire["point_loss_interval"] = 1.25; + level.player.participation = 0; + level.friendlyfiredisabled = 0; + level.friendlyfiredisabledfordestructible = 0; + setdvarifuninitialized("friendlyfire_dev_disabled","0"); + common_scripts\utility::flag_init("friendly_fire_warning"); + thread debug_friendlyfire(); + thread participation_point_flattenovertime(); +} + +//Function Number: 2 +debug_friendlyfire() +{ +} + +//Function Number: 3 +friendly_fire_think(param_00) +{ + if(!isdefined(param_00)) + { + return; + } + + if(!isdefined(param_00.team)) + { + param_00.team = "allies"; + } + + if(isdefined(level.no_friendly_fire_penalty)) + { + return; + } + + level endon("mission failed"); + level thread notifydamage(param_00); + level thread notifydamagenotdone(param_00); + level thread notifydeath(param_00); + for(;;) + { + if(!isdefined(param_00)) + { + return; + } + + if(param_00.health <= 0) + { + return; + } + + var_01 = undefined; + var_02 = undefined; + var_03 = undefined; + var_04 = undefined; + var_05 = undefined; + var_06 = undefined; + var_07 = undefined; + param_00 waittill("friendlyfire_notify",var_01,var_02,var_03,var_04,var_05,var_06); + if(!isdefined(param_00)) + { + return; + } + + if(!isdefined(var_02)) + { + continue; + } + + var_08 = 0; + if(!isdefined(var_06)) + { + var_06 = param_00.damageweapon; + } + + if(isdefined(level.friendlyfire_destructible_attacker)) + { + if(isdefined(var_02.damageowner)) + { + var_07 = 1; + var_02 = var_02.damageowner; + } + } + + if(isplayer(var_02)) + { + var_08 = 1; + if(isdefined(var_06) && var_06 == "none") + { + var_08 = 0; + } + + if(var_02 isusingturret()) + { + var_08 = 1; + } + + if(isdefined(var_07)) + { + var_08 = 1; + } + } + else if(isdefined(var_02.code_classname) && var_02.code_classname == "script_vehicle") + { + var_09 = var_02 getvehicleowner(); + if(isdefined(var_09) && isplayer(var_09)) + { + var_08 = 1; + } + } + + if(!var_08) + { + continue; + } + + if(!isdefined(param_00.team)) + { + continue; + } + + var_0A = param_00.team == level.player.team; + var_0B = undefined; + if(level.script == "airport") + { + var_0B = 0; + } + else if(isdefined(param_00.type) && param_00.type == "civilian") + { + var_0B = 1; + } + else + { + var_0B = issubstr(param_00.classname,"civilian"); + } + + var_0C = var_01 == -1; + if(!var_0A && !var_0B) + { + if(var_0C) + { + level.player.participation = level.player.participation + level.friendlyfire["enemy_kill_points"]; + participation_point_cap(); + return; + } + + continue; + } + + if(isdefined(param_00.no_friendly_fire_penalty)) + { + continue; + } + + if(var_05 == "MOD_PROJECTILE_SPLASH" && isdefined(level.no_friendly_fire_splash_damage)) + { + continue; + } + + if(isdefined(var_06) && var_06 == "claymore") + { + continue; + } + + if(var_0C) + { + if(isdefined(param_00.friend_kill_points)) + { + level.player.participation = level.player.participation + param_00.friend_kill_points; + } + else + { + level.player.participation = level.player.participation + level.friendlyfire["friend_kill_points"]; + } + } + else + { + level.player.participation = level.player.participation - var_01; + } + + participation_point_cap(); + if(check_grenade(param_00,var_05) && savecommit_aftergrenade()) + { + if(var_0C) + { + return; + } + else + { + continue; + } + } + + if(isdefined(level.friendly_fire_fail_check)) + { + [[ level.friendly_fire_fail_check ]](param_00,var_01,var_02,var_03,var_04,var_05,var_06); + continue; + } + + friendly_fire_checkpoints(var_0B); + } +} + +//Function Number: 4 +friendly_fire_checkpoints(param_00) +{ + if(isdefined(level.failonfriendlyfire) && level.failonfriendlyfire) + { + level thread missionfail(param_00); + return; + } + + var_01 = level.friendlyfiredisabledfordestructible; + if(isdefined(level.friendlyfire_destructible_attacker) && param_00) + { + var_01 = 0; + } + + if(var_01) + { + return; + } + + if(level.friendlyfiredisabled == 1) + { + return; + } + + if(level.player.participation <= level.friendlyfire["min_participation"]) + { + level thread missionfail(param_00); + } +} + +//Function Number: 5 +check_grenade(param_00,param_01) +{ + if(!isdefined(param_00)) + { + return 0; + } + + var_02 = 0; + if(isdefined(param_00.damageweapon) && param_00.damageweapon == "none") + { + var_02 = 1; + } + + if(isdefined(param_01) && param_01 == "MOD_GRENADE_SPLASH") + { + var_02 = 1; + } + + return var_02; +} + +//Function Number: 6 +savecommit_aftergrenade() +{ + var_00 = gettime(); + if(var_00 < 4500) + { + return 1; + } + else if(var_00 - level.lastautosavetime < 4500) + { + return 1; + } + + return 0; +} + +//Function Number: 7 +participation_point_cap() +{ + if(level.player.participation > level.friendlyfire["max_participation"]) + { + level.player.participation = level.friendlyfire["max_participation"]; + } + + if(level.player.participation < level.friendlyfire["min_participation"]) + { + level.player.participation = level.friendlyfire["min_participation"]; + } +} + +//Function Number: 8 +participation_point_flattenovertime() +{ + level endon("mission failed"); + for(;;) + { + if(level.player.participation > 0) + { + level.player.participation--; + } + else if(level.player.participation < 0) + { + level.player.participation++; + } + + wait level.friendlyfire["point_loss_interval"]; + } +} + +//Function Number: 9 +turnbackon() +{ + level.friendlyfiredisabled = 0; +} + +//Function Number: 10 +turnoff() +{ + level.friendlyfiredisabled = 1; +} + +//Function Number: 11 +missionfail(param_00) +{ + if(!isdefined(param_00)) + { + param_00 = 0; + } + + if(level.script == "airport") + { + if(param_00) + { + return; + } + + common_scripts\utility::flag_set("friendly_fire_warning"); + return; + } + + if(getdvar("friendlyfire_dev_disabled") == "1") + { + return; + } + + level.player endon("death"); + if(!isalive(level.player)) + { + return; + } + + level endon("mine death"); + level notify("mission failed"); + level notify("friendlyfire_mission_fail"); + waittillframeend; + setsaveddvar("hud_missionFailed",1); + if(isdefined(level.player.failingmission)) + { + return; + } + + if(param_00) + { + setdvar("ui_deadquote",&"SCRIPT_MISSIONFAIL_CIVILIAN_KILLED"); + } + else if(isdefined(level.custom_friendly_fire_message)) + { + setdvar("ui_deadquote",level.custom_friendly_fire_message); + } + else if(level.campaign == "british") + { + setdvar("ui_deadquote",&"SCRIPT_MISSIONFAIL_KILLTEAM_BRITISH"); + } + else if(level.campaign == "russian") + { + setdvar("ui_deadquote",&"SCRIPT_MISSIONFAIL_KILLTEAM_RUSSIAN"); + } + else + { + setdvar("ui_deadquote",&"SCRIPT_MISSIONFAIL_KILLTEAM_AMERICAN"); + } + + if(isdefined(level.custom_friendly_fire_shader)) + { + thread maps\_load::special_death_indicator_hudelement(level.custom_friendly_fire_shader,64,64,0); + } + + reconspatialevent(level.player.origin,"script_friendlyfire: civilian %d",param_00); + maps\_utility::missionfailedwrapper(); +} + +//Function Number: 12 +notifydamage(param_00) +{ + level endon("mission failed"); + param_00 endon("death"); + for(;;) + { + var_01 = undefined; + var_02 = undefined; + var_03 = undefined; + var_04 = undefined; + var_05 = undefined; + var_06 = undefined; + var_07 = undefined; + var_08 = undefined; + var_09 = undefined; + var_0A = undefined; + param_00 waittill("damage",var_01,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09,var_0A); + param_00 notify("friendlyfire_notify",var_01,var_02,var_03,var_04,var_05,var_0A); + } +} + +//Function Number: 13 +notifydamagenotdone(param_00) +{ + level endon("mission failed"); + param_00 waittill("damage_notdone",var_01,var_02,var_03,var_04,var_05); + param_00 notify("friendlyfire_notify",-1,var_02,undefined,undefined,var_05); +} + +//Function Number: 14 +notifydeath(param_00) +{ + level endon("mission failed"); + param_00 waittill("death",var_01,var_02,var_03); + param_00 notify("friendlyfire_notify",-1,var_01,undefined,undefined,var_02,var_03); +} + +//Function Number: 15 +detectfriendlyfireonentity(param_00) +{ +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_fx.gsc b/MW3/PC/SP/maps/_fx.gsc new file mode 100644 index 0000000..e983eae --- /dev/null +++ b/MW3/PC/SP/maps/_fx.gsc @@ -0,0 +1,223 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_fx.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 10 + * Decompile Time: 149 ms + * Timestamp: 10/27/2023 2:23:05 AM +*******************************************************************/ + +//Function Number: 1 +script_print_fx() +{ + if(!isdefined(self.script_fxid) || !isdefined(self.script_fxcommand) || !isdefined(self.script_delay)) + { + self delete(); + return; + } + + if(isdefined(self.target)) + { + var_00 = getent(self.target).origin; + } + else + { + var_00 = "undefined"; + } + + if(self.script_fxcommand == "OneShotfx") + { + } + + if(self.script_fxcommand == "loopfx") + { + } + + if(self.script_fxcommand == "loopsound") + { + } +} + +//Function Number: 2 +script_playfx(param_00,param_01,param_02) +{ + if(!param_00) + { + return; + } + + if(isdefined(param_02)) + { + playfx(param_00,param_01,param_02); + return; + } + + playfx(param_00,param_01); +} + +//Function Number: 3 +script_playfxontag(param_00,param_01,param_02) +{ + if(!param_00) + { + return; + } + + playfxontag(param_00,param_01,param_02); +} + +//Function Number: 4 +grenadeexplosionfx(param_00) +{ + playfx(level._effect["mechanical explosion"],param_00); + earthquake(0.15,0.5,param_00,250); +} + +//Function Number: 5 +soundfx(param_00,param_01,param_02) +{ + var_03 = spawn("script_origin",(0,0,0)); + var_03.origin = param_01; + var_03 playloopsound(param_00); + if(isdefined(param_02)) + { + var_03 thread soundfxdelete(param_02); + } +} + +//Function Number: 6 +soundfxdelete(param_00) +{ + level waittill(param_00); + self delete(); +} + +//Function Number: 7 +rainfx(param_00,param_01,param_02) +{ + var_03 = spawn("script_origin",(0,0,0)); + var_03.origin = param_02; + var_03 thread rainloop(param_00,param_01); +} + +//Function Number: 8 +rainloop(param_00,param_01) +{ + self endon("death"); + var_02 = spawn("sound_blend",(0,0,0)); + var_02.origin = self.origin; + thread blenddelete(var_02); + var_03 = spawn("sound_blend",(0,0,0)); + var_03.origin = self.origin; + thread blenddelete(var_03); + var_02 setsoundblend(param_01 + "_null",param_01,0); + var_03 setsoundblend(param_00 + "_null",param_00,1); + var_04 = "hard"; + var_05 = undefined; + for(;;) + { + level waittill("rain_change",var_06,var_05); + var_05 = var_05 * 20; + if(var_06 == "hard") + { + if(var_04 == "none") + { + var_05 = var_05 * 0.5; + for(var_07 = 0;var_07 < var_05;var_07++) + { + var_02 setsoundblend(param_01 + "_null",param_01,var_07 / var_05); + wait 0.05; + } + + var_04 = "light"; + } + + if(var_04 == "light") + { + for(var_07 = 0;var_07 < var_05;var_07++) + { + var_02 setsoundblend(param_01 + "_null",param_01,1 - var_07 / var_05); + var_03 setsoundblend(param_00 + "_null",param_00,var_07 / var_05); + wait 0.05; + } + } + } + + if(var_06 == "none") + { + if(var_04 == "hard") + { + var_05 = var_05 * 0.5; + for(var_07 = 0;var_07 < var_05;var_07++) + { + var_02 setsoundblend(param_01 + "_null",param_01,var_07 / var_05); + var_03 setsoundblend(param_00 + "_null",param_00,1 - var_07 / var_05); + wait 0.05; + } + + var_04 = "light"; + } + + if(var_04 == "light") + { + for(var_07 = 0;var_07 < var_05;var_07++) + { + var_02 setsoundblend(param_01 + "_null",param_01,1 - var_07 / var_05); + wait 0.05; + } + } + } + + if(var_06 == "light") + { + if(var_04 == "none") + { + for(var_07 = 0;var_07 < var_05;var_07++) + { + var_02 setsoundblend(param_01 + "_null",param_01,var_07 / var_05); + wait 0.05; + } + } + + if(var_04 == "hard") + { + for(var_07 = 0;var_07 < var_05;var_07++) + { + var_02 setsoundblend(param_01 + "_null",param_01,var_07 / var_05); + var_03 setsoundblend(param_00 + "_null",param_00,1 - var_07 / var_05); + wait 0.05; + } + } + } + + var_04 = var_06; + } +} + +//Function Number: 9 +blenddelete(param_00) +{ + self waittill("death"); + param_00 delete(); +} + +//Function Number: 10 +watersheeting(param_00) +{ + var_01 = 3; + if(isdefined(param_00.script_duration)) + { + var_01 = param_00.script_duration; + } + + for(;;) + { + param_00 waittill("trigger",var_02); + if(isplayer(var_02)) + { + var_02 setwatersheeting(1,var_01); + wait var_01 * 0.2; + } + } +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_gameskill.gsc b/MW3/PC/SP/maps/_gameskill.gsc new file mode 100644 index 0000000..23b2df2 --- /dev/null +++ b/MW3/PC/SP/maps/_gameskill.gsc @@ -0,0 +1,2319 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_gameskill.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 109 + * Decompile Time: 12058 ms + * Timestamp: 10/27/2023 2:24:50 AM +*******************************************************************/ + +//Function Number: 1 +setskill(param_00) +{ + if(!isdefined(level.script)) + { + level.script = tolower(getdvar("mapname")); + } + + if(!isdefined(param_00) || param_00 == 0) + { + if(isdefined(level.gameskill)) + { + return; + } + + if(!isdefined(level.custom_player_attacker)) + { + level.custom_player_attacker = ::return_false; + } + + level.global_damage_func_ads = ::empty_kill_func; + level.global_damage_func = ::empty_kill_func; + level.global_kill_func = ::empty_kill_func; + if(getdvar("arcademode") == "1") + { + thread maps\_arcademode::main(); + } + + maps\_utility::set_console_status(); + foreach(var_02 in level.players) + { + var_02 maps\_utility::ent_flag_init("player_has_red_flashing_overlay"); + var_02 maps\_utility::ent_flag_init("player_is_invulnerable"); + var_02 maps\_utility::ent_flag_init("player_zero_attacker_accuracy"); + var_02 maps\_utility::ent_flag_init("player_no_auto_blur"); + var_02 maps\_utility::ent_flag_init("near_death_vision_enabled"); + var_02 maps\_utility::ent_flag_set("near_death_vision_enabled"); + var_02.gs = spawnstruct(); + var_02 init_screeneffect_vars(); + var_02.a = spawnstruct(); + var_02.damage_functions = []; + var_02 maps\_player_stats::init_stats(); + var_02 maps\_utility::ent_flag_init("global_hint_in_use"); + var_02.pers = []; + if(!isdefined(var_02.baseignorerandombulletdamage)) + { + var_02.baseignorerandombulletdamage = 0; + } + + var_02.disabledweapon = 0; + var_02.disabledweaponswitch = 0; + var_02.disabledusability = 0; + var_02 setoffhandprimaryclass("frag"); + } + + level.difficultytype[0] = "easy"; + level.difficultytype[1] = "normal"; + level.difficultytype[2] = "hardened"; + level.difficultytype[3] = "veteran"; + level.difficultystring["easy"] = &"GAMESKILL_EASY"; + level.difficultystring["normal"] = &"GAMESKILL_NORMAL"; + level.difficultystring["hardened"] = &"GAMESKILL_HARDENED"; + level.difficultystring["veteran"] = &"GAMESKILL_VETERAN"; + thread gameskill_change_monitor(); + } + + setdvarifuninitialized("autodifficulty_playerDeathTimer",0); + anim.run_accuracy = 0.5; + anim.walk_accuracy = 0.8; + setdvar("autodifficulty_frac",0); + level.difficultysettings_frac_data_points = []; + foreach(var_02 in level.players) + { + var_02 init_take_cover_warnings(); + var_02 thread increment_take_cover_warnings_on_death(); + } + + level.mg42badplace_mintime = 8; + level.mg42badplace_maxtime = 16; + level.difficultysettings["playerGrenadeBaseTime"]["easy"] = -25536; + level.difficultysettings["playerGrenadeBaseTime"]["normal"] = -30536; + level.difficultysettings["playerGrenadeBaseTime"]["hardened"] = 25000; + level.difficultysettings["playerGrenadeBaseTime"]["veteran"] = 25000; + level.difficultysettings["playerGrenadeRangeTime"]["easy"] = 20000; + level.difficultysettings["playerGrenadeRangeTime"]["normal"] = 15000; + level.difficultysettings["playerGrenadeRangeTime"]["hardened"] = 10000; + level.difficultysettings["playerGrenadeRangeTime"]["veteran"] = 10000; + level.difficultysettings["playerDoubleGrenadeTime"]["easy"] = 3600000; + level.difficultysettings["playerDoubleGrenadeTime"]["normal"] = 150000; + level.difficultysettings["playerDoubleGrenadeTime"]["hardened"] = 90000; + level.difficultysettings["playerDoubleGrenadeTime"]["veteran"] = 90000; + level.difficultysettings["double_grenades_allowed"]["easy"] = 0; + level.difficultysettings["double_grenades_allowed"]["normal"] = 1; + level.difficultysettings["double_grenades_allowed"]["hardened"] = 1; + level.difficultysettings["double_grenades_allowed"]["veteran"] = 1; + level.difficultysettings["threatbias"]["easy"] = 100; + level.difficultysettings["threatbias"]["normal"] = 150; + level.difficultysettings["threatbias"]["hardened"] = 200; + level.difficultysettings["threatbias"]["veteran"] = 400; + level.difficultysettings["base_enemy_accuracy"]["easy"] = 0.9; + level.difficultysettings["base_enemy_accuracy"]["normal"] = 1; + level.difficultysettings["base_enemy_accuracy"]["hardened"] = 1.15; + level.difficultysettings["base_enemy_accuracy"]["veteran"] = 1.15; + level.difficultysettings["accuracyDistScale"]["easy"] = 1; + level.difficultysettings["accuracyDistScale"]["normal"] = 1; + level.difficultysettings["accuracyDistScale"]["hardened"] = 0.6; + level.difficultysettings["accuracyDistScale"]["veteran"] = 0.8; + level.difficultysettings["min_sniper_burst_delay_time"]["easy"] = 3; + level.difficultysettings["min_sniper_burst_delay_time"]["normal"] = 2; + level.difficultysettings["min_sniper_burst_delay_time"]["hardened"] = 1.5; + level.difficultysettings["min_sniper_burst_delay_time"]["veteran"] = 1.1; + level.difficultysettings["max_sniper_burst_delay_time"]["easy"] = 4; + level.difficultysettings["max_sniper_burst_delay_time"]["normal"] = 3; + level.difficultysettings["max_sniper_burst_delay_time"]["hardened"] = 2; + level.difficultysettings["max_sniper_burst_delay_time"]["veteran"] = 1.5; + level.difficultysettings["dog_health"]["easy"] = 0.25; + level.difficultysettings["dog_health"]["normal"] = 0.75; + level.difficultysettings["dog_health"]["hardened"] = 1; + level.difficultysettings["dog_health"]["veteran"] = 1; + level.difficultysettings["dog_presstime"]["easy"] = 415; + level.difficultysettings["dog_presstime"]["normal"] = 375; + level.difficultysettings["dog_presstime"]["hardened"] = 250; + level.difficultysettings["dog_presstime"]["veteran"] = 225; + level.difficultysettings["dog_hits_before_kill"]["easy"] = 2; + level.difficultysettings["dog_hits_before_kill"]["normal"] = 1; + level.difficultysettings["dog_hits_before_kill"]["hardened"] = 0; + level.difficultysettings["dog_hits_before_kill"]["veteran"] = 0; + level.difficultysettings["pain_test"]["easy"] = ::always_pain; + level.difficultysettings["pain_test"]["normal"] = ::always_pain; + level.difficultysettings["pain_test"]["hardened"] = ::pain_protection; + level.difficultysettings["pain_test"]["veteran"] = ::pain_protection; + level.difficultysettings["missTimeConstant"]["easy"] = 1; + level.difficultysettings["missTimeConstant"]["normal"] = 0.05; + level.difficultysettings["missTimeConstant"]["hardened"] = 0; + level.difficultysettings["missTimeConstant"]["veteran"] = 0; + level.difficultysettings["missTimeDistanceFactor"]["easy"] = 0.0008; + level.difficultysettings["missTimeDistanceFactor"]["normal"] = 0.0001; + level.difficultysettings["missTimeDistanceFactor"]["hardened"] = 5E-05; + level.difficultysettings["missTimeDistanceFactor"]["veteran"] = 0; + level.difficultysettings["flashbangedInvulFactor"]["easy"] = 0.25; + level.difficultysettings["flashbangedInvulFactor"]["normal"] = 0; + level.difficultysettings["flashbangedInvulFactor"]["hardened"] = 0; + level.difficultysettings["flashbangedInvulFactor"]["veteran"] = 0; + level.difficultysettings["player_criticalBulletDamageDist"]["easy"] = 0; + level.difficultysettings["player_criticalBulletDamageDist"]["normal"] = 0; + level.difficultysettings["player_criticalBulletDamageDist"]["hardened"] = 0; + level.difficultysettings["player_criticalBulletDamageDist"]["veteran"] = 0; + level.difficultysettings["player_deathInvulnerableTime"]["easy"] = 4000; + level.difficultysettings["player_deathInvulnerableTime"]["normal"] = 2500; + level.difficultysettings["player_deathInvulnerableTime"]["hardened"] = 600; + level.difficultysettings["player_deathInvulnerableTime"]["veteran"] = 100; + level.difficultysettings["invulTime_preShield"]["easy"] = 0.6; + level.difficultysettings["invulTime_preShield"]["normal"] = 0.5; + level.difficultysettings["invulTime_preShield"]["hardened"] = 0.3; + level.difficultysettings["invulTime_preShield"]["veteran"] = 0; + level.difficultysettings["invulTime_onShield"]["easy"] = 1.6; + level.difficultysettings["invulTime_onShield"]["normal"] = 1; + level.difficultysettings["invulTime_onShield"]["hardened"] = 0.5; + level.difficultysettings["invulTime_onShield"]["veteran"] = 0.25; + level.difficultysettings["invulTime_postShield"]["easy"] = 0.5; + level.difficultysettings["invulTime_postShield"]["normal"] = 0.4; + level.difficultysettings["invulTime_postShield"]["hardened"] = 0.3; + level.difficultysettings["invulTime_postShield"]["veteran"] = 0; + level.difficultysettings["playerHealth_RegularRegenDelay"]["easy"] = 4000; + level.difficultysettings["playerHealth_RegularRegenDelay"]["normal"] = 4000; + level.difficultysettings["playerHealth_RegularRegenDelay"]["hardened"] = 3000; + level.difficultysettings["playerHealth_RegularRegenDelay"]["veteran"] = 1200; + level.difficultysettings["worthyDamageRatio"]["easy"] = 0; + level.difficultysettings["worthyDamageRatio"]["normal"] = 0.1; + level.difficultysettings["worthyDamageRatio"]["hardened"] = 0.3; + level.difficultysettings["worthyDamageRatio"]["veteran"] = 0.3; + level.difficultysettings["playerDifficultyHealth"]["easy"] = 475; + level.difficultysettings["playerDifficultyHealth"]["normal"] = 275; + level.difficultysettings["playerDifficultyHealth"]["hardened"] = 165; + level.difficultysettings["playerDifficultyHealth"]["veteran"] = 115; + level.difficultysettings["longRegenTime"]["easy"] = 5000; + level.difficultysettings["longRegenTime"]["normal"] = 5000; + level.difficultysettings["longRegenTime"]["hardened"] = 3200; + level.difficultysettings["longRegenTime"]["veteran"] = 3200; + level.difficultysettings["healthOverlayCutoff"]["easy"] = 0.02; + level.difficultysettings["healthOverlayCutoff"]["normal"] = 0.02; + level.difficultysettings["healthOverlayCutoff"]["hardened"] = 0.02; + level.difficultysettings["healthOverlayCutoff"]["veteran"] = 0.02; + level.difficultysettings["health_regenRate"]["easy"] = 0.02; + level.difficultysettings["health_regenRate"]["normal"] = 0.02; + level.difficultysettings["health_regenRate"]["hardened"] = 0.02; + level.difficultysettings["health_regenRate"]["veteran"] = 0.02; + level.difficultysettings["explosivePlantTime"]["easy"] = 10; + level.difficultysettings["explosivePlantTime"]["normal"] = 10; + level.difficultysettings["explosivePlantTime"]["hardened"] = 5; + level.difficultysettings["explosivePlantTime"]["veteran"] = 5; + level.difficultysettings["player_downed_buffer_time"]["normal"] = 2; + level.difficultysettings["player_downed_buffer_time"]["hardened"] = 1.5; + level.difficultysettings["player_downed_buffer_time"]["veteran"] = 0; + level.lastplayersighted = 0; + setsaveddvar("player_meleeDamageMultiplier",0.4); + if(isdefined(level.custom_gameskill_func)) + { + [[ level.custom_gameskill_func ]](); + } + + if(coop_with_one_player_downed()) + { + make_remaining_player_a_little_stronger(); + } + + updategameskill(); + updatealldifficulty(); + setdvar("autodifficulty_original_setting",level.gameskill); +} + +//Function Number: 2 +init_screeneffect_vars() +{ + self.gs.screeneffect = []; + var_00 = ["bottom","left","right"]; + var_01 = ["bloodsplat","dirt"]; + foreach(var_03 in var_01) + { + foreach(var_05 in var_00) + { + self.gs.screeneffect[var_03][var_05] = 0; + self.gs.screeneffect[var_03 + "_count"][var_05] = 0; + } + } +} + +//Function Number: 3 +coop_player_in_special_ops_survival() +{ + setsaveddvar("player_meleeDamageMultiplier",0.26); +} + +//Function Number: 4 +solo_player_in_special_ops() +{ + if(!maps\_utility::is_survival()) + { + setsaveddvar("player_deathInvulnerableToMelee","1"); + setsaveddvar("ai_accuracy_attackercountDecrease","0.6"); + } + + level.difficultysettings["playerHealth_RegularRegenDelay"]["normal"] = 2000; + level.difficultysettings["playerHealth_RegularRegenDelay"]["hardened"] = 2000; + level.difficultysettings["playerHealth_RegularRegenDelay"]["veteran"] = 900; + if(!maps\_utility::is_survival()) + { + level.difficultysettings["invulTime_onShield"]["normal"] = 2.5; + } + else + { + level.difficultysettings["invulTime_onShield"]["normal"] = 1.5; + } + + level.difficultysettings["player_deathInvulnerableTime"]["normal"] = 3000; + level.difficultysettings["player_deathInvulnerableTime"]["hardened"] = 1300; + level.difficultysettings["player_deathInvulnerableTime"]["veteran"] = 800; + level.difficultysettings["longRegenTime"]["normal"] = 4500; + level.difficultysettings["longRegenTime"]["hardened"] = 4500; + level.difficultysettings["longRegenTime"]["veteran"] = 4500; + level.difficultysettings["playerDifficultyHealth"]["normal"] = 350; + level.difficultysettings["playerDifficultyHealth"]["hardened"] = 205; + level.difficultysettings["playerDifficultyHealth"]["veteran"] = 205; + if(!maps\_utility::is_survival()) + { + setsaveddvar("player_meleeDamageMultiplier",0.5); + return; + } + + setsaveddvar("player_meleeDamageMultiplier",0.26); +} + +//Function Number: 5 +solo_player_in_coop_gameskill_settings() +{ + level.difficultysettings["player_deathInvulnerableTime"]["normal"] = 2500; + level.difficultysettings["player_deathInvulnerableTime"]["hardened"] = 1200; + level.difficultysettings["player_deathInvulnerableTime"]["veteran"] = 200; + var_00 = 1.35; + level.difficultysettings["playerDifficultyHealth"]["normal"] = int(275 * var_00); + level.difficultysettings["playerDifficultyHealth"]["hardened"] = int(165 * var_00); + level.difficultysettings["playerDifficultyHealth"]["veteran"] = int(138); +} + +//Function Number: 6 +make_remaining_player_a_little_stronger() +{ + level.difficultysettings["player_deathInvulnerableTime"]["normal"] = 2500; + level.difficultysettings["player_deathInvulnerableTime"]["hardened"] = 1000; + var_00 = 1.25; + level.difficultysettings["playerDifficultyHealth"]["normal"] = int(275 * var_00); + level.difficultysettings["playerDifficultyHealth"]["hardened"] = int(165 * var_00); +} + +//Function Number: 7 +updatealldifficulty() +{ + setglobaldifficulty(); + for(var_00 = 0;var_00 < level.players.size;var_00++) + { + level.players[var_00] setdifficulty(); + } +} + +//Function Number: 8 +setdifficulty() +{ + set_difficulty_from_locked_settings(); +} + +//Function Number: 9 +setglobaldifficulty() +{ + var_00 = ::get_locked_difficulty_val_global; + var_01 = get_skill_from_index(level.gameskill); + anim.dog_health = [[ var_00 ]]("dog_health",level.gameskill); + anim.pain_test = level.difficultysettings["pain_test"][var_01]; + level.explosiveplanttime = level.difficultysettings["explosivePlantTime"][var_01]; + anim.min_sniper_burst_delay_time = [[ var_00 ]]("min_sniper_burst_delay_time",level.gameskill); + anim.max_sniper_burst_delay_time = [[ var_00 ]]("max_sniper_burst_delay_time",level.gameskill); + setsaveddvar("ai_accuracyDistScale",[[ var_00 ]]("accuracyDistScale",level.gameskill)); + if(maps\_utility::laststand_enabled()) + { + level.player_downed_death_buffer_time = level.difficultysettings["player_downed_buffer_time"][var_01]; + } + + maps\_mgturret::setdifficulty(); +} + +//Function Number: 10 +updategameskill() +{ + foreach(var_01 in level.players) + { + if(maps\_utility::is_survival()) + { + var_01.gameskill = 1; + continue; + } + + var_01.gameskill = var_01 maps\_utility::get_player_gameskill(); + } + + level.gameskill = level.player.gameskill; + if(maps\_utility::is_coop() && level.player2.gameskill > level.gameskill) + { + level.gameskill = level.player2.gameskill; + } + + level.so_enable_wait_for_players = level.player.gameskill; + if(maps\_utility::is_coop() && level.player2.gameskill < level.so_enable_wait_for_players) + { + level.so_enable_wait_for_players = level.player2.gameskill; + } + + if(isdefined(level.forcedgameskill)) + { + level.gameskill = level.forcedgameskill; + } + + return level.gameskill; +} + +//Function Number: 11 +gameskill_change_monitor() +{ + var_00 = level.gameskill; + for(;;) + { + if(!isdefined(var_00)) + { + wait 1; + var_00 = level.gameskill; + continue; + } + + if(var_00 != updategameskill()) + { + var_00 = level.gameskill; + updatealldifficulty(); + } + + wait 1; + } +} + +//Function Number: 12 +get_skill_from_index(param_00) +{ + return level.difficultytype[param_00]; +} + +//Function Number: 13 +aa_should_start_fresh() +{ + if(level.script == "killhouse") + { + return 1; + } + + return level.gameskill == getdvarint("autodifficulty_original_setting"); +} + +//Function Number: 14 +apply_difficulty_frac_with_func(param_00,param_01) +{ + self.gs.invultime_preshield = [[ param_00 ]]("invulTime_preShield",param_01); + self.gs.invultime_onshield = [[ param_00 ]]("invulTime_onShield",param_01); + self.gs.invultime_postshield = [[ param_00 ]]("invulTime_postShield",param_01); + self.gs.playerhealth_regularregendelay = [[ param_00 ]]("playerHealth_RegularRegenDelay",param_01); + self.gs.worthydamageratio = [[ param_00 ]]("worthyDamageRatio",param_01); + self.threatbias = int([[ param_00 ]]("threatbias",param_01)); + self.gs.longregentime = [[ param_00 ]]("longRegenTime",param_01); + self.gs.healthoverlaycutoff = [[ param_00 ]]("healthOverlayCutoff",param_01); + self.gs.regenrate = [[ param_00 ]]("health_regenRate",param_01); + self.gs.player_attacker_accuracy = [[ param_00 ]]("base_enemy_accuracy",param_01); + update_player_attacker_accuracy(); + self.gs.playergrenadebasetime = int([[ param_00 ]]("playerGrenadeBaseTime",param_01)); + self.gs.playergrenaderangetime = int([[ param_00 ]]("playerGrenadeRangeTime",param_01)); + self.gs.playerdoublegrenadetime = int([[ param_00 ]]("playerDoubleGrenadeTime",param_01)); + self.gs.min_sniper_burst_delay_time = [[ param_00 ]]("min_sniper_burst_delay_time",param_01); + self.gs.max_sniper_burst_delay_time = [[ param_00 ]]("max_sniper_burst_delay_time",param_01); + self.gs.dog_presstime = [[ param_00 ]]("dog_presstime",param_01); + self.deathinvulnerabletime = int([[ param_00 ]]("player_deathInvulnerableTime",param_01)); + self.criticalbulletdamagedist = int([[ param_00 ]]("player_criticalBulletDamageDist",param_01)); + self.damagemultiplier = 100 / [[ param_00 ]]("playerDifficultyHealth",param_01); +} + +//Function Number: 15 +update_player_attacker_accuracy() +{ + if(maps\_utility::ent_flag("player_zero_attacker_accuracy")) + { + return; + } + + self.ignorerandombulletdamage = self.baseignorerandombulletdamage; + self.attackeraccuracy = self.gs.player_attacker_accuracy; +} + +//Function Number: 16 +apply_difficulty_step_with_func(param_00,param_01) +{ + self.gs.misstimeconstant = [[ param_00 ]]("missTimeConstant",param_01); + self.gs.misstimedistancefactor = [[ param_00 ]]("missTimeDistanceFactor",param_01); + self.gs.dog_hits_before_kill = [[ param_00 ]]("dog_hits_before_kill",param_01); + self.gs.double_grenades_allowed = [[ param_00 ]]("double_grenades_allowed",param_01); +} + +//Function Number: 17 +set_difficulty_from_locked_settings() +{ + apply_difficulty_frac_with_func(::get_locked_difficulty_val_player,1); + apply_difficulty_step_with_func(::get_locked_difficulty_step_val_player,1); +} + +//Function Number: 18 +get_locked_difficulty_step_val_player(param_00,param_01) +{ + return level.difficultysettings[param_00][get_skill_from_index(self.gameskill)]; +} + +//Function Number: 19 +get_locked_difficulty_step_val_global(param_00,param_01) +{ + return level.difficultysettings[param_00][get_skill_from_index(level.gameskill)]; +} + +//Function Number: 20 +get_blended_difficulty(param_00,param_01) +{ + var_02 = level.difficultysettings_frac_data_points[param_00]; + var_03 = 1; + while(var_03 < var_02.size) + { + var_04 = var_02[var_03]["frac"]; + var_05 = var_02[var_03]["val"]; + if(param_01 <= var_04) + { + var_06 = var_02[var_03 - 1]["frac"]; + var_07 = var_02[var_03 - 1]["val"]; + var_08 = var_04 - var_06; + var_09 = var_05 - var_07; + var_0A = param_01 - var_06; + var_0B = var_0A / var_08; + return var_07 + var_0B * var_09; + } + + var_09++; + } + + return var_08[var_08.size - 1]["val"]; +} + +//Function Number: 21 +getcurrentdifficultysetting(param_00) +{ + return level.difficultysettings[param_00][get_skill_from_index(self.gameskill)]; +} + +//Function Number: 22 +getratio(param_00,param_01,param_02) +{ + return level.difficultysettings[param_00][level.difficultytype[param_01]] * 100 - getdvarint("autodifficulty_frac") + level.difficultysettings[param_00][level.difficultytype[param_02]] * getdvarint("autodifficulty_frac") * 0.01; +} + +//Function Number: 23 +get_locked_difficulty_val_player(param_00,param_01) +{ + return level.difficultysettings[param_00][get_skill_from_index(self.gameskill)]; +} + +//Function Number: 24 +get_locked_difficulty_val_global(param_00,param_01) +{ + return level.difficultysettings[param_00][get_skill_from_index(level.gameskill)]; +} + +//Function Number: 25 +always_pain() +{ + return 0; +} + +//Function Number: 26 +pain_protection() +{ + if(!pain_protection_check()) + { + return 0; + } + + return randomint(100) > 25; +} + +//Function Number: 27 +pain_protection_check() +{ + if(!isalive(self.enemy)) + { + return 0; + } + + if(!isplayer(self.enemy)) + { + return 0; + } + + if(!isalive(level.painai) || level.painai.script != "pain") + { + level.painai = self; + } + + if(self == level.painai) + { + return 0; + } + + if(self.damageweapon != "none" && weaponisboltaction(self.damageweapon)) + { + return 0; + } + + return 1; +} + +//Function Number: 28 +set_accuracy_based_on_situation() +{ + if(animscripts/combat_utility::issniper() && isalive(self.enemy)) + { + setsniperaccuracy(); + return; + } + + if(isplayer(self.enemy)) + { + resetmissdebouncetime(); + if(self.a.misstime > gettime()) + { + self.accuracy = 0; + return; + } + } + + if(self.script == "move") + { + if(animscripts/utility::func_10B9()) + { + self.accuracy = level.walk_accuracy * self.baseaccuracy; + } + else + { + self.accuracy = level.run_accuracy * self.baseaccuracy; + } + + return; + } + + self.accuracy = self.baseaccuracy; + if(isdefined(self.isrambo) && isdefined(self.ramboaccuracymult)) + { + self.accuracy = self.accuracy * self.ramboaccuracymult; + } +} + +//Function Number: 29 +setsniperaccuracy() +{ + if(!isdefined(self.snipershotcount)) + { + self.snipershotcount = 0; + self.sniperhitcount = 0; + } + + self.snipershotcount++; + var_00 = level.gameskill; + if(isplayer(self.enemy)) + { + var_00 = self.enemy.gameskill; + } + + if(shouldforcesnipermissshot()) + { + self.accuracy = 0; + if(var_00 > 0 || self.snipershotcount > 1) + { + self.lastmissedenemy = self.enemy; + } + + return; + } + + self.accuracy = 1 + 1 * self.sniperhitcount * self.baseaccuracy; + self.sniperhitcount++; + if(var_00 < 1 && self.sniperhitcount == 1) + { + self.lastmissedenemy = undefined; + } +} + +//Function Number: 30 +shouldforcesnipermissshot() +{ + if(isdefined(self.neverforcesnipermissenemy) && self.neverforcesnipermissenemy) + { + return 0; + } + + if(self.team == "allies") + { + return 0; + } + + if(isdefined(self.lastmissedenemy) && self.enemy == self.lastmissedenemy) + { + return 0; + } + + if(distancesquared(self.origin,self.enemy.origin) > 250000) + { + return 0; + } + + return 1; +} + +//Function Number: 31 +shotsafterplayerbecomesinvul() +{ + return 1 + randomfloat(4); +} + +//Function Number: 32 +didsomethingotherthanshooting() +{ + self.a.misstimedebounce = 0; +} + +//Function Number: 33 +resetaccuracyandpause() +{ + resetmisstime(); +} + +//Function Number: 34 +waittimeifplayerishit() +{ + var_00 = 0; + waittillframeend; + if(!isalive(self.enemy)) + { + return var_00; + } + + if(!isplayer(self.enemy)) + { + return var_00; + } + + if(self.enemy maps\_utility::ent_flag("player_is_invulnerable")) + { + var_00 = 0.3 + randomfloat(0.4); + } + + return var_00; +} + +//Function Number: 35 +print3d_time(param_00,param_01,param_02,param_03) +{ + param_03 = param_03 * 20; + for(var_04 = 0;var_04 < param_03;var_04++) + { + wait 0.05; + } +} + +//Function Number: 36 +resetmisstime() +{ + if(!self isbadguy()) + { + return; + } + + if(self.weapon == "none") + { + return; + } + + if(!animscripts/weaponlist::func_CCA() && !animscripts/weaponlist::func_CCB()) + { + self.misstime = 0; + return; + } + + if(!isalive(self.enemy)) + { + return; + } + + if(!isplayer(self.enemy)) + { + self.accuracy = self.baseaccuracy; + return; + } + + var_00 = distance(self.enemy.origin,self.origin); + setmisstime(self.enemy.gs.misstimeconstant + var_00 * self.enemy.gs.misstimedistancefactor); +} + +//Function Number: 37 +resetmissdebouncetime() +{ + self.a.misstimedebounce = gettime() + 3000; +} + +//Function Number: 38 +setmisstime(param_00) +{ + if(self.a.misstimedebounce > gettime()) + { + return; + } + + if(param_00 > 0) + { + self.accuracy = 0; + } + + param_00 = param_00 * 1000; + self.a.misstime = gettime() + param_00; + self.a.accuracygrowthmultiplier = 1; +} + +//Function Number: 39 +player_aim_debug() +{ + self endon("death"); + self notify("playeraim"); + self endon("playeraim"); + for(;;) + { + var_00 = (0,1,0); + if(self.a.misstime > gettime()) + { + var_00 = (1,0,0); + } + + wait 0.05; + } +} + +//Function Number: 40 +screen_effect_on_open_bottom(param_00,param_01,param_02) +{ + var_03 = randomfloatrange(-15,15); + var_04 = randomfloatrange(-15,15); + self scaleovertime(0.1,int(2048 * param_01),int(1152 * param_01)); + self.y = 100 + var_04; + self moveovertime(0.08); + self.y = 0 + var_04; + self.x = self.x + var_03; + if(isdefined(param_02)) + { + return; + } + + screen_effect_fade(); +} + +//Function Number: 41 +screen_effect_on_open_side(param_00,param_01,param_02) +{ + var_03 = 1; + if(param_02) + { + var_03 = -1; + } + + var_04 = randomfloatrange(-15,15); + var_05 = randomfloatrange(-15,15); + self scaleovertime(0.1,int(2048 * param_01),int(1152 * param_01)); + self.x = 1000 * var_03 + var_04; + self moveovertime(0.1); + self.x = 0 + var_04; + self.y = self.y + var_05; + screen_effect_fade(); +} + +//Function Number: 42 +screen_effect_fade() +{ + self endon("death"); + var_00 = gettime(); + var_01 = 1; + var_02 = 0.05; + self.alpha = 0; + self fadeovertime(var_02); + self.alpha = 1; + wait var_02; + maps\_utility::wait_for_buffer_time_to_pass(var_00,2); + self fadeovertime(var_01); + self.alpha = 0; + wait var_01; + self destroy(); +} + +//Function Number: 43 +screen_detailed_alpha() +{ + var_00 = 0.2; + self.alpha = 0.7; + self fadeovertime(var_00); + self.alpha = 0; + wait var_00; + self destroy(); +} + +//Function Number: 44 +grenade_dirt_on_screen(param_00) +{ + var_01 = "fullscreen_dirt_" + param_00; + var_02 = undefined; + if(param_00 == "bottom") + { + var_02 = "fullscreen_dirt_bottom_b"; + } + + thread display_screen_effect("dirt",param_00,var_01,var_02,randomfloatrange(0.55,0.66)); +} + +//Function Number: 45 +blood_splat_on_screen(param_00) +{ + var_01 = "fullscreen_bloodsplat_" + param_00; + thread display_screen_effect("bloodsplat",param_00,var_01,undefined,randomfloatrange(0.45,0.56)); +} + +//Function Number: 46 +display_screen_effect(param_00,param_01,param_02,param_03,param_04) +{ + if(!isalive(self)) + { + return; + } + + if(isdefined(self.is_controlling_uav)) + { + return; + } + + var_05 = gettime(); + if(self.gs.screeneffect[param_00][param_01] == var_05) + { + return; + } + + if(self.gs.screeneffect[param_00 + "_count"][param_01] == 1) + { + return; + } + + self.gs.screeneffect[param_00 + "_count"][param_01]++; + self.gs.screeneffect[param_00][param_01] = var_05; + self endon("death"); + switch(param_01) + { + case "bottom": + var_06 = int(640); + var_07 = int(480); + if(param_00 == "dirt") + { + var_08 = maps\_hud_util::create_client_overlay_custom_size(param_02,1,var_06,var_07); + var_08 thread screen_effect_on_open_bottom(param_00,param_04,1); + var_08 screen_detailed_alpha(); + } + else + { + var_08 = maps\_hud_util::create_client_overlay_custom_size(param_03,0,var_07,var_08); + var_08 screen_effect_on_open_bottom(param_00,param_04); + } + + if(isdefined(param_03)) + { + var_09 = maps\_hud_util::create_client_overlay_custom_size(param_03,0,var_06,var_07); + var_09 screen_effect_on_open_bottom(param_00,param_04); + } + break; + + case "left": + var_08 = maps\_hud_util::create_client_overlay_custom_size(param_02,0,1,1); + var_08 screen_effect_on_open_side(param_00,param_04,1); + break; + + case "right": + var_08 = maps\_hud_util::create_client_overlay_custom_size(param_02,0,1,1); + var_08 screen_effect_on_open_side(param_00,param_04,0); + break; + + default: + break; + } + + self.gs.screeneffect[param_00 + "_count"][param_01]--; +} + +//Function Number: 47 +playerhurtcheck() +{ + var_00 = ::maps\_utility::dirt_on_screen_from_position; + var_01 = ::maps\_utility::bloodsplateffect; + var_02 = []; + self.hurtagain = 0; + for(;;) + { + self waittill(var_00,var_7B["MOD_GRENADE"],var_01,var_7B["MOD_GRENADE_SPLASH"],var_01,var_7B["MOD_PROJECTILE"],var_01,var_7B["MOD_PROJECTILE_SPLASH"],var_01,var_7B["MOD_EXPLOSIVE"],var_02,var_7B["MOD_PISTOL_BULLET"],var_02,var_7B["MOD_RIFLE_BULLET"],var_02,var_7B["MOD_EXPLOSIVE_BULLET"],"damage",var_03,var_04,var_05,var_06,var_07); + self.hurtagain = 1; + self.damagepoint = var_06; + self.damageattacker = var_04; + var_08 = undefined; + if(isdefined(self.mods_override)) + { + var_08 = self.mods_override[var_07]; + } + + if(!isdefined(var_08) && isdefined(var_7B[var_07])) + { + var_08 = var_7B[var_07]; + } + + if(isdefined(var_08)) + { + waittillframeend; + [[ var_08 ]](var_06); + } + } +} + +//Function Number: 48 +player_health_packets() +{ + self.player_health_packets = 3; +} + +//Function Number: 49 +playerhealthregeninit() +{ + wait 0.05; + level.strings["take_cover"] = spawnstruct(); + level.strings["take_cover"].text = &"GAME_GET_TO_COVER"; + level.strings["get_back_up"] = spawnstruct(); + level.strings["get_back_up"].text = &"GAME_LAST_STAND_GET_BACK_UP"; +} + +//Function Number: 50 +playerhealthregen() +{ + thread healthoverlay(); + var_00 = 1; + var_01 = 0; + thread player_health_packets(); + var_02 = 0; + var_03 = 0; + thread playerbreathingsound(self.maxhealth * 0.35); + var_04 = 0; + var_05 = 0; + var_06 = 0; + var_07 = 1; + thread playerhurtcheck(); + self.bolthit = 0; + for(;;) + { + wait 0.05; + waittillframeend; + if(maps\_utility::laststand_enabled()) + { + thread maps\_laststand::player_laststand_proc(); + } + + if(self.health == self.maxhealth) + { + if(maps\_utility::ent_flag("player_has_red_flashing_overlay")) + { + player_recovers_from_red_flashing(); + } + + var_07 = 1; + var_03 = 0; + var_02 = 0; + continue; + } + + if(self.health <= 0) + { + return; + } + + var_08 = var_02; + var_09 = self.health / self.maxhealth; + if(var_09 <= self.gs.healthoverlaycutoff && self.player_health_packets > 1) + { + var_02 = 1; + if(!var_08) + { + var_05 = gettime(); + if(maps\_utility::ent_flag("near_death_vision_enabled")) + { + thread blurview(3.6,2); + thread maps\_audio::set_deathsdoor(); + self painvisionon(); + } + + maps\_utility::ent_flag_set("player_has_red_flashing_overlay"); + var_03 = 1; + } + } + + if(self.hurtagain) + { + var_05 = gettime(); + self.hurtagain = 0; + } + + if(self.health / self.maxhealth >= var_00) + { + if(gettime() - var_05 < self.gs.playerhealth_regularregendelay) + { + continue; + } + + if(var_02) + { + var_06 = var_09; + if(gettime() > var_05 + self.gs.longregentime) + { + var_06 = var_06 + self.gs.regenrate; + } + + if(var_06 >= 1) + { + reducetakecoverwarnings(); + } + } + else + { + var_06 = 1; + } + + if(var_06 > 1) + { + var_06 = 1; + } + + if(var_06 <= 0) + { + return; + } + + self setnormalhealth(var_06); + var_00 = self.health / self.maxhealth; + continue; + } + + var_00 = var_07; + var_0A = self.gs.worthydamageratio; + if(self.attackercount == 1) + { + var_0A = var_0A * 3; + } + + var_0B = var_00 - var_09 >= var_0A; + if(self.health <= 1) + { + self setnormalhealth(2 / self.maxhealth); + var_0B = 1; + } + + var_00 = self.health / self.maxhealth; + self notify("hit_again"); + var_01 = 0; + var_05 = gettime(); + thread blurview(3,0.8); + if(!var_0B) + { + continue; + } + + if(maps\_utility::ent_flag("player_is_invulnerable")) + { + continue; + } + + maps\_utility::ent_flag_set("player_is_invulnerable"); + level notify("player_becoming_invulnerable"); + if(var_03) + { + var_04 = self.gs.invultime_onshield; + var_03 = 0; + } + else if(var_02) + { + var_04 = self.gs.invultime_postshield; + } + else + { + var_04 = self.gs.invultime_preshield; + } + + var_07 = self.health / self.maxhealth; + thread playerinvul(var_04); + } +} + +//Function Number: 51 +reducetakecoverwarnings() +{ + if(!take_cover_warnings_enabled()) + { + return; + } + + if(isalive(self)) + { + var_00 = self getlocalplayerprofiledata("takeCoverWarnings"); + if(var_00 > 0) + { + var_00--; + self setlocalplayerprofiledata("takeCoverWarnings",var_00); + } + } +} + +//Function Number: 52 +playerinvul(param_00) +{ + if(isdefined(self.flashendtime) && self.flashendtime > gettime()) + { + param_00 = param_00 * getcurrentdifficultysetting("flashbangedInvulFactor"); + } + + if(param_00 > 0) + { + if(!isdefined(self.noplayerinvul)) + { + self.attackeraccuracy = 0; + } + + self.ignorerandombulletdamage = 1; + wait param_00; + } + + update_player_attacker_accuracy(); + maps\_utility::ent_flag_clear("player_is_invulnerable"); +} + +//Function Number: 53 +default_door_node_flashbang_frequency() +{ + if(self.team == "allies") + { + self.doorflashchance = 0.6; + } + + if(self isbadguy()) + { + if(level.gameskill >= 2) + { + self.doorflashchance = 0.8; + return; + } + + self.doorflashchance = 0.6; + } +} + +//Function Number: 54 +grenadeawareness() +{ + if(self.team == "allies") + { + self.grenadeawareness = 0.9; + return; + } + + if(self isbadguy()) + { + if(level.gameskill >= 2) + { + if(randomint(100) < 33) + { + self.grenadeawareness = 0.2; + return; + } + + self.grenadeawareness = 0.5; + return; + } + + if(randomint(100) < 33) + { + self.grenadeawareness = 0; + return; + } + + self.grenadeawareness = 0.2; + return; + } +} + +//Function Number: 55 +blurview(param_00,param_01) +{ + if(maps\_utility::ent_flag("player_no_auto_blur")) + { + return; + } + + self notify("blurview_stop"); + self endon("blurview_stop"); + self setblurforplayer(param_00,0); + wait 0.05; + self setblurforplayer(0,param_01); +} + +//Function Number: 56 +playerbreathingsound(param_00) +{ + wait 2; + for(;;) + { + wait 0.2; + if(self.health <= 0) + { + return; + } + + var_01 = self.health / self.maxhealth; + if(var_01 > self.gs.healthoverlaycutoff) + { + continue; + } + + if(isdefined(self.disable_breathing_sound) && self.disable_breathing_sound) + { + continue; + } + + self playlocalsound("breathing_hurt"); + wait 0.1 + randomfloat(0.8); + } +} + +//Function Number: 57 +healthoverlay() +{ + self endon("noHealthOverlay"); + var_00 = newclienthudelem(self); + var_00.x = 0; + var_00.y = 0; + if(issplitscreen()) + { + var_00 setshader("splatter_alt_sp",640,960); + if(self == level.players[0]) + { + var_00.y = var_00.y - 120; + } + } + else + { + var_00 setshader("splatter_alt_sp",640,480); + } + + var_00.splatter = 1; + var_00.alignx = "left"; + var_00.aligny = "top"; + var_00.sort = 1; + var_00.foreground = 0; + var_00.horzalign = "fullscreen"; + var_00.vertalign = "fullscreen"; + var_00.alpha = 0; + thread healthoverlay_remove(var_00); + thread take_cover_warning_loop(); + var_01 = 0; + var_02 = 0.05; + var_03 = 0.3; + while(isalive(self)) + { + wait var_02; + var_04 = 1 - self.health / self.maxhealth; + var_05 = var_04 * var_04 * 1.2; + var_05 = clamp(var_05,0,1); + if(var_01 > var_05) + { + var_01 = var_01 - var_03 * var_02; + } + + if(var_01 < var_05) + { + var_01 = var_05; + } + + var_00.alpha = var_01; + } +} + +//Function Number: 58 +take_cover_warning_loop() +{ + while(isalive(self)) + { + maps\_utility::ent_flag_wait("player_has_red_flashing_overlay"); + take_cover_warning(); + } +} + +//Function Number: 59 +add_hudelm_position_internal(param_00) +{ + if(level.console) + { + self.fontscale = 2; + } + else + { + self.fontscale = 1.6; + } + + self.x = 0; + self.y = -36; + self.alignx = "center"; + self.aligny = "bottom"; + self.horzalign = "center"; + self.vertalign = "middle"; + if(!isdefined(self.background)) + { + return; + } + + self.background.x = 0; + self.background.y = -40; + self.background.alignx = "center"; + self.background.aligny = "middle"; + self.background.horzalign = "center"; + self.background.vertalign = "middle"; + if(level.console) + { + self.background setshader("popmenu_bg",650,52); + } + else + { + self.background setshader("popmenu_bg",650,42); + } + + self.background.alpha = 0.5; +} + +//Function Number: 60 +create_warning_elem() +{ + var_00 = newclienthudelem(self); + var_00 add_hudelm_position_internal(); + thread destroy_warning_elem_when_hit_again(var_00); + var_00 thread destroy_warning_elem_when_mission_failed(); + if(maps\_utility::is_player_down(self)) + { + var_00 settext(level.strings["get_back_up"].text); + } + else + { + var_00 settext(level.strings["take_cover"].text); + } + + var_00.fontscale = 2; + var_00.alpha = 1; + var_00.color = (1,0.9,0.9); + var_00.sort = 1; + var_00.foreground = 1; + return var_00; +} + +//Function Number: 61 +waittillplayerishitagain() +{ + self endon("hit_again"); + self endon("player_downed"); + self waittill("damage"); +} + +//Function Number: 62 +destroy_warning_elem_when_hit_again(param_00) +{ + param_00 endon("being_destroyed"); + waittillplayerishitagain(); + var_01 = !isalive(self); + param_00 thread destroy_warning_elem(var_01); +} + +//Function Number: 63 +destroy_warning_elem_when_mission_failed() +{ + self endon("being_destroyed"); + common_scripts\utility::flag_wait("missionfailed"); + thread destroy_warning_elem(1); +} + +//Function Number: 64 +destroy_warning_elem(param_00) +{ + self notify("being_destroyed"); + self.beingdestroyed = 1; + if(param_00) + { + self fadeovertime(0.5); + self.alpha = 0; + wait 0.5; + } + + self notify("death"); + self destroy(); +} + +//Function Number: 65 +may_change_cover_warning_alpha(param_00) +{ + if(!isdefined(param_00)) + { + return 0; + } + + if(isdefined(param_00.beingdestroyed)) + { + return 0; + } + + return 1; +} + +//Function Number: 66 +fontscaler(param_00,param_01) +{ + self endon("death"); + param_00 = param_00 * 2; + var_02 = param_00 - self.fontscale; + self changefontscaleovertime(param_01); + self.fontscale = self.fontscale + var_02; +} + +//Function Number: 67 +fadefunc(param_00,param_01,param_02,param_03) +{ + var_04 = 0.8; + var_05 = 0.5; + var_06 = var_04 * 0.1; + var_07 = var_04 * 0.1 + param_01 * 0.2; + var_08 = var_04 * 0.1 + param_01 * 0.1; + var_09 = var_04 * 0.3; + var_0A = var_04 - var_06 - var_07 - var_08 - var_09; + if(var_0A < 0) + { + var_0A = 0; + } + + var_0B = 0.8 + param_01 * 0.1; + var_0C = 0.5 + param_01 * 0.3; + if(may_change_cover_warning_alpha(param_00)) + { + if(!param_03) + { + param_00 fadeovertime(var_06); + param_00.alpha = param_02 * 1; + } + } + + if(isdefined(param_00)) + { + param_00 thread fontscaler(1,var_06); + } + + wait var_06 + var_07; + if(may_change_cover_warning_alpha(param_00)) + { + if(!param_03) + { + param_00 fadeovertime(var_08); + param_00.alpha = param_02 * var_0B; + } + } + + wait var_08; + if(may_change_cover_warning_alpha(param_00)) + { + if(!param_03) + { + param_00 fadeovertime(var_09); + param_00.alpha = param_02 * var_0C; + } + } + + if(isdefined(param_00)) + { + param_00 thread fontscaler(0.9,var_09); + } + + wait var_09; + wait var_0A; +} + +//Function Number: 68 +take_cover_warnings_enabled() +{ + if(isdefined(level.cover_warnings_disabled)) + { + return 0; + } + + if(isdefined(self.vehicle)) + { + return 0; + } + + return 1; +} + +//Function Number: 69 +should_show_cover_warning() +{ + if(!isalive(self)) + { + return 0; + } + + if(self islinked()) + { + return 0; + } + + if(self.ignoreme) + { + return 0; + } + + if(level.missionfailed) + { + return 0; + } + + if(!take_cover_warnings_enabled()) + { + return 0; + } + + if(self.gameskill > 1 && !maps\_load::map_is_early_in_the_game()) + { + return 0; + } + + var_00 = self getlocalplayerprofiledata("takeCoverWarnings"); + if(var_00 <= 3) + { + return 0; + } + + return 1; +} + +//Function Number: 70 +take_cover_warning() +{ + self endon("hit_again"); + self endon("damage"); + var_00 = undefined; + if(should_show_cover_warning()) + { + var_00 = create_warning_elem(); + } + + var_01 = gettime() + self.gs.longregentime; + fadefunc(var_00,1,1,0); + while(gettime() < var_01 && isalive(self) && maps\_utility::ent_flag("player_has_red_flashing_overlay")) + { + fadefunc(var_00,0.9,1,0); + } + + if(isalive(self)) + { + fadefunc(var_00,0.65,0.8,0); + } + + if(may_change_cover_warning_alpha(var_00)) + { + var_00 fadeovertime(1); + var_00.alpha = 0; + } + + fadefunc(var_00,0,0.6,1); + wait 0.5; + self notify("take_cover_done"); + self notify("hit_again"); +} + +//Function Number: 71 +player_recovers_from_red_flashing() +{ + maps\_utility::ent_flag_clear("player_has_red_flashing_overlay"); + if(maps\_utility::ent_flag("near_death_vision_enabled")) + { + self painvisionoff(); + thread maps\_audio::restore_after_deathsdoor(); + } + + if(!isdefined(self.disable_breathing_sound) || !self.disable_breathing_sound) + { + self playlocalsound("breathing_better"); + } + + self notify("take_cover_done"); +} + +//Function Number: 72 +healthoverlay_remove(param_00) +{ + self waittill("noHealthOverlay"); + param_00 destroy(); +} + +//Function Number: 73 +resetskill() +{ + waittillframeend; + setskill(1); +} + +//Function Number: 74 +init_take_cover_warnings() +{ + var_00 = level.script == "sp_intro" || level.script == "ny_manhattan"; + if(self getlocalplayerprofiledata("takeCoverWarnings") == -1 || var_00) + { + self setlocalplayerprofiledata("takeCoverWarnings",9); + } +} + +//Function Number: 75 +increment_take_cover_warnings_on_death() +{ + self notify("new_cover_on_death_thread"); + self endon("new_cover_on_death_thread"); + self waittill("death"); + if(!maps\_utility::ent_flag("player_has_red_flashing_overlay")) + { + return; + } + + if(!take_cover_warnings_enabled()) + { + return; + } + + var_00 = self getlocalplayerprofiledata("takeCoverWarnings"); + if(var_00 < 10) + { + self setlocalplayerprofiledata("takeCoverWarnings",var_00 + 1); + } +} + +//Function Number: 76 +auto_adjust_difficulty_player_positioner() +{ + var_00 = self.origin; + wait 5; + if(autospot_is_close_to_player(var_00)) + { + level.autoadjust_playerspots[level.autoadjust_playerspots.size] = var_00; + } +} + +//Function Number: 77 +autospot_is_close_to_player(param_00) +{ + return distancesquared(self.origin,param_00) < 19600; +} + +//Function Number: 78 +auto_adjust_difficulty_player_movement_check() +{ + level.autoadjust_playerspots = []; + level.player.movedrecently = 1; + wait 1; + for(;;) + { + level.player thread auto_adjust_difficulty_player_positioner(); + level.player.movedrecently = 1; + var_00 = []; + var_01 = level.autoadjust_playerspots.size - 5; + if(var_01 < 0) + { + var_01 = 0; + } + + for(var_02 = var_01;var_02 < level.autoadjust_playerspots.size;var_02++) + { + if(!level.player autospot_is_close_to_player(level.autoadjust_playerspots[var_02])) + { + continue; + } + + var_00[var_00.size] = level.autoadjust_playerspots[var_02]; + level.player.movedrecently = 0; + } + + level.autoadjust_playerspots = var_00; + wait 1; + } +} + +//Function Number: 79 +auto_adjust_difficulty_track_player_death() +{ + level.player waittill("death"); + var_00 = getdvarint("autodifficulty_playerDeathTimer"); + var_00 = var_00 - 60; + setdvar("autodifficulty_playerDeathTimer",var_00); +} + +//Function Number: 80 +auto_adjust_difficulty_track_player_shots() +{ + var_00 = gettime(); + for(;;) + { + if(level.player attackbuttonpressed()) + { + var_00 = gettime(); + } + + level.timebetweenshots = gettime() - var_00; + wait 0.05; + } +} + +//Function Number: 81 +hud_debug_add_frac(param_00,param_01) +{ + hud_debug_add_display(param_00,param_01 * 100,1); +} + +//Function Number: 82 +hud_debug_add(param_00,param_01) +{ + hud_debug_add_display(param_00,param_01,0); +} + +//Function Number: 83 +hud_debug_clear() +{ + level.hudnum = 0; + if(isdefined(level.huddebugnum)) + { + for(var_00 = 0;var_00 < level.huddebugnum.size;var_00++) + { + level.huddebugnum[var_00] destroy(); + } + } + + level.huddebugnum = []; +} + +//Function Number: 84 +hud_debug_add_message(param_00) +{ + if(!isdefined(level.hudmsgshare)) + { + level.hudmsgshare = []; + } + + if(!isdefined(level.hudmsgshare[param_00])) + { + var_01 = newhudelem(); + var_01.x = level.debugleft; + var_01.y = level.debugheight + level.hudnum * 15; + var_01.foreground = 1; + var_01.sort = 100; + var_01.alpha = 1; + var_01.alignx = "left"; + var_01.horzalign = "left"; + var_01.fontscale = 1; + var_01 settext(param_00); + level.hudmsgshare[param_00] = 1; + } +} + +//Function Number: 85 +hud_debug_add_display(param_00,param_01,param_02) +{ + hud_debug_add_message(param_00); + param_01 = int(param_01); + var_03 = 0; + if(param_01 < 0) + { + var_03 = 1; + param_01 = param_01 * -1; + } + + var_04 = 0; + var_05 = 0; + var_06 = 0; + var_07 = 0; + while(param_01 >= 10000) + { + param_01 = param_01 - 10000; + } + + while(param_01 >= 1000) + { + param_01 = param_01 - 1000; + var_04++; + } + + while(param_01 >= 100) + { + param_01 = param_01 - 100; + var_05++; + } + + while(param_01 >= 10) + { + param_01 = param_01 - 10; + var_06++; + } + + while(param_01 >= 1) + { + param_01 = param_01 - 1; + var_07++; + } + + var_08 = 0; + var_09 = 10; + if(var_04 > 0) + { + hud_debug_add_num(var_04,var_08); + var_08 = var_08 + var_09; + hud_debug_add_num(var_05,var_08); + var_08 = var_08 + var_09; + hud_debug_add_num(var_06,var_08); + var_08 = var_08 + var_09; + hud_debug_add_num(var_07,var_08); + var_08 = var_08 + var_09; + } + else if(var_05 > 0 || param_02) + { + hud_debug_add_num(var_05,var_08); + var_08 = var_08 + var_09; + hud_debug_add_num(var_06,var_08); + var_08 = var_08 + var_09; + hud_debug_add_num(var_07,var_08); + var_08 = var_08 + var_09; + } + else if(var_06 > 0) + { + hud_debug_add_num(var_06,var_08); + var_08 = var_08 + var_09; + hud_debug_add_num(var_07,var_08); + var_08 = var_08 + var_09; + } + else + { + hud_debug_add_num(var_07,var_08); + var_08 = var_08 + var_09; + } + + if(param_02) + { + var_0A = newhudelem(); + var_0A.x = 204.5; + var_0A.y = level.debugheight + level.hudnum * 15; + var_0A.foreground = 1; + var_0A.sort = 100; + var_0A.alpha = 1; + var_0A.alignx = "left"; + var_0A.horzalign = "left"; + var_0A.fontscale = 1; + var_0A settext("."); + level.huddebugnum[level.huddebugnum.size] = var_0A; + } + + if(var_03) + { + var_0B = newhudelem(); + var_0B.x = 195.5; + var_0B.y = level.debugheight + level.hudnum * 15; + var_0B.foreground = 1; + var_0B.sort = 100; + var_0B.alpha = 1; + var_0B.alignx = "left"; + var_0B.horzalign = "left"; + var_0B.fontscale = 1; + var_0B settext(" - "); + level.huddebugnum[level.hudnum] = var_0B; + } + + level.hudnum++; +} + +//Function Number: 86 +hud_debug_add_string(param_00,param_01) +{ + hud_debug_add_message(param_00); + hud_debug_add_second_string(param_01,0); + level.hudnum++; +} + +//Function Number: 87 +hud_debug_add_num(param_00,param_01) +{ + var_02 = newhudelem(); + var_02.x = 200 + param_01 * 0.65; + var_02.y = level.debugheight + level.hudnum * 15; + var_02.foreground = 1; + var_02.sort = 100; + var_02.alpha = 1; + var_02.alignx = "left"; + var_02.horzalign = "left"; + var_02.fontscale = 1; + var_02 settext(param_00 + ""); + level.huddebugnum[level.huddebugnum.size] = var_02; +} + +//Function Number: 88 +hud_debug_add_second_string(param_00,param_01) +{ + var_02 = newhudelem(); + var_02.x = 200 + param_01 * 0.65; + var_02.y = level.debugheight + level.hudnum * 15; + var_02.foreground = 1; + var_02.sort = 100; + var_02.alpha = 1; + var_02.alignx = "left"; + var_02.horzalign = "left"; + var_02.fontscale = 1; + var_02 settext(param_00); + level.huddebugnum[level.huddebugnum.size] = var_02; +} + +//Function Number: 89 +aa_init_stats() +{ + level.sp_stat_tracking_func = ::auto_adjust_new_zone; + setdvar("aa_player_kills","0"); + setdvar("aa_enemy_deaths","0"); + setdvar("aa_enemy_damage_taken","0"); + setdvar("aa_player_damage_taken","0"); + setdvar("aa_player_damage_dealt","0"); + setdvar("aa_ads_damage_dealt","0"); + setdvar("aa_time_tracking","0"); + setdvar("aa_deaths","0"); + setdvar("player_cheated",0); + level.auto_adjust_results = []; + thread aa_time_tracking(); + thread aa_player_health_tracking(); + thread aa_player_ads_tracking(); + common_scripts\utility::flag_set("auto_adjust_initialized"); + common_scripts\utility::flag_init("aa_main_" + level.script); + common_scripts\utility::flag_set("aa_main_" + level.script); +} + +//Function Number: 90 +command_used(param_00) +{ + var_01 = getkeybinding(param_00); + if(var_01["count"] <= 0) + { + return 0; + } + + for(var_02 = 1;var_02 < var_01["count"] + 1;var_02++) + { + if(self buttonpressed(var_01["key" + var_02])) + { + return 1; + } + } + + return 0; +} + +//Function Number: 91 +aa_time_tracking() +{ + waittillframeend; + wait 0.2; +} + +//Function Number: 92 +aa_player_ads_tracking() +{ + level.player endon("death"); + level.player_ads_time = 0; + for(;;) + { + if(level.player maps\_utility::isads()) + { + level.player_ads_time = gettime(); + while(level.player maps\_utility::isads()) + { + wait 0.05; + } + + continue; + } + + wait 0.05; + } +} + +//Function Number: 93 +aa_player_health_tracking() +{ + for(;;) + { + level.player waittill("damage",var_00,var_01,var_02,var_03,var_04,var_05,var_06); + aa_add_event("aa_player_damage_taken",var_00); + if(!isalive(level.player)) + { + aa_add_event("aa_deaths",1); + return; + } + } +} + +//Function Number: 94 +auto_adjust_new_zone(param_00) +{ + if(!isdefined(level.auto_adjust_flags)) + { + level.auto_adjust_flags = []; + } + + common_scripts\utility::flag_wait("auto_adjust_initialized"); + level.auto_adjust_results[param_00] = []; + level.auto_adjust_flags[param_00] = 0; + common_scripts\utility::flag_wait(param_00); + if(getdvar("aa_zone" + param_00) == "") + { + setdvar("aa_zone" + param_00,"on"); + level.auto_adjust_flags[param_00] = 1; + aa_update_flags(); + setdvar("start_time" + param_00,getdvar("aa_time_tracking")); + setdvar("starting_player_kills" + param_00,getdvar("aa_player_kills")); + setdvar("starting_deaths" + param_00,getdvar("aa_deaths")); + setdvar("starting_ads_damage_dealt" + param_00,getdvar("aa_ads_damage_dealt")); + setdvar("starting_player_damage_dealt" + param_00,getdvar("aa_player_damage_dealt")); + setdvar("starting_player_damage_taken" + param_00,getdvar("aa_player_damage_taken")); + setdvar("starting_enemy_damage_taken" + param_00,getdvar("aa_enemy_damage_taken")); + setdvar("starting_enemy_deaths" + param_00,getdvar("aa_enemy_deaths")); + } + else if(getdvar("aa_zone" + param_00) == "done") + { + return; + } + + common_scripts\utility::flag_waitopen(param_00); + auto_adust_zone_complete(param_00); +} + +//Function Number: 95 +auto_adust_zone_complete(param_00) +{ + setdvar("aa_zone" + param_00,"done"); + var_01 = getdvarfloat("start_time" + param_00); + var_02 = getdvarint("starting_player_kills" + param_00); + var_03 = getdvarint("aa_enemy_deaths" + param_00); + var_04 = getdvarint("aa_enemy_damage_taken" + param_00); + var_05 = getdvarint("aa_player_damage_taken" + param_00); + var_06 = getdvarint("aa_player_damage_dealt" + param_00); + var_07 = getdvarint("aa_ads_damage_dealt" + param_00); + var_08 = getdvarint("aa_deaths" + param_00); + level.auto_adjust_flags[param_00] = 0; + aa_update_flags(); + var_09 = getdvarfloat("aa_time_tracking") - var_01; + var_0A = getdvarint("aa_player_kills") - var_02; + var_0B = getdvarint("aa_enemy_deaths") - var_03; + var_0C = 0; + if(var_0B > 0) + { + var_0C = var_0A / var_0B; + var_0C = var_0C * 100; + var_0C = int(var_0C); + } + + var_0D = getdvarint("aa_enemy_damage_taken") - var_04; + var_0E = getdvarint("aa_player_damage_dealt") - var_06; + var_0F = 0; + var_10 = 0; + if(var_0D > 0 && var_09 > 0) + { + var_0F = var_0E / var_0D; + var_0F = var_0F * 100; + var_0F = int(var_0F); + var_10 = var_0E / var_09; + var_10 = var_10 * 60; + var_10 = int(var_10); + } + + var_11 = getdvarint("aa_ads_damage_dealt") - var_07; + var_12 = 0; + if(var_0E > 0) + { + var_12 = var_11 / var_0E; + var_12 = var_12 * 100; + var_12 = int(var_12); + } + + var_13 = getdvarint("aa_player_damage_taken") - var_05; + var_14 = 0; + if(var_09 > 0) + { + var_14 = var_13 / var_09; + } + + var_15 = var_14 * 60; + var_15 = int(var_15); + var_16 = getdvarint("aa_deaths") - var_08; + var_17 = []; + level.auto_adjust_results[var_01] = var_7B; + var_18 = "Completed AA sequence: "; + var_18 = var_18 + level.script + "/" + var_01; + var_19 = getarraykeys(var_7B); + for(var_1A = 0;var_1A < var_19.size;var_1A++ = var_7B["gameskill"]) + { + var_18 = var_18 + ", " + var_19[var_1A] + ": " + var_7B[var_19[var_1A]]; + } + + logstring(var_18); +} + +//Function Number: 96 +aa_print_vals(param_00,param_01) +{ + logstring(param_00 + ": " + param_01[param_00]); +} + +//Function Number: 97 +aa_update_flags() +{ +} + +//Function Number: 98 +aa_add_event(param_00,param_01) +{ + var_02 = getdvarint(param_00); + setdvar(param_00,var_02 + param_01); +} + +//Function Number: 99 +aa_add_event_float(param_00,param_01) +{ + var_02 = getdvarfloat(param_00); + setdvar(param_00,var_02 + param_01); +} + +//Function Number: 100 +return_false(param_00) +{ + return 0; +} + +//Function Number: 101 +player_attacker(param_00) +{ + if([[ level.custom_player_attacker ]](param_00)) + { + return 1; + } + + if(isplayer(param_00)) + { + return 1; + } + + if(!isdefined(param_00.car_damage_owner_recorder)) + { + return 0; + } + + return param_00 player_did_most_damage(); +} + +//Function Number: 102 +player_did_most_damage() +{ + return self.player_damage * 1.75 > self.non_player_damage; +} + +//Function Number: 103 +empty_kill_func(param_00,param_01,param_02) +{ +} + +//Function Number: 104 +auto_adjust_enemy_died(param_00,param_01,param_02,param_03) +{ + aa_add_event("aa_enemy_deaths",1); + if(!isdefined(param_01)) + { + return; + } + + if(!player_attacker(param_01)) + { + return; + } + + [[ level.global_kill_func ]](param_02,self.damagelocation,param_03); + aa_add_event("aa_player_kills",1); +} + +//Function Number: 105 +//Function Number: 106 +aa_player_attacks_enemy_with_ads(param_00,param_01,param_02) +{ + aa_add_event("aa_player_damage_dealt",param_00); + if(!level.player maps\_utility::isads()) + { + [[ level.global_damage_func ]](param_01,self.damagelocation,param_02); + return 0; + } + + if(!bullet_attack(param_01)) + { + [[ level.global_damage_func ]](param_01,self.damagelocation,param_02); + return 0; + } + + [[ level.global_damage_func_ads ]](param_01,self.damagelocation,param_02); + aa_add_event("aa_ads_damage_dealt",param_00); + return 1; +} + +//Function Number: 107 +bullet_attack(param_00) +{ + if(param_00 == "MOD_PISTOL_BULLET") + { + return 1; + } + + return param_00 == "MOD_RIFLE_BULLET"; +} + +//Function Number: 108 +add_fractional_data_point(param_00,param_01,param_02) +{ + if(!isdefined(level.difficultysettings_frac_data_points[param_00])) + { + level.difficultysettings_frac_data_points[param_00] = []; + } + + var_03 = []; + level.difficultysettings_frac_data_points[param_01][level.difficultysettings_frac_data_points[param_01].size] = var_7B; +} + +//Function Number: 109 +coop_with_one_player_downed() +{ + return maps\_utility::is_coop() && maps\_utility::get_players_healthy().size == 1; +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_global_fx.gsc b/MW3/PC/SP/maps/_global_fx.gsc new file mode 100644 index 0000000..aab38a6 --- /dev/null +++ b/MW3/PC/SP/maps/_global_fx.gsc @@ -0,0 +1,119 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_global_fx.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 3 + * Decompile Time: 44 ms + * Timestamp: 10/27/2023 2:22:23 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(!isdefined(level.global_fx)) + { + level.global_fx = []; + } + + level._global_fx_ents = []; + var_00 = randomfloatrange(-20,-15); + global_fx("barrel_fireFX_origin","global_barrel_fire","fire/firelp_barrel_pm",var_00,"fire_barrel_small"); + global_fx("ch_streetlight_02_FX_origin","ch_streetlight_02_FX","misc/lighthaze",var_00); + global_fx("me_streetlight_01_FX_origin","me_streetlight_01_FX","misc/lighthaze_bog_a",var_00); + global_fx("ch_street_light_01_on","lamp_glow_FX","misc/lighthaze",var_00); + global_fx("com_wall_streetlamp_on","com_wall_streetlamp_on_FX","misc/light_glow_white_dim",var_00); + global_fx("lamp_post_globe_on","lamp_glow_FX","misc/light_glow_white",var_00); + global_fx("highway_lamp_post","ch_streetlight_02_FX","misc/lighthaze_villassault",var_00); + global_fx("cs_cargoship_spotlight_on_FX_origin","cs_cargoship_spotlight_on_FX","misc/lighthaze",var_00); + global_fx("me_dumpster_fire_FX_origin","me_dumpster_fire_FX","fire/firelp_med_pm",var_00,"fire_dumpster_medium"); + global_fx("com_tires_burning01_FX_origin","com_tires_burning01_FX","fire/tire_fire_med",var_00); + global_fx("icbm_powerlinetower_FX_origin","icbm_powerlinetower_FX","misc/power_tower_light_red_blink",var_00); + global_fx("icbm_mainframe_FX_origin","icbm_mainframe_FX","props/icbm_mainframe_lightblink",var_00); + global_fx("light_pulse_red_FX_origin","light_pulse_red_FX","misc/light_glow_red_generic_pulse",-2); + global_fx("light_pulse_red_FX_origin","light_pulse_red_FX","misc/light_glow_red_generic_pulse",-2); + global_fx("light_pulse_orange_FX_origin","light_pulse_orange_FX","misc/light_glow_orange_generic_pulse",-2); + global_fx("light_red_blink_FX_origin","light_red_blink","misc/power_tower_light_red_blink",-2); + global_fx("lighthaze_oilrig_FX_origin","lighthaze_oilrig","misc/lighthaze_oilrig",var_00); + global_fx("lighthaze_white_FX_origin","lighthaze_white","misc/lighthaze_white",var_00); + global_fx("light_glow_walllight_white_FX_origin","light_glow_walllight_white","misc/light_glow_walllight_white",var_00); + global_fx("fluorescent_glow_FX_origin","fluorescent_glow","misc/fluorescent_glow",var_00); + global_fx("light_glow_industrial_FX_origin","light_glow_industrial","misc/light_glow_industrial",var_00); + global_fx("light_red_steady_FX_origin","light_red_steady","misc/tower_light_red_steady",-2); + global_fx("light_blue_steady_FX_origin","light_blue_steady","misc/tower_light_blue_steady",-2); + global_fx("light_orange_steady_FX_origin","light_orange_steady","misc/tower_light_orange_steady",-2); + global_fx("glow_stick_pile_FX_origin","glow_stick_pile","misc/glow_stick_glow_pile",-2); + global_fx("highrise_blinky_tower","highrise_blinky_tower_FX","misc/power_tower_light_red_blink_large",var_00,undefined,1.5); + global_fx("flare_ambient_FX_origin","flare_ambient_FX","misc/flare_ambient",var_00,"emt_road_flare_burn",1.5); + global_fx("light_glow_white_bulb_FX_origin","light_glow_white_bulb_FX","misc/light_glow_white_bulb",var_00); + global_fx("light_glow_white_lamp_FX_origin","light_glow_white_lamp_FX","misc/light_glow_white_lamp",var_00); +} + +//Function Number: 2 +global_fx(param_00,param_01,param_02,param_03,param_04,param_05) +{ + level.global_fx[param_00] = param_01; + var_06 = maps\_utility::getstructarray_delete(param_00,"targetname"); + if(!isdefined(var_06)) + { + return; + } + + if(var_06.size <= 0) + { + return; + } + + for(var_07 = 0;var_07 < var_06.size;var_07++) + { + var_08 = var_06[var_07] global_fx_create(param_01,param_02,param_03,param_04,param_05); + if(!isdefined(var_06[var_07].script_noteworthy)) + { + continue; + } + + var_09 = var_06[var_07].script_noteworthy; + if(!isdefined(level._global_fx_ents[var_09])) + { + level._global_fx_ents[var_09] = []; + } + + level._global_fx_ents[var_09][level._global_fx_ents[var_09].size] = var_08; + } +} + +//Function Number: 3 +global_fx_create(param_00,param_01,param_02,param_03,param_04) +{ + if(!isdefined(level._effect)) + { + level._effect = []; + } + + if(!isdefined(level._effect[param_00])) + { + level._effect[param_00] = loadfx(param_01); + } + + if(isdefined(param_04)) + { + param_02 = param_02 + randomfloat(param_04); + } + + if(!isdefined(self.angles)) + { + self.angles = (0,0,0); + } + + var_05 = common_scripts\utility::createoneshoteffect(param_00); + var_05.v["origin"] = self.origin; + var_05.v["angles"] = self.angles; + var_05.v["fxid"] = param_00; + var_05.v["delay"] = param_02; + if(isdefined(param_03)) + { + var_05.v["soundalias"] = param_03; + } + + return var_05; +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_heli_ride.gsc b/MW3/PC/SP/maps/_heli_ride.gsc new file mode 100644 index 0000000..884e83e --- /dev/null +++ b/MW3/PC/SP/maps/_heli_ride.gsc @@ -0,0 +1,167 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_heli_ride.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 5 + * Decompile Time: 55 ms + * Timestamp: 10/27/2023 2:20:06 AM +*******************************************************************/ + +//Function Number: 1 +ride_setup(param_00,param_01) +{ + maps\_vehicle::godon(); + maps\_vehicle_aianim::getout_rigspawn(maps\_vehicle_aianim::getanimatemodel(),3); + if(!isdefined(param_01)) + { + param_01 = level.players; + } + + foreach(var_03 in param_01) + { + thread attach_player(var_03,3); + } + + var_05 = 95; + if(isdefined(param_00.speed)) + { + var_05 = param_00.speed; + } + + self setairresistance(30); + self vehicle_setspeed(var_05,40,level.heli_default_decel); + maps\_vehicle::vehicle_paths(param_00); +} + +//Function Number: 2 +attach_player(param_00,param_01,param_02) +{ + param_00 thread player_in_heli(self); + if(getdvar("fastrope_arms") == "") + { + setdvar("fastrope_arms","0"); + } + + if(!isdefined(param_02)) + { + param_02 = 0; + } + + var_03 = undefined; + for(var_04 = 0;var_04 < self.riders.size;var_04++) + { + if(self.riders[var_04].vehicle_position == param_01) + { + var_03 = self.riders[var_04]; + var_03.drone_delete_on_unload = 1; + var_03.playerpiggyback = 1; + break; + } + } + + var_05 = maps\_vehicle_aianim::anim_pos(self,param_01); + var_03 notify("newanim"); + var_03 detachall(); + var_03 setmodel("fastrope_arms"); + var_03 useanimtree(var_05.player_animtree); + thread maps\_vehicle_aianim::guy_idle(var_03,param_01); + wait 0.1; + if(isdefined(level.little_bird)) + { + param_00 playerlinkto(var_03,"tag_player",0.35,120,28,30,30,0); + } + else + { + param_00 playerlinkto(var_03,"tag_player",0.35,60,28,30,30,0); + } + + param_00 freezecontrols(0); + var_03 hide(); + var_06 = getanimlength(var_05.getout); + var_06 = var_06 - param_02; + self waittill("unloading"); + if(getdvar("fastrope_arms") != "0") + { + var_03 show(); + } + + param_00 disableweapons(); + wait var_06; + param_00 unlink(); + param_00 enableweapons(); + setsaveddvar("hud_drawhud","1"); + level notify("stop_draw_hud_on_death"); +} + +//Function Number: 3 +player_in_heli(param_00) +{ + setsaveddvar("g_friendlyNameDist",0); + setsaveddvar("g_friendlyfireDist",0); + maps\_utility::hide_player_model(); + self allowsprint(0); + self allowprone(0); + self allowstand(0); + self enableinvulnerability(); + self.ignoreme = 1; + wait 0.05; + self setplayerangles((0,35,0)); + param_00 waittill("unloading"); + self notify("stop_quake"); + wait 6; + maps\_utility::autosave_by_name("on_the_ground"); + self allowprone(0); + self allowstand(1); + self allowcrouch(0); + wait 0.05; + self allowprone(1); + self allowcrouch(1); + self disableinvulnerability(); + self.ignoreme = 0; + self allowsprint(1); + wait 4; + maps\_utility::show_player_model(); + if(self == level.player) + { + for(var_01 = 0;var_01 < 24;var_01++) + { + self setorigin(self.origin + (2,0,0)); + wait 0.05; + } + } + + setsaveddvar("g_friendlyNameDist",15000); + setsaveddvar("g_friendlyfireDist",128); +} + +//Function Number: 4 +player_heli_ropeanimoverride_idle(param_00,param_01,param_02) +{ + self endon("unloading"); + maps\_vehicle_aianim::animontag(param_00,param_01,param_02); +} + +//Function Number: 5 +ride_start(param_00,param_01) +{ + var_02 = "heli_ride_in"; + var_03 = getentarray(var_02,"targetname"); + if(!var_03.size) + { + var_03 = common_scripts\utility::getstructarray("heli_ride_in","targetname"); + if(!var_03.size) + { + } + } + + var_03 = var_03[0]; + if(isdefined(param_01)) + { + maps\_vehicle::vehicle_spawn_group_limit_riders(level.gag_heliride_spawner.script_vehicleride,param_01); + } + + var_04 = maps\_vehicle::vehicle_spawn(level.gag_heliride_spawner); + var_04 thread ride_setup(var_03,param_00); + return var_04; +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_helicopter_ai.gsc b/MW3/PC/SP/maps/_helicopter_ai.gsc new file mode 100644 index 0000000..25b9c71 --- /dev/null +++ b/MW3/PC/SP/maps/_helicopter_ai.gsc @@ -0,0 +1,287 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_helicopter_ai.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 10 + * Decompile Time: 155 ms + * Timestamp: 10/27/2023 2:23:14 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 = []; + return evasive_createmaneuvers(param_01,var_7B[randomint(var_7B.size)]); + var_7B[3] + "360_counter_clockwise" + var_7B[2] + "360_clockwise" + var_7B[1] + "strafe_right_left" + var_7B[0] + "strafe_left_right" + break; + } + + var_03 = evasive_getallpoints(var_02); + 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::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(); +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_helicopter_globals.gsc b/MW3/PC/SP/maps/_helicopter_globals.gsc new file mode 100644 index 0000000..7a73b8a --- /dev/null +++ b/MW3/PC/SP/maps/_helicopter_globals.gsc @@ -0,0 +1,785 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_helicopter_globals.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 15 + * Decompile Time: 268 ms + * Timestamp: 10/27/2023 2:23:15 AM +*******************************************************************/ + +//Function Number: 1 +globalthink() +{ + if(!isdefined(self.vehicletype)) + { + return; + } + + var_00 = 0; + if(self.vehicletype == "hind" || self.vehicletype == "ny_harbor_hind") + { + var_00 = 1; + } + + if(self.vehicletype == "cobra" || self.vehicletype == "cobra_player") + { + thread attachmissiles("chopperpilot_hellfire","cobra_Sidewinder"); + if(isdefined(self.fullmodel)) + { + self.fullmodel thread attachmissiles("chopperpilot_hellfire","cobra_Sidewinder"); + } + + var_00 = 1; + } + + if(!var_00) + { + return; + } + + level thread flares_think(self); + level thread maps\_helicopter_ai::evasive_think(self); + if(getdvar("cobrapilot_wingman_enabled") == "1") + { + if(isdefined(self.script_wingman)) + { + level.wingman = self; + level thread maps\_helicopter_ai::wingman_think(self); + } + } +} + +//Function Number: 2 +flares_think(param_00) +{ + param_00 endon("death"); + notifyoncommand("flare_button","+frag"); + notifyoncommand("flare_button","+usereload"); + notifyoncommand("flare_button","+activate"); + while(param_00.health > 0) + { + if(isdefined(param_00.playercontrolled)) + { + param_00.pilot waittill("flare_button"); + } + else + { + param_00 waittill("incomming_missile",var_01); + if(!isdefined(var_01)) + { + continue; + } + + if(randomint(3) == 0) + { + continue; + } + + wait randomfloatrange(0.5,1); + } + + thread flares_fire(param_00); + wait 3; + } +} + +//Function Number: 3 +flares_fire_burst(param_00,param_01,param_02,param_03) +{ + var_04 = 1; + for(var_05 = 0;var_05 < param_01;var_05++) + { + playfx(level.flare_fx[param_00.vehicletype],param_00 gettagorigin("tag_flare")); + if(isdefined(param_00.playercontrolled)) + { + level.stats["flares_used"]++; + param_00 notify("dropping_flares"); + if(var_04) + { + param_00 playsound("cobra_flare_fire"); + } + + var_04 = !var_04; + } + + if(var_05 <= param_02 - 1) + { + thread flares_redirect_missiles(param_00,param_03); + } + + wait 0.1; + } +} + +//Function Number: 4 +flares_fire(param_00) +{ + param_00 endon("death"); + var_01 = 5; + if(isdefined(param_00.flare_duration)) + { + var_01 = param_00.flare_duration; + } + + flares_fire_burst(param_00,8,1,var_01); +} + +//Function Number: 5 +create_missileattractor_on_player_chopper() +{ + if(isdefined(self.missileattractor)) + { + missile_deleteattractor(self.missileattractor); + } + + self.missileattractor = missile_createattractorent(self.centeraimpoint,10000,10000); +} + +//Function Number: 6 +flares_redirect_missiles(param_00,param_01) +{ + param_00 notify("flares_out"); + param_00 endon("death"); + param_00 endon("flares_out"); + if(!isdefined(param_01)) + { + param_01 = 5; + } + + var_02 = flares_get_vehicle_velocity(param_00); + var_03 = spawn("script_origin",param_00 gettagorigin("tag_flare")); + var_03 movegravity(var_02,param_01); + var_04 = undefined; + if(isdefined(param_00.playercontrolled)) + { + if(isdefined(param_00.missileattractor)) + { + missile_deleteattractor(param_00.missileattractor); + } + + var_04 = missile_createattractorent(var_03,10000,10000); + } + + if(isdefined(param_00.incomming_missiles)) + { + for(var_05 = 0;var_05 < param_00.incomming_missiles.size;var_05++) + { + param_00.incomming_missiles[var_05] missile_settargetent(var_03); + } + } + + wait param_01; + if(isdefined(param_00.playercontrolled)) + { + if(isdefined(var_04)) + { + missile_deleteattractor(var_04); + } + + param_00 thread create_missileattractor_on_player_chopper(); + } + + if(!isdefined(param_00.script_targetoffset_z)) + { + param_00.script_targetoffset_z = 0; + } + + var_06 = (0,0,param_00.script_targetoffset_z); + if(!isdefined(param_00.incomming_missiles)) + { + return; + } + + for(var_05 = 0;var_05 < param_00.incomming_missiles.size;var_05++) + { + param_00.incomming_missiles[var_05] missile_settargetent(param_00,var_06); + } +} + +//Function Number: 7 +flares_get_vehicle_velocity(param_00) +{ + var_01 = param_00.origin; + wait 0.05; + var_02 = param_00.origin - var_01; + return var_02 * 20; +} + +//Function Number: 8 +missile_deathwait(param_00,param_01) +{ + param_01 endon("death"); + param_00 waittill("death"); + if(!isdefined(param_01.incomming_missiles)) + { + return; + } + + param_01.incomming_missiles = common_scripts\utility::array_remove(param_01.incomming_missiles,param_00); +} + +//Function Number: 9 +getenemytarget(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + if(!isdefined(param_02)) + { + param_02 = 0; + } + + if(!isdefined(param_03)) + { + param_03 = 0; + } + + if(!isdefined(param_04)) + { + param_04 = 1; + } + + if(!isdefined(param_05)) + { + param_05 = 0; + } + + var_07 = []; + var_08 = undefined; + var_09 = common_scripts\utility::get_enemy_team(self.script_team); + var_0A = []; + if(param_04) + { + for(var_0B = 0;var_0B < level.vehicles[var_09].size;var_0B++) + { + var_0A[var_0A.size] = level.vehicles[var_09][var_0B]; + } + } + + if(param_02) + { + var_0C = getaiarray(var_09); + for(var_0B = 0;var_0B < var_0C.size;var_0B++) + { + if(isdefined(var_0C[var_0B].ignored_by_attack_heli)) + { + continue; + } + + var_0A[var_0A.size] = var_0C[var_0B]; + } + + if(var_09 == "allies") + { + for(var_0B = 0;var_0B < level.players.size;var_0B++) + { + var_0A[var_0A.size] = level.players[var_0B]; + } + } + } + + if(isdefined(param_06)) + { + var_0A = maps\_utility::array_exclude(var_0A,param_06); + } + + if(param_05) + { + var_0A = maps\_utility::array_randomize(var_0A); + } + + var_0D = anglestoforward(self.angles); + for(var_0B = 0;var_0B < var_0A.size;var_0B++) + { + if(issentient(var_0A[var_0B]) && issentient(self) && self getthreatbiasgroup() != "") + { + var_0E = getthreatbias(var_0A[var_0B] getthreatbiasgroup(),self getthreatbiasgroup()); + if(var_0E <= -1000000) + { + continue; + } + } + + if(isdefined(param_00) && param_00 > 0) + { + if(distance(self.origin,var_0A[var_0B].origin) > param_00) + { + continue; + } + } + + if(isdefined(param_01)) + { + var_0F = vectornormalize(var_0A[var_0B].origin - self.origin); + var_10 = vectordot(var_0D,var_0F); + if(var_10 <= param_01) + { + continue; + } + } + + if(param_03) + { + var_11 = 0; + if(isai(var_0A[var_0B])) + { + var_12 = 48; + } + else + { + var_12 = 150; + } + + var_11 = sighttracepassed(self.origin,var_0A[var_0B].origin + (0,0,var_12),0,self); + if(!var_11) + { + continue; + } + } + + var_07[var_07.size] = var_0A[var_0B]; + } + + self notify("gunner_new_target"); + if(var_07.size == 0) + { + return var_08; + } + + if(var_07.size == 1) + { + return var_07[0]; + } + + var_13 = maps\_utility::getclosest(self.origin,var_07); + return var_13; +} + +//Function Number: 10 +shootenemytarget_bullets(param_00) +{ + self endon("death"); + self endon("mg_off"); + param_00 endon("death"); + self endon("gunner_new_target"); + if(isdefined(self.playercontrolled)) + { + self endon("gunner_stop_firing"); + } + + var_01 = (0,0,0); + if(isdefined(param_00.script_targetoffset_z)) + { + var_01 = var_01 + (0,0,param_00.script_targetoffset_z); + } + else if(issentient(param_00)) + { + var_01 = (0,0,32); + } + + self setturrettargetent(param_00,var_01); + while(self.health > 0) + { + var_02 = randomintrange(1,25); + if(getdvar("cobrapilot_debug") == "1") + { + iprintln("randomShots = " + var_02); + } + + for(var_03 = 0;var_03 < var_02;var_03++) + { + if(isdefined(self.playercontrolled)) + { + if(isdefined(level.cobraweapon) && level.cobraweapon.size > 0) + { + self setvehweapon(level.gunnerweapon); + } + } + + thread shootenemytarget_bullets_debugline(self,"tag_turret",param_00,var_01,(1,1,0),0.05); + self fireweapon("tag_flash"); + if(isdefined(self.playercontrolled)) + { + self setvehweapon(level.cobraweapon[self.pilot.currentweapon].v["weapon"]); + } + + wait 0.05; + } + + wait randomfloatrange(0.25,2.5); + } +} + +//Function Number: 11 +shootenemytarget_bullets_debugline(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if(getdvar("cobrapilot_debug") != "1") + { + return; + } + + if(!isdefined(param_04)) + { + param_04 = (0,0,0); + } + + param_02 endon("death"); + self endon("gunner_new_target"); + if(!isdefined(param_03)) + { + param_03 = (0,0,0); + } + + if(isdefined(param_05)) + { + param_05 = gettime() + param_05 * 1000; + while(gettime() < param_05) + { + wait 0.05; + } + + return; + } + + wait 0.05; +} + +//Function Number: 12 +attachmissiles(param_00,param_01,param_02,param_03) +{ + self.hasattachedweapons = 1; + var_04 = []; + if(isdefined(param_02)) + { + } + + if(isdefined(param_03)) + { + } + + if(isdefined(var_04)) + { + } + + for(var_05 = 0;var_05 < var_7B.size;var_05++ = var_04) + { + for(var_06 = 0;var_06 < level.cobra_weapon_tags[var_7B[var_05]].size;var_06++ = var_7B[3]) + { + self attach(level.cobra_missile_models[var_7B[var_05]],level.cobra_weapon_tags[var_7B[var_05]][var_06]); + } + } +} + +//Function Number: 13 +fire_missile(param_00,param_01,param_02,param_03,param_04) +{ + if(!isdefined(param_01)) + { + param_01 = 1; + } + + var_05 = undefined; + var_06 = undefined; + var_07 = "cobra_20mm"; + var_08 = []; + switch(param_00) + { + case "f15_missile": + var_05 = "cobra_Sidewinder"; + break; + var_7B[1] + "ri_side_wing_jnt" + var_7B[0] + "le_side_wing_jnt" + break; + + case "mi28_seeker": + var_06 = "cobra_seeker"; + break; + var_7B[3] + "tag_store_R_2_a" + var_7B[2] + "tag_store_L_2_a" + var_7B[1] + "tag_store_R_1_a" + var_7B[0] + "tag_store_L_1_a" + break; + + case "ffar": + var_06 = "cobra_FFAR"; + break; + var_7B[0] + "tag_store_r_2" + break; + + case "seeker": + var_06 = "cobra_seeker"; + break; + var_7B[0] + "tag_store_r_2" + break; + + case "ffar_bog_a_lite": + var_06 = "cobra_FFAR_bog_a_lite"; + break; + var_7B[0] + "tag_store_r_2" + break; + + case "ffar_airlift": + var_06 = "cobra_FFAR_airlift"; + break; + var_7B[1] + "tag_store_R_wing" + var_7B[0] + "tag_store_L_wing" + break; + + case "ffar_airlift_nofx": + var_06 = "cobra_FFAR_airlift_nofx"; + break; + var_7B[1] + "tag_store_R_wing" + var_7B[0] + "tag_store_L_wing" + break; + + case "cobra_zippy": + var_06 = "zippy_rockets"; + break; + var_7B[1] + "tag_store_R_wing" + var_7B[0] + "tag_store_L_wing" + break; + + case "apache_zippy": + var_06 = "zippy_rockets_apache"; + break; + var_7B[1] + "tag_flash_3" + var_7B[0] + "tag_flash_2" + break; + + case "apache_zippy_nd": + var_06 = "zippy_rockets_apache_nodamage"; + break; + var_7B[1] + "tag_flash_3" + var_7B[0] + "tag_flash_2" + break; + + case "mi28_zippy": + var_06 = "zippy_rockets_apache"; + break; + var_7B[1] + "tag_store_R_wing" + var_7B[0] + "tag_store_L_wing" + break; + + case "mi28_zippy_cheap": + var_06 = "zippy_rockets_apache_cheap"; + break; + var_7B[1] + "tag_store_R_wing" + var_7B[0] + "tag_store_L_wing" + break; + + case "cobra_turret": + var_06 = "hind_turret_penetration"; + break; + var_7B[1] + "tag_store_R_wing" + var_7B[0] + "tag_store_L_wing" + break; + + case "ffar_hind": + var_08 = "hind_turret"; + var_06 = "hind_FFAR"; + break; + var_7B[1] + "tag_missile_right" + var_7B[0] + "tag_missile_left" + break; + + case "hind_zippy": + var_08 = "hind_turret"; + var_06 = "zippy_rockets"; + break; + var_7B[1] + "tag_missile_right" + var_7B[0] + "tag_missile_left" + break; + + case "hind_rpg": + var_08 = "hind_turret"; + var_06 = "rpg"; + break; + var_7B[1] + "tag_missile_right" + var_7B[0] + "tag_missile_left" + break; + + case "hind_rpg_cheap": + var_08 = "hind_turret"; + var_06 = "rpg_cheap"; + break; + var_7B[1] + "tag_missile_right" + var_7B[0] + "tag_missile_left" + break; + + case "ffar_hind_nodamage": + var_08 = "hind_turret"; + var_06 = "hind_FFAR_nodamage"; + break; + var_7B[1] + "tag_missile_right" + var_7B[0] + "tag_missile_left" + break; + + case "ffar_mi28_village_assault": + var_08 = "hind_turret"; + var_06 = "mi28_ffar_village_assault"; + break; + var_7B[7] + "tag_store_R_2_d" + var_7B[6] + "tag_store_L_2_d" + var_7B[5] + "tag_store_R_2_c" + var_7B[4] + "tag_store_L_2_c" + var_7B[3] + "tag_store_R_2_b" + var_7B[2] + "tag_store_L_2_b" + var_7B[1] + "tag_store_R_2_a" + var_7B[0] + "tag_store_L_2_a" + break; + + case "ffar_co_rescue": + var_06 = "cobra_FFAR_bog_a_lite"; + break; + var_7B[1] + "tag_store_L_2_a" + var_7B[0] + "tag_store_R_2_a" + break; + + default: + break; + } + + var_07 = weaponfiretime(var_06); + if(isdefined(self.nextmissiletag)) + { + var_09 = self.nextmissiletag; + } + else + { + var_09 = -1; + } + + for(var_0A = 0;var_0A < param_02;var_0A++) + { + var_09++; + var_09 = var_09 % var_7B.size; + if(param_01 == "ffar_mi28_village_assault") + { + if(isdefined(param_03) && isdefined(param_03.origin)) + { + magicbullet(var_06,self gettagorigin(var_7B[var_09]),param_03.origin); + if(isdefined(level._effect["ffar_mi28_muzzleflash"])) + { + playfxontag(common_scripts\utility::getfx("ffar_mi28_muzzleflash"),self,var_7B[var_09]); + } + + thread delayed_earthquake(0.1,0.5,0.2,param_03.origin,1600); + } + } + else + { + self setvehweapon(var_06); + if(isdefined(param_03)) + { + var_0B = self fireweapon(var_7B[var_09],param_03); + maps\_audio::aud_send_msg("missile_fired",var_0B); + switch(param_01) + { + case "ffar_airlift": + case "ffar_bog_a_lite": + case "ffar": + var_0B thread missilelosetarget(0.1); + break; + + case "apache_zippy_wall": + case "mi28_zippy_cheap": + case "mi28_zippy": + case "apache_zippy_nd": + case "apache_zippy": + if(!isdefined(var_05)) + { + var_0B thread missilelosetarget(0.6); + } + else + { + var_0B thread missilelosetarget(var_05); + } + break; + + default: + break; + } + } + else + { + var_0B = self fireweapon(var_09[var_0A]); + } + + self notify("missile_fired",var_0B); + } + + self.nextmissiletag = var_09; + if(var_0A < param_02 - 1) + { + wait var_07; + } + + if(isdefined(param_04)) + { + wait param_04; + } + } + + self setvehweapon(var_08); +} + +//Function Number: 14 +delayed_earthquake(param_00,param_01,param_02,param_03,param_04) +{ + wait param_00; + earthquake(param_01,param_02,param_03,param_04); +} + +//Function Number: 15 +missilelosetarget(param_00) +{ + self endon("death"); + wait param_00; + if(isdefined(self)) + { + self missile_cleartarget(); + } +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_hiding_door.gsc b/MW3/PC/SP/maps/_hiding_door.gsc new file mode 100644 index 0000000..d141e53 --- /dev/null +++ b/MW3/PC/SP/maps/_hiding_door.gsc @@ -0,0 +1,466 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_hiding_door.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 13 + * Decompile Time: 210 ms + * Timestamp: 10/27/2023 2:23:07 AM +*******************************************************************/ + +//Function Number: 1 +hiding_door_spawner() +{ + var_00 = getentarray("hiding_door_guy_org","targetname"); + var_01 = maps\_utility::getclosest(self.origin,var_00); + var_01.targetname = undefined; + var_02 = getentarray(var_01.target,"targetname"); + var_03 = undefined; + var_04 = undefined; + var_05 = undefined; + if(isdefined(var_01.script_linkto)) + { + var_05 = var_01 common_scripts\utility::get_linked_ent(); + } + + if(var_02.size == 1) + { + var_03 = var_02[0]; + } + else + { + foreach(var_07 in var_02) + { + if(var_07.code_classname == "script_brushmodel") + { + var_04 = var_07; + continue; + } + + if(var_07.code_classname == "script_model") + { + var_03 = var_07; + } + } + } + + var_09 = getent(var_03.target,"targetname"); + var_0A = undefined; + if(isdefined(var_09.target)) + { + var_0A = getent(var_09.target,"targetname"); + } + + if(isdefined(var_0A)) + { + var_01 thread hiding_door_guy_pushplayer(var_0A); + if(!isdefined(level._hiding_door_pushplayer_clips)) + { + level._hiding_door_pushplayer_clips = []; + } + + level._hiding_door_pushplayer_clips[level._hiding_door_pushplayer_clips.size] = var_0A; + } + + var_03 delete(); + var_0B = maps\_utility::spawn_anim_model("hiding_door"); + var_01 thread maps\_anim::anim_first_frame_solo(var_0B,"fire_3"); + if(isdefined(var_04)) + { + var_04 linkto(var_0B,"door_hinge_jnt"); + var_0B hide(); + } + + if(isdefined(var_09)) + { + var_09 linkto(var_0B,"door_hinge_jnt"); + var_09 disconnectpaths(); + } + + var_0C = undefined; + if(isdefined(self.target)) + { + var_0C = getent(self.target,"targetname"); + if(!issubstr(var_0C.classname,"trigger")) + { + var_0C = undefined; + } + } + + if(!isdefined(self.script_flag_wait) && !isdefined(var_0C)) + { + var_0D = 200; + if(isdefined(self.radius)) + { + var_0D = self.radius; + } + + var_0C = spawn("trigger_radius",var_01.origin,0,var_0D,48); + } + + if(isdefined(var_05)) + { + badplace_brush(var_05 getentitynumber(),0,var_05,"allies"); + } + + maps\_utility::add_spawn_function(::hiding_door_guy,var_01,var_0C,var_0B,var_09,var_05); +} + +//Function Number: 2 +hiding_door_guy(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = hiding_door_starts_open(param_00); + self.animname = "hiding_door_guy"; + self endon("death"); + self endon("damage"); + self.grenadeammo = 2; + maps\_utility::set_deathanim("death_2"); + self.allowdeath = 1; + self.health = -15536; + var_06 = []; + thread hiding_door_guy_cleanup(param_01,self,param_03,param_04,var_05); + thread hiding_door_death(param_03,param_01,self,param_04,var_05); + if(var_06) + { + param_01 thread maps\_anim::anim_loop(var_7B,"idle"); + } + else + { + param_01 thread maps\_anim::anim_first_frame(var_7B,"fire_3"); + } + + if(isdefined(param_02)) + { + wait 0.05; + param_02 waittill(param_02,var_7B[var_06.size],self,var_7B[var_7B.size],"trigger"); + } + else + { + common_scripts\utility::flag_wait(self.script_flag_wait); + } + + if(var_06) + { + param_01 notify("stop_loop"); + param_01 maps\_anim::anim_single(var_7B,"close"); + } + + var_07 = 0; + var_08 = 0; + for(;;) + { + var_09 = level.player; + if(isdefined(self.enemy)) + { + var_09 = self.enemy; + } + + var_0A = hiding_door_get_enemy_direction(param_03.angles,self.origin,var_09.origin); + if(player_entered_backdoor(var_0A)) + { + if(quit_door_behavior()) + { + return; + } + } + + if(var_07 >= 2) + { + if(quit_door_behavior(1)) + { + return; + } + } + + var_0B = undefined; + if(var_0A == "left" || var_0A == "front") + { + var_0B = "fire_3"; + } + else if(var_0A == "right") + { + var_0B = "fire_1"; + if(common_scripts\utility::cointoss()) + { + var_0B = "fire_2"; + } + } + else + { + param_01 maps\_anim::anim_single(var_7B,"open"); + param_01 maps\_anim::anim_single(var_7B,"close"); + var_07++; + continue; + } + + if(hiding_door_guy_should_charge(var_0A,var_09,var_08)) + { + var_0B = "jump"; + if(common_scripts\utility::cointoss()) + { + if(self maymovetopoint(animscripts/utility::func_F99(level.scr_anim[self.animname]["kick"]))) + { + var_0B = "kick"; + } + } + + thread hiding_door_death_door_connections(param_04,var_05); + param_01 notify("push_player"); + self notify("charge"); + self.allowdeath = 1; + self.health = 100; + maps\_utility::clear_deathanim(); + param_01 maps\_anim::anim_single(var_7B,var_0B); + quit_door_behavior(); + return; + } + + if(hiding_door_guy_should_throw_grenade(var_0A,var_08)) + { + self.grenadeammo--; + var_0B = "grenade"; + } + + var_07 = 0; + var_08++; + param_01 thread maps\_anim::anim_single(var_7B,var_0B); + maps\_utility::delaythread(0.05,::maps\_anim::anim_set_time,var_7B,var_0B,0.3); + param_01 waittill(var_0B); + param_01 thread maps\_anim::anim_first_frame(var_7B,"open"); + wait randomfloatrange(0.2,1); + param_01 notify("stop_loop"); + } +} + +//Function Number: 3 +quit_door_behavior(param_00,param_01) +{ + if(!isdefined(param_00)) + { + param_00 = 0; + } + + if(param_00) + { + if(!sighttracepassed(level.player geteye(),self geteye(),0,self)) + { + return 0; + } + } + + self.health = 100; + maps\_utility::clear_deathanim(); + self.goalradius = 512; + self setgoalpos(self.origin); + self notify("quit_door_behavior"); + self stopanimscripted(); + self notify("killanimscript"); + return 1; +} + +//Function Number: 4 +player_entered_backdoor(param_00) +{ + if(param_00 != "behind") + { + return 0; + } + + var_01 = distance(self.origin,level.player.origin); + if(var_01 > 250) + { + return 0; + } + + if(!sighttracepassed(level.player geteye(),self geteye(),0,self)) + { + return 0; + } + + return 1; +} + +//Function Number: 5 +hiding_door_guy_should_charge(param_00,param_01,param_02) +{ + var_03 = 3; + var_04 = 100; + var_05 = 600; + if(param_02 < var_03) + { + return 0; + } + + if(param_01 != level.player) + { + return 0; + } + + if(param_00 != "front") + { + return 0; + } + + var_06 = distance(self.origin,level.player.origin); + if(var_06 < var_04) + { + return 0; + } + + if(var_06 > var_05) + { + return 0; + } + + return common_scripts\utility::cointoss(); +} + +//Function Number: 6 +hiding_door_guy_should_throw_grenade(param_00,param_01) +{ + if(param_01 < 1) + { + return 0; + } + + if(param_00 == "behind") + { + return 0; + } + + if(randomint(100) < 25 * self.grenadeammo) + { + return 1; + } + + return 0; +} + +//Function Number: 7 +hiding_door_get_enemy_direction(param_00,param_01,param_02) +{ + var_03 = anglestoforward(param_00); + var_04 = vectornormalize(var_03); + var_05 = vectortoangles(var_04); + var_06 = vectortoangles(param_02 - param_01); + var_07 = var_05[1] - var_06[1]; + var_07 = var_07 + 360; + var_07 = int(var_07) % 360; + var_08 = undefined; + if(var_07 >= 90 && var_07 <= 270) + { + var_08 = "behind"; + } + else if(var_07 >= 300 || var_07 <= 45) + { + var_08 = "front"; + } + else if(var_07 < 90) + { + var_08 = "right"; + } + else if(var_07 > 270) + { + var_08 = "left"; + } + + return var_08; +} + +//Function Number: 8 +hiding_door_guy_cleanup(param_00,param_01,param_02,param_03,param_04) +{ + param_01 endon("charge"); + param_01 common_scripts\utility::waittill_either("death","quit_door_behavior"); + param_00 notify("stop_loop"); + thread hiding_door_death_door_connections(param_03,param_04); + param_00 notify("push_player"); + if(!isdefined(param_02.played_death_anim)) + { + param_02.played_death_anim = 1; + param_00 thread maps\_anim::anim_single_solo(param_02,"death_2"); + } +} + +//Function Number: 9 +hiding_door_guy_pushplayer(param_00) +{ + self waittill("push_player"); + param_00 moveto(self.origin,1.5); + wait 1.5; + param_00 delete(); +} + +//Function Number: 10 +hiding_door_guy_grenade_throw(param_00) +{ + var_01 = param_00 gettagorigin("J_Wrist_RI"); + var_02 = distance(level.player.origin,param_00.origin) * 2; + if(var_02 < 300) + { + var_02 = 300; + } + + if(var_02 > 1000) + { + var_02 = 1000; + } + + var_03 = vectornormalize(level.player.origin - param_00.origin); + var_04 = var_03 * var_02; + param_00 magicgrenademanual(var_01,var_04,randomfloatrange(3,5)); +} + +//Function Number: 11 +hiding_door_death(param_00,param_01,param_02,param_03,param_04) +{ + param_02 endon("charge"); + param_02 endon("quit_door_behavior"); + param_02 waittill("damage",var_05,var_06); + if(!isalive(param_02)) + { + return; + } + + thread hiding_door_death_door_connections(param_03,param_04); + param_01 notify("push_player"); + param_01 thread maps\_anim::anim_single_solo(param_02,"death_2"); + if(!isdefined(param_00.played_death_anim)) + { + param_00.played_death_anim = 1; + param_01 thread maps\_anim::anim_single_solo(param_00,"death_2"); + } + + wait 0.5; + if(isalive(param_02)) + { + if(isdefined(var_06)) + { + param_02 kill((0,0,0),var_06); + return; + } + + param_02 kill((0,0,0)); + } +} + +//Function Number: 12 +hiding_door_death_door_connections(param_00,param_01) +{ + wait 2; + if(isdefined(param_00)) + { + param_00 disconnectpaths(); + } + + if(isdefined(param_01)) + { + badplace_delete(param_01 getentitynumber()); + } +} + +//Function Number: 13 +hiding_door_starts_open(param_00) +{ + return isdefined(param_00.script_noteworthy) && param_00.script_noteworthy == "starts_open"; +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_hiding_door_anims.gsc b/MW3/PC/SP/maps/_hiding_door_anims.gsc new file mode 100644 index 0000000..e45ffcc --- /dev/null +++ b/MW3/PC/SP/maps/_hiding_door_anims.gsc @@ -0,0 +1,58 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_hiding_door_anims.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 3 + * Decompile Time: 48 ms + * Timestamp: 10/27/2023 2:20:07 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + level.max_number_of_dead_bodies["iding_door"] = #animtree; + level.scr_model["hiding_door"] = "com_door_01_handleleft"; + level.scr_anim["hiding_door"]["close"] = %doorpeek_close_door; + level.scr_anim["hiding_door"]["death_1"] = %doorpeek_deatha_door; + level.scr_anim["hiding_door"]["death_2"] = %doorpeek_deathb_door; + level.scr_anim["hiding_door"]["fire_1"] = %doorpeek_firea_door; + level.scr_anim["hiding_door"]["fire_2"] = %doorpeek_fireb_door; + level.scr_anim["hiding_door"]["fire_3"] = %doorpeek_firec_door; + level.scr_anim["hiding_door"]["peek"] = %doorpeek_idle_door; + level.scr_anim["hiding_door"]["grenade"] = %doorpeek_grenade_door; + level.scr_anim["hiding_door"]["idle"][0] = %doorpeek_idle_door; + level.scr_anim["hiding_door"]["jump"] = %doorpeek_jump_door; + level.scr_anim["hiding_door"]["kick"] = %doorpeek_kick_door; + level.scr_anim["hiding_door"]["open"] = %doorpeek_open_door; + precachemodel(level.scr_model["hiding_door"]); + maps\_anim::addnotetrack_sound("hiding_door","sound door death","any","scn_doorpeek_door_open_death"); + maps\_anim::addnotetrack_sound("hiding_door","sound door open","any","scn_doorpeek_door_open"); + maps\_anim::addnotetrack_sound("hiding_door","sound door slam","any","scn_doorpeek_door_slam"); + main_guy(); + thread notetracks(); +} + +//Function Number: 2 +main_guy() +{ + level.scr_anim["hiding_door_guy"]["close"] = %doorpeek_close; + level.scr_anim["hiding_door_guy"]["death_1"] = %doorpeek_deatha; + level.scr_anim["hiding_door_guy"]["death_2"] = %doorpeek_deathb; + level.scr_anim["hiding_door_guy"]["fire_1"] = %doorpeek_firea; + level.scr_anim["hiding_door_guy"]["fire_2"] = %doorpeek_fireb; + level.scr_anim["hiding_door_guy"]["fire_3"] = %doorpeek_firec; + level.scr_anim["hiding_door_guy"]["peek"] = %doorpeek_idle; + level.scr_anim["hiding_door_guy"]["grenade"] = %doorpeek_grenade; + level.scr_anim["hiding_door_guy"]["idle"][0] = %doorpeek_idle; + level.scr_anim["hiding_door_guy"]["jump"] = %doorpeek_jump; + level.scr_anim["hiding_door_guy"]["kick"] = %doorpeek_kick; + level.scr_anim["hiding_door_guy"]["open"] = %doorpeek_open; +} + +//Function Number: 3 +notetracks() +{ + wait 0.05; + maps\_anim::addnotetrack_customfunction("hiding_door_guy","grenade_throw",::maps\_hiding_door::hiding_door_guy_grenade_throw); +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_hud.gsc b/MW3/PC/SP/maps/_hud.gsc new file mode 100644 index 0000000..0c84760 --- /dev/null +++ b/MW3/PC/SP/maps/_hud.gsc @@ -0,0 +1,31 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_hud.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 12 ms + * Timestamp: 10/27/2023 2:25:10 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level.uiparent = spawnstruct(); + level.uiparent.horzalign = "left"; + level.uiparent.vertalign = "top"; + level.uiparent.alignx = "left"; + level.uiparent.aligny = "top"; + level.uiparent.x = 0; + level.uiparent.y = 0; + level.uiparent.width = 0; + level.uiparent.height = 0; + level.uiparent.children = []; + if(level.console) + { + level.fontheight = 12; + return; + } + + level.fontheight = 12; +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_hud_util.gsc b/MW3/PC/SP/maps/_hud_util.gsc new file mode 100644 index 0000000..f18a72c --- /dev/null +++ b/MW3/PC/SP/maps/_hud_util.gsc @@ -0,0 +1,884 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_hud_util.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 36 + * Decompile Time: 443 ms + * Timestamp: 10/27/2023 2:25:10 AM +*******************************************************************/ + +//Function Number: 1 +setparent(param_00) +{ + if(isdefined(self.parent) && self.parent == param_00) + { + return; + } + + if(isdefined(self.parent)) + { + self.parent removechild(self); + } + + self.parent = param_00; + self.parent addchild(self); + if(isdefined(self.point)) + { + setpoint(self.point,self.relativepoint,self.xoffset,self.yoffset); + return; + } + + setpoint("TOPLEFT"); +} + +//Function Number: 2 +getparent() +{ + return self.parent; +} + +//Function Number: 3 +addchild(param_00) +{ + param_00.index = self.children.size; + self.children[self.children.size] = param_00; +} + +//Function Number: 4 +removechild(param_00) +{ + param_00.parent = undefined; + if(self.children[self.children.size - 1] != param_00) + { + self.children[param_00.index] = self.children[self.children.size - 1]; + self.children[param_00.index].index = param_00.index; + } + + self.children[self.children.size - 1] = undefined; + param_00.index = undefined; +} + +//Function Number: 5 +setpoint(param_00,param_01,param_02,param_03,param_04) +{ + if(!isdefined(param_04)) + { + param_04 = 0; + } + + var_05 = getparent(); + if(param_04) + { + self moveovertime(param_04); + } + + if(!isdefined(param_02)) + { + param_02 = 0; + } + + self.xoffset = param_02; + if(!isdefined(param_03)) + { + param_03 = 0; + } + + self.yoffset = param_03; + self.point = param_00; + self.alignx = "center"; + self.aligny = "middle"; + if(issubstr(param_00,"TOP")) + { + self.aligny = "top"; + } + + if(issubstr(param_00,"BOTTOM")) + { + self.aligny = "bottom"; + } + + if(issubstr(param_00,"LEFT")) + { + self.alignx = "left"; + } + + if(issubstr(param_00,"RIGHT")) + { + self.alignx = "right"; + } + + if(!isdefined(param_01)) + { + param_01 = param_00; + } + + self.relativepoint = param_01; + var_06 = "center"; + var_07 = "middle"; + if(issubstr(param_01,"TOP")) + { + var_07 = "top"; + } + + if(issubstr(param_01,"BOTTOM")) + { + var_07 = "bottom"; + } + + if(issubstr(param_01,"LEFT")) + { + var_06 = "left"; + } + + if(issubstr(param_01,"RIGHT")) + { + var_06 = "right"; + } + + if(var_05 == level.uiparent) + { + self.horzalign = var_06; + self.vertalign = var_07; + } + else + { + self.horzalign = var_05.horzalign; + self.vertalign = var_05.vertalign; + } + + if(var_06 == var_05.alignx) + { + var_08 = 0; + var_09 = 0; + } + else if(var_08 == "center" || var_07.alignx == "center") + { + var_08 = int(var_07.width / 2); + if(var_07 == "left" || var_06.alignx == "right") + { + var_09 = -1; + } + else + { + var_09 = 1; + } + } + else + { + var_08 = var_07.width; + if(var_07 == "left") + { + var_09 = -1; + } + else + { + var_09 = 1; + } + } + + self.x = var_05.x + var_08 * var_09; + if(var_07 == var_05.aligny) + { + var_0A = 0; + var_0B = 0; + } + else if(var_09 == "middle" || var_07.aligny == "middle") + { + var_0A = int(var_07.height / 2); + if(var_08 == "top" || var_06.aligny == "bottom") + { + var_0B = -1; + } + else + { + var_0B = 1; + } + } + else + { + var_0A = var_07.height; + if(var_08 == "top") + { + var_0B = -1; + } + else + { + var_0B = 1; + } + } + + self.y = var_05.y + var_0A * var_0B; + self.x = self.x + self.xoffset; + self.y = self.y + self.yoffset; + switch(self.elemtype) + { + case "bar": + setpointbar(param_00,param_01,param_02,param_03); + break; + } + + updatechildren(); +} + +//Function Number: 6 +setpointbar(param_00,param_01,param_02,param_03) +{ + self.bar.horzalign = self.horzalign; + self.bar.vertalign = self.vertalign; + self.bar.alignx = "left"; + self.bar.aligny = self.aligny; + self.bar.y = self.y; + if(self.alignx == "left") + { + self.bar.x = self.x + self.padding; + } + else if(self.alignx == "right") + { + self.bar.x = self.x - self.width - self.padding; + } + else + { + self.bar.x = self.x - int(self.width - self.padding / 2); + } + + updatebar(self.bar.frac); +} + +//Function Number: 7 +updatebar(param_00) +{ + var_01 = int(self.width - self.padding * 2 * param_00); + if(!var_01) + { + var_01 = 1; + } + + self.bar.frac = param_00; + self.bar setshader(self.bar.shader,var_01,self.height - self.padding * 2); +} + +//Function Number: 8 +hidebar(param_00) +{ + param_00 = common_scripts\utility::ter_op(isdefined(param_00),param_00,1); + if(param_00 || !isdefined(self.var_987) || !isdefined(self.bar.var_987)) + { + self.var_987 = self.alpha; + self.bar.var_987 = self.bar.alpha; + } + + self.alpha = common_scripts\utility::ter_op(param_00,0,self.var_987); + self.bar.alpha = common_scripts\utility::ter_op(param_00,0,self.bar.var_987); +} + +//Function Number: 9 +createfontstring(param_00,param_01) +{ + var_02 = newhudelem(); + var_02.elemtype = "font"; + var_02.font = param_00; + var_02.fontscale = param_01; + var_02.x = 0; + var_02.y = 0; + var_02.width = 0; + var_02.height = int(level.fontheight * param_01); + var_02.xoffset = 0; + var_02.yoffset = 0; + var_02.children = []; + var_02 setparent(level.uiparent); + return var_02; +} + +//Function Number: 10 +createclientfontstring(param_00,param_01) +{ + var_02 = newclienthudelem(self); + var_02.elemtype = "font"; + var_02.font = param_00; + var_02.fontscale = param_01; + var_02.x = 0; + var_02.y = 0; + var_02.width = 0; + var_02.height = int(level.fontheight * param_01); + var_02.xoffset = 0; + var_02.yoffset = 0; + var_02.children = []; + var_02 setparent(level.uiparent); + return var_02; +} + +//Function Number: 11 +createclienttimer(param_00,param_01) +{ + var_02 = newclienthudelem(self); + var_02.elemtype = "timer"; + var_02.font = param_00; + var_02.fontscale = param_01; + var_02.x = 0; + var_02.y = 0; + var_02.width = 0; + var_02.height = int(level.fontheight * param_01); + var_02.xoffset = 0; + var_02.yoffset = 0; + var_02.children = []; + var_02 setparent(level.uiparent); + return var_02; +} + +//Function Number: 12 +createserverfontstring(param_00,param_01) +{ + var_02 = newhudelem(); + var_02.elemtype = "font"; + var_02.font = param_00; + var_02.fontscale = param_01; + var_02.x = 0; + var_02.y = 0; + var_02.width = 0; + var_02.height = int(level.fontheight * param_01); + var_02.xoffset = 0; + var_02.yoffset = 0; + var_02.children = []; + var_02 setparent(level.uiparent); + return var_02; +} + +//Function Number: 13 +createservertimer(param_00,param_01) +{ + var_02 = newhudelem(); + var_02.elemtype = "timer"; + var_02.font = param_00; + var_02.fontscale = param_01; + var_02.x = 0; + var_02.y = 0; + var_02.width = 0; + var_02.height = int(level.fontheight * param_01); + var_02.xoffset = 0; + var_02.yoffset = 0; + var_02.children = []; + var_02 setparent(level.uiparent); + return var_02; +} + +//Function Number: 14 +createicon(param_00,param_01,param_02) +{ + var_03 = newhudelem(); + return createicon_hudelem(var_03,param_00,param_01,param_02); +} + +//Function Number: 15 +createclienticon(param_00,param_01,param_02) +{ + var_03 = newclienthudelem(self); + return createicon_hudelem(var_03,param_00,param_01,param_02); +} + +//Function Number: 16 +createicon_hudelem(param_00,param_01,param_02,param_03) +{ + param_00.elemtype = "icon"; + param_00.x = 0; + param_00.y = 0; + param_00.width = param_02; + param_00.height = param_03; + param_00.xoffset = 0; + param_00.yoffset = 0; + param_00.children = []; + param_00 setparent(level.uiparent); + if(isdefined(param_01)) + { + param_00 setshader(param_01,param_02,param_03); + } + + return param_00; +} + +//Function Number: 17 +createbar(param_00,param_01,param_02,param_03,param_04) +{ + if(!isdefined(param_00)) + { + param_00 = "white"; + } + + if(!isdefined(param_01)) + { + param_01 = "black"; + } + + if(!isdefined(param_02)) + { + param_02 = 100; + } + + if(!isdefined(param_03)) + { + param_03 = 9; + } + + var_05 = newhudelem(); + var_05.x = 2; + var_05.y = 2; + var_05.frac = 0.25; + var_05.shader = param_00; + var_05.sort = -1; + var_05 setshader(param_00,param_02 - 2,param_03 - 2); + if(isdefined(param_04)) + { + var_05.flashfrac = param_04; + var_05 thread flashthread(); + } + + var_06 = newhudelem(); + var_06.elemtype = "bar"; + var_06.x = 0; + var_06.y = 0; + var_06.width = param_02; + var_06.height = param_03; + var_06.xoffset = 0; + var_06.yoffset = 0; + var_06.bar = var_05; + var_06.children = []; + var_06.padding = 2; + var_06.sort = -2; + var_06.alpha = 0.5; + var_06 setparent(level.uiparent); + var_06 setshader(param_01,param_02,param_03); + return var_06; +} + +//Function Number: 18 +createclientprogressbar(param_00,param_01,param_02,param_03,param_04,param_05) +{ + param_00 = common_scripts\utility::ter_op(isdefined(param_00),param_00,level.player); + param_01 = common_scripts\utility::ter_op(isdefined(param_01),param_01,90); + param_02 = common_scripts\utility::ter_op(isdefined(param_02),param_02,"white"); + param_03 = common_scripts\utility::ter_op(isdefined(param_03),param_03,"black"); + param_04 = common_scripts\utility::ter_op(isdefined(param_04),param_04,100); + param_05 = common_scripts\utility::ter_op(isdefined(param_05),param_05,9); + var_06 = param_00 createclientbar(param_02,param_03,param_04,param_05); + var_06 setpoint("CENTER",undefined,0,param_01); + return var_06; +} + +//Function Number: 19 +createclientbar(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = newclienthudelem(self); + var_05.x = 2; + var_05.y = 2; + var_05.frac = 0.25; + var_05.shader = param_00; + var_05.sort = -1; + var_05 setshader(param_00,param_02 - 2,param_03 - 2); + if(isdefined(param_04)) + { + var_05.flashfrac = param_04; + var_05 thread flashthread(); + } + + var_06 = newclienthudelem(self); + var_06.elemtype = "bar"; + var_06.x = 0; + var_06.y = 0; + var_06.width = param_02; + var_06.height = param_03; + var_06.xoffset = 0; + var_06.yoffset = 0; + var_06.bar = var_05; + var_06.children = []; + var_06.padding = 2; + var_06.sort = -2; + var_06.alpha = 0.5; + var_06 setparent(level.uiparent); + var_06 setshader(param_01,param_02,param_03); + return var_06; +} + +//Function Number: 20 +setflashfrac(param_00) +{ + self.bar.flashfrac = param_00; +} + +//Function Number: 21 +fade_over_time(param_00,param_01) +{ + if(isdefined(param_01) && param_01 > 0) + { + self fadeovertime(param_01); + } + + self.alpha = param_00; + if(isdefined(param_01) && param_01 > 0) + { + wait param_01; + } +} + +//Function Number: 22 +flashthread() +{ + self endon("death"); + self.alpha = 1; + for(;;) + { + if(self.frac >= self.flashfrac) + { + self fadeovertime(0.3); + self.alpha = 0.2; + wait 0.35; + self fadeovertime(0.3); + self.alpha = 1; + wait 0.7; + continue; + } + + self.alpha = 1; + wait 0.05; + } +} + +//Function Number: 23 +destroyelem() +{ + var_00 = []; + for(var_01 = 0;var_01 < self.children.size;var_01++) + { + var_00[var_01] = self.children[var_01]; + } + + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + var_00[var_01] setparent(getparent()); + } + + if(self.elemtype == "bar") + { + self.bar destroy(); + } + + self destroy(); +} + +//Function Number: 24 +seticonshader(param_00) +{ + self setshader(param_00,self.width,self.height); +} + +//Function Number: 25 +setwidth(param_00) +{ + self.width = param_00; +} + +//Function Number: 26 +setheight(param_00) +{ + self.height = param_00; +} + +//Function Number: 27 +setsize(param_00,param_01) +{ + self.width = param_00; + self.height = param_01; +} + +//Function Number: 28 +updatechildren() +{ + for(var_00 = 0;var_00 < self.children.size;var_00++) + { + var_01 = self.children[var_00]; + var_01 setpoint(var_01.point,var_01.relativepoint,var_01.xoffset,var_01.yoffset); + } +} + +//Function Number: 29 +stance_carry_icon_enable(param_00) +{ + if(isdefined(param_00) && param_00 == 0) + { + stance_carry_icon_disable(); + return; + } + + if(isdefined(level.var_99F)) + { + level.var_99F destroy(); + } + + setsaveddvar("hud_showStance","0"); + level.var_99F = newhudelem(); + level.var_99F.x = -75; + if(level.console) + { + level.var_99F.y = -20; + } + else + { + level.var_99F.y = -10; + } + + level.var_99F setshader("stance_carry",64,64); + level.var_99F.alignx = "right"; + level.var_99F.aligny = "bottom"; + level.var_99F.horzalign = "right"; + level.var_99F.vertalign = "bottom"; + level.var_99F.foreground = 1; + level.var_99F.alpha = 0; + level.var_99F fadeovertime(0.5); + level.var_99F.alpha = 1; +} + +//Function Number: 30 +stance_carry_icon_disable() +{ + if(isdefined(level.var_99F)) + { + level.var_99F fadeovertime(0.5); + level.var_99F.alpha = 0; + level.var_99F destroy(); + } + + setsaveddvar("hud_showStance","1"); +} + +//Function Number: 31 +create_mantle() +{ + if(level.console) + { + var_00 = createfontstring("default",1.8); + var_00 setpoint("CENTER",undefined,-23,115); + var_00 settext(level.strings["mantle"]); + var_01 = createicon("hint_mantle",40,40); + var_01 setpoint("CENTER",undefined,73,0); + var_01 setparent(var_00); + } + else + { + var_00 = createfontstring("default",1.6); + var_01 setpoint("CENTER",undefined,0,115); + var_01 settext(level.strings["mantle"]); + var_01 = createicon("hint_mantle",40,40); + var_01 setpoint("CENTER",undefined,0,30); + var_01 setparent(var_00); + } + + var_01.alpha = 0; + var_00.alpha = 0; + level.var_9A4 = []; + level.var_9A4["text"] = var_00; + level.var_9A4["icon"] = var_01; +} + +//Function Number: 32 +get_countdown_hud(param_00,param_01,param_02,param_03) +{ + if(!isdefined(param_03)) + { + param_03 = 0; + } + + var_04 = undefined; + if(!level.console) + { + var_04 = -250; + } + else if(!isdefined(param_00)) + { + var_04 = -225; + } + else + { + var_04 = param_00; + } + + if(param_03) + { + var_04 = param_00; + } + + if(!isdefined(param_01)) + { + var_05 = 100; + } + else + { + var_05 = param_02; + } + + if(isdefined(param_02)) + { + var_06 = newclienthudelem(param_02); + } + else + { + var_06 = newhudelem(); + } + + var_06.alignx = "left"; + var_06.aligny = "middle"; + var_06.horzalign = "right"; + var_06.vertalign = "top"; + var_06.x = var_04; + var_06.y = var_05; + var_06.fontscale = 1.6; + var_06.color = (0.8,1,0.8); + var_06.font = "objective"; + var_06.glowcolor = (0.3,0.6,0.3); + var_06.glowalpha = 1; + var_06.foreground = 1; + var_06.hidewheninmenu = 1; + var_06.hidewhendead = 1; + return var_06; +} + +//Function Number: 33 +get_download_state_hud(param_00,param_01,param_02,param_03) +{ + if(!isdefined(param_03)) + { + param_03 = 0; + } + + var_04 = undefined; + if(!level.console) + { + var_04 = -250; + } + else if(!isdefined(param_00)) + { + var_04 = -170; + } + else + { + var_04 = param_00; + } + + if(param_03) + { + var_04 = param_00; + } + + if(!isdefined(param_01)) + { + var_05 = 100; + } + else + { + var_05 = param_02; + } + + if(isdefined(param_02)) + { + var_06 = newclienthudelem(param_02); + } + else + { + var_06 = newhudelem(); + } + + var_06.alignx = "right"; + var_06.aligny = "middle"; + var_06.horzalign = "right"; + var_06.vertalign = "top"; + var_06.x = var_04; + var_06.y = var_05; + var_06.fontscale = 1.6; + var_06.color = (0.8,1,0.8); + var_06.font = "objective"; + var_06.glowcolor = (0.3,0.6,0.3); + var_06.glowalpha = 1; + var_06.foreground = 1; + var_06.hidewheninmenu = 1; + var_06.hidewhendead = 1; + return var_06; +} + +//Function Number: 34 +create_client_overlay(param_00,param_01,param_02) +{ + if(isdefined(param_02)) + { + var_03 = newclienthudelem(param_02); + } + else + { + var_03 = newhudelem(); + } + + var_03.x = 0; + var_03.y = 0; + var_03 setshader(param_00,640,480); + var_03.alignx = "left"; + var_03.aligny = "top"; + var_03.sort = 1; + var_03.horzalign = "fullscreen"; + var_03.vertalign = "fullscreen"; + var_03.alpha = param_01; + var_03.foreground = 1; + return var_03; +} + +//Function Number: 35 +create_client_overlay_custom_size(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = maps\_utility::get_player_from_self(); + var_06 = newclienthudelem(var_05); + if(!isdefined(param_04)) + { + param_04 = 1; + } + + if(!isdefined(param_02)) + { + param_02 = 0; + } + + if(!isdefined(param_03)) + { + param_03 = 0; + } + + var_06.x = param_02; + var_06.y = param_03; + var_06 setshader(param_00,int(640 * param_04),int(480 * param_04)); + var_06.alignx = "center"; + var_06.aligny = "middle"; + var_06.sort = 1; + var_06.horzalign = "center"; + var_06.vertalign = "middle"; + var_06.alpha = param_01; + var_06.foreground = 1; + return var_06; +} + +//Function Number: 36 +create_client_overlay_fullscreen(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = maps\_utility::get_player_from_self(); + var_06 = newclienthudelem(var_05); + if(!isdefined(param_04)) + { + param_04 = 1; + } + + var_06.x = param_02; + var_06.y = param_03; + var_06 setshader(param_00,int(640 * param_04),int(480 * param_04)); + var_06.alignx = "center"; + var_06.aligny = "middle"; + var_06.sort = 1; + var_06.horzalign = "fullscreen"; + var_06.vertalign = "fullscreen"; + var_06.alpha = param_01; + var_06.foreground = 1; + return var_06; +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_hud_weapons.gsc b/MW3/PC/SP/maps/_hud_weapons.gsc new file mode 100644 index 0000000..9f6b9ff --- /dev/null +++ b/MW3/PC/SP/maps/_hud_weapons.gsc @@ -0,0 +1,342 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_hud_weapons.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 11 + * Decompile Time: 135 ms + * Timestamp: 10/27/2023 2:20:07 AM +*******************************************************************/ + +//Function Number: 1 +registerweaponinfo(param_00,param_01,param_02,param_03) +{ + level.weaponinfo[param_00]["type"] = param_02; + level.weaponinfo[param_00]["clip"] = param_03; + level.weaponinfo[param_00]["string"] = param_01; + precachestring(param_01); +} + +//Function Number: 2 +isweaponregistered(param_00) +{ + if(!isdefined(level.weaponinfo[param_00])) + { + return 0; + } + + return 1; +} + +//Function Number: 3 +getweaponinfotype(param_00) +{ + return level.weaponinfo[param_00]["type"]; +} + +//Function Number: 4 +getweaponinfoclip(param_00) +{ + return level.weaponinfo[param_00]["clip"]; +} + +//Function Number: 5 +getweaponinfostring(param_00) +{ + return level.weaponinfo[param_00]["string"]; +} + +//Function Number: 6 +init() +{ + precacheshader("hud_bullets_rifle"); + precacheshader("hud_bullets_pistol"); + precacheshader("hud_bullets_sniper"); + precacheshader("hud_bullets_spread"); + precacheshader("hud_bullets_support_front"); + precacheshader("hud_bullets_support_back"); + level.bulletalphas = []; + level.bulletalphas[level.bulletalphas.size] = 1; + level.bulletalphas[level.bulletalphas.size] = 0.996; + level.bulletalphas[level.bulletalphas.size] = 0.949; + level.bulletalphas[level.bulletalphas.size] = 0.909; + level.bulletalphas[level.bulletalphas.size] = 0.87; + level.bulletalphas[level.bulletalphas.size] = 0.835; + level.bulletalphas[level.bulletalphas.size] = 0.803; + level.bulletalphas[level.bulletalphas.size] = 0.776; + level.bulletalphas[level.bulletalphas.size] = 0.749; + level.bulletalphas[level.bulletalphas.size] = 0.721; + level.bulletalphas[level.bulletalphas.size] = 0.698; + level.bulletalphas[level.bulletalphas.size] = 0.674; + level.bulletalphas[level.bulletalphas.size] = 0.654; + level.bulletalphas[level.bulletalphas.size] = 0.635; + level.bulletalphas[level.bulletalphas.size] = 0.615; + level.bulletalphas[level.bulletalphas.size] = 0.596; + level.bulletalphas[level.bulletalphas.size] = 0.58; + level.bulletalphas[level.bulletalphas.size] = 0.564; + level.bulletalphas[level.bulletalphas.size] = 0.549; + level.bulletalphas[level.bulletalphas.size] = 0.537; + level.bulletalphas[level.bulletalphas.size] = 0.521; + level.bulletalphas[level.bulletalphas.size] = 0.509; + level.bulletalphas[level.bulletalphas.size] = 0.498; + level.weaponinfo = []; + registerweaponinfo("ak47",&"WEAPON_AK47_FULLAUTO","rifle",30); + registerweaponinfo("ak47_semi",&"WEAPON_AK47_SEMIAUTO","rifle",30); + registerweaponinfo("ak47_grenadier",&"WEAPON_AK47","rifle",30); + registerweaponinfo("ak74u",&"WEAPON_AK74U_FULLAUTO","rifle",30); + registerweaponinfo("ak74u_semi",&"WEAPON_AK74U_SEMIAUTO","rifle",30); + registerweaponinfo("beretta",&"WEAPON_BERETTA","pistol",15); + registerweaponinfo("g36c",&"WEAPON_G36C","rifle",30); + registerweaponinfo("m14_scoped",&"WEAPON_M14","sniper",10); + registerweaponinfo("m16_basic",&"WEAPON_M16A4_FULLAUTO","rifle",30); + registerweaponinfo("m16_basic_semi",&"WEAPON_M16A4_SEMIAUTO","rifle",30); + registerweaponinfo("m16_grenadier",&"WEAPON_M16","rifle",30); + registerweaponinfo("m203",&"WEAPON_M203","grenade",1); + registerweaponinfo("rpg",&"WEAPON_RPG","grenade",5); + registerweaponinfo("saw",&"WEAPON_SAW","support",100); + registerweaponinfo("m4_grunt",&"WEAPON_M4_FULLAUTO","rifle",30); + registerweaponinfo("m4_grunt_semi",&"WEAPON_M4_SEMIAUTO","rifle",30); + registerweaponinfo("m4_grenadier",&"WEAPON_M4","rifle",30); + registerweaponinfo("m40a3",&"WEAPON_M40A3","sniper",10); + registerweaponinfo("mp5",&"WEAPON_MP5","smg",30); + registerweaponinfo("mp5_silencer",&"WEAPON_MP5SD","smg",30); + registerweaponinfo("usp",&"WEAPON_USP","pistol",10); + registerweaponinfo("at4",&"WEAPON_AT4","rocketlauncher",1); + registerweaponinfo("dragunov",&"WEAPON_DRAGUNOV","sniper",10); + registerweaponinfo("g3",&"WEAPON_G3","rifle",30); + registerweaponinfo("winchester1200",&"WEAPON_WINCHESTER1200","shotgun",4); + registerweaponinfo("uzi",&"WEAPON_UZI","smg",32); + level.player initweaponhud(); +} + +//Function Number: 7 +initweaponhud() +{ + if(!isdefined(self.hud_bullets)) + { + self.hud_bullets = []; + } + + if(!isdefined(self.hud_bullets[0])) + { + self.hud_bullets[0] = maps\_hud_util::createicon(undefined,24,96); + self.hud_bullets[0] maps\_hud_util::setpoint("BOTTOMRIGHT","BOTTOMRIGHT",-6,-47); + self.hud_bullets[0].sort = 10; + } + + if(!isdefined(self.hud_bullets[1])) + { + self.hud_bullets[1] = maps\_hud_util::createicon(undefined,24,96); + self.hud_bullets[1] maps\_hud_util::setpoint("BOTTOMRIGHT","BOTTOMRIGHT",-6,-47); + self.hud_bullets[1].color = (0.7,0.7,0.7); + self.hud_bullets[1].sort = 9; + } + + if(!isdefined(self.hud_bullets[2])) + { + self.hud_bullets[2] = maps\_hud_util::createicon(undefined,24,96); + self.hud_bullets[2] maps\_hud_util::setpoint("BOTTOMRIGHT","BOTTOMRIGHT",-6,-47); + self.hud_bullets[2].sort = 10; + } + + if(!isdefined(self.hud_bullets[3])) + { + self.hud_bullets[3] = maps\_hud_util::createicon(undefined,24,96); + self.hud_bullets[3] maps\_hud_util::setpoint("BOTTOMRIGHT","BOTTOMRIGHT",-6,-47); + self.hud_bullets[3].color = (0.7,0.7,0.7); + self.hud_bullets[3].sort = 9; + } + + if(!isdefined(self.hud_bullets[4])) + { + self.hud_bullets[4] = maps\_hud_util::createicon(undefined,24,96); + self.hud_bullets[4] maps\_hud_util::setpoint("BOTTOMRIGHT","BOTTOMRIGHT",-6,-47); + self.hud_bullets[4].sort = 10; + } + + thread updatebullethudthink(); +} + +//Function Number: 8 +updatebullethudthink() +{ + self endon("death"); + var_00 = -1; + var_01 = ""; + var_02 = ""; + for(;;) + { + var_03 = self getcurrentweapon(); + if(isweaponregistered(var_03)) + { + var_04 = getweaponinfotype(var_03); + var_05 = self getweaponammoclip(self getcurrentweapon()); + if(var_03 != var_01 && var_04 != var_02) + { + sethudweapontype(var_04); + var_01 = var_03; + var_02 = var_04; + var_00 = -1; + } + + if(var_05 != var_00) + { + updatehudweaponammo(var_03,var_05); + var_00 = var_05; + } + } + + wait 0.05; + } +} + +//Function Number: 9 +sethudweapontype(param_00) +{ + self.pers["weaponType"] = param_00; + if(!isdefined(self.hud_bullets)) + { + return; + } + + for(var_01 = 0;var_01 < self.hud_bullets.size;var_01++) + { + self.hud_bullets[var_01].alpha = 0; + } + + switch(param_00) + { + case "pistol": + self.hud_bullets[0] maps\_hud_util::setpoint("BOTTOMRIGHT","BOTTOMRIGHT",-6,-47); + self.hud_bullets[0] maps\_hud_util::seticonshader("hud_bullets_pistol"); + self.hud_bullets[0].alpha = 1; + break; + + case "smg": + self.hud_bullets[0] maps\_hud_util::setpoint("BOTTOMRIGHT","BOTTOMRIGHT",-6,-47); + self.hud_bullets[0] maps\_hud_util::seticonshader("hud_bullets_rifle"); + self.hud_bullets[1] maps\_hud_util::seticonshader("hud_bullets_rifle"); + self.hud_bullets[1] maps\_hud_util::setpoint("BOTTOMRIGHT","BOTTOMRIGHT",-4,-50); + self.hud_bullets[0].alpha = 1; + self.hud_bullets[1].alpha = 1; + break; + + case "rifle": + self.hud_bullets[0] maps\_hud_util::setpoint("BOTTOMRIGHT","BOTTOMRIGHT",-6,-47); + self.hud_bullets[0] maps\_hud_util::seticonshader("hud_bullets_rifle"); + self.hud_bullets[1] maps\_hud_util::seticonshader("hud_bullets_rifle"); + self.hud_bullets[1] maps\_hud_util::setpoint("BOTTOMRIGHT","BOTTOMRIGHT",-4,-50); + self.hud_bullets[0].alpha = 1; + self.hud_bullets[1].alpha = 1; + break; + + case "sniper": + self.hud_bullets[0] maps\_hud_util::setpoint("BOTTOMRIGHT","BOTTOMRIGHT",-6,-47); + self.hud_bullets[0] maps\_hud_util::seticonshader("hud_bullets_sniper"); + self.hud_bullets[0].alpha = 1; + break; + + case "spread": + self.hud_bullets[0] maps\_hud_util::setpoint("BOTTOMRIGHT","BOTTOMRIGHT",-6,-47); + self.hud_bullets[0] maps\_hud_util::seticonshader("hud_bullets_spread"); + self.hud_bullets[0].alpha = 1; + break; + + case "support": + var_02 = 0; + for(var_01 = 0;var_01 < 5;var_01++) + { + self.hud_bullets[var_01] maps\_hud_util::setpoint("BOTTOMRIGHT","BOTTOMRIGHT",-6 + var_02,-70); + self.hud_bullets[var_01].alpha = 1; + if(var_01 % 2) + { + self.hud_bullets[var_01] maps\_hud_util::seticonshader("hud_bullets_support_back"); + } + else + { + self.hud_bullets[var_01] maps\_hud_util::seticonshader("hud_bullets_support_front"); + } + + var_02 = var_02 - 14; + } + break; + } +} + +//Function Number: 10 +gethudweapontype() +{ + return self.pers["weaponType"]; +} + +//Function Number: 11 +updatehudweaponammo(param_00,param_01) +{ + if(!isdefined(self.hud_bullets)) + { + return; + } + + switch(gethudweapontype()) + { + case "pistol": + var_02 = 15 - getweaponinfoclip(param_00); + var_03 = getweaponinfoclip(param_00) - param_01; + self.hud_bullets[0].alpha = level.bulletalphas[var_02 + var_03]; + break; + + case "rifle": + var_03 = getweaponinfoclip(param_00) - param_01; + var_04 = int(var_03 / 2); + var_04 = var_04 + var_03 % 2; + var_05 = int(var_03 / 2); + self.hud_bullets[0].alpha = level.bulletalphas[var_04]; + self.hud_bullets[1].alpha = level.bulletalphas[var_05]; + break; + + case "smg": + var_03 = getweaponinfoclip(param_00) - param_01; + var_04 = int(var_03 / 2); + var_04 = var_04 + var_03 % 2; + var_05 = int(var_03 / 2); + self.hud_bullets[0].alpha = level.bulletalphas[var_04]; + self.hud_bullets[1].alpha = level.bulletalphas[var_05]; + break; + + case "sniper": + var_02 = 15 - getweaponinfoclip(param_00); + var_03 = getweaponinfoclip(param_00) - param_01; + self.hud_bullets[0].alpha = level.bulletalphas[var_02 + var_03]; + break; + + case "spread": + var_02 = 15 - getweaponinfoclip(param_00); + var_03 = getweaponinfoclip(param_00) - param_01; + self.hud_bullets[0].alpha = level.bulletalphas[var_02 + var_03]; + break; + + case "support": + var_02 = 100 - getweaponinfoclip(param_00); + var_03 = getweaponinfoclip(param_00) - param_01; + var_03 = var_02 + var_03; + var_06 = 20; + for(var_07 = 4;var_07 >= 0;var_07--) + { + if(var_03 > var_06) + { + self.hud_bullets[var_07].alpha = 0; + } + else if(var_06 - var_03 <= 20) + { + self.hud_bullets[var_07].alpha = level.bulletalphas[var_03 - var_06 - 20]; + } + else + { + self.hud_bullets[var_07].alpha = 1; + } + + var_06 = var_06 + 20; + } + break; + } +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_intelligence.gsc b/MW3/PC/SP/maps/_intelligence.gsc new file mode 100644 index 0000000..077a75f --- /dev/null +++ b/MW3/PC/SP/maps/_intelligence.gsc @@ -0,0 +1,320 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_intelligence.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 16 + * Decompile Time: 254 ms + * Timestamp: 10/27/2023 2:23:04 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(maps\_utility::is_iw4_map_sp()) + { + return; + } + + precachestring(&"SCRIPT_INTELLIGENCE_OF_FOURTYSIX"); + precachestring(&"SCRIPT_INTELLIGENCE_PREV_FOUND"); + level.intel_items = create_array_of_intel_items(); + setdvar("ui_level_cheatpoints",level.intel_items.size); + level.intel_counter = 0; + setdvar("ui_level_player_cheatpoints",level.intel_counter); + level.table_origins = create_array_of_origins_from_table(); + initialize_intel(); + if(maps\_utility::is_specialop()) + { + remove_all_intel(); + return; + } + + intel_think(); + wait 0.05; +} + +//Function Number: 2 +remove_all_intel() +{ + foreach(var_01 in level.intel_items) + { + if(!isdefined(var_01.removed)) + { + var_01 remove_intel_item(); + } + } +} + +//Function Number: 3 +remove_intel_item() +{ + self.removed = 1; + self.item hide(); + self.item notsolid(); + common_scripts\utility::trigger_off(); + level.intel_counter++; + setdvar("ui_level_player_cheatpoints",level.intel_counter); + self notify("end_trigger_thread"); +} + +//Function Number: 4 +initialize_intel() +{ + foreach(var_01 in level.intel_items) + { + var_02 = var_01.origin; + var_01.num = get_nums_from_origins(var_02); + } +} + +//Function Number: 5 +intel_think() +{ + foreach(var_01 in level.intel_items) + { + if(var_01 check_item_found()) + { + var_01 remove_intel_item(); + continue; + } + + var_01 thread wait_for_pickup(); + var_01 thread poll_for_found(); + } +} + +//Function Number: 6 +poll_for_found() +{ + self endon("end_loop_thread"); + while(!check_item_found()) + { + wait 0.1; + } + + remove_intel_item(); +} + +//Function Number: 7 +check_item_found() +{ + foreach(var_01 in level.players) + { + if(!var_01 getplayerintelisfound(self.num)) + { + return 0; + } + } + + return 1; +} + +//Function Number: 8 +create_array_of_intel_items() +{ + var_00 = getentarray("intelligence_item","targetname"); + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + var_00[var_01].item = getent(var_00[var_01].target,"targetname"); + var_00[var_01].found = 0; + } + + return var_00; +} + +//Function Number: 9 +create_array_of_origins_from_table() +{ + var_00 = []; + for(var_01 = 1;var_01 <= 64;var_01++) + { + var_02 = tablelookup("maps/_intel_items.csv",0,var_01,4); + if(isdefined(var_02) && var_02 != "undefined") + { + var_03 = strtok(var_02,","); + for(var_04 = 0;var_04 < var_03.size;var_04++) + { + var_03[var_04] = int(var_03[var_04]); + } + + var_00[var_01] = (var_03[0],var_03[1],var_03[2]); + continue; + } + + var_00[var_01] = undefined; + } + + return var_00; +} + +//Function Number: 10 +wait_for_pickup() +{ + self endon("end_trigger_thread"); + if(self.classname == "trigger_use") + { + self sethintstring(&"SCRIPT_INTELLIGENCE_PICKUP"); + self usetriggerrequirelookat(); + } + + self waittill("trigger",var_00); + self notify("end_loop_thread"); + intel_feedback(var_00); + save_intel_for_all_players(); + updategamerprofileall(); + waittillframeend; + remove_intel_item(); +} + +//Function Number: 11 +save_intel_for_all_players() +{ + foreach(var_01 in level.players) + { + if(var_01 getplayerintelisfound(self.num)) + { + continue; + } + + var_01 setplayerintelfound(self.num); + } + + logstring("found intel item " + self.num); + maps\_endmission::updatesppercent(); +} + +//Function Number: 12 +give_point() +{ + var_00 = self getlocalplayerprofiledata("cheatPoints"); + self setlocalplayerprofiledata("cheatPoints",var_00 + 1); +} + +//Function Number: 13 +intel_feedback(param_00) +{ + self.item hide(); + self.item notsolid(); + level thread common_scripts\utility::play_sound_in_space("intelligence_pickup",self.item.origin); + var_01 = 3000; + var_02 = 700; + var_03 = var_01 + var_02 / 1000; + foreach(var_05 in level.players) + { + if(param_00 != var_05 && var_05 getplayerintelisfound(self.num)) + { + continue; + } + + var_06 = var_05 maps\_hud_util::createclientfontstring("objective",1.5); + var_06.glowcolor = (0.7,0.7,0.3); + var_06.glowalpha = 1; + var_06 setup_hud_elem(); + var_06.y = -60; + var_06 setpulsefx(60,var_01,var_02); + var_07 = 0; + if(param_00 == var_05 && var_05 getplayerintelisfound(self.num)) + { + var_06.label = &"SCRIPT_INTELLIGENCE_PREV_FOUND"; + } + else + { + var_06.label = &"SCRIPT_INTELLIGENCE_OF_FOURTYSIX"; + var_05 give_point(); + var_07 = var_05 getlocalplayerprofiledata("cheatPoints"); + var_06 setvalue(var_07); + } + + if(var_07 >= 22) + { + var_05 maps\_utility::player_giveachievement_wrapper("INFORMANT"); + } + + if(var_07 == 46) + { + var_05 maps\_utility::player_giveachievement_wrapper("SCOUT_LEADER"); + } + + var_06 common_scripts\utility::delaycall(var_03,::destroy); + } +} + +//Function Number: 14 +setup_hud_elem() +{ + self.color = (1,1,1); + self.alpha = 1; + self.x = 0; + self.alignx = "center"; + self.aligny = "middle"; + self.horzalign = "center"; + self.vertalign = "middle"; + self.foreground = 1; +} + +//Function Number: 15 +assert_if_identical_origins() +{ + var_00 = []; + var_01 = 1; + while(var_01 < 65) + { + var_02 = tablelookup("maps/_intel_items.csv",0,var_01,4); + var_03 = strtok(var_02,","); + var_01 = 0; + while(var_01 < var_03.size) + { + var_02++ = var_7B[var_01]; + } + + var_01[var_02] = (var_7B[0],var_7B[1],var_7B[2]); + var_02++ = int(var_03[var_01]); + } + + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + if(!isdefined(var_01[var_02])) + { + continue; + } + + if(var_01[var_02] == "undefined") + { + continue; + } + + for(var_04 = 0;var_04 < var_01.size;var_04++) + { + if(!isdefined(var_01[var_04])) + { + } + else if(var_01[var_04] == "undefined") + { + } + else if(var_02 == var_04) + { + } + else if(var_01[var_02] == var_01[var_04]) + { + } + } + } +} + +//Function Number: 16 +get_nums_from_origins(param_00) +{ + for(var_01 = 1;var_01 < level.table_origins.size + 1;var_01++) + { + if(!isdefined(level.table_origins[var_01])) + { + continue; + } + + if(distancesquared(param_00,level.table_origins[var_01]) < squared(75)) + { + return var_01; + } + } +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_interactive_objects.gsc b/MW3/PC/SP/maps/_interactive_objects.gsc new file mode 100644 index 0000000..92b9896 --- /dev/null +++ b/MW3/PC/SP/maps/_interactive_objects.gsc @@ -0,0 +1,1750 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_interactive_objects.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 36 + * Decompile Time: 642 ms + * Timestamp: 10/27/2023 2:23:03 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + common_scripts\utility::flag_init("no_ai_tv_damage"); + var_00 = 0; + var_01 = getentarray("explodable_barrel","targetname"); + if(var_01.size) + { + var_00 = 1; + } + + var_01 = getentarray("explodable_barrel","script_noteworthy"); + if(var_01.size > 0) + { + var_00 = 1; + } + + if(var_00) + { + level.breakables_fx["barrel"]["explode"] = loadfx("props/barrelExp"); + level.breakables_fx["barrel"]["burn_start"] = loadfx("props/barrel_ignite"); + level.breakables_fx["barrel"]["burn"] = loadfx("props/barrel_fire_top"); + } + + var_02 = getentarray("oil_spill","targetname"); + if(var_02.size) + { + level.breakables_fx["oilspill"]["burn"] = loadfx("props/barrel_fire"); + level.breakables_fx["oilspill"]["spark"] = loadfx("impacts/small_metalhit_1"); + } + + var_03 = getentarray("tincan","targetname"); + if(var_03.size) + { + level.breakables_fx["tincan"] = loadfx("props/tincan_bounce"); + } + + var_04 = 0; + var_05 = getentarray("breakable","targetname"); + if(var_05.size) + { + var_04 = 1; + } + + var_05 = getentarray("breakable_vase","targetname"); + if(var_05.size) + { + var_04 = 1; + } + + var_05 = getentarray("breakable box","targetname"); + if(var_01.size) + { + var_04 = 1; + } + + var_05 = getentarray("breakable box","script_noteworthy"); + if(var_01.size) + { + var_04 = 1; + } + + if(var_04) + { + level.breakables_fx["vase"] = loadfx("props/vase_water"); + level.breakables_fx["bottle"] = loadfx("props/wine_bottle"); + level.breakables_fx["box"][0] = loadfx("props/crateExp_dust"); + level.breakables_fx["box"][1] = loadfx("props/crateExp_dust"); + level.breakables_fx["box"][2] = loadfx("props/crateExp_dust"); + level.breakables_fx["box"][3] = loadfx("props/crateExp_ammo"); + } + + var_06 = getentarray("glass","targetname"); + var_06 = common_scripts\utility::array_combine(var_06,getentarray("glass","script_noteworthy")); + if(var_06.size) + { + level._glass_info = []; + level._glass_info["glass_large"]["breakfx"] = loadfx("props/car_glass_large"); + level._glass_info["glass_large"]["breaksnd"] = "veh_glass_break_large"; + level._glass_info["glass_med"]["breakfx"] = loadfx("props/car_glass_med"); + level._glass_info["glass_med"]["breaksnd"] = "veh_glass_break_small"; + level._glass_info["glass_small"]["breakfx"] = loadfx("props/car_glass_headlight"); + level._glass_info["glass_small"]["breaksnd"] = "veh_glass_break_small"; + } + + var_07 = getentarray("interactive_tv","targetname"); + if(var_07.size) + { + precachemodel("com_tv2_d"); + precachemodel("com_tv1"); + precachemodel("com_tv2"); + precachemodel("com_tv1_testpattern"); + precachemodel("com_tv2_testpattern"); + level.breakables_fx["tv_explode"] = loadfx("explosions/tv_explosion"); + } + + level.var_1DDE = getentarray("interactive_tv_light","targetname"); + var_08 = getentarray("destroyable_security_camera","script_noteworthy"); + if(var_08.size) + { + precachemodel("com_security_camera"); + precachemodel("com_security_camera_destroyed"); + level.breakables_fx["security_camera_explode"] = loadfx("props/securitycamera_explosion"); + } + + level.tv_lite_array = "barrel_mtl_explode"; + var_09 = 25; + level.var_1DE0["orange vase"] = 1; + level.var_1DE0["green vase"] = 1; + level.var_1DE0["bottle"] = 1; + level.var_1DE1 = 150; + level.precachemodeltype = []; + level.barrelexplodingthisframe = 0; + level.breakables_clip = []; + level.breakables_clip = getentarray("vase_break_remove","targetname"); + level.console_auto_aim_2nd = []; + level.console_auto_aim_2nd = getentarray("xenon_auto_aim","targetname"); + level.var_1DE6 = getentarray("xenon_auto_aim_secondary","targetname"); + for(var_0A = 0;var_0A < level.console_auto_aim_2nd.size;var_0A++) + { + level.console_auto_aim_2nd[var_0A] notsolid(); + } + + for(var_0A = 0;var_0A < level.var_1DE6.size;var_0A++) + { + level.var_1DE6[var_0A] notsolid(); + } + + maps\_utility::set_console_status(); + if(level.console) + { + level.console_auto_aim_2nd = undefined; + level.var_1DE6 = undefined; + } + + var_0B = getentarray("breakable clip","targetname"); + for(var_0A = 0;var_0A < var_0B.size;var_0A++) + { + level.breakables_clip[level.breakables_clip.size] = var_0B[var_0A]; + } + + level._breakable_utility_modelarray = []; + level._breakable_utility_modelindex = 0; + level._breakable_utility_maxnum = var_09; + common_scripts\utility::array_thread(getentarray("tincan","targetname"),::tincan_think); + common_scripts\utility::array_thread(getentarray("helmet_pop","targetname"),::helmet_pop); + common_scripts\utility::array_thread(getentarray("explodable_barrel","targetname"),::explodable_barrel_think); + common_scripts\utility::array_thread(getentarray("explodable_barrel","script_noteworthy"),::explodable_barrel_think); + common_scripts\utility::array_thread(getentarray("shuddering_entity","targetname"),::shuddering_entity_think); + common_scripts\utility::array_thread(getentarray("breakable box","targetname"),::breakable_think); + common_scripts\utility::array_thread(getentarray("breakable box","script_noteworthy"),::breakable_think); + common_scripts\utility::array_thread(getentarray("breakable","targetname"),::breakable_think); + common_scripts\utility::array_thread(getentarray("breakable_vase","targetname"),::breakable_think); + common_scripts\utility::array_thread(getentarray("oil_spill","targetname"),::oil_spill_think); + common_scripts\utility::array_thread(getentarray("glass","targetname"),::glass_logic); + common_scripts\utility::array_thread(getentarray("interactive_tv","targetname"),::tv_logic); + common_scripts\utility::array_thread(getentarray("destroyable_security_camera","script_noteworthy"),::security_camera_logic); +} + +//Function Number: 2 +security_camera_logic() +{ + self setcandamage(1); + var_00 = undefined; + switch(self.model) + { + case "com_security_camera": + var_00 = "com_security_camera_destroyed"; + break; + } + + self waittill("damage",var_01,var_02,var_03,var_04,var_05); + self setmodel(var_00); + playfxontag(level.breakables_fx["security_camera_explode"],self,"tag_deathfx"); +} + +//Function Number: 3 +tv_logic() +{ + self setcandamage(1); + self.damagemodel = undefined; + self.offmodel = undefined; + self.damagemodel = "com_tv2_d"; + self.offmodel = "com_tv2"; + self.onmodel = "com_tv2_testpattern"; + if(issubstr(self.model,"1")) + { + self.offmodel = "com_tv1"; + self.onmodel = "com_tv1_testpattern"; + } + + if(isdefined(self.target)) + { + if(isdefined(level.disable_interactive_tv_use_triggers)) + { + var_00 = getent(self.target,"targetname"); + if(isdefined(var_00)) + { + var_00 delete(); + } + } + else + { + self.usetrig = getent(self.target,"targetname"); + self.usetrig usetriggerrequirelookat(); + self.usetrig setcursorhint("HINT_NOICON"); + } + } + + var_01 = maps\_utility::get_array_of_closest(self.origin,level.var_1DDE,undefined,undefined,64); + if(var_01.size) + { + self.lite = var_01[0]; + level.var_1DDE = common_scripts\utility::array_remove(level.var_1DDE,self.lite); + self.liteintensity = self.lite getlightintensity(); + } + + thread tv_damage(); + if(isdefined(self.usetrig)) + { + thread tv_off(); + } +} + +//Function Number: 4 +tv_off() +{ + self.usetrig endon("death"); + for(;;) + { + wait 0.2; + self.usetrig waittill("trigger"); + self notify("off"); + if(self.model == self.offmodel) + { + self setmodel(self.onmodel); + if(isdefined(self.lite)) + { + self.lite setlightintensity(self.liteintensity); + } + + continue; + } + + self setmodel(self.offmodel); + if(isdefined(self.lite)) + { + self.lite setlightintensity(0); + } + } +} + +//Function Number: 5 +tv_damage() +{ + for(;;) + { + self waittill("damage",var_00,var_01,var_02,var_03,var_04); + if(common_scripts\utility::flag("no_ai_tv_damage")) + { + if(!isalive(var_01)) + { + continue; + } + + if(!isplayer(var_01)) + { + continue; + } + } + + break; + } + + if(isdefined(level.tvhook)) + { + [[ level.tvhook ]](); + } + + self notify("off"); + if(isdefined(self.usetrig)) + { + self.usetrig notify("death"); + } + + self setmodel(self.damagemodel); + if(isdefined(self.lite)) + { + self.lite setlightintensity(0); + } + + playfxontag(level.breakables_fx["tv_explode"],self,"tag_fx"); + self playsound("tv_shot_burst"); + if(isdefined(self.usetrig)) + { + self.usetrig delete(); + } +} + +//Function Number: 6 +glass_logic() +{ + var_00 = undefined; + var_01 = undefined; + var_02 = undefined; + var_03 = 0; + if(isdefined(self.target)) + { + var_02 = getent(self.target,"targetname"); + } + + if(isdefined(self.script_linkto)) + { + var_04 = common_scripts\utility::get_links(); + var_05 = getent(var_04[0],"script_linkname"); + self linkto(var_05); + } + + switch(self.destructible_type) + { + case "glass_large": + break; + + case "glass_med": + break; + + case "glass_small": + break; + + default: + break; + } + + if(isdefined(var_02)) + { + var_03 = 99; + var_02 linkto(self); + var_02 hide(); + var_01 = var_02 setcontents(0); + } + + if(isdefined(self.script_health)) + { + var_03 = self.script_health; + } + else if(isdefined(var_02)) + { + var_03 = 99; + } + else + { + var_03 = 250; + } + + self setcandamage(1); + while(var_03 > 0) + { + self waittill("damage",var_06,var_07,var_00,var_08,var_09); + if(!isdefined(var_00)) + { + var_00 = (0,0,1); + } + + if(!isdefined(var_09)) + { + var_06 = 100000; + continue; + } + + if(var_09 == "MOD_GRENADE_SPLASH") + { + var_06 = var_06 * 1.75; + continue; + } + + if(var_09 == "MOD_IMPACT") + { + var_06 = 100000; + } + + var_03 = var_03 - var_06; + } + + var_0A = var_03 * -1; + self hide(); + self notsolid(); + if(isdefined(var_02)) + { + var_02 show(); + var_02 setcandamage(1); + var_03 = 200 - var_0A; + var_02 setcontents(var_01); + while(var_03 > 0) + { + var_02 waittill("damage",var_06,var_0B,var_00,var_08,var_09); + if(!isdefined(var_00)) + { + var_00 = (0,0,1); + } + + if(!isdefined(var_09)) + { + var_06 = 100000; + continue; + } + + if(var_09 == "MOD_GRENADE_SPLASH") + { + var_06 = var_06 * 1.75; + continue; + } + + if(var_09 == "MOD_IMPACT") + { + break; + } + + var_03 = var_03 - var_06; + } + + var_02 delete(); + } + + glass_play_break_fx(self getorigin(),self.destructible_type,var_00); + self delete(); +} + +//Function Number: 7 +glass_play_break_fx(param_00,param_01,param_02) +{ + thread common_scripts\utility::play_sound_in_space(level._glass_info[param_01]["breaksnd"],param_00); + playfx(level._glass_info[param_01]["breakfx"],param_00,param_02); + level notify("glass_shatter"); +} + +//Function Number: 8 +oil_spill_think() +{ + self.end = common_scripts\utility::getstruct(self.target,"targetname"); + self.start = common_scripts\utility::getstruct(self.end.target,"targetname"); + self.barrel = getclosestent(self.start.origin,getentarray("explodable_barrel","targetname")); + if(isdefined(self.barrel)) + { + self.barrel.oilspill = 1; + thread oil_spill_burn_after(); + } + + self.extra = getent(self.target,"targetname"); + self setcandamage(1); + for(;;) + { + self waittill("damage",var_00,var_01,var_02,var_03,var_04); + if(var_04 == "MOD_MELEE" || var_04 == "MOD_IMPACT") + { + continue; + } + + self.damageowner = var_01; + playfx(level.breakables_fx["oilspill"]["spark"],var_03,var_02); + var_03 = pointonsegmentnearesttopoint(self.start.origin,self.end.origin,var_03); + thread oil_spill_burn_section(var_03); + thread oil_spill_burn(var_03,self.start.origin); + thread oil_spill_burn(var_03,self.end.origin); + break; + } + + if(isdefined(self.barrel)) + { + self.barrel waittill("exploding"); + } + + self.extra delete(); + self hide(); + wait 10; + self delete(); +} + +//Function Number: 9 +oil_spill_burn_after() +{ + for(;;) + { + self.barrel waittill("damage",var_00,var_01,var_02,var_03,var_04); + if(var_04 == "MOD_MELEE" || var_04 == "MOD_IMPACT") + { + continue; + } + + self.damageowner = var_01; + break; + } + + self radiusdamage(self.start.origin,4,10,10,self.damageowner); +} + +//Function Number: 10 +oil_spill_burn(param_00,param_01) +{ + var_02 = vectornormalize(param_01 - param_00); + var_03 = distance(param_00,param_01); + var_04 = 8; + var_05 = var_02 * var_04; + var_06 = vectortoangles(var_02); + var_07 = anglestoright(var_06); + var_08 = getentarray("explodable_barrel","targetname"); + var_09 = 484; + var_0A = spawn("script_origin",param_00); + var_0B = 0; + for(;;) + { + var_03 = var_03 - var_04; + if(var_03 < var_04 * 0.1) + { + break; + } + + param_00 = param_00 + var_05 + var_07 * randomfloatrange(-6,6); + thread oil_spill_burn_section(param_00); + var_0B++; + if(var_0B == 4) + { + badplace_cylinder("",0.5,param_00,64,64); + var_0B = 0; + } + + var_0A.origin = param_00; + var_0C = []; + var_08 = common_scripts\utility::array_removeundefined(var_08); + for(var_0D = 0;var_0D < var_08.size;var_0D++) + { + var_0E = anglestoup(var_08[var_0D].angles); + var_0F = var_08[var_0D].origin + var_0E * 22; + var_10 = physicstrace(var_0F,var_0F + (0,0,-64)); + if(distancesquared(param_00,var_10) < var_09) + { + var_0C[var_0C.size] = var_08[var_0D]; + var_08[var_0D] dodamage(80 + randomfloat(10),param_00); + } + } + + for(var_0D = 0;var_0D < var_0C.size;var_0D++) + { + var_08 = common_scripts\utility::array_remove(var_08,var_0C[var_0D]); + } + + wait 0.1; + } + + if(!isdefined(self.barrel)) + { + return; + } + + if(distance(param_00,self.start.origin) < 32) + { + self.barrel dodamage(80 + randomfloat(10),param_00); + } +} + +//Function Number: 11 +oil_spill_burn_section(param_00) +{ + var_01 = 0; + var_02 = 0; + playfx(level.breakables_fx["oilspill"]["burn"],param_00); +} + +//Function Number: 12 +explodable_barrel_think() +{ + if(self.classname != "script_model") + { + return; + } + + if(!isdefined(level.precachemodeltype["com_barrel_benzin"])) + { + level.precachemodeltype["com_barrel_benzin"] = 1; + precachemodel("com_barrel_piece"); + precachemodel("com_barrel_piece2"); + } + + self endon("exploding"); + breakable_clip(); + xenon_auto_aim(); + self.damagetaken = 0; + self setcandamage(1); + for(;;) + { + var_00 = undefined; + var_01 = undefined; + var_02 = undefined; + var_03 = undefined; + var_04 = undefined; + self waittill("damage",var_00,var_01,var_02,var_03,var_04); + if(var_04 == "MOD_MELEE" || var_04 == "MOD_IMPACT") + { + continue; + } + + self.damageowner = var_01; + if(level.barrelexplodingthisframe) + { + wait randomfloat(1); + } + + self.damagetaken = self.damagetaken + var_00; + if(self.damagetaken == var_00) + { + thread explodable_barrel_burn(); + } + } +} + +//Function Number: 13 +explodable_barrel_burn() +{ + var_00 = 0; + var_01 = 0; + var_02 = anglestoup(self.angles); + var_03 = anglestoup((0,90,0)); + var_04 = vectordot(var_02,var_03); + var_05 = (0,0,0); + var_06 = var_02 * 44; + if(var_04 < 0.5) + { + var_05 = var_02 * 22 - (0,0,30); + var_06 = var_02 * 22 + (0,0,14); + } + + while(self.damagetaken < level.var_1DE1) + { + if(!var_01) + { + playfx(level.breakables_fx["barrel"]["burn_start"],self.origin + var_05); + var_01 = 1; + } + + if(var_00 > 19) + { + var_00 = 0; + } + + playfx(level.breakables_fx["barrel"]["burn"],self.origin + var_06); + if(var_00 == 0) + { + self.damagetaken = self.damagetaken + 10 + randomfloat(10); + badplace_cylinder("",1,self.origin,128,250); + } + + var_00++; + wait 0.05; + if(!isdefined(self)) + { + return; + } + } + + self.damagetaken = undefined; + thread explodable_barrel_explode(); +} + +//Function Number: 14 +explodable_barrel_explode() +{ + self notify("exploding"); + self notify("death"); + var_00 = anglestoup(self.angles); + var_01 = anglestoup((0,90,0)); + var_02 = vectordot(var_00,var_01); + var_03 = (0,0,0); + if(var_02 < 0.5) + { + var_04 = self.origin + var_00 * 22; + var_05 = physicstrace(var_04,var_04 + (0,0,-64)); + var_03 = var_05 - self.origin; + } + + var_03 = var_03 + (0,0,4); + level thread common_scripts\utility::play_sound_in_space(level.tv_lite_array,self.origin); + playfx(level.breakables_fx["barrel"]["explode"],self.origin + var_03); + physicsexplosionsphere(self.origin + var_03,100,80,1); + level.barrelexplodingthisframe = 1; + if(isdefined(self.remove)) + { + if(common_scripts\utility::issp() && self.remove.spawnflags & 1) + { + self.remove connectpaths(); + } + + self.remove delete(); + } + + var_06 = 1; + var_07 = 250; + var_08 = 250; + if(isdefined(self.radius)) + { + var_08 = self.radius; + } + + var_09 = undefined; + if(isdefined(self.damageowner)) + { + var_09 = self.damageowner; + if(isplayer(var_09)) + { + maps\_utility::arcademode_kill(self.origin,"rifle",150); + } + + self.damageowner = undefined; + } + + level.lastexplodingbarrel["time"] = gettime(); + level.lastexplodingbarrel["origin"] = self.origin + (0,0,30); + level.lastexplodingbarrel["radius"] = var_08; + self radiusdamage(self.origin + (0,0,30),var_08,var_07,var_06,var_09); + if(randomint(2) == 0) + { + self setmodel("com_barrel_piece"); + } + else + { + self setmodel("com_barrel_piece2"); + } + + if(var_02 < 0.5) + { + var_04 = self.origin + var_00 * 22; + var_0A = physicstrace(var_04,var_04 + (0,0,-64)); + self.origin = var_0A; + self.angles = self.angles + (0,0,90); + } + + wait 0.05; + level.barrelexplodingthisframe = 0; +} + +//Function Number: 15 +shuddering_entity_think() +{ + var_00 = 0; + if(self.model == "prop_helmet_german_normandy") + { + var_00 = 1; + } + + self setcandamage(1); + for(;;) + { + self waittill("damage",var_01,var_02,var_03,var_04); + if(var_00) + { + self vibrate(var_03,20,0.6,0.75); + } + else + { + self vibrate(var_03,0.4,0.4,0.4); + } + + self waittill("rotatedone"); + } +} + +//Function Number: 16 +tincan_think() +{ + if(self.classname != "script_model") + { + return; + } + + self setcandamage(1); + self waittill("damage",var_00,var_01); + if(isai(var_01) || isplayer(var_01)) + { + var_02 = var_01 geteye() - (0,0,randomint(50) + 50); + } + else + { + var_02 = var_02.origin; + } + + var_03 = vectornormalize(self.origin - var_02); + var_03 = var_03 * 0.5 + randomfloat(1); + self notify("death"); + playfx(level.breakables_fx["tincan"],self.origin,var_03); + self delete(); +} + +//Function Number: 17 +helmet_pop() +{ + if(self.classname != "script_model") + { + return; + } + + xenon_auto_aim(); + self setcandamage(1); + thread helmet_logic(); +} + +//Function Number: 18 +helmet_logic() +{ + self waittill("damage",var_00,var_01); + if(isai(var_01)) + { + var_02 = var_01 geteye(); + } + else + { + var_02 = var_02.origin; + } + + var_03 = vectornormalize(self.origin - var_02); + if(!isdefined(self.dontremove) && isplayer(var_01)) + { + thread animscripts/death::func_ED0(var_03); + return; + } + + self notsolid(); + self hide(); + var_04 = spawn("script_model",self.origin + (0,0,5)); + var_04.angles = self.angles; + var_04 setmodel(self.model); + var_04 thread animscripts/death::func_ED0(var_03); + self.dontremove = 0; + self notify("ok_remove"); +} + +//Function Number: 19 +allowbreak(param_00) +{ + if(!isdefined(level.breakingents)) + { + return 1; + } + + if(level.breakingents.size == 0) + { + return 0; + } + else + { + for(var_01 = 0;var_01 < level.breakingents.size;var_01++) + { + if(param_00 == level.breakingents[var_01]) + { + return 1; + } + } + + return 0; + } + + return 1; +} + +//Function Number: 20 +breakable_think_triggered(param_00) +{ + for(;;) + { + self waittill("trigger",var_01); + param_00 notify("damage",100,var_01); + } +} + +//Function Number: 21 +breakable_think() +{ + if(self.classname != "script_model") + { + return; + } + + if(!isdefined(self.model)) + { + return; + } + + var_00 = undefined; + if(self.model == "egypt_prop_vase1" || self.model == "egypt_prop_vase3" || self.model == "egypt_prop_vase4") + { + if(!isdefined(level.precachemodeltype["egypt_prop_vase_o"])) + { + level.precachemodeltype["egypt_prop_vase_o"] = 1; + precachemodel("egypt_prop_vase_br2"); + precachemodel("egypt_prop_vase_br5"); + precachemodel("egypt_prop_vase_br7"); + } + + var_00 = "orange vase"; + breakable_clip(); + xenon_auto_aim(); + } + else if(self.model == "egypt_prop_vase2" || self.model == "egypt_prop_vase5" || self.model == "egypt_prop_vase6") + { + if(!isdefined(level.precachemodeltype["egypt_prop_vase_g"])) + { + level.precachemodeltype["egypt_prop_vase_g"] = 1; + precachemodel("egypt_prop_vase_br1"); + precachemodel("egypt_prop_vase_br3"); + precachemodel("egypt_prop_vase_br4"); + precachemodel("egypt_prop_vase_br6"); + } + + var_00 = "green vase"; + breakable_clip(); + xenon_auto_aim(); + } + else if(self.model == "prop_crate_dak1" || self.model == "prop_crate_dak2" || self.model == "prop_crate_dak3" || self.model == "prop_crate_dak4" || self.model == "prop_crate_dak5" || self.model == "prop_crate_dak6" || self.model == "prop_crate_dak7" || self.model == "prop_crate_dak8" || self.model == "prop_crate_dak9") + { + if(!isdefined(level.precachemodeltype["prop_crate_dak_shard"])) + { + level.precachemodeltype["prop_crate_dak_shard"] = 1; + precachemodel("prop_crate_dak_shard"); + } + + var_00 = "wood box"; + breakable_clip(); + xenon_auto_aim(); + } + else if(self.model == "prop_winebottle_breakable") + { + if(!isdefined(level.precachemodeltype["prop_winebottle"])) + { + level.precachemodeltype["prop_winebottle"] = 1; + precachemodel("prop_winebottle_broken_top"); + precachemodel("prop_winebottle_broken_bot"); + } + + var_00 = "bottle"; + xenon_auto_aim(); + } + else if(self.model == "prop_diningplate_roundfloral") + { + if(!isdefined(level.precachemodeltype["prop_diningplate_brokenfloral"])) + { + level.precachemodeltype["prop_diningplate_brokenfloral"] = 1; + precachemodel("prop_diningplate_brokenfloral1"); + precachemodel("prop_diningplate_brokenfloral2"); + precachemodel("prop_diningplate_brokenfloral3"); + precachemodel("prop_diningplate_brokenfloral4"); + } + + var_00 = "plate"; + self.plate = "round_floral"; + xenon_auto_aim(); + } + else if(self.model == "prop_diningplate_roundplain") + { + if(!isdefined(level.precachemodeltype["prop_diningplate_brokenplain"])) + { + level.precachemodeltype["prop_diningplate_brokenplain"] = 1; + precachemodel("prop_diningplate_brokenplain1"); + precachemodel("prop_diningplate_brokenplain2"); + precachemodel("prop_diningplate_brokenplain3"); + precachemodel("prop_diningplate_brokenplain4"); + } + + var_00 = "plate"; + self.plate = "round_plain"; + xenon_auto_aim(); + } + else if(self.model == "prop_diningplate_roundstack") + { + if(!isdefined(level.precachemodeltype["prop_diningplate_brokenplain"])) + { + level.precachemodeltype["prop_diningplate_brokenplain"] = 1; + precachemodel("prop_diningplate_brokenplain1"); + precachemodel("prop_diningplate_brokenplain2"); + precachemodel("prop_diningplate_brokenplain3"); + precachemodel("prop_diningplate_brokenplain4"); + } + + if(!isdefined(level.precachemodeltype["prop_diningplate_brokenfloral"])) + { + level.precachemodeltype["prop_diningplate_brokenfloral"] = 1; + precachemodel("prop_diningplate_brokenfloral1"); + precachemodel("prop_diningplate_brokenfloral2"); + precachemodel("prop_diningplate_brokenfloral3"); + precachemodel("prop_diningplate_brokenfloral4"); + } + + var_00 = "plate"; + self.plate = "round_stack"; + xenon_auto_aim(); + } + else if(self.model == "prop_diningplate_ovalfloral") + { + if(!isdefined(level.precachemodeltype["prop_diningplate_brokenfloral"])) + { + level.precachemodeltype["prop_diningplate_brokenfloral"] = 1; + precachemodel("prop_diningplate_brokenfloral1"); + precachemodel("prop_diningplate_brokenfloral2"); + precachemodel("prop_diningplate_brokenfloral3"); + precachemodel("prop_diningplate_brokenfloral4"); + } + + var_00 = "plate"; + self.plate = "oval_floral"; + xenon_auto_aim(); + } + else if(self.model == "prop_diningplate_ovalplain") + { + if(!isdefined(level.precachemodeltype["prop_diningplate_brokenplain"])) + { + level.precachemodeltype["prop_diningplate_brokenplain"] = 1; + precachemodel("prop_diningplate_brokenplain1"); + precachemodel("prop_diningplate_brokenplain2"); + precachemodel("prop_diningplate_brokenplain3"); + precachemodel("prop_diningplate_brokenplain4"); + } + + var_00 = "plate"; + self.plate = "oval_plain"; + xenon_auto_aim(); + } + else if(self.model == "prop_diningplate_ovalstack") + { + if(!isdefined(level.precachemodeltype["prop_diningplate_brokenplain"])) + { + level.precachemodeltype["prop_diningplate_brokenplain"] = 1; + precachemodel("prop_diningplate_brokenplain1"); + precachemodel("prop_diningplate_brokenplain2"); + precachemodel("prop_diningplate_brokenplain3"); + precachemodel("prop_diningplate_brokenplain4"); + } + + if(!isdefined(level.precachemodeltype["prop_diningplate_brokenfloral"])) + { + level.precachemodeltype["prop_diningplate_brokenfloral"] = 1; + precachemodel("prop_diningplate_brokenfloral1"); + precachemodel("prop_diningplate_brokenfloral2"); + precachemodel("prop_diningplate_brokenfloral3"); + precachemodel("prop_diningplate_brokenfloral4"); + } + + var_00 = "plate"; + self.plate = "oval_stack"; + xenon_auto_aim(); + } + + if(!isdefined(var_00)) + { + return; + } + + if(isdefined(self.target)) + { + var_01 = getent(self.target,"targetname"); + if(isdefined(var_01) && var_01.classname == "trigger_multiple") + { + var_01 thread breakable_think_triggered(self); + } + } + + self setcandamage(1); + thread breakable_logic(var_00); +} + +//Function Number: 22 +breakable_logic(param_00) +{ + var_01 = undefined; + for(;;) + { + self waittill("damage",var_02,var_01); + if(isdefined(var_01) && var_01.code_classname == "script_vehicle") + { + var_01 joltbody(self.origin + (0,0,-90),0.2); + } + + if(param_00 == "wood box") + { + if(!allowbreak(var_01)) + { + continue; + } + + if(!isdefined(level.flags) || !isdefined(level.flags["Breakable Boxes"])) + { + break; + } + + if(isdefined(level.flags["Breakable Boxes"]) && level.flags["Breakable Boxes"] == 1) + { + break; + } + + continue; + } + + break; + } + + self notify("death"); + var_03 = undefined; + var_04 = undefined; + var_05 = 0; + switch(param_00) + { + case "green vase": + case "orange vase": + var_03 = "bullet_large_vase"; + var_04 = level.breakables_fx["vase"]; + break; + + case "wood box": + if(isdefined(level.crateimpactsound)) + { + var_03 = level.crateimpactsound; + } + else + { + var_03 = "bullet_large_vase"; + } + + var_04 = level.breakables_fx["box"][randomint(level.breakables_fx["box"].size)]; + var_05 = 1; + break; + + case "bottle": + var_03 = "bullet_small_bottle"; + var_04 = level.breakables_fx["bottle"]; + break; + + case "plate": + var_03 = "bullet_small_plate"; + break; + } + + thread common_scripts\utility::play_sound_in_space(var_03,self.origin); + thread make_broken_peices(self,param_00); + if(isdefined(var_04)) + { + playfx(var_04,self.origin); + } + + if(var_05) + { + var_06 = getentarray("breakable","targetname"); + for(var_07 = 0;var_07 < var_06.size;var_07++) + { + var_08 = var_06[var_07]; + var_09 = abs(self.origin[0] - var_08.origin[0]); + var_0A = abs(self.origin[1] - var_08.origin[1]); + if(var_09 <= 20 && var_0A <= 20) + { + var_0B = self.origin[2] - var_08.origin[2]; + if(var_0B <= 0) + { + var_08 notify("damage",var_02,var_01); + } + } + } + } + + if(isdefined(self.remove)) + { + self.remove connectpaths(); + self.remove delete(); + } + + if(!isdefined(self.dontremove)) + { + self delete(); + } + else + { + self.dontremove = 0; + } + + self notify("ok_remove"); +} + +//Function Number: 23 +xenon_auto_aim() +{ + if(isdefined(level.console_auto_aim_2nd) && level.console_auto_aim_2nd.size > 0) + { + self.autoaim = getclosestaccurantent(self.origin,level.console_auto_aim_2nd); + } + + if(isdefined(self.autoaim)) + { + level.console_auto_aim_2nd = common_scripts\utility::array_remove(level.console_auto_aim_2nd,self.autoaim); + thread xenon_remove_auto_aim(); + } +} + +//Function Number: 24 +xenon_auto_aim_stop_logic() +{ + self notify("entered_xenon_auto_aim_stop_logic"); + self endon("entered_xenon_auto_aim_stop_logic"); + self.autoaim waittill("xenon_auto_aim_stop_logic"); + self.dontremove = undefined; +} + +//Function Number: 25 +xenon_remove_auto_aim(param_00) +{ + thread xenon_auto_aim_stop_logic(); + self endon("xenon_auto_aim_stop_logic"); + self.autoaim endon("xenon_auto_aim_stop_logic"); + self notify("xenon_remove_auto_aim"); + self.autoaim thread xenon_enable_auto_aim(param_00); + self.dontremove = 1; + self waittill("damage",var_01,var_02); + self.autoaim disableaimassist(); + self.autoaim delete(); + if(self.dontremove) + { + self waittill("ok_remove"); + } + + self delete(); +} + +//Function Number: 26 +xenon_enable_auto_aim(param_00) +{ + self endon("xenon_auto_aim_stop_logic"); + self endon("death"); + if(!isdefined(param_00)) + { + param_00 = 1; + } + + if(isdefined(self.script_noteworthy) && param_00) + { + var_01 = "enable_xenon_autoaim_" + self.script_noteworthy; + level waittill(var_01); + } + + self.wait_message = 0; + if(isdefined(self.recreate) && self.recreate == 1) + { + self waittill("recreate"); + } + + self enableaimassist(); +} + +//Function Number: 27 +breakable_clip() +{ + if(isdefined(self.target)) + { + var_00 = getent(self.target,"targetname"); + if(var_00.classname == "script_brushmodel") + { + self.remove = var_00; + return; + } + } + + if(isdefined(level.breakables_clip) && level.breakables_clip.size > 0) + { + self.remove = getclosestent(self.origin,level.breakables_clip); + } + + if(isdefined(self.remove)) + { + level.breakables_clip = common_scripts\utility::array_remove(level.breakables_clip,self.remove); + } +} + +//Function Number: 28 +make_broken_peices(param_00,param_01) +{ + var_02 = anglestoright(param_00.angles); + var_03 = anglestoforward(param_00.angles); + var_04 = anglestoup(param_00.angles); + var_05 = []; + switch(param_01) + { + case "orange vase": + break; + var_7B[var_7B.size] + addpiece(var_03,var_04,var_05,3,2,0,param_01,(0,0,0),"egypt_prop_vase_br5") + var_7B[var_7B.size] + addpiece(var_03,var_04,var_05,12,10,27,param_01,(0,180,0),"egypt_prop_vase_br7") + var_7B[var_7B.size] + addpiece(var_03,var_04,var_05,13,-6,28,param_01,(0,245.1,0),"egypt_prop_vase_br7") + var_7B[var_05.size] + addpiece(var_02,var_03,var_04,-7,0,22,param_00,(0,0,0),"egypt_prop_vase_br2") + break; + + case "green vase": + break; + var_7B[var_7B.size] + addpiece(var_03,var_04,var_05,3,1,0,param_01,(0,0,0),"egypt_prop_vase_br4") + var_7B[var_7B.size] + addpiece(var_03,var_04,var_05,6,13,29,param_01,(0,153.5,0),"egypt_prop_vase_br6") + var_7B[var_7B.size] + addpiece(var_03,var_04,var_05,12,1,31,param_01,(0,348.5,0),"egypt_prop_vase_br3") + var_7B[var_7B.size] + addpiece(var_03,var_04,var_05,-6,-1,26,param_01,(0,0,0),"egypt_prop_vase_br1") + break; + + case "wood box": + break; + var_7B[var_7B.size] + addpiece(var_03,var_04,var_05,-10,10,5,param_01,(180,270,0),"prop_crate_dak_shard") + var_7B[var_7B.size] + addpiece(var_03,var_04,var_05,-10,-10,5,param_01,(180,180,0),"prop_crate_dak_shard") + var_7B[var_7B.size] + addpiece(var_03,var_04,var_05,10,-10,5,param_01,(180,90,0),"prop_crate_dak_shard") + var_7B[var_7B.size] + addpiece(var_03,var_04,var_05,10,10,5,param_01,(180,0,0),"prop_crate_dak_shard") + var_7B[var_7B.size] + addpiece(var_03,var_04,var_05,-10,-10,25,param_01,(0,270,0),"prop_crate_dak_shard") + var_7B[var_7B.size] + addpiece(var_03,var_04,var_05,10,-10,25,param_01,(0,180,0),"prop_crate_dak_shard") + var_7B[var_7B.size] + addpiece(var_03,var_04,var_05,10,10,25,param_01,(0,90,0),"prop_crate_dak_shard") + var_7B[var_7B.size] + addpiece(var_03,var_04,var_05,-10,10,25,param_01,(0,0,0),"prop_crate_dak_shard") + break; + + case "bottle": + var_7B[var_7B.size - 1].type = "bottle_top"; + var_7B[var_7B.size - 1].type = "bottle_bot"; + break; + var_7B[var_7B.size] + addpiece(var_03,var_04,var_05,0,0,0,param_01,(0,0,0),"prop_winebottle_broken_bot") + var_7B[var_7B.size] + addpiece(var_03,var_04,var_05,0,0,10,param_01,(0,0,0),"prop_winebottle_broken_top") + break; + + case "plate": + switch(param_01.plate) + { + case "round_floral": + var_7B[var_7B.size - 1].type = "plate"; + var_7B[var_7B.size - 1].type = "plate"; + var_7B[var_7B.size - 1].type = "plate"; + var_7B[var_7B.size - 1].type = "plate"; + break; + var_7B[var_7B.size] + addpiece(var_03,var_04,var_05,-4,2,0.5,param_01,(0,146.8,0),"prop_diningplate_brokenfloral4") + var_7B[var_7B.size] + addpiece(var_03,var_04,var_05,1,2,0.5,param_01,(0,150.2,0),"prop_diningplate_brokenfloral3") + var_7B[var_7B.size] + addpiece(var_03,var_04,var_05,3,-2,0.5,param_01,(0,149.8,0),"prop_diningplate_brokenfloral2") + var_7B[var_7B.size] + addpiece(var_03,var_04,var_05,-3,-4,0.5,param_01,(0,150,0),"prop_diningplate_brokenfloral1") + break; + + case "round_plain": + var_7B[var_7B.size - 1].type = "plate"; + var_7B[var_7B.size - 1].type = "plate"; + var_7B[var_7B.size - 1].type = "plate"; + var_7B[var_7B.size - 1].type = "plate"; + break; + var_7B[var_7B.size] + addpiece(var_03,var_04,var_05,-4,2,0.5,param_01,(0,146.8,0),"prop_diningplate_brokenplain4") + var_7B[var_7B.size] + addpiece(var_03,var_04,var_05,1,2,0.5,param_01,(0,150.2,0),"prop_diningplate_brokenplain3") + var_7B[var_7B.size] + addpiece(var_03,var_04,var_05,3,-2,0.5,param_01,(0,149.8,0),"prop_diningplate_brokenplain2") + var_7B[var_7B.size] + addpiece(var_03,var_04,var_05,-3,-4,0.5,param_01,(0,150,0),"prop_diningplate_brokenplain1") + break; + + case "round_stack": + var_7B[var_7B.size - 1].type = "plate"; + var_7B[var_7B.size - 1].type = "plate"; + var_7B[var_7B.size - 1].type = "plate"; + var_7B[var_7B.size - 1].type = "plate"; + var_7B[var_7B.size - 1].type = "plate"; + var_7B[var_7B.size - 1].type = "plate"; + var_7B[var_7B.size - 1].type = "plate"; + var_7B[var_7B.size - 1].type = "plate"; + var_7B[var_7B.size - 1].type = "plate"; + var_7B[var_7B.size - 1].type = "plate"; + var_7B[var_7B.size - 1].type = "plate"; + var_7B[var_7B.size - 1].type = "plate"; + break; + var_7B[var_7B.size] + addpiece(var_03,var_04,var_05,-4,2,4.5,param_01,(0,146.8,0),"prop_diningplate_brokenfloral4") + var_7B[var_7B.size] + addpiece(var_03,var_04,var_05,1,2,4.5,param_01,(0,150.2,0),"prop_diningplate_brokenfloral3") + var_7B[var_7B.size] + addpiece(var_03,var_04,var_05,3,-2,4.5,param_01,(0,149.8,0),"prop_diningplate_brokenfloral2") + var_7B[var_7B.size] + addpiece(var_03,var_04,var_05,-3,-4,4.5,param_01,(0,150,0),"prop_diningplate_brokenfloral1") + var_7B[var_7B.size] + addpiece(var_03,var_04,var_05,2,4,2.5,param_01,(0,56.8,0),"prop_diningplate_brokenplain4") + var_7B[var_7B.size] + addpiece(var_03,var_04,var_05,2,-1,2.5,param_01,(0,60.2,0),"prop_diningplate_brokenplain3") + var_7B[var_7B.size] + addpiece(var_03,var_04,var_05,-1,-3,2.5,param_01,(0,59.8,0),"prop_diningplate_brokenplain2") + var_7B[var_7B.size] + addpiece(var_03,var_04,var_05,-4,3,2.5,param_01,(0,60,0),"prop_diningplate_brokenplain1") + var_7B[var_7B.size] + addpiece(var_03,var_04,var_05,-4,2,0.5,param_01,(0,146.8,0),"prop_diningplate_brokenfloral4") + var_7B[var_7B.size] + addpiece(var_03,var_04,var_05,1,2,0.5,param_01,(0,150.2,0),"prop_diningplate_brokenfloral3") + var_7B[var_7B.size] + addpiece(var_03,var_04,var_05,3,-2,0.5,param_01,(0,149.8,0),"prop_diningplate_brokenfloral2") + var_7B[var_7B.size] + addpiece(var_03,var_04,var_05,-3,-4,0.5,param_01,(0,150,0),"prop_diningplate_brokenfloral1") + break; + + case "oval_floral": + var_7B[var_7B.size - 1].type = "plate"; + var_7B[var_7B.size - 1].type = "plate"; + var_7B[var_7B.size - 1].type = "plate"; + var_7B[var_7B.size - 1].type = "plate"; + var_7B[var_7B.size - 1].type = "plate"; + break; + var_7B[var_7B.size] + addpiece(var_03,var_04,var_05,-3,-3,0.5,param_01,(0,246.7,0),"prop_diningplate_brokenfloral4") + var_7B[var_7B.size] + addpiece(var_03,var_04,var_05,-2,5,0.5,param_01,(0,102.3,0),"prop_diningplate_brokenfloral4") + var_7B[var_7B.size] + addpiece(var_03,var_04,var_05,4,2,0.5,param_01,(0,150.2,0),"prop_diningplate_brokenfloral3") + var_7B[var_7B.size] + addpiece(var_03,var_04,var_05,-6,1,0.5,param_01,(0,352.2,0),"prop_diningplate_brokenfloral2") + var_7B[var_7B.size] + addpiece(var_03,var_04,var_05,4,-4,0.5,param_01,(0,205.9,0),"prop_diningplate_brokenfloral1") + break; + + case "oval_plain": + var_7B[var_7B.size - 1].type = "plate"; + var_7B[var_7B.size - 1].type = "plate"; + var_7B[var_7B.size - 1].type = "plate"; + var_7B[var_7B.size - 1].type = "plate"; + var_7B[var_7B.size - 1].type = "plate"; + break; + var_7B[var_7B.size] + addpiece(var_03,var_04,var_05,-3,-3,0.5,param_01,(0,246.7,0),"prop_diningplate_brokenplain4") + var_7B[var_7B.size] + addpiece(var_03,var_04,var_05,-2,5,0.5,param_01,(0,102.3,0),"prop_diningplate_brokenplain4") + var_7B[var_7B.size] + addpiece(var_03,var_04,var_05,4,2,0.5,param_01,(0,150.2,0),"prop_diningplate_brokenplain3") + var_7B[var_7B.size] + addpiece(var_03,var_04,var_05,-6,1,0.5,param_01,(0,352.2,0),"prop_diningplate_brokenplain2") + var_7B[var_7B.size] + addpiece(var_03,var_04,var_05,4,-4,0.5,param_01,(0,205.9,0),"prop_diningplate_brokenplain1") + break; + + case "oval_stack": + var_7B[var_7B.size - 1].type = "plate"; + var_7B[var_7B.size - 1].type = "plate"; + var_7B[var_7B.size - 1].type = "plate"; + var_7B[var_7B.size - 1].type = "plate"; + var_7B[var_7B.size - 1].type = "plate"; + var_7B[var_7B.size - 1].type = "plate"; + var_7B[var_7B.size - 1].type = "plate"; + var_7B[var_7B.size - 1].type = "plate"; + var_7B[var_7B.size - 1].type = "plate"; + var_7B[var_7B.size - 1].type = "plate"; + break; + var_7B[var_7B.size] + addpiece(var_03,var_04,var_05,3,4,2.5,param_01,(0,66.7,0),"prop_diningplate_brokenplain4") + var_7B[var_7B.size] + addpiece(var_03,var_04,var_05,2,-4,2.5,param_01,(0,282.3,0),"prop_diningplate_brokenplain4") + var_7B[var_7B.size] + addpiece(var_03,var_04,var_05,-4,-1,2.5,param_01,(0,330.2,0),"prop_diningplate_brokenplain3") + var_7B[var_7B.size] + addpiece(var_03,var_04,var_05,6,0,2.5,param_01,(0,172.2,0),"prop_diningplate_brokenplain2") + var_7B[var_7B.size] + addpiece(var_03,var_04,var_05,-4,5,2.5,param_01,(0,25.9,0),"prop_diningplate_brokenplain1") + var_7B[var_7B.size] + addpiece(var_03,var_04,var_05,-3,-3,0.5,param_01,(0,246.7,0),"prop_diningplate_brokenfloral4") + var_7B[var_7B.size] + addpiece(var_03,var_04,var_05,-2,5,0.5,param_01,(0,102.3,0),"prop_diningplate_brokenfloral4") + var_7B[var_7B.size] + addpiece(var_03,var_04,var_05,4,2,0.5,param_01,(0,150.2,0),"prop_diningplate_brokenfloral3") + var_7B[var_7B.size] + addpiece(var_03,var_04,var_05,-6,1,0.5,param_01,(0,352.2,0),"prop_diningplate_brokenfloral2") + var_7B[var_7B.size] + addpiece(var_03,var_04,var_05,4,-4,0.5,param_01,(0,205.9,0),"prop_diningplate_brokenfloral1") + break; + } + break; + + default: + break; + } + + common_scripts\utility::array_thread(var_7B,::pieces_move,param_01.origin); + if(isdefined(level.var_1DE0[var_02]) && level.var_1DE0[var_02] == 1) + { + var_06 = var_7B[0].origin[2]; + for(var_07 = 0;var_07 < var_7B.size;var_07++) + { + if(var_06 > var_7B[var_07].origin[2]) + { + var_06 = var_7B[var_07].origin[2]; + } + } + + common_scripts\utility::array_thread(var_7B,::pieces_collision,var_06); + return; + } + + wait 2; + for(var_07 = 0;var_07 < var_7B.size;var_07++) + { + if(isdefined(var_7B[var_07])) + { + var_7B[var_07] delete(); + } + } +} + +//Function Number: 29 +list_add(param_00) +{ + if(isdefined(level._breakable_utility_modelarray[level._breakable_utility_modelindex])) + { + level._breakable_utility_modelarray[level._breakable_utility_modelindex] delete(); + } + + level._breakable_utility_modelarray[level._breakable_utility_modelindex] = param_00; + level._breakable_utility_modelindex++; + if(!level._breakable_utility_modelindex < level._breakable_utility_maxnum) + { + level._breakable_utility_modelindex = 0; + } +} + +//Function Number: 30 +pieces_move(param_00) +{ + self endon("do not kill"); + if(isdefined(self.type) && self.type == "bottle_bot") + { + return; + } + + var_01 = spawn("script_origin",self.origin); + self linkto(var_01); + var_02 = self.origin + (randomfloat(10) - 5,randomfloat(10) - 5,randomfloat(10) + 5); + var_03 = undefined; + if(isdefined(self.type) && self.type == "bottle_top") + { + var_03 = (randomfloat(40) - 20,randomfloat(40) - 20,70 + randomfloat(15)); + var_04 = 1; + var_05 = 1; + var_06 = 1; + if(randomint(100) > 50) + { + var_04 = -1; + } + + if(randomint(100) > 50) + { + var_05 = -1; + } + + if(randomint(100) > 50) + { + var_06 = -1; + } + + var_01 rotatevelocity((250 * var_04,250 * var_05,randomfloat(100) * var_06),2,0,0.5); + } + else if(isdefined(self.type) && self.type == "plate") + { + var_03 = vectornormalize(var_02 - param_00); + var_03 = var_03 * 125 + randomfloat(25); + if(randomint(100) > 50) + { + var_01 rotateroll(800 + randomfloat(4000) * -1,5,0,0); + } + else + { + var_01 rotateroll(800 + randomfloat(4000),5,0,0); + } + } + else + { + var_03 = vectornormalize(var_02 - param_00); + var_03 = var_03 * 60 + randomfloat(50); + if(randomint(100) > 50) + { + var_01 rotateroll(800 + randomfloat(1000) * -1,5,0,0); + } + else + { + var_01 rotateroll(800 + randomfloat(1000),5,0,0); + } + } + + var_01 movegravity(var_03,5); + wait 5; + if(isdefined(self)) + { + self unlink(); + } + + var_01 delete(); +} + +//Function Number: 31 +pieces_collision(param_00) +{ + self endon("death"); + wait 0.1; + var_01 = bullettrace(self.origin,self.origin - (0,0,50000),0,undefined); + var_02 = var_01["position"]; + while(self.origin[2] > var_02[2]) + { + wait 0.05; + } + + self unlink(); + self.origin = (self.origin[0],self.origin[1],var_02[2]); + self notify("do not kill"); + self unlink(); +} + +//Function Number: 32 +addpiece(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08) +{ + var_09 = 1; + var_0A = param_00; + var_0B = param_01; + var_0C = param_02; + var_0A = var_0A * param_04 * var_09; + var_0B = var_0B * param_03 * var_09; + var_0C = var_0C * param_05 * var_09; + var_0D = param_06.origin + var_0A + var_0B + var_0C; + var_0E = spawn("script_model",var_0D); + var_0E setmodel(param_08); + var_0E.modelscale = var_09; + var_0E.angles = param_06.angles + param_07; + list_add(var_0E); + return var_0E; +} + +//Function Number: 33 +getfurthestent(param_00,param_01) +{ + if(param_01.size < 1) + { + return; + } + + var_02 = distance(param_01[0] getorigin(),param_00); + var_03 = param_01[0]; + for(var_04 = 0;var_04 < param_01.size;var_04++) + { + var_05 = distance(param_01[var_04] getorigin(),param_00); + if(var_05 < var_02) + { + continue; + } + + var_02 = var_05; + var_03 = param_01[var_04]; + } + + return var_03; +} + +//Function Number: 34 +getclosestent(param_00,param_01) +{ + if(param_01.size < 1) + { + return; + } + + var_02 = 256; + var_03 = undefined; + for(var_04 = 0;var_04 < param_01.size;var_04++) + { + var_05 = distance(param_01[var_04] getorigin(),param_00); + if(var_05 >= var_02) + { + continue; + } + + var_02 = var_05; + var_03 = param_01[var_04]; + } + + return var_03; +} + +//Function Number: 35 +getclosestaccurantent(param_00,param_01) +{ + if(param_01.size < 1) + { + return; + } + + var_02 = 8; + var_03 = undefined; + for(var_04 = 0;var_04 < param_01.size;var_04++) + { + var_05 = distance(param_01[var_04] getorigin(),param_00); + if(var_05 >= var_02) + { + continue; + } + + var_02 = var_05; + var_03 = param_01[var_04]; + } + + return var_03; +} + +//Function Number: 36 +getclosestaiment(param_00,param_01) +{ + if(param_01.size < 1) + { + return; + } + + var_02 = 1000000; + var_03 = undefined; + for(var_04 = 0;var_04 < param_01.size;var_04++) + { + var_05 = distance(param_01[var_04] getorigin(),param_00); + if(var_05 >= var_02) + { + continue; + } + + var_02 = var_05; + var_03 = param_01[var_04]; + } + + return var_03; +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_introscreen.gsc b/MW3/PC/SP/maps/_introscreen.gsc new file mode 100644 index 0000000..f7ec3cc --- /dev/null +++ b/MW3/PC/SP/maps/_introscreen.gsc @@ -0,0 +1,750 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_introscreen.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 31 + * Decompile Time: 481 ms + * Timestamp: 10/27/2023 2:22:56 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + common_scripts\utility::flag_init("pullup_weapon"); + common_scripts\utility::flag_init("introscreen_complete"); + common_scripts\utility::flag_init("safe_for_objectives"); + common_scripts\utility::flag_init("introscreen_complete"); + maps\_utility::delaythread(10,::common_scripts\utility::flag_set,"safe_for_objectives"); + level.linefeed_delay = 16; + precacheshader("black"); + precacheshader("white"); + if(getdvar("introscreen") == "") + { + setdvar("introscreen","1"); + } + + if(isdefined(level.credits_active)) + { + return; + } + + main_old_maps(); + switch(get_introscreen_levelname()) + { + case "london": + precachestring(&"LONDON_INTROSCREEN_LINE_1"); + precachestring(&"LONDON_INTROSCREEN_LINE_2"); + precachestring(&"LONDON_INTROSCREEN_LINE_3"); + precachestring(&"LONDON_INTROSCREEN_LINE_4"); + precachestring(&"LONDON_INTROSCREEN_LINE_5"); + introscreen_delay(); + break; + + case "castle": + precachestring(&"CASTLE_INTROSCREEN_LINE_1"); + precachestring(&"CASTLE_INTROSCREEN_LINE_2"); + precachestring(&"CASTLE_INTROSCREEN_LINE_3"); + precachestring(&"CASTLE_INTROSCREEN_LINE_4"); + precachestring(&"CASTLE_INTROSCREEN_LINE_5"); + introscreen_delay(); + break; + + case "prague": + precachestring(&"PRAGUE_INTROSCREEN_LINE_1"); + precachestring(&"PRAGUE_INTROSCREEN_LINE_2"); + precachestring(&"PRAGUE_INTROSCREEN_LINE_3"); + precachestring(&"PRAGUE_INTROSCREEN_LINE_4"); + precachestring(&"PRAGUE_INTROSCREEN_LINE_5"); + introscreen_delay(); + break; + + case "prague_escape": + precachestring(&"PRAGUE_ESCAPE_INTROSCREEN_LINE_1"); + precachestring(&"PRAGUE_ESCAPE_INTROSCREEN_LINE_2"); + precachestring(&"PRAGUE_ESCAPE_INTROSCREEN_LINE_3"); + precachestring(&"PRAGUE_ESCAPE_INTROSCREEN_LINE_4"); + precachestring(&"PRAGUE_ESCAPE_INTROSCREEN_LINE_5"); + introscreen_delay(); + break; + + case "payback": + precachestring(&"PAYBACK_INTROSCREEN_LINE_1"); + precachestring(&"PAYBACK_INTROSCREEN_LINE_2"); + precachestring(&"PAYBACK_INTROSCREEN_LINE_3"); + precachestring(&"PAYBACK_INTROSCREEN_LINE_4"); + precachestring(&"PAYBACK_INTROSCREEN_LINE_5"); + introscreen_delay(); + break; + + case "example": + break; + + case "hamburg": + precachestring(&"TANKCOMMANDER_INTROSCREEN_LINE_1"); + precachestring(&"TANKCOMMANDER_INTROSCREEN_LINE_2"); + precachestring(&"TANKCOMMANDER_INTROSCREEN_LINE_3"); + precachestring(&"TANKCOMMANDER_INTROSCREEN_LINE_4"); + introscreen_delay(); + break; + + case "rescue_2": + precachestring(&"RESCUE_2_INTROSCREEN_LINE_1"); + precachestring(&"RESCUE_2_INTROSCREEN_LINE_2"); + precachestring(&"RESCUE_2_INTROSCREEN_LINE_3"); + precachestring(&"RESCUE_2_INTROSCREEN_LINE_4"); + introscreen_delay(); + break; + + default: + wait 0.05; + level notify("finished final intro screen fadein"); + wait 0.05; + level notify("starting final intro screen fadeout"); + wait 0.05; + level notify("controls_active"); + wait 0.05; + common_scripts\utility::flag_set("introscreen_complete"); + break; + } +} + +//Function Number: 2 +introscreen_feed_lines(param_00) +{ + var_01 = getarraykeys(param_00); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + var_03 = var_01[var_02]; + var_04 = 1; + var_05 = var_02 * var_04 + 1; + maps\_utility::delaythread(var_05,::introscreen_corner_line,param_00[var_03],param_00.size - var_02 - 1,var_04,var_03); + } +} + +//Function Number: 3 +introscreen_generic_black_fade_in(param_00,param_01,param_02) +{ + introscreen_generic_fade_in("black",param_00,param_01,param_02); +} + +//Function Number: 4 +introscreen_generic_white_fade_in(param_00,param_01,param_02) +{ + introscreen_generic_fade_in("white",param_00,param_01,param_02); +} + +//Function Number: 5 +introscreen_generic_fade_in(param_00,param_01,param_02,param_03) +{ + if(!isdefined(param_02)) + { + param_02 = 1.5; + } + + var_04 = newhudelem(); + var_04.x = 0; + var_04.y = 0; + var_04.horzalign = "fullscreen"; + var_04.vertalign = "fullscreen"; + var_04.foreground = 1; + var_04 setshader(param_00,640,480); + if(isdefined(param_03) && param_03 > 0) + { + var_04.alpha = 0; + var_04 fadeovertime(param_03); + var_04.alpha = 1; + wait param_03; + } + + wait param_01; + if(param_02 > 0) + { + var_04 fadeovertime(param_02); + } + + var_04.alpha = 0; + wait param_02; + setsaveddvar("com_cinematicEndInWhite",0); +} + +//Function Number: 6 +introscreen_create_line(param_00) +{ + var_01 = level.introstring.size; + var_02 = var_01 * 30; + if(level.console) + { + var_02 = var_02 - 60; + } + + level.introstring[var_01] = newhudelem(); + level.introstring[var_01].x = 0; + level.introstring[var_01].y = var_02; + level.introstring[var_01].alignx = "center"; + level.introstring[var_01].aligny = "middle"; + level.introstring[var_01].horzalign = "center"; + level.introstring[var_01].vertalign = "middle"; + level.introstring[var_01].sort = 1; + level.introstring[var_01].foreground = 1; + level.introstring[var_01].fontscale = 1.75; + level.introstring[var_01] settext(param_00); + level.introstring[var_01].alpha = 0; + level.introstring[var_01] fadeovertime(1.2); + level.introstring[var_01].alpha = 1; +} + +//Function Number: 7 +introscreen_fadeouttext() +{ + for(var_00 = 0;var_00 < level.introstring.size;var_00++) + { + level.introstring[var_00] fadeovertime(1.5); + level.introstring[var_00].alpha = 0; + } + + wait 1.5; + for(var_00 = 0;var_00 < level.introstring.size;var_00++) + { + level.introstring[var_00] destroy(); + } +} + +//Function Number: 8 +introscreen_delay(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + waittillframeend; + waittillframeend; + if(slamzoom_intro()) + { + return; + } + + if(introscreen_old_maps()) + { + return; + } + + switch(get_introscreen_levelname()) + { + case "london": + london_intro(); + break; + + case "castle": + castle_intro(); + break; + + case "prague": + prague_intro(); + break; + + case "prague_escape": + prague_escape_intro(); + break; + + case "payback": + payback_intro(); + break; + + case "rescue_2": + rescue_2_intro(); + break; + + case "hamburg": + hamburg_intro(); + break; + } + + level.introblack = newhudelem(); + level.introblack.x = 0; + level.introblack.y = 0; + level.introblack.horzalign = "fullscreen"; + level.introblack.vertalign = "fullscreen"; + level.introblack.foreground = 1; + level.introblack setshader("black",640,480); + level.player freezecontrols(1); + wait 0.05; + level.introstring = []; + if(isdefined(param_00)) + { + introscreen_create_line(param_00); + } + + if(isdefined(param_04)) + { + wait param_04; + } + else + { + wait 2; + } + + if(isdefined(param_01)) + { + introscreen_create_line(param_01); + } + + if(isdefined(param_02)) + { + introscreen_create_line(param_02); + } + + if(isdefined(param_03)) + { + if(isdefined(param_05)) + { + wait param_05; + } + else + { + wait 2; + } + } + + if(isdefined(param_03)) + { + introscreen_create_line(param_03); + } + + level notify("finished final intro screen fadein"); + if(isdefined(param_06)) + { + wait param_06; + } + else + { + wait 3; + } + + level.introblack fadeovertime(1.5); + level.introblack.alpha = 0; + level notify("starting final intro screen fadeout"); + level.player freezecontrols(0); + level notify("controls_active"); + introscreen_fadeouttext(); + common_scripts\utility::flag_set("introscreen_complete"); +} + +//Function Number: 9 +_cornerlinethread(param_00,param_01,param_02,param_03) +{ + level notify("new_introscreen_element"); + if(!isdefined(level.intro_offset)) + { + level.intro_offset = 0; + } + else + { + level.intro_offset++; + } + + var_04 = _cornerlinethread_height(); + var_05 = newhudelem(); + var_05.x = 20; + var_05.y = var_04; + var_05.alignx = "left"; + var_05.aligny = "bottom"; + var_05.horzalign = "left"; + var_05.vertalign = "bottom"; + var_05.sort = 1; + var_05.foreground = 1; + var_05 settext(param_00); + var_05.alpha = 0; + var_05 fadeovertime(0.2); + var_05.alpha = 1; + var_05.hidewheninmenu = 1; + var_05.fontscale = 2; + var_05.color = (0.8,1,0.8); + var_05.font = "objective"; + var_05.glowcolor = (0.3,0.6,0.3); + var_05.glowalpha = 1; + var_06 = int(param_01 * param_02 * 1000 + 4000); + var_05 setpulsefx(30,var_06,700); + thread hudelem_destroy(var_05); + if(!isdefined(param_03)) + { + return; + } + + if(!isstring(param_03)) + { + return; + } + + if(param_03 != "date") + { + } +} + +//Function Number: 10 +_cornerlinethread_height() +{ + return level.intro_offset * 20 - 82; +} + +//Function Number: 11 +introscreen_corner_line(param_00,param_01,param_02,param_03) +{ + thread _cornerlinethread(param_00,param_01,param_02,param_03); +} + +//Function Number: 12 +hudelem_destroy(param_00) +{ + wait level.linefeed_delay; + param_00 notify("destroying"); + level.intro_offset = undefined; + var_01 = 0.5; + param_00 fadeovertime(var_01); + param_00.alpha = 0; + wait var_01; + param_00 notify("destroy"); + param_00 destroy(); +} + +//Function Number: 13 +castle_intro() +{ + level.player freezecontrols(1); + savegame("levelstart",&"AUTOSAVE_LEVELSTART","whatever",1); + thread introscreen_generic_black_fade_in(5); + var_00 = []; + introscreen_feed_lines(var_7B); + wait 5; + common_scripts\utility::flag_set("introscreen_complete"); + level.player freezecontrols(0); +} + +//Function Number: 14 +london_intro() +{ + level.player freezecontrols(1); + savegame("levelstart",&"AUTOSAVE_LEVELSTART","whatever",1); + thread introscreen_generic_black_fade_in(5); + var_00 = []; + introscreen_feed_lines(var_7B); + wait 5; + common_scripts\utility::flag_set("introscreen_complete"); + level.player freezecontrols(0); +} + +//Function Number: 15 +hamburg_intro() +{ + savegame("levelstart",&"AUTOSAVE_LEVELSTART","whatever",1); + thread introscreen_generic_black_fade_in(3.5); + var_00 = []; + introscreen_feed_lines(var_7B); + wait 3; + common_scripts\utility::flag_set("introscreen_complete"); +} + +//Function Number: 16 +prague_intro() +{ + level.player freezecontrols(1); + common_scripts\utility::flag_wait("fade_up"); + thread introscreen_generic_black_fade_in(4,5); + var_00 = []; + level.player common_scripts\utility::delaycall(4,::freezecontrols,0); + common_scripts\utility::flag_wait("city_reveal"); + maps\_utility::delaythread(9.25,::introscreen_feed_lines,var_7B); +} + +//Function Number: 17 +prague_escape_intro() +{ + level.player freezecontrols(1); + thread introscreen_generic_black_fade_in(8,0.5); + var_00 = []; + introscreen_feed_lines(var_7B); + wait 8; + common_scripts\utility::flag_set("introscreen_complete"); + level.player freezecontrols(0); +} + +//Function Number: 18 +payback_intro() +{ + level.player freezecontrols(1); + savegame("levelstart",&"AUTOSAVE_LEVELSTART","whatever",1); + level notify("introscreen_prime_audio"); + level notify("introscreen_fade_start"); + wait 2; + level.player freezecontrols(0); + var_00 = 9; + var_01 = 30; + var_02 = 10; + level.hudtimestamp = var_00 * 60 * 60 + var_01 * 60 + var_02; + level.hudtimestampstarttime = gettime(); + var_03 = []; + introscreen_feed_lines(var_7B); + wait 2; +} + +//Function Number: 19 +feedline_delay() +{ + wait 2; +} + +//Function Number: 20 +slamzoom_intro() +{ + var_00 = []; + if(!getdvarint("newintro")) + { + } + + var_01 = isdefined(level.customintroangles); + if(!isdefined(var_7B[get_introscreen_levelname()])) + { + return 0; + } + + if(!isdefined(level.dontrevivehud)) + { + thread revive_ammo_counter(); + } + + thread hide_hud(); + thread weapon_pullout(); + level.player freezecontrols(1); + var_02 = ::feedline_delay; + var_03 = 16000; + var_04 = 1; + var_05 = 0; + var_06 = 0; + if(var_04) + { + var_07 = []; + switch(get_introscreen_levelname()) + { + case "london": + cinematicingamesync("estate_fade"); + var_07 = []; + var_03 = 4000; + setsaveddvar("sm_sunSampleSizeNear",0.6); + maps\_utility::delaythread(0.5,::ramp_out_sunsample_over_time,0.9); + break; + var_7B[var_07.size] + &"LONDON_INTROSCREEN_LINE_4" + var_7B[var_07.size] + &"LONDON_INTROSCREEN_LINE_3" + var_7B[var_07.size] + &"LONDON_INTROSCREEN_LINE_2" + var_7B[var_07.size] + &"LONDON_INTROSCREEN_LINE_1" + break; + } + + maps\_utility::add_func(var_02); + maps\_utility::add_func(::introscreen_feed_lines,var_07); + thread maps\_utility::do_funcs(); + } + + var_08 = level.player.origin; + level.player playersetstreamorigin(var_08); + level.player.origin = var_08 + (0,0,var_03); + var_09 = spawn("script_model",(69,69,69)); + var_09.origin = level.player.origin; + var_09 setmodel("tag_origin"); + if(var_01) + { + var_09.angles = (0,level.customintroangles[1],0); + } + else + { + var_09.angles = level.player.angles; + } + + level.player playerlinkto(var_09,undefined,1,0,0,0,0); + var_09.angles = (var_09.angles[0] + 89,var_09.angles[1],0); + wait var_05; + var_09 moveto(var_08 + (0,0,0),2,0,2); + wait 1; + wait 0.5; + if(var_01) + { + var_09 rotateto(level.customintroangles,0.5,0.3,0.2); + } + else + { + var_09 rotateto((var_09.angles[0] - 89,var_09.angles[1],0),0.5,0.3,0.2); + } + + if(!var_06) + { + savegame("levelstart",&"AUTOSAVE_LEVELSTART","whatever",1); + } + + wait 0.5; + common_scripts\utility::flag_set("pullup_weapon"); + wait 0.2; + level.player unlink(); + level.player freezecontrols(0); + level.player playerclearstreamorigin(); + thread common_scripts\utility::play_sound_in_space("ui_screen_trans_in",level.player.origin); + wait 0.2; + thread common_scripts\utility::play_sound_in_space("ui_screen_trans_out",level.player.origin); + wait 0.2; + common_scripts\utility::flag_set("introscreen_complete"); + wait 2; + var_09 delete(); + return 1; +} + +//Function Number: 21 +hide_hud() +{ + wait 0.05; + setsaveddvar("compass",0); + setsaveddvar("ammoCounterHide","1"); + setsaveddvar("hud_showstance","0"); + setsaveddvar("actionSlotsHide","1"); +} + +//Function Number: 22 +weapon_pullout() +{ + var_00 = level.player getweaponslistall()[0]; + level.player disableweapons(); + common_scripts\utility::flag_wait("pullup_weapon"); + level.player enableweapons(); +} + +//Function Number: 23 +revive_ammo_counter() +{ + common_scripts\utility::flag_wait("safe_for_objectives"); + if(!isdefined(level.nocompass)) + { + setsaveddvar("compass",1); + } + + setsaveddvar("ammoCounterHide","0"); + setsaveddvar("actionSlotsHide","0"); + setsaveddvar("hud_showstance","1"); +} + +//Function Number: 24 +ramp_out_sunsample_over_time(param_00,param_01) +{ + var_02 = getdvarfloat("sm_sunSampleSizeNear"); + if(!isdefined(param_01)) + { + param_01 = 0.25; + } + + var_03 = var_02 - param_01; + var_04 = param_00 * 20; + for(var_05 = 0;var_05 <= var_04;var_05++) + { + var_06 = var_05 / var_04; + var_06 = 1 - var_06; + var_07 = var_06 * var_03; + var_08 = param_01 + var_07; + setsaveddvar("sm_sunSampleSizeNear",var_08); + wait 0.05; + } +} + +//Function Number: 25 +get_introscreen_levelname() +{ + if(isdefined(level.introscreen_levelname)) + { + return level.introscreen_levelname; + } + + return level.script; +} + +//Function Number: 26 +main_old_maps() +{ + switch(get_introscreen_levelname()) + { + case "dcburning": + precachestring(&"DCBURNING_INTROSCREEN_1"); + precachestring(&"DCBURNING_INTROSCREEN_2"); + precachestring(&"DCBURNING_INTROSCREEN_3"); + precachestring(&"DCBURNING_INTROSCREEN_4"); + precachestring(&"DCBURNING_INTROSCREEN_5"); + introscreen_delay(); + break; + } +} + +//Function Number: 27 +cliffhanger_intro_text() +{ + wait 17; + var_00 = []; + introscreen_feed_lines(var_7B); +} + +//Function Number: 28 +dcburning_intro() +{ + level.player disableweapons(); + thread dcburningintrodvars(); + level.mortar_min_dist = 1; + level.player freezecontrols(1); + var_00 = newhudelem(); + var_00.x = 0; + var_00.y = 0; + var_00.horzalign = "fullscreen"; + var_00.vertalign = "fullscreen"; + var_00.foreground = 1; + var_00 setshader("black",640,480); + wait 4.25; + wait 3; + level notify("black_fading"); + level.mortar_min_dist = undefined; + var_00 fadeovertime(1.5); + var_00.alpha = 0; + wait 1.5; + common_scripts\utility::flag_set("introscreen_complete"); + level notify("introscreen_complete"); + level.player freezecontrols(0); + level.player enableweapons(); + wait 0.5; + setsaveddvar("compass",1); + setsaveddvar("ammoCounterHide","0"); + setsaveddvar("hud_showStance",1); + common_scripts\utility::flag_wait("player_exiting_start_trench"); + var_01 = []; + introscreen_feed_lines(var_7B); +} + +//Function Number: 29 +dcburningintrodvars() +{ + wait 0.05; + setsaveddvar("compass",0); + setsaveddvar("ammoCounterHide","1"); + setsaveddvar("hud_showStance",0); +} + +//Function Number: 30 +rescue_2_intro() +{ + var_00 = []; + thread introscreen_generic_black_fade_in(5.4,8); + introscreen_feed_lines(var_7B); +} + +//Function Number: 31 +introscreen_old_maps() +{ + switch(get_introscreen_levelname()) + { + case "dcburning": + dcburning_intro(); + return 1; + } + + return 0; +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_inventory.gsc b/MW3/PC/SP/maps/_inventory.gsc new file mode 100644 index 0000000..e0acaae --- /dev/null +++ b/MW3/PC/SP/maps/_inventory.gsc @@ -0,0 +1,132 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_inventory.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 6 + * Decompile Time: 76 ms + * Timestamp: 10/27/2023 2:20:08 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + level.inventory = []; +} + +//Function Number: 2 +inventory_create(param_00,param_01) +{ + if(1) + { + return spawnstruct(); + } + + if(!isdefined(param_01)) + { + param_01 = 0; + } + + var_02 = newhudelem(); + var_02.alignx = "right"; + var_02.aligny = "top"; + var_02.horzalign = "right"; + var_02.vertalign = "top"; + var_02.alpha = 0; + var_02.index = level.inventory.size; + var_02.show_icon = param_01; + var_02 setshader(param_00,40,40); + level.inventory[var_02.index] = var_02; + inventroy_update(); + return var_02; +} + +//Function Number: 3 +inventory_hide() +{ + if(1) + { + return; + } + + self.show_icon = 0; + inventroy_update(); +} + +//Function Number: 4 +inventory_show() +{ + if(1) + { + return; + } + + self.show_icon = 1; + inventroy_update(); +} + +//Function Number: 5 +inventroy_update() +{ + if(1) + { + return; + } + + var_00 = -18; + var_01 = 8; + var_02 = 42; + var_03 = 0; + for(var_04 = 0;var_04 < level.inventory.size;var_04++) + { + if(level.inventory[var_04].show_icon) + { + var_05 = var_01 + var_02 * var_03; + if(var_05 != level.inventory[var_04].y) + { + level.inventory[var_04].x = var_00; + if(level.inventory[var_04].alpha != 0) + { + level.inventory[var_04] moveovertime(0.3); + } + + level.inventory[var_04].y = var_05; + } + + if(level.inventory[var_04].alpha != 1) + { + level.inventory[var_04] fadeovertime(0.3); + level.inventory[var_04].alpha = 1; + } + + var_03++; + continue; + } + + level.inventory[var_04] fadeovertime(0.3); + level.inventory[var_04].alpha = 0; + } +} + +//Function Number: 6 +inventory_destroy() +{ + if(1) + { + return; + } + + self destroy(); + var_00 = 0; + var_01 = level.inventory; + level.inventory = []; + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + if(isdefined(var_01[var_02])) + { + level.inventory[level.inventory.size] = var_01[var_02]; + } + } + + inventroy_update(); +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_juggernaut.gsc b/MW3/PC/SP/maps/_juggernaut.gsc new file mode 100644 index 0000000..cbe5580 --- /dev/null +++ b/MW3/PC/SP/maps/_juggernaut.gsc @@ -0,0 +1,182 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_juggernaut.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 5 + * Decompile Time: 65 ms + * Timestamp: 10/27/2023 2:20:36 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(isdefined(level.juggernaut_initialized)) + { + return; + } + + level.juggernaut_initialized = 1; + if(!isdefined(level.subclass_spawn_functions)) + { + level.subclass_spawn_functions = []; + } + + level.subclass_spawn_functions["juggernaut"] = ::subclass_juggernaut; + level.juggernaut_next_alert_time = 0; +} + +//Function Number: 2 +subclass_juggernaut() +{ + self.juggernaut = 1; + self.minpaindamage = 200; + self.grenadeammo = 0; + self.doorflashchance = 0.05; + self.aggressivemode = 1; + self.ignoresuppression = 1; + self.no_pistol_switch = 1; + self.norunngun = 1; + self.dontmelee = 1; + self.disableexits = 1; + self.disablearrivals = 1; + self.disablebulletwhizbyreaction = 1; + self.combatmode = "no_cover"; + self.neversprintforvariation = 1; + self.a.disablelongdeath = 1; + maps\_utility::disable_turnanims(); + maps\_utility::disable_surprise(); + init_juggernaut_animsets(); + maps\_utility::add_damage_function(::animscripts/pain::func_D82); + maps\_utility::add_damage_function(::maps\_spawner::pain_resistance); + if(!self isbadguy()) + { + return; + } + + self.bullet_resistance = 40; + maps\_utility::add_damage_function(::maps\_spawner::bullet_resistance); + thread juggernaut_hunt_immediately_behavior(); + thread juggernaut_sound_when_player_close(); + self.pathenemyfightdist = 128; + self.pathenemylookahead = 128; + level notify("juggernaut_spawned"); + self waittill("death",var_00,var_01,var_02); + if(isdefined(self) && isdefined(self.nodrop)) + { + var_03 = []; + animscripts/shared::func_23C1(); + foreach(var_05 in var_7B) + { + var_03 = self.a.weaponpos[var_05]; + if(var_03 == "none") + { + continue; + } + + self.weaponinfo[var_03].position = "none"; + self.a.weaponpos[var_05] = "none"; + } + + self.weapon = "none"; + animscripts/shared::func_23C4(); + } + + level notify("juggernaut_died",var_7B[var_7B.size],"back",var_7B[var_7B.size],"chest",var_7B[var_7B.size],"right",var_7B[var_03.size],"left"); + if(!isdefined(self)) + { + return; + } + + if(!isdefined(var_01)) + { + return; + } + + if(!isplayer(var_01)) + { + } +} + +//Function Number: 3 +juggernaut_hunt_immediately_behavior() +{ + self endon("death"); + self endon("stop_hunting"); + self.usechokepoints = 0; + for(;;) + { + wait 0.5; + if(isdefined(self.enemy)) + { + self setgoalpos(self.enemy.origin); + self.goalradius = 128; + self.goalheight = 81; + } + } +} + +//Function Number: 4 +juggernaut_sound_when_player_close() +{ + self endon("death"); + level endon("special_op_terminated"); + if(isdefined(level.skip_juggernaut_intro_sound) && level.skip_juggernaut_intro_sound) + { + return; + } + + var_00 = 2500; + if(level.script == "ending") + { + common_scripts\utility::flag_wait("panic_button"); + var_00 = 750; + } + + for(;;) + { + wait 0.05; + if(gettime() < level.juggernaut_next_alert_time) + { + continue; + } + + var_01 = maps\_utility::get_closest_player(self.origin); + if(!isalive(var_01)) + { + continue; + } + + if(distance(var_01.origin,self.origin) > var_00) + { + continue; + } + + if(level.pmc_alljuggernauts) + { + var_02 = self gettagorigin("tag_flash"); + if(!bullettracepassed(self geteye(),var_01 geteye(),0,undefined)) + { + wait 0.25; + continue; + } + } + + break; + } + + level.juggernaut_next_alert_time = gettime() + 15000; + level notify("juggernaut_attacking"); + common_scripts\utility::array_thread(level.players,::maps\_utility::playlocalsoundwrapper,"_juggernaut_attack"); +} + +//Function Number: 5 +init_juggernaut_animsets() +{ + self.walkdist = 500; + self.walkdistfacingmotion = 500; + maps\_utility::set_move_animset("run",%juggernaut_runf,%juggernaut_sprint); + maps\_utility::set_move_animset("walk",%juggernaut_walkf); + maps\_utility::set_move_animset("cqb",%juggernaut_walkf); + maps\_utility::set_combat_stand_animset(%juggernaut_stand_fire_burst,%juggernaut_aim5,%juggernaut_stand_idle,%juggernaut_stand_reload); +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_laststand.gsc b/MW3/PC/SP/maps/_laststand.gsc new file mode 100644 index 0000000..19b4b8a --- /dev/null +++ b/MW3/PC/SP/maps/_laststand.gsc @@ -0,0 +1,1800 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_laststand.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 73 + * Decompile Time: 1201 ms + * Timestamp: 10/27/2023 2:22:12 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(isdefined(level.laststand_initialized)) + { + return; + } + + level.laststand_initialized = 1; + common_scripts\utility::flag_init("laststand_on"); + foreach(var_01 in level.players) + { + var_01 maps\_utility::ent_flag_init("laststand_downed"); + var_01 maps\_utility::ent_flag_init("laststand_pause_bleedout_timer"); + var_01 maps\_utility::ent_flag_init("laststand_proc_running"); + var_01.laststand_info = spawnstruct(); + var_01.laststand_info.type_getup_lives = 0; + } + + precachestring(&"SCRIPT_COOP_BLEEDING_OUT_PARTNER"); + precachestring(&"SCRIPT_COOP_BLEEDING_OUT"); + precachestring(&"SCRIPT_COOP_REVIVING_PARTNER"); + precachestring(&"SCRIPT_COOP_REVIVING"); + precachestring(&"SCRIPT_COOP_REVIVE"); + precacheshellshock("laststand_getup"); + precacheitem("fnfiveseven"); + common_scripts\utility::flag_set("laststand_on"); + level.revive_hud_base_offset = 75; + if(!issplitscreen()) + { + level.revive_hud_base_offset = 120; + } + + level.revive_bar_offset = 15; + level.revive_bar_getup_offset = 30; + level.laststand_hud_elements = []; + thread laststand_on_load_finished(); +} + +//Function Number: 2 +laststand_on_load_finished() +{ + level waittill("load_finished"); + if(laststand_get_type() == 2) + { + precacheshader("specialty_self_revive"); + } + + thread laststand_global_spawn_funcs(); + if(common_scripts\utility::flag_exist("slamzoom_finished") && !common_scripts\utility::flag("slamzoom_finished")) + { + common_scripts\utility::flag_wait("slamzoom_finished"); + } + + thread laststand_notify_on_player_state_changes("laststand_player_state_changed"); + thread laststand_downed_player_manager(); + thread laststand_coop_hud_manager(); + thread laststand_getup_hud_init(); + thread laststand_on_mission_end(); +} + +//Function Number: 3 +laststand_global_spawn_funcs() +{ + if(laststand_get_type() == 2) + { + maps\_utility::add_global_spawn_function("axis",::ai_laststand_on_death); + } +} + +//Function Number: 4 +player_laststand_proc() +{ + if(!maps\_utility::laststand_enabled()) + { + return; + } + + if(maps\_utility::ent_flag("laststand_proc_running")) + { + return; + } + + if(!isdefined(self.original_maxhealth)) + { + self.original_maxhealth = self.maxhealth; + } + + if(!common_scripts\utility::flag("laststand_on")) + { + return; + } + + level endon("laststand_on"); + thread player_laststand_proc_ended(); + switch(level.gameskill) + { + case 1: + case 0: + self.laststand_info.bleedout_time_default = 120; + level.laststand_stage2_multiplier = 0.5; + level.laststand_stage3_multiplier = 0.25; + break; + + case 2: + self.laststand_info.bleedout_time_default = 90; + level.laststand_stage2_multiplier = 0.66; + level.laststand_stage3_multiplier = 0.33; + break; + + case 3: + self.laststand_info.bleedout_time_default = 60; + level.laststand_stage2_multiplier = 0.5; + level.laststand_stage3_multiplier = 0.25; + break; + } + + maps\_utility::ent_flag_set("laststand_proc_running"); + self enabledeathshield(1); + maps\_utility::ent_flag_clear("laststand_downed"); + maps\_utility::ent_flag_clear("laststand_pause_bleedout_timer"); + self endon("death"); + var_00 = self.unique_id; + for(;;) + { + self waittill("deathshield",var_01,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09,var_0A); + if(isdefined(self.saved_by_armor) && self.saved_by_armor) + { + continue; + } + + if(maps\_utility::ent_flag("laststand_downed")) + { + continue; + } + + if(isdefined(self.laststand_revive_time) && gettime() - self.laststand_revive_time <= 1750) + { + continue; + } + + var_0B = []; + if(maps\_utility::is_coop() && laststand_downing_will_fail()) + { + var_0C = maps\_utility::get_other_player(self); + if(var_0C maps\_utility::ent_flag("laststand_downed")) + { + self.coop_death_reason = []; + self.coop_death_reason["attacker"] = var_03; + self.coop_death_reason["cause"] = var_06; + self.coop_death_reason["weapon_name"] = var_0B; + } + } + + if(!maps\_utility::is_coop()) + { + self.coop_death_reason = []; + self.coop_death_reason["attacker"] = var_03; + self.coop_death_reason["cause"] = var_06; + self.coop_death_reason["weapon_name"] = var_0B; + } + + level.down_player_requests[self.unique_id] = var_7B; + try_crush_player(var_03,var_06); + level notify("request_player_downed",var_7B["player"],self,var_7B["damage"],var_01); + } +} + +//Function Number: 5 +player_laststand_proc_ended() +{ + self endon("death"); + common_scripts\utility::flag_waitopen("laststand_on"); + maps\_utility::ent_flag_clear("laststand_proc_running"); + self enabledeathshield(0); +} + +//Function Number: 6 +laststand_downed_player_manager() +{ + if(maps\_utility::is_coop()) + { + thread laststand_revive_ents_manager(); + } + + level.laststand_recent_player_downed_time = 0; + for(;;) + { + level.down_player_requests = []; + level waittill("request_player_downed"); + waittillframeend; + var_00 = gettime(); + if(var_00 < level.laststand_recent_player_downed_time + level.player_downed_death_buffer_time * 1000) + { + continue; + } + + level.laststand_recent_player_downed_time = var_00; + var_01 = 0; + var_02 = undefined; + level.down_player_requests = maps\_utility::array_randomize(level.down_player_requests); + foreach(var_04 in level.down_player_requests) + { + if(var_04["damage"] >= var_01) + { + var_02 = var_04["player"]; + } + } + + var_02 thread player_laststand_force_down(); + thread maps\_gameskill::resetskill(); + } +} + +//Function Number: 7 +laststand_revive_ents_manager() +{ + if(!maps\_utility::is_coop()) + { + return; + } + + level.default_use_radius = getdvarint("player_useradius"); + level endon("special_op_terminated"); + level.revive_ents = []; + foreach(var_01 in level.players) + { + var_02 = spawn("script_model",var_01.origin + (0,0,28)); + var_02 setmodel("tag_origin"); + var_02 linkto(var_01,"tag_origin",(0,0,28),(0,0,0)); + var_02 sethintstring(&"SCRIPT_COOP_REVIVE"); + level.revive_ents[var_01.unique_id] = var_02; + var_01 thread player_laststand_on_revive(); + } + + for(;;) + { + level waittill("laststand_player_state_changed"); + foreach(var_01 in level.players) + { + var_01 revive_set_use_target_state(maps\_utility::is_player_down(var_01)); + } + + if(maps\_utility::get_players_healthy().size == level.players.size) + { + setsaveddvar("player_useradius",level.default_use_radius); + continue; + } + + setsaveddvar("player_useradius",128); + } +} + +//Function Number: 8 +laststand_notify_on_player_state_changes(param_00) +{ + level endon("special_op_terminated"); + foreach(var_02 in level.players) + { + var_02 endon("death"); + } + + for(;;) + { + foreach(var_02 in level.players) + { + var_02 thread notify_on_ent_flag_change("laststand_downed",param_00); + } + + level waittill(param_00); + } +} + +//Function Number: 9 +notify_on_ent_flag_change(param_00,param_01) +{ + level endon("special_op_terminated"); + level endon(param_01); + self endon("death"); + if(maps\_utility::ent_flag(param_00)) + { + maps\_utility::ent_flag_waitopen(param_00); + } + else + { + maps\_utility::ent_flag_wait(param_00); + } + + level notify(param_01); +} + +//Function Number: 10 +player_laststand_force_down() +{ + if(!isalive(self)) + { + return; + } + + level endon("special_op_terminated"); + self endon("death"); + player_laststand_set_down_attributes(); + if(maps\_utility::is_coop()) + { + thread player_laststand_downed_dialogue(); + thread player_laststand_on_downed_hud_update(); + thread player_laststand_downed_icon(); + } + + maps\_utility::add_wait(::maps\_utility::ent_flag_waitopen,"laststand_downed"); + maps\_utility::add_wait(::maps\_utility::waittill_msg,"coop_bled_out"); + maps\_utility::do_wait_any(); + self notify("end_func_player_laststand_downed_icon"); + if(maps\_utility::ent_flag("laststand_downed")) + { + player_laststand_kill(); + return; + } + + player_laststand_set_original_attributes(); +} + +//Function Number: 11 +player_laststand_on_revive() +{ + self endon("death"); + level endon("special_op_terminated"); + var_00 = player_get_revive_ent(); + var_01 = 0; + for(;;) + { + var_00 waittill("trigger",var_02); + if(maps\_utility::is_player_down(var_02)) + { + continue; + } + + self.laststand_savior = var_02; + if(maps\_utility::is_player_down(self) && var_02 player_laststand_is_reviving(self)) + { + laststand_freeze_players(1,var_02,self); + level.laststand_recent_player_downed_time = 0; + wait 0.1; + if(!maps\_utility::is_player_down(self) || !var_02 player_laststand_is_reviving(self)) + { + var_02 player_laststand_revive_buddy_cleanup(self); + continue; + } + + level.bars = []; + level.bars["p1"] = maps\_hud_util::createclientprogressbar(level.player,level.revive_hud_base_offset + level.revive_bar_offset); + level.bars["p2"] = maps\_hud_util::createclientprogressbar(level.player2,level.revive_hud_base_offset + level.revive_bar_offset); + var_03 = randomfloat(1) > 0.33; + if(var_03) + { + var_02 notify("so_reviving"); + } + + var_01 = 0; + var_04 = 1.5; + while(maps\_utility::is_player_down(self) && !maps\_utility::is_player_down(var_02) && var_02 player_laststand_is_reviving(self)) + { + maps\_utility::ent_flag_set("laststand_pause_bleedout_timer"); + foreach(var_06 in level.bars) + { + var_06 maps\_hud_util::updatebar(var_01 / var_04); + } + + wait 0.05; + var_01 = var_01 + 0.05; + if(maps\_utility::is_player_down(self) && var_01 > var_04) + { + if(!var_03) + { + var_02 notify("so_revived"); + } + + var_02 notify("so_revive_success"); + player_laststand_revive_self(); + break; + } + } + + var_02 player_laststand_revive_buddy_cleanup(self); + } + } +} + +//Function Number: 12 +player_laststand_is_reviving(param_00) +{ + if(!self usebuttonpressed()) + { + return 0; + } + + if(isdefined(param_00.laststand_savior) && param_00.laststand_savior == self) + { + return 1; + } + + return 0; +} + +//Function Number: 13 +player_laststand_revive_self() +{ + self.laststand_revive_time = gettime(); + player_dying_effect_remove(); + maps\_utility::ent_flag_clear("laststand_downed"); + self.coop_death_reason = undefined; + thread maps\_gameskill::resetskill(); + self notify("revived"); +} + +//Function Number: 14 +player_laststand_revive_buddy_cleanup(param_00) +{ + level notify("revive_bars_killed"); + revive_hud_cleanup_bars(); + if(isdefined(param_00) && isalive(param_00)) + { + param_00.laststand_savior = undefined; + param_00 maps\_utility::ent_flag_clear("laststand_pause_bleedout_timer"); + } + + if(isdefined(self) && isalive(self)) + { + laststand_freeze_players(0,self,param_00); + } +} + +//Function Number: 15 +laststand_freeze_players(param_00,param_01,param_02) +{ + param_02 = maps\_utility::get_other_player(self); + if(param_00) + { + param_01 freezecontrols(1); + param_01 disableweapons(); + param_01 disableweaponswitch(); + param_02 freezecontrols(1); + param_02 disableweapons(); + return; + } + + param_01 freezecontrols(0); + param_01 enableweapons(); + param_01 enableweaponswitch(); + param_02 freezecontrols(0); + if(!maps\_utility::is_player_down_and_out(param_02)) + { + param_02 enableweapons(); + } +} + +//Function Number: 16 +player_laststand_downed_dialogue() +{ + self endon("death"); + self endon("revived"); + level endon("special_op_terminated"); + wait 1; + self notify("so_downed"); + thread player_laststand_downed_nag_button(0.05); +} + +//Function Number: 17 +player_laststand_downed_nag_button(param_00) +{ + self endon("death"); + self endon("revived"); + level endon("special_op_terminated"); + if(isdefined(param_00) && param_00 > 0) + { + wait param_00; + } + + self notifyonplayercommand("nag","weapnext"); + for(;;) + { + if(!can_show_nag_prompt()) + { + wait 0.05; + continue; + } + + if(nag_should_draw_hud()) + { + thread nag_prompt_show(); + thread nag_prompt_cancel(); + } + + var_01 = common_scripts\utility::waittill_any_timeout(level.coop_revive_nag_hud_refreshtime,"nag","nag_cancel"); + if(var_01 == "nag") + { + self.lastrevivenagbuttonpresstime = gettime(); + thread player_downed_hud_toggle_blinkstate(); + thread maps\_specialops_battlechatter::play_revive_nag(); + } + + wait 0.05; + } +} + +//Function Number: 18 +nag_should_draw_hud() +{ + var_00 = level.coop_revive_nag_hud_refreshtime * 1000; + if(isdefined(self) && isdefined(self.nag_hud_on)) + { + return 0; + } + else if(!isdefined(self.lastrevivenagbuttonpresstime)) + { + return 1; + } + else if(gettime() - self.lastrevivenagbuttonpresstime < var_00) + { + return 0; + } + + return 1; +} + +//Function Number: 19 +nag_prompt_show() +{ + if(!isdefined(self)) + { + return; + } + + self.nag_hud_on = 1; + var_00 = 0.05; + var_01 = &"SPECIAL_OPS_REVIVE_NAG_HINT"; + var_02 = get_nag_hud(); + var_02.alpha = 0; + var_02 settext(var_01); + var_02 fadeovertime(var_00); + var_02.alpha = 1; + waittill_disable_nag(); + self.nag_hud_on = undefined; + var_02 fadeovertime(var_00); + var_02.alpha = 0; + var_02 common_scripts\utility::delaycall(var_00 + 0.05,::destroy); +} + +//Function Number: 20 +get_nag_hud() +{ + var_00 = newclienthudelem(self); + var_00.x = 0; + var_00.y = 50; + var_00.alignx = "center"; + var_00.aligny = "middle"; + var_00.horzalign = "center"; + var_00.vertalign = "middle"; + var_00.fontscale = 1; + var_00.color = (1,1,1); + var_00.font = "hudsmall"; + var_00.glowcolor = (0.3,0.6,0.3); + var_00.glowalpha = 0; + var_00.foreground = 1; + var_00.hidewheninmenu = 1; + var_00.hidewhendead = 1; + return var_00; +} + +//Function Number: 21 +nag_prompt_cancel() +{ + self endon("nag"); + while(maps\_utility::is_player_down(self) && can_show_nag_prompt()) + { + wait 0.05; + } + + self notify("nag_cancel"); +} + +//Function Number: 22 +can_show_nag_prompt() +{ + if(isdefined(level.hide_nag_prompt) && level.hide_nag_prompt) + { + return 0; + } + + var_00 = maps\_utility::get_other_player(self); + if(var_00 player_laststand_is_reviving(self)) + { + return 0; + } + + if(!maps\_specialops_battlechatter::can_say_current_nag_event_type()) + { + return 0; + } + + return 1; +} + +//Function Number: 23 +laststand_coop_hud_manager() +{ + if(!maps\_utility::is_coop()) + { + return; + } + + level endon("special_op_terminated"); + var_00 = []; + foreach(var_02 in level.players) + { + var_00[var_02.unique_id] = maps\_utility::is_player_down(var_02); + } + + laststand_coop_hud_create(); + for(;;) + { + level waittill("laststand_player_state_changed"); + waittillframeend; + foreach(var_02 in level.players) + { + var_05 = maps\_utility::get_other_player(var_02); + var_06 = var_02 player_laststand_changed_state(var_00); + var_07 = var_05 player_laststand_changed_state(var_00); + if(var_06) + { + if(maps\_utility::is_player_down(var_02)) + { + var_02.revive_text_friend.alpha = 0; + var_02.revive_timer_friend.alpha = 0; + var_02.revive_text_local thread maps\_specialops::so_hud_pulse_stop(); + var_02.revive_timer_local thread maps\_specialops::so_hud_pulse_stop(); + var_02.revive_text_local.alpha = 1; + var_02.revive_timer_local.alpha = 1; + var_02.revive_text_local thread maps\_specialops::so_hud_pulse_create(); + var_02.revive_timer_local thread maps\_specialops::so_hud_pulse_create(); + } + else if(maps\_utility::is_player_down(var_05)) + { + var_02.revive_text_local.alpha = 0; + var_02.revive_timer_local.alpha = 0; + var_02.revive_text_friend thread maps\_specialops::so_hud_pulse_stop(); + var_02.revive_timer_friend thread maps\_specialops::so_hud_pulse_stop(); + var_02.revive_text_friend.alpha = 1; + var_02.revive_timer_friend.alpha = 1; + var_02.revive_text_friend thread maps\_specialops::so_hud_pulse_create(); + var_02.revive_timer_friend thread maps\_specialops::so_hud_pulse_create(); + } + else + { + var_02 player_laststand_hud_hide(); + } + } + + if(var_07) + { + if(!maps\_utility::is_player_down(var_02)) + { + if(maps\_utility::is_player_down(var_05)) + { + var_02.revive_text_local.alpha = 0; + var_02.revive_timer_local.alpha = 0; + var_02.revive_text_friend thread maps\_specialops::so_hud_pulse_stop(); + var_02.revive_timer_friend thread maps\_specialops::so_hud_pulse_stop(); + var_02.revive_text_friend.alpha = 1; + var_02.revive_timer_friend.alpha = 1; + var_02.revive_text_friend thread maps\_specialops::so_hud_pulse_create(); + var_02.revive_timer_friend thread maps\_specialops::so_hud_pulse_create(); + continue; + } + + var_02 player_laststand_hud_hide(); + } + } + } + + foreach(var_02 in level.players) + { + var_00[var_02.unique_id] = maps\_utility::is_player_down(var_02); + } + } +} + +//Function Number: 24 +laststand_coop_hud_create() +{ + foreach(var_01 in level.players) + { + var_01.revive_text_local = var_01 maps\_hud_util::createclientfontstring("hudsmall",1); + var_01.revive_text_local maps\_hud_util::setpoint("CENTER",undefined,0,level.revive_hud_base_offset); + var_01.revive_text_local settext(&"SCRIPT_COOP_BLEEDING_OUT"); + var_01.revive_text_friend = var_01 maps\_hud_util::createclientfontstring("hudsmall",1); + var_01.revive_text_friend maps\_hud_util::setpoint("CENTER",undefined,0,level.revive_hud_base_offset); + var_01.revive_text_friend settext(&"SCRIPT_COOP_BLEEDING_OUT_PARTNER"); + var_01.revive_timer_local = var_01 maps\_hud_util::createclienttimer("hudsmall",1.2); + var_01.revive_timer_local maps\_hud_util::setpoint("CENTER",undefined,0,level.revive_hud_base_offset + level.revive_bar_offset); + var_01.revive_timer_friend = var_01 maps\_hud_util::createclienttimer("hudsmall",1.2); + var_01.revive_timer_friend maps\_hud_util::setpoint("CENTER",undefined,0,level.revive_hud_base_offset + level.revive_bar_offset); + var_01 player_laststand_hud_hide(); + level.laststand_hud_elements[level.laststand_hud_elements.size] = var_01.revive_text_local; + level.laststand_hud_elements[level.laststand_hud_elements.size] = var_01.revive_text_friend; + level.laststand_hud_elements[level.laststand_hud_elements.size] = var_01.revive_timer_local; + level.laststand_hud_elements[level.laststand_hud_elements.size] = var_01.revive_timer_friend; + } +} + +//Function Number: 25 +player_laststand_hud_hide() +{ + self.revive_text_local.alpha = 0; + self.revive_text_friend.alpha = 0; + self.revive_timer_local.alpha = 0; + self.revive_timer_friend.alpha = 0; +} + +//Function Number: 26 +player_laststand_changed_state(param_00) +{ + var_01 = maps\_utility::is_player_down(self); + var_02 = param_00[self.unique_id]; + return var_01 != var_02; +} + +//Function Number: 27 +laststand_getup_hud_init() +{ + if(laststand_get_type() != 2) + { + return; + } + + foreach(var_01 in level.players) + { + var_01.laststand_getup_fast = 0; + } + + laststand_revive_bar_getup_create(); +} + +//Function Number: 28 +laststand_revive_bar_getup_create() +{ + foreach(var_01 in level.players) + { + var_02 = level.revive_hud_base_offset + level.revive_bar_getup_offset; + var_01.revive_bar_getup = maps\_hud_util::createclientprogressbar(var_01,var_02,"white","black",130,12); + var_01 player_laststand_getup_bar_set_fill(0.5); + level.laststand_hud_elements[level.laststand_hud_elements.size] = var_01.revive_bar_getup; + var_01.revive_bar_getup_icon = newclienthudelem(var_01); + var_01.revive_bar_getup_icon.hidden = 0; + var_01.revive_bar_getup_icon.elemtype = "icon"; + var_01.revive_bar_getup_icon.hidewheninmenu = 1; + var_01.revive_bar_getup_icon.archived = 0; + var_01.revive_bar_getup_icon.x = -93; + var_01.revive_bar_getup_icon.y = var_02; + var_01.revive_bar_getup_icon.alignx = "center"; + var_01.revive_bar_getup_icon.aligny = "middle"; + var_01.revive_bar_getup_icon.horzalign = "center"; + var_01.revive_bar_getup_icon.vertalign = "middle"; + var_01.revive_bar_getup_icon.children = []; + var_01.revive_bar_getup_icon.elemtype = "icon"; + var_01.revive_bar_getup_icon setshader("specialty_self_revive",28,28); + level.laststand_hud_elements[level.laststand_hud_elements.size] = var_01.revive_bar_getup_icon; + var_01.revive_bar_getup maps\_hud_util::hidebar(1); + var_01.revive_bar_getup_icon.alpha = 0; + } +} + +//Function Number: 29 +player_laststand_on_downed_hud_update() +{ + self endon("end_func_player_laststand_downed_icon"); + self endon("death"); + self endon("revived"); + level endon("special_op_terminated"); + foreach(var_01 in level.players) + { + if(var_01 == self) + { + var_01.revive_timer_local settimer(self.laststand_info.bleedout_time_default - 1); + continue; + } + + var_01.revive_timer_friend settimer(self.laststand_info.bleedout_time_default - 1); + } + + thread player_laststand_countdown_timer(self.laststand_info.bleedout_time_default); + var_03 = self.laststand_info.bleedout_time_default; + foreach(var_01 in level.players) + { + if(var_01 == self) + { + var_01.revive_text_local.color = self.revive_text_local.color; + var_01.revive_timer_local.color = self.revive_text_local.color; + continue; + } + + var_01.revive_text_friend.color = var_01.revive_text_local.color; + var_01.revive_timer_friend.color = var_01.revive_text_local.color; + } + + waittillframeend; + while(var_03) + { + foreach(var_01 in level.players) + { + if(var_01 == self) + { + var_07 = var_01.revive_text_local; + var_08 = var_01.revive_timer_local; + } + else + { + var_07 = var_01.revive_text_friend; + var_08 = var_01.revive_timer_friend; + } + + var_09 = var_07.color; + var_0A = get_coop_downed_hud_color(self.laststand_info.bleedout_time,self.laststand_info.bleedout_time_default,0,var_01 == self); + var_07.color = var_0A; + var_08.color = var_0A; + if(distance(var_0A,var_09) > 0.001) + { + if(distance(var_0A,var_01.coop_icon_color_dying) <= 0.001) + { + var_07.pulse_bounds = 1; + var_08.pulse_bounds = 1; + } + + var_07 thread maps\_specialops::so_hud_pulse_create(); + var_08 thread maps\_specialops::so_hud_pulse_create(); + } + } + + wait 1; + var_03 = var_03 - 1; + } +} + +//Function Number: 30 +player_laststand_downed_icon() +{ + self endon("end_func_player_laststand_downed_icon"); + self endon("death"); + self endon("revived"); + level endon("special_op_terminated"); + waittillframeend; + var_00 = maps\_utility::get_other_player(self); + var_00 maps\_coop::friendlyhudicon_downed(); + while(self.laststand_info.bleedout_time > 0) + { + maps\_utility::ent_flag_waitopen("laststand_pause_bleedout_timer"); + var_00 maps\_coop::friendlyhudicon_update(get_coop_downed_hud_color(self.laststand_info.bleedout_time,self.laststand_info.bleedout_time_default)); + wait 0.05; + } +} + +//Function Number: 31 +player_laststand_countdown_timer(param_00) +{ + self endon("death"); + self endon("revived"); + level endon("special_op_terminated"); + self.laststand_info.bleedout_time = param_00; + while(self.laststand_info.bleedout_time > 0) + { + if(maps\_utility::ent_flag("laststand_pause_bleedout_timer")) + { + foreach(var_02 in level.players) + { + if(var_02 == self) + { + var_02.revive_timer_local.alpha = 0; + continue; + } + + var_02.revive_timer_friend.alpha = 0; + } + + maps\_utility::ent_flag_waitopen("laststand_pause_bleedout_timer"); + if(self.laststand_info.bleedout_time >= 1) + { + foreach(var_02 in level.players) + { + if(var_02 == self) + { + var_02.revive_timer_local settimer(self.laststand_info.bleedout_time - 1); + continue; + } + + var_02.revive_timer_friend settimer(self.laststand_info.bleedout_time - 1); + } + } + } + else + { + foreach(var_02 in level.players) + { + if(var_02 == self) + { + var_02.revive_timer_local.alpha = 1; + continue; + } + + if(!maps\_utility::is_player_down(var_02)) + { + var_02.revive_timer_friend.alpha = 1; + } + } + } + + wait 0.05; + self.laststand_info.bleedout_time = self.laststand_info.bleedout_time - 0.05; + } + + self.laststand_info.bleedout_time = 0; + maps\_specialops::so_force_deadquote("@DEADQUOTE_SO_BLED_OUT","ui_bled_out"); + thread maps\_specialops::so_dialog_mission_failed_bleedout(); + self notify("coop_bled_out"); +} + +//Function Number: 32 +get_coop_downed_hud_color(param_00,param_01,param_02,param_03) +{ + if(isdefined(param_03) && param_03) + { + var_04 = self; + } + else + { + var_04 = maps\_utility::get_other_player(self); + } + + if(!isdefined(param_02)) + { + param_02 = 1; + } + + if(param_02 && coop_downed_hud_should_blink()) + { + if(self.blinkstate == 1) + { + return var_04.coop_icon_color_blink; + } + } + + if(param_00 < param_01 * level.laststand_stage3_multiplier) + { + return var_04.coop_icon_color_dying; + } + + if(param_00 < param_01 * level.laststand_stage2_multiplier) + { + return var_04.coop_icon_color_damage; + } + + return var_04.coop_icon_color_downed; +} + +//Function Number: 33 +coop_downed_hud_should_blink() +{ + var_00 = maps\_utility::get_other_player(self); + if(var_00 player_laststand_is_reviving(self)) + { + return 0; + } + + if(isdefined(self.lastrevivenagbuttonpresstime)) + { + if(gettime() - self.lastrevivenagbuttonpresstime < level.coop_icon_blinktime * 1000) + { + return 1; + } + } + + return 0; +} + +//Function Number: 34 +laststand_hud_destroy() +{ + if(isdefined(level.laststand_hud_elements)) + { + foreach(var_01 in level.laststand_hud_elements) + { + if(isdefined(var_01)) + { + var_01 notify("destroying"); + var_01 maps\_hud_util::destroyelem(); + } + } + } + + level.laststand_hud_elements = undefined; +} + +//Function Number: 35 +player_laststand_set_down_attributes() +{ + self endon("death"); + self notify("player_downed"); + self.ignorerandombulletdamage = 1; + self enableinvulnerability(); + maps\_utility::ent_flag_set("laststand_downed"); + self.laststand = 1; + self.health = 2; + self.maxhealth = self.original_maxhealth; + self.ignoreme = 1; + self disableusability(); + self disableweaponswitch(); + self disableoffhandweapons(); + self disableweapons(); + if(!isdefined(self.laststand_down_count)) + { + self.laststand_down_count = 1; + } + else + { + self.laststand_down_count++; + } + + if(isdefined(self.placingsentry)) + { + self notify("sentry_placement_canceled"); + } + + thread player_laststand_kill_by_vehicle(); + if(laststand_downing_will_fail()) + { + player_laststand_kill(); + return; + } + + thread player_laststand_set_down_part1(); +} + +//Function Number: 36 +player_laststand_set_original_attributes() +{ + self.ignorerandombulletdamage = 0; + maps\_utility::ent_flag_clear("laststand_downed"); + self.laststand = 0; + self.achieve_downed_kills = undefined; + self.down_part2_proc_ran = undefined; + if(maps\_utility::is_coop()) + { + var_00 = maps\_utility::get_other_player(self); + var_00 maps\_coop::friendlyhudicon_normal(); + } + + self disableweapons(); + remove_pistol_if_extra(); + self.health = self.maxhealth; + self.ignoreme = 0; + self setstance("stand"); + self enableusability(); + self enableoffhandweapons(); + self enableweaponswitch(); + self enableweapons(); + self notify("not_in_last_stand"); + wait 1; + self disableinvulnerability(); +} + +//Function Number: 37 +remove_pistol_if_extra() +{ + if(isdefined(self.forced_pistol)) + { + self takeweapon(self.forced_pistol); + self.forced_pistol = undefined; + } + + if(isdefined(self.preincap_pistol)) + { + self setweaponammoclip(self.preincap_pistol,self.preincap_pistol_clip); + self setweaponammostock(self.preincap_pistol,self.preincap_pistol_stock); + } + + if(player_can_restore_weapon(self.preincap_weapon)) + { + self switchtoweapon(self.preincap_weapon); + } + else + { + var_00 = self getweaponslistprimaries(); + self switchtoweapon(var_00[0]); + } + + self.preincap_weapon = undefined; +} + +//Function Number: 38 +player_laststand_kill_by_vehicle() +{ + self endon("revived"); + self endon("death"); + level endon("special_op_terminated"); + if(common_scripts\utility::flag("special_op_terminated")) + { + return; + } + + if(!isalive(self)) + { + return; + } + + for(;;) + { + var_00 = vehicle_getarray(); + foreach(var_02 in var_00) + { + if(isdefined(var_02.dont_crush_player) && var_02.dont_crush_player) + { + continue; + } + + var_03 = var_02 vehicle_getspeed(); + if(abs(var_03) == 0) + { + continue; + } + + if(self istouching(var_02)) + { + var_02 maps\_specialops::so_crush_player(self,"MOD_CRUSH"); + return; + } + } + + wait 0.05; + } +} + +//Function Number: 39 +player_laststand_set_down_part1() +{ + self endon("revived"); + self endon("death"); + level endon("special_op_terminated"); + if(laststand_get_type() != 2) + { + wait 0.3; + } + + thread player_laststand_force_switch_to_pistol(); + if(laststand_get_type() == 2) + { + if(get_lives_remaining() > 0) + { + if(!isdefined(self.laststand_count)) + { + self.laststand_count = 1; + } + else + { + self.laststand_count++; + } + + if(self.laststand_count <= 9999) + { + thread player_laststand_getup_sequence(); + self waittill("laststand_getup_failed"); + } + + if(!maps\_utility::is_coop() || maps\_utility::is_player_down_and_out(maps\_utility::get_other_player(self))) + { + player_laststand_kill(); + return; + } + } + else + { + waittillframeend; + } + } + else + { + wait 0.25; + self disableinvulnerability(); + thread player_laststand_down_draw_attention(); + self waittill("damage"); + } + + thread player_laststand_set_down_part2(); +} + +//Function Number: 40 +player_laststand_getup_sequence() +{ + self endon("revived"); + self endon("death"); + self endon("laststand_getup_failed"); + level endon("special_op_terminated"); + thread player_laststand_getup_sequence_clean_up(); + thread player_laststand_getup_sequence_catch_kills(); + thread player_laststand_getup_sequence_catch_damage(); + thread player_laststand_getup_sequence_bad_place(); + thread player_laststand_effect(); + thread player_laststand_getup_sequence_ignore(); + var_00 = self.laststand_count - 1 * 0; + var_01 = max(0.5 - var_00,0.2); + player_laststand_getup_bar_set_fill(var_01); + self.revive_bar_getup maps\_hud_util::hidebar(0); + self.revive_bar_getup_icon.alpha = 1; + wait 2; + self disableinvulnerability(); + self.last_damage_time = gettime(); + for(;;) + { + var_02 = 0; + if(isdefined(self.laststand_getup_fast) && self.laststand_getup_fast) + { + var_02 = 1; + } + else if(gettime() - self.last_damage_time > 3000) + { + var_02 = 1; + } + + var_03 = common_scripts\utility::ter_op(var_02,0.01,0.0025); + player_laststand_getup_bar_adjust(var_03); + wait 0.05; + } +} + +//Function Number: 41 +player_laststand_getup_sequence_clean_up() +{ + level endon("special_op_terminated"); + self endon("death"); + var_00 = common_scripts\utility::waittill_any_return("player_down_and_out","revived"); + if(isdefined(var_00) && var_00 == "player_down_and_out") + { + self.ignoreme = 1; + } + + update_lives_remaining(0); + thread player_laststand_getup_sequence_clean_up_delayed(0.5); + self.laststand_getup_fast = 0; + if(isdefined(self.laststand_badplace)) + { + badplace_delete(self.laststand_badplace); + self.laststand_badplace = undefined; + } +} + +//Function Number: 42 +player_laststand_getup_sequence_clean_up_delayed(param_00) +{ + level endon("special_op_terminated"); + self endon("player_downed"); + wait param_00; + self.revive_bar_getup maps\_hud_util::hidebar(1); + self.revive_bar_getup_icon.alpha = 0; +} + +//Function Number: 43 +player_laststand_getup_sequence_ignore() +{ + self endon("revived"); + self endon("death"); + self endon("laststand_getup_failed"); + level endon("special_op_terminated"); + self.ignoreme = 1; + wait 0.25; + self.ignoreme = 0; +} + +//Function Number: 44 +player_laststand_getup_sequence_catch_kills() +{ + self endon("revived"); + self endon("death"); + self endon("laststand_getup_failed"); + level endon("special_op_terminated"); + for(;;) + { + self waittill("revive_kill"); + player_laststand_getup_bar_adjust(1); + } +} + +//Function Number: 45 +player_laststand_getup_sequence_catch_damage() +{ + self endon("revived"); + self endon("death"); + self endon("laststand_getup_failed"); + level endon("special_op_terminated"); + for(;;) + { + common_scripts\utility::waittill_any("damage","deathshield"); + player_laststand_getup_bar_adjust(-0.1); + self.last_damage_time = gettime(); + wait 0.2; + } +} + +//Function Number: 46 +player_laststand_getup_sequence_bad_place() +{ + self endon("revived"); + self endon("death"); + self endon("laststand_getup_failed"); + level endon("special_op_terminated"); + self.laststand_badplace = self.unique_id + "_ls_badplace"; + for(;;) + { + badplace_cylinder(self.laststand_badplace,90,self.origin,120,120,"axis"); + wait 90; + badplace_delete(self.laststand_badplace); + } +} + +//Function Number: 47 +player_laststand_getup_bar_adjust(param_00) +{ + param_00 = clamp(param_00,-1,1); + var_01 = clamp(self.revive_bar_getup.bar.frac + param_00,0,1); + player_laststand_getup_bar_set_fill(var_01); + if(var_01 == 1) + { + player_laststand_revive_self(); + return; + } + + if(var_01 == 0) + { + self notify("laststand_getup_failed"); + } +} + +//Function Number: 48 +player_laststand_getup_bar_set_fill(param_00) +{ + var_01 = (1,0.4,0.4); + var_02 = (1,0,0); + self.revive_bar_getup.bar.color = vectorlerp(var_02,var_01,param_00); + self.revive_bar_getup maps\_hud_util::updatebar(param_00); +} + +//Function Number: 49 +player_laststand_set_down_part2() +{ + self.down_part2_proc_ran = 1; + self notify("player_down_and_out"); + self disableweapons(); + thread player_dying_effect(); + self.ignoreme = 1; + self.ignorerandombulletdamage = 1; + self enableinvulnerability(); +} + +//Function Number: 50 +player_laststand_force_switch_to_pistol() +{ + self.preincap_weapon = self getcurrentweapon(); + var_00 = player_laststand_check_for_pistol(); + self.preincap_pistol = undefined; + self.preincap_pistol_stock = 0; + self.preincap_pistol_clip = 0; + var_01 = undefined; + if(isdefined(var_00)) + { + self.preincap_pistol = var_00; + self.preincap_pistol_stock = self getweaponammostock(var_00); + self.preincap_pistol_clip = self getweaponammoclip(var_00); + var_01 = var_00; + } + else if(isdefined(level.coop_incap_weapon)) + { + var_02 = isdefined(level.coop_incap_weapon) && self hasweapon(level.coop_incap_weapon); + if(!var_02) + { + self.forced_pistol = level.coop_incap_weapon; + self giveweapon(level.coop_incap_weapon); + } + else + { + self.preincap_pistol = level.coop_incap_weapon; + self.preincap_pistol_stock = self getweaponammostock(var_00); + self.preincap_pistol_clip = self getweaponammoclip(var_00); + } + + var_01 = level.coop_incap_weapon; + } + else + { + var_01 = "fnfiveseven"; + self.forced_pistol = var_01; + self giveweapon(var_01); + } + + self setweaponammoclip(var_01,weaponclipsize(var_01)); + self setweaponammostock(var_01,weaponmaxammo(var_01)); + thread player_laststand_on_reload_fill_stock(); + self switchtoweapon(var_01); + self enableweapons(); +} + +//Function Number: 51 +player_laststand_on_reload_fill_stock() +{ + level endon("special_op_terminated"); + self endon("death"); + self endon("player_down_and_out"); + self endon("not_in_last_stand"); + self endon("revived"); + self endon("weapon_change"); + for(;;) + { + self waittill("reload"); + var_00 = self getcurrentweapon(); + self setweaponammostock(var_00,weaponmaxammo(var_00)); + } +} + +//Function Number: 52 +player_laststand_down_draw_attention() +{ + self endon("death"); + self endon("revived"); + self endon("damage"); + notifyoncommand("draw_attention","+attack"); + notifyoncommand("draw_attention","+attack_akimbo_accessible"); + common_scripts\utility::waittill_any_timeout(4,"draw_attention","player_down_and_out"); + if(maps\_utility::is_player_down_and_out(self)) + { + return; + } + + self.ignoreme = 0; + self.ignorerandombulletdamage = 0; +} + +//Function Number: 53 +ai_laststand_on_death() +{ + level endon("special_op_terminated"); + self waittill("death",var_00,var_01,var_02); + var_03 = 0; + if(isdefined(var_00) && isalive(var_00) && isplayer(var_00) && maps\_utility::is_player_down(var_00)) + { + if(isdefined(var_02) && weaponclass(var_02) == "pistol") + { + var_03 = 1; + } + else if(isdefined(var_01) && var_01 == "MOD_MELEE") + { + var_03 = 1; + } + } + + if(var_03) + { + var_00 notify("revive_kill"); + } +} + +//Function Number: 54 +player_dying_effect() +{ + self endon("death"); + self endon("revived"); + if(!maps\_utility::ent_flag_exist("laststand_dying_effect")) + { + maps\_utility::ent_flag_init("laststand_dying_effect"); + } + else if(maps\_utility::ent_flag("laststand_dying_effect")) + { + return; + } + + maps\_utility::ent_flag_set("laststand_dying_effect"); + player_shock_effect("default",60,1); +} + +//Function Number: 55 +player_dying_effect_remove() +{ + if(maps\_utility::ent_flag_exist("laststand_dying_effect")) + { + maps\_utility::ent_flag_clear("laststand_dying_effect"); + } + + self stopshellshock(); +} + +//Function Number: 56 +player_laststand_effect() +{ + self endon("death"); + self endon("revived"); + self endon("player_down_and_out"); + self notify("laststand_effect"); + self endon("laststand_effect"); + player_shock_effect("laststand_getup",60,1); +} + +//Function Number: 57 +player_shock_effect(param_00,param_01,param_02,param_03) +{ + self endon("death"); + level endon("special_op_terminated"); + if(!isdefined(param_00) || !isdefined(param_01)) + { + return; + } + + if(isdefined(param_03)) + { + var_04 = strtok(param_03," "); + foreach(var_06 in var_04) + { + self endon(var_06); + } + } + + for(;;) + { + self shellshock(param_00,param_01); + wait param_01; + if(isdefined(param_02) && !param_02) + { + break; + } + } +} + +//Function Number: 58 +laststand_get_type() +{ + var_00 = (isdefined(level.laststand_type) && level.laststand_type == 0) || level.laststand_type == 1 || level.laststand_type == 2; + if(var_00) + { + return level.laststand_type; + } + + return 0; +} + +//Function Number: 59 +laststand_can_pick_self_up() +{ + return laststand_get_type() == 2 && get_lives_remaining() > 0; +} + +//Function Number: 60 +laststand_downing_will_fail() +{ + if(maps\_utility::is_coop()) + { + var_00 = maps\_utility::get_other_player(self); + var_01 = (maps\_utility::is_player_down(var_00) && !var_00 laststand_can_pick_self_up()) || maps\_utility::is_player_down_and_out(var_00); + if(var_01 && !laststand_can_pick_self_up()) + { + return 1; + } + + return 0; + } + + if(!laststand_can_pick_self_up()) + { + return 1; + } + + return 0; +} + +//Function Number: 61 +get_lives_remaining() +{ + if(laststand_get_type() == 2 && isdefined(self.laststand_info.type_getup_lives)) + { + return max(0,self.laststand_info.type_getup_lives); + } + + return 0; +} + +//Function Number: 62 +update_lives_remaining(param_00) +{ + param_00 = common_scripts\utility::ter_op(isdefined(param_00),param_00,0); + self.laststand_info.type_getup_lives = max(0,common_scripts\utility::ter_op(param_00,self.laststand_info.type_getup_lives + 1,self.laststand_info.type_getup_lives - 1)); + self notify("laststand_lives_updated"); +} + +//Function Number: 63 +player_laststand_kill() +{ + level endon("special_op_terminated"); + thread player_dying_effect_remove(); + self enabledeathshield(0); + self disableinvulnerability(); + self enablehealthshield(0); + self.achieve_downed_kills = undefined; + waittillframeend; + self kill(); +} + +//Function Number: 64 +try_crush_player(param_00,param_01) +{ + if(!isdefined(param_00)) + { + return; + } + + if(isdefined(param_00.dont_crush_player) && param_00.dont_crush_player) + { + return; + } + + if(!isdefined(param_01)) + { + return; + } + + if(param_01 != "MOD_CRUSH") + { + return; + } + + if(isdefined(param_00.vehicletype)) + { + var_02 = param_00 vehicle_getspeed(); + if(abs(var_02) == 0) + { + return; + } + } + + if(common_scripts\utility::flag("special_op_terminated")) + { + return; + } + + param_00 maps\_specialops::so_crush_player(self,param_01); +} + +//Function Number: 65 +player_laststand_check_for_pistol(param_00) +{ + var_01 = self getweaponslistprimaries(); + if(isdefined(param_00)) + { + foreach(var_03 in var_01) + { + if(var_03 == param_00) + { + return var_03; + } + } + } + + var_05 = self getcurrentweapon(); + if(weaponclass(var_05) == "pistol") + { + return var_05; + } + + foreach(var_03 in var_01) + { + if(weaponclass(var_03) == "pistol") + { + return var_03; + } + } + + return undefined; +} + +//Function Number: 66 +laststand_on_mission_end() +{ + level waittill("special_op_terminated"); + revive_destroy_use_targets(); + revive_hud_cleanup_bars(); + laststand_hud_destroy(); +} + +//Function Number: 67 +revive_hud_cleanup_bars() +{ + if(isdefined(level.bars)) + { + foreach(var_01 in level.bars) + { + if(isdefined(var_01)) + { + var_01 notify("destroying"); + var_01 maps\_hud_util::destroyelem(); + } + } + + level.bars = undefined; + } +} + +//Function Number: 68 +waittill_disable_nag() +{ + level endon("special_op_terminated"); + common_scripts\utility::waittill_any("nag","nag_cancel","death","revived"); +} + +//Function Number: 69 +player_can_restore_weapon(param_00) +{ + if(!isdefined(param_00)) + { + return 0; + } + + if(param_00 == "none") + { + return 0; + } + + if(!self hasweapon(param_00)) + { + return 0; + } + + return 1; +} + +//Function Number: 70 +revive_set_use_target_state(param_00) +{ + var_01 = player_get_revive_ent(); + if(param_00) + { + var_01 makeusable(); + } + else + { + var_01 makeunusable(); + } + + return var_01; +} + +//Function Number: 71 +player_get_revive_ent() +{ + return level.revive_ents[self.unique_id]; +} + +//Function Number: 72 +revive_destroy_use_targets() +{ + if(isdefined(level.revive_ents)) + { + foreach(var_01 in level.revive_ents) + { + var_01 delete(); + } + } +} + +//Function Number: 73 +player_downed_hud_toggle_blinkstate() +{ + self notify("player_downed_hud_blinkstate"); + self endon("player_downed_hud_blinkstate"); + self endon("death"); + self endon("revived"); + self.blinkstate = 1; + for(;;) + { + wait level.coop_icon_blinkcrement; + if(self.blinkstate == 1) + { + self.blinkstate = 0; + continue; + } + + self.blinkstate = 1; + } +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_leak.gsc b/MW3/PC/SP/maps/_leak.gsc new file mode 100644 index 0000000..fbc8278 --- /dev/null +++ b/MW3/PC/SP/maps/_leak.gsc @@ -0,0 +1,236 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_leak.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 11 + * Decompile Time: 136 ms + * Timestamp: 10/27/2023 2:20:09 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + var_00 = getentarray("leaking","targetname"); + if(!var_00.size) + { + return; + } + + var_00 thread precachefx(); + var_00 thread methodsinit(); + common_scripts\utility::array_thread(var_00,::leak_setup); +} + +//Function Number: 2 +leak_setup() +{ + switch(self.script_noteworthy) + { + case "barrel_oil": + leak_barrel_setup(); + break; + + case "barrel_acid": + leak_barrel_setup(); + break; + + case "barrel_sludge": + leak_barrel_setup(); + break; + + case "barrel_water": + leak_barrel_setup(); + break; + } + + thread leak_think(); +} + +//Function Number: 3 +leak_barrel_setup() +{ + self.a = self.origin; + self.up = anglestoup(self.angles); + var_00 = anglestoup((0,90,0)); + self.org = self.a + self.up * 22; + self.a = self.a + self.up * 1.5; + self.b = self.a + self.up * 41.4; + self.volume = 25861.65; + self.curvol = self.volume; + var_01 = vectordot(self.up,var_00); + var_02 = self.b; + if(var_01 < 0) + { + var_02 = self.a; + } + + var_01 = abs(1 - abs(var_01)); + self.lowz = physicstrace(self.org,self.org + (0,0,-80))[2]; + self.highz = var_02[2] + var_01 * 14; +} + +//Function Number: 4 +leak_think() +{ + self setcandamage(1); + self endon("drained"); + for(;;) + { + self waittill("damage",var_00,var_01,var_02,var_03,var_04); + if(var_04 == "MOD_MELEE" || var_04 == "MOD_IMPACT") + { + continue; + } + + var_03 = self [[ level._leak_methods[var_04] ]](var_03,var_04); + if(!isdefined(var_03)) + { + continue; + } + + thread leak_drain(var_03); + } +} + +//Function Number: 5 +leak_drain(param_00) +{ + var_01 = pointonsegmentnearesttopoint(self.a,self.b,param_00); + var_02 = undefined; + if(var_01 == self.a) + { + var_02 = self.up * -1; + } + else if(var_01 == self.b) + { + var_02 = self.up; + } + else + { + var_02 = vectorfromlinetopoint(self.a,self.b,param_00); + } + + var_03 = param_00[2] - self.lowz; + if(var_03 < 0.02) + { + var_03 = 0; + } + + var_04 = var_03 / self.highz - self.lowz * self.volume; + if(self.curvol > var_04) + { + while(self.curvol > var_04) + { + playfx(level._effect["leak_interactive_leak"][self.script_noteworthy],param_00,var_02); + self.curvol = self.curvol - 100; + wait 0.1; + } + + playfx(level._effect["leak_interactive_drain"][self.script_noteworthy],param_00,var_02); + } + + if(self.curvol / self.volume <= 0.05) + { + self notify("drained"); + } +} + +//Function Number: 6 +methodsinit() +{ + level._leak_methods = []; + level._leak_methods["MOD_UNKNOWN"] = ::leak_calc_splash; + level._leak_methods["MOD_PISTOL_BULLET"] = ::leak_calc_ballistic; + level._leak_methods["MOD_RIFLE_BULLET"] = ::leak_calc_ballistic; + level._leak_methods["MOD_GRENADE"] = ::leak_calc_splash; + level._leak_methods["MOD_GRENADE_SPLASH"] = ::leak_calc_splash; + level._leak_methods["MOD_PROJECTILE"] = ::leak_calc_splash; + level._leak_methods["MOD_PROJECTILE_SPLASH"] = ::leak_calc_splash; + level._leak_methods["MOD_MELEE"] = ::leak_calc_nofx; + level._leak_methods["MOD_HEAD_SHOT"] = ::leak_calc_nofx; + level._leak_methods["MOD_CRUSH"] = ::leak_calc_nofx; + level._leak_methods["MOD_TELEFRAG"] = ::leak_calc_nofx; + level._leak_methods["MOD_FALLING"] = ::leak_calc_nofx; + level._leak_methods["MOD_SUICIDE"] = ::leak_calc_nofx; + level._leak_methods["MOD_TRIGGER_HURT"] = ::leak_calc_splash; + level._leak_methods["MOD_EXPLOSIVE"] = ::leak_calc_splash; + level._leak_methods["MOD_IMPACT"] = ::leak_calc_nofx; +} + +//Function Number: 7 +leak_calc_ballistic(param_00,param_01) +{ + return param_00; +} + +//Function Number: 8 +leak_calc_splash(param_00,param_01) +{ + var_02 = vectornormalize(vectorfromlinetopoint(self.a,self.b,param_00)); + param_00 = pointonsegmentnearesttopoint(self.a,self.b,param_00); + return param_00 + var_02 * 4; +} + +//Function Number: 9 +leak_calc_nofx(param_00,param_01) +{ + return undefined; +} + +//Function Number: 10 +leak_calc_assert(param_00,param_01) +{ +} + +//Function Number: 11 +precachefx() +{ + for(var_00 = 0;var_00 < self.size;var_00++) + { + if(self[var_00].script_noteworthy != "barrel_oil") + { + continue; + } + + level._effect["leak_interactive_leak"][self[var_00].script_noteworthy] = loadfx("impacts/barrel_leak"); + level._effect["leak_interactive_drain"][self[var_00].script_noteworthy] = loadfx("impacts/barrel_drain"); + break; + } + + for(var_00 = 0;var_00 < self.size;var_00++) + { + if(self[var_00].script_noteworthy != "barrel_acid") + { + continue; + } + + level._effect["leak_interactive_leak"][self[var_00].script_noteworthy] = loadfx("impacts/barrel_leak"); + level._effect["leak_interactive_drain"][self[var_00].script_noteworthy] = loadfx("impacts/barrel_drain"); + break; + } + + for(var_00 = 0;var_00 < self.size;var_00++) + { + if(self[var_00].script_noteworthy != "barrel_water") + { + continue; + } + + level._effect["leak_interactive_leak"][self[var_00].script_noteworthy] = loadfx("impacts/barrel_leak"); + level._effect["leak_interactive_drain"][self[var_00].script_noteworthy] = loadfx("impacts/barrel_drain"); + break; + } + + for(var_00 = 0;var_00 < self.size;var_00++) + { + if(self[var_00].script_noteworthy != "barrel_sludge") + { + continue; + } + + level._effect["leak_interactive_leak"][self[var_00].script_noteworthy] = loadfx("impacts/barrel_leak"); + level._effect["leak_interactive_drain"][self[var_00].script_noteworthy] = loadfx("impacts/barrel_drain"); + break; + } +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_lights.gsc b/MW3/PC/SP/maps/_lights.gsc new file mode 100644 index 0000000..c822756 --- /dev/null +++ b/MW3/PC/SP/maps/_lights.gsc @@ -0,0 +1,871 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_lights.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 22 + * Decompile Time: 310 ms + * Timestamp: 10/27/2023 2:20:23 AM +*******************************************************************/ + +//Function Number: 1 +is_light_entity(param_00) +{ + return param_00.classname == "light_spot" || param_00.classname == "light_omni" || param_00.classname == "light"; +} + +//Function Number: 2 +flickerlight(param_00,param_01,param_02,param_03) +{ + self endon("kill_flicker"); + var_04 = param_00; + var_05 = 0; + maps\_utility::ent_flag_init("stop_flicker"); + for(;;) + { + if(maps\_utility::ent_flag("stop_flicker")) + { + wait 0.05; + continue; + } + + var_06 = var_04; + var_04 = param_00 + param_01 - param_00 * randomfloat(1); + if(param_02 != param_03) + { + var_05 = var_05 + randomfloatrange(param_02,param_03); + } + else + { + var_05 = var_05 + param_02; + } + + if(var_05 == 0) + { + var_05 = var_05 + 1E-07; + } + + var_07 = var_06 - var_04 * 1 / var_05; + while(var_05 > 0 && !maps\_utility::ent_flag("stop_flicker")) + { + self setlightcolor(var_04 + var_07 * var_05); + wait 0.05; + var_05 = var_05 - 0.05; + } + } +} + +//Function Number: 3 +kill_flicker_when_damaged(param_00) +{ + var_01 = getentarray(param_00,"script_noteworthy"); + var_02 = undefined; + var_03 = 1E+08; + foreach(var_05 in var_01) + { + var_06 = distance(self.origin,var_05.origin); + if(var_06 < var_03) + { + var_02 = var_05; + var_03 = var_06; + } + } + + if(isdefined(var_02)) + { + var_02 waittill("damage",var_08,var_09,var_0A,var_0B,var_0C,var_0D,var_0E); + self notify("kill_flicker"); + wait 0.05; + self setlightcolor((0,0,0)); + } +} + +//Function Number: 4 +generic_pulsing() +{ + if(getdvar("r_reflectionProbeGenerate") == "1") + { + self setlightintensity(0); + return; + } + + var_00 = self getlightintensity(); + var_01 = 0.05; + var_02 = var_00; + var_03 = 0.3; + var_04 = 0.6; + var_05 = var_00 - var_01 / var_03 / 0.05; + var_06 = var_00 - var_01 / var_04 / 0.05; + for(;;) + { + var_07 = 0; + while(var_07 < var_04) + { + var_02 = var_02 - var_06; + var_02 = clamp(var_02,0,100); + self setlightintensity(var_02); + var_07 = var_07 + 0.05; + wait 0.05; + } + + wait 1; + var_07 = 0; + while(var_07 < var_03) + { + var_02 = var_02 + var_05; + var_02 = clamp(var_02,0,100); + self setlightintensity(var_02); + var_07 = var_07 + 0.05; + wait 0.05; + } + + wait 0.5; + } +} + +//Function Number: 5 +generic_double_strobe() +{ + if(getdvar("r_reflectionProbeGenerate") == "1") + { + self setlightintensity(0); + return; + } + + var_00 = self getlightintensity(); + var_01 = 0.05; + var_02 = 0; + var_03 = undefined; + var_04 = undefined; + var_05 = 0; + var_06 = []; + if(isdefined(self.script_noteworthy)) + { + var_07 = getentarray(self.script_noteworthy,"targetname"); + for(var_08 = 0;var_08 < var_07.size;var_08++) + { + if(is_light_entity(var_07[var_08])) + { + var_05 = 1; + var_06[var_06.size] = var_07[var_08]; + } + + if(var_07[var_08].classname == "script_model") + { + var_03 = var_07[var_08]; + var_04 = getent(var_03.target,"targetname"); + var_02 = 1; + } + } + } + + for(;;) + { + self setlightintensity(var_01); + if(var_02) + { + var_03 hide(); + var_04 show(); + } + + wait 0.8; + self setlightintensity(var_00); + if(var_02) + { + var_03 show(); + var_04 hide(); + } + + wait 0.1; + self setlightintensity(var_01); + if(var_02) + { + var_03 hide(); + var_04 show(); + } + + wait 0.12; + self setlightintensity(var_00); + if(var_02) + { + var_03 show(); + var_04 hide(); + } + + wait 0.1; + } +} + +//Function Number: 6 +getclosests_flickering_model(param_00) +{ + var_01 = getentarray("light_flicker_model","targetname"); + var_02 = []; + var_03 = maps\_utility::getclosest(param_00,var_01); + if(isdefined(var_03)) + { + var_02[0] = var_03; + } + + return var_02; +} + +//Function Number: 7 +generic_flickering() +{ + if(getdvar("r_reflectionProbeGenerate") == "1") + { + self setlightintensity(0); + return; + } + + self endon("stop_dynamic_light_behavior"); + self endon("death"); + self.linked_models = 0; + self.lit_models = undefined; + self.unlit_models = undefined; + self.linked_lights = 0; + self.linked_light_ents = []; + self.linked_prefab_ents = undefined; + self.linked_things = []; + if(isdefined(self.script_linkto)) + { + self.linked_prefab_ents = common_scripts\utility::get_linked_ents(); + foreach(var_01 in self.linked_prefab_ents) + { + if(isdefined(var_01.script_noteworthy) && var_01.script_noteworthy == "on") + { + if(!isdefined(self.lit_models)) + { + self.lit_models[0] = var_01; + } + else + { + self.lit_models[self.lit_models.size] = var_01; + } + + continue; + } + + if(isdefined(var_01.script_noteworthy) && var_01.script_noteworthy == "off") + { + if(!isdefined(self.unlit_models)) + { + self.unlit_models[0] = var_01; + } + else + { + self.unlit_models[self.unlit_models.size] = var_01; + } + + self.unlit_model = var_01; + continue; + } + + if(is_light_entity(var_01)) + { + self.linked_lights = 1; + self.linked_light_ents[self.linked_light_ents.size] = var_01; + } + } + + self.linked_models = 1; + } + + if(isdefined(self.script_noteworthy)) + { + self.linked_things = getentarray(self.script_noteworthy,"targetname"); + } + + if(!self.linked_things.size && !isdefined(self.linked_prefab_ents)) + { + self.linked_things = getclosests_flickering_model(self.origin); + } + + for(var_03 = 0;var_03 < self.linked_things.size;var_03++) + { + if(is_light_entity(self.linked_things[var_03])) + { + self.linked_lights = 1; + self.linked_light_ents[self.linked_light_ents.size] = self.linked_things[var_03]; + } + + if(self.linked_things[var_03].classname == "script_model") + { + var_04 = self.linked_things[var_03]; + if(!isdefined(self.lit_models)) + { + self.lit_models[0] = var_04; + } + else + { + self.lit_models[self.lit_models.size] = var_04; + } + + if(!isdefined(self.unlit_models)) + { + self.unlit_models[0] = getent(var_04.target,"targetname"); + } + else + { + self.unlit_models[self.unlit_models.size] = getent(var_04.target,"targetname"); + } + + self.linked_models = 1; + } + } + + if(isdefined(self.lit_models)) + { + foreach(var_04 in self.lit_models) + { + if(isdefined(var_04) && isdefined(var_04.script_fxid)) + { + var_04.effect = common_scripts\utility::createoneshoteffect(var_04.script_fxid); + var_06 = (0,0,0); + var_07 = (0,0,0); + if(isdefined(var_04.script_parameters)) + { + var_08 = strtok(var_04.script_parameters,", "); + if(var_08.size < 3) + { + } + else if(var_08.size == 6) + { + var_09 = float(var_08[0]); + var_0A = float(var_08[1]); + var_0B = float(var_08[2]); + var_06 = (var_09,var_0A,var_0B); + var_09 = float(var_08[3]); + var_0A = float(var_08[4]); + var_0B = float(var_08[5]); + var_07 = (var_09,var_0A,var_0B); + } + else + { + var_09 = float(var_0B[0]); + var_0A = float(var_0A[1]); + var_0B = float(var_09[2]); + var_06 = (var_09,var_0A,var_0B); + } + } + + var_04.effect.v["origin"] = var_04.origin + var_06; + var_04.effect.v["angles"] = var_04.angles + var_07; + } + } + } + + thread generic_flicker_msg_watcher(); + thread generic_flicker(); +} + +//Function Number: 8 +generic_flicker_msg_watcher() +{ + maps\_utility::ent_flag_init("flicker_on"); + if(isdefined(self.script_light_startnotify) && self.script_light_startnotify != "nil") + { + for(;;) + { + level waittill(self.script_light_startnotify); + maps\_utility::ent_flag_set("flicker_on"); + if(isdefined(self.script_light_stopnotify) && self.script_light_stopnotify != "nil") + { + level waittill(self.script_light_stopnotify); + maps\_utility::ent_flag_clear("flicker_on"); + } + } + + return; + } + + maps\_utility::ent_flag_set("flicker_on"); +} + +//Function Number: 9 +generic_flicker_pause() +{ + var_00 = self getlightintensity(); + if(!maps\_utility::ent_flag("flicker_on")) + { + if(self.linked_models) + { + if(isdefined(self.lit_models)) + { + foreach(var_02 in self.lit_models) + { + var_02 hide(); + if(isdefined(var_02.effect)) + { + var_02.effect common_scripts\utility::pauseeffect(); + } + } + } + + if(isdefined(self.unlit_models)) + { + foreach(var_05 in self.unlit_models) + { + var_05 show(); + } + } + } + + self setlightintensity(0); + if(self.linked_lights) + { + for(var_07 = 0;var_07 < self.linked_light_ents.size;var_07++) + { + self.linked_light_ents[var_07] setlightintensity(0); + } + } + + maps\_utility::ent_flag_wait("flicker_on"); + self setlightintensity(var_00); + if(self.linked_lights) + { + for(var_07 = 0;var_07 < self.linked_light_ents.size;var_07++) + { + self.linked_light_ents[var_07] setlightintensity(var_00); + } + } + + if(self.linked_models) + { + if(isdefined(self.lit_models)) + { + foreach(var_02 in self.lit_models) + { + var_02 show(); + if(isdefined(var_02.effect)) + { + var_02.effect maps\_utility::restarteffect(); + } + } + } + + if(isdefined(self.unlit_models)) + { + foreach(var_05 in self.unlit_models) + { + var_05 hide(); + } + + return; + } + } + } +} + +//Function Number: 10 +generic_flicker() +{ + self endon("stop_dynamic_light_behavior"); + self endon("death"); + var_00 = 0.2; + var_01 = 1.5; + var_02 = self getlightintensity(); + var_03 = 0; + var_04 = var_02; + var_05 = 0; + while(isdefined(self)) + { + generic_flicker_pause(); + for(var_05 = randomintrange(1,10);var_05;var_05--) + { + generic_flicker_pause(); + wait randomfloatrange(0.05,0.1); + if(var_04 > 0.2) + { + var_04 = randomfloatrange(0,0.3); + if(self.linked_models) + { + foreach(var_07 in self.lit_models) + { + var_07 hide(); + if(isdefined(var_07.effect)) + { + var_07.effect common_scripts\utility::pauseeffect(); + } + } + } + + if(isdefined(self.unlit_models)) + { + foreach(var_0A in self.unlit_models) + { + var_0A show(); + } + } + } + else + { + var_04 = var_02; + if(self.linked_models) + { + if(isdefined(self.lit_models)) + { + foreach(var_07 in self.lit_models) + { + var_07 show(); + if(isdefined(var_07.effect)) + { + var_07.effect maps\_utility::restarteffect(); + } + } + } + + if(isdefined(self.unlit_models)) + { + foreach(var_0A in self.unlit_models) + { + var_0A hide(); + maps\_audio::aud_send_msg("light_flicker_on",var_0A); + } + } + } + } + + self setlightintensity(var_04); + if(self.linked_lights) + { + for(var_10 = 0;var_10 < self.linked_light_ents.size;var_10++) + { + self.linked_light_ents[var_10] setlightintensity(var_04); + } + } + } + + generic_flicker_pause(); + self setlightintensity(var_02); + if(self.linked_lights) + { + for(var_10 = 0;var_10 < self.linked_light_ents.size;var_10++) + { + self.linked_light_ents[var_10] setlightintensity(var_02); + } + } + + if(self.linked_models) + { + if(isdefined(self.lit_models)) + { + foreach(var_07 in self.lit_models) + { + var_07 show(); + if(isdefined(var_07.effect)) + { + var_07.effect maps\_utility::restarteffect(); + } + } + } + + if(isdefined(self.unlit_models)) + { + foreach(var_0A in self.unlit_models) + { + var_0A hide(); + } + } + } + + wait randomfloatrange(var_00,var_01); + } +} + +//Function Number: 11 +generic_spot() +{ + level common_scripts\utility::waitframe(); +} + +//Function Number: 12 +flickerlightintensity(param_00,param_01) +{ + var_02 = self getlightintensity(); + var_03 = 0; + var_04 = var_02; + var_05 = 0; + for(;;) + { + for(var_05 = randomintrange(1,10);var_05;var_05--) + { + wait randomfloatrange(0.05,0.1); + if(var_04 > 0.2) + { + var_04 = randomfloatrange(0,0.3); + } + else + { + var_04 = var_02; + } + + self setlightintensity(var_04); + } + + self setlightintensity(var_02); + wait randomfloatrange(param_00,param_01); + } +} + +//Function Number: 13 +burning_trash_fire() +{ + var_00 = self getlightintensity(); + var_01 = var_00; + for(;;) + { + var_02 = randomfloatrange(var_00 * 0.7,var_00 * 1.2); + var_03 = randomfloatrange(0.3,0.6); + var_03 = var_03 * 20; + for(var_04 = 0;var_04 < var_03;var_04++) + { + var_05 = var_02 * var_04 / var_03 + var_01 * var_03 - var_04 / var_03; + self setlightintensity(var_05); + wait 0.05; + } + + var_01 = var_02; + } +} + +//Function Number: 14 +strobelight(param_00,param_01,param_02,param_03) +{ + var_04 = 360 / param_02; + var_05 = 0; + for(;;) + { + var_06 = sin(var_05 * var_04) * 0.5 + 0.5; + self setlightintensity(param_00 + param_01 - param_00 * var_06); + wait 0.05; + var_05 = var_05 + 0.05; + if(var_05 > param_02) + { + var_05 = var_05 - param_02; + } + + if(isdefined(param_03)) + { + if(common_scripts\utility::flag(param_03)) + { + return; + } + } + } +} + +//Function Number: 15 +changelightcolorto(param_00,param_01,param_02,param_03) +{ + if(!isdefined(param_02)) + { + param_02 = 0; + } + + if(!isdefined(param_03)) + { + param_03 = 0; + } + + thread changelightcolortoworkerthread(param_00,param_01,param_02,param_03); +} + +//Function Number: 16 +changelightcolortoworkerthread(param_00,param_01,param_02,param_03) +{ + var_04 = self getlightcolor(); + var_05 = 1 / param_01 * 2 - param_02 + param_03; + var_06 = 0; + if(var_06 < param_02) + { + var_07 = var_05 / param_02; + while(var_06 < param_02) + { + var_08 = var_07 * var_06 * var_06; + self setlightcolor(vectorlerp(var_04,param_00,var_08)); + wait 0.05; + var_06 = var_06 + 0.05; + } + } + + while(var_06 < param_01 - param_03) + { + var_08 = var_05 * 2 * var_06 - param_02; + self setlightcolor(vectorlerp(var_04,param_00,var_08)); + wait 0.05; + var_06 = var_06 + 0.05; + } + + var_06 = param_01 - var_06; + if(var_06 > 0) + { + var_07 = var_05 / param_03; + while(var_06 > 0) + { + var_08 = 1 - var_07 * var_06 * var_06; + self setlightcolor(vectorlerp(var_04,param_00,var_08)); + wait 0.05; + var_06 = var_06 - 0.05; + } + } + + self setlightcolor(param_00); +} + +//Function Number: 17 +television() +{ + thread tv_changes_intensity(); + thread tv_changes_color(); +} + +//Function Number: 18 +tv_changes_intensity() +{ + self endon("light_off"); + var_00 = self getlightintensity(); + var_01 = var_00; + for(;;) + { + var_02 = randomfloatrange(var_00 * 0.7,var_00 * 1.2); + var_03 = randomfloatrange(0.3,1.2); + var_03 = var_03 * 20; + for(var_04 = 0;var_04 < var_03;var_04++) + { + var_05 = var_02 * var_04 / var_03 + var_01 * var_03 - var_04 / var_03; + self setlightintensity(var_05); + wait 0.05; + } + + var_01 = var_02; + } +} + +//Function Number: 19 +tv_changes_color() +{ + self endon("light_off"); + var_00 = 0.5; + var_01 = 0.5; + var_02 = []; + var_03 = []; + for(var_04 = 0;var_04 < 3;var_04++) + { + var_02[var_04] = 0; + var_03[var_04] = 0; + } + + for(;;) + { + for(var_04 = 0;var_04 < var_02.size;var_04++) + { + var_03[var_04] = var_02[var_04]; + var_02[var_04] = randomfloat(var_00) + var_01; + } + + var_05 = randomfloatrange(0.3,1.2); + var_05 = var_05 * 20; + for(var_04 = 0;var_04 < var_05;var_04++) + { + var_06 = []; + for(var_07 = 0;var_07 < var_02.size;var_07++) + { + var_06[var_07] = var_02[var_07] * var_04 / var_05 + var_03[var_07] * var_05 - var_04 / var_05; + } + + self setlightcolor((var_06[0],var_06[1],var_06[2])); + wait 0.05; + } + } +} + +//Function Number: 20 +sun_shadow_trigger(param_00) +{ + var_01 = 1; + if(isdefined(param_00.script_duration)) + { + var_01 = param_00.script_duration; + } + + for(;;) + { + param_00 waittill("trigger",var_02); + param_00 set_sun_shadow_params(var_01); + } +} + +//Function Number: 21 +set_sun_shadow_params(param_00) +{ + var_01 = getdvarint("sm_sunenable",1); + var_02 = getdvarfloat("sm_sunshadowscale",1); + var_03 = getdvarint("sm_spotlimit",4); + var_04 = getdvarfloat("sm_sunsamplesizenear",0.25); + var_05 = getdvarfloat("sm_qualityspotshadow",1); + if(isdefined(self.var_1664)) + { + var_01 = self.var_1664; + } + + if(isdefined(self.var_1665)) + { + var_02 = self.var_1665; + } + + if(isdefined(self.var_1666)) + { + var_03 = self.var_1666; + } + + if(isdefined(self.var_1667)) + { + var_04 = self.var_1667; + } + + var_04 = min(max(0.016,var_04),32); + if(isdefined(self.var_1668)) + { + var_05 = self.var_1668; + } + + var_06 = getdvarint("sm_sunenable",1); + var_07 = getdvarfloat("sm_sunshadowscale",1); + var_08 = getdvarint("sm_spotlimit",4); + var_09 = getdvarint("sm_qualityspotshadow",1); + setsaveddvar("sm_sunenable",var_01); + setsaveddvar("sm_sunshadowscale",var_02); + setsaveddvar("sm_spotlimit",var_03); + setsaveddvar("sm_qualityspotshadow",var_05); + lerp_sunsamplesizenear_overtime(var_04,param_00); +} + +//Function Number: 22 +lerp_sunsamplesizenear_overtime(param_00,param_01) +{ + level notify("changing_sunsamplesizenear"); + level endon("changing_sunsamplesizenear"); + var_02 = getdvarfloat("sm_sunSampleSizeNear",0.25); + if(param_00 == var_02) + { + return; + } + + var_03 = param_00 - var_02; + var_04 = param_01 / 0.05; + if(var_04 > 0) + { + var_05 = var_03 / var_04; + var_06 = var_02; + for(var_07 = 0;var_07 < var_04;var_07++) + { + var_06 = var_06 + var_05; + setsaveddvar("sm_sunSampleSizeNear",var_06); + wait 0.05; + } + } + + setsaveddvar("sm_sunSampleSizeNear",param_00); +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_load.gsc b/MW3/PC/SP/maps/_load.gsc new file mode 100644 index 0000000..4feb806 --- /dev/null +++ b/MW3/PC/SP/maps/_load.gsc @@ -0,0 +1,5046 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_load.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 171 + * Decompile Time: 3257 ms + * Timestamp: 10/27/2023 2:21:58 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(!isdefined(level.func)) + { + level.func = []; + } + + level.func["setsaveddvar"] = ::setsaveddvar; + level.func["useanimtree"] = ::useanimtree; + level.func["setanim"] = ::setanim; + level.func["setanimknob"] = ::setanimknob; + level.func["clearanim"] = ::clearanim; + level.func["kill"] = ::kill; + set_early_level(); + level.global_callbacks = []; + level.global_callbacks["_autosave_stealthcheck"] = ::global_empty_callback; + level.global_callbacks["_patrol_endon_spotted_flag"] = ::global_empty_callback; + level.global_callbacks["_spawner_stealth_default"] = ::global_empty_callback; + level.global_callbacks["_idle_call_idle_func"] = ::global_empty_callback; + if(!isdefined(level.visionthermaldefault)) + { + level.visionthermaldefault = "cheat_bw"; + } + + visionsetthermal(level.visionthermaldefault); + visionsetpain("near_death"); + level.func["damagefeedback"] = ::maps\_damagefeedback::updatedamagefeedback; + common_scripts\utility::array_thread(getentarray("script_model_pickup_claymore","classname"),::claymore_pickup_think_global); + common_scripts\utility::array_thread(getentarray("ammo_cache","targetname"),::ammo_cache_think_global); + maps\_utility::array_delete(getentarray("trigger_multiple_softlanding","classname")); + if(getdvar("debug") == "") + { + setdvar("debug","0"); + } + + if(getdvar("fallback") == "") + { + setdvar("fallback","0"); + } + + if(getdvar("angles") == "") + { + setdvar("angles","0"); + } + + if(getdvar("noai") == "") + { + setdvar("noai","off"); + } + + if(getdvar("scr_RequiredMapAspectratio") == "") + { + setdvar("scr_RequiredMapAspectratio","1"); + } + + setdvar("ac130_player_num",-1); + maps\_utility::clear_custom_eog_summary(); + setdvar("ui_remotemissile_playernum",0); + setdvar("ui_pmc_won",0); + if(!isdefined(level.notetracks)) + { + anim.notetracks = []; + animscripts/notetracks::func_1E73(); + } + + maps\_utility::add_start("no_game",::start_nogame); + add_no_game_starts(); + level._loadstarted = 1; + level.first_frame = 1; + level.level_specific_dof = 0; + thread remove_level_first_frame(); + level.wait_any_func_array = []; + level.run_func_after_wait_array = []; + level.run_call_after_wait_array = []; + level.run_noself_call_after_wait_array = []; + level.do_wait_endons_array = []; + level.abort_wait_any_func_array = []; + if(!isdefined(level.script)) + { + level.script = tolower(getdvar("mapname")); + } + + maps\_specialops::specialops_remove_unused(); + if(maps\_utility::is_specialop() && issplitscreen() || getdvar("coop") == "1") + { + setdvar("solo_play",""); + } + + if(issubstr(level.script,"so_survival_")) + { + } + else + { + } + + level.xp_enable = 0; + if(maps\_utility::is_specialop()) + { + level.xp_enable = 1; + if(maps\_utility::is_survival()) + { + level.laststand_type = 2; + } + else + { + level.laststand_type = 1; + } + } + else + { + level.laststand_type = 0; + } + + level.dirteffectmenu["center"] = "dirt_effect_center"; + level.dirteffectmenu["left"] = "dirt_effect_left"; + level.dirteffectmenu["right"] = "dirt_effect_right"; + precachemenu(level.dirteffectmenu["center"]); + precachemenu(level.dirteffectmenu["left"]); + precachemenu(level.dirteffectmenu["right"]); + precacheshader("fullscreen_dirt_bottom_b"); + precacheshader("fullscreen_dirt_bottom"); + precacheshader("fullscreen_dirt_left"); + precacheshader("fullscreen_dirt_right"); + precacheshader("fullscreen_bloodsplat_bottom"); + precacheshader("fullscreen_bloodsplat_left"); + precacheshader("fullscreen_bloodsplat_right"); + level.ai_number = 0; + if(!isdefined(level.flag)) + { + common_scripts\utility::init_flags(); + } + else + { + var_00 = getarraykeys(level.flag); + common_scripts\utility::array_levelthread(var_00,::check_flag_for_stat_tracking); + } + + init_level_players(); + if(maps\_utility::is_coop()) + { + maps\_coop::main(); + } + + if(maps\_utility::laststand_enabled()) + { + maps\_laststand::main(); + } + + if(issplitscreen()) + { + setsaveddvar("cg_fovScale","0.75"); + } + else + { + setsaveddvar("cg_fovScale","1"); + } + + level.radiation_totalpercent = 0; + common_scripts\utility::flag_init("missionfailed"); + common_scripts\utility::flag_init("auto_adjust_initialized"); + common_scripts\utility::flag_init("_radiation_poisoning"); + common_scripts\utility::flag_init("gameskill_selected"); + common_scripts\utility::flag_init("battlechatter_on_thread_waiting"); + thread maps\_gameskill::aa_init_stats(); + thread player_death_detection(); + level.default_run_speed = 190; + setsaveddvar("g_speed",level.default_run_speed); + if(maps\_utility::is_specialop()) + { + setsaveddvar("sv_saveOnStartMap",0); + } + else if(maps\_utility::arcademode()) + { + setsaveddvar("sv_saveOnStartMap",0); + thread arcademode_save(); + } + else if(isdefined(level.credits_active)) + { + setsaveddvar("sv_saveOnStartMap",0); + } + else + { + setsaveddvar("sv_saveOnStartMap",1); + } + + common_scripts\utility::create_lock("mg42_drones"); + common_scripts\utility::create_lock("mg42_drones_target_trace"); + level.var_1B45 = []; + foreach(var_03, var_02 in level.struct) + { + if(!isdefined(var_02.targetname)) + { + continue; + } + + if(var_02.targetname == "delete_on_load") + { + level.struct[var_03] = undefined; + } + } + + common_scripts\utility::struct_class_init(); + common_scripts\utility::flag_init("respawn_friendlies"); + common_scripts\utility::flag_init("player_flashed"); + level.arcademode_kill_func = ::maps\_utility::arcademode_kill; + level.connectpathsfunction = ::connectpaths; + level.disconnectpathsfunction = ::disconnectpaths; + level.badplace_cylinder_func = ::badplace_cylinder; + level.badplace_delete_func = ::badplace_delete; + level.isaifunc = ::isai; + level.createclientfontstring_func = ::maps\_hud_util::createclientfontstring; + level.hudsetpoint_func = ::maps\_hud_util::setpoint; + level.makeentitysentient_func = ::makeentitysentient; + level.freeentitysentient_func = ::freeentitysentient; + level.laseron_func = ::laserforceon; + level.laseroff_func = ::laserforceoff; + level.stat_track_kill_func = ::maps\_player_stats::register_kill; + level.stat_track_damage_func = ::maps\_player_stats::register_shot_hit; + level.dopickyautosavechecks = 1; + level.autosave_threat_check_enabled = 1; + level.getnodefunction = ::getnode; + level.getnodearrayfunction = ::getnodearray; + if(!isdefined(level._notetrackfx)) + { + level._notetrackfx = []; + } + + foreach(var_05 in level.players) + { + var_05.maxhealth = level.player.health; + var_05.shellshocked = 0; + var_05.inwater = 0; + var_05 thread watchweaponchange(); + } + + level.last_mission_sound_time = -5000; + level.hero_list = []; + thread precache_script_models(); + for(var_07 = 0;var_07 < level.players.size;var_07++) + { + var_05 = level.players[var_07]; + var_05 thread maps\_utility::flashmonitor(); + var_05 thread maps\_utility::shock_ondeath(); + } + + precachemodel("fx"); + precachemodel("tag_origin"); + precacheshellshock("victoryscreen"); + precacheshellshock("default"); + precacheshellshock("flashbang"); + precacheshellshock("dog_bite"); + precacherumble("damage_heavy"); + precacherumble("damage_light"); + precacherumble("grenade_rumble"); + precacherumble("artillery_rumble"); + precachestring(&"GAME_GET_TO_COVER"); + precachestring(&"GAME_LAST_STAND_GET_BACK_UP"); + precachestring(&"SCRIPT_GRENADE_DEATH"); + precachestring(&"SCRIPT_GRENADE_SUICIDE_LINE1"); + precachestring(&"SCRIPT_GRENADE_SUICIDE_LINE2"); + precachestring(&"SCRIPT_EXPLODING_VEHICLE_DEATH"); + precachestring(&"SCRIPT_EXPLODING_DESTRUCTIBLE_DEATH"); + precachestring(&"SCRIPT_EXPLODING_BARREL_DEATH"); + precacheshader("hud_grenadeicon"); + precacheshader("hud_grenadepointer"); + precacheshader("hud_burningcaricon"); + precacheshader("death_juggernaut"); + precacheshader("death_friendly_fire"); + precacheshader("hud_destructibledeathicon"); + precacheshader("hud_burningbarrelicon"); + precacheshader("waypoint_ammo"); + level._effect["deathfx_bloodpool_generic"] = loadfx("impacts/deathfx_bloodpool_generic"); + animscripts/pain::func_D1A(); + animscripts/melee::func_1006(); + level.createfx_enabled = getdvar("createfx") != ""; + slowmo_system_init(); + maps\_mgturret::main(); + setupexploders(); + maps\_art::main(); + maps\_noder::main(); + common_scripts\_painter::main(); + maps\_gameskill::setskill(); + maps\_anim::init(); + thread common_scripts\_fx::initfx(); + if(level.createfx_enabled) + { + level.stop_load = 1; + maps\_createfx::createfx(); + } + + maps\_global_fx::main(); + maps\_detonategrenades::init(); + thread setup_simple_primary_lights(); + maps\_names::setup_names(); + if(isdefined(level.handle_starts_endons)) + { + thread [[ level.handle_starts_endons ]](); + } + else + { + thread handle_starts(); + } + + if(!isdefined(level.trigger_flags)) + { + common_scripts\utility::init_trigger_flags(); + } + + level.killspawn_groups = []; + init_script_triggers(); + setsaveddvar("ufoHitsTriggers","0"); + do_no_game_start(); + if(getdvar("g_connectpaths") == "2") + { + level waittill("eternity"); + } + + maps\_autosave::main(); + if(!isdefined(level.animsounds)) + { + thread maps\_debug::init_animsounds(); + } + + maps\_anim::init(); + maps\_audio::aud_init(); + if(isdefined(level.audio_stringtable_mapname)) + { + maps\_audio::set_stringtable_mapname(level.audio_stringtable_mapname); + } + + anim.usefacialanims = 0; + if(!isdefined(level.missionfailed)) + { + level.missionfailed = 0; + } + + maps\_loadout::init_loadout(); + common_scripts\_destructible::init(); + thread common_scripts\_elevator::init(); + thread common_scripts\_pipes::main(); + thread maps\_vehicle::init_vehicles(); + setobjectivetextcolors(); + common_scripts\_dynamic_world::init(); + setsaveddvar("ui_campaign",level.campaign); + thread maps\_introscreen::main(); + thread maps\_quotes::main(); + thread maps\_shutter::main(); + thread maps\_endmission::main(); + thread maps\_damagefeedback::init(); + thread maps\_escalator::init(); + maps\_friendlyfire::main(); + common_scripts\utility::array_levelthread(getentarray("badplace","targetname"),::badplace_think); + common_scripts\utility::array_levelthread(getentarray("delete_on_load","targetname"),::maps\_utility::deleteent); + common_scripts\utility::array_thread(getnodearray("traverse","targetname"),::traversethink); + common_scripts\utility::array_thread(getentarray("piano_key","targetname"),::pianothink); + common_scripts\utility::array_thread(getentarray("piano_damage","targetname"),::pianodamagethink); + common_scripts\utility::array_thread(getentarray("water","targetname"),::waterthink); + common_scripts\utility::array_thread(getentarray("kill_all_players","targetname"),::kill_all_players_trigger); + common_scripts\utility::flag_init("allow_ammo_pickups"); + common_scripts\utility::flag_set("allow_ammo_pickups"); + common_scripts\utility::array_thread(getentarray("ammo_pickup_grenade_launcher","targetname"),::ammo_pickup,"grenade_launcher"); + common_scripts\utility::array_thread(getentarray("ammo_pickup_rpg","targetname"),::ammo_pickup,"rpg"); + common_scripts\utility::array_thread(getentarray("ammo_pickup_c4","targetname"),::ammo_pickup,"c4"); + common_scripts\utility::array_thread(getentarray("ammo_pickup_claymore","targetname"),::ammo_pickup,"claymore"); + common_scripts\utility::array_thread(getentarray("ammo_pickup_556","targetname"),::ammo_pickup,"556"); + common_scripts\utility::array_thread(getentarray("ammo_pickup_762","targetname"),::ammo_pickup,"762"); + common_scripts\utility::array_thread(getentarray("ammo_pickup_45","targetname"),::ammo_pickup,"45"); + common_scripts\utility::array_thread(getentarray("ammo_pickup_pistol","targetname"),::ammo_pickup,"pistol"); + thread maps\_interactive_objects::main(); + thread maps\_intelligence::main(); + thread maps\_gameskill::playerhealthregeninit(); + for(var_07 = 0;var_07 < level.players.size;var_07++) + { + var_05 = level.players[var_07]; + var_05 thread maps\_gameskill::playerhealthregen(); + var_05 thread playerdamagerumble(); + } + + thread player_special_death_hint(); + thread massnodeinitfunctions(); + common_scripts\utility::flag_init("spawning_friendlies"); + common_scripts\utility::flag_init("friendly_wave_spawn_enabled"); + common_scripts\utility::flag_clear("spawning_friendlies"); + level.friendly_spawner["rifleguy"] = getentarray("rifle_spawner","script_noteworthy"); + level.friendly_spawner["smgguy"] = getentarray("smg_spawner","script_noteworthy"); + level.spawn_funcs = []; + level.spawn_funcs["allies"] = []; + level.spawn_funcs["axis"] = []; + level.spawn_funcs["team3"] = []; + level.spawn_funcs["neutral"] = []; + thread maps\_spawner::goalvolumes(); + thread maps\_spawner::friendlychains(); + thread maps\_spawner::friendlychain_ondeath(); + common_scripts\utility::array_thread(getentarray("friendly_spawn","targetname"),::maps\_spawner::friendlyspawnwave); + common_scripts\utility::array_thread(getentarray("flood_and_secure","targetname"),::maps\_spawner::flood_and_secure); + common_scripts\utility::array_thread(getentarray("window_poster","targetname"),::window_destroy); + if(!isdefined(level.trigger_hint_string)) + { + level.trigger_hint_string = []; + level.trigger_hint_func = []; + } + + level.shared_portable_turrets = []; + level.spawn_groups = []; + maps\_spawner::main(); + common_scripts\utility::array_thread(getentarray("background_block","targetname"),::background_block); + maps\_hud::init(); + thread load_friendlies(); + thread maps\_animatedmodels::main(); + if(maps\_utility::is_coop()) + { + thread maps\_loadout::coop_gamesetup_menu(); + } + + thread weapon_ammo(); + if(maps\_utility::is_specialop()) + { + maps\_specialops::specialops_init(); + } + + if(level.script == level.missionsettings.levels[0].name && !level.player getlocalplayerprofiledata("hasEverPlayed_SP")) + { + level.player setlocalplayerprofiledata("hasEverPlayed_SP",1); + updategamerprofile(); + } + + level notify("load_finished"); +} + +//Function Number: 2 +get_load_trigger_classes() +{ + var_00 = []; + if(!maps\_utility::is_no_game_start()) + { + } + + return var_7B; +} + +//Function Number: 3 +get_load_trigger_funcs() +{ + var_00 = []; + if(!maps\_utility::is_no_game_start()) + { + } + + if(maps\_utility::is_coop()) + { + } + + return var_7B; +} + +//Function Number: 4 +init_script_triggers() +{ + var_00 = get_load_trigger_classes(); + var_01 = get_load_trigger_funcs(); + foreach(var_05, var_03 in var_00) + { + var_04 = getentarray(var_05,"classname"); + common_scripts\utility::array_levelthread(var_04,var_03); + } + + var_06 = getentarray("trigger_multiple","classname"); + var_07 = getentarray("trigger_radius","classname"); + var_04 = maps\_utility::array_merge(var_06,var_07); + var_08 = getentarray("trigger_disk","classname"); + var_04 = maps\_utility::array_merge(var_04,var_08); + var_09 = getentarray("trigger_once","classname"); + var_04 = maps\_utility::array_merge(var_04,var_09); + if(!maps\_utility::is_no_game_start()) + { + for(var_0A = 0;var_0A < var_04.size;var_0A++) + { + if(var_04[var_0A].spawnflags & 32) + { + thread maps\_spawner::trigger_spawner(var_04[var_0A]); + } + } + } + + for(var_0B = 0;var_0B < 7;var_0B++) + { + switch(var_0B) + { + case 0: + var_0C = "trigger_multiple"; + break; + + case 1: + var_0C = "trigger_once"; + break; + + case 2: + var_0C = "trigger_use"; + break; + + case 3: + var_0C = "trigger_radius"; + break; + + case 4: + var_0C = "trigger_lookat"; + break; + + case 5: + var_0C = "trigger_disk"; + break; + + default: + var_0C = "trigger_damage"; + break; + } + + var_04 = getentarray(var_0C,"code_classname"); + for(var_0A = 0;var_0A < var_04.size;var_0A++) + { + if(isdefined(var_04[var_0A].script_flag_true)) + { + level thread script_flag_true_trigger(var_04[var_0A]); + } + + if(isdefined(var_04[var_0A].script_flag_false)) + { + level thread script_flag_false_trigger(var_04[var_0A]); + } + + if(isdefined(var_04[var_0A].script_autosavename) || isdefined(var_04[var_0A].script_autosave)) + { + level thread maps\_autosave::autosavenamethink(var_04[var_0A]); + } + + if(isdefined(var_04[var_0A].script_fallback)) + { + level thread maps\_spawner::fallback_think(var_04[var_0A]); + } + + if(isdefined(var_04[var_0A].script_mgturretauto)) + { + level thread maps\_mgturret::mgturret_auto(var_04[var_0A]); + } + + if(isdefined(var_04[var_0A].script_killspawner)) + { + level thread maps\_spawner::kill_spawner(var_04[var_0A]); + } + + if(isdefined(var_04[var_0A].script_kill_vehicle_spawner)) + { + level thread maps\_vehicle::kill_vehicle_spawner(var_04[var_0A]); + } + + if(isdefined(var_04[var_0A].script_emptyspawner)) + { + level thread maps\_spawner::empty_spawner(var_04[var_0A]); + } + + if(isdefined(var_04[var_0A].script_prefab_exploder)) + { + var_04[var_0A].script_exploder = var_04[var_0A].script_prefab_exploder; + } + + if(isdefined(var_04[var_0A].script_exploder)) + { + level thread exploder_load(var_04[var_0A]); + } + + if(isdefined(var_04[var_0A].ambient)) + { + var_04[var_0A] thread maps\_audio::trigger_multiple_audio_trigger(1); + } + + if(isdefined(var_04[var_0A].script_audio_zones) || isdefined(var_04[var_0A].script_audio_enter_msg) || isdefined(var_04[var_0A].script_audio_exit_msg) || isdefined(var_04[var_0A].script_audio_progress_msg) || isdefined(var_04[var_0A].script_audio_enter_func) || isdefined(var_04[var_0A].script_audio_exit_func) || isdefined(var_04[var_0A].script_audio_progress_func) || isdefined(var_04[var_0A].script_audio_point_func)) + { + var_04[var_0A] thread maps\_audio::trigger_multiple_audio_trigger(); + } + + if(isdefined(var_04[var_0A].script_triggered_playerseek)) + { + level thread triggered_playerseek(var_04[var_0A]); + } + + if(isdefined(var_04[var_0A].script_bctrigger)) + { + level thread bctrigger(var_04[var_0A]); + } + + if(isdefined(var_04[var_0A].script_trigger_group)) + { + var_04[var_0A] thread trigger_group(); + } + + if(isdefined(var_04[var_0A].script_random_killspawner)) + { + level thread maps\_spawner::random_killspawner(var_04[var_0A]); + } + + if(isdefined(var_04[var_0A].targetname)) + { + var_0D = var_04[var_0A].targetname; + if(isdefined(var_01[var_0D])) + { + level thread [[ var_01[var_0D] ]](var_04[var_0A]); + } + } + } + } +} + +//Function Number: 5 +set_early_level() +{ + level.early_level = []; + level.early_level["intro"] = 1; + level.early_level["sp_ny_harbor"] = 1; + level.early_level["sp_ny_manhattan"] = 1; + level.early_level["warlord"] = 1; + level.early_level["london"] = 1; +} + +//Function Number: 6 +trigger_slide(param_00) +{ + for(;;) + { + param_00 waittill("trigger",var_01); + var_01 thread slidetriggerplayerthink(param_00); + } +} + +//Function Number: 7 +slidetriggerplayerthink(param_00) +{ + if(isdefined(self.vehicle)) + { + return; + } + + if(maps\_utility::issliding()) + { + return; + } + + thread maps\_audio::aud_send_msg("start_player_slide_trigger",self); + if(isdefined(self.player_view)) + { + return; + } + + self endon("death"); + if(soundexists("SCN_cliffhanger_player_hillslide")) + { + self playsound("SCN_cliffhanger_player_hillslide"); + } + + var_01 = undefined; + if(isdefined(param_00.script_accel)) + { + var_01 = param_00.script_accel; + } + + maps\_utility::beginsliding(undefined,var_01); + for(;;) + { + if(!self istouching(param_00)) + { + break; + } + + wait 0.05; + } + + if(isdefined(level.end_slide_delay)) + { + wait level.end_slide_delay; + } + + maps\_utility::endsliding(); + thread maps\_audio::aud_send_msg("end_player_slide_trigger",self); +} + +//Function Number: 8 +setup_simple_primary_lights() +{ + var_00 = getentarray("generic_flickering","targetname"); + var_01 = getentarray("generic_pulsing","targetname"); + var_02 = getentarray("generic_double_strobe","targetname"); + common_scripts\utility::array_thread(var_00,::maps\_lights::generic_flickering); + common_scripts\utility::array_thread(var_01,::maps\_lights::generic_pulsing); + common_scripts\utility::array_thread(var_02,::maps\_lights::generic_double_strobe); +} + +//Function Number: 9 +weapon_ammo() +{ + var_00 = getentarray(); + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + if(isdefined(var_00[var_01].classname) && getsubstr(var_00[var_01].classname,0,7) == "weapon_") + { + var_02 = var_00[var_01]; + var_03 = getsubstr(var_02.classname,7); + if(isdefined(var_02.script_ammo_max)) + { + var_04 = weaponclipsize(var_03); + var_05 = weaponmaxammo(var_03); + var_02 itemweaponsetammo(var_04,var_05,var_04,0); + var_06 = weaponaltweaponname(var_03); + if(var_06 != "none") + { + var_07 = weaponclipsize(var_06); + var_08 = weaponmaxammo(var_06); + var_02 itemweaponsetammo(var_07,var_08,var_07,1); + } + + continue; + } + + var_09 = 0; + var_04 = undefined; + var_0A = undefined; + var_0B = 0; + var_0C = undefined; + var_0D = undefined; + if(isdefined(var_02.script_ammo_clip)) + { + var_04 = var_02.script_ammo_clip; + var_09 = 1; + } + + if(isdefined(var_02.script_ammo_extra)) + { + var_0A = var_02.script_ammo_extra; + var_09 = 1; + } + + if(isdefined(var_02.script_ammo_alt_clip)) + { + var_0C = var_02.script_ammo_alt_clip; + var_0B = 1; + } + + if(isdefined(var_02.script_ammo_alt_extra)) + { + var_0D = var_02.script_ammo_alt_extra; + var_0B = 1; + } + + if(var_09) + { + if(!isdefined(var_04)) + { + } + + if(!isdefined(var_0A)) + { + } + + var_02 itemweaponsetammo(var_04,var_0A); + } + + if(var_0B) + { + if(!isdefined(var_0C)) + { + } + + if(!isdefined(var_0D)) + { + } + + var_02 itemweaponsetammo(var_0C,var_0D,0,1); + } + } + } +} + +//Function Number: 10 +trigger_group() +{ + thread trigger_group_remove(); + level endon("trigger_group_" + self.script_trigger_group); + self waittill("trigger"); + level notify("trigger_group_" + self.script_trigger_group,self); +} + +//Function Number: 11 +trigger_group_remove() +{ + level waittill("trigger_group_" + self.script_trigger_group,var_00); + if(self != var_00) + { + self delete(); + } +} + +//Function Number: 12 +exploder_load(param_00) +{ + level endon("killexplodertridgers" + param_00.script_exploder); + param_00 waittill("trigger"); + if(isdefined(param_00.script_chance) && randomfloat(1) > param_00.script_chance) + { + if(!param_00 maps\_utility::script_delay()) + { + wait 4; + } + + level thread exploder_load(param_00); + return; + } + + if(!param_00 maps\_utility::script_delay() && isdefined(param_00.script_exploder_delay)) + { + wait param_00.script_exploder_delay; + } + + common_scripts\utility::exploder(param_00.script_exploder); + level notify("killexplodertridgers" + param_00.script_exploder); +} + +//Function Number: 13 +shock_onpain() +{ + precacheshellshock("pain"); + precacheshellshock("default"); + level.player endon("death"); + setdvarifuninitialized("blurpain","on"); + for(;;) + { + var_00 = level.player.health; + level.player waittill("damage"); + if(getdvar("blurpain") == "on") + { + if(var_00 - level.player.health < 129) + { + continue; + } + + level.player shellshock("default",5); + } + } +} + +//Function Number: 14 +usedanimations() +{ + setdvar("usedanim",""); + for(;;) + { + if(getdvar("usedanim") == "") + { + wait 2; + continue; + } + + var_00 = getdvar("usedanim"); + setdvar("usedanim",""); + if(!isdefined(level.completedanims[var_00])) + { + continue; + } + + for(var_01 = 0;var_01 < level.completedanims[var_00].size;var_01++) + { + } + } +} + +//Function Number: 15 +badplace_think(param_00) +{ + if(!isdefined(level.badplaces)) + { + level.badplaces = 0; + } + + level.badplaces++; + badplace_cylinder("badplace" + level.badplaces,-1,param_00.origin,param_00.radius,1024); +} + +//Function Number: 16 +setup_individual_exploder(param_00) +{ + var_01 = param_00.script_exploder; + if(!isdefined(level.exploders[var_01])) + { + level.exploders[var_01] = []; + } + + var_02 = param_00.targetname; + if(!isdefined(var_02)) + { + var_02 = ""; + } + + level.exploders[var_01][level.exploders[var_01].size] = param_00; + if(maps\_utility::exploder_model_starts_hidden(param_00)) + { + param_00 hide(); + return; + } + + if(maps\_utility::exploder_model_is_damaged_model(param_00)) + { + param_00 hide(); + param_00 notsolid(); + if(isdefined(param_00.spawnflags) && param_00.spawnflags & 1) + { + if(isdefined(param_00.script_disconnectpaths)) + { + param_00 connectpaths(); + } + } + + return; + } + + if(maps\_utility::exploder_model_is_chunk(param_00)) + { + param_00 hide(); + param_00 notsolid(); + if(isdefined(param_00.spawnflags) && param_00.spawnflags & 1) + { + param_00 connectpaths(); + } + } +} + +//Function Number: 17 +setupexploders() +{ + level.exploders = []; + var_00 = getentarray("script_brushmodel","classname"); + var_01 = getentarray("script_model","classname"); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + var_00[var_00.size] = var_01[var_02]; + } + + foreach(var_04 in var_00) + { + if(isdefined(var_04.script_prefab_exploder)) + { + var_04.script_exploder = var_04.script_prefab_exploder; + } + + if(isdefined(var_04.masked_exploder)) + { + continue; + } + + if(isdefined(var_04.script_exploder)) + { + setup_individual_exploder(var_04); + } + } + + var_06 = []; + var_07 = getentarray("script_brushmodel","classname"); + for(var_02 = 0;var_02 < var_07.size;var_02++) + { + if(isdefined(var_07[var_02].script_prefab_exploder)) + { + var_07[var_02].script_exploder = var_07[var_02].script_prefab_exploder; + } + + if(isdefined(var_07[var_02].script_exploder)) + { + var_06[var_06.size] = var_07[var_02]; + } + } + + var_07 = getentarray("script_model","classname"); + for(var_02 = 0;var_02 < var_07.size;var_02++) + { + if(isdefined(var_07[var_02].script_prefab_exploder)) + { + var_07[var_02].script_exploder = var_07[var_02].script_prefab_exploder; + } + + if(isdefined(var_07[var_02].script_exploder)) + { + var_06[var_06.size] = var_07[var_02]; + } + } + + var_07 = getentarray("item_health","classname"); + for(var_02 = 0;var_02 < var_07.size;var_02++) + { + if(isdefined(var_07[var_02].script_prefab_exploder)) + { + var_07[var_02].script_exploder = var_07[var_02].script_prefab_exploder; + } + + if(isdefined(var_07[var_02].script_exploder)) + { + var_06[var_06.size] = var_07[var_02]; + } + } + + if(isdefined(level.enable_struct_exploders)) + { + var_07 = level.struct; + for(var_02 = 0;var_02 < var_07.size;var_02++) + { + if(!isdefined(var_07[var_02])) + { + continue; + } + + if(isdefined(var_07[var_02].script_prefab_exploder)) + { + var_07[var_02].script_exploder = var_07[var_02].script_prefab_exploder; + } + + if(isdefined(var_07[var_02].script_exploder)) + { + if(!isdefined(var_07[var_02].angles)) + { + var_07[var_02].angles = (0,0,0); + } + + var_06[var_06.size] = var_07[var_02]; + } + } + } + + if(!isdefined(level.createfxent)) + { + level.createfxent = []; + } + + var_08 = []; + thread setup_flag_exploders(); + var_03 = 0; + while(var_03 < var_07.size) + { + var_09 = var_07[var_03]; + var_05 = common_scripts\utility::createexploder(var_09.script_fxid); + var_05.v = []; + var_05.v["origin"] = var_09.origin; + var_05.v["angles"] = var_09.angles; + var_05.v["delay"] = var_09.script_delay; + var_05.v["delay_post"] = var_09.script_delay_post; + var_05.v["firefx"] = var_09.script_firefx; + var_05.v["firefxdelay"] = var_09.script_firefxdelay; + var_05.v["firefxsound"] = var_09.script_firefxsound; + var_05.v["firefxtimeout"] = var_09.script_firefxtimeout; + var_05.v["earthquake"] = var_09.script_earthquake; + var_05.v["rumble"] = var_09.script_rumble; + var_05.v["damage"] = var_09.script_damage; + var_05.v["damage_radius"] = var_09.script_radius; + var_05.v["soundalias"] = var_09.script_soundalias; + var_05.v["repeat"] = var_09.script_repeat; + var_05.v["delay_min"] = var_09.script_delay_min; + var_05.v["delay_max"] = var_09.var_7E6; + var_05.v["target"] = var_09.target; + var_05.v["ender"] = var_09.script_ender; + var_05.v["physics"] = var_09.script_physics; + var_05.v["type"] = "exploder"; + if(!isdefined(var_09.script_fxid)) + { + var_05.v["fxid"] = "No FX"; + } + else + { + var_05.v["fxid"] = var_09.script_fxid; + } + + var_05.v["exploder"] = var_09.script_exploder; + if(isdefined(level.createfxexploders)) + { + var_0A = level.createfxexploders[var_05.v["exploder"]]; + if(!isdefined(var_0A)) + { + var_0A = []; + } + + level.createfxexploders[var_05.v["exploder"]] = var_0A; + } + + if(!isdefined(var_05.v["delay"])) + { + var_05.v["delay"] = 0; + } + + if(isdefined(var_09.target)) + { + var_0B = getentarray(var_05.v["target"],"targetname")[0]; + if(isdefined(var_0B)) + { + var_0C = var_0B.origin; + var_05.v["angles"] = vectortoangles(var_0C - var_05.v["origin"]); + } + else + { + var_0B = common_scripts\utility::get_target_ent(var_05.v["target"]); + if(isdefined(var_0B)) + { + var_0C = var_0B.origin; + var_05.v["angles"] = vectortoangles(var_0C - var_05.v["origin"]); + } + } + } + + if(!isdefined(level.enable_struct_exploders)) + { + if(var_09.code_classname == "script_brushmodel" || isdefined(var_09.model)) + { + var_05.model = var_09; + var_05.model.disconnect_paths = var_09.script_disconnectpaths; + } + } + else + { + var_05.model = var_09; + if(isdefined(var_05.model.script_modelname)) + { + precachemodel(var_05.model.script_modelname); + } + } + + if(isdefined(var_09.targetname) && isdefined(var_7B[var_09.targetname])) + { + var_05.v["exploder_type"] = var_09.targetname; + } + else + { + var_05.v["exploder_type"] = "normal"; + } + + if(isdefined(var_09.masked_exploder)) + { + var_05.v["masked_exploder"] = var_09.model; + var_05.v["masked_exploder_spawnflags"] = var_09.spawnflags; + var_05.v["masked_exploder_script_disconnectpaths"] = var_09.script_disconnectpaths; + var_09 delete(); + } + + var_05 common_scripts\_createfx::post_entity_creation_function(); + var_03++ = var_7B[var_0A.size]; + } +} + +//Function Number: 18 +setup_flag_exploders() +{ + waittillframeend; + waittillframeend; + waittillframeend; + var_00 = []; + foreach(var_02 in level.createfxent) + { + if(var_02.v["type"] != "exploder") + { + continue; + } + + var_03 = var_02.v["flag"]; + if(!isdefined(var_03)) + { + continue; + } + + if(var_03 == "nil") + { + var_02.v["flag"] = undefined; + } + + var_00[var_03] = 1; + } + + foreach(var_07, var_06 in var_00) + { + thread exploder_flag_wait(var_07); + } +} + +//Function Number: 19 +exploder_flag_wait(param_00) +{ + if(!common_scripts\utility::flag_exist(param_00)) + { + common_scripts\utility::flag_init(param_00); + } + + common_scripts\utility::flag_wait(param_00); + foreach(var_02 in level.createfxent) + { + if(var_02.v["type"] != "exploder") + { + continue; + } + + var_03 = var_02.v["flag"]; + if(!isdefined(var_03)) + { + continue; + } + + if(var_03 != param_00) + { + continue; + } + + var_02 common_scripts\utility::activate_individual_exploder(); + } +} + +//Function Number: 20 +nearairushesplayer() +{ + if(isalive(level.enemyseekingplayer)) + { + return; + } + + var_00 = maps\_utility::get_closest_ai(level.player.origin,"bad_guys"); + if(!isdefined(var_00)) + { + return; + } + + if(distance(var_00.origin,level.player.origin) > 400) + { + return; + } + + level.enemyseekingplayer = var_00; + var_00 setgoalentity(level.player); + var_00.goalradius = 512; +} + +//Function Number: 21 +playerdamagerumble() +{ + for(;;) + { + self waittill("damage",var_00); + if(isdefined(self.specialdamage)) + { + continue; + } + + self playrumbleonentity("damage_heavy"); + } +} + +//Function Number: 22 +playerdamageshellshock() +{ + for(;;) + { + level.player waittill("damage",var_00,var_01,var_02,var_03,var_04); + if(var_04 == "MOD_EXPLOSIVE" || var_04 == "MOD_GRENADE" || var_04 == "MOD_GRENADE_SPLASH" || var_04 == "MOD_PROJECTILE" || var_04 == "MOD_PROJECTILE_SPLASH") + { + var_05 = 0; + var_06 = level.player.maxhealth / 100; + var_07 = var_00 * var_06; + if(var_07 >= 90) + { + var_05 = 4; + } + else if(var_07 >= 50) + { + var_05 = 3; + } + else if(var_07 >= 25) + { + var_05 = 2; + } + else if(var_07 > 10) + { + var_05 = 1; + } + + if(var_05) + { + level.player shellshock("default",var_05); + } + } + } +} + +//Function Number: 23 +map_is_early_in_the_game() +{ + if(isdefined(level.early_level[level.script])) + { + return level.early_level[level.script]; + } + + return 0; +} + +//Function Number: 24 +player_throwgrenade_timer() +{ + self endon("death"); + self.lastgrenadetime = 0; + for(;;) + { + while(!self isthrowinggrenade()) + { + wait 0.05; + } + + self.lastgrenadetime = gettime(); + while(self isthrowinggrenade()) + { + wait 0.05; + } + } +} + +//Function Number: 25 +player_special_death_hint() +{ + if(maps\_utility::is_specialop()) + { + return; + } + + if(isalive(level.player)) + { + thread maps\_quotes::setdeadquote(); + } + + level.player thread player_throwgrenade_timer(); + level.player waittill("death",var_00,var_01,var_02); + if(var_01 != "MOD_GRENADE" && var_01 != "MOD_GRENADE_SPLASH" && var_01 != "MOD_SUICIDE" && var_01 != "MOD_EXPLOSIVE") + { + return; + } + + if(level.gameskill >= 2) + { + if(!map_is_early_in_the_game()) + { + return; + } + } + + if(var_01 == "MOD_SUICIDE") + { + if(level.player.lastgrenadetime - gettime() > 3500) + { + return; + } + + level notify("new_quote_string"); + thread grenade_death_text_hudelement(&"SCRIPT_GRENADE_SUICIDE_LINE1",&"SCRIPT_GRENADE_SUICIDE_LINE2"); + return; + } + + if(var_01 == "MOD_EXPLOSIVE") + { + if(level.player destructible_death(var_00)) + { + return; + } + + if(level.player exploding_barrel_death_af_chase(var_00)) + { + return; + } + + if(level.player vehicle_death(var_00)) + { + return; + } + + if(level.player exploding_barrel_death(var_00)) + { + return; + } + } + + if(var_01 == "MOD_GRENADE" || var_01 == "MOD_GRENADE_SPLASH") + { + if(isdefined(var_02) && !isweapondetonationtimed(var_02)) + { + return; + } + + level notify("new_quote_string"); + setdvar("ui_deadquote","@SCRIPT_GRENADE_DEATH"); + thread grenade_death_indicator_hudelement(); + } +} + +//Function Number: 26 +vehicle_death(param_00) +{ + if(!isdefined(param_00)) + { + return 0; + } + + if(param_00.code_classname != "script_vehicle") + { + return 0; + } + + level notify("new_quote_string"); + setdvar("ui_deadquote","@SCRIPT_EXPLODING_VEHICLE_DEATH"); + thread special_death_indicator_hudelement("hud_burningcaricon",96,96); + return 1; +} + +//Function Number: 27 +destructible_death(param_00) +{ + if(!isdefined(param_00)) + { + return 0; + } + + if(!isdefined(param_00.destructible_type)) + { + return 0; + } + + level notify("new_quote_string"); + if(issubstr(param_00.destructible_type,"vehicle")) + { + setdvar("ui_deadquote","@SCRIPT_EXPLODING_VEHICLE_DEATH"); + thread special_death_indicator_hudelement("hud_burningcaricon",96,96); + } + else + { + setdvar("ui_deadquote","@SCRIPT_EXPLODING_DESTRUCTIBLE_DEATH"); + thread special_death_indicator_hudelement("hud_destructibledeathicon",96,96); + } + + return 1; +} + +//Function Number: 28 +exploding_barrel_death_af_chase(param_00) +{ + if(level.script != "af_chase") + { + return 0; + } + + return exploding_barrel_death(param_00); +} + +//Function Number: 29 +exploding_barrel_death(param_00) +{ + if(isdefined(level.lastexplodingbarrel)) + { + if(gettime() != level.lastexplodingbarrel["time"]) + { + return 0; + } + + var_01 = distance(self.origin,level.lastexplodingbarrel["origin"]); + if(var_01 > level.lastexplodingbarrel["radius"]) + { + return 0; + } + + level notify("new_quote_string"); + setdvar("ui_deadquote","@SCRIPT_EXPLODING_BARREL_DEATH"); + thread special_death_indicator_hudelement("hud_burningbarrelicon",64,64); + return 1; + } + + return 0; +} + +//Function Number: 30 +grenade_death_text_hudelement(param_00,param_01) +{ + level.player.failingmission = 1; + setdvar("ui_deadquote",""); + wait 1.5; + var_02 = newhudelem(); + var_02.elemtype = "font"; + var_02.font = "default"; + var_02.fontscale = 1.5; + var_02.x = 0; + var_02.y = -30; + var_02.alignx = "center"; + var_02.aligny = "middle"; + var_02.horzalign = "center"; + var_02.vertalign = "middle"; + var_02 settext(param_00); + var_02.foreground = 1; + var_02.alpha = 0; + var_02 fadeovertime(1); + var_02.alpha = 1; + if(isdefined(param_01)) + { + var_02 = newhudelem(); + var_02.elemtype = "font"; + var_02.font = "default"; + var_02.fontscale = 1.5; + var_02.x = 0; + var_02.y = -25 + level.fontheight * var_02.fontscale; + var_02.alignx = "center"; + var_02.aligny = "middle"; + var_02.horzalign = "center"; + var_02.vertalign = "middle"; + var_02 settext(param_01); + var_02.foreground = 1; + var_02.alpha = 0; + var_02 fadeovertime(1); + var_02.alpha = 1; + } +} + +//Function Number: 31 +grenade_death_indicator_hudelement() +{ + wait 1.5; + var_00 = newhudelem(); + var_00.x = 0; + var_00.y = 68; + var_00 setshader("hud_grenadeicon",50,50); + var_00.alignx = "center"; + var_00.aligny = "middle"; + var_00.horzalign = "center"; + var_00.vertalign = "middle"; + var_00.foreground = 1; + var_00.alpha = 0; + var_00 fadeovertime(1); + var_00.alpha = 1; + var_00 = newhudelem(); + var_00.x = 0; + var_00.y = 25; + var_00 setshader("hud_grenadepointer",50,25); + var_00.alignx = "center"; + var_00.aligny = "middle"; + var_00.horzalign = "center"; + var_00.vertalign = "middle"; + var_00.foreground = 1; + var_00.alpha = 0; + var_00 fadeovertime(1); + var_00.alpha = 1; +} + +//Function Number: 32 +special_death_indicator_hudelement(param_00,param_01,param_02,param_03) +{ + if(!isdefined(param_03)) + { + param_03 = 1.5; + } + + wait param_03; + var_04 = newhudelem(); + var_04.x = 0; + var_04.y = 40; + var_04 setshader(param_00,param_01,param_02); + var_04.alignx = "center"; + var_04.aligny = "middle"; + var_04.horzalign = "center"; + var_04.vertalign = "middle"; + var_04.foreground = 1; + var_04.alpha = 0; + var_04 fadeovertime(1); + var_04.alpha = 1; +} + +//Function Number: 33 +triggered_playerseek(param_00) +{ + var_01 = param_00.script_triggered_playerseek; + param_00 waittill("trigger"); + var_02 = getaiarray(); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + if(!isalive(var_02[var_03])) + { + continue; + } + + if(isdefined(var_02[var_03].script_triggered_playerseek) && var_02[var_03].script_triggered_playerseek == var_01) + { + var_02[var_03].goalradius = 800; + var_02[var_03] setgoalentity(level.player); + level thread maps\_spawner::delayed_player_seek_think(var_02[var_03]); + } + } +} + +//Function Number: 34 +traversethink() +{ + var_00 = getent(self.target,"targetname"); + self.traverse_height = var_00.origin[2]; + var_00 delete(); +} + +//Function Number: 35 +pianodamagethink() +{ + var_00 = self getorigin(); + var_01[0] = "large"; + for(;;) + { + self waittill("small",var_7B[1],"trigger"); + thread common_scripts\utility::play_sound_in_space("bullet_" + common_scripts\utility::random(var_7B) + "_piano",var_01); + } +} + +//Function Number: 36 +pianothink() +{ + var_00 = self getorigin(); + var_01 = "piano_" + self.script_noteworthy; + self sethintstring(&"SCRIPT_PLATFORM_PIANO"); + for(;;) + { + self waittill("trigger"); + thread common_scripts\utility::play_sound_in_space(var_01,var_00); + } +} + +//Function Number: 37 +bctrigger(param_00) +{ + var_01 = undefined; + if(isdefined(param_00.target)) + { + var_02 = getentarray(param_00.target,"targetname"); + if(issubstr(var_02[0].classname,"trigger")) + { + var_01 = var_02[0]; + } + } + + if(isdefined(var_01)) + { + var_01 waittill("trigger",var_03); + } + else + { + var_01 waittill("trigger",var_03); + } + + var_04 = undefined; + if(isdefined(var_01)) + { + if(var_03.team != level.player.team && level.player istouching(param_00)) + { + var_04 = level.player animscripts/battlechatter::func_BF2("custom"); + } + else if(var_03.team == level.player.team) + { + var_05 = "axis"; + if(level.player.team == "axis") + { + var_05 = "allies"; + } + + var_06 = animscripts/battlechatter::func_BF3("custom",var_05); + var_06 = maps\_utility::get_array_of_farthest(level.player.origin,var_06); + foreach(var_08 in var_06) + { + if(var_08 istouching(param_00)) + { + var_04 = var_08; + if(bctrigger_validate_distance(var_08.origin)) + { + break; + } + } + } + } + } + else if(isplayer(var_03)) + { + var_04 = var_03 animscripts/battlechatter::func_BF2("custom"); + } + else + { + var_04 = var_03; + } + + if(!isdefined(var_04)) + { + return; + } + + if(!bctrigger_validate_distance(var_04.origin)) + { + return; + } + + var_0A = var_04 maps\_utility::custom_battlechatter(param_00.script_bctrigger); + if(!var_0A) + { + level maps\_utility::delaythread(0.25,::bctrigger,param_00); + return; + } + + param_00 notify("custom_battlechatter_done"); +} + +//Function Number: 38 +bctrigger_validate_distance(param_00) +{ + if(distance(param_00,level.player getorigin()) <= 512) + { + return 1; + } + + return 0; +} + +//Function Number: 39 +waterthink() +{ + var_00 = getent(self.target,"targetname"); + var_01 = var_00.origin[2]; + var_00 = undefined; + level.depth_allow_prone = 8; + level.depth_allow_crouch = 33; + level.depth_allow_stand = 50; + var_02 = 0; + for(;;) + { + wait 0.05; + if(!level.player.inwater && var_02) + { + var_02 = 0; + level.player allowprone(1); + level.player allowcrouch(1); + level.player allowstand(1); + thread waterthink_rampspeed(level.default_run_speed); + } + + self waittill("trigger"); + level.player.inwater = 1; + var_02 = 1; + while(level.player istouching(self)) + { + level.player.inwater = 1; + var_03 = level.player getorigin(); + var_04 = var_03[2] - var_01; + if(var_04 > 0) + { + break; + } + + var_05 = int(level.default_run_speed - abs(var_04 * 5)); + if(var_05 < 50) + { + var_05 = 50; + } + + thread waterthink_rampspeed(var_05); + if(abs(var_04) > level.depth_allow_crouch) + { + level.player allowcrouch(0); + } + else + { + level.player allowcrouch(1); + } + + if(abs(var_04) > level.depth_allow_prone) + { + level.player allowprone(0); + continue; + } + + level.player allowprone(1); + wait 0.5; + } + + level.player.inwater = 0; + wait 0.05; + } +} + +//Function Number: 40 +waterthink_rampspeed(param_00) +{ + level notify("ramping_water_movement_speed"); + level endon("ramping_water_movement_speed"); + var_01 = 0.5; + var_02 = int(var_01 * 20); + var_03 = getdvarint("g_speed"); + var_04 = 0; + if(param_00 < var_03) + { + var_04 = 1; + } + + var_05 = int(abs(var_03 - param_00)); + var_06 = int(var_05 / var_02); + for(var_07 = 0;var_07 < var_02;var_07++) + { + var_03 = getdvarint("g_speed"); + if(var_04) + { + setsaveddvar("g_speed",var_03 - var_06); + } + else + { + setsaveddvar("g_speed",var_03 + var_06); + } + + wait 0.05; + } + + setsaveddvar("g_speed",param_00); +} + +//Function Number: 41 +massnodeinitfunctions() +{ + var_00 = getallnodes(); + thread maps\_mgturret::auto_mgturretlink(var_00); + thread maps\_mgturret::saw_mgturretlink(var_00); + thread maps\_colors::init_color_grouping(var_00); +} + +//Function Number: 42 +trigger_unlock(param_00) +{ + var_01 = "not_set"; + if(isdefined(param_00.script_noteworthy)) + { + var_01 = param_00.script_noteworthy; + } + + var_02 = getentarray(param_00.target,"targetname"); + param_00 thread trigger_unlock_death(param_00.target); + for(;;) + { + common_scripts\utility::array_thread(var_02,::common_scripts\utility::trigger_off); + param_00 waittill("trigger"); + common_scripts\utility::array_thread(var_02,::common_scripts\utility::trigger_on); + wait_for_an_unlocked_trigger(var_02,var_01); + maps\_utility::array_notify(var_02,"relock"); + } +} + +//Function Number: 43 +trigger_unlock_death(param_00) +{ + self waittill("death"); + var_01 = getentarray(param_00,"targetname"); + common_scripts\utility::array_thread(var_01,::common_scripts\utility::trigger_off); +} + +//Function Number: 44 +wait_for_an_unlocked_trigger(param_00,param_01) +{ + level endon("unlocked_trigger_hit" + param_01); + var_02 = spawnstruct(); + for(var_03 = 0;var_03 < param_00.size;var_03++) + { + param_00[var_03] thread report_trigger(var_02,param_01); + } + + var_02 waittill("trigger"); + level notify("unlocked_trigger_hit" + param_01); +} + +//Function Number: 45 +report_trigger(param_00,param_01) +{ + self endon("relock"); + level endon("unlocked_trigger_hit" + param_01); + self waittill("trigger"); + param_00 notify("trigger"); +} + +//Function Number: 46 +get_trigger_targs() +{ + var_00 = []; + var_01 = undefined; + if(isdefined(self.target)) + { + var_02 = getentarray(self.target,"targetname"); + var_03 = []; + foreach(var_05 in var_02) + { + if(var_05.classname == "script_origin") + { + var_03[var_03.size] = var_05; + } + + if(issubstr(var_05.classname,"trigger")) + { + var_00[var_00.size] = var_05; + } + } + + var_02 = common_scripts\utility::getstructarray(self.target,"targetname"); + foreach(var_05 in var_02) + { + var_03[var_03.size] = var_05; + } + + if(var_03.size == 1) + { + var_09 = var_03[0]; + var_01 = var_09.origin; + if(isdefined(var_09.code_classname)) + { + var_09 delete(); + } + } + } + + var_0A = []; + return var_7B; +} + +//Function Number: 47 +trigger_lookat(param_00) +{ + trigger_lookat_think(param_00,1); +} + +//Function Number: 48 +trigger_looking(param_00) +{ + trigger_lookat_think(param_00,0); +} + +//Function Number: 49 +trigger_visionset_change(param_00) +{ + var_01 = 3; + if(isdefined(param_00.script_delay)) + { + var_01 = param_00.script_delay; + } + + for(;;) + { + param_00 waittill("trigger"); + maps\_utility::set_vision_set(param_00.script_visionset,var_01); + wait var_01; + } +} + +//Function Number: 50 +trigger_lookat_think(param_00,param_01) +{ + var_02 = 0.78; + if(isdefined(param_00.script_dot)) + { + var_02 = param_00.script_dot; + } + + var_03 = param_00 get_trigger_targs(); + var_04 = var_03["triggers"]; + var_05 = var_03["target_origin"]; + var_06 = isdefined(param_00.script_flag) || isdefined(param_00.script_noteworthy); + var_07 = undefined; + if(var_06) + { + var_07 = param_00 maps\_utility::get_trigger_flag(); + if(!isdefined(level.flag[var_07])) + { + common_scripts\utility::flag_init(var_07); + } + } + else if(!var_04.size) + { + } + + if(param_01 && var_06) + { + level endon(var_07); + } + + param_00 endon("death"); + var_08 = 0; + if(isdefined(param_00.script_parameters)) + { + var_08 = !issubstr("no_sight",param_00.script_parameters); + } + + for(;;) + { + if(var_06) + { + common_scripts\utility::flag_clear(var_07); + } + + param_00 waittill("trigger",var_09); + var_0A = []; + while(var_09 istouching(param_00)) + { + if(var_08 && !sighttracepassed(var_09 geteye(),var_05,0,undefined)) + { + if(var_06) + { + common_scripts\utility::flag_clear(var_07); + } + + wait 0.5; + continue; + } + + var_0B = vectornormalize(var_05 - var_09.origin); + var_0C = var_09 getplayerangles(); + var_0D = anglestoforward(var_0C); + var_0E = vectordot(var_0D,var_0B); + if(var_0E >= var_02) + { + common_scripts\utility::array_thread(var_04,::maps\_utility::send_notify,"trigger"); + if(var_06) + { + common_scripts\utility::flag_set(var_07,var_09); + } + + if(param_01) + { + return; + } + + wait 2; + } + else if(var_06) + { + common_scripts\utility::flag_clear(var_07); + } + + if(var_08) + { + wait 0.5; + continue; + } + + wait 0.05; + } + } +} + +//Function Number: 51 +trigger_cansee(param_00) +{ + var_01 = []; + var_02 = undefined; + var_03 = param_00 get_trigger_targs(); + var_01 = var_03["triggers"]; + var_02 = var_03["target_origin"]; + var_04 = isdefined(param_00.script_flag) || isdefined(param_00.script_noteworthy); + var_05 = undefined; + if(var_04) + { + var_05 = param_00 maps\_utility::get_trigger_flag(); + if(!isdefined(level.flag[var_05])) + { + common_scripts\utility::flag_init(var_05); + } + } + else if(!var_01.size) + { + } + + param_00 endon("death"); + var_06 = 12; + var_07 = []; + for(;;) + { + if(var_05) + { + common_scripts\utility::flag_clear(var_06); + } + + var_01 waittill((0,0,0),var_7B[var_07.size],(var_07,0,0),var_7B[var_7B.size],(var_07 * -1,0,0),var_7B[var_7B.size],(0,var_07,0),var_7B[var_7B.size],(0,var_07 * -1,0),var_7B[var_7B.size],(0,0,var_07),var_7B[var_7B.size],"trigger",var_08); + while(level.player istouching(var_01)) + { + if(!var_08 cantraceto(var_03,var_7B)) + { + if(var_05) + { + common_scripts\utility::flag_clear(var_06); + } + + wait 0.1; + continue; + } + + if(var_05) + { + common_scripts\utility::flag_set(var_06); + } + + common_scripts\utility::array_thread(var_02,::maps\_utility::send_notify,"trigger"); + wait 0.5; + } + } +} + +//Function Number: 52 +cantraceto(param_00,param_01) +{ + for(var_02 = 0;var_02 < param_01.size;var_02++) + { + if(sighttracepassed(self geteye(),param_00 + param_01[var_02],1,self)) + { + return 1; + } + } + + return 0; +} + +//Function Number: 53 +indicate_start(param_00) +{ + var_01 = newhudelem(); + var_01.alignx = "left"; + var_01.aligny = "middle"; + var_01.x = 10; + var_01.y = 400; + var_01 settext(param_00); + var_01.alpha = 0; + var_01.fontscale = 3; + wait 1; + var_01 fadeovertime(1); + var_01.alpha = 1; + wait 5; + var_01 fadeovertime(1); + var_01.alpha = 0; + wait 1; + var_01 destroy(); +} + +//Function Number: 54 +handle_starts() +{ + common_scripts\utility::create_dvar("start",""); + if(getdvar("scr_generateClipModels") != "" && getdvar("scr_generateClipModels") != "0") + { + return; + } + + if(!isdefined(level.start_functions)) + { + level.start_functions = []; + } + + var_00 = tolower(getdvar("start")); + var_01 = get_start_dvars(); + if(isdefined(level.start_point)) + { + var_00 = level.start_point; + } + + var_02 = 0; + for(var_03 = 0;var_03 < var_01.size;var_03++) + { + if(var_00 == var_01[var_03]) + { + var_02 = var_03; + level.start_point = var_01[var_03]; + break; + } + } + + if(isdefined(level.default_start_override) && !isdefined(level.start_point)) + { + foreach(var_06, var_05 in var_01) + { + if(level.default_start_override == var_05) + { + var_02 = var_06; + level.start_point = var_05; + break; + } + } + } + + if(!isdefined(level.start_point)) + { + if(isdefined(level.default_start)) + { + level.start_point = "default"; + } + else if(maps\_utility::level_has_start_points()) + { + level.start_point = level.start_functions[0]["name"]; + } + else + { + level.start_point = "default"; + } + } + + waittillframeend; + thread start_menu(); + if(level.start_point == "default") + { + if(isdefined(level.default_start)) + { + level thread [[ level.default_start ]](); + } + } + else + { + var_07 = level.start_arrays[level.start_point]; + thread [[ var_07["start_func"] ]](); + } + + if(maps\_utility::is_default_start()) + { + var_08 = get_string_for_starts(var_01); + setdvar("start",var_08); + } + + waittillframeend; + var_09 = []; + for(var_03 = var_02;var_03 < level.start_functions.size;var_03++) + { + var_07 = level.start_functions[var_03]; + if(!isdefined(var_07["logic_func"])) + { + continue; + } + + if(already_ran_function(var_07["logic_func"],var_09)) + { + continue; + } + + [[ var_07["logic_func"] ]](); + var_09[var_09.size] = var_07["logic_func"]; + } +} + +//Function Number: 55 +already_ran_function(param_00,param_01) +{ + foreach(var_03 in param_01) + { + if(var_03 == param_00) + { + return 1; + } + } + + return 0; +} + +//Function Number: 56 +get_string_for_starts(param_00) +{ + var_01 = " ** No starts have been set up for this map with maps_utility::add_start()."; + if(param_00.size) + { + var_01 = " ** "; + for(var_02 = param_00.size - 1;var_02 >= 0;var_02--) + { + var_01 = var_01 + param_00[var_02] + " "; + } + } + + setdvar("start",var_01); + return var_01; +} + +//Function Number: 57 +create_start(param_00,param_01) +{ + var_02 = 1; + var_03 = (0.9,0.9,0.9); + if(param_01 != -1) + { + var_04 = 5; + if(param_01 != var_04) + { + var_02 = 1 - abs(var_04 - param_01) / var_04; + } + else + { + var_03 = (1,1,0); + } + } + + if(var_02 == 0) + { + var_02 = 0.05; + } + + var_05 = newhudelem(); + var_05.alignx = "left"; + var_05.aligny = "middle"; + var_05.x = 80; + var_05.y = 80 + param_01 * 18; + var_05 settext(param_00); + var_05.alpha = 0; + var_05.foreground = 1; + var_05.color = var_03; + var_05.fontscale = 1.75; + var_05 fadeovertime(0.5); + var_05.alpha = var_02; + return var_05; +} + +//Function Number: 58 +start_menu() +{ +} + +//Function Number: 59 +start_nogame() +{ + common_scripts\utility::array_call(getaiarray(),::delete); + common_scripts\utility::array_call(getspawnerarray(),::delete); +} + +//Function Number: 60 +get_start_dvars() +{ + var_00 = []; + for(var_01 = 0;var_01 < level.start_functions.size;var_01++) + { + var_00[var_00.size] = level.start_functions[var_01]["name"]; + } + + return var_00; +} + +//Function Number: 61 +display_starts() +{ + level.display_starts_pressed = 1; + if(level.start_functions.size <= 0) + { + return; + } + + var_00 = get_start_dvars(); + var_01 = start_list_menu(); + var_02 = create_start("Selected Start:",-1); + var_02.color = (1,1,1); + var_03 = []; + var_04 = 0; + while(var_04 < var_7B.size) + { + var_05 = var_7B[var_04]; + var_06 = "[" + var_7B[var_04] + "]"; + if(var_05 != "cancel" && var_05 != "default") + { + if(isdefined(level.start_arrays[var_05]["start_loc_string"])) + { + var_06 = var_06 + " -> "; + var_06 = var_06 + level.start_arrays[var_05]["start_loc_string"]; + } + } + + var_03[var_03.size] = var_06; + var_04++ = var_7B[var_7B.size]; + } + + var_07 = var_7B.size - 1; + var_08 = 0; + var_09 = 0; + var_0A = 0; + while(var_07 > 0) + { + if(var_7B[var_07] == level.start_point) + { + var_0A = 1; + break; + } + + var_07-- = "cancel"; + } + + if(!var_0A) + { + var_07 = var_7B.size - 1; + } + + start_list_settext(var_01,var_03,var_07); + var_0B = var_07; + for(;;) + { + if(!level.player buttonpressed("F10")) + { + level.display_starts_pressed = 0; + } + + if(var_0B != var_07) + { + start_list_settext(var_01,var_03,var_07); + var_0B = var_07; + } + + if(!var_08) + { + if(level.player buttonpressed("UPARROW") || level.player buttonpressed("DPAD_UP") || level.player buttonpressed("APAD_UP")) + { + var_08 = 1; + var_07-- = var_7B[var_00.size]; + } + } + else if(!level.player buttonpressed("UPARROW") && !level.player buttonpressed("DPAD_UP") && !level.player buttonpressed("APAD_UP")) + { + var_08 = 0; + } + + if(!var_09) + { + if(level.player buttonpressed("DOWNARROW") || level.player buttonpressed("DPAD_DOWN") || level.player buttonpressed("APAD_DOWN")) + { + var_09 = 1; + var_07++ = "default"; + } + } + else if(!level.player buttonpressed("DOWNARROW") && !level.player buttonpressed("DPAD_DOWN") && !level.player buttonpressed("APAD_DOWN")) + { + var_09 = 0; + } + + if(var_07 < 0) + { + var_07 = var_7B.size - 1; + } + + if(var_07 >= var_7B.size) + { + var_07 = 0; + } + + if(level.player buttonpressed("BUTTON_B")) + { + start_display_cleanup(var_01,var_02); + break; + } + + if(level.player buttonpressed("kp_enter") || level.player buttonpressed("BUTTON_A") || level.player buttonpressed("enter")) + { + if(var_7B[var_07] == "cancel") + { + start_display_cleanup(var_01,var_02); + break; + } + + setdvar("start",var_7B[var_07]); + level.player openpopupmenu("start"); + } + + wait 0.05; + } +} + +//Function Number: 62 +start_list_menu() +{ + var_00 = []; + for(var_01 = 0;var_01 < 11;var_01++) + { + var_02 = create_start("",var_01); + var_00[var_00.size] = var_02; + } + + return var_00; +} + +//Function Number: 63 +start_list_settext(param_00,param_01,param_02) +{ + for(var_03 = 0;var_03 < param_00.size;var_03++) + { + var_04 = var_03 + param_02 - 5; + if(isdefined(param_01[var_04])) + { + var_05 = param_01[var_04]; + } + else + { + var_05 = ""; + } + + param_00[var_03] settext(var_05); + } +} + +//Function Number: 64 +start_display_cleanup(param_00,param_01) +{ + param_01 destroy(); + for(var_02 = 0;var_02 < param_00.size;var_02++) + { + param_00[var_02] destroy(); + } +} + +//Function Number: 65 +devhelp_hudelements(param_00,param_01) +{ + for(var_02 = 0;var_02 < param_00.size;var_02++) + { + for(var_03 = 0;var_03 < 5;var_03++) + { + param_00[var_02][var_03].alpha = param_01; + } + } +} + +//Function Number: 66 +devhelp() +{ +} + +//Function Number: 67 +flag_set_player_trigger(param_00) +{ + if(maps\_utility::is_coop()) + { + thread flag_set_coop_trigger(param_00); + return; + } + + var_01 = param_00 maps\_utility::get_trigger_flag(); + if(!isdefined(level.flag[var_01])) + { + common_scripts\utility::flag_init(var_01); + } + + for(;;) + { + param_00 waittill("trigger",var_02); + if(!isplayer(var_02)) + { + continue; + } + + param_00 maps\_utility::script_delay(); + common_scripts\utility::flag_set(var_01); + } +} + +//Function Number: 68 +trigger_nobloodpool(param_00) +{ + for(;;) + { + param_00 waittill("trigger",var_01); + if(!isalive(var_01)) + { + continue; + } + + var_01.skipbloodpool = 1; + var_01 thread set_wait_then_clear_skipbloodpool(); + } +} + +//Function Number: 69 +set_wait_then_clear_skipbloodpool() +{ + self notify("notify_wait_then_clear_skipBloodPool"); + self endon("notify_wait_then_clear_skipBloodPool"); + self endon("death"); + wait 2; + self.skipbloodpool = undefined; +} + +//Function Number: 70 +sun_on(param_00) +{ + for(;;) + { + param_00 waittill("trigger",var_01); + if(getdvarint("sm_sunenable") == 1) + { + continue; + } + + setsaveddvar("sm_sunenable",1); + } +} + +//Function Number: 71 +sun_off(param_00) +{ + for(;;) + { + param_00 waittill("trigger",var_01); + if(getdvarint("sm_sunenable") == 0) + { + continue; + } + + setsaveddvar("sm_sunenable",0); + } +} + +//Function Number: 72 +flag_set_trigger(param_00) +{ + var_01 = param_00 maps\_utility::get_trigger_flag(); + if(!isdefined(level.flag[var_01])) + { + common_scripts\utility::flag_init(var_01); + } + + for(;;) + { + param_00 waittill("trigger",var_02); + param_00 maps\_utility::script_delay(); + common_scripts\utility::flag_set(var_01,var_02); + } +} + +//Function Number: 73 +flag_set_trigger_specialops(param_00) +{ + var_01 = param_00 maps\_utility::get_trigger_flag(); + if(!isdefined(level.flag[var_01])) + { + common_scripts\utility::flag_init(var_01); + } + + param_00.player_touched_arr = level.players; + param_00 thread flag_set_trigger_specialops_clear(var_01); + for(;;) + { + param_00 waittill("trigger",var_02); + param_00.player_touched_arr = common_scripts\utility::array_remove(param_00.player_touched_arr,var_02); + if(param_00.player_touched_arr.size) + { + continue; + } + + param_00 maps\_utility::script_delay(); + common_scripts\utility::flag_set(var_01,var_02); + } +} + +//Function Number: 74 +flag_set_trigger_specialops_clear(param_00) +{ + for(;;) + { + level waittill(param_00); + if(common_scripts\utility::flag(param_00)) + { + self.player_touched_arr = []; + continue; + } + + self.player_touched_arr = level.players; + } +} + +//Function Number: 75 +trigger_damage_player_flag_set(param_00) +{ + var_01 = param_00 maps\_utility::get_trigger_flag(); + if(!isdefined(level.flag[var_01])) + { + common_scripts\utility::flag_init(var_01); + } + + for(;;) + { + param_00 waittill("trigger",var_02); + if(!isalive(var_02)) + { + continue; + } + + if(!isplayer(var_02)) + { + continue; + } + + param_00 maps\_utility::script_delay(); + common_scripts\utility::flag_set(var_01,var_02); + } +} + +//Function Number: 76 +flag_set_coop_trigger(param_00) +{ + var_01 = param_00 maps\_utility::get_trigger_flag(); + if(!isdefined(level.flag[var_01])) + { + common_scripts\utility::flag_init(var_01); + } + + var_02 = []; + for(;;) + { + param_00 waittill("trigger",var_03); + if(!isplayer(var_03)) + { + continue; + } + + var_04 = []; + var_03 = maps\_utility::array_merge(var_03,var_7B); + if(var_03.size == level.players.size) + { + break; + } + } + + var_01 maps\_utility::script_delay(); + common_scripts\utility::flag_set(var_02); +} + +//Function Number: 77 +flag_unset_trigger(param_00) +{ + var_01 = param_00 maps\_utility::get_trigger_flag(); + if(!isdefined(level.flag[var_01])) + { + common_scripts\utility::flag_init(var_01); + } + + for(;;) + { + param_00 waittill("trigger"); + param_00 maps\_utility::script_delay(); + common_scripts\utility::flag_clear(var_01); + } +} + +//Function Number: 78 +eq_trigger(param_00) +{ + level.set_eq_func[1] = ::set_eq_on; + level.set_eq_func[0] = ::set_eq_off; + var_01 = getent(param_00.target,"targetname"); + for(;;) + { + param_00 waittill("trigger"); + var_02 = getaiarray("allies"); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + var_02[var_03] [[ level.set_eq_func[var_02[var_03] istouching(var_01)] ]](); + } + + while(level.player istouching(param_00)) + { + wait 0.05; + } + + var_02 = getaiarray("allies"); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + var_02[var_03] [[ level.set_eq_func[0] ]](); + } + } +} + +//Function Number: 79 +player_ignores_triggers() +{ + self endon("death"); + self.ignoretriggers = 1; + wait 1; + self.ignoretriggers = 0; +} + +//Function Number: 80 +get_trigger_eq_nums(param_00) +{ + var_01 = []; + for(var_02 = 0;var_02 < level.eq_trigger_table[var_01].size;var_02++ = var_7B[0]) + { + var_7B[var_7B.size] = level.eq_trigger_table[var_01][var_02]; + } + + return var_7B; +} + +//Function Number: 81 +player_touched_eq_trigger(param_00,param_01) +{ + self endon("death"); + var_02 = get_trigger_eq_nums(param_00); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + self.eq_table[var_02[var_03]] = 1; + self.eq_touching[var_02[var_03]] = 1; + } + + thread player_ignores_triggers(); + var_04 = getaiarray(); + for(var_05 = 0;var_05 < var_04.size;var_05++) + { + var_06 = var_04[var_05]; + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + if(var_06.eq_table[var_02[var_03]]) + { + var_06 eqoff(); + break; + } + } + } + + while(self istouching(param_01)) + { + wait 0.05; + } + + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + self.eq_table[var_02[var_03]] = 0; + self.eq_touching[var_02[var_03]] = undefined; + } + + var_04 = getaiarray(); + for(var_05 = 0;var_05 < var_04.size;var_05++) + { + var_06 = var_04[var_05]; + var_07 = 0; + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + if(var_06.eq_table[var_02[var_03]]) + { + var_07 = 1; + } + } + + if(!var_07) + { + continue; + } + + var_08 = getarraykeys(self.eq_touching); + var_09 = 0; + for(var_0A = 0;var_0A < var_08.size;var_0A++) + { + if(!var_06.eq_table[var_08[var_0A]]) + { + continue; + } + + var_09 = 1; + break; + } + + if(!var_09) + { + var_06 eqon(); + } + } +} + +//Function Number: 82 +ai_touched_eq_trigger(param_00,param_01) +{ + self endon("death"); + var_02 = get_trigger_eq_nums(param_00); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + self.eq_table[var_02[var_03]] = 1; + self.eq_touching[var_02[var_03]] = 1; + } + + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + if(level.player.eq_table[var_02[var_03]]) + { + self eqoff(); + break; + } + } + + self.ignoretriggers = 1; + wait 1; + self.ignoretriggers = 0; + while(self istouching(param_01)) + { + wait 0.5; + } + + var_02 = get_trigger_eq_nums(param_00); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + self.eq_table[var_02[var_03]] = 0; + self.eq_touching[var_02[var_03]] = undefined; + } + + var_04 = getarraykeys(self.eq_touching); + for(var_05 = 0;var_05 < var_04.size;var_05++) + { + if(level.player.eq_table[var_04[var_05]]) + { + return; + } + } + + self eqon(); +} + +//Function Number: 83 +ai_eq() +{ + level.set_eq_func[0] = ::set_eq_on; + level.set_eq_func[1] = ::set_eq_off; + var_00 = 0; + for(;;) + { + while(!level.ai_array.size) + { + wait 0.05; + } + + waittillframeend; + waittillframeend; + var_01 = getarraykeys(level.ai_array); + var_00++; + if(var_00 >= var_01.size) + { + var_00 = 0; + } + + var_02 = level.ai_array[var_01[var_00]]; + var_02 [[ level.set_eq_func[sighttracepassed(level.player geteye(),var_02 geteye(),0,undefined)] ]](); + wait 0.05; + } +} + +//Function Number: 84 +set_eq_on() +{ + self eqon(); +} + +//Function Number: 85 +set_eq_off() +{ + self eqoff(); +} + +//Function Number: 86 +add_tokens_to_trigger_flags(param_00) +{ + for(var_01 = 0;var_01 < param_00.size;var_01++) + { + var_02 = param_00[var_01]; + if(!isdefined(level.trigger_flags[var_02])) + { + level.trigger_flags[var_02] = []; + } + + level.trigger_flags[var_02][level.trigger_flags[var_02].size] = self; + } +} + +//Function Number: 87 +script_flag_false_trigger(param_00) +{ + var_01 = common_scripts\utility::create_flags_and_return_tokens(param_00.script_flag_false); + param_00 add_tokens_to_trigger_flags(var_01); + param_00 common_scripts\utility::update_trigger_based_on_flags(); +} + +//Function Number: 88 +script_flag_true_trigger(param_00) +{ + var_01 = common_scripts\utility::create_flags_and_return_tokens(param_00.script_flag_true); + param_00 add_tokens_to_trigger_flags(var_01); + param_00 common_scripts\utility::update_trigger_based_on_flags(); +} + +//Function Number: 89 +wait_for_flag(param_00) +{ + for(var_01 = 0;var_01 < param_00.size;var_01++) + { + level endon(param_00[var_01]); + } + + level waittill("foreverrr"); +} + +//Function Number: 90 +trigger_multiple_physics(param_00) +{ + var_01 = []; + var_02 = common_scripts\utility::getstructarray(param_00.target,"targetname"); + var_03 = getentarray(param_00.target,"targetname"); + foreach(var_05 in var_03) + { + var_06 = spawnstruct(); + var_06.origin = var_05.origin; + var_06.script_parameters = var_05.script_parameters; + var_06.script_damage = var_05.script_damage; + var_06.radius = var_05.radius; + var_02[var_02.size] = var_06; + var_05 delete(); + } + + param_00.org = var_02[0].origin; + param_00 waittill("trigger"); + param_00 maps\_utility::script_delay(); + foreach(var_06 in var_02) + { + var_09 = var_06.radius; + var_0A = var_06.script_parameters; + var_0B = var_06.script_damage; + if(!isdefined(var_09)) + { + var_09 = 350; + } + + if(!isdefined(var_0A)) + { + var_0A = 0.25; + } + + setdvar("tempdvar",var_0A); + var_0A = getdvarfloat("tempdvar"); + if(isdefined(var_0B)) + { + radiusdamage(var_06.origin,var_09,var_0B,var_0B * 0.5); + } + + physicsexplosionsphere(var_06.origin,var_09,var_09 * 0.5,var_0A); + } +} + +//Function Number: 91 +trigger_multiple_friendly_stop_respawn(param_00) +{ + for(;;) + { + param_00 waittill("trigger"); + common_scripts\utility::flag_clear("respawn_friendlies"); + } +} + +//Function Number: 92 +trigger_multiple_friendly_respawn(param_00) +{ + param_00 endon("death"); + var_01 = getent(param_00.target,"targetname"); + var_02 = undefined; + if(isdefined(var_01)) + { + var_02 = var_01.origin; + var_01 delete(); + } + else + { + var_01 = common_scripts\utility::getstruct(param_00.target,"targetname"); + var_02 = var_01.origin; + } + + for(;;) + { + param_00 waittill("trigger"); + level.respawn_spawner_org = var_02; + common_scripts\utility::flag_set("respawn_friendlies"); + wait 0.5; + } +} + +//Function Number: 93 +friendly_respawn_clear(param_00) +{ + for(;;) + { + param_00 waittill("trigger"); + common_scripts\utility::flag_clear("respawn_friendlies"); + wait 0.5; + } +} + +//Function Number: 94 +trigger_multiple_do_radius_damage(param_00) +{ + param_00 waittill("trigger"); + param_00 do_radius_damage_from_target(); +} + +//Function Number: 95 +do_radius_damage_from_target() +{ + var_00 = 80; + if(isdefined(self.radius)) + { + var_00 = self.radius; + } + + var_01 = maps\_utility::get_all_target_ents(); + foreach(var_03 in var_01) + { + radiusdamage(var_03.origin,var_00,5000,5000); + } + + self delete(); +} + +//Function Number: 96 +trigger_damage_do_radius_damage(param_00) +{ + for(;;) + { + param_00 waittill("damage",var_01,var_02,var_03,var_04,var_05,var_06,var_07); + if(!isalive(var_02)) + { + continue; + } + + if(distance(var_02.origin,param_00.origin) > 940) + { + continue; + } + + break; + } + + param_00 do_radius_damage_from_target(); +} + +//Function Number: 97 +radio_trigger(param_00) +{ + param_00 waittill("trigger"); + maps\_utility::radio_dialogue(param_00.script_noteworthy); +} + +//Function Number: 98 +background_block() +{ + self.origin = self.origin - self.script_bg_offset; +} + +//Function Number: 99 +trigger_ignore(param_00) +{ + thread trigger_runs_function_on_touch(param_00,::maps\_utility::set_ignoreme,::maps\_utility::get_ignoreme); +} + +//Function Number: 100 +trigger_pacifist(param_00) +{ + thread trigger_runs_function_on_touch(param_00,::maps\_utility::set_pacifist,::maps\_utility::get_pacifist); +} + +//Function Number: 101 +trigger_runs_function_on_touch(param_00,param_01,param_02) +{ + for(;;) + { + param_00 waittill("trigger",var_03); + if(!isalive(var_03)) + { + continue; + } + + if(var_03 [[ param_02 ]]()) + { + continue; + } + + var_03 thread touched_trigger_runs_func(param_00,param_01); + } +} + +//Function Number: 102 +touched_trigger_runs_func(param_00,param_01) +{ + self endon("death"); + self.ignoreme = 1; + [[ param_01 ]](1); + self.ignoretriggers = 1; + wait 1; + self.ignoretriggers = 0; + while(self istouching(param_00)) + { + wait 1; + } + + [[ param_01 ]](0); +} + +//Function Number: 103 +trigger_turns_off(param_00) +{ + param_00 waittill("trigger"); + param_00 common_scripts\utility::trigger_off(); + if(!isdefined(param_00.script_linkto)) + { + return; + } + + var_01 = strtok(param_00.script_linkto," "); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + common_scripts\utility::array_thread(getentarray(var_01[var_02],"script_linkname"),::common_scripts\utility::trigger_off); + } +} + +//Function Number: 104 +set_player_viewhand_model(param_00) +{ + level.player_viewhand_model = param_00; + precachemodel(level.player_viewhand_model); +} + +//Function Number: 105 +trigger_hint(param_00) +{ + if(!isdefined(level.displayed_hints)) + { + level.displayed_hints = []; + } + + waittillframeend; + var_01 = param_00.script_hint; + param_00 waittill("trigger",var_02); + if(isdefined(level.displayed_hints[var_01])) + { + return; + } + + level.displayed_hints[var_01] = 1; + var_02 maps\_utility::display_hint(var_01); +} + +//Function Number: 106 +stun_test() +{ + if(getdvar("stuntime") == "") + { + setdvar("stuntime","1"); + } + + level.player.allowads = 1; + for(;;) + { + self waittill("damage"); + if(getdvarint("stuntime") == 0) + { + continue; + } + + thread stun_player(self playerads()); + } +} + +//Function Number: 107 +stun_player(param_00) +{ + self notify("stun_player"); + self endon("stun_player"); + if(param_00 > 0.3) + { + if(level.player.allowads == 1) + { + level.player playsound("player_hit_while_ads"); + } + + level.player.allowads = 0; + level.player allowads(0); + } + + level.player setspreadoverride(20); + wait getdvarint("stuntime"); + level.player allowads(1); + level.player.allowads = 1; + level.player resetspreadoverride(); +} + +//Function Number: 108 +throw_grenade_at_player_trigger(param_00) +{ + param_00 endon("death"); + param_00 waittill("trigger"); + maps\_utility::throwgrenadeatplayerasap(); +} + +//Function Number: 109 +flag_on_cleared(param_00) +{ + var_01 = param_00 maps\_utility::get_trigger_flag(); + if(!isdefined(level.flag[var_01])) + { + common_scripts\utility::flag_init(var_01); + } + + for(;;) + { + param_00 waittill("trigger"); + wait 1; + if(param_00 found_toucher()) + { + continue; + } + + break; + } + + common_scripts\utility::flag_set(var_01); +} + +//Function Number: 110 +found_toucher() +{ + var_00 = getaiarray("bad_guys"); + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + var_02 = var_00[var_01]; + if(!isalive(var_02)) + { + continue; + } + + if(var_02 istouching(self)) + { + return 1; + } + + wait 0.1; + } + + var_00 = getaiarray("bad_guys"); + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + var_02 = var_00[var_01]; + if(var_02 istouching(self)) + { + return 1; + } + } + + return 0; +} + +//Function Number: 111 +trigger_delete_on_touch(param_00) +{ + for(;;) + { + param_00 waittill("trigger",var_01); + if(isdefined(var_01)) + { + var_01 delete(); + } + } +} + +//Function Number: 112 +flag_set_touching(param_00) +{ + var_01 = param_00 maps\_utility::get_trigger_flag(); + if(!isdefined(level.flag[var_01])) + { + common_scripts\utility::flag_init(var_01); + } + + for(;;) + { + param_00 waittill("trigger",var_02); + param_00 maps\_utility::script_delay(); + if(isalive(var_02) && var_02 istouching(param_00) && isdefined(param_00)) + { + common_scripts\utility::flag_set(var_01); + } + + while(isalive(var_02) && var_02 istouching(param_00) && isdefined(param_00)) + { + wait 0.25; + } + + common_scripts\utility::flag_clear(var_01); + } +} + +//Function Number: 113 +setobjectivetextcolors() +{ + var_00 = "1.0 1.0 1.0"; + var_01 = "0.9 0.9 0.9"; + var_02 = "0.85 0.85 0.85"; + if(level.script == "armada") + { + setsaveddvar("con_typewriterColorBase",var_01); + return; + } + + setsaveddvar("con_typewriterColorBase",var_00); +} + +//Function Number: 114 +ammo_pickup(param_00) +{ + var_01 = []; + if(param_00 == "grenade_launcher") + { + } + else if(var_01 == "rpg") + { + } + else if(var_01 == "c4") + { + } + else if(var_01 == "claymore") + { + } + else if(var_01 == "556") + { + } + else if(var_01 == "762") + { + } + else if(var_01 == "45") + { + } + else if(var_01 == "pistol") + { + } + + var_02 = spawn("trigger_radius",self.origin,0,25,32); + for(;;) + { + common_scripts\utility::flag_wait("allow_ammo_pickups"); + var_02 waittill("alt_m4_grenadier",var_7B[var_01.size],"alt_m4m203_acog",var_7B[var_7B.size],"alt_m4m203_acog_payback",var_7B[var_7B.size],"alt_m4m203_eotech",var_7B[var_7B.size],"alt_m4m203_motion_tracker",var_7B[var_7B.size],"alt_m4m203_reflex",var_7B[var_7B.size],"alt_m4m203_reflex_arctic",var_7B[var_7B.size],"alt_m4m203_silencer",var_7B[var_7B.size],"alt_m4m203_silencer_reflex",var_7B[var_7B.size],"alt_m16_grenadier",var_7B[var_7B.size],"alt_ak47_grenadier",var_7B[var_7B.size],"alt_ak47_desert_grenadier",var_7B[var_7B.size],"alt_ak47_digital_grenadier",var_7B[var_7B.size],"alt_ak47_fall_grenadier",var_7B[var_7B.size],"alt_ak47_woodland_grenadier",var_7B[var_7B.size],"rpg",var_7B[var_7B.size],"rpg_player",var_7B[var_7B.size],"rpg_straight",var_7B[var_7B.size],"c4",var_7B[var_7B.size],"claymore",var_7B[var_7B.size],"m4_grenadier",var_7B[var_7B.size],"m4_grunt",var_7B[var_7B.size],"m4_sd_cloth",var_7B[var_7B.size],"m4_shotgun",var_7B[var_7B.size],"m4_silencer",var_7B[var_7B.size],"m4_silencer_acog",var_7B[var_7B.size],"m4m203_acog",var_7B[var_7B.size],"m4m203_acog_payback",var_7B[var_7B.size],"m4m203_eotech",var_7B[var_7B.size],"m4m203_motion_tracker",var_7B[var_7B.size],"m4m203_reflex",var_7B[var_7B.size],"m4m203_reflex_arctic",var_7B[var_7B.size],"m4m203_silencer",var_7B[var_7B.size],"m4m203_silencer_reflex",var_7B[var_7B.size],"m4m203_silencer",var_7B[var_7B.size],"ak47",var_7B[var_7B.size],"ak47_acog",var_7B[var_7B.size],"ak47_eotech",var_7B[var_7B.size],"ak47_grenadier",var_7B[var_7B.size],"ak47_reflex",var_7B[var_7B.size],"ak47_shotgun",var_7B[var_7B.size],"ak47_silencer",var_7B[var_7B.size],"ak47_thermal",var_7B[var_7B.size],"ak47_desert",var_7B[var_7B.size],"ak47_desert_acog",var_7B[var_7B.size],"ak47_desert_eotech",var_7B[var_7B.size],"ak47_desert_grenadier",var_7B[var_7B.size],"ak47_desert_reflex",var_7B[var_7B.size],"ak47_digital",var_7B[var_7B.size],"ak47_digital_acog",var_7B[var_7B.size],"ak47_digital_eotech",var_7B[var_7B.size],"ak47_digital_grenadier",var_7B[var_7B.size],"ak47_digital_reflex",var_7B[var_7B.size],"ak47_fall",var_7B[var_7B.size],"ak47_fall_acog",var_7B[var_7B.size],"ak47_fall_eotech",var_7B[var_7B.size],"ak47_fall_grenadier",var_7B[var_7B.size],"ak47_fall_reflex",var_7B[var_7B.size],"ak47_woodland",var_7B[var_7B.size],"ak47_woodland_acog",var_7B[var_7B.size],"ak47_woodland_eotech",var_7B[var_7B.size],"ak47_woodland_grenadier",var_7B[var_7B.size],"ak47_woodland_reflex",var_7B[var_7B.size],"ump45",var_7B[var_7B.size],"ump45_acog",var_7B[var_7B.size],"ump45_eotech",var_7B[var_7B.size],"ump45_reflex",var_7B[var_7B.size],"ump45_silencer",var_7B[var_7B.size],"ump45_arctic",var_7B[var_7B.size],"ump45_arctic_acog",var_7B[var_7B.size],"ump45_arctic_eotech",var_7B[var_7B.size],"ump45_arctic_reflex",var_7B[var_7B.size],"ump45_digital",var_7B[var_7B.size],"ump45_digital_acog",var_7B[var_7B.size],"ump45_digital_eotech",var_7B[var_7B.size],"ump45_digital_reflex",var_7B[var_7B.size],"beretta",var_7B[var_7B.size],"beretta393",var_7B[var_7B.size],"usp",var_7B[var_7B.size],"usp_scripted",var_7B[var_7B.size],"usp_silencer",var_7B[var_7B.size],"glock",var_7B[var_7B.size],"trigger",var_03); + if(!common_scripts\utility::flag("allow_ammo_pickups")) + { + continue; + } + + if(!isdefined(var_03)) + { + continue; + } + + if(!isplayer(var_03)) + { + continue; + } + + var_04 = undefined; + var_05 = undefined; + var_06 = var_03 getweaponslistall(); + for(var_07 = 0;var_07 < var_06.size;var_07++) + { + for(var_08 = 0;var_08 < var_7B.size;var_08++) + { + if(var_06[var_07] == var_7B[var_08]) + { + var_04 = var_06[var_07]; + } + } + } + + if(!isdefined(var_04) && var_01 == "claymore") + { + var_05 = 1; + var_04 = "claymore"; + break; + } + + if(!isdefined(var_04) && var_01 == "c4") + { + var_05 = 1; + var_04 = "c4"; + break; + } + + if(!isdefined(var_04)) + { + continue; + } + + if(var_03 getfractionmaxammo(var_04) >= 1) + { + continue; + } + + break; + } + + if(isdefined(var_05)) + { + var_03 giveweapon(var_04); + } + else + { + var_09 = 1; + if(var_01 == "556" || var_01 == "762") + { + var_09 = 30; + } + else if(var_01 == "45") + { + var_09 = 25; + } + else if(var_01 == "pistol") + { + var_09 = 15; + } + + var_03 setweaponammostock(var_04,var_03 getweaponammostock(var_04) + var_09); + } + + var_03 playlocalsound("grenade_pickup"); + var_02 delete(); + if(isdefined(self)) + { + self delete(); + } +} + +//Function Number: 115 +get_script_linkto_targets() +{ + var_00 = []; + if(!isdefined(self.script_linkto)) + { + return var_00; + } + + var_01 = strtok(self.script_linkto," "); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + var_03 = var_01[var_02]; + var_04 = getent(var_03,"script_linkname"); + if(isdefined(var_04)) + { + var_00[var_00.size] = var_04; + } + } + + return var_00; +} + +//Function Number: 116 +delete_link_chain(param_00) +{ + param_00 waittill("trigger"); + var_01 = param_00 get_script_linkto_targets(); + common_scripts\utility::array_thread(var_01,::delete_links_then_self); +} + +//Function Number: 117 +delete_links_then_self() +{ + var_00 = get_script_linkto_targets(); + common_scripts\utility::array_thread(var_00,::delete_links_then_self); + self delete(); +} + +//Function Number: 118 +trigger_fog(param_00) +{ + waittillframeend; + var_01 = param_00.script_fogset_start; + var_02 = param_00.script_fogset_end; + param_00.sunfog_enabled = 0; + if(isdefined(var_01) && isdefined(var_02)) + { + var_03 = maps\_utility::get_fog(var_01); + var_04 = maps\_utility::get_fog(var_02); + param_00.start_neardist = var_03.startdist; + param_00.start_fardist = var_03.halfwaydist; + param_00.start_color = (var_03.red,var_03.green,var_03.blue); + param_00.start_opacity = var_03.maxopacity; + param_00.sunfog_enabled = isdefined(var_03.sunred) || isdefined(var_04.sunred); + if(isdefined(var_03.sunred)) + { + param_00.start_suncolor = (var_03.sunred,var_03.sungreen,var_03.sunblue); + param_00.start_sundir = var_03.sundir; + param_00.start_sunbeginfadeangle = var_03.sunbeginfadeangle; + param_00.start_sunendfadeangle = var_03.var_1AF5; + param_00.start_sunfogscale = var_03.normalfogscale; + } + else if(param_00.sunfog_enabled) + { + param_00.start_suncolor = param_00.start_color; + param_00.start_sundir = (0,0,0); + param_00.start_sunbeginfadeangle = 0; + param_00.start_sunendfadeangle = 90; + param_00.start_sunfogscale = 1; + } + + param_00.end_neardist = var_04.startdist; + param_00.end_fardist = var_04.halfwaydist; + param_00.end_color = (var_03.red,var_03.green,var_03.blue); + param_00.end_opacity = var_04.maxopacity; + if(isdefined(var_04.sunred)) + { + param_00.end_suncolor = (var_04.sunred,var_04.sungreen,var_04.sunblue); + param_00.end_sundir = var_04.sundir; + param_00.end_sunbeginfadeangle = var_04.sunbeginfadeangle; + param_00.end_sunendfadeangle = var_04.var_1AF5; + param_00.end_sunfogscale = var_04.normalfogscale; + } + else if(param_00.sunfog_enabled) + { + param_00.end_suncolor = param_00.end_color; + param_00.end_sundir = (0,0,0); + param_00.end_sunbeginfadeangle = 0; + param_00.end_sunendfadeangle = 90; + param_00.end_sunfogscale = 1; + } + } + + var_05 = getent(param_00.target,"targetname"); + var_06 = var_05.origin; + var_07 = undefined; + if(isdefined(var_05.target)) + { + var_08 = getent(var_05.target,"targetname"); + var_07 = var_08.origin; + } + else + { + var_07 = var_06 + param_00.origin - var_06 * 2; + } + + var_09 = distance(var_06,var_07); + for(;;) + { + param_00 waittill("trigger",var_0A); + var_0B = 0; + while(var_0A istouching(param_00)) + { + var_0B = maps\_utility::get_progress(var_06,var_07,var_0A.origin,var_09); + var_0B = clamp(var_0B,0,1); + param_00 set_fog_progress(var_0B); + wait 0.05; + } + + if(var_0B > 0.5) + { + var_0B = 1; + } + else + { + var_0B = 0; + } + + param_00 set_fog_progress(var_0B); + } +} + +//Function Number: 119 +set_fog_progress(param_00) +{ + var_01 = 1 - param_00; + var_02 = self.start_neardist * var_01 + self.end_neardist * param_00; + var_03 = self.start_fardist * var_01 + self.end_fardist * param_00; + var_04 = self.start_color * var_01 + self.end_color * param_00; + var_05 = self.start_opacity; + var_06 = self.end_opacity; + if(!isdefined(var_05)) + { + var_05 = 1; + } + + if(!isdefined(var_06)) + { + var_06 = 1; + } + + var_07 = var_05 * var_01 + var_06 * param_00; + if(self.sunfog_enabled) + { + var_08 = self.start_suncolor * var_01 + self.end_suncolor * param_00; + var_09 = self.start_sundir * var_01 + self.end_sundir * param_00; + var_0A = self.start_sunbeginfadeangle * var_01 + self.end_sunbeginfadeangle * param_00; + var_0B = self.start_sunendfadeangle * var_01 + self.end_sunendfadeangle * param_00; + var_0C = self.start_sunfogscale * var_01 + self.end_sunfogscale * param_00; + setexpfog(var_02,var_03,var_04[0],var_04[1],var_04[2],var_07,0.4,var_08[0],var_08[1],var_08[2],var_09,var_0A,var_0B,var_0C); + return; + } + + setexpfog(var_02,var_03,var_04[0],var_04[1],var_04[2],var_07,0.4); +} + +//Function Number: 120 +remove_level_first_frame() +{ + wait 0.05; + level.first_frame = -1; +} + +//Function Number: 121 +no_crouch_or_prone_think(param_00) +{ + common_scripts\utility::array_thread(level.players,::no_crouch_or_prone_think_for_player,param_00); +} + +//Function Number: 122 +no_crouch_or_prone_think_for_player(param_00) +{ + for(;;) + { + param_00 waittill("trigger",var_01); + if(!isdefined(var_01)) + { + continue; + } + + if(var_01 != self) + { + continue; + } + + while(var_01 istouching(param_00)) + { + var_01 allowprone(0); + var_01 allowcrouch(0); + wait 0.05; + } + + var_01 allowprone(1); + var_01 allowcrouch(1); + } +} + +//Function Number: 123 +no_prone_think(param_00) +{ + common_scripts\utility::array_thread(level.players,::no_prone_think_for_player,param_00); +} + +//Function Number: 124 +no_prone_think_for_player(param_00) +{ + for(;;) + { + param_00 waittill("trigger",var_01); + if(!isdefined(var_01)) + { + continue; + } + + if(var_01 != self) + { + continue; + } + + while(var_01 istouching(param_00)) + { + var_01 allowprone(0); + wait 0.05; + } + + var_01 allowprone(1); + } +} + +//Function Number: 125 +load_friendlies() +{ + if(isdefined(game["total characters"])) + { + var_00 = game["total characters"]; + } + else + { + return; + } + + var_01 = getaiarray("allies"); + var_02 = var_01.size; + var_03 = 0; + var_04 = getspawnerteamarray("allies"); + var_05 = var_04.size; + var_06 = 0; + for(;;) + { + if((var_02 <= 0 && var_05 <= 0) || var_00 <= 0) + { + return; + } + + if(var_02 > 0) + { + if(isdefined(var_01[var_03].script_friendname)) + { + var_02--; + var_03++; + continue; + } + + var_01[var_03] lib_0144::func_1E5D(); + var_01[var_03] thread lib_0144::func_1E62(game["character" + var_00 - 1]); + var_02--; + var_03++; + var_00--; + continue; + } + + if(var_05 > 0) + { + if(isdefined(var_04[var_06].script_friendname)) + { + var_05--; + var_06++; + continue; + } + + var_07 = game["character" + var_00 - 1]; + maps\_utility::precache(var_07["model"]); + maps\_utility::precache(var_07["model"]); + var_04[var_06] thread maps\_utility::spawn_setcharacter(game["character" + var_00 - 1]); + var_05--; + var_06++; + var_00--; + continue; + } + } +} + +//Function Number: 126 +check_flag_for_stat_tracking(param_00) +{ + if(!common_scripts\utility::issuffix(param_00,"aa_")) + { + return; + } + + [[ level.sp_stat_tracking_func ]](param_00); +} + +//Function Number: 127 +precache_script_models() +{ + waittillframeend; + if(!isdefined(level.scr_model)) + { + return; + } + + var_00 = getarraykeys(level.scr_model); + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + if(isarray(level.scr_model[var_00[var_01]])) + { + for(var_02 = 0;var_02 < level.scr_model[var_00[var_01]].size;var_02++) + { + precachemodel(level.scr_model[var_00[var_01]][var_02]); + } + + continue; + } + + precachemodel(level.scr_model[var_00[var_01]]); + } +} + +//Function Number: 128 +arcademode_save() +{ + var_00 = []; + if(var_7B[level.script]) + { + return; + } + + wait 2.5; + var_01 = "levelshots / autosave / autosave_" + level.script + "start"; + savegame("levelstart",&"AUTOSAVE_LEVELSTART",var_01,1); +} + +//Function Number: 129 +player_death_detection() +{ + setdvar("player_died_recently","0"); + thread player_died_recently_degrades(); + level maps\_utility::add_wait(::common_scripts\utility::flag_wait,"missionfailed"); + level.player maps\_utility::add_wait(::maps\_utility::waittill_msg,"death"); + maps\_utility::do_wait_any(); + var_00 = []; + setdvar("player_died_recently",var_7B[level.gameskill]); +} + +//Function Number: 130 +player_died_recently_degrades() +{ + for(;;) + { + var_00 = getdvarint("player_died_recently",0); + if(var_00 > 0) + { + var_00 = var_00 - 5; + setdvar("player_died_recently",var_00); + } + + wait 5; + } +} + +//Function Number: 131 +trigger_spawngroup(param_00) +{ + waittillframeend; + var_01 = param_00.script_spawngroup; + if(!isdefined(level.spawn_groups[var_01])) + { + return; + } + + param_00 waittill("trigger"); + var_02 = common_scripts\utility::random(level.spawn_groups[var_01]); + foreach(var_04 in var_02) + { + var_04 maps\_utility::spawn_ai(); + } +} + +//Function Number: 132 +recon_player() +{ + self notify("new_recon_player"); + self endon("new_recon_player"); + self waittill("death",var_00,var_01,var_02); + if(!isdefined(var_02)) + { + var_02 = "script_kill"; + } + + var_03 = 0; + var_04 = "none"; + var_05 = (0,0,0); + if(isdefined(var_00)) + { + var_04 = var_00.classname; + var_05 = var_00.origin; + var_06 = vectornormalize(var_05 - self.origin); + var_07 = anglestoforward(self getplayerangles()); + var_03 = vectordot(var_06,var_07); + } + + reconspatialevent(self.origin,"script_player_death: playerid %s, enemy %s, enemyposition %v, enemydotproduct %f, cause %s, weapon %s",self.unique_id,var_04,var_05,var_03,var_01,var_02); + if(isdefined(var_00)) + { + reconspatialevent(var_00.origin,"script_player_killer: playerid %s, enemy %s, playerposition %v, enemydotproduct %f, cause %s, weapon %s",self.unique_id,var_04,self.origin,var_03,var_01,var_02); + } +} + +//Function Number: 133 +recon_player_downed() +{ + self notify("new_player_downed_recon"); + self endon("new_player_downed_recon"); + self endon("death"); + for(;;) + { + self waittill("player_downed"); + var_00 = getlevelticks() * 0.05; + var_01 = var_00; + if(isdefined(self.last_downed_time)) + { + var_00 = var_01 - self.last_downed_time; + } + + self.last_downed_time = var_01; + reconspatialevent(self.origin,"script_player_downed: playerid %s, leveltime %d, deltatime %d",self.unique_id,var_01,var_00); + } +} + +//Function Number: 134 +init_level_players() +{ + level.players = getentarray("player","classname"); + for(var_00 = 0;var_00 < level.players.size;var_00++) + { + level.players[var_00].unique_id = "player" + var_00; + } + + level.player = level.players[0]; + if(level.players.size > 1) + { + level.player2 = level.players[1]; + } + + level notify("level.players initialized"); + foreach(var_02 in level.players) + { + var_02 thread recon_player(); + if(maps\_utility::is_specialop()) + { + var_02 thread recon_player_downed(); + } + } +} + +//Function Number: 135 +kill_all_players_trigger() +{ + self waittill("trigger",var_00); + maps\_utility::kill_wrapper(); +} + +//Function Number: 136 +trigger_vehicle_spline_spawn(param_00) +{ + param_00 waittill("trigger"); + var_01 = getentarray(param_00.target,"targetname"); + foreach(var_03 in var_01) + { + var_03 thread maps\_vehicle::spawn_vehicle_and_attach_to_spline_path(70); + wait 0.05; + } +} + +//Function Number: 137 +trigger_vehicle_spawn(param_00) +{ + param_00 waittill("trigger"); + var_01 = getentarray(param_00.target,"targetname"); + foreach(var_03 in var_01) + { + var_03 thread maps\_vehicle::spawn_vehicle_and_gopath(); + wait 0.05; + } +} + +//Function Number: 138 +trigger_dooropen(param_00) +{ + param_00 waittill("trigger"); + var_01 = getentarray(param_00.target,"targetname"); + var_02 = []; + foreach(var_04 in var_02) + { + var_05 = var_7B[var_04.script_noteworthy]; + var_04 connectpaths(); + var_04 rotateyaw(var_05,1,0,0.5); + } +} + +//Function Number: 139 +trigger_glass_break(param_00) +{ + var_01 = getglassarray(param_00.target); + if(!isdefined(var_01) || var_01.size == 0) + { + return; + } + + for(;;) + { + level waittill("glass_break",var_02); + if(var_02 istouching(param_00)) + { + var_03 = var_02.origin; + wait 0.05; + var_04 = var_02.origin; + var_05 = undefined; + if(var_03 != var_04) + { + var_05 = var_04 - var_03; + } + + if(isdefined(var_05)) + { + foreach(var_07 in var_01) + { + destroyglass(var_07,var_05); + } + + break; + } + else + { + foreach(var_07 in var_01) + { + destroyglass(var_07); + } + + break; + } + } + } + + param_00 delete(); +} + +//Function Number: 140 +trigger_vehicle_getin_spawn(param_00) +{ + var_01 = getentarray(param_00.target,"targetname"); + foreach(var_03 in var_01) + { + var_04 = getentarray(var_03.target,"targetname"); + foreach(var_06 in var_04) + { + if(!issubstr(var_06.code_classname,"actor")) + { + continue; + } + + if(!var_06.spawnflags & 1) + { + continue; + } + + var_06.dont_auto_ride = 1; + } + } + + param_00 waittill("trigger"); + var_01 = getentarray(param_00.target,"targetname"); + common_scripts\utility::array_thread(var_01,::maps\_utility::add_spawn_function,::vehicle_spawns_targets_and_rides); + common_scripts\utility::array_thread(var_01,::maps\_utility::spawn_vehicle); +} + +//Function Number: 141 +vehicle_spawns_targets_and_rides() +{ + var_00 = getentarray(self.target,"targetname"); + var_01 = []; + foreach(var_03 in var_00) + { + if(var_03.code_classname == "info_vehicle_node") + { + continue; + } + + var_01[var_01.size] = var_03; + } + + var_01 = maps\_utility::get_array_of_closest(self.origin,var_01); + foreach(var_07, var_06 in var_01) + { + var_06 thread maps\_utility::add_spawn_function(::guy_spawns_and_gets_in_vehicle,self,var_07); + } + + common_scripts\utility::array_thread(var_01,::maps\_utility::spawn_ai); + self waittill("guy_entered"); + wait 3; + thread maps\_vehicle::vehicle_becomes_crashable(); + if(!self.riders.size) + { + return; + } + + maps\_vehicle::gopath(); + maps\_vehicle::leave_path_for_spline_path(); +} + +//Function Number: 142 +guy_spawns_and_gets_in_vehicle(param_00,param_01) +{ + maps\_vehicle::mount_snowmobile(param_00,param_01); +} + +//Function Number: 143 +watchweaponchange() +{ + if(!isdefined(level.friendly_thermal_reflector_effect)) + { + level.friendly_thermal_reflector_effect = loadfx("misc/thermal_tapereflect_inverted"); + } + + self endon("death"); + var_00 = self getcurrentweapon(); + if(weap_has_thermal(var_00)) + { + thread thermal_tracker(); + } + + for(;;) + { + self waittill("weapon_change",var_01); + if(weap_has_thermal(var_01)) + { + thread thermal_tracker(); + continue; + } + + self notify("acogThermalTracker"); + } +} + +//Function Number: 144 +weap_has_thermal(param_00) +{ + if(!isdefined(param_00)) + { + return 0; + } + + if(param_00 == "none") + { + return 0; + } + + if(weaponhasthermalscope(param_00)) + { + return 1; + } + + return 0; +} + +//Function Number: 145 +thermal_tracker() +{ + self endon("death"); + self notify("acogThermalTracker"); + self endon("acogThermalTracker"); + var_00 = 0; + for(;;) + { + var_01 = var_00; + var_00 = self playerads(); + if(turn_thermal_on(var_00,var_01)) + { + thermal_effectson(); + } + else if(turn_thermal_off(var_00,var_01)) + { + thermal_effectsoff(); + } + + wait 0.05; + } +} + +//Function Number: 146 +turn_thermal_on(param_00,param_01) +{ + if(param_00 <= param_01) + { + return 0; + } + + if(param_00 <= 0.65) + { + return 0; + } + + return !isdefined(self.is_in_thermal_vision); +} + +//Function Number: 147 +turn_thermal_off(param_00,param_01) +{ + if(param_00 >= param_01) + { + return 0; + } + + if(param_00 >= 0.8) + { + return 0; + } + + return isdefined(self.is_in_thermal_vision); +} + +//Function Number: 148 +thermal_effectson() +{ + self.is_in_thermal_vision = 1; + var_00 = getaiarray("allies"); + foreach(var_02 in var_00) + { + if(isdefined(var_02.has_thermal_fx)) + { + continue; + } + + var_02.has_thermal_fx = 1; + var_02 thread loop_friendly_thermal_reflector_effect(self.unique_id); + } + + if(maps\_utility::is_coop()) + { + var_04 = maps\_utility::get_other_player(self); + if(!isdefined(var_04.has_thermal_fx)) + { + var_04.has_thermal_fx = 1; + var_04 thread loop_friendly_thermal_reflector_effect(self.unique_id,self); + } + } +} + +//Function Number: 149 +thermal_effectsoff() +{ + self.is_in_thermal_vision = undefined; + level notify("thermal_fx_off" + self.unique_id); + var_00 = getaiarray("allies"); + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + var_00[var_01].has_thermal_fx = undefined; + } + + if(maps\_utility::is_coop()) + { + var_02 = maps\_utility::get_other_player(self); + var_02.has_thermal_fx = undefined; + } +} + +//Function Number: 150 +loop_friendly_thermal_reflector_effect(param_00,param_01) +{ + if(isdefined(self.has_no_ir)) + { + return; + } + + level endon("thermal_fx_off" + param_00); + self endon("death"); + for(;;) + { + if(isdefined(param_01)) + { + playfxontagforclients(level.friendly_thermal_reflector_effect,self,"J_Spine4",param_01); + } + else + { + playfxontag(level.friendly_thermal_reflector_effect,self,"J_Spine4"); + } + + wait 0.2; + } +} + +//Function Number: 151 +claymore_pickup_think_global() +{ + precacheitem("claymore"); + self endon("deleted"); + self setcursorhint("HINT_NOICON"); + self sethintstring(&"WEAPON_CLAYMORE_PICKUP"); + self makeusable(); + var_00 = weaponmaxammo("claymore") + weaponclipsize("claymore"); + if(isdefined(self.script_ammo_clip)) + { + var_00 = self.script_ammo_clip; + } + + while(var_00 > 0) + { + self waittill("trigger",var_01); + var_01 playsound("weap_pickup"); + var_02 = 0; + if(!var_01 hasweapon("claymore")) + { + var_01 giveweapon("claymore"); + } + else + { + var_02 = var_01 getammocount("claymore"); + } + + if(isdefined(var_00) && var_00 > 0) + { + var_00 = var_02 + var_00; + var_03 = weaponmaxammo("claymore"); + var_04 = weaponclipsize("claymore"); + if(var_00 >= var_04) + { + var_00 = var_00 - var_04; + var_01 setweaponammoclip("claymore",var_04); + } + + if(var_00 >= var_03) + { + var_00 = var_00 - var_03; + var_01 setweaponammostock("claymore",var_03); + } + else if(var_00 > 0) + { + var_01 setweaponammostock("claymore",var_00); + var_00 = 0; + } + } + else + { + var_01 givemaxammo("claymore"); + } + + var_05 = 4; + if(isdefined(var_01.remotemissile_actionslot) && var_01.remotemissile_actionslot == 4) + { + var_05 = 2; + } + + var_01 setactionslot(var_05,"weapon","claymore"); + var_01 switchtoweapon("claymore"); + } + + if(isdefined(self.target)) + { + var_06 = getentarray(self.target,"targetname"); + foreach(var_08 in var_06) + { + var_08 delete(); + } + } + + self makeunusable(); + self delete(); +} + +//Function Number: 152 +ammo_cache_think_global() +{ + self.use_trigger = spawn("script_model",self.origin + (0,0,28)); + self.use_trigger setmodel("tag_origin"); + self.use_trigger makeusable(); + self.use_trigger setcursorhint("HINT_NOICON"); + self.use_trigger sethintstring(&"WEAPON_CACHE_USE_HINT"); + thread ammo_icon_think(); + for(;;) + { + self.use_trigger waittill("trigger",var_00); + self.use_trigger makeunusable(); + var_00 playsound("player_refill_all_ammo"); + var_00 disableweapons(); + var_01 = var_00 getweaponslistall(); + foreach(var_03 in var_01) + { + if(var_03 == "claymore") + { + continue; + } + + if(var_03 == "c4") + { + continue; + } + + var_00 givemaxammo(var_03); + var_04 = weaponclipsize(var_03); + if(isdefined(var_04)) + { + if(var_00 getweaponammoclip(var_03) < var_04) + { + var_00 setweaponammoclip(var_03,var_04); + } + } + } + + wait 1.5; + var_00 enableweapons(); + self.use_trigger makeusable(); + } +} + +//Function Number: 153 +ammo_icon_think() +{ + var_00 = spawn("trigger_radius",self.origin,0,320,72); + var_01 = newhudelem(); + var_01 setshader("waypoint_ammo",1,1); + var_01.alpha = 0; + var_01.color = (1,1,1); + var_01.x = self.origin[0]; + var_01.y = self.origin[1]; + var_01.z = self.origin[2] + 16; + var_01 setwaypoint(1,1); + self.ammo_icon = var_01; + self.ammo_icon_trig = var_00; + if(isdefined(self.icon_always_show) && self.icon_always_show) + { + ammo_icon_fade_in(var_01); + return; + } + + wait 0.05; + for(;;) + { + var_00 waittill("trigger",var_02); + if(!isplayer(var_02)) + { + continue; + } + + while(var_02 istouching(var_00)) + { + var_03 = 1; + var_04 = var_02 getcurrentweapon(); + if(var_04 == "none") + { + var_03 = 0; + } + else if(var_02 getfractionmaxammo(var_04) > 0.9) + { + var_03 = 0; + } + + if(maps\_utility::player_looking_at(self.origin,0.8,1) && var_03) + { + ammo_icon_fade_in(var_01); + continue; + } + + ammo_icon_fade_out(var_01); + wait 0.25; + } + + ammo_icon_fade_out(var_01); + } +} + +//Function Number: 154 +ammo_icon_fade_in(param_00) +{ + if(param_00.alpha != 0) + { + return; + } + + param_00 fadeovertime(0.2); + param_00.alpha = 0.3; + wait 0.2; +} + +//Function Number: 155 +ammo_icon_fade_out(param_00) +{ + if(param_00.alpha == 0) + { + return; + } + + param_00 fadeovertime(0.2); + param_00.alpha = 0; + wait 0.2; +} + +//Function Number: 156 +trigger_multiple_visionset(param_00) +{ + var_01 = 0; + var_02 = undefined; + var_03 = undefined; + var_04 = undefined; + if(isdefined(param_00.script_visionset_start) && isdefined(param_00.script_visionset_end)) + { + var_01 = 1; + var_03 = getent(param_00.target,"targetname"); + if(!isdefined(var_03)) + { + var_03 = common_scripts\utility::getstruct(param_00.target,"targetname"); + } + + var_04 = getent(var_03.target,"targetname"); + if(!isdefined(var_04)) + { + var_04 = common_scripts\utility::getstruct(var_03.target,"targetname"); + } + + var_03 = var_03.origin; + var_04 = var_04.origin; + var_02 = distance(var_03,var_04); + param_00 init_visionset_progress_trigger(); + } + + var_05 = -1; + for(;;) + { + param_00 waittill("trigger",var_06); + if(isplayer(var_06)) + { + if(var_01) + { + var_07 = 0; + while(var_06 istouching(param_00)) + { + var_07 = maps\_utility::get_progress(var_03,var_04,var_06.origin,var_02); + var_07 = clamp(var_07,0,1); + if(var_07 != var_05) + { + var_05 = var_07; + var_06 vision_set_fog_progress(param_00,var_07); + } + + wait 0.05; + } + + if(var_07 < 0.5) + { + var_06 maps\_utility::vision_set_fog_changes(param_00.script_visionset_start,param_00.script_delay); + } + else + { + var_06 maps\_utility::vision_set_fog_changes(param_00.script_visionset_end,param_00.script_delay); + } + + continue; + } + + var_06 maps\_utility::vision_set_fog_changes(param_00.script_visionset,param_00.script_delay); + } + } +} + +//Function Number: 157 +init_visionset_progress_trigger() +{ + if(!isdefined(self.script_delay)) + { + self.script_delay = 2; + } + + var_00 = maps\_utility::get_vision_set_fog(self.script_visionset_start); + var_01 = maps\_utility::get_vision_set_fog(self.script_visionset_end); + if(!isdefined(var_00) || !isdefined(var_01)) + { + return; + } + + var_02 = spawnstruct(); + var_02.startdist = var_01.startdist - var_00.startdist; + var_02.halfwaydist = var_01.halfwaydist - var_00.halfwaydist; + var_02.red = var_01.red - var_00.red; + var_02.blue = var_01.blue - var_00.blue; + var_02.green = var_01.green - var_00.green; + var_02.maxopacity = var_01.maxopacity - var_00.maxopacity; + var_02.sunfogenabled = isdefined(var_00.sunfogenabled) || isdefined(var_01.sunfogenabled); + var_03 = 0; + if(isdefined(var_00.sunred)) + { + var_03 = var_00.sunred; + } + + var_04 = 0; + if(isdefined(var_01.sunred)) + { + var_04 = var_01.sunred; + } + + var_02.sunred_start = var_03; + var_02.sunred = var_04 - var_03; + var_05 = 0; + if(isdefined(var_00.sungreen)) + { + var_05 = var_00.sungreen; + } + + var_06 = 0; + if(isdefined(var_01.sungreen)) + { + var_06 = var_01.sungreen; + } + + var_02.sungreen_start = var_05; + var_02.sungreen = var_06 - var_05; + var_07 = 0; + if(isdefined(var_00.sunblue)) + { + var_07 = var_00.sunblue; + } + + var_08 = 0; + if(isdefined(var_01.sunblue)) + { + var_08 = var_01.sunblue; + } + + var_02.sunblue_start = var_07; + var_02.sunblue = var_08 - var_07; + var_09 = (0,0,0); + if(isdefined(var_00.sundir)) + { + var_09 = var_00.sundir; + } + + var_0A = (0,0,0); + if(isdefined(var_01.sundir)) + { + var_0A = var_01.sundir; + } + + var_02.sundir_start = var_09; + var_02.sundir = var_0A - var_09; + var_0B = 0; + if(isdefined(var_00.sunbeginfadeangle)) + { + var_0B = var_00.sunbeginfadeangle; + } + + var_0C = 0; + if(isdefined(var_01.sunbeginfadeangle)) + { + var_0C = var_01.sunbeginfadeangle; + } + + var_02.sunbeginfadeangle_start = var_0B; + var_02.sunbeginfadeangle = var_0C - var_0B; + var_0D = 0; + if(isdefined(var_00.var_1AF5)) + { + var_0D = var_00.var_1AF5; + } + + var_0E = 0; + if(isdefined(var_01.var_1AF5)) + { + var_0E = var_01.var_1AF5; + } + + var_02.sunendfadeangle_start = var_0D; + var_02.var_1AF5 = var_0E - var_0D; + var_0F = 0; + if(isdefined(var_00.normalfogscale)) + { + var_0F = var_00.normalfogscale; + } + + var_10 = 0; + if(isdefined(var_01.normalfogscale)) + { + var_10 = var_01.normalfogscale; + } + + var_02.normalfogscale_start = var_0F; + var_02.normalfogscale = var_10 - var_0F; + self.visionset_diff = var_02; +} + +//Function Number: 158 +vision_set_fog_progress(param_00,param_01) +{ + maps\_utility::init_self_visionset(); + if(param_01 < 0.5) + { + self.vision_set_transition_ent.vision_set = param_00.script_visionset_start; + } + else + { + self.vision_set_transition_ent.vision_set = param_00.script_visionset_end; + } + + self.vision_set_transition_ent.time = 0; + if(param_00.script_visionset_start == param_00.script_visionset_end) + { + return; + } + + self visionsetnakedforplayer_lerp(param_00.script_visionset_start,param_00.script_visionset_end,param_01); + var_02 = maps\_utility::get_vision_set_fog(param_00.script_visionset_start); + var_03 = maps\_utility::get_vision_set_fog(param_00.script_visionset_end); + var_04 = param_00.visionset_diff; + var_05 = spawnstruct(); + var_05.startdist = var_02.startdist + var_04.startdist * param_01; + var_05.halfwaydist = var_02.halfwaydist + var_04.halfwaydist * param_01; + var_05.halfwaydist = max(1,var_05.halfwaydist); + var_05.red = var_02.red + var_04.red * param_01; + var_05.green = var_02.green + var_04.green * param_01; + var_05.blue = var_02.blue + var_04.blue * param_01; + var_05.maxopacity = var_02.maxopacity + var_04.maxopacity * param_01; + if(var_04.sunfogenabled) + { + var_05.sunfogenabled = 1; + var_05.sunred = var_04.sunred_start + var_04.sunred * param_01; + var_05.sungreen = var_04.sungreen_start + var_04.sungreen * param_01; + var_05.sunblue = var_04.sunblue_start + var_04.sunblue * param_01; + var_05.sundir = var_04.sundir_start + var_04.sundir * param_01; + var_05.sunbeginfadeangle = var_04.sunbeginfadeangle_start + var_04.sunbeginfadeangle * param_01; + var_05.var_1AF5 = var_04.sunendfadeangle_start + var_04.var_1AF5 * param_01; + var_05.normalfogscale = var_04.normalfogscale_start + var_04.normalfogscale * param_01; + } + + maps\_utility::set_fog_to_ent_values(var_05,0.05); +} + +//Function Number: 159 +window_destroy() +{ + var_00 = getglass(self.target); + if(!isdefined(var_00)) + { + return; + } + + level waittillmatch(var_00,"glass_destroyed"); + self delete(); +} + +//Function Number: 160 +global_empty_callback(param_00,param_01,param_02,param_03,param_04) +{ +} + +//Function Number: 161 +trigger_multiple_compass(param_00) +{ + var_01 = param_00.script_parameters; + if(!isdefined(level.minimap_image)) + { + level.minimap_image = ""; + } + + for(;;) + { + param_00 waittill("trigger"); + if(level.minimap_image != var_01) + { + maps\_compass::setupminimap(var_01); + } + } +} + +//Function Number: 162 +assign_fx_to_trigger(param_00,param_01,param_02) +{ + if(isdefined(param_00.v["soundalias"]) && param_00.v["soundalias"] != "nil") + { + if(!isdefined(param_00.v["stopable"]) || !param_00.v["stopable"]) + { + return; + } + } + + param_02.origin = param_00.v["origin"]; + if(param_02 istouching(param_01)) + { + param_01.fx[param_01.fx.size] = param_00; + } +} + +//Function Number: 163 +trigger_multiple_fx_volume(param_00) +{ + var_01 = spawn("script_origin",(0,0,0)); + param_00.fx = []; + foreach(var_03 in level.createfxent) + { + assign_fx_to_trigger(var_03,param_00,var_01); + } + + var_01 delete(); + if(!isdefined(param_00.target)) + { + return; + } + + var_05 = getentarray(param_00.target,"targetname"); + foreach(var_07 in var_05) + { + switch(var_07.classname) + { + case "trigger_multiple_fx_volume_on": + var_07 thread trigger_multiple_fx_trigger_on_think(param_00); + break; + + case "trigger_multiple_fx_volume_off": + var_07 thread trigger_multiple_fx_trigger_off_think(param_00); + break; + + default: + break; + } + } +} + +//Function Number: 164 +trigger_multiple_fx_trigger_on_think(param_00) +{ + for(;;) + { + self waittill("trigger"); + common_scripts\utility::array_thread(param_00.fx,::maps\_utility::restarteffect); + wait 1; + } +} + +//Function Number: 165 +trigger_multiple_fx_trigger_off_think(param_00) +{ + wait 1; + common_scripts\utility::array_thread(param_00.fx,::common_scripts\utility::pauseeffect); + for(;;) + { + self waittill("trigger"); + common_scripts\utility::array_thread(param_00.fx,::common_scripts\utility::pauseeffect); + wait 1; + } +} + +//Function Number: 166 +weapon_list_debug() +{ + common_scripts\utility::create_dvar("weaponlist","0"); + if(!getdvarint("weaponlist")) + { + return; + } + + var_00 = getentarray(); + var_01 = []; + foreach(var_03 in var_00) + { + if(!isdefined(var_03.code_classname)) + { + continue; + } + + if(issubstr(var_03.code_classname,"weapon")) + { + var_01[var_03.classname] = 1; + } + } + + foreach(var_06 in var_01) + { + } + + var_08 = getspawnerarray(); + var_09 = []; + foreach(var_0B in var_08) + { + var_09[var_0B.code_classname] = 1; + } + + foreach(var_06 in var_09) + { + } +} + +//Function Number: 167 +slowmo_system_init() +{ + level.slowmo = spawnstruct(); + slowmo_system_defaults(); + notifyoncommand("_cheat_player_press_slowmo","+melee"); + notifyoncommand("_cheat_player_press_slowmo","+melee_breath"); + notifyoncommand("_cheat_player_press_slowmo","+melee_zoom"); +} + +//Function Number: 168 +slowmo_system_defaults() +{ + level.slowmo.lerp_time_in = 0; + level.slowmo.lerp_time_out = 0.25; + level.slowmo.speed_slow = 0.4; + level.slowmo.speed_norm = 1; +} + +//Function Number: 169 +add_no_game_starts() +{ + var_00 = getentarray("script_origin_start_nogame","classname"); + if(!var_00.size) + { + return; + } + + foreach(var_02 in var_00) + { + if(!isdefined(var_02.script_startname)) + { + continue; + } + + maps\_utility::add_start("no_game_" + var_02.script_startname,::start_nogame); + } +} + +//Function Number: 170 +do_no_game_start() +{ + if(!maps\_utility::is_no_game_start()) + { + return; + } + + setsaveddvar("ufoHitsTriggers","1"); + level.stop_load = 1; + if(isdefined(level.custom_no_game_setupfunc)) + { + level [[ level.custom_no_game_setupfunc ]](); + } + + maps\_loadout::init_loadout(); + thread maps\_audio::aud_init(); + maps\_global_fx::main(); + do_no_game_start_teleport(); + common_scripts\utility::array_call(getentarray("truckjunk","targetname"),::delete); + common_scripts\utility::array_call(getentarray("truckjunk","script_noteworthy"),::delete); + level waittill("eternity"); +} + +//Function Number: 171 +do_no_game_start_teleport() +{ + var_00 = getentarray("script_origin_start_nogame","classname"); + if(!var_00.size) + { + return; + } + + var_00 = sortbydistance(var_00,level.player.origin); + if(level.start_point == "no_game") + { + level.player maps\_utility::teleport_player(var_00[0]); + return; + } + + var_01 = getsubstr(level.start_point,8); + var_02 = 0; + foreach(var_04 in var_00) + { + if(!isdefined(var_04.script_startname)) + { + continue; + } + + if(var_01 != var_04.script_startname) + { + continue; + } + + if(isdefined(var_04.script_visionset)) + { + maps\_utility::vision_set_fog_changes(var_04.script_visionset,0); + } + + level.player maps\_utility::teleport_player(var_04); + var_02 = 1; + break; + } + + if(!var_02) + { + level.player maps\_utility::teleport_player(var_00[0]); + } +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_loadout.gsc b/MW3/PC/SP/maps/_loadout.gsc new file mode 100644 index 0000000..741ecd6 --- /dev/null +++ b/MW3/PC/SP/maps/_loadout.gsc @@ -0,0 +1,1742 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_loadout.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 61 + * Decompile Time: 984 ms + * Timestamp: 10/27/2023 2:22:36 AM +*******************************************************************/ + +//Function Number: 1 +init_loadout() +{ + if(!isdefined(level.dodgeloadout)) + { + give_loadout(); + } + + level.loadoutcomplete = 1; + level notify("loadout complete"); +} + +//Function Number: 2 +setdefaultactionslot() +{ + self setactionslot(1,""); + self setactionslot(2,""); + self setactionslot(3,"altMode"); + self setactionslot(4,""); +} + +//Function Number: 3 +init_player() +{ + setdefaultactionslot(); + self takeallweapons(); +} + +//Function Number: 4 +char_switcher() +{ + level.coop_player1 = level.player; + level.coop_player2 = level.player2; + if(isdefined(level.character_switched) && level.character_switched) + { + if(maps\_utility::is_coop()) + { + foreach(var_01 in level.players) + { + var_01 init_player(); + } + + level.coop_player1 = level.player2; + level.coop_player2 = level.player; + level.character_switched = 1; + return 1; + } + else + { + level.player init_player(); + level.coop_player1 = undefined; + level.coop_player2 = level.player; + level.character_switched = 1; + return 1; + } + } + + return 0; +} + +//Function Number: 5 +get_loadout() +{ + if(isdefined(level.loadout)) + { + return level.loadout; + } + + return level.script; +} + +//Function Number: 6 +give_loadout(param_00) +{ + var_01 = get_loadout(); + if(!isdefined(param_00)) + { + param_00 = 0; + } + + level.character_selected = param_00; + var_02 = []; + level.player setdefaultactionslot(); + if(maps\_utility::is_coop()) + { + level.player2 setdefaultactionslot(); + } + + if(!isdefined(game["expectedlevel"])) + { + game["expectedlevel"] = ""; + } + + if(!isdefined(level.campaign)) + { + level.campaign = "american"; + } + + if(common_scripts\utility::string_starts_with(level.script,"pmc_")) + { + level.player setviewmodel("viewmodel_base_viewhands"); + if(maps\_utility::is_coop()) + { + precachemodel("weapon_parabolic_knife"); + level.player maps\_utility::setmodelfunc(::so_body_player_ranger); + level.player2 maps\_utility::setmodelfunc(::so_body_player_ranger); + level.player2 setviewmodel("viewmodel_base_viewhands"); + } + + level.campaign = "american"; + return; + } + + if(maps\_utility::is_specialop()) + { + give_loadout_specialops(param_00); + return; + } + + if(level.script == "background") + { + level.player takeallweapons(); + return; + } + + if(level.script == "iw4_credits") + { + level.player takeallweapons(); + return; + } + + if(var_01 == "london") + { + level.player giveweapon("mp5_silencer_eotech"); + level.player giveweapon("usp_silencer"); + level.player giveweapon("fraggrenade"); + level.player giveweapon("flash_grenade"); + level.player setoffhandsecondaryclass("flash"); + level.player switchtoweapon("mp5_silencer_eotech"); + level.player setviewmodel("viewhands_sas"); + level.campaign = "british"; + return; + } + else if(var_01 == "innocent") + { + level.player setviewmodel("viewhands_sas"); + level.campaign = "british"; + if(!isdefined(game["previous_map"])) + { + level.player giveweapon("mp5_silencer_eotech"); + level.player giveweapon("usp_silencer"); + level.player giveweapon("fraggrenade"); + level.player giveweapon("flash_grenade"); + level.player setoffhandsecondaryclass("flash"); + level.player switchtoweapon("mp5_silencer_eotech"); + } + else + { + level.player setoffhandsecondaryclass("flash"); + restoreplayerweaponstatepersistent("london",1); + } + + return; + } + else if(var_01 == "hamburg") + { + level.player giveweapon("m4m203_acog_payback"); + level.player giveweapon("smaw_nolock"); + level.player giveweapon("fraggrenade"); + level.player giveweapon("flash_grenade"); + level.player setoffhandsecondaryclass("flash"); + level.player switchtoweapon("m4m203_acog_payback"); + level.player setviewmodel("viewhands_delta"); + level.campaign = "delta"; + return; + } + else if(var_01 == "prague") + { + level.default_weapon = "rsass_hybrid_silenced"; + level.player giveweapon(level.default_weapon); + level.player giveweapon("usp_silencer"); + level.player giveweapon("fraggrenade"); + level.player giveweapon("flash_grenade"); + level.player setoffhandsecondaryclass("flash"); + level.player switchtoweapon(level.default_weapon); + level.player setviewmodel("viewhands_yuri_europe"); + level.campaign = "delta"; + return; + } + else if(var_01 == "warlord") + { + level.player giveweapon("m14ebr_scoped_silenced_warlord"); + level.player giveweapon("ak47_silencer_reflex"); + level.player giveweapon("fraggrenade"); + level.player giveweapon("flash_grenade"); + level.player setoffhandsecondaryclass("flash"); + level.player switchtoweapon("m14ebr_scoped_silenced_warlord"); + level.player setviewmodel("viewhands_yuri"); + level.campaign = "american"; + return; + } + else if(var_01 == "castle") + { + level.castle_main_weapon = "mp5_silencer_reflex_castle"; + level.castle_side_weapon = "p99_tactical_silencer"; + level.player giveweapon(level.castle_main_weapon); + level.player giveweapon(level.castle_side_weapon); + level.player giveweapon("fraggrenade"); + level.player giveweapon("flash_grenade"); + level.player setoffhandsecondaryclass("flash"); + level.player switchtoweapon(level.castle_main_weapon); + level.player setviewmodel("viewhands_yuri_europe"); + level.campaign = "american"; + return; + } + else if(var_01 == "berlin") + { + level.player giveweapon("m14ebr_scope"); + level.player giveweapon("acr_hybrid_berlin"); + level.player giveweapon("fraggrenade"); + level.player setoffhandsecondaryclass("flash"); + level.player giveweapon("ninebang_grenade"); + level.player switchtoweapon("acr_hybrid_berlin"); + level.player setviewmodel("viewhands_delta"); + level.campaign = "delta"; + return; + } + else if(var_01 == "paris_a") + { + level.player giveweapon("scar_h_acog"); + level.player giveweapon("usp_no_knife"); + level.player giveweapon("fraggrenade"); + level.player setoffhandsecondaryclass("flash"); + level.player giveweapon("ninebang_grenade"); + level.player switchtoweapon("scar_h_acog"); + level.player setviewmodel("viewhands_delta"); + level.campaign = "delta"; + return; + } + else if(var_01 == "paris_b") + { + level.player giveweapon("scar_h_acog"); + level.player giveweapon("usp_no_knife"); + level.player giveweapon("fraggrenade"); + level.player setoffhandsecondaryclass("flash"); + level.player giveweapon("ninebang_grenade"); + level.player switchtoweapon("scar_h_acog"); + level.player setviewmodel("viewhands_delta"); + level.campaign = "delta"; + return; + } + else if(var_01 == "paris_ac130") + { + level.player setviewmodel("viewhands_delta"); + level.player giveweapon("m4m203_reflex"); + level.player givemaxammo("m4m203_reflex"); + level.player setoffhandprimaryclass("frag"); + level.player giveweapon("fraggrenade"); + level.player setoffhandsecondaryclass("flash"); + level.player giveweapon("flash_grenade"); + level.player switchtoweapon("m4m203_reflex"); + level.campaign = "delta"; + return; + } + else if(var_01 == "ny_manhattan") + { + level.player giveweapon("m4_hybrid_grunt_optim"); + level.player giveweapon("xm25"); + level.player giveweapon("fraggrenade"); + level.player giveweapon("flash_grenade"); + level.player setoffhandsecondaryclass("flash"); + level.player switchtoweapon("m4_hybrid_grunt_optim"); + level.player setviewmodel("viewhands_delta_shg"); + level.campaign = "delta"; + return; + } + else if(var_01 == "ny_harbor") + { + level.player giveweapon("mp5_silencer_reflex"); + level.player givemaxammo("mp5_silencer_reflex"); + level.player giveweapon("usp_no_knife"); + level.player givemaxammo("usp_no_knife"); + level.player giveweapon("fraggrenade"); + level.player giveweapon("ninebang_grenade"); + level.player setoffhandsecondaryclass("flash"); + level.player switchtoweapon("mp5_silencer_reflex"); + level.player setviewmodel("viewhands_udt"); + level.campaign = "delta"; + return; + } + else if(var_01 == "dubai") + { + level.dubai_main_weapon = "pecheneg_fastreload"; + level.player giveweapon(level.dubai_main_weapon); + level.player givemaxammo(level.dubai_main_weapon); + level.player giveweapon("m4m203_acog"); + level.player giveweapon("fraggrenade"); + level.player giveweapon("flash_grenade"); + level.player setoffhandsecondaryclass("flash"); + level.player switchtoweapon(level.dubai_main_weapon); + level.player setviewmodel("viewhands_juggernaut_ally"); + level.campaign = "american"; + return; + } + else if(var_01 == "payback") + { + level.player giveweapon("m4m203_acog_payback"); + level.player giveweapon("deserteagle"); + level.player giveweapon("fraggrenade"); + level.player setoffhandsecondaryclass("flash"); + level.player giveweapon("flash_grenade"); + level.player switchtoweapon("m4m203_acog_payback"); + level.player setviewmodel("viewhands_yuri"); + level.campaign = "delta"; + return; + } + else if(var_01 == "hijack") + { + level.player giveweapon("fnfiveseven"); + level.player switchtoweapon("fnfiveseven"); + level.player setviewmodel("viewhands_fso"); + level.campaign = "american"; + return; + } + else if(var_01 == "prague_escape") + { + level.player giveweapon("deserteagle"); + level.player giveweapon("m4m203_reflex"); + level.player giveweapon("fraggrenade"); + level.player giveweapon("flash_grenade"); + level.player setoffhandsecondaryclass("flash"); + level.player switchtoweapon("m4m203_reflex"); + level.player setviewmodel("viewhands_yuri_europe"); + level.campaign = "delta"; + return; + } + else if(var_01 == "intro") + { + level.player giveweapon("ak47_reflex"); + level.player givemaxammo("ak47_reflex"); + level.player giveweapon("deserteagle"); + level.player givemaxammo("deserteagle"); + level.player giveweapon("fraggrenade"); + level.player giveweapon("flash_grenade"); + level.player setoffhandprimaryclass("frag"); + level.player setoffhandsecondaryclass("flash"); + level.player switchtoweapon("ak47_reflex"); + level.player setviewmodel("viewhands_yuri"); + level.campaign = "american"; + return; + } + else if(var_01 == "rescue") + { + level.default_weapon = "acr_hybrid_silenced"; + level.player giveweapon(level.default_weapon); + level.player givemaxammo(level.default_weapon); + level.player giveweapon("usp"); + level.player givemaxammo("usp"); + level.player giveweapon("fraggrenade"); + level.player giveweapon("flash_grenade"); + level.player setoffhandprimaryclass("frag"); + level.player setoffhandsecondaryclass("flash"); + level.player switchtoweapon(level.default_weapon); + level.player setviewmodel("viewmodel_base_viewhands"); + level.campaign = "american"; + return; + } + else if(var_01 == "rescue_2") + { + level.default_weapon = "g36c_reflex"; + level.player giveweapon(level.default_weapon); + level.player givemaxammo(level.default_weapon); + level.player giveweapon("m4_grunt_acog"); + level.player givemaxammo("m4_grunt_acog"); + level.player giveweapon("fraggrenade"); + level.player giveweapon("flash_grenade"); + level.player setoffhandprimaryclass("frag"); + level.player setoffhandsecondaryclass("flash"); + level.player switchtoweapon(level.default_weapon); + level.player setviewmodel("viewhands_yuri_europe"); + level.campaign = "american"; + return; + } + else if(var_01 == "innocent") + { + level.campaign = "british"; + return; + } + + if(issubstr(var_01,"firingrange")) + { + return; + } + + level.testmap = 1; + give_default_loadout(); +} + +//Function Number: 7 +give_loadout_specialops(param_00) +{ + var_01 = get_loadout(); + if(var_01 == "so_nyse_ny_manhattan") + { + level.so_campaign = "delta"; + foreach(var_06, var_03 in level.players) + { + so_player_num(var_06); + var_04 = "m4_hybrid_grunt_optim"; + var_05 = "xm25"; + so_player_giveweapon(var_04); + so_player_giveweapon(var_05); + so_player_set_switchtoweapon(var_04); + so_player_giveweapon("fraggrenade"); + so_player_giveweapon("flash_grenade"); + so_player_set_setoffhandsecondaryclass("flash"); + so_player_setup_body(var_06); + } + + so_players_give_loadout(); + return; + } + + if(var_06 == "so_stealth_warlord") + { + level.so_campaign = "delta"; + level.coop_incap_weapon = level.so_warlord_secondary; + foreach(var_06 in level.players) + { + so_player_num(var_07); + so_player_giveweapon(level.so_warlord_primary); + so_player_giveweapon(level.so_warlord_secondary); + so_player_set_switchtoweapon(level.so_warlord_primary); + so_player_giveweapon("fraggrenade"); + so_player_giveweapon("flash_grenade"); + so_player_set_setoffhandsecondaryclass("flash"); + so_player_setup_body(var_07); + } + + so_players_give_loadout(); + return; + } + + if(var_07 == "so_littlebird_payback") + { + level.so_campaign = "delta"; + foreach(var_07 in level.players) + { + so_player_num(var_08); + so_player_giveweapon(level.so_payback_primary); + so_player_giveweapon(level.so_payback_secondary); + so_player_set_switchtoweapon(level.so_payback_primary); + so_player_giveweapon("fraggrenade"); + so_player_giveweapon("flash_grenade"); + so_player_set_setoffhandsecondaryclass("flash"); + so_player_setup_body(var_08); + } + + so_players_give_loadout(); + return; + } + + if(var_08 == "so_ied_berlin") + { + level.so_campaign = "delta"; + if(maps\_utility::is_coop()) + { + if(getdvar("coop_start") == "so_char_host") + { + var_09 = 0; + var_0A = 1; + } + else + { + var_09 = 1; + var_0A = 0; + } + } + else + { + var_09 = 0; + var_0A = 1; + } + + so_player_num(var_09); + so_player_giveweapon("fraggrenade"); + so_player_giveweapon("flash_grenade"); + so_player_set_setoffhandsecondaryclass("flash"); + so_player_giveweapon("sa80lmg_fastreload_reflex"); + so_player_giveweapon("m320"); + so_player_set_switchtoweapon("sa80lmg_fastreload_reflex"); + so_player_setup_body(var_09); + so_player_num(var_0A); + so_player_giveweapon("fraggrenade"); + so_player_giveweapon("semtex_grenade"); + so_player_set_setoffhandsecondaryclass("semtex_grenade"); + so_player_giveweapon("barrett"); + so_player_giveweapon("scar_h_thermal_silencer"); + so_player_set_switchtoweapon("barrett"); + so_player_setup_body(var_0A); + so_players_give_loadout(); + return; + } + + if(var_0A == "so_assault_rescue_2") + { + var_0B = "m4_grunt_acog"; + level.so_campaign = "delta"; + foreach(var_0B in level.players) + { + so_player_num(var_0C); + so_player_giveweapon(var_09); + so_player_set_maxammo(var_09); + so_player_giveweapon("g36c_reflex"); + so_player_set_maxammo("g36c_reflex"); + so_player_giveweapon("fraggrenade"); + so_player_giveweapon("flash_grenade"); + so_player_set_setoffhandsecondaryclass("flash"); + so_player_setup_body(var_0C); + so_player_set_switchtoweapon(var_09); + } + + so_players_give_loadout(); + return; + } + + if(var_0C == "so_heliswitch_berlin") + { + level.so_campaign = "delta"; + foreach(var_0C in level.players) + { + so_player_num(var_0D); + so_player_giveweapon(level.primary_weapon); + so_player_giveweapon(level.secondary_weapon); + so_player_set_switchtoweapon(level.primary_weapon); + so_player_giveweapon("fraggrenade"); + so_player_set_setoffhandsecondaryclass("flash"); + so_player_giveweapon("flash_grenade"); + so_player_setup_body(var_0D); + } + + so_players_give_loadout(); + return; + } + + if(var_0D == "so_killspree_paris_a") + { + level.so_campaign = "ranger"; + so_player_num(0); + so_player_giveweapon("fraggrenade"); + so_player_giveweapon("flash_grenade"); + so_player_set_setoffhandsecondaryclass("flash"); + so_player_giveweapon("pecheneg_so_fastreload"); + so_player_giveweapon("m320"); + so_player_set_switchtoweapon("pecheneg_so_fastreload"); + so_player_setup_body(0); + so_player_num(1); + so_player_giveweapon("fraggrenade"); + so_player_giveweapon("flash_grenade"); + so_player_set_setoffhandsecondaryclass("flash"); + so_player_giveweapon("pecheneg_so_fastreload"); + so_player_giveweapon("m320"); + so_player_set_switchtoweapon("m320"); + so_player_setup_body(1); + so_players_give_loadout(); + return; + } + + if(var_0D == "so_zodiac2_ny_harbor") + { + level.so_campaign = "delta"; + foreach(var_0D in level.players) + { + so_player_num(var_0E); + so_player_giveweapon(level.primary_weapon); + so_player_giveweapon(level.secondary_weapon); + so_player_set_switchtoweapon(level.primary_weapon); + so_player_giveweapon("fraggrenade"); + so_player_set_setoffhandsecondaryclass("flash"); + so_player_giveweapon("flash_grenade"); + so_player_setup_body(var_0E); + } + + so_players_give_loadout(); + return; + } + + if(var_0E == "so_jeep_paris_b") + { + level.so_campaign = "delta"; + foreach(var_0C in level.players) + { + so_player_num(var_0F); + var_0D = "m320"; + var_0E = "scar_h_grenadier_reflex"; + so_player_giveweapon(var_0D); + so_player_giveweapon(var_0E); + so_player_set_switchtoweapon(var_0D); + so_player_giveweapon("fraggrenade"); + so_player_giveweapon("flash_grenade"); + so_player_set_setoffhandsecondaryclass("flash"); + so_player_setup_body(var_0F); + } + + so_players_give_loadout(); + return; + } + + if(var_0F == "so_ac130_paris_ac130") + { + level.so_campaign = "delta"; + foreach(var_0D in level.players) + { + so_player_num(var_10); + var_0E = "m4m203_reflex"; + var_0F = "fnfiveseven"; + so_player_giveweapon(var_0E); + so_player_giveweapon(var_0F); + so_player_set_switchtoweapon(var_0E); + so_player_giveweapon("fraggrenade"); + so_player_giveweapon("flash_grenade"); + so_player_setup_body(var_10); + } + + so_players_give_loadout(); + return; + } + + if(var_10 == "so_stealth_prague") + { + level.so_campaign = "sas"; + level.so_stealth = 1; + level.coop_incap_weapon = "usp_silencer"; + foreach(var_0E in level.players) + { + so_player_num(var_11); + var_0F = "rsass_silenced"; + var_10 = "usp_silencer"; + so_player_giveweapon(var_0F); + so_player_giveweapon(var_10); + so_player_set_switchtoweapon(var_0F); + so_player_giveweapon("fraggrenade"); + so_player_giveweapon("flash_grenade"); + so_player_set_setoffhandsecondaryclass("flash"); + so_player_setup_body(var_11); + } + + so_players_give_loadout(); + return; + } + + if(var_11 == "so_stealth_london") + { + level.so_campaign = "sas"; + foreach(var_0F in level.players) + { + so_player_num(var_12); + var_10 = "mp5_silencer_eotech"; + var_11 = "usp_silencer"; + so_player_giveweapon(var_10); + so_player_giveweapon(var_11); + so_player_set_switchtoweapon(var_10); + so_player_giveweapon("fraggrenade"); + so_player_giveweapon("flash_grenade"); + so_player_set_setoffhandsecondaryclass("flash"); + so_player_setup_body(var_12); + } + + so_players_give_loadout(); + return; + } + + if(var_12 == "so_timetrial_london") + { + level.so_campaign = "sas"; + foreach(var_10 in level.players) + { + so_player_num(var_13); + var_11 = "mp5"; + var_12 = "spas12_silencer"; + so_player_giveweapon(var_11); + so_player_giveweapon(var_12); + so_player_set_switchtoweapon(var_11); + so_player_giveweapon("fraggrenade"); + so_player_giveweapon("flash_grenade"); + so_player_set_setoffhandsecondaryclass("flash"); + so_player_setup_body(var_13); + } + + so_players_give_loadout(); + return; + } + + if(var_13 == "so_assaultmine") + { + level.so_campaign = "delta"; + foreach(var_11 in level.players) + { + so_player_num(var_14); + var_12 = "rsass"; + var_13 = "acr_hybrid"; + so_player_giveweapon(var_12); + so_player_giveweapon(var_13); + so_player_set_switchtoweapon(var_12); + so_player_giveweapon("fraggrenade"); + so_player_giveweapon("flash_grenade"); + so_player_set_setoffhandsecondaryclass("flash"); + so_player_setup_body(var_14); + } + + so_players_give_loadout(); + return; + } + + if(var_14 == "so_deltacamp") + { + level.so_campaign = "delta"; + foreach(var_12 in level.players) + { + so_player_num(var_15); + var_13 = "acr"; + var_14 = "usp"; + so_player_giveweapon(var_13); + so_player_giveweapon(var_14); + so_player_set_switchtoweapon(var_13); + so_player_setup_body(var_15); + } + + so_players_give_loadout(); + return; + } + + if(var_15 == "so_trainer2_so_deltacamp") + { + level.so_campaign = "delta"; + foreach(var_13 in level.players) + { + so_player_num(var_16); + var_14 = "mp5"; + var_15 = "usp"; + so_player_giveweapon(var_14); + so_player_giveweapon(var_15); + so_player_set_switchtoweapon(var_14); + so_player_setup_body(var_16); + } + + so_players_give_loadout(); + return; + } + + if(var_16 == "so_milehigh_hijack") + { + level.so_campaign = "hijack"; + var_06 = 0; + while(var_16 < level.players.size) + { + so_player_num(var_16); + so_player_giveweapon("flash_grenade"); + so_player_set_setoffhandsecondaryclass("flash"); + so_player_giveweapon("ak47"); + so_player_giveweapon("fnfiveseven"); + so_player_set_switchtoweapon("ak47"); + so_player_setup_body(var_16); + var_16++; + } + + so_players_give_loadout(); + return; + } + + if(var_16 == "so_rescue_hijack") + { + level.so_campaign = "fso"; + level.coop_incap_weapon = "usp_silencer_so"; + foreach(var_16 in level.players) + { + so_player_num(var_17); + so_player_giveweapon("fraggrenade"); + so_player_giveweapon("usp_silencer_so"); + so_player_set_switchtoweapon("usp_silencer_so"); + so_player_setup_body(var_17); + } + + so_players_give_loadout(); + return; + } + + if(var_17 == "so_javelin_hamburg") + { + level.so_campaign = "delta"; + foreach(var_15 in level.players) + { + so_player_num(var_18); + var_16 = "javelin"; + var_17 = "scar_h_acog"; + so_player_giveweapon(var_16); + so_player_giveweapon(var_17); + so_player_set_switchtoweapon(var_16); + so_player_giveweapon("fraggrenade"); + so_player_giveweapon("flash_grenade"); + so_player_setup_body(var_18); + } + + so_players_give_loadout(); + return; + } + + if(var_18 == "so_assassin_payback") + { + level.so_campaign = "delta"; + so_player_num(0); + so_player_giveweapon(level.sniper_primary); + so_player_giveweapon(level.sniper_secondary); + so_player_set_switchtoweapon(level.sniper_primary); + so_player_giveweapon("fraggrenade"); + so_player_giveweapon("flash_grenade"); + so_player_setup_body(0); + so_player_num(1); + so_player_giveweapon(level.heavy_primary); + so_player_giveweapon(level.heavy_secondary); + so_player_set_switchtoweapon(level.heavy_primary); + so_player_giveweapon("fraggrenade"); + so_player_giveweapon("flash_grenade"); + so_player_setup_body(1); + so_players_give_loadout(); + return; + } + + if(maps\_utility::is_survival()) + { + level.so_campaign = "delta"; + level.coop_incap_weapon = "fnfiveseven_mp"; + give_default_loadout(); + return; + } + + level.testmap = 1; + level.so_campaign = "ranger"; + give_default_loadout(); +} + +//Function Number: 8 +possible_precache(param_00) +{ + foreach(var_02 in param_00) + { + precacheitem(var_02); + } +} + +//Function Number: 9 +give_default_loadout() +{ + if(maps\_utility::is_coop() || maps\_utility::is_survival()) + { + var_00 = char_switcher(); + foreach(var_03, var_02 in level.players) + { + give_default_loadout_coop(var_03); + } + + so_players_give_loadout(); + return; + } + + level.player giveweapon("fraggrenade"); + level.player setoffhandsecondaryclass("flash"); + level.player giveweapon("flash_grenade"); + if(maps\_utility::is_specialop()) + { + level.player giveweapon("m1014"); + } + + level.player giveweapon("mp5"); + level.player switchtoweapon("mp5"); + level.player setviewmodel("viewmodel_base_viewhands"); +} + +//Function Number: 10 +give_default_loadout_coop(param_00) +{ + so_player_num(param_00); + so_player_giveweapon("fraggrenade"); + so_player_giveweapon("flash_grenade"); + so_player_set_setoffhandsecondaryclass("flash"); + so_player_giveweapon("mp5"); + so_player_giveweapon("m1014"); + if(param_00 == 0) + { + so_player_set_switchtoweapon("mp5"); + } + else + { + so_player_set_switchtoweapon("m1014"); + } + + so_player_setup_body(param_00); +} + +//Function Number: 11 +saveplayerweaponstatepersistent(param_00,param_01) +{ + if(!isdefined(param_01)) + { + param_01 = 0; + } + + level.player endon("death"); + if(level.player.health == 0) + { + return; + } + + var_02 = level.player getcurrentprimaryweapon(); + if(!isdefined(var_02) || var_02 == "none") + { + } + + game["weaponstates"][param_00]["current"] = var_02; + var_03 = level.player getcurrentoffhand(); + game["weaponstates"][param_00]["offhand"] = var_03; + game["weaponstates"][param_00]["list"] = []; + var_04 = common_scripts\utility::array_combine(level.player getweaponslistprimaries(),level.player getweaponslistoffhands()); + for(var_05 = 0;var_05 < var_04.size;var_05++) + { + game["weaponstates"][param_00]["list"][var_05]["name"] = var_04[var_05]; + if(param_01) + { + game["weaponstates"][param_00]["list"][var_05]["clip"] = level.player getweaponammoclip(var_04[var_05]); + game["weaponstates"][param_00]["list"][var_05]["stock"] = level.player getweaponammostock(var_04[var_05]); + } + } +} + +//Function Number: 12 +restoreplayerweaponstatepersistent(param_00,param_01) +{ + if(!isdefined(param_01)) + { + param_01 = 0; + } + + if(!isdefined(game["weaponstates"])) + { + return 0; + } + + if(!isdefined(game["weaponstates"][param_00])) + { + return 0; + } + + level.player takeallweapons(); + for(var_02 = 0;var_02 < game["weaponstates"][param_00]["list"].size;var_02++) + { + var_03 = game["weaponstates"][param_00]["list"][var_02]["name"]; + if(isdefined(level.legit_weapons)) + { + if(!isdefined(level.legit_weapons[var_03])) + { + continue; + } + } + + if(var_03 == "c4") + { + continue; + } + + if(var_03 == "claymore") + { + continue; + } + + level.player giveweapon(var_03); + level.player givemaxammo(var_03); + if(param_01) + { + level.player setweaponammoclip(var_03,game["weaponstates"][param_00]["list"][var_02]["clip"]); + level.player setweaponammostock(var_03,game["weaponstates"][param_00]["list"][var_02]["stock"]); + } + } + + if(isdefined(level.legit_weapons)) + { + var_03 = game["weaponstates"][param_00]["offhand"]; + if(isdefined(level.legit_weapons[var_03])) + { + level.player switchtooffhand(var_03); + } + + var_03 = game["weaponstates"][param_00]["current"]; + if(isdefined(level.legit_weapons[var_03])) + { + level.player switchtoweapon(var_03); + } + } + else + { + level.player switchtooffhand(game["weaponstates"][param_00]["offhand"]); + level.player switchtoweapon(game["weaponstates"][param_00]["current"]); + } + + return 1; +} + +//Function Number: 13 +sniper_escape_initial_secondary_weapon_loadout() +{ + level.player giveweapon("claymore"); + level.player giveweapon("c4"); + if(level.gameskill >= 2) + { + level.player setweaponammoclip("claymore",10); + level.player setweaponammoclip("c4",6); + } + else + { + level.player setweaponammoclip("claymore",8); + level.player setweaponammoclip("c4",3); + } + + level.player setactionslot(4,"weapon","claymore"); + level.player setactionslot(2,"weapon","c4"); + level.player giveweapon("fraggrenade"); + level.player giveweapon("flash_grenade"); + level.player setoffhandsecondaryclass("flash"); + level.player setviewmodel("viewhands_marine_sniper"); +} + +//Function Number: 14 +set_legit_weapons_for_sniper_escape() +{ + var_00 = []; + var_00 = []; + level.legit_weapons = var_7B; +} + +//Function Number: 15 +set_legit_weapons_for_favela_escape() +{ + var_00 = []; + level.legit_weapons = var_7B; +} + +//Function Number: 16 +set_legit_weapons_for_dc_whitehouse() +{ + var_00 = []; + level.legit_weapons = var_7B; +} + +//Function Number: 17 +max_ammo_on_legit_sniper_escape_weapon() +{ + var_00 = level.player getweaponslistall(); + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + var_02 = var_00[var_01]; + if(!isdefined(level.legit_weapons[var_02])) + { + continue; + } + + if(var_02 == "rpg") + { + continue; + } + + level.player givemaxammo(var_02); + } +} + +//Function Number: 18 +force_player_to_use_legit_sniper_escape_weapon() +{ + var_00 = level.player getweaponslistall(); + var_01 = []; + var_02 = 0; + for(var_03 = 0;var_03 < var_00.size;var_03++) + { + var_04 = var_00[var_03]; + var_01[var_04] = 1; + if(isdefined(level.legit_weapons[var_04])) + { + var_02++; + continue; + } + + level.player takeweapon(var_04); + } + + if(var_02 == 2) + { + return; + } + + if(var_02 == 0) + { + level.player giveweapon("ak47"); + level.player switchtoweapon("ak47"); + } + + if(!isdefined(var_01[level.sniperescape_main_weapon]) && !isdefined(var_01["dragunov"])) + { + level.player giveweapon(level.sniperescape_main_weapon); + level.player switchtoweapon(level.sniperescape_main_weapon); + } +} + +//Function Number: 19 +coop_gamesetup_menu() +{ + maps\_gameskill::setglobaldifficulty(); + foreach(var_01 in level.players) + { + var_01 maps\_gameskill::setdifficulty(); + } + + level.character_switched = 0; + common_scripts\utility::flag_init("character_selected"); + var_03 = ""; + var_04 = []; + var_04 = strtok(var_03," "); + foreach(var_06 in var_04) + { + if(var_06 == level.script) + { + common_scripts\utility::flag_set("character_selected"); + } + } + + var_08 = "so_ac130_co_hunted co_hunted co_ac130"; + var_09 = []; + var_09 = strtok(var_08," "); + foreach(var_06 in var_09) + { + if(maps\_utility::is_coop() && var_06 == level.script) + { + var_0B = getdvar("ui_ac130_pilot_num"); + if(isdefined(var_0B) && var_0B != "0") + { + level.character_switched = 1; + } + + common_scripts\utility::flag_set("character_selected"); + } + } +} + +//Function Number: 20 +coop_gamesetup_ac130() +{ + if(level.specops_character_selector == "so_char_host") + { + return level.players[0]; + } + + if(level.specops_character_selector == "so_char_client") + { + return level.players[1]; + } + + return level.players[0]; +} + +//Function Number: 21 +give_default_loadout_specialops() +{ + foreach(var_02, var_01 in level.players) + { + so_player_num(var_02); + so_player_giveweapon("fraggrenade"); + so_player_giveweapon("flash_grenade"); + so_player_set_setoffhandsecondaryclass("flash"); + so_player_giveweapon("mp5"); + so_player_giveweapon("m1014"); + so_player_set_switchtoweapon("mp5"); + so_player_setup_body(var_02); + } + + so_players_give_loadout(); +} + +//Function Number: 22 +so_player_num(param_00) +{ + level.so_player_num = param_00; + level.so_player_add_player_giveweapon[param_00] = []; + if(!isdefined(level.so_player_set_maxammo)) + { + level.so_player_set_maxammo = []; + } + + if(!isdefined(level.so_player_set_setviewmodel)) + { + level.so_player_set_setviewmodel = []; + } + + if(!isdefined(level.so_player_add_player_giveweapon)) + { + level.so_player_add_player_giveweapon = []; + } + + if(!isdefined(level.so_player_set_setoffhandsecondaryclass)) + { + level.so_player_set_setoffhandsecondaryclass = []; + } + + if(!isdefined(level.so_player_set_switchtoweapon)) + { + level.so_player_set_switchtoweapon = []; + } + + if(!isdefined(level.so_player_setmodelfunc)) + { + level.so_player_setmodelfunc = []; + } + + if(!isdefined(level.so_player_setmodelfunc_precache)) + { + level.so_player_setmodelfunc_precache = []; + } + + if(!isdefined(level.so_player_setactionslot)) + { + level.so_player_setactionslot = []; + } + + level.so_player_set_maxammo[param_00] = []; + level.so_player_set_setoffhandsecondaryclass[param_00] = []; + level.so_player_add_player_giveweapon[param_00] = []; +} + +//Function Number: 23 +so_player_giveweapon(param_00) +{ + var_01 = level.so_player_num; + if(!level.character_selected) + { + precacheitem(param_00); + } + + level.so_player_add_player_giveweapon[var_01][param_00] = 1; +} + +//Function Number: 24 +so_player_set_maxammo(param_00) +{ + var_01 = level.so_player_num; + level.so_player_set_maxammo[var_01][param_00] = 1; +} + +//Function Number: 25 +so_player_set_setoffhandsecondaryclass(param_00) +{ + var_01 = level.so_player_num; + level.so_player_set_setoffhandsecondaryclass[var_01] = param_00; +} + +//Function Number: 26 +so_player_set_switchtoweapon(param_00) +{ + var_01 = level.so_player_num; + level.so_player_set_switchtoweapon[var_01] = param_00; +} + +//Function Number: 27 +so_player_set_setviewmodel(param_00) +{ + var_01 = level.so_player_num; + if(!level.character_selected) + { + precachemodel(param_00); + } + + level.so_player_set_setviewmodel[var_01] = param_00; +} + +//Function Number: 28 +so_player_setmodelfunc(param_00,param_01) +{ + var_02 = level.so_player_num; + level.so_player_setmodelfunc[var_02] = param_00; + if(!level.character_selected) + { + [[ param_01 ]](); + } +} + +//Function Number: 29 +so_player_setactionslot(param_00,param_01,param_02) +{ + var_03 = level.so_player_num; + var_04 = spawnstruct(); + var_04.slot = param_00; + var_04.parm1 = param_01; + if(isdefined(param_02)) + { + var_04.parm2 = param_02; + } + + if(isdefined(level.so_player_setactionslot[var_03])) + { + var_05 = level.so_player_setactionslot[var_03].size; + } + else + { + var_05 = 0; + } + + level.so_player_setactionslot[var_03][var_05] = var_04; +} + +//Function Number: 30 +so_player_give_loadout(param_00) +{ + var_01 = self; + if(isdefined(level.so_player_setmodelfunc[param_00])) + { + var_01 maps\_utility::setmodelfunc(level.so_player_setmodelfunc[param_00]); + var_01 setanim(%code,1,0); + } + + var_02 = getarraykeys(level.so_player_add_player_giveweapon[param_00]); + foreach(var_04 in var_02) + { + var_01 giveweapon(var_04); + if(isdefined(level.so_player_set_maxammo[param_00][var_04])) + { + var_01 givemaxammo(var_04); + } + } + + if(isdefined(level.so_player_set_setoffhandsecondaryclass[param_00])) + { + var_01 setoffhandsecondaryclass("flash"); + } + + if(isdefined(level.so_player_setactionslot[param_00])) + { + var_01 so_players_give_action(param_00); + } + + if(isdefined(level.so_player_set_switchtoweapon[param_00])) + { + var_01 switchtoweapon(level.so_player_set_switchtoweapon[param_00]); + } + + if(isdefined(level.so_player_set_setviewmodel[param_00])) + { + var_01 setviewmodel(level.so_player_set_setviewmodel[param_00]); + } +} + +//Function Number: 31 +so_players_give_action(param_00) +{ + var_01 = self; + foreach(var_03 in level.so_player_setactionslot[param_00]) + { + if(isdefined(var_03.parm2)) + { + var_01 setactionslot(var_03.slot,var_03.parm1,var_03.parm2); + continue; + } + + var_01 setactionslot(var_03.slot,var_03.parm1); + } +} + +//Function Number: 32 +so_players_give_loadout() +{ + foreach(var_02, var_01 in level.players) + { + var_01 so_player_give_loadout(var_02); + } +} + +//Function Number: 33 +updatemodel(param_00) +{ + self notify("newupdatemodel"); + if(!isdefined(param_00)) + { + self detachall(); + self setmodel(""); + return; + } + + self.last_modelfunc = param_00; + if(isdefined(self.is_hidden) && self.is_hidden) + { + return; + } + + self endon("newupdatemodel"); + for(;;) + { + self detachall(); + [[ param_00 ]](); + self updateplayermodelwithweapons(); + common_scripts\utility::waittill_any_return("weapon_change","weaponchange","player_update_model","player_downed","not_in_last_stand"); + } +} + +//Function Number: 34 +so_player_setup_body(param_00) +{ + so_player_set_setviewmodel(so_player_get_hands()); + if(maps\_utility::is_coop() || maps\_utility::is_survival()) + { + so_player_setmodelfunc(so_player_get_bodyfunc(param_00),so_player_get_bodyfunc_precache(param_00)); + } +} + +//Function Number: 35 +so_player_get_bodyfunc(param_00) +{ + switch(level.so_campaign) + { + case "ranger": + return ::so_body_player_ranger; + + case "seal": + return ::so_body_player_seal; + + case "arctic": + return ::so_body_player_arctic; + + case "woodland": + return ::so_body_player_woodland; + + case "desert": + return ::so_body_player_desert; + + case "ghillie": + return ::so_body_player_ghillie; + + case "delta": + return ::so_body_player_delta; + + case "sas": + return ::so_body_player_sas; + + case "hijack": + if(param_00 == 0) + { + return ::so_body_player_hijack_1; + } + else + { + return ::so_body_player_hijack_2; + } + + break; + + case "fso": + if(param_00 == 0) + { + return ::so_body_player_fso_1; + } + else + { + return ::so_body_player_fso_2; + } + + break; + + default: + break; + } +} + +//Function Number: 36 +so_player_get_bodyfunc_precache(param_00) +{ + switch(level.so_campaign) + { + case "ranger": + return ::so_body_player_ranger_precache; + + case "seal": + return ::so_body_player_seal_precache; + + case "arctic": + return ::so_body_player_arctic_precache; + + case "woodland": + return ::so_body_player_woodland_precache; + + case "desert": + return ::so_body_player_desert_precache; + + case "ghillie": + return ::so_body_player_ghillie_precache; + + case "delta": + return ::so_body_player_delta_precache; + + case "sas": + return ::so_body_player_sas_precache; + + case "hijack": + if(param_00 == 0) + { + return ::so_body_player_hijack_precache_1; + } + else + { + return ::so_body_player_hijack_precache_2; + } + + break; + + case "fso": + if(param_00 == 0) + { + return ::so_body_player_fso_precache_1; + } + else + { + return ::so_body_player_fso_precache_2; + } + + break; + } +} + +//Function Number: 37 +so_player_get_hands() +{ + switch(level.so_campaign) + { + case "ranger": + return "viewmodel_base_viewhands"; + + case "seal": + return "viewhands_udt"; + + case "arctic": + return "viewhands_arctic"; + + case "woodland": + return "viewhands_sas_woodland"; + + case "desert": + return "viewhands_tf141"; + + case "ghillie": + return "viewhands_marine_sniper"; + + case "delta": + return "viewhands_delta"; + + case "sas": + return "viewhands_sas"; + + case "hijack": + return "viewhands_henchmen"; + + case "fso": + return "viewhands_fso"; + } +} + +//Function Number: 38 +so_body_player_ranger() +{ + self setmodel("coop_body_us_army"); + self attach("coop_head_us_army","",1); +} + +//Function Number: 39 +so_body_player_seal() +{ + self setmodel("coop_body_seal_udt"); + self attach("coop_head_seal_udt","",1); +} + +//Function Number: 40 +so_body_player_arctic() +{ + self setmodel("coop_body_tf141_arctic"); + self attach("coop_head_tf141_arctic","",1); +} + +//Function Number: 41 +so_body_player_woodland() +{ + self setmodel("coop_body_tf141_forest"); + self attach("coop_head_tf141_forest","",1); +} + +//Function Number: 42 +so_body_player_desert() +{ + self setmodel("coop_body_tf141_desert"); + self attach("coop_head_tf141_desert","",1); +} + +//Function Number: 43 +so_body_player_ghillie() +{ + self setmodel("coop_body_ghillie_forest"); + self attach("coop_head_ghillie_forest","",1); +} + +//Function Number: 44 +so_body_player_delta() +{ + self setmodel("mp_body_delta_elite_assault_bb"); + self attach("head_delta_elite_a","",1); +} + +//Function Number: 45 +so_body_player_sas() +{ + self setmodel("body_mp_sas_urban_specops"); +} + +//Function Number: 46 +so_body_player_hijack_1() +{ + self setmodel("mp_body_henchmen_assault_d"); + self attach("head_henchmen_a","",1); +} + +//Function Number: 47 +so_body_player_hijack_2() +{ + self setmodel("mp_body_henchmen_shotgun_a"); + self attach("head_henchmen_c","",1); +} + +//Function Number: 48 +so_body_player_fso_1() +{ + self setmodel("mp_body_fso_vest_c_dirty"); + self attach("head_fso_e_dirty","",1); +} + +//Function Number: 49 +so_body_player_fso_2() +{ + self setmodel("mp_body_fso_vest_d_dirty"); + self attach("head_fso_d_dirty","",1); +} + +//Function Number: 50 +so_body_player_ranger_precache() +{ + precachemodel("coop_body_us_army"); + precachemodel("coop_head_us_army"); +} + +//Function Number: 51 +so_body_player_seal_precache() +{ + precachemodel("coop_body_seal_udt"); + precachemodel("coop_head_seal_udt"); +} + +//Function Number: 52 +so_body_player_arctic_precache() +{ + precachemodel("coop_body_tf141_arctic"); + precachemodel("coop_head_tf141_arctic"); +} + +//Function Number: 53 +so_body_player_woodland_precache() +{ + precachemodel("coop_body_tf141_forest"); + precachemodel("coop_head_tf141_forest"); +} + +//Function Number: 54 +so_body_player_desert_precache() +{ + precachemodel("coop_body_tf141_desert"); + precachemodel("coop_head_tf141_desert"); +} + +//Function Number: 55 +so_body_player_ghillie_precache() +{ + precachemodel("coop_body_ghillie_forest"); + precachemodel("coop_head_ghillie_forest"); +} + +//Function Number: 56 +so_body_player_delta_precache() +{ + precachemodel("mp_body_delta_elite_assault_bb"); + precachemodel("head_delta_elite_a"); +} + +//Function Number: 57 +so_body_player_sas_precache() +{ + precachemodel("body_mp_sas_urban_specops"); +} + +//Function Number: 58 +so_body_player_hijack_precache_1() +{ + precachemodel("mp_body_henchmen_assault_d"); + precachemodel("head_henchmen_a"); +} + +//Function Number: 59 +so_body_player_hijack_precache_2() +{ + precachemodel("mp_body_henchmen_shotgun_a"); + precachemodel("head_henchmen_c"); +} + +//Function Number: 60 +so_body_player_fso_precache_1() +{ + precachemodel("mp_body_fso_vest_c_dirty"); + precachemodel("head_fso_e_dirty"); +} + +//Function Number: 61 +so_body_player_fso_precache_2() +{ + precachemodel("mp_body_fso_vest_d_dirty"); + precachemodel("head_fso_d_dirty"); +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_menus.gsc b/MW3/PC/SP/maps/_menus.gsc new file mode 100644 index 0000000..dab6f68 --- /dev/null +++ b/MW3/PC/SP/maps/_menus.gsc @@ -0,0 +1,952 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_menus.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 41 + * Decompile Time: 552 ms + * Timestamp: 10/27/2023 2:20:11 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + precachemenu("uiScript_startMultiplayer"); + precacheshader("black"); + precacheshader("white"); + precacheshader("menu_button"); + precacheshader("menu_button_selected"); + precacheshader("menu_button_fade"); + precacheshader("menu_button_fade_selected"); + precacheshader("menu_button_faderight"); + precacheshader("menu_button_faderight_selected"); + precacheshader("menu_caret_open"); + precacheshader("menu_caret_closed"); + thread initthumbsticklayout(); + thread initbuttonlayout(); + thread initsensitivity(); + thread initinversion(); + thread initautoaim(); + thread initvibration(); + level.menustack = []; + var_00 = createmenu("levels"); + var_01 = setupaction(::loadmap,"cqb_1"); + var_02 = spawnstruct(); + var_02.display = &"MENU_1ST_PASS"; + var_02.xpos = 240; + var_02.ypos = 100; + var_00 additem(&"MENU_CQB_TEST",var_01,"loadmap",var_02); + var_01 = setupaction(::loadmap,"descent"); + var_02 = spawnstruct(); + var_02.display = &"MENU_1ST_PASS"; + var_02.xpos = 240; + var_02.ypos = 100; + var_00 additem(&"MENU_BUNKER",var_01,"loadmap",var_02); + var_01 = setupaction(::loadmap,"aftermath"); + var_02 = spawnstruct(); + var_02.display = &"MENU_100_INITIAL_GEO"; + var_02.xpos = 240; + var_02.ypos = 100; + var_00 additem(&"MENU_AFTERMATH",var_01,"loadmap",var_02); + var_01 = setupaction(::loadmap,"chechnya_escape"); + var_02 = spawnstruct(); + var_02.display = &"MENU_40_INITIAL_GEO"; + var_02.xpos = 240; + var_02.ypos = 100; + var_00 additem(&"MENU_CHECHNYA_ESCAPE",var_01,"loadmap",var_02); + var_01 = setupaction(::loadmap,"marksman"); + var_02 = spawnstruct(); + var_02.display = &"MENU_25_SCRIPTED"; + var_02.xpos = 240; + var_02.ypos = 100; + var_00 additem(&"MENU_MARKSMAN",var_01,"loadmap",var_02); + var_01 = setupaction(::loadmap,"seaknight_defend"); + var_02 = spawnstruct(); + var_02.display = &"MENU_PROTOTYPE_LEVEL_30_SCRIPTED"; + var_02.xpos = 240; + var_02.ypos = 100; + var_00 additem(&"MENU_SEAKNIGHT_DEFEND",var_01,"loadmap",var_02); + var_01 = setupaction(::loadmap,"wetwork"); + var_02 = spawnstruct(); + var_02.display = &"MENU_100_INITIAL_GEO"; + var_02.xpos = 240; + var_02.ypos = 100; + var_00 additem(&"MENU_WETWORK",var_01,"loadmap",var_02); + var_01 = setupaction(::loadmap,"cargoship"); + var_02 = spawnstruct(); + var_02.display = &"MENU_10_SCRIPTED"; + var_02.xpos = 240; + var_02.ypos = 100; + var_00 additem(&"MENU_CARGOSHIP",var_01,"loadmap",var_02); + var_01 = setupaction(::loadmap,"bog"); + var_02 = spawnstruct(); + var_02.display = &"MENU_35_INITIAL_GEO"; + var_02.xpos = 240; + var_02.ypos = 100; + var_00 additem(&"MENU_BOG",var_01,"loadmap",var_02); + var_01 = setupaction(::loadmap,"training"); + var_02 = spawnstruct(); + var_02.display = &"MENU_5_SCRIPTED"; + var_02.xpos = 240; + var_02.ypos = 100; + var_00 additem(&"MENU_TRAINING1",var_01,"loadmap",var_02); + var_01 = setupaction(::loadmap,"ac130"); + var_02 = spawnstruct(); + var_02.display = &"MENU_30"; + var_02.xpos = 240; + var_02.ypos = 100; + var_00 additem(&"MENU_AC130",var_01,"loadmap",var_02); + var_01 = setupaction(::loadmap,"seaknight_assault"); + var_02 = spawnstruct(); + var_02.display = &"MENU_INITIAL_GEO_IN_PROGRESS"; + var_02.xpos = 240; + var_02.ypos = 100; + var_00 additem(&"MENU_SEAKNIGHT_ASSAULT",var_01,"loadmap",var_02); + var_01 = setupaction(::loadmap,"pilotcobra"); + var_02 = spawnstruct(); + var_02.display = &"MENU_INITIAL_GEO_IN_PROGRESS"; + var_02.xpos = 240; + var_02.ypos = 100; + var_00 additem(&"MENU_PILOT_COBRA",var_01,"loadmap",var_02); + var_03 = createmenu_controls("controls"); + var_04 = spawnstruct(); + var_04.index = 0; + var_04.dvar = "controls_sticksConfig"; + var_04.value[0] = "thumbstick_default"; + var_04.value[1] = "thumbstick_southpaw"; + var_04.value[2] = "thumbstick_legacy"; + var_04.value[3] = "thumbstick_legacysouthpaw"; + var_04.display[0] = "Default"; + var_04.display[1] = "Southpaw"; + var_04.display[2] = "Legacy"; + var_04.display[3] = "Legacy Southpaw"; + var_03 additemsetting(&"MENU_THUMBSTICK_LAYOUT",undefined,undefined,undefined,var_04); + var_04 = spawnstruct(); + var_04.index = 0; + var_04.dvar = "controls_buttonConfig"; + var_04.value[0] = "buttons_default"; + var_04.value[1] = "buttons_tactical"; + var_04.value[2] = "buttons_lefty"; + var_04.value[3] = "buttons_finesthour"; + var_04.display[0] = "Default"; + var_04.display[1] = "Tactical"; + var_04.display[2] = "Lefty"; + var_04.display[3] = "Finest Hour"; + var_03 additemsetting(&"MENU_BUTTON_LAYOUT",undefined,undefined,undefined,var_04); + var_04 = spawnstruct(); + var_04.index = 1; + var_04.dvar = "controls_sensitivityConfig"; + var_04.value[0] = "sensitivity_low"; + var_04.value[1] = "sensitivity_medium"; + var_04.value[2] = "sensitivity_high"; + var_04.value[3] = "sensitivity_veryhigh"; + var_04.display[0] = "Low"; + var_04.display[1] = "Medium"; + var_04.display[2] = "High"; + var_04.display[3] = "Very High"; + var_03 additemsetting(&"MENU_LOOK_SENSITIVITY",undefined,undefined,undefined,var_04); + var_04 = spawnstruct(); + var_04.index = 0; + var_04.dvar = "controls_inversionConfig"; + var_04.value[0] = "inversion_disabled"; + var_04.value[1] = "inversion_enabled"; + var_04.display[0] = "Disabled"; + var_04.display[1] = "Enabled"; + var_03 additemsetting(&"MENU_LOOK_INVERSION",undefined,undefined,undefined,var_04); + var_04 = spawnstruct(); + var_04.index = 1; + var_04.dvar = "controls_autoaimConfig"; + var_04.value[0] = "autoaim_disabled"; + var_04.value[1] = "autoaim_enabled"; + var_04.display[0] = "Disabled"; + var_04.display[1] = "Enabled"; + var_03 additemsetting(&"MENU_AUTOAIM",undefined,undefined,undefined,var_04); + var_04 = spawnstruct(); + var_04.index = 1; + var_04.dvar = "controls_vibrationConfig"; + var_04.value[0] = "vibration_disabled"; + var_04.value[1] = "vibration_enabled"; + var_04.display[0] = "Disabled"; + var_04.display[1] = "Enabled"; + var_03 additemsetting(&"MENU_CONTROLLER_VIBRATION",undefined,undefined,undefined,var_04); + var_05 = createmenu("main"); + var_01 = setupaction(::pushmenu,var_00); + var_05 additem(&"MENU_SELECT_LEVEL",var_01,"openmenu_levels"); + var_06 = var_05 addsubmenu("options",&"MENU_OPTIONS"); + var_01 = setupaction(::pushmenu,var_03); + var_06 additem(&"MENU_CONTROLS",var_01); + var_06 additem(&"MENU_SUBTITLES"); + var_06 additem(&"MENU_SAVE_DEVICE"); + var_05 additem(&"MENU_CREDITS"); + var_01 = setupaction(::loadmultiplayer); + var_05 additem(&"MENU_MULTIPLAYER",var_01); + pushmenu(var_05); + level.player thread menuresponse(); +} + +//Function Number: 2 +void() +{ +} + +//Function Number: 3 +loadmap(param_00) +{ + changelevel(param_00); +} + +//Function Number: 4 +loadmultiplayer() +{ + level.player openpopupmenu("uiScript_startMultiplayer"); +} + +//Function Number: 5 +pushmenu(param_00) +{ + level.menustack[level.menustack.size] = param_00; + var_01 = level.curmenu; + level.curmenu = param_00; + if(param_00.menutype == "fullScreen") + { + if(isdefined(var_01)) + { + var_01 thread hidemenu(0.2,1); + } + + param_00 thread showmenu(0.2,1); + level notify("open_menu",level.curmenu.name); + } + else + { + param_00 thread expandmenu(0.2); + } + + level.player playsound("mouse_click"); +} + +//Function Number: 6 +popmenu() +{ + if(level.menustack.size == 1) + { + return; + } + + level.menustack[level.menustack.size - 1] = undefined; + var_00 = level.curmenu; + level.curmenu = level.menustack[level.menustack.size - 1]; + if(var_00.menutype == "subMenu") + { + var_00 thread collapsemenu(0.2); + level.curmenu updatemenu(0.2,1); + } + else + { + var_00 thread hidemenu(0.2,0); + level.curmenu thread showmenu(0.2,0); + level notify("close_menu",level.menustack.size); + } + + level.player playsound("mouse_click"); +} + +//Function Number: 7 +createmenu(param_00) +{ + var_01 = spawnstruct(); + var_01.name = param_00; + var_01.menutype = "fullScreen"; + var_01.itemdefs = []; + var_01.itemwidth = 120; + var_01.itemheight = 20; + var_01.itempadding = 0; + var_01.selectedindex = 0; + var_01.xpos = 80; + var_01.ypos = 100; + var_01.xoffset = 0; + var_01.yoffset = 0; + return var_01; +} + +//Function Number: 8 +createmenu_controls(param_00) +{ + var_01 = spawnstruct(); + var_01.name = param_00; + var_01.menutype = "fullScreen"; + var_01.itemdefs = []; + var_01.itemwidth = 420; + var_01.itemheight = 20; + var_01.itempadding = 0; + var_01.selectedindex = 0; + var_01.xpos = 80; + var_01.ypos = 100; + var_01.xoffset = 0; + var_01.yoffset = 0; + return var_01; +} + +//Function Number: 9 +createsubmenu(param_00) +{ + var_01 = spawnstruct(); + var_01.name = param_00; + var_01.menutype = "subMenu"; + var_01.itemdefs = []; + var_01.itemwidth = 120; + var_01.itemheight = 20; + var_01.itempadding = 0; + var_01.selectedindex = 0; + var_01.isexpanded = 0; + return var_01; +} + +//Function Number: 10 +additem(param_00,param_01,param_02,param_03) +{ + precachestring(param_00); + var_04 = spawnstruct(); + var_04.itemtype = "item"; + var_04.bgshader = "menu_button_selected"; + var_04.fgtext = param_00; + var_04.xpos = 0; + var_04.ypos = 0; + var_04.xoffset = 0; + var_04.yoffset = 0; + var_04.action = param_01; + var_04.event = param_02; + var_04.description = param_03; + var_04.parentdef = self; + var_04.index = self.itemdefs.size; + self.itemdefs[self.itemdefs.size] = var_04; +} + +//Function Number: 11 +additemsetting(param_00,param_01,param_02,param_03,param_04) +{ + precachestring(param_00); + var_05 = spawnstruct(); + var_05.itemtype = "settingMenu"; + var_05.bgshader = "menu_button_selected"; + var_05.fgtext = param_00; + var_05.xpos = 0; + var_05.ypos = 0; + var_05.xoffset = 0; + var_05.yoffset = 0; + var_05.action = param_01; + var_05.event = param_02; + var_05.description = param_03; + var_05.setting = param_04; + var_05.parentdef = self; + var_05.index = self.itemdefs.size; + self.itemdefs[self.itemdefs.size] = var_05; +} + +//Function Number: 12 +addsubmenu(param_00,param_01) +{ + var_02 = createsubmenu(param_00); + var_02.itemtype = "subMenu"; + var_02.bgshader = "menu_button_selected"; + var_02.fgtext = param_01; + var_02.xpos = 0; + var_02.ypos = 0; + var_02.xoffset = 20; + var_02.yoffset = self.itemheight + self.itempadding; + var_02.parentdef = self; + var_02.index = self.itemdefs.size; + self.itemdefs[self.itemdefs.size] = var_02; + return var_02; +} + +//Function Number: 13 +createitemelems() +{ + self.bgicon = maps\_hud_util::createicon(self.bgshader,self.parentdef.itemwidth,self.parentdef.itemheight); + self.bgicon.alpha = 0; + self.bgicon.sort = 0; + self.fontstring = maps\_hud_util::createfontstring("default",1.5); + self.fontstring.alpha = 0; + self.fontstring.sort = 100; + self.fontstring settext(self.fgtext); + if(self.itemtype == "settingMenu") + { + self.settingvalue = maps\_hud_util::createfontstring("default",1.5); + self.settingvalue.alpha = 0; + self.settingvalue.sort = 100; + updatedisplayvalue(); + } + + if(self.itemtype == "subMenu") + { + self.careticon = maps\_hud_util::createicon("menu_caret_closed",self.parentdef.itemheight,self.parentdef.itemheight); + self.careticon.alpha = 0; + self.careticon.sort = 100; + } + + if(isdefined(self.description)) + { + self.descriptionvalue = maps\_hud_util::createfontstring("default",1.5); + self.descriptionvalue.alpha = 0; + self.descriptionvalue.sort = 100; + self.descriptionvalue settext(self.description.display); + } +} + +//Function Number: 14 +destroyitemelems() +{ + if(self.itemtype == "subMenu") + { + self.careticon maps\_hud_util::destroyelem(); + } + + if(self.itemtype == "settingMenu") + { + self.settingvalue maps\_hud_util::destroyelem(); + } + + if(isdefined(self.descriptionvalue)) + { + self.descriptionvalue maps\_hud_util::destroyelem(); + } + + self.bgicon maps\_hud_util::destroyelem(); + self.fontstring maps\_hud_util::destroyelem(); +} + +//Function Number: 15 +setelempoints(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = 3; + self.bgicon maps\_hud_util::setpoint(param_00,param_01,param_02,param_03,param_04); + if(self.itemtype == "subMenu") + { + self.careticon maps\_hud_util::setpoint(param_00,param_01,param_02,param_03,param_04); + var_05 = var_05 + 16; + } + + if(self.itemtype == "settingMenu") + { + self.settingvalue maps\_hud_util::setpoint("TOPRIGHT",param_01,param_02 + var_05 + 400,param_03,param_04); + } + + if(isdefined(self.descriptionvalue)) + { + self.descriptionvalue maps\_hud_util::setpoint("TOPLEFT",param_01,self.description.xpos,self.description.ypos,param_04); + } + + self.fontstring maps\_hud_util::setpoint(param_00,param_01,param_02 + var_05,param_03,param_04); +} + +//Function Number: 16 +showmenu(param_00,param_01) +{ + var_02 = 0; + for(var_03 = 0;var_03 < self.itemdefs.size;var_03++) + { + var_04 = self.itemdefs[var_03]; + var_04 createitemelems(); + if(param_01) + { + var_04 setelempoints("TOPLEFT","TOPRIGHT",self.xpos,self.ypos + var_02); + } + else + { + var_04 setelempoints("TOPRIGHT","TOPLEFT",self.xpos,self.ypos + var_02); + } + + var_04.xpos = self.xpos; + var_04.ypos = self.ypos + var_02; + var_02 = var_02 + self.itemheight + self.itempadding; + if(var_04.itemtype == "subMenu" && var_04.isexpanded) + { + var_02 = var_02 + var_04 getmenuheight(); + } + } + + if(self.menutype == "subMenu") + { + self.parentdef showmenu(param_00,param_01); + } + + updatemenu(param_00,1); +} + +//Function Number: 17 +hidemenu(param_00,param_01) +{ + var_02 = 0; + for(var_03 = 0;var_03 < self.itemdefs.size;var_03++) + { + var_04 = self.itemdefs[var_03]; + var_05 = -1 * self.itemwidth; + if(param_01) + { + var_04 setelempoints("TOPRIGHT","TOPLEFT",self.xpos,self.ypos + var_02,param_00); + var_04.bgicon fadeovertime(param_00); + var_04.bgicon.alpha = 0; + var_04.fontstring fadeovertime(param_00); + var_04.fontstring.alpha = 0; + if(var_04.itemtype == "settingMenu") + { + var_04.settingvalue fadeovertime(param_00); + var_04.settingvalue.alpha = 0; + } + + if(var_04.itemtype == "subMenu") + { + var_04.careticon fadeovertime(param_00); + var_04.careticon.alpha = 0; + } + } + else + { + var_04 setelempoints("TOPLEFT","TOPRIGHT",self.xpos,self.ypos + var_02,param_00); + var_04.bgicon fadeovertime(param_00); + var_04.bgicon.alpha = 0; + var_04.fontstring fadeovertime(param_00); + var_04.fontstring.alpha = 0; + if(var_04.itemtype == "settingMenu") + { + var_04.settingvalue fadeovertime(param_00); + var_04.settingvalue.alpha = 0; + } + + if(var_04.itemtype == "subMenu") + { + var_04.careticon fadeovertime(param_00); + var_04.careticon.alpha = 0; + } + } + + var_04.xpos = self.xpos; + var_04.ypos = self.ypos + var_02; + var_02 = var_02 + self.itemheight + self.itempadding; + if(var_04.itemtype == "subMenu" && var_04.isexpanded) + { + var_02 = var_02 + var_04 getmenuheight(); + } + } + + if(self.menutype == "subMenu") + { + self.parentdef thread hidemenu(param_00,param_01); + } + + wait param_00; + for(var_03 = 0;var_03 < self.itemdefs.size;var_03++) + { + var_04 = self.itemdefs[var_03]; + var_04 destroyitemelems(); + } +} + +//Function Number: 18 +collapsemenu(param_00) +{ + self.isexpanded = 0; + self.careticon setshader("menu_caret_closed",self.parentdef.itemheight,self.parentdef.itemheight); + var_01 = 0; + for(var_02 = 0;var_02 < self.itemdefs.size;var_02++) + { + var_03 = self.itemdefs[var_02]; + var_03 setelempoints("TOPLEFT","TOPLEFT",self.xpos,self.ypos,param_00); + var_03.bgicon fadeovertime(param_00); + var_03.bgicon.alpha = 0; + var_03.fontstring fadeovertime(param_00); + var_03.fontstring.alpha = 0; + if(var_03.itemtype == "subMenu") + { + var_03.careticon fadeovertime(param_00); + var_03.careticon.alpha = 0; + } + + var_03.xpos = self.xpos; + var_03.ypos = self.ypos; + } + + wait param_00; + for(var_02 = 0;var_02 < self.itemdefs.size;var_02++) + { + var_03 = self.itemdefs[var_02]; + var_03.bgicon maps\_hud_util::destroyelem(); + var_03.fontstring maps\_hud_util::destroyelem(); + if(var_03.itemtype == "subMenu") + { + var_03.careticon maps\_hud_util::destroyelem(); + } + } +} + +//Function Number: 19 +expandmenu(param_00) +{ + self.isexpanded = 1; + self.careticon setshader("menu_caret_open",self.parentdef.itemheight,self.parentdef.itemheight); + for(var_01 = 0;var_01 < self.itemdefs.size;var_01++) + { + var_02 = self.itemdefs[var_01]; + var_02 createitemelems(); + var_02 setelempoints("TOPLEFT","TOPLEFT",self.xpos + self.xoffset,self.ypos + self.yoffset); + var_02.xpos = self.xpos + self.xoffset; + var_02.ypos = self.ypos + self.yoffset; + } + + updatemenu(param_00,1); +} + +//Function Number: 20 +updatemenu(param_00,param_01) +{ + var_02 = self.xoffset; + var_03 = self.yoffset; + for(var_04 = 0;var_04 < self.itemdefs.size;var_04++) + { + var_05 = self.itemdefs[var_04]; + var_05 setselected(param_00,var_04 == self.selectedindex); + var_06 = var_05.xpos; + var_07 = var_05.ypos; + if(param_01 || self.xpos + var_02 != var_06 || self.ypos + var_03 != var_07) + { + var_05 setelempoints("TOPLEFT","TOPLEFT",self.xpos + var_02,self.ypos + var_03,param_00); + var_05.xpos = self.xpos + var_02; + var_05.ypos = self.ypos + var_03; + } + + var_03 = var_03 + self.itemheight + self.itempadding; + if(var_05.itemtype == "subMenu" && var_05.isexpanded) + { + var_03 = var_03 + var_05 getmenuheight(); + } + } + + if(isdefined(self.parentdef)) + { + self.parentdef thread updatemenu(param_00,param_01); + } +} + +//Function Number: 21 +setselected(param_00,param_01) +{ + self.bgicon fadeovertime(param_00); + self.fontstring fadeovertime(param_00); + if(isdefined(self.settingvalue)) + { + self.settingvalue fadeovertime(param_00); + } + + if(isdefined(self.descriptionvalue)) + { + self.descriptionvalue fadeovertime(param_00); + } + + if(param_01) + { + if(self.parentdef == level.curmenu) + { + setelemalpha(1); + } + else + { + setelemalpha(0.5); + } + + if(isdefined(self.descriptionvalue)) + { + self.descriptionvalue.alpha = 1; + return; + } + + return; + } + + if(self.parentdef == level.curmenu) + { + setelemalpha(0.5); + } + else + { + setelemalpha(0.25); + } + + if(isdefined(self.descriptionvalue)) + { + self.descriptionvalue.alpha = 0; + } +} + +//Function Number: 22 +setelemalpha(param_00) +{ + self.bgicon.alpha = param_00; + self.fontstring.alpha = param_00; + if(self.itemtype == "settingMenu") + { + self.settingvalue.alpha = param_00; + } + + if(self.itemtype == "subMenu") + { + self.careticon.alpha = param_00; + } +} + +//Function Number: 23 +setelemcolor(param_00) +{ + self.fontstring.color = param_00; +} + +//Function Number: 24 +getmenuheight() +{ + var_00 = 0; + for(var_01 = 0;var_01 < self.itemdefs.size;var_01++) + { + var_02 = self.itemdefs[var_01]; + var_00 = var_00 + self.itemheight + self.itempadding; + if(var_02.itemtype == "subMenu" && var_02.isexpanded) + { + var_00 = var_00 + var_02 getmenuheight(); + } + } + + return var_00; +} + +//Function Number: 25 +ondpadup() +{ + self.selectedindex--; + if(self.selectedindex < 0) + { + self.selectedindex = self.itemdefs.size - 1; + } + + updatemenu(0.1,0); + level.player playsound("mouse_over"); +} + +//Function Number: 26 +ondpaddown() +{ + self.selectedindex++; + if(self.selectedindex >= self.itemdefs.size) + { + self.selectedindex = 0; + } + + updatemenu(0.1,0); + level.player playsound("mouse_over"); +} + +//Function Number: 27 +onbuttonb() +{ + popmenu(); +} + +//Function Number: 28 +onbuttona() +{ + var_00 = self.itemdefs[self.selectedindex]; + if(var_00.itemtype == "subMenu") + { + pushmenu(var_00); + return; + } + + if(var_00.itemtype == "item") + { + var_00 thread runaction(); + } +} + +//Function Number: 29 +ondpadleft() +{ + var_00 = self.itemdefs[self.selectedindex]; + if(var_00.itemtype == "settingMenu") + { + var_01 = getdvar(var_00.setting.dvar); + var_02 = var_00.setting.value; + var_03 = 0; + for(var_04 = 0;var_04 < var_02.size;var_04++) + { + var_05 = var_02[var_04]; + if(var_05 != var_01) + { + continue; + } + + var_03 = var_04 - 1; + if(var_03 >= 0) + { + var_00.setting.index = var_03; + setdvar(var_00.setting.dvar,var_02[var_03]); + var_00 updatedisplayvalue(); + level.player playsound("mouse_over"); + } + + break; + } + } +} + +//Function Number: 30 +ondpadright() +{ + var_00 = self.itemdefs[self.selectedindex]; + if(var_00.itemtype == "settingMenu") + { + var_01 = getdvar(var_00.setting.dvar); + var_02 = var_00.setting.value; + var_03 = 0; + for(var_04 = 0;var_04 < var_02.size;var_04++) + { + var_05 = var_02[var_04]; + if(var_05 != var_01) + { + continue; + } + + var_03 = var_04 + 1; + if(var_03 <= var_00.setting.value.size - 1) + { + var_00.setting.index = var_03; + setdvar(var_00.setting.dvar,var_02[var_03]); + var_00 updatedisplayvalue(); + level.player playsound("mouse_over"); + } + + break; + } + } +} + +//Function Number: 31 +initthumbsticklayout() +{ + setdvar("controls_sticksConfig","thumbstick_default"); +} + +//Function Number: 32 +initbuttonlayout() +{ + setdvar("controls_buttonConfig","buttons_default"); +} + +//Function Number: 33 +initsensitivity() +{ + setdvar("controls_sensitivityConfig","sensitivity_medium"); +} + +//Function Number: 34 +initinversion() +{ + setdvar("controls_inversionConfig","inversion_disabled"); +} + +//Function Number: 35 +initautoaim() +{ + setdvar("controls_autoaimConfig","autoaim_enabled"); +} + +//Function Number: 36 +initvibration() +{ + setdvar("controls_vibrationConfig","vibration_enabled"); +} + +//Function Number: 37 +updatedisplayvalue() +{ + self.settingvalue settext(self.setting.display[self.setting.index]); +} + +//Function Number: 38 +setupaction(param_00,param_01,param_02) +{ + var_03 = spawnstruct(); + var_03.name = param_00; + if(isdefined(param_01)) + { + var_03.arg1 = param_01; + } + + if(isdefined(param_02)) + { + var_03.arg2 = param_02; + } + + return var_03; +} + +//Function Number: 39 +runaction() +{ + if(isdefined(self.action)) + { + if(isdefined(self.action.arg1)) + { + thread [[ self.action.name ]](self.action.arg1); + } + else + { + thread [[ self.action.name ]](); + } + } + + if(isdefined(self.event)) + { + level notify(self.event); + } +} + +//Function Number: 40 +testaction() +{ + level.marine setgoalnode(getnode("node2","targetname")); + level.camera attachpath(getvehiclenode("path2","targetname")); + thread maps\_vehicle::gopath(level.camera); +} + +//Function Number: 41 +menuresponse() +{ + for(;;) + { + self waittill("menuresponse",var_00,var_01); + switch(var_01) + { + case "DPAD_UP": + level.curmenu ondpadup(); + break; + + case "DPAD_DOWN": + level.curmenu ondpaddown(); + break; + + case "DPAD_LEFT": + level.curmenu ondpadleft(); + break; + + case "DPAD_RIGHT": + level.curmenu ondpadright(); + break; + + case "BUTTON_A": + level.curmenu onbuttona(); + break; + + case "BUTTON_B": + level.curmenu onbuttonb(); + break; + } + } +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_mg_penetration.gsc b/MW3/PC/SP/maps/_mg_penetration.gsc new file mode 100644 index 0000000..734688e --- /dev/null +++ b/MW3/PC/SP/maps/_mg_penetration.gsc @@ -0,0 +1,356 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_mg_penetration.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 16 + * Decompile Time: 203 ms + * Timestamp: 10/27/2023 2:25:06 AM +*******************************************************************/ + +//Function Number: 1 +gunner_think(param_00) +{ + self endon("death"); + self notify("end_mg_behavior"); + self endon("end_mg_behavior"); + self.can_fire_turret = 1; + self.wants_to_fire = 0; + if(!maps\_mgturret::use_the_turret(param_00)) + { + self notify("continue_cover_script"); + return; + } + + self.last_enemy_sighting_position = undefined; + thread record_enemy_sightings(); + var_01 = anglestoforward(param_00.angles); + var_02 = spawn("script_origin",(0,0,0)); + thread target_ent_cleanup(var_02); + var_02.origin = param_00.origin + var_01 * 500; + if(isdefined(self.last_enemy_sighting_position)) + { + var_02.origin = self.last_enemy_sighting_position; + } + + param_00 settargetentity(var_02); + var_03 = undefined; + for(;;) + { + if(!isalive(self.current_enemy)) + { + stop_firing(); + self waittill("new_enemy"); + } + + start_firing(); + shoot_enemy_until_he_hides_then_shoot_wall(var_02); + if(!isalive(self.current_enemy)) + { + continue; + } + + if(self cansee(self.current_enemy)) + { + continue; + } + + self waittill("saw_enemy"); + } +} + +//Function Number: 2 +target_ent_cleanup(param_00) +{ + common_scripts\utility::waittill_either("death","end_mg_behavior"); + param_00 delete(); +} + +//Function Number: 3 +shoot_enemy_until_he_hides_then_shoot_wall(param_00) +{ + self endon("death"); + self endon("new_enemy"); + self.current_enemy endon("death"); + var_01 = self.current_enemy; + while(self cansee(var_01)) + { + var_02 = vectortoangles(var_01 geteye() - param_00.origin); + var_02 = anglestoforward(var_02); + param_00 moveto(param_00.origin + var_02 * 12,0.1); + wait 0.1; + } + + if(isplayer(var_01)) + { + self endon("saw_enemy"); + var_03 = var_01 geteye(); + var_02 = vectortoangles(var_03 - param_00.origin); + var_02 = anglestoforward(var_02); + var_04 = 150; + var_05 = distance(param_00.origin,self.last_enemy_sighting_position) / var_04; + if(var_05 > 0) + { + param_00 moveto(self.last_enemy_sighting_position,var_05); + wait var_05; + } + + var_06 = param_00.origin + var_02 * 180; + var_07 = get_suppress_point(self geteye(),param_00.origin,var_06); + if(!isdefined(var_07)) + { + var_07 = param_00.origin; + } + + param_00 moveto(param_00.origin + var_02 * 80 + (0,0,randomfloatrange(15,50) * -1),3,1,1); + wait 3.5; + param_00 moveto(var_07 + var_02 * -20,3,1,1); + } + + wait randomfloatrange(2.5,4); + stop_firing(); +} + +//Function Number: 4 +set_firing(param_00) +{ + if(param_00) + { + self.can_fire_turret = 1; + if(self.wants_to_fire) + { + self.turret notify("startfiring"); + return; + } + + return; + } + + self.can_fire_turret = 0; + self.turret notify("stopfiring"); +} + +//Function Number: 5 +stop_firing() +{ + self.wants_to_fire = 0; + self.turret notify("stopfiring"); +} + +//Function Number: 6 +start_firing() +{ + self.wants_to_fire = 1; + if(self.can_fire_turret) + { + self.turret notify("startfiring"); + } +} + +//Function Number: 7 +create_mg_team() +{ + if(isdefined(level.mg_gunner_team)) + { + level.mg_gunner_team[level.mg_gunner_team.size] = self; + return; + } + + level.mg_gunner_team = []; + level.mg_gunner_team[level.mg_gunner_team.size] = self; + waittillframeend; + var_00 = spawnstruct(); + common_scripts\utility::array_thread(level.mg_gunner_team,::mg_gunner_death_notify,var_00); + var_01 = level.mg_gunner_team; + level.mg_gunner_team = undefined; + var_00 waittill("gunner_died"); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + if(!isalive(var_01[var_02])) + { + continue; + } + + var_01[var_02] notify("stop_using_built_in_burst_fire"); + var_01[var_02] thread solo_fires(); + } +} + +//Function Number: 8 +mg_gunner_death_notify(param_00) +{ + self waittill("death"); + param_00 notify("gunner_died"); +} + +//Function Number: 9 +mgteam_take_turns_firing(param_00) +{ + wait 1; + level notify("new_mg_firing_team" + param_00[0].script_noteworthy); + level endon("new_mg_firing_team" + param_00[0].script_noteworthy); + for(;;) + { + dual_firing(param_00); + solo_firing(param_00); + } +} + +//Function Number: 10 +solo_firing(param_00) +{ + var_01 = undefined; + for(var_02 = 0;var_02 < param_00.size;var_02++) + { + if(!isalive(param_00[var_02])) + { + continue; + } + + var_01 = param_00[var_02]; + break; + } + + if(!isdefined(var_01)) + { + } +} + +//Function Number: 11 +solo_fires() +{ + self endon("death"); + for(;;) + { + self.turret startfiring(); + wait randomfloatrange(0.3,0.7); + self.turret stopfiring(); + wait randomfloatrange(0.1,1.1); + } +} + +//Function Number: 12 +dual_firing(param_00) +{ + for(var_01 = 0;var_01 < param_00.size;var_01++) + { + param_00[var_01] endon("death"); + } + + var_02 = 0; + var_03 = 1; + for(;;) + { + if(isalive(param_00[var_02])) + { + param_00[var_02] set_firing(1); + } + + if(isalive(param_00[var_03])) + { + param_00[var_03] set_firing(0); + } + + var_04 = var_02; + var_02 = var_03; + var_03 = var_04; + wait randomfloatrange(2.3,3.5); + } +} + +//Function Number: 13 +spotted_an_enemy(param_00,param_01) +{ + start_firing(); + self endon("death"); + self endon("new_enemy"); + param_01 endon("death"); + while(self cansee(param_01)) + { + var_02 = vectortoangles(param_01 geteye() - param_00.origin); + var_02 = anglestoforward(var_02); + param_00 moveto(param_00.origin + var_02 * 10,0.2); + wait 0.2; + } + + var_02 = vectortoangles(param_01 geteye() - param_00.origin); + var_02 = anglestoforward(var_02); + var_03 = 150; + var_04 = distance(param_00.origin,self.last_enemy_sighting_position) / var_03; + param_00 moveto(self.last_enemy_sighting_position,var_04); + wait var_04; + var_05 = param_00.origin; + param_00 moveto(param_00.origin + var_02 * 80 + (0,0,-25),3,1,1); + wait 3.5; + param_00 moveto(var_05 + var_02 * -20,3,1,1); + wait 1; + stop_firing(); +} + +//Function Number: 14 +get_suppress_point(param_00,param_01,param_02) +{ + var_03 = distance(param_01,param_02) * 0.05; + if(var_03 < 5) + { + var_03 = 5; + } + + if(var_03 > 20) + { + var_03 = 20; + } + + var_04 = param_02 - param_01; + var_04 = (var_04[0] / var_03,var_04[1] / var_03,var_04[2] / var_03); + var_05 = (0,0,0); + var_06 = undefined; + for(var_07 = 0;var_07 < var_03 + 2;var_07++) + { + var_08 = bullettrace(param_00,param_01 + var_05,0,undefined); + if(var_08["fraction"] < 1) + { + var_06 = var_08["position"]; + break; + } + + var_05 = var_05 + var_04; + } + + return var_06; +} + +//Function Number: 15 +record_enemy_sightings() +{ + self endon("death"); + self endon("end_mg_behavior"); + self.current_enemy = undefined; + for(;;) + { + record_sighting(); + wait 0.05; + } +} + +//Function Number: 16 +record_sighting() +{ + if(!isalive(self.enemy)) + { + return; + } + + if(!self cansee(self.enemy)) + { + return; + } + + self.last_enemy_sighting_position = self.enemy geteye(); + self notify("saw_enemy"); + if(!isalive(self.current_enemy) || self.current_enemy != self.enemy) + { + self.current_enemy = self.enemy; + self notify("new_enemy"); + } +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_mgturret.gsc b/MW3/PC/SP/maps/_mgturret.gsc new file mode 100644 index 0000000..a063a91 --- /dev/null +++ b/MW3/PC/SP/maps/_mgturret.gsc @@ -0,0 +1,2022 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_mgturret.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 71 + * Decompile Time: 1202 ms + * Timestamp: 10/27/2023 2:24:05 AM +*******************************************************************/ + +//Function Number: 1 +init_mgturretsettings() +{ + level.mgturretsettings["easy"]["convergenceTime"] = 2.5; + level.mgturretsettings["easy"]["suppressionTime"] = 3; + level.mgturretsettings["easy"]["accuracy"] = 0.38; + level.mgturretsettings["easy"]["aiSpread"] = 2; + level.mgturretsettings["easy"]["playerSpread"] = 0.5; + level.mgturretsettings["medium"]["convergenceTime"] = 1.5; + level.mgturretsettings["medium"]["suppressionTime"] = 3; + level.mgturretsettings["medium"]["accuracy"] = 0.38; + level.mgturretsettings["medium"]["aiSpread"] = 2; + level.mgturretsettings["medium"]["playerSpread"] = 0.5; + level.mgturretsettings["hard"]["convergenceTime"] = 0.8; + level.mgturretsettings["hard"]["suppressionTime"] = 3; + level.mgturretsettings["hard"]["accuracy"] = 0.38; + level.mgturretsettings["hard"]["aiSpread"] = 2; + level.mgturretsettings["hard"]["playerSpread"] = 0.5; + level.mgturretsettings["fu"]["convergenceTime"] = 0.4; + level.mgturretsettings["fu"]["suppressionTime"] = 3; + level.mgturretsettings["fu"]["accuracy"] = 0.38; + level.mgturretsettings["fu"]["aiSpread"] = 2; + level.mgturretsettings["fu"]["playerSpread"] = 0.5; +} + +//Function Number: 2 +main() +{ + 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 +portable_mg_behavior() +{ + self detach("weapon_mg42_carry","tag_origin"); + self endon("death"); + self.goalradius = level.default_goalradius; + 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)) + { + return; + } + + if(var_01.type != "Turret") + { + return; + } + + var_02 = gettakennodes(); + var_02[self.node.origin + ""] = undefined; + if(isdefined(var_02[var_01.origin + ""])) + { + return; + } + + var_03 = var_01.turret; + if(isdefined(var_03.reserved)) + { + return; + } + + reserve_turret(var_03); + if(var_03.issetup) + { + leave_gun_and_run_to_new_spot(var_03); + } + else + { + run_to_new_spot_and_setup_gun(var_03); + } + + maps\_mg_penetration::gunner_think(var_01.turret); +} + +//Function Number: 4 +mg42_trigger() +{ + self waittill("trigger"); + level notify(self.targetname); + level.mg42_trigger[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].script_mg42auto) && param_00.script_mg42auto == var_01[var_02].script_mg42auto) + { + 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].script_mg42auto) && param_00.script_mg42auto == var_03[var_02].script_mg42auto) + { + 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.suppresionfire)) + { + self.suppresionfire = 1; + } + + for(;;) + { + while(self.suppresionfire) + { + self settargetentity(param_00[randomint(param_00.size)]); + wait 2 + randomfloat(2); + } + + self cleartargetentity(); + while(!self.suppresionfire) + { + wait 1; + } + } +} + +//Function Number: 7 +manual_think(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 +burst_fire_unmanned() +{ + 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.var_7E6)) + { + var_01 = self.var_7E6 - var_00; + } + else + { + var_01 = burst_fire_settings("delay_range"); + } + + if(isdefined(self.script_burst_min)) + { + var_02 = self.script_burst_min; + } + else + { + var_02 = burst_fire_settings("burst"); + } + + if(isdefined(self.script_burst_max)) + { + var_03 = self.script_burst_max - var_02; + } + else + { + var_03 = burst_fire_settings("burst_range"); + } + + var_04 = gettime(); + var_05 = "start"; + if(isdefined(self.shell_fx)) + { + thread turret_shell_fx(); + } + + 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 turrettimer(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 turrettimer(var_06); + self waittill("turretstatechange"); + } +} + +//Function Number: 10 +doshoot() +{ + self endon("death"); + self endon("turretstatechange"); + for(;;) + { + self shootturret(); + wait 0.1; + } +} + +//Function Number: 11 +turret_shell_fx() +{ + self endon("death"); + self endon("stop_burst_fire_unmanned"); + if(isdefined(self.shell_sound)) + { + self.shell_sound_enabled = 1; + } + + for(;;) + { + self waittill("turret_fire"); + playfxontag(self.shell_fx,self,"tag_origin"); + if(isdefined(self.shell_sound_enabled) && self.shell_sound_enabled) + { + thread turret_shell_sound(); + } + } +} + +//Function Number: 12 +turret_shell_sound() +{ + self endon("death"); + self.shell_sound_enabled = 0; + var_00 = self gettagorigin("tag_origin"); + var_01 = maps\_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::play_sound_in_space(self.shell_sound,var_01); + wait 1; + self.shell_sound_enabled = 1; +} + +//Function Number: 13 +turrettimer(param_00) +{ + if(param_00 <= 0) + { + return; + } + + self endon("turretstatechange"); + wait param_00; + if(isdefined(self)) + { + self notify("turretstatechange"); + } +} + +//Function Number: 14 +random_spread(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.manual_target getorigin(); + } + else + { + param_00.origin = self.manual_target.origin; + } + + param_00.origin = param_00.origin + (20 - randomfloat(40),20 - randomfloat(40),20 - randomfloat(60)); + wait 0.2; + } +} + +//Function Number: 15 +mg42_firing(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 burst_fire(param_00); + param_00 startfiring(); + param_00 waittill("stopfiring"); + param_00 stopfiring(); + } +} + +//Function Number: 16 +burst_fire(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.var_7E6)) + { + var_03 = param_00.var_7E6 - var_02; + } + else + { + var_03 = burst_fire_settings("delay_range"); + } + + if(isdefined(param_00.script_burst_min)) + { + var_04 = param_00.script_burst_min; + } + else + { + var_04 = burst_fire_settings("burst"); + } + + if(isdefined(param_00.script_burst_max)) + { + var_05 = param_00.script_burst_max - var_04; + } + else + { + var_05 = burst_fire_settings("burst_range"); + } + + for(;;) + { + param_00 startfiring(); + if(isdefined(param_01)) + { + param_00 thread random_spread(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.flagged_for_use)) + { + self.flagged_for_use = 0; + } + + if(!isdefined(self.targetname)) + { + return; + } + + var_00 = getnode(self.targetname,"target"); + if(!isdefined(var_00)) + { + return; + } + + if(!isdefined(var_00.script_mg42)) + { + return; + } + + if(!isdefined(var_00.mg42_enabled)) + { + var_00.mg42_enabled = 1; + } + + self.script_mg42 = var_00.script_mg42; + var_01 = 1; + for(;;) + { + if(var_01) + { + var_01 = 0; + if(isdefined(var_00.targetname) || self.flagged_for_use) + { + self waittill("get new user"); + } + } + + if(!var_00.mg42_enabled) + { + var_00 waittill("enable mg42"); + var_00.mg42_enabled = 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].script_mg42) && var_03[var_04].script_mg42 == self.script_mg42) + { + var_05 = 0; + } + + if(isdefined(var_03[var_04].used_an_mg42)) + { + var_05 = 1; + } + + if(var_05) + { + var_02[var_02.size] = var_03[var_04]; + } + } + + if(var_02.size) + { + var_03 = maps\_utility::get_closest_ai_exclude(var_00.origin,undefined,var_02); + } + else + { + var_03 = maps\_utility::get_closest_ai(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)) + { + return; + } + + var_01 = getent(var_00.target,"targetname"); + var_01.org = var_00.origin; + if(isdefined(var_01.target)) + { + if(!isdefined(level.mg42_trigger) || !isdefined(level.mg42_trigger[var_01.target])) + { + level.mg42_trigger[var_01.target] = 0; + getent(var_01.target,"targetname") thread mg42_trigger(); + } + + var_02 = 1; + } + else + { + var_02 = 0; + } + + for(;;) + { + if(self.count == 0) + { + return; + } + + 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 mg42_firing(var_01); + var_03 waittill("death"); + if(isdefined(self.script_delay)) + { + wait self.script_delay; + continue; + } + + if(isdefined(self.script_delay_min) && isdefined(self.var_7E6)) + { + wait self.script_delay_min + randomfloat(self.var_7E6 - self.script_delay_min); + continue; + } + + wait 1; + } +} + +//Function Number: 19 +kill_objects(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"); + move_use_turret(param_00,"auto_ai"); + self waittill("manual_ai"); + } + + return; + } + + for(;;) + { + move_use_turret(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 +player_safe() +{ + if(!isdefined(level.player_covertrigger)) + { + return 0; + } + + if(level.player getstance() == "prone") + { + return 1; + } + + if(level.player_covertype == "cow" && level.player getstance() == "crouch") + { + return 1; + } + + return 0; +} + +//Function Number: 22 +stance_num() +{ + 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.org); + self.goalradius = level.magic_distance; + self waittill("goal"); + if(param_01) + { + if(!level.mg42_trigger[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 temp_think(param_00,var_02); + level thread kill_objects(self,"death",var_02,var_03); + level thread kill_objects(self,"auto_ai",var_02,var_03); + param_00.player_target = 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 shoot_mg42_script_targets(var_05); + move_use_turret(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.player_covertrigger)) + { + var_07 = var_02.origin; + if(distance(var_07,var_05[self.gun_targ].origin) > var_08) + { + var_0C = vectornormalize(var_05[self.gun_targ].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() + stance_num() * var_0D; + if(player_safe()) + { + var_0D = 2; + } + + wait var_09; + } + + var_0E = level.player getorigin(); + while(!player_safe()) + { + var_02.origin = level.player getorigin(); + var_0F = var_02.origin - var_0E; + var_02.origin = var_02.origin + var_0F + stance_num(); + var_0E = level.player getorigin(); + wait 0.1; + } + + if(player_safe()) + { + var_0B = gettime() + 1500 + randomfloat(4000); + while(player_safe() && isdefined(level.player_covertrigger.target) && gettime() < var_0B) + { + var_10 = getentarray(level.player_covertrigger.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(player_safe()) + { + var_07 = var_02.origin; + if(distance(var_07,var_05[self.gun_targ].origin) > var_08) + { + var_0C = vectornormalize(var_05[self.gun_targ].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; + } + } + + return; + } + + for(;;) + { + move_use_turret(param_00); + while(!isdefined(level.player_covertrigger)) + { + if(!param_00.player_target) + { + param_00 settargetentity(level.player); + param_00.player_target = 1; + var_03.targent = level.player; + } + + wait 0.2; + } + + param_00 setmode("manual_ai"); + move_use_turret(param_00); + param_00 notify("startfiring"); + var_0B = gettime() + 1500 + randomfloat(4000); + while(var_0B > gettime()) + { + if(isdefined(level.player_covertrigger)) + { + var_10 = getentarray(level.player_covertrigger.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.targent = var_02; + wait randomfloat(1); + continue; + } + + break; + } + + param_00 notify("stopfiring"); + move_use_turret(param_00); + if(param_00.player_target) + { + param_00 setmode("auto_ai"); + param_00 cleartargetentity(); + param_00.player_target = 0; + var_03.targent = var_03; + var_03.origin = (0,0,0); + } + + while(isdefined(level.player_covertrigger)) + { + wait 0.2; + } + + wait 0.75 + randomfloat(0.2); + } +} + +//Function Number: 24 +shoot_mg42_script_targets(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.gun_targ = randomint(param_00.size); + self waittill("next_target"); + while(var_01[self.gun_targ]) + { + self.gun_targ++; + if(self.gun_targ >= param_00.size) + { + self.gun_targ = 0; + } + } + + var_01[self.gun_targ] = 1; + } + } +} + +//Function Number: 25 +move_use_turret(param_00,param_01,param_02) +{ + self setgoalpos(param_00.org); + 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 +temp_think(param_00,param_01) +{ + if(getdvar("mg42") == "off") + { + return; + } + + self.targent = self; + for(;;) + { + self.origin = param_01.origin; + wait 0.1; + } +} + +//Function Number: 27 +turret_think(param_00) +{ + var_01 = getent(param_00.auto_mg42_target,"targetname"); + var_02 = 0.5; + if(isdefined(var_01.script_turret_reuse_min)) + { + var_02 = var_01.script_turret_reuse_min; + } + + var_03 = 2; + if(isdefined(var_01.script_turret_reuse_max)) + { + var_02 = var_01.script_turret_reuse_max; + } + + for(;;) + { + var_01 waittill("turret_deactivate"); + wait var_02 + randomfloat(var_03 - var_02); + while(!isturretactive(var_01)) + { + turret_find_user(param_00,var_01); + wait 1; + } + } +} + +//Function Number: 28 +turret_find_user(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 +setdifficulty() +{ + init_mgturretsettings(); + var_00 = getentarray("misc_turret","code_classname"); + var_01 = maps\_utility::getdifficulty(); + for(var_02 = 0;var_02 < var_00.size;var_02++) + { + if(isdefined(var_00[var_02].script_skilloverride)) + { + switch(var_00[var_02].script_skilloverride) + { + 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.mgturretsettings[param_01]["convergenceTime"]; + param_00.suppressiontime = level.mgturretsettings[param_01]["suppressionTime"]; + param_00.accuracy = level.mgturretsettings[param_01]["accuracy"]; + param_00.aispread = level.mgturretsettings[param_01]["aiSpread"]; + param_00.playerspread = level.mgturretsettings[param_01]["playerSpread"]; +} + +//Function Number: 31 +mg42_target_drones(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.dronefailed = 0; + if(!isdefined(self.script_fireondrones)) + { + self.script_fireondrones = 0; + } + + if(!isdefined(param_00)) + { + param_00 = 0; + } + + self setmode("manual_ai"); + var_03 = maps\_utility::getdifficulty(); + if(!isdefined(level.drones)) + { + 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.oldconvergencetime)) + { + self.oldconvergencetime = 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.drones[var_06].lastindex) + { + common_scripts\utility::lock("mg42_drones"); + if(!level.drones[var_06].lastindex) + { + common_scripts\utility::eog_newstar("mg42_drones"); + break; + } + + var_07 = get_bestdrone(var_06,param_02); + common_scripts\utility::eog_newstar("mg42_drones"); + if(!isdefined(self.script_fireondrones) || !self.script_fireondrones) + { + 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)); + drone_target(var_07,1,param_02); + self cleartargetentity(); + self stopfiring(); + if(!param_00 && !isdefined(self getturretowner()) && self getturretowner() == var_05) + { + break; + } + } + + self.convergencetime = self.oldconvergencetime; + self.oldconvergencetime = undefined; + self cleartargetentity(); + self stopfiring(); + if(level.drones[var_06].lastindex) + { + var_04 = 0; + continue; + } + + var_04 = 1; + } +} + +//Function Number: 32 +drone_target(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::eog_newstar("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::eog_newstar("mg42_drones_target_trace"); + break; + } + + if(!var_04) + { + self startfiring(); + var_04 = 1; + } + + common_scripts\utility::unlock_wait("mg42_drones_target_trace"); + } + + self stopfiring(); + maps\_utility::structarray_shuffle(level.drones[param_00.team],1); +} + +//Function Number: 33 +get_bestdrone(param_00,param_01) +{ + if(level.drones[param_00].lastindex < 1) + { + return; + } + + var_02 = undefined; + var_03 = anglestoforward(self.angles); + for(var_04 = 0;var_04 < level.drones[param_00].lastindex;var_04++) + { + if(!isdefined(level.drones[param_00].array[var_04])) + { + continue; + } + + var_05 = vectortoangles(level.drones[param_00].array[var_04].origin - self.origin); + var_06 = anglestoforward(var_05); + if(vectordot(var_03,var_06) < param_01) + { + continue; + } + + var_02 = level.drones[param_00].array[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].isvehicleattached)) + { + continue; + } + + var_02[var_01[var_03].origin + ""] = var_01[var_03]; + } + + if(!var_02.size) + { + return; + } + + 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 +auto_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) || tolower(var_01[var_03].targetname) != "auto_mgturret") + { + continue; + } + + if(!isdefined(var_01[var_03].export)) + { + continue; + } + + if(!isdefined(var_01[var_03].script_dont_link_turret)) + { + var_02[var_01[var_03].origin + ""] = var_01[var_03]; + } + } + + if(!var_02.size) + { + return; + } + + 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.export)) + { + return; + } + + level.shared_portable_turrets[self.export] = self; + if(isdefined(self.script_turret_share)) + { + var_00 = strtok(self.script_turret_share," "); + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + self.shared_turrets["connected"][var_00[var_01]] = 1; + } + } + + if(isdefined(self.script_turret_ambush)) + { + var_00 = strtok(self.script_turret_ambush," "); + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + self.shared_turrets["ambush"][var_00[var_01]] = 1; + } + } +} + +//Function Number: 37 +restoredefaultpitch() +{ + 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 dropturretproc(); +} + +//Function Number: 39 +dropturretproc() +{ + var_00 = spawn("script_model",(0,0,0)); + var_00.origin = self gettagorigin(level.portable_mg_gun_tag); + var_00.angles = self gettagangles(level.portable_mg_gun_tag); + var_00 setmodel(self.turretmodel); + var_01 = anglestoforward(self.angles); + var_01 = var_01 * 100; + var_00 movegravity(var_01,0.5); + self detach(self.turretmodel,level.portable_mg_gun_tag); + self.turretmodel = undefined; + wait 0.7; + var_00 delete(); +} + +//Function Number: 40 +turretdeathdetacher() +{ + self endon("kill_turret_detach_thread"); + self endon("dropped_gun"); + self waittill("death"); + if(!isdefined(self)) + { + return; + } + + dropturret(); +} + +//Function Number: 41 +turretdetacher() +{ + self endon("death"); + self endon("kill_turret_detach_thread"); + self waittill("dropped_gun"); + self detach(self.turretmodel,level.portable_mg_gun_tag); +} + +//Function Number: 42 +restoredefaults() +{ + self.run_overrideanim = undefined; + common_scripts\utility::set_all_exceptions(::animscripts/init::empty); +} + +//Function Number: 43 +restorepitch() +{ + self waittill("turret_deactivate"); + self restoredefaultdroppitch(); +} + +//Function Number: 44 +update_enemy_target_pos_while_running(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.last_enemy_sighting_position; + } +} + +//Function Number: 45 +move_target_pos_to_new_turrets_visibility(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 +record_bread_crumbs_for_ambush(param_00) +{ + self endon("death"); + self endon("end_mg_behavior"); + self endon("stop_updating_enemy_target_pos"); + param_00.bread_crumbs = []; + for(;;) + { + param_00.bread_crumbs[param_00.bread_crumbs.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.last_enemy_sighting_position; + return; + } + + var_02 = anglestoforward(param_00.angles); + for(var_03 = param_01.bread_crumbs.size - 3;var_03 >= 0;var_03--) + { + var_04 = param_01.bread_crumbs[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 +find_a_new_turret_spot(param_00) +{ + var_01 = get_portable_mg_spot(param_00); + var_02 = var_01["spot"]; + var_03 = var_01["type"]; + if(!isdefined(var_02)) + { + return; + } + + reserve_turret(var_02); + thread update_enemy_target_pos_while_running(param_00); + thread move_target_pos_to_new_turrets_visibility(param_00,var_02); + if(var_03 == "ambush") + { + thread record_bread_crumbs_for_ambush(param_00); + } + + if(var_02.issetup) + { + leave_gun_and_run_to_new_spot(var_02); + } + else + { + pickup_gun(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 +snap_lock_turret_onto_target(param_00) +{ + param_00 setmode("manual"); + wait 0.5; + param_00 setmode("manual_ai"); +} + +//Function Number: 50 +leave_gun_and_run_to_new_spot(param_00) +{ + self stopuseturret(); + animscripts/shared::func_C9B(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"); + use_the_turret(param_00); +} + +//Function Number: 51 +pickup_gun(param_00) +{ + self stopuseturret(); + self.turret hide_turret(); +} + +//Function Number: 52 +get_turret_setup_anim(param_00) +{ + var_01 = []; + return var_7B[var_01.weaponinfo]; +} + +//Function Number: 53 +run_to_new_spot_and_setup_gun(param_00) +{ + var_01 = self.health; + param_00 endon("turret_deactivate"); + self.mg42 = param_00; + self endon("death"); + self endon("dropped_gun"); + var_02 = get_turret_setup_anim(param_00); + self.turretmodel = "weapon_mg42_carry"; + self notify("kill_get_gun_back_on_killanimscript_thread"); + animscripts/shared::func_C9B(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.turretmodel,level.portable_mg_gun_tag); + thread turretdeathdetacher(); + 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_114F); + common_scripts\utility::clear_exception("move"); + common_scripts\utility::set_exception("cover_crouch",::hold_indefintely); + 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::play_sound_in_space("weapon_setup"); + } + + self animscripted("setup_done",param_00.origin,param_00.angles,var_02); + restoredefaults(); + self waittillmatch("end","setup_done"); + param_00 notify("restore_default_drop_pitch"); + param_00 show_turret(); + animscripts/shared::func_C9B(self.primaryweapon,"right"); + use_the_turret(param_00); + self detach(self.turretmodel,level.portable_mg_gun_tag); + common_scripts\utility::set_all_exceptions(::animscripts/init::empty); + self notify("bcs_portable_turret_setup"); +} + +//Function Number: 54 +move_to_run_pos() +{ + self setruntopos(self.runpos); +} + +//Function Number: 55 +hold_indefintely() +{ + self endon("killanimscript"); + self waittill("death"); +} + +//Function Number: 56 +using_a_turret() +{ + if(!isdefined(self.turret)) + { + return 0; + } + + return self.turret.owner == self; +} + +//Function Number: 57 +turret_user_moves() +{ + if(!using_a_turret()) + { + common_scripts\utility::clear_exception("move"); + return; + } + + var_00 = find_connected_turrets("connected"); + var_01 = var_00["spots"]; + if(!var_01.size) + { + common_scripts\utility::clear_exception("move"); + return; + } + + var_02 = self.node; + if(!isdefined(var_02) || !maps\_utility::is_in_array(var_01,var_02)) + { + var_03 = gettakennodes(); + for(var_04 = 0;var_04 < var_01.size;var_04++) + { + var_02 = common_scripts\utility::random(var_01); + if(isdefined(var_03[var_02.origin + ""])) + { + return; + } + } + } + + var_05 = var_02.turret; + if(isdefined(var_05.reserved)) + { + return; + } + + reserve_turret(var_05); + if(var_05.issetup) + { + leave_gun_and_run_to_new_spot(var_05); + } + else + { + run_to_new_spot_and_setup_gun(var_05); + } + + maps\_mg_penetration::gunner_think(var_02.turret); +} + +//Function Number: 58 +use_the_turret(param_00) +{ + var_01 = self useturret(param_00); + if(var_01) + { + common_scripts\utility::set_exception("move",::turret_user_moves); + self.turret = param_00; + thread mg42_firing(param_00); + param_00 setmode("manual_ai"); + param_00 thread restorepitch(); + 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_7B = maps\_utility::array_randomize(var_7B); + for(var_02 = 0;var_02 < var_7B.size;var_02++ = var_7B["spot"]) + { + var_03 = [[ var_7B[var_02] ]](var_01); + if(!isdefined(var_03["spots"])) + { + continue; + } + + return var_03; + } +} + +//Function Number: 60 +gettakennodes() +{ + 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.shared_portable_turrets; + var_02 = []; + var_03 = getarraykeys(var_01); + var_04 = gettakennodes(); + 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].export + "" != 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 = []; + return var_7B; +} + +//Function Number: 62 +find_good_ambush_spot(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) + { + return; + } + + var_03 = []; + for(var_04 = 0;var_04 < var_02.size;var_04++) + { + if(!maps\_utility::within_fov(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 +portable_mg_spot() +{ + save_turret_sharing_info(); + var_00 = 1; + self.issetup = 1; + self.reserved = undefined; + if(isdefined(self.isvehicleattached)) + { + return; + } + + if(self.spawnflags & var_00) + { + return; + } + + hide_turret(); +} + +//Function Number: 65 +hide_turret() +{ + self notify("stop_checking_for_flanking"); + self.issetup = 0; + self hide(); + self.solid = 0; + self makeunusable(); + self setdefaultdroppitch(0); + thread restoredefaultpitch(); +} + +//Function Number: 66 +show_turret() +{ + self show(); + self.solid = 1; + self makeusable(); + self.issetup = 1; + thread stop_mg_behavior_if_flanked(); +} + +//Function Number: 67 +stop_mg_behavior_if_flanked() +{ + self endon("stop_checking_for_flanking"); + self waittill("turret_deactivate"); + if(isalive(self.owner)) + { + self.owner notify("end_mg_behavior"); + } +} + +//Function Number: 68 +turret_is_mine(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) +{ + waittill_turret_is_released(param_00); + param_00.reserved = undefined; +} + +//Function Number: 70 +waittill_turret_is_released(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); +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_missions.gsc b/MW3/PC/SP/maps/_missions.gsc new file mode 100644 index 0000000..fe4e64b --- /dev/null +++ b/MW3/PC/SP/maps/_missions.gsc @@ -0,0 +1,320 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_missions.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 17 + * Decompile Time: 258 ms + * Timestamp: 10/27/2023 2:19:15 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + foreach(var_01 in level.players) + { + var_01 initnotifymessage(); + } +} + +//Function Number: 2 +monitor_challenges() +{ +} + +//Function Number: 3 +challenge_targetval(param_00,param_01,param_02) +{ + var_03 = tablelookup(param_00,0,param_01,6 + param_02 - 1 * 2); + return int(var_03); +} + +//Function Number: 4 +challenge_rewardval(param_00,param_01,param_02) +{ + var_03 = tablelookup(param_00,0,param_01,7 + param_02 - 1 * 2); + return int(var_03); +} + +//Function Number: 5 +getchallengestatus(param_00) +{ + if(isdefined(self.challengedata[param_00])) + { + return self.challengedata[param_00]; + } + + return 0; +} + +//Function Number: 6 +ch_getprogress(param_00) +{ + return self getplayerdata("challengeProgress",param_00); +} + +//Function Number: 7 +ch_getstate(param_00) +{ + return self getplayerdata("challengeState",param_00); +} + +//Function Number: 8 +ch_setprogress(param_00,param_01) +{ + return self setplayerdata("challengeProgress",param_00,param_01); +} + +//Function Number: 9 +ch_setstate(param_00,param_01) +{ + return self setplayerdata("challengeState",param_00,param_01); +} + +//Function Number: 10 +ch_gettarget(param_00,param_01) +{ + return int(tablelookup("sp/allChallengesTable.csv",0,param_00,6 + param_01 - 1 * 2)); +} + +//Function Number: 11 +buildchallengetableinfo(param_00,param_01) +{ + var_02 = 0; + var_03 = tablelookupbyrow(param_00,0,0); + for(var_04 = 1;var_03 != "";var_04++) + { + level.challengeinfo[var_03] = []; + level.challengeinfo[var_03]["targetval"] = []; + level.challengeinfo[var_03]["reward"] = []; + level.challengeinfo[var_03]["type"] = param_01; + for(var_05 = 1;var_05 < 11;var_05++) + { + var_06 = challenge_targetval(param_00,var_03,var_05); + var_07 = challenge_rewardval(param_00,var_03,var_05); + if(var_06 == 0) + { + break; + } + + level.challengeinfo[var_03]["targetval"][var_05] = var_06; + level.challengeinfo[var_03]["reward"][var_05] = var_07; + var_02 = var_02 + var_07; + } + + var_03 = tablelookupbyrow(param_00,var_04,0); + } + + return int(var_02); +} + +//Function Number: 12 +buildchallengeinfo() +{ + level.challengeinfo = []; + var_00 = 0; + var_00 = var_00 + buildchallengetableinfo("sp/allchallengesTable.csv",0); + var_01 = tablelookupbyrow("sp/challengeTable.csv",0,4); + for(var_02 = 1;var_01 != "";var_02++) + { + var_03 = tablelookupbyrow(var_01,0,0); + for(var_04 = 1;var_03 != "";var_04++) + { + var_05 = tablelookup(var_01,0,var_03,1); + if(var_05 != "") + { + level.challengeinfo[var_03]["requirement"] = var_05; + } + + var_03 = tablelookupbyrow(var_01,var_04,0); + } + + var_01 = tablelookupbyrow("sp/challengeTable.csv",var_02,4); + } +} + +//Function Number: 13 +challengesplashnotify(param_00) +{ + self endon("disconnect"); + waittillframeend; + wait 0.05; + var_01 = ch_getstate(param_00) - 1; + var_02 = ch_gettarget(param_00,var_01); + if(var_02 == 0) + { + var_02 = 1; + } + + var_03 = spawnstruct(); + var_03.type = "challenge"; + var_03.optionalnumber = var_02; + var_03.name = param_00; + var_03.sound = tablelookup("sp/splashTable.csv",0,var_03.name,9); + var_03.slot = 0; + thread maps\_rank::actionnotify(var_03); +} + +//Function Number: 14 +updatechallenges() +{ + self.challengedata = []; + wait 0.05; + foreach(var_04, var_01 in level.challengeinfo) + { + self.challengedata[var_04] = 0; + if(!self isitemunlocked(var_04)) + { + continue; + } + + if(isdefined(var_01["requirement"]) && !self isitemunlocked(var_01["requirement"])) + { + continue; + } + + var_02 = 0; + var_03 = var_04; + var_02 = ch_getstate(var_04); + if(var_02 == 0) + { + ch_setstate(var_04,1); + var_02 = 1; + } + + self.challengedata[var_04] = var_02; + } +} + +//Function Number: 15 +giverankxpafterwait(param_00,param_01) +{ + self endon("death"); + self endon("disconnect"); + wait 0.25; + maps\_utility::givexp("challenge",level.challengeinfo[param_00]["reward"][param_01]); +} + +//Function Number: 16 +processchallenge(param_00,param_01,param_02) +{ + if(!isdefined(param_01)) + { + param_01 = 1; + } + + var_03 = getchallengestatus(param_00); + if(var_03 == 0) + { + return; + } + + if(var_03 > level.challengeinfo[param_00]["targetval"].size) + { + return; + } + + var_04 = ch_getprogress(param_00); + if(isdefined(param_02) && param_02) + { + var_05 = param_01; + } + else + { + var_05 = var_05 + param_02; + } + + var_06 = level.challengeinfo[param_00]["targetval"][var_03]; + if(var_05 >= var_06) + { + var_07 = 1; + var_05 = var_06; + } + else + { + var_07 = 0; + } + + if(var_04 < var_05) + { + ch_setprogress(param_00,var_05); + } + + if(var_07) + { + thread giverankxpafterwait(param_00,var_03); + var_03++; + ch_setstate(param_00,var_03); + self.challengedata[param_00] = var_03; + thread challengesplashnotify(param_00); + } +} + +//Function Number: 17 +initnotifymessage() +{ + if(maps\_utility::is_coop()) + { + var_00 = 2.5; + var_01 = 1.75; + var_02 = 24; + var_03 = "objective"; + var_04 = "TOP"; + var_05 = "BOTTOM"; + var_06 = 30; + var_07 = 0; + } + else + { + var_00 = 2.5; + var_01 = 1.75; + var_02 = 30; + var_03 = "objective"; + var_04 = "TOP"; + var_05 = "BOTTOM"; + var_06 = 30; + var_07 = 0; + } + + self.notifytitle = maps\_hud_util::createclientfontstring(var_03,var_00); + self.notifytitle maps\_hud_util::setpoint(var_04,undefined,var_07,var_06); + self.notifytitle.glowcolor = (0.2,0.3,0.7); + self.notifytitle.glowalpha = 1; + self.notifytitle.hidewheninmenu = 1; + self.notifytitle.archived = 0; + self.notifytitle.alpha = 0; + self.notifytext = maps\_hud_util::createclientfontstring(var_03,var_01); + self.notifytext maps\_hud_util::setparent(self.notifytitle); + self.notifytext maps\_hud_util::setpoint(var_04,var_05,0,0); + self.notifytext.glowcolor = (0.2,0.3,0.7); + self.notifytext.glowalpha = 1; + self.notifytext.hidewheninmenu = 1; + self.notifytext.archived = 0; + self.notifytext.alpha = 0; + self.notifytext2 = maps\_hud_util::createclientfontstring(var_03,var_01); + self.notifytext2 maps\_hud_util::setparent(self.notifytitle); + self.notifytext2 maps\_hud_util::setpoint(var_04,var_05,0,0); + self.notifytext2.glowcolor = (0.2,0.3,0.7); + self.notifytext2.glowalpha = 1; + self.notifytext2.hidewheninmenu = 1; + self.notifytext2.archived = 0; + self.notifytext2.alpha = 0; + self.notifyicon = maps\_hud_util::createclienticon("white",var_02,var_02); + self.notifyicon maps\_hud_util::setparent(self.notifytext2); + self.notifyicon maps\_hud_util::setpoint(var_04,var_05,0,0); + self.notifyicon.hidewheninmenu = 1; + self.notifyicon.archived = 0; + self.notifyicon.alpha = 0; + self.doingnotify = 0; + self.notifyqueue = []; + self.doingsplash = []; + self.doingsplash[0] = undefined; + self.doingsplash[1] = undefined; + self.doingsplash[2] = undefined; + self.doingsplash[3] = undefined; + self.splashqueue = []; + self.splashqueue[0] = []; + self.splashqueue[1] = []; + self.splashqueue[2] = []; + self.splashqueue[3] = []; +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_mortar.gsc b/MW3/PC/SP/maps/_mortar.gsc new file mode 100644 index 0000000..9a87e0b --- /dev/null +++ b/MW3/PC/SP/maps/_mortar.gsc @@ -0,0 +1,1645 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_mortar.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 44 + * Decompile Time: 580 ms + * Timestamp: 10/27/2023 2:20:13 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ +} + +//Function Number: 2 +hurtgen_style() +{ + var_00 = getentarray("mortar","targetname"); + var_01 = -1; + for(var_02 = 0;var_02 < var_00.size;var_02++) + { + var_00[var_02] setup_mortar_terrain(); + } + + if(!isdefined(level.mortar)) + { + common_scripts\utility::error("level.mortar not defined. define in level script"); + } + + level waittill("start_mortars"); + for(;;) + { + wait 1 + randomfloat(2); + var_03 = randomint(var_00.size); + for(var_02 = 0;var_02 < var_00.size;var_02++) + { + var_04 = var_02 + var_03 % var_00.size; + var_05 = distance(level.player getorigin(),var_00[var_04].origin); + var_06 = undefined; + if(isdefined(level.foley)) + { + var_06 = distance(level.foley.origin,var_00[var_04].origin); + } + else + { + var_06 = 360; + } + + if(var_05 < 1600 && var_05 > 400 && var_06 > 350 && var_04 != var_01) + { + var_00[var_04] activate_mortar(400,300,25,undefined,undefined,undefined,0); + var_01 = var_04; + if(var_05 < 500) + { + maps\_shellshock::main(4); + } + + break; + } + } + } +} + +//Function Number: 3 +railyard_style(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A) +{ + if(!isdefined(param_00)) + { + param_00 = 7; + } + + if(!isdefined(param_01)) + { + param_01 = 2200; + } + + if(!isdefined(param_02)) + { + param_02 = 300; + } + + if(!isdefined(level.istopbarrage)) + { + level.istopbarrage = 0; + } + + if(!isdefined(param_09)) + { + param_09 = 0; + } + + var_0B = getentarray("mortar","targetname"); + var_0C = -1; + for(var_0D = 0;var_0D < var_0B.size;var_0D++) + { + if(isdefined(var_0B[var_0D].target) && param_09 == 0) + { + var_0B[var_0D] setup_mortar_terrain(); + } + } + + if(!isdefined(level.mortar)) + { + common_scripts\utility::error("level.mortar not defined. define in level script"); + } + + if(isdefined(level.mortar_notify)) + { + level waittill(level.mortar_notify); + } + + for(;;) + { + if(level.istopbarrage != 0) + { + wait 1; + } + + while(level.istopbarrage == 0) + { + if(isdefined(param_0A)) + { + wait param_0A + randomfloat(param_00) + randomfloat(param_00); + } + else + { + wait randomfloat(param_00) + randomfloat(param_00); + } + + var_0E = randomint(var_0B.size); + for(var_0D = 0;var_0D < var_0B.size;var_0D++) + { + var_0F = var_0D + var_0E % var_0B.size; + var_10 = distance(level.player getorigin(),var_0B[var_0F].origin); + if(var_10 < param_01 && var_10 > param_02 && var_0F != var_0C) + { + var_0B[var_0F] activate_mortar(param_03,param_04,param_05,param_06,param_07,param_08,0); + var_0C = var_0F; + break; + } + } + } + } +} + +//Function Number: 4 +script_mortargroup_style() +{ + var_00 = []; + var_01 = []; + level.mortars = []; + var_02 = getentarray("script_model","classname"); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + if(isdefined(var_02[var_03].script_mortargroup)) + { + if(!isdefined(level.mortars[var_02[var_03].script_mortargroup])) + { + level.mortars[var_02[var_03].script_mortargroup] = []; + } + + var_04 = spawnstruct(); + var_04.origin = var_02[var_03].origin; + var_04.angles = var_02[var_03].angles; + if(isdefined(var_02[var_03].targetname)) + { + var_04.targetname = var_02[var_03].targetname; + } + + if(isdefined(var_02[var_03].target)) + { + var_04.target = var_02[var_03].target; + } + + level.mortars[var_02[var_03].script_mortargroup][level.mortars[var_02[var_03].script_mortargroup].size] = var_04; + var_02[var_03] delete(); + } + } + + for(var_03 = 0;var_03 < var_00.size;var_03++) + { + var_00[var_03] hide(); + var_00[var_03].has_terrain = 0; + } + + if(!isdefined(level.mortar)) + { + level.mortar = loadfx("explosions/artilleryExp_dirt_brown"); + } + + var_05 = common_scripts\utility::array_combine(getentarray("trigger_multiple","classname"),getentarray("trigger_radius","classname")); + for(var_03 = 0;var_03 < var_05.size;var_03++) + { + if(isdefined(var_05[var_03].script_mortargroup)) + { + if(!isdefined(level.mortars[var_05[var_03].script_mortargroup])) + { + level.mortars[var_05[var_03].script_mortargroup] = []; + } + + var_01[var_01.size] = var_05[var_03]; + } + } + + for(var_03 = 0;var_03 < var_01.size;var_03++) + { + var_01[var_03].mortargroup = 0; + var_01[var_03] thread script_mortargroup_mortar_group(); + } + + var_06 = undefined; + for(;;) + { + level waittill("mortarzone",var_07); + if(isdefined(var_06)) + { + var_06 notify("wait again"); + } + + level.mortarzone = var_07.script_mortargroup; + var_07 thread script_mortargroup_mortarzone(); + var_06 = var_07; + } +} + +//Function Number: 5 +script_mortargroup_mortarzone() +{ + var_00 = []; + var_01 = gettime(); + var_02 = 0; + if(isdefined(self.script_timer)) + { + level notify("timed barrage"); + var_01 = gettime() + self.script_timer * 1000; + var_02 = 1; + } + + if(isdefined(self.script_radius)) + { + var_03 = self.script_radius; + } + else + { + var_03 = 0; + } + + if(isdefined(self.script_delay_min) && isdefined(self.var_7E6)) + { + var_04 = 1; + } + else + { + var_04 = 0; + } + + var_05 = 0; + var_06 = 2; + var_07 = 4; + var_08 = 0; + while((level.mortars[self.script_mortargroup].size > 0 && level.mortarzone == self.script_mortargroup) || var_02) + { + if(var_04) + { + wait randomfloat(self.var_7E6 - self.script_delay_min) + self.script_delay_min; + } + else if(var_08) + { + if(var_05 < var_07) + { + wait randomfloat(0.5); + var_05++; + } + else + { + var_05 = 0; + var_07 = 2 + randomint(4); + var_08 = 0; + continue; + } + } + else if(var_05 < var_06) + { + var_09 = randomfloat(2) + 1; + wait var_09; + var_05++; + } + else + { + var_06 = 0; + var_0A = 1; + var_07 = randomint(2) + 3; + continue; + } + + var_0A = []; + var_0B = randomint(level.mortars[self.script_mortargroup].size); + if(randomint(100) < 75) + { + var_0C = anglestoforward(level.player.angles); + var_0D = []; + for(var_0E = 0;var_0E < level.mortars[self.script_mortargroup].size;var_0E++) + { + if(var_03 > 0 && distance(level.player.origin,level.mortars[self.script_mortargroup][var_0E].origin) > var_03) + { + continue; + } + + if(is_lastblast(level.mortars[self.script_mortargroup][var_0E],var_00)) + { + continue; + } + + var_0F = vectornormalize(level.mortars[self.script_mortargroup][var_0E].origin - level.player.origin); + if(vectordot(var_0C,var_0F) > 0.3) + { + var_0D[var_0D.size] = var_0E; + } + } + + if(var_0D.size > 0) + { + var_0B = var_0D[randomint(var_0D.size)]; + } + } + + if(var_00.size > 3) + { + var_00 = []; + } + + var_00[var_00.size] = level.mortars[self.script_mortargroup][var_0B]; + level.mortars[self.script_mortargroup][var_0B] thread script_mortargroup_domortar(); + if(var_02 && gettime() > var_01) + { + if(isdefined(self.target)) + { + var_10 = getent(self.target,"targetname"); + if(isdefined(var_10)) + { + var_10 notify("trigger"); + level notify("timed barrage finished"); + } + } + + break; + } + } +} + +//Function Number: 6 +is_lastblast(param_00,param_01) +{ + for(var_02 = 0;var_02 < param_01.size;var_02++) + { + if(param_00 == param_01[var_02]) + { + return 1; + } + } + + return 0; +} + +//Function Number: 7 +script_mortargroup_domortar() +{ + if(isdefined(self.targetname) && isdefined(level.mortarthread[self.targetname])) + { + level thread [[ level.mortarthread[self.targetname] ]](self); + } + else + { + thread activate_mortar(undefined,undefined,undefined,undefined,undefined,undefined,1); + } + + self waittill("mortar"); + if(isdefined(self.target)) + { + var_00 = getent(self.target,"targetname"); + if(isdefined(var_00)) + { + var_00 notify("trigger"); + } + } +} + +//Function Number: 8 +script_mortargroup_mortar_group() +{ + for(;;) + { + self waittill("trigger"); + if(isdefined(level.mortarzone) && level.mortarzone == self.script_mortargroup) + { + continue; + } + + level notify("mortarzone",self); + self waittill("wait again"); + } +} + +//Function Number: 9 +trigger_targeted() +{ + level.mortartrigger = getentarray("mortartrigger","targetname"); + level.mortars = getentarray("script_origin","classname"); + for(var_00 = 0;var_00 < level.mortars.size;var_00++) + { + if(isdefined(level.mortars[var_00].script_mortargroup)) + { + level.mortars[var_00] setup_mortar_terrain(); + } + } + + level.lastmortar = -1; + if(!isdefined(level.mortar)) + { + common_scripts\utility::error("level.mortar not defined. define in level script"); + } + + for(var_00 = 0;var_00 < level.mortartrigger.size;var_00++) + { + thread trigger_targeted_mortars(var_00); + } +} + +//Function Number: 10 +trigger_targeted_mortars(param_00) +{ + var_01 = getentarray(level.mortartrigger[param_00].target,"targetname"); + for(;;) + { + if(level.player istouching(level.mortartrigger[param_00])) + { + var_02 = randomint(var_01.size); + while(var_02 == level.lastmortar) + { + var_02 = randomint(var_01.size); + wait 0.1; + } + + var_01[var_02] activate_mortar(undefined,undefined,undefined,undefined,undefined,undefined,0); + level.lastmortar = var_02; + } + + wait randomfloat(3) + randomfloat(4); + } +} + +//Function Number: 11 +bunker_style_mortar() +{ + var_00 = []; + var_01 = undefined; + var_02 = []; + var_03 = common_scripts\utility::getstructarray("mortar_bunker","targetname"); + var_04 = getentarray("mortar_bunker","targetname"); + if(isdefined(var_04) && var_04.size > 0) + { + var_01 = maps\_utility::array_merge(var_03,var_04); + } + else + { + var_01 = var_03; + } + + for(var_05 = 0;var_05 < var_01.size;var_05++) + { + if(!isdefined(var_01[var_05].script_mortargroup)) + { + continue; + } + + var_06 = -1; + var_07 = int(var_01[var_05].script_mortargroup); + for(var_08 = 0;var_08 < var_00.size;var_08++) + { + if(var_07 != var_02[var_08]) + { + continue; + } + + var_06 = var_08; + break; + } + + if(var_06 == -1) + { + var_00[var_00.size] = []; + var_02[var_02.size] = var_07; + var_06 = var_00.size - 1; + } + + var_00[var_06][var_00[var_06].size] = var_01[var_05]; + } + + for(var_05 = 0;var_05 < var_00.size;var_05++) + { + thread bunker_style_mortar_think(var_00[var_05],var_03); + } + + wait 0.05; + common_scripts\utility::array_thread(getentarray("mortar_on","targetname"),::bunker_style_mortar_trigger,"on"); + common_scripts\utility::array_thread(getentarray("mortar_off","targetname"),::bunker_style_mortar_trigger,"off"); +} + +//Function Number: 12 +bunker_style_mortar_think(param_00,param_01) +{ + var_02 = undefined; + var_03 = undefined; + if(isdefined(level.mortarmininterval)) + { + var_02 = level.mortarmininterval; + } + else + { + var_02 = 4; + } + + if(isdefined(level.mortarmaxinterval)) + { + var_03 = level.mortarmaxinterval; + } + else + { + var_03 = 6; + } + + var_04 = int(param_00[0].script_mortargroup); + for(;;) + { + level waittill("start_mortars " + var_04); + thread bunker_style_mortar_activate(param_00,var_02,var_03,var_04,param_01); + } +} + +//Function Number: 13 +bunker_style_mortar_activate(param_00,param_01,param_02,param_03,param_04) +{ + level endon("start_mortars " + param_03); + level endon("stop_mortars " + param_03); + for(;;) + { + wait 0.05; + var_05 = maps\_utility::getclosest(level.player.origin,param_04); + if(!isdefined(level.mortarnoincomingsound)) + { + common_scripts\utility::play_sound_in_space("mortar_incoming_bunker",var_05.origin); + } + + var_05 = maps\_utility::getclosest(level.player.origin,param_04); + thread common_scripts\utility::play_sound_in_space("exp_artillery_underground",var_05.origin); + common_scripts\utility::array_thread(param_00,::bunker_style_mortar_explode); + if(!isdefined(level.mortarnoquake)) + { + if(common_scripts\utility::cointoss()) + { + earthquake(0.2,1.5,var_05.origin,1250); + } + else + { + earthquake(0.35,2.75,var_05.origin,1250); + } + } + + level notify("mortar_hit"); + wait randomfloatrange(param_01,param_02); + param_00 = common_scripts\utility::array_removeundefined(param_00); + } +} + +//Function Number: 14 +bunker_style_mortar_explode(param_00,param_01) +{ + if(!isdefined(self)) + { + return; + } + + if(isdefined(level.mortarwithinfov) && mortar_within_player_fov(level.mortarwithinfov) == 0) + { + return; + } + + if(isdefined(level.mortar_min_dist)) + { + var_02 = level.mortar_min_dist; + } + else + { + var_02 = 1024; + } + + var_03 = var_02 * var_02; + var_04 = distancesquared(level.player.origin,self.origin); + if(var_04 > var_03) + { + return; + } + + if(isdefined(self.classname) && self.classname == "trigger_radius") + { + if(!level.player istouching(self) && distance(level.player.origin,self.origin) < level.mortardamagetriggerdist) + { + radiusdamage(self.origin,self.radius,500,500); + self delete(); + return; + } + + return; + } + + playfx(level._effect["mortar"][self.script_fxid],self.origin); + if(var_04 < 262144) + { + thread common_scripts\utility::play_sound_in_space("emt_single_ceiling_debris",self.origin); + } +} + +//Function Number: 15 +bog_style_mortar() +{ + var_00 = []; + var_01 = []; + var_02 = maps\_utility::getstructarray_delete("mortar","targetname"); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + if(!isdefined(var_02[var_03].script_mortargroup)) + { + continue; + } + + var_04 = -1; + var_05 = int(var_02[var_03].script_mortargroup); + for(var_06 = 0;var_06 < var_00.size;var_06++) + { + if(var_05 != var_01[var_06]) + { + continue; + } + + var_04 = var_06; + break; + } + + if(var_04 == -1) + { + var_00[var_00.size] = []; + var_01[var_01.size] = var_05; + var_04 = var_00.size - 1; + } + + var_00[var_04][var_00[var_04].size] = var_02[var_03]; + } + + for(var_03 = 0;var_03 < var_00.size;var_03++) + { + thread bog_style_mortar_think(var_00[var_03]); + } + + wait 0.05; + common_scripts\utility::array_thread(getentarray("mortar_on","targetname"),::bog_style_mortar_trigger,"on"); + common_scripts\utility::array_thread(getentarray("mortar_off","targetname"),::bog_style_mortar_trigger,"off"); +} + +//Function Number: 16 +bog_style_mortar_think(param_00,param_01) +{ + var_02 = undefined; + var_03 = undefined; + if(isdefined(level.mortarmininterval)) + { + var_02 = level.mortarmininterval; + } + else + { + var_02 = 0.5; + } + + if(isdefined(level.mortarmaxinterval)) + { + var_03 = level.mortarmaxinterval; + } + else + { + var_03 = 3; + } + + param_01 = int(param_00[0].script_mortargroup); + for(;;) + { + level waittill("start_mortars " + param_01); + level thread bog_style_mortar_activate(param_00,param_01,var_02,var_03); + if(isdefined(level.bogmortarsgoonce)) + { + return; + } + } +} + +//Function Number: 17 +bog_style_mortar_activate(param_00,param_01,param_02,param_03) +{ + level endon("start_mortars " + param_01); + level endon("stop_mortars " + param_01); + if(isdefined(level.mortar_min_dist)) + { + var_04 = level.mortar_min_dist; + } + else + { + var_04 = 300; + } + + var_05 = spawn("trigger_radius",(0,0,0),0,var_04,256); + thread bog_style_mortar_cleanup(var_05,param_01); + for(;;) + { + for(;;) + { + wait 0.05; + var_06 = randomint(param_00.size); + if(isdefined(param_00[var_06].cooldown)) + { + continue; + } + + var_07 = distance(level.player.origin,param_00[var_06].origin); + if(var_07 < var_04) + { + continue; + } + + if(isdefined(level.mortarexcluders) && level.mortarexcluders.size > 0) + { + var_05.origin = param_00[var_06].origin; + if(mortars_too_close(level.mortarexcluders,var_05)) + { + continue; + } + } + + if(!isdefined(level.nomaxmortardist) && var_07 > 1000) + { + continue; + } + + if(isdefined(level.mortar_max_dist) && var_07 > level.mortar_max_dist) + { + continue; + } + + if(isdefined(level.mortarwithinfov) && param_00[var_06] mortar_within_player_fov(level.mortarwithinfov) == 0) + { + continue; + } + + break; + } + + if(isdefined(level.nomortars) && level.nomortars == 1) + { + return; + } + + param_00[var_06] thread bog_style_mortar_explode(); + wait param_02 + randomfloat(param_03 - param_02); + } +} + +//Function Number: 18 +bog_style_mortar_cleanup(param_00,param_01) +{ + level waittill("stop_mortars " + param_01); + param_00 delete(); +} + +//Function Number: 19 +mortars_too_close(param_00,param_01) +{ + foreach(var_03 in level.mortarexcluders) + { + if(!isalive(var_03)) + { + continue; + } + + if(!isdefined(var_03)) + { + continue; + } + + if(var_03 istouching(param_01)) + { + return 1; + } + } + + return 0; +} + +//Function Number: 20 +mortar_within_player_fov(param_00) +{ + var_01 = level.player geteye(); + var_02 = (0,0,0); + if(isdefined(level.playermortarfovoffset)) + { + var_02 = level.playermortarfovoffset; + } + + var_03 = maps\_utility::within_fov(var_01,level.player getplayerangles() + var_02,self.origin,param_00); + return var_03; +} + +//Function Number: 21 +bog_style_mortar_explode(param_00,param_01) +{ + if(!isdefined(level.mortardamageradius)) + { + level.mortardamageradius = 250; + } + + if(!isdefined(param_00)) + { + param_00 = 0; + } + + thread bog_style_mortar_cooldown(); + if(!param_00) + { + common_scripts\utility::play_sound_in_space(level.scr_sound["mortar"]["incomming"]); + } + + if(isdefined(param_01)) + { + thread common_scripts\utility::play_sound_in_space(param_01); + } + else + { + thread common_scripts\utility::play_sound_in_space(level.scr_sound["mortar"][self.script_fxid]); + } + + setplayerignoreradiusdamage(1); + radiusdamage(self.origin,level.mortardamageradius,150,50); + setplayerignoreradiusdamage(0); + playfx(level._effect["mortar"][self.script_fxid],self.origin); + if(isdefined(level.alwaysquake)) + { + earthquake(0.3,1,level.player.origin,2000); + } + + if(getdvarint("bog_camerashake") > 0) + { + if(level.player getcurrentweapon() == "dragunov" && level.player playerads() > 0.8) + { + return; + } + + earthquake(0.25,0.75,self.origin,1250); + } +} + +//Function Number: 22 +bog_style_mortar_cooldown() +{ + self.cooldown = 1; + wait 3 + randomfloat(2); + self.cooldown = undefined; +} + +//Function Number: 23 +bog_style_mortar_trigger(param_00) +{ + self waittill("trigger"); + if(param_00 == "on") + { + bog_style_mortar_on(self.script_mortargroup); + return; + } + + if(param_00 == "off") + { + bog_style_mortar_off(self.script_mortargroup); + } +} + +//Function Number: 24 +bog_style_mortar_on(param_00) +{ + level notify("start_mortars " + param_00); +} + +//Function Number: 25 +bog_style_mortar_off(param_00) +{ + level notify("stop_mortars " + param_00); +} + +//Function Number: 26 +bunker_style_mortar_on(param_00) +{ + if(!isdefined(level.mortardamagetriggerdist)) + { + level.mortardamagetriggerdist = 512; + } + + if(!isdefined(level.mortarwithinfov)) + { + level.mortarwithinfov = cos(35); + } + + level notify("start_mortars " + param_00); +} + +//Function Number: 27 +bunker_style_mortar_off(param_00) +{ + level waittill("mortar_hit"); + level notify("stop_mortars " + param_00); +} + +//Function Number: 28 +bunker_style_mortar_off_nowait(param_00) +{ + level notify("stop_mortars " + param_00); +} + +//Function Number: 29 +bunker_style_mortar_trigger(param_00) +{ + self waittill("trigger"); + if(param_00 == "on") + { + bunker_style_mortar_on(self.script_mortargroup); + return; + } + + if(param_00 == "off") + { + bunker_style_mortar_off(self.script_mortargroup); + } +} + +//Function Number: 30 +burnville_style_mortar() +{ + level endon("stop falling mortars"); + setup_mortar_terrain(); + wait randomfloat(0.5) + randomfloat(0.5); + for(;;) + { + if(distance(level.player getorigin(),self.origin) < 600) + { + activate_mortar(undefined,undefined,undefined,undefined,undefined,undefined,0); + break; + } + + wait 1; + } + + wait 7 + randomfloat(20); + for(;;) + { + if(distance(level.player getorigin(),self.origin) < 1200 && distance(level.player getorigin(),self.origin) > 400) + { + activate_mortar(undefined,undefined,undefined,undefined,undefined,undefined,0); + wait 3 + randomfloat(14); + } + + wait 1; + } +} + +//Function Number: 31 +setup_mortar_terrain() +{ + self.has_terrain = 0; + if(isdefined(self.target)) + { + self.terrain = getentarray(self.target,"targetname"); + self.has_terrain = 1; + } + else + { + } + + if(!isdefined(self.terrain)) + { + } + + if(isdefined(self.script_hidden)) + { + if(isdefined(self.script_hidden)) + { + self.hidden_terrain = getent(self.script_hidden,"targetname"); + } + else if(isdefined(self.terrain) && isdefined(self.terrain[0].target)) + { + self.hidden_terrain = getent(self.terrain[0].target,"targetname"); + } + + if(isdefined(self.hidden_terrain)) + { + self.hidden_terrain hide(); + return; + } + + return; + } + + if(isdefined(self.has_terrain)) + { + if(isdefined(self.terrain) && isdefined(self.terrain[0].target)) + { + self.hidden_terrain = getent(self.terrain[0].target,"targetname"); + } + + if(isdefined(self.hidden_terrain)) + { + self.hidden_terrain hide(); + return; + } + } +} + +//Function Number: 32 +activate_mortar(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + incoming_sound(undefined,param_06); + level notify("mortar"); + self notify("mortar"); + if(!isdefined(param_00)) + { + param_00 = 256; + } + + if(!isdefined(param_01)) + { + param_01 = 400; + } + + if(!isdefined(param_02)) + { + param_02 = 25; + } + + radiusdamage(self.origin,param_00,param_01,param_02); + if(isdefined(self.has_terrain) && self.has_terrain == 1 && isdefined(self.terrain)) + { + for(var_07 = 0;var_07 < self.terrain.size;var_07++) + { + if(isdefined(self.terrain[var_07])) + { + self.terrain[var_07] delete(); + } + } + } + + if(isdefined(self.hidden_terrain)) + { + self.hidden_terrain show(); + } + + self.has_terrain = 0; + mortar_boom(self.origin,param_03,param_04,param_05,undefined,param_06); +} + +//Function Number: 33 +mortar_boom(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if(!isdefined(param_01)) + { + param_01 = 0.15; + } + + if(!isdefined(param_02)) + { + param_02 = 2; + } + + if(!isdefined(param_03)) + { + param_03 = 850; + } + + thread mortar_sound(param_05); + if(isdefined(param_04)) + { + playfx(param_04,param_00); + } + else + { + playfx(level.mortar,param_00); + } + + earthquake(param_01,param_02,param_00,param_03); + if(level.script != "burnville") + { + return; + } + + if(isdefined(level.playermortar)) + { + return; + } + + if(distance(level.player.origin,param_00) > 300) + { + return; + } + + if(level.script == "carchase" || level.script == "breakout") + { + return; + } + + level.playermortar = 1; + level notify("shell shock player",param_02 * 4); + maps\_shellshock::main(param_02 * 4); +} + +//Function Number: 34 +mortar_sound(param_00) +{ + if(!isdefined(level.mortar_last_sound)) + { + level.mortar_last_sound = -1; + } + + for(var_01 = randomint(3) + 1;var_01 == level.mortar_last_sound;var_01 = randomint(3) + 1) + { + } + + level.mortar_last_sound = var_01; + if(!param_00) + { + self playsound("mortar_explosion" + var_01); + return; + } + + common_scripts\utility::play_sound_in_space("mortar_explosion" + var_01,self.origin); +} + +//Function Number: 35 +incoming_sound(param_00,param_01) +{ + var_02 = gettime(); + if(!isdefined(level.lastmortarincomingtime)) + { + level.lastmortarincomingtime = var_02; + } + else if(var_02 - level.lastmortarincomingtime < 1000) + { + wait 1; + return; + } + else + { + level.lastmortarincomingtime = var_02; + } + + if(!isdefined(param_00)) + { + param_00 = randomint(3) + 1; + } + + if(param_00 == 1) + { + if(param_01) + { + thread common_scripts\utility::play_sound_in_space("mortar_incoming1",self.origin); + } + else + { + self playsound("mortar_incoming1"); + } + + wait 0.8200001; + return; + } + + if(param_00 == 2) + { + if(param_01) + { + thread common_scripts\utility::play_sound_in_space("mortar_incoming2",self.origin); + } + else + { + self playsound("mortar_incoming2"); + } + + wait 0.42; + return; + } + + if(param_01) + { + thread common_scripts\utility::play_sound_in_space("mortar_incoming3",self.origin); + } + else + { + self playsound("mortar_incoming3"); + } + + wait 1.3; +} + +//Function Number: 36 +generic_style_init() +{ + level._explosion_imaxrange = []; + level._explosion_iminrange = []; + level._explosion_iblastradius = []; + level._explosion_idamagemax = []; + level._explosion_idamagemin = []; + level._explosion_fquakepower = []; + level._explosion_iquaketime = []; + level._explosion_iquakeradius = []; +} + +//Function Number: 37 +generic_style_setradius(param_00,param_01,param_02) +{ + level._explosion_iminrange[param_00] = param_01; + level._explosion_imaxrange[param_00] = param_02; +} + +//Function Number: 38 +generic_style_setdamage(param_00,param_01,param_02,param_03) +{ + level._explosion_iblastradius[param_00] = param_01; + level._explosion_idamagemin[param_00] = param_02; + level._explosion_idamagemax[param_00] = param_03; +} + +//Function Number: 39 +generic_style_setquake(param_00,param_01,param_02,param_03) +{ + level._explosion_fquakepower[param_00] = param_01; + level._explosion_iquaketime[param_00] = param_02; + level._explosion_iquakeradius[param_00] = param_03; +} + +//Function Number: 40 +generic_style(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + var_07 = -1; + var_08 = param_05; + var_09 = param_04; + generic_style_setradius(param_00,300,2200); + if(!isdefined(param_01)) + { + param_01 = 7; + } + + if(!isdefined(param_02)) + { + param_02 = 1; + } + + if(!isdefined(param_03)) + { + param_03 = 0; + } + + if(!isdefined(param_06)) + { + param_06 = 0; + } + + if(isdefined(level.explosion_stopnotify) && isdefined(level.explosion_stopnotify[param_00])) + { + level endon(level.explosion_stopnotify[param_00]); + } + + if(!isdefined(level.bstopbarrage) || !isdefined(level.bstopbarrage[param_00])) + { + level.bstopbarrage[param_00] = 0; + } + + var_0A = getentarray(param_00,"targetname"); + for(var_0B = 0;var_0B < var_0A.size;var_0B++) + { + if(isdefined(var_0A[var_0B].target) && !param_06) + { + var_0A[var_0B] setup_mortar_terrain(); + } + } + + if(isdefined(level.explosion_startnotify) && isdefined(level.explosion_startnotify[param_00])) + { + level waittill(level.explosion_startnotify[param_00]); + } + + for(;;) + { + while(!level.bstopbarrage[param_00]) + { + for(var_0C = 0;var_0C < param_02;var_0C++) + { + if(!isdefined(param_05)) + { + var_08 = level._explosion_imaxrange[param_00]; + } + + if(!isdefined(param_04)) + { + var_09 = level._explosion_iminrange[param_00]; + } + + var_0D = randomint(var_0A.size); + for(var_0B = 0;var_0B < var_0A.size;var_0B++) + { + var_0E = var_0B + var_0D % var_0A.size; + var_0F = distance(level.player getorigin(),var_0A[var_0E].origin); + if(var_0F < var_08 && var_0F > var_09 && var_0E != var_07) + { + var_0A[var_0E].iminrange = var_09; + var_0A[var_0E] explosion_activate(param_00); + var_07 = var_0E; + break; + } + } + + var_07 = -1; + if(isdefined(level.explosion_delay) && isdefined(level.explosion_delay[param_00])) + { + wait level.explosion_delay[param_00]; + continue; + } + + wait randomfloat(param_01) + randomfloat(param_01); + } + + if(isdefined(level.explosion_barrage_delay) && isdefined(level.explosion_barrage_delay[param_00])) + { + wait level.explosion_barrage_delay[param_00]; + continue; + } + + wait randomfloat(param_03) + randomfloat(param_03); + } + + wait 0.05; + } +} + +//Function Number: 41 +explosion_activate(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + generic_style_setdamage(param_00,256,25,400); + generic_style_setquake(param_00,0.15,2,850); + if(!isdefined(param_01)) + { + param_01 = level._explosion_iblastradius[param_00]; + } + + if(!isdefined(param_02)) + { + param_02 = level._explosion_idamagemin[param_00]; + } + + if(!isdefined(param_03)) + { + param_03 = level._explosion_idamagemax[param_00]; + } + + if(!isdefined(param_04)) + { + param_04 = level._explosion_fquakepower[param_00]; + } + + if(!isdefined(param_05)) + { + param_05 = level._explosion_iquaketime[param_00]; + } + + if(!isdefined(param_06)) + { + param_06 = level._explosion_iquakeradius[param_00]; + } + + explosion_incoming(param_00); + level notify("explosion",param_00); + var_07 = 1; + var_08 = undefined; + var_09 = self; + if(isdefined(self.iminrange) && distance(level.player.origin,self.origin) < self.iminrange) + { + var_0A = getentarray(param_00,"targetname"); + for(var_0B = 0;var_0B < var_0A.size;var_0B++) + { + var_0C = distance(level.player getorigin(),var_0A[var_0B].origin); + if(var_0C > self.iminrange) + { + if(!isdefined(var_08) || var_0C < var_08) + { + var_08 = var_0C; + var_09 = var_0A[var_0B]; + } + } + } + + if(!isdefined(var_08)) + { + var_07 = 0; + } + } + + if(var_07) + { + radiusdamage(var_09.origin,param_01,param_03,param_02); + } + + if(isdefined(var_09.has_terrain) && var_09.has_terrain == 1 && isdefined(var_09.terrain)) + { + for(var_0D = 0;var_0D < var_09.terrain.size;var_0D++) + { + if(isdefined(var_09.terrain[var_0D])) + { + var_09.terrain[var_0D] delete(); + } + } + } + + if(isdefined(var_09.hidden_terrain)) + { + var_09.hidden_terrain show(); + } + + var_09.has_terrain = 0; + var_09 explosion_boom(param_00,param_04,param_05,param_06); +} + +//Function Number: 42 +explosion_boom(param_00,param_01,param_02,param_03) +{ + if(!isdefined(param_01)) + { + param_01 = 0.15; + } + + if(!isdefined(param_02)) + { + param_02 = 2; + } + + if(!isdefined(param_03)) + { + param_03 = 850; + } + + explosion_sound(param_00); + var_04 = self.origin; + playfx(level._effect[param_00],var_04); + earthquake(param_01,param_02,var_04,param_03); + if(distance(level.player.origin,var_04) > 300) + { + return; + } + + if(level.script == "carchase" || level.script == "breakout") + { + return; + } + + level.playermortar = 1; + level notify("shell shock player",param_02 * 4); + maps\_shellshock::main(param_02 * 4); +} + +//Function Number: 43 +explosion_sound(param_00) +{ + if(!isdefined(level._explosion_last_sound)) + { + level._explosion_last_sound = 0; + } + + for(var_01 = randomint(3) + 1;var_01 == level._explosion_last_sound;var_01 = randomint(3) + 1) + { + } + + level._explosion_last_sound = var_01; + if(level._effecttype[param_00] == "mortar") + { + switch(var_01) + { + case 1: + self playsound("mortar_explosion1"); + break; + + case 2: + self playsound("mortar_explosion2"); + break; + + case 3: + self playsound("mortar_explosion3"); + break; + } + + return; + } + + if(level._effecttype[param_00] == "artillery") + { + switch(var_01) + { + case 1: + self playsound("mortar_explosion4"); + break; + + case 2: + self playsound("mortar_explosion5"); + break; + + case 3: + self playsound("mortar_explosion1"); + break; + } + + return; + } + + if(level._effecttype[param_00] == "bomb") + { + switch(var_01) + { + case 1: + self playsound("mortar_explosion1"); + break; + + case 2: + self playsound("mortar_explosion4"); + break; + + case 3: + self playsound("mortar_explosion5"); + break; + } + + return; + } +} + +//Function Number: 44 +explosion_incoming(param_00,param_01) +{ + if(!isdefined(level._explosion_last_incoming)) + { + level._explosion_last_incoming = -1; + } + + for(param_01 = randomint(4) + 1;param_01 == level._explosion_last_incoming;param_01 = randomint(4) + 1) + { + } + + level._explosion_last_incoming = param_01; + if(level._effecttype[param_00] == "mortar") + { + switch(param_01) + { + case 1: + self playsound("mortar_incoming1"); + wait 0.8200001; + break; + + case 2: + self playsound("mortar_incoming2"); + wait 0.42; + break; + + case 3: + self playsound("mortar_incoming3"); + wait 1.3; + break; + + default: + wait 1.75; + break; + } + + return; + } + + if(level._effecttype[param_00] == "artillery") + { + switch(param_01) + { + case 1: + self playsound("mortar_incoming4"); + wait 0.8200001; + break; + + case 2: + self playsound("mortar_incoming4_new"); + wait 0.42; + break; + + case 3: + self playsound("mortar_incoming1_new"); + wait 1.3; + break; + + default: + wait 1.75; + break; + } + + return; + } + + if(level._effecttype[param_00] == "bomb") + { + switch(param_01) + { + case 1: + self playsound("mortar_incoming2_new"); + wait 1.75; + break; + + case 2: + self playsound("mortar_incoming3_new"); + wait 1.75; + break; + + case 3: + self playsound("mortar_incoming4_new"); + wait 1.75; + break; + + default: + wait 1.75; + break; + } + + return; + } +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_names.gsc b/MW3/PC/SP/maps/_names.gsc new file mode 100644 index 0000000..2e1fd13 --- /dev/null +++ b/MW3/PC/SP/maps/_names.gsc @@ -0,0 +1,831 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_names.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 14 + * Decompile Time: 226 ms + * Timestamp: 10/27/2023 2:22:26 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ +} + +//Function Number: 2 +setup_names() +{ + if(isdefined(level.names)) + { + return; + } + + var_00 = []; + var_01 = 0; + while(var_01 < var_7B.size) + { + level.names[var_7B[var_01]] = []; + var_01++ = var_7B[var_7B.size]; + } + + add_name("american","Abbott"); + add_name("american","Abeles"); + add_name("american","Ackrich"); + add_name("american","Alvarez"); + add_name("american","Andaya"); + add_name("american","Andrew"); + add_name("american","Arcovitch"); + add_name("american","Arem"); + add_name("american","Arya"); + add_name("american","Audick"); + add_name("american","Aye"); + add_name("american","Babichenko"); + add_name("american","Baker"); + add_name("american","Bartolucci"); + add_name("american","Beahm"); + add_name("american","Bedi"); + add_name("american","Bein"); + add_name("american","Bell"); + add_name("american","Benitez"); + add_name("american","Berry"); + add_name("american","Blizard"); + add_name("american","Blumel"); + add_name("american","Boon"); + add_name("american","Bowling"); + add_name("american","Boyd"); + add_name("american","Bracamontes"); + add_name("american","Brooks"); + add_name("american","Brown"); + add_name("american","Buchanan"); + add_name("american","Buckles"); + add_name("american","Capen"); + add_name("american","Casey"); + add_name("american","Cecot"); + add_name("american","Centkowski"); + add_name("american","Chan"); + add_name("american","Chang"); + add_name("american","Chen"); + add_name("american","Chew"); + add_name("american","Chu"); + add_name("american","Chyo"); + add_name("american","Cinquegrano"); + add_name("american","Clark"); + add_name("american","Condrey"); + add_name("american","Conteras"); + add_name("american","Cournoyer"); + add_name("american","Curley"); + add_name("american","Daley"); + add_name("american","David"); + add_name("american","Davis"); + add_name("american","DeBolt"); + add_name("american","DeMartini"); + add_name("american","Denny"); + add_name("american","Deonarine"); + add_name("american","DeRidder"); + add_name("american","Desmarais"); + add_name("american","DiMeo"); + add_name("american","Dobbie"); + add_name("american","Dohr"); + add_name("american","Dolan"); + add_name("american","Drinkward"); + add_name("american","Dye"); + add_name("american","Eady"); + add_name("american","Evans"); + add_name("american","Feinberg"); + add_name("american","Felker"); + add_name("american","Field"); + add_name("american","Fong"); + add_name("american","Ganus"); + add_name("american","Gavazza"); + add_name("american","Gavrisheff"); + add_name("american","Gevorkian"); + add_name("american","Giesler"); + add_name("american","Gil"); + add_name("american","Glasco"); + add_name("american","Goldsworthy"); + add_name("american","Griffith"); + add_name("american","Gu"); + add_name("american","Guaman"); + add_name("american","Gunasingam"); + add_name("american","Hall"); + add_name("american","Halon"); + add_name("american","Harmer"); + add_name("american","Harries"); + add_name("american","Harris"); + add_name("american","Haugen"); + add_name("american","Haworth"); + add_name("american","Hazelroth"); + add_name("american","Heath"); + add_name("american","Hirsh"); + add_name("american","Holmes"); + add_name("american","Hook"); + add_name("american","Hudson"); + add_name("american","Imai"); + add_name("american","Jeffries"); + add_name("american","Johnson"); + add_name("american","Katz"); + add_name("american","Keiser"); + add_name("american","Kelvin"); + add_name("american","Kinney"); + add_name("american","Kriegler"); + add_name("american","Kuhn"); + add_name("american","Kuo"); + add_name("american","Kwak"); + add_name("american","Lai"); + add_name("american","Lam"); + add_name("american","Lamperski"); + add_name("american","Lane"); + add_name("american","Leal"); + add_name("american","Lee"); + add_name("american","Liang"); + add_name("american","Lie"); + add_name("american","Lin"); + add_name("american","Lodato"); + add_name("american","Longland"); + add_name("american","Lopez"); + add_name("american","Lor"); + add_name("american","Louie"); + add_name("american","Luo"); + add_name("american","Luyties"); + add_name("american","Madrid"); + add_name("american","Mai"); + add_name("american","McDonald"); + add_name("american","McEntyre"); + add_name("american","McGrath"); + add_name("american","McGree"); + add_name("american","McLeran"); + add_name("american","Mermelstein"); + add_name("american","Miller"); + add_name("american","Munson"); + add_name("american","Myers"); + add_name("american","Naas"); + add_name("american","Nacu"); + add_name("american","Nahashon"); + add_name("american","Neel"); + add_name("american","O\'Connor"); + add_name("american","O\'Hara"); + add_name("american","Onur"); + add_name("american","Pacheco"); + add_name("american","Pavey"); + add_name("american","Pavlich"); + add_name("american","Peacher"); + add_name("american","Peas"); + add_name("american","Pelayo"); + add_name("american","Pennya"); + add_name("american","Pierce"); + add_name("american","Pineda"); + add_name("american","Pitts"); + add_name("american","Porter"); + add_name("american","Proudfoot"); + add_name("american","Reisdorf"); + add_name("american","Robbins"); + add_name("american","Rowell"); + add_name("american","Rubin"); + add_name("american","Ruiz"); + add_name("american","Ryu"); + add_name("american","Sahas"); + add_name("american","Salud"); + add_name("american","Sanborn"); + add_name("american","Sandler"); + add_name("american","Sarkisyan"); + add_name("american","Schmill"); + add_name("american","Schofield"); + add_name("american","Shande"); + add_name("american","Sharp"); + add_name("american","Shellikeri"); + add_name("american","Shepherd"); + add_name("american","Sheu"); + add_name("american","Sidey"); + add_name("american","Silvers"); + add_name("american","Simas"); + add_name("american","Smith"); + add_name("american","Soucy"); + add_name("american","Sperry"); + add_name("american","Staples"); + add_name("american","Stone"); + add_name("american","Stoughton"); + add_name("american","Strickland"); + add_name("american","Suarez"); + add_name("american","SullivanLee"); + add_name("american","Swenson"); + add_name("american","T"); + add_name("american","Taehoon"); + add_name("american","Tang"); + add_name("american","Turner"); + add_name("american","Veca"); + add_name("american","Vitalone"); + add_name("american","Volker"); + add_name("american","Vuong"); + add_name("american","Wapner"); + add_name("american","Wasilczyk"); + add_name("american","Webb"); + add_name("american","West"); + add_name("american","Whelpley"); + add_name("american","Whitney"); + add_name("american","Whitten"); + add_name("american","Wrede"); + add_name("american","Wright"); + add_name("american","Yang"); + add_name("american","Zaiya"); + add_name("american","Zaring"); + add_name("american","Zipkin"); + add_name("seal","Angel"); + add_name("seal","Apex"); + add_name("seal","Bearcat"); + add_name("seal","Bishop"); + add_name("seal","Boomer"); + add_name("seal","Boxer"); + add_name("seal","Canine"); + add_name("seal","Chemist"); + add_name("seal","Chemo"); + add_name("seal","Cherub"); + add_name("seal","Chino"); + add_name("seal","Coffin"); + add_name("seal","Coma"); + add_name("seal","Cyclops"); + add_name("seal","Cypher"); + add_name("seal","Doc"); + add_name("seal","Druid"); + add_name("seal","Exxon"); + add_name("seal","Gator"); + add_name("seal","Hannibal"); + add_name("seal","Hazard"); + add_name("seal","Hitman"); + add_name("seal","Jayhawk"); + add_name("seal","Jester"); + add_name("seal","Justice"); + add_name("seal","Klepto"); + add_name("seal","Kojak"); + add_name("seal","Langley"); + add_name("seal","Neptune"); + add_name("seal","Mamba"); + add_name("seal","Midnight"); + add_name("seal","Neon"); + add_name("seal","Nomad"); + add_name("seal","Ogre"); + add_name("seal","Ozone"); + add_name("seal","Patron"); + add_name("seal","Pharaoh"); + add_name("seal","Pieces"); + add_name("seal","Poet"); + add_name("seal","Preacher"); + add_name("seal","Reaper"); + add_name("seal","Redcell"); + add_name("seal","Roadie"); + add_name("seal","Robot"); + add_name("seal","Rocket"); + add_name("seal","Rooster"); + add_name("seal","Sparrow"); + add_name("seal","Taco"); + add_name("seal","Thumper"); + add_name("seal","Trojan"); + add_name("seal","Twister"); + add_name("seal","Undertone"); + add_name("seal","Utah"); + add_name("seal","Whiskey"); + add_name("seal","Worm"); + add_name("seal","Yankee"); + add_name("seal","Zero"); + copy_names("taskforce","seal"); + copy_names("delta","seal"); + add_name("secretservice","Smith"); + add_name("secretservice","Jones"); + add_name("secretservice","Jackson"); + add_name("secretservice","Johnson"); + add_name("secretservice","Thompson"); + add_name("secretservice","Ash"); + add_name("secretservice","Bird"); + add_name("secretservice","Finn"); + add_name("secretservice","Fine"); + add_name("secretservice","Brown"); + add_name("secretservice","White"); + add_name("secretservice","Gray"); + add_name("secretservice","Black"); + add_name("secretservice","Wylie"); + add_name("secretservice","Rosenhaus"); + add_name("secretservice","Boras"); + add_name("secretservice","McKinnis"); + add_name("secretservice","Duffy"); + add_name("secretservice","Falk"); + add_name("secretservice","Tellem"); + add_name("secretservice","Goodwin"); + add_name("secretservice","Condon"); + add_name("secretservice","Parker"); + add_name("secretservice","McGuire"); + add_name("secretservice","Steinberg"); + add_name("british","Abbot"); + add_name("british","Adams"); + add_name("british","Bartlett"); + add_name("british","Boyd"); + add_name("british","Boyle"); + add_name("british","Bremner"); + add_name("british","Carlyle"); + add_name("british","Carver"); + add_name("british","Cheek"); + add_name("british","Clarke"); + add_name("british","Collins"); + add_name("british","Compton"); + add_name("british","Connolly"); + add_name("british","Cook"); + add_name("british","Dowd"); + add_name("british","Field"); + add_name("british","Fleming"); + add_name("british","Fletcher"); + add_name("british","Flynn"); + add_name("british","Grant"); + add_name("british","Greaves"); + add_name("british","Harris"); + add_name("british","Harrison"); + add_name("british","Heath"); + add_name("british","Henderson"); + add_name("british","Hopkins"); + add_name("british","Hoyt"); + add_name("british","Kent"); + add_name("british","Lewis"); + add_name("british","Lipton"); + add_name("british","Macdonald"); + add_name("british","Maxwell"); + add_name("british","McQuarrie"); + add_name("british","Miller"); + add_name("british","Mitchell"); + add_name("british","Moore"); + add_name("british","Murphy"); + add_name("british","Murray"); + add_name("british","Pearce"); + add_name("british","Plumber"); + add_name("british","Pritchard"); + add_name("british","Rankin"); + add_name("british","Reed"); + add_name("british","Ritchie"); + add_name("british","Ross"); + add_name("british","Roth"); + add_name("british","Smith"); + add_name("british","Stevenson"); + add_name("british","Stuart"); + add_name("british","Sullivan"); + add_name("british","Thompson"); + add_name("british","Veale"); + add_name("british","Wallace"); + add_name("british","Wells"); + add_name("british","Welsh"); + add_name("russian","Sasha Ivanov"); + add_name("russian","Aleksei Vyshinskiy"); + add_name("russian","Boris Ryzhkov"); + add_name("russian","Dima Tikhonov"); + add_name("russian","Oleg Kosygin"); + add_name("russian","Pyotr Bulganin"); + add_name("russian","Petya Malenkov"); + add_name("russian","Alyosha Tarkovsky"); + add_name("russian","Sergei Grombyo"); + add_name("russian","Viktor Kuznetsov"); + add_name("russian","Misha Podgorniy"); + add_name("russian","Borya Mikoyan"); + add_name("russian","Anatoly Voroshilov"); + add_name("russian","Kolya Shvernik"); + add_name("russian","Nikolai Kalinin"); + add_name("russian","Vladimir Brezhnev"); + add_name("russian","Pavel Chernenko"); + add_name("russian","Volodya Andropov"); + add_name("russian","Yuri Nikitin"); + add_name("russian","Dmitri Petrenko"); + add_name("russian","Vanya Gerasimov"); + add_name("russian","Mikhail Zhuravlev"); + add_name("russian","Ivan Lukin"); + add_name("russian","Kostya Golubev"); + add_name("russian","Konstantin Lebedev"); + add_name("russian","Aleksandr Vasilev"); + add_name("russian","Yakov Glushenko"); + add_name("russian","Sasha Semenov"); + add_name("russian","Aleksei Ulyanov"); + add_name("russian","Boris Yefremov"); + add_name("russian","Dima Chernyshenko"); + add_name("russian","Oleg Stepanoshvili"); + add_name("russian","Pyotr Demchenko"); + add_name("russian","Petya Avagimov"); + add_name("russian","Alyosha Murzaev"); + add_name("russian","Sergei Shkuratov"); + add_name("russian","Viktor Yakimenko"); + add_name("russian","Misha Masijashvili"); + add_name("russian","Borya Shapovalov"); + add_name("russian","Anatoly Ivashenko"); + add_name("russian","Kolya Dovzhenko"); + add_name("russian","Nikolai Turdyev"); + add_name("russian","Vladimir Sabgaida"); + add_name("russian","Pavel Svirin"); + add_name("russian","Volodya Sarayev"); + add_name("russian","Yuri Kiselev"); + add_name("russian","Dmitri Bondarenko"); + add_name("russian","Vanya Chernogolov"); + add_name("russian","Mikhail Voronov"); + add_name("russian","Ivan Afanasyev"); + add_name("russian","Kostya Gridin"); + add_name("russian","Konstantin Petrov"); + add_name("russian","Aleksandr Rykov"); + add_name("russian","Yakov Shvedov"); + add_name("arab","Abdulaziz"); + add_name("arab","Abdullah"); + add_name("arab","Ali"); + add_name("arab","Amin"); + add_name("arab","Bassam"); + add_name("arab","Fahd"); + add_name("arab","Faris"); + add_name("arab","Fouad"); + add_name("arab","Habib"); + add_name("arab","Hakem"); + add_name("arab","Hassan"); + add_name("arab","Ibrahim"); + add_name("arab","Imad"); + add_name("arab","Jabbar"); + add_name("arab","Kareem"); + add_name("arab","Khalid"); + add_name("arab","Malik"); + add_name("arab","Muhammad"); + add_name("arab","Nasir"); + add_name("arab","Omar"); + add_name("arab","Rafiq"); + add_name("arab","Rami"); + add_name("arab","Said"); + add_name("arab","Salim"); + add_name("arab","Samir"); + add_name("arab","Talib"); + add_name("arab","Tariq"); + add_name("arab","Youssef"); + add_name("arab","Ziad"); + add_name("portuguese","Carlitos"); + add_name("portuguese","Antonio"); + add_name("portuguese","Gervasio"); + add_name("portuguese","Lois"); + add_name("portuguese","Xesus"); + add_name("shadowcompany","Lestat"); + add_name("shadowcompany","Nosferatu"); + add_name("shadowcompany","Lecter"); + add_name("multilingual","Kugelschreiber"); + add_name("multilingual","Flughafen"); + add_name("french","Astor"); + add_name("french","Beliveau"); + add_name("french","Chaloux"); + add_name("french","Leboeuf"); + add_name("french","Leblanc"); + add_name("french","Navarre"); + add_name("french","Perilloux"); + add_name("french","Philippe"); + add_name("french","Taillon"); + add_name("african","Sulaiman"); + add_name("african","Camara"); + add_name("african","Mustapha"); + add_name("african","Abubakarr"); + add_name("czech","Andrej"); + add_name("czech","Anton"); + add_name("czech","Antonín"); + add_name("czech","Arnost"); + add_name("czech","Augustín"); + add_name("czech","Bartolomej"); + add_name("czech","Beda"); + add_name("czech","Bedrich"); + add_name("czech","Benes"); + add_name("czech","Blaze"); + add_name("czech","Bohdan"); + add_name("czech","Bohuslav"); + add_name("czech","Bonifác"); + add_name("czech","Bozidar"); + add_name("czech","Branislav"); + add_name("czech","Cenek"); + add_name("czech","Ctibor"); + add_name("czech","Dalek"); + add_name("czech","Dalibor"); + add_name("czech","Damek"); + add_name("czech","Danek"); + add_name("czech","Dávid"); + add_name("czech","Dobromil"); + add_name("czech","Dominik"); + add_name("czech","Drahoslav"); + add_name("czech","Dusa"); + add_name("czech","Edvard"); + add_name("czech","Eliás"); + add_name("czech","Evzen"); + add_name("czech","Frantisek"); + add_name("czech","Gabriel"); + add_name("czech","Georg"); + add_name("czech","Holic"); + add_name("czech","Honza"); + add_name("czech","Ignác"); + add_name("czech","Imrich"); + add_name("czech","Ivan"); + add_name("czech","Jakub"); + add_name("czech","Jan"); + add_name("czech","Jarmil"); + add_name("czech","Jaroslav"); + add_name("czech","Jindrich"); + add_name("czech","Jirí"); + add_name("czech","Johan"); + add_name("czech","Josef"); + add_name("czech","Július"); + add_name("czech","Juraj"); + add_name("czech","Kamil"); + add_name("czech","Konstantin"); + add_name("czech","Kopecký"); + add_name("czech","Kornel"); + add_name("czech","Kristof"); + add_name("czech","Ladislav"); + add_name("czech","Leos"); + add_name("czech","Libor"); + add_name("czech","Ludvík"); + add_name("czech","Lukás"); + add_name("czech","Marek"); + add_name("czech","Matej"); + add_name("czech","Matous"); + add_name("czech","Matus"); + add_name("czech","Michal"); + add_name("czech","Mikulás"); + add_name("czech","Milan"); + add_name("czech","Milos"); + add_name("czech","Mirek"); + add_name("czech","Miroslav"); + add_name("czech","Nikola"); + add_name("czech","Oldrich"); + add_name("czech","Ondrej"); + add_name("czech","Otakar"); + add_name("czech","Patrik"); + add_name("czech","Pavel"); + add_name("czech","Petr"); + add_name("czech","Premysl"); + add_name("czech","Radek"); + add_name("czech","Radim"); + add_name("czech","Radoslav"); + add_name("czech","Rehor"); + add_name("czech_surnames","Blumel"); + add_name("czech_surnames","Maly"); + add_name("czech_surnames","Pospisil"); + add_name("czech_surnames","Soukup"); + add_name("czech_surnames","Blazek"); + add_name("czech_surnames","Dolezal"); + add_name("czech_surnames","Fiser"); + add_name("czech_surnames","Kadlec"); + add_name("czech_surnames","Kolar"); + add_name("czech_surnames","Kopecky"); + add_name("czech_surnames","Kriz"); + add_name("czech_surnames","Mares"); + add_name("czech_surnames","Masek"); + add_name("czech_surnames","Polak"); + add_name("czech_surnames","Sedlacek"); + add_name("czech_surnames","Stastny"); + add_name("czech_surnames","Tuma"); + add_name("czech_surnames","Vanek"); + add_name("czech_surnames","Blaha"); + add_name("czech_surnames","Dusek"); + add_name("czech_surnames","Hruska"); + add_name("czech_surnames","Janda"); + add_name("czech_surnames","Kohout"); + add_name("czech_surnames","Matousek"); + add_name("czech_surnames","Moravec"); + add_name("czech_surnames","Mueller"); + add_name("czech_surnames","Riha"); + add_name("czech_surnames","Strnad"); + add_name("czech_surnames","Sykora"); + add_name("czech_surnames","Simek"); + add_name("czech_surnames","Smid"); + add_name("czech_surnames","Stepanek"); + add_name("czech_surnames","Tichy"); + add_name("czech_surnames","Vacek"); + add_name("czech_surnames","Vlcek"); + copy_names("pmc","czech_surnames"); + init_script_friendnames(); + for(var_01 = 0;var_01 < var_7B.size;var_01++ = "pmc") + { + remove_script_friendnames_from_list(var_7B[var_01]); + randomize_name_list(var_7B[var_01]); + level.nameindex[var_7B[var_01]] = 0; + } +} + +//Function Number: 3 +copy_names(param_00,param_01) +{ + level.names[param_00] = level.names[param_01]; +} + +//Function Number: 4 +add_name(param_00,param_01) +{ + level.names[param_00][level.names[param_00].size] = param_01; +} + +//Function Number: 5 +remove_name(param_00,param_01) +{ + level.names[param_00] = common_scripts\utility::array_remove(level.names[param_00],param_01); +} + +//Function Number: 6 +init_script_friendnames() +{ + var_00 = []; + var_01 = getspawnerarray(); + var_02 = getaiarray(); + foreach(var_04 in var_01) + { + if(isdefined(var_04.script_friendname) && var_04.script_friendname != "none") + { + var_05 = normalize_script_friendname(var_04.script_friendname); + var_00[var_00.size] = var_05; + } + } + + foreach(var_08 in var_02) + { + if(isdefined(var_08.script_friendname) && var_08.script_friendname != "none") + { + var_05 = normalize_script_friendname(var_08.script_friendname); + var_00[var_00.size] = var_05; + } + } + + level.script_friendnames = var_00; +} + +//Function Number: 7 +normalize_script_friendname(param_00) +{ + var_01 = strtok(param_00," "); + if(var_01.size > 1) + { + param_00 = var_01[1]; + } + + return param_00; +} + +//Function Number: 8 +remove_script_friendnames_from_list(param_00) +{ + foreach(var_02 in level.script_friendnames) + { + foreach(var_04 in level.names[param_00]) + { + if(var_02 == var_04) + { + remove_name(param_00,var_04); + } + } + } +} + +//Function Number: 9 +randomize_name_list(param_00) +{ + var_01 = level.names[param_00].size; + for(var_02 = 0;var_02 < var_01;var_02++) + { + var_03 = randomint(var_01); + var_04 = level.names[param_00][var_02]; + level.names[param_00][var_02] = level.names[param_00][var_03]; + level.names[param_00][var_03] = var_04; + } +} + +//Function Number: 10 +get_name(param_00) +{ + if(isdefined(self.team) && self.team == "neutral") + { + return; + } + + if(!isdefined(param_00) && level.script == "credits") + { + self.airank = "private"; + return; + } + + if(isdefined(self.script_friendname)) + { + if(self.script_friendname == "none") + { + return; + } + + self.name = self.script_friendname; + getrankfromname(self.name); + self notify("set name and rank"); + return; + } + + get_name_for_nationality(self.voice); + self notify("set name and rank"); +} + +//Function Number: 11 +get_name_for_nationality(param_00) +{ + level.nameindex[param_00] = level.nameindex[param_00] + 1 % level.names[param_00].size; + var_01 = level.names[param_00][level.nameindex[param_00]]; + var_02 = randomint(10); + if(nationalityusessurnames(param_00)) + { + var_03 = param_00 + "_surnames"; + level.nameindex[var_03] = level.nameindex[var_03] + 1 % level.names[var_03].size; + var_01 = var_01 + " " + level.names[var_03][level.nameindex[var_03]]; + } + + if(nationalityusescallsigns(param_00)) + { + var_04 = var_01; + self.airank = "private"; + } + else if(var_01 == "secretservice") + { + var_04 = "Agent " + var_02; + self.airank = "private"; + } + else if(var_04 > 5) + { + var_04 = "Pvt. " + var_02; + self.airank = "private"; + } + else if(var_04 > 2) + { + var_04 = "Cpl. " + var_02; + self.airank = "private"; + } + else + { + var_04 = "Sgt. " + var_02; + self.airank = "sergeant"; + } + + if(isai(self) && self isbadguy()) + { + self.ainame = var_04; + return; + } + + self.name = var_04; +} + +//Function Number: 12 +getrankfromname(param_00) +{ + if(!isdefined(param_00)) + { + self.airank = "private"; + } + + var_01 = strtok(param_00," "); + var_02 = var_01[0]; + switch(var_02) + { + case "Pvt.": + self.airank = "private"; + break; + + case "Pfc.": + self.airank = "private"; + break; + + case "Agent": + self.airank = "private"; + break; + + case "Cpl.": + self.airank = "corporal"; + break; + + case "Sgt.": + self.airank = "sergeant"; + break; + + case "Lt.": + self.airank = "lieutenant"; + break; + + case "Cpt.": + self.airank = "captain"; + break; + + default: + self.airank = "private"; + break; + } +} + +//Function Number: 13 +nationalityusescallsigns(param_00) +{ + switch(param_00) + { + case "seal": + case "taskforce": + case "czech": + case "delta": + return 1; + } + + return 0; +} + +//Function Number: 14 +nationalityusessurnames(param_00) +{ + return isdefined(level.names[param_00 + "_surnames"]); +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_noder.gsc b/MW3/PC/SP/maps/_noder.gsc new file mode 100644 index 0000000..9208ce7 --- /dev/null +++ b/MW3/PC/SP/maps/_noder.gsc @@ -0,0 +1,1486 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_noder.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 77 + * Decompile Time: 1277 ms + * Timestamp: 10/27/2023 2:22:19 AM +*******************************************************************/ + +//Function Number: 1 +main(param_00) +{ + if(!getdvarint("noder")) + { + return; + } + + level.drone_paths = []; + level.scr_anim["generic"]["node_cover_left"][0] = %cornercrl_reloada; + level.scr_anim["generic"]["node_cover_left"][1] = %cornercrl_look_fast; + level.scr_anim["generic"]["node_cover_left"][2] = %corner_standl_grenade_b; + level.scr_anim["generic"]["node_cover_left"][3] = %corner_standl_flinch; + level.scr_anim["generic"]["node_cover_left"][4] = %corner_standl_look_idle; + level.scr_anim["generic"]["node_cover_left"][5] = %corner_standl_look_2_alert; + level.scr_anim["generic"]["node_cover_right"][0] = %cornercrr_reloada; + level.scr_anim["generic"]["node_cover_right"][1] = %corner_standr_grenade_b; + level.scr_anim["generic"]["node_cover_right"][2] = %corner_standr_flinch; + level.scr_anim["generic"]["node_cover_right"][3] = %corner_standr_look_idle; + level.scr_anim["generic"]["node_cover_right"][4] = %corner_standr_look_2_alert; + level.scr_anim["generic"]["node_cover_crouch"][0] = %covercrouch_hide_idle; + level.scr_anim["generic"]["node_cover_crouch"][1] = %covercrouch_twitch_1; + level.scr_anim["generic"]["node_cover_crouch"][2] = %covercrouch_hide_2_aim; + level.scr_anim["generic"]["node_cover_crouch"][3] = %covercrouch_hide_2_aim; + level.scr_anim["generic"]["node_cover_crouch"][4] = %covercrouch_hide_2_aim; + level.scr_anim["generic"]["node_cover_crouch"][5] = %covercrouch_hide_look; + level.scr_anim["generic"]["node_cover_crouch_window"][0] = %covercrouch_hide_idle; + level.scr_anim["generic"]["node_cover_crouch_window"][1] = %covercrouch_twitch_1; + level.scr_anim["generic"]["node_cover_crouch_window"][2] = %covercrouch_hide_2_aim; + level.scr_anim["generic"]["node_cover_crouch_window"][3] = %covercrouch_hide_2_aim; + level.scr_anim["generic"]["node_cover_crouch_window"][4] = %covercrouch_hide_2_aim; + level.scr_anim["generic"]["node_cover_crouch_window"][5] = %covercrouch_hide_look; + level.scr_anim["generic"]["node_cover_prone"][0] = %crouch_2_prone_firing; + level.scr_anim["generic"]["node_cover_prone"][1] = %prone_2_crouch; + level.scr_anim["generic"]["node_cover_prone"][2] = %prone_reload; + level.scr_anim["generic"]["node_cover_stand"][0] = %coverstand_reloada; + level.scr_anim["generic"]["node_concealment_crouch"][0] = %covercrouch_hide_idle; + level.scr_anim["generic"]["node_concealment_crouch"][1] = %covercrouch_twitch_1; + level.scr_anim["generic"]["node_concealment_crouch"][2] = %covercrouch_hide_2_aim; + level.scr_anim["generic"]["node_concealment_crouch"][3] = %covercrouch_hide_2_aim; + level.scr_anim["generic"]["node_concealment_crouch"][4] = %covercrouch_hide_2_aim; + level.scr_anim["generic"]["node_concealment_crouch"][5] = %covercrouch_hide_look; + level.scr_anim["generic"]["node_concealment_prone"][0] = %crouch_2_prone_firing; + level.scr_anim["generic"]["node_concealment_prone"][1] = %prone_2_crouch; + level.scr_anim["generic"]["node_concealment_prone"][2] = %prone_reload; + level.scr_anim["generic"]["node_concealment_stand"][0] = %coverstand_reloada; + level.node_offset = []; + level.node_offset["node_cover_left"] = (0,90,0); + level.node_offset["node_cover_right"] = (0,-90,0); + level.node_offset["node_pathnode"] = (0,0,0); + level.node_offset["node_cover_crouch"] = (0,0,0); + level.node_offset["node_cover_crouch_window"] = (0,0,0); + level.node_offset["node_cover_prone"] = (0,0,0); + level.node_offset["node_cover_stand"] = (0,0,0); + level.node_offset["node_concealment_crouch"] = (0,0,0); + level.node_offset["node_concealment_prone"] = (0,0,0); + level.node_offset["node_concealment_stand"] = (0,0,0); + level.noder_node_delete = 0; + level.var_1B45 = []; + var_01 = getspawnerarray(); + level.var_1B46 = 0; + level.dontdonotetracks = []; + if(var_01.size) + { + var_02 = var_01[0]; + var_02 maps\_spawner::dronespawner_init(); + for(var_03 = 0;var_03 < 20;var_03++) + { + level.dontdonotetracks[var_03] = maps\_spawner::spawner_dronespawn(var_02); + level.dontdonotetracks[var_03] notsolid(); + level.dontdonotetracks[var_03] hide(); + level.dontdonotetracks[var_03].var_11E5 = 1; + level.dontdonotetracks[var_03].dummyguyindex = var_03; + level.var_1B4B[var_03] = spawn("script_origin",(0,0,0)); + level.var_1B4B[var_03].var_1B4B = 1; + level.var_1B46++; + } + } + + level.dummyguy_index = 0; + maps\_anim::init(); + var_04 = getentarray(); + foreach(var_06 in var_04) + { + if((isdefined(var_06.classname) && var_06.classname == "player") || isdefined(var_06.var_11E5) || isdefined(var_06.var_1B4B)) + { + continue; + } + + if(isdefined(var_06)) + { + var_06 delete(); + } + } + + var_04 = undefined; + level.dummynode = 64; + level.place_node_group = []; + level.var_1B4F = "node_pathnode"; + level.painter_startgroup = []; + level.noder_heightoffset = (0,0,32); + level.var_1B52 = 0; + level.wall_look = 256; + level.coliding_node = undefined; + level.var_1B55 = 0; + level.node_animation_preview = 1; + add_node_type("node_pathnode",undefined); + add_node_type("node_cover_crouch"); + add_node_type("node_cover_crouch_window"); + add_node_type("node_cover_left",-1); + add_node_type("node_cover_right",1); + add_node_type("node_cover_prone"); + add_node_type("node_cover_stand"); + add_node_type("node_concealment_crouch"); + add_node_type("node_concealment_prone"); + add_node_type("node_concealment_stand"); + thread hack_start(); + thread hud_init(); + thread noder_init(); + common_scripts\utility::flag_wait("user_hud_active"); + thread draw_selected_node_name(); + thread manage_nearnodes(); + level.drone_paths = []; + var_08 = getallnodes(); + if(var_08.size) + { + level.player setorigin(maps\_utility::getclosest(level.player.origin,var_08).origin); + } + + for(;;) + { + wait 0.05; + level.player_view_trace = player_view_trace(); + place_node_place(1); + } +} + +//Function Number: 2 +hack_start() +{ + common_scripts\utility::flag_init("user_alive"); + while(!isdefined(get_mp_player())) + { + wait 0.05; + } + + wait 0.05; + level.noder_player = get_mp_player(); + level.noder_player takeallweapons(); + level.noder_player allowcrouch(0); + level.noder_player allowjump(0); + level.noder_player allowprone(0); + common_scripts\utility::flag_set("user_alive"); +} + +//Function Number: 3 +noder_init() +{ + level.preview_node = spawn("script_model",(0,0,0)); + precachemodel("node_preview"); + level.preview_node setmodel("node_preview"); + level.preview_node notsolid(); + level.selector_model = spawn("script_model",(0,0,0)); + level.selector_model setmodel("node_select"); + level.selector_model notsolid(); + level.selector_model hide(); + level.selected_node = undefined; + setcurrentgroup(level.var_1B4F); + level.var_1B4F = undefined; + playerinit(); +} + +//Function Number: 4 +hud_update_placed_model_count() +{ + level.hud_noder["helppm"].description setvalue(level.painter_startgroup.size); + var_00 = 256; + if(level.painter_startgroup.size < var_00) + { + level.hud_noder["helppm"].description.color = (1,1,1); + return; + } + + var_01 = 1; + var_02 = 1 - level.painter_startgroup.size - var_00 / var_00; + var_03 = var_02; + level.hud_noder["helppm"].description.color = (var_01,var_02,var_03); +} + +//Function Number: 5 +controler_hud_add(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = 520; + var_06 = 120; + var_07 = 18; + var_08 = 0.8; + var_09 = 20; + var_0A = 1.4; + if(!isdefined(level.hud_noder) || !isdefined(level.hud_noder[param_00])) + { + level.hud_noder[param_00] = _newhudelem(); + var_0B = _newhudelem(); + } + else + { + var_0B = level.hud_noder[param_01].description; + } + + level.hud_noder[param_00].location = 0; + level.hud_noder[param_00].alignx = "right"; + level.hud_noder[param_00].aligny = "middle"; + level.hud_noder[param_00].foreground = 1; + level.hud_noder[param_00].fontscale = 1.5; + level.hud_noder[param_00].sort = 20; + level.hud_noder[param_00].alpha = var_08; + level.hud_noder[param_00].x = var_05 + var_09; + level.hud_noder[param_00].y = var_06 + param_01 * var_07; + level.hud_noder[param_00] _settext(param_02); + var_0B.location = 0; + var_0B.alignx = "left"; + var_0B.aligny = "middle"; + var_0B.foreground = 1; + var_0B.fontscale = var_0A; + var_0B.sort = 20; + var_0B.alpha = var_08; + var_0B.x = var_05 + var_09; + var_0B.y = var_06 + param_01 * var_07; + if(isdefined(param_04)) + { + var_0B setvalue(param_04); + } + + if(isdefined(param_03)) + { + var_0B _settext(param_03); + } + + level.hud_noder[param_00].description = var_0B; +} + +//Function Number: 6 +hud_init() +{ + common_scripts\utility::flag_init("user_hud_active"); + common_scripts\utility::flag_wait("user_alive"); + var_00 = 17; + var_01 = []; + var_02 = 15; + var_03 = int(var_00 / 2); + var_04 = 240 + var_03 * var_02; + var_05 = 0.7 / var_03; + var_06 = var_05; + for(var_07 = 0;var_07 < var_00;var_07++) + { + var_01[var_07] = _newhudelem(); + var_01[var_07].location = 0; + var_01[var_07].alignx = "left"; + var_01[var_07].aligny = "middle"; + var_01[var_07].foreground = 1; + var_01[var_07].fontscale = 2; + var_01[var_07].sort = 20; + if(var_07 == var_03) + { + var_01[var_07].alpha = 1; + } + else + { + var_01[var_07].alpha = var_06; + } + + var_01[var_07].x = 0; + var_01[var_07].y = var_04; + var_01[var_07] _settext("."); + if(var_07 == var_03) + { + var_05 = var_05 * -1; + } + + var_06 = var_06 + var_05; + var_04 = var_04 - var_02; + } + + level.group_hudelems = var_01; + var_08 = _newhudelem(); + var_08.location = 0; + var_08.alignx = "left"; + var_08.aligny = "bottom"; + var_08.foreground = 1; + var_08.fontscale = 2; + var_08.sort = 20; + var_08.alpha = 1; + var_08.x = 320; + var_08.y = 244; + var_08 _settext("."); + level.crosshair = var_08; + var_08 = _newhudelem(); + var_08.location = 0; + var_08.alignx = "center"; + var_08.aligny = "bottom"; + var_08.foreground = 1; + var_08.fontscale = 2; + var_08.sort = 20; + var_08.alpha = 0; + var_08.x = 320; + var_08.y = 244; + var_08 setvalue(0); + level.crosshair_value = var_08; + var_09 = _newhudelem(); + var_09.location = 0; + var_09.alignx = "center"; + var_09.aligny = "bottom"; + var_09.foreground = 1; + var_09.fontscale = 2; + var_09.sort = 20; + var_09.alpha = 1; + var_09.x = 320; + var_09.y = 300; + var_09 _settext(""); + level.selection_lock_indicator = var_09; + var_0A = _newhudelem(); + var_0A.location = 0; + var_0A.alignx = "center"; + var_0A.aligny = "bottom"; + var_0A.foreground = 1; + var_0A.fontscale = 2; + var_0A.sort = 20; + var_0A.alpha = 1; + var_0A.x = 320; + var_0A.y = 300; + var_0A _settext(""); + level.node_animation_preview_indicator = var_0A; + var_0B = 550; + var_0C = 120; + var_0D = 18; + var_0E = 1; + var_0F = 0.8; + var_10 = 20; + var_11 = 1.4; + controler_hud_add("helppm",1,"^5Placed Nodes: ",undefined,level.painter_startgroup.size); + controler_hud_add("gridsize",2,"^5Grid Size: ",undefined,level.wall_look); + controler_hud_add("helpxy",6,"^4X/^3Y: ",undefined,level.dummynode); + controler_hud_add("helpab",7,"^2A/^1B^7: ","-"); + controler_hud_add("helplsrs",8,"^8L^7/R Stick: ","-"); + controler_hud_add("helplbrb",9,"^8L^7/R Shoulder: ","-"); + controler_hud_add("helpdpu",10,"^8DPad U/^7D: ","-"); + controler_hud_add("helpdpl",11,"^8DPad L/^7R: ","-"); + controler_hud_add("helpF",17,"^8W: ","-"); + level.hud_noder["helpF"].x = var_0B - 450; + level.hud_noder["helpF"].description.x = var_0B - 450; + hint_buttons_main(); + common_scripts\utility::flag_set("user_hud_active"); +} + +//Function Number: 7 +controler_hud_update_text(param_00,param_01) +{ + level.hud_noder[param_00].description _settext(param_01); +} + +//Function Number: 8 +controler_hud_update_button(param_00,param_01) +{ + level.hud_noder[param_00] _settext(param_01); +} + +//Function Number: 9 +setcurrentgroup(param_00) +{ + common_scripts\utility::flag_wait("user_hud_active"); + level.place_node_current_group = param_00; + var_01 = getarraykeys(level.place_node_group); + var_02 = 0; + var_03 = int(level.group_hudelems.size / 2); + for(var_04 = 0;var_04 < var_01.size;var_04++) + { + if(var_01[var_04] == param_00) + { + var_02 = var_04; + break; + } + } + + for(var_04 = 0;var_04 < level.group_hudelems.size;var_04++) + { + level.group_hudelems[var_04] clearalltextafterhudelem(); + } + + level.group_hudelems[var_03] _settext("^3" + gettext_nonode(var_01[var_02])); + for(var_04 = 1;var_04 < level.group_hudelems.size - var_03;var_04++) + { + if(var_02 - var_04 < 0) + { + level.group_hudelems[var_03 + var_04] _settext("-- --"); + continue; + } + + level.group_hudelems[var_03 + var_04] _settext(gettext_nonode(var_01[var_02 - var_04])); + } + + for(var_04 = 1;var_04 < level.group_hudelems.size - var_03;var_04++) + { + if(var_02 + var_04 > var_01.size - 1) + { + level.group_hudelems[var_03 - var_04] _settext("-- --"); + continue; + } + + level.group_hudelems[var_03 - var_04] _settext(gettext_nonode(var_01[var_02 + var_04])); + } + + param_00 = getcurrent_groupstruct(); + level.wall_look = param_00.grid_size; + hud_update_gridsize(); +} + +//Function Number: 10 +setgroup_up() +{ + var_00 = undefined; + var_01 = getarraykeys(level.place_node_group); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + if(var_01[var_02] == level.place_node_current_group) + { + var_00 = var_02 + 1; + break; + } + } + + if(var_00 == var_01.size) + { + var_00 = 0; + } + + setcurrentgroup(var_01[var_00]); +} + +//Function Number: 11 +setgroup_down() +{ + var_00 = undefined; + var_01 = getarraykeys(level.place_node_group); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + if(var_01[var_02] == level.place_node_current_group) + { + var_00 = var_02 - 1; + break; + } + } + + if(var_00 < 0) + { + var_00 = var_01.size - 1; + } + + setcurrentgroup(var_01[var_00]); +} + +//Function Number: 12 +add_node_type(param_00,param_01,param_02) +{ + if(!isdefined(param_01)) + { + param_01 = 0; + } + + if(!isdefined(param_02)) + { + param_02 = 0; + } + + precachemodel(param_00); + if(!isdefined(level.place_node_group[param_00])) + { + var_03 = spawnstruct(); + var_03.wall_snap_direction = param_01; + var_03.grid_size = param_02; + level.place_node_group[param_00] = var_03; + } + + level.place_node_group[param_00].model = param_00; +} + +//Function Number: 13 +playerinit() +{ + level.noder_max = 950; + common_scripts\utility::flag_wait("user_hud_active"); + level.noder_player takeallweapons(); + level.button_modifier_func = []; + level.button_func = []; + level.noder_player thread button_monitor(); + level.noder_player thread button_modifier(); + set_button_funcs_main(); + add_button_modifier_func(::set_button_funcs_quick_select,::set_button_funcs_quick_select_release,"BUTTON_LSTICK"); +} + +//Function Number: 14 +button_modifier() +{ + for(;;) + { + foreach(var_02, var_01 in level.button_modifier_func) + { + if(self buttonpressed(var_02)) + { + [[ level.button_modifier_func[var_02] ]](); + while(self buttonpressed(var_02)) + { + wait 0.05; + } + + [[ level.button_modifier_release_func[var_02] ]](); + wait 0.05; + } + } + + wait 0.05; + } +} + +//Function Number: 15 +button_monitor() +{ + for(;;) + { + foreach(var_02, var_01 in level.button_func) + { + if(self buttonpressed(var_02)) + { + [[ level.button_func[var_02] ]](); + if(!level.button_func_isflow[var_02]) + { + while(self buttonpressed(var_02)) + { + wait 0.05; + } + } + + break; + } + } + + wait 0.05; + } +} + +//Function Number: 16 +add_button_func(param_00,param_01,param_02) +{ + var_03 = []; + level.button_func[param_02] = param_00; + level.button_func_isflow[param_02] = param_01; +} + +//Function Number: 17 +add_button_modifier_func(param_00,param_01,param_02) +{ + level.button_modifier_func[param_02] = param_00; + level.button_modifier_release_func[param_02] = param_01; +} + +//Function Number: 18 +deleteme() +{ + self delete(); +} + +//Function Number: 19 +getcurrent_groupstruct() +{ + return level.place_node_group[level.place_node_current_group]; +} + +//Function Number: 20 +get_wall_offset(param_00) +{ + var_01 = level.player_view_trace; + var_02 = var_01["position"]; + var_03 = 16 * vectornormalize(var_01["normal"]); + var_04 = var_02 + var_03; + var_05 = find_corner_snap(var_04,param_00); + if(isdefined(var_05)) + { + var_04 = var_05; + } + + return groundpos_loc(var_04) + level.noder_heightoffset; +} + +//Function Number: 21 +find_corner_snap(param_00,param_01) +{ + var_02 = getcurrent_groupstruct(); + var_03 = var_02.wall_snap_direction; + if(var_03 == 0) + { + return; + } + + var_04 = param_00; + var_05 = var_04; + var_06 = 32; + var_07 = 16 * var_03 * vectornormalize(anglestoright(param_01)); + var_08 = 1; + while(var_08 < 15) + { + var_04 = var_05; + param_00 = var_04; + var_09 = var_08 * var_06 * var_03 * vectornormalize(anglestoright(param_01)); + var_0A = bullettrace_but_not_nodes(param_00,param_00 + var_09,0); + param_00 = param_00 + var_0A["fraction"] * var_09; + if(var_0A["fraction"] < 1) + { + continue; + } + else + { + } + + var_04 = param_00; + var_0B = 32 * vectornormalize(anglestoforward(param_01)); + var_0A = bullettrace_but_not_nodes(param_00,param_00 + var_0B,0); + var_0C = var_0A["fraction"]; + if(var_0A["fraction"] == 1) + { + var_0C = 0.51; + } + + param_00 = param_00 + var_0C * var_0B; + if(var_0A["fraction"] < var_0C) + { + continue; + } + else + { + } + + var_04 = param_00; + var_0D = var_09 * -1 - var_07; + var_0A = bullettrace_but_not_nodes(param_00,param_00 + var_0D,0); + param_00 = param_00 + var_0A["fraction"] * var_0D; + if(var_0A["fraction"] > 0.99) + { + continue; + } + else + { + } + + var_0E = param_00; + var_0F = var_0E + var_07 * -1 + var_0B * var_0C * -1; + var_10 = var_0F + var_07 * 0.9; + var_0A = bullettrace_but_not_nodes(var_10,var_10 + var_0B * 0.5,0); + if(var_0A["fraction"] < 1) + { + var_0F = var_0A["position"] - var_0B * 0.5 + var_07 * -0.9; + } + + return var_0F; + var_0B++; + } + + return undefined; +} + +//Function Number: 22 +place_node_place(param_00) +{ + if(!isdefined(param_00)) + { + param_00 = 0; + } + + var_01 = level.player_view_trace; + var_02 = common_scripts\utility::flat_angle(level.player getplayerangles()); + var_03 = var_01["position"] + level.noder_heightoffset; + if(var_01["fraction"] == 1 || level.painter_startgroup.size > level.noder_max) + { + level.preview_node hide(); + return; + } + + if(is_player_looking_at_a_wall()) + { + level.preview_node dontinterpolate(); + var_02 = vectortoangles(-1 * var_01["normal"]); + var_03 = get_wall_offset(var_02); + } + else if(level.wall_look) + { + level.preview_node dontinterpolate(); + var_03 = get_snapped_origin(var_03); + draw_grid(var_03,param_00); + var_02 = (0,0,0); + } + + if(node_is_invalid(var_03)) + { + level.preview_node hide(); + select_coliding_node(); + return; + } + else if(node_is_touching(var_03)) + { + select_coliding_node(); + } + else + { + unselect_node(); + level.preview_node show(); + } + + draw_lines_to_connectible_nodes(var_03); + place_node_here(var_03,var_02,param_00); +} + +//Function Number: 23 +place_node_here(param_00,param_01,param_02) +{ + var_03 = getcurrent_groupstruct(); + if(param_02) + { + var_04 = level.preview_node; + var_04.origin = param_00; + } + else + { + var_04 = spawn("script_model",param_01); + } + + var_04 notsolid(); + if(!param_02) + { + var_04 setmodel(var_03.model); + } + + var_04.angles = param_01; + if(var_03.model == "node_pathnode") + { + var_04.angles = (0,0,0); + } + + if(!param_02) + { + place_new_dummy_guy_and_animate_at_node(var_04); + level.painter_startgroup[level.painter_startgroup.size] = var_04; + } + + hud_update_placed_model_count(); +} + +//Function Number: 24 +place_node_place_at_feet() +{ + var_00 = common_scripts\utility::flat_angle(level.noder_player getplayerangles()); + var_01 = groundpos_loc(level.noder_player.origin + (0,0,16)) + level.noder_heightoffset; + if(node_is_invalid(var_01)) + { + return; + } + + place_node_here(var_01,var_00,0); + hud_update_placed_model_count(); +} + +//Function Number: 25 +get_mp_player() +{ + return getentarray("player","classname")[0]; +} + +//Function Number: 26 +place_node_erase() +{ + var_00 = undefined; + if(isdefined(level.selected_node)) + { + var_00 = level.selected_node; + } + + if(isdefined(level.player_view_trace["entity"])) + { + var_00 = level.player_view_trace["entity"]; + if(!issubstr(var_00.model,"node_")) + { + var_00 = undefined; + } + } + + if(!isdefined(var_00)) + { + return; + } + + level.near_nodes = common_scripts\utility::array_remove(level.near_nodes,var_00); + level.painter_startgroup = common_scripts\utility::array_remove(level.painter_startgroup,var_00); + if(isdefined(var_00.has_dummy_guy)) + { + var_00.has_dummy_guy hide(); + var_00.has_dummy_guy.is_hidden = 1; + } + + var_00 delete(); + level.noder_node_delete = 1; + hud_update_placed_model_count(); +} + +//Function Number: 27 +dump_nodes() +{ +} + +//Function Number: 28 +player_view_trace() +{ + var_00 = 2000; + var_01 = level.noder_player geteye(); + return bullettrace(var_01,var_01 + anglestoforward(level.noder_player getplayerangles()) * var_00,0,level.preview_node); +} + +//Function Number: 29 +is_player_looking_at_a_wall() +{ + if(!isdefined(level.player_view_trace["normal"])) + { + return 0; + } + + if(traces_hitting_node(level.player_view_trace)) + { + return 0; + } + + var_00 = vectortoangles(level.player_view_trace["normal"]); + var_01 = common_scripts\utility::flat_angle(var_00); + if(vectordot(anglestoforward(var_01),anglestoforward(var_00)) == 1) + { + return 1; + } + + return 0; +} + +//Function Number: 30 +gettext_nonode(param_00) +{ + var_01 = ""; + for(var_02 = 5;var_02 < param_00.size;var_02++) + { + var_01 = var_01 + param_00[var_02]; + } + + return var_01; +} + +//Function Number: 31 +bullettrace_but_not_nodes(param_00,param_01,param_02,param_03) +{ + var_04 = bullettrace(param_00,param_01,param_02,param_03); + if(traces_hitting_node(var_04)) + { + var_04 = bullettrace(param_00,param_01,param_02,var_04["entity"]); + } + + return var_04; +} + +//Function Number: 32 +traces_hitting_node(param_00) +{ + return isdefined(param_00["entity"]) && isdefined(param_00["entity"].model) && issubstr(param_00["entity"].model,"node_"); +} + +//Function Number: 33 +groundpos_loc(param_00,param_01) +{ + if(!isdefined(param_01)) + { + param_01 = -100000; + } + + return bullettrace_but_not_nodes(param_00,param_00 + (0,0,param_01),0,self)["position"]; +} + +//Function Number: 34 +get_snapped_origin(param_00) +{ + var_01 = level.wall_look; + var_02 = snap_number_to_nearest_grid(param_00[0],var_01); + var_03 = snap_number_to_nearest_grid(param_00[1],var_01); + return groundpos_loc((var_02,var_03,param_00[2] + 32)) + level.noder_heightoffset; +} + +//Function Number: 35 +snap_number_to_nearest_grid(param_00,param_01) +{ + var_02 = param_00 / param_01; + var_03 = int(var_02); + var_04 = var_02 - var_03; + if(var_04 < -0.5) + { + var_03--; + } + else if(var_04 > 0.5) + { + var_03++; + } + + return var_03 * param_01; +} + +//Function Number: 36 +draw_grid(param_00,param_01) +{ + var_02 = 1; + var_03 = (0,1,0); + param_00 = groundpos_loc(param_00); + var_04 = param_00 + (0,0,level.wall_look); + for(var_05 = var_02 * -1;var_05 < var_02 + 1;var_05++) + { + for(var_06 = var_02 * -1;var_06 < var_02 + 1;var_06++) + { + if(var_05 != var_02) + { + } + + if(var_06 != var_02) + { + } + } + } +} + +//Function Number: 37 +groundpos_line(param_00,param_01,param_02,param_03) +{ + var_04 = level.wall_look * -2; + param_00 = groundpos_loc(param_00,var_04); + param_01 = groundpos_loc(param_01,var_04); +} + +//Function Number: 38 +node_is_invalid(param_00) +{ + var_01 = 0; + var_02 = 68; + var_03 = undefined; + foreach(var_05 in level.painter_startgroup) + { + var_06 = distance(param_00,var_05.origin); + if(var_06 < 32) + { + var_01++; + if(var_06 < 0.05) + { + var_01 = 6; + } + + if(var_06 < var_02) + { + var_03 = var_05; + } + } + } + + if(!isdefined(var_03)) + { + return 0; + } + + level.coliding_node = var_03; + if(var_01 >= 2) + { + return 1; + } + + return 0; +} + +//Function Number: 39 +node_is_touching(param_00) +{ + foreach(var_02 in level.painter_startgroup) + { + if(distance(param_00,var_02.origin) < 32) + { + level.coliding_node = var_02; + return 1; + } + } + + return 0; +} + +//Function Number: 40 +hud_update_gridsize() +{ + var_00 = "^7"; + if(level.wall_look != 0) + { + var_00 = "^1"; + } + + level.hud_noder["gridsize"].description _settext(var_00 + level.wall_look); +} + +//Function Number: 41 +grid_up() +{ + if(!level.wall_look) + { + level.wall_look = 64; + } + + level.wall_look = level.wall_look * 2; + if(level.wall_look > 256) + { + level.wall_look = 256; + } + + hud_update_gridsize(); +} + +//Function Number: 42 +grid_down() +{ + if(!level.wall_look) + { + return; + } + + level.wall_look = level.wall_look * 0.5; + if(level.wall_look < 64) + { + level.wall_look = 0; + } + + hud_update_gridsize(); +} + +//Function Number: 43 +grid_toggle() +{ + if(level.wall_look == 256) + { + level.wall_look = 0; + } + else + { + level.wall_look = 256; + } + + hud_update_gridsize(); +} + +//Function Number: 44 +select_traced_node(param_00) +{ + select_node(param_00["entity"]); +} + +//Function Number: 45 +select_node(param_00) +{ + if(level.var_1B55 && isdefined(level.selected_node)) + { + return; + } + + place_new_dummy_guy_and_animate_at_node(param_00); + level.selector_model dontinterpolate(); + level.selector_model.origin = param_00.origin; + level.selector_model.angles = param_00.angles; + level.selector_model show(); + level.selected_node = param_00; +} + +//Function Number: 46 +place_new_dummy_guy_and_animate_at_node(param_00) +{ + if(!level.dontdonotetracks.size || isdefined(param_00.has_dummy_guy) || !node_has_animations(param_00)) + { + return; + } + + var_01 = fifo_dummyguy(); + if(isdefined(var_01.lastnode)) + { + var_01.lastnode.has_dummy_guy = undefined; + } + + var_01 thread animate_dummyguy_at_node(param_00); +} + +//Function Number: 47 +select_coliding_node() +{ + select_node(level.coliding_node); +} + +//Function Number: 48 +unselect_node() +{ + if(level.var_1B55 && isdefined(level.selected_node)) + { + return; + } + + level.selector_model hide(); + level.selected_node = undefined; +} + +//Function Number: 49 +draw_selected_node_name() +{ + for(;;) + { + if(!isdefined(level.selected_node)) + { + wait 0.05; + continue; + } + + var_00 = level.selected_node.model; + var_01 = anglestoright(level.player getplayerangles()) * var_00.size * -3; + thread maps\_utility::debug_message(var_00,level.selected_node.origin + var_01,0.05); + wait 0.05; + } +} + +//Function Number: 50 +toggle_select_lock() +{ + if(level.var_1B55) + { + level.selection_lock_indicator _settext(""); + level.var_1B55 = 0; + return; + } + + level.selection_lock_indicator _settext("^1Selection Lock On"); + level.var_1B55 = 1; +} + +//Function Number: 51 +set_button_funcs_main() +{ + clear_all_button_funcs(); + add_button_func(::dump_nodes,0,"w"); + add_button_func(::place_node_erase,0,"BUTTON_LSHLDR"); + add_button_func(::place_node_place,0,"BUTTON_RSHLDR"); + add_button_func(::place_node_place_at_feet,0,"BUTTON_RSTICK"); + add_button_func(::setgroup_down,0,"BUTTON_X"); + add_button_func(::setgroup_up,0,"BUTTON_Y"); + add_button_func(::setgroup_down,0,"DPAD_UP"); + add_button_func(::setgroup_up,0,"DPAD_DOWN"); + add_button_func(::grid_toggle,0,"BUTTON_A"); + add_button_func(::toggle_animation_preview,0,"BUTTON_B"); +} + +//Function Number: 52 +clear_all_button_funcs() +{ + level.button_func = []; + level.button_func_isflow = []; +} + +//Function Number: 53 +set_button_funcs_quickselect() +{ + clear_all_button_funcs(); + add_button_func(::dump_nodes,0,"w"); + add_button_func(::select_node_cover_left,0,"BUTTON_LSHLDR"); + add_button_func(::select_node_cover_right,0,"BUTTON_RSHLDR"); + add_button_func(::select_node_pathnode,0,"BUTTON_LTRIG"); + add_button_func(::select_node_pathnode,0,"BUTTON_RTRIG"); + add_button_func(::select_node_pathnode,0,"BUTTON_RSTICK"); + add_button_func(::select_node_cover_crouch_window,0,"BUTTON_X"); + add_button_func(::select_node_cover_prone,0,"BUTTON_Y"); + add_button_func(::select_node_concealment_stand,0,"DPAD_UP"); + add_button_func(::select_node_concealment_prone,0,"DPAD_DOWN"); + add_button_func(::select_node_concealment_crouch,0,"DPAD_RGIHT"); + add_button_func(::select_node_cover_stand,0,"BUTTON_A"); + add_button_func(::select_node_cover_crouch,0,"BUTTON_B"); +} + +//Function Number: 54 +hint_buttons_quick_modifier() +{ + controler_hud_update_text("helpxy","^4Cover Crouch Window ^7/ ^3Prone"); + controler_hud_update_text("helpab","^2Cover Stand ^7/ ^1Crouch"); + controler_hud_update_text("helplsrs","^8 - ^7/ Pathnode"); + controler_hud_update_text("helplbrb","^8Cover Left ^7/ Right"); + controler_hud_update_text("helpdpl","^8Conceal - ^7/ Crouch"); + controler_hud_update_text("helpdpu","^8Conceal Stand ^7/ Prone"); +} + +//Function Number: 55 +hint_buttons_main() +{ + controler_hud_update_text("helpxy","^4Node Type Up ^7/ ^3Down"); + controler_hud_update_text("helpab","^2Toggle Grid ^7/ ^1Anim Preview "); + controler_hud_update_text("helplsrs","^8Quick Pick ^7/ Place at Player"); + controler_hud_update_text("helplbrb","^8Remove ^7/ Place"); + controler_hud_update_text("helpdpl","^8- ^7/ -"); + controler_hud_update_text("helpdpu","^8Node Type Up ^7/ Down"); + var_00 = "( dump ) ^3map_source / xenon_export/" + level.script + "_nodedump.map"; + controler_hud_update_text("helpF",var_00); +} + +//Function Number: 56 +select_node_cover_crouch() +{ + setcurrentgroup("node_cover_crouch"); +} + +//Function Number: 57 +select_node_pathnode() +{ + setcurrentgroup("node_pathnode"); +} + +//Function Number: 58 +select_node_cover_crouch_window() +{ + setcurrentgroup("node_cover_crouch_window"); +} + +//Function Number: 59 +select_node_cover_prone() +{ + setcurrentgroup("node_cover_prone"); +} + +//Function Number: 60 +select_node_cover_stand() +{ + setcurrentgroup("node_cover_stand"); +} + +//Function Number: 61 +select_node_concealment_crouch() +{ + setcurrentgroup("node_concealment_crouch"); +} + +//Function Number: 62 +select_node_concealment_prone() +{ + setcurrentgroup("node_concealment_prone"); +} + +//Function Number: 63 +select_node_concealment_stand() +{ + setcurrentgroup("node_concealment_stand"); +} + +//Function Number: 64 +select_node_cover_left() +{ + setcurrentgroup("node_cover_left"); +} + +//Function Number: 65 +select_node_cover_right() +{ + setcurrentgroup("node_cover_right"); +} + +//Function Number: 66 +set_button_funcs_quick_select() +{ + clear_all_button_funcs(); + set_button_funcs_quickselect(); + hint_buttons_quick_modifier(); +} + +//Function Number: 67 +set_button_funcs_quick_select_release() +{ + set_button_funcs_main(); + hint_buttons_main(); +} + +//Function Number: 68 +_newhudelem() +{ + if(!isdefined(level.noder_elems)) + { + level.noder_elems = []; + } + + var_00 = newhudelem(); + level.noder_elems[level.noder_elems.size] = var_00; + return var_00; +} + +//Function Number: 69 +_settext(param_00) +{ + self.realtext = param_00; + foreach(var_02 in level.noder_elems) + { + if(isdefined(var_02.realtext)) + { + var_02 settext(var_02.realtext); + } + } +} + +//Function Number: 70 +animate_dummyguy_at_node(param_00) +{ + var_01 = param_00.origin + (0,0,-32); + var_02 = param_00.angles + level.node_offset[param_00.model]; + param_00.has_dummy_guy = self; + self.lastnode = param_00; + level.var_1B4B[self.dummyguyindex] notify("stop_loop"); + level.var_1B4B[self.dummyguyindex].origin = var_01; + level.var_1B4B[self.dummyguyindex].angles = var_02; + level.var_1B4B[self.dummyguyindex] dontinterpolate(); + self dontinterpolate(); + self show(); + self.is_hidden = 0; + level.var_1B4B[self.dummyguyindex] maps\_anim::anim_generic_loop(self,param_00.model); +} + +//Function Number: 71 +fifo_dummyguy() +{ + level.dummyguy_index++; + if(level.dummyguy_index == level.var_1B46) + { + level.dummyguy_index = 0; + } + + var_00 = level.dontdonotetracks[level.dummyguy_index]; + return var_00; +} + +//Function Number: 72 +node_has_animations(param_00) +{ + if(isdefined(level.scr_anim["generic"][param_00.model])) + { + return 1; + } + + return 0; +} + +//Function Number: 73 +toggle_animation_preview() +{ + if(level.node_animation_preview) + { + level.node_animation_preview_indicator _settext("^1Anim Preview Off"); + level.node_animation_preview = 0; + hide_all_dummyguys(); + return; + } + + level.node_animation_preview_indicator _settext(""); + level.node_animation_preview = 1; + show_all_dummyguys(); +} + +//Function Number: 74 +hide_all_dummyguys() +{ + foreach(var_01 in level.dontdonotetracks) + { + if(!isdefined(var_01.is_hidden) || !var_01.is_hidden) + { + var_01 hide(); + } + } +} + +//Function Number: 75 +show_all_dummyguys() +{ + foreach(var_01 in level.dontdonotetracks) + { + if(!isdefined(var_01.is_hidden) || !var_01.is_hidden) + { + var_01 show(); + } + } +} + +//Function Number: 76 +draw_lines_to_connectible_nodes(param_00) +{ + foreach(var_02 in level.near_nodes) + { + if(!isdefined(var_02.classname)) + { + continue; + } + } +} + +//Function Number: 77 +manage_nearnodes() +{ + level endon("dump_nodes"); + level.near_nodes = []; + var_00 = getallnodes(); + var_01 = 0; + var_02 = 1000; + var_03 = []; + level.nearnodes_time = 0; + wait 0.05; + for(;;) + { + var_04 = var_00; + foreach(var_06 in level.painter_startgroup) + { + var_04[var_04.size] = var_06; + } + + var_08 = level.painter_startgroup.size; + foreach(var_06 in var_04) + { + var_03[var_03.size] = var_06; + var_01++; + if(level.painter_startgroup.size != var_08) + { + var_03 = []; + var_01 = 0; + break; + } + + if(var_01 > var_02) + { + var_0A = []; + foreach(var_0C in level.near_nodes) + { + if(distancesquared((level.preview_node.origin[0],level.preview_node.origin[1],0),(var_0C.origin[0],var_0C.origin[1],0)) <= 65536) + { + var_0A[var_0A.size] = var_0C; + } + } + + var_0E = []; + foreach(var_10 in var_03) + { + if(distancesquared((level.preview_node.origin[0],level.preview_node.origin[1],0),(var_10.origin[0],var_10.origin[1],0)) <= 65536) + { + var_0E[var_0E.size] = var_10; + } + } + + level.near_nodes = maps\_utility::array_merge(var_0E,var_0A); + var_03 = []; + var_01 = 0; + wait 0.05; + waittillframeend; + } + + if(level.noder_node_delete) + { + level.noder_node_delete = 0; + var_03 = []; + var_01 = 0; + break; + } + } + + wait 0.05; + } +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_overheat.gsc b/MW3/PC/SP/maps/_overheat.gsc new file mode 100644 index 0000000..fde015e --- /dev/null +++ b/MW3/PC/SP/maps/_overheat.gsc @@ -0,0 +1,230 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_overheat.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 8 + * Decompile Time: 94 ms + * Timestamp: 10/27/2023 2:20:14 AM +*******************************************************************/ + +//Function Number: 1 +init_overheat() +{ + precacheshader("hud_temperature_gauge"); +} + +//Function Number: 2 +overheat_enable(param_00) +{ + if(isdefined(self.overheat)) + { + return; + } + + self.overheat = spawnstruct(); + self.overheat.turret_heat_status = 1; + self.overheat.overheated = 0; + self.overheat.turret_heat_max = 114; + self.overheat.turret_heat_rate = 1; + self.overheat.turret_cool_rate = 1; + self.overheat.overheat_time = 2; + self.overheat.overheat_flash_time = 0.2; + self.overheat.overheat_flash_time_increment = 0.1; + self.overheat.gun_usage_delay_after_overheat = 2; + thread create_hud(); + thread status_meter_update(param_00); +} + +//Function Number: 3 +overheat_disable() +{ + self notify("disable_overheat"); + level.savehere = undefined; + waittillframeend; + if(isdefined(self.overheat.overheat_bg)) + { + self.overheat.overheat_bg destroy(); + } + + if(isdefined(self.overheat.overheat_status)) + { + self.overheat.overheat_status destroy(); + } + + self.overheat = undefined; +} + +//Function Number: 4 +status_meter_update(param_00) +{ + self endon("disable_overheat"); + for(;;) + { + if(self.overheat.turret_heat_status >= self.overheat.turret_heat_max) + { + wait 0.05; + continue; + } + + if(self attackbuttonpressed() && !self.overheat.overheated) + { + self.overheat.turret_heat_status = self.overheat.turret_heat_status + self.overheat.turret_heat_rate; + } + else + { + self.overheat.turret_heat_status = self.overheat.turret_heat_status - self.overheat.turret_cool_rate; + } + + self.overheat.turret_heat_status = clamp(self.overheat.turret_heat_status,1,self.overheat.turret_heat_max); + update_overheat_meter(); + thread overheated(param_00); + wait 0.05; + } +} + +//Function Number: 5 +update_overheat_meter() +{ + self.overheat.overheat_status scaleovertime(0.05,10,int(self.overheat.turret_heat_status)); + thread overheat_setcolor(self.overheat.turret_heat_status,0.05); +} + +//Function Number: 6 +create_hud() +{ + self endon("disable_overheat"); + var_00 = 0; + if(maps\_utility::is_coop()) + { + var_00 = 70; + } + + var_01 = -10; + var_02 = -152 + var_00; + if(!isdefined(self.overheat.overheat_bg)) + { + self.overheat.overheat_bg = newclienthudelem(self); + self.overheat.overheat_bg.alignx = "right"; + self.overheat.overheat_bg.aligny = "bottom"; + self.overheat.overheat_bg.horzalign = "right"; + self.overheat.overheat_bg.vertalign = "bottom"; + self.overheat.overheat_bg.x = 2; + self.overheat.overheat_bg.y = -120 + var_00; + self.overheat.overheat_bg setshader("hud_temperature_gauge",35,150); + self.overheat.overheat_bg.sort = 4; + } + + if(!isdefined(self.overheat.overheat_status)) + { + self.overheat.overheat_status = newclienthudelem(self); + self.overheat.overheat_status.alignx = "right"; + self.overheat.overheat_status.aligny = "bottom"; + self.overheat.overheat_status.horzalign = "right"; + self.overheat.overheat_status.vertalign = "bottom"; + self.overheat.overheat_status.x = var_01; + self.overheat.overheat_status.y = var_02; + self.overheat.overheat_status setshader("white",10,1); + self.overheat.overheat_status.color = (1,0.9,0); + self.overheat.overheat_status.alpha = 1; + self.overheat.overheat_status.sort = 1; + } +} + +//Function Number: 7 +overheated(param_00) +{ + self endon("disable_overheat"); + if(self.overheat.turret_heat_status < self.overheat.turret_heat_max) + { + return; + } + + if(self.overheat.overheated) + { + return; + } + + self.overheat.overheated = 1; + level.savehere = 0; + thread maps\_utility::play_sound_on_entity("smokegrenade_explode_default"); + self.overheat.turret_heat_status = self.overheat.turret_heat_max; + if(isdefined(param_00.mgturret)) + { + param_00.mgturret[0] turretfiredisable(); + } + + var_01 = gettime(); + var_02 = self.overheat.overheat_flash_time; + for(;;) + { + self.overheat.overheat_status fadeovertime(var_02); + self.overheat.overheat_status.alpha = 0.2; + wait var_02; + self.overheat.overheat_status fadeovertime(var_02); + self.overheat.overheat_status.alpha = 1; + wait var_02; + var_02 = var_02 + self.overheat.overheat_flash_time_increment; + if(gettime() - var_01 >= self.overheat.overheat_time * 1000) + { + break; + } + } + + self.overheat.overheat_status.alpha = 1; + self.overheat.turret_heat_status = self.overheat.turret_heat_status - self.overheat.turret_cool_rate; + wait self.overheat.gun_usage_delay_after_overheat; + if(isdefined(param_00.mgturret)) + { + param_00.mgturret[0] turretfireenable(); + } + + level.savehere = undefined; + self.overheat.overheated = 0; +} + +//Function Number: 8 +overheat_setcolor(param_00,param_01) +{ + self endon("disable_overheat"); + var_02 = []; + var_03 = []; + var_04 = []; + var_05 = []; + var_06 = 0; + var_07 = self.overheat.turret_heat_max / 2; + var_08 = self.overheat.turret_heat_max; + var_09 = undefined; + var_0A = undefined; + var_0B = undefined; + if(param_01 > var_06 && param_01 <= var_07) + { + var_09 = int(param_01 * 100 / var_07); + for(var_0C = 0;var_0C < var_05.size;var_0C++ = var_7B[2]) + { + var_0A = var_03[var_0C] - var_7B[var_0C]; + var_0B = var_0A / 100; + var_05[var_0C] = var_7B[var_0C] + var_0B * var_09; + } + } + else if(param_01 > var_07 && param_01 <= var_08) + { + var_09 = int(param_01 - var_07 * 100 / var_08 - var_07); + for(var_0C = 0;var_0C < var_05.size;var_0C++ = var_7B[2]) + { + var_0A = var_04[var_0C] - var_03[var_0C]; + var_0B = var_0A / 100; + var_05[var_0C] = var_03[var_0C] + var_0B * var_09; + } + } + + if(isdefined(var_02)) + { + self.overheat.overheat_status fadeovertime(var_02); + } + + if(isdefined(self.overheat.overheat_status.color)) + { + self.overheat.overheat_status.color = (var_05[0],var_05[1],var_05[2]); + } +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_patrol.gsc b/MW3/PC/SP/maps/_patrol.gsc new file mode 100644 index 0000000..1bff5be --- /dev/null +++ b/MW3/PC/SP/maps/_patrol.gsc @@ -0,0 +1,809 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_patrol.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 23 + * Decompile Time: 387 ms + * Timestamp: 10/27/2023 2:23:10 AM +*******************************************************************/ + +//Function Number: 1 +patrol(param_00) +{ + if(isdefined(self.enemy)) + { + return; + } + + self endon("enemy"); + self endon("death"); + self endon("damage"); + self endon("end_patrol"); + waittillframeend; + if(isdefined(self.script_stealthgroup)) + { + [[ level.global_callbacks["_patrol_endon_spotted_flag"] ]](); + } + + thread waittill_combat(); + thread waittill_death(); + self.goalradius = 32; + self allowedstances("stand"); + self.disablearrivals = 1; + self.disableexits = 1; + self.allowdeath = 1; + self.script_patroller = 1; + maps\_utility::disable_cqbwalk(); + linkpet(); + set_patrol_run_anim_array(); + var_01["ent"][1] = ::get_target_ents; + var_1C["ent"] = 0; + var_1C["node"] = 1; + var_1C["node"] = 0; + var_1C["struct"] = 1; + var_1C["struct"] = 0; + param_00["ent"] = ::maps\_utility::set_goal_ent; + if(isdefined(var_01)) + { + self.target = var_01; + } + + if(isdefined(self.target)) + { + var_03 = 1; + var_04 = get_target_ents(); + var_05 = get_target_nodes(); + var_06 = get_target_structs(); + if(var_04.size) + { + var_07 = common_scripts\utility::random(var_04); + var_08 = "ent"; + } + else if(var_07.size) + { + var_07 = common_scripts\utility::random(var_07); + var_08 = "node"; + } + else + { + var_07 = common_scripts\utility::random(var_08); + var_08 = "struct"; + } + } + else + { + var_03 = 0; + var_04 = common_scripts\utility::get_linked_ents(); + var_05 = get_linked_nodes(); + var_06 = maps\_utility::get_linked_structs(); + if(var_06.size) + { + var_07 = common_scripts\utility::random(var_06); + var_08 = "ent"; + } + else if(var_07.size) + { + var_07 = common_scripts\utility::random(var_07); + var_08 = "node"; + } + else + { + var_07 = common_scripts\utility::random(var_08); + var_08 = "struct"; + } + } + + var_09 = []; + var_0A = var_07; + for(;;) + { + while(isdefined(var_0A.patrol_claimed)) + { + wait 0.05; + } + + var_07.patrol_claimed = undefined; + var_07 = var_0A; + self notify("release_node",var_7B["phone"],"patrol_idle_phone",var_7B["checkphone"],"patrol_idle_checkphone",var_7B["stretch"],"patrol_idle_stretch",var_7B["smoke"],"patrol_idle_smoke",var_7B["turn180"],common_scripts\utility::ter_op(isdefined(self.patrol_anim_turn180),self.patrol_anim_turn180,"patrol_turn180"),var_7B["pause"],"patrol_idle_",var_7B["struct"],::maps\_utility::set_goal_ent,var_7B["node"],::maps\_utility::set_goal_node,::maps\_utility::get_linked_structs,::get_target_structs,::get_linked_nodes,::get_target_nodes,::common_scripts\utility::get_linked_ents); + var_07.patrol_claimed = 1; + self.last_patrol_goal = var_07; + [[ var_7B[var_08] ]](var_07); + if(isdefined(var_07.radius) && var_07.radius > 0) + { + self.goalradius = var_07.radius; + } + else + { + self.goalradius = 32; + } + + self waittill("goal"); + var_07 notify("trigger",self); + if(isdefined(var_07.script_flag_set)) + { + common_scripts\utility::flag_set(var_07.script_flag_set); + } + + if(isdefined(var_07.script_ent_flag_set)) + { + maps\_utility::ent_flag_set(var_07.script_ent_flag_set); + } + + if(isdefined(var_07.script_flag_clear)) + { + common_scripts\utility::flag_clear(var_07.script_flag_clear); + } + + var_0B = var_07 [[ var_1C[var_08][var_03] ]](); + if(!var_0B.size) + { + self notify("reached_path_end"); + self notify("_patrol_reached_path_end"); + if(isalive(self.patrol_pet)) + { + self.patrol_pet notify("master_reached_patrol_end"); + } + } + + if(isdefined(var_07.script_flag_wait)) + { + common_scripts\utility::flag_wait(var_07.script_flag_wait); + } + + var_07 maps\_utility::script_delay(); + var_0C = ::animscripts/reactions::func_F20; + var_0D = var_07.script_animation; + if(isdefined(var_0D)) + { + if(!isdefined(self.patrol_no_stop_transition)) + { + patrol_do_stop_transition_anim(var_0D,var_0C,var_07); + } + + if(isdefined(var_07.script_faceangles)) + { + self orientmode("face angle",var_07.angles[1]); + } + + self.patrol_script_animation = 1; + var_0E = var_09[var_0D]; + if(isdefined(var_0E)) + { + if(var_0D == "pause") + { + if(isdefined(self.patrol_scriptedanim) && isdefined(self.patrol_scriptedanim[var_0D])) + { + var_0E = self.patrol_scriptedanim[var_0D][randomint(self.patrol_scriptedanim[var_0D].size)]; + } + else + { + var_0E = var_0E + randomintrange(1,6); + } + } + + maps\_anim::anim_generic_custom_animmode(self,"gravity",var_0E,undefined,var_0C); + if(var_0B.size && var_0D != "turn180") + { + patrol_do_start_transition_anim(var_0D,var_0C); + } + } + + self.patrol_script_animation = undefined; + } + + if(!var_0B.size) + { + if(isdefined(self.patrol_end_idle) && !isdefined(var_0D)) + { + patrol_do_stop_transition_anim("path_end_idle",var_0C,var_07); + for(;;) + { + var_0F = self.patrol_end_idle[randomint(self.patrol_end_idle.size)]; + maps\_anim::anim_generic_custom_animmode(self,"gravity",var_0F,undefined,var_0C); + } + } + + break; + } + + var_0A = common_scripts\utility::random(var_0B); + } +} + +//Function Number: 2 +patrol_do_stop_transition_anim(param_00,param_01,param_02) +{ + var_03 = self; + var_04 = 0; + if(isdefined(param_02.script_faceangles)) + { + var_03 = param_02; + self.noteleport = 1; + var_04 = 1; + } + + if(isdefined(self.patrol_stop) && isdefined(self.patrol_stop[param_00])) + { + var_03 maps\_anim::anim_generic_custom_animmode(self,"gravity",self.patrol_stop[param_00],undefined,param_01,var_04); + return; + } + + var_03 maps\_anim::anim_generic_custom_animmode(self,"gravity","patrol_stop",undefined,param_01,var_04); +} + +//Function Number: 3 +patrol_do_start_transition_anim(param_00,param_01) +{ + if(isdefined(self.patrol_start) && isdefined(self.patrol_start[param_00])) + { + maps\_anim::anim_generic_custom_animmode(self,"gravity",self.patrol_start[param_00],undefined,param_01); + return; + } + + maps\_anim::anim_generic_custom_animmode(self,"gravity","patrol_start",undefined,param_01); +} + +//Function Number: 4 +stand_up_if_necessary() +{ + if(self.a.pose == "crouch" && isdefined(self.a.array)) + { + var_00 = self.a.array["stance_change"]; + if(isdefined(var_00)) + { + self setflaggedanimknoballrestart("stand_up",var_00,%root,1); + animscripts/shared::donotetracks("stand_up"); + } + } +} + +//Function Number: 5 +patrol_resume_move_start_func() +{ + self endon("enemy"); + self animmode("zonly_physics",0); + self orientmode("face current"); + stand_up_if_necessary(); + var_00 = level.scr_anim["generic"]["patrol_radio_in_clear"]; + self setflaggedanimknoballrestart("radio",var_00,%root,1); + animscripts/shared::donotetracks("radio"); + turn_180_move_start_func(); +} + +//Function Number: 6 +turn_180_move_start_func() +{ + if(!isdefined(self.pathgoalpos)) + { + return; + } + + var_00 = self.pathgoalpos; + var_01 = var_00 - self.origin; + var_01 = (var_01[0],var_01[1],0); + var_02 = lengthsquared(var_01); + if(var_02 < 1) + { + return; + } + + var_01 = var_01 / sqrt(var_02); + var_03 = anglestoforward(self.angles); + if(vectordot(var_03,var_01) < -0.5) + { + self animmode("zonly_physics",0); + self orientmode("face current"); + stand_up_if_necessary(); + var_04 = level.scr_anim["generic"]["patrol_turn180"]; + self setflaggedanimknoballrestart("move",var_04,%root,1); + if(animhasnotetrack(var_04,"code_move")) + { + animscripts/shared::donotetracks("move"); + self orientmode("face motion"); + self animmode("none",0); + } + + animscripts/shared::donotetracks("move"); + } +} + +//Function Number: 7 +set_patrol_run_anim_array() +{ + var_00 = "patrol_walk"; + if(isdefined(self.patrol_walk_anim)) + { + var_00 = self.patrol_walk_anim; + } + + var_01 = undefined; + if(isdefined(self.patrol_walk_twitch)) + { + var_01 = self.patrol_walk_twitch; + } + + maps\_utility::set_generic_run_anim_array(var_00,var_01); +} + +//Function Number: 8 +waittill_combat_wait() +{ + self endon("end_patrol"); + if(isdefined(self.patrol_master)) + { + self.patrol_master endon("death"); + } + + self waittill("enemy"); +} + +//Function Number: 9 +waittill_death() +{ + self waittill("death"); + if(!isdefined(self)) + { + return; + } + + self notify("release_node"); + if(!isdefined(self.last_patrol_goal)) + { + return; + } + + self.last_patrol_goal.patrol_claimed = undefined; +} + +//Function Number: 10 +waittill_combat() +{ + self endon("death"); + waittill_combat_wait(); + var_00 = maps\_utility::ent_flag_exist("_stealth_enabled") && maps\_utility::ent_flag("_stealth_enabled"); + if(!var_00) + { + maps\_utility::clear_run_anim(); + self allowedstances("stand","crouch","prone"); + self.disablearrivals = 0; + self.disableexits = 0; + self stopanimscripted(); + self notify("stop_animmode"); + self.script_nobark = undefined; + self.goalradius = level.default_goalradius; + } + + if(isdefined(self.old_interval)) + { + self.interval = self.old_interval; + } + + self.moveplaybackrate = 1; + if(!isdefined(self)) + { + return; + } + + self notify("release_node"); + if(!isdefined(self.last_patrol_goal)) + { + return; + } + + self.last_patrol_goal.patrol_claimed = undefined; +} + +//Function Number: 11 +get_target_ents() +{ + var_00 = []; + if(isdefined(self.target)) + { + var_00 = getentarray(self.target,"targetname"); + } + + return var_00; +} + +//Function Number: 12 +get_target_nodes() +{ + var_00 = []; + if(isdefined(self.target)) + { + var_00 = getnodearray(self.target,"targetname"); + } + + return var_00; +} + +//Function Number: 13 +get_target_structs() +{ + var_00 = []; + if(isdefined(self.target)) + { + var_00 = common_scripts\utility::getstructarray(self.target,"targetname"); + } + + return var_00; +} + +//Function Number: 14 +get_linked_nodes() +{ + var_00 = []; + if(isdefined(self.script_linkto)) + { + var_01 = strtok(self.script_linkto," "); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + var_03 = getnode(var_01[var_02],"script_linkname"); + if(isdefined(var_03)) + { + var_00[var_00.size] = var_03; + } + } + } + + return var_00; +} + +//Function Number: 15 +showclaimed(param_00) +{ + self endon("release_node"); +} + +//Function Number: 16 +linkpet() +{ + if(isdefined(self.patrol_pet)) + { + self.patrol_pet thread pet_patrol(); + return; + } + + if(!isdefined(self.script_pet)) + { + return; + } + + waittillframeend; + var_00 = getaispeciesarray(self.team,"dog"); + var_01 = undefined; + for(var_02 = 0;var_02 < var_00.size;var_02++) + { + if(!isdefined(var_00[var_02].script_pet)) + { + continue; + } + + if(var_00[var_02].script_pet != self.script_pet) + { + continue; + } + + var_01 = var_00[var_02]; + self.patrol_pet = var_01; + var_01.patrol_master = self; + break; + } + + if(!isdefined(var_01)) + { + return; + } + + var_01 thread pet_patrol(); +} + +//Function Number: 17 +pet_patrol() +{ + maps\_utility::spawn_failed(self); + if(isdefined(self.enemy)) + { + return; + } + + self endon("enemy"); + self endon("death"); + self endon("end_patrol"); + if(isdefined(self.script_stealthgroup)) + { + [[ level.global_callbacks["_patrol_endon_spotted_flag"] ]](); + } + + self.patrol_master endon("death"); + thread waittill_combat(); + self.goalradius = 4; + self.allowdeath = 1; + var_00 = pet_patrol_create_positions(); + var_01 = vectornormalize(self.origin - self.patrol_master.origin); + var_02 = anglestoright(self.patrol_master.angles); + var_03 = "left"; + if(vectordot(var_01,var_02) > 0) + { + var_03 = "right"; + } + + wait 1; + thread pet_patrol_handle_move_state(); + thread pet_patrol_handle_movespeed(); + self.old_interval = self.interval; + self.interval = 70; + for(;;) + { + if(isdefined(self.patrol_master) && !isdefined(self.patrol_master.patrol_script_animation)) + { + var_00 = pet_patrol_init_positions(var_00); + if(var_03 == "null") + { + var_03 = "back"; + } + + var_03 = pet_patrol_get_available_origin(var_00,var_03); + self.patrol_goal_pos = var_00[var_03].origin; + } + else + { + self.patrol_goal_pos = self.origin; + } + + self setgoalpos(self.patrol_goal_pos); + wait 0.05; + } +} + +//Function Number: 18 +pet_patrol_create_positions() +{ + var_00 = []; + var_01 = spawnstruct(); + var_01.options = []; + var_01.options[var_01.options.size] = "right"; + var_01.options[var_01.options.size] = "back_right"; + var_02 = spawnstruct(); + var_02.options = []; + var_02.options[var_02.options.size] = "right"; + var_02.options[var_02.options.size] = "back_right"; + var_02.options[var_02.options.size] = "back"; + var_03 = spawnstruct(); + var_03.options = []; + var_03.options[var_03.options.size] = "back_right"; + var_03.options[var_03.options.size] = "back_left"; + var_03.options[var_03.options.size] = "back"; + var_04 = spawnstruct(); + var_04.options = []; + var_04.options[var_04.options.size] = "left"; + var_04.options[var_04.options.size] = "back_left"; + var_04.options[var_04.options.size] = "back"; + var_05 = spawnstruct(); + var_05.options = []; + var_05.options[var_05.options.size] = "left"; + var_05.options[var_05.options.size] = "back_left"; + var_06 = spawnstruct(); + var_00["right"] = var_01; + var_00["left"] = var_05; + var_00["back_right"] = var_02; + var_00["back_left"] = var_04; + var_00["back"] = var_03; + var_00["null"] = var_06; + return var_00; +} + +//Function Number: 19 +pet_patrol_init_positions(param_00) +{ + var_01 = vectortoangles(self.patrol_master.last_patrol_goal.origin - self.patrol_master.origin); + var_02 = self.patrol_master.origin; + var_03 = anglestoright(var_01); + var_04 = anglestoforward(var_01); + param_00["right"].origin = var_02 + var_03 * 40 + var_04 * 30; + param_00["left"].origin = var_02 + var_03 * -40 + var_04 * 30; + param_00["back_right"].origin = var_02 + var_03 * 32 + var_04 * -16; + param_00["back_left"].origin = var_02 + var_03 * -32 + var_04 * -16; + param_00["back"].origin = var_02 + var_04 * -48; + param_00["null"].origin = self.origin; + var_05 = getarraykeys(param_00); + for(var_06 = 0;var_06 < var_05.size;var_06++) + { + var_07 = var_05[var_06]; + param_00[var_07].checked = 0; + param_00[var_07].recursed = 0; + } + + return param_00; +} + +//Function Number: 20 +pet_debug_positions(param_00) +{ + var_01 = getarraykeys(param_00); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + var_03 = var_01[var_02]; + if(var_03 == "null") + { + continue; + } + } +} + +//Function Number: 21 +pet_patrol_get_available_origin(param_00,param_01) +{ + param_00[param_01].recursed = 1; + for(var_02 = 0;var_02 < param_00[param_01].options.size;var_02++) + { + var_03 = param_00[param_01].options[var_02]; + if(param_00[var_03].checked) + { + continue; + } + + if(self maymovetopoint(param_00[var_03].origin)) + { + return var_03; + } + + param_00[var_03].checked = 1; + } + + for(var_02 = 0;var_02 < param_00[param_01].options.size;var_02++) + { + var_03 = param_00[param_01].options[var_02]; + if(param_00[var_03].recursed) + { + continue; + } + + var_03 = pet_patrol_get_available_origin(param_00,var_03); + return var_03; + } + + return "null"; +} + +//Function Number: 22 +pet_patrol_handle_move_state(param_00) +{ + if(isdefined(self.enemy)) + { + return; + } + + self endon("enemy"); + self endon("death"); + self endon("end_patrol"); + self.patrol_master endon("death"); + if(isdefined(self.patrol_master.script_noteworthy) && self.patrol_master.script_noteworthy == "cqb_patrol") + { + maps\_utility::set_dog_walk_anim(); + return; + } + + if(!isdefined(param_00)) + { + param_00 = 200; + } + + maps\_utility::set_dog_walk_anim(); + for(;;) + { + wait 0.1; + var_01 = self.patrol_goal_pos; + var_02 = distancesquared(self.origin,self.patrol_goal_pos); + if(var_02 > squared(param_00)) + { + if(self.a.movement == "run") + { + continue; + } + + maps\_anim::anim_generic_custom_animmode(self,"gravity","patrol_dog_start"); + maps\_utility::clear_run_anim(); + self.script_nobark = 1; + continue; + } + + if(self.a.movement != "walk") + { + self notify("stopped_while_patrolling"); + maps\_anim::anim_generic_custom_animmode(self,"gravity","patrol_dog_stop"); + maps\_utility::set_dog_walk_anim(); + } + } +} + +//Function Number: 23 +pet_patrol_handle_movespeed(param_00,param_01) +{ + if(isdefined(self.enemy)) + { + return; + } + + self endon("enemy"); + self endon("death"); + self endon("end_patrol"); + self.patrol_master endon("death"); + if(isdefined(self.patrol_master.script_noteworthy) && self.patrol_master.script_noteworthy == "cqb_patrol") + { + for(;;) + { + wait 0.05; + var_02 = self.patrol_goal_pos; + var_03 = distancesquared(self.origin,self.patrol_goal_pos); + if(var_03 < squared(16)) + { + if(self.moveplaybackrate > 0.4) + { + self.moveplaybackrate = self.moveplaybackrate - 0.05; + } + + continue; + } + + if(var_03 > squared(48)) + { + if(self.moveplaybackrate < 1.8) + { + self.moveplaybackrate = self.moveplaybackrate + 0.05; + } + + continue; + } + + self.moveplaybackrate = 1; + } + } + + if(!isdefined(param_00)) + { + param_00 = 16; + } + + if(!isdefined(param_01)) + { + param_01 = 48; + } + + var_04 = param_00 * param_00; + var_05 = param_01 * param_01; + for(;;) + { + wait 0.05; + var_02 = self.patrol_goal_pos; + var_03 = distancesquared(self.origin,self.patrol_goal_pos); + if(self.a.movement != "walk") + { + self.moveplaybackrate = 1; + continue; + } + + if(var_03 < var_04) + { + if(self.moveplaybackrate > 0.4) + { + self.moveplaybackrate = self.moveplaybackrate - 0.05; + } + + continue; + } + + if(var_03 > var_05) + { + if(self.moveplaybackrate < 0.75) + { + self.moveplaybackrate = self.moveplaybackrate + 0.05; + } + + continue; + } + + self.moveplaybackrate = 0.5; + } +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_player_stats.gsc b/MW3/PC/SP/maps/_player_stats.gsc new file mode 100644 index 0000000..f5bcacb --- /dev/null +++ b/MW3/PC/SP/maps/_player_stats.gsc @@ -0,0 +1,341 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_player_stats.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 12 + * Decompile Time: 182 ms + * Timestamp: 10/27/2023 2:22:13 AM +*******************************************************************/ + +//Function Number: 1 +init_stats() +{ + self.stats["kills"] = 0; + self.stats["kills_melee"] = 0; + self.stats["kills_explosives"] = 0; + self.stats["kills_juggernaut"] = 0; + self.stats["kills_vehicle"] = 0; + self.stats["kills_sentry"] = 0; + self.stats["headshots"] = 0; + self.stats["shots_fired"] = 0; + self.stats["shots_hit"] = 0; + self.stats["weapon"] = []; + thread shots_fired_recorder(); +} + +//Function Number: 2 +was_headshot() +{ + if(isdefined(self.died_of_headshot) && self.died_of_headshot) + { + return 1; + } + + if(!isdefined(self.damagelocation)) + { + return 0; + } + + return self.damagelocation == "helmet" || self.damagelocation == "head" || self.damagelocation == "neck"; +} + +//Function Number: 3 +register_kill(param_00,param_01,param_02,param_03) +{ + var_04 = self; + if(isdefined(self.owner)) + { + var_04 = self.owner; + } + + if(!isplayer(var_04)) + { + if(isdefined(level.pmc_match) && level.pmc_match) + { + var_04 = level.players[randomint(level.players.size)]; + } + } + + if(!isplayer(var_04)) + { + return; + } + + if(isdefined(level.skip_pilot_kill_count) && isdefined(param_00.drivingvehicle) && param_00.drivingvehicle) + { + return; + } + + var_04.stats["kills"]++; + var_04 career_stat_increment("kills",1); + if(maps\_utility::is_specialop()) + { + level notify("specops_player_kill",var_04,param_00,param_02,param_03); + } + + if(isdefined(param_00)) + { + if(param_00 was_headshot()) + { + var_04.stats["headshots"]++; + var_04 career_stat_increment("headshots",1); + } + + if(isdefined(param_00.juggernaut)) + { + var_04.stats["kills_juggernaut"]++; + var_04 career_stat_increment("kills_juggernaut",1); + } + + if(isdefined(param_00.issentrygun)) + { + var_04.stats["kills_sentry"]++; + } + + if(param_00.code_classname == "script_vehicle") + { + var_04.stats["kills_vehicle"]++; + if(isdefined(param_00.riders)) + { + foreach(var_06 in param_00.riders) + { + if(isdefined(var_06)) + { + var_04 register_kill(var_06,param_01,param_02,param_03); + } + } + } + } + } + + if(cause_is_explosive(param_01)) + { + var_04.stats["kills_explosives"]++; + } + + if(!isdefined(param_02)) + { + param_02 = var_04 getcurrentweapon(); + } + + if(issubstr(tolower(param_01),"melee")) + { + var_04.stats["kills_melee"]++; + if(weaponinventorytype(param_02) == "primary") + { + return; + } + } + + if(var_04 is_new_weapon(param_02)) + { + var_04 register_new_weapon(param_02); + } + + var_04.stats["weapon"][param_02].kills++; +} + +//Function Number: 4 +career_stat_increment(param_00,param_01) +{ + if(!maps\_utility::is_specialop()) + { + return; + } + + var_02 = int(self getplayerdata("career",param_00)) + param_01; + self setplayerdata("career",param_00,var_02); +} + +//Function Number: 5 +register_shot_hit() +{ + if(!isplayer(self)) + { + return; + } + + if(isdefined(self.registeringshothit)) + { + return; + } + + self.registeringshothit = 1; + self.stats["shots_hit"]++; + career_stat_increment("bullets_hit",1); + var_00 = self getcurrentweapon(); + if(is_new_weapon(var_00)) + { + register_new_weapon(var_00); + } + + self.stats["weapon"][var_00].shots_hit++; + waittillframeend; + self.registeringshothit = undefined; +} + +//Function Number: 6 +shots_fired_recorder() +{ + self endon("death"); + for(;;) + { + self waittill("weapon_fired"); + var_00 = self getcurrentweapon(); + if(!isdefined(var_00) || !maps\_utility::isprimaryweapon(var_00)) + { + continue; + } + + self.stats["shots_fired"]++; + career_stat_increment("bullets_fired",1); + if(is_new_weapon(var_00)) + { + register_new_weapon(var_00); + } + + self.stats["weapon"][var_00].shots_fired++; + } +} + +//Function Number: 7 +is_new_weapon(param_00) +{ + if(isdefined(self.stats["weapon"][param_00])) + { + return 0; + } + + return 1; +} + +//Function Number: 8 +cause_is_explosive(param_00) +{ + param_00 = tolower(param_00); + switch(param_00) + { + case "splash": + case "mod_explosive": + case "mod_projectile_splash": + case "mod_projectile": + case "mod_grenade_splash": + case "mod_grenade": + return 1; + + default: + return 0; + } + + return 0; +} + +//Function Number: 9 +register_new_weapon(param_00) +{ + self.stats["weapon"][param_00] = spawnstruct(); + self.stats["weapon"][param_00].name = param_00; + self.stats["weapon"][param_00].shots_fired = 0; + self.stats["weapon"][param_00].shots_hit = 0; + self.stats["weapon"][param_00].kills = 0; +} + +//Function Number: 10 +set_stat_dvars() +{ + var_00 = 1; + foreach(var_02 in level.players) + { + setdvar("stats_" + var_00 + "_kills_melee",var_02.stats["kills_melee"]); + setdvar("stats_" + var_00 + "_kills_juggernaut",var_02.stats["kills_juggernaut"]); + setdvar("stats_" + var_00 + "_kills_explosives",var_02.stats["kills_explosives"]); + setdvar("stats_" + var_00 + "_kills_vehicle",var_02.stats["kills_vehicle"]); + setdvar("stats_" + var_00 + "_kills_sentry",var_02.stats["kills_sentry"]); + var_03 = var_02 get_best_weapons(5); + foreach(var_05 in var_03) + { + var_05.accuracy = 0; + if(var_05.shots_fired > 0) + { + var_05.accuracy = int(var_05.shots_hit / var_05.shots_fired * 100); + } + } + + for(var_07 = 1;var_07 < 6;var_07++) + { + setdvar("stats_" + var_00 + "_weapon" + var_07 + "_name"," "); + setdvar("stats_" + var_00 + "_weapon" + var_07 + "_kills"," "); + setdvar("stats_" + var_00 + "_weapon" + var_07 + "_shots"," "); + setdvar("stats_" + var_00 + "_weapon" + var_07 + "_accuracy"," "); + } + + for(var_07 = 0;var_07 < var_03.size;var_07++) + { + if(!isdefined(var_03[var_07])) + { + break; + } + + setdvar("stats_" + var_00 + "_weapon" + var_07 + 1 + "_name",var_03[var_07].name); + setdvar("stats_" + var_00 + "_weapon" + var_07 + 1 + "_kills",var_03[var_07].kills); + setdvar("stats_" + var_00 + "_weapon" + var_07 + 1 + "_shots",var_03[var_07].shots_fired); + setdvar("stats_" + var_00 + "_weapon" + var_07 + 1 + "_accuracy",var_03[var_07].accuracy + "%"); + } + + var_00++; + } +} + +//Function Number: 11 +get_best_weapons(param_00) +{ + var_01 = []; + for(var_02 = 0;var_02 < param_00;var_02++) + { + var_01[var_02] = get_weapon_with_most_kills(var_01); + } + + return var_01; +} + +//Function Number: 12 +get_weapon_with_most_kills(param_00) +{ + if(!isdefined(param_00)) + { + param_00 = []; + } + + var_01 = undefined; + foreach(var_03 in self.stats["weapon"]) + { + var_04 = 0; + foreach(var_06 in param_00) + { + if(var_03.name == var_06.name) + { + var_04 = 1; + break; + } + } + + if(var_04) + { + continue; + } + + if(!isdefined(var_01)) + { + var_01 = var_03; + continue; + } + + if(var_03.kills > var_01.kills) + { + var_01 = var_03; + } + } + + return var_01; +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_props.gsc b/MW3/PC/SP/maps/_props.gsc new file mode 100644 index 0000000..0ce1d09 --- /dev/null +++ b/MW3/PC/SP/maps/_props.gsc @@ -0,0 +1,240 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_props.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 17 + * Decompile Time: 216 ms + * Timestamp: 10/27/2023 2:20:15 AM +*******************************************************************/ + +//Function Number: 1 +prop_notetrack_exist(param_00,param_01) +{ + if(!isdefined(level.prop_notetracks)) + { + level.prop_notetracks = []; + } + + if(!isdefined(level.prop_notetracks[param_00])) + { + level.prop_notetracks[param_00] = []; + } + + if(isdefined(level.prop_notetracks[param_00][param_01])) + { + return 1; + } + + level.prop_notetracks[param_00][param_01] = 1; + return 0; +} + +//Function Number: 2 +add_smoking_notetracks(param_00) +{ + if(prop_notetrack_exist(param_00,"add_smoking_notetracks")) + { + return; + } + + maps\_anim::addnotetrack_customfunction(param_00,"attach cig",::attach_cig); + maps\_anim::addnotetrack_customfunction(param_00,"detach cig",::detach_cig); + maps\_anim::addnotetrack_customfunction(param_00,"puff",::smoke_puff); + maps\_anim::addnotetrack_customfunction(param_00,"exhale",::smoke_exhale); + level._effect["cigar_glow"] = loadfx("fire/cigar_glow_far"); + level._effect["cigar_glow_puff"] = loadfx("fire/cigar_glow_puff"); + level._effect["cigar_smoke_puff"] = loadfx("smoke/cigarsmoke_puff_far"); + level._effect["cigar_exhale"] = loadfx("smoke/cigarsmoke_exhale_far"); + level.scr_model["cigar"] = "prop_price_cigar"; +} + +//Function Number: 3 +detach_idle_clip(param_00) +{ + if(isdefined(param_00.clip)) + { + param_00.clip delete(); + } +} + +//Function Number: 4 +add_sit_load_ak_notetracks(param_00) +{ + if(prop_notetrack_exist(param_00,"add_cellphone_notetracks")) + { + return; + } + + maps\_anim::addnotetrack_customfunction(param_00,"attach clip left",::attach_clip); + maps\_anim::addnotetrack_customfunction(param_00,"detach clip left",::detach_idle_clip); + level.scr_model["clip"] = "weapon_ak47_clip"; +} + +//Function Number: 5 +attach_clip(param_00) +{ + param_00 notify("new_prop_rotation"); + var_01 = spawn("script_model",(0,0,0)); + var_01 linkto(param_00,"tag_inhand",(0,0,0),(0,0,0)); + var_01 setmodel(maps\_utility::getmodel("clip")); + param_00.clip = var_01; + thread prop_delete(var_01,param_00); +} + +//Function Number: 6 +add_cellphone_notetracks(param_00) +{ + if(prop_notetrack_exist(param_00,"add_cellphone_notetracks")) + { + return; + } + + maps\_anim::addnotetrack_customfunction(param_00,"attach phone",::attach_phone); + maps\_anim::addnotetrack_customfunction(param_00,"detach phone",::detach_phone); + level.scr_model["cellphone"] = "com_cellphone_off"; +} + +//Function Number: 7 +attach_phone(param_00) +{ + param_00 notify("new_phone_rotation"); + var_01 = spawn("script_model",(0,0,0)); + var_01 linkto(param_00,"tag_inhand",(0,0,0),(0,0,0)); + var_01 setmodel(maps\_utility::getmodel("cellphone")); + param_00.phone = var_01; + thread prop_delete(var_01,param_00); +} + +//Function Number: 8 +detach_phone(param_00) +{ + if(isdefined(param_00.phone)) + { + param_00.phone delete(); + } +} + +//Function Number: 9 +attach_cig(param_00) +{ + param_00 notify("new_cigar_rotation"); + var_01 = spawn("script_model",(0,0,0)); + var_01 linkto(param_00,"tag_inhand",(0,0,0),(0,0,0)); + var_01 setmodel(maps\_utility::getmodel("cigar")); + playfxontag(common_scripts\utility::getfx("cigar_glow"),var_01,"tag_cigarglow"); + param_00.cigar = var_01; + thread prop_delete_cig(var_01,param_00); +} + +//Function Number: 10 +detach_cig(param_00) +{ + if(isdefined(param_00.cigar)) + { + param_00.cigar thread prop_cig_throw(); + } +} + +//Function Number: 11 +prop_delete(param_00,param_01) +{ + param_01 notify("new_prop_rotation" + param_00.model); + param_01 endon("new_prop_rotation" + param_00.model); + param_00 endon("death"); + param_01 maps\_utility::add_endon("new_prop_rotation" + param_00.model); + param_00 maps\_utility::add_endon("death"); + maps\_utility::add_wait(::maps\_utility::waittill_msg,"stop_loop"); + param_01 maps\_utility::add_wait(::maps\_utility::waittill_msg,"death"); + maps\_utility::do_wait_any(); + param_00 delete(); +} + +//Function Number: 12 +prop_delete_cig(param_00,param_01) +{ + param_01 notify("new_prop_rotation" + param_00.model); + param_01 endon("new_prop_rotation" + param_00.model); + param_00 endon("death"); + param_01 maps\_utility::add_endon("new_prop_rotation" + param_00.model); + param_00 maps\_utility::add_endon("death"); + maps\_utility::add_wait(::maps\_utility::waittill_msg,"stop_loop"); + param_01 maps\_utility::add_wait(::maps\_utility::waittill_msg,"death"); + maps\_utility::do_wait_any(); + param_00 thread prop_cig_throw(); +} + +//Function Number: 13 +prop_cig_throw() +{ + self endon("death"); + if(!isdefined(self)) + { + return; + } + + if(isdefined(self.cig_throwing) && self.cig_throwing) + { + return; + } + + self.cig_throwing = 1; + stopfxontag(common_scripts\utility::getfx("cigar_glow"),self,"tag_cigarglow"); + var_00 = 3; + var_01 = anglestoforward(self.angles); + self unlink(); + self movegravity(var_01 * 100,var_00); + self rotatevelocity((400,0,0),var_00,0,var_00); + wait var_00; + self delete(); +} + +//Function Number: 14 +smoke_puff(param_00) +{ + if(!isdefined(param_00.cigar)) + { + return; + } + + param_00 endon("death"); + param_00.cigar endon("death"); + playfxontag(common_scripts\utility::getfx("cigar_glow_puff"),param_00.cigar,"tag_cigarglow"); + wait 1; + playfxontag(common_scripts\utility::getfx("cigar_smoke_puff"),param_00,"tag_eye"); +} + +//Function Number: 15 +smoke_exhale(param_00) +{ + if(!isdefined(param_00.cigar)) + { + return; + } + + playfxontag(common_scripts\utility::getfx("cigar_exhale"),param_00,"tag_eye"); +} + +//Function Number: 16 +ghillie_leaves() +{ + var_00 = []; + self endon("death",var_7B[var_7B.size],"J_Wrist_RI",var_7B[var_7B.size],"J_Elbow_LE",var_7B[var_7B.size],"J_Hip_RI",var_7B[var_7B.size],"J_SpineLower",var_7B[var_7B.size],"J_HipTwist_LE",var_7B[var_7B.size],"J_HipTwist_RI",var_7B[var_7B.size],"J_Knee_LE",var_7B[var_7B.size],"J_Knee_RI",var_7B[var_7B.size],"J_SpineUpper",var_7B[var_7B.size],"J_Ankle_LE",var_7B[var_7B.size],"J_Ankle_RI",var_7B[var_7B.size],"J_Knee_Bulge_LE",var_7B[var_7B.size],"J_Ball_LE",var_7B[var_7B.size],"J_Clavicle_RI",var_7B[var_7B.size],"J_Neck",var_7B[var_7B.size],"J_ShoulderRaise_LE",var_7B[var_7B.size],"J_Head",var_7B[var_7B.size],"J_Shoulder_RI",var_7B[var_7B.size],"J_Brow_LE",var_7B[var_7B.size],"J_Cheek_RI",var_7B[var_7B.size],"J_CoatFront_RI",var_7B[var_7B.size],"J_CoatRear_LE",var_7B[var_7B.size],"J_CoatRear_RI",var_7B[var_7B.size],"J_Hip_LE",var_7B[var_7B.size],"J_CoatFront_LE",var_7B[var_00.size],"J_MainRoot"); + for(;;) + { + while(self.movemode != "run") + { + wait 0.2; + continue; + } + + playfxontag(level._effect["ghillie_leaves"],self,common_scripts\utility::random(var_7B)); + wait randomfloatrange(0.1,2.5); + } +} + +//Function Number: 17 +attach_cig_self() +{ + attach_cig(self); +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_quotes.gsc b/MW3/PC/SP/maps/_quotes.gsc new file mode 100644 index 0000000..a35a84a --- /dev/null +++ b/MW3/PC/SP/maps/_quotes.gsc @@ -0,0 +1,198 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_quotes.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 7 + * Decompile Time: 103 ms + * Timestamp: 10/27/2023 2:21:59 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + thread setdeadquote(); +} + +//Function Number: 2 +setdeadquote() +{ + level endon("mine death"); + level notify("new_quote_string"); + level endon("new_quote_string"); + if(isalive(level.player)) + { + level.player waittill("death"); + } + + if(!level.missionfailed) + { + var_00 = int(tablelookup("sp/deathQuoteTable.csv",1,"size",0)); + var_01 = randomint(var_00); + if(getdvar("cycle_deathquotes") != "") + { + if(getdvar("ui_deadquote_index") == "") + { + setdvar("ui_deadquote_index","0"); + } + + var_01 = getdvarint("ui_deadquote_index"); + setdvar("ui_deadquote",lookupdeathquote(var_01)); + var_01++; + if(var_01 > var_00 - 1) + { + var_01 = 0; + } + + setdvar("ui_deadquote_index",var_01); + return; + } + + setdvar("ui_deadquote",lookupdeathquote(var_01)); + } +} + +//Function Number: 3 +lookupdeathquote(param_00) +{ + var_01 = tablelookup("sp/deathQuoteTable.csv",0,param_00,1); + if(tolower(var_01[0]) != tolower("@")) + { + var_01 = "@" + var_01; + } + + return var_01; +} + +//Function Number: 4 +setdeadquote_so() +{ + level notify("new_quote_string"); + var_00 = []; + var_00 = so_builddeadquote(); + var_00 = maps\_utility::array_randomize(var_00); + var_01 = randomint(var_00.size); + if(!maps\_utility::is_coop_online()) + { + var_02 = var_00.size > 1; + var_03 = var_01; + while(var_02) + { + if(deadquote_recently_used(var_00[var_01])) + { + var_01++; + if(var_01 >= var_00.size) + { + var_01 = 0; + } + + if(var_01 == var_03) + { + var_02 = 0; + } + + continue; + } + + var_02 = 0; + } + + setdvar("ui_deadquote_v3",getdvar("ui_deadquote_v2")); + setdvar("ui_deadquote_v2",getdvar("ui_deadquote_v1")); + setdvar("ui_deadquote_v1",var_00[var_01]); + } + + switch(var_00[var_01]) + { + case "@DEADQUOTE_SO_ICON_PARTNER": + maps\_specialops_code::so_special_failure_hint_reset_dvars("ui_icon_partner"); + break; + + case "@DEADQUOTE_SO_ICON_OBJ": + maps\_specialops_code::so_special_failure_hint_reset_dvars("ui_icon_obj"); + break; + + case "@DEADQUOTE_SO_ICON_OBJ_OFFSCREEN": + maps\_specialops_code::so_special_failure_hint_reset_dvars("ui_icon_obj_offscreen"); + break; + + case "@DEADQUOTE_SO_STAR_RANKINGS": + maps\_specialops_code::so_special_failure_hint_reset_dvars("ui_icon_stars"); + break; + + case "@DEADQUOTE_SO_CLAYMORE_ENEMIES_SHOOT": + case "@DEADQUOTE_SO_CLAYMORE_POINT_ENEMY": + maps\_specialops_code::so_special_failure_hint_reset_dvars("ui_icon_claymore"); + break; + + case "@DEADQUOTE_SO_STEALTH_STAY_LOW": + maps\_specialops_code::so_special_failure_hint_reset_dvars("ui_icon_stealth_stance"); + break; + } + + setdvar("ui_deadquote",var_00[var_01]); +} + +//Function Number: 5 +deadquote_recently_used(param_00) +{ + if(param_00 == getdvar("ui_deadquote_v1")) + { + return 1; + } + + if(param_00 == getdvar("ui_deadquote_v2")) + { + return 1; + } + + if(param_00 == getdvar("ui_deadquote_v3")) + { + return 1; + } + + return 0; +} + +//Function Number: 6 +so_builddeadquote() +{ + if(should_use_custom_deadquotes()) + { + return level.so_deadquotes; + } + + var_00 = []; + if(!maps\_utility::is_survival()) + { + } + else + { + } + + if(isdefined(self.so_infohud_toggle_state) && self.so_infohud_toggle_state != "none") + { + } + + if(maps\_utility::is_coop()) + { + } + + return var_7B; +} + +//Function Number: 7 +should_use_custom_deadquotes() +{ + if(!isdefined(level.so_deadquotes)) + { + return 0; + } + + if(level.so_deadquotes.size <= 0) + { + return 0; + } + + return level.so_deadquotes_chance >= randomfloat(1); +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_radiation.gsc b/MW3/PC/SP/maps/_radiation.gsc new file mode 100644 index 0000000..c8bc0d8 --- /dev/null +++ b/MW3/PC/SP/maps/_radiation.gsc @@ -0,0 +1,449 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_radiation.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 17 + * Decompile Time: 249 ms + * Timestamp: 10/27/2023 2:20:16 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + precachestring(&"SCOUTSNIPER_MRHR"); + precachestring(&"SCRIPT_RADIATION_DEATH"); + precacheshellshock("radiation_low"); + precacheshellshock("radiation_med"); + precacheshellshock("radiation_high"); + foreach(var_01 in level.players) + { + var_01.radiation = spawnstruct(); + var_01.radiation.super_dose = 0; + var_01.radiation.inside = 0; + var_01 maps\_utility::ent_flag_init("_radiation_poisoning"); + } + + common_scripts\utility::run_thread_on_targetname("radiation",::updateradiationtriggers); + common_scripts\utility::run_thread_on_targetname("super_radiation",::super_radiation_trigger); + common_scripts\utility::array_thread(level.players,::updateradiationdosage); + common_scripts\utility::array_thread(level.players,::updateradiationdosimeter); + common_scripts\utility::array_thread(level.players,::updateradiationshock); + common_scripts\utility::array_thread(level.players,::updateradiationblackout); + common_scripts\utility::array_thread(level.players,::updateradiationsound); + common_scripts\utility::array_thread(level.players,::updateradiationflag); + common_scripts\utility::array_thread(level.players,::first_radiation_dialogue); +} + +//Function Number: 2 +updateradiationtriggers() +{ + self.members = 0; + for(;;) + { + self waittill("trigger",var_00); + thread updateradiationtrigger_perplayer(var_00); + } +} + +//Function Number: 3 +updateradiationtrigger_perplayer(param_00) +{ + if(param_00.radiation.inside) + { + return; + } + + param_00.radiation.inside = 1; + param_00.radiation.triggers[param_00.radiation.triggers.size] = self; + while(param_00 istouching(self)) + { + wait 0.05; + } + + param_00.radiation.inside = 0; + param_00.radiation.triggers = common_scripts\utility::array_remove(param_00.radiation.triggers,self); +} + +//Function Number: 4 +super_radiation_trigger() +{ + self waittill("trigger",var_00); + var_00.radiation.super_dose = 1; +} + +//Function Number: 5 +updateradiationdosage() +{ + self.radiation.triggers = []; + self.radiation.rate = 0; + self.radiation.ratepercent = 0; + self.radiation.total = 0; + self.radiation.totalpercent = 0; + var_00 = 1; + var_01 = 0; + var_02 = 1100000 / 60 * var_00; + var_03 = 200000; + var_04 = var_02 - var_01; + for(;;) + { + var_05 = []; + for(var_06 = 0;var_06 < self.radiation.triggers.size;var_06++) + { + var_07 = self.radiation.triggers[var_06]; + var_08 = distance(self.origin,var_07.origin) - 15; + var_05[var_06] = var_02 - var_02 / var_07.radius * var_08; + } + + var_09 = 0; + for(var_06 = 0;var_06 < var_05.size;var_06++) + { + var_09 = var_09 + var_05[var_06]; + } + + if(var_09 < var_01) + { + var_09 = var_01; + } + + if(var_09 > var_02) + { + var_09 = var_02; + } + + self.radiation.rate = var_09; + self.radiation.ratepercent = var_09 - var_01 / var_04 * 100; + if(self.radiation.super_dose) + { + var_09 = var_02; + self.radiation.ratepercent = 100; + } + + if(self.radiation.ratepercent > 25) + { + self.radiation.total = self.radiation.total + var_09; + self.radiation.totalpercent = self.radiation.total / var_03 * 100; + } + else if(self.radiation.ratepercent < 1 && self.radiation.total > 0) + { + self.radiation.total = self.radiation.total - 1500; + if(self.radiation.total < 0) + { + self.radiation.total = 0; + } + + self.radiation.totalpercent = self.radiation.total / var_03 * 100; + } + + wait var_00; + } +} + +//Function Number: 6 +updateradiationshock() +{ + var_00 = 1; + for(;;) + { + if(self.radiation.ratepercent >= 75) + { + self shellshock("radiation_high",5); + } + else if(self.radiation.ratepercent >= 50) + { + self shellshock("radiation_med",5); + } + else if(self.radiation.ratepercent > 25) + { + self shellshock("radiation_low",5); + } + + wait var_00; + } +} + +//Function Number: 7 +updateradiationsound() +{ + thread playradiationsound(); + for(;;) + { + if(self.radiation.ratepercent >= 75) + { + self.radiation.sound = "item_geigercouner_level4"; + } + else if(self.radiation.ratepercent >= 50) + { + self.radiation.sound = "item_geigercouner_level3"; + } + else if(self.radiation.ratepercent >= 25) + { + self.radiation.sound = "item_geigercouner_level2"; + } + else if(self.radiation.ratepercent > 0) + { + self.radiation.sound = "item_geigercouner_level1"; + } + else + { + self.radiation.sound = "none"; + } + + wait 0.05; + } +} + +//Function Number: 8 +updateradiationflag() +{ + for(;;) + { + if(self.radiation.ratepercent > 25) + { + maps\_utility::ent_flag_set("_radiation_poisoning"); + } + else + { + maps\_utility::ent_flag_clear("_radiation_poisoning"); + } + + wait 0.05; + } +} + +//Function Number: 9 +playradiationsound() +{ + wait 0.05; + var_00 = spawn("script_origin",(0,0,0)); + var_00.origin = self.origin; + var_00.angles = self.angles; + var_00 linkto(self); + var_01 = self.radiation.sound; + for(;;) + { + if(var_01 != self.radiation.sound) + { + var_00 stoploopsound(); + if(isdefined(self.radiation.sound) && self.radiation.sound != "none") + { + var_00 playloopsound(self.radiation.sound); + } + } + + var_01 = self.radiation.sound; + wait 0.05; + } +} + +//Function Number: 10 +updateradiationratepercent() +{ + var_00 = 0.05; + var_01 = newclienthudelem(self); + var_01.fontscale = 1.2; + var_01.x = 670; + var_01.y = 350; + var_01.alignx = "right"; + var_01.label = ""; + var_01.alpha = 0; + for(;;) + { + var_01.label = self.radiation.ratepercent; + wait var_00; + } +} + +//Function Number: 11 +updateradiationdosimeter() +{ + var_00 = 0.028; + var_01 = 100; + var_02 = 1; + var_03 = var_01 - var_00; + var_04 = self.origin; + var_05 = newclienthudelem(self); + var_05.fontscale = 1.2; + var_05.x = 676; + var_05.y = 360; + var_05.alpha = 0; + var_05.alignx = "right"; + var_05.label = &"SCOUTSNIPER_MRHR"; + var_05 thread updateradiationdosimetercolor(self); + for(;;) + { + if(self.radiation.rate <= var_00) + { + var_06 = randomfloatrange(-0.001,0.001); + var_05 setvalue(var_00 + var_06); + } + else if(self.radiation.rate > var_01) + { + var_05 setvalue(var_01); + } + else + { + var_05 setvalue(self.radiation.rate); + } + + wait var_02; + } +} + +//Function Number: 12 +updateradiationdosimetercolor(param_00) +{ + var_01 = 0.05; + for(;;) + { + var_02 = 1; + var_03 = 0.13; + while(param_00.radiation.rate >= 100) + { + if(var_02 <= 0 || var_02 >= 1) + { + var_03 = var_03 * -1; + } + + var_02 = var_02 + var_03; + if(var_02 <= 0) + { + var_02 = 0; + } + + if(var_02 >= 1) + { + var_02 = 1; + } + + self.color = (1,var_02,var_02); + wait var_01; + } + + self.color = (1,1,1); + wait var_01; + } +} + +//Function Number: 13 +updateradiationblackout() +{ + level endon("special_op_terminated"); + self endon("death"); + var_00 = newclienthudelem(self); + var_00.x = 0; + var_00.y = 0; + var_00 setshader("black",640,480); + var_00.alignx = "left"; + var_00.aligny = "top"; + var_00.horzalign = "fullscreen"; + var_00.vertalign = "fullscreen"; + var_00.alpha = 0; + var_01 = 1; + var_02 = 4; + var_03 = 0.25; + var_04 = 1; + var_05 = 25; + var_06 = 100; + var_07 = 0; + for(;;) + { + while(self.radiation.totalpercent > 25 && self.radiation.ratepercent > 25) + { + var_08 = var_06 - var_05; + var_07 = self.radiation.totalpercent - var_05 / var_08; + if(var_07 < 0) + { + var_07 = 0; + } + else if(var_07 > 1) + { + var_07 = 1; + } + + var_09 = var_02 - var_01; + var_0A = var_01 + var_09 * 1 - var_07; + var_0B = var_04 - var_03; + var_0C = var_03 + var_0B * var_07; + var_0D = 7.2 * var_0C; + var_0E = var_07 * 0.5; + var_0F = 7.2 * var_0E; + if(var_07 == 1) + { + break; + } + + var_10 = var_0A / 2; + var_00 fadeinblackout(var_10,var_0C,var_0D,self); + var_00 fadeoutblackout(var_10,var_0E,var_0F,self); + wait var_07 * 0.5; + } + + if(var_07 == 1) + { + break; + } + + if(var_00.alpha != 0) + { + var_00 fadeoutblackout(1,0,0,self); + } + + wait 0.05; + } + + var_00 fadeinblackout(2,1,6,self); + thread radiation_kill(); +} + +//Function Number: 14 +radiation_kill() +{ + self.specialdamage = 1; + self.specialdeath = 1; + self.radiationdeath = 1; + if(!maps\_utility::kill_wrapper()) + { + return; + } + + waittillframeend; + var_00 = &"SCRIPT_RADIATION_DEATH"; + setdvar("ui_deadquote",var_00); +} + +//Function Number: 15 +fadeinblackout(param_00,param_01,param_02,param_03) +{ + self fadeovertime(param_00); + self.alpha = param_01; + param_03 setblurforplayer(param_02,param_00); + wait param_00; +} + +//Function Number: 16 +fadeoutblackout(param_00,param_01,param_02,param_03) +{ + self fadeovertime(param_00); + self.alpha = param_01; + param_03 setblurforplayer(param_02,param_00); + wait param_00; +} + +//Function Number: 17 +first_radiation_dialogue() +{ + self endon("death"); + for(;;) + { + maps\_utility::ent_flag_wait("_radiation_poisoning"); + if(level.script == "scoutsniper" || level.script == "co_scoutsniper") + { + level thread maps\_utility::function_stack(::maps\_utility::radio_dialogue,"scoutsniper_mcm_youdaft"); + } + + level notify("radiation_warning"); + maps\_utility::ent_flag_waitopen("_radiation_poisoning"); + wait 10; + } +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_rambo.gsc b/MW3/PC/SP/maps/_rambo.gsc new file mode 100644 index 0000000..b8c20a7 --- /dev/null +++ b/MW3/PC/SP/maps/_rambo.gsc @@ -0,0 +1,86 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_rambo.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 4 + * Decompile Time: 45 ms + * Timestamp: 10/27/2023 2:20:35 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(isdefined(level.ramboanims)) + { + return; + } + + if(!isdefined(level.subclass_spawn_functions)) + { + level.subclass_spawn_functions = []; + } + + level.subclass_spawn_functions["militia"] = ::enable_militia_behavior; + anim.ramboanims = spawnstruct(); + level.ramboanims.coverleft90 = animscripts/utility::array(%favela_chaotic_cornerl_hop90,%favela_chaotic_cornerl_high90,%favela_chaotic_cornerl_mid90); + level.ramboanims.coverleft45 = animscripts/utility::array(%favela_chaotic_cornerl_high45,%favela_chaotic_cornerl_mid45); + level.ramboanims.coverleftgrenade = %favela_chaotic_cornerl_grenade; + level.ramboanims.coverright90 = animscripts/utility::array(%favela_chaotic_cornerr_med90,%favela_chaotic_cornerr_low90,%favela_chaotic_cornerr_high90); + level.ramboanims.coverright45 = animscripts/utility::array(%favela_chaotic_cornerr_med45,%favela_chaotic_cornerr_low45,%favela_chaotic_cornerr_high45); + level.ramboanims.coverrightgrenade = %favela_chaotic_cornerr_grenade; + level.ramboanims.coverstand = animscripts/utility::array(%favela_chaotic_standcover_firea,%favela_chaotic_standcover_fireb,%favela_chaotic_standcover_firec); + level.ramboanims.coverstandfail = animscripts/utility::array(%favela_chaotic_standcover_gunjama,%favela_chaotic_standcover_gunjamb); + level.ramboanims.coverstandgrenade = animscripts/utility::array(%favela_chaotic_standcover_grenadefirea); + level.ramboanims.covercrouch = animscripts/utility::array(%favela_chaotic_crouchcover_firea,%favela_chaotic_crouchcover_fireb,%favela_chaotic_crouchcover_firec); + level.ramboanims.covercrouchfail = animscripts/utility::array(%favela_chaotic_crouchcover_gunjama,%favela_chaotic_crouchcover_gunjamb); + level.ramboanims.covercrouchgrenade = animscripts/utility::array(%favela_chaotic_crouchcover_grenadefirea); + setrambogrenadeoffsets(); +} + +//Function Number: 2 +setrambogrenadeoffsets() +{ + animscripts/combat_utility::func_238B(%favela_chaotic_cornerr_grenade,(52.4535,10.107,64.2898)); + animscripts/combat_utility::func_238B(%favela_chaotic_cornerl_grenade,(19.1753,-18.9954,49.3355)); + animscripts/combat_utility::func_238B(%favela_chaotic_standcover_grenadefirea,(6.66898,-0.135193,72.117)); + animscripts/combat_utility::func_238B(%favela_chaotic_crouchcover_grenadefirea,(4.53614,-10.4574,59.7186)); +} + +//Function Number: 3 +enable_militia_behavior() +{ + if(self.type == "dog") + { + return; + } + + self.neverenablecqb = 1; + self.maxfaceenemydist = 256; + if(animscripts/combat_utility::func_23BD()) + { + return; + } + + if(animscripts/utility::func_CEA(self.weapon)) + { + return; + } + + self.disable_blindfire = undefined; + self.favor_blindfire = 1; + self.rambochance = 0.9; + self.ramboaccuracymult = 1; + self.baseaccuracy = 0.75; + self.neversprintforvariation = undefined; +} + +//Function Number: 4 +disable_militia_behavior() +{ + self.favor_blindfire = undefined; + self.rambochance = undefined; + self.neverenablecqb = 0; + self.maxfaceenemydist = 512; + self.ramboaccuracymult = undefined; +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_rank.gsc b/MW3/PC/SP/maps/_rank.gsc new file mode 100644 index 0000000..49238e6 --- /dev/null +++ b/MW3/PC/SP/maps/_rank.gsc @@ -0,0 +1,881 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_rank.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 41 + * Decompile Time: 520 ms + * Timestamp: 10/27/2023 2:25:08 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + maps\_hud::init(); + precachestring(&"RANK_PLAYER_WAS_PROMOTED_N"); + precachestring(&"RANK_PLAYER_WAS_PROMOTED"); + precachestring(&"RANK_PROMOTED"); + precachestring(&"RANK_ROMANI"); + precachestring(&"RANK_ROMANII"); + precachestring(&"RANK_ROMANIII"); + precachestring(&"SCRIPT_PLUS"); + precacheshader("line_horizontal"); + precacheshader("line_vertical"); + precacheshader("gradient_fadein"); + precacheshader("white"); + level.maxrank = int(tablelookup("sp/rankTable.csv",0,"maxrank",1)); + level.maxxp = int(tablelookup("sp/rankTable.csv",0,level.maxrank,7)); + var_00 = 0; + for(var_00 = 0;var_00 <= level.maxrank;var_00++) + { + precacheshader(tablelookup("sp/rankTable.csv",0,var_00,6)); + } + + var_01 = 0; + var_02 = tablelookup("sp/ranktable.csv",0,var_01,1); + while(isdefined(var_02) && var_02 != "") + { + level.ranktable[var_01][1] = tablelookup("sp/ranktable.csv",0,var_01,1); + level.ranktable[var_01][2] = tablelookup("sp/ranktable.csv",0,var_01,2); + level.ranktable[var_01][3] = tablelookup("sp/ranktable.csv",0,var_01,3); + level.ranktable[var_01][7] = tablelookup("sp/ranktable.csv",0,var_01,7); + precachestring(tablelookupistring("sp/ranktable.csv",0,var_01,10)); + var_01++; + var_02 = tablelookup("sp/ranktable.csv",0,var_01,1); + } + + maps\_missions::buildchallengeinfo(); +} + +//Function Number: 2 +xp_init() +{ + xp_setup(); + foreach(var_01 in level.players) + { + var_01 thread xp_player_init(); + var_01 thread maps\_missions::updatechallenges(); + } +} + +//Function Number: 3 +xp_player_init() +{ + if(!isdefined(self.summary)) + { + self.summary["rankxp"] = self getplayerdata("experience"); + self.summary["rank"] = getrankforxp(self.summary["rankxp"]); + } + + update_rank_into_profile(); + self.rankupdatetotal = 0; + self.hud_rankscroreupdate = newclienthudelem(self); + self.hud_rankscroreupdate.horzalign = "center"; + self.hud_rankscroreupdate.vertalign = "middle"; + self.hud_rankscroreupdate.alignx = "center"; + self.hud_rankscroreupdate.aligny = "middle"; + self.hud_rankscroreupdate.x = 0; + self.hud_rankscroreupdate.y = -60; + self.hud_rankscroreupdate.font = "hudbig"; + self.hud_rankscroreupdate.fontscale = 0.75; + self.hud_rankscroreupdate.archived = 0; + self.hud_rankscroreupdate.color = (0.75,1,0.75); + self.hud_rankscroreupdate fontpulseinit(); +} + +//Function Number: 4 +update_rank_into_profile() +{ + var_00 = self getlocalplayerprofiledata("percentCompleteSO"); + var_01 = int(var_00 / 100); + var_02 = getrank(); + var_03 = var_02 + var_01 * 100; + self setlocalplayerprofiledata("percentCompleteSO",var_03); +} + +//Function Number: 5 +xp_bar_client_elem(param_00) +{ + var_01 = newclienthudelem(param_00); + var_01.x = hud_width_format() / 2 * -1; + var_01.y = 0; + var_01.sort = 5; + var_01.horzalign = "center_adjustable"; + var_01.vertalign = "bottom_adjustable"; + var_01.alignx = "left"; + var_01.aligny = "bottom"; + var_01 setshader("gradient_fadein",get_xpbarwidth(),4); + var_01.color = (1,0.8,0.4); + var_01.alpha = 0.65; + var_01.foreground = 1; + return var_01; +} + +//Function Number: 6 +hud_width_format() +{ + if(issplitscreen()) + { + return 726; + } + + return 540; +} + +//Function Number: 7 +xpbar_update() +{ + if(!get_xpbarwidth()) + { + self.hud_xpbar.alpha = 0; + } + else + { + self.hud_xpbar.alpha = 0.65; + } + + self.hud_xpbar setshader("gradient_fadein",get_xpbarwidth(),4); +} + +//Function Number: 8 +get_xpbarwidth() +{ + var_00 = int(tablelookup("sp/rankTable.csv",0,self.summary["rank"],3)); + var_01 = int(self.summary["rankxp"] - int(tablelookup("sp/rankTable.csv",0,self.summary["rank"],2))); + var_02 = hud_width_format(); + var_03 = int(var_02 * var_01 / var_00); + return var_03; +} + +//Function Number: 9 +xp_setup() +{ + if(!isdefined(level.scoreinfo) || !isdefined(level.scoreinfo.size)) + { + level.scoreinfo = []; + } + + level.xpscale = 1; + if(level.console) + { + level.xpscale = 1; + } + + registerscoreinfo("kill",100); + registerscoreinfo("headshot",100); + registerscoreinfo("assist",20); + registerscoreinfo("suicide",0); + registerscoreinfo("teamkill",0); + registerscoreinfo("completion_xp",5000); + level notify("rank_score_info_defaults_set"); +} + +//Function Number: 10 +givexp_think() +{ + self waittill("death",var_00,var_01,var_02); + if(isdefined(var_00) && isdefined(var_00.classname) && var_00.classname == "worldspawn" && isdefined(self.last_dmg_player)) + { + var_00 = self.last_dmg_player; + } + + givexp_helper(var_00); +} + +//Function Number: 11 +givexp_helper(param_00) +{ + if(!isdefined(param_00)) + { + return; + } + + if(isai(param_00) && param_00 isbadguy()) + { + return; + } + + if(is_special_targetname_attacker(param_00)) + { + if(isdefined(param_00.attacker)) + { + thread givexp_helper(param_00.attacker); + return; + } + + if(isdefined(param_00.damageowner)) + { + thread givexp_helper(param_00.damageowner); + return; + } + } + + if(isplayer(param_00)) + { + if(isdefined(level.givexp_kill_func)) + { + param_00 thread [[ level.givexp_kill_func ]](self); + } + else + { + param_00 thread maps\_utility::givexp("kill"); + } + } + + if(maps\_utility::is_survival()) + { + if(isai(param_00) && !param_00 isbadguy() && isdefined(param_00.owner) && isplayer(param_00.owner)) + { + if(isdefined(level.givexp_kill_func)) + { + param_00.owner thread [[ level.givexp_kill_func ]](self); + } + else + { + param_00.owner thread maps\_utility::givexp("kill"); + } + } + } + + if(!isplayer(param_00) && !isai(param_00)) + { + return; + } + + if(!param_00 isbadguy() && isdefined(self.attacker_list) && self.attacker_list.size) + { + for(var_01 = 0;var_01 < self.attacker_list.size;var_01++) + { + if(isplayer(self.attacker_list[var_01]) && self.attacker_list[var_01] != param_00) + { + if(isdefined(self.kill_assist_xp)) + { + self.attacker_list[var_01] thread maps\_utility::givexp("assist",self.kill_assist_xp); + continue; + } + + self.attacker_list[var_01] thread maps\_utility::givexp("assist"); + } + } + } +} + +//Function Number: 12 +is_special_targetname_attacker(param_00) +{ + if(!isdefined(param_00.targetname)) + { + return 0; + } + + if(issubstr(param_00.targetname,"destructible")) + { + return 1; + } + + if(common_scripts\utility::string_starts_with(param_00.targetname,"sentry_")) + { + return 1; + } + + return 0; +} + +//Function Number: 13 +ai_xp_init() +{ + thread givexp_think(); + self.attacker_list = []; + self.last_attacked = 0; + maps\_utility::add_damage_function(::xp_took_damage); +} + +//Function Number: 14 +xp_took_damage(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + if(!isdefined(param_01)) + { + return; + } + + if(!isdefined(self)) + { + return; + } + + var_07 = gettime(); + var_08 = var_07 - self.last_attacked; + if(var_08 <= 10000) + { + self.attacker_list = common_scripts\utility::array_remove(self.attacker_list,param_01); + self.attacker_list[self.attacker_list.size] = param_01; + self.last_attacked = gettime(); + return; + } + + self.attacker_list = []; + self.attacker_list[0] = param_01; + self.last_attacked = gettime(); +} + +//Function Number: 15 +updateplayerscore(param_00,param_01) +{ + if(!isdefined(level.xp_enable) || !level.xp_enable) + { + return; + } + + if(!isdefined(param_01)) + { + if(isdefined(level.scoreinfo[param_00])) + { + param_01 = getscoreinfovalue(param_00); + } + else + { + param_01 = getscoreinfovalue("kill"); + } + } + + param_01 = int(param_01 * level.xpscale); + if(param_00 == "assist") + { + if(param_01 > getscoreinfovalue("kill")) + { + param_01 = getscoreinfovalue("kill"); + } + } + + thread print_score_increment(param_01); + self.summary["rankxp"] = self.summary["rankxp"] + param_01; + if(updaterank()) + { + thread updaterankannouncehud(); + update_rank_into_profile(); + } + + if(self.summary["rankxp"] <= level.maxxp) + { + self setplayerdata("experience",self.summary["rankxp"]); + } + + if(self.summary["rankxp"] > level.maxxp) + { + self setplayerdata("experience",level.maxxp); + } + + waittillframeend; + self notify("xp_updated",param_00); +} + +//Function Number: 16 +print_score_increment(param_00) +{ + self notify("update_xp"); + self endon("update_xp"); + self.rankupdatetotal = self.rankupdatetotal + param_00; + self.hud_rankscroreupdate.label = &"SCRIPT_PLUS"; + self.hud_rankscroreupdate setvalue(self.rankupdatetotal); + self.hud_rankscroreupdate.alpha = 0.75; + self.hud_rankscroreupdate thread fontpulse(self); + self.hud_rankscroreupdate.x = 0; + self.hud_rankscroreupdate.y = -60; + wait 1; + self.hud_rankscroreupdate fadeovertime(0.2); + self.hud_rankscroreupdate.alpha = 0; + self.hud_rankscroreupdate moveovertime(0.2); + self.hud_rankscroreupdate.x = -240; + self.hud_rankscroreupdate.y = 160; + wait 0.5; + self.hud_rankscroreupdate.x = 0; + self.hud_rankscroreupdate.y = -60; + self.rankupdatetotal = 0; +} + +//Function Number: 17 +fontpulseinit() +{ + self.basefontscale = self.fontscale; + self.maxfontscale = self.fontscale * 2; + self.inframes = 3; + self.outframes = 5; +} + +//Function Number: 18 +fontpulse(param_00) +{ + self notify("fontPulse"); + self endon("fontPulse"); + var_01 = self.maxfontscale - self.basefontscale; + while(self.fontscale < self.maxfontscale) + { + self.fontscale = min(self.maxfontscale,self.fontscale + var_01 / self.inframes); + wait 0.05; + } + + while(self.fontscale > self.basefontscale) + { + self.fontscale = max(self.basefontscale,self.fontscale - var_01 / self.outframes); + wait 0.05; + } +} + +//Function Number: 19 +updaterank() +{ + var_00 = getrank(); + if(var_00 == self.summary["rank"]) + { + return 0; + } + + var_01 = self.summary["rank"]; + var_02 = self.summary["rank"]; + self.summary["rank"] = var_00; + while(var_02 <= var_00) + { + self.setpromotion = 1; + var_02++; + } + + return 1; +} + +//Function Number: 20 +updaterankannouncehud() +{ + self endon("disconnect"); + self notify("update_rank"); + self endon("update_rank"); + self notify("reset_outcome"); + var_00 = getrankinfofull(self.summary["rank"]); + var_01 = spawnstruct(); + var_01.titletext = &"RANK_PROMOTED"; + var_01.iconname = getrankinfoicon(self.summary["rank"]); + var_01.sound = "sp_level_up"; + var_01.duration = 4; + var_02 = level.ranktable[self.summary["rank"]][1]; + var_03 = int(var_02[var_02.size - 1]); + var_01.notifytext = var_00; + if(common_scripts\utility::flag_exist("special_op_final_xp_given") && common_scripts\utility::flag("special_op_final_xp_given")) + { + level.eog_summary_delay = int(max(0,var_01.duration - 2)); + } + + thread notifymessage(var_01); + if(var_03 > 1) + { + } +} + +//Function Number: 21 +notifymessage(param_00) +{ + self endon("death"); + self endon("disconnect"); + var_01 = 4; + while(self.doingnotify && var_01 > 0) + { + var_01 = var_01 - 0.5; + wait 0.5; + } + + thread shownotifymessage(param_00); +} + +//Function Number: 22 +stringtofloat(param_00) +{ + var_01 = strtok(param_00,"."); + var_02 = int(var_01[0]); + if(isdefined(var_01[1])) + { + var_03 = 1; + for(var_04 = 0;var_04 < var_01[1].size;var_04++) + { + var_03 = var_03 * 0.1; + } + + var_02 = var_02 + int(var_01[1]) * var_03; + } + + return var_02; +} + +//Function Number: 23 +actionnotifymessage(param_00) +{ + self endon("death"); + self endon("disconnect"); + var_01 = param_00.slot; + if(tablelookup("sp/splashTable.csv",0,param_00.name,0) != "") + { + if(isdefined(param_00.optionalnumber)) + { + self showhudsplash(param_00.name,param_00.slot,param_00.optionalnumber); + } + else + { + self showhudsplash(param_00.name,param_00.slot); + } + + self.doingsplash[var_01] = param_00; + var_02 = stringtofloat(tablelookup("sp/splashTable.csv",0,param_00.name,4)); + if(isdefined(param_00.sound)) + { + self playlocalsound(param_00.sound); + } + + self notify("actionNotifyMessage" + var_01); + self endon("actionNotifyMessage" + var_01); + wait var_02 - 0.05; + self.doingsplash[var_01] = undefined; + } + + if(self.splashqueue[var_01].size) + { + thread dispatchnotify(var_01); + } +} + +//Function Number: 24 +removetypefromqueue(param_00,param_01) +{ + var_02 = []; + for(var_03 = 0;var_03 < self.splashqueue[param_01].size;var_03++) + { + if(self.splashqueue[param_01][var_03].type != "killstreak") + { + var_02[var_02.size] = self.splashqueue[param_01][var_03]; + } + } + + self.splashqueue[param_01] = var_02; +} + +//Function Number: 25 +actionnotify(param_00) +{ + self endon("death"); + self endon("disconnect"); + var_01 = param_00.slot; + if(!isdefined(param_00.type)) + { + param_00.type = ""; + } + + if(!isdefined(self.doingsplash[var_01])) + { + thread actionnotifymessage(param_00); + return; + } + else if(param_00.type == "killstreak" && self.doingsplash[var_01].type != "challenge" && self.doingsplash[var_01].type != "rank") + { + self.notifytext.alpha = 0; + self.notifytext2.alpha = 0; + self.notifyicon.alpha = 0; + thread actionnotifymessage(param_00); + return; + } + else if(param_00.type == "challenge" && self.doingsplash[var_01].type != "killstreak" && self.doingsplash[var_01].type != "challenge" && self.doingsplash[var_01].type != "rank") + { + self.notifytext.alpha = 0; + self.notifytext2.alpha = 0; + self.notifyicon.alpha = 0; + thread actionnotifymessage(param_00); + return; + } + + if(param_00.type == "challenge" || param_00.type == "killstreak") + { + if(param_00.type == "killstreak") + { + removetypefromqueue("killstreak",var_01); + } + + for(var_02 = self.splashqueue[var_01].size;var_02 > 0;var_02--) + { + self.splashqueue[var_01][var_02] = self.splashqueue[var_01][var_02 - 1]; + } + + self.splashqueue[var_01][0] = param_00; + return; + } + + self.splashqueue[var_01][self.splashqueue[var_01].size] = param_00; +} + +//Function Number: 26 +shownotifymessage(param_00) +{ + self endon("disconnect"); + self.doingnotify = 1; + waitrequirevisibility(0); + if(isdefined(param_00.duration)) + { + var_01 = param_00.duration; + } + else + { + var_01 = 4; + } + + thread resetoncancel(); + if(isdefined(param_00.sound)) + { + self playlocalsound(param_00.sound); + } + + if(isdefined(param_00.glowcolor)) + { + var_02 = param_00.glowcolor; + } + else + { + var_02 = (0.3,0.6,0.3); + } + + var_03 = self.notifytitle; + if(isdefined(param_00.titletext)) + { + if(isdefined(param_00.titlelabel)) + { + self.notifytitle.label = param_00.titlelabel; + } + else + { + self.notifytitle.label = &""; + } + + if(isdefined(param_00.titlelabel) && !isdefined(param_00.titleisstring)) + { + self.notifytitle setvalue(param_00.titletext); + } + else + { + self.notifytitle settext(param_00.titletext); + } + + self.notifytitle setpulsefx(100,int(var_01 * 1000),1000); + self.notifytitle.glowcolor = var_02; + self.notifytitle.alpha = 1; + } + + if(isdefined(param_00.notifytext)) + { + if(isdefined(param_00.textlabel)) + { + self.notifytext.label = param_00.textlabel; + } + else + { + self.notifytext.label = &""; + } + + if(isdefined(param_00.textlabel) && !isdefined(param_00.textisstring)) + { + self.notifytext setvalue(param_00.notifytext); + } + else + { + self.notifytext settext(param_00.notifytext); + } + + self.notifytext setpulsefx(100,int(var_01 * 1000),1000); + self.notifytext.glowcolor = var_02; + self.notifytext.alpha = 1; + var_03 = self.notifytext; + } + + if(isdefined(param_00.notifytext2)) + { + self.notifytext2 maps\_hud_util::setparent(var_03); + if(isdefined(param_00.text2label)) + { + self.notifytext2.label = param_00.text2label; + } + else + { + self.notifytext2.label = &""; + } + + self.notifytext2 settext(param_00.notifytext2); + self.notifytext2 setpulsefx(100,int(var_01 * 1000),1000); + self.notifytext2.glowcolor = var_02; + self.notifytext2.alpha = 1; + var_03 = self.notifytext2; + } + + if(isdefined(param_00.iconname)) + { + self.notifyicon maps\_hud_util::setparent(var_03); + self.notifyicon setshader(param_00.iconname,60,60); + self.notifyicon.alpha = 0; + self.notifyicon fadeovertime(1); + self.notifyicon.alpha = 1; + waitrequirevisibility(var_01); + self.notifyicon fadeovertime(0.75); + self.notifyicon.alpha = 0; + } + else + { + waitrequirevisibility(var_01); + } + + self notify("notifyMessageDone"); + self.doingnotify = 0; +} + +//Function Number: 27 +resetoncancel() +{ + self notify("resetOnCancel"); + self endon("resetOnCancel"); + self endon("notifyMessageDone"); + self endon("disconnect"); + level waittill("cancel_notify"); + self.notifytitle.alpha = 0; + self.notifytext.alpha = 0; + self.notifyicon.alpha = 0; + self.doingnotify = 0; +} + +//Function Number: 28 +waitrequirevisibility(param_00) +{ + var_01 = 0.05; + while(!canreadtext()) + { + wait var_01; + } + + while(param_00 > 0) + { + wait var_01; + if(canreadtext()) + { + param_00 = param_00 - var_01; + } + } +} + +//Function Number: 29 +canreadtext() +{ + if(isflashbanged()) + { + return 0; + } + + return 1; +} + +//Function Number: 30 +isflashbanged() +{ + return isdefined(self.flashendtime) && gettime() < self.flashendtime; +} + +//Function Number: 31 +dispatchnotify(param_00) +{ + var_01 = self.splashqueue[param_00][0]; + for(var_02 = 1;var_02 < self.splashqueue[param_00].size;var_02++) + { + self.splashqueue[param_00][var_02 - 1] = self.splashqueue[param_00][var_02]; + } + + self.splashqueue[param_00][var_02 - 1] = undefined; + if(isdefined(var_01.name)) + { + actionnotify(var_01); + return; + } + + shownotifymessage(var_01); +} + +//Function Number: 32 +registerscoreinfo(param_00,param_01) +{ + level.scoreinfo[param_00]["value"] = param_01; +} + +//Function Number: 33 +getscoreinfovalue(param_00) +{ + return level.scoreinfo[param_00]["value"]; +} + +//Function Number: 34 +getrankinfominxp(param_00) +{ + return int(level.ranktable[param_00][2]); +} + +//Function Number: 35 +getrankinfoxpamt(param_00) +{ + return int(level.ranktable[param_00][3]); +} + +//Function Number: 36 +getrankinfomaxxp(param_00) +{ + return int(level.ranktable[param_00][7]); +} + +//Function Number: 37 +getrankinfofull(param_00) +{ + return tablelookupistring("sp/ranktable.csv",0,param_00,5); +} + +//Function Number: 38 +getrankinfoicon(param_00) +{ + return tablelookup("sp/rankTable.csv",0,param_00,6); +} + +//Function Number: 39 +getrank() +{ + var_00 = self.summary["rankxp"]; + var_01 = self.summary["rank"]; + if(var_00 < getrankinfominxp(var_01) + getrankinfoxpamt(var_01)) + { + return var_01; + } + + return getrankforxp(var_00); +} + +//Function Number: 40 +getrankforxp(param_00) +{ + var_01 = 0; + for(var_02 = level.ranktable[var_01][1];isdefined(var_02) && var_02 != "";var_02 = undefined) + { + if(param_00 < getrankinfominxp(var_01) + getrankinfoxpamt(var_01)) + { + return var_01; + } + + var_01++; + if(isdefined(level.ranktable[var_01])) + { + var_02 = level.ranktable[var_01][1]; + continue; + } + } + + var_01--; + return var_01; +} + +//Function Number: 41 +getrankxp() +{ + return self getplayerdata("experience"); +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_remotemissile.gsc b/MW3/PC/SP/maps/_remotemissile.gsc new file mode 100644 index 0000000..9ce09f8 --- /dev/null +++ b/MW3/PC/SP/maps/_remotemissile.gsc @@ -0,0 +1,1922 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_remotemissile.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 67 + * Decompile Time: 1130 ms + * Timestamp: 10/27/2023 2:20:55 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level.no_friendly_fire_splash_damage = 1; + if(!isdefined(level.min_time_between_uav_launches)) + { + level.min_time_between_uav_launches = 12000; + } + + if(!isdefined(level.remote_missile_targets)) + { + level.remote_missile_targets = []; + } + + level.last_uav_launch_time = 0 - level.min_time_between_uav_launches; + level.uav_radio_offline_called = 0; + precacheitem("remote_missile_detonator"); + if(isdefined(level.uav_missile_override)) + { + precacheitem(level.uav_missile_override); + } + else + { + precacheitem("remote_missile"); + } + + precacheshader("veh_hud_target"); + precacheshader("veh_hud_target_offscreen"); + precacheshader("veh_hud_missile_flash"); + precacheshader("ac130_overlay_grain"); + precacheshader("remotemissile_infantry_target"); + precacheshader("remotemissile_infantry_target_2plr"); + precacheshader("hud_fofbox_self_sp"); + precacheshader("dpad_killstreak_hellfire_missile_inactive"); + precachestring(&"HELLFIRE_DRONE_VIEW"); + precachestring(&"HELLFIRE_MISSILE_VIEW"); + precachestring(&"HELLFIRE_FIRE"); + level.remotemissile = spawnstruct(); + level.remotemissile.fov_is_altered = 4; + common_scripts\utility::flag_init("predator_missile_launch_allowed"); + common_scripts\utility::flag_set("predator_missile_launch_allowed"); + maps\_utility::add_hint_string("hint_predator_drone_destroyed",&"HELLFIRE_DESTROYED",::should_break_destroyed); + maps\_utility::add_hint_string("hint_predator_drone_4",&"HELLFIRE_USE_DRONE",::should_break_use_drone); + maps\_utility::add_hint_string("hint_predator_drone_2",&"HELLFIRE_USE_DRONE_2",::should_break_use_drone); + maps\_utility::add_hint_string("hint_predator_drone_not_available",&"HELLFIRE_DRONE_NOT_AVAILABLE",::should_break_available); + if(isdefined(level.remote_missile_grain_overlay) && level.remote_missile_grain_overlay) + { + visionsetmissilecam("missilecam"); + } + else if(!isdefined(level.var_3BDB)) + { + visionsetmissilecam("missilecam"); + } + else + { + visionsetmissilecam(level.var_3BDB); + } + + setsaveddvar("missileRemoteSpeedUp","1000"); + setsaveddvar("missileRemoteSpeedTargetRange","6000 12000"); + var_00 = getdvar("mapname"); + if(var_00 == "zzz") + { + } + else if(var_00 == "raymetest") + { + setsaveddvar("missileRemoteSpeedUp","500"); + setsaveddvar("missileRemoteSpeedTargetRange","3000 6000"); + } + + maps\_utility::add_global_spawn_function("axis",::missile_kill_ai); + common_scripts\utility::flag_init("uav_reloading"); + common_scripts\utility::flag_init("uav_collecting_stats"); + common_scripts\utility::flag_init("uav_enabled"); + common_scripts\utility::flag_set("uav_enabled"); + foreach(var_02 in level.players) + { + var_02 maps\_utility::ent_flag_init("controlling_UAV"); + } +} + +//Function Number: 2 +should_break_use_drone() +{ + var_00 = 0; + if(isdefined(level.uav_is_destroyed)) + { + var_00 = 1; + } + + var_01 = get_uav(); + if(!isalive(var_01)) + { + var_00 = 1; + } + + if(isdefined(self.var_3BDE)) + { + var_00 = 1; + } + + if(common_scripts\utility::flag_exist("wave_wiped_out") && common_scripts\utility::flag("wave_wiped_out")) + { + var_00 = 1; + } + + if(maps\_utility::ent_flag_exist("laststand_downed") && maps\_utility::ent_flag("laststand_downed")) + { + var_00 = 1; + } + + if(self getcurrentweapon() == "remote_missile_detonator") + { + var_00 = 1; + } + + if(common_scripts\utility::flag_exist("no_default_uav_hint") && common_scripts\utility::flag("no_default_uav_hint")) + { + var_00 = 1; + } + + return var_00; +} + +//Function Number: 3 +init_radio_dialogue() +{ + if(!isdefined(level.scr_radio)) + { + level.scr_radio = []; + } + + level.uav_radio_initialized = 1; + level.scr_radio["uav_reloading"] = "cont_cmt_rearmhellfires"; + level.scr_radio["uav_offline"] = "cont_cmt_hellfiresoffline"; + level.scr_radio["uav_online"] = "cont_cmt_hellfireonline"; + level.scr_radio["uav_online_repeat"] = "cont_cmt_repeatonline"; + level.scr_radio["uav_down"] = "cont_cmt_uavdown"; + level.scr_radio["uav_multi_kill"] = "cont_cmt_mutlipleconfirmed"; + level.scr_radio["uav_multi_kill2"] = "cont_cmt_fivepluskias"; + level.scr_radio["uav_few_kills"] = "cont_cmt_theyredown"; + level.scr_radio["uav_3_kills"] = "cont_cmt_3kills"; + level.scr_radio["uav_1_kill"] = "cont_cmt_hesdown"; + level.scr_radio["uav_btr_kill"] = "cont_cmt_mutlipleconfirmed"; + level.scr_radio["uav_few_kills"] = "cont_cmt_theyredown"; + level.scr_radio["uav_3_kills"] = "cont_cmt_3kills"; + level.scr_radio["uav_1_kill"] = "cont_cmt_hesdown"; + level.scr_radio["uav_multi_vehicle_kill"] = "cont_cmt_goodhitvehicles"; + level.scr_radio["uav_multi_vehicle_kill2"] = "cont_cmt_goodeffectkia"; + level.scr_radio["uav_helo_kill"] = "cont_cmt_directhitshelo"; + level.scr_radio["uav_btr_kill"] = "cont_cmt_btrdestroyed"; + level.scr_radio["uav_truck_kill"] = "cont_cmt_goodkilltruck"; + level.scr_radio["uav_jeep_kill"] = "cont_cmt_directhitjeep"; + level.scr_radio["uav_direct_hit"] = "cont_cmt_directhit"; +} + +//Function Number: 4 +is_radio_defined(param_00) +{ + return isdefined(level.scr_radio[param_00]) || isdefined(level.scr_radio[param_00 + "_variant"]); +} + +//Function Number: 5 +should_break_available() +{ + if(isdefined(level.uav_is_not_available)) + { + return 0; + } + + return 1; +} + +//Function Number: 6 +should_break_destroyed() +{ + if(isdefined(level.uav_is_destroyed)) + { + return 0; + } + + return 1; +} + +//Function Number: 7 +enable_uav(param_00,param_01) +{ + if(!isdefined(param_00)) + { + param_00 = 1; + } + + if(!common_scripts\utility::flag("uav_enabled")) + { + common_scripts\utility::flag_set("uav_enabled"); + if(!common_scripts\utility::flag("uav_reloading") && param_00) + { + thread remotemissile_radio("uav_online"); + } + } + + if(isdefined(param_01)) + { + restore_uav_weapon(param_01); + } +} + +//Function Number: 8 +disable_uav(param_00,param_01) +{ + if(!isdefined(param_00)) + { + param_00 = 1; + } + + if(common_scripts\utility::flag("uav_enabled")) + { + common_scripts\utility::flag_clear("uav_enabled"); + if(!common_scripts\utility::flag("uav_reloading") && param_00) + { + thread remotemissile_radio("uav_offline"); + } + } + + if(isdefined(param_01)) + { + remove_uav_weapon(); + } +} + +//Function Number: 9 +restore_uav_weapon(param_00) +{ + if(isdefined(level.uav_is_destroyed)) + { + return; + } + + if(isstring(param_00)) + { + var_01 = param_00; + } + else if(isdefined(self.uav_weaponname)) + { + var_01 = self.uav_weaponname; + } + else + { + return; + } + + if(!self hasweapon(var_01)) + { + return; + } + + self setweaponhudiconoverride("actionslot" + get_remotemissile_actionslot(),"none"); + self setactionslot(get_remotemissile_actionslot(),"weapon",var_01); +} + +//Function Number: 10 +remove_uav_weapon() +{ + self setweaponhudiconoverride("actionslot" + get_remotemissile_actionslot(),"dpad_killstreak_hellfire_missile_inactive"); + self setactionslot(get_remotemissile_actionslot(),""); +} + +//Function Number: 11 +is_remote_missile_weapon(param_00) +{ + if(!isdefined(param_00)) + { + return 0; + } + + if(param_00 == "remote_missile_detonator") + { + return 1; + } + + if(param_00 == "remote_missile_detonator_finite") + { + return 1; + } + + return 0; +} + +//Function Number: 12 +give_remotemissile_weapon(param_00) +{ + set_remotemissile_actionslot(); + self setactionslot(get_remotemissile_actionslot(),"weapon",param_00); + self giveweapon(param_00); + thread maps\_remotemissile_utility::remotemissile_with_autoreloading(); +} + +//Function Number: 13 +set_remotemissile_actionslot() +{ + if(!self hasweapon("claymore")) + { + self.remotemissile_actionslot = 4; + return; + } + + self.remotemissile_actionslot = 2; +} + +//Function Number: 14 +get_remotemissile_actionslot() +{ + return self.remotemissile_actionslot; +} + +//Function Number: 15 +has_uav_rigs() +{ + if(!isdefined(self.var_3BF0)) + { + return 0; + } + + return self.var_3BF0.size > 1; +} + +//Function Number: 16 +remotemissile_weapon_change(param_00) +{ + self.using_uav = 0; + for(;;) + { + self waittill("weapon_change",var_01); + if(is_remote_missile_weapon(var_01)) + { + self.using_uav = 1; + if(isdefined(level.uav_is_destroyed)) + { + thread remotemissile_offline(0,"uav_down"); + self switchtoweapon(self.last_weapon); + self.using_uav = 0; + continue; + } + + if(maps\_utility::ent_flag_exist("laststand_downed") && maps\_utility::ent_flag("laststand_downed")) + { + switchbacktomainweapon(); + self.using_uav = 0; + continue; + } + + if(maps\_utility::ent_flag_exist("player_has_red_flashing_overlay") && maps\_utility::ent_flag("player_has_red_flashing_overlay")) + { + switchbacktomainweapon(); + self.using_uav = 0; + continue; + } + + if(maps\_utility::is_survival() && isdefined(level.uav_user) && level.uav_user != self) + { + thread maps\_utility::radio_dialogue("so_hq_uav_busy"); + switchbacktomainweapon(); + self.using_uav = 0; + continue; + } + + self.uav_weaponname = var_01; + thread cancel_on_player_damage(); + if(isdefined(level.remote_missile_hide_stuff_func)) + { + [[ level.remote_missile_hide_stuff_func ]](); + } + + maps\_audio::aud_send_msg("player_UAV_use"); + level.uav_user = self; + level.uav_killstats = []; + uavremotelaunchersequence(self,var_01); + level.uav_user = undefined; + self.using_uav = 0; + if(isdefined(level.remotemissile_global_post_launch_func)) + { + [[ level.remotemissile_global_post_launch_func ]](); + } + + if(isdefined(param_00)) + { + thread [[ param_00 ]](); + } + } + } +} + +//Function Number: 17 +remotemissile_track_current_weapon() +{ + self endon("death"); + self.last_weapon = self getcurrentweapon(); + for(;;) + { + self waittill("weapon_change",var_00); + if(!is_remote_missile_weapon(var_00)) + { + self.last_weapon = var_00; + } + } +} + +//Function Number: 18 +remotemissile_player_input(param_00) +{ + self notifyonplayercommand("switch_to_remotemissile","+actionslot " + get_remotemissile_actionslot()); + thread remotemissile_weapon_change(param_00); + thread remotemissile_track_current_weapon(); + for(;;) + { + self waittill("switch_to_remotemissile"); + if(self.using_uav) + { + continue; + } + + if(!is_remote_missile_weapon(self getcurrentweapon())) + { + self.last_weapon = self getcurrentweapon(); + } + + if(isdefined(level.uav_is_destroyed)) + { + thread remotemissile_offline(0,"uav_down"); + continue; + } + + if(common_scripts\utility::flag("uav_reloading") || !common_scripts\utility::flag("uav_enabled")) + { + thread remotemissile_offline(1); + } + } +} + +//Function Number: 19 +remotemissile_offline(param_00,param_01) +{ + if(!isdefined(param_01)) + { + param_01 = "uav_offline"; + } + + var_02 = gettime(); + if((param_00 && level.last_uav_launch_time + level.min_time_between_uav_launches - var_02 < 2000) || level.min_time_between_uav_launches < 5000) + { + if(!isdefined(level.uav_is_destroyed) && isdefined(self.uav_weaponname) && self getweaponammoclip(self.uav_weaponname) > 0) + { + return; + } + } + + if(common_scripts\utility::flag("uav_reloading")) + { + if(isdefined(level.scr_radio["uav_reloading"])) + { + param_01 = "uav_reloading"; + } + } + + if(!common_scripts\utility::flag("uav_collecting_stats") && !level.uav_radio_offline_called) + { + level.uav_radio_offline_called = 1; + remotemissile_radio(param_01); + level.uav_radio_offline_called = 0; + } +} + +//Function Number: 20 +remotemissile_radio_reminder() +{ + level notify("stop_remotemissile_radio_reminder"); + level endon("special_op_terminated"); + level endon("starting_predator_drone_control"); + level endon("stop_remotemissile_radio_reminder"); + for(;;) + { + wait 7 + randomint(4); + if(common_scripts\utility::flag_exist("special_op_terminated") && common_scripts\utility::flag("special_op_terminated")) + { + return; + } + + if(isdefined(level.uav_is_destroyed)) + { + return; + } + + if(common_scripts\utility::flag("uav_reloading")) + { + return; + } + + if(!common_scripts\utility::flag("uav_enabled")) + { + return; + } + + remotemissile_radio("uav_online_repeat"); + wait 15 + randomint(10); + if(common_scripts\utility::flag_exist("special_op_terminated") && common_scripts\utility::flag("special_op_terminated")) + { + return; + } + + if(isdefined(level.uav_is_destroyed)) + { + return; + } + + if(isdefined(level.no_remote_missile_reminders)) + { + return; + } + + remotemissile_radio("uav_online"); + thread maps\_utility::display_hint_timeout("hint_predator_drone_" + get_remotemissile_actionslot(),6); + } +} + +//Function Number: 21 +play_kills_dialogue() +{ + if(isdefined(level.dont_use_global_uav_kill_dialog)) + { + return; + } + + if(!isdefined(level.uav_radio_initialized)) + { + return; + } + + var_00 = undefined; + var_01 = 0; + if(isdefined(level.uav_killstats["ai"])) + { + var_01 = level.uav_killstats["ai"]; + } + + if(var_01 > 5) + { + var_00 = "uav_multi_kill"; + if(is_radio_defined("uav_multi_kill2") && common_scripts\utility::cointoss()) + { + var_00 = "uav_multi_kill2"; + } + } + else if(var_01 >= 3) + { + var_00 = "uav_3_kills"; + } + else if(var_01 > 1) + { + var_00 = "uav_few_kills"; + } + else if(var_01 > 0) + { + var_00 = "uav_1_kill"; + } + + var_02 = undefined; + var_03 = 0; + var_04 = 0; + var_03 = 0; + var_05 = 0; + var_06 = 0; + var_07 = 0; + foreach(var_0A, var_09 in level.uav_killstats) + { + if(var_0A == "ai") + { + continue; + } + + if(var_09 > 0) + { + var_04 = var_04 + var_09; + if(var_0A == "btr") + { + var_03 = var_09; + continue; + } + + if(var_0A == "helo") + { + var_05 = var_09; + continue; + } + + if(var_0A == "jeep") + { + var_06 = var_09; + continue; + } + + if(var_0A == "truck") + { + var_07 = var_09; + } + } + } + + var_0B = var_00; + if(var_03 > 0) + { + var_0B = "uav_btr_kill"; + } + else if(var_05 > 0) + { + var_0B = "uav_helo_kill"; + } + else if(var_04 > 1) + { + var_0B = "uav_multi_vehicle_kill"; + if(is_radio_defined("uav_multi_vehicle_kill2") && common_scripts\utility::cointoss()) + { + var_0B = "uav_multi_vehicle_kill2"; + } + } + else if(var_06 > 0) + { + var_0B = "uav_jeep_kill"; + if(var_01 > 2 && var_01 <= 5 && is_radio_defined("uav_direct_hit") && common_scripts\utility::cointoss()) + { + var_0B = "uav_direct_hit"; + } + } + else if(var_07 > 0) + { + var_0B = "uav_truck_kill"; + if(var_01 > 2 && var_01 <= 5 && is_radio_defined("uav_direct_hit") && common_scripts\utility::cointoss()) + { + var_0B = "uav_direct_hit"; + } + } + + if(!isdefined(var_0B)) + { + return; + } + + if(common_scripts\utility::flag_exist("special_op_terminated") && common_scripts\utility::flag("special_op_terminated")) + { + return; + } + + remotemissile_radio(var_0B); + level notify("remote_missile_kill_dialogue"); +} + +//Function Number: 22 +set_variant_remotemissile_radio(param_00) +{ + if(isdefined(level.scr_radio[param_00 + "_variant"]) && isarray(level.scr_radio[param_00 + "_variant"])) + { + level.scr_radio[param_00] = level.scr_radio[param_00 + "_variant"][randomint(level.scr_radio[param_00 + "_variant"].size)]; + } +} + +//Function Number: 23 +remotemissile_radio(param_00) +{ + if(!isdefined(level.uav_radio_initialized)) + { + return; + } + + if(isdefined(level.uav_radio_disabled) && level.uav_radio_disabled) + { + return; + } + + if(!is_radio_defined(param_00)) + { + return; + } + + if(common_scripts\utility::flag_exist("special_op_terminated") && common_scripts\utility::flag("special_op_terminated")) + { + return; + } + + set_variant_remotemissile_radio(param_00); + maps\_utility::radio_dialogue(param_00); +} + +//Function Number: 24 +cancel_on_player_damage() +{ + self endon("exiting_uav_control"); + self.took_damage = 0; + if(maps\_utility::is_survival()) + { + common_scripts\utility::waittill_any("player_has_red_flashing_overlay","player_downed","dtest","force_out_of_uav"); + } + else + { + common_scripts\utility::waittill_any("damage","dtest","force_out_of_uav"); + } + + self.took_damage = 1; + maps\_audio::aud_send_msg("abort_UAV_control"); +} + +//Function Number: 25 +text_titlecreate() +{ + level.text1 = maps\_hud_util::createclientfontstring("objective",2); + var_00 = -175; + if(maps\_utility::is_survival()) + { + var_00 = -150; + if(issplitscreen()) + { + var_00 = -110; + } + } + + level.text1 maps\_hud_util::setpoint("CENTER",undefined,0,var_00); +} + +//Function Number: 26 +text_titlesettext(param_00) +{ + level.text1 settext(param_00); +} + +//Function Number: 27 +text_titlefadeout() +{ + level.text1 fadeovertime(0.25); + level.text1.alpha = 0; +} + +//Function Number: 28 +text_titledestroy() +{ + if(!isdefined(level.text1)) + { + return; + } + + level.text1 destroy(); + level.text1 = undefined; +} + +//Function Number: 29 +display_wait_to_fire(param_00) +{ + text_noticedestroy(); + text_labelcreate(&"HELLFIRE_RELOADING_WITH_TIME",param_00); + wait 1; + text_noticedestroy(); +} + +//Function Number: 30 +text_labelcreate(param_00,param_01) +{ + level.text2 = maps\_hud_util::createclientfontstring("objective",1.85); + level.text2 maps\_hud_util::setpoint("CENTER",undefined,0,-120); + level.text2.label = param_00; + level.text2 setvalue(param_01); + level.text2.color = (0.85,0.85,0.85); + level.text2.alpha = 0.75; +} + +//Function Number: 31 +text_noticecreate(param_00) +{ + level.text2 = maps\_hud_util::createclientfontstring("objective",1.85); + level.text2 maps\_hud_util::setpoint("CENTER",undefined,0,-120); + level.text2 settext(param_00); + level.text2.color = (0.85,0.85,0.85); + level.text2.alpha = 0.75; +} + +//Function Number: 32 +text_noticefadeout() +{ + if(!isdefined(level.text2)) + { + return; + } + + level.text2 fadeovertime(0.25); + level.text2.alpha = 0; +} + +//Function Number: 33 +text_noticedestroy() +{ + if(!isdefined(level.text2)) + { + return; + } + + level.text2 destroy(); + level.text2 = undefined; +} + +//Function Number: 34 +waitwithabortondamage(param_00) +{ + var_01 = gettime() + param_00 * 1000; + while(gettime() < var_01) + { + if(self.took_damage) + { + return 0; + } + + if(isdefined(level.uav_is_destroyed)) + { + return 0; + } + + if(self usebuttonpressed()) + { + return 0; + } + + if(!common_scripts\utility::flag("uav_enabled")) + { + return 0; + } + + wait 0.05; + } + + return 1; +} + +//Function Number: 35 +notifyonmissiledeath(param_00,param_01) +{ + var_02 = gettime(); + level.remotemissilefiretime = var_02; + if(isdefined(param_00)) + { + level.var_3C11 = param_00; + param_00 waittill("death"); + } + + param_01 maps\_utility::delaythread(0.1,::holdstancechange,1); + param_01.active_uav_missile = undefined; + if(isdefined(level.remotemissilefiretime) && level.remotemissilefiretime == var_02) + { + level notify("remote_missile_exploded"); + param_01 notify("remote_missile_exploded"); + level.var_3C11 = undefined; + } + + level maps\_utility::delaythread(0.2,::maps\_utility::send_notify,"delayed_remote_missile_exploded"); +} + +//Function Number: 36 +abortlaptopswitch(param_00) +{ + param_00 maps\_utility::ent_flag_clear("controlling_UAV"); + param_00 notify("exiting_uav_control"); + maps\_audio::aud_send_msg("abort_UAV_control"); + param_00 visionsetnakedforplayer(level.var_13EE,0.5); + if(isdefined(level.remote_missile_grain_overlay) && level.remote_missile_grain_overlay) + { + param_00 visionsetthermalforplayer(level.visionthermaldefault,0.5); + } + else if(isdefined(maps\_utility::get_vision_set_fog(level.var_13EE))) + { + param_00 maps\_utility::fog_set_changes(level.var_13EE,0.5); + } + + param_00 switchbacktomainweapon(); + param_00 freezecontrols(0); + if(!maps\_utility::is_player_down(param_00)) + { + param_00 enableoffhandweapons(); + } + + param_00 maps\_utility::delaythread(0.1,::holdstancechange,1); + level.uavtargetent = undefined; + wait 0.1; + huditemsshow(); +} + +//Function Number: 37 +holdstancechange(param_00) +{ + if(!param_00) + { + var_01 = self getstance(); + if(var_01 != "prone") + { + self allowprone(param_00); + } + + if(var_01 != "crouch") + { + self allowcrouch(param_00); + } + + if(var_01 != "stand") + { + self allowstand(param_00); + return; + } + + return; + } + + self allowprone(param_00); + self allowcrouch(param_00); + self allowstand(param_00); +} + +//Function Number: 38 +uavremotelaunchersequence(param_00,param_01) +{ + if(param_01 == "remote_missile_detonator") + { + param_00 givemaxammo(param_01); + } + + level notify("starting_predator_drone_control"); + param_00 notify("starting_predator_drone_control"); + var_02 = 0; + var_03 = 0; + level.vision_black = "black_bw"; + if(!isdefined(level.var_3BDB)) + { + level.var_3BDB = "ac130"; + } + + level.vision_missile = "missilecam"; + param_00 disableoffhandweapons(); + param_00 freezecontrols(1); + param_00 holdstancechange(0); + param_00 maps\_utility::ent_flag_set("controlling_UAV"); + var_04 = param_00 waitwithabortondamage(1); + if(!var_04) + { + abortlaptopswitch(param_00); + return; + } + + var_05 = 0.25; + param_00 visionsetnakedforplayer(level.vision_black,var_05); + if(isdefined(level.remote_missile_grain_overlay) && level.remote_missile_grain_overlay) + { + param_00 visionsetthermalforplayer(level.vision_black,var_05); + } + + huditemshide(); + var_04 = waitwithabortondamage(var_05); + if(!var_04) + { + abortlaptopswitch(param_00); + return; + } + + param_00.is_controlling_uav = 1; + level notify("player_is_controlling_UAV"); + param_00 notify("player_is_controlling_UAV"); + var_06 = param_00 get_uav(); + if(isdefined(var_06)) + { + if(maps\_utility::is_specialop()) + { + var_06 hideonclient(self); + } + else + { + var_06 hide(); + } + } + + var_07 = maps\_remotemissile_utility::player_uav_rig(); + if(!maps\_remotemissile_utility::remotemissile_move_player()) + { + param_00 playerlinkweaponviewtodelta(var_07,"tag_player",1,level.remotemissile.fov_is_altered,level.remotemissile.fov_is_altered,level.remotemissile.fov_is_altered,level.remotemissile.fov_is_altered); + var_08 = var_07 gettagangles("tag_origin"); + param_00 setplayerangles(var_08); + } + else + { + param_00.old_origin = param_00.origin; + param_00.old_angles = param_00 getplayerangles(); + param_00 playerlinktodelta(maps\_remotemissile_utility::player_uav_rig(),"tag_player",1,level.remotemissile.fov_is_altered,level.remotemissile.fov_is_altered,level.remotemissile.fov_is_altered,level.remotemissile.fov_is_altered); + param_00 playerlinktodelta(maps\_remotemissile_utility::player_uav_rig(),"tag_player",1,0,0,0,0); + param_00 maps\_utility::delaythread(0.1,::open_view_cone); + } + + param_00 freezecontrols(0); + param_00 hideviewmodel(); + wait 0.05; + if(isdefined(level.var_3C1C)) + { + param_00 [[ level.var_3C1C ]](); + } + else + { + param_00 text_titlecreate(); + text_titlesettext(&"HELLFIRE_DRONE_VIEW"); + } + + if(isdefined(level.remote_missile_grain_overlay) && level.remote_missile_grain_overlay) + { + maps\_load::thermal_effectson(); + param_00 thermalvisionon(); + param_00 visionsetthermalforplayer(level.var_3BDB,0.25); + param_00 visionsetnakedforplayer(level.var_13EE,0.25); + } + else + { + if(isdefined(maps\_utility::get_vision_set_fog(level.var_3BDB))) + { + param_00 maps\_utility::fog_set_changes(level.var_3BDB,0.25); + } + + param_00 visionsetnakedforplayer(level.var_3BDB,0.25); + } + + thread drawtargetsstart(); + wait 0.2; + var_09 = waitforattackcommand(param_00); + if(!var_09) + { + exitfromcamera_uav(param_00,param_00.took_damage); + return; + } + + level.last_uav_launch_time = gettime(); + thread uav_reload(); + level notify("player_fired_remote_missile"); + param_00 notify("player_fired_remote_missile"); + var_0A = firemissilefromuavplayer(param_00); + var_0A thread do_physics_impact_on_explosion(param_00); + var_0A thread flash_for_explosion_early(param_00); + if(var_02) + { + param_00 text_noticecreate(&"HELLFIRE_FIRE"); + var_04 = waitwithabortondamage(1.2); + if(!var_04) + { + exitfromcamera_uav(param_00,1); + return; + } + + text_noticefadeout(); + drawtargetsend(); + wait 0.25; + } + + param_00.var_3BDE = 1; + if(isdefined(level.vision_uav)) + { + param_00 [[ level.vision_uav ]](0); + } + else + { + text_titlesettext(&"HELLFIRE_MISSILE_VIEW"); + text_noticedestroy(); + } + + switchbacktomainweaponfast(); + param_00 remotecamerasoundscapeon(); + param_00 unlink(); + param_00 disableweapons(); + if(isdefined(level.var_3C1E)) + { + param_00 cameralinkto(var_0A,level.var_3C1E); + } + else + { + param_00 cameralinkto(var_0A,"tag_origin"); + } + + param_00 controlslinkto(var_0A); + var_04 = waitwithabortondamage(0.2); + if(!var_04) + { + exitfromcamera_missile(param_00,1); + return; + } + + if(isdefined(level.remote_missile_detonate_height)) + { + param_00 [[ level.remote_missile_detonate_height ]](var_0A); + } + + thread drawtargetsstart(); + while(isdefined(level.var_3C11)) + { + wait 0.05; + if(isdefined(level.uav_is_destroyed)) + { + exitfromcamera_missile(param_00,1); + return; + } + + if(param_00.took_damage) + { + exitfromcamera_missile(param_00,1); + return; + } + + if(!common_scripts\utility::flag("uav_enabled")) + { + exitfromcamera_missile(param_00,1); + return; + } + } + + if(!isdefined(var_06)) + { + exitfromcamera_missile(param_00,0); + return; + } + + if(var_03) + { + setsaveddvar("cg_fov",26); + param_00.var_3C20 = 1; + param_00.var_3BDE = undefined; + param_00 controlsunlink(); + param_00 cameraunlink(); + param_00 remotecamerasoundscapeoff(); + param_00 playerlinkweaponviewtodelta(maps\_remotemissile_utility::player_uav_rig(),"tag_player",1,level.remotemissile.fov_is_altered,level.remotemissile.fov_is_altered,level.remotemissile.fov_is_altered,level.remotemissile.fov_is_altered); + param_00 setplayerangles(maps\_remotemissile_utility::player_uav_rig() gettagangles("tag_origin")); + var_04 = waitwithabortondamage(2); + if(!var_04) + { + exitfromcamera_uav(param_00,param_00.took_damage); + return; + } + + exitfromcamera_uav(param_00,0); + return; + } + + exitfromcamera_missile(param_00,0); +} + +//Function Number: 39 +uav_reload() +{ + level endon("stop_uav_reload"); + common_scripts\utility::flag_set("uav_reloading"); + wait level.min_time_between_uav_launches * 0.001; + common_scripts\utility::flag_clear("uav_reloading"); +} + +//Function Number: 40 +flash_for_explosion_early(param_00) +{ + param_00 waittill("predicted_projectile_impact",var_01,var_02); + param_00 visionsetnakedforplayer("coup_sunblind",0); +} + +//Function Number: 41 +do_physics_impact_on_explosion(param_00) +{ + param_00.var_3C24 = 1; + param_00 waittill("projectile_impact",var_01,var_02,var_03); + level thread missile_kills(param_00); + level.var_3C25 = var_02; + var_04 = 1000; + var_05 = 6; + earthquake(0.3,1.4,var_02,8000); + maps\_audio::aud_send_msg("remote_missle_impact",var_02); + wait 0.1; + physicsexplosionsphere(var_02,var_04,var_04 / 2,var_05); + wait 2; + level.var_3C25 = undefined; + param_00.var_3C24 = undefined; +} + +//Function Number: 42 +missile_kills(param_00) +{ + common_scripts\utility::flag_set("uav_collecting_stats"); + var_01 = maps\_utility::getvehiclearray(); + foreach(var_03 in var_01) + { + var_03 thread missile_kill_vehicle(param_00); + } + + wait 1; + common_scripts\utility::flag_clear("uav_collecting_stats"); +} + +//Function Number: 43 +missile_kill_ai(param_00) +{ + if(!isdefined(level.uav_radio_initialized)) + { + return; + } + + self waittill("death",param_00,var_01); + if(!isdefined(level.uav_user)) + { + return; + } + + if(!isdefined(level.uav_killstats["ai"])) + { + level.uav_killstats["ai"] = 0; + } + + if(isdefined(param_00) && isdefined(level.uav_user)) + { + if(param_00 == level.uav_user || isdefined(param_00.attacker) && param_00.attacker == level.uav_user) + { + level.uav_killstats["ai"]++; + } + } +} + +//Function Number: 44 +missile_kill_vehicle(param_00) +{ + if(!isdefined(level.uav_radio_initialized)) + { + return; + } + + level endon("delayed_remote_missile_exploded"); + var_01 = undefined; + switch(self.vehicletype) + { + case "btr80_physics": + case "btr80": + var_01 = "btr"; + break; + + case "mi17_bulletdamage": + case "ucav": + case "mi17_noai": + case "mi17": + case "hind": + var_01 = "helo"; + break; + + case "uaz_physics": + case "uaz": + var_01 = "jeep"; + break; + + case "bm21_drivable": + case "bm21": + case "bm21_troops": + var_01 = "truck"; + break; + + default: + var_01 = "vehicle"; + break; + } + + if(!isdefined(level.uav_killstats[var_01])) + { + level.uav_killstats[var_01] = 0; + } + + self waittill("death",var_02,var_03); + if(var_01 == "helo" || var_01 == "btr" || isdefined(self.riders) && self.riders.size > 0) + { + if(isdefined(var_02) && var_02 == param_00) + { + level.uav_killstats[var_01]++; + } + } +} + +//Function Number: 45 +get_current_uav_rig() +{ + var_00 = self.var_3BF0[self.var_3C2A]; + return var_00; +} + +//Function Number: 46 +get_uav() +{ + if(!isdefined(self.var_3BF0)) + { + return level.uav; + } + + if(!isdefined(self.var_3C2A)) + { + self.var_3C2A = 0; + } + + var_00 = get_current_uav_rig(); + return var_00.uav; +} + +//Function Number: 47 +exitfromcamera_missile(param_00,param_01) +{ + param_00.var_3BDE = undefined; + if(isdefined(level.vision_uav)) + { + param_00 [[ level.vision_uav ]](1); + } + else + { + text_titledestroy(); + } + + drawtargetsend(); + if(isdefined(level.uav_is_destroyed)) + { + thread staticeffect(0.5); + } + + param_00 controlsunlink(); + param_00 cameraunlink(); + if(isdefined(level.remote_missile_grain_overlay) && level.remote_missile_grain_overlay) + { + maps\_load::thermal_effectsoff(); + param_00 thermalvisionoff(); + param_00 visionsetthermalforplayer(level.visionthermaldefault,0); + } + + param_00 remotecamerasoundscapeoff(); + var_02 = param_00 get_uav(); + if(isdefined(var_02)) + { + if(maps\_utility::is_specialop()) + { + var_02 showonclient(self); + } + else + { + var_02 show(); + } + } + + if(param_01) + { + param_00 visionsetnakedforplayer(level.vision_black,0); + wait 0.05; + param_00 visionsetnakedforplayer(level.var_13EE,0.4); + if(!isdefined(level.remote_missile_grain_overlay) && level.remote_missile_grain_overlay) + { + if(isdefined(maps\_utility::get_vision_set_fog(level.var_13EE))) + { + param_00 maps\_utility::fog_set_changes(level.var_13EE,0.4); + } + } + + if(!maps\_utility::is_player_down(param_00)) + { + param_00 enableweapons(); + } + + param_00 freezecontrols(0); + param_00 showviewmodel(); + wait 0.2; + huditemsshow(); + if(!maps\_utility::is_player_down(param_00)) + { + param_00 enableoffhandweapons(); + } + } + else + { + param_00 visionsetnakedforplayer("coup_sunblind",0); + param_00 freezecontrols(1); + wait 0.05; + param_00 visionsetnakedforplayer(level.var_13EE,1); + if(!isdefined(level.remote_missile_grain_overlay) && level.remote_missile_grain_overlay) + { + if(isdefined(maps\_utility::get_vision_set_fog(level.var_13EE))) + { + param_00 maps\_utility::fog_set_changes(level.var_13EE,1); + } + } + + if(!maps\_utility::is_player_down(param_00)) + { + param_00 enableweapons(); + } + + param_00 showviewmodel(); + wait 0.5; + huditemsshow(); + if(!maps\_utility::is_player_down(param_00)) + { + param_00 enableoffhandweapons(); + } + + param_00 freezecontrols(0); + } + + param_00 notify("exiting_uav_control"); + param_00.is_controlling_uav = undefined; + level.uavtargetent = undefined; +} + +//Function Number: 48 +exitfromcamera_uav(param_00,param_01) +{ + maps\_audio::aud_send_msg("abort_UAV_control"); + drawtargetsend(); + if(isdefined(level.uav_rigs)) + { + param_00 [[ level.uav_rigs ]](0); + } + else + { + text_titlefadeout(); + text_noticefadeout(); + } + + param_00 visionsetnakedforplayer(level.vision_black,0.25); + if(isdefined(level.remote_missile_grain_overlay) && level.remote_missile_grain_overlay) + { + param_00 visionsetthermalforplayer(level.vision_black,0.25); + } + + if(isdefined(level.uav_is_destroyed)) + { + param_00 thread staticeffect(0.5); + } + + wait 0.15; + wait 0.35; + if(isdefined(level.uav_rigs)) + { + param_00 [[ level.uav_rigs ]](1); + } + else + { + text_titledestroy(); + text_noticedestroy(); + } + + param_00 unlink(); + if(isdefined(level.remote_missile_grain_overlay) && level.remote_missile_grain_overlay) + { + param_00 visionsetthermalforplayer(level.visionthermaldefault,0); + maps\_load::thermal_effectsoff(); + param_00 thermalvisionoff(); + } + + if(isdefined(param_00.var_3C20)) + { + setsaveddvar("cg_fov",65); + } + + var_02 = param_00 get_uav(); + if(isdefined(var_02)) + { + if(maps\_utility::is_specialop()) + { + var_02 showonclient(self); + } + else + { + var_02 show(); + } + } + + if(param_01) + { + param_00 switchbacktomainweaponfast(); + param_00 freezecontrols(1); + wait 0.15; + param_00 visionsetnakedforplayer(level.var_13EE,0.4); + if(!isdefined(level.remote_missile_grain_overlay) && level.remote_missile_grain_overlay) + { + if(isdefined(maps\_utility::get_vision_set_fog(level.var_13EE))) + { + param_00 maps\_utility::fog_set_changes(level.var_13EE,0.4); + } + } + + if(!maps\_utility::is_player_down(param_00)) + { + param_00 enableweapons(); + } + + param_00 showviewmodel(); + wait 0.1; + huditemsshow(); + if(!maps\_utility::is_player_down(param_00)) + { + param_00 enableoffhandweapons(); + } + + param_00 freezecontrols(0); + } + else + { + param_00 freezecontrols(1); + wait 0.05; + param_00 visionsetnakedforplayer(level.var_13EE,0.75); + if(!isdefined(level.remote_missile_grain_overlay) && level.remote_missile_grain_overlay) + { + if(isdefined(maps\_utility::get_vision_set_fog(level.var_13EE))) + { + param_00 maps\_utility::fog_set_changes(level.var_13EE,0.75); + } + } + + if(!maps\_utility::is_player_down(param_00)) + { + param_00 enableweapons(); + } + + param_00 showviewmodel(); + wait 0.5; + huditemsshow(); + param_00 switchbacktomainweapon(); + if(!maps\_utility::is_player_down(param_00)) + { + param_00 enableoffhandweapons(); + } + + param_00 freezecontrols(0); + } + + param_00 maps\_utility::delaythread(0.1,::holdstancechange,1); + param_00 notify("exiting_uav_control"); + param_00.is_controlling_uav = undefined; + level.uavtargetent = undefined; +} + +//Function Number: 49 +waitforattackcommand(param_00) +{ + param_00 notifyonplayercommand("abort_remote_missile","weapnext"); + param_00 notifyonplayercommand("abort_remote_missile","+stance"); + if(!level.console) + { + param_00 notifyonplayercommand("abort_remote_missile","+gostand"); + param_00 notifyonplayercommand("abort_remote_missile","togglecrouch"); + param_00 notifyonplayercommand("abort_remote_missile","toggleprone"); + } + + param_00 notifyonplayercommand("launch_remote_missile","+attack"); + param_00 notifyonplayercommand("launch_remote_missile","+attack_akimbo_accessible"); + param_00 thread wait_for_other(); + param_00 thread wait_for_command_thread("abort_remote_missile","abort"); + if(common_scripts\utility::flag("predator_missile_launch_allowed")) + { + param_00 thread wait_for_command_thread("launch_remote_missile","launch"); + } + + param_00 waittill("remote_missile_attack",var_01); + param_00 maps\_utility::ent_flag_clear("controlling_UAV"); + if(var_01 == "launch") + { + return 1; + } + + return 0; +} + +//Function Number: 50 +wait_for_command_thread(param_00,param_01) +{ + self endon("remote_missile_attack"); + self waittill(param_00); + self notify("remote_missile_attack",param_01); +} + +//Function Number: 51 +wait_for_other() +{ + self endon("remote_missile_attack"); + for(;;) + { + wait 0.05; + if(self.took_damage) + { + break; + } + + if(!common_scripts\utility::flag("uav_enabled")) + { + break; + } + + if(isdefined(level.uav_is_destroyed)) + { + break; + } + } + + self notify("remote_missile_attack","abort"); +} + +//Function Number: 52 +huditemshide() +{ + if(level.players.size > 0) + { + for(var_00 = 0;var_00 < level.players.size;var_00++) + { + if(isdefined(level.players[var_00].using_uav) && level.players[var_00].using_uav) + { + setdvar("ui_remotemissile_playernum",var_00 + 1); + } + } + + return; + } + + setsaveddvar("compass","0"); + setsaveddvar("ammoCounterHide","1"); + setsaveddvar("actionSlotsHide","1"); +} + +//Function Number: 53 +huditemsshow() +{ + if(level.players.size > 0) + { + setdvar("ui_remotemissile_playernum",0); + return; + } + + setsaveddvar("compass","1"); + setsaveddvar("ammoCounterHide","0"); + setsaveddvar("actionSlotsHide","0"); +} + +//Function Number: 54 +firemissilefromuavplayer(param_00) +{ + earthquake(0.25,0.5,maps\_remotemissile_utility::player_uav_rig().origin,5000); + var_01 = maps\_remotemissile_utility::player_uav_rig().origin; + var_02 = param_00 getplayerangles(); + var_03 = anglestoforward(var_02); + var_04 = anglestoright(var_02); + if(!isdefined(level.var_3C36)) + { + level.var_3C36 = -300; + } + + if(!isdefined(level.var_3C37)) + { + level.var_3C37 = 700; + } + + var_05 = var_01 + var_04 * level.var_3C37 + var_03 * level.var_3C36; + var_06 = var_05 + var_03 * 10; + if(isdefined(level.uav_missile_override)) + { + var_07 = magicbullet(level.uav_missile_override,var_05,var_06,param_00); + } + else if(isdefined(level.var_3C38)) + { + var_07 = magicbullet("remote_missile_snow",var_06,var_07,var_01); + } + else if(isdefined(level.var_3C39)) + { + var_07 = magicbullet("remote_missile_invasion",var_06,var_07,var_01); + } + else + { + var_07 = magicbullet("remote_missile",var_06,var_07,var_01); + } + + param_00.active_uav_missile = var_07; + thread notifyonmissiledeath(var_07,param_00); + return var_07; +} + +//Function Number: 55 +drawtargetsstart() +{ + level.remotemissile.draw_red_boxes = 1; + level endon("uav_destroyed"); + level endon("draw_target_end"); + level notify("stop_prv_draw_targets"); + level endon("stop_prv_draw_targets"); + wait 0.05; + var_00 = 4; + var_01 = 0; + var_02 = 0.05; + foreach(var_04 in level.remote_missile_targets) + { + if(!isalive(var_04)) + { + continue; + } + + var_04 draw_target(); + var_01++; + if(var_01 >= var_00) + { + var_01 = 0; + wait var_02; + } + } +} + +//Function Number: 56 +draw_target() +{ + self.has_target_shader = 1; + if(isdefined(self.var_28A1)) + { + target_set(self,(0,0,-96)); + } + else + { + target_set(self,(0,0,64)); + } + + if(isai(self)) + { + if(issplitscreen()) + { + target_setshader(self,"remotemissile_infantry_target_2plr"); + } + else + { + target_setshader(self,"remotemissile_infantry_target"); + } + } + else if(isplayer(self)) + { + if(isdefined(self.is_controlling_uav) && self.is_controlling_uav) + { + target_setshader(self,"hud_fofbox_self_sp"); + } + else + { + } + } + else + { + target_setshader(self,"veh_hud_target"); + } + + var_00 = undefined; + var_01 = undefined; + foreach(var_03 in level.players) + { + if(isdefined(var_03.is_controlling_uav) && var_03.is_controlling_uav) + { + target_showtoplayer(self,var_03); + continue; + } + + target_hidefromplayer(self,var_03); + } +} + +//Function Number: 57 +drawtargetsend() +{ + level notify("draw_target_end"); + level.remotemissile.draw_red_boxes = undefined; + waittillframeend; + foreach(var_01 in level.remote_missile_targets) + { + if(!isdefined(var_01)) + { + continue; + } + + if(isdefined(var_01.has_target_shader)) + { + var_01.has_target_shader = undefined; + target_remove(var_01); + } + } +} + +//Function Number: 58 +switchbacktomainweapon() +{ + return switchbacktomainweapon_internal(::_switcher); +} + +//Function Number: 59 +switchbacktomainweaponfast() +{ + return switchbacktomainweapon_internal(::_switchernow); +} + +//Function Number: 60 +_switcher(param_00) +{ + self switchtoweapon(param_00); +} + +//Function Number: 61 +_switchernow(param_00) +{ + self switchtoweaponimmediate(param_00); +} + +//Function Number: 62 +switchbacktomainweapon_internal(param_00) +{ + if(maps\_utility::ent_flag_exist("laststand_downed") && maps\_utility::ent_flag("laststand_downed")) + { + return; + } + + var_01 = self getweaponslist("primary","altmode"); + foreach(var_03 in var_01) + { + if(self.last_weapon == var_03) + { + self [[ param_00 ]](self.last_weapon); + return; + } + } + + if(var_01.size > 0) + { + self [[ param_00 ]](var_01[0]); + } +} + +//Function Number: 63 +staticeffect(param_00) +{ + var_01 = spawn("script_origin",(0,0,1)); + var_01.origin = self.origin; + var_01 playsound("predator_drone_static","sounddone"); + var_02 = newclienthudelem(self); + var_02.horzalign = "fullscreen"; + var_02.vertalign = "fullscreen"; + var_02 setshader("ac130_overlay_grain",640,480); + wait param_00; + var_02 destroy(); + wait 3; + var_01 stopsounds(); + wait 1; + var_01 delete(); +} + +//Function Number: 64 +player_can_cycle_uav_rigs() +{ + self endon("controlling_UAV"); + var_00 = self attackbuttonpressed(); + for(;;) + { + var_01 = self attackbuttonpressed(); + if(!var_00 && var_01) + { + self.var_3C2A++; + self.var_3C2A = self.var_3C2A % self.var_3BF0.size; + var_02 = maps\_remotemissile_utility::player_uav_rig(); + self unlink(); + var_03 = level.remotemissile.fov_is_altered; + self playerlinkweaponviewtodelta(var_02,"tag_player",1,var_03,var_03,var_03,var_03,1); + var_04 = var_02 gettagangles("tag_origin"); + self setplayerangles(var_04); + } + + var_00 = var_01; + wait 0.05; + } +} + +//Function Number: 65 +cycle_uav_rigs() +{ + if(self.var_3BF0.size <= 1) + { + return; + } + + if(isdefined(self.var_3C46)) + { + return; + } + + self.var_3C46 = 1; + for(;;) + { + maps\_utility::ent_flag_wait("controlling_UAV"); + player_can_cycle_uav_rigs(); + } +} + +//Function Number: 66 +run_rig_function_when_player_uses_uav(param_00,param_01) +{ + var_02 = []; + var_03 = var_7B[var_02.unique_id]; + for(;;) + { + var_02 maps\_utility::ent_flag_wait("controlling_UAV"); + thread [[ param_01 ]](var_02); + var_02 maps\_utility::ent_flag_waitopen("controlling_UAV"); + setsaveddvar(var_03,1); + } +} + +//Function Number: 67 +open_view_cone() +{ + self lerpviewangleclamp(0,0,0,level.remotemissile.fov_is_altered,level.remotemissile.fov_is_altered,level.remotemissile.fov_is_altered * 0.25,level.remotemissile.fov_is_altered); +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_remotemissile_utility.gsc b/MW3/PC/SP/maps/_remotemissile_utility.gsc new file mode 100644 index 0000000..9caca09 --- /dev/null +++ b/MW3/PC/SP/maps/_remotemissile_utility.gsc @@ -0,0 +1,164 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_remotemissile_utility.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 9 + * Decompile Time: 139 ms + * Timestamp: 10/27/2023 2:20:51 AM +*******************************************************************/ + +//Function Number: 1 +setup_remote_missile_target() +{ + if(!isdefined(level.remote_missile_targets)) + { + level.remote_missile_targets = []; + } + + level.remote_missile_targets[self.unique_id] = self; + if(isdefined(level.remotemissile.draw_red_boxes) && !isdefined(level.uav_is_destroyed)) + { + level endon("draw_target_end"); + while(isdefined(level.setup_remote_missile_target_last_add_time) && level.setup_remote_missile_target_last_add_time == gettime()) + { + wait 0.05; + } + + level.setup_remote_missile_target_last_add_time = gettime(); + if(isalive(self)) + { + maps\_remotemissile::draw_target(); + } + } + + self waittill("death"); + level.remote_missile_targets[self.unique_id] = undefined; + if(!isdefined(self)) + { + return; + } + + if(isdefined(self.has_target_shader)) + { + self.has_target_shader = undefined; + target_remove(self); + } +} + +//Function Number: 2 +player_uav_rig() +{ + if(isdefined(level.uavrig)) + { + return level.uavrig; + } + + var_00 = maps\_remotemissile::get_current_uav_rig(); + return var_00; +} + +//Function Number: 3 +create_uav_rigs(param_00) +{ + foreach(var_02 in level.players) + { + var_03 = common_scripts\utility::spawn_tag_origin(); + var_03.origin = self.origin; + var_03.uav = self; + var_03 thread maps\_remotemissile::run_rig_function_when_player_uses_uav(param_00,var_02); + var_02 add_player_rig(var_03); + var_02 thread maps\_remotemissile::cycle_uav_rigs(); + } +} + +//Function Number: 4 +add_player_rig(param_00) +{ + if(!isdefined(self.var_3BF0)) + { + self.var_3BF0 = []; + } + + self.var_3BF0[self.var_3BF0.size] = param_00; +} + +//Function Number: 5 +give_player_remote_missiles() +{ + self giveweapon("remote_missile_detonator"); + self.remotemissile_actionslot = 4; + thread remotemissile_with_autoreloading(); + common_scripts\utility::flag_clear("predator_missile_launch_allowed"); + self setactionslot(self.remotemissile_actionslot,"weapon","remote_missile_detonator"); +} + +//Function Number: 6 +remotemissile_reload() +{ + level endon("stop_uav_reload"); + level endon("special_op_terminated"); + if(common_scripts\utility::flag("uav_reloading")) + { + if(isdefined(level.uav_is_destroyed)) + { + return; + } + + maps\_remotemissile::remove_uav_weapon(); + if(common_scripts\utility::flag("uav_collecting_stats")) + { + level waittill("uav_collecting_stats"); + maps\_remotemissile::play_kills_dialogue(); + } + + if(isdefined(level.uav_is_destroyed)) + { + return; + } + + level.uav_user = undefined; + if(common_scripts\utility::flag("uav_reloading")) + { + level waittill("uav_reloading"); + } + + if(isdefined(level.uav_is_destroyed)) + { + return; + } + + if(!common_scripts\utility::flag("uav_enabled")) + { + return; + } + + if(self getweaponammoclip(self.uav_weaponname) < 1) + { + maps\_remotemissile::disable_uav(); + return; + } + + maps\_remotemissile::restore_uav_weapon(); + thread maps\_remotemissile::remotemissile_radio("uav_online"); + thread maps\_remotemissile::remotemissile_radio_reminder(); + } +} + +//Function Number: 7 +remotemissile_with_autoreloading() +{ + maps\_remotemissile::remotemissile_player_input(::remotemissile_reload); +} + +//Function Number: 8 +remotemissile_no_autoreload() +{ + maps\_remotemissile::remotemissile_player_input(); +} + +//Function Number: 9 +remotemissile_move_player() +{ + return isdefined(level.remotemissile_temp_move_player); +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_riotshield.gsc b/MW3/PC/SP/maps/_riotshield.gsc new file mode 100644 index 0000000..fe3bd25 --- /dev/null +++ b/MW3/PC/SP/maps/_riotshield.gsc @@ -0,0 +1,476 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_riotshield.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 24 + * Decompile Time: 303 ms + * Timestamp: 10/27/2023 2:20:38 AM +*******************************************************************/ + +//Function Number: 1 +init_riotshield() +{ + if(isdefined(level.riotshield_initialized)) + { + return; + } + + level.riotshield_initialized = 1; + level._effect["riot_shield_dmg"] = loadfx("misc/riot_shield_dmg"); + if(maps\_utility::is_specialop()) + { + var_00 = []; + if(!maps\_utility::is_survival()) + { + } + + maps\_specialops::so_include_deadquote_array(var_7B); + } + + if(!isdefined(level.subclass_spawn_functions)) + { + level.subclass_spawn_functions = []; + } + + level.subclass_spawn_functions["riotshield"] = ::subclass_riotshield; + animscripts/riotshield/riotshield::func_3AB4(); +} + +//Function Number: 2 +subclass_riotshield() +{ + animscripts/riotshield/riotshield::func_3AB8(); +} + +//Function Number: 3 +riotshield_sprint_on() +{ + animscripts/riotshield/riotshield::riotshield_sprint_on(); +} + +//Function Number: 4 +riotshield_fastwalk_on() +{ + animscripts/riotshield/riotshield::riotshield_fastwalk_on(); +} + +//Function Number: 5 +riotshield_sprint_off() +{ + animscripts/riotshield/riotshield::riotshield_sprint_off(); +} + +//Function Number: 6 +riotshield_fastwalk_off() +{ + animscripts/riotshield/riotshield::riotshield_fastwalk_off(); +} + +//Function Number: 7 +riotshield_flee() +{ + if(self.subclass != "riotshield") + { + return; + } + + self.combatmode = "cover"; + self.goalradius = 2048; + animscripts/riotshield/riotshield::func_3AD1(); + var_00 = self findbestcovernode(); + if(isdefined(var_00)) + { + self usecovernode(var_00); + } +} + +//Function Number: 8 +group_create(param_00,param_01,param_02) +{ + var_03 = []; + foreach(var_05 in param_00) + { + if(var_05.combatmode != "no_cover") + { + continue; + } + + var_03[var_03.size] = var_05; + } + + var_07 = spawnstruct(); + foreach(var_05 in var_03) + { + if(isdefined(var_05.group) && isdefined(var_05.group.ai_array)) + { + var_05.group.ai_array = common_scripts\utility::array_remove(var_05.group.ai_array,var_05); + } + + var_05.group = var_07; + } + + var_07.ai_array = var_03; + var_07.fleethreshold = 1; + var_07.spacing = 50; + var_07 thread group_check_deaths(); + return var_07; +} + +//Function Number: 9 +group_initialize_formation(param_00,param_01) +{ + self.ai_array = maps\_utility::array_removedead(self.ai_array); + self.forward = param_00; + if(isdefined(param_01)) + { + self.spacing = param_01; + } + + foreach(var_03 in self.ai_array) + { + var_03.goalradius = 25; + var_03.pathenemyfightdist = 128; + var_03.pathenemylookahead = 128; + } + + group_sort_by_closest_match(); + thread check_group_facing_forward(); +} + +//Function Number: 10 +group_resort_on_deaths() +{ + self endon("break_group"); + if(self.ai_array.size == 0) + { + return; + } + + while(self.ai_array.size) + { + maps\_utility::waittill_dead(self.ai_array,1); + if(self.group_move_mode != "stopped") + { + self waittill("goal"); + } + + self.ai_array = maps\_utility::array_removedead(self.ai_array); + group_sort_by_closest_match(); + } +} + +//Function Number: 11 +group_sort_by_closest_match(param_00) +{ + if(self.ai_array.size == 0) + { + return; + } + + if(isdefined(param_00)) + { + self.forward = param_00; + } + else + { + param_00 = self.forward; + } + + var_01 = group_center(); + var_02 = (self.forward[1],-1 * self.forward[0],0); + var_03 = var_02 * self.spacing; + var_04 = group_left_corner(var_01,var_03); + var_05 = []; + for(var_06 = 0;var_06 < self.ai_array.size;var_06++) + { + if(isdefined(self.ai_array[var_06])) + { + var_05[var_06] = vectordot(var_04 - self.ai_array[var_06].origin,var_02); + continue; + } + + var_05[var_06] = 0; + } + + for(var_06 = 1;var_06 < var_05.size;var_06++) + { + var_07 = var_05[var_06]; + var_08 = self.ai_array[var_06]; + for(var_09 = var_06 - 1;var_09 >= 0;var_09--) + { + if(var_07 < var_05[var_09]) + { + break; + } + + var_05[var_09 + 1] = var_05[var_09]; + self.ai_array[var_09 + 1] = self.ai_array[var_09]; + } + + var_05[var_09 + 1] = var_07; + self.ai_array[var_09 + 1] = var_08; + } +} + +//Function Number: 12 +group_check_deaths() +{ + for(;;) + { + if(self.fleethreshold > 0) + { + self.ai_array = maps\_utility::array_removedead(self.ai_array); + if(self.ai_array.size <= self.fleethreshold) + { + foreach(var_01 in self.ai_array) + { + var_01 riotshield_flee(); + } + + self notify("break_group"); + break; + } + } + + wait 1; + } +} + +//Function Number: 13 +group_left_corner(param_00,param_01) +{ + return param_00 - self.ai_array.size - 1 / 2 * param_01; +} + +//Function Number: 14 +group_move(param_00,param_01) +{ + self notify("new_goal_set"); + self.group_move_mode = "moving"; + if(isdefined(param_01)) + { + self.forward = param_01; + } + else + { + param_01 = self.forward; + } + + var_02 = (param_01[1],-1 * param_01[0],0); + var_03 = var_02 * self.spacing; + var_04 = group_left_corner(param_00,var_03); + for(var_05 = 0;var_05 < self.ai_array.size;var_05++) + { + var_06 = self.ai_array[var_05]; + if(isdefined(var_06)) + { + var_06 setgoalpos(var_04); + } + + var_04 = var_04 + var_03; + } + + thread check_group_at_goal(); +} + +//Function Number: 15 +check_group_at_goal() +{ + self endon("new_goal_set"); + for(;;) + { + wait 0.5; + var_00 = 0; + foreach(var_02 in self.ai_array) + { + if(isdefined(var_02) && isalive(var_02)) + { + var_00++; + } + } + + var_04 = 0; + for(var_05 = 0;var_05 < self.ai_array.size;var_05++) + { + var_02 = self.ai_array[var_05]; + if(isdefined(var_02)) + { + var_06 = max(45,var_02.goalradius); + if(distancesquared(var_02.origin,var_02.goalpos) < squared(var_06)) + { + var_04++; + } + } + } + + if(var_04 == var_00) + { + self notify("goal"); + self.group_move_mode = "stopped"; + } + } +} + +//Function Number: 16 +check_group_facing_forward() +{ + self endon("break_group"); + for(;;) + { + wait 0.5; + var_00 = 0; + foreach(var_02 in self.ai_array) + { + if(isdefined(var_02) && isalive(var_02)) + { + var_00++; + } + } + + var_04 = 0; + var_05 = vectortoyaw(self.forward); + for(var_06 = 0;var_06 < self.ai_array.size;var_06++) + { + var_02 = self.ai_array[var_06]; + if(isdefined(var_02)) + { + if(abs(var_02.angles[1] - var_05) < 45) + { + var_04++; + } + } + } + + if(var_04 == var_00) + { + self notify("goal_yaw"); + } + } +} + +//Function Number: 17 +group_sprint_on() +{ + foreach(var_01 in self.ai_array) + { + if(isalive(var_01)) + { + var_01 riotshield_sprint_on(); + } + } +} + +//Function Number: 18 +group_fastwalk_on() +{ + foreach(var_01 in self.ai_array) + { + if(isalive(var_01)) + { + var_01 riotshield_fastwalk_on(); + } + } +} + +//Function Number: 19 +group_sprint_off() +{ + foreach(var_01 in self.ai_array) + { + if(isalive(var_01)) + { + var_01 riotshield_sprint_off(); + } + } +} + +//Function Number: 20 +group_fastwalk_off() +{ + foreach(var_01 in self.ai_array) + { + if(isalive(var_01)) + { + var_01 riotshield_fastwalk_off(); + } + } +} + +//Function Number: 21 +group_lock_angles(param_00) +{ + self.forward = param_00; + var_01 = vectortoyaw(param_00); + foreach(var_03 in self.ai_array) + { + if(!isdefined(var_03)) + { + continue; + } + + if(isdefined(var_03.enemy) && distancesquared(var_03.origin,var_03.enemy.origin) < squared(var_03.pathenemyfightdist)) + { + continue; + } + + var_03 orientmode("face angle",var_01); + var_03.lockorientation = 1; + } + + wait 0.1; +} + +//Function Number: 22 +group_unlock_angles() +{ + foreach(var_01 in self.ai_array) + { + if(!isdefined(var_01)) + { + continue; + } + + var_01 orientmode("face default"); + var_01.lockorientation = 0; + } +} + +//Function Number: 23 +group_free_combat() +{ + group_unlock_angles(); + foreach(var_01 in self.ai_array) + { + if(!isdefined(var_01)) + { + continue; + } + + var_01.goalradius = 2048; + var_01.pathenemyfightdist = 400; + var_01.pathenemylookahead = 400; + } +} + +//Function Number: 24 +group_center() +{ + var_00 = (0,0,0); + var_01 = 0; + foreach(var_03 in self.ai_array) + { + if(isdefined(var_03)) + { + var_00 = var_00 + var_03.origin; + var_01++; + } + } + + if(var_01) + { + var_00 = 1 / var_01 * var_00; + } + + return var_00; +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_sea.gsc b/MW3/PC/SP/maps/_sea.gsc new file mode 100644 index 0000000..7f972c1 --- /dev/null +++ b/MW3/PC/SP/maps/_sea.gsc @@ -0,0 +1,555 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_sea.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 18 + * Decompile Time: 228 ms + * Timestamp: 10/27/2023 2:20:17 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + level._sea_scale = 1; + level.sea_model = getent("sea","targetname"); + level._sea_org = spawn("script_origin",level.sea_model.origin); + level._sea_org.offset = level.sea_model.origin * -1; + level._sea_org.sway = "sway2"; + level._sea_link = spawn("script_origin",level.sea_model.origin); + level._sea_link.offset = level._sea_org.offset; + level.sea_model linkto(level._sea_link); + level.sea_foam = getent("sea_foam","targetname"); + if(isdefined(level.sea_foam)) + { + level.sea_foam linkto(level._sea_link); + level.sea_foam hide(); + } + + level.sea_black = getent("sea_black","targetname"); + if(isdefined(level.sea_black)) + { + level.sea_black linkto(level._sea_link); + } + + common_scripts\utility::flag_init("_sea_waves"); + common_scripts\utility::flag_init("_sea_viewbob"); + common_scripts\utility::flag_init("_sea_bob"); + common_scripts\utility::flag_set("_sea_bob"); + common_scripts\utility::flag_set("_sea_viewbob"); + var_00 = getentarray("boat_sway","script_noteworthy"); + if(isdefined(var_00)) + { + common_scripts\utility::array_thread(var_00,::sea_objectbob,level._sea_org); + } + + thread sea_logic(); +} + +//Function Number: 2 +sea_logic() +{ + wait 0.05; + var_00 = getmapsundirection(); + setsundirection(var_00); + level.lite_settings = vectortoangles(var_00); + level.new_lite_settings = level.lite_settings; + level._sea_org thread sea_bob(); + level._sea_org thread sea_waves(); + level._sea_org thread sea_viewbob(); +} + +//Function Number: 3 +sea_objectbob_precalc(param_00,param_01) +{ + self.waittime = randomfloatrange(0.5,1); + if(isdefined(self.setscale)) + { + self.scale = self.setscale; + } + else + { + self.scale = randomfloatrange(2,3); + } + + var_02 = 0; + var_03 = 0; + switch(param_01) + { + case "sway1": + var_02 = self.sway1max; + break; + + case "sway2": + var_02 = self.sway2max; + break; + } + + if(self.axial) + { + var_04 = param_00.rotation[0] * self.pratio * self.scale + param_00.rotation[2] * self.rratio * self.scale; + if(var_02 < abs(var_04)) + { + if(var_04 < 1) + { + var_03 = var_02 * -1; + } + else + { + var_03 = var_02; + } + } + else + { + var_03 = var_04; + } + + self.ang = (self.angles[0],self.angles[1],var_03); + return; + } + + self.ang = param_00.rotation * self.scale; +} + +//Function Number: 4 +sea_objectbob(param_00) +{ + if(isdefined(self.targetname)) + { + var_01 = getentarray(self.targetname,"target"); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + var_01[var_02] linkto(self); + } + } + + var_03 = common_scripts\utility::getstructarray(self.target,"targetname"); + var_04 = var_03[0].origin; + var_05 = undefined; + var_06 = spawn("script_origin",(0,0,0)); + var_06.axial = 0; + if(isdefined(var_03[1])) + { + var_05 = var_03[1].origin; + var_06.axial = 1; + } + else + { + var_07 = anglestoup(var_03[0].angles); + var_07 = var_07 * 10; + var_05 = var_04 + var_07; + } + + var_06.origin = var_04; + var_06.angles = vectortoangles(var_05 - var_04); + var_06.pratio = 1; + var_06.rratio = 1; + var_06.sway1max = 100; + var_06.sway2max = 100; + var_06.setscale = undefined; + if(isdefined(var_03[0].script_parameters)) + { + var_08 = strtok(var_03[0].script_parameters,":;, "); + for(var_02 = 0;var_02 < var_08.size;var_02++) + { + switch(var_08[var_02]) + { + case "axial": + var_06.axial = 1; + break; + + case "sway1": + var_02++; + var_06.sway1max = int(var_08[var_02]); + break; + + case "sway2": + var_02++; + var_06.sway2max = int(var_08[var_02]); + break; + + case "setscale": + var_02++; + if(var_08[var_02] == "randomrange") + { + var_02++; + var_09 = int(var_08[var_02]); + var_02++; + var_0A = int(var_08[var_02]); + var_06.setscale = randomfloatrange(var_09,var_0A); + } + else + { + var_06.setscale = int(var_08[var_02]); + } + break; + } + } + } + + if(var_06.axial) + { + var_0B = undefined; + var_0C = (0,360,0); + if(!isdefined(var_03[1])) + { + var_0B = var_03[0].angles; + } + else + { + var_0B = vectortoangles(var_05 - var_04); + } + + var_06.rratio = vectordot(anglestoright(var_0B),anglestoright(var_0C)); + var_06.pratio = vectordot(anglestoright(var_0B),anglestoforward(var_0C)); + } + + self.link = var_06; + self notify("got_link"); + for(var_02 = 0;var_02 < var_03.size;var_02++) + { + var_03[var_02] thread sea_objectbob_findparent(var_06,param_00); + } + + wait 0.05; + self linkto(var_06); + if(isdefined(self.script_parameters)) + { + } + + thread sea_objectbob_logic(param_00,var_06); +} + +//Function Number: 5 +sea_objectbob_logic(param_00,param_01) +{ + for(;;) + { + if(param_00.sway == "sway2") + { + param_00 waittill("sway1"); + } + + param_01 sea_objectbob_precalc(param_00,"sway1"); + param_01 notify("precalcdone1"); + if(!isdefined(param_01.parent)) + { + wait param_01.waittime; + } + + param_01 rotateto(param_01.ang,param_00.time,param_00.time * 0.5,param_00.time * 0.5); + if(param_00.sway == "sway1") + { + param_00 waittill("sway2"); + } + + param_01 sea_objectbob_precalc(param_00,"sway2"); + param_01 notify("precalcdone2"); + if(!isdefined(param_01.parent)) + { + wait param_01.waittime; + } + + param_01 rotateto(param_01.ang,param_00.time,param_00.time * 0.5,param_00.time * 0.5); + } +} + +//Function Number: 6 +sea_objectbob_follow(param_00) +{ + for(;;) + { + self moveto(param_00.origin,0.1); + wait 0.1; + } +} + +//Function Number: 7 +sea_objectbob_findparent(param_00,param_01) +{ + if(!isdefined(self.target)) + { + return; + } + + param_00.parent = getent(self.target,"targetname"); + if(!isdefined(param_00.parent.link)) + { + param_00.parent waittill("got_link"); + } + + var_02 = param_00.parent.link; + var_03 = param_00.origin; + var_04 = spawn("script_origin",var_02.origin); + var_04.angles = var_02.angles; + var_05 = spawn("script_origin",param_00.origin); + var_05.angles = param_00.angles; + var_05 linkto(var_04); + param_00 thread sea_objectbob_follow(var_05); + for(;;) + { + var_02 waittill("precalcdone1"); + wait var_02.waittime - 0.05; + var_04 rotateto(var_02.ang,param_01.time,param_01.time * 0.5,param_01.time * 0.5); + var_02 waittill("precalcdone2"); + wait var_02.waittime - 0.05; + var_04 rotateto(var_02.ang,param_01.time,param_01.time * 0.5,param_01.time * 0.5); + } +} + +//Function Number: 8 +sea_bob() +{ + self endon("manual_override"); + common_scripts\utility::flag_wait("_sea_bob"); + thread sea_bob_reset(); + wait 0.05; + for(;;) + { + var_00 = 0; + var_01 = 0; + var_02 = randomfloatrange(2,4) * level._sea_scale; + self.time = randomfloatrange(3,4); + self.rotation = (var_01,var_00,var_02); + self.sway = "sway1"; + self notify("sway1"); + if(common_scripts\utility::flag("_sea_bob")) + { + level._sea_link rotateto(self.rotation,self.time,self.time * 0.5,self.time * 0.5); + } + + self rotateto(self.rotation,self.time,self.time * 0.5,self.time * 0.5); + wait self.time; + self.rotation = self.rotation * -1; + self.sway = "sway2"; + self notify("sway2"); + if(common_scripts\utility::flag("_sea_bob")) + { + level._sea_link rotateto(self.rotation,self.time,self.time * 0.5,self.time * 0.5); + } + + self rotateto(self.rotation,self.time,self.time * 0.5,self.time * 0.5); + wait self.time; + } +} + +//Function Number: 9 +sea_bob_reset_loop() +{ + self endon("manual_override"); + common_scripts\utility::flag_wait("_sea_bob"); + thread sea_bob_reset(); +} + +//Function Number: 10 +sea_bob_reset() +{ + self endon("manual_override"); + level waittill("_sea_bob"); + thread sea_bob_reset_loop(); + level endon("_sea_bob"); + var_00 = 1.5; + var_01 = (0,0,0); + level._sea_link rotateto(var_01,var_00,var_00 * 0.5,var_00 * 0.5); + wait var_00; + wait 0.05; + level.new_lite_settings = level.lite_settings; + level._sea_link.angles = (0,0,0); +} + +//Function Number: 11 +sea_waves() +{ + var_00 = sea_waves_setup(); + if(!isdefined(var_00)) + { + return; + } + + self.oldwaves = []; + for(;;) + { + common_scripts\utility::flag_wait("_sea_waves"); + self waittill("sway1"); + thread sea_waves_fx(var_00,"right"); + common_scripts\utility::flag_wait("_sea_waves"); + self waittill("sway2"); + thread sea_waves_fx(var_00,"left"); + } +} + +//Function Number: 12 +sea_waves_fx(param_00,param_01) +{ + wait self.time * 0.5; + var_02 = 2; + var_03 = common_scripts\utility::random(sea_closestwavearray(param_00[param_01],var_02)); + if(!isdefined(self.oldwaves[param_01])) + { + self.oldwaves[param_01] = var_03; + } + + while(self.oldwaves[param_01] == var_03) + { + wait 0.05; + var_03 = common_scripts\utility::random(sea_closestwavearray(param_00[param_01],var_02)); + } + + self.oldwaves[param_01] = var_03; + var_03 thread sea_waves_fx2(); + thread common_scripts\utility::play_sound_in_space("elm_wave_crash_ext",var_03.origin); +} + +//Function Number: 13 +sea_waves_fx2() +{ + wait randomfloat(0.15); + common_scripts\utility::exploder(self.exploder.v["exploder"]); +} + +//Function Number: 14 +sea_closestwavearray(param_00,param_01) +{ + var_02 = []; + for(var_03 = 0;var_03 < param_00.size;var_03++) + { + param_00[var_03]._sea_dist = distancesquared(param_00[var_03].origin,level.player.origin); + } + + for(var_03 = 0;var_03 < param_00.size;var_03++) + { + var_02 = sea_closestwavelogic(var_02,param_00[var_03]); + } + + var_04 = []; + var_03 = 0; + while(var_03 < param_01) + { + var_04++ = var_7B[var_03]; + } + + return var_7B; +} + +//Function Number: 15 +sea_closestwavelogic(param_00,param_01) +{ + if(!param_00.size) + { + param_00[0] = param_01; + return param_00; + } + + for(var_02 = 0;var_02 < param_00.size;var_02++) + { + if(param_00[var_02]._sea_dist > param_01._sea_dist) + { + param_00 = maps\_utility::array_insert(param_00,param_01,var_02); + break; + } + } + + if(var_02 == param_00.size) + { + param_00 = maps\_utility::array_add(param_00,param_01); + } + + return param_00; +} + +//Function Number: 16 +sea_waves_setup() +{ + var_00 = common_scripts\utility::getstructarray("wave_fx","targetname"); + var_01 = common_scripts\utility::getstruct("wave_fx_center","targetname"); + if(!var_00.size) + { + return undefined; + } + + var_02 = anglestoforward(var_01.angles); + var_03 = anglestoright(var_01.angles); + var_04 = []; + for(var_05 = 0;var_05 < var_01.size;var_05++ = var_7B["left"]) + { + var_01[var_05].forward = anglestoforward(var_01[var_05].angles); + var_01[var_05].up = anglestoup(var_01[var_05].angles); + var_01[var_05].right = anglestoright(var_01[var_05].angles); + } + + for(var_05 = 0;var_05 < var_01.size;var_05++ = []) + { + if(vectordot(var_01[var_05].forward,var_04) > 0) + { + var_7B["right"][var_7B["right"].size] = var_01[var_05]; + continue; + } + + var_7B["left"][var_7B["left"].size] = var_01[var_05]; + } + + var_06 = level._waves_exploders; + for(var_05 = 0;var_05 < var_06.size;var_05++ = var_7B["right"]) + { + var_06[var_05].origin = var_06[var_05].v["origin"]; + } + + for(var_05 = 0;var_05 < var_7B["right"].size;var_05++ = []) + { + var_07 = maps\_utility::getclosest(var_7B["right"][var_05].origin,var_06,64); + var_06 = common_scripts\utility::array_remove(var_06,var_07); + if(isdefined(var_7B["right"][var_05].angles)) + { + var_07.v["forward"] = anglestoup(var_7B["right"][var_05].angles); + } + + var_7B["right"][var_05].exploder = var_07; + } + + for(var_05 = 0;var_05 < var_7B["left"].size;var_05++) + { + var_07 = maps\_utility::getclosest(var_7B["left"][var_05].origin,var_06,64); + var_06 = common_scripts\utility::array_remove(var_06,var_07); + if(isdefined(var_7B["left"][var_05].angles)) + { + var_07.v["forward"] = anglestoup(var_7B["left"][var_05].angles); + } + + var_7B["left"][var_05].exploder = var_07; + } + + return var_7B; +} + +//Function Number: 17 +sea_litebob() +{ + for(;;) + { + wait 0.2; + var_00 = self.angles * 2; + var_00 = (var_00[0],var_00[1],var_00[2]); + var_01 = level.new_lite_settings; + level.new_lite_settings = combineangles(var_00,level.lite_settings); + var_02 = level.new_lite_settings; + var_03 = anglestoforward(var_01); + var_04 = anglestoforward(var_02); + lerpsundirection(var_03,var_04,0.2); + } +} + +//Function Number: 18 +sea_viewbob() +{ + for(;;) + { + common_scripts\utility::flag_wait("_sea_viewbob"); + level.player playersetgroundreferenceent(self); + if(common_scripts\utility::flag("_sea_viewbob")) + { + level waittill("_sea_viewbob"); + } + + level.player playersetgroundreferenceent(undefined); + } +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_shellshock.gsc b/MW3/PC/SP/maps/_shellshock.gsc new file mode 100644 index 0000000..8e78ea9 --- /dev/null +++ b/MW3/PC/SP/maps/_shellshock.gsc @@ -0,0 +1,90 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_shellshock.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 3 + * Decompile Time: 34 ms + * Timestamp: 10/27/2023 2:20:11 AM +*******************************************************************/ + +//Function Number: 1 +main(param_00,param_01,param_02,param_03,param_04,param_05) +{ + level thread internalmain(param_00,param_01,param_02,param_03,param_04,param_05); +} + +//Function Number: 2 +internalmain(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if(!isdefined(param_00)) + { + param_00 = 12; + } + else if(param_00 < 7) + { + param_00 = 7; + } + + if(!isdefined(param_01)) + { + param_01 = 150; + } + + if(!isdefined(param_02)) + { + param_02 = 100; + } + + if(!isdefined(param_03)) + { + param_03 = 100; + } + + if(!isdefined(param_05)) + { + var_06 = "default"; + } + else + { + var_06 = var_06; + } + + var_07 = level.player getorigin() + (0,8,2); + var_08 = 320; + var_09 = param_01 + randomint(param_02); + var_0A = param_03; + level.player playsound("weapons_rocket_explosion"); + wait 0.25; + radiusdamage(var_07,var_08,var_09,var_0A); + earthquake(0.75,2,var_07,2250); + if(isalive(level.player)) + { + level.player allowstand(0); + level.player allowcrouch(0); + level.player allowprone(1); + wait 0.15; + level.player viewkick(127,level.player.origin); + level.player shellshock(var_06,param_00); + if(!isdefined(param_04)) + { + level.player thread playerhitable(param_00); + } + + wait 1.5; + level.player allowstand(1); + level.player allowcrouch(1); + } +} + +//Function Number: 3 +playerhitable(param_00) +{ + self.shellshocked = 1; + self.ignoreme = 1; + self notify("player is shell shocked"); + self endon("player is shell shocked"); + wait param_00 - 1; + self.shellshocked = 0; + self.ignoreme = 0; +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_shutter.gsc b/MW3/PC/SP/maps/_shutter.gsc new file mode 100644 index 0000000..cb723e1 --- /dev/null +++ b/MW3/PC/SP/maps/_shutter.gsc @@ -0,0 +1,352 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_shutter.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 12 + * Decompile Time: 195 ms + * Timestamp: 10/27/2023 2:22:57 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(!isdefined(level.windstrength)) + { + level.windstrength = 0.2; + } + + level.animrate["awning"] = 1; + level.animrate["palm"] = 1; + level.animweightmin = level.windstrength - 0.5; + level.animweightmax = level.windstrength + 0.2; + if(level.animweightmin < 0.1) + { + level.animweightmin = 0.1; + } + + if(level.animweightmax > 1) + { + level.animweightmax = 1; + } + + level.inc = 0; + awninganims(); + palmtree_anims(); + thread new_style_shutters(); + common_scripts\utility::array_levelthread(getentarray("wire","targetname"),::wirewander); + common_scripts\utility::array_levelthread(getentarray("awning","targetname"),::awningwander); + common_scripts\utility::array_levelthread(getentarray("palm","targetname"),::palmtrees); + var_00 = []; + var_01 = getentarray("shutter_left","targetname"); + var_00 = common_scripts\utility::array_combine(var_00,var_01); + var_01 = getentarray("shutter_right_open","targetname"); + var_00 = common_scripts\utility::array_combine(var_00,var_01); + var_01 = getentarray("shutter_left_closed","targetname"); + var_00 = common_scripts\utility::array_combine(var_00,var_01); + foreach(var_03 in var_00) + { + var_03 addyaw(180); + } + + var_05 = []; + var_01 = getentarray("shutter_right","targetname"); + var_05 = common_scripts\utility::array_combine(var_05,var_01); + var_01 = getentarray("shutter_left_open","targetname"); + var_05 = common_scripts\utility::array_combine(var_05,var_01); + var_01 = getentarray("shutter_right_closed","targetname"); + var_05 = common_scripts\utility::array_combine(var_05,var_01); + wait 0.05; + var_01 = common_scripts\utility::array_combine(var_00,var_05); + foreach(var_03 in var_01) + { + var_03 thread shuttersound(); + var_03.startyaw = var_03.angles[1]; + } + + var_01 = undefined; + var_08 = "left"; + level endon("stop_shutters"); + for(;;) + { + common_scripts\utility::array_levelthread(var_00,::shutterwanderleft,var_08); + common_scripts\utility::array_levelthread(var_05,::shutterwanderright,var_08); + level waittill("wind blows",var_08); + } +} + +//Function Number: 2 +windcontroller() +{ + for(;;) + { + var_00 = "left"; + if(randomint(100) > 50) + { + var_00 = "right"; + } + + level notify("wind blows",var_00); + wait 2 + randomfloat(10); + } +} + +//Function Number: 3 +new_style_shutters() +{ + var_00 = getentarray("shutter","targetname"); + foreach(var_02 in var_00) + { + var_03 = getent(var_02.target,"targetname"); + var_04 = spawn("script_origin",var_02.origin); + var_04.angles = var_03.angles; + var_04.startyaw = var_04.angles[1]; + var_02.pivot = var_04; + var_02 linkto(var_04); + var_04 addyaw(randomfloatrange(-90,90)); + var_02 thread shuttersound(); + } + + level endon("stop_shutters"); + var_06 = "left"; + for(;;) + { + common_scripts\utility::array_levelthread(var_00,::shutterwander,var_06); + level waittill("wind blows",var_06); + } +} + +//Function Number: 4 +shutterwander(param_00,param_01) +{ + level endon("stop_shutters"); + level endon("wind blows"); + var_02 = param_00.pivot; + var_03 = randomint(3) + 1; + var_04 = 1; + if(common_scripts\utility::cointoss()) + { + var_04 = var_04 * -1; + } + + var_05 = 80; + var_06 = 80; + if(isdefined(param_00.script_max_left_angle)) + { + var_06 = param_00.script_max_left_angle; + } + + if(isdefined(param_00.script_max_right_angle)) + { + var_05 = param_00.script_max_right_angle; + } + + for(;;) + { + param_00 notify("shutterSound"); + var_07 = randomintrange(50,80); + var_03--; + if(!var_03) + { + var_03 = randomint(3) + 1; + var_04 = var_04 * -1; + } + + var_07 = var_07 * var_04; + if(var_04 > 0) + { + if(var_07 > var_05) + { + var_07 = var_05; + } + } + else if(var_07 > var_06) + { + var_07 = var_06; + } + + var_08 = var_02.startyaw + var_07; + var_09 = abs(var_02.angles[1] - var_08); + var_0A = var_09 * 0.05 + randomfloat(1) + 0.25; + if(var_0A < 0.25) + { + var_0A = 0.25; + } + + var_02 rotateto((0,var_08,0),var_0A,var_0A * 0.5,var_0A * 0.5); + wait var_0A; + } +} + +//Function Number: 5 +shutterwanderleft(param_00,param_01) +{ + level endon("stop_shutters"); + level.inc++; + level endon("wind blows"); + var_02 = param_00.startyaw; + if(param_01 == "left") + { + var_02 = var_02 + 179.9; + } + + var_03 = 0.2; + param_00 rotateto((param_00.angles[0],var_02,param_00.angles[2]),var_03); + wait var_03 + 0.1; + for(;;) + { + param_00 notify("shutterSound"); + var_04 = randomint(80); + if(common_scripts\utility::cointoss()) + { + var_04 = var_04 * -1; + } + + var_02 = param_00.angles[1] + var_04; + var_05 = param_00.angles[1] + var_04 * -1; + if(var_02 < param_00.startyaw || var_02 > param_00.startyaw + 179) + { + var_02 = var_05; + } + + var_06 = abs(param_00.angles[1] - var_02); + var_03 = var_06 * 0.02 + randomfloat(2); + if(var_03 < 0.3) + { + var_03 = 0.3; + } + + param_00 rotateto((param_00.angles[0],var_02,param_00.angles[2]),var_03,var_03 * 0.5,var_03 * 0.5); + wait var_03; + } +} + +//Function Number: 6 +shutterwanderright(param_00,param_01) +{ + level endon("stop_shutters"); + level.inc++; + level endon("wind blows"); + var_02 = param_00.startyaw; + if(param_01 == "left") + { + var_02 = var_02 + 179.9; + } + + var_03 = 0.2; + param_00 rotateto((param_00.angles[0],var_02,param_00.angles[2]),var_03); + wait var_03 + 0.1; + for(;;) + { + param_00 notify("shutterSound"); + var_04 = randomint(80); + if(randomint(100) > 50) + { + var_04 = var_04 * -1; + } + + var_02 = param_00.angles[1] + var_04; + var_05 = param_00.angles[1] + var_04 * -1; + if(var_02 < param_00.startyaw || var_02 > param_00.startyaw + 179) + { + var_02 = var_05; + } + + var_06 = abs(param_00.angles[1] - var_02); + var_03 = var_06 * 0.02 + randomfloat(2); + if(var_03 < 0.3) + { + var_03 = 0.3; + } + + param_00 rotateto((param_00.angles[0],var_02,param_00.angles[2]),var_03,var_03 * 0.5,var_03 * 0.5); + wait var_03; + } +} + +//Function Number: 7 +shuttersound() +{ + for(;;) + { + self waittill("shutterSound"); + self waittill("sounddone"); + wait randomfloat(2); + } +} + +//Function Number: 8 +wirewander(param_00) +{ + var_01 = getentarray(param_00.target,"targetname"); + var_02 = var_01[0].origin; + var_03 = var_01[1].origin; + var_04 = vectortoangles(var_02 - var_03); + var_05 = spawn("script_model",(0,0,0)); + var_05.origin = var_02 * 0.5 + var_03 * 0.5; + var_05.angles = var_04; + param_00 linkto(var_05); + var_06 = 2; + var_07 = 0.9; + var_08 = 4 + randomfloat(2); + var_05 rotateroll(var_08 * 0.5,0.2); + wait 0.2; + for(;;) + { + var_09 = var_06 + randomfloat(var_07) - var_07 * 0.5; + var_05 rotateroll(var_08,var_09,var_09 * 0.5,var_09 * 0.5); + wait var_09; + var_05 rotateroll(var_08 * -1,var_09,var_09 * 0.5,var_09 * 0.5); + wait var_09; + } +} + +//Function Number: 9 +awninganims() +{ +} + +//Function Number: 10 +awningwander(param_00) +{ +} + +//Function Number: 11 +palmtree_anims() +{ +} + +//Function Number: 12 +palmtrees(param_00) +{ + param_00 useanimtree(#animtree); + switch(param_00.model) + { + case "tree_desertpalm01": + param_00.animname = "ree_desertpalm01"; + break; + + case "tree_desertpalm02": + param_00.animname = "tree_desertpalm02"; + break; + + case "tree_desertpalm03": + param_00.animname = "tree_desertpalm03"; + break; + } + + if(!isdefined(param_00.animname)) + { + return; + } + + wait randomfloat(2); + for(;;) + { + var_01 = level.animweightmin + randomfloat(level.animweightmax - level.animweightmin); + var_02 = 4; + param_00 setanim(level.scr_anim[param_00.animname]["wind"][0],var_01,var_02,level.animrate["palm"]); + param_00 setanim(level.scr_anim[param_00.animname]["wind"][1],1 - var_01,var_02,level.animrate["palm"]); + wait 1 + randomfloat(3); + } +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_so_survival_ai.gsc b/MW3/PC/SP/maps/_so_survival_ai.gsc new file mode 100644 index 0000000..7c705d5 --- /dev/null +++ b/MW3/PC/SP/maps/_so_survival_ai.gsc @@ -0,0 +1,3239 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_so_survival_ai.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 145 + * Decompile Time: 2560 ms + * Timestamp: 10/27/2023 2:21:15 AM +*******************************************************************/ + +//Function Number: 1 +ai_preload() +{ + ai_preload_weapons(); + precacheheadicon("headicon_delta_so"); + precacheheadicon("headicon_gign_so"); + precachemodel("weapon_c4"); + level._effect["martyrdom_c4_explosion"] = loadfx("explosions/grenadeExp_metal"); + level._effect["martyrdom_dlight_red"] = loadfx("misc/dlight_red"); + level._effect["martyrdom_red_blink"] = loadfx("misc/power_tower_light_red_blink"); + precachemodel("weapon_claymore"); + level._effect["claymore_laser"] = loadfx("misc/claymore_laser"); + level._effect["claymore_explosion"] = loadfx("explosions/grenadeExp_metal"); + level._effect["claymore_disabled"] = loadfx("explosions/sentry_gun_explosion"); + precachemodel("gas_canisters_backpack"); + precachemodel("ims_scorpion_explosive1"); + precacheshellshock("radiation_low"); + precacheshellshock("radiation_med"); + precacheshellshock("radiation_high"); + level._effect["chemical_tank_explosion"] = loadfx("smoke/so_chemical_explode_smoke"); + level._effect["chemical_tank_smoke"] = loadfx("smoke/so_chemical_stream_smoke"); + level._effect["chemical_mine_spew"] = loadfx("smoke/so_chemical_mine_spew"); + level._effect["money"] = loadfx("props/cash_player_drop"); + maps\_chopperboss::chopper_boss_load_fx(); + animscripts/dog/dog_init::func_3AF2(); +} + +//Function Number: 2 +ai_preload_weapons() +{ + var_00 = 100; + var_01 = 120; + for(var_02 = var_00;var_02 <= var_01;var_02++) + { + var_03 = get_ai_weapons(get_ai_ref_by_index(var_02)); + foreach(var_05 in var_03) + { + precacheitem(var_05); + } + } +} + +//Function Number: 3 +ai_init() +{ + setsaveddvar("ai_dropAkimboChance",0); + if(!isdefined(level.wave_table)) + { + level.wave_table = "sp/survival_waves.csv"; + } + + level.survival_ai = []; + level.survival_boss = []; + level.survival_ai = ai_type_populate(); + level.survival_repeat_wave = []; + level.survival_waves_repeated = 0; + level.survival_wave = []; + level.survival_wave = func_3D49(); + createthreatbiasgroup("sentry"); + createthreatbiasgroup("allies"); + createthreatbiasgroup("axis"); + createthreatbiasgroup("boss"); + createthreatbiasgroup("dogs"); + setignoremegroup("sentry","dogs"); + setthreatbias("sentry","boss",50); + setthreatbias("sentry","axis",50); + setthreatbias("boss","allies",2000); + setthreatbias("dogs","allies",1000); + setthreatbias("axis","allies",0); + foreach(var_01 in level.players) + { + var_01.onlygoodnearestnodes = 1; + var_01 thread update_player_closest_node_think(); + } + + level.var_3B89 = ::setup_attributes; + level.squad_leader_behavior_func = ::default_ai; + level.special_ai_behavior_func = ::default_ai; + level.squad_drop_weapon_rate = 1; + maps\_utility::add_global_spawn_function("axis",::no_grenade_bag_drop); + maps\_utility::add_global_spawn_function("axis",::weapon_drop_ammo_adjustment); + maps\_utility::add_global_spawn_function("axis",::update_enemy_remaining); + maps\_utility::add_global_spawn_function("axis",::ai_on_long_death); + maps\_utility::add_global_spawn_function("axis",::kill_sentry_on_contact); + register_xp(); + thread survival_ai_regular(); + thread survival_ai_martyrdom(); + thread survival_ai_claymore_and_chemical(); + thread survival_boss_juggernaut(); + thread survival_drop_chopper_init(); + thread survival_boss_chopper(); + thread dog_relocate_init(); + maps\_utility::battlechatter_on("allies"); + maps\_utility::battlechatter_on("axis"); +} + +//Function Number: 4 +kill_sentry_on_contact() +{ + self endon("death"); + if(!isai(self)) + { + return; + } + + wait 0.5; + if(isdefined(self.ridingvehicle)) + { + self waittill("jumpedout"); + } + + if(!isdefined(level.placed_sentry)) + { + return; + } + + foreach(var_01 in level.placed_sentry) + { + if(!isdefined(var_01) || !isalive(var_01)) + { + continue; + } + + if(distance2d(var_01.origin,self.origin) < 40 && distancesquared(var_01.origin,self.origin) < 4096) + { + var_01 kill(); + } + } +} + +//Function Number: 5 +func_3D49() +{ + var_00 = 0; + var_01 = 40; + var_02 = []; + for(var_03 = var_00;var_03 <= var_01;var_03++) + { + var_04 = get_wave_number_by_index(var_03); + if(!isdefined(var_04) || var_04 == 0) + { + continue; + } + + var_05 = spawnstruct(); + var_05.idx = var_03; + var_05.num = var_04; + var_05.survival_ai_class_overrides = get_squad_type(var_04); + var_05.var_3D4C = get_squad_array(var_04); + var_05.var_3D4D = get_special_ai(var_04); + var_05.var_3D4E = get_special_ai_quantity(var_04); + var_05.var_3D4F = get_wave_boss_delay(var_04); + var_05.bossai = get_bosses_ai(var_04); + var_05.bossnonai = get_bosses_nonai(var_04); + var_05.dogtype = get_dog_type(var_04); + var_05.dogquantity = get_dog_quantity(var_04); + var_05.repeating = is_repeating(var_04); + var_06 = get_armory_unlocked(var_04); + if(isdefined(var_06) && var_06.size) + { + if(!isdefined(level.armory_unlock)) + { + level.armory_unlock = []; + } + + foreach(var_08 in var_06) + { + level.armory_unlock[var_08] = var_04; + } + } + + var_02[var_04] = var_05; + if(var_05.repeating) + { + level.survival_repeat_wave[level.survival_repeat_wave.size] = var_05; + } + } + + return var_02; +} + +//Function Number: 6 +ai_type_add_override_class(param_00,param_01) +{ + if(!isdefined(level.var_3D57)) + { + level.var_3D57 = []; + } + + level.var_3D57[param_00] = param_01; +} + +//Function Number: 7 +ai_type_add_override_weapons(param_00,param_01) +{ + if(!isdefined(level.var_3D59)) + { + level.var_3D59 = []; + } + + foreach(var_03 in param_01) + { + precacheitem(var_03); + } + + level.var_3D59[param_00] = param_01; +} + +//Function Number: 8 +ai_type_populate() +{ + var_00 = 100; + var_01 = 120; + var_02 = []; + for(var_03 = var_00;var_03 <= var_01;var_03++) + { + var_04 = get_ai_ref_by_index(var_03); + if(!isdefined(var_04) || var_04 == "") + { + continue; + } + + var_05 = spawnstruct(); + var_05.idx = var_03; + var_05.ref = var_04; + var_05.name = get_ai_name(var_04); + var_05.var_189B = get_ai_desc(var_04); + var_05.classname = get_ai_classname(var_04); + var_05.weapon = get_ai_weapons(var_04); + var_05.altweapon = get_ai_alt_weapons(var_04); + var_05.health = get_ai_health(var_04); + var_05.speed = get_ai_speed(var_04); + var_05.accuracy = get_ai_accuracy(var_04); + var_05.xp = get_ai_xp(var_04); + if(is_ai_boss(var_04)) + { + level.survival_boss[var_04] = var_05; + } + + var_02[var_04] = var_05; + } + + return var_02; +} + +//Function Number: 9 +givexp_kill(param_00,param_01) +{ + var_02 = "kill"; + if(isdefined(param_00.ally_ref)) + { + var_02 = "survival_ai_" + param_00.ally_ref.ref; + } + + var_03 = undefined; + if(isdefined(param_01)) + { + var_04 = maps\_rank::getscoreinfovalue(var_02); + if(isdefined(var_04)) + { + var_03 = var_04 * param_01; + } + } + + maps\_utility::givexp(var_02,var_03); +} + +//Function Number: 10 +register_xp() +{ + foreach(var_01 in level.survival_ai) + { + maps\_rank::registerscoreinfo("survival_ai_" + var_01.ref,get_ai_xp(var_01.ref)); + } +} + +//Function Number: 11 +update_player_closest_node_think() +{ + self endon("death"); + level endon("special_op_terminated"); + var_00 = 128; + var_01 = 1; + var_02 = 512; + for(;;) + { + var_03 = getclosestnodeinsight(self.origin); + if(isdefined(var_03)) + { + if(var_03.type != "Begin" && var_03.type != "End" && var_03.type != "Turret") + { + self.node_closest = var_03; + } + } + + wait 0.25; + } +} + +//Function Number: 12 +update_enemy_remaining() +{ + level endon("special_op_terminated"); + waittillframeend; + level.enemy_remaining = get_survival_enemies_living().size; + level notify("axis_spawned"); + self waittill("death"); + waittillframeend; + var_00 = get_survival_enemies_living(); + level.enemy_remaining = var_00.size; + level notify("axis_died"); + if(common_scripts\utility::flag("aggressive_mode") && var_00.size == 1 && isai(var_00[0]) && var_00[0].type != "dog") + { + var_00[0] thread prevent_long_death(); + } +} + +//Function Number: 13 +get_survival_enemies_living() +{ + var_00 = getaiarray("axis"); + if(isdefined(level.bosses) && level.bosses.size) + { + var_00 = maps\_utility::array_merge(var_00,level.bosses); + } + + var_00 = maps\_utility::array_merge(var_00,dog_get_living()); + return var_00; +} + +//Function Number: 14 +prevent_long_death() +{ + level endon("special_op_terminated"); + self endon("death"); + if(!isdefined(self.a.doinglongdeath)) + { + maps\_utility::disable_long_death(); + return; + } + + for(;;) + { + var_00 = 1; + foreach(var_02 in level.players) + { + var_03 = distance2d(var_02.origin,self.origin) < 540; + if(var_03) + { + var_00 = 0; + break; + } + + if(self cansee(var_02)) + { + var_00 = 0; + break; + } + + wait 0.05; + } + + if(var_00) + { + var_05 = get_last_attacker(); + if(isdefined(var_05)) + { + self kill(self.origin,var_05); + } + else + { + self kill(self.origin); + } + + return; + } + + wait 0.1; + } +} + +//Function Number: 15 +get_last_attacker() +{ + var_00 = undefined; + if(isdefined(self.attacker_list) && self.attacker_list.size) + { + var_00 = self.attacker_list[self.attacker_list.size - 1]; + } + + return var_00; +} + +//Function Number: 16 +weapon_drop_ammo_adjustment() +{ + if(!isai(self) || isdefined(self.type) && self.type == "dog") + { + return; + } + + if(!isdefined(level.armory) || !isdefined(level.armory["weapon"])) + { + return; + } + + level endon("special_op_terminated"); + self waittill("weapon_dropped",var_00); + if(!isdefined(var_00)) + { + return; + } + + var_01 = getsubstr(var_00.classname,7); + wait 0.05; + var_02 = level.armory["weapon"][var_01]; + if(!isdefined(var_00) || !isdefined(var_02)) + { + return; + } + + var_03 = var_02.dropclip; + var_04 = var_02.dropstock; + var_00 itemweaponsetammo(var_03,var_04); + var_05 = weaponaltweaponname(var_01); + if(var_05 != "none") + { + var_06 = int(max(1,weaponclipsize(var_05))); + var_07 = int(max(1,weaponmaxammo(var_05))); + var_00 itemweaponsetammo(var_06,var_07,var_06,1); + } +} + +//Function Number: 17 +no_grenade_bag_drop() +{ + level.nextgrenadedrop = 100000; +} + +//Function Number: 18 +money_fx_on_death() +{ + level endon("special_op_terminated"); + self waittill("death"); + if(!isdefined(self)) + { + return; + } + + playfx(level._effect["money"],self.origin + (0,0,32)); +} + +//Function Number: 19 +ai_on_long_death() +{ + if(!isai(self) || isdefined(self.type) && self.type == "dog") + { + return; + } + + self endon("death"); + level endon("special_op_terminated"); + self waittill("long_death"); + self waittill("flashbang",var_00,var_01,var_02,var_03); + if(isdefined(var_03) && isdefined(var_03.team) && var_03.team == "allies") + { + self kill(self.origin,var_03); + } +} + +//Function Number: 20 +get_ai_type_ref() +{ + if(isdefined(self.ally_ref)) + { + return self.ally_ref.ref; + } + + if(isdefined(level.leaders)) + { + foreach(var_01 in level.leaders) + { + if(var_01 == self) + { + return get_squad_type(level.current_wave); + } + } + } + + if(isdefined(self.leader) && isai(self.leader)) + { + return get_squad_type(level.current_wave); + } + + return undefined; +} + +//Function Number: 21 +get_special_ai_array(param_00) +{ + var_01 = []; + if(isdefined(level.special_ai) && level.special_ai.size) + { + foreach(var_03 in level.special_ai) + { + if(isalive(var_03) && isdefined(var_03.ally_ref) && var_03.ally_ref.ref == param_00) + { + var_01[var_01.size] = var_03; + } + } + } + + return var_01; +} + +//Function Number: 22 +default_ai() +{ + self notify("ai_behavior_change"); + self.aggressivemode = 1; + self.aggressing = undefined; + var_00 = self [[ level.var_3B89 ]](); + if(var_00 == "martyrdom") + { + thread behavior_special_ai_martyrdom(); + return; + } + + if(var_00 == "claymore") + { + thread behavior_special_ai_claymore(); + return; + } + + if(var_00 == "chemical") + { + thread behavior_special_ai_chemical(); + return; + } + + if(var_00 == "easy" || var_00 == "regular" || var_00 == "hardened" || var_00 == "veteran" || var_00 == "elite") + { + thread default_squad_leader(); + } +} + +//Function Number: 23 +aggressive_ai() +{ + self notify("ai_behavior_change"); + self.aggressivemode = 1; + self.aggressing = 1; + var_00 = self [[ level.var_3B89 ]](); + if(var_00 == "martyrdom") + { + thread behavior_special_ai_martyrdom(); + return; + } + + if(var_00 == "claymore") + { + thread behavior_special_ai_claymore(); + return; + } + + if(var_00 == "chemical") + { + thread behavior_special_ai_chemical(); + return; + } + + if(var_00 == "easy" || var_00 == "regular" || var_00 == "hardened" || var_00 == "veteran" || var_00 == "elite") + { + thread aggressive_squad_leader(); + } +} + +//Function Number: 24 +setup_attributes() +{ + if(isdefined(self.attributes_set) && isdefined(self.ally_ref)) + { + return self.ally_ref.ref; + } + + var_00 = get_ai_type_ref(); + if(!isdefined(self.ally_ref)) + { + var_01 = get_ai_struct(var_00); + self.ally_ref = var_01; + } + + var_02 = isdefined(self.code_classname) && self.code_classname == "script_vehicle"; + var_03 = get_ai_health(var_00); + if(isdefined(var_03) && !var_02) + { + self.health = var_03; + } + + var_04 = get_ai_speed(var_00); + if(isdefined(var_04)) + { + if(var_02) + { + self vehicle_setspeed(60 * var_04,20 * var_04); + } + else + { + self.moveplaybackrate = var_04; + } + } + + var_05 = get_ai_accuracy(var_00); + if(isdefined(var_05)) + { + maps\_utility::set_baseaccuracy(var_05); + } + + var_06 = get_ai_alt_weapons(var_00); + foreach(var_08 in var_06) + { + if(var_08 == "fraggrenade") + { + self.grenadeammo = 2; + self.grenadeweapon = "fraggrenade"; + } + + if(var_08 == "flash_grenade") + { + self.grenadeammo = 2; + self.grenadeweapon = "flash_grenade"; + } + } + + if(isdefined(self.dropweapon) && self.dropweapon && isdefined(level.squad_drop_weapon_rate)) + { + var_0A = randomfloat(1); + if(var_0A > level.squad_drop_weapon_rate) + { + self.dropweapon = 0; + } + } + + self.advance_regardless_of_numbers = 1; + self.reacquire_without_facing = 1; + self.minexposedgrenadedist = 256; + self.attributes_set = 1; + return var_00; +} + +//Function Number: 25 +survival_boss_behavior() +{ + self endon("death"); + var_00 = "Boss does not have AI_Type struct, should have been passed when spawning by AI_Type."; + var_01 = self [[ level.var_3B89 ]](); + if(!isdefined(var_01)) + { + return; + } + + if(var_01 == "jug_regular") + { + global_jug_behavior(); + thread boss_jug_regular(); + return; + } + + if(var_01 == "jug_headshot") + { + global_jug_behavior(); + thread boss_jug_headshot(); + return; + } + + if(var_01 == "jug_explosive") + { + global_jug_behavior(); + thread boss_jug_explosive(); + return; + } + + if(var_01 == "jug_riotshield") + { + global_jug_behavior(); + thread boss_jug_riotshield(); + } +} + +//Function Number: 26 +survival_ai_regular() +{ +} + +//Function Number: 27 +default_squad_leader() +{ + self.goalradius = 900; + self.aggressing = undefined; + self setengagementmindist(300,200); + self setengagementmaxdist(512,768); + thread manage_ai_relative_to_player(4,self.goalradius,"ai_behavior_change demotion"); +} + +//Function Number: 28 +aggressive_squad_leader() +{ + self.goalradius = 384; + self.aggressing = 1; + maps\_utility::enable_heat_behavior(1); + maps\_utility::disable_surprise(); + self setengagementmindist(88,64); + self setengagementmaxdist(512,768); + thread manage_ai_relative_to_player(4,self.goalradius,"ai_behavior_change demotion"); +} + +//Function Number: 29 +behavior_special_ai_martyrdom() +{ + self endon("death"); + self endon("ai_behavior_change"); + if(!isdefined(self.special_ability)) + { + thread martyrdom_ability(); + } + + var_00 = 0; + var_01 = 0; + if(isdefined(self.aggressing) && self.aggressing) + { + var_00 = 88; + var_01 = 64; + self.goalradius = 384; + maps\_utility::enable_heat_behavior(1); + maps\_utility::disable_surprise(); + } + else + { + var_00 = 200; + var_01 = 100; + self.goalradius = 900; + } + + self setengagementmindist(var_00,var_01); + self setengagementmaxdist(512,768); + thread manage_ai_relative_to_player(4,self.goalradius,"ai_behavior_change"); +} + +//Function Number: 30 +survival_ai_martyrdom() +{ +} + +//Function Number: 31 +martyrdom_ability() +{ + self.special_ability = 1; + self.forcelongdeath = 1; + thread attach_c4("j_spine4",(0,6,0),(0,0,-90)); + thread attach_c4("tag_stowed_back",(0,1,5),(80,90,0)); + thread detonate_c4_when_dead(3,0.4); +} + +//Function Number: 32 +attach_c4(param_00,param_01,param_02) +{ + if(!isdefined(param_01)) + { + param_01 = (0,0,0); + } + + if(!isdefined(param_02)) + { + param_02 = (0,0,0); + } + + var_03 = spawn("script_model",self gettagorigin(param_00) + param_01); + var_03 setmodel("weapon_c4"); + var_03 linkto(self,param_00,param_01,param_02); + if(!isdefined(self.c4_attachments)) + { + self.c4_attachments = []; + } + + self.c4_attachments[self.c4_attachments.size] = var_03; +} + +//Function Number: 33 +detonate_c4_when_dead(param_00,param_01) +{ + common_scripts\utility::waittill_any("long_death","death","force_c4_detonate"); + self notify("c4_detonated"); + if(!isdefined(self) || !isdefined(self.c4_attachments) || self.c4_attachments.size == 0) + { + return; + } + + var_02 = get_last_attacker(); + if(isdefined(self.dog_neck_snapped)) + { + param_00 = 5; + } + + for(var_03 = 0;var_03 < self.c4_attachments.size;var_03++) + { + playfxontag(common_scripts\utility::getfx("martyrdom_dlight_red"),self.c4_attachments[var_03],"tag_fx"); + playfxontag(common_scripts\utility::getfx("martyrdom_red_blink"),self.c4_attachments[var_03],"tag_fx"); + } + + var_04 = self.c4_attachments; + self.c4_attachments = undefined; + badplace_cylinder("",param_00,var_04[0].origin,144,144,"axis","allies"); + var_05 = max(param_00 - 1.5,0); + if(var_05 > 0) + { + param_00 = param_00 - var_05; + wait var_05; + } + + var_04[0] playsound("semtex_warning"); + var_06 = 0; + if(param_00 > 0.25) + { + param_00 = param_00 - 0.25; + var_06 = 1; + } + + wait param_00; + for(var_03 = 0;var_03 < var_04.size;var_03++) + { + if(!isdefined(var_04[var_03])) + { + continue; + } + + stopfxontag(common_scripts\utility::getfx("martyrdom_red_blink"),var_04[var_03],"tag_fx"); + } + + if(var_06) + { + wait 0.25; + } + + var_04 = sortbydistance(var_04,var_04[0].origin + (0,0,-120)); + for(var_03 = 0;var_03 < var_04.size;var_03++) + { + if(!isdefined(var_04[var_03])) + { + continue; + } + + playfx(level._effect["martyrdom_c4_explosion"],var_04[var_03].origin); + var_04[var_03] playsound("detpack_explo_main","sound_done"); + physicsexplosioncylinder(var_04[var_03].origin,256,1,2); + earthquake(0.4,0.8,var_04[var_03].origin,600); + stopfxontag(common_scripts\utility::getfx("martyrdom_dlight_red"),var_04[var_03],"tag_fx"); + if(!isdefined(var_02)) + { + var_02 = undefined; + } + + var_04[var_03] radiusdamage(var_04[var_03].origin,192,100,50,var_02,"MOD_EXPLOSIVE"); + var_04[var_03] thread maps\_so_survival_code::ent_linked_delete(); + wait param_01; + } +} + +//Function Number: 34 +behavior_special_ai_claymore() +{ + if(isdefined(self.planting)) + { + return; + } + + self endon("death"); + self endon("ai_behavior_change"); + var_00 = 0; + var_01 = 0; + if(isdefined(self.aggressing) && self.aggressing) + { + var_00 = 88; + var_01 = 64; + self.goalradius = 384; + maps\_utility::enable_heat_behavior(1); + maps\_utility::disable_surprise(); + } + else + { + var_00 = 300; + var_01 = 200; + self.goalradius = 900; + } + + self setengagementmindist(var_00,var_01); + self setengagementmaxdist(512,768); + thread manage_ai_relative_to_player(4,self.goalradius,"ai_behavior_change"); +} + +//Function Number: 35 +survival_ai_claymore_and_chemical() +{ + mine_locs_populate(); + thread mine_locs_manage_weights(); + var_00 = ["claymore","chemical"]; + thread mine_locs_manage_planting(var_00); +} + +//Function Number: 36 +mine_locs_populate() +{ + level.so_mine_locs = []; + level.so_mine_locs = get_all_mine_locs(); + foreach(var_01 in level.so_mine_locs) + { + var_01.weight = 0; + } +} + +//Function Number: 37 +mine_locs_attempt_plant(param_00) +{ + if(isdefined(level.so_mines) && level.so_mines.size >= 6) + { + return 0; + } + + var_01 = []; + foreach(var_03 in param_00) + { + var_01 = common_scripts\utility::array_combine(var_01,get_special_ai_array(var_03)); + } + + var_01 = mine_ai_remove_busy(var_01); + if(!var_01.size) + { + return 0; + } + + var_05 = mine_locs_get_valid(384,2); + var_05 = mine_locs_sorted_by_weight(var_05); + foreach(var_07 in var_05) + { + foreach(var_09 in var_01) + { + var_0A = distance2d(var_07.origin,var_09.origin); + if(var_0A > 768 || var_07.origin[2] < var_09.origin[2] - 120 || var_07.origin[2] > var_09.origin[2] + 120) + { + continue; + } + + var_0B = maps\_utility::getclosest(var_07.origin,level.players); + var_0C = distance2d(var_07.origin,var_0B.origin); + if(var_0A < var_0C) + { + var_09 thread behavior_special_ai_mine_place(var_07); + return 1; + } + } + } + + return 0; +} + +//Function Number: 38 +mine_ai_remove_busy(param_00) +{ + var_01 = []; + foreach(var_03 in param_00) + { + if(!isdefined(var_03.planting)) + { + var_01[var_01.size] = var_03; + } + } + + return var_01; +} + +//Function Number: 39 +mine_locs_sorted_by_weight(param_00) +{ + for(var_01 = 0;var_01 < param_00.size - 1;var_01++) + { + var_02 = 0; + for(var_03 = var_01 + 1;var_03 < param_00.size;var_03++) + { + if(param_00[var_03].weight < param_00[var_01].weight) + { + var_04 = param_00[var_03]; + param_00[var_03] = param_00[var_01]; + param_00[var_01] = var_04; + } + } + } + + return param_00; +} + +//Function Number: 40 +mine_locs_get_valid(param_00,param_01) +{ + var_02 = []; + foreach(var_04 in level.so_mine_locs) + { + if(var_04 mine_loc_valid_plant(param_00,param_01)) + { + var_02[var_02.size] = var_04; + } + } + + return var_02; +} + +//Function Number: 41 +mine_loc_valid_plant(param_00,param_01) +{ + if(isdefined(self.occupied) || self.weight < param_01) + { + return 0; + } + + foreach(var_03 in level.players) + { + if(distance2d(self.origin,var_03.origin) < param_00) + { + return 0; + } + } + + return 1; +} + +//Function Number: 42 +mine_locs_manage_weights() +{ + level endon("special_op_terminated"); + for(;;) + { + foreach(var_01 in level.so_mine_locs) + { + var_02 = 0; + foreach(var_04 in level.players) + { + if(distance2d(var_01.origin,var_04.origin) <= 512) + { + var_01 mine_loc_adjust_weight(1); + var_02 = 1; + } + } + + if(!var_02) + { + var_01 mine_loc_adjust_weight(0); + } + } + + wait 0.5; + } +} + +//Function Number: 43 +mine_loc_adjust_weight(param_00) +{ + if(param_00) + { + self.weight = min(20,self.weight + 0.5); + return; + } + + self.weight = max(0,self.weight - 0.025); +} + +//Function Number: 44 +mine_locs_manage_planting(param_00) +{ + level endon("special_op_terminated"); + for(;;) + { + if(mine_locs_attempt_plant(param_00)) + { + wait 8; + continue; + } + + wait 2; + } +} + +//Function Number: 45 +behavior_special_ai_mine_place(param_00) +{ + self endon("death"); + self.planting = 1; + self notify("ai_behavior_change"); + param_00.occupied = 1; + thread mine_ai_planting_death(param_00); + var_01 = self.goalradius; + self.goalradius = 48; + self.ignoreall = 1; + self.ignoreme = 1; + self setgoalpos(param_00.origin); + var_02 = common_scripts\utility::waittill_any_timeout(13,"goal","bad_path"); + if(var_02 != "goal") + { + param_00.occupied = undefined; + if(var_02 == "bad_path") + { + level.so_mine_locs = maps\_utility::array_remove_nokeys(level.so_mine_locs,param_00); + } + } + else + { + self allowedstances("crouch"); + wait 1; + var_03 = undefined; + var_04 = get_ai_type_ref(); + if(var_04 == "claymore") + { + var_03 = claymore_create(param_00.origin,param_00.angles); + var_03 playsound("so_claymore_plant"); + var_03 thread claymore_on_trigger(); + var_03 thread claymore_on_damage(); + var_03 thread claymore_on_emp(); + level notify("ai_claymore_planted"); + } + else if(var_04 == "chemical") + { + var_03 = chembomb_create(param_00.origin,param_00.angles); + var_03 playsound("so_claymore_plant"); + var_03 thread chembomb_on_trigger(); + var_03 thread chembomb_on_damage(); + level notify("ai_chembomb_planted"); + } + else + { + } + + if(isdefined(var_03)) + { + if(!isdefined(level.so_mines)) + { + level.so_mines = []; + } + + level.so_mines[level.so_mines.size] = var_03; + var_03 thread mine_on_death(param_00); + wait 0.25; + param_00.weight = param_00.weight * 0.5; + } + } + + self allowedstances("prone","crouch","stand"); + self.goalradius = var_01; + self.ignoreall = 0; + self.ignoreme = 0; + self.planting = undefined; + self notify("planting_done"); + var_04 = get_ai_type_ref(); + if(var_04 == "claymore") + { + thread behavior_special_ai_claymore(); + return; + } + + if(var_04 == "chemical") + { + thread behavior_special_ai_chemical(); + } +} + +//Function Number: 46 +mine_ai_planting_death(param_00) +{ + self endon("planting_done"); + level endon("special_op_terminated"); + self waittill("death"); + param_00.occupied = undefined; +} + +//Function Number: 47 +claymore_create(param_00,param_01,param_02) +{ + var_03 = spawn("script_model",param_00); + var_03 setmodel("weapon_claymore"); + if(!isdefined(param_02) || param_02) + { + var_03.origin = maps\_utility::drop_to_ground(param_00,12,-120); + } + + var_03.angles = (0,param_01[1],0); + playfxontag(common_scripts\utility::getfx("claymore_laser"),var_03,"tag_fx"); + if(isdefined(self) && isalive(self)) + { + var_03.owner = self; + } + + return var_03; +} + +//Function Number: 48 +claymore_on_trigger() +{ + self endon("death"); + level endon("special_op_terminated"); + var_00 = 6; + var_01 = spawn("trigger_radius",self.origin + (0,0,-192),var_00,192,384); + thread mine_delete_on_death(var_01); + for(;;) + { + var_01 waittill("trigger",var_02); + if(isdefined(self.owner) && var_02 == self.owner) + { + continue; + } + + if(isdefined(self.disabled)) + { + self waittill("enabled"); + continue; + } + + if(var_02 claymore_on_trigger_laser_check(self)) + { + self notify("triggered"); + claymore_detonate(0.75); + return; + } + } +} + +//Function Number: 49 +claymore_on_trigger_laser_check(param_00) +{ + if(isdefined(param_00.disabled)) + { + return 0; + } + + var_01 = self.origin + (0,0,32); + var_02 = var_01 - param_00.origin; + var_03 = anglestoforward(param_00.angles); + var_04 = vectordot(var_02,var_03); + if(var_04 < 20) + { + return 0; + } + + var_02 = vectornormalize(var_02); + var_05 = vectordot(var_02,var_03); + if(!isdefined(level.so_claymore_trig_dot)) + { + level.so_claymore_trig_dot = cos(70); + } + + return var_05 > level.so_claymore_trig_dot; +} + +//Function Number: 50 +claymore_detonate(param_00) +{ + if(isdefined(self.so_claymore_activated)) + { + return; + } + + self.so_claymore_activated = 1; + level endon("special_op_terminated"); + self playsound("claymore_activated_SP"); + if(isdefined(param_00) && param_00 > 0) + { + wait param_00; + } + + self playsound("detpack_explo_main","sound_done"); + playfx(level._effect["claymore_explosion"],self.origin); + physicsexplosioncylinder(self.origin,256,1,2); + earthquake(0.4,0.8,self.origin,600); + stopfxontag(common_scripts\utility::getfx("claymore_laser"),self,"tag_fx"); + radiusdamage(self.origin,192,100,50,undefined,"MOD_EXPLOSIVE"); + level.so_mine_last_detonate_time = gettime(); + if(isdefined(self)) + { + self delete(); + } +} + +//Function Number: 51 +mine_delete_on_death(param_00) +{ + level endon("special_op_terminated"); + self waittill("death"); + level.so_mines = maps\_utility::array_remove_nokeys(level.so_mines,self); + wait 0.05; + if(isdefined(param_00)) + { + param_00 delete(); + } +} + +//Function Number: 52 +claymore_on_damage() +{ + self endon("death"); + self endon("triggered"); + level endon("special_op_terminated"); + self.health = 100; + self setcandamage(1); + self.maxhealth = 100000; + self.health = self.maxhealth; + self waittill("damage",var_00,var_01); + var_02 = 0.05; + if(mine_so_detonated_recently()) + { + var_02 = 0.1 + randomfloat(0.4); + } + + claymore_detonate(var_02); +} + +//Function Number: 53 +mine_so_detonated_recently() +{ + return isdefined(level.so_mine_last_detonate_time) && gettime() - level.so_mine_last_detonate_time < 400; +} + +//Function Number: 54 +claymore_on_emp() +{ + self endon("death"); + self endon("triggered"); + level endon("special_op_terminated"); + for(;;) + { + self waittill("emp_damage",var_00,var_01); + playfxontag(common_scripts\utility::getfx("claymore_disabled"),self,"tag_origin"); + self.disabled = 1; + self notify("disabled"); + wait var_01; + self.disabled = undefined; + self notify("enabled"); + } +} + +//Function Number: 55 +mine_on_death(param_00) +{ + level endon("special_op_terminated"); + self waittill("death"); + param_00.occupied = undefined; +} + +//Function Number: 56 +behavior_special_ai_chemical() +{ + if(isdefined(self.planting)) + { + return; + } + + self endon("death"); + self endon("ai_behavior_change"); + if(!isdefined(self.special_ability)) + { + thread chemical_ability(); + } + + var_00 = 0; + var_01 = 0; + if(isdefined(self.aggressing) && self.aggressing) + { + var_00 = 88; + var_01 = 64; + self.goalradius = 384; + maps\_utility::enable_heat_behavior(1); + maps\_utility::disable_surprise(); + } + else + { + var_00 = 120; + var_01 = 60; + self.goalradius = 512; + } + + self setengagementmindist(var_00,var_01); + self setengagementmaxdist(512,768); + thread manage_ai_relative_to_player(4,self.goalradius,"ai_behavior_change"); +} + +//Function Number: 57 +chemical_ability() +{ + self.special_ability = 1; + self.ignoresuppression = 1; + self.no_pistol_switch = 1; + self.norunngun = 1; + self.disableexits = 1; + self.disablearrivals = 1; + self.disablebulletwhizbyreaction = 1; + self.combatmode = "no_cover"; + self.neversprintforvariation = 1; + maps\_utility::disable_long_death(); + maps\_utility::disable_surprise(); + var_00 = chemical_ability_attach_tank("tag_shield_back",(0,0,0),(0,90,0)); + thread chemical_ability_tank_spew(var_00); + thread chemical_ability_on_tank_damage(var_00); + thread chemical_ability_on_death(var_00); +} + +//Function Number: 58 +chemical_ability_attach_tank(param_00,param_01,param_02) +{ + var_03 = spawn("script_model",self gettagorigin(param_00) + param_01); + var_03 setmodel("gas_canisters_backpack"); + var_03.health = 99999; + var_03 setcandamage(1); + var_03 linkto(self,param_00,param_01,param_02); + return var_03; +} + +//Function Number: 59 +chemical_ability_tank_spew(param_00) +{ + self endon("death"); + param_00 endon("death"); + for(;;) + { + playfxontag(common_scripts\utility::getfx("chemical_tank_smoke"),self,"tag_shield_back"); + wait 0.05; + } +} + +//Function Number: 60 +chemical_ability_on_tank_damage(param_00) +{ + self endon("death"); + self endon("tank_detonated"); + level endon("special_op_terminated"); + for(;;) + { + param_00 waittill("damage",var_01,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09,var_0A); + if(isplayer(var_02) || var_05 == "MOD_EXPLOSIVE" || var_05 == "MOD_GRENADE" || var_05 == "MOD_GRENADE_SPLASH") + { + thread maps\_so_survival_code::so_survival_kill_ai(var_02,var_05,var_0A); + return; + } + } +} + +//Function Number: 61 +chemical_ability_on_death(param_00) +{ + self endon("tank_detonated"); + level endon("special_op_terminated"); + self waittill("death",var_01); + if(!isdefined(self)) + { + if(isdefined(param_00)) + { + wait 0.05; + param_00 delete(); + } + + return; + } + + thread chemical_ability_detonate(param_00,var_01); +} + +//Function Number: 62 +chemical_ability_detonate(param_00,param_01) +{ + if(!isdefined(param_00) || isdefined(param_00.detonated)) + { + return; + } + + param_00.detonated = 1; + if(!isdefined(self)) + { + return; + } + + self notify("tank_detonated"); + var_02 = self.origin; + param_00 playsound("detpack_explo_main","sound_done"); + physicsexplosioncylinder(var_02,256,1,0.5); + earthquake(0.2,0.4,var_02,600); + param_01 = common_scripts\utility::ter_op(isdefined(param_01),param_01,undefined); + playfx(common_scripts\utility::getfx("chemical_tank_explosion"),var_02); + thread chemical_ability_gas_cloud(var_02,6,2); + param_00 unlink(); + wait 0.05; + param_00 delete(); +} + +//Function Number: 63 +chemical_ability_gas_cloud(param_00,param_01,param_02) +{ + level endon("special_op_terminated"); + var_03 = 7; + var_04 = spawn("trigger_radius",param_00 + (0,0,-96),var_03,96,192); + badplace_cylinder("",param_02,param_00,96,96,"axis","allies"); + var_04 endon("smoke_done"); + var_04 thread wait_for_delete(); + var_04 thread maps\_utility::do_in_order(::maps\_utility::_wait,param_01,::maps\_utility::send_notify,"smoke_done"); + for(;;) + { + var_04 waittill("trigger",var_05); + if(!isdefined(var_05) || !isalive(var_05)) + { + continue; + } + + if(isplayer(var_05)) + { + if(maps\_utility::is_player_down(var_05) || maps\_utility::is_player_down_and_out(var_05)) + { + continue; + } + + if(isdefined(var_05.gassed)) + { + continue; + } + + var_06 = ""; + var_07 = gettime(); + if(!isdefined(var_05.gassed_before) || isdefined(var_05.gas_time) && var_07 - var_05.gas_time > 1500) + { + var_06 = "radiation_low"; + } + else if(var_05.gas_shock == "radiation_low") + { + var_06 = "radiation_med"; + } + else + { + var_06 = "radiation_high"; + } + + var_05.gassed_before = 1; + var_05.gas_shock = var_06; + var_05.gas_time = var_07; + var_05 shellshock(var_06,1.5); + var_05.gassed = 1; + var_05 thread chemical_ability_remove_gas_flag(1); + } + + if(isai(var_05)) + { + } + } +} + +//Function Number: 64 +wait_for_delete() +{ + level endon("special_op_terminated"); + self waittill("smoke_done"); + self delete(); +} + +//Function Number: 65 +chemical_ability_remove_gas_flag(param_00) +{ + self endon("death"); + wait param_00; + self.gassed = undefined; +} + +//Function Number: 66 +chembomb_create(param_00,param_01,param_02) +{ + var_03 = spawn("script_model",param_00); + var_03 setmodel("ims_scorpion_explosive1"); + if(!isdefined(param_02) || param_02) + { + var_03.origin = maps\_utility::drop_to_ground(param_00,12,-120) + (0,0,5); + } + + var_03.angles = (0,param_01[1],0); + var_03.tag_origin = var_03 common_scripts\utility::spawn_tag_origin(); + var_03.tag_origin linkto(var_03,"tag_explosive1",(0,0,6),(-90,0,0)); + playfxontag(common_scripts\utility::getfx("chemical_mine_spew"),var_03.tag_origin,"tag_origin"); + if(isdefined(self) && isalive(self)) + { + var_03.owner = self; + } + + return var_03; +} + +//Function Number: 67 +chembomb_on_trigger() +{ + self endon("death"); + level endon("special_op_terminated"); + var_00 = 6; + var_01 = spawn("trigger_radius",self.origin + (0,0,-96),var_00,96,192); + thread mine_delete_on_death(var_01); + for(;;) + { + var_01 waittill("trigger",var_02); + if(isdefined(self.owner) && var_02 == self.owner) + { + continue; + } + + if(isdefined(self.disabled)) + { + self waittill("enabled"); + continue; + } + + self notify("triggered"); + chembomb_detonate(0.5); + } +} + +//Function Number: 68 +chembomb_on_damage() +{ + self endon("death"); + self endon("triggered"); + level endon("special_op_terminated"); + self.health = 100; + self setcandamage(1); + self.maxhealth = 100000; + self.health = self.maxhealth; + self waittill("damage",var_00,var_01); + var_02 = 0.05; + if(mine_so_detonated_recently()) + { + var_02 = 0.1 + randomfloat(0.4); + } + + chembomb_detonate(var_02); +} + +//Function Number: 69 +chembomb_detonate(param_00) +{ + if(isdefined(self.chembomb_activated)) + { + return; + } + + self.chembomb_activated = 1; + level endon("special_op_terminated"); + self playsound("claymore_activated_SP"); + if(isdefined(param_00) && param_00 > 0) + { + wait param_00; + } + + level.so_mine_last_detonate_time = gettime(); + self playsound("detpack_explo_main","sound_done"); + physicsexplosioncylinder(self.origin,256,1,0.5); + earthquake(0.2,0.4,self.origin,600); + playfx(common_scripts\utility::getfx("chemical_tank_explosion"),self.origin); + stopfxontag(common_scripts\utility::getfx("chemical_mine_spew"),self.tag_origin,"tag_origin"); + thread chemical_ability_gas_cloud(self.origin,6,1); + self.tag_origin delete(); + wait 0.05; + if(isdefined(self)) + { + self delete(); + } +} + +//Function Number: 70 +dog_relocate_init() +{ + level.dog_reloc_trig_array = getentarray("dog_relocate","targetname"); + if(!isdefined(level.dog_reloc_trig_array) || level.dog_reloc_trig_array.size == 0) + { + return; + } + + foreach(var_01 in level.dog_reloc_trig_array) + { + var_02 = common_scripts\utility::getstruct(var_01.target,"targetname"); + var_01.reloc_origin = var_02.origin; + var_01 thread dog_reloc_monitor(); + } +} + +//Function Number: 71 +dog_reloc_monitor() +{ + level endon("special_op_terminated"); + for(;;) + { + self waittill("trigger",var_00); + while(var_00 istouching(self)) + { + var_00.dog_reloc = self.reloc_origin; + wait 0.05; + } + + var_00.dog_reloc = undefined; + } +} + +//Function Number: 72 +spawn_dogs(param_00,param_01) +{ + level endon("special_op_terminated"); + level endon("wave_ended"); + if(!isdefined(param_00) || param_00 == "" || !isdefined(param_01) || !param_01) + { + return; + } + + level.dogs = []; + var_02 = []; + foreach(var_04 in level.players) + { + var_02[var_02.size] = var_04; + } + + var_06 = getentarray("dog_spawner","targetname")[0]; + level.dogs_attach_c4 = isdefined(param_00) && param_00 == "dog_splode"; + var_06 maps\_utility::add_spawn_function(::dog_setup); + var_06 maps\_utility::add_spawn_function(::dog_seek_player); + var_06 maps\_utility::add_spawn_function(::dog_register_death); + for(var_07 = 0;var_07 < param_01;var_07++) + { + var_08 = maps\_so_survival_code::get_furthest_from_these(level.wave_spawn_locs,var_02,4); + var_06.count = 1; + var_06.origin = var_08.origin; + var_06.angles = var_08.angles; + var_09 = int(40 + randomint(10) / param_01); + level.survival_dog_spawning = 1; + var_0A = var_06 maps\_utility::spawn_ai(1); + var_0A.ally_ref = get_ai_struct(param_00); + var_0A setthreatbiasgroup("dogs"); + var_0A [[ level.var_3B89 ]](); + var_0A.canclimbladders = 0; + level.dogs[level.dogs.size] = var_0A; + level.survival_dog_spawning = undefined; + if(!common_scripts\utility::flag("aggressive_mode")) + { + common_scripts\utility::waittill_any_timeout(var_09,"aggressive_mode"); + } + + wait 0.05; + } +} + +//Function Number: 73 +dog_setup() +{ + self.badplaceawareness = 0; + self.grenadeawareness = 0; + if(isdefined(level.dogs_attach_c4) && level.dogs_attach_c4) + { + thread attach_c4("j_hip_base_ri",(6,6,-3),(0,0,0)); + thread attach_c4("j_hip_base_le",(-6,-6,3),(0,0,0)); + thread detonate_c4_when_dead(3,0.4); + thread dog_detonate_c4_near_sentry(); + } +} + +//Function Number: 74 +dog_detonate_c4_near_sentry() +{ + level endon("special_op_terminated"); + self endon("death"); + self endon("c4_detonated"); + var_00 = self.origin; + var_01 = self.origin; + var_02 = gettime(); + for(;;) + { + wait 0.2; + var_01 = self.origin; + var_03 = gettime(); + if(distancesquared(var_01,var_00) > squared(10) || animscripts/dog/dog_combat::func_3B2A()) + { + var_00 = var_01; + var_02 = var_03; + } + + if(!isdefined(level.placed_sentry) || !level.placed_sentry.size) + { + continue; + } + + if(var_03 - var_02 < 2000) + { + continue; + } + + var_04 = 0; + foreach(var_06 in level.placed_sentry) + { + if(isdefined(var_06.carrier)) + { + continue; + } + + if(distancesquared(var_01,var_06.origin) < squared(40)) + { + var_04 = 1; + break; + } + } + + if(var_04) + { + break; + } + else + { + var_00 = var_01; + var_02 = var_03; + } + } + + self notify("stop_dog_seek_player"); + self.ignoreall = 1; + self setgoalpos(self.origin); + self notify("force_c4_detonate"); +} + +//Function Number: 75 +dog_register_death() +{ + self waittill("death"); + level.dogs = dog_get_living(); +} + +//Function Number: 76 +dog_seek_player() +{ + level endon("special_op_terminated"); + level endon("wave_ended"); + self endon("death"); + self endon("stop_dog_seek_player"); + self.moveplaybackrate = 0.75; + self.goalheight = 80; + self.goalradius = 300; + var_00 = 1; + for(;;) + { + var_01 = maps\_utility::get_closest_player_healthy(self.origin); + if(!isdefined(var_01)) + { + var_01 = maps\_utility::get_closest_player(self.origin); + } + + if(isdefined(var_01)) + { + var_02 = self cansee(var_01); + var_03 = distancesquared(self.origin,var_01.origin); + if(isdefined(var_01.dog_reloc)) + { + self setgoalpos(var_01.dog_reloc); + } + else if((!var_02 || var_03 > 1048576) && isdefined(var_01.node_closest)) + { + self setgoalpos(var_01.node_closest.origin); + self.goalradius = 24; + } + else + { + self setgoalpos(var_01.origin); + self.goalradius = 384; + } + } + + wait var_00; + } +} + +//Function Number: 77 +dog_get_count() +{ + var_00 = dog_get_living().size; + if(isdefined(level.survival_dog_spawning)) + { + var_00++; + } + + return var_00; +} + +//Function Number: 78 +dog_get_living() +{ + if(!isdefined(level.dogs)) + { + level.dogs = []; + return level.dogs; + } + + var_00 = []; + foreach(var_02 in level.dogs) + { + if(isdefined(var_02) && isalive(var_02)) + { + var_00[var_00.size] = var_02; + } + } + + return var_00; +} + +//Function Number: 79 +survival_boss_juggernaut() +{ +} + +//Function Number: 80 +is_juggernaut_used(param_00) +{ + foreach(var_02 in param_00) + { + if(issubstr(var_02,"jug_")) + { + return 1; + } + } + + return 0; +} + +//Function Number: 81 +spawn_juggernaut(param_00,param_01) +{ + level endon("special_op_terminated"); + var_02 = drop_jug_by_chopper(param_00,param_01); + if(!isdefined(var_02)) + { + return; + } + + var_02.ally_ref = get_ai_struct(param_00); + var_02.kill_assist_xp = int(get_ai_xp(param_00) * 0.2); + var_02 maps\_so_survival_loot::loot_roll(0); + level.bosses[level.bosses.size] = var_02; + var_02 waittill("jumpedout"); + level notify("juggernaut_jumpedout"); + var_02 thread survival_boss_behavior(); + var_02 thread maps\_so_survival_code::clear_from_boss_array_when_dead(); +} + +//Function Number: 82 +drop_jug_by_chopper(param_00,param_01) +{ + var_02 = maps\_so_survival_code::get_spawners_by_targetname(param_00)[0]; + var_02 maps\_utility::add_spawn_function(::money_fx_on_death); + var_03 = maps\_so_survival_code::chopper_spawn_from_targetname_and_drive("jug_drop_chopper",param_01.origin,param_01); + var_03 thread maps\_chopperboss::chopper_path_release("reached_dynamic_path_end death deathspin"); + var_03 maps\_vehicle::godon(); + var_03.script_vehicle_selfremove = 1; + var_03 vehicle_setspeed(60 + randomint(15),30,30); + var_03 thread maps\_so_survival_code::chopper_drop_smoke_at_unloading(); + var_03 maps\_so_survival_code::chopper_spawn_pilot_from_targetname("jug_drop_chopper_pilot"); + var_04 = var_03 maps\_so_survival_code::chopper_spawn_passenger(var_02); + var_04 maps\_utility::deletable_magic_bullet_shield(); + var_04 thread maps\_utility::do_in_order(::common_scripts\utility::waittill_any,"jumpedout",::maps\_utility::stop_magic_bullet_shield); + var_04 setthreatbiasgroup("boss"); + return var_04; +} + +//Function Number: 83 +progressive_damaged() +{ + self endon("death"); + self endon("new_jug_behavior"); + for(;;) + { + if(self.health <= 250) + { + self.walkdist = 500; + self.walkdistfacingmotion = 500; + } + else + { + self.walkdist = 1000; + self.walkdistfacingmotion = 1000; + } + + wait 0.05; + } +} + +//Function Number: 84 +damage_factor() +{ + self endon("death"); + self endon("new_jug_behavior"); + self.bullet_resistance = 0; + for(;;) + { + self waittill("damage",var_00,var_01,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09); + if(isdefined(self.magic_bullet_shield)) + { + continue; + } + + var_0A = 0; + var_0B = 0; + if(isdefined(var_01) && isai(var_01) && self.team != var_01.team) + { + var_0A = dmg_factor_calc(var_00,self.dmg_factor["ai_damage"]); + } + else if(var_04 == "MOD_MELEE") + { + if(isdefined(var_01) && isplayer(var_01) && isdefined(var_09) && issubstr(var_09,"riotshield_so")) + { + var_0A = dmg_factor_calc(var_00,self.dmg_factor["melee_riotshield"]); + } + else + { + var_0A = dmg_factor_calc(var_00,self.dmg_factor["melee"]); + } + } + else if(var_04 == "MOD_EXPLOSIVE" || var_04 == "MOD_GRENADE" || var_04 == "MOD_GRENADE_SPLASH" || var_04 == "MOD_PROJECTILE" || var_04 == "MOD_PROJECTILE_SPLASH") + { + var_0A = dmg_factor_calc(var_00,self.dmg_factor["explosive"]); + } + else if(maps\_so_survival_code::was_headshot()) + { + var_0A = dmg_factor_calc(var_00,self.dmg_factor["headshot"]); + var_0B = 1; + } + else + { + var_0A = dmg_factor_calc(var_00,self.dmg_factor["bodyshot"]); + } + + var_0A = int(var_0A); + if(var_0A < 0 && abs(var_0A) >= self.health) + { + if(var_0B) + { + self.died_of_headshot = 1; + } + + thread maps\_so_survival_code::so_survival_kill_ai(var_01,var_04,var_09); + } + else + { + self.health = self.health + var_0A; + } + + self notify("dmg_factored"); + } +} + +//Function Number: 85 +dmg_factor_calc(param_00,param_01) +{ + var_02 = 0; + if(isdefined(param_01) && param_01) + { + var_02 = int(param_00 * 1 - param_01); + } + + return var_02; +} + +//Function Number: 86 +global_jug_behavior() +{ + self.dmg_factor["headshot"] = 1; + self.dmg_factor["bodyshot"] = 1; + self.dmg_factor["melee"] = 1; + self.dmg_factor["melee_riotshield"] = 1; + self.dmg_factor["explosive"] = 1; + self.dmg_factor["ai_damage"] = 1; + self.dropweapon = 0; + self.minpaindamage = 350; + maps\_utility::set_battlechatter(0); + self.aggressing = 1; + self.dontmelee = undefined; + self.meleealwayswin = 1; + thread damage_factor(); + thread progressive_damaged(); +} + +//Function Number: 87 +boss_jug_helmet_pop(param_00,param_01) +{ + self endon("death"); + var_02 = self.health; + if(isdefined(self.ally_ref)) + { + var_02 = get_ai_health(self.ally_ref.ref); + } + + for(;;) + { + if(self.health / var_02 <= param_00) + { + animscripts/death::func_D17(); + var_03 = self.dmg_factor.size; + self.dmg_factor = maps\_utility::array_combine_keys(self.dmg_factor,param_01); + return; + } + + self waittill("dmg_factored"); + } +} + +//Function Number: 88 +boss_jug_regular() +{ + self.dmg_factor["headshot"] = 0.75; + self.dmg_factor["bodyshot"] = 0.33; + self.dmg_factor["melee"] = 0.25; + self.dmg_factor["melee_riotshield"] = 0.25; + self.dmg_factor["explosive"] = 0.33; + self.dmg_factor["ai_damage"] = 0.33; + self setengagementmindist(100,60); + self setengagementmaxdist(512,768); + self.goalradius = 128; + self.goalheight = 81; + thread manage_ai_relative_to_player(2,self.goalradius,"new_jug_behavior","stop_hunting"); +} + +//Function Number: 89 +boss_jug_headshot() +{ + self.dmg_factor["headshot"] = 1; + self.dmg_factor["bodyshot"] = 0.33; + self.dmg_factor["melee"] = 0.25; + self.dmg_factor["melee_riotshield"] = 0.25; + self.dmg_factor["explosive"] = 1; + self.dmg_factor["ai_damage"] = 0.25; + self setengagementmindist(100,60); + self setengagementmaxdist(512,768); + self.goalradius = 128; + self.goalheight = 81; + thread manage_ai_relative_to_player(2,self.goalradius,"new_jug_behavior","stop_hunting"); +} + +//Function Number: 90 +boss_jug_explosive() +{ + self.dmg_factor["headshot"] = 0.33; + self.dmg_factor["bodyshot"] = 0.25; + self.dmg_factor["melee"] = 0.25; + self.dmg_factor["melee_riotshield"] = 0.25; + self.dmg_factor["explosive"] = 0.33; + self.dmg_factor["ai_damage"] = 0.25; + self setengagementmindist(100,60); + self setengagementmaxdist(512,768); + self.goalradius = 128; + self.goalheight = 81; + thread manage_ai_relative_to_player(2,self.goalradius,"new_jug_behavior","stop_hunting"); +} + +//Function Number: 91 +boss_jug_riotshield() +{ + self endon("death"); + self endon("riotshield_damaged"); + self.dmg_factor["headshot"] = 0.75; + self.dmg_factor["bodyshot"] = 0.75; + self.dmg_factor["melee"] = 0.33; + self.dmg_factor["melee_riotshield"] = 0.33; + self.dmg_factor["explosive"] = 1; + self.dmg_factor["ai_damage"] = 0.25; + if(getdvarint("survival_chaos") != 1) + { + self.dropriotshield = 1; + } + + subclass_juggernaut_riotshield(); + if(getdvarint("survival_chaos") != 1) + { + thread juggernaut_abandon_shield(); + } + + if(1) + { + self.shieldbulletblocklimit = 9999; + } + + self setengagementmindist(100,60); + self setengagementmaxdist(512,768); + self.goalradius = 128; + self.goalheight = 81; + self.usechokepoints = 0; + thread manage_ai_relative_to_player(2,self.goalradius,"new_jug_behavior","stop_hunting"); + thread juggernaut_manage_min_pain_damage(); +} + +//Function Number: 92 +juggernaut_manage_min_pain_damage() +{ + self endon("death"); + for(;;) + { + if(self.health <= 250) + { + self.minpaindamage = 250; + } + else + { + self.minpaindamage = 350; + } + + wait 0.05; + } +} + +//Function Number: 93 +subclass_juggernaut_riotshield() +{ + self.juggernaut = 1; + self.doorflashchance = 0.05; + self.aggressivemode = 1; + self.ignoresuppression = 1; + self.no_pistol_switch = 1; + self.norunngun = 1; + self.disablearrivals = 1; + self.disablebulletwhizbyreaction = 1; + self.combatmode = "no_cover"; + self.neversprintforvariation = 1; + self.a.disablelongdeath = 1; + self.pathenemyfightdist = 128; + self.pathenemylookahead = 128; + maps\_utility::disable_turnanims(); + maps\_utility::disable_surprise(); + self.meleealwayswin = 1; + if(!self isbadguy()) + { + return; + } + + level notify("juggernaut_spawned"); + thread subclass_juggernaut_death(); +} + +//Function Number: 94 +juggernaut_abandon_shield() +{ + self endon("death"); + thread juggernaut_abandon_shield_low_health(0.5); + self waittill("riotshield_damaged"); + wait 0.05; + ai_drop_riotshield(); + if(!isalive(self)) + { + return; + } + + animscripts/riotshield/riotshield::func_3AD4(); + thread maps\_juggernaut::subclass_juggernaut(); + self notify("new_jug_behavior"); + global_jug_behavior(); + thread boss_jug_regular(); +} + +//Function Number: 95 +juggernaut_abandon_shield_low_health(param_00) +{ + self endon("death"); + self endon("riotshield_damaged"); + var_01 = self.health; + if(isdefined(self.ally_ref)) + { + var_01 = get_ai_health(self.ally_ref.ref); + } + + for(;;) + { + self waittill("damage"); + if(self.health / var_01 <= param_00) + { + self notify("riotshield_damaged"); + return; + } + } +} + +//Function Number: 96 +subclass_juggernaut_death() +{ + self endon("new_jug_behavior"); + self waittill("death",var_00); + if(getdvarint("survival_chaos") != 1) + { + ai_drop_riotshield(); + } + + level notify("juggernaut_died"); + if(!isdefined(self)) + { + return; + } + + if(!isdefined(var_00)) + { + return; + } + + if(!isplayer(var_00)) + { + } +} + +//Function Number: 97 +survival_boss_chopper() +{ + level.chopper_boss_min_dist2d = 128; + maps\_chopperboss::chopper_boss_locs_populate("script_noteworthy","so_chopper_boss_path_struct"); +} + +//Function Number: 98 +survival_drop_chopper_init() +{ + var_00 = common_scripts\utility::getstructarray("drop_path_start","targetname"); + foreach(var_02 in var_00) + { + var_03 = var_02; + while(isdefined(var_03)) + { + if(isdefined(var_03.script_unload)) + { + var_03.ground_pos = maps\_utility::groundpos(var_03.origin); + break; + } + + if(isdefined(var_03.target)) + { + var_03 = common_scripts\utility::getstruct(var_03.target,"targetname"); + continue; + } + + break; + } + } +} + +//Function Number: 99 +spawn_chopper_boss(param_00,param_01) +{ + level endon("special_op_terminated"); + var_02 = maps\_so_survival_code::chopper_spawn_from_targetname(param_00,param_01.origin); + var_02 maps\_so_survival_code::chopper_spawn_pilot_from_targetname("jug_drop_chopper_pilot"); + var_02 thread maps\_remotemissile_utility::setup_remote_missile_target(); + var_02.ally_ref = get_ai_struct(param_00); + var_02 [[ level.var_3B89 ]](); + if(isdefined(level.xp_enable) && level.xp_enable) + { + var_02 thread maps\_rank::ai_xp_init(); + } + + var_02.kill_assist_xp = int(get_ai_xp(param_00) * 0.2); + level.bosses[level.bosses.size] = var_02; + var_02 thread maps\_chopperboss::chopper_boss_behavior_little_bird(param_01); + var_02 thread maps\_chopperboss::chopper_path_release("death deathspin"); + var_02 thread maps\_so_survival_code::clear_from_boss_array_when_dead(); + var_02 setthreatbiasgroup("boss"); + setthreatbias("sentry","boss",1500); + foreach(var_04 in var_02.mgturret) + { + var_04 setbottomarc(90); + } + + return var_02; +} + +//Function Number: 100 +spawn_ally_team(param_00,param_01,param_02,param_03) +{ + var_04 = []; + var_05 = maps\_so_survival_code::get_spawners_by_targetname(param_00)[0]; + if(!isdefined(var_05)) + { + return var_04; + } + + var_06 = maps\_so_survival_code::chopper_spawn_from_targetname_and_drive("ally_drop_chopper",param_02.origin,param_02); + var_06 thread maps\_chopperboss::chopper_path_release("reached_dynamic_path_end death deathspin"); + var_06 maps\_vehicle::godon(); + var_06 vehicle_setspeed(60 + randomint(15),30,30); + var_06.script_vehicle_selfremove = 1; + var_06 endon("death"); + var_06 maps\_so_survival_code::chopper_spawn_pilot_from_targetname("friendly_support_delta"); + for(var_07 = 0;var_07 < param_01;var_07++) + { + var_08 = var_06 maps\_so_survival_code::chopper_spawn_passenger(var_05,var_07 + 2); + var_08 maps\_utility::set_battlechatter(0); + var_08 maps\_utility::deletable_magic_bullet_shield(); + var_08 thread ally_remove_bullet_shield(20,"jumpedout"); + var_08 setthreatbiasgroup("allies"); + var_08.ignoreme = 1; + var_08.ally_ref = get_ai_struct(param_00); + var_08 [[ level.var_3B89 ]](); + var_08 thread setup_ai_weapon(); + var_08.owner = param_03; + var_04[var_04.size] = var_08; + var_08.var_6C1 = "allies"; + if(param_00 == "friendly_support_delta") + { + var_08.headicon = "headicon_delta_so"; + } + + if(param_00 == "friendly_support_riotshield") + { + var_08.headicon = "headicon_gign_so"; + } + + var_08.drawoncompass = 0; + wait 0.05; + } + + var_06 thread ally_team_setup(var_04); + return var_04; +} + +//Function Number: 101 +_geteye() +{ + if(isdefined(self) && isalive(self)) + { + return self geteye(); + } + + return undefined; +} + +//Function Number: 102 +ally_team_setup(param_00) +{ + self endon("death"); + self waittill("unloaded"); + common_scripts\utility::array_thread(param_00,::ally_setup); +} + +//Function Number: 103 +ally_setup() +{ + if(!isdefined(self) || !isalive(self)) + { + return; + } + + self setengagementmindist(300,200); + self setengagementmaxdist(512,768); + self.goalradius = 512; + if(isdefined(self.ally_ref) && issubstr(self.ally_ref.ref,"riotshield")) + { + self.goalradius = 448; + self setengagementmindist(200,100); + self setengagementmaxdist(512,768); + thread drop_riotshield_think(); + thread ally_manage_min_pain_damage(300); + } + else + { + thread ally_manage_min_pain_damage(150); + } + + self.ignoreme = 0; + self.fixednode = 0; + self.dropweapon = 0; + self.dropriotshield = 1; + self.drawoncompass = 1; + maps\_utility::set_battlechatter(1); + self pushplayer(0); + self.bullet_resistance = 30; + thread ally_on_death(); + thread manage_ai_relative_to_player(4,self.goalradius); +} + +//Function Number: 104 +ally_manage_min_pain_damage(param_00) +{ + self endon("death"); + for(;;) + { + self.minpaindamage = param_00; + wait 0.05; + } +} + +//Function Number: 105 +drop_riotshield_think() +{ + self endon("death"); + common_scripts\utility::waittill_any_return("riotshield_damaged","dog_attacks_ai"); + wait 0.05; + ai_drop_riotshield(); + if(!isalive(self)) + { + return; + } + + animscripts/riotshield/riotshield::func_3AD4(); +} + +//Function Number: 106 +ally_remove_bullet_shield(param_00,param_01) +{ + self endon("death"); + if(isdefined(param_01)) + { + self waittill(param_01); + } + + wait param_00; + maps\_utility::stop_magic_bullet_shield(); +} + +//Function Number: 107 +ally_on_death() +{ + self waittill("death"); + if(isdefined(self.owner) && isalive(self.owner)) + { + self.owner notify("ally_died"); + } + + ai_drop_riotshield(); +} + +//Function Number: 108 +setup_ai_weapon() +{ + waittillframeend; + if(isdefined(self.team) && self.team == "axis") + { + maps\_so_survival_loot::loot_roll(); + } + + if(isdefined(level.coop_incap_weapon)) + { + self.sidearm = level.coop_incap_weapon; + maps\_utility::place_weapon_on(self.sidearm,"none"); + } + + var_00 = get_ai_weapons(self.ally_ref.ref)[0]; + if(!isdefined(var_00) || var_00 == self.weapon) + { + return; + } + + maps\_utility::forceuseweapon(var_00,"primary"); +} + +//Function Number: 109 +get_all_mine_locs() +{ + var_00 = common_scripts\utility::getstructarray("so_claymore_loc","targetname"); + return var_00; +} + +//Function Number: 110 +ai_drop_riotshield() +{ + if(!isdefined(self)) + { + return; + } + + if(isdefined(self.weaponinfo["iw5_riotshield_so"])) + { + var_00 = self.weaponinfo["iw5_riotshield_so"].position; + if(isdefined(self.dropriotshield) && self.dropriotshield && var_00 != "none") + { + thread animscripts/shared::func_23C9("iw5_riotshield_so",var_00); + } + + animscripts/shared::func_23BE("iw5_riotshield_so"); + self.weaponinfo["iw5_riotshield_so"].position = "none"; + self.a.weaponpos[var_00] = "none"; + } +} + +//Function Number: 111 +manage_ai_relative_to_player(param_00,param_01,param_02,param_03) +{ + level endon("special_op_terminated"); + self endon("death"); + self.goalradius = common_scripts\utility::ter_op(isdefined(param_01),param_01,self.goalradius); + self.goalheight = 80; + if(isdefined(param_02)) + { + var_04 = strtok(param_02," "); + foreach(var_06 in var_04) + { + self endon(var_06); + } + } + + if(isdefined(param_03)) + { + var_08 = strtok(param_03," "); + foreach(var_0A in var_08) + { + self notify(var_0A); + } + } + + survival_disable_sprint(); + var_0C = 1; + var_0D = undefined; + for(;;) + { + var_0E = maps\_utility::get_closest_player_healthy(self.origin); + if(!isdefined(var_0E)) + { + var_0E = maps\_utility::get_closest_player(self.origin); + } + + if(!isdefined(var_0E)) + { + wait param_00; + continue; + } + + if(self.team == "allies") + { + if(distancesquared(self.origin,var_0E.origin) > self.goalradius * self.goalradius) + { + self setgoalentity(var_0E); + wait 2; + continue; + } + } + else if(distancesquared(self.origin,var_0E.origin) < self.goalradius * self.goalradius) + { + self getenemyinfo(var_0E); + } + + if(!isdefined(var_0D) || var_0D != var_0E) + { + var_0D = var_0E; + self setgoalentity(var_0E); + self notify("target_reset"); + thread bad_path_listener(var_0E); + } + + if(var_0C) + { + var_0C = 0; + if(self.team == "axis") + { + self getenemyinfo(var_0E); + } + } + + survival_disable_sprint(); + if(self.team == "allies") + { + self setgoalpos(self.origin); + if(isdefined(self.subclass) && self.subclass == "riotshield") + { + wait randomfloatrange(0.2,2); + var_0F = self.goalradius; + self.goalradius = 1; + wait 0.1; + self.goalradius = var_0F; + } + } + + wait param_00; + } +} + +//Function Number: 112 +bad_path_listener(param_00) +{ + self endon("target_reset"); + self endon("death"); + for(;;) + { + self waittill("bad_path"); + if(isdefined(param_00.node_closest)) + { + self setgoalpos(param_00.node_closest.origin); + var_01 = param_00.origin; + while(distancesquared(var_01,param_00.origin) < 144) + { + wait 0.5; + } + + self setgoalentity(param_00); + } + } +} + +//Function Number: 113 +manage_ai_poll_player_state(param_00) +{ + self endon("death"); + self endon("manage_ai_stop_polling_player_state"); + for(;;) + { + wait 0.1; + if(!isdefined(param_00) || !isalive(param_00) || maps\_utility::is_player_down(param_00)) + { + self notify("manage_ai_player_invalid"); + return; + } + else if(distancesquared(self.origin,param_00.origin) <= self.goalradius * self.goalradius) + { + self notify("manage_ai_player_found"); + return; + } + } +} + +//Function Number: 114 +manage_ai_go_to_player_node(param_00) +{ + if(isdefined(param_00.node_closest)) + { + self setgoalpos(param_00.node_closest.origin); + } +} + +//Function Number: 115 +survival_enable_sprint() +{ + if(isdefined(self.subclass) && self.subclass == "riotshield") + { + if(isdefined(self.juggernaut)) + { + maps\_riotshield::riotshield_fastwalk_on(); + return; + } + + maps\_riotshield::riotshield_sprint_on(); + return; + } + + if(isdefined(self.juggernaut)) + { + maps\_utility::enable_sprint(); + return; + } + + self.combatmode = "no_cover"; +} + +//Function Number: 116 +survival_disable_sprint() +{ + if(isdefined(self.subclass) && self.subclass == "riotshield") + { + if(isdefined(self.juggernaut)) + { + maps\_riotshield::riotshield_fastwalk_off(); + return; + } + + maps\_riotshield::riotshield_sprint_off(); + return; + } + + if(isdefined(self.juggernaut)) + { + maps\_utility::disable_sprint(); + return; + } + + self.combatmode = "cover"; +} + +//Function Number: 117 +ai_exist(param_00) +{ + return isdefined(level.survival_ai) && isdefined(level.survival_ai[param_00]); +} + +//Function Number: 118 +get_ai_index(param_00) +{ + if(ai_exist(param_00)) + { + return level.survival_ai[param_00].idx; + } + + return int(tablelookup("sp/survival_waves.csv",1,param_00,0)); +} + +//Function Number: 119 +get_ai_ref_by_index(param_00) +{ + return tablelookup("sp/survival_waves.csv",0,param_00,1); +} + +//Function Number: 120 +get_ai_struct(param_00) +{ + var_01 = "Trying to get survival AI_type struct before stringtable is ready, or type doesnt exist."; + return level.survival_ai[param_00]; +} + +//Function Number: 121 +get_ai_classname(param_00) +{ + if(isdefined(level.var_3D57) && isdefined(level.var_3D57[param_00])) + { + return level.var_3D57[param_00]; + } + + if(ai_exist(param_00)) + { + return level.survival_ai[param_00].classname; + } + + return tablelookup("sp/survival_waves.csv",1,param_00,4); +} + +//Function Number: 122 +get_ai_weapons(param_00) +{ + if(isdefined(level.var_3D59) && isdefined(level.var_3D59[param_00])) + { + return level.var_3D59[param_00]; + } + + if(ai_exist(param_00)) + { + return level.survival_ai[param_00].weapon; + } + + var_01 = tablelookup("sp/survival_waves.csv",1,param_00,5); + return strtok(var_01," "); +} + +//Function Number: 123 +get_ai_alt_weapons(param_00) +{ + if(ai_exist(param_00)) + { + return level.survival_ai[param_00].altweapon; + } + + var_01 = tablelookup("sp/survival_waves.csv",1,param_00,6); + return strtok(var_01," "); +} + +//Function Number: 124 +get_ai_name(param_00) +{ + if(ai_exist(param_00)) + { + return level.survival_ai[param_00].name; + } + + return tablelookup("sp/survival_waves.csv",1,param_00,2); +} + +//Function Number: 125 +get_ai_desc(param_00) +{ + if(ai_exist(param_00)) + { + return level.survival_ai[param_00].var_189B; + } + + return tablelookup("sp/survival_waves.csv",1,param_00,3); +} + +//Function Number: 126 +get_ai_health(param_00) +{ + if(isdefined(level.survival_waves_repeated)) + { + var_01 = 1 + level.survival_waves_repeated * 0.1; + } + else + { + var_01 = 1; + } + + if(ai_exist(param_00)) + { + return int(level.survival_ai[param_00].health * var_01); + } + + var_02 = tablelookup("sp/survival_waves.csv",1,param_00,7); + if(var_02 == "") + { + return undefined; + } + + return int(int(var_02) * var_01); +} + +//Function Number: 127 +get_ai_speed(param_00) +{ + if(isdefined(level.survival_waves_repeated)) + { + var_01 = 1 + level.survival_waves_repeated * 0.05; + } + else + { + var_01 = 1; + } + + if(ai_exist(param_00)) + { + return min(level.survival_ai[param_00].speed * var_01,1.5); + } + + var_02 = tablelookup("sp/survival_waves.csv",1,param_00,8); + if(var_02 == "") + { + return undefined; + } + + return min(float(var_02) * var_01,1.5); +} + +//Function Number: 128 +get_ai_accuracy(param_00) +{ + if(isdefined(level.survival_waves_repeated)) + { + var_01 = 1 + level.survival_waves_repeated * 0.2; + } + else + { + var_01 = 1; + } + + if(ai_exist(param_00)) + { + if(isdefined(level.survival_ai[param_00].accuracy)) + { + return level.survival_ai[param_00].accuracy * var_01; + } + else + { + return level.survival_ai[param_00].accuracy; + } + } + + var_02 = tablelookup("sp/survival_waves.csv",1,param_00,11); + if(var_02 == "") + { + return undefined; + } + + return float(var_02) * var_01; +} + +//Function Number: 129 +get_ai_xp(param_00) +{ + if(ai_exist(param_00)) + { + return level.survival_ai[param_00].xp; + } + + var_01 = tablelookup("sp/survival_waves.csv",1,param_00,9); + if(var_01 == "") + { + return undefined; + } + + return int(var_01); +} + +//Function Number: 130 +is_ai_boss(param_00) +{ + if(ai_exist(param_00) && isdefined(level.survival_boss)) + { + return isdefined(level.survival_boss[param_00]); + } + + var_01 = tablelookup("sp/survival_waves.csv",1,param_00,10); + if(!isdefined(var_01) || var_01 == "") + { + return 0; + } + + return 1; +} + +//Function Number: 131 +wave_exist(param_00) +{ + return isdefined(level.survival_wave) && isdefined(level.survival_wave[param_00]); +} + +//Function Number: 132 +get_wave_boss_delay(param_00) +{ + if(wave_exist(param_00)) + { + return level.survival_wave[param_00].var_3D4F; + } + + return int(tablelookup(level.wave_table,2,param_00,1)); +} + +//Function Number: 133 +get_wave_index(param_00) +{ + if(wave_exist(param_00)) + { + return level.survival_wave[param_00].idx; + } + + return int(tablelookup(level.wave_table,2,param_00,0)); +} + +//Function Number: 134 +get_wave_number_by_index(param_00) +{ + return int(tablelookup(level.wave_table,0,param_00,2)); +} + +//Function Number: 135 +get_squad_type(param_00) +{ + if(wave_exist(param_00)) + { + return level.survival_wave[param_00].survival_ai_class_overrides; + } + + return tablelookup(level.wave_table,2,param_00,3); +} + +//Function Number: 136 +get_squad_array(param_00) +{ + if(wave_exist(param_00)) + { + return level.survival_wave[param_00].var_3D4C; + } + + var_01 = []; + var_02 = int(tablelookup(level.wave_table,2,param_00,4)); + if(var_02 <= 3) + { + var_01[0] = var_02; + } + else + { + var_03 = var_02 % 3; + var_04 = int(var_02 / 3); + for(var_05 = 0;var_05 < var_04;var_05++) + { + var_01[var_05] = 3; + } + + if(var_03 == 1) + { + if(level.merge_squad_member_max == 4) + { + var_01[var_01.size - 1] = var_01[var_01.size - 1] + var_03; + } + else + { + var_06 = 1; + var_01[var_01.size - 1] = var_01[var_01.size - 1] - var_06; + var_01[var_01.size] = var_03 + var_06; + } + } + else if(var_03 == 2) + { + var_01[var_01.size] = var_03; + } + } + + return var_01; +} + +//Function Number: 137 +get_special_ai(param_00) +{ + if(wave_exist(param_00)) + { + return level.survival_wave[param_00].var_3D4D; + } + + var_01 = tablelookup(level.wave_table,2,param_00,5); + if(isdefined(var_01) && var_01 != "") + { + return strtok(var_01," "); + } + + return undefined; +} + +//Function Number: 138 +get_special_ai_quantity(param_00) +{ + if(wave_exist(param_00)) + { + return level.survival_wave[param_00].var_3D4E; + } + + var_01 = tablelookup(level.wave_table,2,param_00,6); + var_02 = []; + if(isdefined(var_01) && var_01 != "") + { + var_01 = strtok(var_01," "); + for(var_03 = 0;var_03 < var_01.size;var_03++) + { + var_02[var_03] = int(var_01[var_03]); + } + + return var_02; + } + + return undefined; +} + +//Function Number: 139 +get_special_ai_type_quantity(param_00,param_01) +{ + var_02 = get_special_ai(param_00); + var_03 = get_special_ai_quantity(param_00); + if(isdefined(var_02) && isdefined(var_03) && var_02.size && var_03.size) + { + foreach(var_06, var_05 in var_02) + { + if(param_01 == var_05) + { + return var_03[var_06]; + } + } + } + + return 0; +} + +//Function Number: 140 +get_bosses_ai(param_00) +{ + if(wave_exist(param_00)) + { + return level.survival_wave[param_00].bossai; + } + + var_01 = tablelookup(level.wave_table,2,param_00,7); + if(isdefined(var_01) && var_01 != "") + { + return strtok(var_01," "); + } + + return undefined; +} + +//Function Number: 141 +get_bosses_nonai(param_00) +{ + if(wave_exist(param_00)) + { + return level.survival_wave[param_00].bossnonai; + } + + var_01 = tablelookup(level.wave_table,2,param_00,8); + if(isdefined(var_01) && var_01 != "") + { + return strtok(var_01," "); + } + + return undefined; +} + +//Function Number: 142 +is_repeating(param_00) +{ + if(wave_exist(param_00)) + { + return level.survival_wave[param_00].repeating; + } + + return int(tablelookup(level.wave_table,2,param_00,9)); +} + +//Function Number: 143 +get_armory_unlocked(param_00) +{ + var_01 = tablelookup(level.wave_table,2,param_00,10); + var_01 = strtok(var_01," "); + return var_01; +} + +//Function Number: 144 +get_dog_type(param_00) +{ + if(wave_exist(param_00)) + { + return level.survival_wave[param_00].dogtype; + } + + var_01 = get_special_ai(param_00); + if(!isdefined(var_01) || !var_01.size) + { + return ""; + } + + foreach(var_03 in var_01) + { + if(issubstr(var_03,"dog")) + { + return var_03; + } + } + + return ""; +} + +//Function Number: 145 +get_dog_quantity(param_00) +{ + if(wave_exist(param_00)) + { + return level.survival_wave[param_00].dogquantity; + } + + var_01 = get_dog_type(param_00); + if(!isdefined(var_01)) + { + return 0; + } + + return get_special_ai_type_quantity(param_00,var_01); +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_so_survival_armory.gsc b/MW3/PC/SP/maps/_so_survival_armory.gsc new file mode 100644 index 0000000..2bab12b --- /dev/null +++ b/MW3/PC/SP/maps/_so_survival_armory.gsc @@ -0,0 +1,2244 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_so_survival_armory.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 104 + * Decompile Time: 1731 ms + * Timestamp: 10/27/2023 2:21:25 AM +*******************************************************************/ + +//Function Number: 1 +armory_preload() +{ + maps\_sp_airdrop::sp_airdrop_preload(); + maps\_sp_killstreaks::sp_killstreaks_global_preload(); + lib_0616::main(); + level.remote_missile_grain_overlay = 1; + level.visionthermaldefault = "thermal_mp"; + level.var_3BDB = "thermal_mp"; + maps\_so_survival_code::delete_on_load(); + maps\_so_survival_code::remotemissile_infantry_kills_dialogue_setup(); + precachestring(&"SO_SURVIVAL_ARMORY_USE_WEAPON"); + precachestring(&"SO_SURVIVAL_ARMORY_USE_EQUIPMENT"); + precachestring(&"SO_SURVIVAL_ARMORY_USE_AIRSUPPORT"); + precacheshader("specops_ui_equipmentstore"); + precacheshader("specops_ui_weaponstore"); + precacheshader("specops_ui_airsupport"); + precacheshader("specops_ui_deltasupport"); + precacheshader("specops_ui_riotshieldsupport"); + precachemenu("survival_armory_equipment"); + precachemenu("survival_armory_airsupport"); + precachemenu("survival_armory_weapon"); + precachemenu("survival_armory_replacement_warning"); + maps\_utility::add_hint_string("dpad_right_slot_full",&"SO_SURVIVAL_DPAD_RIGHT_SLOT_FULL"); + for(var_00 = 0;var_00 <= 64;var_00++) + { + var_01 = get_ref_by_index(var_00); + if(isdefined(var_01) && var_01 != "" && var_01 != "ammo" && get_type(var_01) == "weapon") + { + maps\_so_survival_code::precache_loadout_item(var_01); + } + } + + precacheitem("claymore"); + precacheitem("rpg_survival"); + precacheitem("iw5_riotshield_so"); + precacheitem("air_support_strobe"); + level.air_support_sticky_marker_fx = loadfx("smoke/signal_smoke_air_support_pulse"); + precachemodel("vehicle_ac130_coop"); + precachemodel("c130_zoomrig"); + level.armory = []; + level.armory_all_items = []; + armory_populate(100,120,"weaponupgrade"); + armory_populate(0,64,"weapon"); + armory_populate(1000,1020,"equipment"); + armory_populate(10000,10020,"airsupport"); +} + +//Function Number: 2 +armory_postload() +{ + maps\_sp_killstreaks::sp_killstreaks_init(); + level.airdropcrateusetime = 0; + level.airdropcratetimeout = 60; + level.airdropcrateunstuck = 1; + maps\_sp_killstreaks::add_sp_killstreak("carepackage"); + maps\_sp_killstreaks::add_sp_killstreak("remote_missile"); + maps\_sp_killstreaks::add_sp_killstreak("sentry"); + maps\_sp_killstreaks::add_sp_killstreak("sentry_gl"); + maps\_sp_killstreaks::add_sp_killstreak("specialty_longersprint"); + maps\_sp_killstreaks::add_sp_killstreak("specialty_fastreload"); + maps\_sp_killstreaks::add_sp_killstreak("specialty_quickdraw"); + maps\_sp_killstreaks::add_sp_killstreak("specialty_detectexplosive"); + maps\_sp_killstreaks::add_sp_killstreak("specialty_bulletaccuracy"); + maps\_sp_killstreaks::add_sp_killstreak("specialty_stalker"); + maps\_remotemissile::init(); + level thread maps\_so_survival_code::remotemissile_uav(); + level thread maps\_so_survival_code::remotemissile_infantry_kills_dialogue(); + level.claymoresentientfunc = ::claymoresentientfunc; + maps\_air_support_strobe::main(); + ac130_traverse(); +} + +//Function Number: 3 +ac130_traverse() +{ + level.ac130_speed["move"] = 250; + level.ac130_speed["rotate"] = 70; + level.strobe_no_vis_check = 1; + level.strobe_no_badplace = 1; + var_00 = getentarray("minimap_corner","targetname"); + var_01 = (0,0,0); + if(var_00.size) + { + var_01 = findboxcenter(var_00[0].origin,var_00[1].origin); + } + + level.ac130 = spawn("script_model",var_01); + level.ac130 setmodel("c130_zoomrig"); + level.ac130.angles = (0,115,0); + level.ac130 hide(); + level thread rotateplane(); + level thread ac130_spawn(); +} + +//Function Number: 4 +findboxcenter(param_00,param_01) +{ + var_02 = (0,0,0); + var_02 = param_01 - param_00; + var_02 = (var_02[0] / 2,var_02[1] / 2,var_02[2] / 2) + param_00; + return var_02; +} + +//Function Number: 5 +rotateplane() +{ + level notify("stop_rotatePlane_thread"); + level endon("stop_rotatePlane_thread"); + var_00 = 10; + var_01 = level.ac130_speed["rotate"] / 360 * var_00; + level.ac130 rotateyaw(level.ac130.angles[2] + var_00,var_01,var_01,0); + for(;;) + { + level.ac130 rotateyaw(360,level.ac130_speed["rotate"]); + wait level.ac130_speed["rotate"]; + } +} + +//Function Number: 6 +ac130_spawn() +{ + wait 0.05; + var_00 = spawn("script_model",level.ac130 gettagorigin("tag_origin") + (0,3000,4500)); + var_00 setmodel("vehicle_ac130_coop"); + var_00 setcandamage(0); + var_00.health = 1000; + var_00 linkto(level.ac130,"tag_origin",(0,3000,4500),(25,-90,0)); + level.ac130.planemodel = var_00; + level.ac130.planemodel hide(); + wait 0.05; + level.ac130.planemodel show(); + maps\_air_support_strobe::set_aircraft(level.ac130.planemodel); +} + +//Function Number: 7 +armory_init() +{ + var_00 = armory_setup("weapon","specops_ui_weaponstore",&"SO_SURVIVAL_ARMORY_USE_WEAPON"); + var_01 = armory_setup("equipment","specops_ui_equipmentstore",&"SO_SURVIVAL_ARMORY_USE_EQUIPMENT"); + var_02 = armory_setup("airsupport","specops_ui_airsupport",&"SO_SURVIVAL_ARMORY_USE_AIRSUPPORT"); + level thread armory_usage_think(var_00); + level thread armory_usage_think(var_01); + level thread armory_usage_think(var_02); + foreach(var_04 in level.players) + { + var_04 thread track_ownership(); + var_04 thread sentry_setup(); + } +} + +//Function Number: 8 +armory_populate(param_00,param_01,param_02) +{ + for(var_03 = param_00;var_03 <= param_01;var_03++) + { + var_04 = get_ref_by_index(var_03); + if(!isdefined(var_04) || var_04 == "") + { + continue; + } + + var_05 = spawnstruct(); + var_05.idx = var_03; + var_05.ref = var_04; + var_05.type = param_02; + var_05.sub_type = get_sub_type(var_04); + var_05.name = get_name(var_04); + var_05.var_189B = get_desc(var_04); + var_05.cost = get_cost(var_04); + var_05.icon = get_icon(var_04); + var_05.unlockrank = get_unlock_rank(var_04); + var_05.func_can_give = get_func_can_give(param_02,var_04); + var_05.func_give = get_func_give(param_02,var_04); + if(param_02 == "weaponupgrade") + { + var_05.slot = get_slot(var_04); + } + + if(param_02 == "weapon" && var_04 != "ammo") + { + var_05.maxstock = 1; + var_05.upgrades = get_upgrades_possible(var_04); + var_05.dropclip = get_item_drop_clip(var_04); + var_05.dropstock = get_item_drop_stock(var_04); + } + else + { + var_05.enabled = is_item_enabled(var_04); + var_05.maxstock = get_maxstock(var_04); + } + + level.armory[param_02][var_04] = var_05; + level.armory_all_items[var_04] = var_05; + } +} + +//Function Number: 9 +armory_setup(param_00,param_01,param_02,param_03) +{ + var_04 = getent("armory_" + param_00,"targetname"); + if(!isdefined(var_04)) + { + return; + } + + var_04.armory_type = param_00; + var_04.icon = param_01; + var_04.usehint = param_02; + var_04.menu = "survival_armory_" + param_00; + var_04.laptop_locked = getent(var_04.target,"targetname"); + var_04.laptop = getent(var_04.laptop_locked.target,"targetname"); + var_04.laptop hide(); + var_04 thread armory_use_monitor(); + return var_04; +} + +//Function Number: 10 +armory_setup_players() +{ + foreach(var_01 in level.armory) + { + foreach(var_03 in var_01) + { + foreach(var_05 in level.players) + { + var_06 = var_03.type; + var_07 = var_03.ref; + var_08 = var_05 get_ownership_val(var_03.ref); + var_05 set_ownership(var_06,var_07,var_08); + } + } + } +} + +//Function Number: 11 +get_ownership_val(param_00) +{ + var_01 = armory_can_give(param_00); + if(var_01 == 0) + { + return 1; + } + + if(var_01 == 2) + { + return 2; + } + + return 0; +} + +//Function Number: 12 +armory_use_monitor() +{ + level endon("special_op_terminated"); + waittill_armory_unlocked(); + self.laptop show(); + self.laptop_locked hide(); + var_00 = newhudelem(); + var_00.archived = 1; + var_00.x = self.origin[0]; + var_00.y = self.origin[1]; + var_00.z = self.origin[2]; + var_00.alpha = 0.75; + var_00 setshader(self.icon,12,12); + var_00 setwaypoint(1,1,0); + self.crateworldicon = var_00; + self sethintstring(self.usehint); + self makeusable(); + level notify("armory_open",self); + for(;;) + { + self waittill("trigger",var_01); + if(!isplayer(var_01)) + { + continue; + } + + wait 0.1; + if(!var_01 usebuttonpressed()) + { + continue; + } + + self notify("armory_use",var_01); + } +} + +//Function Number: 13 +waittill_armory_unlocked() +{ + level endon("special_op_terminated"); + for(;;) + { + level waittill("wave_ended",var_00); + if(level.armory_unlock[self.armory_type] == var_00) + { + return; + } + } +} + +//Function Number: 14 +waittill_armory_warning_respond(param_00) +{ + level endon("special_op_terminated"); + self endon("armory_closed"); + self endon("armory_interrupted"); + self endon("dog_attacks_player"); + for(;;) + { + self waittill("menuresponse",var_01,var_02); + if(var_01 != param_00) + { + continue; + } + else + { + break; + } + } + + return var_02; +} + +//Function Number: 15 +waittill_armory_respond() +{ + level endon("special_op_terminated"); + self endon("armory_closed"); + self endon("armory_interrupted"); + self endon("dog_attacks_player"); + self waittill("menuresponse",var_00,var_01); + return var_01; +} + +//Function Number: 16 +armory_downed_interrupt() +{ + level endon("special_op_terminated"); + self endon("armory_closed"); + self endon("dog_attacks_player"); + for(;;) + { + self waittill("player_downed"); + self notify("armory_interrupted"); + } +} + +//Function Number: 17 +armory_usage_think(param_00) +{ + level endon("special_op_terminated"); + if(!isdefined(param_00)) + { + return; + } + + foreach(var_02 in level.players) + { + var_02.using_armory = 0; + } + + for(;;) + { + param_00 waittill("armory_use",var_04); + if(!var_04.using_armory) + { + var_04 thread armory_user_thread(param_00); + } + } +} + +//Function Number: 18 +armory_user_thread(param_00) +{ + level endon("special_op_terminated"); + self endon("death"); + thread armory_downed_interrupt(); + if(!isdefined(self) || !isplayer(self) || !isalive(self)) + { + return; + } + + if(param_00.armory_type == "airsupport" && !has_open_slot_right()) + { + maps\_utility::display_hint("dpad_right_slot_full"); + return; + } + + self notify("armory_opened",param_00); + self.using_armory = 1; + var_01 = param_00.menu; + self openpopupmenu(param_00.menu); + self freezecontrols(1); + for(;;) + { + var_02 = waittill_armory_respond(); + if(!isdefined(var_02)) + { + close_armory_interface(); + break; + } + + if(var_02 == "quit") + { + self.selected_weapon = undefined; + close_armory_interface(); + break; + } + + if(var_02 == "share") + { + if(self.survival_credit == 0) + { + continue; + } + + var_03 = 500; + if(self.survival_credit < 500) + { + var_03 = self.survival_credit; + } + + foreach(var_05 in level.players) + { + if(var_05 == self) + { + var_05.survival_credit = var_05.survival_credit - var_03; + } + + if(var_05 != self) + { + var_05.survival_credit = var_05.survival_credit + var_03; + } + + var_06 = 1; + var_05 notify("credit_updated",var_06); + } + } + + if(issubstr(var_02,"weaponswitch")) + { + var_08 = strtok(var_02,"_")[1]; + var_09 = get_ref_by_index(var_08); + if(!isdefined(var_09) || var_09 == "") + { + continue; + } + + var_0A = self getweaponslistprimaries(); + foreach(var_0C in var_0A) + { + if(weaponclass(var_0C) == "rocketlauncher" || weaponclass(var_0C) == "item" || weaponclass(var_0C) == "none") + { + continue; + } + + if(get_weapon_base_name(var_0C) == var_09) + { + self.selected_weapon = var_0C; + self notify("new_weapon_selected"); + break; + } + } + } + + if(issubstr(var_02,"purchase")) + { + var_0E = strtok(var_02,"_")[1]; + var_0F = get_ref_by_index(var_0E); + var_10 = get_cost(var_0F); + var_11 = 0; + if((var_0F == "rpg_survival" || var_0F == "iw5_riotshield_so") && !self hasweapon(var_0F) && isdefined(get_replaceable_weapon())) + { + self openpopupmenu("survival_armory_replacement_warning"); + var_02 = waittill_armory_warning_respond("survival_armory_replacement_warning"); + if(!isdefined(var_02) || var_02 != "continue") + { + close_armory_interface(); + thread armory_user_thread(param_00); + return; + } + else + { + var_11 = 1; + } + } + + if(self.survival_credit >= var_10) + { + if(armory_can_give(var_0F)) + { + self notify("armory_opened",param_00); + armory_give(var_0F); + if(get_sub_type(var_0F) == "sniper") + { + self.selected_weapon = var_0F; + give_weapon_upgrade(strtok(var_0F,"_")[1] + "scope"); + } + + self.survival_credit = self.survival_credit - var_10; + self notify("credit_updated"); + var_12 = get_type(var_0F); + if(var_12 == "weapon" || var_12 == "weaponupgrade") + { + maps\_specialops::so_achievement_update("ARMS_DEALER",var_0F); + } + + if(get_sub_type(var_0F) == "sniper") + { + maps\_specialops::so_achievement_update("ARMS_DEALER",strtok(var_0F,"_")[1] + "scope"); + } + + if(var_12 == "airsupport") + { + maps\_specialops::so_achievement_update("DANGER_ZONE",var_0F); + } + + if(var_12 == "equipment") + { + maps\_specialops::so_achievement_update("DEFENSE_SPENDING",var_0F); + } + } + } + + if(var_11) + { + close_armory_interface(); + thread armory_user_thread(param_00); + return; + } + + if(param_00.armory_type == "airsupport") + { + close_armory_interface(); + break; + } + } + } +} + +//Function Number: 19 +close_armory_interface() +{ + self closepopupmenu(); + self freezecontrols(0); + self notify("armory_closed"); + self.using_armory = 0; +} + +//Function Number: 20 +create_player_pip() +{ + if(!isdefined(self.pip)) + { + self.pip = self newpip(); + } + + self.pip.entity = spawn("script_model",self.origin); + self.pip.entity setmodel("tag_origin"); + wait 0.05; + self.pip.tag = "tag_origin"; + self.pip.fov = 65; + self.pip.freecamera = 1; + self.pip.enableshadows = 0; + self.pip.x = -40; + self.pip.y = 310; + self.pip.width = 240; + self.pip.height = 135; + self.pip.enable = 0; +} + +//Function Number: 21 +sentry_setup() +{ + level endon("special_op_terminated"); + self endon("death"); + for(;;) + { + self waittill("new_sentry",var_00); + var_00 setthreatbiasgroup("sentry"); + if(weapontype(var_00.weaponname) == "projectile") + { + var_00 setconvergenceheightpercent(0); + continue; + } + + var_00 setconvergenceheightpercent(0.7); + } +} + +//Function Number: 22 +sentry_pip_cam(param_00) +{ + self endon("death"); + param_00 endon("death"); + thread death_pip_disable(param_00); + for(;;) + { + link_pip_cam_to(param_00); + setup_pip_name(param_00); + if(!self.pip.enable) + { + self.pip.enable = 1; + } + + param_00 waittill("sentry_move_started"); + self.pip.entity unlink(); + if(self.pip.enable) + { + self.pip.enable = 0; + } + + if(isdefined(self.pip_display_name)) + { + self.pip_display_name destroy(); + } + + param_00 waittill("sentry_move_finished"); + } +} + +//Function Number: 23 +cycle_sentry_pip() +{ + self endon("death"); + self notifyonplayercommand("pip_cycle","+actionslot 2"); + if(!isdefined(self.pip_sentry_id)) + { + self.pip_sentry_id = 0; + } + + for(;;) + { + self waittill("pip_cycle"); + if(isdefined(level.placed_sentry) && level.placed_sentry.size) + { + if(self.pip_sentry_id > level.placed_sentry.size - 1) + { + self.pip_sentry_id = 0; + } + + pip_patch_into(self.pip_sentry_id); + self.pip_sentry_id++; + } + } +} + +//Function Number: 24 +death_pip_disable(param_00) +{ + self endon("death"); + param_00 waittill("death"); + if(self.pip.enable) + { + self.pip.enable = 0; + } + + self.pip_display_name destroy(); +} + +//Function Number: 25 +pip_patch_into(param_00) +{ + var_01 = level.placed_sentry[param_00]; + if(!isdefined(var_01)) + { + return; + } + + if(self.pip.enable) + { + self.pip.enable = 0; + } + + link_pip_cam_to(var_01); + setup_pip_name(self); + if(!self.pip.enable) + { + self.pip.enable = 1; + } + + self.pip.display_id = param_00; +} + +//Function Number: 26 +setup_pip_name(param_00) +{ + if(isdefined(self.pip_display_name)) + { + self.pip_display_name destroy(); + } + + self.pip_display_name = newhudelem(); + self.pip_display_name.alpha = 1; + self.pip_display_name.x = self.pip.x; + self.pip_display_name.y = self.pip.y - 20; + self.pip_display_name.hidewheninmenu = 0; + self.pip_display_name.hidewhendead = 1; + self.pip_display_name.fontscale = 1.25; + if(!isdefined(self.pip.display_id)) + { + self.pip.display_id = 0; + } + + self.pip_display_name.label = "Sentry #" + self.pip.display_id + " [Dpad down to cycle]"; +} + +//Function Number: 27 +link_pip_cam_to(param_00) +{ + var_01 = -12 * vectornormalize(anglestoforward(param_00.angles)); + var_02 = param_00 gettagorigin("mg01") + (0,0,12) + var_01; + self.pip.entity unlink(); + self.pip.entity.origin = var_02; + self.pip.entity.angles = param_00.angles; + self.pip.entity linkto(param_00,"mg01"); +} + +//Function Number: 28 +get_total_sentries() +{ + var_00 = 0; + if(isdefined(level.placed_sentry) && level.placed_sentry.size) + { + var_00 = var_00 + level.placed_sentry.size; + } + + foreach(var_02 in level.players) + { + if(var_02 maps\_sp_killstreaks::has_killstreak("sentry")) + { + var_00++; + } + + if(var_02 maps\_sp_killstreaks::has_killstreak("sentry_gl")) + { + var_00++; + } + } + + return var_00; +} + +//Function Number: 29 +has_sentry() +{ + if(maps\_sp_killstreaks::has_killstreak("sentry")) + { + return 1; + } + + if(maps\_sp_killstreaks::has_killstreak("sentry_gl")) + { + return 1; + } + + foreach(var_01 in level.placed_sentry) + { + if(isdefined(var_01) && isdefined(var_01.attacker) && isplayer(var_01.attacker) && var_01.attacker == self) + { + return 1; + } + } + + return 0; +} + +//Function Number: 30 +track_ownership() +{ + self endon("death"); + wait 0.05; + for(;;) + { + self waittill("armory_opened",var_00); + for(;;) + { + foreach(var_02 in level.armory[var_00.armory_type]) + { + var_03 = get_ownership_val(var_02.ref); + set_ownership(var_02.type,var_02.ref,var_03); + } + + if(var_00.armory_type == "weapon") + { + foreach(var_02 in level.armory["weaponupgrade"]) + { + var_03 = get_ownership_val(var_02.ref); + set_ownership(var_02.type,var_02.ref,var_03); + } + } + + var_07 = common_scripts\utility::waittill_any_timeout(0.05,"armory_closed","new_weapon_selected"); + if(var_07 == "armory_closed") + { + break; + } + } + } +} + +//Function Number: 31 +set_ownership(param_00,param_01,param_02) +{ + maps\_specialops::_setplayerdata_array("armory" + param_00,param_01,param_02); +} + +//Function Number: 32 +claymoresentientfunc(param_00) +{ + self makeentitysentient(param_00,1); + self.attackeraccuracy = 2; + self.maxvisibledist = 356; + self.threatbias = -1000; + self.detonateradius = 96; +} + +//Function Number: 33 +has_open_slot_right() +{ + var_00 = self getweaponhudiconoverride("actionslot4"); + if(isdefined(var_00) && var_00 != "none") + { + return 0; + } + + if(self hasweapon("air_support_strobe")) + { + return 0; + } + + return !maps\_sp_killstreaks::has_any_killstreak(); +} + +//Function Number: 34 +hint_bubble() +{ +} + +//Function Number: 35 +item_exist(param_00) +{ + return isdefined(level.armory_all_items) && isdefined(level.armory_all_items[param_00]); +} + +//Function Number: 36 +get_index(param_00) +{ + if(item_exist(param_00)) + { + return level.armory_all_items[param_00].idx; + } + + return int(tablelookup("sp/survival_armories.csv",1,param_00,0)); +} + +//Function Number: 37 +get_ref_by_index(param_00) +{ + return tablelookup("sp/survival_armories.csv",0,param_00,1); +} + +//Function Number: 38 +get_icon(param_00) +{ + if(item_exist(param_00)) + { + return level.armory_all_items[param_00].icon; + } + + return tablelookup("sp/survival_armories.csv",1,param_00,6); +} + +//Function Number: 39 +get_slot(param_00) +{ + if(item_exist(param_00)) + { + return level.armory_all_items[param_00].slot; + } + + return tablelookup("sp/survival_armories.csv",1,param_00,2); +} + +//Function Number: 40 +get_type(param_00) +{ + if(item_exist(param_00)) + { + return level.armory_all_items[param_00].type; + } + + return tablelookup("sp/survival_armories.csv",1,param_00,2); +} + +//Function Number: 41 +get_sub_type(param_00) +{ + if(item_exist(param_00)) + { + return level.armory_all_items[param_00].sub_type; + } + + return tablelookup("sp/survival_armories.csv",1,param_00,11); +} + +//Function Number: 42 +get_maxstock(param_00) +{ + if(item_exist(param_00)) + { + return level.armory_all_items[param_00].maxstock; + } + + return int(tablelookup("sp/survival_armories.csv",1,param_00,10)); +} + +//Function Number: 43 +get_upgrades_possible(param_00) +{ + if(item_exist(param_00)) + { + return level.armory_all_items[param_00].upgrades; + } + + var_01 = tablelookup("sp/survival_armories.csv",1,param_00,8); + var_01 = strtok(var_01," "); + return var_01; +} + +//Function Number: 44 +get_name(param_00) +{ + if(item_exist(param_00)) + { + return level.armory_all_items[param_00].name; + } + + return tablelookup("sp/survival_armories.csv",1,param_00,4); +} + +//Function Number: 45 +get_desc(param_00) +{ + if(item_exist(param_00)) + { + return level.armory_all_items[param_00].var_189B; + } + + return tablelookup("sp/survival_armories.csv",1,param_00,5); +} + +//Function Number: 46 +get_cost(param_00) +{ + if(item_exist(param_00)) + { + return level.armory_all_items[param_00].cost; + } + + return int(tablelookup("sp/survival_armories.csv",1,param_00,3)); +} + +//Function Number: 47 +get_unlock_rank(param_00) +{ + if(item_exist(param_00)) + { + return level.armory_all_items[param_00].unlockrank; + } + + return int(tablelookup("sp/survival_armories.csv",1,param_00,7)); +} + +//Function Number: 48 +is_item_enabled(param_00) +{ + if(item_exist(param_00)) + { + return level.armory_all_items[param_00].enabled; + } + + var_01 = tablelookup("sp/survival_armories.csv",1,param_00,9); + if(!isdefined(var_01) || var_01 == "") + { + return 1; + } + + if(!issubstr(var_01,level.script)) + { + return 1; + } + + return 0; +} + +//Function Number: 49 +get_item_drop_stock(param_00) +{ + if(item_exist(param_00)) + { + return level.armory_all_items[param_00].dropstock; + } + + return int(strtok(tablelookup("sp/survival_armories.csv",1,param_00,9)," ")[1]); +} + +//Function Number: 50 +get_item_drop_clip(param_00) +{ + if(item_exist(param_00)) + { + return level.armory_all_items[param_00].dropclip; + } + + return int(strtok(tablelookup("sp/survival_armories.csv",1,param_00,9)," ")[0]); +} + +//Function Number: 51 +armory_can_give(param_00) +{ + var_01 = level.armory_all_items[param_00]; + if(!isdefined(var_01)) + { + return 0; + } + + return self [[ var_01.func_can_give ]](param_00); +} + +//Function Number: 52 +armory_give(param_00) +{ + var_01 = level.armory_all_items[param_00]; + self [[ var_01.func_give ]](param_00); +} + +//Function Number: 53 +get_func_can_give(param_00,param_01) +{ + if(item_exist(param_01)) + { + return level.armory_all_items[param_01].func_can_give; + } + + var_02 = ::can_give_default; + if(param_00 == "weapon") + { + if(param_01 == "ammo") + { + var_02 = ::can_give_ammo; + } + else + { + var_02 = ::can_give_weapon; + } + } + else if(param_00 == "weaponupgrade") + { + var_02 = ::can_give_weapon_upgrade; + } + else if(param_00 == "equipment") + { + switch(param_01) + { + case "flash_grenade": + case "fraggrenade": + var_02 = ::can_give_grenade; + break; + + case "c4": + case "claymore": + var_02 = ::can_give_slotted_explosive; + break; + + case "rpg_survival": + var_02 = ::can_give_launcher; + break; + + case "iw5_riotshield_so_upgrade": + case "iw5_riotshield_so": + var_02 = ::can_give_riotshield_so; + break; + + case "sentry_gl": + case "sentry": + var_02 = ::can_give_sentry; + break; + + case "juggernaut_suit": + case "armor": + var_02 = ::can_give_armor; + break; + + case "laststand": + var_02 = ::can_give_laststand; + break; + + default: + break; + } + } + else if(param_00 == "airsupport") + { + switch(param_01) + { + case "remote_missile": + var_02 = ::can_give_remote_missile; + break; + + case "friendly_support_riotshield": + case "friendly_support_delta": + var_02 = ::can_give_friendlies; + break; + + case "precision_airstrike": + var_02 = ::can_give_airstrike; + break; + + case "manned_chopper": + case "assault_chopper": + var_02 = ::can_give_chopper; + break; + + case "specialty_bulletaccuracy": + case "specialty_detectexplosive": + case "specialty_quickdraw": + case "specialty_fastreload": + case "specialty_longersprint": + case "specialty_stalker": + var_02 = ::can_give_perk_care_package; + break; + + default: + break; + } + } + else + { + } + + return var_02; +} + +//Function Number: 54 +get_func_give(param_00,param_01) +{ + if(item_exist(param_01)) + { + return level.armory_all_items[param_01].func_give; + } + + var_02 = ::give_default; + if(param_00 == "weapon") + { + if(param_01 == "ammo") + { + var_02 = ::give_ammo; + } + else + { + var_02 = ::give_weapon; + } + } + else if(param_00 == "weaponupgrade") + { + var_02 = ::give_weapon_upgrade; + } + else if(param_00 == "equipment") + { + switch(param_01) + { + case "flash_grenade": + case "fraggrenade": + var_02 = ::give_grenade; + break; + + case "c4": + case "claymore": + var_02 = ::give_slotted_explosive; + break; + + case "rpg_survival": + var_02 = ::give_launcher; + break; + + case "iw5_riotshield_so_upgrade": + case "iw5_riotshield_so": + var_02 = ::give_riotshield_so; + break; + + case "sentry_gl": + case "sentry": + var_02 = ::give_sentry; + break; + + case "juggernaut_suit": + case "armor": + var_02 = ::give_armor; + break; + + case "laststand": + var_02 = ::give_laststand; + break; + + default: + break; + } + } + else if(param_00 == "airsupport") + { + switch(param_01) + { + case "remote_missile": + var_02 = ::give_remote_missile; + break; + + case "friendly_support_riotshield": + case "friendly_support_delta": + var_02 = ::give_friendlies; + break; + + case "precision_airstrike": + var_02 = ::give_airstrike; + break; + + case "manned_chopper": + case "assault_chopper": + var_02 = ::give_chopper; + break; + + case "specialty_bulletaccuracy": + case "specialty_detectexplosive": + case "specialty_quickdraw": + case "specialty_fastreload": + case "specialty_longersprint": + case "specialty_stalker": + var_02 = ::give_perk_care_package; + break; + + default: + break; + } + } + else + { + } + + return var_02; +} + +//Function Number: 55 +can_give_default(param_00) +{ + return 0; +} + +//Function Number: 56 +give_default(param_00) +{ +} + +//Function Number: 57 +can_give_ammo(param_00) +{ + var_01 = self getweaponslistprimaries(); + foreach(var_03 in var_01) + { + if(weaponclass(var_03) == "rocketlauncher" || weaponclass(var_03) == "item" || weaponclass(var_03) == "none") + { + continue; + } + + if(self getweaponammoclip(var_03) < weaponclipsize(var_03) || self getweaponammostock(var_03) < weaponmaxammo(var_03)) + { + return 1; + } + + var_04 = weaponaltweaponname(var_03); + if((var_04 != "none" && self getweaponammoclip(var_04) < weaponclipsize(var_04)) || self getweaponammostock(var_04) < weaponmaxammo(var_04)) + { + return 1; + } + } + + return 0; +} + +//Function Number: 58 +give_ammo(param_00) +{ + var_01 = self getweaponslistprimaries(); + foreach(var_03 in var_01) + { + if(var_03 == "rpg_survival") + { + continue; + } + + give_ammo_max(var_03); + } +} + +//Function Number: 59 +give_ammo_max(param_00) +{ + if(weaponinventorytype(param_00) == "altmode") + { + param_00 = get_weapon_name_from_alt(param_00); + } + + self setweaponammoclip(param_00,weaponclipsize(param_00)); + self setweaponammostock(param_00,weaponmaxammo(param_00)); + var_01 = weaponaltweaponname(param_00); + if(var_01 != "none") + { + self setweaponammoclip(var_01,weaponclipsize(var_01)); + self setweaponammostock(var_01,weaponmaxammo(var_01)); + } +} + +//Function Number: 60 +can_give_weapon(param_00) +{ + var_01 = weaponclass(param_00); + var_02 = 0; + var_03 = self getweaponslistprimaries(); + foreach(var_05 in var_03) + { + if(weaponclass(var_05) == var_01) + { + var_02 = 1; + break; + } + } + + if(var_02 == 0) + { + return 1; + } + + var_07 = get_weapon_base_name(param_00); + foreach(var_05 in var_03) + { + if(weaponclass(var_05) == "rocketlauncher" || weaponclass(var_05) == "item" || weaponclass(var_05) == "none") + { + continue; + } + + var_09 = get_weapon_base_name(var_05); + if(var_09 == var_07) + { + return 0; + } + } + + return 1; +} + +//Function Number: 61 +give_weapon(param_00,param_01) +{ + var_02 = get_replaceable_weapon(); + if(isdefined(var_02)) + { + self takeweapon(var_02); + } + + self giveweapon(param_00); + if(!isdefined(param_01)) + { + give_ammo_max(param_00); + } + + self switchtoweapon(param_00); +} + +//Function Number: 62 +get_replaceable_weapon() +{ + var_00 = self getweaponslistprimaries(); + if(var_00.size > 1) + { + var_01 = self getcurrentweapon(); + if(weaponinventorytype(var_01) == "altmode") + { + var_01 = get_weapon_name_from_alt(var_01); + } + + if(isdefined(var_01) && weaponinventorytype(var_01) == "primary") + { + return var_01; + } + else + { + var_02 = self getweaponslist("primary"); + foreach(var_04 in var_02) + { + if(weaponclass(var_04) != "item") + { + return var_04; + } + } + } + } + + return undefined; +} + +//Function Number: 63 +can_give_weapon_upgrade(param_00) +{ + var_01 = undefined; + if(isdefined(self.selected_weapon)) + { + var_01 = self.selected_weapon; + } + else + { + var_01 = self getcurrentweapon(); + } + + if(weaponinventorytype(var_01) == "altmode") + { + var_01 = get_weapon_name_from_alt(var_01); + } + + if(!isdefined(var_01) || var_01 == "none" || weaponinventorytype(var_01) != "primary" || weaponclass(var_01) == "item" || weaponclass(var_01) == "rocketlauncher" || weaponclass(var_01) == "none") + { + return 0; + } + + var_02 = get_weapon_base_name(var_01); + var_03 = get_upgrades_possible(var_02); + if(!var_03.size) + { + return 0; + } + + var_04 = 0; + foreach(var_06 in var_03) + { + if(param_00 == var_06) + { + var_04 = 1; + break; + } + } + + if(!var_04) + { + return 0; + } + + var_08 = get_upgrades_on_weapon(var_01); + foreach(var_06 in var_08) + { + if(param_00 == var_06) + { + return 2; + } + } + + return 1; +} + +//Function Number: 64 +give_weapon_upgrade(param_00) +{ + var_01 = self getcurrentweapon(); + if(isdefined(self.selected_weapon)) + { + var_01 = self.selected_weapon; + } + + if(weaponinventorytype(var_01) == "altmode") + { + var_01 = get_weapon_name_from_alt(var_01); + } + + if(!isdefined(var_01) || weaponinventorytype(var_01) != "primary") + { + return; + } + + var_02 = get_upgrades_on_weapon(var_01); + var_03 = undefined; + var_04 = get_slot(param_00); + if(var_02.size) + { + foreach(var_06 in var_02) + { + if(var_04 == get_slot(var_06)) + { + var_03 = var_06; + break; + } + } + } + + if(isdefined(var_03)) + { + foreach(var_09, var_06 in var_02) + { + if(var_06 == var_03) + { + var_02[var_09] = param_00; + break; + } + } + } + else + { + var_02[var_02.size] = param_00; + } + + var_0A = get_weapon_base_name(var_01); + var_0B = var_0A; + while(var_02.size > 0) + { + var_0C = var_02[0]; + for(var_0D = 1;var_0D < var_02.size;var_0D++) + { + if(common_scripts\utility::is_later_in_alphabet(var_0C,var_02[var_0D])) + { + var_0C = var_02[var_0D]; + } + } + + var_0B = var_0B + "_" + get_attachment_fullname(var_0C,var_0A); + var_02 = common_scripts\utility::array_remove(var_02,var_0C); + } + + var_0E = self getweaponammoclip(var_01); + var_0F = self getweaponammostock(var_01); + var_10 = undefined; + var_11 = undefined; + var_12 = weaponaltweaponname(var_01); + if(var_12 != "none") + { + var_10 = self getweaponammoclip(var_12); + var_11 = self getweaponammostock(var_12); + } + + self takeweapon(var_01); + self giveweapon(var_0B); + self setweaponammoclip(var_0B,var_0E); + self setweaponammostock(var_0B,var_0F); + var_13 = weaponaltweaponname(var_0B); + if(var_13 != "none") + { + if(var_04 != "main") + { + self setweaponammoclip(var_13,var_10); + self setweaponammostock(var_13,var_11); + } + else + { + self setweaponammoclip(var_13,weaponclipsize(var_13)); + self setweaponammostock(var_13,weaponmaxammo(var_13)); + } + } + + lib_0623::func_3F07(var_0B); + self switchtoweapon(var_0B); +} + +//Function Number: 65 +get_attachment_fullname(param_00,param_01) +{ + var_02 = get_sub_type(param_01); + switch(var_02) + { + case "smg": + if(param_00 == "reflex") + { + return "reflexsmg"; + } + else if(param_00 == "eotech") + { + return "eotechsmg"; + } + else if(param_00 == "acog") + { + return "acogsmg"; + } + else if(param_00 == "thermal") + { + return "thermalsmg"; + } + + break; + + case "lmg": + if(param_00 == "reflex") + { + return "reflexlmg"; + } + else if(param_00 == "eotech") + { + return "eotechlmg"; + } + + break; + + case "machinepistol": + if(param_00 == "reflex") + { + return "reflexsmg"; + } + else if(param_00 == "eotech") + { + return "eotechsmg"; + } + + break; + + default: + return param_00; + } +} + +//Function Number: 66 +get_attachment_basename(param_00) +{ + if(issubstr(param_00,"reflex")) + { + return "reflex"; + } + + if(issubstr(param_00,"eotech")) + { + return "eotech"; + } + + if(issubstr(param_00,"acog")) + { + return "acog"; + } + + if(issubstr(param_00,"reflex")) + { + return "reflex"; + } + + return param_00; +} + +//Function Number: 67 +get_weapon_base_name(param_00) +{ + var_01 = undefined; + var_02 = 0; + var_03 = undefined; + if(weaponinventorytype(param_00) == "altmode") + { + var_02 = 4; + } + + for(var_04 = var_02 + 4;var_04 < param_00.size;var_04++) + { + if(param_00[var_04] == "_") + { + var_03 = var_04 + 3; + break; + } + } + + var_01 = getsubstr(param_00,var_02,var_03); + return var_01; +} + +//Function Number: 68 +get_upgrades_on_weapon(param_00) +{ + var_01 = []; + var_02 = get_weapon_base_name(param_00); + if(var_02 == param_00) + { + return var_01; + } + + var_03 = getsubstr(param_00,var_02.size); + var_04 = strtok(var_03,"_"); + for(var_05 = 0;var_05 < var_04.size;var_05++) + { + var_04[var_05] = get_attachment_basename(var_04[var_05]); + } + + return var_04; +} + +//Function Number: 69 +get_weapon_name_from_alt(param_00) +{ + if(weaponinventorytype(param_00) != "altmode") + { + return param_00; + } + + return getsubstr(param_00,4); +} + +//Function Number: 70 +can_give_grenade(param_00) +{ + var_01 = get_maxstock(param_00); + return self getweaponammostock(param_00) < var_01; +} + +//Function Number: 71 +give_grenade(param_00) +{ + if(!self hasweapon(param_00)) + { + self giveweapon(param_00); + } + + if(issubstr(param_00,"flash") && self getoffhandprimaryclass() != "flash") + { + self setoffhandsecondaryclass("flash"); + } + + var_01 = get_maxstock(param_00); + self setweaponammostock(param_00,var_01); +} + +//Function Number: 72 +can_give_launcher(param_00) +{ + if(self hasweapon(param_00)) + { + if(param_00 == "rpg_survival") + { + var_01 = self getweaponammoclip("rpg_survival") + self getweaponammostock("rpg_survival"); + return get_maxstock("rpg_survival") > var_01; + } + } + + return 1; +} + +//Function Number: 73 +can_give_slotted_explosive(param_00) +{ + if(self hasweapon(param_00)) + { + if(param_00 == "claymore") + { + var_01 = self getweaponammostock(param_00); + return get_maxstock(param_00) != var_01; + } + + if(var_01 == "c4") + { + var_01 = self getweaponammostock(var_01); + return get_maxstock(param_00) != var_01; + } + } + + return 1; +} + +//Function Number: 74 +give_launcher(param_00) +{ + if(!self hasweapon(param_00)) + { + if(param_00 == "rpg_survival") + { + give_weapon("rpg_survival",1); + self setweaponammoclip("rpg_survival",1); + self setweaponammostock("rpg_survival",1); + return; + } + + return; + } + + if(param_00 == "rpg_survival") + { + var_01 = self getweaponammoclip(param_00) + self getweaponammostock(param_00); + var_02 = 1; + var_03 = int(min(1 + var_01,get_maxstock(param_00) - 1)); + self setweaponammoclip("rpg_survival",var_02); + self setweaponammostock("rpg_survival",var_03); + self switchtoweapon("rpg_survival"); + } +} + +//Function Number: 75 +give_slotted_explosive(param_00) +{ + var_01 = 5; + var_02 = 0; + var_03 = 0; + var_04 = 1; + if(!self hasweapon(param_00)) + { + if(param_00 == "claymore") + { + var_04 = 1; + } + else if(param_00 == "c4") + { + var_04 = 2; + } + + self giveweapon(param_00); + self setactionslot(var_04,"weapon",param_00); + } + else + { + var_02 = self getweaponammostock(param_00); + } + + self setweaponammostock(param_00,var_02 + var_01 - var_03); +} + +//Function Number: 76 +can_give_riotshield_so(param_00) +{ + var_01 = self getweaponslistprimaries(); + foreach(var_03 in var_01) + { + if(issubstr(var_03,"riotshield")) + { + return 0; + } + } + + return 1; +} + +//Function Number: 77 +give_riotshield_so(param_00) +{ + give_weapon(param_00,1); +} + +//Function Number: 78 +can_give_sentry(param_00) +{ + if(!has_open_slot_right()) + { + return 0; + } + + if(maps\_utility::is_coop()) + { + return !has_sentry() && get_total_sentries() < 2; + } + + return get_total_sentries() < 2; +} + +//Function Number: 79 +give_sentry(param_00) +{ + thread maps\_sp_killstreaks::give_sp_killstreak(param_00); +} + +//Function Number: 80 +can_give_armor(param_00) +{ + if(!isdefined(self.armor)) + { + return 1; + } + + var_01 = 0; + if(param_00 == "armor") + { + var_01 = 250; + } + else if(param_00 == "juggernaut_suit") + { + var_01 = 500; + } + + if(self.armor["points"] < var_01) + { + return 1; + } + + return 0; +} + +//Function Number: 81 +give_armor(param_00) +{ + give_armor_amount(param_00); +} + +//Function Number: 82 +armor_init() +{ + self.max_armor_points = 0; + self.armor = []; + self.armor["type"] = ""; + self.armor["points"] = 0; + thread player_armor_shield(); +} + +//Function Number: 83 +give_armor_amount(param_00,param_01) +{ + if(!isdefined(param_01)) + { + if(param_00 == "armor") + { + param_01 = 250; + } + else if(param_00 == "juggernaut_suit") + { + param_01 = 500; + } + else + { + return; + } + } + + if(!isdefined(self.armor)) + { + armor_init(); + } + + self.dogs_dont_instant_kill = 1; + self.armor["type"] = param_00; + self.armor["points"] = param_01; + self.max_armor_points = param_01; + self notify("health_update"); +} + +//Function Number: 84 +player_armor_shield() +{ + self endon("death"); + if(isdefined(self.armor_shield_on)) + { + return; + } + + self.armor_shield_on = 1; + for(;;) + { + self waittill("damage",var_00,var_01,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09); + self.previous_health = int(min(100,self.health + var_00)); + self.saved_by_armor = 0; + if(self.armor["points"] > 0) + { + self.saved_by_armor = 1; + var_0A = self.armor["points"] - var_00; + var_0B = int(max(0,0 - var_0A)); + if(!var_0B) + { + self.armor["points"] = self.armor["points"] - var_00; + self setnormalhealth(1); + } + else + { + var_0C = maps\_so_survival_code::int_capped(self.previous_health - var_0B,1,100) / 100; + self setnormalhealth(var_0C); + if(self.armor["points"] + self.previous_health <= var_00) + { + self.saved_by_armor = 0; + } + + self.armor["points"] = 0; + } + + if(self.armor["points"] <= 0) + { + self.dogs_dont_instant_kill = undefined; + } + + self notify("health_update"); + } + } +} + +//Function Number: 85 +can_give_laststand(param_00) +{ + return maps\_laststand::get_lives_remaining() == 0; +} + +//Function Number: 86 +give_laststand(param_00) +{ + maps\_laststand::update_lives_remaining(1); +} + +//Function Number: 87 +can_give_remote_missile(param_00) +{ + return has_open_slot_right(); +} + +//Function Number: 88 +give_remote_missile(param_00) +{ + thread maps\_sp_killstreaks::give_sp_killstreak(param_00); +} + +//Function Number: 89 +can_give_friendlies(param_00) +{ + if(!has_open_slot_right()) + { + return 0; + } + + var_01 = getaiarray("allies"); + foreach(var_03 in var_01) + { + if(isalive(var_03) && isdefined(var_03.owner) && var_03.owner == self) + { + return 0; + } + } + + return 1; +} + +//Function Number: 90 +give_friendlies(param_00) +{ + thread give_friendlies_monitor_use(param_00); +} + +//Function Number: 91 +give_friendlies_monitor_use(param_00) +{ + self endon("death"); + var_01 = "specops_ui_deltasupport"; + if(param_00 == "friendly_support_delta") + { + var_01 = "specops_ui_deltasupport"; + } + + if(param_00 == "friendly_support_riotshield") + { + var_01 = "specops_ui_riotshieldsupport"; + } + + self setweaponhudiconoverride("actionslot4",var_01); + notifyoncommand("friendly_support_called","+actionslot 4"); + self waittill("friendly_support_called"); + lib_0623::spawn_allies(self.origin,param_00,self); + self setweaponhudiconoverride("actionslot4","none"); +} + +//Function Number: 92 +can_give_airstrike(param_00) +{ + return !self hasweapon("air_support_strobe"); +} + +//Function Number: 93 +give_airstrike(param_00) +{ + thread maps\_air_support_strobe::enable_strobes_for_player(); + thread sticky_strobe(); + thread disable_strobe_for_player(); +} + +//Function Number: 94 +sticky_strobe() +{ + level endon("special_op_terminated"); + self endon("death"); + self endon("strobe_timeout"); + for(;;) + { + self waittill("grenade_fire",var_00,var_01); + var_00.sticky = 0; + if(var_01 != "air_support_strobe") + { + continue; + } + + var_02 = getaispeciesarray("axis","all"); + foreach(var_04 in var_02) + { + if(isai(var_04) && isalive(var_04)) + { + var_04 thread watch_for_strobe_hit(); + } + } + + if(isdefined(level.bosses) && level.bosses.size) + { + foreach(var_07 in level.bosses) + { + if(isdefined(var_07.vehicletype)) + { + var_07 thread watch_for_strobe_hit(); + } + } + } + + thread strobe_timeout(); + self waittill("strobe_stuck_on_ai",var_09); + var_00.sticky = 1; + if(isdefined(var_09)) + { + if(isai(var_09)) + { + var_00.origin = var_09 gettagorigin("j_mainroot"); + var_00 linkto(var_09,"j_mainroot"); + } + else + { + var_00.origin = var_09.origin; + var_00 linkto(var_09); + } + + for(;;) + { + var_09 waittill("death"); + if(isdefined(var_00)) + { + var_00 unlink(); + } + + return; + } + } + } +} + +//Function Number: 95 +strobe_timeout() +{ + self endon("strobe_stuck_on_ai"); + wait 5; + self notify("strobe_timeout"); +} + +//Function Number: 96 +watch_for_strobe_hit() +{ + level endon("special_op_terminated"); + self endon("death"); + for(;;) + { + self waittill("damage",var_00,var_01,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09); + if(!isdefined(var_09) || !isdefined(var_01) || !isplayer(var_01)) + { + continue; + } + + if(var_09 == "air_support_strobe") + { + var_01 notify("strobe_stuck_on_ai",self); + return; + } + } +} + +//Function Number: 97 +disable_strobe_for_player() +{ + level endon("special_op_terminated"); + self endon("death"); + for(;;) + { + level waittill("air_suport_strobe_fired_upon",var_00); + if(var_00.owner == self && !self hasweapon("air_support_strobe")) + { + thread maps\_air_support_strobe::disable_strobes_for_player(); + return; + } + } +} + +//Function Number: 98 +can_give_chopper(param_00) +{ + return 0; +} + +//Function Number: 99 +give_chopper(param_00) +{ +} + +//Function Number: 100 +can_give_perk_care_package(param_00) +{ + if(self hasperk(param_00,1)) + { + return 0; + } + + return has_open_slot_right(); +} + +//Function Number: 101 +give_perk_care_package(param_00) +{ + thread maps\_sp_killstreaks::give_sp_killstreak(param_00); +} + +//Function Number: 102 +get_item_ent(param_00,param_01) +{ + var_02 = "called get_item_ent() before armory tables are built!"; + if(isdefined(param_01)) + { + return level.armory[param_01][param_00]; + } + + return level.armory_all_items[param_00]; +} + +//Function Number: 103 +is_item_locked(param_00) +{ + var_01 = param_00.unlockrank; + var_02 = maps\_rank::getrank(); + return var_02 >= var_01; +} + +//Function Number: 104 +can_afford(param_00) +{ + return self.survival_credit >= param_00.cost; +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_so_survival_challenge.gsc b/MW3/PC/SP/maps/_so_survival_challenge.gsc new file mode 100644 index 0000000..5ecf763 --- /dev/null +++ b/MW3/PC/SP/maps/_so_survival_challenge.gsc @@ -0,0 +1,578 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_so_survival_challenge.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 33 + * Decompile Time: 538 ms + * Timestamp: 10/27/2023 2:21:27 AM +*******************************************************************/ + +//Function Number: 1 +precache_challenge_strings() +{ + precachestring(&"SO_SURVIVAL_SUR_CH_HEADSHOT"); + precachestring(&"SO_SURVIVAL_SUR_CH_STREAK"); + precachestring(&"SO_SURVIVAL_SUR_CH_STAGGER"); + precachestring(&"SO_SURVIVAL_SUR_CH_QUADKILL"); + precachestring(&"SO_SURVIVAL_SUR_CH_FLASH"); + precachestring(&"SO_SURVIVAL_SUR_CH_KNIFE"); +} + +//Function Number: 2 +ch_populate() +{ + var_00 = 0; + var_01 = 20; + var_02 = []; + for(var_03 = var_00;var_03 <= var_01;var_03++) + { + var_04 = ch_get_ref_by_index(var_03); + if(!isdefined(var_04) || var_04 == "") + { + break; + } + + var_05 = spawnstruct(); + var_05.idx = var_03; + var_05.ref = var_04; + var_05.name = ch_get_name(var_04); + var_05.var_189B = ch_get_desc(var_04); + var_05.splash = ch_get_splash(var_04); + var_05.icon = ch_get_icon(var_04); + var_05.requirement = ch_get_requirement(var_04); + var_05.xp = ch_get_xp(var_04); + var_05.repeatable = ch_get_repeatable(var_04); + var_05.carry = ch_get_carry(var_04); + var_05.wave_active = ch_get_wave_active(var_04); + var_05.wave_inactive = ch_get_wave_inactive(var_04); + var_05.func = challenge_func_director(var_04); + var_02[var_04] = var_05; + } + + return var_02; +} + +//Function Number: 3 +challenge_init() +{ + level.sur_ch = ch_populate(); + common_scripts\utility::flag_init("challenge_monitor_busy"); + maps\_utility::add_global_spawn_function("axis",::track_melee_streak); + maps\_utility::add_global_spawn_function("axis",::track_flash_kill); + foreach(var_01 in level.players) + { + var_01 thread sur_challenge_think(); + } +} + +//Function Number: 4 +sur_challenge_think() +{ + wait 0.05; + for(var_00 = 0;var_00 < 5;var_00++) + { + maps\_specialops::surhud_challenge_label(var_00,""); + maps\_specialops::surhud_challenge_progress(var_00,0); + maps\_specialops::surhud_challenge_reward(var_00,0); + } + + maps\_specialops::surhud_disable("challenge"); + common_scripts\utility::flag_wait("start_survival"); + for(;;) + { + var_01 = []; + foreach(var_03 in level.sur_ch) + { + if(var_03.wave_active == 0) + { + continue; + } + + if(var_03.wave_inactive == 0) + { + if(level.current_wave >= var_03.wave_active) + { + var_01[var_01.size] = var_03; + } + + continue; + } + + if(level.current_wave >= var_03.wave_active && level.current_wave <= var_03.wave_inactive) + { + var_01[var_01.size] = var_03; + } + } + + var_05 = 0; + var_01 = maps\_utility::array_randomize(var_01); + self.selected_ch_array = []; + self.completed_ch = []; + foreach(var_07 in var_01) + { + if(var_05 == 2) + { + break; + } + + self.selected_ch_array[var_07.ref] = spawnstruct(); + self.selected_ch_array[var_07.ref].index = var_05; + self.selected_ch_array[var_07.ref].struct = var_07; + self.completed_ch[var_07.ref] = 0; + self thread [[ var_07.func ]](var_07.ref); + var_05++; + } + + maps\_specialops::surhud_animate("challenge"); + level waittill("wave_ended"); + level waittill("wave_started"); + self notify("challenge_reset"); + } +} + +//Function Number: 5 +challenge_func_director(param_00) +{ + switch(param_00) + { + case "sur_ch_headshot": + return ::sur_ch_headshot; + + case "sur_ch_streak": + return ::sur_ch_streak; + + case "sur_ch_stagger": + return ::sur_ch_stagger; + + case "sur_ch_quadkill": + return ::sur_ch_quadkill; + + case "sur_ch_knife": + return ::sur_ch_knife; + + case "sur_ch_flash": + return ::sur_ch_flash; + } + + return undefined; +} + +//Function Number: 6 +sur_ch_generic(param_00) +{ + self endon("death"); + self endon("challenge_reset"); + var_01 = self.selected_ch_array[param_00].index; + var_02 = ch_get_requirement(param_00); + var_03 = ch_get_xp(param_00); + var_04 = ch_get_carry(param_00); + var_05 = ch_get_repeatable(param_00); + self.selected_ch_array[param_00].completed = 0; + self.selected_ch_array[param_00].progress = 0; + thread setup_ch_progress_bar(var_01,param_00); + var_06 = undefined; + for(;;) + { + while(self.selected_ch_array[param_00].progress < var_02) + { + self waittill(param_00,var_07,var_06); + if(!isdefined(var_07)) + { + var_07 = 1; + } + + if(var_07 < 0) + { + self.selected_ch_array[param_00].progress = 0; + } + else + { + self.selected_ch_array[param_00].progress = self.selected_ch_array[param_00].progress + var_07; + } + + thread ch_progress_bar_update(param_00); + } + + if(isdefined(var_06) && isai(var_06)) + { + playfx(level._effect["money"],var_06.origin + (0,0,32)); + } + + self.selected_ch_array[param_00].progress = 0; + self.selected_ch_array[param_00].completed++; + var_08 = self.selected_ch_array[param_00].completed * ch_get_xp(param_00); + maps\_utility::givexp(param_00,var_08); + thread indicate_completion(param_00,var_08); + while(common_scripts\utility::flag("challenge_monitor_busy")) + { + wait 0.05; + } + + self notify("challenge_complete",param_00); + maps\_utility::delaythread(0.05,::ch_progress_bar_update,param_00); + if(!var_05) + { + return; + } + } +} + +//Function Number: 7 +generic_kill_monitor(param_00,param_01) +{ + self endon("death"); + self endon("challenge_reset"); + for(;;) + { + var_02 = self.stats["kills"]; + level waittill("specops_player_kill",var_03,var_04,var_05,var_06); + if(!isalive(var_03) || var_03 != self) + { + continue; + } + + waittillframeend; + if(var_02 < self.stats["kills"]) + { + var_07 = self.stats["kills"] - var_02; + for(var_08 = 0;var_08 < var_07;var_08++) + { + self notify(param_00,param_01,var_04); + waittillframeend; + } + } + } +} + +//Function Number: 8 +sur_ch_flash(param_00) +{ + thread sur_ch_generic(param_00); +} + +//Function Number: 9 +track_flash_kill() +{ + level endon("special_op_terminated"); + if(!isai(self)) + { + return; + } + + self waittill("death",var_00,var_01,var_02); + if(!isdefined(var_00) || !isplayer(var_00)) + { + return; + } + + if(common_scripts\utility::isflashed()) + { + var_00 notify("sur_ch_flash",1); + } +} + +//Function Number: 10 +sur_ch_knife(param_00) +{ + thread sur_ch_generic(param_00); +} + +//Function Number: 11 +track_melee_streak() +{ + level endon("special_op_terminated"); + if(!isai(self)) + { + return; + } + + self waittill("death",var_00,var_01,var_02); + if(!isdefined(var_00) || !isplayer(var_00)) + { + return; + } + + if(isdefined(var_02) && weapontype(var_02) == "riotshield") + { + var_00 notify("sur_ch_knife",-1); + return; + } + + if(isdefined(var_01) && var_01 == "MOD_MELEE") + { + var_00 notify("sur_ch_knife",1); + return; + } + + var_00 notify("sur_ch_knife",-1); +} + +//Function Number: 12 +sur_ch_quadkill(param_00) +{ + thread sur_ch_generic(param_00); +} + +//Function Number: 13 +sur_ch_headshot(param_00) +{ + thread sur_ch_generic(param_00); +} + +//Function Number: 14 +sur_ch_streak(param_00) +{ + self endon("death"); + self endon("challenge_reset"); + thread sur_ch_generic(param_00); + waittillframeend; + thread generic_kill_monitor(param_00,1); + thread streak_reset(param_00); +} + +//Function Number: 15 +streak_reset(param_00) +{ + self endon("death"); + self endon("challenge_reset"); + for(;;) + { + self waittill("damage",var_01,var_02); + if(isdefined(var_02) && isai(var_02)) + { + self notify(param_00,-1); + } + } +} + +//Function Number: 16 +sur_ch_stagger(param_00) +{ + self endon("death"); + self endon("challenge_reset"); + thread sur_ch_generic(param_00); + waittillframeend; + thread generic_kill_monitor(param_00,6); + thread stagger_decay(param_00); +} + +//Function Number: 17 +stagger_decay(param_00) +{ + self endon("death"); + self endon("challenge_reset"); + var_01 = 5; + var_01 = min(20,var_01); + var_02 = 1 / var_01; + for(;;) + { + var_03 = 2; + while(self.selected_ch_array[param_00].progress == 0) + { + common_scripts\utility::waittill_any_timeout(var_03,param_00); + } + + if(level.survival_wave_intermission) + { + level waittill("wave_started"); + wait var_03; + } + + for(var_04 = 0;var_04 < var_01;var_04++) + { + wait 1 / var_01; + var_05 = self.selected_ch_array[param_00].progress; + self.selected_ch_array[param_00].progress = max(0,var_05 - var_02); + thread ch_progress_bar_update(param_00); + } + } +} + +//Function Number: 18 +setup_ch_progress_bar(param_00,param_01) +{ + maps\_specialops::surhud_challenge_label(param_00,ch_get_name(param_01)); + thread ch_progress_bar_update(param_01); +} + +//Function Number: 19 +ch_progress_bar_update(param_00) +{ + var_01 = self.selected_ch_array[param_00].index; + var_02 = self.selected_ch_array[param_00].progress; + var_03 = self.selected_ch_array[param_00].completed + 1; + var_04 = ch_get_requirement(param_00); + maps\_specialops::surhud_challenge_reward(var_01,ch_get_xp(param_00) * var_03); + maps\_specialops::surhud_challenge_progress(var_01,int(var_02 / var_04 * 100) / 100); +} + +//Function Number: 20 +indicate_completion(param_00,param_01) +{ + if(isdefined(self.doingnotify) && self.doingnotify) + { + while(self.doingnotify) + { + wait 0.05; + } + } + + var_02 = spawnstruct(); + var_02.duration = 2.5; + var_02.sound = "survival_bonus_splash"; + var_02.type = "wave"; + var_02.title_font = "hudbig"; + var_02.playsoundlocally = 1; + var_02.zoomin = 1; + var_02.var_3E34 = 1; + var_02.fadein = 1; + var_02.fadeout = 1; + var_02.title_glowcolor = (0.85,0.35,0.15); + var_02.title_color = (0.95,0.95,0.9); + var_02.title = ch_get_splash(param_00); + var_02.title_set_value = param_01; + if(issplitscreen()) + { + var_02.title_basefontscale = 1; + } + else + { + var_02.title_basefontscale = 1.1; + } + + maps\_so_survival_code::splash_notify_message(var_02); +} + +//Function Number: 21 +ch_exist(param_00) +{ + return isdefined(level.sur_ch) && isdefined(level.sur_ch[param_00]); +} + +//Function Number: 22 +ch_get_index_by_ref(param_00) +{ + if(ch_exist(param_00)) + { + return level.sur_ch[param_00].idx; + } + + return tablelookup("sp/survival_challenge.csv",1,param_00,0); +} + +//Function Number: 23 +ch_get_ref_by_index(param_00) +{ + return tablelookup("sp/survival_challenge.csv",0,param_00,1); +} + +//Function Number: 24 +ch_get_name(param_00) +{ + if(ch_exist(param_00)) + { + return level.sur_ch[param_00].name; + } + + return tablelookup("sp/survival_challenge.csv",1,param_00,2); +} + +//Function Number: 25 +ch_get_desc(param_00) +{ + if(ch_exist(param_00)) + { + return level.sur_ch[param_00].var_189B; + } + + return tablelookup("sp/survival_challenge.csv",1,param_00,3); +} + +//Function Number: 26 +ch_get_splash(param_00) +{ + if(ch_exist(param_00)) + { + return level.sur_ch[param_00].splash; + } + + return tablelookupistring("sp/survival_challenge.csv",1,param_00,4); +} + +//Function Number: 27 +ch_get_icon(param_00) +{ + if(ch_exist(param_00)) + { + return level.sur_ch[param_00].icon; + } + + return tablelookup("sp/survival_challenge.csv",1,param_00,5); +} + +//Function Number: 28 +ch_get_requirement(param_00) +{ + if(ch_exist(param_00)) + { + return level.sur_ch[param_00].requirement; + } + + return int(tablelookup("sp/survival_challenge.csv",1,param_00,6)); +} + +//Function Number: 29 +ch_get_xp(param_00) +{ + if(ch_exist(param_00)) + { + return level.sur_ch[param_00].xp; + } + + return int(tablelookup("sp/survival_challenge.csv",1,param_00,7)); +} + +//Function Number: 30 +ch_get_repeatable(param_00) +{ + if(ch_exist(param_00)) + { + return level.sur_ch[param_00].repeatable; + } + + return int(tablelookup("sp/survival_challenge.csv",1,param_00,8)); +} + +//Function Number: 31 +ch_get_carry(param_00) +{ + if(ch_exist(param_00)) + { + return level.sur_ch[param_00].carry; + } + + return int(tablelookup("sp/survival_challenge.csv",1,param_00,9)); +} + +//Function Number: 32 +ch_get_wave_active(param_00) +{ + if(ch_exist(param_00)) + { + return level.sur_ch[param_00].wave_active; + } + + return int(tablelookup("sp/survival_challenge.csv",1,param_00,10)); +} + +//Function Number: 33 +ch_get_wave_inactive(param_00) +{ + if(ch_exist(param_00)) + { + return level.sur_ch[param_00].wave_inactive; + } + + return int(tablelookup("sp/survival_challenge.csv",1,param_00,11)); +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_so_survival_chaos.gsc b/MW3/PC/SP/maps/_so_survival_chaos.gsc new file mode 100644 index 0000000..a2bb362 --- /dev/null +++ b/MW3/PC/SP/maps/_so_survival_chaos.gsc @@ -0,0 +1,5798 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_so_survival_chaos.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 203 + * Decompile Time: 3468 ms + * Timestamp: 10/27/2023 2:19:10 AM +*******************************************************************/ + +//Function Number: 1 +chaos_pre_preload() +{ + var_00 = getdvar("mapname"); + if(issplitscreen() || getdvar("coop") == "1") + { + level.var_3F63 = "sp/coop_" + var_00 + "_chaos_waves.csv"; + return; + } + + level.var_3F63 = "sp/" + var_00 + "_chaos_waves.csv"; +} + +//Function Number: 2 +chaos_preload() +{ + precachemodel("prop_dogtags_foe"); + precachemodel("prop_dogtags_friend"); + precacheshader("chaos_specialty_juiced"); + precacheshader("chaos_specialty_armorvest"); + precacheshader("chaos_bonus_points"); + precacheshader("chaos_bonus_combo"); + precacheshader("chaos_bonus_time"); + precacheshader("chaos_meter_1"); + precacheshader("chaos_meter_2"); + precacheshader("chaos_meter_3"); + precacheshader("chaos_meter_4"); + precacheshader("chaos_meter_5"); + precacheshader("chaos_meter_6"); + precacheshader("chaos_meter_7"); + precacheshader("chaos_meter_8"); + precacheshader("chaos_meter_9"); + precacheshader("chaos_meter_10"); + precacheshader("chaos_meter_11"); + precacheshader("chaos_meter_12"); + precacheshader("chaos_meter_13"); + precacheshader("chaos_meter_14"); + precacheshader("chaos_meter_15"); + precacheshader("chaos_meter_16"); + precacheshader("chaos_frozen_meter"); + precacheitem("chaos_freeze_meter"); + precacheshader("chaos_bonus_freeze_meter"); + precacheshader("chaos_bonus_sentry_gun"); + precacheshader("chaos_bonus_laststand"); + precacheshader("combathigh_overlay"); + precachestring(&"SO_SURVIVAL_CHAOS_EASY_KILL"); + precachestring(&"SO_SURVIVAL_CHAOS_PLUS_SIGN"); + precachestring(&"SO_SURVIVAL_CHAOS_EMPTY"); + precachestring(&"SO_SURVIVAL_CHAOS_DOG_KILL"); + precachestring(&"SO_SURVIVAL_CHAOS_EXP_DOG"); + precachestring(&"SO_SURVIVAL_CHAOS_SUICIDE_BOMBER"); + precachestring(&"SO_SURVIVAL_CHAOS_CHEMICAL_CORPS"); + precachestring(&"SO_SURVIVAL_CHAOS_CLAYMORE_CORPS"); + precachestring(&"SO_SURVIVAL_CHAOS_REG_JUG"); + precachestring(&"SO_SURVIVAL_CHAOS_EXP_JUG"); + precachestring(&"SO_SURVIVAL_CHAOS_SHIELD_JUG"); + precachestring(&"SO_SURVIVAL_CHAOS_MINIGUN_JUG"); + precachestring(&"SO_SURVIVAL_CHAOS_DES_CHOPPER"); + precachestring(&"SO_SURVIVAL_CHAOS_REGULAR_KILL"); + precachestring(&"SO_SURVIVAL_CHAOS_HARDENED_KILL"); + precachestring(&"SO_SURVIVAL_CHAOS_VETERAN_KILL"); + precachestring(&"SO_SURVIVAL_CHAOS_ELITE_KILL"); + precachestring(&"SO_SURVIVAL_CHAOS_STAB"); + precachestring(&"SO_SURVIVAL_CHAOS_HEAD_SHOT"); + precachestring(&"SO_SURVIVAL_CHAOS_EXPLOSION"); + precachestring(&"SO_SURVIVAL_CHAOS_GRENADE"); + precachestring(&"SO_SURVIVAL_CHAOS_EXECUTION"); + precachestring(&"SO_SURVIVAL_CHAOS_TRIPLE_KILL"); + precachestring(&"SO_SURVIVAL_CHAOS_QUAD_KILL"); + precachestring(&"SO_SURVIVAL_CHAOS_MULTI_KILL"); + precachestring(&"SO_SURVIVAL_CHAOS_LONG_SHOT"); + precachestring(&"SO_SURVIVAL_CHAOS_TRIPLE_HEADSHOT"); + precachestring(&"SO_SURVIVAL_CHAOS_TRIPLE_KNIFE_KILL"); + precachestring(&"SO_SURVIVAL_CHAOS_TRIPLE_LONGSHOT"); + precachestring(&"SO_SURVIVAL_CHAOS_MASSIVE_EXPLOSION"); + precachestring(&"SO_SURVIVAL_CHAOS_DOG_TAGS"); + precachestring(&"SO_SURVIVAL_CHAOS_NEW_WEAPON"); + precachestring(&"SO_SURVIVAL_CHAOS_BONUS_SCORE"); + precachestring(&"SO_SURVIVAL_CHAOS_CARE_PACKAGE"); + precachestring(&"SO_SURVIVAL_CHAOS_SPLASH_FINAL_STAND"); + precachestring(&"SO_SURVIVAL_CHAOS_SPLASH_DEMO_MAN"); + precachestring(&"SO_SURVIVAL_CHAOS_SPLASH_LONG_SHOOTER"); + precachestring(&"SO_SURVIVAL_CHAOS_SPLASH_HEAD_HUNTER"); + precachestring(&"SO_SURVIVAL_CHAOS_SPLASH_SLASHER"); + precachestring(&"SO_SURVIVAL_CHAOS_SPLASH_TRIPLE_KILL"); + precachestring(&"SO_SURVIVAL_CHAOS_SPLASH_QUAD_KILL"); + precachestring(&"SO_SURVIVAL_CHAOS_SPLASH_MULTI_KILL"); + precachestring(&"SO_SURVIVAL_CHAOS_PICKUP_ACR"); + precachestring(&"SO_SURVIVAL_CHAOS_PICKUP_CLAYMORE"); + precachestring(&"SO_SURVIVAL_CHAOS_PICKUP_C4"); + precachestring(&"SO_SURVIVAL_CHAOS_PICKUP_FLASH"); + precachestring(&"SO_SURVIVAL_CHAOS_PICKUP_1887"); + precachestring(&"SO_SURVIVAL_CHAOS_PICKUP_AA12"); + precachestring(&"SO_SURVIVAL_CHAOS_PICKUP_AK47"); + precachestring(&"SO_SURVIVAL_CHAOS_PICKUP_AS50"); + precachestring(&"SO_SURVIVAL_CHAOS_PICKUP_CM901"); + precachestring(&"SO_SURVIVAL_CHAOS_PICKUP_FAD"); + precachestring(&"SO_SURVIVAL_CHAOS_PICKUP_FMG9"); + precachestring(&"SO_SURVIVAL_CHAOS_PICKUP_G18"); + precachestring(&"SO_SURVIVAL_CHAOS_PICKUP_MG36"); + precachestring(&"SO_SURVIVAL_CHAOS_PICKUP_G36"); + precachestring(&"SO_SURVIVAL_CHAOS_PICKUP_M16"); + precachestring(&"SO_SURVIVAL_CHAOS_PICKUP_M4"); + precachestring(&"SO_SURVIVAL_CHAOS_PICKUP_M60"); + precachestring(&"SO_SURVIVAL_CHAOS_PICKUP_M9"); + precachestring(&"SO_SURVIVAL_CHAOS_PICKUP_MK14"); + precachestring(&"SO_SURVIVAL_CHAOS_PICKUP_MK46"); + precachestring(&"SO_SURVIVAL_CHAOS_PICKUP_MP5"); + precachestring(&"SO_SURVIVAL_CHAOS_PICKUP_MP7"); + precachestring(&"SO_SURVIVAL_CHAOS_PICKUP_MP9"); + precachestring(&"SO_SURVIVAL_CHAOS_PICKUP_PP90"); + precachestring(&"SO_SURVIVAL_CHAOS_PICKUP_P90"); + precachestring(&"SO_SURVIVAL_CHAOS_PICKUP_PECHENEG"); + precachestring(&"SO_SURVIVAL_CHAOS_PICKUP_RSASS"); + precachestring(&"SO_SURVIVAL_CHAOS_PICKUP_SA80"); + precachestring(&"SO_SURVIVAL_CHAOS_PICKUP_SCAR"); + precachestring(&"SO_SURVIVAL_CHAOS_PICKUP_SKORPION"); + precachestring(&"SO_SURVIVAL_CHAOS_PICKUP_STRIKER"); + precachestring(&"SO_SURVIVAL_CHAOS_PICKUP_TYPE95"); + precachestring(&"SO_SURVIVAL_CHAOS_PICKUP_USP45"); + precachestring(&"SO_SURVIVAL_CHAOS_PICKUP_UMP45"); + precachestring(&"SO_SURVIVAL_CHAOS_PICKUP_USAS12"); + precachestring(&"SO_SURVIVAL_CHAOS_PICKUP_RPG"); + precachestring(&"SO_SURVIVAL_CHAOS_HIGHEST_COMBO"); + precachestring(&"SO_SURVIVAL_CHAOS_BONUS_POINT"); + precachestring(&"SO_SURVIVAL_CHAOS_BONUS_MULTIPLIER"); + precachestring(&"SO_SURVIVAL_CHAOS_BONUS_TIME"); + precachestring(&"SO_SURVIVAL_CHAOS_BONUS_LASTSTAND"); + precachestring(&"SO_SURVIVAL_CHAOS_BONUS_FREEZE_METER"); + precachestring(&"SO_SURVIVAL_CHAOS_BONUS_SENTRY"); + precachestring(&"SO_SURVIVAL_CHAOS_EOG_CHOPPER"); + precachestring(&"SO_SURVIVAL_CHAOS_EOG_EXP_JUG"); + precachestring(&"SO_SURVIVAL_CHAOS_EOG_MUL_KILL"); + precachestring(&"SO_SURVIVAL_CHAOS_EOG_TRI_LONGSHOT"); + precachestring(&"SO_SURVIVAL_CHAOS_EOG_TRI_KNIFE"); + precachestring(&"SO_SURVIVAL_CHAOS_EOG_TRI_HEADSHOT"); + precachestring(&"SO_SURVIVAL_CHAOS_EOG_MASSIVE_EXP"); + precachestring(&"SO_SURVIVAL_CHAOS_EOG_QUAD_KILL"); + precachestring(&"SO_SURVIVAL_CHAOS_EOG_SHIELD_JUG"); + precachestring(&"SO_SURVIVAL_CHAOS_EOG_TRI_KILL"); + precachestring(&"SO_SURVIVAL_CHAOS_EOG_REG_JUG"); + precachestring(&"SO_SURVIVAL_CHAOS_EOG_NEW_WEAPON"); + precachestring(&"SO_SURVIVAL_CHAOS_EOG_GRENADE"); + precachestring(&"SO_SURVIVAL_CHAOS_EOG_CHEMICAL"); + precachestring(&"SO_SURVIVAL_CHAOS_EOG_ELITE"); + precachestring(&"SO_SURVIVAL_CHAOS_EOG_VETERAN"); + precachestring(&"SO_SURVIVAL_CHAOS_EOG_EXECUTION"); + precachestring(&"SO_SURVIVAL_CHAOS_EOG_HARDENED"); + precachestring(&"SO_SURVIVAL_CHAOS_EOG_EXP_DOG"); + precachestring(&"SO_SURVIVAL_CHAOS_EOG_MARTYRDOM"); + precachestring(&"SO_SURVIVAL_CHAOS_EOG_LONG_SHOT"); + precachestring(&"SO_SURVIVAL_CHAOS_EOG_KNIFE"); + precachestring(&"SO_SURVIVAL_CHAOS_EOG_EXP_KILL"); + precachestring(&"SO_SURVIVAL_CHAOS_EOG_REG_KILL"); + precachestring(&"SO_SURVIVAL_CHAOS_EOG_REG_DOG"); + precachestring(&"SO_SURVIVAL_CHAOS_EOG_EASY"); + precachestring(&"SO_SURVIVAL_CHAOS_EOG_HEADSHOT"); + maps/_so_survival_chaos_entities::chaos_entities_precache(); + maps/_so_survival_chaos_entities::chaos_load_drop_location(); + maps/_so_survival_chaos_entities::chaos_load_drop_item(); + maps/_so_survival_chaos_entities::chaos_load_desired_drop_distance(); + maps/_so_survival_chaos_entities::chaos_load_ai_size(); +} + +//Function Number: 3 +chaos_postload() +{ + var_00 = getdvar("mapname"); + if(issplitscreen() || getdvar("coop") == "1") + { + level.wave_table = "sp/coop_" + var_00 + "_chaos_waves.csv"; + } + else + { + level.wave_table = "sp/" + var_00 + "_chaos_waves.csv"; + } + + add_chaos_killstreak("bonus_score"); + add_chaos_killstreak("bonus_multiplier"); + add_chaos_killstreak("bonus_time"); + add_chaos_killstreak("bonus_laststand"); + add_chaos_killstreak("bonus_freezemeter"); +} + +//Function Number: 4 +add_chaos_killstreak(param_00) +{ + var_01 = undefined; + var_02 = undefined; + var_03 = undefined; + var_04 = undefined; + var_05 = undefined; + var_06 = undefined; + var_07 = undefined; + var_08 = undefined; + var_09 = undefined; + var_0A = undefined; + var_0B = undefined; + if(issubstr(param_00,"bonus_")) + { + var_01 = "airdrop_marker_mp"; + var_02 = ::maps\_sp_killstreaks::sp_killstreak_carepackage_main; + var_0A = "SP_KILLSTREAKS_REWARDNAME_AIRDROP"; + var_03 = "UK_1mc_achieve_carepackage"; + var_04 = "UK_1mc_use_carepackage"; + var_05 = "specialty_carepackage"; + var_06 = &"SP_KILLSTREAKS_EARNED_AIRDROP"; + switch(param_00) + { + case "bonus_score": + var_09 = ::sp_killstreak_bonus_score_crateopen; + var_07 = "chaos_bonus_points"; + var_0B = &"SO_SURVIVAL_CHAOS_BONUS_POINT"; + break; + + case "bonus_multiplier": + var_09 = ::sp_killstreak_bonus_multiplier_crateopen; + var_07 = "chaos_bonus_combo"; + var_0B = &"SO_SURVIVAL_CHAOS_BONUS_MULTIPLIER"; + break; + + case "bonus_time": + var_09 = ::sp_killstreak_bonus_time_crateopen; + var_07 = "chaos_bonus_time"; + var_0B = &"SO_SURVIVAL_CHAOS_BONUS_TIME"; + break; + + case "bonus_laststand": + var_09 = ::sp_killstreak_bonus_laststand_crateopen; + var_07 = "chaos_bonus_laststand"; + var_0B = &"SO_SURVIVAL_CHAOS_BONUS_LASTSTAND"; + break; + + case "bonus_freezemeter": + var_09 = ::sp_killstreak_bonus_freezemeter_crateopen; + var_07 = "chaos_bonus_freeze_meter"; + var_0B = &"SO_SURVIVAL_CHAOS_BONUS_FREEZE_METER"; + break; + + default: + break; + } + } + else + { + } + + var_0C = spawnstruct(); + var_0C.streaktype = param_00; + var_0C.weaponname = var_01; + var_0C.streakfunc = var_02; + var_0C.menurewarddesc = var_0A; + var_0C.achievevo = var_03; + var_0C.usevo = var_04; + var_0C.splashicon = var_05; + var_0C.splashhint = var_06; + var_0C.crateicon = var_07; + var_0C.cratehint = var_08; + var_0C.crateopenfunc = var_09; + var_0C.cratehudstring = var_0B; + level.ks.killstreaktypes[param_00] = var_0C; + maps\_sp_killstreaks::add_killstreak_radio_dialogue(var_03,var_04); +} + +//Function Number: 5 +chaos_init() +{ + level.perk_offset = 60; + thread chaos_hud_survival_remove(); + thread chaos_ai_setup(); + thread chaos_armories_disable(); + thread chaos_score_init(); + thread chaos_players_setup(); + level.chaos_time_remaining = 120; + thread chaos_timer_create(120,"start_survival","win_survival"); + thread chaos_music_intro(); + thread maps/_so_survival_chaos_entities::chaos_entities_place(); + level.var_16BD = ::chaos_eog_summary; + level.start_combo_decay = 0; + level.timer_started = 0; + level.player_currently_getting_perk = 0; + level.airdropcratetimeout = 0; + level.freeze_combo_meter = 0; + level.so_player_chatter_enabled = 0; + var_00 = maps\_sp_killstreaks::get_sp_killstreak_info("sentry"); + var_00.cratehudstring = &"SO_SURVIVAL_CHAOS_BONUS_SENTRY"; + var_00.crateicon = "chaos_bonus_sentry_gun"; + var_00.streakfunc = ::chaos_killstreak_autosentry_main; + level.ks.killstreaktypes["sentry"] = var_00; + level.grnd_fx["smoke"] = loadfx("smoke/airdrop_flare_mp_effect_now"); + level.survival_wave = []; + level.survival_wave = chaos_wave_populate(); + level.focus_on_player = 0; +} + +//Function Number: 6 +chaos_wave_populate() +{ + var_00 = 0; + var_01 = 1000; + var_02 = []; + for(var_03 = var_00;var_03 <= var_01;var_03++) + { + var_04 = maps\_so_survival_ai::get_wave_number_by_index(var_03); + if(!isdefined(var_04) || var_04 == 0) + { + continue; + } + + var_05 = spawnstruct(); + var_05.idx = var_03; + var_05.num = var_04; + var_05.survival_ai_class_overrides = maps\_so_survival_ai::get_squad_type(var_04); + var_05.var_3D4C = maps\_so_survival_ai::get_squad_array(var_04); + var_05.var_3D4D = maps\_so_survival_ai::get_special_ai(var_04); + var_05.var_3D4E = maps\_so_survival_ai::get_special_ai_quantity(var_04); + var_05.var_3D4F = maps\_so_survival_ai::get_wave_boss_delay(var_04); + var_05.bossai = maps\_so_survival_ai::get_bosses_ai(var_04); + var_05.bossnonai = maps\_so_survival_ai::get_bosses_nonai(var_04); + var_05.dogtype = maps\_so_survival_ai::get_dog_type(var_04); + var_05.dogquantity = maps\_so_survival_ai::get_dog_quantity(var_04); + var_05.repeating = maps\_so_survival_ai::is_repeating(var_04); + var_06 = maps\_so_survival_ai::get_armory_unlocked(var_04); + if(isdefined(var_06) && var_06.size) + { + if(!isdefined(level.armory_unlock)) + { + level.armory_unlock = []; + } + + foreach(var_08 in var_06) + { + level.armory_unlock[var_08] = var_04; + } + } + + var_02[var_04] = var_05; + if(var_05.repeating) + { + level.survival_repeat_wave[level.survival_repeat_wave.size] = var_05; + } + } + + return var_02; +} + +//Function Number: 7 +chaos_players_setup() +{ + common_scripts\utility::array_thread(level.players,::chaos_player_infinite_ammo_pistol); + foreach(var_01 in level.players) + { + var_01 thread hud_weapon_icon(); + var_01 thread live_1_hud_icon(); + var_01 thread live_2_hud_icon(); + var_01 thread live_3_hud_icon(); + var_01 thread live_4_hud_icon(); + var_01 thread live_5_hud_icon(); + var_01 thread manage_lives_left_hud(); + var_01 thread perk_hud_2(); + var_01 thread perk_hud_3(); + var_01 thread perk_hud_4(); + var_01 thread perk_hud_5(); + var_01 thread perk_hud_6(); + var_01 thread perk_hud_7(); + var_01 thread perk_hud_popup_icon(); + var_01 thread wait_for_death(); + var_01 thread listen_for_sentry_notification(); + var_01 thread listen_for_laststand_notification(); + if(maps\_utility::is_coop()) + { + var_01 thread wait_for_revive_teammate(); + } + + var_01.num_perk_obtained = 0; + var_01.recentkillcount = 0; + var_01.recentheadshotcount = 0; + var_01.recentknifekillcount = 0; + var_01.recentlongshotcount = 0; + var_01.recentrocketkillcount = 0; + var_01.justopencrate = 0; + var_01.dogs_dont_instant_kill = 1; + var_01.laststand_info.type_getup_lives = level.map_specific_starting_lives_remaining - 1; + var_01.action_streak = []; + var_01.hud_chaoseventpopup = var_01 createchaoseventpopup(); + var_01.hud_chaosscorepopup = var_01 createchaosscorepopup(); + } + + thread chaos_players_performance(); +} + +//Function Number: 8 +listen_for_sentry_notification() +{ + level endon("special_op_terminated"); + for(;;) + { + self waittill("sentry_notification",var_00); + if(!isdefined(var_00)) + { + self.hud_chaoseventpopup settext(""); + self.hud_chaoseventpopup.alpha = 0; + continue; + } + + self.hud_chaoseventpopup settext(var_00); + self.hud_chaoseventpopup.color = (1,1,1); + self.hud_chaoseventpopup.alpha = 0.85; + } +} + +//Function Number: 9 +listen_for_laststand_notification() +{ + level endon("special_op_terminated"); + for(;;) + { + self waittill("laststand_notification",var_00); + if(var_00 == &"SCRIPT_COOP_BLEEDING_OUT_PARTNER") + { + chaoseventpopup(var_00,(1,0.4,0.4),0,3); + continue; + } + + chaoseventpopup(var_00,(1,1,1)); + } +} + +//Function Number: 10 +chaos_players_performance() +{ + while(!isdefined(level.player.game_performance)) + { + wait 0.05; + } + + foreach(var_01 in level.players) + { + var_01.game_performance["headshot"] = 0; + var_01.game_performance["knife_kill"] = 0; + var_01.game_performance["long_shot"] = 0; + var_01.game_performance["triple_kill"] = 0; + var_01.game_performance["quad_kill"] = 0; + var_01.game_performance["multi_kill"] = 0; + var_01.game_performance["new_weapon_collected"] = 0; + var_01.game_performance["comboscoremax"] = 0; + var_01.game_performance["combomultmax"] = 0; + var_01.game_performance["explosive_jug"] = 0; + var_01.game_performance["triple_headshot"] = 0; + var_01.game_performance["triple_knife_kill"] = 0; + var_01.game_performance["triple_long_shot"] = 0; + var_01.game_performance["massive_explosion"] = 0; + var_01.game_performance["riot_shield_jug"] = 0; + var_01.game_performance["regular_jug"] = 0; + var_01.game_performance["grenade_kill"] = 0; + var_01.game_performance["chemical_kill"] = 0; + var_01.game_performance["elite_kill"] = 0; + var_01.game_performance["veteran_kill"] = 0; + var_01.game_performance["execution"] = 0; + var_01.game_performance["hardened_kill"] = 0; + var_01.game_performance["explosive_dog"] = 0; + var_01.game_performance["martyrdom_kill"] = 0; + var_01.game_performance["explosive_kill"] = 0; + var_01.game_performance["regular_kill"] = 0; + var_01.game_performance["regular_dog"] = 0; + var_01.game_performance["easy_kill"] = 0; + var_01.game_performance["chopper_kill"] = 0; + } +} + +//Function Number: 11 +chaos_score_init() +{ + chaos_combo_system_setup(); + chaos_score_event_populate(); + chaos_register_perk_progression(); + thread chaos_score_event_creators(); +} + +//Function Number: 12 +chaos_register_perk_progression() +{ + level.chaos_perk_progression = []; + level.perk_progression_gap = 10; + add_perk_progression(10,"specialty_fastreload"); + add_perk_progression(20,"specialty_quickdraw"); + add_perk_progression(30,"specialty_longersprint"); + add_perk_progression(40,"specialty_stalker"); + add_perk_progression(50,"specialty_bulletaccuracy"); + add_perk_progression(60,"specialty_armorvest"); + add_perk_progression(70,"specialty_juiced"); +} + +//Function Number: 13 +add_perk_progression(param_00,param_01) +{ + var_02 = "combo_" + param_00; + level.chaos_perk_progression[var_02] = param_01; +} + +//Function Number: 14 +chaos_score_event_populate() +{ + if(!isdefined(level.chaos_score_events)) + { + level.chaos_score_events = []; + } + + chaos_score_event_add("damage",0,0); + chaos_score_event_add("damage_flash",0,0); + chaos_score_event_add("damage_grenade",0,50); + chaos_score_event_add("damage_explosive",0,250); + chaos_score_event_add("damage_hipfire",0,0); + chaos_score_event_add("dog_reg_kill",1,100,&"SO_SURVIVAL_CHAOS_DOG_KILL"); + chaos_score_event_add("dog_splode_kill",1,150,&"SO_SURVIVAL_CHAOS_EXP_DOG"); + chaos_score_event_add("martyrdom_kill",1,150,&"SO_SURVIVAL_CHAOS_SUICIDE_BOMBER"); + chaos_score_event_add("chemical_kill",1,300,&"SO_SURVIVAL_CHAOS_CHEMICAL_CORPS"); + chaos_score_event_add("claymore_kill",1,200,&"SO_SURVIVAL_CHAOS_CLAYMORE_CORPS"); + chaos_score_event_add("jug_regular_kill",1,500,&"SO_SURVIVAL_CHAOS_REG_JUG"); + chaos_score_event_add("jug_explosive_kill",1,1000,&"SO_SURVIVAL_CHAOS_EXP_JUG"); + chaos_score_event_add("jug_riotshield_kill",1,750,&"SO_SURVIVAL_CHAOS_SHIELD_JUG"); + chaos_score_event_add("jug_minigun_kill",1,1250,&"SO_SURVIVAL_CHAOS_MINIGUN_JUG"); + chaos_score_event_add("chopper_kill",1,2000,&"SO_SURVIVAL_CHAOS_DES_CHOPPER"); + chaos_score_event_add("easy_kill",1,50,&"SO_SURVIVAL_CHAOS_EASY_KILL"); + chaos_score_event_add("regular_kill",1,100,&"SO_SURVIVAL_CHAOS_REGULAR_KILL"); + chaos_score_event_add("hardened_kill",1,150,&"SO_SURVIVAL_CHAOS_HARDENED_KILL"); + chaos_score_event_add("veteran_kill",1,200,&"SO_SURVIVAL_CHAOS_VETERAN_KILL"); + chaos_score_event_add("elite_kill",1,250,&"SO_SURVIVAL_CHAOS_ELITE_KILL"); + chaos_score_event_add("kill_knife",1,150,&"SO_SURVIVAL_CHAOS_STAB"); + chaos_score_event_add("kill_headshot",1,300,&"SO_SURVIVAL_CHAOS_HEAD_SHOT"); + chaos_score_event_add("kill_explosive",1,150,&"SO_SURVIVAL_CHAOS_EXPLOSION"); + chaos_score_event_add("kill_grenade",1,400,&"SO_SURVIVAL_CHAOS_GRENADE"); + chaos_score_event_add("kill_execution",1,200,&"SO_SURVIVAL_CHAOS_EXECUTION"); + chaos_score_event_add("kill_triple",1,600,&"SO_SURVIVAL_CHAOS_TRIPLE_KILL"); + chaos_score_event_add("kill_quad",1,800,&"SO_SURVIVAL_CHAOS_QUAD_KILL"); + chaos_score_event_add("kill_multi",1,1000,&"SO_SURVIVAL_CHAOS_MULTI_KILL"); + chaos_score_event_add("kill_longshot",1,150,&"SO_SURVIVAL_CHAOS_LONG_SHOT"); + chaos_score_event_add("headshot_triple",1,1000,&"SO_SURVIVAL_CHAOS_TRIPLE_HEADSHOT"); + chaos_score_event_add("knife_triple",1,1000,&"SO_SURVIVAL_CHAOS_TRIPLE_KNIFE_KILL"); + chaos_score_event_add("longshot_triple",1,1000,&"SO_SURVIVAL_CHAOS_TRIPLE_LONGSHOT"); + chaos_score_event_add("massive_explosion",1,2000,&"SO_SURVIVAL_CHAOS_MASSIVE_EXPLOSION"); + chaos_score_event_add("dogtag",1,0,&"SO_SURVIVAL_CHAOS_DOG_TAGS"); + chaos_score_event_add("new_weapon_collect",1,500,&"SO_SURVIVAL_CHAOS_NEW_WEAPON"); + chaos_score_event_add("old_weapon_collect",1,0,"Old Weapon"); + chaos_score_event_add("placed_sentry",1,0,"Placed Sentry"); + chaos_score_event_add("revive_teammate",1,0,"Revived Teammate"); + chaos_score_event_add("weapon_ammo",0,0); + chaos_score_event_add("bonus_score",1,5000,&"SO_SURVIVAL_CHAOS_BONUS_SCORE"); + chaos_score_event_add("bonus_multiplier",0,0,"Bonus Combo"); + chaos_score_event_add("care_package",1,500,&"SO_SURVIVAL_CHAOS_CARE_PACKAGE"); +} + +//Function Number: 15 +chaos_score_event_add(param_00,param_01,param_02,param_03) +{ + if(!isdefined(param_01)) + { + param_01 = 0; + } + + if(param_01 && !isdefined(param_03)) + { + } + + if(!isdefined(param_03)) + { + param_03 = ""; + } + + if(!isdefined(param_02)) + { + param_02 = 100; + } + + level.chaos_score_events[param_00] = []; + level.chaos_score_events[param_00]["combo"] = param_01; + level.chaos_score_events[param_00]["points"] = param_02; + level.chaos_score_events[param_00]["name"] = param_03; +} + +//Function Number: 16 +chaos_combo_system_setup() +{ + common_scripts\utility::flag_init("chaos_players_in_combo"); + chaos_score_globals_init(); + chaos_combo_globals_init(); + common_scripts\utility::array_thread(level.players,::chaos_combo_player_create_hud); + level thread chaos_combo_all_hud_destroy(); + chaos_combo_bar_set_fill(0); + chaos_combo_bar_hide(1); +} + +//Function Number: 17 +chaos_combo_globals_init() +{ + level.chaos_combo_running = 0; + level.chaos_combo_points = 0; + level.chaos_combo_count = 0; + level.chaos_combo_actions = []; + level.chaos_combo_actions_max = 5; +} + +//Function Number: 18 +chaos_combo_globals_reset() +{ + chaos_combo_globals_init(); +} + +//Function Number: 19 +chaos_wave() +{ + level endon("special_op_terminated"); + foreach(var_01 in level.chaos_entities) + { + foreach(var_03 in level.players) + { + var_01.headiconforplayer[var_03.unique_id] = undefined; + } + } + + level thread updateweaponheadiconforplayer(); + level.var_3C68["sentry_minigun"].health = 4000; + if(issplitscreen()) + { + level.revive_bar_offset = -60; + } + else + { + level.revive_bar_offset = 10; + } + + lib_0623::func_3F80(); + thread lib_0623::func_3FB6(); + lib_0623::func_3F70(); + if(!common_scripts\utility::flag("start_survival")) + { + common_scripts\utility::flag_set("start_survival"); + } + + level notify("wave_started",level.current_wave); + level.before_first_wave = 0; + setsaveddvar("bg_viewKickScale","0.2"); + level thread lib_0623::func_3F82(); + foreach(var_03 in level.players) + { + var_03.var_3FC9.icon thread chaos_perk_icon_destroy_on_mode_end(); + var_03 thread wait_and_display_lives_left_hud(); + } + + var_08 = 0; + if(!isdefined(level.crates_on_ground)) + { + level.crates_on_ground = []; + } + + for(;;) + { + var_09 = "wave_" + level.current_wave; + if(isdefined(level.chaos_drop_items[var_09]) && level.crates_on_ground.size < 4) + { + if(maps\_utility::is_coop()) + { + var_0A = 4 - level.crates_on_ground.size; + if(var_0A > 1) + { + thread chaos_package_drop(2,level.player.origin); + } + else + { + thread chaos_package_drop(1,level.player.origin); + } + } + else + { + thread chaos_package_drop(1,level.player.origin); + } + } + + if(isdefined(level.leaders.size) && level.leaders.size >= 3) + { + } + + var_0B = maps\_so_survival_ai::get_squad_array(level.current_wave); + if(var_0B[0] == 0) + { + level.current_wave--; + var_0B = maps\_so_survival_ai::get_squad_array(level.current_wave); + } + + var_0C = 0; + var_0D = maps\_so_survival_ai::get_squad_type(level.current_wave); + level.regular_ai_spawned_in = 0; + foreach(var_0F in var_0B) + { + if(var_0F > 0) + { + var_0C = var_0C + chaos_spawn_wave(1,var_0F,var_0D); + } + } + + level.special_ai = []; + var_11 = maps\_so_survival_ai::get_special_ai(level.current_wave); + if(isdefined(var_11)) + { + foreach(var_13 in var_11) + { + if(issubstr(var_13,"dog")) + { + thread chaos_spawn_dogs(var_13,maps\_so_survival_ai::get_dog_quantity(level.current_wave),level.current_wave); + var_14 = undefined; + if(maps\_so_survival_ai::get_dog_quantity(level.current_wave) > 1) + { + var_14 = "so_hq_enemy_intel_dogs"; + } + else + { + var_14 = "so_hq_enemy_intel_dog"; + } + + maps\_utility::radio_dialogue(var_14); + continue; + } + + var_15 = maps\_so_survival_ai::get_special_ai_type_quantity(level.current_wave,var_13); + if(isdefined(var_15) && var_15 > 0) + { + var_16 = lib_0623::func_3F8C(var_13,var_15); + } + } + } + + if(isdefined(level.special_ai)) + { + } + + if(lib_0623::func_3F8F(level.current_wave)) + { + thread lib_0623::func_3F90(); + } + + wait 3; + common_scripts\utility::flag_set("aggressive_mode"); + maps\_squad_enemies::squad_disband(0,::maps\_so_survival_ai::default_squad_leader); + var_18 = getaiarray("axis").size + maps\_so_survival_ai::dog_get_count(); + if(isdefined(level.map_specific_ai_size[var_09])) + { + var_08 = level.map_specific_ai_size[var_09]; + } + + while(var_18 > var_08) + { + level common_scripts\utility::waittill_any_timeout(1,"axis_died"); + var_18 = getaiarray("axis").size + maps\_so_survival_ai::dog_get_count(); + } + + var_19 = level.current_wave + 1; + var_1A = 0; + var_1B = []; + var_1B = maps\_so_survival_ai::get_squad_array(var_19); + foreach(var_1D in var_1B) + { + var_1A = var_1A + var_1D; + } + + var_1F = maps\_so_survival_ai::get_special_ai(var_19); + if(isdefined(var_1F)) + { + foreach(var_21 in var_1F) + { + if(issubstr(var_21,"dog")) + { + var_1A = var_1A + maps\_so_survival_ai::get_dog_quantity(var_19); + continue; + } + + var_1A = var_1A + maps\_so_survival_ai::get_special_ai_type_quantity(var_19,var_21); + } + } + + if(lib_0623::func_3F8F(var_19)) + { + if(isdefined(maps\_so_survival_ai::get_bosses_ai(var_19))) + { + var_1A = var_1A + maps\_so_survival_ai::get_bosses_ai(var_19).size; + } + + if(isdefined(maps\_so_survival_ai::get_bosses_nonai(var_19))) + { + var_1A = var_1A + maps\_so_survival_ai::get_bosses_nonai(var_19).size; + } + } + + var_18 = getaiarray("axis").size + maps\_so_survival_ai::dog_get_count(); + if(var_18 + var_1A > 25) + { + while(var_18 + var_1A > 25) + { + level common_scripts\utility::waittill_any_timeout(1,"axis_died"); + var_18 = getaiarray("axis").size + maps\_so_survival_ai::dog_get_count(); + } + } + + var_23 = getfreeaicount(); + if(var_1A > var_23) + { + while(var_1A > var_23) + { + level common_scripts\utility::waittill_any_timeout(1,"axis_died"); + var_23 = getfreeaicount(); + } + } + + level.squad_leader_behavior_func = ::maps\_so_survival_ai::default_ai; + level.special_ai_behavior_func = ::maps\_so_survival_ai::default_ai; + if(lib_0623::func_3F8F(level.current_wave)) + { + common_scripts\utility::flag_wait("bosses_spawned"); + } + + if(common_scripts\utility::flag("boss_music")) + { + level notify("end_boss_music"); + common_scripts\utility::flag_clear("boss_music"); + maps\_utility::music_stop(3); + } + + level.current_wave++; + } +} + +//Function Number: 20 +chaos_spawn_dogs(param_00,param_01,param_02) +{ + level endon("special_op_terminated"); + level endon("wave_ended"); + if(!isdefined(param_00) || param_00 == "" || !isdefined(param_01) || !param_01) + { + return; + } + + level.dogs = []; + var_03 = []; + foreach(var_05 in level.players) + { + var_03[var_03.size] = var_05; + } + + var_07 = getentarray("dog_spawner","targetname")[0]; + level.dogs_attach_c4 = isdefined(param_00) && param_00 == "dog_splode"; + var_07 maps\_utility::add_spawn_function(::maps\_so_survival_ai::dog_setup); + var_07 maps\_utility::add_spawn_function(::maps\_so_survival_ai::dog_seek_player); + var_07 maps\_utility::add_spawn_function(::maps\_so_survival_ai::dog_register_death); + for(var_08 = 0;var_08 < param_01;var_08++) + { + var_09 = maps\_so_survival_code::get_furthest_from_these(level.wave_spawn_locs,var_03,4); + var_07.count = 1; + var_07.origin = var_09.origin; + var_07.angles = var_09.angles; + var_0A = int(40 + randomint(10) / param_01); + level.survival_dog_spawning = 1; + var_0B = var_07 maps\_utility::spawn_ai(); + if(isdefined(var_0B)) + { + var_0B.ally_ref = maps\_so_survival_ai::get_ai_struct(param_00); + var_0B setthreatbiasgroup("dogs"); + var_0B [[ level.var_3B89 ]](); + var_0B.canclimbladders = 0; + level.dogs[level.dogs.size] = var_0B; + } + + level.survival_dog_spawning = undefined; + if(!common_scripts\utility::flag("aggressive_mode")) + { + common_scripts\utility::waittill_any_timeout(var_0A,"aggressive_mode"); + } + + wait 0.05; + } +} + +//Function Number: 21 +chaos_spawn_wave(param_00,param_01,param_02) +{ + level endon("special_op_terminated"); + for(param_00 = int(param_00);param_00;param_00--) + { + var_03 = spawn_chaos_squad(level.wave_spawn_locs,lib_0623::func_3F8B("leader"),lib_0623::func_3F8B("follower"),param_01 - 1); + foreach(var_05 in var_03) + { + var_05.chaos_squad_type = param_02; + var_05 setthreatbiasgroup("axis"); + var_05 thread maps\_so_survival_ai::setup_ai_weapon(); + } + } + + return level.leaders.size; +} + +//Function Number: 22 +spawn_chaos_squad(param_00,param_01,param_02,param_03) +{ + var_04 = undefined; + if(maps\_utility::is_coop()) + { + if(level.focus_on_player == 0) + { + var_04 = level.players[0]; + level.focus_on_player = 1; + } + else + { + var_04 = level.players[1]; + level.focus_on_player = 0; + } + } + else + { + var_04 = level.player; + } + + var_05 = param_00.size; + for(;;) + { + var_06 = 0; + for(var_07 = 1;var_07 < var_05;var_07++) + { + var_08 = vectornormalize(anglestoforward(var_04 getplayerangles())); + var_09 = vectornormalize(param_00[var_07 - 1].origin - var_04 geteye()); + var_0A = vectordot(var_08,var_09); + var_0B = vectornormalize(param_00[var_07].origin - var_04 geteye()); + var_0C = vectordot(var_08,var_0B); + if(var_0A < var_0C) + { + var_0D = param_00[var_07 - 1]; + param_00[var_07 - 1] = param_00[var_07]; + param_00[var_07] = var_0D; + var_06 = 1; + } + } + + if(var_06 == 0) + { + break; + } + + var_05 = var_05 - 1; + } + + var_0E = int(param_00.size / 3); + var_0F = []; + var_07 = 0; + while(var_07 < var_0E) + { + var_08++ = var_7B[var_07]; + } + + var_10 = []; + if(maps\_utility::is_coop()) + { + } + + foreach(var_12 in level.leaders) + { + var_10[var_10.size] = var_12; + } + + var_14 = undefined; + while(var_7B.size > 1) + { + foreach(var_16 in var_10) + { + var_14 = maps\_utility::getclosest(var_16.origin,var_7B); + var_7B = common_scripts\utility::array_remove(var_7B,var_14); + if(var_7B.size == 1) + { + break; + } + } + } + + var_14 = var_7B[0]; + if(isspawner(param_01[0])) + { + var_18 = getentarray(var_14.target,"targetname"); + } + else + { + var_18 = common_scripts\utility::getstructarray(var_15.target,"targetname"); + } + + foreach(var_1A in var_18) + { + if(!isdefined(var_1A.script_noteworthy)) + { + var_1A.script_noteworthy = "follower"; + } + } + + common_scripts\utility::flag_set("squad_spawning"); + var_1C = []; + var_1C = maps\_squad_enemies::spawn_enemy_group(var_18,param_02,param_03,var_04); + level.regular_ai_spawned_in = level.regular_ai_spawned_in + var_04 + 1; + common_scripts\utility::flag_clear("squad_spawning"); + wait 0.05; + return var_1C; +} + +//Function Number: 23 +chaos_package_drop(param_00,param_01) +{ + level endon("special_op_terminated"); + level.drop_location_sorted = []; + level.drop_location_sorted = level.chaos_drop_locations; + var_02 = level.drop_location_sorted.size; + var_03 = level.map_specific_desired_drop_distance; + for(;;) + { + var_04 = 0; + for(var_05 = 1;var_05 < var_02;var_05++) + { + var_06 = distance(level.drop_location_sorted[var_05 - 1],param_01); + var_07 = distance(level.drop_location_sorted[var_05],param_01); + if(abs(var_06 - var_03) > abs(var_07 - var_03)) + { + var_08 = level.drop_location_sorted[var_05 - 1]; + level.drop_location_sorted[var_05 - 1] = level.drop_location_sorted[var_05]; + level.drop_location_sorted[var_05] = var_08; + var_04 = 1; + } + } + + if(var_04 == 0) + { + break; + } + + var_02 = var_02 - 1; + } + + var_09 = "wave_" + level.current_wave; + for(var_05 = 0;var_05 < param_00;var_05++) + { + level thread generatesmokefx(level.drop_location_sorted[var_05]); + } + + level sp_airdrop_do_flyby(param_00,level.player,level.drop_location_sorted[0],randomfloat(360),undefined,var_09); +} + +//Function Number: 24 +sp_airdrop_do_flyby(param_00,param_01,param_02,param_03,param_04,param_05) +{ + level endon("special_op_terminated"); + var_06 = maps\_sp_airdrop::getflyheightoffset(param_02); + if(!isdefined(param_04)) + { + param_04 = 0; + } + + var_06 = var_06 + param_04; + if(!isdefined(param_01)) + { + return; + } + + var_07 = param_02 * (1,1,0) + (0,0,var_06); + var_08 = chaos_getpathstart(var_07,param_03); + var_09 = chaos_getpathend(var_07,param_03); + var_0A = maps\_sp_airdrop::sp_airdrop_heli_setup(param_01,var_08,var_07); + var_0A endon("death"); + if(maps\_utility::is_coop()) + { + maps\_utility::radio_dialogue("chaos_cps_inbound"); + } + else + { + maps\_utility::radio_dialogue("chaos_cp_inbound"); + } + + level.drop_item_used = []; + for(var_0B = 0;var_0B < param_00;var_0B++) + { + if(var_0B > 0) + { + param_03 = randomfloat(360); + var_06 = maps\_sp_airdrop::getflyheightoffset(level.drop_location_sorted[var_0B]); + if(!isdefined(param_04)) + { + param_04 = 0; + } + + var_06 = var_06 + param_04; + var_07 = level.drop_location_sorted[var_0B] * (1,1,0) + (0,0,var_06); + var_07 = var_07 + anglestoforward((0,param_03,0)) * -50; + } + + var_0A setvehgoalpos(var_07,1); + var_0A vehicle_setspeed(150,80); + var_0A setyawspeed(180,180,180,0.3); + var_0C = get_random_drop_item(param_05,param_00); + if(var_0C == "bonus_laststand") + { + if(player_have_max_lives()) + { + var_0C = "bonus_score"; + } + } + + var_0A thread sp_airdrop_drop_the_crate(var_0C,level.drop_location_sorted[var_0B],var_06,0,undefined,var_08); + wait 1; + while(var_0A vehicle_getspeed() > 5) + { + wait 0.1; + } + + var_0A notify("drop_crate"); + var_0D = undefined; + switch(var_0C) + { + case "bonus_score": + var_0D = "chaos_deliverd_socre"; + break; + + case "sentry": + var_0D = "chaos_deliverd_sentry"; + break; + + case "bonus_laststand": + var_0D = "chaos_deliverd_laststand"; + break; + + case "bonus_multiplier": + var_0D = "chaos_deliverd_combomult"; + break; + + case "bonus_time": + var_0D = "chaos_deliverd_extratime"; + break; + + case "bonus_freezemeter": + var_0D = "chaos_deliverd_freeze"; + break; + } + + if(isdefined(var_0D)) + { + maps\_utility::radio_dialogue(var_0D); + } + } + + var_0A setvehgoalpos(var_09,1); + var_0A vehicle_setspeed(300,75); + var_0A.leaving = 1; + var_0A waittill("goal"); + var_0A notify("leaving"); + var_0A notify("delete"); + var_0A delete(); +} + +//Function Number: 25 +chaos_score_event_raise(param_00,param_01) +{ + if(level.timer_started == 0) + { + level notify("Start timer"); + level.challenge_start_time = gettime(); + level.timer_started = 1; + } + + if(common_scripts\utility::flag("special_op_terminated")) + { + return; + } + + if(!isdefined(level.chaos_score_events[param_00])) + { + return; + } + + chaos_combo_update(level.chaos_score_events[param_00]["name"],level.chaos_score_events[param_00]["points"],level.chaos_score_events[param_00]["combo"],param_01); + if(int(level.chaos_score_events[param_00]["points"]) > 0) + { + foreach(var_03 in level.players) + { + var_03 thread chaosscorepopup("+" + level.chaos_score_events[param_00]["points"]); + } + } +} + +//Function Number: 26 +chaos_combo_actions_update(param_00,param_01) +{ + var_02 = spawnstruct(); + var_02.action_string = param_00; + var_02.point = param_01; + if(level.chaos_combo_actions.size < level.chaos_combo_actions_max) + { + level.chaos_combo_actions[level.chaos_combo_actions.size] = var_02; + return; + } + + for(var_03 = 0;var_03 < level.chaos_combo_actions.size - 1;var_03++) + { + level.chaos_combo_actions[var_03] = level.chaos_combo_actions[var_03 + 1]; + } + + level.chaos_combo_actions[level.chaos_combo_actions.size - 1] = var_02; +} + +//Function Number: 27 +chaos_combo_update(param_00,param_01,param_02,param_03) +{ + if(!common_scripts\utility::flag("chaos_players_in_combo")) + { + common_scripts\utility::flag_set("chaos_players_in_combo"); + } + + level.chaos_combo_points = level.chaos_combo_points + param_01; + if(level.chaos_combo_count == 0 || param_02) + { + level.chaos_combo_count++; + } + + foreach(var_05 in level.players) + { + var_05 notify("combo_update"); + } + + if(param_02) + { + if(isdefined(param_03)) + { + common_scripts\utility::array_call(level.players,::playlocalsound,param_03); + } + else + { + common_scripts\utility::array_call(level.players,::playlocalsound,"Chaos_combo"); + } + + var_07 = "combo_" + level.chaos_combo_count; + if(isdefined(level.chaos_perk_progression[var_07])) + { + var_08 = level.chaos_perk_progression[var_07]; + thread chaos_give_perk_possible_wait(var_08); + } + } + + if(isstring(param_00)) + { + var_09 = &"SO_SURVIVAL_CHAOS_PLUS_SIGN"; + } + else + { + var_09 = param_01; + } + + chaos_combo_display_update(var_09,param_01,level.chaos_combo_points,level.chaos_combo_count,param_02); + if(level.start_combo_decay == 1) + { + thread chaos_combo_on_end(4,0.2); + } +} + +//Function Number: 28 +chaos_give_perk_possible_wait(param_00) +{ + level endon("special_op_terminated"); + foreach(var_02 in level.players) + { + var_02 thread makecombomultiplyglowandpop(); + } + + if(level.player_currently_getting_perk == 1) + { + level waittill("proceed_with_next_perk"); + } + + foreach(var_02 in level.players) + { + var_02 chaos_give_perk(param_00); + } + + level thread chaos_perk_radio(param_00); +} + +//Function Number: 29 +chaos_combo_on_end(param_00,param_01) +{ + level endon("special_op_terminated"); + level notify("combo_bumped"); + level endon("combo_bumped"); + level endon("stop_meter_decay"); + if(level.freeze_combo_meter == 1) + { + chaos_combo_bar_set_fill(1); + chaos_combo_bar_hide(0); + return; + } + + var_02 = param_00 * 1000; + var_03 = gettime(); + var_04 = var_03 + var_02; + for(var_05 = var_03;var_05 < var_04;var_05 = gettime()) + { + var_06 = 1 - var_05 - var_03 / var_02; + chaos_combo_bar_set_fill(var_06); + chaos_combo_bar_hide(0); + wait 0.05; + } + + if(isdefined(param_01) && param_01 > 0) + { + wait param_01; + } + + chaos_running_score_update(level.chaos_combo_points,level.chaos_combo_count); + common_scripts\utility::array_call(level.players,::playlocalsound,"Chaos_lose_combo"); + foreach(var_08 in level.players) + { + var_08 clearperks(); + var_08.var_3FC9.icon.alpha = 0; + var_08.perk_icon_hud_2.icon.alpha = 0; + var_08.perk_icon_hud_3.icon.alpha = 0; + var_08.perk_icon_hud_4.icon.alpha = 0; + var_08.perk_icon_hud_5.icon.alpha = 0; + var_08.perk_icon_hud_6.icon.alpha = 0; + var_08.perk_icon_hud_7.icon.alpha = 0; + var_08 unsetjuiced(); + var_08 notify("chaos_stop_extra_health_regen"); + var_08.num_perk_obtained = 0; + } + + chaos_combo_bar_set_fill(0); + chaos_combo_bar_hide(1); + chaos_combo_globals_reset(); + chaos_combo_display_clear(); + common_scripts\utility::flag_clear("chaos_players_in_combo"); + thread recreate_last_stand_hud(); +} + +//Function Number: 30 +chaos_running_score_update(param_00,param_01) +{ + level notify("score_update_bump"); + level endon("score_update_bump"); + var_02 = param_00 * param_01; + level.chaos_score = level.chaos_score + var_02; + foreach(var_04 in level.players) + { + if(var_02 > var_04.game_performance["comboscoremax"]) + { + var_04.game_performance["comboscoremax"] = var_02; + } + + if(param_01 > var_04.game_performance["combomultmax"]) + { + var_04.game_performance["combomultmax"] = param_01; + } + + if(isdefined(var_04.chaos_score_hud)) + { + var_04.chaos_score_hud settext(format_good_looking_score(level.chaos_score)); + } + } +} + +//Function Number: 31 +chaos_score_event_creators() +{ + maps\_utility::add_global_spawn_function("axis",::chaos_score_on_ai_damage); + maps\_utility::add_global_spawn_function("axis",::chaos_score_on_ai_flashed); + maps\_utility::add_global_spawn_function("axis",::chaos_score_on_ai_death); +} + +//Function Number: 32 +chaos_score_on_ai_damage() +{ + self endon("death"); + for(;;) + { + self waittill("damage",var_00,var_01,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09); + if(isdefined(var_01.owner) && isplayer(var_01.owner)) + { + chaos_score_event_raise("damage"); + continue; + } + + if(!isplayer(var_01)) + { + continue; + } + + var_0A = "damage"; + if(isdefined(var_04)) + { + if((var_01 playerads() == 0 && var_04 == "MOD_PISTOL_BULLET") || var_04 == "MOD_RIFLE_BULLET") + { + var_0A = "damage_hipfire"; + } + else + { + switch(var_04) + { + case "MOD_EXPLOSIVE": + var_0A = "damage_explosive"; + break; + + case "MOD_GRENADE_SPLASH": + case "MOD_GRENADE": + var_0A = "damage_grenade"; + break; + + default: + break; + } + } + } + + chaos_score_event_raise(var_0A); + } +} + +//Function Number: 33 +chaos_score_on_ai_flashed() +{ + self endon("death"); + for(;;) + { + self waittill("flashbang",var_00,var_01,var_02,var_03); + if(isplayer(var_03)) + { + chaos_score_event_raise("damage_flash"); + } + } +} + +//Function Number: 34 +chaos_score_on_ai_death() +{ + self waittill("death",var_00,var_01,var_02); + if(isdefined(var_00) && isdefined(var_00.owner) && isplayer(var_00.owner)) + { + var_03 = chaos_get_ai_type_ref() + "_kill"; + chaos_score_event_raise(var_03); + return; + } + + if(isdefined(var_02)) + { + if(var_02 == "MOD_EXPLOSIVE" && !isdefined(var_03)) + { + if(level.start_combo_decay == 0) + { + level.start_combo_decay = 1; + } + + chaos_score_event_raise("kill_explosive"); + if(!maps\_utility::is_coop()) + { + level.player.game_performance["explosive_kill"]++; + } + + return; + } + } + + if(!isplayer(var_01)) + { + return; + } + + var_03 = chaos_get_ai_type_ref() + "_kill"; + if(isdefined(self.a) && isdefined(self.a.doinglongdeath)) + { + var_03 = "kill_execution"; + var_00.game_performance["execution"]++; + } + else if(maps\_player_stats::was_headshot()) + { + var_03 = "kill_headshot"; + var_00.game_performance["headshot"]++; + } + else if(isdefined(var_01)) + { + if(var_01 == "MOD_MELEE") + { + var_03 = "kill_knife"; + var_00.game_performance["knife_kill"]++; + } + else if(var_01 == "MOD_EXPLOSIVE") + { + var_03 = "kill_explosive"; + var_00.game_performance["explosive_kill"]++; + } + else if(var_01 == "MOD_PROJECTILE_SPLASH") + { + var_03 = "kill_rocket"; + } + else if(var_01 == "MOD_GRENADE_SPLASH" || var_01 == "MOD_GRENADE") + { + if(var_02 == "fraggrenade") + { + var_03 = "kill_grenade"; + var_00.game_performance["grenade_kill"]++; + } + else if(var_02 == "claymore") + { + var_03 = "kill_explosive"; + var_00.game_performance["explosive_kill"]++; + } + } + else if(var_01 == "MOD_PISTOL_BULLET" || var_01 == "MOD_RIFLE_BULLET") + { + if(distancesquared(self.origin,var_00.origin) > 262144) + { + var_03 = "kill_longshot"; + var_00.game_performance["long_shot"]++; + } + } + } + + if(level.start_combo_decay == 0) + { + level.start_combo_decay = 1; + } + + if(var_03 == "kill_headshot") + { + var_00 thread updaterecentheadshots(); + } + else if(var_03 == "kill_knife") + { + var_00 thread updaterecentknifekills(); + } + else if(var_03 == "kill_longshot") + { + var_00 thread updaterecentlongshots(); + } + else if(var_03 == "kill_rocket" || isdefined(var_02) && var_02 == "c4" || var_02 == "claymore") + { + var_00 thread updaterecentrocketkills(); + } + + var_00 thread updaterecentkills(); + if(var_03 == "kill_rocket") + { + var_03 = chaos_get_ai_type_ref() + "_kill"; + } + + var_04 = chaos_get_ai_type_ref(); + if(issubstr(var_04,"jug")) + { + var_03 = chaos_get_ai_type_ref() + "_kill"; + if(issubstr(var_03,"explosive")) + { + var_00.game_performance["explosive_jug"]++; + } + else if(issubstr(var_03,"riotshield")) + { + var_00.game_performance["riot_shield_jug"]++; + } + else if(issubstr(var_03,"regular")) + { + var_00.game_performance["regular_jug"]++; + } + } + + if(var_04 == "chopper") + { + var_03 = "chopper_kill"; + var_00.game_performance["chopper_kill"]++; + } + + if(var_04 == "martyrdom" && var_03 != "kill_headshot") + { + var_03 = "martyrdom_kill"; + var_00.game_performance["martyrdom_kill"]++; + } + + if(var_03 == "easy_kill") + { + var_00.game_performance["easy_kill"]++; + } + else if(var_03 == "regular_kill") + { + var_00.game_performance["regular_kill"]++; + } + else if(var_03 == "hardened_kill") + { + var_00.game_performance["hardened_kill"]++; + } + else if(var_03 == "veteran_kill") + { + var_00.game_performance["veteran_kill"]++; + } + else if(var_03 == "elite_kill") + { + var_00.game_performance["elite_kill"]++; + } + else if(var_03 == "elite_kill") + { + var_00.game_performance["elite_kill"]++; + } + else if(var_03 == "chemical_kill") + { + var_00.game_performance["chemical_kill"]++; + } + else if(var_03 == "martyrdom_kill") + { + var_00.game_performance["martyrdom_kill"]++; + } + else if(var_03 == "dog_reg_kill") + { + var_00.game_performance["regular_dog"]++; + } + else if(var_03 == "dog_splode_kill") + { + var_00.game_performance["explosive_dog"]++; + } + + chaos_score_event_raise(var_03); +} + +//Function Number: 35 +updaterecentrocketkills() +{ + self endon("disconnect"); + level endon("special_op_terminated"); + self notify("updateRecentRocketKills"); + self endon("updateRecentRocketKills"); + self.recentrocketkillcount++; + wait 1; + if(self.recentrocketkillcount > 1) + { + multirocketkills(self.recentrocketkillcount); + } + + self.recentrocketkillcount = 0; +} + +//Function Number: 36 +multirocketkills(param_00) +{ + if(param_00 > 10) + { + thread chaos_combo_splash(&"SO_SURVIVAL_CHAOS_SPLASH_DEMO_MAN","cm_bp_kills_explosion"); + chaos_score_event_raise("massive_explosion"); + self.game_performance["massive_explosion"]++; + } +} + +//Function Number: 37 +updaterecentlongshots() +{ + self endon("disconnect"); + level endon("special_op_terminated"); + self notify("updateRecentLongshots"); + self endon("updateRecentLongshots"); + self.recentlongshotcount++; + wait 1; + if(self.recentlongshotcount > 1) + { + multilongshots(self.recentlongshotcount); + } + + self.recentlongshotcount = 0; +} + +//Function Number: 38 +multilongshots(param_00) +{ + if(param_00 >= 3) + { + thread chaos_combo_splash(&"SO_SURVIVAL_CHAOS_SPLASH_LONG_SHOOTER","cm_bp_kills_3longshot"); + chaos_score_event_raise("longshot_triple"); + self.game_performance["triple_long_shot"]++; + } +} + +//Function Number: 39 +updaterecentheadshots() +{ + self endon("disconnect"); + level endon("special_op_terminated"); + self notify("updateRecentHeadshots"); + self endon("updateRecentHeadshots"); + self.recentheadshotcount++; + wait 1.5; + if(self.recentheadshotcount > 1) + { + multiheadshots(self.recentheadshotcount); + } + + self.recentheadshotcount = 0; +} + +//Function Number: 40 +multiheadshots(param_00) +{ + if(param_00 >= 3) + { + thread chaos_combo_splash(&"SO_SURVIVAL_CHAOS_SPLASH_HEAD_HUNTER","cm_bp_kills_3headshot"); + chaos_score_event_raise("headshot_triple"); + self.game_performance["triple_headshot"]++; + } +} + +//Function Number: 41 +updaterecentknifekills() +{ + self endon("disconnect"); + level endon("special_op_terminated"); + self notify("updateRecentKnifekills"); + self endon("updateRecentKnifekills"); + self.recentknifekillcount++; + wait 2; + if(self.recentknifekillcount > 1) + { + multiknifekills(self.recentknifekillcount); + } + + self.recentknifekillcount = 0; +} + +//Function Number: 42 +multiknifekills(param_00) +{ + if(param_00 >= 3) + { + thread chaos_combo_splash(&"SO_SURVIVAL_CHAOS_SPLASH_SLASHER","cm_bp_kills_3knife"); + chaos_score_event_raise("knife_triple"); + self.game_performance["triple_knife_kill"]++; + } +} + +//Function Number: 43 +updaterecentkills() +{ + self endon("disconnect"); + level endon("special_op_terminated"); + self notify("updateRecentKills"); + self endon("updateRecentKills"); + self.recentkillcount++; + wait 1; + if(self.recentkillcount > 1) + { + multikill(self.recentkillcount); + } + + self.recentkillcount = 0; +} + +//Function Number: 44 +multikill(param_00) +{ + if(param_00 == 3) + { + thread chaos_combo_splash(&"SO_SURVIVAL_CHAOS_SPLASH_TRIPLE_KILL","cm_bp_kills_triple"); + chaos_score_event_raise("kill_triple"); + self.game_performance["triple_kill"]++; + return; + } + + if(param_00 == 4) + { + thread chaos_combo_splash(&"SO_SURVIVAL_CHAOS_SPLASH_QUAD_KILL","cm_bp_kills_quad"); + chaos_score_event_raise("kill_quad"); + self.game_performance["quad_kill"]++; + return; + } + + if(param_00 > 4) + { + thread chaos_combo_splash(&"SO_SURVIVAL_CHAOS_SPLASH_MULTI_KILL","cm_bp_kills_multiple"); + chaos_score_event_raise("kill_multi"); + self.game_performance["multi_kill"]++; + return; + } +} + +//Function Number: 45 +chaos_timer_create(param_00,param_01,param_02) +{ + param_00 = common_scripts\utility::ter_op(isdefined(param_00) && param_00 > 0,param_00,1200); + if(isdefined(param_01) && !common_scripts\utility::flag_exist(param_01)) + { + common_scripts\utility::flag_init(param_01); + } + + if(isdefined(param_02) && !common_scripts\utility::flag_exist(param_02)) + { + common_scripts\utility::flag_init(param_02); + } + + foreach(var_04 in level.players) + { + var_04 chaos_timer_player_setup(param_00,param_01,param_02); + } + + level thread update_level_chaos_timer(); + level thread play_time_related_vo(param_00); + level thread startcombodecayontimer(); +} + +//Function Number: 46 +play_time_related_vo(param_00) +{ + level endon("special_op_terminated"); + level notify("stop_play_time_related_VO"); + level endon("stop_play_time_related_VO"); + level common_scripts\utility::waittill_notify_or_timeout("Start timer",10); + var_01 = param_00 - 45; + var_02 = 15; + var_03 = 20; + if(var_01 > 0) + { + wait var_01; + level thread maps\_utility::radio_dialogue("chaos_time_almostup"); + } + + wait var_02; + level thread maps\_utility::radio_dialogue("chaos_30sec_left",2); + wait var_03; + level thread maps\_utility::radio_dialogue("chaos_10sec_left",2); + wait 10; + level thread maps\_utility::radio_dialogue("chaos_keep_combo"); +} + +//Function Number: 47 +chaos_timer_player_setup(param_00,param_01,param_02) +{ + var_03 = chaos_timer_create_hud_elem(self); + thread chaos_timer_destroy(var_03); + thread chaos_timer_update(var_03,param_00,param_01,param_02); + self.chaos_timer = var_03; +} + +//Function Number: 48 +chaos_timer_update(param_00,param_01,param_02,param_03) +{ + level endon("special_op_terminated"); + level endon("chaos_timer_reached_zero"); + level endon("update_chaos_timer"); + if(param_01 <= 0) + { + param_01 = 60; + } + + param_00 settenthstimerstatic(param_01); + level common_scripts\utility::waittill_notify_or_timeout("Start timer",10); + if(level.timer_started == 0) + { + level.challenge_start_time = gettime(); + level.timer_started = 1; + } + + var_04 = param_01 * 1000; + var_05 = param_01; + var_06 = gettime(); + var_07 = gettime(); + thread chaos_timer_reached_zero(param_00,var_05,param_03); + thread chaos_timer_update_color(param_00,var_05,60); + thread chaos_timer_update_flash(param_00,var_05,30); + thread chaos_timer_update_sound(var_05,5); + thread chaos_timer_update_vo(var_05,10); + for(;;) + { + param_00 settenthstimer(var_05); + level waittill("wave_ended"); + var_07 = gettime(); + var_04 = var_04 - var_07 - var_06; + var_05 = var_04 / 1000; + level.chaos_time_remaining = var_05; + param_00 settenthstimerstatic(var_05); + level waittill("wave_started"); + var_06 = gettime(); + } +} + +//Function Number: 49 +chaos_timer_reached_zero(param_00,param_01,param_02) +{ + level endon("special_op_terminated"); + level endon("wave_ended"); + level endon("update_chaos_timer"); + param_00 endon("death"); + wait param_01; + level notify("chaos_timer_reached_zero"); + for(;;) + { + if(common_scripts\utility::flag_exist("chaos_players_in_combo") && common_scripts\utility::flag("chaos_players_in_combo")) + { + common_scripts\utility::flag_waitopen("chaos_players_in_combo"); + } + + if(level.freeze_combo_meter != 1) + { + break; + } + + wait 0.05; + } + + common_scripts\utility::flag_set(param_02); + thread chaos_timer_fade(param_00); +} + +//Function Number: 50 +sp_killstreak_bonus_freezemeter_crateopen() +{ + level endon("special_op_terminated"); + if(maps\_sp_killstreaks::has_killstreak("sentry")) + { + maps\_sp_killstreaks::take_sp_killstreak("sentry"); + } + + self giveweapon("chaos_freeze_meter"); + self setactionslot(4,"weapon","chaos_freeze_meter"); + thread radio_dialogue_to_player(self,"chaos_pickup_freeze"); + thread wait_for_meter_freeze_activiation(); +} + +//Function Number: 51 +wait_for_meter_freeze_activiation() +{ + level endon("special_op_terminated"); + level endon("stop_wait_for_meter_freeze_activation"); + self notifyonplayercommand("freeze_combo_meter","+actionslot 4"); + for(;;) + { + self waittill("freeze_combo_meter"); + if(self.laststand_info.type_getup_lives == 0 && isdefined(self.laststand) && self.laststand == 1) + { + continue; + } + + self takeweapon("chaos_freeze_meter"); + level thread execute_combo_freeze(); + break; + } +} + +//Function Number: 52 +execute_combo_freeze() +{ + level endon("special_op_terminated"); + level notify("stop_freeze_meter_wait"); + level endon("stop_freeze_meter_wait"); + foreach(var_01 in level.players) + { + var_01 thread change_player_vision_set(); + var_01 playlocalsound("chaos_perk_activate"); + } + + level.freeze_combo_meter = 1; + level notify("stop_meter_decay"); + chaos_combo_bar_set_fill(1); + chaos_combo_bar_hide(0); + wait 8; + foreach(var_01 in level.players) + { + var_01 playlocalsound("chaos_perk_deactivate"); + } + + wait 2; + level.freeze_combo_meter = 0; + thread chaos_combo_on_end(4,0.2); +} + +//Function Number: 53 +sp_killstreak_bonus_multiplier_crateopen() +{ + level.chaos_combo_count = level.chaos_combo_count + 10; + chaos_score_event_raise("bonus_multiplier"); + level thread maps\_utility::radio_dialogue("chaos_pickup_multiplier"); + if(level.player_currently_getting_perk == 1) + { + level waittill("proceed_with_next_perk"); + } + + if(level.player.num_perk_obtained < level.chaos_perk_progression.size) + { + var_00 = int(level.chaos_combo_count / level.perk_progression_gap); + var_01 = level.player.num_perk_obtained; + if(var_00 > var_01) + { + var_02 = var_00 * level.perk_progression_gap; + var_03 = "combo_" + var_02; + var_04 = level.chaos_perk_progression[var_03]; + foreach(var_06 in level.players) + { + var_06 chaos_give_perk(var_04); + } + + level thread chaos_perk_radio(var_04); + } + } +} + +//Function Number: 54 +sp_killstreak_bonus_laststand_crateopen() +{ + var_00 = 0; + self.laststand_info.type_getup_lives = self.laststand_info.type_getup_lives + 1; + thread radio_dialogue_to_player(self,"chaos_pickup_laststand"); + if(isdefined(self.laststand) && self.laststand == 1) + { + return; + } + + update_lives_left_hud(self.laststand_info.type_getup_lives); +} + +//Function Number: 55 +sp_killstreak_bonus_time_crateopen() +{ + level notify("update_chaos_timer"); + var_00 = level.chaos_time_remaining + 60; + level.chaos_time_remaining = var_00; + foreach(var_02 in level.players) + { + if(isdefined(var_02.chaos_timer)) + { + var_02.chaos_timer.fontscale = 1; + var_02.chaos_timer maps\_specialops::set_hud_white(); + thread chaos_timer_update(var_02.chaos_timer,var_00,undefined,"win_survival"); + } + + if(isdefined(var_02.combathighoverlay)) + { + var_02.combathighoverlay destroy(); + } + } + + level thread update_level_chaos_timer(); + level thread maps\_utility::radio_dialogue("chaos_pickup_time"); + level thread play_time_related_vo(var_00); + level notify("Start timer"); +} + +//Function Number: 56 +chaos_give_perk(param_00) +{ + if(param_00 != "specialty_juiced") + { + if(self hasperk(param_00,1)) + { + return 1; + } + } + + level.player_currently_getting_perk = 1; + var_01 = undefined; + switch(param_00) + { + case "specialty_stalker": + thread maps\_so_survival_perks::give_perk_stalker(); + break; + + case "specialty_longersprint": + thread maps\_so_survival_perks::give_perk_longersprint(); + break; + + case "specialty_fastreload": + thread maps\_so_survival_perks::give_perk_fastreload(); + break; + + case "specialty_quickdraw": + thread maps\_so_survival_perks::give_perk_quickdraw(); + thread chaos_give_perk_fastoffhand(); + break; + + case "specialty_detectexplosive": + thread maps\_so_survival_perks::give_perk_detectexplosive(); + break; + + case "specialty_bulletaccuracy": + thread maps\_so_survival_perks::give_perk_bulletaccuracy(); + break; + + case "specialty_armorvest": + self setperk("specialty_armorvest",1,0); + thread chaos_extra_health_regen(); + break; + + case "specialty_juiced": + self setmovespeedscale(1.25); + break; + + default: + thread maps\_so_survival_perks::give_perk_dummy(); + break; + } + + self.num_perk_obtained++; + self notify("perk_pop_up",param_00); + return 1; +} + +//Function Number: 57 +chaos_extra_health_regen() +{ + level endon("special_op_terminated"); + self endon("chaos_stop_extra_health_regen"); + for(;;) + { + if(self.health < self.maxhealth) + { + var_00 = self.maxhealth - self.health; + self.health = self.health + int(var_00 * 0.8); + } + + wait 0.1; + } +} + +//Function Number: 58 +chaos_give_perk_fastoffhand() +{ + self setperk("specialty_fastoffhand",1,0); +} + +//Function Number: 59 +unsetjuiced() +{ + self setmovespeedscale(1); +} + +//Function Number: 60 +chaos_eog_summary() +{ + var_00 = int(min(level.challenge_end_time - level.challenge_start_time,86400000)); + var_01 = int(var_00 % 1000 / 100); + var_02 = int(var_00 / 1000) % 60; + var_03 = int(var_00 / -5536) % 60; + var_04 = int(var_00 / 3600000); + if(var_04 < 10) + { + var_04 = "0" + var_04; + } + + if(var_03 < 10) + { + var_03 = "0" + var_03; + } + + if(var_02 < 10) + { + var_02 = "0" + var_02; + } + + var_05 = var_04 + ":" + var_03 + ":" + var_02 + "." + var_01; + chaos_clear_eog_summary_dvar(); + foreach(var_07 in level.players) + { + var_08 = var_07.game_performance["kill"]; + var_09 = lib_0623::func_3F6A(var_07,"kill"); + var_0A = var_07.game_performance["headshot"]; + var_0B = lib_0623::func_3F6A(var_07,"headshot"); + var_0C = var_07.game_performance["knife_kill"]; + var_0D = lib_0623::func_3F6A(var_07,"knife_kill"); + var_0E = var_07.game_performance["comboscoremax"]; + var_0F = var_07.game_performance["combomultmax"]; + var_10 = var_07.game_performance["long_shot"]; + var_11 = var_07.game_performance["triple_kill"]; + var_12 = var_07.game_performance["quad_kill"]; + var_13 = var_07.game_performance["multi_kill"]; + var_14 = var_07.game_performance["new_weapon_collected"]; + var_15 = var_07.game_performance["massive_explosion"]; + var_16 = var_07.game_performance["triple_long_shot"]; + var_17 = var_07.game_performance["triple_headshot"]; + var_18 = var_07.game_performance["triple_knife_kill"]; + var_19 = var_07.game_performance["explosive_kill"]; + var_1A = var_07.game_performance["execution"]; + var_1B = var_07.game_performance["grenade_kill"]; + var_1C = var_07.game_performance["explosive_jug"]; + var_1D = var_07.game_performance["riot_shield_jug"]; + var_1E = var_07.game_performance["regular_jug"]; + var_1F = var_07.game_performance["easy_kill"]; + var_20 = var_07.game_performance["regular_kill"]; + var_21 = var_07.game_performance["hardened_kill"]; + var_22 = var_07.game_performance["veteran_kill"]; + var_23 = var_07.game_performance["elite_kill"]; + var_24 = var_07.game_performance["chemical_kill"]; + var_25 = var_07.game_performance["martyrdom_kill"]; + var_26 = var_07.game_performance["regular_dog"]; + var_27 = var_07.game_performance["explosive_dog"]; + var_28 = var_07.game_performance["chopper_kill"]; + setdvar("ui_hide_hint",1); + var_29 = 0; + var_2A = 4; + if(maps\_utility::is_coop()) + { + var_07 chaos_add_custom_eog_summary_line("","@SPECIAL_OPS_PERFORMANCE_YOU","@SPECIAL_OPS_PERFORMANCE_PARTNER"); + var_07 chaos_add_custom_eog_summary_line("@SO_SURVIVAL_PERFORMANCE_KILLS",var_08,var_09); + var_07 chaos_add_custom_eog_summary_line("","",""); + var_07 chaos_add_custom_eog_summary_line("@SO_SURVIVAL_CHAOS_HIGHEST_COMBO",var_0F); + var_07 chaos_add_custom_eog_summary_line("@SO_SURVIVAL_PERFORMANCE_TIME",var_05); + var_07 chaos_add_custom_eog_summary_line("@SO_SURVIVAL_PERFORMANCE_SCORE",level.chaos_score); + continue; + } + + if(var_28 > 0 && var_29 < var_2A) + { + var_07 chaos_add_custom_eog_summary_line("@SO_SURVIVAL_CHAOS_EOG_CHOPPER",var_28); + var_29++; + } + + if(var_15 > 0 && var_29 < var_2A) + { + var_07 chaos_add_custom_eog_summary_line("@SO_SURVIVAL_CHAOS_EOG_MASSIVE_EXP",var_15); + var_29++; + } + + if(var_1C > 0 && var_29 < var_2A) + { + var_07 chaos_add_custom_eog_summary_line("@SO_SURVIVAL_CHAOS_EOG_EXP_JUG",var_1C); + var_29++; + } + + if(var_13 > 0 && var_29 < var_2A) + { + var_07 chaos_add_custom_eog_summary_line("@SO_SURVIVAL_CHAOS_EOG_MUL_KILL",var_13); + var_29++; + } + + if(var_16 > 0 && var_29 < var_2A) + { + var_07 chaos_add_custom_eog_summary_line("@SO_SURVIVAL_CHAOS_EOG_TRI_LONGSHOT",var_16); + var_29++; + } + + if(var_18 > 0 && var_29 < var_2A) + { + var_07 chaos_add_custom_eog_summary_line("@SO_SURVIVAL_CHAOS_EOG_TRI_KNIFE",var_18); + var_29++; + } + + if(var_17 > 0 && var_29 < var_2A) + { + var_07 chaos_add_custom_eog_summary_line("@SO_SURVIVAL_CHAOS_EOG_TRI_HEADSHOT",var_17); + var_29++; + } + + if(var_12 > 0 && var_29 < var_2A) + { + var_07 chaos_add_custom_eog_summary_line("@SO_SURVIVAL_CHAOS_EOG_QUAD_KILL",var_12); + var_29++; + } + + if(var_1D > 0 && var_29 < var_2A) + { + var_07 chaos_add_custom_eog_summary_line("@SO_SURVIVAL_CHAOS_EOG_SHIELD_JUG",var_1D); + var_29++; + } + + if(var_11 > 0 && var_29 < var_2A) + { + var_07 chaos_add_custom_eog_summary_line("@SO_SURVIVAL_CHAOS_EOG_TRI_KILL",var_11); + var_29++; + } + + if(var_1E > 0 && var_29 < var_2A) + { + var_07 chaos_add_custom_eog_summary_line("@SO_SURVIVAL_CHAOS_EOG_REG_JUG",var_1E); + var_29++; + } + + if(var_14 > 0 && var_29 < var_2A) + { + var_07 chaos_add_custom_eog_summary_line("@SO_SURVIVAL_CHAOS_EOG_NEW_WEAPON",var_14); + var_29++; + } + + if(var_1B > 0 && var_29 < var_2A) + { + var_07 chaos_add_custom_eog_summary_line("@SO_SURVIVAL_CHAOS_EOG_GRENADE",var_1B); + var_29++; + } + + if(var_24 > 0 && var_29 < var_2A) + { + var_07 chaos_add_custom_eog_summary_line("@SO_SURVIVAL_CHAOS_EOG_CHEMICAL",var_24); + var_29++; + } + + if(var_0A > 0 && var_29 < var_2A) + { + var_07 chaos_add_custom_eog_summary_line("@SO_SURVIVAL_CHAOS_EOG_HEADSHOT",var_0A); + var_29++; + } + + if(var_23 > 0 && var_29 < var_2A) + { + var_07 chaos_add_custom_eog_summary_line("@SO_SURVIVAL_CHAOS_EOG_ELITE",var_23); + var_29++; + } + + if(var_22 > 0 && var_29 < var_2A) + { + var_07 chaos_add_custom_eog_summary_line("@SO_SURVIVAL_CHAOS_EOG_VETERAN",var_22); + var_29++; + } + + if(var_1A > 0 && var_29 < var_2A) + { + var_07 chaos_add_custom_eog_summary_line("@SO_SURVIVAL_CHAOS_EOG_EXECUTION",var_1A); + var_29++; + } + + if(var_21 > 0 && var_29 < var_2A) + { + var_07 chaos_add_custom_eog_summary_line("@SO_SURVIVAL_CHAOS_EOG_HARDENED",var_21); + var_29++; + } + + if(var_27 > 0 && var_29 < var_2A) + { + var_07 chaos_add_custom_eog_summary_line("@SO_SURVIVAL_CHAOS_EOG_EXP_DOG",var_27); + var_29++; + } + + if(var_25 > 0 && var_29 < var_2A) + { + var_07 chaos_add_custom_eog_summary_line("@SO_SURVIVAL_CHAOS_EOG_MARTYRDOM",var_25); + var_29++; + } + + if(var_10 > 0 && var_29 < var_2A) + { + var_07 chaos_add_custom_eog_summary_line("@SO_SURVIVAL_CHAOS_EOG_LONG_SHOT",var_10); + var_29++; + } + + if(var_0C > 0 && var_29 < var_2A) + { + var_07 chaos_add_custom_eog_summary_line("@SO_SURVIVAL_CHAOS_EOG_KNIFE",var_0C); + var_29++; + } + + if(var_19 > 0 && var_29 < var_2A) + { + var_07 chaos_add_custom_eog_summary_line("@SO_SURVIVAL_CHAOS_EOG_EXP_KILL",var_19); + var_29++; + } + + if(var_20 > 0 && var_29 < var_2A) + { + var_07 chaos_add_custom_eog_summary_line("@SO_SURVIVAL_CHAOS_EOG_REG_KILL",var_20); + var_29++; + } + + if(var_26 > 0 && var_29 < var_2A) + { + var_07 chaos_add_custom_eog_summary_line("@SO_SURVIVAL_CHAOS_EOG_REG_DOG",var_26); + var_29++; + } + + if(var_1F > 0 && var_29 < var_2A) + { + var_07 chaos_add_custom_eog_summary_line("@SO_SURVIVAL_CHAOS_EOG_EASY",var_1F); + var_29++; + } + + var_07 chaos_add_custom_eog_summary_line_blank(); + var_07 chaos_add_custom_eog_summary_line("@SO_SURVIVAL_CHAOS_HIGHEST_COMBO",var_0F); + var_07 chaos_add_custom_eog_summary_line("@SO_SURVIVAL_PERFORMANCE_TIME",var_05); + var_07 chaos_add_custom_eog_summary_line("@SO_SURVIVAL_PERFORMANCE_SCORE",level.chaos_score); + } +} + +//Function Number: 61 +chaos_clear_eog_summary_dvar() +{ + var_00 = ""; + if(level.players.size > 1) + { + for(var_01 = 1;var_01 < 10;var_01++) + { + for(var_02 = 1;var_02 < 5;var_02++) + { + var_00 = "ui_eog_r" + var_01 + "c" + var_02 + "_player1"; + setdvar(var_00,""); + var_00 = "ui_eog_r" + var_01 + "c" + var_02 + "_player2"; + setdvar(var_00,""); + } + } + + return; + } + + for(var_01 = 1;var_01 < 10;var_01++) + { + for(var_02 = 1;var_02 < 5;var_02++) + { + var_00 = "ui_eog_r" + var_01 + "c" + var_02 + "_player1"; + setdvar(var_00,""); + } + } +} + +//Function Number: 62 +chaos_add_custom_eog_summary_line(param_00,param_01,param_02,param_03,param_04) +{ + if(!isdefined(self.eog_line)) + { + self.eog_line = 0; + } + + var_05 = undefined; + if(isdefined(param_04)) + { + var_05 = param_04; + if(param_04 > self.eog_line) + { + self.eog_line = param_04; + } + } + else + { + self.eog_line++; + var_05 = self.eog_line; + } + + chaos_set_custom_eog_summary(var_05,1,param_00); + var_06 = []; + if(isdefined(param_03)) + { + } + + if(isdefined(param_03)) + { + } + + if(isdefined(param_02)) + { + } + + var_07 = 0; + while(var_07 < var_7B.size) + { + chaos_set_custom_eog_summary(var_06,4 - var_07,var_7B[var_07]); + var_07++ = var_7B[var_7B.size]; + } +} + +//Function Number: 63 +chaos_set_custom_eog_summary(param_00,param_01,param_02) +{ + var_03 = int(param_00); + var_04 = int(param_01); + var_05 = ""; + if(level.players.size > 1) + { + if(self == level.player) + { + var_05 = "ui_eog_r" + var_03 + "c" + var_04 + "_player1"; + } + else if(self == level.player2) + { + var_05 = "ui_eog_r" + var_03 + "c" + var_04 + "_player2"; + } + else + { + } + } + else + { + var_05 = "ui_eog_r" + var_03 + "c" + var_04 + "_player1"; + } + + setdvar(var_05,param_02); +} + +//Function Number: 64 +chaos_add_custom_eog_summary_line_blank() +{ + if(!isdefined(self.eog_line)) + { + self.eog_line = 0; + } + + self.eog_line++; +} + +//Function Number: 65 +radio_dialogue_to_player(param_00,param_01,param_02) +{ + if(!isdefined(level.player_radio_emitter)) + { + var_03 = spawn("script_origin",(0,0,0)); + var_03 linkto(level.player,"",(0,0,0),(0,0,0)); + level.player_radio_emitter = var_03; + } + + maps\_utility::bcs_scripted_dialogue_start(); + var_04 = 0; + if(!isdefined(param_02)) + { + var_04 = level.player_radio_emitter maps\_utility::function_stack(::chaos_play_sound_to_player,param_00,level.scr_radio[param_01],undefined,1); + } + else + { + var_04 = level.player_radio_emitter maps\_utility::function_stack_timeout(param_02,::chaos_play_sound_to_player,param_00,level.scr_radio[param_01],undefined,1); + } + + return var_04; +} + +//Function Number: 66 +chaos_play_sound_to_player(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if(maps\_utility::is_dead_sentient()) + { + return; + } + + if(!isdefined(param_00)) + { + return; + } + + thread chaos_delete_on_death_wait_sound(param_00,"sounddone"); + param_00 playlocalsound(param_01,"sounddone",0); + if(isdefined(param_03)) + { + if(!isdefined(maps\_utility_code::wait_for_sounddone_or_death(param_00))) + { + param_00 stopsounds(); + } + + wait 0.05; + } + else + { + param_00 waittill("sounddone"); + } + + if(isdefined(param_04)) + { + self notify(param_04); + } +} + +//Function Number: 67 +chaos_delete_on_death_wait_sound(param_00,param_01) +{ + param_00 endon("death"); + self waittill("death"); + if(isdefined(param_00)) + { + if(param_00 iswaitingonsound()) + { + param_00 waittill(param_01); + } + } +} + +//Function Number: 68 +updateweaponheadiconforplayer() +{ + level endon("special_op_terminated"); + common_scripts\utility::flag_wait("slamzoom_finished"); + for(;;) + { + foreach(var_01 in level.chaos_entities) + { + foreach(var_03 in level.players) + { + if(sighttracepassed(var_03 geteye(),var_01.origin,0,var_03) || distancesquared(var_01.origin,var_03.origin) < 562500) + { + if(!isdefined(var_01.headiconforplayer[var_03.unique_id]) && var_01.weapon_in_use == 0) + { + var_04 = var_01 createweaponheadicon(var_03,var_01.hud_icon); + var_01.headiconforplayer[var_03.unique_id] = var_04; + } + + continue; + } + + if(isdefined(var_01.headiconforplayer[var_03.unique_id])) + { + var_01.headiconforplayer[var_03.unique_id] destroy(); + var_01.headiconforplayer[var_03.unique_id] = undefined; + } + } + } + + wait 0.5; + } +} + +//Function Number: 69 +createweaponheadicon(param_00,param_01) +{ + var_02 = newclienthudelem(param_00); + var_02.x = self.origin[0]; + var_02.y = self.origin[1]; + var_02.z = self.origin[2] + 5; + var_02.alpha = 0.85; + var_02.hidewheninmenu = 1; + var_02 setshader(param_01,40,40); + var_02 setwaypoint(1,0,1,0); + var_02 thread chaoskeeppositioned(self,(0,0,5),0.05); + return var_02; +} + +//Function Number: 70 +chaoskeeppositioned(param_00,param_01,param_02) +{ + self endon("death"); + param_00 endon("death"); + var_03 = param_00.origin; + for(;;) + { + if(!isdefined(param_00)) + { + return; + } + + if(var_03 != param_00.origin) + { + var_03 = param_00.origin; + self.x = var_03[0] + param_01[0]; + self.y = var_03[1] + param_01[1]; + self.z = var_03[2] + param_01[2]; + } + + if(param_02 > 0.05) + { + self.alpha = 0.85; + self fadeovertime(param_02); + self.alpha = 0; + } + + wait param_02; + } +} + +//Function Number: 71 +manage_lives_left_hud() +{ + level endon("special_op_terminated"); + for(;;) + { + self waittill("player_downed"); + if(isdefined(self.laststand_info.type_getup_lives) && self.laststand_info.type_getup_lives > 0) + { + thread radio_dialogue_to_player(self,"chaos_get_onekill",1); + } + + self.live_1_hud_icon.icon.alpha = 0; + self.live_2_hud_icon.icon.alpha = 0; + self.live_3_hud_icon.icon.alpha = 0; + self.live_4_hud_icon.icon.alpha = 0; + self.live_5_hud_icon.icon.alpha = 0; + self waittill("revived"); + self disableinvulnerability(); + lib_0623::func_3F74("armor_1"); + if(isdefined(self.laststand_info.type_getup_lives) && self.laststand_info.type_getup_lives - 1 > 0) + { + var_00 = self.laststand_info.type_getup_lives - 1; + wait 0.5; + update_lives_left_hud(var_00); + continue; + } + + var_01 = spawnstruct(); + var_01.title = &"SO_SURVIVAL_CHAOS_SPLASH_FINAL_STAND"; + var_01.duration = 1.5; + var_01.sound = "cm_bp_laststand_lastlife"; + thread player_combo_splash(var_01); + } +} + +//Function Number: 72 +update_lives_left_hud(param_00,param_01) +{ + var_02 = 0; + var_03 = 0; + if(isdefined(self.live_1_hud_icon.icon) && isdefined(self.live_2_hud_icon.icon) && isdefined(self.live_3_hud_icon.icon) && isdefined(self.live_4_hud_icon.icon) && isdefined(self.live_5_hud_icon.icon)) + { + if(param_00 == 5) + { + self.live_1_hud_icon.icon.alpha = 0.85; + self.live_2_hud_icon.icon.alpha = 0.85; + self.live_3_hud_icon.icon.alpha = 0.85; + self.live_4_hud_icon.icon.alpha = 0.85; + self.live_5_hud_icon.icon.alpha = 0.85; + var_02 = -75; + } + else if(param_00 == 4) + { + self.live_1_hud_icon.icon.alpha = 0.85; + self.live_2_hud_icon.icon.alpha = 0.85; + self.live_3_hud_icon.icon.alpha = 0.85; + self.live_4_hud_icon.icon.alpha = 0.85; + self.live_5_hud_icon.icon.alpha = 0; + var_02 = -60; + } + else if(param_00 == 3) + { + self.live_1_hud_icon.icon.alpha = 0.85; + self.live_2_hud_icon.icon.alpha = 0.85; + self.live_3_hud_icon.icon.alpha = 0.85; + self.live_4_hud_icon.icon.alpha = 0; + self.live_5_hud_icon.icon.alpha = 0; + var_02 = -45; + } + else if(param_00 == 2) + { + self.live_1_hud_icon.icon.alpha = 0.85; + self.live_2_hud_icon.icon.alpha = 0.85; + self.live_3_hud_icon.icon.alpha = 0; + self.live_4_hud_icon.icon.alpha = 0; + self.live_5_hud_icon.icon.alpha = 0; + var_02 = -30; + if(!isdefined(param_01)) + { + thread radio_dialogue_to_player(self,"chaos_2_last_stand",1); + } + } + else if(param_00 == 1) + { + self.live_1_hud_icon.icon.alpha = 0.85; + self.live_2_hud_icon.icon.alpha = 0; + self.live_3_hud_icon.icon.alpha = 0; + self.live_4_hud_icon.icon.alpha = 0; + self.live_5_hud_icon.icon.alpha = 0; + var_02 = -15; + if(!isdefined(param_01)) + { + thread radio_dialogue_to_player(self,"chaos_1_last_stand",1); + } + } + else if(param_00 == 0) + { + self.live_1_hud_icon.icon.alpha = 0; + self.live_2_hud_icon.icon.alpha = 0; + self.live_3_hud_icon.icon.alpha = 0; + self.live_4_hud_icon.icon.alpha = 0; + self.live_5_hud_icon.icon.alpha = 0; + var_02 = 0; + } + else + { + } + + if(issplitscreen()) + { + var_03 = -80 - self != level.player * 19; + } + else + { + var_03 = 152; + } + + self.live_1_hud_icon.icon maps\_hud_util::setpoint("LEFT","CENTER",var_02,var_03); + self.live_2_hud_icon.icon maps\_hud_util::setpoint("LEFT","CENTER",var_02 + 30,var_03); + self.live_3_hud_icon.icon maps\_hud_util::setpoint("LEFT","CENTER",var_02 + 60,var_03); + self.live_4_hud_icon.icon maps\_hud_util::setpoint("LEFT","CENTER",var_02 + 90,var_03); + self.live_5_hud_icon.icon maps\_hud_util::setpoint("LEFT","CENTER",var_02 + 120,var_03); + } +} + +//Function Number: 73 +chaos_combo_player_create_hud() +{ + level.chaos_combo_all_hud_elems = []; + self.chaos_score_hud = maps\_hud_util::createclientfontstring("hudbig",1.25); + if(issplitscreen()) + { + self.chaos_score_hud maps\_hud_util::setpoint("RIGHT","TOP RIGHT",undefined,0 + self != level.player * 27); + } + else + { + self.chaos_score_hud maps\_hud_util::setpoint("RIGHT","TOP RIGHT",undefined,undefined); + } + + self.chaos_score_hud settext("0"); + self.chaos_score_hud.color = (1,1,0); + self.chaos_score_hud.glowalpha = 0.25; + self.chaos_score_hud.glowcolor = (0.2,0.2,0.2); + self.chaos_score_hud.pulse_scale_normal = 1.25; + self.chaos_score_hud.pulse_scale_big = 1.65; + self.chaos_score_hud maps\_specialops_code::so_hud_pulse_init(); + self.chaos_score_hud.hidewheninmenu = 1; + level.chaos_combo_all_hud_elems[level.chaos_combo_all_hud_elems.size] = self.chaos_score_hud; + self.chaos_score_info_hud = maps\_hud_util::createclientfontstring("hudbig",1); + self.chaos_score_info_hud maps\_hud_util::setpoint("RIGHT","TOP RIGHT",undefined,25); + self.chaos_score_info_hud settext("0"); + self.chaos_score_info_hud maps\_specialops_code::so_hud_pulse_init(); + self.chaos_score_info_hud.hidewheninmenu = 1; + self.chaos_score_info_hud.alpha = 0; + level.chaos_combo_all_hud_elems[level.chaos_combo_all_hud_elems.size] = self.chaos_score_info_hud; + self.chaos_combo_bar = chaos_special_item_hudelem(20,20); + self.chaos_combo_bar.children = []; + self.chaos_combo_bar maps\_hud_util::setparent(level.uiparent); + self.chaos_combo_bar setshader("chaos_meter_16",162,8); + if(issplitscreen()) + { + self.chaos_combo_bar maps\_hud_util::setpoint("LEFT","CENTER",-79,85 - self != level.player * 27); + } + else + { + self.chaos_combo_bar maps\_hud_util::setpoint("LEFT","CENTER",-79,45); + } + + self.chaos_combo_bar.glowcolor = (0.8,0.8,0.8); + self.chaos_combo_bar.glowalpha = 0.5; + self.chaos_combo_bar.hidewheninmenu = 1; + level.chaos_combo_all_hud_elems[level.chaos_combo_all_hud_elems.size] = self.chaos_combo_bar; + self.chaos_combo_hud_action_array = []; + for(var_00 = 0;var_00 < level.chaos_combo_actions_max;var_00++) + { + var_01 = maps\_hud_util::createclientfontstring("hudsmall",1); + if(issplitscreen()) + { + var_01 maps\_hud_util::setpoint("RIGHT","CENTER RIGHT",undefined,var_00 * 18 + -20); + } + else + { + var_01 maps\_hud_util::setpoint("RIGHT","CENTER RIGHT",undefined,var_00 * 18); + } + + var_01 settext(""); + var_01.alpha = 1 - var_00 * 1 / level.chaos_combo_actions_max; + var_01.hidewheninmenu = 1; + self.chaos_combo_hud_action_array[var_00] = var_01; + level.chaos_combo_all_hud_elems[level.chaos_combo_all_hud_elems.size] = var_01; + } + + self.chaos_combo_hud_multiply = maps\_hud_util::createclientfontstring("hudbig",1.6); + if(issplitscreen()) + { + self.chaos_combo_hud_multiply maps\_hud_util::setpoint("RIGHT","CENTER",-10,105 - self != level.player * 27); + } + else + { + self.chaos_combo_hud_multiply maps\_hud_util::setpoint("RIGHT","CENTER",-10,65); + } + + self.chaos_combo_hud_multiply settext(""); + self.chaos_combo_hud_multiply.color = (1,1,0); + self.chaos_combo_hud_multiply.glowcolor = (0,0,0); + self.chaos_combo_hud_multiply.glowalpha = 0.8; + self.chaos_combo_hud_multiply.pulse_scale_normal = 1.25; + self.chaos_combo_hud_multiply.pulse_scale_big = 2; + self.chaos_combo_hud_multiply.var_184D = 0.3; + self.chaos_combo_hud_multiply maps\_specialops_code::so_hud_pulse_init(); + self.chaos_combo_hud_multiply.hidewheninmenu = 1; + level.chaos_combo_all_hud_elems[level.chaos_combo_all_hud_elems.size] = self.chaos_combo_hud_multiply; + self.chaos_combo_hud_score = maps\_hud_util::createclientfontstring("hudbig",1); + if(issplitscreen()) + { + self.chaos_combo_hud_score maps\_hud_util::setpoint("LEFT","CENTER",5,105 - self != level.player * 27); + } + else + { + self.chaos_combo_hud_score maps\_hud_util::setpoint("LEFT","CENTER",5,65); + } + + self.chaos_combo_hud_score settext(""); + self.chaos_combo_hud_score.color = (1,1,0); + self.chaos_combo_hud_score.hidewheninmenu = 1; + level.chaos_combo_all_hud_elems[level.chaos_combo_all_hud_elems.size] = self.chaos_combo_hud_score; +} + +//Function Number: 74 +chaos_combo_all_hud_destroy() +{ + level waittill("special_op_terminated"); + foreach(var_01 in level.chaos_combo_all_hud_elems) + { + var_01 maps\_hud_util::destroyelem(); + } +} + +//Function Number: 75 +makecombomultiplyglowandpop() +{ + level endon("special_op_terminated"); + self.chaos_combo_hud_multiply.glowcolor = (0,0.2,1); + self.chaos_combo_hud_multiply.glowalpha = 1; + common_scripts\utility::waittill_notify_or_timeout("combo_update",1); + self.chaos_combo_hud_multiply.glowcolor = (0,0,0); + self.chaos_combo_hud_multiply.glowalpha = 0; +} + +//Function Number: 76 +chaos_combo_display_update(param_00,param_01,param_02,param_03,param_04) +{ + level endon("special_op_terminated"); + if(isdefined(param_04) && param_04) + { + if(param_01 != 0) + { + chaos_combo_actions_update(param_00,param_01); + } + } + + var_05 = level.chaos_score + param_02 * param_03; + foreach(var_07 in level.players) + { + if(param_01 != 0) + { + var_07 chaos_combo_action_display_clear(); + var_08 = 0; + for(var_09 = level.chaos_combo_actions.size - 1;var_09 >= 0;var_09--) + { + var_07.chaos_combo_hud_action_array[var_08].label = level.chaos_combo_actions[var_09].action_string; + var_07.chaos_combo_hud_action_array[var_08] setvalue(level.chaos_combo_actions[var_09].point); + var_08++; + } + + if(issplitscreen()) + { + var_07.chaos_combo_hud_action_array[0] maps\_hud_util::setpoint("CENTER","CENTER RIGHT",undefined,-20); + var_07.chaos_combo_hud_action_array[0] maps\_hud_util::setpoint("RIGHT","CENTER RIGHT",undefined,-20,0.25); + } + else + { + var_07.chaos_combo_hud_action_array[0] maps\_hud_util::setpoint("CENTER","CENTER RIGHT",undefined,undefined); + var_07.chaos_combo_hud_action_array[0] maps\_hud_util::setpoint("RIGHT","CENTER RIGHT",undefined,undefined,0.25); + } + } + + var_07.chaos_combo_hud_multiply settext(param_03 + "x"); + var_07.chaos_combo_hud_score settext(param_02); + var_07.chaos_score_hud settext(format_good_looking_score(var_05)); + if(isdefined(param_04) && param_04) + { + var_07.chaos_combo_hud_multiply thread maps\_specialops::so_hud_pulse_create(); + } + } +} + +//Function Number: 77 +format_good_looking_score(param_00,param_01) +{ + var_02 = undefined; + var_03 = undefined; + param_00 = int(param_00); + if(param_00 < 1000) + { + if(isdefined(param_01) && param_01 == 1) + { + if(param_00 == 0) + { + return "000"; + } + + if(param_00 < 10) + { + return "00" + param_00; + } + + if(param_00 < 100) + { + return "0" + param_00; + } + + return param_00; + } + + return param_00; + } + + var_02 = param_00 % 1000; + var_03 = float(param_00) - float(var_02) / 1000; + return format_good_looking_score(var_03) + "," + format_good_looking_score(var_02,1); +} + +//Function Number: 78 +chaos_combo_display_clear() +{ + foreach(var_01 in level.players) + { + var_01 chaos_combo_action_display_clear(); + var_01.chaos_combo_hud_multiply settext(""); + var_01.chaos_combo_hud_score settext(""); + } +} + +//Function Number: 79 +chaos_combo_action_display_clear() +{ + for(var_00 = 0;var_00 < self.chaos_combo_hud_action_array.size;var_00++) + { + self.chaos_combo_hud_action_array[var_00].label = ""; + self.chaos_combo_hud_action_array[var_00] settext(""); + } +} + +//Function Number: 80 +recreate_last_stand_hud() +{ + common_scripts\utility::waitframe(); + if(!isdefined(level.player.revive_bar_getup)) + { + level.laststand_hud_elements = []; + maps\_laststand::laststand_revive_bar_getup_create(); + } +} + +//Function Number: 81 +chaos_combo_bar_hide(param_00) +{ + foreach(var_02 in level.players) + { + if(param_00) + { + var_02.chaos_combo_bar.alpha = 0; + continue; + } + + var_02.chaos_combo_bar.alpha = 1; + } +} + +//Function Number: 82 +chaos_combo_bar_get_fill() +{ + return level.player.chaos_combo_bar.bar.frac; +} + +//Function Number: 83 +chaos_combo_bar_set_fill(param_00) +{ + common_scripts\utility::array_thread(level.players,::chaos_combo_bar_player_set_fill,param_00); +} + +//Function Number: 84 +chaos_combo_bar_player_set_fill(param_00) +{ + var_01 = ""; + if(isdefined(level.freeze_combo_meter) && level.freeze_combo_meter == 1) + { + var_01 = "chaos_frozen_meter"; + self.chaos_combo_bar setshader(var_01,162,32); + return; + } + + var_02 = int(param_00 * 100 / 6); + if(var_02 == 0) + { + var_02 = 1; + } + + var_01 = "chaos_meter_" + var_02; + self.chaos_combo_bar setshader(var_01,162,8); +} + +//Function Number: 85 +chaos_score_hud_player_update(param_00) +{ + level endon("special_op_terminated"); + level endon("score_update_bump"); + self.chaos_score_info_hud.alpha = 1; + self.chaos_score_info_hud settext(param_00 + "X COMBO!"); + self.chaos_score_info_hud maps\_hud_util::setpoint("LEFT","CENTER",undefined,-25); + self.chaos_score_info_hud maps\_hud_util::setpoint("RIGHT","TOP RIGHT",undefined,25,0.5); + self.chaos_score_info_hud maps\_specialops::so_hud_pulse_create(); + self.chaos_score_info_hud fadeovertime(0.5); + self.chaos_score_info_hud.alpha = 0; + self.chaos_score_hud settext(level.chaos_score); + self.chaos_score_hud thread maps\_specialops::so_hud_pulse_create(); +} + +//Function Number: 86 +chaos_timer_destroy(param_00) +{ + level waittill("special_op_terminated"); + if(isdefined(param_00)) + { + param_00 maps\_hud_util::destroyelem(); + } +} + +//Function Number: 87 +set_player_time_up_vision() +{ + level endon("special_op_terminated"); + foreach(var_01 in level.players) + { + if(!isdefined(var_01.combathighoverlay)) + { + var_01.combathighoverlay = newclienthudelem(var_01); + var_01.combathighoverlay.x = 0; + var_01.combathighoverlay.y = 0; + var_01.combathighoverlay.alignx = "left"; + var_01.combathighoverlay.aligny = "top"; + var_01.combathighoverlay.horzalign = "fullscreen"; + var_01.combathighoverlay.vertalign = "fullscreen"; + var_01.combathighoverlay setshader("combathigh_overlay",640,480); + var_01.combathighoverlay.sort = -10; + var_01.combathighoverlay.archived = 1; + } + } +} + +//Function Number: 88 +chaos_timer_fade(param_00) +{ + param_00 endon("death"); + param_00 maps\_hud_util::fade_over_time(0,2); + wait 2; + if(!isdefined(param_00)) + { + return; + } + + param_00 destroy(); +} + +//Function Number: 89 +chaos_timer_create_hud_elem(param_00) +{ + var_01 = newclienthudelem(param_00); + var_01.elemtype = "timer"; + var_01.font = "hudbig"; + var_01.fontscale = 1; + var_01.basefontscale = var_01.fontscale; + var_01.x = 0; + var_01.y = 0; + var_01.width = 0; + var_01.height = int(level.fontheight * var_01.fontscale); + var_01.hidewheninmenu = 1; + var_01.xoffset = 0; + var_01.yoffset = 0; + var_01.children = []; + var_01 maps\_hud_util::setparent(level.uiparent); + if(issplitscreen()) + { + var_01 maps\_hud_util::setpoint("TOP","TOP",undefined,-12 + self != level.player * 27); + } + else + { + var_01 maps\_hud_util::setpoint("TOP","TOP",undefined,-12); + } + + var_01.hidden = 0; + return var_01; +} + +//Function Number: 90 +chaos_timer_update_flash(param_00,param_01,param_02) +{ + level endon("special_op_terminated"); + level endon("wave_ended"); + level endon("update_chaos_timer"); + var_03 = param_01 - param_02; + if(var_03 > 0) + { + wait var_03; + } + + var_04 = param_02 / 1; + for(var_05 = 0;var_05 < var_04;var_05++) + { + param_00.fontscale = 1.2; + param_00 maps\_specialops::set_hud_red(); + wait 0.5; + param_00.fontscale = 1; + param_00 maps\_specialops::set_hud_yellow(); + wait 0.5; + } + + param_00 maps\_specialops::set_hud_red(); + level thread set_player_time_up_vision(); +} + +//Function Number: 91 +chaos_timer_update_color(param_00,param_01,param_02) +{ + level endon("special_op_terminated"); + level endon("wave_ended"); + level endon("update_chaos_timer"); + var_03 = param_01 - param_02; + if(var_03 > 0) + { + wait var_03; + } + + param_00 maps\_specialops::set_hud_yellow(); +} + +//Function Number: 92 +chaos_timer_update_sound(param_00,param_01) +{ + level endon("special_op_terminated"); + level endon("wave_ended"); + level endon("chaos_timer_reached_zero"); + level endon("update_chaos_timer"); + var_02 = param_00 - param_01; + if(var_02 >= 0) + { + if(var_02 > 0) + { + wait var_02; + } + + param_00 = param_00 - var_02; + self playlocalsound("so_countdown_beep"); + } + + for(;;) + { + var_03 = param_00 - int(param_00); + if(var_03 == 0) + { + var_03 = 1; + } + + if(param_00 - var_03 <= 0) + { + break; + } + + wait var_03; + param_00 = param_00 - var_03; + self playlocalsound("so_countdown_beep"); + } +} + +//Function Number: 93 +chaos_destroyelem() +{ + var_00 = []; + for(var_01 = 0;var_01 < self.children.size;var_01++) + { + if(isdefined(self.children[var_01])) + { + var_00[var_00.size] = self.children[var_01]; + } + } + + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + var_00[var_01] maps\_hud_util::setparent(maps\_hud_util::getparent()); + } + + if(self.elemtype == "bar" || self.elemtype == "bar_shader") + { + self.bar destroy(); + } + + self destroy(); +} + +//Function Number: 94 +showelem() +{ + if(!self.hidden) + { + return; + } + + self.hidden = 0; + if(self.elemtype == "bar" || self.elemtype == "bar_shader") + { + if(self.alpha != 0.5) + { + self.alpha = 0.5; + } + + self.bar.hidden = 0; + if(self.bar.alpha != 1) + { + self.bar.alpha = 1; + return; + } + + return; + } + + if(self.alpha != 1) + { + self.alpha = 1; + } +} + +//Function Number: 95 +hideelem() +{ + if(self.hidden) + { + return; + } + + self.hidden = 1; + if(self.alpha != 0) + { + self.alpha = 0; + } + + if(self.elemtype == "bar" || self.elemtype == "bar_shader") + { + self.bar.hidden = 1; + if(self.bar.alpha != 0) + { + self.bar.alpha = 0; + } + } +} + +//Function Number: 96 +chaos_updatebar(param_00,param_01) +{ + if(self.elemtype == "bar") + { + updatebarscale(param_00,param_01); + } +} + +//Function Number: 97 +updatebarscale(param_00,param_01) +{ + var_02 = int(self.width * param_00 + 0.5); + if(!var_02) + { + var_02 = 1; + } + + self.bar.frac = param_00; + self.bar setshader(self.bar.shader,var_02,self.height); + if(isdefined(param_01) && var_02 < self.width) + { + if(param_01 > 0) + { + self.bar scaleovertime(1 - param_00 / param_01,self.width,self.height); + } + else if(param_01 < 0) + { + self.bar scaleovertime(param_00 / -1 * param_01,1,self.height); + } + } + + self.bar.rateofchange = param_01; + self.bar.lastupdatetime = gettime(); +} + +//Function Number: 98 +createprimaryprogressbartext(param_00) +{ + if(!isdefined(param_00)) + { + param_00 = 0; + } + + var_01 = maps\_hud_util::createclientfontstring("hudbig",level.primaryprogressbarfontsize); + var_01.hidden = 0; + var_01 chaos_setpoint("CENTER",undefined,level.primaryprogressbartextx,level.primaryprogressbartexty - param_00); + var_01.sort = -1; + return var_01; +} + +//Function Number: 99 +createprimaryprogressbar(param_00) +{ + if(!isdefined(param_00)) + { + param_00 = 0; + } + + var_01 = chaos_createbar((1,1,1),level.primaryprogressbarwidth,level.primaryprogressbarheight); + var_01 chaos_setpoint("CENTER",undefined,level.primaryprogressbarx,level.primaryprogressbary - param_00); + return var_01; +} + +//Function Number: 100 +chaos_createbar(param_00,param_01,param_02,param_03) +{ + var_04 = newclienthudelem(self); + var_04.x = 0; + var_04.y = 0; + var_04.frac = 0; + var_04.color = param_00; + var_04.sort = -2; + var_04.shader = "progress_bar_fill"; + var_04 setshader("progress_bar_fill",param_01,param_02); + var_04.hidden = 0; + if(isdefined(param_03)) + { + var_04.flashfrac = param_03; + } + + var_05 = newclienthudelem(self); + var_05.elemtype = "bar"; + var_05.width = param_01; + var_05.height = param_02; + var_05.xoffset = 0; + var_05.yoffset = 0; + var_05.bar = var_04; + var_05.children = []; + var_05.sort = -3; + var_05.color = (0,0,0); + var_05.alpha = 0.5; + var_05.padding = 0; + var_05 maps\_hud_util::setparent(level.uiparent); + var_05 setshader("progress_bar_bg",param_01 + 4,param_02 + 4); + var_05.hidden = 0; + return var_05; +} + +//Function Number: 101 +chaos_setpoint(param_00,param_01,param_02,param_03,param_04) +{ + if(!isdefined(param_04)) + { + param_04 = 0; + } + + var_05 = maps\_hud_util::getparent(); + if(param_04) + { + self moveovertime(param_04); + } + + if(!isdefined(param_02)) + { + param_02 = 0; + } + + self.xoffset = param_02; + if(!isdefined(param_03)) + { + param_03 = 0; + } + + self.yoffset = param_03; + self.point = param_00; + self.alignx = "center"; + self.aligny = "middle"; + if(issubstr(param_00,"TOP")) + { + self.aligny = "top"; + } + + if(issubstr(param_00,"BOTTOM")) + { + self.aligny = "bottom"; + } + + if(issubstr(param_00,"LEFT")) + { + self.alignx = "left"; + } + + if(issubstr(param_00,"RIGHT")) + { + self.alignx = "right"; + } + + if(!isdefined(param_01)) + { + param_01 = param_00; + } + + self.relativepoint = param_01; + var_06 = "center_adjustable"; + var_07 = "middle"; + if(issubstr(param_01,"TOP")) + { + var_07 = "top_adjustable"; + } + + if(issubstr(param_01,"BOTTOM")) + { + var_07 = "bottom_adjustable"; + } + + if(issubstr(param_01,"LEFT")) + { + var_06 = "left_adjustable"; + } + + if(issubstr(param_01,"RIGHT")) + { + var_06 = "right_adjustable"; + } + + if(var_05 == level.uiparent) + { + self.horzalign = var_06; + self.vertalign = var_07; + } + else + { + self.horzalign = var_05.horzalign; + self.vertalign = var_05.vertalign; + } + + if(strip_suffix(var_06,"_adjustable") == var_05.alignx) + { + var_08 = 0; + var_09 = 0; + } + else if(var_08 == "center" || var_07.alignx == "center") + { + var_08 = int(var_07.width / 2); + if(var_07 == "left_adjustable" || var_06.alignx == "right") + { + var_09 = -1; + } + else + { + var_09 = 1; + } + } + else + { + var_08 = var_07.width; + if(var_07 == "left_adjustable") + { + var_09 = -1; + } + else + { + var_09 = 1; + } + } + + self.x = var_05.x + var_08 * var_09; + if(strip_suffix(var_07,"_adjustable") == var_05.aligny) + { + var_0A = 0; + var_0B = 0; + } + else if(var_09 == "middle" || var_07.aligny == "middle") + { + var_0A = int(var_07.height / 2); + if(var_08 == "top_adjustable" || var_06.aligny == "bottom") + { + var_0B = -1; + } + else + { + var_0B = 1; + } + } + else + { + var_0A = var_07.height; + if(var_08 == "top_adjustable") + { + var_0B = -1; + } + else + { + var_0B = 1; + } + } + + self.y = var_05.y + var_0A * var_0B; + self.x = self.x + self.xoffset; + self.y = self.y + self.yoffset; + switch(self.elemtype) + { + case "bar": + chaos_setpointbar(param_00,param_01,param_02,param_03); + break; + } + + maps\_hud_util::updatechildren(); +} + +//Function Number: 102 +chaos_setpointbar(param_00,param_01,param_02,param_03) +{ + self.bar.horzalign = self.horzalign; + self.bar.vertalign = self.vertalign; + self.bar.alignx = "left"; + self.bar.aligny = self.aligny; + self.bar.y = self.y; + if(self.alignx == "left") + { + self.bar.x = self.x; + } + else if(self.alignx == "right") + { + self.bar.x = self.x - self.width; + } + else + { + self.bar.x = self.x - int(self.width / 2); + } + + if(self.aligny == "top") + { + self.bar.y = self.y; + } + else if(self.aligny == "bottom") + { + self.bar.y = self.y; + } + + chaos_updatebar(self.bar.frac); +} + +//Function Number: 103 +strip_suffix(param_00,param_01) +{ + if(param_00.size <= param_01.size) + { + return param_00; + } + + if(getsubstr(param_00,param_00.size - param_01.size,param_00.size) == param_01) + { + return getsubstr(param_00,0,param_00.size - param_01.size); + } + + return param_00; +} + +//Function Number: 104 +destroyiconsondeath() +{ + self notify("destroyIconsOnDeath"); + self endon("destroyIconsOnDeath"); + self waittill("death"); + foreach(var_01 in self.crateworldicon) + { + var_01 destroy(); + } +} + +//Function Number: 105 +keeppositioned(param_00,param_01,param_02) +{ + self endon("death"); + param_00 endon("death"); + var_03 = param_00.origin; + for(;;) + { + if(var_03 != param_00.origin) + { + var_03 = param_00.origin; + self.x = var_03[0] + param_01[0]; + self.y = var_03[0] + param_01[0]; + self.z = var_03[0] + param_01[0]; + } + + wait 0.05; + } +} + +//Function Number: 106 +keepiconpositioned() +{ + self endon("kill_entity_headicon_thread"); + self endon("death"); + var_00 = self.origin; + for(;;) + { + if(var_00 != self.origin) + { + updateheadiconorigin(); + var_00 = self.origin; + } + + wait 0.05; + } +} + +//Function Number: 107 +destroyheadiconsondeath() +{ + self endon("kill_entity_headicon_thread"); + self waittill("death"); + if(!isdefined(self.entityheadicon)) + { + return; + } + + self.entityheadicon destroy(); +} + +//Function Number: 108 +updateheadiconorigin() +{ + self.entityheadicon.x = self.origin[0] + self.entityheadiconoffset[0]; + self.entityheadicon.y = self.origin[1] + self.entityheadiconoffset[1]; + self.entityheadicon.z = self.origin[2] + self.entityheadiconoffset[2]; +} + +//Function Number: 109 +perk_hud_popup_icon() +{ + self endon("death"); + self.perk_hud_popup_icon = spawnstruct(); + self.perk_hud_popup_icon.var_3FCA = -30; + if(issplitscreen()) + { + self.perk_hud_popup_icon.var_3FCB = 2 + self == level.player * 27; + } + else + { + self.perk_hud_popup_icon.var_3FCB = 86; + } + + self.perk_hud_popup_icon.var_3FCC = 28; + self.perk_hud_popup_icon.icon = chaos_special_item_hudelem(self.perk_hud_popup_icon.var_3FCA,self.perk_hud_popup_icon.var_3FCB); + self.perk_hud_popup_icon.icon.color = (1,1,1); + self.perk_hud_popup_icon.icon.alpha = 1; + self.perk_hud_popup_icon.icon.children = []; + self.perk_hud_popup_icon.icon maps\_hud_util::setparent(level.uiparent); + self.perk_hud_popup_icon.icon thread chaos_perk_icon_destroy_on_mode_end(); + for(;;) + { + self waittill("perk_pop_up",var_00); + if(isdefined(self.live_1_hud_icon.icon) && isdefined(self.live_2_hud_icon.icon) && isdefined(self.live_3_hud_icon.icon) && isdefined(self.live_4_hud_icon.icon) && isdefined(self.live_5_hud_icon.icon)) + { + if(!issplitscreen()) + { + self.live_1_hud_icon.icon.alpha = 0; + self.live_2_hud_icon.icon.alpha = 0; + self.live_3_hud_icon.icon.alpha = 0; + self.live_4_hud_icon.icon.alpha = 0; + self.live_5_hud_icon.icon.alpha = 0; + } + } + + var_01 = getperkname(var_00); + if(var_00 == "specialty_juiced") + { + var_02 = "chaos_specialty_juiced"; + } + else if(var_00 == "specialty_armorvest") + { + var_02 = "chaos_specialty_armorvest"; + } + else + { + var_02 = level.armory["airsupport"][var_00].icon; + } + + self.perk_hud_popup_icon.icon setshader(var_02,self.perk_hud_popup_icon.var_3FCC,self.perk_hud_popup_icon.var_3FCC); + self.perk_hud_popup_icon.icon.alpha = 0.85; + if(issplitscreen()) + { + self.perk_hud_popup_icon.icon maps\_hud_util::setpoint("LEFT","CENTER",self.perk_hud_popup_icon.var_3FCA - 150,self.perk_hud_popup_icon.var_3FCB + 80); + } + else + { + self.perk_hud_popup_icon.icon maps\_hud_util::setpoint("LEFT","CENTER",self.perk_hud_popup_icon.var_3FCA - 50,self.perk_hud_popup_icon.var_3FCB + 30); + } + + wait 0.2; + if(issplitscreen()) + { + self.perk_hud_popup_icon.icon setshader(var_02,self.perk_hud_popup_icon.var_3FCC * 2,self.perk_hud_popup_icon.var_3FCC * 2); + } + else + { + self.perk_hud_popup_icon.icon setshader(var_02,self.perk_hud_popup_icon.var_3FCC * 3,self.perk_hud_popup_icon.var_3FCC * 3); + } + + wait 0.45; + self.perk_hud_popup_icon.icon setshader(var_02,self.perk_hud_popup_icon.var_3FCC,self.perk_hud_popup_icon.var_3FCC); + if(issplitscreen()) + { + self.perk_hud_popup_icon.icon maps\_hud_util::setpoint("LEFT","BOTTOM LEFT",241 - self.num_perk_obtained * 30 + level.perk_offset + self != level.player * 100,-8,0.35); + } + else + { + self.perk_hud_popup_icon.icon maps\_hud_util::setpoint("LEFT","BOTTOM LEFT",241 - self.num_perk_obtained * 30 + level.perk_offset,-8,0.35); + } + + wait 0.35; + self.perk_hud_popup_icon.icon.alpha = 0; + if(self.num_perk_obtained > 1) + { + var_03 = "give_perk_" + self.num_perk_obtained; + self notify(var_03,var_00); + } + else + { + self notify("give_perk",var_00); + } + + level.player_currently_getting_perk = 0; + level notify("proceed_with_next_perk"); + if(!maps\_utility::is_player_down(self)) + { + update_lives_left_hud(self.laststand_info.type_getup_lives,1); + } + } +} + +//Function Number: 110 +live_1_hud_icon() +{ + self endon("death"); + self.live_1_hud_icon = spawnstruct(); + self.live_1_hud_icon.var_3FCA = -75; + if(issplitscreen()) + { + self.live_1_hud_icon.var_3FCB = 2 + self == level.player * 27; + } + else + { + self.live_1_hud_icon.var_3FCB = 86; + } + + self.live_1_hud_icon.var_3FCC = 28; + self.live_1_hud_icon.icon = chaos_special_item_hudelem(self.live_1_hud_icon.var_3FCA,self.live_1_hud_icon.var_3FCB); + self.live_1_hud_icon.icon.color = (1,1,1); + self.live_1_hud_icon.icon.alpha = 0; + self.live_1_hud_icon.icon.children = []; + self.live_1_hud_icon.icon maps\_hud_util::setparent(level.uiparent); + self.live_1_hud_icon.icon thread chaos_perk_icon_destroy_on_mode_end(); + self.live_1_hud_icon.icon setshader("specialty_self_revive",self.live_1_hud_icon.var_3FCC,self.live_1_hud_icon.var_3FCC); + self.live_1_hud_icon.icon maps\_hud_util::setpoint("LEFT","TOP",self.live_1_hud_icon.var_3FCA,self.live_1_hud_icon.var_3FCB - 55); +} + +//Function Number: 111 +live_2_hud_icon() +{ + self endon("death"); + self.live_2_hud_icon = spawnstruct(); + self.live_2_hud_icon.var_3FCA = -45; + if(issplitscreen()) + { + self.live_2_hud_icon.var_3FCB = 2 + self == level.player * 27; + } + else + { + self.live_2_hud_icon.var_3FCB = 86; + } + + self.live_2_hud_icon.var_3FCC = 28; + self.live_2_hud_icon.icon = chaos_special_item_hudelem(self.live_2_hud_icon.var_3FCA,self.live_2_hud_icon.var_3FCB); + self.live_2_hud_icon.icon.color = (1,1,1); + self.live_2_hud_icon.icon.alpha = 0; + self.live_2_hud_icon.icon.children = []; + self.live_2_hud_icon.icon maps\_hud_util::setparent(level.uiparent); + self.live_2_hud_icon.icon thread chaos_perk_icon_destroy_on_mode_end(); + self.live_2_hud_icon.icon setshader("specialty_self_revive",self.live_2_hud_icon.var_3FCC,self.live_2_hud_icon.var_3FCC); + self.live_2_hud_icon.icon maps\_hud_util::setpoint("LEFT","TOP",self.live_2_hud_icon.var_3FCA,self.live_2_hud_icon.var_3FCB - 55); +} + +//Function Number: 112 +live_3_hud_icon() +{ + self endon("death"); + self.live_3_hud_icon = spawnstruct(); + self.live_3_hud_icon.var_3FCA = -15; + if(issplitscreen()) + { + self.live_3_hud_icon.var_3FCB = 2 + self == level.player * 27; + } + else + { + self.live_3_hud_icon.var_3FCB = 86; + } + + self.live_3_hud_icon.var_3FCC = 28; + self.live_3_hud_icon.icon = chaos_special_item_hudelem(self.live_3_hud_icon.var_3FCA,self.live_3_hud_icon.var_3FCB); + self.live_3_hud_icon.icon.color = (1,1,1); + self.live_3_hud_icon.icon.alpha = 0; + self.live_3_hud_icon.icon.children = []; + self.live_3_hud_icon.icon maps\_hud_util::setparent(level.uiparent); + self.live_3_hud_icon.icon thread chaos_perk_icon_destroy_on_mode_end(); + self.live_3_hud_icon.icon setshader("specialty_self_revive",self.live_3_hud_icon.var_3FCC,self.live_3_hud_icon.var_3FCC); + self.live_3_hud_icon.icon maps\_hud_util::setpoint("LEFT","TOP",self.live_3_hud_icon.var_3FCA,self.live_3_hud_icon.var_3FCB - 55); +} + +//Function Number: 113 +live_4_hud_icon() +{ + self endon("death"); + self.live_4_hud_icon = spawnstruct(); + self.live_4_hud_icon.var_3FCA = 15; + if(issplitscreen()) + { + self.live_4_hud_icon.var_3FCB = 2 + self == level.player * 27; + } + else + { + self.live_4_hud_icon.var_3FCB = 86; + } + + self.live_4_hud_icon.var_3FCC = 28; + self.live_4_hud_icon.icon = chaos_special_item_hudelem(self.live_4_hud_icon.var_3FCA,self.live_4_hud_icon.var_3FCB); + self.live_4_hud_icon.icon.color = (1,1,1); + self.live_4_hud_icon.icon.alpha = 0; + self.live_4_hud_icon.icon.children = []; + self.live_4_hud_icon.icon maps\_hud_util::setparent(level.uiparent); + self.live_4_hud_icon.icon thread chaos_perk_icon_destroy_on_mode_end(); + self.live_4_hud_icon.icon setshader("specialty_self_revive",self.live_4_hud_icon.var_3FCC,self.live_4_hud_icon.var_3FCC); + self.live_4_hud_icon.icon maps\_hud_util::setpoint("LEFT","TOP",self.live_4_hud_icon.var_3FCA,self.live_4_hud_icon.var_3FCB - 55); +} + +//Function Number: 114 +live_5_hud_icon() +{ + self endon("death"); + self.live_5_hud_icon = spawnstruct(); + self.live_5_hud_icon.var_3FCA = 45; + if(issplitscreen()) + { + self.live_5_hud_icon.var_3FCB = 2 + self == level.player * 27; + } + else + { + self.live_5_hud_icon.var_3FCB = 86; + } + + self.live_5_hud_icon.var_3FCC = 28; + self.live_5_hud_icon.icon = chaos_special_item_hudelem(self.live_5_hud_icon.var_3FCA,self.live_5_hud_icon.var_3FCB); + self.live_5_hud_icon.icon.color = (1,1,1); + self.live_5_hud_icon.icon.alpha = 0; + self.live_5_hud_icon.icon.children = []; + self.live_5_hud_icon.icon maps\_hud_util::setparent(level.uiparent); + self.live_5_hud_icon.icon thread chaos_perk_icon_destroy_on_mode_end(); + self.live_5_hud_icon.icon setshader("specialty_self_revive",self.live_5_hud_icon.var_3FCC,self.live_5_hud_icon.var_3FCC); + self.live_5_hud_icon.icon maps\_hud_util::setpoint("LEFT","TOP",self.live_5_hud_icon.var_3FCA,self.live_5_hud_icon.var_3FCB - 55); +} + +//Function Number: 115 +hud_weapon_icon() +{ + self endon("death"); + self.hud_weapon_icon = spawnstruct(); + self.hud_weapon_icon.var_3FCA = 0; + if(issplitscreen()) + { + self.hud_weapon_icon.var_3FCB = -122 + self == level.player * 27; + } + else + { + self.hud_weapon_icon.var_3FCB = -14; + } + + self.hud_weapon_icon.var_3FCC = 28; + self.hud_weapon_icon.icon = chaos_special_item_hudelem(self.hud_weapon_icon.var_3FCA,self.hud_weapon_icon.var_3FCB); + self.hud_weapon_icon.icon.color = (1,1,1); + self.hud_weapon_icon.icon.alpha = 0; + self.hud_weapon_icon.icon thread chaos_perk_icon_destroy_on_mode_end(); + for(;;) + { + self waittill("weapon_icon_popup",var_00); + if(issubstr(var_00,"fmg9") || issubstr(var_00,"m9") || issubstr(var_00,"glock")) + { + self.hud_weapon_icon.icon setshader(var_00,64,64); + } + else + { + self.hud_weapon_icon.icon setshader(var_00,128,64); + } + + self.hud_weapon_icon.icon.alpha = 0.85; + thread weapon_icon_fadeaway(); + } +} + +//Function Number: 116 +weapon_icon_fadeaway() +{ + self notify("end_on_weapon_icon_fadeaway"); + self endon("end_on_weapon_icon_fadeaway"); + wait 0.05; + self.hud_weapon_icon.icon fadeovertime(0.05); + self.hud_weapon_icon.icon.alpha = 0; +} + +//Function Number: 117 +perk_hud_2() +{ + self endon("death"); + self.perk_icon_hud_2 = spawnstruct(); + self.perk_icon_hud_2.var_3FCA = -168 + level.perk_offset; + if(issplitscreen()) + { + self.perk_icon_hud_2.var_3FCB = 112 + self == level.player * 27; + } + else + { + self.perk_icon_hud_2.var_3FCB = 196; + } + + self.perk_icon_hud_2.var_3FCC = 28; + self.perk_icon_hud_2.icon = chaos_special_item_hudelem(self.perk_icon_hud_2.var_3FCA,self.perk_icon_hud_2.var_3FCB); + self.perk_icon_hud_2.icon.color = (1,1,1); + self.perk_icon_hud_2.icon.alpha = 0; + self.perk_icon_hud_2.icon thread chaos_perk_icon_destroy_on_mode_end(); + for(;;) + { + self waittill("give_perk_2",var_00); + if(var_00 == "specialty_juiced") + { + var_01 = "chaos_specialty_juiced"; + } + else if(var_00 == "specialty_armorvest") + { + var_01 = "chaos_specialty_armorvest"; + } + else + { + var_01 = level.armory["airsupport"][var_00].icon; + } + + self.perk_icon_hud_2.icon setshader(var_01,self.perk_icon_hud_2.var_3FCC,self.perk_icon_hud_2.var_3FCC); + self.perk_icon_hud_2.icon.alpha = 0.85; + } +} + +//Function Number: 118 +perk_hud_3() +{ + self endon("death"); + self.perk_icon_hud_3 = spawnstruct(); + self.perk_icon_hud_3.var_3FCA = -198 + level.perk_offset; + if(issplitscreen()) + { + self.perk_icon_hud_3.var_3FCB = 112 + self == level.player * 27; + } + else + { + self.perk_icon_hud_3.var_3FCB = 196; + } + + self.perk_icon_hud_3.var_3FCC = 28; + self.perk_icon_hud_3.icon = chaos_special_item_hudelem(self.perk_icon_hud_3.var_3FCA,self.perk_icon_hud_3.var_3FCB); + self.perk_icon_hud_3.icon.color = (1,1,1); + self.perk_icon_hud_3.icon.alpha = 0; + self.perk_icon_hud_3.icon thread chaos_perk_icon_destroy_on_mode_end(); + for(;;) + { + self waittill("give_perk_3",var_00); + if(var_00 == "specialty_juiced") + { + var_01 = "chaos_specialty_juiced"; + } + else if(var_00 == "specialty_armorvest") + { + var_01 = "chaos_specialty_armorvest"; + } + else + { + var_01 = level.armory["airsupport"][var_00].icon; + } + + self.perk_icon_hud_3.icon setshader(var_01,self.perk_icon_hud_3.var_3FCC,self.perk_icon_hud_3.var_3FCC); + self.perk_icon_hud_3.icon.alpha = 0.85; + } +} + +//Function Number: 119 +perk_hud_4() +{ + self endon("death"); + self.perk_icon_hud_4 = spawnstruct(); + self.perk_icon_hud_4.var_3FCA = -228 + level.perk_offset; + if(issplitscreen()) + { + self.perk_icon_hud_4.var_3FCB = 112 + self == level.player * 27; + } + else + { + self.perk_icon_hud_4.var_3FCB = 196; + } + + self.perk_icon_hud_4.var_3FCC = 28; + self.perk_icon_hud_4.icon = chaos_special_item_hudelem(self.perk_icon_hud_4.var_3FCA,self.perk_icon_hud_4.var_3FCB); + self.perk_icon_hud_4.icon.color = (1,1,1); + self.perk_icon_hud_4.icon.alpha = 0; + self.perk_icon_hud_4.icon thread chaos_perk_icon_destroy_on_mode_end(); + for(;;) + { + self waittill("give_perk_4",var_00); + if(var_00 == "specialty_juiced") + { + var_01 = "chaos_specialty_juiced"; + } + else if(var_00 == "specialty_armorvest") + { + var_01 = "chaos_specialty_armorvest"; + } + else + { + var_01 = level.armory["airsupport"][var_00].icon; + } + + self.perk_icon_hud_4.icon setshader(var_01,self.perk_icon_hud_4.var_3FCC,self.perk_icon_hud_4.var_3FCC); + self.perk_icon_hud_4.icon.alpha = 0.85; + } +} + +//Function Number: 120 +perk_hud_5() +{ + self endon("death"); + self.perk_icon_hud_5 = spawnstruct(); + self.perk_icon_hud_5.var_3FCA = -258 + level.perk_offset; + if(issplitscreen()) + { + self.perk_icon_hud_5.var_3FCB = 112 + self == level.player * 27; + } + else + { + self.perk_icon_hud_5.var_3FCB = 196; + } + + self.perk_icon_hud_5.var_3FCC = 28; + self.perk_icon_hud_5.icon = chaos_special_item_hudelem(self.perk_icon_hud_5.var_3FCA,self.perk_icon_hud_5.var_3FCB); + self.perk_icon_hud_5.icon.color = (1,1,1); + self.perk_icon_hud_5.icon.alpha = 0; + self.perk_icon_hud_5.icon thread chaos_perk_icon_destroy_on_mode_end(); + for(;;) + { + self waittill("give_perk_5",var_00); + if(var_00 == "specialty_juiced") + { + var_01 = "chaos_specialty_juiced"; + } + else if(var_00 == "specialty_armorvest") + { + var_01 = "chaos_specialty_armorvest"; + } + else + { + var_01 = level.armory["airsupport"][var_00].icon; + } + + self.perk_icon_hud_5.icon setshader(var_01,self.perk_icon_hud_5.var_3FCC,self.perk_icon_hud_5.var_3FCC); + self.perk_icon_hud_5.icon.alpha = 0.85; + } +} + +//Function Number: 121 +perk_hud_6() +{ + self endon("death"); + self.perk_icon_hud_6 = spawnstruct(); + self.perk_icon_hud_6.var_3FCA = -288 + level.perk_offset; + if(issplitscreen()) + { + self.perk_icon_hud_6.var_3FCB = 112 + self == level.player * 27; + } + else + { + self.perk_icon_hud_6.var_3FCB = 196; + } + + self.perk_icon_hud_6.var_3FCC = 28; + self.perk_icon_hud_6.icon = chaos_special_item_hudelem(self.perk_icon_hud_6.var_3FCA,self.perk_icon_hud_6.var_3FCB); + self.perk_icon_hud_6.icon.color = (1,1,1); + self.perk_icon_hud_6.icon.alpha = 0; + self.perk_icon_hud_6.icon thread chaos_perk_icon_destroy_on_mode_end(); + for(;;) + { + self waittill("give_perk_6",var_00); + if(var_00 == "specialty_juiced") + { + var_01 = "chaos_specialty_juiced"; + } + else if(var_00 == "specialty_armorvest") + { + var_01 = "chaos_specialty_armorvest"; + } + else + { + var_01 = level.armory["airsupport"][var_00].icon; + } + + self.perk_icon_hud_6.icon setshader(var_01,self.perk_icon_hud_6.var_3FCC,self.perk_icon_hud_6.var_3FCC); + self.perk_icon_hud_6.icon.alpha = 0.85; + } +} + +//Function Number: 122 +perk_hud_7() +{ + self endon("death"); + self.perk_icon_hud_7 = spawnstruct(); + self.perk_icon_hud_7.var_3FCA = -318 + level.perk_offset; + if(issplitscreen()) + { + self.perk_icon_hud_7.var_3FCB = 112 + self == level.player * 27; + } + else + { + self.perk_icon_hud_7.var_3FCB = 196; + } + + self.perk_icon_hud_7.var_3FCC = 28; + self.perk_icon_hud_7.icon = chaos_special_item_hudelem(self.perk_icon_hud_7.var_3FCA,self.perk_icon_hud_7.var_3FCB); + self.perk_icon_hud_7.icon.color = (1,1,1); + self.perk_icon_hud_7.icon.alpha = 0; + self.perk_icon_hud_7.icon thread chaos_perk_icon_destroy_on_mode_end(); + for(;;) + { + self waittill("give_perk_7",var_00); + if(var_00 == "specialty_juiced") + { + var_01 = "chaos_specialty_juiced"; + } + else if(var_00 == "specialty_armorvest") + { + var_01 = "chaos_specialty_armorvest"; + } + else + { + var_01 = level.armory["airsupport"][var_00].icon; + } + + self.perk_icon_hud_7.icon setshader(var_01,self.perk_icon_hud_7.var_3FCC,self.perk_icon_hud_7.var_3FCC); + self.perk_icon_hud_7.icon.alpha = 0.85; + } +} + +//Function Number: 123 +chaos_perk_icon_destroy_on_mode_end() +{ + level waittill("special_op_terminated"); + self destroy(); +} + +//Function Number: 124 +chaos_special_item_hudelem(param_00,param_01) +{ + var_02 = newclienthudelem(self); + var_02.hidden = 0; + var_02.elemtype = "icon"; + var_02.hidewheninmenu = 1; + var_02.archived = 0; + var_02.x = param_00; + var_02.y = param_01; + var_02.alignx = "center"; + var_02.aligny = "middle"; + var_02.horzalign = "center"; + var_02.vertalign = "middle"; + return var_02; +} + +//Function Number: 125 +createchaosscorepopup() +{ + var_00 = newclienthudelem(self); + var_00.children = []; + var_00.horzalign = "center"; + var_00.vertalign = "middle"; + var_00.alignx = "center"; + var_00.aligny = "middle"; + if(issplitscreen()) + { + var_00.x = 60; + var_00.y = 30; + } + else + { + var_00.x = 50; + var_00.y = 0; + } + + var_00.font = "hudbig"; + var_00.fontscale = 0.8; + var_00.archived = 0; + var_00.color = (1,1,0.8); + var_00.sort = 10000; + var_00.elemtype = "msgText"; + var_00 chaosfontpulseinit(3); + return var_00; +} + +//Function Number: 126 +chaosscorepopup(param_00,param_01,param_02) +{ + thread chaosscorepopupfinalize(param_00,param_01,param_02); + thread chaosscorepopupterminate(); +} + +//Function Number: 127 +chaosscorepopupfinalize(param_00,param_01,param_02) +{ + self endon("disconnect"); + self endon("joined_team"); + self endon("joined_spectators"); + self notify("chaosScorePopup"); + self endon("chaosScorePopup"); + wait 0.05; + if(!isdefined(param_01)) + { + param_01 = (1,1,0.5); + } + + if(!isdefined(param_02)) + { + param_02 = 0; + } + + if(!isdefined(self)) + { + return; + } + + self.hud_chaosscorepopup.color = param_01; + self.hud_chaosscorepopup.glowcolor = param_01; + self.hud_chaosscorepopup.glowalpha = param_02; + self.hud_chaosscorepopup settext(param_00); + self.hud_chaosscorepopup.alpha = 0.85; + wait 1; + if(!isdefined(self)) + { + return; + } + + self.hud_chaosscorepopup fadeovertime(0.75); + self.hud_chaosscorepopup.alpha = 0; + self notify("ScorePopComplete"); +} + +//Function Number: 128 +chaosscorepopupterminate() +{ + self endon("ScorePopComplete"); + common_scripts\utility::waittill_any("joined_team","joined_spectators"); + self.hud_chaosscorepopup fadeovertime(0.05); + self.hud_chaosscorepopup.alpha = 0; +} + +//Function Number: 129 +createchaoseventpopup() +{ + var_00 = newclienthudelem(self); + var_00.children = []; + var_00.horzalign = "center"; + var_00.vertalign = "middle"; + var_00.alignx = "center"; + var_00.aligny = "middle"; + var_00.x = 55; + if(issplitscreen()) + { + var_00.y = -35; + } + else + { + var_00.y = -35; + } + + var_00.font = "hudbig"; + var_00.fontscale = 0.65; + var_00.archived = 0; + var_00.color = (1,1,0.8); + var_00.sort = 10000; + var_00.elemtype = "msgText"; + var_00 chaosfontpulseinit(3); + return var_00; +} + +//Function Number: 130 +chaosfontpulseinit(param_00) +{ + self.basefontscale = self.fontscale; + if(isdefined(param_00)) + { + self.maxfontscale = min(param_00,6.3); + } + else + { + self.maxfontscale = min(self.fontscale * 2,6.3); + } + + self.inframes = 2; + self.outframes = 4; +} + +//Function Number: 131 +chaoseventpopup(param_00,param_01,param_02,param_03) +{ + thread chaoseventpopupfinalize(param_00,param_01,param_02,param_03); + thread chaoseventpopupterminate(); +} + +//Function Number: 132 +chaoseventpopupfinalize(param_00,param_01,param_02,param_03) +{ + self endon("disconnect"); + self endon("joined_team"); + self endon("joined_spectators"); + self notify("chaosEventPopup"); + self endon("chaosEventPopup"); + wait 0.05; + if(!isdefined(param_01)) + { + param_01 = (1,1,0.5); + } + + if(!isdefined(param_02)) + { + param_02 = 0; + } + + if(!isdefined(self)) + { + return; + } + + self.hud_chaoseventpopup.color = param_01; + self.hud_chaoseventpopup.glowcolor = param_01; + self.hud_chaoseventpopup.glowalpha = param_02; + self.hud_chaoseventpopup settext(param_00); + self.hud_chaoseventpopup.alpha = 0.85; + if(!isdefined(param_03)) + { + param_03 = 0.05; + } + + wait param_03; + if(!isdefined(self)) + { + return; + } + + self.hud_chaoseventpopup fadeovertime(0.05); + self.hud_chaoseventpopup.alpha = 0; + self notify("PopComplete"); + if(isdefined(self.placingsentry)) + { + self notify("sentry_notification",&"SENTRY_PLACE"); + } +} + +//Function Number: 133 +chaoseventpopupterminate() +{ + self endon("PopComplete"); + common_scripts\utility::waittill_any("joined_team","joined_spectators"); + self.hud_chaoseventpopup fadeovertime(0.05); + self.hud_chaoseventpopup.alpha = 0; +} + +//Function Number: 134 +chaos_combo_splash(param_00,param_01) +{ + var_02 = spawnstruct(); + var_02.title = param_00; + var_02.duration = 1.5; + thread chaos_splash_radio(param_01); + player_combo_splash(var_02); +} + +//Function Number: 135 +chaos_splash_radio(param_00) +{ + if(!isdefined(param_00)) + { + return; + } + + var_01 = undefined; + switch(param_00) + { + case "cm_bp_kills_explosion": + var_01 = "chaos_action_explosion"; + break; + + case "cm_bp_kills_3longshot": + var_01 = "chaos_action_3longshot"; + break; + + case "cm_bp_kills_3headshot": + var_01 = "chaos_action_3headshot"; + break; + + case "cm_bp_kills_3knife": + var_01 = "chaos_action_3knife"; + break; + + case "cm_bp_kills_triple": + var_01 = "chaos_action_triple"; + break; + + case "cm_bp_kills_quad": + var_01 = "chaos_action_quad"; + break; + + case "cm_bp_kills_multiple": + var_01 = "chaos_action_multiple"; + break; + + default: + break; + } + + if(isdefined(var_01)) + { + thread radio_dialogue_to_player(self,var_01,1); + } +} + +//Function Number: 136 +player_combo_splash(param_00) +{ + if(isdefined(self.doingnotify) && self.doingnotify) + { + while(self.doingnotify) + { + wait 0.05; + } + } + + if(!isdefined(param_00.duration)) + { + param_00.duration = 1.5; + } + + param_00.title_glowcolor = (0,0,0); + param_00.title_color = (0.95,0.95,0); + param_00.type = "wave"; + param_00.title_font = "hudbig"; + param_00.playsoundlocally = 1; + param_00.zoomin = 1; + param_00.var_3E34 = 1; + param_00.fadein = 1; + param_00.fadeout = 1; + if(issplitscreen()) + { + param_00.title_basefontscale = 1; + param_00.desc_basefontscale = 1.2; + thread turn_lives_hud_back_after_splash(param_00.duration); + } + else + { + param_00.title_basefontscale = 1.1; + param_00.desc_basefontscale = 1.2; + } + + maps\_so_survival_code::splash_notify_message(param_00); +} + +//Function Number: 137 +turn_lives_hud_back_after_splash(param_00) +{ + level endon("special_op_terminated"); + self notify("stop_turn_lives_back_on_wait"); + self endon("stop_turn_lives_back_on_wait"); + if(isdefined(self.live_1_hud_icon.icon) && isdefined(self.live_2_hud_icon.icon) && isdefined(self.live_3_hud_icon.icon) && isdefined(self.live_4_hud_icon.icon) && isdefined(self.live_5_hud_icon.icon)) + { + self.live_1_hud_icon.icon.alpha = 0; + self.live_2_hud_icon.icon.alpha = 0; + self.live_3_hud_icon.icon.alpha = 0; + self.live_4_hud_icon.icon.alpha = 0; + self.live_5_hud_icon.icon.alpha = 0; + } + + wait param_00 + 0.5; + update_lives_left_hud(self.laststand_info.type_getup_lives); +} + +//Function Number: 138 +chaos_killstreak_autosentry_main(param_00) +{ + lib_0616::givesentry("sentry_minigun"); + thread chaos_sentry_cancel_notify(); + self notifyonplayercommand("controller_sentry_cancel","+actionslot 4"); + self notifyonplayercommand("controller_sentry_cancel","weapnext"); + chaos_waittill_any("sentry_placement_finished","sentry_placement_canceled"); + chaos_post_killstreak_weapon_switchback(); + return 1; +} + +//Function Number: 139 +chaos_waittill_any(param_00,param_01) +{ + if(isdefined(param_01)) + { + self endon(param_01); + } + + self waittill(param_00); + chaos_score_event_raise("placed_sentry"); +} + +//Function Number: 140 +chaos_sentry_cancel_notify() +{ + self endon("sentry_placement_canceled"); + self endon("sentry_placement_finished"); + self waittill("controller_sentry_cancel"); + if(!isdefined(self.carrying_pickedup_sentry) || !self.carrying_pickedup_sentry) + { + self notify("sentry_placement_canceled"); + } +} + +//Function Number: 141 +chaos_post_killstreak_weapon_switchback() +{ + if(maps\_utility::is_player_down(self)) + { + return; + } + + if(isdefined(self.ks.lastweaponused)) + { + if(self.ks.lastweaponused == "none") + { + var_00 = self getweaponslistprimaries(); + self switchtoweapon(var_00[0]); + return; + } + + self switchtoweapon(self.ks.lastweaponused); + } +} + +//Function Number: 142 +sp_airdrop_drop_the_crate(param_00,param_01,param_02,param_03,param_04,param_05) +{ + var_06 = []; + self.owner endon("disconnect"); + var_06 = sp_create_airdrop_crate(self.owner,param_00,param_05); + var_06 linkto(self,"tag_ground",(32,0,5),(0,0,0)); + var_06.angles = (0,0,0); + var_06 show(); + var_07 = self.veh_speed; + self waittill("drop_crate"); + var_06 unlink(); + var_06 physicslaunchserver((0,0,0),(randomint(5),randomint(5),randomint(5))); + var_06 thread sp_airdrop_crate_physics_waiter(); + var_06 thread sp_airdrop_crate_damage_enemies_on_fall(param_01,64); +} + +//Function Number: 143 +sp_create_airdrop_crate(param_00,param_01,param_02) +{ + var_03 = spawn("script_model",param_02); + var_03.inuse = 0; + var_03.curprogress = 0; + var_03.usetime = 0; + var_03.userate = 0; + if(isdefined(param_00)) + { + var_03.owner = param_00; + } + else + { + var_03.owner = undefined; + } + + var_03.cratetype = param_01; + var_03.targetname = "care_package"; + var_03 setmodel("com_plasticcase_taskforce141"); + var_03 sp_airdrop_crate_attach_collision(); + var_03.collision thread sp_airdrop_crate_unlink_collision(var_03); + var_03.basemodel = spawn("script_model",param_02); + var_03.basemodel setmodel("com_plasticcase_friendly"); + var_03.basemodel common_scripts\utility::delaycall(0.25,::linkto,var_03,"tag_origin",(0,0,0),(0,0,0)); + var_03 thread sp_airdrop_crate_delete_on_owner_death(param_00); + level.numairdropcrates++; + return var_03; +} + +//Function Number: 144 +sp_delete_airdrop_crate() +{ + if(isdefined(level.crates_on_ground) && level.crates_on_ground.size) + { + level.crates_on_ground = common_scripts\utility::array_remove(level.crates_on_ground,self); + level.numairdropcrates--; + } + + if(isdefined(self)) + { + if(isdefined(self.care_package_trigger)) + { + self.care_package_trigger delete(); + } + + self.basemodel delete(); + self delete(); + } +} + +//Function Number: 145 +sp_airdrop_setup_crate_collisions() +{ + var_00 = getentarray("airdrop_crate_collision","targetname"); + foreach(var_02 in var_00) + { + var_02 connectpaths(); + var_02 notsolid(); + } + + level.airdropcratecollisionboxes = var_00; +} + +//Function Number: 146 +sp_airdrop_get_free_sbmodel_collision() +{ + var_00 = undefined; + foreach(var_02 in level.airdropcratecollisionboxes) + { + if(!isdefined(var_02.isinuse)) + { + var_00 = var_02; + break; + } + } + + return var_00; +} + +//Function Number: 147 +sp_airdrop_crate_attach_collision() +{ + var_00 = sp_airdrop_get_free_sbmodel_collision(); + var_00.origin = self.origin; + var_00.angles = self.angles; + var_00 solid(); + var_00 linkto(self); + var_00.isinuse = 1; + self.collision = var_00; +} + +//Function Number: 148 +sp_airdrop_crate_damage_enemies_on_fall(param_00,param_01) +{ + while(isdefined(self) && distancesquared(self.origin,param_00) > 1024) + { + wait 0.05; + } + + if(!isdefined(self)) + { + return; + } + + var_02 = getaispeciesarray("axis","all"); + foreach(var_04 in var_02) + { + if(distancesquared(self.origin,var_04.origin) < param_01 * param_01) + { + if(isdefined(self.owner)) + { + var_04 dodamage(300,self.origin,self.owner,self); + continue; + } + + var_04 dodamage(300,self.origin); + } + } +} + +//Function Number: 149 +sp_airdrop_crate_delete_on_owner_death(param_00) +{ + param_00 waittill("death"); + sp_delete_airdrop_crate(); +} + +//Function Number: 150 +sp_airdrop_crate_delete_when_owner_pickups_one_crate() +{ + self endon("death"); + level waittill("delete_all_crates"); + sp_delete_airdrop_crate(); +} + +//Function Number: 151 +sp_airdrop_crate_unlink_collision(param_00) +{ + param_00 waittill("death"); + self unlink(); + self connectpaths(); + self notsolid(); + self.isinuse = undefined; +} + +//Function Number: 152 +sp_airdrop_crate_physics_waiter() +{ + self waittill("physics_finished"); + self.crate_num = gettime(); + if(!isdefined(level.crates_on_ground)) + { + level.crates_on_ground = []; + } + + level.crates_on_ground[level.crates_on_ground.size] = self; + if(level.crates_on_ground.size > 4) + { + level.crates_on_ground[0] sp_delete_airdrop_crate(); + level.crates_on_ground[1] sp_delete_airdrop_crate(); + } + + thread sp_airdrop_crate_think(); + level thread sp_airdrop_crate_timeout(self,self.owner); +} + +//Function Number: 153 +sp_airdrop_crate_timeout(param_00,param_01) +{ + param_00 endon("death"); + var_02 = 120; + if(isdefined(level.airdropcratetimeout)) + { + var_02 = level.airdropcratetimeout; + } + + if(var_02 <= 0) + { + return; + } + + wait var_02; + while(param_00.curprogress != 0) + { + wait 1; + } + + param_00 sp_delete_airdrop_crate(); +} + +//Function Number: 154 +sp_airdrop_crate_think() +{ + self endon("death"); + sp_airdrop_crate_setup_for_use(); + var_00 = spawn("trigger_radius",self.origin,0,50,50); + var_00 enablelinkto(); + var_00 linkto(self); + var_00.radius = self; + var_00.owner = self; + self.care_package_trigger = var_00; + var_00 thread cratetriggerthink(self.killstreakinfo.cratehudstring); + thread sp_airdrop_teammate_capture_think(); + if(isdefined(level.sp_airdrop_crate_custom_thread)) + { + self thread [[ level.sp_airdrop_crate_custom_thread ]](); + } + + for(;;) + { + self waittill("captured",var_01); + if(isdefined(self.owner) && var_01 != self.owner) + { + thread sp_airdrop_crate_hijack_notify(var_01); + } + + if(isplayer(var_01)) + { + var_02 = var_01; + var_02 playlocalsound("cm_use_carepackage"); + if(isdefined(self.killstreakinfo.crateopenfunc)) + { + if(issubstr(self.killstreakinfo.streaktype,"specialty_")) + { + var_02 thread chaos_give_perk(self.killstreakinfo.streaktype); + } + else + { + var_02 thread [[ self.killstreakinfo.crateopenfunc ]](); + } + } + else + { + var_02 thread maps\_sp_killstreaks::give_sp_killstreak(self.cratetype); + } + } + + sp_delete_airdrop_crate(); + } +} + +//Function Number: 155 +cratetriggerthink(param_00) +{ + level endon("special_op_terminated"); + self.owner endon("death"); + var_01 = &"SO_SURVIVAL_CHAOS_BONUS_SENTRY"; + var_02 = &"SO_SURVIVAL_CHAOS_BONUS_FREEZE_METER"; + for(;;) + { + self waittill("trigger",var_03); + var_03 chaoseventpopup(param_00,(1,1,1)); + if(!isplayer(var_03) || var_03 maps\_sp_killstreaks::isusingremote() || !var_03 usebuttonpressed()) + { + continue; + } + + if(isdefined(var_03.justopencrate) && var_03.justopencrate == 1) + { + continue; + } + + if(isplayer(var_03)) + { + if(param_00 == var_01) + { + if(var_03 hasweapon("chaos_freeze_meter")) + { + var_03 takeweapon("chaos_freeze_meter"); + level notify("stop_wait_for_meter_freeze_activation"); + } + } + + if(param_00 == var_02) + { + if(var_03 hasweapon("chaos_freeze_meter")) + { + level notify("stop_wait_for_meter_freeze_activation"); + } + } + + self.owner notify("captured",var_03); + chaos_score_event_raise("care_package"); + level notify("crate_captured"); + var_03.justopencrate = 1; + var_03 thread resetjustopencrateflag(); + break; + } + } +} + +//Function Number: 156 +resetjustopencrateflag() +{ + level endon("special_op_terminated"); + wait 1; + self.justopencrate = 0; +} + +//Function Number: 157 +sp_airdrop_crate_hijack_notify(param_00) +{ + self notify("hijacked",param_00); + if(!isplayer(self.owner)) + { + return; + } + + if(param_00.team == self.owner.team) + { + if(isdefined(level.sp_airdrop_crate_friendly_hijack_thread)) + { + self.owner thread [[ level.sp_airdrop_crate_friendly_hijack_thread ]](param_00); + return; + } + + return; + } + + if(isdefined(level.sp_airdrop_crate_enemy_hijack_thread)) + { + self.owner thread [[ level.sp_airdrop_crate_enemy_hijack_thread ]](param_00); + } +} + +//Function Number: 158 +sp_airdrop_crate_setup_for_use() +{ + self.collision disconnectpaths(); + var_00 = maps\_sp_killstreaks::get_sp_killstreak_info(self.cratetype); + self.killstreakinfo = var_00; + sp_crate_world_icon(var_00.crateicon,(0,0,12),256,256); + self setcursorhint("HINT_NOICON"); + self makeusable(); + if(isdefined(level.airdropcrateunstuck) && level.airdropcrateunstuck) + { + thread sp_airdrop_unstuck_think(); + } +} + +//Function Number: 159 +sp_airdrop_unstuck_think() +{ + self endon("death"); + self endon("captured"); + wait 2; + var_00 = undefined; + var_01 = []; + foreach(var_03 in level.players) + { + if(isdefined(self.collision) && self.collision istouching(var_03)) + { + if(isdefined(self.owner) && self.owner == var_03) + { + var_00 = var_03; + continue; + } + + var_01[var_01.size] = var_03; + } + } + + if(isdefined(var_00)) + { + self notify("trigger",var_00); + return; + } + + if(var_01.size > 0) + { + self notify("trigger",var_01[0]); + } +} + +//Function Number: 160 +sp_airdrop_get_crate_obj_id() +{ + var_00 = undefined; + if(!isdefined(level.lastusedkillstreakcrateobjid)) + { + var_00 = level.startingkillstreakcrateobjid; + } + else + { + var_00 = level.lastusedkillstreakcrateobjid + 1; + } + + if(var_00 > level.startingkillstreakcrateobjid + 7) + { + var_00 = level.startingkillstreakcrateobjid; + } + + level.lastusedkillstreakcrateobjid = var_00; + return var_00; +} + +//Function Number: 161 +sp_crate_world_icon(param_00,param_01,param_02,param_03) +{ + self.crateworldicon = []; + foreach(var_05 in level.players) + { + var_06 = var_05 chaos_special_item_hudelem(20,20); + var_06.children = []; + var_06 maps\_hud_util::setparent(level.uiparent); + var_06.archived = 1; + var_06.x = self.origin[0] + param_01[0]; + var_06.y = self.origin[1] + param_01[1]; + var_06.z = self.origin[2] + param_01[2]; + var_06.alpha = 1; + var_06 setshader(param_00,param_02,param_03); + var_06 setwaypoint(0,1,0); + var_06 thread keeppositioned(self,param_01,param_00); + self.crateworldicon[self.crateworldicon.size] = var_06; + } + + thread destroyiconsondeath(); +} + +//Function Number: 162 +sp_airdrop_teammate_capture_think() +{ + while(isdefined(self)) + { + self waittill("trigger",var_00); + if(isdefined(self.owner) && var_00 == self.owner) + { + continue; + } + + if(!sp_use_hold_think(var_00)) + { + continue; + } + + self notify("captured",var_00); + level notify("crate_captured"); + } +} + +//Function Number: 163 +sp_use_hold_think(param_00,param_01) +{ + param_00 freezecontrols(1); + param_00 common_scripts\utility::_disableweapon(); + self.curprogress = 0; + self.inuse = 1; + self.userate = 0; + if(isdefined(level.airdropcrateusetime)) + { + self.usetime = level.airdropcrateusetime; + } + else if(isdefined(param_01)) + { + self.usetime = param_01; + } + else + { + self.usetime = 3000; + } + + if(self.usetime > 0) + { + param_00 thread sp_personal_use_bar(self); + var_02 = sp_use_hold_think_loop(param_00); + } + else + { + var_02 = 1; + } + + if(isalive(param_00)) + { + param_00 common_scripts\utility::_enableweapon(); + param_00 freezecontrols(0); + } + + if(!isdefined(self)) + { + return 0; + } + + self.inuse = 0; + self.curprogress = 0; + return var_02; +} + +//Function Number: 164 +sp_use_hold_think_loop(param_00) +{ + while(isdefined(self) && isalive(param_00) && param_00 usebuttonpressed() && self.curprogress < self.usetime) + { + self.curprogress = self.curprogress + 50 * self.userate; + if(isdefined(self.objectivescaler)) + { + self.userate = 1 * self.objectivescaler; + } + else + { + self.userate = 1; + } + + if(self.curprogress >= self.usetime) + { + return isalive(param_00); + } + + wait 0.05; + } + + return 0; +} + +//Function Number: 165 +sp_personal_use_bar(param_00) +{ + self endon("disconnect"); + var_01 = createprimaryprogressbar(-25); + var_02 = createprimaryprogressbartext(-25); + var_02 settext(&"SP_KILLSTREAKS_CAPTURING_CRATE"); + var_03 = -1; + while(isalive(self) && isdefined(param_00) && param_00.inuse) + { + if(var_03 != param_00.userate) + { + if(param_00.curprogress > param_00.usetime) + { + param_00.curprogress = param_00.usetime; + } + + var_01 chaos_updatebar(param_00.curprogress / param_00.usetime,1000 / param_00.usetime * param_00.userate); + if(!param_00.userate) + { + var_01 hideelem(); + var_02 hideelem(); + } + else + { + var_01 showelem(); + var_02 showelem(); + } + } + + var_03 = param_00.userate; + wait 0.05; + } + + var_01 chaos_destroyelem(); + var_02 chaos_destroyelem(); +} + +//Function Number: 166 +wait_and_display_lives_left_hud() +{ + level endon("special_op_terminated"); + if(issplitscreen()) + { + wait 2.5; + } + + update_lives_left_hud(self.laststand_info.type_getup_lives); +} + +//Function Number: 167 +player_have_max_lives() +{ + var_00 = 0; + var_01 = 0; + foreach(var_03 in level.crates_on_ground) + { + if(var_03.cratetype == "bonus_laststand") + { + var_01 = var_01 + 1; + } + } + + foreach(var_06 in level.players) + { + if(var_06.laststand_info.type_getup_lives + var_01 == 5) + { + var_00 = 1; + } + } + + return var_00; +} + +//Function Number: 168 +generatesmokefx(param_00) +{ + var_01 = spawnfx(level.grnd_fx["smoke"],param_00); + triggerfx(var_01); + wait 5; + var_01 delete(); +} + +//Function Number: 169 +drop_item_already_used(param_00) +{ + var_01 = 0; + for(var_02 = 0;var_02 < level.drop_item_used.size;var_02++) + { + if(level.drop_item_used[var_02] == param_00) + { + var_01 = 1; + break; + } + } + + return var_01; +} + +//Function Number: 170 +chaos_give_weapon(param_00) +{ + if(!isdefined(param_00) || param_00 == "") + { + return 0; + } + + self giveweapon(param_00); + maps\_so_survival_armory::give_ammo_max(param_00); + self switchtoweapon(param_00); + return 1; +} + +//Function Number: 171 +chaos_give_grenade(param_00,param_01) +{ + if(!isdefined(param_00) || param_00 == "" || !isdefined(param_01) || param_01 == "") + { + return 0; + } + + self giveweapon(param_00); + if(param_01 == "max") + { + self setweaponammostock(param_00,weaponmaxammo(param_00)); + } + else + { + self setweaponammostock(param_00,int(param_01)); + } + + if(param_00 == "flash_grenade") + { + self setoffhandsecondaryclass("flash"); + } + + return 1; +} + +//Function Number: 172 +chaos_give_armor(param_00) +{ + if(!isdefined(param_00) || param_00 == "") + { + return 0; + } + + maps\_so_survival_armory::give_armor_amount("armor",int(param_00)); + return 1; +} + +//Function Number: 173 +chaos_player_infinite_laststand() +{ + for(;;) + { + self waittill("revived"); + maps\_laststand::update_lives_remaining(1); + } +} + +//Function Number: 174 +chaos_player_infinite_ammo_pistol() +{ + self endon("death"); + for(;;) + { + common_scripts\utility::waittill_either("reload","weapon_change"); + if(isdefined(level.coop_incap_weapon) && self hasweapon(level.coop_incap_weapon)) + { + self setweaponammostock(level.coop_incap_weapon,weaponmaxammo(level.coop_incap_weapon)); + } + } +} + +//Function Number: 175 +chaos_music_intro() +{ + wait 2; + maps\_utility::musicplaywrapper("music_intro_cm"); +} + +//Function Number: 176 +startcombodecayontimer() +{ + level endon("special_op_terminated"); + level common_scripts\utility::waittill_notify_or_timeout("Start timer",10); + wait 20; + if(level.start_combo_decay == 0) + { + level.start_combo_decay = 1; + thread chaos_combo_on_end(4,0.2); + } +} + +//Function Number: 177 +chaos_hud_survival_remove() +{ + thread chaos_wave_hud_hide(); + wait 0.05; + waittillframeend; + common_scripts\utility::array_thread(level.players,::maps\_specialops::surhud_disable,"credits"); + common_scripts\utility::array_thread(level.players,::maps\_specialops::surhud_disable,"challenge"); + level.xp_enable = 0; +} + +//Function Number: 178 +chaos_wave_hud_hide() +{ + self endon("death"); + level waittill("wave_started",var_00); + waittillframeend; + common_scripts\utility::array_thread(level.players,::maps\_specialops::surhud_disable,"wave"); + common_scripts\utility::array_thread(level.players,::maps\_specialops::_setplayerdata_single,"surHUD_wave",0); +} + +//Function Number: 179 +wait_for_revive_teammate() +{ + level endon("special_op_terminated"); + for(;;) + { + self waittill("so_revive_success"); + chaos_score_event_raise("revive_teammate"); + } +} + +//Function Number: 180 +wait_for_death() +{ + level endon("special_op_terminated"); + self waittill("death"); + chaos_running_score_update(level.chaos_combo_points,level.chaos_combo_count); +} + +//Function Number: 181 +get_random_drop_item(param_00,param_01) +{ + if(param_01 == 1) + { + return level.chaos_drop_items[param_00][0]; + } + + for(;;) + { + var_02 = randomint(level.chaos_drop_items[param_00].size); + var_03 = level.chaos_drop_items[param_00][var_02]; + if(drop_item_already_used(var_03)) + { + continue; + } + else + { + level.drop_item_used[level.drop_item_used.size] = var_03; + return var_03; + } + } +} + +//Function Number: 182 +chaos_dog_tags_spawn(param_00,param_01) +{ + var_02 = spawn("script_model",param_00 + (0,0,24)); + if(param_01 == 1) + { + var_02 setmodel("prop_dogtags_friend"); + } + else + { + var_02 setmodel("prop_dogtags_foe"); + } + + var_02 endon("death"); + var_03 = spawn("trigger_radius",param_00,0,32,32); + var_02 thread temp_chaos_dog_tags_rotate(); + var_02 thread chaos_dog_tags_flicker(10,5); + var_02 thread chaos_dog_tags_cleanup(10,var_03); + for(;;) + { + var_03 waittill("trigger",var_04); + if(isdefined(var_04) && isplayer(var_04)) + { + break; + } + } + + if(param_01 == 1) + { + chaos_score_event_raise("dogtag","cm_redtag_pickup"); + var_05 = 200; + var_06 = var_04.armor["points"]; + var_04 maps\_so_survival_armory::give_armor_amount("armor",var_05 + var_06); + var_04 thread radio_dialogue_to_player(var_04,"chaos_pickup_armor"); + } + else + { + chaos_score_event_raise("dogtag"); + } + + var_03 delete(); + var_02 delete(); +} + +//Function Number: 183 +temp_chaos_dog_tags_rotate() +{ + self endon("death"); + for(;;) + { + self rotateyaw(359,1,0,0); + wait 1; + } +} + +//Function Number: 184 +chaos_dog_tags_cleanup(param_00,param_01) +{ + self endon("death"); + wait param_00; + param_01 delete(); + self delete(); +} + +//Function Number: 185 +chaos_dog_tags_flicker(param_00,param_01) +{ + self endon("death"); + var_02 = param_00 * 1000; + var_03 = gettime() + var_02; + var_04 = min(param_01,param_00); + if(var_04 > 0) + { + wait var_04; + param_00 = param_00 - var_04; + } + + var_05 = 1; + for(;;) + { + if(var_05) + { + self hide(); + wait 0.1; + } + else + { + self show(); + wait 0.25; + } + + var_05 = !var_05; + } +} + +//Function Number: 186 +chaos_ai_setup() +{ + maps\_utility::add_global_spawn_function("axis",::chaos_on_ai_spawn); +} + +//Function Number: 187 +chaos_on_ai_spawn() +{ + self.dropweapon = 0; + thread chaos_on_ai_death(); +} + +//Function Number: 188 +chaos_on_ai_death() +{ + self waittill("death"); + if(!isdefined(self) || !isdefined(self.origin)) + { + return; + } + + var_00 = chaos_get_ai_type_ref(); + if(var_00 != "chopper") + { + if(issubstr(var_00,"jug")) + { + thread chaos_dog_tags_spawn(self.origin,1); + return; + } + + thread chaos_dog_tags_spawn(self.origin,0); + } +} + +//Function Number: 189 +chaos_armories_disable() +{ + waittillframeend; + var_00 = ["weapon","equipment","airsupport"]; + foreach(var_02 in var_00) + { + var_03 = "armory_" + var_02; + var_04 = getent(var_03,"targetname"); + if(!isdefined(var_04)) + { + continue; + } + + var_04 makeunusable(); + var_04 maps\_utility::hide_entity(); + var_04.laptop_locked maps\_utility::hide_entity(); + var_04.laptop maps\_utility::hide_entity(); + } + + var_06 = getentarray("armory_script_brushmodel","targetname"); + foreach(var_08 in var_06) + { + var_08 notsolid(); + } +} + +//Function Number: 190 +chaos_score_globals_init() +{ + level.chaos_score = 0; +} + +//Function Number: 191 +chaos_score_update(param_00,param_01) +{ + level notify("score_update_bump"); + level endon("score_update_bump"); + level thread sound_wait_for_bank(); + var_02 = param_00 * param_01; + var_03 = level.chaos_score; + level.chaos_score = level.chaos_score + var_02; + foreach(var_05 in level.players) + { + if(var_02 > var_05.game_performance["comboscoremax"]) + { + var_05.game_performance["comboscoremax"] = var_02; + } + + if(param_01 > var_05.game_performance["combomultmax"]) + { + var_05.game_performance["combomultmax"] = param_01; + } + + if(isdefined(var_05.chaos_score_hud)) + { + var_05.chaos_score_hud settext(var_03); + var_05 thread chaos_score_hud_player_update(param_01); + } + } +} + +//Function Number: 192 +sound_wait_for_bank() +{ + wait 0.3; + common_scripts\utility::array_call(level.players,::playlocalsound,"chaos_bank"); +} + +//Function Number: 193 +chaos_get_ai_type_ref() +{ + if(isdefined(self.ally_ref)) + { + return self.ally_ref.ref; + } + + if(isdefined(self.chaos_squad_type)) + { + return self.chaos_squad_type; + } + + return undefined; +} + +//Function Number: 194 +update_level_chaos_timer() +{ + level endon("special_op_terminated"); + level endon("update_chaos_timer"); + level endon("chaos_timer_reached_zero"); + level common_scripts\utility::waittill_notify_or_timeout("Start timer",10); + for(;;) + { + wait 0.2; + level.chaos_time_remaining = level.chaos_time_remaining - 0.2; + } +} + +//Function Number: 195 +chaos_timer_update_vo(param_00,param_01) +{ + level endon("special_op_terminated"); + level endon("wave_ended"); + level endon("chaos_timer_reached_zero"); + level endon("update_chaos_timer"); + var_02 = param_00 - param_01; + if(var_02 >= 0) + { + if(var_02 > 0) + { + wait var_02; + } + + maps\_utility::musicplaywrapper("music_timeout_cm"); + } +} + +//Function Number: 196 +change_player_vision_set() +{ + level endon("special_op_terminated"); + self visionsetnakedforplayer("coup_sunblind",0.25); + wait 0.2; + self visionsetnakedforplayer("",1); +} + +//Function Number: 197 +sp_killstreak_bonus_score_crateopen() +{ + chaos_score_event_raise("bonus_score","cm_bp_cp_bonus"); +} + +//Function Number: 198 +chaos_killstreaks_init_done() +{ + return isdefined(level.ks) && isdefined(level.ks.globalinitdone); +} + +//Function Number: 199 +chaos_killstreak_exists(param_00) +{ + foreach(var_03, var_02 in level.ks.killstreaktypes) + { + if(var_03 == param_00) + { + return 1; + } + } + + return 0; +} + +//Function Number: 200 +chaos_getpathstart(param_00,param_01) +{ + var_02 = 100; + var_03 = 15000; + var_04 = (0,param_01,0); + var_05 = param_00 + anglestoforward(var_04) * -1 * var_03; + var_05 = var_05 + (randomfloat(2) - 1 * var_02,randomfloat(2) - 1 * var_02,0); + return var_05; +} + +//Function Number: 201 +chaos_getpathend(param_00,param_01) +{ + var_02 = 150; + var_03 = 15000; + var_04 = (0,param_01,0); + var_05 = param_00 + anglestoforward(var_04 + (0,90,0)) * var_03; + var_05 = var_05 + (randomfloat(2) - 1 * var_02,randomfloat(2) - 1 * var_02,0); + return var_05; +} + +//Function Number: 202 +getperkname(param_00) +{ + var_01 = ""; + switch(param_00) + { + case "specialty_fastreload": + var_01 = "Sleight of Hand"; + break; + + case "specialty_quickdraw": + var_01 = "Quick Draw"; + break; + + case "specialty_longersprint": + var_01 = "Extreme Conditioning"; + break; + + case "specialty_stalker": + var_01 = "Stalker"; + break; + + case "specialty_bulletaccuracy": + var_01 = "Steady Aim"; + break; + + case "specialty_armorvest": + var_01 = "Armor Vest"; + break; + + case "specialty_juiced": + var_01 = "Juiced"; + break; + + default: + break; + } + + return var_01; +} + +//Function Number: 203 +chaos_perk_radio(param_00) +{ + var_01 = undefined; + switch(param_00) + { + case "specialty_stalker": + var_01 = "chaos_perk_stalker"; + break; + + case "specialty_longersprint": + var_01 = "chaos_perk_excond"; + break; + + case "specialty_fastreload": + var_01 = "chaos_perk_sleight"; + break; + + case "specialty_quickdraw": + var_01 = "chaos_perk_quickdraw"; + break; + + case "specialty_bulletaccuracy": + var_01 = "chaos_perk_steadyaim"; + break; + + case "specialty_armorvest": + var_01 = "chaos_perk_regeneration"; + break; + + case "specialty_juiced": + var_01 = "chaos_perk_juiced"; + break; + + default: + break; + } + + if(isdefined(var_01)) + { + maps\_utility::radio_dialogue(var_01); + } +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_so_survival_chaos_entities.gsc b/MW3/PC/SP/maps/_so_survival_chaos_entities.gsc new file mode 100644 index 0000000..74d00c1 --- /dev/null +++ b/MW3/PC/SP/maps/_so_survival_chaos_entities.gsc @@ -0,0 +1,873 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_so_survival_chaos_entities.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 24 + * Decompile Time: 453 ms + * Timestamp: 10/27/2023 2:19:12 AM +*******************************************************************/ + +//Function Number: 1 +get_level(param_00) +{ + return tablelookup(level.chaos_entity_table,0,param_00,1); +} + +//Function Number: 2 +get_level_weapon(param_00) +{ + return tablelookup(level.chaos_entity_table,0,param_00,2); +} + +//Function Number: 3 +get_level_weapon_position(param_00) +{ + return tablelookup(level.chaos_entity_table,0,param_00,3); +} + +//Function Number: 4 +get_level_drop_location(param_00) +{ + return tablelookup(level.chaos_drop_location_table,0,param_00,2); +} + +//Function Number: 5 +get_level_drop_item(param_00) +{ + return tablelookup(level.chaos_drop_item_table,0,param_00,3); +} + +//Function Number: 6 +get_level_drop_wave(param_00) +{ + return tablelookup(level.chaos_drop_item_table,0,param_00,2); +} + +//Function Number: 7 +get_level_ai_size_wave(param_00) +{ + return tablelookup(level.constant_ai_size_table,0,param_00,2); +} + +//Function Number: 8 +get_level_ai_size(param_00) +{ + return tablelookup(level.constant_ai_size_table,0,param_00,3); +} + +//Function Number: 9 +get_ai_size_level(param_00) +{ + return tablelookup(level.constant_ai_size_table,0,param_00,1); +} + +//Function Number: 10 +get_drop_distance_level(param_00) +{ + return tablelookup(level.desired_drop_distance_table,0,param_00,1); +} + +//Function Number: 11 +get_level_desired_drop_distance(param_00) +{ + return tablelookup(level.desired_drop_distance_table,0,param_00,2); +} + +//Function Number: 12 +get_level_starting_lives_remaining(param_00) +{ + return tablelookup(level.desired_drop_distance_table,0,param_00,3); +} + +//Function Number: 13 +chaos_entities_precache() +{ + if(!isdefined(level.chaos_entity_table)) + { + level.chaos_entity_table = "sp/survival_chaos_entities.csv"; + } + + var_00 = getdvar("mapname"); + for(var_01 = 100;var_01 <= 1700;var_01++) + { + var_02 = get_level(var_01); + if(!isdefined(var_02) || var_02 == "" || var_02 != var_00) + { + continue; + } + + var_03 = get_level_weapon(var_01); + if(!isdefined(var_03) || var_03 == "") + { + continue; + } + + var_04 = get_level_weapon_position(var_01); + if(!isdefined(var_04) || var_04 == "") + { + continue; + } + + var_05 = strtok(var_04,","); + if(!isdefined(var_05) || var_05.size != 3) + { + continue; + } + + if(!isdefined(level.chaos_weapon_locations)) + { + level.chaos_weapon_locations = []; + } + + precacheitem(var_03); + level.chaos_weapon_locations[var_03] = (float(var_05[0]),float(var_05[1]),float(var_05[2])); + } +} + +//Function Number: 14 +chaos_entities_place() +{ + level.chaos_entities = []; + foreach(var_09, var_01 in level.chaos_weapon_locations) + { + var_02 = getweaponmodel(var_09); + var_03 = common_scripts\utility::spawn_tag_origin(); + var_03.origin = var_01 + (0,0,48); + var_03.var_5C39 = var_09; + var_03.trigger = spawn("trigger_radius",var_03.origin,0,48,48); + var_04 = (8,0,0); + var_05 = (0,0,0); + if(issubstr(var_09,"akimbo")) + { + var_03.akimbo = 1; + var_06 = var_04 + (0,-6,0); + var_07 = var_04 + (0,6,0); + var_03.weapon_models[0] = spawn("script_model",var_03.origin); + var_03.weapon_models[0] setmodel(var_02); + var_03.weapon_models[0] linkto(var_03,"tag_origin",var_06,var_05 + (15,0,0)); + var_03.weapon_models[1] = spawn("script_model",var_03.origin); + var_03.weapon_models[1] setmodel(var_02); + var_03.weapon_models[1] linkto(var_03,"tag_origin",var_07,var_05 + (15,0,0)); + } + else + { + var_03.akimbo = 0; + var_03.weapon_models[0] = spawn("script_model",var_03.origin); + var_03.weapon_models[0] setmodel(var_02); + var_03.weapon_models[0] linkto(var_03,"tag_origin",var_04,var_05); + } + + var_03 thread chaos_entity_rotate(); + var_03.display_name = get_weapon_display_name(var_09); + var_08 = chaos_get_weapon_class(var_09); + var_03.hud_icon = get_weapon_hud_icon(var_08); + var_03 thread chaos_weapon_collect(); + var_03.headiconforplayer = []; + level.chaos_entities[level.chaos_entities.size] = var_03; + } + + level.chaos_weapon_locations = undefined; +} + +//Function Number: 15 +get_weapon_hud_icon(param_00) +{ + var_01 = ""; + if(param_00 == "FG") + { + var_01 = "specops_ui_equipmentstore"; + } + else if(param_00 == "SG") + { + var_01 = "specops_ui_weaponstore"; + } + else if(param_00 == "AR") + { + var_01 = "specops_ui_weaponstore"; + } + else if(param_00 == "SN") + { + var_01 = "specops_ui_weaponstore"; + } + else if(param_00 == "Akimbo") + { + var_01 = "specops_ui_weaponstore"; + } + else if(param_00 == "LMG") + { + var_01 = "specops_ui_weaponstore"; + } + else if(param_00 == "SMG") + { + var_01 = "specops_ui_weaponstore"; + } + else if(param_00 == "HG") + { + var_01 = "specops_ui_weaponstore"; + } + else if(param_00 == "RPG") + { + var_01 = "specops_ui_weaponstore"; + } + + return var_01; +} + +//Function Number: 16 +chaos_get_weapon_class(param_00) +{ + var_01 = ""; + if(issubstr(param_00,"claymore")) + { + var_01 = "FG"; + } + else if(issubstr(param_00,"c4")) + { + var_01 = "FG"; + } + else if(issubstr(param_00,"flash")) + { + var_01 = "FG"; + } + else if(issubstr(param_00,"1887")) + { + var_01 = "SG"; + } + else if(issubstr(param_00,"aa12")) + { + var_01 = "SG"; + } + else if(issubstr(param_00,"acr")) + { + var_01 = "AR"; + } + else if(issubstr(param_00,"ak47")) + { + var_01 = "AR"; + } + else if(issubstr(param_00,"as50")) + { + var_01 = "SN"; + } + else if(issubstr(param_00,"cm901")) + { + var_01 = "AR"; + } + else if(issubstr(param_00,"fad")) + { + var_01 = "AR"; + } + else if(issubstr(param_00,"fmg9")) + { + var_01 = "Akimbo"; + } + else if(issubstr(param_00,"g18")) + { + var_01 = "Akimbo"; + } + else if(issubstr(param_00,"mg36")) + { + var_01 = "LMG"; + } + else if(issubstr(param_00,"g36")) + { + var_01 = "AR"; + } + else if(issubstr(param_00,"m16")) + { + var_01 = "AR"; + } + else if(issubstr(param_00,"m4")) + { + var_01 = "AR"; + } + else if(issubstr(param_00,"m60")) + { + var_01 = "LMG"; + } + else if(issubstr(param_00,"m9")) + { + var_01 = "SMG"; + } + else if(issubstr(param_00,"mk14")) + { + var_01 = "AR"; + } + else if(issubstr(param_00,"mk46")) + { + var_01 = "LMG"; + } + else if(issubstr(param_00,"mp5")) + { + var_01 = "SMG"; + } + else if(issubstr(param_00,"mp7")) + { + var_01 = "SMG"; + } + else if(issubstr(param_00,"mp9")) + { + var_01 = "Akimbo"; + } + else if(issubstr(param_00,"pp90")) + { + var_01 = "SMG"; + } + else if(issubstr(param_00,"p90")) + { + var_01 = "SMG"; + } + else if(issubstr(param_00,"pecheneg")) + { + var_01 = "LMG"; + } + else if(issubstr(param_00,"rsass")) + { + var_01 = "SN"; + } + else if(issubstr(param_00,"sa80")) + { + var_01 = "LMG"; + } + else if(issubstr(param_00,"scar")) + { + var_01 = "AR"; + } + else if(issubstr(param_00,"skorpion")) + { + var_01 = "Akimbo"; + } + else if(issubstr(param_00,"striker")) + { + var_01 = "SG"; + } + else if(issubstr(param_00,"type95")) + { + var_01 = "AR"; + } + else if(issubstr(param_00,"usp45")) + { + var_01 = "HG"; + } + else if(issubstr(param_00,"ump45")) + { + var_01 = "SMG"; + } + else if(issubstr(param_00,"usas12")) + { + var_01 = "SG"; + } + else if(issubstr(param_00,"rpg")) + { + var_01 = "RPG"; + } + + return var_01; +} + +//Function Number: 17 +get_weapon_display_name(param_00) +{ + var_01 = undefined; + if(issubstr(param_00,"claymore")) + { + var_01 = &"SO_SURVIVAL_CHAOS_PICKUP_CLAYMORE"; + } + else if(issubstr(param_00,"c4")) + { + var_01 = &"SO_SURVIVAL_CHAOS_PICKUP_C4"; + } + else if(issubstr(param_00,"flash")) + { + var_01 = &"SO_SURVIVAL_CHAOS_PICKUP_FLASH"; + } + else if(issubstr(param_00,"1887")) + { + var_01 = &"SO_SURVIVAL_CHAOS_PICKUP_1887"; + } + else if(issubstr(param_00,"aa12")) + { + var_01 = &"SO_SURVIVAL_CHAOS_PICKUP_AA12"; + } + else if(issubstr(param_00,"acr")) + { + var_01 = &"SO_SURVIVAL_CHAOS_PICKUP_ACR"; + } + else if(issubstr(param_00,"ak47")) + { + var_01 = &"SO_SURVIVAL_CHAOS_PICKUP_AK47"; + } + else if(issubstr(param_00,"as50")) + { + var_01 = &"SO_SURVIVAL_CHAOS_PICKUP_AS50"; + } + else if(issubstr(param_00,"cm901")) + { + var_01 = &"SO_SURVIVAL_CHAOS_PICKUP_CM901"; + } + else if(issubstr(param_00,"fad")) + { + var_01 = &"SO_SURVIVAL_CHAOS_PICKUP_FAD"; + } + else if(issubstr(param_00,"fmg9")) + { + var_01 = &"SO_SURVIVAL_CHAOS_PICKUP_FMG9"; + } + else if(issubstr(param_00,"g18")) + { + var_01 = &"SO_SURVIVAL_CHAOS_PICKUP_G18"; + } + else if(issubstr(param_00,"mg36")) + { + var_01 = &"SO_SURVIVAL_CHAOS_PICKUP_MG36"; + } + else if(issubstr(param_00,"g36")) + { + var_01 = &"SO_SURVIVAL_CHAOS_PICKUP_G36"; + } + else if(issubstr(param_00,"m16")) + { + var_01 = &"SO_SURVIVAL_CHAOS_PICKUP_M16"; + } + else if(issubstr(param_00,"m4")) + { + var_01 = &"SO_SURVIVAL_CHAOS_PICKUP_M4"; + } + else if(issubstr(param_00,"m60")) + { + var_01 = &"SO_SURVIVAL_CHAOS_PICKUP_M60"; + } + else if(issubstr(param_00,"m9")) + { + var_01 = &"SO_SURVIVAL_CHAOS_PICKUP_M9"; + } + else if(issubstr(param_00,"mk14")) + { + var_01 = &"SO_SURVIVAL_CHAOS_PICKUP_MK14"; + } + else if(issubstr(param_00,"mk46")) + { + var_01 = &"SO_SURVIVAL_CHAOS_PICKUP_MK46"; + } + else if(issubstr(param_00,"mp5")) + { + var_01 = &"SO_SURVIVAL_CHAOS_PICKUP_MP5"; + } + else if(issubstr(param_00,"mp7")) + { + var_01 = &"SO_SURVIVAL_CHAOS_PICKUP_MP7"; + } + else if(issubstr(param_00,"mp9")) + { + var_01 = &"SO_SURVIVAL_CHAOS_PICKUP_MP9"; + } + else if(issubstr(param_00,"pp90")) + { + var_01 = &"SO_SURVIVAL_CHAOS_PICKUP_PP90"; + } + else if(issubstr(param_00,"p90")) + { + var_01 = &"SO_SURVIVAL_CHAOS_PICKUP_P90"; + } + else if(issubstr(param_00,"pecheneg")) + { + var_01 = &"SO_SURVIVAL_CHAOS_PICKUP_PECHENEG"; + } + else if(issubstr(param_00,"rsass")) + { + var_01 = &"SO_SURVIVAL_CHAOS_PICKUP_RSASS"; + } + else if(issubstr(param_00,"sa80")) + { + var_01 = &"SO_SURVIVAL_CHAOS_PICKUP_SA80"; + } + else if(issubstr(param_00,"scar")) + { + var_01 = &"SO_SURVIVAL_CHAOS_PICKUP_SCAR"; + } + else if(issubstr(param_00,"skorpion")) + { + var_01 = &"SO_SURVIVAL_CHAOS_PICKUP_SKORPION"; + } + else if(issubstr(param_00,"striker")) + { + var_01 = &"SO_SURVIVAL_CHAOS_PICKUP_STRIKER"; + } + else if(issubstr(param_00,"type95")) + { + var_01 = &"SO_SURVIVAL_CHAOS_PICKUP_TYPE95"; + } + else if(issubstr(param_00,"usp45")) + { + var_01 = &"SO_SURVIVAL_CHAOS_PICKUP_USP45"; + } + else if(issubstr(param_00,"ump45")) + { + var_01 = &"SO_SURVIVAL_CHAOS_PICKUP_UMP45"; + } + else if(issubstr(param_00,"usas12")) + { + var_01 = &"SO_SURVIVAL_CHAOS_PICKUP_USAS12"; + } + else if(issubstr(param_00,"rpg")) + { + var_01 = &"SO_SURVIVAL_CHAOS_PICKUP_RPG"; + } + + return var_01; +} + +//Function Number: 18 +chaos_entity_rotate() +{ + self endon("death"); + for(;;) + { + self rotateyaw(360,3,0,0); + wait 3; + } +} + +//Function Number: 19 +chaos_weapon_collect() +{ + self endon("death"); + self.trigger endon("death"); + level endon("special_op_terminated"); + self.weapon_in_use = 0; + for(;;) + { + self.trigger waittill("trigger",var_00); + if(isplayer(var_00) && !maps\_utility::is_player_down(var_00)) + { + var_00 maps/_so_survival_chaos::chaoseventpopup(self.display_name,(1,1,1)); + } + + if(!isplayer(var_00) || maps\_utility::is_player_down(var_00) || !var_00 usebuttonpressed()) + { + continue; + } + + var_01 = 0; + var_02 = 0; + if(!var_00 hasweapon(self.var_5C39) && self.var_5C39 != "claymore") + { + var_03 = var_00 getweaponslistprimaries(); + foreach(var_05 in var_03) + { + if((isdefined(level.coop_incap_weapon) && var_05 == level.coop_incap_weapon) || weaponclass(var_05) == "item" || weaponclass(var_05) == "none" || weaponinventorytype(var_05) == "altmode") + { + continue; + } + + var_00 takeweapon(var_05); + } + + var_00 maps/_so_survival_chaos::chaos_give_weapon(self.var_5C39); + var_01 = 1; + if(!isdefined(var_00.weapon_already_used)) + { + var_00.weapon_already_used = []; + } + + if(!isdefined(var_00.weapon_already_used[self.var_5C39])) + { + maps/_so_survival_chaos::chaos_score_event_raise("new_weapon_collect"); + var_02 = 1; + var_00.weapon_already_used[self.var_5C39] = 1; + var_00.game_performance["new_weapon_collected"]++; + } + else + { + maps/_so_survival_chaos::chaos_score_event_raise("old_weapon_collect"); + } + } + else + { + var_07 = 0; + if(self.var_5C39 == "claymore" || self.var_5C39 == "c4") + { + if(!var_00 hasweapon(self.var_5C39)) + { + var_00 giveweapon(self.var_5C39); + var_07 = 1; + } + else + { + var_07 = var_00 getweaponammoclip(self.var_5C39) + 1; + } + } + else + { + var_07 = weaponclipsize(self.var_5C39); + } + + if(issubstr(self.var_5C39,"akimbo")) + { + var_00 setweaponammoclip(self.var_5C39,var_07,"left"); + var_00 setweaponammoclip(self.var_5C39,var_07,"right"); + } + else + { + var_00 setweaponammoclip(self.var_5C39,var_07); + } + + var_08 = 0; + if(var_00 getweaponammostock(self.var_5C39) < weaponmaxammo(self.var_5C39)) + { + var_08 = 1; + } + + var_09 = weaponaltweaponname(self.var_5C39); + if(var_09 != "none" && var_00 getweaponammostock(var_09) < weaponmaxammo(var_09)) + { + var_08 = 1; + } + + if(self.var_5C39 == "flash_grenade" || self.var_5C39 == "claymore" || self.var_5C39 == "c4") + { + var_08 = 1; + maps/_so_survival_chaos::chaos_score_event_raise("old_weapon_collect"); + } + + if(var_08) + { + if(self.var_5C39 != "claymore" && self.var_5C39 != "c4") + { + var_00 setweaponammostock(self.var_5C39,weaponmaxammo(self.var_5C39)); + } + + var_09 = weaponaltweaponname(self.var_5C39); + if(var_09 != "none") + { + var_00 setweaponammostock(var_09,weaponmaxammo(var_09)); + } + + maps/_so_survival_chaos::chaos_score_event_raise("weapon_ammo"); + if(self.var_5C39 != "flash_grenade" && self.var_5C39 != "claymore" && self.var_5C39 != "c4") + { + var_00 switchtoweapon(self.var_5C39); + } + + var_01 = 1; + } + } + + if(var_01) + { + common_scripts\utility::array_call(self.weapon_models,::hide); + foreach(var_0B in level.players) + { + if(isdefined(self.headiconforplayer[var_0B.unique_id])) + { + self.headiconforplayer[var_0B.unique_id] destroy(); + } + } + + self.weapon_in_use = 1; + if(var_02 == 1) + { + maps/_so_survival_chaos::radio_dialogue_to_player(var_00,"chaos_new_weapon",1); + } + + wait 25; + if(self.var_5C39 == "flash_grenade" || self.var_5C39 == "claymore" || self.var_5C39 == "c4") + { + if(self.var_5C39 == "claymore" || self.var_5C39 == "c4") + { + var_0D = weaponclipsize(self.var_5C39) - 5; + } + else + { + var_0D = weaponclipsize(self.var_5C39); + } + + for(;;) + { + var_0E = 0; + foreach(var_0B in level.players) + { + if(var_0B getammocount(self.var_5C39) < var_0D) + { + var_0E = 1; + } + } + + if(var_0E == 0) + { + wait 0.5; + continue; + } + + break; + } + } + else + { + for(;;) + { + var_11 = 0; + foreach(var_0B in level.players) + { + if(var_0B hasweapon(self.var_5C39)) + { + var_11 = 1; + } + } + + if(var_11 == 1) + { + wait 0.5; + continue; + } + + break; + } + } + + common_scripts\utility::array_call(self.weapon_models,::show); + self.weapon_in_use = 0; + } + } +} + +//Function Number: 20 +chaos_load_drop_location() +{ + if(!isdefined(level.chaos_drop_location_table)) + { + level.chaos_drop_location_table = "sp/survival_chaos_drop_locations.csv"; + } + + var_00 = getdvar("mapname"); + for(var_01 = 100;var_01 <= 1700;var_01++) + { + var_02 = get_level(var_01); + if(!isdefined(var_02) || var_02 == "" || var_02 != var_00) + { + continue; + } + + var_03 = get_level_drop_location(var_01); + if(!isdefined(var_03) || var_03 == "") + { + continue; + } + + var_04 = strtok(var_03,","); + if(!isdefined(var_04) || var_04.size != 3) + { + continue; + } + + if(!isdefined(level.chaos_drop_locations)) + { + level.chaos_drop_locations = []; + } + + level.chaos_drop_locations[level.chaos_drop_locations.size] = (float(var_04[0]),float(var_04[1]),float(var_04[2])); + } +} + +//Function Number: 21 +chaos_load_drop_item() +{ + if(!isdefined(level.chaos_drop_item_table)) + { + level.chaos_drop_item_table = "sp/survival_chaos_drop_items.csv"; + } + + var_00 = getdvar("mapname"); + for(var_01 = 100;var_01 <= 1700;var_01++) + { + var_02 = get_level(var_01); + if(!isdefined(var_02) || var_02 == "" || var_02 != var_00) + { + continue; + } + + var_03 = get_level_drop_wave(var_01); + var_04 = "wave_" + var_03; + var_05 = get_level_drop_item(var_01); + if(!isdefined(var_05) || var_05 == "") + { + continue; + } + + var_06 = strtok(var_05,";"); + if(!isdefined(level.chaos_drop_items)) + { + level.chaos_drop_items = []; + } + + level.chaos_drop_items[var_04] = var_06; + } +} + +//Function Number: 22 +chaos_load_desired_drop_distance() +{ + if(!isdefined(level.desired_drop_distance_table)) + { + level.desired_drop_distance_table = "sp/survival_chaos_drop_distance.csv"; + } + + var_00 = getdvar("mapname"); + for(var_01 = 100;var_01 <= 1700;var_01++) + { + var_02 = get_drop_distance_level(var_01); + if(isdefined(var_02) && var_02 == var_00) + { + var_03 = get_level_desired_drop_distance(var_01); + level.map_specific_desired_drop_distance = float(var_03); + var_04 = get_level_starting_lives_remaining(var_01); + if(chaos_is_coop()) + { + level.map_specific_starting_lives_remaining = 3; + } + else + { + level.map_specific_starting_lives_remaining = float(var_04); + } + } + } +} + +//Function Number: 23 +chaos_is_coop() +{ + if(issplitscreen() || getdvar("coop") == "1") + { + return 1; + } + + return 0; +} + +//Function Number: 24 +chaos_load_ai_size() +{ + if(!isdefined(level.constant_ai_size_table)) + { + level.constant_ai_size_table = "sp/survival_chaos_constant_ai_size.csv"; + } + + var_00 = getdvar("mapname"); + for(var_01 = 100;var_01 <= 1700;var_01++) + { + var_02 = get_ai_size_level(var_01); + if(isdefined(var_02) && var_02 == var_00) + { + var_03 = get_level_ai_size_wave(var_01); + var_04 = get_level_ai_size(var_01); + if(!isdefined(level.map_specific_ai_size)) + { + level.map_specific_ai_size = []; + } + + var_05 = "wave_" + var_03; + level.map_specific_ai_size[var_05] = float(var_04); + } + } +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_so_survival_code.gsc b/MW3/PC/SP/maps/_so_survival_code.gsc new file mode 100644 index 0000000..67aca18 --- /dev/null +++ b/MW3/PC/SP/maps/_so_survival_code.gsc @@ -0,0 +1,1300 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_so_survival_code.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 47 + * Decompile Time: 818 ms + * Timestamp: 10/27/2023 2:21:05 AM +*******************************************************************/ + +//Function Number: 1 +remotemissile_infantry_kills_dialogue_setup() +{ + level.scr_radio["inv_hqr_fivenotenkills"] = "inv_hqr_fivenotenkills"; + level.scr_radio["inv_hqr_tenmoreconfirms"] = "inv_hqr_tenmoreconfirms"; + level.scr_radio["inv_hqr_tenpluskia"] = "inv_hqr_tenpluskia"; + level.scr_radio["inv_hqr_fiveplus"] = "inv_hqr_fiveplus"; + level.scr_radio["inv_hqr_another5plus"] = "inv_hqr_another5plus"; + level.scr_radio["inv_hqr_morethanfive"] = "inv_hqr_morethanfive"; + level.scr_radio["inv_hqr_yougotem"] = "inv_hqr_yougotem"; + level.scr_radio["inv_hqr_goodkills"] = "inv_hqr_goodkills"; + level.scr_radio["inv_hqr_directhit"] = "inv_hqr_directhit"; + level.scr_radio["inv_hqr_hesdown"] = "inv_hqr_hesdown"; +} + +//Function Number: 2 +remotemissile_infantry_kills_dialogue() +{ + var_00 = []; + var_01 = 0; + var_02 = []; + var_03 = 0; + var_04 = 0; + var_05 = 0; + level.enemies_killed = 0; + var_06 = 0; + for(;;) + { + level waittill("inv_hqr_tenpluskia",var_7B[var_00.size],"inv_hqr_tenmoreconfirms",var_7B[var_7B.size],"inv_hqr_fivenotenkills",var_7B[var_7B.size],"inv_hqr_fiveplus",var_7B[var_02.size],"inv_hqr_another5plus",var_7B[var_02.size],"inv_hqr_morethanfive",var_7B[var_02.size],"remote_missile_exploded"); + var_07 = level.enemies_killed; + wait 0.1; + if(isdefined(level.uav_killstats["ai"])) + { + var_06 = level.uav_killstats["ai"]; + } + + if(var_06 == 0) + { + continue; + } + + wait 0.5; + if(isdefined(level.uav_is_destroyed)) + { + return; + } + + if(var_06 == 1) + { + if(var_04) + { + maps\_utility::radio_dialogue("inv_hqr_yougotem"); + var_04 = 0; + } + else + { + maps\_utility::radio_dialogue("inv_hqr_hesdown"); + var_04 = 1; + } + + continue; + } + + if(var_06 >= 10) + { + maps\_utility::radio_dialogue(var_7B[var_01]); + var_01++; + if(var_01 >= var_7B.size) + { + var_01 = 0; + } + + continue; + } + + if(var_06 >= 5) + { + maps\_utility::radio_dialogue(var_02[var_03]); + var_03++; + if(var_03 >= var_02.size) + { + var_03 = 0; + } + + continue; + } + else + { + if(var_05) + { + maps\_utility::radio_dialogue("inv_hqr_goodkills"); + var_05 = 0; + } + else + { + maps\_utility::radio_dialogue("inv_hqr_directhit"); + var_05 = 1; + } + + continue; + } + } +} + +//Function Number: 3 +remotemissile_uav() +{ + level.uav = maps\_vehicle::spawn_vehicle_from_targetname("remotemissile_uav"); + var_00 = getvehiclenode("vnode_remotemissile_uav_start","targetname"); + level.uav attachpath(var_00); + maps\_vehicle::gopath(level.uav); + level.uav playloopsound("uav_engine_loop"); + level.uavrig = spawn("script_model",level.uav.origin); + level.uavrig setmodel("tag_origin"); + level thread uav_rig_aiming(); +} + +//Function Number: 4 +uav_rig_aiming() +{ + level.uav endon("death"); + var_00 = common_scripts\utility::getstructarray("uav_focus_point","targetname"); + for(;;) + { + var_01 = level.player.origin; + if(isdefined(level.uav_user)) + { + var_01 = level.uav_user.origin; + } + + var_02 = maps\_utility::getclosest(var_01,var_00); + var_03 = var_02.origin; + var_04 = vectortoangles(var_03 - level.uav.origin); + level.uavrig moveto(level.uav.origin,0.1,0,0); + level.uavrig rotateto(var_04,0.1,0,0); + wait 0.05; + } +} + +//Function Number: 5 +ai_remote_missile_fof_outline() +{ + if(!isai(self)) + { + return; + } + + if(isdefined(self.ridingvehicle)) + { + self endon("death"); + self waittill("jumpedout"); + } + + maps\_remotemissile_utility::setup_remote_missile_target(); +} + +//Function Number: 6 +splash_notify_message(param_00) +{ + self endon("death"); + if(!isdefined(param_00.type)) + { + param_00.type = ""; + } + + var_01 = param_00.duration; + var_02 = 0.15; + self.doingnotify = 1; + self.splashtitle transitionreset(); + self.splashdesc transitionreset(); + self.var_3E17 transitionreset(); + self.splashdesc2 transitionreset(); + self.splashdesc3 transitionreset(); + self.var_3E1A transitionreset(); + self.splashhint transitionreset(); + self.splashicon transitionreset(); + wait 0.05; + setsaveddvar("cg_drawBreathHint","0"); + var_03 = []; + self.splashtitle.label = var_01.title; + if(isdefined(var_01.title_set_value)) + { + self.splashtitle setvalue(var_01.title_set_value); + } + + self.splashtitle setpulsefx(int(5 * var_02),int(var_02 * 1000),1000); + var_04 = self.splashtitle.font; + if(isdefined(var_01.title_font)) + { + self.splashtitle.font = var_01.title_font; + } + + var_05 = var_01.title; + if(isdefined(var_01.title_label)) + { + self.splashtitle.label = var_01.title_label; + } + + var_06 = self.splashtitle.basefontscale; + if(isdefined(var_01.title_basefontscale)) + { + self.splashtitle.basefontscale = var_01.title_basefontscale; + } + + var_07 = self.splashtitle.glowcolor; + var_08 = self.splashtitle.glowalpha; + if(isdefined(var_01.title_glowcolor)) + { + self.splashtitle.glowcolor = var_01.title_glowcolor; + self.splashtitle.glowalpha = 1; + } + + var_09 = self.splashtitle.color; + if(isdefined(var_01.title_color)) + { + var_09 = var_01.title_color; + self.splashtitle.color = var_01.title_color; + } + + var_0A = self.splashicon.shader; + if(isdefined(var_01.icon) && var_01.icon != "") + { + var_7B[var_7B.size] = self.splashicon; + self.splashicon.shader = var_01.icon; + } + + var_0B = undefined; + var_0C = undefined; + if(isdefined(var_01.var_189B) && !isstring(var_01.var_189B) || var_01.var_189B != "") + { + var_7B[var_7B.size] = self.splashdesc; + self.splashdesc.label = var_01.var_189B; + if(isdefined(var_01.desc_set_value)) + { + self.splashdesc setvalue(var_01.desc_set_value); + } + + var_0B = self.splashdesc.font; + if(isdefined(var_01.desc_font)) + { + self.splashdesc.font = var_01.desc_font; + } + + var_0C = self.splashdesc.basefontscale; + if(isdefined(var_01.desc_basefontscale)) + { + self.splashdesc.basefontscale = var_01.desc_basefontscale; + } + + if(isdefined(var_01.desc1) && !isstring(var_01.desc1) || var_01.desc1 != "") + { + var_7B[var_7B.size] = self.var_3E17; + self.var_3E17.label = var_01.desc1; + self.var_3E17.font = self.splashdesc.font; + if(isdefined(var_01.desc1_set_value)) + { + self.var_3E17 setvalue(var_01.desc1_set_value); + } + } + + if(isdefined(var_01.desc2) && !isstring(var_01.desc2) || var_01.desc2 != "") + { + var_7B[var_7B.size] = self.splashdesc2; + self.splashdesc2.label = var_01.desc2; + self.splashdesc2.font = self.splashdesc.font; + if(isdefined(var_01.desc2_set_value)) + { + self.splashdesc2 setvalue(var_01.desc2_set_value); + } + } + + if(isdefined(var_01.desc3) && !isstring(var_01.desc3) || var_01.desc3 != "") + { + var_7B[var_7B.size] = self.splashdesc3; + self.splashdesc3.label = var_01.desc3; + self.splashdesc3.font = self.splashdesc.font; + if(isdefined(var_01.desc3_set_value)) + { + self.splashdesc3 setvalue(var_01.desc3_set_value); + } + } + + if(isdefined(var_01.desc4) && !isstring(var_01.desc4) || var_01.desc4 != "") + { + var_7B[var_7B.size] = self.var_3E1A; + self.var_3E1A.label = var_01.desc4; + self.var_3E1A.font = self.splashdesc.font; + if(isdefined(var_01.desc4_set_value)) + { + self.var_3E1A setvalue(var_01.desc4_set_value); + } + } + } + + if(isdefined(var_01.hint) && !isstring(var_01.hint) || var_01.hint != "") + { + var_7B[var_7B.size] = self.splashhint; + self.splashhint.label = var_01.hint; + if(isdefined(var_01.hintlabel)) + { + self.splashhint.label = var_01.hintlabel; + } + } + + if(isdefined(var_01.fadein)) + { + foreach(var_0E in var_7B) + { + var_0E transitionfadein(var_03); + } + } + + if(isdefined(var_01.zoomin)) + { + foreach(var_0E in var_7B) + { + var_0E transitionzoomin(var_03); + } + } + + if(isdefined(var_01.slidein)) + { + foreach(var_0E in var_7B) + { + var_0E transitionslidein(var_03,var_01.slidein); + } + } + + if(isdefined(var_01.pulsefxin)) + { + foreach(var_0E in var_7B) + { + var_0E transitionpulsefxin(var_03,var_02); + } + } + + if(isdefined(var_01.sound)) + { + if(isdefined(var_01.playsoundlocally)) + { + self playlocalsound(var_01.sound); + } + else + { + foreach(var_17 in level.players) + { + var_17 playlocalsound(var_01.sound); + } + } + } + + if(isdefined(var_01.abortflag)) + { + maps\_utility::ent_flag_wait_or_timeout(var_01.abortflag,var_02); + } + else + { + wait var_02; + } + + if(isdefined(var_01.fadeout)) + { + foreach(var_0E in var_7B) + { + var_0E transitionfadeout(var_03); + } + } + + if(isdefined(var_01.var_3E34)) + { + foreach(var_0E in var_7B) + { + var_0E transitionzoomout(var_03); + } + } + + if(isdefined(var_01.slideout)) + { + foreach(var_0E in var_7B) + { + var_0E transitionslideout(var_03,var_01.slideout); + } + } + + wait var_03; + setsaveddvar("cg_drawBreathHint","1"); + self.splashtitle.font = var_04; + self.splashtitle.label = var_05; + self.splashtitle.basefontscale = var_06; + self.splashtitle.glowcolor = var_07; + self.splashtitle.glowalpha = var_08; + self.splashtitle.color = var_09; + self.splashicon.shader = var_0A; + if(isdefined(var_0B)) + { + self.splashdesc.font = var_0B; + } + + if(isdefined(var_0C)) + { + self.splashdesc.basefontscale = var_0C; + } + + self.doingnotify = 0; +} + +//Function Number: 7 +player_reward_splash_init() +{ + var_00 = 15; + if(issplitscreen()) + { + var_01 = "objective"; + var_02 = 2.25; + if(getdvarint("survival_chaos") == 1) + { + if(self == level.player) + { + var_03 = 10; + } + else + { + var_03 = 37; + } + } + else + { + var_03 = 10; + } + + var_04 = 0; + var_05 = "objective"; + var_06 = 1; + var_07 = 57; + var_08 = 0; + var_09 = "small"; + var_0A = 1.4; + var_0B = 72; + var_0C = 0; + var_0D = 24; + var_0E = 5; + var_0F = 0; + var_10 = "TOP"; + var_11 = "BOTTOM"; + } + else + { + var_01 = "objective"; + var_02 = 2.5; + var_03 = 10; + var_04 = 0; + var_05 = "objective"; + var_06 = 1.1; + var_07 = 42; + var_08 = 0; + var_09 = "small"; + var_0A = 1.5; + var_0B = 300; + var_0C = 0; + var_0D = 42; + var_0E = 250; + var_0F = 0; + var_10 = "TOP"; + var_11 = "BOTTOM"; + } + + var_12 = createfontstring_mp(var_01,var_02); + var_12 maps\_hud_util::setpoint(var_10,undefined,var_04,var_03); + var_12.glowcolor = (0.3,0.6,0.3); + var_12.glowalpha = 1; + var_12.hidewheninmenu = 1; + var_12.archived = 0; + var_12.alpha = 0; + self.splashtitle = var_12; + var_12 = undefined; + var_12 = createfontstring_mp(var_05,var_06); + var_12 maps\_hud_util::setparent(self.splashtitle); + var_12 maps\_hud_util::setpoint(var_10,var_11,var_08,var_07); + var_12.glowcolor = (0,0,0); + var_12.glowalpha = 0; + var_12.hidewheninmenu = 1; + var_12.archived = 0; + var_12.alpha = 0; + self.splashdesc = var_12; + var_12 = undefined; + var_12 = createfontstring_mp(var_05,var_06); + var_12 maps\_hud_util::setparent(self.splashtitle); + var_12 maps\_hud_util::setpoint(var_10,var_11,var_08,var_07 + 1 * var_00); + var_12.glowcolor = (0,0,0); + var_12.glowalpha = 0; + var_12.hidewheninmenu = 1; + var_12.archived = 0; + var_12.alpha = 0; + self.var_3E17 = var_12; + var_12 = undefined; + var_12 = createfontstring_mp(var_05,var_06); + var_12 maps\_hud_util::setparent(self.splashtitle); + var_12 maps\_hud_util::setpoint(var_10,var_11,var_08,var_07 + 2 * var_00); + var_12.glowcolor = (0,0,0); + var_12.glowalpha = 0; + var_12.hidewheninmenu = 1; + var_12.archived = 0; + var_12.alpha = 0; + self.splashdesc2 = var_12; + var_12 = undefined; + var_12 = createfontstring_mp(var_05,var_06); + var_12 maps\_hud_util::setparent(self.splashtitle); + var_12 maps\_hud_util::setpoint(var_10,var_11,var_08,var_07 + 3 * var_00); + var_12.glowcolor = (0,0,0); + var_12.glowalpha = 0; + var_12.hidewheninmenu = 1; + var_12.archived = 0; + var_12.alpha = 0; + self.splashdesc3 = var_12; + var_12 = undefined; + var_12 = createfontstring_mp(var_05,var_06); + var_12 maps\_hud_util::setparent(self.splashtitle); + var_12 maps\_hud_util::setpoint(var_10,var_11,var_08,var_07 + 4 * var_00); + var_12.glowcolor = (0,0,0); + var_12.glowalpha = 0; + var_12.hidewheninmenu = 1; + var_12.archived = 0; + var_12.alpha = 0; + self.var_3E1A = var_12; + var_12 = undefined; + var_12 = createfontstring_mp("hudbig",0.75); + var_12 maps\_hud_util::setparent(self.splashdesc); + var_12 maps\_hud_util::setpoint(var_10,var_11,var_0C,var_0B); + var_12.glowcolor = (0,0,0); + var_12.glowalpha = 0; + var_12.hidewheninmenu = 1; + var_12.archived = 0; + var_12.alpha = 0; + var_12.color = (0.75,1,0.75); + self.splashhint = var_12; + var_12 = undefined; + var_12 = createicon_mp("white",var_0D,var_0D); + var_12 maps\_hud_util::setparent(self.splashtitle); + var_12 maps\_sp_airdrop::setpoint(var_10,var_11,var_0F,var_0E); + var_12.hidewheninmenu = 1; + var_12.archived = 0; + var_12.alpha = 0; + self.splashicon = var_12; +} + +//Function Number: 8 +createfontstring_mp(param_00,param_01) +{ + var_02 = newclienthudelem(self); + var_02.hidden = 0; + var_02.elemtype = "font"; + var_02.font = param_00; + var_02.fontscale = param_01; + var_02.basefontscale = var_02.fontscale; + var_02.x = 0; + var_02.y = 0; + var_02.width = 0; + var_02.height = int(level.fontheight * var_02.fontscale); + var_02.xoffset = 0; + var_02.yoffset = 0; + var_02.children = []; + var_02 maps\_hud_util::setparent(level.uiparent); + return var_02; +} + +//Function Number: 9 +createicon_mp(param_00,param_01,param_02) +{ + var_03 = newclienthudelem(self); + var_03.elemtype = "icon"; + var_03.x = 0; + var_03.y = 0; + var_03.width = param_01; + var_03.height = param_02; + var_03.basewidth = var_03.width; + var_03.baseheight = var_03.height; + var_03.xoffset = 0; + var_03.yoffset = 0; + var_03.children = []; + var_03 maps\_hud_util::setparent(level.uiparent); + var_03.hidden = 0; + if(isdefined(param_00)) + { + var_03 setshader(param_00,param_01,param_02); + var_03.shader = param_00; + } + + return var_03; +} + +//Function Number: 10 +waittill_players_ready_for_splash(param_00) +{ + var_01 = gettime() + milliseconds(param_00); + for(;;) + { + if(gettime() >= var_01) + { + break; + } + + var_02 = 0; + foreach(var_04 in level.players) + { + if(var_04.doingnotify || var_04.using_uav) + { + var_02 = 1; + break; + } + } + + if(var_02) + { + wait 0.1; + continue; + } + + break; + } +} + +//Function Number: 11 +transitionreset() +{ + self settext(""); + self.x = self.xoffset; + self.y = self.yoffset; + if(self.elemtype == "font") + { + self.fontscale = self.basefontscale; + self.label = &""; + } + else if(self.elemtype == "icon") + { + self setshader(self.shader,self.width,self.height); + } + + self.alpha = 0; +} + +//Function Number: 12 +transitionzoomin(param_00) +{ + switch(self.elemtype) + { + case "timer": + case "font": + self.fontscale = 6.3; + self changefontscaleovertime(param_00); + self.fontscale = self.basefontscale; + break; + + case "icon": + self setshader(self.shader,self.width * 6,self.height * 6); + self scaleovertime(param_00,self.width,self.height); + break; + } +} + +//Function Number: 13 +transitionpulsefxin(param_00,param_01) +{ + var_02 = int(param_00) * 1000; + var_03 = int(param_01) * 1000; + switch(self.elemtype) + { + case "timer": + case "font": + self setpulsefx(var_02 + 250,var_03 + var_02,var_02 + 250); + break; + + default: + break; + } +} + +//Function Number: 14 +transitionslidein(param_00,param_01) +{ + if(!isdefined(param_01)) + { + param_01 = "left"; + } + + switch(param_01) + { + case "left": + self.x = self.x + 1000; + break; + + case "right": + self.x = self.x - 1000; + break; + + case "up": + self.y = self.y - 1000; + break; + + case "down": + self.y = self.y + 1000; + break; + } + + self moveovertime(param_00); + self.x = self.xoffset; + self.y = self.yoffset; +} + +//Function Number: 15 +transitionslideout(param_00,param_01) +{ + if(!isdefined(param_01)) + { + param_01 = "left"; + } + + var_02 = self.xoffset; + var_03 = self.yoffset; + switch(param_01) + { + case "left": + var_02 = var_02 + 1000; + break; + + case "right": + var_02 = var_02 - 1000; + break; + + case "up": + var_03 = var_03 - 1000; + break; + + case "down": + var_03 = var_03 + 1000; + break; + } + + self.alpha = 1; + self moveovertime(param_00); + self.x = var_02; + self.y = var_03; +} + +//Function Number: 16 +transitionzoomout(param_00) +{ + switch(self.elemtype) + { + case "timer": + case "font": + self changefontscaleovertime(param_00); + self.fontscale = 6.3; + break; + + case "icon": + self scaleovertime(param_00,self.width * 6,self.height * 6); + break; + } +} + +//Function Number: 17 +transitionfadein(param_00) +{ + self fadeovertime(param_00); + if(isdefined(self.maxalpha)) + { + self.alpha = self.maxalpha; + return; + } + + self.alpha = 1; +} + +//Function Number: 18 +transitionfadeout(param_00) +{ + self fadeovertime(0.15); + self.alpha = 0; +} + +//Function Number: 19 +get_spawners_by_classname(param_00) +{ + var_01 = getentarray(param_00,"classname"); + var_02 = []; + foreach(var_04 in var_01) + { + if(isspawner(var_04)) + { + var_02[var_02.size] = var_04; + } + } + + return var_02; +} + +//Function Number: 20 +get_spawners_by_targetname(param_00) +{ + var_01 = getspawnerarray(); + var_02 = []; + foreach(var_04 in var_01) + { + if(isdefined(var_04.targetname) && var_04.targetname == param_00) + { + var_02[var_02.size] = var_04; + } + } + + return var_02; +} + +//Function Number: 21 +get_furthest_from_these(param_00,param_01,param_02) +{ + param_02 = common_scripts\utility::ter_op(isdefined(param_02),param_02,1); + param_02 = max(1,param_02); + while(param_00.size > param_02) + { + foreach(var_04 in param_01) + { + var_05 = maps\_utility::getclosest(var_04.origin,param_00); + if(param_00.size > param_02) + { + param_00 = common_scripts\utility::array_remove(param_00,var_05); + continue; + } + + var_05 = param_00[0]; + thread maps\_squad_enemies::draw_debug_marker(var_05.origin,(1,1,1)); + break; + } + } + + return param_00[randomint(param_00.size)]; +} + +//Function Number: 22 +throw_grenade_at_player(param_00) +{ + self endon("death"); + param_00 endon("stopped camping"); + if(common_scripts\utility::cointoss()) + { + self.grenadeweapon = "flash_grenade"; + } + else + { + self.grenadeweapon = "fraggrenade"; + } + + self.grenadeammo = 2; + self.script_forcegrenade = 1; + wait 8; + self.script_forcegrenade = 0; + self.grenadeweapon = "fraggrenade"; +} + +//Function Number: 23 +clear_from_boss_array_when_dead() +{ + self waittill("death"); + var_00 = []; + foreach(var_02 in level.bosses) + { + if(isdefined(var_02) && !isdefined(self) || self != var_02) + { + var_00[var_00.size] = var_02; + } + } + + level.bosses = var_00; +} + +//Function Number: 24 +clear_from_special_ai_array_when_dead() +{ + self waittill("death"); + var_00 = []; + foreach(var_02 in level.special_ai) + { + if(isalive(var_02)) + { + var_00[var_00.size] = var_02; + } + } + + level.special_ai = var_00; +} + +//Function Number: 25 +was_headshot() +{ + if(isdefined(self.died_of_headshot) && self.died_of_headshot) + { + return 1; + } + + if(!isdefined(self.damagelocation)) + { + return 0; + } + + return self.damagelocation == "helmet" || self.damagelocation == "head" || self.damagelocation == "neck"; +} + +//Function Number: 26 +chopper_spawn_from_targetname_and_drive(param_00,param_01,param_02) +{ + var_03 = "passed start struct without targetname: " + param_00; + param_02.in_use = 1; + var_04 = chopper_spawn_from_targetname(param_00,param_01); + var_04.loc_current = param_02; + var_04 thread maps\_vehicle::vehicle_paths(param_02); + return var_04; +} + +//Function Number: 27 +chopper_spawn_from_targetname(param_00,param_01) +{ + var_02 = getent(param_00,"targetname"); + var_03 = maps\_so_survival_ai::get_ai_health(param_00); + if(isdefined(var_03)) + { + var_02.script_startinghealth = var_03; + } + + while(isdefined(var_02.vehicle_spawned_thisframe)) + { + wait 0.05; + } + + if(isdefined(param_01)) + { + var_02.origin = param_01; + } + + var_04 = maps\_vehicle::spawn_vehicle_from_targetname(param_00); + return var_04; +} + +//Function Number: 28 +chopper_spawn_pilot_from_targetname(param_00,param_01) +{ + var_02 = getspawnerarray(); + var_03 = undefined; + foreach(var_03 in var_02) + { + if(isdefined(var_03.targetname) && var_03.targetname == param_00) + { + break; + } + } + + var_06 = chopper_spawn_passenger(var_03,param_01,1); + var_06.health = 9999; + return var_06; +} + +//Function Number: 29 +chopper_spawn_passenger(param_00,param_01,param_02) +{ + var_03 = undefined; + for(;;) + { + param_00.count = 1; + if(isdefined(param_02) && param_02) + { + var_03 = maps\_utility::dronespawn(param_00); + break; + } + else + { + var_03 = param_00 maps\_utility::spawn_ai(1); + if(!maps\_utility::spawn_failed(var_03)) + { + break; + } + } + + wait 0.5; + } + + if(isdefined(param_01)) + { + var_03.forced_startingposition = param_01; + } + + maps\_utility::guy_enter_vehicle(var_03); + return var_03; +} + +//Function Number: 30 +chopper_drop_smoke_at_unloading() +{ + self endon("death"); + self waittill("unloading"); + var_00 = self.origin - vectornormalize(anglestoforward(self.angles)) * 145; + var_01 = maps\_utility::groundpos(var_00); + magicgrenademanual("smoke_grenade_fast",var_01,(0,0,-1),0); +} + +//Function Number: 31 +chopper_wait_for_cloest_open_path_start(param_00,param_01,param_02) +{ + var_03 = undefined; + for(;;) + { + var_03 = chopper_closest_open_path_start(param_00,param_01,param_02); + if(isdefined(var_03)) + { + break; + } + + wait 0.25; + } + + return var_03; +} + +//Function Number: 32 +chopper_closest_open_path_start(param_00,param_01,param_02) +{ + var_03 = common_scripts\utility::getstructarray(param_01,"targetname"); + var_04 = undefined; + var_05 = undefined; + var_06 = undefined; + foreach(var_08 in var_03) + { + if(isdefined(var_08.in_use)) + { + continue; + } + + var_09 = var_08; + switch(param_02) + { + case "script_unload": + while(!isdefined(var_09.script_unload)) + { + var_09 = common_scripts\utility::getstruct(var_09.target,"targetname"); + } + + if(!isdefined(var_09.script_unload)) + { + break; + } + break; + + case "script_stopnode": + while(!isdefined(var_09.script_stopnode)) + { + var_09 = common_scripts\utility::getstruct(var_09.target,"targetname"); + } + + if(!isdefined(var_09.script_stopnode)) + { + break; + } + break; + + default: + break; + } + + if(!isdefined(var_06)) + { + var_06 = var_09; + var_05 = distance2d(param_00,var_09.origin); + var_04 = var_08; + continue; + } + + var_0A = distance2d(param_00,var_09.origin); + if(var_0A < var_05) + { + var_06 = var_09; + var_05 = distance2d(param_00,var_06.origin); + var_04 = var_08; + } + } + + return var_04; +} + +//Function Number: 33 +mp_ents_cleanup() +{ + var_00 = getentarray(); + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + if(isdefined(var_00[var_01].script_gameobjectname)) + { + var_00[var_01] delete(); + } + } +} + +//Function Number: 34 +precache_loadout_item(param_00) +{ + if(isdefined(param_00) && param_00 != "") + { + precacheitem(param_00); + } +} + +//Function Number: 35 +int_capped(param_00,param_01,param_02) +{ + return int(max(param_01,min(param_02,param_00))); +} + +//Function Number: 36 +float_capped(param_00,param_01,param_02) +{ + return max(param_01,min(param_02,param_00)); +} + +//Function Number: 37 +delete_on_load() +{ + var_00 = getentarray("delete","targetname"); + foreach(var_02 in var_00) + { + var_02 delete(); + } +} + +//Function Number: 38 +milliseconds(param_00) +{ + return param_00 * 1000; +} + +//Function Number: 39 +seconds(param_00) +{ + return param_00 / 1000; +} + +//Function Number: 40 +random_player_origin() +{ + return level.players[randomint(level.players.size)].origin; +} + +//Function Number: 41 +highest_player_rank() +{ + var_00 = -1; + foreach(var_02 in level.players) + { + var_03 = var_02 maps\_rank::getrank(); + if(var_03 > var_00) + { + var_00 = var_03; + } + } + + return var_00; +} + +//Function Number: 42 +ent_linked_delete() +{ + self endon("death"); + self unlink(); + wait 0.05; + if(isdefined(self)) + { + self delete(); + } +} + +//Function Number: 43 +so_survival_kill_ai(param_00,param_01,param_02) +{ + if(isdefined(param_00)) + { + if(isdefined(param_01) && isdefined(param_02)) + { + self notify("death",param_00,param_01,param_02); + self kill(); + return; + } + + self kill(param_00.origin,param_00); + return; + } + + self kill(); +} + +//Function Number: 44 +break_glass() +{ + var_00 = common_scripts\utility::getstructarray("struct_break_glass","targetname"); + foreach(var_02 in var_00) + { + glassradiusdamage(var_02.origin,64,100,99); + } +} + +//Function Number: 45 +so_survival_validate_entities() +{ + var_00 = getentarray("armory_script_brushmodel","targetname"); + foreach(var_02 in var_00) + { + var_02 notsolid(); + } + + var_04 = (0,0,0); + var_05 = 60; + var_06 = 60; + var_07 = []; + var_7B = common_scripts\utility::array_combine(var_7B,common_scripts\utility::getstructarray("so_claymore_loc","targetname")); + var_7B = common_scripts\utility::array_combine(var_7B,common_scripts\utility::getstructarray("leader","script_noteworthy")); + var_7B = common_scripts\utility::array_combine(var_7B,common_scripts\utility::getstructarray("follower","script_noteworthy")); + foreach(var_09 in var_7B) + { + var_09 so_survival_validate_entity(var_05,var_06,var_07); + } + + foreach(var_03 in var_01) + { + var_03 solid(); + } + + wait 2; + if(isdefined(level.debug_survival_error_msgs) && level.debug_survival_error_msgs.size) + { + foreach(var_0E in level.debug_survival_error_msgs) + { + } + } +} + +//Function Number: 46 +so_survival_validate_entity(param_00,param_01,param_02) +{ + if(!isdefined(level.debug_survival_error_msgs)) + { + level.debug_survival_error_msgs = []; + } + + if(!isdefined(level.debug_survival_error_locs)) + { + level.debug_survival_error_locs = []; + } + + var_03 = self.origin + param_00 + (0,0,param_01); + var_04 = self.origin + param_00; + var_05 = physicstrace(var_03,var_04); + if(distance(var_05,var_04) > 0.1) + { + level.debug_survival_error_msgs[level.debug_survival_error_msgs.size] = "Error: Survival Entity may be in solid at: " + self.origin; + level.debug_survival_error_locs[level.debug_survival_error_locs.size] = self.origin; + return; + } + + var_03 = self.origin + param_00; + var_04 = self.origin + param_00 - (0,0,param_02); + var_05 = physicstrace(var_03,var_04); + if(distance(var_05,var_04) < 0.1) + { + level.debug_survival_error_msgs[level.debug_survival_error_msgs.size] = "Error: Survival Entity floating or under floor: " + self.origin; + level.debug_survival_error_locs[level.debug_survival_error_locs.size] = self.origin; + } +} + +//Function Number: 47 +so_survival_display_entity_error_3d() +{ + if(!isdefined(level.debug_survival_error_locs) || !level.debug_survival_error_locs.size) + { + return; + } + + level endon("special_op_terminated"); + for(;;) + { + foreach(var_01 in level.debug_survival_error_locs) + { + } + + wait 10; + } +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_so_survival_dialog.gsc b/MW3/PC/SP/maps/_so_survival_dialog.gsc new file mode 100644 index 0000000..63f5c3d --- /dev/null +++ b/MW3/PC/SP/maps/_so_survival_dialog.gsc @@ -0,0 +1,425 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_so_survival_dialog.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 14 + * Decompile Time: 235 ms + * Timestamp: 10/27/2023 2:21:28 AM +*******************************************************************/ + +//Function Number: 1 +survival_dialog_init() +{ + if(getdvarint("survival_chaos") == 1) + { + chaos_dialog_radio_setup(); + } + else + { + survival_dialog_radio_setup(); + } + + thread survival_dialog_wave_start(); + thread survival_dialog_boss(); + thread survival_dialog_wave_end(); + thread survival_dialog_airsupport(); + thread survival_dialog_claymore_plant(); + thread survival_dialog_sentry_updates(); +} + +//Function Number: 2 +survival_dialog_wave_start() +{ + level endon("special_op_terminated"); + var_00 = []; + for(;;) + { + level waittill("wave_started",var_01); + var_02 = level common_scripts\utility::waittill_any_timeout(1.5,"wave_ended"); + if(var_02 == "wave_ended") + { + continue; + } + + if(var_01 == 1) + { + if(maps\_utility::is_coop()) + { + maps\_utility::radio_dialogue("so_hq_mission_intro"); + } + else + { + maps\_utility::radio_dialogue("so_hq_mission_intro_sp"); + } + + continue; + } + + var_03 = dialog_get_special_ai_type(var_01,var_00); + if(isdefined(var_03) && var_03 != "") + { + if(!isdefined(var_00[var_03])) + { + var_00[var_03] = 1; + } + else + { + var_00[var_03]++; + } + } + else + { + var_03 = maps\_so_survival_ai::get_squad_type(var_01); + } + + if(isdefined(var_03) && var_03 != "") + { + if(isdefined(level.scr_radio["so_hq_enemy_intel_" + var_03])) + { + maps\_utility::radio_dialogue("so_hq_enemy_intel_" + var_03); + } + } + } +} + +//Function Number: 3 +dialog_get_special_ai_type(param_00,param_01) +{ + var_02 = maps\_so_survival_ai::get_special_ai(param_00); + if(!isdefined(var_02) || !var_02.size) + { + return undefined; + } + + foreach(var_04 in var_02) + { + if(!isdefined(param_01[var_04])) + { + param_01[var_04] = 0; + } + } + + var_06 = ""; + var_07 = 0; + foreach(var_0A, var_09 in param_01) + { + if(maps\_utility::array_contains(var_02,var_0A) && var_06 == "" || var_09 < var_07) + { + var_06 = var_0A; + var_07 = var_09; + } + } + + return var_06; +} + +//Function Number: 4 +survival_dialog_boss() +{ + level endon("special_op_terminated"); + for(;;) + { + var_00 = 0; + level waittill("boss_spawning",var_01); + var_02 = maps\_so_survival_ai::get_bosses_ai(var_01); + var_03 = maps\_so_survival_ai::get_bosses_nonai(var_01); + if(isdefined(var_03) && var_03.size) + { + if(var_03.size == 1) + { + if(isdefined(level.scr_radio["so_hq_boss_intel_" + var_03[0]])) + { + maps\_utility::radio_dialogue("so_hq_boss_intel_" + var_03[0]); + var_00 = 1; + } + } + else if(isdefined(level.scr_radio["so_hq_boss_intel_" + var_03[0] + "_many"])) + { + maps\_utility::radio_dialogue("so_hq_boss_intel_" + var_03[0] + "_many"); + var_00 = 1; + } + } + + if(isdefined(var_02) && var_02.size) + { + if(var_00) + { + var_04 = level common_scripts\utility::waittill_any_timeout(1.5,"wave_ended"); + if(var_04 == "wave_ended") + { + continue; + } + } + + if(var_02.size == 1) + { + if(isdefined(level.scr_radio["so_hq_boss_intel_" + var_02[0]])) + { + maps\_utility::radio_dialogue("so_hq_boss_intel_" + var_02[0]); + } + + continue; + } + + if(isdefined(level.scr_radio["so_hq_enemy_intel_boss_transport_many"])) + { + maps\_utility::radio_dialogue("so_hq_enemy_intel_boss_transport_many"); + } + } + } +} + +//Function Number: 5 +survival_dialog_wave_end() +{ + level endon("special_op_terminated"); + for(;;) + { + level waittill("wave_ended",var_00); + var_01 = level common_scripts\utility::waittill_any_timeout(1.5,"wave_started"); + if(var_01 == "wave_started") + { + continue; + } + + var_02 = ""; + if(isdefined(level.armory_unlock)) + { + if(isdefined(level.armory_unlock["weapon"]) && level.armory_unlock["weapon"] == var_00) + { + var_02 = "weapon"; + } + else if(isdefined(level.armory_unlock["equipment"]) && level.armory_unlock["equipment"] == var_00) + { + var_02 = "equipment"; + } + else if(isdefined(level.armory_unlock["airsupport"]) && level.armory_unlock["airsupport"] == var_00) + { + var_02 = "airsupport"; + } + } + + if(var_02 != "" && isdefined(level.scr_radio["so_hq_armory_open_" + var_02])) + { + maps\_utility::radio_dialogue("so_hq_armory_open_" + var_02); + continue; + } + + maps\_utility::radio_dialogue("so_hq_wave_over_flavor"); + } +} + +//Function Number: 6 +survival_dialog_airsupport() +{ + level endon("special_op_terminated"); + for(;;) + { + level waittill("so_airsupport_incoming",var_00); + if(isdefined(level.scr_radio["so_hq_as_" + var_00])) + { + maps\_utility::radio_dialogue("so_hq_as_" + var_00); + } + } +} + +//Function Number: 7 +survival_dialog_claymore_plant() +{ + level endon("special_op_terminated"); + for(;;) + { + var_00 = level common_scripts\utility::waittill_any_return("ai_claymore_planted","ai_chembomb_planted"); + if(var_00 == "ai_claymore_planted") + { + if(isdefined(level.scr_radio["so_hq_enemy_update_claymore"])) + { + maps\_utility::radio_dialogue("so_hq_enemy_update_claymore"); + } + } + else if(var_00 == "ai_chembomb_planted") + { + } + + level waittill("wave_ended"); + } +} + +//Function Number: 8 +survival_dialog_armory_restocked(param_00) +{ + if(param_00 != "" && isdefined(level.scr_radio["so_hq_armory_stocked_" + param_00])) + { + maps\_utility::radio_dialogue("so_hq_armory_stocked_" + param_00); + } +} + +//Function Number: 9 +survival_dialog_sentry_updates() +{ + level endon("special_op_terminated"); + var_00 = ""; + for(;;) + { + var_01 = level common_scripts\utility::waittill_any_return("a_sentry_died","a_sentry_is_underattack","wave_ended"); + if(var_01 == "wave_ended") + { + var_00 = ""; + } + else if(var_01 == "a_sentry_is_underattack" && var_00 != "a_sentry_is_underattack") + { + thread survival_dialog_radio_sentry_underattack(); + } + else if(var_01 == "a_sentry_died") + { + thread survival_dialog_radio_sentry_down(); + } + + var_00 = var_01; + } +} + +//Function Number: 10 +survival_dialog_radio_sentry_down() +{ + if(isdefined(level.scr_radio["so_hq_sentry_down"])) + { + maps\_utility::radio_dialogue("so_hq_sentry_down"); + } +} + +//Function Number: 11 +survival_dialog_radio_sentry_underattack() +{ + if(isdefined(level.scr_radio["so_hq_sentry_underattack"])) + { + maps\_utility::radio_dialogue("so_hq_sentry_underattack"); + } +} + +//Function Number: 12 +survival_dialog_player_down() +{ + level endon("special_op_terminated"); + for(;;) + { + level waittill("so_player_down"); + if(isdefined(level.scr_radio["so_hq_player_down"])) + { + maps\_utility::radio_dialogue("so_hq_player_down"); + } + } +} + +//Function Number: 13 +survival_dialog_radio_setup() +{ + level.scr_radio["so_hq_mission_intro"] = "so_hq_mission_intro"; + level.scr_radio["so_hq_mission_intro_sp"] = "so_hq_mission_intro_sp"; + level.scr_radio["so_hq_enemy_intel_easy"] = "so_hq_enemy_intel_generic"; + level.scr_radio["so_hq_enemy_intel_regular"] = "so_hq_enemy_intel_generic"; + level.scr_radio["so_hq_enemy_intel_hardened"] = "so_hq_enemy_intel_generic"; + level.scr_radio["so_hq_enemy_intel_veteran"] = "so_hq_enemy_intel_generic"; + level.scr_radio["so_hq_enemy_intel_elite"] = "so_hq_enemy_intel_generic"; + level.scr_radio["so_hq_enemy_intel_claymore"] = "so_hq_enemy_intel_generic"; + level.scr_radio["so_hq_enemy_intel_martyrdom"] = "so_hq_enemy_intel_martyrdom"; + level.scr_radio["so_hq_enemy_intel_chemical"] = "so_hq_enemy_intel_chemical"; + level.scr_radio["so_hq_enemy_intel_dog_splode"] = "so_hq_enemy_intel_dog_splode"; + level.scr_radio["so_hq_enemy_intel_dog_reg"] = "so_hq_enemy_intel_dog_reg"; + level.scr_radio["so_hq_armory_open_weapon"] = "so_hq_armory_open_weapon"; + level.scr_radio["so_hq_armory_open_equipment"] = "so_hq_armory_open_equipment"; + level.scr_radio["so_hq_armory_open_airsupport"] = "so_hq_armory_open_airstrike"; + level.scr_radio["so_hq_armory_stocked_all"] = "so_hq_armory_stocked_all"; + level.scr_radio["so_hq_armory_stocked_equipment"] = "so_hq_armory_stocked_equipment"; + level.scr_radio["so_hq_wave_over_flavor"] = "so_hq_wave_over_flavor"; + level.scr_radio["so_hq_enemy_update_claymore"] = "so_hq_enemy_update_claymore"; + level.scr_radio["so_hq_sentry_down"] = "so_hq_sentry_down"; + level.scr_radio["so_hq_sentry_underattack"] = "so_hq_sentry_underattack"; + level.scr_radio["so_hq_player_down"] = "so_hq_player_down"; + level.scr_radio["so_hq_boss_intel_jug_regular"] = "so_hq_enemy_intel_boss_transport"; + level.scr_radio["so_hq_boss_intel_jug_riotshield"] = "so_hq_enemy_intel_boss_transport"; + level.scr_radio["so_hq_boss_intel_jug_explosive"] = "so_hq_enemy_intel_boss_transport"; + level.scr_radio["so_hq_boss_intel_jug_headshot"] = "so_hq_enemy_intel_boss_transport"; + level.scr_radio["so_hq_boss_intel_jug_minigun"] = "so_hq_enemy_intel_boss_transport"; + level.scr_radio["so_hq_enemy_intel_boss_transport_many"] = "so_hq_enemy_intel_boss_transport_many"; + level.scr_radio["so_hq_boss_intel_chopper"] = "so_hq_boss_intel_chopper"; + level.scr_radio["so_hq_boss_intel_chopper_many"] = "so_hq_boss_intel_chopper_many"; + level.scr_radio["so_hq_as_friendly_support_delta"] = "so_hq_airsupport_ally_delta"; + level.scr_radio["so_hq_as_friendly_support_riotshield"] = "so_hq_airsupport_ally_riotshield"; + level.scr_radio["so_hq_uav_busy"] = "so_hq_uav_busy"; +} + +//Function Number: 14 +chaos_dialog_radio_setup() +{ + level.scr_radio["so_tf_1_success_generic"] = "cm_tf_1_success_generic"; + level.scr_radio["so_tf_1_success_jerk"] = "cm_tf_1_success_jerk"; + level.scr_radio["so_tf_1_success_best"] = "cm_tf_1_success_best"; + level.scr_radio["so_tf_1_fail_bleedout"] = "cm_tf_1_fail_bleedout"; + level.scr_radio["so_tf_1_fail_generic"] = "cm_tf_1_fail_generic"; + level.scr_radio["so_tf_1_fail_generic_jerk"] = "cm_tf_1_fail_generic_jerk"; + level.scr_radio["so_tf_1_fail_time"] = "cm_tf_1_fail_time"; + level.scr_radio["so_hq_mission_intro"] = "cm_bp_mission_intro_coop"; + level.scr_radio["so_hq_mission_intro_sp"] = "cm_bp_mission_intro"; + level.scr_radio["so_hq_enemy_intel_easy"] = "so_hq_enemy_intel_generic"; + level.scr_radio["so_hq_enemy_intel_regular"] = "so_hq_enemy_intel_generic"; + level.scr_radio["so_hq_enemy_intel_hardened"] = "so_hq_enemy_intel_generic"; + level.scr_radio["so_hq_enemy_intel_veteran"] = "so_hq_enemy_intel_generic"; + level.scr_radio["so_hq_enemy_intel_elite"] = "so_hq_enemy_intel_generic"; + level.scr_radio["so_hq_enemy_intel_claymore"] = "so_hq_enemy_intel_generic"; + level.scr_radio["so_hq_enemy_intel_martyrdom"] = "so_hq_enemy_intel_martyrdom"; + level.scr_radio["so_hq_enemy_intel_chemical"] = "so_hq_enemy_intel_chemical"; + level.scr_radio["so_hq_enemy_intel_chemical"] = ""; + level.scr_radio["so_hq_enemy_intel_dog"] = "cm_bp_enemy_dog"; + level.scr_radio["so_hq_enemy_intel_dogs"] = "cm_bp_enemy_dogs"; + level.scr_radio["so_hq_wave_over_flavor"] = "so_hq_wave_over_flavor"; + level.scr_radio["so_hq_player_down"] = "so_hq_player_down"; + level.scr_radio["so_hq_boss_intel_jug_regular"] = "cm_bp_enemy_juggernaut"; + level.scr_radio["so_hq_boss_intel_jug_riotshield"] = "cm_bp_enemy_juggernaut"; + level.scr_radio["so_hq_boss_intel_jug_explosive"] = "cm_bp_enemy_juggernaut"; + level.scr_radio["so_hq_boss_intel_jug_headshot"] = "cm_bp_enemy_juggernaut"; + level.scr_radio["so_hq_boss_intel_jug_minigun"] = "cm_bp_enemy_juggernaut"; + level.scr_radio["so_hq_enemy_intel_boss_transport_many"] = "cm_bp_enemy_juggernauts"; + level.scr_radio["so_hq_boss_intel_chopper"] = "cm_bp_boss_intel_chopper"; + level.scr_radio["so_hq_boss_intel_chopper_many"] = "cm_bp_boss_intel_chopper_many"; + level.scr_radio["so_hq_uav_busy"] = "so_hq_uav_busy"; + level.scr_radio["chaos_perk_stalker"] = "cm_bp_perk_stalker"; + level.scr_radio["chaos_perk_excond"] = "cm_bp_perk_excond"; + level.scr_radio["chaos_perk_sleight"] = "cm_bp_perk_sleight"; + level.scr_radio["chaos_perk_quickdraw"] = "cm_bp_perk_quickdraw"; + level.scr_radio["chaos_perk_steadyaim"] = "cm_bp_perk_steadyaim"; + level.scr_radio["chaos_perk_regeneration"] = "cm_bp_perk_regeneration"; + level.scr_radio["chaos_perk_juiced"] = "cm_bp_perk_juiced"; + level.scr_radio["chaos_deliverd_socre"] = "cm_bp_2cp_bonus"; + level.scr_radio["chaos_deliverd_sentry"] = "cm_bp_2cp_sentrygun"; + level.scr_radio["chaos_deliverd_laststand"] = "cm_bp_2cp_laststand"; + level.scr_radio["chaos_deliverd_combomult"] = "cm_bp_2cp_combomult"; + level.scr_radio["chaos_deliverd_extratime"] = "cm_bp_2cp_extratime"; + level.scr_radio["chaos_deliverd_freeze"] = "cm_bp_2cp_freeze"; + level.scr_radio["chaos_time_almostup"] = "cm_bp_time_almostup"; + level.scr_radio["chaos_10sec_left"] = "cm_bp_time_10seconds"; + level.scr_radio["chaos_30sec_left"] = "cm_bp_time_30seconds"; + level.scr_radio["chaos_overtime"] = "cm_bp_gen_overtime"; + level.scr_radio["chaos_keep_combo"] = "cm_bp_gen_maintaincombo"; + level.scr_radio["chaos_cp_inbound"] = "cm_bp_cp_inbound"; + level.scr_radio["chaos_cps_inbound"] = "cm_bp_cps_inbound"; + level.scr_radio["chaos_new_weapon"] = "cm_bp_gen_weapon"; + level.scr_radio["chaos_get_onekill"] = "cm_bp_laststand_onekill"; + level.scr_radio["chaos_2_last_stand"] = "cm_bp_laststand_2remaining"; + level.scr_radio["chaos_1_last_stand"] = "cm_bp_laststand_finalstand"; + level.scr_radio["chaos_pickup_sentry"] = "cm_bp_cp_sentrygun"; + level.scr_radio["chaos_pickup_armor"] = "cm_bp_jugkill_armor"; + level.scr_radio["chaos_pickup_multiplier"] = "cm_bp_cp_combomult"; + level.scr_radio["chaos_pickup_laststand"] = "cm_bp_cp_laststand"; + level.scr_radio["chaos_pickup_time"] = "cm_bp_cp_extratime"; + level.scr_radio["chaos_pickup_points"] = "cm_bp_cp_bonus"; + level.scr_radio["chaos_pickup_freeze"] = "cm_bp_cp_freeze"; + level.scr_radio["chaos_action_explosion"] = "cm_bp_kills_explosion"; + level.scr_radio["chaos_action_3longshot"] = "cm_bp_kills_3longshot"; + level.scr_radio["chaos_action_3headshot"] = "cm_bp_kills_3headshot"; + level.scr_radio["chaos_action_3knife"] = "cm_bp_kills_3knife"; + level.scr_radio["chaos_action_triple"] = "cm_bp_kills_triple"; + level.scr_radio["chaos_action_quad"] = "cm_bp_kills_quad"; + level.scr_radio["chaos_action_multiple"] = "cm_bp_kills_multiple"; +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_so_survival_loot.gsc b/MW3/PC/SP/maps/_so_survival_loot.gsc new file mode 100644 index 0000000..c19238e --- /dev/null +++ b/MW3/PC/SP/maps/_so_survival_loot.gsc @@ -0,0 +1,306 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_so_survival_loot.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 19 + * Decompile Time: 283 ms + * Timestamp: 10/27/2023 2:21:07 AM +*******************************************************************/ + +//Function Number: 1 +loot_preload() +{ + for(var_00 = 0;var_00 <= 20;var_00++) + { + var_01 = get_loot_ref_by_index(var_00); + if(isdefined(var_01) && get_loot_type(var_01) == "weapon") + { + maps\_so_survival_code::precache_loadout_item(var_01); + } + } + + for(var_00 = 100;var_00 <= 199;var_00++) + { + var_02 = get_loot_version_by_index(var_00); + if(isdefined(var_02)) + { + maps\_so_survival_code::precache_loadout_item(var_02); + } + } +} + +//Function Number: 2 +loot_postload() +{ +} + +//Function Number: 3 +loot_init() +{ + loot_populate(0,20,100,199); +} + +//Function Number: 4 +loot_populate(param_00,param_01,param_02,param_03) +{ + level.loot_version_array = []; + for(var_04 = param_02;var_04 <= param_03;var_04++) + { + var_05 = get_loot_version_by_index(var_04); + if(isdefined(var_05) && var_05 != "") + { + level.loot_version_array[level.loot_version_array.size] = var_05; + } + } + + level.loot_info_array = []; + for(var_04 = param_00;var_04 <= param_01;var_04++) + { + var_06 = get_loot_ref_by_index(var_04); + if(!isdefined(var_06) || var_06 == "") + { + continue; + } + + var_07 = get_loot_type(var_06); + if(!isdefined(level.loot_info_array[var_07])) + { + level.loot_info_array[var_07] = []; + } + + var_08 = spawnstruct(); + var_08.index = var_04; + var_08.ref = var_06; + var_08.type = var_07; + var_08.name = get_loot_name(var_06); + var_08.var_189B = get_loot_desc(var_06); + var_08.chance = get_loot_chance(var_06); + var_08.wave_unlock = get_loot_wave_unlock(var_06); + var_08.wave_lock = get_loot_wave_lock(var_06); + var_08.wave_dropped = -999; + var_08.rank = get_loot_rank(var_06); + var_08.versions = get_loot_versions(var_06); + level.loot_info_array[var_07][var_06] = var_08; + } +} + +//Function Number: 5 +loot_roll(param_00) +{ + if(!isdefined(level.loot_info_array) || !isdefined(level.loot_info_array["weapon"])) + { + return 0; + } + + var_01 = []; + foreach(var_03 in level.loot_info_array["weapon"]) + { + if(level.current_wave >= var_03.wave_unlock && level.current_wave < var_03.wave_lock && level.current_wave - var_03.wave_dropped >= 2 && maps\_so_survival_code::highest_player_rank() >= var_03.rank) + { + var_01[var_01.size] = var_03; + } + } + + if(!var_01.size) + { + return 0; + } + + var_01 = maps\_utility_joec::exchange_sort_by_handler(var_01,::loot_roll_compare_type_wave_dropped); + var_05 = undefined; + foreach(var_03 in var_01) + { + var_07 = common_scripts\utility::ter_op(isdefined(param_00),param_00,var_03.chance); + if(var_07 > randomfloatrange(0,1)) + { + var_05 = var_03.versions[randomint(var_03.versions.size)]; + var_03.wave_dropped = level.current_wave; + break; + } + } + + if(isdefined(var_05)) + { + var_09 = var_05; + var_0A = getweaponmodel(var_09); + self.dropweapon = 0; + thread loot_drop_on_death("weapon_" + var_09,var_09,"weapon",var_0A,"tag_stowed_back"); + return 1; + } + + return 0; +} + +//Function Number: 6 +loot_roll_compare_type_wave_dropped() +{ + var_00 = common_scripts\utility::ter_op(isdefined(self) && isdefined(self.wave_dropped),self.wave_dropped,-999); + return var_00; +} + +//Function Number: 7 +loot_drop_on_death(param_00,param_01,param_02,param_03,param_04) +{ + level endon("special_op_terminated"); + var_05 = spawn("script_model",self gettagorigin(param_04)); + var_05 setmodel(param_03); + var_05 linkto(self,param_04,(0,0,0),(0,0,0)); + common_scripts\utility::waittill_any("death","long_death"); + if(!isdefined(self)) + { + return; + } + + var_06 = spawn(param_00,self gettagorigin(param_04)); + if(isdefined(param_02) && param_02 == "weapon") + { + var_07 = int(max(1,0.4 * weaponclipsize(param_01))); + var_08 = int(max(1,0.5 * weaponmaxammo(param_01))); + var_06 itemweaponsetammo(var_07,var_08); + var_09 = weaponaltweaponname(param_01); + if(var_09 != "none") + { + var_0A = int(max(1,0.5 * weaponclipsize(var_09))); + var_0B = int(max(1,0.5 * weaponmaxammo(var_09))); + var_06 itemweaponsetammo(var_0A,var_0B,var_0A,1); + } + } + + var_05 unlink(); + wait 0.05; + var_05 delete(); +} + +//Function Number: 8 +loot_item_exist(param_00) +{ + return isdefined(level.loot_info_array) && isdefined(level.loot_info_array[param_00]); +} + +//Function Number: 9 +get_loot_ref_by_index(param_00) +{ + return get_ref_by_index(param_00); +} + +//Function Number: 10 +get_ref_by_index(param_00) +{ + return tablelookup("sp/survival_loot.csv",0,param_00,1); +} + +//Function Number: 11 +get_loot_type(param_00) +{ + if(loot_item_exist(param_00)) + { + return level.loot_info_array[param_00].type; + } + + return tablelookup("sp/survival_loot.csv",1,param_00,2); +} + +//Function Number: 12 +get_loot_name(param_00) +{ + if(loot_item_exist(param_00)) + { + return level.loot_info_array[param_00].name; + } + + return tablelookup("sp/survival_loot.csv",1,param_00,3); +} + +//Function Number: 13 +get_loot_desc(param_00) +{ + if(loot_item_exist(param_00)) + { + return level.loot_info_array[param_00].var_189B; + } + + return tablelookup("sp/survival_loot.csv",1,param_00,4); +} + +//Function Number: 14 +get_loot_chance(param_00) +{ + if(loot_item_exist(param_00)) + { + return level.loot_info_array[param_00].chance; + } + + return float(tablelookup("sp/survival_loot.csv",1,param_00,5)); +} + +//Function Number: 15 +get_loot_wave_unlock(param_00) +{ + if(loot_item_exist(param_00)) + { + return level.loot_info_array[param_00].wave_unlock; + } + + return int(tablelookup("sp/survival_loot.csv",1,param_00,6)); +} + +//Function Number: 16 +get_loot_wave_lock(param_00) +{ + if(loot_item_exist(param_00)) + { + return level.loot_info_array[param_00].wave_lock; + } + + return int(tablelookup("sp/survival_loot.csv",1,param_00,7)); +} + +//Function Number: 17 +get_loot_rank(param_00) +{ + if(loot_item_exist(param_00)) + { + return level.loot_info_array[param_00].rank; + } + + return int(tablelookup("sp/survival_loot.csv",1,param_00,8)); +} + +//Function Number: 18 +get_loot_version_by_index(param_00) +{ + return get_ref_by_index(param_00); +} + +//Function Number: 19 +get_loot_versions(param_00) +{ + if(loot_item_exist(param_00)) + { + return level.loot_info_array[param_00].versions; + } + + var_01 = "joe"; + var_02 = []; + var_03 = param_00; + if(get_loot_type(param_00) == "weapon") + { + var_03 = getsubstr(param_00,0,param_00.size - 3); + } + + foreach(var_05 in level.loot_version_array) + { + if(issubstr(var_05,var_03)) + { + var_02[var_02.size] = var_05; + } + } + + if(!var_02.size) + { + var_02[var_02.size] = param_00; + } + + return var_02; +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_so_survival_perks.gsc b/MW3/PC/SP/maps/_so_survival_perks.gsc new file mode 100644 index 0000000..d31515a --- /dev/null +++ b/MW3/PC/SP/maps/_so_survival_perks.gsc @@ -0,0 +1,232 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_so_survival_perks.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 21 + * Decompile Time: 349 ms + * Timestamp: 10/27/2023 2:20:59 AM +*******************************************************************/ + +//Function Number: 1 +perks_preload() +{ +} + +//Function Number: 2 +perks_init() +{ +} + +//Function Number: 3 +give_perk(param_00) +{ + if(self hasperk(param_00,1)) + { + return 1; + } + + self clearperks(); + switch(param_00) + { + case "specialty_stalker": + thread give_perk_stalker(); + break; + + case "specialty_longersprint": + thread give_perk_longersprint(); + break; + + case "specialty_fastreload": + thread give_perk_fastreload(); + break; + + case "specialty_quickdraw": + thread give_perk_quickdraw(); + break; + + case "specialty_detectexplosive": + thread give_perk_detectexplosive(); + break; + + case "specialty_bulletaccuracy": + thread give_perk_bulletaccuracy(); + break; + + default: + thread give_perk_dummy(); + break; + } + + self notify("give_perk",param_00); + return 1; +} + +//Function Number: 4 +take_perk(param_00) +{ + if(!self hasperk(param_00,1)) + { + return; + } + + switch(param_00) + { + case "specialty_stalker": + thread take_perk_stalker(); + break; + + case "specialty_longersprint": + thread take_perk_longersprint(); + break; + + case "specialty_fastreload": + thread take_perk_fastreload(); + break; + + case "specialty_quickdraw": + thread take_perk_quickdraw(); + break; + + case "specialty_detectexplosive": + thread take_perk_detectexplosive(); + break; + + case "specialty_bulletaccuracy": + thread take_perk_bulletaccuracy(); + break; + + default: + thread take_perk_dummy(); + break; + } + + self notify("take_perk",param_00); +} + +//Function Number: 5 +give_perk_dummy() +{ +} + +//Function Number: 6 +take_perk_dummy() +{ +} + +//Function Number: 7 +give_perk_longersprint() +{ + self setperk("specialty_longersprint",1,0); +} + +//Function Number: 8 +take_perk_longersprint() +{ + self unsetperk("specialty_longersprint",1); +} + +//Function Number: 9 +give_perk_fastreload() +{ + self setperk("specialty_fastreload",1,0); +} + +//Function Number: 10 +take_perk_fastreload() +{ + self unsetperk("specialty_fastreload",1); +} + +//Function Number: 11 +give_perk_quickdraw() +{ + self setperk("specialty_quickdraw",1,0); +} + +//Function Number: 12 +take_perk_quickdraw() +{ + self unsetperk("specialty_quickdraw",1); +} + +//Function Number: 13 +give_perk_detectexplosive() +{ + self setperk("specialty_detectexplosive",1,0); +} + +//Function Number: 14 +take_perk_detectexplosive() +{ + self unsetperk("specialty_detectexplosive",1); +} + +//Function Number: 15 +give_perk_bulletaccuracy() +{ + self setperk("specialty_bulletaccuracy",1,0); +} + +//Function Number: 16 +take_perk_bulletaccuracy() +{ + self unsetperk("specialty_bulletaccuracy",1); +} + +//Function Number: 17 +give_perk_stalker() +{ + self setperk("specialty_stalker",1,0); +} + +//Function Number: 18 +take_perk_stalker() +{ + self unsetperk("specialty_stalker",1); +} + +//Function Number: 19 +perk_hud() +{ + common_scripts\utility::flag_init("HUD_giving_perk"); + common_scripts\utility::flag_init("HUD_taking_perk"); + thread update_on_give_perk(); + thread update_on_take_perk(); +} + +//Function Number: 20 +update_on_give_perk() +{ + self endon("death"); + for(;;) + { + self waittill("give_perk",var_00); + common_scripts\utility::flag_set("HUD_giving_perk"); + while(common_scripts\utility::flag("HUD_taking_perk")) + { + wait 0.05; + } + + wait 1; + common_scripts\utility::flag_clear("HUD_giving_perk"); + } +} + +//Function Number: 21 +update_on_take_perk() +{ + self endon("death"); + for(;;) + { + self waittill("take_perk",var_00); + common_scripts\utility::flag_set("HUD_taking_perk"); + while(common_scripts\utility::flag("HUD_giving_perk")) + { + wait 0.05; + } + + wait 1; + common_scripts\utility::flag_clear("HUD_taking_perk"); + } +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_sp_airdrop.gsc b/MW3/PC/SP/maps/_sp_airdrop.gsc new file mode 100644 index 0000000..c026bfa --- /dev/null +++ b/MW3/PC/SP/maps/_sp_airdrop.gsc @@ -0,0 +1,1288 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_sp_airdrop.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 55 + * Decompile Time: 914 ms + * Timestamp: 10/27/2023 2:20:58 AM +*******************************************************************/ + +//Function Number: 1 +sp_airdrop_preload() +{ + precacheitem("airdrop_marker_mp"); + precachemodel("com_plasticcase_friendly"); + precachemodel("com_plasticcase_enemy"); + precachemodel("com_plasticcase_taskforce141"); + precacheshader("compass_objpoint_ammo_friendly"); +} + +//Function Number: 2 +sp_airdrop_init() +{ + if(!isdefined(level.startingkillstreakcrateobjid)) + { + level.startingkillstreakcrateobjid = 24; + } + + level.numairdropcrates = 0; + level.ad = spawnstruct(); + sp_airdrop_setup_crate_collisions(); + level.ad.globalinitdone = 1; +} + +//Function Number: 3 +sp_airdrop_init_done() +{ + return isdefined(level.ad) && isdefined(level.ad.globalinitdone); +} + +//Function Number: 4 +sp_try_use_airdrop(param_00) +{ + var_01 = undefined; + if(maps\_sp_killstreaks::isusingremote()) + { + return 0; + } + + var_01 = sp_begin_airdrop_via_marker(param_00); + if((!isdefined(var_01) || !var_01) && !isdefined(self.airdropmarker)) + { + return 0; + } + + return 1; +} + +//Function Number: 5 +sp_begin_airdrop_via_marker(param_00) +{ + self endon("death"); + self endon("airdrop_marker_thrown"); + self.airdropmarker = undefined; + thread sp_watch_airdrop_marker_usage(param_00); + var_01 = self getcurrentweapon(); + if(isairdropmarker(var_01)) + { + var_02 = var_01; + } + else + { + var_02 = undefined; + } + + while(isairdropmarker(var_01)) + { + self waittill("weapon_change",var_01); + if(isairdropmarker(var_01)) + { + var_02 = var_01; + } + } + + self notify("stopWatchingAirDropMarker"); + if(!isdefined(var_02)) + { + return 0; + } + + return !self getammocount(var_02) && self hasweapon(var_02); +} + +//Function Number: 6 +sp_watch_airdrop_marker_usage(param_00) +{ + self notify("watchAirDropMarkerUsage"); + self endon("disconnect"); + self endon("watchAirDropMarkerUsage"); + self endon("stopWatchingAirDropMarker"); + thread sp_watch_airdrop_marker(param_00); + for(;;) + { + self waittill("grenade_pullback",var_01); + if(!isairdropmarker(var_01)) + { + continue; + } + + common_scripts\utility::_disableusability(); + beginairdropmarkertracking(); + } +} + +//Function Number: 7 +sp_watch_airdrop_marker(param_00) +{ + self notify("watchAirDropMarker"); + self endon("watchAirDropMarker"); + self endon("spawned_player"); + self endon("disconnect"); + for(;;) + { + self waittill("grenade_fire",var_01,var_02); + if(!isairdropmarker(var_02)) + { + continue; + } + + self notify("airdrop_marker_thrown"); + var_01 thread airdropdetonateonstuck(); + var_01.owner = self; + var_01.weaponname = var_02; + self.airdropmarker = var_01; + var_01 thread sp_airdrop_marker_activate(param_00); + } +} + +//Function Number: 8 +sp_airdrop_marker_activate(param_00) +{ + self notify("airDropMarkerActivate"); + self endon("airDropMarkerActivate"); + self waittill("explode",var_01); + var_02 = self.owner; + if(!isdefined(var_02)) + { + return; + } + + wait 0.05; + level sp_airdrop_do_flyby(param_00,var_02,var_01,randomfloat(360)); +} + +//Function Number: 9 +sp_airdrop_do_flyby(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = getflyheightoffset(param_02); + if(!isdefined(param_04)) + { + param_04 = 0; + } + + var_05 = var_05 + param_04; + if(!isdefined(param_01)) + { + return; + } + + var_06 = param_02 * (1,1,0) + (0,0,var_05); + var_07 = getpathstart(var_06,param_03); + var_08 = getpathend(var_06,param_03); + var_06 = var_06 + anglestoforward((0,param_03,0)) * -50; + var_09 = sp_airdrop_heli_setup(param_01,var_07,var_06); + var_09 endon("death"); + var_09 setvehgoalpos(var_06,1); + var_09 thread sp_airdrop_drop_the_crate(param_00,param_02,var_05,0,undefined,var_07); + wait 2; + var_09 vehicle_setspeed(75,40); + var_09 setyawspeed(180,180,180,0.3); + var_09 waittill("goal"); + wait 0.1; + var_09 notify("drop_crate"); + var_09 setvehgoalpos(var_08,1); + var_09 vehicle_setspeed(300,75); + var_09.leaving = 1; + var_09 waittill("goal"); + var_09 notify("leaving"); + var_09 notify("delete"); + var_09 delete(); +} + +//Function Number: 10 +sp_airdrop_heli_setup(param_00,param_01,param_02) +{ + var_03 = vectortoangles(param_02 - param_01); + var_04 = getent("airdrop_littlebird","targetname"); + var_04.origin = param_01; + var_04.angles = var_03; + var_05 = maps\_vehicle::spawn_vehicle_from_targetname("airdrop_littlebird"); + var_05 hide(); + if(!isdefined(var_05)) + { + return; + } + + if(isdefined(self.mgturret)) + { + self notify("mg_off"); + foreach(var_07 in self.mgturret) + { + var_07 turretfiredisable(); + var_07 setmode("manual"); + } + } + + var_05.health = 500; + var_05 setcandamage(0); + var_05.owner = param_00; + var_05.team = param_00.team; + var_05 thread heli_existence(); + var_05 setmaxpitchroll(45,85); + var_05 vehicle_setspeed(250,175); + var_05 common_scripts\utility::delaycall(0.1,::show); + return var_05; +} + +//Function Number: 11 +heli_existence() +{ + common_scripts\utility::waittill_any("crashing","leaving"); + self notify("helicopter_gone"); +} + +//Function Number: 12 +sp_airdrop_drop_the_crate(param_00,param_01,param_02,param_03,param_04,param_05) +{ + var_06 = []; + self.owner endon("disconnect"); + var_06 = sp_create_airdrop_crate(self.owner,param_00,param_05); + var_06 linkto(self,"tag_ground",(32,0,5),(0,0,0)); + var_06.angles = (0,0,0); + var_06 show(); + var_07 = self.veh_speed; + self waittill("drop_crate"); + var_06 unlink(); + var_06 physicslaunchserver((0,0,0),(randomint(5),randomint(5),randomint(5))); + var_06 thread sp_airdrop_crate_physics_waiter(); + var_06 thread sp_airdrop_crate_damage_enemies_on_fall(param_01,64); +} + +//Function Number: 13 +sp_create_airdrop_crate(param_00,param_01,param_02) +{ + var_03 = spawn("script_model",param_02); + var_03.inuse = 0; + var_03.curprogress = 0; + var_03.usetime = 0; + var_03.userate = 0; + if(isdefined(param_00)) + { + var_03.owner = param_00; + } + else + { + var_03.owner = undefined; + } + + var_03.cratetype = param_01; + var_03.targetname = "care_package"; + var_03 setmodel("com_plasticcase_taskforce141"); + var_03 sp_airdrop_crate_attach_collision(); + var_03.collision thread sp_airdrop_crate_unlink_collision(var_03); + var_03.basemodel = spawn("script_model",param_02); + var_03.basemodel setmodel("com_plasticcase_friendly"); + var_03.basemodel common_scripts\utility::delaycall(0.25,::linkto,var_03,"tag_origin",(0,0,0),(0,0,0)); + var_03 thread sp_airdrop_crate_delete_on_owner_death(param_00); + level.numairdropcrates++; + return var_03; +} + +//Function Number: 14 +sp_delete_airdrop_crate() +{ + if(isdefined(self.objidfriendly)) + { + objective_delete(self.objidfriendly); + } + + if(isdefined(level.crates_on_ground) && level.crates_on_ground.size) + { + level.crates_on_ground = common_scripts\utility::array_remove(level.crates_on_ground,self); + level.numairdropcrates--; + } + + if(isdefined(self)) + { + self.basemodel delete(); + self delete(); + } +} + +//Function Number: 15 +sp_airdrop_setup_crate_collisions() +{ + var_00 = getentarray("airdrop_crate_collision","targetname"); + foreach(var_02 in var_00) + { + var_02 connectpaths(); + var_02 notsolid(); + } + + level.airdropcratecollisionboxes = var_00; +} + +//Function Number: 16 +sp_airdrop_get_free_sbmodel_collision() +{ + var_00 = undefined; + foreach(var_02 in level.airdropcratecollisionboxes) + { + if(!isdefined(var_02.isinuse)) + { + var_00 = var_02; + break; + } + } + + return var_00; +} + +//Function Number: 17 +sp_airdrop_crate_attach_collision() +{ + var_00 = sp_airdrop_get_free_sbmodel_collision(); + var_00.origin = self.origin; + var_00.angles = self.angles; + var_00 solid(); + var_00 linkto(self); + var_00.isinuse = 1; + self.collision = var_00; +} + +//Function Number: 18 +sp_airdrop_crate_damage_enemies_on_fall(param_00,param_01) +{ + while(isdefined(self) && distancesquared(self.origin,param_00) > 1024) + { + wait 0.05; + } + + if(!isdefined(self)) + { + return; + } + + var_02 = getaispeciesarray("axis","all"); + foreach(var_04 in var_02) + { + if(distancesquared(self.origin,var_04.origin) < param_01 * param_01) + { + if(isdefined(self.owner)) + { + var_04 dodamage(300,self.origin,self.owner,self); + continue; + } + + var_04 dodamage(300,self.origin); + } + } +} + +//Function Number: 19 +sp_airdrop_crate_delete_on_owner_death(param_00) +{ + param_00 waittill("death"); + sp_delete_airdrop_crate(); +} + +//Function Number: 20 +sp_airdrop_crate_unlink_collision(param_00) +{ + param_00 waittill("death"); + self unlink(); + self connectpaths(); + self notsolid(); + self.isinuse = undefined; +} + +//Function Number: 21 +sp_airdrop_crate_physics_waiter() +{ + self waittill("physics_finished"); + self.crate_num = gettime(); + if(!isdefined(level.crates_on_ground)) + { + level.crates_on_ground = []; + } + + level.crates_on_ground[level.crates_on_ground.size] = self; + if(level.crates_on_ground.size > 4) + { + level.crates_on_ground[0] sp_delete_airdrop_crate(); + } + + thread sp_airdrop_crate_think(); + level thread sp_airdrop_crate_timeout(self,self.owner); +} + +//Function Number: 22 +sp_airdrop_crate_timeout(param_00,param_01) +{ + param_00 endon("death"); + var_02 = 120; + if(isdefined(level.airdropcratetimeout)) + { + var_02 = level.airdropcratetimeout; + } + + if(var_02 <= 0) + { + return; + } + + wait var_02; + while(param_00.curprogress != 0) + { + wait 1; + } + + param_00 sp_delete_airdrop_crate(); +} + +//Function Number: 23 +sp_airdrop_crate_think() +{ + self endon("death"); + sp_airdrop_crate_setup_for_use(); + thread sp_airdrop_crate_owner_capture_think(); + thread sp_airdrop_teammate_capture_think(); + if(isdefined(level.sp_airdrop_crate_custom_thread)) + { + self thread [[ level.sp_airdrop_crate_custom_thread ]](); + } + + for(;;) + { + self waittill("captured",var_00); + if(isdefined(self.owner) && var_00 != self.owner) + { + thread sp_airdrop_crate_hijack_notify(var_00); + } + + if(isplayer(var_00)) + { + var_01 = var_00; + var_01 playlocalsound("ammo_crate_use"); + if(isdefined(self.killstreakinfo.crateopenfunc)) + { + if(issubstr(self.killstreakinfo.streaktype,"specialty_")) + { + var_01 thread [[ self.killstreakinfo.crateopenfunc ]](self.killstreakinfo.streaktype); + } + else + { + var_01 thread [[ self.killstreakinfo.crateopenfunc ]](); + } + } + else + { + var_01 thread maps\_sp_killstreaks::give_sp_killstreak(self.cratetype); + } + } + + sp_delete_airdrop_crate(); + } +} + +//Function Number: 24 +sp_airdrop_crate_hijack_notify(param_00) +{ + self notify("hijacked",param_00); + if(!isplayer(self.owner)) + { + return; + } + + if(param_00.team == self.owner.team) + { + if(isdefined(level.sp_airdrop_crate_friendly_hijack_thread)) + { + self.owner thread [[ level.sp_airdrop_crate_friendly_hijack_thread ]](param_00); + return; + } + + return; + } + + if(isdefined(level.sp_airdrop_crate_enemy_hijack_thread)) + { + self.owner thread [[ level.sp_airdrop_crate_enemy_hijack_thread ]](param_00); + } +} + +//Function Number: 25 +sp_airdrop_crate_setup_for_use() +{ + self.collision disconnectpaths(); + var_00 = maps\_sp_killstreaks::get_sp_killstreak_info(self.cratetype); + self.killstreakinfo = var_00; + var_01 = sp_airdrop_get_crate_obj_id(); + objective_add(var_01,"invisible",(0,0,0)); + objective_position(var_01,self.origin); + objective_icon(var_01,"compass_objpoint_ammo_friendly"); + self.objidfriendly = var_01; + sp_crate_world_icon(var_00.crateicon,(0,0,24),14,14); + self setcursorhint("HINT_NOICON"); + self sethintstring(var_00.cratehint); + self makeusable(); + if(isdefined(level.airdropcrateunstuck) && level.airdropcrateunstuck) + { + thread sp_airdrop_unstuck_think(); + } +} + +//Function Number: 26 +sp_airdrop_unstuck_think() +{ + self endon("death"); + self endon("captured"); + wait 2; + var_00 = undefined; + var_01 = []; + foreach(var_03 in level.players) + { + if(isdefined(self.collision) && self.collision istouching(var_03)) + { + if(isdefined(self.owner) && self.owner == var_03) + { + var_00 = var_03; + continue; + } + + var_01[var_01.size] = var_03; + } + } + + if(isdefined(var_00)) + { + self notify("trigger",var_00); + return; + } + + if(var_01.size > 0) + { + self notify("trigger",var_01[0]); + } +} + +//Function Number: 27 +sp_airdrop_get_crate_obj_id() +{ + var_00 = undefined; + if(!isdefined(level.lastusedkillstreakcrateobjid)) + { + var_00 = level.startingkillstreakcrateobjid; + } + else + { + var_00 = level.lastusedkillstreakcrateobjid + 1; + } + + if(var_00 > level.startingkillstreakcrateobjid + 7) + { + var_00 = level.startingkillstreakcrateobjid; + } + + level.lastusedkillstreakcrateobjid = var_00; + return var_00; +} + +//Function Number: 28 +sp_crate_world_icon(param_00,param_01,param_02,param_03) +{ + var_04 = newhudelem(); + var_04.archived = 1; + var_04.x = self.origin[0] + param_01[0]; + var_04.y = self.origin[1] + param_01[1]; + var_04.z = self.origin[2] + param_01[2]; + var_04.alpha = 0.85; + var_04 setshader(param_00,param_02,param_03); + var_04 setwaypoint(1,1,0); + var_04 thread keeppositioned(self,param_01); + self.crateworldicon = var_04; + thread destroyiconsondeath(); +} + +//Function Number: 29 +sp_airdrop_crate_owner_capture_think() +{ + while(isdefined(self)) + { + self waittill("trigger",var_00); + if(isdefined(self.owner) && var_00 != self.owner) + { + continue; + } + + if(!sp_use_hold_think(var_00,500)) + { + continue; + } + + self notify("captured",var_00); + level notify("crate_captured"); + } +} + +//Function Number: 30 +sp_airdrop_teammate_capture_think() +{ + while(isdefined(self)) + { + self waittill("trigger",var_00); + if(isdefined(self.owner) && var_00 == self.owner) + { + continue; + } + + if(!sp_use_hold_think(var_00)) + { + continue; + } + + self notify("captured",var_00); + level notify("crate_captured"); + } +} + +//Function Number: 31 +sp_use_hold_think(param_00,param_01) +{ + param_00 freezecontrols(1); + param_00 common_scripts\utility::_disableweapon(); + self.curprogress = 0; + self.inuse = 1; + self.userate = 0; + if(isdefined(level.airdropcrateusetime)) + { + self.usetime = level.airdropcrateusetime; + } + else if(isdefined(param_01)) + { + self.usetime = param_01; + } + else + { + self.usetime = 3000; + } + + if(self.usetime > 0) + { + param_00 thread sp_personal_use_bar(self); + var_02 = sp_use_hold_think_loop(param_00); + } + else + { + var_02 = 1; + } + + if(isalive(param_00)) + { + param_00 common_scripts\utility::_enableweapon(); + param_00 freezecontrols(0); + } + + if(!isdefined(self)) + { + return 0; + } + + self.inuse = 0; + self.curprogress = 0; + return var_02; +} + +//Function Number: 32 +sp_use_hold_think_loop(param_00) +{ + while(isdefined(self) && isalive(param_00) && param_00 usebuttonpressed() && self.curprogress < self.usetime) + { + self.curprogress = self.curprogress + 50 * self.userate; + if(isdefined(self.objectivescaler)) + { + self.userate = 1 * self.objectivescaler; + } + else + { + self.userate = 1; + } + + if(self.curprogress >= self.usetime) + { + return isalive(param_00); + } + + wait 0.05; + } + + return 0; +} + +//Function Number: 33 +sp_personal_use_bar(param_00) +{ + self endon("disconnect"); + var_01 = createprimaryprogressbar(-25); + var_02 = createprimaryprogressbartext(-25); + var_02 settext(&"SP_KILLSTREAKS_CAPTURING_CRATE"); + var_03 = -1; + while(isalive(self) && isdefined(param_00) && param_00.inuse) + { + if(var_03 != param_00.userate) + { + if(param_00.curprogress > param_00.usetime) + { + param_00.curprogress = param_00.usetime; + } + + var_01 updatebar(param_00.curprogress / param_00.usetime,1000 / param_00.usetime * param_00.userate); + if(!param_00.userate) + { + var_01 hideelem(); + var_02 hideelem(); + } + else + { + var_01 showelem(); + var_02 showelem(); + } + } + + var_03 = param_00.userate; + wait 0.05; + } + + var_01 destroyelem(); + var_02 destroyelem(); +} + +//Function Number: 34 +getflyheightoffset(param_00) +{ + var_01 = 850; + var_02 = getent("airstrikeheight","targetname"); + if(!isdefined(var_02)) + { + if(isdefined(level.airstrikeheightscale)) + { + if(level.airstrikeheightscale > 2) + { + var_01 = 1500; + return var_01 * level.airstrikeheightscale; + } + + return var_01 * level.airstrikeheightscale + 256 + param_00[2]; + } + + return var_01 + param_00[2]; + } + + return var_02.origin[2]; +} + +//Function Number: 35 +getpathstart(param_00,param_01) +{ + var_02 = 100; + var_03 = 15000; + var_04 = (0,param_01,0); + var_05 = param_00 + anglestoforward(var_04) * -1 * var_03; + var_05 = var_05 + (randomfloat(2) - 1 * var_02,randomfloat(2) - 1 * var_02,0); + return var_05; +} + +//Function Number: 36 +getpathend(param_00,param_01) +{ + var_02 = 150; + var_03 = 15000; + var_04 = (0,param_01,0); + var_05 = param_00 + anglestoforward(var_04 + (0,90,0)) * var_03; + var_05 = var_05 + (randomfloat(2) - 1 * var_02,randomfloat(2) - 1 * var_02,0); + return var_05; +} + +//Function Number: 37 +isairdropmarker(param_00) +{ + switch(param_00) + { + case "airdrop_sentry_marker_mp": + case "airdrop_mega_marker_mp": + case "airdrop_marker_mp": + return 1; + + default: + return 0; + } +} + +//Function Number: 38 +beginairdropmarkertracking() +{ + self notify("beginAirDropMarkerTracking"); + self endon("beginAirDropMarkerTracking"); + self endon("death"); + self endon("disconnect"); + common_scripts\utility::waittill_any("grenade_fire","weapon_change"); + common_scripts\utility::_enableusability(); +} + +//Function Number: 39 +airdropdetonateonstuck() +{ + self endon("death"); + self waittill("missile_stuck"); + self detonate(); +} + +//Function Number: 40 +destroyiconsondeath() +{ + self notify("destroyIconsOnDeath"); + self endon("destroyIconsOnDeath"); + self waittill("death"); + self.crateworldicon destroy(); +} + +//Function Number: 41 +keeppositioned(param_00,param_01) +{ + self endon("death"); + param_00 endon("death"); + var_02 = param_00.origin; + for(;;) + { + if(var_02 != param_00.origin) + { + var_02 = param_00.origin; + self.x = var_02[0] + param_01[0]; + self.y = var_02[0] + param_01[0]; + self.z = var_02[0] + param_01[0]; + } + + wait 0.05; + } +} + +//Function Number: 42 +keepiconpositioned() +{ + self endon("kill_entity_headicon_thread"); + self endon("death"); + var_00 = self.origin; + for(;;) + { + if(var_00 != self.origin) + { + updateheadiconorigin(); + var_00 = self.origin; + } + + wait 0.05; + } +} + +//Function Number: 43 +destroyheadiconsondeath() +{ + self endon("kill_entity_headicon_thread"); + self waittill("death"); + if(!isdefined(self.entityheadicon)) + { + return; + } + + self.entityheadicon destroy(); +} + +//Function Number: 44 +updateheadiconorigin() +{ + self.entityheadicon.x = self.origin[0] + self.entityheadiconoffset[0]; + self.entityheadicon.y = self.origin[1] + self.entityheadiconoffset[1]; + self.entityheadicon.z = self.origin[2] + self.entityheadiconoffset[2]; +} + +//Function Number: 45 +createprimaryprogressbartext(param_00) +{ + if(!isdefined(param_00)) + { + param_00 = 0; + } + + var_01 = maps\_hud_util::createclientfontstring("hudbig",level.primaryprogressbarfontsize); + var_01.hidden = 0; + var_01 setpoint("CENTER",undefined,level.primaryprogressbartextx,level.primaryprogressbartexty - param_00); + var_01.sort = -1; + return var_01; +} + +//Function Number: 46 +createprimaryprogressbar(param_00) +{ + if(!isdefined(param_00)) + { + param_00 = 0; + } + + var_01 = createbar((1,1,1),level.primaryprogressbarwidth,level.primaryprogressbarheight); + var_01 setpoint("CENTER",undefined,level.primaryprogressbarx,level.primaryprogressbary - param_00); + return var_01; +} + +//Function Number: 47 +createbar(param_00,param_01,param_02,param_03) +{ + var_04 = newclienthudelem(self); + var_04.x = 0; + var_04.y = 0; + var_04.frac = 0; + var_04.color = param_00; + var_04.sort = -2; + var_04.shader = "progress_bar_fill"; + var_04 setshader("progress_bar_fill",param_01,param_02); + var_04.hidden = 0; + if(isdefined(param_03)) + { + var_04.flashfrac = param_03; + } + + var_05 = newclienthudelem(self); + var_05.elemtype = "bar"; + var_05.width = param_01; + var_05.height = param_02; + var_05.xoffset = 0; + var_05.yoffset = 0; + var_05.bar = var_04; + var_05.children = []; + var_05.sort = -3; + var_05.color = (0,0,0); + var_05.alpha = 0.5; + var_05.padding = 0; + var_05 maps\_hud_util::setparent(level.uiparent); + var_05 setshader("progress_bar_bg",param_01 + 4,param_02 + 4); + var_05.hidden = 0; + return var_05; +} + +//Function Number: 48 +setpoint(param_00,param_01,param_02,param_03,param_04) +{ + if(!isdefined(param_04)) + { + param_04 = 0; + } + + var_05 = maps\_hud_util::getparent(); + if(param_04) + { + self moveovertime(param_04); + } + + if(!isdefined(param_02)) + { + param_02 = 0; + } + + self.xoffset = param_02; + if(!isdefined(param_03)) + { + param_03 = 0; + } + + self.yoffset = param_03; + self.point = param_00; + self.alignx = "center"; + self.aligny = "middle"; + if(issubstr(param_00,"TOP")) + { + self.aligny = "top"; + } + + if(issubstr(param_00,"BOTTOM")) + { + self.aligny = "bottom"; + } + + if(issubstr(param_00,"LEFT")) + { + self.alignx = "left"; + } + + if(issubstr(param_00,"RIGHT")) + { + self.alignx = "right"; + } + + if(!isdefined(param_01)) + { + param_01 = param_00; + } + + self.relativepoint = param_01; + var_06 = "center_adjustable"; + var_07 = "middle"; + if(issubstr(param_01,"TOP")) + { + var_07 = "top_adjustable"; + } + + if(issubstr(param_01,"BOTTOM")) + { + var_07 = "bottom_adjustable"; + } + + if(issubstr(param_01,"LEFT")) + { + var_06 = "left_adjustable"; + } + + if(issubstr(param_01,"RIGHT")) + { + var_06 = "right_adjustable"; + } + + if(var_05 == level.uiparent) + { + self.horzalign = var_06; + self.vertalign = var_07; + } + else + { + self.horzalign = var_05.horzalign; + self.vertalign = var_05.vertalign; + } + + if(strip_suffix(var_06,"_adjustable") == var_05.alignx) + { + var_08 = 0; + var_09 = 0; + } + else if(var_08 == "center" || var_07.alignx == "center") + { + var_08 = int(var_07.width / 2); + if(var_07 == "left_adjustable" || var_06.alignx == "right") + { + var_09 = -1; + } + else + { + var_09 = 1; + } + } + else + { + var_08 = var_07.width; + if(var_07 == "left_adjustable") + { + var_09 = -1; + } + else + { + var_09 = 1; + } + } + + self.x = var_05.x + var_08 * var_09; + if(strip_suffix(var_07,"_adjustable") == var_05.aligny) + { + var_0A = 0; + var_0B = 0; + } + else if(var_09 == "middle" || var_07.aligny == "middle") + { + var_0A = int(var_07.height / 2); + if(var_08 == "top_adjustable" || var_06.aligny == "bottom") + { + var_0B = -1; + } + else + { + var_0B = 1; + } + } + else + { + var_0A = var_07.height; + if(var_08 == "top_adjustable") + { + var_0B = -1; + } + else + { + var_0B = 1; + } + } + + self.y = var_05.y + var_0A * var_0B; + self.x = self.x + self.xoffset; + self.y = self.y + self.yoffset; + switch(self.elemtype) + { + case "bar": + setpointbar(param_00,param_01,param_02,param_03); + break; + } + + maps\_hud_util::updatechildren(); +} + +//Function Number: 49 +setpointbar(param_00,param_01,param_02,param_03) +{ + self.bar.horzalign = self.horzalign; + self.bar.vertalign = self.vertalign; + self.bar.alignx = "left"; + self.bar.aligny = self.aligny; + self.bar.y = self.y; + if(self.alignx == "left") + { + self.bar.x = self.x; + } + else if(self.alignx == "right") + { + self.bar.x = self.x - self.width; + } + else + { + self.bar.x = self.x - int(self.width / 2); + } + + if(self.aligny == "top") + { + self.bar.y = self.y; + } + else if(self.aligny == "bottom") + { + self.bar.y = self.y; + } + + updatebar(self.bar.frac); +} + +//Function Number: 50 +updatebar(param_00,param_01) +{ + if(self.elemtype == "bar") + { + updatebarscale(param_00,param_01); + } +} + +//Function Number: 51 +updatebarscale(param_00,param_01) +{ + var_02 = int(self.width * param_00 + 0.5); + if(!var_02) + { + var_02 = 1; + } + + self.bar.frac = param_00; + self.bar setshader(self.bar.shader,var_02,self.height); + if(isdefined(param_01) && var_02 < self.width) + { + if(param_01 > 0) + { + self.bar scaleovertime(1 - param_00 / param_01,self.width,self.height); + } + else if(param_01 < 0) + { + self.bar scaleovertime(param_00 / -1 * param_01,1,self.height); + } + } + + self.bar.rateofchange = param_01; + self.bar.lastupdatetime = gettime(); +} + +//Function Number: 52 +hideelem() +{ + if(self.hidden) + { + return; + } + + self.hidden = 1; + if(self.alpha != 0) + { + self.alpha = 0; + } + + if(self.elemtype == "bar" || self.elemtype == "bar_shader") + { + self.bar.hidden = 1; + if(self.bar.alpha != 0) + { + self.bar.alpha = 0; + } + } +} + +//Function Number: 53 +showelem() +{ + if(!self.hidden) + { + return; + } + + self.hidden = 0; + if(self.elemtype == "bar" || self.elemtype == "bar_shader") + { + if(self.alpha != 0.5) + { + self.alpha = 0.5; + } + + self.bar.hidden = 0; + if(self.bar.alpha != 1) + { + self.bar.alpha = 1; + return; + } + + return; + } + + if(self.alpha != 1) + { + self.alpha = 1; + } +} + +//Function Number: 54 +strip_suffix(param_00,param_01) +{ + if(param_00.size <= param_01.size) + { + return param_00; + } + + if(getsubstr(param_00,param_00.size - param_01.size,param_00.size) == param_01) + { + return getsubstr(param_00,0,param_00.size - param_01.size); + } + + return param_00; +} + +//Function Number: 55 +destroyelem() +{ + var_00 = []; + for(var_01 = 0;var_01 < self.children.size;var_01++) + { + if(isdefined(self.children[var_01])) + { + var_00[var_00.size] = self.children[var_01]; + } + } + + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + var_00[var_01] maps\_hud_util::setparent(maps\_hud_util::getparent()); + } + + if(self.elemtype == "bar" || self.elemtype == "bar_shader") + { + self.bar destroy(); + } + + self destroy(); +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_sp_airstrike.gsc b/MW3/PC/SP/maps/_sp_airstrike.gsc new file mode 100644 index 0000000..3435c0c --- /dev/null +++ b/MW3/PC/SP/maps/_sp_airstrike.gsc @@ -0,0 +1,702 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_sp_airstrike.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 24 + * Decompile Time: 408 ms + * Timestamp: 10/27/2023 2:21:02 AM +*******************************************************************/ + +//Function Number: 1 +airstrike_preload() +{ + precachelocationselector("map_artillery_selector"); + precacheitem("killstreak_precision_airstrike_sp"); + precacheitem("killstreak_stealth_airstrike_sp"); + precacheitem("stealth_bomb_mp"); + precacheitem("artillery_mp"); + precacheitem("harrier_missile_mp"); + precachemodel("vehicle_mig29_desert"); + precachemodel("vehicle_av8b_harrier_jet_mp"); + precachemodel("vehicle_av8b_harrier_jet_opfor_mp"); + precachemodel("weapon_minigun"); + precachemodel("vehicle_b2_bomber"); + precachemodel("projectile_cbu97_clusterbomb"); + precacheshader("specialty_precision_airstrike"); + precacheshader("dpad_killstreak_precision_airstrike"); + precachestring(&"SP_KILLSTREAKS_REWARDNAME_PRECISION_AIRSTRIKE"); + precachestring(&"SP_KILLSTREAKS_EARNED_PRECISION_AIRSTRIKE"); + precachestring(&"SP_KILLSTREAKS_PRECISION_AIRSTRIKE_PICKUP"); + precacheshader("specialty_stealth_bomber"); + precacheshader("dpad_killstreak_stealth_bomber"); + precachestring(&"SP_KILLSTREAKS_REWARDNAME_STEALTH_AIRSTRIKE"); + precachestring(&"SP_KILLSTREAKS_EARNED_STEALTH_AIRSTRIKE"); + precachestring(&"SP_KILLSTREAKS_STEALTH_AIRSTRIKE_PICKUP"); + level.var_3442 = loadfx("fire/fire_smoke_trail_L"); + level.var_3443 = loadfx("explosions/clusterbomb"); + level.mortareffect = loadfx("explosions/artilleryExp_dirt_brown"); + level.bombstrike = loadfx("explosions/wall_explosion_pm_a"); + level.stealthbombfx = loadfx("explosions/stealth_bomb_mp"); + level.planes = 0; + level.harrier_smoke = loadfx("fire/jet_afterburner_harrier_damaged"); + level.harrier_deathfx = loadfx("explosions/aerial_explosion_harrier"); + level.harrier_afterburnerfx = loadfx("fire/jet_afterburner_harrier"); + level.fx_airstrike_afterburner = loadfx("fire/jet_afterburner"); + level.fx_airstrike_contrail = loadfx("smoke/jet_contrail"); + level.dangermaxradius["stealth"] = 900; + level.dangerminradius["stealth"] = 750; + level.dangerforwardpush["stealth"] = 1; + level.dangerovalscale["stealth"] = 6; + level.dangermaxradius["default"] = 550; + level.dangerminradius["default"] = 300; + level.dangerforwardpush["default"] = 1.5; + level.dangerovalscale["default"] = 6; + level.dangermaxradius["precision"] = 550; + level.dangerminradius["precision"] = 300; + level.dangerforwardpush["precision"] = 2; + level.dangerovalscale["precision"] = 6; + level.dangermaxradius["harrier"] = 550; + level.dangerminradius["harrier"] = 300; + level.dangerforwardpush["harrier"] = 1.5; + level.dangerovalscale["harrier"] = 6; + level.artillerydangercenters = []; +} + +//Function Number: 2 +try_use_airstrike(param_00) +{ + if(isdefined(self.using_uav) && self.using_uav) + { + return 0; + } + + if(!isdefined(param_00)) + { + param_00 = "precision"; + } + + switch(param_00) + { + case "precision": + break; + + case "stealth": + break; + + case "harrier": + if(level.planes > 1) + { + iprintlnbold("Air space too crowded!"); + return 0; + } + break; + + case "super": + break; + } + + var_01 = airstrike_location_select(param_00); + if(!isdefined(var_01)) + { + return 0; + } + + thread finish_using_airstrike(param_00,var_01.location,var_01.directionyaw); + return 1; +} + +//Function Number: 3 +airstrike_location_select(param_00) +{ + var_01 = 0; + if(param_00 == "precision" || param_00 == "stealth") + { + var_01 = 1; + } + + var_02 = level.mapsize / 5.625; + if(issplitscreen()) + { + var_02 = var_02 * 1.5; + } + + self beginlocationselection("map_artillery_selector",var_01,var_02); + self.selectinglocation = 1; + self setblurforplayer(4,0.3); + thread waitforairstrikecancel(); + thread endselectionon("cancel_location"); + thread endselectionon("death"); + thread endselectionon("disconnect"); + self endon("stop_location_selection"); + self waittill("confirm_location",var_03,var_04); + if(!var_01) + { + var_04 = randomint(360); + } + + self setblurforplayer(0,0.3); + if(param_00 == "harrier" && level.planes > 1) + { + self notify("cancel_location"); + iprintlnbold("Air space too crowded!"); + return 0; + } + + var_05 = spawnstruct(); + var_05.location = var_03; + var_05.directionyaw = var_04; + maps\_utility::delaythread(0.05,::stopairstrikelocationselection); + return var_05; +} + +//Function Number: 4 +waitforairstrikecancel() +{ + self waittill("cancel_location"); + self setblurforplayer(0,0.3); +} + +//Function Number: 5 +endselectionon(param_00) +{ + self endon("stop_location_selection"); + self waittill(param_00); + thread stopairstrikelocationselection(); +} + +//Function Number: 6 +stopairstrikelocationselection() +{ + self setblurforplayer(0,0.3); + self endlocationselection(); + self.selectinglocation = undefined; + self notify("stop_location_selection"); +} + +//Function Number: 7 +finish_using_airstrike(param_00,param_01,param_02) +{ + var_03 = bullettrace(level.mapcenter + (0,0,1000000),level.mapcenter,0,undefined); + param_01 = (param_01[0],param_01[1],var_03["position"][2] - 514); + thread do_airstrike(param_00,param_01,param_02,self,self.team); +} + +//Function Number: 8 +do_airstrike(param_00,param_01,param_02,param_03,param_04) +{ + if(!isdefined(param_00)) + { + param_00 = "default"; + } + + if(param_00 == "harrier") + { + level.planes++; + } + + if(isdefined(level.airstrikeinprogress)) + { + while(isdefined(level.airstrikeinprogress)) + { + level waittill("begin_airstrike"); + } + + level.airstrikeinprogress = 1; + wait 2; + } + + if(!isdefined(param_03)) + { + if(param_00 == "harrier") + { + level.planes--; + } + + return; + } + + level.airstrikeinprogress = 1; + var_05 = 17 + randomint(3); + var_06 = bullettrace(param_01,param_01 + (0,0,-1000000),0,undefined); + var_07 = var_06["position"]; + var_08 = spawnstruct(); + var_08.origin = var_07; + var_08.forward = anglestoforward((0,param_02,0)); + var_08.airstriketype = param_00; + level.artillerydangercenters[level.artillerydangercenters.size] = var_08; + var_09 = callstrike(param_03,var_07,param_02,param_00); + wait 1; + level.airstrikeinprogress = undefined; + param_03 notify("begin_airstrike"); + level notify("begin_airstrike"); + wait 7.5; + var_0A = 0; + var_0B = []; + for(var_0C = 0;var_0C < level.artillerydangercenters.size;var_0C++) + { + if(!var_0A && level.artillerydangercenters[var_0C].origin == var_07) + { + var_0A = 1; + continue; + } + + var_0B[var_0B.size] = level.artillerydangercenters[var_0C]; + } + + level.artillerydangercenters = var_0B; + if(param_00 != "harrier") + { + return; + } + + while(isdefined(var_09)) + { + wait 0.1; + } + + level.planes--; +} + +//Function Number: 9 +callstrike(param_00,param_01,param_02,param_03) +{ + var_04 = undefined; + var_05 = 0; + var_06 = (0,param_02,0); + var_04 = getent("airstrikeheight","targetname"); + if(param_03 == "stealth") + { + var_07 = 12000; + var_08 = 2000; + if(!isdefined(var_04)) + { + var_09 = 950; + var_05 = 1500; + if(isdefined(level.airstrikeheightscale)) + { + var_09 = var_09 * level.airstrikeheightscale; + } + } + else + { + var_09 = var_05.origin[2]; + var_05 = getexplodedistance(var_09); + } + } + else + { + var_07 = 24000; + var_08 = 7000; + if(!isdefined(var_05)) + { + var_09 = 850; + var_05 = 1500; + if(isdefined(level.airstrikeheightscale)) + { + var_09 = var_09 * level.airstrikeheightscale; + } + } + else + { + var_09 = var_05.origin[2]; + var_05 = getexplodedistance(var_09); + } + } + + var_0A = param_01 + anglestoforward(var_06) * -1 * var_07; + if(isdefined(var_04)) + { + var_0A = var_0A * (1,1,0); + } + + var_0A = var_0A + (0,0,var_09); + if(param_03 == "stealth") + { + var_0B = param_01 + anglestoforward(var_06) * var_07 * 4; + } + else + { + var_0B = param_02 + anglestoforward(var_07) * var_08; + } + + if(isdefined(var_04)) + { + var_0B = var_0B * (1,1,0); + } + + var_0B = var_0B + (0,0,var_09); + var_0C = length(var_0A - var_0B); + var_0D = var_0C / var_08; + var_0C = abs(var_0C / 2 + var_05); + var_0E = var_0C / var_08; + param_00 endon("disconnect"); + level.airstrikedamagedents = []; + level.airstrikedamagedentscount = 0; + level.airstrikedamagedentsindex = 0; + if(param_03 == "stealth") + { + level thread dobomberstrike(param_00,param_01,var_0A + (0,0,randomint(1000)),var_0B + (0,0,randomint(1000)),var_0E,var_0D,var_06); + return; + } + + level thread doplanestrike(param_00,param_01,var_0A + (0,0,randomint(500)),var_0B + (0,0,randomint(500)),var_0E,var_0D,var_06,param_03); + wait randomfloatrange(1.5,2.5); + level thread doplanestrike(param_00,param_01,var_0A + (0,0,randomint(200)),var_0B + (0,0,randomint(200)),var_0E,var_0D,var_06,param_03); + wait randomfloatrange(1.5,2.5); + level thread doplanestrike(param_00,param_01,var_0A + (0,0,randomint(200)),var_0B + (0,0,randomint(200)),var_0E,var_0D,var_06,param_03); + if(param_03 == "super") + { + wait randomfloatrange(2.5,3.5); + level thread doplanestrike(param_00,param_01,var_0A + (0,0,randomint(200)),var_0B + (0,0,randomint(200)),var_0E,var_0D,var_06,param_03); + } +} + +//Function Number: 10 +getexplodedistance(param_00) +{ + var_01 = 850; + var_02 = 1500; + var_03 = var_01 / param_00; + var_04 = var_03 * var_02; + return var_04; +} + +//Function Number: 11 +airstrike_spawn_fake_plane(param_00,param_01,param_02) +{ + var_03 = "vehicle_mig29_desert"; + var_04 = "compass_objpoint_airstrike_friendly"; + var_05 = "compass_objpoint_airstrike_busy"; + if(param_00 == "harrier") + { + var_03 = "vehicle_av8b_harrier_jet_mp"; + if(param_01.team != "allies") + { + var_03 = "vehicle_av8b_harrier_jet_opfor_mp"; + } + + var_04 = "hud_minimap_harrier_green"; + var_05 = "hud_minimap_harrier_red"; + } + else if(param_00 == "stealth") + { + var_03 = "vehicle_b2_bomber"; + var_04 = "compass_objpoint_b2_airstrike_friendly"; + var_05 = "compass_objpoint_b2_airstrike_enemy"; + } + + var_06 = spawn("script_model",param_02); + var_06.team = param_01.team; + var_06 setmodel(var_03); + return var_06; +} + +//Function Number: 12 +doplanestrike(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07) +{ + if(!isdefined(param_00)) + { + return; + } + + var_08 = 100; + var_09 = 150; + var_0A = param_02 + (randomfloat(2) - 1 * var_08,randomfloat(2) - 1 * var_08,0); + var_0B = param_03 + (randomfloat(2) - 1 * var_09,randomfloat(2) - 1 * var_09,0); + var_0C = airstrike_spawn_fake_plane(param_07,param_00,var_0A); + var_0C playloopsound("veh_mig29_dist_loop"); + var_0C.angles = param_06; + var_0D = anglestoforward(param_06); + var_0C thread playplanefx(); + var_0C moveto(var_0B,param_05,0,0); + thread callstrike_bombeffect(var_0C,var_0B,param_05,param_04 - 1,param_00,param_07); + wait param_05; + var_0C notify("delete"); + var_0C delete(); +} + +//Function Number: 13 +playplanefx() +{ + self endon("death"); + wait 0.5; + playfxontag(level.fx_airstrike_afterburner,self,"tag_engine_right"); + wait 0.5; + playfxontag(level.fx_airstrike_afterburner,self,"tag_engine_left"); + wait 0.5; + playfxontag(level.fx_airstrike_contrail,self,"tag_right_wingtip"); + wait 0.5; + playfxontag(level.fx_airstrike_contrail,self,"tag_left_wingtip"); +} + +//Function Number: 14 +callstrike_bomb(param_00,param_01,param_02,param_03) +{ + if(!isdefined(param_01)) + { + self notify("stop_bombing"); + return; + } + + var_04 = 512; + var_05 = (0,randomint(360),0); + var_06 = param_00 + anglestoforward(var_05) * randomfloat(var_04); + var_07 = bullettrace(var_06,var_06 + (0,0,-10000),0,undefined); + var_06 = var_07["position"]; + var_08 = distance(param_00,var_06); + if(var_08 > 5000) + { + return; + } + + wait 0.85 * var_08 / 2000; + if(!isdefined(param_01)) + { + self notify("stop_bombing"); + return; + } + + if(param_03) + { + playfx(level.mortareffect,var_06); + playrumbleonposition("grenade_rumble",var_06); + earthquake(1,0.6,var_06,2000); + } + + thread common_scripts\utility::play_sound_in_space("exp_airstrike_bomb",var_06); + radiusartilleryshellshock(var_06,512,8,4); + radiusdamage(var_06 + (0,0,16),896,300,50,param_01,"MOD_PROJECTILE_SPLASH","stealth_bomb_mp"); +} + +//Function Number: 15 +radiusartilleryshellshock(param_00,param_01,param_02,param_03) +{ + foreach(var_05 in level.players) + { + if(!isalive(var_05)) + { + continue; + } + + var_06 = var_05.origin + (0,0,32); + var_07 = distance(param_00,var_06); + if(var_07 > param_01) + { + continue; + } + + var_08 = var_07 / param_01; + var_09 = maps\_utility::linear_interpolate(var_08,param_03,param_02); + var_05 thread artilleryshellshock("default",var_09); + } +} + +//Function Number: 16 +artilleryshellshock(param_00,param_01) +{ + if(isdefined(self.beingartilleryshellshocked) && self.beingartilleryshellshocked) + { + return; + } + + self.beingartilleryshellshocked = 1; + self shellshock(param_00,param_01); + wait param_01 + 1; + self.beingartilleryshellshocked = 0; +} + +//Function Number: 17 +callstrike_bombeffect(param_00,param_01,param_02,param_03,param_04,param_05) +{ + wait param_03; + if(!isdefined(param_04)) + { + return; + } + + param_00 playsound("veh_mig29_sonic_boom"); + var_06 = anglestoforward(param_00.angles); + var_07 = spawnbomb(param_00.origin,param_00.angles); + var_07.airstriketype = param_05; + var_07 movegravity(anglestoforward(param_00.angles) * 4666.667,3); + wait 1; + var_08 = spawn("script_model",var_07.origin); + var_08 setmodel("tag_origin"); + var_08.origin = var_07.origin; + var_08.angles = var_07.angles; + var_07 setmodel("tag_origin"); + wait 0.1; + var_09 = var_08.origin; + var_0A = var_08.angles; + playfxontag(level.var_3443,var_08,"tag_origin"); + wait 1; + var_0B = 12; + var_0C = 5; + var_0D = 55; + var_0E = var_0D - var_0C / var_0B; + var_0F = (0,0,0); + for(var_10 = 0;var_10 < var_0B;var_10++) + { + var_11 = anglestoforward(var_0A + (var_0D - var_0E * var_10,randomint(10) - 5,0)); + var_12 = var_09 + var_11 * 10000; + var_13 = bullettrace(var_09,var_12,0,undefined); + var_14 = var_13["position"]; + var_0F = var_0F + var_14; + radiusdamage(var_14 + (0,0,16),512,200,30,param_04,"MOD_PROJECTILE_SPLASH","artillery_mp"); + if(var_10 % 3 == 0) + { + thread common_scripts\utility::play_sound_in_space("exp_airstrike_bomb",var_14); + playrumbleonposition("artillery_rumble",var_14); + earthquake(0.7,0.75,var_14,1000); + } + + wait 0.05; + } + + var_0F = var_0F / var_0B + (0,0,128); + wait 5; + var_08 delete(); + var_07 delete(); +} + +//Function Number: 18 +spawnbomb(param_00,param_01) +{ + var_02 = spawn("script_model",param_00); + var_02.angles = param_01; + var_02 setmodel("projectile_cbu97_clusterbomb"); + return var_02; +} + +//Function Number: 19 +dobomberstrike(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + if(!isdefined(param_00)) + { + return; + } + + var_07 = 100; + var_08 = 150; + var_09 = param_02 + (randomfloat(2) - 1 * var_07,randomfloat(2) - 1 * var_07,0); + var_0A = param_03 + (randomfloat(2) - 1 * var_08,randomfloat(2) - 1 * var_08,0); + var_0B = airstrike_spawn_fake_plane("stealth",param_00,var_09); + var_0B playloopsound("veh_b2_dist_loop"); + var_0B setmodel("vehicle_b2_bomber"); + var_0B.angles = param_06; + var_0C = anglestoforward(param_06); + var_0B moveto(var_0A,param_05,0,0); + thread bomberdropbombs(var_0B,param_01,param_00); + wait param_05; + var_0B notify("delete"); + var_0B delete(); +} + +//Function Number: 20 +bomberdropbombs(param_00,param_01,param_02) +{ + while(!targetisclose(param_00,param_01,5000)) + { + wait 0.05; + } + + var_03 = 1; + var_04 = 0; + param_00 notify("start_bombing"); + param_00 thread playbombfx(); + for(var_05 = targetgetdist(param_00,param_01);var_05 < 5000;var_05 = targetgetdist(param_00,param_01)) + { + if(var_05 < 1500 && !var_04) + { + param_00 playsound("veh_b2_sonic_boom"); + var_04 = 1; + } + + var_03 = !var_03; + if(var_05 < 4500) + { + param_00 thread callstrike_bomb(param_00.origin,param_02,(0,0,0),var_03); + } + + wait 0.1; + } + + param_00 notify("stop_bombing"); +} + +//Function Number: 21 +targetisclose(param_00,param_01,param_02) +{ + if(!isdefined(param_02)) + { + param_02 = 3000; + } + + var_03 = targetisinfront(param_00,param_01); + if(var_03) + { + var_04 = 1; + } + else + { + var_04 = -1; + } + + var_05 = common_scripts\utility::flat_origin(param_00.origin); + var_06 = var_05 + anglestoforward(common_scripts\utility::flat_angle(param_00.angles)) * var_04 * 100000; + var_07 = pointonsegmentnearesttopoint(var_05,var_06,param_01); + var_08 = distance(var_05,var_07); + if(var_08 < param_02) + { + return 1; + } + + return 0; +} + +//Function Number: 22 +targetisinfront(param_00,param_01) +{ + var_02 = anglestoforward(common_scripts\utility::flat_angle(param_00.angles)); + var_03 = vectornormalize(common_scripts\utility::flat_origin(param_01) - param_00.origin); + var_04 = vectordot(var_02,var_03); + if(var_04 > 0) + { + return 1; + } + + return 0; +} + +//Function Number: 23 +targetgetdist(param_00,param_01) +{ + var_02 = targetisinfront(param_00,param_01); + if(var_02) + { + var_03 = 1; + } + else + { + var_03 = -1; + } + + var_04 = common_scripts\utility::flat_origin(param_00.origin); + var_05 = var_04 + anglestoforward(common_scripts\utility::flat_angle(param_00.angles)) * var_03 * 100000; + var_06 = pointonsegmentnearesttopoint(var_04,var_05,param_01); + var_07 = distance(var_04,var_06); + return var_07; +} + +//Function Number: 24 +playbombfx() +{ + self endon("stop_bombing"); + for(;;) + { + playfxontag(level.stealthbombfx,self,"tag_left_alamo_missile"); + playfxontag(level.stealthbombfx,self,"tag_right_alamo_missile"); + wait 0.5; + } +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_sp_killstreaks.gsc b/MW3/PC/SP/maps/_sp_killstreaks.gsc new file mode 100644 index 0000000..8d93fb5 --- /dev/null +++ b/MW3/PC/SP/maps/_sp_killstreaks.gsc @@ -0,0 +1,925 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_sp_killstreaks.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 35 + * Decompile Time: 568 ms + * Timestamp: 10/27/2023 2:20:50 AM +*******************************************************************/ + +//Function Number: 1 +sp_killstreaks_global_preload() +{ + precachestring(&"SP_KILLSTREAKS_CAPTURING_CRATE"); + precacheshader("progress_bar_fill"); + precacheshader("progress_bar_bg"); + precacheshader("dpad_killstreak_carepackage"); + precacheshader("specialty_carepackage"); + precachestring(&"SP_KILLSTREAKS_SHAREPACKAGE_TITLE"); + precachestring(&"SP_KILLSTREAKS_SHAREPACKAGE_DESC"); + precachestring(&"SP_KILLSTREAKS_CRATE_HIJACK_TITLE"); + precachestring(&"SP_KILLSTREAKS_CRATE_HIJACK_DESC"); + precachestring(&"SP_KILLSTREAKS_EARNED_AIRDROP"); + precachestring(&"SP_KILLSTREAKS_NAME_AIRDROP"); + precacheitem("killstreak_sentry_sp"); + precacheshader("specialty_sentry_gun_crate"); + precacheshader("specialty_airdrop_sentry_minigun"); + precachestring(&"SP_KILLSTREAKS_EARNED_AIRDROP_SENTRY"); + precachestring(&"SP_KILLSTREAKS_SENTRY_PICKUP"); + precachestring(&"SP_KILLSTREAKS_REWARDNAME_AIRDROP_SENTRY"); + precachestring(&"SP_KILLSTREAKS_REWARDNAME_SENTRY"); + precacheshader("specialty_stalker"); + precacheshader("specialty_longersprint"); + precacheshader("specialty_fastreload"); + precacheshader("specialty_quickdraw"); + precacheshader("specialty_steadyaim"); + precachestring(&"SP_KILLSTREAKS_SPECIALTY_LONGERSPRINT_PICKUP"); + precachestring(&"SP_KILLSTREAKS_SPECIALTY_FASTRELOAD_PICKUP"); + precachestring(&"SP_KILLSTREAKS_SPECIALTY_QUICKDRAW_PICKUP"); + precachestring(&"SP_KILLSTREAKS_SPECIALTY_BULLETACCURACY_PICKUP"); + precachestring(&"SP_KILLSTREAKS_SPECIALTY_STALKER_PICKUP"); + precacheitem("c4"); + precacheshader("hud_icon_c4"); + precachestring(&"SP_KILLSTREAKS_EARNED_AIRDROP_C4"); + precachestring(&"SP_KILLSTREAKS_C4_PICKUP"); + precachestring(&"SP_KILLSTREAKS_REWARDNAME_AIRDROP_C4"); + precacheshader("waypoint_ammo_friendly"); + precachestring(&"PLATFORM_RESUPPLY"); + precachestring(&"SP_KILLSTREAKS_REWARDNAME_AIRDROP_AMMO"); + precacheitem("remote_missile_detonator"); + precacheitem("remote_missile"); + precacheshader("dpad_killstreak_hellfire_missile"); + precacheshader("specialty_predator_missile"); + precachestring(&"SP_KILLSTREAKS_EARNED_PREDATOR_MISSILE"); + precachestring(&"SP_KILLSTREAKS_REMOTEMISSILE_PICKUP"); + precachestring(&"SP_KILLSTREAKS_REWARDNAME_AIRDROP_REMOTEMISSILE"); + precachestring(&"SP_KILLSTREAKS_REWARDNAME_REMOTEMISSILE"); + precacheshader("specialty_nuke"); +} + +//Function Number: 2 +sp_killstreaks_init() +{ + level.ks = spawnstruct(); + level.ks.killstreaktypes = []; + var_00 = common_scripts\utility::getstruct("map_center","targetname"); + level.mapcenter = var_00.origin; + common_scripts\utility::array_thread(level.players,::sp_killstreaks_player_init); + if(!maps\_sp_airdrop::sp_airdrop_init_done()) + { + maps\_sp_airdrop::sp_airdrop_init(); + } + + sp_killstreaks_hud_init(); + level.ks.globalinitdone = 1; +} + +//Function Number: 3 +sp_killstreaks_hud_init() +{ + level.uiparent = spawnstruct(); + level.uiparent.horzalign = "left"; + level.uiparent.vertalign = "top"; + level.uiparent.alignx = "left"; + level.uiparent.aligny = "top"; + level.uiparent.x = 0; + level.uiparent.y = 0; + level.uiparent.width = 0; + level.uiparent.height = 0; + level.uiparent.children = []; + level.fontheight = 12; + level.hud["allies"] = spawnstruct(); + level.hud["axis"] = spawnstruct(); + level.primaryprogressbary = -61; + level.primaryprogressbarx = 0; + level.primaryprogressbarheight = 9; + level.primaryprogressbarwidth = 120; + level.primaryprogressbartexty = -75; + level.primaryprogressbartextx = 0; + level.primaryprogressbarfontsize = 0.6; + level.teamprogressbary = 32; + level.teamprogressbarheight = 14; + level.teamprogressbarwidth = 192; + level.teamprogressbartexty = 8; + level.teamprogressbarfontsize = 1.65; + if(issplitscreen()) + { + level.lowertextyalign = "BOTTOM"; + level.lowertexty = -76; + level.lowertextfontsize = 1.14; + return; + } + + level.lowertextyalign = "CENTER"; + level.lowertexty = 70; + level.lowertextfontsize = 1.6; +} + +//Function Number: 4 +sp_killstreaks_init_done() +{ + return isdefined(level.ks) && isdefined(level.ks.globalinitdone); +} + +//Function Number: 5 +sp_killstreaks_player_init() +{ + self.ks = spawnstruct(); + self.ks.killstreaks = []; + thread sp_killstreak_use_waiter(); + if(!isdefined(self.remotemissile_actionslot)) + { + self.remotemissile_actionslot = 4; + } + + thread maps\_remotemissile_utility::remotemissile_no_autoreload(); +} + +//Function Number: 6 +add_sp_killstreak(param_00) +{ + var_01 = undefined; + var_02 = undefined; + var_03 = undefined; + var_04 = undefined; + var_05 = undefined; + var_06 = undefined; + var_07 = undefined; + var_08 = undefined; + var_09 = undefined; + if(issubstr(param_00,"specialty_")) + { + var_01 = "airdrop_marker_mp"; + var_02 = ::sp_killstreak_carepackage_main; + var_0A = "SP_KILLSTREAKS_REWARDNAME_AIRDROP"; + var_03 = "UK_1mc_achieve_carepackage"; + var_04 = "UK_1mc_use_carepackage"; + var_05 = "specialty_carepackage"; + var_06 = &"SP_KILLSTREAKS_EARNED_AIRDROP"; + var_09 = ::sp_killstreak_perk_crateopen; + switch(param_00) + { + case "specialty_longersprint": + var_07 = "specialty_longersprint"; + var_08 = &"SP_KILLSTREAKS_SPECIALTY_LONGERSPRINT_PICKUP"; + break; + + case "specialty_fastreload": + var_07 = "specialty_fastreload"; + var_08 = &"SP_KILLSTREAKS_SPECIALTY_FASTRELOAD_PICKUP"; + break; + + case "specialty_quickdraw": + var_07 = "specialty_quickdraw"; + var_08 = &"SP_KILLSTREAKS_SPECIALTY_QUICKDRAW_PICKUP"; + break; + + case "specialty_detectexplosive": + var_07 = "specialty_bombsquad"; + var_08 = &"SP_KILLSTREAKS_SPECIALTY_DETECTEXPLOSIVE_PICKUP"; + break; + + case "specialty_bulletaccuracy": + var_07 = "specialty_steadyaim"; + var_08 = &"SP_KILLSTREAKS_SPECIALTY_BULLETACCURACY_PICKUP"; + break; + + case "specialty_stalker": + var_07 = "specialty_stalker"; + var_08 = &"SP_KILLSTREAKS_SPECIALTY_STALKER_PICKUP"; + break; + + default: + break; + } + } + else + { + switch(var_01) + { + case "carepackage": + var_02 = "airdrop_marker_mp"; + var_03 = ::sp_killstreak_carepackage_main; + var_0A = "SP_KILLSTREAKS_REWARDNAME_AIRDROP"; + var_03 = "UK_1mc_achieve_carepackage"; + var_04 = "UK_1mc_use_carepackage"; + var_05 = "specialty_carepackage"; + var_06 = &"SP_KILLSTREAKS_EARNED_AIRDROP"; + var_07 = "dpad_killstreak_carepackage"; + var_08 = &"SP_KILLSTREAKS_NAME_AIRDROP"; + var_09 = undefined; + break; + + case "carepackage_sentry": + var_02 = "airdrop_marker_mp"; + var_03 = ::sp_killstreak_carepackage_main; + var_0A = "SP_KILLSTREAKS_REWARDNAME_AIRDROP_SENTRY"; + var_03 = "UK_1mc_deploy_sentry"; + var_04 = undefined; + var_05 = "specialty_airdrop_sentry_minigun"; + var_06 = &"SP_KILLSTREAKS_EARNED_AIRDROP_SENTRY"; + var_07 = "specialty_sentry_gun_crate"; + var_08 = &"SP_KILLSTREAKS_SENTRY_PICKUP"; + var_09 = undefined; + break; + + case "sentry": + var_02 = "killstreak_sentry_sp"; + var_03 = ::sp_killstreak_autosentry_main; + var_0A = "SP_KILLSTREAKS_REWARDNAME_SENTRY"; + if(getdvarint("survival_chaos") == 1) + { + var_03 = "cm_bp_cp_sentrygun"; + } + else + { + var_03 = "UK_1mc_deploy_sentry"; + } + + var_04 = undefined; + var_05 = "specialty_airdrop_sentry_minigun"; + var_06 = &"SP_KILLSTREAKS_EARNED_AIRDROP_SENTRY"; + var_07 = "specialty_sentry_gun_crate"; + var_08 = &"SP_KILLSTREAKS_SENTRY_PICKUP"; + var_09 = undefined; + break; + + case "sentry_gl": + var_02 = "killstreak_sentry_sp"; + var_03 = ::sp_killstreak_autosentry_gl_main; + var_0A = "SP_KILLSTREAKS_REWARDNAME_SENTRY"; + var_03 = "UK_1mc_deploy_sentry"; + var_04 = undefined; + var_05 = "specialty_airdrop_sentry_minigun"; + var_06 = &"SP_KILLSTREAKS_EARNED_AIRDROP_SENTRY"; + var_07 = "specialty_sentry_gun_crate"; + var_08 = &"SP_KILLSTREAKS_SENTRY_PICKUP"; + var_09 = undefined; + break; + + case "carepackage_remote_missile": + var_02 = "airdrop_marker_mp"; + var_03 = ::sp_killstreak_carepackage_main; + var_0A = "SP_KILLSTREAKS_REWARDNAME_AIRDROP_REMOTEMISSILE"; + var_03 = "UK_1mc_achieve_carepackage"; + var_04 = "UK_1mc_use_carepackage"; + var_05 = "specialty_predator_missile"; + var_06 = &"SP_KILLSTREAKS_"; + var_07 = "dpad_killstreak_carepackage"; + var_08 = &"SP_KILLSTREAKS_NAME_AIRDROP"; + var_09 = undefined; + break; + + case "remote_missile": + var_02 = "remote_missile_detonator"; + var_03 = ::sp_killstreak_remotemissile_main; + var_0A = "SP_KILLSTREAKS_REWARDNAME_REMOTEMISSILE"; + var_03 = "UK_1mc_achieve_hellfire"; + var_04 = "UK_1mc_use_hellfire"; + var_05 = "specialty_predator_missile"; + var_06 = &"SP_KILLSTREAKS_EARNED_PREDATOR_MISSILE"; + var_07 = "dpad_killstreak_hellfire_missile"; + var_08 = &"SP_KILLSTREAKS_REMOTEMISSILE_PICKUP"; + var_09 = undefined; + break; + + case "carepackage_c4": + var_02 = "airdrop_marker_mp"; + var_03 = ::sp_killstreak_carepackage_main; + var_0A = "SP_KILLSTREAKS_REWARDNAME_AIRDROP_C4"; + var_03 = "UK_1mc_achieve_carepackage"; + var_04 = "UK_1mc_use_carepackage"; + var_05 = "hud_icon_c4"; + var_06 = &"SP_KILLSTREAKS_EARNED_AIRDROP_C4"; + var_07 = "hud_icon_c4"; + var_08 = &"SP_KILLSTREAKS_C4_PICKUP"; + var_09 = ::sp_killstreak_c4_crateopen; + break; + + case "carepackage_ammo": + var_02 = "airdrop_marker_mp"; + var_03 = ::sp_killstreak_carepackage_main; + var_0A = "SP_KILLSTREAKS_REWARDNAME_AIRDROP_AMMO"; + var_03 = "UK_1mc_achieve_carepackage"; + var_04 = "UK_1mc_use_carepackage"; + var_05 = "specialty_carepackage"; + var_06 = &"SP_KILLSTREAKS_EARNED_AIRDROP"; + var_07 = "waypoint_ammo_friendly"; + var_08 = &"PLATFORM_RESUPPLY"; + var_09 = ::sp_killstreak_ammo_crateopen; + break; + + case "carepackage_precision_airstrike": + var_02 = "airdrop_marker_mp"; + var_03 = ::sp_killstreak_carepackage_main; + var_0A = "SP_KILLSTREAKS_REWARDNAME_PRECISION_AIRSTRIKE"; + var_03 = "UK_1mc_achieve_carepackage"; + var_04 = "UK_1mc_use_carepackage"; + var_05 = "specialty_precision_airstrike"; + var_06 = &"SP_KILLSTREAKS_EARNED_PRECISION_AIRSTRIKE"; + var_07 = "dpad_killstreak_carepackage"; + var_08 = &"SP_KILLSTREAKS_PRECISION_AIRSTRIKE_PICKUP"; + var_09 = undefined; + break; + + case "precision_airstrike": + var_02 = "killstreak_precision_airstrike_sp"; + var_03 = ::sp_killstreak_airstrike_main; + var_0A = "SP_KILLSTREAKS_REWARDNAME_PRECISION_AIRSTRIKE"; + var_03 = "UK_1mc_achieve_airstrike"; + var_04 = "UK_1mc_use_airstrike"; + var_05 = "specialty_precision_airstrike"; + var_06 = &"SP_KILLSTREAKS_EARNED_PRECISION_AIRSTRIKE"; + var_07 = "dpad_killstreak_precision_airstrike"; + var_08 = &"SP_KILLSTREAKS_PRECISION_AIRSTRIKE_PICKUP"; + var_09 = undefined; + break; + + case "carepackage_stealth_airstrike": + var_02 = "airdrop_marker_mp"; + var_03 = ::sp_killstreak_carepackage_main; + var_0A = "SP_KILLSTREAKS_REWARDNAME_STEALTH_AIRSTRIKE"; + var_03 = "UK_1mc_achieve_carepackage"; + var_04 = "UK_1mc_use_carepackage"; + var_05 = "specialty_stealth_bomber"; + var_06 = &"SP_KILLSTREAKS_EARNED_STEALTH_AIRSTRIKE"; + var_07 = "dpad_killstreak_carepackage"; + var_08 = &"SP_KILLSTREAKS_STEALTH_AIRSTRIKE_PICKUP"; + var_09 = undefined; + break; + + case "stealth_airstrike": + var_02 = "killstreak_stealth_airstrike_sp"; + var_03 = ::sp_killstreak_airstrike_main; + var_0A = "SP_KILLSTREAKS_REWARDNAME_STEALTH_AIRSTRIKE"; + var_03 = "UK_1mc_achieve_airstrike"; + var_04 = "UK_1mc_use_airstrike"; + var_05 = "specialty_stealth_bomber"; + var_06 = &"SP_KILLSTREAKS_EARNED_STEALTH_AIRSTRIKE"; + var_07 = "dpad_killstreak_stealth_bomber"; + var_08 = &"SP_KILLSTREAKS_STEALTH_AIRSTRIKE_PICKUP"; + var_09 = undefined; + break; + + default: + break; + } + } + + var_0B = spawnstruct(); + var_0B.streaktype = param_00; + var_0B.weaponname = var_01; + var_0B.streakfunc = var_02; + var_0B.menurewarddesc = var_0A; + var_0B.achievevo = var_03; + var_0B.usevo = var_04; + var_0B.splashicon = var_05; + var_0B.splashhint = var_06; + var_0B.crateicon = var_07; + var_0B.cratehint = var_08; + var_0B.crateopenfunc = var_09; + level.ks.killstreaktypes[param_00] = var_0B; + add_killstreak_radio_dialogue(var_03,var_04); +} + +//Function Number: 7 +add_killstreak_radio_dialogue(param_00,param_01) +{ + if(!isdefined(level.scr_radio)) + { + level.scr_radio = []; + } + + var_02[0] = param_00; + foreach(var_04 in var_7B) + { + if(!maps\_utility::array_contains(level.scr_radio,var_04) && isdefined(var_04)) + { + level.scr_radio[var_04] = var_04; + } + } +} + +//Function Number: 8 +sp_killstreak_exists(param_00) +{ + foreach(var_03, var_02 in level.ks.killstreaktypes) + { + if(var_03 == param_00) + { + return 1; + } + } + + return 0; +} + +//Function Number: 9 +get_sp_killstreak_info(param_00) +{ + var_01 = level.ks.killstreaktypes[param_00]; + return var_01; +} + +//Function Number: 10 +give_sp_killstreak(param_00,param_01) +{ + if(!isdefined(self.ks.killstreaks[0])) + { + self.ks.killstreaks[0] = param_00; + } + else + { + var_02 = []; + foreach(var_04 in self.ks.killstreaks) + { + var_7B[var_7B.size] = var_04; + } + + self.ks.killstreaks = var_7B; + } + + activate_current_sp_killstreak(var_02); +} + +//Function Number: 11 +activate_current_sp_killstreak(param_00) +{ + var_01 = self.ks.killstreaks[0]; + var_02 = get_sp_killstreak_info(var_01); + self giveweapon(var_02.weaponname); + self setactionslot(4,"weapon",var_02.weaponname); + if(var_01 == "remote_missile") + { + maps\_remotemissile::enable_uav(1,var_02.weaponname); + } + + if(!isdefined(param_00) || !param_00) + { + thread maps\_utility::radio_dialogue(var_02.achievevo); + } +} + +//Function Number: 12 +take_sp_killstreak(param_00) +{ + var_01 = 0; + foreach(var_05, var_03 in self.ks.killstreaks) + { + if(var_03 == param_00) + { + self.ks.killstreaks = common_scripts\utility::array_remove(self.ks.killstreaks,param_00); + if(var_05 == 0) + { + var_04 = get_sp_killstreak_info(param_00); + self takeweapon(var_04.weaponname); + } + + var_01 = 1; + break; + } + } + + if(has_any_killstreak()) + { + activate_current_sp_killstreak(); + } +} + +//Function Number: 13 +has_any_killstreak() +{ + return self.ks.killstreaks.size; +} + +//Function Number: 14 +has_killstreak(param_00) +{ + if(has_any_killstreak()) + { + foreach(var_02 in self.ks.killstreaks) + { + if(param_00 == var_02) + { + return 1; + } + } + } + + return 0; +} + +//Function Number: 15 +sp_killstreak_use_waiter() +{ + self endon("death"); + for(;;) + { + self.ks.lastweaponused = self getcurrentweapon(); + self waittill("weapon_change",var_00); + if(!isalive(self)) + { + continue; + } + + var_01 = self.ks.killstreaks[0]; + if(!isdefined(var_01)) + { + continue; + } + + var_02 = get_sp_killstreak_info(var_01); + if(isdefined(var_02.weaponname)) + { + if(var_00 != var_02.weaponname) + { + continue; + } + } + + waittillframeend; + var_03 = sp_killstreak_use_pressed(var_02); + if(var_03) + { + used_sp_killstreak(var_02); + take_sp_killstreak(var_01); + } + else if(!isdefined(self.carrying_pickedup_sentry) || !self.carrying_pickedup_sentry) + { + post_killstreak_weapon_switchback(); + } + + if(maps\_utility::is_survival()) + { + wait 0.05; + if(isdefined(self.sentry_placement_failed) && self.sentry_placement_failed) + { + give_sp_killstreak(var_01,1); + } + } + + if(self getcurrentweapon() == "none") + { + while(self getcurrentweapon() == "none") + { + wait 0.05; + } + + waittillframeend; + } + } +} + +//Function Number: 16 +sp_killstreak_use_pressed(param_00) +{ + var_01 = param_00.streaktype; + if(!self isonground() && iscarrykillstreak(var_01)) + { + return 0; + } + + if(isusingremote()) + { + return 0; + } + + if(isdefined(self.selectinglocation)) + { + return 0; + } + + if(self isusingturret() && isridekillstreak(var_01) || iscarrykillstreak(var_01)) + { + iprintlnbold(&"MP_UNAVAILABLE_USING_TURRET"); + return 0; + } + + if(maps\_utility::ent_flag_exist("laststand_downed") && maps\_utility::ent_flag("laststand_downed") && isridekillstreak(var_01)) + { + iprintlnbold(&"MP_UNAVILABLE_IN_LASTSTAND"); + return 0; + } + + if(!common_scripts\utility::isweaponenabled()) + { + return 0; + } + + if(!self [[ param_00.streakfunc ]](param_00)) + { + return 0; + } + + return 1; +} + +//Function Number: 17 +used_sp_killstreak(param_00) +{ + self playlocalsound("weap_c4detpack_trigger_plr"); + if(isdefined(param_00.usevo) && param_00.streaktype != "remote_missile") + { + thread maps\_utility::radio_dialogue(param_00.usevo); + } +} + +//Function Number: 18 +post_killstreak_weapon_switchback() +{ + if(maps\_utility::is_player_down(self)) + { + return; + } + + if(isdefined(self.ks.lastweaponused)) + { + if(self.ks.lastweaponused == "none") + { + var_00 = self getweaponslistprimaries(); + self switchtoweapon(var_00[0]); + return; + } + + self switchtoweapon(self.ks.lastweaponused); + } +} + +//Function Number: 19 +sp_killstreak_remotemissile_main(param_00) +{ + var_01 = param_00.weaponname; + self.remotemissilefired = 0; + thread sp_killstreak_remotemissile_waitforfire(param_00.usevo); + while(self.using_uav) + { + wait 0.05; + } + + self notify("stopped_using_uav"); + return self.remotemissilefired; +} + +//Function Number: 20 +sp_killstreak_remotemissile_waitforfire(param_00) +{ + self endon("stopped_using_uav"); + self waittill("player_fired_remote_missile"); + self.remotemissilefired = 1; + thread maps\_utility::radio_dialogue(param_00); +} + +//Function Number: 21 +sp_killstreak_carepackage_main(param_00) +{ + var_01 = sp_carepackage_select_reward(param_00); + var_02 = maps\_sp_airdrop::sp_try_use_airdrop(var_01); + if(!var_02) + { + return 0; + } + + return 1; +} + +//Function Number: 22 +sp_carepackage_select_reward(param_00) +{ + if(issubstr(param_00.streaktype,"specialty_")) + { + return param_00.streaktype; + } + + if(param_00.streaktype == "carepackage_c4") + { + return "carepackage_c4"; + } + else if(param_00.streaktype == "carepackage_remote_missile") + { + return "remote_missile"; + } + else if(param_00.streaktype == "carepackage_sentry") + { + return "sentry"; + } + else if(param_00.streaktype == "carepackage_ammo") + { + return "carepackage_ammo"; + } + else if(param_00.streaktype == "carepackage_precision_airstrike") + { + return "precision_airstrike"; + } + else if(param_00.streaktype == "carepackage_stealth_airstrike") + { + return "stealth_airstrike"; + } + + var_01 = []; + var_02 = []; + var_01[var_01.size] = "sentry"; + var_02[var_02.size] = "remote_missile"; + var_02[var_02.size] = "precision_airstrike"; + var_02[var_02.size] = "stealth_airstrike"; + var_02[var_02.size] = "carepackage_c4"; + var_02[var_02.size] = "carepackage_ammo"; + return getweightedchanceroll(var_02,var_7B); +} + +//Function Number: 23 +sp_killstreak_ammo_crateopen() +{ + self playlocalsound("ammo_crate_use"); + refillammo(); +} + +//Function Number: 24 +refillammo() +{ + var_00 = self getweaponslistall(); + foreach(var_02 in var_00) + { + if(issubstr(var_02,"grenade")) + { + if(self getammocount(var_02) >= 1) + { + continue; + } + } + + self givemaxammo(var_02); + } +} + +//Function Number: 25 +sp_killstreak_perk_crateopen(param_00) +{ + thread maps\_so_survival_perks::give_perk(param_00); +} + +//Function Number: 26 +sp_killstreak_c4_crateopen() +{ + if(!self hasweapon("c4")) + { + self giveweapon("c4"); + self setactionslot(2,"weapon","c4"); + return; + } + + if(self getfractionmaxammo("c4") == 1) + { + return; + } + + var_00 = self getweaponammostock("c4"); + self setweaponammostock("c4",var_00 + 4); +} + +//Function Number: 27 +sp_killstreak_autosentry_main(param_00) +{ + lib_0616::givesentry("sentry_minigun"); + thread sentry_cancel_notify(); + self notifyonplayercommand("controller_sentry_cancel","+actionslot 4"); + self notifyonplayercommand("controller_sentry_cancel","weapnext"); + common_scripts\utility::waittill_any("sentry_placement_finished","sentry_placement_canceled"); + post_killstreak_weapon_switchback(); + return 1; +} + +//Function Number: 28 +sp_killstreak_autosentry_gl_main(param_00) +{ + lib_0616::givesentry("sentry_gun"); + thread sentry_cancel_notify(); + self notifyonplayercommand("controller_sentry_cancel","+actionslot 4"); + self notifyonplayercommand("controller_sentry_cancel","weapnext"); + common_scripts\utility::waittill_any("sentry_placement_finished","sentry_placement_canceled"); + post_killstreak_weapon_switchback(); + return 1; +} + +//Function Number: 29 +sentry_cancel_notify() +{ + self endon("sentry_placement_canceled"); + self endon("sentry_placement_finished"); + self waittill("controller_sentry_cancel"); + if(!isdefined(self.carrying_pickedup_sentry) || !self.carrying_pickedup_sentry) + { + self notify("sentry_placement_canceled"); + } +} + +//Function Number: 30 +sp_killstreak_airstrike_main(param_00) +{ + var_01 = param_00.streaktype; + var_02 = "default"; + if(var_01 == "precision_airstrike") + { + var_02 = "precision"; + } + else if(var_01 == "stealth_airstrike") + { + var_02 = "stealth"; + } + + var_03 = maps\_sp_airstrike::try_use_airstrike(var_02); + post_killstreak_weapon_switchback(); + return var_03; +} + +//Function Number: 31 +isusingremote() +{ + return isdefined(self.usingremote); +} + +//Function Number: 32 +isridekillstreak(param_00) +{ + switch(param_00) + { + case "predator_missile": + case "helicopter_mk19": + case "helicopter_minigun": + case "ac130": + return 1; + + default: + return 0; + } +} + +//Function Number: 33 +iscarrykillstreak(param_00) +{ + switch(param_00) + { + case "sentry_gl": + case "sentry": + return 1; + + default: + return 0; + } +} + +//Function Number: 34 +deadlykillstreak(param_00) +{ + switch(param_00) + { + case "harrier_airstrike": + case "predator_missile": + case "stealth_airstrike": + case "precision_airstrike": + case "ac130": + return 1; + } + + return 0; +} + +//Function Number: 35 +getweightedchanceroll(param_00,param_01) +{ + var_02 = undefined; + var_03 = -1; + foreach(var_05 in param_00) + { + if(param_01[var_05] <= 0) + { + continue; + } + + var_06 = randomint(param_01[var_05]); + if(isdefined(var_02) && param_01[var_02] >= 100) + { + if(param_01[var_05] < 100) + { + continue; + } + + continue; + } + + if(param_01[var_05] >= 100) + { + var_02 = var_05; + var_03 = var_06; + continue; + } + + if(var_06 > var_03) + { + var_02 = var_05; + var_03 = var_06; + } + } + + return var_02; +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_spawner.gsc b/MW3/PC/SP/maps/_spawner.gsc new file mode 100644 index 0000000..d1d4444 --- /dev/null +++ b/MW3/PC/SP/maps/_spawner.gsc @@ -0,0 +1,5517 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_spawner.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 204 + * Decompile Time: 3442 ms + * Timestamp: 10/27/2023 2:19:29 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + precachemodel("grenade_bag"); + createthreatbiasgroup("allies"); + createthreatbiasgroup("axis"); + createthreatbiasgroup("team3"); + createthreatbiasgroup("civilian"); + maps\_anim::addnotetrack_customfunction("generic","rappel_pushoff_initial_npc",::maps\_utility::enable_achievement_harder_they_fall_guy); + maps\_anim::addnotetrack_customfunction("generic","ps_rappel_pushoff_initial_npc",::maps\_utility::enable_achievement_harder_they_fall_guy); + maps\_anim::addnotetrack_customfunction("generic","feet_on_ground",::maps\_utility::disable_achievement_harder_they_fall_guy); + maps\_anim::addnotetrack_customfunction("generic","ps_rappel_clipout_npc",::maps\_utility::disable_achievement_harder_they_fall_guy); + foreach(var_01 in level.players) + { + var_01 setthreatbiasgroup("allies"); + } + + level._nextcoverprint = 0; + level._ai_group = []; + level.killedaxis = 0; + level.ffpoints = 0; + level.missionfailed = 0; + level.gather_delay = []; + level.smoke_thrown = []; + if(!isdefined(level.deathflags)) + { + level.deathflags = []; + } + + level.spawner_number = 0; + level.go_to_node_arrays = []; + if(!isdefined(level.subclass_spawn_functions)) + { + level.subclass_spawn_functions = []; + } + + level.subclass_spawn_functions["regular"] = ::subclass_regular; + level.subclass_spawn_functions["elite"] = ::subclass_elite; + level.team_specific_spawn_functions = []; + level.team_specific_spawn_functions["axis"] = ::spawn_team_axis; + level.team_specific_spawn_functions["allies"] = ::spawn_team_allies; + level.team_specific_spawn_functions["team3"] = ::spawn_team_team3; + level.team_specific_spawn_functions["neutral"] = ::spawn_team_neutral; + level.next_health_drop_time = 0; + level.guys_to_die_before_next_health_drop = randomintrange(1,4); + if(!isdefined(level.default_goalradius)) + { + level.default_goalradius = 2048; + } + + if(!isdefined(level.default_goalheight)) + { + level.default_goalheight = 512; + } + + level.portable_mg_gun_tag = "J_Shoulder_RI"; + level.mg42_hide_distance = 1024; + if(!isdefined(level.maxfriendlies)) + { + level.maxfriendlies = 11; + } + + level._max_script_health = 0; + var_03 = getaispeciesarray(); + common_scripts\utility::array_thread(var_03,::living_ai_prethink); + level.ai_classname_in_level = []; + level.drone_paths = []; + var_04 = getspawnerarray(); + for(var_05 = 0;var_05 < var_04.size;var_05++) + { + var_04[var_05] thread spawn_prethink(); + } + + level.drone_paths = undefined; + thread process_deathflags(); + common_scripts\utility::array_thread(var_03,::spawn_think); + level.ai_classname_in_level_keys = getarraykeys(level.ai_classname_in_level); + for(var_05 = 0;var_05 < level.ai_classname_in_level_keys.size;var_05++) + { + if(!issubstr(tolower(level.ai_classname_in_level_keys[var_05]),"rpg")) + { + continue; + } + + precacheitem("rpg_player"); + break; + } + + level.ai_classname_in_level_keys = undefined; + common_scripts\utility::run_thread_on_noteworthy("hiding_door_spawner",::maps\_hiding_door::hiding_door_spawner); +} + +//Function Number: 2 +check_script_char_group_ratio(param_00) +{ + if(param_00.size <= 16) + { + return; + } + + var_01 = 0; + var_02 = 0; + for(var_03 = 0;var_03 < param_00.size;var_03++) + { + if(!param_00[var_03].team != "axis") + { + continue; + } + + var_01++; + if(!param_00[var_03] has_char_group()) + { + continue; + } + + var_02++; + } +} + +//Function Number: 3 +has_char_group() +{ + if(isdefined(self.script_char_group)) + { + return 1; + } + + return isdefined(self.script_char_index); +} + +//Function Number: 4 +process_deathflags() +{ + foreach(var_02, var_01 in level.deathflags) + { + if(!isdefined(level.flag[var_02])) + { + common_scripts\utility::flag_init(var_02); + } + } +} + +//Function Number: 5 +spawn_guys_until_death_or_no_count() +{ + self endon("death"); + for(;;) + { + if(self.count > 0) + { + self waittill("spawned"); + } + + waittillframeend; + if(!self.count) + { + return; + } + } +} + +//Function Number: 6 +ai_deathflag() +{ + level.deathflags[self.script_deathflag]["ai"][self.unique_id] = self; + var_00 = self.unique_id; + var_01 = self.script_deathflag; + if(isdefined(self.script_deathflag_longdeath)) + { + waittilldeathorpaindeath(); + } + else + { + self waittill("death"); + } + + level.deathflags[var_01]["ai"][var_00] = undefined; + update_deathflag(var_01); +} + +//Function Number: 7 +vehicle_deathflag() +{ + var_00 = self.unique_id; + var_01 = self.script_deathflag; + if(!isdefined(level.deathflags) || !isdefined(level.deathflags[self.script_deathflag])) + { + waittillframeend; + if(!isdefined(self)) + { + return; + } + } + + level.deathflags[var_01]["vehicles"][var_00] = self; + self waittill("death"); + level.deathflags[var_01]["vehicles"][var_00] = undefined; + update_deathflag(var_01); +} + +//Function Number: 8 +spawner_deathflag() +{ + level.deathflags[self.script_deathflag] = []; + waittillframeend; + if(!isdefined(self) || self.count == 0) + { + return; + } + + self.spawner_number = level.spawner_number; + level.spawner_number++; + level.deathflags[self.script_deathflag]["spawners"][self.spawner_number] = self; + var_00 = self.script_deathflag; + var_01 = self.spawner_number; + spawn_guys_until_death_or_no_count(); + level.deathflags[var_00]["spawners"][var_01] = undefined; + update_deathflag(var_00); +} + +//Function Number: 9 +vehicle_spawner_deathflag() +{ + level.deathflags[self.script_deathflag] = []; + waittillframeend; + if(!isdefined(self)) + { + return; + } + + self.spawner_number = level.spawner_number; + level.spawner_number++; + level.deathflags[self.script_deathflag]["vehicle_spawners"][self.spawner_number] = self; + var_00 = self.script_deathflag; + var_01 = self.spawner_number; + spawn_guys_until_death_or_no_count(); + level.deathflags[var_00]["vehicle_spawners"][var_01] = undefined; + update_deathflag(var_00); +} + +//Function Number: 10 +update_deathflag(param_00) +{ + level notify("updating_deathflag_" + param_00); + level endon("updating_deathflag_" + param_00); + waittillframeend; + foreach(var_02 in level.deathflags[param_00]) + { + if(getarraykeys(var_02).size > 0) + { + return; + } + } + + common_scripts\utility::flag_set(param_00); +} + +//Function Number: 11 +outdoor_think(param_00) +{ + param_00 endon("death"); + for(;;) + { + param_00 waittill("trigger",var_01); + if(!isai(var_01)) + { + continue; + } + + var_01 thread maps\_utility::ignore_triggers(0.15); + var_01 maps\_utility::disable_cqbwalk(); + var_01.wantshotgun = 0; + } +} + +//Function Number: 12 +indoor_think(param_00) +{ + param_00 endon("death"); + for(;;) + { + param_00 waittill("trigger",var_01); + if(!isai(var_01)) + { + continue; + } + + var_01 thread maps\_utility::ignore_triggers(0.15); + var_01 maps\_utility::enable_cqbwalk(); + var_01.wantshotgun = 1; + } +} + +//Function Number: 13 +doautospawn(param_00) +{ + param_00 endon("death"); + self endon("death"); + for(;;) + { + self waittill("trigger"); + if(!param_00.count) + { + return; + } + + if(self.target != param_00.targetname) + { + return; + } + + if(isdefined(param_00.triggerunlocked)) + { + return; + } + + var_01 = param_00 maps\_utility::spawn_ai(); + if(maps\_utility::spawn_failed(var_01)) + { + param_00 notify("spawn_failed"); + } + + if(isdefined(self.wait) && self.wait > 0) + { + wait self.wait; + } + } +} + +//Function Number: 14 +trigger_spawner(param_00) +{ + var_01 = param_00.random_killspawner; + var_02 = param_00.target; + param_00 waittill("trigger"); + param_00 maps\_utility::script_delay(); + if(isdefined(var_01)) + { + waittillframeend; + } + + var_03 = getentarray(var_02,"targetname"); + foreach(var_05 in var_03) + { + if(var_05.code_classname == "script_vehicle") + { + if((isdefined(var_05.script_moveoverride) && var_05.script_moveoverride == 1) || !isdefined(var_05.target)) + { + thread maps\_vehicle::vehicle_spawn(var_05); + } + else + { + var_05 thread maps\_vehicle::spawn_vehicle_and_gopath(); + } + + continue; + } + + var_05 thread trigger_spawner_spawns_guys(); + } + + if(isdefined(level.spawn_pool_enabled)) + { + trigger_pool_spawners(var_02); + } +} + +//Function Number: 15 +trigger_pool_spawners(param_00) +{ + var_01 = common_scripts\utility::getstructarray(param_00,"targetname"); + if(getentarray(param_00,"target").size <= 1) + { + maps\_utility::deletestructarray_ref(var_01); + } + + var_02 = get_pool_spawners_from_structarray(var_01); + common_scripts\utility::array_thread(var_02,::trigger_spawner_spawns_guys); +} + +//Function Number: 16 +get_pool_spawners_from_structarray(param_00) +{ + var_01 = []; + var_02 = []; + foreach(var_04 in param_00) + { + if(!isdefined(var_04.script_spawn_pool)) + { + continue; + } + + if(!isdefined(var_02[var_04.script_spawn_pool])) + { + var_02[var_04.script_spawn_pool] = []; + } + + var_02[var_04.script_spawn_pool][var_02[var_04.script_spawn_pool].size] = var_04; + } + + foreach(var_07 in var_02) + { + foreach(var_04 in var_07) + { + var_09 = get_spawner_from_pool(var_04,var_07.size); + var_01[var_01.size] = var_09; + } + } + + return var_01; +} + +//Function Number: 17 +get_spawner_from_pool(param_00,param_01) +{ + if(!isdefined(level.spawner_pool)) + { + level.spawner_pool = []; + } + + if(!isdefined(level.spawner_pool[param_00.script_spawn_pool])) + { + level.spawner_pool[param_00.script_spawn_pool] = create_new_spawner_pool(param_00.script_spawn_pool); + } + + var_02 = level.spawner_pool[param_00.script_spawn_pool]; + var_03 = var_02.pool[var_02.poolindex]; + var_02.poolindex++; + var_02.poolindex = var_02.poolindex % var_02.pool.size; + var_03.origin = param_00.origin; + if(isdefined(param_00.angles)) + { + var_03.angles = param_00.angles; + } + else if(isdefined(param_00.target)) + { + var_04 = getnode(param_00.target,"targetname"); + if(isdefined(var_04)) + { + var_03.angles = vectortoangles(var_04.origin - var_03.origin); + } + } + + if(isdefined(level.spawn_pool_copy_function)) + { + var_03 [[ level.spawn_pool_copy_function ]](param_00); + } + + if(isdefined(param_00.target)) + { + var_03.target = param_00.target; + } + + var_03.count = 1; + return var_03; +} + +//Function Number: 18 +create_new_spawner_pool(param_00) +{ + var_01 = getspawnerarray(); + var_02 = spawnstruct(); + var_03 = []; + foreach(var_05 in var_01) + { + if(!isdefined(var_05.script_spawn_pool)) + { + continue; + } + + if(var_05.script_spawn_pool != param_00) + { + continue; + } + + var_03[var_03.size] = var_05; + } + + var_02.poolindex = 0; + var_02.pool = var_03; + return var_02; +} + +//Function Number: 19 +trigger_spawner_spawns_guys() +{ + self endon("death"); + maps\_utility::script_delay(); + if(!isdefined(self)) + { + return undefined; + } + + if(isdefined(self.script_drone)) + { + var_00 = maps\_utility::dronespawn(self); + return undefined; + } + else if(!issubstr(self.classname,"actor")) + { + return undefined; + } + + var_01 = isdefined(self.script_stealth) && common_scripts\utility::flag("_stealth_enabled") && !common_scripts\utility::flag("_stealth_spotted"); + if(isdefined(self.script_forcespawn)) + { + var_00 = self stalingradspawn(var_01); + } + else + { + var_00 = self dospawn(var_01); + } + + if(!maps\_utility::spawn_failed(var_01)) + { + if(isdefined(self.script_combatbehavior)) + { + if(self.script_combatbehavior == "heat") + { + var_01 maps\_utility::enable_heat_behavior(); + } + + if(self.script_combatbehavior == "cqb") + { + var_01 maps\_utility::enable_cqbwalk(); + } + } + } + + return var_01; +} + +//Function Number: 20 +trigger_spawner_reinforcement(param_00) +{ + var_01 = param_00.target; + var_02 = 0; + var_03 = getentarray(var_01,"targetname"); + foreach(var_05 in var_03) + { + if(!isdefined(var_05.target)) + { + continue; + } + + var_06 = getent(var_05.target,"targetname"); + if(!isdefined(var_06)) + { + if(!isdefined(var_05.script_linkto)) + { + continue; + } + + var_06 = var_05 common_scripts\utility::get_linked_ent(); + if(!isdefined(var_06)) + { + continue; + } + + if(!isspawner(var_06)) + { + continue; + } + } + + var_02 = 1; + break; + } + + param_00 waittill("trigger"); + param_00 maps\_utility::script_delay(); + var_03 = getentarray(var_01,"targetname"); + foreach(var_05 in var_03) + { + var_05 thread trigger_reinforcement_spawn_guys(); + } +} + +//Function Number: 21 +trigger_reinforcement_spawn_guys() +{ + var_00 = trigger_reinforcement_get_reinforcement_spawner(); + var_01 = trigger_spawner_spawns_guys(); + if(!isdefined(var_01)) + { + self delete(); + if(isdefined(var_00)) + { + var_01 = var_00 trigger_spawner_spawns_guys(); + var_00 delete(); + if(!isdefined(var_01)) + { + return; + } + } + else + { + return; + } + } + + if(!isdefined(var_00)) + { + return; + } + + var_01 waittill("death"); + if(!isdefined(var_00)) + { + return; + } + + if(!isdefined(var_00.count)) + { + var_00.count = 1; + } + + for(;;) + { + if(!isdefined(var_00)) + { + break; + } + + var_02 = var_00 thread trigger_spawner_spawns_guys(); + if(!isdefined(var_02)) + { + var_00 delete(); + break; + } + + var_02 thread reincrement_count_if_deleted(var_00); + var_02 waittill("death",var_03); + if(!player_saw_kill(var_02,var_03)) + { + if(!isdefined(var_00)) + { + break; + } + + var_00.count++; + } + + if(!isdefined(var_02)) + { + continue; + } + + if(!isdefined(var_00)) + { + break; + } + + if(!isdefined(var_00.count)) + { + break; + } + + if(var_00.count <= 0) + { + break; + } + + if(!maps\_utility::script_wait()) + { + wait randomfloatrange(1,3); + } + } + + if(isdefined(var_00)) + { + var_00 delete(); + } +} + +//Function Number: 22 +trigger_reinforcement_get_reinforcement_spawner() +{ + if(isdefined(self.target)) + { + var_00 = getent(self.target,"targetname"); + if(isdefined(var_00) && isspawner(var_00)) + { + return var_00; + } + } + + if(isdefined(self.script_linkto)) + { + var_00 = common_scripts\utility::get_linked_ent(); + if(isdefined(var_00) && isspawner(var_00)) + { + return var_00; + } + } + + return undefined; +} + +//Function Number: 23 +flood_spawner_scripted(param_00) +{ + common_scripts\utility::array_thread(param_00,::flood_spawner_init); + common_scripts\utility::array_thread(param_00,::flood_spawner_think); +} + +//Function Number: 24 +reincrement_count_if_deleted(param_00) +{ + param_00 endon("death"); + if(isdefined(self.script_force_count)) + { + if(self.script_force_count) + { + return; + } + } + + self waittill("death"); + if(!isdefined(self)) + { + param_00.count++; + } +} + +//Function Number: 25 +delete_start(param_00) +{ + for(var_01 = 0;var_01 < 2;var_01++) + { + switch(var_01) + { + case 0: + var_02 = "axis"; + break; + + default: + var_02 = "allies"; + break; + } + + var_03 = getentarray(var_02,"team"); + for(var_04 = 0;var_04 < var_03.size;var_04++) + { + if(isdefined(var_03[var_04].script_start)) + { + if(var_03[var_04].script_start == param_00) + { + var_03[var_04] thread delete_me(); + } + } + } + } +} + +//Function Number: 26 +kill_trigger(param_00) +{ + if(!isdefined(param_00)) + { + return; + } + + if(isdefined(param_00.targetname) && param_00.targetname != "flood_spawner") + { + return; + } + + if(level.script == "sniperescape") + { + return; + } + + param_00 delete(); +} + +//Function Number: 27 +random_killspawner(param_00) +{ + param_00 endon("death"); + var_01 = param_00.script_random_killspawner; + waittillframeend; + if(!isdefined(level.killspawn_groups[var_01])) + { + return; + } + + param_00 waittill("trigger"); + cull_spawners_from_killspawner(var_01); +} + +//Function Number: 28 +cull_spawners_from_killspawner(param_00) +{ + if(!isdefined(level.killspawn_groups[param_00])) + { + return; + } + + var_01 = level.killspawn_groups[param_00]; + var_02 = getarraykeys(var_01); + if(var_02.size <= 1) + { + return; + } + + var_03 = common_scripts\utility::random(var_02); + var_01[var_03] = undefined; + foreach(var_09, var_05 in var_01) + { + foreach(var_07 in var_05) + { + if(isdefined(var_07)) + { + var_07 delete(); + } + } + + level.killspawn_groups[param_00][var_09] = undefined; + } +} + +//Function Number: 29 +killspawner(param_00) +{ + var_01 = getspawnerarray(); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + if(isdefined(var_01[var_02].script_killspawner) && param_00 == var_01[var_02].script_killspawner) + { + var_01[var_02] delete(); + } + } +} + +//Function Number: 30 +kill_spawner(param_00) +{ + var_01 = param_00.script_killspawner; + param_00 waittill("trigger"); + waittillframeend; + waittillframeend; + killspawner(var_01); + kill_trigger(param_00); +} + +//Function Number: 31 +empty_spawner(param_00) +{ + var_01 = param_00.script_emptyspawner; + param_00 waittill("trigger"); + var_02 = getspawnerarray(); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + if(!isdefined(var_02[var_03].script_emptyspawner)) + { + continue; + } + + if(var_01 != var_02[var_03].script_emptyspawner) + { + continue; + } + + if(isdefined(var_02[var_03].script_flanker)) + { + level notify("stop_flanker_behavior" + var_02[var_03].script_flanker); + } + + var_02[var_03] maps\_utility::set_count(0); + var_02[var_03] notify("emptied spawner"); + } + + param_00 notify("deleted spawners"); +} + +//Function Number: 32 +kill_spawnernum(param_00) +{ + var_01 = getspawnerarray(); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + if(!isdefined(var_01[var_02].script_killspawner)) + { + continue; + } + + if(param_00 != var_01[var_02].script_killspawner) + { + continue; + } + + var_01[var_02] delete(); + } +} + +//Function Number: 33 +trigger_spawn(param_00) +{ +} + +//Function Number: 34 +spawn_grenade(param_00,param_01) +{ + if(!isdefined(level.grenade_cache) || !isdefined(level.grenade_cache[param_01])) + { + level.grenade_cache_index[param_01] = 0; + level.grenade_cache[param_01] = []; + } + + var_02 = level.grenade_cache_index[param_01]; + var_03 = level.grenade_cache[param_01][var_02]; + if(isdefined(var_03)) + { + var_03 delete(); + } + + var_03 = spawn("weapon_fraggrenade",param_00); + level.grenade_cache[param_01][var_02] = var_03; + level.grenade_cache_index[param_01] = var_02 + 1 % 16; + return var_03; +} + +//Function Number: 35 +waittilldeathorpaindeath() +{ + self endon("death"); + self waittill("pain_death"); +} + +//Function Number: 36 +drop_gear() +{ + var_00 = self.team; + waittilldeathorpaindeath(); + if(!isdefined(self)) + { + return; + } + + if(isdefined(self.nodrop)) + { + return; + } + + self.ignoreforfixednodesafecheck = 1; + if(self.grenadeammo <= 0) + { + return; + } + + level.nextgrenadedrop--; + if(level.nextgrenadedrop > 0) + { + return; + } + + level.nextgrenadedrop = 2 + randomint(2); + var_01 = 25; + var_02 = 12; + var_03 = self.origin + (randomint(var_01) - var_02,randomint(var_01) - var_02,2) + (0,0,42); + var_04 = (0,randomint(360),90); + thread spawn_grenade_bag(var_03,var_04,self.team); +} + +//Function Number: 37 +spawn_grenade_bag(param_00,param_01,param_02) +{ + var_03 = spawn_grenade(param_00,param_02); + var_03 setmodel("grenade_bag"); + var_03.angles = param_01; + var_03 hide(); + wait 0.7; + if(!isdefined(var_03)) + { + return; + } + + var_03 show(); +} + +//Function Number: 38 +dronespawner_init() +{ + maps\_drone::drone_init_path(); +} + +//Function Number: 39 +empty() +{ +} + +//Function Number: 40 +spawn_prethink() +{ + level.ai_classname_in_level[self.classname] = 1; + if(isdefined(self.script_difficulty)) + { + switch(self.script_difficulty) + { + case "easy": + if(level.gameskill > 1) + { + maps\_utility::set_count(0); + } + break; + + case "hard": + if(level.gameskill < 2) + { + maps\_utility::set_count(0); + } + break; + } + } + + if(isdefined(self.script_drone)) + { + thread dronespawner_init(); + } + + if(isdefined(self.script_aigroup)) + { + var_00 = self.script_aigroup; + if(!isdefined(level._ai_group[var_00])) + { + aigroup_create(var_00); + } + + thread aigroup_spawnerthink(level._ai_group[var_00]); + } + + if(isdefined(self.script_delete)) + { + var_01 = 0; + if(isdefined(level._ai_delete)) + { + if(isdefined(level._ai_delete[self.script_delete])) + { + var_01 = level._ai_delete[self.script_delete].size; + } + } + + level._ai_delete[self.script_delete][var_01] = self; + } + + if(isdefined(self.script_health)) + { + if(self.script_health > level._max_script_health) + { + level._max_script_health = self.script_health; + } + + var_01 = 0; + if(isdefined(level._ai_health)) + { + if(isdefined(level._ai_health[self.script_health])) + { + var_01 = level._ai_health[self.script_health].size; + } + } + + level._ai_health[self.script_health][var_01] = self; + } + + if(isdefined(self.script_deathflag)) + { + thread spawner_deathflag(); + } + + if(isdefined(self.target)) + { + crawl_through_targets_to_init_flags(); + } + + if(isdefined(self.script_spawngroup)) + { + add_to_spawngroup(); + } + + if(isdefined(self.script_random_killspawner)) + { + add_random_killspawner_to_spawngroup(); + } + + if(!isdefined(self.spawn_functions)) + { + self.spawn_functions = []; + } + + for(;;) + { + var_02 = undefined; + self waittill("spawned",var_02); + if(!isalive(var_02)) + { + continue; + } + + if(isdefined(level.spawnercallbackthread)) + { + self thread [[ level.spawnercallbackthread ]](var_02); + } + + if(isdefined(self.script_delete)) + { + for(var_03 = 0;var_03 < level._ai_delete[self.script_delete].size;var_03++) + { + if(level._ai_delete[self.script_delete][var_03] != self) + { + level._ai_delete[self.script_delete][var_03] delete(); + } + } + } + + var_02.spawn_funcs = self.spawn_functions; + var_02.spawner = self; + if(isdefined(self.targetname)) + { + var_02 thread spawn_think(self.targetname); + continue; + } + + var_02 thread spawn_think(); + } +} + +//Function Number: 41 +spawn_think(param_00) +{ + level.ai_classname_in_level[self.classname] = 1; + spawn_think_action(param_00); + self endon("death"); + if(shouldnt_spawn_because_of_script_difficulty()) + { + self delete(); + } + + thread run_spawn_functions(); + self.finished_spawning = 1; + self notify("finished spawning"); + if(self.team == "allies" && !isdefined(self.script_nofriendlywave)) + { + thread friendlydeath_thread(); + } +} + +//Function Number: 42 +shouldnt_spawn_because_of_script_difficulty() +{ + if(!isdefined(self.script_difficulty)) + { + return 0; + } + + var_00 = 0; + switch(self.script_difficulty) + { + case "easy": + if(level.gameskill > 1) + { + var_00 = 1; + } + break; + + case "hard": + if(level.gameskill < 2) + { + var_00 = 1; + } + break; + } + + return var_00; +} + +//Function Number: 43 +run_spawn_functions() +{ + if(!isdefined(self.spawn_funcs)) + { + self.spawner = undefined; + return; + } + + for(var_00 = 0;var_00 < self.spawn_funcs.size;var_00++) + { + var_01 = self.spawn_funcs[var_00]; + if(isdefined(var_01["param5"])) + { + thread [[ var_01["function"] ]](var_01["param1"],var_01["param2"],var_01["param3"],var_01["param4"],var_01["param5"]); + continue; + } + + if(isdefined(var_01["param4"])) + { + thread [[ var_01["function"] ]](var_01["param1"],var_01["param2"],var_01["param3"],var_01["param4"]); + continue; + } + + if(isdefined(var_01["param3"])) + { + thread [[ var_01["function"] ]](var_01["param1"],var_01["param2"],var_01["param3"]); + continue; + } + + if(isdefined(var_01["param2"])) + { + thread [[ var_01["function"] ]](var_01["param1"],var_01["param2"]); + continue; + } + + if(isdefined(var_01["param1"])) + { + thread [[ var_01["function"] ]](var_01["param1"]); + continue; + } + + thread [[ var_01["function"] ]](); + } + + if(isdefined(self.team)) + { + for(var_00 = 0;var_00 < level.spawn_funcs[self.team].size;var_00++) + { + var_01 = level.spawn_funcs[self.team][var_00]; + if(isdefined(var_01["param5"])) + { + thread [[ var_01["function"] ]](var_01["param1"],var_01["param2"],var_01["param3"],var_01["param4"],var_01["param5"]); + continue; + } + + if(isdefined(var_01["param4"])) + { + thread [[ var_01["function"] ]](var_01["param1"],var_01["param2"],var_01["param3"],var_01["param4"]); + continue; + } + + if(isdefined(var_01["param3"])) + { + thread [[ var_01["function"] ]](var_01["param1"],var_01["param2"],var_01["param3"]); + continue; + } + + if(isdefined(var_01["param2"])) + { + thread [[ var_01["function"] ]](var_01["param1"],var_01["param2"]); + continue; + } + + if(isdefined(var_01["param1"])) + { + thread [[ var_01["function"] ]](var_01["param1"]); + continue; + } + + thread [[ var_01["function"] ]](); + } + } + + self.spawn_funcs = undefined; + self.spawner = undefined; +} + +//Function Number: 44 +specops_think() +{ + if(!maps\_utility::is_specialop()) + { + return; + } + + maps\_utility::add_damage_function(::specops_dmg); + thread multikill_monitor(); +} + +//Function Number: 45 +multikill_monitor() +{ + self waittill("death",var_00,var_01,var_02); + if(!isdefined(self)) + { + return; + } + + if(!self isbadguy()) + { + return; + } + + if(!isdefined(var_00)) + { + return; + } + + if(!isplayer(var_00)) + { + return; + } + + if(!isdefined(var_02)) + { + var_00.multikill_count = undefined; + return; + } + + if(!isdefined(var_00.multikill_count)) + { + var_00.multikill_count = 1; + } + else + { + var_00.multikill_count++; + } + + if(maps\_utility::is_survival() && var_00.multikill_count >= 4) + { + var_00 notify("sur_ch_quadkill"); + } + + waittillframeend; + var_00.multikill_count = undefined; +} + +//Function Number: 46 +specops_dmg(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + if(!isdefined(self)) + { + return; + } + + if(isdefined(param_01) && isplayer(param_01)) + { + self.last_dmg_player = param_01; + self.last_dmg_type = param_04; + } +} + +//Function Number: 47 +deathfunctions() +{ + self waittill("death",var_00,var_01,var_02); + level notify("ai_killed",self); + if(!isdefined(self)) + { + return; + } + + if(isdefined(var_00)) + { + if(self.team == "axis" || self.team == "team3") + { + var_03 = undefined; + if(isdefined(var_00.attacker)) + { + if(isdefined(var_00.issentrygun) && var_00.issentrygun) + { + var_03 = "sentry"; + } + + if(isdefined(var_00.destructible_type)) + { + var_03 = "destructible"; + } + + var_00 = var_00.attacker; + } + else if(isdefined(var_00.owner)) + { + if(isai(var_00) && isplayer(var_00.owner)) + { + var_03 = "friendly"; + } + + var_00 = var_00.owner; + } + else if(isdefined(var_00.damageowner)) + { + if(isdefined(var_00.destructible_type)) + { + var_03 = "destructible"; + } + + var_00 = var_00.damageowner; + } + + var_04 = 0; + if(isplayer(var_00)) + { + var_04 = 1; + } + + if(isdefined(level.pmc_match) && level.pmc_match) + { + var_04 = 1; + } + + if(var_04) + { + var_00 maps\_player_stats::register_kill(self,var_01,var_02,var_03); + } + } + } + + for(var_05 = 0;var_05 < self.deathfuncs.size;var_05++) + { + var_06 = self.deathfuncs[var_05]; + switch(var_06["params"]) + { + case 0: + [[ var_06["func"] ]](var_00); + break; + + case 1: + [[ var_06["func"] ]](var_00,var_06["param1"]); + break; + + case 2: + [[ var_06["func"] ]](var_00,var_06["param1"],var_06["param2"]); + break; + + case 3: + [[ var_06["func"] ]](var_00,var_06["param1"],var_06["param2"],var_06["param3"]); + break; + } + } +} + +//Function Number: 48 +ai_damage_think() +{ + self.damage_functions = []; + for(;;) + { + self waittill("damage",var_00,var_01,var_02,var_03,var_04,var_05,var_06); + if(isdefined(var_01) && isplayer(var_01)) + { + var_07 = var_01 getcurrentweapon(); + if(isdefined(var_07) && maps\_utility::isprimaryweapon(var_07) && isdefined(var_04) && var_04 == "MOD_PISTOL_BULLET" || var_04 == "MOD_RIFLE_BULLET") + { + var_01 thread maps\_player_stats::register_shot_hit(); + } + } + + foreach(var_09 in self.damage_functions) + { + thread [[ var_09 ]](var_00,var_01,var_02,var_03,var_04,var_05,var_06); + } + + if(!isalive(self) || self.var_744) + { + break; + } + } +} + +//Function Number: 49 +living_ai_prethink() +{ + if(isdefined(self.script_deathflag)) + { + level.deathflags[self.script_deathflag] = 1; + } + + if(isdefined(self.target)) + { + crawl_through_targets_to_init_flags(); + } +} + +//Function Number: 50 +crawl_through_targets_to_init_flags() +{ + var_00 = get_node_funcs_based_on_target(); + if(isdefined(var_00)) + { + var_01 = var_00["destination"]; + var_02 = var_00["get_target_func"]; + for(var_03 = 0;var_03 < var_01.size;var_03++) + { + crawl_target_and_init_flags(var_01[var_03],var_02); + } + } +} + +//Function Number: 51 +spawn_team_allies() +{ + self.usechokepoints = 0; + if(isdefined(self.script_followmin)) + { + self.followmin = self.script_followmin; + } + + if(isdefined(self.script_followmax)) + { + self.followmax = self.script_followmax; + } +} + +//Function Number: 52 +spawn_team_axis() +{ + if(isdefined(level.xp_enable) && level.xp_enable) + { + thread maps\_rank::ai_xp_init(); + } + + if(self.type == "human") + { + thread drop_gear(); + } + + maps\_utility::add_damage_function(::maps\_gameskill::auto_adjust_enemy_death_detection); + if(isdefined(self.script_combatmode)) + { + self.combatmode = self.script_combatmode; + } +} + +//Function Number: 53 +spawn_team_team3() +{ + spawn_team_axis(); +} + +//Function Number: 54 +spawn_team_neutral() +{ +} + +//Function Number: 55 +subclass_elite() +{ + self endon("death"); + self.elite = 1; + self.doorflashchance = 0.5; + if(!isdefined(self.script_accuracy)) + { + self.baseaccuracy = 5; + } + + self.aggressivemode = 1; + if(maps\_utility::has_shotgun()) + { + var_00 = undefined; + switch(level.gameskill) + { + case 0: + var_00 = 0; + break; + + case 1: + var_00 = 2; + break; + + case 2: + var_00 = 3; + break; + + case 3: + var_00 = 4; + break; + } + + if(level.gameskill > 0) + { + self.grenadeweapon = "flash_grenade"; + self.grenadeammo = var_00; + } + } +} + +//Function Number: 56 +subclass_regular() +{ +} + +//Function Number: 57 +pain_resistance(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + self endon("death"); + if(self.health <= 0) + { + return; + } + + if(param_00 >= self.minpaindamage) + { + var_07 = self.minpaindamage; + self.minpaindamage = var_07 * 3; + wait 5; + self.minpaindamage = var_07; + } +} + +//Function Number: 58 +bullet_resistance(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + if(!isdefined(self) || self.health <= 0) + { + return; + } + + if(isdefined(self.magic_bullet_shield) && self.magic_bullet_shield) + { + return; + } + + if(!issubstr(param_04,"BULLET")) + { + return; + } + + var_07 = self.bullet_resistance; + if(param_00 < self.bullet_resistance) + { + var_07 = param_00; + } + + self.health = self.health + var_07; +} + +//Function Number: 59 +spawn_think_game_skill_related() +{ + maps\_gameskill::default_door_node_flashbang_frequency(); + maps\_gameskill::grenadeawareness(); +} + +//Function Number: 60 +ai_lasers() +{ + if(!isalive(self)) + { + return; + } + + if(self.health <= 1) + { + return; + } + + self laserforceon(); + self waittill("death"); + if(!isdefined(self)) + { + return; + } + + self laserforceoff(); +} + +//Function Number: 61 +spawn_think_script_inits() +{ + if(isdefined(self.script_dontshootwhilemoving)) + { + self.dontshootwhilemoving = 1; + } + + if(isdefined(self.script_deathflag)) + { + thread ai_deathflag(); + } + + if(isdefined(self.script_attackeraccuracy)) + { + self.attackeraccuracy = self.script_attackeraccuracy; + } + + if(isdefined(self.script_startrunning)) + { + thread start_off_running(); + } + + if(isdefined(self.script_deathtime)) + { + thread deathtime(); + } + + if(isdefined(self.script_nosurprise)) + { + maps\_utility::disable_surprise(); + } + + if(isdefined(self.script_nobloodpool)) + { + self.skipbloodpool = 1; + } + + if(isdefined(self.script_laser)) + { + thread ai_lasers(); + } + + if(isdefined(self.script_danger_react)) + { + var_00 = self.script_danger_react; + if(var_00 == 1) + { + var_00 = 8; + } + + maps\_utility::enable_danger_react(var_00); + } + + if(isdefined(self.script_faceenemydist)) + { + self.maxfaceenemydist = self.script_faceenemydist; + } + else + { + self.maxfaceenemydist = 512; + } + + if(isdefined(self.script_forcecolor)) + { + maps\_utility::set_force_color(self.script_forcecolor); + } + + if(isdefined(self.dontdropweapon)) + { + self.dropweapon = 0; + } + + if(isdefined(self.script_fixednode)) + { + self.fixednode = self.script_fixednode == 1; + } + else + { + self.fixednode = self.team == "allies"; + } + + self.providecoveringfire = self.team == "allies" && self.fixednode; + if(isdefined(self.script_noteworthy) && self.script_noteworthy == "mgpair") + { + thread maps\_mg_penetration::create_mg_team(); + } + + if(isdefined(self.script_goalvolume) && !(isdefined(self.script_moveoverride) && self.script_moveoverride == 1) || isdefined(self.script_stealth)) + { + thread set_goal_volume(); + } + + if(isdefined(self.script_threatbiasgroup)) + { + self setthreatbiasgroup(self.script_threatbiasgroup); + } + else if(self.team == "neutral") + { + self setthreatbiasgroup("civilian"); + } + else + { + self setthreatbiasgroup(self.team); + } + + if(isdefined(self.script_bcdialog)) + { + maps\_utility::set_battlechatter(self.script_bcdialog); + } + + if(isdefined(self.script_accuracy)) + { + self.baseaccuracy = self.script_accuracy; + } + + if(isdefined(self.script_ignoreme)) + { + self.ignoreme = 1; + } + + if(isdefined(self.script_ignore_suppression)) + { + self.ignoresuppression = 1; + } + + if(isdefined(self.script_ignoreall)) + { + self.ignoreall = 1; + self clearenemy(); + } + + if(isdefined(self.script_sightrange)) + { + self.maxsightdistsqrd = self.script_sightrange; + } + + if(isdefined(self.script_favoriteenemy)) + { + if(self.script_favoriteenemy == "player") + { + self.favoriteenemy = level.player; + level.player.targetname = "player"; + } + } + + if(isdefined(self.script_fightdist)) + { + self.pathenemyfightdist = self.script_fightdist; + } + + if(isdefined(self.script_maxdist)) + { + self.pathenemylookahead = self.script_maxdist; + } + + if(isdefined(self.script_longdeath)) + { + self.a.disablelongdeath = 1; + } + + if(isdefined(self.script_diequietly)) + { + self.diequietly = 1; + } + + if(isdefined(self.script_flashbangs)) + { + self.grenadeweapon = "flash_grenade"; + self.grenadeammo = self.script_flashbangs; + } + + if(isdefined(self.script_pacifist)) + { + self.pacifist = 1; + } + + if(isdefined(self.script_startinghealth)) + { + self.health = self.script_startinghealth; + } + + if(isdefined(self.script_wiiallowragdoll)) + { + self.nodrop = self.script_wiiallowragdoll; + } +} + +//Function Number: 62 +spawn_think_action(param_00) +{ + thread ai_damage_think(); + thread tanksquish(); + thread death_achievements(); + thread specops_think(); + if(!isdefined(level.ai_dont_glow_in_thermal)) + { + self thermaldrawenable(); + } + + self.spawner_number = undefined; + if(!isdefined(self.unique_id)) + { + maps\_utility::set_ai_number(); + } + + if(!isdefined(self.deathfuncs)) + { + self.deathfuncs = []; + } + + thread deathfunctions(); + level thread maps\_friendlyfire::friendly_fire_think(self); + self.walkdist = 16; + init_reset_ai(); + spawn_think_game_skill_related(); + spawn_think_script_inits(); + [[ level.team_specific_spawn_functions[self.team] ]](); + thread [[ level.subclass_spawn_functions[self.subclass] ]](); + thread maps\_damagefeedback::monitordamage(); + common_scripts\_dynamic_world::ai_init(); + set_goal_height_from_settings(); + if(isdefined(self.script_playerseek)) + { + self setgoalentity(level.player); + return; + } + + if(isdefined(self.script_stealth)) + { + if(isdefined(self.script_stealth_function)) + { + var_01 = level.stealth_default_func[self.script_stealth_function]; + self thread [[ var_01 ]](); + } + else + { + self thread [[ level.global_callbacks["_spawner_stealth_default"] ]](); + } + } + + if(isdefined(self.script_idleanim)) + { + self thread [[ level.global_callbacks["_idle_call_idle_func"] ]](); + return; + } + + if(isdefined(self.script_idlereach) && !isdefined(self.script_moveoverride)) + { + self thread [[ level.global_callbacks["_idle_call_idle_func"] ]](); + } + + if(isdefined(self.script_patroller) && !isdefined(self.script_moveoverride)) + { + thread maps\_patrol::patrol(); + return; + } + + if(isdefined(self.script_readystand) && self.script_readystand == 1) + { + maps\_utility::enable_readystand(); + } + + if(isdefined(self.script_delayed_playerseek)) + { + if(!isdefined(self.script_radius)) + { + self.goalradius = 800; + } + + self setgoalentity(level.player); + level thread delayed_player_seek_think(self); + return; + } + + if(isdefined(self.used_an_mg42)) + { + return; + } + + if(isdefined(self.script_moveoverride) && self.script_moveoverride == 1) + { + set_goal_from_settings(); + self setgoalpos(self.origin); + return; + } + + if(!isdefined(self.script_stealth)) + { + } + + set_goal_from_settings(); + if(isdefined(self.target)) + { + thread go_to_node(); + } +} + +//Function Number: 63 +init_reset_ai() +{ + self eqoff(); + maps\_utility::set_default_pathenemy_settings(); + if(isdefined(self.script_grenades)) + { + self.grenadeammo = self.script_grenades; + } + else + { + self.grenadeammo = 3; + } + + if(isdefined(self.primaryweapon)) + { + self.noattackeraccuracymod = animscripts/combat_utility::issniper(); + } + + if(!maps\_utility::is_specialop()) + { + self.neversprintforvariation = 1; + } +} + +//Function Number: 64 +scrub_guy() +{ + if(self.team == "neutral") + { + self setthreatbiasgroup("civilian"); + } + else + { + self setthreatbiasgroup(self.team); + } + + init_reset_ai(); + self.baseaccuracy = 1; + maps\_gameskill::grenadeawareness(); + maps\_utility::clear_force_color(); + self.interval = 96; + self.disablearrivals = undefined; + self.ignoreme = 0; + self.threatbias = 0; + self.pacifist = 0; + self.pacifistwait = 20; + self.ignorerandombulletdamage = 0; + self.pushable = 1; + self.script_pushable = 1; + self.allowdeath = 0; + self.anglelerprate = 540; + self.badplaceawareness = 0.75; + self.chainfallback = 0; + self.dontavoidplayer = 0; + self.drawoncompass = 1; + self.dropweapon = 1; + self.goalradius = level.default_goalradius; + self.goalheight = level.default_goalheight; + self.ignoresuppression = 0; + self pushplayer(0); + if(isdefined(self.magic_bullet_shield) && self.magic_bullet_shield) + { + maps\_utility::stop_magic_bullet_shield(); + } + + maps\_utility::disable_replace_on_death(); + self.maxsightdistsqrd = 67108864; + self.script_forcegrenade = 0; + self.walkdist = 16; + maps\_utility::unmake_hero(); + self.pushable = 1; + self.script_pushable = 1; + animscripts/init::func_20BE(); + self.fixednode = self.team == "allies"; +} + +//Function Number: 65 +delayed_player_seek_think(param_00) +{ + param_00 endon("death"); + while(isalive(param_00)) + { + if(param_00.goalradius > 200) + { + param_00.goalradius = param_00.goalradius - 200; + } + + wait 6; + } +} + +//Function Number: 66 +flag_turret_for_use(param_00) +{ + self endon("death"); + if(!self.flagged_for_use) + { + param_00.used_an_mg42 = 1; + self.flagged_for_use = 1; + param_00 waittill("death"); + self.flagged_for_use = 0; + self notify("get new user"); + } +} + +//Function Number: 67 +set_goal_volume() +{ + self endon("death"); + waittillframeend; + var_00 = level.goalvolumes[self.script_goalvolume]; + if(!isdefined(var_00)) + { + return; + } + + if(isdefined(var_00.target)) + { + var_01 = getnode(var_00.target,"targetname"); + var_02 = getent(var_00.target,"targetname"); + var_03 = common_scripts\utility::getstruct(var_00.target,"targetname"); + var_04 = undefined; + if(isdefined(var_01)) + { + var_04 = var_01; + self setgoalnode(var_04); + } + else if(isdefined(var_02)) + { + var_04 = var_02; + self setgoalpos(var_04.origin); + } + else if(isdefined(var_03)) + { + var_04 = var_03; + self setgoalpos(var_04.origin); + } + + if(isdefined(var_04.radius) && var_04.radius != 0) + { + self.goalradius = var_04.radius; + } + + if(isdefined(var_04.goalheight) && var_04.goalheight != 0) + { + self.goalheight = var_04.goalheight; + } + } + + if(isdefined(self.target)) + { + self setgoalvolume(var_00); + return; + } + + self setgoalvolumeauto(var_00); +} + +//Function Number: 68 +get_target_ents(param_00) +{ + return getentarray(param_00,"targetname"); +} + +//Function Number: 69 +get_target_nodes(param_00) +{ + return getnodearray(param_00,"targetname"); +} + +//Function Number: 70 +get_target_structs(param_00) +{ + return common_scripts\utility::getstructarray(param_00,"targetname"); +} + +//Function Number: 71 +node_has_radius(param_00) +{ + return isdefined(param_00.radius) && param_00.radius != 0; +} + +//Function Number: 72 +go_to_origin(param_00,param_01) +{ + go_to_node(param_00,"origin",param_01); +} + +//Function Number: 73 +go_to_struct(param_00,param_01) +{ + go_to_node(param_00,"struct",param_01); +} + +//Function Number: 74 +go_to_node(param_00,param_01,param_02,param_03) +{ + if(isdefined(self.used_an_mg42)) + { + return; + } + + var_04 = get_node_funcs_based_on_target(param_00,param_01); + if(!isdefined(var_04)) + { + self notify("reached_path_end"); + return; + } + + if(!isdefined(param_02)) + { + param_02 = ::empty_arrived_func; + } + + go_to_node_using_funcs(var_04["destination"],var_04["get_target_func"],var_04["set_goal_func_quits"],param_02,param_03); +} + +//Function Number: 75 +empty_arrived_func(param_00) +{ +} + +//Function Number: 76 +get_least_used_from_array(param_00) +{ + if(param_00.size == 1) + { + return param_00[0]; + } + + var_01 = param_00[0].targetname; + if(!isdefined(level.go_to_node_arrays[var_01])) + { + level.go_to_node_arrays[var_01] = param_00; + } + + param_00 = level.go_to_node_arrays[var_01]; + var_02 = param_00[0]; + var_03 = []; + for(var_04 = 0;var_04 < param_00.size - 1;var_04++) + { + var_03[var_04] = param_00[var_04 + 1]; + } + + var_03[param_00.size - 1] = param_00[0]; + level.go_to_node_arrays[var_01] = var_03; + return var_02; +} + +//Function Number: 77 +go_to_node_using_funcs(param_00,param_01,param_02,param_03,param_04) +{ + self notify("stop_going_to_node"); + self endon("stop_going_to_node"); + self endon("death"); + for(;;) + { + param_00 = get_least_used_from_array(param_00); + var_05 = param_04; + if(isdefined(param_00.script_requires_player)) + { + if(param_00.script_requires_player > 1) + { + var_05 = param_00.script_requires_player; + } + + param_00.script_requires_player = 0; + } + + if(node_has_radius(param_00)) + { + self.goalradius = param_00.radius; + } + else + { + self.goalradius = level.default_goalradius; + } + + if(isdefined(param_00.height)) + { + self.goalheight = param_00.height; + } + else + { + self.goalheight = level.default_goalheight; + } + + [[ param_02 ]](param_00); + if(maps\_utility::ent_flag_exist("_stealth_override_goalpos")) + { + for(;;) + { + self waittill("goal"); + if(!maps\_utility::ent_flag("_stealth_override_goalpos")) + { + break; + } + + maps\_utility::ent_flag_waitopen("_stealth_override_goalpos"); + } + } + else + { + self waittill("goal"); + } + + param_00 notify("trigger",self); + [[ param_03 ]](param_00); + if(isdefined(param_00.script_flag_set)) + { + common_scripts\utility::flag_set(param_00.script_flag_set); + } + + if(isdefined(param_00.script_ent_flag_set)) + { + maps\_utility::ent_flag_set(param_00.script_ent_flag_set); + } + + if(isdefined(param_00.script_flag_clear)) + { + common_scripts\utility::flag_clear(param_00.script_flag_clear); + } + + if(targets_and_uses_turret(param_00)) + { + return 1; + } + + param_00 maps\_utility::script_delay(); + if(isdefined(param_00.script_flag_wait)) + { + common_scripts\utility::flag_wait(param_00.script_flag_wait); + } + + param_00 maps\_utility::script_wait(); + if(isdefined(param_00.script_delay_post)) + { + wait param_00.script_delay_post; + } + + while(isdefined(param_00.script_requires_player)) + { + param_00.script_requires_player = 0; + if(go_to_node_wait_for_player(param_00,param_01,var_05)) + { + param_00.script_requires_player = 1; + param_00 notify("script_requires_player"); + break; + } + + wait 0.1; + } + + if(!isdefined(param_00.target)) + { + break; + } + + var_06 = [[ param_01 ]](param_00.target); + if(!var_06.size) + { + break; + } + + param_00 = var_06; + } + + self notify("reached_path_end"); + if(isdefined(self.script_forcegoal)) + { + return; + } + + if(isdefined(self getgoalvolume())) + { + self setgoalvolumeauto(self getgoalvolume()); + return; + } + + self.goalradius = level.default_goalradius; +} + +//Function Number: 78 +go_to_node_wait_for_player(param_00,param_01,param_02) +{ + foreach(var_04 in level.players) + { + if(distancesquared(var_04.origin,param_00.origin) < distancesquared(self.origin,param_00.origin)) + { + return 1; + } + } + + var_06 = anglestoforward(self.angles); + if(isdefined(param_00.target)) + { + var_07 = [[ param_01 ]](param_00.target); + if(var_07.size == 1) + { + var_06 = vectornormalize(var_07[0].origin - param_00.origin); + } + else if(isdefined(param_00.angles)) + { + var_06 = anglestoforward(param_00.angles); + } + } + else if(isdefined(param_00.angles)) + { + var_06 = anglestoforward(param_00.angles); + } + + var_08 = []; + foreach(var_04 in level.players) + { + var_08[var_08.size] = vectornormalize(var_04.origin - self.origin); + } + + foreach(var_0C in var_08) + { + if(vectordot(var_06,var_0C) > 0) + { + return 1; + } + } + + var_0E = param_02 * param_02; + foreach(var_04 in level.players) + { + if(distancesquared(var_04.origin,self.origin) < var_0E) + { + return 1; + } + } + + return 0; +} + +//Function Number: 79 +go_to_node_set_goal_ent(param_00) +{ + if(param_00.classname == "info_volume") + { + self setgoalvolumeauto(param_00); + self notify("go_to_node_new_goal"); + return; + } + + go_to_node_set_goal_pos(param_00); +} + +//Function Number: 80 +go_to_node_set_goal_pos(param_00) +{ + maps\_utility::set_goal_ent(param_00); + self notify("go_to_node_new_goal"); +} + +//Function Number: 81 +go_to_node_set_goal_node(param_00) +{ + maps\_utility::set_goal_node(param_00); + self notify("go_to_node_new_goal"); +} + +//Function Number: 82 +targets_and_uses_turret(param_00) +{ + if(!isdefined(param_00.target)) + { + return 0; + } + + var_01 = getentarray(param_00.target,"targetname"); + if(!var_01.size) + { + return 0; + } + + var_02 = var_01[0]; + if(var_02.classname != "misc_turret") + { + return 0; + } + + thread use_a_turret(var_02); + return 1; +} + +//Function Number: 83 +remove_crawled(param_00) +{ + waittillframeend; + if(isdefined(param_00)) + { + param_00.crawled = undefined; + } +} + +//Function Number: 84 +crawl_target_and_init_flags(param_00,param_01) +{ + var_02 = 0; + var_03 = []; + var_04 = 0; + for(;;) + { + if(!isdefined(param_00.crawled)) + { + param_00.crawled = 1; + level thread remove_crawled(param_00); + if(isdefined(param_00.script_flag_set)) + { + if(!isdefined(level.flag[param_00.script_flag_set])) + { + common_scripts\utility::flag_init(param_00.script_flag_set); + } + } + + if(isdefined(param_00.script_flag_wait)) + { + if(!isdefined(level.flag[param_00.script_flag_wait])) + { + common_scripts\utility::flag_init(param_00.script_flag_wait); + } + } + + if(isdefined(param_00.script_flag_clear)) + { + if(!isdefined(level.flag[param_00.script_flag_clear])) + { + common_scripts\utility::flag_init(param_00.script_flag_clear); + } + } + + if(isdefined(param_00.target)) + { + var_05 = [[ param_01 ]](param_00.target); + var_03 = common_scripts\utility::add_to_array(var_03,var_05); + } + } + + var_04++; + if(var_04 >= var_03.size) + { + break; + } + + param_00 = var_03[var_04]; + } +} + +//Function Number: 85 +get_node_funcs_based_on_target(param_00,param_01) +{ + var_02["entity"] = ::get_target_ents; + param_00["entity"] = ::go_to_node_set_goal_ent; + if(!isdefined(param_01)) + { + param_01 = "node"; + } + + var_04 = []; + if(isdefined(param_00)) + { + var_1C["destination"] = 0; + } + else + { + param_01 = getentarray(self.target,"targetname"); + if(param_01.size > 0) + { + var_02 = "entity"; + } + + if(var_02 == "node") + { + param_01 = getnodearray(self.target,"targetname"); + if(!param_01.size) + { + param_01 = common_scripts\utility::getstructarray(self.target,"targetname"); + if(!param_01.size) + { + return; + } + + var_02 = "struct"; + } + } + } + + return var_1C; +} + +//Function Number: 86 +set_goal_height_from_settings() +{ + if(isdefined(self.script_goalheight)) + { + self.goalheight = self.script_goalheight; + return; + } + + self.goalheight = level.default_goalheight; +} + +//Function Number: 87 +set_goal_from_settings(param_00) +{ + if(isdefined(self.script_radius)) + { + self.goalradius = self.script_radius; + return; + } + + if(isdefined(self.script_forcegoal)) + { + if(isdefined(param_00) && isdefined(param_00.radius)) + { + self.goalradius = param_00.radius; + return; + } + } + + if(!isdefined(self getgoalvolume())) + { + if(self.type == "civilian") + { + self.goalradius = 128; + return; + } + + self.goalradius = level.default_goalradius; + } +} + +//Function Number: 88 +autotarget(param_00) +{ + for(;;) + { + var_01 = self getturretowner(); + if(!isalive(var_01)) + { + wait 1.5; + continue; + } + + if(!isdefined(var_01.enemy)) + { + self settargetentity(common_scripts\utility::random(param_00)); + self notify("startfiring"); + self startfiring(); + } + + wait 2 + randomfloat(1); + } +} + +//Function Number: 89 +manualtarget(param_00) +{ + for(;;) + { + self settargetentity(common_scripts\utility::random(param_00)); + self notify("startfiring"); + self startfiring(); + wait 2 + randomfloat(1); + } +} + +//Function Number: 90 +use_a_turret(param_00) +{ + if(self isbadguy() && self.health == 150) + { + self.health = 100; + self.a.disablelongdeath = 1; + } + + self useturret(param_00); + if(isdefined(param_00.target) && param_00.target != param_00.targetname) + { + var_01 = getentarray(param_00.target,"targetname"); + var_02 = []; + for(var_03 = 0;var_03 < var_01.size;var_03++) + { + if(var_01[var_03].classname == "script_origin") + { + var_02[var_02.size] = var_01[var_03]; + } + } + + if(isdefined(param_00.script_autotarget)) + { + param_00 thread autotarget(var_02); + } + else if(isdefined(param_00.script_manualtarget)) + { + param_00 setmode("manual_ai"); + param_00 thread manualtarget(var_02); + } + else if(var_02.size > 0) + { + if(var_02.size == 1) + { + param_00.manual_target = var_02[0]; + param_00 settargetentity(var_02[0]); + thread maps\_mgturret::manual_think(param_00); + } + else + { + param_00 thread maps\_mgturret::mg42_suppressionfire(var_02); + } + } + } + + thread maps\_mgturret::mg42_firing(param_00); + param_00 notify("startfiring"); +} + +//Function Number: 91 +fallback_spawner_think(param_00,param_01) +{ + self endon("death"); + level.current_fallbackers[param_00] = level.current_fallbackers[param_00] + self.count; + var_02 = 1; + while(self.count > 0) + { + self waittill("spawned",var_03); + if(var_02) + { + if(getdvar("fallback","0") == "1") + { + } + + level notify("fallback_firstspawn" + param_00); + var_02 = 0; + } + + common_scripts\utility::waitframe(); + if(maps\_utility::spawn_failed(var_03)) + { + level notify("fallbacker_died" + param_00); + level.current_fallbackers[param_00]--; + continue; + } + + var_03 thread fallback_ai_think(param_00,param_01,"is spawner"); + } +} + +//Function Number: 92 +fallback_ai_think_death(param_00,param_01) +{ + param_00 waittill("death"); + level.current_fallbackers[param_01]--; + level notify("fallbacker_died" + param_01); +} + +//Function Number: 93 +fallback_ai_think(param_00,param_01,param_02) +{ + if(!isdefined(self.fallback) || !isdefined(self.fallback[param_00])) + { + self.fallback[param_00] = 1; + } + else + { + return; + } + + self.script_fallback = param_00; + if(!isdefined(param_02)) + { + level.current_fallbackers[param_00]++; + } + + if(isdefined(param_01) && level.fallback_initiated[param_00]) + { + thread fallback_ai(param_00,param_01); + } + + level thread fallback_ai_think_death(self,param_00); +} + +//Function Number: 94 +fallback_death(param_00,param_01) +{ + param_00 waittill("death"); + level notify("fallback_reached_goal" + param_01); +} + +//Function Number: 95 +fallback_goal() +{ + self waittill("goal"); + self.ignoresuppression = 0; + self notify("fallback_notify"); + self notify("stop_coverprint"); +} + +//Function Number: 96 +fallback_ai(param_00,param_01) +{ + self notify("stop_going_to_node"); + self stopuseturret(); + self.ignoresuppression = 1; + self setgoalnode(param_01); + if(param_01.radius != 0) + { + self.goalradius = param_01.radius; + } + + self endon("death"); + level thread fallback_death(self,param_00); + thread fallback_goal(); + if(getdvar("fallback","0") == "1") + { + thread coverprint(param_01.origin); + } + + self waittill("fallback_notify"); + level notify("fallback_reached_goal" + param_00); +} + +//Function Number: 97 +coverprint(param_00) +{ + self endon("fallback_notify"); + self endon("stop_coverprint"); + common_scripts\utility::waitframe(); +} + +//Function Number: 98 +newfallback_overmind(param_00,param_01) +{ + var_02 = undefined; + var_03 = getallnodes(); + for(var_04 = 0;var_04 < var_03.size;var_04++) + { + if(isdefined(var_03[var_04].script_fallback) && var_03[var_04].script_fallback == param_00) + { + var_02 = common_scripts\utility::add_to_array(var_02,var_03[var_04]); + } + } + + if(!isdefined(var_02)) + { + return; + } + + level.current_fallbackers[param_00] = 0; + level.spawner_fallbackers[param_00] = 0; + level.fallback_initiated[param_00] = 0; + var_05 = getspawnerarray(); + for(var_04 = 0;var_04 < var_05.size;var_04++) + { + if(isdefined(var_05[var_04].script_fallback) && var_05[var_04].script_fallback == param_00) + { + if(var_05[var_04].count > 0) + { + var_05[var_04] thread fallback_spawner_think(param_00,var_02[randomint(var_02.size)]); + level.spawner_fallbackers[param_00]++; + } + } + } + + var_06 = getaiarray(); + for(var_04 = 0;var_04 < var_06.size;var_04++) + { + if(isdefined(var_06[var_04].script_fallback) && var_06[var_04].script_fallback == param_00) + { + var_06[var_04] thread fallback_ai_think(param_00); + } + } + + if(!level.current_fallbackers[param_00] && !level.spawner_fallbackers[param_00]) + { + return; + } + + var_05 = undefined; + var_06 = undefined; + thread fallback_wait(param_00,param_01); + level waittill("fallbacker_trigger" + param_00); + if(getdvar("fallback","0") == "1") + { + } + + level.fallback_initiated[param_00] = 1; + var_07 = undefined; + var_06 = getaiarray(); + for(var_04 = 0;var_04 < var_06.size;var_04++) + { + if((isdefined(var_06[var_04].script_fallback) && var_06[var_04].script_fallback == param_00) || isdefined(var_06[var_04].script_fallback_group) && isdefined(param_01) && var_06[var_04].script_fallback_group == param_01) + { + var_07 = common_scripts\utility::add_to_array(var_07,var_06[var_04]); + } + } + + var_06 = undefined; + if(!isdefined(var_07)) + { + return; + } + + var_08 = var_07.size * 0.4; + var_08 = int(var_08); + level notify("fallback initiated " + param_00); + fallback_text(var_07,0,var_08); + for(var_04 = 0;var_04 < var_08;var_04++) + { + var_07[var_04] thread fallback_ai(param_00,var_02[randomint(var_02.size)]); + } + + for(var_04 = 0;var_04 < var_08;var_04++) + { + level waittill("fallback_reached_goal" + param_00); + } + + fallback_text(var_07,var_08,var_07.size); + for(var_04 = var_08;var_04 < var_07.size;var_04++) + { + if(isalive(var_07[var_04])) + { + var_07[var_04] thread fallback_ai(param_00,var_02[randomint(var_02.size)]); + } + } +} + +//Function Number: 99 +fallback_text(param_00,param_01,param_02) +{ + if(gettime() <= level._nextcoverprint) + { + return; + } + + var_03 = param_01; + while(var_03 < param_02) + { + if(!isalive(param_00[var_03])) + { + continue; + } + + level._nextcoverprint = gettime() + 2500 + randomint(2000); + var_04 = param_00.size; + var_05 = int(var_04 * 0.4); + if(randomint(100) > 50) + { + if(var_04 - var_05 > 1) + { + if(randomint(100) > 66) + { + var_06 = "dawnville_defensive_german_1"; + } + else if(randomint(100) > 66) + { + var_06 = "dawnville_defensive_german_2"; + } + else + { + var_06 = "dawnville_defensive_german_3"; + } + } + else if(randomint(100) > 66) + { + var_06 = "dawnville_defensive_german_4"; + } + else if(randomint(100) > 66) + { + var_06 = "dawnville_defensive_german_5"; + } + else + { + var_06 = "dawnville_defensive_german_1"; + } + } + else if(var_06 > 1) + { + if(randomint(100) > 66) + { + var_06 = "dawnville_defensive_german_2"; + } + else if(randomint(100) > 66) + { + var_06 = "dawnville_defensive_german_3"; + } + else + { + var_06 = "dawnville_defensive_german_4"; + } + } + else if(randomint(100) > 66) + { + var_06 = "dawnville_defensive_german_5"; + } + else if(randomint(100) > 66) + { + var_06 = "dawnville_defensive_german_1"; + } + else + { + var_06 = "dawnville_defensive_german_2"; + } + + param_00[var_03] animscripts/face::func_C46(undefined,var_06,1); + return; + var_06++; + } +} + +//Function Number: 100 +fallback_wait(param_00,param_01) +{ + level endon("fallbacker_trigger" + param_00); + if(getdvar("fallback","0") == "1") + { + } + + for(var_02 = 0;var_02 < level.spawner_fallbackers[param_00];var_02++) + { + if(getdvar("fallback","0") == "1") + { + } + + level waittill("fallback_firstspawn" + param_00); + } + + if(getdvar("fallback","0") == "1") + { + } + + var_03 = getaiarray(); + for(var_02 = 0;var_02 < var_03.size;var_02++) + { + if((isdefined(var_03[var_02].script_fallback) && var_03[var_02].script_fallback == param_00) || isdefined(var_03[var_02].script_fallback_group) && isdefined(param_01) && var_03[var_02].script_fallback_group == param_01) + { + var_03[var_02] thread fallback_ai_think(param_00); + } + } + + var_03 = undefined; + var_04 = level.current_fallbackers[param_00]; + for(var_05 = 0;level.current_fallbackers[param_00] > var_04 * 0.5;var_05++) + { + if(getdvar("fallback","0") == "1") + { + } + + level waittill("fallbacker_died" + param_00); + } + + level notify("fallbacker_trigger" + param_00); +} + +//Function Number: 101 +fallback_think(param_00) +{ + if(!isdefined(level.fallback) || !isdefined(level.fallback[param_00.script_fallback])) + { + level thread newfallback_overmind(param_00.script_fallback,param_00.script_fallback_group); + } + + param_00 waittill("trigger"); + level notify("fallbacker_trigger" + param_00.script_fallback); + kill_trigger(param_00); +} + +//Function Number: 102 +arrive(param_00) +{ + self waittill("goal"); + if(param_00.radius != 0) + { + self.goalradius = param_00.radius; + return; + } + + self.goalradius = level.default_goalradius; +} + +//Function Number: 103 +fallback_coverprint() +{ + self endon("fallback"); + self endon("fallback_clear_goal"); + self endon("fallback_clear_death"); + for(;;) + { + if(isdefined(self.coverpoint)) + { + } + + common_scripts\utility::waitframe(); + } +} + +//Function Number: 104 +fallback_print() +{ + self endon("fallback_clear_goal"); + self endon("fallback_clear_death"); + for(;;) + { + if(isdefined(self.coverpoint)) + { + } + + common_scripts\utility::waitframe(); + } +} + +//Function Number: 105 +fallback() +{ + var_00 = getnode(self.target,"targetname"); + self.coverpoint = var_00; + self setgoalnode(var_00); + if(isdefined(self.script_seekgoal)) + { + thread arrive(var_00); + } + else if(var_00.radius != 0) + { + self.goalradius = var_00.radius; + } + else + { + self.goalradius = level.default_goalradius; + } + + for(;;) + { + self waittill("fallback"); + self.interval = 20; + level thread fallback_death(self); + if(getdvar("fallback","0") == "1") + { + thread fallback_print(); + } + + if(isdefined(var_00.target)) + { + var_00 = getnode(var_00.target,"targetname"); + self.coverpoint = var_00; + self setgoalnode(var_00); + thread fallback_goal(); + if(var_00.radius != 0) + { + self.goalradius = var_00.radius; + } + + continue; + } + + level notify("fallback_arrived" + self.script_fallback); + } +} + +//Function Number: 106 +delete_me() +{ + common_scripts\utility::waitframe(); + self delete(); +} + +//Function Number: 107 +vlength(param_00,param_01) +{ + var_02 = param_00[0] - param_01[0]; + var_03 = param_00[1] - param_01[1]; + var_04 = param_00[2] - param_01[2]; + var_02 = var_02 * var_02; + var_03 = var_03 * var_03; + var_04 = var_04 * var_04; + var_05 = var_02 + var_03 + var_04; + return var_05; +} + +//Function Number: 108 +specialcheck(param_00) +{ + wait 0.05; +} + +//Function Number: 109 +friendly_wave(param_00) +{ + if(!isdefined(level.friendly_wave_active)) + { + thread friendly_wave_masterthread(); + } + + for(;;) + { + param_00 waittill("trigger"); + level notify("friendly_died"); + if(param_00.targetname == "friendly_wave") + { + level.friendly_wave_trigger = param_00; + } + else + { + level.friendly_wave_trigger = undefined; + } + + wait 1; + } +} + +//Function Number: 110 +set_spawncount(param_00) +{ + if(!isdefined(self.target)) + { + return; + } + + var_01 = getentarray(self.target,"targetname"); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + var_01[var_02] maps\_utility::set_count(param_00); + } +} + +//Function Number: 111 +friendlydeath_thread() +{ + if(!isdefined(level.totalfriends)) + { + level.totalfriends = 0; + } + + level.totalfriends++; + self waittill("death"); + level notify("friendly_died"); + level.totalfriends--; +} + +//Function Number: 112 +friendly_wave_masterthread() +{ + level.friendly_wave_active = 1; + var_00 = getentarray("friendly_wave","targetname"); + common_scripts\utility::array_thread(var_00,::set_spawncount,0); + if(!isdefined(level.maxfriendlies)) + { + level.maxfriendlies = 7; + } + + var_01 = 1; + for(;;) + { + if(isdefined(level.friendly_wave_trigger) && isdefined(level.friendly_wave_trigger.target)) + { + var_02 = level.friendly_wave_trigger; + var_03 = getentarray(level.friendly_wave_trigger.target,"targetname"); + if(!var_03.size) + { + level waittill("friendly_died"); + continue; + } + + var_04 = 0; + var_05 = isdefined(level.friendly_wave_trigger.script_delay); + while(isdefined(level.friendly_wave_trigger) && level.totalfriends < level.maxfriendlies) + { + if(var_02 != level.friendly_wave_trigger) + { + var_05 = isdefined(level.friendly_wave_trigger.script_delay); + var_02 = level.friendly_wave_trigger; + var_03 = getentarray(level.friendly_wave_trigger.target,"targetname"); + } + else if(!var_05) + { + var_04 = randomint(var_03.size); + } + else if(var_04 == var_03.size) + { + var_04 = 0; + } + + var_03[var_04] maps\_utility::set_count(1); + var_06 = isdefined(var_03[var_04].script_stealth) && common_scripts\utility::flag("_stealth_enabled") && !common_scripts\utility::flag("_stealth_spotted"); + if(isdefined(var_03[var_04].script_forcespawn)) + { + var_07 = var_03[var_04] stalingradspawn(var_06); + } + else + { + var_07 = var_03[var_04] dospawn(var_06); + } + + var_03[var_04] maps\_utility::set_count(0); + if(maps\_utility::spawn_failed(var_07)) + { + wait 0.2; + continue; + } + + if(isdefined(var_03[var_04].script_combatbehavior)) + { + if(var_03[var_04].combatbehavior == "heat") + { + var_07 maps\_utility::enable_heat_behavior(); + } + + if(var_03[var_04].combatbehavior == "cqb") + { + var_07 maps\_utility::enable_cqbwalk(); + } + } + + if(isdefined(level.friendlywave_thread)) + { + level thread [[ level.friendlywave_thread ]](var_07); + } + else + { + var_07 setgoalentity(level.player); + } + + if(var_05) + { + if(level.friendly_wave_trigger.script_delay == 0) + { + waittillframeend; + } + else + { + wait level.friendly_wave_trigger.script_delay; + } + + var_04++; + continue; + } + + wait randomfloat(5); + } + } + + level waittill("friendly_died"); + } +} + +//Function Number: 113 +friendly_mgturret(param_00) +{ + var_01 = getnode(param_00.target,"targetname"); + var_02 = getent(var_01.target,"targetname"); + var_02 setmode("auto_ai"); + var_02 cleartargetentity(); + var_03 = 0; + for(;;) + { + param_00 waittill("trigger",var_04); + if(!isai(var_04)) + { + continue; + } + + if(!isdefined(var_04.team)) + { + continue; + } + + if(var_04.team != "allies") + { + continue; + } + + if(isdefined(var_04.script_usemg42) && var_04.script_usemg42 == 0) + { + continue; + } + + if(var_04 thread friendly_mg42_useable(var_02,var_01)) + { + var_04 thread friendly_mg42_think(var_02,var_01); + var_02 waittill("friendly_finished_using_mg42"); + if(isalive(var_04)) + { + var_04.turret_use_time = gettime() + 10000; + } + } + + wait 1; + } +} + +//Function Number: 114 +friendly_mg42_death_notify(param_00,param_01) +{ + param_01 endon("friendly_finished_using_mg42"); + param_00 waittill("death"); + param_01 notify("friendly_finished_using_mg42"); +} + +//Function Number: 115 +friendly_mg42_wait_for_use(param_00) +{ + param_00 endon("friendly_finished_using_mg42"); + self.useable = 1; + self setcursorhint("HINT_NOICON"); + self sethintstring(&"PLATFORM_USEAIONMG42"); + self waittill("trigger"); + self.useable = 0; + self sethintstring(""); + self stopuseturret(); + self notify("stopped_use_turret"); + param_00 notify("friendly_finished_using_mg42"); +} + +//Function Number: 116 +friendly_mg42_useable(param_00,param_01) +{ + if(self.useable) + { + return 0; + } + + if(isdefined(self.turret_use_time) && gettime() < self.turret_use_time) + { + return 0; + } + + if(distance(level.player.origin,param_01.origin) < 100) + { + return 0; + } + + if(isdefined(self.chainnode)) + { + if(distance(level.player.origin,self.chainnode.origin) > 1100) + { + return 0; + } + } + + return 1; +} + +//Function Number: 117 +friendly_mg42_endtrigger(param_00,param_01) +{ + param_00 endon("friendly_finished_using_mg42"); + self waittill("trigger"); + param_00 notify("friendly_finished_using_mg42"); +} + +//Function Number: 118 +friendly_mg42_stop_use() +{ + if(!isdefined(self.friendly_mg42)) + { + return; + } + + self.friendly_mg42 notify("friendly_finished_using_mg42"); +} + +//Function Number: 119 +nofour() +{ + self endon("death"); + self waittill("goal"); + self.goalradius = self.oldradius; + if(self.goalradius < 32) + { + self.goalradius = 400; + } +} + +//Function Number: 120 +friendly_mg42_think(param_00,param_01) +{ + self endon("death"); + param_00 endon("friendly_finished_using_mg42"); + level thread friendly_mg42_death_notify(self,param_00); + self.oldradius = self.goalradius; + self.goalradius = 28; + thread nofour(); + self setgoalnode(param_01); + self.ignoresuppression = 1; + self waittill("goal"); + self.goalradius = self.oldradius; + if(self.goalradius < 32) + { + self.goalradius = 400; + } + + self.ignoresuppression = 0; + self.goalradius = self.oldradius; + if(distance(level.player.origin,param_01.origin) < 32) + { + param_00 notify("friendly_finished_using_mg42"); + return; + } + + self.friendly_mg42 = param_00; + thread friendly_mg42_wait_for_use(param_00); + thread friendly_mg42_cleanup(param_00); + self useturret(param_00); + if(isdefined(param_00.target)) + { + var_02 = getent(param_00.target,"targetname"); + if(isdefined(var_02)) + { + var_02 thread friendly_mg42_endtrigger(param_00,self); + } + } + + for(;;) + { + if(distance(self.origin,param_01.origin) < 32) + { + self useturret(param_00); + } + else + { + break; + } + + if(isdefined(self.chainnode)) + { + if(distance(self.origin,self.chainnode.origin) > 1100) + { + break; + } + } + + wait 1; + } + + param_00 notify("friendly_finished_using_mg42"); +} + +//Function Number: 121 +friendly_mg42_cleanup(param_00) +{ + self endon("death"); + param_00 waittill("friendly_finished_using_mg42"); + friendly_mg42_doneusingturret(); +} + +//Function Number: 122 +friendly_mg42_doneusingturret() +{ + self endon("death"); + var_00 = self.friendly_mg42; + self.friendly_mg42 = undefined; + self stopuseturret(); + self notify("stopped_use_turret"); + self.useable = 0; + self.goalradius = self.oldradius; + if(!isdefined(var_00)) + { + return; + } + + if(!isdefined(var_00.target)) + { + return; + } + + var_01 = getnode(var_00.target,"targetname"); + var_02 = self.goalradius; + self.goalradius = 8; + self setgoalnode(var_01); + wait 2; + self.goalradius = 384; + self waittill("goal"); + if(isdefined(self.target)) + { + var_01 = getnode(self.target,"targetname"); + if(isdefined(var_01.target)) + { + var_01 = getnode(var_01.target,"targetname"); + } + + if(isdefined(var_01)) + { + self setgoalnode(var_01); + } + } + + self.goalradius = var_02; +} + +//Function Number: 123 +tanksquish() +{ + if(isdefined(level.notanksquish)) + { + return; + } + + if(isdefined(level.levelhasvehicles) && !level.levelhasvehicles) + { + return; + } + + maps\_utility::add_damage_function(::tanksquish_damage_check); +} + +//Function Number: 124 +tanksquish_damage_check(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + if(!isdefined(self)) + { + return; + } + + if(isalive(self)) + { + return; + } + + if(!isalive(param_01)) + { + return; + } + + if(!isdefined(param_01.vehicletype)) + { + return; + } + + if(param_01 maps\_vehicle::ishelicopter()) + { + return; + } + + if(!isdefined(self.noragdoll)) + { + self startragdoll(); + } + + if(!isdefined(self)) + { + return; + } + + maps\_utility::remove_damage_function(::tanksquish_damage_check); +} + +//Function Number: 125 +panzer_target(param_00,param_01,param_02,param_03,param_04) +{ + param_00 endon("death"); + param_00.panzer_node = param_01; + if(isdefined(param_01.script_delay)) + { + param_00.panzer_delay = param_01.script_delay; + } + + if(isdefined(param_03) && isdefined(param_04)) + { + param_00.panzer_ent = param_03; + param_00.panzer_ent_offset = param_04; + } + else + { + param_00.panzer_pos = param_02; + } + + param_00 setgoalpos(param_00.origin); + param_00 setgoalnode(param_01); + param_00.goalradius = 12; + param_00 waittill("goal"); + param_00.goalradius = 28; + param_00 waittill("shot_at_target"); + param_00.panzer_ent = undefined; + param_00.panzer_pos = undefined; + param_00.panzer_delay = undefined; +} + +//Function Number: 126 +showstart(param_00,param_01,param_02) +{ + var_03 = getstartorigin(param_00,param_01,param_02); + wait 0.05; +} + +//Function Number: 127 +spawnwaypointfriendlies() +{ + maps\_utility::set_count(1); + if(isdefined(self.script_forcespawn)) + { + var_00 = self stalingradspawn(); + } + else + { + var_00 = self dospawn(); + } + + if(maps\_utility::spawn_failed(var_00)) + { + return; + } + + if(isdefined(self.script_combatbehavior)) + { + if(self.script_combatbehavior == "heat") + { + var_00 maps\_utility::enable_heat_behavior(); + } + + if(self.script_combatbehavior == "cqb") + { + var_00 maps\_utility::enable_cqbwalk(); + } + } + + var_00.friendlywaypoint = 1; +} + +//Function Number: 128 +waittilldeathorleavesquad() +{ + self endon("death"); + self waittill("leaveSquad"); +} + +//Function Number: 129 +friendlyspawnwave() +{ + common_scripts\utility::array_thread(getentarray(self.target,"targetname"),::friendlyspawnwave_triggerthink,self); + for(;;) + { + self waittill("trigger",var_02); + if(activefriendlyspawn() && getfriendlyspawntrigger() == self) + { + unsetfriendlyspawn(); + } + + self waittill("friendly_wave_start",var_03); + setfriendlyspawn(var_03,self); + if(!isdefined(var_03.target)) + { + continue; + } + + var_04 = getent(var_03.target,"targetname"); + var_04 thread spawnwavestoptrigger(self); + } +} + +//Function Number: 130 +flood_and_secure(param_00) +{ + if(!isdefined(param_00)) + { + param_00 = 0; + } + + if(isdefined(self.script_noteworthy) && self.script_noteworthy == "instant_respawn") + { + param_00 = 1; + } + + level.spawnerwave = []; + var_01 = getentarray(self.target,"targetname"); + common_scripts\utility::array_thread(var_01,::flood_and_secure_spawner,param_00); + var_02 = 0; + var_03 = 0; + for(;;) + { + self waittill("trigger",var_04); + if(!objectiveisallowed()) + { + continue; + } + + if(!var_03) + { + var_03 = 1; + maps\_utility::script_delay(); + } + + if(self istouching(level.player)) + { + var_02 = 1; + } + else + { + if(!isalive(var_04)) + { + continue; + } + + if(isplayer(var_04)) + { + var_02 = 1; + } + else if(!isdefined(var_04.issquad) || !var_04.issquad) + { + continue; + } + } + + var_01 = getentarray(self.target,"targetname"); + if(isdefined(var_01[0])) + { + if(isdefined(var_01[0].script_randomspawn)) + { + cull_spawners_from_killspawner(var_01[0].script_randomspawn); + } + } + + var_01 = getentarray(self.target,"targetname"); + for(var_05 = 0;var_05 < var_01.size;var_05++) + { + var_01[var_05].playertriggered = var_02; + var_01[var_05] notify("flood_begin"); + } + + if(var_02) + { + wait 5; + continue; + } + + wait 0.1; + } +} + +//Function Number: 131 +cull_spawners_leaving_one_set(param_00) +{ + var_01 = []; + for(var_02 = 0;var_02 < param_00.size;var_02++) + { + var_01[param_00[var_02].script_randomspawn] = 1; + } + + var_03 = getarraykeys(var_01); + var_04 = common_scripts\utility::random(var_03); + for(var_02 = 0;var_02 < param_00.size;var_02++) + { + if(param_00[var_02].script_randomspawn != var_04) + { + param_00[var_02] delete(); + } + } +} + +//Function Number: 132 +flood_and_secure_spawner(param_00) +{ + if(isdefined(self.securestarted)) + { + return; + } + + self.securestarted = 1; + self.triggerunlocked = 1; + var_01 = self.target; + var_02 = self.targetname; + if(!isdefined(var_01) && !isdefined(self.script_moveoverride)) + { + waittillframeend; + } + + var_03 = []; + if(isdefined(var_01)) + { + var_04 = getentarray(var_01,"targetname"); + for(var_05 = 0;var_05 < var_04.size;var_05++) + { + if(!issubstr(var_04[var_05].classname,"actor")) + { + continue; + } + + var_03[var_03.size] = var_04[var_05]; + } + } + + var_06 = spawnstruct(); + var_07 = self.origin; + flood_and_secure_spawner_think(var_06,var_03.size > 0,param_00); + if(isalive(var_06.ai)) + { + var_06.ai waittill("death"); + } + + if(!isdefined(var_01)) + { + return; + } + + var_04 = getentarray(var_01,"targetname"); + if(!var_04.size) + { + return; + } + + for(var_05 = 0;var_05 < var_04.size;var_05++) + { + if(!issubstr(var_04[var_05].classname,"actor")) + { + continue; + } + + var_04[var_05].targetname = var_02; + var_08 = var_01; + if(isdefined(var_04[var_05].target)) + { + var_09 = getent(var_04[var_05].target,"targetname"); + if(!isdefined(var_09) || !issubstr(var_09.classname,"actor")) + { + var_08 = var_04[var_05].target; + } + } + + var_04[var_05].target = var_08; + var_04[var_05] thread flood_and_secure_spawner(param_00); + var_04[var_05].playertriggered = 1; + var_04[var_05] notify("flood_begin"); + } +} + +//Function Number: 133 +flood_and_secure_spawner_think(param_00,param_01,param_02) +{ + self endon("death"); + var_03 = self.count; + if(!param_01) + { + param_01 = isdefined(self.script_noteworthy) && self.script_noteworthy == "delete"; + } + + maps\_utility::set_count(2); + if(isdefined(self.script_delay)) + { + var_04 = self.script_delay; + } + else + { + var_04 = 0; + } + + for(;;) + { + self waittill("flood_begin"); + if(self.playertriggered) + { + break; + } + + if(var_04) + { + continue; + } + + break; + } + + var_05 = distance(level.player.origin,self.origin); + while(var_03) + { + self.truecount = var_03; + maps\_utility::set_count(2); + wait var_04; + var_06 = isdefined(self.script_stealth) && common_scripts\utility::flag("_stealth_enabled") && !common_scripts\utility::flag("_stealth_spotted"); + if(isdefined(self.script_forcespawn)) + { + var_07 = self stalingradspawn(var_06); + } + else + { + var_07 = self dospawn(var_06); + } + + if(maps\_utility::spawn_failed(var_07)) + { + var_08 = 0; + if(var_04 < 2) + { + wait 2; + } + + continue; + } + else + { + if(isdefined(self.script_combatbehavior)) + { + if(self.script_combatbehavior == "heat") + { + var_07 maps\_utility::enable_heat_behavior(); + } + + if(self.script_combatbehavior == "cqb") + { + var_07 maps\_utility::enable_cqbwalk(); + } + } + + thread addtowavespawner(var_07); + var_07 thread flood_and_secure_spawn(self); + if(isdefined(self.script_accuracy)) + { + var_07.baseaccuracy = self.script_accuracy; + } + + param_00.ai = var_07; + param_00 notify("got_ai"); + self waittill("spawn_died",var_09,var_08); + if(var_04 > 2) + { + var_04 = randomint(4) + 2; + } + else + { + var_04 = 0.5 + randomfloat(0.5); + } + } + + if(var_09) + { + waittillrestartordistance(var_05); + continue; + } + + if(playerwasnearby(var_08 || param_01,param_00.ai)) + { + var_03--; + } + + if(!param_02) + { + waituntilwaverelease(); + } + } + + self delete(); +} + +//Function Number: 134 +waittilldeletedordeath(param_00) +{ + self endon("death"); + param_00 waittill("death"); +} + +//Function Number: 135 +addtowavespawner(param_00) +{ + var_01 = self.targetname; + if(!isdefined(level.spawnerwave[var_01])) + { + level.spawnerwave[var_01] = spawnstruct(); + level.spawnerwave[var_01] maps\_utility::set_count(0); + level.spawnerwave[var_01].total = 0; + } + + if(!isdefined(self.addedtowave)) + { + self.addedtowave = 1; + level.spawnerwave[var_01].total++; + } + + level.spawnerwave[var_01].count++; + waittilldeletedordeath(param_00); + level.spawnerwave[var_01].count--; + if(!isdefined(self)) + { + level.spawnerwave[var_01].total--; + } + + if(level.spawnerwave[var_01].total) + { + if(level.spawnerwave[var_01].count / level.spawnerwave[var_01].total < 0.32) + { + level.spawnerwave[var_01] notify("waveReady"); + } + } +} + +//Function Number: 136 +debugwavecount(param_00) +{ + self endon("debug_stop"); + self endon("death"); + wait 0.05; +} + +//Function Number: 137 +waituntilwaverelease() +{ + var_00 = self.targetname; + if(level.spawnerwave[var_00].count) + { + level.spawnerwave[var_00] waittill("waveReady"); + } +} + +//Function Number: 138 +playerwasnearby(param_00,param_01) +{ + if(param_00) + { + return 1; + } + + if(isdefined(param_01) && isdefined(param_01.origin)) + { + var_02 = param_01.origin; + } + else + { + var_02 = self.origin; + } + + if(distance(level.player.origin,var_02) < 700) + { + return 1; + } + + return bullettracepassed(level.player geteye(),param_01 geteye(),0,undefined); +} + +//Function Number: 139 +waittillrestartordistance(param_00) +{ + self endon("flood_begin"); + param_00 = param_00 * 0.75; + while(distance(level.player.origin,self.origin) > param_00) + { + wait 1; + } +} + +//Function Number: 140 +flood_and_secure_spawn(param_00) +{ + thread flood_and_secure_spawn_goal(); + self waittill("death",var_01); + var_02 = isalive(var_01) && isplayer(var_01); + if(!var_02 && isdefined(var_01) && var_01.classname == "worldspawn") + { + var_02 = 1; + } + + var_03 = !isdefined(self); + param_00 notify("spawn_died",var_03,var_02); +} + +//Function Number: 141 +flood_and_secure_spawn_goal() +{ + if(isdefined(self.script_moveoverride)) + { + return; + } + + self endon("death"); + var_00 = getnode(self.target,"targetname"); + if(isdefined(var_00)) + { + self setgoalnode(var_00); + } + else + { + var_00 = getent(self.target,"targetname"); + if(isdefined(var_00)) + { + self setgoalpos(var_00.origin); + } + } + + if(isdefined(level.fightdist)) + { + self.pathenemyfightdist = level.fightdist; + self.pathenemylookahead = level.maxdist; + } + + if(isdefined(var_00.radius) && var_00.radius >= 0) + { + self.goalradius = var_00.radius; + } + else + { + self.goalradius = 256; + } + + self waittill("goal"); + while(isdefined(var_00.target)) + { + var_01 = getnode(var_00.target,"targetname"); + if(isdefined(var_01)) + { + var_00 = var_01; + } + else + { + break; + } + + self setgoalnode(var_00); + if(var_00.radius) + { + self.goalradius = var_00.radius; + } + else + { + self.goalradius = 256; + } + + self waittill("goal"); + } + + if(isdefined(self.script_noteworthy)) + { + if(self.script_noteworthy == "delete") + { + self kill(); + return; + } + } + + if(isdefined(var_00.target)) + { + var_02 = getent(var_00.target,"targetname"); + if(isdefined(var_02) && var_02.code_classname == "misc_mgturret" || var_02.code_classname == "misc_turret") + { + self setgoalnode(var_00); + self.goalradius = 4; + self waittill("goal"); + if(!isdefined(self.script_forcegoal)) + { + self.goalradius = level.default_goalradius; + } + + use_a_turret(var_02); + } + } + + if(isdefined(self.script_noteworthy)) + { + if(isdefined(self.script_noteworthy2)) + { + if(self.script_noteworthy2 == "furniture_push") + { + thread furniturepushsound(); + } + } + + if(self.script_noteworthy == "hide") + { + thread maps\_utility::set_battlechatter(0); + return; + } + } + + if(!isdefined(self.script_forcegoal) && !isdefined(self getgoalvolume())) + { + self.goalradius = level.default_goalradius; + } +} + +//Function Number: 142 +furniturepushsound() +{ + var_00 = getent(self.target,"targetname").origin; + common_scripts\utility::play_sound_in_space("furniture_slide",var_00); + wait 0.9; + if(isdefined(level.whisper)) + { + common_scripts\utility::play_sound_in_space(common_scripts\utility::random(level.whisper),var_00); + } +} + +//Function Number: 143 +friendlychain() +{ + waittillframeend; + var_00 = getentarray(self.target,"targetname"); + if(!var_00.size) + { + var_01 = getnode(self.target,"targetname"); + for(;;) + { + self waittill("trigger"); + if(isdefined(level.lastfriendlytrigger) && level.lastfriendlytrigger == self) + { + wait 0.5; + continue; + } + + if(!objectiveisallowed()) + { + wait 0.5; + continue; + } + + level notify("new_friendly_trigger"); + level.lastfriendlytrigger = self; + var_02 = !isdefined(self.script_baseoffire) || self.script_baseoffire == 0; + setnewplayerchain(var_01,var_02); + } + } + + for(;;) + { + self waittill("trigger"); + while(level.player istouching(self)) + { + wait 0.05; + } + + if(!objectiveisallowed()) + { + wait 0.05; + continue; + } + + if(isdefined(level.lastfriendlytrigger) && level.lastfriendlytrigger == self) + { + continue; + } + + level notify("new_friendly_trigger"); + level.lastfriendlytrigger = self; + common_scripts\utility::array_thread(var_00,::friendlytrigger); + wait 0.5; + } +} + +//Function Number: 144 +objectiveisallowed() +{ + var_00 = 1; + if(isdefined(self.script_objective_active)) + { + var_00 = 0; + for(var_01 = 0;var_01 < level.active_objective.size;var_01++) + { + if(!issubstr(self.script_objective_active,level.active_objective[var_01])) + { + continue; + } + + var_00 = 1; + break; + } + + if(!var_00) + { + return 0; + } + } + + if(!isdefined(self.script_objective_inactive)) + { + return var_00; + } + + var_02 = 0; + for(var_01 = 0;var_01 < level.inactive_objective.size;var_01++) + { + if(!issubstr(self.script_objective_inactive,level.inactive_objective[var_01])) + { + continue; + } + + var_02++; + } + + var_03 = strtok(self.script_objective_inactive," "); + return var_02 == var_03.size; +} + +//Function Number: 145 +friendlytrigger(param_00) +{ + level endon("new_friendly_trigger"); + self waittill("trigger"); + param_00 = getnode(self.target,"targetname"); + var_01 = !isdefined(self.script_baseoffire) || self.script_baseoffire == 0; + setnewplayerchain(param_00,var_01); +} + +//Function Number: 146 +waittilldeathorempty() +{ + self endon("death"); + var_00 = self.script_deathchain; + while(self.count) + { + self waittill("spawned",var_01); + var_01 thread deathchainainotify(var_00); + } +} + +//Function Number: 147 +deathchainainotify(param_00) +{ + level.deathspawner[param_00]++; + self waittill("death"); + level.deathspawner[param_00]--; + level notify("spawner_expired" + param_00); +} + +//Function Number: 148 +deathchainspawnerlogic() +{ + var_00 = self.script_deathchain; + level.deathspawner[var_00]++; + var_01 = self.origin; + waittilldeathorempty(); + level notify("spawner dot" + var_01); + level.deathspawner[var_00]--; + level notify("spawner_expired" + var_00); +} + +//Function Number: 149 +friendlychain_ondeath() +{ + var_00 = getentarray("friendly_chain_on_death","targetname"); + var_01 = getspawnerarray(); + level.deathspawner = []; + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + if(!isdefined(var_01[var_02].script_deathchain)) + { + continue; + } + + var_03 = var_01[var_02].script_deathchain; + if(!isdefined(level.deathspawner[var_03])) + { + level.deathspawner[var_03] = 0; + } + + var_01[var_02] thread deathchainspawnerlogic(); + } + + for(var_02 = 0;var_02 < var_00.size;var_02++) + { + if(!isdefined(var_00[var_02].script_deathchain)) + { + return; + } + + var_00[var_02] thread friendlychain_ondeaththink(); + } +} + +//Function Number: 150 +friendlychain_ondeaththink() +{ + while(level.deathspawner[self.script_deathchain] > 0) + { + level waittill("spawner_expired" + self.script_deathchain); + } + + level endon("start_chain"); + var_00 = getnode(self.target,"targetname"); + for(;;) + { + self waittill("trigger"); + setnewplayerchain(var_00,1); + iprintlnbold("Area secured, move up!"); + wait 5; + } +} + +//Function Number: 151 +setnewplayerchain(param_00,param_01) +{ + level.player maps\_utility::set_friendly_chain_wrapper(param_00); + level notify("new_escort_trigger"); + level notify("new_escort_debug"); + level notify("start_chain",param_01); +} + +//Function Number: 152 +friendlychains() +{ + level.friendlyspawnorg = []; + level.friendlyspawntrigger = []; + common_scripts\utility::array_thread(getentarray("friendlychain","targetname"),::friendlychain); +} + +//Function Number: 153 +unsetfriendlyspawn() +{ + var_00 = []; + var_01 = []; + for(var_02 = 0;var_02 < level.friendlyspawnorg.size;var_02++) + { + var_00[var_00.size] = level.friendlyspawnorg[var_02]; + var_01[var_01.size] = level.friendlyspawntrigger[var_02]; + } + + level.friendlyspawnorg = var_00; + level.friendlyspawntrigger = var_01; + if(activefriendlyspawn()) + { + return; + } + + common_scripts\utility::flag_clear("spawning_friendlies"); +} + +//Function Number: 154 +getfriendlyspawnstart() +{ + return level.friendlyspawnorg[level.friendlyspawnorg.size - 1]; +} + +//Function Number: 155 +activefriendlyspawn() +{ + return level.friendlyspawnorg.size > 0; +} + +//Function Number: 156 +getfriendlyspawntrigger() +{ + return level.friendlyspawntrigger[level.friendlyspawntrigger.size - 1]; +} + +//Function Number: 157 +setfriendlyspawn(param_00,param_01) +{ + level.friendlyspawnorg[level.friendlyspawnorg.size] = param_00.origin; + level.friendlyspawntrigger[level.friendlyspawntrigger.size] = param_01; + common_scripts\utility::flag_set("spawning_friendlies"); +} + +//Function Number: 158 +delayedplayergoal() +{ + self endon("death"); + self endon("leaveSquad"); + wait 0.5; + self setgoalentity(level.player); +} + +//Function Number: 159 +spawnwavestoptrigger(param_00) +{ + self notify("stopTrigger"); + self endon("stopTrigger"); + self waittill("trigger"); + if(getfriendlyspawntrigger() != param_00) + { + return; + } + + unsetfriendlyspawn(); +} + +//Function Number: 160 +friendlyspawnwave_triggerthink(param_00) +{ + var_01 = getent(self.target,"targetname"); + for(;;) + { + self waittill("trigger"); + param_00 notify("friendly_wave_start",var_01); + if(!isdefined(var_01.target)) + { + continue; + } + } +} + +//Function Number: 161 +goalvolumes() +{ + var_00 = getentarray("info_volume","classname"); + level.deathchain_goalvolume = []; + level.goalvolumes = []; + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + var_02 = var_00[var_01]; + if(isdefined(var_02.script_deathchain)) + { + level.deathchain_goalvolume[var_02.script_deathchain] = var_02; + } + + if(isdefined(var_02.script_goalvolume)) + { + level.goalvolumes[var_02.script_goalvolume] = var_02; + } + } +} + +//Function Number: 162 +debugprint(param_00,param_01,param_02) +{ + if(1) + { + return; + } + + var_03 = self getorigin(); + var_04 = 40 * sin(var_03[0] + var_03[1]) - 40; + var_03 = (var_03[0],var_03[1],var_03[2] + var_04); + level endon(param_01); + self endon("new_color"); + if(!isdefined(param_02)) + { + param_02 = (0,0.8,0.6); + } + + var_05 = 0; + for(;;) + { + var_05 = var_05 + 12; + var_06 = sin(var_05) * 0.4; + if(var_06 < 0) + { + var_06 = var_06 * -1; + } + + var_06 = var_06 + 1; + wait 0.05; + } +} + +//Function Number: 163 +aigroup_create(param_00) +{ + level._ai_group[param_00] = spawnstruct(); + level._ai_group[param_00].aicount = 0; + level._ai_group[param_00].spawnercount = 0; + level._ai_group[param_00].ai = []; + level._ai_group[param_00].spawners = []; +} + +//Function Number: 164 +aigroup_spawnerthink(param_00) +{ + self endon("death"); + self.decremented = 0; + param_00.spawnercount++; + thread aigroup_spawnerdeath(param_00); + thread aigroup_spawnerempty(param_00); + while(self.count) + { + self waittill("spawned",var_01); + if(maps\_utility::spawn_failed(var_01)) + { + continue; + } + + var_01 thread aigroup_soldierthink(param_00); + } + + waittillframeend; + if(self.decremented) + { + return; + } + + self.decremented = 1; + param_00.spawnercount--; +} + +//Function Number: 165 +aigroup_spawnerdeath(param_00) +{ + self waittill("death"); + if(self.decremented) + { + return; + } + + param_00.spawnercount--; +} + +//Function Number: 166 +aigroup_spawnerempty(param_00) +{ + self endon("death"); + self waittill("emptied spawner"); + waittillframeend; + if(self.decremented) + { + return; + } + + self.decremented = 1; + param_00.spawnercount--; +} + +//Function Number: 167 +aigroup_soldierthink(param_00) +{ + param_00.aicount++; + param_00.ai[param_00.ai.size] = self; + if(isdefined(self.script_deathflag_longdeath)) + { + waittilldeathorpaindeath(); + } + else + { + self waittill("death"); + } + + param_00.aicount--; +} + +//Function Number: 168 +camper_trigger_think(param_00) +{ + var_01 = strtok(param_00.script_linkto," "); + var_02 = []; + var_03 = []; + for(var_04 = 0;var_04 < var_01.size;var_04++) + { + var_05 = var_01[var_04]; + var_06 = getent(var_05,"script_linkname"); + if(isdefined(var_06)) + { + var_02 = common_scripts\utility::add_to_array(var_02,var_06); + continue; + } + + var_07 = getnode(var_05,"script_linkname"); + if(!isdefined(var_07)) + { + continue; + } + + var_03 = common_scripts\utility::add_to_array(var_03,var_07); + } + + param_00 waittill("trigger"); + var_03 = maps\_utility::array_randomize(var_03); + for(var_04 = 0;var_04 < var_03.size;var_04++) + { + var_03[var_04].claimed = 0; + } + + var_08 = 0; + for(var_04 = 0;var_04 < var_02.size;var_04++) + { + var_09 = var_02[var_04]; + if(!isdefined(var_09)) + { + continue; + } + + if(isdefined(var_09.script_spawn_here)) + { + continue; + } + + while(isdefined(var_03[var_08].script_noteworthy) && var_03[var_08].script_noteworthy == "dont_spawn") + { + var_08++; + } + + var_09.origin = var_03[var_08].origin; + var_09.angles = var_03[var_08].angles; + var_09 maps\_utility::add_spawn_function(::claim_a_node,var_03[var_08]); + var_08++; + } + + common_scripts\utility::array_thread(var_02,::maps\_utility::add_spawn_function,::camper_guy); + common_scripts\utility::array_thread(var_02,::maps\_utility::add_spawn_function,::move_when_enemy_hides,var_03); + common_scripts\utility::array_thread(var_02,::maps\_utility::spawn_ai); +} + +//Function Number: 169 +camper_guy() +{ + self.goalradius = 8; + self.fixednode = 1; +} + +//Function Number: 170 +move_when_enemy_hides(param_00) +{ + self endon("death"); + var_01 = 0; + for(;;) + { + if(!isalive(self.enemy)) + { + self waittill("enemy"); + var_01 = 0; + continue; + } + + if(isplayer(self.enemy)) + { + if(self.enemy maps\_utility::ent_flag("player_has_red_flashing_overlay") || common_scripts\utility::flag("player_flashed")) + { + self.fixednode = 0; + for(;;) + { + self.goalradius = 180; + self setgoalpos(level.player.origin); + wait 1; + } + + return; + } + } + + if(var_01) + { + if(self cansee(self.enemy)) + { + wait 0.05; + continue; + } + + var_01 = 0; + } + else + { + if(self cansee(self.enemy)) + { + var_01 = 1; + } + + wait 0.05; + continue; + } + + if(randomint(3) > 0) + { + var_02 = find_unclaimed_node(param_00); + if(isdefined(var_02)) + { + claim_a_node(var_02,self.claimed_node); + self waittill("goal"); + } + } + } +} + +//Function Number: 171 +claim_a_node(param_00,param_01) +{ + self setgoalnode(param_00); + self.claimed_node = param_00; + param_00.claimed = 1; + if(isdefined(param_01)) + { + param_01.claimed = 0; + } +} + +//Function Number: 172 +find_unclaimed_node(param_00) +{ + for(var_01 = 0;var_01 < param_00.size;var_01++) + { + if(param_00[var_01].claimed) + { + continue; + } + else + { + return param_00[var_01]; + } + } + + return undefined; +} + +//Function Number: 173 +flood_trigger_think(param_00) +{ + var_01 = getentarray(param_00.target,"targetname"); + common_scripts\utility::array_thread(var_01,::flood_spawner_init); + param_00 waittill("trigger"); + var_01 = getentarray(param_00.target,"targetname"); + common_scripts\utility::array_thread(var_01,::flood_spawner_think,param_00); +} + +//Function Number: 174 +flood_spawner_init(param_00) +{ +} + +//Function Number: 175 +trigger_requires_player(param_00) +{ + if(!isdefined(param_00)) + { + return 0; + } + + return isdefined(param_00.script_requires_player); +} + +//Function Number: 176 +two_stage_spawner_think(param_00) +{ + var_01 = getent(param_00.target,"targetname"); + waittillframeend; + var_02 = getentarray(var_01.target,"targetname"); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + var_02[var_03].script_moveoverride = 1; + var_02[var_03] maps\_utility::add_spawn_function(::wait_to_go,var_01); + } + + param_00 waittill("trigger"); + var_02 = getentarray(var_01.target,"targetname"); + common_scripts\utility::array_thread(var_02,::maps\_utility::spawn_ai); +} + +//Function Number: 177 +wait_to_go(param_00) +{ + param_00 endon("death"); + self endon("death"); + self.goalradius = 8; + param_00 waittill("trigger"); + thread go_to_node(); +} + +//Function Number: 178 +flood_spawner_think(param_00) +{ + self endon("death"); + self notify("stop current floodspawner"); + self endon("stop current floodspawner"); + if(is_pyramid_spawner()) + { + pyramid_spawn(param_00); + return; + } + + var_01 = trigger_requires_player(param_00); + maps\_utility::script_delay(); + while(self.count > 0) + { + while(var_01 && !level.player istouching(param_00)) + { + wait 0.5; + } + + var_02 = isdefined(self.script_stealth) && common_scripts\utility::flag("_stealth_enabled") && !common_scripts\utility::flag("_stealth_spotted"); + if(isdefined(self.script_forcespawn)) + { + var_03 = self stalingradspawn(var_02); + } + else + { + var_03 = self dospawn(var_02); + } + + if(maps\_utility::spawn_failed(var_03)) + { + wait 2; + continue; + } + + if(isdefined(self.script_combatbehavior)) + { + if(self.script_combatbehavior == "heat") + { + var_03 maps\_utility::enable_heat_behavior(); + } + + if(self.script_combatbehavior == "cqb") + { + var_03 maps\_utility::enable_cqbwalk(); + } + } + + var_03 thread reincrement_count_if_deleted(self); + var_03 thread expand_goalradius(param_00); + var_03 waittill("death",var_04); + if(!player_saw_kill(var_03,var_04)) + { + self.count++; + } + else if(isdefined(level.ac130_flood_respawn)) + { + if(isdefined(level.ac130gunner) && var_04 == level.ac130gunner) + { + if(randomint(2) == 0) + { + self.count++; + } + } + } + + if(!isdefined(var_03)) + { + continue; + } + + if(!maps\_utility::script_wait()) + { + wait randomfloatrange(5,9); + } + } +} + +//Function Number: 179 +player_saw_kill(param_00,param_01) +{ + if(isdefined(self.script_force_count)) + { + if(self.script_force_count) + { + return 1; + } + } + + if(!isdefined(param_00)) + { + return 0; + } + + if(isalive(param_01)) + { + if(isplayer(param_01)) + { + return 1; + } + + if(distance(param_01.origin,level.player.origin) < 200) + { + return 1; + } + } + else if(isdefined(param_01)) + { + if(param_01.classname == "worldspawn") + { + return 0; + } + + if(distance(param_01.origin,level.player.origin) < 200) + { + return 1; + } + } + + if(distance(param_00.origin,level.player.origin) < 200) + { + return 1; + } + + return bullettracepassed(level.player geteye(),param_00 geteye(),0,undefined); +} + +//Function Number: 180 +is_pyramid_spawner() +{ + if(!isdefined(self.target)) + { + return 0; + } + + var_00 = getentarray(self.target,"targetname"); + if(!var_00.size) + { + return 0; + } + + return issubstr(var_00[0].classname,"actor"); +} + +//Function Number: 181 +pyramid_death_report(param_00) +{ + param_00.spawn waittill("death"); + self notify("death_report"); +} + +//Function Number: 182 +pyramid_spawn(param_00) +{ + self endon("death"); + var_01 = trigger_requires_player(param_00); + maps\_utility::script_delay(); + if(var_01) + { + while(!level.player istouching(param_00)) + { + wait 0.5; + } + } + + var_02 = getentarray(self.target,"targetname"); + self.spawners = 0; + common_scripts\utility::array_thread(var_02,::pyramid_spawner_reports_death,self); + var_04 = randomint(var_02.size); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + if(self.count <= 0) + { + return; + } + + var_04++; + if(var_04 >= var_02.size) + { + var_04 = 0; + } + + var_05 = var_02[var_04]; + var_05 maps\_utility::set_count(1); + var_06 = var_05 maps\_utility::spawn_ai(); + if(maps\_utility::spawn_failed(var_06)) + { + wait 2; + continue; + } + + self.count--; + var_05.spawn = var_06; + var_06 thread reincrement_count_if_deleted(self); + var_06 thread expand_goalradius(param_00); + thread pyramid_death_report(var_05); + } + + var_07 = 0.01; + while(self.count > 0) + { + self waittill("death_report"); + maps\_utility::script_wait(); + wait var_07; + var_07 = var_07 + 2.5; + var_04 = randomint(var_02.size); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + var_02 = common_scripts\utility::array_removeundefined(var_02); + if(!var_02.size) + { + if(isdefined(self)) + { + self delete(); + } + + return; + } + + var_04++; + if(var_04 >= var_02.size) + { + var_04 = 0; + } + + var_05 = var_02[var_04]; + if(isalive(var_05.spawn)) + { + continue; + } + + if(isdefined(var_05.target)) + { + self.target = var_05.target; + } + else + { + self.target = undefined; + } + + var_06 = maps\_utility::spawn_ai(); + if(maps\_utility::spawn_failed(var_06)) + { + wait 2; + continue; + } + + var_06 thread reincrement_count_if_deleted(self); + var_06 thread expand_goalradius(param_00); + var_05.spawn = var_06; + thread pyramid_death_report(var_05); + if(self.count <= 0) + { + return; + } + } + } +} + +//Function Number: 183 +pyramid_spawner_reports_death(param_00) +{ + param_00 endon("death"); + param_00.spawners++; + self waittill("death"); + param_00.spawners--; + if(!param_00.spawners) + { + param_00 delete(); + } +} + +//Function Number: 184 +expand_goalradius(param_00) +{ + if(isdefined(self.script_forcegoal)) + { + return; + } + + var_01 = level.default_goalradius; + if(isdefined(param_00)) + { + if(isdefined(param_00.script_radius)) + { + if(param_00.script_radius == -1) + { + return; + } + + var_01 = param_00.script_radius; + } + } + + if(isdefined(self.script_forcegoal)) + { + return; + } + + self endon("death"); + self waittill("goal"); + self.goalradius = var_01; +} + +//Function Number: 185 +drop_health_timeout_thread() +{ + self endon("death"); + wait 95; + self notify("timeout"); +} + +//Function Number: 186 +drop_health_trigger_think() +{ + self endon("timeout"); + thread drop_health_timeout_thread(); + self waittill("trigger"); + maps\_utility::change_player_health_packets(1); +} + +//Function Number: 187 +traceshow(param_00) +{ + wait 0.05; +} + +//Function Number: 188 +show_bad_path() +{ +} + +//Function Number: 189 +random_spawn(param_00) +{ + param_00 waittill("trigger"); + var_01 = getentarray(param_00.target,"targetname"); + if(!var_01.size) + { + return; + } + + var_02 = common_scripts\utility::random(var_01); + var_01 = []; + var_01[var_01.size] = var_02; + if(isdefined(var_02.script_linkto)) + { + var_03 = strtok(var_02.script_linkto," "); + for(var_04 = 0;var_04 < var_03.size;var_04++) + { + var_01[var_01.size] = getent(var_03[var_04],"script_linkname"); + } + } + + waittillframeend; + common_scripts\utility::array_thread(var_01,::maps\_utility::add_spawn_function,::blowout_goalradius_on_pathend); + common_scripts\utility::array_thread(var_01,::maps\_utility::spawn_ai); +} + +//Function Number: 190 +blowout_goalradius_on_pathend() +{ + if(isdefined(self.script_forcegoal)) + { + return; + } + + self endon("death"); + self waittill("reached_path_end"); + if(!isdefined(self getgoalvolume())) + { + self.goalradius = level.default_goalradius; + } +} + +//Function Number: 191 +objective_event_init(param_00) +{ + var_01 = param_00 maps\_utility::get_trigger_flag(); + common_scripts\utility::flag_init(var_01); + while(level.deathspawner[param_00.script_deathchain] > 0) + { + level waittill("spawner_expired" + param_00.script_deathchain); + } + + common_scripts\utility::flag_set(var_01); +} + +//Function Number: 192 +setup_ai_eq_triggers() +{ + self endon("death"); + waittillframeend; + self.is_the_player = isplayer(self); + self.eq_table = []; + self.eq_touching = []; + for(var_00 = 0;var_00 < level.eq_trigger_num;var_00++) + { + self.eq_table[var_00] = 0; + } +} + +//Function Number: 193 +ai_array() +{ + level.ai_array[level.unique_id] = self; + self waittill("death"); + waittillframeend; + level.ai_array[level.unique_id] = undefined; +} + +//Function Number: 194 +spawner_dronespawn(param_00) +{ + var_01 = param_00 spawndrone(); + var_01 useanimtree(#animtree); + if(var_01.weapon != "one") + { + var_02 = getweaponmodel(var_01.weapon); + var_01 attach(var_02,"tag_weapon_right"); + var_03 = getweaponhidetags(var_01.weapon); + for(var_04 = 0;var_04 < var_03.size;var_04++) + { + var_01 hidepart(var_03[var_04],var_02); + } + } + + var_01.spawner = param_00; + var_01.drone_delete_on_unload = isdefined(param_00.script_noteworthy) && param_00.script_noteworthy == "drone_delete_on_unload"; + param_00 notify("drone_spawned",var_01); + return var_01; +} + +//Function Number: 195 +spawner_makerealai(param_00) +{ + if(!isdefined(param_00.spawner)) + { + } + + var_01 = param_00.spawner.origin; + var_02 = param_00.spawner.angles; + param_00.spawner.origin = param_00.origin; + param_00.spawner.angles = param_00.angles; + var_03 = param_00.spawner stalingradspawn(); + var_04 = maps\_utility::spawn_failed(var_03); + if(var_04) + { + } + + var_03.vehicle_idling = param_00.vehicle_idling; + var_03.vehicle_position = param_00.vehicle_position; + var_03.standing = param_00.standing; + var_03.forcecolor = param_00.forcecolor; + param_00.spawner.origin = var_01; + param_00.spawner.angles = var_02; + param_00 delete(); + return var_03; +} + +//Function Number: 196 +death_achievements() +{ + self waittill("death",var_00,var_01,var_02); + if(!isdefined(self)) + { + return; + } + + if(!self isbadguy()) + { + return; + } + + if(!isdefined(var_00)) + { + return; + } + + if(!isplayer(var_00)) + { + return; + } + + thread achieve_strike(var_00,var_01,var_02); + thread achieve_jack_the_ripper(var_00,var_01,var_02); + thread achieve_serrated_edge(var_00,var_01,var_02); + if(isdefined(self.last_dmg_type)) + { + var_01 = self.last_dmg_type; + } +} + +//Function Number: 197 +achieve_strike(param_00,param_01,param_02) +{ + if(param_01 != "MOD_GRENADE_SPLASH") + { + param_00.achieve_strike = undefined; + return; + } + + if(!isdefined(param_02)) + { + param_00.achieve_strike = undefined; + return; + } + + if(weaponinventorytype(param_02) != "offhand") + { + param_00.achieve_strike = undefined; + return; + } + + if(!isdefined(param_00.achieve_strike)) + { + param_00.achieve_strike = 1; + } + else + { + param_00.achieve_strike++; + } + + if(param_00.achieve_strike == 5) + { + param_00 maps\_utility::player_giveachievement_wrapper("STRIKE"); + } + + waittillframeend; + param_00.achieve_strike = undefined; +} + +//Function Number: 198 +achieve_jack_the_ripper(param_00,param_01,param_02) +{ + if(param_01 == "MOD_MELEE") + { + if(!isdefined(param_00.achieve_jack_the_ripper)) + { + param_00.achieve_jack_the_ripper = 1; + } + else + { + param_00.achieve_jack_the_ripper++; + } + + if(param_00.achieve_jack_the_ripper == 5) + { + param_00 maps\_utility::player_giveachievement_wrapper("JACK_THE_RIPPER"); + return; + } + + return; + } + + param_00.achieve_jack_the_ripper = undefined; +} + +//Function Number: 199 +achieve_serrated_edge(param_00,param_01,param_02) +{ + if(isdefined(self.juggernaut) && self.juggernaut && param_01 == "MOD_MELEE" && !isdefined(param_02) || !issubstr(param_02,"riotshield") && !issubstr(param_02,"riot_shield")) + { + param_00 maps\_utility::player_giveachievement_wrapper("SERRATED_EDGE"); + } +} + +//Function Number: 200 +death_achievements_rappel(param_00) +{ +} + +//Function Number: 201 +add_random_killspawner_to_spawngroup() +{ + var_00 = self.script_random_killspawner; + var_01 = self.script_randomspawn; + if(!isdefined(level.killspawn_groups[var_00])) + { + level.killspawn_groups[var_00] = []; + } + + if(!isdefined(level.killspawn_groups[var_00][var_01])) + { + level.killspawn_groups[var_00][var_01] = []; + } + + level.killspawn_groups[var_00][var_01][self.export] = self; +} + +//Function Number: 202 +add_to_spawngroup() +{ + var_00 = self.script_spawngroup; + var_01 = self.script_spawnsubgroup; + if(!isdefined(level.spawn_groups[var_00])) + { + level.spawn_groups[var_00] = []; + } + + if(!isdefined(level.spawn_groups[var_00][var_01])) + { + level.spawn_groups[var_00][var_01] = []; + } + + level.spawn_groups[var_00][var_01][self.export] = self; +} + +//Function Number: 203 +start_off_running() +{ + self endon("death"); + self.disableexits = 1; + wait 3; + self.disableexits = 0; +} + +//Function Number: 204 +deathtime() +{ + self endon("death"); + wait self.script_deathtime; + wait randomfloat(10); + self kill(); +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_specialops.gsc b/MW3/PC/SP/maps/_specialops.gsc new file mode 100644 index 0000000..23cc5fc --- /dev/null +++ b/MW3/PC/SP/maps/_specialops.gsc @@ -0,0 +1,2585 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_specialops.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 132 + * Decompile Time: 1666 ms + * Timestamp: 10/27/2023 2:20:22 AM +*******************************************************************/ + +//Function Number: 1 +specialops_init() +{ + foreach(var_01 in level.players) + { + var_01 thread func_17E7(); + } + + if(maps\_utility::is_coop()) + { + maps\_gameskill::setglobaldifficulty(); + foreach(var_01 in level.players) + { + var_01 maps\_gameskill::setdifficulty(); + } + } + + if(!isdefined(level.so_override)) + { + level.so_override = []; + } + + if(!isdefined(level.friendlyfire_warnings)) + { + level.friendlyfire_warnings = 1; + } + + level.no_friendly_fire_penalty = 1; + precacheminimapsentrycodeassets(); + precachemenu("sp_eog_summary"); + precachemenu("coop_eog_summary"); + precachemenu("coop_eog_summary2"); + precachemenu("surHUD_display"); + precacheshellshock("so_finished"); + precacheshader("hud_show_timer"); + precacheshader("specops_ui_equipmentstore"); + precacheshader("specops_ui_weaponstore"); + precacheshader("specops_ui_airsupport"); + so_precache_strings(); + foreach(var_01 in level.players) + { + var_01.so_hud_show_time = gettime() + so_standard_wait() * 1000; + var_01 maps\_utility::ent_flag_init("so_hud_can_toggle"); + } + + level.challenge_time_nudge = 30; + level.challenge_time_hurry = 10; + level.func_destructible_crush_player = ::so_crush_player; + setsaveddvar("g_friendlyfireDamageScale",2); + setsaveddvar("turretSentryRestrictUsageToOwner",0); + if(isdefined(level.so_compass_zoom)) + { + var_07 = 0; + switch(level.so_compass_zoom) + { + case "close": + var_07 = 1500; + break; + + case "far": + var_07 = 6000; + break; + + default: + var_07 = 3000; + break; + } + + if(!issplitscreen()) + { + var_07 = var_07 + var_07 * 0.1; + } + + setsaveddvar("compassmaxrange",var_07); + } + + common_scripts\utility::flag_init("challenge_timer_passed"); + common_scripts\utility::flag_init("challenge_timer_expired"); + common_scripts\utility::flag_init("special_op_succeeded"); + common_scripts\utility::flag_init("special_op_failed"); + common_scripts\utility::flag_init("special_op_terminated"); + common_scripts\utility::flag_init("special_op_p1ready"); + common_scripts\utility::flag_init("special_op_p2ready"); + common_scripts\utility::flag_init("special_op_no_unlink"); + common_scripts\utility::flag_init("special_op_final_xp_given"); + thread maps\_specialops_code::disable_saving(); + thread maps\_specialops_code::specialops_detect_death(); + maps\_specialops_code::specialops_dialog_init(); + if(maps\_utility::is_coop()) + { + maps\_specialops_battlechatter::init(); + } + + if(!isdefined(level.civilian_warning_time)) + { + level.civilian_warning_time = []; + } + + if(!maps\_utility::is_coop()) + { + maps\_utility::set_custom_gameskill_func(::maps\_gameskill::solo_player_in_special_ops); + } + else if(maps\_utility::is_survival()) + { + maps\_utility::set_custom_gameskill_func(::maps\_gameskill::coop_player_in_special_ops_survival); + } + + common_scripts\utility::array_thread(getentarray("trigger_multiple_SO_escapewarning","classname"),::maps\_specialops_code::enable_escape_warning_auto); + common_scripts\utility::array_thread(getentarray("trigger_multiple_SO_escapefailure","classname"),::maps\_specialops_code::enable_escape_failure_auto); + level.so_deadquotes_chance = 0.5; + setdvar("ui_deadquote",""); + thread maps\_specialops_code::so_special_failure_hint(); + setdvar("ui_skip_level_select","1"); + setdvar("ui_opensummary",0); + var_08 = "LB_" + level.script; + var_09 = ""; + if(maps\_utility::is_coop()) + { + var_08 = var_08 + "_TEAM"; + } + + if(maps\_utility::is_survival()) + { + var_09 = " LB_EXT_" + level.script; + if(maps\_utility::is_coop()) + { + var_09 = var_09 + "_TEAM"; + } + } + + precacheleaderboards(var_08 + var_09); + maps\_specialops_code::pick_starting_location_so(); + level thread setsouniquesaveddvars(); + maps\_audio::aud_set_spec_ops(); + maps\_specialops_code::register_level_unlock("so_mw3_mission_2","mission"); + maps\_specialops_code::register_level_unlock("so_mw3_mission_3","mission"); + maps\_specialops_code::register_level_unlock("so_mw3_mission_4","mission"); + maps\_specialops_code::register_survival_unlock(); + maps\_rank::init(); + maps\_missions::init(); + maps\_utility::enable_damagefeedback(); + maps\_utility::add_global_spawn_function("axis",::maps\_specialops_code::so_ai_flashed_damage_feedback); + thread maps\_specialops_code::setup_xp(); + thread unlock_hint(); + thread so_achievement_init(); +} + +//Function Number: 2 +func_17E7() +{ + wait 0.05; + self setplayerdata("round","kills",0); + self setplayerdata("round","killStreak",0); + self setplayerdata("round","deaths",0); + self setplayerdata("round","difficulty",0); + self setplayerdata("round","score",0); + self setplayerdata("round","timePlayed",0); + self setplayerdata("round","wave",0); + self setplayerdata("round","xuidTeammate","0"); + self setplayerdata("round","totalXp",0); + self setplayerdata("round","scoreXp",0); + self setplayerdata("round","challengeXp",0); +} + +//Function Number: 3 +setsouniquesaveddvars() +{ + setsaveddvar("hud_fade_ammodisplay",30); + setsaveddvar("hud_fade_stance",30); + setsaveddvar("hud_fade_offhand",30); + setsaveddvar("hud_fade_compass",0); +} + +//Function Number: 4 +so_precache_strings() +{ + precachestring(&"SPECIAL_OPS_TIME_NULL"); + precachestring(&"SPECIAL_OPS_TIME"); + precachestring(&"SPECIAL_OPS_WAITING_P1"); + precachestring(&"SPECIAL_OPS_WAITING_P2"); + precachestring(&"SPECIAL_OPS_REVIVE_NAG_HINT"); + precachestring(&"SPECIAL_OPS_CHALLENGE_SUCCESS"); + precachestring(&"SPECIAL_OPS_CHALLENGE_FAILURE"); + precachestring(&"SPECIAL_OPS_FAILURE_HINT_TIME"); + precachestring(&"SPECIAL_OPS_ESCAPE_WARNING"); + precachestring(&"SPECIAL_OPS_ESCAPE_SPLASH"); + precachestring(&"SPECIAL_OPS_WAITING_OTHER_PLAYER"); + precachestring(&"SPECIAL_OPS_STARTING_IN"); + precachestring(&"SPECIAL_OPS_UI_TIME"); + precachestring(&"SPECIAL_OPS_UI_KILLS"); + precachestring(&"SPECIAL_OPS_UI_DIFFICULTY"); + precachestring(&"SPECIAL_OPS_UI_PLAY_AGAIN"); + precachestring(&"SPECIAL_OPS_DASHDASH"); + precachestring(&"SPECIAL_OPS_HOSTILES"); + precachestring(&"SPECIAL_OPS_INTERMISSION_WAVENUM"); + precachestring(&"SPECIAL_OPS_INTERMISSION_WAVEFINAL"); + precachestring(&"SPECIAL_OPS_WAVENUM"); + precachestring(&"SPECIAL_OPS_WAVEFINAL"); + precachestring(&"SPECIAL_OPS_PRESS_TO_CANCEL"); + precachestring(&"SPECIAL_OPS_PLAYER_IS_READY"); + precachestring(&"SPECIAL_OPS_PRESS_TO_START"); + precachestring(&"SPECIAL_OPS_PLAYER_IS_NOT_READY"); + precachestring(&"SPECIAL_OPS_EMPTY"); +} + +//Function Number: 5 +so_standard_wait() +{ + return 4; +} + +//Function Number: 6 +specialops_remove_unused() +{ + var_00 = getentarray(); + if(!isdefined(var_00)) + { + return; + } + + var_01 = maps\_utility::is_specialop(); + foreach(var_03 in var_00) + { + if(var_03 maps\_specialops_code::specialops_remove_entity_check(var_01)) + { + var_03 delete(); + } + } + + maps\_specialops_code::so_special_failure_hint_reset_dvars(); +} + +//Function Number: 7 +enable_triggered_start(param_00) +{ + level endon("challenge_timer_expired"); + var_01 = getent(param_00,"script_noteworthy"); + var_01 waittill("trigger"); + common_scripts\utility::flag_set(param_00); +} + +//Function Number: 8 +enable_triggered_complete(param_00,param_01,param_02) +{ + level endon("challenge_timer_expired"); + common_scripts\utility::flag_set(param_00); + if(!isdefined(param_02)) + { + param_02 = "freeze"; + } + + var_03 = getent(param_00,"script_noteworthy"); + thread maps\_specialops_code::disable_mission_end_trigger(var_03); + switch(param_02) + { + case "all": + maps\_specialops_code::wait_all_players_are_touching(var_03); + break; + + case "any": + maps\_specialops_code::wait_all_players_have_touched(var_03,param_02); + break; + + case "freeze": + maps\_specialops_code::wait_all_players_have_touched(var_03,param_02); + break; + } + + level.challenge_end_time = gettime(); + common_scripts\utility::flag_set(param_01); +} + +//Function Number: 9 +fade_challenge_in(param_00,param_01) +{ + if(!maps\_utility::is_survival()) + { + foreach(var_03 in level.players) + { + var_03 thread enable_kill_counter(); + } + } + + if(!isdefined(param_00)) + { + param_00 = 0.5; + } + + var_05 = 1; + if(isdefined(level.congrat_min_wave)) + { + var_05 = level.congrat_min_wave; + } + + var_06 = maps\_hud_util::create_client_overlay("black",var_05); + wait param_00; + level notify("challenge_fading_in"); + var_07 = 1; + var_06 thread maps\_hud_util::fade_over_time(0,var_07); + level thread maps\_utility::notify_delay("challenge_fadein_complete",var_07); + if(common_scripts\utility::flag_exist("slamzoom_finished")) + { + common_scripts\utility::flag_wait("slamzoom_finished"); + } + + wait 0.75; + if(!isdefined(param_01) || param_01) + { + thread so_dialog_ready_up(); + } +} + +//Function Number: 10 +fade_challenge_out(param_00,param_01) +{ + if(!isdefined(param_01)) + { + param_01 = 0; + } + + if(isdefined(param_00)) + { + common_scripts\utility::flag_wait(param_00); + } + + var_02 = undefined; + if(maps\_utility::is_survival()) + { + var_02 = 1; + if(!param_01) + { + param_01 = level.current_wave < level.var_17F7; + } + } + + if(!param_01) + { + thread so_dialog_mission_success(var_02); + } + + maps\_endmission::so_eog_summary_calculate(1); + maps\_specialops_code::specialops_mission_over_setup(1); + maps\_specialops_code::so_mission_complete_achivements(); + if(maps\_utility::is_survival()) + { + level notify("so_generate_deathquote"); + } + + maps\_endmission::so_eog_summary_display(); +} + +//Function Number: 11 +override_summary_time(param_00) +{ + self.so_eog_summary_data["time"] = maps\_utility::round_millisec_on_sec(param_00,1,0); +} + +//Function Number: 12 +override_summary_kills(param_00) +{ + self.so_eog_summary_data["kills"] = param_00; +} + +//Function Number: 13 +override_summary_score(param_00) +{ + self.so_eog_summary_data["score"] = param_00; +} + +//Function Number: 14 +enable_countdown_timer(param_00,param_01,param_02,param_03) +{ + level endon("special_op_terminated"); + if(!isdefined(param_02)) + { + param_02 = &"SPECIAL_OPS_STARTING_IN"; + } + + var_04 = so_create_hud_item(0,so_hud_ypos(),param_02); + var_04 setpulsefx(50,param_00 * 1000,500); + var_05 = so_create_hud_item(0,so_hud_ypos()); + var_05 thread show_countdown_timer_time(param_00,param_03); + wait param_00; + level.player playsound("arcademode_zerodeaths"); + if(isdefined(param_01) && param_01) + { + level.challenge_start_time = gettime(); + } + + thread destroy_countdown_timer(var_04,var_05); +} + +//Function Number: 15 +destroy_countdown_timer(param_00,param_01) +{ + wait 1; + param_00 destroy(); + param_01 destroy(); +} + +//Function Number: 16 +show_countdown_timer_time(param_00,param_01) +{ + self.alignx = "left"; + self settenthstimer(param_00); + self.alpha = 0; + if(!isdefined(param_01)) + { + param_01 = 0.625; + } + + wait param_01; + param_00 = int(param_00 - param_01 * 1000); + self setpulsefx(50,param_00,500); + self.alpha = 1; +} + +//Function Number: 17 +enable_challenge_timer(param_00,param_01,param_02,param_03) +{ + if(isdefined(param_00)) + { + if(!common_scripts\utility::flag_exist(param_00)) + { + common_scripts\utility::flag_init(param_00); + } + + level.var_1803 = param_00; + } + + if(isdefined(param_01)) + { + if(!common_scripts\utility::flag_exist(param_01)) + { + common_scripts\utility::flag_init(param_01); + } + + level.hud_so_counter_messages = param_01; + } + + if(!isdefined(param_02)) + { + param_02 = &"SPECIAL_OPS_TIME"; + } + + if(!isdefined(level.hud_so_counter_values)) + { + level.hud_so_counter_values = level.challenge_time_hurry; + } + + level.so_challenge_time_beep = level.hud_so_counter_values + 1; + foreach(var_05 in level.players) + { + var_05 thread maps\_specialops_code::challenge_timer_player_setup(param_00,param_01,param_02,param_03); + } +} + +//Function Number: 18 +enable_challenge_counter(param_00,param_01,param_02) +{ + if(!isdefined(self.var_1809)) + { + self.var_1809 = []; + } + + if(!isdefined(self.var_180A)) + { + self.var_180A = []; + } + + thread enable_challenge_counter_think(param_00,param_01,param_02); +} + +//Function Number: 19 +enable_challenge_counter_think(param_00,param_01,param_02) +{ + level endon("special_op_terminated"); + disable_challenge_counter(param_00); + self endon(challenge_counter_get_disable_notify(param_00)); + var_03 = so_hud_ypos(); + self.var_1809[param_00] = so_create_hud_item(param_00,var_03,param_01,self); + self.var_180A[param_00] = so_create_hud_item(param_00,var_03,undefined,self); + self.var_180A[param_00] settext(0); + self.var_180A[param_00].alignx = "left"; + childthread info_hud_handle_fade(self.var_1809[param_00]); + childthread info_hud_handle_fade(self.var_180A[param_00]); + if(!isdefined(level.var_23B) || !level.var_23B) + { + common_scripts\utility::flag_wait(level.var_1803); + } + + for(;;) + { + self waittill(param_02,var_04); + self.var_180A[param_00] settext(var_04); + } +} + +//Function Number: 20 +disable_challenge_counter(param_00) +{ + param_00 = int(param_00); + self notify(challenge_counter_get_disable_notify(param_00)); + if(isdefined(self.var_1809[param_00])) + { + self.var_1809[param_00] destroy(); + } + + if(isdefined(self.var_180A[param_00])) + { + self.var_180A[param_00] destroy(); + } +} + +//Function Number: 21 +disable_challenge_counter_all() +{ + if(isdefined(self.var_1809)) + { + foreach(var_02, var_01 in self.var_1809) + { + disable_challenge_counter(var_02); + } + + self.var_1809 = []; + self.var_180A = []; + } +} + +//Function Number: 22 +challenge_counter_get_disable_notify(param_00) +{ + param_00 = int(param_00); + return "challenge_counter_disable" + param_00; +} + +//Function Number: 23 +enable_kill_counter() +{ + level.var_1810 = 2; + level endon("special_op_terminated"); + self notify("enabling_kill_counter"); + self endon("enabling_kill_counter"); + thread enable_challenge_counter(level.var_1810,&"SPECIAL_OPS_KILL_COUNT","ui_kill_count"); + thread enable_kill_counter_think(level.var_1810); +} + +//Function Number: 24 +enable_kill_counter_think(param_00) +{ + level endon("special_op_terminated"); + self endon(challenge_counter_get_disable_notify(param_00)); + for(;;) + { + level waittill("specops_player_kill",var_01,var_02); + if(self == var_01) + { + self notify("ui_kill_count",var_01.stats["kills"]); + } + } +} + +//Function Number: 25 +disable_kill_counter() +{ + if(!isdefined(level.var_1810)) + { + return; + } + + disable_challenge_counter(level.var_1810); +} + +//Function Number: 26 +disable_challenge_timer() +{ + level notify("stop_challenge_timer_thread"); +} + +//Function Number: 27 +so_get_difficulty_menu_string(param_00) +{ + param_00 = common_scripts\utility::ter_op(isdefined(param_00),param_00,level.so_enable_wait_for_players); + var_01 = ""; + switch(int(param_00)) + { + case 0: + var_01 = "@MENU_RECRUIT"; + break; + + case 1: + var_01 = "@MENU_REGULAR"; + break; + + case 2: + var_01 = "@MENU_HARDENED"; + break; + + case 3: + var_01 = "@MENU_VETERAN"; + break; + + default: + var_01 = "@MENU_REGULAR"; + break; + } + + return var_01; +} + +//Function Number: 28 +so_wait_for_players_ready() +{ + if(!isdefined(level.var_1815)) + { + return; + } + + if(!maps\_utility::is_coop() || issplitscreen()) + { + return; + } + + level.so_waiting_for_players = 1; + level.congrat_min_wave = 0.85; + level.player thread so_wait_for_player_ready("special_op_p1ready",2); + level.player2 thread so_wait_for_player_ready("special_op_p2ready",3.25); + var_00 = maps\_hud_util::create_client_overlay("black",1); + var_00 maps\_hud_util::fade_over_time(level.congrat_min_wave,1); + while(!common_scripts\utility::flag("special_op_p1ready") || !common_scripts\utility::flag("special_op_p2ready")) + { + wait 0.05; + } + + var_01 = 1; + level.player thread so_wait_for_player_ready_cleanup(var_01); + level.player2 thread so_wait_for_player_ready_cleanup(var_01); + wait var_01; + var_00 destroy(); + level.so_waiting_for_players = undefined; +} + +//Function Number: 29 +so_wait_for_player_ready(param_00,param_01) +{ + self endon("stop_waiting_start"); + self freezecontrols(1); + self disableweapons(); + self.var_1818 = so_create_hud_item(0,0,&"SPECIAL_OPS_PRESS_TO_START",self,1); + self.var_1818.alignx = "center"; + self.var_1818.horzalign = "center"; + self.var_1819 = so_create_hud_item(param_01,0,&"SPECIAL_OPS_PLAYER_IS_NOT_READY",undefined,1); + self.var_1819.alignx = "center"; + self.var_1819.horzalign = "center"; + self.var_1819 settext(self.var_794); + self.var_1819 set_hud_yellow(); + wait 0.05; + self setblurforplayer(6,0); + notifyoncommand(self.unique_id + "_is_ready","+gostand"); + notifyoncommand(self.unique_id + "_is_not_ready","+stance"); + for(;;) + { + self waittill(self.unique_id + "_is_ready"); + common_scripts\utility::flag_set(param_00); + self playsound("so_player_is_ready"); + self.var_1818.label = &"SPECIAL_OPS_PRESS_TO_CANCEL"; + self.var_1819 so_hud_pulse_success(&"SPECIAL_OPS_PLAYER_IS_READY"); + self waittill(self.unique_id + "_is_not_ready"); + common_scripts\utility::flag_clear(param_00); + self playsound("so_player_not_ready"); + self.var_1818.label = &"SPECIAL_OPS_PRESS_TO_START"; + self.var_1819 so_hud_pulse_warning(&"SPECIAL_OPS_PLAYER_IS_NOT_READY"); + } +} + +//Function Number: 30 +so_wait_for_player_ready_cleanup(param_00) +{ + self notify("stop_waiting_start"); + self.var_1818 thread so_remove_hud_item(1); + wait param_00; + self.var_1819 thread so_remove_hud_item(0,1); + self freezecontrols(0); + self enableweapons(); + self setblurforplayer(0,0.5); +} + +//Function Number: 31 +attacker_is_p1(param_00) +{ + if(!isdefined(param_00)) + { + return 0; + } + + return param_00 == level.player; +} + +//Function Number: 32 +attacker_is_p2(param_00) +{ + if(!maps\_utility::is_coop()) + { + return 0; + } + + if(!isdefined(param_00)) + { + return 0; + } + + return param_00 == level.player2; +} + +//Function Number: 33 +enable_escape_warning() +{ + level endon("special_op_terminated"); + level.escape_warning_triggers = getentarray("player_trying_to_escape","script_noteworthy"); + maps\_utility::add_hint_string("player_escape_warning",&"SPECIAL_OPS_EMPTY",::maps\_specialops_code::disable_escape_warning); + for(;;) + { + wait 0.05; + foreach(var_01 in level.escape_warning_triggers) + { + foreach(var_03 in level.players) + { + if(!isdefined(var_03.escape_hint_active)) + { + if(var_03 istouching(var_01)) + { + var_03.escape_hint_active = 1; + var_03 thread maps\_specialops_code::ping_escape_warning(); + var_03 maps\_utility::display_hint_timeout("player_escape_warning"); + } + + continue; + } + + if(!isdefined(var_03.ping_escape_splash)) + { + var_03 thread maps\_specialops_code::ping_escape_warning(); + } + } + } + } +} + +//Function Number: 34 +enable_escape_failure() +{ + level endon("special_op_terminated"); + common_scripts\utility::flag_wait("player_has_escaped"); + level.challenge_end_time = gettime(); + so_force_deadquote("@DEADQUOTE_SO_LEFT_PLAY_AREA"); + maps\_utility::missionfailedwrapper(); +} + +//Function Number: 35 +so_delete_all_by_type(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if(!isdefined(param_05)) + { + param_05 = 0; + } + + var_06 = [param_00,param_01,param_02,param_03,param_04]; + var_06 = common_scripts\utility::array_removeundefined(var_06); + var_07 = getentarray(); + foreach(var_09 in var_07) + { + if(!isdefined(var_09.code_classname)) + { + continue; + } + + var_0A = isdefined(var_09.script_specialops) && var_09.script_specialops == 1; + if(var_0A) + { + continue; + } + + var_0B = isdefined(var_09.targetname) && var_09.targetname == "intelligence_item"; + if(var_0B) + { + continue; + } + + foreach(var_0D in var_06) + { + if(var_09 [[ var_0D ]]()) + { + if(param_05) + { + var_09 notify("delete"); + } + + var_09 delete(); + } + } + } +} + +//Function Number: 36 +type_spawners() +{ + if(!isdefined(self.code_classname)) + { + return 0; + } + + return issubstr(self.code_classname,"actor_"); +} + +//Function Number: 37 +type_vehicle() +{ + if(!isdefined(self.code_classname)) + { + return 0; + } + + if(self.code_classname == "script_vehicle_collmap") + { + return 0; + } + + return issubstr(self.code_classname,"script_vehicle"); +} + +//Function Number: 38 +type_spawn_trigger() +{ + if(!isdefined(self.classname)) + { + return 0; + } + + if(self.classname == "trigger_multiple_spawn") + { + return 1; + } + + if(self.classname == "trigger_multiple_spawn_reinforcement") + { + return 1; + } + + if(self.classname == "trigger_multiple_friendly_respawn") + { + return 1; + } + + if(isdefined(self.targetname) && self.targetname == "flood_spawner") + { + return 1; + } + + if(isdefined(self.targetname) && self.targetname == "friendly_respawn_trigger") + { + return 1; + } + + if(isdefined(self.spawnflags) && self.spawnflags & 32) + { + return 1; + } + + return 0; +} + +//Function Number: 39 +type_trigger() +{ + if(!isdefined(self.code_classname)) + { + return 0; + } + + var_00 = []; + return isdefined(var_7B[self.code_classname]); +} + +//Function Number: 40 +type_flag_trigger() +{ + if(!isdefined(self.classname)) + { + return 0; + } + + var_00 = []; + return isdefined(var_7B[self.classname]); +} + +//Function Number: 41 +type_killspawner_trigger() +{ + if(!type_trigger()) + { + return 0; + } + + if(isdefined(self.script_killspawner)) + { + return 1; + } + + return 0; +} + +//Function Number: 42 +type_goalvolume() +{ + if(!isdefined(self.classname)) + { + return 0; + } + + if(self.classname == "info_volume" && isdefined(self.script_goalvolume)) + { + return 1; + } + + return 0; +} + +//Function Number: 43 +type_infovolume() +{ + if(!isdefined(self.classname)) + { + return 0; + } + + return self.classname == "info_volume"; +} + +//Function Number: 44 +type_turret() +{ + if(!isdefined(self.classname)) + { + return 0; + } + + return self.classname == "misc_turret"; +} + +//Function Number: 45 +type_weapon_placed() +{ + if(!isdefined(self.classname) || !isdefined(self.model)) + { + return 0; + } + + if(strtok(self.classname,"_")[0] == "weapon") + { + return 1; + } + + return 0; +} + +//Function Number: 46 +so_delete_all_spawntriggers() +{ + so_delete_all_by_type(::type_spawn_trigger); +} + +//Function Number: 47 +so_delete_all_triggers() +{ + so_delete_all_by_type(::type_trigger,::type_spawn_trigger,::type_flag_trigger,::type_killspawner_trigger); + animscripts/battlechatter::func_BF5(); +} + +//Function Number: 48 +so_delete_all_vehicles() +{ + so_delete_all_by_type(::type_vehicle,undefined,undefined,undefined,undefined,1); +} + +//Function Number: 49 +so_delete_all_spawners() +{ + so_delete_all_by_type(::type_spawners); +} + +//Function Number: 50 +so_make_specialops_ent(param_00,param_01,param_02) +{ + var_03 = getentarray(param_00,param_01); + so_array_make_specialops(var_03,param_02); +} + +//Function Number: 51 +so_make_bcslocations_specialops_ent() +{ + so_array_make_specialops(level.bcs_locations); +} + +//Function Number: 52 +so_array_make_specialops(param_00,param_01) +{ + if(!isdefined(param_01)) + { + param_01 = 0; + } + + level.var_183B = []; + so_make_specialops_ent_internal(param_00,param_01); + level.var_183B = undefined; +} + +//Function Number: 53 +so_make_specialops_ent_internal(param_00,param_01) +{ + foreach(var_03 in param_00) + { + if(maps\_utility::array_contains(level.var_183B,var_03)) + { + continue; + } + + level.var_183B[level.var_183B.size] = var_03; + var_03.script_specialops = 1; + if(param_01) + { + if(isdefined(var_03.target)) + { + var_04 = getentarray(var_03.target,"targetname"); + so_make_specialops_ent_internal(var_04,param_01); + } + + if(isdefined(var_03.var_183D)) + { + var_04 = var_03 common_scripts\utility::get_linked_ents(); + so_make_specialops_ent_internal(var_04,param_01); + } + } + } +} + +//Function Number: 54 +so_delete_breach_ents() +{ + var_00 = getentarray("breach_solid","targetname"); + foreach(var_02 in var_00) + { + var_02 connectpaths(); + var_02 delete(); + } +} + +//Function Number: 55 +so_force_deadquote(param_00,param_01) +{ + level.so_deadquotes = []; + level.so_deadquotes[0] = param_00; + level.so_deadquotes_chance = 1; + maps\_specialops_code::so_special_failure_hint_reset_dvars(param_01); +} + +//Function Number: 56 +so_force_deadquote_array(param_00,param_01) +{ + level.so_deadquotes = param_00; + level.so_deadquotes_chance = 1; + maps\_specialops_code::so_special_failure_hint_reset_dvars(param_01); +} + +//Function Number: 57 +so_include_deadquote_array(param_00) +{ + if(!isdefined(level.so_deadquotes)) + { + level.so_deadquotes = []; + } + + level.so_deadquotes = maps\_utility::array_merge(level.so_deadquotes,param_00); +} + +//Function Number: 58 +so_create_hud_item(param_00,param_01,param_02,param_03,param_04) +{ + if(isdefined(param_03)) + { + } + + if(!isdefined(param_00)) + { + param_00 = 0; + } + + if(!isdefined(param_01)) + { + param_01 = 0; + } + + param_00 = param_00 + 2; + var_05 = undefined; + if(isdefined(param_03)) + { + var_05 = newclienthudelem(param_03); + } + else + { + var_05 = newhudelem(); + } + + var_05.alignx = "right"; + var_05.aligny = "middle"; + var_05.horzalign = "right"; + var_05.vertalign = "middle"; + var_05.x = param_01; + var_05.y = -100 + 15 * param_00; + var_05.font = "hudsmall"; + var_05.foreground = 1; + var_05.hidewheninmenu = 1; + var_05.hidewhendead = 1; + var_05.sort = 2; + var_05 set_hud_white(); + if(isdefined(param_02)) + { + var_05.label = param_02; + } + + if(!isdefined(param_04) || !param_04) + { + if(isdefined(param_03)) + { + if(!param_03 maps\_specialops_code::so_hud_can_show()) + { + param_03 thread maps\_specialops_code::so_create_hud_item_delay_draw(var_05); + } + else if(!maps\_utility::ent_flag("so_hud_can_toggle")) + { + maps\_utility::ent_flag_set("so_hud_can_toggle"); + } + } + } + + return var_05; +} + +//Function Number: 59 +so_create_hud_item_data(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = so_create_hud_item(param_00,param_01,param_02,param_03,param_04); + var_05.alignx = "left"; + return var_05; +} + +//Function Number: 60 +so_create_hud_item_debug(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = so_create_hud_item(param_00,param_01,param_02,param_03,param_04); + var_05.alignx = "left"; + var_05.horzalign = "left"; + return var_05; +} + +//Function Number: 61 +so_hud_pulse_create(param_00) +{ + if(!maps\_specialops_code::so_hud_pulse_init()) + { + return; + } + + self notify("update_hud_pulse"); + self endon("update_hud_pulse"); + self endon("destroying"); + if(isdefined(param_00)) + { + self.label = param_00; + } + + if(isdefined(self.pulse_time)) + { + level.player playsound(self.pulse_time); + } + + if(isdefined(self.pulse_bounds) && self.pulse_bounds) + { + maps\_specialops_code::so_hud_pulse_loop(); + return; + } + + maps\_specialops_code::so_hud_pulse_single(self.pulse_scale_big,self.pulse_scale_normal,self.var_184D); +} + +//Function Number: 62 +so_hud_pulse_stop(param_00) +{ + if(!maps\_specialops_code::so_hud_pulse_init()) + { + return; + } + + self notify("update_hud_pulse"); + self endon("update_hud_pulse"); + self endon("destroying"); + if(isdefined(param_00)) + { + self.label = param_00; + } + + self.pulse_bounds = 0; + maps\_specialops_code::so_hud_pulse_single(self.fontscale,self.pulse_scale_normal,self.var_184D); +} + +//Function Number: 63 +so_hud_pulse_default(param_00) +{ + set_hud_white(); + self.pulse_bounds = 0; + so_hud_pulse_create(param_00); +} + +//Function Number: 64 +so_hud_pulse_close(param_00) +{ + set_hud_green(); + self.pulse_bounds = 1; + so_hud_pulse_create(param_00); +} + +//Function Number: 65 +so_hud_pulse_success(param_00) +{ + set_hud_green(); + self.pulse_bounds = 0; + so_hud_pulse_create(param_00); +} + +//Function Number: 66 +so_hud_pulse_warning(param_00) +{ + set_hud_yellow(); + self.pulse_bounds = 0; + so_hud_pulse_create(param_00); +} + +//Function Number: 67 +so_hud_pulse_alarm(param_00) +{ + set_hud_red(); + self.pulse_bounds = 1; + so_hud_pulse_create(param_00); +} + +//Function Number: 68 +so_hud_pulse_failure(param_00) +{ + set_hud_red(); + self.pulse_bounds = 0; + so_hud_pulse_create(param_00); +} + +//Function Number: 69 +so_hud_pulse_disabled(param_00) +{ + set_hud_grey(); + self.pulse_bounds = 0; + so_hud_pulse_create(param_00); +} + +//Function Number: 70 +so_hud_pulse_smart(param_00,param_01) +{ + if(!isdefined(self.var_185A)) + { + so_hud_pulse_default(param_01); + return; + } + + foreach(var_04, var_03 in self.var_185A) + { + if(param_00 <= var_03) + { + switch(var_04) + { + case "pulse_disabled": + so_hud_pulse_disabled(param_01); + break; + + case "pulse_failure": + so_hud_pulse_failure(param_01); + break; + + case "pulse_alarm": + so_hud_pulse_alarm(param_01); + break; + + case "pulse_warning": + so_hud_pulse_warning(param_01); + break; + + case "pulse_default": + so_hud_pulse_default(param_01); + break; + + case "pulse_close": + so_hud_pulse_close(param_01); + break; + + case "pulse_success": + so_hud_pulse_success(param_01); + break; + } + } + } + + so_hud_pulse_default(param_01); +} + +//Function Number: 71 +so_hud_ypos() +{ + return -72; +} + +//Function Number: 72 +so_remove_hud_item(param_00,param_01) +{ + if(isdefined(param_00) && param_00) + { + self notify("destroying"); + self destroy(); + return; + } + + thread so_hud_pulse_stop(); + if(isdefined(param_01) && param_01) + { + self setpulsefx(0,0,500); + wait 0.5; + } + else + { + self setpulsefx(0,1500,500); + wait 2; + } + + self notify("destroying"); + self destroy(); +} + +//Function Number: 73 +set_hud_white(param_00) +{ + if(isdefined(param_00)) + { + self.alpha = param_00; + self.glowalpha = param_00; + } + + self.color = (1,1,1); + self.glowcolor = (0.6,0.6,0.6); +} + +//Function Number: 74 +set_hud_blue(param_00) +{ + if(isdefined(param_00)) + { + self.alpha = param_00; + self.glowalpha = param_00; + } + + self.color = (0.8,0.8,1); + self.glowcolor = (0.301961,0.301961,0.6); +} + +//Function Number: 75 +set_hud_green(param_00) +{ + if(isdefined(param_00)) + { + self.alpha = param_00; + self.glowalpha = param_00; + } + + self.color = (0.8,1,0.8); + self.glowcolor = (0.301961,0.6,0.301961); +} + +//Function Number: 76 +set_hud_yellow(param_00) +{ + if(isdefined(param_00)) + { + self.alpha = param_00; + self.glowalpha = param_00; + } + + self.color = (1,1,0.5); + self.glowcolor = (0.7,0.7,0.2); +} + +//Function Number: 77 +set_hud_red(param_00) +{ + if(isdefined(param_00)) + { + self.alpha = param_00; + self.glowalpha = param_00; + } + + self.color = (1,0.4,0.4); + self.glowcolor = (0.7,0.2,0.2); +} + +//Function Number: 78 +set_hud_grey(param_00) +{ + if(isdefined(param_00)) + { + self.alpha = param_00; + self.glowalpha = param_00; + } + + self.color = (0.4,0.4,0.4); + self.glowcolor = (0.2,0.2,0.2); +} + +//Function Number: 79 +info_hud_wait_for_player(param_00) +{ + if(isdefined(self.so_infohud_toggle_state)) + { + return; + } + + level endon("challenge_timer_expired"); + level endon("challenge_timer_passed"); + level endon("special_op_terminated"); + self endon("death"); + if(isdefined(param_00)) + { + level endon(param_00); + } + + self setweaponhudiconoverride("actionslot1","hud_show_timer"); + notifyoncommand("toggle_challenge_timer","+actionslot 1"); + self.so_infohud_toggle_state = info_hud_start_state(); + if(!maps\_specialops_code::so_hud_can_show()) + { + thread info_hud_wait_force_on(); + maps\_utility::ent_flag_wait("so_hud_can_toggle"); + } + + self notify("so_hud_toggle_available"); + for(;;) + { + self waittill("toggle_challenge_timer"); + switch(self.so_infohud_toggle_state) + { + case "on": + self.so_infohud_toggle_state = "off"; + setdvar("so_ophud_" + self.unique_id,"0"); + break; + + case "off": + self.so_infohud_toggle_state = "on"; + setdvar("so_ophud_" + self.unique_id,"1"); + break; + } + + self notify("update_challenge_timer"); + } +} + +//Function Number: 80 +info_hud_wait_force_on() +{ + self endon("so_hud_toggle_available"); + notifyoncommand("force_challenge_timer","+actionslot 1"); + self waittill("force_challenge_timer"); + self.so_hud_show_time = gettime(); + self.so_infohud_toggle_state = "on"; + setdvar("so_ophud_" + self.unique_id,"1"); +} + +//Function Number: 81 +info_hud_start_state() +{ + if(getdvarint("so_ophud_" + self.unique_id) == 1) + { + self.so_hud_show_time = gettime() + 1000; + return "on"; + } + + if(isdefined(level.challenge_time_limit)) + { + return "on"; + } + + if(isdefined(level.challenge_time_force_on) && level.challenge_time_force_on) + { + return "on"; + } + + return "off"; +} + +//Function Number: 82 +info_hud_handle_fade(param_00,param_01) +{ + level endon("new_challenge_timer"); + level endon("challenge_timer_expired"); + level endon("challenge_timer_passed"); + level endon("special_op_terminated"); + self endon("death"); + if(isdefined(param_01)) + { + level endon(param_01); + } + + param_00.so_can_toggle = 1; + maps\_utility::ent_flag_wait("so_hud_can_toggle"); + info_hud_update_alpha(param_00); + for(;;) + { + self waittill("update_challenge_timer"); + param_00 fadeovertime(0.25); + info_hud_update_alpha(param_00); + } +} + +//Function Number: 83 +info_hud_update_alpha(param_00) +{ + switch(self.so_infohud_toggle_state) + { + case "on": + param_00.alpha = 1; + break; + + case "off": + param_00.alpha = 0; + break; + } +} + +//Function Number: 84 +info_hud_decrement_timer(param_00) +{ + if(!isdefined(level.challenge_time_limit)) + { + return; + } + + if(common_scripts\utility::flag("challenge_timer_expired") || common_scripts\utility::flag("challenge_timer_passed")) + { + return; + } + + level.so_challenge_time_left = level.so_challenge_time_left - param_00; + if(level.so_challenge_time_left < 0) + { + level.so_challenge_time_left = 0.01; + } + + var_01 = (0.6,0.2,0.2); + var_02 = (0.4,0.1,0.1); + foreach(var_04 in level.players) + { + var_04.hud_so_timer_time settenthstimer(level.so_challenge_time_left); + } + + thread maps\_specialops_code::challenge_timer_thread(); +} + +//Function Number: 85 +is_dvar_character_switcher(param_00) +{ + var_01 = getdvar(param_00); + return var_01 == "so_char_client" || var_01 == "so_char_host"; +} + +//Function Number: 86 +has_been_played() +{ + var_00 = tablelookup("sp/specOpsTable.csv",1,level.script,9); + if(var_00 == "") + { + return 0; + } + + foreach(var_02 in level.players) + { + var_03 = var_02 getlocalplayerprofiledata(var_00); + if(!isdefined(var_03)) + { + continue; + } + + if(var_03 != 0) + { + return 1; + } + } + + return 0; +} + +//Function Number: 87 +is_best_wave(param_00) +{ + return 0; +} + +//Function Number: 88 +is_best_time(param_00,param_01,param_02) +{ + if(!isdefined(param_00)) + { + if(isdefined(level.challenge_start_time)) + { + param_00 = level.challenge_start_time; + } + else + { + param_00 = 300; + } + } + + if(!isdefined(param_01)) + { + param_01 = gettime(); + } + + if(!isdefined(param_02)) + { + param_02 = 0; + } + + var_03 = param_01 - param_00; + var_03 = int(min(var_03,86400000)); + var_04 = tablelookup("sp/specOpsTable.csv",1,level.script,9); + if(var_04 == "") + { + return 0; + } + + foreach(var_06 in level.players) + { + var_07 = var_06 getlocalplayerprofiledata(var_04); + if(!isdefined(var_07)) + { + continue; + } + + var_08 = var_07 == 0; + if(var_08) + { + continue; + } + + var_07 = var_07 - var_07 * param_02; + if(var_03 < var_07) + { + return 1; + } + } + + return 0; +} + +//Function Number: 89 +is_poor_time(param_00,param_01,param_02) +{ + if(!isdefined(param_00)) + { + if(isdefined(level.challenge_start_time)) + { + param_00 = level.challenge_start_time; + } + else + { + param_00 = 300; + } + } + + if(!isdefined(param_01)) + { + param_01 = gettime(); + } + + if(!isdefined(param_02)) + { + param_02 = 0; + } + + var_03 = param_01 - param_00; + var_04 = level.challenge_time_limit * 1000; + var_04 = var_04 - var_04 * param_02; + return var_03 > var_04; +} + +//Function Number: 90 +so_dialog_ready_up() +{ + if(isdefined(level.civilian_warning_time["ready_up"])) + { + [[ level.civilian_warning_time["ready_up"] ]](); + return; + } + + maps\_specialops_code::so_dialog_play("so_tf_1_plyr_prep",0,1); +} + +//Function Number: 91 +so_dialog_mission_success(param_00) +{ + if(!maps\_utility::is_survival() && is_best_time(level.challenge_start_time,level.challenge_end_time)) + { + if(isdefined(level.civilian_warning_time["success_best"])) + { + thread [[ level.civilian_warning_time["success_best"] ]](); + return; + } + + thread maps\_specialops_code::so_dialog_play("so_tf_1_success_best",0.5,1); + return; + } + + if(!isdefined(param_00)) + { + param_00 = 0; + if(level.gameskill >= 3) + { + if(has_been_played()) + { + param_00 = common_scripts\utility::cointoss(); + } + } + } + + if(isdefined(level.civilian_warning_time["success_generic"])) + { + [[ level.civilian_warning_time["success_generic"] ]](param_00); + return; + } + + if(param_00) + { + maps\_specialops_code::so_dialog_play("so_tf_1_success_jerk",0.5,1); + return; + } + + maps\_specialops_code::so_dialog_play("so_tf_1_success_generic",0.5,1); +} + +//Function Number: 92 +so_dialog_mission_failed(param_00) +{ + if(isdefined(level.so_dialog_func_override) && level.so_dialog_func_override) + { + return; + } + + level.so_dialog_func_override = 1; + maps\_specialops_code::so_dialog_play(param_00,0.5,1); +} + +//Function Number: 93 +so_dialog_mission_failed_generic() +{ + if(isdefined(level.civilian_warning_time["failed_generic"])) + { + [[ level.civilian_warning_time["failed_generic"] ]](); + return; + } + + if(level.gameskill <= 2 || common_scripts\utility::cointoss()) + { + so_dialog_mission_failed("so_tf_1_fail_generic"); + return; + } + + so_dialog_mission_failed("so_tf_1_fail_generic_jerk"); +} + +//Function Number: 94 +so_dialog_mission_failed_time() +{ + if(isdefined(level.civilian_warning_time["failed_time"])) + { + [[ level.civilian_warning_time["failed_time"] ]](); + return; + } + + so_dialog_mission_failed("so_tf_1_fail_time"); +} + +//Function Number: 95 +so_dialog_mission_failed_bleedout() +{ + if(isdefined(level.civilian_warning_time["failed_bleedout"])) + { + [[ level.civilian_warning_time["failed_bleedout"] ]](); + return; + } + + so_dialog_mission_failed("so_tf_1_fail_bleedout"); +} + +//Function Number: 96 +so_dialog_time_low_normal() +{ + if(isdefined(level.civilian_warning_time["time_low_normal"])) + { + [[ level.civilian_warning_time["time_low_normal"] ]](); + return; + } + + maps\_specialops_code::so_dialog_play("so_tf_1_time_generic"); +} + +//Function Number: 97 +so_dialog_time_low_hurry() +{ + if(isdefined(level.civilian_warning_time["time_low_hurry"])) + { + [[ level.civilian_warning_time["time_low_hurry"] ]](); + return; + } + + maps\_specialops_code::so_dialog_play("so_tf_1_time_hurry"); +} + +//Function Number: 98 +so_dialog_killing_civilians() +{ + if(!isdefined(level.so_progress_goal_status)) + { + level.so_progress_goal_status = gettime(); + if(!isdefined(level.var_187E)) + { + level.var_187E = 5000; + } + } + else if(gettime() - level.so_progress_goal_status < level.var_187E) + { + return; + } + + var_00 = 0.5; + level.so_progress_goal_status = gettime() + var_00 * 1000; + if(isdefined(level.civilian_warning_time["killing_civilians"])) + { + [[ level.civilian_warning_time["killing_civilians"] ]](); + return; + } + + maps\_specialops_code::so_dialog_play("so_tf_1_civ_kill_warning",0.5); +} + +//Function Number: 99 +so_dialog_progress_update(param_00,param_01) +{ + if(!isdefined(param_00)) + { + return; + } + + if(!isdefined(param_01)) + { + return; + } + + if(!isdefined(level.var_1880)) + { + level.var_1880 = "none"; + } + + var_02 = undefined; + switch(level.var_1880) + { + case "none": + var_02 = 0.75; + break; + + case "3quarter": + var_02 = 0.5; + break; + + case "half": + var_02 = 0.25; + break; + + default: + break; + } + + var_03 = param_01 * var_02; + if(param_00 > var_03) + { + return; + } + + var_04 = undefined; + switch(level.var_1880) + { + case "none": + level.var_1880 = "3quarter"; + var_04 = "so_tf_1_progress_3quarter"; + break; + + case "3quarter": + level.var_1880 = "half"; + var_04 = "so_tf_1_progress_half"; + break; + + case "half": + level.var_1880 = "quarter"; + var_04 = "so_tf_1_progress_quarter"; + break; + } + + if(isdefined(level.civilian_warning_time["progress_goal_status"])) + { + [[ level.civilian_warning_time["progress_goal_status"] ]](); + return; + } + + maps\_specialops_code::so_dialog_play(var_04,0.5); +} + +//Function Number: 100 +so_dialog_progress_update_time_quality(param_00) +{ + if(isdefined(level.challenge_time_limit)) + { + if(is_poor_time(level.challenge_start_time,gettime(),param_00)) + { + if(isdefined(level.civilian_warning_time["time_status_late"])) + { + [[ level.civilian_warning_time["time_status_late"] ]](); + return; + } + + maps\_specialops_code::so_dialog_play("so_tf_1_time_status_late",0.2); + return; + } + } + + if(is_best_time(level.challenge_start_time,gettime(),param_00)) + { + if(isdefined(level.civilian_warning_time["time_status_good"])) + { + [[ level.civilian_warning_time["time_status_good"] ]](); + return; + } + + maps\_specialops_code::so_dialog_play("so_tf_1_time_status_good",0.2); + } +} + +//Function Number: 101 +so_dialog_counter_update(param_00,param_01,param_02) +{ + if(!isdefined(level.var_1883)) + { + level.var_1883 = 0; + } + + if(gettime() < level.var_1883) + { + return; + } + + if(!isdefined(param_00)) + { + return; + } + + if(!isdefined(param_02)) + { + param_02 = 1; + } + + var_03 = int(param_00 / param_02); + if(var_03 > 5) + { + if(!isdefined(level.var_1884) || !level.var_1884) + { + thread so_dialog_progress_update(param_00,param_01); + level.var_1883 = gettime() + 800; + } + + return; + } + + if(isdefined(level.civilian_warning_time["progress"])) + { + thread [[ level.civilian_warning_time["progress"] ]](var_03); + } + else + { + switch(var_03) + { + case 5: + thread maps\_specialops_code::so_dialog_play("so_tf_1_progress_5more",0.5); + break; + + case 4: + thread maps\_specialops_code::so_dialog_play("so_tf_1_progress_4more",0.5); + break; + + case 3: + thread maps\_specialops_code::so_dialog_play("so_tf_1_progress_3more",0.5); + break; + + case 2: + thread maps\_specialops_code::so_dialog_play("so_tf_1_progress_2more",0.5); + break; + + case 1: + thread maps\_specialops_code::so_dialog_play("so_tf_1_progress_1more",0.5); + break; + } + } + + level.var_1883 = gettime() + 800; +} + +//Function Number: 102 +so_crush_player(param_00,param_01) +{ + if(!isdefined(param_00.coop_death_reason)) + { + param_00.coop_death_reason = []; + } + + if(!isdefined(param_01)) + { + param_01 = "MOD_EXPLOSIVE"; + } + + param_00.coop_death_reason["attacker"] = self; + param_00.coop_death_reason["cause"] = param_01; + param_00.coop_death_reason["weapon_name"] = "none"; + param_00 maps\_utility::kill_wrapper(); +} + +//Function Number: 103 +get_previously_completed_difficulty() +{ + var_00 = level.specopssettings maps\_endmission::getlevelindex(level.script); + var_01 = int(self getlocalplayerprofiledata("missionSOHighestDifficulty")[var_00]); + var_01 = int(max(0,var_01)); + return var_01; +} + +//Function Number: 104 +so_hud_stars_precache() +{ + precacheshader("difficulty_star"); +} + +//Function Number: 105 +so_hud_stars_init(param_00,param_01,param_02,param_03,param_04,param_05) +{ + level.so_hud_star_count = []; + level.so_hud_star_count["regular"] = param_02; + level.so_hud_star_count["hardened"] = param_03; + level.so_hud_star_count["veteran"] = param_04; + param_05 = common_scripts\utility::ter_op(isdefined(param_05),param_05,4); + self.var_188E = []; + thread so_hud_stars_single_think(param_00,param_01,0,level.so_hud_star_count["regular"],"regular",param_05); + thread so_hud_stars_single_think(param_00,param_01,1,level.so_hud_star_count["hardened"],"hardened",param_05); + thread so_hud_stars_single_think(param_00,param_01,2,level.so_hud_star_count["veteran"],"veteran",param_05); +} + +//Function Number: 106 +so_hud_stars_single_think(param_00,param_01,param_02,param_03,param_04,param_05) +{ + level endon("special_op_terminated"); + level endon(param_01); + if(!isdefined(self.var_1890)) + { + self.var_1890 = 0; + } + + self.var_1890++; + var_06 = 25; + var_07 = so_hud_ypos(); + var_08 = so_create_hud_item(param_05,var_07,undefined,self); + var_08.x = var_08.x - param_02 * var_06 - 30; + var_08.y = var_08.y + 5; + var_08 setshader("difficulty_star",25,25); + common_scripts\utility::flag_wait(param_00); + thread so_hud_stars_single_force_alpha_end(var_08,param_01); + if(param_03 < 0) + { + return; + } + + thread so_hud_stars_sound_and_flash(var_08,param_03,param_01); + level common_scripts\utility::waittill_any_timeout(param_03,"star_hud_remove_" + param_04); + waittillframeend; + if(common_scripts\utility::flag(param_01)) + { + return; + } + + self.var_1890--; + var_08 destroy(); +} + +//Function Number: 107 +so_hud_stars_remove(param_00) +{ + foreach(var_02 in level.players) + { + if(!isdefined(param_00)) + { + if(!isdefined(var_02.var_188E["veteran"])) + { + param_00 = "veteran"; + } + else if(!isdefined(var_02.var_188E["hardened"])) + { + param_00 = "hardened"; + } + else if(!isdefined(var_02.var_188E["regular"])) + { + param_00 = "regular"; + } + } + + if(isdefined(var_02.var_188E[param_00])) + { + return; + } + + if(param_00 == "hardened" && !isdefined(var_02.var_188E["veteran"])) + { + return; + } + else if(param_00 == "regular" && !isdefined(var_02.var_188E["veteran"]) || !isdefined(var_02.var_188E["hardened"])) + { + return; + } + + var_02.var_188E[param_00] = 1; + level notify("star_hud_remove_" + param_00); + } +} + +//Function Number: 108 +so_hud_stars_validate_difficulty(param_00) +{ + switch(param_00) + { + case "regular": + case "veteran": + case "hardened": + break; + + default: + break; + } +} + +//Function Number: 109 +so_hud_stars_sound_and_flash(param_00,param_01,param_02) +{ + param_00 endon("death"); + level endon(param_02); + level endon("special_op_terminated"); + var_03 = 5; + var_04 = param_01 - var_03; + wait var_04; + for(var_05 = 0;var_05 < var_03;var_05++) + { + self playlocalsound("star_tick"); + param_00.alpha = 1; + wait 0.5; + param_00.alpha = 0.3; + wait 0.5; + } + + self playlocalsound("star_lost"); +} + +//Function Number: 110 +so_hud_stars_single_force_alpha_end(param_00,param_01) +{ + param_00 endon("death"); + common_scripts\utility::flag_wait(param_01); + waittillframeend; + param_00.alpha = 1; +} + +//Function Number: 111 +unlock_hint() +{ + wait 0.05; + foreach(var_01 in level.players) + { + var_01 thread unlock_hint_think(); + } +} + +//Function Number: 112 +unlock_hint_think() +{ + surhud_disable("unlock"); + for(var_00 = 0;var_00 < 3;var_00++) + { + unlock_hint_reset(var_00); + } + + for(;;) + { + self waittill("update_rank"); + waittillframeend; + if(!isdefined(self)) + { + return; + } + + var_01 = maps\_rank::getrank(); + var_02 = level.unlock_array[var_01]; + if(isdefined(var_02)) + { + for(var_00 = 0;var_00 < 3;var_00++) + { + var_03 = var_02[var_00]; + if(isdefined(var_03)) + { + register_recent_unlock(var_03); + _setplayerdata_array("surHUD_unlock_hint_" + var_00,"name",var_03.name); + _setplayerdata_array("surHUD_unlock_hint_" + var_00,"icon",var_03.icon); + _setplayerdata_array("surHUD_unlock_hint_" + var_00,"mode",var_03.mode); + continue; + } + + unlock_hint_reset(var_00); + } + + surhud_animate("unlock"); + } + } +} + +//Function Number: 113 +register_recent_unlock(param_00) +{ + if(!param_00.var_1DD) + { + var_01 = tablelookup("sp/survival_armories.csv",1,param_00.ref,2); + var_02 = int(1 + var_01 == "weapon"); + var_03 = tablelookup("sp/survival_armories.csv",1,param_00.ref,6); + var_04 = param_00.var_189B; + pass_recent_item_unlock("recent_item_2","recent_item_3"); + pass_recent_item_unlock("recent_item_1","recent_item_2"); + _setplayerdata_array("recent_item_1","name",param_00.name); + _setplayerdata_array("recent_item_1","icon",var_03); + _setplayerdata_array("recent_item_1","desc",var_04); + _setplayerdata_array("recent_item_1","icon_width_ratio",var_02); + return; + } + + var_05 = self getplayerdata("recent_feature_1","name"); + _setplayerdata_array("recent_feature_2","name",var_05); + _setplayerdata_array("recent_feature_1","name",param_00.name); +} + +//Function Number: 114 +pass_recent_item_unlock(param_00,param_01) +{ + var_02 = self getplayerdata(param_00,"name"); + var_03 = self getplayerdata(param_00,"desc"); + var_04 = self getplayerdata(param_00,"icon"); + var_05 = self getplayerdata(param_00,"icon_width_ratio"); + _setplayerdata_array(param_01,"name",var_02); + _setplayerdata_array(param_01,"desc",var_03); + _setplayerdata_array(param_01,"icon",var_04); + _setplayerdata_array(param_01,"icon_width_ratio",var_05); +} + +//Function Number: 115 +unlock_hint_reset(param_00) +{ + _setplayerdata_array("surHUD_unlock_hint_" + param_00,"name",""); + _setplayerdata_array("surHUD_unlock_hint_" + param_00,"icon",""); + _setplayerdata_array("surHUD_unlock_hint_" + param_00,"mode",""); +} + +//Function Number: 116 +surhud_animate(param_00) +{ + level endon("special_op_terminated"); + self endon("stop_animate_" + param_00); + thread surhud_animate_endon_clear("stop_animate_" + param_00); + if(!isdefined(self.surhud_busy)) + { + self.surhud_busy = 0; + } + + while(self.surhud_busy) + { + wait 0.05; + } + + self.surhud_busy = 1; + if(!surhud_is_enabled(param_00)) + { + surhud_enable(param_00); + } + + _setplayerdata_single("surHUD_set_animate",param_00); + wait 0.05; + self openmenu("surHUD_display"); + wait 0.05; + self.surhud_busy = 0; + self notify("surHUD_free"); +} + +//Function Number: 117 +surhud_animate_endon_clear(param_00) +{ + self endon("surHUD_free"); + self waittill(param_00); + self.surhud_busy = 0; +} + +//Function Number: 118 +surhud_challenge_label(param_00,param_01) +{ + if(isdefined(self)) + { + _setplayerdata_array("surHUD_challenge_label","slot_" + param_00,param_01); + } +} + +//Function Number: 119 +surhud_challenge_progress(param_00,param_01) +{ + if(isdefined(self)) + { + _setplayerdata_array("surHUD_challenge_progress","slot_" + param_00,param_01); + } +} + +//Function Number: 120 +surhud_challenge_reward(param_00,param_01) +{ + if(isdefined(self)) + { + _setplayerdata_array("surHUD_challenge_reward","slot_" + param_00,param_01); + } +} + +//Function Number: 121 +surhud_is_enabled(param_00) +{ + if(isdefined(self) && self getplayerdata("surHUD",param_00)) + { + return 1; + } + + return 0; +} + +//Function Number: 122 +surhud_enable(param_00) +{ + if(isdefined(self)) + { + _setplayerdata_array("surHUD",param_00,1); + } +} + +//Function Number: 123 +surhud_disable(param_00) +{ + if(isdefined(self)) + { + _setplayerdata_array("surHUD",param_00,0); + } +} + +//Function Number: 124 +_setplayerdata_single(param_00,param_01) +{ + self setplayerdata(param_00,param_01); +} + +//Function Number: 125 +_setplayerdata_array(param_00,param_01,param_02) +{ + self setplayerdata(param_00,param_01,param_02); +} + +//Function Number: 126 +so_achievement_init() +{ + wait 0.05; + foreach(var_01 in level.players) + { + var_01 thread so_achievement_reset(); + } +} + +//Function Number: 127 +so_achievement_reset() +{ + if(!isdefined(self.var_1E4)) + { + self.var_1E4 = []; + } + + self.var_1E4["ARMS_DEALER"] = 0; + self.var_1E4["DANGER_ZONE"] = 0; + self.var_1E4["DEFENSE_SPENDING"] = 0; + self.var_1E4["SURVIVOR"] = 0; + self.var_1E4["UNSTOPPABLE"] = 0; +} + +//Function Number: 128 +so_achievement_update(param_00,param_01) +{ + if(maps\_utility::is_survival()) + { + switch(param_00) + { + case "DEFENSE_SPENDING": + case "DANGER_ZONE": + case "ARMS_DEALER": + thread so_achievement_item_collection(param_00,param_01); + break; + + case "SURVIVOR": + thread so_achievement_wave_count(param_00,9); + break; + + case "UNSTOPPABLE": + thread so_achievement_wave_count(param_00,14); + break; + + case "GET_RICH_OR_DIE_TRYING": + case "I_LIVE": + thread maps\_utility::player_giveachievement_wrapper(param_00); + break; + } + + return; + } + + switch(param_00) + { + case "BRAG_RAGS": + thread maps\_utility::player_giveachievement_wrapper(param_00); + break; + + case "TACTICIAN": + thread so_achievement_star_count(param_00,1); + break; + + case "OVERACHIEVER": + thread so_achievement_star_count(param_00,3); + break; + } +} + +//Function Number: 129 +so_achievement_item_collection(param_00,param_01) +{ + if(self.var_1E4[param_00]) + { + return; + } + + var_02 = level.armory_all_items[param_01].type; + if(self getplayerdata(var_02 + "_purchased",param_01) == 0) + { + self setplayerdata(var_02 + "_purchased",param_01,1); + } + else + { + return; + } + + var_03 = 0; + if(var_02 == "weapon" || var_02 == "weaponupgrade") + { + var_03 = is_purchase_collection_complete("weapon","weapon_purchased") && is_purchase_collection_complete("weaponupgrade","weaponupgrade_purchased"); + } + else + { + var_03 = is_purchase_collection_complete(var_02,var_02 + "_purchased"); + } + + if(var_03) + { + maps\_utility::player_giveachievement_wrapper(param_00); + self.var_1E4[param_00] = 1; + } +} + +//Function Number: 130 +is_purchase_collection_complete(param_00,param_01) +{ + foreach(var_03 in level.armory[param_00]) + { + if(self getplayerdata(param_01,var_03.ref) == 0) + { + return 0; + } + } + + return 1; +} + +//Function Number: 131 +so_achievement_wave_count(param_00,param_01) +{ + if(self.var_1E4[param_00]) + { + return; + } + + for(var_02 = 0;var_02 < 16;var_02++) + { + var_03 = level.specopssettings.levels[var_02].name; + var_04 = tablelookup("sp/specOpsTable.csv",1,var_03,9); + var_05 = int(self getlocalplayerprofiledata(var_04) / 1000); + if(var_03 == level.script) + { + var_05 = level.current_wave; + } + + if(var_05 < param_01) + { + return; + } + } + + maps\_utility::player_giveachievement_wrapper(param_00); + self.var_1E4[param_00] = 1; + if(param_00 == "UNSTOPPABLE") + { + self setplayerdata("challengeState","ch_unstoppable",2); + } +} + +//Function Number: 132 +so_achievement_star_count(param_00,param_01) +{ + for(var_02 = 16;var_02 < 32;var_02++) + { + var_03 = level.specopssettings.levels[var_02].name; + var_04 = int(self getlocalplayerprofiledata("missionSOHighestDifficulty")[var_02]); + var_04 = int(max(0,var_04)) - 1; + if(var_04 < param_01) + { + return; + } + } + + maps\_utility::player_giveachievement_wrapper(param_00); + if(param_00 == "OVERACHIEVER") + { + self setplayerdata("challengeState","ch_overachiever",2); + } +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_specialops_battlechatter.gsc b/MW3/PC/SP/maps/_specialops_battlechatter.gsc new file mode 100644 index 0000000..aefea02 --- /dev/null +++ b/MW3/PC/SP/maps/_specialops_battlechatter.gsc @@ -0,0 +1,627 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_specialops_battlechatter.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 32 + * Decompile Time: 518 ms + * Timestamp: 10/27/2023 2:21:40 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + anim.so = spawnstruct(); + level.so.eventtypes = []; + level.so.eventtypes["check_fire"] = "threat_friendly_fire"; + level.so.eventtypes["reload"] = "inform_reload_generic"; + level.so.eventtypes["frag_out"] = "inform_attack_grenade"; + level.so.eventtypes["flash_out"] = "inform_attack_flashbang"; + level.so.eventtypes["smoke_out"] = "inform_attack_smoke"; + level.so.eventtypes["c4_plant"] = "inform_attack_c4"; + level.so.eventtypes["claymore_plant"] = "inform_plant_claymore"; + level.so.eventtypes["downed"] = "inform_suppressed"; + level.so.eventtypes["bleedout"] = "inform_bleedout"; + level.so.eventtypes["reviving"] = "inform_reviving"; + level.so.eventtypes["revived"] = "inform_revived"; + level.so.eventtypes["sentry_out"] = "inform_place_sentry"; + level.so.eventtypes["area_secure"] = "inform_area_secure"; + level.so.eventtypes["kill_generic"] = "inform_kill_generic"; + level.so.eventtypes["kill_infantry"] = "inform_kill_infantry"; + level.so.eventtypes["affirmative"] = "inform_roger"; + level.so.eventtypes["negative"] = "inform_negative"; + level.so.eventtypes["on_comms"] = "inform_comms"; + level.so.eventtypes["mark_dropzone"] = "inform_markdz"; + level.so.eventtypes["glowstick_out"] = "inform_use_glowstick"; + level.so.eventtypeminwait = []; + level.so.eventtypeminwait["check_fire"] = 4; + level.so.eventtypeminwait["reload"] = 8; + level.so.eventtypeminwait["frag_out"] = 3; + level.so.eventtypeminwait["flash_out"] = 3; + level.so.eventtypeminwait["smoke_out"] = 3; + level.so.eventtypeminwait["c4_plant"] = 2; + level.so.eventtypeminwait["claymore_plant"] = 2; + level.so.eventtypeminwait["downed"] = 0.5; + level.so.eventtypeminwait["bleedout"] = 0.5; + level.so.eventtypeminwait["reviving"] = 2; + level.so.eventtypeminwait["revived"] = 2; + level.so.eventtypeminwait["sentry_out"] = 3; + level.so.eventtypeminwait["kill_generic"] = 2; + level.so.eventtypeminwait["kill_infantry"] = 2; + level.so.eventtypeminwait["area_secure"] = 0.5; + level.so.eventtypeminwait["affirmative"] = 2; + level.so.eventtypeminwait["negative"] = 2; + level.so.eventtypeminwait["on_comms"] = 0.5; + level.so.eventtypeminwait["mark_dropzone"] = 0.5; + level.so.eventtypeminwait["glowstick_out"] = 3; + level.so.skipdistancecheck = []; + level.so.skipdistancecheck[level.so.skipdistancecheck.size] = "affirmative"; + level.so.skipdistancecheck[level.so.skipdistancecheck.size] = "negative"; + level.so.skipdistancecheck[level.so.skipdistancecheck.size] = "area_secure"; + level.so.skipdistancecheck[level.so.skipdistancecheck.size] = "on_comms"; + level.so.skipdistancecheck[level.so.skipdistancecheck.size] = "mark_dropzone"; + level.so.skipdistancecheck[level.so.skipdistancecheck.size] = "downed"; + level.so.skipdistancecheck[level.so.skipdistancecheck.size] = "bleedout"; + level.so.skipdistancecheck[level.so.skipdistancecheck.size] = "check_fire"; + level.so.noreloadcalloutweapons = []; + level.so.noreloadcalloutweapons[level.so.noreloadcalloutweapons.size] = "m79"; + level.so.noreloadcalloutweapons[level.so.noreloadcalloutweapons.size] = "ranger"; + level.so.noreloadcalloutweapons[level.so.noreloadcalloutweapons.size] = "claymore"; + level.so.noreloadcalloutweapons[level.so.noreloadcalloutweapons.size] = "rpg"; + level.so.noreloadcalloutweapons[level.so.noreloadcalloutweapons.size] = "rpg_player"; + level.so.bcmaxdistsqd = 640000; + level.so.bcprintfailprefix = "^3***** BCS FAILURE: "; + common_scripts\utility::array_thread(level.players,::enable_chatter_on_player); + enable_chatter(); +} + +//Function Number: 2 +enable_chatter() +{ + level.so_player_chatter_enabled = 1; +} + +//Function Number: 3 +disable_chatter() +{ + level.so_player_chatter_enabled = 0; +} + +//Function Number: 4 +enable_chatter_on_player() +{ + self.so_isspeaking = 0; + self.bc_eventtypelastusedtime = []; + thread revive_tracking(); + thread claymore_tracking(); + thread reload_tracking(); + thread grenade_tracking(); + thread friendlyfire_tracking(); + thread friendlyfire_whizby_tracking(); + thread sentry_tracking(); + thread kill_generic_tracking(); + thread kill_infantry_tracking(); + thread area_secure_tracking(); + thread affirmative_tracking(); + thread negative_tracking(); + thread on_comms_tracking(); + thread mark_dropzone_tracking(); + thread glowstick_tracking(); +} + +//Function Number: 5 +revive_tracking() +{ + level endon("special_op_terminated"); + self endon("death"); + for(;;) + { + var_00 = common_scripts\utility::waittill_any_return("so_downed","so_bleedingout","so_reviving","so_revived"); + if(var_00 == "so_downed") + { + play_so_chatter("downed"); + continue; + } + + if(var_00 == "so_bleedingout") + { + play_so_chatter("bleedout"); + continue; + } + + if(var_00 == "so_reviving") + { + play_so_chatter("reviving"); + continue; + } + + if(var_00 == "so_revived") + { + play_so_chatter("revived"); + } + } +} + +//Function Number: 6 +claymore_tracking() +{ + level endon("special_op_terminated"); + self endon("death"); + for(;;) + { + self waittill("begin_firing"); + var_00 = self getcurrentweapon(); + if(var_00 == "claymore") + { + play_so_chatter("claymore_plant"); + } + } +} + +//Function Number: 7 +sentry_tracking() +{ + level endon("special_op_terminated"); + self endon("death"); + for(;;) + { + self waittill("sentry_placement_finished"); + play_so_chatter("sentry_out"); + } +} + +//Function Number: 8 +kill_generic_tracking() +{ + level endon("special_op_terminated"); + self endon("death"); + for(;;) + { + self waittill("so_bcs_kill_generic"); + play_so_chatter("kill_generic"); + } +} + +//Function Number: 9 +kill_infantry_tracking() +{ + level endon("special_op_terminated"); + self endon("death"); + for(;;) + { + self waittill("so_bcs_kill_infantry"); + play_so_chatter("kill_infantry"); + } +} + +//Function Number: 10 +area_secure_tracking() +{ + level endon("special_op_terminated"); + self endon("death"); + for(;;) + { + self waittill("so_bcs_area_secure"); + play_so_chatter("area_secure"); + } +} + +//Function Number: 11 +affirmative_tracking() +{ + level endon("special_op_terminated"); + self endon("death"); + for(;;) + { + self waittill("so_bcs_affirmative"); + play_so_chatter("area_secure"); + } +} + +//Function Number: 12 +negative_tracking() +{ + level endon("special_op_terminated"); + self endon("death"); + for(;;) + { + self waittill("so_bcs_negative"); + play_so_chatter("negative"); + } +} + +//Function Number: 13 +on_comms_tracking() +{ + level endon("special_op_terminated"); + self endon("death"); + for(;;) + { + self waittill("so_bcs_on_comms"); + play_so_chatter("on_comms"); + } +} + +//Function Number: 14 +mark_dropzone_tracking() +{ + level endon("special_op_terminated"); + self endon("death"); + for(;;) + { + self waittill("so_bcs_mark_dropzone"); + play_so_chatter("mark_dropzone"); + } +} + +//Function Number: 15 +glowstick_tracking() +{ +} + +//Function Number: 16 +reload_tracking() +{ + level endon("special_op_terminated"); + self endon("death"); + for(;;) + { + self waittill("reload_start"); + var_00 = self getcurrentweapon(); + if(weapon_no_reload_callout(var_00)) + { + continue; + } + + if(is_downed()) + { + continue; + } + + play_so_chatter("reload"); + } +} + +//Function Number: 17 +weapon_no_reload_callout(param_00) +{ + foreach(var_02 in level.so.noreloadcalloutweapons) + { + if(param_00 == var_02) + { + return 1; + } + } + + return 0; +} + +//Function Number: 18 +grenade_tracking() +{ + level endon("special_op_terminated"); + self endon("death"); + for(;;) + { + self waittill("grenade_fire",var_00,var_01); + var_02 = undefined; + if(var_01 == "fraggrenade") + { + var_02 = "frag_out"; + } + else if(var_01 == "semtex_grenade") + { + var_02 = "frag_out"; + } + else if(var_01 == "flash_grenade") + { + var_02 = "flash_out"; + } + else if(var_01 == "smoke_grenade_american") + { + var_02 = "smoke_out"; + } + else if(var_01 == "c4") + { + var_02 = "c4_plant"; + } + + if(isdefined(var_02)) + { + play_so_chatter(var_02); + } + } +} + +//Function Number: 19 +friendlyfire_tracking() +{ + level endon("special_op_terminated"); + self endon("death"); + for(;;) + { + self waittill("damage",var_00,var_01,var_02,var_03,var_04); + if(!friendlyfire_is_valid(var_00,var_01,var_04)) + { + continue; + } + + play_so_chatter("check_fire"); + } +} + +//Function Number: 20 +friendlyfire_is_valid(param_00,param_01,param_02) +{ + if(param_00 <= 0) + { + return 0; + } + + if(!isplayer(param_01)) + { + return 0; + } + + if(param_01 == self) + { + return 0; + } + + if(param_02 == "MOD_MELEE") + { + return 0; + } + + if(isdefined(level.friendlyfire_warnings) && !level.friendlyfire_warnings) + { + return 0; + } + + return 1; +} + +//Function Number: 21 +friendlyfire_whizby_tracking() +{ + level endon("special_op_terminated"); + self endon("death"); + self addaieventlistener("bulletwhizby"); + for(;;) + { + self waittill("ai_event",var_00,var_01,var_02); + if(var_00 == "bulletwhizby") + { + if(!friendlyfire_whizby_is_valid(var_01,var_02)) + { + continue; + } + + play_so_chatter("check_fire"); + } + } +} + +//Function Number: 22 +friendlyfire_whizby_is_valid(param_00,param_01) +{ + if(!isplayer(param_00)) + { + return 0; + } + + if(param_00 == self) + { + return 0; + } + + if(is_downed()) + { + return 0; + } + + if(abs(param_01[2] - self.origin[2] > 128)) + { + return 0; + } + + var_02 = distance2d(self.origin,param_01); + if(!animscripts/battlechatter_ai::func_B35(param_00,var_02)) + { + return 0; + } + + if(isdefined(level.friendlyfire_warnings) && !level.friendlyfire_warnings) + { + return 0; + } + + return 1; +} + +//Function Number: 23 +play_revive_nag() +{ + var_00 = get_nag_event_type(); + play_so_chatter(var_00); +} + +//Function Number: 24 +get_nag_event_type() +{ + var_00 = "downed"; + var_01 = self.laststand_info.bleedout_time; + var_02 = self.laststand_info.bleedout_time_default; + if(var_01 < var_02 * level.laststand_stage2_multiplier) + { + var_00 = "bleedout"; + } + + return var_00; +} + +//Function Number: 25 +can_say_current_nag_event_type() +{ + var_00 = get_nag_event_type(); + return can_say_event_type(var_00); +} + +//Function Number: 26 +play_so_chatter(param_00) +{ + level endon("special_op_terminated"); + self endon("death"); + if(!can_say_event_type(param_00)) + { + return; + } + + if(!close_enough_to_other_player(param_00)) + { + return; + } + + var_01 = get_player_team_prefix(self) + level.so.eventtypes[param_00]; + var_01 = check_overrides(param_00,var_01); + if(!isdefined(var_01)) + { + return; + } + + if(!soundexists(var_01)) + { + return; + } + + self.so_isspeaking = 1; + self playsound(var_01,"bc_done",1); + self waittill("bc_done"); + self.so_isspeaking = 0; + update_event_type(param_00); +} + +//Function Number: 27 +can_say_event_type(param_00) +{ + if(!isdefined(level.so_player_chatter_enabled) || !level.so_player_chatter_enabled) + { + return 0; + } + + if(self.so_isspeaking) + { + return 0; + } + + if(!isdefined(self.bc_eventtypelastusedtime[param_00])) + { + return 1; + } + + var_01 = self.bc_eventtypelastusedtime[param_00]; + var_02 = level.so.eventtypeminwait[param_00] * 1000; + if(gettime() - var_01 >= var_02) + { + return 1; + } + + return 0; +} + +//Function Number: 28 +update_event_type(param_00) +{ + self.bc_eventtypelastusedtime[param_00] = gettime(); +} + +//Function Number: 29 +check_overrides(param_00,param_01) +{ + if(param_00 == "reload") + { + if(isdefined(level.so_override["skip_inform_reloading"]) && level.so_override["skip_inform_reloading"]) + { + return undefined; + } + + if(isdefined(level.so_override["inform_reloading"])) + { + return level.so_override["inform_reloading"]; + } + } + + return param_01; +} + +//Function Number: 30 +get_player_team_prefix(param_00) +{ + var_01 = ""; + if(isdefined(level.so_stealth) && level.so_stealth) + { + var_01 = "STEALTH_"; + } + + var_02 = "1"; + if(param_00 == level.player2) + { + var_02 = "2"; + } + + switch(level.so_campaign) + { + case "fso": + case "hijack": + case "delta": + case "ranger": + return "SO_US_" + var_02 + "_" + var_01; + + case "seal": + return "SO_NS_" + var_02 + "_" + var_01; + + case "sas": + case "ghillie": + case "woodland": + case "desert": + case "arctic": + return "SO_UK_" + var_02 + "_" + var_01; + + default: + break; + } +} + +//Function Number: 31 +close_enough_to_other_player(param_00) +{ + if(isdefined(param_00)) + { + foreach(var_02 in level.so.skipdistancecheck) + { + if(var_02 == param_00) + { + return 1; + } + } + } + + var_04 = maps\_utility::get_other_player(self); + if(distancesquared(var_04.origin,self.origin) > level.so.bcmaxdistsqd) + { + return 0; + } + + return 1; +} + +//Function Number: 32 +is_downed() +{ + if(maps\_utility::ent_flag_exist("laststand_downed") && maps\_utility::ent_flag("laststand_downed")) + { + return 1; + } + + return 0; +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_specialops_code.gsc b/MW3/PC/SP/maps/_specialops_code.gsc new file mode 100644 index 0000000..5b2d829 --- /dev/null +++ b/MW3/PC/SP/maps/_specialops_code.gsc @@ -0,0 +1,2180 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_specialops_code.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 98 + * Decompile Time: 1603 ms + * Timestamp: 10/27/2023 2:21:38 AM +*******************************************************************/ + +//Function Number: 1 +setup_xp() +{ + wait 0.05; + maps\_rank::xp_init(); +} + +//Function Number: 2 +register_level_unlock(param_00,param_01) +{ + var_02 = int(tablelookup("sp/specOpsTable.csv",1,param_00,5)); + var_03 = tablelookup("sp/specOpsTable.csv",1,param_00,6); + var_04 = 1; + unlock_register(param_00,var_02,var_03,"","",param_01,var_04); +} + +//Function Number: 3 +register_survival_unlock() +{ + register_level_unlock("so_survival_2","survival"); + register_level_unlock("so_survival_3","survival"); + register_level_unlock("so_survival_4","survival"); + register_survival_armory_unlock(100,120,"weaponupgrade"); + register_survival_armory_unlock(0,64,"weapon"); + register_survival_armory_unlock(1000,1020,"equipment"); + register_survival_armory_unlock(10000,10020,"airsupport"); +} + +//Function Number: 4 +register_survival_armory_unlock(param_00,param_01,param_02) +{ + for(var_03 = param_00;var_03 <= param_01;var_03++) + { + var_04 = tablelookup("sp/survival_armories.csv",0,var_03,1); + if(!isdefined(var_04) || var_04 == "") + { + continue; + } + + var_05 = var_03; + var_06 = var_04; + var_07 = param_02; + var_08 = tablelookup("sp/survival_armories.csv",1,var_04,4); + var_09 = tablelookup("sp/survival_armories.csv",1,var_04,5); + var_0A = int(tablelookup("sp/survival_armories.csv",1,var_04,7)); + if(var_0A > 0) + { + var_0B = "weapon_missing_image"; + if(var_07 == "airsupport") + { + var_0B = "specops_ui_airsupport"; + } + + if(var_07 == "equipment") + { + var_0B = "specops_ui_equipmentstore"; + } + + if(var_07 == "weapon" || var_07 == "weaponupgrade") + { + var_0B = "specops_ui_weaponstore"; + } + + var_0C = 0; + unlock_register(var_06,var_0A,var_08,var_09,var_0B,"survival",var_0C); + } + } +} + +//Function Number: 5 +unlock_register(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + var_07 = spawnstruct(); + var_07.ref = param_00; + var_07.name = param_02; + var_07.var_189B = param_03; + var_07.icon = param_04; + var_07.unlocklvl = param_01; + var_07.mode = param_05; + var_07.var_1DD = param_06; + if(!isdefined(level.unlock_array)) + { + level.unlock_array = []; + } + + if(!isdefined(level.unlock_array[param_01])) + { + level.unlock_array[param_01] = []; + } + + level.unlock_array[param_01][level.unlock_array[param_01].size] = var_07; +} + +//Function Number: 6 +pick_starting_location_so(param_00) +{ + if(isdefined(param_00) && param_00) + { + if(isdefined(level.skip_playersetstreamorigin) && level.skip_playersetstreamorigin) + { + return undefined; + } + } + + if(isdefined(level.pmc_match) && level.pmc_match) + { + return pick_starting_location_pmc(param_00); + } + + var_01 = getentarray("info_player_start_so","classname"); + if(var_01.size <= 0) + { + var_01 = getentarray("info_player_start","classname"); + } + + var_02 = common_scripts\utility::random(var_01); + if(isdefined(param_00) && param_00) + { + return var_02.origin; + } + + place_player_at_start_point(level.player,var_02); + if(maps\_utility::is_coop()) + { + var_03 = getentarray("info_player_start_soPlayer2","classname"); + if(var_03.size > 0) + { + var_04 = maps\_utility::getclosest(var_02.origin,var_03); + place_player_at_start_point(level.player2,var_04); + return; + } + + place_player2_near_player1(); + } +} + +//Function Number: 7 +isdefendmatch() +{ + return level.pmc_gametype == "mode_defend"; +} + +//Function Number: 8 +pick_starting_location_pmc(param_00) +{ + if(isdefendmatch()) + { + var_01 = getentarray("info_player_start_pmcDefend","classname"); + } + else + { + var_01 = getentarray("info_player_start_pmc","classname"); + } + + var_02 = []; + var_03 = undefined; + foreach(var_05 in level.players) + { + if(!var_02.size) + { + var_03 = common_scripts\utility::random(var_01); + } + else + { + var_03 = maps\_utility::get_closest_exclude(var_03.origin,var_01,var_02); + } + + if(isdefined(param_00) && param_00) + { + return var_03.origin; + } + + var_05 setorigin(var_03.origin); + var_05 setplayerangles(var_03.angles); + var_02[var_02.size] = var_03; + } +} + +//Function Number: 9 +place_player_at_start_point(param_00,param_01) +{ + param_00 setorigin(param_01.origin); + if(isdefined(param_01.angles)) + { + param_00 setplayerangles(param_01.angles); + } +} + +//Function Number: 10 +place_player2_near_player1() +{ + level.player2 setplayerangles(level.player.angles + (0,-25,0)); + level.player2 setorigin(level.player.origin); + var_00 = spawnstruct(); + var_00.entity = level.player2; + var_00.right = -20; + var_00.forward = -50; + var_00 maps\_utility::translate_local(); + level.player2 setorigin(level.player2.origin); +} + +//Function Number: 11 +specialops_remove_entity_check(param_00) +{ + if(specialops_remove_flag_check(param_00)) + { + return 1; + } + + if(specialops_remove_name_check(param_00)) + { + return 1; + } + + return 0; +} + +//Function Number: 12 +specialops_remove_flag_check(param_00) +{ + if(!isdefined(self.script_specialops)) + { + return 0; + } + + if(self.script_specialops == param_00) + { + return 0; + } + + return 1; +} + +//Function Number: 13 +specialops_remove_name_check(param_00) +{ + if(!isdefined(self.script_specialopsname)) + { + return 0; + } + + if(param_00 == 0) + { + return 1; + } + + var_01 = strtok(self.script_specialopsname,":;, "); + var_02 = 1; + foreach(var_04 in var_01) + { + if(var_04 == level.script) + { + var_02 = 0; + break; + } + } + + return var_02; +} + +//Function Number: 14 +so_create_hud_item_delay_draw(param_00) +{ + param_00.alpha = 0; + while(!so_hud_can_show()) + { + wait 0.5; + } + + if(!isdefined(param_00)) + { + return; + } + + if(so_hud_can_toggle(param_00)) + { + switch(self.so_infohud_toggle_state) + { + case "on": + case "none": + param_00 maps\_hud_util::fade_over_time(1,0.5); + break; + + case "off": + param_00 maps\_hud_util::fade_over_time(0,0.5); + break; + + default: + break; + } + } + else + { + param_00 maps\_hud_util::fade_over_time(1,0.5); + } + + if(!maps\_utility::ent_flag("so_hud_can_toggle")) + { + maps\_utility::ent_flag_set("so_hud_can_toggle"); + } +} + +//Function Number: 15 +so_hud_can_show() +{ + if(isdefined(level.so_waiting_for_players) && level.so_waiting_for_players) + { + return 0; + } + + if(isdefined(level.challenge_time_force_on) && level.challenge_time_force_on) + { + return 1; + } + + if(!isdefined(self.so_hud_show_time)) + { + return 1; + } + + return gettime() > self.so_hud_show_time; +} + +//Function Number: 16 +so_hud_can_toggle(param_00) +{ + if(!isdefined(param_00.so_can_toggle) || !param_00.so_can_toggle) + { + return 0; + } + + if(!isdefined(self.so_infohud_toggle_state)) + { + return 0; + } + + return 1; +} + +//Function Number: 17 +challenge_timer_player_setup(param_00,param_01,param_02,param_03) +{ + level endon("challenge_timer_expired"); + level endon("new_challenge_timer"); + level endon("special_op_terminated"); + var_04 = undefined; + if(isdefined(param_03) && param_03) + { + var_04 = 1; + } + + var_05 = maps\_specialops::so_hud_ypos(); + self.hud_so_timer_msg = maps\_specialops::so_create_hud_item(1,var_05,param_02,self,var_04); + if(isdefined(level.challenge_time_limit)) + { + self.hud_so_timer_time = maps\_specialops::so_create_hud_item(1,var_05,undefined,self,var_04); + self.hud_so_timer_time settenthstimerstatic(level.challenge_time_limit); + } + else + { + self.hud_so_timer_time = maps\_specialops::so_create_hud_item(1,var_05,&"SPECIAL_OPS_TIME_NULL",self,var_04); + } + + self.hud_so_timer_time.alignx = "left"; + if(!isdefined(param_03) || param_03 == 0) + { + thread maps\_specialops::info_hud_wait_for_player(); + thread maps\_specialops::info_hud_handle_fade(self.hud_so_timer_msg); + thread maps\_specialops::info_hud_handle_fade(self.hud_so_timer_time); + } + else + { + self.so_infohud_toggle_state = "none"; + self.hud_so_timer_msg.alpha = 0; + self.hud_so_timer_time.alpha = 0; + } + + challenge_timer_wait_start(self.hud_so_timer_msg,self.hud_so_timer_time,param_00); + if(isdefined(level.challenge_time_limit)) + { + level.so_challenge_time_left = level.challenge_time_limit; + thread challenge_timer_show_nudge(self.hud_so_timer_msg,self.hud_so_timer_time); + thread challenge_timer_show_hurry(self.hud_so_timer_msg,self.hud_so_timer_time); + thread challenge_timer_show_failed(self.hud_so_timer_msg,self.hud_so_timer_time); + thread challenge_timer_destroy_prematurely(self.hud_so_timer_msg,self.hud_so_timer_time); + } + + thread challenge_timer_wait_passed(self.hud_so_timer_msg,self.hud_so_timer_time,param_01); +} + +//Function Number: 18 +challenge_timer_detect_3quarter() +{ + if(!common_scripts\utility::flag_exist("so_challenge_is_3quarter")) + { + common_scripts\utility::flag_init("so_challenge_is_3quarter"); + } + + common_scripts\utility::flag_wait("so_challenge_is_3quarter"); + maps\_specialops::so_dialog_progress_update(3,4); +} + +//Function Number: 19 +challenge_timer_detect_halfway() +{ + if(!common_scripts\utility::flag_exist("so_challenge_is_halfway")) + { + common_scripts\utility::flag_init("so_challenge_is_halfway"); + } + + common_scripts\utility::flag_wait("so_challenge_is_halfway"); + maps\_specialops::so_dialog_progress_update(2,4); +} + +//Function Number: 20 +challenge_timer_detect_quarter() +{ + if(!common_scripts\utility::flag_exist("so_challenge_is_quarter")) + { + common_scripts\utility::flag_init("so_challenge_is_quarter"); + } + + common_scripts\utility::flag_wait("so_challenge_is_quarter"); + maps\_specialops::so_dialog_progress_update(1,4); +} + +//Function Number: 21 +challenge_timer_wait_start(param_00,param_01,param_02) +{ + level endon("special_op_terminated"); + if(isdefined(param_02)) + { + common_scripts\utility::flag_wait(param_02); + } + + foreach(var_04 in level.players) + { + if(!var_04 so_hud_can_show()) + { + var_04.so_hud_show_time = gettime(); + } + } + + if(!isdefined(level.challenge_start_time)) + { + if(challenge_timer_should_play_alarm()) + { + level.player playsound("arcademode_zerodeaths"); + } + + level.challenge_start_time = gettime(); + } + else + { + level.challenge_start_time_last = gettime(); + } + + param_01.label = ""; + if(isdefined(level.challenge_time_limit)) + { + param_01 settenthstimer(level.challenge_time_limit); + return; + } + + param_01 settenthstimerup(0); +} + +//Function Number: 22 +challenge_timer_should_play_alarm() +{ + if(isdefined(level.challenge_time_limit)) + { + return 1; + } + + foreach(var_01 in level.players) + { + if(var_01.so_infohud_toggle_state != "off") + { + return 1; + } + } + + return 0; +} + +//Function Number: 23 +challenge_timer_show_nudge(param_00,param_01) +{ + if(!validate_timer(level.challenge_time_nudge)) + { + return; + } + + level endon("challenge_timer_passed"); + level endon("new_challenge_timer"); + level endon("special_op_terminated"); + while(level.so_challenge_time_left > level.challenge_time_nudge) + { + wait 0.1; + } + + param_00 set_hudelem_yellow(); + param_01 set_hudelem_yellow(); + if(!challenge_timer_be_silent()) + { + thread maps\_specialops::so_dialog_time_low_normal(); + } +} + +//Function Number: 24 +challenge_timer_show_hurry(param_00,param_01) +{ + if(!validate_timer(level.challenge_time_hurry)) + { + return; + } + + level endon("challenge_timer_passed"); + level endon("new_challenge_timer"); + level endon("special_op_terminated"); + while(level.so_challenge_time_left > level.challenge_time_hurry) + { + wait 0.1; + } + + param_00 set_hudelem_red(); + param_01 set_hudelem_red(); + if(!challenge_timer_be_silent()) + { + thread maps\_specialops::so_dialog_time_low_hurry(); + } +} + +//Function Number: 25 +challenge_timer_be_silent() +{ + if(self != level.player) + { + return 1; + } + + if(!isdefined(level.challenge_time_silent)) + { + return 0; + } + + return level.challenge_time_silent; +} + +//Function Number: 26 +challenge_timer_thread() +{ + level endon("special_op_terminated"); + level notify("stop_challenge_timer_thread"); + level endon("stop_challenge_timer_thread"); + while(level.so_challenge_time_left > 0) + { + wait 0.05; + level.so_challenge_time_left = level.so_challenge_time_left - 0.05; + thread challenge_timer_give_alert(); + } + + level notify("challenge_timer_failed"); +} + +//Function Number: 27 +challenge_timer_give_alert() +{ + if(challenge_timer_should_pulse()) + { + foreach(var_01 in level.players) + { + var_01.hud_so_timer_msg thread maps\_specialops::so_hud_pulse_create(); + var_01.hud_so_timer_time thread maps\_specialops::so_hud_pulse_create(); + } + + if(level.so_challenge_time_beep < 0) + { + level.player playsound("arcademode_kill_streak_lost"); + return; + } + + level.player playsound("so_countdown_beep"); + } +} + +//Function Number: 28 +challenge_timer_should_pulse() +{ + if(level.so_challenge_time_left > level.so_challenge_time_beep) + { + return 0; + } + + for(var_00 = 0;var_00 <= level.hud_so_counter_values;var_00++) + { + if(level.so_challenge_time_left > var_00) + { + if(level.so_challenge_time_beep < var_00) + { + level.so_challenge_time_beep = var_00 + 1; + } + + continue; + } + + level.so_challenge_time_beep = var_00 - 1; + return 1; + } + + return 0; +} + +//Function Number: 29 +challenge_timer_show_failed(param_00,param_01) +{ + if(!validate_timer(level.challenge_time_limit)) + { + return; + } + + level endon("challenge_timer_passed"); + level endon("new_challenge_timer"); + level endon("special_op_terminated"); + thread challenge_timer_thread(); + level waittill("challenge_timer_failed"); + common_scripts\utility::flag_set("challenge_timer_expired"); + challenge_timer_destroy(param_00,param_01); + if(self == level.player) + { + thread maps\_specialops::so_dialog_mission_failed_time(); + } + + var_02 = "@SPECIAL_OPS_FAILURE_HINT_TIME"; + if(isdefined(level.so_deadquote_time)) + { + var_02 = level.so_deadquote_time; + } + + maps\_specialops::so_force_deadquote(var_02,"ui_time_failure"); + if(self == level.player) + { + maps\_utility::missionfailedwrapper(); + } +} + +//Function Number: 30 +challenge_timer_wait_passed(param_00,param_01,param_02) +{ + level endon("challenge_timer_expired"); + level endon("new_challenge_timer"); + if(common_scripts\utility::flag_exist("individual_timers") && common_scripts\utility::flag("individual_timers")) + { + maps\_utility::ent_flag_wait(param_02); + } + else + { + common_scripts\utility::flag_wait(param_02); + } + + common_scripts\utility::flag_set("challenge_timer_passed"); + level.challenge_end_time = gettime(); + var_03 = common_scripts\utility::ter_op(isdefined(level.challenge_start_time_last),level.challenge_start_time_last,level.challenge_start_time); + var_04 = maps\_utility::round_millisec_on_sec(level.challenge_end_time - var_03,1,0); + var_05 = var_04 / 1000; + if(isdefined(level.challenge_time_limit)) + { + var_05 = level.challenge_time_limit - var_05; + } + + if(var_05 <= 0) + { + var_05 = 0.1; + } + + param_01 settenthstimerstatic(var_05); + if(!common_scripts\utility::flag_exist("individual_timers")) + { + return; + } + + if(common_scripts\utility::flag("individual_timers")) + { + return; + } + + challenge_timer_destroy(param_00,param_01); +} + +//Function Number: 31 +challenge_timer_destroy_prematurely(param_00,param_01) +{ + level waittill("new_challenge_timer"); + challenge_timer_destroy(param_00,param_01,1); +} + +//Function Number: 32 +challenge_timer_destroy(param_00,param_01,param_02) +{ + if(isdefined(param_00)) + { + param_00 thread maps\_specialops::so_remove_hud_item(param_02); + } + + if(isdefined(param_01)) + { + param_01 thread maps\_specialops::so_remove_hud_item(param_02); + } +} + +//Function Number: 33 +validate_timer(param_00) +{ + if(!isdefined(param_00)) + { + return 0; + } + + if(param_00 <= 0) + { + return 0; + } + + return 1; +} + +//Function Number: 34 +failure_summary_display() +{ + if(getdvarint("so_nofail")) + { + return; + } + + thread maps\_specialops::so_dialog_mission_failed_generic(); + missionfailed(); + maps\_endmission::so_eog_summary_calculate(0); + specialops_mission_over_setup(0); + level notify("so_generate_deathquote"); + maps\_endmission::so_eog_summary_display(); +} + +//Function Number: 35 +specialops_mission_over_setup(param_00) +{ + setdvar("ui_opensummary",1); + if(param_00) + { + setdvar("ui_mission_success",1); + } + else + { + setdvar("ui_mission_success",0); + } + + if(common_scripts\utility::flag("special_op_terminated")) + { + } + + if(!isdefined(level.challenge_start_time)) + { + level.challenge_start_time = gettime(); + } + + if(!isdefined(level.challenge_end_time)) + { + level.challenge_end_time = gettime(); + } + + common_scripts\utility::flag_set("special_op_terminated"); + level notify("stop_music"); + thread maps\_utility_code::mission_recon(param_00); + var_01 = undefined; + if(isdefined(level.pmc_game) && level.pmc_game) + { + var_01 = pick_starting_location_pmc(1); + } + else + { + var_01 = pick_starting_location_so(1); + } + + if(isdefined(var_01)) + { + foreach(var_03 in level.players) + { + var_03 playersetstreamorigin(var_01); + } + } + + ambientstop(2); + maps\_utility::music_stop(1); + if(param_00) + { + thread specialops_mission_over_setup_success(); + } + else + { + thread specialops_mission_over_setup_failure(); + } + + foreach(var_03 in level.players) + { + var_03 allowjump(0); + var_03 disableweapons(); + var_03 disableusability(); + var_03 enableinvulnerability(); + var_03.ignoreme = 1; + } + + thread specialops_blur_player_screen(); + if(param_00) + { + wait 0.5; + foreach(var_03 in level.players) + { + var_03 setup_leaderboard_data(); + } + + wait 2.5; + foreach(var_03 in level.players) + { + var_03 uploadleaderboards(); + } + } + else + { + wait 3; + } + + thread specialops_mission_over_remove_ai(); + if(!common_scripts\utility::flag("special_op_no_unlink")) + { + foreach(var_03 in level.players) + { + var_03 unlink(); + } + } + + foreach(var_03 in level.players) + { + var_03 freezecontrols(1); + } + + specialops_mission_over_stats(param_00); +} + +//Function Number: 36 +setup_leaderboard_data() +{ + if(maps\_utility::is_coop() && level.players.size == 2) + { + self setplayerdata("round","xuidTeammate",maps\_utility::get_other_player(self) getxuid()); + } + + self setplayerdata("round","timePlayed",self.so_eog_summary_data["time"]); + self setplayerdata("round","kills",self.so_eog_summary_data["kills"]); + var_00 = 0; + if(maps\_utility::is_survival()) + { + self setplayerdata("round","score",self.so_eog_summary_data["score"]); + self setplayerdata("round","wave",self.so_eog_summary_data["wave"]); + var_01 = 0; + var_02 = 0; + if(self.stats["weapon"].size > 0) + { + foreach(var_04 in self.stats["weapon"]) + { + var_01 = var_01 + var_04.shots_fired; + var_02 = var_02 + var_04.shots_hit; + } + } + + self setplayerdata("round","bulletsFired",var_01); + self setplayerdata("round","bulletsHit",var_02); + self setplayerdata("round","headshots",self.game_performance["headshot"]); + self setplayerdata("round","revives",self.game_performance["revives"]); + self setplayerdata("round","credits",self.game_performance["credits"]); + self setplayerdata("round","totalXp",self.game_performance["credits"]); + return; + } + + var_06 = level.so_enable_wait_for_players; + if(isdefined(self.forcedgameskill)) + { + var_06 = self.forcedgameskill; + } + + self setplayerdata("round","difficulty",var_06); + self setplayerdata("round","score",self.so_eog_summary_data["score"]); +} + +//Function Number: 37 +specialops_blur_player_screen() +{ + foreach(var_01 in level.players) + { + wait 0.1; + var_01 setblurforplayer(6,1); + } +} + +//Function Number: 38 +specialops_mission_over_remove_ai() +{ + wait 0.25; + var_00 = getaiarray(); + var_00 = maps\_utility::array_merge(var_00,getaispeciesarray("axis","dog")); + foreach(var_02 in var_00) + { + if(isdefined(var_02.so_no_mission_over_delete) && var_02.so_no_mission_over_delete == 1) + { + continue; + } + + if(isdefined(var_02.magic_bullet_shield)) + { + var_02 maps\_utility::stop_magic_bullet_shield(); + } + + var_02 delete(); + } +} + +//Function Number: 39 +specialops_mission_over_setup_success() +{ + common_scripts\utility::flag_set("special_op_succeeded"); + foreach(var_01 in level.players) + { + var_02 = maps\_hud_util::create_client_overlay("white",0,var_01); + var_02.color = (0.7,0.7,1); + var_02 thread maps\_hud_util::fade_over_time(0.25,2); + } + + if(isdefined(level.suppress_challenge_success_print)) + { + return; + } + + var_04 = maps\_specialops::so_create_hud_item(3,0,&"SPECIAL_OPS_CHALLENGE_SUCCESS"); + var_04.alignx = "center"; + var_04.horzalign = "center"; + var_04 set_hudelem_blue(); + var_04 setpulsefx(60,2500,500); + wait 1.5; + var_05 = level.so_campaign; + if(var_05 == "hijack" || var_05 == "fso") + { + var_05 = "delta"; + } + + maps\_utility::music_play("so_victory_" + var_05,undefined,0,1); +} + +//Function Number: 40 +specialops_mission_over_setup_failure() +{ + common_scripts\utility::flag_set("special_op_failed"); + var_00 = maps\_specialops::so_create_hud_item(3,0,&"SPECIAL_OPS_CHALLENGE_FAILURE"); + var_00.hidewhendead = 0; + var_00.alignx = "center"; + var_00.horzalign = "center"; + var_00 set_hudelem_red(); + var_00 setpulsefx(60,2500,500); + foreach(var_02 in level.players) + { + var_03 = maps\_hud_util::create_client_overlay("white",0,var_02); + var_03.color = (1,0.4,0.4); + var_03 thread maps\_hud_util::fade_over_time(0.25,2); + } + + wait 1.5; + var_05 = level.so_campaign; + if(var_05 == "hijack" || var_05 == "fso") + { + var_05 = "delta"; + } + + maps\_utility::music_play("so_defeat_" + var_05,undefined,0,1); +} + +//Function Number: 41 +is_current_level_locked() +{ + var_00 = tablelookup("sp/specOpsTable.csv",1,level.script,13); + var_01 = int(tablelookup("sp/specOpsTable.csv",1,var_00,5)); + var_02 = maps\_rank::getrank(); + return var_02 < var_01; +} + +//Function Number: 42 +is_so_player_signed_in() +{ + return 1; +} + +//Function Number: 43 +can_save_to_profile() +{ + return is_so_player_signed_in() && !is_current_level_locked(); +} + +//Function Number: 44 +specialops_achievement_by_stars(param_00) +{ + if(maps\_utility::is_survival()) + { + } +} + +//Function Number: 45 +get_total_mode_stars(param_00,param_01,param_02) +{ + var_03 = 0; + for(var_04 = param_01;var_04 < param_02;var_04++) + { + var_03 = var_03 + int(max(0,int(param_00[var_04]) - 1)); + } + + return var_03; +} + +//Function Number: 46 +get_num_of_levels_with_star(param_00,param_01) +{ + var_02 = param_00.size; + if(var_02 > level.specopssettings.levels.size) + { + var_02 = level.specopssettings.levels.size; + } + + var_03 = 0; + for(var_04 = 0;var_04 < var_02;var_04++) + { + if(max(0,int(param_00[var_04]) - 1) >= param_01) + { + var_03++; + } + } + + return var_03; +} + +//Function Number: 47 +specialops_mission_over_stats(param_00) +{ + if(!isdefined(param_00) || !param_00) + { + return; + } + + foreach(var_02 in level.players) + { + if(!var_02 can_save_to_profile()) + { + var_02.eog_noreward = 1; + } + } + + if(issplitscreen() && level.ps3) + { + level.player2.eog_noreward = 0; + } + + var_04 = tablelookup("sp/specOpsTable.csv",1,level.script,9); + if(isdefined(var_04) && var_04 != "") + { + foreach(var_02 in level.players) + { + if(isdefined(var_02.eog_noreward) && var_02.eog_noreward) + { + continue; + } + + var_06 = var_02 getlocalplayerprofiledata(var_04); + if(!isdefined(var_06)) + { + continue; + } + + var_07 = var_06 == 0; + level.never_played = 0; + if(var_07) + { + level.never_played = 1; + } + + var_08 = var_02.so_eog_summary_data["score"]; + if(var_07 || var_08 > var_06) + { + var_02 setlocalplayerprofiledata(var_04,var_08); + } + + if(!var_07 && var_08 > var_06) + { + var_02.eog_bestscore = 1; + var_02.eog_bestscore_value = var_08; + } + } + } + + var_0A = level.specopssettings maps\_endmission::getlevelindex(level.script); + if(!isdefined(var_0A)) + { + missionsuccess(level.script); + return; + } + + level.specopssettings maps\_endmission::setsolevelcompleted(var_0A); + foreach(var_02 in level.players) + { + if(isdefined(var_02.eog_noreward) && var_02.eog_noreward) + { + continue; + } + + var_0C = var_02 getlocalplayerprofiledata("missionSOHighestDifficulty"); + if(!isdefined(var_0C)) + { + continue; + } + + var_0D = int(tablelookup("sp/specopstable.csv",0,"survival_count",1)); + var_0E = int(tablelookup("sp/specopstable.csv",0,"mission_count",1)); + var_0F = 0; + var_10 = 0; + if(maps\_utility::is_survival()) + { + var_0F = get_total_mode_stars(var_0C,0,var_0D); + var_11 = 100 * var_0F / var_0D * 3; + } + else + { + var_0F = get_total_mode_stars(var_0C,var_0D,var_0D + var_0E); + var_11 = 100 * var_0F / var_0E * 3; + } + + if(int(var_11 * 100) % 100 >= 0.5) + { + var_10 = int(var_11) + 1; + } + else + { + var_10 = int(var_11); + } + + var_02 thread maps\_specialops::so_achievement_update("BRAG_RAGS"); + var_02 thread maps\_specialops::so_achievement_update("TACTICIAN"); + var_02 thread maps\_specialops::so_achievement_update("OVERACHIEVER"); + var_16 = var_02 getlocalplayerprofiledata("percentCompleteSO"); + var_17 = int(var_16 / 100); + var_18 = var_02 maps\_rank::getrank(); + if(maps\_utility::is_survival()) + { + var_19 = var_18 + var_17 * 100; + } + else + { + var_19 = var_18 + var_0F * 100; + } + + var_02 setlocalplayerprofiledata("percentCompleteSO",var_19); + } + + updategamerprofileall(); +} + +//Function Number: 48 +wait_all_players_are_touching(param_00) +{ + for(;;) + { + param_00 waittill("trigger"); + if(!maps\_utility::is_coop()) + { + return; + } + + level.player thread waiting_message_hide(); + level.player2 thread waiting_message_hide(); + if(!level.player istouching(param_00)) + { + level.player2 thread display_waiting_message(); + continue; + } + + if(!level.player2 istouching(param_00)) + { + level.player thread display_waiting_message(); + continue; + } + + break; + } +} + +//Function Number: 49 +wait_all_players_have_touched(param_00,param_01) +{ + var_02 = 0; + var_03 = 0; + for(;;) + { + param_00 waittill("trigger"); + if(!maps\_utility::is_coop()) + { + return; + } + + level.player thread waiting_message_hide(); + level.player2 thread waiting_message_hide(); + if(level.player istouching(param_00)) + { + var_02 = 1; + if(!var_03 && !level.player2 istouching(param_00)) + { + thread determine_waiting_message(level.player,param_01); + continue; + } + } + + if(level.player2 istouching(param_00)) + { + var_03 = 1; + if(!var_02 && !level.player istouching(param_00)) + { + thread determine_waiting_message(level.player2,param_01); + continue; + } + } + + break; + } +} + +//Function Number: 50 +disable_mission_end_trigger(param_00) +{ + level waittill("special_op_terminated"); + param_00 common_scripts\utility::trigger_off(); +} + +//Function Number: 51 +determine_waiting_message(param_00,param_01) +{ + switch(param_01) + { + case "all": + param_00 display_waiting_message(); + break; + + case "any": + param_00 display_waiting_message(); + break; + + case "freeze": + param_00 display_frozen_message(); + break; + } +} + +//Function Number: 52 +display_waiting_message() +{ + self endon("death"); + level endon("challenge_timer_passed"); + level endon("challenge_timer_expired"); + level endon("special_op_terminated"); + level notify("players_touching_hint"); + level endon("players_touching_hint"); + if(!isdefined(self)) + { + return; + } + + if(!isdefined(self.waiting_hud)) + { + self.waiting_hud = create_waiting_message(self); + } + else + { + self.waiting_hud.alpha = 1; + } + + wait 0.05; + self.waiting_hud fadeovertime(0.25); + self.waiting_hud.alpha = 0; +} + +//Function Number: 53 +display_frozen_message() +{ + if(!isdefined(self)) + { + return; + } + + if(isdefined(self.frozen_and_waiting) && self.frozen_and_waiting) + { + return; + } + + self.frozen_and_waiting = 1; + self enableinvulnerability(); + self freezecontrols(1); + self.ignoreme = 1; + self setblurforplayer(6,1); + self.waiting_hud = create_waiting_message(self); +} + +//Function Number: 54 +create_waiting_message(param_00) +{ + self notify("rebuilding_waiting_hud"); + self endon("rebuilding_waiting_hud"); + var_01 = maps\_specialops::so_create_hud_item(3,0,&"SPECIAL_OPS_WAITING_OTHER_PLAYER",param_00); + var_01.alignx = "center"; + var_01.horzalign = "center"; + var_01 set_hudelem_blue(); + thread waiting_message_delete_on_so_end(var_01); + return var_01; +} + +//Function Number: 55 +waiting_message_hide() +{ + if(!isdefined(self)) + { + return; + } + + if(!isdefined(self.waiting_hud)) + { + return; + } + + if(isdefined(self.frozen_and_waiting) && self.frozen_and_waiting) + { + return; + } + + self.waiting_hud fadeovertime(0.25); + self.waiting_hud.alpha = 0; +} + +//Function Number: 56 +waiting_message_delete_on_so_end(param_00) +{ + self endon("rebuilding_waiting_hud"); + level waittill("special_op_terminated"); + if(isdefined(param_00)) + { + param_00 destroy(); + } +} + +//Function Number: 57 +disable_saving() +{ + common_scripts\utility::flag_set("disable_autosaves"); + for(;;) + { + common_scripts\utility::flag_wait("can_save"); + common_scripts\utility::flag_clear("can_save"); + } +} + +//Function Number: 58 +disable_escape_warning() +{ + if(common_scripts\utility::flag("player_has_escaped")) + { + return 1; + } + + if(is_touching_escape_trigger()) + { + return 0; + } + + return 1; +} + +//Function Number: 59 +is_touching_escape_trigger() +{ + if(!isdefined(level.escape_warning_triggers)) + { + return 0; + } + + foreach(var_01 in level.escape_warning_triggers) + { + if(self istouching(var_01)) + { + return 1; + } + } + + return 0; +} + +//Function Number: 60 +ping_escape_warning() +{ + if(isdefined(self.ping_escape_splash)) + { + return; + } + + self endon("death"); + self.ping_escape_splash = maps\_specialops::so_create_hud_item(3.5,0,&"SPECIAL_OPS_ESCAPE_WARNING",self); + self.ping_escape_splash.alignx = "center"; + self.ping_escape_splash.horzalign = "center"; + while(ping_escape_warning_valid()) + { + self.ping_escape_splash.alpha = 1; + self.ping_escape_splash fadeovertime(1); + self.ping_escape_splash.alpha = 0.5; + self.ping_escape_splash.fontscale = 1.5; + self.ping_escape_splash changefontscaleovertime(1); + self.ping_escape_splash.fontscale = 1; + wait 1; + } + + self.ping_escape_splash.alpha = 0.5; + self.ping_escape_splash fadeovertime(0.25); + self.ping_escape_splash.alpha = 0; + wait 0.25; + self.escape_hint_active = undefined; + if(isdefined(self.ping_escape_splash)) + { + self.ping_escape_splash destroy(); + } +} + +//Function Number: 61 +ping_escape_warning_valid() +{ + if(common_scripts\utility::flag("special_op_terminated")) + { + return 0; + } + + if(!is_touching_escape_trigger()) + { + return 0; + } + + return 1; +} + +//Function Number: 62 +enable_escape_failure_auto() +{ + level endon("special_op_terminated"); + for(;;) + { + self waittill("trigger",var_00); + if(!isplayer(var_00)) + { + continue; + } + + if(isdefined(var_00.so_ignore_escape_failure) && var_00.so_ignore_escape_failure) + { + continue; + } + + break; + } + + maps\_specialops::so_force_deadquote("@DEADQUOTE_SO_LEFT_PLAY_AREA"); + maps\_utility::missionfailedwrapper(); +} + +//Function Number: 63 +enable_escape_warning_auto_init() +{ + if(common_scripts\utility::flag_exist("so_escape_warning") && common_scripts\utility::flag("so_escape_warning")) + { + return; + } + + common_scripts\utility::flag_init("so_escape_warning"); + foreach(var_01 in level.players) + { + var_01 maps\_utility::ent_flag_init("so_escape_hint_active"); + } +} + +//Function Number: 64 +enable_escape_warning_auto() +{ + level endon("special_op_terminated"); + enable_escape_warning_auto_init(); + for(;;) + { + self waittill("trigger",var_00); + if(!isplayer(var_00)) + { + continue; + } + + if(isdefined(var_00.so_ignore_escape_failure) && var_00.so_ignore_escape_failure) + { + continue; + } + + var_00 thread show_escape_warning_auto(self); + } +} + +//Function Number: 65 +show_escape_warning_auto(param_00) +{ + if(maps\_utility::ent_flag("so_escape_hint_active")) + { + return; + } + + maps\_utility::ent_flag_set("so_escape_hint_active"); + thread ping_escape_warning_auto(param_00); +} + +//Function Number: 66 +ping_escape_warning_auto(param_00) +{ + self notify("so_escape_hint_ping"); + self endon("so_escape_hint_ping"); + thread remove_escape_warning_auto(param_00); + if(!isdefined(self.ping_escape_splash_auto)) + { + self.ping_escape_splash_auto = maps\_specialops::so_create_hud_item(3.5,0,&"SPECIAL_OPS_ESCAPE_WARNING",self); + self.ping_escape_splash_auto.alignx = "center"; + self.ping_escape_splash_auto.horzalign = "center"; + if(isdefined(level.so_escape_warning_colorfunc)) + { + self.ping_escape_splash_auto thread [[ level.so_escape_warning_colorfunc ]](); + } + } + + while(ping_escape_warning_auto_valid()) + { + self.ping_escape_splash_auto.alpha = 1; + self.ping_escape_splash_auto fadeovertime(1); + self.ping_escape_splash_auto.alpha = 0.5; + self.ping_escape_splash_auto.fontscale = 1.5; + self.ping_escape_splash_auto changefontscaleovertime(1); + self.ping_escape_splash_auto.fontscale = 1; + wait 1; + } + + self.ping_escape_splash_auto.alpha = 0.5; + self.ping_escape_splash_auto fadeovertime(0.25); + self.ping_escape_splash_auto.alpha = 0; + wait 0.25; + self.ping_escape_splash_auto destroy(); +} + +//Function Number: 67 +remove_escape_warning_auto(param_00) +{ + while(self istouching(param_00)) + { + wait 0.05; + } + + maps\_utility::ent_flag_clear("so_escape_hint_active"); +} + +//Function Number: 68 +ping_escape_warning_auto_valid() +{ + if(!isalive(self)) + { + return 0; + } + + if(common_scripts\utility::flag("special_op_terminated")) + { + return 0; + } + + return maps\_utility::ent_flag("so_escape_hint_active"); +} + +//Function Number: 69 +so_dialog_play(param_00,param_01,param_02) +{ + if(isdefined(param_01)) + { + wait param_01; + } + + if(isdefined(param_02) && param_02) + { + maps\_utility::radio_dialogue_stop(); + } + + maps\_utility::radio_dialogue(param_00); +} + +//Function Number: 70 +specialops_dialog_init() +{ + level.scr_radio["so_tf_1_plyr_prep"] = "so_tf_1_plyr_prep"; + level.scr_radio["so_tf_1_success_generic"] = "so_tf_1_success_generic"; + level.scr_radio["so_tf_1_success_jerk"] = "so_tf_1_success_jerk"; + level.scr_radio["so_tf_1_success_best"] = "so_tf_1_success_best"; + level.scr_radio["so_tf_1_fail_generic"] = "so_tf_1_fail_generic"; + level.scr_radio["so_tf_1_fail_generic_jerk"] = "so_tf_1_fail_generic_jerk"; + level.scr_radio["so_tf_1_fail_time"] = "so_tf_1_fail_time"; + level.scr_radio["so_tf_1_fail_bleedout"] = "so_tf_1_fail_bleedout"; + level.scr_radio["so_tf_1_time_generic"] = "so_tf_1_time_generic"; + level.scr_radio["so_tf_1_time_hurry"] = "so_tf_1_time_hurry"; + level.scr_radio["so_tf_1_civ_kill_warning"] = "so_tf_1_civ_kill_warning"; + level.scr_radio["so_tf_1_progress_5more"] = "so_tf_1_progress_5more"; + level.scr_radio["so_tf_1_progress_4more"] = "so_tf_1_progress_4more"; + level.scr_radio["so_tf_1_progress_3more"] = "so_tf_1_progress_3more"; + level.scr_radio["so_tf_1_progress_2more"] = "so_tf_1_progress_2more"; + level.scr_radio["so_tf_1_progress_1more"] = "so_tf_1_progress_1more"; + level.scr_radio["so_tf_1_time_status_late"] = "so_tf_1_time_status_late"; + level.scr_radio["so_tf_1_time_status_good"] = "so_tf_1_time_status_good"; + level.scr_radio["so_tf_1_progress_3quarter"] = "so_tf_1_progress_3quarter"; + level.scr_radio["so_tf_1_progress_half"] = "so_tf_1_progress_half"; + level.scr_radio["so_tf_1_progress_quarter"] = "so_tf_1_progress_quarter"; +} + +//Function Number: 71 +set_hudelem_white() +{ + maps\_specialops::set_hud_white(); +} + +//Function Number: 72 +set_hudelem_blue() +{ + maps\_specialops::set_hud_blue(); +} + +//Function Number: 73 +set_hudelem_green() +{ + maps\_specialops::set_hud_green(); +} + +//Function Number: 74 +set_hudelem_yellow() +{ + maps\_specialops::set_hud_yellow(); +} + +//Function Number: 75 +set_hudelem_red() +{ + maps\_specialops::set_hud_red(); +} + +//Function Number: 76 +set_hudelem_grey() +{ + maps\_specialops::set_hud_grey(); +} + +//Function Number: 77 +so_hud_pulse_single(param_00,param_01,param_02) +{ + self endon("update_hud_pulse"); + self endon("destroying"); + self endon("death"); + self.fontscale = param_00; + self changefontscaleovertime(param_02); + self.fontscale = param_01; + wait param_02; +} + +//Function Number: 78 +so_hud_pulse_loop() +{ + self endon("update_hud_pulse"); + self endon("destroying"); + self endon("death"); + if(self.pulse_start_big) + { + so_hud_pulse_single(self.pulse_scale_big,self.pulse_scale_loop_normal,self.var_184D); + } + + while(isdefined(self.pulse_bounds) && self.pulse_bounds) + { + so_hud_pulse_single(self.pulse_scale_loop_normal,self.pulse_scale_loop_big,self.pulse_time_loop); + so_hud_pulse_single(self.pulse_scale_loop_big,self.pulse_scale_loop_normal,self.pulse_time_loop); + } +} + +//Function Number: 79 +so_hud_pulse_init() +{ + if(!isdefined(self)) + { + return 0; + } + + if(!isdefined(self.var_184D)) + { + self.var_184D = 0.5; + } + + if(!isdefined(self.pulse_scale_normal)) + { + self.pulse_scale_normal = 1; + } + + if(!isdefined(self.pulse_scale_big)) + { + self.pulse_scale_big = 1.6; + } + + if(!isdefined(self.pulse_bounds)) + { + self.pulse_bounds = 0; + } + + if(!isdefined(self.pulse_time_loop)) + { + self.pulse_time_loop = 1; + } + + if(!isdefined(self.pulse_scale_loop_normal)) + { + self.pulse_scale_loop_normal = 1; + } + + if(!isdefined(self.pulse_scale_loop_big)) + { + self.pulse_scale_loop_big = 1.15; + } + + if(!isdefined(self.pulse_start_big)) + { + self.pulse_start_big = 1; + } + + return 1; +} + +//Function Number: 80 +specialops_detect_death() +{ + level endon("special_op_terminated"); + common_scripts\utility::flag_init("so_player_death_nofail"); + common_scripts\utility::array_thread(level.players,::specialops_detect_player_death); + level waittill("so_player_has_died"); + if(common_scripts\utility::flag("so_player_death_nofail")) + { + return; + } + + maps\_utility::missionfailedwrapper(); +} + +//Function Number: 81 +specialops_detect_player_death() +{ + level endon("special_op_terminated"); + self waittill("death"); + level notify("so_player_has_died"); +} + +//Function Number: 82 +so_special_failure_hint_reset_dvars(param_00) +{ + setdvar("ui_dog_death",0); + setdvar("ui_vehicle_death",0); + setdvar("ui_destructible_death",0); + setdvar("ui_barrel_death",0); + setdvar("ui_grenade_death",0); + setdvar("ui_time_failure",0); + setdvar("ui_ff_death",0); + setdvar("ui_juggernaut_death",0); + setdvar("ui_bled_out",0); + setdvar("ui_icon_partner",0); + setdvar("ui_icon_obj",0); + setdvar("ui_icon_obj_offscreen",0); + setdvar("ui_icon_stars",0); + setdvar("ui_icon_claymore",0); + setdvar("ui_icon_stealth_stance",0); + if(isdefined(param_00)) + { + setdvar(param_00,1); + } +} + +//Function Number: 83 +so_special_failure_hint() +{ + so_special_failure_hint_reset_dvars(); + foreach(var_01 in level.players) + { + var_01 thread maps\_load::player_throwgrenade_timer(); + var_01 thread so_special_death_hint_tracker(); + } + + level waittill("so_generate_deathquote"); + maps\_quotes::setdeadquote_so(); +} + +//Function Number: 84 +so_special_death_hint_tracker() +{ + level endon("so_special_failure_hint_set"); + self waittill("death",var_00,var_01,var_02); + if(isdefined(self.coop_death_reason)) + { + var_00 = self.coop_death_reason["attacker"]; + var_01 = self.coop_death_reason["cause"]; + var_02 = self.coop_death_reason["weapon_name"]; + } + + if(so_claymore_death(var_01,var_02)) + { + return; + } + + if(so_friendly_fire_death(var_00)) + { + return; + } + + if(so_radiation_death(var_00)) + { + return; + } + + if(so_dog_death(var_00)) + { + return; + } + + if(so_juggernaut_death(var_00)) + { + return; + } + + if(so_grenade_suicide_death(var_01)) + { + return; + } + + if(so_destructible_death(var_00,var_01)) + { + return; + } + + if(so_exploding_barrel_death(var_01)) + { + return; + } + + if(so_grenade_regular_death(var_01)) + { + return; + } + + if(so_vehicle_death(var_00,var_01)) + { + } +} + +//Function Number: 85 +so_claymore_death(param_00,param_01) +{ + if(!isdefined(param_00)) + { + return 0; + } + + if(!isdefined(param_01) || isdefined(param_01) && param_01 != "claymore") + { + return 0; + } + + return 1; +} + +//Function Number: 86 +so_friendly_fire_death(param_00) +{ + if(!maps\_utility::is_coop()) + { + return 0; + } + + if(!isdefined(param_00)) + { + return 0; + } + + var_01 = maps\_utility::get_other_player(self); + if(var_01 != param_00) + { + return 0; + } + + so_special_failure_hint_set("@DEADQUOTE_SO_FRIENDLY_FIRE_KILL","ui_ff_death"); + return 1; +} + +//Function Number: 87 +so_radiation_death(param_00) +{ + if(!isdefined(param_00) || param_00.classname != "worldspawn") + { + return 0; + } + + if(!isdefined(self.radiationdeath) || !self.radiationdeath) + { + return 0; + } + + so_special_failure_hint_set("@SCRIPT_RADIATION_DEATH"); + return 1; +} + +//Function Number: 88 +so_dog_death(param_00) +{ + if(!isdefined(param_00)) + { + return 0; + } + + if(!isdefined(param_00.weapon)) + { + return 0; + } + + if(param_00.weapon != "dog_bite") + { + return 0; + } + + common_scripts\utility::flag_set("special_op_no_unlink"); + so_special_failure_hint_set(level.so_dog_death_quote,"ui_dog_death"); + return 1; +} + +//Function Number: 89 +so_juggernaut_death(param_00) +{ + if(!isdefined(param_00)) + { + return 0; + } + + if(!isdefined(param_00.juggernaut)) + { + return 0; + } + + var_01 = []; + so_special_failure_hint_set_array(var_7B,"ui_juggernaut_death"); + return 1; +} + +//Function Number: 90 +so_destructible_death(param_00,param_01) +{ + if(!isdefined(param_01)) + { + return 0; + } + + if(!isdefined(param_00)) + { + return 0; + } + + if(param_01 != "MOD_EXPLOSIVE") + { + return 0; + } + + if(!isdefined(param_00.destructible_type)) + { + return 0; + } + + if(issubstr(param_00.destructible_type,"vehicle")) + { + so_special_failure_hint_set("@SCRIPT_EXPLODING_VEHICLE_DEATH","ui_vehicle_death"); + } + else + { + so_special_failure_hint_set("@SCRIPT_EXPLODING_DESTRUCTIBLE_DEATH","ui_destructible_death"); + } + + return 1; +} + +//Function Number: 91 +so_exploding_barrel_death(param_00) +{ + if(!isdefined(param_00)) + { + return 0; + } + + if(param_00 != "MOD_EXPLOSIVE") + { + return 0; + } + + if(!isdefined(level.lastexplodingbarrel)) + { + return 0; + } + + if(gettime() != level.lastexplodingbarrel["time"]) + { + return 0; + } + + var_01 = distance(self.origin,level.lastexplodingbarrel["origin"]); + if(var_01 > level.lastexplodingbarrel["radius"]) + { + return 0; + } + + so_special_failure_hint_set("@SCRIPT_EXPLODING_BARREL_DEATH","ui_barrel_death"); + return 1; +} + +//Function Number: 92 +so_grenade_suicide_death(param_00) +{ + if(!isdefined(param_00)) + { + return 0; + } + + if(param_00 != "MOD_SUICIDE") + { + return 0; + } + + if(self.lastgrenadetime - gettime() > 3500) + { + return 0; + } + + so_special_failure_hint_set("@SCRIPT_GRENADE_SUICIDE_COMBINED"); + return 1; +} + +//Function Number: 93 +so_grenade_regular_death(param_00) +{ + if(!isdefined(param_00)) + { + return 0; + } + + if(param_00 != "MOD_GRENADE" && param_00 != "MOD_GRENADE_SPLASH") + { + return 0; + } + + so_special_failure_hint_set("@SCRIPT_GRENADE_DEATH","ui_grenade_death"); + return 1; +} + +//Function Number: 94 +so_vehicle_death(param_00,param_01) +{ + if(!isdefined(param_01)) + { + return 0; + } + + if(!isdefined(param_00)) + { + return 0; + } + + if(param_01 != "MOD_CRUSH") + { + return 0; + } + + if(param_00.code_classname != "script_vehicle") + { + return 0; + } + + so_special_failure_hint_set("@DEADQUOTE_SO_RUN_OVER_BY_VEHICLE"); + return 1; +} + +//Function Number: 95 +so_special_failure_hint_set(param_00,param_01) +{ + maps\_specialops::so_force_deadquote(param_00,param_01); + level notify("so_special_failure_hint_set"); +} + +//Function Number: 96 +so_special_failure_hint_set_array(param_00,param_01) +{ + maps\_specialops::so_force_deadquote_array(param_00,param_01); + level notify("so_special_failure_hint_set"); +} + +//Function Number: 97 +so_ai_flashed_damage_feedback() +{ + self endon("death"); + level endon("special_op_terminated"); + for(;;) + { + self waittill("flashbang",var_00,var_01,var_02,var_03); + if(!maps\_utility::is_damagefeedback_enabled()) + { + continue; + } + + if(isdefined(var_03) && isplayer(var_03)) + { + var_03 maps\_damagefeedback::updatedamagefeedback(self); + } + } +} + +//Function Number: 98 +so_mission_complete_achivements() +{ + if(!maps\_utility::is_survival() && level.players.size == 2 && level.players[0].so_eog_summary_data["kills"] > 0 && level.players[0].so_eog_summary_data["kills"] == level.players[1].so_eog_summary_data["kills"]) + { + level.players[0] maps\_utility::player_giveachievement_wrapper("FIFTY_FIFTY"); + level.players[1] maps\_utility::player_giveachievement_wrapper("FIFTY_FIFTY"); + } + + if(level.players.size >= 2 && level.so_enable_wait_for_players >= 2) + { + var_00 = 0; + foreach(var_02 in level.players) + { + if(isdefined(var_02.laststand_down_count) && var_02.laststand_down_count > 0) + { + var_00 = 1; + } + + if(var_02 maps\_utility::get_player_gameskill() < 2) + { + var_00 = 1; + } + } + + if(!var_00) + { + foreach(var_02 in level.players) + { + var_02 maps\_utility::player_giveachievement_wrapper("NO_ASSISTANCE_REQUIRED"); + } + } + } +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_squad_enemies.gsc b/MW3/PC/SP/maps/_squad_enemies.gsc new file mode 100644 index 0000000..ad9cce7 --- /dev/null +++ b/MW3/PC/SP/maps/_squad_enemies.gsc @@ -0,0 +1,1042 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_squad_enemies.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 29 + * Decompile Time: 499 ms + * Timestamp: 10/27/2023 2:20:48 AM +*******************************************************************/ + +//Function Number: 1 +squad_setup(param_00) +{ + if(!common_scripts\utility::flag_exist("squad_spawning")) + { + common_scripts\utility::flag_init("squad_spawning"); + } + + level.new_squad_logic = 1; + level.merge_squad_member_max = 3; + level.leaders = []; + if(isdefined(param_00) && param_00) + { + var_01 = common_scripts\utility::getstructarray("leader","script_noteworthy"); + } + else + { + var_01 = getentarray("leader","script_noteworthy"); + } + + foreach(var_03 in var_01) + { + if(isdefined(var_03.targetname) && issubstr(var_03.targetname,"protector")) + { + var_01 = common_scripts\utility::array_remove(var_01,var_03); + } + } + + level.squad_follower_func = ::setup_follower_advanced; + thread merge_squad(); + thread squad_spread(); + thread drawleader(); + return var_01; +} + +//Function Number: 2 +squad_disband(param_00,param_01,param_02) +{ + if(isdefined(param_00) && param_00 > 0) + { + wait param_00; + } + + if(common_scripts\utility::flag_exist("squad_spawning")) + { + common_scripts\utility::flag_waitopen("squad_spawning"); + } + + level notify("squad_disband"); + level.leaders = []; + if(isdefined(param_01)) + { + var_03 = getaiarray("axis"); + foreach(var_05 in var_03) + { + var_05 notify("ai_behavior_change"); + var_05.leader = undefined; + var_05.squadmembers = undefined; + if(isdefined(var_05.is_squad_enemy) && var_05.is_squad_enemy) + { + if(isdefined(param_02)) + { + var_05 thread [[ param_01 ]](param_02); + } + else + { + var_05 thread [[ param_01 ]](); + } + } + + var_05.is_squad_enemy = 0; + } + } +} + +//Function Number: 3 +setup_zones(param_00,param_01) +{ + level endon("challenge_success"); + level endon("special_op_terminated"); + if(!common_scripts\utility::flag_exist("squad_spawning")) + { + common_scripts\utility::flag_init("squad_spawning"); + } + + var_02 = param_00 common_scripts\utility::get_links(); + var_03 = []; + foreach(var_05 in var_02) + { + var_03[var_03.size] = getent(var_05,"script_linkname"); + } + + param_00 thread one_direction_trigger(); + param_00 waittill("trigger"); + if(getaiarray("axis").size > 1) + { + level.cleaning_up = 1; + squad_clean_up(); + wait 2.02; + } + else + { + level.cleaning_up = 0; + } + + if(level.leaders.size + param_01 > level.desired_squads) + { + param_01 = level.desired_squads - level.leaders.size; + } + + for(var_07 = 0;var_07 < param_01;var_07++) + { + spawn_far_squad(var_03,undefined,undefined,undefined); + } + + wait 1; + level.cleaning_up = 0; + level notify("clean_up_done"); + level notify("zone_spawn_complete"); +} + +//Function Number: 4 +spawn_enemy_squads(param_00) +{ + level endon("challenge_success"); + level endon("special_op_terminated"); + var_01 = squad_setup(); + if(!isdefined(level.desired_squads)) + { + level.desired_squads = 4; + } + else + { + var_02 = "Must have at least 4 squad leader spawners in level"; + } + + if(isdefined(level.squad_zoning) && level.squad_zoning) + { + var_03 = getentarray("zone_trig","targetname"); + foreach(var_05 in var_03) + { + thread setup_zones(var_05,int(var_05.script_noteworthy)); + } + + level waittill("zone_spawn_complete"); + } + + for(;;) + { + wait 0.15; + if(isdefined(level.cleaning_up) && level.cleaning_up) + { + level waittill("clean_up_done"); + } + + if(level.leaders.size < level.desired_squads) + { + spawn_far_squad(var_01,undefined,undefined,param_00); + } + } +} + +//Function Number: 5 +spawn_far_squad(param_00,param_01,param_02,param_03) +{ + var_04 = []; + if(maps\_utility::is_coop()) + { + } + + foreach(var_06 in level.leaders) + { + var_7B[var_7B.size] = var_06; + } + + var_08 = undefined; + while(param_01.size > 1) + { + foreach(var_0A in var_7B) + { + var_08 = maps\_utility::getclosest(var_0A.origin,param_01); + param_01 = common_scripts\utility::array_remove(param_01,var_08); + if(param_01.size == 1) + { + break; + } + } + } + + var_08 = param_01[0]; + thread draw_debug_marker(var_08.origin,(1,1,1)); + if(isspawner(param_01[0])) + { + var_0C = getentarray(var_08.target,"targetname"); + } + else + { + var_0C = common_scripts\utility::getstructarray(var_09.target,"targetname"); + } + + foreach(var_0E in var_0C) + { + if(!isdefined(var_0E.script_noteworthy)) + { + var_0E.script_noteworthy = "follower"; + } + } + + common_scripts\utility::flag_set("squad_spawning"); + var_10 = []; + var_10 = spawn_enemy_group(var_0C,param_02,param_03,var_04); + common_scripts\utility::flag_clear("squad_spawning"); + wait 0.05; + return var_10; +} + +//Function Number: 6 +squad_clean_up() +{ + var_00 = getaiarray("axis"); + foreach(var_02 in var_00) + { + if(isdefined(var_02.protector_obj_group)) + { + var_00 = common_scripts\utility::array_remove(var_00,var_02); + } + } + + thread maps\_utility::ai_delete_when_out_of_sight(var_00,1300); +} + +//Function Number: 7 +squad_spread() +{ + level endon("challenge_success"); + level endon("special_op_terminated"); + for(;;) + { + wait 1; + if(!isdefined(level.leaders)) + { + continue; + } + + if(level.leaders.size < 2) + { + continue; + } + + foreach(var_01 in level.leaders) + { + if(!isdefined(var_01.squadmembers) || var_01.squadmembers.size < 2) + { + continue; + } + + foreach(var_03 in level.leaders) + { + if(var_03 == var_01) + { + continue; + } + + if(!isdefined(var_03.squadmembers) || var_03.squadmembers.size < 2) + { + continue; + } + + if(distance(var_01.origin,var_03.origin) < 600) + { + foreach(var_05 in var_03.squadmembers) + { + if(isdefined(var_05.saw_player) && var_05.saw_player) + { + var_05.goalradius = 800; + } + } + + continue; + } + + foreach(var_05 in var_03.squadmembers) + { + if(isdefined(var_05.saw_player) && var_05.saw_player) + { + var_05.goalradius = 600; + } + } + } + } + } +} + +//Function Number: 8 +merge_squad() +{ + level endon("challenge_success"); + level endon("special_op_terminated"); + for(;;) + { + wait 2; + if(!isdefined(level.leaders)) + { + continue; + } + + if(level.leaders.size < 2) + { + continue; + } + + var_00 = level.leaders[0]; + foreach(var_02 in level.leaders) + { + if(var_00.squadmembers.size > var_02.squadmembers.size) + { + var_00 = var_02; + } + } + + var_04 = common_scripts\utility::array_remove(level.leaders,var_00); + var_05 = var_04[0]; + foreach(var_02 in var_04) + { + if(var_05.squadmembers.size > var_02.squadmembers.size) + { + var_05 = var_02; + } + } + + var_08 = var_00.squadmembers.size + var_05.squadmembers.size + 2; + if(var_08 <= 3) + { + level.leaders = common_scripts\utility::array_remove(level.leaders,var_00); + var_00 notify("demotion"); + var_09 = common_scripts\utility::array_combine(var_00.squadmembers,var_05.squadmembers); + var_06 thread setup_leader(var_7B); + var_0A = common_scripts\utility::array_remove(var_7B,var_06); + foreach(var_0C in var_0A) + { + if(isalive(var_0C)) + { + var_0C thread setup_follower(var_06); + } + } + } + } +} + +//Function Number: 9 +spawn_enemy_group(param_00,param_01,param_02,param_03) +{ + level endon("challenge_success"); + level endon("special_op_terminated"); + var_04 = 0; + if(isdefined(param_01)) + { + var_04 = 1; + } + + if(!isdefined(level.leaders)) + { + level.leaders = []; + } + + if(!isdefined(param_03)) + { + param_03 = param_00.size - 1; + } + else + { + param_03 = int(min(param_00.size - 1,param_03)); + } + + var_05 = "Trying to spawn " + param_03 + " followers but only " + param_00.size - 1 + " spawners are available!"; + if(var_04 || !isspawner(param_00[0])) + { + var_06 = undefined; + var_07 = undefined; + var_08 = getspawnerarray(); + foreach(var_0A in var_08) + { + if(var_0A.classname == param_01) + { + var_06 = var_0A; + } + + if(var_0A.classname == param_02) + { + var_07 = var_0A; + } + } + + var_0C = 0; + var_0D = []; + foreach(var_0F in param_00) + { + wait 0.05; + if(var_0F.script_noteworthy == "leader") + { + var_06.script_noteworthy = "leader"; + var_06.count = 1; + var_06.origin = var_0F.origin; + var_06.angles = var_0F.angles; + var_10 = var_06 maps\_utility::spawn_ai(1); + var_0D[var_0D.size] = var_10; + } + + if(var_0F.script_noteworthy == "follower") + { + if(var_0C >= param_03) + { + continue; + } + + var_0C++; + var_07.script_noteworthy = "follower"; + var_07.count = 1; + var_07.origin = var_0F.origin; + var_07.angles = var_0F.angles; + var_10 = var_07 maps\_utility::spawn_ai(1); + var_0D[var_0D.size] = var_10; + } + } + } + else + { + var_0C = 0; + var_0D = []; + foreach(var_0F in param_01) + { + if(var_0F.script_noteworthy == "follower") + { + var_0C++; + } + + if(var_0C >= param_03) + { + continue; + } + + var_0F.count = 1; + var_10 = var_0F maps\_utility::spawn_ai(1); + var_0D[var_0D.size] = var_10; + } + } + + if(!var_0D.size) + { + return undefined; + } + + var_14 = []; + foreach(var_10 in var_0D) + { + var_10.is_squad_enemy = 1; + if(isalive(var_10)) + { + var_14[var_14.size] = var_10; + } + } + + var_0D = var_14; + var_17 = undefined; + foreach(var_10 in var_0D) + { + if(var_10.script_noteworthy == "leader") + { + var_17 = var_10; + var_17.back_occupied["left"] = 0; + var_17.back_occupied["right"] = 0; + var_17 thread setup_leader(var_0D); + } + } + + if(var_0D.size < param_00.size && !isdefined(var_17)) + { + var_17 = var_0D[randomint(var_0D.size)]; + var_17.script_noteworthy = "leader"; + var_17 thread setup_leader(var_0D); + } + + foreach(var_10 in var_0D) + { + if(isdefined(level.squad_drop_weapon_rate)) + { + var_1B = randomfloat(1); + if(var_1B > level.squad_drop_weapon_rate) + { + var_10.dropweapon = 0; + } + } + + if(var_10.script_noteworthy == "follower") + { + var_10 thread setup_follower(var_17); + } + } + + return var_0D; +} + +//Function Number: 10 +setup_leader(param_00) +{ + level endon("squad_disband"); + self notify("new_leader"); + self endon("new_leader"); + self endon("demotion"); + self.squadmembers = []; + self.leader = undefined; + foreach(var_02 in param_00) + { + if(!isalive(var_02)) + { + param_00 common_scripts\utility::array_remove(param_00,var_02); + } + } + + if(!isdefined(level.new_squad_logic) || level.new_squad_logic == 0) + { + if(param_00.size == 1 && level.leaders.size > 0) + { + var_04 = level.leaders[0]; + if(level.leaders.size > 1) + { + var_04 = maps\_utility::get_closest_living(self.origin,level.leaders); + } + + setup_follower(var_04); + return; + } + } + + if(!maps\_utility::is_in_array(level.leaders,self)) + { + level.leaders[level.leaders.size] = self; + } + + if(isdefined(level.squad_leader_behavior_func)) + { + self thread [[ level.squad_leader_behavior_func ]](); + } + else + { + self.goalradius = 2048; + var_05 = maps\_utility::getclosest(self.origin,level.players); + self.favoriteenemy = var_05; + self setgoalentity(var_05); + self setengagementmindist(300,200); + self setengagementmaxdist(512,720); + } + + thread wait_for_followers(); + thread enlarge_follower_goalradius_upon_seeing_player(); + if(!isdefined(level.new_squad_logic) || level.new_squad_logic == 0) + { + thread handle_all_followers_dying(var_01); + } + + self waittill("death"); + var_06 = []; + foreach(var_07 in level.leaders) + { + if(isdefined(var_07) && isalive(var_07)) + { + var_04[var_04.size] = var_07; + } + } + + level.leaders = var_04; + var_07 = undefined; + foreach(var_02 in param_00) + { + if(isalive(var_02)) + { + if(!isdefined(var_07)) + { + var_07 = var_02; + var_02 notify("promotion"); + var_02 thread setup_leader(param_00); + continue; + } + + var_02 thread setup_follower(var_07); + } + } +} + +//Function Number: 11 +enlarge_follower_goalradius_upon_seeing_player() +{ + level endon("squad_disband"); + self endon("new_leader"); + self endon("demotion"); + self endon("death"); + self waittill("enemy_visible"); + if(isdefined(self.squadmembers) && self.squadmembers.size) + { + foreach(var_01 in self.squadmembers) + { + var_01 notify("leader_saw_player"); + } + } +} + +//Function Number: 12 +wait_for_followers() +{ + level endon("squad_disband"); + self endon("new_leader"); + self endon("demotion"); + self endon("death"); + var_00 = self.moveplaybackrate; + for(;;) + { + wait 2; + if(isdefined(self.squadmembers) && self.squadmembers.size) + { + var_01 = maps\_utility::get_closest_living(self.origin,self.squadmembers); + if(isdefined(var_01) && distance(var_01.origin,self.origin) > 256) + { + self.moveplaybackrate = 0.85 * var_00; + } + else + { + self.moveplaybackrate = var_00; + } + } + } +} + +//Function Number: 13 +setup_follower(param_00) +{ + level endon("squad_disband"); + self notify("assigned_new_leader"); + self endon("assigned_new_leader"); + self endon("death"); + self endon("promotion"); + self.squadmembers = undefined; + self.leader = param_00; + thread leader_follower_count(param_00); + if(isdefined(level.var_3B89)) + { + self [[ level.var_3B89 ]](); + } + + if(isdefined(level.squad_follower_func)) + { + self [[ level.squad_follower_func ]](param_00); + return; + } + + thread follow_leader_regular(param_00); +} + +//Function Number: 14 +leader_follower_count(param_00) +{ + level endon("squad_disband"); + self endon("assigned_new_leader"); + param_00 endon("death"); + param_00.squadmembers[param_00.squadmembers.size] = self; + self waittill("death"); + if(!isdefined(self.leader)) + { + return; + } + + if(isalive(self.leader) && isdefined(self.leader.squadmembers) && self.leader.squadmembers.size > 0) + { + var_01 = []; + foreach(var_03 in param_00.squadmembers) + { + if(isalive(var_03)) + { + var_01[var_01.size] = var_03; + } + } + + param_00.squadmembers = var_01; + } +} + +//Function Number: 15 +setup_follower_advanced(param_00) +{ + if(is_riotshield(param_00)) + { + param_00.goalradius = 1300; + var_01 = undefined; + if(!param_00.back_occupied["right"] && !param_00.back_occupied["left"]) + { + if(common_scripts\utility::cointoss()) + { + follow_leader_riotshield("left"); + } + else + { + follow_leader_riotshield("right"); + } + + return; + } + + if(param_00.back_occupied["right"] && param_00.back_occupied["left"]) + { + follow_leader_regular(); + return; + } + + if(!param_00.back_occupied["right"] && param_00.back_occupied["left"]) + { + follow_leader_riotshield("right"); + return; + } + + if(param_00.back_occupied["right"] && !param_00.back_occupied["left"]) + { + follow_leader_riotshield("left"); + return; + } + + return; + } + + follow_leader_regular(); +} + +//Function Number: 16 +follow_leader_riotshield(param_00) +{ + level endon("squad_disband"); + self endon("death"); + self endon("promotion"); + self.goalradius = 128; + self.pathenemyfightdist = 192; + self.pathenemylookahead = 192; + self.favoriteenemy = undefined; + self setengagementmindist(300,200); + self setengagementmaxdist(512,720); + self.leader.back_occupied[param_00] = 1; + self.is_occupying = param_00; + thread setup_follower_goalradius_riotshield(); + for(;;) + { + var_01 = self.leader get_riotshield_back_pos(param_00,0); + if(!isdefined(var_01)) + { + follow_leader_regular(); + return; + } + + var_02 = self.leader.origin; + wait 0.2; + while(isdefined(self.leader) && isalive(self.leader) && distance(self.leader.origin,var_02) < 2) + { + var_02 = self.leader.origin; + wait 0.2; + } + + if(!isalive(self.leader) || !isdefined(var_01)) + { + self setgoalpos(self.origin); + continue; + } + + self setgoalpos(var_01); + } +} + +//Function Number: 17 +follow_leader_regular() +{ + level endon("squad_disband"); + self endon("death"); + self endon("promotion"); + self.goalradius = 128; + self.pathenemyfightdist = 192; + self.pathenemylookahead = 192; + self.favoriteenemy = undefined; + self setengagementmindist(300,200); + self setengagementmaxdist(512,720); + thread setup_follower_goalradius(); + for(;;) + { + wait 0.2; + if(!isalive(self.leader)) + { + self setgoalpos(self.origin); + continue; + } + + self setgoalpos(self.leader.origin); + } +} + +//Function Number: 18 +protector_leader_logic(param_00,param_01) +{ + level endon("squad_disband"); + self endon("death"); + self.back_occupied["left"] = 0; + self.back_occupied["right"] = 0; + self.protecting_obj = 1; + self.protector_obj_group = param_00; + var_02 = common_scripts\utility::getstruct(self.target,"targetname"); + bind_in_place(param_01,var_02.origin); + param_01 waittill("trigger"); + wait 5; + self.protecting_obj = 0; + self.goalradius = 512; + var_03 = maps\_utility::getclosest(self.origin,level.players); + self.favoriteenemy = var_03; + self setgoalentity(var_03); +} + +//Function Number: 19 +setup_follower_goalradius() +{ + common_scripts\utility::waittill_either("enemy_visible","leader_saw_player"); + self.goalradius = 600; + self.saw_player = 1; +} + +//Function Number: 20 +setup_follower_goalradius_riotshield() +{ + level endon("squad_disband"); + self endon("death"); + self endon("promotion"); + self.goalradius = 8; + self waittill("goal"); + var_00 = 10; + var_01 = 5; + var_02 = 120; + for(;;) + { + maps\_utility::cqb_walk("on"); + if(isdefined(self.protecting_obj) && self.protecting_obj) + { + wait 1; + continue; + } + + wait 30; + self.goalradius = 600; + maps\_utility::cqb_walk("off"); + wait 20; + self.goalradius = 8; + } + + self.goalradius = 600; + self.leader.back_occupied[self.is_occupying] = 0; +} + +//Function Number: 21 +get_riotshield_back_pos(param_00,param_01) +{ + if(!isdefined(param_00)) + { + return undefined; + } + + var_02 = undefined; + if(isdefined(param_01) && param_01) + { + if(isdefined(self.enemy) && isplayer(self.enemy)) + { + var_02 = vectortoangles(self.enemy - self.origin); + } + else + { + return undefined; + } + } + else + { + var_02 = self.angles; + } + + if(param_00 == "left") + { + var_03 = (var_02[0],var_02[1] - 145,var_02[2]); + } + else + { + var_03 = (var_03[0],var_03[1] + 145,var_03[2]); + } + + var_04 = vectornormalize(anglestoforward(var_03)) * 45; + return self.origin + var_04; +} + +//Function Number: 22 +bind_in_place(param_00,param_01) +{ + level endon("squad_disband"); + param_00 endon("trigger"); + self endon("death"); + for(;;) + { + self.goalradius = 8; + self setgoalpos(param_01); + wait 0.05; + } +} + +//Function Number: 23 +one_direction_trigger() +{ + self endon("trigger"); + var_00 = getent(self.target,"targetname"); + var_00 waittill("trigger"); + common_scripts\utility::trigger_off(); +} + +//Function Number: 24 +is_leader_riotshield(param_00) +{ + return isdefined(param_00.leader) && param_00.leader.classname == "actor_enemy_afghan_riotshield"; +} + +//Function Number: 25 +is_riotshield(param_00) +{ + if(param_00.classname == "actor_enemy_afghan_riotshield") + { + return 1; + } + + return 0; +} + +//Function Number: 26 +handle_all_followers_dying(param_00) +{ + level endon("squad_disband"); + self endon("death"); + for(;;) + { + wait 1; + var_01 = 0; + foreach(var_03 in param_00) + { + if(isalive(var_03)) + { + var_01++; + } + } + + if(var_01 == 1 && level.leaders.size > 1) + { + level.leaders = common_scripts\utility::array_remove(level.leaders,self); + var_05 = level.leaders[0]; + if(level.leaders.size > 1) + { + var_05 = maps\_utility::get_closest_living(self.origin,level.leaders); + } + + thread setup_follower(var_05); + self notify("demotion"); + return; + } + } +} + +//Function Number: 27 +drawleader() +{ + if(getdvar("squad_debug") == "" || getdvar("squad_debug") == "0") + { + return; + } + + var_00 = (1,1,1); + for(;;) + { + foreach(var_02 in level.leaders) + { + if(isalive(var_02) && isdefined(var_02.squadmembers)) + { + foreach(var_04 in var_02.squadmembers) + { + if(isdefined(var_04) && isalive(var_04)) + { + } + } + } + } + + wait 0.05; + } +} + +//Function Number: 28 +draw_debug_marker(param_00,param_01) +{ + if(getdvar("squad_debug") == "" || getdvar("squad_debug") == "0") + { + return; + } + + for(var_02 = 0;var_02 < 40;var_02++) + { + wait 0.05; + } +} + +//Function Number: 29 +drawfollowers() +{ + if(getdvar("squad_debug") == "" || getdvar("squad_debug") == "0") + { + return; + } + + for(;;) + { + var_00 = getaiarray(); + foreach(var_02 in var_00) + { + if(isdefined(var_02.leader)) + { + thread common_scripts\utility::draw_line_for_time(var_02.origin,var_02.leader.origin,0.5,0.5,1,0.1); + } + } + + wait 0.1; + } +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_stealth_vehicle.gsc b/MW3/PC/SP/maps/_stealth_vehicle.gsc new file mode 100644 index 0000000..4de064c --- /dev/null +++ b/MW3/PC/SP/maps/_stealth_vehicle.gsc @@ -0,0 +1,409 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_stealth_vehicle.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 24 + * Decompile Time: 284 ms + * Timestamp: 10/27/2023 2:20:24 AM +*******************************************************************/ + +//Function Number: 1 +flags_init() +{ + level._effect["lighthaze_snow_headlights"] = loadfx("misc/lighthaze_snow_headlights"); + level._effect["car_taillight_uaz_l"] = loadfx("misc/car_taillight_uaz_l"); + common_scripts\utility::flag_init("truck_guys_alerted"); + common_scripts\utility::flag_init("jeep_blown_up"); + common_scripts\utility::flag_init("jeep_stopped"); +} + +//Function Number: 2 +increase_fov_when_player_is_near() +{ + self endon("death"); + self endon("enemy"); + for(;;) + { + if(player_is_near()) + { + self.fovcosine = 0.01; + return; + } + + wait 0.5; + } +} + +//Function Number: 3 +player_is_near() +{ + foreach(var_01 in level.players) + { + if(distancesquared(self.origin,var_01.origin) < squared(self.footstepdetectdistsprint)) + { + return 1; + } + } + + return 0; +} + +//Function Number: 4 +stealth_truck_think() +{ + thread base_truck_think(); + thread truck_headlights(); + self waittill("death"); + common_scripts\utility::flag_set("jeep_blown_up"); +} + +//Function Number: 5 +base_truck_guys_think() +{ + self endon("death"); + level endon("_stealth_spotted"); + self endon("_stealth_attack"); + maps\_utility::ent_flag_init("jumped_out"); + thread truck_guys_think_jumpout(); + var_00 = []; + var_01 = []; + var_02 = []; + lib_055A::func_41CF("animation","wrapper",::truck_animation_wrapper); + lib_0559::func_4304(var_01); + lib_0559::func_4309(var_7B); + foreach(var_05, var_04 in var_02) + { + lib_0563::func_42C1(var_05,var_04); + } + + maps\_utility::ent_flag_set("_stealth_behavior_reaction_anim"); +} + +//Function Number: 6 +truck_guys_base_search_behavior(param_00) +{ + self endon("_stealth_enemy_alert_level_change"); + level endon("_stealth_spotted"); + self endon("_stealth_attack"); + self endon("death"); + self endon("pain_death"); + thread base_truck_guys_attacked_again(); + self.disablearrivals = 0; + self.disableexits = 0; + var_01 = distance(param_00.origin,self.origin); + self setgoalnode(param_00); + self.goalradius = var_01 * 0.5; + wait 0.05; + maps\_utility::set_generic_run_anim("_stealth_patrol_cqb"); + self waittill("goal"); + if(!common_scripts\utility::flag("_stealth_spotted") && !isdefined(self.enemy) || !self cansee(self.enemy)) + { + set_search_walk(); + lib_055A::func_41F2(param_00); + } +} + +//Function Number: 7 +base_truck_guys_attacked_again() +{ + self endon("death"); + self endon("_stealth_attack"); + level endon("_stealth_spotted"); + wait 2; + self waittill("_stealth_bad_event_listener"); + lib_055A::func_41EB(); + maps\_utility::ent_flag_set("not_first_attack"); +} + +//Function Number: 8 +set_search_walk() +{ + maps\_utility::disable_cqbwalk(); + maps\_utility::set_generic_run_anim("patrol_cold_gunup_search",1); + self.disablearrivals = 1; + self.disableexits = 1; +} + +//Function Number: 9 +truck_guys_think_jumpout() +{ + self endon("death"); + self endon("pain_death"); + for(;;) + { + self waittill("jumpedout"); + lib_055A::func_41F1(self.origin); + self.got_off_truck_origin = self.origin; + maps\_utility::ent_flag_set("jumped_out"); + self waittill("enteredvehicle"); + wait 0.15; + maps\_utility::ent_flag_clear("jumped_out"); + maps\_utility::ent_flag_set("_stealth_behavior_reaction_anim"); + } +} + +//Function Number: 10 +truck_animation_wrapper(param_00) +{ + self endon("death"); + self endon("pain_death"); + common_scripts\utility::flag_set("truck_guys_alerted"); + maps\_utility::ent_flag_wait("jumped_out"); + lib_055A::func_4200(param_00); +} + +//Function Number: 11 +truck_guys_reaction_behavior(param_00) +{ + self endon("death"); + self endon("pain_death"); + level endon("_stealth_spotted"); + self endon("_stealth_attack"); + common_scripts\utility::flag_set("truck_guys_alerted"); + maps\_utility::ent_flag_wait("jumped_out"); + if(!common_scripts\utility::flag("truck_guys_alerted")) + { + return; + } + + if(common_scripts\utility::flag_exist("truck_guys_not_going_back") && common_scripts\utility::flag("truck_guys_not_going_back")) + { + return; + } + + if(!common_scripts\utility::flag("_stealth_spotted") && !maps\_utility::ent_flag("_stealth_attack")) + { + var_01 = maps\_utility::get_closest_player(self.origin); + var_02 = lib_055A::func_41F3(var_01.origin,1500,128); + if(isdefined(var_02)) + { + thread truck_guys_base_search_behavior(var_02); + } + } + + var_03 = lib_055A::func_41DB("_stealth_spotted"); + if(common_scripts\utility::flag(var_03)) + { + common_scripts\utility::flag_waitopen(var_03); + return; + } + + self waittill("normal"); +} + +//Function Number: 12 +truck_guys_no_enemy_reaction_behavior(param_00) +{ + self endon("death"); + self endon("pain_death"); + level endon("_stealth_spotted"); + self endon("_stealth_attack"); + common_scripts\utility::flag_set("truck_guys_alerted"); + maps\_utility::ent_flag_wait("jumped_out"); + if(!common_scripts\utility::flag("truck_guys_alerted")) + { + return; + } + + if(common_scripts\utility::flag_exist("truck_guys_not_going_back") && common_scripts\utility::flag("truck_guys_not_going_back")) + { + return; + } + + if(!common_scripts\utility::flag("_stealth_spotted") && !maps\_utility::ent_flag("_stealth_attack")) + { + var_01 = self._stealth.logic.event.awareness_param[param_00]; + var_02 = lib_055A::func_41F3(var_01,300,40); + thread lib_055A::func_41F4(); + if(isdefined(var_02)) + { + thread truck_guys_base_search_behavior(var_02); + } + } + + var_03 = lib_055A::func_41DB("_stealth_spotted"); + if(common_scripts\utility::flag(var_03)) + { + common_scripts\utility::flag_waitopen(var_03); + return; + } + + self waittill("normal"); +} + +//Function Number: 13 +truck_alert_level_attack(param_00) +{ + self endon("death"); + self endon("pain_death"); + common_scripts\utility::flag_set("truck_guys_alerted"); + maps\_utility::ent_flag_wait("jumped_out"); +} + +//Function Number: 14 +set_alert_cold_patrol_anims() +{ + self.patrol_walk_anim = "patrol_cold_gunup"; + self.patrol_walk_twitch = "patrol_gunup_twitch_weights"; +} + +//Function Number: 15 +wait_reaction_time() +{ + var_00 = distance(self.origin,maps\_utility::get_closest_player(self.origin).origin); + var_01 = var_00 - 200 / 1000; + var_01 = clamp(var_01,0,0.5); + wait var_01; +} + +//Function Number: 16 +base_truck_think() +{ + self endon("death"); + thread dialog_truck_coming(); + thread dialog_jeep_stopped(); + thread unload_and_attack_if_stealth_broken_and_close(); + common_scripts\utility::flag_wait("truck_guys_alerted"); + var_00 = maps\_utility::get_living_ai_array("truck_guys","script_noteworthy"); + if(var_00.size == 0) + { + self vehicle_setspeed(0,15); + return; + } + + var_01 = common_scripts\utility::random(var_00); + var_01 lib_055A::func_41F4(); + self waittill("safe_to_unload"); + self vehicle_setspeed(0,15); + wait 1; + maps\_vehicle::vehicle_unload(); + common_scripts\utility::flag_set("jeep_stopped"); +} + +//Function Number: 17 +unload_and_attack_if_stealth_broken_and_close() +{ + self endon("truck_guys_alerted"); + for(;;) + { + common_scripts\utility::flag_wait("_stealth_spotted"); + foreach(var_01 in level.players) + { + thread waittill_player_in_range(var_01); + } + + self waittill("player_in_range"); + if(!common_scripts\utility::flag("_stealth_spotted")) + { + continue; + } + else + { + break; + } + } + + common_scripts\utility::flag_set("truck_guys_alerted"); +} + +//Function Number: 18 +waittill_player_in_range(param_00) +{ + self endon("player_in_range"); + param_00 maps\_utility::waittill_entity_in_range(self,800); + self notify("player_in_range"); +} + +//Function Number: 19 +truck_headlights() +{ + playfxontag(level._effect["lighthaze_snow_headlights"],self,"TAG_LIGHT_RIGHT_FRONT"); + playfxontag(level._effect["lighthaze_snow_headlights"],self,"TAG_LIGHT_LEFT_FRONT"); + playfxontag(level._effect["car_taillight_uaz_l"],self,"TAG_LIGHT_LEFT_TAIL"); + playfxontag(level._effect["car_taillight_uaz_l"],self,"TAG_LIGHT_RIGHT_TAIL"); + self waittill("death"); + if(isdefined(self)) + { + delete_truck_headlights(); + } +} + +//Function Number: 20 +delete_truck_headlights() +{ + stopfxontag(level._effect["lighthaze_snow_headlights"],self,"TAG_LIGHT_RIGHT_FRONT"); + stopfxontag(level._effect["lighthaze_snow_headlights"],self,"TAG_LIGHT_LEFT_FRONT"); + stopfxontag(level._effect["car_taillight_uaz_l"],self,"TAG_LIGHT_LEFT_TAIL"); + stopfxontag(level._effect["car_taillight_uaz_l"],self,"TAG_LIGHT_RIGHT_TAIL"); +} + +//Function Number: 21 +dialog_truck_coming() +{ + level endon("special_op_terminated"); + level endon("jeep_stopped"); + level endon("jeep_blown_up"); + var_00 = 1; + for(;;) + { + waittill_player_in_truck_range(); + var_01 = maps\_utility::within_fov(self.origin,self.angles,self.close_player.origin,cos(45)); + if(var_01) + { + if(!var_00 && common_scripts\utility::cointoss()) + { + maps\_utility::radio_dialogue("cliff_pri_truckcomingback"); + } + else + { + maps\_utility::radio_dialogue("cliff_pri_truckiscoming"); + } + + var_00 = 0; + wait 10; + } + + wait 1; + } +} + +//Function Number: 22 +waittill_player_in_truck_range() +{ + self.close_player = undefined; + foreach(var_01 in level.players) + { + var_01 thread watch_for_truck(self); + } + + level waittill("player_in_truck_range"); +} + +//Function Number: 23 +watch_for_truck(param_00) +{ + level endon("player_in_truck_range"); + param_00 maps\_utility::waittill_entity_in_range(self,1200); + param_00.close_player = self; + level notify("player_in_truck_range"); +} + +//Function Number: 24 +dialog_jeep_stopped() +{ + level endon("special_op_terminated"); + self waittill("unloading"); + if(common_scripts\utility::flag("_stealth_spotted")) + { + return; + } + + maps\_utility::radio_dialogue("cliff_pri_headsup"); + if(common_scripts\utility::flag("_stealth_spotted")) + { + return; + } + + maps\_utility::radio_dialogue("cliff_pri_lookingaround"); +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_treadfx.gsc b/MW3/PC/SP/maps/_treadfx.gsc new file mode 100644 index 0000000..9c9b13f --- /dev/null +++ b/MW3/PC/SP/maps/_treadfx.gsc @@ -0,0 +1,185 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_treadfx.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 3 + * Decompile Time: 47 ms + * Timestamp: 10/27/2023 2:23:17 AM +*******************************************************************/ + +//Function Number: 1 +main(param_00) +{ + if(!isdefined(param_00)) + { + return; + } + + level.vehicle_treads[param_00] = 1; + switch(param_00) + { + case "script_vehicle_m1a1_abrams_player_tm": + case "script_vehicle_m1a1_abrams_minigun": + setallvehiclefx(param_00,"treadfx/tread_dust_hamburg_cheap"); + setvehiclefx(param_00,"water"); + setvehiclefx(param_00,"paintedmetal"); + setvehiclefx(param_00,"riotshield"); + break; + + case "script_vehicle_uk_utility_truck_no_rail_player": + case "script_vehicle_uk_utility_truck_no_rail": + case "script_vehicle_uk_utility_truck": + setallvehiclefx(param_00,"treadfx/tread_dust_default"); + setvehiclefx(param_00,"water"); + setvehiclefx(param_00,"rock"); + setvehiclefx(param_00,"metal"); + setvehiclefx(param_00,"brick"); + setvehiclefx(param_00,"plaster"); + setvehiclefx(param_00,"asphalt"); + setvehiclefx(param_00,"paintedmetal"); + setvehiclefx(param_00,"riotshield"); + setvehiclefx(param_00,"snow","treadfx/tread_snow_default"); + setvehiclefx(param_00,"slush","treadfx/tread_snow_default"); + setvehiclefx(param_00,"ice","treadfx/tread_ice_default"); + break; + + case "script_vehicle_b2": + case "script_vehicle_pavelow_noai": + case "script_vehicle_pavelow": + case "script_vehicle_mi28_flying_low": + case "script_vehicle_osprey_fly": + case "script_vehicle_osprey": + case "script_vehicle_mi28_flying": + case "script_vehicle_ch46e_ny_harbor": + case "script_vehicle_ch46e_low": + case "script_vehicle_ch46e_notsolid": + case "script_vehicle_ch46e": + case "script_vehicle_mi17_woodland_landing_noai": + case "script_vehicle_mi17_woodland_fly_cheap_noai": + case "script_vehicle_mi17_woodland_fly_noai": + case "script_vehicle_mi17_woodland_noai": + case "script_vehicle_mi17_woodland_landing_so": + case "script_vehicle_mi17_woodland_landing": + case "script_vehicle_mi17_woodland_fly_cheap": + case "script_vehicle_mi17_woodland_fly": + case "script_vehicle_mi17_woodland": + case "script_vehicle_harrier": + case "script_vehicle_blackhawk_minigun_low": + case "script_vehicle_blackhawk_hero_hamburg": + case "script_vehicle_blackhawk_low_thermal": + case "script_vehicle_blackhawk_low": + case "script_vehicle_blackhawk_hero_sas_night": + case "script_vehicle_blackhawk": + case "script_vehicle_littlebird_player": + case "script_vehicle_littlebird_bench": + case "script_vehicle_cobra_helicopter_fly_player": + case "script_vehicle_cobra_helicopter_player": + case "script_vehicle_cobra_helicopter_low": + case "script_vehicle_cobra_helicopter_fly_low": + case "script_vehicle_cobra_helicopter_fly": + case "script_vehicle_cobra_helicopter": + case "script_vehicle_apache_dark": + case "script_vehicle_apache_mg": + case "script_vehicle_apache": + case "script_vehicle_mi24p_hind_woodland_opened_door": + case "script_vehicle_ny_harbor_hind": + case "script_vehicle_ny_blackhawk": + case "script_vehicle_littlebird_md500": + case "script_vehicle_littlebird_armed": + case "b2": + case "mig29": + case "blackhawk_minigun_so": + case "harrier": + case "pavelow": + case "mi28": + case "littlebird": + case "littlebird_player": + case "cobra_player": + case "cobra": + case "mi17_noai": + case "mi17": + case "ny_harbor_hind": + case "hind": + case "seaknight": + case "apache": + case "blackhawk_minigun": + case "blackhawk": + setallvehiclefx(param_00,"treadfx/heli_dust_default"); + setvehiclefx(param_00,"water","treadfx/heli_water"); + setvehiclefx(param_00,"snow","treadfx/heli_snow_default"); + setvehiclefx(param_00,"slush","treadfx/heli_snow_default"); + setvehiclefx(param_00,"ice","treadfx/heli_snow_default"); + break; + + default: + setallvehiclefx(param_00,"treadfx/tread_dust_default"); + setvehiclefx(param_00,"water"); + setvehiclefx(param_00,"concrete"); + setvehiclefx(param_00,"rock"); + setvehiclefx(param_00,"metal"); + setvehiclefx(param_00,"brick"); + setvehiclefx(param_00,"plaster"); + setvehiclefx(param_00,"asphalt"); + setvehiclefx(param_00,"paintedmetal"); + setvehiclefx(param_00,"riotshield"); + setvehiclefx(param_00,"snow","treadfx/tread_snow_default"); + setvehiclefx(param_00,"slush","treadfx/tread_snow_default"); + setvehiclefx(param_00,"ice","treadfx/tread_ice_default"); + break; + } +} + +//Function Number: 2 +setvehiclefx(param_00,param_01,param_02) +{ + if(!isdefined(level._vehicle_effect)) + { + level._vehicle_effect = []; + } + + if(!isdefined(param_02)) + { + level._vehicle_effect[param_00][param_01] = -1; + return; + } + + level._vehicle_effect[param_00][param_01] = loadfx(param_02); +} + +//Function Number: 3 +setallvehiclefx(param_00,param_01) +{ + setvehiclefx(param_00,"brick",param_01); + setvehiclefx(param_00,"bark",param_01); + setvehiclefx(param_00,"carpet",param_01); + setvehiclefx(param_00,"cloth",param_01); + setvehiclefx(param_00,"concrete",param_01); + setvehiclefx(param_00,"dirt",param_01); + setvehiclefx(param_00,"flesh",param_01); + setvehiclefx(param_00,"foliage",param_01); + setvehiclefx(param_00,"glass",param_01); + setvehiclefx(param_00,"grass",param_01); + setvehiclefx(param_00,"gravel",param_01); + setvehiclefx(param_00,"ice",param_01); + setvehiclefx(param_00,"metal",param_01); + setvehiclefx(param_00,"mud",param_01); + setvehiclefx(param_00,"paper",param_01); + setvehiclefx(param_00,"plaster",param_01); + setvehiclefx(param_00,"rock",param_01); + setvehiclefx(param_00,"sand",param_01); + setvehiclefx(param_00,"snow",param_01); + setvehiclefx(param_00,"water",param_01); + setvehiclefx(param_00,"wood",param_01); + setvehiclefx(param_00,"asphalt",param_01); + setvehiclefx(param_00,"ceramic",param_01); + setvehiclefx(param_00,"plastic",param_01); + setvehiclefx(param_00,"rubber",param_01); + setvehiclefx(param_00,"cushion",param_01); + setvehiclefx(param_00,"fruit",param_01); + setvehiclefx(param_00,"paintedmetal",param_01); + setvehiclefx(param_00,"riotshield",param_01); + setvehiclefx(param_00,"slush",param_01); + setvehiclefx(param_00,"default",param_01); + setvehiclefx(param_00,"none"); +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_treeburst.gsc b/MW3/PC/SP/maps/_treeburst.gsc new file mode 100644 index 0000000..cfd68a7 --- /dev/null +++ b/MW3/PC/SP/maps/_treeburst.gsc @@ -0,0 +1,116 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_treeburst.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 4 + * Decompile Time: 45 ms + * Timestamp: 10/27/2023 2:20:25 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + var_00 = getentarray("treeburst","script_noteworthy"); + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + var_00[var_01] thread func_435F(); + } +} + +//Function Number: 2 +func_435F() +{ + self waittill("treeburst"); + if(isdefined(self.var_4360)) + { + var_00 = self.var_4360; + } + else + { + var_00 = randomint(360); + } + + var_01 = (self.angles[0],var_00,self.angles[2]); + var_02 = anglestoforward(var_01); + var_02 = var_02 * 100; + var_03 = self.origin + var_02 + (0,0,512); + var_04 = var_03 + (0,0,-1024); + var_05 = bullettrace(var_03,var_04,0,self); + var_06 = self.origin + var_02 - var_05["position"]; + var_07 = var_06[2]; + var_08 = 0; + var_09 = 0; + var_0A = var_09; + var_0B = 0; + var_0C = var_0B; + while(var_09 < var_07) + { + var_08 = var_08 + 340; + var_0A = var_09; + var_09 = var_09 + var_08; + var_0C = var_0B; + var_0B++; + } + + var_0D = var_0A - var_07; + if(var_0D < 0) + { + var_0D = var_0D * -1; + } + + var_0E = var_0C + var_0D / var_08; + self movegravity(var_02,var_0E); + self waittill("movedone"); + var_0F = vectornormalize(var_02); + var_0F = var_0F * 320; + var_03 = self.origin + var_0F + (0,0,512); + var_04 = var_03 + (0,0,-1024); + var_05 = bullettrace(var_03,var_04,0,self); + var_10 = var_05["position"]; + var_11 = anglestoup(self.angles); + var_12 = vectortoangles(var_11); + var_13 = var_10 - self.origin; + var_14 = vectortoangles(var_13); + var_15 = spawn("script_origin",self.origin); + var_15.origin = self.origin; + var_15.angles = (var_12[0],var_14[1],var_14[2]); + self linkto(var_15); + var_15 rotateto(var_14,1.15,0.5,0); + var_15 waittill("rotatedone"); + var_15 rotatepitch(-2.5,0.21,0.05,0.15); + var_15 waittill("rotatedone"); + var_15 rotatepitch(2.5,0.26,0.15,0.1); + var_15 waittill("rotatedone"); + self unlink(); + var_15 delete(); +} + +//Function Number: 3 +drawline(param_00,param_01,param_02,param_03) +{ + wait 0.05; +} + +//Function Number: 4 +func_4361(param_00,param_01,param_02) +{ + if(!isdefined(param_02)) + { + param_02 = 1; + } + + if(isdefined(param_01)) + { + wait 0.05; + return; + } + + for(;;) + { + var_03 = (1,0,0); + var_04 = (0,1,0); + var_05 = (0,0,1); + wait 0.05; + } +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_utility.gsc b/MW3/PC/SP/maps/_utility.gsc new file mode 100644 index 0000000..4ff76ca --- /dev/null +++ b/MW3/PC/SP/maps/_utility.gsc @@ -0,0 +1,12313 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_utility.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 787 + * Decompile Time: 12931 ms + * Timestamp: 10/27/2023 2:24:01 AM +*******************************************************************/ + +//Function Number: 1 +is_coop() +{ + if(issplitscreen() || getdvar("coop") == "1") + { + return 1; + } + + return 0; +} + +//Function Number: 2 +is_coop_online() +{ + if(issplitscreen()) + { + return 0; + } + + if(!is_coop()) + { + return 0; + } + + return 1; +} + +//Function Number: 3 +is_player_down(param_00) +{ + if(param_00 ent_flag_exist("laststand_downed")) + { + return param_00 ent_flag("laststand_downed"); + } + + if(isdefined(param_00.laststand)) + { + return param_00.laststand; + } + + return !isalive(param_00); +} + +//Function Number: 4 +is_player_down_and_out(param_00) +{ + if(!isdefined(param_00.down_part2_proc_ran)) + { + return 0; + } + + return param_00.down_part2_proc_ran; +} + +//Function Number: 5 +killing_will_down(param_00) +{ + if(laststand_enabled()) + { + return param_00 maps\_laststand::laststand_downing_will_fail() == 0; + } + + return 0; +} + +//Function Number: 6 +clear_custom_eog_summary() +{ + for(var_00 = 1;var_00 <= 2;var_00++) + { + for(var_01 = 1;var_01 <= 4;var_01++) + { + for(var_02 = 1;var_02 <= 9;var_02++) + { + setdvar("ui_eog_r" + var_02 + "c" + var_01 + "_player" + var_00,""); + setdvar("ui_eog_r" + var_02 + "c" + var_01 + "_player" + var_00,""); + } + } + + setdvar("ui_eog_success_heading_player" + var_00,""); + } +} + +//Function Number: 7 +set_custom_eog_summary(param_00,param_01,param_02) +{ + var_03 = int(param_00); + var_04 = int(param_01); + var_05 = ""; + if(level.players.size > 1) + { + if(self == level.player) + { + var_05 = "ui_eog_r" + var_03 + "c" + var_04 + "_player1"; + } + else if(self == level.player2) + { + var_05 = "ui_eog_r" + var_03 + "c" + var_04 + "_player2"; + } + else + { + } + } + else + { + var_05 = "ui_eog_r" + var_03 + "c" + var_04 + "_player1"; + } + + setdvar(var_05,param_02); +} + +//Function Number: 8 +add_custom_eog_summary_line(param_00,param_01,param_02,param_03,param_04) +{ + if(!isdefined(self.eog_line)) + { + self.eog_line = 0; + } + + var_05 = undefined; + if(isdefined(param_04)) + { + var_05 = param_04; + if(param_04 > self.eog_line) + { + self.eog_line = param_04; + } + } + else + { + self.eog_line++; + var_05 = self.eog_line; + } + + set_custom_eog_summary(var_05,1,param_00); + var_06 = []; + if(isdefined(param_03)) + { + } + + if(isdefined(param_03)) + { + } + + if(isdefined(param_02)) + { + } + + var_07 = 0; + while(var_07 < var_7B.size) + { + set_custom_eog_summary(var_06,4 - var_07,var_7B[var_07]); + var_07++ = var_7B[var_7B.size]; + } +} + +//Function Number: 9 +add_custom_eog_summary_line_blank() +{ + if(!isdefined(self.eog_line)) + { + self.eog_line = 0; + } + + self.eog_line++; +} + +//Function Number: 10 +set_eog_success_heading(param_00) +{ + var_01 = ""; + if(level.players.size > 1) + { + if(self == level.player) + { + var_01 = "ui_eog_success_heading_player1"; + } + else if(self == level.player2) + { + var_01 = "ui_eog_success_heading_player2"; + } + else + { + } + } + else + { + var_01 = "ui_eog_success_heading_player1"; + } + + setdvar(var_01,param_00); +} + +//Function Number: 11 +is_survival() +{ + return is_specialop() && getdvarint("so_survival") > 0; +} + +//Function Number: 12 +laststand_enabled() +{ + return isdefined(level.laststand_type) && level.laststand_type > 0; +} + +//Function Number: 13 +is_specialop() +{ + return getdvarint("specialops") >= 1; +} + +//Function Number: 14 +convert_to_time_string(param_00,param_01) +{ + var_02 = ""; + if(param_00 < 0) + { + var_02 = var_02 + "-"; + } + + param_00 = round_float(param_00,1,0); + var_03 = param_00 * 100; + var_03 = int(var_03); + var_03 = abs(var_03); + var_04 = var_03 / 6000; + var_04 = int(var_04); + var_02 = var_02 + var_04; + var_05 = var_03 / 100; + var_05 = int(var_05); + var_05 = var_05 - var_04 * 60; + if(var_05 < 10) + { + var_02 = var_02 + ":0" + var_05; + } + else + { + var_02 = var_02 + ":" + var_05; + } + + if(isdefined(param_01) && param_01) + { + var_06 = var_03; + var_06 = var_06 - var_04 * 6000; + var_06 = var_06 - var_05 * 100; + var_06 = int(var_06 / 10); + var_02 = var_02 + "." + var_06; + } + + return var_02; +} + +//Function Number: 15 +round_float(param_00,param_01,param_02) +{ + param_01 = int(param_01); + if(param_01 < 0 || param_01 > 4) + { + return param_00; + } + + var_03 = 1; + for(var_04 = 1;var_04 <= param_01;var_04++) + { + var_03 = var_03 * 10; + } + + var_05 = param_00 * var_03; + if(!isdefined(param_02) || param_02) + { + var_05 = floor(var_05); + } + else + { + var_05 = ceil(var_05); + } + + param_00 = var_05 / var_03; + return param_00; +} + +//Function Number: 16 +round_millisec_on_sec(param_00,param_01,param_02) +{ + var_03 = param_00 / 1000; + var_03 = round_float(var_03,param_01,param_02); + param_00 = var_03 * 1000; + return int(param_00); +} + +//Function Number: 17 +isdefined_test(param_00,param_01,param_02) +{ + if(!isdefined(param_00)) + { + return 0; + } + + if(!isdefined(param_01)) + { + return 1; + } + + if(!isdefined(param_02)) + { + param_02 = "=="; + } + + switch(param_02) + { + case "==": + return param_00 == param_01; + + case "<": + return param_00 < param_01; + + case ">": + return param_00 > param_01; + + case "<=": + return param_00 <= param_01; + + case ">=": + return param_00 >= param_01; + } + + return 1; +} + +//Function Number: 18 +set_vision_set(param_00,param_01) +{ + if(maps\_utility_code::init_vision_set(param_00)) + { + return; + } + + if(!isdefined(param_01)) + { + param_01 = 1; + } + + visionsetnaked(param_00,param_01); + setdvar("vision_set_current",param_00); +} + +//Function Number: 19 +set_vision_set_player(param_00,param_01) +{ + if(maps\_utility_code::init_vision_set(param_00)) + { + return; + } + + if(!isdefined(param_01)) + { + param_01 = 1; + } + + self visionsetnakedforplayer(param_00,param_01); +} + +//Function Number: 20 +set_nvg_vision(param_00,param_01) +{ + if(!isdefined(param_01)) + { + param_01 = 1; + } + + visionsetnight(param_00,param_01); +} + +//Function Number: 21 +sun_light_fade(param_00,param_01,param_02) +{ + param_02 = int(param_02 * 20); + var_03 = []; + for(var_04 = 0;var_04 < 3;var_04++) + { + var_03[var_04] = param_00[var_04] - param_01[var_04] / param_02; + } + + var_05 = []; + for(var_04 = 0;var_04 < param_02;var_04++) + { + wait 0.05; + for(var_06 = 0;var_06 < 3;var_06++) + { + var_05[var_06] = param_00[var_06] - var_03[var_06] * var_04; + } + + setsunlight(var_05[0],var_05[1],var_05[2]); + } + + setsunlight(param_01[0],param_01[1],param_01[2]); +} + +//Function Number: 22 +ent_flag_wait(param_00) +{ + while(isdefined(self) && !self.ent_flag[param_00]) + { + self waittill(param_00); + } +} + +//Function Number: 23 +ent_flag_wait_vehicle_node(param_00) +{ + while(isdefined(self) && !self.ent_flag[param_00]) + { + self waittill(param_00); + } +} + +//Function Number: 24 +ent_flag_wait_either(param_00,param_01) +{ + while(isdefined(self)) + { + if(ent_flag(param_00)) + { + return; + } + + if(ent_flag(param_01)) + { + return; + } + + common_scripts\utility::waittill_either(param_00,param_01); + } +} + +//Function Number: 25 +ent_flag_wait_or_timeout(param_00,param_01) +{ + var_02 = gettime(); + while(isdefined(self)) + { + if(self.ent_flag[param_00]) + { + break; + } + + if(gettime() >= var_02 + param_01 * 1000) + { + break; + } + + maps\_utility_code::ent_wait_for_flag_or_time_elapses(param_00,param_01); + } +} + +//Function Number: 26 +ent_flag_waitopen(param_00) +{ + while(isdefined(self) && self.ent_flag[param_00]) + { + self waittill(param_00); + } +} + +//Function Number: 27 +ent_flag_assert(param_00) +{ +} + +//Function Number: 28 +ent_flag_waitopen_either(param_00,param_01) +{ + while(isdefined(self)) + { + if(!ent_flag(param_00)) + { + return; + } + + if(!ent_flag(param_01)) + { + return; + } + + common_scripts\utility::waittill_either(param_00,param_01); + } +} + +//Function Number: 29 +ent_flag_init(param_00) +{ + if(!isdefined(self.ent_flag)) + { + self.ent_flag = []; + self.ent_flags_lock = []; + } + + self.ent_flag[param_00] = 0; +} + +//Function Number: 30 +ent_flag_exist(param_00) +{ + if(isdefined(self.ent_flag) && isdefined(self.ent_flag[param_00])) + { + return 1; + } + + return 0; +} + +//Function Number: 31 +ent_flag_set_delayed(param_00,param_01) +{ + self endon("death"); + wait param_01; + ent_flag_set(param_00); +} + +//Function Number: 32 +ent_flag_set(param_00) +{ + self.ent_flag[param_00] = 1; + self notify(param_00); +} + +//Function Number: 33 +ent_flag_clear(param_00) +{ + if(self.ent_flag[param_00]) + { + self.ent_flag[param_00] = 0; + self notify(param_00); + } +} + +//Function Number: 34 +ent_flag_clear_delayed(param_00,param_01) +{ + wait param_01; + ent_flag_clear(param_00); +} + +//Function Number: 35 +ent_flag(param_00) +{ + return self.ent_flag[param_00]; +} + +//Function Number: 36 +get_closest_to_player_view(param_00,param_01,param_02,param_03) +{ + if(!param_00.size) + { + return; + } + + if(!isdefined(param_01)) + { + param_01 = level.player; + } + + if(!isdefined(param_03)) + { + param_03 = -1; + } + + var_04 = param_01.origin; + if(isdefined(param_02) && param_02) + { + var_04 = param_01 geteye(); + } + + var_05 = undefined; + var_06 = param_01 getplayerangles(); + var_07 = anglestoforward(var_06); + var_08 = -1; + foreach(var_0A in param_00) + { + var_0B = vectortoangles(var_0A.origin - var_04); + var_0C = anglestoforward(var_0B); + var_0D = vectordot(var_07,var_0C); + if(var_0D < var_08) + { + continue; + } + + if(var_0D < param_03) + { + continue; + } + + var_08 = var_0D; + var_05 = var_0A; + } + + return var_05; +} + +//Function Number: 37 +get_closest_index_to_player_view(param_00,param_01,param_02) +{ + if(!param_00.size) + { + return; + } + + if(!isdefined(param_01)) + { + param_01 = level.player; + } + + var_03 = param_01.origin; + if(isdefined(param_02) && param_02) + { + var_03 = param_01 geteye(); + } + + var_04 = undefined; + var_05 = param_01 getplayerangles(); + var_06 = anglestoforward(var_05); + var_07 = -1; + for(var_08 = 0;var_08 < param_00.size;var_08++) + { + var_09 = vectortoangles(param_00[var_08].origin - var_03); + var_0A = anglestoforward(var_09); + var_0B = vectordot(var_06,var_0A); + if(var_0B < var_07) + { + continue; + } + + var_07 = var_0B; + var_04 = var_08; + } + + return var_04; +} + +//Function Number: 38 +flag_trigger_init(param_00,param_01,param_02) +{ + common_scripts\utility::flag_init(param_00); + if(!isdefined(param_02)) + { + param_02 = 0; + } + + param_01 thread _flag_wait_trigger(param_00,param_02); + return param_01; +} + +//Function Number: 39 +flag_triggers_init(param_00,param_01,param_02) +{ + common_scripts\utility::flag_init(param_00); + if(!isdefined(param_02)) + { + param_02 = 0; + } + + for(var_03 = 0;var_03 < param_01.size;var_03++) + { + param_01[var_03] thread _flag_wait_trigger(param_00,0); + } + + return param_01; +} + +//Function Number: 40 +flag_set_delayed(param_00,param_01) +{ + wait param_01; + common_scripts\utility::flag_set(param_00); +} + +//Function Number: 41 +flag_clear_delayed(param_00,param_01) +{ + wait param_01; + common_scripts\utility::flag_clear(param_00); +} + +//Function Number: 42 +_flag_wait_trigger(param_00,param_01) +{ + self endon("death"); + for(;;) + { + self waittill("trigger",var_02); + common_scripts\utility::flag_set(param_00); + if(!param_01) + { + return; + } + + while(var_02 istouching(self)) + { + wait 0.05; + } + + common_scripts\utility::flag_clear(param_00); + } +} + +//Function Number: 43 +level_end_save() +{ + if(arcademode()) + { + return; + } + + if(level.missionfailed) + { + return; + } + + if(common_scripts\utility::flag("game_saving")) + { + return; + } + + for(var_00 = 0;var_00 < level.players.size;var_00++) + { + var_01 = level.players[var_00]; + if(!isalive(var_01)) + { + return; + } + } + + common_scripts\utility::flag_set("game_saving"); + var_02 = "levelshots / autosave / autosave_" + level.script + "end"; + savegame("levelend",&"AUTOSAVE_AUTOSAVE",var_02,1); + common_scripts\utility::flag_clear("game_saving"); +} + +//Function Number: 44 +add_extra_autosave_check(param_00,param_01,param_02) +{ + level._extra_autosave_checks[param_00] = []; + level._extra_autosave_checks[param_00]["func"] = param_01; + level._extra_autosave_checks[param_00]["msg"] = param_02; +} + +//Function Number: 45 +remove_extra_autosave_check(param_00) +{ + level._extra_autosave_checks[param_00] = undefined; +} + +//Function Number: 46 +autosave_stealth() +{ + thread autosave_by_name_thread("autosave_stealth",8,1); +} + +//Function Number: 47 +autosave_tactical() +{ + maps\_utility_code::autosave_tactical_setup(); + thread maps\_utility_code::autosave_tactical_proc(); +} + +//Function Number: 48 +autosave_by_name(param_00) +{ + thread autosave_by_name_thread(param_00); +} + +//Function Number: 49 +autosave_by_name_silent(param_00) +{ + thread autosave_by_name_thread(param_00,undefined,undefined,1); +} + +//Function Number: 50 +autosave_by_name_thread(param_00,param_01,param_02,param_03) +{ + if(!isdefined(level.curautosave)) + { + level.curautosave = 1; + } + + var_04 = "levelshots/autosave/autosave_" + level.script + level.curautosave; + var_05 = level maps\_autosave::tryautosave(level.curautosave,"autosave",var_04,param_01,param_02,param_03); + if(isdefined(var_05) && var_05) + { + level.curautosave++; + } +} + +//Function Number: 51 +autosave_or_timeout(param_00,param_01) +{ + thread autosave_by_name_thread(param_00,param_01); +} + +//Function Number: 52 +debug_message(param_00,param_01,param_02,param_03) +{ + if(!isdefined(param_02)) + { + param_02 = 5; + } + + if(isdefined(param_03)) + { + param_03 endon("death"); + param_01 = param_03.origin; + } + + for(var_04 = 0;var_04 < param_02 * 20;var_04++) + { + if(!isdefined(param_03)) + { + } + else + { + } + + wait 0.05; + } +} + +//Function Number: 53 +debug_message_ai(param_00,param_01) +{ + self notify("debug_message_ai"); + self endon("debug_message_ai"); + self endon("death"); + if(!isdefined(param_01)) + { + param_01 = 5; + } + + for(var_02 = 0;var_02 < param_01 * 20;var_02++) + { + wait 0.05; + } +} + +//Function Number: 54 +debug_message_clear(param_00,param_01,param_02,param_03) +{ + if(isdefined(param_03)) + { + level notify(param_00 + param_03); + level endon(param_00 + param_03); + } + else + { + level notify(param_00); + level endon(param_00); + } + + if(!isdefined(param_02)) + { + param_02 = 5; + } + + for(var_04 = 0;var_04 < param_02 * 20;var_04++) + { + wait 0.05; + } +} + +//Function Number: 55 +chain_off(param_00) +{ + var_01 = getentarray("trigger_friendlychain","classname"); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + if(isdefined(var_01[var_02].script_chain) && var_01[var_02].script_chain == param_00) + { + if(isdefined(var_01[var_02].oldorigin)) + { + var_01[var_02].origin = var_01[var_02].oldorigin; + } + else + { + var_01[var_02].oldorigin = var_01[var_02].origin; + } + + var_01[var_02].origin = var_01[var_02].origin + (0,0,-5000); + } + } +} + +//Function Number: 56 +chain_on(param_00) +{ + var_01 = getentarray("trigger_friendlychain","classname"); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + if(isdefined(var_01[var_02].script_chain) && var_01[var_02].script_chain == param_00) + { + if(isdefined(var_01[var_02].oldorigin)) + { + var_01[var_02].origin = var_01[var_02].oldorigin; + } + } + } +} + +//Function Number: 57 +precache(param_00) +{ + var_01 = spawn("script_model",(0,0,0)); + var_01.origin = level.player getorigin(); + var_01 setmodel(param_00); + var_01 delete(); +} + +//Function Number: 58 +closerfunc(param_00,param_01) +{ + return param_00 >= param_01; +} + +//Function Number: 59 +fartherfunc(param_00,param_01) +{ + return param_00 <= param_01; +} + +//Function Number: 60 +getclosest(param_00,param_01,param_02) +{ + if(!isdefined(param_02)) + { + param_02 = 500000; + } + + var_03 = undefined; + foreach(var_05 in param_01) + { + var_06 = distance(var_05.origin,param_00); + if(var_06 >= param_02) + { + continue; + } + + param_02 = var_06; + var_03 = var_05; + } + + return var_03; +} + +//Function Number: 61 +getfarthest(param_00,param_01,param_02) +{ + if(!isdefined(param_02)) + { + param_02 = 500000; + } + + var_03 = 0; + var_04 = undefined; + foreach(var_06 in param_01) + { + var_07 = distance(var_06.origin,param_00); + if(var_07 <= var_03 || var_07 >= param_02) + { + continue; + } + + var_03 = var_07; + var_04 = var_06; + } + + return var_04; +} + +//Function Number: 62 +getclosestfx(param_00,param_01,param_02) +{ + return maps\_utility_code::comparesizesfx(param_00,param_01,param_02,::closerfunc); +} + +//Function Number: 63 +get_closest_point(param_00,param_01,param_02) +{ + var_03 = param_01[0]; + var_04 = distance(param_00,var_03); + for(var_05 = 0;var_05 < param_01.size;var_05++) + { + var_06 = distance(param_00,param_01[var_05]); + if(var_06 >= var_04) + { + continue; + } + + var_04 = var_06; + var_03 = param_01[var_05]; + } + + if(!isdefined(param_02) || var_04 <= param_02) + { + return var_03; + } + + return undefined; +} + +//Function Number: 64 +get_farthest_ent(param_00,param_01) +{ + if(param_01.size < 1) + { + return; + } + + var_02 = distance(param_01[0] getorigin(),param_00); + var_03 = param_01[0]; + for(var_04 = 0;var_04 < param_01.size;var_04++) + { + var_05 = distance(param_01[var_04] getorigin(),param_00); + if(var_05 < var_02) + { + continue; + } + + var_02 = var_05; + var_03 = param_01[var_04]; + } + + return var_03; +} + +//Function Number: 65 +get_within_range(param_00,param_01,param_02) +{ + var_03 = []; + for(var_04 = 0;var_04 < param_01.size;var_04++) + { + if(distance(param_01[var_04].origin,param_00) <= param_02) + { + var_03[var_03.size] = param_01[var_04]; + } + } + + return var_03; +} + +//Function Number: 66 +get_outside_range(param_00,param_01,param_02) +{ + var_03 = []; + for(var_04 = 0;var_04 < param_01.size;var_04++) + { + if(distance(param_01[var_04].origin,param_00) > param_02) + { + var_03[var_03.size] = param_01[var_04]; + } + } + + return var_03; +} + +//Function Number: 67 +get_closest_living(param_00,param_01,param_02) +{ + if(!isdefined(param_02)) + { + param_02 = 9999999; + } + + if(param_01.size < 1) + { + return; + } + + var_03 = undefined; + for(var_04 = 0;var_04 < param_01.size;var_04++) + { + if(!isalive(param_01[var_04])) + { + continue; + } + + var_05 = distance(param_01[var_04].origin,param_00); + if(var_05 >= param_02) + { + continue; + } + + param_02 = var_05; + var_03 = param_01[var_04]; + } + + return var_03; +} + +//Function Number: 68 +get_highest_dot(param_00,param_01,param_02) +{ + if(!param_02.size) + { + return; + } + + var_03 = undefined; + var_04 = vectortoangles(param_01 - param_00); + var_05 = anglestoforward(var_04); + var_06 = -1; + foreach(var_08 in param_02) + { + var_04 = vectortoangles(var_08.origin - param_00); + var_09 = anglestoforward(var_04); + var_0A = vectordot(var_05,var_09); + if(var_0A < var_06) + { + continue; + } + + var_06 = var_0A; + var_03 = var_08; + } + + return var_03; +} + +//Function Number: 69 +get_closest_index(param_00,param_01,param_02) +{ + if(!isdefined(param_02)) + { + param_02 = 9999999; + } + + if(param_01.size < 1) + { + return; + } + + var_03 = undefined; + foreach(var_07, var_05 in param_01) + { + var_06 = distance(var_05.origin,param_00); + if(var_06 >= param_02) + { + continue; + } + + param_02 = var_06; + var_03 = var_07; + } + + return var_03; +} + +//Function Number: 70 +get_closest_exclude(param_00,param_01,param_02) +{ + if(!isdefined(param_01)) + { + return undefined; + } + + var_03 = 0; + if(isdefined(param_02) && param_02.size) + { + var_04 = []; + var_05 = 0; + while(var_05 < param_01.size) + { + var_04++ = var_7B[var_05]; + } + + for(var_04 = 0;var_04 < param_02.size;var_04++) + { + for(var_06 = 0;var_06 < var_03.size;var_06++ = 0) + { + if(param_02[var_04] == var_03[var_06]) + { + var_7B[var_04] = 1; + } + } + } + + var_07 = 0; + for(var_04 = 0;var_04 < param_02.size;var_04++) + { + if(!var_7B[var_04] && isdefined(param_02[var_04])) + { + var_07 = 1; + var_05 = distance(param_01,param_02[var_04].origin); + var_08 = var_04; + var_04 = param_02.size + 1; + } + } + + if(!var_07) + { + return undefined; + } + } + else + { + var_05 = 0; + while(var_04 < param_02.size) + { + if(isdefined(param_02[var_04])) + { + var_05 = distance(param_01,param_02[0].origin); + var_08 = var_04; + var_04 = param_02.size + 1; + } + + var_04++; + } + } + + var_08 = undefined; + for(var_04 = 0;var_04 < param_02.size;var_04++) + { + if(isdefined(param_02[var_04])) + { + var_04 = 0; + if(isdefined(param_02)) + { + for(var_06 = 0;var_06 < param_02.size;var_06++) + { + if(param_01[var_05] == param_02[var_06]) + { + var_08 = 1; + } + } + } + + if(!var_08) + { + var_09 = distance(param_00,param_01[var_05].origin); + if(var_09 <= var_03) + { + var_03 = var_09; + var_04 = var_05; + } + } + } + } + + if(isdefined(var_08)) + { + return param_02[var_08]; + } + + return undefined; +} + +//Function Number: 71 +get_closest_player(param_00) +{ + if(level.players.size == 1) + { + return level.player; + } + + var_01 = getclosest(param_00,level.players); + return var_01; +} + +//Function Number: 72 +get_closest_player_healthy(param_00) +{ + if(level.players.size == 1) + { + return level.player; + } + + var_01 = get_players_healthy(); + var_02 = getclosest(param_00,var_01); + return var_02; +} + +//Function Number: 73 +get_players_healthy() +{ + var_00 = []; + foreach(var_02 in level.players) + { + if(is_player_down(var_02)) + { + continue; + } + + var_00[var_00.size] = var_02; + } + + return var_00; +} + +//Function Number: 74 +get_closest_ai(param_00,param_01,param_02) +{ + if(isdefined(param_01)) + { + var_03 = getaiarray(param_01); + } + else + { + var_03 = getaiarray(); + } + + if(var_03.size == 0) + { + return undefined; + } + + if(isdefined(param_02)) + { + var_03 = common_scripts\utility::array_remove_array(var_03,param_02); + } + + return getclosest(param_00,var_03); +} + +//Function Number: 75 +get_array_of_farthest(param_00,param_01,param_02,param_03,param_04,param_05) +{ + var_06 = get_array_of_closest(param_00,param_01,param_02,param_03,param_04,param_05); + var_06 = array_reverse(var_06); + return var_06; +} + +//Function Number: 76 +get_array_of_closest(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if(!isdefined(param_03)) + { + param_03 = param_01.size; + } + + if(!isdefined(param_02)) + { + param_02 = []; + } + + var_06 = undefined; + if(isdefined(param_04)) + { + var_06 = param_04 * param_04; + } + + var_07 = 0; + if(isdefined(param_05)) + { + var_07 = param_05 * param_05; + } + + if(param_02.size == 0 && param_03 >= param_01.size && var_07 == 0 && !isdefined(var_06)) + { + return sortbydistance(param_01,param_00); + } + + var_08 = []; + foreach(var_0A in param_01) + { + var_0B = 0; + foreach(var_0D in param_02) + { + if(var_0A == var_0D) + { + var_0B = 1; + break; + } + } + + if(var_0B) + { + continue; + } + + var_0F = distancesquared(param_00,var_0A.origin); + if(isdefined(var_06) && var_0F > var_06) + { + continue; + } + + if(var_0F < var_07) + { + continue; + } + + var_08[var_08.size] = var_0A; + } + + var_08 = sortbydistance(var_08,param_00); + if(param_03 >= var_08.size) + { + return var_08; + } + + var_11 = []; + for(var_12 = 0;var_12 < param_03;var_12++) + { + var_11[var_12] = var_08[var_12]; + } + + return var_11; +} + +//Function Number: 77 +get_closest_ai_exclude(param_00,param_01,param_02) +{ + if(isdefined(param_01)) + { + var_03 = getaiarray(param_01); + } + else + { + var_03 = getaiarray(); + } + + if(var_03.size == 0) + { + return undefined; + } + + return get_closest_exclude(param_00,var_03,param_02); +} + +//Function Number: 78 +get_progress(param_00,param_01,param_02,param_03) +{ + var_04 = param_03; + if(!isdefined(var_04)) + { + var_04 = distance(param_00,param_01); + } + + var_04 = max(0.01,var_04); + var_05 = vectornormalize(param_01 - param_00); + var_06 = param_02 - param_00; + var_07 = vectordot(var_06,var_05); + var_07 = var_07 / var_04; + var_07 = clamp(var_07,0,1); + return var_07; +} + +//Function Number: 79 +can_see_origin(param_00,param_01) +{ + if(!isdefined(param_01)) + { + param_01 = 1; + } + + if(!point_in_fov(param_00)) + { + return 0; + } + + if(!sighttracepassed(self geteye(),param_00,param_01,self)) + { + return 0; + } + + return 1; +} + +//Function Number: 80 +point_in_fov(param_00) +{ + var_01 = anglestoforward(self.angles); + var_02 = vectornormalize(param_00 - self.origin); + var_03 = vectordot(var_01,var_02); + return var_03 > 0.766; +} + +//Function Number: 81 +stop_magic_bullet_shield() +{ + self notify("stop_magic_bullet_shield"); + if(isai(self)) + { + self.attackeraccuracy = 1; + } + + self.magic_bullet_shield = undefined; + self.damageshield = 0; + self notify("internal_stop_magic_bullet_shield"); +} + +//Function Number: 82 +magic_bullet_death_detection() +{ +} + +//Function Number: 83 +magic_bullet_shield(param_00) +{ + if(isai(self)) + { + } + else + { + self.health = 100000; + } + + self endon("internal_stop_magic_bullet_shield"); + if(isai(self)) + { + self.attackeraccuracy = 0.1; + } + + self.magic_bullet_shield = 1; + self.damageshield = 1; +} + +//Function Number: 84 +disable_long_death() +{ + self.a.disablelongdeath = 1; +} + +//Function Number: 85 +enable_long_death() +{ + self.a.disablelongdeath = 0; +} + +//Function Number: 86 +enable_blood_pool() +{ + self.skipbloodpool = undefined; +} + +//Function Number: 87 +disable_blood_pool() +{ + self.skipbloodpool = 1; +} + +//Function Number: 88 +deletable_magic_bullet_shield() +{ + magic_bullet_shield(1); +} + +//Function Number: 89 +get_ignoreme() +{ + return self.ignoreme; +} + +//Function Number: 90 +set_ignoreme(param_00) +{ + self.ignoreme = param_00; +} + +//Function Number: 91 +set_ignoreall(param_00) +{ + self.ignoreall = param_00; +} + +//Function Number: 92 +set_favoriteenemy(param_00) +{ + self.favoriteenemy = param_00; +} + +//Function Number: 93 +get_pacifist() +{ + return self.pacifist; +} + +//Function Number: 94 +set_pacifist(param_00) +{ + self.pacifist = param_00; +} + +//Function Number: 95 +ignore_me_timer(param_00) +{ + self notify("new_ignore_me_timer"); + self endon("new_ignore_me_timer"); + self endon("death"); + if(!isdefined(self.ignore_me_timer_prev_value)) + { + self.ignore_me_timer_prev_value = self.ignoreme; + } + + var_01 = getaiarray("bad_guys"); + foreach(var_03 in var_01) + { + if(!isalive(var_03.enemy)) + { + continue; + } + + if(var_03.enemy != self) + { + continue; + } + + var_03 clearenemy(); + } + + self.ignoreme = 1; + wait param_00; + self.ignoreme = self.ignore_me_timer_prev_value; + self.ignore_me_timer_prev_value = undefined; +} + +//Function Number: 96 +array_randomize(param_00) +{ + for(var_01 = 0;var_01 < param_00.size;var_01++) + { + var_02 = randomint(param_00.size); + var_03 = param_00[var_01]; + param_00[var_01] = param_00[var_02]; + param_00[var_02] = var_03; + } + + return param_00; +} + +//Function Number: 97 +array_reverse(param_00) +{ + var_01 = []; + for(var_02 = param_00.size - 1;var_02 >= 0;var_02--) + { + var_01[var_01.size] = param_00[var_02]; + } + + return var_01; +} + +//Function Number: 98 +delete_exploder(param_00) +{ + param_00 = param_00 + ""; + if(isdefined(level.createfxexploders)) + { + var_01 = level.createfxexploders[param_00]; + if(isdefined(var_01)) + { + foreach(var_03 in var_01) + { + if(isdefined(var_03.model)) + { + var_03.model delete(); + } + } + } + } + else + { + for(var_05 = 0;var_05 < level.createfxent.size;var_05++) + { + var_03 = level.createfxent[var_05]; + if(!isdefined(var_03)) + { + continue; + } + + if(var_03.v["type"] != "exploder") + { + continue; + } + + if(!isdefined(var_03.v["exploder"])) + { + continue; + } + + if(var_03.v["exploder"] + "" != param_00) + { + continue; + } + + if(isdefined(var_03.model)) + { + var_03.model delete(); + } + } + } + + level notify("killexplodertridgers" + param_00); +} + +//Function Number: 99 +hide_exploder_models(param_00) +{ + param_00 = param_00 + ""; + if(isdefined(level.createfxexploders)) + { + var_01 = level.createfxexploders[param_00]; + if(isdefined(var_01)) + { + foreach(var_03 in var_01) + { + if(isdefined(var_03.model)) + { + var_03.model hide(); + } + } + + return; + } + + return; + } + + var_05 = 0; + while(var_03 < level.createfxent.size) + { + var_05 = level.createfxent[var_03]; + if(!isdefined(var_05)) + { + continue; + } + + if(var_05.v["type"] != "exploder") + { + continue; + } + + if(!isdefined(var_05.v["exploder"])) + { + continue; + } + + if(var_05.v["exploder"] + "" != var_02) + { + continue; + } + + if(isdefined(var_05.model)) + { + var_05.model hide(); + } + + var_03++; + } +} + +//Function Number: 100 +show_exploder_models(param_00) +{ + param_00 = param_00 + ""; + if(isdefined(level.createfxexploders)) + { + var_01 = level.createfxexploders[param_00]; + if(isdefined(var_01)) + { + foreach(var_03 in var_01) + { + if(!exploder_model_starts_hidden(var_03.model) && !exploder_model_is_damaged_model(var_03.model) && !exploder_model_is_chunk(var_03.model)) + { + var_03.model show(); + } + + if(isdefined(var_03.brush_shown)) + { + var_03.model show(); + } + } + + return; + } + + return; + } + + var_05 = 0; + while(var_03 < level.createfxent.size) + { + var_05 = level.createfxent[var_03]; + if(!isdefined(var_05)) + { + continue; + } + + if(var_05.v["type"] != "exploder") + { + continue; + } + + if(!isdefined(var_05.v["exploder"])) + { + continue; + } + + if(var_05.v["exploder"] + "" != var_02) + { + continue; + } + + if(isdefined(var_05.model)) + { + if(!exploder_model_starts_hidden(var_05.model) && !exploder_model_is_damaged_model(var_05.model) && !exploder_model_is_chunk(var_05.model)) + { + var_05.model show(); + } + + if(isdefined(var_05.brush_shown)) + { + var_05.model show(); + } + } + + var_03++; + } +} + +//Function Number: 101 +exploder_model_is_damaged_model(param_00) +{ + return isdefined(param_00.targetname) && param_00.targetname == "exploder"; +} + +//Function Number: 102 +exploder_model_starts_hidden(param_00) +{ + return param_00.model == "fx" && !isdefined(param_00.targetname) || param_00.targetname != "exploderchunk"; +} + +//Function Number: 103 +exploder_model_is_chunk(param_00) +{ + return isdefined(param_00.targetname) && param_00.targetname == "exploderchunk"; +} + +//Function Number: 104 +get_exploder_array(param_00) +{ + param_00 = param_00 + ""; + if(isdefined(level.createfxexploders)) + { + var_01 = level.createfxexploders[param_00]; + if(isdefined(var_01)) + { + foreach(var_03 in var_01) + { + if(!isdefined(var_03.looper)) + { + continue; + } + + var_03.looper delete(); + } + + return; + } + + return; + } + + var_05 = 0; + while(var_03 < level.createfxent.size) + { + var_05 = level.createfxent[var_03]; + if(!isdefined(var_05)) + { + continue; + } + + if(var_05.v["type"] != "exploder") + { + continue; + } + + if(!isdefined(var_05.v["exploder"])) + { + continue; + } + + if(var_05.v["exploder"] + "" != var_02) + { + continue; + } + + if(!isdefined(var_05.looper)) + { + continue; + } + + var_05.looper delete(); + var_03++; + } +} + +//Function Number: 105 +func_261B(param_00) +{ + param_00 = param_00 + ""; + var_01 = []; + if(isdefined(level.createfxexploders)) + { + var_02 = level.createfxexploders[param_00]; + if(isdefined(var_02)) + { + var_01 = var_02; + } + } + else + { + foreach(var_04 in level.createfxent) + { + if(var_04.v["type"] != "exploder") + { + continue; + } + + if(!isdefined(var_04.v["exploder"])) + { + continue; + } + + if(var_04.v["exploder"] + "" != param_00) + { + continue; + } + + var_01[var_01.size] = var_04; + } + } + + return var_01; +} + +//Function Number: 106 +flood_spawn(param_00) +{ + maps\_spawner::flood_spawner_scripted(param_00); +} + +//Function Number: 107 +set_ambient(param_00,param_01) +{ + maps\_audio_zone_manager::azm_start_zone(param_00,param_01); +} + +//Function Number: 108 +force_crawling_death(param_00,param_01,param_02,param_03) +{ + if(!isdefined(param_01)) + { + param_01 = 4; + } + + thread force_crawling_death_proc(param_00,param_01,param_02,param_03); +} + +//Function Number: 109 +override_crawl_death_anims() +{ + if(isdefined(self.a.custom_crawling_death_array)) + { + self.a.array["crawl"] = self.a.custom_crawling_death_array["crawl"]; + self.a.array["death"] = self.a.custom_crawling_death_array["death"]; + self.a.crawl_fx_rate = self.a.custom_crawling_death_array["blood_fx_rate"]; + if(isdefined(self.a.custom_crawling_death_array["blood_fx"])) + { + self.a.crawl_fx = self.a.custom_crawling_death_array["blood_fx"]; + } + } + + self.a.array["stand_2_crawl"] = []; + self.a.array["stand_2_crawl"][0] = %dying_stand_2_crawl_v3; + if(isdefined(self.nofallanim)) + { + self.a.pose = "prone"; + } + + self orientmode("face angle",self.a.force_crawl_angle); + self.a.force_crawl_angle = undefined; +} + +//Function Number: 110 +force_crawling_death_proc(param_00,param_01,param_02,param_03) +{ + self.forcelongdeath = 1; + self.a.force_num_crawls = param_01; + self.noragdoll = 1; + self.nofallanim = param_03; + self.a.custom_crawling_death_array = param_02; + self.crawlingpainanimoverridefunc = ::override_crawl_death_anims; + self.maxhealth = 100000; + self.health = 100000; + enable_long_death(); + if(!isdefined(param_03) || param_03 == 0) + { + self.a.force_crawl_angle = param_00 + 181.02; + return; + } + + self.a.force_crawl_angle = param_00; + thread animscripts/notetracks::func_23EC(); +} + +//Function Number: 111 +get_friendly_chain_node(param_00) +{ + var_01 = undefined; + var_02 = getentarray("trigger_friendlychain","classname"); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + if(isdefined(var_02[var_03].script_chain) && var_02[var_03].script_chain == param_00) + { + var_01 = var_02[var_03]; + break; + } + } + + if(!isdefined(var_01)) + { + return undefined; + } + + var_04 = getnode(var_01.target,"targetname"); + return var_04; +} + +//Function Number: 112 +shock_ondeath() +{ + precacheshellshock("default"); + self waittill("death"); + if(isdefined(self.specialdeath)) + { + return; + } + + if(getdvar("r_texturebits") == "16") + { + return; + } + + self shellshock("default",3); +} + +//Function Number: 113 +delete_on_death_wait_sound(param_00,param_01) +{ + param_00 endon("death"); + self waittill("death"); + if(isdefined(param_00)) + { + if(param_00 iswaitingonsound()) + { + param_00 waittill(param_01); + } + + param_00 delete(); + } +} + +//Function Number: 114 +is_dead_sentient() +{ + return issentient(self) && !isalive(self); +} + +//Function Number: 115 +play_sound_on_tag(param_00,param_01,param_02,param_03,param_04) +{ + if(is_dead_sentient()) + { + return; + } + + var_05 = spawn("script_origin",(0,0,0)); + var_05 endon("death"); + thread delete_on_death_wait_sound(var_05,"sounddone"); + if(isdefined(param_01)) + { + var_05 linkto(self,param_01,(0,0,0),(0,0,0)); + } + else + { + var_05.origin = self.origin; + var_05.angles = self.angles; + var_05 linkto(self); + } + + var_05 playsound(param_00,"sounddone"); + if(isdefined(param_02)) + { + if(!isdefined(maps\_utility_code::wait_for_sounddone_or_death(var_05))) + { + var_05 stopsounds(); + } + + wait 0.05; + } + else + { + var_05 waittill("sounddone"); + } + + if(isdefined(param_03)) + { + self notify(param_03); + } + + var_05 delete(); +} + +//Function Number: 116 +play_sound_on_tag_endon_death(param_00,param_01) +{ + play_sound_on_tag(param_00,param_01,1); +} + +//Function Number: 117 +play_sound_on_entity(param_00,param_01) +{ + play_sound_on_tag(param_00,undefined,undefined,param_01); +} + +//Function Number: 118 +play_loop_sound_on_tag(param_00,param_01,param_02) +{ + var_03 = spawn("script_origin",(0,0,0)); + var_03 endon("death"); + if(!isdefined(param_02)) + { + param_02 = 1; + } + + if(param_02) + { + thread common_scripts\utility::delete_on_death(var_03); + } + + if(isdefined(param_01)) + { + var_03 linkto(self,param_01,(0,0,0),(0,0,0)); + } + else + { + var_03.origin = self.origin; + var_03.angles = self.angles; + var_03 linkto(self); + } + + var_03 playloopsound(param_00); + self waittill("stop sound" + param_00); + var_03 stoploopsound(param_00); + var_03 delete(); +} + +//Function Number: 119 +save_friendlies() +{ + var_00 = getaiarray("allies"); + var_01 = 0; + for(var_02 = 0;var_02 < var_00.size;var_02++) + { + if(isdefined(var_00[var_02].script_friendname)) + { + continue; + } + + game["character" + var_01] = var_00[var_02] lib_0144::func_1E60(); + var_01++; + } + + game["total characters"] = var_01; +} + +//Function Number: 120 +spawn_failed(param_00) +{ + if(!isalive(param_00)) + { + return 1; + } + + if(!isdefined(param_00.finished_spawning)) + { + param_00 common_scripts\utility::waittill_either("finished spawning","death"); + } + + if(isalive(param_00)) + { + return 0; + } + + return 1; +} + +//Function Number: 121 +spawn_setcharacter(param_00) +{ + lib_0144::precache(param_00); + self waittill("spawned",var_01); + if(spawn_failed(var_01)) + { + return; + } + + var_01 lib_0144::func_1E5D(); + var_01 lib_0144::func_1E62(param_00); +} + +//Function Number: 122 +key_hint_print(param_00,param_01) +{ + iprintlnbold(param_00,param_01["key1"]); +} + +//Function Number: 123 +view_tag(param_00) +{ + self endon("death"); + for(;;) + { + maps\_debug::drawtag(param_00); + wait 0.05; + } +} + +//Function Number: 124 +assign_animtree(param_00) +{ + if(isdefined(param_00)) + { + self.animname = param_00; + } + + self useanimtree(level.max_number_of_dead_bodies[self.animname]); +} + +//Function Number: 125 +assign_model() +{ + if(isarray(level.scr_model[self.animname])) + { + var_00 = randomint(level.scr_model[self.animname].size); + self setmodel(level.scr_model[self.animname][var_00]); + return; + } + + self setmodel(level.scr_model[self.animname]); +} + +//Function Number: 126 +spawn_anim_model(param_00,param_01) +{ + if(!isdefined(param_01)) + { + param_01 = (0,0,0); + } + + var_02 = spawn("script_model",param_01); + var_02.animname = param_00; + var_02 assign_animtree(); + var_02 assign_model(); + return var_02; +} + +//Function Number: 127 +trigger_wait(param_00,param_01) +{ + var_02 = getent(param_00,param_01); + if(!isdefined(var_02)) + { + return; + } + + var_02 waittill("trigger",var_03); + level notify(param_00,var_03); + return var_03; +} + +//Function Number: 128 +trigger_wait_targetname(param_00) +{ + var_01 = getent(param_00,"targetname"); + if(!isdefined(var_01)) + { + return; + } + + var_01 waittill("trigger",var_02); + level notify(param_00,var_02); + return var_02; +} + +//Function Number: 129 +set_flag_on_dead(param_00,param_01) +{ + thread set_flag_on_func_wait_proc(param_00,param_01,::waittill_dead,"set_flag_on_dead"); +} + +//Function Number: 130 +set_flag_on_dead_or_dying(param_00,param_01) +{ + thread set_flag_on_func_wait_proc(param_00,param_01,::waittill_dead_or_dying,"set_flag_on_dead_or_dying"); +} + +//Function Number: 131 +set_flag_on_spawned(param_00,param_01) +{ + thread set_flag_on_func_wait_proc(param_00,param_01,::empty_func,"set_flag_on_spawned"); +} + +//Function Number: 132 +empty_func(param_00) +{ +} + +//Function Number: 133 +set_flag_on_spawned_ai_proc(param_00,param_01) +{ + self waittill("spawned",var_02); + if(spawn_failed(var_02)) + { + return; + } + + param_00.ai[param_00.ai.size] = var_02; + ent_flag_set(param_01); +} + +//Function Number: 134 +set_flag_on_func_wait_proc(param_00,param_01,param_02,param_03) +{ + var_04 = spawnstruct(); + var_04.ai = []; + foreach(var_06 in param_00) + { + var_06 ent_flag_init(param_03); + } + + common_scripts\utility::array_thread(param_00,::set_flag_on_spawned_ai_proc,var_04,param_03); + foreach(var_06 in param_00) + { + var_06 ent_flag_wait(param_03); + } + + [[ param_02 ]](var_04.ai); + common_scripts\utility::flag_set(param_01); +} + +//Function Number: 135 +set_flag_on_trigger(param_00,param_01) +{ + if(!common_scripts\utility::flag(param_01)) + { + param_00 waittill("trigger",var_02); + common_scripts\utility::flag_set(param_01); + return var_02; + } +} + +//Function Number: 136 +set_flag_on_targetname_trigger(param_00) +{ + if(common_scripts\utility::flag(param_00)) + { + return; + } + + var_01 = getent(param_00,"targetname"); + var_01 waittill("trigger"); + common_scripts\utility::flag_set(param_00); +} + +//Function Number: 137 +is_in_array(param_00,param_01) +{ + for(var_02 = 0;var_02 < param_00.size;var_02++) + { + if(param_00[var_02] == param_01) + { + return 1; + } + } + + return 0; +} + +//Function Number: 138 +waittill_dead(param_00,param_01,param_02) +{ + var_0A = spawnstruct(); + if(isdefined(param_02)) + { + var_0A endon("thread_timed_out"); + var_0A thread waittill_dead_timeout(param_02); + } + + var_0A.count = param_00.size; + if(isdefined(param_01) && param_01 < var_0A.count) + { + var_0A.count = param_01; + } + + common_scripts\utility::array_thread(param_00,::waittill_dead_thread,var_0A); + while(var_0A.count > 0) + { + var_0A waittill("waittill_dead guy died"); + } +} + +//Function Number: 139 +waittill_dead_or_dying(param_00,param_01,param_02) +{ + var_03 = []; + foreach(var_05 in param_00) + { + if(isalive(var_05) && !var_05.ignoreforfixednodesafecheck) + { + var_03[var_03.size] = var_05; + } + } + + param_00 = var_03; + var_07 = spawnstruct(); + if(isdefined(param_02)) + { + var_07 endon("thread_timed_out"); + var_07 thread waittill_dead_timeout(param_02); + } + + var_07.count = param_00.size; + if(isdefined(param_01) && param_01 < var_07.count) + { + var_07.count = param_01; + } + + common_scripts\utility::array_thread(param_00,::waittill_dead_or_dying_thread,var_07); + while(var_07.count > 0) + { + var_07 waittill("waittill_dead_guy_dead_or_dying"); + } +} + +//Function Number: 140 +waittill_dead_thread(param_00) +{ + self waittill("death"); + param_00.count--; + param_00 notify("waittill_dead guy died"); +} + +//Function Number: 141 +waittill_dead_or_dying_thread(param_00) +{ + common_scripts\utility::waittill_either("death","pain_death"); + param_00.count--; + param_00 notify("waittill_dead_guy_dead_or_dying"); +} + +//Function Number: 142 +waittill_dead_timeout(param_00) +{ + wait param_00; + self notify("thread_timed_out"); +} + +//Function Number: 143 +waittill_aigroupcleared(param_00) +{ + while(level._ai_group[param_00].spawnercount || level._ai_group[param_00].aicount) + { + wait 0.25; + } +} + +//Function Number: 144 +waittill_aigroupcount(param_00,param_01) +{ + while(level._ai_group[param_00].spawnercount + level._ai_group[param_00].aicount > param_01) + { + wait 0.25; + } +} + +//Function Number: 145 +get_ai_group_count(param_00) +{ + return level._ai_group[param_00].spawnercount + level._ai_group[param_00].aicount; +} + +//Function Number: 146 +get_ai_group_sentient_count(param_00) +{ + return level._ai_group[param_00].aicount; +} + +//Function Number: 147 +get_ai_group_ai(param_00) +{ + var_01 = []; + for(var_02 = 0;var_02 < level._ai_group[param_00].ai.size;var_02++) + { + if(!isalive(level._ai_group[param_00].ai[var_02])) + { + continue; + } + + var_01[var_01.size] = level._ai_group[param_00].ai[var_02]; + } + + return var_01; +} + +//Function Number: 148 +waittill_notetrack_or_damage(param_00) +{ + self endon("damage"); + self endon("death"); + self waittillmatch(param_00,"single anim"); +} + +//Function Number: 149 +get_living_ai(param_00,param_01) +{ + var_02 = get_living_ai_array(param_00,param_01); + if(var_02.size > 1) + { + return undefined; + } + + return var_02[0]; +} + +//Function Number: 150 +get_living_ai_array(param_00,param_01) +{ + var_02 = getaispeciesarray("all","all"); + var_03 = []; + foreach(var_05 in var_02) + { + if(!isalive(var_05)) + { + continue; + } + + switch(param_01) + { + case "targetname": + if(isdefined(var_05.targetname) && var_05.targetname == param_00) + { + var_03[var_03.size] = var_05; + } + break; + + case "script_noteworthy": + if(isdefined(var_05.script_noteworthy) && var_05.script_noteworthy == param_00) + { + var_03[var_03.size] = var_05; + } + break; + } + } + + return var_03; +} + +//Function Number: 151 +get_vehicle(param_00,param_01) +{ + var_02 = get_vehicle_array(param_00,param_01); + if(!var_02.size) + { + return undefined; + } + + return var_02[0]; +} + +//Function Number: 152 +get_vehicle_array(param_00,param_01) +{ + var_02 = getentarray(param_00,param_01); + var_03 = []; + var_04 = []; + foreach(var_06 in var_02) + { + if(var_06.code_classname != "script_vehicle") + { + continue; + } + + var_04[0] = var_06; + if(isspawner(var_06)) + { + if(isdefined(var_06.last_spawned_vehicle)) + { + var_04[0] = var_06.last_spawned_vehicle; + var_03 = array_merge(var_03,var_04); + } + + continue; + } + + var_03 = array_merge(var_03,var_04); + } + + return var_03; +} + +//Function Number: 153 +get_living_aispecies(param_00,param_01,param_02) +{ + var_03 = get_living_ai_array(param_00,param_01,param_02); + if(var_03.size > 1) + { + return undefined; + } + + return var_03[0]; +} + +//Function Number: 154 +get_living_aispecies_array(param_00,param_01,param_02) +{ + if(!isdefined(param_02)) + { + param_02 = "all"; + } + + var_03 = getaispeciesarray("allies",param_02); + var_03 = common_scripts\utility::array_combine(var_03,getaispeciesarray("axis",param_02)); + var_04 = []; + for(var_05 = 0;var_05 < var_03.size;var_05++) + { + switch(param_01) + { + case "targetname": + if(isdefined(var_03[var_05].targetname) && var_03[var_05].targetname == param_00) + { + var_04[var_04.size] = var_03[var_05]; + } + break; + + case "script_noteworthy": + if(isdefined(var_03[var_05].script_noteworthy) && var_03[var_05].script_noteworthy == param_00) + { + var_04[var_04.size] = var_03[var_05]; + } + break; + } + } + + return var_04; +} + +//Function Number: 155 +gather_delay_proc(param_00,param_01) +{ + if(isdefined(level.gather_delay[param_00])) + { + if(level.gather_delay[param_00]) + { + wait 0.05; + if(isalive(self)) + { + self notify("gather_delay_finished" + param_00 + param_01); + } + + return; + } + + level waittill(param_00); + if(isalive(self)) + { + self notify("gather_delay_finished" + param_00 + param_01); + } + + return; + } + + level.gather_delay[param_00] = 0; + wait param_01; + level.gather_delay[param_00] = 1; + level notify(param_00); + if(isalive(self)) + { + self notify("gather_delay_finished" + param_00 + param_01); + } +} + +//Function Number: 156 +gather_delay(param_00,param_01) +{ + thread gather_delay_proc(param_00,param_01); + self waittill("gather_delay_finished" + param_00 + param_01); +} + +//Function Number: 157 +set_environment(param_00) +{ + animscripts/utility::func_20CC(param_00); +} + +//Function Number: 158 +death_waiter(param_00) +{ + self waittill("death"); + level notify(param_00); +} + +//Function Number: 159 +getchar(param_00) +{ + if(param_00 == 0) + { + return "0"; + } + + if(param_00 == 1) + { + return "1"; + } + + if(param_00 == 2) + { + return "2"; + } + + if(param_00 == 3) + { + return "3"; + } + + if(param_00 == 4) + { + return "4"; + } + + if(param_00 == 5) + { + return "5"; + } + + if(param_00 == 6) + { + return "6"; + } + + if(param_00 == 7) + { + return "7"; + } + + if(param_00 == 8) + { + return "8"; + } + + if(param_00 == 9) + { + return "9"; + } +} + +//Function Number: 160 +getlinks_array(param_00,param_01) +{ + var_02 = []; + for(var_03 = 0;var_03 < param_00.size;var_03++) + { + var_04 = param_00[var_03]; + var_05 = var_04.script_linkname; + if(!isdefined(var_05)) + { + continue; + } + + if(!isdefined(param_01[var_05])) + { + continue; + } + + var_02[var_02.size] = var_04; + } + + return var_02; +} + +//Function Number: 161 +array_merge_links(param_00,param_01) +{ + if(!param_00.size) + { + return param_01; + } + + if(!param_01.size) + { + return param_00; + } + + var_02 = []; + for(var_03 = 0;var_03 < param_00.size;var_03++) + { + var_04 = param_00[var_03]; + var_02[var_04.script_linkname] = 1; + } + + for(var_03 = 0;var_03 < param_01.size;var_03++) + { + var_04 = param_01[var_03]; + if(isdefined(var_02[var_04.script_linkname])) + { + continue; + } + + var_02[var_04.script_linkname] = 1; + param_00[param_00.size] = var_04; + } + + return param_00; +} + +//Function Number: 162 +array_merge(param_00,param_01) +{ + if(param_00.size == 0) + { + return param_01; + } + + if(param_01.size == 0) + { + return param_00; + } + + var_02 = param_00; + foreach(var_04 in param_01) + { + var_05 = 0; + foreach(var_07 in param_00) + { + if(var_07 == var_04) + { + var_05 = 1; + break; + } + } + + if(var_05) + { + continue; + } + else + { + var_02[var_02.size] = var_04; + } + } + + return var_02; +} + +//Function Number: 163 +array_exclude(param_00,param_01) +{ + var_02 = param_00; + for(var_03 = 0;var_03 < param_01.size;var_03++) + { + if(is_in_array(param_00,param_01[var_03])) + { + var_02 = common_scripts\utility::array_remove(var_02,param_01[var_03]); + } + } + + return var_02; +} + +//Function Number: 164 +array_compare(param_00,param_01) +{ + if(param_00.size != param_01.size) + { + return 0; + } + + foreach(var_05, var_03 in param_00) + { + if(!isdefined(param_01[var_05])) + { + return 0; + } + + var_04 = param_01[var_05]; + if(var_04 != var_03) + { + return 0; + } + } + + return 1; +} + +//Function Number: 165 +array_contains(param_00,param_01) +{ + if(param_00.size <= 0) + { + return 0; + } + + foreach(var_03 in param_00) + { + if(var_03 == param_01) + { + return 1; + } + } + + return 0; +} + +//Function Number: 166 +getlinkedvehiclenodes() +{ + var_00 = []; + if(isdefined(self.script_linkto)) + { + var_01 = common_scripts\utility::get_links(); + foreach(var_03 in var_01) + { + var_04 = getvehiclenodearray(var_03,"script_linkname"); + var_00 = common_scripts\utility::array_combine(var_00,var_04); + } + } + + return var_00; +} + +//Function Number: 167 +draw_line(param_00,param_01,param_02,param_03,param_04) +{ + wait 0.05; +} + +//Function Number: 168 +draw_line_to_ent_for_time(param_00,param_01,param_02,param_03,param_04,param_05) +{ + param_05 = gettime() + param_05 * 1000; + while(gettime() < param_05) + { + wait 0.05; + if(!isdefined(param_01) || !isdefined(param_01.origin)) + { + return; + } + } +} + +//Function Number: 169 +draw_line_from_ent_for_time(param_00,param_01,param_02,param_03,param_04,param_05) +{ + draw_line_to_ent_for_time(param_01,param_00,param_02,param_03,param_04,param_05); +} + +//Function Number: 170 +draw_line_from_ent_to_ent_for_time(param_00,param_01,param_02,param_03,param_04,param_05) +{ + param_00 endon("death"); + param_01 endon("death"); + param_05 = gettime() + param_05 * 1000; + while(gettime() < param_05) + { + wait 0.05; + } +} + +//Function Number: 171 +draw_line_from_ent_to_ent_until_notify(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + param_00 endon("death"); + param_01 endon("death"); + param_05 endon(param_06); + wait 0.05; +} + +//Function Number: 172 +draw_line_until_notify(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + param_05 endon(param_06); + common_scripts\utility::draw_line_for_time(param_00,param_01,param_02,param_03,param_04,0.05); +} + +//Function Number: 173 +draw_line_from_ent_to_vec_for_time(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + param_06 = gettime() + param_06 * 1000; + param_01 = param_01 * param_02; + while(gettime() < param_06) + { + wait 0.05; + if(!isdefined(param_00) || !isdefined(param_00.origin)) + { + return; + } + } +} + +//Function Number: 174 +draw_circle_until_notify(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + var_07 = 16; + var_08 = 360 / var_07; + var_09 = []; + for(var_0A = 0;var_0A < var_07;var_0A++) + { + var_0B = var_08 * var_0A; + var_0C = cos(var_0B) * param_01; + var_0D = sin(var_0B) * param_01; + var_0E = param_00[0] + var_0C; + var_0F = param_00[1] + var_0D; + var_10 = param_00[2]; + var_09[var_09.size] = (var_0E,var_0F,var_10); + } + + thread draw_circle_lines_until_notify(var_09,param_02,param_03,param_04,param_05,param_06); +} + +//Function Number: 175 +draw_circle_lines_until_notify(param_00,param_01,param_02,param_03,param_04,param_05) +{ + for(var_06 = 0;var_06 < param_00.size;var_06++) + { + var_07 = param_00[var_06]; + if(var_06 + 1 >= param_00.size) + { + var_08 = param_00[0]; + } + else + { + var_08 = param_00[var_06 + 1]; + } + + thread draw_line_until_notify(var_07,var_08,param_01,param_02,param_03,param_04,param_05); + } +} + +//Function Number: 176 +clear_enemy_passthrough() +{ + self notify("enemy"); + self clearenemy(); +} + +//Function Number: 177 +battlechatter_off(param_00) +{ + level notify("battlechatter_off_thread"); + animscripts/battlechatter::func_B8D(); + if(isdefined(param_00)) + { + set_battlechatter_variable(param_00,0); + var_01 = getaiarray(param_00); + } + else + { + foreach(param_00 in level.teams) + { + set_battlechatter_variable(param_00,0); + } + + var_01 = getaiarray(); + } + + if(!isdefined(level.chatinitialized) || !level.chatinitialized) + { + return; + } + + for(var_04 = 0;var_04 < var_01.size;var_04++) + { + var_01[var_04].battlechatter = 0; + } + + for(var_04 = 0;var_04 < var_01.size;var_04++) + { + var_05 = var_01[var_04]; + if(!isalive(var_05)) + { + continue; + } + + if(!var_05.chatinitialized) + { + continue; + } + + if(!var_05.isspeaking) + { + continue; + } + + var_05 maps\_utility_code::wait_until_done_speaking(); + } + + var_06 = gettime() - level.lastteamspeaktime["allies"]; + if(var_06 < 1500) + { + wait var_06 / 1000; + } + + if(isdefined(param_00)) + { + level notify(param_00 + " done speaking"); + return; + } + + level notify("done speaking"); +} + +//Function Number: 178 +battlechatter_on(param_00) +{ + thread battlechatter_on_thread(param_00); +} + +//Function Number: 179 +battlechatter_on_thread(param_00) +{ + level endon("battlechatter_off_thread"); + animscripts/battlechatter::func_B8D(); + while(!isdefined(level.chatinitialized)) + { + wait 0.05; + } + + common_scripts\utility::flag_set("battlechatter_on_thread_waiting"); + wait 1.5; + common_scripts\utility::flag_clear("battlechatter_on_thread_waiting"); + if(isdefined(param_00)) + { + set_battlechatter_variable(param_00,1); + var_01 = getaiarray(param_00); + } + else + { + foreach(param_00 in level.teams) + { + set_battlechatter_variable(param_00,1); + } + + var_01 = getaiarray(); + } + + for(var_04 = 0;var_04 < var_01.size;var_04++) + { + var_01[var_04] set_battlechatter(1); + } +} + +//Function Number: 180 +set_battlechatter(param_00) +{ + if(!level.chatinitialized) + { + return; + } + + if(self.type == "dog") + { + return; + } + + if(param_00) + { + if(isdefined(self.script_bcdialog) && !self.script_bcdialog) + { + self.battlechatter = 0; + return; + } + + self.battlechatter = 1; + return; + } + + self.battlechatter = 0; + if(isdefined(self.isspeaking) && self.isspeaking) + { + self waittill("done speaking"); + } +} + +//Function Number: 181 +set_team_bcvoice(param_00,param_01) +{ + if(!level.chatinitialized) + { + return; + } + + var_02 = getarraykeys(level.countryids); + var_03 = array_contains(var_02,param_01); + if(!var_03) + { + return; + } + + var_04 = getaiarray(param_00); + foreach(var_06 in var_04) + { + var_06 set_ai_bcvoice(param_01); + } +} + +//Function Number: 182 +set_ai_bcvoice(param_00) +{ + if(!level.chatinitialized) + { + return; + } + + var_01 = getarraykeys(level.countryids); + var_02 = array_contains(var_01,param_00); + if(!var_02) + { + return; + } + + if(self.type == "dog") + { + return; + } + + if(isdefined(self.isspeaking) && self.isspeaking) + { + self waittill("done speaking"); + wait 0.1; + } + + animscripts/battlechatter_ai::func_AC5(); + wait 0.1; + self.voice = param_00; + animscripts/battlechatter_ai::func_AA9(); +} + +//Function Number: 183 +flavorbursts_on(param_00) +{ + thread set_flavorbursts_team_state(1,param_00); +} + +//Function Number: 184 +flavorbursts_off(param_00) +{ + thread set_flavorbursts_team_state(0,param_00); +} + +//Function Number: 185 +set_flavorbursts_team_state(param_00,param_01) +{ + if(!isdefined(param_01)) + { + param_01 = "allies"; + } + + if(!level.chatinitialized) + { + return; + } + + wait 1.5; + level.flavorbursts[param_01] = param_00; + var_02 = []; + var_02 = getaiarray(param_01); + common_scripts\utility::array_thread(var_02,::set_flavorbursts,param_00); +} + +//Function Number: 186 +set_flavorbursts(param_00) +{ + self.flavorbursts = param_00; +} + +//Function Number: 187 +friendlyfire_warnings_off() +{ + var_00 = getaiarray("allies"); + foreach(var_02 in var_00) + { + if(isalive(var_02)) + { + var_02 set_friendlyfire_warnings(0); + } + } + + level.friendlyfire_warnings = 0; +} + +//Function Number: 188 +friendlyfire_warnings_on() +{ + var_00 = getaiarray("allies"); + foreach(var_02 in var_00) + { + if(isalive(var_02)) + { + var_02 set_friendlyfire_warnings(1); + } + } + + level.friendlyfire_warnings = 1; +} + +//Function Number: 189 +set_friendlyfire_warnings(param_00) +{ + if(param_00) + { + self.friendlyfire_warnings_disable = undefined; + return; + } + + self.friendlyfire_warnings_disable = 1; +} + +//Function Number: 190 +set_friendly_chain_wrapper(param_00) +{ + level.player setfriendlychain(param_00); + level notify("newFriendlyChain",param_00.script_noteworthy); +} + +//Function Number: 191 +get_obj_origin(param_00) +{ + var_01 = getentarray("objective","targetname"); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + if(var_01[var_02].script_noteworthy == param_00) + { + return var_01[var_02].origin; + } + } +} + +//Function Number: 192 +get_obj_event(param_00) +{ + var_01 = getentarray("objective_event","targetname"); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + if(var_01[var_02].script_noteworthy == param_00) + { + return var_01[var_02]; + } + } +} + +//Function Number: 193 +waittill_objective_event() +{ + maps\_utility_code::waittill_objective_event_proc(1); +} + +//Function Number: 194 +waittill_objective_event_notrigger() +{ + maps\_utility_code::waittill_objective_event_proc(0); +} + +//Function Number: 195 +obj_set_chain_and_enemies() +{ + var_00 = getnode(self.target,"targetname"); + var_01 = getentarray(self.target,"targetname"); + flood_and_secure_scripted(var_01); + level notify("new_friendly_trigger"); + level.player set_friendly_chain_wrapper(var_00); +} + +//Function Number: 196 +flood_begin() +{ + self notify("flood_begin"); +} + +//Function Number: 197 +flood_and_secure_scripted(param_00,param_01) +{ + if(!isdefined(param_01)) + { + param_01 = 0; + } + + if(!isdefined(level.spawnerwave)) + { + level.spawnerwave = []; + } + + common_scripts\utility::array_thread(param_00,::maps\_spawner::flood_and_secure_spawner,param_01); + for(var_02 = 0;var_02 < param_00.size;var_02++) + { + param_00[var_02].playertriggered = 1; + param_00[var_02] notify("flood_begin"); + } +} + +//Function Number: 198 +debugorigin() +{ + self notify("Debug origin"); + self endon("Debug origin"); + self endon("death"); + for(;;) + { + var_00 = anglestoforward(self.angles); + var_01 = var_00 * 30; + var_02 = var_00 * 20; + var_03 = anglestoright(self.angles); + var_04 = var_03 * -10; + var_03 = var_03 * 10; + wait 0.05; + } +} + +//Function Number: 199 +get_linked_structs() +{ + var_00 = []; + if(isdefined(self.script_linkto)) + { + var_01 = common_scripts\utility::get_links(); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + var_03 = common_scripts\utility::getstruct(var_01[var_02],"script_linkname"); + if(isdefined(var_03)) + { + var_00[var_00.size] = var_03; + } + } + } + + return var_00; +} + +//Function Number: 200 +get_last_ent_in_chain(param_00) +{ + var_01 = self; + while(isdefined(var_01.target)) + { + wait 0.05; + if(isdefined(var_01.target)) + { + switch(param_00) + { + case "vehiclenode": + var_01 = getvehiclenode(var_01.target,"targetname"); + break; + + case "pathnode": + var_01 = getnode(var_01.target,"targetname"); + break; + + case "ent": + var_01 = getent(var_01.target,"targetname"); + break; + + case "struct": + var_01 = common_scripts\utility::getstruct(var_01.target,"targetname"); + break; + + default: + break; + } + + continue; + } + + break; + } + + var_02 = var_01; + return var_02; +} + +//Function Number: 201 +player_seek(param_00) +{ + var_01 = spawn("script_origin",level.player.origin); + var_01 linkto(level.player); + if(isdefined(param_00)) + { + thread timeout(param_00); + } + + self setgoalentity(var_01); + if(!isdefined(self.oldgoalradius)) + { + self.oldgoalradius = self.goalradius; + } + + self.goalradius = 300; + common_scripts\utility::waittill_any("goal","timeout"); + if(isdefined(self.oldgoalradius)) + { + self.goalradius = self.oldgoalradius; + self.oldgoalradius = undefined; + } + + var_01 delete(); +} + +//Function Number: 202 +timeout(param_00) +{ + self endon("death"); + wait param_00; + self notify("timeout"); +} + +//Function Number: 203 +set_forcegoal() +{ + if(isdefined(self.set_forcedgoal)) + { + return; + } + + self.oldfightdist = self.pathenemyfightdist; + self.oldmaxdist = self.pathenemylookahead; + self.oldmaxsight = self.maxsightdistsqrd; + self.pathenemyfightdist = 8; + self.pathenemylookahead = 8; + self.maxsightdistsqrd = 1; + self.set_forcedgoal = 1; +} + +//Function Number: 204 +unset_forcegoal() +{ + if(!isdefined(self.set_forcedgoal)) + { + return; + } + + self.pathenemyfightdist = self.oldfightdist; + self.pathenemylookahead = self.oldmaxdist; + self.maxsightdistsqrd = self.oldmaxsight; + self.set_forcedgoal = undefined; +} + +//Function Number: 205 +array_add(param_00,param_01) +{ + param_00[param_00.size] = param_01; + return param_00; +} + +//Function Number: 206 +array_removedead_keepkeys(param_00) +{ + var_01 = []; + var_02 = getarraykeys(param_00); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + var_04 = var_02[var_03]; + if(!isalive(param_00[var_04])) + { + continue; + } + + var_01[var_04] = param_00[var_04]; + } + + return var_01; +} + +//Function Number: 207 +array_removedead(param_00) +{ + var_01 = []; + foreach(var_03 in param_00) + { + if(!isalive(var_03)) + { + continue; + } + + var_01[var_01.size] = var_03; + } + + return var_01; +} + +//Function Number: 208 +array_removedead_or_dying(param_00) +{ + var_01 = []; + foreach(var_03 in param_00) + { + if(!isalive(var_03)) + { + continue; + } + + if(var_03 doinglongdeath()) + { + continue; + } + + var_01[var_01.size] = var_03; + } + + return var_01; +} + +//Function Number: 209 +array_insert(param_00,param_01,param_02) +{ + if(param_02 == param_00.size) + { + var_03 = param_00; + return var_7B; + } + + var_03 = []; + var_04 = 0; + var_05 = 0; + while(var_05 < param_01.size) + { + if(var_05 == var_03) + { + var_7B[var_05] = param_02; + var_04 = 1; + } + + var_7B[var_05 + var_04] = param_01[var_05]; + var_05++ = var_7B[var_03.size]; + } + + return var_7B; +} + +//Function Number: 210 +array_remove_nokeys(param_00,param_01) +{ + var_02 = []; + for(var_03 = 0;var_03 < param_00.size;var_03++) + { + if(param_00[var_03] != param_01) + { + var_02[var_02.size] = param_00[var_03]; + } + } + + return var_02; +} + +//Function Number: 211 +array_remove_index(param_00,param_01) +{ + for(var_02 = 0;var_02 < param_00.size - 1;var_02++) + { + if(var_02 == param_01) + { + param_00[var_02] = param_00[var_02 + 1]; + param_01++; + } + } + + param_00[param_00.size - 1] = undefined; + return param_00; +} + +//Function Number: 212 +array_notify(param_00,param_01,param_02) +{ + foreach(var_04 in param_00) + { + var_04 notify(param_01,param_02); + } +} + +//Function Number: 213 +struct_arrayspawn() +{ + var_00 = spawnstruct(); + var_00.array = []; + var_00.lastindex = 0; + return var_00; +} + +//Function Number: 214 +structarray_add(param_00,param_01) +{ + param_00.array[param_00.lastindex] = param_01; + param_01.struct_array_index = param_00.lastindex; + param_00.lastindex++; +} + +//Function Number: 215 +structarray_remove(param_00,param_01) +{ + structarray_swaptolast(param_00,param_01); + param_00.array[param_00.lastindex - 1] = undefined; + param_00.lastindex--; +} + +//Function Number: 216 +structarray_remove_index(param_00,param_01) +{ + if(isdefined(param_00.array[param_00.lastindex - 1])) + { + param_00.array[param_01] = param_00.array[param_00.lastindex - 1]; + param_00.array[param_01].struct_array_index = param_01; + param_00.array[param_00.lastindex - 1] = undefined; + param_00.lastindex = param_00.array.size; + return; + } + + param_00.array[param_01] = undefined; + structarray_remove_undefined(param_00); +} + +//Function Number: 217 +structarray_remove_undefined(param_00) +{ + var_01 = []; + foreach(var_03 in param_00.array) + { + if(!isdefined(var_03)) + { + continue; + } + + var_01[var_01.size] = var_03; + } + + param_00.array = var_01; + foreach(var_06, var_03 in param_00.array) + { + var_03.struct_array_index = var_06; + } + + param_00.lastindex = param_00.array.size; +} + +//Function Number: 218 +structarray_swaptolast(param_00,param_01) +{ + param_00 maps\_utility_code::structarray_swap(param_00.array[param_00.lastindex - 1],param_01); +} + +//Function Number: 219 +structarray_shuffle(param_00,param_01) +{ + for(var_02 = 0;var_02 < param_01;var_02++) + { + param_00 maps\_utility_code::structarray_swap(param_00.array[var_02],param_00.array[randomint(param_00.lastindex)]); + } +} + +//Function Number: 220 +set_ambient_alias(param_00,param_01) +{ + var_02 = param_00; + maps\_audio_zone_manager::azm_set_zone_streamed_ambience(var_02,param_01); +} + +//Function Number: 221 +get_use_key() +{ + if(level.console) + { + return " + usereload"; + } + + return " + activate"; +} + +//Function Number: 222 +doom() +{ + self teleport((0,0,-15000)); + self kill((0,0,0)); +} + +//Function Number: 223 +custom_battlechatter(param_00) +{ + return animscripts/battlechatter_ai::func_B40(param_00); +} + +//Function Number: 224 +get_stop_watch(param_00,param_01) +{ + var_02 = newhudelem(); + if(level.console) + { + var_02.x = 68; + var_02.y = 35; + } + else + { + var_02.x = 58; + var_02.y = 95; + } + + var_02.alignx = "center"; + var_02.aligny = "middle"; + var_02.horzalign = "left"; + var_02.vertalign = "middle"; + if(isdefined(param_01)) + { + var_03 = param_01; + } + else + { + var_03 = level.explosiveplanttime; + } + + var_02 setclock(var_03,param_00,"hudStopwatch",64,64); + return var_02; +} + +//Function Number: 225 +objective_is_active(param_00) +{ + var_01 = 0; + for(var_02 = 0;var_02 < level.active_objective.size;var_02++) + { + if(level.active_objective[var_02] != param_00) + { + continue; + } + + var_01 = 1; + break; + } + + return var_01; +} + +//Function Number: 226 +objective_is_inactive(param_00) +{ + var_01 = 0; + for(var_02 = 0;var_02 < level.inactive_objective.size;var_02++) + { + if(level.inactive_objective[var_02] != param_00) + { + continue; + } + + var_01 = 1; + break; + } + + return var_01; +} + +//Function Number: 227 +set_objective_inactive(param_00) +{ + var_01 = []; + for(var_02 = 0;var_02 < level.active_objective.size;var_02++) + { + if(level.active_objective[var_02] == param_00) + { + continue; + } + + var_01[var_01.size] = level.active_objective[var_02]; + } + + level.active_objective = var_01; + var_03 = 0; + for(var_02 = 0;var_02 < level.inactive_objective.size;var_02++) + { + if(level.inactive_objective[var_02] != param_00) + { + continue; + } + + var_03 = 1; + } + + if(!var_03) + { + level.inactive_objective[level.inactive_objective.size] = param_00; + } +} + +//Function Number: 228 +set_objective_active(param_00) +{ + var_01 = []; + for(var_02 = 0;var_02 < level.inactive_objective.size;var_02++) + { + if(level.inactive_objective[var_02] == param_00) + { + continue; + } + + var_01[var_01.size] = level.inactive_objective[var_02]; + } + + level.inactive_objective = var_01; + var_03 = 0; + for(var_02 = 0;var_02 < level.active_objective.size;var_02++) + { + if(level.active_objective[var_02] != param_00) + { + continue; + } + + var_03 = 1; + } + + if(!var_03) + { + level.active_objective[level.active_objective.size] = param_00; + } +} + +//Function Number: 229 +detect_friendly_fire() +{ + level thread maps\_friendlyfire::detectfriendlyfireonentity(self); +} + +//Function Number: 230 +missionfailedwrapper() +{ + if(level.missionfailed) + { + return; + } + + if(isdefined(level.nextmission)) + { + return; + } + + level.missionfailed = 1; + common_scripts\utility::flag_set("missionfailed"); + if(arcademode()) + { + return; + } + + if(getdvar("failure_disabled") == "1") + { + return; + } + + if(is_specialop()) + { + level.challenge_end_time = gettime(); + thread maps\_specialops_code::failure_summary_display(); + return; + } + + maps\_utility_code::mission_recon(0); + missionfailed(); +} + +//Function Number: 231 +script_delay() +{ + if(isdefined(self.script_delay)) + { + wait self.script_delay; + return 1; + } + else if(isdefined(self.script_delay_min) && isdefined(self.var_7E6)) + { + wait randomfloatrange(self.script_delay_min,self.var_7E6); + return 1; + } + + return 0; +} + +//Function Number: 232 +script_wait() +{ + var_00 = gettime(); + if(isdefined(self.script_wait)) + { + wait self.script_wait; + if(isdefined(self.script_wait_add)) + { + self.script_wait = self.script_wait + self.script_wait_add; + } + } + else if(isdefined(self.script_wait_min) && isdefined(self.script_wait_max)) + { + wait randomfloatrange(self.script_wait_min,self.script_wait_max); + if(isdefined(self.script_wait_add)) + { + self.script_wait_min = self.script_wait_min + self.script_wait_add; + self.script_wait_max = self.script_wait_max + self.script_wait_add; + } + } + + return gettime() - var_00; +} + +//Function Number: 233 +guy_enter_vehicle(param_00) +{ + maps\_vehicle_aianim::guy_enter(param_00); +} + +//Function Number: 234 +guy_runtovehicle_load(param_00,param_01) +{ + maps\_vehicle_aianim::guy_runtovehicle(param_00,param_01); +} + +//Function Number: 235 +get_force_color_guys(param_00,param_01) +{ + var_02 = getaiarray(param_00); + var_03 = []; + for(var_04 = 0;var_04 < var_02.size;var_04++) + { + var_05 = var_02[var_04]; + if(!isdefined(var_05.script_forcecolor)) + { + continue; + } + + if(var_05.script_forcecolor != param_01) + { + continue; + } + + var_03[var_03.size] = var_05; + } + + return var_03; +} + +//Function Number: 236 +get_all_force_color_friendlies() +{ + var_00 = getaiarray("allies"); + var_01 = []; + for(var_02 = 0;var_02 < var_00.size;var_02++) + { + var_03 = var_00[var_02]; + if(!isdefined(var_03.script_forcecolor)) + { + continue; + } + + var_01[var_01.size] = var_03; + } + + return var_01; +} + +//Function Number: 237 +get_all_target_ents(param_00) +{ + if(!isdefined(param_00)) + { + param_00 = self.target; + } + + var_01 = []; + var_02 = getentarray(param_00,"targetname"); + var_01 = common_scripts\utility::array_combine(var_01,var_02); + var_02 = getnodearray(param_00,"targetname"); + var_01 = common_scripts\utility::array_combine(var_01,var_02); + var_02 = common_scripts\utility::getstructarray(param_00,"targetname"); + var_01 = common_scripts\utility::array_combine(var_01,var_02); + var_02 = getvehiclenodearray(param_00,"targetname"); + var_01 = common_scripts\utility::array_combine(var_01,var_02); + return var_01; +} + +//Function Number: 238 +enable_ai_color() +{ + if(isdefined(self.script_forcecolor)) + { + return; + } + + if(!isdefined(self.old_forcecolor)) + { + return; + } + + set_force_color(self.old_forcecolor); + self.old_forcecolor = undefined; +} + +//Function Number: 239 +enable_ai_color_dontmove() +{ + self.dontcolormove = 1; + enable_ai_color(); +} + +//Function Number: 240 +disable_ai_color() +{ + if(isdefined(self.new_force_color_being_set)) + { + self endon("death"); + self waittill("done_setting_new_color"); + } + + self clearfixednodesafevolume(); + if(!isdefined(self.script_forcecolor)) + { + return; + } + + self.old_forcecolor = self.script_forcecolor; + level.arrays_of_colorforced_ai[maps\_colors::get_team()][self.script_forcecolor] = common_scripts\utility::array_remove(level.arrays_of_colorforced_ai[maps\_colors::get_team()][self.script_forcecolor],self); + maps\_colors::left_color_node(); + self.script_forcecolor = undefined; + self.currentcolorcode = undefined; +} + +//Function Number: 241 +clear_force_color() +{ + disable_ai_color(); +} + +//Function Number: 242 +check_force_color(param_00) +{ + var_01 = level.colorchecklist[tolower(param_00)]; + if(isdefined(self.script_forcecolor) && var_01 == self.script_forcecolor) + { + return 1; + } + + return 0; +} + +//Function Number: 243 +get_force_color() +{ + var_00 = self.script_forcecolor; + return var_00; +} + +//Function Number: 244 +shortencolor(param_00) +{ + return level.colorchecklist[tolower(param_00)]; +} + +//Function Number: 245 +set_force_color(param_00) +{ + var_01 = shortencolor(param_00); + if(!isai(self)) + { + set_force_color_spawner(var_01); + return; + } + + if(self.team == "allies") + { + self.fixednode = 1; + self.fixednodesaferadius = 64; + self.pathenemyfightdist = 0; + self.pathenemylookahead = 0; + } + + self.script_color_axis = undefined; + self.script_color_allies = undefined; + self.old_forcecolor = undefined; + var_02 = maps\_colors::get_team(); + if(isdefined(self.script_forcecolor)) + { + level.arrays_of_colorforced_ai[var_02][self.script_forcecolor] = common_scripts\utility::array_remove(level.arrays_of_colorforced_ai[var_02][self.script_forcecolor],self); + } + + self.script_forcecolor = var_01; + level.arrays_of_colorforced_ai[var_02][var_01] = array_removedead(level.arrays_of_colorforced_ai[var_02][var_01]); + level.arrays_of_colorforced_ai[var_02][self.script_forcecolor] = array_add(level.arrays_of_colorforced_ai[var_02][self.script_forcecolor],self); + thread maps\_utility_code::new_color_being_set(var_01); +} + +//Function Number: 246 +set_force_color_spawner(param_00) +{ + self.script_forcecolor = param_00; + self.old_forcecolor = undefined; +} + +//Function Number: 247 +issue_color_orders(param_00,param_01) +{ + var_02 = strtok(param_00," "); + var_03 = []; + var_04 = []; + for(var_05 = 0;var_05 < var_02.size;var_05++) + { + var_06 = undefined; + if(issubstr(var_02[var_05],"r")) + { + var_06 = "r"; + } + else if(issubstr(var_02[var_05],"b")) + { + var_06 = "b"; + } + else if(issubstr(var_02[var_05],"y")) + { + var_06 = "y"; + } + else if(issubstr(var_02[var_05],"c")) + { + var_06 = "c"; + } + else if(issubstr(var_02[var_05],"g")) + { + var_06 = "g"; + } + else if(issubstr(var_02[var_05],"p")) + { + var_06 = "p"; + } + else if(issubstr(var_02[var_05],"o")) + { + var_06 = "o"; + } + else + { + } + + var_04[var_06] = var_02[var_05]; + var_03[var_03.size] = var_06; + } + + for(var_05 = 0;var_05 < var_02.size;var_05++) + { + level.arrays_of_colorcoded_spawners[param_01][var_02[var_05]] = common_scripts\utility::array_removeundefined(level.arrays_of_colorcoded_spawners[param_01][var_02[var_05]]); + for(var_07 = 0;var_07 < level.arrays_of_colorcoded_spawners[param_01][var_02[var_05]].size;var_07++) + { + level.arrays_of_colorcoded_spawners[param_01][var_02[var_05]][var_07].currentcolorcode = var_02[var_05]; + } + } + + for(var_05 = 0;var_05 < var_03.size;var_05++) + { + level.arrays_of_colorforced_ai[param_01][var_03[var_05]] = array_removedead(level.arrays_of_colorforced_ai[param_01][var_03[var_05]]); + level.currentcolorforced[param_01][var_03[var_05]] = var_04[var_03[var_05]]; + } + + for(var_05 = 0;var_05 < var_02.size;var_05++) + { + thread maps\_colors::issue_color_order_to_ai(var_02[var_05],var_03[var_05],param_01); + } +} + +//Function Number: 248 +flashrumbleloop(param_00) +{ + var_01 = gettime() + param_00 * 1000; + while(gettime() < var_01) + { + self playrumbleonentity("damage_heavy"); + wait 0.05; + } +} + +//Function Number: 249 +flashmonitorenablehealthshield(param_00) +{ + self endon("death"); + self endon("flashed"); + wait 0.2; + self enablehealthshield(0); + wait param_00 + 2; + self enablehealthshield(1); +} + +//Function Number: 250 +ninebanghandler(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = [0.8,0.7,0.7,0.6]; + var_06 = [1,0.8,0.6,0.6]; + foreach(var_0C, var_08 in var_06) + { + var_09 = param_01 - 0.85 / 0.15; + if(var_09 > param_02) + { + param_02 = var_09; + } + + if(param_02 < 0.25) + { + param_02 = 0.25; + } + + var_0A = 0.3; + if(param_01 > 1 - var_0A) + { + param_01 = 1; + } + else + { + param_01 = param_01 / 1 - var_0A; + } + + if(param_04 != self.team) + { + var_0B = param_01 * param_02 * 6; + } + else + { + var_0B = param_01 * param_02 * 3; + } + + if(var_0B < 0.25) + { + continue; + } + + var_0B = var_08 * var_0B; + if(isdefined(self.maxflashedseconds) && var_0B > self.maxflashedseconds) + { + var_0B = self.maxflashedseconds; + } + + self.flashingteam = param_04; + self notify("flashed"); + self.flashendtime = gettime() + var_0B * 1000; + self shellshock("flashbang",var_0B); + common_scripts\utility::flag_set("player_flashed"); + if(param_01 * param_02 > 0.5) + { + thread flashmonitorenablehealthshield(var_0B); + } + + wait var_05[var_0C]; + } + + thread maps\_utility_code::unflash_flag(0.05); +} + +//Function Number: 251 +flashmonitor() +{ + self endon("death"); + for(;;) + { + self waittill("flashbang",var_00,var_01,var_02,var_03,var_04); + if("1" == getdvar("noflash")) + { + continue; + } + + if(is_player_down(self)) + { + continue; + } + + if(isdefined(self.threw_ninebang)) + { + var_05 = 0.8; + var_06 = 1 - var_05; + self.threw_ninebang = undefined; + if(var_01 < var_06) + { + continue; + } + + var_01 = var_01 - var_06 / var_05; + } + + var_07 = var_01 - 0.85 / 0.15; + if(var_07 > var_02) + { + var_02 = var_07; + } + + if(var_02 < 0.25) + { + var_02 = 0.25; + } + + var_08 = 0.3; + if(var_01 > 1 - var_08) + { + var_01 = 1; + } + else + { + var_01 = var_01 / 1 - var_08; + } + + if(var_04 != self.team) + { + var_09 = var_01 * var_02 * 6; + } + else + { + var_09 = var_01 * var_02 * 3; + } + + if(var_09 < 0.25) + { + continue; + } + + if(isdefined(self.maxflashedseconds) && var_09 > self.maxflashedseconds) + { + var_09 = self.maxflashedseconds; + } + + self.flashingteam = var_04; + self notify("flashed"); + self.flashendtime = gettime() + var_09 * 1000; + self shellshock("flashbang",var_09); + common_scripts\utility::flag_set("player_flashed"); + thread maps\_utility_code::unflash_flag(var_09); + if(var_01 * var_02 > 0.5) + { + thread flashmonitorenablehealthshield(var_09); + } + + if(var_09 > 2) + { + thread flashrumbleloop(0.75); + } + else + { + thread flashrumbleloop(0.25); + } + + if(var_04 != "allies") + { + thread flashnearbyallies(var_09,var_04); + } + } +} + +//Function Number: 252 +flashnearbyallies(param_00,param_01) +{ + wait 0.05; + var_02 = getaiarray("allies"); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + if(distancesquared(var_02[var_03].origin,self.origin) < 122500) + { + var_04 = param_00 + randomfloatrange(-1000,1500); + if(var_04 > 4.5) + { + var_04 = 4.5; + } + else if(var_04 < 0.25) + { + continue; + } + + var_05 = gettime() + var_04 * 1000; + if(!isdefined(var_02[var_03].flashendtime) || var_02[var_03].flashendtime < var_05) + { + var_02[var_03].flashingteam = param_01; + var_02[var_03] flashbangstart(var_04); + } + } + } +} + +//Function Number: 253 +restarteffect() +{ + common_scripts\_createfx::restart_fx_looper(); +} + +//Function Number: 254 +pauseexploder(param_00) +{ + param_00 = param_00 + ""; + if(isdefined(level.createfxexploders)) + { + var_01 = level.createfxexploders[param_00]; + if(isdefined(var_01)) + { + foreach(var_03 in var_01) + { + var_03 common_scripts\utility::pauseeffect(); + } + + return; + } + + return; + } + + foreach(var_06 in level.createfxent) + { + if(!isdefined(var_06.v["exploder"])) + { + continue; + } + + if(var_06.v["exploder"] != var_03) + { + continue; + } + + var_06 common_scripts\utility::pauseeffect(); + } +} + +//Function Number: 255 +restartexploder(param_00) +{ + param_00 = param_00 + ""; + if(isdefined(level.createfxexploders)) + { + var_01 = level.createfxexploders[param_00]; + if(isdefined(var_01)) + { + foreach(var_03 in var_01) + { + var_03 restarteffect(); + } + + return; + } + + return; + } + + foreach(var_06 in level.createfxent) + { + if(!isdefined(var_06.v["exploder"])) + { + continue; + } + + if(var_06.v["exploder"] != var_03) + { + continue; + } + + var_06 restarteffect(); + } +} + +//Function Number: 256 +getfxarraybyid(param_00) +{ + var_01 = []; + if(isdefined(level.createfxbyfxid)) + { + var_02 = level.createfxbyfxid[param_00]; + if(isdefined(var_02)) + { + var_01 = var_02; + } + } + else + { + for(var_03 = 0;var_03 < level.createfxent.size;var_03++) + { + if(level.createfxent[var_03].v["fxid"] == param_00) + { + var_01[var_01.size] = level.createfxent[var_03]; + } + } + } + + return var_01; +} + +//Function Number: 257 +ignoreallenemies(param_00) +{ + self notify("ignoreAllEnemies_threaded"); + self endon("ignoreAllEnemies_threaded"); + if(param_00) + { + self.old_threat_bias_group = self getthreatbiasgroup(); + var_01 = undefined; + createthreatbiasgroup("ignore_everybody"); + self setthreatbiasgroup("ignore_everybody"); + var_02 = []; + var_03 = getaiarray(var_7B[self.team]); + var_04 = []; + for(var_05 = 0;var_05 < var_03.size;var_05++ = var_7B["allies"]) + { + var_04[var_03[var_05] getthreatbiasgroup()] = 1; + } + + var_06 = getarraykeys(var_04); + for(var_05 = 0;var_05 < var_06.size;var_05++ = "axis") + { + setthreatbias(var_06[var_05],"ignore_everybody",0); + } + + return; + } + + var_01 = undefined; + if(self.old_threat_bias_group != "") + { + self setthreatbiasgroup(self.old_threat_bias_group); + } + + self.old_threat_bias_group = undefined; +} + +//Function Number: 258 +vehicle_detachfrompath() +{ + maps\_vehicle::vehicle_pathdetach(); +} + +//Function Number: 259 +vehicle_resumepath() +{ + thread maps\_vehicle::vehicle_resumepathvehicle(); +} + +//Function Number: 260 +vehicle_land(param_00) +{ + maps\_vehicle::vehicle_landvehicle(param_00); +} + +//Function Number: 261 +vehicle_liftoff(param_00) +{ + maps\_vehicle::vehicle_liftoffvehicle(param_00); +} + +//Function Number: 262 +vehicle_dynamicpath(param_00,param_01) +{ + maps\_vehicle::vehicle_paths(param_00,param_01); +} + +//Function Number: 263 +groundpos(param_00) +{ + return bullettrace(param_00,param_00 + (0,0,-100000),0,self)["position"]; +} + +//Function Number: 264 +change_player_health_packets(param_00) +{ + self.player_health_packets = self.player_health_packets + param_00; + self notify("update_health_packets"); + if(self.player_health_packets >= 3) + { + self.player_health_packets = 3; + } +} + +//Function Number: 265 +getvehiclespawner(param_00) +{ + var_01 = getvehiclespawnerarray(param_00); + return var_01[0]; +} + +//Function Number: 266 +getvehiclespawnerarray(param_00) +{ + return maps\_vehicle::_getvehiclespawnerarray(param_00); +} + +//Function Number: 267 +describe_start(param_00,param_01,param_02,param_03) +{ + add_start_assert(); + if(!isdefined(level.start_description)) + { + level.start_description = []; + } + + level.start_description[param_00] = add_start_construct(param_00,param_01,param_02,param_03); +} + +//Function Number: 268 +add_start(param_00,param_01,param_02,param_03) +{ + add_start_assert(); + param_00 = tolower(param_00); + if(isdefined(level.start_description) && isdefined(level.start_description[param_00])) + { + var_05 = level.start_description[param_00]; + } + else + { + var_05 = add_start_construct(param_01,param_02,param_03,var_05); + } + + if(!isdefined(param_01)) + { + if(!isdefined(level.start_description)) + { + } + else if(!issubstr(param_00,"no_game")) + { + if(!isdefined(level.start_description[param_00])) + { + return; + } + } + } + + level.start_functions[level.start_functions.size] = var_05; + level.start_arrays[param_00] = var_05; +} + +//Function Number: 269 +is_no_game_start() +{ + return issubstr(level.start_point,"no_game"); +} + +//Function Number: 270 +add_start_construct(param_00,param_01,param_02,param_03) +{ + var_04 = []; + return var_7B; +} + +//Function Number: 271 +add_start_assert() +{ + if(!isdefined(level.start_functions)) + { + level.start_functions = []; + } +} + +//Function Number: 272 +level_has_start_points() +{ + return level.start_functions.size > 1; +} + +//Function Number: 273 +set_default_start(param_00) +{ + level.default_start_override = param_00; +} + +//Function Number: 274 +default_start(param_00) +{ + level.default_start = param_00; +} + +//Function Number: 275 +linetime(param_00,param_01,param_02,param_03) +{ + thread maps\_utility_code::linetime_proc(param_00,param_01,param_02,param_03); +} + +//Function Number: 276 +within_fov(param_00,param_01,param_02,param_03) +{ + var_04 = vectornormalize(param_02 - param_00); + var_05 = anglestoforward(param_01); + var_06 = vectordot(var_05,var_04); + return var_06 >= param_03; +} + +//Function Number: 277 +within_fov_2d(param_00,param_01,param_02,param_03) +{ + param_00 = set_z(param_00,0); + param_02 = set_z(param_02,0); + param_01 = (0,param_01[1],0); + var_04 = vectornormalize(param_02 - param_00); + var_05 = anglestoforward(param_01); + var_06 = vectordot(var_05,var_04); + return var_06 >= param_03; +} + +//Function Number: 278 +get_dot(param_00,param_01,param_02) +{ + var_03 = vectornormalize(param_02 - param_00); + var_04 = anglestoforward(param_01); + var_05 = vectordot(var_04,var_03); + return var_05; +} + +//Function Number: 279 +within_fov_of_players(param_00,param_01) +{ + var_02 = undefined; + for(var_03 = 0;var_03 < level.players.size;var_03++) + { + var_04 = level.players[var_03] geteye(); + var_02 = within_fov(var_04,level.players[var_03] getplayerangles(),param_00,param_01); + if(!var_02) + { + return 0; + } + } + + return 1; +} + +//Function Number: 280 +waitspread(param_00,param_01) +{ + if(!isdefined(param_01)) + { + param_01 = param_00; + param_00 = 0; + } + + wait randomfloatrange(param_00,param_01); + if(1) + { + return; + } + + var_02 = undefined; + if(!isdefined(level.active_wait_spread)) + { + level.active_wait_spread = 1; + level.wait_spreaders = 0; + var_02 = level.wait_spreaders; + level.wait_spreaders++; + thread maps\_utility_code::waitspread_code(param_00,param_01); + } + else + { + var_02 = level.wait_spreaders; + level.wait_spreaders++; + waittillframeend; + } + + waittillframeend; + wait level.wait_spreader_allotment[var_02]; +} + +//Function Number: 281 +wait_for_buffer_time_to_pass(param_00,param_01) +{ + var_02 = param_01 * 1000 - gettime() - param_00; + var_02 = var_02 * 0.001; + if(var_02 > 0) + { + wait var_02; + } +} + +//Function Number: 282 +bcs_scripted_dialogue_start() +{ + anim.scripteddialoguestarttime = gettime(); +} + +//Function Number: 283 +dialogue_queue(param_00) +{ + bcs_scripted_dialogue_start(); + maps\_anim::anim_single_queue(self,param_00); +} + +//Function Number: 284 +generic_dialogue_queue(param_00,param_01) +{ + bcs_scripted_dialogue_start(); + maps\_anim::anim_generic_queue(self,param_00,undefined,undefined,param_01); +} + +//Function Number: 285 +radio_dialogue(param_00,param_01) +{ + if(!isdefined(level.player_radio_emitter)) + { + var_02 = spawn("script_origin",(0,0,0)); + var_02 linkto(level.player,"",(0,0,0),(0,0,0)); + level.player_radio_emitter = var_02; + } + + bcs_scripted_dialogue_start(); + var_03 = 0; + if(!isdefined(param_01)) + { + var_03 = level.player_radio_emitter function_stack(::play_sound_on_tag,level.scr_radio[param_00],undefined,1); + } + else + { + var_03 = level.player_radio_emitter function_stack_timeout(param_01,::play_sound_on_tag,level.scr_radio[param_00],undefined,1); + } + + return var_03; +} + +//Function Number: 286 +radio_dialogue_overlap(param_00) +{ + level.player_radio_emitter play_sound_on_tag(level.scr_radio[param_00],undefined,1); +} + +//Function Number: 287 +radio_dialogue_stop() +{ + if(!isdefined(level.player_radio_emitter)) + { + return; + } + + level.player_radio_emitter delete(); +} + +//Function Number: 288 +radio_dialogue_clear_stack() +{ + if(!isdefined(level.player_radio_emitter)) + { + return; + } + + level.player_radio_emitter function_stack_clear(); +} + +//Function Number: 289 +radio_dialogue_interupt(param_00) +{ + if(!isdefined(level.player_radio_emitter)) + { + var_01 = spawn("script_origin",(0,0,0)); + var_01 linkto(level.player,"",(0,0,0),(0,0,0)); + level.player_radio_emitter = var_01; + } + + level.player_radio_emitter play_sound_on_tag(level.scr_radio[param_00],undefined,1); +} + +//Function Number: 290 +radio_dialogue_safe(param_00) +{ + return radio_dialogue(param_00,0.05); +} + +//Function Number: 291 +radio_dialogue_queue(param_00) +{ + radio_dialogue(param_00); +} + +//Function Number: 292 +hint_create(param_00,param_01,param_02) +{ + var_03 = spawnstruct(); + if(isdefined(param_01) && param_01 == 1) + { + var_03.bg = newhudelem(); + } + + var_03.elm = newhudelem(); + var_03 hint_position_internal(param_02); + var_03.elm settext(param_00); + return var_03; +} + +//Function Number: 293 +hint_delete() +{ + self notify("death"); + if(isdefined(self.elm)) + { + self.elm destroy(); + } + + if(isdefined(self.bg)) + { + self.bg destroy(); + } +} + +//Function Number: 294 +hint_position_internal(param_00) +{ + if(level.console) + { + self.elm.fontscale = 2; + } + else + { + self.elm.fontscale = 1.6; + } + + self.elm.x = 0; + self.elm.y = -40; + self.elm.alignx = "center"; + self.elm.aligny = "bottom"; + self.elm.horzalign = "center"; + self.elm.vertalign = "middle"; + self.elm.sort = 1; + self.elm.alpha = 0.8; + if(!isdefined(self.bg)) + { + return; + } + + self.bg.x = 0; + self.bg.y = -40; + self.bg.alignx = "center"; + self.bg.aligny = "middle"; + self.bg.horzalign = "center"; + self.bg.vertalign = "middle"; + self.bg.sort = -1; + if(level.console) + { + self.bg setshader("popmenu_bg",650,52); + } + else + { + self.bg setshader("popmenu_bg",650,42); + } + + if(!isdefined(param_00)) + { + param_00 = 0.5; + } + + self.bg.alpha = param_00; +} + +//Function Number: 295 +string(param_00) +{ + return "" + param_00; +} + +//Function Number: 296 +ignoreeachother(param_00,param_01) +{ + setignoremegroup(param_00,param_01); + setignoremegroup(param_01,param_00); +} + +//Function Number: 297 +add_global_spawn_function(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = []; + level.spawn_funcs[param_01][level.spawn_funcs[param_01].size] = var_7B; +} + +//Function Number: 298 +remove_global_spawn_function(param_00,param_01) +{ + var_02 = []; + for(var_03 = 0;var_03 < level.spawn_funcs[param_00].size;var_03++) + { + if(level.spawn_funcs[param_00][var_03]["function"] != param_01) + { + var_02[var_02.size] = level.spawn_funcs[param_00][var_03]; + } + } + + level.spawn_funcs[param_00] = var_02; +} + +//Function Number: 299 +exists_global_spawn_function(param_00,param_01) +{ + if(!isdefined(level.spawn_funcs)) + { + return 0; + } + + for(var_02 = 0;var_02 < level.spawn_funcs[param_00].size;var_02++) + { + if(level.spawn_funcs[param_00][var_02]["function"] == param_01) + { + return 1; + } + } + + return 0; +} + +//Function Number: 300 +remove_spawn_function(param_00) +{ + var_01 = []; + foreach(var_03 in self.spawn_functions) + { + if(var_03["function"] == param_00) + { + continue; + } + + var_01[var_01.size] = var_03; + } + + self.spawn_functions = var_01; +} + +//Function Number: 301 +add_spawn_function(param_00,param_01,param_02,param_03,param_04,param_05) +{ + foreach(var_07 in self.spawn_functions) + { + if(var_07["function"] == param_00) + { + return; + } + } + + var_09 = []; + self.spawn_functions[self.spawn_functions.size] = var_7B; +} + +//Function Number: 302 +array_delete(param_00) +{ + for(var_01 = 0;var_01 < param_00.size;var_01++) + { + param_00[var_01] delete(); + } +} + +//Function Number: 303 +array_kill(param_00) +{ + for(var_01 = 0;var_01 < param_00.size;var_01++) + { + param_00[var_01] kill(); + } +} + +//Function Number: 304 +ignore_triggers(param_00) +{ + self endon("death"); + self.ignoretriggers = 1; + if(isdefined(param_00)) + { + wait param_00; + } + else + { + wait 0.5; + } + + self.ignoretriggers = 0; +} + +//Function Number: 305 +activate_trigger_with_targetname(param_00) +{ + var_01 = getent(param_00,"targetname"); + var_01 activate_trigger(); +} + +//Function Number: 306 +activate_trigger_with_noteworthy(param_00) +{ + var_01 = getent(param_00,"script_noteworthy"); + var_01 activate_trigger(); +} + +//Function Number: 307 +disable_trigger_with_targetname(param_00) +{ + var_01 = getent(param_00,"targetname"); + var_01 common_scripts\utility::trigger_off(); +} + +//Function Number: 308 +disable_trigger_with_noteworthy(param_00) +{ + var_01 = getent(param_00,"script_noteworthy"); + var_01 common_scripts\utility::trigger_off(); +} + +//Function Number: 309 +enable_trigger_with_targetname(param_00) +{ + var_01 = getent(param_00,"targetname"); + var_01 common_scripts\utility::trigger_on(); +} + +//Function Number: 310 +enable_trigger_with_noteworthy(param_00) +{ + var_01 = getent(param_00,"script_noteworthy"); + var_01 common_scripts\utility::trigger_on(); +} + +//Function Number: 311 +is_hero() +{ + return isdefined(level.hero_list[get_ai_number()]); +} + +//Function Number: 312 +get_ai_number() +{ + if(!isdefined(self.unique_id)) + { + set_ai_number(); + } + + return self.unique_id; +} + +//Function Number: 313 +set_ai_number() +{ + self.unique_id = "ai" + level.ai_number; + level.ai_number++; +} + +//Function Number: 314 +make_hero() +{ + level.hero_list[self.unique_id] = 1; +} + +//Function Number: 315 +unmake_hero() +{ + level.hero_list[self.unique_id] = undefined; +} + +//Function Number: 316 +get_heroes() +{ + var_00 = []; + var_01 = getaiarray("allies"); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + if(var_01[var_02] is_hero()) + { + var_00[var_00.size] = var_01[var_02]; + } + } + + return var_00; +} + +//Function Number: 317 +set_team_pacifist(param_00,param_01) +{ + var_02 = getaiarray(param_00); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + var_02[var_03].pacifist = param_01; + } +} + +//Function Number: 318 +replace_on_death() +{ + maps\_colors::colornode_replace_on_death(); +} + +//Function Number: 319 +spawn_reinforcement(param_00,param_01) +{ + maps\_colors::colornode_spawn_reinforcement(param_00,param_01); +} + +//Function Number: 320 +clear_promotion_order() +{ + level.current_color_order = []; +} + +//Function Number: 321 +set_promotion_order(param_00,param_01) +{ + if(!isdefined(level.current_color_order)) + { + level.current_color_order = []; + } + + param_00 = shortencolor(param_00); + param_01 = shortencolor(param_01); + level.current_color_order[param_00] = param_01; + if(!isdefined(level.current_color_order[param_01])) + { + set_empty_promotion_order(param_01); + } +} + +//Function Number: 322 +set_empty_promotion_order(param_00) +{ + if(!isdefined(level.current_color_order)) + { + level.current_color_order = []; + } + + level.current_color_order[param_00] = "none"; +} + +//Function Number: 323 +remove_dead_from_array(param_00) +{ + var_01 = []; + foreach(var_03 in param_00) + { + if(!isalive(var_03)) + { + continue; + } + + var_01[var_01.size] = var_03; + } + + return var_01; +} + +//Function Number: 324 +remove_heroes_from_array(param_00) +{ + var_01 = []; + for(var_02 = 0;var_02 < param_00.size;var_02++) + { + if(param_00[var_02] is_hero()) + { + continue; + } + + var_01[var_01.size] = param_00[var_02]; + } + + return var_01; +} + +//Function Number: 325 +remove_all_animnamed_guys_from_array(param_00) +{ + var_01 = []; + for(var_02 = 0;var_02 < param_00.size;var_02++) + { + if(isdefined(param_00[var_02].animname)) + { + continue; + } + + var_01[var_01.size] = param_00[var_02]; + } + + return var_01; +} + +//Function Number: 326 +remove_color_from_array(param_00,param_01) +{ + var_02 = []; + for(var_03 = 0;var_03 < param_00.size;var_03++) + { + var_04 = param_00[var_03]; + if(!isdefined(var_04.script_forcecolor)) + { + continue; + } + + if(var_04.script_forcecolor == param_01) + { + continue; + } + + var_02[var_02.size] = var_04; + } + + return var_02; +} + +//Function Number: 327 +remove_noteworthy_from_array(param_00,param_01) +{ + var_02 = []; + for(var_03 = 0;var_03 < param_00.size;var_03++) + { + var_04 = param_00[var_03]; + if(!isdefined(var_04.script_noteworthy)) + { + continue; + } + + if(var_04.script_noteworthy == param_01) + { + continue; + } + + var_02[var_02.size] = var_04; + } + + return var_02; +} + +//Function Number: 328 +get_closest_colored_friendly(param_00,param_01) +{ + var_02 = get_force_color_guys("allies",param_00); + var_02 = remove_heroes_from_array(var_02); + if(!isdefined(param_01)) + { + var_03 = level.player.origin; + } + else + { + var_03 = var_02; + } + + return getclosest(var_03,var_02); +} + +//Function Number: 329 +remove_without_classname(param_00,param_01) +{ + var_02 = []; + for(var_03 = 0;var_03 < param_00.size;var_03++) + { + if(!issubstr(param_00[var_03].classname,param_01)) + { + continue; + } + + var_02[var_02.size] = param_00[var_03]; + } + + return var_02; +} + +//Function Number: 330 +remove_without_model(param_00,param_01) +{ + var_02 = []; + for(var_03 = 0;var_03 < param_00.size;var_03++) + { + if(!issubstr(param_00[var_03].model,param_01)) + { + continue; + } + + var_02[var_02.size] = param_00[var_03]; + } + + return var_02; +} + +//Function Number: 331 +get_closest_colored_friendly_with_classname(param_00,param_01,param_02) +{ + var_03 = get_force_color_guys("allies",param_00); + var_03 = remove_heroes_from_array(var_03); + if(!isdefined(param_02)) + { + var_04 = level.player.origin; + } + else + { + var_04 = var_03; + } + + var_03 = remove_without_classname(var_03,param_01); + return getclosest(var_04,var_03); +} + +//Function Number: 332 +promote_nearest_friendly(param_00,param_01) +{ + for(;;) + { + var_02 = get_closest_colored_friendly(param_00); + if(!isalive(var_02)) + { + wait 1; + continue; + } + + var_02 set_force_color(param_01); + } +} + +//Function Number: 333 +instantly_promote_nearest_friendly(param_00,param_01) +{ + for(;;) + { + var_02 = get_closest_colored_friendly(param_00); + if(!isalive(var_02)) + { + return; + } + + var_02 set_force_color(param_01); + } +} + +//Function Number: 334 +instantly_promote_nearest_friendly_with_classname(param_00,param_01,param_02) +{ + for(;;) + { + var_03 = get_closest_colored_friendly_with_classname(param_00,param_02); + if(!isalive(var_03)) + { + return; + } + + var_03 set_force_color(param_01); + } +} + +//Function Number: 335 +promote_nearest_friendly_with_classname(param_00,param_01,param_02) +{ + for(;;) + { + var_03 = get_closest_colored_friendly_with_classname(param_00,param_02); + if(!isalive(var_03)) + { + wait 1; + continue; + } + + var_03 set_force_color(param_01); + } +} + +//Function Number: 336 +riotshield_lock_orientation(param_00) +{ + self orientmode("face angle",param_00); + self.lockorientation = 1; +} + +//Function Number: 337 +riotshield_unlock_orientation() +{ + self.lockorientation = 0; +} + +//Function Number: 338 +instantly_set_color_from_array_with_classname(param_00,param_01,param_02) +{ + var_03 = 0; + var_04 = []; + for(var_05 = 0;var_05 < param_00.size;var_05++) + { + var_06 = param_00[var_05]; + if(var_03 || !issubstr(var_06.classname,param_02)) + { + var_04[var_04.size] = var_06; + continue; + } + + var_03 = 1; + var_06 set_force_color(param_01); + } + + return var_04; +} + +//Function Number: 339 +instantly_set_color_from_array(param_00,param_01) +{ + var_02 = 0; + var_03 = []; + for(var_04 = 0;var_04 < param_00.size;var_04++) + { + var_05 = param_00[var_04]; + if(var_02) + { + var_03[var_03.size] = var_05; + continue; + } + + var_02 = 1; + var_05 set_force_color(param_01); + } + + return var_03; +} + +//Function Number: 340 +wait_for_script_noteworthy_trigger(param_00) +{ + maps\_utility_code::wait_for_trigger(param_00,"script_noteworthy"); +} + +//Function Number: 341 +wait_for_targetname_trigger(param_00) +{ + maps\_utility_code::wait_for_trigger(param_00,"targetname"); +} + +//Function Number: 342 +wait_for_flag_or_timeout(param_00,param_01) +{ + if(common_scripts\utility::flag(param_00)) + { + return; + } + + var_02 = spawnstruct(); + var_02 thread maps\_utility_code::ent_waits_for_level_notify(param_00); + var_02 thread maps\_utility_code::ent_times_out(param_01); + var_02 waittill("done"); +} + +//Function Number: 343 +wait_for_notify_or_timeout(param_00,param_01) +{ + var_02 = spawnstruct(); + var_02 thread maps\_utility_code::ent_waits_for_notify(self,param_00); + var_02 thread maps\_utility_code::ent_times_out(param_01); + var_02 waittill("done"); +} + +//Function Number: 344 +wait_for_trigger_or_timeout(param_00) +{ + var_01 = spawnstruct(); + var_01 thread maps\_utility_code::ent_waits_for_trigger(self); + var_01 thread maps\_utility_code::ent_times_out(param_00); + var_01 waittill("done"); +} + +//Function Number: 345 +wait_for_either_trigger(param_00,param_01) +{ + var_02 = spawnstruct(); + var_03 = []; + var_03 = common_scripts\utility::array_combine(var_03,getentarray(param_00,"targetname")); + var_03 = common_scripts\utility::array_combine(var_03,getentarray(param_01,"targetname")); + for(var_04 = 0;var_04 < var_03.size;var_04++) + { + var_02 thread maps\_utility_code::ent_waits_for_trigger(var_03[var_04]); + } + + var_02 waittill("done"); +} + +//Function Number: 346 +dronespawn_bodyonly(param_00) +{ + var_01 = maps\_spawner::spawner_dronespawn(param_00); + return var_01; +} + +//Function Number: 347 +dronespawn(param_00) +{ + if(!isdefined(param_00)) + { + param_00 = self; + } + + var_01 = maps\_spawner::spawner_dronespawn(param_00); + var_01 [[ level.drone_spawn_func ]](); + var_01.spawn_funcs = param_00.spawn_functions; + var_01 thread maps\_spawner::run_spawn_functions(); + return var_01; +} + +//Function Number: 348 +makerealai(param_00) +{ + return maps\_spawner::spawner_makerealai(param_00); +} + +//Function Number: 349 +get_trigger_flag() +{ + if(isdefined(self.script_flag)) + { + return self.script_flag; + } + + if(isdefined(self.script_noteworthy)) + { + return self.script_noteworthy; + } +} + +//Function Number: 350 +set_default_pathenemy_settings() +{ + self.pathenemylookahead = 192; + self.pathenemyfightdist = 192; +} + +//Function Number: 351 +cqb_walk(param_00) +{ + if(param_00 == "on") + { + enable_cqbwalk(); + return; + } + + disable_cqbwalk(); +} + +//Function Number: 352 +enable_cqbwalk(param_00) +{ + if(!isdefined(param_00)) + { + self.cqbenabled = 1; + } + + self.cqbwalking = 1; + self.turnrate = 0.2; + level thread animscripts/cqb::func_107C(); +} + +//Function Number: 353 +disable_cqbwalk() +{ + self.cqbwalking = undefined; + self.cqbenabled = undefined; + self.turnrate = 0.3; + self.cqb_point_of_interest = undefined; +} + +//Function Number: 354 +enable_readystand() +{ + self.busereadyidle = 1; +} + +//Function Number: 355 +disable_readystand() +{ + self.busereadyidle = undefined; +} + +//Function Number: 356 +cqb_aim(param_00) +{ + if(!isdefined(param_00)) + { + self.cqb_target = undefined; + return; + } + + self.cqb_target = param_00; + if(!isdefined(param_00.origin)) + { + } +} + +//Function Number: 357 +set_force_cover(param_00) +{ + if(isdefined(param_00) && param_00) + { + self.forcesuppression = 1; + return; + } + + self.forcesuppression = undefined; +} + +//Function Number: 358 +do_in_order(param_00,param_01,param_02,param_03) +{ + if(isdefined(param_01)) + { + [[ param_00 ]](param_01); + } + else + { + [[ param_00 ]](); + } + + if(isdefined(param_03)) + { + [[ param_02 ]](param_03); + return; + } + + [[ param_02 ]](); +} + +//Function Number: 359 +scrub() +{ + maps\_spawner::scrub_guy(); +} + +//Function Number: 360 +send_notify(param_00,param_01) +{ + if(isdefined(param_01)) + { + self notify(param_00,param_01); + return; + } + + self notify(param_00); +} + +//Function Number: 361 +waittill_match_or_timeout(param_00,param_01,param_02) +{ + var_03 = spawnstruct(); + var_03 endon("complete"); + var_03 delaythread(param_02,::send_notify,"complete"); + self waittillmatch(param_01,param_00); +} + +//Function Number: 362 +deleteent(param_00) +{ + param_00 notify("deleted"); + param_00 delete(); +} + +//Function Number: 363 +first_touch(param_00) +{ + if(!isdefined(self.touched)) + { + self.touched = []; + } + + if(isdefined(self.touched[param_00.unique_id])) + { + return 0; + } + + self.touched[param_00.unique_id] = 1; + return 1; +} + +//Function Number: 364 +getanim(param_00) +{ + return level.scr_anim[self.animname][param_00]; +} + +//Function Number: 365 +hasanim(param_00) +{ + return isdefined(level.scr_anim[self.animname][param_00]); +} + +//Function Number: 366 +getanim_from_animname(param_00,param_01) +{ + return level.scr_anim[param_01][param_00]; +} + +//Function Number: 367 +getanim_generic(param_00) +{ + return level.scr_anim["generic"][param_00]; +} + +//Function Number: 368 +add_hint_string(param_00,param_01,param_02) +{ + if(!isdefined(level.trigger_hint_string)) + { + level.trigger_hint_string = []; + level.trigger_hint_func = []; + } + + level.trigger_hint_string[param_00] = param_01; + precachestring(param_01); + if(isdefined(param_02)) + { + level.trigger_hint_func[param_00] = param_02; + } +} + +//Function Number: 369 +show_hint(param_00) +{ + thread maps\_utility_code::showhintprint_struct(param_00); +} + +//Function Number: 370 +hide_hint(param_00) +{ + param_00.timeout = 1; +} + +//Function Number: 371 +fire_radius(param_00,param_01) +{ + var_02 = spawn("trigger_radius",param_00,0,param_01,48); + for(;;) + { + var_02 waittill("trigger",var_03); + level.player dodamage(5,param_00); + } +} + +//Function Number: 372 +clearthreatbias(param_00,param_01) +{ + setthreatbias(param_00,param_01,0); + setthreatbias(param_01,param_00,0); +} + +//Function Number: 373 +scr_println(param_00) +{ +} + +//Function Number: 374 +throwgrenadeatplayerasap() +{ + animscripts/combat_utility::func_238E(); +} + +//Function Number: 375 +array_combine_keys(param_00,param_01) +{ + if(!param_00.size) + { + return param_01; + } + + var_02 = getarraykeys(param_01); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + param_00[var_02[var_03]] = param_01[var_02[var_03]]; + } + + return param_00; +} + +//Function Number: 376 +set_ignoresuppression(param_00) +{ + self.ignoresuppression = param_00; +} + +//Function Number: 377 +set_goalradius(param_00) +{ + self.goalradius = param_00; +} + +//Function Number: 378 +try_forever_spawn() +{ + var_00 = self.export; + for(;;) + { + var_01 = self dospawn(); + if(spawn_failed(var_01)) + { + wait 1; + continue; + } + + return var_01; + } +} + +//Function Number: 379 +set_allowdeath(param_00) +{ + self.allowdeath = param_00; +} + +//Function Number: 380 +set_run_anim(param_00,param_01) +{ + if(isdefined(param_01)) + { + self.alwaysrunforward = param_01; + } + else + { + self.alwaysrunforward = 1; + } + + disable_turnanims(); + self.run_overrideanim = level.scr_anim[self.animname][param_00]; + self.walk_overrideanim = self.run_overrideanim; +} + +//Function Number: 381 +set_dog_walk_anim() +{ + self.a.movement = "walk"; + self.disablearrivals = 1; + self.disableexits = 1; + self.script_nobark = 1; +} + +//Function Number: 382 +set_combat_stand_animset(param_00,param_01,param_02,param_03) +{ + animscripts/animset::func_C83(param_00,param_01,param_02,param_03); +} + +//Function Number: 383 +set_move_animset(param_00,param_01,param_02) +{ + var_03 = level.animsets.move[param_00]; + if(isarray(param_01)) + { + } + else + { + } + + if(isdefined(var_03)) + { + } + + self.custommoveanimset[param_01] = var_7B; +} + +//Function Number: 384 +set_generic_idle_anim(param_00) +{ + var_01 = level.scr_anim["generic"][param_00]; + if(isarray(var_01)) + { + self.specialidleanim = var_01; + return; + } + + self.specialidleanim[0] = var_01; +} + +//Function Number: 385 +set_idle_anim(param_00) +{ + var_01 = level.scr_anim[self.animname][param_00]; + if(isarray(var_01)) + { + self.specialidleanim = var_01; + return; + } + + self.specialidleanim[0] = var_01; +} + +//Function Number: 386 +clear_generic_idle_anim() +{ + self.specialidleanim = undefined; + self notify("stop_specialidle"); +} + +//Function Number: 387 +set_generic_run_anim(param_00,param_01) +{ + set_generic_run_anim_array(param_00,undefined,param_01); +} + +//Function Number: 388 +clear_generic_run_anim() +{ + self notify("movemode"); + enable_turnanims(); + self.run_overrideanim = undefined; + self.walk_overrideanim = undefined; +} + +//Function Number: 389 +set_generic_run_anim_array(param_00,param_01,param_02) +{ + self notify("movemode"); + if(!isdefined(param_02) || param_02) + { + self.alwaysrunforward = 1; + } + else + { + self.alwaysrunforward = undefined; + } + + disable_turnanims(); + self.run_overrideanim = level.scr_anim["generic"][param_00]; + self.walk_overrideanim = self.run_overrideanim; + if(isdefined(param_01)) + { + self.run_override_weights = level.scr_anim["generic"][param_01]; + self.walk_override_weights = self.run_override_weights; + return; + } + + self.run_override_weights = undefined; + self.walk_override_weights = undefined; +} + +//Function Number: 390 +set_run_anim_array(param_00,param_01,param_02) +{ + self notify("movemode"); + if(!isdefined(param_02) || param_02) + { + self.alwaysrunforward = 1; + } + else + { + self.alwaysrunforward = undefined; + } + + disable_turnanims(); + self.run_overrideanim = level.scr_anim[self.animname][param_00]; + self.walk_overrideanim = self.run_overrideanim; + if(isdefined(param_01)) + { + self.run_override_weights = level.scr_anim[self.animname][param_01]; + self.walk_override_weights = self.run_override_weights; + return; + } + + self.run_override_weights = undefined; + self.walk_override_weights = undefined; +} + +//Function Number: 391 +clear_run_anim() +{ + self notify("clear_run_anim"); + self notify("movemode"); + if(self.type == "dog") + { + self.a.movement = "run"; + self.disablearrivals = 0; + self.disableexits = 0; + self.script_nobark = undefined; + return; + } + + if(!isdefined(self.casual_killer)) + { + enable_turnanims(); + } + + self.alwaysrunforward = undefined; + self.run_overrideanim = undefined; + self.walk_overrideanim = undefined; + self.run_override_weights = undefined; + self.walk_override_weights = undefined; +} + +//Function Number: 392 +debugvar(param_00,param_01) +{ + setdvarifuninitialized(param_00,param_01); + return getdvarfloat(param_00); +} + +//Function Number: 393 +physicsjolt_proximity(param_00,param_01,param_02) +{ + self endon("death"); + self endon("stop_physicsjolt"); + if(!isdefined(param_00) || !isdefined(param_01) || !isdefined(param_02)) + { + param_00 = 400; + param_01 = 256; + param_02 = (0,0,0.075); + } + + var_03 = param_00 * param_00; + var_04 = 3; + var_05 = param_02; + for(;;) + { + wait 0.1; + param_02 = var_05; + if(self.code_classname == "script_vehicle") + { + var_06 = self vehicle_getspeed(); + if(var_06 < var_04) + { + var_07 = var_06 / var_04; + param_02 = var_05 * var_07; + } + } + + var_08 = distancesquared(self.origin,level.player.origin); + var_07 = var_03 / var_08; + if(var_07 > 1) + { + var_07 = 1; + } + + param_02 = param_02 * var_07; + var_09 = param_02[0] + param_02[1] + param_02[2]; + if(var_09 > 0.025) + { + physicsjitter(self.origin,param_00,param_01,param_02[2],param_02[2] * 2); + } + } +} + +//Function Number: 394 +set_goal_entity(param_00) +{ + self setgoalentity(param_00); +} + +//Function Number: 395 +activate_trigger(param_00,param_01,param_02) +{ + if(!isdefined(param_00)) + { + activate_trigger_process(param_02); + return; + } + + common_scripts\utility::array_thread(getentarray(param_00,param_01),::activate_trigger_process,param_02); +} + +//Function Number: 396 +activate_trigger_process(param_00) +{ + if(isdefined(self.script_color_allies)) + { + self.activated_color_trigger = 1; + maps\_colors::activate_color_trigger("allies"); + } + + if(isdefined(self.script_color_axis)) + { + self.activated_color_trigger = 1; + maps\_colors::activate_color_trigger("axis"); + } + + self notify("trigger",param_00); +} + +//Function Number: 397 +self_delete() +{ + self delete(); +} + +//Function Number: 398 +remove_nocolor_from_array(param_00) +{ + var_01 = []; + for(var_02 = 0;var_02 < param_00.size;var_02++) + { + var_03 = param_00[var_02]; + if(var_03 has_color()) + { + var_01[var_01.size] = var_03; + } + } + + return var_01; +} + +//Function Number: 399 +has_color() +{ + if(maps\_colors::get_team() == "axis") + { + return isdefined(self.script_color_axis) || isdefined(self.script_forcecolor); + } + + return isdefined(self.script_color_allies) || isdefined(self.script_forcecolor); +} + +//Function Number: 400 +clear_colors() +{ + clear_team_colors("axis"); + clear_team_colors("allies"); +} + +//Function Number: 401 +clear_team_colors(param_00) +{ + level.currentcolorforced[param_00]["r"] = undefined; + level.currentcolorforced[param_00]["b"] = undefined; + level.currentcolorforced[param_00]["c"] = undefined; + level.currentcolorforced[param_00]["y"] = undefined; + level.currentcolorforced[param_00]["p"] = undefined; + level.currentcolorforced[param_00]["o"] = undefined; + level.currentcolorforced[param_00]["g"] = undefined; +} + +//Function Number: 402 +get_script_palette() +{ + var_00 = []; + return var_7B; +} + +//Function Number: 403 +notify_delay(param_00,param_01) +{ + self endon("death"); + if(param_01 > 0) + { + wait param_01; + } + + if(!isdefined(self)) + { + return; + } + + self notify(param_00); +} + +//Function Number: 404 +gun_remove() +{ + if(isai(self)) + { + animscripts/shared::func_C9B(self.weapon,"none"); + return; + } + + self detach(getweaponmodel(self.weapon),"tag_weapon_right"); +} + +//Function Number: 405 +gun_recall() +{ + if(isai(self)) + { + animscripts/shared::func_C9B(self.weapon,"right"); + return; + } + + self attach(getweaponmodel(self.weapon),"tag_weapon_right"); +} + +//Function Number: 406 +place_weapon_on(param_00,param_01) +{ + if(!animscripts/utility::func_24C8(param_00)) + { + animscripts/init::func_2098(param_00); + } + + animscripts/shared::func_C9B(param_00,param_01); +} + +//Function Number: 407 +forceuseweapon(param_00,param_01) +{ + if(!animscripts/init::func_209C(param_00)) + { + animscripts/init::func_2098(param_00); + } + + var_02 = self.weapon != "none"; + var_03 = animscripts/utility::func_C95(); + var_04 = param_01 == "sidearm"; + var_05 = param_01 == "secondary"; + if(var_02 && var_03 != var_04) + { + if(var_03) + { + var_06 = "none"; + } + else if(var_06) + { + var_06 = "back"; + } + else + { + var_06 = "chest"; + } + + animscripts/shared::func_C9B(self.weapon,var_06); + self.lastweapon = self.weapon; + } + else + { + self.lastweapon = param_00; + } + + animscripts/shared::func_C9B(param_00,"right"); + if(var_04) + { + self.sidearm = param_00; + } + else if(var_05) + { + self.secondaryweapon = param_00; + } + else + { + self.primaryweapon = param_00; + } + + self.weapon = param_00; + self.bulletsinclip = weaponclipsize(self.weapon); + self notify("weapon_switch_done"); +} + +//Function Number: 408 +lerp_player_view_to_tag(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07) +{ + maps\_utility_code::lerp_player_view_to_tag_internal(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,0); +} + +//Function Number: 409 +lerp_player_view_to_tag_and_hit_geo(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07) +{ + maps\_utility_code::lerp_player_view_to_tag_internal(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,1); +} + +//Function Number: 410 +lerp_player_view_to_position(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09) +{ + param_09 = get_player_from_self(); + var_0A = spawn("script_origin",(0,0,0)); + var_0A.origin = param_09.origin; + var_0A.angles = param_09 getplayerangles(); + if(isdefined(param_08) && param_08) + { + param_09 playerlinkto(var_0A,"",param_03,param_04,param_05,param_06,param_07,param_08); + } + else if(isdefined(param_04)) + { + param_09 playerlinkto(var_0A,"",param_03,param_04,param_05,param_06,param_07); + } + else if(isdefined(param_03)) + { + param_09 playerlinkto(var_0A,"",param_03); + } + else + { + param_09 playerlinkto(var_0A); + } + + var_0A moveto(param_00,param_02,param_02 * 0.25); + var_0A rotateto(param_01,param_02,param_02 * 0.25); + wait param_02; + var_0A delete(); +} + +//Function Number: 411 +lerp_player_view_to_tag_oldstyle(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07) +{ + maps\_utility_code::lerp_player_view_to_tag_oldstyle_internal(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,0); +} + +//Function Number: 412 +lerp_player_view_to_position_oldstyle(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08) +{ + var_09 = get_player_from_self(); + var_0A = spawn("script_origin",(0,0,0)); + var_0A.origin = var_09 get_player_feet_from_view(); + var_0A.angles = var_09 getplayerangles(); + if(isdefined(param_08)) + { + var_09 playerlinktodelta(var_0A,"",param_03,param_04,param_05,param_06,param_07,param_08); + } + else if(isdefined(param_04)) + { + var_09 playerlinktodelta(var_0A,"",param_03,param_04,param_05,param_06,param_07); + } + else if(isdefined(param_03)) + { + var_09 playerlinktodelta(var_0A,"",param_03); + } + else + { + var_09 playerlinktodelta(var_0A); + } + + var_0A moveto(param_00,param_02,param_02 * 0.25); + var_0A rotateto(param_01,param_02,param_02 * 0.25); + wait param_02; + var_0A delete(); +} + +//Function Number: 413 +player_moves(param_00) +{ + var_01 = level.player.origin; + for(;;) + { + if(distance(var_01,level.player.origin) > param_00) + { + break; + } + + wait 0.05; + } +} + +//Function Number: 414 +waittill_either_function(param_00,param_01,param_02,param_03) +{ + var_04 = spawnstruct(); + thread maps\_utility_code::waittill_either_function_internal(var_04,param_00,param_01); + thread maps\_utility_code::waittill_either_function_internal(var_04,param_02,param_03); + var_04 waittill("done"); +} + +//Function Number: 415 +waittill_msg(param_00) +{ + self waittill(param_00); +} + +//Function Number: 416 +display_hint(param_00,param_01,param_02,param_03) +{ + var_04 = get_player_from_self(); + if(isdefined(level.trigger_hint_func[param_00])) + { + if(var_04 [[ level.trigger_hint_func[param_00] ]]()) + { + return; + } + + var_04 thread maps\_utility_code::hintprint(level.trigger_hint_string[param_00],level.trigger_hint_func[param_00],param_01,param_02,param_03,30); + return; + } + + var_04 thread maps\_utility_code::hintprint(level.trigger_hint_string[param_00],undefined,undefined,undefined,undefined,30); +} + +//Function Number: 417 +display_hint_timeout(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = get_player_from_self(); + if(var_05 [[ level.trigger_hint_func[param_00] ]]()) + { + return; + } + + var_05 thread maps\_utility_code::hintprint(level.trigger_hint_string[param_00],level.trigger_hint_func[param_00],param_02,param_03,param_04,param_01); +} + +//Function Number: 418 +getgenericanim(param_00) +{ + return level.scr_anim["generic"][param_00]; +} + +//Function Number: 419 +enable_careful() +{ + self.script_careful = 1; +} + +//Function Number: 420 +disable_careful() +{ + self.script_careful = 0; + self notify("stop_being_careful"); +} + +//Function Number: 421 +enable_sprint() +{ + self.sprint = 1; +} + +//Function Number: 422 +disable_sprint() +{ + self.sprint = undefined; +} + +//Function Number: 423 +disable_bulletwhizbyreaction() +{ + self.disablebulletwhizbyreaction = 1; +} + +//Function Number: 424 +enable_bulletwhizbyreaction() +{ + self.disablebulletwhizbyreaction = undefined; +} + +//Function Number: 425 +clear_dvar(param_00) +{ + setdvar(param_00,""); +} + +//Function Number: 426 +mission(param_00) +{ + return level.script == param_00; +} + +//Function Number: 427 +set_fixednode_true() +{ + self.fixednode = 1; +} + +//Function Number: 428 +set_fixednode_false() +{ + self.fixednode = 0; +} + +//Function Number: 429 +spawn_ai(param_00,param_01) +{ + if(isdefined(self.script_delay_spawn)) + { + self endon("death"); + wait self.script_delay_spawn; + } + + var_02 = undefined; + var_03 = isdefined(self.script_stealth) && common_scripts\utility::flag("_stealth_enabled") && !common_scripts\utility::flag("_stealth_spotted"); + if(isdefined(self.script_forcespawn) || isdefined(param_00)) + { + if(!isdefined(self.script_drone)) + { + var_02 = self stalingradspawn(var_03); + } + else + { + var_02 = dronespawn(self); + } + } + else if(!isdefined(self.script_drone)) + { + var_02 = self dospawn(var_03); + } + else + { + var_02 = dronespawn(self); + } + + if(isdefined(param_01) && param_01 && isalive(var_02)) + { + var_02 magic_bullet_shield(); + } + + if(!isdefined(self.script_drone)) + { + spawn_failed(var_02); + } + + if(isdefined(self.script_spawn_once)) + { + self delete(); + } + + return var_02; +} + +//Function Number: 430 +function_stack(param_00,param_01,param_02,param_03,param_04,param_05) +{ + var_06 = spawnstruct(); + var_06 thread maps\_utility_code::function_stack_proc(self,param_00,param_01,param_02,param_03,param_04,param_05); + return maps\_utility_code::function_stack_wait_finish(var_06); +} + +//Function Number: 431 +function_stack_timeout(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + var_07 = spawnstruct(); + var_07 thread maps\_utility_code::function_stack_proc(self,param_01,param_02,param_03,param_04,param_05,param_06); + if(isdefined(var_07.function_stack_func_begun) || var_07 common_scripts\utility::waittill_any_timeout(param_00,"function_stack_func_begun") != "timeout") + { + return maps\_utility_code::function_stack_wait_finish(var_07); + } + + var_07 notify("death"); + return 0; +} + +//Function Number: 432 +function_stack_clear() +{ + var_00 = []; + if(isdefined(self.function_stack[0]) && isdefined(self.function_stack[0].function_stack_func_begun)) + { + } + + self.function_stack = undefined; + self notify("clear_function_stack",var_7B[0],self.function_stack[0]); + waittillframeend; + if(!var_7B.size) + { + return; + } + + if(!var_7B[0].function_stack_func_begun) + { + return; + } + + self.function_stack = var_7B; +} + +//Function Number: 433 +geo_off() +{ + if(isdefined(self.geo_off)) + { + return; + } + + self.realorigin = self getorigin(); + self moveto(self.realorigin + (0,0,-10000),0.2); + self.geo_off = 1; +} + +//Function Number: 434 +geo_on() +{ + if(!isdefined(self.geo_off)) + { + return; + } + + self moveto(self.realorigin,0.2); + self waittill("movedone"); + self.geo_off = undefined; +} + +//Function Number: 435 +disable_exits() +{ + self.disableexits = 1; +} + +//Function Number: 436 +enable_exits() +{ + self.disableexits = undefined; +} + +//Function Number: 437 +disable_turnanims() +{ + self.noturnanims = 1; +} + +//Function Number: 438 +enable_turnanims() +{ + self.noturnanims = undefined; +} + +//Function Number: 439 +disable_arrivals() +{ + self.disablearrivals = 1; +} + +//Function Number: 440 +enable_arrivals() +{ + self endon("death"); + waittillframeend; + self.disablearrivals = undefined; +} + +//Function Number: 441 +set_blur(param_00,param_01) +{ + setblur(param_00,param_01); +} + +//Function Number: 442 +set_goal_radius(param_00) +{ + self.goalradius = param_00; +} + +//Function Number: 443 +set_goal_node(param_00) +{ + self.last_set_goalnode = param_00; + self.last_set_goalpos = undefined; + self.last_set_goalent = undefined; + self setgoalnode(param_00); +} + +//Function Number: 444 +set_goal_node_targetname(param_00) +{ + var_01 = getnode(param_00,"targetname"); + set_goal_node(var_01); +} + +//Function Number: 445 +set_goal_pos(param_00) +{ + self.last_set_goalnode = undefined; + self.last_set_goalpos = param_00; + self.last_set_goalent = undefined; + self setgoalpos(param_00); +} + +//Function Number: 446 +set_goal_ent(param_00) +{ + set_goal_pos(param_00.origin); + self.last_set_goalent = param_00; +} + +//Function Number: 447 +objective_complete(param_00) +{ + maps\_utility_code::objective_recon(param_00); + objective_state(param_00,"done"); + level notify("objective_complete" + param_00); +} + +//Function Number: 448 +handsignal(param_00,param_01,param_02,param_03) +{ + var_04 = 1; + if(isdefined(param_01)) + { + var_04 = !param_01; + } + + if(isdefined(param_02)) + { + level endon(param_02); + } + + if(isdefined(param_03)) + { + level waittill(param_03); + } + + var_05 = "signal_" + param_00; + if(self.a.pose == "crouch") + { + var_05 = var_05 + "_crouch"; + } + else if(self.script == "cover_right") + { + var_05 = var_05 + "_coverR"; + } + else if(animscripts/utility::func_C98()) + { + var_05 = var_05 + "_cqb"; + } + + if(var_04) + { + self setanimrestart(getgenericanim(var_05),1,0,1.1); + return; + } + + maps\_anim::anim_generic(self,var_05); +} + +//Function Number: 449 +get_guy_with_script_noteworthy_from_spawner(param_00) +{ + var_01 = getentarray(param_00,"script_noteworthy"); + var_02 = array_spawn(var_01); + return var_02[0]; +} + +//Function Number: 450 +get_guy_with_targetname_from_spawner(param_00) +{ + var_01 = getentarray(param_00,"targetname"); + var_02 = array_spawn(var_01); + return var_02[0]; +} + +//Function Number: 451 +get_guys_with_targetname_from_spawner(param_00) +{ + var_01 = getentarray(param_00,"targetname"); + return array_spawn(var_01); +} + +//Function Number: 452 +array_spawn(param_00,param_01,param_02) +{ + if(!isdefined(param_02)) + { + param_02 = 0; + } + + var_03 = []; + foreach(var_05 in param_00) + { + var_05.count = 1; + if(getsubstr(var_05.classname,7,10) == "veh") + { + var_06 = var_05 spawn_vehicle(); + if(isdefined(var_06.target) && !isdefined(var_06.script_moveoverride)) + { + var_06 thread maps\_vehicle::gopath(); + } + + var_03[var_03.size] = var_06; + continue; + } + + var_06 = var_05 spawn_ai(param_01); + if(!param_02) + { + } + + var_03[var_03.size] = var_06; + } + + if(!param_02) + { + } + + return var_03; +} + +//Function Number: 453 +array_spawn_targetname(param_00,param_01,param_02,param_03) +{ + var_04 = getentarray(param_00,"targetname"); + if(isdefined(level.spawn_pool_enabled)) + { + var_05 = common_scripts\utility::getstructarray(param_00,"targetname"); + if(isdefined(param_03) && param_03) + { + deletestructarray_ref(var_05); + } + + var_06 = maps\_spawner::get_pool_spawners_from_structarray(var_05); + var_04 = common_scripts\utility::array_combine(var_04,var_06); + } + + return array_spawn(var_04,param_01,param_02); +} + +//Function Number: 454 +array_spawn_noteworthy(param_00,param_01,param_02,param_03) +{ + var_04 = getentarray(param_00,"script_noteworthy"); + if(isdefined(level.spawn_pool_enabled)) + { + var_05 = common_scripts\utility::getstructarray(param_00,"script_noteworthy"); + if(isdefined(param_03) && param_03) + { + deletestructarray_ref(var_05); + } + + var_06 = maps\_spawner::get_pool_spawners_from_structarray(var_05); + var_04 = common_scripts\utility::array_combine(var_04,var_06); + } + + return array_spawn(var_04,param_01,param_02); +} + +//Function Number: 455 +spawn_script_noteworthy(param_00,param_01) +{ + var_02 = getent(param_00,"script_noteworthy"); + var_03 = var_02 spawn_ai(param_01); + return var_03; +} + +//Function Number: 456 +spawn_targetname(param_00,param_01) +{ + var_02 = getent(param_00,"targetname"); + var_03 = var_02 spawn_ai(param_01); + return var_03; +} + +//Function Number: 457 +add_dialogue_line(param_00,param_01,param_02) +{ + if(getdvarint("loc_warnings",0)) + { + return; + } + + if(!isdefined(level.dialogue_huds)) + { + level.dialogue_huds = []; + } + + var_03 = 0; + for(;;) + { + if(!isdefined(level.dialogue_huds[var_03])) + { + break; + } + + var_03++; + } + + var_04 = "^3"; + if(isdefined(param_02)) + { + switch(param_02) + { + case "red": + case "r": + var_04 = "^1"; + break; + + case "green": + case "g": + var_04 = "^2"; + break; + + case "yellow": + case "y": + var_04 = "^3"; + break; + + case "blue": + case "b": + var_04 = "^4"; + break; + + case "cyan": + case "c": + var_04 = "^5"; + break; + + case "purple": + case "p": + var_04 = "^6"; + break; + + case "white": + case "w": + var_04 = "^7"; + break; + + case "black": + case "bl": + var_04 = "^8"; + break; + } + } + + level.dialogue_huds[var_03] = 1; + var_05 = maps\_hud_util::createfontstring("default",1.5); + var_05.location = 0; + var_05.alignx = "left"; + var_05.aligny = "top"; + var_05.foreground = 1; + var_05.sort = 20; + var_05.alpha = 0; + var_05 fadeovertime(0.5); + var_05.alpha = 1; + var_05.x = 40; + var_05.y = 260 + var_03 * 18; + var_05.label = " " + var_04 + "< " + param_00 + " > ^7" + param_01; + var_05.color = (1,1,1); + wait 2; + var_06 = 40; + var_05 fadeovertime(6); + var_05.alpha = 0; + for(var_07 = 0;var_07 < var_06;var_07++) + { + var_05.color = (1,1,0 / var_06 - var_07); + wait 0.05; + } + + wait 4; + var_05 destroy(); + level.dialogue_huds[var_03] = undefined; +} + +//Function Number: 458 +destructible_disable_explosion() +{ + common_scripts\_destructible::disable_explosion(); +} + +//Function Number: 459 +destructible_force_explosion() +{ + common_scripts\_destructible::force_explosion(); +} + +//Function Number: 460 +set_grenadeammo(param_00) +{ + self.grenadeammo = param_00; +} + +//Function Number: 461 +get_player_feet_from_view() +{ + var_00 = self.origin; + var_01 = anglestoup(self getplayerangles()); + var_02 = self getplayerviewheight(); + var_03 = var_00 + (0,0,var_02); + var_04 = var_00 + var_01 * var_02; + var_05 = var_03 - var_04; + var_06 = var_00 + var_05; + return var_06; +} + +//Function Number: 462 +set_baseaccuracy(param_00) +{ + self.baseaccuracy = param_00; +} + +//Function Number: 463 +set_console_status() +{ + if(!isdefined(level.console)) + { + level.console = getdvar("consoleGame") == "true"; + } + else + { + } + + if(!isdefined(level.xenon)) + { + level.xenon = getdvar("xenonGame") == "true"; + } + else + { + } + + if(!isdefined(level.ps3)) + { + level.ps3 = getdvar("ps3Game") == "true"; + } +} + +//Function Number: 464 +autosave_now(param_00) +{ + return maps\_autosave::_autosave_game_now(param_00); +} + +//Function Number: 465 +autosave_now_silent() +{ + return maps\_autosave::_autosave_game_now(1); +} + +//Function Number: 466 +set_generic_deathanim(param_00) +{ + self.deathanim = getgenericanim(param_00); +} + +//Function Number: 467 +set_deathanim(param_00) +{ + self.deathanim = getanim(param_00); +} + +//Function Number: 468 +clear_deathanim() +{ + self.deathanim = undefined; +} + +//Function Number: 469 +hunted_style_door_open(param_00) +{ + wait 1.75; + if(isdefined(param_00)) + { + self playsound(param_00); + } + else + { + self playsound("door_wood_slow_open"); + } + + self rotateto(self.angles + (0,70,0),2,0.5,0); + self connectpaths(); + self waittill("rotatedone"); + self rotateto(self.angles + (0,40,0),2,0,2); +} + +//Function Number: 470 +palm_style_door_open(param_00) +{ + wait 1.35; + if(isdefined(param_00)) + { + self playsound(param_00); + } + else + { + self playsound("door_wood_slow_open"); + } + + self rotateto(self.angles + (0,70,0),2,0.5,0); + self connectpaths(); + self waittill("rotatedone"); + self rotateto(self.angles + (0,40,0),2,0,2); +} + +//Function Number: 471 +lerp_fov_overtime(param_00,param_01) +{ + foreach(var_03 in level.players) + { + var_03 lerpfov(param_01,param_00); + } + + wait param_00; +} + +//Function Number: 472 +lerp_fovscale_overtime(param_00,param_01) +{ + var_02 = getdvarfloat("cg_fovscale"); + var_03 = int(param_00 / 0.05); + var_04 = param_01 - var_02 / var_03; + var_05 = var_02; + for(var_06 = 0;var_06 < var_03;var_06++) + { + var_05 = var_05 + var_04; + setsaveddvar("cg_fovscale",var_05); + wait 0.05; + } + + setsaveddvar("cg_fovscale",param_01); +} + +//Function Number: 473 +putgunaway() +{ + animscripts/shared::func_C9B(self.weapon,"none"); + self.weapon = "none"; +} + +//Function Number: 474 +apply_fog() +{ + maps\_load::set_fog_progress(0); +} + +//Function Number: 475 +apply_end_fog() +{ + maps\_load::set_fog_progress(1); +} + +//Function Number: 476 +anim_stopanimscripted() +{ + self stopanimscripted(); + self notify("stop_loop"); + self notify("single anim","end"); + self notify("looping anim","end"); +} + +//Function Number: 477 +disable_pain() +{ + self.a.disablepain = 1; + self.allowpain = 0; +} + +//Function Number: 478 +enable_pain() +{ + self.a.disablepain = 0; + self.allowpain = 1; +} + +//Function Number: 479 +_delete() +{ + self delete(); +} + +//Function Number: 480 +_kill() +{ + self kill(); +} + +//Function Number: 481 +kill_wrapper() +{ + if(isplayer(self)) + { + if(common_scripts\utility::flag_exist("special_op_terminated") && common_scripts\utility::flag("special_op_terminated")) + { + return 0; + } + + if(is_player_down(self)) + { + self disableinvulnerability(); + } + } + + self enabledeathshield(0); + self kill(); + return 1; +} + +//Function Number: 482 +_setentitytarget(param_00) +{ + self setentitytarget(param_00); +} + +//Function Number: 483 +_clearentitytarget() +{ + self clearentitytarget(); +} + +//Function Number: 484 +_unlink() +{ + self unlink(); +} + +//Function Number: 485 +disable_oneshotfx_with_noteworthy(param_00) +{ + var_01 = getarraykeys(level._global_fx_ents[param_00]); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + level._global_fx_ents[param_00][var_01[var_02]].looper delete(); + level._global_fx_ents[param_00][var_01[var_02]] = undefined; + } +} + +//Function Number: 486 +_setlightintensity(param_00) +{ + self setlightintensity(param_00); +} + +//Function Number: 487 +_linkto(param_00,param_01,param_02,param_03) +{ + if(isdefined(param_03)) + { + self linkto(param_00,param_01,param_02,param_03); + return; + } + + if(isdefined(param_02)) + { + self linkto(param_00,param_01,param_02); + return; + } + + if(isdefined(param_01)) + { + self linkto(param_00,param_01); + return; + } + + self linkto(param_00); +} + +//Function Number: 488 +array_wait(param_00,param_01,param_02) +{ + var_03 = getarraykeys(param_00); + var_04 = []; + for(var_05 = 0;var_05 < var_03.size;var_05++) + { + var_06 = var_03[var_05]; + } + + for(var_05 = 0;var_05 < var_03.size;var_05++) + { + var_06 = var_03[var_05]; + var_04[var_06] = spawnstruct(); + var_04[var_06]._array_wait = 1; + var_04[var_06] thread maps\_utility_code::array_waitlogic1(param_00[var_06],param_01,param_02); + } + + for(var_05 = 0;var_05 < var_03.size;var_05++) + { + var_06 = var_03[var_05]; + if(isdefined(param_00[var_06]) && var_04[var_06]._array_wait) + { + var_04[var_06] waittill("_array_wait"); + } + } +} + +//Function Number: 489 +die() +{ + self kill((0,0,0)); +} + +//Function Number: 490 +getmodel(param_00) +{ + return level.scr_model[param_00]; +} + +//Function Number: 491 +isads() +{ + return self playerads() > 0.5; +} + +//Function Number: 492 +enable_auto_adjust_threatbias() +{ + level.auto_adjust_threatbias = 1; + if(level.gameskill >= 2) + { + level.player.threatbias = int(maps\_gameskill::get_locked_difficulty_val_player("threatbias",1)); + return; + } + + level.auto_adjust_difficulty_frac = getdvarint("autodifficulty_frac"); + var_00 = level.auto_adjust_difficulty_frac * 0.01; + level.player.threatbias = int(maps\_gameskill::get_blended_difficulty("threatbias",var_00)); +} + +//Function Number: 493 +disable_auto_adjust_threatbias() +{ + level.auto_adjust_threatbias = 0; +} + +//Function Number: 494 +disable_replace_on_death() +{ + self.replace_on_death = undefined; + self notify("_disable_reinforcement"); +} + +//Function Number: 495 +waittill_player_lookat(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if(!isdefined(param_05)) + { + param_05 = level.player; + } + + var_06 = spawnstruct(); + if(isdefined(param_03)) + { + var_06 thread notify_delay("timeout",param_03); + } + + var_06 endon("timeout"); + if(!isdefined(param_00)) + { + param_00 = 0.92; + } + + if(!isdefined(param_01)) + { + param_01 = 0; + } + + var_07 = int(param_01 * 20); + var_08 = var_07; + self endon("death"); + var_09 = isai(self); + var_0A = undefined; + for(;;) + { + if(var_09) + { + var_0A = self geteye(); + } + else + { + var_0A = self.origin; + } + + if(param_05 player_looking_at(var_0A,param_00,param_02,param_04)) + { + var_08--; + if(var_08 <= 0) + { + return 1; + } + } + else + { + var_08 = var_07; + } + + wait 0.05; + } +} + +//Function Number: 496 +waittill_player_lookat_for_time(param_00,param_01,param_02,param_03) +{ + waittill_player_lookat(param_01,param_00,param_02,undefined,param_03); +} + +//Function Number: 497 +player_looking_at(param_00,param_01,param_02,param_03) +{ + if(!isdefined(param_01)) + { + param_01 = 0.8; + } + + var_04 = 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_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: 498 +players_looking_at(param_00,param_01,param_02,param_03) +{ + for(var_04 = 0;var_04 < level.players.size;var_04++) + { + if(!level.players[var_04] player_looking_at(param_00,param_01,param_02,param_03)) + { + return 0; + } + } + + return 1; +} + +//Function Number: 499 +either_player_looking_at(param_00,param_01,param_02,param_03) +{ + for(var_04 = 0;var_04 < level.players.size;var_04++) + { + if(level.players[var_04] player_looking_at(param_00,param_01,param_02,param_03)) + { + return 1; + } + } + + return 0; +} + +//Function Number: 500 +player_can_see_ai(param_00,param_01) +{ + var_02 = gettime(); + if(!isdefined(param_01)) + { + param_01 = 0; + } + + if(isdefined(param_00.playerseesmetime) && param_00.playerseesmetime + param_01 >= var_02) + { + return param_00.playerseesme; + } + + param_00.playerseesmetime = var_02; + if(!within_fov(level.player.origin,level.player.angles,param_00.origin,0.766)) + { + param_00.playerseesme = 0; + return 0; + } + + var_03 = level.player geteye(); + var_04 = param_00.origin; + if(sighttracepassed(var_03,var_04,1,level.player,param_00)) + { + param_00.playerseesme = 1; + return 1; + } + + var_05 = param_00 geteye(); + if(sighttracepassed(var_03,var_05,1,level.player,param_00)) + { + param_00.playerseesme = 1; + return 1; + } + + var_06 = var_05 + var_04 * 0.5; + if(sighttracepassed(var_03,var_06,1,level.player,param_00)) + { + param_00.playerseesme = 1; + return 1; + } + + param_00.playerseesme = 0; + return 0; +} + +//Function Number: 501 +players_within_distance(param_00,param_01) +{ + var_02 = param_00 * param_00; + for(var_03 = 0;var_03 < level.players.size;var_03++) + { + if(distancesquared(param_01,level.players[var_03].origin) < var_02) + { + return 1; + } + } + + return 0; +} + +//Function Number: 502 +ai_delete_when_out_of_sight(param_00,param_01) +{ + if(!isdefined(param_00)) + { + return; + } + + var_02 = 0.75; + if(issplitscreen()) + { + var_02 = 0.65; + } + + while(param_00.size > 0) + { + wait 1; + for(var_03 = 0;var_03 < param_00.size;var_03++) + { + if(!isdefined(param_00[var_03]) || !isalive(param_00[var_03])) + { + param_00 = common_scripts\utility::array_remove(param_00,param_00[var_03]); + continue; + } + + if(players_within_distance(param_01,param_00[var_03].origin)) + { + continue; + } + + if(either_player_looking_at(param_00[var_03].origin + (0,0,48),var_02,1)) + { + continue; + } + + if(isdefined(param_00[var_03].magic_bullet_shield)) + { + param_00[var_03] stop_magic_bullet_shield(); + } + + param_00[var_03] delete(); + param_00 = common_scripts\utility::array_remove(param_00,param_00[var_03]); + } + } +} + +//Function Number: 503 +add_wait(param_00,param_01,param_02,param_03) +{ + var_04 = spawnstruct(); + var_04.caller = self; + var_04.func = param_00; + var_04.parms = []; + if(isdefined(param_01)) + { + var_04.parms[var_04.parms.size] = param_01; + } + + if(isdefined(param_02)) + { + var_04.parms[var_04.parms.size] = param_02; + } + + if(isdefined(param_03)) + { + var_04.parms[var_04.parms.size] = param_03; + } + + level.wait_any_func_array[level.wait_any_func_array.size] = var_04; +} + +//Function Number: 504 +add_abort(param_00,param_01,param_02,param_03) +{ + var_04 = spawnstruct(); + var_04.caller = self; + var_04.func = param_00; + var_04.parms = []; + if(isdefined(param_01)) + { + var_04.parms[var_04.parms.size] = param_01; + } + + if(isdefined(param_02)) + { + var_04.parms[var_04.parms.size] = param_02; + } + + if(isdefined(param_03)) + { + var_04.parms[var_04.parms.size] = param_03; + } + + level.abort_wait_any_func_array[level.abort_wait_any_func_array.size] = var_04; +} + +//Function Number: 505 +add_func(param_00,param_01,param_02,param_03,param_04,param_05) +{ + var_06 = spawnstruct(); + var_06.caller = self; + var_06.func = param_00; + var_06.parms = []; + if(isdefined(param_01)) + { + var_06.parms[var_06.parms.size] = param_01; + } + + if(isdefined(param_02)) + { + var_06.parms[var_06.parms.size] = param_02; + } + + if(isdefined(param_03)) + { + var_06.parms[var_06.parms.size] = param_03; + } + + if(isdefined(param_04)) + { + var_06.parms[var_06.parms.size] = param_04; + } + + if(isdefined(param_05)) + { + var_06.parms[var_06.parms.size] = param_05; + } + + level.run_func_after_wait_array[level.run_func_after_wait_array.size] = var_06; +} + +//Function Number: 506 +add_call(param_00,param_01,param_02,param_03,param_04,param_05) +{ + var_06 = spawnstruct(); + var_06.caller = self; + var_06.func = param_00; + var_06.parms = []; + if(isdefined(param_01)) + { + var_06.parms[var_06.parms.size] = param_01; + } + + if(isdefined(param_02)) + { + var_06.parms[var_06.parms.size] = param_02; + } + + if(isdefined(param_03)) + { + var_06.parms[var_06.parms.size] = param_03; + } + + if(isdefined(param_04)) + { + var_06.parms[var_06.parms.size] = param_04; + } + + if(isdefined(param_05)) + { + var_06.parms[var_06.parms.size] = param_05; + } + + level.run_call_after_wait_array[level.run_call_after_wait_array.size] = var_06; +} + +//Function Number: 507 +add_noself_call(param_00,param_01,param_02,param_03,param_04,param_05) +{ + var_06 = spawnstruct(); + var_06.func = param_00; + var_06.parms = []; + if(isdefined(param_01)) + { + var_06.parms[var_06.parms.size] = param_01; + } + + if(isdefined(param_02)) + { + var_06.parms[var_06.parms.size] = param_02; + } + + if(isdefined(param_03)) + { + var_06.parms[var_06.parms.size] = param_03; + } + + if(isdefined(param_04)) + { + var_06.parms[var_06.parms.size] = param_04; + } + + if(isdefined(param_05)) + { + var_06.parms[var_06.parms.size] = param_05; + } + + level.run_noself_call_after_wait_array[level.run_noself_call_after_wait_array.size] = var_06; +} + +//Function Number: 508 +add_endon(param_00) +{ + var_01 = spawnstruct(); + var_01.caller = self; + var_01.ender = param_00; + level.do_wait_endons_array[level.do_wait_endons_array.size] = var_01; +} + +//Function Number: 509 +do_wait_any() +{ + do_wait(level.wait_any_func_array.size - 1); +} + +//Function Number: 510 +do_wait(param_00) +{ + if(!isdefined(param_00)) + { + param_00 = 0; + } + + var_01 = spawnstruct(); + var_02 = level.wait_any_func_array; + var_03 = level.do_wait_endons_array; + var_04 = level.run_func_after_wait_array; + var_05 = level.run_call_after_wait_array; + var_06 = level.run_noself_call_after_wait_array; + var_07 = level.abort_wait_any_func_array; + level.wait_any_func_array = []; + level.run_func_after_wait_array = []; + level.do_wait_endons_array = []; + level.abort_wait_any_func_array = []; + level.run_call_after_wait_array = []; + level.run_noself_call_after_wait_array = []; + var_01.count = var_02.size; + var_01 common_scripts\utility::array_levelthread(var_02,::maps\_utility_code::waittill_func_ends,var_03); + var_01 thread maps\_utility_code::do_abort(var_07); + var_01 endon("any_funcs_aborted"); + for(;;) + { + if(var_01.count <= param_00) + { + break; + } + + var_01 waittill("func_ended"); + } + + var_01 notify("all_funcs_ended"); + common_scripts\utility::array_levelthread(var_04,::maps\_utility_code::exec_func,[]); + common_scripts\utility::array_levelthread(var_05,::maps\_utility_code::exec_call); + common_scripts\utility::array_levelthread(var_06,::maps\_utility_code::exec_call_noself); +} + +//Function Number: 511 +do_funcs() +{ + var_00 = spawnstruct(); + var_01 = level.run_func_after_wait_array; + level.run_func_after_wait_array = []; + foreach(var_03 in var_01) + { + level maps\_utility_code::exec_func(var_03,[]); + } + + var_00 notify("all_funcs_ended"); +} + +//Function Number: 512 +is_default_start() +{ + if(isdefined(level.forced_start_catchup) && level.forced_start_catchup == 1) + { + return 0; + } + + if(isdefined(level.default_start_override) && level.default_start_override == level.start_point) + { + return 1; + } + + if(isdefined(level.default_start)) + { + return level.start_point == "default"; + } + + if(level_has_start_points()) + { + return level.start_point == level.start_functions[0]["name"]; + } + + return level.start_point == "default"; +} + +//Function Number: 513 +force_start_catchup() +{ + level.forced_start_catchup = 1; +} + +//Function Number: 514 +is_first_start() +{ + if(!level_has_start_points()) + { + return 1; + } + + return level.start_point == level.start_functions[0]["name"]; +} + +//Function Number: 515 +is_after_start(param_00) +{ + var_01 = 0; + if(level.start_point == param_00) + { + return 0; + } + + for(var_02 = 0;var_02 < level.start_functions.size;var_02++) + { + if(level.start_functions[var_02]["name"] == param_00) + { + var_01 = 1; + continue; + } + + if(level.start_functions[var_02]["name"] == level.start_point) + { + return var_01; + } + } +} + +//Function Number: 516 +_earthquake(param_00,param_01,param_02,param_03) +{ + earthquake(param_00,param_01,param_02,param_03); +} + +//Function Number: 517 +waterfx(param_00,param_01) +{ + self endon("death"); + var_02 = 0; + if(isdefined(param_01)) + { + var_02 = 1; + } + + if(isdefined(param_00)) + { + common_scripts\utility::flag_assert(param_00); + level endon(param_00); + } + + for(;;) + { + wait randomfloatrange(0.15,0.3); + var_03 = self.origin + (0,0,150); + var_04 = self.origin - (0,0,150); + var_05 = bullettrace(var_03,var_04,0,undefined); + if(var_05["surfacetype"] != "water") + { + continue; + } + + var_06 = "water_movement"; + if(isplayer(self)) + { + if(distance(self getvelocity(),(0,0,0)) < 5) + { + var_06 = "water_stop"; + } + } + else if(isdefined(level._effect["water_" + self.a.movement])) + { + var_06 = "water_" + self.a.movement; + } + + var_07 = common_scripts\utility::getfx(var_06); + var_03 = var_05["position"]; + var_08 = (0,self.angles[1],0); + var_09 = anglestoforward(var_08); + var_0A = anglestoup(var_08); + playfx(var_07,var_03,var_0A,var_09); + if(var_06 != "water_stop" && var_02) + { + thread common_scripts\utility::play_sound_in_space(param_01,var_03); + } + } +} + +//Function Number: 518 +playersnowfootsteps(param_00) +{ + if(isdefined(param_00)) + { + common_scripts\utility::flag_assert(param_00); + level endon(param_00); + } + + for(;;) + { + wait randomfloatrange(0.25,0.5); + var_01 = self.origin + (0,0,0); + var_02 = self.origin - (0,0,5); + var_03 = bullettrace(var_01,var_02,0,undefined); + var_04 = anglestoforward(self.angles); + var_05 = distance(self getvelocity(),(0,0,0)); + if(isdefined(self.vehicle)) + { + continue; + } + + if(var_03["surfacetype"] != "snow") + { + continue; + } + + if(var_05 <= 10) + { + continue; + } + + var_06 = "snow_movement"; + if(distance(self getvelocity(),(0,0,0)) <= 154) + { + playfx(common_scripts\utility::getfx("footstep_snow_small"),var_03["position"],var_03["normal"],var_04); + } + + if(distance(self getvelocity(),(0,0,0)) > 154) + { + playfx(common_scripts\utility::getfx("footstep_snow"),var_03["position"],var_03["normal"],var_04); + } + } +} + +//Function Number: 519 +mix_up(param_00) +{ + var_01 = 60; + for(var_02 = 0;var_02 < var_01;var_02++) + { + self setsoundblend(param_00,param_00 + "_off",var_01 - var_02 / var_01); + wait 0.05; + } +} + +//Function Number: 520 +mix_down(param_00) +{ + var_01 = 60; + for(var_02 = 0;var_02 < var_01;var_02++) + { + self setsoundblend(param_00,param_00 + "_off",var_02 / var_01); + wait 0.05; + } +} + +//Function Number: 521 +manual_linkto(param_00,param_01) +{ + param_00 endon("death"); + self endon("death"); + if(!isdefined(param_01)) + { + param_01 = (0,0,0); + } + + for(;;) + { + self.origin = param_00.origin + param_01; + self.angles = param_00.angles; + wait 0.05; + } +} + +//Function Number: 522 +nextmission() +{ + maps\_utility_code::mission_recon(); + maps\_endmission::_nextmission(); +} + +//Function Number: 523 +make_array(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = []; + if(isdefined(param_02)) + { + } + + if(isdefined(param_03)) + { + } + + if(isdefined(param_04)) + { + } + + if(isdefined(var_05)) + { + } + + return var_7B; +} + +//Function Number: 524 +fail_on_friendly_fire() +{ + level.failonfriendlyfire = 1; +} + +//Function Number: 525 +normal_friendly_fire_penalty() +{ + level.failonfriendlyfire = 0; +} + +//Function Number: 526 +getplayerclaymores() +{ + var_00 = self getweaponslistall(); + var_01 = []; + for(var_02 = 0;var_02 < var_00.size;var_02++) + { + var_03 = var_00[var_02]; + var_01[var_03] = self getweaponammoclip(var_03); + } + + var_04 = 0; + if(isdefined(var_01["claymore"]) && var_01["claymore"] > 0) + { + var_04 = var_01["claymore"]; + } + + return var_04; +} + +//Function Number: 527 +getplayerc4() +{ + var_00 = self getweaponslistall(); + var_01 = []; + for(var_02 = 0;var_02 < var_00.size;var_02++) + { + var_03 = var_00[var_02]; + var_01[var_03] = self getweaponammoclip(var_03); + } + + var_04 = 0; + if(isdefined(var_01["c4"]) && var_01["c4"] > 0) + { + var_04 = var_01["c4"]; + } + + return var_04; +} + +//Function Number: 528 +_wait(param_00) +{ + wait param_00; +} + +//Function Number: 529 +_waittillmatch(param_00,param_01) +{ + self waittillmatch(param_01,param_00); +} + +//Function Number: 530 +_setsaveddvar(param_00,param_01) +{ + setsaveddvar(param_00,param_01); +} + +//Function Number: 531 +lerp_saveddvar(param_00,param_01,param_02) +{ + var_03 = getdvarfloat(param_00); + var_04 = param_01 - var_03; + var_05 = 0.05; + var_06 = int(param_02 / var_05); + var_07 = var_04 / var_06; + while(var_06) + { + var_03 = var_03 + var_07; + setsaveddvar(param_00,var_03); + wait var_05; + var_06--; + } + + setsaveddvar(param_00,param_01); +} + +//Function Number: 532 +giveachievement_wrapper(param_00) +{ + if(is_demo()) + { + return; + } + + if(level.script == "ending" && isdefined(level.level_mode) && level.level_mode == "free") + { + return; + } + + foreach(var_02 in level.players) + { + var_02 giveachievement(param_00); + } +} + +//Function Number: 533 +player_giveachievement_wrapper(param_00) +{ + if(is_demo()) + { + return; + } + + if(level.script == "ending" && isdefined(level.level_mode) && level.level_mode == "free") + { + return; + } + + self giveachievement(param_00); +} + +//Function Number: 534 +add_jav_glow(param_00) +{ + var_01 = spawn("script_model",(0,0,0)); + var_01 setcontents(0); + var_01 setmodel("weapon_javelin_obj"); + var_01.origin = self.origin; + var_01.angles = self.angles; + add_wait(::delete_on_not_defined); + if(isdefined(param_00)) + { + common_scripts\utility::flag_assert(param_00); + add_wait(::common_scripts\utility::flag_wait,param_00); + } + + do_wait_any(); + var_01 delete(); +} + +//Function Number: 535 +add_c4_glow(param_00) +{ + var_01 = spawn("script_model",(0,0,0)); + var_01 setcontents(0); + var_01 setmodel("weapon_c4_obj"); + var_01.origin = self.origin; + var_01.angles = self.angles; + add_wait(::delete_on_not_defined); + if(isdefined(param_00)) + { + common_scripts\utility::flag_assert(param_00); + add_wait(::common_scripts\utility::flag_wait,param_00); + } + + do_wait_any(); + var_01 delete(); +} + +//Function Number: 536 +delete_on_not_defined() +{ + for(;;) + { + if(!isdefined(self)) + { + return; + } + + wait 0.05; + } +} + +//Function Number: 537 +slowmo_start() +{ +} + +//Function Number: 538 +slowmo_end() +{ +} + +//Function Number: 539 +slowmo_setspeed_slow(param_00) +{ + level.slowmo.speed_slow = param_00; +} + +//Function Number: 540 +slowmo_setspeed_norm(param_00) +{ + level.slowmo.speed_norm = param_00; +} + +//Function Number: 541 +slowmo_setlerptime_in(param_00) +{ + level.slowmo.lerp_time_in = param_00; +} + +//Function Number: 542 +slowmo_setlerptime_out(param_00) +{ + level.slowmo.lerp_time_out = param_00; +} + +//Function Number: 543 +slowmo_lerp_in() +{ + if(isdefined(level.no_slowmo) && level.no_slowmo) + { + return; + } + + setslowmotion(level.slowmo.speed_norm,level.slowmo.speed_slow,level.slowmo.lerp_time_in); +} + +//Function Number: 544 +slowmo_lerp_out() +{ + if(isdefined(level.no_slowmo) && level.no_slowmo) + { + return; + } + + setslowmotion(level.slowmo.speed_slow,level.slowmo.speed_norm,level.slowmo.lerp_time_out); +} + +//Function Number: 545 +add_earthquake(param_00,param_01,param_02,param_03) +{ + level.earthquake[param_00]["magnitude"] = param_01; + level.earthquake[param_00]["duration"] = param_02; + level.earthquake[param_00]["radius"] = param_03; +} + +//Function Number: 546 +arcademode_kill(param_00,param_01,param_02) +{ + if(getdvar("arcademode") != "1") + { + return; + } + + thread maps\_arcademode::arcademode_add_points(param_00,1,param_01,param_02); +} + +//Function Number: 547 +arcademode_damage(param_00,param_01,param_02) +{ + if(getdvar("arcademode") != "1") + { + return; + } + + thread maps\_arcademode::arcademode_add_points(param_00,0,param_01,param_02); +} + +//Function Number: 548 +arcademode_checkpoint(param_00,param_01) +{ + if(1) + { + return; + } + + if(getdvar("arcademode") != "1") + { + return; + } + + var_02 = maps\_arcademode::arcademode_checkpoint_getid(param_01); + if(!isdefined(var_02)) + { + var_02 = level.arcademode_checkpoint_dvars.size; + level.arcademode_checkpoint_dvars[level.arcademode_checkpoint_dvars.size] = param_01; + } + + if(getdvar("arcademode_checkpoint_" + var_02) == "1") + { + return; + } + + setdvar("arcademode_checkpoint_" + var_02,"1"); + if(getdvar("arcademode_full") == "1") + { + if(level.gameskill == 2) + { + param_00 = param_00 * 2; + } + + if(level.gameskill == 3) + { + param_00 = param_00 * 2.5; + } + } + + var_03 = getdvarint("arcademode_time"); + var_04 = getdvarint("arcademode_stored_time"); + var_04 = var_04 + var_03; + setdvar("arcademode_stored_time",var_04); + setdvar("arcademode_time",param_00 * 60); + var_05 = 800; + var_06 = 0.8; + level.player thread common_scripts\utility::play_sound_in_space("arcademode_checkpoint",level.player geteye()); + thread maps\_arcademode::draw_checkpoint(var_05,var_06,1); + thread maps\_arcademode::draw_checkpoint(var_05,var_06,-1); +} + +//Function Number: 549 +arcademode() +{ + return getdvar("arcademode") == "1"; +} + +//Function Number: 550 +arcademode_stop_timer() +{ + if(!isdefined(level.arcademode_hud_timer)) + { + return; + } + + level notify("arcadeMode_remove_timer"); + level.arcademode_stoptime = gettime(); + level.arcademode_hud_timer destroy(); + level.arcademode_hud_timer = undefined; +} + +//Function Number: 551 +musicplaywrapper(param_00,param_01,param_02) +{ + level.last_song = param_00; + if(!arcademode() || !common_scripts\utility::flag("arcadeMode_multiplier_maxed")) + { + if(!isdefined(param_01)) + { + param_01 = 1; + } + + if(!isdefined(param_02)) + { + param_02 = 0; + } + + musicstop(0); + musicplay(param_00,0,1,1,param_02); + } +} + +//Function Number: 552 +music_loop(param_00,param_01,param_02,param_03,param_04) +{ + thread maps\_utility_code::music_loop_internal(param_00,param_01,param_02,param_03,param_04); +} + +//Function Number: 553 +music_loop_stealth(param_00,param_01,param_02,param_03,param_04) +{ + thread maps\_utility_code::music_loop_internal(param_00,param_01,param_02,param_03,param_04,1); +} + +//Function Number: 554 +music_play(param_00,param_01,param_02,param_03) +{ + if(isdefined(param_01) && param_01 > 0) + { + thread maps\_utility_code::music_play_internal_stop_with_fade_then_call(param_00,param_01,param_02,param_03); + return; + } + + music_stop(); + musicplaywrapper(param_00,param_02,param_03); +} + +//Function Number: 555 +music_stop(param_00) +{ + if(!isdefined(param_00) || param_00 <= 0) + { + musicstop(); + } + else + { + musicstop(param_00); + } + + level notify("stop_music"); +} + +//Function Number: 556 +player_is_near_live_grenade() +{ + var_00 = getentarray("grenade","classname"); + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + var_02 = var_00[var_01]; + if(var_02.model == "weapon_claymore") + { + continue; + } + + for(var_03 = 0;var_03 < level.players.size;var_03++) + { + var_04 = level.players[var_03]; + if(distancesquared(var_02.origin,var_04.origin) < 75625) + { + return 1; + } + } + } + + return 0; +} + +//Function Number: 557 +player_died_recently() +{ + return getdvarint("player_died_recently","0") > 0; +} + +//Function Number: 558 +all_players_istouching(param_00) +{ + foreach(var_02 in level.players) + { + if(!var_02 istouching(param_00)) + { + return 0; + } + } + + return 1; +} + +//Function Number: 559 +any_players_istouching(param_00) +{ + foreach(var_02 in level.players) + { + if(var_02 istouching(param_00)) + { + return 1; + } + } + + return 0; +} + +//Function Number: 560 +get_ent_closest_to_flag_trig(param_00,param_01) +{ + if(param_01.size == 1) + { + return param_01[0]; + } + + var_02 = undefined; + var_03 = undefined; + var_04 = getentarray("trigger_multiple","classname"); + for(var_05 = 0;var_05 < var_04.size;var_05++) + { + if(isdefined(var_04[var_05].script_flag) && var_04[var_05].script_flag == param_00) + { + var_02 = var_04[var_05]; + break; + } + } + + var_03 = getclosest(var_02.origin,param_01); + return var_03; +} + +//Function Number: 561 +getdifficulty() +{ + if(level.gameskill < 1) + { + return "easy"; + } + + if(level.gameskill < 2) + { + return "medium"; + } + + if(level.gameskill < 3) + { + return "hard"; + } + + return "fu"; +} + +//Function Number: 562 +hide_players(param_00) +{ + for(var_01 = 0;var_01 < level.players.size;var_01++) + { + if(param_00 == 1) + { + level.players[var_01] hide(); + continue; + } + + level.players[var_01] show(); + } +} + +//Function Number: 563 +setmodelfunc(param_00,param_01) +{ + if(!isdefined(param_01)) + { + param_01 = 0; + } + + thread maps\_loadout::updatemodel(param_00); +} + +//Function Number: 564 +getaverageplayerorigin() +{ + var_00 = 0; + var_01 = 0; + var_02 = 0; + foreach(var_04 in level.players) + { + var_00 = var_00 + var_04.origin[0]; + var_01 = var_01 + var_04.origin[1]; + var_02 = var_02 + var_04.origin[2]; + } + + var_00 = var_00 / level.players.size; + var_01 = var_01 / level.players.size; + var_02 = var_02 / level.players.size; + return (var_00,var_01,var_02); +} + +//Function Number: 565 +get_average_origin(param_00) +{ + var_01 = (0,0,0); + foreach(var_03 in param_00) + { + var_01 = var_01 + var_03.origin; + } + + return var_01 * 1 / param_00.size; +} + +//Function Number: 566 +generic_damage_think() +{ + self.damage_functions = []; + for(;;) + { + self waittill("damage",var_00,var_01,var_02,var_03,var_04,var_05,var_06); + foreach(var_08 in self.damage_functions) + { + thread [[ var_08 ]](var_00,var_01,var_02,var_03,var_04,var_05,var_06); + } + } +} + +//Function Number: 567 +add_damage_function(param_00) +{ + self.damage_functions[self.damage_functions.size] = param_00; +} + +//Function Number: 568 +remove_damage_function(param_00) +{ + var_01 = []; + foreach(var_03 in self.damage_functions) + { + if(var_03 == param_00) + { + continue; + } + + var_01[var_01.size] = var_03; + } + + self.damage_functions = var_01; +} + +//Function Number: 569 +givexp(param_00,param_01) +{ + maps\_rank::updateplayerscore(param_00,param_01); +} + +//Function Number: 570 +playlocalsoundwrapper(param_00) +{ + self playlocalsound(param_00); +} + +//Function Number: 571 +enableplayerweapons(param_00) +{ + if(level.players.size < 1) + { + return; + } + + foreach(var_02 in level.players) + { + if(param_00 == 1) + { + var_02 enableweapons(); + continue; + } + + var_02 disableweapons(); + } +} + +//Function Number: 572 +teleport_players(param_00) +{ + var_01 = undefined; + var_02 = undefined; + var_03 = undefined; + foreach(var_05 in param_00) + { + if(isdefined(var_05.script_noteworthy) && var_05.script_noteworthy == "player1") + { + var_01 = var_05; + continue; + } + + if(isdefined(var_05.script_noteworthy) && var_05.script_noteworthy == "player2") + { + var_02 = var_05; + continue; + } + + if(!isdefined(var_01)) + { + var_01 = var_05; + } + + if(!isdefined(var_02)) + { + var_02 = var_05; + } + } + + foreach(var_08 in level.players) + { + if(var_08 == level.player) + { + var_03 = var_01; + } + else if(var_08 == level.player2) + { + var_03 = var_02; + } + + var_08 setorigin(var_03.origin); + var_08 setplayerangles(var_03.angles); + } +} + +//Function Number: 573 +teleport_player(param_00) +{ + level.player setorigin(param_00.origin); + if(isdefined(param_00.angles)) + { + level.player setplayerangles(param_00.angles); + } +} + +//Function Number: 574 +hide_player_model() +{ + if(!is_coop()) + { + return; + } + + self.is_hidden = 1; + thread maps\_loadout::updatemodel(undefined); +} + +//Function Number: 575 +show_player_model() +{ + if(!is_coop()) + { + return; + } + + self.is_hidden = 0; + thread maps\_loadout::updatemodel(self.last_modelfunc); +} + +//Function Number: 576 +translate_local() +{ + var_00 = []; + if(isdefined(self.entities)) + { + var_00 = self.entities; + } + + if(isdefined(self.entity)) + { + } + + common_scripts\utility::array_levelthread(var_7B,::maps\_utility_code::translate_local_on_ent); +} + +//Function Number: 577 +open_up_fov(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + level.player endon("stop_opening_fov"); + wait param_00; + level.player playerlinktodelta(param_01,param_02,1,param_03,param_04,param_05,param_06,1); +} + +//Function Number: 578 +get_ai_touching_volume(param_00,param_01,param_02) +{ + if(!isdefined(param_00)) + { + param_00 = "all"; + } + + if(!isdefined(param_01)) + { + param_01 = "all"; + } + + var_03 = getaispeciesarray(param_00,param_01); + var_04 = []; + foreach(var_06 in var_03) + { + if(var_06 istouching(self)) + { + var_04[var_04.size] = var_06; + } + } + + return var_04; +} + +//Function Number: 579 +get_drones_touching_volume(param_00) +{ + if(!isdefined(param_00)) + { + param_00 = "all"; + } + + var_01 = []; + if(param_00 == "all") + { + var_01 = array_merge(level.drones["allies"].array,level.drones["axis"].array); + var_01 = array_merge(var_01,level.drones["neutral"].array); + } + else + { + var_01 = level.drones[param_00].array; + } + + var_02 = []; + foreach(var_04 in var_01) + { + if(!isdefined(var_04)) + { + continue; + } + + if(var_04 istouching(self)) + { + var_02[var_02.size] = var_04; + } + } + + return var_02; +} + +//Function Number: 580 +get_drones_with_targetname(param_00) +{ + var_01 = array_merge(level.drones["allies"].array,level.drones["axis"].array); + var_01 = array_merge(var_01,level.drones["neutral"].array); + var_02 = []; + foreach(var_04 in var_01) + { + if(!isdefined(var_04)) + { + continue; + } + + if(isdefined(var_04.targetname) && var_04.targetname == param_00) + { + var_02[var_02.size] = var_04; + } + } + + return var_02; +} + +//Function Number: 581 +get_other_player(param_00) +{ + foreach(var_02 in level.players) + { + if(param_00 == var_02) + { + continue; + } + + return var_02; + } +} + +//Function Number: 582 +is_other_player_downed(param_00) +{ + var_01 = get_other_player(param_00); + return is_player_down(var_01); +} + +//Function Number: 583 +set_count(param_00) +{ + self.count = param_00; +} + +//Function Number: 584 +follow_path(param_00,param_01,param_02) +{ + self notify("_utility::follow_path"); + self endon("_utility::follow_path"); + self endon("death"); + var_03 = undefined; + if(!isdefined(param_00.classname)) + { + if(!isdefined(param_00.type)) + { + var_03 = "struct"; + } + else + { + var_03 = "node"; + } + } + else + { + var_03 = "entity"; + } + + if(!isdefined(param_01)) + { + param_01 = 300; + } + + var_04 = self.script_forcegoal; + self.script_forcegoal = 1; + maps\_spawner::go_to_node(param_00,var_03,param_02,param_01); + self.script_forcegoal = var_04; +} + +//Function Number: 585 +enable_dynamic_run_speed(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if(!isdefined(param_00)) + { + param_00 = 250; + } + + if(!isdefined(param_01)) + { + param_01 = 100; + } + + if(!isdefined(param_02)) + { + param_02 = param_00 * 2; + } + + if(!isdefined(param_03)) + { + param_03 = param_00 * 1.25; + } + + if(!isdefined(param_05)) + { + param_05 = 0; + } + + self.dontchangemoveplaybackrate = param_05; + thread maps\_utility_code::dynamic_run_speed_proc(param_00,param_01,param_02,param_03,param_04); +} + +//Function Number: 586 +disable_dynamic_run_speed() +{ + self notify("stop_dynamic_run_speed"); +} + +//Function Number: 587 +player_seek_enable() +{ + self endon("death"); + self endon("stop_player_seek"); + var_00 = 1200; + if(has_shotgun()) + { + var_00 = 250; + } + + var_01 = distance(self.origin,level.player.origin); + for(;;) + { + wait 2; + self.goalradius = var_01; + var_02 = get_closest_player(self.origin); + self setgoalentity(var_02); + var_01 = var_01 - 175; + if(var_01 < var_00) + { + var_01 = var_00; + return; + } + } +} + +//Function Number: 588 +player_seek_disable() +{ + self notify("stop_player_seek"); +} + +//Function Number: 589 +waittill_entity_in_range_or_timeout(param_00,param_01,param_02) +{ + self endon("death"); + param_00 endon("death"); + if(!isdefined(param_02)) + { + param_02 = 5; + } + + var_03 = gettime() + param_02 * 1000; + while(isdefined(param_00)) + { + if(distance(param_00.origin,self.origin) <= param_01) + { + break; + } + + if(gettime() > var_03) + { + break; + } + + wait 0.1; + } +} + +//Function Number: 590 +waittill_entity_in_range(param_00,param_01) +{ + self endon("death"); + param_00 endon("death"); + while(isdefined(param_00)) + { + if(distance(param_00.origin,self.origin) <= param_01) + { + break; + } + + wait 0.1; + } +} + +//Function Number: 591 +waittill_entity_out_of_range(param_00,param_01) +{ + self endon("death"); + param_00 endon("death"); + while(isdefined(param_00)) + { + if(distance(param_00.origin,self.origin) > param_01) + { + break; + } + + wait 0.1; + } +} + +//Function Number: 592 +has_shotgun() +{ + self endon("death"); + if(!isdefined(self.weapon)) + { + return 0; + } + + if(self.weapon == "winchester1200" || self.weapon == "m1014" || self.weapon == "striker" || self.weapon == "ranger" || self.weapon == "aa12") + { + return 1; + } + + return 0; +} + +//Function Number: 593 +isprimaryweapon(param_00) +{ + if(param_00 == "none") + { + return 0; + } + + if(weaponinventorytype(param_00) != "primary") + { + return 0; + } + + switch(weaponclass(param_00)) + { + case "rifle": + case "sniper": + case "smg": + case "spread": + case "rocketlauncher": + case "pistol": + case "mg": + return 1; + + default: + return 0; + } +} + +//Function Number: 594 +player_has_thermal() +{ + var_00 = self getweaponslistall(); + if(!isdefined(var_00)) + { + return 0; + } + + foreach(var_02 in var_00) + { + if(issubstr(var_02,"thermal")) + { + return 1; + } + } + + return 0; +} + +//Function Number: 595 +waittill_true_goal(param_00,param_01) +{ + self endon("death"); + if(!isdefined(param_01)) + { + param_01 = self.goalradius; + } + + for(;;) + { + self waittill("goal"); + if(distance(self.origin,param_00) < param_01 + 10) + { + break; + } + } +} + +//Function Number: 596 +player_speed_percent(param_00,param_01) +{ + var_02 = int(getdvar("g_speed")); + if(!isdefined(level.player.g_speed)) + { + level.player.g_speed = var_02; + } + + var_03 = int(level.player.g_speed * param_00 * 0.01); + level.player player_speed_set(var_03,param_01); +} + +//Function Number: 597 +blend_movespeedscale_percent(param_00,param_01) +{ + var_02 = self; + if(!isplayer(var_02)) + { + var_02 = level.player; + } + + if(!isdefined(var_02.movespeedscale)) + { + var_02.movespeedscale = 1; + } + + var_03 = param_00 * 0.01; + var_02 blend_movespeedscale(var_03,param_01); +} + +//Function Number: 598 +player_speed_set(param_00,param_01) +{ + var_02 = int(getdvar("g_speed")); + if(!isdefined(level.player.g_speed)) + { + level.player.g_speed = var_02; + } + + var_03 = ::maps\_utility_code::g_speed_get_func; + var_04 = ::maps\_utility_code::g_speed_set_func; + level.player thread player_speed_proc(param_00,param_01,var_03,var_04,"player_speed_set"); +} + +//Function Number: 599 +blend_movespeedscale(param_00,param_01) +{ + var_02 = self; + if(!isplayer(var_02)) + { + var_02 = level.player; + } + + if(!isdefined(var_02.movespeedscale)) + { + var_02.movespeedscale = 1; + } + + var_03 = ::maps\_utility_code::movespeed_get_func; + var_04 = ::maps\_utility_code::movespeed_set_func; + var_02 thread player_speed_proc(param_00,param_01,var_03,var_04,"blend_movespeedscale"); +} + +//Function Number: 600 +player_speed_proc(param_00,param_01,param_02,param_03,param_04) +{ + self notify(param_04); + self endon(param_04); + var_05 = [[ param_02 ]](); + var_06 = param_00; + if(isdefined(param_01)) + { + var_07 = var_06 - var_05; + var_08 = 0.05; + var_09 = param_01 / var_08; + var_0A = var_07 / var_09; + while(abs(var_06 - var_05) > abs(var_0A * 1.1)) + { + var_05 = var_05 + var_0A; + [[ param_03 ]](var_05); + wait var_08; + } + } + + [[ param_03 ]](var_06); +} + +//Function Number: 601 +player_speed_default(param_00) +{ + if(!isdefined(level.player.g_speed)) + { + return; + } + + level.player player_speed_set(level.player.g_speed,param_00); + waittillframeend; + level.player.g_speed = undefined; +} + +//Function Number: 602 +blend_movespeedscale_default(param_00) +{ + var_01 = self; + if(!isplayer(var_01)) + { + var_01 = level.player; + } + + if(!isdefined(var_01.movespeedscale)) + { + return; + } + + var_01 blend_movespeedscale(1,param_00); + waittillframeend; + var_01.movespeedscale = undefined; +} + +//Function Number: 603 +drop_to_ground(param_00,param_01,param_02) +{ + if(!isdefined(param_01)) + { + param_01 = 1500; + } + + if(!isdefined(param_02)) + { + param_02 = -12000; + } + + return physicstrace(param_00 + (0,0,param_01),param_00 + (0,0,param_02)); +} + +//Function Number: 604 +teleport_ent(param_00) +{ + if(isplayer(self)) + { + self setorigin(param_00.origin); + self setplayerangles(param_00.angles); + return; + } + + self forceteleport(param_00.origin,param_00.angles); +} + +//Function Number: 605 +teleport_to_ent_tag(param_00,param_01) +{ + var_02 = param_00 gettagorigin(param_01); + var_03 = param_00 gettagangles(param_01); + self dontinterpolate(); + if(isplayer(self)) + { + self setorigin(var_02); + self setplayerangles(var_03); + return; + } + + if(isai(self)) + { + self forceteleport(var_02,var_03); + return; + } + + self.origin = var_02; + self.angles = var_03; +} + +//Function Number: 606 +teleport_ai(param_00) +{ + self forceteleport(param_00.origin,param_00.angles); + self setgoalpos(self.origin); + self setgoalnode(param_00); +} + +//Function Number: 607 +move_all_fx(param_00) +{ + foreach(var_02 in level.createfxent) + { + var_02.v["origin"] = var_02.v["origin"] + param_00; + } +} + +//Function Number: 608 +issliding() +{ + return isdefined(self.slidemodel); +} + +//Function Number: 609 +beginsliding(param_00,param_01,param_02) +{ + var_03 = self; + var_03 thread play_sound_on_entity("foot_slide_plr_start"); + var_03 thread play_loop_sound_on_tag("foot_slide_plr_loop"); + var_04 = isdefined(level.custom_linkto_slide); + if(!isdefined(param_00)) + { + param_00 = var_03 getvelocity() + (0,0,-10); + } + + if(!isdefined(param_01)) + { + param_01 = 10; + } + + if(!isdefined(param_02)) + { + param_02 = 0.035; + } + + var_05 = spawn("script_origin",var_03.origin); + var_05.angles = var_03.angles; + var_03.slidemodel = var_05; + var_05 moveslide((0,0,15),15,param_00); + if(var_04) + { + var_03 playerlinktoblend(var_05,undefined,1); + } + else + { + var_03 playerlinkto(var_05); + } + + var_03 disableweapons(); + var_03 allowprone(0); + var_03 allowcrouch(1); + var_03 allowstand(0); + var_03 thread maps\_utility_code::doslide(var_05,param_01,param_02); +} + +//Function Number: 610 +endsliding() +{ + var_00 = self; + var_00 notify("stop soundfoot_slide_plr_loop"); + var_00 thread play_sound_on_entity("foot_slide_plr_end"); + var_00 unlink(); + var_00 setvelocity(var_00.slidemodel.slidevelocity); + var_00.slidemodel delete(); + var_00 enableweapons(); + var_00 allowprone(1); + var_00 allowcrouch(1); + var_00 allowstand(1); + var_00 notify("stop_sliding"); +} + +//Function Number: 611 +spawn_vehicle() +{ + return maps\_vehicle::vehicle_spawn(self); +} + +//Function Number: 612 +getentwithflag(param_00) +{ + var_01 = maps\_load::get_load_trigger_classes(); + var_02 = []; + foreach(var_06, var_04 in var_01) + { + if(!issubstr(var_06,"flag")) + { + continue; + } + + var_05 = getentarray(var_06,"classname"); + var_02 = common_scripts\utility::array_combine(var_02,var_05); + } + + var_07 = maps\_load::get_load_trigger_funcs(); + foreach(var_09, var_04 in var_07) + { + if(!issubstr(var_09,"flag")) + { + continue; + } + + var_05 = getentarray(var_09,"targetname"); + var_02 = common_scripts\utility::array_combine(var_02,var_05); + } + + var_0A = undefined; + foreach(var_0C in var_02) + { + if(var_0C.script_flag == param_00) + { + return var_0C; + } + } +} + +//Function Number: 613 +getentarraywithflag(param_00) +{ + var_01 = maps\_load::get_load_trigger_classes(); + var_02 = []; + foreach(var_06, var_04 in var_01) + { + if(!issubstr(var_06,"flag")) + { + continue; + } + + var_05 = getentarray(var_06,"classname"); + var_02 = common_scripts\utility::array_combine(var_02,var_05); + } + + var_07 = maps\_load::get_load_trigger_funcs(); + foreach(var_09, var_04 in var_07) + { + if(!issubstr(var_09,"flag")) + { + continue; + } + + var_05 = getentarray(var_09,"targetname"); + var_02 = common_scripts\utility::array_combine(var_02,var_05); + } + + var_0A = []; + foreach(var_0C in var_02) + { + if(var_0C.script_flag == param_00) + { + var_0A[var_0A.size] = var_0C; + } + } + + return var_0A; +} + +//Function Number: 614 +set_z(param_00,param_01) +{ + return (param_00[0],param_00[1],param_01); +} + +//Function Number: 615 +set_y(param_00,param_01) +{ + return (param_00[0],param_01,param_00[2]); +} + +//Function Number: 616 +set_x(param_00,param_01) +{ + return (param_01,param_00[1],param_00[2]); +} + +//Function Number: 617 +player_using_missile() +{ + var_00 = self getcurrentweapon(); + if(!isdefined(var_00)) + { + return 0; + } + + if(issubstr(tolower(var_00),"rpg")) + { + return 1; + } + + if(issubstr(tolower(var_00),"stinger")) + { + return 1; + } + + if(issubstr(tolower(var_00),"at4")) + { + return 1; + } + + if(issubstr(tolower(var_00),"javelin")) + { + return 1; + } + + return 0; +} + +//Function Number: 618 +doinglongdeath() +{ + return isdefined(self.a.doinglongdeath); +} + +//Function Number: 619 +get_rumble_ent(param_00) +{ + if(is_coop()) + { + } + + var_01 = get_player_from_self(); + if(!isdefined(param_00)) + { + param_00 = "steady_rumble"; + } + + var_02 = spawn("script_origin",var_01 geteye()); + var_02.intensity = 1; + var_02 thread maps\_utility_code::update_rumble_intensity(var_01,param_00); + return var_02; +} + +//Function Number: 620 +set_rumble_intensity(param_00) +{ + self.intensity = param_00; +} + +//Function Number: 621 +rumble_ramp_on(param_00) +{ + thread rumble_ramp_to(1,param_00); +} + +//Function Number: 622 +rumble_ramp_off(param_00) +{ + thread rumble_ramp_to(0,param_00); +} + +//Function Number: 623 +rumble_ramp_to(param_00,param_01) +{ + self notify("new_ramp"); + self endon("new_ramp"); + self endon("death"); + var_02 = param_01 * 20; + var_03 = param_00 - self.intensity; + var_04 = var_03 / var_02; + for(var_05 = 0;var_05 < var_02;var_05++) + { + self.intensity = self.intensity + var_04; + wait 0.05; + } + + self.intensity = param_00; +} + +//Function Number: 624 +get_player_from_self() +{ + if(isdefined(self)) + { + if(!is_in_array(level.players,self)) + { + return level.player; + } + + return self; + } + + return level.player; +} + +//Function Number: 625 +get_player_gameskill() +{ + return int(self getplayersetting("gameskill")); +} + +//Function Number: 626 +glow(param_00) +{ + if(isdefined(self.non_glow_model)) + { + return; + } + + self.non_glow_model = self.model; + if(!isdefined(param_00)) + { + param_00 = self.model + "_obj"; + } + + self setmodel(param_00); +} + +//Function Number: 627 +stopglow(param_00) +{ + if(!isdefined(self.non_glow_model)) + { + return; + } + + self setmodel(self.non_glow_model); + self.non_glow_model = undefined; +} + +//Function Number: 628 +array_delete_evenly(param_00,param_01,param_02) +{ + var_03 = []; + param_01 = param_02 - param_01; + foreach(var_05 in param_00) + { + var_03[var_03.size] = var_05; + if(var_03.size == param_02) + { + var_03 = array_randomize(var_03); + for(var_06 = param_01;var_06 < var_03.size;var_06++) + { + var_03[var_06] delete(); + } + + var_03 = []; + } + } + + var_08 = []; + foreach(var_05 in param_00) + { + if(!isdefined(var_05)) + { + continue; + } + + var_08[var_08.size] = var_05; + } + + return var_08; +} + +//Function Number: 629 +waittill_in_range(param_00,param_01,param_02) +{ + if(!isdefined(param_02)) + { + param_02 = 0.5; + } + + self endon("death"); + while(isdefined(self)) + { + if(distance(param_00,self.origin) <= param_01) + { + break; + } + + wait param_02; + } +} + +//Function Number: 630 +add_trace_fx(param_00) +{ + var_01 = spawnstruct(); + var_01 thread maps\_utility_code::add_trace_fx_proc(param_00); + return var_01; +} + +//Function Number: 631 +tracefx_on_tag(param_00,param_01,param_02) +{ + var_03 = self gettagorigin(param_01); + var_04 = self gettagangles(param_01); + tracefx(param_00,var_03,var_04,param_02); +} + +//Function Number: 632 +tracefx(param_00,param_01,param_02,param_03) +{ + var_04 = anglestoforward(param_02); + var_05 = bullettrace(param_01,param_01 + var_04 * param_03,0,undefined); + if(var_05["fraction"] >= 1) + { + return; + } + + var_06 = var_05["surfacetype"]; + if(!isdefined(level.trace_fx[param_00][var_06])) + { + var_06 = "default"; + } + + var_07 = level.trace_fx[param_00][var_06]; + if(isdefined(var_07["fx"])) + { + playfx(var_07["fx"],var_05["position"],var_05["normal"]); + } + + if(isdefined(var_07["fx_array"])) + { + foreach(var_09 in var_07["fx_array"]) + { + playfx(var_09,var_05["position"],var_05["normal"]); + } + } + + if(isdefined(var_07["sound"])) + { + level thread common_scripts\utility::play_sound_in_space(var_07["sound"],var_05["position"]); + } + + if(isdefined(var_07["rumble"])) + { + var_0B = get_player_from_self(); + var_0B playrumbleonentity(var_07["rumble"]); + } +} + +//Function Number: 633 +disable_surprise() +{ + self.newenemyreactiondistsq = 0; +} + +//Function Number: 634 +enable_surprise() +{ + self.newenemyreactiondistsq = squared(512); +} + +//Function Number: 635 +enable_heat_behavior(param_00) +{ + self.heat = 1; + self.no_pistol_switch = 1; + self.usecombatscriptatcover = 1; + if(!isdefined(param_00) || !param_00) + { + self.dontshootwhilemoving = 1; + self.maxfaceenemydist = 64; + self.pathenemylookahead = 2048; + disable_surprise(); + } + + self.specialreloadanimfunc = ::animscripts/animset::func_CA7; + self.custommoveanimset["run"] = level.animsets.move["heat_run"]; +} + +//Function Number: 636 +disable_heat_behavior() +{ + self.heat = undefined; + self.no_pistol_switch = undefined; + self.dontshootwhilemoving = undefined; + self.usecombatscriptatcover = 0; + self.maxfaceenemydist = 512; + self.specialreloadanimfunc = undefined; + self.custommoveanimset = undefined; +} + +//Function Number: 637 +getvehiclearray() +{ + return vehicle_getarray(); +} + +//Function Number: 638 +hint(param_00,param_01,param_02) +{ + if(!isdefined(param_02)) + { + param_02 = 0; + } + + var_03 = 0.5; + level endon("clearing_hints"); + if(isdefined(level.hintelement)) + { + level.hintelement maps\_hud_util::destroyelem(); + } + + level.hintelement = maps\_hud_util::createfontstring("default",1.5); + level.hintelement maps\_hud_util::setpoint("MIDDLE",undefined,0,30 + param_02); + level.hintelement.color = (1,1,1); + level.hintelement settext(param_00); + level.hintelement.alpha = 0; + level.hintelement fadeovertime(0.5); + level.hintelement.alpha = 1; + wait 0.5; + level.hintelement endon("death"); + if(isdefined(param_01)) + { + wait param_01; + } + else + { + return; + } + + level.hintelement fadeovertime(var_03); + level.hintelement.alpha = 0; + wait var_03; + level.hintelement maps\_hud_util::destroyelem(); +} + +//Function Number: 639 +hint_fade() +{ + var_00 = 1; + if(isdefined(level.hintelement)) + { + level notify("clearing_hints"); + level.hintelement fadeovertime(var_00); + level.hintelement.alpha = 0; + wait var_00; + } +} + +//Function Number: 640 +kill_deathflag(param_00,param_01) +{ + if(!isdefined(level.flag[param_00])) + { + return; + } + + if(!isdefined(param_01)) + { + param_01 = 0; + } + + foreach(var_03 in level.deathflags[param_00]) + { + foreach(var_05 in var_03) + { + if(isalive(var_05)) + { + var_05 thread maps\_utility_code::kill_deathflag_proc(param_01); + continue; + } + + var_05 delete(); + } + } +} + +//Function Number: 641 +get_player_view_controller(param_00,param_01,param_02,param_03) +{ + if(!isdefined(param_03)) + { + param_03 = "player_view_controller"; + } + + if(!isdefined(param_02)) + { + param_02 = (0,0,0); + } + + var_04 = param_00 gettagorigin(param_01); + var_05 = spawnturret("misc_turret",var_04,param_03); + var_05.angles = param_00 gettagangles(param_01); + var_05 setmodel("tag_turret"); + var_05 linkto(param_00,param_01,param_02,(0,0,0)); + var_05 makeunusable(); + var_05 hide(); + var_05 setmode("manual"); + return var_05; +} + +//Function Number: 642 +blend_dof(param_00,param_01,param_02) +{ + var_03 = level create_blend(::maps\_utility_code::blend_default_dof,param_00,param_01); + var_03.time = param_02; +} + +//Function Number: 643 +create_blend(param_00,param_01,param_02,param_03) +{ + var_04 = spawnstruct(); + var_04 childthread maps\_utility_code::process_blend(param_00,self,param_01,param_02,param_03); + return var_04; +} + +//Function Number: 644 +store_players_weapons(param_00) +{ + if(!isdefined(self.stored_weapons)) + { + self.stored_weapons = []; + } + + var_01 = []; + var_02 = self getweaponslistall(); + foreach(var_04 in var_02) + { + var_01[var_04] = []; + var_01[var_04]["clip_left"] = self getweaponammoclip(var_04,"left"); + var_01[var_04]["clip_right"] = self getweaponammoclip(var_04,"right"); + var_01[var_04]["stock"] = self getweaponammostock(var_04); + } + + if(!isdefined(param_00)) + { + param_00 = "default"; + } + + self.stored_weapons[param_00] = []; + self.stored_weapons[param_00]["current_weapon"] = self getcurrentweapon(); + self.stored_weapons[param_00]["inventory"] = var_01; +} + +//Function Number: 645 +restore_players_weapons(param_00) +{ + if(!isdefined(param_00)) + { + param_00 = "default"; + } + + if(!isdefined(self.stored_weapons) || !isdefined(self.stored_weapons[param_00])) + { + return; + } + + self takeallweapons(); + foreach(var_03, var_02 in self.stored_weapons[param_00]["inventory"]) + { + if(weaponinventorytype(var_03) != "altmode") + { + self giveweapon(var_03); + } + + self setweaponammoclip(var_03,var_02["clip_left"],"left"); + self setweaponammoclip(var_03,var_02["clip_right"],"right"); + self setweaponammostock(var_03,var_02["stock"]); + } + + var_04 = self.stored_weapons[param_00]["current_weapon"]; + if(var_04 != "none") + { + self switchtoweapon(var_04); + } +} + +//Function Number: 646 +hide_entity() +{ + switch(self.code_classname) + { + case "light_spot": + case "script_vehicle": + case "script_model": + self hide(); + break; + + case "script_brushmodel": + self hide(); + self notsolid(); + if(self.spawnflags & 1) + { + self connectpaths(); + } + break; + + case "trigger_multiple_flag_looking": + case "trigger_multiple_flag_lookat": + case "trigger_multiple_breachIcon": + case "trigger_multiple_flag_set": + case "trigger_use_touch": + case "trigger_use": + case "trigger_multiple": + case "trigger_radius": + common_scripts\utility::trigger_off(); + break; + + default: + break; + } +} + +//Function Number: 647 +show_entity() +{ + switch(self.code_classname) + { + case "light_spot": + case "script_vehicle": + case "script_model": + self show(); + break; + + case "script_brushmodel": + self show(); + self solid(); + if(self.spawnflags & 1) + { + self disconnectpaths(); + } + break; + + case "trigger_multiple_flag_looking": + case "trigger_multiple_flag_lookat": + case "trigger_multiple_breachIcon": + case "trigger_multiple_flag_set": + case "trigger_use_touch": + case "trigger_use": + case "trigger_multiple": + case "trigger_radius": + common_scripts\utility::trigger_on(); + break; + + default: + break; + } +} + +//Function Number: 648 +_rotateyaw(param_00,param_01,param_02,param_03) +{ + if(isdefined(param_03)) + { + self rotateyaw(param_00,param_01,param_02,param_03); + return; + } + + if(isdefined(param_02)) + { + self rotateyaw(param_00,param_01,param_02); + return; + } + + self rotateyaw(param_00,param_01); +} + +//Function Number: 649 +set_moveplaybackrate(param_00,param_01) +{ + self notify("set_moveplaybackrate"); + self endon("set_moveplaybackrate"); + if(isdefined(param_01)) + { + var_02 = param_00 - self.moveplaybackrate; + var_03 = 0.05; + var_04 = param_01 / var_03; + var_05 = var_02 / var_04; + while(abs(param_00 - self.moveplaybackrate) > abs(var_05 * 1.1)) + { + self.moveplaybackrate = self.moveplaybackrate + var_05; + wait var_03; + } + } + + self.moveplaybackrate = param_00; +} + +//Function Number: 650 +array_spawn_function(param_00,param_01,param_02,param_03,param_04,param_05) +{ + foreach(var_07 in param_00) + { + var_07 thread add_spawn_function(param_01,param_02,param_03,param_04,param_05); + } +} + +//Function Number: 651 +array_spawn_function_targetname(param_00,param_01,param_02,param_03,param_04,param_05) +{ + var_06 = getentarray(param_00,"targetname"); + array_spawn_function(var_06,param_01,param_02,param_03,param_04,param_05); +} + +//Function Number: 652 +array_spawn_function_noteworthy(param_00,param_01,param_02,param_03,param_04,param_05) +{ + var_06 = getentarray(param_00,"script_noteworthy"); + array_spawn_function(var_06,param_01,param_02,param_03,param_04,param_05); +} + +//Function Number: 653 +enable_dontevershoot() +{ + self.dontevershoot = 1; +} + +//Function Number: 654 +disable_dontevershoot() +{ + self.dontevershoot = undefined; +} + +//Function Number: 655 +create_vision_set_fog(param_00) +{ + if(!isdefined(level.vision_set_fog)) + { + level.vision_set_fog = []; + } + + var_01 = spawnstruct(); + var_01.name = param_00; + level.vision_set_fog[param_00] = var_01; + return var_01; +} + +//Function Number: 656 +get_vision_set_fog(param_00) +{ + if(!isdefined(level.vision_set_fog)) + { + level.vision_set_fog = []; + } + + var_01 = level.vision_set_fog[param_00]; + return var_01; +} + +//Function Number: 657 +create_fog(param_00) +{ + if(!isdefined(level.fog_set)) + { + level.fog_set = []; + } + + var_01 = spawnstruct(); + var_01.name = param_00; + level.fog_set[param_00] = var_01; + return var_01; +} + +//Function Number: 658 +get_fog(param_00) +{ + if(!isdefined(level.fog_set)) + { + level.fog_set = []; + } + + var_01 = level.fog_set[param_00]; + return var_01; +} + +//Function Number: 659 +init_self_fog_transition() +{ + if(!isdefined(self.fog_transition_ent)) + { + self.fog_transition_ent = spawnstruct(); + self.fog_transition_ent.fogset = ""; + self.fog_transition_ent.time = 0; + } +} + +//Function Number: 660 +fog_set_changes(param_00,param_01) +{ + if(!isplayer(self)) + { + maps\_art::init_fog_transition(); + } + else + { + init_self_fog_transition(); + } + + if(!isdefined(level.fog_set)) + { + level.fog_set = []; + } + + var_02 = level.fog_set[param_00]; + if(!isdefined(var_02)) + { + var_02 = level.vision_set_fog[param_00]; + } + + if(!isdefined(param_01)) + { + param_01 = var_02.sunendfadeangle; + } + + if(getdvarint("scr_art_tweak") != 0) + { + translateenttosliders(var_02); + param_01 = 0; + } + + if(!isplayer(self)) + { + if(level.fog_transition_ent.fogset == param_00 && level.fog_transition_ent.time == param_01) + { + return; + } + + set_fog_to_ent_values(var_02,param_01); + level.fog_transition_ent.fogset = param_00; + level.fog_transition_ent.time = param_01; + return; + } + + if(self.fog_transition_ent.fogset == param_00 && self.fog_transition_ent.time == param_01) + { + return; + } + + set_fog_to_ent_values(var_02,param_01); + self.fog_transition_ent.fogset = param_00; + self.fog_transition_ent.time = param_01; +} + +//Function Number: 661 +translateenttosliders(param_00) +{ +} + +//Function Number: 662 +set_fog_to_ent_values(param_00,param_01) +{ + if(isdefined(param_00.sunfogenabled) && param_00.sunfogenabled) + { + if(!isplayer(self)) + { + setexpfog(param_00.startdist,param_00.halfwaydist,param_00.red,param_00.green,param_00.blue,param_00.maxopacity,param_01,param_00.sunred,param_00.sungreen,param_00.sunblue,param_00.sundir,param_00.sunbeginfadeangle,param_00.var_1AF5,param_00.normalfogscale); + return; + } + + self playersetexpfog(param_00.startdist,param_00.halfwaydist,param_00.red,param_00.green,param_00.blue,param_00.maxopacity,param_01,param_00.sunred,param_00.sungreen,param_00.sunblue,param_00.sundir,param_00.sunbeginfadeangle,param_00.var_1AF5,param_00.normalfogscale); + return; + } + + if(!isplayer(self)) + { + setexpfog(param_00.startdist,param_00.halfwaydist,param_00.red,param_00.green,param_00.blue,param_00.maxopacity,param_01); + return; + } + + self playersetexpfog(param_00.startdist,param_00.halfwaydist,param_00.red,param_00.green,param_00.blue,param_00.maxopacity,param_01); +} + +//Function Number: 663 +vision_set_fog_changes(param_00,param_01) +{ + var_02 = vision_set_changes(param_00,param_01); + if(var_02 && isdefined(get_vision_set_fog(param_00))) + { + fog_set_changes(param_00,param_01); + } +} + +//Function Number: 664 +init_self_visionset() +{ + if(!isdefined(self.vision_set_transition_ent)) + { + self.vision_set_transition_ent = spawnstruct(); + self.vision_set_transition_ent.vision_set = ""; + self.vision_set_transition_ent.time = 0; + } +} + +//Function Number: 665 +vision_set_changes(param_00,param_01) +{ + if(!isplayer(self)) + { + var_02 = 1; + if(!isdefined(level.vision_set_transition_ent)) + { + level.vision_set_transition_ent = spawnstruct(); + level.vision_set_transition_ent.vision_set = ""; + level.vision_set_transition_ent.time = 0; + var_02 = 0; + } + + if(level.vision_set_transition_ent.vision_set == param_00 && level.vision_set_transition_ent.time == param_01) + { + return 0; + } + + level.vision_set_transition_ent.vision_set = param_00; + level.vision_set_transition_ent.time = param_01; + if(var_02 && getdvarint("scr_art_tweak") != 0) + { + } + else + { + visionsetnaked(param_00,param_01); + } + + level.var_13EE = param_00; + setdvar("vision_set_current",param_00); + } + else + { + init_self_visionset(); + if(self.vision_set_transition_ent.vision_set == param_00 && self.vision_set_transition_ent.time == param_01) + { + return 0; + } + + self.vision_set_transition_ent.vision_set = param_00; + self.vision_set_transition_ent.time = param_01; + self visionsetnakedforplayer(param_00,param_01); + } + + return 1; +} + +//Function Number: 666 +set_art_tweaked_vision_set() +{ +} + +//Function Number: 667 +enable_teamflashbangimmunity() +{ + thread enable_teamflashbangimmunity_proc(); +} + +//Function Number: 668 +enable_teamflashbangimmunity_proc() +{ + self endon("death"); + for(;;) + { + self.teamflashbangimmunity = 1; + wait 0.05; + } +} + +//Function Number: 669 +disable_teamflashbangimmunity() +{ + self.teamflashbangimmunity = undefined; +} + +//Function Number: 670 +_radiusdamage(param_00,param_01,param_02,param_03,param_04) +{ + if(!isdefined(param_04)) + { + radiusdamage(param_00,param_01,param_02,param_03); + return; + } + + radiusdamage(param_00,param_01,param_02,param_03,param_04); +} + +//Function Number: 671 +mask_interactives_in_volumes(param_00) +{ + var_01 = getentarray("interactive_tv","targetname"); + foreach(var_03 in param_00) + { + var_03.interactives = []; + } + + foreach(var_06 in var_01) + { + foreach(var_03 in param_00) + { + if(!var_03 istouching(var_06)) + { + continue; + } + + var_03 maps\_utility_code::put_interactive_in_volume(var_06); + break; + } + } +} + +//Function Number: 672 +activate_interactives_in_volume() +{ + if(!isdefined(self.interactives)) + { + return; + } + + foreach(var_01 in self.interactives) + { + var_02 = spawn("script_model",(0,0,0)); + var_02 setmodel(var_01.toy_model); + var_02.origin = var_01.origin; + var_02.angles = var_01.angles; + var_02.script_noteworthy = var_01.script_noteworthy; + var_02.target = var_01.target; + var_02.targetname = var_01.targetname; + var_02 thread maps\_interactive_objects::tv_logic(); + } + + self.interactives = []; +} + +//Function Number: 673 +mask_destructibles_in_volumes(param_00) +{ + var_01 = getentarray("destructible_toy","targetname"); + var_02 = getentarray("destructible_vehicle","targetname"); + var_03 = common_scripts\utility::array_combine(var_01,var_02); + foreach(var_05 in param_00) + { + var_05.destructibles = []; + } + + foreach(var_08 in var_03) + { + foreach(var_05 in param_00) + { + if(!var_05 istouching(var_08)) + { + continue; + } + + var_05 maps\_utility_code::put_toy_in_volume(var_08); + break; + } + } +} + +//Function Number: 674 +mask_exploders_in_volume(param_00) +{ + if(getdvar("createfx") != "") + { + return; + } + + var_01 = getentarray("script_brushmodel","classname"); + var_02 = getentarray("script_model","classname"); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + var_01[var_01.size] = var_02[var_03]; + } + + foreach(var_05 in param_00) + { + foreach(var_07 in var_01) + { + if(isdefined(var_07.script_prefab_exploder)) + { + var_07.script_exploder = var_07.script_prefab_exploder; + } + + if(!isdefined(var_07.script_exploder)) + { + continue; + } + + if(!isdefined(var_07.model)) + { + continue; + } + + if(var_07.code_classname != "script_model") + { + continue; + } + + if(!var_07 istouching(var_05)) + { + continue; + } + + var_07.masked_exploder = 1; + } + } +} + +//Function Number: 675 +activate_exploders_in_volume() +{ + var_00 = spawn("script_origin",(0,0,0)); + foreach(var_02 in level.createfxent) + { + if(!isdefined(var_02.v["masked_exploder"])) + { + continue; + } + + var_00.origin = var_02.v["origin"]; + var_00.angles = var_02.v["angles"]; + if(!var_00 istouching(self)) + { + continue; + } + + var_03 = var_02.v["masked_exploder"]; + var_04 = var_02.v["masked_exploder_spawnflags"]; + var_05 = var_02.v["masked_exploder_script_disconnectpaths"]; + var_06 = spawn("script_model",(0,0,0),var_04); + var_06 setmodel(var_03); + var_06.origin = var_02.v["origin"]; + var_06.angles = var_02.v["angles"]; + var_02.v["masked_exploder"] = undefined; + var_02.v["masked_exploder_spawnflags"] = undefined; + var_02.v["masked_exploder_script_disconnectpaths"] = undefined; + var_06.disconnect_paths = var_05; + var_06.script_exploder = var_02.v["exploder"]; + maps\_load::setup_individual_exploder(var_06); + var_02.model = var_06; + } + + var_00 delete(); +} + +//Function Number: 676 +precache_destructible(param_00) +{ + var_01 = common_scripts\_destructible_types::getinfoindex(param_00); + if(var_01 != -1) + { + return; + } + + var_02 = spawnstruct(); + var_02.destructibleinfo = common_scripts\_destructible_types::maketype(param_00); + var_02 thread common_scripts\_destructible::precache_destructibles(); + var_02 thread common_scripts\_destructible::add_destructible_fx(); +} + +//Function Number: 677 +delete_destructibles_in_volumes(param_00,param_01) +{ + foreach(var_03 in param_00) + { + var_03.destructibles = []; + } + + var_05 = ["destructible_toy","destructible_vehicle"]; + var_06 = 0; + if(!isdefined(param_01)) + { + param_01 = 0; + } + + foreach(var_08 in var_05) + { + var_09 = getentarray(var_08,"targetname"); + foreach(var_0B in var_09) + { + foreach(var_03 in param_00) + { + if(param_01) + { + var_06++; + var_06 = var_06 % 5; + if(var_06 == 1) + { + wait 0.05; + } + } + + if(!var_03 istouching(var_0B)) + { + continue; + } + + var_0B delete(); + break; + } + } + } +} + +//Function Number: 678 +delete_interactives_in_volumes(param_00,param_01) +{ + var_02 = getentarray("interactive_tv","targetname"); + foreach(var_04 in param_00) + { + var_04.interactives = []; + } + + var_06 = 0; + if(!isdefined(param_01)) + { + param_01 = 0; + } + + foreach(var_08 in var_02) + { + foreach(var_04 in param_00) + { + if(param_01) + { + var_06++; + var_06 = var_06 % 5; + if(var_06 == 1) + { + wait 0.05; + } + } + + if(!var_04 istouching(var_08)) + { + continue; + } + + var_08 delete(); + break; + } + } +} + +//Function Number: 679 +delete_exploders_in_volumes(param_00,param_01) +{ + var_02 = getentarray("script_brushmodel","classname"); + var_03 = getentarray("script_model","classname"); + for(var_04 = 0;var_04 < var_03.size;var_04++) + { + var_02[var_02.size] = var_03[var_04]; + } + + var_05 = []; + var_06 = spawn("script_origin",(0,0,0)); + var_07 = 0; + if(!isdefined(param_01)) + { + param_01 = 0; + } + + foreach(var_09 in param_00) + { + foreach(var_0B in var_02) + { + if(!isdefined(var_0B.script_exploder)) + { + continue; + } + + var_06.origin = var_0B getorigin(); + if(!var_09 istouching(var_06)) + { + continue; + } + + var_05[var_05.size] = var_0B; + } + } + + array_delete(var_05); + var_06 delete(); +} + +//Function Number: 680 +activate_destructibles_in_volume() +{ + if(!isdefined(self.destructibles)) + { + return; + } + + foreach(var_01 in self.destructibles) + { + var_02 = spawn("script_model",(0,0,0)); + var_02 setmodel(var_01.toy_model); + var_02.origin = var_01.origin; + var_02.angles = var_01.angles; + var_02.script_noteworthy = var_01.script_noteworthy; + var_02.targetname = var_01.targetname; + var_02.target = var_01.target; + var_02.script_linkto = var_01.script_linkto; + var_02.destructible_type = var_01.destructible_type; + var_02.script_noflip = var_01.script_noflip; + var_02 common_scripts\_destructible::setup_destructibles(1); + } + + self.destructibles = []; +} + +//Function Number: 681 +setflashbangimmunity(param_00) +{ + self.flashbangimmunity = param_00; +} + +//Function Number: 682 +flashbanggettimeleftsec() +{ + var_00 = self.flashendtime - gettime(); + if(var_00 < 0) + { + return 0; + } + + return var_00 * 0.001; +} + +//Function Number: 683 +flashbangisactive() +{ + return flashbanggettimeleftsec() > 0; +} + +//Function Number: 684 +flashbangstart(param_00) +{ + if(isdefined(self.flashbangimmunity) && self.flashbangimmunity) + { + return; + } + + var_01 = gettime() + param_00 * 1000; + if(isdefined(self.flashendtime)) + { + self.flashendtime = max(self.flashendtime,var_01); + } + else + { + self.flashendtime = var_01; + } + + self notify("flashed"); + self setflashbanged(1); +} + +//Function Number: 685 +waittill_volume_dead() +{ + for(;;) + { + var_00 = getaispeciesarray("axis","all"); + var_01 = 0; + foreach(var_03 in var_00) + { + if(!isalive(var_03)) + { + continue; + } + + if(var_03 istouching(self)) + { + var_01 = 1; + break; + } + + wait 0.0125; + } + + if(!var_01) + { + var_05 = get_ai_touching_volume("axis"); + if(!var_05.size) + { + break; + } + } + + wait 0.05; + } +} + +//Function Number: 686 +waittill_volume_dead_or_dying() +{ + var_00 = 0; + for(;;) + { + var_01 = getaispeciesarray("axis","all"); + var_02 = 0; + foreach(var_04 in var_01) + { + if(!isalive(var_04)) + { + continue; + } + + if(var_04 istouching(self)) + { + if(var_04 doinglongdeath()) + { + continue; + } + + var_02 = 1; + var_00 = 1; + break; + } + + wait 0.0125; + } + + if(!var_02) + { + var_06 = get_ai_touching_volume("axis"); + if(!var_06.size) + { + break; + } + else + { + var_00 = 1; + } + } + + wait 0.05; + } + + return var_00; +} + +//Function Number: 687 +waittill_volume_dead_then_set_flag(param_00) +{ + waittill_volume_dead(); + common_scripts\utility::flag_set(param_00); +} + +//Function Number: 688 +waittill_targetname_volume_dead_then_set_flag(param_00,param_01) +{ + var_02 = getent(param_00,"targetname"); + var_02 waittill_volume_dead_then_set_flag(param_01); +} + +//Function Number: 689 +player_can_be_shot() +{ + level.player ent_flag_clear("player_zero_attacker_accuracy"); + level.player.ignorerandombulletdamage = 0; + level.player maps\_gameskill::update_player_attacker_accuracy(); +} + +//Function Number: 690 +player_cant_be_shot() +{ + level.player ent_flag_set("player_zero_attacker_accuracy"); + level.player.attackeraccuracy = 0; + level.player.ignorerandombulletdamage = 1; +} + +//Function Number: 691 +set_player_attacker_accuracy(param_00) +{ + var_01 = get_player_from_self(); + var_01.gs.player_attacker_accuracy = param_00; + var_01 maps\_gameskill::update_player_attacker_accuracy(); +} + +//Function Number: 692 +array_index_by_parameters(param_00) +{ + var_01 = []; + foreach(var_03 in param_00) + { + var_01[var_03.script_parameters] = var_03; + } + + return var_01; +} + +//Function Number: 693 +array_index_by_classname(param_00) +{ + var_01 = []; + foreach(var_03 in param_00) + { + var_01[var_03.classname] = var_03; + } + + return var_01; +} + +//Function Number: 694 +array_index_by_script_index(param_00) +{ + var_01 = []; + foreach(var_03 in param_00) + { + var_04 = var_03.script_index; + if(isdefined(var_04)) + { + var_01[var_04] = var_03; + } + } + + return var_01; +} + +//Function Number: 695 +add_target_pivot(param_00) +{ + if(isdefined(param_00)) + { + self.pivot = param_00; + } + else + { + self.pivot = getent(self.target,"targetname"); + } + + self linkto(self.pivot); +} + +//Function Number: 696 +get_color_volume_from_trigger() +{ + var_00 = maps\_utility_code::get_color_info_from_trigger(); + var_01 = var_00["team"]; + foreach(var_03 in var_00["codes"]) + { + var_04 = level.arrays_of_colorcoded_volumes[var_01][var_03]; + if(isdefined(var_04)) + { + return var_04; + } + } + + return undefined; +} + +//Function Number: 697 +get_color_nodes_from_trigger() +{ + var_00 = maps\_utility_code::get_color_info_from_trigger(); + var_01 = var_00["team"]; + foreach(var_03 in var_00["codes"]) + { + var_04 = level.arrays_of_colorcoded_nodes[var_01][var_03]; + if(isdefined(var_04)) + { + return var_04; + } + } + + return undefined; +} + +//Function Number: 698 +flashbangstop() +{ + self.flashendtime = undefined; + self setflashbanged(0); +} + +//Function Number: 699 +getent_or_struct(param_00,param_01) +{ + var_02 = getent(param_00,param_01); + if(isdefined(var_02)) + { + return var_02; + } + + return common_scripts\utility::getstruct(param_00,param_01); +} + +//Function Number: 700 +grenade_earthquake() +{ + thread endondeath(); + self endon("end_explode"); + self waittill("explode",var_00); + dirt_on_screen_from_position(var_00); +} + +//Function Number: 701 +endondeath() +{ + self waittill("death"); + waittillframeend; + self notify("end_explode"); +} + +//Function Number: 702 +dirt_on_screen_from_position(param_00) +{ + playrumbleonposition("grenade_rumble",param_00); + earthquake(0.3,0.5,param_00,400); + foreach(var_02 in level.players) + { + if(distance(param_00,var_02.origin) > 600) + { + continue; + } + + if(var_02 damageconetrace(param_00)) + { + var_02 thread dirteffect(param_00); + } + } +} + +//Function Number: 703 +player_rides_shotgun_in_humvee(param_00,param_01,param_02,param_03) +{ + return player_rides_in_humvee("shotgun",level.player,param_00,param_01,param_02,param_03); +} + +//Function Number: 704 +player_rides_in_humvee(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if(!isdefined(param_01)) + { + param_01 = level.player; + } + + param_01 allowcrouch(0); + param_01 allowprone(0); + param_01 disableweapons(); + var_06 = common_scripts\utility::spawn_tag_origin(); + var_06 linkto(self,"tag_passenger",player_rides_in_humvee_offset(param_00),(0,0,0)); + var_06.player_dismount = common_scripts\utility::spawn_tag_origin(); + var_06.player_dismount linkto(self,"tag_body",player_rides_humvee_offset_dismount(param_00),(0,0,0)); + if(!isdefined(param_02)) + { + param_02 = 90; + } + + if(!isdefined(param_03)) + { + param_03 = 90; + } + + if(!isdefined(param_04)) + { + param_04 = 40; + } + + if(!isdefined(param_05)) + { + param_05 = 40; + } + + param_01 disableweapons(); + param_01 playerlinkto(var_06,"tag_origin",0.8,param_02,param_03,param_04,param_05); + param_01.humvee_org = var_06; + return var_06; +} + +//Function Number: 705 +player_rides_in_humvee_offset(param_00) +{ + switch(param_00) + { + case "shotgun": + return (-5,10,-34); + + case "backleft": + return (-45,45,-34); + + case "backright": + return (-45,5,-34); + } +} + +//Function Number: 706 +player_rides_humvee_offset_dismount(param_00) +{ + switch(param_00) + { + case "shotgun": + return (-8,-90,-12.6); + + case "backleft": + return (-58,85,-12.6); + + case "backright": + return (-58,-95,-12.6); + } +} + +//Function Number: 707 +player_leaves_humvee(param_00) +{ + if(!isdefined(param_00)) + { + param_00 = 0; + } + + var_01 = self; + var_02 = level.player; + if(isplayer(self)) + { + var_02 = self; + var_01 = var_02.humvee_org; + } + + var_01 unlink(); + if(!param_00) + { + var_03 = 0.6; + var_01 moveto(var_01.player_dismount.origin,var_03,var_03 * 0.5,var_03 * 0.5); + wait var_03; + } + + var_02 unlink(); + var_02 enableweapons(); + var_02 allowcrouch(1); + var_02 allowprone(1); + var_02.humvee_org = undefined; + var_01.player_dismount delete(); + var_01 delete(); +} + +//Function Number: 708 +dirteffect(param_00,param_01) +{ + var_02 = screen_effect_sides(param_00); + foreach(var_05, var_04 in var_02) + { + thread maps\_gameskill::grenade_dirt_on_screen(var_05); + } +} + +//Function Number: 709 +bloodsplateffect(param_00) +{ + if(!isdefined(self.damageattacker)) + { + return; + } + + var_01 = screen_effect_sides(self.damageattacker.origin); + foreach(var_04, var_03 in var_01) + { + thread maps\_gameskill::blood_splat_on_screen(var_04); + } +} + +//Function Number: 710 +screen_effect_sides(param_00) +{ + var_01 = vectornormalize(anglestoforward(self.angles)); + var_02 = vectornormalize(anglestoright(self.angles)); + var_03 = vectornormalize(param_00 - self.origin); + var_04 = vectordot(var_03,var_01); + var_05 = vectordot(var_03,var_02); + var_06 = []; + var_07 = self getcurrentweapon(); + if(var_04 > 0 && var_04 > 0.5 && weapontype(var_07) != "riotshield") + { + var_06["bottom"] = 1; + } + + if(abs(var_04) < 0.866) + { + if(var_05 > 0) + { + var_06["right"] = 1; + } + else + { + var_06["left"] = 1; + } + } + + return var_06; +} + +//Function Number: 711 +pathrandompercent_set(param_00) +{ + if(!isdefined(self.old_pathrandompercent)) + { + self.old_pathrandompercent = self.pathrandompercent; + } + + self.pathrandompercent = param_00; +} + +//Function Number: 712 +pathrandompercent_zero() +{ + if(isdefined(self.old_pathrandompercent)) + { + return; + } + + self.old_pathrandompercent = self.pathrandompercent; + self.pathrandompercent = 0; +} + +//Function Number: 713 +pathrandompercent_reset() +{ + self.pathrandompercent = self.old_pathrandompercent; + self.old_pathrandompercent = undefined; +} + +//Function Number: 714 +walkdist_zero() +{ + if(isdefined(self.old_walkdistfacingmotion)) + { + return; + } + + self.old_walkdist = self.walkdist; + self.old_walkdistfacingmotion = self.walkdistfacingmotion; + self.walkdist = 0; + self.walkdistfacingmotion = 0; +} + +//Function Number: 715 +walkdist_reset() +{ + self.walkdist = self.old_walkdist; + self.walkdistfacingmotion = self.old_walkdistfacingmotion; + self.old_walkdist = undefined; + self.old_walkdistfacingmotion = undefined; +} + +//Function Number: 716 +enable_ignorerandombulletdamage_drone() +{ + thread ignorerandombulletdamage_drone_proc(); +} + +//Function Number: 717 +ignorerandombulletdamage_drone_proc() +{ + self endon("disable_ignorerandombulletdamage_drone"); + self endon("death"); + self.ignorerandombulletdamage = 1; + self.fakehealth = self.health; + self.health = 1000000; + for(;;) + { + self waittill("damage",var_00,var_01); + if(!isplayer(var_01) && issentient(var_01)) + { + if(isdefined(var_01.enemy) && var_01.enemy != self) + { + continue; + } + } + + self.fakehealth = self.fakehealth - var_00; + if(self.fakehealth <= 0) + { + break; + } + } + + self kill(); +} + +//Function Number: 718 +hide_notsolid() +{ + if(!isdefined(self.oldcontents)) + { + self.oldcontents = self setcontents(0); + } + + self hide(); +} + +//Function Number: 719 +show_solid() +{ + if(!isai(self)) + { + self solid(); + } + + if(isdefined(self.oldcontents)) + { + self setcontents(self.oldcontents); + } + + self show(); +} + +//Function Number: 720 +set_brakes(param_00) +{ + self.veh_brake = param_00; +} + +//Function Number: 721 +disable_ignorerandombulletdamage_drone() +{ + if(!isalive(self)) + { + return; + } + + if(!isdefined(self.ignorerandombulletdamage)) + { + return; + } + + self notify("disable_ignorerandombulletdamage_drone"); + self.ignorerandombulletdamage = undefined; + self.health = self.fakehealth; +} + +//Function Number: 722 +timeoutent(param_00) +{ + var_01 = spawnstruct(); + var_01 delaythread(param_00,::send_notify,"timeout"); + return var_01; +} + +//Function Number: 723 +delaythread(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07) +{ + thread maps\_utility_code::delaythread_proc(param_01,param_00,param_02,param_03,param_04,param_05,param_06,param_07); +} + +//Function Number: 724 +enable_danger_react(param_00) +{ + param_00 = param_00 * 1000; + self.dodangerreact = 1; + self.dangerreactduration = param_00; + self.neversprintforvariation = undefined; +} + +//Function Number: 725 +disable_danger_react() +{ + self.dodangerreact = 0; + self.neversprintforvariation = 1; +} + +//Function Number: 726 +set_group_advance_to_enemy_parameters(param_00,param_01) +{ + level.advancetoenemyinterval = param_00; + level.advancetoenemygroupmax = param_01; +} + +//Function Number: 727 +reset_group_advance_to_enemy_timer(param_00) +{ + level.lastadvancetoenemytime[param_00] = gettime(); +} + +//Function Number: 728 +set_custom_gameskill_func(param_00) +{ + level.custom_gameskill_func = param_00; + thread maps\_gameskill::resetskill(); +} + +//Function Number: 729 +clear_custom_gameskill_func() +{ + level.custom_gameskill_func = undefined; + thread maps\_gameskill::resetskill(); +} + +//Function Number: 730 +set_wind(param_00,param_01,param_02) +{ + maps\_animatedmodels::init_wind_if_uninitialized(); + if(isdefined(param_02)) + { + level.wind.variance = param_02; + } + + level.wind.rate = param_01; + level.wind.weight = param_00; + level notify("windchange","strong"); +} + +//Function Number: 731 +string_is_single_digit_integer(param_00) +{ + if(param_00.size > 1) + { + return 0; + } + + var_01 = []; + if(isdefined(var_7B[var_01])) + { + return 1; + } + + return 0; +} + +//Function Number: 732 +set_battlechatter_variable(param_00,param_01) +{ + level.battlechatter[param_00] = param_01; + maps\_utility_code::update_battlechatter_hud(); +} + +//Function Number: 733 +objective_clearadditionalpositions(param_00) +{ + for(var_01 = 0;var_01 < 8;var_01++) + { + objective_additionalposition(param_00,var_01,(0,0,0)); + } +} + +//Function Number: 734 +get_minutes_and_seconds(param_00) +{ + var_01 = []; + while(var_7B["seconds"] >= 60) + { + var_42["minutes"] = var_7B["seconds"]; + } + + if(var_42["seconds"] < 10) + { + } + + return var_42; +} + +//Function Number: 735 +player_has_weapon(param_00) +{ + var_01 = level.player getweaponslistprimaries(); + foreach(var_03 in var_01) + { + if(var_03 == param_00) + { + return 1; + } + } + + return 0; +} + +//Function Number: 736 +obj(param_00) +{ + if(!isdefined(level.obj_array)) + { + level.obj_array = []; + } + + if(!isdefined(level.obj_array[param_00])) + { + level.obj_array[param_00] = level.obj_array.size + 1; + } + + return level.obj_array[param_00]; +} + +//Function Number: 737 +musicloop(param_00,param_01) +{ + if(!isdefined(param_01)) + { + param_01 = 0; + } + + var_02 = musiclength(param_00); + level notify("stop_music"); + level endon("stop_music"); + for(;;) + { + musicplaywrapper(param_00); + wait var_02; + wait param_01; + } +} + +//Function Number: 738 +player_mount_vehicle(param_00) +{ + self mountvehicle(param_00); + self.drivingvehicle = param_00; +} + +//Function Number: 739 +player_dismount_vehicle() +{ + self dismountvehicle(); + self.drivingvehicle = undefined; +} + +//Function Number: 740 +graph_position(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = param_04 - param_02; + var_06 = param_03 - param_01; + var_07 = var_05 / var_06; + param_00 = param_00 - param_03; + param_00 = var_07 * param_00; + param_00 = param_00 + param_04; + return param_00; +} + +//Function Number: 741 +enable_achievement_harder_they_fall() +{ + self.rappeller = 1; +} + +//Function Number: 742 +disable_achievement_harder_they_fall() +{ + self.rappeller = undefined; +} + +//Function Number: 743 +enable_achievement_harder_they_fall_guy(param_00) +{ + param_00 enable_achievement_harder_they_fall(); +} + +//Function Number: 744 +disable_achievement_harder_they_fall_guy(param_00) +{ + param_00 disable_achievement_harder_they_fall(); +} + +//Function Number: 745 +musiclength(param_00) +{ + var_01 = tablelookup("sound/soundlength.csv",0,param_00,1); + if(!isdefined(var_01) || var_01 == "") + { + return -1; + } + + var_01 = int(var_01); + var_01 = var_01 * 0.001; + return var_01; +} + +//Function Number: 746 +is_command_bound(param_00) +{ + var_01 = getkeybinding(param_00); + return var_01["count"]; +} + +//Function Number: 747 +linear_interpolate(param_00,param_01,param_02) +{ + var_03 = param_02 - param_01; + var_04 = param_00 * var_03; + var_05 = param_01 + var_04; + return var_05; +} + +//Function Number: 748 +is_iw4_map_sp() +{ + switch(level.script) + { + case "bog_b": + case "invasion": + case "contingency": + case "so_civilrescue": + case "so_killspree_trainer": + case "so_takeover_oilrig": + case "so_assault_oilrig": + case "so_defense_invasion": + case "so_killspree_invasion": + case "so_chopper_invasion": + case "so_ac130_co_hunted": + case "co_hunted": + case "so_showers_gulag": + case "so_hidden_so_ghillies": + case "so_ghillies": + case "so_killspree_favela": + case "so_juggernauts_favela": + case "so_takeover_estate": + case "so_defuse_favela_escape": + case "so_forest_contingency": + case "so_rooftop_contingency": + case "so_snowrace2_cliffhanger": + case "so_snowrace1_cliffhanger": + case "so_sabotage_cliffhanger": + case "so_demo_so_bridge": + case "so_crossing_so_bridge": + case "so_bridge": + case "so_intel_boneyard": + case "so_download_arcadia": + case "so_escape_airport": + case "iw4_credits": + case "dc_whitehouse": + case "dcemp": + case "af_caves": + case "arcadia": + case "roadkill": + case "af_chase": + case "favela_escape": + case "trainer": + case "gulag": + case "favela": + case "airport": + case "estate": + case "dcburning": + case "cliffhanger": + case "boneyard": + case "oilrig": + case "ending": + return 1; + + default: + return 0; + } +} + +//Function Number: 749 +define_loadout(param_00) +{ + level.loadout = param_00; +} + +//Function Number: 750 +template_level(param_00) +{ + define_loadout(param_00); + define_introscreen(param_00); + level.template_script = param_00; +} + +//Function Number: 751 +template_so_level(param_00) +{ + level.audio_stringtable_mapname = param_00; +} + +//Function Number: 752 +define_introscreen(param_00) +{ + level.introscreen_levelname = param_00; +} + +//Function Number: 753 +fx_volume_pause_noteworthy(param_00,param_01) +{ + thread fx_volume_pause_noteworthy_thread(param_00,param_01); +} + +//Function Number: 754 +fx_volume_pause_noteworthy_thread(param_00,param_01) +{ + var_02 = getent(param_00,"script_noteworthy"); + var_02 notify("new_volume_command"); + var_02 endon("new_volume_command"); + wait 0.05; + fx_volume_pause(var_02,param_01); +} + +//Function Number: 755 +fx_volume_pause(param_00,param_01) +{ + param_00.fx_paused = 1; + if(!isdefined(param_01)) + { + param_01 = 0; + } + + if(param_01) + { + array_thread_mod_delayed(param_00.fx,::common_scripts\utility::pauseeffect); + return; + } + + common_scripts\utility::array_thread(param_00.fx,::common_scripts\utility::pauseeffect); +} + +//Function Number: 756 +array_thread_mod_delayed(param_00,param_01,param_02) +{ + var_03 = 0; + if(!isdefined(param_02)) + { + param_02 = 5; + } + + var_04 = []; + foreach(var_06 in param_00) + { + var_04[var_04.size] = var_06; + var_03++; + var_03 = var_03 % param_02; + if(param_02 == 0) + { + common_scripts\utility::array_thread(var_04,param_01); + wait 0.05; + var_04 = []; + } + } +} + +//Function Number: 757 +fx_volume_restart_noteworthy(param_00) +{ + thread fx_volume_restart_noteworthy_thread(param_00); +} + +//Function Number: 758 +fx_volume_restart_noteworthy_thread(param_00) +{ + var_01 = getent(param_00,"script_noteworthy"); + var_01 notify("new_volume_command"); + var_01 endon("new_volume_command"); + wait 0.05; + if(!isdefined(var_01.fx_paused)) + { + return; + } + + var_01.fx_paused = undefined; + fx_volume_restart(var_01); +} + +//Function Number: 759 +fx_volume_restart(param_00) +{ + common_scripts\utility::array_thread(param_00.fx,::restarteffect); +} + +//Function Number: 760 +flag_count_increment(param_00) +{ + if(!isdefined(level.flag_count)) + { + level.flag_count = []; + } + + if(!isdefined(level.flag_count[param_00])) + { + level.flag_count[param_00] = 1; + return; + } + + level.flag_count[param_00]++; +} + +//Function Number: 761 +flag_count_decrement(param_00) +{ + level.flag_count[param_00]--; + level.flag_count[param_00] = int(max(0,level.flag_count[param_00])); + if(level.flag_count[param_00]) + { + return; + } + + common_scripts\utility::flag_set(param_00); +} + +//Function Number: 762 +flag_count_set(param_00,param_01) +{ + level.flag_count[param_00] = param_01; +} + +//Function Number: 763 +add_cleanup_ent(param_00,param_01) +{ + if(!isdefined(level.cleanup_ents)) + { + level.cleanup_ents = []; + } + + if(!isdefined(level.cleanup_ents[param_01])) + { + level.cleanup_ents[param_01] = []; + } + + level.cleanup_ents[param_01][level.cleanup_ents[param_01].size] = param_00; +} + +//Function Number: 764 +cleanup_ents(param_00) +{ + var_01 = level.cleanup_ents[param_00]; + var_01 = common_scripts\utility::array_removeundefined(var_01); + array_delete(var_01); + level.cleanup_ents[param_00] = undefined; +} + +//Function Number: 765 +cleanup_ents_removing_bullet_shield(param_00) +{ + if(!isdefined(level.cleanup_ents)) + { + return; + } + + if(!isdefined(level.cleanup_ents[param_00])) + { + return; + } + + var_01 = level.cleanup_ents[param_00]; + var_01 = common_scripts\utility::array_removeundefined(var_01); + foreach(var_03 in var_01) + { + if(!isai(var_03)) + { + continue; + } + + if(!isalive(var_03)) + { + continue; + } + + if(!isdefined(var_03.magic_bullet_shield)) + { + continue; + } + + if(!var_03.magic_bullet_shield) + { + continue; + } + + var_03 stop_magic_bullet_shield(); + } + + array_delete(var_01); + level.cleanup_ents[param_00] = undefined; +} + +//Function Number: 766 +add_trigger_function(param_00) +{ + if(!isdefined(self.trigger_functions)) + { + thread maps\_utility_code::add_trigger_func_thread(); + } + + self.trigger_functions[self.trigger_functions.size] = param_00; +} + +//Function Number: 767 +getallweapons() +{ + var_00 = []; + var_01 = getentarray(); + foreach(var_03 in var_01) + { + if(!isdefined(var_03.classname)) + { + continue; + } + + if(issubstr(var_03.classname,"weapon_")) + { + var_00[var_00.size] = var_03; + } + } + + return var_00; +} + +//Function Number: 768 +radio_add(param_00) +{ + level.scr_radio[param_00] = param_00; +} + +//Function Number: 769 +move_with_rate(param_00,param_01,param_02) +{ + self notify("newmove"); + self endon("newmove"); + if(!isdefined(param_02)) + { + param_02 = 200; + } + + var_03 = distance(self.origin,param_00); + var_04 = var_03 / param_02; + var_05 = vectornormalize(param_00 - self.origin); + self moveto(param_00,var_04,0,0); + self rotateto(param_01,var_04,0,0); + wait var_04; + if(!isdefined(self)) + { + return; + } + + self.velocity = var_05 * var_03 / var_04; +} + +//Function Number: 770 +flag_on_death(param_00) +{ + level endon(param_00); + self waittill("death"); + common_scripts\utility::flag_set(param_00); +} + +//Function Number: 771 +enable_damagefeedback() +{ + level.damagefeedback = 1; +} + +//Function Number: 772 +disable_damagefeedback() +{ + level.damagefeedback = 0; +} + +//Function Number: 773 +is_damagefeedback_enabled() +{ + return isdefined(level.damagefeedback) && level.damagefeedback; +} + +//Function Number: 774 +add_damagefeedback() +{ + maps\_damagefeedback::monitordamage(); +} + +//Function Number: 775 +remove_damagefeedback() +{ + maps\_damagefeedback::stopmonitordamage(); +} + +//Function Number: 776 +is_demo() +{ + if(getdvar("e3demo") == "1") + { + return 1; + } + + return 0; +} + +//Function Number: 777 +deletestructarray(param_00,param_01,param_02) +{ + var_03 = common_scripts\utility::getstructarray(param_00,param_01); + deletestructarray_ref(var_03,param_02); +} + +//Function Number: 778 +deletestruct_ref(param_00) +{ + if(!isdefined(param_00)) + { + return; + } + + var_01 = param_00.script_linkname; + if(isdefined(var_01) && isdefined(level.struct_class_names["script_linkname"]) && isdefined(level.struct_class_names["script_linkname"][var_01])) + { + foreach(var_04, var_03 in level.struct_class_names["script_linkname"][var_01]) + { + if(isdefined(var_03) && param_00 == var_03) + { + level.struct_class_names["script_linkname"][var_01][var_04] = undefined; + } + } + + if(level.struct_class_names["script_linkname"][var_01].size == 0) + { + level.struct_class_names["script_linkname"][var_01] = undefined; + } + } + + var_01 = param_00.script_noteworthy; + if(isdefined(var_01) && isdefined(level.struct_class_names["script_noteworthy"]) && isdefined(level.struct_class_names["script_noteworthy"][var_01])) + { + foreach(var_04, var_03 in level.struct_class_names["script_noteworthy"][var_01]) + { + if(isdefined(var_03) && param_00 == var_03) + { + level.struct_class_names["script_noteworthy"][var_01][var_04] = undefined; + } + } + + if(level.struct_class_names["script_noteworthy"][var_01].size == 0) + { + level.struct_class_names["script_noteworthy"][var_01] = undefined; + } + } + + var_01 = param_00.target; + if(isdefined(var_01) && isdefined(level.struct_class_names["target"]) && isdefined(level.struct_class_names["target"][var_01])) + { + foreach(var_04, var_03 in level.struct_class_names["target"][var_01]) + { + if(isdefined(var_03) && param_00 == var_03) + { + level.struct_class_names["target"][var_01][var_04] = undefined; + } + } + + if(level.struct_class_names["target"][var_01].size == 0) + { + level.struct_class_names["target"][var_01] = undefined; + } + } + + var_01 = param_00.targetname; + if(isdefined(var_01) && isdefined(level.struct_class_names["targetname"]) && isdefined(level.struct_class_names["targetname"][var_01])) + { + foreach(var_04, var_03 in level.struct_class_names["targetname"][var_01]) + { + if(isdefined(var_03) && param_00 == var_03) + { + level.struct_class_names["targetname"][var_01][var_04] = undefined; + } + } + + if(level.struct_class_names["targetname"][var_01].size == 0) + { + level.struct_class_names["targetname"][var_01] = undefined; + } + } + + if(isdefined(level.struct)) + { + foreach(var_04, var_03 in level.struct) + { + if(param_00 == var_03) + { + level.struct[var_04] = undefined; + } + } + } +} + +//Function Number: 779 +deletestructarray_ref(param_00,param_01) +{ + if(!isdefined(param_00) || !isarray(param_00) || param_00.size == 0) + { + return; + } + + param_01 = common_scripts\utility::ter_op(isdefined(param_01),param_01,0); + param_01 = common_scripts\utility::ter_op(param_01 > 0,param_01,0); + if(param_01 > 0) + { + foreach(var_03 in param_00) + { + deletestruct_ref(var_03); + wait param_01; + } + + return; + } + + foreach(var_03 in param_01) + { + deletestruct_ref(var_03); + } +} + +//Function Number: 780 +getstruct_delete(param_00,param_01) +{ + var_02 = common_scripts\utility::getstruct(param_00,param_01); + deletestruct_ref(var_02); + return var_02; +} + +//Function Number: 781 +getstructarray_delete(param_00,param_01,param_02) +{ + var_03 = common_scripts\utility::getstructarray(param_00,param_01); + deletestructarray_ref(var_03,param_02); + return var_03; +} + +//Function Number: 782 +getent_or_struct_or_node(param_00,param_01) +{ + var_02 = getent_or_struct(param_00,param_01); + if(!isdefined(var_02)) + { + var_02 = getnode(param_00,param_01); + } + + if(!isdefined(var_02)) + { + var_02 = getvehiclenode(param_00,param_01); + } + + return var_02; +} + +//Function Number: 783 +setentityheadicon(param_00,param_01,param_02,param_03,param_04) +{ + if(isdefined(param_03)) + { + self.entityheadiconoffset = param_03; + } + else + { + self.entityheadiconoffset = (0,0,0); + } + + if(isdefined(param_04)) + { + self.entityheadiconreferencefunc = param_04; + } + + self notify("new_head_icon"); + var_05 = newhudelem(); + var_05.archived = 1; + var_05.alpha = 0.8; + var_05 setshader(param_00,param_01,param_02); + var_05 setwaypoint(0,0,0,1); + self.entityheadicon = var_05; + updateentityheadiconorigin(); + thread updateentityheadicon(); + thread destroyentityheadiconondeath(); +} + +//Function Number: 784 +removeentityheadicon() +{ + if(!isdefined(self.entityheadicon)) + { + return; + } + + self.entityheadicon destroy(); +} + +//Function Number: 785 +updateentityheadicon() +{ + self endon("new_head_icon"); + self endon("death"); + var_00 = self.origin; + for(;;) + { + if(var_00 != self.origin) + { + updateentityheadiconorigin(); + var_00 = self.origin; + } + + wait 0.05; + } +} + +//Function Number: 786 +updateentityheadiconorigin() +{ + if(isdefined(self.entityheadiconreferencefunc)) + { + var_00 = self [[ self.entityheadiconreferencefunc ]](); + if(isdefined(var_00)) + { + self.entityheadicon.x = self.entityheadiconoffset[0] + var_00[0]; + self.entityheadicon.y = self.entityheadiconoffset[1] + var_00[1]; + self.entityheadicon.z = self.entityheadiconoffset[2] + var_00[2]; + return; + } + } + + self.entityheadicon.x = self.origin[0] + self.entityheadiconoffset[0]; + self.entityheadicon.y = self.origin[1] + self.entityheadiconoffset[1]; + self.entityheadicon.z = self.origin[2] + self.entityheadiconoffset[2]; +} + +//Function Number: 787 +destroyentityheadiconondeath() +{ + self endon("new_head_icon"); + self waittill("death"); + if(!isdefined(self.entityheadicon)) + { + return; + } + + self.entityheadicon destroy(); +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_utility_code.gsc b/MW3/PC/SP/maps/_utility_code.gsc new file mode 100644 index 0000000..77a261b --- /dev/null +++ b/MW3/PC/SP/maps/_utility_code.gsc @@ -0,0 +1,1819 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_utility_code.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 80 + * Decompile Time: 1611 ms + * Timestamp: 10/27/2023 2:21:48 AM +*******************************************************************/ + +//Function Number: 1 +linetime_proc(param_00,param_01,param_02,param_03) +{ + for(var_04 = 0;var_04 < param_03 * 20;var_04++) + { + wait 0.05; + } +} + +//Function Number: 2 +structarray_swap(param_00,param_01) +{ + var_02 = param_00.struct_array_index; + var_03 = param_01.struct_array_index; + self.array[var_03] = param_00; + self.array[var_02] = param_01; + self.array[var_02].struct_array_index = var_02; + self.array[var_03].struct_array_index = var_03; +} + +//Function Number: 3 +waitspread_code(param_00,param_01) +{ + waittillframeend; + var_02 = []; + if(level.wait_spreaders == 1) + { + level.wait_spreader_allotment = var_7B; + level.active_wait_spread = undefined; + return; + } + + var_03 = 1; + while(var_03 < level.wait_spreaders - 1) + { + var_7B = waitspread_insert(var_7B); + var_03++ = var_7B[var_7B.size]; + } + + level.wait_spreader_allotment = maps\_utility::array_randomize(var_7B); + level.active_wait_spread = undefined; +} + +//Function Number: 4 +waitspread_insert(param_00) +{ + var_01 = -1; + var_02 = 0; + for(var_03 = 0;var_03 < param_00.size - 1;var_03++) + { + var_04 = param_00[var_03 + 1] - param_00[var_03]; + if(var_04 <= var_02) + { + continue; + } + + var_02 = var_04; + var_01 = var_03; + } + + var_05 = []; + for(var_06 = 0;var_06 < param_00.size;var_06++) + { + if(var_01 == var_06 - 1) + { + var_05[var_05.size] = randomfloatrange(param_00[var_01],param_00[var_01 + 1]); + } + + var_05[var_05.size] = param_00[var_06]; + } + + return var_05; +} + +//Function Number: 5 +waittill_objective_event_proc(param_00) +{ + while(level.deathspawner[self.script_deathchain] > 0) + { + level waittill("spawner_expired" + self.script_deathchain); + } + + if(param_00) + { + self waittill("trigger"); + } + + var_01 = maps\_utility::get_trigger_flag(); + common_scripts\utility::flag_set(var_01); +} + +//Function Number: 6 +wait_until_done_speaking() +{ + self endon("death"); + while(self.isspeaking) + { + wait 0.05; + } +} + +//Function Number: 7 +wait_for_trigger_think(param_00) +{ + self endon("death"); + param_00 endon("trigger"); + self waittill("trigger"); + param_00 notify("trigger"); +} + +//Function Number: 8 +wait_for_trigger(param_00,param_01) +{ + var_02 = getentarray(param_00,param_01); + var_03 = spawnstruct(); + common_scripts\utility::array_thread(var_02,::wait_for_trigger_think,var_03); + var_03 waittill("trigger"); +} + +//Function Number: 9 +ent_waits_for_level_notify(param_00) +{ + level waittill(param_00); + self notify("done"); +} + +//Function Number: 10 +ent_waits_for_notify(param_00,param_01) +{ + param_00 waittill(param_01); + self notify("done"); +} + +//Function Number: 11 +ent_waits_for_trigger(param_00) +{ + param_00 waittill("trigger"); + self notify("done"); +} + +//Function Number: 12 +ent_times_out(param_00) +{ + wait param_00; + self notify("done"); +} + +//Function Number: 13 +update_debug_friendlycolor_on_death() +{ + self notify("debug_color_update"); + self endon("debug_color_update"); + var_00 = self.unique_id; + self waittill("death"); + level.debug_color_friendlies[var_00] = undefined; + level notify("updated_color_friendlies"); +} + +//Function Number: 14 +update_debug_friendlycolor(param_00) +{ + thread update_debug_friendlycolor_on_death(); + if(isdefined(self.script_forcecolor)) + { + level.debug_color_friendlies[param_00] = self.script_forcecolor; + } + else + { + level.debug_color_friendlies[param_00] = undefined; + } + + level notify("updated_color_friendlies"); +} + +//Function Number: 15 +insure_player_does_not_set_forcecolor_twice_in_one_frame() +{ +} + +//Function Number: 16 +new_color_being_set(param_00) +{ + self notify("new_color_being_set"); + self.new_force_color_being_set = 1; + maps\_colors::left_color_node(); + self endon("new_color_being_set"); + self endon("death"); + waittillframeend; + waittillframeend; + if(isdefined(self.script_forcecolor)) + { + self.currentcolorcode = level.currentcolorforced[maps\_colors::get_team()][self.script_forcecolor]; + if(isdefined(self.dontcolormove)) + { + self.dontcolormove = undefined; + } + else + { + thread maps\_colors::goto_current_colorindex(); + } + } + + self.new_force_color_being_set = undefined; + self notify("done_setting_new_color"); +} + +//Function Number: 17 +radio_queue_thread(param_00) +{ + var_01 = gettime(); + for(;;) + { + if(!isdefined(self._radio_queue)) + { + break; + } + + self waittill("finished_radio"); + if(gettime() > var_01 + 7500) + { + return; + } + } + + self._radio_queue = 1; + maps\_utility::wait_for_buffer_time_to_pass(level.last_mission_sound_time,0.5); + level.player maps\_utility::play_sound_on_entity(level.scr_radio[param_00]); + self._radio_queue = undefined; + level.last_mission_sound_time = gettime(); + self notify("finished_radio"); +} + +//Function Number: 18 +ent_wait_for_flag_or_time_elapses(param_00,param_01) +{ + self endon(param_00); + wait param_01; +} + +//Function Number: 19 +waittill_either_function_internal(param_00,param_01,param_02) +{ + param_00 endon("done"); + [[ param_01 ]](param_02); + param_00 notify("done"); +} + +//Function Number: 20 +hintprintwait(param_00,param_01) +{ + if(!isdefined(param_01)) + { + wait param_00; + return; + } + + var_02 = param_00 * 20; + for(var_03 = 0;var_03 < var_02;var_03++) + { + if([[ param_01 ]]()) + { + break; + } + + wait 0.05; + } +} + +//Function Number: 21 +hint_timeout(param_00) +{ + wait param_00; + self.timed_out = 1; +} + +//Function Number: 22 +hintprint(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if(!isalive(self)) + { + return; + } + + var_06 = 1; + var_07 = 0.75; + var_08 = 0.95; + var_09 = 0.4; + var_0A = 2; + if(isdefined(level.hint_fontscale)) + { + var_0A = level.hint_fontscale; + } + + if(isdefined(self.current_global_hint)) + { + if(self.current_global_hint == param_00) + { + return; + } + } + + maps\_utility::ent_flag_waitopen("global_hint_in_use"); + if(isdefined(self.current_global_hint)) + { + if(self.current_global_hint == param_00) + { + return; + } + } + + maps\_utility::ent_flag_set("global_hint_in_use"); + self.current_global_hint = param_00; + var_0B = maps\_hud_util::createclientfontstring("default",var_0A); + level.current_hint = var_0B; + thread destroy_hint_on_friendlyfire(var_0B); + level endon("friendlyfire_mission_fail"); + var_0B.alpha = 0.9; + var_0B.x = 0; + var_0B.y = -68; + var_0B.alignx = "center"; + var_0B.aligny = "middle"; + var_0B.horzalign = "center"; + var_0B.vertalign = "middle"; + var_0B.foreground = 0; + var_0B.hidewhendead = 1; + var_0B.hidewheninmenu = 1; + var_0B settext(param_00); + var_0B.alpha = 0; + var_0B fadeovertime(var_06); + var_0B.alpha = var_08; + hintprintwait(var_06,param_01); + var_0C = 0; + if(isdefined(param_04)) + { + var_0C = 3; + } + else if(isdefined(param_03)) + { + var_0C = 2; + } + else if(isdefined(param_02)) + { + var_0C = 1; + } + + var_0D = spawnstruct(); + var_0D.timed_out = 0; + if(isdefined(param_05)) + { + var_0D thread hint_timeout(param_05); + } + + if(isdefined(param_01)) + { + for(;;) + { + var_0B fadeovertime(var_07); + var_0B.alpha = var_09; + hintprintwait(var_07,param_01); + if(var_0C == 3) + { + if([[ param_01 ]](param_02,param_03,param_04)) + { + break; + } + } + else if(var_0C == 2) + { + if([[ param_01 ]](param_02,param_03)) + { + break; + } + } + else if(var_0C == 1) + { + if([[ param_01 ]](param_02)) + { + break; + } + } + else if([[ param_01 ]]()) + { + break; + } + + var_0B fadeovertime(var_07); + var_0B.alpha = var_08; + hintprintwait(var_07,param_01); + if(var_0D.timed_out) + { + break; + } + + if(var_0C == 3) + { + if([[ param_01 ]](param_02,param_03,param_04)) + { + break; + } + + continue; + } + + if(var_0C == 2) + { + if([[ param_01 ]](param_02,param_03)) + { + break; + } + + continue; + } + + if(var_0C == 1) + { + if([[ param_01 ]](param_02)) + { + break; + } + + continue; + } + + if([[ param_01 ]]()) + { + break; + } + } + } + else + { + for(var_0E = 0;var_0E < 1;var_0E++) + { + var_0B fadeovertime(var_07); + var_0B.alpha = var_09; + hintprintwait(var_07,param_01); + var_0B fadeovertime(var_07); + var_0B.alpha = var_08; + hintprintwait(var_07,param_01); + } + } + + var_0B notify("destroying"); + self.current_global_hint = undefined; + var_0B destroy(); + level.current_hint = undefined; + maps\_utility::ent_flag_clear("global_hint_in_use"); +} + +//Function Number: 23 +destroy_hint_on_friendlyfire(param_00) +{ + param_00 endon("destroying"); + level waittill("friendlyfire_mission_fail"); + if(!isdefined(param_00)) + { + return; + } + + self.current_global_hint = undefined; + param_00 destroy(); + maps\_utility::ent_flag_clear("global_hint_in_use"); +} + +//Function Number: 24 +showhintprint_struct(param_00) +{ + param_00.timed_out = 0; + if(!isalive(self)) + { + return; + } + + var_01 = 1; + var_02 = 0.75; + var_03 = 0.95; + var_04 = 0.4; + maps\_utility::ent_flag_waitopen("global_hint_in_use"); + maps\_utility::ent_flag_set("global_hint_in_use"); + if(param_00.timed_out) + { + return; + } + + if(isdefined(param_00.timeout)) + { + param_00 thread hint_timeout(param_00.timeout); + } + + var_05 = maps\_hud_util::createclientfontstring("objective",2); + var_05.alpha = 0.9; + var_05.x = 0; + var_05.y = -38; + var_05.alignx = "center"; + var_05.aligny = "middle"; + var_05.horzalign = "center"; + var_05.vertalign = "middle"; + var_05.foreground = 0; + var_05.hidewhendead = 1; + var_05 settext(param_00.string); + var_05.alpha = 0; + var_05 fadeovertime(var_01); + var_05.alpha = var_03; + hintprintwait(var_01); + for(;;) + { + var_05 fadeovertime(var_02); + var_05.alpha = var_04; + hintprintwait(var_02); + if(param_00.timed_out) + { + break; + } + + var_05 fadeovertime(var_02); + var_05.alpha = var_03; + hintprintwait(var_02); + if(param_00.timed_out) + { + break; + } + } + + var_05 destroy(); + maps\_utility::ent_flag_clear("global_hint_in_use"); +} + +//Function Number: 25 +lerp_player_view_to_tag_internal(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08) +{ + if(isdefined(self.first_frame_time) && self.first_frame_time == gettime()) + { + wait 0.1; + } + + var_09 = self gettagorigin(param_01); + var_0A = self gettagangles(param_01); + param_00 maps\_utility::lerp_player_view_to_position(var_09,var_0A,param_02,param_03,param_04,param_05,param_06,param_07,param_08); + if(param_08) + { + return; + } + + param_00 playerlinkto(self,param_01,param_03,param_04,param_05,param_06,param_07,0); +} + +//Function Number: 26 +lerp_player_view_to_tag_oldstyle_internal(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08) +{ + if(isdefined(self.first_frame_time) && self.first_frame_time == gettime()) + { + wait 0.1; + } + + var_09 = self gettagorigin(param_01); + var_0A = self gettagangles(param_01); + param_00 maps\_utility::lerp_player_view_to_position_oldstyle(var_09,var_0A,param_02,param_03,param_04,param_05,param_06,param_07,1); + if(param_08) + { + return; + } + + param_00 playerlinktodelta(self,param_01,param_03,param_04,param_05,param_06,param_07,0); +} + +//Function Number: 27 +function_stack_wait(param_00) +{ + self endon("death"); + param_00 common_scripts\utility::waittill_either("function_done","death"); +} + +//Function Number: 28 +function_stack_wait_finish(param_00) +{ + function_stack_wait(param_00); + if(!isdefined(self)) + { + return 0; + } + + if(!issentient(self)) + { + return 1; + } + + if(isalive(self)) + { + return 1; + } + + return 0; +} + +//Function Number: 29 +function_stack_proc(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + self endon("death"); + if(!isdefined(param_00.function_stack)) + { + param_00.function_stack = []; + } + + param_00.function_stack[param_00.function_stack.size] = self; + thread function_stack_self_death(param_00); + function_stack_caller_waits_for_turn(param_00); + if(isdefined(param_00) && isdefined(param_00.function_stack)) + { + self.function_stack_func_begun = 1; + self notify("function_stack_func_begun"); + if(isdefined(param_06)) + { + param_00 [[ param_01 ]](param_02,param_03,param_04,param_05,param_06); + } + else if(isdefined(param_05)) + { + param_00 [[ param_01 ]](param_02,param_03,param_04,param_05); + } + else if(isdefined(param_04)) + { + param_00 [[ param_01 ]](param_02,param_03,param_04); + } + else if(isdefined(param_03)) + { + param_00 [[ param_01 ]](param_02,param_03); + } + else if(isdefined(param_02)) + { + param_00 [[ param_01 ]](param_02); + } + else + { + param_00 [[ param_01 ]](); + } + + if(isdefined(param_00) && isdefined(param_00.function_stack)) + { + param_00.function_stack = common_scripts\utility::array_remove(param_00.function_stack,self); + param_00 notify("level_function_stack_ready"); + } + } + + if(isdefined(self)) + { + self.function_stack_func_begun = 0; + self notify("function_done"); + } +} + +//Function Number: 30 +function_stack_self_death(param_00) +{ + self endon("function_done"); + self waittill("death"); + if(isdefined(param_00)) + { + param_00.function_stack = common_scripts\utility::array_remove(param_00.function_stack,self); + param_00 notify("level_function_stack_ready"); + } +} + +//Function Number: 31 +function_stack_caller_waits_for_turn(param_00) +{ + param_00 endon("death"); + self endon("death"); + param_00 endon("clear_function_stack"); + while(param_00.function_stack[0] != self) + { + param_00 waittill("level_function_stack_ready"); + } +} + +//Function Number: 32 +unflash_flag(param_00) +{ + level endon("player_flashed"); + wait param_00; + common_scripts\utility::flag_clear("player_flashed"); +} + +//Function Number: 33 +wait_for_sounddone_or_death(param_00) +{ + self endon("death"); + param_00 waittill("sounddone"); + return 1; +} + +//Function Number: 34 +init_vision_set(param_00) +{ + level.var_13EE = param_00; + if(!isdefined(level.vision_cheat_enabled)) + { + level.vision_cheat_enabled = 0; + } + + return level.vision_cheat_enabled; +} + +//Function Number: 35 +array_waitlogic1(param_00,param_01,param_02) +{ + array_waitlogic2(param_00,param_01,param_02); + self._array_wait = 0; + self notify("_array_wait"); +} + +//Function Number: 36 +array_waitlogic2(param_00,param_01,param_02) +{ + param_00 endon(param_01); + param_00 endon("death"); + if(isdefined(param_02)) + { + wait param_02; + return; + } + + param_00 waittill(param_01); +} + +//Function Number: 37 +exec_call(param_00) +{ + if(param_00.parms.size == 0) + { + param_00.caller [[ param_00.func ]](); + } + else if(param_00.parms.size == 1) + { + param_00.caller [[ param_00.func ]](param_00.parms[0]); + } + else if(param_00.parms.size == 2) + { + param_00.caller [[ param_00.func ]](param_00.parms[0],param_00.parms[1]); + } + else if(param_00.parms.size == 3) + { + param_00.caller [[ param_00.func ]](param_00.parms[0],param_00.parms[1],param_00.parms[2]); + } + + if(param_00.parms.size == 4) + { + param_00.caller [[ param_00.func ]](param_00.parms[0],param_00.parms[1],param_00.parms[2],param_00.parms[3]); + } + + if(param_00.parms.size == 5) + { + param_00.caller [[ param_00.func ]](param_00.parms[0],param_00.parms[1],param_00.parms[2],param_00.parms[3],param_00.parms[4]); + } +} + +//Function Number: 38 +exec_call_noself(param_00) +{ + if(param_00.parms.size == 0) + { + [[ param_00.func ]](); + } + else if(param_00.parms.size == 1) + { + [[ param_00.func ]](param_00.parms[0]); + } + else if(param_00.parms.size == 2) + { + [[ param_00.func ]](param_00.parms[0],param_00.parms[1]); + } + else if(param_00.parms.size == 3) + { + [[ param_00.func ]](param_00.parms[0],param_00.parms[1],param_00.parms[2]); + } + + if(param_00.parms.size == 4) + { + [[ param_00.func ]](param_00.parms[0],param_00.parms[1],param_00.parms[2],param_00.parms[3]); + } + + if(param_00.parms.size == 5) + { + [[ param_00.func ]](param_00.parms[0],param_00.parms[1],param_00.parms[2],param_00.parms[3],param_00.parms[4]); + } +} + +//Function Number: 39 +exec_func(param_00,param_01) +{ + if(!isdefined(param_00.caller)) + { + return; + } + + for(var_02 = 0;var_02 < param_01.size;var_02++) + { + param_01[var_02].caller endon(param_01[var_02].ender); + } + + if(param_00.parms.size == 0) + { + param_00.caller [[ param_00.func ]](); + } + else if(param_00.parms.size == 1) + { + param_00.caller [[ param_00.func ]](param_00.parms[0]); + } + else if(param_00.parms.size == 2) + { + param_00.caller [[ param_00.func ]](param_00.parms[0],param_00.parms[1]); + } + else if(param_00.parms.size == 3) + { + param_00.caller [[ param_00.func ]](param_00.parms[0],param_00.parms[1],param_00.parms[2]); + } + + if(param_00.parms.size == 4) + { + param_00.caller [[ param_00.func ]](param_00.parms[0],param_00.parms[1],param_00.parms[2],param_00.parms[3]); + } + + if(param_00.parms.size == 5) + { + param_00.caller [[ param_00.func ]](param_00.parms[0],param_00.parms[1],param_00.parms[2],param_00.parms[3],param_00.parms[4]); + } +} + +//Function Number: 40 +waittill_func_ends(param_00,param_01) +{ + self endon("all_funcs_ended"); + self endon("any_funcs_aborted"); + exec_func(param_00,param_01); + self.count--; + self notify("func_ended"); +} + +//Function Number: 41 +waittill_abort_func_ends(param_00,param_01) +{ + self endon("all_funcs_ended"); + self endon("any_funcs_aborted"); + exec_func(param_00,param_01); + self.abort_count--; + self notify("abort_func_ended"); +} + +//Function Number: 42 +do_abort(param_00) +{ + self endon("all_funcs_ended"); + if(!param_00.size) + { + return; + } + + var_01 = 0; + self.abort_count = param_00.size; + var_02 = []; + common_scripts\utility::array_levelthread(param_00,::waittill_abort_func_ends,var_02); + for(;;) + { + if(self.abort_count <= var_01) + { + break; + } + + self waittill("abort_func_ended"); + } + + self notify("any_funcs_aborted"); +} + +//Function Number: 43 +translate_local_on_ent(param_00) +{ + if(isdefined(self.forward)) + { + var_01 = anglestoforward(param_00.angles); + param_00.origin = param_00.origin + var_01 * self.forward; + } + + if(isdefined(self.right)) + { + var_02 = anglestoright(param_00.angles); + param_00.origin = param_00.origin + var_02 * self.right; + } + + if(isdefined(self.up)) + { + var_03 = anglestoup(param_00.angles); + param_00.origin = param_00.origin + var_03 * self.up; + } + + if(isdefined(self.yaw)) + { + param_00 addyaw(self.yaw); + } + + if(isdefined(self.pitch)) + { + param_00 addpitch(self.pitch); + } + + if(isdefined(self.roll)) + { + param_00 addroll(self.roll); + } +} + +//Function Number: 44 +dynamic_run_speed_proc(param_00,param_01,param_02,param_03,param_04) +{ + self notify("start_dynamic_run_speed"); + self endon("death"); + self endon("stop_dynamic_run_speed"); + self endon("start_dynamic_run_speed"); + level endon("_stealth_spotted"); + if(maps\_utility::ent_flag_exist("_stealth_custom_anim")) + { + maps\_utility::ent_flag_waitopen("_stealth_custom_anim"); + } + + if(!maps\_utility::ent_flag_exist("dynamic_run_speed_stopped")) + { + maps\_utility::ent_flag_init("dynamic_run_speed_stopped"); + maps\_utility::ent_flag_init("dynamic_run_speed_stopping"); + } + else + { + maps\_utility::ent_flag_clear("dynamic_run_speed_stopping"); + maps\_utility::ent_flag_clear("dynamic_run_speed_stopped"); + } + + self.run_speed_state = ""; + self.old_moveplaybackrate = self.moveplaybackrate; + thread stop_dynamic_run_speed(); + var_05 = param_00 * param_00; + var_06 = param_01 * param_01; + var_07 = param_02 * param_02; + var_08 = param_03 * param_03; + for(;;) + { + wait 0.05; + var_09 = level.players[0]; + foreach(var_0B in level.players) + { + if(distancesquared(var_09.origin,self.origin) > distancesquared(var_0B.origin,self.origin)) + { + var_09 = var_0B; + } + } + + var_0D = anglestoforward(self.angles); + var_0E = vectornormalize(var_09.origin - self.origin); + var_0F = vectordot(var_0D,var_0E); + var_10 = distancesquared(self.origin,var_09.origin); + var_11 = var_10; + if(isdefined(param_04)) + { + var_12 = maps\_utility::getclosest(var_09.origin,param_04); + var_11 = distancesquared(var_12.origin,var_09.origin); + } + + var_13 = 0; + if(isdefined(self.last_set_goalent)) + { + var_13 = [[ level.drs_ahead_test ]](self.last_set_goalent,param_01); + } + else if(isdefined(self.last_set_goalnode)) + { + var_13 = [[ level.drs_ahead_test ]](self.last_set_goalnode,param_01); + } + + if(isdefined(self.cqbwalking) && self.cqbwalking && !self.dontchangemoveplaybackrate) + { + self.moveplaybackrate = 1; + } + + if(var_10 < var_06 || var_0F > -0.25 || var_13) + { + dynamic_run_set("sprint"); + wait 0.5; + continue; + } + else if(var_10 < var_05 || var_0F > -0.25) + { + dynamic_run_set("run"); + wait 0.5; + continue; + } + else if(var_11 > var_07) + { + if(self.a.movement != "stop") + { + dynamic_run_set("stop"); + wait 0.5; + } + + continue; + } + else if(var_10 > var_08) + { + dynamic_run_set("jog"); + wait 0.5; + continue; + } + } +} + +//Function Number: 45 +stop_dynamic_run_speed() +{ + self endon("start_dynamic_run_speed"); + self endon("death"); + stop_dynamic_run_speed_wait(); + if(!self.dontchangemoveplaybackrate) + { + self.moveplaybackrate = self.old_moveplaybackrate; + } + + if(isdefined(level.scr_anim["generic"]["DRS_run"])) + { + if(isarray(level.scr_anim["generic"]["DRS_run"])) + { + maps\_utility::set_generic_run_anim_array("DRS_run"); + } + else + { + maps\_utility::set_generic_run_anim("DRS_run"); + } + } + else + { + maps\_utility::clear_run_anim(); + } + + self notify("stop_loop"); + maps\_utility::ent_flag_clear("dynamic_run_speed_stopping"); + maps\_utility::ent_flag_clear("dynamic_run_speed_stopped"); +} + +//Function Number: 46 +stop_dynamic_run_speed_wait() +{ + level endon("_stealth_spotted"); + self waittill("stop_dynamic_run_speed"); +} + +//Function Number: 47 +dynamic_run_ahead_test(param_00,param_01) +{ + if(!isdefined(param_00.classname)) + { + if(!isdefined(param_00.type)) + { + var_02 = ::maps\_spawner::get_target_structs; + } + else + { + var_02 = ::maps\_spawner::get_target_nodes; + } + } + else + { + var_02 = ::maps\_spawner::get_target_ents; + } + + return maps\_spawner::go_to_node_wait_for_player(param_00,var_02,param_01); +} + +//Function Number: 48 +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.dontchangemoveplaybackrate) + { + self.moveplaybackrate = 1; + } + else if(!self.dontchangemoveplaybackrate) + { + self.moveplaybackrate = 1.15; + } + + if(isarray(level.scr_anim["generic"]["DRS_sprint"])) + { + maps\_utility::set_generic_run_anim_array("DRS_sprint"); + } + else + { + maps\_utility::set_generic_run_anim("DRS_sprint"); + } + + self notify("stop_loop"); + maps\_utility::anim_stopanimscripted(); + maps\_utility::ent_flag_clear("dynamic_run_speed_stopped"); + break; + + case "run": + if(!self.dontchangemoveplaybackrate) + { + self.moveplaybackrate = self.old_moveplaybackrate; + } + + if(isdefined(level.scr_anim["generic"]["DRS_run"])) + { + if(isarray(level.scr_anim["generic"]["DRS_run"])) + { + maps\_utility::set_generic_run_anim_array("DRS_run"); + } + else + { + maps\_utility::set_generic_run_anim("DRS_run"); + } + } + else + { + maps\_utility::clear_run_anim(); + } + + self notify("stop_loop"); + maps\_utility::anim_stopanimscripted(); + maps\_utility::ent_flag_clear("dynamic_run_speed_stopped"); + break; + + case "stop": + thread dynamic_run_speed_stopped(); + break; + + case "jog": + if(!self.dontchangemoveplaybackrate) + { + self.moveplaybackrate = self.old_moveplaybackrate; + } + + if(isdefined(level.scr_anim["generic"]["DRS_combat_jog"])) + { + if(isarray(level.scr_anim["generic"]["DRS_combat_jog"])) + { + maps\_utility::set_generic_run_anim_array("DRS_combat_jog"); + } + else + { + maps\_utility::set_generic_run_anim("DRS_combat_jog"); + } + } + else + { + maps\_utility::clear_run_anim(); + } + + self notify("stop_loop"); + maps\_utility::anim_stopanimscripted(); + maps\_utility::ent_flag_clear("dynamic_run_speed_stopped"); + break; + + case "crouch": + break; + } +} + +//Function Number: 49 +dynamic_run_speed_stopped() +{ + self endon("death"); + if(maps\_utility::ent_flag("dynamic_run_speed_stopped")) + { + return; + } + + if(maps\_utility::ent_flag("dynamic_run_speed_stopping")) + { + return; + } + + self endon("stop_dynamic_run_speed"); + maps\_utility::ent_flag_set("dynamic_run_speed_stopping"); + maps\_utility::ent_flag_set("dynamic_run_speed_stopped"); + self endon("dynamic_run_speed_stopped"); + var_00 = "DRS_run_2_stop"; + maps\_anim::anim_generic_custom_animmode(self,"gravity",var_00); + maps\_utility::ent_flag_clear("dynamic_run_speed_stopping"); + if(isdefined(self.loops) && self.loops > 0) + { + return; + } + + while(maps\_utility::ent_flag("dynamic_run_speed_stopped")) + { + var_01 = "DRS_stop_idle"; + thread maps\_anim::anim_generic_loop(self,var_01); + if(isdefined(level.scr_anim["generic"]["signal_go"])) + { + maps\_utility::handsignal("go"); + } + + wait randomfloatrange(12,20); + if(maps\_utility::ent_flag_exist("_stealth_stance_handler")) + { + maps\_utility::ent_flag_waitopen("_stealth_stance_handler"); + } + + self notify("stop_loop"); + if(!maps\_utility::ent_flag("dynamic_run_speed_stopped")) + { + return; + } + + if(isdefined(level.dynamic_run_speed_dialogue)) + { + var_02 = common_scripts\utility::random(level.dynamic_run_speed_dialogue); + level thread maps\_utility::radio_dialogue_queue(var_02); + } + + if(isdefined(level.scr_anim["generic"]["signal_go"])) + { + maps\_utility::handsignal("go"); + } + } +} + +//Function Number: 50 +g_speed_get_func() +{ + return int(getdvar("g_speed")); +} + +//Function Number: 51 +g_speed_set_func(param_00) +{ + setsaveddvar("g_speed",int(param_00)); +} + +//Function Number: 52 +movespeed_get_func() +{ + return self.movespeedscale; +} + +//Function Number: 53 +movespeed_set_func(param_00) +{ + self.movespeedscale = param_00; + self setmovespeedscale(param_00); +} + +//Function Number: 54 +autosave_tactical_setup() +{ + if(common_scripts\utility::flag_exist("autosave_tactical_player_nade")) + { + return; + } + + common_scripts\utility::flag_init("autosave_tactical_player_nade"); + level.autosave_tactical_player_nades = 0; + notifyoncommand("autosave_player_nade","+frag"); + notifyoncommand("autosave_player_nade","-smoke"); + notifyoncommand("autosave_player_nade","+smoke"); + common_scripts\utility::array_thread(level.players,::autosave_tactical_grenade_check); +} + +//Function Number: 55 +autosave_tactical_grenade_check() +{ + for(;;) + { + self waittill("autosave_player_nade"); + common_scripts\utility::flag_set("autosave_tactical_player_nade"); + self waittill("grenade_fire",var_00); + thread autosave_tactical_grenade_check_dieout(var_00); + } +} + +//Function Number: 56 +autosave_tactical_grenade_check_dieout(param_00) +{ + level.autosave_tactical_player_nades++; + param_00 common_scripts\utility::waittill_notify_or_timeout("death",10); + level.autosave_tactical_player_nades--; + waittillframeend; + if(!level.autosave_tactical_player_nades) + { + common_scripts\utility::flag_clear("autosave_tactical_player_nade"); + } +} + +//Function Number: 57 +autosave_tactical_proc() +{ + level notify("autosave_tactical_proc"); + level endon("autosave_tactical_proc"); + level thread maps\_utility::notify_delay("kill_save",5); + level endon("kill_save"); + level endon("autosave_tactical_player_nade"); + if(common_scripts\utility::flag("autosave_tactical_player_nade")) + { + common_scripts\utility::flag_waitopen_or_timeout("autosave_tactical_player_nade",4); + if(common_scripts\utility::flag("autosave_tactical_player_nade")) + { + return; + } + } + + var_00 = getaiarray("axis"); + foreach(var_02 in var_00) + { + if(isdefined(var_02.enemy) && isplayer(var_02.enemy)) + { + return; + } + } + + waittillframeend; + maps\_utility::autosave_by_name(); +} + +//Function Number: 58 +music_play_internal_stop_with_fade_then_call(param_00,param_01,param_02,param_03) +{ + maps\_utility::music_stop(param_01); + level endon("stop_music"); + wait param_01; + thread maps\_utility::music_play(param_00,undefined,param_02,param_03); +} + +//Function Number: 59 +music_loop_internal_stop_with_fade_then_call(param_00,param_01,param_02,param_03,param_04,param_05) +{ + maps\_utility::music_stop(param_02); + level endon("stop_music"); + wait param_02; + thread music_loop_internal(param_00,param_01,undefined,param_03,param_04,param_05); +} + +//Function Number: 60 +music_loop_internal(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if(isdefined(param_02) && param_02 > 0) + { + thread music_loop_internal_stop_with_fade_then_call(param_00,param_01,param_02,param_03,param_04,param_05); + return; + } + + maps\_utility::music_stop(); + level endon("stop_music"); + maps\_utility::musicplaywrapper(param_00,param_03,param_04); + if(isdefined(param_05) && param_05 == 1 && common_scripts\utility::flag_exist("_stealth_spotted")) + { + level endon("_stealth_spotted"); + thread music_loop_stealth_pause(param_00,param_01,param_02); + } + + var_06 = maps\_utility::musiclength(param_00); + if(!isdefined(param_01)) + { + param_01 = 1; + } + + if(param_01 <= 10) + { + var_06 = var_06 + param_01; + } + + wait var_06; + maps\_utility::music_loop(param_00,param_01,param_02,param_03,param_04); +} + +//Function Number: 61 +music_loop_stealth_pause(param_00,param_01,param_02) +{ + level endon("stop_music"); + common_scripts\utility::flag_wait("_stealth_spotted"); + musicstop(0.5); + while(common_scripts\utility::flag("_stealth_spotted")) + { + common_scripts\utility::flag_waitopen("_stealth_spotted"); + wait 1; + } + + thread maps\_utility::music_loop(param_00,param_01,param_02); +} + +//Function Number: 62 +doslide(param_00,param_01,param_02) +{ + self endon("death"); + self endon("stop_sliding"); + var_03 = self; + var_04 = undefined; + for(;;) + { + var_05 = var_03 getnormalizedmovement(); + var_06 = anglestoforward(var_03.angles); + var_07 = anglestoright(var_03.angles); + var_05 = (var_05[1] * var_07[0] + var_05[0] * var_06[0],var_05[1] * var_07[1] + var_05[0] * var_06[1],0); + param_00.slidevelocity = param_00.slidevelocity + var_05 * param_01; + wait 0.05; + param_00.slidevelocity = param_00.slidevelocity * 1 - param_02; + } +} + +//Function Number: 63 +kill_deathflag_proc(param_00) +{ + self endon("death"); + if(isdefined(param_00)) + { + wait randomfloat(param_00); + } + + playfxontag(common_scripts\utility::getfx("flesh_hit"),self,"tag_eye"); + self kill(level.player.origin); +} + +//Function Number: 64 +update_rumble_intensity(param_00,param_01) +{ + self endon("death"); + var_02 = 0; + for(;;) + { + if(self.intensity > 0.0001 && gettime() > 300) + { + if(!var_02) + { + self playrumblelooponentity(param_01); + var_02 = 1; + } + } + else if(var_02) + { + self stoprumble(param_01); + var_02 = 0; + } + + var_03 = 1 - self.intensity; + var_03 = var_03 * 1000; + self.origin = param_00 geteye() + (0,0,var_03); + wait 0.05; + } +} + +//Function Number: 65 +start_glow(param_00) +{ + var_01 = spawn("script_model",self.origin); + self.glow_model = var_01; + var_01.angles = self.angles; + var_01 setmodel(param_00); + var_01 endon("death"); + self waittill("death"); + var_01 delete(); +} + +//Function Number: 66 +blend_default_dof(param_00,param_01,param_02) +{ + foreach(var_05, var_04 in level.dofdefault) + { + level.dofdefault[var_05] = param_01[var_05] * 1 - param_00 + param_02[var_05] * param_00; + } +} + +//Function Number: 67 +process_blend(param_00,param_01,param_02,param_03,param_04) +{ + waittillframeend; + if(!isdefined(self.start)) + { + self.start = 0; + } + + if(!isdefined(self.end)) + { + self.end = 1; + } + + if(!isdefined(self.base)) + { + self.base = 0; + } + + var_05 = self.time * 20; + var_06 = self.end - self.start; + if(isdefined(param_04)) + { + for(var_07 = 0;var_07 <= var_05;var_07++) + { + var_08 = self.base + var_07 * var_06 / var_05; + param_01 thread [[ param_00 ]](var_08,param_02,param_03,param_04); + wait 0.05; + } + + return; + } + + if(isdefined(var_05)) + { + for(var_07 = 0;var_07 <= var_05;var_07++) + { + var_08 = self.base + var_07 * var_06 / var_05; + param_01 thread [[ param_00 ]](var_08,param_02,param_03); + wait 0.05; + } + + return; + } + + if(isdefined(param_04)) + { + for(var_07 = 0;var_07 <= var_05;var_07++) + { + var_08 = self.base + var_07 * var_06 / var_05; + param_01 thread [[ param_00 ]](var_08,param_02); + wait 0.05; + } + + return; + } + + for(var_07 = 0;var_07 <= var_05;var_07++) + { + var_08 = self.base + var_07 * var_06 / var_05; + param_01 thread [[ param_00 ]](var_08); + wait 0.05; + } +} + +//Function Number: 68 +add_trace_fx_proc(param_00) +{ + waittillframeend; + if(!isdefined(level.trace_fx)) + { + level.trace_fx = []; + } + + if(!isdefined(level.trace_fx)) + { + level.trace_fx[param_00] = []; + } + + if(isdefined(self.fx)) + { + level.trace_fx[param_00][self.surface]["fx"] = self.fx; + } + + if(isdefined(self.fx_array)) + { + level.trace_fx[param_00][self.surface]["fx_array"] = self.fx_array; + } + + if(isdefined(self.sound)) + { + level.trace_fx[param_00][self.surface]["sound"] = self.sound; + } + + if(isdefined(self.rumble)) + { + level.trace_fx[param_00][self.surface]["rumble"] = self.rumble; + } + + if(!isdefined(level.trace_fx[param_00]["default"])) + { + level.trace_fx[param_00]["default"] = level.trace_fx[param_00][self.surface]; + } +} + +//Function Number: 69 +put_interactive_in_volume(param_00) +{ + var_01 = spawnstruct(); + precachemodel(param_00.model); + var_01.toy_model = param_00.model; + var_01.origin = param_00.origin; + var_01.angles = param_00.angles; + var_01.script_noteworthy = param_00.script_noteworthy; + var_01.target = param_00.target; + var_01.targetname = param_00.targetname; + self.interactives[self.interactives.size] = var_01; + param_00 delete(); +} + +//Function Number: 70 +put_toy_in_volume(param_00) +{ + var_01 = spawnstruct(); + precachemodel(param_00.model); + var_01.toy_model = param_00.model; + var_01.origin = param_00.origin; + var_01.angles = param_00.angles; + var_01.script_noteworthy = param_00.script_noteworthy; + var_01.script_linkto = param_00.script_linkto; + var_01.targetname = param_00.targetname; + var_01.target = param_00.target; + var_01.destructible_type = param_00.destructible_type; + var_01.script_noflip = param_00.script_noflip; + param_00 maps\_utility::precache_destructible(param_00.destructible_type); + self.destructibles[self.destructibles.size] = var_01; + param_00 notify("masking_destructible"); + param_00 delete(); +} + +//Function Number: 71 +get_color_info_from_trigger() +{ + var_00 = "allies"; + if(isdefined(self.script_color_axis)) + { + var_00 = "axis"; + } + + var_00 = maps\_colors::get_team(var_00); + var_01 = []; + if(var_00 == "allies") + { + var_02 = maps\_colors::get_colorcodes_from_trigger(self.script_color_allies,"allies"); + var_01 = var_02["colorCodes"]; + } + else + { + var_02 = maps\_colors::get_colorcodes_from_trigger(self.script_color_axis,"axis"); + var_01 = var_02["colorCodes"]; + } + + var_03 = []; + return var_7B; +} + +//Function Number: 72 +delaythread_proc(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07) +{ + self endon("death"); + wait param_01; + if(!isdefined(param_02)) + { + thread [[ param_00 ]](); + return; + } + + if(!isdefined(param_03)) + { + thread [[ param_00 ]](param_02); + return; + } + + if(!isdefined(param_04)) + { + thread [[ param_00 ]](param_02,param_03); + return; + } + + if(!isdefined(param_05)) + { + thread [[ param_00 ]](param_02,param_03,param_04); + return; + } + + if(!isdefined(param_06)) + { + thread [[ param_00 ]](param_02,param_03,param_04,param_05); + return; + } + + if(!isdefined(param_07)) + { + thread [[ param_00 ]](param_02,param_03,param_04,param_05,param_06); + return; + } + + thread [[ param_00 ]](param_02,param_03,param_04,param_05,param_06,param_07); +} + +//Function Number: 73 +add_wait_asserter() +{ + level notify("kill_add_wait_asserter"); + level endon("kill_add_wait_asserter"); + for(var_00 = 0;var_00 < 20;var_00++) + { + waittillframeend; + } +} + +//Function Number: 74 +update_battlechatter_hud() +{ +} + +//Function Number: 75 +comparesizesfx(param_00,param_01,param_02,param_03) +{ + if(!param_01.size) + { + return undefined; + } + + if(isdefined(param_02)) + { + var_04 = undefined; + var_05 = getarraykeys(param_01); + for(var_06 = 0;var_06 < var_05.size;var_06++) + { + var_07 = distance(param_01[var_05[var_06]].v["origin"],param_00); + if([[ param_03 ]](var_07,param_02)) + { + continue; + } + + param_02 = var_07; + var_04 = param_01[var_05[var_06]]; + } + + return var_04; + } + + var_05 = getarraykeys(var_05); + var_04 = var_04[var_07[0]]; + var_04 = distance(var_07.v["origin"],param_02); + for(var_06 = 1;var_06 < var_04.size;var_06++) + { + var_07 = distance(param_01[var_04[var_06]].v["origin"],param_00); + if([[ param_03 ]](var_07,param_02)) + { + continue; + } + + param_02 = var_07; + var_05 = param_01[var_04[var_06]]; + } + + return var_05; +} + +//Function Number: 76 +waittill_triggered_current() +{ + for(;;) + { + self waittill("trigger",var_00); + waittillframeend; + if(var_00.currentnode == self) + { + return var_00; + } + } +} + +//Function Number: 77 +add_trigger_func_thread() +{ + self.trigger_functions = []; + self waittill("trigger",var_00); + var_01 = self.trigger_functions; + self.trigger_functions = undefined; + foreach(var_03 in var_01) + { + thread [[ var_03 ]](var_00); + } +} + +//Function Number: 78 +objective_recon(param_00) +{ + if(!maps\_utility::is_default_start()) + { + return; + } + + var_01 = get_leveltime(); + var_02 = var_01; + if(isdefined(level.recon_objective_lasttime)) + { + var_02 = var_01 - level.recon_objective_lasttime; + } + + level.recon_objective_lasttime = var_01; + reconevent("script_objective: objective %d, leveltime %d, deltatime %d",param_00,var_01,var_02); +} + +//Function Number: 79 +mission_recon(param_00) +{ + if(maps\_utility::is_default_start()) + { + if(!isdefined(param_00)) + { + param_00 = 1; + } + + var_01 = get_leveltime(); + var_02 = var_01; + reconevent("script_level: leveltime %d, deltatime %d, success %d",var_02,var_01,param_00); + } +} + +//Function Number: 80 +get_leveltime() +{ + return getlevelticks() * 0.05; +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_utility_joec.gsc b/MW3/PC/SP/maps/_utility_joec.gsc new file mode 100644 index 0000000..c91a048 --- /dev/null +++ b/MW3/PC/SP/maps/_utility_joec.gsc @@ -0,0 +1,54 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_utility_joec.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 28 ms + * Timestamp: 10/27/2023 2:20:47 AM +*******************************************************************/ + +//Function Number: 1 +exchange_sort_by_handler(param_00,param_01) +{ + for(var_02 = 0;var_02 < param_00.size - 1;var_02++) + { + var_03 = 0; + for(var_04 = var_02 + 1;var_04 < param_00.size;var_04++) + { + if(param_00[var_04] [[ param_01 ]]() < param_00[var_02] [[ param_01 ]]()) + { + var_05 = param_00[var_04]; + param_00[var_04] = param_00[var_02]; + param_00[var_02] = var_05; + } + } + } + + return param_00; +} + +//Function Number: 2 +on_player_trig_record_and_notify(param_00,param_01) +{ + var_02 = getent(param_00,"script_noteworthy"); + for(;;) + { + var_02 waittill("trigger",var_03); + if(isdefined(var_03) && var_03 == self) + { + self.stat_finish_time = gettime(); + if(isdefined(level.challenge_time_limit)) + { + self.stat_finish_time_remaining = max(level.challenge_time_limit - self.stat_finish_time - level.challenge_start_time,0); + } + + if(!maps\_utility::is_coop() || isdefined(maps\_utility::get_other_player(self).stat_finish_time)) + { + common_scripts\utility::flag_set(param_01); + } + + break; + } + } +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_vehicle.gsc b/MW3/PC/SP/maps/_vehicle.gsc new file mode 100644 index 0000000..72462f9 --- /dev/null +++ b/MW3/PC/SP/maps/_vehicle.gsc @@ -0,0 +1 @@ +Failed to decompile this file, open a ticket if you need this fixed. \ No newline at end of file diff --git a/MW3/PC/SP/maps/_vehicle_aianim.gsc b/MW3/PC/SP/maps/_vehicle_aianim.gsc new file mode 100644 index 0000000..72462f9 --- /dev/null +++ b/MW3/PC/SP/maps/_vehicle_aianim.gsc @@ -0,0 +1 @@ +Failed to decompile this file, open a ticket if you need this fixed. \ No newline at end of file diff --git a/MW3/PC/SP/maps/_vehicle_missile.gsc b/MW3/PC/SP/maps/_vehicle_missile.gsc new file mode 100644 index 0000000..70c25e0 --- /dev/null +++ b/MW3/PC/SP/maps/_vehicle_missile.gsc @@ -0,0 +1,236 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_vehicle_missile.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 8 + * Decompile Time: 101 ms + * Timestamp: 10/27/2023 2:20:25 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(getdvar("cobrapilot_surface_to_air_missiles_enabled") == "") + { + setdvar("cobrapilot_surface_to_air_missiles_enabled","1"); + } + + tryreload(); + thread firemissile(); + thread turret_think(); + thread detachall_on_death(); +} + +//Function Number: 2 +detachall_on_death() +{ + self waittill("death"); + self detachall(); +} + +//Function Number: 3 +turret_think() +{ + self endon("death"); + if(!isdefined(self.script_turret)) + { + return; + } + + if(self.script_turret == 0) + { + return; + } + + self.attackradius = 30000; + if(isdefined(self.radius)) + { + self.attackradius = self.radius; + } + + while(!isdefined(level.cobrapilot_difficulty)) + { + wait 0.05; + } + + var_00 = 1; + if(level.cobrapilot_difficulty == "easy") + { + var_00 = 0.5; + } + else if(level.cobrapilot_difficulty == "medium") + { + var_00 = 1.7; + } + else if(level.cobrapilot_difficulty == "hard") + { + var_00 = 1; + } + else if(level.cobrapilot_difficulty == "insane") + { + var_00 = 1.5; + } + + self.attackradius = self.attackradius * var_00; + if(getdvar("cobrapilot_debug") == "1") + { + iprintln("surface-to-air missile range difficultyScaler = " + var_00); + } + + for(;;) + { + wait 2 + randomfloat(1); + var_01 = undefined; + var_01 = maps\_helicopter_globals::getenemytarget(self.attackradius,undefined,0,1); + if(!isdefined(var_01)) + { + continue; + } + + var_02 = var_01.origin; + if(isdefined(var_01.script_targetoffset_z)) + { + var_02 = var_02 + (0,0,var_01.script_targetoffset_z); + } + + self setturrettargetvec(var_02); + level thread turret_rotate_timeout(self,5); + self waittill("turret_rotate_stopped"); + self clearturrettarget(); + if(distance(self.origin,var_01.origin) > self.attackradius) + { + continue; + } + + var_03 = 0; + var_03 = sighttracepassed(self.origin,var_01.origin + (0,0,150),0,self); + if(!var_03) + { + continue; + } + + if(getdvar("cobrapilot_surface_to_air_missiles_enabled") == "1") + { + self notify("shoot_target",var_01); + self waittill("missile_fired",var_04); + if(isdefined(var_04)) + { + if(level.cobrapilot_difficulty == "hard") + { + wait 1 + randomfloat(2); + continue; + } + else if(level.cobrapilot_difficulty == "insane") + { + continue; + } + else + { + var_04 waittill("death"); + } + } + + continue; + } + } +} + +//Function Number: 4 +turret_rotate_timeout(param_00,param_01) +{ + param_00 endon("death"); + param_00 endon("turret_rotate_stopped"); + wait param_01; + param_00 notify("turret_rotate_stopped"); +} + +//Function Number: 5 +within_attack_range(param_00) +{ + var_01 = distance((self.origin[0],self.origin[1],0),(param_00.origin[0],param_00.origin[1],0)); + var_02 = param_00.origin[2] - self.origin[2]; + if(var_02 <= 750) + { + return 0; + } + + var_03 = var_02 * 2.5; + if(var_01 <= self.attackradius + var_03) + { + return 1; + } + + return 0; +} + +//Function Number: 6 +firemissile() +{ + self endon("death"); + for(;;) + { + self waittill("shoot_target",var_00); + var_01 = undefined; + if(!isdefined(var_00.script_targetoffset_z)) + { + var_00.script_targetoffset_z = 0; + } + + var_02 = (0,0,var_00.script_targetoffset_z); + var_01 = self fireweapon(self.missiletags[self.missilelaunchnexttag],var_00,var_02); + if(getdvar("cobrapilot_debug") == "1") + { + level thread draw_missile_target_line(var_01,var_00,var_02); + } + + if(!isdefined(var_00.incomming_missiles)) + { + var_00.incomming_missiles = []; + } + + var_00.incomming_missiles = maps\_utility::array_add(var_00.incomming_missiles,var_01); + thread maps\_helicopter_globals::missile_deathwait(var_01,var_00); + self detach(self.missilemodel,self.missiletags[self.missilelaunchnexttag]); + self.missilelaunchnexttag++; + self.missileammo--; + var_00 notify("incomming_missile",var_01); + tryreload(); + wait 0.05; + self notify("missile_fired",var_01); + } +} + +//Function Number: 7 +draw_missile_target_line(param_00,param_01,param_02) +{ + param_00 endon("death"); + wait 0.05; +} + +//Function Number: 8 +tryreload() +{ + if(!isdefined(self.missileammo)) + { + self.missileammo = 0; + } + + if(!isdefined(self.missilelaunchnexttag)) + { + self.missilelaunchnexttag = 0; + } + + if(self.missileammo > 0) + { + return; + } + + for(var_00 = 0;var_00 < self.missiletags.size;var_00++) + { + self attach(self.missilemodel,self.missiletags[var_00]); + } + + self.missileammo = self.missiletags.size; + self.missilelaunchnexttag = 0; +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_vehicle_spline.gsc b/MW3/PC/SP/maps/_vehicle_spline.gsc new file mode 100644 index 0000000..7c46da0 --- /dev/null +++ b/MW3/PC/SP/maps/_vehicle_spline.gsc @@ -0,0 +1,1618 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_vehicle_spline.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 61 + * Decompile Time: 844 ms + * Timestamp: 10/27/2023 2:20:28 AM +*******************************************************************/ + +//Function Number: 1 +init_vehicle_splines() +{ + common_scripts\utility::create_dvar("vehicle_spline_debug",0); + level.spline_min_progress = -2000; + level.enemy_snowmobiles_max = 6; + level.player_ent = spawn("script_origin",level.player.origin + (0,0,88)); + level.player_ent linkto(level.player); + level.snowmobile_path = make_road_path(); + common_scripts\utility::flag_init("ai_snowmobiles_ram_player"); + common_scripts\utility::flag_set("ai_snowmobiles_ram_player"); + var_00 = getentarray("enable_spline_path","targetname"); + common_scripts\utility::array_thread(var_00,::enable_spline_path_think); +} + +//Function Number: 2 +enable_spline_path_think() +{ + for(;;) + { + self waittill("trigger",var_00); + var_00 notify("enable_spline_path"); + } +} + +//Function Number: 3 +make_road_path() +{ + level.drive_spline_path_fun = ::bike_drives_path; + var_00 = process_path(); + common_scripts\utility::flag_init("race_complete"); + level.player_view_org = spawn("script_model",(0,0,0)); + level.player_view_org setmodel("tag_origin"); + level.enemy_snowmobiles = []; + level.bike_score = 0; + level.player thread bike_death_score(); + return var_00; +} + +//Function Number: 4 +bike_death_score() +{ + self waittill("death"); +} + +//Function Number: 5 +get_guy_from_spawner() +{ + var_00 = getent("spawner","targetname"); + var_00.count = 1; + var_00.origin = self.origin; + var_00.angles = (0,self.angles[1],0); + return var_00 stalingradspawn(); +} + +//Function Number: 6 +orient_dir(param_00) +{ + for(;;) + { + if(!isdefined(self)) + { + return; + } + + self orientmode("face angle",param_00); + wait 0.05; + } +} + +//Function Number: 7 +process_path() +{ + var_00 = create_path(); + level.snowmobile_path = var_00; + add_collision_to_path(var_00); + return var_00; +} + +//Function Number: 8 +droppedline(param_00,param_01,param_02,param_03,param_04,param_05) +{ + param_00 = maps\_utility::drop_to_ground(param_00); + param_01 = maps\_utility::drop_to_ground(param_01); + thread maps\_debug::linedraw(param_00,param_01,param_02,param_03,param_04,param_05); +} + +//Function Number: 9 +droppedlinez(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + param_01 = (param_01[0],param_01[1],param_00); + param_01 = maps\_utility::drop_to_ground(param_01); + param_02 = (param_02[0],param_02[1],param_00); + param_02 = maps\_utility::drop_to_ground(param_02); + thread maps\_debug::linedraw(param_01,param_02,param_03,param_04,param_05,param_06); +} + +//Function Number: 10 +draw_path(param_00) +{ + var_01 = undefined; + var_02 = undefined; + for(var_03 = 0;var_03 < param_00.size;var_03++) + { + var_04 = param_00[var_03]; + var_05 = vectortoangles(var_04.next_node.var_437C - var_04.var_437C); + var_06 = anglestoforward(var_05) * var_04.dist_to_next_targ; + var_07 = var_04.road_width * 0.5; + var_08 = get_position_from_spline(var_04,0,var_07); + var_09 = get_position_from_spline(var_04,var_04.dist_to_next_targ,var_07); + droppedlinez(var_04.z,var_08,var_09,(0,0.5,1),1,1,-15536); + var_0A = get_position_from_spline(var_04,0,var_07 * -1); + var_0B = get_position_from_spline(var_04,var_04.dist_to_next_targ,var_07 * -1); + droppedlinez(var_04.z,var_0A,var_0B,(0,0.5,1),1,1,-15536); + droppedlinez(var_04.z,var_08,var_0A,(0,0.5,1),1,1,-15536); + droppedlinez(var_04.z,var_09,var_0B,(0,0.5,1),1,1,-15536); + foreach(var_0D in var_04.col_volumes) + { + var_04 draw_col_vol(var_04.z,var_0D); + } + + foreach(var_10 in var_04.col_lines) + { + var_11 = var_10.origin; + var_12 = var_10.other_col_point.origin; + droppedlinez(var_04.z,var_11,var_12,(1,0,0),1,1,-15536); + } + } +} + +//Function Number: 11 +draw_col_vol(param_00,param_01) +{ + var_02 = get_position_from_spline(self,param_01["min"],param_01["left_offset"]); + var_03 = get_position_from_spline(self,param_01["max"],param_01["left_offset"]); + droppedlinez(param_00,var_02,var_03,(0.5,0,1),1,1,-15536); + var_02 = get_position_from_spline(self,param_01["min"],param_01["right_offset"]); + var_03 = get_position_from_spline(self,param_01["max"],param_01["right_offset"]); + droppedlinez(param_00,var_02,var_03,(0.5,0,1),1,1,-15536); + var_02 = get_position_from_spline(self,param_01["min"],param_01["right_offset"]); + var_03 = get_position_from_spline(self,param_01["min"],param_01["left_offset"]); + droppedlinez(param_00,var_02,var_03,(0.5,0,1),1,1,-15536); + var_02 = get_position_from_spline(self,param_01["max"],param_01["right_offset"]); + var_03 = get_position_from_spline(self,param_01["max"],param_01["left_offset"]); + droppedlinez(param_00,var_02,var_03,(0.5,0,1),1,1,-15536); +} + +//Function Number: 12 +draw_col_vol_offset(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = self; + var_06 = get_position_from_spline(var_05,param_01["min"],param_01[param_02]); + var_07 = get_position_from_spline(var_05,param_01["max"],param_01[param_02]); + droppedlinez(param_00,var_06,var_07,(0.5,0,1),1,1,-15536); +} + +//Function Number: 13 +create_path() +{ + var_00 = common_scripts\utility::getstruct("road_path_left","targetname"); + var_01 = []; + var_00.origin = (var_00.origin[0],var_00.origin[1],0); + var_02 = 0; + var_03 = var_00; + for(;;) + { + var_04 = var_00; + if(isdefined(var_00.target)) + { + var_04 = common_scripts\utility::getstruct(var_00.target,"targetname"); + } + + var_04.origin = (var_04.origin[0],var_04.origin[1],0); + var_01[var_01.size] = var_00; + var_00.next_node = var_04; + var_00.prev_node = var_03; + var_04.previous_node = var_00; + var_00.col_lines = []; + var_00.col_volumes = []; + var_00.col_radiuses = []; + var_00.origins = []; + var_00.dist_to_next_targs = []; + var_00.origins["left"] = var_00.origin; + var_00.index = var_02; + var_02++; + if(var_00 == var_04) + { + break; + } + + var_03 = var_00; + var_00 = var_04; + } + + var_00 = common_scripts\utility::getstruct("road_path_right","targetname"); + var_00.origin = (var_00.origin[0],var_00.origin[1],0); + var_05 = 0; + for(;;) + { + var_04 = var_00; + if(isdefined(var_00.target)) + { + var_04 = common_scripts\utility::getstruct(var_00.target,"targetname"); + } + + var_04.origin = (var_04.origin[0],var_04.origin[1],0); + var_06 = var_01[var_05]; + var_06.origins["right"] = var_00.origin; + var_06.road_width = distance(var_06.origins["right"],var_06.origins["left"]); + var_05++; + if(var_00 == var_04) + { + break; + } + + var_00 = var_04; + } + + foreach(var_08 in var_01) + { + var_08.var_437C = var_08.origins["left"] + var_08.origins["right"] * 0.5; + } + + foreach(var_08 in var_01) + { + var_0B = var_08.var_437C; + var_0C = var_08.next_node.var_437C; + var_0D = vectortoangles(var_0B - var_0C); + var_0E = anglestoright(var_0D); + var_0F = var_08.road_width * 0.5; + var_08.origins["left"] = var_08.var_437C + var_0E * var_0F; + var_08.origins["right"] = var_08.var_437C + var_0E * var_0F * -1; + } + + var_08 = var_01[var_01.size - 1].next_node; + var_08.var_437C = var_08.origins["left"] + var_08.origins["right"] * 0.5; + foreach(var_08 in var_01) + { + var_08.dist_to_next_targ = distance(var_08.var_437C,var_08.next_node.var_437C); + var_08.dist_to_next_targs["left"] = distance(var_08.origins["left"],var_08.next_node.origins["left"]); + var_08.dist_to_next_targs["right"] = distance(var_08.origins["right"],var_08.next_node.origins["right"]); + } + + return var_01; +} + +//Function Number: 14 +drop_path_to_ground(param_00) +{ + var_01 = self; + foreach(var_03 in param_00) + { + var_03.origin = var_03.origin + (0,0,20); + var_04 = physicstrace(var_03.origin,var_03.origin + (0,0,-100)); + var_03.origin = var_04; + } +} + +//Function Number: 15 +add_collision_to_path(param_00) +{ + var_01 = common_scripts\utility::getstructarray("moto_line","targetname"); + foreach(var_03 in var_01) + { + var_03.origin = (var_03.origin[0],var_03.origin[1],0); + var_04 = common_scripts\utility::getstruct(var_03.target,"targetname"); + var_03.other_col_point = var_04; + var_04.other_col_point = var_03; + } + + foreach(var_03 in var_01) + { + } + + var_08 = self; + foreach(var_0A in param_00) + { + foreach(var_03 in var_01) + { + add_collision_to_path_ent(var_0A,var_03); + } + } + + var_0E = getentarray("moto_collision","targetname"); + foreach(var_10 in var_0E) + { + var_11 = maps\_utility::get_array_of_closest(var_10.origin,param_00,undefined,2); + foreach(var_0A in var_11) + { + var_0A.col_radiuses[var_0A.col_radiuses.size] = var_10; + } + } +} + +//Function Number: 16 +get_offset_percent(param_00,param_01,param_02,param_03) +{ + var_04 = distance(param_00.var_437C,param_01.var_437C); + var_05 = 1 - param_02 / var_04; + var_06 = "left"; + if(param_03 > 0) + { + var_06 = "right"; + } + + var_07 = param_00.origins[var_06]; + var_08 = param_01.origins[var_06]; + var_09 = var_07 * var_05 + var_08 * 1 - var_05; + var_0A = param_00.var_437C; + var_0B = param_01.var_437C; + var_0C = var_0A * var_05 + var_0B * 1 - var_05; + var_0D = distance(var_0C,var_09); + return param_03 / var_0D; +} + +//Function Number: 17 +add_collision_to_path_ent(param_00,param_01) +{ + if(param_00 == param_00.next_node) + { + return; + } + + var_02 = param_00.road_width; + if(param_00.dist_to_next_targ > var_02) + { + var_02 = param_00.dist_to_next_targ; + } + + if(distance(param_01.origin,param_00.next_node.var_437C) > var_02 * 1.5) + { + return; + } + + var_03 = common_scripts\utility::getstruct(param_01.target,"targetname"); + var_04 = get_progression_between_points(param_01.origin,param_00.var_437C,param_00.next_node.var_437C); + var_05 = var_04["progress"]; + var_06 = get_progression_between_points(var_03.origin,param_00.var_437C,param_00.next_node.var_437C); + var_07 = var_06["progress"]; + if(var_05 < 0 || var_07 < 0) + { + return; + } + + if(var_05 > param_00.dist_to_next_targ && var_07 > param_00.dist_to_next_targ) + { + return; + } + + param_01.claimed = 1; + var_03.claimed = 1; + param_01.progress = var_05; + param_01.offset = var_04["offset"]; + param_01.offset_percent = get_offset_percent(param_00,param_00.next_node,var_05,var_04["offset"]); + var_03.progress = var_07; + var_03.offset = var_06["offset"]; + var_03.offset_percent = get_offset_percent(param_00,param_00.next_node,var_07,var_06["offset"]); + param_01.origin = (param_01.origin[0],param_01.origin[1],param_00.var_437C[2] + 40); + var_03.origin = (var_03.origin[0],var_03.origin[1],param_00.var_437C[2] + 40); + if(var_05 < var_07) + { + add_collision_offsets_to_path_ent(param_00,param_01,var_03); + param_00.col_lines[param_00.col_lines.size] = param_01; + return; + } + + add_collision_offsets_to_path_ent(param_00,var_03,param_01); + param_00.col_lines[param_00.col_lines.size] = var_03; +} + +//Function Number: 18 +add_collision_offsets_to_path_ent(param_00,param_01,param_02) +{ + var_03 = param_02.progress + 500; + var_04 = param_01.progress - level.dodge_distance; + var_05 = undefined; + var_06 = undefined; + var_07 = undefined; + var_08 = undefined; + if(param_02.offset > param_01.offset) + { + var_05 = param_02.offset; + var_06 = param_01.offset; + var_07 = param_02.offset_percent; + var_08 = param_01.offset_percent; + } + else + { + var_05 = param_01.offset; + var_06 = param_02.offset; + var_07 = param_01.offset_percent; + var_08 = param_02.offset_percent; + } + + var_09 = param_00; + var_0A = var_03; + var_0B = var_04; + for(;;) + { + add_vol_to_node(param_00,var_03,var_04,var_05,var_06,var_07,var_08); + if(!isdefined(param_00.next_node)) + { + break; + } + + if(param_00.dist_to_next_targ >= var_03) + { + break; + } + + var_03 = var_03 - param_00.dist_to_next_targ; + param_00 = param_00.next_node; + var_04 = 0; + } + + param_00 = var_09; + var_03 = var_0A; + var_04 = var_0B; + for(;;) + { + if(!isdefined(param_00.previous_node)) + { + break; + } + + if(var_04 > 0) + { + break; + } + + param_00 = param_00.previous_node; + var_03 = param_00.dist_to_next_targ; + var_04 = param_00.dist_to_next_targ + var_04; + add_vol_to_node(param_00,var_03,var_04,var_05,var_06,var_07,var_08); + } +} + +//Function Number: 19 +add_vol_to_node(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + var_07 = []; + if(var_7B["max"] > param_01.dist_to_next_targ) + { + } + + if(var_7B["min"] < 0) + { + } + + param_01.col_volumes[param_01.col_volumes.size] = var_7B; +} + +//Function Number: 20 +get_progression_between_points(param_00,param_01,param_02) +{ + param_01 = (param_01[0],param_01[1],0); + param_02 = (param_02[0],param_02[1],0); + param_00 = (param_00[0],param_00[1],0); + var_03 = []; + var_04 = vectortoangles(param_02 - param_01); + var_05 = anglestoforward(var_04); + var_06 = param_01; + var_07 = vectornormalize(var_06 - param_00); + var_08 = vectordot(var_05,var_07); + var_09 = vectornormalize(param_02 - param_01); + var_0A = param_00 - param_01; + var_0B = vectordot(var_0A,var_09); + var_0C = param_01 + var_05 * var_0B; + var_03["progress"] = var_0B; + var_03["offset"] = distance(var_0C,param_00); + var_0D = anglestoright(var_04); + var_07 = vectornormalize(var_0C - param_00); + var_08 = vectordot(var_0D,var_07); + var_03["dot"] = var_08; + if(var_08 > 0) + { + var_03["offset"] = var_03["offset"] * -1; + } + + return var_03; +} + +//Function Number: 21 +wipe_out(param_00) +{ + foreach(var_02 in self.targ.col_radiuses) + { + var_03 = (self.origin[0],self.origin[1],0); + if(distance((var_02.origin[0],var_02.origin[1],0),var_03) < var_02.radius) + { + return 1; + } + } + + if(param_00.health >= 100) + { + return 0; + } + + level.bike_score++; + return 1; +} + +//Function Number: 22 +vehicle_line(param_00) +{ + self endon("death"); + param_00 endon("death"); + wait 0.05; +} + +//Function Number: 23 +spawner_random_team() +{ + waittillframeend; + if(!isdefined(self.riders)) + { + return; + } + + var_00 = "axis"; + if(common_scripts\utility::cointoss()) + { + var_00 = "allies"; + } + + foreach(var_02 in self.riders) + { + var_02.team = var_00; + } +} + +//Function Number: 24 +get_spawn_position(param_00,param_01) +{ + var_02 = move_to_correct_segment(param_00,param_01); + var_03 = var_02.progress; + var_04 = var_02.targ; + var_05 = var_04.road_width * 0.5; + var_06 = undefined; + if(isdefined(level.player.offset)) + { + var_07 = 500; + if(common_scripts\utility::cointoss()) + { + var_07 = var_07 * -1; + } + + var_06 = level.player.offset + var_07; + } + else + { + var_06 = randomfloatrange(var_05 * -1,var_05); + } + + var_08 = get_obstacle_dodge_amount(var_04,var_03,var_06); + if(isdefined(var_08["dodge"])) + { + var_06 = var_08["dodge"]; + } + + var_09 = get_position_from_spline_unlimited(var_04,var_03,var_06); + var_0A = []; + return var_7B; +} + +//Function Number: 25 +debug_enemy_vehicles() +{ +} + +//Function Number: 26 +debug_enemy_vehicles_line() +{ + self endon("death"); + level endon("stop_debugging_enemy_vehicles"); + wait 0.05; +} + +//Function Number: 27 +spawn_enemy_bike() +{ + if(level.enemy_snowmobiles.size >= level.enemy_snowmobiles_max) + { + return; + } + + var_00 = get_player_targ(); + var_01 = get_player_progress(); + var_02 = "forward"; + var_03 = get_spawn_position(var_00,var_01 - 1000 - level.pos_lookahead_dist); + var_04 = var_03["spawn_pos"]; + var_05 = maps\_utility::within_fov(level.player.origin,level.player.angles,var_04,0); + if(var_05) + { + var_03 = get_spawn_position(var_00,var_01 + 1000); + var_04 = var_03["spawn_pos"]; + var_02 = "backward"; + var_05 = maps\_utility::within_fov(level.player.origin,level.player.angles,var_04,0); + if(var_05) + { + return; + } + } + + var_04 = maps\_utility::drop_to_ground(var_04); + var_06 = getent("snowmobile_spawner","targetname"); + var_07 = var_03["targ"]; + var_06.origin = var_04; + var_06.angles = vectortoangles(var_07.next_node.var_437C - var_07.var_437C); + var_08 = var_06 maps\_vehicle::get_vehicle_ai_spawners(); + foreach(var_0A in var_08) + { + var_0A.origin = var_06.origin; + } + + var_0C = maps\_vehicle::vehicle_spawn(var_06); + var_0C.offset_percent = var_03["offset"]; + var_0C phys_setspeed(90); + var_0C thread crash_detection(); + var_0C.left_spline_path_time = gettime() - 3000; + waittillframeend; + if(!isalive(var_0C)) + { + return; + } + + var_07 bike_drives_path(var_0C); +} + +//Function Number: 28 +crash_detection() +{ + self waittill("veh_collision",var_00,var_01); + wipeout("collision!"); +} + +//Function Number: 29 +rider_death_detection(param_00) +{ + self waittill("death"); + if(isdefined(param_00)) + { + param_00 wipeout("driver died!"); + } +} + +//Function Number: 30 +wipeout(param_00) +{ + self.wipeout = 1; +} + +//Function Number: 31 +update_bike_player_avoidance(param_00) +{ + var_01 = []; + foreach(var_03 in level.enemy_snowmobiles) + { + if(!isalive(var_03)) + { + continue; + } + + if(var_03.wipeout) + { + continue; + } + + var_01[var_01.size] = var_03; + } + + level.enemy_snowmobiles = var_01; + if(isalive(param_00) && !param_00.wipeout) + { + var_05 = 0; + foreach(var_03 in level.enemy_snowmobiles) + { + if(var_03 == param_00) + { + var_05 = 1; + continue; + } + } + + if(!var_05) + { + level.enemy_snowmobiles[level.enemy_snowmobiles.size] = param_00; + } + } + + var_08 = 0; + foreach(var_03 in level.enemy_snowmobiles) + { + var_03.bike_avoidance_offset = var_08; + var_08 = var_08 + 75; + } +} + +//Function Number: 32 +bike_drives_path(param_00) +{ + if(!isdefined(param_00.left_spline_path_time)) + { + param_00.left_spline_path_time = gettime(); + } + + param_00.wipeout = 0; + update_bike_player_avoidance(param_00); + if(!isdefined(param_00.player_offset)) + { + param_00.player_offset = 250; + } + + param_00.steering = 0; + var_01 = randomfloatrange(0,1); + if(!isdefined(param_00.offset_percent)) + { + param_00.offset_percent = var_01 * 2 - 1; + } + + var_02 = self; + var_03 = spawnstruct(); + var_03.origin = self.var_437C; + var_03.progress = 0; + var_03.tilt_vel = 0; + var_03.speed = 100; + var_03 maps\_utility::ent_flag_init("biker_reaches_path_end"); + param_00 notify("enable_spline_path"); + if(!param_00.riders.size) + { + param_00 phys_crash(); + return; + } + + common_scripts\utility::array_thread(param_00.riders,::rider_death_detection,param_00); + var_03.bike = param_00; + param_00.health = 100; + var_04 = 0; + var_03 thread bike_ent_wipe_out_check(param_00); + param_00.progress_targ = var_02; + param_00.offset_modifier = 0; + param_00.fails = 0; + param_00.direction = "forward"; + param_00.old_pos = param_00.origin; + for(;;) + { + if(!isalive(param_00)) + { + break; + } + + set_bike_position(var_03); + if(!isalive(param_00)) + { + break; + } + + if(abs(param_00.progress_dif) > 6000 && gettime() > param_00.left_spline_path_time + 4000) + { + param_00 wipeout("left behind!"); + } + + waittillframeend; + if(param_00.wipeout) + { + if(isdefined(param_00.hero)) + { + continue; + } + + param_00 phys_crash(); + foreach(var_06 in param_00.riders) + { + if(isalive(var_06)) + { + var_06 kill(); + } + } + + wait 5; + if(isdefined(param_00)) + { + param_00 delete(); + } + + update_bike_player_avoidance(); + return; + } + + if(var_06 maps\_utility::ent_flag("biker_reaches_path_end") || common_scripts\utility::flag("race_complete")) + { + break; + } + } + + update_bike_player_avoidance(); + var_06 notify("stop_bike"); + level notify("biker_dies"); + if(var_03.wipeout && !common_scripts\utility::flag("race_complete")) + { + wait 5; + } + + var_06 maps\_utility::ent_flag_clear("biker_reaches_path_end"); +} + +//Function Number: 33 +get_obstacle_dodge_amount(param_00,param_01,param_02) +{ + var_03["near_obstacle"] = 0; + foreach(var_05 in param_00.col_volumes) + { + if(param_01 < var_05["min"]) + { + continue; + } + + if(param_01 > var_05["max"]) + { + continue; + } + + var_03["near_obstacle"] = 1; + if(param_02 < var_05["left_offset"]) + { + continue; + } + + if(param_02 > var_05["right_offset"]) + { + continue; + } + + var_06 = param_00.var_437C + param_00.next_node.var_437C * 0.5; + if(param_02 > var_05["mid_offset"]) + { + var_03["dodge"] = var_05["right_offset"]; + } + else + { + var_03["dodge"] = var_05["left_offset"]; + } + + break; + } + + return var_03; +} + +//Function Number: 34 +sweep_tells_vehicles_to_get_off_path() +{ + for(;;) + { + self waittill("trigger",var_00); + if(!isdefined(var_00.script_noteworthy)) + { + continue; + } + + if(var_00.script_noteworthy != "sweepable") + { + continue; + } + + var_01 = randomfloatrange(0,1); + var_00 thread maps\_utility::notify_delay("enable_spline_path",var_01); + } +} + +//Function Number: 35 +drawmyoff() +{ + for(;;) + { + if(isdefined(level.player.vehicle)) + { + var_00 = self vehicle_getspeed(); + var_01 = level.player.vehicle vehicle_getspeed(); + level.difference = var_00 - var_01; + } + + wait 0.05; + } +} + +//Function Number: 36 +priceliner() +{ +} + +//Function Number: 37 +modulate_speed_based_on_progress() +{ + thread priceliner(); + self.targ = maps\_vehicle::get_my_spline_node(self.origin); + self.min_speed = 1; + self endon("stop_modulating_speed"); + var_00 = undefined; + for(;;) + { + wait 0.05; + var_01 = self.targ; + if(var_01 == var_01.next_node) + { + return; + } + + var_02 = get_progression_between_points(self.origin,self.targ.var_437C,self.targ.next_node.var_437C); + var_03 = var_02["progress"]; + var_03 = var_03 + level.pos_lookahead_dist; + var_04 = move_to_correct_segment(self.targ,var_03); + var_03 = var_04.progress; + self.targ = var_04.targ; + self.progress = var_03; + var_05 = get_player_targ(); + var_06 = get_player_progress(); + var_07 = progress_dif(self.targ,self.progress,var_05,var_06); + level.progress_dif = var_07; + if(!isdefined(level.player.vehicle)) + { + self vehicle_setspeed(65,1,1); + continue; + } + + if(abs(var_07 > 3500)) + { + var_08 = 65; + var_07 = var_07 * -1; + var_07 = var_07 + 750; + var_08 = level.player.vehicle.veh_speed + var_07 * 0.05; + var_09 = level.player.vehicle.veh_speed; + if(var_09 < 100) + { + var_09 = 100; + } + + if(var_08 > var_09) + { + var_08 = var_09; + } + else if(var_08 < self.min_speed) + { + var_08 = self.min_speed; + } + + level.desired_speed = var_08; + self vehicle_setspeed(var_08,90,20); + continue; + } + + price_match_player_speed(10,10); + } +} + +//Function Number: 38 +price_match_player_speed(param_00,param_01) +{ + var_02 = self.angles; + var_02 = (0,var_02[1],0); + var_03 = anglestoforward(var_02); + var_04 = get_progression_between_points(level.player.vehicle.origin,self.origin + var_03 * 1,self.origin - var_03 * 1); + var_05 = var_04["progress"]; + if(var_05 > 4000) + { + self vehicle_setspeed(0,90,20); + return; + } + + var_06 = maps\_utility::get_dot(self.origin,self.angles,level.player.origin); + var_07 = 1; + if(var_05 > 0) + { + var_07 = 1; + } + else + { + if(var_05 > -500) + { + var_07 = 1.25; + } + + if(var_07 > 0.95 && var_06 > 0.97) + { + var_07 = 0.95; + } + } + + var_08 = 70 * var_07; + if(var_08 < self.min_speed) + { + var_08 = self.min_speed; + } + + if(var_08 < 25) + { + var_08 = 25; + } + + level.price_desired_speed = var_08; + self vehicle_setspeed(var_08,param_00,param_01); +} + +//Function Number: 39 +match_player_speed(param_00,param_01) +{ + var_02 = self.angles; + var_02 = (0,var_02[1],0); + var_03 = anglestoforward(var_02); + var_04 = get_progression_between_points(level.player.vehicle.origin,self.origin + var_03 * 1,self.origin - var_03 * 1); + var_05 = var_04["progress"]; + if(var_05 > 4000) + { + self vehicle_setspeed(0,90,20); + return; + } + + if(var_05 < level.spline_min_progress && gettime() > self.left_spline_path_time + 4000) + { + wipeout("low progress!"); + } + + var_05 = var_05 - 750; + var_05 = var_05 + self.bike_avoidance_offset; + var_06 = 1; + if(var_05 > 150) + { + var_06 = 0.6; + } + else if(var_05 > 100) + { + var_06 = 1; + } + else if(var_05 < -100) + { + var_06 = 1.5; + } + + if(isdefined(level.player.offset)) + { + if(var_05 > 250) + { + } + } + + var_07 = level.player.vehicle.veh_speed * var_06; + if(var_07 < 25) + { + var_07 = 25; + } + + self vehicle_setspeed(var_07,param_00,param_01); +} + +//Function Number: 40 +track_player_progress(param_00) +{ + self notify("track_player_progress"); + self endon("track_player_progress"); + self.targ = maps\_vehicle::get_my_spline_node(param_00); + self.progress = 0; + var_01 = getent("player_sweep_trigger","targetname"); + var_02 = isdefined(var_01); + if(var_02) + { + var_01 thread sweep_tells_vehicles_to_get_off_path(); + } + + for(;;) + { + if(self.targ == self.targ.next_node) + { + return; + } + + var_03 = get_progression_between_points(self.origin,self.targ.var_437C,self.targ.next_node.var_437C); + var_04 = var_03["progress"]; + var_04 = var_04 + level.pos_lookahead_dist; + var_05 = move_to_correct_segment(self.targ,var_04); + var_04 = var_05.progress; + self.targ = var_05.targ; + self.progress = var_04; + self.offset = var_03["offset"]; + if(var_02) + { + var_06 = get_position_from_spline_unlimited(self.targ,var_04 + 2000,0); + var_06 = (var_06[0],var_06[1],self.origin[2] - 500); + var_01.origin = var_06; + var_07 = get_position_from_spline_unlimited(self.targ,var_04 + 3000,0); + var_08 = vectortoangles(var_01.origin - var_07); + var_01.angles = (0,var_08[1],0); + } + + if(common_scripts\utility::flag("ai_snowmobiles_ram_player")) + { + level.closest_enemy_snowmobile_to_player = maps\_utility::getclosest(self.origin,level.enemy_snowmobiles); + } + else + { + level.closest_enemy_snowmobile_to_player = undefined; + } + + wait 0.05; + } +} + +//Function Number: 41 +progress_dif(param_00,param_01,param_02,param_03) +{ + while(param_00.index > param_02.index) + { + param_00 = param_00.prev_node; + param_01 = param_01 + param_00.dist_to_next_targ; + } + + while(param_02.index > param_00.index) + { + param_02 = param_02.prev_node; + param_03 = param_03 + param_02.dist_to_next_targ; + } + + return param_01 - param_03; +} + +//Function Number: 42 +set_bike_position(param_00) +{ + var_01 = param_00.bike; + var_02 = 0.1; + var_03 = 0; + var_04 = 0; + var_05 = var_01.progress_targ; + if(var_05 == var_05.next_node) + { + var_01 delete(); + return; + } + + var_06 = get_progression_between_points(var_01.origin,var_05.var_437C,var_05.next_node.var_437C); + var_07 = get_progression_between_points(var_01.origin,var_05.next_node.var_437C,var_05.next_node.next_node.var_437C); + if(var_07["progress"] > 0 && var_07["progress"] < var_05.next_node.dist_to_next_targ) + { + var_06 = var_07; + var_05 = var_05.next_node; + } + + var_04 = var_06["offset"]; + var_08 = 0; + var_03 = var_06["progress"]; + var_01.progress = var_03; + var_09 = get_obstacle_dodge_amount(var_05,var_03,var_04); + var_0A = var_09["near_obstacle"]; + var_0B = progress_dif(var_05,var_03,get_player_targ(),get_player_progress()); + var_01.progress_dif = var_0B; + if(var_01.direction == "forward") + { + var_03 = var_03 + level.pos_lookahead_dist; + } + else + { + var_03 = var_03 - level.pos_lookahead_dist; + if(var_0B < 500) + { + var_01.direction = "forward"; + } + } + + var_0C = 60; + var_0D = 90; + var_0E = 100; + var_0F = 200; + if(var_0B > var_0F) + { + var_10 = var_0C; + } + else if(var_0C < var_0F) + { + var_10 = var_0E; + } + else + { + var_11 = var_10 - var_0F; + var_12 = var_0D - var_0C; + var_10 = var_0B - var_0E; + var_10 = var_11 - var_10; + var_10 = var_10 * var_12 / var_11; + var_10 = var_10 + var_0C; + } + + if(var_10 > 0) + { + if(var_01 vehicle_getspeed() < 2) + { + var_01.fails++; + if(var_01.fails > 10) + { + var_01 wipeout("move fail!"); + return; + } + } + else + { + var_01.fails = 0; + } + } + else + { + var_01.fails = 0; + } + + var_13 = randomfloatrange(0,100); + var_13 = var_13 * 0.001; + var_14 = 0; + var_15 = var_05.road_width; + param_00 = move_to_correct_segment(var_05,var_03); + var_03 = param_00.progress; + var_05 = param_00.targ; + var_16 = var_05.var_437C + var_05.next_node.var_437C * 0.5; + var_04 = var_04 * var_05.road_width / var_15; + var_09 = get_obstacle_dodge_amount(var_05,var_03,var_04); + if(isdefined(var_09["dodge"])) + { + var_04 = var_09["dodge"]; + } + else if(isdefined(var_01.preferred_offset)) + { + var_04 = var_01.preferred_offset; + } + + var_17 = 0.95; + var_18 = var_05.road_width * 0.5; + var_18 = var_18 - 50; + if(var_04 > var_18) + { + var_04 = var_18; + } + else if(var_04 < -1 * var_18) + { + var_04 = -1 * var_18; + } + + if(var_05 != var_05.next_node) + { + var_19 = var_01 get_bike_pos_from_spline(var_05,var_03,var_04,var_01.origin[2]); + var_1A = maps\_utility::get_dot(var_01.origin,var_01.angles,var_19); + if(var_1A < 0.97) + { + var_10 = 50; + } + else if(var_1A < 0.96) + { + var_10 = 25; + } + else if(var_1A < 0.95) + { + var_10 = 15; + } + + var_01 vehicledriveto(var_19,var_10); + if(!isdefined(level.player.vehicle)) + { + var_01 vehicle_setspeed(65,1,1); + } + else + { + var_01.veh_topspeed = level.player.vehicle.veh_topspeed * 1.3; + var_01 match_player_speed(45,30); + } + } + + var_01.progress_targ = var_05; + var_01.offset = var_04; + wait var_02; +} + +//Function Number: 43 +get_bike_pos_from_spline(param_00,param_01,param_02,param_03) +{ + var_04 = get_position_from_spline(param_00,param_01,param_02); + var_04 = maps\_utility::set_z(var_04,param_03); + return physicstrace(var_04 + (0,0,200),var_04 + (0,0,-200)); +} + +//Function Number: 44 +move_to_correct_segment(param_00,param_01) +{ + var_02 = spawnstruct(); + for(;;) + { + if(param_00 == param_00.next_node) + { + break; + } + + if(param_01 > param_00.dist_to_next_targ) + { + param_01 = param_01 - param_00.dist_to_next_targ; + param_00 = param_00.next_node; + continue; + } + + if(param_01 < 0) + { + param_01 = param_01 + param_00.dist_to_next_targ; + param_00 = param_00.prev_node; + continue; + } + + break; + } + + var_02.targ = param_00; + var_02.progress = param_01; + return var_02; +} + +//Function Number: 45 +get_position_from_spline_unlimited(param_00,param_01,param_02) +{ + for(;;) + { + if(param_00 == param_00.next_node) + { + return param_00.var_437C; + } + + if(param_01 > param_00.dist_to_next_targ) + { + param_01 = param_01 - param_00.dist_to_next_targ; + param_00 = param_00.next_node; + continue; + } + + break; + } + + return get_position_from_spline(param_00,param_01,param_02); +} + +//Function Number: 46 +get_position_from_spline(param_00,param_01,param_02) +{ + var_03 = vectortoangles(param_00.next_node.var_437C - param_00.var_437C); + var_04 = anglestoforward(var_03); + var_05 = anglestoright(var_03); + return param_00.var_437C + var_04 * param_01 + var_05 * param_02; +} + +//Function Number: 47 +get_position_from_progress(param_00,param_01) +{ + var_02 = 1 - param_01 / param_00.dist_to_next_targ; + return param_00.var_437C * var_02 + param_00.next_node.var_437C * 1 - var_02; +} + +//Function Number: 48 +bike_ent_wipe_out_check(param_00) +{ + self endon("stop_bike"); + for(;;) + { + self.wipeout = 0; + if(self.wipeout) + { + break; + } + + wait 0.05; + } +} + +//Function Number: 49 +draw_bike_debug() +{ + for(;;) + { + waittillframeend; + wait 0.05; + } +} + +//Function Number: 50 +track_progress() +{ + self endon("stop_bike"); + for(;;) + { + var_00 = (self.origin[0],self.origin[1],0); + var_01 = (self.targ.var_437C[0],self.targ.var_437C[1],0); + var_02 = (self.next_targ.var_437C[0],self.next_targ.var_437C[1],0); + var_03 = vectornormalize(var_01 - var_00); + var_04 = anglestoforward(self.angles); + var_05 = vectordot(var_04,var_03); + var_06 = vectornormalize(var_02 - var_01); + var_07 = var_00 - var_01; + self.progress = vectordot(var_07,var_06); + wait 0.05; + } +} + +//Function Number: 51 +set_road_offset(param_00) +{ + self.right_offset = param_00.road_width * 0.5; + self.safe_offset = self.right_offset - 100; +} + +//Function Number: 52 +bike_avoids_obstacles(param_00) +{ + self endon("stop_bike"); + self endon("end_path"); + self.goal_dir = 0; + thread bike_randomly_changes_lanes(); + bike_turns(); +} + +//Function Number: 53 +bike_randomly_changes_lanes() +{ + self endon("stop_bike"); + self endon("end_path"); + for(;;) + { + if(self.targ.col_volumes.size == 0 && self.dodge_dir == 0) + { + if(common_scripts\utility::cointoss()) + { + self.goal_dir++; + } + else + { + self.goal_dir--; + } + + if(self.goal_dir > 1) + { + self.goal_dir = self.goal_dir - 3; + } + else if(self.goal_dir < -1) + { + self.goal_dir = self.goal_dir + 3; + } + } + + wait randomfloatrange(1,3); + } +} + +//Function Number: 54 +should_stabilize() +{ + if(self.goal_dir == 0) + { + return 1; + } + + if(self.goal_dir == 1 && self.offset > self.safe_offset) + { + return 1; + } + + if(self.goal_dir == -1 && self.offset < self.safe_offset * -1) + { + return 1; + } + + return 0; +} + +//Function Number: 55 +bike_turns() +{ + self.tilt_vel = 0; + var_00 = 12; + var_01 = 3; + var_02 = 130; + for(;;) + { + if(should_stabilize()) + { + if(self.tilt > 0) + { + self.tilt_vel = self.tilt_vel - var_01; + } + else if(self.tilt < 0) + { + self.tilt_vel = self.tilt_vel + var_01; + } + } + else if(self.goal_dir == 1) + { + self.tilt_vel = self.tilt_vel + var_01; + } + else if(self.goal_dir == -1) + { + self.tilt_vel = self.tilt_vel - var_01; + } + + if(self.tilt_vel > var_00) + { + self.tilt_vel = var_00; + } + else if(self.tilt_vel < -1 * var_00) + { + self.tilt_vel = -1 * var_00; + } + + self.tilt = self.tilt + self.tilt_vel; + if(self.tilt > var_02) + { + self.tilt = var_02; + self.tilt_vel = 1; + } + else if(self.tilt < var_02 * -1) + { + self.tilt = var_02 * -1; + self.tilt_vel = -1; + } + + wait 0.05; + } +} + +//Function Number: 56 +stabalize(param_00,param_01) +{ + if(self.tilt > 0) + { + self.tilt = self.tilt - param_01; + } + else + { + self.tilt = self.tilt + param_01; + } + + if(abs(self.tilt) < param_01) + { + self.tilt = param_01; + } +} + +//Function Number: 57 +tilt_right(param_00,param_01) +{ + if(self.offset >= self.safe_offset) + { + self.goal_dir = 0; + return; + } + + self.tilt = self.tilt + param_01; + if(self.tilt >= param_00) + { + self.tilt = param_00; + } +} + +//Function Number: 58 +tilt_left(param_00,param_01) +{ + if(self.offset < self.safe_offset * -1) + { + self.goal_dir = 0; + return; + } + + self.tilt = self.tilt - param_01; + if(self.tilt < param_00 * -1) + { + self.tilt = param_00 * -1; + } +} + +//Function Number: 59 +get_player_progress() +{ + if(isdefined(level.player.progress)) + { + return level.player.progress; + } + + return 0; +} + +//Function Number: 60 +get_player_targ() +{ + if(isdefined(level.player.targ)) + { + return level.player.targ; + } + + return level.snowmobile_path[0]; +} + +//Function Number: 61 +debug_bike_line() +{ + var_00 = (0.2,0.2,1); + if(isdefined(level.player.vehicle) && self.veh_speed > level.player.vehicle.veh_speed) + { + var_00 = (1,0.2,0.2); + } + + self.old_pos = self.origin; +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/_vehicledrive.gsc b/MW3/PC/SP/maps/_vehicledrive.gsc new file mode 100644 index 0000000..865673b --- /dev/null +++ b/MW3/PC/SP/maps/_vehicledrive.gsc @@ -0,0 +1,403 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_vehicledrive.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 14 + * Decompile Time: 194 ms + * Timestamp: 10/27/2023 2:20:30 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + setdvarifuninitialized("debug_vehiclegod","off"); + setdvarifuninitialized("debug_vehicleplayerhealth","off"); + setdvarifuninitialized("player_vehicle_dismountable","off"); + precacheshader("tank_shell"); + level.playeronvehicle = 0; +} + +//Function Number: 2 +vehicle_wait(param_00) +{ + if(!isdefined(param_00)) + { + param_00 = 0; + } + else if(param_00) + { + if(getdvar("player_vehicle_dismountable") == "off") + { + self makeunusable(); + } + } + + self endon("death"); + self endon("stop_vehicle_wait"); + while(self.health > 0) + { + if(!param_00) + { + self waittill("trigger"); + } + else + { + param_00 = 0; + self useby(level.player); + } + + var_01 = self getvehicleowner(); + if(isdefined(var_01) && isplayer(var_01)) + { + thread vehicle_enter(); + } + else + { + thread vehicle_exit(); + } + + if(param_00) + { + break; + } + + wait 0.05; + } +} + +//Function Number: 3 +vehicle_exit() +{ + level.playeronvehicle = 0; + level.playervehicle = level.playervehiclenone; + level notify("player exited vehicle"); + if(isdefined(level.player.oldthreatbias)) + { + level.player.threatbias = level.player.oldthreatbias; + level.player.oldthreatbias = undefined; + } + + if(isdefined(level.vehiclehud)) + { + level.vehiclehud destroy(); + } + + if(isdefined(level.vehiclehud2)) + { + level.vehiclehud2 destroy(); + } + + if(isdefined(level.vehiclefireicon)) + { + level.vehiclefireicon destroy(); + } +} + +//Function Number: 4 +vehicle_enter() +{ + level.playeronvehicle = 1; + level.playervehicle = self; + thread vehicle_ridehandle(); +} + +//Function Number: 5 +setup_vehicle_tank() +{ + vehicle_givehealth(); +} + +//Function Number: 6 +setup_vehicle_other() +{ + vehicle_givehealth(); +} + +//Function Number: 7 +vehicle_givehealth() +{ + var_00 = maps\_utility::getdifficulty(); + if(var_00 == "easy") + { + self.health = 3000; + } + else if(var_00 == "medium") + { + self.health = 2500; + } + else if(var_00 == "hard") + { + self.health = 2000; + } + else if(var_00 == "fu") + { + self.health = 1300; + } + else + { + self.health = 2000; + } + + if(isdefined(self.healthbuffer)) + { + self.health = self.health + self.healthbuffer; + self.currenthealth = self.health; + self.maxhealth = self.health; + } +} + +//Function Number: 8 +protect_player() +{ + level endon("player exited vehicle"); + self endon("death"); + var_00 = level.player.health; + while(isalive(level.player)) + { + level.player waittill("damage",var_01); + if(self.health <= 0) + { + level.player kill((0,0,0)); + } + + level.player.health = level.player.health + int(var_01 * 0.2); + } +} + +//Function Number: 9 +vehicle_ridehandle() +{ + level endon("player exited vehicle"); + self endon("no_regen_health"); + self endon("death"); + thread vehicle_kill_player_ondeath(); + self.maximumhealth = self.health; + switch(maps\_utility::getdifficulty()) + { + case "gimp": + var_00 = 100; + var_01 = 2700; + break; + + case "easy": + var_00 = 75; + var_01 = 2700; + break; + + case "medium": + var_00 = 50; + var_01 = 2700; + break; + + case "hard": + var_00 = 30; + var_01 = 3700; + break; + + case "fu": + var_00 = 20; + var_01 = 4700; + break; + + default: + var_00 = 50; + var_01 = 2700; + break; + } + + if(self.vehicletype == "crusader_player") + { + self setmodel("vehicle_crusader2_viewmodel"); + } + + var_02 = gettime(); + if(getdvar("debug_vehiclegod") != "off") + { + for(;;) + { + self waittill("damage"); + self.health = self.maxhealth; + } + } + + thread vehicle_damageset(); + var_03 = gettime(); + for(;;) + { + if(self.damaged) + { + if(getdvar("debug_vehicleplayerhealth") != "off") + { + iprintlnbold("playervehicles health: ",self.health - self.healthbuffer); + } + + self.damaged = 0; + var_02 = gettime() + var_01; + } + + var_04 = gettime(); + if(self.health < self.maximumhealth && var_04 > var_02 && var_04 > var_03) + { + if(self.health + var_00 > self.maximumhealth) + { + self.health = self.maximumhealth; + } + else + { + self.health = self.health + var_00; + } + + var_03 = gettime() + 250; + if(getdvar("debug_vehicleplayerhealth") != "off") + { + iprintlnbold("playervehicles health: ",self.health - self.healthbuffer); + } + } + + wait 0.05; + } +} + +//Function Number: 10 +vehicle_kill_player_ondeath() +{ + level endon("player exited vehicle"); + self waittill("death"); + level.player enablehealthshield(0); + for(;;) + { + level.player kill(); + wait 0.1; + } + + wait 0.5; + level.player enablehealthshield(1); +} + +//Function Number: 11 +vehicle_damageset() +{ + self.damaged = 0; + self endon("death"); + for(;;) + { + self waittill("damage",var_00); + self.damaged = 1; + } +} + +//Function Number: 12 +vehicle_reloadsound() +{ + for(;;) + { + self waittill("turret_fire"); + wait 0.5; + self playsound("tank_reload"); + } +} + +//Function Number: 13 +vehicle_hud_tank_fireicon() +{ + if(getdvar("player_vehicle_dismountable") != "off") + { + return; + } + + level endon("player exited vehicle"); + level.player endon("death"); + self endon("death"); + if(isdefined(level.vehiclefireicon)) + { + level.vehiclefireicon destroy(); + } + + level.vehiclefireicon = newhudelem(); + level.vehiclefireicon.x = -32; + level.vehiclefireicon.y = -64; + level.vehiclefireicon.alignx = "center"; + level.vehiclefireicon.aligny = "middle"; + level.vehiclefireicon.horzalign = "right"; + level.vehiclefireicon.vertalign = "bottom"; + level.vehiclefireicon setshader("tank_shell",64,64); + var_00 = 1; + level.vehiclefireicon.alpha = var_00; + for(;;) + { + if(var_00) + { + if(!self isturretready()) + { + var_00 = 0; + level.vehiclefireicon.alpha = var_00; + } + } + else if(self isturretready()) + { + var_00 = 1; + level.vehiclefireicon.alpha = var_00; + } + + wait 0.05; + } +} + +//Function Number: 14 +healthoverlay() +{ + self endon("death"); + var_00 = newhudelem(); + var_00.x = 0; + var_00.y = 0; + var_00 setshader("splatter_alt_sp",640,480); + var_00.alignx = "left"; + var_00.aligny = "top"; + var_00.horzalign = "fullscreen"; + var_00.vertalign = "fullscreen"; + var_00.alpha = 0; + var_01 = self.health - self.healthbuffer; + var_02 = 0; + var_03 = 0.3; + for(;;) + { + var_04 = self.health - self.healthbuffer / var_01; + var_05 = 0.5 + 0.5 * var_04; + if(var_04 < 0.75 || var_02) + { + if(!var_02) + { + var_02 = 1; + } + + var_06 = 1 - var_04 + var_03; + var_00 fadeovertime(0.05); + var_00.alpha = var_06; + wait 0.1; + var_00 fadeovertime(var_05 * 0.2); + var_00.alpha = var_06 * 0.5; + wait var_05 * 0.2; + var_00 fadeovertime(var_05 * 0.3); + var_00.alpha = var_06 * 0.3; + wait var_05 * 0.3; + var_04 = self.health - self.healthbuffer / var_01; + var_05 = 0.3 + 0.7 * var_04; + if(var_04 > 0.9) + { + var_02 = 0; + var_00 fadeovertime(0.5); + var_00.alpha = 0; + wait var_05 * 0.5 - 0.1; + } + else + { + wait var_05 * 0.5 - 0.1; + } + + continue; + } + + wait 0.05; + } +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/mp/mp_village.gsc b/MW3/PC/SP/maps/mp/mp_village.gsc new file mode 100644 index 0000000..59d0af5 --- /dev/null +++ b/MW3/PC/SP/maps/mp/mp_village.gsc @@ -0,0 +1,31 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\mp_village.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 44 ms + * Timestamp: 10/27/2023 2:18:59 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_0390::main(); + lib_48E7::main(); + lib_0391::main(); + maps\mp\_load::main(); + ambientplay("ambient_mp_village"); + maps\mp\_compass::setupminimap("compass_map_mp_village"); + setdvar("r_lightGridEnableTweaks",1); + setdvar("r_lightGridIntensity",1.33); + game["attackers"] = "allies"; + game["defenders"] = "axis"; + func_3AA0(); +} + +//Function Number: 2 +func_3AA0() +{ + maps\mp\_audio::add_reverb("default","mountains",0.25,0.9,2); +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/so_aud.gsc b/MW3/PC/SP/maps/so_aud.gsc new file mode 100644 index 0000000..8fd5770 --- /dev/null +++ b/MW3/PC/SP/maps/so_aud.gsc @@ -0,0 +1,329 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\so_aud.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 15 + * Decompile Time: 264 ms + * Timestamp: 10/27/2023 2:19:13 AM +*******************************************************************/ + +//Function Number: 1 +main(param_00) +{ + maps\_audio::aud_register_msg_handler(::func_4400); + thread func_43FF(param_00); +} + +//Function Number: 2 +func_43FF(param_00) +{ + if(!isdefined(param_00)) + { + return; + } + + switch(param_00) + { + case "so_nyse_ny_manhattan": + func_4401(); + break; + } +} + +//Function Number: 3 +func_4400(param_00,param_01) +{ + var_02 = 1; + switch(param_00) + { + case "so_berlin_intro_littlebird_spawn": + var_03 = param_01; + var_03 thread common_scripts\utility::play_loop_sound_on_entity("so_littlebird_move"); + break; + + case "so_ied_littlebird": + var_03 = param_01; + var_03 thread common_scripts\utility::play_loop_sound_on_entity("so_littlebird_move"); + var_03 thread func_4405(); + break; + + case "so_ied_wave4_littlebird": + var_04 = param_01; + var_04 thread common_scripts\utility::play_loop_sound_on_entity("so_littlebird_move_distant"); + var_04 thread func_4405(); + break; + + case "so_ied_wave3_tank": + var_05 = param_01; + var_05 thread func_4408(); + break; + + case "so_paris_start_jeep": + var_06 = param_01; + thread maps\_audio_vehicles::vm_start_preset("so_paris_jeep_01","so_paris_jeep",var_06,2); + break; + + case "so_nyse_littlebird_spawn": + var_03 = param_01; + var_03 common_scripts\utility::play_loop_sound_on_entity("so_nymn_littlebird_move"); + break; + + case "so_start_harbor_player_hind": + var_07 = param_01; + var_07 common_scripts\utility::play_loop_sound_on_entity("so_hind_player"); + break; + + case "so_harbor_ally_helis": + var_08 = param_01; + foreach(var_03 in var_08) + { + var_03 thread common_scripts\utility::play_loop_sound_on_entity("so_hind_allies"); + } + break; + + case "so_harbor_kill_helis": + var_08 = param_01; + foreach(var_03 in var_08) + { + var_03 common_scripts\utility::stop_loop_sound_on_entity("so_hind_allies"); + } + break; + + case "so_start_harbor_exit_hind": + var_0D = param_01; + var_0D common_scripts\utility::play_loop_sound_on_entity("so_exit_hind_player"); + break; + + case "so_harbor_enemy_chopper_flyover": + var_0E = param_01; + var_0E maps\_utility::play_sound_on_entity("so_sub_hind_flyover"); + break; + + case "so_sub_missile_launch": + var_0F = param_01; + func_4402(var_0F); + break; + + default: + var_02 = 0; + break; + } + + return var_02; +} + +//Function Number: 4 +func_4401() +{ + maps\_audio_dynamic_ambi::damb_start_preset_at_point("fire_wood_med",(-945,-2847,262),"steff_01",1000,1); + maps\_audio_dynamic_ambi::damb_start_preset_at_point("fire_wood_med",(-1181,-2926,55),"steff_02",1000,1); + maps\_audio_dynamic_ambi::damb_start_preset_at_point("fire_wood_med_tight",(-1004,-2927,42),"steff_03",1000,1); + maps\_audio_dynamic_ambi::damb_start_preset_at_point("fire_crackle_med_tight",(-902,-2716,66),"steff_04",1000,1); + maps\_audio_dynamic_ambi::damb_start_preset_at_point("fire_wood_med_tight",(-909,-2636,36),"steff_05",1000,1); + maps\_audio_dynamic_ambi::damb_start_preset_at_point("fire_wood_med",(-686,-2120,91),"steff_car",1000,1); + common_scripts\utility::play_loopsound_in_space("road_flare_lp_tight",(-141,271,2)); + common_scripts\utility::play_loopsound_in_space("road_flare_lp_tight",(-259,579,2)); + common_scripts\utility::play_loopsound_in_space("road_flare_lp_tight",(-475,980,10)); + common_scripts\utility::play_loopsound_in_space("road_flare_lp_tight",(-704,311,-7)); + maps\_audio_dynamic_ambi::damb_start_preset_at_point("fire_crackle_med_tight",(-471,1856,-22),"pre_stock_01",1000,1); +} + +//Function Number: 5 +func_4402(param_00) +{ + if(!isdefined(param_00)) + { + return; + } + + if(!isdefined(level.aud.var_4403)) + { + level.aud.var_4403 = 0; + } + + var_01 = maps\_audio_zone_manager::azm_get_current_zone(); + if((var_01 == "nyhb_sub_interior_controlroom" || var_01 == "nyhb_sub_interior_missileroom2") && !level.aud.var_4403) + { + level.aud.var_4403 = 1; + maps\_audio::aud_disable_zone_filter(); + level.player seteq("grondo3d",0,0,"lowpass",0,400,2); + level.player seteq("norestrict2d",0,0,"lowpass",0,400,2); + level.player seteqlerp(1,0); + thread func_4404(); + } + + wait 0.05; + param_00 playsound("russian_sub_missile_launch"); + wait 1.25; + param_00 playsound("russian_sub_missile_launch_boom"); +} + +//Function Number: 6 +func_4404() +{ + for(;;) + { + var_00 = maps\_audio_zone_manager::azm_get_current_zone(); + if(var_00 != "nyhb_sub_interior_controlroom" && var_00 != "nyhb_sub_interior_missileroom2") + { + maps\_audio::aud_enable_zone_filter(); + level.player deactivateeq(0,"grondo3d",0); + level.player deactivateeq(0,"norestrict2d",0); + level.aud.var_4403 = 0; + return; + } + + level.player seteqlerp(1,0); + wait 0.1; + } +} + +//Function Number: 7 +func_4405() +{ + level.aud.var_4406 = (0,0,0); + self waittill("deathspin"); + thread func_4407(); + thread common_scripts\utility::play_loop_sound_on_entity("so_littlebird_helicopter_dying_loop"); + common_scripts\utility::waittill_either("death","crash_done"); + thread common_scripts\utility::play_sound_in_space("so_littlebird_helicopter_crash",level.aud.var_4406); +} + +//Function Number: 8 +func_4407() +{ + self endon("death"); + for(;;) + { + if(isdefined(self)) + { + self.origin = level.aud.var_4406; + wait 0.05; + } + } +} + +//Function Number: 9 +func_4408() +{ + func_4409("ied_tank_01","us_tank_treads_lp_02","us_tank_move_low_lp","us_tank_idle_lp"); + func_440E(); +} + +//Function Number: 10 +func_4409(param_00,param_01,param_02,param_03) +{ + if(isdefined(self)) + { + level.aud.instance_name = spawn("script_origin",self.origin); + var_04 = spawn("script_origin",self.origin); + var_05 = spawn("script_origin",self.origin); + var_06 = spawn("script_origin",self.origin); + level.aud.instance_name.var_17CC = 1; + var_07 = level.aud.instance_name; + var_08 = level.aud.instance_name.var_17CC; + var_04 linkto(self); + var_06 linkto(self); + var_05 linkto(self); + if(isdefined(var_04) || isdefined(param_01)) + { + var_04 playloopsound(param_01); + } + + if(isdefined(var_05) || isdefined(param_02)) + { + var_05 playloopsound(param_02); + } + + if(isdefined(var_06) || isdefined(param_03)) + { + var_06 playloopsound(param_03); + } + + var_04 scalevolume(0); + var_05 scalevolume(0); + var_06 scalevolume(0); + wait 0.3; + func_440A(var_07,var_04,var_05,var_06,1,5,var_08); + } +} + +//Function Number: 11 +func_440A(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + param_04 = 1; + param_05 = 5; + thread func_440D(param_00,param_01,param_02,param_03); + thread func_440C(); + param_00 endon("instance_killed"); + var_07 = 0; + for(;;) + { + if(isdefined(self)) + { + var_08 = self vehicle_getspeed(); + var_08 = min(var_08,param_05); + var_08 = maps\_audio::aud_smooth(var_07,var_08,0.1); + var_09 = maps\_audio::aud_map_range(var_08,param_04,param_05,level.aud.var_440B["veh_drive_vol"]); + var_0A = maps\_audio::aud_map_range(var_08,param_04,param_05,level.aud.var_440B["veh_idle_vol"]); + param_02 scalevolume(var_09,0.1); + param_01 scalevolume(var_09,0.1); + param_03 scalevolume(var_0A,0.1); + var_07 = var_08; + wait 0.1; + } + } +} + +//Function Number: 12 +func_440C() +{ + level.aud.var_440B["veh_drive_vol"] = [[0,0],[0.05,0.1],[0.1,0.1],[0.2,0.2],[0.3,0.3],[0.4,0.4],[0.5,0.5],[0.6,0.6],[0.8,0.8],[1,1]]; + level.aud.var_440B["veh_idle_vol"] = [[0,1],[0.05,0.85],[0.1,0.6],[0.2,0.5],[0.3,0.4],[0.4,0.1],[0.5,0],[0.6,0],[0.8,0],[1,0]]; +} + +//Function Number: 13 +func_440D(param_00,param_01,param_02,param_03) +{ + if(isdefined(self)) + { + self waittill("death"); + param_00 notify("instance_killed"); + thread func_440F(param_01,5); + thread func_440F(param_02,5); + thread func_440F(param_03,5); + } +} + +//Function Number: 14 +func_440E() +{ + self endon("death"); + if(isdefined(self)) + { + for(;;) + { + self waittill("weapon_fired"); + var_00 = randomfloatrange(0.2,0.4); + thread common_scripts\utility::play_sound_in_space("us_tank_big_boom",self.origin); + thread common_scripts\utility::play_sound_in_space("us_tank_fire_dist",self.origin); + thread common_scripts\utility::play_sound_in_space("us_tank_fire_close",self.origin); + thread common_scripts\utility::play_sound_in_space("us_tank_fire_hi_ring",self.origin); + thread common_scripts\utility::play_sound_in_space("us_tank_fire_lfe",self.origin); + wait 0.2; + thread common_scripts\utility::play_sound_in_space("us_tank_dist_verb",self.origin); + wait var_00; + } + } +} + +//Function Number: 15 +func_440F(param_00,param_01) +{ + param_00 scalevolume(0,param_01); + wait param_01 + 0.05; + param_00 stoploopsound(); + wait 0.05; + param_00 delete(); +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/so_survival_mp_radar.gsc b/MW3/PC/SP/maps/so_survival_mp_radar.gsc new file mode 100644 index 0000000..10f4c61 --- /dev/null +++ b/MW3/PC/SP/maps/so_survival_mp_radar.gsc @@ -0,0 +1,65 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\so_survival_mp_radar.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 2 + * Decompile Time: 46 ms + * Timestamp: 10/27/2023 2:19:13 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + level.wave_table = "sp/so_survival/tier_3.csv"; + level.var_3F63 = "sp/so_survival/tier_3.csv"; + lib_03CB::main(); + lib_48E0::main(); + lib_03CC::main(); + lib_48E1::main(); + lib_0623::func_3F65(); + maps\_load::main(); + ambientplay("ambient_mp_radar"); + maps\_utility::set_vision_set("mp_radar",0); + lib_0623::func_3F66(); + maps\_compass::setupminimap("compass_map_mp_radar"); + lib_0623::func_3F67(); + thread killtrigger((-5451,3761,1374),28,16); + thread killtrigger((-5450,3606,1392),28,16); + thread killtrigger((-5452,3712,1380),28,16); + thread killtrigger((-5452,3656,1380),28,16); + thread killtrigger((-5431,3781,1378),8,10); + thread killtrigger((-5479,3781,1379),8,10); + thread killtrigger((-3380,798,1234),28,16); + thread killtrigger((-3379,644,1246),28,16); + thread killtrigger((-3730,658,1234),28,16); + thread killtrigger((-3794,640,1234),28,16); + thread killtrigger((-3358,819,1238),8,10); + thread killtrigger((-3680,669,1234),28,16); + thread killtrigger((-3830,627,1250),28,16); + thread killtrigger((-3382,738,1234),28,16); + thread killtrigger((-3382,682,1234),28,16); + thread killtrigger((-3655,657,1228),8,10); + thread killtrigger((-3666,701,1238),8,10); + thread killtrigger((-4812,-40,1256),32,24); + thread killtrigger((-4763,-75,1301),10,10); + thread killtrigger((-4893,-71,1128),100,10); + thread killtrigger((-5017,-161,1128),100,10); + thread killtrigger((-4864,3048,1344),4,20); +} + +//Function Number: 2 +killtrigger(param_00,param_01,param_02) +{ + var_03 = spawn("trigger_radius",param_00,0,param_01,param_02); + for(;;) + { + var_03 waittill("trigger",var_04); + if(!isplayer(var_04)) + { + continue; + } + + var_04 maps\_utility::kill_wrapper(); + } +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/so_survival_mp_village.gsc b/MW3/PC/SP/maps/so_survival_mp_village.gsc new file mode 100644 index 0000000..133cfc6 --- /dev/null +++ b/MW3/PC/SP/maps/so_survival_mp_village.gsc @@ -0,0 +1,32 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\so_survival_mp_village.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 29 ms + * Timestamp: 10/27/2023 2:19:13 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + level.wave_table = "sp/so_survival/tier_1.csv"; + level.var_3F63 = "sp/so_survival/tier_1.csv"; + lib_0390::main(); + lib_48E7::main(); + lib_0391::main(); + lib_48E8::main(); + lib_0623::func_3F65(); + maps\_load::main(); + if(!level.console) + { + setsaveddvar("r_ssaoStrength",0); + } + + ambientplay("ambient_mp_village"); + maps\_utility::set_vision_set("mp_village",0); + lib_0623::func_3F66(); + maps\_compass::setupminimap("compass_map_mp_village"); + lib_0623::func_3F67(); +} \ No newline at end of file diff --git a/MW3/PC/SP/maps/so_survival_precache.gsc b/MW3/PC/SP/maps/so_survival_precache.gsc new file mode 100644 index 0000000..c1400c0 --- /dev/null +++ b/MW3/PC/SP/maps/so_survival_precache.gsc @@ -0,0 +1,18 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\so_survival_precache.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: PC + * Function Count: 1 + * Decompile Time: 12 ms + * Timestamp: 10/27/2023 2:25:05 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + lib_061E::main("vehicle_little_bird_armed","littlebird_so","script_vehicle_littlebird_armed_so"); + lib_061F::main("vehicle_ucav",undefined,"script_vehicle_ucav_so"); + lib_0620::main("vehicle_mi17_woodland_fly_cheap","mi17_so","script_vehicle_mi17_woodland_fly_cheap_so"); + lib_0621::main("vehicle_blackhawk_low","blackhawk_so","script_vehicle_blackhawk_low_so"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/character_mp_ally_juggernaut.gsc b/MW3/Xbox/MP/character/character_mp_ally_juggernaut.gsc new file mode 100644 index 0000000..aab698a --- /dev/null +++ b/MW3/Xbox/MP/character/character_mp_ally_juggernaut.gsc @@ -0,0 +1,24 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\character_mp_ally_juggernaut.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 30 ms + * Timestamp: 10/27/2023 2:28:11 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_fullbody_ally_juggernaut"); + self setviewmodel("viewhands_juggernaut_ally"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_fullbody_ally_juggernaut"); + precachemodel("viewhands_juggernaut_ally"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/character_mp_opforce_juggernaut.gsc b/MW3/Xbox/MP/character/character_mp_opforce_juggernaut.gsc new file mode 100644 index 0000000..70cccdf --- /dev/null +++ b/MW3/Xbox/MP/character/character_mp_opforce_juggernaut.gsc @@ -0,0 +1,24 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\character_mp_opforce_juggernaut.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 39 ms + * Timestamp: 10/27/2023 2:28:21 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_fullbody_opforce_juggernaut"); + self setviewmodel("viewhands_juggernaut_opforce"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_fullbody_opforce_juggernaut"); + precachemodel("viewhands_juggernaut_opforce"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_africa_militia_assault_a.gsc b/MW3/Xbox/MP/character/mp_character_africa_militia_assault_a.gsc new file mode 100644 index 0000000..5721e61 --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_africa_militia_assault_a.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_africa_militia_assault_a.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 30 ms + * Timestamp: 10/27/2023 2:28:36 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_africa_militia_assault_a"); + codescripts\character::attachhead("alias_africa_militia_heads_mp",xmodelalias\alias_africa_militia_heads_mp::main()); + self setviewmodel("viewhands_african_militia"); + self.voice = "african"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_africa_militia_assault_a"); + codescripts\character::func_19F4(xmodelalias\alias_africa_militia_heads_mp::main()); + precachemodel("viewhands_african_militia"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_africa_militia_lmg_b.gsc b/MW3/Xbox/MP/character/mp_character_africa_militia_lmg_b.gsc new file mode 100644 index 0000000..e734a20 --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_africa_militia_lmg_b.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_africa_militia_lmg_b.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 29 ms + * Timestamp: 10/27/2023 2:28:37 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_africa_militia_lmg_b"); + codescripts\character::attachhead("alias_africa_militia_heads_mp",xmodelalias\alias_africa_militia_heads_mp::main()); + self setviewmodel("viewhands_african_militia"); + self.voice = "african"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_africa_militia_lmg_b"); + codescripts\character::func_19F4(xmodelalias\alias_africa_militia_heads_mp::main()); + precachemodel("viewhands_african_militia"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_africa_militia_shotgun_b.gsc b/MW3/Xbox/MP/character/mp_character_africa_militia_shotgun_b.gsc new file mode 100644 index 0000000..05e983a --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_africa_militia_shotgun_b.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_africa_militia_shotgun_b.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 31 ms + * Timestamp: 10/27/2023 2:28:46 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_africa_militia_shotgun_b"); + codescripts\character::attachhead("alias_africa_militia_heads_mp",xmodelalias\alias_africa_militia_heads_mp::main()); + self setviewmodel("viewhands_african_militia"); + self.voice = "african"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_africa_militia_shotgun_b"); + codescripts\character::func_19F4(xmodelalias\alias_africa_militia_heads_mp::main()); + precachemodel("viewhands_african_militia"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_africa_militia_smg_b.gsc b/MW3/Xbox/MP/character/mp_character_africa_militia_smg_b.gsc new file mode 100644 index 0000000..b335cac --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_africa_militia_smg_b.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_africa_militia_smg_b.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 37 ms + * Timestamp: 10/27/2023 2:28:46 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_africa_militia_smg_b"); + codescripts\character::attachhead("alias_africa_militia_heads_mp",xmodelalias\alias_africa_militia_heads_mp::main()); + self setviewmodel("viewhands_african_militia"); + self.voice = "african"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_africa_militia_smg_b"); + codescripts\character::func_19F4(xmodelalias\alias_africa_militia_heads_mp::main()); + precachemodel("viewhands_african_militia"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_africa_militia_sniper.gsc b/MW3/Xbox/MP/character/mp_character_africa_militia_sniper.gsc new file mode 100644 index 0000000..6f05bca --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_africa_militia_sniper.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_africa_militia_sniper.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 28 ms + * Timestamp: 10/27/2023 2:28:46 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_opforce_africa_militia_sniper"); + self attach("head_opforce_africa_sniper","",1); + self.headmodel = "head_opforce_africa_sniper"; + self setviewmodel("viewhands_african_militia"); + self.voice = "african"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_opforce_africa_militia_sniper"); + precachemodel("head_opforce_africa_sniper"); + precachemodel("viewhands_african_militia"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_ally_ghillie_arctic.gsc b/MW3/Xbox/MP/character/mp_character_ally_ghillie_arctic.gsc new file mode 100644 index 0000000..9f251ea --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_ally_ghillie_arctic.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_ally_ghillie_arctic.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 37 ms + * Timestamp: 10/27/2023 2:29:22 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_ally_ghillie_desert_sniper"); + self attach("head_ally_arctic_sniper","",1); + self.headmodel = "head_ally_arctic_sniper"; + self setviewmodel("viewhands_iw5_ghillie_arctic"); + self.voice = "delta"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_ally_ghillie_desert_sniper"); + precachemodel("head_ally_arctic_sniper"); + precachemodel("viewhands_iw5_ghillie_arctic"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_ally_ghillie_desert.gsc b/MW3/Xbox/MP/character/mp_character_ally_ghillie_desert.gsc new file mode 100644 index 0000000..2073ec6 --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_ally_ghillie_desert.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_ally_ghillie_desert.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 31 ms + * Timestamp: 10/27/2023 2:29:20 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_ally_ghillie_desert_sniper"); + self attach("head_ally_delta_sniper","",1); + self.headmodel = "head_ally_delta_sniper"; + self setviewmodel("viewhands_iw5_ghillie_desert"); + self.voice = "delta"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_ally_ghillie_desert_sniper"); + precachemodel("head_ally_delta_sniper"); + precachemodel("viewhands_iw5_ghillie_desert"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_ally_ghillie_forest.gsc b/MW3/Xbox/MP/character/mp_character_ally_ghillie_forest.gsc new file mode 100644 index 0000000..2fa366f --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_ally_ghillie_forest.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_ally_ghillie_forest.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 29 ms + * Timestamp: 10/27/2023 2:29:24 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_ally_ghillie_woodland_sniper"); + self attach("head_ally_delta_sniper","",1); + self.headmodel = "head_ally_delta_sniper"; + self setviewmodel("viewhands_iw5_ghillie_woodland"); + self.voice = "pmc"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_ally_ghillie_woodland_sniper"); + precachemodel("head_ally_delta_sniper"); + precachemodel("viewhands_iw5_ghillie_woodland"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_ally_ghillie_urban.gsc b/MW3/Xbox/MP/character/mp_character_ally_ghillie_urban.gsc new file mode 100644 index 0000000..a4e660e --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_ally_ghillie_urban.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_ally_ghillie_urban.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 28 ms + * Timestamp: 10/27/2023 2:29:23 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_ally_ghillie_urban_sniper"); + self attach("head_ally_delta_sniper","",1); + self.headmodel = "head_ally_delta_sniper"; + self setviewmodel("viewhands_iw5_ghillie_urban"); + self.voice = "delta"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_ally_ghillie_urban_sniper"); + precachemodel("head_ally_delta_sniper"); + precachemodel("viewhands_iw5_ghillie_urban"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_delta_elite_assault_aa.gsc b/MW3/Xbox/MP/character/mp_character_delta_elite_assault_aa.gsc new file mode 100644 index 0000000..309949b --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_delta_elite_assault_aa.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_delta_elite_assault_aa.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 30 ms + * Timestamp: 10/27/2023 2:28:07 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_delta_elite_assault_aa"); + codescripts\character::attachhead("alias_delta_elite_heads",xmodelalias\alias_delta_elite_heads::main()); + self setviewmodel("viewhands_delta"); + self.voice = "delta"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_delta_elite_assault_aa"); + codescripts\character::func_19F4(xmodelalias\alias_delta_elite_heads::main()); + precachemodel("viewhands_delta"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_delta_elite_assault_ab.gsc b/MW3/Xbox/MP/character/mp_character_delta_elite_assault_ab.gsc new file mode 100644 index 0000000..4c2d01b --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_delta_elite_assault_ab.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_delta_elite_assault_ab.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 28 ms + * Timestamp: 10/27/2023 2:28:08 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_delta_elite_assault_ab"); + codescripts\character::attachhead("alias_delta_elite_heads_longsleeves",xmodelalias\alias_delta_elite_heads_longsleeves::main()); + self setviewmodel("viewhands_delta"); + self.voice = "delta"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_delta_elite_assault_ab"); + codescripts\character::func_19F4(xmodelalias\alias_delta_elite_heads_longsleeves::main()); + precachemodel("viewhands_delta"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_delta_elite_assault_ba.gsc b/MW3/Xbox/MP/character/mp_character_delta_elite_assault_ba.gsc new file mode 100644 index 0000000..0595b6b --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_delta_elite_assault_ba.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_delta_elite_assault_ba.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 32 ms + * Timestamp: 10/27/2023 2:28:08 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_delta_elite_assault_ba"); + codescripts\character::attachhead("alias_delta_elite_heads",xmodelalias\alias_delta_elite_heads::main()); + self setviewmodel("viewhands_delta"); + self.voice = "delta"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_delta_elite_assault_ba"); + codescripts\character::func_19F4(xmodelalias\alias_delta_elite_heads::main()); + precachemodel("viewhands_delta"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_delta_elite_assault_bb.gsc b/MW3/Xbox/MP/character/mp_character_delta_elite_assault_bb.gsc new file mode 100644 index 0000000..08e99e1 --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_delta_elite_assault_bb.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_delta_elite_assault_bb.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 28 ms + * Timestamp: 10/27/2023 2:28:08 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_delta_elite_assault_bb"); + codescripts\character::attachhead("alias_delta_elite_heads_longsleeves",xmodelalias\alias_delta_elite_heads_longsleeves::main()); + self setviewmodel("viewhands_delta"); + self.voice = "delta"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_delta_elite_assault_bb"); + codescripts\character::func_19F4(xmodelalias\alias_delta_elite_heads_longsleeves::main()); + precachemodel("viewhands_delta"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_delta_elite_lmg_a.gsc b/MW3/Xbox/MP/character/mp_character_delta_elite_lmg_a.gsc new file mode 100644 index 0000000..c8ab86a --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_delta_elite_lmg_a.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_delta_elite_lmg_a.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 27 ms + * Timestamp: 10/27/2023 2:28:09 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_delta_elite_lmg_a"); + codescripts\character::attachhead("alias_delta_elite_heads",xmodelalias\alias_delta_elite_heads::main()); + self setviewmodel("viewhands_delta"); + self.voice = "delta"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_delta_elite_lmg_a"); + codescripts\character::func_19F4(xmodelalias\alias_delta_elite_heads::main()); + precachemodel("viewhands_delta"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_delta_elite_lmg_b.gsc b/MW3/Xbox/MP/character/mp_character_delta_elite_lmg_b.gsc new file mode 100644 index 0000000..11c6480 --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_delta_elite_lmg_b.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_delta_elite_lmg_b.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 30 ms + * Timestamp: 10/27/2023 2:28:09 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_delta_elite_lmg_b"); + codescripts\character::attachhead("alias_delta_elite_heads_longsleeves",xmodelalias\alias_delta_elite_heads_longsleeves::main()); + self setviewmodel("viewhands_delta"); + self.voice = "delta"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_delta_elite_lmg_b"); + codescripts\character::func_19F4(xmodelalias\alias_delta_elite_heads_longsleeves::main()); + precachemodel("viewhands_delta"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_delta_elite_shotgun_a.gsc b/MW3/Xbox/MP/character/mp_character_delta_elite_shotgun_a.gsc new file mode 100644 index 0000000..c870f77 --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_delta_elite_shotgun_a.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_delta_elite_shotgun_a.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 29 ms + * Timestamp: 10/27/2023 2:28:10 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_delta_elite_shotgun_a"); + codescripts\character::attachhead("alias_delta_elite_heads_longsleeves",xmodelalias\alias_delta_elite_heads_longsleeves::main()); + self setviewmodel("viewhands_delta"); + self.voice = "delta"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_delta_elite_shotgun_a"); + codescripts\character::func_19F4(xmodelalias\alias_delta_elite_heads_longsleeves::main()); + precachemodel("viewhands_delta"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_delta_elite_smg_a.gsc b/MW3/Xbox/MP/character/mp_character_delta_elite_smg_a.gsc new file mode 100644 index 0000000..fcb3a63 --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_delta_elite_smg_a.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_delta_elite_smg_a.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 40 ms + * Timestamp: 10/27/2023 2:28:10 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_delta_elite_smg_a"); + codescripts\character::attachhead("alias_delta_elite_heads",xmodelalias\alias_delta_elite_heads::main()); + self setviewmodel("viewhands_delta"); + self.voice = "delta"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_delta_elite_smg_a"); + codescripts\character::func_19F4(xmodelalias\alias_delta_elite_heads::main()); + precachemodel("viewhands_delta"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_delta_elite_smg_b.gsc b/MW3/Xbox/MP/character/mp_character_delta_elite_smg_b.gsc new file mode 100644 index 0000000..276f65f --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_delta_elite_smg_b.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_delta_elite_smg_b.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 30 ms + * Timestamp: 10/27/2023 2:28:10 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_delta_elite_smg_b"); + codescripts\character::attachhead("alias_delta_elite_heads_longsleeves",xmodelalias\alias_delta_elite_heads_longsleeves::main()); + self setviewmodel("viewhands_delta"); + self.voice = "delta"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_delta_elite_smg_b"); + codescripts\character::func_19F4(xmodelalias\alias_delta_elite_heads_longsleeves::main()); + precachemodel("viewhands_delta"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_delta_elite_sniper.gsc b/MW3/Xbox/MP/character/mp_character_delta_elite_sniper.gsc new file mode 100644 index 0000000..a573462 --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_delta_elite_sniper.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_delta_elite_sniper.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 30 ms + * Timestamp: 10/27/2023 2:28:11 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_ally_delta_sniper"); + self attach("head_ally_delta_sniper","",1); + self.headmodel = "head_ally_delta_sniper"; + self setviewmodel("viewhands_delta"); + self.voice = "delta"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_ally_delta_sniper"); + precachemodel("head_ally_delta_sniper"); + precachemodel("viewhands_delta"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_gign_paris_assault.gsc b/MW3/Xbox/MP/character/mp_character_gign_paris_assault.gsc new file mode 100644 index 0000000..afca9ee --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_gign_paris_assault.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_gign_paris_assault.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 29 ms + * Timestamp: 10/27/2023 2:28:14 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_gign_paris_assault"); + self attach("head_gign_c","",1); + self.headmodel = "head_gign_c"; + self setviewmodel("viewhands_sas"); + self.voice = "french"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_gign_paris_assault"); + precachemodel("head_gign_c"); + precachemodel("viewhands_sas"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_gign_paris_lmg.gsc b/MW3/Xbox/MP/character/mp_character_gign_paris_lmg.gsc new file mode 100644 index 0000000..9360ead --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_gign_paris_lmg.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_gign_paris_lmg.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 28 ms + * Timestamp: 10/27/2023 2:28:14 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_gign_paris_lmg"); + self attach("head_gign_d","",1); + self.headmodel = "head_gign_d"; + self setviewmodel("viewhands_sas"); + self.voice = "french"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_gign_paris_lmg"); + precachemodel("head_gign_d"); + precachemodel("viewhands_sas"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_gign_paris_riot.gsc b/MW3/Xbox/MP/character/mp_character_gign_paris_riot.gsc new file mode 100644 index 0000000..8a58fae --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_gign_paris_riot.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_gign_paris_riot.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 29 ms + * Timestamp: 10/27/2023 2:28:15 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_gign_paris_lmg"); + self attach("head_gign_a","",1); + self.headmodel = "head_gign_a"; + self setviewmodel("viewhands_sas"); + self.voice = "french"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_gign_paris_lmg"); + precachemodel("head_gign_a"); + precachemodel("viewhands_sas"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_gign_paris_shotgun.gsc b/MW3/Xbox/MP/character/mp_character_gign_paris_shotgun.gsc new file mode 100644 index 0000000..57adc03 --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_gign_paris_shotgun.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_gign_paris_shotgun.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 29 ms + * Timestamp: 10/27/2023 2:28:15 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_gign_paris_shotgun"); + self attach("head_gign_b","",1); + self.headmodel = "head_gign_b"; + self setviewmodel("viewhands_sas"); + self.voice = "french"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_gign_paris_shotgun"); + precachemodel("head_gign_b"); + precachemodel("viewhands_sas"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_gign_paris_smg.gsc b/MW3/Xbox/MP/character/mp_character_gign_paris_smg.gsc new file mode 100644 index 0000000..3d6196a --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_gign_paris_smg.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_gign_paris_smg.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 29 ms + * Timestamp: 10/27/2023 2:28:15 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_gign_paris_smg"); + self attach("head_gign_saber_gasmask","",1); + self.headmodel = "head_gign_saber_gasmask"; + self setviewmodel("viewhands_sas"); + self.voice = "french"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_gign_paris_smg"); + precachemodel("head_gign_saber_gasmask"); + precachemodel("viewhands_sas"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_op_ghillie_arctic.gsc b/MW3/Xbox/MP/character/mp_character_op_ghillie_arctic.gsc new file mode 100644 index 0000000..e192523 --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_op_ghillie_arctic.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_op_ghillie_arctic.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 28 ms + * Timestamp: 10/27/2023 2:29:23 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_opforce_ghillie_arctic_sniper"); + self attach("head_opforce_russian_arctic_sniper","",1); + self.headmodel = "head_opforce_russian_arctic_sniper"; + self setviewmodel("viewhands_iw5_ghillie_arctic"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_opforce_ghillie_arctic_sniper"); + precachemodel("head_opforce_russian_arctic_sniper"); + precachemodel("viewhands_iw5_ghillie_arctic"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_op_ghillie_desert.gsc b/MW3/Xbox/MP/character/mp_character_op_ghillie_desert.gsc new file mode 100644 index 0000000..e6d7575 --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_op_ghillie_desert.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_op_ghillie_desert.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 29 ms + * Timestamp: 10/27/2023 2:29:22 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_opforce_ghillie_desert_sniper"); + self attach("head_opforce_russian_air_sniper","",1); + self.headmodel = "head_opforce_russian_air_sniper"; + self setviewmodel("viewhands_iw5_ghillie_desert"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_opforce_ghillie_desert_sniper"); + precachemodel("head_opforce_russian_air_sniper"); + precachemodel("viewhands_iw5_ghillie_desert"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_op_ghillie_forest.gsc b/MW3/Xbox/MP/character/mp_character_op_ghillie_forest.gsc new file mode 100644 index 0000000..9d83130 --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_op_ghillie_forest.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_op_ghillie_forest.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 27 ms + * Timestamp: 10/27/2023 2:29:24 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_opforce_ghillie_woodland_sniper"); + self attach("head_opforce_russian_woodland_sniper","",1); + self.headmodel = "head_opforce_russian_woodland_sniper"; + self setviewmodel("viewhands_iw5_ghillie_woodland"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_opforce_ghillie_woodland_sniper"); + precachemodel("head_opforce_russian_woodland_sniper"); + precachemodel("viewhands_iw5_ghillie_woodland"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_op_ghillie_militia.gsc b/MW3/Xbox/MP/character/mp_character_op_ghillie_militia.gsc new file mode 100644 index 0000000..7691e25 --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_op_ghillie_militia.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_op_ghillie_militia.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 27 ms + * Timestamp: 10/27/2023 2:29:25 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_opforce_ghillie_africa_militia_sniper"); + self attach("head_ghillie_africa_militia_sniper","",1); + self.headmodel = "head_ghillie_africa_militia_sniper"; + self setviewmodel("viewhands_african_militia"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_opforce_ghillie_africa_militia_sniper"); + precachemodel("head_ghillie_africa_militia_sniper"); + precachemodel("viewhands_african_militia"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_op_ghillie_urban.gsc b/MW3/Xbox/MP/character/mp_character_op_ghillie_urban.gsc new file mode 100644 index 0000000..323cbfd --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_op_ghillie_urban.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_op_ghillie_urban.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 26 ms + * Timestamp: 10/27/2023 2:29:23 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_opforce_ghillie_urban_sniper"); + self attach("head_opforce_russian_urban_sniper","",1); + self.headmodel = "head_opforce_russian_urban_sniper"; + self setviewmodel("viewhands_iw5_ghillie_urban"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_opforce_ghillie_urban_sniper"); + precachemodel("head_opforce_russian_urban_sniper"); + precachemodel("viewhands_iw5_ghillie_urban"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_opforce_air_assault.gsc b/MW3/Xbox/MP/character/mp_character_opforce_air_assault.gsc new file mode 100644 index 0000000..342f7c0 --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_opforce_air_assault.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_opforce_air_assault.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 28 ms + * Timestamp: 10/27/2023 2:28:19 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_russian_military_assault_a_airborne"); + self attach("head_russian_military_aa","",1); + self.headmodel = "head_russian_military_aa"; + self setviewmodel("viewhands_russian_b"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_russian_military_assault_a_airborne"); + precachemodel("head_russian_military_aa"); + precachemodel("viewhands_russian_b"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_opforce_air_lmg.gsc b/MW3/Xbox/MP/character/mp_character_opforce_air_lmg.gsc new file mode 100644 index 0000000..9468b77 --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_opforce_air_lmg.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_opforce_air_lmg.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 28 ms + * Timestamp: 10/27/2023 2:28:20 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_russian_military_lmg_a_airborne"); + self attach("head_russian_military_bb","",1); + self.headmodel = "head_russian_military_bb"; + self setviewmodel("viewhands_russian_b"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_russian_military_lmg_a_airborne"); + precachemodel("head_russian_military_bb"); + precachemodel("viewhands_russian_b"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_opforce_air_shotgun.gsc b/MW3/Xbox/MP/character/mp_character_opforce_air_shotgun.gsc new file mode 100644 index 0000000..79fe25e --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_opforce_air_shotgun.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_opforce_air_shotgun.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 37 ms + * Timestamp: 10/27/2023 2:28:20 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_russian_military_shotgun_a_airborne"); + self attach("head_russian_military_d","",1); + self.headmodel = "head_russian_military_d"; + self setviewmodel("viewhands_russian_b"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_russian_military_shotgun_a_airborne"); + precachemodel("head_russian_military_d"); + precachemodel("viewhands_russian_b"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_opforce_air_smg.gsc b/MW3/Xbox/MP/character/mp_character_opforce_air_smg.gsc new file mode 100644 index 0000000..b85a168 --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_opforce_air_smg.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_opforce_air_smg.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 28 ms + * Timestamp: 10/27/2023 2:28:21 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_russian_military_smg_a_airborne"); + self attach("head_russian_military_f","",1); + self.headmodel = "head_russian_military_f"; + self setviewmodel("viewhands_russian_b"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_russian_military_smg_a_airborne"); + precachemodel("head_russian_military_f"); + precachemodel("viewhands_russian_b"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_opforce_air_sniper.gsc b/MW3/Xbox/MP/character/mp_character_opforce_air_sniper.gsc new file mode 100644 index 0000000..f61dff4 --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_opforce_air_sniper.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_opforce_air_sniper.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 28 ms + * Timestamp: 10/27/2023 2:28:21 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_opforce_russian_air_sniper"); + self attach("head_opforce_russian_air_sniper","",1); + self.headmodel = "head_opforce_russian_air_sniper"; + self setviewmodel("viewhands_russian_b"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_opforce_russian_air_sniper"); + precachemodel("head_opforce_russian_air_sniper"); + precachemodel("viewhands_russian_b"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_opforce_hench_assault_a.gsc b/MW3/Xbox/MP/character/mp_character_opforce_hench_assault_a.gsc new file mode 100644 index 0000000..53e71f3 --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_opforce_hench_assault_a.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_opforce_hench_assault_a.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 30 ms + * Timestamp: 10/27/2023 2:28:47 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_henchmen_assault_a"); + codescripts\character::attachhead("alias_henchmen_heads_mp",xmodelalias\alias_henchmen_heads_mp::main()); + self setviewmodel("viewhands_henchmen"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_henchmen_assault_a"); + codescripts\character::func_19F4(xmodelalias\alias_henchmen_heads_mp::main()); + precachemodel("viewhands_henchmen"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_opforce_hench_assault_b.gsc b/MW3/Xbox/MP/character/mp_character_opforce_hench_assault_b.gsc new file mode 100644 index 0000000..e261f0a --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_opforce_hench_assault_b.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_opforce_hench_assault_b.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 28 ms + * Timestamp: 10/27/2023 2:28:48 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_henchmen_assault_b"); + codescripts\character::attachhead("alias_henchmen_heads_mp",xmodelalias\alias_henchmen_heads_mp::main()); + self setviewmodel("viewhands_henchmen"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_henchmen_assault_b"); + codescripts\character::func_19F4(xmodelalias\alias_henchmen_heads_mp::main()); + precachemodel("viewhands_henchmen"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_opforce_hench_assault_c.gsc b/MW3/Xbox/MP/character/mp_character_opforce_hench_assault_c.gsc new file mode 100644 index 0000000..d107e1a --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_opforce_hench_assault_c.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_opforce_hench_assault_c.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 30 ms + * Timestamp: 10/27/2023 2:28:48 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_henchmen_assault_c"); + codescripts\character::attachhead("alias_henchmen_heads_mp",xmodelalias\alias_henchmen_heads_mp::main()); + self setviewmodel("viewhands_henchmen"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_henchmen_assault_c"); + codescripts\character::func_19F4(xmodelalias\alias_henchmen_heads_mp::main()); + precachemodel("viewhands_henchmen"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_opforce_hench_assault_d.gsc b/MW3/Xbox/MP/character/mp_character_opforce_hench_assault_d.gsc new file mode 100644 index 0000000..ed40574 --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_opforce_hench_assault_d.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_opforce_hench_assault_d.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 30 ms + * Timestamp: 10/27/2023 2:28:48 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_henchmen_assault_d"); + codescripts\character::attachhead("alias_henchmen_heads_mp",xmodelalias\alias_henchmen_heads_mp::main()); + self setviewmodel("viewhands_henchmen"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_henchmen_assault_d"); + codescripts\character::func_19F4(xmodelalias\alias_henchmen_heads_mp::main()); + precachemodel("viewhands_henchmen"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_opforce_hench_lmg_a.gsc b/MW3/Xbox/MP/character/mp_character_opforce_hench_lmg_a.gsc new file mode 100644 index 0000000..fda47a5 --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_opforce_hench_lmg_a.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_opforce_hench_lmg_a.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 28 ms + * Timestamp: 10/27/2023 2:28:49 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_henchmen_lmg_a"); + codescripts\character::attachhead("alias_henchmen_heads_mp",xmodelalias\alias_henchmen_heads_mp::main()); + self setviewmodel("viewhands_henchmen"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_henchmen_lmg_a"); + codescripts\character::func_19F4(xmodelalias\alias_henchmen_heads_mp::main()); + precachemodel("viewhands_henchmen"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_opforce_hench_lmg_b.gsc b/MW3/Xbox/MP/character/mp_character_opforce_hench_lmg_b.gsc new file mode 100644 index 0000000..fb5a0bd --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_opforce_hench_lmg_b.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_opforce_hench_lmg_b.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 27 ms + * Timestamp: 10/27/2023 2:28:49 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_henchmen_lmg_b"); + codescripts\character::attachhead("alias_henchmen_heads_mp",xmodelalias\alias_henchmen_heads_mp::main()); + self setviewmodel("viewhands_henchmen"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_henchmen_lmg_b"); + codescripts\character::func_19F4(xmodelalias\alias_henchmen_heads_mp::main()); + precachemodel("viewhands_henchmen"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_opforce_hench_shgn_a.gsc b/MW3/Xbox/MP/character/mp_character_opforce_hench_shgn_a.gsc new file mode 100644 index 0000000..e3c76ab --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_opforce_hench_shgn_a.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_opforce_hench_shgn_a.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 29 ms + * Timestamp: 10/27/2023 2:28:50 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_henchmen_shotgun_a"); + codescripts\character::attachhead("alias_henchmen_heads_mp",xmodelalias\alias_henchmen_heads_mp::main()); + self setviewmodel("viewhands_henchmen"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_henchmen_shotgun_a"); + codescripts\character::func_19F4(xmodelalias\alias_henchmen_heads_mp::main()); + precachemodel("viewhands_henchmen"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_opforce_hench_shgn_b.gsc b/MW3/Xbox/MP/character/mp_character_opforce_hench_shgn_b.gsc new file mode 100644 index 0000000..f9215de --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_opforce_hench_shgn_b.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_opforce_hench_shgn_b.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 32 ms + * Timestamp: 10/27/2023 2:28:50 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_henchmen_shotgun_b"); + codescripts\character::attachhead("alias_henchmen_heads_mp",xmodelalias\alias_henchmen_heads_mp::main()); + self setviewmodel("viewhands_henchmen"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_henchmen_shotgun_b"); + codescripts\character::func_19F4(xmodelalias\alias_henchmen_heads_mp::main()); + precachemodel("viewhands_henchmen"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_opforce_hench_smg_a.gsc b/MW3/Xbox/MP/character/mp_character_opforce_hench_smg_a.gsc new file mode 100644 index 0000000..9eb14cf --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_opforce_hench_smg_a.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_opforce_hench_smg_a.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 28 ms + * Timestamp: 10/27/2023 2:28:50 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_henchmen_smg_a"); + codescripts\character::attachhead("alias_henchmen_heads_mp",xmodelalias\alias_henchmen_heads_mp::main()); + self setviewmodel("viewhands_henchmen"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_henchmen_smg_a"); + codescripts\character::func_19F4(xmodelalias\alias_henchmen_heads_mp::main()); + precachemodel("viewhands_henchmen"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_opforce_hench_smg_b.gsc b/MW3/Xbox/MP/character/mp_character_opforce_hench_smg_b.gsc new file mode 100644 index 0000000..e2c0794 --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_opforce_hench_smg_b.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_opforce_hench_smg_b.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 29 ms + * Timestamp: 10/27/2023 2:28:51 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_henchmen_smg_b"); + codescripts\character::attachhead("alias_henchmen_heads_mp",xmodelalias\alias_henchmen_heads_mp::main()); + self setviewmodel("viewhands_henchmen"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_henchmen_smg_b"); + codescripts\character::func_19F4(xmodelalias\alias_henchmen_heads_mp::main()); + precachemodel("viewhands_henchmen"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_opforce_hench_sniper.gsc b/MW3/Xbox/MP/character/mp_character_opforce_hench_sniper.gsc new file mode 100644 index 0000000..2175eb6 --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_opforce_hench_sniper.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_opforce_hench_sniper.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 29 ms + * Timestamp: 10/27/2023 2:28:51 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_opforce_henchmen_sniper"); + self attach("head_opforce_henchmen_sniper","",1); + self.headmodel = "head_opforce_henchmen_sniper"; + self setviewmodel("viewhands_henchmen"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_opforce_henchmen_sniper"); + precachemodel("head_opforce_henchmen_sniper"); + precachemodel("viewhands_henchmen"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_opforce_snow_assault.gsc b/MW3/Xbox/MP/character/mp_character_opforce_snow_assault.gsc new file mode 100644 index 0000000..c86e45d --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_opforce_snow_assault.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_opforce_snow_assault.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 28 ms + * Timestamp: 10/27/2023 2:28:22 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_russian_military_assault_a_arctic"); + codescripts\character::attachhead("alias_russian_military_arctic_heads",xmodelalias\alias_russian_military_arctic_heads::main()); + self setviewmodel("viewhands_russian_d"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_russian_military_assault_a_arctic"); + codescripts\character::func_19F4(xmodelalias\alias_russian_military_arctic_heads::main()); + precachemodel("viewhands_russian_d"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_opforce_snow_lmg.gsc b/MW3/Xbox/MP/character/mp_character_opforce_snow_lmg.gsc new file mode 100644 index 0000000..5c0f658 --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_opforce_snow_lmg.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_opforce_snow_lmg.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 29 ms + * Timestamp: 10/27/2023 2:28:22 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_russian_military_lmg_a_arctic"); + codescripts\character::attachhead("alias_russian_military_arctic_heads",xmodelalias\alias_russian_military_arctic_heads::main()); + self setviewmodel("viewhands_russian_d"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_russian_military_lmg_a_arctic"); + codescripts\character::func_19F4(xmodelalias\alias_russian_military_arctic_heads::main()); + precachemodel("viewhands_russian_d"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_opforce_snow_shotgun.gsc b/MW3/Xbox/MP/character/mp_character_opforce_snow_shotgun.gsc new file mode 100644 index 0000000..91682cd --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_opforce_snow_shotgun.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_opforce_snow_shotgun.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 29 ms + * Timestamp: 10/27/2023 2:28:23 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_russian_military_shotgun_a_arctic"); + codescripts\character::attachhead("alias_russian_military_arctic_heads",xmodelalias\alias_russian_military_arctic_heads::main()); + self setviewmodel("viewhands_russian_d"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_russian_military_shotgun_a_arctic"); + codescripts\character::func_19F4(xmodelalias\alias_russian_military_arctic_heads::main()); + precachemodel("viewhands_russian_d"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_opforce_snow_smg.gsc b/MW3/Xbox/MP/character/mp_character_opforce_snow_smg.gsc new file mode 100644 index 0000000..f0686d4 --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_opforce_snow_smg.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_opforce_snow_smg.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 28 ms + * Timestamp: 10/27/2023 2:28:23 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_russian_military_smg_a_arctic"); + self attach("head_russian_military_f","",1); + self.headmodel = "head_russian_military_f"; + self setviewmodel("viewhands_russian_d"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_russian_military_smg_a_arctic"); + precachemodel("head_russian_military_f"); + precachemodel("viewhands_russian_d"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_opforce_snow_sniper.gsc b/MW3/Xbox/MP/character/mp_character_opforce_snow_sniper.gsc new file mode 100644 index 0000000..3fdeae8 --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_opforce_snow_sniper.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_opforce_snow_sniper.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 28 ms + * Timestamp: 10/27/2023 2:28:24 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_opforce_russian_arctic_sniper"); + self attach("head_opforce_russian_arctic_sniper","",1); + self.headmodel = "head_opforce_russian_arctic_sniper"; + self setviewmodel("viewhands_russian_d"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_opforce_russian_arctic_sniper"); + precachemodel("head_opforce_russian_arctic_sniper"); + precachemodel("viewhands_russian_d"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_opforce_urban_assault.gsc b/MW3/Xbox/MP/character/mp_character_opforce_urban_assault.gsc new file mode 100644 index 0000000..5b677ec --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_opforce_urban_assault.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_opforce_urban_assault.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 28 ms + * Timestamp: 10/27/2023 2:28:24 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_russian_military_assault_a"); + self attach("head_russian_military_aa","",1); + self.headmodel = "head_russian_military_aa"; + self setviewmodel("viewhands_russian_a"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_russian_military_assault_a"); + precachemodel("head_russian_military_aa"); + precachemodel("viewhands_russian_a"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_opforce_urban_lmg.gsc b/MW3/Xbox/MP/character/mp_character_opforce_urban_lmg.gsc new file mode 100644 index 0000000..326346a --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_opforce_urban_lmg.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_opforce_urban_lmg.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 33 ms + * Timestamp: 10/27/2023 2:28:24 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_russian_military_lmg_a"); + self attach("head_russian_military_b","",1); + self.headmodel = "head_russian_military_b"; + self setviewmodel("viewhands_russian_a"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_russian_military_lmg_a"); + precachemodel("head_russian_military_b"); + precachemodel("viewhands_russian_a"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_opforce_urban_shotgun.gsc b/MW3/Xbox/MP/character/mp_character_opforce_urban_shotgun.gsc new file mode 100644 index 0000000..0bb6b59 --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_opforce_urban_shotgun.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_opforce_urban_shotgun.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 28 ms + * Timestamp: 10/27/2023 2:28:25 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_russian_military_shotgun_a"); + self attach("head_russian_military_dd","",1); + self.headmodel = "head_russian_military_dd"; + self setviewmodel("viewhands_russian_a"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_russian_military_shotgun_a"); + precachemodel("head_russian_military_dd"); + precachemodel("viewhands_russian_a"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_opforce_urban_smg.gsc b/MW3/Xbox/MP/character/mp_character_opforce_urban_smg.gsc new file mode 100644 index 0000000..99ee24c --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_opforce_urban_smg.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_opforce_urban_smg.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 28 ms + * Timestamp: 10/27/2023 2:28:25 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_russian_military_smg_a"); + self attach("head_russian_military_f","",1); + self.headmodel = "head_russian_military_f"; + self setviewmodel("viewhands_russian_a"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_russian_military_smg_a"); + precachemodel("head_russian_military_f"); + precachemodel("viewhands_russian_a"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_opforce_urban_sniper.gsc b/MW3/Xbox/MP/character/mp_character_opforce_urban_sniper.gsc new file mode 100644 index 0000000..9e4cec4 --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_opforce_urban_sniper.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_opforce_urban_sniper.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 31 ms + * Timestamp: 10/27/2023 2:28:26 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_opforce_russian_urban_sniper"); + self attach("head_opforce_russian_urban_sniper","",1); + self.headmodel = "head_opforce_russian_urban_sniper"; + self setviewmodel("viewhands_russian_a"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_opforce_russian_urban_sniper"); + precachemodel("head_opforce_russian_urban_sniper"); + precachemodel("viewhands_russian_a"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_opforce_woods_assault.gsc b/MW3/Xbox/MP/character/mp_character_opforce_woods_assault.gsc new file mode 100644 index 0000000..c808fed --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_opforce_woods_assault.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_opforce_woods_assault.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 29 ms + * Timestamp: 10/27/2023 2:28:26 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_russian_military_assault_a_woodland"); + self attach("head_russian_military_b","",1); + self.headmodel = "head_russian_military_b"; + self setviewmodel("viewhands_russian_c"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_russian_military_assault_a_woodland"); + precachemodel("head_russian_military_b"); + precachemodel("viewhands_russian_c"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_opforce_woods_lmg.gsc b/MW3/Xbox/MP/character/mp_character_opforce_woods_lmg.gsc new file mode 100644 index 0000000..e013b42 --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_opforce_woods_lmg.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_opforce_woods_lmg.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 30 ms + * Timestamp: 10/27/2023 2:28:26 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_russian_military_lmg_a_woodland"); + self attach("head_russian_military_a","",1); + self.headmodel = "head_russian_military_a"; + self setviewmodel("viewhands_russian_c"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_russian_military_lmg_a_woodland"); + precachemodel("head_russian_military_a"); + precachemodel("viewhands_russian_c"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_opforce_woods_shotgun.gsc b/MW3/Xbox/MP/character/mp_character_opforce_woods_shotgun.gsc new file mode 100644 index 0000000..4bac85d --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_opforce_woods_shotgun.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_opforce_woods_shotgun.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 27 ms + * Timestamp: 10/27/2023 2:28:35 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_russian_military_shotgun_a_woodland"); + self attach("head_russian_military_cc","",1); + self.headmodel = "head_russian_military_cc"; + self setviewmodel("viewhands_russian_c"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_russian_military_shotgun_a_woodland"); + precachemodel("head_russian_military_cc"); + precachemodel("viewhands_russian_c"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_opforce_woods_smg.gsc b/MW3/Xbox/MP/character/mp_character_opforce_woods_smg.gsc new file mode 100644 index 0000000..cbc720d --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_opforce_woods_smg.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_opforce_woods_smg.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 31 ms + * Timestamp: 10/27/2023 2:28:35 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_russian_military_smg_a_woodland"); + self attach("head_russian_military_e","",1); + self.headmodel = "head_russian_military_e"; + self setviewmodel("viewhands_russian_c"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_russian_military_smg_a_woodland"); + precachemodel("head_russian_military_e"); + precachemodel("viewhands_russian_c"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_opforce_woods_sniper.gsc b/MW3/Xbox/MP/character/mp_character_opforce_woods_sniper.gsc new file mode 100644 index 0000000..446169e --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_opforce_woods_sniper.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_opforce_woods_sniper.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 30 ms + * Timestamp: 10/27/2023 2:28:35 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_opforce_russian_woodland_sniper"); + self attach("head_opforce_russian_woodland_sniper","",1); + self.headmodel = "head_opforce_russian_woodland_sniper"; + self setviewmodel("viewhands_russian_c"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_opforce_russian_woodland_sniper"); + precachemodel("head_opforce_russian_woodland_sniper"); + precachemodel("viewhands_russian_c"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_pmc_africa_assault_a.gsc b/MW3/Xbox/MP/character/mp_character_pmc_africa_assault_a.gsc new file mode 100644 index 0000000..60a6b43 --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_pmc_africa_assault_a.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_pmc_africa_assault_a.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 29 ms + * Timestamp: 10/27/2023 2:28:16 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_pmc_africa_assault_a"); + codescripts\character::attachhead("alias_pmc_africa_heads",xmodelalias\alias_pmc_africa_heads::main()); + self setviewmodel("viewhands_pmc"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_pmc_africa_assault_a"); + codescripts\character::func_19F4(xmodelalias\alias_pmc_africa_heads::main()); + precachemodel("viewhands_pmc"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_pmc_africa_assault_aa.gsc b/MW3/Xbox/MP/character/mp_character_pmc_africa_assault_aa.gsc new file mode 100644 index 0000000..15a3cf3 --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_pmc_africa_assault_aa.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_pmc_africa_assault_aa.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 29 ms + * Timestamp: 10/27/2023 2:28:17 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_pmc_africa_assault_aa"); + codescripts\character::attachhead("alias_pmc_africa_heads",xmodelalias\alias_pmc_africa_heads::main()); + self setviewmodel("viewhands_pmc"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_pmc_africa_assault_aa"); + codescripts\character::func_19F4(xmodelalias\alias_pmc_africa_heads::main()); + precachemodel("viewhands_pmc"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_pmc_africa_lmg_a.gsc b/MW3/Xbox/MP/character/mp_character_pmc_africa_lmg_a.gsc new file mode 100644 index 0000000..a1253bf --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_pmc_africa_lmg_a.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_pmc_africa_lmg_a.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 28 ms + * Timestamp: 10/27/2023 2:28:17 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_pmc_africa_lmg_a"); + codescripts\character::attachhead("alias_pmc_africa_heads",xmodelalias\alias_pmc_africa_heads::main()); + self setviewmodel("viewhands_pmc"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_pmc_africa_lmg_a"); + codescripts\character::func_19F4(xmodelalias\alias_pmc_africa_heads::main()); + precachemodel("viewhands_pmc"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_pmc_africa_lmg_aa.gsc b/MW3/Xbox/MP/character/mp_character_pmc_africa_lmg_aa.gsc new file mode 100644 index 0000000..d6e9460 --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_pmc_africa_lmg_aa.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_pmc_africa_lmg_aa.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 30 ms + * Timestamp: 10/27/2023 2:28:17 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_pmc_africa_lmg_aa"); + codescripts\character::attachhead("alias_pmc_africa_heads",xmodelalias\alias_pmc_africa_heads::main()); + self setviewmodel("viewhands_pmc"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_pmc_africa_lmg_aa"); + codescripts\character::func_19F4(xmodelalias\alias_pmc_africa_heads::main()); + precachemodel("viewhands_pmc"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_pmc_africa_shotgun_a.gsc b/MW3/Xbox/MP/character/mp_character_pmc_africa_shotgun_a.gsc new file mode 100644 index 0000000..5208138 --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_pmc_africa_shotgun_a.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_pmc_africa_shotgun_a.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 27 ms + * Timestamp: 10/27/2023 2:28:19 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_pmc_africa_shotgun_a"); + codescripts\character::attachhead("alias_pmc_africa_heads",xmodelalias\alias_pmc_africa_heads::main()); + self setviewmodel("viewhands_pmc"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_pmc_africa_shotgun_a"); + codescripts\character::func_19F4(xmodelalias\alias_pmc_africa_heads::main()); + precachemodel("viewhands_pmc"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_pmc_africa_smg_a.gsc b/MW3/Xbox/MP/character/mp_character_pmc_africa_smg_a.gsc new file mode 100644 index 0000000..7e7434c --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_pmc_africa_smg_a.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_pmc_africa_smg_a.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 30 ms + * Timestamp: 10/27/2023 2:28:18 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_pmc_africa_smg_a"); + codescripts\character::attachhead("alias_pmc_africa_heads",xmodelalias\alias_pmc_africa_heads::main()); + self setviewmodel("viewhands_pmc"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_pmc_africa_smg_a"); + codescripts\character::func_19F4(xmodelalias\alias_pmc_africa_heads::main()); + precachemodel("viewhands_pmc"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_pmc_africa_smg_aa.gsc b/MW3/Xbox/MP/character/mp_character_pmc_africa_smg_aa.gsc new file mode 100644 index 0000000..70567ce --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_pmc_africa_smg_aa.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_pmc_africa_smg_aa.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 29 ms + * Timestamp: 10/27/2023 2:28:18 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_pmc_africa_smg_aa"); + codescripts\character::attachhead("alias_pmc_africa_heads",xmodelalias\alias_pmc_africa_heads::main()); + self setviewmodel("viewhands_pmc"); + self.voice = "russian"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_pmc_africa_smg_aa"); + codescripts\character::func_19F4(xmodelalias\alias_pmc_africa_heads::main()); + precachemodel("viewhands_pmc"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_pmc_africa_sniper.gsc b/MW3/Xbox/MP/character/mp_character_pmc_africa_sniper.gsc new file mode 100644 index 0000000..e0620c2 --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_pmc_africa_sniper.gsc @@ -0,0 +1,24 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_pmc_africa_sniper.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 32 ms + * Timestamp: 10/27/2023 2:28:19 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_ally_pmc_sniper"); + self setviewmodel("viewhands_pmc"); + self.voice = "taskforce"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_ally_pmc_sniper"); + precachemodel("viewhands_pmc"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_sas_urban_assault.gsc b/MW3/Xbox/MP/character/mp_character_sas_urban_assault.gsc new file mode 100644 index 0000000..c0f30d3 --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_sas_urban_assault.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_sas_urban_assault.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 28 ms + * Timestamp: 10/27/2023 2:28:12 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_sas_urban_assault"); + codescripts\character::attachhead("alias_sas_heads",xmodelalias\alias_sas_heads::main()); + self setviewmodel("viewhands_sas"); + self.voice = "british"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_sas_urban_assault"); + codescripts\character::func_19F4(xmodelalias\alias_sas_heads::main()); + precachemodel("viewhands_sas"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_sas_urban_lmg.gsc b/MW3/Xbox/MP/character/mp_character_sas_urban_lmg.gsc new file mode 100644 index 0000000..6ce7254 --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_sas_urban_lmg.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_sas_urban_lmg.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 32 ms + * Timestamp: 10/27/2023 2:28:12 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_sas_urban_lmg"); + codescripts\character::attachhead("alias_sas_heads",xmodelalias\alias_sas_heads::main()); + self setviewmodel("viewhands_sas"); + self.voice = "british"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_sas_urban_lmg"); + codescripts\character::func_19F4(xmodelalias\alias_sas_heads::main()); + precachemodel("viewhands_sas"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_sas_urban_shotgun.gsc b/MW3/Xbox/MP/character/mp_character_sas_urban_shotgun.gsc new file mode 100644 index 0000000..ea1c37c --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_sas_urban_shotgun.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_sas_urban_shotgun.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 29 ms + * Timestamp: 10/27/2023 2:28:13 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_sas_urban_shotgun"); + codescripts\character::attachhead("alias_sas_heads",xmodelalias\alias_sas_heads::main()); + self setviewmodel("viewhands_sas"); + self.voice = "british"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_sas_urban_shotgun"); + codescripts\character::func_19F4(xmodelalias\alias_sas_heads::main()); + precachemodel("viewhands_sas"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_sas_urban_smg.gsc b/MW3/Xbox/MP/character/mp_character_sas_urban_smg.gsc new file mode 100644 index 0000000..8474740 --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_sas_urban_smg.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_sas_urban_smg.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 30 ms + * Timestamp: 10/27/2023 2:28:13 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_sas_urban_smg"); + codescripts\character::attachhead("alias_sas_heads",xmodelalias\alias_sas_heads::main()); + self setviewmodel("viewhands_sas"); + self.voice = "british"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_sas_urban_smg"); + codescripts\character::func_19F4(xmodelalias\alias_sas_heads::main()); + precachemodel("viewhands_sas"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/character/mp_character_sas_urban_sniper.gsc b/MW3/Xbox/MP/character/mp_character_sas_urban_sniper.gsc new file mode 100644 index 0000000..c765fba --- /dev/null +++ b/MW3/Xbox/MP/character/mp_character_sas_urban_sniper.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: character\mp_character_sas_urban_sniper.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 39 ms + * Timestamp: 10/27/2023 2:28:14 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self setmodel("mp_body_ally_sas_sniper"); + self attach("head_ally_sas_sniper","",1); + self.headmodel = "head_ally_sas_sniper"; + self setviewmodel("viewhands_sas"); + self.voice = "british"; +} + +//Function Number: 2 +precache() +{ + precachemodel("mp_body_ally_sas_sniper"); + precachemodel("head_ally_sas_sniper"); + precachemodel("viewhands_sas"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/codescripts/character.gsc b/MW3/Xbox/MP/codescripts/character.gsc new file mode 100644 index 0000000..243460a --- /dev/null +++ b/MW3/Xbox/MP/codescripts/character.gsc @@ -0,0 +1,258 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: codescripts\character.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 13 + * Decompile Time: 193 ms + * Timestamp: 10/27/2023 2:29:18 AM +*******************************************************************/ + +//Function Number: 1 +func_19F3(param_00) +{ + self setmodel(param_00[randomint(param_00.size)]); +} + +//Function Number: 2 +func_19F4(param_00) +{ + for(var_01 = 0;var_01 < param_00.size;var_01++) + { + precachemodel(param_00[var_01]); + } +} + +//Function Number: 3 +attachhead(param_00,param_01) +{ + if(!isdefined(level.var_19F6)) + { + level.var_19F6 = []; + } + + if(!isdefined(level.var_19F6[param_00])) + { + level.var_19F6[param_00] = randomint(param_01.size); + } + + var_02 = level.var_19F6[param_00] + 1 % param_01.size; + if(isdefined(self.script_char_index)) + { + var_02 = self.script_char_index % param_01.size; + } + + level.var_19F6[param_00] = var_02; + self attach(param_01[var_02],"",1); + self.headmodel = param_01[var_02]; +} + +//Function Number: 4 +func_19F9(param_00,param_01) +{ + if(!isdefined(level.character_hat_index)) + { + level.character_hat_index = []; + } + + if(!isdefined(level.character_hat_index[param_00])) + { + level.character_hat_index[param_00] = randomint(param_01.size); + } + + var_02 = level.character_hat_index[param_00] + 1 % param_01.size; + level.character_hat_index[param_00] = var_02; + self attach(param_01[var_02]); + self.var_ABA = param_01[var_02]; +} + +//Function Number: 5 +func_19FB() +{ + self detachall(); + var_00 = self.var_19FC; + if(!isdefined(var_00)) + { + return; + } + + self.var_19FC = "none"; + self [[ level.putguninhand ]](var_00); +} + +//Function Number: 6 +save() +{ + var_00["gunHand"] = self.var_19FC; + if(isdefined(self.name)) + { + } + else + { + } + + var_01 = self getattachsize(); + for(var_02 = 0;var_02 < var_01;var_02++ = var_41["name"]) + { + var_41["attach"][var_02]["model"] = self getattachmodelname(var_02); + var_41["attach"][var_02]["tag"] = self getattachtagname(var_02); + } + + return var_41; +} + +//Function Number: 7 +load(param_00) +{ + self detachall(); + self.var_19FC = param_00["gunHand"]; + self.anim_guninhand = param_00["gunInHand"]; + self setmodel(param_00["model"]); + self.var_ABA = param_00["hatModel"]; + if(isdefined(param_00["name"])) + { + self.name = param_00["name"]; + } + else + { + } + + var_01 = param_00["attach"]; + var_02 = var_01.size; + for(var_03 = 0;var_03 < var_02;var_03++) + { + self attach(var_01[var_03]["model"],var_01[var_03]["tag"]); + } +} + +//Function Number: 8 +precache(param_00) +{ + if(isdefined(param_00["name"])) + { + } + else + { + } + + precachemodel(param_00["model"]); + var_01 = param_00["attach"]; + var_02 = var_01.size; + for(var_03 = 0;var_03 < var_02;var_03++) + { + precachemodel(var_01[var_03]["model"]); + } +} + +//Function Number: 9 +get_random_character(param_00) +{ + var_01 = strtok(self.classname,"_"); + if(!common_scripts\utility::issp()) + { + if(isdefined(self.pers["modelIndex"]) && self.pers["modelIndex"] < param_00) + { + return self.pers["modelIndex"]; + } + + var_02 = randomint(param_00); + self.pers["modelIndex"] = var_02; + return var_02; + } + else if(var_02.size <= 2) + { + return randomint(var_01); + } + + var_03 = "auto"; + var_02 = undefined; + var_04 = var_01[2]; + if(isdefined(self.script_char_index)) + { + var_03 = self.script_char_index; + } + + if(isdefined(self.var_1A02)) + { + var_05 = "grouped"; + var_02 = "group_" + self.var_1A02; + } + + if(!isdefined(level.character_index_cache)) + { + level.character_index_cache = []; + } + + if(!isdefined(level.character_index_cache[var_04])) + { + level.character_index_cache[var_04] = []; + } + + if(!isdefined(level.character_index_cache[var_04][var_02])) + { + initialize_character_group(var_04,var_02,param_00); + } + + if(!isdefined(var_03)) + { + var_03 = func_1A04(var_04,var_02); + if(!isdefined(var_03)) + { + var_03 = randomint(5000); + } + } + + while(var_03 >= param_00) + { + var_03 = var_03 - param_00; + } + + level.character_index_cache[var_04][var_02][var_03]++; + return var_03; +} + +//Function Number: 10 +func_1A04(param_00,param_01) +{ + var_02 = []; + var_03 = level.character_index_cache[param_00][param_01][0]; + var_02[0] = 0; + for(var_04 = 1;var_04 < level.character_index_cache[param_00][param_01].size;var_04++) + { + if(level.character_index_cache[param_00][param_01][var_04] > var_03) + { + continue; + } + + if(level.character_index_cache[param_00][param_01][var_04] < var_03) + { + var_02 = []; + var_03 = level.character_index_cache[param_00][param_01][var_04]; + } + + var_02[var_02.size] = var_04; + } + + return random(var_02); +} + +//Function Number: 11 +initialize_character_group(param_00,param_01,param_02) +{ + for(var_03 = 0;var_03 < param_02;var_03++) + { + level.character_index_cache[param_00][param_01][var_03] = 0; + } +} + +//Function Number: 12 +get_random_weapon(param_00) +{ + return randomint(param_00); +} + +//Function Number: 13 +random(param_00) +{ + return param_00[randomint(param_00.size)]; +} \ No newline at end of file diff --git a/MW3/Xbox/MP/common_scripts/_artcommon.gsc b/MW3/Xbox/MP/common_scripts/_artcommon.gsc new file mode 100644 index 0000000..f854a69 --- /dev/null +++ b/MW3/Xbox/MP/common_scripts/_artcommon.gsc @@ -0,0 +1,128 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: common_scripts\_artcommon.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 10 + * Decompile Time: 161 ms + * Timestamp: 10/27/2023 2:29:04 AM +*******************************************************************/ + +//Function Number: 1 +artstartvisionfileexport() +{ + common_scripts\utility::fileprint_launcher_start_file(); +} + +//Function Number: 2 +func_1669() +{ + return common_scripts\utility::fileprint_launcher_end_file("\\share\\raw\\vision\\" + level.script + ".vision",1); +} + +//Function Number: 3 +artstartfogfileexport() +{ + common_scripts\utility::fileprint_launcher_start_file(); +} + +//Function Number: 4 +artendfogfileexport() +{ + return common_scripts\utility::fileprint_launcher_end_file("\\share\\raw\\maps\\createart\\" + level.script + "_art.gsc",1); +} + +//Function Number: 5 +artcommonfxprintln(param_00) +{ + common_scripts\utility::fileprint_launcher(param_00); +} + +//Function Number: 6 +func_166D() +{ +} + +//Function Number: 7 +func_166E() +{ + level.fogexphalfplane = getdvarfloat("scr_fog_exp_halfplane"); + level.fognearplane = getdvarfloat("scr_fog_nearplane"); + level.fogcolor = getdvarvector("scr_fog_color"); + level.fogmaxopacity = getdvarfloat("scr_fog_max_opacity"); + level.sunfogenabled = getdvarint("scr_sunFogEnabled"); + level.sunfogcolor = getdvarvector("scr_sunFogColor"); + level.var_1675 = getdvarvector("scr_sunFogDir"); + level.var_1676 = getdvarfloat("scr_sunFogBeginFadeAngle"); + level.sunfogendfadeangle = getdvarfloat("scr_sunFogEndFadeAngle"); + level.sunfogscale = getdvarfloat("scr_sunFogScale"); + level.fogexphalfplane = func_1679(level.fogexphalfplane); + level.fognearplane = func_1679(level.fognearplane); + var_00 = func_1679(level.fogcolor[0]); + var_01 = func_1679(level.fogcolor[1]); + var_02 = func_1679(level.fogcolor[2]); + level.fogcolor = (var_00,var_01,var_02); + level.fogmaxopacity = func_1679(level.fogmaxopacity); + level.sunfogenabled = func_1679(level.sunfogenabled); + var_00 = func_1679(level.sunfogcolor[0]); + var_01 = func_1679(level.sunfogcolor[1]); + var_02 = func_1679(level.sunfogcolor[2]); + level.sunfogcolor = (var_00,var_01,var_02); + var_03 = func_1679(level.var_1675[0]); + var_04 = func_1679(level.var_1675[1]); + var_05 = func_1679(level.var_1675[2]); + level.var_1675 = (var_03,var_04,var_05); + level.var_1676 = func_1679(level.var_1676); + level.sunfogendfadeangle = func_1679(level.sunfogendfadeangle); + level.sunfogscale = func_1679(level.sunfogscale); +} + +//Function Number: 8 +func_1679(param_00) +{ + var_01 = 0.001; + if(param_00 < var_01 && param_00 > var_01 * -1) + { + param_00 = 0; + } + + return param_00; +} + +//Function Number: 9 +updatefogfromscript() +{ + if(!getdvarint("scr_fog_disable")) + { + if(level.sunfogenabled) + { + setexpfog(level.fognearplane,level.fogexphalfplane,level.fogcolor[0],level.fogcolor[1],level.fogcolor[2],level.fogmaxopacity,0,level.sunfogcolor[0],level.sunfogcolor[1],level.sunfogcolor[2],level.var_1675,level.var_1676,level.sunfogendfadeangle,level.sunfogscale); + return; + } + + setexpfog(level.fognearplane,level.fogexphalfplane,level.fogcolor[0],level.fogcolor[1],level.fogcolor[2],level.fogmaxopacity,0); + return; + } + + setexpfog(1215752192,1215752193,0,0,0,0,0); +} + +//Function Number: 10 +artfxprintlnfog() +{ + common_scripts\utility::fileprint_launcher(""); + common_scripts\utility::fileprint_launcher("\t//* Fog section * "); + common_scripts\utility::fileprint_launcher(""); + common_scripts\utility::fileprint_launcher("\tsetDevDvar( \"scr_fog_disable\", \" + getdvarint("scr_fog_disable") + "\" + " );"); + common_scripts\utility::fileprint_launcher(""); + if(!getdvarint("scr_fog_disable")) + { + if(level.sunfogenabled) + { + common_scripts\utility::fileprint_launcher("\tsetExpFog( " + level.fognearplane + ", " + level.fogexphalfplane + ", " + level.fogcolor[0] + ", " + level.fogcolor[1] + ", " + level.fogcolor[2] + ", " + level.fogmaxopacity + ", 0, " + level.sunfogcolor[0] + ", " + level.sunfogcolor[1] + ", " + level.sunfogcolor[2] + ", (" + level.var_1675[0] + ", " + level.var_1675[1] + ", " + level.var_1675[2] + "), " + level.var_1676 + ", " + level.sunfogendfadeangle + ", " + level.sunfogscale + " );"); + return; + } + + common_scripts\utility::fileprint_launcher("\tsetExpFog( " + level.fognearplane + ", " + level.fogexphalfplane + ", " + level.fogcolor[0] + ", " + level.fogcolor[1] + ", " + level.fogcolor[2] + ", " + level.fogmaxopacity + ", 0 );"); + } +} \ No newline at end of file diff --git a/MW3/Xbox/MP/common_scripts/_createfx.gsc b/MW3/Xbox/MP/common_scripts/_createfx.gsc new file mode 100644 index 0000000..93b22e3 --- /dev/null +++ b/MW3/Xbox/MP/common_scripts/_createfx.gsc @@ -0,0 +1,1939 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: common_scripts\_createfx.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 83 + * Decompile Time: 1389 ms + * Timestamp: 10/27/2023 2:29:17 AM +*******************************************************************/ + +//Function Number: 1 +createeffect(param_00,param_01) +{ + var_02 = spawnstruct(); + if(!isdefined(level.createfxent)) + { + level.createfxent = []; + } + + level.createfxent[level.createfxent.size] = var_02; + var_02.v = []; + var_02.v["type"] = param_00; + var_02.v["fxid"] = param_01; + var_02.v["angles"] = (0,0,0); + var_02.v["origin"] = (0,0,0); + var_02.drawn = 1; + if(isdefined(param_01) && isdefined(level.createfxbyfxid)) + { + var_03 = level.createfxbyfxid[param_01]; + if(!isdefined(var_03)) + { + var_03 = []; + } + + level.createfxbyfxid[var_02] = var_41; + } + + return var_03; +} + +//Function Number: 2 +getloopeffectdelaydefault() +{ + return 0.5; +} + +//Function Number: 3 +getoneshoteffectdelaydefault() +{ + return -15; +} + +//Function Number: 4 +getexploderdelaydefault() +{ + return 0; +} + +//Function Number: 5 +getintervalsounddelaymindefault() +{ + return 0.75; +} + +//Function Number: 6 +getintervalsounddelaymaxdefault() +{ + return 2; +} + +//Function Number: 7 +add_effect(param_00,param_01) +{ + if(!isdefined(level._effect)) + { + level._effect = []; + } + + level._effect[param_00] = loadfx(param_01); +} + +//Function Number: 8 +createloopsound() +{ + var_00 = spawnstruct(); + if(!isdefined(level.createfxent)) + { + level.createfxent = []; + } + + level.createfxent[level.createfxent.size] = var_00; + var_00.v = []; + var_00.v["type"] = "soundfx"; + var_00.v["fxid"] = "No FX"; + var_00.v["soundalias"] = "nil"; + var_00.v["angles"] = (0,0,0); + var_00.v["origin"] = (0,0,0); + var_00.v["server_culled"] = 1; + if(getdvar("serverCulledSounds") != "1") + { + var_00.v["server_culled"] = 0; + } + + var_00.drawn = 1; + return var_00; +} + +//Function Number: 9 +createintervalsound() +{ + var_00 = createloopsound(); + var_00.v["type"] = "soundfx_interval"; + var_00.v["delay_min"] = getintervalsounddelaymindefault(); + var_00.v["delay_max"] = getintervalsounddelaymaxdefault(); + return var_00; +} + +//Function Number: 10 +createnewexploder() +{ + var_00 = spawnstruct(); + if(!isdefined(level.createfxent)) + { + level.createfxent = []; + } + + level.createfxent[level.createfxent.size] = var_00; + var_00.v = []; + var_00.v["type"] = "exploder"; + var_00.v["fxid"] = "No FX"; + var_00.v["soundalias"] = "nil"; + var_00.v["loopsound"] = "nil"; + var_00.v["angles"] = (0,0,0); + var_00.v["origin"] = (0,0,0); + var_00.v["exploder"] = 1; + var_00.v["flag"] = "nil"; + var_00.v["exploder_type"] = "normal"; + var_00.drawn = 1; + return var_00; +} + +//Function Number: 11 +createexploderex(param_00,param_01) +{ + var_02 = common_scripts\utility::createexploder(param_00); + var_02.v["exploder"] = param_01; + return var_02; +} + +//Function Number: 12 +set_origin_and_angles(param_00,param_01) +{ + self.v["origin"] = param_00; + self.v["angles"] = param_01; +} + +//Function Number: 13 +set_forward_and_up_vectors() +{ + self.v["up"] = anglestoup(self.v["angles"]); + self.v["forward"] = anglestoforward(self.v["angles"]); +} + +//Function Number: 14 +createfx_common() +{ + precacheshader("black"); + if(level.mp_createfx) + { + hack_start("painter_mp"); + } + else + { + hack_start("painter"); + } + + common_scripts\utility::flag_init("createfx_saving"); + if(!isdefined(level.createfx)) + { + level.createfx = []; + } + + level.createfx_loopcounter = 0; + var_00 = getentarray(); + foreach(var_02 in var_00) + { + if(isspawner(var_02)) + { + var_02 delete(); + } + } + + var_04 = getentarray("trigger_multiple","classname"); + for(var_05 = 0;var_05 < var_04.size;var_05++) + { + var_04[var_05] delete(); + } + + var_04 = getentarray("trigger_radius","classname"); + for(var_05 = 0;var_05 < var_04.size;var_05++) + { + var_04[var_05] delete(); + } + + level notify("createfx_common_done"); +} + +//Function Number: 15 +createfxlogic() +{ + waittillframeend; + common_scripts\_createfxmenu::menu_init(); + if(!isdefined(level._effect)) + { + level._effect = []; + } + + if(getdvar("createfx_map") == "") + { + } + else if(getdvar("createfx_map") == common_scripts\utility::get_template_level()) + { + [[ level.func_position_player ]](); + } + + level.createfxhudelements = []; + level.createfx_hudelements = 30; + var_00 = []; + var_01 = []; + var_00[0] = 0; + var_01[1] = 1; + var_01[2] = -2; + var_01[3] = 1; + var_01[4] = -2; + var_02 = newhudelem(); + var_02.location = 0; + var_02.alignx = "center"; + var_02.aligny = "middle"; + var_02.foreground = 1; + var_02.fontscale = 2; + var_02.sort = 20; + var_02.alpha = 1; + var_02.x = 320; + var_02.y = 233; + var_02 settext("."); + level.cleartextmarker = newhudelem(); + level.cleartextmarker.alpha = 0; + level.cleartextmarker settext("marker"); + for(var_03 = 0;var_03 < level.createfx_hudelements;var_03++ = -1) + { + var_04 = []; + for(var_05 = 0;var_05 < 1;var_05++ = var_41[4]) + { + var_06 = newhudelem(); + var_06.alignx = "left"; + var_06.location = 0; + var_06.foreground = 1; + var_06.fontscale = 1.4; + var_06.sort = 20 - var_05; + var_06.alpha = 1; + var_06.x = 0 + var_01[var_05]; + var_06.y = 60 + var_41[var_05] + var_03 * 15; + if(var_05 > 0) + { + var_06.color = (0,0,0); + } + + var_04[var_04.size] = var_06; + } + + level.createfxhudelements[var_03] = var_04; + } + + var_04 = []; + for(var_05 = 0;var_05 < 5;var_05++ = var_41[3]) + { + var_06 = newhudelem(); + var_06.alignx = "center"; + var_06.location = 0; + var_06.foreground = 1; + var_06.fontscale = 1.4; + var_06.sort = 20 - var_05; + var_06.alpha = 1; + var_06.x = 320 + var_01[var_05]; + var_06.y = 80 + var_41[var_05]; + if(var_05 > 0) + { + var_06.color = (0,0,0); + } + + var_04[var_04.size] = var_06; + } + + level.createfx_centerprint = var_04; + level.selectedmove_up = 0; + level.selectedmove_forward = 0; + level.selectedmove_right = 0; + level.selectedrotate_pitch = 0; + level.selectedrotate_roll = 0; + level.selectedrotate_yaw = 0; + level.selected_fx = []; + level.selected_fx_ents = []; + level.createfx_lockedlist = []; + level.createfx_lockedlist["escape"] = 1; + level.createfx_lockedlist["BUTTON_LSHLDR"] = 1; + level.createfx_lockedlist["BUTTON_RSHLDR"] = 1; + level.createfx_lockedlist["mouse1"] = 1; + level.createfx_lockedlist["ctrl"] = 1; + level.createfx_draw_enabled = 1; + level.last_displayed_ent = undefined; + level.buttonisheld = []; + var_07 = 0; + var_08 = (0,0,0); + if(!level.mp_createfx) + { + var_08 = level.player.origin; + } + + var_09 = []; + var_29["loopfx"] = "selected"; + var_29["loopfx"] = "highlighted"; + var_29["loopfx"] = "default"; + var_29["oneshotfx"] = "selected"; + var_29["oneshotfx"] = "highlighted"; + var_29["oneshotfx"] = "default"; + var_29["exploder"] = "selected"; + var_29["exploder"] = "highlighted"; + var_29["exploder"] = "default"; + var_29["rainfx"] = "selected"; + var_29["rainfx"] = "highlighted"; + var_29["rainfx"] = "default"; + var_29["soundfx"] = "selected"; + var_29["soundfx"] = "highlighted"; + var_29["soundfx"] = "default"; + var_29["soundfx_interval"] = "selected"; + var_29["soundfx_interval"] = "highlighted"; + var_29["soundfx_interval"] = "default"; + var_0A = undefined; + level.fx_rotating = 0; + common_scripts\_createfxmenu::setmenu("none"); + level.createfx_selecting = 0; + var_0B = newhudelem(); + var_0B.x = -120; + var_0B.y = 200; + var_0B.foreground = 0; + var_0B setshader("black",250,160); + var_0B.alpha = 0; + level.createfx_inputlocked = 0; + var_04 = 0; + while(var_04 < level.createfxent.size) + { + var_0C = level.createfxent[var_04]; + var_0C post_entity_creation_function(); + var_04++ = (0.2,0.9,0.2); + } + + thread draw_distance(); + var_0D = undefined; + thread createfx_autosave(); + for(;;) + { + var_0E = 0; + var_0F = anglestoright(level.player getplayerangles()); + var_10 = anglestoforward(level.player getplayerangles()); + var_11 = anglestoup(level.player getplayerangles()); + var_12 = 0.85; + var_13 = var_10 * 750; + level.createfxcursor = bullettrace(level.player geteye(),level.player geteye() + var_13,0,undefined); + var_14 = undefined; + level.buttonclick = []; + level.button_is_kb = []; + process_button_held_and_clicked(); + var_15 = button_is_held("ctrl","BUTTON_LSHLDR"); + var_16 = button_is_clicked("mouse1","BUTTON_A"); + var_17 = button_is_held("mouse1","BUTTON_A"); + common_scripts\_createfxmenu::create_fx_menu(); + if(button_is_clicked("shift","BUTTON_X")) + { + var_08 = !var_08; + } + + if(button_is_clicked("F5")) + { + } + + if(getdvarint("scr_createfx_dump")) + { + generate_fx_log(); + } + + if(button_is_clicked("F2")) + { + toggle_createfx_drawing(); + } + + if(button_is_clicked("ins")) + { + insert_effect(); + } + + if(button_is_clicked("del")) + { + delete_pressed(); + } + + if(button_is_clicked("end","l")) + { + drop_selection_to_ground(); + var_0E = 1; + } + + if(button_is_clicked("escape")) + { + clear_settable_fx(); + } + + if(button_is_clicked("space")) + { + set_off_exploders(); + } + + if(button_is_clicked("g")) + { + select_all_exploders_of_currently_selected("exploder"); + select_all_exploders_of_currently_selected("flag"); + } + + if(button_is_clicked("tab","BUTTON_RSHLDR")) + { + move_selection_to_cursor(); + var_0E = 1; + } + + if(button_is_held("h","F1")) + { + show_help(); + wait 0.05; + continue; + } + + if(button_is_clicked("BUTTON_LSTICK")) + { + copy_ents(); + } + + if(button_is_clicked("BUTTON_RSTICK")) + { + paste_ents(); + } + + if(var_15) + { + if(button_is_clicked("c")) + { + copy_ents(); + } + + if(button_is_clicked("v")) + { + paste_ents(); + } + } + + if(isdefined(level.selected_fx_option_index)) + { + common_scripts\_createfxmenu::menu_fx_option_set(); + } + + var_04 = 0; + while(var_04 < level.createfxent.size) + { + var_0C = level.createfxent[var_04]; + var_18 = vectornormalize(var_0C.v["origin"] - level.player.origin + (0,0,55)); + var_19 = vectordot(var_10,var_18); + if(var_19 < var_12) + { + continue; + } + + var_12 = var_19; + var_14 = var_0C; + var_04++ = (0.5,1,0.75); + } + + level.fx_highlightedent = var_14; + if(isdefined(var_14)) + { + if(isdefined(var_0A)) + { + if(var_0A != var_14) + { + if(!ent_is_selected(var_0A)) + { + var_0A thread entity_highlight_disable(); + } + + if(!ent_is_selected(var_14)) + { + var_14 thread entity_highlight_enable(); + } + } + } + else if(!ent_is_selected(var_14)) + { + var_14 thread entity_highlight_enable(); + } + } + + manipulate_createfx_ents(var_14,var_16,var_17,var_15,var_29,var_0F); + if(var_08 && level.selected_fx_ents.size > 0) + { + thread [[ level.func_process_fx_rotater ]](); + if(button_is_clicked("enter","p")) + { + reset_axis_of_selected_ents(); + } + + if(button_is_clicked("v")) + { + copy_angles_of_selected_ents(); + } + + var_04 = 0; + while(var_04 < level.selected_fx_ents.size) + { + level.selected_fx_ents[var_04] draw_axis(); + var_04++ = (1,1,0.2); + } + + if(level.selectedrotate_pitch != 0 || level.selectedrotate_yaw != 0 || level.selectedrotate_roll != 0) + { + var_0E = 1; + } + + wait 0.05; + } + else + { + var_1A = get_selected_move_vector(); + var_04 = 0; + while(var_04 < level.selected_fx_ents.size) + { + var_0C = level.selected_fx_ents[var_04]; + if(isdefined(var_0C.model)) + { + continue; + } + + var_0C.v["origin"] = var_0C.v["origin"] + var_1A; + var_04++ = (0.2,0.9,0.2); + } + + if(distance((0,0,0),var_1A) > 0) + { + var_0E = 1; + } + + wait 0.05; + } + + if(var_0E) + { + update_selected_entities(); + } + + if(!level.mp_createfx) + { + var_09 = [[ level.func_position_player_get ]](var_09); + } + + var_0A = var_14; + if(last_selected_entity_has_changed(var_0D)) + { + level.effect_list_offset = 0; + clear_settable_fx(); + common_scripts\_createfxmenu::setmenu("none"); + } + + if(level.selected_fx_ents.size) + { + var_0D = level.selected_fx_ents[level.selected_fx_ents.size - 1]; + continue; + } + + var_0D = undefined; + } +} + +//Function Number: 16 +copy_angles_of_selected_ents() +{ + level notify("new_ent_selection"); + for(var_00 = 0;var_00 < level.selected_fx_ents.size;var_00++) + { + var_01 = level.selected_fx_ents[var_00]; + var_01.v["angles"] = level.selected_fx_ents[level.selected_fx_ents.size - 1].v["angles"]; + var_01 set_forward_and_up_vectors(); + } + + update_selected_entities(); +} + +//Function Number: 17 +reset_axis_of_selected_ents() +{ + level notify("new_ent_selection"); + for(var_00 = 0;var_00 < level.selected_fx_ents.size;var_00++) + { + var_01 = level.selected_fx_ents[var_00]; + var_01.v["angles"] = (0,0,0); + var_01 set_forward_and_up_vectors(); + } + + update_selected_entities(); +} + +//Function Number: 18 +last_selected_entity_has_changed(param_00) +{ + if(isdefined(param_00)) + { + if(!common_scripts\_createfxmenu::entities_are_selected()) + { + return 1; + } + } + else + { + return common_scripts\_createfxmenu::entities_are_selected(); + } + + return param_00 != level.selected_fx_ents[level.selected_fx_ents.size - 1]; +} + +//Function Number: 19 +createfx_showorigin(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,param_0D,param_0E,param_0F,param_10,param_11,param_12) +{ +} + +//Function Number: 20 +drop_selection_to_ground() +{ + for(var_00 = 0;var_00 < level.selected_fx_ents.size;var_00++) + { + var_01 = level.selected_fx_ents[var_00]; + var_02 = bullettrace(var_01.v["origin"],var_01.v["origin"] + (0,0,-2048),0,undefined); + var_01.v["origin"] = var_02["position"]; + } +} + +//Function Number: 21 +set_off_exploders() +{ + level notify("createfx_exploder_reset"); + var_00 = []; + for(var_01 = 0;var_01 < level.selected_fx_ents.size;var_01++) + { + var_02 = level.selected_fx_ents[var_01]; + if(isdefined(var_02.v["exploder"])) + { + var_00[var_02.v["exploder"]] = 1; + } + } + + var_03 = getarraykeys(var_00); + for(var_01 = 0;var_01 < var_03.size;var_01++) + { + common_scripts\utility::exploder(var_03[var_01]); + } +} + +//Function Number: 22 +draw_distance() +{ + var_00 = 0; + if(getdvarint("createfx_drawdist") == 0) + { + } + + for(;;) + { + var_01 = getdvarint("createfx_drawdist"); + for(var_02 = 0;var_02 < level.createfxent.size;var_02++) + { + var_03 = level.createfxent[var_02]; + var_03.drawn = distance(level.player.origin,var_03.v["origin"]) <= var_01; + var_00++; + if(var_00 > 100) + { + var_00 = 0; + wait 0.05; + } + } + + if(level.createfxent.size == 0) + { + wait 0.05; + } + } +} + +//Function Number: 23 +createfx_autosave() +{ + for(;;) + { + wait 300; + common_scripts\utility::flag_waitopen("createfx_saving"); + generate_fx_log(1); + } +} + +//Function Number: 24 +rotate_over_time(param_00,param_01) +{ + level endon("new_ent_selection"); + var_02 = 0.1; + for(var_03 = 0;var_03 < var_02 * 20;var_03++) + { + if(level.selectedrotate_pitch != 0) + { + param_00 addpitch(level.selectedrotate_pitch); + } + else if(level.selectedrotate_yaw != 0) + { + param_00 addyaw(level.selectedrotate_yaw); + } + else + { + param_00 addroll(level.selectedrotate_roll); + } + + wait 0.05; + param_00 draw_axis(); + for(var_04 = 0;var_04 < level.selected_fx_ents.size;var_04++) + { + var_05 = level.selected_fx_ents[var_04]; + if(isdefined(var_05.model)) + { + continue; + } + + var_05.v["origin"] = param_01[var_04].origin; + var_05.v["angles"] = param_01[var_04].angles; + } + } +} + +//Function Number: 25 +delete_pressed() +{ + if(level.createfx_inputlocked) + { + remove_selected_option(); + return; + } + + delete_selection(); +} + +//Function Number: 26 +remove_selected_option() +{ + if(!isdefined(level.selected_fx_option_index)) + { + return; + } + + var_00 = level.createfx_options[level.selected_fx_option_index]["name"]; + for(var_01 = 0;var_01 < level.createfxent.size;var_01++) + { + var_02 = level.createfxent[var_01]; + if(!ent_is_selected(var_02)) + { + continue; + } + + var_02 remove_option(var_00); + } + + update_selected_entities(); + clear_settable_fx(); +} + +//Function Number: 27 +remove_option(param_00) +{ + self.v[param_00] = undefined; +} + +//Function Number: 28 +delete_selection() +{ + var_00 = []; + for(var_01 = 0;var_01 < level.createfxent.size;var_01++) + { + var_02 = level.createfxent[var_01]; + if(ent_is_selected(var_02)) + { + if(isdefined(var_02.looper)) + { + var_02.looper delete(); + } + + var_02 notify("stop_loop"); + continue; + } + + var_00[var_00.size] = var_02; + } + + level.createfxent = var_00; + level.selected_fx = []; + level.selected_fx_ents = []; + clear_fx_hudelements(); +} + +//Function Number: 29 +move_selection_to_cursor() +{ + var_00 = level.createfxcursor["position"]; + if(level.selected_fx_ents.size <= 0) + { + return; + } + + var_01 = get_center_of_array(level.selected_fx_ents); + var_02 = var_01 - var_00; + for(var_03 = 0;var_03 < level.selected_fx_ents.size;var_03++) + { + var_04 = level.selected_fx_ents[var_03]; + if(isdefined(var_04.model)) + { + continue; + } + + var_04.v["origin"] = var_04.v["origin"] - var_02; + } +} + +//Function Number: 30 +insert_effect() +{ + common_scripts\_createfxmenu::setmenu("creation"); + level.effect_list_offset = 0; + clear_fx_hudelements(); + set_fx_hudelement("Pick effect type to create:"); + set_fx_hudelement("1. One Shot fx"); + set_fx_hudelement("2. Looping fx"); + set_fx_hudelement("3. Looping sound"); + set_fx_hudelement("4. Exploder"); + set_fx_hudelement("5. One Shot Sound"); + set_fx_hudelement("(c) Cancel"); + set_fx_hudelement("(x) Exit"); +} + +//Function Number: 31 +show_help() +{ + clear_fx_hudelements(); + set_fx_hudelement("Help:"); + set_fx_hudelement("Insert Insert entity"); + set_fx_hudelement("L Drop selected entities to the ground"); + set_fx_hudelement("A Add option to the selected entities"); + set_fx_hudelement("P Reset the rotation of the selected entities"); + set_fx_hudelement("V Copy the angles from the most recently selected fx onto all selected fx."); + set_fx_hudelement("Delete Kill the selected entities"); + set_fx_hudelement("ESCAPE Cancel out of option-modify-mode, must have console open"); + set_fx_hudelement("Ctrl-C Copy"); + set_fx_hudelement("Ctrl-V Paste"); + set_fx_hudelement("F2 Toggle createfx dot and text drawing"); + set_fx_hudelement("F5 SAVES your work"); + set_fx_hudelement("Dpad Move selected entitise on X/Y or rotate pitch/yaw"); + set_fx_hudelement("A button Toggle the selection of the current entity"); + set_fx_hudelement("X button Toggle entity rotation mode"); + set_fx_hudelement("Y button Move selected entites up or rotate roll"); + set_fx_hudelement("B button Move selected entites down or rotate roll"); + set_fx_hudelement("R Shoulder Move selected entities to the cursor"); + set_fx_hudelement("L Shoulder Hold to select multiple entites"); + set_fx_hudelement("L JoyClick Copy"); + set_fx_hudelement("R JoyClick Paste"); + set_fx_hudelement("N UFO"); + set_fx_hudelement("T Toggle Timescale FAST"); + set_fx_hudelement("Y Toggle Timescale SLOW"); + set_fx_hudelement("[ Toggle FX Visibility"); + set_fx_hudelement("] Toggle ShowTris"); + set_fx_hudelement("F11 Toggle FX Profile"); +} + +//Function Number: 32 +select_last_entity() +{ + select_entity(level.createfxent.size - 1,level.createfxent[level.createfxent.size - 1]); +} + +//Function Number: 33 +select_all_exploders_of_currently_selected(param_00) +{ + var_01 = []; + foreach(var_03 in level.selected_fx_ents) + { + if(!isdefined(var_03.v[param_00])) + { + continue; + } + + var_04 = var_03.v[param_00]; + var_01[var_04] = 1; + } + + foreach(var_04, var_07 in var_01) + { + foreach(var_09, var_03 in level.createfxent) + { + if(index_is_selected(var_09)) + { + continue; + } + + if(!isdefined(var_03.v[param_00])) + { + continue; + } + + if(var_03.v[param_00] != var_04) + { + continue; + } + + select_entity(var_09,var_03); + } + } + + update_selected_entities(); +} + +//Function Number: 34 +copy_ents() +{ + if(level.selected_fx_ents.size <= 0) + { + return; + } + + var_00 = []; + for(var_01 = 0;var_01 < level.selected_fx_ents.size;var_01++) + { + var_02 = level.selected_fx_ents[var_01]; + var_03 = spawnstruct(); + var_03.v = var_02.v; + var_03 post_entity_creation_function(); + var_00[var_00.size] = var_03; + } + + level.stored_ents = var_00; +} + +//Function Number: 35 +post_entity_creation_function() +{ + self.textalpha = 0; + self.drawn = 1; +} + +//Function Number: 36 +paste_ents() +{ + if(!isdefined(level.stored_ents)) + { + return; + } + + clear_entity_selection(); + for(var_00 = 0;var_00 < level.stored_ents.size;var_00++) + { + add_and_select_entity(level.stored_ents[var_00]); + } + + move_selection_to_cursor(); + update_selected_entities(); + level.stored_ents = []; + copy_ents(); +} + +//Function Number: 37 +add_and_select_entity(param_00) +{ + level.createfxent[level.createfxent.size] = param_00; + select_last_entity(); +} + +//Function Number: 38 +get_center_of_array(param_00) +{ + var_01 = (0,0,0); + for(var_02 = 0;var_02 < param_00.size;var_02++) + { + var_01 = (var_01[0] + param_00[var_02].v["origin"][0],var_01[1] + param_00[var_02].v["origin"][1],var_01[2] + param_00[var_02].v["origin"][2]); + } + + return (var_01[0] / param_00.size,var_01[1] / param_00.size,var_01[2] / param_00.size); +} + +//Function Number: 39 +ent_draw_axis() +{ + self endon("death"); + for(;;) + { + draw_axis(); + wait 0.05; + } +} + +//Function Number: 40 +rotation_is_occuring() +{ + if(level.selectedrotate_roll != 0) + { + return 1; + } + + if(level.selectedrotate_pitch != 0) + { + return 1; + } + + return level.selectedrotate_yaw != 0; +} + +//Function Number: 41 +print_fx_options(param_00,param_01,param_02,param_03) +{ + for(var_04 = 0;var_04 < level.createfx_options.size;var_04++) + { + var_05 = level.createfx_options[var_04]; + var_06 = var_05["name"]; + if(!isdefined(param_00.v[var_06])) + { + continue; + } + + if(!common_scripts\_createfxmenu::mask(var_05["mask"],param_00.v["type"])) + { + continue; + } + + if(!level.mp_createfx) + { + if(common_scripts\_createfxmenu::mask("fx",param_00.v["type"]) && var_06 == "fxid") + { + continue; + } + + if(param_00.v["type"] == "exploder" && var_06 == "exploder") + { + continue; + } + + var_07 = param_00.v["type"] + "/" + var_06; + if(isdefined(level.createfxdefaults[var_07]) && level.createfxdefaults[var_07] == param_00.v[var_06]) + { + continue; + } + } + + if(var_05["type"] == "string") + { + var_08 = param_00.v[var_06] + ""; + if(var_08 == "nil") + { + continue; + } + + cfxprintln(param_02,param_01 + "ent.v[ \" + var_06 + "\" ] = \" + param_00.v[var_06] + "\";"); + continue; + } + + cfxprintln(param_02,param_01 + "ent.v[ \" + var_06 + "\" ] = " + param_00.v[var_06] + ";"); + } +} + +//Function Number: 42 +entity_highlight_disable() +{ + self notify("highlight change"); + self endon("highlight change"); + for(;;) + { + self.textalpha = self.textalpha * 0.85; + self.textalpha = self.textalpha - 0.05; + if(self.textalpha < 0) + { + break; + } + + wait 0.05; + } + + self.textalpha = 0; +} + +//Function Number: 43 +entity_highlight_enable() +{ + self notify("highlight change"); + self endon("highlight change"); + for(;;) + { + self.textalpha = self.textalpha + 0.05; + self.textalpha = self.textalpha * 1.25; + if(self.textalpha > 1) + { + break; + } + + wait 0.05; + } + + self.textalpha = 1; +} + +//Function Number: 44 +toggle_createfx_drawing() +{ + level.createfx_draw_enabled = !level.createfx_draw_enabled; +} + +//Function Number: 45 +manipulate_createfx_ents(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if(!level.createfx_draw_enabled) + { + return; + } + + for(var_06 = 0;var_06 < level.createfxent.size;var_06++) + { + var_07 = level.createfxent[var_06]; + if(!var_07.drawn) + { + continue; + } + + var_08 = getdvarfloat("createfx_scaleid"); + if(isdefined(param_00) && var_07 == param_00) + { + if(!common_scripts\_createfxmenu::entities_are_selected()) + { + common_scripts\_createfxmenu::display_fx_info(var_07); + } + + if(param_01) + { + var_09 = index_is_selected(var_06); + level.createfx_selecting = !var_09; + if(!param_03) + { + var_0A = level.selected_fx_ents.size; + clear_entity_selection(); + if(var_09 && var_0A == 1) + { + select_entity(var_06,var_07); + } + } + + toggle_entity_selection(var_06,var_07); + } + else if(param_02) + { + if(param_03) + { + if(level.createfx_selecting) + { + select_entity(var_06,var_07); + } + + if(!level.createfx_selecting) + { + deselect_entity(var_06,var_07); + } + } + } + + var_0B = "highlighted"; + if(index_is_selected(var_06)) + { + var_0B = "selected"; + } + + if(var_07.textalpha > 0) + { + var_0C = param_05 * var_07.v["fxid"].size * -2.93 * var_08; + } + + continue; + } + + var_0B = "default"; + if(index_is_selected(var_06)) + { + var_0B = "selected"; + } + + if(var_07.textalpha > 0) + { + var_0C = param_05 * var_07.v["fxid"].size * -2.93; + } + } +} + +//Function Number: 46 +clear_settable_fx() +{ + level.createfx_inputlocked = 0; + level.selected_fx_option_index = undefined; + reset_fx_hud_colors(); +} + +//Function Number: 47 +reset_fx_hud_colors() +{ + for(var_00 = 0;var_00 < level.createfx_hudelements;var_00++) + { + level.createfxhudelements[var_00][0].color = (1,1,1); + } +} + +//Function Number: 48 +button_is_held(param_00,param_01) +{ + if(isdefined(param_01)) + { + if(isdefined(level.buttonisheld[param_01])) + { + return 1; + } + } + + return isdefined(level.buttonisheld[param_00]); +} + +//Function Number: 49 +button_is_clicked(param_00,param_01) +{ + if(isdefined(param_01)) + { + if(isdefined(level.buttonclick[param_01])) + { + return 1; + } + } + + return isdefined(level.buttonclick[param_00]); +} + +//Function Number: 50 +toggle_entity_selection(param_00,param_01) +{ + if(isdefined(level.selected_fx[param_00])) + { + deselect_entity(param_00,param_01); + return; + } + + select_entity(param_00,param_01); +} + +//Function Number: 51 +select_entity(param_00,param_01) +{ + if(isdefined(level.selected_fx[param_00])) + { + return; + } + + clear_settable_fx(); + level notify("new_ent_selection"); + param_01 thread entity_highlight_enable(); + level.selected_fx[param_00] = 1; + level.selected_fx_ents[level.selected_fx_ents.size] = param_01; +} + +//Function Number: 52 +ent_is_highlighted(param_00) +{ + if(!isdefined(level.fx_highlightedent)) + { + return 0; + } + + return param_00 == level.fx_highlightedent; +} + +//Function Number: 53 +deselect_entity(param_00,param_01) +{ + if(!isdefined(level.selected_fx[param_00])) + { + return; + } + + clear_settable_fx(); + level notify("new_ent_selection"); + level.selected_fx[param_00] = undefined; + if(!ent_is_highlighted(param_01)) + { + param_01 thread entity_highlight_disable(); + } + + var_02 = []; + for(var_03 = 0;var_03 < level.selected_fx_ents.size;var_03++) + { + if(level.selected_fx_ents[var_03] != param_01) + { + var_02[var_02.size] = level.selected_fx_ents[var_03]; + } + } + + level.selected_fx_ents = var_02; +} + +//Function Number: 54 +index_is_selected(param_00) +{ + return isdefined(level.selected_fx[param_00]); +} + +//Function Number: 55 +ent_is_selected(param_00) +{ + for(var_01 = 0;var_01 < level.selected_fx_ents.size;var_01++) + { + if(level.selected_fx_ents[var_01] == param_00) + { + return 1; + } + } + + return 0; +} + +//Function Number: 56 +clear_entity_selection() +{ + for(var_00 = 0;var_00 < level.selected_fx_ents.size;var_00++) + { + if(!ent_is_highlighted(level.selected_fx_ents[var_00])) + { + level.selected_fx_ents[var_00] thread entity_highlight_disable(); + } + } + + level.selected_fx = []; + level.selected_fx_ents = []; +} + +//Function Number: 57 +draw_axis() +{ + var_00 = 25 * getdvarfloat("createfx_scaleid"); + var_01 = anglestoforward(self.v["angles"]); + var_01 = var_01 * var_00; + var_02 = anglestoright(self.v["angles"]); + var_02 = var_02 * var_00; + var_03 = anglestoup(self.v["angles"]); + var_03 = var_03 * var_00; +} + +//Function Number: 58 +clear_fx_hudelements() +{ + level.cleartextmarker clearalltextafterhudelem(); + for(var_00 = 0;var_00 < level.createfx_hudelements;var_00++) + { + for(var_01 = 0;var_01 < 1;var_01++) + { + level.createfxhudelements[var_00][var_01] settext(""); + } + } + + level.fxhudelements = 0; +} + +//Function Number: 59 +set_fx_hudelement(param_00) +{ + for(var_01 = 0;var_01 < 1;var_01++) + { + level.createfxhudelements[level.fxhudelements][var_01] settext(param_00); + } + + level.fxhudelements++; +} + +//Function Number: 60 +createfx_centerprint(param_00) +{ + thread createfx_centerprint_thread(param_00); +} + +//Function Number: 61 +createfx_centerprint_thread(param_00) +{ + level notify("new_createfx_centerprint"); + level endon("new_createfx_centerprint"); + for(var_01 = 0;var_01 < 5;var_01++) + { + level.createfx_centerprint[var_01] settext(param_00); + } + + wait 4.5; + for(var_01 = 0;var_01 < 5;var_01++) + { + level.createfx_centerprint[var_01] settext(""); + } +} + +//Function Number: 62 +buttondown(param_00,param_01) +{ + return buttonpressed_internal(param_00) || buttonpressed_internal(param_01); +} + +//Function Number: 63 +buttonpressed_internal(param_00) +{ + if(!isdefined(param_00)) + { + return 0; + } + + if(kb_locked(param_00)) + { + return 0; + } + + return level.player buttonpressed(param_00); +} + +//Function Number: 64 +get_selected_move_vector() +{ + var_00 = level.player getplayerangles()[1]; + var_01 = (0,var_00,0); + var_02 = anglestoright(var_01); + var_03 = anglestoforward(var_01); + var_04 = anglestoup(var_01); + var_05 = 0; + var_06 = 1; + if(buttondown("kp_uparrow","DPAD_UP")) + { + if(level.selectedmove_forward < 0) + { + level.selectedmove_forward = 0; + } + + level.selectedmove_forward = level.selectedmove_forward + var_06; + } + else if(buttondown("kp_downarrow","DPAD_DOWN")) + { + if(level.selectedmove_forward > 0) + { + level.selectedmove_forward = 0; + } + + level.selectedmove_forward = level.selectedmove_forward - var_06; + } + else + { + level.selectedmove_forward = 0; + } + + if(buttondown("kp_rightarrow","DPAD_RIGHT")) + { + if(level.selectedmove_right < 0) + { + level.selectedmove_right = 0; + } + + level.selectedmove_right = level.selectedmove_right + var_06; + } + else if(buttondown("kp_leftarrow","DPAD_LEFT")) + { + if(level.selectedmove_right > 0) + { + level.selectedmove_right = 0; + } + + level.selectedmove_right = level.selectedmove_right - var_06; + } + else + { + level.selectedmove_right = 0; + } + + if(buttondown("BUTTON_Y")) + { + if(level.selectedmove_up < 0) + { + level.selectedmove_up = 0; + } + + level.selectedmove_up = level.selectedmove_up + var_06; + } + else if(buttondown("BUTTON_B")) + { + if(level.selectedmove_up > 0) + { + level.selectedmove_up = 0; + } + + level.selectedmove_up = level.selectedmove_up - var_06; + } + else + { + level.selectedmove_up = 0; + } + + var_07 = (0,0,0); + var_07 = var_07 + var_03 * level.selectedmove_forward; + var_07 = var_07 + var_02 * level.selectedmove_right; + var_07 = var_07 + var_04 * level.selectedmove_up; + return var_07; +} + +//Function Number: 65 +process_button_held_and_clicked() +{ + add_button("mouse1"); + add_kb_button("shift"); + add_kb_button("ctrl"); + add_button("BUTTON_RSHLDR"); + add_button("BUTTON_LSHLDR"); + add_button("BUTTON_RSTICK"); + add_button("BUTTON_LSTICK"); + add_button("BUTTON_A"); + add_button("BUTTON_B"); + add_button("BUTTON_X"); + add_button("BUTTON_Y"); + add_button("DPAD_UP"); + add_button("DPAD_LEFT"); + add_button("DPAD_RIGHT"); + add_button("DPAD_DOWN"); + add_kb_button("escape"); + add_kb_button("a"); + add_kb_button("g"); + add_button("F1"); + add_button("F5"); + add_button("F2"); + add_kb_button("c"); + add_kb_button("h"); + add_kb_button("i"); + add_kb_button("k"); + add_kb_button("l"); + add_kb_button("m"); + add_kb_button("p"); + add_kb_button("x"); + add_button("del"); + add_kb_button("end"); + add_kb_button("tab"); + add_kb_button("ins"); + add_kb_button("add"); + add_kb_button("space"); + add_kb_button("enter"); + add_kb_button("v"); + add_kb_button("1"); + add_kb_button("2"); + add_kb_button("3"); + add_kb_button("4"); + add_kb_button("5"); + add_kb_button("6"); + add_kb_button("7"); + add_kb_button("8"); + add_kb_button("9"); + add_kb_button("0"); +} + +//Function Number: 66 +locked(param_00) +{ + if(isdefined(level.createfx_lockedlist[param_00])) + { + return 0; + } + + return kb_locked(param_00); +} + +//Function Number: 67 +kb_locked(param_00) +{ + return level.createfx_inputlocked && isdefined(level.button_is_kb[param_00]); +} + +//Function Number: 68 +add_button(param_00) +{ + if(locked(param_00)) + { + return; + } + + if(!isdefined(level.buttonisheld[param_00])) + { + if(level.player buttonpressed(param_00)) + { + level.buttonisheld[param_00] = 1; + level.buttonclick[param_00] = 1; + return; + } + + return; + } + + if(!level.player buttonpressed(param_00)) + { + level.buttonisheld[param_00] = undefined; + } +} + +//Function Number: 69 +add_kb_button(param_00) +{ + level.button_is_kb[param_00] = 1; + add_button(param_00); +} + +//Function Number: 70 +set_anglemod_move_vector() +{ + var_00 = 2; + if(buttondown("kp_uparrow","DPAD_UP")) + { + if(level.selectedrotate_pitch < 0) + { + level.selectedrotate_pitch = 0; + } + + level.selectedrotate_pitch = level.selectedrotate_pitch + var_00; + } + else if(buttondown("kp_downarrow","DPAD_DOWN")) + { + if(level.selectedrotate_pitch > 0) + { + level.selectedrotate_pitch = 0; + } + + level.selectedrotate_pitch = level.selectedrotate_pitch - var_00; + } + else + { + level.selectedrotate_pitch = 0; + } + + if(buttondown("kp_leftarrow","DPAD_LEFT")) + { + if(level.selectedrotate_yaw < 0) + { + level.selectedrotate_yaw = 0; + } + + level.selectedrotate_yaw = level.selectedrotate_yaw + var_00; + } + else if(buttondown("kp_rightarrow","DPAD_RIGHT")) + { + if(level.selectedrotate_yaw > 0) + { + level.selectedrotate_yaw = 0; + } + + level.selectedrotate_yaw = level.selectedrotate_yaw - var_00; + } + else + { + level.selectedrotate_yaw = 0; + } + + if(buttondown("BUTTON_Y")) + { + if(level.selectedrotate_roll < 0) + { + level.selectedrotate_roll = 0; + } + + level.selectedrotate_roll = level.selectedrotate_roll + var_00; + return; + } + + if(buttondown("BUTTON_B")) + { + if(level.selectedrotate_roll > 0) + { + level.selectedrotate_roll = 0; + } + + level.selectedrotate_roll = level.selectedrotate_roll - var_00; + return; + } + + level.selectedrotate_roll = 0; +} + +//Function Number: 71 +cfxprintlnstart() +{ + common_scripts\utility::fileprint_launcher_start_file(); +} + +//Function Number: 72 +cfxprintln(param_00,param_01) +{ + common_scripts\utility::fileprint_launcher(param_01); + if(param_00 == -1) + { + } +} + +//Function Number: 73 +cfxprintlnend(param_00,param_01,param_02) +{ + var_03 = 1; + if(param_02 != "" || param_01) + { + var_03 = 0; + } + + var_04 = common_scripts\utility::get_template_level() + param_02 + "_fx.gsc"; + if(param_01) + { + var_04 = "backup.gsc"; + } + + common_scripts\utility::fileprint_launcher_end_file("/share/raw/maps/createfx/" + var_04,var_03); +} + +//Function Number: 74 +update_selected_entities() +{ + for(var_00 = 0;var_00 < level.selected_fx_ents.size;var_00++) + { + var_01 = level.selected_fx_ents[var_00]; + var_01 [[ level.func_updatefx ]](); + } +} + +//Function Number: 75 +hack_start(param_00) +{ + if(!isdefined(param_00)) + { + param_00 = "painter_mp"; + } + + precachemenu(param_00); + wait 0.05; + if(param_00 == "painter_mp") + { + return; + } + + level.player openpopupmenu(param_00); + level.player closepopupmenu(param_00); +} + +//Function Number: 76 +get_player() +{ + return getentarray("player","classname")[0]; +} + +//Function Number: 77 +createfx_orgranize_array() +{ + var_00 = []; + var_01 = []; + foreach(var_04, var_03 in var_41) + { + var_01[var_04] = []; + } + + foreach(var_06 in level.createfxent) + { + var_07 = 0; + foreach(var_04, var_09 in var_41) + { + if(var_06.v["type"] != var_09) + { + continue; + } + + var_07 = 1; + var_01[var_04][var_01[var_04].size] = var_06; + break; + } + } + + var_0B = []; + for(var_0C = 0;var_0C < var_41.size;var_0C++ = var_41[4]) + { + foreach(var_06 in var_01[var_0C]) + { + var_0B[var_0B.size] = var_06; + } + } + + level.createfxent = var_0B; +} + +//Function Number: 78 +stop_fx_looper() +{ + if(isdefined(self.looper)) + { + self.looper delete(); + } + + stop_loopsound(); +} + +//Function Number: 79 +stop_loopsound() +{ + self notify("stop_loop"); +} + +//Function Number: 80 +func_get_level_fx() +{ + if(!isdefined(level._effect_keys)) + { + var_00 = getarraykeys(level._effect); + } + else + { + var_00 = getarraykeys(level._effect); + if(var_00.size == level._effect_keys.size) + { + return level._effect_keys; + } + } + + var_00 = common_scripts\utility::alphabetize(var_00); + level._effect_keys = var_00; + return var_00; +} + +//Function Number: 81 +restart_fx_looper() +{ + stop_fx_looper(); + set_forward_and_up_vectors(); + if(self.v["type"] == "loopfx") + { + common_scripts\_fx::create_looper(); + } + + if(self.v["type"] == "oneshotfx") + { + common_scripts\_fx::create_triggerfx(); + } + + if(self.v["type"] == "soundfx") + { + common_scripts\_fx::create_loopsound(); + } + + if(self.v["type"] == "soundfx_interval") + { + common_scripts\_fx::create_interval_sound(); + } +} + +//Function Number: 82 +process_fx_rotater() +{ + if(level.fx_rotating) + { + return; + } + + set_anglemod_move_vector(); + if(!rotation_is_occuring()) + { + return; + } + + level.fx_rotating = 1; + if(level.selected_fx_ents.size > 1) + { + var_00 = get_center_of_array(level.selected_fx_ents); + var_01 = spawn("script_origin",var_00); + var_01.v["angles"] = level.selected_fx_ents[0].v["angles"]; + var_01.v["origin"] = var_00; + var_02 = []; + for(var_03 = 0;var_03 < level.selected_fx_ents.size;var_03++) + { + var_02[var_03] = spawn("script_origin",level.selected_fx_ents[var_03].v["origin"]); + var_02[var_03].angles = level.selected_fx_ents[var_03].v["angles"]; + var_02[var_03] linkto(var_01); + } + + rotate_over_time(var_01,var_02); + var_01 delete(); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + var_02[var_03] delete(); + } + } + else if(level.selected_fx_ents.size == 1) + { + var_04 = level.selected_fx_ents[0]; + var_02 = spawn("script_origin",(0,0,0)); + var_02.angles = var_04.v["angles"]; + if(level.selectedrotate_pitch != 0) + { + var_02 addpitch(level.selectedrotate_pitch); + } + else if(level.selectedrotate_yaw != 0) + { + var_02 addyaw(level.selectedrotate_yaw); + } + else + { + var_02 addroll(level.selectedrotate_roll); + } + + var_04.v["angles"] = var_02.angles; + var_02 delete(); + wait 0.05; + } + + level.fx_rotating = 0; +} + +//Function Number: 83 +generate_fx_log(param_00) +{ +} \ No newline at end of file diff --git a/MW3/Xbox/MP/common_scripts/_createfxmenu.gsc b/MW3/Xbox/MP/common_scripts/_createfxmenu.gsc new file mode 100644 index 0000000..52ad56a --- /dev/null +++ b/MW3/Xbox/MP/common_scripts/_createfxmenu.gsc @@ -0,0 +1,634 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: common_scripts\_createfxmenu.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 25 + * Decompile Time: 400 ms + * Timestamp: 10/27/2023 2:29:19 AM +*******************************************************************/ + +//Function Number: 1 +menu(param_00) +{ + return level.create_fx_menu == param_00; +} + +//Function Number: 2 +setmenu(param_00) +{ + level.create_fx_menu = param_00; +} + +//Function Number: 3 +create_fx_menu() +{ + if(common_scripts\_createfx::button_is_clicked("escape","x")) + { + _exit_menu(); + return; + } + + if(menu("creation")) + { + if(common_scripts\_createfx::button_is_clicked("1")) + { + setmenu("create_oneshot"); + draw_effects_list(); + return; + } + + if(common_scripts\_createfx::button_is_clicked("2")) + { + setmenu("create_loopfx"); + draw_effects_list(); + return; + } + + if(common_scripts\_createfx::button_is_clicked("3")) + { + setmenu("create_loopsound"); + var_00 = common_scripts\_createfx::createloopsound(); + finish_creating_entity(var_00); + return; + } + + if(common_scripts\_createfx::button_is_clicked("4")) + { + setmenu("create_exploder"); + var_00 = common_scripts\_createfx::createnewexploder(); + finish_creating_entity(var_00); + return; + } + + if(common_scripts\_createfx::button_is_clicked("5")) + { + setmenu("create_interval_sound"); + var_00 = common_scripts\_createfx::createintervalsound(); + finish_creating_entity(var_00); + return; + } + + return; + } + + if(menu("create_oneshot") || menu("create_loopfx") || menu("change_fxid")) + { + if(common_scripts\_createfx::button_is_clicked("m")) + { + increment_list_offset(); + draw_effects_list(); + } + + menu_fx_creation(); + return; + } + + if(menu("none")) + { + if(common_scripts\_createfx::button_is_clicked("m")) + { + increment_list_offset(); + } + + menu_change_selected_fx(); + if(entities_are_selected()) + { + var_01 = get_last_selected_entity(); + if(!isdefined(level.last_displayed_ent) || var_01 != level.last_displayed_ent) + { + display_fx_info(var_01); + level.last_displayed_ent = var_01; + } + + if(common_scripts\_createfx::button_is_clicked("a")) + { + common_scripts\_createfx::clear_settable_fx(); + setmenu("add_options"); + return; + } + + return; + } + + return; + } + + if(menu("add_options")) + { + if(!entities_are_selected()) + { + common_scripts\_createfx::clear_fx_hudelements(); + setmenu("none"); + return; + } + + display_fx_add_options(get_last_selected_entity()); + if(common_scripts\_createfx::button_is_clicked("m")) + { + increment_list_offset(); + return; + } + + return; + } +} + +//Function Number: 4 +_exit_menu() +{ + common_scripts\_createfx::clear_fx_hudelements(); + common_scripts\_createfx::clear_entity_selection(); + common_scripts\_createfx::update_selected_entities(); + setmenu("none"); +} + +//Function Number: 5 +get_last_selected_entity() +{ + return level.selected_fx_ents[level.selected_fx_ents.size - 1]; +} + +//Function Number: 6 +menu_fx_creation() +{ + var_00 = 0; + var_01 = undefined; + var_02 = common_scripts\_createfx::func_get_level_fx(); + for(var_03 = level.effect_list_offset;var_03 < var_02.size;var_03++) + { + var_00 = var_00 + 1; + var_04 = var_00; + if(var_04 == 10) + { + var_04 = 0; + } + + if(common_scripts\_createfx::button_is_clicked(var_04 + "")) + { + var_01 = var_02[var_03]; + break; + } + + if(var_00 > level.effect_list_offset_max) + { + break; + } + } + + if(!isdefined(var_01)) + { + return; + } + + if(menu("change_fxid")) + { + apply_option_to_selected_fx(get_option("fxid"),var_01); + level.effect_list_offset = 0; + common_scripts\_createfx::clear_fx_hudelements(); + setmenu("none"); + return; + } + + var_05 = undefined; + if(menu("create_loopfx")) + { + var_05 = common_scripts\utility::createloopeffect(var_01); + } + + if(menu("create_oneshot")) + { + var_05 = common_scripts\utility::createoneshoteffect(var_01); + } + + finish_creating_entity(var_05); +} + +//Function Number: 7 +finish_creating_entity(param_00) +{ + param_00.v["angles"] = vectortoangles(param_00.v["origin"] + (0,0,100) - param_00.v["origin"]); + param_00 common_scripts\_createfx::post_entity_creation_function(); + common_scripts\_createfx::clear_entity_selection(); + common_scripts\_createfx::select_last_entity(); + common_scripts\_createfx::move_selection_to_cursor(); + common_scripts\_createfx::update_selected_entities(); + setmenu("none"); +} + +//Function Number: 8 +menu_init() +{ + level.createfx_options = []; + addoption("string","fxid","The FX","nil","fx"); + addoption("float","delay","Repeat rate/start delay",0.5,"fx"); + addoption("float","fire_range","Fire damage range",0,"fx"); + addoption("string","flag","Flag","nil","exploder"); + addoption("string","firefx","2nd FX id","nil","exploder"); + addoption("float","firefxdelay","2nd FX id repeat rate",0.5,"exploder"); + addoption("float","firefxtimeout","2nd FX timeout",5,"exploder"); + addoption("string","firefxsound","2nd FX soundalias","nil","exploder"); + addoption("float","damage","Radius damage",150,"exploder"); + addoption("float","damage_radius","Radius of radius damage",250,"exploder"); + addoption("float","delay_min","Minimimum time between repeats",1,"soundfx_interval"); + addoption("float","delay_max","Maximum time between repeats",2,"soundfx_interval"); + addoption("int","repeat","Number of times to repeat",5,"exploder"); + addoption("string","exploder","Exploder","1","exploder"); + addoption("string","earthquake","Earthquake","nil","exploder"); + if(!level.mp_createfx) + { + addoption("string","rumble","Rumble","nil","exploder"); + } + + addoption("string","ender","Level notify for ending 2nd FX","nil","exploder"); + addoption("string","soundalias","Soundalias","nil","all"); + addoption("string","loopsound","Loopsound","nil","exploder"); + if(!level.mp_createfx) + { + addoption("int","stoppable","Can be stopped from script","1","all"); + } + + level.effect_list_offset = 0; + level.effect_list_offset_max = 10; + level.createfxmasks = []; + level.createfxmasks["all"] = []; + level.createfxmasks["all"]["exploder"] = 1; + level.createfxmasks["all"]["oneshotfx"] = 1; + level.createfxmasks["all"]["loopfx"] = 1; + level.createfxmasks["all"]["soundfx"] = 1; + level.createfxmasks["all"]["soundfx_interval"] = 1; + level.createfxmasks["fx"] = []; + level.createfxmasks["fx"]["exploder"] = 1; + level.createfxmasks["fx"]["oneshotfx"] = 1; + level.createfxmasks["fx"]["loopfx"] = 1; + level.createfxmasks["exploder"] = []; + level.createfxmasks["exploder"]["exploder"] = 1; + level.createfxmasks["loopfx"] = []; + level.createfxmasks["loopfx"]["loopfx"] = 1; + level.createfxmasks["oneshotfx"] = []; + level.createfxmasks["oneshotfx"]["oneshotfx"] = 1; + level.createfxmasks["soundfx"] = []; + level.createfxmasks["soundfx"]["soundalias"] = 1; + level.createfxmasks["soundfx_interval"] = []; + level.createfxmasks["soundfx_interval"]["soundfx_interval"] = 1; +} + +//Function Number: 9 +get_last_selected_ent() +{ + return level.selected_fx_ents[level.selected_fx_ents.size - 1]; +} + +//Function Number: 10 +entities_are_selected() +{ + return level.selected_fx_ents.size > 0; +} + +//Function Number: 11 +menu_change_selected_fx() +{ + if(!level.selected_fx_ents.size) + { + return; + } + + var_00 = 0; + var_01 = 0; + var_02 = get_last_selected_ent(); + for(var_03 = 0;var_03 < level.createfx_options.size;var_03++) + { + var_04 = level.createfx_options[var_03]; + if(!isdefined(var_02.v[var_04["name"]])) + { + continue; + } + + var_00++; + if(var_00 < level.effect_list_offset) + { + continue; + } + + var_01++; + var_05 = var_01; + if(var_05 == 10) + { + var_05 = 0; + } + + if(common_scripts\_createfx::button_is_clicked(var_05 + "")) + { + prepare_option_for_change(var_04,var_01); + break; + } + + if(var_01 > level.effect_list_offset_max) + { + var_06 = 1; + break; + } + } +} + +//Function Number: 12 +prepare_option_for_change(param_00,param_01) +{ + if(param_00["name"] == "fxid") + { + setmenu("change_fxid"); + draw_effects_list(); + return; + } + + common_scripts\_createfx::createfx_centerprint("To change " + param_00["description"] + " on selected entities, type /fx newvalue"); + level.createfx_inputlocked = 1; + set_option_index(param_00["name"]); + setdvar("fx","nil"); + level.createfxhudelements[param_01 + 3][0].color = (1,1,0); +} + +//Function Number: 13 +menu_fx_option_set() +{ + if(getdvar("fx") == "nil") + { + return; + } + + var_00 = get_selected_option(); + var_01 = undefined; + if(var_00["type"] == "string") + { + var_01 = getdvar("fx"); + } + + if(var_00["type"] == "int") + { + var_01 = getdvarint("fx"); + } + + if(var_00["type"] == "float") + { + var_01 = getdvarfloat("fx"); + } + + apply_option_to_selected_fx(var_00,var_01); +} + +//Function Number: 14 +apply_option_to_selected_fx(param_00,param_01) +{ + for(var_02 = 0;var_02 < level.selected_fx_ents.size;var_02++) + { + var_03 = level.selected_fx_ents[var_02]; + if(mask(param_00["mask"],var_03.v["type"])) + { + var_03.v[param_00["name"]] = param_01; + } + } + + level.last_displayed_ent = undefined; + common_scripts\_createfx::update_selected_entities(); + common_scripts\_createfx::clear_settable_fx(); +} + +//Function Number: 15 +set_option_index(param_00) +{ + for(var_01 = 0;var_01 < level.createfx_options.size;var_01++) + { + if(level.createfx_options[var_01]["name"] != param_00) + { + continue; + } + + level.selected_fx_option_index = var_01; + return; + } +} + +//Function Number: 16 +get_selected_option() +{ + return level.createfx_options[level.selected_fx_option_index]; +} + +//Function Number: 17 +mask(param_00,param_01) +{ + return isdefined(level.createfxmasks[param_00][param_01]); +} + +//Function Number: 18 +addoption(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = []; + level.createfx_options[level.createfx_options.size] = var_41; +} + +//Function Number: 19 +get_option(param_00) +{ + for(var_01 = 0;var_01 < level.createfx_options.size;var_01++) + { + if(level.createfx_options[var_01]["name"] == param_00) + { + return level.createfx_options[var_01]; + } + } +} + +//Function Number: 20 +display_fx_info(param_00) +{ + if(!menu("none")) + { + return; + } + + common_scripts\_createfx::clear_fx_hudelements(); + common_scripts\_createfx::set_fx_hudelement("Name: " + param_00.v["fxid"]); + common_scripts\_createfx::set_fx_hudelement("Type: " + param_00.v["type"]); + common_scripts\_createfx::set_fx_hudelement("Origin: " + param_00.v["origin"]); + common_scripts\_createfx::set_fx_hudelement("Angles: " + param_00.v["angles"]); + if(entities_are_selected()) + { + var_01 = 0; + var_02 = 0; + var_03 = 0; + for(var_04 = 0;var_04 < level.createfx_options.size;var_04++) + { + var_05 = level.createfx_options[var_04]; + if(!isdefined(param_00.v[var_05["name"]])) + { + continue; + } + + var_01++; + if(var_01 < level.effect_list_offset) + { + continue; + } + + var_02++; + common_scripts\_createfx::set_fx_hudelement(var_02 + ". " + var_05["description"] + ": " + param_00.v[var_05["name"]]); + if(var_02 > level.effect_list_offset_max) + { + var_03 = 1; + break; + } + } + + if(var_01 > level.effect_list_offset_max) + { + common_scripts\_createfx::set_fx_hudelement("(m) More >"); + } + + common_scripts\_createfx::set_fx_hudelement("(a) Add >"); + common_scripts\_createfx::set_fx_hudelement("(x) Exit >"); + return; + } + + var_01 = 0; + var_03 = 0; + for(var_04 = 0;var_04 < level.createfx_options.size;var_04++) + { + var_05 = level.createfx_options[var_04]; + if(!isdefined(param_00.v[var_05["name"]])) + { + continue; + } + + var_01++; + common_scripts\_createfx::set_fx_hudelement(var_05["description"] + ": " + param_00.v[var_05["name"]]); + if(var_01 > level.createfx_hudelements) + { + break; + } + } +} + +//Function Number: 21 +display_fx_add_options(param_00) +{ + common_scripts\_createfx::clear_fx_hudelements(); + common_scripts\_createfx::set_fx_hudelement("Name: " + param_00.v["fxid"]); + common_scripts\_createfx::set_fx_hudelement("Type: " + param_00.v["type"]); + common_scripts\_createfx::set_fx_hudelement("Origin: " + param_00.v["origin"]); + common_scripts\_createfx::set_fx_hudelement("Angles: " + param_00.v["angles"]); + var_01 = 0; + var_02 = 0; + var_03 = 0; + if(level.effect_list_offset >= level.createfx_options.size) + { + level.effect_list_offset = 0; + } + + for(var_04 = 0;var_04 < level.createfx_options.size;var_04++) + { + var_05 = level.createfx_options[var_04]; + if(isdefined(param_00.v[var_05["name"]])) + { + continue; + } + + if(!mask(var_05["mask"],param_00.v["type"])) + { + continue; + } + + var_01++; + if(var_01 < level.effect_list_offset) + { + continue; + } + + if(var_02 >= level.effect_list_offset_max) + { + continue; + } + + var_02++; + var_06 = var_02; + if(var_06 == 10) + { + var_06 = 0; + } + + if(common_scripts\_createfx::button_is_clicked(var_06 + "")) + { + add_option_to_selected_entities(var_05); + menunone(); + level.last_displayed_ent = undefined; + return; + } + + common_scripts\_createfx::set_fx_hudelement(var_06 + ". " + var_05["description"]); + } + + if(var_01 > level.effect_list_offset_max) + { + common_scripts\_createfx::set_fx_hudelement("(m) More >"); + } + + common_scripts\_createfx::set_fx_hudelement("(x) Exit >"); +} + +//Function Number: 22 +add_option_to_selected_entities(param_00) +{ + var_01 = undefined; + for(var_02 = 0;var_02 < level.selected_fx_ents.size;var_02++) + { + var_03 = level.selected_fx_ents[var_02]; + if(mask(param_00["mask"],var_03.v["type"])) + { + var_03.v[param_00["name"]] = param_00["default"]; + } + } +} + +//Function Number: 23 +menunone() +{ + level.effect_list_offset = 0; + common_scripts\_createfx::clear_fx_hudelements(); + setmenu("none"); +} + +//Function Number: 24 +draw_effects_list() +{ + common_scripts\_createfx::clear_fx_hudelements(); + common_scripts\_createfx::set_fx_hudelement("Pick an effect:"); + var_00 = 0; + var_01 = 0; + var_02 = common_scripts\_createfx::func_get_level_fx(); + if(level.effect_list_offset >= var_02.size) + { + level.effect_list_offset = 0; + } + + for(var_03 = level.effect_list_offset;var_03 < var_02.size;var_03++) + { + var_00 = var_00 + 1; + common_scripts\_createfx::set_fx_hudelement(var_00 + ". " + var_02[var_03]); + if(var_00 >= level.effect_list_offset_max) + { + var_01 = 1; + break; + } + } + + if(var_02.size > level.effect_list_offset_max) + { + common_scripts\_createfx::set_fx_hudelement("(m) More >"); + } +} + +//Function Number: 25 +increment_list_offset() +{ + level.effect_list_offset = level.effect_list_offset + level.effect_list_offset_max; +} \ No newline at end of file diff --git a/MW3/Xbox/MP/common_scripts/_destructible.gsc b/MW3/Xbox/MP/common_scripts/_destructible.gsc new file mode 100644 index 0000000..90ab867 --- /dev/null +++ b/MW3/Xbox/MP/common_scripts/_destructible.gsc @@ -0,0 +1,4253 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: common_scripts\_destructible.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 141 + * Decompile Time: 2463 ms + * Timestamp: 10/27/2023 2:28:34 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level.destructiblespawnedentslimit = 50; + level.destructiblespawnedents = []; + level.currentcaralarms = 0; + level.commonstarttime = gettime(); + if(!isdefined(level.fast_destructible_explode)) + { + level.fast_destructible_explode = 0; + } + + if(!isdefined(level.func)) + { + level.func = []; + } + + var_00 = 1; + if(var_00) + { + find_destructibles(); + } + + var_01 = getentarray("delete_on_load","targetname"); + foreach(var_03 in var_01) + { + var_03 delete(); + } + + init_destroyed_count(); + init_destructible_frame_queue(); +} + +//Function Number: 2 +warn_about_old_destructible() +{ + wait 1; + var_00 = getentarray("destructible","targetname"); + if(var_00.size != 0) + { + foreach(var_02 in var_00) + { + } + } +} + +//Function Number: 3 +find_destructibles() +{ + var_00 = []; + switch(getdvar("mapname")) + { + case "mp_interchange": + break; + var_41[var_41.size] + (3.4,-912.9,646.9) + var_41[var_41.size] + (2096,1042.5,580.4) + var_41[var_41.size] + (2061.6,643.2,597.7) + var_41[var_41.size] + (1662.3,687.5,599.9) + var_41[var_41.size] + (1418.6,311.3,602.1) + var_41[var_41.size] + (-29.3,695.7,349) + var_41[var_41.size] + (-1030.6,2989.5,445.5) + var_41[var_41.size] + (-1347.8,2905.9,445.9) + var_41[var_41.size] + (-2966.6,1288.5,378) + var_41[var_41.size] + (-2038.3,613,378) + var_41[var_41.size] + (845.6,-1766.3,400.6) + var_41[var_41.size] + (1276.2,-1882.9,403) + var_41[var_41.size] + (1497.2,-2220.9,449.5) + var_41[var_41.size] + (2694.9,-3433,414.4) + var_41[var_41.size] + (2920.1,-3423.3,416.6) + var_41[var_41.size] + (1719.8,-711,328.5) + var_41[var_41.size] + (2451.2,-1034.6,345.6) + var_41[var_41.size] + (2852.6,-1220.7,345.6) + var_41[var_41.size] + (3503.7,-1634.5,345.6) + var_41[var_41.size] + (3333.3,-1743.4,345.6) + var_41[var_41.size] + (4070.5,-2049.2,349.2) + var_41[var_00.size] + (4172.8,-1887,345.9) + break; + } + + var_01 = []; + foreach(var_03 in level.struct) + { + if(isdefined(var_03.script_noteworthy) && var_03.script_noteworthy == "destructible_dot") + { + var_01[var_01.size] = var_03; + } + } + + var_05 = getentarray("destructible_vehicle","targetname"); + foreach(var_07 in var_05) + { + switch(getdvar("mapname")) + { + case "mp_interchange": + if(var_07.origin[2] > 150) + { + var_08 = 0; + foreach(var_0A in var_41) + { + if(int(var_07.origin[0]) == int(var_0A[0]) && int(var_07.origin[1]) == int(var_0A[1]) && int(var_07.origin[2]) == int(var_0A[2])) + { + var_08 = 1; + break; + } + } + + if(var_08) + { + break; + } + } + break; + } + + var_07 func_0A2A(); + var_07 setup_destructible_dots(var_01); + } + + var_0D = getentarray("destructible_toy","targetname"); + foreach(var_0F in var_0D) + { + var_0F func_0A2A(); + var_0F setup_destructible_dots(var_01); + } +} + +//Function Number: 4 +setup_destructible_dots(param_00) +{ + var_01 = self.destructibleinfo; + foreach(var_03 in param_00) + { + if(isdefined(level.destructible_type[var_01].destructible_dots)) + { + return; + } + + if(isdefined(var_03.script_parameters) && issubstr(var_03.script_parameters,"destructible_type") && issubstr(var_03.script_parameters,self.destructible_type)) + { + if(distancesquared(self.origin,var_03.origin) < 1) + { + var_04 = getentarray(var_03.target,"targetname"); + level.destructible_type[var_01].destructible_dots = []; + foreach(var_06 in var_04) + { + var_07 = var_06.script_index; + if(!isdefined(level.destructible_type[var_01].destructible_dots[var_07])) + { + level.destructible_type[var_01].destructible_dots[var_07] = []; + } + + var_08 = level.destructible_type[var_01].destructible_dots[var_07].size; + level.destructible_type[var_01].destructible_dots[var_07][var_08]["classname"] = var_06.classname; + level.destructible_type[var_01].destructible_dots[var_07][var_08]["origin"] = var_06.origin; + var_09 = common_scripts\utility::ter_op(isdefined(var_06.spawnflags),var_06.spawnflags,0); + level.destructible_type[var_01].destructible_dots[var_07][var_08]["spawnflags"] = var_09; + switch(var_06.classname) + { + case "trigger_radius": + level.destructible_type[var_01].destructible_dots[var_07][var_08]["radius"] = var_06.height; + level.destructible_type[var_01].destructible_dots[var_07][var_08]["height"] = var_06.height; + break; + + default: + break; + } + + var_06 delete(); + } + + break; + } + } + } +} + +//Function Number: 5 +func_0A2A(param_00) +{ + if(!isdefined(param_00)) + { + param_00 = 0; + } + + var_01 = undefined; + self.modeldummyon = 0; + add_damage_owner_recorder(); + self.destructibleinfo = common_scripts\_destructible_types::maketype(self.destructible_type); + if(self.destructibleinfo < 0) + { + return; + } + + if(!param_00) + { + precache_destructibles(); + } + + add_destructible_fx(); + if(isdefined(level.destructible_type[self.destructibleinfo].var_A2D)) + { + self.destructible_parts = []; + for(var_03 = 0;var_03 < level.destructible_type[self.destructibleinfo].var_A2D.size;var_03++) + { + self.destructible_parts[var_03] = spawnstruct(); + self.destructible_parts[var_03].v["currentState"] = 0; + if(isdefined(level.destructible_type[self.destructibleinfo].var_A2D[var_03][0].v["health"])) + { + self.destructible_parts[var_03].v["health"] = level.destructible_type[self.destructibleinfo].var_A2D[var_03][0].v["health"]; + } + + if(isdefined(level.destructible_type[self.destructibleinfo].var_A2D[var_03][0].v["random_dynamic_attachment_1"])) + { + var_04 = randomint(level.destructible_type[self.destructibleinfo].var_A2D[var_03][0].v["random_dynamic_attachment_1"].size); + var_05 = level.destructible_type[self.destructibleinfo].var_A2D[var_03][0].v["random_dynamic_attachment_tag"][var_04]; + var_06 = level.destructible_type[self.destructibleinfo].var_A2D[var_03][0].v["random_dynamic_attachment_1"][var_04]; + var_07 = level.destructible_type[self.destructibleinfo].var_A2D[var_03][0].v["random_dynamic_attachment_2"][var_04]; + var_08 = level.destructible_type[self.destructibleinfo].var_A2D[var_03][0].v["clipToRemove"][var_04]; + thread do_random_dynamic_attachment(var_05,var_06,var_07,var_08); + } + + if(var_03 == 0) + { + continue; + } + + var_09 = level.destructible_type[self.destructibleinfo].var_A2D[var_03][0].v["modelName"]; + var_0A = level.destructible_type[self.destructibleinfo].var_A2D[var_03][0].v["tagName"]; + for(var_0B = 1;isdefined(level.destructible_type[self.destructibleinfo].var_A2D[var_03][var_0B]);var_0B++) + { + var_0C = level.destructible_type[self.destructibleinfo].var_A2D[var_03][var_0B].v["tagName"]; + var_0D = level.destructible_type[self.destructibleinfo].var_A2D[var_03][var_0B].v["modelName"]; + if(isdefined(var_0C) && var_0C != var_0A) + { + hideapart(var_0C); + if(self.modeldummyon) + { + self.modeldummy hideapart(var_0C); + } + } + } + } + } + + if(isdefined(self.target)) + { + thread destructible_handles_collision_brushes(); + } + + if(self.code_classname != "script_vehicle") + { + self setcandamage(1); + } + + if(common_scripts\utility::issp()) + { + thread connecttraverses(); + } + + thread destructible_think(); +} + +//Function Number: 6 +destructible_create(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if(!isdefined(level.destructible_type)) + { + level.destructible_type = []; + } + + var_06 = level.destructible_type.size; + var_06 = level.destructible_type.size; + level.destructible_type[var_06] = spawnstruct(); + level.destructible_type[var_06].v["type"] = param_00; + level.destructible_type[var_06].var_A2D = []; + level.destructible_type[var_06].var_A2D[0][0] = spawnstruct(); + level.destructible_type[var_06].var_A2D[0][0].v["modelName"] = self.model; + level.destructible_type[var_06].var_A2D[0][0].v["tagName"] = param_01; + level.destructible_type[var_06].var_A2D[0][0].v["health"] = param_02; + level.destructible_type[var_06].var_A2D[0][0].v["validAttackers"] = param_03; + level.destructible_type[var_06].var_A2D[0][0].v["validDamageZone"] = param_04; + level.destructible_type[var_06].var_A2D[0][0].v["validDamageCause"] = param_05; + level.destructible_type[var_06].var_A2D[0][0].v["godModeAllowed"] = 1; + level.destructible_type[var_06].var_A2D[0][0].v["rotateTo"] = self.angles; + level.destructible_type[var_06].var_A2D[0][0].v["vehicle_exclude_anim"] = 0; +} + +//Function Number: 7 +destructible_part(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09) +{ + var_0A = level.destructible_type.size - 1; + var_0B = level.destructible_type[var_0A].var_A2D.size; + var_0C = 0; + destructible_info(var_0B,var_0C,param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,undefined,param_09); +} + +//Function Number: 8 +destructible_state(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07) +{ + var_08 = level.destructible_type.size - 1; + var_09 = level.destructible_type[var_08].var_A2D.size - 1; + var_0A = level.destructible_type[var_08].var_A2D[var_09].size; + if(!isdefined(param_00) && var_09 == 0) + { + param_00 = level.destructible_type[var_08].var_A2D[var_09][0].v["tagName"]; + } + + destructible_info(var_09,var_0A,param_00,param_01,param_02,param_03,param_04,param_05,undefined,undefined,param_06,param_07); +} + +//Function Number: 9 +destructible_fx(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if(!isdefined(param_02)) + { + param_02 = 1; + } + + if(!isdefined(param_04)) + { + param_04 = 0; + } + + if(!isdefined(param_05)) + { + param_05 = 0; + } + + var_06 = level.destructible_type.size - 1; + var_07 = level.destructible_type[var_06].var_A2D.size - 1; + var_08 = level.destructible_type[var_06].var_A2D[var_07].size - 1; + var_09 = 0; + if(isdefined(level.destructible_type[var_06].var_A2D[var_07][var_08].v["fx_filename"])) + { + if(isdefined(level.destructible_type[var_06].var_A2D[var_07][var_08].v["fx_filename"][param_04])) + { + var_09 = level.destructible_type[var_06].var_A2D[var_07][var_08].v["fx_filename"][param_04].size; + } + } + + if(isdefined(param_03)) + { + level.destructible_type[var_06].var_A2D[var_07][var_08].v["fx_valid_damagetype"][param_04][var_09] = param_03; + } + + level.destructible_type[var_06].var_A2D[var_07][var_08].v["fx_filename"][param_04][var_09] = param_01; + level.destructible_type[var_06].var_A2D[var_07][var_08].v["fx_tag"][param_04][var_09] = param_00; + level.destructible_type[var_06].var_A2D[var_07][var_08].v["fx_useTagAngles"][param_04][var_09] = param_02; + level.destructible_type[var_06].var_A2D[var_07][var_08].v["fx_cost"][param_04][var_09] = param_05; +} + +//Function Number: 10 +destructible_createdot_predefined(param_00) +{ + var_01 = level.destructible_type.size - 1; + var_02 = level.destructible_type[var_01].var_A2D.size - 1; + var_03 = level.destructible_type[var_01].var_A2D[var_02].size - 1; + if(!isdefined(level.destructible_type[var_01].var_A2D[var_02][var_03].v["dot"])) + { + level.destructible_type[var_01].var_A2D[var_02][var_03].v["dot"] = []; + } + + var_04 = level.destructible_type[var_01].var_A2D[var_02][var_03].v["dot"].size; + var_05 = createdot(); + var_05.type = "predefined"; + var_05.index = param_00; + level.destructible_type[var_01].var_A2D[var_02][var_03].v["dot"][var_04] = var_05; +} + +//Function Number: 11 +destructible_createdot_radius(param_00,param_01,param_02,param_03) +{ + var_04 = level.destructible_type.size - 1; + var_05 = level.destructible_type[var_04].var_A2D.size - 1; + var_06 = level.destructible_type[var_04].var_A2D[var_05].size - 1; + if(!isdefined(level.destructible_type[var_04].var_A2D[var_05][var_06].v["dot"])) + { + level.destructible_type[var_04].var_A2D[var_05][var_06].v["dot"] = []; + } + + var_07 = level.destructible_type[var_04].var_A2D[var_05][var_06].v["dot"].size; + var_08 = createdot_radius((0,0,0),param_01,param_02,param_03); + var_08.tag = param_00; + level.destructible_type[var_04].var_A2D[var_05][var_06].v["dot"][var_07] = var_08; +} + +//Function Number: 12 +destructible_setdot_ontick(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07) +{ + var_08 = level.destructible_type.size - 1; + var_09 = level.destructible_type[var_08].var_A2D.size - 1; + var_0A = level.destructible_type[var_08].var_A2D[var_09].size - 1; + var_0B = level.destructible_type[var_08].var_A2D[var_09][var_0A].v["dot"].size - 1; + var_0C = level.destructible_type[var_08].var_A2D[var_09][var_0A].v["dot"][var_0B]; + var_0C setdot_ontick(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07); + initdot(param_06); +} + +//Function Number: 13 +destructible_setdot_ontickfunc(param_00,param_01,param_02) +{ + var_03 = level.destructible_type.size - 1; + var_04 = level.destructible_type[var_03].var_A2D.size - 1; + var_05 = level.destructible_type[var_03].var_A2D[var_04].size - 1; + var_06 = level.destructible_type[var_03].var_A2D[var_04][var_05].v["dot"].size - 1; + var_07 = level.destructible_type[var_03].var_A2D[var_04][var_05].v["dot"][var_06]; + var_08 = var_07.ticks.size; + var_07.ticks[var_08].onenterfunc = param_00; + var_07.ticks[var_08].onexitfunc = param_01; + var_07.ticks[var_08].ondeathfunc = param_02; +} + +//Function Number: 14 +destructible_builddot_ontick(param_00,param_01) +{ + var_02 = level.destructible_type.size - 1; + var_03 = level.destructible_type[var_02].var_A2D.size - 1; + var_04 = level.destructible_type[var_02].var_A2D[var_03].size - 1; + var_05 = level.destructible_type[var_02].var_A2D[var_03][var_04].v["dot"].size - 1; + var_06 = level.destructible_type[var_02].var_A2D[var_03][var_04].v["dot"][var_05]; + var_06 builddot_ontick(param_00,param_01); +} + +//Function Number: 15 +destructible_builddot_startloop(param_00) +{ + var_01 = level.destructible_type.size - 1; + var_02 = level.destructible_type[var_01].var_A2D.size - 1; + var_03 = level.destructible_type[var_01].var_A2D[var_02].size - 1; + var_04 = level.destructible_type[var_01].var_A2D[var_02][var_03].v["dot"].size - 1; + var_05 = level.destructible_type[var_01].var_A2D[var_02][var_03].v["dot"][var_04]; + var_05 builddot_startloop(param_00); +} + +//Function Number: 16 +destructible_builddot_damage(param_00,param_01,param_02,param_03,param_04,param_05) +{ + var_06 = level.destructible_type.size - 1; + var_07 = level.destructible_type[var_06].var_A2D.size - 1; + var_08 = level.destructible_type[var_06].var_A2D[var_07].size - 1; + var_09 = level.destructible_type[var_06].var_A2D[var_07][var_08].v["dot"].size - 1; + var_0A = level.destructible_type[var_06].var_A2D[var_07][var_08].v["dot"][var_09]; + var_0A builddot_damage(param_00,param_01,param_02,param_03,param_04,param_05); +} + +//Function Number: 17 +destructible_builddot_wait(param_00) +{ + var_01 = level.destructible_type.size - 1; + var_02 = level.destructible_type[var_01].var_A2D.size - 1; + var_03 = level.destructible_type[var_01].var_A2D[var_02].size - 1; + var_04 = level.destructible_type[var_01].var_A2D[var_02][var_03].v["dot"].size - 1; + var_05 = level.destructible_type[var_01].var_A2D[var_02][var_03].v["dot"][var_04]; + var_05 builddot_wait(param_00); +} + +//Function Number: 18 +destructible_loopfx(param_00,param_01,param_02,param_03) +{ + if(!isdefined(param_03)) + { + param_03 = 0; + } + + var_04 = level.destructible_type.size - 1; + var_05 = level.destructible_type[var_04].var_A2D.size - 1; + var_06 = level.destructible_type[var_04].var_A2D[var_05].size - 1; + var_07 = 0; + if(isdefined(level.destructible_type[var_04].var_A2D[var_05][var_06].v["loopfx_filename"])) + { + var_07 = level.destructible_type[var_04].var_A2D[var_05][var_06].v["loopfx_filename"].size; + } + + level.destructible_type[var_04].var_A2D[var_05][var_06].v["loopfx_filename"][var_07] = param_01; + level.destructible_type[var_04].var_A2D[var_05][var_06].v["loopfx_tag"][var_07] = param_00; + level.destructible_type[var_04].var_A2D[var_05][var_06].v["loopfx_rate"][var_07] = param_02; + level.destructible_type[var_04].var_A2D[var_05][var_06].v["loopfx_cost"][var_07] = param_03; +} + +//Function Number: 19 +destructible_healthdrain(param_00,param_01,param_02,param_03) +{ + var_04 = level.destructible_type.size - 1; + var_05 = level.destructible_type[var_04].var_A2D.size - 1; + var_06 = level.destructible_type[var_04].var_A2D[var_05].size - 1; + level.destructible_type[var_04].var_A2D[var_05][var_06].v["healthdrain_amount"] = param_00; + level.destructible_type[var_04].var_A2D[var_05][var_06].v["healthdrain_interval"] = param_01; + level.destructible_type[var_04].var_A2D[var_05][var_06].v["badplace_radius"] = param_02; + level.destructible_type[var_04].var_A2D[var_05][var_06].v["badplace_team"] = param_03; +} + +//Function Number: 20 +destructible_sound(param_00,param_01,param_02) +{ + var_03 = level.destructible_type.size - 1; + var_04 = level.destructible_type[var_03].var_A2D.size - 1; + var_05 = level.destructible_type[var_03].var_A2D[var_04].size - 1; + if(!isdefined(param_02)) + { + param_02 = 0; + } + + if(!isdefined(level.destructible_type[var_03].var_A2D[var_04][var_05].v["sound"])) + { + level.destructible_type[var_03].var_A2D[var_04][var_05].v["sound"] = []; + level.destructible_type[var_03].var_A2D[var_04][var_05].v["soundCause"] = []; + } + + if(!isdefined(level.destructible_type[var_03].var_A2D[var_04][var_05].v["sound"][param_02])) + { + level.destructible_type[var_03].var_A2D[var_04][var_05].v["sound"][param_02] = []; + level.destructible_type[var_03].var_A2D[var_04][var_05].v["soundCause"][param_02] = []; + } + + var_06 = level.destructible_type[var_03].var_A2D[var_04][var_05].v["sound"][param_02].size; + level.destructible_type[var_03].var_A2D[var_04][var_05].v["sound"][param_02][var_06] = param_00; + level.destructible_type[var_03].var_A2D[var_04][var_05].v["soundCause"][param_02][var_06] = param_01; + if(getdvarint("precache_destructible",1)) + { + function_01C7(param_00); + var_07 = level.destructible_type[var_03].var_A2D[var_04][var_05].v["tagName"]; + if(isdefined(var_07)) + { + function_01C6(var_07); + } + } +} + +//Function Number: 21 +destructible_loopsound(param_00,param_01) +{ + var_02 = level.destructible_type.size - 1; + var_03 = level.destructible_type[var_02].var_A2D.size - 1; + var_04 = level.destructible_type[var_02].var_A2D[var_03].size - 1; + if(!isdefined(level.destructible_type[var_02].var_A2D[var_03][var_04].v["loopsound"])) + { + level.destructible_type[var_02].var_A2D[var_03][var_04].v["loopsound"] = []; + level.destructible_type[var_02].var_A2D[var_03][var_04].v["loopsoundCause"] = []; + } + + var_05 = level.destructible_type[var_02].var_A2D[var_03][var_04].v["loopsound"].size; + level.destructible_type[var_02].var_A2D[var_03][var_04].v["loopsound"][var_05] = param_00; + level.destructible_type[var_02].var_A2D[var_03][var_04].v["loopsoundCause"][var_05] = param_01; + if(getdvarint("precache_destructible",1)) + { + function_01C7(param_00); + var_06 = level.destructible_type[var_02].var_A2D[var_03][var_04].v["tagName"]; + if(isdefined(var_06)) + { + function_01C6(var_06); + } + } +} + +//Function Number: 22 +destructible_anim(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08) +{ + if(!isdefined(param_03)) + { + param_03 = 0; + } + + if(!isdefined(param_04)) + { + param_04 = 0; + } + + var_09 = []; + func_0A32("animation",var_41); +} + +//Function Number: 23 +destructible_spotlight(param_00) +{ + var_01 = []; + var_02 = []; + var_41["dvars"] = var_02; + add_keypairs_to_destructible(var_41); +} + +//Function Number: 24 +add_key_to_destructible(param_00,param_01) +{ + var_02 = []; + add_keypairs_to_destructible(var_41); +} + +//Function Number: 25 +add_keypairs_to_destructible(param_00) +{ + var_01 = level.destructible_type.size - 1; + var_02 = level.destructible_type[var_01].var_A2D.size - 1; + var_03 = level.destructible_type[var_01].var_A2D[var_02].size - 1; + foreach(var_06, var_05 in param_00) + { + level.destructible_type[var_01].var_A2D[var_02][var_03].v[var_06] = var_05; + } +} + +//Function Number: 26 +func_0A32(param_00,param_01) +{ + var_02 = level.destructible_type.size - 1; + var_03 = level.destructible_type[var_02].var_A2D.size - 1; + var_04 = level.destructible_type[var_02].var_A2D[var_03].size - 1; + var_05 = level.destructible_type[var_02].var_A2D[var_03][var_04].v; + if(!isdefined(var_05[param_00])) + { + } + + var_29[param_01] = var_41[param_01].size; + level.destructible_type[var_04].var_A2D[var_05][var_41].v = var_29; +} + +//Function Number: 27 +destructible_car_alarm() +{ + var_00 = level.destructible_type.size - 1; + var_01 = level.destructible_type[var_00].var_A2D.size - 1; + var_02 = level.destructible_type[var_00].var_A2D[var_01].size - 1; + level.destructible_type[var_00].var_A2D[var_01][var_02].v["triggerCarAlarm"] = 1; +} + +//Function Number: 28 +destructible_lights_out(param_00) +{ + if(!isdefined(param_00)) + { + param_00 = 256; + } + + var_01 = level.destructible_type.size - 1; + var_02 = level.destructible_type[var_01].var_A2D.size - 1; + var_03 = level.destructible_type[var_01].var_A2D[var_02].size - 1; + level.destructible_type[var_01].var_A2D[var_02][var_03].v["break_nearby_lights"] = param_00; +} + +//Function Number: 29 +random_dynamic_attachment(param_00,param_01,param_02,param_03) +{ + if(!isdefined(param_02)) + { + param_02 = ""; + } + + var_04 = level.destructible_type.size - 1; + var_05 = level.destructible_type[var_04].var_A2D.size - 1; + var_06 = 0; + if(!isdefined(level.destructible_type[var_04].var_A2D[var_05][var_06].v["random_dynamic_attachment_1"])) + { + level.destructible_type[var_04].var_A2D[var_05][var_06].v["random_dynamic_attachment_1"] = []; + level.destructible_type[var_04].var_A2D[var_05][var_06].v["random_dynamic_attachment_2"] = []; + level.destructible_type[var_04].var_A2D[var_05][var_06].v["random_dynamic_attachment_tag"] = []; + } + + var_07 = level.destructible_type[var_04].var_A2D[var_05][var_06].v["random_dynamic_attachment_1"].size; + level.destructible_type[var_04].var_A2D[var_05][var_06].v["random_dynamic_attachment_1"][var_07] = param_01; + level.destructible_type[var_04].var_A2D[var_05][var_06].v["random_dynamic_attachment_2"][var_07] = param_02; + level.destructible_type[var_04].var_A2D[var_05][var_06].v["random_dynamic_attachment_tag"][var_07] = param_00; + level.destructible_type[var_04].var_A2D[var_05][var_06].v["clipToRemove"][var_07] = param_03; +} + +//Function Number: 30 +destructible_physics(param_00,param_01) +{ + var_02 = level.destructible_type.size - 1; + var_03 = level.destructible_type[var_02].var_A2D.size - 1; + var_04 = level.destructible_type[var_02].var_A2D[var_03].size - 1; + if(!isdefined(level.destructible_type[var_02].var_A2D[var_03][var_04].v["physics"])) + { + level.destructible_type[var_02].var_A2D[var_03][var_04].v["physics"] = []; + level.destructible_type[var_02].var_A2D[var_03][var_04].v["physics_tagName"] = []; + level.destructible_type[var_02].var_A2D[var_03][var_04].v["physics_velocity"] = []; + } + + var_05 = level.destructible_type[var_02].var_A2D[var_03][var_04].v["physics"].size; + level.destructible_type[var_02].var_A2D[var_03][var_04].v["physics"][var_05] = 1; + level.destructible_type[var_02].var_A2D[var_03][var_04].v["physics_tagName"][var_05] = param_00; + level.destructible_type[var_02].var_A2D[var_03][var_04].v["physics_velocity"][var_05] = param_01; +} + +//Function Number: 31 +destructible_splash_damage_scaler(param_00) +{ + var_01 = level.destructible_type.size - 1; + var_02 = level.destructible_type[var_01].var_A2D.size - 1; + var_03 = level.destructible_type[var_01].var_A2D[var_02].size - 1; + level.destructible_type[var_01].var_A2D[var_02][var_03].v["splash_damage_scaler"] = param_00; +} + +//Function Number: 32 +func_0976(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A,param_0B) +{ + var_0C = level.destructible_type.size - 1; + var_0D = level.destructible_type[var_0C].var_A2D.size - 1; + var_0E = level.destructible_type[var_0C].var_A2D[var_0D].size - 1; + if(common_scripts\utility::issp()) + { + level.destructible_type[var_0C].var_A2D[var_0D][var_0E].v["explode_range"] = param_02; + } + else + { + level.destructible_type[var_0C].var_A2D[var_0D][var_0E].v["explode_range"] = param_03; + } + + level.destructible_type[var_0C].var_A2D[var_0D][var_0E].v["explode"] = 1; + level.destructible_type[var_0C].var_A2D[var_0D][var_0E].v["explode_force_min"] = param_00; + level.destructible_type[var_0C].var_A2D[var_0D][var_0E].v["explode_force_max"] = param_01; + level.destructible_type[var_0C].var_A2D[var_0D][var_0E].v["explode_mindamage"] = param_04; + level.destructible_type[var_0C].var_A2D[var_0D][var_0E].v["explode_maxdamage"] = param_05; + level.destructible_type[var_0C].var_A2D[var_0D][var_0E].v["continueDamage"] = param_06; + level.destructible_type[var_0C].var_A2D[var_0D][var_0E].v["originOffset"] = param_07; + level.destructible_type[var_0C].var_A2D[var_0D][var_0E].v["earthQuakeScale"] = param_08; + level.destructible_type[var_0C].var_A2D[var_0D][var_0E].v["earthQuakeRadius"] = param_09; + level.destructible_type[var_0C].var_A2D[var_0D][var_0E].v["originOffset3d"] = param_0A; + level.destructible_type[var_0C].var_A2D[var_0D][var_0E].v["delaytime"] = param_0B; +} + +//Function Number: 33 +destructible_info(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(param_03)) + { + param_03 = tolower(param_03); + } + + var_0D = level.destructible_type.size - 1; + level.destructible_type[var_0D].var_A2D[param_00][param_01] = spawnstruct(); + level.destructible_type[var_0D].var_A2D[param_00][param_01].v["modelName"] = param_03; + level.destructible_type[var_0D].var_A2D[param_00][param_01].v["tagName"] = param_02; + level.destructible_type[var_0D].var_A2D[param_00][param_01].v["health"] = param_04; + level.destructible_type[var_0D].var_A2D[param_00][param_01].v["validAttackers"] = param_05; + level.destructible_type[var_0D].var_A2D[param_00][param_01].v["validDamageZone"] = param_06; + level.destructible_type[var_0D].var_A2D[param_00][param_01].v["validDamageCause"] = param_07; + level.destructible_type[var_0D].var_A2D[param_00][param_01].v["alsoDamageParent"] = param_08; + level.destructible_type[var_0D].var_A2D[param_00][param_01].v["physicsOnExplosion"] = param_09; + level.destructible_type[var_0D].var_A2D[param_00][param_01].v["grenadeImpactDeath"] = param_0A; + level.destructible_type[var_0D].var_A2D[param_00][param_01].v["godModeAllowed"] = 0; + level.destructible_type[var_0D].var_A2D[param_00][param_01].v["splashRotation"] = param_0B; + level.destructible_type[var_0D].var_A2D[param_00][param_01].v["receiveDamageFromParent"] = param_0C; +} + +//Function Number: 34 +precache_destructibles() +{ + if(!isdefined(level.destructible_type[self.destructibleinfo].var_A2D)) + { + return; + } + + for(var_00 = 0;var_00 < level.destructible_type[self.destructibleinfo].var_A2D.size;var_00++) + { + for(var_01 = 0;var_01 < level.destructible_type[self.destructibleinfo].var_A2D[var_00].size;var_01++) + { + if(level.destructible_type[self.destructibleinfo].var_A2D[var_00].size <= var_01) + { + continue; + } + + if(isdefined(level.destructible_type[self.destructibleinfo].var_A2D[var_00][var_01].v["modelName"])) + { + precachemodel(level.destructible_type[self.destructibleinfo].var_A2D[var_00][var_01].v["modelName"]); + } + + if(isdefined(level.destructible_type[self.destructibleinfo].var_A2D[var_00][var_01].v["animation"])) + { + var_02 = level.destructible_type[self.destructibleinfo].var_A2D[var_00][var_01].v["animation"]; + foreach(var_04 in var_02) + { + if(isdefined(var_04["mpAnim"])) + { + common_scripts\utility::noself_func("precacheMpAnim",var_04["mpAnim"]); + } + } + } + + if(isdefined(level.destructible_type[self.destructibleinfo].var_A2D[var_00][var_01].v["random_dynamic_attachment_1"])) + { + foreach(var_07 in level.destructible_type[self.destructibleinfo].var_A2D[var_00][var_01].v["random_dynamic_attachment_1"]) + { + if(isdefined(var_07) && var_07 != "") + { + precachemodel(var_07); + precachemodel(var_07 + "_destroy"); + } + } + + foreach(var_07 in level.destructible_type[self.destructibleinfo].var_A2D[var_00][var_01].v["random_dynamic_attachment_2"]) + { + if(isdefined(var_07) && var_07 != "") + { + precachemodel(var_07); + precachemodel(var_07 + "_destroy"); + } + } + } + } + } +} + +//Function Number: 35 +add_destructible_fx() +{ + if(!isdefined(level.destructible_type[self.destructibleinfo].var_A2D)) + { + return; + } + + for(var_00 = 0;var_00 < level.destructible_type[self.destructibleinfo].var_A2D.size;var_00++) + { + for(var_01 = 0;var_01 < level.destructible_type[self.destructibleinfo].var_A2D[var_00].size;var_01++) + { + if(level.destructible_type[self.destructibleinfo].var_A2D[var_00].size <= var_01) + { + continue; + } + + var_02 = level.destructible_type[self.destructibleinfo].var_A2D[var_00][var_01]; + if(isdefined(var_02.v["fx_filename"])) + { + for(var_03 = 0;var_03 < var_02.v["fx_filename"].size;var_03++) + { + var_04 = var_02.v["fx_filename"][var_03]; + if(isdefined(var_04)) + { + if(isdefined(var_02.v["fx"]) && isdefined(var_02.v["fx"][var_03]) && var_02.v["fx"][var_03].size == var_04.size) + { + continue; + } + + foreach(var_09, var_06 in var_04) + { + var_07 = common_scripts\utility::_loadfx(var_06); + var_02.v["fx"][var_03][var_09] = var_07; + if(getdvarint("precache_destructible",1)) + { + var_08 = var_02.v["fx_tag"][var_03][var_09]; + if(isdefined(var_08)) + { + function_01C5(var_07,var_08); + } + } + } + } + } + } + + var_0A = var_02.v["loopfx_filename"]; + if(isdefined(var_0A)) + { + if(isdefined(var_02.v["loopfx"]) && var_02.v["loopfx"].size == var_0A.size) + { + continue; + } + + foreach(var_09, var_0C in var_0A) + { + var_0D = common_scripts\utility::_loadfx(var_0C); + var_02.v["loopfx"][var_09] = var_0D; + if(getdvarint("precache_destructible",1)) + { + var_0E = var_02.v["loopfx_tag"][var_09]; + function_01C5(var_0D,var_0E); + } + } + } + } + } +} + +//Function Number: 36 +candamagedestructible(param_00) +{ + foreach(var_02 in self.destructibles) + { + if(var_02 == param_00) + { + return 1; + } + } + + return 0; +} + +//Function Number: 37 +destructible_think() +{ + var_00 = 0; + var_01 = self.model; + var_02 = undefined; + var_03 = self.origin; + var_04 = undefined; + var_05 = undefined; + var_06 = undefined; + destructible_update_part(var_00,var_01,var_02,var_03,var_04,var_05,var_06); + self endon("stop_taking_damage"); + for(;;) + { + var_00 = undefined; + var_05 = undefined; + var_04 = undefined; + var_03 = undefined; + var_07 = undefined; + var_01 = undefined; + var_02 = undefined; + var_08 = undefined; + var_09 = undefined; + self waittill("damage",var_00,var_05,var_04,var_03,var_07,var_01,var_02,var_08,var_09); + if(!isdefined(var_00)) + { + continue; + } + + if(isdefined(var_05) && isdefined(var_05.type) && var_05.type == "soft_landing" && !var_05 candamagedestructible(self)) + { + continue; + } + + if(common_scripts\utility::issp()) + { + var_00 = var_00 * 0.5; + } + else + { + var_00 = var_00 * 1; + } + + if(var_00 <= 0) + { + continue; + } + + if(common_scripts\utility::issp()) + { + if(isdefined(var_05) && isplayer(var_05)) + { + self.damageowner = var_05; + } + } + else if(isdefined(var_05) && isplayer(var_05)) + { + self.damageowner = var_05; + } + else if(isdefined(var_05) && isdefined(var_05.gunner) && isplayer(var_05.gunner)) + { + self.damageowner = var_05.gunner; + } + + var_07 = getdamagetype(var_07); + if(is_shotgun_damage(var_05,var_07)) + { + if(common_scripts\utility::issp()) + { + var_00 = var_00 * 8; + } + else + { + var_00 = var_00 * 4; + } + } + + if(!isdefined(var_01) || var_01 == "") + { + var_01 = self.model; + } + + if(isdefined(var_02) && var_02 == "") + { + if(isdefined(var_08) && var_08 != "" && var_08 != "tag_body" && var_08 != "body_animate_jnt") + { + var_02 = var_08; + } + else + { + var_02 = undefined; + } + + var_0A = level.destructible_type[self.destructibleinfo].var_A2D[0][0].v["tagName"]; + if(isdefined(var_0A) && isdefined(var_08) && var_0A == var_08) + { + var_02 = undefined; + } + } + + if(var_07 == "splash") + { + if(isdefined(level.destructible_type[self.destructibleinfo].var_A2D[0][0].v["splash_damage_scaler"])) + { + var_00 = var_00 * level.destructible_type[self.destructibleinfo].var_A2D[0][0].v["splash_damage_scaler"]; + } + else if(common_scripts\utility::issp()) + { + var_00 = var_00 * 9; + } + else + { + var_00 = var_00 * 13; + } + + destructible_splash_damage(int(var_00),var_03,var_04,var_05,var_07); + continue; + } + + thread destructible_update_part(int(var_00),var_01,var_02,var_03,var_04,var_05,var_07); + } +} + +//Function Number: 38 +is_shotgun_damage(param_00,param_01) +{ + if(param_01 != "bullet") + { + return 0; + } + + if(!isdefined(param_00)) + { + return 0; + } + + var_02 = undefined; + if(isplayer(param_00)) + { + var_02 = param_00 getcurrentweapon(); + } + else if(isdefined(level.enable_ai_shotgun_destructible_damage) && level.enable_ai_shotgun_destructible_damage) + { + if(isdefined(param_00.weapon)) + { + var_02 = param_00.weapon; + } + } + + if(!isdefined(var_02)) + { + return 0; + } + + var_03 = weaponclass(var_02); + if(isdefined(var_03) && var_03 == "spread") + { + return 1; + } + + return 0; +} + +//Function Number: 39 +getpartandstateindex(param_00,param_01) +{ + var_02 = spawnstruct(); + var_02.v = []; + var_03 = -1; + var_04 = -1; + if(tolower(param_00) == tolower(self.model) && !isdefined(param_01)) + { + param_00 = self.model; + param_01 = undefined; + var_03 = 0; + var_04 = 0; + } + + for(var_05 = 0;var_05 < level.destructible_type[self.destructibleinfo].var_A2D.size;var_05++) + { + var_04 = self.destructible_parts[var_05].v["currentState"]; + if(level.destructible_type[self.destructibleinfo].var_A2D[var_05].size <= var_04) + { + continue; + } + + if(!isdefined(param_01)) + { + continue; + } + + if(isdefined(level.destructible_type[self.destructibleinfo].var_A2D[var_05][var_04].v["tagName"])) + { + var_06 = level.destructible_type[self.destructibleinfo].var_A2D[var_05][var_04].v["tagName"]; + if(tolower(var_06) == tolower(param_01)) + { + var_03 = var_05; + break; + } + } + } + + var_02.v["stateIndex"] = var_04; + var_02.v["partIndex"] = var_03; + return var_02; +} + +//Function Number: 40 +destructible_update_part(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07) +{ + if(!isdefined(self.destructible_parts)) + { + return; + } + + if(self.destructible_parts.size == 0) + { + return; + } + + if(level.fast_destructible_explode) + { + self endon("destroyed"); + } + + var_08 = getpartandstateindex(param_01,param_02); + var_09 = var_08.v["stateIndex"]; + var_0A = var_08.v["partIndex"]; + if(var_0A < 0) + { + return; + } + + var_0B = var_09; + var_0C = 0; + var_0D = 0; + for(;;) + { + var_09 = self.destructible_parts[var_0A].v["currentState"]; + if(!isdefined(level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_09])) + { + break; + } + + if(isdefined(level.destructible_type[self.destructibleinfo].var_A2D[var_0A][0].v["alsoDamageParent"])) + { + if(getdamagetype(param_06) != "splash") + { + var_0E = level.destructible_type[self.destructibleinfo].var_A2D[var_0A][0].v["alsoDamageParent"]; + var_0F = int(param_00 * var_0E); + thread notifydamageafterframe(var_0F,param_05,param_04,param_03,param_06,"",""); + } + } + + if(getdamagetype(param_06) != "splash") + { + foreach(var_11 in level.destructible_type[self.destructibleinfo].var_A2D) + { + if(!isdefined(var_11[0].v["receiveDamageFromParent"])) + { + continue; + } + + if(!isdefined(var_11[0].v["tagName"])) + { + continue; + } + + var_0E = var_11[0].v["receiveDamageFromParent"]; + var_12 = int(param_00 * var_0E); + var_13 = var_11[0].v["tagName"]; + thread notifydamageafterframe(var_12,param_05,param_04,param_03,param_06,"",var_13); + } + } + + if(!isdefined(level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_09].v["health"])) + { + break; + } + + if(!isdefined(self.destructible_parts[var_0A].v["health"])) + { + break; + } + + if(var_0C) + { + self.destructible_parts[var_0A].v["health"] = level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_09].v["health"]; + } + + var_0C = 0; + if(isdefined(level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_09].v["grenadeImpactDeath"]) && param_06 == "impact") + { + param_00 = 100000000; + } + + var_15 = self.destructible_parts[var_0A].v["health"]; + var_16 = isattackervalid(var_0A,var_09,param_05); + if(var_16) + { + var_17 = isvaliddamagecause(var_0A,var_09,param_06); + if(var_17) + { + if(isdefined(param_05)) + { + if(isplayer(param_05)) + { + self.player_damage = self.player_damage + param_00; + } + else if(param_05 != self) + { + self.non_player_damage = self.non_player_damage + param_00; + } + } + + if(isdefined(param_06)) + { + if(param_06 == "melee" || param_06 == "impact") + { + param_00 = 100000; + } + } + + self.destructible_parts[var_0A].v["health"] = self.destructible_parts[var_0A].v["health"] - param_00; + } + } + + if(self.destructible_parts[var_0A].v["health"] > 0) + { + return; + } + + if(isdefined(param_07)) + { + param_07.v["fxcost"] = get_part_fx_cost_for_action_state(var_0A,self.destructible_parts[var_0A].v["currentState"]); + add_destructible_to_frame_queue(self,param_07,param_00); + if(!isdefined(self.waiting_for_queue)) + { + self.waiting_for_queue = 1; + } + else + { + self.waiting_for_queue++; + } + + self waittill("queue_processed",var_18); + self.waiting_for_queue--; + if(self.waiting_for_queue == 0) + { + self.waiting_for_queue = undefined; + } + + if(!var_18) + { + self.destructible_parts[var_0A].v["health"] = var_15; + return; + } + } + + param_00 = int(abs(self.destructible_parts[var_0A].v["health"])); + if(param_00 < 0) + { + return; + } + + self.destructible_parts[var_0A].v["currentState"]++; + var_09 = self.destructible_parts[var_0A].v["currentState"]; + var_19 = var_09 - 1; + var_1A = undefined; + if(isdefined(level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19])) + { + var_1A = level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v; + } + + var_1B = undefined; + if(isdefined(level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_09])) + { + var_1B = level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_09].v; + } + + if(!isdefined(level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19])) + { + return; + } + + if(isdefined(level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["explode"])) + { + self.exploding = 1; + } + + if(isdefined(self.loopingsoundstopnotifies) && isdefined(self.loopingsoundstopnotifies[func_0A7A(var_0A)])) + { + for(var_1C = 0;var_1C < self.loopingsoundstopnotifies[func_0A7A(var_0A)].size;var_1C++) + { + self notify(self.loopingsoundstopnotifies[func_0A7A(var_0A)][var_1C]); + if(common_scripts\utility::issp() && self.modeldummyon) + { + self.modeldummy notify(self.loopingsoundstopnotifies[func_0A7A(var_0A)][var_1C]); + } + } + + self.loopingsoundstopnotifies[func_0A7A(var_0A)] = undefined; + } + + if(isdefined(var_1A["break_nearby_lights"])) + { + destructible_get_my_breakable_light(var_1A["break_nearby_lights"]); + } + + if(isdefined(level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_09])) + { + if(var_0A == 0) + { + var_1D = var_1B["modelName"]; + if(isdefined(var_1D) && var_1D != self.model) + { + self setmodel(var_1D); + if(common_scripts\utility::issp() && self.modeldummyon) + { + self.modeldummy setmodel(var_1D); + } + + destructible_splash_rotatation(var_1B); + } + } + else + { + hideapart(param_02); + if(common_scripts\utility::issp() && self.modeldummyon) + { + self.modeldummy hideapart(param_02); + } + + param_02 = var_1B["tagName"]; + if(isdefined(param_02)) + { + showapart(param_02); + if(common_scripts\utility::issp() && self.modeldummyon) + { + self.modeldummy showapart(param_02); + } + } + } + } + + var_1E = get_dummy(); + if(isdefined(self.exploding)) + { + clear_anims(var_1E); + } + + var_1F = destructible_animation_think(var_1A,var_1E,param_06,var_0A); + var_1F = destructible_fx_think(var_1A,var_1E,param_06,var_0A,var_1F); + var_1F = destructible_sound_think(var_1A,var_1E,param_06,var_1F); + if(isdefined(level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["loopfx"])) + { + var_20 = level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["loopfx_filename"].size; + if(var_20 > 0) + { + self notify("FX_State_Change" + var_0A); + } + + for(var_21 = 0;var_21 < var_20;var_21++) + { + var_22 = level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["loopfx"][var_21]; + var_23 = level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["loopfx_tag"][var_21]; + var_24 = level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["loopfx_rate"][var_21]; + thread loopfx_ontag(var_22,var_23,var_24,var_0A); + } + } + + if(isdefined(level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["loopsound"])) + { + for(var_1C = 0;var_1C < level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["loopsound"].size;var_1C++) + { + var_25 = isvalidsoundcause("loopsoundCause",var_1A,var_1C,param_06); + if(var_25) + { + var_26 = level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["loopsound"][var_1C]; + var_27 = level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["tagName"]; + thread play_loop_sound_on_destructible(var_26,var_27); + if(!isdefined(self.loopingsoundstopnotifies)) + { + self.loopingsoundstopnotifies = []; + } + + if(!isdefined(self.loopingsoundstopnotifies[func_0A7A(var_0A)])) + { + self.loopingsoundstopnotifies[func_0A7A(var_0A)] = []; + } + + var_28 = self.loopingsoundstopnotifies[func_0A7A(var_0A)].size; + self.loopingsoundstopnotifies[func_0A7A(var_0A)][var_28] = "stop sound" + var_26; + } + } + } + + if(isdefined(level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["triggerCarAlarm"])) + { + thread do_car_alarm(); + } + + if(isdefined(level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["break_nearby_lights"])) + { + thread break_nearest_light(); + } + + if(isdefined(level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["healthdrain_amount"])) + { + self notify("Health_Drain_State_Change" + var_0A); + var_29 = level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["healthdrain_amount"]; + var_2A = level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["healthdrain_interval"]; + var_2B = level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["modelName"]; + var_2C = level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["tagName"]; + var_2D = level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["badplace_radius"]; + var_2E = level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["badplace_team"]; + if(var_29 > 0) + { + thread health_drain(var_29,var_2A,var_0A,var_2B,var_2C,var_2D,var_2E); + } + } + + var_2F = level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["dot"]; + if(isdefined(var_2F)) + { + foreach(var_31 in var_2F) + { + var_32 = var_31.index; + if(var_31.type == "predefined" && isdefined(var_32)) + { + var_33 = []; + foreach(var_35 in level.destructible_type[self.destructibleinfo].destructible_dots[var_32]) + { + var_36 = var_35["classname"]; + var_37 = undefined; + switch(var_36) + { + case "trigger_radius": + var_38 = var_35["origin"]; + var_39 = var_35["spawnflags"]; + var_3A = var_35["radius"]; + var_3B = var_35["height"]; + var_37 = createdot_radius(self.origin + var_38,var_39,var_3A,var_3B); + var_37.ticks = var_31.ticks; + var_33[var_33.size] = var_37; + break; + + default: + break; + } + } + + level thread startdot_group(var_33); + continue; + } + + if(isdefined(var_31)) + { + if(isdefined(var_31.tag)) + { + var_31 setdot_origin(self gettagorigin(var_31.tag)); + } + + level thread startdot_group([var_31]); + } + } + + var_2F = undefined; + } + + if(isdefined(level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["explode"])) + { + var_0D = 1; + var_3E = level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["explode_force_min"]; + var_3F = level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["explode_force_max"]; + var_40 = level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["explode_range"]; + var_41 = level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["explode_mindamage"]; + var_42 = level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["explode_maxdamage"]; + var_43 = level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["continueDamage"]; + var_44 = level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["originOffset"]; + var_45 = level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["earthQuakeScale"]; + var_46 = level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["earthQuakeRadius"]; + var_47 = level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["originOffset3d"]; + var_48 = level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["delaytime"]; + if(isdefined(param_05) && param_05 != self) + { + self.attacker = param_05; + if(self.code_classname == "script_vehicle") + { + self.damage_type = param_06; + } + } + + thread explode(var_0A,var_3E,var_3F,var_40,var_41,var_42,var_43,var_44,var_45,var_46,param_05,var_47,var_48); + } + + var_49 = undefined; + if(isdefined(level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["physics"])) + { + for(var_1C = 0;var_1C < level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["physics"].size;var_1C++) + { + var_49 = undefined; + var_4A = level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["physics_tagName"][var_1C]; + var_4B = level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["physics_velocity"][var_1C]; + var_4C = undefined; + if(isdefined(var_4B)) + { + var_4D = undefined; + if(isdefined(var_4A)) + { + var_4D = self gettagangles(var_4A); + } + else if(isdefined(param_02)) + { + var_4D = self gettagangles(param_02); + } + + var_49 = undefined; + if(isdefined(var_4A)) + { + var_49 = self gettagorigin(var_4A); + } + else if(isdefined(param_02)) + { + var_49 = self gettagorigin(param_02); + } + + var_4E = var_4B[0] - 5 + randomfloat(10); + var_4F = var_4B[1] - 5 + randomfloat(10); + var_50 = var_4B[2] - 5 + randomfloat(10); + var_51 = anglestoforward(var_4D) * var_4E * randomfloatrange(80,110); + var_52 = anglestoright(var_4D) * var_4F * randomfloatrange(80,110); + var_53 = anglestoup(var_4D) * var_50 * randomfloatrange(80,110); + var_4C = var_51 + var_52 + var_53; + } + else + { + var_4C = param_03; + var_54 = (0,0,0); + if(isdefined(param_05)) + { + var_54 = param_05.origin; + var_4C = vectornormalize(param_03 - var_54); + var_4C = var_4C * 200; + } + } + + if(isdefined(var_4A)) + { + var_55 = undefined; + for(var_56 = 0;var_56 < level.destructible_type[self.destructibleinfo].var_A2D.size;var_56++) + { + if(!isdefined(level.destructible_type[self.destructibleinfo].var_A2D[var_56][0].v["tagName"])) + { + continue; + } + + if(level.destructible_type[self.destructibleinfo].var_A2D[var_56][0].v["tagName"] != var_4A) + { + continue; + } + + var_55 = var_56; + break; + } + + if(isdefined(var_49)) + { + thread physics_launch(var_55,0,var_49,var_4C); + } + else + { + thread physics_launch(var_55,0,param_03,var_4C); + } + + continue; + } + + if(isdefined(var_49)) + { + thread physics_launch(var_0A,var_19,var_49,var_4C); + } + else + { + thread physics_launch(var_0A,var_19,param_03,var_4C); + } + + return; + } + } + + var_0C = 1; + } +} + +//Function Number: 41 +destructible_splash_rotatation(param_00) +{ + var_01 = param_00["splashRotation"]; + var_02 = param_00["rotateTo"]; + if(!isdefined(var_02)) + { + return; + } + + if(!isdefined(var_01)) + { + return; + } + + if(!var_01) + { + return; + } + + self.angles = (self.angles[0],var_02[1],self.angles[2]); +} + +//Function Number: 42 +damage_not(param_00) +{ + var_01 = strtok(param_00," "); + var_02 = strtok("splash melee bullet splash impact unknown"," "); + var_03 = ""; + foreach(var_05 in var_01) + { + var_02 = common_scripts\utility::array_remove(var_02,var_05); + } + + foreach(var_08 in var_02) + { + var_03 = var_03 + var_08 + " "; + } + + return var_03; +} + +//Function Number: 43 +destructible_splash_damage(param_00,param_01,param_02,param_03,param_04) +{ + if(param_00 <= 0) + { + return; + } + + if(isdefined(self.exploded)) + { + return; + } + + if(!isdefined(level.destructible_type[self.destructibleinfo].var_A2D)) + { + return; + } + + var_05 = getallactiveparts(param_02); + if(var_05.size <= 0) + { + return; + } + + var_05 = setdistanceonparts(var_05,param_01); + var_06 = getlowestpartdistance(var_05); + foreach(var_08 in var_05) + { + var_09 = var_08.v["distance"] * 1.4; + var_0A = param_00 - var_09 - var_06; + if(var_0A <= 0) + { + continue; + } + + if(isdefined(self.exploded)) + { + continue; + } + + thread destructible_update_part(var_0A,var_08.v["modelName"],var_08.v["tagName"],param_01,param_02,param_03,param_04,var_08); + } +} + +//Function Number: 44 +getallactiveparts(param_00) +{ + var_01 = []; + if(!isdefined(level.destructible_type[self.destructibleinfo].var_A2D)) + { + return var_01; + } + + for(var_02 = 0;var_02 < level.destructible_type[self.destructibleinfo].var_A2D.size;var_02++) + { + var_03 = var_02; + var_04 = self.destructible_parts[var_03].v["currentState"]; + for(var_05 = 0;var_05 < level.destructible_type[self.destructibleinfo].var_A2D[var_03].size;var_05++) + { + var_06 = level.destructible_type[self.destructibleinfo].var_A2D[var_03][var_05].v["splashRotation"]; + if(isdefined(var_06) && var_06) + { + var_07 = vectortoangles(param_00); + var_08 = var_07[1] - 90; + level.destructible_type[self.destructibleinfo].var_A2D[var_03][var_05].v["rotateTo"] = (0,var_08,0); + } + } + + if(!isdefined(level.destructible_type[self.destructibleinfo].var_A2D[var_03][var_04])) + { + continue; + } + + var_09 = level.destructible_type[self.destructibleinfo].var_A2D[var_03][var_04].v["tagName"]; + if(!isdefined(var_09)) + { + var_09 = ""; + } + + if(var_09 == "") + { + continue; + } + + var_0A = level.destructible_type[self.destructibleinfo].var_A2D[var_03][var_04].v["modelName"]; + if(!isdefined(var_0A)) + { + var_0A = ""; + } + + var_0B = var_01.size; + var_01[var_0B] = spawnstruct(); + var_01[var_0B].v["modelName"] = var_0A; + var_01[var_0B].v["tagName"] = var_09; + } + + return var_01; +} + +//Function Number: 45 +setdistanceonparts(param_00,param_01) +{ + for(var_02 = 0;var_02 < param_00.size;var_02++) + { + var_03 = distance(param_01,self gettagorigin(param_00[var_02].v["tagName"])); + param_00[var_02].v["distance"] = var_03; + } + + return param_00; +} + +//Function Number: 46 +getlowestpartdistance(param_00) +{ + var_01 = undefined; + foreach(var_03 in param_00) + { + var_04 = var_03.v["distance"]; + if(!isdefined(var_01)) + { + var_01 = var_04; + } + + if(var_04 < var_01) + { + var_01 = var_04; + } + } + + return var_01; +} + +//Function Number: 47 +isvalidsoundcause(param_00,param_01,param_02,param_03,param_04) +{ + if(isdefined(param_04)) + { + var_05 = param_01[param_00][param_04][param_02]; + } + else + { + var_05 = param_02[param_01][param_03]; + } + + if(!isdefined(var_05)) + { + return 1; + } + + if(var_05 == param_03) + { + return 1; + } + + return 0; +} + +//Function Number: 48 +isattackervalid(param_00,param_01,param_02) +{ + if(isdefined(self.forceexploding)) + { + return 1; + } + + if(isdefined(level.destructible_type[self.destructibleinfo].var_A2D[param_00][param_01].v["explode"])) + { + if(isdefined(self.dontallowexplode)) + { + return 0; + } + } + + if(!isdefined(param_02)) + { + return 1; + } + + if(param_02 == self) + { + return 1; + } + + var_03 = level.destructible_type[self.destructibleinfo].var_A2D[param_00][param_01].v["validAttackers"]; + if(!isdefined(var_03)) + { + return 1; + } + + if(var_03 == "no_player") + { + if(!isplayer(param_02)) + { + return 1; + } + + if(!isdefined(param_02.var_A4D)) + { + return 1; + } + + if(param_02.var_A4D == 0) + { + return 1; + } + } + else if(var_03 == "player_only") + { + if(isplayer(param_02)) + { + return 1; + } + + if(isdefined(param_02.var_A4D) && param_02.var_A4D) + { + return 1; + } + } + else if(var_03 == "no_ai" && isdefined(level.isaifunc)) + { + if(![[ level.isaifunc ]](param_02)) + { + return 1; + } + } + else if(var_03 == "ai_only" && isdefined(level.isaifunc)) + { + if([[ level.isaifunc ]](param_02)) + { + return 1; + } + } + else + { + } + + return 0; +} + +//Function Number: 49 +isvaliddamagecause(param_00,param_01,param_02) +{ + if(!isdefined(param_02)) + { + return 1; + } + + var_03 = level.destructible_type[self.destructibleinfo].var_A2D[param_00][param_01].v["godModeAllowed"]; + if(var_03 && (isdefined(self.godmode) && self.godmode) || isdefined(self.script_bulletshield) && self.script_bulletshield && param_02 == "bullet") + { + return 0; + } + + var_04 = level.destructible_type[self.destructibleinfo].var_A2D[param_00][param_01].v["validDamageCause"]; + if(!isdefined(var_04)) + { + return 1; + } + + if(var_04 == "splash" && param_02 != "splash") + { + return 0; + } + + if(var_04 == "no_splash" && param_02 == "splash") + { + return 0; + } + + if((var_04 == "no_melee" && param_02 == "melee") || param_02 == "impact") + { + return 0; + } + + return 1; +} + +//Function Number: 50 +getdamagetype(param_00) +{ + if(!isdefined(param_00)) + { + return "unknown"; + } + + param_00 = tolower(param_00); + switch(param_00) + { + case "mod_crush": + case "mod_melee": + case "melee": + return "melee"; + + case "mod_rifle_bullet": + case "mod_pistol_bullet": + case "bullet": + return "bullet"; + + case "mod_explosive": + case "mod_projectile_splash": + case "mod_projectile": + case "mod_grenade_splash": + case "mod_grenade": + case "splash": + return "splash"; + + case "mod_impact": + return "impact"; + + case "unknown": + return "unknown"; + + default: + return "unknown"; + } +} + +//Function Number: 51 +damage_mirror(param_00,param_01,param_02) +{ + self notify("stop_damage_mirror"); + self endon("stop_damage_mirror"); + param_00 endon("stop_taking_damage"); + self setcandamage(1); + for(;;) + { + self waittill("damage",var_03,var_04,var_05,var_06,var_07); + param_00 notify("damage",var_03,var_04,var_05,var_06,var_07,param_01,param_02); + var_03 = undefined; + var_04 = undefined; + var_05 = undefined; + var_06 = undefined; + var_07 = undefined; + } +} + +//Function Number: 52 +add_damage_owner_recorder() +{ + self.player_damage = 0; + self.non_player_damage = 0; + self.car_damage_owner_recorder = 1; +} + +//Function Number: 53 +loopfx_ontag(param_00,param_01,param_02,param_03) +{ + self endon("FX_State_Change" + param_03); + self endon("delete_destructible"); + level endon("putout_fires"); + while(isdefined(self)) + { + var_04 = get_dummy(); + playfxontag(param_00,var_04,param_01); + wait param_02; + } +} + +//Function Number: 54 +health_drain(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + self endon("Health_Drain_State_Change" + param_02); + level endon("putout_fires"); + self endon("destroyed"); + if(isdefined(param_05) && isdefined(level.destructible_badplace_radius_multiplier)) + { + param_05 = param_05 * level.destructible_badplace_radius_multiplier; + } + + if(isdefined(param_00) && isdefined(level.destructible_health_drain_amount_multiplier)) + { + param_00 = param_00 * level.destructible_health_drain_amount_multiplier; + } + + wait param_01; + self.healthdrain = 1; + var_07 = undefined; + if(isdefined(level.disable_destructible_bad_places) && level.disable_destructible_bad_places) + { + param_05 = undefined; + } + + if(isdefined(param_05) && isdefined(param_06) && common_scripts\utility::issp()) + { + var_07 = "" + gettime(); + if(!isdefined(self.disablebadplace)) + { + if(isdefined(self.script_radius)) + { + param_05 = self.script_radius; + } + + if(param_06 == "both") + { + [[ level.badplace_cylinder_func ]](var_07,0,self.origin,param_05,128,"allies","bad_guys"); + } + else + { + [[ level.badplace_cylinder_func ]](var_07,0,self.origin,param_05,128,param_06); + } + + thread badplace_remove(var_07); + } + } + + while(isdefined(self) && self.destructible_parts[param_02].v["health"] > 0) + { + self notify("damage",param_00,self,(0,0,0),(0,0,0),"MOD_UNKNOWN",param_03,param_04); + wait param_01; + } + + self notify("remove_badplace"); +} + +//Function Number: 55 +badplace_remove(param_00) +{ + common_scripts\utility::waittill_any("destroyed","remove_badplace"); + [[ level.badplace_delete_func ]](param_00); +} + +//Function Number: 56 +physics_launch(param_00,param_01,param_02,param_03) +{ + var_04 = level.destructible_type[self.destructibleinfo].var_A2D[param_00][param_01].v["modelName"]; + var_05 = level.destructible_type[self.destructibleinfo].var_A2D[param_00][param_01].v["tagName"]; + hideapart(var_05); + if(level.destructiblespawnedents.size >= level.destructiblespawnedentslimit) + { + physics_object_remove(level.destructiblespawnedents[0]); + } + + var_06 = spawn("script_model",self gettagorigin(var_05)); + var_06.angles = self gettagangles(var_05); + var_06 setmodel(var_04); + level.destructiblespawnedents[level.destructiblespawnedents.size] = var_06; + var_06 physicslaunchclient(param_02,param_03); +} + +//Function Number: 57 +physics_object_remove(param_00) +{ + var_01 = []; + for(var_02 = 0;var_02 < level.destructiblespawnedents.size;var_02++) + { + if(level.destructiblespawnedents[var_02] == param_00) + { + continue; + } + + var_01[var_01.size] = level.destructiblespawnedents[var_02]; + } + + level.destructiblespawnedents = var_01; + if(isdefined(param_00)) + { + param_00 delete(); + } +} + +//Function Number: 58 +explode(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(param_03) && isdefined(level.destructible_explosion_radius_multiplier)) + { + param_03 = param_03 * level.destructible_explosion_radius_multiplier; + } + + if(!isdefined(param_07)) + { + param_07 = 80; + } + + if(!isdefined(param_0B)) + { + param_0B = (0,0,0); + } + + if(!isdefined(param_06) || isdefined(param_06) && !param_06) + { + if(isdefined(self.exploded)) + { + return; + } + + self.exploded = 1; + } + + if(!isdefined(param_0C)) + { + param_0C = 0; + } + + self notify("exploded",param_0A); + level notify("destructible_exploded"); + if(self.code_classname == "script_vehicle") + { + self notify("death",param_0A,self.damage_type); + } + + if(common_scripts\utility::issp()) + { + thread disconnecttraverses(); + } + + if(!level.fast_destructible_explode) + { + wait 0.05; + } + + if(!isdefined(self)) + { + return; + } + + var_0D = self.destructible_parts[param_00].v["currentState"]; + var_0E = undefined; + if(isdefined(level.destructible_type[self.destructibleinfo].var_A2D[param_00][var_0D])) + { + var_0E = level.destructible_type[self.destructibleinfo].var_A2D[param_00][var_0D].v["tagName"]; + } + + if(isdefined(var_0E)) + { + var_0F = self gettagorigin(var_0E); + } + else + { + var_0F = self.origin; + } + + self notify("damage",param_05,self,(0,0,0),var_0F,"MOD_EXPLOSIVE","",""); + self notify("stop_car_alarm"); + waittillframeend; + if(isdefined(level.destructible_type[self.destructibleinfo].var_A2D)) + { + for(var_10 = level.destructible_type[self.destructibleinfo].var_A2D.size - 1;var_10 >= 0;var_10--) + { + if(var_10 == param_00) + { + continue; + } + + var_11 = self.destructible_parts[var_10].v["currentState"]; + if(var_11 >= level.destructible_type[self.destructibleinfo].var_A2D[var_10].size) + { + var_11 = level.destructible_type[self.destructibleinfo].var_A2D[var_10].size - 1; + } + + var_12 = level.destructible_type[self.destructibleinfo].var_A2D[var_10][var_11].v["modelName"]; + var_0E = level.destructible_type[self.destructibleinfo].var_A2D[var_10][var_11].v["tagName"]; + if(!isdefined(var_12)) + { + continue; + } + + if(!isdefined(var_0E)) + { + continue; + } + + if(isdefined(level.destructible_type[self.destructibleinfo].var_A2D[var_10][0].v["physicsOnExplosion"])) + { + if(level.destructible_type[self.destructibleinfo].var_A2D[var_10][0].v["physicsOnExplosion"] > 0) + { + var_13 = level.destructible_type[self.destructibleinfo].var_A2D[var_10][0].v["physicsOnExplosion"]; + var_14 = self gettagorigin(var_0E); + var_15 = vectornormalize(var_14 - var_0F); + var_15 = var_15 * randomfloatrange(param_01,param_02) * var_13; + thread physics_launch(var_10,var_11,var_14,var_15); + continue; + } + } + } + } + + var_16 = !isdefined(param_06) || isdefined(param_06) && !param_06; + if(var_16) + { + self notify("stop_taking_damage"); + } + + if(!level.fast_destructible_explode) + { + wait 0.05; + } + + if(!isdefined(self)) + { + return; + } + + var_17 = var_0F + (0,0,param_07) + param_0B; + var_18 = getsubstr(level.destructible_type[self.destructibleinfo].v["type"],0,7) == "vehicle"; + if(var_18) + { + anim.lastcarexplosiontime = gettime(); + anim.lastcarexplosiondamagelocation = var_17; + anim.lastcarexplosionlocation = var_0F; + anim.lastcarexplosionrange = param_03; + } + + level thread set_disable_friendlyfire_value_delayed(1); + if(param_0C > 0) + { + wait param_0C; + } + + if(isdefined(level.destructible_protection_func)) + { + thread [[ level.destructible_protection_func ]](); + } + + if(common_scripts\utility::issp()) + { + if(level.gameskill == 0 && !player_touching_post_clip()) + { + self radiusdamage(var_17,param_03,param_05,param_04,self,"MOD_RIFLE_BULLET"); + } + else + { + self radiusdamage(var_17,param_03,param_05,param_04,self); + } + + if(isdefined(self.damageowner) && var_18) + { + self.damageowner notify("destroyed_car"); + level notify("player_destroyed_car",self.damageowner,var_17); + } + } + else + { + var_19 = "destructible_toy"; + if(var_18) + { + var_19 = "destructible_car"; + } + + if(!isdefined(self.damageowner)) + { + self radiusdamage(var_17,param_03,param_05,param_04,self,"MOD_EXPLOSIVE",var_19); + } + else + { + self radiusdamage(var_17,param_03,param_05,param_04,self.damageowner,"MOD_EXPLOSIVE",var_19); + if(var_18) + { + self.damageowner notify("destroyed_car"); + level notify("player_destroyed_car",self.damageowner,var_17); + } + } + } + + if(isdefined(param_08) && isdefined(param_09)) + { + earthquake(param_08,2,var_17,param_09); + } + + level thread set_disable_friendlyfire_value_delayed(0,0.05); + var_1A = 0.01; + var_1B = param_03 * var_1A; + param_03 = param_03 * 0.99; + physicsexplosionsphere(var_17,param_03,0,var_1B); + if(var_16) + { + self setcandamage(0); + thread cleanupvars(); + } + + self notify("destroyed"); +} + +//Function Number: 59 +cleanupvars() +{ + wait 0.05; + while(isdefined(self) && isdefined(self.waiting_for_queue)) + { + self waittill("queue_processed"); + wait 0.05; + } + + if(!isdefined(self)) + { + return; + } + + self.animsapplied = undefined; + self.attacker = undefined; + self.car_damage_owner_recorder = undefined; + self.var_A67 = undefined; + self.damageowner = undefined; + self.destructible_parts = undefined; + self.destructible_type = undefined; + self.destructibleinfo = undefined; + self.healthdrain = undefined; + self.non_player_damage = undefined; + self.player_damage = undefined; + if(!isdefined(level.destructible_cleans_up_more)) + { + return; + } + + self.script_noflip = undefined; + self.exploding = undefined; + self.loopingsoundstopnotifies = undefined; + self.car_alarm_org = undefined; +} + +//Function Number: 60 +set_disable_friendlyfire_value_delayed(param_00,param_01) +{ + level notify("set_disable_friendlyfire_value_delayed"); + level endon("set_disable_friendlyfire_value_delayed"); + if(isdefined(param_01)) + { + wait param_01; + } + + level.friendlyfiredisabledfordestructible = param_00; +} + +//Function Number: 61 +connecttraverses() +{ + var_00 = get_traverse_disconnect_brush(); + if(!isdefined(var_00)) + { + return; + } + + var_00 [[ level.connectpathsfunction ]](); + var_00.origin = var_00.origin - (0,0,10000); +} + +//Function Number: 62 +disconnecttraverses() +{ + var_00 = get_traverse_disconnect_brush(); + if(!isdefined(var_00)) + { + return; + } + + var_00.origin = var_00.origin + (0,0,10000); + var_00 [[ level.disconnectpathsfunction ]](); + var_00.origin = var_00.origin - (0,0,10000); +} + +//Function Number: 63 +get_traverse_disconnect_brush() +{ + if(!isdefined(self.target)) + { + return undefined; + } + + var_00 = getentarray(self.target,"targetname"); + foreach(var_02 in var_00) + { + if(isspawner(var_02)) + { + continue; + } + + if(isdefined(var_02.script_destruct_collision)) + { + continue; + } + + if(var_02.code_classname == "light") + { + continue; + } + + if(!var_02.spawnflags & 1) + { + continue; + } + + return var_02; + } +} + +//Function Number: 64 +hideapart(param_00) +{ + self hidepart(param_00); +} + +//Function Number: 65 +showapart(param_00) +{ + self showpart(param_00); +} + +//Function Number: 66 +disable_explosion() +{ + self.dontallowexplode = 1; +} + +//Function Number: 67 +force_explosion() +{ + self.dontallowexplode = undefined; + self.forceexploding = 1; + self notify("damage",100000,self,self.origin,self.origin,"MOD_EXPLOSIVE","",""); +} + +//Function Number: 68 +get_dummy() +{ + if(!common_scripts\utility::issp()) + { + return self; + } + + if(self.modeldummyon) + { + var_00 = self.modeldummy; + } + else + { + var_00 = self; + } + + return var_00; +} + +//Function Number: 69 +play_loop_sound_on_destructible(param_00,param_01) +{ + var_02 = get_dummy(); + var_03 = spawn("script_origin",(0,0,0)); + if(isdefined(param_01)) + { + var_03.origin = var_02 gettagorigin(param_01); + } + else + { + var_03.origin = var_02.origin; + } + + var_03 playloopsound(param_00); + var_02 thread force_stop_sound(param_00); + var_02 waittill("stop sound" + param_00); + if(!isdefined(var_03)) + { + return; + } + + var_03 stoploopsound(param_00); + var_03 delete(); +} + +//Function Number: 70 +force_stop_sound(param_00) +{ + self endon("stop sound" + param_00); + level waittill("putout_fires"); + self notify("stop sound" + param_00); +} + +//Function Number: 71 +notifydamageafterframe(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + if(isdefined(level.notifydamageafterframe)) + { + return; + } + + level.notifydamageafterframe = 1; + waittillframeend; + if(isdefined(self.exploded)) + { + level.notifydamageafterframe = undefined; + return; + } + + if(common_scripts\utility::issp()) + { + param_00 = param_00 / 0.5; + } + else + { + param_00 = param_00 / 1; + } + + self notify("damage",param_00,param_01,param_02,param_03,param_04,param_05,param_06); + level.notifydamageafterframe = undefined; +} + +//Function Number: 72 +play_sound(param_00,param_01) +{ + if(isdefined(param_01)) + { + var_02 = spawn("script_origin",self gettagorigin(param_01)); + var_02 hide(); + var_02 linkto(self,param_01,(0,0,0),(0,0,0)); + } + else + { + var_02 = spawn("script_origin",(0,0,0)); + var_02 hide(); + var_02.origin = self.origin; + var_02.angles = self.angles; + var_02 linkto(self); + } + + var_02 playsound(param_00); + wait 5; + if(isdefined(var_02)) + { + var_02 delete(); + } +} + +//Function Number: 73 +func_0A7A(param_00) +{ + return "" + param_00; +} + +//Function Number: 74 +do_car_alarm() +{ + if(isdefined(self.var_A67)) + { + return; + } + + self.var_A67 = 1; + if(!func_0A7E()) + { + return; + } + + self.car_alarm_org = spawn("script_model",self.origin); + self.car_alarm_org hide(); + self.car_alarm_org playloopsound("car_alarm"); + level.currentcaralarms++; + thread func_0A7D(); + self waittill("stop_car_alarm"); + level.var_A7C = gettime(); + level.currentcaralarms--; + self.car_alarm_org stoploopsound("car_alarm"); + self.car_alarm_org delete(); +} + +//Function Number: 75 +func_0A7D() +{ + self endon("stop_car_alarm"); + wait 25; + if(!isdefined(self)) + { + return; + } + + thread play_sound("car_alarm_off"); + self notify("stop_car_alarm"); +} + +//Function Number: 76 +func_0A7E() +{ + if(level.currentcaralarms >= 2) + { + return 0; + } + + var_00 = undefined; + if(!isdefined(level.var_A7C)) + { + if(common_scripts\utility::cointoss()) + { + return 1; + } + + var_00 = gettime() - level.commonstarttime; + } + else + { + var_00 = gettime() - level.var_A7C; + } + + if(level.currentcaralarms == 0 && var_00 >= 120) + { + return 1; + } + + if(randomint(100) <= 33) + { + return 1; + } + + return 0; +} + +//Function Number: 77 +do_random_dynamic_attachment(param_00,param_01,param_02,param_03) +{ + var_04 = []; + if(common_scripts\utility::issp()) + { + self attach(param_01,param_00,0); + if(isdefined(param_02) && param_02 != "") + { + self attach(param_02,param_00,0); + } + } + else + { + var_41[0].angles = self gettagangles(param_01); + var_41[0] setmodel(param_02); + var_41[0] linkto(self,param_01); + if(isdefined(param_03) && param_03 != "") + { + var_41[1].angles = self gettagangles(param_01); + var_41[1] setmodel(param_03); + var_41[1] linkto(self,param_01); + } + } + + if(isdefined(var_04)) + { + var_05 = self gettagorigin(param_01); + var_06 = get_closest_with_targetname(var_05,var_04); + if(isdefined(var_06)) + { + var_06 delete(); + } + } + + self waittill(spawn("script_model",self gettagorigin(param_00)),var_41[0],spawn("script_model",self gettagorigin(param_01)),var_41[1],"exploded"); + if(common_scripts\utility::issp()) + { + self detach(param_02,param_01); + self attach(param_02 + "_destroy",param_01,0); + if(isdefined(param_03) && param_03 != "") + { + self detach(param_03,param_01); + self attach(param_03 + "_destroy",param_01,0); + return; + } + + return; + } + + var_41[0] setmodel(param_02 + "_destroy"); + if(isdefined(param_03) && param_03 != "") + { + var_41[1] setmodel(param_03 + "_destroy"); + } +} + +//Function Number: 78 +get_closest_with_targetname(param_00,param_01) +{ + var_02 = undefined; + var_03 = undefined; + var_04 = getentarray(param_01,"targetname"); + foreach(var_06 in var_04) + { + var_07 = distancesquared(param_00,var_06.origin); + if(!isdefined(var_02) || var_07 < var_02) + { + var_02 = var_07; + var_03 = var_06; + } + } + + return var_03; +} + +//Function Number: 79 +player_touching_post_clip() +{ + var_00 = undefined; + if(!isdefined(self.target)) + { + return 0; + } + + var_01 = getentarray(self.target,"targetname"); + foreach(var_03 in var_01) + { + if(isdefined(var_03.script_destruct_collision) && var_03.script_destruct_collision == "post") + { + var_00 = var_03; + break; + } + } + + if(!isdefined(var_00)) + { + return 0; + } + + var_05 = get_player_touching(var_00); + if(isdefined(var_05)) + { + return 1; + } + + return 0; +} + +//Function Number: 80 +get_player_touching(param_00) +{ + foreach(var_02 in level.players) + { + if(!isalive(var_02)) + { + continue; + } + + if(param_00 istouching(var_02)) + { + return var_02; + } + } + + return undefined; +} + +//Function Number: 81 +is_so() +{ + return getdvar("specialops") == "1"; +} + +//Function Number: 82 +destructible_handles_collision_brushes() +{ + var_00 = getentarray(self.target,"targetname"); + var_01 = []; + foreach(var_03 in var_01) + { + if(!isdefined(var_03.script_destruct_collision)) + { + continue; + } + + self thread [[ var_41[var_03.script_destruct_collision] ]](var_03); + } +} + +//Function Number: 83 +collision_brush_pre_explosion(param_00) +{ + waittillframeend; + if(common_scripts\utility::issp() && param_00.spawnflags & 1) + { + param_00 [[ level.disconnectpathsfunction ]](); + } + + self waittill("exploded"); + if(common_scripts\utility::issp() && param_00.spawnflags & 1) + { + param_00 [[ level.connectpathsfunction ]](); + } + + param_00 delete(); +} + +//Function Number: 84 +collision_brush_post_explosion(param_00) +{ + param_00 notsolid(); + if(common_scripts\utility::issp() && param_00.spawnflags & 1) + { + param_00 [[ level.connectpathsfunction ]](); + } + + self waittill("exploded"); + waittillframeend; + if(common_scripts\utility::issp()) + { + if(param_00.spawnflags & 1) + { + param_00 [[ level.disconnectpathsfunction ]](); + } + + if(is_so()) + { + var_01 = get_player_touching(param_00); + if(isdefined(var_01)) + { + self thread [[ level.func_destructible_crush_player ]](var_01); + } + } + else + { + } + } + + param_00 solid(); +} + +//Function Number: 85 +debug_player_in_post_clip(param_00) +{ +} + +//Function Number: 86 +destructible_get_my_breakable_light(param_00) +{ + var_01 = getentarray("light_destructible","targetname"); + if(common_scripts\utility::issp()) + { + var_02 = getentarray("light_destructible","script_noteworthy"); + var_01 = common_scripts\utility::array_combine(var_01,var_02); + } + + if(!var_01.size) + { + return; + } + + var_03 = param_00 * param_00; + var_04 = undefined; + foreach(var_06 in var_01) + { + var_07 = distancesquared(self.origin,var_06.origin); + if(var_07 < var_03) + { + var_04 = var_06; + var_03 = var_07; + } + } + + if(!isdefined(var_04)) + { + return; + } + + self.breakable_light = var_04; +} + +//Function Number: 87 +break_nearest_light(param_00) +{ + if(!isdefined(self.breakable_light)) + { + return; + } + + self.breakable_light setlightintensity(0); +} + +//Function Number: 88 +debug_radiusdamage_circle(param_00,param_01,param_02,param_03) +{ + var_04 = 16; + var_05 = 360 / var_04; + var_06 = []; + for(var_07 = 0;var_07 < var_04;var_07++) + { + var_08 = var_05 * var_07; + var_09 = cos(var_08) * param_01; + var_0A = sin(var_08) * param_01; + var_0B = param_00[0] + var_09; + var_0C = param_00[1] + var_0A; + var_0D = param_00[2]; + var_06[var_06.size] = (var_0B,var_0C,var_0D); + } + + thread debug_circle_drawlines(var_06,5,(1,0,0),param_00); + var_06 = []; + for(var_07 = 0;var_07 < var_04;var_07++) + { + var_08 = var_05 * var_07; + var_09 = cos(var_08) * param_01; + var_0A = sin(var_08) * param_01; + var_0B = param_00[0]; + var_0C = param_00[1] + var_09; + var_0D = param_00[2] + var_0A; + var_06[var_06.size] = (var_0B,var_0C,var_0D); + } + + thread debug_circle_drawlines(var_06,5,(1,0,0),param_00); + var_06 = []; + for(var_07 = 0;var_07 < var_04;var_07++) + { + var_08 = var_05 * var_07; + var_09 = cos(var_08) * param_01; + var_0A = sin(var_08) * param_01; + var_0B = param_00[0] + var_0A; + var_0C = param_00[1]; + var_0D = param_00[2] + var_09; + var_06[var_06.size] = (var_0B,var_0C,var_0D); + } + + thread debug_circle_drawlines(var_06,5,(1,0,0),param_00); +} + +//Function Number: 89 +debug_circle_drawlines(param_00,param_01,param_02,param_03) +{ + for(var_04 = 0;var_04 < param_00.size;var_04++) + { + var_05 = param_00[var_04]; + if(var_04 + 1 >= param_00.size) + { + var_06 = param_00[0]; + } + else + { + var_06 = param_00[var_04 + 1]; + } + + thread debug_line(var_05,var_06,param_01,param_02); + thread debug_line(param_03,var_05,param_01,param_02); + } +} + +//Function Number: 90 +debug_line(param_00,param_01,param_02,param_03) +{ + if(!isdefined(param_03)) + { + param_03 = (1,1,1); + } + + for(var_04 = 0;var_04 < param_02 * 20;var_04++) + { + wait 0.05; + } +} + +//Function Number: 91 +spotlight_tag_origin_cleanup(param_00) +{ + param_00 endon("death"); + level waittill("new_destructible_spotlight"); + param_00 delete(); +} + +//Function Number: 92 +spotlight_fizzles_out(param_00,param_01,param_02,param_03,param_04) +{ + level endon("new_destructible_spotlight"); + thread spotlight_tag_origin_cleanup(param_04); + var_05 = param_00["spotlight_brightness"]; + common_scripts\utility::noself_func("setsaveddvar","r_spotlightbrightness",var_05); + wait randomfloatrange(2,5); + var_06 = randomintrange(5,11); + for(var_07 = 0;var_07 < var_06;var_07++) + { + common_scripts\utility::noself_func("setsaveddvar","r_spotlightbrightness",var_05 * 0.65); + wait 0.05; + common_scripts\utility::noself_func("setsaveddvar","r_spotlightbrightness",var_05); + wait 0.05; + } + + destructible_fx_think(param_00,param_01,param_02,param_03); + level.destructible_spotlight delete(); + param_04 delete(); +} + +//Function Number: 93 +destructible_spotlight_think(param_00,param_01,param_02,param_03) +{ + if(!common_scripts\utility::issp()) + { + return; + } + + if(!isdefined(self.breakable_light)) + { + return; + } + + param_01 common_scripts\utility::self_func("startignoringspotLight"); + foreach(var_06, var_05 in param_00["dvars"]) + { + common_scripts\utility::noself_func("setsaveddvar",var_06,var_05); + } + + if(!isdefined(level.destructible_spotlight)) + { + level.destructible_spotlight = common_scripts\utility::spawn_tag_origin(); + var_07 = common_scripts\utility::func_539(param_00["spotlight_fx"]); + playfxontag(var_07,level.destructible_spotlight,"tag_origin"); + } + + level notify("new_destructible_spotlight"); + level.destructible_spotlight unlink(); + var_08 = common_scripts\utility::spawn_tag_origin(); + var_08 linkto(self,param_00["spotlight_tag"],(0,0,0),(0,0,0)); + level.destructible_spotlight.origin = self.breakable_light.origin; + level.destructible_spotlight.angles = self.breakable_light.angles; + level.destructible_spotlight thread spotlight_fizzles_out(param_00,param_01,param_02,param_03,var_08); + wait 0.05; + if(isdefined(var_08)) + { + level.destructible_spotlight linkto(var_08); + } +} + +//Function Number: 94 +is_valid_damagetype(param_00,param_01,param_02,param_03) +{ + var_04 = undefined; + if(isdefined(param_01["fx_valid_damagetype"])) + { + var_04 = param_01["fx_valid_damagetype"][param_03][param_02]; + } + + if(!isdefined(var_04)) + { + return 1; + } + + return issubstr(var_04,param_00); +} + +//Function Number: 95 +destructible_sound_think(param_00,param_01,param_02,param_03) +{ + if(isdefined(self.exploded)) + { + return undefined; + } + + if(!isdefined(param_00["sound"])) + { + return undefined; + } + + if(!isdefined(param_03)) + { + param_03 = 0; + } + + for(var_04 = 0;var_04 < param_00["sound"][param_03].size;var_04++) + { + var_05 = isvalidsoundcause("soundCause",param_00,var_04,param_02,param_03); + if(!var_05) + { + continue; + } + + var_06 = param_00["sound"][param_03][var_04]; + var_07 = param_00["tagName"]; + param_01 thread play_sound(var_06,var_07); + } + + return param_03; +} + +//Function Number: 96 +destructible_fx_think(param_00,param_01,param_02,param_03,param_04) +{ + if(!isdefined(param_00["fx"])) + { + return undefined; + } + + if(!isdefined(param_04)) + { + param_04 = randomint(param_00["fx_filename"].size); + } + + if(!isdefined(param_00["fx"][param_04])) + { + param_04 = randomint(param_00["fx_filename"].size); + } + + var_05 = param_00["fx_filename"][param_04].size; + for(var_06 = 0;var_06 < var_05;var_06++) + { + if(!is_valid_damagetype(param_02,param_00,var_06,param_04)) + { + continue; + } + + var_07 = param_00["fx"][param_04][var_06]; + if(isdefined(param_00["fx_tag"][param_04][var_06])) + { + var_08 = param_00["fx_tag"][param_04][var_06]; + self notify("FX_State_Change" + param_03); + if(param_00["fx_useTagAngles"][param_04][var_06]) + { + playfxontag(var_07,param_01,var_08); + } + else + { + var_09 = param_01 gettagorigin(var_08); + var_0A = var_09 + (0,0,100) - var_09; + playfx(var_07,var_09,var_0A); + } + + continue; + } + + var_09 = param_01.origin; + var_0A = var_09 + (0,0,100) - var_09; + playfx(var_07,var_09,var_0A); + } + + return param_04; +} + +//Function Number: 97 +destructible_animation_think(param_00,param_01,param_02,param_03) +{ + if(isdefined(self.exploded)) + { + return undefined; + } + + if(!isdefined(param_00["animation"])) + { + return undefined; + } + + if(isdefined(self.var_A96)) + { + return undefined; + } + + if(isdefined(param_00["randomly_flip"]) && !isdefined(self.script_noflip)) + { + if(common_scripts\utility::cointoss()) + { + self.angles = self.angles + (0,180,0); + } + } + + if(isdefined(param_00["spotlight_tag"])) + { + thread destructible_spotlight_think(param_00,param_01,param_02,param_03); + wait 0.05; + } + + var_04 = common_scripts\utility::random(param_00["animation"]); + var_05 = var_04["anim"]; + var_06 = var_04["animTree"]; + var_07 = var_04["groupNum"]; + var_08 = var_04["mpAnim"]; + var_09 = var_04["maxStartDelay"]; + var_0A = var_04["animRateMin"]; + var_0B = var_04["animRateMax"]; + if(!isdefined(var_0A)) + { + var_0A = 1; + } + + if(!isdefined(var_0B)) + { + var_0B = 1; + } + + if(var_0A == var_0B) + { + var_0C = var_0A; + } + else + { + var_0C = randomfloatrange(var_0B,var_0C); + } + + var_0D = var_04["vehicle_exclude_anim"]; + if(self.code_classname == "script_vehicle" && var_0D) + { + return undefined; + } + + param_01 common_scripts\utility::self_func("useanimtree",var_06); + var_0E = var_04["animType"]; + if(!isdefined(self.animsapplied)) + { + self.animsapplied = []; + } + + self.animsapplied[self.animsapplied.size] = var_05; + if(isdefined(self.exploding)) + { + clear_anims(param_01); + } + + if(isdefined(var_09) && var_09 > 0) + { + wait randomfloat(var_09); + } + + if(!common_scripts\utility::issp()) + { + if(isdefined(var_08)) + { + common_scripts\utility::self_func("scriptModelPlayAnim",var_08); + } + + return var_07; + } + + if(var_0E == "setanim") + { + param_01 common_scripts\utility::self_func("setanim",var_05,1,1,var_0C); + return var_07; + } + + if(var_0E == "setanimknob") + { + param_01 common_scripts\utility::self_func("setanimknob",var_05,1,0,var_0C); + return var_07; + } + + return undefined; +} + +//Function Number: 98 +clear_anims(param_00) +{ + if(isdefined(self.animsapplied)) + { + foreach(var_02 in self.animsapplied) + { + if(common_scripts\utility::issp()) + { + param_00 common_scripts\utility::self_func("clearanim",var_02,0); + continue; + } + + param_00 common_scripts\utility::self_func("scriptModelClearAnim"); + } + } +} + +//Function Number: 99 +init_destroyed_count() +{ + level.destroyedcount = 0; + level.destroyedcounttimeout = 0.5; + if(common_scripts\utility::issp()) + { + level.var_A9B = 20; + return; + } + + level.var_A9B = 2; +} + +//Function Number: 100 +add_to_destroyed_count() +{ + level.destroyedcount++; + wait level.destroyedcounttimeout; + level.destroyedcount--; +} + +//Function Number: 101 +get_destroyed_count() +{ + return level.destroyedcount; +} + +//Function Number: 102 +get_max_destroyed_count() +{ + return level.var_A9B; +} + +//Function Number: 103 +init_destructible_frame_queue() +{ + level.destructibleframequeue = []; +} + +//Function Number: 104 +add_destructible_to_frame_queue(param_00,param_01,param_02) +{ + var_03 = self getentitynumber(); + if(!isdefined(level.destructibleframequeue[var_03])) + { + level.destructibleframequeue[var_03] = spawnstruct(); + level.destructibleframequeue[var_03].entnum = var_03; + level.destructibleframequeue[var_03].destructible = param_00; + level.destructibleframequeue[var_03].totaldamage = 0; + level.destructibleframequeue[var_03].neardistance = 9999999; + level.destructibleframequeue[var_03].fxcost = 0; + } + + level.destructibleframequeue[var_03].fxcost = level.destructibleframequeue[var_03].fxcost + param_01.v["fxcost"]; + level.destructibleframequeue[var_03].totaldamage = level.destructibleframequeue[var_03].totaldamage + param_02; + if(param_01.v["distance"] < level.destructibleframequeue[var_03].neardistance) + { + level.destructibleframequeue[var_03].neardistance = param_01.v["distance"]; + } + + thread handle_destructible_frame_queue(); +} + +//Function Number: 105 +handle_destructible_frame_queue() +{ + level notify("handle_destructible_frame_queue"); + level endon("handle_destructible_frame_queue"); + wait 0.05; + var_00 = level.destructibleframequeue; + level.destructibleframequeue = []; + var_01 = sort_destructible_frame_queue(var_00); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + if(get_destroyed_count() < get_max_destroyed_count()) + { + if(var_01[var_02].fxcost) + { + thread add_to_destroyed_count(); + } + + var_01[var_02].destructible notify("queue_processed",1); + continue; + } + + var_01[var_02].destructible notify("queue_processed",0); + } +} + +//Function Number: 106 +sort_destructible_frame_queue(param_00) +{ + var_01 = []; + foreach(var_03 in param_00) + { + var_01[var_01.size] = var_03; + } + + for(var_05 = 1;var_05 < var_01.size;var_05++) + { + var_06 = var_01[var_05]; + for(var_07 = var_05 - 1;var_07 >= 0 && get_better_destructible(var_06,var_01[var_07]) == var_06;var_07--) + { + var_01[var_07 + 1] = var_01[var_07]; + } + + var_01[var_07 + 1] = var_06; + } + + return var_01; +} + +//Function Number: 107 +get_better_destructible(param_00,param_01) +{ + if(param_00.totaldamage > param_01.totaldamage) + { + return param_00; + } + + return param_01; +} + +//Function Number: 108 +get_part_fx_cost_for_action_state(param_00,param_01) +{ + var_02 = 0; + if(!isdefined(level.destructible_type[self.destructibleinfo].var_A2D[param_00][param_01])) + { + return var_02; + } + + var_03 = level.destructible_type[self.destructibleinfo].var_A2D[param_00][param_01].v; + if(isdefined(var_03["fx"])) + { + foreach(var_05 in var_03["fx_cost"]) + { + foreach(var_07 in var_05) + { + var_02 = var_02 + var_07; + } + } + } + + return var_02; +} + +//Function Number: 109 +initdot(param_00) +{ + if(!common_scripts\utility::flag_exist("FLAG_DOT_init")) + { + common_scripts\utility::flag_init("FLAG_DOT_init"); + common_scripts\utility::flag_set("FLAG_DOT_init"); + } + + param_00 = tolower(param_00); + switch(param_00) + { + case "poison": + if(!common_scripts\utility::flag_exist("FLAG_DOT_poison_init")) + { + common_scripts\utility::flag_init("FLAG_DOT_poison_init"); + precacheshellshock("mp_radiation_low"); + precacheshellshock("mp_radiation_med"); + precacheshellshock("mp_radiation_high"); + common_scripts\utility::flag_set("FLAG_DOT_poison_init"); + } + break; + + default: + break; + } +} + +//Function Number: 110 +createdot() +{ + var_00 = spawnstruct(); + var_00.ticks = []; + return var_00; +} + +//Function Number: 111 +createdot_radius(param_00,param_01,param_02,param_03) +{ + var_04 = spawnstruct(); + var_04.type = "trigger_radius"; + var_04.origin = param_00; + var_04.spawnflags = param_01; + var_04.radius = param_02; + var_04.minradius = param_02; + var_04.maxradius = param_02; + var_04.height = param_03; + var_04.ticks = []; + return var_04; +} + +//Function Number: 112 +setdot_origin(param_00) +{ + self.origin = param_00; +} + +//Function Number: 113 +setdot_radius(param_00,param_01) +{ + if(isdefined(self.classname) && self.classname != "trigger_radius") + { + } + + if(!isdefined(param_01)) + { + param_01 = param_00; + } + + self.minradius = param_00; + self.maxradius = param_01; +} + +//Function Number: 114 +setdot_height(param_00,param_01) +{ + if(isdefined(self.classname) && issubstr(self.classname,"trigger")) + { + } +} + +//Function Number: 115 +setdot_ontick(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07) +{ + if(isdefined(param_00)) + { + } + else + { + param_00 = 0; + } + + param_06 = tolower(param_06); + param_07 = tolower(param_07); + var_08 = self.ticks.size; + self.ticks[var_08] = spawnstruct(); + self.ticks[var_08].enable = 0; + self.ticks[var_08].delay = param_00; + self.ticks[var_08].interval = param_01; + self.ticks[var_08].duration = param_02; + self.ticks[var_08].mindamage = param_03; + self.ticks[var_08].var_250D = param_04; + switch(param_05) + { + case 1: + case 0: + break; + + default: + break; + } + + self.ticks[var_08].falloff = param_05; + self.ticks[var_08].starttime = 0; + switch(param_06) + { + case "normal": + break; + + case "poison": + switch(param_07) + { + case "player": + self.ticks[var_08].type = param_06; + self.ticks[var_08].affected = param_07; + self.ticks[var_08].onenterfunc = ::onenterdot_poisondamageplayer; + self.ticks[var_08].onexitfunc = ::onexitdot_poisondamageplayer; + self.ticks[var_08].ondeathfunc = ::ondeathdot_poisondamageplayer; + break; + + default: + break; + } + break; + + default: + break; + } +} + +//Function Number: 116 +builddot_ontick(param_00,param_01) +{ + param_01 = tolower(param_01); + var_02 = self.ticks.size; + self.ticks[var_02] = spawnstruct(); + self.ticks[var_02].duration = param_00; + self.ticks[var_02].delay = 0; + self.ticks[var_02].onenterfunc = ::onenterdot_buildfunc; + self.ticks[var_02].onexitfunc = ::onexitdot_buildfunc; + self.ticks[var_02].ondeathfunc = ::ondeathdot_buildfunc; + switch(param_01) + { + case "player": + self.ticks[var_02].affected = param_01; + break; + + default: + break; + } +} + +//Function Number: 117 +builddot_startloop(param_00) +{ + var_01 = self.ticks.size - 1; + if(!isdefined(self.ticks[var_01].statements)) + { + self.ticks[var_01].statements = []; + } + + var_02 = self.ticks[var_01].statements.size; + self.ticks[var_01].statements = []; + self.ticks[var_01].statements["vars"] = []; + self.ticks[var_01].statements["vars"]["count"] = param_00; +} + +//Function Number: 118 +builddot_damage(param_00,param_01,param_02,param_03,param_04,param_05) +{ + var_06 = self.ticks.size - 1; + if(!isdefined(self.ticks[var_06].statements["actions"])) + { + self.ticks[var_06].statements["actions"] = []; + } + + var_07 = self.ticks[var_06].statements["actions"].size; + self.ticks[var_06].statements["actions"][var_07] = []; + self.ticks[var_06].statements["actions"][var_07]["vars"] = [param_00,param_01,param_02,param_03,param_04,param_05]; + self.ticks[var_06].statements["actions"][var_07]["func"] = ::dobuilddot_damage; +} + +//Function Number: 119 +builddot_wait(param_00) +{ + var_01 = self.ticks.size - 1; + if(!isdefined(self.ticks[var_01].statements["actions"])) + { + self.ticks[var_01].statements["actions"] = []; + } + + var_02 = self.ticks[var_01].statements["actions"].size; + self.ticks[var_01].statements["actions"][var_02] = []; + self.ticks[var_01].statements["actions"][var_02]["vars"] = [param_00]; + self.ticks[var_01].statements["actions"][var_02]["func"] = ::dobuilddot_wait; +} + +//Function Number: 120 +onenterdot_buildfunc(param_00,param_01) +{ + var_02 = param_01 getentitynumber(); + param_01 endon("death"); + param_01 endon("LISTEN_kill_tick_" + param_00 + "_" + var_02); + self endon("disconnect"); + self endon("game_ended"); + self endon("death"); + self endon("LISTEN_exit_dot_" + var_02); + var_02 = undefined; + var_03 = param_01.ticks[param_00].statements; + if(!isdefined(var_03) || !isdefined(var_03["vars"]) || !isdefined(var_03["vars"]["count"]) || !isdefined(var_03["actions"])) + { + return; + } + + var_04 = var_03["vars"]["count"]; + var_05 = var_03["actions"]; + var_03 = undefined; + for(var_06 = 1;var_06 <= var_04 || var_04 == 0;var_06--) + { + foreach(var_08 in var_05) + { + var_09 = var_08["vars"]; + var_0A = var_08["func"]; + self [[ var_0A ]](param_00,param_01,var_09); + } + } +} + +//Function Number: 121 +onexitdot_buildfunc(param_00,param_01) +{ + var_02 = param_01 getentitynumber(); + var_03 = self getentitynumber(); + param_01 notify("LISTEN_kill_tick_" + param_00 + "_" + var_02 + "_" + var_03); +} + +//Function Number: 122 +ondeathdot_buildfunc(param_00,param_01) +{ +} + +//Function Number: 123 +dobuilddot_damage(param_00,param_01,param_02) +{ + var_03 = param_02[0]; + var_04 = param_02[1]; + var_05 = param_02[2]; + var_06 = param_02[3]; + var_07 = param_02[4]; + var_08 = param_02[5]; + self thread [[ level.callbackplayerdamage ]](param_01,param_01,var_04,var_06,var_07,var_08,param_01.origin,(0,0,0) - param_01.origin,"none",0); +} + +//Function Number: 124 +dobuilddot_wait(param_00,param_01,param_02) +{ + var_03 = param_01 getentitynumber(); + var_04 = self getentitynumber(); + param_01 endon("death"); + param_01 endon("LISTEN_kill_tick_" + param_00 + "_" + var_03); + param_01 notify("LISTEN_kill_tick_" + param_00 + "_" + var_03 + "_" + var_04); + self endon("disconnect"); + self endon("game_ended"); + self endon("death"); + self endon("LISTEN_exit_dot_" + var_03); + var_03 = undefined; + var_04 = undefined; + wait param_02[0]; +} + +//Function Number: 125 +startdot_group(param_00) +{ + var_01 = []; + foreach(var_03 in param_00) + { + var_04 = undefined; + switch(var_03.type) + { + case "trigger_radius": + var_04 = spawn("trigger_radius",var_03.origin,var_03.spawnflags,var_03.radius,var_03.height); + var_04.minradius = var_03.minradius; + var_04.maxradius = var_03.maxradius; + var_04.ticks = var_03.ticks; + var_01[var_01.size] = var_04; + break; + + default: + break; + } + + if(isdefined(var_03.parent)) + { + var_04 linkto(var_03.parent); + var_03.parent.dot = var_04; + } + + var_05 = var_04.ticks; + foreach(var_07 in var_05) + { + var_07.starttime = gettime(); + } + + foreach(var_07 in var_05) + { + if(!var_07.delay) + { + var_07.enable = 1; + } + } + + foreach(var_07 in var_05) + { + if(issubstr(var_07.affected,"player")) + { + var_04.onplayer = 1; + break; + } + } + } + + foreach(var_04 in var_01) + { + var_04.dot_group = []; + foreach(var_10 in var_01) + { + if(var_04 == var_10) + { + continue; + } + + var_04.dot_group[var_04.dot_group.size] = var_10; + } + } + + foreach(var_04 in var_01) + { + if(var_04.onplayer) + { + var_04 thread startdot_player(); + } + } + + foreach(var_04 in var_01) + { + var_04 thread monitordot(); + } +} + +//Function Number: 126 +startdot_player() +{ + thread triggertouchthink(::onenterdot_player,::onexitdot_player); +} + +//Function Number: 127 +monitordot() +{ + var_00 = gettime(); + while(isdefined(self)) + { + foreach(var_04, var_02 in self.ticks) + { + if(isdefined(var_02) && gettime() - var_00 >= var_02.duration * 1000) + { + var_03 = self getentitynumber(); + self notify("LISTEN_kill_tick_" + var_04 + "_" + var_03); + self.ticks[var_04] = undefined; + } + } + + if(!self.ticks.size) + { + break; + } + + wait 0.05; + } + + if(isdefined(self)) + { + foreach(var_02 in self.ticks) + { + self [[ var_02.ondeathfunc ]](); + } + + self notify("death"); + self delete(); + } +} + +//Function Number: 128 +onenterdot_player(param_00) +{ + var_01 = param_00 getentitynumber(); + self notify("LISTEN_enter_dot_" + var_01); + foreach(var_04, var_03 in param_00.ticks) + { + if(!var_03.enable) + { + thread dodot_delayfunc(var_04,param_00,var_03.delay,var_03.onenterfunc); + } + } + + foreach(var_04, var_03 in param_00.ticks) + { + if(var_03.enable && var_03.affected == "player") + { + self thread [[ var_03.onenterfunc ]](var_04,param_00); + } + } +} + +//Function Number: 129 +onexitdot_player(param_00) +{ + var_01 = param_00 getentitynumber(); + self notify("LISTEN_exit_dot_" + var_01); + foreach(var_04, var_03 in param_00.ticks) + { + if(var_03.enable && var_03.affected == "player") + { + self thread [[ var_03.onexitfunc ]](var_04,param_00); + } + } +} + +//Function Number: 130 +dodot_delayfunc(param_00,param_01,param_02,param_03) +{ + var_04 = param_01 getentitynumber(); + var_05 = self getentitynumber(); + param_01 endon("LISTEN_kill_tick_" + param_00 + "_" + var_04 + "_" + var_05); + self endon("disconnect"); + self endon("game_ended"); + self endon("death"); + self notify("LISTEN_exit_dot_" + var_04); + var_04 = undefined; + var_05 = undefined; + wait param_02; + self thread [[ param_03 ]](param_00,param_01); +} + +//Function Number: 131 +onenterdot_poisondamageplayer(param_00,param_01) +{ + var_02 = param_01 getentitynumber(); + var_03 = self getentitynumber(); + param_01 endon("death"); + param_01 endon("LISTEN_kill_tick_" + param_00 + "_" + var_02); + param_01 endon("LISTEN_kill_tick_" + param_00 + "_" + var_02 + "_" + var_03); + self endon("disconnect"); + self endon("game_ended"); + self endon("death"); + self endon("LISTEN_exit_dot_" + var_02); + if(!isdefined(self.onenterdot_poisondamagecount)) + { + self.onenterdot_poisondamagecount = []; + } + + if(!isdefined(self.onenterdot_poisondamagecount[param_00])) + { + self.onenterdot_poisondamagecount[param_00] = []; + } + + self.onenterdot_poisondamagecount[param_00][var_02] = 0; + var_04 = common_scripts\utility::ter_op(common_scripts\utility::issp(),1.5,1); + while(isdefined(param_01) && isdefined(param_01.ticks[param_00])) + { + self.onenterdot_poisondamagecount[param_00][var_02]++; + switch(self.onenterdot_poisondamagecount[param_00][var_02]) + { + case 1: + self viewkick(1,self.origin); + break; + + case 3: + self shellshock("mp_radiation_low",4); + dodot_poisondamage(param_01,var_04 * 2); + break; + + case 4: + self shellshock("mp_radiation_med",5); + thread dodot_poisonblackout(param_00,param_01); + dodot_poisondamage(param_01,var_04 * 2); + break; + + case 6: + self shellshock("mp_radiation_high",5); + dodot_poisondamage(param_01,var_04 * 2); + break; + + case 8: + self shellshock("mp_radiation_high",5); + dodot_poisondamage(param_01,var_04 * 500); + break; + } + + wait param_01.ticks[param_00].interval; + } +} + +//Function Number: 132 +onexitdot_poisondamageplayer(param_00,param_01) +{ + var_02 = param_01 getentitynumber(); + var_03 = self getentitynumber(); + var_04 = self.onenterdot_poisondamageoverlay; + if(isdefined(var_04)) + { + foreach(var_07, var_06 in var_04) + { + if(isdefined(var_04[var_07]) && isdefined(var_04[var_07][var_02])) + { + var_04[var_07][var_02] thread dodot_fadeoutblackout(0.1,0); + } + } + } + + param_01 notify("LISTEN_kill_tick_" + param_00 + "_" + var_02 + "_" + var_03); +} + +//Function Number: 133 +ondeathdot_poisondamageplayer() +{ + var_00 = self getentitynumber(); + foreach(var_02 in level.players) + { + var_03 = var_02.onenterdot_poisondamageoverlay; + if(isdefined(var_03)) + { + foreach(var_06, var_05 in var_03) + { + if(isdefined(var_03[var_06]) && isdefined(var_03[var_06][var_00])) + { + var_03[var_06][var_00] thread dodot_fadeoutblackoutanddestroy(); + } + } + } + } +} + +//Function Number: 134 +dodot_poisondamage(param_00,param_01) +{ + if(common_scripts\utility::issp()) + { + return; + } + + self thread [[ level.callbackplayerdamage ]](param_00,param_00,param_01,0,"MOD_SUICIDE","claymore_mp",param_00.origin,(0,0,0) - param_00.origin,"none",0); +} + +//Function Number: 135 +dodot_poisonblackout(param_00,param_01) +{ + var_02 = param_01 getentitynumber(); + var_03 = self getentitynumber(); + param_01 endon("death"); + param_01 endon("LISTEN_kill_tick_" + param_00 + "_" + var_02); + param_01 endon("LISTEN_kill_tick_" + param_00 + "_" + var_02 + "_" + var_03); + self endon("disconnect"); + self endon("game_ended"); + self endon("death"); + self endon("LISTEN_exit_dot_" + var_02); + if(!isdefined(self.onenterdot_poisondamageoverlay)) + { + self.onenterdot_poisondamageoverlay = []; + } + + if(!isdefined(self.onenterdot_poisondamageoverlay[param_00])) + { + self.onenterdot_poisondamageoverlay[param_00] = []; + } + + if(!isdefined(self.onenterdot_poisondamageoverlay[param_00][var_02])) + { + var_04 = newclienthudelem(self); + var_04.x = 0; + var_04.y = 0; + var_04.alignx = "left"; + var_04.aligny = "top"; + var_04.horzalign = "fullscreen"; + var_04.vertalign = "fullscreen"; + var_04.alpha = 0; + var_04 setshader("black",640,480); + self.onenterdot_poisondamageoverlay[param_00][var_02] = var_04; + } + + var_04 = self.onenterdot_poisondamageoverlay[param_00][var_02]; + var_05 = 1; + var_06 = 2; + var_07 = 0.25; + var_08 = 1; + var_09 = 5; + var_0A = 100; + var_0B = 0; + for(;;) + { + while(self.onenterdot_poisondamagecount[param_00][var_02] > 1) + { + var_0C = var_0A - var_09; + var_0B = self.onenterdot_poisondamagecount[param_00][var_02] - var_09 / var_0C; + if(var_0B < 0) + { + var_0B = 0; + } + else if(var_0B > 1) + { + var_0B = 1; + } + + var_0D = var_06 - var_05; + var_0E = var_05 + var_0D * 1 - var_0B; + var_0F = var_08 - var_07; + var_10 = var_07 + var_0F * var_0B; + var_11 = var_0B * 0.5; + if(var_0B == 1) + { + break; + } + + var_12 = var_0E / 2; + var_04 dodot_fadeinblackout(var_12,var_10); + var_04 dodot_fadeoutblackout(var_12,var_11); + wait var_0B * 0.5; + } + + if(var_0B == 1) + { + break; + } + + if(var_04.alpha != 0) + { + var_04 dodot_fadeoutblackout(1,0); + } + + wait 0.05; + } + + var_04 dodot_fadeinblackout(2,0); +} + +//Function Number: 136 +dodot_fadeinblackout(param_00,param_01) +{ + self fadeovertime(param_00); + self.alpha = param_01; + param_01 = undefined; + wait param_00; +} + +//Function Number: 137 +dodot_fadeoutblackout(param_00,param_01) +{ + self fadeovertime(param_00); + self.alpha = param_01; + param_01 = undefined; + wait param_00; +} + +//Function Number: 138 +dodot_fadeoutblackoutanddestroy(param_00,param_01) +{ + self fadeovertime(param_00); + self.alpha = param_01; + param_01 = undefined; + wait param_00; + self destroy(); +} + +//Function Number: 139 +triggertouchthink(param_00,param_01) +{ + level endon("game_ended"); + self endon("death"); + self.entnum = self getentitynumber(); + for(;;) + { + self waittill("trigger",var_02); + if(!isplayer(var_02) && !isdefined(var_02.var_1929)) + { + continue; + } + + if(!isalive(var_02)) + { + continue; + } + + if(!isdefined(var_02.touchtriggers[self.entnum])) + { + var_02 thread playertouchtriggerthink(self,param_00,param_01); + } + } +} + +//Function Number: 140 +playertouchtriggerthink(param_00,param_01,param_02) +{ + param_00 endon("death"); + if(!isplayer(self)) + { + self endon("death"); + } + + if(!common_scripts\utility::issp()) + { + var_03 = self.guid; + } + else + { + var_03 = "player" + gettime(); + } + + param_00.touchlist[var_03] = self; + if(isdefined(param_00.movetracker)) + { + self.movetrackers++; + } + + param_00 notify("trigger_enter",self); + self notify("trigger_enter",param_00); + var_04 = 1; + foreach(var_06 in param_00.dot_group) + { + foreach(var_08 in self.touchtriggers) + { + if(var_06 == var_08) + { + var_04 = 0; + } + } + } + + if(var_04 && isdefined(param_01)) + { + self thread [[ param_01 ]](param_00); + } + + self.touchtriggers[param_00.entnum] = param_00; + while(isalive(self) && common_scripts\utility::issp() || !level.gameended) + { + var_0B = 1; + if(self istouching(param_00)) + { + wait 0.05; + continue; + } + + if(!param_00.dot_group.size) + { + var_0B = 0; + } + + foreach(var_06 in param_00.dot_group) + { + if(self istouching(var_06)) + { + wait 0.05; + break; + } + else + { + var_0B = 0; + } + } + + if(!var_0B) + { + break; + } + } + + if(isdefined(self)) + { + self.touchtriggers[param_00.entnum] = undefined; + if(isdefined(param_00.movetracker)) + { + self.movetrackers--; + } + + self notify("trigger_leave",param_00); + if(var_04 && isdefined(param_02)) + { + self thread [[ param_02 ]](param_00); + } + } + + if(!common_scripts\utility::issp() && level.gameended) + { + return; + } + + param_00.touchlist[var_03] = undefined; + param_00 notify("trigger_leave",self); + if(!func_1930(param_00)) + { + param_00 notify("trigger_empty"); + } +} + +//Function Number: 141 +func_1930(param_00) +{ + return param_00.touchlist.size; +} \ No newline at end of file diff --git a/MW3/Xbox/MP/common_scripts/_destructible_types.gsc b/MW3/Xbox/MP/common_scripts/_destructible_types.gsc new file mode 100644 index 0000000..e8db529 --- /dev/null +++ b/MW3/Xbox/MP/common_scripts/_destructible_types.gsc @@ -0,0 +1,6634 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: common_scripts\_destructible_types.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 169 + * Decompile Time: 2750 ms + * Timestamp: 10/27/2023 2:28:45 AM +*******************************************************************/ + +//Function Number: 1 +maketype(param_00) +{ + var_01 = getinfoindex(param_00); + if(var_01 >= 0) + { + return var_01; + } + + switch(param_00) + { + case "rus_vx_gas_canister": + rus_vx_gas_canister(param_00); + break; + + case "prop_ac_prs_enm_barge_a_1": + prop_ac_prs_enm_barge_a(1); + break; + + case "prop_ac_prs_enm_barge_a_2": + prop_ac_prs_enm_barge_a(2); + break; + + case "prop_ac_prs_enm_con_digger_a": + prop_ac_prs_enm_con_digger_a(); + break; + + case "prop_ac_prs_enm_con_dump_truck_a": + func_0979(); + break; + + case "prop_ac_prs_enm_fuel_tank_a": + prop_ac_prs_enm_fuel_tank_a(); + break; + + case "vehicle_jeep": + vehicle_jeep(param_00); + break; + + case "vehicle_uaz_van_destructible": + vehicle_uaz_van(param_00); + break; + + case "prop_ac_prs_enm_hanger_a": + prop_ac_prs_enm_hanger_a(); + break; + + case "prop_ac_prs_enm_maz_a": + prop_ac_prs_enm_maz_a(); + break; + + case "prop_ac_prs_enm_mi26_halo_a": + prop_ac_prs_enm_mi26_halo_a(); + break; + + case "prop_ac_prs_enm_mstas_a": + prop_ac_prs_enm_mstas_a(); + break; + + case "prop_ac_prs_enm_radar_maz_a": + prop_ac_prs_enm_radar_maz_a(); + break; + + case "prop_ac_prs_enm_s300v_a": + prop_ac_prs_enm_s300v_a(); + break; + + case "prop_ac_prs_enm_storage_bld_a_1": + prop_ac_prs_enm_storage_bld("a",1); + break; + + case "prop_ac_prs_enm_storage_bld_a_2": + prop_ac_prs_enm_storage_bld("a",2); + break; + + case "prop_ac_prs_enm_storage_bld_b": + prop_ac_prs_enm_storage_bld("b"); + break; + + case "vehicle_semi_truck": + vehicle_semi_truck(); + break; + + case "prop_ac_prs_enm_tent_a": + prop_ac_prs_enm_tent("a"); + break; + + case "prop_ac_prs_enm_tent_b": + prop_ac_prs_enm_tent("b"); + break; + + case "prop_ac_prs_enm_tent_c": + prop_ac_prs_enm_tent("c"); + break; + + case "prop_ac_prs_enm_truck_a": + prop_ac_prs_enm_truck_a(); + break; + + case "prop_ac_prs_enm_cargo_crate_a_1": + prop_ac_prs_enm_cargo_crate_a(1); + break; + + case "prop_ac_prs_enm_cargo_crate_a_2": + prop_ac_prs_enm_cargo_crate_a(2); + break; + + case "prop_ac_prs_enm_crates_a_1": + prop_ac_prs_enm_crates("a",1); + break; + + case "prop_ac_prs_enm_crates_a_2": + prop_ac_prs_enm_crates("a",2); + break; + + case "prop_ac_prs_enm_crates_b_1": + prop_ac_prs_enm_crates("b",1); + break; + + case "prop_ac_prs_enm_crates_b_2": + prop_ac_prs_enm_crates("b",2); + break; + + case "prop_ac_prs_enm_mobile_crane_a": + prop_ac_prs_enm_mobile_crane_a(); + break; + + case "prop_ac_prs_enm_landing_craft_a": + prop_ac_prs_enm_landing_craft_a(); + break; + + case "prop_ac_prs_enm_speed_boat_a": + prop_ac_prs_enm_speed_boat_a(); + break; + + case "prop_ac_prs_prp_satellite_dish_a_dish": + prop_ac_prs_prp_satellite_dish_a_dish(); + break; + + case "prop_ac_prs_fps_hc_extc_balcony_a1": + prop_ac_prs_fps_hc_extc_balcony("a",1); + break; + + case "prop_ac_prs_fps_hc_extc_balcony_a2": + prop_ac_prs_fps_hc_extc_balcony("a",2); + break; + + case "prop_ac_prs_fps_hc_extc_balcony_a3": + prop_ac_prs_fps_hc_extc_balcony("a",3); + break; + + case "prop_ac_prs_fps_hc_extc_balcony_b1": + prop_ac_prs_fps_hc_extc_balcony("b",1); + break; + + case "prop_ac_prs_fps_hc_extc_balcony_b2": + prop_ac_prs_fps_hc_extc_balcony("b",2); + break; + + case "prop_ac_prs_fps_hc_extc_balcony_b3": + prop_ac_prs_fps_hc_extc_balcony("b",3); + break; + + case "prop_ac_prs_fps_hc_extc_balcony_c1": + prop_ac_prs_fps_hc_extc_balcony("c",1); + break; + + case "prop_ac_prs_fps_hc_extc_balcony_c2": + prop_ac_prs_fps_hc_extc_balcony("c",2); + break; + + case "prop_ac_prs_fps_hc_extc_column_b_a1": + prop_ac_prs_fps_hc_extc_column("b","a",1); + break; + + case "prop_ac_prs_fps_hc_extc_column_b_a2": + prop_ac_prs_fps_hc_extc_column("b","a",2); + break; + + case "prop_ac_prs_fps_hc_extc_column_b_a3": + prop_ac_prs_fps_hc_extc_column("b","a",3); + break; + + case "prop_ac_prs_fps_hc_extc_column_t_a1": + prop_ac_prs_fps_hc_extc_column("t","a",1); + break; + + case "prop_ac_prs_fps_hc_extc_column_t_a2": + prop_ac_prs_fps_hc_extc_column("t","a",2); + break; + + case "prop_ac_prs_fps_hc_extc_column_t_a3": + prop_ac_prs_fps_hc_extc_column("t","a",3); + break; + + case "prop_ac_prs_enm_missile_boat_a": + prop_ac_prs_enm_missile_boat_a(); + break; + + case "prop_bv_prp_mvillage_tstore_a": + prop_bv_prp_mvillage_tstore_a(); + break; + + case "prop_bv_prp_mvillage_tstore_b": + prop_bv_prp_mvillage_tstore_b(); + break; + + case "prop_bv_prp_mvillage_tstore_c": + prop_bv_prp_mvillage_tstore_c(); + break; + + case "prop_bv_prp_mvillage_tstore_d": + prop_bv_prp_mvillage_tstore_d(); + break; + + case "prop_bv_prp_mvillage_church_a1": + prop_bv_prp_mvillage_church_a1(); + break; + + case "prop_bv_prp_mvillage_church_a2": + prop_bv_prp_mvillage_church_a2(); + break; + + case "prop_bv_prp_mvillage_church_a3": + prop_bv_prp_mvillage_church_a3(); + break; + + case "prop_bv_prp_mvillage_church_a4": + prop_bv_prp_mvillage_church_a4(); + break; + + case "prop_bv_prp_mvillage_church_a5": + prop_bv_prp_mvillage_church_a5(); + break; + + case "prop_bv_prp_mvillage_tudorg_a1": + prop_bv_prp_mvillage_tudorg_a1(); + break; + + case "prop_bv_prp_mvillage_tudorg_a2": + prop_bv_prp_mvillage_tudorg_a2(); + break; + + case "prop_bv_prp_mvillage_tudorg_a3": + prop_bv_prp_mvillage_tudorg_a3(); + break; + + case "prop_bv_prp_mvillage_tudor_a": + prop_bv_prp_mvillage_tudor_a(); + break; + + case "prop_bv_prp_mvillage_grand_house_a": + prop_bv_prp_mvillage_grand_house_a(); + break; + + case "prop_bv_prp_mvillage_grand_house_a1": + prop_bv_prp_mvillage_grand_house_a1(); + break; + + case "prop_bv_prp_mvillage_grand_house_a2": + prop_bv_prp_mvillage_grand_house_a2(); + break; + + case "prop_bv_prp_mvillage_hse_a": + prop_bv_prp_mvillage_hse_a(); + break; + + case "prop_bv_prp_mvillage_pub_a": + prop_bv_prp_mvillage_pub_a(); + break; + + case "prop_bv_prp_mvillage_pub_a1": + prop_bv_prp_mvillage_pub_a1(); + break; + + case "prop_bv_prp_mvillage_thatch_cottage_a": + prop_bv_prp_mvillage_thatch_cottage_a(); + break; + + case "prop_bv_prp_mvillage_thatch_cottage_a1": + prop_bv_prp_mvillage_thatch_cottage_a1(); + break; + + case "prop_bv_prp_mvillage_thatch_cottage_b": + prop_bv_prp_mvillage_thatch_cottage_b(); + break; + + case "toy_glass120x110": + toy_glass("120x110"); + break; + + case "vehicle_mini_destructible_blue": + vehicle_mini("blue"); + break; + + case "vehicle_mini_destructible_gray": + vehicle_mini("gray"); + break; + + case "vehicle_mini_destructible_white": + vehicle_mini("white"); + break; + + case "vehicle_mini_destructible_red": + vehicle_mini("red"); + break; + + case "toy_glass120x44": + toy_glass("120x44"); + break; + + case "toy_glass56x59": + toy_glass("56x59"); + break; + + case "toy_glass74x110": + toy_glass("74x110"); + break; + + case "toy_glass74x44": + toy_glass("74x44"); + break; + + case "toy_dt_mirror": + toy_dt_mirror(""); + break; + + case "toy_dt_mirror_large": + toy_dt_mirror("_large"); + break; + + case "toy_icbm_consolemonitor1": + toy_icbm_consolemonitor("1"); + break; + + case "toy_icbm_consolemonitor2": + toy_icbm_consolemonitor("2"); + break; + + case "toy_icbm_consolemonitor3": + toy_icbm_consolemonitor("3"); + break; + + case "toy_icbm_consolemonitor4": + toy_icbm_consolemonitor("4"); + break; + + case "toy_icbm_consolemonitor5": + toy_icbm_consolemonitor("5"); + break; + + case "toy_icbm_consolemonitor6": + toy_icbm_consolemonitor("6"); + break; + + case "toy_tubetv_tv1": + toy_tubetv_("tv1"); + break; + + case "toy_tubetv_tv2": + toy_tubetv_("tv2"); + break; + + case "toy_tv_flatscreen_01": + toy_tvs_flatscreen("01",""); + break; + + case "toy_tv_flatscreen_02": + toy_tvs_flatscreen("02",""); + break; + + case "toy_tv_flatscreen_wallmount_01": + toy_tvs_flatscreen("01","wallmount_"); + break; + + case "toy_tv_flatscreen_wallmount_01_sturdy": + func_09A9("01","wallmount_"); + break; + + case "toy_tv_flatscreen_wallmount_02": + toy_tvs_flatscreen("02","wallmount_"); + break; + + case "toy_transformer_ratnest01": + toy_transformer_ratnest01(param_00); + break; + + case "toy_transformer_small01": + toy_transformer_small01(param_00); + break; + + case "toy_generator": + toy_generator(param_00); + break; + + case "toy_generator_on": + func_09B0(param_00); + break; + + case "toy_oxygen_tank_01": + toy_oxygen_tank("01"); + break; + + case "toy_oxygen_tank_02": + toy_oxygen_tank("02"); + break; + + case "toy_electricbox2": + toy_electricbox2(param_00); + break; + + case "toy_electricbox4": + toy_electricbox4(param_00); + break; + + case "toy_airconditioner": + toy_airconditioner(param_00); + break; + + case "toy_ceiling_fan": + toy_ceiling_fan(param_00); + break; + + case "toy_wall_fan": + toy_wall_fan(param_00); + break; + + case "toy_propane_tank02": + toy_propane_tank02(param_00); + break; + + case "toy_propane_tank02_small": + toy_propane_tank02_small(param_00); + break; + + case "toy_copier": + toy_copier(param_00); + break; + + case "toy_firehydrant": + toy_firehydrant(param_00); + break; + + case "toy_parkingmeter": + toy_parkingmeter(param_00); + break; + + case "toy_mailbox": + func_09BE(param_00); + break; + + case "toy_mailbox2_black": + toy_mailbox2("black"); + break; + + case "toy_mailbox2_green": + toy_mailbox2("green"); + break; + + case "toy_mailbox2_yellow": + toy_mailbox2("yellow"); + break; + + case "toy_newspaper_stand_red": + toy_newspaper_stand_red(param_00); + break; + + case "toy_newspaper_stand_blue": + func_09C1(param_00); + break; + + case "toy_filecabinet": + toy_filecabinet(param_00); + break; + + case "toy_trashbin_01": + toy_trashbin_01(param_00); + break; + + case "toy_trashbin_02": + func_09C4(param_00); + break; + + case "toy_trashbag1_white": + toy_trashbag1("white"); + break; + + case "toy_trashbag1_black": + toy_trashbag1("black"); + break; + + case "toy_trashbag1_green": + toy_trashbag1("green"); + break; + + case "toy_recyclebin_01": + toy_recyclebin_01(param_00); + break; + + case "toy_trashcan_metal_closed": + toy_trashcan_metal_closed(param_00); + break; + + case "toy_water_collector": + toy_water_collector(param_00); + break; + + case "toy_foliage_tree_oak_1": + toy_foliage_tree_oak_1(param_00); + break; + + case "toy_paris_tree_plane_large": + toy_paris_tree_plane_large(param_00); + break; + + case "toy_usa_gas_station_trash_bin_01": + toy_usa_gas_station_trash_bin_01(param_00); + break; + + case "toy_usa_gas_station_trash_bin_02": + toy_usa_gas_station_trash_bin_02(param_00); + break; + + case "toy_light_ceiling_round": + func_09CD(param_00); + break; + + case "toy_light_ceiling_fluorescent": + toy_light_ceiling_fluorescent(param_00); + break; + + case "toy_light_ceiling_fluorescent_spotlight": + toy_light_ceiling_fluorescent_spotlight(param_00); + break; + + case "toy_light_ceiling_fluorescent_single": + toy_light_ceiling_fluorescent_single(param_00); + break; + + case "toy_light_ceiling_fluorescent_single_spotlight": + toy_light_ceiling_fluorescent_single_spotlight(param_00); + break; + + case "toy_bookstore_bookstand4_books": + toy_bookstore_bookstand4_books(param_00); + break; + + case "toy_locker_double": + toy_locker_double(param_00); + break; + + case "toy_chicken": + toy_chicken(""); + break; + + case "toy_chicken_white": + toy_chicken("_white"); + break; + + case "toy_chicken_black_white": + toy_chicken("_black_white"); + break; + + case "toy_chicken_dlc": + toy_chicken_dlc(); + break; + + case "toy_luggage_01": + toy_hide_with_fx("toy_luggage_01","luggage1_lod0","maps/hijack/luggage_1_des_hjk",120); + break; + + case "toy_luggage_02": + toy_hide_with_fx("toy_luggage_02","luggage2_lod0","maps/hijack/luggage_2_des_hjk",120); + break; + + case "toy_luggage_03": + toy_hide_with_fx("toy_luggage_03","luggage3_lod0","maps/hijack/luggage_3_des_hjk",120); + break; + + case "toy_luggage_04": + toy_hide_with_fx("toy_luggage_04","luggage4_lod0","maps/hijack/luggage_4_des_hjk",120); + break; + + case "toy_com_cardboardbox_dusty_05": + toy_hide_with_fx("toy_com_cardboardbox_dusty_05","cardboardbox_5_lod0","props/cardboardbox01_snacks_exp",30); + break; + + case "toy_com_cardboardboxshortclosed_1": + toy_hide_with_fx("toy_com_cardboardboxshortclosed_1","cardboardboxshortclosed_1_lod0","props/cardboardboxshortclosed_snacks_exp",30); + break; + + case "intro_gate_column_02_dest_01": + toy_intro_concrete_chipaway("intro_gate_column_02_dest_01",12); + break; + + case "intro_concrete_junkyardwall_01": + toy_intro_concrete_chipaway("intro_concrete_junkyardwall_01",9); + break; + + case "intro_concrete_kneehighwall_01": + toy_intro_concrete_chipaway("intro_concrete_kneehighwall_01",8); + break; + + case "dub_lobby_fish_sculpture_left_orange": + toy_dubai_fish_sculpture("dub_lobby_fish_sculpture_left_orange","orange",40); + break; + + case "dub_lobby_fish_sculpture_right_orange": + toy_dubai_fish_sculpture("dub_lobby_fish_sculpture_right_orange","orange",40); + break; + + case "dub_lobby_fish_sculpture_left_blue": + toy_dubai_fish_sculpture("dub_lobby_fish_sculpture_left_blue","blue",45); + break; + + case "dub_lobby_fish_sculpture_right_blue": + toy_dubai_fish_sculpture("dub_lobby_fish_sculpture_right_blue","blue",45); + break; + + case "dub_lobby_fish_sculpture_left_purple": + toy_dubai_fish_sculpture("dub_lobby_fish_sculpture_left_purple","purple",39); + break; + + case "dub_lobby_fish_sculpture_right_purple": + toy_dubai_fish_sculpture("dub_lobby_fish_sculpture_right_purple","purple",39); + break; + + case "vehicle_ac130_80s_sedan1_yel": + vehicle_ac130_80s_sedan1("yel"); + break; + + case "vehicle_bus_destructible": + vehicle_bus_destructible(param_00); + break; + + case "vehicle_80s_sedan1_green": + vehicle_80s_sedan1("green"); + break; + + case "vehicle_80s_sedan1_red": + vehicle_80s_sedan1("red"); + break; + + case "vehicle_80s_sedan1_silv": + vehicle_80s_sedan1("silv"); + break; + + case "vehicle_80s_sedan1_tan": + vehicle_80s_sedan1("tan"); + break; + + case "vehicle_80s_sedan1_yel": + vehicle_80s_sedan1("yel"); + break; + + case "vehicle_80s_sedan1_brn": + vehicle_80s_sedan1("brn"); + break; + + case "vehicle_80s_hatch1_green": + vehicle_80s_hatch1("green"); + break; + + case "vehicle_80s_hatch1_red": + vehicle_80s_hatch1("red"); + break; + + case "vehicle_80s_hatch1_silv": + vehicle_80s_hatch1("silv"); + break; + + case "vehicle_80s_hatch1_tan": + vehicle_80s_hatch1("tan"); + break; + + case "vehicle_80s_hatch1_yel": + vehicle_80s_hatch1("yel"); + break; + + case "vehicle_80s_hatch1_brn": + vehicle_80s_hatch1("brn"); + break; + + case "vehicle_80s_hatch2_green": + func_09DE("green"); + break; + + case "vehicle_80s_hatch2_red": + func_09DE("red"); + break; + + case "vehicle_80s_hatch2_silv": + func_09DE("silv"); + break; + + case "vehicle_80s_hatch2_tan": + func_09DE("tan"); + break; + + case "vehicle_80s_hatch2_yel": + func_09DE("yel"); + break; + + case "vehicle_80s_hatch2_brn": + func_09DE("brn"); + break; + + case "vehicle_80s_wagon1_green": + func_09DF("green"); + break; + + case "vehicle_80s_wagon1_red": + func_09DF("red"); + break; + + case "vehicle_80s_wagon1_silv": + func_09DF("silv"); + break; + + case "vehicle_80s_wagon1_tan": + func_09DF("tan"); + break; + + case "vehicle_80s_wagon1_yel": + func_09DF("yel"); + break; + + case "vehicle_80s_wagon1_brn": + func_09DF("brn"); + break; + + case "vehicle_civ_car_a_1": + vehicle_civ_car_a(1); + break; + + case "vehicle_civ_car_a_2": + vehicle_civ_car_a(2); + break; + + case "vehicle_civ_car_a_3": + vehicle_civ_car_a(3); + break; + + case "vehicle_civ_car_a_4": + vehicle_civ_car_a(4); + break; + + case "vehicle_civ_car_a_5": + vehicle_civ_car_a(5); + break; + + case "vehicle_civ_car_a_6": + vehicle_civ_car_a(6); + break; + + case "vehicle_civ_car_a_7": + vehicle_civ_car_a(7); + break; + + case "vehicle_civ_car_a_8": + vehicle_civ_car_a(8); + break; + + case "vehicle_civ_car_a_9": + vehicle_civ_car_a(9); + break; + + case "vehicle_civ_car_a_10": + vehicle_civ_car_a(10); + break; + + case "vehicle_civ_car_a_11": + vehicle_civ_car_a(11); + break; + + case "vehicle_civ_car_a_12": + vehicle_civ_car_a(12); + break; + + case "vehicle_civ_car_a_13": + vehicle_civ_car_a(13); + break; + + case "vehicle_small_hatch_blue": + vehicle_small_hatch("blue"); + break; + + case "vehicle_london_cab_black": + func_09E2(); + break; + + case "vehicle_small_hatch_green": + vehicle_small_hatch("green"); + break; + + case "vehicle_small_hatch_turq": + vehicle_small_hatch("turq"); + break; + + case "vehicle_small_hatch_white": + vehicle_small_hatch("white"); + break; + + case "vehicle_pickup": + vehicle_pickup(param_00); + break; + + case "vehicle_hummer": + vehicle_hummer(param_00); + break; + + case "vehicle_gaz": + vehicle_gaz(param_00); + break; + + case "vehicle_gaz_harbor": + vehicle_gaz_harbor(param_00); + break; + + case "vehicle_moving_truck_thai": + case "vehicle_moving_truck": + vehicle_moving_truck(param_00); + break; + + case "vehicle_moving_truck_tham": + vehicle_moving_truck(param_00); + break; + + case "vehicle_subway_cart": + vehicle_subway_cart(param_00); + break; + + case "vehicle_subway_cart_windows": + vehicle_subway_cart_windows(param_00); + break; + + case "vehicle_subway_cart_windows_small": + vehicle_subway_cart_windows_small(param_00); + break; + + case "vehicle_bm21_mobile_bed": + vehicle_bm21(param_00,"vehicle_bm21_mobile_bed_dstry"); + break; + + case "vehicle_bm21_cover": + vehicle_bm21(param_00,"vehicle_bm21_mobile_cover_dstry"); + break; + + case "vehicle_luxurysedan_2008": + vehicle_luxurysedan(""); + break; + + case "vehicle_luxurysedan_2008_gray": + vehicle_luxurysedan("_gray"); + break; + + case "vehicle_luxurysedan_2008_white": + vehicle_luxurysedan("_white"); + break; + + case "vehicle_uk_truck": + vehicle_uk_truck(param_00); + break; + + case "vehicle_uk_police_estate": + vehicle_uk_police_estate(param_00); + break; + + case "vehicle_uaz_winter": + vehicle_uaz_winter(param_00); + break; + + case "vehicle_uaz_fabric": + vehicle_uaz_fabric(param_00); + break; + + case "vehicle_uaz_hardtop": + vehicle_uaz_hardtop(param_00); + break; + + case "vehicle_uaz_open": + vehicle_uaz_open(param_00); + break; + + case "vehicle_india_suv_w": + vehicle_india_suv("w"); + break; + + case "vehicle_india_suv_b": + vehicle_india_suv("b"); + break; + + case "vehicle_india_compact_destructible_gray": + vehicle_india_compact_destructible("gray"); + break; + + case "vehicle_india_compact_destructible_red": + vehicle_india_compact_destructible("red"); + break; + + case "vehicle_india_compact_destructible_brown": + vehicle_india_compact_destructible("brown"); + break; + + case "vehicle_india_compact_destructible_blue": + vehicle_india_compact_destructible("blue"); + break; + + case "vehicle_tuk_tuk": + vehicle_tuk_tuk(param_00); + break; + + case "vehicle_india_rickshaw": + vehicle_india_rickshaw(param_00); + break; + + case "vehicle_policecar": + vehicle_policecar(param_00); + break; + + case "vehicle_policecar_russia": + vehicle_policecar_russia(param_00); + break; + + case "vehicle_taxi": + vehicle_taxi(param_00); + break; + + case "vehicle_taxi_dubai": + vehicle_taxi_dubai(param_00); + break; + + case "vehicle_mig29_landed": + vehicle_mig29_landed(param_00); + break; + + case "vehicle_mack_truck_short_snow": + vehicle_mack_truck_short("snow"); + break; + + case "vehicle_mack_truck_short_green": + vehicle_mack_truck_short("green"); + break; + + case "vehicle_mack_truck_short_white": + vehicle_mack_truck_short("white"); + break; + + case "vehicle_motorcycle_01": + vehicle_motorcycle("01"); + break; + + case "vehicle_motorcycle_02": + vehicle_motorcycle("02"); + break; + + case "vehicle_scooter_vespa": + vehicle_scooter("vehicle_scooter_vespa"); + break; + + case "vehicle_subcompact_black": + vehicle_subcompact("black"); + break; + + case "vehicle_subcompact_blue": + vehicle_subcompact("blue"); + break; + + case "vehicle_subcompact_dark_gray": + vehicle_subcompact("dark_gray"); + break; + + case "vehicle_subcompact_deep_blue": + vehicle_subcompact("deep_blue"); + break; + + case "vehicle_subcompact_gold": + vehicle_subcompact("gold"); + break; + + case "vehicle_subcompact_gray": + vehicle_subcompact("gray"); + break; + + case "vehicle_subcompact_green": + vehicle_subcompact("green"); + break; + + case "vehicle_subcompact_mica": + vehicle_subcompact("mica"); + break; + + case "vehicle_subcompact_slate": + vehicle_subcompact("slate"); + break; + + case "vehicle_subcompact_tan": + vehicle_subcompact("tan"); + break; + + case "vehicle_subcompact_white": + vehicle_subcompact("white"); + break; + + case "vehicle_coupe_black": + vehicle_coupe("black"); + break; + + case "vehicle_coupe_blue": + vehicle_coupe("blue"); + break; + + case "vehicle_coupe_dark_gray": + vehicle_coupe("dark_gray"); + break; + + case "vehicle_coupe_deep_blue": + vehicle_coupe("deep_blue"); + break; + + case "vehicle_coupe_gold": + vehicle_coupe("gold"); + break; + + case "vehicle_coupe_gray": + vehicle_coupe("gray"); + break; + + case "vehicle_coupe_green": + vehicle_coupe("green"); + break; + + case "vehicle_coupe_mica": + vehicle_coupe("mica"); + break; + + case "vehicle_coupe_slate": + vehicle_coupe("slate"); + break; + + case "vehicle_coupe_tan": + vehicle_coupe("tan"); + break; + + case "vehicle_coupe_white": + vehicle_coupe("white"); + break; + + case "vehicle_van_black": + vehicle_van("black"); + break; + + case "vehicle_van_blue": + vehicle_van("blue"); + break; + + case "vehicle_van_dark_gray": + vehicle_van("dark_gray"); + break; + + case "vehicle_van_deep_blue": + vehicle_van("deep_blue"); + break; + + case "vehicle_van_gold": + vehicle_van("gold"); + break; + + case "vehicle_van_gray": + vehicle_van("gray"); + break; + + case "vehicle_van_green": + vehicle_van("green"); + break; + + case "vehicle_van_mica": + vehicle_van("mica"); + break; + + case "vehicle_van_slate": + vehicle_van("slate"); + break; + + case "vehicle_van_tan": + vehicle_van("tan"); + break; + + case "vehicle_van_white": + vehicle_van("white"); + break; + + case "vehicle_suburban": + vehicle_suburban(param_00,""); + break; + + case "vehicle_suburban_beige": + vehicle_suburban(param_00,"_beige"); + break; + + case "vehicle_suburban_dull": + vehicle_suburban(param_00,"_dull"); + break; + + case "vehicle_suburban_red": + vehicle_suburban(param_00,"_red"); + break; + + case "vehicle_snowmobile": + vehicle_snowmobile(param_00); + break; + + case "destructible_gaspump": + destructible_gaspump(param_00); + break; + + case "destructible_electrical_transformer_large": + destructible_electrical_transformer_large(param_00); + break; + + case "toy_new_dlc_destructible": + toy_glass("120x110"); + break; + + case "toy_security_camera": + toy_security_camera(param_00); + break; + + case "toy_security_camera_down": + toy_security_camera2(param_00,"security_camera_idle_down"); + break; + + case "toy_security_camera_l_down": + toy_security_camera2(param_00,"security_camera_idle_l_down"); + break; + + case "toy_security_camera_still": + toy_security_camera2(param_00,"security_camera_null"); + break; + + case "toy_security_camera_still_l_down": + toy_security_camera2(param_00,"security_camera_null_l_down"); + break; + + case "toy_security_camera_still_r_down": + toy_security_camera2(param_00,"security_camera_null_r_down"); + break; + + case "toy_building_collapse_paris_ac130": + toy_building_collapse_paris_ac130(param_00); + break; + + case "toy_poison_gas_attack": + toy_poison_gas_attack(param_00); + break; + + case "toy_arcade_machine_1": + toy_arcade_machine("_1"); + break; + + case "toy_arcade_machine_2": + toy_arcade_machine("_2"); + break; + + case "toy_pinball_machine_1": + toy_pinball_machine("_1"); + break; + + case "toy_pinball_machine_2": + toy_pinball_machine("_2"); + break; + + case "toy_fortune_machine": + toy_fortune_machine(param_00); + break; + + case "toy_trashcan_clown": + toy_trashcan_clown(param_00); + break; + + case "toy_afrShanty1": + func_0A1B(param_00); + break; + + case "vehicle_slava_ny_harbor_zonea": + vehicle_slava_ny_harbor_zonea(param_00); + break; + + case "rooftop_skylight_destructible": + rooftop_skylight_destructible(param_00); + break; + + case "satellite_dish_big_destructible": + satellite_dish_big_destructible(param_00); + break; + + case "vehicle_truck_heavyduty_white": + case "vehicle_truck_heavyduty_red": + case "vehicle_truck_heavyduty_blue": + case "vehicle_truck_heavyduty_black": + case "vehicle_truck_dually_white": + case "vehicle_truck_dually_red": + case "vehicle_truck_dually_blue": + case "vehicle_truck_dually_black": + vehicle_truck(param_00); + break; + + case "berlin_hotel_lights_ceiling1": + berlin_hotel_lights_ceiling1(param_00,"berlin_hotel_lights_ceiling1_destroyed"); + break; + + case "berlin_hotel_lights_ceiling1_off": + berlin_hotel_lights_ceiling1(param_00,"berlin_hotel_lights_ceiling1_destroyed"); + break; + + case "berlin_hotel_lights_wall1": + dest_onestate(param_00,"berlin_hotel_lights_wall1_destroyed","misc/light_blowout_wall2_runner"); + break; + + case "berlin_hotel_lights_wall1_off": + dest_onestate(param_00,"berlin_hotel_lights_wall1_destroyed","misc/light_blowout_wall2_runner"); + break; + + case "berlin_hotel_lights_wall2": + dest_onestate(param_00,"berlin_hotel_lights_wall2_destroyed","misc/light_blowout_wall_runner"); + break; + + case "berlin_hotel_lights_wall2_off": + dest_onestate(param_00,"berlin_hotel_lights_wall2_destroyed","misc/light_blowout_wall_runner"); + break; + + case "pb_cubical_planter": + dest_pb_planter(param_00,"pb_cubical_planter_dam","explosions/brick_chunk"); + break; + + case "vehicle_delivery_theme_park_truck_destructible": + vehicle_delivery_theme_park_truck_destructible(param_00); + break; + + case "vehicle_van_sas_dark_destructable": + vehicle_van_iw5("vehicle_van_sas_dark"); + break; + + case "vehicle_van_sas_dark_destructable_gas": + vehicle_van_iw5_gas("vehicle_van_sas_dark"); + break; + + case "vehicle_uk_police_van_destructable": + vehicle_van_iw5("vehicle_uk_police_van"); + break; + + case "vehicle_jeep_dusty": + vehicle_jeep_dusty(param_00); + break; + + case "toy_old_wood_barrel_01": + toy_old_wood_barrels("barrel_01","barrel_01_dest","bottom"); + break; + + case "toy_old_wood_barrel_02": + toy_old_wood_barrels("barrel_02","barrel_02_dest","bottom"); + break; + + case "toy_old_wood_tall_barrel_01": + toy_old_wood_barrels("tall_barrel_01","tall_barrel_01_dest","tall_bottom"); + break; + + case "toy_old_wood_tall_barrel_02": + toy_old_wood_barrels("tall_barrel_02","tall_barrel_02_dest","tall_bottom"); + break; + + case "toy_terracotta_pot_a_white_dest": + toy_terracotta_pot(param_00,"a_white"); + break; + + case "toy_terracotta_pot_a_violet_dest": + toy_terracotta_pot(param_00,"a_violet"); + break; + + case "toy_terracotta_pot_b_yellow_dest": + toy_terracotta_pot(param_00,"b_yellow"); + break; + + case "toy_terracotta_pot_b_red_dest": + toy_terracotta_pot(param_00,"b_red"); + break; + + case "toy_furniture_coffee_table_modern_01": + toy_furniture_coffee_table_modern(param_00,"1",55); + break; + + case "toy_furniture_coffee_table_modern_02": + toy_furniture_coffee_table_modern(param_00,"2",60); + break; + + default: + break; + } + + var_01 = getinfoindex(param_00); + return var_01; +} + +//Function Number: 2 +getinfoindex(param_00) +{ + if(!isdefined(level.destructible_type)) + { + return -1; + } + + if(level.destructible_type.size == 0) + { + return -1; + } + + for(var_01 = 0;var_01 < level.destructible_type.size;var_01++) + { + if(param_00 == level.destructible_type[var_01].v["type"]) + { + return var_01; + } + } + + return -1; +} + +//Function Number: 3 +prop_ac_prs_enm_barge_a(param_00) +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_barge_a_" + param_00,"tag_origin",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("tag_origin","ac_prs_enm_barge_a_" + param_00 + "_dam_animated",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_anim(get_precached_anim("paris_ac130_barge_sink"),get_precached_animtree("paris_ac130_barge_sink"),"setanim"); + common_scripts\_destructible::destructible_fx(undefined,"impacts/105mm_water_impact_fast",0); + common_scripts\_destructible::func_976(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 4 +prop_ac_prs_enm_con_digger_a() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_con_digger_a","ac_prs_enm_con_digger_a_lod_0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_enm_con_digger_a_dam_lod0","ac_prs_enm_con_digger_a_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/building_explosion_paris_ac130",0); + common_scripts\_destructible::func_976(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 5 +func_0979() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_con_dump_truck_a","ac_prs_enm_con_dump_truck_a_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_enm_con_dump_truck_a_destroyed_lod0","ac_prs_enm_con_dump_truck_a_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/building_explosion_paris_ac130",0); + common_scripts\_destructible::func_976(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 6 +prop_ac_prs_enm_fuel_tank_a() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_fuel_tank_a","ac_prs_enm_fuel_tank_a_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_enm_fuel_tank_a_dam_lod0","ac_prs_enm_fuel_tank_a_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/fuel_storage",0); + common_scripts\_destructible::func_976(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 7 +prop_ac_prs_enm_hanger_a() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_hanger_a","ac_prs_enm_hanger_a_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_enm_hanger_a_dam_lod0","ac_prs_enm_hanger_a_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/building_explosion_paris_ac130",0); +} + +//Function Number: 8 +prop_ac_prs_enm_maz_a() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_maz_a","ac_prs_enm_maz_a",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_enm_maz_a_dam3","ac_prs_enm_maz_a_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/building_explosion_paris_ac130",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_flir_debris_explosion_a",0); + common_scripts\_destructible::func_976(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 9 +prop_ac_prs_enm_mi26_halo_a() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_mi26_halo_a","ac_prs_enm_mi26_halo_a_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("polySurface80","ac_prs_enm_mi26_halo_a_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/helicopter_explosion_mi26_halo",0); + common_scripts\_destructible::func_976(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 10 +prop_ac_prs_enm_mstas_a() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_mstas_a","ac_prs_enm_mstas_a_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_enm_mstas_a_dam_lod0","ac_prs_enm_mstas_a_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_flir_debris_explosion_a",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_debris_explosion_fire_a",0); + common_scripts\_destructible::func_976(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 11 +prop_ac_prs_enm_radar_maz_a() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_radar_maz_a","tag_origin",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("tag_origin","ac_prs_enm_radar_maz_a",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_anim(get_precached_anim("ac130_radartower_crash"),get_precached_animtree("ac130_radartower_crash"),"setanim"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/building_explosion_paris_ac130",0); + common_scripts\_destructible::func_976(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 12 +prop_ac_prs_enm_s300v_a() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_s300v_a","ac_prs_enm_s300v",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_enm_s300v_dam","ac_prs_enm_s300v_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/vehicle_explosion_sam",0); + common_scripts\_destructible::func_976(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 13 +prop_ac_prs_enm_storage_bld(param_00,param_01) +{ + var_02 = ""; + if(isdefined(param_01)) + { + var_02 = "_" + param_01; + } + + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_storage_bld_" + param_00 + var_02,"p_ac_prs_enm_storage_bld_" + param_00 + var_02,250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("p_ac_prs_enm_storage_bld_" + param_00 + var_02 + "_dam","ac_prs_enm_storage_bld_" + param_00 + var_02 + "_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/building_explosion_paris_ac130",0); + var_03 = "a"; + switch(param_00) + { + case "b": + var_03 = "max_a"; + break; + } + + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_flir_debris_explosion_" + var_03,0); +} + +//Function Number: 14 +prop_ac_prs_enm_tent(param_00) +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_tent_" + param_00,"ac_prs_enm_tent_" + param_00 + "_lod0",250,undefined,32,"no_melee"); + var_01 = "ac_prs_enm_tent_" + param_00 + "_lod1"; + switch(param_00) + { + case "a": + var_01 = "polySurface1"; + break; + } + + common_scripts\_destructible::destructible_state(var_01,"ac_prs_enm_tent_" + param_00 + "_dam1",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/tent_collapse",0); +} + +//Function Number: 15 +prop_ac_prs_enm_truck_a() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_truck_a","ac_prs_enm_truck_a_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_enm_truck_a_dam_lod0","ac_prs_enm_truck_a_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/building_explosion_paris_ac130",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_flir_debris_explosion_a",0); + common_scripts\_destructible::func_976(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 16 +prop_ac_prs_enm_cargo_crate_a(param_00) +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_cargo_crate_a_" + param_00,"ac_prs_enm_cargo_crate_a_" + param_00 + "_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_enm_cargo_crate_a_" + param_00 + "_lod0","ac_prs_enm_cargo_crate_a_" + param_00 + "_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/building_explosion_paris_ac130",0); + common_scripts\_destructible::func_976(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 17 +prop_ac_prs_enm_crates(param_00,param_01) +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_crates_" + param_00 + "_" + param_01,"ac_prs_enm_crates_" + param_00 + "_" + param_01 + "_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_enm_crates_" + param_00 + "_" + param_01 + "_dam_lod0","ac_prs_enm_crates_" + param_00 + "_" + param_01 + "_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_enm_crates_" + param_00 + "_explosion_1",0); +} + +//Function Number: 18 +prop_ac_prs_enm_mobile_crane_a() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_mobile_crane_a","ac_prs_enm_mobile_crane_a_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_enm_mobile_crane_a_dam_lod0","ac_prs_enm_mobile_crane_a_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/building_explosion_paris_ac130",0); + common_scripts\_destructible::func_976(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 19 +prop_ac_prs_enm_landing_craft_a() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_landing_craft_a","ac_prs_enm_landing_craft_a_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("tag_origin","ac_prs_enm_landing_craft_a_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/building_explosion_paris_ac130",0); + common_scripts\_destructible::func_976(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 20 +prop_ac_prs_enm_speed_boat_a() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_speed_boat_a","ac_prs_enm_speed_boat_a",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_prp_metal_debris_a_01_lod0","ac_prs_prp_metal_debris_a_01",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/building_explosion_paris_ac130",0); + common_scripts\_destructible::func_976(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 21 +prop_ac_prs_prp_satellite_dish_a_dish() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_prp_satellite_dish_a_dish","ac_prs_prp_satellite_dish_a_dish_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_prp_metal_debris_a_01_lod0","ac_prs_prp_metal_debris_a_01",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_dust_explosion_a",0); + common_scripts\_destructible::func_976(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 22 +prop_ac_prs_fps_hc_extc_balcony(param_00,param_01) +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_fps_hc_extc_balcony_" + param_00 + param_01,"ac_prs_fps_hc_extc_balcony_" + param_00 + "_lod0",80,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_fps_hc_extc_balcony_" + param_00 + "_dam" + param_01 + "_lod0","ac_prs_fps_hc_extc_balcony_" + param_00 + "_dam" + param_01,250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_dust_explosion_a",0); + var_02 = "explosions/ac_prs_fps_extc_balcony_a_explosion_1"; + switch(param_00) + { + case "b": + var_02 = "explosions/ac_prs_fps_extc_balcony_b_explosion_1"; + break; + + case "c": + var_02 = "explosions/ac_prs_fps_extc_balcony_c_explosion_" + param_01; + break; + } + + common_scripts\_destructible::destructible_fx(undefined,var_02,0); +} + +//Function Number: 23 +prop_ac_prs_fps_hc_extc_column(param_00,param_01,param_02) +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_fps_hc_extc_column_" + param_00 + "_" + param_01 + param_02,"ac_prs_fps_hc_extc_column_" + param_00 + "_" + param_01 + "_lod0",80,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_fps_hc_extc_column_" + param_00 + "_" + param_01 + "_dam" + param_02 + "_lod0","ac_prs_fps_hc_extc_column_" + param_00 + "_" + param_01 + "_dam" + param_02,250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_dust_explosion_a",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fps_extc_balcony_c_explosion_2",0); +} + +//Function Number: 24 +prop_ac_prs_enm_missile_boat_a() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_missile_boat_a","tag_origin",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("tag_origin","ac_prs_enm_missile_boat_a",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_anim(get_precached_anim("paris_ac130_ship_sink"),get_precached_animtree("paris_ac130_ship_sink"),"setanim"); + common_scripts\_destructible::destructible_fx(undefined,"impacts/105mm_water_impact_fast",0); + common_scripts\_destructible::func_976(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 25 +prop_bv_prp_mvillage_tstore_a() +{ + common_scripts\_destructible::destructible_create("prop_bv_prp_mvillage_tstore_a","bv_prp_mvillage_tstore_a_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"dust/scaffolding_dust_wood_debris_lg",0); + common_scripts\_destructible::destructible_state("bv_prp_mvillage_tstore_a_dam_lod0","bv_prp_mvillage_tstore_a_dam",250,undefined,32,"no_melee"); +} + +//Function Number: 26 +prop_bv_prp_mvillage_tstore_b() +{ + common_scripts\_destructible::destructible_create("prop_bv_prp_mvillage_tstore_b","bv_prp_mvillage_tstore_b_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"dust/scaffolding_dust_wood_debris_lg",0); + common_scripts\_destructible::destructible_state("bv_prp_mvillage_tstore_b_dam_lod0","bv_prp_mvillage_tstore_b_dam",250,undefined,32,"no_melee"); +} + +//Function Number: 27 +prop_bv_prp_mvillage_tstore_c() +{ + common_scripts\_destructible::destructible_create("prop_bv_prp_mvillage_tstore_c","bv_prp_mvillage_tstore_c_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"dust/scaffolding_dust_wood_debris_lg",0); + common_scripts\_destructible::destructible_state("bv_prp_mvillage_tstore_c_dam_lod0","bv_prp_mvillage_tstore_c_dam",250,undefined,32,"no_melee"); +} + +//Function Number: 28 +prop_bv_prp_mvillage_tstore_d() +{ + common_scripts\_destructible::destructible_create("prop_bv_prp_mvillage_tstore_d","bv_prp_mvillage_tstore_d_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"dust/scaffolding_dust_wood_debris_lg",0); + common_scripts\_destructible::destructible_state("bv_prp_mvillage_tstore_d_dam_lod0","bv_prp_mvillage_tstore_d_dam",250,undefined,32,"no_melee"); +} + +//Function Number: 29 +prop_bv_prp_mvillage_church_a1() +{ + common_scripts\_destructible::destructible_create("prop_bv_prp_mvillage_church_a1","bv_prp_mvillage_church_a1_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"dust/scaffolding_dust_wood_debris_lg",0); + common_scripts\_destructible::destructible_state("bv_prp_mvillage_church_a1_dam_lod0","bv_prp_mvillage_church_a1_dam",250,undefined,32,"no_melee"); +} + +//Function Number: 30 +prop_bv_prp_mvillage_church_a2() +{ + common_scripts\_destructible::destructible_create("prop_bv_prp_mvillage_church_a2","bv_prp_mvillage_church_a2_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"dust/scaffolding_dust_wood_debris_lg",0); + common_scripts\_destructible::destructible_state("bv_prp_mvillage_church_a2_dam_lod0","bv_prp_mvillage_church_a2_dam",250,undefined,32,"no_melee"); +} + +//Function Number: 31 +prop_bv_prp_mvillage_church_a3() +{ + common_scripts\_destructible::destructible_create("prop_bv_prp_mvillage_church_a3","bv_prp_mvillage_church_a3_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"dust/scaffolding_dust_wood_debris_lg",0); + common_scripts\_destructible::destructible_state("bv_prp_mvillage_church_a3_dam_lod0","bv_prp_mvillage_church_a3_dam",250,undefined,32,"no_melee"); +} + +//Function Number: 32 +prop_bv_prp_mvillage_church_a4() +{ + common_scripts\_destructible::destructible_create("prop_bv_prp_mvillage_church_a4","bv_prp_mvillage_church_a4_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"dust/scaffolding_dust_wood_debris_lg",0); + common_scripts\_destructible::destructible_state("bv_prp_mvillage_church_a4_dam_lod0","bv_prp_mvillage_church_a4_dam",250,undefined,32,"no_melee"); +} + +//Function Number: 33 +prop_bv_prp_mvillage_church_a5() +{ + common_scripts\_destructible::destructible_create("prop_bv_prp_mvillage_church_a5","bv_prp_mvillage_church_a5_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"dust/scaffolding_dust_wood_debris_lg",0); + common_scripts\_destructible::destructible_state("bv_prp_mvillage_church_a5_dam_lod0","bv_prp_mvillage_church_a5_dam",250,undefined,32,"no_melee"); +} + +//Function Number: 34 +prop_bv_prp_mvillage_tudorg_a1() +{ + common_scripts\_destructible::destructible_create("prop_bv_prp_mvillage_tudorg_a1","bv_prp_mvillage_tudorg_a1_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"dust/scaffolding_dust_wood_debris_lg",0); + common_scripts\_destructible::destructible_state("bv_prp_mvillage_tudorg_a1_dam_lod0","bv_prp_mvillage_tudorg_a1_dam",250,undefined,32,"no_melee"); +} + +//Function Number: 35 +prop_bv_prp_mvillage_tudorg_a2() +{ + common_scripts\_destructible::destructible_create("prop_bv_prp_mvillage_tudorg_a2","bv_prp_mvillage_tudorg_a2_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"dust/scaffolding_dust_wood_debris_lg",0); + common_scripts\_destructible::destructible_state("bv_prp_mvillage_tudorg_a2_dam_lod0","bv_prp_mvillage_tudorg_a2_dam",250,undefined,32,"no_melee"); +} + +//Function Number: 36 +prop_bv_prp_mvillage_tudorg_a3() +{ + common_scripts\_destructible::destructible_create("prop_bv_prp_mvillage_tudorg_a3","bv_prp_mvillage_tudorg_a3_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"dust/scaffolding_dust_wood_debris_lg",0); + common_scripts\_destructible::destructible_state("bv_prp_mvillage_tudorg_a3_dam_lod0","bv_prp_mvillage_tudorg_a3_dam",250,undefined,32,"no_melee"); +} + +//Function Number: 37 +prop_bv_prp_mvillage_tudor_a() +{ + common_scripts\_destructible::destructible_create("prop_bv_prp_mvillage_tudor_a","bv_prp_mvillage_tudor_a_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"dust/scaffolding_dust_wood_debris_lg",0); + common_scripts\_destructible::destructible_state("bv_prp_mvillage_tudor_a_dam_lod0","bv_prp_mvillage_tudor_a_dam",250,undefined,32,"no_melee"); +} + +//Function Number: 38 +prop_bv_prp_mvillage_grand_house_a() +{ + common_scripts\_destructible::destructible_create("prop_bv_prp_mvillage_grand_house_a","bv_prp_mvillage_grand_house_a_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"dust/scaffolding_dust_wood_debris_lg",0); + common_scripts\_destructible::destructible_state("bv_prp_mvillage_grand_house_a_dam_lod0","bv_prp_mvillage_grand_house_a_dam",250,undefined,32,"no_melee"); +} + +//Function Number: 39 +prop_bv_prp_mvillage_grand_house_a1() +{ + common_scripts\_destructible::destructible_create("prop_bv_prp_mvillage_grand_house_a1","bv_prp_mvillage_grand_house_a1_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"dust/scaffolding_dust_wood_debris_lg",0); + common_scripts\_destructible::destructible_state("bv_prp_mvillage_grand_house_a1_dam_lod0","bv_prp_mvillage_grand_house_a1_dam",250,undefined,32,"no_melee"); +} + +//Function Number: 40 +prop_bv_prp_mvillage_grand_house_a2() +{ + common_scripts\_destructible::destructible_create("prop_bv_prp_mvillage_grand_house_a2","bv_prp_mvillage_grand_house_a2_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"dust/scaffolding_dust_wood_debris_lg",0); + common_scripts\_destructible::destructible_state("bv_prp_mvillage_grand_house_a2_dam_lod0","bv_prp_mvillage_grand_house_a2_dam",250,undefined,32,"no_melee"); +} + +//Function Number: 41 +prop_bv_prp_mvillage_hse_a() +{ + common_scripts\_destructible::destructible_create("prop_bv_prp_mvillage_hse_a","bv_prp_mvillage_hse_a_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"dust/scaffolding_dust_wood_debris_lg",0); + common_scripts\_destructible::destructible_state("bv_prp_mvillage_hse_a_dam_lod0","bv_prp_mvillage_hse_a_dam",250,undefined,32,"no_melee"); +} + +//Function Number: 42 +prop_bv_prp_mvillage_pub_a() +{ + common_scripts\_destructible::destructible_create("prop_bv_prp_mvillage_pub_a","bv_prp_mvillage_pub_a_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"dust/scaffolding_dust_wood_debris_lg",0); + common_scripts\_destructible::destructible_state("bv_prp_mvillage_pub_a_dam_lod0","bv_prp_mvillage_pub_a_dam",250,undefined,32,"no_melee"); +} + +//Function Number: 43 +prop_bv_prp_mvillage_pub_a1() +{ + common_scripts\_destructible::destructible_create("prop_bv_prp_mvillage_pub_a1","bv_prp_mvillage_pub_a1_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"dust/scaffolding_dust_wood_debris_lg",0); + common_scripts\_destructible::destructible_state("bv_prp_mvillage_pub_a1_dam_lod0","bv_prp_mvillage_pub_a1_dam",250,undefined,32,"no_melee"); +} + +//Function Number: 44 +prop_bv_prp_mvillage_thatch_cottage_a() +{ + common_scripts\_destructible::destructible_create("prop_bv_prp_mvillage_thatch_cottage_a","bv_prp_mvillage_thatch_cottage_a_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"dust/scaffolding_dust_wood_debris_lg",0); + common_scripts\_destructible::destructible_state("bv_prp_mvillage_thatch_cottage_a_dam_lod0","bv_prp_mvillage_thatch_cottage_a_dam",250,undefined,32,"no_melee"); +} + +//Function Number: 45 +prop_bv_prp_mvillage_thatch_cottage_a1() +{ + common_scripts\_destructible::destructible_create("prop_bv_prp_mvillage_thatch_cottage_a1","bv_prp_mvillage_thatch_cottage_a1_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"dust/scaffolding_dust_wood_debris_lg",0); + common_scripts\_destructible::destructible_state("bv_prp_mvillage_thatch_cottage_a1_dam_lod0","bv_prp_mvillage_thatch_cottage_a1_dam",250,undefined,32,"no_melee"); +} + +//Function Number: 46 +prop_bv_prp_mvillage_thatch_cottage_b() +{ + common_scripts\_destructible::destructible_create("prop_bv_prp_mvillage_thatch_cottage_b","bv_prp_mvillage_thatch_cottage_b_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"dust/scaffolding_dust_wood_debris_lg",0); + common_scripts\_destructible::destructible_state("bv_prp_mvillage_thatch_cottage_b_dam_lod0","bv_prp_mvillage_thatch_cottage_b_dam",250,undefined,32,"no_melee"); +} + +//Function Number: 47 +toy_glass(param_00) +{ + common_scripts\_destructible::destructible_create("toy_glass" + param_00,"tag_origin",50); + common_scripts\_destructible::destructible_splash_damage_scaler(5); + common_scripts\_destructible::destructible_sound("building_glass_shatter"); + var_01 = "tag_glass"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/highrise_glass_" + param_00); + common_scripts\_destructible::destructible_sound("building_glass_blowout"); + common_scripts\_destructible::destructible_state(var_01 + "_des",undefined,100,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/highrise_glass_" + param_00 + "_edge"); + common_scripts\_destructible::destructible_sound("building_glass_blowout"); + common_scripts\_destructible::destructible_state(undefined); +} + +//Function Number: 48 +toy_dt_mirror(param_00) +{ + common_scripts\_destructible::destructible_create("toy_dt_mirror" + param_00,"tag_origin",150,undefined,32); + common_scripts\_destructible::destructible_splash_damage_scaler(5); + common_scripts\_destructible::destructible_fx("tag_fx","props/mirror_shatter" + param_00); + common_scripts\_destructible::destructible_sound("mirror_shatter"); + common_scripts\_destructible::destructible_state("tag_origin","dt_mirror" + param_00 + "_dam",150,undefined); + common_scripts\_destructible::destructible_fx("tag_fx","props/mirror_dt_panel" + param_00 + "_broken"); + common_scripts\_destructible::func_976(1000,2000,32,32,32,48,undefined,0); + common_scripts\_destructible::destructible_state("tag_origin","dt_mirror" + param_00 + "_des",150,undefined); +} + +//Function Number: 49 +toy_icbm_consolemonitor(param_00) +{ + common_scripts\_destructible::destructible_create("toy_icbm_consolemonitor" + param_00,"television2_lod04",1,undefined,32); + common_scripts\_destructible::destructible_splash_damage_scaler(1); + common_scripts\_destructible::destructible_fx("television2_lod04","explosions/tv_explosion"); + common_scripts\_destructible::destructible_sound("tv_shot_burst","television2_lod04"); + common_scripts\_destructible::func_976(20,2000,9,9,3,3,undefined,12); + common_scripts\_destructible::destructible_state("television2_lod04","hjk_icbm_consolemonitor7",undefined,undefined,"no_melee"); +} + +//Function Number: 50 +toy_tubetv_(param_00) +{ + common_scripts\_destructible::destructible_create("toy_tubetv_" + param_00,"tag_origin",1,undefined,32); + common_scripts\_destructible::destructible_splash_damage_scaler(1); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/tv_explosion"); + common_scripts\_destructible::destructible_sound("tv_shot_burst"); + common_scripts\_destructible::func_976(20,2000,9,9,3,3,undefined,12); + common_scripts\_destructible::destructible_state(undefined,"com_" + param_00 + "_d",undefined,undefined,"no_melee"); +} + +//Function Number: 51 +toy_tvs_flatscreen(param_00,param_01) +{ + common_scripts\_destructible::destructible_create("toy_tv_flatscreen_" + param_01 + param_00,"tag_origin",1,undefined,32); + common_scripts\_destructible::destructible_splash_damage_scaler(1); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/tv_flatscreen_explosion"); + common_scripts\_destructible::destructible_sound("tv_shot_burst"); + common_scripts\_destructible::func_976(20,2000,10,10,3,3,undefined,15); + common_scripts\_destructible::destructible_state(undefined,"ma_flatscreen_tv_" + param_01 + "broken_" + param_00,200,undefined,"no_melee"); +} + +//Function Number: 52 +func_09A9(param_00,param_01) +{ + common_scripts\_destructible::destructible_create("toy_tv_flatscreen_" + param_01 + param_00 + "_sturdy","tag_origin",1,undefined,1280); + common_scripts\_destructible::destructible_splash_damage_scaler(0.5); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/tv_flatscreen_explosion_cheap"); + common_scripts\_destructible::destructible_sound("tv_shot_burst"); + common_scripts\_destructible::func_976(20,2000,10,10,3,3,undefined,15); + common_scripts\_destructible::destructible_state(undefined,"ma_flatscreen_tv_" + param_01 + "broken_" + param_00,200,undefined,"no_melee"); +} + +//Function Number: 53 +toy_transformer_ratnest01(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",75,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(15); + common_scripts\_destructible::destructible_loopfx("tag_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,75,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,150,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_sparks","explosions/transformer_spark_runner",0.5); + common_scripts\_destructible::destructible_loopsound("transformer_spark_loop"); + common_scripts\_destructible::destructible_healthdrain(24,0.2); + common_scripts\_destructible::destructible_state(undefined,undefined,250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_sparks","explosions/transformer_spark_runner",0.5); + common_scripts\_destructible::destructible_loopfx("tag_fx","fire/transformer_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("transformer01_flareup_med"); + common_scripts\_destructible::destructible_loopsound("transformer_spark_loop"); + common_scripts\_destructible::destructible_healthdrain(24,0.2,150,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,5,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/transformer_explosion",0); + common_scripts\_destructible::destructible_fx("tag_fx","fire/firelp_small_pm"); + common_scripts\_destructible::destructible_sound("transformer01_explode"); + common_scripts\_destructible::func_976(7000,8000,150,256,16,100,undefined,0); + common_scripts\_destructible::destructible_state(undefined,"utility_transformer_ratnest01_dest",undefined,undefined,"no_melee"); +} + +//Function Number: 54 +toy_transformer_small01(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",75,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(15); + common_scripts\_destructible::destructible_loopfx("tag_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,75,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,150,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_fx","explosions/transformer_spark_runner",0.5); + common_scripts\_destructible::destructible_loopsound("transformer_spark_loop"); + common_scripts\_destructible::destructible_healthdrain(24,0.2); + common_scripts\_destructible::destructible_state(undefined,undefined,250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_fx","explosions/transformer_spark_runner",0.5); + common_scripts\_destructible::destructible_loopfx("tag_fx","fire/transformer_small_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("transformer01_flareup_med"); + common_scripts\_destructible::destructible_loopsound("transformer_spark_loop"); + common_scripts\_destructible::destructible_healthdrain(24,0.2,150,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,5,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/transformer_explosion",0); + common_scripts\_destructible::destructible_fx("tag_fx","fire/firelp_small_pm"); + common_scripts\_destructible::destructible_sound("transformer01_explode"); + common_scripts\_destructible::func_976(7000,8000,150,256,16,100,undefined,0); + common_scripts\_destructible::destructible_state(undefined,"utility_transformer_small01_dest",undefined,undefined,"no_melee"); +} + +//Function Number: 55 +toy_generator(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_bounce",75,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(15); + common_scripts\_destructible::destructible_loopfx("tag_fx2","smoke/generator_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,75,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_fx2","smoke/generator_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_fx2","smoke/generator_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_loopfx("tag_fx4","explosions/generator_spark_runner",0.9); + common_scripts\_destructible::destructible_loopfx("tag_fx3","explosions/generator_spark_runner",0.6123); + common_scripts\_destructible::destructible_loopsound("generator_spark_loop"); + common_scripts\_destructible::destructible_healthdrain(24,0.2,64,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,5,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/generator_explosion",1); + common_scripts\_destructible::destructible_fx("tag_fx","fire/generator_des_fire",1); + common_scripts\_destructible::destructible_sound("generator01_explode"); + common_scripts\_destructible::func_976(7000,8000,128,128,16,50,undefined,0); + common_scripts\_destructible::destructible_anim(get_precached_anim("enerator_explode"),#animtree,"setanimknob",undefined,undefined,"generator_explode"); + common_scripts\_destructible::destructible_state(undefined,"machinery_generator_des",undefined,undefined,"no_melee"); +} + +//Function Number: 56 +func_09B0(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_bounce",0,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(15); + common_scripts\_destructible::destructible_loopfx("tag_fx2","smoke/generator_exhaust",0.4); + common_scripts\_destructible::destructible_anim(get_precached_anim("enerator_vibration"),#animtree,"setanimknob",undefined,undefined,"generator_vibration"); + common_scripts\_destructible::destructible_loopsound("generator_running"); + common_scripts\_destructible::destructible_state("tag_origin","machinery_generator",150); + common_scripts\_destructible::destructible_loopfx("tag_fx2","smoke/generator_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_loopsound("generator_running"); + common_scripts\_destructible::destructible_state(undefined,undefined,75,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_fx2","smoke/generator_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_loopsound("generator_damage_loop"); + common_scripts\_destructible::destructible_state(undefined,undefined,250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_fx2","smoke/generator_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_loopfx("tag_fx4","explosions/generator_spark_runner",0.9); + common_scripts\_destructible::destructible_loopfx("tag_fx3","explosions/generator_spark_runner",0.6123); + common_scripts\_destructible::destructible_loopsound("generator_spark_loop"); + common_scripts\_destructible::destructible_loopsound("generator_damage_loop"); + common_scripts\_destructible::destructible_healthdrain(24,0.2,64,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,5,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/generator_explosion",0); + common_scripts\_destructible::destructible_fx("tag_fx","fire/generator_des_fire"); + common_scripts\_destructible::destructible_sound("generator01_explode"); + common_scripts\_destructible::func_976(7000,8000,128,128,16,50,undefined,0); + common_scripts\_destructible::destructible_anim(get_precached_anim("enerator_explode"),#animtree,"setanimknob",undefined,0,"generator_explode"); + common_scripts\_destructible::destructible_anim(get_precached_anim("enerator_explode_02"),#animtree,"setanimknob",undefined,0,"generator_explode_02"); + common_scripts\_destructible::destructible_anim(get_precached_anim("enerator_explode_03"),#animtree,"setanimknob",undefined,0,"generator_explode_03"); + common_scripts\_destructible::destructible_state(undefined,"machinery_generator_des",undefined,undefined,"no_melee"); +} + +//Function Number: 57 +toy_oxygen_tank(param_00) +{ + common_scripts\_destructible::destructible_create("toy_oxygen_tank_" + param_00,"tag_origin",150,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,64,"allies"); + common_scripts\_destructible::destructible_loopsound("oxygen_tank_leak_loop"); + common_scripts\_destructible::destructible_fx("tag_cap","props/oxygen_tank" + param_00 + "_cap"); + common_scripts\_destructible::destructible_loopfx("tag_cap","distortion/oxygen_tank_leak",0.4); + common_scripts\_destructible::destructible_state(undefined,"machinery_oxygen_tank" + param_00 + "_dam",300,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/oxygen_tank" + param_00 + "_explosion",0); + common_scripts\_destructible::destructible_sound("oxygen_tank_explode"); + common_scripts\_destructible::func_976(7000,8000,150,256,16,150,undefined,32); + common_scripts\_destructible::destructible_state(undefined,"machinery_oxygen_tank" + param_00 + "_des",undefined,undefined,"no_melee"); +} + +//Function Number: 58 +toy_electricbox2(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",150,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(15); + common_scripts\_destructible::destructible_fx("tag_fx","props/electricbox4_explode",undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_sound("exp_fusebox_sparks"); + common_scripts\_destructible::func_976(1000,2000,32,32,32,48,undefined,0); + common_scripts\_destructible::destructible_state(undefined,"me_electricbox2_dest",undefined,undefined,"no_melee"); + common_scripts\_destructible::destructible_part("tag_fx","me_electricbox2_door",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_door_upper","me_electricbox2_door_upper",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 59 +toy_electricbox4(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",150,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(15); + common_scripts\_destructible::destructible_fx("tag_fx","props/electricbox4_explode",undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_sound("exp_fusebox_sparks"); + common_scripts\_destructible::func_976(20,2000,32,32,32,48,undefined,0); + common_scripts\_destructible::destructible_state(undefined,"me_electricbox4_dest",undefined,undefined,"no_melee"); + common_scripts\_destructible::destructible_part("tag_fx","me_electricbox4_door",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 60 +toy_airconditioner(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",0,undefined,32); + common_scripts\_destructible::destructible_anim(get_precached_anim("x_airconditioner_fan"),#animtree,"setanimknob",undefined,undefined,"ex_airconditioner_fan"); + common_scripts\_destructible::destructible_loopsound("airconditioner_running_loop"); + common_scripts\_destructible::destructible_state("tag_origin","com_ex_airconditioner",300); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/airconditioner_ex_explode",undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_sound("airconditioner_burst"); + common_scripts\_destructible::func_976(1000,2000,32,32,32,48,undefined,0); + common_scripts\_destructible::destructible_state(undefined,"com_ex_airconditioner_dam",undefined,undefined,"no_melee"); + common_scripts\_destructible::destructible_part("tag_fx","com_ex_airconditioner_fan",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 61 +toy_ceiling_fan(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",0,undefined,32); + common_scripts\_destructible::destructible_anim(get_precached_anim("e_fanceil1_spin"),#animtree,"setanimknob",undefined,undefined,"me_fanceil1_spin"); + common_scripts\_destructible::destructible_state("tag_origin","me_fanceil1",150); + common_scripts\_destructible::destructible_anim(get_precached_anim("e_fanceil1_spin_stop"),#animtree,"setanimknob",undefined,undefined,"me_fanceil1_spin_stop"); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/ceiling_fan_explosion"); + common_scripts\_destructible::destructible_sound("ceiling_fan_sparks"); + common_scripts\_destructible::func_976(1000,2000,32,32,5,32,undefined,0); + common_scripts\_destructible::destructible_state(undefined,"me_fanceil1_des",undefined,undefined,"no_melee"); + common_scripts\_destructible::destructible_part("tag_fx",undefined,150,undefined,undefined,undefined,1); +} + +//Function Number: 62 +toy_wall_fan(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_swivel",0,undefined,32); + common_scripts\_destructible::destructible_anim(get_precached_anim("all_fan_rotate"),#animtree,"setanimknob",undefined,undefined,"wall_fan_rotate"); + common_scripts\_destructible::destructible_loopsound("wall_fan_fanning"); + common_scripts\_destructible::destructible_state("tag_wobble","cs_wallfan1",150); + common_scripts\_destructible::destructible_anim(get_precached_anim("all_fan_stop"),#animtree,"setanimknob",undefined,undefined,"wall_fan_wobble"); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/wallfan_explosion_dmg"); + common_scripts\_destructible::destructible_sound("wall_fan_sparks"); + common_scripts\_destructible::destructible_state("tag_wobble","cs_wallfan1",150,undefined,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/wallfan_explosion_des"); + common_scripts\_destructible::destructible_sound("wall_fan_break"); + common_scripts\_destructible::destructible_state(undefined,"cs_wallfan1_dmg",undefined,undefined,"no_melee"); +} + +//Function Number: 63 +toy_propane_tank02(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",50,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(5); + common_scripts\_destructible::destructible_state(undefined,undefined,350,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("propanetank02_gas_leak_loop"); + common_scripts\_destructible::destructible_loopfx("tag_cap","distortion/propane_cap_distortion",0.1); + common_scripts\_destructible::destructible_state(undefined,undefined,350,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_cap","fire/propane_capfire_leak",0.1); + common_scripts\_destructible::destructible_sound("propanetank02_flareup_med"); + common_scripts\_destructible::destructible_loopsound("propanetank02_fire_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,300,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,150,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_physics("tag_cap",(50,0,0)); + common_scripts\_destructible::destructible_loopfx("tag_cap","fire/propane_capfire",0.6); + common_scripts\_destructible::destructible_fx("tag_valve","fire/propane_valvefire_flareup"); + common_scripts\_destructible::destructible_physics("tag_valve",(50,0,0)); + common_scripts\_destructible::destructible_fx("tag_cap","fire/propane_capfire_flareup"); + common_scripts\_destructible::destructible_loopfx("tag_valve","fire/propane_valvefire",0.1); + common_scripts\_destructible::destructible_sound("propanetank02_flareup2_med"); + common_scripts\_destructible::destructible_loopsound("propanetank02_fire_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,150,undefined,5,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","fire/propane_small_fire"); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/propane_large_exp_fireball"); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/propane_large_exp",0); + common_scripts\_destructible::destructible_sound("propanetank02_explode"); + common_scripts\_destructible::destructible_loopsound("propanetank02_fire_blown_med"); + common_scripts\_destructible::func_976(7000,8000,600,600,32,300); + common_scripts\_destructible::destructible_state(undefined,"com_propane_tank02_DES",undefined,undefined,"no_melee"); + common_scripts\_destructible::destructible_part("tag_valve","com_propane_tank02_valve"); + common_scripts\_destructible::destructible_part("tag_cap","com_propane_tank02_cap"); +} + +//Function Number: 64 +toy_propane_tank02_small(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",50,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(10); + common_scripts\_destructible::destructible_state(undefined,undefined,350,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("propanetank02_gas_leak_loop"); + common_scripts\_destructible::destructible_loopfx("tag_cap","distortion/propane_cap_distortion",0.1); + common_scripts\_destructible::destructible_state(undefined,undefined,350,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_cap","fire/propane_capfire_leak",0.1); + common_scripts\_destructible::destructible_sound("propanetank02_flareup_med"); + common_scripts\_destructible::destructible_loopsound("propanetank02_fire_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_physics("tag_cap",(50,0,0)); + common_scripts\_destructible::destructible_loopfx("tag_cap","fire/propane_capfire",0.6); + common_scripts\_destructible::destructible_fx("tag_valve","fire/propane_valvefire_flareup"); + common_scripts\_destructible::destructible_physics("tag_valve",(50,0,0)); + common_scripts\_destructible::destructible_fx("tag_cap","fire/propane_capfire_flareup"); + common_scripts\_destructible::destructible_loopfx("tag_valve","fire/propane_valvefire",0.1); + common_scripts\_destructible::destructible_sound("propanetank02_flareup_med"); + common_scripts\_destructible::destructible_loopsound("propanetank02_fire_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,5,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","fire/propane_small_fire"); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/propane_large_exp",0); + common_scripts\_destructible::destructible_sound("propanetank02_explode"); + common_scripts\_destructible::func_976(7000,8000,400,400,32,100); + common_scripts\_destructible::destructible_state(undefined,"com_propane_tank02_small_DES",undefined,undefined,"no_melee"); + common_scripts\_destructible::destructible_part("tag_valve","com_propane_tank02_small_valve"); + common_scripts\_destructible::destructible_part("tag_cap","com_propane_tank02_small_cap"); +} + +//Function Number: 65 +toy_copier(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(15); + common_scripts\_destructible::destructible_loopfx("tag_left_feeder","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_left_feeder","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,500,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_fx","props/photocopier_sparks",3); + common_scripts\_destructible::destructible_loopsound("copier_spark_loop"); + common_scripts\_destructible::destructible_healthdrain(12,0.2); + common_scripts\_destructible::destructible_state(undefined,undefined,800,undefined,5,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","props/photocopier_exp",0); + common_scripts\_destructible::destructible_fx("tag_fx","props/photocopier_fire"); + common_scripts\_destructible::destructible_sound("copier_exp"); + common_scripts\_destructible::destructible_loopsound("copier_fire_loop"); + common_scripts\_destructible::func_976(7000,8000,96,96,32,48); + common_scripts\_destructible::destructible_state(undefined,"prop_photocopier_destroyed",undefined,undefined,"no_melee"); + common_scripts\_destructible::destructible_part("tag_left_feeder","prop_photocopier_destroyed_left_feeder",4,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_right_shelf","prop_photocopier_destroyed_right_shelf",4,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_top","prop_photocopier_destroyed_top",4,undefined,undefined,undefined,1,1); +} + +//Function Number: 66 +toy_firehydrant(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(11); + common_scripts\_destructible::destructible_state(undefined,undefined,500,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_cap","props/firehydrant_leak",0.1); + common_scripts\_destructible::destructible_loopsound("firehydrant_spray_loop"); + common_scripts\_destructible::destructible_healthdrain(12,0.2); + common_scripts\_destructible::destructible_state(undefined,undefined,800,undefined,5,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","props/firehydrant_exp",0); + common_scripts\_destructible::destructible_fx("tag_fx","props/firehydrant_spray_10sec",0); + common_scripts\_destructible::destructible_sound("firehydrant_burst"); + common_scripts\_destructible::func_976(17000,18000,96,96,32,48); + common_scripts\_destructible::destructible_state(undefined,"com_firehydrant_dest",undefined,undefined,"no_melee"); + common_scripts\_destructible::destructible_part("tag_fx","com_firehydrant_dam",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_cap","com_firehydrant_cap",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 67 +toy_parkingmeter(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_meter",120); + common_scripts\_destructible::destructible_fx("tag_fx","props/parking_meter_coins",1,common_scripts\_destructible::damage_not("splash")); + common_scripts\_destructible::destructible_fx("tag_fx","props/parking_meter_coins_exploded",1,"splash"); + common_scripts\_destructible::destructible_sound("exp_parking_meter_sweet"); + common_scripts\_destructible::func_976(2800,3000,64,64,0,0,1); + common_scripts\_destructible::destructible_state(undefined,"com_parkingmeter_damaged",20,undefined,undefined,"splash"); + common_scripts\_destructible::destructible_state(undefined,"com_parkingmeter_destroyed",undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_cap","com_parkingmeter_cap",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 68 +func_09BE(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",200); + common_scripts\_destructible::destructible_fx("tag_fx","props/mail_box_explode",1); + common_scripts\_destructible::destructible_sound("exp_mailbox_sweet"); + common_scripts\_destructible::func_976(100,2000,64,64,0,0); + common_scripts\_destructible::destructible_state("tag_origin","com_mailbox_dam"); + common_scripts\_destructible::destructible_part("tag_door","com_mailbox_door",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_flag","com_mailbox_flag",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 69 +toy_mailbox2(param_00) +{ + common_scripts\_destructible::destructible_create("toy_mailbox2_" + param_00,"tag_origin",120); + common_scripts\_destructible::destructible_fx("tag_fx","props/mail_box_explode",1,common_scripts\_destructible::damage_not("splash")); + common_scripts\_destructible::destructible_fx("tag_fx","props/mail_box_explode",1,"splash"); + common_scripts\_destructible::destructible_sound("exp_mailbox_sweet"); + common_scripts\_destructible::func_976(2800,3000,64,64,0,0,1); + common_scripts\_destructible::destructible_state(undefined,"mailbox_" + param_00 + "_dam",20,undefined,undefined,"splash"); + common_scripts\_destructible::destructible_state(undefined,"mailbox_black_dest",undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_door","mailbox_" + param_00 + "_door",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_flag","mailbox_black_flag",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 70 +toy_newspaper_stand_red(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",120); + common_scripts\_destructible::destructible_fx("tag_door","props/news_stand_paper_spill",1,common_scripts\_destructible::damage_not("splash")); + common_scripts\_destructible::destructible_sound("exp_newspaper_box"); + common_scripts\_destructible::func_976(2500,2501,64,64,0,0,1); + common_scripts\_destructible::destructible_state(undefined,"com_newspaperbox_red_dam",20,undefined,undefined,"splash"); + common_scripts\_destructible::destructible_fx("tag_fx","props/news_stand_explosion",1,"splash"); + common_scripts\_destructible::destructible_state(undefined,"com_newspaperbox_red_des",undefined,undefined,undefined,undefined,undefined,0); + common_scripts\_destructible::destructible_part("tag_door","com_newspaperbox_red_door",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 71 +func_09C1(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",120); + common_scripts\_destructible::destructible_fx("tag_door","props/news_stand_paper_spill_shatter",1,common_scripts\_destructible::damage_not("splash")); + common_scripts\_destructible::destructible_sound("exp_newspaper_box"); + common_scripts\_destructible::func_976(800,2001,64,64,0,0,1); + common_scripts\_destructible::destructible_state(undefined,"com_newspaperbox_blue_dam",20,undefined,undefined,"splash"); + common_scripts\_destructible::destructible_fx("tag_fx","props/news_stand_explosion",1,"splash"); + common_scripts\_destructible::destructible_state(undefined,"com_newspaperbox_blue_des",undefined,undefined,undefined,undefined,undefined,0); + common_scripts\_destructible::destructible_part("tag_door","com_newspaperbox_blue_door",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 72 +toy_filecabinet(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",120); + common_scripts\_destructible::destructible_fx("tag_drawer_lower","props/filecabinet_dam",1,common_scripts\_destructible::damage_not("splash")); + common_scripts\_destructible::destructible_sound("exp_filecabinet"); + common_scripts\_destructible::destructible_state(undefined,"com_filecabinetblackclosed_dam",20,undefined,undefined,"splash"); + common_scripts\_destructible::destructible_fx("tag_drawer_upper","props/filecabinet_des",1,"splash"); + common_scripts\_destructible::destructible_sound("exp_filecabinet"); + common_scripts\_destructible::destructible_physics("tag_drawer_upper",(50,-10,5)); + common_scripts\_destructible::destructible_state(undefined,"com_filecabinetblackclosed_des",undefined,undefined,undefined,undefined,undefined,0); + common_scripts\_destructible::destructible_part("tag_drawer_upper","com_filecabinetblackclosed_drawer",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 73 +toy_trashbin_01(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",120,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","props/garbage_spew_des",1,"splash"); + common_scripts\_destructible::destructible_fx("tag_fx","props/garbage_spew",1,common_scripts\_destructible::damage_not("splash")); + common_scripts\_destructible::destructible_sound("exp_trashcan_sweet"); + common_scripts\_destructible::func_976(1300,1351,1,1,10,20); + common_scripts\_destructible::destructible_state(undefined,"com_trashbin01_dmg",undefined,undefined,undefined,undefined,undefined,0); + common_scripts\_destructible::destructible_part("tag_fx","com_trashbin01_lid",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 74 +func_09C4(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",120,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","props/garbage_spew_des",1,"splash"); + common_scripts\_destructible::destructible_fx("tag_fx","props/garbage_spew",1,common_scripts\_destructible::damage_not("splash")); + common_scripts\_destructible::destructible_sound("exp_trashcan_sweet"); + common_scripts\_destructible::func_976(600,800,1,1,10,20); + common_scripts\_destructible::destructible_state(undefined,"com_trashbin02_dmg",undefined,undefined,undefined,undefined,undefined,0); + common_scripts\_destructible::destructible_part("tag_fx","com_trashbin02_lid",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 75 +toy_trashbag1(param_00) +{ + common_scripts\_destructible::destructible_create("toy_trashbag1_" + param_00,"tag_origin",120,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","props/trashbag_" + param_00); + common_scripts\_destructible::destructible_state(undefined,"com_trashbag1_" + param_00 + "_dsr",undefined,undefined,undefined,undefined,undefined,0); +} + +//Function Number: 76 +toy_recyclebin_01(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",120,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","props/garbage_spew_des",1,"splash"); + common_scripts\_destructible::destructible_fx("tag_fx","props/garbage_spew",1,common_scripts\_destructible::damage_not("splash")); + common_scripts\_destructible::destructible_sound("exp_trashcan_sweet"); + common_scripts\_destructible::func_976(600,651,1,1,10,20); + common_scripts\_destructible::destructible_state(undefined,"com_recyclebin01_dmg",undefined,undefined,undefined,undefined,undefined,0); + common_scripts\_destructible::destructible_part("tag_fx","com_recyclebin01_lid",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 77 +toy_trashcan_metal_closed(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",120,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","props/garbage_spew_des",1,"splash"); + common_scripts\_destructible::destructible_fx("tag_fx","props/garbage_spew",1,common_scripts\_destructible::damage_not("splash")); + common_scripts\_destructible::destructible_sound("exp_trashcan_sweet"); + common_scripts\_destructible::func_976(600,651,1,1,10,20); + common_scripts\_destructible::destructible_state(undefined,"com_trashcan_metal_with_trash",undefined,undefined,undefined,undefined,undefined,0); + common_scripts\_destructible::destructible_part("tag_fx","com_trashcan_metalLID",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 78 +toy_water_collector(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",220,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/water_collector_explosion"); + common_scripts\_destructible::destructible_sound("water_collector_splash"); + common_scripts\_destructible::func_976(500,800,32,32,1,10,undefined,32); + common_scripts\_destructible::destructible_state(undefined,"utility_water_collector_base_dest",undefined,undefined,"no_melee",undefined,undefined,0); + common_scripts\_destructible::destructible_part("tag_lid",undefined,220,undefined,undefined,"no_melee",1); + common_scripts\_destructible::destructible_state(undefined); +} + +//Function Number: 79 +toy_foliage_tree_oak_1(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",120,undefined,32,"splash"); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/tree_trunk_explosion_oak_1",1,"splash"); + common_scripts\_destructible::destructible_sound("large_oak_tree_impact"); + common_scripts\_destructible::destructible_sound("large_oak_tree_fall"); + common_scripts\_destructible::func_976(600,651,1,1,10,20); + common_scripts\_destructible::destructible_state(undefined,"foliage_tree_oak_1_destroyed_trunk",undefined,undefined,undefined,undefined,undefined,0); +} + +//Function Number: 80 +toy_paris_tree_plane_large(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",250,undefined,32,"splash"); + common_scripts\_destructible::destructible_fx("tag_origin","props/paris_tree_plane_destruct"); + common_scripts\_destructible::func_976(100,351,150,350,100,200,undefined,undefined,undefined,undefined,(-400,0,80),0.7); + common_scripts\_destructible::destructible_state(undefined,"foliage_paris_tree_plane_broken",undefined,undefined,undefined,undefined,undefined,0); +} + +//Function Number: 81 +toy_usa_gas_station_trash_bin_01(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",120,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","props/garbage_spew_des",1,"splash"); + common_scripts\_destructible::destructible_fx("tag_fx","props/garbage_spew",1,common_scripts\_destructible::damage_not("splash")); + common_scripts\_destructible::func_976(600,651,1,1,10,20); + common_scripts\_destructible::destructible_state(undefined,"usa_gas_station_trash_bin_01_base",undefined,undefined,undefined,undefined,undefined,0); + common_scripts\_destructible::destructible_part("tag_fx","usa_gas_station_trash_bin_01_lid",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 82 +toy_usa_gas_station_trash_bin_02(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",120,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx_high","props/garbage_spew_des",1,"splash"); + common_scripts\_destructible::destructible_fx("tag_fx_high","props/garbage_spew",1,common_scripts\_destructible::damage_not("splash")); + common_scripts\_destructible::func_976(600,651,1,1,10,20); + common_scripts\_destructible::destructible_state(undefined,"usa_gas_station_trash_bin_02_base",undefined,undefined,undefined,undefined,undefined,0); + common_scripts\_destructible::destructible_part("tag_fx_high","usa_gas_station_trash_bin_02_lid",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 83 +func_09CD(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",150,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(15); + common_scripts\_destructible::destructible_lights_out(16); + common_scripts\_destructible::destructible_fx("tag_fx","misc/light_blowout_runner"); + common_scripts\_destructible::destructible_state(undefined,"com_light_ceiling_round_off",undefined,undefined,"no_melee"); +} + +//Function Number: 84 +toy_light_ceiling_fluorescent(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",150,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(15); + common_scripts\_destructible::destructible_fx("tag_fx","misc/light_fluorescent_blowout_runner"); + common_scripts\_destructible::destructible_fx("tag_swing_fx","misc/light_blowout_swinging_runner"); + common_scripts\_destructible::destructible_lights_out(16); + common_scripts\_destructible::func_976(20,2000,64,64,40,80); + common_scripts\_destructible::destructible_anim(get_precached_anim("ight_fluorescent_swing"),#animtree,"setanimknob",undefined,0,"light_fluorescent_swing"); + common_scripts\_destructible::destructible_sound("fluorescent_light_fall",undefined,0); + common_scripts\_destructible::destructible_sound("fluorescent_light_bulb",undefined,0); + common_scripts\_destructible::destructible_anim(get_precached_anim("ight_fluorescent_swing_02"),#animtree,"setanimknob",undefined,1,"light_fluorescent_swing_02"); + common_scripts\_destructible::destructible_sound("fluorescent_light_fall",undefined,1); + common_scripts\_destructible::destructible_sound("fluorescent_light_bulb",undefined,1); + common_scripts\_destructible::destructible_anim(get_precached_anim("ight_fluorescent_null"),#animtree,"setanimknob",undefined,2,"light_fluorescent_null"); + common_scripts\_destructible::destructible_state(undefined,"me_lightfluohang_double_destroyed",undefined,undefined,"no_melee"); +} + +//Function Number: 85 +toy_light_ceiling_fluorescent_spotlight(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",150,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(15); + common_scripts\_destructible::destructible_sound("fluorescent_light_bulb"); + common_scripts\_destructible::destructible_fx("tag_fx","misc/light_fluorescent_blowout_runner"); + common_scripts\_destructible::destructible_fx("tag_swing_fx","misc/light_blowout_swinging_runner"); + common_scripts\_destructible::destructible_lights_out(16); + common_scripts\_destructible::func_976(20,2000,64,64,40,80); + common_scripts\_destructible::destructible_anim(get_precached_anim("ight_fluorescent_swing"),#animtree,"setanimknob",undefined,0,"light_fluorescent_swing"); + common_scripts\_destructible::destructible_sound("fluorescent_light_fall",undefined,0); + common_scripts\_destructible::destructible_sound("fluorescent_light_bulb",undefined,0); + common_scripts\_destructible::destructible_spotlight("tag_swing_r_far"); + common_scripts\_destructible::destructible_sound("fluorescent_light_fall"); + common_scripts\_destructible::destructible_state(undefined,"me_lightfluohang_double_destroyed",undefined,undefined,"no_melee"); +} + +//Function Number: 86 +toy_light_ceiling_fluorescent_single(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",150,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(15); + common_scripts\_destructible::destructible_fx("tag_fx","misc/light_fluorescent_single_blowout_runner"); + common_scripts\_destructible::destructible_fx("tag_swing_center_fx","misc/light_blowout_swinging_runner"); + common_scripts\_destructible::destructible_fx("tag_swing_center_fx_far","misc/light_blowout_swinging_runner"); + common_scripts\_destructible::destructible_lights_out(32); + common_scripts\_destructible::func_976(20,2000,64,64,40,80); + common_scripts\_destructible::destructible_anim(get_precached_anim("ight_fluorescent_single_swing"),#animtree,"setanimknob",undefined,0,"light_fluorescent_single_swing"); + common_scripts\_destructible::destructible_sound("fluorescent_light_fall",undefined,0); + common_scripts\_destructible::destructible_sound("fluorescent_light_bulb",undefined,0); + common_scripts\_destructible::destructible_anim(get_precached_anim("ight_fluorescent_single_swing_02"),#animtree,"setanimknob",undefined,1,"light_fluorescent_single_swing_02"); + common_scripts\_destructible::destructible_sound("fluorescent_light_hinge",undefined,1); + common_scripts\_destructible::destructible_sound("fluorescent_light_bulb",undefined,1); + common_scripts\_destructible::destructible_anim(get_precached_anim("ight_fluorescent_single_swing_03"),#animtree,"setanimknob",undefined,2,"light_fluorescent_single_swing_03"); + common_scripts\_destructible::destructible_sound("fluorescent_light_fall",undefined,2); + common_scripts\_destructible::destructible_sound("fluorescent_light_bulb",undefined,2); + common_scripts\_destructible::destructible_anim(get_precached_anim("ight_fluorescent_single_null"),#animtree,"setanimknob",undefined,3,"light_fluorescent_single_null"); + common_scripts\_destructible::destructible_state(undefined,"me_lightfluohang_single_destroyed",undefined,undefined,"no_melee"); +} + +//Function Number: 87 +toy_light_ceiling_fluorescent_single_spotlight(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",150,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(15); + common_scripts\_destructible::destructible_lights_out(16); + common_scripts\_destructible::destructible_sound("fluorescent_light_bulb"); + common_scripts\_destructible::destructible_fx("tag_fx","misc/light_fluorescent_single_blowout_runner"); + common_scripts\_destructible::destructible_fx("tag_swing_center_fx","misc/light_blowout_swinging_runner"); + common_scripts\_destructible::destructible_fx("tag_swing_center_fx_far","misc/light_blowout_swinging_runner"); + common_scripts\_destructible::func_976(20,2000,64,64,40,80); + common_scripts\_destructible::destructible_anim(get_precached_anim("ight_fluorescent_single_swing_02"),#animtree,"setanimknob",undefined,undefined,"light_fluorescent_single_swing_02"); + common_scripts\_destructible::destructible_sound("fluorescent_light_fall"); + common_scripts\_destructible::destructible_spotlight("tag_swing_center_fx_far"); + common_scripts\_destructible::destructible_state(undefined,"me_lightfluohang_single_destroyed",undefined,undefined,"no_melee"); +} + +//Function Number: 88 +toy_bookstore_bookstand4_books(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(7); + common_scripts\_destructible::destructible_fx("tag_fx","props/bookshelf4_dmg",1,common_scripts\_destructible::damage_not("splash")); + common_scripts\_destructible::destructible_state(undefined,"bookstore_bookstand4",100,undefined,undefined,"splash"); + common_scripts\_destructible::destructible_fx("tag_fx","props/bookshelf4_des",1,"splash"); + common_scripts\_destructible::func_976(2000,3800,32,32,1,5,undefined,0); + common_scripts\_destructible::destructible_state(undefined,"bookstore_bookstand4_null",undefined,undefined,undefined,undefined,undefined,0); +} + +//Function Number: 89 +toy_locker_double(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",150,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_anim(get_precached_anim("ocker_broken_both_doors_1"),#animtree,"setanimknob",undefined,0,"locker_broken_both_doors_1"); + common_scripts\_destructible::destructible_fx("tag_fx","props/locker_double_des_02_right",undefined,undefined,0); + common_scripts\_destructible::destructible_sound("lockers_fast",undefined,0); + common_scripts\_destructible::destructible_anim(get_precached_anim("ocker_broken_both_doors_2"),#animtree,"setanimknob",undefined,1,"locker_broken_both_doors_2"); + common_scripts\_destructible::destructible_fx("tag_fx","props/locker_double_des_01_left",undefined,undefined,1); + common_scripts\_destructible::destructible_sound("lockers_fast",undefined,1); + common_scripts\_destructible::destructible_anim(get_precached_anim("ocker_broken_both_doors_4"),#animtree,"setanimknob",undefined,2,"locker_broken_both_doors_4"); + common_scripts\_destructible::destructible_fx("tag_fx","props/locker_double_des_03_both",undefined,undefined,2); + common_scripts\_destructible::destructible_sound("lockers_double",undefined,2); + common_scripts\_destructible::destructible_anim(get_precached_anim("ocker_broken_door1_fast"),#animtree,"setanimknob",undefined,3,"locker_broken_door1_fast"); + common_scripts\_destructible::destructible_fx("tag_fx","props/locker_double_des_01_left",undefined,undefined,3); + common_scripts\_destructible::destructible_sound("lockers_fast",undefined,3); + common_scripts\_destructible::destructible_anim(get_precached_anim("ocker_broken_door2_fast"),#animtree,"setanimknob",undefined,4,"locker_broken_door2_fast"); + common_scripts\_destructible::destructible_fx("tag_fx","props/locker_double_des_02_right",undefined,undefined,4); + common_scripts\_destructible::destructible_sound("lockers_fast",undefined,4); + common_scripts\_destructible::destructible_anim(get_precached_anim("ocker_broken_both_doors_3"),#animtree,"setanimknob",undefined,5,"locker_broken_both_doors_3"); + common_scripts\_destructible::destructible_fx("tag_fx","misc/no_effect",undefined,undefined,5); + common_scripts\_destructible::destructible_sound("lockers_minor",undefined,5); + common_scripts\_destructible::destructible_anim(get_precached_anim("ocker_broken_door1_slow"),#animtree,"setanimknob",undefined,6,"locker_broken_door1_slow"); + common_scripts\_destructible::destructible_fx("tag_fx","misc/no_effect",undefined,undefined,6); + common_scripts\_destructible::destructible_sound("lockers_minor",undefined,6); + common_scripts\_destructible::destructible_anim(get_precached_anim("ocker_broken_door2_slow"),#animtree,"setanimknob",undefined,7,"locker_broken_door2_slow"); + common_scripts\_destructible::destructible_fx("tag_fx","misc/no_effect",undefined,undefined,7); + common_scripts\_destructible::destructible_sound("lockers_minor",undefined,7); + common_scripts\_destructible::destructible_state(undefined,"com_locker_double_destroyed",undefined,undefined,"no_melee"); +} + +//Function Number: 90 +toy_dubai_fish_sculpture(param_00,param_01,param_02) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",200000000,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(2); + for(var_03 = 1;var_03 <= param_02;var_03++) + { + common_scripts\_destructible::destructible_part("tag_" + param_01 + "_" + var_03,param_00,10); + common_scripts\_destructible::destructible_fx("tag_" + param_01 + "_" + var_03,"props/dub_fish_" + param_01 + "_shatter"); + common_scripts\_destructible::destructible_state(undefined); + } +} + +//Function Number: 91 +toy_intro_concrete_chipaway(param_00,param_01) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",200000000,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("tag_origin",param_00,undefined,undefined,"no_melee"); + for(var_02 = 1;var_02 <= param_01;var_02++) + { + common_scripts\_destructible::destructible_part("tag_chunk_" + var_02,param_00,200,undefined,undefined,"no_splash"); + common_scripts\_destructible::destructible_splash_damage_scaler(0.01); + common_scripts\_destructible::destructible_fx("tag_chunk_" + var_02,"props/intro_wall_chunk_exp"); + common_scripts\_destructible::destructible_state(undefined); + } +} + +//Function Number: 92 +toy_chicken(param_00) +{ + common_scripts\_destructible::destructible_create("toy_chicken" + param_00,"tag_origin",0,undefined,32); + common_scripts\_destructible::destructible_anim(get_precached_anim("hicken_cage_loop_01"),#animtree,"setanimknob",undefined,0,"chicken_cage_loop_01",1.6); + common_scripts\_destructible::destructible_anim(get_precached_anim("hicken_cage_loop_02"),#animtree,"setanimknob",undefined,1,"chicken_cage_loop_02",1.6); + common_scripts\_destructible::destructible_loopsound("animal_chicken_idle_loop"); + common_scripts\_destructible::destructible_state("tag_origin","chicken" + param_00,25); + common_scripts\_destructible::destructible_fx("tag_origin","props/chicken_exp" + param_00); + common_scripts\_destructible::destructible_anim(get_precached_anim("hicken_cage_death"),#animtree,"setanimknob",undefined,0,"chicken_cage_death"); + common_scripts\_destructible::destructible_anim(get_precached_anim("hicken_cage_death_02"),#animtree,"setanimknob",undefined,1,"chicken_cage_death_02"); + common_scripts\_destructible::destructible_sound("animal_chicken_death"); + common_scripts\_destructible::destructible_state(undefined,"chicken" + param_00,undefined,undefined,"no_melee"); +} + +//Function Number: 93 +toy_chicken_dlc() +{ + common_scripts\_destructible::destructible_create("toy_chicken_dlc","tag_origin",0,undefined,32); + common_scripts\_destructible::destructible_anim(get_precached_anim("hicken_cage_pecking_idle"),#animtree,"setanimknob",undefined,0,"Chicken_cage_pecking_idle",1.6); + common_scripts\_destructible::destructible_anim(get_precached_anim("hicken_cage_seated_idle"),#animtree,"setanimknob",undefined,1,"Chicken_cage_seated_idle",1.6); + common_scripts\_destructible::destructible_loopsound("animal_chicken_idle_loop"); + common_scripts\_destructible::destructible_state("tag_origin","chicken",25); + common_scripts\_destructible::destructible_fx("tag_origin","props/chicken_exp"); + common_scripts\_destructible::destructible_anim(get_precached_anim("hicken_cage_death"),#animtree,"setanimknob",undefined,0,"chicken_cage_death"); + common_scripts\_destructible::destructible_anim(get_precached_anim("hicken_cage_death_02"),#animtree,"setanimknob",undefined,1,"chicken_cage_death_02"); + common_scripts\_destructible::destructible_sound("animal_chicken_death"); + common_scripts\_destructible::destructible_state(undefined,"chicken",undefined,undefined,"no_melee"); +} + +//Function Number: 94 +toy_hide_with_fx(param_00,param_01,param_02,param_03) +{ + common_scripts\_destructible::destructible_create(param_00,param_01,param_03); + common_scripts\_destructible::destructible_fx("tag_origin",param_02); + common_scripts\_destructible::destructible_state("tag_origin","generic_prop_raven"); +} + +//Function Number: 95 +vehicle_ac130_80s_sedan1(param_00) +{ + common_scripts\_destructible::destructible_create("vehicle_ac130_80s_sedan1_" + param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,150,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_80s_sedan1_" + param_00 + "_destroyed",undefined,32,"o_melee"); + var_01 = "tag_hood"; + common_scripts\_destructible::destructible_part(var_01,"vehicle_80s_sedan1_" + param_00 + "_hood",undefined,undefined,undefined,undefined,1,2.5); + var_01 = "tag_trunk"; + common_scripts\_destructible::destructible_part(var_01,"vehicle_80s_sedan1_" + param_00 + "_trunk",undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_80s_sedan1_" + param_00 + "_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","vehicle_80s_sedan1_" + param_00 + "_wheel_LF",20,undefined,undefined,"no_melee",undefined,2.3); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("tag_door_left_front",undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_door_left_back",undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_door_right_front","vehicle_80s_sedan1_" + param_00 + "_door_RF",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_door_right_back","vehicle_80s_sedan1_" + param_00 + "_door_RB",undefined,undefined,undefined,undefined,1,1); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_bumper_front","vehicle_80s_sedan1_" + param_00 + "_bumper_F",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_bumper_back","vehicle_80s_sedan1_" + param_00 + "_bumper_B",undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_80s_sedan1_" + param_00 + "_mirror_L",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_80s_sedan1_" + param_00 + "_mirror_R",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 96 +vehicle_bus_destructible(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + var_01 = "tag_window_front_left"; + common_scripts\_destructible::destructible_part(var_01,undefined,99,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_window_front_right"; + common_scripts\_destructible::destructible_part(var_01,undefined,99,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_window_driver"; + common_scripts\_destructible::destructible_part(var_01,undefined,99,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_window_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,99,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_window_side_1"; + common_scripts\_destructible::destructible_part(var_01,undefined,99,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_window_side_2"; + common_scripts\_destructible::destructible_part(var_01,undefined,99,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_window_side_3"; + common_scripts\_destructible::destructible_part(var_01,undefined,99,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_window_side_4"; + common_scripts\_destructible::destructible_part(var_01,undefined,99,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_window_side_5"; + common_scripts\_destructible::destructible_part(var_01,undefined,99,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_window_side_6"; + common_scripts\_destructible::destructible_part(var_01,undefined,99,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_window_side_7"; + common_scripts\_destructible::destructible_part(var_01,undefined,99,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_window_side_8"; + common_scripts\_destructible::destructible_part(var_01,undefined,99,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_window_side_9"; + common_scripts\_destructible::destructible_part(var_01,undefined,99,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_window_side_10"; + common_scripts\_destructible::destructible_part(var_01,undefined,99,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_window_side_11"; + common_scripts\_destructible::destructible_part(var_01,undefined,99,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); +} + +//Function Number: 97 +vehicle_80s_sedan1(param_00) +{ + common_scripts\_destructible::destructible_create("vehicle_80s_sedan1_" + param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,150,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,150,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_80s_sedan1_" + param_00 + "_destroyed",undefined,32,"o_melee"); + var_01 = "tag_hood"; + common_scripts\_destructible::destructible_part(var_01,"vehicle_80s_sedan1_" + param_00 + "_hood",undefined,undefined,undefined,undefined,1,2.5); + var_01 = "tag_trunk"; + common_scripts\_destructible::destructible_part(var_01,"vehicle_80s_sedan1_" + param_00 + "_trunk",undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_80s_sedan1_" + param_00 + "_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","vehicle_80s_sedan1_" + param_00 + "_wheel_LF",20,undefined,undefined,"no_melee",undefined,2.3); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("tag_door_left_front",undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_door_left_back",undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_door_right_front","vehicle_80s_sedan1_" + param_00 + "_door_RF",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_door_right_back","vehicle_80s_sedan1_" + param_00 + "_door_RB",undefined,undefined,undefined,undefined,1,1); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_bumper_front","vehicle_80s_sedan1_" + param_00 + "_bumper_F",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_bumper_back","vehicle_80s_sedan1_" + param_00 + "_bumper_B",undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_80s_sedan1_" + param_00 + "_mirror_L",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_80s_sedan1_" + param_00 + "_mirror_R",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 98 +vehicle_80s_hatch1(param_00) +{ + common_scripts\_destructible::destructible_create("vehicle_80s_hatch1_" + param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,150,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,150,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_80s_hatch1_" + param_00 + "_destroyed",undefined,32,"o_melee"); + var_01 = "tag_hood"; + common_scripts\_destructible::destructible_part(var_01,"vehicle_80s_hatch1_" + param_00 + "_hood",800,undefined,undefined,undefined,1,1.5); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_80s_hatch1_" + param_00 + "_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_80s_hatch1_" + param_00 + "_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("tag_door_left_front",undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_door_right_front","vehicle_80s_hatch1_" + param_00 + "_door_RF",undefined,undefined,undefined,undefined,1,1); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,10,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,10,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,10,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,10,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,10,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,10,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_bumper_front"); + common_scripts\_destructible::destructible_part("tag_bumper_back"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_80s_hatch1_" + param_00 + "_mirror_L",40); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_80s_hatch1_" + param_00 + "_mirror_R",40); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 99 +func_09DE(param_00) +{ + common_scripts\_destructible::destructible_create("vehicle_80s_hatch2_" + param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,150,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,150,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_80s_hatch2_" + param_00 + "_destroyed",undefined,32,"o_melee"); + var_01 = "tag_hood"; + common_scripts\_destructible::destructible_part(var_01,"vehicle_80s_hatch2_" + param_00 + "_hood",800,undefined,undefined,undefined,1,1.5); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_80s_hatch2_" + param_00 + "_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_80s_hatch2_" + param_00 + "_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("tag_door_left_front",undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_door_right_front","vehicle_80s_hatch2_" + param_00 + "_door_RF",undefined,undefined,undefined,undefined,1,1); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_bumper_front"); + common_scripts\_destructible::destructible_part("tag_bumper_back"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_80s_hatch2_" + param_00 + "_mirror_L",40); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_80s_hatch2_" + param_00 + "_mirror_R",40); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 100 +func_09DF(param_00) +{ + common_scripts\_destructible::destructible_create("vehicle_80s_wagon1_" + param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,150,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,150,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_80s_wagon1_" + param_00 + "_destroyed",undefined,32,"o_melee"); + var_01 = "tag_hood"; + common_scripts\_destructible::destructible_part(var_01,"vehicle_80s_wagon1_" + param_00 + "_hood",800,undefined,undefined,undefined,1,1.5); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_80s_wagon1_" + param_00 + "_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","vehicle_80s_wagon1_" + param_00 + "_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("tag_door_left_front",undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_door_left_back",undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_door_right_front",undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_door_right_back","vehicle_80s_wagon1_" + param_00 + "_door_RB",undefined,undefined,undefined,undefined,1,1); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back2"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back2_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back2"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back2_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_bumper_front","vehicle_80s_wagon1_" + param_00 + "_bumper_F",undefined,undefined,undefined,undefined,1,0.7); + common_scripts\_destructible::destructible_part("tag_bumper_back",undefined,undefined,undefined,undefined,undefined,undefined,0.6); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_80s_wagon1_" + param_00 + "_mirror_L",40); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_80s_wagon1_" + param_00 + "_mirror_R",40); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 101 +vehicle_civ_car_a(param_00) +{ + common_scripts\_destructible::destructible_create("vehicle_civ_car_a_" + param_00,"ac_prs_veh_civ_car_a_" + param_00 + "_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_veh_civ_car_a_dam" + param_00 + "_lod0","ac_prs_veh_civ_car_a_dam" + param_00,250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/small_vehicle_explosion_ac130",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 102 +vehicle_small_hatch(param_00) +{ + common_scripts\_destructible::destructible_create("vehicle_small_hatch_" + param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,150,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,150,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_small_hatch_" + param_00 + "_destroyed",undefined,32,"o_melee"); + var_01 = "tag_hood"; + common_scripts\_destructible::destructible_part(var_01,"vehicle_small_hatch_" + param_00 + "_hood",800,undefined,undefined,undefined,1,1.5); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("tag_door_left_front","vehicle_small_hatch_" + param_00 + "_door_LF",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_door_right_front","vehicle_small_hatch_" + param_00 + "_door_RF",undefined,undefined,undefined,undefined,1,1); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_bumper_front",undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_bumper_back",undefined,undefined,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_small_hatch_" + param_00 + "_mirror_L",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_small_hatch_" + param_00 + "_mirror_R",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 103 +func_09E2() +{ + common_scripts\_destructible::destructible_create("vehicle_london_cab_black","tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,150,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,150,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_london_cab_destroyed",undefined,32,"o_melee"); + var_00 = "tag_hood"; + common_scripts\_destructible::destructible_part(var_00,"vehicle_london_cab_hood",800,undefined,undefined,undefined,1,1.5); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_london_cab_wheel_lf",20,undefined,undefined,"no_melee",undefined,1); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_london_cab_wheel_lf",20,undefined,undefined,"no_melee",undefined,1); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","vehicle_london_cab_wheel_lf",20,undefined,undefined,"no_melee",undefined,1); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("tag_door_left_front","vehicle_london_cab_door_lb",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_door_right_front","vehicle_london_cab_door_lb",undefined,undefined,undefined,undefined,1,1); + var_00 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_00,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_00 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_00 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_00 = "tag_center_glass"; + common_scripts\_destructible::destructible_part(var_00,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_00 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_00 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_00 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_00,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_00 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_00 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_00 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_00,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_00 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_00 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_00 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_00,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_00 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_00 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_00 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_00,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_00 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_00 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_00 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_00,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_00 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_00 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_00 = "tag_glass_left_back_02"; + common_scripts\_destructible::destructible_part(var_00,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_00 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_00 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_00 = "tag_glass_right_back_02"; + common_scripts\_destructible::destructible_part(var_00,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_00 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_00 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_00 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_00,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_00,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_00 + "_d"); + var_00 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_00,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_00,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_00 + "_d"); + common_scripts\_destructible::destructible_part("tag_bumper_front",undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_bumper_back",undefined,undefined,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_london_cab_mirror_l",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_london_cab_mirror_r",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 104 +vehicle_pickup(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",300,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,210,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_pickup_destroyed",undefined,32,"o_melee"); + var_01 = "tag_hood"; + common_scripts\_destructible::destructible_part(var_01,"vehicle_pickup_hood",800,undefined,undefined,undefined,1,2.5); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("tag_door_left_front","vehicle_pickup_door_LF",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_door_right_front","vehicle_pickup_door_RF",undefined,undefined,undefined,undefined,1,1); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_bumper_front",undefined,undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_bumper_back",undefined,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_pickup_mirror_L",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_pickup_mirror_R",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 105 +vehicle_hummer(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_deathfx","explosions/vehicle_explosion_hummer",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,210,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_hummer_destroyed",undefined,32,"o_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); +} + +//Function Number: 106 +vehicle_gaz(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire_gaz",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_deathfx","explosions/vehicle_explosion_gaz",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,210,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_gaz_tigr_harbor_destroyed",undefined,32,"o_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_mid"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_mid_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_mid"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_mid_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back_left"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_left_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back_right"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_right_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); +} + +//Function Number: 107 +vehicle_gaz_harbor(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke_moving",0.1); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire_gaz_moving",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(25,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,1000,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_deathfx","explosions/vehicle_explosion_gaz",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,210,250,50,300,undefined,undefined,0.3,500); + common_scripts\_destructible::destructible_state(undefined,"vehicle_gaz_tigr_paris_destroyed",undefined,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_part("tag_frontbumper",undefined,50,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_hood_fx","props/vehicle_gaz_frontBumper",0); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_moving",0.1); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,10,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large_moving"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med_moving"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med_moving"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_mid"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_mid_fx","props/car_glass_med_moving"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_mid"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_mid_fx","props/car_glass_med_moving"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med_moving"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med_moving"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back_left"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_left_fx","props/car_glass_med_moving"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back_right"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_right_fx","props/car_glass_med_moving"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); +} + +//Function Number: 108 +vehicle_bm21(param_00,param_01) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",300,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_deathfx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,210,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,param_01,undefined,32,"o_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + var_02 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_02,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_02 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_02 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_02,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_02 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_02 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_02,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_02 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_02 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_02,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_02 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); +} + +//Function Number: 109 +vehicle_moving_truck(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",300,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/vehicle_explosion_medium",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,210,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_7476(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + if(param_00 == "ehicle_moving_truck") + { + common_scripts\_destructible::destructible_state(undefined,"vehicle_moving_truck_dst",undefined,32,"no_melee"); + } + else if(param_00 == "vehicle_moving_truck_tham") + { + common_scripts\_destructible::destructible_state(undefined,"vehicle_moving_truck_tham_dst",undefined,32,"no_melee"); + } + else + { + common_scripts\_destructible::destructible_state(undefined,"vehicle_moving_truck_thai_dst",undefined,32,"no_melee"); + } + + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); +} + +//Function Number: 110 +vehicle_subway_cart(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",undefined,undefined,32,"no_melee"); + create_vehicle_subway_cart_window_single("TAG_WINDOW_SMALL_02_RI",1,"props/car_glass_subway_tall"); + create_vehicle_subway_cart_window_single("TAG_WINDOW_SMALL_03_RI",1,"props/car_glass_subway_tall"); + create_vehicle_subway_cart_window_single("TAG_WINDOW_SMALL_04_RI",1,"props/car_glass_subway_tall"); + create_vehicle_subway_cart_window_single("TAG_WINDOW_SMALL_05_RI",1,"props/car_glass_subway_tall"); + create_vehicle_subway_cart_window_single("TAG_WINDOW_SMALL_02_LE",1,"props/car_glass_subway_tall"); + create_vehicle_subway_cart_window_single("TAG_WINDOW_SMALL_03_LE",1,"props/car_glass_subway_tall"); + create_vehicle_subway_cart_window_single("TAG_WINDOW_SMALL_04_LE",1,"props/car_glass_subway_tall"); + create_vehicle_subway_cart_window_single("TAG_WINDOW_SMALL_05_LE",1,"props/car_glass_subway_tall"); +} + +//Function Number: 111 +create_vehicle_subway_cart_window_single(param_00,param_01,param_02) +{ + common_scripts\_destructible::destructible_part(param_00,undefined,140,undefined,undefined,undefined,undefined,undefined,1); + if(param_01) + { + common_scripts\_destructible::destructible_state(param_00 + "_D",undefined,80,undefined,undefined,undefined,1); + } + + common_scripts\_destructible::destructible_fx(param_00,param_02); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); +} + +//Function Number: 112 +vehicle_subway_cart_windows(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",undefined,undefined,32,"no_melee"); + create_vehicle_subway_cart_window_single("TAG_FRONT_WINDOW",1,"props/car_glass_subway_tall"); + create_vehicle_subway_cart_window_single("TAG_WINDOW_01_LE",1,"props/car_glass_subway_large"); + create_vehicle_subway_cart_window_single("TAG_WINDOW_03_LE",1,"props/car_glass_subway_large"); + create_vehicle_subway_cart_window_single("TAG_WINDOW_04_LE",1,"props/car_glass_subway_large"); + create_vehicle_subway_cart_window_single("TAG_WINDOW_07_LE",1,"props/car_glass_subway_large"); + create_vehicle_subway_cart_window_single("TAG_WINDOW_08_LE",1,"props/car_glass_subway_large"); + create_vehicle_subway_cart_window_single("TAG_WINDOW_011_LE",1,"props/car_glass_subway_large"); + create_vehicle_subway_cart_window_single("TAG_WINDOW_012_LE",1,"props/car_glass_subway_large"); + create_vehicle_subway_cart_window_single("TAG_WINDOW_014_LE",1,"props/car_glass_subway_tall"); + create_vehicle_subway_cart_window_single("TAG_WINDOW_01_RI",1,"props/car_glass_subway_large"); + create_vehicle_subway_cart_window_single("TAG_WINDOW_03_RI",1,"props/car_glass_subway_large"); + create_vehicle_subway_cart_window_single("TAG_WINDOW_04_RI",1,"props/car_glass_subway_large"); + create_vehicle_subway_cart_window_single("TAG_WINDOW_07_RI",1,"props/car_glass_subway_large"); + create_vehicle_subway_cart_window_single("TAG_WINDOW_08_RI",1,"props/car_glass_subway_large"); + create_vehicle_subway_cart_window_single("TAG_WINDOW_011_RI",1,"props/car_glass_subway_large"); + create_vehicle_subway_cart_window_single("TAG_WINDOW_012_RI",1,"props/car_glass_subway_large"); + create_vehicle_subway_cart_window_single("TAG_WINDOW_014_RI",1,"props/car_glass_subway_tall"); +} + +//Function Number: 113 +vehicle_subway_cart_windows_small(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",undefined,undefined,32,"no_melee"); + create_vehicle_subway_cart_window_single("TAG_WINDOW_SMALL_01_LE",1,"props/car_glass_subway_large"); + create_vehicle_subway_cart_window_single("TAG_WINDOW_SMALL_06_LE",1,"props/car_glass_subway_large"); + create_vehicle_subway_cart_window_single("TAG_WINDOW_SMALL_01_RI",1,"props/car_glass_subway_large"); + create_vehicle_subway_cart_window_single("TAG_WINDOW_SMALL_06_RI",1,"props/car_glass_subway_large"); +} + +//Function Number: 114 +vehicle_luxurysedan(param_00) +{ + common_scripts\_destructible::destructible_create("vehicle_luxurysedan_2008" + param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,210,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_luxurysedan_2008" + param_00 + "_destroy",undefined,32,"o_melee"); + var_01 = "tag_hood"; + common_scripts\_destructible::destructible_part(var_01,"vehicle_luxurysedan_2008" + param_00 + "_hood",800,undefined,undefined,undefined,1,2.5); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_luxurysedan_2008" + param_00 + "_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_luxurysedan_2008" + param_00 + "_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_luxurysedan_2008" + param_00 + "_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","vehicle_luxurysedan_2008" + param_00 + "_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_part("tag_door_left_front","vehicle_luxurysedan_2008" + param_00 + "_door_LF",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_door_right_front","vehicle_luxurysedan_2008" + param_00 + "_door_RF",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_door_left_back","vehicle_luxurysedan_2008" + param_00 + "_door_LB",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_door_right_back","vehicle_luxurysedan_2008" + param_00 + "_door_RB",undefined,undefined,undefined,undefined,1,1); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_luxurysedan_2008" + param_00 + "_mirror_L",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_luxurysedan_2008" + param_00 + "_mirror_R",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 115 +vehicle_mig29_landed(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"TAG_ORIGIN",250,undefined,32,"splash"); + common_scripts\_destructible::destructible_splash_damage_scaler(11); + common_scripts\_destructible::destructible_loopfx("TAG_front_fire","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_loopfx("TAG_rear_fire","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"splash"); + common_scripts\_destructible::destructible_loopfx("TAG_front_fire","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_loopfx("TAG_rear_fire","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"splash"); + common_scripts\_destructible::destructible_loopfx("TAG_front_fire","smoke/airplane_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_loopfx("TAG_rear_fire","smoke/airplane_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,512,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"splash"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"splash"); + common_scripts\_destructible::destructible_fx("TAG_FX","explosions/vehicle_explosion_mig29",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(8000,10000,512,512,50,300,undefined,undefined,0.4,1000); + lib_0F09::nuke_explosion(%,#animtree,"setanimknob",undefined,undefined,"vehicle_mig29_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_mig29_v2_dest",undefined,32,"plash"); + common_scripts\_destructible::destructible_part("TAG_COCKPIT","vehicle_mig29_dest_cockpit",40,undefined,undefined,undefined,undefined,1); +} + +//Function Number: 116 +vehicle_mack_truck_short(param_00) +{ + common_scripts\_destructible::destructible_create("vehicle_mack_truck_short_" + param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/mack_truck_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_loopfx("tag_gastank","smoke/motorcycle_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("mack_truck_flareup_med"); + common_scripts\_destructible::destructible_loopsound("mack_truck_fire_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,300,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("mack_truck_fire_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_gastank","smoke/motorcycle_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_fx("tag_cab_fire","fire/firelp_med_pm"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/propane_large_exp",0); + common_scripts\_destructible::destructible_sound("mack_truck_explode"); + common_scripts\_destructible::destructible_loopsound("mack_truck_fire_med"); + common_scripts\_destructible::func_976(8000,10000,512,512,100,400,undefined,undefined,0.4,1000); + common_scripts\_destructible::destructible_state(undefined,"vehicle_mack_truck_short_" + param_00 + "_destroy",undefined,32,"no_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_mack_truck_short_" + param_00 + "_wheel_lf",20,undefined,undefined,"no_melee",undefined,8); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_mack_truck_short_" + param_00 + "_wheel_lf",20,undefined,undefined,"no_melee",undefined,81); + common_scripts\_destructible::destructible_part("left_wheel_03_jnt","vehicle_mack_truck_short_" + param_00 + "_wheel_lf",20,undefined,undefined,"no_melee",undefined,8); + common_scripts\_destructible::destructible_part("tag_door_left_front","vehicle_mack_truck_short_" + param_00 + "_door_lf",undefined,undefined,undefined,undefined,1,1); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("mack_truck_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("mack_truck_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("mack_truck_glass_break_small"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("mack_truck_glass_break_small"); + common_scripts\_destructible::destructible_state(undefined); +} + +//Function Number: 117 +vehicle_semi_truck() +{ + common_scripts\_destructible::destructible_create("vehicle_semi_truck","tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/mack_truck_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_loopfx("tag_gastank","smoke/motorcycle_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("mack_truck_flareup_med"); + common_scripts\_destructible::destructible_loopsound("mack_truck_fire_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,300,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("mack_truck_fire_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_gastank","smoke/motorcycle_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_fx("tag_cab_fire","fire/firelp_med_pm"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/propane_large_exp",0); + common_scripts\_destructible::destructible_sound("mack_truck_explode"); + common_scripts\_destructible::destructible_loopsound("mack_truck_fire_med"); + common_scripts\_destructible::func_976(8000,10000,512,512,100,400,undefined,undefined,0.4,1000); + common_scripts\_destructible::destructible_state(undefined,"vehicle_semi_truck_destroyed",undefined,32,"no_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_semi_truck_wheel_lf",20,undefined,undefined,"no_melee",undefined,81); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_semi_truck_wheel_lf",20,undefined,undefined,"no_melee",undefined,81); + common_scripts\_destructible::destructible_part("left_wheel_03_jnt","vehicle_semi_truck_wheel_lf",20,undefined,undefined,"no_melee",undefined,81); + common_scripts\_destructible::destructible_part("tag_door_left_front","vehicle_semi_truck_door_lf",undefined,undefined,undefined,undefined,1,1); + var_00 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_00,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_00 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_00 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("mack_truck_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_00 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_00,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_00 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_00 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("mack_truck_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_00 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_00,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_00 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_00 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("mack_truck_glass_break_small"); + common_scripts\_destructible::destructible_state(undefined); + var_00 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_00,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_00 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("mack_truck_glass_break_small"); + common_scripts\_destructible::destructible_state(undefined); + var_00 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_00,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_00 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_00 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("mack_truck_glass_break_small"); + common_scripts\_destructible::destructible_state(undefined); + var_00 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_00,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_00 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("mack_truck_glass_break_small"); + common_scripts\_destructible::destructible_state(undefined); +} + +//Function Number: 118 +vehicle_motorcycle(param_00) +{ + var_01 = undefined; + var_01 = get_precached_anim("vehicle_motorcycle_destroy_" + param_00); + common_scripts\_destructible::destructible_create("vehicle_motorcycle_" + param_00,"body_animate_jnt",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_death_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_death_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_death_fx","smoke/motorcycle_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,128,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(3000,4000,128,150,50,300); + lib_0F09::func_746E(var_01,#animtree,"setanimknob",undefined,undefined,"vehicle_motorcycle_destroy_" + param_00); + common_scripts\_destructible::destructible_state(undefined,"vehicle_motorcycle_" + param_00 + "_destroy",undefined,32,"o_melee"); + common_scripts\_destructible::destructible_part("front_wheel","vehicle_motorcycle_01_front_wheel_d",20,undefined,undefined,"no_melee",undefined,1.7); + common_scripts\_destructible::destructible_part("rear_wheel","vehicle_motorcycle_01_rear_wheel_d",20,undefined,undefined,"no_melee",undefined,1.7); +} + +//Function Number: 119 +vehicle_scooter(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_engine","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_engine","smoke/scooter_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,128,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,150,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/vehicle_explosion_scooter",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(3000,4000,128,150,50,300); + common_scripts\_destructible::destructible_state(undefined,"vehicle_scooter_vespa_destroyed",undefined,32,"no_melee"); +} + +//Function Number: 120 +vehicle_subcompact(param_00) +{ + common_scripts\_destructible::destructible_create("vehicle_subcompact_" + param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,150,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,150,250,50,300,undefined,0,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_subcompact_" + param_00 + "_destroyed",undefined,32,"o_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_subcompact_wheel_lf",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","vehicle_subcompact_wheel_lf",20,undefined,undefined,"no_melee",undefined,2.3); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("tag_door_left_back","vehicle_subcompact_" + param_00 + "_door_LB",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_door_right_back","vehicle_subcompact_" + param_00 + "_door_RB",undefined,undefined,undefined,undefined,1,1); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_subcompact_" + param_00 + "_mirror_L",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_subcompact_" + param_00 + "_mirror_R",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 121 +vehicle_van(param_00) +{ + common_scripts\_destructible::destructible_create("vehicle_van_" + param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_van_" + param_00 + "_destroyed",undefined,32,"o_melee"); + var_01 = "tag_hood"; + common_scripts\_destructible::destructible_part(var_01,"vehicle_van_" + param_00 + "_hood",undefined,undefined,undefined,undefined,1,2.5); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_van_wheel_lf",20,undefined,undefined,"no_melee",undefined,2.3); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_van_wheel_lf",20,undefined,undefined,"no_melee",undefined,2.3); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("tag_door_right_back","vehicle_van_" + param_00 + "_door_RB",undefined,undefined,undefined,undefined,1,1); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_van_" + param_00 + "_mirror_L",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_van_" + param_00 + "_mirror_R",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 122 +vehicle_uaz_van(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_uaz_van_destroyed",undefined,32,"o_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_uaz_van_wheel_lf",20,undefined,undefined,"no_melee",undefined,2.3); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","vehicle_uaz_van_wheel_lf",20,undefined,undefined,"no_melee",undefined,1.6); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); +} + +//Function Number: 123 +vehicle_van_iw5(param_00) +{ + common_scripts\_destructible::destructible_create(param_00 + "_destructable","tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("TAG_DEATH_FX","explosions/vehicle_explosion_medium",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,param_00 + "_destroyed",undefined,32,"o_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",param_00 + "_wheel_lf",20,undefined,undefined,"no_melee",1,1); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",param_00 + "_wheel_lf",20,undefined,undefined,"no_melee",1,1); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",param_00 + "_wheel_lf",20,undefined,undefined,"no_melee",1,1); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",param_00 + "_wheel_lf",20,undefined,undefined,"no_melee",1,1); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + common_scripts\_destructible::destructible_part("tag_mirror_left",param_00 + "_mirror_lf",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right",param_00 + "_mirror_rf",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 124 +vehicle_van_iw5_gas(param_00) +{ + common_scripts\_destructible::destructible_create(param_00 + "_destructable_gas","tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_origin","explosions/vehicle_explosion_medium",0); + common_scripts\_destructible::destructible_fx("TAG_DEATH_FX","smoke/poison_gas_mp_truck",0); + common_scripts\_destructible::destructible_createdot_radius("tag_death_fx",0,220,92); + common_scripts\_destructible::destructible_setdot_ontick(0,1,20,0,200,0,"poison","player"); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,param_00 + "_destroyed",undefined,32,"o_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",param_00 + "_wheel_lf",20,undefined,undefined,"no_melee",1,1); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",param_00 + "_wheel_lf",20,undefined,undefined,"no_melee",1,1); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",param_00 + "_wheel_lf",20,undefined,undefined,"no_melee",1,1); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",param_00 + "_wheel_lf",20,undefined,undefined,"no_melee",1,1); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + common_scripts\_destructible::destructible_part("tag_mirror_left",param_00 + "_mirror_lf",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right",param_00 + "_mirror_rf",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 125 +vehicle_delivery_theme_park_truck_destructible(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("TAG_HOOD_FX","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("TAG_HOOD_FX","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("TAG_HOOD_FX","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("TAG_DEATH_FX","explosions/vehicle_explosion_medium",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_delivery_theme_park_truck_destroyed",undefined,32,"o_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_van_sas_dark_wheel_lf",20,undefined,undefined,"no_melee",1,2.7); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee",1,1); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee",1,1); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee",1,1); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + var_01 = "TAG_GLASS_FRONT1"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "TAG_GLASS_FRONT2"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "TAG_GLASS_LEFT_BACK"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "TAG_GLASS_LEFT_FRONT"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "TAG_GLASS_RIGHT_FRONT"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "TAG_GLASS_RIGHT_BACK"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); +} + +//Function Number: 126 +vehicle_suburban(param_00,param_01) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,300,300,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_suburban_destroyed" + param_01,undefined,32,"o_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_suburban_wheel_rf",20,undefined,undefined,"no_melee",undefined,2.3); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_suburban_wheel_rf",20,undefined,undefined,"no_melee",undefined,2.3); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_part("tag_door_left_back","vehicle_suburban_door_lb" + param_01,undefined,undefined,undefined,undefined,1,1); + var_02 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_02,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_02 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_02 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_02 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_02,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_02 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_02 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_02 = "tag_center_glass"; + common_scripts\_destructible::destructible_part(var_02,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_02 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_02 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_02 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_02,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_02 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_02 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_02 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_02,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_02 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_02 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_02 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_02,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_02 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_02 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_02 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_02,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_02 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_02 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_02 = "tag_glass_left_back_02"; + common_scripts\_destructible::destructible_part(var_02,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_02 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_02 = "tag_glass_right_back_02"; + common_scripts\_destructible::destructible_part(var_02,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_02 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_02 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_02,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_02,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(var_02 + "_d"); + var_02 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_02,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_02 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_02,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(var_02 + "_d"); +} + +//Function Number: 127 +vehicle_snowmobile(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/snowmobile_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,150,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,150,150,50,300,undefined,undefined,0.3,500); + common_scripts\_destructible::destructible_anim(get_precached_anim("ehicle_snowmobile_destroy_01"),#animtree,"setanimknob",undefined,undefined,"vehicle_snowmobile_destroy_01"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_snowmobile_destroyed",undefined,32,"no_melee"); + var_01 = "right_wheel_01_jnt"; + common_scripts\_destructible::destructible_part(var_01,"vehicle_snowmobile_ski_right",800,undefined,undefined,undefined,1,2.5); + common_scripts\_destructible::destructible_part("TAG_BAG_CENTER","vehicle_snowmobile_bag_center",undefined,undefined,undefined,undefined,1,2); + common_scripts\_destructible::destructible_part("TAG_BAG_LEFT","vehicle_snowmobile_bag_left",undefined,undefined,undefined,undefined,1,2); + common_scripts\_destructible::destructible_part("TAG_BAG_RIGHT","vehicle_snowmobile_bag_right",undefined,undefined,undefined,undefined,1,2); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); +} + +//Function Number: 128 +destructible_gaspump(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",150,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(15); + common_scripts\_destructible::destructible_loopfx("tag_death_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,150,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_death_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_death_fx","fire/gas_pump_fire_damage",0.4); + common_scripts\_destructible::destructible_sound("gaspump01_flareup_med"); + common_scripts\_destructible::destructible_loopsound("gaspump01_fire_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_death_fx","fire/gas_pump_fire_damage",0.4); + common_scripts\_destructible::destructible_loopsound("gaspump01_fire_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,210,"allies"); + common_scripts\_destructible::destructible_sound("gaspump01_flareup_med"); + common_scripts\_destructible::destructible_loopfx("tag_fx","fire/gas_pump_fire_handle",0.05); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"gaspump01_hose"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,5,"o_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/gas_pump_exp",0); + common_scripts\_destructible::destructible_sound("gaspump01_explode"); + common_scripts\_destructible::func_976(6000,8000,210,300,50,300,undefined,undefined,0.3,500); + common_scripts\_destructible::destructible_state(undefined,"furniture_gaspump01_destroyed",undefined,undefined,"no_melee"); + common_scripts\_destructible::destructible_part("tag_panel_front01","furniture_gaspump01_panel01",80,undefined,undefined,undefined,1,1,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_panel_front02","furniture_gaspump01_panel02",40,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_panel_front03","furniture_gaspump01_panel03",40,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_sound("exp_gaspump_sparks"); + common_scripts\_destructible::destructible_fx("tag_panel_front03","props/electricbox4_explode"); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_panel_back01","furniture_gaspump01_panel01",110,undefined,undefined,undefined,1,1,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_panel_back02","furniture_gaspump01_panel02",40,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_panel_back03","furniture_gaspump01_panel03",40,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_sound("exp_gaspump_sparks"); + common_scripts\_destructible::destructible_fx("tag_panel_back03","props/electricbox4_explode"); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 129 +destructible_electrical_transformer_large(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",1500,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(2); + common_scripts\_destructible::destructible_loopsound("electrical_transformer_sparks"); + common_scripts\_destructible::destructible_loopfx("tag_fx","explosions/electrical_transformer_spark_runner",0.8); + common_scripts\_destructible::destructible_healthdrain(12,0.2,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,500,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("electrical_transformer_sparks"); + common_scripts\_destructible::destructible_fx("tag_fx_junction","explosions/generator_sparks_c",0); + common_scripts\_destructible::destructible_loopfx("tag_fx_junction","fire/electrical_transformer_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_loopfx("tag_fx","explosions/electrical_transformer_spark_runner",0.8); + common_scripts\_destructible::destructible_healthdrain(12,0.2,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("electrical_transformer_sparks"); + common_scripts\_destructible::destructible_loopfx("tag_fx_junction","fire/electrical_transformer_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_loopfx("tag_fx","explosions/electrical_transformer_spark_runner",0.8); + common_scripts\_destructible::destructible_loopfx("tag_fx_valve","explosions/generator_spark_runner",0.6); + common_scripts\_destructible::destructible_healthdrain(12,0.2,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,500,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/electrical_transformer_explosion",0); + common_scripts\_destructible::destructible_sound("electrical_transformer01_explode"); + common_scripts\_destructible::func_976(6000,8000,210,300,20,300,undefined,undefined,0.3,500); + common_scripts\_destructible::destructible_state(undefined,"com_electrical_transformer_large_des",undefined,undefined,"no_melee"); + common_scripts\_destructible::destructible_part("tag_door1","com_electrical_transformer_large_dam_door1",1500,undefined,undefined,undefined,0,1,undefined,1); + common_scripts\_destructible::destructible_sound("electrical_transformer01_explode_detail"); + common_scripts\_destructible::destructible_fx("tag_door1","explosions/generator_explosion"); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_door2","com_electrical_transformer_large_dam_door2",150,undefined,undefined,undefined,0,1,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_door3","com_electrical_transformer_large_dam_door3",150,undefined,undefined,undefined,0,1,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_door4","com_electrical_transformer_large_dam_door4",150,undefined,undefined,undefined,0,1,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_door5","com_electrical_transformer_large_dam_door5",1500,undefined,undefined,undefined,0,1,undefined,1); + common_scripts\_destructible::destructible_sound("electrical_transformer01_explode_detail"); + common_scripts\_destructible::destructible_fx("tag_door5","explosions/generator_explosion"); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_door6","com_electrical_transformer_large_dam_door6",150,undefined,undefined,undefined,0,1,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_door7","com_electrical_transformer_large_dam_door7",150,undefined,undefined,undefined,0,1,undefined,1); + common_scripts\_destructible::destructible_loopsound("electrical_transformer_sparks"); + common_scripts\_destructible::destructible_fx("tag_door7","props/electricbox4_explode"); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 130 +get_precached_anim(param_00) +{ + return level._destructible_preanims[param_00]; +} + +//Function Number: 131 +get_precached_animtree(param_00) +{ + return level._destructible_preanimtree[param_00]; +} + +//Function Number: 132 +vehicle_coupe(param_00) +{ + common_scripts\_destructible::destructible_create("vehicle_coupe_" + param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,150,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,150,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_coupe_" + param_00 + "_destroyed",undefined,32,"o_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","vehicle_coupe_wheel_lf",20,undefined,undefined,"no_melee",undefined,2.3); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("tag_door_left_front","vehicle_coupe_" + param_00 + "_door_LF",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_spoiler","vehicle_coupe_" + param_00 + "_spoiler",undefined,undefined,undefined,undefined,1,2); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_coupe_" + param_00 + "_mirror_L",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_coupe_" + param_00 + "_mirror_R",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 133 +vehicle_mini(param_00) +{ + common_scripts\_destructible::destructible_create("vehicle_mini_destructible_" + param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,150,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,150,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_mini_destroyed_" + param_00,undefined,32,"o_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee",undefined,2.3); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + var_01 = "TAG_GLASS_FRONT"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_D",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_mini_mirror_lf",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_mini_mirror_rf",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 134 +vehicle_uk_truck(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + var_01 = "TAG_GLASS_FRONT"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_D",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "TAG_GLASS_BACK"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_D",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "TAG_GLASS_LEFT_FRONT"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_D",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "TAG_GLASS_RIGHT_FRONT"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_D",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); +} + +//Function Number: 135 +vehicle_uk_police_estate(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"uk_police_estate_destroyed",undefined,32,"o_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","uk_police_estate_wheel_lf",20,undefined,undefined,"no_melee",undefined,1); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","uk_police_estate_wheel_lf",20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","uk_police_estate_wheel_lf",20,undefined,undefined,"no_melee",undefined,10); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","uk_police_estate_wheel_lf",20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + var_01 = "TAG_GLASS_FRONT"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_D",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "TAG_GLASS_BACK"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_D",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "TAG_GLASS_LEFT_FRONT"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_D",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "TAG_GLASS_RIGHT_FRONT"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_D",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "TAG_GLASS_LEFT_BACK"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_D",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "TAG_GLASS_RIGHT_BACK"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_D",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "TAG_GLASS_LEFT_BACK_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_D",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "TAG_GLASS_RIGHT_BACK_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_D",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); +} + +//Function Number: 136 +vehicle_uaz_winter(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_uaz_winter_destroy",undefined,32,"o_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_uaz_wheel_LF_d",20,undefined,undefined,"no_melee",undefined,1); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_uaz_wheel_LF_d",20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_uaz_wheel_RF_d",20,undefined,undefined,"no_melee",undefined,10); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","vehicle_uaz_wheel_RF_d",20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_uaz_winter_mirror_L",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_uaz_winter_mirror_R",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 137 +vehicle_uaz_fabric(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_uaz_fabric_dsr",undefined,32,"o_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_uaz_wheel_LF_d",20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_uaz_wheel_LF_d",20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_uaz_wheel_RF_d",20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","vehicle_uaz_wheel_RF_d",20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_uaz_mirror_L",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_uaz_mirror_R",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 138 +vehicle_uaz_hardtop(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_uaz_hardtop_dsr",undefined,32,"o_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_uaz_wheel_LF_d",20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_uaz_wheel_LF_d",20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_uaz_wheel_RF_d",20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","vehicle_uaz_wheel_RF_d",20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_uaz_mirror_L",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_uaz_mirror_R",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 139 +vehicle_jeep(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_jeep_destroyed",undefined,32,"o_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_jeep_wheel_lf",20,undefined,undefined,"no_melee",undefined,2.7); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_jeep_wheel_lf",20,undefined,undefined,"no_melee",undefined,2.7); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); +} + +//Function Number: 140 +vehicle_jeep_dusty(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_jeep_destroyed",undefined,32,"o_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_jeep_wheel_lf",20,undefined,undefined,"no_melee",undefined,2.7); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_jeep_wheel_lf",20,undefined,undefined,"no_melee",undefined,2.7); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); +} + +//Function Number: 141 +vehicle_uaz_open(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_uaz_open_dsr",undefined,32,"o_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_uaz_wheel_LF_d",20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_uaz_wheel_LF_d",20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_uaz_wheel_LF_d",20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","vehicle_uaz_wheel_LF_d",20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_uaz_mirror_L",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_uaz_mirror_R",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 142 +vehicle_india_compact_destructible(param_00) +{ + common_scripts\_destructible::destructible_create("vehicle_india_compact_destructible_" + param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/india_compact_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_india_compact_destroyed_" + param_00,undefined,32,"o_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_india_compact_wheel_lf_d",20,undefined,undefined,"no_melee",undefined,1.2); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_india_compact_mirror_l",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_india_compact_mirror_r",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 143 +vehicle_india_rickshaw(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/rickshaw_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_deathfx","explosions/india_rickshaw_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"india_vehicle_rksw_d",undefined,32,"o_melee"); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,30,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + common_scripts\_destructible::destructible_part("tag_headlight_left","intro_vehicle_rksw_light_d",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 144 +vehicle_tuk_tuk(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/rickshaw_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/india_rickshaw_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_tuk_tuk_destroyed",undefined,32,"o_melee"); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,30,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,30,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + common_scripts\_destructible::destructible_part("tag_door_left_front","vehicle_tuk_tuk_door_left",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_door_left_front","vehicle_tuk_tuk_door_right",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_tuk_tuk_mirror",10,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 145 +vehicle_india_suv(param_00) +{ + common_scripts\_destructible::destructible_create("vehicle_india_suv_" + param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_deathfx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_india_suv_" + param_00 + "_dsr",undefined,32,"o_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_india_suv_wheel_lf_d",20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_india_suv_wheel_lf_d",20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_india_suv_wheel_rf_d",20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","vehicle_india_suv_wheel_rf_d",20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_uaz_mirror_L",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_uaz_mirror_R",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 146 +vehicle_policecar(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode_police"); + common_scripts\_destructible::func_976(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_policecar_lapd_destroy",undefined,32,"o_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_policecar_lapd_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_policecar_lapd_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_policecar_lapd_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","vehicle_policecar_lapd_wheel_LF",20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("tag_door_left_front","vehicle_policecar_lapd_door_LF",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_door_right_front","vehicle_policecar_lapd_door_RF",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_door_left_back","vehicle_policecar_lapd_door_LB",undefined,undefined,undefined,undefined,1,1); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_center_glass"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("TAG_CENTER_GLASS_FX","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_policecar_lapd_mirror_L",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_policecar_lapd_mirror_R",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 147 +vehicle_policecar_russia(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode_police"); + common_scripts\_destructible::func_976(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_policecar_russia_destroy",undefined,32,"o_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_policecar_russia_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_policecar_russia_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_policecar_russia_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","vehicle_policecar_russia_wheel_LF",20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("tag_door_left_front","vehicle_policecar_russia_door_LF",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_door_right_front","vehicle_policecar_russia_door_RF",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_door_left_back","vehicle_policecar_russia_door_LB",undefined,undefined,undefined,undefined,1,1); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_center_glass"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("TAG_CENTER_GLASS_FX","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_policecar_russia_mirror_L",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_policecar_russia_mirror_R",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 148 +vehicle_taxi(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::random_dynamic_attachment("tag_ad","vehicle_taxi_rooftop_ad_base","vehicle_taxi_rooftop_ad_1"); + common_scripts\_destructible::random_dynamic_attachment("tag_ad","vehicle_taxi_rooftop_ad_base","vehicle_taxi_rooftop_ad_2"); + common_scripts\_destructible::random_dynamic_attachment("tag_ad","vehicle_taxi_rooftop_ad_base","vehicle_taxi_rooftop_ad_3"); + common_scripts\_destructible::random_dynamic_attachment("tag_ad","vehicle_taxi_rooftop_ad_base","vehicle_taxi_rooftop_ad_4"); + common_scripts\_destructible::random_dynamic_attachment("tag_ad","vehicle_taxi_toplight",undefined,"taxi_ad_clip"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_taxi_yellow_destroy",undefined,32,"o_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee",undefined,1.7); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee",undefined,1.7); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_car_alarm(); + var_01 = "TAG_CENTER_GLASS"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_taxi_mirror_l",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_taxi_mirror_r",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 149 +vehicle_taxi_dubai(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::random_dynamic_attachment("tag_ad","vehicle_taxi_toplight_dubai",undefined,"taxi_ad_clip"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_taxi_yellow_destroy_dubai",undefined,32,"o_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee",undefined,1.7); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee",undefined,1.7); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_car_alarm(); + var_01 = "TAG_CENTER_GLASS"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_taxi_mirror_l",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_taxi_mirror_r",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 150 +vehicle_truck(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,150,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,150,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,param_00 + "_destroyed",undefined,32,"o_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee",undefined,1.7); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee",undefined,1.7); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_car_alarm(); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); +} + +//Function Number: 151 +toy_security_camera2(param_00,param_01) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_camera_tilt",0,undefined,32); + lib_0F09::monitor_player_distance(get_precached_anim(param_01),#animtree,"setanimknob",undefined,undefined,param_01); + common_scripts\_destructible::destructible_state("tag_camera_tilt","om_security_camera_tilt_animated",75); + common_scripts\_destructible::destructible_anim(get_precached_anim("ecurity_camera_destroy"),#animtree,"setanimknob",undefined,undefined,"security_camera_destroy"); + common_scripts\_destructible::destructible_fx("tag_fx","props/security_camera_explosion_moving"); + common_scripts\_destructible::destructible_sound("security_camera_sparks"); + common_scripts\_destructible::destructible_state(undefined,"com_security_camera_d_tilt_animated",undefined,undefined,"no_melee"); +} + +//Function Number: 152 +toy_security_camera(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_camera_tilt",0,undefined,32); + common_scripts\_destructible::destructible_anim(get_precached_anim("ecurity_camera_idle"),#animtree,"setanimknob",undefined,undefined,"security_camera_idle"); + common_scripts\_destructible::destructible_state("tag_camera_tilt","com_security_camera_tilt_animated",75); + common_scripts\_destructible::destructible_anim(get_precached_anim("ecurity_camera_destroy"),#animtree,"setanimknob",undefined,undefined,"security_camera_destroy"); + common_scripts\_destructible::destructible_fx("tag_fx","props/security_camera_explosion_moving"); + common_scripts\_destructible::destructible_sound("security_camera_sparks"); + common_scripts\_destructible::destructible_state(undefined,"com_security_camera_d_tilt_animated",undefined,undefined,"no_melee"); +} + +//Function Number: 153 +toy_building_collapse_paris_ac130(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",100,undefined,32); + common_scripts\_destructible::destructible_anim(get_precached_anim("c130_building_collapse"),#animtree,"setanimknob",undefined,undefined,"ac130_building_collapse"); + common_scripts\_destructible::destructible_fx("tag_fx","misc/building_collapse_paris_ac130"); + common_scripts\_destructible::destructible_fx("tag_fx_base","misc/building_collapse_paris_ac130_ground"); + common_scripts\_destructible::destructible_fx("tag_fx_crack","misc/building_collapse_paris_ac130_cracks"); + common_scripts\_destructible::destructible_state(undefined,"building_collapse_paris_ac130_dest",undefined,undefined,"no_melee"); +} + +//Function Number: 154 +toy_poison_gas_attack(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",100,undefined,32); + common_scripts\_destructible::destructible_anim(get_precached_anim("ondon_gas_attack"),#animtree,"setanimknob",undefined,undefined,"london_gas_attack"); + common_scripts\_destructible::destructible_fx("tag_origin","smoke/poison_gas_attack"); + common_scripts\_destructible::destructible_state(undefined,"fx_gas_attack",undefined,undefined,"no_melee"); +} + +//Function Number: 155 +toy_arcade_machine(param_00) +{ + common_scripts\_destructible::destructible_create("toy_arcade_machine" + param_00,"tag_origin",0,undefined,32); + common_scripts\_destructible::destructible_state("tag_origin","arcade_machine" + param_00,75); + common_scripts\_destructible::destructible_fx("tag_fx","props/arcade_machine_exp"); + common_scripts\_destructible::destructible_fx("tag_fx2","props/arcade_machine_coins"); + common_scripts\_destructible::destructible_sound("arcade_machine_destroy"); + common_scripts\_destructible::destructible_state(undefined,"arcade_machine" + param_00 + "_des",undefined,undefined,"no_melee"); +} + +//Function Number: 156 +toy_pinball_machine(param_00) +{ + common_scripts\_destructible::destructible_create("toy_pinball_machine" + param_00,"tag_origin",0,undefined,32); + common_scripts\_destructible::destructible_state("tag_origin","pinball_machine" + param_00,75); + common_scripts\_destructible::destructible_fx("tag_fx","props/pinball_machine_exp",undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_fx2","props/arcade_machine_coins"); + common_scripts\_destructible::destructible_fx("tag_fx3","props/pinball_machine_glass"); + common_scripts\_destructible::destructible_sound("pinball_machine_destroy"); + common_scripts\_destructible::destructible_state(undefined,"pinball_machine" + param_00 + "_des",undefined,undefined,"no_melee"); +} + +//Function Number: 157 +toy_fortune_machine(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",0,undefined,32); + common_scripts\_destructible::destructible_loopsound("fortune_machine_idle"); + common_scripts\_destructible::destructible_loopfx("J_Eye_RI","props/fortune_machine_glow_eyes",2.9); + common_scripts\_destructible::destructible_loopfx("J_Eye_LE","props/fortune_machine_glow_eyes",2.9); + common_scripts\_destructible::destructible_loopfx("tag_fx3","props/fortune_machine_glow_ball",4); + common_scripts\_destructible::destructible_anim(get_precached_anim("ortune_machine_anim"),#animtree,"setanimknob",undefined,undefined,"fortune_machine_anim"); + common_scripts\_destructible::destructible_state("tag_origin","fortune_machine",75); + common_scripts\_destructible::destructible_fx("tag_fx","props/fortune_machine_exp",undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_fx2","props/fortune_machine_tickets"); + common_scripts\_destructible::destructible_sound("pinball_machine_destroy"); + common_scripts\_destructible::destructible_anim(get_precached_anim("ortune_machine_des"),#animtree,"setanimknob",undefined,undefined,"fortune_machine_des"); + common_scripts\_destructible::func_976(20,2000,20,20,40,40,undefined,64); + common_scripts\_destructible::destructible_state(undefined,"fortune_machine_des",undefined,undefined,"no_melee"); +} + +//Function Number: 158 +toy_trashcan_clown(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",120,undefined,32); + common_scripts\_destructible::destructible_fx("tag_fx","props/garbage_spew_des",1,"splash"); + common_scripts\_destructible::destructible_fx("tag_fx","props/garbage_spew",1,common_scripts\_destructible::damage_not("splash")); + common_scripts\_destructible::destructible_sound("exp_trashcan_sweet"); + common_scripts\_destructible::func_976(600,651,1,1,10,20); + common_scripts\_destructible::destructible_state("tag_origin","trashcan_clown_base",undefined,undefined,undefined,undefined,undefined,0); + common_scripts\_destructible::destructible_part("tag_fx","trashcan_clown_lid",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 159 +func_0A1B(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",25,undefined,32); + common_scripts\_destructible::destructible_fx("tag_origin","dust/dust_shanty_explode"); + common_scripts\_destructible::destructible_anim(get_precached_anim("fr_shanty01_explode"),#animtree,"setanimknob",undefined,undefined,"afr_shanty01_explode"); + common_scripts\_destructible::destructible_state(undefined,"afr_shanty01",undefined,undefined,"no_melee"); +} + +//Function Number: 160 +vehicle_slava_ny_harbor_zonea(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",1,undefined,32); + common_scripts\_destructible::destructible_anim(get_precached_anim("y_harbor_slava_r2a_des"),#animtree,"setanim"); + common_scripts\_destructible::destructible_fx("tag_explosionA","maps/ny_harbor/ny_battleship_explosion"); + common_scripts\_destructible::destructible_fx("tag_explosionB","maps/ny_harbor/ny_battleship_explosion"); +} + +//Function Number: 161 +rooftop_skylight_destructible(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",5,undefined,undefined); + common_scripts\_destructible::destructible_fx("tag_fx1","props/skylight_destroyed_windowglass"); + common_scripts\_destructible::destructible_fx("tag_fx4","props/skylight_destroyed_windowglass"); + common_scripts\_destructible::destructible_fx("tag_fx7","props/skylight_destroyed_windowglass"); + common_scripts\_destructible::destructible_fx("tag_fx4","props/skylight_destroyed_pit"); + common_scripts\_destructible::destructible_state("tag_origin","ny_rooftop_skylight_destroyed",undefined,undefined,"no_melee"); +} + +//Function Number: 162 +satellite_dish_big_destructible(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",150,undefined,32); + common_scripts\_destructible::destructible_fx("tag_origin","props/satellite_dish_big_des"); + common_scripts\_destructible::destructible_state("tag_origin","com_satellite_dish_big_destroyed",undefined,undefined,"no_melee"); +} + +//Function Number: 163 +dest_onestate(param_00,param_01,param_02,param_03) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",150,undefined,32); + common_scripts\_destructible::destructible_fx("tag_fx",param_02); + common_scripts\_destructible::destructible_state("tag_origin",param_01,undefined,undefined,"no_meele"); + if(isdefined(param_03)) + { + common_scripts\_destructible::destructible_sound(param_03); + } +} + +//Function Number: 164 +dest_pb_planter(param_00,param_01,param_02,param_03) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",1150,undefined,32); + common_scripts\_destructible::destructible_state("tag_origin",param_01,undefined,undefined,"no_meele"); + common_scripts\_destructible::destructible_fx("tag_fx",param_02); + common_scripts\_destructible::destructible_fx("tag_fx",param_02); +} + +//Function Number: 165 +berlin_hotel_lights_ceiling1(param_00,param_01) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",150,undefined,32); + common_scripts\_destructible::destructible_fx("tag_fx","misc/light_blowout_ceiling"); + common_scripts\_destructible::destructible_fx("tag_fx_wire","misc/light_blowout_wire_spark"); + common_scripts\_destructible::destructible_state("tag_origin",param_01,undefined,undefined,"no_meele"); +} + +//Function Number: 166 +toy_old_wood_barrels(param_00,param_01,param_02) +{ + common_scripts\_destructible::destructible_create("toy_old_wood_" + param_00,"tag_origin",120,undefined,32,"splash"); + common_scripts\_destructible::destructible_fx("tag_origin","props/old_wood_" + param_01,1,undefined); + common_scripts\_destructible::destructible_sound("exp_old_wood_barrel"); + common_scripts\_destructible::func_976(600,651,1,1,10,20); + common_scripts\_destructible::destructible_state(undefined,"old_wood_barrel_dmg_" + param_02,undefined,undefined,undefined,undefined,undefined,0); +} + +//Function Number: 167 +toy_terracotta_pot(param_00,param_01) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",50,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_origin","props/prop_terracotta_pot_" + param_01 + "_dest",1,undefined); + common_scripts\_destructible::func_976(600,651,1,1,10,20); + common_scripts\_destructible::destructible_state(undefined,"prop_terracotta_null_mesh",undefined,undefined,undefined,undefined,undefined,0); +} + +//Function Number: 168 +rus_vx_gas_canister(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("tag_origin","rus_vx_gas_canister_destroyed",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/rus_vx_gas_canister",0); + common_scripts\_destructible::func_976(7000,8000,150,256,16,150,undefined); +} + +//Function Number: 169 +toy_furniture_coffee_table_modern(param_00,param_01,param_02) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",50,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","props/furniture_coffee_table_modern_0" + param_01,1,undefined); + common_scripts\_destructible::func_976(600,1651,param_02,param_02,10,20,undefined,10); + common_scripts\_destructible::destructible_state(undefined,"furniture_coffee_table_modern_0" + param_01 + "_dest",undefined,undefined,undefined,undefined,undefined,0); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/common_scripts/_dynamic_world.gsc b/MW3/Xbox/MP/common_scripts/_dynamic_world.gsc new file mode 100644 index 0000000..b15dea1 --- /dev/null +++ b/MW3/Xbox/MP/common_scripts/_dynamic_world.gsc @@ -0,0 +1,1488 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: common_scripts\_dynamic_world.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 64 + * Decompile Time: 1055 ms + * Timestamp: 10/27/2023 2:29:12 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + common_scripts\utility::array_thread(getentarray("com_wall_fan_blade_rotate_slow","targetname"),::fan_blade_rotate,"veryslow"); + common_scripts\utility::array_thread(getentarray("com_wall_fan_blade_rotate","targetname"),::fan_blade_rotate,"slow"); + common_scripts\utility::array_thread(getentarray("com_wall_fan_blade_rotate_fast","targetname"),::fan_blade_rotate,"fast"); + var_00 = []; + func_18B7(); + foreach(var_04, var_02 in var_41) + { + var_03 = getentarray(var_04,"classname"); + common_scripts\utility::array_thread(var_03,::triggertouchthink); + common_scripts\utility::array_thread(var_03,var_02); + } + + common_scripts\utility::array_thread(getentarray("vending_machine","targetname"),::vending_machine); + common_scripts\utility::array_thread(getentarray("toggle","targetname"),::use_toggle); + level thread onplayerconnect(); + var_05 = getent("civilian_jet_origin","targetname"); + if(isdefined(var_05)) + { + var_05 thread civilian_jet_flyby(); + } +} + +//Function Number: 2 +onplayerconnect() +{ + for(;;) + { + level waittill("connecting",var_00); + var_00 thread movementtracker(); + } +} + +//Function Number: 3 +func_18B7() +{ + if(common_scripts\utility::issp()) + { + foreach(var_01 in level.players) + { + var_01.touchtriggers = []; + var_01 thread movementtracker(); + } + } +} + +//Function Number: 4 +func_18B9() +{ + self.touchtriggers = []; + thread movementtracker(); +} + +//Function Number: 5 +civilian_jet_flyby() +{ + level endon("game_ended"); + func_18BB(); + level waittill("prematch_over"); + for(;;) + { + thread func_18C9(); + self waittill("start_flyby"); + thread jet_flyby(); + self waittill("flyby_done"); + jet_reset(); + } +} + +//Function Number: 6 +func_18BB() +{ + self.var_18BC = getentarray(self.target,"targetname"); + self.jet_flyto = getent("civilian_jet_flyto","targetname"); + self.engine_fxs = getentarray("engine_fx","targetname"); + self.var_18BF = getentarray("flash_fx","targetname"); + self.jet_engine_fx = loadfx("fire/jet_afterburner"); + self.jet_flash_fx_red = loadfx("misc/aircraft_light_wingtip_red"); + self.jet_flash_fx_green = loadfx("misc/aircraft_light_wingtip_green"); + self.jet_flash_fx_blink = loadfx("misc/aircraft_light_red_blink"); + level.civilianjetflyby = undefined; + var_00 = vectornormalize(self.origin - self.jet_flyto.origin) * 20000; + self.jet_flyto.origin = self.jet_flyto.origin - var_00; + self.origin = self.origin + var_00; + foreach(var_02 in self.var_18BC) + { + var_02.origin = var_02.origin + var_00; + var_02.old_origin = var_02.origin; + var_02 hide(); + } + + foreach(var_05 in self.engine_fxs) + { + var_05.origin = var_05.origin + var_00; + } + + foreach(var_08 in self.var_18BF) + { + var_08.origin = var_08.origin + var_00; + } + + var_0A = self.origin; + var_0B = self.jet_flyto.origin; + self.jet_fly_vec = var_0B - var_0A; + var_0C = 2000; + var_0D = abs(distance(var_0A,var_0B)); + self.var_18C7 = var_0D / var_0C; +} + +//Function Number: 7 +jet_reset() +{ + foreach(var_01 in self.var_18BC) + { + var_01.origin = var_01.old_origin; + var_01 hide(); + } +} + +//Function Number: 8 +func_18C9() +{ + level endon("game_ended"); + var_00 = gettimeinterval(); + var_01 = max(10,var_00); + var_01 = min(var_01,100); + if(getdvar("jet_flyby_timer") != "") + { + level.civilianjetflyby_timer = 5 + getdvarint("jet_flyby_timer"); + } + else + { + level.civilianjetflyby_timer = 0.25 + randomfloatrange(0.3,0.7) * 60 * var_01; + } + + wait level.civilianjetflyby_timer; + while(isdefined(level.airstrikeinprogress) || isdefined(level.ac130player) || isdefined(level.chopper) || isdefined(level.remotemissileinprogress)) + { + wait 0.05; + } + + self notify("start_flyby"); + level.civilianjetflyby = 1; + self waittill("flyby_done"); + level.civilianjetflyby = undefined; +} + +//Function Number: 9 +gettimeinterval() +{ + if(common_scripts\utility::issp()) + { + return 10; + } + + if(isdefined(game["status"]) && game["status"] == "overtime") + { + return 1; + } + + return func_18D0("timelimit"); +} + +//Function Number: 10 +func_18D0(param_00) +{ + param_00 = "scr_" + level.gametype + "_" + param_00; + if(isdefined(level.overridewatchdvars) && isdefined(level.overridewatchdvars[param_00])) + { + return level.overridewatchdvars[param_00]; + } + + return level.watchdvars[param_00].value; +} + +//Function Number: 11 +jet_flyby() +{ + foreach(var_01 in self.var_18BC) + { + var_01 show(); + } + + var_03 = []; + var_04 = []; + foreach(var_06 in self.engine_fxs) + { + var_07 = spawn("script_model",var_06.origin); + var_07 setmodel("tag_origin"); + var_07.angles = var_06.angles; + var_03[var_03.size] = var_07; + } + + foreach(var_0A in self.var_18BF) + { + var_0B = spawn("script_model",var_0A.origin); + var_0B setmodel("tag_origin"); + var_0B.color = var_0A.script_noteworthy; + var_0B.angles = var_0A.angles; + var_04[var_04.size] = var_0B; + } + + thread jet_planesound(self.var_18BC[0],level.mapcenter); + wait 0.05; + foreach(var_07 in var_03) + { + playfxontag(self.jet_engine_fx,var_07,"tag_origin"); + } + + foreach(var_0B in var_04) + { + if(isdefined(var_0B.color) && var_0B.color == "blink") + { + playfxontag(self.jet_flash_fx_blink,var_0B,"tag_origin"); + continue; + } + + if(isdefined(var_0B.color) && var_0B.color == "red") + { + playfxontag(self.jet_flash_fx_red,var_0B,"tag_origin"); + continue; + } + + playfxontag(self.jet_flash_fx_green,var_0B,"tag_origin"); + } + + foreach(var_01 in self.var_18BC) + { + var_01 moveto(var_01.origin + self.jet_fly_vec,self.var_18C7); + } + + foreach(var_07 in var_03) + { + var_07 moveto(var_07.origin + self.jet_fly_vec,self.var_18C7); + } + + foreach(var_0B in var_04) + { + var_0B moveto(var_0B.origin + self.jet_fly_vec,self.var_18C7); + } + + wait self.var_18C7 + 1; + foreach(var_07 in var_03) + { + var_07 delete(); + } + + foreach(var_0B in var_04) + { + var_0B delete(); + } + + self notify("flyby_done"); +} + +//Function Number: 12 +jet_planesound(param_00,param_01) +{ + param_00 thread func_18D9("veh_mig29_dist_loop"); + while(!func_18DB(param_00,param_01)) + { + wait 0.05; + } + + param_00 thread func_18D9("veh_mig29_close_loop"); + while(func_18DA(param_00,param_01)) + { + wait 0.05; + } + + wait 0.5; + param_00 thread func_18D8("veh_mig29_sonic_boom"); + while(func_18DB(param_00,param_01)) + { + wait 0.05; + } + + param_00 notify("stop soundveh_mig29_close_loop"); + self waittill("flyby_done"); + param_00 notify("stop soundveh_mig29_dist_loop"); +} + +//Function Number: 13 +func_18D8(param_00,param_01,param_02) +{ + var_03 = spawn("script_origin",(0,0,1)); + var_03 hide(); + if(!isdefined(param_01)) + { + param_01 = self.origin; + } + + var_03.origin = param_01; + if(isdefined(param_02) && param_02) + { + var_03 playsoundasmaster(param_00); + } + else + { + var_03 playsound(param_00); + } + + wait 10; + var_03 delete(); +} + +//Function Number: 14 +func_18D9(param_00,param_01) +{ + var_02 = spawn("script_origin",(0,0,0)); + var_02 hide(); + var_02 endon("death"); + thread common_scripts\utility::delete_on_death(var_02); + if(isdefined(param_01)) + { + var_02.origin = self.origin + param_01; + var_02.angles = self.angles; + var_02 linkto(self); + } + else + { + var_02.origin = self.origin; + var_02.angles = self.angles; + var_02 linkto(self); + } + + var_02 playloopsound(param_00); + self waittill("stop sound" + param_00); + var_02 stoploopsound(param_00); + var_02 delete(); +} + +//Function Number: 15 +func_18DA(param_00,param_01) +{ + var_02 = anglestoforward(common_scripts\utility::flat_angle(param_00.angles)); + var_03 = vectornormalize(common_scripts\utility::flat_origin(param_01) - param_00.origin); + var_04 = vectordot(var_02,var_03); + if(var_04 > 0) + { + return 1; + } + + return 0; +} + +//Function Number: 16 +func_18DB(param_00,param_01) +{ + var_02 = func_18DA(param_00,param_01); + if(var_02) + { + var_03 = 1; + } + else + { + var_03 = -1; + } + + var_04 = common_scripts\utility::flat_origin(param_00.origin); + var_05 = var_04 + anglestoforward(common_scripts\utility::flat_angle(param_00.angles)) * var_03 * 100000; + var_06 = pointonsegmentnearesttopoint(var_04,var_05,param_01); + var_07 = distance(var_04,var_06); + if(var_07 < 3000) + { + return 1; + } + + return 0; +} + +//Function Number: 17 +vending_machine() +{ + level endon("game_ended"); + self endon("death"); + self setcursorhint("HINT_ACTIVATE"); + self.vm_normal = getent(self.target,"targetname"); + var_00 = getent(self.vm_normal.target,"targetname"); + var_01 = getent(var_00.target,"targetname"); + var_02 = getent(var_01.target,"targetname"); + self.var_18DE = var_02.origin; + var_03 = getent(var_02.target,"targetname"); + self.var_18DF = var_03.origin; + if(isdefined(var_03.target)) + { + self.vm_fx_loc = getent(var_03.target,"targetname").origin; + } + + self.vm_normal setcandamage(1); + self.vm_normal_model = self.vm_normal.model; + self.vm_damaged_model = self.vm_normal.script_noteworthy; + self.vm_soda_model = var_00.model; + self.vm_soda_start_pos = var_00.origin; + self.vm_soda_start_angle = var_00.angles; + self.var_18E6 = var_01.origin; + self.vm_soda_stop_angle = var_01.angles; + precachemodel(self.vm_damaged_model); + var_00 delete(); + var_01 delete(); + var_02 delete(); + var_03 delete(); + self.soda_array = []; + self.soda_count = 12; + self.var_18EA = undefined; + self.hp = 400; + thread func_18EC(self.vm_normal); + self playloopsound("vending_machine_hum"); + for(;;) + { + self waittill("trigger",var_04); + self playsound("vending_machine_button_press"); + if(!self.soda_count) + { + continue; + } + + if(isdefined(self.var_18EA)) + { + soda_can_eject(); + } + + soda_can_drop(spawn_soda()); + wait 0.05; + } +} + +//Function Number: 18 +func_18EC(param_00) +{ + level endon("game_ended"); + var_01 = "mod_grenade mod_projectile mod_explosive mod_grenade_splash mod_projectile_splash splash"; + var_02 = loadfx("explosions/tv_explosion"); + for(;;) + { + var_03 = undefined; + var_04 = undefined; + var_05 = undefined; + var_06 = undefined; + var_07 = undefined; + param_00 waittill("damage",var_03,var_04,var_05,var_06,var_07); + if(isdefined(var_07)) + { + if(issubstr(var_01,tolower(var_07))) + { + var_03 = var_03 * 3; + } + + self.hp = self.hp - var_03; + if(self.hp > 0) + { + continue; + } + + self notify("death"); + self.origin = self.origin + (0,0,10000); + if(!isdefined(self.vm_fx_loc)) + { + var_08 = self.vm_normal.origin + (37,-31,52); + } + else + { + var_08 = self.vm_fx_loc; + } + + playfx(var_02,var_08); + self.vm_normal setmodel(self.vm_damaged_model); + while(self.soda_count > 0) + { + if(isdefined(self.var_18EA)) + { + soda_can_eject(); + } + + soda_can_drop(spawn_soda()); + wait 0.05; + } + + self stoploopsound("vending_machine_hum"); + return; + } + } +} + +//Function Number: 19 +spawn_soda() +{ + var_00 = spawn("script_model",self.vm_soda_start_pos); + var_00 setmodel(self.vm_soda_model); + var_00.origin = self.vm_soda_start_pos; + var_00.angles = self.vm_soda_start_angle; + return var_00; +} + +//Function Number: 20 +soda_can_drop(param_00) +{ + param_00 moveto(self.var_18E6,0.2); + param_00 playsound("vending_machine_soda_drop"); + wait 0.2; + self.var_18EA = param_00; + self.soda_count--; +} + +//Function Number: 21 +soda_can_eject() +{ + self endon("death"); + if(isdefined(self.var_18EA.var_18F0) && self.var_18EA.var_18F0 == 1) + { + return; + } + + var_00 = 1; + var_01 = var_00 * -999; + var_02 = int(-25536); + var_03 = (int(var_02 / 2),int(var_02 / 2),0) - (randomint(var_02),randomint(var_02),0); + var_04 = vectornormalize(self.var_18DF - self.var_18DE + var_03); + var_05 = var_04 * randomfloatrange(var_01,var_00); + self.var_18EA physicslaunchclient(self.var_18DE,var_05); + self.var_18EA.var_18F0 = 1; +} + +//Function Number: 22 +freefall() +{ + level endon("game_ended"); + var_00 = "briefcase_bomb_mp"; + precacheitem(var_00); + for(;;) + { + self waittill("trigger_enter",var_01); + if(!var_01 hasweapon(var_00)) + { + var_01 playsound("freefall_death"); + var_01 giveweapon(var_00); + var_01 setweaponammostock(var_00,0); + var_01 setweaponammoclip(var_00,0); + var_01 switchtoweapon(var_00); + } + } +} + +//Function Number: 23 +metal_detector() +{ + level endon("game_ended"); + var_00 = getent(self.target,"targetname"); + var_00 enablegrenadetouchdamage(); + var_01 = getent(var_00.target,"targetname"); + var_02 = getent(var_01.target,"targetname"); + var_03 = getent(var_02.target,"targetname"); + var_04 = getent(var_03.target,"targetname"); + var_05 = []; + var_06 = min(var_01.origin[0],var_02.origin[0]); + var_05[0] = var_06; + var_07 = max(var_01.origin[0],var_02.origin[0]); + var_05[1] = var_07; + var_08 = min(var_01.origin[1],var_02.origin[1]); + var_05[2] = var_08; + var_09 = max(var_01.origin[1],var_02.origin[1]); + var_05[3] = var_09; + var_0A = min(var_01.origin[2],var_02.origin[2]); + var_05[4] = var_0A; + var_0B = max(var_01.origin[2],var_02.origin[2]); + var_05[5] = var_0B; + var_01 delete(); + var_02 delete(); + if(!common_scripts\utility::issp()) + { + self.var_18F3 = 7; + } + else + { + self.var_18F3 = 2; + } + + self.alarm_playing = 0; + self.alarm_annoyance = 0; + self.tolerance = 0; + thread metal_detector_dmg_monitor(var_00); + thread metal_detector_touch_monitor(); + thread metal_detector_weapons(var_05,"weapon_claymore","weapon_c4"); + var_0C = (var_03.origin[0],var_03.origin[1],var_0B); + var_0D = (var_04.origin[0],var_04.origin[1],var_0B); + var_0E = loadfx("props/metal_detector_light"); + for(;;) + { + common_scripts\utility::waittill_any("dmg_triggered","touch_triggered","weapon_triggered"); + thread func_18F7("alarm_metal_detector",var_0E,var_0C,var_0D); + } +} + +//Function Number: 24 +func_18F7(param_00,param_01,param_02,param_03) +{ + level endon("game_ended"); + if(!self.alarm_playing) + { + self.alarm_playing = 1; + thread func_18F8(); + if(!self.alarm_annoyance) + { + self playsound(param_00); + } + + playfx(param_01,param_02); + playfx(param_01,param_03); + wait self.var_18F3; + self.alarm_playing = 0; + } +} + +//Function Number: 25 +func_18F8() +{ + level endon("game_ended"); + if(!self.tolerance) + { + return; + } + + var_00 = self.var_18F3 + 0.15; + if(self.tolerance) + { + self.tolerance--; + } + else + { + self.alarm_annoyance = 1; + } + + var_01 = gettime(); + var_02 = 7; + if(common_scripts\utility::issp()) + { + var_02 = 2; + } + + waittill_any_or_timeout("dmg_triggered","touch_triggered","weapon_triggered",var_02 + 2); + var_03 = gettime() - var_01; + if(var_03 > var_02 * 1000 + 1150) + { + self.alarm_annoyance = 0; + self.tolerance = 0; + } +} + +//Function Number: 26 +waittill_any_or_timeout(param_00,param_01,param_02,param_03) +{ + level endon("game_ended"); + self endon(param_00); + self endon(param_01); + self endon(param_02); + wait param_03; +} + +//Function Number: 27 +metal_detector_weapons(param_00,param_01,param_02) +{ + level endon("game_ended"); + for(;;) + { + waittill_weapon_placed(); + var_03 = getentarray("grenade","classname"); + foreach(var_05 in var_03) + { + if(isdefined(var_05.model) && var_05.model == param_01 || var_05.model == param_02) + { + if(isinbound(var_05,param_00)) + { + thread weapon_notify_loop(var_05,param_00); + } + } + } + } +} + +//Function Number: 28 +waittill_weapon_placed() +{ + level endon("game_ended"); + self endon("dmg_triggered"); + self waittill("touch_triggered"); +} + +//Function Number: 29 +weapon_notify_loop(param_00,param_01) +{ + param_00 endon("death"); + while(isinbound(param_00,param_01)) + { + self notify("weapon_triggered"); + wait self.var_18F3; + } +} + +//Function Number: 30 +isinbound(param_00,param_01) +{ + var_02 = param_01[0]; + var_03 = param_01[1]; + var_04 = param_01[2]; + var_05 = param_01[3]; + var_06 = param_01[4]; + var_07 = param_01[5]; + var_08 = param_00.origin[0]; + var_09 = param_00.origin[1]; + var_0A = param_00.origin[2]; + if(isinbound_single(var_08,var_02,var_03)) + { + if(isinbound_single(var_09,var_04,var_05)) + { + if(isinbound_single(var_0A,var_06,var_07)) + { + return 1; + } + } + } + + return 0; +} + +//Function Number: 31 +isinbound_single(param_00,param_01,param_02) +{ + if(param_00 > param_01 && param_00 < param_02) + { + return 1; + } + + return 0; +} + +//Function Number: 32 +metal_detector_dmg_monitor(param_00) +{ + level endon("game_ended"); + for(;;) + { + param_00 waittill("damage",var_01,var_02,var_03,var_04,var_05); + if(isdefined(var_05) && alarm_validate_damage(var_05)) + { + self notify("dmg_triggered"); + } + } +} + +//Function Number: 33 +metal_detector_touch_monitor() +{ + level endon("game_ended"); + for(;;) + { + self waittill("trigger_enter"); + while(func_1930(self)) + { + self notify("touch_triggered"); + wait self.var_18F3; + } + } +} + +//Function Number: 34 +alarm_validate_damage(param_00) +{ + var_01 = "mod_melee melee mod_grenade mod_projectile mod_explosive mod_impact"; + var_02 = strtok(var_01," "); + foreach(var_04 in var_02) + { + if(tolower(var_04) == tolower(param_00)) + { + return 1; + } + } + + return 0; +} + +//Function Number: 35 +func_1901() +{ + level endon("game_ended"); + for(;;) + { + self waittill("trigger_enter",var_00); + var_00 thread func_1902(self); + } +} + +//Function Number: 36 +func_1902(param_00) +{ + self endon("disconnect"); + self endon("death"); + self playsound("step_walk_plr_woodcreak_on"); + for(;;) + { + self waittill("trigger_leave",var_01); + if(param_00 != var_01) + { + continue; + } + + self playsound("step_walk_plr_woodcreak_off"); + } +} + +//Function Number: 37 +motion_light() +{ + level endon("game_ended"); + self.movetracker = 1; + self.var_1905 = 0; + var_00 = getentarray(self.target,"targetname"); + precachemodel("com_two_light_fixture_off"); + precachemodel("com_two_light_fixture_on"); + foreach(var_02 in var_00) + { + var_02.lightrigs = []; + var_03 = getent(var_02.target,"targetname"); + if(!isdefined(var_03.target)) + { + continue; + } + + var_02.lightrigs = getentarray(var_03.target,"targetname"); + } + + for(;;) + { + self waittill("trigger_enter"); + while(func_1930(self)) + { + var_05 = 0; + foreach(var_07 in self.touchlist) + { + if(isdefined(var_07.distmoved) && var_07.distmoved > 5) + { + var_05 = 1; + } + } + + if(var_05) + { + if(!self.var_1905) + { + self.var_1905 = 1; + var_00[0] playsound("switch_auto_lights_on"); + foreach(var_02 in var_00) + { + var_02 setlightintensity(1); + if(isdefined(var_02.lightrigs)) + { + foreach(var_0B in var_02.lightrigs) + { + var_0B setmodel("com_two_light_fixture_on"); + } + } + } + } + + thread motion_light_timeout(var_00,10); + } + + wait 0.05; + } + } +} + +//Function Number: 38 +motion_light_timeout(param_00,param_01) +{ + self notify("motion_light_timeout"); + self endon("motion_light_timeout"); + wait param_01; + foreach(var_03 in param_00) + { + var_03 setlightintensity(0); + if(isdefined(var_03.lightrigs)) + { + foreach(var_05 in var_03.lightrigs) + { + var_05 setmodel("com_two_light_fixture_off"); + } + } + } + + param_00[0] playsound("switch_auto_lights_off"); + self.var_1905 = 0; +} + +//Function Number: 39 +outdoor_motion_dlight() +{ + if(!isdefined(level.var_190B)) + { + level.var_190B = loadfx("misc/outdoor_motion_light"); + } + + level endon("game_ended"); + self.movetracker = 1; + self.var_1905 = 0; + var_00 = getent(self.target,"targetname"); + var_01 = getentarray(var_00.target,"targetname"); + precachemodel("com_two_light_fixture_off"); + precachemodel("com_two_light_fixture_on"); + for(;;) + { + self waittill("trigger_enter"); + while(func_1930(self)) + { + var_02 = 0; + foreach(var_04 in self.touchlist) + { + if(isdefined(var_04.distmoved) && var_04.distmoved > 5) + { + var_02 = 1; + } + } + + if(var_02) + { + if(!self.var_1905) + { + self.var_1905 = 1; + var_00 playsound("switch_auto_lights_on"); + var_00 setmodel("com_two_light_fixture_on"); + foreach(var_07 in var_01) + { + var_07.lightent = spawn("script_model",var_07.origin); + var_07.lightent setmodel("tag_origin"); + playfxontag(level.var_190B,var_07.lightent,"tag_origin"); + } + } + + thread outdoor_motion_dlight_timeout(var_00,var_01,10); + } + + wait 0.05; + } + } +} + +//Function Number: 40 +outdoor_motion_dlight_timeout(param_00,param_01,param_02) +{ + self notify("motion_light_timeout"); + self endon("motion_light_timeout"); + wait param_02; + foreach(var_04 in param_01) + { + var_04.lightent delete(); + } + + param_00 playsound("switch_auto_lights_off"); + param_00 setmodel("com_two_light_fixture_off"); + self.var_1905 = 0; +} + +//Function Number: 41 +dog_bark() +{ + level endon("game_ended"); + self.movetracker = 1; + var_00 = getent(self.target,"targetname"); + for(;;) + { + self waittill("trigger_enter",var_01); + while(func_1930(self)) + { + var_02 = 0; + foreach(var_04 in self.touchlist) + { + if(isdefined(var_04.distmoved) && var_04.distmoved > var_02) + { + var_02 = var_04.distmoved; + } + } + + if(var_02 > 6) + { + var_00 playsound("dyn_anml_dog_bark"); + wait randomfloatrange(16 / var_02,16 / var_02 + randomfloat(1)); + continue; + } + + wait 0.05; + } + } +} + +//Function Number: 42 +trigger_door() +{ + var_00 = getent(self.target,"targetname"); + self.var_1910 = var_00; + self.doorangle = getvectorrightangle(vectornormalize(self getorigin() - var_00 getorigin())); + var_00.baseyaw = var_00.angles[1]; + var_01 = 1; + for(;;) + { + self waittill("trigger_enter",var_02); + var_00 thread func_1913(var_01,func_1915(var_02)); + if(func_1930(self)) + { + self waittill("trigger_empty"); + } + + wait 3; + if(func_1930(self)) + { + self waittill("trigger_empty"); + } + + var_00 thread func_1914(var_01); + } +} + +//Function Number: 43 +func_1913(param_00,param_01) +{ + if(param_01) + { + self rotateto((0,self.baseyaw + 90,1),param_00,0.1,0.75); + } + else + { + self rotateto((0,self.baseyaw - 90,1),param_00,0.1,0.75); + } + + self playsound("door_generic_house_open"); + wait param_00 + 0.05; +} + +//Function Number: 44 +func_1914(param_00) +{ + self rotateto((0,self.baseyaw,1),param_00); + self playsound("door_generic_house_close"); + wait param_00 + 0.05; +} + +//Function Number: 45 +func_1915(param_00) +{ + return vectordot(self.doorangle,vectornormalize(param_00.origin - self.var_1910 getorigin())) > 0; +} + +//Function Number: 46 +getvectorrightangle(param_00) +{ + return (param_00[1],0 - param_00[0],param_00[2]); +} + +//Function Number: 47 +use_toggle() +{ + if(self.classname != "trigger_use_touch") + { + return; + } + + var_00 = getentarray(self.target,"targetname"); + self.var_1905 = 1; + foreach(var_02 in var_00) + { + var_02 setlightintensity(1.5 * self.var_1905); + } + + for(;;) + { + self waittill("trigger"); + self.var_1905 = !self.var_1905; + if(self.var_1905) + { + foreach(var_02 in var_00) + { + var_02 setlightintensity(1.5); + } + + self playsound("switch_auto_lights_on"); + continue; + } + + foreach(var_02 in var_00) + { + var_02 setlightintensity(0); + } + + self playsound("switch_auto_lights_off"); + } +} + +//Function Number: 48 +bird_startle() +{ +} + +//Function Number: 49 +func_1918(param_00) +{ + self.copier = get_photo_copier(param_00); + var_01 = getent(self.copier.target,"targetname"); + var_02 = getent(var_01.target,"targetname"); + var_02.intensity = var_02 getlightintensity(); + var_02 setlightintensity(0); + param_00.copy_bar = var_01; + param_00.var_191B = var_01.origin; + param_00.light = var_02; + var_03 = self.copier.angles + (0,90,0); + var_04 = anglestoforward(var_03); + param_00.end_pos = param_00.var_191B + var_04 * 30; +} + +//Function Number: 50 +get_photo_copier(param_00) +{ + if(!isdefined(param_00.target)) + { + var_01 = getentarray("destructible_toy","targetname"); + var_02 = var_01[0]; + foreach(var_04 in var_01) + { + if(isdefined(var_04.destructible_type) && var_04.destructible_type == "toy_copier") + { + if(distance(param_00.origin,var_02.origin) > distance(param_00.origin,var_04.origin)) + { + var_02 = var_04; + } + } + } + } + else + { + var_02 = getent(var_02.target,"targetname"); + var_02 setcandamage(1); + } + + return var_02; +} + +//Function Number: 51 +waittill_copier_copies() +{ + self.copier endon("FX_State_Change0"); + self.copier endon("death"); + self waittill("trigger_enter"); +} + +//Function Number: 52 +photo_copier() +{ + level endon("game_ended"); + func_1918(self); + self.copier endon("FX_State_Change0"); + thread func_1925(); + for(;;) + { + waittill_copier_copies(); + self playsound("mach_copier_run"); + if(isdefined(self.copy_bar)) + { + reset_copier(self); + thread photo_copier_copy_bar_goes(); + thread photo_copier_light_on(); + } + + wait 3; + } +} + +//Function Number: 53 +photo_copier_no_light() +{ + level endon("game_ended"); + self endon("death"); + if(common_scripts\utility::get_template_level() == "hamburg") + { + return; + } + + self.copier = get_photo_copier(self); + self.copier endon("FX_State_Change0"); + for(;;) + { + waittill_copier_copies(); + self playsound("mach_copier_run"); + wait 3; + } +} + +//Function Number: 54 +reset_copier(param_00) +{ + param_00.copy_bar moveto(param_00.var_191B,0.2); + param_00.light setlightintensity(0); +} + +//Function Number: 55 +photo_copier_copy_bar_goes() +{ + self.copier notify("bar_goes"); + self.copier endon("bar_goes"); + self.copier endon("FX_State_Change0"); + self.copier endon("death"); + var_00 = self.copy_bar; + wait 2; + var_00 moveto(self.end_pos,1.6); + wait 1.8; + var_00 moveto(self.var_191B,1.6); + wait 1.6; + var_01 = self.light; + var_02 = 0.2; + var_03 = var_02 / 0.05; + for(var_04 = 0;var_04 < var_03;var_04++) + { + var_05 = var_04 * 0.05; + var_05 = var_05 / var_02; + var_05 = 1 - var_05 * var_01.intensity; + if(var_05 > 0) + { + var_01 setlightintensity(var_05); + } + + wait 0.05; + } +} + +//Function Number: 56 +photo_copier_light_on() +{ + self.copier notify("light_on"); + self.copier endon("light_on"); + self.copier endon("FX_State_Change0"); + self.copier endon("death"); + var_00 = self.light; + var_01 = 0.2; + var_02 = var_01 / 0.05; + for(var_03 = 0;var_03 < var_02;var_03++) + { + var_04 = var_03 * 0.05; + var_04 = var_04 / var_01; + var_00 setlightintensity(var_04 * var_00.intensity); + wait 0.05; + } + + photo_light_flicker(var_00); +} + +//Function Number: 57 +func_1925() +{ + self.copier waittill("FX_State_Change0"); + self.copier endon("death"); + reset_copier(self); +} + +//Function Number: 58 +photo_light_flicker(param_00) +{ + param_00 setlightintensity(1); + wait 0.05; + param_00 setlightintensity(0); + wait 0.1; + param_00 setlightintensity(1); + wait 0.05; + param_00 setlightintensity(0); + wait 0.1; + param_00 setlightintensity(1); +} + +//Function Number: 59 +fan_blade_rotate(param_00) +{ + var_01 = 0; + var_02 = 20000; + var_03 = 1; + if(isdefined(self.speed)) + { + var_03 = self.speed; + } + + if(param_00 == "slow") + { + if(isdefined(self.script_noteworthy) && self.script_noteworthy == "lockedspeed") + { + var_01 = 180; + } + else + { + var_01 = randomfloatrange(100 * var_03,360 * var_03); + } + } + else if(param_00 == "fast") + { + var_01 = randomfloatrange(720 * var_03,1000 * var_03); + } + else if(param_00 == "veryslow") + { + var_01 = randomfloatrange(1 * var_03,2 * var_03); + } + else + { + } + + if(isdefined(self.script_noteworthy) && self.script_noteworthy == "lockedspeed") + { + wait 0; + } + else + { + wait randomfloatrange(0,1); + } + + var_04 = self.angles; + var_05 = anglestoright(self.angles) * 100; + var_05 = vectornormalize(var_05); + for(;;) + { + var_06 = abs(vectordot(var_05,(1,0,0))); + var_07 = abs(vectordot(var_05,(0,1,0))); + var_08 = abs(vectordot(var_05,(0,0,1))); + if(var_06 > 0.9) + { + self rotatevelocity((var_01,0,0),var_02); + } + else if(var_07 > 0.9) + { + self rotatevelocity((var_01,0,0),var_02); + } + else if(var_08 > 0.9) + { + self rotatevelocity((0,var_01,0),var_02); + } + else + { + self rotatevelocity((0,var_01,0),var_02); + } + + wait var_02; + } +} + +//Function Number: 60 +triggertouchthink(param_00,param_01) +{ + level endon("game_ended"); + self.entnum = self getentitynumber(); + for(;;) + { + self waittill("trigger",var_02); + if(!isplayer(var_02) && !isdefined(var_02.var_1929)) + { + continue; + } + + if(!isalive(var_02)) + { + continue; + } + + if(!isdefined(var_02.touchtriggers[self.entnum])) + { + var_02 thread playertouchtriggerthink(self,param_00,param_01); + } + } +} + +//Function Number: 61 +playertouchtriggerthink(param_00,param_01,param_02) +{ + if(!isplayer(self)) + { + self endon("death"); + } + + if(!common_scripts\utility::issp()) + { + var_03 = self.guid; + } + else + { + var_03 = "player" + gettime(); + } + + param_00.touchlist[var_03] = self; + if(isdefined(param_00.movetracker)) + { + self.movetrackers++; + } + + param_00 notify("trigger_enter",self); + self notify("trigger_enter",param_00); + if(isdefined(param_01)) + { + self thread [[ param_01 ]](param_00); + } + + self.touchtriggers[param_00.entnum] = param_00; + while(isalive(self) && self istouching(param_00) && common_scripts\utility::issp() || !level.gameended) + { + wait 0.05; + } + + if(isdefined(self)) + { + self.touchtriggers[param_00.entnum] = undefined; + if(isdefined(param_00.movetracker)) + { + self.movetrackers--; + } + + self notify("trigger_leave",param_00); + if(isdefined(param_02)) + { + self thread [[ param_02 ]](param_00); + } + } + + if(!common_scripts\utility::issp() && level.gameended) + { + return; + } + + param_00.touchlist[var_03] = undefined; + param_00 notify("trigger_leave",self); + if(!func_1930(param_00)) + { + param_00 notify("trigger_empty"); + } +} + +//Function Number: 62 +movementtracker() +{ + if(isdefined(level.disablemovementtracker)) + { + return; + } + + self endon("disconnect"); + if(!isplayer(self)) + { + self endon("death"); + } + + self.movetrackers = 0; + self.distmoved = 0; + for(;;) + { + self waittill("trigger_enter"); + var_00 = self.origin; + while(self.movetrackers) + { + self.distmoved = distance(var_00,self.origin); + var_00 = self.origin; + wait 0.05; + } + + self.distmoved = 0; + } +} + +//Function Number: 63 +func_1930(param_00) +{ + return param_00.touchlist.size; +} + +//Function Number: 64 +func_1931(param_00,param_01) +{ + return isdefined(param_00.touchtriggers[param_01.entnum]); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/common_scripts/_elevator.gsc b/MW3/Xbox/MP/common_scripts/_elevator.gsc new file mode 100644 index 0000000..33d3108 --- /dev/null +++ b/MW3/Xbox/MP/common_scripts/_elevator.gsc @@ -0,0 +1,1107 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: common_scripts\_elevator.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 55 + * Decompile Time: 878 ms + * Timestamp: 10/27/2023 2:29:08 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + if(getdvar("scr_elevator_disabled") == "1") + { + return; + } + + var_00 = getentarray("elevator_group","targetname"); + if(!isdefined(var_00)) + { + return; + } + + if(!var_00.size) + { + return; + } + + precachestring(&"ELEVATOR_CALL_HINT"); + precachestring(&"ELEVATOR_USE_HINT"); + precachestring(&"ELEVATOR_FLOOR_SELECT_HINT"); + precachemenu("elevator_floor_selector"); + thread elevator_update_global_dvars(); + level.elevators = []; + level.elevator_callbutton_link_v = elevator_get_dvar_int("scr_elevator_callbutton_link_v","96"); + level.var_1858 = elevator_get_dvar_int("scr_elevator_callbutton_link_h","256"); + build_elevators(); + position_elevators(); + elevator_call(); + if(!level.elevators.size) + { + return; + } + + foreach(var_02 in level.elevators) + { + var_02 thread elevator_think(); + var_02 thread func_1875(); + } + + thread elevator_debug(); +} + +//Function Number: 2 +elevator_update_global_dvars() +{ + for(;;) + { + level.elevator_accel = elevator_get_dvar("scr_elevator_accel","0.2"); + level.var_185B = elevator_get_dvar("scr_elevator_decel","0.2"); + level.elevator_music = elevator_get_dvar_int("scr_elevator_music","1"); + level.var_185D = elevator_get_dvar_int("scr_elevator_speed","96"); + level.var_185E = elevator_get_dvar_int("scr_elevator_innerdoorspeed","14"); + level.var_185F = elevator_get_dvar_int("scr_elevator_outterdoorspeed","16"); + level.var_1860 = elevator_get_dvar_int("scr_elevator_return","0"); + level.elevator_waittime = elevator_get_dvar_int("scr_elevator_waittime","6"); + level.elevator_aggressive_call = elevator_get_dvar_int("scr_elevator_aggressive_call","0"); + level.elevator_debug = elevator_get_dvar_int("debug_elevator","0"); + if(common_scripts\utility::issp()) + { + level.elevator_motion_detection = elevator_get_dvar_int("scr_elevator_motion_detection","0"); + } + else + { + level.elevator_motion_detection = elevator_get_dvar_int("scr_elevator_motion_detection","1"); + } + + wait 1; + } +} + +//Function Number: 3 +elevator_think() +{ + elevator_fsm("[A]"); +} + +//Function Number: 4 +elevator_call() +{ + foreach(var_01 in level.var_1867) + { + var_01 thread monitor_callbutton(); + } +} + +//Function Number: 5 +floor_override(param_00) +{ + self endon("elevator_moving"); + self.floor_override = 0; + self.overrider = undefined; + for(;;) + { + param_00 waittill("trigger",var_01); + self.floor_override = 1; + self.overrider = var_01; + break; + } + + self notify("floor_override"); +} + +//Function Number: 6 +elevator_fsm(param_00) +{ + self.var_186B = param_00; + var_01 = get_housing_door_trigger(); + var_02 = get_housing_inside_trigger(); + for(;;) + { + if(self.var_186B == "[A]") + { + if(level.var_1860 && get_curfloor() != func_189A()) + { + self.moveto_floor = func_189A(); + thread floor_override(var_02); + waittill_or_timeout("floor_override",level.elevator_waittime); + if(self.floor_override && isdefined(self.overrider) && isplayer(self.overrider)) + { + func_1872(self.overrider); + } + + self.var_186B = "[B]"; + continue; + } + + for(;;) + { + if(self.moveto_floor == get_curfloor()) + { + var_03 = var_02 func_1882("trigger"); + } + else + { + var_03 = "elevator_called"; + } + + if(isstring(var_03) && var_03 == "elevator_called" && self.moveto_floor != get_curfloor()) + { + self.var_186B = "[B]"; + break; + } + + if(isdefined(var_03) && isplayer(var_03) && isalive(var_03)) + { + var_04 = var_03 istouching(var_02); + var_05 = isdefined(var_02.motion_trigger) && var_03 istouching(var_02.motion_trigger); + var_06 = var_04 || var_05; + if(var_06) + { + var_07 = var_03; + func_1872(var_07); + if(self.moveto_floor == get_curfloor()) + { + continue; + } + + self.var_186B = "[B]"; + break; + } + } + } + } + + if(self.var_186B == "[B]") + { + thread elevator_interrupt(var_01); + var_08 = get_curfloor(); + thread close_inner_doors(); + thread func_187B(var_08); + common_scripts\utility::waittill_any("closed_inner_doors","interrupted"); + if(self.elevator_interrupted) + { + self.var_186B = "[C]"; + continue; + } + + self.var_186B = "[D]"; + continue; + } + + if(self.var_186B == "[C]") + { + var_08 = get_curfloor(); + thread func_187A(); + thread open_outer_doors(var_08); + self waittill("opened_floor_" + var_08 + "_outer_doors"); + if(self.elevator_interrupted) + { + self.var_186B = "[B]"; + continue; + } + + self.var_186B = "[A]"; + continue; + } + + if(self.var_186B == "[D]") + { + if(self.moveto_floor != get_curfloor()) + { + thread elevator_move(self.moveto_floor); + self waittill("elevator_moved"); + } + + self.var_186B = "[C]"; + continue; + } + } +} + +//Function Number: 7 +monitor_callbutton() +{ + for(;;) + { + var_00 = func_1882("trigger"); + var_01 = undefined; + var_02 = []; + foreach(var_05, var_04 in self.e) + { + var_01 = var_05; + var_02 = var_04; + } + + var_06 = 0; + foreach(var_08 in var_02) + { + var_09 = var_08 elevator_floor_update(); + if(!level.elevator_aggressive_call && !var_09) + { + if(var_08 get_curfloor() == var_01) + { + var_06 = 1; + var_02 = []; + break; + } + } + } + + foreach(var_08 in var_02) + { + if(var_08.var_186B == "[A]") + { + var_08 func_1871(var_01); + var_06 = 1; + if(!level.elevator_aggressive_call) + { + break; + } + } + } + + if(var_06) + { + self playsound("elev_bell_ding"); + } + } +} + +//Function Number: 8 +func_1871(param_00) +{ + self.moveto_floor = param_00; + var_01 = get_housing_inside_trigger(); + var_01 notify("trigger","elevator_called"); + if(level.elevator_motion_detection) + { + var_01.motion_trigger notify("trigger","elevator_called"); + } +} + +//Function Number: 9 +func_1872(param_00) +{ + var_01 = get_outer_doorsets(); + if(var_01.size == 2) + { + var_02 = get_curfloor(); + self.moveto_floor = !var_02; + return; + } + + var_01 openpopupmenu("elevator_floor_selector"); + var_01 setclientdvar("player_current_floor",get_curfloor()); + for(;;) + { + var_01 waittill("menuresponse",var_03,var_04); + if(var_03 == "elevator_floor_selector") + { + if(var_04 != "none") + { + self.moveto_floor = int(var_04); + } + + break; + } + } +} + +//Function Number: 10 +elevator_interrupt(param_00) +{ + self notify("interrupt_watch"); + level notify("elevator_interior_button_pressed"); + self endon("interrupt_watch"); + self endon("elevator_moving"); + self.elevator_interrupted = 0; + wait 0.5; + param_00 waittill("trigger",var_01); + self notify("interrupted"); + self.elevator_interrupted = 1; +} + +//Function Number: 11 +elevator_floor_update() +{ + var_00 = get_housing_mainframe(); + var_01 = var_00.origin; + var_02 = 1; + foreach(var_06, var_04 in get_outer_doorsets()) + { + var_05 = self.e["floor" + var_06 + "_pos"]; + if(var_01 == var_05) + { + self.e["current_floor"] = var_06; + var_02 = 0; + } + } + + return var_02; +} + +//Function Number: 12 +func_1875() +{ + var_00 = get_housing_musak_model(); + if(level.elevator_music && isdefined(var_00)) + { + var_00 playloopsound("elev_musak_loop"); + } + + thread listen_for("closing_inner_doors"); + thread listen_for("opening_inner_doors"); + thread listen_for("closed_inner_doors"); + thread listen_for("opened_inner_doors"); + foreach(var_03, var_02 in get_outer_doorsets()) + { + thread listen_for("closing_floor_" + var_03 + "_outer_doors"); + thread listen_for("opening_floor_" + var_03 + "_outer_doors"); + thread listen_for("closed_floor_" + var_03 + "_outer_doors"); + thread listen_for("opened_floor_" + var_03 + "_outer_doors"); + } + + thread listen_for("interrupted"); + thread listen_for("elevator_moving"); + thread listen_for("elevator_moved"); +} + +//Function Number: 13 +listen_for(param_00) +{ + for(;;) + { + self waittill(param_00); + var_01 = get_housing_mainframe(); + if(issubstr(param_00,"closing_")) + { + var_01 playsound("elev_door_close"); + } + + if(issubstr(param_00,"opening_")) + { + var_01 playsound("elev_door_open"); + } + + if(param_00 == "elevator_moving") + { + var_01 playsound("elev_run_start"); + var_01 playloopsound("elev_run_loop"); + } + + if(param_00 == "interrupted") + { + var_01 playsound("elev_door_interupt"); + } + + if(param_00 == "elevator_moved") + { + var_01 stoploopsound("elev_run_loop"); + var_01 playsound("elev_run_end"); + var_01 playsound("elev_bell_ding"); + } + } +} + +//Function Number: 14 +position_elevators() +{ + foreach(var_01 in level.elevators) + { + var_01.moveto_floor = var_01 get_curfloor(); + foreach(var_04, var_03 in var_01 get_outer_doorsets()) + { + if(var_01 get_curfloor() != var_04) + { + var_01 thread func_187B(var_04); + } + } + } +} + +//Function Number: 15 +elevator_move(param_00) +{ + self notify("elevator_moving"); + self endon("elevator_moving"); + var_01 = get_housing_mainframe(); + var_02 = self.e["floor" + param_00 + "_pos"] - var_01.origin; + var_03 = level.var_185D; + var_04 = abs(distance(self.e["floor" + param_00 + "_pos"],var_01.origin)); + var_05 = var_04 / var_03; + var_01 moveto(var_01.origin + var_02,var_05,var_05 * level.elevator_accel,var_05 * level.var_185B); + foreach(var_07 in get_housing_children()) + { + var_08 = var_07.origin + var_02; + if(!issubstr(var_07.classname,"trigger_")) + { + var_07 moveto(var_08,var_05,var_05 * level.elevator_accel,var_05 * level.var_185B); + continue; + } + + var_07.origin = var_08; + } + + func_189B(var_01,self.e["floor" + param_00 + "_pos"]); + self notify("elevator_moved"); +} + +//Function Number: 16 +close_inner_doors() +{ + self notify("closing_inner_doors"); + self endon("closing_inner_doors"); + self endon("opening_inner_doors"); + var_00 = func_1895(); + var_01 = get_housing_rightdoor(); + var_02 = get_housing_mainframe(); + var_03 = func_1894(); + var_04 = (var_03[0],var_03[1],var_02.origin[2]); + var_05 = level.var_185E; + var_06 = abs(distance(var_00.origin,var_04)); + var_07 = var_06 / var_05; + var_00 moveto(var_04,var_07,var_07 * 0.1,var_07 * 0.25); + var_01 moveto(var_04,var_07,var_07 * 0.1,var_07 * 0.25); + func_189B(var_00,var_04,var_01,var_04); + self notify("closed_inner_doors"); +} + +//Function Number: 17 +func_187A() +{ + self notify("opening_inner_doors"); + self endon("opening_inner_doors"); + var_00 = func_1895(); + var_01 = get_housing_rightdoor(); + var_02 = get_housing_mainframe(); + var_03 = get_housing_leftdoor_opened_pos(); + var_04 = get_housing_rightdoor_opened_pos(); + var_05 = (var_03[0],var_03[1],var_02.origin[2]); + var_06 = (var_04[0],var_04[1],var_02.origin[2]); + var_07 = level.var_185E; + var_08 = abs(distance(var_05,var_06) * 0.5); + var_09 = var_08 / var_07 * 0.5; + var_00 moveto(var_05,var_09,var_09 * 0.1,var_09 * 0.25); + var_01 moveto(var_06,var_09,var_09 * 0.1,var_09 * 0.25); + func_189B(var_00,var_05,var_01,var_06); + self notify("opened_inner_doors"); +} + +//Function Number: 18 +func_187B(param_00) +{ + self notify("closing_floor_" + param_00 + "_outer_doors"); + self endon("closing_floor_" + param_00 + "_outer_doors"); + self endon("opening_floor_" + param_00 + "_outer_doors"); + var_01 = get_outer_leftdoor(param_00); + var_02 = get_outer_rightdoor(param_00); + var_03 = func_188B(param_00); + var_04 = get_outer_closedpos(param_00); + var_05 = level.var_185F; + var_06 = abs(distance(var_03,var_04)); + var_07 = var_06 / var_05; + var_01 moveto(var_04,var_07,var_07 * 0.1,var_07 * 0.25); + var_02 moveto(var_04,var_07,var_07 * 0.1,var_07 * 0.25); + func_189B(var_01,var_04,var_02,var_04); + self notify("closed_floor_" + param_00 + "_outer_doors"); +} + +//Function Number: 19 +open_outer_doors(param_00) +{ + level notify("elevator_doors_opening"); + self notify("opening_floor_" + param_00 + "_outer_doors"); + self endon("opening_floor_" + param_00 + "_outer_doors"); + var_01 = get_outer_leftdoor(param_00); + var_02 = get_outer_rightdoor(param_00); + var_03 = func_188B(param_00); + var_04 = get_outer_rightdoor_openedpos(param_00); + var_05 = get_outer_closedpos(param_00); + var_06 = level.var_185F; + var_07 = abs(distance(var_03,var_05)); + var_08 = var_07 / var_06 * 0.5; + var_01 moveto(var_03,var_08,var_08 * 0.1,var_08 * 0.25); + var_02 moveto(var_04,var_08,var_08 * 0.1,var_08 * 0.25); + func_189B(var_01,var_03,var_02,var_04); + self notify("opened_floor_" + param_00 + "_outer_doors"); +} + +//Function Number: 20 +build_elevators() +{ + var_00 = getentarray("elevator_group","targetname"); + var_01 = getentarray("elevator_housing","targetname"); + var_02 = getentarray("elevator_doorset","targetname"); + foreach(var_04 in var_00) + { + var_05 = getent(var_04.target,"targetname"); + var_06 = []; + var_06[0] = min(var_04.origin[0],var_05.origin[0]); + var_06[1] = max(var_04.origin[0],var_05.origin[0]); + var_06[2] = min(var_04.origin[1],var_05.origin[1]); + var_06[3] = max(var_04.origin[1],var_05.origin[1]); + var_07 = spawnstruct(); + var_07.e["id"] = level.elevators.size; + var_07.e["housing"] = []; + var_07.e["housing"]["mainframe"] = []; + foreach(var_09 in var_01) + { + if(var_09 isinbound(var_06)) + { + var_07.e["housing"]["mainframe"][var_07.e["housing"]["mainframe"].size] = var_09; + if(var_09.classname == "script_model") + { + continue; + } + + if(var_09.code_classname == "light") + { + continue; + } + + var_0A = getent(var_09.target,"targetname"); + var_07.e["housing"]["left_door"] = var_0A; + var_07.e["housing"]["left_door_opened_pos"] = var_0A.origin; + var_0B = getent(var_0A.target,"targetname"); + var_07.e["housing"]["right_door"] = var_0B; + var_07.e["housing"]["right_door_opened_pos"] = var_0B.origin; + var_0C = var_0A.origin - var_0B.origin * (0.5,0.5,0.5) + var_0B.origin; + var_07.e["housing"]["door_closed_pos"] = var_0C; + var_0D = getent(var_0B.target,"targetname"); + var_07.e["housing"]["door_trigger"] = var_0D; + var_0E = getent(var_0D.target,"targetname"); + var_07.e["housing"]["inside_trigger"] = var_0E; + var_0E make_discrete_trigger(); + var_0E.motion_trigger = spawn("trigger_radius",var_09.origin,0,64,128); + } + } + + var_07.e["outer_doorset"] = []; + foreach(var_11 in var_02) + { + if(var_11 isinbound(var_06)) + { + var_12 = isdefined(var_11.script_noteworthy) && var_11.script_noteworthy == "closed_for_lighting"; + var_13 = var_07.e["outer_doorset"].size; + var_07.e["outer_doorset"][var_13] = []; + var_07.e["outer_doorset"][var_13]["door_closed_pos"] = var_11.origin; + var_14 = getent(var_11.target,"targetname"); + var_07.e["outer_doorset"][var_13]["left_door"] = var_14; + var_07.e["outer_doorset"][var_13]["left_door_opened_pos"] = var_14.origin; + var_15 = getent(var_14.target,"targetname"); + var_07.e["outer_doorset"][var_13]["right_door"] = var_15; + var_07.e["outer_doorset"][var_13]["right_door_opened_pos"] = var_15.origin; + if(var_12) + { + var_16 = var_11.origin - var_14.origin; + var_11.origin = var_14.origin; + var_14.origin = var_14.origin + var_16; + var_15.origin = var_15.origin - var_16; + var_07.e["outer_doorset"][var_13]["door_closed_pos"] = var_11.origin; + var_07.e["outer_doorset"][var_13]["left_door_opened_pos"] = var_14.origin; + var_07.e["outer_doorset"][var_13]["right_door_opened_pos"] = var_15.origin; + } + } + } + + for(var_18 = 0;var_18 < var_07.e["outer_doorset"].size - 1;var_18++) + { + for(var_19 = 0;var_19 < var_07.e["outer_doorset"].size - 1 - var_18;var_19++) + { + if(var_07.e["outer_doorset"][var_19 + 1]["door_closed_pos"][2] < var_07.e["outer_doorset"][var_19]["door_closed_pos"][2]) + { + var_1A = var_07.e["outer_doorset"][var_19]["left_door"]; + var_1B = var_07.e["outer_doorset"][var_19]["left_door_opened_pos"]; + var_1C = var_07.e["outer_doorset"][var_19]["right_door"]; + var_1D = var_07.e["outer_doorset"][var_19]["right_door_opened_pos"]; + var_1E = var_07.e["outer_doorset"][var_19]["door_closed_pos"]; + var_07.e["outer_doorset"][var_19]["left_door"] = var_07.e["outer_doorset"][var_19 + 1]["left_door"]; + var_07.e["outer_doorset"][var_19]["left_door_opened_pos"] = var_07.e["outer_doorset"][var_19 + 1]["left_door_opened_pos"]; + var_07.e["outer_doorset"][var_19]["right_door"] = var_07.e["outer_doorset"][var_19 + 1]["right_door"]; + var_07.e["outer_doorset"][var_19]["right_door_opened_pos"] = var_07.e["outer_doorset"][var_19 + 1]["right_door_opened_pos"]; + var_07.e["outer_doorset"][var_19]["door_closed_pos"] = var_07.e["outer_doorset"][var_19 + 1]["door_closed_pos"]; + var_07.e["outer_doorset"][var_19 + 1]["left_door"] = var_1A; + var_07.e["outer_doorset"][var_19 + 1]["left_door_opened_pos"] = var_1B; + var_07.e["outer_doorset"][var_19 + 1]["right_door"] = var_1C; + var_07.e["outer_doorset"][var_19 + 1]["right_door_opened_pos"] = var_1D; + var_07.e["outer_doorset"][var_19 + 1]["door_closed_pos"] = var_1E; + } + } + } + + var_1F = []; + foreach(var_18, var_21 in var_07.e["outer_doorset"]) + { + var_22 = var_07 get_housing_mainframe(); + var_1F = (var_22.origin[0],var_22.origin[1],var_21["door_closed_pos"][2]); + var_07.e["floor" + var_18 + "_pos"] = var_1F; + if(var_22.origin == var_1F) + { + var_07.e["initial_floor"] = var_18; + var_07.e["current_floor"] = var_18; + } + } + + level.elevators[level.elevators.size] = var_07; + var_04 delete(); + var_05 delete(); + } + + foreach(var_11 in var_02) + { + var_11 delete(); + } + + build_call_buttons(); + if(!level.elevator_motion_detection) + { + func_187F(); + } + + foreach(var_27 in level.elevators) + { + var_28 = var_27 get_housing_primarylight(); + if(isdefined(var_28) && var_28.size) + { + foreach(var_2A in var_28) + { + var_2A setlightintensity(0.75); + } + } + } +} + +//Function Number: 21 +build_call_buttons() +{ + level.var_1867 = getentarray("elevator_call","targetname"); + foreach(var_01 in level.var_1867) + { + var_01.e = []; + var_02 = (0,0,var_01.origin[2]); + var_03 = (var_01.origin[0],var_01.origin[1],0); + var_04 = []; + foreach(var_06 in level.elevators) + { + foreach(var_0B, var_08 in var_06 get_outer_doorsets()) + { + var_09 = (0,0,var_06.e["floor" + var_0B + "_pos"][2]); + var_0A = (var_06.e["floor" + var_0B + "_pos"][0],var_06.e["floor" + var_0B + "_pos"][1],0); + if(abs(distance(var_02,var_09)) <= level.elevator_callbutton_link_v) + { + if(abs(distance(var_03,var_0A)) <= level.var_1858) + { + var_04[var_04.size] = var_06; + var_01.e[var_0B] = var_04; + } + } + } + } + + var_01 make_discrete_trigger(); + var_01.motion_trigger = spawn("trigger_radius",var_01.origin + (0,0,-32),0,32,64); + } +} + +//Function Number: 22 +func_187F() +{ + foreach(var_01 in level.elevators) + { + var_02 = var_01 get_housing_inside_trigger(); + var_03 = var_01 get_outer_doorsets(); + var_04 = var_03.size; + var_02 setcursorhint("HINT_NOICON"); + if(var_04 > 2) + { + var_02 sethintstring(&"ELEVATOR_FLOOR_SELECT_HINT"); + continue; + } + + var_02 sethintstring(&"ELEVATOR_USE_HINT"); + } + + foreach(var_07 in level.var_1867) + { + var_07 setcursorhint("HINT_NOICON"); + var_07 sethintstring(&"ELEVATOR_CALL_HINT"); + } +} + +//Function Number: 23 +make_discrete_trigger() +{ + self.enabled = 1; + func_1884(); +} + +//Function Number: 24 +func_1882(param_00) +{ + enable_trigger(); + if(level.elevator_motion_detection) + { + self.motion_trigger waittill(param_00,var_01); + } + else + { + self waittill(var_01,var_01); + } + + func_1884(); + return var_01; +} + +//Function Number: 25 +enable_trigger() +{ + if(!self.enabled) + { + self.enabled = 1; + self.origin = self.origin + (0,0,10000); + if(isdefined(self.motion_trigger)) + { + self.motion_trigger.origin = self.motion_trigger.origin + (0,0,10000); + } + } +} + +//Function Number: 26 +func_1884() +{ + self notify("disable_trigger"); + if(self.enabled) + { + thread disable_trigger_helper(); + } +} + +//Function Number: 27 +disable_trigger_helper() +{ + self endon("disable_trigger"); + self.enabled = 0; + wait 1.5; + self.origin = self.origin + (0,0,-10000); + if(isdefined(self.motion_trigger)) + { + self.motion_trigger.origin = self.motion_trigger.origin + (0,0,-10000); + } +} + +//Function Number: 28 +func_1886(param_00) +{ + return self.e["outer_doorset"][param_00]; +} + +//Function Number: 29 +get_outer_doorsets() +{ + return self.e["outer_doorset"]; +} + +//Function Number: 30 +get_outer_closedpos(param_00) +{ + return self.e["outer_doorset"][param_00]["door_closed_pos"]; +} + +//Function Number: 31 +get_outer_leftdoor(param_00) +{ + return self.e["outer_doorset"][param_00]["left_door"]; +} + +//Function Number: 32 +get_outer_rightdoor(param_00) +{ + return self.e["outer_doorset"][param_00]["right_door"]; +} + +//Function Number: 33 +func_188B(param_00) +{ + return self.e["outer_doorset"][param_00]["left_door_opened_pos"]; +} + +//Function Number: 34 +get_outer_rightdoor_openedpos(param_00) +{ + return self.e["outer_doorset"][param_00]["right_door_opened_pos"]; +} + +//Function Number: 35 +get_housing_children() +{ + var_00 = []; + var_01 = get_housing_door_trigger(); + var_02 = get_housing_inside_trigger(); + var_03 = var_02.motion_trigger; + var_04 = func_1895(); + var_05 = get_housing_rightdoor(); + var_00[var_00.size] = var_01; + var_00[var_00.size] = var_02; + var_00[var_00.size] = var_04; + var_00[var_00.size] = var_05; + if(isdefined(var_03)) + { + var_00[var_00.size] = var_03; + } + + var_06 = func_188F(); + foreach(var_08 in var_06) + { + var_00[var_00.size] = var_08; + } + + var_0A = get_housing_primarylight(); + foreach(var_0C in var_0A) + { + var_00[var_00.size] = var_0C; + } + + return var_00; +} + +//Function Number: 36 +get_housing_mainframe() +{ + var_00 = self.e["housing"]["mainframe"]; + var_01 = undefined; + foreach(var_03 in var_00) + { + if(var_03.classname != "script_model" && var_03.code_classname != "light") + { + var_01 = var_03; + } + } + + return var_01; +} + +//Function Number: 37 +func_188F() +{ + var_00 = self.e["housing"]["mainframe"]; + var_01 = []; + foreach(var_03 in var_00) + { + if(var_03.classname == "script_model") + { + var_01[var_01.size] = var_03; + } + } + + return var_01; +} + +//Function Number: 38 +get_housing_primarylight() +{ + var_00 = self.e["housing"]["mainframe"]; + var_01 = []; + foreach(var_03 in var_00) + { + if(var_03.code_classname == "light") + { + var_01[var_01.size] = var_03; + } + } + + return var_01; +} + +//Function Number: 39 +get_housing_musak_model() +{ + var_00 = func_188F(); + var_01 = undefined; + foreach(var_03 in var_00) + { + if(isdefined(var_03.script_noteworthy) && var_03.script_noteworthy == "play_musak") + { + var_01 = var_03; + } + } + + return var_01; +} + +//Function Number: 40 +get_housing_door_trigger() +{ + return self.e["housing"]["door_trigger"]; +} + +//Function Number: 41 +get_housing_inside_trigger() +{ + return self.e["housing"]["inside_trigger"]; +} + +//Function Number: 42 +func_1894() +{ + return self.e["housing"]["door_closed_pos"]; +} + +//Function Number: 43 +func_1895() +{ + return self.e["housing"]["left_door"]; +} + +//Function Number: 44 +get_housing_rightdoor() +{ + return self.e["housing"]["right_door"]; +} + +//Function Number: 45 +get_housing_leftdoor_opened_pos() +{ + return self.e["housing"]["left_door_opened_pos"]; +} + +//Function Number: 46 +get_housing_rightdoor_opened_pos() +{ + return self.e["housing"]["right_door_opened_pos"]; +} + +//Function Number: 47 +get_curfloor() +{ + var_00 = elevator_floor_update(); + return self.e["current_floor"]; +} + +//Function Number: 48 +func_189A() +{ + return self.e["initial_floor"]; +} + +//Function Number: 49 +func_189B(param_00,param_01,param_02,param_03) +{ + if(!isdefined(param_02) && !isdefined(param_03)) + { + param_02 = param_00; + param_03 = param_01; + } + + for(;;) + { + var_04 = param_00.origin; + var_05 = param_02.origin; + if(var_04 == param_01 && var_05 == param_03) + { + break; + } + + wait 0.05; + } +} + +//Function Number: 50 +isinbound(param_00) +{ + if(level.script == "plaza" || level.script == "highrise_test") + { + return func_189D(param_00); + } + + var_01 = self.origin[0]; + var_02 = self.origin[1]; + var_03 = param_00[0]; + var_04 = param_00[1]; + var_05 = param_00[2]; + var_06 = param_00[3]; + return var_01 >= var_03 && var_01 <= var_04 && var_02 >= var_05 && var_02 <= var_06; +} + +//Function Number: 51 +func_189D(param_00) +{ + var_01 = self.origin[0]; + var_02 = self.origin[1]; + var_03 = param_00[0]; + var_04 = param_00[1]; + var_05 = param_00[2]; + var_06 = param_00[3]; + var_07 = var_03 + var_04 / 2; + var_08 = var_05 + var_06 / 2; + var_09 = abs(distance((var_03,var_05,0),(var_07,var_08,0))); + return abs(distance((var_01,var_02,0),(var_07,var_08,0))) < var_09; +} + +//Function Number: 52 +waittill_or_timeout(param_00,param_01) +{ + self endon(param_00); + wait param_01; +} + +//Function Number: 53 +elevator_get_dvar_int(param_00,param_01) +{ + return int(elevator_get_dvar(param_00,param_01)); +} + +//Function Number: 54 +elevator_get_dvar(param_00,param_01) +{ + if(getdvar(param_00) != "") + { + return getdvarfloat(param_00); + } + + setdvar(param_00,param_01); + return param_01; +} + +//Function Number: 55 +elevator_debug() +{ + if(!level.elevator_debug) + { + return; + } + + for(;;) + { + if(level.elevator_debug != 2) + { + continue; + } + + foreach(var_01 in level.elevators) + { + var_02 = var_01 get_housing_mainframe(); + var_03 = var_01 get_housing_musak_model(); + foreach(var_05 in var_01.e["outer_doorset"]) + { + } + } + + foreach(var_09 in level.var_1867) + { + foreach(var_05 in var_09.e) + { + var_0B = 0; + foreach(var_0D in var_05) + { + var_0B++; + var_0E = var_09.origin + (0,0,var_0B * -4); + } + } + } + + wait 0.05; + } +} \ No newline at end of file diff --git a/MW3/Xbox/MP/common_scripts/_fx.gsc b/MW3/Xbox/MP/common_scripts/_fx.gsc new file mode 100644 index 0000000..7377d16 --- /dev/null +++ b/MW3/Xbox/MP/common_scripts/_fx.gsc @@ -0,0 +1,595 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: common_scripts\_fx.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 28 + * Decompile Time: 463 ms + * Timestamp: 10/27/2023 2:29:21 AM +*******************************************************************/ + +//Function Number: 1 +initfx() +{ + if(!isdefined(level.func)) + { + level.func = []; + } + + if(!isdefined(level.func["create_triggerfx"])) + { + level.func["create_triggerfx"] = ::create_triggerfx; + } + + common_scripts\utility::create_lock("createfx_looper",20); + level.exploderfunction = ::common_scripts\utility::exploder_before_load; + waittillframeend; + waittillframeend; + level.exploderfunction = ::common_scripts\utility::exploder_after_load; + level.server_culled_sounds = 0; + if(getdvarint("serverCulledSounds") == 1) + { + level.server_culled_sounds = 1; + } + + if(level.createfx_enabled) + { + level.server_culled_sounds = 0; + } + + if(level.createfx_enabled) + { + level waittill("createfx_common_done"); + } + + if(isdefined(level.var_7FAE)) + { + wait level.var_7FAE; + } + + for(var_00 = 0;var_00 < level.createfxent.size;var_00++) + { + var_01 = level.createfxent[var_00]; + var_01 common_scripts\_createfx::set_forward_and_up_vectors(); + if(var_01.v["type"] == "loopfx") + { + var_01 thread loopfxthread(); + } + + if(var_01.v["type"] == "oneshotfx") + { + var_01 thread oneshotfxthread(); + } + + if(var_01.v["type"] == "soundfx") + { + var_01 thread create_loopsound(); + } + + if(var_01.v["type"] == "soundfx_interval") + { + var_01 thread create_interval_sound(); + } + } +} + +//Function Number: 2 +print_org(param_00,param_01,param_02,param_03) +{ + if(getdvar("debug") == "1") + { + } +} + +//Function Number: 3 +oneshotfx(param_00,param_01,param_02,param_03) +{ +} + +//Function Number: 4 +exploderfx(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,param_0D,param_0E,param_0F,param_10,param_11) +{ + if(1) + { + var_12 = common_scripts\utility::createexploder(param_01); + var_12.v["origin"] = param_02; + var_12.v["angles"] = (0,0,0); + if(isdefined(param_04)) + { + var_12.v["angles"] = vectortoangles(param_04 - param_02); + } + + var_12.v["delay"] = param_03; + var_12.v["exploder"] = param_00; + if(isdefined(level.createfxexploders)) + { + var_13 = level.createfxexploders[var_12.v["exploder"]]; + if(!isdefined(var_13)) + { + var_13 = []; + } + + level.createfxexploders[var_13.v["exploder"]] = var_41; + } + + return; + } + + var_14 = spawn("script_origin",(0,0,0)); + var_14.origin = param_04; + var_14.angles = vectortoangles(param_06 - param_04); + var_14.script_exploder = param_02; + var_14.script_fxid = param_03; + var_14.script_delay = param_05; + var_14.script_firefx = param_07; + var_14.script_firefxdelay = param_08; + var_14.script_firefxsound = param_09; + var_14.script_sound = param_0A; + var_14.script_earthquake = param_0B; + var_14.script_damage = param_0C; + var_14.script_radius = param_11; + var_14.script_soundalias = param_0D; + var_14.script_firefxtimeout = var_12; + var_14.script_repeat = param_0E; + var_14.script_delay_min = param_0F; + var_14.script_delay_max = param_10; + var_14.script_exploder_group = var_13; + var_15 = anglestoforward(var_14.angles); + var_15 = var_15 * 150; + var_14.targetpos = param_04 + var_15; + if(!isdefined(level._script_exploders)) + { + level._script_exploders = []; + } + + level._script_exploders[level._script_exploders.size] = var_14; + common_scripts\_createfx::createfx_showorigin(param_03,param_04,param_05,param_06,"exploderfx",var_14,undefined,param_07,param_08,param_09,param_0A,param_0B,param_0C,param_0D,param_0E,param_0F,param_10,param_11,var_12); +} + +//Function Number: 5 +loopfx(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + var_07 = common_scripts\utility::createloopeffect(param_00); + var_07.v["origin"] = param_01; + var_07.v["angles"] = (0,0,0); + if(isdefined(param_03)) + { + var_07.v["angles"] = vectortoangles(param_03 - param_01); + } + + var_07.v["delay"] = param_02; +} + +//Function Number: 6 +create_looper() +{ + self.looper = playloopedfx(level._effect[self.v["fxid"]],self.v["delay"],self.v["origin"],0,self.v["forward"],self.v["up"]); + create_loopsound(); +} + +//Function Number: 7 +create_loopsound() +{ + self notify("stop_loop"); + if(isdefined(self.v["soundalias"]) && self.v["soundalias"] != "nil") + { + if(isdefined(self.v["stopable"]) && self.v["stopable"]) + { + if(isdefined(self.looper)) + { + self.looper thread common_scripts\utility::loop_fx_sound(self.v["soundalias"],self.v["origin"],0,"death"); + return; + } + + thread common_scripts\utility::loop_fx_sound(self.v["soundalias"],self.v["origin"],0,"stop_loop"); + return; + } + + if(isdefined(self.looper)) + { + self.looper thread common_scripts\utility::loop_fx_sound(self.v["soundalias"],self.v["origin"],0); + return; + } + + var_00 = 0; + if(level.server_culled_sounds == 1 && isdefined(self.v["server_culled"])) + { + var_00 = self.v["server_culled"]; + } + + thread common_scripts\utility::loop_fx_sound(self.v["soundalias"],self.v["origin"],var_00); + return; + } +} + +//Function Number: 8 +create_interval_sound() +{ + self notify("stop_loop"); + if(!isdefined(self.v["soundalias"])) + { + return; + } + + if(self.v["soundalias"] == "nil") + { + return; + } + + var_00 = undefined; + var_01 = self; + if((isdefined(self.v["stopable"]) && self.v["stopable"]) || level.createfx_enabled) + { + if(isdefined(self.looper)) + { + var_01 = self.looper; + var_00 = "death"; + } + else + { + var_00 = "stop_loop"; + } + } + + var_01 thread common_scripts\utility::loop_fx_sound_interval(self.v["soundalias"],self.v["origin"],var_00,undefined,self.v["delay_min"],self.v["delay_max"]); +} + +//Function Number: 9 +loopfxthread() +{ + common_scripts\utility::waitframe(); + if(isdefined(self.fxstart)) + { + level waittill("start fx" + self.fxstart); + } + + for(;;) + { + create_looper(); + if(isdefined(self.timeout)) + { + thread loopfxstop(self.timeout); + } + + if(isdefined(self.fxstop)) + { + level waittill("stop fx" + self.fxstop); + } + else + { + return; + } + + if(isdefined(self.looper)) + { + self.looper delete(); + } + + if(isdefined(self.fxstart)) + { + level waittill("start fx" + self.fxstart); + continue; + } + } +} + +//Function Number: 10 +loopfxchangeid(param_00) +{ + self endon("death"); + param_00 waittill("effect id changed",var_01); +} + +//Function Number: 11 +loopfxchangeorg(param_00) +{ + self endon("death"); + for(;;) + { + param_00 waittill("effect org changed",var_01); + self.origin = var_01; + } +} + +//Function Number: 12 +loopfxchangedelay(param_00) +{ + self endon("death"); + param_00 waittill("effect delay changed",var_01); +} + +//Function Number: 13 +loopfxdeletion(param_00) +{ + self endon("death"); + param_00 waittill("effect deleted"); + self delete(); +} + +//Function Number: 14 +loopfxstop(param_00) +{ + self endon("death"); + wait param_00; + self.looper delete(); +} + +//Function Number: 15 +loopsound(param_00,param_01,param_02) +{ + level thread loopsoundthread(param_00,param_01,param_02); +} + +//Function Number: 16 +loopsoundthread(param_00,param_01,param_02) +{ + var_03 = spawn("script_origin",param_01); + var_03.origin = param_01; + var_03 playloopsound(param_00); +} + +//Function Number: 17 +gunfireloopfx(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07) +{ + thread gunfireloopfxthread(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07); +} + +//Function Number: 18 +gunfireloopfxthread(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07) +{ + level endon("stop all gunfireloopfx"); + common_scripts\utility::waitframe(); + if(param_07 < param_06) + { + var_08 = param_07; + param_07 = param_06; + param_06 = var_08; + } + + var_09 = param_06; + var_0A = param_07 - param_06; + if(param_05 < param_04) + { + var_08 = param_05; + param_05 = param_04; + param_04 = var_08; + } + + var_0B = param_04; + var_0C = param_05 - param_04; + if(param_03 < param_02) + { + var_08 = param_03; + param_03 = param_02; + param_02 = var_08; + } + + var_0D = param_02; + var_0E = param_03 - param_02; + var_0F = spawnfx(level._effect[param_00],param_01); + if(!level.createfx_enabled) + { + var_0F willneverchange(); + } + + for(;;) + { + var_10 = var_0D + randomint(var_0E); + for(var_11 = 0;var_11 < var_10;var_11++) + { + triggerfx(var_0F); + wait var_0B + randomfloat(var_0C); + } + + wait var_09 + randomfloat(var_0A); + } +} + +//Function Number: 19 +gunfireloopfxvec(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08) +{ + thread gunfireloopfxvecthread(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08); +} + +//Function Number: 20 +gunfireloopfxvecthread(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08) +{ + level endon("stop all gunfireloopfx"); + common_scripts\utility::waitframe(); + if(param_08 < param_07) + { + var_09 = param_08; + param_08 = param_07; + param_07 = var_09; + } + + var_0A = param_07; + var_0B = param_08 - param_07; + if(param_06 < param_05) + { + var_09 = param_06; + param_06 = param_05; + param_05 = var_09; + } + + var_0C = param_05; + var_0D = param_06 - param_05; + if(param_04 < param_03) + { + var_09 = param_04; + param_04 = param_03; + param_03 = var_09; + } + + var_0E = param_03; + var_0F = param_04 - param_03; + param_02 = vectornormalize(param_02 - param_01); + var_10 = spawnfx(level._effect[param_00],param_01,param_02); + if(!level.createfx_enabled) + { + var_10 willneverchange(); + } + + for(;;) + { + var_11 = var_0E + randomint(var_0F); + for(var_12 = 0;var_12 < int(var_11 / level.fxfireloopmod);var_12++) + { + triggerfx(var_10); + var_13 = var_0C + randomfloat(var_0D) * level.fxfireloopmod; + if(var_13 < 0.05) + { + var_13 = 0.05; + } + + wait var_13; + } + + wait var_0C + randomfloat(var_0D); + wait var_0A + randomfloat(var_0B); + } +} + +//Function Number: 21 +setfireloopmod(param_00) +{ + level.fxfireloopmod = 1 / param_00; +} + +//Function Number: 22 +setup_fx() +{ + if(!isdefined(self.script_fxid) || !isdefined(self.script_fxcommand) || !isdefined(self.script_delay)) + { + return; + } + + if(isdefined(self.model)) + { + if(self.model == "toilet") + { + thread burnville_paratrooper_hack(); + return; + } + } + + var_00 = undefined; + if(isdefined(self.target)) + { + var_01 = getent(self.target,"targetname"); + if(isdefined(var_01)) + { + var_00 = var_01.origin; + } + } + + var_02 = undefined; + if(isdefined(self.script_fxstart)) + { + var_02 = self.script_fxstart; + } + + var_03 = undefined; + if(isdefined(self.script_fxstop)) + { + var_03 = self.script_fxstop; + } + + if(self.script_fxcommand == "OneShotfx") + { + oneshotfx(self.script_fxid,self.origin,self.script_delay,var_00); + } + + if(self.script_fxcommand == "loopfx") + { + loopfx(self.script_fxid,self.origin,self.script_delay,var_00,var_02,var_03); + } + + if(self.script_fxcommand == "loopsound") + { + loopsound(self.script_fxid,self.origin,self.script_delay); + } + + self delete(); +} + +//Function Number: 23 +burnville_paratrooper_hack() +{ + var_00 = (0,0,self.angles[1]); + var_01 = level._effect[self.script_fxid]; + var_02 = self.origin; + wait 1; + level thread burnville_paratrooper_hack_loop(var_00,var_02,var_01); + self delete(); +} + +//Function Number: 24 +burnville_paratrooper_hack_loop(param_00,param_01,param_02) +{ + for(;;) + { + playfx(param_02,param_01); + wait 30 + randomfloat(40); + } +} + +//Function Number: 25 +create_triggerfx() +{ + if(!verify_effects_assignment(self.v["fxid"])) + { + return; + } + + self.looper = spawnfx(level._effect[self.v["fxid"]],self.v["origin"],self.v["forward"],self.v["up"]); + triggerfx(self.looper,self.v["delay"]); + if(!level.createfx_enabled) + { + self.looper willneverchange(); + } + + create_loopsound(); +} + +//Function Number: 26 +verify_effects_assignment(param_00) +{ + if(isdefined(level._effect[param_00])) + { + return 1; + } + + if(!isdefined(level._missing_fx)) + { + level._missing_fx = []; + } + + level._missing_fx[self.v["fxid"]] = param_00; + verify_effects_assignment_print(param_00); + return 0; +} + +//Function Number: 27 +verify_effects_assignment_print(param_00) +{ + level notify("verify_effects_assignment_print"); + level endon("verify_effects_assignment_print"); + wait 0.05; + var_01 = getarraykeys(level._missing_fx); + foreach(var_03 in var_01) + { + } +} + +//Function Number: 28 +oneshotfxthread() +{ + common_scripts\utility::waitframe(); + if(self.v["delay"] > 0) + { + wait self.v["delay"]; + } + + [[ level.func["create_triggerfx"] ]](); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/common_scripts/_pipes.gsc b/MW3/Xbox/MP/common_scripts/_pipes.gsc new file mode 100644 index 0000000..047afd9 --- /dev/null +++ b/MW3/Xbox/MP/common_scripts/_pipes.gsc @@ -0,0 +1,290 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: common_scripts\_pipes.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 12 + * Decompile Time: 179 ms + * Timestamp: 10/27/2023 2:29:09 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + level.var_18A1 = 25; + var_00 = getentarray("pipe_shootable","targetname"); + if(!var_00.size) + { + return; + } + + level.var_18A2 = spawnstruct(); + level.var_18A2.num_pipe_fx = 0; + var_00 thread precachefx(); + var_00 thread methodsinit(); + waittillframeend; + common_scripts\utility::array_thread(var_00,::pipesetup); +} + +//Function Number: 2 +pipesetup() +{ + self setcandamage(1); + self setcanradiusdamage(0); + self.var_18A5 = []; + var_00 = undefined; + if(isdefined(self.target)) + { + var_00 = common_scripts\utility::getstruct(self.target,"targetname"); + self.a = var_00.origin; + var_01 = anglestoforward(var_00.angles); + var_01 = var_01 * 128; + self.b = self.a + var_01; + } + else + { + var_01 = anglestoforward(self.angles); + var_02 = var_01 * 64; + self.a = self.origin + var_02; + var_02 = var_01 * -64; + self.b = self.origin + var_02; + } + + thread pipe_wait_loop(); +} + +//Function Number: 3 +pipe_wait_loop() +{ + var_00 = (0,0,0); + var_01 = 0; + var_02 = 4; + for(;;) + { + self waittill("damage",var_03,var_04,var_05,var_00,var_06); + if(var_01) + { + if(randomint(100) <= 33) + { + continue; + } + } + + var_01 = 1; + var_07 = pipe_logic(var_05,var_00,var_06,var_04); + if(var_07) + { + var_02--; + } + + if(var_02 <= 0) + { + break; + } + } + + self setcandamage(0); +} + +//Function Number: 4 +pipe_logic(param_00,param_01,param_02,param_03) +{ + if(level.var_18A2.num_pipe_fx > 8) + { + return 0; + } + + if(!isdefined(level.var_18A2._pipe_methods[param_02])) + { + param_01 = pipe_calc_nofx(param_01,param_02); + } + else + { + param_01 = self [[ level.var_18A2._pipe_methods[param_02] ]](param_01,param_02); + } + + if(!isdefined(param_01)) + { + return 0; + } + + if(isdefined(param_03.classname) && param_03.classname == "worldspawn") + { + return 0; + } + + foreach(var_05 in self.var_18A5) + { + if(distancesquared(param_01,var_05.origin) < 25) + { + return 0; + } + } + + var_07 = vectorfromlinetopoint(self.a,self.b,param_01); + thread pipefx(param_01,var_07,param_03); + return 1; +} + +//Function Number: 5 +pipefx(param_00,param_01,param_02) +{ + var_03 = level.var_18A2.fx_time[self.script_noteworthy]; + var_04 = int(level.var_18A1 / var_03); + var_05 = level.var_18A2._sound[self.script_noteworthy + "_hit"]; + var_06 = level.var_18A2._sound[self.script_noteworthy + "_loop"]; + var_07 = level.var_18A2._sound[self.script_noteworthy + "_end"]; + var_08 = spawn("script_origin",param_00); + var_08 hide(); + var_08 playsound(var_05); + var_08 playloopsound(var_06); + self.var_18A5[self.var_18A5.size] = var_08; + level.var_18A2.num_pipe_fx++; + if(common_scripts\utility::issp() || self.script_noteworthy != "steam") + { + thread pipe_damage(param_00,param_01,param_02,var_08); + } + + playfx(level.var_18A2._effect[self.script_noteworthy],param_00,param_01); + wait var_03; + var_04--; + while(level.var_18A2.num_pipe_fx <= 8 && var_04 > 0) + { + playfx(level.var_18A2._effect[self.script_noteworthy],param_00,param_01); + wait var_03; + var_04--; + } + + var_08 playsound(var_07); + wait 0.5; + var_08 stoploopsound(var_06); + var_08 delete(); + self.var_18A5 = common_scripts\utility::array_removeundefined(self.var_18A5); + level.var_18A2.num_pipe_fx--; +} + +//Function Number: 6 +pipe_damage(param_00,param_01,param_02,param_03) +{ + if(!func_18AF()) + { + return; + } + + param_03 endon("death"); + var_04 = param_03.origin + vectornormalize(param_01) * 40; + var_05 = level.var_18A2._dmg[self.script_noteworthy]; + for(;;) + { + if(!isdefined(self.damageowner)) + { + self radiusdamage(var_04,36,var_05,var_05 * 0.75,undefined,"MOD_TRIGGER_HURT"); + } + else + { + self radiusdamage(var_04,36,var_05,var_05 * 0.75,param_02,"MOD_TRIGGER_HURT"); + } + + wait 0.4; + } +} + +//Function Number: 7 +func_18AF() +{ + if(!common_scripts\utility::issp()) + { + return 0; + } + + if(!isdefined(level.var_18B0)) + { + return 1; + } + + return level.var_18B0; +} + +//Function Number: 8 +methodsinit() +{ + level.var_18A2._pipe_methods = []; + level.var_18A2._pipe_methods["MOD_UNKNOWN"] = ::func_18B3; + level.var_18A2._pipe_methods["MOD_PISTOL_BULLET"] = ::pipe_calc_ballistic; + level.var_18A2._pipe_methods["MOD_RIFLE_BULLET"] = ::pipe_calc_ballistic; + level.var_18A2._pipe_methods["MOD_GRENADE"] = ::func_18B3; + level.var_18A2._pipe_methods["MOD_GRENADE_SPLASH"] = ::func_18B3; + level.var_18A2._pipe_methods["MOD_PROJECTILE"] = ::func_18B3; + level.var_18A2._pipe_methods["MOD_PROJECTILE_SPLASH"] = ::func_18B3; + level.var_18A2._pipe_methods["MOD_TRIGGER_HURT"] = ::func_18B3; + level.var_18A2._pipe_methods["MOD_EXPLOSIVE"] = ::func_18B3; + level.var_18A2._pipe_methods["MOD_EXPLOSIVE_BULLET"] = ::func_18B3; +} + +//Function Number: 9 +pipe_calc_ballistic(param_00,param_01) +{ + return param_00; +} + +//Function Number: 10 +func_18B3(param_00,param_01) +{ + var_02 = vectornormalize(vectorfromlinetopoint(self.a,self.b,param_00)); + param_00 = pointonsegmentnearesttopoint(self.a,self.b,param_00); + return param_00 + var_02 * 4; +} + +//Function Number: 11 +pipe_calc_nofx(param_00,param_01) +{ + return undefined; +} + +//Function Number: 12 +precachefx() +{ + var_00 = 0; + var_01 = 0; + foreach(var_03 in self) + { + if(var_03.script_noteworthy == "water") + { + var_03.script_noteworthy = "steam"; + } + + if(var_03.script_noteworthy == "steam") + { + var_03 willneverchange(); + var_00 = 1; + continue; + } + + if(var_03.script_noteworthy == "fire") + { + var_03 willneverchange(); + var_01 = 1; + continue; + } + } + + if(var_00) + { + level.var_18A2._effect["steam"] = loadfx("impacts/pipe_steam"); + level.var_18A2._sound["steam_hit"] = "mtl_steam_pipe_hit"; + level.var_18A2._sound["steam_loop"] = "mtl_steam_pipe_hiss_loop"; + level.var_18A2._sound["steam_end"] = "mtl_steam_pipe_hiss_loop_end"; + level.var_18A2.fx_time["steam"] = 3; + level.var_18A2._dmg["steam"] = 5; + } + + if(var_01) + { + level.var_18A2._effect["fire"] = loadfx("impacts/pipe_fire"); + level.var_18A2._sound["fire_hit"] = "mtl_gas_pipe_hit"; + level.var_18A2._sound["fire_loop"] = "mtl_gas_pipe_flame_loop"; + level.var_18A2._sound["fire_end"] = "mtl_gas_pipe_flame_end"; + level.var_18A2.fx_time["fire"] = 3; + level.var_18A2._dmg["fire"] = 5; + } +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/_areas.gsc b/MW3/Xbox/MP/maps/mp/_areas.gsc new file mode 100644 index 0000000..2f1a89e --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/_areas.gsc @@ -0,0 +1,72 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\_areas.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 5 + * Decompile Time: 113 ms + * Timestamp: 10/27/2023 2:27:34 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level.softlandingtriggers = getentarray("trigger_multiple_softlanding","classname"); + var_00 = getentarray("destructible_vehicle","targetname"); + foreach(var_02 in level.softlandingtriggers) + { + if(var_02.script_type != "car") + { + continue; + } + + foreach(var_04 in var_00) + { + if(distance(var_02.origin,var_04.origin) > 64) + { + continue; + } + + var_02.destructible = var_04; + } + } + + thread onplayerconnect(); +} + +//Function Number: 2 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_00.softlanding = undefined; + var_00 thread softlandingwaiter(); + } +} + +//Function Number: 3 +func_2DC4(param_00) +{ + self.softlanding = param_00; +} + +//Function Number: 4 +func_2DC5(param_00) +{ + self.softlanding = undefined; +} + +//Function Number: 5 +softlandingwaiter() +{ + self endon("disconnect"); + for(;;) + { + self waittill("soft_landing",var_00,var_01); + if(!isdefined(var_00.destructible)) + { + continue; + } + } +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/_art.gsc b/MW3/Xbox/MP/maps/mp/_art.gsc new file mode 100644 index 0000000..dc75647 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/_art.gsc @@ -0,0 +1,29 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\_art.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 4 + * Decompile Time: 57 ms + * Timestamp: 10/27/2023 2:28:54 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ +} + +//Function Number: 2 +func_1684() +{ +} + +//Function Number: 3 +fovslidercheck() +{ +} + +//Function Number: 4 +func_16B2() +{ +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/_audio.gsc b/MW3/Xbox/MP/maps/mp/_audio.gsc new file mode 100644 index 0000000..a7db91d --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/_audio.gsc @@ -0,0 +1,92 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\_audio.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 10 + * Decompile Time: 187 ms + * Timestamp: 10/27/2023 2:27:35 AM +*******************************************************************/ + +//Function Number: 1 +func_2B8B() +{ + if(!isdefined(level.audio)) + { + level.audio = spawnstruct(); + } + + func_3351(); + func_3356(); + level.onplayerconnectaudioinit = ::onplayerconnectaudioinit; +} + +//Function Number: 2 +onplayerconnectaudioinit() +{ + func_3355("default"); +} + +//Function Number: 3 +func_3351() +{ + func_3352("default","generic",0.15,0.9,2); +} + +//Function Number: 4 +func_3352(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = []; + is_roomtype_valid(param_01); + level.audio.reverb_settings[param_01] = var_41; +} + +//Function Number: 5 +is_roomtype_valid(param_00) +{ +} + +//Function Number: 6 +func_3355(param_00) +{ + if(!isdefined(level.audio.reverb_settings[param_00])) + { + var_01 = level.audio.reverb_settings["default"]; + } + else + { + var_01 = level.audio.reverb_settings[var_01]; + } + + self setreverb("snd_enveffectsprio_level",var_01["roomtype"],var_01["drylevel"],var_01["wetlevel"],var_01["fadetime"]); +} + +//Function Number: 7 +func_3356() +{ + level.audio.whizby_settings = []; + set_whizby_radius(15,30,50); + set_whizby_spread(150,250,350); +} + +//Function Number: 8 +set_whizby_radius(param_00,param_01,param_02) +{ + level.audio.whizby_settings["radius"] = [param_00,param_01,param_02]; +} + +//Function Number: 9 +set_whizby_spread(param_00,param_01,param_02) +{ + level.audio.whizby_settings["spread"] = [param_00,param_01,param_02]; +} + +//Function Number: 10 +func_335A() +{ + var_00 = level.audio.whizby_settings; + var_01 = var_00["spread"]; + var_02 = var_00["radius"]; + self setwhizbyspreads(var_01[0],var_01[1],var_01[2]); + self setwhizbyradii(var_02[0],var_02[1],var_02[2]); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/_awards.gsc b/MW3/Xbox/MP/maps/mp/_awards.gsc new file mode 100644 index 0000000..6f2bcc7 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/_awards.gsc @@ -0,0 +1,1138 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\_awards.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 58 + * Decompile Time: 1077 ms + * Timestamp: 10/27/2023 2:27:39 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + func_2D7B(); + level thread onplayerconnect(); + level thread monitormovementdistance(); + level thread func_2DBA(); +} + +//Function Number: 2 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + if(!isdefined(var_00.pers["stats"])) + { + var_00.pers["stats"] = []; + } + + var_00.stats = var_00.pers["stats"]; + if(!var_00.stats.size) + { + var_00 setplayerdata("round","awardCount",0); + foreach(var_03, var_02 in level.awards) + { + if(isdefined(level.awards[var_03].defaultvalue)) + { + var_00 maps\mp\_utility::initplayerstat(var_03,level.awards[var_03].defaultvalue); + continue; + } + + var_00 maps\mp\_utility::initplayerstat(var_03); + } + } + + var_00.prevpos = var_00.origin; + var_00.previousdeaths = 0; + var_00.altitudepolls = 0; + var_00.totalaltitudesum = 0; + var_00.usedweapons = []; + var_00 thread onplayerspawned(); + var_00 thread func_2DB4(); + } +} + +//Function Number: 3 +onplayerspawned() +{ + self endon("disconnect"); + for(;;) + { + self waittill("spawned_player"); + thread func_2DB0(); + thread func_2DB1(); + thread monitorswaps(); + thread func_2DBC(); + thread monitorshieldblocks(); + thread monitorflashhits(); + thread monitorstunhits(); + thread func_2DC0(); + } +} + +//Function Number: 4 +func_2D7B() +{ + if(isdefined(level.initgametypeawards)) + { + [[ level.initgametypeawards ]](); + } + + initawardflag("10kills",::isatleast,10,"kills"); + initawardflag("1death",::isatleast,1,"deaths"); + initawardflag("nodeaths",::isatmost,0,"deaths"); + initawardflag("nokills",::isatmost,0,"kills"); + initmultiaward("mvp","kills","deaths"); + initmultiaward("punisher","kills","killstreak"); + initmultiaward("overkill","kills","headshots"); + func_2D85("kdratio",0,::func_2DA7); + func_2D85("kills",0,::func_2DA7); + func_2D85("higherrankkills",0,::func_2DA7); + func_2D85("deaths",0,::lowestwithhalfplayedtime); + func_2D85("killstreak",0,::func_2DA7); + func_2D85("headshots",0,::func_2DA7); + func_2D85("closertoenemies",0,::func_2DA7); + func_2D85("throwingknifekills",0,::func_2DA7); + func_2D85("grenadekills",0,::func_2DA7); + func_2D85("helicopters",0,::func_2DA7); + func_2D85("airstrikes",0,::func_2DA7); + func_2D85("uavs",0,::func_2DA7); + func_2D85("mostmultikills",0,::func_2DA7); + func_2D85("multikill",0,::func_2DA7); + func_2D85("knifekills",0,::func_2DA7); + func_2D85("flankkills",0,::func_2DA7); + func_2D85("bulletpenkills",0,::func_2DA7); + func_2D85("laststandkills",0,::func_2DA7); + func_2D85("laststanderkills",0,::func_2DA7); + func_2D85("assists",0,::func_2DA7); + func_2D85("c4kills",0,::func_2DA7); + func_2D85("claymorekills",0,::func_2DA7); + func_2D85("fragkills",0,::func_2DA7); + func_2D85("semtexkills",0,::func_2DA7); + func_2D85("explosionssurvived",0,::func_2DA7); + func_2D85("mosttacprevented",0,::func_2DA7); + func_2D85("avengekills",0,::func_2DA7); + func_2D85("rescues",0,::func_2DA7); + func_2D85("longshots",0,::func_2DA7); + func_2D85("adskills",0,::func_2DA7); + func_2D85("hipfirekills",0,::func_2DA7); + func_2D85("revengekills",0,::func_2DA7); + func_2D85("longestlife",0,::func_2DA7); + func_2D85("throwbacks",0,::func_2DA7); + func_2D85("otherweaponkills",0,::func_2DA7); + func_2D85("killedsameplayer",0,::func_2DA7,2); + func_2D85("mostweaponsused",0,::func_2DA7,3); + func_2D85("distancetraveled",0,::func_2DA7); + func_2D85("mostreloads",0,::func_2DA7); + func_2D85("mostswaps",0,::func_2DA7); + func_2D84("flankdeaths",0); + func_2D85("thermalkills",0,::func_2DA7); + func_2D85("mostcamperkills",0,::func_2DA7); + func_2D85("fbhits",0,::func_2DA7); + func_2D85("stunhits",0,::func_2DA7); + func_2D85("scopedkills",0,::func_2DA7); + func_2D85("arkills",0,::func_2DA7); + func_2D85("arheadshots",0,::func_2DA7); + func_2D85("lmgkills",0,::func_2DA7); + func_2D85("lmgheadshots",0,::func_2DA7); + func_2D85("sniperkills",0,::func_2DA7); + func_2D85("sniperheadshots",0,::func_2DA7); + func_2D85("shieldblocks",0,::func_2DA7); + func_2D85("shieldkills",0,::func_2DA7); + func_2D85("smgkills",0,::func_2DA7); + func_2D85("smgheadshots",0,::func_2DA7); + func_2D85("shotgunkills",0,::func_2DA7); + func_2D85("shotgunheadshots",0,::func_2DA7); + func_2D85("pistolkills",0,::func_2DA7); + func_2D85("pistolheadshots",0,::func_2DA7); + func_2D85("rocketkills",0,::func_2DA7); + func_2D85("equipmentkills",0,::func_2DA7); + func_2D85("mostclasseschanged",0,::func_2DA7); + func_2D85("lowerrankkills",0,::func_2DA7); + func_2D85("sprinttime",0,::func_2DA7,1); + func_2D85("crouchtime",0,::func_2DA7); + func_2D85("pronetime",0,::func_2DA7); + func_2D85("comebacks",0,::func_2DA7); + func_2D85("mostshotsfired",0,::func_2DA7); + func_2D85("timeinspot",0,::func_2DA7); + func_2D85("killcamtimewatched",0,::func_2DA7); + func_2D85("greatestavgalt",0,::func_2DA7); + func_2D85("leastavgalt",9999999,::func_2DA8); + func_2D85("weaponxpearned",0,::func_2DA7); + func_2D85("assaultkillstreaksused",0,::func_2DA7); + func_2D85("supportkillstreaksused",0,::func_2DA7); + func_2D85("specialistkillstreaksearned",0,::func_2DA7); + func_2D85("killsconfirmed",0,::func_2DA7); + func_2D85("killsdenied",0,::func_2DA7); + func_2D85("holdingteamdefenderflag",0,::func_2DA7); + func_2D85("damagedone",0,::func_2DA7); + func_2D85("damagetaken",0,::func_2DA8); + if(!maps\mp\_utility::matchmakinggame()) + { + func_2D85("killcamskipped",0,::func_2DA7); + func_2D85("killsteals",0,::func_2DA7); + if(!maps\mp\_utility::getgametypenumlives()) + { + func_2D85("deathstreak",0,::func_2DA7); + } + + func_2D85("shortestlife",9999999,::func_2DA8); + func_2D85("suicides",0,::func_2DA7); + func_2D85("mostff",0,::func_2DA7); + func_2D85("shotgundeaths",0,::func_2DA7); + func_2D85("shielddeaths",0,::func_2DA7); + func_2D85("flankdeaths",0,::func_2DA7); + } +} + +//Function Number: 5 +initbaseaward(param_00) +{ + level.awards[param_00] = spawnstruct(); + level.awards[param_00].winners = []; + level.awards[param_00].exclusive = 1; +} + +//Function Number: 6 +func_2D80(param_00,param_01,param_02,param_03) +{ + if(isdefined(param_01)) + { + level.awards[param_00].process = param_01; + } + + if(isdefined(param_02)) + { + level.awards[param_00].var1 = param_02; + } + + if(isdefined(param_03)) + { + level.awards[param_00].var2 = param_03; + } +} + +//Function Number: 7 +func_2D84(param_00,param_01) +{ + initbaseaward(param_00); + level.awards[param_00].defaultvalue = param_01; + level.awards[param_00].type = "stat"; +} + +//Function Number: 8 +func_2D85(param_00,param_01,param_02,param_03,param_04) +{ + initbaseaward(param_00); + func_2D80(param_00,param_02,param_03,param_04); + level.awards[param_00].defaultvalue = param_01; + level.awards[param_00].type = "stat"; +} + +//Function Number: 9 +initderivedaward(param_00,param_01,param_02,param_03) +{ + initbaseaward(param_00); + func_2D80(param_00,param_01,param_02,param_03); + level.awards[param_00].type = "derived"; +} + +//Function Number: 10 +initawardflag(param_00,param_01,param_02,param_03) +{ + initbaseaward(param_00); + func_2D80(param_00,param_01,param_02,param_03); + level.awards[param_00].type = "flag"; +} + +//Function Number: 11 +initmultiaward(param_00,param_01,param_02) +{ + initbaseaward(param_00); + level.awards[param_00].award1_ref = param_01; + level.awards[param_00].award2_ref = param_02; + level.awards[param_00].type = "multi"; +} + +//Function Number: 12 +initthresholdaward(param_00,param_01,param_02,param_03) +{ + initbaseaward(param_00); + func_2D80(param_00,param_01,param_02,param_03); + level.awards[param_00].type = "threshold"; +} + +//Function Number: 13 +setmatchrecordifgreater(param_00) +{ + var_01 = maps\mp\_utility::func_2D8D(param_00); + var_02 = maps\mp\_utility::getplayerstattime(param_00); + var_03 = getawardrecord(param_00); + var_04 = func_2D99(param_00); + if(!isdefined(var_03) || var_01 > var_03) + { + func_2D96(param_00); + func_2D94(param_00,self.clientid); + func_2D97(param_00,var_01,var_02); + return; + } + + if(var_01 == var_03) + { + if(isawardexclusive(param_00)) + { + if(!isdefined(var_04) || var_02 < var_04) + { + func_2D96(param_00); + func_2D94(param_00,self.clientid); + func_2D97(param_00,var_01,var_02); + return; + } + + return; + } + + func_2D94(param_00,self.clientid); + return; + } +} + +//Function Number: 14 +func_2D8F(param_00) +{ + var_01 = maps\mp\_utility::func_2D8D(param_00); + var_02 = maps\mp\_utility::getplayerstattime(param_00); + var_03 = getawardrecord(param_00); + var_04 = func_2D99(param_00); + if(!isdefined(var_03) || var_01 < var_03) + { + func_2D96(param_00); + func_2D94(param_00,self.clientid); + func_2D97(param_00,var_01,var_02); + return; + } + + if(var_01 == var_03) + { + if(isawardexclusive(param_00)) + { + if(!isdefined(var_04) || var_02 < var_04) + { + func_2D96(param_00); + func_2D94(param_00,self.clientid); + func_2D97(param_00,var_01,var_02); + return; + } + + return; + } + + func_2D94(param_00,self.clientid); + return; + } +} + +//Function Number: 15 +func_2D90(param_00) +{ + var_01 = func_2DB9(param_00); + var_02 = func_2DB8(param_00); + if(!var_01) + { + return var_02 + 0.001; + } + + return var_02 / var_01; +} + +//Function Number: 16 +setpersonalbestifgreater(param_00) +{ + var_01 = self getplayerdata("bests",param_00); + var_02 = maps\mp\_utility::func_2D8D(param_00); + if(var_01 == 0 || var_02 > var_01) + { + var_02 = getformattedvalue(param_00,var_02); + self setplayerdata("bests",param_00,var_02); + } +} + +//Function Number: 17 +func_2D92(param_00) +{ + var_01 = self getplayerdata("bests",param_00); + var_02 = maps\mp\_utility::func_2D8D(param_00); + if(var_01 == 0 || var_02 < var_01) + { + var_02 = getformattedvalue(param_00,var_02); + self setplayerdata("bests",param_00,var_02); + } +} + +//Function Number: 18 +func_2D93(param_00) +{ + var_01 = self getplayerdata("awards",param_00); + self setplayerdata("awards",param_00,var_01 + 1); +} + +//Function Number: 19 +func_2D94(param_00,param_01) +{ + foreach(var_03 in level.awards[param_00].winners) + { + if(var_03 == param_01) + { + return; + } + } + + level.awards[param_00].winners[level.awards[param_00].winners.size] = param_01; +} + +//Function Number: 20 +getawardwinners(param_00) +{ + return level.awards[param_00].winners; +} + +//Function Number: 21 +func_2D96(param_00) +{ + level.awards[param_00].winners = []; +} + +//Function Number: 22 +func_2D97(param_00,param_01,param_02) +{ + level.awards[param_00].value = param_01; + level.awards[param_00].time = param_02; +} + +//Function Number: 23 +getawardrecord(param_00) +{ + return level.awards[param_00].value; +} + +//Function Number: 24 +func_2D99(param_00) +{ + return level.awards[param_00].time; +} + +//Function Number: 25 +func_2D9A() +{ + foreach(var_01 in level.players) + { + if(!var_01 maps\mp\_utility::rankingenabled()) + { + return; + } + + var_02 = var_01 maps\mp\_utility::func_2D8D("kills"); + var_03 = var_01 maps\mp\_utility::func_2D8D("deaths"); + if(var_03 == 0) + { + var_03 = 1; + } + + var_01 maps\mp\_utility::func_2AA1("kdratio",var_02 / var_03); + if(isalive(var_01)) + { + var_04 = gettime() - var_01.spawntime; + var_01 maps\mp\_utility::func_2AAA("longestlife",var_04); + } + } + + foreach(var_0B, var_07 in level.awards) + { + if(!isdefined(level.awards[var_0B].process)) + { + continue; + } + + var_08 = level.awards[var_0B].process; + var_09 = level.awards[var_0B].var1; + var_0A = level.awards[var_0B].var2; + if(isdefined(var_09) && isdefined(var_0A)) + { + [[ var_08 ]](var_0B,var_09,var_0A); + continue; + } + + if(isdefined(var_09)) + { + [[ var_08 ]](var_0B,var_09); + continue; + } + + [[ var_08 ]](var_0B); + } + + foreach(var_0B, var_07 in level.awards) + { + if(!func_2D9E(var_0B)) + { + continue; + } + + var_0D = level.awards[var_0B].award1_ref; + var_0E = level.awards[var_0B].award2_ref; + var_0F = getawardwinners(var_0D); + var_10 = getawardwinners(var_0E); + if(!isdefined(var_0F) || !isdefined(var_10)) + { + continue; + } + + foreach(var_12 in var_0F) + { + foreach(var_14 in var_10) + { + if(var_12 == var_14) + { + func_2D94(var_0B,var_12); + var_01 = maps\mp\_utility::func_2D9B(var_12); + var_15 = var_01 maps\mp\_utility::func_2D8D(var_0D); + var_16 = var_01 maps\mp\_utility::func_2D8D(var_0E); + var_01 maps\mp\_utility::func_2AA1(var_0B,func_2DB7(var_15,var_16)); + } + } + } + } + + foreach(var_0B, var_07 in level.awards) + { + if(!func_2DA1(var_0B)) + { + func_2D9C(var_0B); + } + } + + foreach(var_01 in level.players) + { + var_1B = var_01 getplayerdata("round","awardCount"); + for(var_1C = 0;var_1C < var_1B && var_1C < 3;var_1C++) + { + var_07 = var_01 getplayerdata("round","awards",var_1C,"award"); + var_1D = var_01 getplayerdata("round","awards",var_1C,"value"); + } + } +} + +//Function Number: 26 +func_2D9C(param_00) +{ + var_01 = getawardwinners(param_00); + if(!isdefined(var_01)) + { + return; + } + + foreach(var_03 in var_01) + { + foreach(var_05 in level.players) + { + if(var_05.clientid == var_03) + { + var_05 giveaward(param_00); + } + } + } +} + +//Function Number: 27 +func_2D9D(param_00) +{ + if(isdefined(level.awards[param_00].type)) + { + return level.awards[param_00].type; + } + + return "none"; +} + +//Function Number: 28 +func_2D9E(param_00) +{ + return func_2D9D(param_00) == "multi"; +} + +//Function Number: 29 +isstataward(param_00) +{ + return func_2D9D(param_00) == "stat"; +} + +//Function Number: 30 +isthresholdaward(param_00) +{ + return func_2D9D(param_00) == "threshold"; +} + +//Function Number: 31 +func_2DA1(param_00) +{ + return func_2D9D(param_00) == "flag"; +} + +//Function Number: 32 +isawardexclusive(param_00) +{ + if(isdefined(level.awards[param_00].exclusive)) + { + return level.awards[param_00].exclusive; + } + + return 1; +} + +//Function Number: 33 +hasdisplayvalue(param_00) +{ + var_01 = func_2D9D(param_00); + switch(var_01) + { + case "derived": + var_02 = 0; + break; + + case "stat": + case "multi": + default: + var_02 = 1; + break; + } + + return var_02; +} + +//Function Number: 34 +giveaward(param_00) +{ + var_01 = self getplayerdata("round","awardCount"); + func_2D93(param_00); + if(hasdisplayvalue(param_00)) + { + if(isstataward(param_00)) + { + } + + var_02 = maps\mp\_utility::func_2D8D(param_00); + } + else + { + var_02 = 1; + } + + var_02 = getformattedvalue(param_00,var_02); + if(var_01 < 5) + { + self setplayerdata("round","awards",var_01,"award",param_00); + self setplayerdata("round","awards",var_01,"value",var_02); + } + + var_01++; + self setplayerdata("round","awardCount",var_01); + maps\mp\_matchdata::logaward(param_00); + if(var_01 == 1) + { + maps\mp\_highlights::func_2D71(param_00,var_02); + } +} + +//Function Number: 35 +getformattedvalue(param_00,param_01) +{ + var_02 = tablelookup("mp/awardTable.csv",1,param_00,7); + switch(var_02) + { + case "float": + param_01 = maps\mp\_utility::func_2DA6(param_01,2); + param_01 = param_01 * 100; + break; + + case "ratio": + case "time": + case "multi": + case "count": + case "distance": + case "none": + default: + break; + } + + param_01 = int(param_01); + return param_01; +} + +//Function Number: 36 +func_2DA7(param_00,param_01) +{ + foreach(var_03 in level.players) + { + if(var_03 maps\mp\_utility::rankingenabled() && var_03 func_2DAA(param_00) && !isdefined(param_01) || var_03 maps\mp\_utility::func_2D8D(param_00) >= param_01) + { + var_03 setmatchrecordifgreater(param_00); + if(!func_2DA1(param_00)) + { + var_03 setpersonalbestifgreater(param_00); + } + } + } +} + +//Function Number: 37 +func_2DA8(param_00,param_01) +{ + foreach(var_03 in level.players) + { + if(var_03 maps\mp\_utility::rankingenabled() && var_03 func_2DAA(param_00) && !isdefined(param_01) || var_03 maps\mp\_utility::func_2D8D(param_00) <= param_01) + { + var_03 func_2D8F(param_00); + if(!func_2DA1(param_00)) + { + var_03 func_2D92(param_00); + } + } + } +} + +//Function Number: 38 +lowestwithhalfplayedtime(param_00) +{ + var_01 = maps\mp\_utility::gettimepassed() / 1000; + var_02 = var_01 * 0.5; + foreach(var_04 in level.players) + { + if(var_04.hasspawned && var_04.timeplayed["total"] >= var_02) + { + var_04 func_2D8F(param_00); + if(!func_2DA1(param_00)) + { + var_04 func_2D92(param_00); + } + } + } +} + +//Function Number: 39 +func_2DAA(param_00) +{ + var_01 = maps\mp\_utility::func_2D8D(param_00); + var_02 = level.awards[param_00].defaultvalue; + if(var_01 == var_02) + { + return 0; + } + + return 1; +} + +//Function Number: 40 +isatleast(param_00,param_01,param_02) +{ + foreach(var_04 in level.players) + { + var_05 = var_04 maps\mp\_utility::func_2D8D(param_02); + var_06 = var_05; + if(var_06 >= param_01) + { + func_2D94(param_00,var_04.clientid); + } + + if(isthresholdaward(param_00) || func_2DA1(param_00)) + { + var_04 maps\mp\_utility::func_2AA1(param_00,var_05); + } + } +} + +//Function Number: 41 +isatmost(param_00,param_01,param_02) +{ + foreach(var_04 in level.players) + { + var_05 = var_04 maps\mp\_utility::func_2D8D(param_02); + if(var_05 <= param_01) + { + func_2D94(param_00,var_04.clientid); + } + } +} + +//Function Number: 42 +func_2DAD(param_00,param_01,param_02) +{ + var_03 = maps\mp\_utility::gettimepassed() / 1000; + var_04 = var_03 * 0.5; + foreach(var_06 in level.players) + { + if(var_06.hasspawned && var_06.timeplayed["total"] >= var_04) + { + var_07 = var_06 maps\mp\_utility::func_2D8D(param_02); + if(var_07 <= param_01) + { + func_2D94(param_00,var_06.clientid); + } + } + } +} + +//Function Number: 43 +setratio(param_00,param_01,param_02) +{ + foreach(var_04 in level.players) + { + var_05 = var_04 maps\mp\_utility::func_2D8D(param_01); + var_06 = var_04 maps\mp\_utility::func_2D8D(param_02); + if(var_06 == 0) + { + var_04 maps\mp\_utility::func_2AA1(param_00,var_05); + continue; + } + + var_07 = var_05 / var_06; + var_04 maps\mp\_utility::func_2AA1(param_00,var_07); + } +} + +//Function Number: 44 +getkillstreakawardref(param_00) +{ + switch(param_00) + { + case "uav_support": + case "counter_uav": + case "triple_uav": + case "double_uav": + case "uav": + return "uavs"; + + case "super_airstrike": + case "airstrike": + case "harrier_airstrike": + case "stealth_airstrike": + case "precision_airstrike": + return "airstrikes"; + + case "helicopter_blackbox": + case "helicopter_mk19": + case "helicopter_minigun": + case "littlebird_support": + case "helicopter": + case "littlebird_flock": + case "helicopter_flares": + return "helicopters"; + + default: + return undefined; + } +} + +//Function Number: 45 +func_2DB0() +{ + level endon("game_ended"); + self endon("spawned_player"); + self endon("death"); + self endon("disconnect"); + for(;;) + { + self waittill("reload"); + maps\mp\_utility::incplayerstat("mostreloads",1); + } +} + +//Function Number: 46 +func_2DB1() +{ + level endon("game_ended"); + self endon("spawned_player"); + self endon("death"); + self endon("disconnect"); + for(;;) + { + self waittill("weapon_fired"); + maps\mp\_utility::incplayerstat("mostshotsfired",1); + } +} + +//Function Number: 47 +monitorswaps() +{ + level endon("game_ended"); + self endon("spawned_player"); + self endon("death"); + self endon("disconnect"); + var_00 = "none"; + for(;;) + { + self waittill("weapon_change",var_01); + if(var_00 == var_01) + { + continue; + } + + if(var_01 == "none") + { + continue; + } + + if(!maps\mp\gametypes\_weapons::isprimaryweapon(var_01)) + { + continue; + } + + var_00 = var_01; + maps\mp\_utility::incplayerstat("mostswaps",1); + var_02 = 0; + foreach(var_04 in self.usedweapons) + { + if(var_01 == var_04) + { + var_02 = 1; + break; + } + } + + if(!var_02) + { + self.usedweapons[self.usedweapons.size] = var_01; + maps\mp\_utility::incplayerstat("mostweaponsused",1); + } + } +} + +//Function Number: 48 +monitormovementdistance() +{ + level endon("game_ended"); + self endon("disconnect"); + for(;;) + { + foreach(var_01 in level.players) + { + if(!isalive(var_01)) + { + continue; + } + + if(var_01.deaths != var_01.previousdeaths) + { + var_01.prevpos = var_01.origin; + var_01.previousdeaths = var_01.deaths; + } + + var_02 = distance(var_01.origin,var_01.prevpos); + var_01 maps\mp\_utility::incplayerstat("distancetraveled",var_02); + var_01.prevpos = var_01.origin; + var_01.altitudepolls++; + var_01.totalaltitudesum = var_01.totalaltitudesum + var_01.origin[2]; + var_03 = var_01.totalaltitudesum / var_01.altitudepolls; + var_01 maps\mp\_utility::func_2AA1("leastavgalt",var_03); + var_01 maps\mp\_utility::func_2AA1("greatestavgalt",var_03); + wait 0.05; + } + + wait 0.05; + } +} + +//Function Number: 49 +func_2DB4() +{ + level endon("game_ended"); + self endon("disconnect"); + self.lastcampchecked = gettime(); + self.positionarray = []; + var_00 = 512; + for(;;) + { + if(!isalive(self)) + { + wait 0.5; + self.lastcampchecked = gettime(); + self.positionarray = []; + continue; + } + + self.positionarray[self.positionarray.size] = self.origin; + if(gettime() - self.lastcampchecked >= 15000) + { + if(distance(self.positionarray[0],self.origin) < var_00 && distance(self.positionarray[1],self.positionarray[0]) < var_00) + { + var_01 = gettime() - self.lastcampchecked; + maps\mp\_utility::incplayerstat("timeinspot",var_01); + } + + self.positionarray = []; + self.lastcampchecked = gettime(); + } + + wait 5; + } +} + +//Function Number: 50 +func_2DB7(param_00,param_01) +{ + return param_00 + param_01 << 16; +} + +//Function Number: 51 +func_2DB8(param_00) +{ + return param_00 & -1; +} + +//Function Number: 52 +func_2DB9(param_00) +{ + return param_00 >> 16; +} + +//Function Number: 53 +func_2DBA() +{ + level endon("game_ended"); + self endon("disconnect"); + while(level.players.size < 3) + { + wait 1; + } + + for(;;) + { + foreach(var_01 in level.players) + { + if(!isdefined(var_01)) + { + continue; + } + + if(var_01.team == "spectator") + { + continue; + } + + if(!isalive(var_01)) + { + continue; + } + + var_02 = sortbydistance(level.players,var_01.origin); + if(!var_02.size) + { + wait 0.05; + continue; + } + + if(var_02.size < 2) + { + wait 0.05; + continue; + } + + if(var_02[1].team != var_01.team) + { + var_01 maps\mp\_utility::incplayerstat("closertoenemies",0.05); + } + + wait 0.05; + } + + wait 0.05; + } +} + +//Function Number: 54 +func_2DBC() +{ + level endon("game_ended"); + self endon("spawned_player"); + self endon("death"); + self endon("disconnect"); + for(;;) + { + self waittill("survived_explosion",var_00); + if(isdefined(var_00) && isplayer(var_00) && self == var_00) + { + continue; + } + + maps\mp\_utility::incplayerstat("explosionssurvived",1); + wait 0.05; + } +} + +//Function Number: 55 +monitorshieldblocks() +{ + level endon("game_ended"); + self endon("spawned_player"); + self endon("death"); + self endon("disconnect"); + for(;;) + { + self waittill("shield_blocked"); + maps\mp\_utility::incplayerstat("shieldblocks",1); + wait 0.05; + } +} + +//Function Number: 56 +monitorflashhits() +{ + level endon("game_ended"); + self endon("spawned_player"); + self endon("death"); + self endon("disconnect"); + for(;;) + { + self waittill("flash_hit"); + maps\mp\_utility::incplayerstat("fbhits",1); + wait 0.05; + } +} + +//Function Number: 57 +monitorstunhits() +{ + level endon("game_ended"); + self endon("spawned_player"); + self endon("death"); + self endon("disconnect"); + for(;;) + { + self waittill("stun_hit"); + maps\mp\_utility::incplayerstat("stunhits",1); + wait 0.05; + } +} + +//Function Number: 58 +func_2DC0() +{ + level endon("game_ended"); + self endon("spawned_player"); + self endon("death"); + self endon("disconnect"); + for(;;) + { + if(self getstance() == "crouch") + { + maps\mp\_utility::incplayerstat("crouchtime",500); + } + else if(self getstance() == "prone") + { + maps\mp\_utility::incplayerstat("pronetime",500); + } + + wait 0.5; + } +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/_createfx.gsc b/MW3/Xbox/MP/maps/mp/_createfx.gsc new file mode 100644 index 0000000..3be43b6 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/_createfx.gsc @@ -0,0 +1,67 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\_createfx.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 4 + * Decompile Time: 85 ms + * Timestamp: 10/27/2023 2:27:39 AM +*******************************************************************/ + +//Function Number: 1 +createfx() +{ + level.func_position_player = ::common_scripts\utility::void; + level.func_position_player_get = ::func_position_player_get; + level.func_loopfxthread = ::common_scripts\_fx::loopfxthread; + level.func_oneshotfxthread = ::common_scripts\_fx::oneshotfxthread; + level.func_create_loopsound = ::common_scripts\_fx::create_loopsound; + level.func_updatefx = ::common_scripts\_createfx::restart_fx_looper; + level.func_process_fx_rotater = ::common_scripts\_createfx::process_fx_rotater; + level.mp_createfx = 1; + level.callbackstartgametype = ::common_scripts\utility::void; + level.callbackplayerconnect = ::common_scripts\utility::void; + level.callbackplayerdisconnect = ::common_scripts\utility::void; + level.callbackplayerdamage = ::common_scripts\utility::void; + level.callbackplayerkilled = ::common_scripts\utility::void; + level.callbackcodeendgame = ::common_scripts\utility::void; + level.callbackplayerlaststand = ::common_scripts\utility::void; + level.callbackplayerconnect = ::callback_playerconnect; + level.callbackplayermigrated = ::common_scripts\utility::void; + thread common_scripts\_createfx::func_get_level_fx(); + common_scripts\_createfx::createfx_common(); + level waittill("eternity"); +} + +//Function Number: 2 +func_position_player_get(param_00) +{ + return level.player.origin; +} + +//Function Number: 3 +callback_playerconnect() +{ + self waittill("begin"); + if(!isdefined(level.player)) + { + var_00 = getentarray("mp_global_intermission","classname"); + self spawn(var_00[0].origin,var_00[0].angles); + maps\mp\gametypes\_playerlogic::func_2B67("playing",""); + self.maxhealth = 10000000; + self.health = 10000000; + level.player = self; + thread common_scripts\_createfx::createfxlogic(); + thread func_2B86(); + return; + } + + kick(self getentitynumber()); +} + +//Function Number: 4 +func_2B86() +{ + level.player openpopupmenu("painter_mp"); + level.player closepopupmenu("painter_mp"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/_crib.gsc b/MW3/Xbox/MP/maps/mp/_crib.gsc new file mode 100644 index 0000000..df7b45a --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/_crib.gsc @@ -0,0 +1,653 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\_crib.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 36 + * Decompile Time: 573 ms + * Timestamp: 10/27/2023 2:28:58 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + precacheshellshock("frag_grenade_mp"); + radial_button_definitions(); + radial_init(); + func_3384(); + func_18B7(); +} + +//Function Number: 2 +radial_button_definitions() +{ + func_3368("main","player_view1_start","player_view1_end"); + var_00 = func_336A("main","Primary Weapon","radial_weapons_primary",::func_337F); + var_01 = func_336A("main","Secondary Weapon","radial_weapons_secondary",::func_3380); + var_02 = func_336A("main","Gears","radial_gears",::action_gears); + var_03 = func_336A("main","Kill Streaks","radial_killstreaks",::func_3382); + var_04 = func_336A("main","Leaderboards","radial_leaderboards",::func_3383); + func_3368("gears","player_view2_start","player_view2_end"); + func_3368("weapons_primary","player_view3_start","player_view3_end"); + func_3368("weapons_secondary","player_view3_start","player_view3_end"); + func_3368("killstreak","player_view4_start","player_view4_end"); + func_3368("leaderboards","player_view5_start","player_view5_end"); +} + +//Function Number: 3 +radial_init() +{ + foreach(var_01 in level.radial_button_group) + { + func_3374(var_01); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + if(isdefined(var_01[var_02 + 1])) + { + var_03 = getmidangle(var_01[var_02].var_335E,var_01[var_02 + 1].var_335E); + var_01[var_02].end_angle = var_03; + var_01[var_02 + 1].var_3360 = var_03; + continue; + } + + var_03 = getmidangle(var_01[var_02].var_335E,var_01[0].var_335E) + 180; + if(var_03 > 360) + { + var_03 = var_03 - 360; + } + + var_01[var_02].end_angle = var_03; + var_01[0].var_3360 = var_03; + } + } + + thread updateselectedbutton(); + thread watchselectbuttonpress(); + thread func_3373(); + thread func_3361(); +} + +//Function Number: 4 +func_3361() +{ + level endon("game_ended"); + level.var_3362 = 1; + for(;;) + { + if(!isdefined(level.observer)) + { + wait 0.05; + continue; + } + + var_00 = 1; + while(!level.observer buttonpressed("BUTTON_Y")) + { + wait 0.05; + } + + level.observer playsound("mouse_click"); + if(var_00) + { + level.var_3362 = level.var_3362 * -1; + var_00 = 0; + } + + while(level.observer buttonpressed("BUTTON_Y")) + { + wait 0.05; + } + } +} + +//Function Number: 5 +func_18B7() +{ + level thread onplayerconnect(); + level thread func_3364(); +} + +//Function Number: 6 +func_3364() +{ + level waittill("game_ended"); + setdvar("cg_draw2d",1); +} + +//Function Number: 7 +onplayerconnect() +{ + level waittill("connected",var_00); + var_00 thread func_3365(); + var_00 waittill("spawned_player"); + wait 1; + var_00 takeallweapons(); + setdvar("cg_draw2d",0); + if(!isdefined(var_00)) + { + return; + } + else + { + level.observer = var_00; + } + + var_00 thread func_3366(); + zoom_to_radial_menu("main"); +} + +//Function Number: 8 +func_3365() +{ + self endon("disconnect"); + var_00 = "autoassign"; + while(!isdefined(self.pers["team"])) + { + wait 0.05; + } + + self notify("menuresponse",game["menu_team"],var_00); + wait 0.5; + var_01 = getarraykeys(level.classmap); + var_02 = []; + for(var_03 = 0;var_03 < var_01.size;var_03++) + { + if(!issubstr(var_01[var_03],"custom")) + { + var_02[var_02.size] = var_01[var_03]; + } + } + + for(;;) + { + var_04 = var_02[0]; + self notify("menuresponse","changeclass",var_04); + self waittill("spawned_player"); + wait 0.1; + } +} + +//Function Number: 9 +func_3366() +{ + level endon("game_ended"); + self endon("disconnect"); + for(;;) + { + var_00 = self getnormalizedmovement(); + var_01 = vectortoangles(var_00); + level.rs_angle = int(var_01[1]); + wait 0.05; + } +} + +//Function Number: 10 +func_3368(param_00,param_01,param_02) +{ + if(isdefined(level.radial_button_group) && level.radial_button_group.size) + { + } + + var_03 = getent(param_02,"targetname"); + var_04 = vectornormalize(anglestoforward(var_03.angles)) * 40; + level.radial_button_group[param_00] = []; + level.var_3369[param_00]["view_start"] = param_01; + level.var_3369[param_00]["view_pos"] = var_03.origin + var_04; + level.var_3369[param_00]["player_view_pos"] = var_03.origin; + level.var_3369[param_00]["view_angles"] = var_03.angles; +} + +//Function Number: 11 +func_336A(param_00,param_01,param_02,param_03) +{ + var_04 = getent(param_02,"targetname"); + var_05 = func_337A(param_00,var_04); + var_06 = spawnstruct(); + var_06.pos = var_04.origin; + var_06.label = param_01; + var_06.font_size = 1; + var_06.font_color = (0.5,0.5,1); + var_06.var_335E = var_05; + var_06.action_func = param_03; + var_06.var_336E = 8; + level.radial_button_group[param_00][level.radial_button_group[param_00].size] = var_06; + return var_06; +} + +//Function Number: 12 +updateselectedbutton() +{ + level endon("game_ended"); + for(;;) + { + if(!isdefined(level.radial_button_current_group)) + { + wait 0.05; + continue; + } + + var_00 = level.var_3371; + foreach(var_02 in level.radial_button_group[level.radial_button_current_group]) + { + if(func_337D(var_02.var_3360,var_02.end_angle)) + { + level.var_3371 = var_02; + continue; + } + + var_02.font_color = (0.5,0.5,1); + } + + if(isdefined(level.var_3371)) + { + level.var_3371.font_color = (1,1,0.5); + if(isdefined(var_00) && var_00 != level.var_3371) + { + level.observer playsound("mouse_over"); + } + } + + wait 0.05; + } +} + +//Function Number: 13 +watchselectbuttonpress() +{ + level endon("game_ended"); + for(;;) + { + if(!isdefined(level.observer)) + { + wait 0.05; + continue; + } + + var_00 = 1; + while(!level.observer buttonpressed("BUTTON_A")) + { + wait 0.05; + } + + level.observer playsound("mouse_click"); + if(isdefined(level.var_3371) && var_00) + { + level.var_3371 notify("select_button_pressed"); + [[ level.var_3371.action_func ]](); + var_00 = 0; + } + + while(level.observer buttonpressed("BUTTON_A")) + { + wait 0.05; + } + } +} + +//Function Number: 14 +func_3373() +{ + level endon("game_ended"); + for(;;) + { + if(!isdefined(level.observer)) + { + wait 0.05; + continue; + } + + var_00 = 1; + while(!level.observer buttonpressed("BUTTON_X")) + { + wait 0.05; + } + + level.observer playsound("mouse_click"); + if(var_00) + { + action_back(); + var_00 = 0; + } + + while(level.observer buttonpressed("BUTTON_X")) + { + wait 0.05; + } + } +} + +//Function Number: 15 +func_3374(param_00) +{ + for(var_01 = 0;var_01 < param_00.size - 1;var_01++) + { + for(var_02 = 0;var_02 < param_00.size - 1 - var_01;var_02++) + { + if(param_00[var_02 + 1].var_335E < param_00[var_02].var_335E) + { + func_3375(param_00[var_02],param_00[var_02 + 1]); + } + } + } +} + +//Function Number: 16 +func_3375(param_00,param_01) +{ + var_02 = param_00.pos; + var_03 = param_00.label; + var_04 = param_00.var_335E; + var_05 = param_00.action_func; + var_06 = param_00.var_336E; + param_00.pos = param_01.pos; + param_00.label = param_01.label; + param_00.var_335E = param_01.var_335E; + param_00.action_func = param_01.action_func; + param_00.var_336E = param_01.var_336E; + param_01.pos = var_02; + param_01.label = var_03; + param_01.var_335E = var_04; + param_01.action_func = var_05; + param_01.var_336E = var_06; +} + +//Function Number: 17 +draw_radial_buttons(param_00) +{ + foreach(var_02 in level.radial_button_group[param_00]) + { + var_02 thread draw_radial_button(param_00); + } +} + +//Function Number: 18 +draw_radial_button(param_00) +{ + level endon("game_ended"); + self endon("remove_button"); + var_01 = level.var_3369[param_00]["view_pos"]; + var_02 = var_01 + func_337B(self.var_335E,4); + for(;;) + { + var_03 = (1,0,0); + if(func_337D(self.var_3360,self.end_angle)) + { + var_03 = (1,1,0); + } + + if(isdefined(level.var_3362) && level.var_3362 > 0) + { + var_04 = var_01 + func_337B(level.rs_angle,2); + } + + wait 0.05; + } +} + +//Function Number: 19 +zoom_to_radial_menu(param_00,param_01) +{ + level.var_3371 = undefined; + if(isdefined(level.radial_button_current_group) && level.radial_button_current_group != "") + { + level.var_3379 = level.radial_button_current_group; + } + else + { + level.var_3379 = "main"; + level.radial_button_current_group = "main"; + } + + foreach(var_03 in level.radial_button_group[level.var_3379]) + { + var_03 notify("remove_button"); + } + + if(isdefined(param_01) && param_01) + { + level.observer func_3389(level.var_3369[level.var_3379]["view_start"],param_00); + } + else + { + level.observer go_path_by_targetname(level.var_3369[param_00]["view_start"]); + } + + level thread draw_radial_buttons(param_00); + level.radial_button_current_group = param_00; +} + +//Function Number: 20 +func_337A(param_00,param_01) +{ + var_02 = level.var_3369[param_00]["view_angles"]; + var_03 = level.var_3369[param_00]["view_pos"]; + var_03 = var_03 + vectornormalize(anglestoforward(var_02)) * 40; + var_04 = anglestoforward(var_02); + var_05 = vectornormalize(anglestoup(var_02)); + var_06 = param_01.angles; + var_07 = param_01.origin; + var_08 = vectornormalize(vectorfromlinetopoint(var_03,var_03 + var_04,var_07)); + var_09 = acos(vectordot(var_08,var_05)); + if(vectordot(anglestoright(var_02),var_08) < 0) + { + var_09 = 360 - var_09; + } + + return var_09; +} + +//Function Number: 21 +func_337B(param_00,param_01) +{ + var_02 = (270 - param_00,0,0); + var_03 = anglestoforward(var_02); + var_04 = vectornormalize(var_03); + var_05 = var_04 * param_01; + return var_05; +} + +//Function Number: 22 +getmidangle(param_00,param_01) +{ + var_02 = param_00 + param_01 + 720 / 2 - 360; + return var_02; +} + +//Function Number: 23 +func_337D(param_00,param_01) +{ + var_02 = level.rs_angle > param_00 && level.rs_angle < 360; + var_03 = level.rs_angle > 0 && level.rs_angle < param_01; + if(param_00 > param_01) + { + var_04 = var_02 || var_03; + } + else + { + var_04 = level.rs_angle > param_01 && level.rs_angle < var_02; + } + + return var_04; +} + +//Function Number: 24 +action_back() +{ + if(isdefined(level.radial_button_current_group) && level.radial_button_current_group != "main") + { + zoom_to_radial_menu("main",1); + return; + } +} + +//Function Number: 25 +func_337F() +{ + iprintlnbold("action_weapons_primary"); + zoom_to_radial_menu("weapons_primary"); +} + +//Function Number: 26 +func_3380() +{ + iprintlnbold("action_weapons_secondary"); + zoom_to_radial_menu("weapons_secondary"); +} + +//Function Number: 27 +action_gears() +{ + iprintlnbold("action_gears"); + zoom_to_radial_menu("gears"); +} + +//Function Number: 28 +func_3382() +{ + iprintlnbold("action_killstreak"); + zoom_to_radial_menu("killstreak"); +} + +//Function Number: 29 +func_3383() +{ + iprintlnbold("action_leaderboards"); + zoom_to_radial_menu("leaderboards"); +} + +//Function Number: 30 +func_3384() +{ + level.view_paths = []; + build_path_by_targetname("player_view1_start"); + build_path_by_targetname("player_view2_start"); + build_path_by_targetname("player_view3_start"); + build_path_by_targetname("player_view4_start"); + build_path_by_targetname("player_view5_start"); +} + +//Function Number: 31 +build_path_by_targetname(param_00) +{ + level.view_paths[param_00] = []; + var_01 = getent(param_00,"targetname"); + level.view_paths[param_00][level.view_paths[param_00].size] = var_01; + while(isdefined(var_01) && isdefined(var_01.target)) + { + var_02 = getent(var_01.target,"targetname"); + level.view_paths[param_00][level.view_paths[param_00].size] = var_02; + var_01 = var_02; + } +} + +//Function Number: 32 +go_path_by_targetname(param_00) +{ + if(!isdefined(level.dummy_mover)) + { + var_01 = level.view_paths[param_00][0]; + level.dummy_mover = spawn("script_model",var_01.origin); + level.dummy_mover.angles = var_01.angles; + self setorigin(level.dummy_mover.origin - (0,0,65)); + self linkto(level.dummy_mover); + wait 0.05; + self setplayerangles(level.dummy_mover.angles); + thread func_338C(); + } + + var_02 = 1; + var_03 = abs(distance(level.dummy_mover.origin,level.view_paths[param_00][level.view_paths[param_00].size - 1].origin)); + var_02 = var_02 * var_03 / 1200; + var_02 = max(var_02,0.1); + var_04 = var_02; + if(!1) + { + var_04 = var_04 * var_02 * level.view_paths[param_00].size + 1; + } + + thread func_338B(3,var_04); + foreach(var_07, var_06 in level.view_paths[param_00]) + { + if(1) + { + if(var_07 != level.view_paths[param_00].size - 1) + { + continue; + } + } + + level.dummy_mover moveto(var_06.origin,var_02,var_02 * 0.5,0); + level.dummy_mover rotateto(var_06.angles,var_02,var_02 * 0.5,0); + wait var_02; + } +} + +//Function Number: 33 +func_3389(param_00,param_01) +{ + var_02 = 1; + var_03 = abs(distance(level.dummy_mover.origin,level.var_3369[param_01]["player_view_pos"])); + var_02 = var_02 * var_03 / 1200; + var_02 = max(var_02,0.1); + var_04 = var_02; + if(!1) + { + var_04 = var_04 * var_02 * level.view_paths[param_00].size + 1; + } + + thread func_338B(3,var_04); + if(!1) + { + for(var_05 = level.view_paths[param_00].size - 1;var_05 >= 0;var_05--) + { + var_06 = level.view_paths[param_00][var_05]; + level.dummy_mover moveto(var_06.origin,var_02); + level.dummy_mover rotateto(var_06.angles,var_02); + wait var_02; + } + } + + thread func_338B(3,var_02); + var_07 = level.var_3369[param_01]["player_view_pos"]; + var_08 = level.var_3369[param_01]["view_angles"]; + level.dummy_mover moveto(var_07,var_02,var_02 * 0.5,0); + level.dummy_mover rotateto(var_08,var_02,var_02 * 0.5,0); + wait var_02; +} + +//Function Number: 34 +func_338A(param_00) +{ + self setblurforplayer(20,param_00 + 0.2 / 2); + self setblurforplayer(0,param_00 + 0.2 / 2); + self shellshock("frag_grenade_mp",param_00 + 0.2); +} + +//Function Number: 35 +func_338B(param_00,param_01) +{ + var_02 = int(param_01 / 0.05); + for(var_03 = 0;var_03 < var_02;var_03++) + { + var_04 = var_03 / var_02; + var_05 = sin(180 * var_04); + var_06 = param_00 * var_05; + setdvar("r_blur",var_06); + wait 0.05; + } + + setdvar("r_blur",0); +} + +//Function Number: 36 +func_338C() +{ + level endon("game_ended"); + self endon("disconnect"); + level.dummy_mover endon("remove_dummy"); + for(;;) + { + self setplayerangles(level.dummy_mover.angles); + wait 0.05; + } +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/_defcon.gsc b/MW3/Xbox/MP/maps/mp/_defcon.gsc new file mode 100644 index 0000000..78cc7dc --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/_defcon.gsc @@ -0,0 +1,140 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\_defcon.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 4 + * Decompile Time: 78 ms + * Timestamp: 10/27/2023 2:27:40 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + if(!isdefined(level.defconmode) || level.defconmode == 0) + { + return; + } + + if(!isdefined(game["defcon"])) + { + game["defcon"] = 4; + } + + makedvarserverinfo("scr_defcon",game["defcon"]); + level.defconstreakadd[5] = 0; + level.defconstreakadd[4] = 0; + level.defconstreakadd[3] = -1; + level.defconstreakadd[2] = -1; + level.defconstreakadd[1] = -1; + level.defconpointmod[5] = 1; + level.defconpointmod[4] = 1; + level.defconpointmod[3] = 1; + level.defconpointmod[2] = 1; + level.defconpointmod[1] = 2; + updatedefcon(game["defcon"]); + thread defconkillstreakthread(); +} + +//Function Number: 2 +defconkillstreakwait(param_00) +{ + for(;;) + { + level waittill("player_got_killstreak_" + param_00,var_01); + level notify("defcon_killstreak",param_00,var_01); + } +} + +//Function Number: 3 +defconkillstreakthread() +{ + level endon("game_ended"); + var_00 = 10; + level thread defconkillstreakwait(var_00); + level thread defconkillstreakwait(var_00 - 1); + level thread defconkillstreakwait(var_00 - 2); + level thread defconkillstreakwait(var_00 * 2); + level thread defconkillstreakwait(var_00 * 2 - 1); + level thread defconkillstreakwait(var_00 * 2 - 2); + level thread defconkillstreakwait(var_00 * 3); + level thread defconkillstreakwait(var_00 * 3 - 1); + level thread defconkillstreakwait(var_00 * 3 - 2); + for(;;) + { + level waittill("defcon_killstreak",var_01,var_02); + if(game["defcon"] <= 1) + { + continue; + } + + if(var_01 % var_00 == var_00 - 2) + { + foreach(var_04 in level.players) + { + if(!isalive(var_04)) + { + continue; + } + + var_04 thread maps\mp\gametypes\_hud_message::playercardsplashnotify("two_from_defcon",var_02); + } + + continue; + } + + if(var_01 % var_00 == var_00 - 1) + { + foreach(var_04 in level.players) + { + if(!isalive(var_04)) + { + continue; + } + + var_04 thread maps\mp\gametypes\_hud_message::playercardsplashnotify("one_from_defcon",var_02); + } + + continue; + } + + updatedefcon(game["defcon"] - 1,var_02,var_01); + } +} + +//Function Number: 4 +updatedefcon(param_00,param_01,param_02) +{ + param_00 = int(param_00); + var_03 = game["defcon"]; + game["defcon"] = param_00; + level.objectivepointsmod = level.defconpointmod[param_00]; + setdvar("scr_defcon",game["defcon"]); + if(isdefined(param_01)) + { + param_01 notify("changed_defcon"); + } + + if(param_00 == var_03) + { + return; + } + + if(game["defcon"] == 3 && isdefined(param_01)) + { + param_01 maps\mp\killstreaks\_killstreaks::givekillstreak("airdrop_mega"); + param_01 thread maps\mp\gametypes\_hud_message::func_2892("caused_defcon",param_02); + } + + foreach(var_05 in level.players) + { + if(isalive(var_05)) + { + var_05 thread maps\mp\gametypes\_hud_message::defconsplashnotify(game["defcon"],param_00 < var_03); + if(isdefined(param_01)) + { + var_05 thread maps\mp\gametypes\_hud_message::playercardsplashnotify("changed_defcon",param_01); + } + } + } +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/_destructables.gsc b/MW3/Xbox/MP/maps/mp/_destructables.gsc new file mode 100644 index 0000000..4cdf3d6 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/_destructables.gsc @@ -0,0 +1,142 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\_destructables.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 7 + * Decompile Time: 138 ms + * Timestamp: 10/27/2023 2:27:41 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + var_00 = getentarray("destructable","targetname"); + if(getdvar("scr_destructables") == "0") + { + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + var_00[var_01] delete(); + } + + return; + } + + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + var_00[var_01] thread destructable_think(); + } +} + +//Function Number: 2 +destructable_think() +{ + var_00 = 40; + var_01 = 0; + if(isdefined(self.script_accumulate)) + { + var_00 = self.script_accumulate; + } + + if(isdefined(self.script_threshold)) + { + var_01 = self.script_threshold; + } + + if(isdefined(self.script_destructable_area)) + { + var_02 = strtok(self.script_destructable_area," "); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + blockarea(var_02[var_03]); + } + } + + if(isdefined(self.script_fxid)) + { + self.fx = loadfx(self.script_fxid); + } + + var_04 = 0; + self setcandamage(1); + for(;;) + { + self waittill("damage",var_05,var_06); + if(var_05 >= var_01) + { + var_04 = var_04 + var_05; + if(var_04 >= var_00) + { + thread func_272A(); + return; + } + } + } +} + +//Function Number: 3 +func_272A() +{ + var_00 = self; + if(isdefined(self.script_destructable_area)) + { + var_01 = strtok(self.script_destructable_area," "); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + func_272E(var_01[var_02]); + } + } + + if(isdefined(var_00.fx)) + { + playfx(var_00.fx,var_00.origin + (0,0,6)); + } + + var_00 delete(); +} + +//Function Number: 4 +blockarea(param_00) +{ + var_01 = getentarray("mp_tdm_spawn","classname"); + blockentsinarea(var_01,param_00); + var_01 = getentarray("mp_dm_spawn","classname"); + blockentsinarea(var_01,param_00); +} + +//Function Number: 5 +blockentsinarea(param_00,param_01) +{ + for(var_02 = 0;var_02 < param_00.size;var_02++) + { + if(!isdefined(param_00[var_02].script_destructable_area) || param_00[var_02].script_destructable_area != param_01) + { + continue; + } + + param_00[var_02].blockedoff = 1; + } +} + +//Function Number: 6 +func_272E(param_00) +{ + var_01 = getentarray("mp_tdm_spawn","classname"); + unblockentsinarea(var_01,param_00); + var_01 = getentarray("mp_dm_spawn","classname"); + unblockentsinarea(var_01,param_00); +} + +//Function Number: 7 +unblockentsinarea(param_00,param_01) +{ + for(var_02 = 0;var_02 < param_00.size;var_02++) + { + if(!isdefined(param_00[var_02].script_destructable_area) || param_00[var_02].script_destructable_area != param_01) + { + continue; + } + + param_00[var_02].blockedoff = 0; + } +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/_empgrenade.gsc b/MW3/Xbox/MP/maps/mp/_empgrenade.gsc new file mode 100644 index 0000000..ac0ea3e --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/_empgrenade.gsc @@ -0,0 +1,167 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\_empgrenade.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 9 + * Decompile Time: 159 ms + * Timestamp: 10/27/2023 2:28:53 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + precacheshellshock("flashbang_mp"); + thread onplayerconnect(); +} + +//Function Number: 2 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_00 thread onplayerspawned(); + } +} + +//Function Number: 3 +onplayerspawned() +{ + self endon("disconnect"); + for(;;) + { + self waittill("spawned_player"); + thread func_27AD(); + } +} + +//Function Number: 4 +func_27AD() +{ + self endon("death"); + self endon("disconnect"); + self endon("faux_spawn"); + self.empendtime = 0; + for(;;) + { + self waittill("emp_grenaded",var_00); + if(!isalive(self)) + { + continue; + } + + if(isdefined(self.usingremote)) + { + continue; + } + + if(maps\mp\_utility::func_27AF("specialty_empimmune")) + { + continue; + } + + var_01 = 1; + var_02 = 0; + if(level.teambased && isdefined(var_00) && isdefined(var_00.pers["team"]) && var_00.pers["team"] == self.pers["team"] && var_00 != self) + { + if(level.friendlyfire == 0) + { + continue; + } + else if(level.friendlyfire == 1) + { + var_02 = 0; + var_01 = 1; + } + else if(level.friendlyfire == 2) + { + var_01 = 0; + var_02 = 1; + } + else if(level.friendlyfire == 3) + { + var_02 = 1; + var_01 = 1; + } + } + else if(isdefined(var_00)) + { + var_00 notify("emp_hit"); + if(var_00 != self) + { + var_00 maps\mp\gametypes\_missions::processchallenge("ch_onthepulse"); + } + } + + if(var_01 && isdefined(self)) + { + thread func_27B0(); + } + + if(var_02 && isdefined(var_00)) + { + var_00 thread func_27B0(); + } + } +} + +//Function Number: 5 +func_27B0() +{ + self notify("applyEmp"); + self endon("applyEmp"); + self endon("death"); + wait 0.05; + self.var_27B1 = 10; + self.empgrenaded = 1; + self shellshock("flashbang_mp",1); + self.empendtime = gettime() + self.var_27B1 * 1000; + thread func_27B7(0.75); + self setempjammed(1); + thread func_27B3(); + wait self.var_27B1; + self notify("empGrenadeTimedOut"); + checktoturnoffemp(); +} + +//Function Number: 6 +func_27B3() +{ + self notify("empGrenadeDeathWaiter"); + self endon("empGrenadeDeathWaiter"); + self endon("empGrenadeTimedOut"); + self waittill("death"); + checktoturnoffemp(); +} + +//Function Number: 7 +checktoturnoffemp() +{ + self.empgrenaded = 0; + if((level.teambased && level.teamemped[self.team] || level.teamnukeemped[self.team]) || !level.teambased && isdefined(level.empplayer) && level.empplayer != self || !level.teambased && isdefined(level.nukeinfo.player) && level.nukeinfo.player != self) + { + return; + } + + self setempjammed(0); +} + +//Function Number: 8 +func_27B7(param_00) +{ + self endon("emp_rumble_loop"); + self notify("emp_rumble_loop"); + var_01 = gettime() + param_00 * 1000; + while(gettime() < var_01) + { + self playrumbleonentity("damage_heavy"); + wait 0.05; + } +} + +//Function Number: 9 +func_27B8() +{ + return isdefined(self.empendtime) && gettime() < self.empendtime; +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/_entityheadicons.gsc b/MW3/Xbox/MP/maps/mp/_entityheadicons.gsc new file mode 100644 index 0000000..a509743 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/_entityheadicons.gsc @@ -0,0 +1,358 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\_entityheadicons.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 10 + * Decompile Time: 183 ms + * Timestamp: 10/27/2023 2:27:41 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + if(isdefined(level.initedentityheadicons)) + { + return; + } + + level.initedentityheadicons = 1; + game["entity_headicon_allies"] = maps\mp\gametypes\_teams::func_2770("allies"); + game["entity_headicon_axis"] = maps\mp\gametypes\_teams::func_2770("axis"); + precacheshader(game["entity_headicon_allies"]); + precacheshader(game["entity_headicon_axis"]); + if(!level.teambased) + { + } +} + +//Function Number: 2 +func_277C(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A) +{ + if(!isdefined(self.entityheadicons)) + { + self.entityheadicons = []; + } + + if(!isdefined(param_05)) + { + param_05 = 1; + } + + if(!isdefined(param_06)) + { + param_06 = 0.05; + } + + if(!isdefined(param_07)) + { + param_07 = 1; + } + + if(!isdefined(param_08)) + { + param_08 = 1; + } + + if(!isdefined(param_09)) + { + param_09 = 0; + } + + if(!isdefined(param_0A)) + { + param_0A = 1; + } + + if(!isplayer(param_00) && param_00 == "none") + { + foreach(var_0D, var_0C in self.entityheadicons) + { + if(isdefined(var_0C)) + { + var_0C destroy(); + } + + self.entityheadicons[var_0D] = undefined; + } + + return; + } + + if(isplayer(param_03)) + { + if(isdefined(self.entityheadicons[param_03.guid])) + { + self.entityheadicons[param_03.guid] destroy(); + self.entityheadicons[param_03.guid] = undefined; + } + + if(param_04 == "") + { + return; + } + + if(isdefined(self.entityheadicons[param_03.team])) + { + self.entityheadicons[param_03.team] destroy(); + self.entityheadicons[param_03.team] = undefined; + } + + var_0C = newclienthudelem(param_03); + self.entityheadicons[param_02.guid] = var_0D; + } + else + { + if(isdefined(self.entityheadicons[param_03])) + { + self.entityheadicons[param_03] destroy(); + self.entityheadicons[param_03] = undefined; + } + + if(param_04 == "") + { + return; + } + + foreach(var_0E in self.entityheadicons) + { + if(var_10 == "axis" || var_10 == "allies") + { + continue; + } + + var_0F = maps\mp\_utility::getplayerforguid(var_10); + if(var_0F.team == param_01) + { + self.entityheadicons[var_10] destroy(); + self.entityheadicons[var_10] = undefined; + } + } + + var_0C = newteamhudelem(param_01); + self.entityheadicons[param_01] = var_0C; + } + + if(!isdefined(param_04) || !isdefined(param_05)) + { + param_04 = 10; + param_05 = 10; + } + + var_0C.archived = param_06; + var_0C.x = self.origin[0] + param_03[0]; + var_0C.y = self.origin[1] + param_03[1]; + var_0C.z = self.origin[2] + param_03[2]; + var_0C.alpha = 0.85; + var_0C setshader(param_02,param_04,param_05); + var_0C setwaypoint(param_08,param_09,param_0A,var_0B); + var_0C thread func_2781(self,param_03,param_07); + thread func_2780(); + if(isplayer(param_01)) + { + var_0C thread func_277F(param_01); + } + + if(isplayer(self)) + { + var_0C thread func_277F(self); + } + + return var_0C; +} + +//Function Number: 3 +func_277F(param_00) +{ + self endon("death"); + param_00 waittill("disconnect"); + self destroy(); +} + +//Function Number: 4 +func_2780() +{ + self notify("destroyIconsOnDeath"); + self endon("destroyIconsOnDeath"); + self waittill("death"); + foreach(var_01 in self.entityheadicons) + { + if(!isdefined(var_01)) + { + continue; + } + + var_01 destroy(); + } +} + +//Function Number: 5 +func_2781(param_00,param_01,param_02) +{ + self endon("death"); + param_00 endon("death"); + param_00 endon("disconnect"); + var_03 = param_00.origin; + for(;;) + { + if(!isdefined(param_00)) + { + return; + } + + if(var_03 != param_00.origin) + { + var_03 = param_00.origin; + self.x = var_03[0] + param_01[0]; + self.y = var_03[1] + param_01[1]; + self.z = var_03[2] + param_01[2]; + } + + if(param_02 > 0.05) + { + self.alpha = 0.85; + self fadeovertime(param_02); + self.alpha = 0; + } + + wait param_02; + } +} + +//Function Number: 6 +setteamheadicon(param_00,param_01) +{ + if(!level.teambased) + { + return; + } + + if(!isdefined(self.entityheadiconteam)) + { + self.entityheadiconteam = "none"; + self.entityheadicon = undefined; + } + + var_02 = game["entity_headicon_" + param_00]; + self.entityheadiconteam = param_00; + if(isdefined(param_01)) + { + self.entityheadiconoffset = param_01; + } + else + { + self.entityheadiconoffset = (0,0,0); + } + + self notify("kill_entity_headicon_thread"); + if(param_00 == "none") + { + if(isdefined(self.entityheadicon)) + { + self.entityheadicon destroy(); + } + + return; + } + + var_03 = newteamhudelem(param_00); + var_03.archived = 1; + var_03.x = self.origin[0] + self.entityheadiconoffset[0]; + var_03.y = self.origin[1] + self.entityheadiconoffset[1]; + var_03.z = self.origin[2] + self.entityheadiconoffset[2]; + var_03.alpha = 0.8; + var_03 setshader(var_02,10,10); + var_03 setwaypoint(0,0,0,1); + self.entityheadicon = var_03; + thread keepiconpositioned(); + thread destroyheadiconsondeath(); +} + +//Function Number: 7 +setplayerheadicon(param_00,param_01) +{ + if(level.teambased) + { + return; + } + + if(!isdefined(self.entityheadiconteam)) + { + self.entityheadiconteam = "none"; + self.entityheadicon = undefined; + } + + self notify("kill_entity_headicon_thread"); + if(!isdefined(param_00)) + { + if(isdefined(self.entityheadicon)) + { + self.entityheadicon destroy(); + } + + return; + } + + var_02 = param_00.team; + self.entityheadiconteam = var_02; + if(isdefined(param_01)) + { + self.entityheadiconoffset = param_01; + } + else + { + self.entityheadiconoffset = (0,0,0); + } + + var_03 = game["entity_headicon_" + var_02]; + var_04 = newclienthudelem(param_00); + var_04.archived = 1; + var_04.x = self.origin[0] + self.entityheadiconoffset[0]; + var_04.y = self.origin[1] + self.entityheadiconoffset[1]; + var_04.z = self.origin[2] + self.entityheadiconoffset[2]; + var_04.alpha = 0.8; + var_04 setshader(var_03,10,10); + var_04 setwaypoint(0,0,0,1); + self.entityheadicon = var_04; + thread keepiconpositioned(); + thread destroyheadiconsondeath(); +} + +//Function Number: 8 +keepiconpositioned() +{ + self endon("kill_entity_headicon_thread"); + self endon("death"); + var_00 = self.origin; + for(;;) + { + if(var_00 != self.origin) + { + func_2787(); + var_00 = self.origin; + } + + wait 0.05; + } +} + +//Function Number: 9 +destroyheadiconsondeath() +{ + self endon("kill_entity_headicon_thread"); + self waittill("death"); + if(!isdefined(self.entityheadicon)) + { + return; + } + + self.entityheadicon destroy(); +} + +//Function Number: 10 +func_2787() +{ + self.entityheadicon.x = self.origin[0] + self.entityheadiconoffset[0]; + self.entityheadicon.y = self.origin[1] + self.entityheadiconoffset[1]; + self.entityheadicon.z = self.origin[2] + self.entityheadiconoffset[2]; +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/_events.gsc b/MW3/Xbox/MP/maps/mp/_events.gsc new file mode 100644 index 0000000..52d617d --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/_events.gsc @@ -0,0 +1,832 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\_events.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 31 + * Decompile Time: 556 ms + * Timestamp: 10/27/2023 2:27:44 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + maps\mp\gametypes\_rank::registerscoreinfo("headshot",50); + maps\mp\gametypes\_rank::registerscoreinfo("execution",100); + maps\mp\gametypes\_rank::registerscoreinfo("avenger",50); + maps\mp\gametypes\_rank::registerscoreinfo("defender",50); + maps\mp\gametypes\_rank::registerscoreinfo("posthumous",25); + maps\mp\gametypes\_rank::registerscoreinfo("revenge",50); + maps\mp\gametypes\_rank::registerscoreinfo("double",50); + maps\mp\gametypes\_rank::registerscoreinfo("triple",75); + maps\mp\gametypes\_rank::registerscoreinfo("multi",100); + maps\mp\gametypes\_rank::registerscoreinfo("buzzkill",100); + maps\mp\gametypes\_rank::registerscoreinfo("firstblood",100); + maps\mp\gametypes\_rank::registerscoreinfo("comeback",100); + maps\mp\gametypes\_rank::registerscoreinfo("longshot",50); + maps\mp\gametypes\_rank::registerscoreinfo("assistedsuicide",100); + maps\mp\gametypes\_rank::registerscoreinfo("knifethrow",100); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("damage",0); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("heavy_damage",0); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("damaged",0); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("kill",1); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("killed",0); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("healed",0); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("headshot",0); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("melee",0); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("backstab",0); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("longshot",0); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("assistedsuicide",0); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("defender",0); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("avenger",0); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("execution",0); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("comeback",0); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("revenge",0); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("buzzkill",0); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("double",0); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("triple",0); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("multi",0); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("assist",0); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("firstBlood",0); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("capture",1); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("assistedCapture",1); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("plant",1); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("defuse",1); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("vehicleDestroyed",1); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("3streak",0); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("4streak",0); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("5streak",0); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("6streak",0); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("7streak",0); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("8streak",0); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("9streak",0); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("10streak",0); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("regen",0); + precacheshader("crosshair_red"); + level._effect["money"] = loadfx("props/cash_player_drop"); + level.numkills = 0; + level thread onplayerconnect(); +} + +//Function Number: 2 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_00.killedplayers = []; + var_00.killedplayerscurrent = []; + var_00.killedby = []; + var_00.lastkilledby = undefined; + var_00.greatestuniqueplayerkills = 0; + var_00.recentkillcount = 0; + var_00.lastkilltime = 0; + var_00.damagedplayers = []; + var_00 thread monitorcratejacking(); + var_00 thread func_2AC7(); + var_00 thread monitorhealed(); + } +} + +//Function Number: 3 +func_2A96(param_00,param_01,param_02) +{ + if(param_01 < 50 && param_01 > 10) + { + maps\mp\killstreaks\_killstreaks::giveadrenaline("damage"); + return; + } + + maps\mp\killstreaks\_killstreaks::giveadrenaline("heavy_damage"); +} + +//Function Number: 4 +func_2A97(param_00,param_01,param_02,param_03) +{ + var_04 = param_01.guid; + var_05 = self.guid; + var_06 = gettime(); + thread func_2AC5(param_00); + self.lastkilltime = gettime(); + self.lastkilledplayer = param_01; + self.modifiers = []; + level.numkills++; + self.damagedplayers[var_04] = undefined; + if(!maps\mp\_utility::func_2829(param_02) && !maps\mp\_utility::isjuggernaut() && !maps\mp\_utility::func_27AF("specialty_explosivebullets")) + { + if(param_02 == "none") + { + return 0; + } + + if(isdefined(self.pers["copyCatLoadout"]) && isdefined(self.pers["copyCatLoadout"]["owner"])) + { + if(param_01 == self.pers["copyCatLoadout"]["owner"]) + { + self.modifiers["clonekill"] = 1; + } + } + + if(param_01.attackers.size == 1 && !isdefined(param_01.attackers[param_01.guid])) + { + var_0A = maps\mp\_utility::getweaponclass(param_02); + if(var_0A == "weapon_sniper" && param_03 != "MOD_MELEE" && gettime() == param_01.attackerdata[self.guid].firsttimedamaged) + { + self.modifiers["oneshotkill"] = 1; + thread maps\mp\gametypes\_rank::xpeventpopup(&"SPLASHES_ONE_SHOT_KILL"); + } + } + + if(isdefined(param_01.throwinggrenade) && param_01.throwinggrenade == "frag_grenade_mp") + { + self.modifiers["cooking"] = 1; + } + + if(isdefined(self.assistedsuicide) && self.assistedsuicide) + { + assistedsuicide(param_00,param_02,param_03); + } + + if(level.numkills == 1) + { + func_2ABF(param_00,param_02,param_03); + } + + if(self.pers["cur_death_streak"] > 3) + { + func_2AC2(param_00,param_02,param_03); + } + + if(param_03 == "MOD_HEAD_SHOT") + { + if(isdefined(param_01.laststand)) + { + execution(param_00,param_02,param_03); + } + else + { + func_2AB7(param_00,param_02,param_03); + } + } + + if(isdefined(self.wasti) && self.wasti && gettime() - self.spawntime <= 5000) + { + self.modifiers["jackintheboxkill"] = 1; + } + + if(!isalive(self) && self.deathtime + 800 < gettime()) + { + postdeathkill(param_00); + } + + var_0B = 0; + if(level.teambased && var_06 - param_01.lastkilltime < 500) + { + if(param_01.lastkilledplayer != self) + { + func_2AB8(param_00,param_02,param_03); + } + } + + foreach(var_0E, var_0D in param_01.damagedplayers) + { + if(var_0E == self.guid) + { + continue; + } + + if(level.teambased && var_06 - var_0D < 500) + { + defendedplayer(param_00,param_02,param_03); + } + } + + if(isdefined(param_01.attackerposition)) + { + var_0F = param_01.attackerposition; + } + else + { + var_0F = self.origin; + } + + if(islongshot(self,param_02,param_03,var_0F,param_01)) + { + thread longshot(param_00,param_02,param_03); + } + + if(param_01.pers["cur_kill_streak"] > 0 && isdefined(param_01.killstreaks[param_01.pers["cur_kill_streak"] + 1])) + { + buzzkill(param_00,param_01,param_02,param_03); + } + + thread checkmatchdatakills(param_00,param_01,param_02,param_03); + } + + if(!isdefined(self.killedplayers[var_04])) + { + self.killedplayers[var_04] = 0; + } + + if(!isdefined(self.killedplayerscurrent[var_04])) + { + self.killedplayerscurrent[var_04] = 0; + } + + if(!isdefined(param_01.killedby[var_05])) + { + param_01.killedby[var_05] = 0; + } + + self.killedplayers[var_04]++; + if(self.killedplayers[var_04] > self.greatestuniqueplayerkills) + { + maps\mp\_utility::func_2AA1("killedsameplayer",self.killedplayers[var_04]); + } + + self.killedplayerscurrent[var_04]++; + param_01.killedby[var_05]++; + param_01.lastkilledby = self; +} + +//Function Number: 5 +islongshot(param_00,param_01,param_02,param_03,param_04) +{ + if(isalive(param_00) && !param_00 maps\mp\_utility::isusingremote() && param_02 == "MOD_RIFLE_BULLET" || param_02 == "MOD_PISTOL_BULLET" || param_02 == "MOD_HEAD_SHOT" && !maps\mp\_utility::func_2829(param_01) && !isdefined(param_00.assistedsuicide)) + { + var_05 = maps\mp\_utility::getweaponclass(param_01); + switch(var_05) + { + case "weapon_pistol": + var_06 = 800; + break; + + case "weapon_machine_pistol": + case "weapon_smg": + var_06 = 1200; + break; + + case "weapon_lmg": + case "weapon_assault": + var_06 = 1500; + break; + + case "weapon_sniper": + var_06 = 2000; + break; + + case "weapon_shotgun": + var_06 = 500; + break; + + case "weapon_projectile": + default: + var_06 = 1536; + break; + } + + if(distance(param_03,param_04.origin) > var_06) + { + if(param_00 isitemunlocked("specialty_holdbreath") && param_00 maps\mp\_utility::func_27AF("specialty_holdbreath")) + { + param_00 maps\mp\gametypes\_missions::processchallenge("ch_longdistance"); + } + + return 1; + } + } + + return 0; +} + +//Function Number: 6 +checkmatchdatakills(param_00,param_01,param_02,param_03) +{ + var_04 = maps\mp\_utility::getweaponclass(param_02); + var_05 = 0; + thread campercheck(); + if(isdefined(self.lastkilledby) && self.lastkilledby == param_01) + { + self.lastkilledby = undefined; + func_2ABC(param_00); + playfx(level._effect["money"],param_01 gettagorigin("j_spine4")); + } + + if(param_01.idflags & level.idflags_penetration) + { + maps\mp\_utility::incplayerstat("bulletpenkills",1); + } + + if(self.pers["rank"] < param_01.pers["rank"]) + { + maps\mp\_utility::incplayerstat("higherrankkills",1); + } + + if(self.pers["rank"] > param_01.pers["rank"]) + { + maps\mp\_utility::incplayerstat("lowerrankkills",1); + } + + if(isdefined(self.infinalstand) && self.infinalstand) + { + maps\mp\_utility::incplayerstat("laststandkills",1); + } + + if(isdefined(param_01.infinalstand) && param_01.infinalstand) + { + maps\mp\_utility::incplayerstat("laststanderkills",1); + } + + if(self getcurrentweapon() != self.primaryweapon && self getcurrentweapon() != self.secondaryweapon) + { + maps\mp\_utility::incplayerstat("otherweaponkills",1); + } + + var_06 = gettime() - param_01.spawntime; + if(!maps\mp\_utility::matchmakinggame()) + { + param_01 maps\mp\_utility::setplayerstatiflower("shortestlife",var_06); + } + + param_01 maps\mp\_utility::func_2AAA("longestlife",var_06); + if(param_03 != "MOD_MELEE") + { + switch(var_04) + { + case "weapon_pistol": + case "weapon_projectile": + case "weapon_shotgun": + case "weapon_lmg": + case "weapon_sniper": + case "weapon_assault": + case "weapon_smg": + func_2AAB(param_01,param_02,param_03,var_04); + break; + + case "weapon_explosive": + case "weapon_grenade": + func_2AAC(param_01,param_02,param_03); + break; + + default: + break; + } + } +} + +//Function Number: 7 +func_2AAB(param_00,param_01,param_02,param_03) +{ + var_04 = self; + var_05 = undefined; + var_06 = undefined; + var_07 = undefined; + switch(param_03) + { + case "weapon_pistol": + var_05 = "pistolkills"; + var_06 = "pistolheadshots"; + break; + + case "weapon_smg": + var_05 = "smgkills"; + var_06 = "smgheadshots"; + break; + + case "weapon_assault": + var_05 = "arkills"; + var_06 = "arheadshots"; + break; + + case "weapon_projectile": + if(weaponclass(param_01) == "rocketlauncher") + { + var_05 = "rocketkills"; + } + break; + + case "weapon_sniper": + var_05 = "sniperkills"; + var_06 = "sniperheadshots"; + break; + + case "weapon_shotgun": + var_05 = "shotgunkills"; + var_06 = "shotgunheadshots"; + var_07 = "shotgundeaths"; + break; + + case "weapon_lmg": + var_05 = "lmgkills"; + var_06 = "lmgheadshots"; + break; + + default: + break; + } + + if(isdefined(var_05)) + { + var_04 maps\mp\_utility::incplayerstat(var_05,1); + } + + if(isdefined(var_06) && param_02 == "MOD_HEAD_SHOT") + { + var_04 maps\mp\_utility::incplayerstat(var_06,1); + } + + if(isdefined(var_07) && !maps\mp\_utility::matchmakinggame()) + { + param_00 maps\mp\_utility::incplayerstat(var_07,1); + } + + if(var_04 playerads() > 0.5) + { + var_04 maps\mp\_utility::incplayerstat("adskills",1); + if(param_03 == "weapon_sniper" || issubstr(param_01,"acog")) + { + var_04 maps\mp\_utility::incplayerstat("scopedkills",1); + } + + if(issubstr(param_01,"thermal")) + { + var_04 maps\mp\_utility::incplayerstat("thermalkills",1); + return; + } + + return; + } + + var_04 maps\mp\_utility::incplayerstat("hipfirekills",1); +} + +//Function Number: 8 +func_2AAC(param_00,param_01,param_02) +{ + var_03 = self; + switch(param_01) + { + case "frag_grenade_mp": + var_03 maps\mp\_utility::incplayerstat("fragkills",1); + var_03 maps\mp\_utility::incplayerstat("grenadekills",1); + var_04 = 1; + break; + + case "c4_mp": + var_04 maps\mp\_utility::incplayerstat("c4kills",1); + var_04 = 1; + break; + + case "semtex_mp": + var_04 maps\mp\_utility::incplayerstat("semtexkills",1); + var_04 maps\mp\_utility::incplayerstat("grenadekills",1); + var_04 = 1; + break; + + case "claymore_mp": + var_04 maps\mp\_utility::incplayerstat("claymorekills",1); + var_04 = 1; + break; + + case "throwingknife_mp": + var_04 maps\mp\_utility::incplayerstat("throwingknifekills",1); + thread maps\mp\gametypes\_rank::xpeventpopup(&"SPLASHES_KNIFETHROW"); + var_04 = 1; + break; + + default: + var_04 = 0; + break; + } + + if(var_04) + { + var_03 maps\mp\_utility::incplayerstat("equipmentkills",1); + } +} + +//Function Number: 9 +campercheck() +{ + self.lastkillwascamping = 0; + if(!isdefined(self.lastkilllocation)) + { + self.lastkilllocation = self.origin; + self.lastcampkilltime = gettime(); + return; + } + + if(distance(self.lastkilllocation,self.origin) < 512 && gettime() - self.lastcampkilltime > 5000) + { + maps\mp\_utility::incplayerstat("mostcamperkills",1); + self.lastkillwascamping = 1; + } + + self.lastkilllocation = self.origin; + self.lastcampkilltime = gettime(); +} + +//Function Number: 10 +consolation(param_00) +{ +} + +//Function Number: 11 +proximityassist(param_00) +{ + self.modifiers["proximityAssist"] = 1; + thread maps\mp\gametypes\_rank::xpeventpopup(&"SPLASHES_PROXIMITYASSIST"); + thread maps\mp\gametypes\_rank::func_2AB3("proximityassist"); +} + +//Function Number: 12 +func_2AB4(param_00) +{ + self.modifiers["proximityKill"] = 1; + thread maps\mp\gametypes\_rank::xpeventpopup(&"SPLASHES_PROXIMITYKILL"); + thread maps\mp\gametypes\_rank::func_2AB3("proximitykill"); +} + +//Function Number: 13 +longshot(param_00,param_01,param_02) +{ + self.modifiers["longshot"] = 1; + thread maps\mp\gametypes\_rank::xpeventpopup(&"SPLASHES_LONGSHOT"); + thread maps\mp\gametypes\_rank::func_2AB3("longshot",undefined,param_01,param_02); + maps\mp\killstreaks\_killstreaks::giveadrenaline("longshot"); + maps\mp\_utility::incplayerstat("longshots",1); + thread maps\mp\_matchdata::func_28B4(param_00,"longshot"); +} + +//Function Number: 14 +execution(param_00,param_01,param_02) +{ + self.modifiers["execution"] = 1; + thread maps\mp\gametypes\_rank::xpeventpopup(&"SPLASHES_EXECUTION"); + thread maps\mp\gametypes\_rank::func_2AB3("execution",undefined,param_01,param_02); + maps\mp\killstreaks\_killstreaks::giveadrenaline("execution"); + thread maps\mp\_matchdata::func_28B4(param_00,"execution"); +} + +//Function Number: 15 +func_2AB7(param_00,param_01,param_02) +{ + self.modifiers["headshot"] = 1; + thread maps\mp\gametypes\_rank::xpeventpopup(&"SPLASHES_HEADSHOT"); + thread maps\mp\gametypes\_rank::func_2AB3("headshot",undefined,param_01,param_02); + maps\mp\killstreaks\_killstreaks::giveadrenaline("headshot"); + thread maps\mp\_matchdata::func_28B4(param_00,"headshot"); +} + +//Function Number: 16 +func_2AB8(param_00,param_01,param_02) +{ + self.modifiers["avenger"] = 1; + thread maps\mp\gametypes\_rank::xpeventpopup(&"SPLASHES_AVENGER"); + thread maps\mp\gametypes\_rank::func_2AB3("avenger",undefined,param_01,param_02); + maps\mp\killstreaks\_killstreaks::giveadrenaline("avenger"); + thread maps\mp\_matchdata::func_28B4(param_00,"avenger"); + maps\mp\_utility::incplayerstat("avengekills",1); +} + +//Function Number: 17 +assistedsuicide(param_00,param_01,param_02) +{ + self.modifiers["assistedsuicide"] = 1; + thread maps\mp\gametypes\_rank::xpeventpopup(&"SPLASHES_ASSISTEDSUICIDE"); + thread maps\mp\gametypes\_rank::func_2AB3("assistedsuicide",undefined,param_01,param_02); + maps\mp\killstreaks\_killstreaks::giveadrenaline("assistedsuicide"); + thread maps\mp\_matchdata::func_28B4(param_00,"assistedsuicide"); +} + +//Function Number: 18 +defendedplayer(param_00,param_01,param_02) +{ + self.modifiers["defender"] = 1; + thread maps\mp\gametypes\_rank::xpeventpopup(&"SPLASHES_DEFENDER"); + thread maps\mp\gametypes\_rank::func_2AB3("defender",undefined,param_01,param_02); + maps\mp\killstreaks\_killstreaks::giveadrenaline("defender"); + thread maps\mp\_matchdata::func_28B4(param_00,"defender"); + maps\mp\_utility::incplayerstat("rescues",1); +} + +//Function Number: 19 +postdeathkill(param_00) +{ + self.modifiers["posthumous"] = 1; + thread maps\mp\gametypes\_rank::xpeventpopup(&"SPLASHES_POSTHUMOUS"); + thread maps\mp\gametypes\_rank::func_2AB3("posthumous"); + thread maps\mp\_matchdata::func_28B4(param_00,"posthumous"); +} + +//Function Number: 20 +backstab(param_00) +{ + self iprintlnbold("backstab"); +} + +//Function Number: 21 +func_2ABC(param_00) +{ + self.modifiers["revenge"] = 1; + thread maps\mp\gametypes\_rank::xpeventpopup(&"SPLASHES_REVENGE"); + thread maps\mp\gametypes\_rank::func_2AB3("revenge"); + maps\mp\killstreaks\_killstreaks::giveadrenaline("revenge"); + thread maps\mp\_matchdata::func_28B4(param_00,"revenge"); + maps\mp\_utility::incplayerstat("revengekills",1); +} + +//Function Number: 22 +func_2ABD(param_00,param_01) +{ + if(param_01 == 2) + { + thread maps\mp\gametypes\_rank::xpeventpopup(&"SPLASHES_DOUBLEKILL"); + maps\mp\killstreaks\_killstreaks::giveadrenaline("double"); + } + else if(param_01 == 3) + { + thread maps\mp\gametypes\_rank::xpeventpopup(&"SPLASHES_TRIPLEKILL"); + maps\mp\killstreaks\_killstreaks::giveadrenaline("triple"); + thread maps\mp\_utility::teamplayercardsplash("callout_3xkill",self); + } + else + { + thread maps\mp\gametypes\_rank::xpeventpopup(&"SPLASHES_MULTIKILL"); + maps\mp\killstreaks\_killstreaks::giveadrenaline("multi"); + thread maps\mp\_utility::teamplayercardsplash("callout_3xpluskill",self); + } + + thread maps\mp\_matchdata::logmultikill(param_00,param_01); + maps\mp\_utility::func_2AAA("multikill",param_01); + maps\mp\_utility::incplayerstat("mostmultikills",1); +} + +//Function Number: 23 +func_2ABF(param_00,param_01,param_02) +{ + self.modifiers["firstblood"] = 1; + thread maps\mp\gametypes\_rank::xpeventpopup(&"SPLASHES_FIRSTBLOOD"); + thread maps\mp\gametypes\_rank::func_2AB3("firstblood",undefined,param_01,param_02); + thread maps\mp\_matchdata::func_28B4(param_00,"firstblood"); + maps\mp\killstreaks\_killstreaks::giveadrenaline("firstBlood"); + thread maps\mp\_utility::teamplayercardsplash("callout_firstblood",self); +} + +//Function Number: 24 +func_2AC0(param_00) +{ +} + +//Function Number: 25 +buzzkill(param_00,param_01,param_02,param_03) +{ + self.modifiers["buzzkill"] = param_01.pers["cur_kill_streak"]; + thread maps\mp\gametypes\_rank::xpeventpopup(&"SPLASHES_BUZZKILL"); + thread maps\mp\gametypes\_rank::func_2AB3("buzzkill",undefined,param_02,param_03); + maps\mp\killstreaks\_killstreaks::giveadrenaline("buzzkill"); + thread maps\mp\_matchdata::func_28B4(param_00,"buzzkill"); +} + +//Function Number: 26 +func_2AC2(param_00,param_01,param_02) +{ + self.modifiers["comeback"] = 1; + thread maps\mp\gametypes\_rank::xpeventpopup(&"SPLASHES_COMEBACK"); + thread maps\mp\gametypes\_rank::func_2AB3("comeback",undefined,param_01,param_02); + maps\mp\killstreaks\_killstreaks::giveadrenaline("comeback"); + thread maps\mp\_matchdata::func_28B4(param_00,"comeback"); + maps\mp\_utility::incplayerstat("comebacks",1); +} + +//Function Number: 27 +func_2AC3() +{ + var_00 = self.guid; + for(var_01 = 0;var_01 < level.players.size;var_01++) + { + if(isdefined(level.players[var_01].killedplayers[var_00])) + { + level.players[var_01].killedplayers[var_00] = undefined; + } + + if(isdefined(level.players[var_01].killedplayerscurrent[var_00])) + { + level.players[var_01].killedplayerscurrent[var_00] = undefined; + } + + if(isdefined(level.players[var_01].killedby[var_00])) + { + level.players[var_01].killedby[var_00] = undefined; + } + } +} + +//Function Number: 28 +monitorhealed() +{ + level endon("end_game"); + self endon("disconnect"); + for(;;) + { + self waittill("healed"); + maps\mp\killstreaks\_killstreaks::giveadrenaline("healed"); + } +} + +//Function Number: 29 +func_2AC5(param_00) +{ + self endon("disconnect"); + level endon("game_ended"); + self notify("updateRecentKills"); + self endon("updateRecentKills"); + self.recentkillcount++; + wait 1; + if(self.recentkillcount > 1) + { + func_2ABD(param_00,self.recentkillcount); + } + + self.recentkillcount = 0; +} + +//Function Number: 30 +monitorcratejacking() +{ + level endon("end_game"); + self endon("disconnect"); + for(;;) + { + self waittill("hijacker",var_00,var_01); + thread maps\mp\gametypes\_rank::xpeventpopup(&"SPLASHES_HIJACKER"); + thread maps\mp\gametypes\_rank::func_2AB3("hijacker",100); + var_02 = "hijacked_airdrop"; + var_03 = "ch_hijacker"; + switch(var_00) + { + case "sentry": + var_02 = "hijacked_sentry"; + break; + + case "juggernaut": + var_02 = "hijacked_juggernaut"; + break; + + case "remote_tank": + var_02 = "hijacked_remote_tank"; + break; + + case "mega": + case "emergency_airdrop": + var_02 = "hijacked_emergency_airdrop"; + var_03 = "ch_newjack"; + break; + + default: + break; + } + + if(isdefined(var_01)) + { + var_01 maps\mp\gametypes\_hud_message::playercardsplashnotify(var_02,self); + } + + self notify("process",var_03); + } +} + +//Function Number: 31 +func_2AC7() +{ + level endon("end_game"); + self endon("disconnect"); + for(;;) + { + self waittill("objective",var_00); + if(var_00 == "captured") + { + maps\mp\killstreaks\_killstreaks::giveadrenaline("capture"); + if(isdefined(self.laststand) && self.laststand) + { + thread maps\mp\gametypes\_hud_message::func_2701("heroic",100); + thread maps\mp\gametypes\_rank::func_2AB3("reviver",100); + } + } + + if(var_00 == "assistedCapture") + { + maps\mp\killstreaks\_killstreaks::giveadrenaline("assistedCapture"); + } + + if(var_00 == "plant") + { + maps\mp\killstreaks\_killstreaks::giveadrenaline("plant"); + } + + if(var_00 == "defuse") + { + maps\mp\killstreaks\_killstreaks::giveadrenaline("defuse"); + } + } +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/_flashgrenades.gsc b/MW3/Xbox/MP/maps/mp/_flashgrenades.gsc new file mode 100644 index 0000000..97d55a4 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/_flashgrenades.gsc @@ -0,0 +1,184 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\_flashgrenades.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 7 + * Decompile Time: 133 ms + * Timestamp: 10/27/2023 2:27:44 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + precacheshellshock("flashbang_mp"); +} + +//Function Number: 2 +startmonitoringflash() +{ + thread monitorflash(); +} + +//Function Number: 3 +stopmonitoringflash(param_00) +{ + self notify("stop_monitoring_flash"); +} + +//Function Number: 4 +func_2210(param_00) +{ + self endon("stop_monitoring_flash"); + self endon("flash_rumble_loop"); + self notify("flash_rumble_loop"); + var_01 = gettime() + param_00 * 1000; + while(gettime() < var_01) + { + self playrumbleonentity("damage_heavy"); + wait 0.05; + } +} + +//Function Number: 5 +monitorflash() +{ + self endon("disconnect"); + self.flashendtime = 0; + for(;;) + { + self waittill("flashbang",var_00,var_01,var_02,var_03); + if(!isalive(self)) + { + continue; + } + + if(isdefined(self.usingremote)) + { + continue; + } + + var_04 = 0; + var_05 = 1; + if(var_02 < 0.25) + { + var_02 = 0.25; + } + else if(var_02 > 0.8) + { + var_02 = 1; + } + + var_06 = var_01 * var_02 * 5.5; + if(isdefined(self.stunscaler)) + { + var_06 = var_06 * self.stunscaler; + } + + if(var_06 < 0.25) + { + continue; + } + + var_07 = undefined; + if(var_06 > 2) + { + var_07 = 0.75; + } + else + { + var_07 = 0.25; + } + + if(level.teambased && isdefined(var_03) && isdefined(var_03.pers["team"]) && var_03.pers["team"] == self.pers["team"] && var_03 != self) + { + if(level.friendlyfire == 0) + { + continue; + } + else if(level.friendlyfire == 1) + { + } + else if(level.friendlyfire == 2) + { + var_06 = var_06 * 0.5; + var_07 = var_07 * 0.5; + var_05 = 0; + var_04 = 1; + } + else if(level.friendlyfire == 3) + { + var_06 = var_06 * 0.5; + var_07 = var_07 * 0.5; + var_04 = 1; + } + } + else if(isdefined(var_03)) + { + var_03 notify("flash_hit"); + if(var_03 != self) + { + var_03 maps\mp\gametypes\_missions::processchallenge("ch_indecentexposure"); + } + } + + if(var_05 && isdefined(self)) + { + thread func_27AA(var_06,var_07); + if(isdefined(var_03) && var_03 != self) + { + var_03 thread maps\mp\gametypes\_damagefeedback::updatedamagefeedback("flash"); + var_08 = self; + if(isplayer(var_03) && var_03 isitemunlocked("specialty_paint") && var_03 maps\mp\_utility::func_27AF("specialty_paint")) + { + if(!var_08 maps\mp\perks\_perkfunctions::ispainted()) + { + var_03 maps\mp\gametypes\_missions::processchallenge("ch_paint_pro"); + } + + var_08 thread maps\mp\perks\_perkfunctions::func_2980(); + } + } + } + + if(var_04 && isdefined(var_03)) + { + var_03 thread func_27AA(var_06,var_07); + } + } +} + +//Function Number: 6 +func_27AA(param_00,param_01) +{ + if(!isdefined(self.flashduration) || param_00 > self.flashduration) + { + self.flashduration = param_00; + } + + if(!isdefined(self.flashrumbleduration) || param_01 > self.flashrumbleduration) + { + self.flashrumbleduration = param_01; + } + + wait 0.05; + if(isdefined(self.flashduration)) + { + self shellshock("flashbang_mp",self.flashduration); + self.flashendtime = gettime() + self.flashduration * 1000; + } + + if(isdefined(self.flashrumbleduration)) + { + thread func_2210(self.flashrumbleduration); + } + + self.flashduration = undefined; + self.flashrumbleduration = undefined; +} + +//Function Number: 7 +isflashbanged() +{ + return isdefined(self.flashendtime) && gettime() < self.flashendtime; +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/_fx.gsc b/MW3/Xbox/MP/maps/mp/_fx.gsc new file mode 100644 index 0000000..4cb13fa --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/_fx.gsc @@ -0,0 +1,101 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\_fx.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 7 + * Decompile Time: 131 ms + * Timestamp: 10/27/2023 2:27:45 AM +*******************************************************************/ + +//Function Number: 1 +script_print_fx() +{ + if(!isdefined(self.script_fxid) || !isdefined(self.script_fxcommand) || !isdefined(self.script_delay)) + { + self delete(); + return; + } + + if(isdefined(self.target)) + { + var_00 = getent(self.target).origin; + } + else + { + var_00 = "undefined"; + } + + if(self.script_fxcommand == "OneShotfx") + { + } + + if(self.script_fxcommand == "loopfx") + { + } + + if(self.script_fxcommand == "loopsound") + { + } +} + +//Function Number: 2 +script_playfx(param_00,param_01,param_02) +{ + if(!param_00) + { + return; + } + + if(isdefined(param_02)) + { + playfx(param_00,param_01,param_02); + return; + } + + playfx(param_00,param_01); +} + +//Function Number: 3 +script_playfxontag(param_00,param_01,param_02) +{ + if(!param_00) + { + return; + } + + playfxontag(param_00,param_01,param_02); +} + +//Function Number: 4 +grenadeexplosionfx(param_00) +{ + playfx(level._effect["mechanical explosion"],param_00); + earthquake(0.15,0.5,param_00,250); +} + +//Function Number: 5 +soundfx(param_00,param_01,param_02) +{ + var_03 = spawn("script_origin",(0,0,0)); + var_03.origin = param_01; + var_03 playloopsound(param_00); + if(isdefined(param_02)) + { + var_03 thread soundfxdelete(param_02); + } +} + +//Function Number: 6 +soundfxdelete(param_00) +{ + level waittill(param_00); + self delete(); +} + +//Function Number: 7 +blenddelete(param_00) +{ + self waittill("death"); + param_00 delete(); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/_global_fx.gsc b/MW3/Xbox/MP/maps/mp/_global_fx.gsc new file mode 100644 index 0000000..3b9ef13 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/_global_fx.gsc @@ -0,0 +1,93 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\_global_fx.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 3 + * Decompile Time: 64 ms + * Timestamp: 10/27/2023 2:27:45 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + var_00 = randomfloatrange(-20,-15); + global_fx("barrel_fireFX_origin","global_barrel_fire","fire/firelp_barrel_pm",var_00,"fire_barrel_small"); + global_fx("ch_streetlight_02_FX_origin","ch_streetlight_02_FX","misc/lighthaze",var_00); + global_fx("me_streetlight_01_FX_origin","me_streetlight_01_FX","misc/lighthaze_bog_a",var_00); + global_fx("ch_street_light_01_on","lamp_glow_FX","misc/light_glow_white",var_00); + global_fx("lamp_post_globe_on","lamp_glow_FX","misc/light_glow_white",var_00); + global_fx("highway_lamp_post","ch_streetlight_02_FX","misc/lighthaze_villassault",var_00); + global_fx("cs_cargoship_spotlight_on_FX_origin","cs_cargoship_spotlight_on_FX","misc/lighthaze",var_00); + global_fx("me_dumpster_fire_FX_origin","me_dumpster_fire_FX","fire/firelp_med_pm",var_00,"fire_dumpster_medium"); + global_fx("com_tires_burning01_FX_origin","com_tires_burning01_FX","fire/tire_fire_med",var_00); + global_fx("icbm_powerlinetower_FX_origin","icbm_powerlinetower_FX","misc/power_tower_light_red_blink",var_00); + global_fx("icbm_mainframe_FX_origin","icbm_mainframe_FX","props/icbm_mainframe_lightblink",var_00); + global_fx("light_pulse_red_FX_origin","light_pulse_red_FX","misc/light_glow_red_generic_pulse",-2); + global_fx("light_pulse_red_FX_origin","light_pulse_red_FX","misc/light_glow_red_generic_pulse",-2); + global_fx("light_pulse_orange_FX_origin","light_pulse_orange_FX","misc/light_glow_orange_generic_pulse",-2); + global_fx("light_red_blink_FX_origin","light_red_blink","misc/power_tower_light_red_blink",-2); + global_fx("lighthaze_oilrig_FX_origin","lighthaze_oilrig","misc/lighthaze_oilrig",var_00); + global_fx("lighthaze_white_FX_origin","lighthaze_white","misc/lighthaze_white",var_00); + global_fx("light_glow_walllight_white_FX_origin","light_glow_walllight_white","misc/light_glow_walllight_white",var_00); + global_fx("fluorescent_glow_FX_origin","fluorescent_glow","misc/fluorescent_glow",var_00); + global_fx("light_glow_industrial_FX_origin","light_glow_industrial","misc/light_glow_industrial",var_00); + global_fx("light_red_steady_FX_origin","light_red_steady","misc/tower_light_red_steady",-2); + global_fx("light_blue_steady_FX_origin","light_blue_steady","misc/tower_light_blue_steady",-2); + global_fx("light_orange_steady_FX_origin","light_orange_steady","misc/tower_light_orange_steady",-2); + global_fx("glow_stick_pile_FX_origin","glow_stick_pile","misc/glow_stick_glow_pile",-2); + global_fx("glow_stick_orange_pile_FX_origin","glow_stick_pile_orange","misc/glow_stick_glow_pile_orange",-2); + global_fx("highrise_blinky_tower","highrise_blinky_tower_FX","misc/power_tower_light_red_blink_large",var_00); + global_fx("flare_ambient_FX_origin","flare_ambient_FX","misc/flare_ambient",var_00,"emt_road_flare_burn"); + global_fx("light_glow_white_bulb_FX_origin","light_glow_white_bulb_FX","misc/light_glow_white_bulb",var_00); + global_fx("light_glow_white_lamp_FX_origin","light_glow_white_lamp_FX","misc/light_glow_white_lamp",var_00); +} + +//Function Number: 2 +global_fx(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = common_scripts\utility::getstructarray(param_00,"targetname"); + if(!isdefined(var_05)) + { + return; + } + + if(var_05.size <= 0) + { + return; + } + + for(var_06 = 0;var_06 < var_05.size;var_06++) + { + var_05[var_06] func_1798(param_01,param_02,param_03,param_04); + } +} + +//Function Number: 3 +func_1798(param_00,param_01,param_02,param_03) +{ + if(!isdefined(level._effect)) + { + level._effect = []; + } + + if(!isdefined(level._effect[param_00])) + { + level._effect[param_00] = loadfx(param_01); + } + + if(!isdefined(self.angles)) + { + self.angles = (0,0,0); + } + + var_04 = common_scripts\utility::createoneshoteffect(param_00); + var_04.v["origin"] = self.origin; + var_04.v["angles"] = self.angles; + var_04.v["fxid"] = param_00; + var_04.v["delay"] = param_02; + if(isdefined(param_03)) + { + var_04.v["soundalias"] = param_03; + } +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/_highlights.gsc b/MW3/Xbox/MP/maps/mp/_highlights.gsc new file mode 100644 index 0000000..9621398 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/_highlights.gsc @@ -0,0 +1,23 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\_highlights.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 1 + * Decompile Time: 33 ms + * Timestamp: 10/27/2023 2:27:46 AM +*******************************************************************/ + +//Function Number: 1 +func_2D71(param_00,param_01) +{ + var_02 = getclientmatchdata("highlightCount"); + if(var_02 < 18) + { + setclientmatchdata("highlights",var_02,"award",param_00); + setclientmatchdata("highlights",var_02,"clientId",self.clientmatchdataid); + setclientmatchdata("highlights",var_02,"value",param_01); + var_02++; + setclientmatchdata("highlightCount",var_02); + } +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/_javelin.gsc b/MW3/Xbox/MP/maps/mp/_javelin.gsc new file mode 100644 index 0000000..8009b96 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/_javelin.gsc @@ -0,0 +1,509 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\_javelin.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 15 + * Decompile Time: 281 ms + * Timestamp: 10/27/2023 2:27:47 AM +*******************************************************************/ + +//Function Number: 1 +func_27D0() +{ + self.javelinstage = undefined; + self.javelinpoints = undefined; + self.javelinnormals = undefined; + self.javelinlockmisses = undefined; + self.javelintargetpoint = undefined; + self.javelintargetnormal = undefined; + self.javelinlockstarttime = undefined; +} + +//Function Number: 2 +func_27D8() +{ + if(!isdefined(self.javelinuseentered)) + { + return; + } + + self.javelinuseentered = undefined; + self notify("stop_lockon_sound"); + self weaponlockfree(); + self weaponlocktargettooclose(0); + self weaponlocknoclearance(0); + self.currentlylocking = 0; + self.currentlylocked = 0; + self.javelintarget = undefined; + self stoplocalsound("javelin_clu_lock"); + self stoplocalsound("javelin_clu_aquiring_lock"); + func_27D0(); +} + +//Function Number: 3 +func_27DD() +{ + var_00 = self geteye(); + var_01 = self getplayerangles(); + var_02 = anglestoforward(var_01); + var_03 = var_00 + var_02 * 15000; + var_04 = bullettrace(var_00,var_03,0,undefined); + if(var_04["surfacetype"] == "none") + { + return undefined; + } + + if(var_04["surfacetype"] == "default") + { + return undefined; + } + + var_05 = var_04["entity"]; + if(isdefined(var_05)) + { + if(var_05 == level.ac130.planemodel) + { + return undefined; + } + } + + var_06 = []; + return var_41; +} + +//Function Number: 4 +func_27DE() +{ + self.javelinlockmisses = undefined; +} + +//Function Number: 5 +lockmissesincr() +{ + if(!isdefined(self.javelinlockmisses)) + { + self.javelinlockmisses = 1; + return; + } + + self.javelinlockmisses++; +} + +//Function Number: 6 +lockmissespassedthreshold() +{ + var_00 = 4; + if(isdefined(self.javelinlockmisses) && self.javelinlockmisses >= var_00) + { + return 1; + } + + return 0; +} + +//Function Number: 7 +targetpointtooclose(param_00) +{ + var_01 = 1100; + var_02 = distance(self.origin,param_00); + if(var_02 < var_01) + { + return 1; + } + + return 0; +} + +//Function Number: 8 +func_27E2(param_00,param_01) +{ + self endon("death"); + self endon("disconnect"); + self endon("stop_lockon_sound"); + for(;;) + { + self playlocalsound(param_00); + wait param_01; + } +} + +//Function Number: 9 +func_27E3(param_00,param_01) +{ + var_02 = param_00 + param_01 * 10; + var_03 = var_02 + (0,0,2000); + var_04 = bullettrace(var_02,var_03,0,undefined); + if(sighttracepassed(var_02,var_03,0,undefined)) + { + return 1; + } + + return 0; +} + +//Function Number: 10 +func_27E4() +{ + self endon("death"); + self endon("disconnect"); + self endon("faux_spawn"); + var_00 = 1150; + var_01 = 25; + var_02 = 100; + var_03 = 400; + var_04 = 12; + var_05 = 0; + var_06 = 0; + self.javelintarget = undefined; + func_27D0(); + for(;;) + { + wait 0.05; + var_07 = 0; + if(getdvar("missileDebugDraw") == "1") + { + var_07 = 1; + } + + var_08 = 0; + if(getdvar("missileDebugText") == "1") + { + var_08 = 1; + } + + var_09 = self getcurrentweapon(); + if(!issubstr(var_09,"javelin") || maps\mp\_utility::func_27E5()) + { + func_27D8(); + continue; + } + + if(self playerads() < 0.95) + { + var_06 = gettime(); + func_27D8(); + continue; + } + + self.javelinuseentered = 1; + if(!isdefined(self.javelinstage)) + { + self.javelinstage = 1; + } + + if(self.javelinstage == 1) + { + var_0A = maps\mp\_stinger::gettargetlist(); + if(var_0A.size != 0) + { + var_0B = []; + foreach(var_0D in var_0A) + { + var_0E = self worldpointinreticle_circle(var_0D.origin,65,40); + if(var_0E) + { + var_0B[var_0B.size] = var_0D; + } + } + + if(var_0B.size != 0) + { + var_10 = sortbydistance(var_0B,self.origin); + if(!vehiclelocksighttest(var_10[0])) + { + continue; + } + + if(var_08) + { + } + + self.javelintarget = var_10[0]; + if(!isdefined(self.javelinlockstarttime)) + { + self.javelinlockstarttime = gettime(); + } + + self.javelinstage = 2; + self.javelinlostsightlinetime = 0; + javelinlockvehicle(var_00); + self.javelinstage = 1; + continue; + } + } + + if(lockmissespassedthreshold()) + { + func_27D8(); + continue; + } + + var_11 = gettime() - var_06; + if(var_11 < var_02) + { + continue; + } + + var_11 = gettime() - var_05; + if(var_11 < var_01) + { + continue; + } + + var_05 = gettime(); + var_15 = func_27DD(); + if(!isdefined(var_15)) + { + lockmissesincr(); + continue; + } + + if(targetpointtooclose(var_15[0])) + { + self weaponlocktargettooclose(1); + continue; + } + else + { + self weaponlocktargettooclose(0); + } + + if(isdefined(self.javelinpoints)) + { + var_16 = averagepoint(self.javelinpoints); + var_17 = distance(var_16,var_15[0]); + if(var_17 > var_03) + { + lockmissesincr(); + continue; + } + } + else + { + self.javelinpoints = []; + self.javelinnormals = []; + } + + self.javelinpoints[self.javelinpoints.size] = var_15[0]; + self.javelinnormals[self.javelinnormals.size] = var_15[1]; + func_27DE(); + if(self.javelinpoints.size < var_04) + { + continue; + } + + self.javelintargetpoint = averagepoint(self.javelinpoints); + self.javelintargetnormal = averagenormal(self.javelinnormals); + self.javelinlockmisses = undefined; + self.javelinpoints = undefined; + self.javelinnormals = undefined; + self.javelinlockstarttime = gettime(); + self weaponlockstart(self.javelintargetpoint); + thread func_27E2("javelin_clu_aquiring_lock",0.6); + self.javelinstage = 2; + } + + if(self.javelinstage == 2) + { + var_0E = self worldpointinreticle_circle(self.javelintargetpoint,65,45); + if(!var_0E) + { + func_27D8(); + continue; + } + + if(targetpointtooclose(self.javelintargetpoint)) + { + self weaponlocktargettooclose(1); + } + else + { + self weaponlocktargettooclose(0); + } + + var_11 = gettime() - self.javelinlockstarttime; + if(var_11 < var_00) + { + continue; + } + + self weaponlockfinalize(self.javelintargetpoint,(0,0,0),1); + self notify("stop_lockon_sound"); + self playlocalsound("javelin_clu_lock"); + self.javelinstage = 3; + } + + if(self.javelinstage == 3) + { + var_0E = self worldpointinreticle_circle(self.javelintargetpoint,65,45); + if(!var_0E) + { + func_27D8(); + continue; + } + + if(targetpointtooclose(self.javelintargetpoint)) + { + self weaponlocktargettooclose(1); + } + else + { + self weaponlocktargettooclose(0); + } + + continue; + } + } +} + +//Function Number: 11 +func_27E7(param_00,param_01,param_02) +{ +} + +//Function Number: 12 +vehiclelocksighttest(param_00) +{ + var_01 = self geteye(); + var_02 = param_00 getpointinbounds(0,0,0); + var_03 = sighttracepassed(var_01,var_02,0,param_00); + func_27E7(var_01,var_02,var_03); + if(var_03) + { + return 1; + } + + var_04 = param_00 getpointinbounds(1,0,0); + var_03 = sighttracepassed(var_01,var_04,0,param_00); + func_27E7(var_01,var_04,var_03); + if(var_03) + { + return 1; + } + + var_05 = param_00 getpointinbounds(-1,0,0); + var_03 = sighttracepassed(var_01,var_05,0,param_00); + func_27E7(var_01,var_05,var_03); + if(var_03) + { + return 1; + } + + return 0; +} + +//Function Number: 13 +javelinlockvehicle(param_00) +{ + if(self.javelinstage == 2) + { + self weaponlockstart(self.javelintarget); + if(!stillvalidjavelinlock(self.javelintarget)) + { + func_27D8(); + self.javelinlockstarttime = undefined; + return; + } + + var_01 = func_27C9(); + if(!var_01) + { + self.javelinlockstarttime = undefined; + return; + } + + if(!isdefined(self.currentlylocking) || !self.currentlylocking) + { + thread func_27E2("javelin_clu_aquiring_lock",0.6); + self.currentlylocking = 1; + } + + var_02 = gettime() - self.javelinlockstarttime; + if(maps\mp\_utility::func_27AF("specialty_fasterlockon")) + { + if(var_02 < param_00 * 0.5) + { + return; + } + } + else if(var_02 < param_00) + { + return; + } + + if(isplayer(self.javelintarget)) + { + self weaponlockfinalize(self.javelintarget,(0,0,64),0); + } + else + { + self weaponlockfinalize(self.javelintarget,(0,0,0),0); + } + + self notify("stop_lockon_sound"); + if(!isdefined(self.currentlylocked) || !self.currentlylocked) + { + self playlocalsound("javelin_clu_lock"); + self.currentlylocked = 1; + } + + self.javelinstage = 3; + } + + if(self.javelinstage == 3) + { + var_01 = func_27C9(); + if(!var_01) + { + return; + } + + if(!stillvalidjavelinlock(self.javelintarget)) + { + func_27D8(); + return; + } + } +} + +//Function Number: 14 +stillvalidjavelinlock(param_00) +{ + if(!isdefined(param_00)) + { + return 0; + } + + if(!self worldpointinreticle_circle(param_00.origin,65,85)) + { + return 0; + } + + return 1; +} + +//Function Number: 15 +func_27C9() +{ + var_00 = 500; + if(vehiclelocksighttest(self.javelintarget)) + { + self.javelinlostsightlinetime = 0; + return 1; + } + + if(self.javelinlostsightlinetime == 0) + { + self.javelinlostsightlinetime = gettime(); + } + + var_01 = gettime() - self.javelinlostsightlinetime; + if(var_01 >= var_00) + { + func_27D8(); + return 0; + } + + return 1; +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/_load.gsc b/MW3/Xbox/MP/maps/mp/_load.gsc new file mode 100644 index 0000000..5f49665 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/_load.gsc @@ -0,0 +1,430 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\_load.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 7 + * Decompile Time: 144 ms + * Timestamp: 10/27/2023 2:27:48 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(isdefined(level._loadstarted)) + { + return; + } + + level._loadstarted = 1; + level.createfx_enabled = getdvar("createfx") != ""; + common_scripts\utility::struct_class_init(); + maps\mp\_utility::func_2B87(); + maps\mp\_utility::func_2B88(); + level.generic_index = 0; + level.flag_struct = spawnstruct(); + level.flag_struct common_scripts\utility::assign_unique_id(); + if(!isdefined(level.flag)) + { + level.flag = []; + level.flags_lock = []; + } + + level.requiredmapaspectratio = getdvarfloat("scr_RequiredMapAspectratio",1); + level.createclientfontstring_func = ::maps\mp\gametypes\_hud_util::createfontstring; + level.hudsetpoint_func = ::maps\mp\gametypes\_hud_util::setpoint; + level.leaderdialogonplayer_func = ::maps\mp\_utility::func_2A60; + thread maps\mp\gametypes\_tweakables::init(); + if(!isdefined(level.func)) + { + level.func = []; + } + + level.func["precacheMpAnim"] = ::precachempanim; + level.func["scriptModelPlayAnim"] = ::scriptmodelplayanim; + level.func["scriptModelClearAnim"] = ::scriptmodelclearanim; + if(!level.createfx_enabled) + { + thread maps\mp\_minefields::func_2715(); + thread maps\mp\_radiation::func_2719(); + thread maps\mp\_shutter::main(); + thread maps\mp\_destructables::init(); + thread common_scripts\_elevator::init(); + thread common_scripts\_dynamic_world::init(); + thread common_scripts\_destructible::init(); + thread common_scripts\_pipes::main(); + } + + if(getmapcustom("thermal") == "invert") + { + game["thermal_vision"] = "thermal_snowlevel_mp"; + setthermalbodymaterial("thermalbody_snowlevel"); + } + else + { + game["thermal_vision"] = "thermal_mp"; + } + + visionsetnaked("",0); + visionsetnight("default_night_mp"); + visionsetmissilecam("missilecam"); + visionsetthermal(game["thermal_vision"]); + visionsetpain("near_death_mp",0); + var_00 = getentarray("lantern_glowFX_origin","targetname"); + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + var_00[var_01] thread func_2B8D(); + } + + maps\mp\_audio::func_2B8B(); + maps\mp\_art::main(); + setupexploders(); + thread common_scripts\_fx::initfx(); + if(level.createfx_enabled) + { + maps\mp\_createfx::createfx(); + } + + if(getdvar("r_reflectionProbeGenerate") == "1") + { + maps\mp\gametypes\_spawnlogic::func_2B8C(); + maps\mp\_global_fx::main(); + level waittill("eternity"); + } + + thread maps\mp\_global_fx::main(); + for(var_02 = 0;var_02 < 6;var_02++) + { + switch(var_02) + { + case 0: + var_03 = "trigger_multiple"; + break; + + case 1: + var_03 = "trigger_once"; + break; + + case 2: + var_03 = "trigger_use"; + break; + + case 3: + var_03 = "trigger_radius"; + break; + + case 4: + var_03 = "trigger_lookat"; + break; + + default: + var_03 = "trigger_damage"; + break; + } + + var_04 = getentarray(var_03,"classname"); + for(var_01 = 0;var_01 < var_04.size;var_01++) + { + if(isdefined(var_04[var_01].script_prefab_exploder)) + { + var_04[var_01].script_exploder = var_04[var_01].script_prefab_exploder; + } + + if(isdefined(var_04[var_01].script_exploder)) + { + level thread exploder_load(var_04[var_01]); + } + } + } + + var_05 = getentarray("trigger_hurt","classname"); + foreach(var_07 in var_05) + { + var_07 thread hurtplayersthink(); + } + + thread maps\mp\_animatedmodels::main(); + level.func["damagefeedback"] = ::maps\mp\gametypes\_damagefeedback::updatedamagefeedback; + level.func["setTeamHeadIcon"] = ::maps\mp\_entityheadicons::setteamheadicon; + level.laseron_func = ::laseron; + level.laseroff_func = ::laseroff; + setdvar("sm_sunShadowScale",1); + setdvar("sm_spotLightScoreModelScale",0); + setdvar("r_specularcolorscale",2.5); + setdvar("r_diffusecolorscale",1); + setdvar("r_lightGridEnableTweaks",0); + setdvar("r_lightGridIntensity",1); + setdvar("r_lightGridContrast",0); + setupdestructiblekillcaments(); + precacheitem("bomb_site_mp"); + level.fauxvehiclecount = 0; +} + +//Function Number: 2 +exploder_load(param_00) +{ + level endon("killexplodertridgers" + param_00.script_exploder); + param_00 waittill("trigger"); + if(isdefined(param_00.script_chance) && randomfloat(1) > param_00.script_chance) + { + if(isdefined(param_00.script_delay)) + { + wait param_00.script_delay; + } + else + { + wait 4; + } + + level thread exploder_load(param_00); + return; + } + + common_scripts\utility::exploder(param_00.script_exploder); + level notify("killexplodertridgers" + param_00.script_exploder); +} + +//Function Number: 3 +setupexploders() +{ + var_00 = getentarray("script_brushmodel","classname"); + var_01 = getentarray("script_model","classname"); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + var_00[var_00.size] = var_01[var_02]; + } + + for(var_02 = 0;var_02 < var_00.size;var_02++) + { + if(isdefined(var_00[var_02].script_prefab_exploder)) + { + var_00[var_02].script_exploder = var_00[var_02].script_prefab_exploder; + } + + if(isdefined(var_00[var_02].script_exploder)) + { + if(var_00[var_02].model == "fx" && !isdefined(var_00[var_02].targetname) || var_00[var_02].targetname != "exploderchunk") + { + var_00[var_02] hide(); + continue; + } + + if(isdefined(var_00[var_02].targetname) && var_00[var_02].targetname == "exploder") + { + var_00[var_02] hide(); + var_00[var_02] notsolid(); + continue; + } + + if(isdefined(var_00[var_02].targetname) && var_00[var_02].targetname == "exploderchunk") + { + var_00[var_02] hide(); + var_00[var_02] notsolid(); + } + } + } + + var_03 = []; + var_04 = getentarray("script_brushmodel","classname"); + for(var_02 = 0;var_02 < var_04.size;var_02++) + { + if(isdefined(var_04[var_02].script_prefab_exploder)) + { + var_04[var_02].script_exploder = var_04[var_02].script_prefab_exploder; + } + + if(isdefined(var_04[var_02].script_exploder)) + { + var_03[var_03.size] = var_04[var_02]; + } + } + + var_04 = getentarray("script_model","classname"); + for(var_02 = 0;var_02 < var_04.size;var_02++) + { + if(isdefined(var_04[var_02].script_prefab_exploder)) + { + var_04[var_02].script_exploder = var_04[var_02].script_prefab_exploder; + } + + if(isdefined(var_04[var_02].script_exploder)) + { + var_03[var_03.size] = var_04[var_02]; + } + } + + var_04 = getentarray("item_health","classname"); + for(var_02 = 0;var_02 < var_04.size;var_02++) + { + if(isdefined(var_04[var_02].script_prefab_exploder)) + { + var_04[var_02].script_exploder = var_04[var_02].script_prefab_exploder; + } + + if(isdefined(var_04[var_02].script_exploder)) + { + var_03[var_03.size] = var_04[var_02]; + } + } + + if(!isdefined(level.createfxent)) + { + level.createfxent = []; + } + + var_05 = []; + for(var_03 = 0;var_03 < var_04.size;var_03++ = var_41["exploder"]) + { + var_06 = var_04[var_03]; + var_07 = common_scripts\utility::createexploder(var_06.script_fxid); + var_07.v = []; + var_07.v["origin"] = var_06.origin; + var_07.v["angles"] = var_06.angles; + var_07.v["delay"] = var_06.script_delay; + var_07.v["firefx"] = var_06.script_firefx; + var_07.v["firefxdelay"] = var_06.script_firefxdelay; + var_07.v["firefxsound"] = var_06.script_firefxsound; + var_07.v["firefxtimeout"] = var_06.script_firefxtimeout; + var_07.v["earthquake"] = var_06.script_earthquake; + var_07.v["damage"] = var_06.script_damage; + var_07.v["damage_radius"] = var_06.script_radius; + var_07.v["soundalias"] = var_06.script_soundalias; + var_07.v["repeat"] = var_06.script_repeat; + var_07.v["delay_min"] = var_06.script_delay_min; + var_07.v["delay_max"] = var_06.script_delay_max; + var_07.v["target"] = var_06.target; + var_07.v["ender"] = var_06.script_ender; + var_07.v["type"] = "exploder"; + if(!isdefined(var_06.script_fxid)) + { + var_07.v["fxid"] = "No FX"; + } + else + { + var_07.v["fxid"] = var_06.script_fxid; + } + + var_07.v["exploder"] = var_06.script_exploder; + if(!isdefined(var_07.v["delay"])) + { + var_07.v["delay"] = 0; + } + + if(isdefined(var_06.target)) + { + var_08 = getent(var_07.v["target"],"targetname").origin; + var_07.v["angles"] = vectortoangles(var_08 - var_07.v["origin"]); + } + + if(var_06.classname == "script_brushmodel" || isdefined(var_06.model)) + { + var_07.model = var_06; + var_07.model.disconnect_paths = var_06.script_disconnectpaths; + } + + if(isdefined(var_06.targetname) && isdefined(var_41[var_06.targetname])) + { + var_07.v["exploder_type"] = var_06.targetname; + } + else + { + var_07.v["exploder_type"] = "normal"; + } + + var_07 common_scripts\_createfx::post_entity_creation_function(); + } +} + +//Function Number: 4 +func_2B8D() +{ + if(!isdefined(level._effect["lantern_light"])) + { + level._effect["lantern_light"] = loadfx("props/glow_latern"); + } + + common_scripts\_fx::loopfx("lantern_light",self.origin,0.3,self.origin + (0,0,1)); +} + +//Function Number: 5 +hurtplayersthink() +{ + level endon("game_ended"); + wait randomfloat(1); + for(;;) + { + foreach(var_01 in level.players) + { + if(var_01 istouching(self) && maps\mp\_utility::isreallyalive(var_01)) + { + var_01 maps\mp\_utility::_suicide(); + } + } + + wait 0.5; + } +} + +//Function Number: 6 +setupdestructiblekillcaments() +{ + var_00 = getentarray("destructible_vehicle","targetname"); + foreach(var_02 in var_00) + { + switch(getdvar("mapname")) + { + case "mp_interchange": + if(var_02.origin[2] > 150) + { + break; + } + break; + } + + var_03 = var_02.origin + (0,0,5); + var_04 = var_02.origin + (0,0,128); + var_05 = bullettrace(var_03,var_04,0,var_02); + var_02.killcament = spawn("script_model",var_05["position"]); + var_02.killcament.targetname = "killCamEnt_destructible_vehicle"; + var_02.killcament setscriptmoverkillcam("explosive"); + var_02 thread func_2B90(); + } + + var_07 = getentarray("destructible_toy","targetname"); + foreach(var_02 in var_07) + { + var_03 = var_02.origin + (0,0,5); + var_04 = var_02.origin + (0,0,128); + var_05 = bullettrace(var_03,var_04,0,var_02); + var_02.killcament = spawn("script_model",var_05["position"]); + var_02.killcament.targetname = "killCamEnt_destructible_toy"; + var_02.killcament setscriptmoverkillcam("explosive"); + var_02 thread func_2B90(); + } + + var_0A = getentarray("explodable_barrel","targetname"); + foreach(var_02 in var_0A) + { + var_03 = var_02.origin + (0,0,5); + var_04 = var_02.origin + (0,0,128); + var_05 = bullettrace(var_03,var_04,0,var_02); + var_02.killcament = spawn("script_model",var_05["position"]); + var_02.killcament.targetname = "killCamEnt_explodable_barrel"; + var_02.killcament setscriptmoverkillcam("explosive"); + var_02 thread func_2B90(); + } +} + +//Function Number: 7 +func_2B90() +{ + level endon("game_ended"); + var_00 = self.killcament; + var_00 endon("death"); + self waittill("death"); + wait 10; + if(isdefined(var_00)) + { + var_00 delete(); + } +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/_matchdata.gsc b/MW3/Xbox/MP/maps/mp/_matchdata.gsc new file mode 100644 index 0000000..58fd553 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/_matchdata.gsc @@ -0,0 +1,709 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\_matchdata.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 25 + * Decompile Time: 450 ms + * Timestamp: 10/27/2023 2:27:50 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + if(!isdefined(game["gamestarted"])) + { + setmatchdatadef("mp/matchdata.def"); + setmatchdata("map",level.script); + if(level.hardcoremode) + { + var_00 = level.gametype + " hc"; + setmatchdata("gametype",var_00); + } + else + { + setmatchdata("gametype",level.gametype); + } + + setmatchdata("buildVersion",getbuildversion()); + setmatchdata("buildNumber",getbuildnumber()); + setmatchdata("dateTime",getsystemtime()); + setmatchdataid(); + } + + level.maxlives = 285; + level.maxnamelength = 26; + level.maxevents = 150; + level.maxkillstreaks = 125; + level.maxlogclients = 30; + level.maxnumchallengesperplayer = 10; + level.maxnumawardsperplayer = 10; + level thread gameendlistener(); + level thread func_28D2(); +} + +//Function Number: 2 +getmatchdatetime() +{ + return getmatchdata("dateTime"); +} + +//Function Number: 3 +logkillstreakevent(param_00,param_01) +{ + if(!canlogclient(self) || !canlogkillstreak()) + { + return; + } + + var_02 = getmatchdata("killstreakCount"); + setmatchdata("killstreakCount",var_02 + 1); + setmatchdata("killstreaks",var_02,"eventType",param_00); + setmatchdata("killstreaks",var_02,"player",self.clientid); + setmatchdata("killstreaks",var_02,"eventTime",gettime()); + setmatchdata("killstreaks",var_02,"eventPos",0,int(param_01[0])); + setmatchdata("killstreaks",var_02,"eventPos",1,int(param_01[1])); + setmatchdata("killstreaks",var_02,"eventPos",2,int(param_01[2])); +} + +//Function Number: 4 +loggameevent(param_00,param_01) +{ + if(!canlogclient(self) || !canlogevent()) + { + return; + } + + var_02 = getmatchdata("eventCount"); + setmatchdata("eventCount",var_02 + 1); + setmatchdata("events",var_02,"eventType",param_00); + setmatchdata("events",var_02,"player",self.clientid); + setmatchdata("events",var_02,"eventTime",gettime()); + setmatchdata("events",var_02,"eventPos",0,int(param_01[0])); + setmatchdata("events",var_02,"eventPos",1,int(param_01[1])); + setmatchdata("events",var_02,"eventPos",2,int(param_01[2])); +} + +//Function Number: 5 +func_28B4(param_00,param_01) +{ + if(!canloglife(param_00)) + { + return; + } + + setmatchdata("lives",param_00,"modifiers",param_01,1); +} + +//Function Number: 6 +logmultikill(param_00,param_01) +{ + if(!canloglife(param_00)) + { + return; + } + + setmatchdata("lives",param_00,"multikill",param_01); +} + +//Function Number: 7 +func_28B6(param_00) +{ + if(!canlogclient(self) || !canloglife(param_00)) + { + return; + } + + setmatchdata("lives",param_00,"player",self.clientid); + setmatchdata("lives",param_00,"spawnPos",0,int(self.spawnpos[0])); + setmatchdata("lives",param_00,"spawnPos",1,int(self.spawnpos[1])); + setmatchdata("lives",param_00,"spawnPos",2,int(self.spawnpos[2])); + setmatchdata("lives",param_00,"wasTacticalInsertion",self.wasti); + setmatchdata("lives",param_00,"team",self.team); + setmatchdata("lives",param_00,"spawnTime",self.spawntime); + setmatchdata("lives",param_00,"duration",gettime() - self.spawntime); + func_28BB(param_00); +} + +//Function Number: 8 +logplayerxp(param_00,param_01) +{ + if(!canlogclient(self)) + { + return; + } + + setmatchdata("players",self.clientid,param_01,param_00); +} + +//Function Number: 9 +func_28BB(param_00) +{ + if(!canlogclient(self) || !canloglife(param_00) || self.curclass == "gamemode") + { + return; + } + + var_01 = self.curclass; + if(var_01 == "copycat") + { + var_02 = self.pers["copyCatLoadout"]; + var_03 = var_02["loadoutPrimary"]; + var_04 = var_02["loadoutPrimaryAttachment"]; + var_05 = var_02["loadoutPrimaryAttachment2"]; + var_06 = var_02["loadoutPrimaryCamo"]; + var_07 = var_02["loadoutPrimaryBuff"]; + var_08 = var_02["loadoutSecondary"]; + var_09 = var_02["loadoutSecondaryAttachment"]; + var_0A = var_02["loadoutSecondaryAttachment2"]; + var_0B = var_02["loadoutSecondaryCamo"]; + var_0C = var_02["loadoutSecondaryBuff"]; + var_0D = var_02["loadoutEquipment"]; + var_0E = var_02["loadoutPerk1"]; + var_0F = var_02["loadoutPerk2"]; + var_10 = var_02["loadoutPerk3"]; + var_11 = var_02["loadoutOffhand"]; + var_12 = var_02["loadoutDeathstreak"]; + var_13 = var_02["loadoutStreakType"]; + var_14 = var_02["loadoutKillstreak1"]; + var_15 = var_02["loadoutKillstreak2"]; + var_16 = var_02["loadoutKillstreak3"]; + } + else if(issubstr(var_16,"custom")) + { + var_17 = maps\mp\gametypes\_class::func_28BD(var_16); + var_03 = maps\mp\gametypes\_class::func_282D(var_17,0); + var_04 = maps\mp\gametypes\_class::cac_getweaponattachment(var_17,0); + var_05 = maps\mp\gametypes\_class::func_28BF(var_17,0); + var_08 = maps\mp\gametypes\_class::func_282D(var_17,1); + var_09 = maps\mp\gametypes\_class::cac_getweaponattachment(var_17,1); + var_0A = maps\mp\gametypes\_class::func_28BF(var_17,1); + var_11 = maps\mp\gametypes\_class::cac_getoffhand(var_17); + var_0D = maps\mp\gametypes\_class::func_28C1(var_17,0); + var_0E = maps\mp\gametypes\_class::func_28C1(var_17,1); + var_0F = maps\mp\gametypes\_class::func_28C1(var_17,2); + var_10 = maps\mp\gametypes\_class::func_28C1(var_17,3); + var_13 = maps\mp\gametypes\_class::func_28C1(var_17,5); + var_12 = maps\mp\gametypes\_class::cac_getdeathstreak(var_17); + var_07 = maps\mp\gametypes\_class::cac_getweaponbuff(var_17,0); + var_0C = maps\mp\gametypes\_class::cac_getweaponbuff(var_17,1); + var_14 = maps\mp\gametypes\_class::func_28C4(var_17,var_13,0); + var_15 = maps\mp\gametypes\_class::func_28C4(var_17,var_13,1); + var_16 = maps\mp\gametypes\_class::func_28C4(var_17,var_13,2); + } + else + { + var_17 = maps\mp\gametypes\_class::func_28BD(var_17); + var_03 = maps\mp\gametypes\_class::func_28C6(level.classtablename,var_17,0); + var_04 = maps\mp\gametypes\_class::func_28C7(level.classtablename,var_17,0,0); + var_05 = maps\mp\gametypes\_class::func_28C7(level.classtablename,var_17,0,1); + var_08 = maps\mp\gametypes\_class::func_28C6(level.classtablename,var_17,1); + var_09 = maps\mp\gametypes\_class::func_28C7(level.classtablename,var_17,1,0); + var_0A = maps\mp\gametypes\_class::func_28C7(level.classtablename,var_17,1,1); + var_11 = maps\mp\gametypes\_class::table_getoffhand(level.classtablename,var_17); + var_0D = maps\mp\gametypes\_class::table_getequipment(level.classtablename,var_17,0); + var_0E = maps\mp\gametypes\_class::func_28CA(level.classtablename,var_17,1); + var_0F = maps\mp\gametypes\_class::func_28CA(level.classtablename,var_17,2); + var_10 = maps\mp\gametypes\_class::func_28CA(level.classtablename,var_17,3); + var_13 = maps\mp\gametypes\_class::func_28CA(level.classtablename,var_17,5); + var_12 = maps\mp\gametypes\_class::table_getdeathstreak(level.classtablename,var_17); + var_07 = maps\mp\gametypes\_class::table_getweaponbuff(level.classtablename,var_17,0); + var_0C = maps\mp\gametypes\_class::table_getweaponbuff(level.classtablename,var_17,1); + var_14 = maps\mp\gametypes\_class::table_getkillstreak(level.classtablename,var_17,1); + var_15 = maps\mp\gametypes\_class::table_getkillstreak(level.classtablename,var_17,2); + var_16 = maps\mp\gametypes\_class::table_getkillstreak(level.classtablename,var_17,3); + } + + var_04 = maps\mp\_utility::validateattachment(var_04); + var_05 = maps\mp\_utility::validateattachment(var_05); + var_09 = maps\mp\_utility::validateattachment(var_09); + var_0A = maps\mp\_utility::validateattachment(var_0A); + setmatchdata("lives",param_00,"primaryWeapon",var_03); + setmatchdata("lives",param_00,"primaryAttachments",0,var_04); + setmatchdata("lives",param_00,"primaryAttachments",1,var_05); + setmatchdata("lives",param_00,"secondaryWeapon",var_08); + setmatchdata("lives",param_00,"secondaryAttachments",0,var_09); + setmatchdata("lives",param_00,"secondaryAttachments",1,var_09); + setmatchdata("lives",param_00,"offhandWeapon",var_11); + setmatchdata("lives",param_00,"equipment",var_0D); + setmatchdata("lives",param_00,"perks",0,var_0E); + setmatchdata("lives",param_00,"perks",1,var_0F); + setmatchdata("lives",param_00,"perks",2,var_10); + setmatchdata("lives",param_00,"strikePackage",var_13); + setmatchdata("lives",param_00,"deathstreak",var_12); + setmatchdata("lives",param_00,"weaponBuff",0,var_07); + setmatchdata("lives",param_00,"weaponBuff",1,var_0C); + switch(var_13) + { + case "streaktype_assault": + setmatchdata("lives",param_00,"assaultStreaks",0,var_14); + setmatchdata("lives",param_00,"assaultStreaks",1,var_15); + setmatchdata("lives",param_00,"assaultStreaks",2,var_16); + break; + + case "streaktype_support": + setmatchdata("lives",param_00,"defenseStreaks",0,var_14); + setmatchdata("lives",param_00,"defenseStreaks",1,var_15); + setmatchdata("lives",param_00,"defenseStreaks",2,var_16); + break; + + case "streaktype_specialist": + setmatchdata("lives",param_00,"specialistStreaks",0,var_14); + setmatchdata("lives",param_00,"specialistStreaks",1,var_15); + setmatchdata("lives",param_00,"specialistStreaks",2,var_16); + break; + + case "none": + break; + } +} + +//Function Number: 10 +func_28CF(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + if(!canlogclient(self) || isplayer(param_01) && !canlogclient(param_01) || !canloglife(param_00)) + { + return; + } + + if(param_00 >= level.maxlives) + { + return; + } + + if(param_04 == "none") + { + var_07 = "none"; + var_08 = "none"; + } + else + { + var_07 = weaponinventorytype(param_06); + var_08 = weaponclass(param_05); + } + + if(issubstr(param_04,"destructible")) + { + param_04 = "destructible"; + } + + if(isdefined(var_07) && var_07 == "primary" || var_07 == "altmode" && var_08 == "pistol" || var_08 == "smg" || var_08 == "rifle" || var_08 == "spread" || var_08 == "mg" || var_08 == "grenade" || var_08 == "rocketlauncher" || var_08 == "sniper") + { + var_09 = undefined; + if(var_07 == "altmode") + { + var_09 = param_04; + param_04 = param_05; + setmatchdata("lives",param_00,"altMode",1); + } + + var_0A = strtok(param_04,"_"); + if(var_0A[0] == "iw5") + { + var_0F = var_0A[0] + "_" + var_0A[1]; + setmatchdata("lives",param_00,"weapon",var_0F); + if(isdefined(var_0A[3]) && issubstr(var_0A[3],"scope") && issubstr(var_0A[3],"vz")) + { + var_0A[3] = "vzscope"; + } + + if(isdefined(var_0A[4]) && issubstr(var_0A[4],"scope") && issubstr(var_0A[4],"vz")) + { + var_0A[4] = "vzscope"; + } + + if(isdefined(var_0A[3]) && issubstr(var_0A[3],"scope") && !issubstr(var_0A[3],"vz")) + { + var_0A[3] = undefined; + } + + if(isdefined(var_0A[4]) && issubstr(var_0A[4],"scope") && !issubstr(var_0A[4],"vz")) + { + var_0A[4] = undefined; + } + + if(isdefined(var_0A[3]) && maps\mp\_utility::isattachment(var_0A[3])) + { + var_10 = maps\mp\_utility::validateattachment(var_0A[3]); + setmatchdata("lives",param_00,"attachments",0,var_10); + } + + if(isdefined(var_0A[4]) && maps\mp\_utility::isattachment(var_0A[4])) + { + var_10 = maps\mp\_utility::validateattachment(var_0A[4]); + setmatchdata("lives",param_00,"attachments",1,var_10); + } + } + else if(var_0A[0] == "alt") + { + var_0F = var_0A[1] + "_" + var_0A[2]; + setmatchdata("lives",param_00,"weapon",var_0F); + if(isdefined(var_0A[4]) && maps\mp\_utility::isattachment(var_0A[4])) + { + var_10 = maps\mp\_utility::validateattachment(var_0A[4]); + setmatchdata("lives",param_00,"attachments",0,var_10); + } + + if(isdefined(var_0A[5]) && maps\mp\_utility::isattachment(var_0A[5])) + { + var_10 = maps\mp\_utility::validateattachment(var_0A[5]); + setmatchdata("lives",param_00,"attachments",1,var_10); + } + } + else + { + var_0A[var_0A.size - 1] = undefined; + setmatchdata("lives",param_00,"weapon",var_0A[0]); + if(isdefined(var_0A[1]) && var_07 != "altmode") + { + var_10 = maps\mp\_utility::validateattachment(var_0A[1]); + setmatchdata("lives",param_00,"attachments",0,var_10); + } + + if(isdefined(var_0A[2]) && var_07 != "altmode") + { + var_10 = maps\mp\_utility::validateattachment(var_0A[2]); + setmatchdata("lives",param_00,"attachments",1,var_10); + } + } + } + else if(var_07 == "item" || var_07 == "offhand") + { + var_11 = maps\mp\_utility::strip_suffix(param_04,"_mp"); + setmatchdata("lives",param_00,"weapon",var_11); + } + else + { + setmatchdata("lives",param_00,"weapon",param_04); + } + + if(maps\mp\_utility::func_2829(param_04)) + { + setmatchdata("lives",param_00,"modifiers","killstreak",1); + } + + setmatchdata("lives",param_00,"mod",param_03); + if(isplayer(param_01)) + { + setmatchdata("lives",param_00,"attacker",param_01.clientid); + setmatchdata("lives",param_00,"attackerPos",0,int(param_01.origin[0])); + setmatchdata("lives",param_00,"attackerPos",1,int(param_01.origin[1])); + setmatchdata("lives",param_00,"attackerPos",2,int(param_01.origin[2])); + var_12 = anglestoforward((0,self.angles[1],0)); + var_13 = self.origin - param_01.origin; + var_13 = vectornormalize((var_13[0],var_13[1],0)); + setmatchdata("lives",param_00,"dotOfDeath",vectordot(var_12,var_13)); + if(param_01 maps\mp\_utility::isjuggernaut()) + { + setmatchdata("lives",param_00,"attackerIsJuggernaut",1); + } + } + else + { + setmatchdata("lives",param_00,"attacker",255); + setmatchdata("lives",param_00,"attackerPos",0,int(self.origin[0])); + setmatchdata("lives",param_00,"attackerPos",1,int(self.origin[1])); + setmatchdata("lives",param_00,"attackerPos",2,int(self.origin[2])); + } + + setmatchdata("lives",param_00,"player",self.clientid); + setmatchdata("lives",param_00,"deathPos",0,int(self.origin[0])); + setmatchdata("lives",param_00,"deathPos",1,int(self.origin[1])); + setmatchdata("lives",param_00,"deathPos",2,int(self.origin[2])); + setmatchdata("lives",param_00,"deathAngles",0,int(self.angles[0])); + setmatchdata("lives",param_00,"deathAngles",1,int(self.angles[1])); + setmatchdata("lives",param_00,"deathAngles",2,int(self.angles[2])); +} + +//Function Number: 11 +logplayerdata() +{ + if(!canlogclient(self)) + { + return; + } + + setmatchdata("players",self.clientid,"score",maps\mp\_utility::getpersstat("score")); + if(maps\mp\_utility::getpersstat("assists") > 255) + { + setmatchdata("players",self.clientid,"assists",255); + } + else + { + setmatchdata("players",self.clientid,"assists",maps\mp\_utility::getpersstat("assists")); + } + + if(maps\mp\_utility::getpersstat("longestStreak") > 255) + { + setmatchdata("players",self.clientid,"longestStreak",255); + return; + } + + setmatchdata("players",self.clientid,"longestStreak",maps\mp\_utility::getpersstat("longestStreak")); +} + +//Function Number: 12 +func_28D2() +{ + level waittill("game_ended"); + foreach(var_01 in level.players) + { + wait 0.05; + if(!isdefined(var_01)) + { + continue; + } + + if(isdefined(var_01.detectedexploit) && var_01.detectedexploit) + { + var_01 setplayerdata("restXPGoal",var_01.detectedexploit); + } + + if(isdefined(var_01.weaponsused)) + { + var_01 doublebubblesort(); + var_02 = 0; + if(var_01.weaponsused.size > 3) + { + for(var_03 = var_01.weaponsused.size - 1;var_03 > var_01.weaponsused.size - 3;var_03--) + { + var_01 setplayerdata("round","weaponsUsed",var_02,var_01.weaponsused[var_03]); + var_01 setplayerdata("round","weaponXpEarned",var_02,var_01.weaponxpearned[var_03]); + var_02++; + } + } + else + { + for(var_03 = var_01.weaponsused.size - 1;var_03 >= 0;var_03--) + { + var_01 setplayerdata("round","weaponsUsed",var_02,var_01.weaponsused[var_03]); + var_01 setplayerdata("round","weaponXpEarned",var_02,var_01.weaponxpearned[var_03]); + var_02++; + } + } + } + else + { + var_01 setplayerdata("round","weaponsUsed",0,"none"); + var_01 setplayerdata("round","weaponsUsed",1,"none"); + var_01 setplayerdata("round","weaponsUsed",2,"none"); + var_01 setplayerdata("round","weaponXpEarned",0,0); + var_01 setplayerdata("round","weaponXpEarned",1,0); + var_01 setplayerdata("round","weaponXpEarned",2,0); + } + + if(isdefined(var_01.challengescompleted)) + { + var_01 setplayerdata("round","challengeNumCompleted",var_01.challengescompleted.size); + } + else + { + var_01 setplayerdata("round","challengeNumCompleted",0); + } + + for(var_03 = 0;var_03 < 20;var_03++) + { + if(isdefined(var_01.challengescompleted) && isdefined(var_01.challengescompleted[var_03]) && var_01.challengescompleted[var_03] != "ch_prestige" && !issubstr(var_01.challengescompleted[var_03],"_daily") && !issubstr(var_01.challengescompleted[var_03],"_weekly")) + { + var_01 setplayerdata("round","challengesCompleted",var_03,var_01.challengescompleted[var_03]); + continue; + } + + var_01 setplayerdata("round","challengesCompleted",var_03,""); + } + } +} + +//Function Number: 13 +doublebubblesort() +{ + var_00 = self.weaponxpearned; + var_01 = self.weaponxpearned.size; + for(var_02 = var_01 - 1;var_02 > 0;var_02--) + { + for(var_03 = 1;var_03 <= var_02;var_03++) + { + if(var_00[var_03 - 1] < var_00[var_03]) + { + var_04 = self.weaponsused[var_03]; + self.weaponsused[var_03] = self.weaponsused[var_03 - 1]; + self.weaponsused[var_03 - 1] = var_04; + var_05 = self.weaponxpearned[var_03]; + self.weaponxpearned[var_03] = self.weaponxpearned[var_03 - 1]; + self.weaponxpearned[var_03 - 1] = var_05; + var_00 = self.weaponxpearned; + } + } + } +} + +//Function Number: 14 +gameendlistener() +{ + level waittill("game_ended"); + foreach(var_01 in level.players) + { + var_01 logplayerdata(); + if(!isalive(var_01)) + { + continue; + } + + var_02 = maps\mp\_utility::func_28D8(); + var_01 func_28B6(var_02); + } +} + +//Function Number: 15 +canlogclient(param_00) +{ + return param_00.clientid < level.maxlogclients; +} + +//Function Number: 16 +canlogevent() +{ + return getmatchdata("eventCount") < level.maxevents; +} + +//Function Number: 17 +canlogkillstreak() +{ + return getmatchdata("killstreakCount") < level.maxkillstreaks; +} + +//Function Number: 18 +canloglife(param_00) +{ + return getmatchdata("lifeCount") < level.maxlives; +} + +//Function Number: 19 +logweaponstat(param_00,param_01,param_02) +{ + if(!canlogclient(self)) + { + return; + } + + if(maps\mp\_utility::func_2829(param_00)) + { + return; + } + + var_03 = getmatchdata("players",self.clientid,"weaponStats",param_00,param_01); + if(param_01 == "kills" || param_01 == "deaths" || param_01 == "headShots") + { + if(var_03 + param_02 > 255) + { + setmatchdata("players",self.clientid,"weaponStats",param_00,param_01,255); + } + else + { + setmatchdata("players",self.clientid,"weaponStats",param_00,param_01,var_03 + param_02); + } + } + + setmatchdata("players",self.clientid,"weaponStats",param_00,param_01,var_03 + param_02); +} + +//Function Number: 20 +func_28DE(param_00,param_01,param_02) +{ + if(!canlogclient(self)) + { + return; + } + + var_03 = getmatchdata("players",self.clientid,"attachmentsStats",param_00,param_01); + setmatchdata("players",self.clientid,"attachmentsStats",param_00,param_01,var_03 + param_02); +} + +//Function Number: 21 +func_28DF() +{ + var_00 = []; + var_01 = 149; + for(var_02 = 0;var_02 <= var_01;var_02++) + { + var_03 = tablelookup("mp/statstable.csv",0,var_02,4); + if(var_03 == "") + { + continue; + } + + if(!issubstr(tablelookup("mp/statsTable.csv",0,var_02,2),"weapon_")) + { + continue; + } + + if(tablelookup("mp/statsTable.csv",0,var_02,2) == "weapon_other") + { + continue; + } + + var_00[var_00.size] = var_03; + } + + return var_00; +} + +//Function Number: 22 +func_28E0(param_00,param_01) +{ + if(!canlogclient(self)) + { + return; + } + + if(issubstr(param_00,"_daily") || issubstr(param_00,"_weekly")) + { + return; + } + + var_02 = getmatchdata("players",self.clientid,"challengeCount"); + if(var_02 < level.maxnumchallengesperplayer) + { + setmatchdata("players",self.clientid,"challenge",var_02,param_00); + setmatchdata("players",self.clientid,"tier",var_02,param_01); + setmatchdata("players",self.clientid,"challengeCount",var_02 + 1); + } +} + +//Function Number: 23 +logaward(param_00) +{ + if(!canlogclient(self)) + { + return; + } + + var_01 = getmatchdata("players",self.clientid,"awardCount"); + if(var_01 < level.maxnumawardsperplayer) + { + setmatchdata("players",self.clientid,"awards",var_01,param_00); + setmatchdata("players",self.clientid,"awardCount",var_01 + 1); + } +} + +//Function Number: 24 +func_80EF() +{ + if(!canlogclient(self)) + { + return; + } + + setmatchdata("players",self.clientid,"killsConfirmed",self.pers["confirmed"]); +} + +//Function Number: 25 +func_80F0() +{ + if(!canlogclient(self)) + { + return; + } + + setmatchdata("players",self.clientid,"killsDenied",self.pers["denied"]); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/_matchevents.gsc b/MW3/Xbox/MP/maps/mp/_matchevents.gsc new file mode 100644 index 0000000..ddcb8ff --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/_matchevents.gsc @@ -0,0 +1,356 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\_matchevents.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 13 + * Decompile Time: 227 ms + * Timestamp: 10/27/2023 2:27:50 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level.match_events_fx["smoke"] = loadfx("smoke/smoke_grenade_11sec_mp"); + level.match_events_fx["tracer"] = loadfx("misc/tracer_incoming"); + level.match_events_fx["explosion"] = loadfx("explosions/building_explosion_huge_gulag"); + level.matchevents["mortar"] = ::domortar; + level.matchevents["smoke"] = ::func_2ED3; + level.matchevents["airstrike"] = ::func_2ED4; + level.matchevents["pavelow"] = ::func_2EDA; + level.matchevents["heli_insertion"] = ::func_2EDB; + level.matchevents["osprey_insertion"] = ::func_2EDC; + level.matcheventstarted = 0; +} + +//Function Number: 2 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_00 thread onplayerspawned(); + } +} + +//Function Number: 3 +onplayerspawned() +{ + self endon("disconnect"); + level endon("matchevent_started"); + self waittill("spawned_player"); + if(level.matcheventstarted == 0) + { + level.matcheventstarted = 1; + if(common_scripts\utility::cointoss()) + { + self thread [[ common_scripts\utility::random(level.matchevents) ]](); + } + + level notify("matchevent_started"); + } +} + +//Function Number: 4 +getmapcenter() +{ + if(isdefined(level.mapcenter)) + { + return level.mapcenter; + } + + var_00 = getentarray("mp_tdm_spawn_allies_start","classname"); + var_01 = getentarray("mp_tdm_spawn_axis_start","classname"); + if(isdefined(var_00) && isdefined(var_00[0]) && isdefined(var_01) && isdefined(var_01[0])) + { + var_02 = distance(var_00[0].origin,var_01[0].origin) / 2; + var_03 = vectortoangles(var_00[0].origin - var_01[0].origin); + var_03 = vectornormalize(var_03); + return var_00[0].origin + var_03 * var_02; + } + + return (0,0,0); +} + +//Function Number: 5 +getstartspawns() +{ + var_00 = getentarray("mp_tdm_spawn_allies_start","classname"); + var_01 = getentarray("mp_tdm_spawn_axis_start","classname"); + if(isdefined(var_00) && isdefined(var_00[0]) && isdefined(var_01) && isdefined(var_01[0])) + { + var_02 = []; + return var_41; + } + + return undefined; +} + +//Function Number: 6 +domortar() +{ + var_00 = getmapcenter(); + var_01 = 1; + for(var_02 = 0;var_02 < 5;var_02++) + { + var_03 = var_00 + (randomintrange(100,600) * var_01,randomintrange(100,600) * var_01,0); + var_04 = bullettrace(var_03 + (0,0,500),var_03 - (0,0,500),0); + if(isdefined(var_04["position"])) + { + playfx(level.match_events_fx["tracer"],var_03); + thread maps\mp\_utility::func_2ED2("fast_artillery_round",var_03); + wait randomfloatrange(0.5,1.5); + playfx(level.match_events_fx["explosion"],var_03); + playrumbleonposition("grenade_rumble",var_03); + earthquake(1,0.6,var_03,2000); + thread maps\mp\_utility::func_2ED2("exp_suitcase_bomb_main",var_03); + physicsexplosionsphere(var_03 + (0,0,30),250,125,2); + var_01 = var_01 * -1; + } + } +} + +//Function Number: 7 +func_2ED3() +{ + var_00 = getmapcenter(); + var_01 = 1; + for(var_02 = 0;var_02 < 3;var_02++) + { + var_03 = var_00 + (randomintrange(100,600) * var_01,randomintrange(100,600) * var_01,0); + playfx(level.match_events_fx["smoke"],var_03); + var_01 = var_01 * -1; + wait 2; + } +} + +//Function Number: 8 +func_2ED4() +{ + level endon("game_ended"); + var_00 = 1; + var_01 = getmapcenter(); + for(var_02 = 0;var_02 < 3;var_02++) + { + var_03 = var_01 + (randomintrange(100,600) * var_00,randomintrange(100,600) * var_00,0); + var_04 = bullettrace(var_03 + (0,0,500),var_03 - (0,0,500),0); + if(isdefined(var_04["position"])) + { + thread doairstrikeflyby(var_04["position"]); + var_00 = var_00 * -1; + wait randomintrange(2,4); + } + } +} + +//Function Number: 9 +doairstrikeflyby(param_00) +{ + var_01 = randomint(level.spawnpoints.size - 1); + var_02 = level.spawnpoints[var_01].origin * (1,1,0); + var_03 = 8000; + var_04 = 8000; + var_05 = getent("airstrikeheight","targetname"); + var_06 = (0,0,var_05.origin[2] + randomintrange(-100,600)); + var_07 = anglestoforward((0,randomint(45),0)); + var_08 = var_02 + var_06 + var_07 * var_03 * -1; + var_09 = var_02 + var_06 + var_07 * var_04; + var_0A = var_08 + (randomintrange(400,500),randomintrange(400,500),randomintrange(200,300)); + var_0B = var_09 + (randomintrange(400,500),randomintrange(400,500),randomintrange(200,300)); + var_0C = spawnplane(self,"script_model",var_08); + var_0D = spawnplane(self,"script_model",var_0A); + if(common_scripts\utility::cointoss()) + { + var_0C setmodel("vehicle_av8b_harrier_jet_mp"); + var_0D setmodel("vehicle_av8b_harrier_jet_mp"); + } + else + { + var_0C setmodel("vehicle_av8b_harrier_jet_opfor_mp"); + var_0D setmodel("vehicle_av8b_harrier_jet_opfor_mp"); + } + + var_0C.angles = vectortoangles(var_09 - var_08); + var_0C playloopsound("veh_mig29_dist_loop"); + var_0C thread func_2ED7(); + var_0D.angles = vectortoangles(var_09 - var_0A); + var_0D playloopsound("veh_mig29_dist_loop"); + var_0D thread func_2ED7(); + var_0E = distance(var_08,var_09); + var_0C moveto(var_09 * 2,var_0E / 2000,0,0); + wait randomfloatrange(0.25,0.5); + var_0D moveto(var_0B * 2,var_0E / 2000,0,0); + wait var_0E / 2000; + var_0C delete(); + var_0D delete(); +} + +//Function Number: 10 +func_2ED7() +{ + self endon("death"); + wait 0.5; + playfxontag(level.fx_airstrike_afterburner,self,"tag_engine_right"); + wait 0.5; + playfxontag(level.fx_airstrike_afterburner,self,"tag_engine_left"); + wait 0.5; + playfxontag(level.fx_airstrike_contrail,self,"tag_right_wingtip"); + wait 0.5; + playfxontag(level.fx_airstrike_contrail,self,"tag_left_wingtip"); +} + +//Function Number: 11 +func_2EDA() +{ + var_00 = getmapcenter(); + var_01 = bullettrace(var_00 + (0,0,500),var_00 - (0,0,500),0); + if(isdefined(var_01["position"])) + { + if(common_scripts\utility::cointoss()) + { + var_02 = "vehicle_pavelow"; + } + else + { + var_02 = "vehicle_pavelow_opfor"; + } + + var_03 = spawnhelicopter(self,var_01["position"] + (0,0,1000),(0,0,0),"pavelow_mp",var_02); + if(!isdefined(var_03)) + { + return; + } + + var_03.team = self.pers["team"]; + var_03.heli_type = level.heli_types[var_02]; + var_03 thread [[ level.lightfxfunc[level.heli_types[var_02]] ]](); + var_03.zoffset = (0,0,var_03 gettagorigin("tag_origin")[2] - var_03 gettagorigin("tag_ground")[2]); + wait 1; + playfxontag(level.chopper_fx["damage"]["on_fire"],var_03,"tag_engine_left"); + var_03 thread maps\mp\killstreaks\_helicopter::func_2C24(); + } +} + +//Function Number: 12 +func_2EDB() +{ + var_00 = getstartspawns(); + if(isdefined(var_00)) + { + var_01 = 200; + var_02 = 200; + var_03 = 1000; + var_04 = anglestoforward(var_00["allies"][0].angles) * 300; + var_05 = anglestoup(var_00["allies"][0].angles) * var_01; + var_06 = anglestoright(var_00["allies"][0].angles) * 200; + var_07 = anglestoright(var_00["allies"][0].angles) * -200; + var_08 = var_00["allies"][0].origin + var_04 + var_05 + var_06; + var_09 = var_00["allies"][0].origin + var_04 + var_05 + var_07; + var_0A = spawnhelicopter(self,var_08,var_00["allies"][0].angles,"attack_littlebird_mp","vehicle_little_bird_bench"); + var_0B = spawnhelicopter(self,var_09,var_00["allies"][0].angles,"attack_littlebird_mp","vehicle_little_bird_bench"); + var_0C = anglestoforward(var_00["axis"][0].angles) * 300; + var_0D = anglestoup(var_00["axis"][0].angles) * var_01; + var_0E = anglestoright(var_00["axis"][0].angles) * 200; + var_0F = anglestoright(var_00["axis"][0].angles) * -200; + var_10 = var_00["axis"][0].origin + var_0C + var_0D + var_0E; + var_11 = var_00["axis"][0].origin + var_0C + var_0D + var_0F; + var_12 = spawnhelicopter(self,var_10,var_00["axis"][0].angles,"attack_littlebird_mp","vehicle_little_bird_bench"); + var_13 = spawnhelicopter(self,var_11,var_00["axis"][0].angles,"attack_littlebird_mp","vehicle_little_bird_bench"); + var_0A vehicle_setspeed(20,10); + var_0A setyawspeed(3,3,3,0.3); + var_0A setvehgoalpos(var_08 + (0,0,var_02),1); + var_0B vehicle_setspeed(20,10); + var_0B setyawspeed(3,3,3,0.3); + var_0B setvehgoalpos(var_09 + (0,0,var_02),1); + var_12 vehicle_setspeed(20,10); + var_12 setyawspeed(3,3,3,0.3); + var_12 setvehgoalpos(var_10 + (0,0,var_02),1); + var_13 vehicle_setspeed(20,10); + var_13 setyawspeed(3,3,3,0.3); + var_13 setvehgoalpos(var_11 + (0,0,var_02),1); + var_0A waittill("goal"); + wait 2; + var_0A vehicle_setspeed(80,60); + var_0A setyawspeed(30,15,15,0.3); + var_0A setvehgoalpos(var_08 + (0,0,var_03) + var_06 * 2,1); + var_0B vehicle_setspeed(80,60); + var_0B setyawspeed(30,15,15,0.3); + var_0B setvehgoalpos(var_09 + (0,0,var_03) + var_07 * 2,1); + var_12 vehicle_setspeed(80,60); + var_12 setyawspeed(30,15,15,0.3); + var_12 setvehgoalpos(var_10 + (0,0,var_03) + var_0E * 2,1); + var_13 vehicle_setspeed(80,60); + var_13 setyawspeed(30,15,15,0.3); + var_13 setvehgoalpos(var_11 + (0,0,var_03) + var_0F * 2,1); + var_0A waittill("goal"); + var_0A vehicle_setspeed(120,120); + var_0A setyawspeed(60,40,40,0.3); + var_0A setvehgoalpos(var_08 + (0,0,var_03) + var_06 * 2 + var_04 * -20,1); + var_0B vehicle_setspeed(120,120); + var_0B setyawspeed(60,40,40,0.3); + var_0B setvehgoalpos(var_09 + (0,0,var_03) + var_07 * 2 + var_04 * -20,1); + var_12 vehicle_setspeed(120,120); + var_12 setyawspeed(60,40,40,0.3); + var_12 setvehgoalpos(var_10 + (0,0,var_03) + var_0E * 2 + var_0C * -20,1); + var_13 vehicle_setspeed(120,120); + var_13 setyawspeed(60,40,40,0.3); + var_13 setvehgoalpos(var_11 + (0,0,var_03) + var_0F * 2 + var_0C * -20,1); + var_0A waittill("goal"); + var_0A delete(); + var_0B delete(); + var_12 delete(); + var_13 delete(); + } +} + +//Function Number: 13 +func_2EDC() +{ + var_00 = getstartspawns(); + if(isdefined(var_00)) + { + var_01 = 200; + var_02 = 200; + var_03 = 1000; + var_04 = anglestoforward(var_00["allies"][0].angles) * 300; + var_05 = anglestoup(var_00["allies"][0].angles) * var_01; + var_06 = var_00["allies"][0].origin + var_04 + var_05; + var_07 = spawnhelicopter(self,var_06,var_00["allies"][0].angles,"osprey_minigun_mp","vehicle_v22_osprey_body_mp"); + var_08 = anglestoforward(var_00["axis"][0].angles) * 300; + var_09 = anglestoup(var_00["axis"][0].angles) * var_01; + var_0A = var_00["axis"][0].origin + var_08 + var_09; + var_0B = spawnhelicopter(self,var_0A,var_00["axis"][0].angles,"osprey_minigun_mp","vehicle_v22_osprey_body_mp"); + var_07 thread maps\mp\killstreaks\_escortairdrop::airshippitchpropsup(); + var_0B thread maps\mp\killstreaks\_escortairdrop::airshippitchpropsup(); + var_07 thread maps\mp\killstreaks\_escortairdrop::airshippitchhatchdown(); + var_0B thread maps\mp\killstreaks\_escortairdrop::airshippitchhatchdown(); + var_07 vehicle_setspeed(20,10); + var_07 setyawspeed(3,3,3,0.3); + var_07 setvehgoalpos(var_06 + (0,0,var_02),1); + var_0B vehicle_setspeed(20,10); + var_0B setyawspeed(3,3,3,0.3); + var_0B setvehgoalpos(var_0A + (0,0,var_02),1); + var_07 waittill("goal"); + var_07 thread maps\mp\killstreaks\_escortairdrop::airshippitchhatchup(); + var_0B thread maps\mp\killstreaks\_escortairdrop::airshippitchhatchup(); + wait 2; + var_07 vehicle_setspeed(80,60); + var_07 setyawspeed(30,15,15,0.3); + var_07 setvehgoalpos(var_06 + (0,0,var_03),1); + var_0B vehicle_setspeed(80,60); + var_0B setyawspeed(30,15,15,0.3); + var_0B setvehgoalpos(var_0A + (0,0,var_03),1); + var_07 waittill("goal"); + var_07 thread maps\mp\killstreaks\_escortairdrop::func_2EBE(); + var_0B thread maps\mp\killstreaks\_escortairdrop::func_2EBE(); + var_07 vehicle_setspeed(120,120); + var_07 setyawspeed(100,100,40,0.3); + var_07 setvehgoalpos(var_06 + (0,0,var_03) + var_04 * -20,1); + var_0B vehicle_setspeed(120,120); + var_0B setyawspeed(100,100,40,0.3); + var_0B setvehgoalpos(var_0A + (0,0,var_03) + var_08 * -20,1); + var_07 waittill("goal"); + var_07 delete(); + var_0B delete(); + } +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/_minefields.gsc b/MW3/Xbox/MP/maps/mp/_minefields.gsc new file mode 100644 index 0000000..716013a --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/_minefields.gsc @@ -0,0 +1,63 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\_minefields.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 3 + * Decompile Time: 82 ms + * Timestamp: 10/27/2023 2:27:51 AM +*******************************************************************/ + +//Function Number: 1 +func_2715() +{ + var_00 = getentarray("minefield","targetname"); + if(var_00.size > 0) + { + level._effect["mine_explosion"] = loadfx("explosions/grenadeExp_dirt"); + } + + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + var_00[var_01] thread func_2716(); + } +} + +//Function Number: 2 +func_2716() +{ + for(;;) + { + self waittill("trigger",var_00); + if(isplayer(var_00)) + { + var_00 thread minefield_kill(self); + } + } +} + +//Function Number: 3 +minefield_kill(param_00) +{ + if(isdefined(self.minefield)) + { + return; + } + + self.minefield = 1; + self playsound("minefield_click"); + wait 0.5; + wait randomfloat(0.5); + if(isdefined(self) && self istouching(param_00)) + { + var_01 = self getorigin(); + var_02 = 300; + var_03 = 2000; + var_04 = 50; + self playsound("explo_mine"); + playfx(level._effect["mine_explosion"],var_01); + radiusdamage(var_01,var_02,var_03,var_04); + } + + self.minefield = undefined; +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/_radiation.gsc b/MW3/Xbox/MP/maps/mp/_radiation.gsc new file mode 100644 index 0000000..7fc5996 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/_radiation.gsc @@ -0,0 +1,232 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\_radiation.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 10 + * Decompile Time: 286 ms + * Timestamp: 10/27/2023 2:27:52 AM +*******************************************************************/ + +//Function Number: 1 +func_2719() +{ + precachestring(&"SCRIPT_RADIATION_DEATH"); + var_00 = getentarray("radiation","targetname"); + if(var_00.size > 0) + { + precacheshellshock("mp_radiation_low"); + precacheshellshock("mp_radiation_med"); + precacheshellshock("mp_radiation_high"); + foreach(var_02 in var_00) + { + var_02 thread common_scripts\_dynamic_world::triggertouchthink(::func_271B,::playerleavearea); + } + + thread onplayerconnect(); + } +} + +//Function Number: 2 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_00.var_271A = 0; + } +} + +//Function Number: 3 +func_271B(param_00) +{ + self.var_271A++; + if(self.var_271A == 1) + { + func_2720(); + } +} + +//Function Number: 4 +playerleavearea(param_00) +{ + self.var_271A--; + if(self.var_271A != 0) + { + return; + } + + self.var_271D = 0; + self notify("leftTrigger"); + if(isdefined(self.var_271E)) + { + self.var_271E fadeoutblackout(0.1,0); + } +} + +//Function Number: 5 +func_271F(param_00) +{ + common_scripts\utility::waittill_any("death","leftTrigger"); + self stoploopsound(); +} + +//Function Number: 6 +func_2720() +{ + self endon("disconnect"); + self endon("game_ended"); + self endon("death"); + self endon("leftTrigger"); + self.var_271D = 0; + thread func_271F(self); + for(;;) + { + self.var_271D++; + switch(self.var_271D) + { + case 1: + self.radiationsound = "item_geigercouner_level2"; + self playloopsound(self.radiationsound); + self viewkick(1,self.origin); + break; + + case 3: + self shellshock("mp_radiation_low",4); + self.radiationsound = "item_geigercouner_level3"; + self stoploopsound(); + self playloopsound(self.radiationsound); + self viewkick(3,self.origin); + doradiationdamage(15); + break; + + case 4: + self shellshock("mp_radiation_med",5); + self.radiationsound = "item_geigercouner_level3"; + self stoploopsound(); + self playloopsound(self.radiationsound); + self viewkick(15,self.origin); + thread blackout(); + doradiationdamage(25); + break; + + case 6: + self shellshock("mp_radiation_high",5); + self.radiationsound = "item_geigercouner_level4"; + self stoploopsound(); + self playloopsound(self.radiationsound); + self viewkick(75,self.origin); + doradiationdamage(45); + break; + + case 8: + self shellshock("mp_radiation_high",5); + self.radiationsound = "item_geigercouner_level4"; + self stoploopsound(); + self playloopsound(self.radiationsound); + self viewkick(127,self.origin); + doradiationdamage(175); + break; + } + + wait 1; + } + + wait 5; +} + +//Function Number: 7 +blackout() +{ + self endon("disconnect"); + self endon("game_ended"); + self endon("death"); + self endon("leftTrigger"); + if(!isdefined(self.var_271E)) + { + self.var_271E = newclienthudelem(self); + self.var_271E.x = 0; + self.var_271E.y = 0; + self.var_271E setshader("black",640,480); + self.var_271E.alignx = "left"; + self.var_271E.aligny = "top"; + self.var_271E.horzalign = "fullscreen"; + self.var_271E.vertalign = "fullscreen"; + self.var_271E.alpha = 0; + } + + var_00 = 1; + var_01 = 2; + var_02 = 0.25; + var_03 = 1; + var_04 = 5; + var_05 = 100; + var_06 = 0; + for(;;) + { + while(self.var_271D > 1) + { + var_07 = var_05 - var_04; + var_06 = self.var_271D - var_04 / var_07; + if(var_06 < 0) + { + var_06 = 0; + } + else if(var_06 > 1) + { + var_06 = 1; + } + + var_08 = var_01 - var_00; + var_09 = var_00 + var_08 * 1 - var_06; + var_0A = var_03 - var_02; + var_0B = var_02 + var_0A * var_06; + var_0C = var_06 * 0.5; + if(var_06 == 1) + { + break; + } + + var_0D = var_09 / 2; + self.var_271E func_2724(var_0D,var_0B); + self.var_271E fadeoutblackout(var_0D,var_0C); + wait var_06 * 0.5; + } + + if(var_06 == 1) + { + break; + } + + if(self.var_271E.alpha != 0) + { + self.var_271E fadeoutblackout(1,0); + } + + wait 0.05; + } + + self.var_271E func_2724(2,0); +} + +//Function Number: 8 +doradiationdamage(param_00) +{ + self thread [[ level.callbackplayerdamage ]](self,self,param_00,0,"MOD_SUICIDE","claymore_mp",self.origin,(0,0,0) - self.origin,"none",0); +} + +//Function Number: 9 +func_2724(param_00,param_01) +{ + self fadeovertime(param_00); + self.alpha = param_01; + wait param_00; +} + +//Function Number: 10 +fadeoutblackout(param_00,param_01) +{ + self fadeovertime(param_00); + self.alpha = param_01; + wait param_00; +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/_scoreboard.gsc b/MW3/Xbox/MP/maps/mp/_scoreboard.gsc new file mode 100644 index 0000000..7da8609 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/_scoreboard.gsc @@ -0,0 +1,123 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\_scoreboard.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 3 + * Decompile Time: 74 ms + * Timestamp: 10/27/2023 2:27:53 AM +*******************************************************************/ + +//Function Number: 1 +func_2EE1() +{ + foreach(var_01 in level.placement["all"]) + { + var_01 func_2EE2(); + } + + if(level.teambased) + { + var_03 = getteamscore("allies"); + var_04 = getteamscore("axis"); + if(var_03 == var_04) + { + var_05 = "tied"; + } + else if(var_04 > var_05) + { + var_05 = "allies"; + } + else + { + var_05 = "axis"; + } + + if(var_05 == "tied") + { + buildscoreboardtype("allies"); + buildscoreboardtype("axis"); + foreach(var_01 in level.players) + { + if(var_01.pers["team"] == "spectator") + { + var_01 setplayerdata("round","scoreboardType","allies"); + continue; + } + + var_01 setplayerdata("round","scoreboardType",var_01.pers["team"]); + } + } + else + { + buildscoreboardtype(var_05); + foreach(var_01 in level.players) + { + var_01 setplayerdata("round","scoreboardType",var_05); + } + } + } + else + { + buildscoreboardtype("neutral"); + foreach(var_01 in level.players) + { + var_01 setplayerdata("round","scoreboardType","neutral"); + } + } + + foreach(var_01 in level.players) + { + var_01 setclientdvars("player_summary_xp",var_01.pers["summary"]["xp"],"player_summary_score",var_01.pers["summary"]["score"],"player_summary_challenge",var_01.pers["summary"]["challenge"],"player_summary_match",var_01.pers["summary"]["match"],"player_summary_misc",var_01.pers["summary"]["misc"]); + } +} + +//Function Number: 2 +func_2EE2() +{ + var_00 = getclientmatchdata("scoreboardPlayerCount"); + if(var_00 <= 24) + { + setclientmatchdata("players",self.clientmatchdataid,"score",self.pers["score"]); + var_01 = self.pers["kills"]; + setclientmatchdata("players",self.clientmatchdataid,"kills",var_01); + var_02 = self.pers["assists"]; + setclientmatchdata("players",self.clientmatchdataid,"assists",var_02); + var_03 = self.pers["deaths"]; + setclientmatchdata("players",self.clientmatchdataid,"deaths",var_03); + var_04 = game[self.pers["team"]]; + setclientmatchdata("players",self.clientmatchdataid,"faction",var_04); + var_00++; + setclientmatchdata("scoreboardPlayerCount",var_00); + } +} + +//Function Number: 3 +buildscoreboardtype(param_00) +{ + if(param_00 == "neutral") + { + var_01 = 0; + foreach(var_03 in level.placement["all"]) + { + setclientmatchdata("scoreboards",param_00,var_01,var_03.clientmatchdataid); + var_01++; + } + + return; + } + + var_05 = maps\mp\_utility::getotherteam(var_03); + var_01 = 0; + foreach(var_03 in level.placement[param_00]) + { + setclientmatchdata("scoreboards",param_00,var_01,var_03.clientmatchdataid); + var_01++; + } + + foreach(var_03 in level.placement[var_05]) + { + setclientmatchdata("scoreboards",param_00,var_01,var_03.clientmatchdataid); + var_01++; + } +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/_shutter.gsc b/MW3/Xbox/MP/maps/mp/_shutter.gsc new file mode 100644 index 0000000..f31a56f --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/_shutter.gsc @@ -0,0 +1,193 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\_shutter.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 5 + * Decompile Time: 101 ms + * Timestamp: 10/27/2023 2:27:54 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + level.inc = 0; + common_scripts\utility::array_levelthread(getentarray("wire","targetname"),::wirewander); + var_00 = getentarray("shutter_left","targetname"); + var_01 = getentarray("shutter_right_open","targetname"); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + var_00[var_00.size] = var_01[var_02]; + } + + var_01 = getentarray("shutter_left_closed","targetname"); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + var_00[var_00.size] = var_01[var_02]; + } + + for(var_02 = 0;var_02 < var_00.size;var_02++) + { + var_03 = var_00[var_02]; + var_03 rotateto((var_03.angles[0],var_03.angles[1] + 180,var_03.angles[2]),0.1); + } + + wait 0.2; + for(var_02 = 0;var_02 < var_00.size;var_02++) + { + var_00[var_02].startyaw = var_00[var_02].angles[1]; + } + + var_04 = getentarray("shutter_right","targetname"); + var_01 = getentarray("shutter_left_open","targetname"); + var_02 = 0; + while(var_02 < var_01.size) + { + var_03++ = var_41[var_04.size]; + } + + var_02 = getentarray("shutter_right_closed","targetname"); + var_03 = 0; + while(var_03 < var_02.size) + { + var_03++ = var_41[var_41.size]; + } + + for(var_03 = 0;var_03 < var_41.size;var_03++ = var_02[var_03]) + { + var_41[var_03].startyaw = var_41[var_03].angles[1]; + } + + var_02 = undefined; + var_05 = "left"; + for(;;) + { + common_scripts\utility::array_levelthread(var_01,::func_196B,var_05); + common_scripts\utility::array_levelthread(var_41,::shutterwanderright,var_05); + level waittill(var_01[var_02],"wind blows",var_05); + } +} + +//Function Number: 2 +windcontroller() +{ + for(;;) + { + var_00 = "left"; + if(randomint(100) > 50) + { + var_00 = "right"; + } + + level notify("wind blows",var_00); + wait 2 + randomfloat(10); + } +} + +//Function Number: 3 +func_196B(param_00,param_01) +{ + level.inc++; + level endon("wind blows"); + var_02 = param_00.startyaw; + if(param_01 == "left") + { + var_02 = var_02 + 179.9; + } + + var_03 = 0.2; + param_00 rotateto((param_00.angles[0],var_02,param_00.angles[2]),var_03); + wait var_03 + 0.1; + for(;;) + { + var_04 = randomint(80); + if(randomint(100) > 50) + { + var_04 = var_04 * -1; + } + + var_02 = param_00.angles[1] + var_04; + var_05 = param_00.angles[1] + var_04 * -1; + if(var_02 < param_00.startyaw || var_02 > param_00.startyaw + 179) + { + var_02 = var_05; + } + + var_06 = abs(param_00.angles[1] - var_02); + var_03 = var_06 * 0.02 + randomfloat(2); + if(var_03 < 0.3) + { + var_03 = 0.3; + } + + param_00 rotateto((param_00.angles[0],var_02,param_00.angles[2]),var_03,var_03 * 0.5,var_03 * 0.5); + wait var_03; + } +} + +//Function Number: 4 +shutterwanderright(param_00,param_01) +{ + level.inc++; + level endon("wind blows"); + var_02 = param_00.startyaw; + if(param_01 == "left") + { + var_02 = var_02 + 179.9; + } + + var_03 = 0.2; + param_00 rotateto((param_00.angles[0],var_02,param_00.angles[2]),var_03); + wait var_03 + 0.1; + for(;;) + { + var_04 = randomint(80); + if(randomint(100) > 50) + { + var_04 = var_04 * -1; + } + + var_02 = param_00.angles[1] + var_04; + var_05 = param_00.angles[1] + var_04 * -1; + if(var_02 < param_00.startyaw || var_02 > param_00.startyaw + 179) + { + var_02 = var_05; + } + + var_06 = abs(param_00.angles[1] - var_02); + var_03 = var_06 * 0.02 + randomfloat(2); + if(var_03 < 0.3) + { + var_03 = 0.3; + } + + param_00 rotateto((param_00.angles[0],var_02,param_00.angles[2]),var_03,var_03 * 0.5,var_03 * 0.5); + wait var_03; + } +} + +//Function Number: 5 +wirewander(param_00) +{ + var_01 = getentarray(param_00.target,"targetname"); + var_02 = var_01[0].origin; + var_03 = var_01[1].origin; + var_04 = vectortoangles(var_02 - var_03); + var_05 = spawn("script_model",(0,0,0)); + var_05.origin = var_02 * 0.5 + var_03 * 0.5; + var_05.angles = var_04; + param_00 linkto(var_05); + var_06 = 2; + var_07 = 0.9; + var_08 = 4 + randomfloat(2); + var_05 rotateroll(var_08 * 0.5,0.2); + wait 0.2; + for(;;) + { + var_09 = var_06 + randomfloat(var_07) - var_07 * 0.5; + var_05 rotateroll(var_08,var_09,var_09 * 0.5,var_09 * 0.5); + wait var_09; + var_05 rotateroll(var_08 * -1,var_09,var_09 * 0.5,var_09 * 0.5); + wait var_09; + } +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/_skill.gsc b/MW3/Xbox/MP/maps/mp/_skill.gsc new file mode 100644 index 0000000..276f14f --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/_skill.gsc @@ -0,0 +1,61 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\_skill.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 6 + * Decompile Time: 97 ms + * Timestamp: 10/27/2023 2:28:55 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level thread onplayerconnect(); + level thread onplayerdisconnect(); +} + +//Function Number: 2 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_00.var_2BBC = gettime(); + var_00.targets = []; + var_00 thread func_2BBF(); + var_00 thread ondeath(); + } +} + +//Function Number: 3 +onplayerdisconnect() +{ + for(;;) + { + level waittill("disconnected",var_00); + var_00.targets = []; + } +} + +//Function Number: 4 +func_2BBF() +{ + level endon("game_ended"); + self endon("disconnected"); + self waittill("weapon_fired"); +} + +//Function Number: 5 +ondeath() +{ + level endon("game_ended"); + self endon("disconnected"); + self waittill("death"); +} + +//Function Number: 6 +processkill(param_00,param_01) +{ + updateskill(param_00,param_01,"war",1); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/_stinger.gsc b/MW3/Xbox/MP/maps/mp/_stinger.gsc new file mode 100644 index 0000000..421f8ec --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/_stinger.gsc @@ -0,0 +1,451 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\_stinger.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 11 + * Decompile Time: 214 ms + * Timestamp: 10/27/2023 2:27:55 AM +*******************************************************************/ + +//Function Number: 1 +func_27B9() +{ + self.stingerstage = undefined; + self.stingertarget = undefined; + self.stingerlockstarttime = undefined; + self.stingerlostsightlinetime = undefined; + thread resetstingerlockingondeath(); + level.stingertargets = []; +} + +//Function Number: 2 +func_27BF() +{ + if(!isdefined(self.stingeruseentered)) + { + return; + } + + self.stingeruseentered = undefined; + self notify("stop_javelin_locking_feedback"); + self notify("stop_javelin_locked_feedback"); + self weaponlockfree(); + func_27B9(); +} + +//Function Number: 3 +resetstingerlockingondeath() +{ + self endon("disconnect"); + self notify("ResetStingerLockingOnDeath"); + self endon("ResetStingerLockingOnDeath"); + for(;;) + { + self waittill("death"); + func_27BF(); + } +} + +//Function Number: 4 +func_27C2(param_00) +{ + if(!isdefined(param_00)) + { + return 0; + } + + if(!self worldpointinreticle_circle(param_00.origin,65,85)) + { + return 0; + } + + if(self.stingertarget == level.ac130.planemodel && !isdefined(level.ac130player)) + { + return 0; + } + + return 1; +} + +//Function Number: 5 +loopstingerlockingfeedback() +{ + self endon("stop_javelin_locking_feedback"); + for(;;) + { + if(isdefined(level.chopper) && isdefined(level.chopper.gunner) && isdefined(self.stingertarget) && self.stingertarget == level.chopper.gunner) + { + level.chopper.gunner playlocalsound("missile_locking"); + } + + if(isdefined(level.ac130player) && isdefined(self.stingertarget) && self.stingertarget == level.ac130.planemodel) + { + level.ac130player playlocalsound("missile_locking"); + } + + self playlocalsound("stinger_locking"); + self playrumbleonentity("ac130_25mm_fire"); + wait 0.6; + } +} + +//Function Number: 6 +func_27C6() +{ + self endon("stop_javelin_locked_feedback"); + for(;;) + { + if(isdefined(level.chopper) && isdefined(level.chopper.gunner) && isdefined(self.stingertarget) && self.stingertarget == level.chopper.gunner) + { + level.chopper.gunner playlocalsound("missile_locking"); + } + + if(isdefined(level.ac130player) && isdefined(self.stingertarget) && self.stingertarget == level.ac130.planemodel) + { + level.ac130player playlocalsound("missile_locking"); + } + + self playlocalsound("stinger_locked"); + self playrumbleonentity("ac130_25mm_fire"); + wait 0.25; + } +} + +//Function Number: 7 +locksighttest(param_00) +{ + var_01 = self geteye(); + if(!isdefined(param_00)) + { + return 0; + } + + var_02 = sighttracepassed(var_01,param_00.origin,0,param_00); + if(var_02) + { + return 1; + } + + var_03 = param_00 getpointinbounds(1,0,0); + var_02 = sighttracepassed(var_01,var_03,0,param_00); + if(var_02) + { + return 1; + } + + var_04 = param_00 getpointinbounds(-1,0,0); + var_02 = sighttracepassed(var_01,var_04,0,param_00); + if(var_02) + { + return 1; + } + + return 0; +} + +//Function Number: 8 +stingerdebugdraw(param_00) +{ +} + +//Function Number: 9 +func_27C9() +{ + var_00 = 500; + if(locksighttest(self.stingertarget)) + { + self.stingerlostsightlinetime = 0; + return 1; + } + + if(self.stingerlostsightlinetime == 0) + { + self.stingerlostsightlinetime = gettime(); + } + + var_01 = gettime() - self.stingerlostsightlinetime; + if(var_01 >= var_00) + { + func_27BF(); + return 0; + } + + return 1; +} + +//Function Number: 10 +gettargetlist() +{ + var_00 = []; + if(level.teambased) + { + if(isdefined(level.chopper) && level.chopper.team != self.team || isdefined(level.chopper.owner) && level.chopper.owner == self) + { + } + + if(isdefined(level.ac130player) && level.ac130player.team != self.team) + { + } + + if(isdefined(level.harriers)) + { + foreach(var_02 in level.harriers) + { + if(isdefined(var_02) && var_02.team != self.team || isdefined(var_02.owner) && var_02.owner == self) + { + var_41[var_41.size] = var_02; + } + } + } + + if(level.uavmodels[level.otherteam[self.team]].size) + { + foreach(var_05 in level.uavmodels[level.otherteam[self.team]]) + { + var_41[var_41.size] = var_05; + } + } + + if(isdefined(level.littlebirds)) + { + foreach(var_08 in level.littlebirds) + { + if(isdefined(var_08) && var_08.team != self.team || isdefined(var_08.owner) && var_08.owner == self) + { + var_41[var_41.size] = var_08; + } + } + } + + if(isdefined(level.ugvs)) + { + foreach(var_0B in level.ugvs) + { + if(isdefined(var_0B) && var_0B.team != self.team || isdefined(var_0B.owner) && var_0B.owner == self) + { + var_41[var_41.size] = var_0B; + } + } + } + } + else + { + if(isdefined(level.chopper)) + { + } + + if(isdefined(level.ac130player)) + { + } + + if(isdefined(level.harriers)) + { + foreach(var_02 in level.harriers) + { + if(isdefined(var_02)) + { + var_41[var_41.size] = var_02; + } + } + } + + if(level.uavmodels.size) + { + foreach(var_05 in level.uavmodels) + { + if(isdefined(var_05.owner) && var_05.owner == self) + { + continue; + } + + var_41[var_41.size] = var_05; + } + } + + if(isdefined(level.littlebirds)) + { + foreach(var_08 in level.littlebirds) + { + if(!isdefined(var_08)) + { + continue; + } + + var_41[var_41.size] = var_08; + } + } + + if(isdefined(level.ugvs)) + { + foreach(var_0B in level.ugvs) + { + if(!isdefined(var_0B)) + { + continue; + } + + var_41[var_41.size] = var_0B; + } + } + + foreach(var_16 in level.players) + { + if(!isalive(var_16)) + { + continue; + } + + if(level.teambased && var_16.team == self.team) + { + continue; + } + + if(var_16 == self) + { + continue; + } + + if(var_16 maps\mp\_utility::isjuggernaut()) + { + var_41[var_41.size] = var_16; + } + } + } + + return var_41; +} + +//Function Number: 11 +stingerusageloop() +{ + self endon("death"); + self endon("disconnect"); + self endon("faux_spawn"); + var_00 = 1000; + func_27B9(); + for(;;) + { + wait 0.05; + var_01 = self getcurrentweapon(); + if(var_01 != "stinger_mp" && var_01 != "at4_mp" && var_01 != "iw5_smaw_mp") + { + func_27BF(); + continue; + } + + if(self playerads() < 0.95) + { + func_27BF(); + continue; + } + + self.stingeruseentered = 1; + if(!isdefined(self.stingerstage)) + { + self.stingerstage = 0; + } + + stingerdebugdraw(self.stingertarget); + if(self.stingerstage == 0) + { + var_02 = gettargetlist(); + if(var_02.size == 0) + { + continue; + } + + var_03 = []; + foreach(var_05 in var_02) + { + if(!isdefined(var_05)) + { + continue; + } + + var_06 = self worldpointinreticle_circle(var_05.origin,65,75); + if(var_06) + { + var_03[var_03.size] = var_05; + } + } + + if(var_03.size == 0) + { + continue; + } + + var_08 = sortbydistance(var_03,self.origin); + if(!locksighttest(var_08[0])) + { + continue; + } + + thread loopstingerlockingfeedback(); + self.stingertarget = var_08[0]; + self.stingerlockstarttime = gettime(); + self.stingerstage = 1; + self.stingerlostsightlinetime = 0; + } + + if(self.stingerstage == 1) + { + if(!func_27C2(self.stingertarget)) + { + func_27BF(); + continue; + } + + var_09 = func_27C9(); + if(!var_09) + { + continue; + } + + var_0A = gettime() - self.stingerlockstarttime; + if(maps\mp\_utility::func_27AF("specialty_fasterlockon")) + { + if(var_0A < var_00 * 0.5) + { + continue; + } + } + else if(var_0A < var_00) + { + continue; + } + + self notify("stop_javelin_locking_feedback"); + thread func_27C6(); + if(self.stingertarget.model == "vehicle_av8b_harrier_jet_opfor_mp" || self.stingertarget.model == "vehicle_av8b_harrier_jet_mp" || self.stingertarget.model == "vehicle_little_bird_armed" || self.stingertarget.model == "vehicle_ugv_talon_mp") + { + self weaponlockfinalize(self.stingertarget); + } + else if(isplayer(self.stingertarget)) + { + self weaponlockfinalize(self.stingertarget,(100,0,64)); + } + else + { + self weaponlockfinalize(self.stingertarget,(100,0,-32)); + } + + self.stingerstage = 2; + } + + if(self.stingerstage == 2) + { + var_09 = func_27C9(); + if(!var_09) + { + continue; + } + + if(!func_27C2(self.stingertarget)) + { + func_27BF(); + continue; + } + } + } +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/_utility.gsc b/MW3/Xbox/MP/maps/mp/_utility.gsc new file mode 100644 index 0000000..628badf --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/_utility.gsc @@ -0,0 +1,3914 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\_utility.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 231 + * Decompile Time: 3980 ms + * Timestamp: 10/27/2023 2:28:07 AM +*******************************************************************/ + +//Function Number: 1 +func_32E0() +{ + if(isdefined(self.script_delay)) + { + wait self.script_delay; + } + + self playsound(level.scr_sound[self.script_sound]); +} + +//Function Number: 2 +_beginlocationselection(param_00,param_01,param_02,param_03) +{ + self setclientdvar("ui_selecting_location","1"); + self beginlocationselection(param_01,param_02,param_03); + self.selectinglocation = 1; + self setblurforplayer(10.3,0.3); + thread func_32E3("cancel_location"); + thread func_32E3("death"); + thread func_32E3("disconnect"); + thread func_32E3("used"); + thread func_32E3("weapon_change"); + self endon("stop_location_selection"); + thread func_32E4(); + thread endselectiononemp(); + if(isdefined(param_00) && self.team != "spectator") + { + if(isdefined(self.streakmsg)) + { + self.streakmsg destroy(); + } + + if(self issplitscreenplayer()) + { + self.streakmsg = maps\mp\gametypes\_hud_util::createfontstring("hudbig",0.65); + self.streakmsg maps\mp\gametypes\_hud_util::setpoint("CENTER","CENTER",0,-98); + } + else + { + self.streakmsg = maps\mp\gametypes\_hud_util::createfontstring("bigfixed",0.8); + self.streakmsg maps\mp\gametypes\_hud_util::setpoint("CENTER","CENTER",0,-190); + } + + var_04 = tablelookupistring("mp/killstreakTable.csv",1,param_00,2); + self.streakmsg settext(var_04); + } +} + +//Function Number: 3 +func_2EB1(param_00,param_01) +{ + if(!isdefined(param_01)) + { + param_01 = "generic"; + } + + if(!param_00) + { + self setblurforplayer(0,0.3); + self endlocationselection(); + self.selectinglocation = undefined; + if(isdefined(self.streakmsg)) + { + self.streakmsg destroy(); + } + } + + self notify("stop_location_selection",param_01); +} + +//Function Number: 4 +endselectiononemp() +{ + self endon("stop_location_selection"); + for(;;) + { + level waittill("emp_update"); + if(!func_27E5()) + { + continue; + } + + thread func_2EB1(0,"emp"); + } +} + +//Function Number: 5 +func_32E3(param_00) +{ + self endon("stop_location_selection"); + self waittill(param_00); + thread func_2EB1(param_00 == "disconnect",param_00); +} + +//Function Number: 6 +func_32E4() +{ + self endon("stop_location_selection"); + level waittill("game_ended"); + thread func_2EB1(0,"end_game"); +} + +//Function Number: 7 +isattachment(param_00) +{ + var_01 = tablelookup("mp/attachmentTable.csv",4,param_00,0); + if(isdefined(var_01) && var_01 != "") + { + return 1; + } + + return 0; +} + +//Function Number: 8 +func_32BE(param_00) +{ + var_01 = tablelookup("mp/attachmentTable.csv",4,param_00,2); + return var_01; +} + +//Function Number: 9 +func_0614(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + thread delaythread_proc(param_01,param_00,param_02,param_03,param_04,param_05,param_06); +} + +//Function Number: 10 +delaythread_proc(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + wait param_01; + if(!isdefined(param_02)) + { + thread [[ param_00 ]](); + return; + } + + if(!isdefined(param_03)) + { + thread [[ param_00 ]](param_02); + return; + } + + if(!isdefined(param_04)) + { + thread [[ param_00 ]](param_02,param_03); + return; + } + + if(!isdefined(param_05)) + { + thread [[ param_00 ]](param_02,param_03,param_04); + return; + } + + if(!isdefined(param_06)) + { + thread [[ param_00 ]](param_02,param_03,param_04,param_05); + return; + } + + thread [[ param_00 ]](param_02,param_03,param_04,param_05,param_06); +} + +//Function Number: 11 +getplant() +{ + var_00 = self.origin + (0,0,10); + var_01 = 11; + var_02 = anglestoforward(self.angles); + var_02 = var_02 * var_01; + var_03[0] = var_00 + var_02; + var_04 = bullettrace(var_41[0],var_41[0] + (0,0,-18),0,undefined); + if(var_04["fraction"] < 1) + { + var_05 = spawnstruct(); + var_05.origin = var_04["position"]; + var_05.angles = func_32E6(var_04["normal"]); + return var_05; + } + + var_05 = bullettrace(var_04[1],var_04[1] + (0,0,-18),0,undefined); + if(var_05["fraction"] < 1) + { + var_05 = spawnstruct(); + var_05.origin = var_04["position"]; + var_05.angles = func_32E6(var_04["normal"]); + return var_05; + } + + var_04[2] = var_02 + (16,16,0); + var_04[3] = var_02 + (16,-16,0); + var_04[4] = var_02 + (-16,-16,0); + var_04[5] = var_02 + (-16,16,0); + var_06 = undefined; + var_07 = undefined; + for(var_08 = 0;var_08 < var_04.size;var_08++ = var_41[1]) + { + var_05 = bullettrace(var_04[var_08],var_04[var_08] + (0,0,-1000),0,undefined); + if(!isdefined(var_06) || var_05["fraction"] < var_06) + { + var_06 = var_05["fraction"]; + var_07 = var_05["position"]; + } + } + + if(var_06 == 1) + { + var_07 = self.origin; + } + + var_05 = spawnstruct(); + var_08.origin = var_06; + var_08.angles = func_32E6(var_04["normal"]); + return var_08; +} + +//Function Number: 12 +func_32E6(param_00) +{ + var_01 = (param_00[0],param_00[1],0); + var_02 = length(var_01); + if(!var_02) + { + return (0,0,0); + } + + var_03 = vectornormalize(var_01); + var_04 = param_00[2] * -1; + var_05 = (var_03[0] * var_04,var_03[1] * var_04,var_02); + var_06 = vectortoangles(var_05); + return var_06; +} + +//Function Number: 13 +deleteplacedentity(param_00) +{ + var_01 = getentarray(param_00,"classname"); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + var_01[var_02] delete(); + } +} + +//Function Number: 14 +func_2D68(param_00,param_01,param_02) +{ + if(level.splitscreen) + { + if(isdefined(level.players[0])) + { + level.players[0] playlocalsound(param_00); + return; + } + + return; + } + + if(isdefined(param_01)) + { + if(isdefined(param_02)) + { + for(var_03 = 0;var_03 < level.players.size;var_03++) + { + var_04 = level.players[var_03]; + if(var_04 issplitscreenplayer() && !var_04 issplitscreenplayerprimary()) + { + continue; + } + + if(isdefined(var_04.pers["team"]) && var_04.pers["team"] == param_01 && !func_3301(var_04,param_02)) + { + var_04 playlocalsound(param_00); + } + } + + return; + } + + for(var_03 = 0;var_03 < level.players.size;var_03++) + { + var_04 = level.players[var_03]; + if(var_04 issplitscreenplayer() && !var_04 issplitscreenplayerprimary()) + { + continue; + } + + if(isdefined(var_04.pers["team"]) && var_04.pers["team"] == param_01) + { + var_04 playlocalsound(param_00); + } + } + + return; + } + + if(isdefined(var_03)) + { + for(var_03 = 0;var_03 < level.players.size;var_03++) + { + if(level.players[var_03] issplitscreenplayer() && !level.players[var_03] issplitscreenplayerprimary()) + { + continue; + } + + if(!func_3301(level.players[var_03],param_02)) + { + level.players[var_03] playlocalsound(param_00); + } + } + + return; + } + + for(var_03 = 0;var_03 < level.players.size;var_03++) + { + if(level.players[var_03] issplitscreenplayer() && !level.players[var_03] issplitscreenplayerprimary()) + { + continue; + } + + level.players[var_03] playlocalsound(param_00); + } +} + +//Function Number: 15 +sortlowermessages() +{ + for(var_00 = 1;var_00 < self.lowermessages.size;var_00++) + { + var_01 = self.lowermessages[var_00]; + var_02 = var_01.priority; + for(var_03 = var_00 - 1;var_03 >= 0 && var_02 > self.lowermessages[var_03].priority;var_03--) + { + self.lowermessages[var_03 + 1] = self.lowermessages[var_03]; + } + + self.lowermessages[var_03 + 1] = var_01; + } +} + +//Function Number: 16 +func_32E9(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08) +{ + var_09 = undefined; + foreach(var_0B in self.lowermessages) + { + if(var_0B.name == param_00) + { + if(var_0B.text == param_01 && var_0B.priority == param_03) + { + return; + } + + var_09 = var_0B; + break; + } + } + + if(!isdefined(var_09)) + { + var_09 = spawnstruct(); + self.lowermessages[self.lowermessages.size] = var_09; + } + + var_09.name = param_00; + var_09.text = param_01; + var_09.time = param_02; + var_09.addtime = gettime(); + var_09.priority = param_03; + var_09.showtimer = param_04; + var_09.shouldfade = param_05; + var_09.fadetoalpha = param_06; + var_09.fadetoalphatime = param_07; + var_09.hidewhenindemo = param_08; + sortlowermessages(); +} + +//Function Number: 17 +func_32EF(param_00) +{ + if(isdefined(self.lowermessages)) + { + for(var_01 = self.lowermessages.size;var_01 > 0;var_01--) + { + if(self.lowermessages[var_01 - 1].name != param_00) + { + continue; + } + + var_02 = self.lowermessages[var_01 - 1]; + for(var_03 = var_01;var_03 < self.lowermessages.size;var_03++) + { + if(isdefined(self.lowermessages[var_03])) + { + self.lowermessages[var_03 - 1] = self.lowermessages[var_03]; + } + } + + self.lowermessages[self.lowermessages.size - 1] = undefined; + } + + sortlowermessages(); + } +} + +//Function Number: 18 +func_32F0() +{ + return self.lowermessages[0]; +} + +//Function Number: 19 +setlowermessage(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08) +{ + if(!isdefined(param_03)) + { + param_03 = 1; + } + + if(!isdefined(param_02)) + { + param_02 = 0; + } + + if(!isdefined(param_04)) + { + param_04 = 0; + } + + if(!isdefined(param_05)) + { + param_05 = 0; + } + + if(!isdefined(param_06)) + { + param_06 = 0.85; + } + + if(!isdefined(param_07)) + { + param_07 = 3; + } + + if(!isdefined(param_08)) + { + param_08 = 0; + } + + func_32E9(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08); + func_32F1(); +} + +//Function Number: 20 +func_32F1() +{ + var_00 = func_32F0(); + if(!isdefined(var_00)) + { + self.lowermessage.alpha = 0; + self.lowertimer.alpha = 0; + return; + } + + self.lowermessage settext(var_00.text); + self.lowermessage.alpha = 0.85; + self.lowertimer.alpha = 1; + self.lowermessage.hidewhenindemo = var_00.hidewhenindemo; + if(var_00.shouldfade) + { + self.lowermessage fadeovertime(min(var_00.fadetoalphatime,60)); + self.lowermessage.alpha = var_00.fadetoalpha; + } + + if(var_00.time > 0 && var_00.showtimer) + { + self.lowertimer settimer(max(var_00.time - gettime() - var_00.addtime / 1000,0.1)); + return; + } + + if(var_00.time > 0 && !var_00.showtimer) + { + self.lowertimer settext(""); + self.lowermessage fadeovertime(min(var_00.time,60)); + self.lowermessage.alpha = 0; + thread clearondeath(var_00); + thread clearafterfade(var_00); + return; + } + + self.lowertimer settext(""); +} + +//Function Number: 21 +clearondeath(param_00) +{ + self notify("message_cleared"); + self endon("message_cleared"); + self endon("disconnect"); + level endon("game_ended"); + self waittill("death"); + clearlowermessage(param_00.name); +} + +//Function Number: 22 +clearafterfade(param_00) +{ + wait param_00.time; + clearlowermessage(param_00.name); + self notify("message_cleared"); +} + +//Function Number: 23 +clearlowermessage(param_00) +{ + func_32EF(param_00); + func_32F1(); +} + +//Function Number: 24 +func_2B45() +{ + for(var_00 = 0;var_00 < self.lowermessages.size;var_00++) + { + self.lowermessages[var_00] = undefined; + } + + if(!isdefined(self.lowermessage)) + { + return; + } + + func_32F1(); +} + +//Function Number: 25 +func_32F4(param_00,param_01) +{ + foreach(var_03 in level.players) + { + if(var_03.team != param_01) + { + continue; + } + + var_03 iprintln(param_00); + } +} + +//Function Number: 26 +printboldonteam(param_00,param_01) +{ + for(var_02 = 0;var_02 < level.players.size;var_02++) + { + var_03 = level.players[var_02]; + if(isdefined(var_03.pers["team"]) && var_03.pers["team"] == param_01) + { + var_03 iprintlnbold(param_00); + } + } +} + +//Function Number: 27 +printboldonteamarg(param_00,param_01,param_02) +{ + for(var_03 = 0;var_03 < level.players.size;var_03++) + { + var_04 = level.players[var_03]; + if(isdefined(var_04.pers["team"]) && var_04.pers["team"] == param_01) + { + var_04 iprintlnbold(param_00,param_02); + } + } +} + +//Function Number: 28 +printonteamarg(param_00,param_01,param_02) +{ + for(var_03 = 0;var_03 < level.players.size;var_03++) + { + var_04 = level.players[var_03]; + if(isdefined(var_04.pers["team"]) && var_04.pers["team"] == param_01) + { + var_04 iprintln(param_00,param_02); + } + } +} + +//Function Number: 29 +func_32F8(param_00,param_01) +{ + var_02 = level.players; + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + if(isdefined(param_01)) + { + if(isdefined(var_02[var_03].pers["team"]) && var_02[var_03].pers["team"] == param_01) + { + var_02[var_03] iprintln(param_00); + } + + continue; + } + + var_02[var_03] iprintln(param_00); + } +} + +//Function Number: 30 +func_32F9(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + var_07 = isdefined(param_04); + var_08 = 0; + if(isdefined(param_05)) + { + var_08 = 1; + } + + if(level.splitscreen || !var_07) + { + for(var_09 = 0;var_09 < level.players.size;var_09++) + { + var_0A = level.players[var_09]; + var_0B = var_0A.pers["team"]; + if(isdefined(var_0B)) + { + if(var_0B == param_00 && isdefined(param_02)) + { + var_0A iprintln(param_02,param_06); + continue; + } + + if(var_0B == param_01 && isdefined(param_03)) + { + var_0A iprintln(param_03,param_06); + } + } + } + + if(var_07) + { + level.players[0] playlocalsound(param_04); + return; + } + + return; + } + + if(var_0B) + { + for(var_09 = 0;var_09 < level.players.size;var_09++) + { + var_0A = level.players[var_09]; + var_0B = var_0A.pers["team"]; + if(isdefined(var_0B)) + { + if(var_0B == param_00) + { + if(isdefined(param_02)) + { + var_0A iprintln(param_02,param_06); + } + + var_0A playlocalsound(param_04); + continue; + } + + if(var_0B == param_01) + { + if(isdefined(param_03)) + { + var_0A iprintln(param_03,param_06); + } + + var_0A playlocalsound(param_05); + } + } + } + + return; + } + + for(var_09 = 0;var_09 < level.players.size;var_09++) + { + var_0A = level.players[var_09]; + var_0B = var_0A.pers["team"]; + if(isdefined(var_0B)) + { + if(var_0B == param_00) + { + if(isdefined(param_02)) + { + var_0A iprintln(param_02,param_06); + } + + var_0A playlocalsound(param_04); + continue; + } + + if(var_0B == param_01) + { + if(isdefined(param_03)) + { + var_0A iprintln(param_03,param_06); + } + } + } + } +} + +//Function Number: 31 +func_32FA(param_00,param_01,param_02) +{ + foreach(var_04 in level.players) + { + if(var_04.team != param_00) + { + continue; + } + + var_04 printandsoundonplayer(param_01,param_02); + } +} + +//Function Number: 32 +printandsoundonplayer(param_00,param_01) +{ + self iprintln(param_00); + self playlocalsound(param_01); +} + +//Function Number: 33 +func_32FC(param_00) +{ + if(level.splitscreen && self getentitynumber() != 0) + { + return; + } + + self playlocalsound(param_00); +} + +//Function Number: 34 +func_32FD(param_00,param_01,param_02,param_03) +{ + param_00 = "scr_" + level.gametype + "_" + param_00; + if(getdvar(param_00) == "") + { + setdvar(param_00,param_01); + return param_01; + } + + var_04 = getdvarint(param_00); + if(var_04 > param_03) + { + var_04 = param_03; + } + else if(var_04 < param_02) + { + var_04 = param_02; + } + else + { + return var_04; + } + + setdvar(param_00,var_04); + return var_04; +} + +//Function Number: 35 +dvarfloatvalue(param_00,param_01,param_02,param_03) +{ + param_00 = "scr_" + level.gametype + "_" + param_00; + if(getdvar(param_00) == "") + { + setdvar(param_00,param_01); + return param_01; + } + + var_04 = getdvarfloat(param_00); + if(var_04 > param_03) + { + var_04 = param_03; + } + else if(var_04 < param_02) + { + var_04 = param_02; + } + else + { + return var_04; + } + + setdvar(param_00,var_04); + return var_04; +} + +//Function Number: 36 +play_sound_on_tag(param_00,param_01) +{ + if(isdefined(param_01)) + { + playsoundatpos(self gettagorigin(param_01),param_00); + return; + } + + playsoundatpos(self.origin,param_00); +} + +//Function Number: 37 +getotherteam(param_00) +{ + if(param_00 == "allies") + { + return "axis"; + } + else if(param_00 == "axis") + { + return "allies"; + } +} + +//Function Number: 38 +func_29D5(param_00,param_01,param_02,param_03) +{ + self endon(param_01); + if(isdefined(param_02)) + { + self endon(param_02); + } + + if(isdefined(param_03)) + { + self endon(param_03); + } + + wait param_00; +} + +//Function Number: 39 +initpersstat(param_00) +{ + if(!isdefined(self.pers[param_00])) + { + self.pers[param_00] = 0; + } +} + +//Function Number: 40 +getpersstat(param_00) +{ + return self.pers[param_00]; +} + +//Function Number: 41 +func_26FB(param_00,param_01) +{ + if(isdefined(self) && isdefined(self.pers) && isdefined(self.pers[param_00])) + { + self.pers[param_00] = self.pers[param_00] + param_01; + maps\mp\gametypes\_persistence::statadd(param_00,param_01); + } +} + +//Function Number: 42 +func_2CCF(param_00,param_01) +{ + self.pers[param_00] = param_01; +} + +//Function Number: 43 +initplayerstat(param_00,param_01) +{ + if(!isdefined(self.stats["stats_" + param_00])) + { + if(!isdefined(param_01)) + { + param_01 = 0; + } + + self.stats["stats_" + param_00] = spawnstruct(); + self.stats["stats_" + param_00].value = param_01; + } +} + +//Function Number: 44 +incplayerstat(param_00,param_01) +{ + var_02 = self.stats["stats_" + param_00]; + var_02.value = var_02.value + param_01; +} + +//Function Number: 45 +func_2AA1(param_00,param_01) +{ + var_02 = self.stats["stats_" + param_00]; + var_02.value = param_01; + var_02.time = gettime(); +} + +//Function Number: 46 +func_2D8D(param_00) +{ + return self.stats["stats_" + param_00].value; +} + +//Function Number: 47 +getplayerstattime(param_00) +{ + return self.stats["stats_" + param_00].time; +} + +//Function Number: 48 +func_2AAA(param_00,param_01) +{ + var_02 = func_2D8D(param_00); + if(param_01 > var_02) + { + func_2AA1(param_00,param_01); + } +} + +//Function Number: 49 +setplayerstatiflower(param_00,param_01) +{ + var_02 = func_2D8D(param_00); + if(param_01 < var_02) + { + func_2AA1(param_00,param_01); + } +} + +//Function Number: 50 +updatepersratio(param_00,param_01,param_02) +{ + var_03 = maps\mp\gametypes\_persistence::func_2B58(param_01); + var_04 = maps\mp\gametypes\_persistence::func_2B58(param_02); + if(var_04 == 0) + { + var_04 = 1; + } + + maps\mp\gametypes\_persistence::func_2CD1(param_00,int(var_03 * 1000 / var_04)); +} + +//Function Number: 51 +updatepersratiobuffered(param_00,param_01,param_02) +{ + var_03 = maps\mp\gametypes\_persistence::func_2845(param_01); + var_04 = maps\mp\gametypes\_persistence::func_2845(param_02); + if(var_04 == 0) + { + var_04 = 1; + } + + maps\mp\gametypes\_persistence::func_2846(param_00,int(var_03 * 1000 / var_04)); +} + +//Function Number: 52 +waittillslowprocessallowed(param_00) +{ + if(level.lastslowprocessframe == gettime()) + { + if(isdefined(param_00) && param_00) + { + while(level.lastslowprocessframe == gettime()) + { + wait 0.05; + } + } + else + { + wait 0.05; + if(level.lastslowprocessframe == gettime()) + { + wait 0.05; + if(level.lastslowprocessframe == gettime()) + { + wait 0.05; + if(level.lastslowprocessframe == gettime()) + { + wait 0.05; + } + } + } + } + } + + level.lastslowprocessframe = gettime(); +} + +//Function Number: 53 +func_2B0D(param_00,param_01) +{ + self endon(param_01); + wait param_00; +} + +//Function Number: 54 +func_3301(param_00,param_01) +{ + for(var_02 = 0;var_02 < param_01.size;var_02++) + { + if(param_00 == param_01[var_02]) + { + return 1; + } + } + + return 0; +} + +//Function Number: 55 +func_26E5(param_00,param_01,param_02,param_03) +{ + if(level.splitscreen) + { + return; + } + + if(param_00 == "null") + { + return; + } + + if(!isdefined(param_01)) + { + leaderdialogbothteams(param_00,"allies",param_00,"axis",param_02,param_03); + return; + } + + if(level.splitscreen) + { + if(level.players.size) + { + level.players[0] func_2A60(param_00,param_02); + } + + return; + } + + if(isdefined(param_03)) + { + for(var_04 = 0;var_04 < level.players.size;var_04++) + { + var_05 = level.players[var_04]; + if(isdefined(var_05.pers["team"]) && var_05.pers["team"] == param_01 && !func_3301(var_05,param_03)) + { + if(var_05 issplitscreenplayer() && !var_05 issplitscreenplayerprimary()) + { + continue; + } + + var_05 func_2A60(param_00,param_02); + } + } + + return; + } + + for(var_04 = 0;var_04 < level.players.size;var_04++) + { + var_05 = level.players[var_04]; + if(isdefined(var_05.pers["team"]) && var_05.pers["team"] == param_01) + { + if(var_05 issplitscreenplayer() && !var_05 issplitscreenplayerprimary()) + { + continue; + } + + var_05 func_2A60(param_00,param_02); + } + } +} + +//Function Number: 56 +leaderdialogbothteams(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if(level.splitscreen) + { + return; + } + + if(level.splitscreen) + { + if(level.players.size) + { + level.players[0] func_2A60(param_00,param_04); + } + + return; + } + + if(isdefined(param_05)) + { + for(var_06 = 0;var_06 < level.players.size;var_06++) + { + var_07 = level.players[var_06]; + var_08 = var_07.pers["team"]; + if(!isdefined(var_08)) + { + continue; + } + + if(func_3301(var_07,param_05)) + { + continue; + } + + if(var_07 issplitscreenplayer() && !var_07 issplitscreenplayerprimary()) + { + continue; + } + + if(var_08 == param_01) + { + var_07 func_2A60(param_00,param_04); + continue; + } + + if(var_08 == param_03) + { + var_07 func_2A60(param_02,param_04); + } + } + + return; + } + + for(var_06 = 0;var_06 < level.players.size;var_06++) + { + var_07 = level.players[var_06]; + var_08 = var_07.pers["team"]; + if(!isdefined(var_08)) + { + continue; + } + + if(var_07 issplitscreenplayer() && !var_07 issplitscreenplayerprimary()) + { + continue; + } + + if(var_08 == param_01) + { + var_07 func_2A60(param_00,param_04); + continue; + } + + if(var_08 == param_03) + { + var_07 func_2A60(param_02,param_04); + } + } +} + +//Function Number: 57 +func_2D6E(param_00,param_01,param_02) +{ + foreach(var_04 in param_01) + { + var_04 func_2A60(param_00,param_02); + } +} + +//Function Number: 58 +func_2A60(param_00,param_01,param_02) +{ + if(!isdefined(param_02)) + { + param_02 = 0; + } + + var_03 = self.pers["team"]; + if(level.splitscreen) + { + return; + } + + if(!isdefined(var_03)) + { + return; + } + + if(var_03 != "allies" && var_03 != "axis") + { + return; + } + + if(isdefined(param_01)) + { + if(self.leaderdialoggroup == param_01) + { + if(param_02) + { + self stoplocalsound(self.leaderdialogactive); + thread func_3303(param_00,var_03); + } + + return; + } + + var_04 = isdefined(self.leaderdialoggroups[param_01]); + self.leaderdialoggroups[param_01] = param_00; + param_00 = param_01; + if(var_04) + { + return; + } + } + + if(self.leaderdialogactive == "") + { + thread func_3303(param_00,var_03); + return; + } + + self.leaderdialogqueue[self.leaderdialogqueue.size] = param_00; +} + +//Function Number: 59 +func_3303(param_00,param_01) +{ + self endon("disconnect"); + self notify("playLeaderDialogOnPlayer"); + self endon("playLeaderDialogOnPlayer"); + if(isdefined(self.leaderdialoggroups[param_00])) + { + var_02 = param_00; + param_00 = self.leaderdialoggroups[var_02]; + self.leaderdialoggroups[var_02] = undefined; + self.leaderdialoggroup = var_02; + } + + if(issubstr(game["dialog"][param_00],"null")) + { + return; + } + + self.leaderdialogactive = game["voice"][param_01] + game["dialog"][param_00]; + self playlocalsound(game["voice"][param_01] + game["dialog"][param_00]); + wait 3; + self.leaderdialoglocalsound = ""; + self.leaderdialogactive = ""; + self.leaderdialoggroup = ""; + if(self.leaderdialogqueue.size > 0) + { + var_03 = self.leaderdialogqueue[0]; + for(var_04 = 1;var_04 < self.leaderdialogqueue.size;var_04++) + { + self.leaderdialogqueue[var_04 - 1] = self.leaderdialogqueue[var_04]; + } + + self.leaderdialogqueue[var_04 - 1] = undefined; + thread func_3303(var_03,param_01); + } +} + +//Function Number: 60 +func_2AF8() +{ + if(self.pers["team"] == "spectator") + { + self setclientdvar("g_scriptMainMenu",game["menu_team"]); + return; + } + + self setclientdvar("g_scriptMainMenu",game["menu_class_" + self.pers["team"]]); +} + +//Function Number: 61 +updateobjectivetext() +{ + if(self.pers["team"] == "spectator") + { + self setclientdvar("cg_objectiveText",""); + return; + } + + if(func_18D0("scorelimit") > 0 && !isobjectivebased()) + { + if(level.splitscreen) + { + self setclientdvar("cg_objectiveText",getobjectivescoretext(self.pers["team"])); + return; + } + + self setclientdvar("cg_objectiveText",getobjectivescoretext(self.pers["team"]),func_18D0("scorelimit")); + return; + } + + self setclientdvar("cg_objectiveText",getobjectivetext(self.pers["team"])); +} + +//Function Number: 62 +func_3305(param_00,param_01) +{ + game["strings"]["objective_" + param_00] = param_01; + precachestring(param_01); +} + +//Function Number: 63 +func_3306(param_00,param_01) +{ + game["strings"]["objective_score_" + param_00] = param_01; + precachestring(param_01); +} + +//Function Number: 64 +setobjectivehinttext(param_00,param_01) +{ + game["strings"]["objective_hint_" + param_00] = param_01; + precachestring(param_01); +} + +//Function Number: 65 +getobjectivetext(param_00) +{ + return game["strings"]["objective_" + param_00]; +} + +//Function Number: 66 +getobjectivescoretext(param_00) +{ + return game["strings"]["objective_score_" + param_00]; +} + +//Function Number: 67 +func_2B3B(param_00) +{ + return game["strings"]["objective_hint_" + param_00]; +} + +//Function Number: 68 +gettimepassed() +{ + if(!isdefined(level.starttime) || !isdefined(level.discardtime)) + { + return 0; + } + + if(level.timerstopped) + { + return level.timerpausetime - level.starttime - level.discardtime; + } + + return gettime() - level.starttime - level.discardtime; +} + +//Function Number: 69 +func_2D00() +{ + return gettimepassed() / 1000; +} + +//Function Number: 70 +getminutespassed() +{ + return func_2D00() / 60; +} + +//Function Number: 71 +func_2B28() +{ + self.forcespectatorclient = -1; + self.killcamentity = -1; + self.archivetime = 0; + self.psoffsettime = 0; +} + +//Function Number: 72 +func_2AF1() +{ + return self.forcespectatorclient != -1 || self.killcamentity != -1; +} + +//Function Number: 73 +func_2B5F(param_00) +{ + return isdefined(param_00) && param_00 != ""; +} + +//Function Number: 74 +func_330B(param_00,param_01,param_02) +{ + if(param_00 > param_02) + { + return param_02; + } + + if(param_00 < param_01) + { + return param_01; + } + + return param_00; +} + +//Function Number: 75 +func_330C(param_00) +{ + var_01 = gettime(); + var_02 = gettime() - var_01 / 1000; + if(var_02 < param_00) + { + wait param_00 - var_02; + return param_00; + } + + return var_02; +} + +//Function Number: 76 +closemenus() +{ + self closepopupmenu(); + self closeingamemenu(); +} + +//Function Number: 77 +func_330D() +{ + if(!isdefined(self.xpgains)) + { + return; + } + + var_00 = getarraykeys(self.xpgains); + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + var_02 = self.xpgains[var_00[var_01]]; + if(!var_02) + { + continue; + } + + self logstring("xp " + var_00[var_01] + ": " + var_02); + } +} + +//Function Number: 78 +func_330E(param_00,param_01,param_02,param_03) +{ + func_3325("roundswitch",param_01); + param_00 = "scr_" + param_00 + "_roundswitch"; + level.roundswitchdvar = param_00; + level.roundswitchmin = param_02; + level.roundswitchmax = param_03; + level.roundswitch = getdvarint(param_00,param_01); + if(level.roundswitch < param_02) + { + level.roundswitch = param_02; + return; + } + + if(level.roundswitch > param_03) + { + level.roundswitch = param_03; + } +} + +//Function Number: 79 +func_3312(param_00,param_01) +{ + func_3325("roundlimit",param_01); +} + +//Function Number: 80 +registerwinlimitdvar(param_00,param_01) +{ + func_3325("winlimit",param_01); +} + +//Function Number: 81 +registerscorelimitdvar(param_00,param_01) +{ + func_3325("scorelimit",param_01); +} + +//Function Number: 82 +func_3315(param_00,param_01) +{ + registerwatchdvarfloat("timelimit",param_01); + makedvarserverinfo("ui_timelimit",gettimelimit()); +} + +//Function Number: 83 +registerhalftimedvar(param_00,param_01) +{ + func_3325("halftime",param_01); + makedvarserverinfo("ui_halftime",gethalftime()); +} + +//Function Number: 84 +func_3317(param_00,param_01) +{ + func_3325("numlives",param_01); +} + +//Function Number: 85 +func_3318(param_00) +{ + makedvarserverinfo("overtimeTimeLimit",param_00); +} + +//Function Number: 86 +func_2872(param_00,param_01) +{ + var_02 = spawnstruct(); + var_02.isplayer = 1; + var_02.isadestructable = 0; + var_02.entity = param_00; + var_02.damagecenter = param_01; + return var_02; +} + +//Function Number: 87 +get_damageable_sentry(param_00,param_01) +{ + var_02 = spawnstruct(); + var_02.isplayer = 0; + var_02.isadestructable = 0; + var_02.issentry = 1; + var_02.entity = param_00; + var_02.damagecenter = param_01; + return var_02; +} + +//Function Number: 88 +get_damageable_grenade(param_00,param_01) +{ + var_02 = spawnstruct(); + var_02.isplayer = 0; + var_02.isadestructable = 0; + var_02.entity = param_00; + var_02.damagecenter = param_01; + return var_02; +} + +//Function Number: 89 +get_damageable_mine(param_00,param_01) +{ + var_02 = spawnstruct(); + var_02.isplayer = 0; + var_02.isadestructable = 0; + var_02.entity = param_00; + var_02.damagecenter = param_01; + return var_02; +} + +//Function Number: 90 +get_damageable_player_pos(param_00) +{ + return param_00.origin + (0,0,32); +} + +//Function Number: 91 +func_28A3() +{ + if(self getstance() == "crouch") + { + var_00 = self.origin + (0,0,24); + } + else if(self getstance() == "prone") + { + var_00 = self.origin + (0,0,10); + } + else + { + var_00 = self.origin + (0,0,32); + } + + return var_00; +} + +//Function Number: 92 +get_damageable_grenade_pos(param_00) +{ + return param_00.origin; +} + +//Function Number: 93 +func_3319(param_00) +{ + var_01 = getdvar(param_00); + if(var_01 == "") + { + return (0,0,0); + } + + var_02 = strtok(var_01," "); + if(var_02.size < 3) + { + return (0,0,0); + } + + setdvar("tempR",var_02[0]); + setdvar("tempG",var_02[1]); + setdvar("tempB",var_02[2]); + return (getdvarfloat("tempR"),getdvarfloat("tempG"),getdvarfloat("tempB")); +} + +//Function Number: 94 +strip_suffix(param_00,param_01) +{ + if(param_00.size <= param_01.size) + { + return param_00; + } + + if(getsubstr(param_00,param_00.size - param_01.size,param_00.size) == param_01) + { + return getsubstr(param_00,0,param_00.size - param_01.size); + } + + return param_00; +} + +//Function Number: 95 +_takeweaponsexcept(param_00) +{ + var_01 = self getweaponslistall(); + foreach(var_03 in var_01) + { + if(var_03 == param_00) + { + continue; + } + else + { + self takeweapon(var_03); + } + } +} + +//Function Number: 96 +savedata() +{ + var_00 = spawnstruct(); + var_00.offhandclass = self getoffhandsecondaryclass(); + var_00.actionslots = self.saved_actionslotdata; + var_00.currentweapon = self getcurrentweapon(); + var_01 = self getweaponslistall(); + var_00.weapons = []; + foreach(var_03 in var_01) + { + if(weaponinventorytype(var_03) == "exclusive") + { + continue; + } + + if(weaponinventorytype(var_03) == "altmode") + { + continue; + } + + var_04 = spawnstruct(); + var_04.name = var_03; + var_04.clipammor = self getweaponammoclip(var_03,"right"); + var_04.clipammol = self getweaponammoclip(var_03,"left"); + var_04.stockammo = self getweaponammostock(var_03); + if(isdefined(self.throwinggrenade) && self.throwinggrenade == var_03) + { + var_04.stockammo--; + } + + var_00.weapons[var_00.weapons.size] = var_04; + } + + self.script_savedata = var_00; +} + +//Function Number: 97 +func_3323() +{ + var_00 = self.script_savedata; + self setoffhandsecondaryclass(var_00.offhandclass); + foreach(var_02 in var_00.weapons) + { + _giveweapon(var_02.name,int(tablelookup("mp/camoTable.csv",1,self.loadoutprimarycamo,0))); + self setweaponammoclip(var_02.name,var_02.clipammor,"right"); + if(issubstr(var_02.name,"akimbo")) + { + self setweaponammoclip(var_02.name,var_02.clipammol,"left"); + } + + self setweaponammostock(var_02.name,var_02.stockammo); + } + + foreach(var_06, var_05 in var_00.actionslots) + { + func_31F3(var_06,var_05.type,var_05.item); + } + + if(self getcurrentweapon() == "none") + { + var_02 = var_00.currentweapon; + if(var_02 == "none") + { + var_02 = common_scripts\utility::getlastweapon(); + } + + self setspawnweapon(var_02); + self switchtoweapon(var_02); + } +} + +//Function Number: 98 +func_31F3(param_00,param_01,param_02) +{ + self.saved_actionslotdata[param_00].type = param_01; + self.saved_actionslotdata[param_00].item = param_02; + self setactionslot(param_00,param_01,param_02); +} + +//Function Number: 99 +func_3324(param_00) +{ + if(int(param_00) != param_00) + { + return 1; + } + + return 0; +} + +//Function Number: 100 +func_3325(param_00,param_01) +{ + var_02 = "scr_" + level.gametype + "_" + param_00; + level.watchdvars[var_02] = spawnstruct(); + level.watchdvars[var_02].value = getdvarint(var_02,param_01); + level.watchdvars[var_02].type = "int"; + level.watchdvars[var_02].notifystring = "update_" + param_00; +} + +//Function Number: 101 +registerwatchdvarfloat(param_00,param_01) +{ + var_02 = "scr_" + level.gametype + "_" + param_00; + level.watchdvars[var_02] = spawnstruct(); + level.watchdvars[var_02].value = getdvarfloat(var_02,param_01); + level.watchdvars[var_02].type = "float"; + level.watchdvars[var_02].notifystring = "update_" + param_00; +} + +//Function Number: 102 +func_3327(param_00,param_01) +{ + var_02 = "scr_" + level.gametype + "_" + param_00; + level.watchdvars[var_02] = spawnstruct(); + level.watchdvars[var_02].value = getdvar(var_02,param_01); + level.watchdvars[var_02].type = "string"; + level.watchdvars[var_02].notifystring = "update_" + param_00; +} + +//Function Number: 103 +setoverridewatchdvar(param_00,param_01) +{ + param_00 = "scr_" + level.gametype + "_" + param_00; + level.overridewatchdvars[param_00] = param_01; +} + +//Function Number: 104 +func_18D0(param_00) +{ + param_00 = "scr_" + level.gametype + "_" + param_00; + if(isdefined(level.overridewatchdvars) && isdefined(level.overridewatchdvars[param_00])) + { + return level.overridewatchdvars[param_00]; + } + + return level.watchdvars[param_00].value; +} + +//Function Number: 105 +func_2F2C() +{ + while(game["state"] == "playing") + { + var_00 = getarraykeys(level.watchdvars); + foreach(var_02 in var_00) + { + if(level.watchdvars[var_02].type == "string") + { + var_03 = func_333D(var_02,level.watchdvars[var_02].value); + } + else if(level.watchdvars[var_02].type == "float") + { + var_03 = func_300C(var_02,level.watchdvars[var_02].value); + } + else + { + var_03 = getintproperty(var_02,level.watchdvars[var_02].value); + } + + if(var_03 != level.watchdvars[var_02].value) + { + level.watchdvars[var_02].value = var_03; + level notify(level.watchdvars[var_02].notifystring,var_03); + } + } + + wait 1; + } +} + +//Function Number: 106 +func_26EC() +{ + if(!level.teambased) + { + return 0; + } + + if(func_18D0("winlimit") != 1 && func_18D0("roundlimit") != 1) + { + return 1; + } + + return 0; +} + +//Function Number: 107 +func_2B08() +{ + if(!level.teambased) + { + return 1; + } + + if(func_18D0("roundlimit") > 1 && game["roundsPlayed"] >= func_18D0("roundlimit") - 1) + { + return 1; + } + + if(func_18D0("winlimit") > 1 && game["roundsWon"]["allies"] >= func_18D0("winlimit") - 1 && game["roundsWon"]["axis"] >= func_18D0("winlimit") - 1) + { + return 1; + } + + return 0; +} + +//Function Number: 108 +func_2F49() +{ + if(!level.teambased) + { + return 1; + } + + if(isdefined(level.onlyroundoverride)) + { + return 0; + } + + if(func_18D0("winlimit") == 1 && func_2F4E()) + { + return 1; + } + + if(func_18D0("roundlimit") == 1) + { + return 1; + } + + return 0; +} + +//Function Number: 109 +waslastround() +{ + if(level.forcedend) + { + return 1; + } + + if(!level.teambased) + { + return 1; + } + + if(func_2F4D() || func_2F4E()) + { + return 1; + } + + return 0; +} + +//Function Number: 110 +func_2F4D() +{ + if(func_18D0("roundlimit") <= 0) + { + return 0; + } + + return game["roundsPlayed"] >= func_18D0("roundlimit"); +} + +//Function Number: 111 +func_332A() +{ + if(isobjectivebased()) + { + return 0; + } + + if(func_18D0("scorelimit") <= 0) + { + return 0; + } + + if(level.teambased) + { + if(game["teamScores"]["allies"] >= func_18D0("scorelimit") || game["teamScores"]["axis"] >= func_18D0("scorelimit")) + { + return 1; + } + } + else + { + for(var_00 = 0;var_00 < level.players.size;var_00++) + { + var_01 = level.players[var_00]; + if(isdefined(var_01.score) && var_01.score >= func_18D0("scorelimit")) + { + return 1; + } + } + } + + return 0; +} + +//Function Number: 112 +func_2F4E() +{ + if(func_18D0("winlimit") <= 0) + { + return 0; + } + + if(!level.teambased) + { + return 1; + } + + if(func_332B("allies") >= func_18D0("winlimit") || func_332B("axis") >= func_18D0("winlimit")) + { + return 1; + } + + return 0; +} + +//Function Number: 113 +func_26E4() +{ + if(func_26EC()) + { + if(func_18D0("roundlimit")) + { + return func_18D0("roundlimit"); + } + + return func_18D0("winlimit"); + } + + return func_18D0("scorelimit"); +} + +//Function Number: 114 +func_332B(param_00) +{ + return game["roundsWon"][param_00]; +} + +//Function Number: 115 +isobjectivebased() +{ + return level.objectivebased; +} + +//Function Number: 116 +gettimelimit() +{ + if(inovertime() && !isdefined(game["inNukeOvertime"]) || !game["inNukeOvertime"]) + { + var_00 = int(getdvar("overtimeTimeLimit")); + if(isdefined(var_00)) + { + return var_00; + } + + return 1; + } + + if(isdefined(level.dd) && level.dd && isdefined(level.bombexploded) && level.bombexploded > 0) + { + return func_18D0("timelimit") + level.bombexploded * level.ddtimetoadd; + } + + return func_18D0("timelimit"); +} + +//Function Number: 117 +gethalftime() +{ + if(inovertime()) + { + return 0; + } + + if(isdefined(game["inNukeOvertime"]) && game["inNukeOvertime"]) + { + return 0; + } + + return func_18D0("halftime"); +} + +//Function Number: 118 +inovertime() +{ + return isdefined(game["status"]) && game["status"] == "overtime"; +} + +//Function Number: 119 +gamehasstarted() +{ + if(level.teambased) + { + return level.hasspawned["axis"] && level.hasspawned["allies"]; + } + + return level.maxplayercount > 1; +} + +//Function Number: 120 +func_3330(param_00) +{ + var_01 = (0,0,0); + if(!param_00.size) + { + return undefined; + } + + foreach(var_03 in param_00) + { + var_01 = var_01 + var_03.origin; + } + + var_05 = int(var_01[0] / param_00.size); + var_06 = int(var_01[1] / param_00.size); + var_07 = int(var_01[2] / param_00.size); + var_01 = (var_05,var_06,var_07); + return var_01; +} + +//Function Number: 121 +getlivingplayers(param_00) +{ + var_01 = []; + foreach(var_03 in level.players) + { + if(!isalive(var_03)) + { + continue; + } + + if(level.teambased && isdefined(param_00)) + { + if(param_00 == var_03.pers["team"]) + { + var_01[var_01.size] = var_03; + } + + continue; + } + + var_01[var_01.size] = var_03; + } + + return var_01; +} + +//Function Number: 122 +setusingremote(param_00) +{ + if(isdefined(self.carryicon)) + { + self.carryicon.alpha = 0; + } + + self.usingremote = param_00; + common_scripts\utility::_disableoffhandweapons(); + self notify("using_remote"); +} + +//Function Number: 123 +getremotename() +{ + return self.usingremote; +} + +//Function Number: 124 +freezecontrolswrapper(param_00) +{ + if(isdefined(level.hostmigrationtimer)) + { + self freezecontrols(1); + return; + } + + self freezecontrols(param_00); +} + +//Function Number: 125 +clearusingremote() +{ + if(isdefined(self.carryicon)) + { + self.carryicon.alpha = 1; + } + + self.usingremote = undefined; + common_scripts\utility::_enableoffhandweapons(); + var_00 = self getcurrentweapon(); + if(var_00 == "none" || func_2829(var_00)) + { + self switchtoweapon(common_scripts\utility::getlastweapon()); + } + + freezecontrolswrapper(0); + self notify("stopped_using_remote"); +} + +//Function Number: 126 +isusingremote() +{ + return isdefined(self.usingremote); +} + +//Function Number: 127 +func_2BDB(param_00) +{ + if(!isdefined(level.queues)) + { + level.queues = []; + } + + level.queues[param_00] = []; +} + +//Function Number: 128 +func_2BEB(param_00,param_01) +{ + level.queues[param_00][level.queues[param_00].size] = param_01; +} + +//Function Number: 129 +queueremovefirst(param_00) +{ + var_01 = undefined; + var_02 = []; + foreach(var_04 in level.queues[param_00]) + { + if(!isdefined(var_04)) + { + continue; + } + + if(!isdefined(var_01)) + { + var_01 = var_04; + continue; + } + + var_02[var_02.size] = var_04; + } + + level.queues[param_00] = var_02; + return var_01; +} + +//Function Number: 130 +_giveweapon(param_00,param_01,param_02) +{ + if(!isdefined(param_01)) + { + param_01 = -1; + } + + if(issubstr(param_00,"_akimbo") || isdefined(param_02) && param_02 == 1) + { + self giveweapon(param_00,param_01,1); + return; + } + + self giveweapon(param_00,param_01,0); +} + +//Function Number: 131 +func_27AF(param_00) +{ + if(isdefined(self.perks[param_00])) + { + return 1; + } + + return 0; +} + +//Function Number: 132 +giveperk(param_00,param_01) +{ + if(issubstr(param_00,"_mp")) + { + switch(param_00) + { + case "frag_grenade_mp": + self setoffhandprimaryclass("frag"); + break; + + case "throwingknife_mp": + self setoffhandprimaryclass("throwingknife"); + break; + + case "trophy_mp": + self setoffhandsecondaryclass("flash"); + break; + } + + _giveweapon(param_00,0); + self givestartammo(param_00); + func_3334(param_00,param_01); + return; + } + + if(issubstr(param_00,"specialty_weapon_")) + { + func_3334(param_00,param_01); + return; + } + + func_3334(param_00,param_01); + func_3335(param_00); +} + +//Function Number: 133 +func_3334(param_00,param_01) +{ + self.perks[param_00] = 1; + if(isdefined(level.perksetfuncs[param_00])) + { + self thread [[ level.perksetfuncs[param_00] ]](); + } + + self setperk(param_00,!isdefined(level.scriptperks[param_00]),param_01); +} + +//Function Number: 134 +func_3335(param_00) +{ + if(param_00 == "specialty_coldblooded") + { + giveperk("specialty_heartbreaker",0); + } + + if(param_00 == "specialty_fasterlockon") + { + giveperk("specialty_armorpiercing",0); + } + + if(param_00 == "specialty_spygame") + { + giveperk("specialty_empimmune",0); + } + + if(param_00 == "specialty_rollover") + { + giveperk("specialty_assists",0); + } +} + +//Function Number: 135 +func_282E(param_00) +{ + self.perks[param_00] = undefined; + if(isdefined(level.perkunsetfuncs[param_00])) + { + self thread [[ level.perkunsetfuncs[param_00] ]](); + } + + self unsetperk(param_00,!isdefined(level.scriptperks[param_00])); +} + +//Function Number: 136 +_unsetextraperks(param_00) +{ + if(param_00 == "specialty_bulletaccuracy") + { + func_282E("specialty_steadyaimpro"); + } + + if(param_00 == "specialty_coldblooded") + { + func_282E("specialty_heartbreaker"); + } + + if(param_00 == "specialty_fasterlockon") + { + func_282E("specialty_armorpiercing"); + } + + if(param_00 == "specialty_spygame") + { + func_282E("specialty_empimmune"); + } + + if(param_00 == "specialty_rollover") + { + func_282E("specialty_assists"); + } +} + +//Function Number: 137 +_clearperks() +{ + foreach(var_02, var_01 in self.perks) + { + if(isdefined(level.perkunsetfuncs[var_02])) + { + self [[ level.perkunsetfuncs[var_02] ]](); + } + } + + self.perks = []; + self clearperks(); +} + +//Function Number: 138 +quicksort(param_00) +{ + return func_3337(param_00,0,param_00.size - 1); +} + +//Function Number: 139 +func_3337(param_00,param_01,param_02) +{ + var_03 = param_01; + var_04 = param_02; + if(param_02 - param_01 >= 1) + { + var_05 = param_00[param_01]; + while(var_04 > var_03) + { + while(param_00[var_03] <= var_05 && var_03 <= param_02 && var_04 > var_03) + { + var_03++; + } + + while(param_00[var_04] > var_05 && var_04 >= param_01 && var_04 >= var_03) + { + var_04--; + } + + if(var_04 > var_03) + { + param_00 = func_3338(param_00,var_03,var_04); + } + } + + param_00 = func_3338(param_00,param_01,var_04); + param_00 = func_3337(param_00,param_01,var_04 - 1); + param_00 = func_3337(param_00,var_04 + 1,param_02); + } + else + { + return param_01; + } + + return param_00; +} + +//Function Number: 140 +func_3338(param_00,param_01,param_02) +{ + var_03 = param_00[param_01]; + param_00[param_01] = param_00[param_02]; + param_00[param_02] = var_03; + return param_00; +} + +//Function Number: 141 +_suicide() +{ + if(isusingremote() && !isdefined(self.fauxdead)) + { + thread maps\mp\gametypes\_damage::func_2CDB(self,self,self,10000,"MOD_SUICIDE","frag_grenade_mp",(0,0,0),"none",0,1116,1); + return; + } + + if(!isusingremote() && !isdefined(self.fauxdead)) + { + self suicide(); + } +} + +//Function Number: 142 +isreallyalive(param_00) +{ + if(isalive(param_00) && !isdefined(param_00.fauxdead)) + { + return 1; + } + + return 0; +} + +//Function Number: 143 +playdeathsound() +{ + var_00 = randomintrange(1,8); + if(self.team == "axis") + { + self playsound("generic_death_russian_" + var_00); + return; + } + + self playsound("generic_death_american_" + var_00); +} + +//Function Number: 144 +rankingenabled() +{ + return level.rankedmatch && !self.usingonlinedataoffline; +} + +//Function Number: 145 +func_2EFF() +{ + return level.onlinegame && getdvarint("xblive_privatematch"); +} + +//Function Number: 146 +matchmakinggame() +{ + return level.onlinegame && !getdvarint("xblive_privatematch"); +} + +//Function Number: 147 +setaltsceneobj(param_00,param_01,param_02,param_03) +{ +} + +//Function Number: 148 +func_333A(param_00) +{ + self endon("altscene"); + param_00 waittill("death"); + self notify("end_altScene"); +} + +//Function Number: 149 +getgametypenumlives() +{ + return func_18D0("numlives"); +} + +//Function Number: 150 +givecombathigh(param_00) +{ + self.combathigh = param_00; +} + +//Function Number: 151 +arrayinsertion(param_00,param_01,param_02) +{ + if(param_00.size != 0) + { + for(var_03 = param_00.size;var_03 >= param_02;var_03--) + { + param_00[var_03 + 1] = param_00[var_03]; + } + } + + param_00[param_02] = param_01; +} + +//Function Number: 152 +func_333D(param_00,param_01) +{ + var_02 = param_01; + var_02 = getdvar(param_00,param_01); + return var_02; +} + +//Function Number: 153 +getintproperty(param_00,param_01) +{ + var_02 = param_01; + var_02 = getdvarint(param_00,param_01); + return var_02; +} + +//Function Number: 154 +func_300C(param_00,param_01) +{ + var_02 = param_01; + var_02 = getdvarfloat(param_00,param_01); + return var_02; +} + +//Function Number: 155 +statusmenu(param_00) +{ + self endon("disconnect"); + if(!isdefined(self._statusmenu)) + { + self.statusmenu = 0; + } + + if(self.statusmenu) + { + return; + } + + self.statusmenu = 1; + self openpopupmenu("status_update"); + wait param_00; + self closepopupmenu("status_update"); + wait 10; + self.statusmenu = 0; +} + +//Function Number: 156 +ischangingweapon() +{ + return isdefined(self.changingweapon); +} + +//Function Number: 157 +func_2CCE(param_00) +{ + if(func_27AF("specialty_explosivebullets")) + { + return 0; + } + + if(isdefined(self.isjuggernautrecon) && self.isjuggernautrecon == 1) + { + return 0; + } + + if(isdefined(level.killstreakchainingweapons[param_00])) + { + for(var_01 = 1;var_01 < 4;var_01++) + { + if(isdefined(self.pers["killstreaks"][var_01]) && isdefined(self.pers["killstreaks"][var_01].streakname) && self.pers["killstreaks"][var_01].streakname == level.killstreakchainingweapons[param_00] && isdefined(self.pers["killstreaks"][var_01].lifeid) && self.pers["killstreaks"][var_01].lifeid == self.pers["deaths"]) + { + return streakshouldchain(level.killstreakchainingweapons[param_00]); + } + } + + return 0; + } + + return !func_2829(var_01); +} + +//Function Number: 158 +streakshouldchain(param_00) +{ + var_01 = maps\mp\killstreaks\_killstreaks::getstreakcost(param_00); + var_02 = maps\mp\killstreaks\_killstreaks::func_31DB(); + var_03 = maps\mp\killstreaks\_killstreaks::getstreakcost(var_02); + return var_01 < var_03; +} + +//Function Number: 159 +isjuggernaut() +{ + if(isdefined(self.isjuggernaut) && self.isjuggernaut == 1) + { + return 1; + } + + if(isdefined(self.isjuggernautdef) && self.isjuggernautdef == 1) + { + return 1; + } + + if(isdefined(self.isjuggernautgl) && self.isjuggernautgl == 1) + { + return 1; + } + + if(isdefined(self.isjuggernautrecon) && self.isjuggernautrecon == 1) + { + return 1; + } + + return 0; +} + +//Function Number: 160 +func_2829(param_00) +{ + if(!isdefined(param_00)) + { + return 0; + } + + if(param_00 == "none") + { + return 0; + } + + var_01 = strtok(param_00,"_"); + var_02 = 0; + if(param_00 != "destructible_car" && param_00 != "barrel_mp") + { + foreach(var_04 in var_01) + { + if(var_04 == "mp") + { + var_02 = 1; + break; + } + } + + if(!var_02) + { + param_00 = param_00 + "_mp"; + } + } + + if(issubstr(param_00,"destructible")) + { + return 0; + } + + if(issubstr(param_00,"killstreak")) + { + return 1; + } + + if(maps\mp\killstreaks\_airdrop::func_2E9F(param_00)) + { + return 1; + } + + if(isdefined(level.killstreakweildweapons[param_00])) + { + return 1; + } + + if(isdefined(weaponinventorytype(param_00)) && weaponinventorytype(param_00) == "exclusive" && param_00 != "destructible_car" && param_00 != "barrel_mp") + { + return 1; + } + + return 0; +} + +//Function Number: 161 +func_2CC3(param_00) +{ + if(!isdefined(param_00)) + { + return 0; + } + + if(param_00 == "turret_minigun_mp") + { + return 1; + } + + if(issubstr(param_00,"_bipod_")) + { + return 1; + } + + return 0; +} + +//Function Number: 162 +isjuggernautweapon(param_00) +{ + if(!isdefined(param_00)) + { + return 0; + } + + switch(param_00) + { + case "iw5_usp45jugg_mp": + case "iw5_riotshieldjugg_mp": + case "iw5_mp412jugg_mp": + case "iw5_m60jugg_mp": + return 1; + } + + return 0; +} + +//Function Number: 163 +getweaponclass(param_00) +{ + var_01 = strtok(param_00,"_"); + if(var_01[0] == "iw5") + { + var_02 = var_01[0] + "_" + var_01[1]; + var_03 = tablelookup("mp/statstable.csv",4,var_02,2); + } + else if(var_03[0] == "alt") + { + var_02 = var_03[1] + "_" + var_03[2]; + var_03 = tablelookup("mp/statstable.csv",4,var_02,2); + } + else + { + var_03 = tablelookup("mp/statstable.csv",4,var_03[0],2); + } + + if(var_03 == "") + { + var_04 = strip_suffix(param_00,"_mp"); + var_03 = tablelookup("mp/statstable.csv",4,var_04,2); + } + + if(func_2CC3(param_00)) + { + var_03 = "weapon_mg"; + } + else if(func_2829(param_00)) + { + var_03 = "killstreak"; + } + else if(isdeathstreakweapon(param_00)) + { + var_03 = "deathstreak"; + } + else if(param_00 == "none") + { + var_03 = "other"; + } + else if(var_03 == "") + { + var_03 = "other"; + } + + return var_03; +} + +//Function Number: 164 +isdeathstreakweapon(param_00) +{ + if(param_00 == "c4death_mp" || param_00 == "frag_grenade_short_mp") + { + return 1; + } + + return 0; +} + +//Function Number: 165 +getbaseweaponname(param_00) +{ + var_01 = strtok(param_00,"_"); + if(var_01[0] == "iw5") + { + } + else if(var_41[0] == "alt") + { + } + + return var_41[0]; +} + +//Function Number: 166 +fixakimbostring(param_00,param_01) +{ + if(!isdefined(param_01)) + { + param_01 = 1; + } + + var_02 = 0; + for(var_03 = 0;var_03 < param_00.size;var_03++) + { + if(param_00[var_03] == "a" && param_00[var_03 + 1] == "k" && param_00[var_03 + 2] == "i" && param_00[var_03 + 3] == "m" && param_00[var_03 + 4] == "b" && param_00[var_03 + 5] == "o") + { + var_02 = var_03; + break; + } + } + + param_00 = getsubstr(param_00,0,var_02) + getsubstr(param_00,var_02 + 6,param_00.size); + if(param_01) + { + param_00 = param_00 + "_akimbo"; + } + + return param_00; +} + +//Function Number: 167 +func_2ED2(param_00,param_01) +{ + playsoundatpos(param_01,param_00); +} + +//Function Number: 168 +func_2DA6(param_00,param_01) +{ + var_02 = 1; + for(var_03 = 0;var_03 < param_01;var_03++) + { + var_02 = var_02 * 10; + } + + var_04 = param_00 * var_02; + var_04 = int(var_04); + var_04 = var_04 / var_02; + return var_04; +} + +//Function Number: 169 +rounddecimalplaces(param_00,param_01,param_02) +{ + if(!isdefined(param_02)) + { + param_02 = "nearest"; + } + + var_03 = 1; + for(var_04 = 0;var_04 < param_01;var_04++) + { + var_03 = var_03 * 10; + } + + var_05 = param_00 * var_03; + if(param_02 == "up") + { + var_06 = ceil(var_05); + } + else if(var_03 == "down") + { + var_06 = floor(var_06); + } + else + { + var_06 = var_06 + 0.5; + } + + var_05 = int(var_06); + var_05 = var_05 / var_03; + return var_05; +} + +//Function Number: 170 +func_2D9B(param_00) +{ + foreach(var_02 in level.players) + { + if(var_02.clientid == param_00) + { + return var_02; + } + } + + return undefined; +} + +//Function Number: 171 +isrested() +{ + if(!rankingenabled()) + { + return 0; + } + + return self getplayerdata("restXPGoal") > self getplayerdata("experience"); +} + +//Function Number: 172 +func_0EBF(param_00) +{ + var_01 = strtok(param_00,"."); + var_02 = int(var_01[0]); + if(isdefined(var_01[1])) + { + var_03 = 1; + for(var_04 = 0;var_04 < var_01[1].size;var_04++) + { + var_03 = var_03 * 0.1; + } + + var_02 = var_02 + int(var_01[1]) * var_03; + } + + return var_02; +} + +//Function Number: 173 +setselfusable(param_00) +{ + self makeusable(); + foreach(var_02 in level.players) + { + if(var_02 != param_00) + { + self disableplayeruse(var_02); + continue; + } + + self enableplayeruse(var_02); + } +} + +//Function Number: 174 +maketeamusable(param_00) +{ + self makeusable(); + thread func_3344(param_00); +} + +//Function Number: 175 +func_3344(param_00) +{ + self endon("death"); + for(;;) + { + foreach(var_02 in level.players) + { + if(var_02.team == param_00) + { + self enableplayeruse(var_02); + continue; + } + + self disableplayeruse(var_02); + } + + level waittill("joined_team"); + } +} + +//Function Number: 176 +makeenemyusable(param_00) +{ + self makeusable(); + thread func_3345(param_00); +} + +//Function Number: 177 +func_3345(param_00) +{ + self endon("death"); + var_01 = param_00.team; + for(;;) + { + if(level.teambased) + { + foreach(var_03 in level.players) + { + if(var_03.team != var_01) + { + self enableplayeruse(var_03); + continue; + } + + self disableplayeruse(var_03); + } + } + else + { + foreach(var_03 in level.players) + { + if(var_03 != param_00) + { + self enableplayeruse(var_03); + continue; + } + + self disableplayeruse(var_03); + } + } + + level waittill("joined_team"); + } +} + +//Function Number: 178 +func_28D8() +{ + var_00 = getmatchdata("lifeCount"); + if(var_00 < level.maxlives) + { + setmatchdata("lifeCount",var_00 + 1); + } + + return var_00; +} + +//Function Number: 179 +func_2B87() +{ + if(!isdefined(game["flags"])) + { + game["flags"] = []; + } +} + +//Function Number: 180 +func_2F29(param_00,param_01) +{ + game["flags"][param_00] = param_01; +} + +//Function Number: 181 +gameflag(param_00) +{ + return game["flags"][param_00]; +} + +//Function Number: 182 +func_2EFB(param_00) +{ + game["flags"][param_00] = 1; + level notify(param_00); +} + +//Function Number: 183 +gameflagclear(param_00) +{ + game["flags"][param_00] = 0; +} + +//Function Number: 184 +func_274B(param_00) +{ + while(!gameflag(param_00)) + { + level waittill(param_00); + } +} + +//Function Number: 185 +isprimarydamage(param_00) +{ + if(param_00 == "MOD_RIFLE_BULLET" || param_00 == "MOD_PISTOL_BULLET") + { + return 1; + } + + return 0; +} + +//Function Number: 186 +func_297E(param_00) +{ + var_01 = "MOD_RIFLE_BULLET MOD_PISTOL_BULLET MOD_HEAD_SHOT"; + if(issubstr(var_01,param_00)) + { + return 1; + } + + return 0; +} + +//Function Number: 187 +func_2B88() +{ + if(!isdefined(level.levelflags)) + { + level.levelflags = []; + } +} + +//Function Number: 188 +func_2F23(param_00,param_01) +{ + level.levelflags[param_00] = param_01; +} + +//Function Number: 189 +levelflag(param_00) +{ + return level.levelflags[param_00]; +} + +//Function Number: 190 +levelflagset(param_00) +{ + level.levelflags[param_00] = 1; + level notify(param_00); +} + +//Function Number: 191 +func_2F4A(param_00) +{ + level.levelflags[param_00] = 0; + level notify(param_00); +} + +//Function Number: 192 +func_3349(param_00) +{ + while(!levelflag(param_00)) + { + level waittill(param_00); + } +} + +//Function Number: 193 +func_334A(param_00) +{ + while(levelflag(param_00)) + { + level waittill(param_00); + } +} + +//Function Number: 194 +getweaponattachments(param_00) +{ + var_01 = strtok(param_00,"_"); + var_02 = []; + foreach(var_04 in var_01) + { + if(issubstr(var_04,"scopevz")) + { + var_02[var_02.size] = "vzscope"; + } + + if(maps\mp\gametypes\_class::func_32C9(var_04,0)) + { + var_02[var_02.size] = var_04; + } + } + + return var_02; +} + +//Function Number: 195 +func_27E5() +{ + if(self.team == "spectator") + { + return 0; + } + + if(level.teambased) + { + return level.teamemped[self.team] || isdefined(self.empgrenaded) && self.empgrenaded || level.teamnukeemped[self.team]; + } + + return (isdefined(level.empplayer) && level.empplayer != self) || isdefined(self.empgrenaded) && self.empgrenaded || isdefined(level.nukeinfo.player) && self != level.nukeinfo.player && level.teamnukeemped[self.team]; +} + +//Function Number: 196 +func_2BE7() +{ + return 0; +} + +//Function Number: 197 +func_3200() +{ + if(self.team == "spectator") + { + return 0; + } + + return isdefined(self.nuked); +} + +//Function Number: 198 +getplayerforguid(param_00) +{ + foreach(var_02 in level.players) + { + if(var_02.guid == param_00) + { + return var_02; + } + } + + return undefined; +} + +//Function Number: 199 +teamplayercardsplash(param_00,param_01,param_02) +{ + if(level.hardcoremode) + { + return; + } + + foreach(var_04 in level.players) + { + if(isdefined(param_02) && var_04.team != param_02) + { + continue; + } + + var_04 thread maps\mp\gametypes\_hud_message::playercardsplashnotify(param_00,param_01); + } +} + +//Function Number: 200 +func_2827(param_00) +{ + switch(getweaponclass(param_00)) + { + case "weapon_shotgun": + case "weapon_lmg": + case "weapon_sniper": + case "weapon_riot": + case "weapon_assault": + case "weapon_smg": + return 1; + + default: + return 0; + } +} + +//Function Number: 201 +iscacsecondaryweapon(param_00) +{ + switch(getweaponclass(param_00)) + { + case "weapon_machine_pistol": + case "weapon_pistol": + case "weapon_projectile": + return 1; + + default: + return 0; + } +} + +//Function Number: 202 +getlastlivingplayer(param_00) +{ + var_01 = undefined; + foreach(var_03 in level.players) + { + if(isdefined(param_00) && var_03.team != param_00) + { + continue; + } + + if(!isreallyalive(var_03) && !var_03 maps\mp\gametypes\_playerlogic::mayspawn()) + { + continue; + } + + var_01 = var_03; + } + + return var_01; +} + +//Function Number: 203 +getpotentiallivingplayers() +{ + var_00 = []; + foreach(var_02 in level.players) + { + if(!isreallyalive(var_02) && !var_02 maps\mp\gametypes\_playerlogic::mayspawn()) + { + continue; + } + + var_00[var_00.size] = var_02; + } + + return var_00; +} + +//Function Number: 204 +func_2F53(param_00,param_01) +{ + self endon("death"); + self endon("disconnect"); + var_02 = 0; + if(!isdefined(param_01)) + { + param_01 = 0.05; + } + + if(!isdefined(param_00)) + { + param_00 = 0; + } + + for(;;) + { + if(self.health != self.maxhealth) + { + var_02 = 0; + } + else + { + var_02 = var_02 + param_01; + } + + wait param_01; + if(self.health == self.maxhealth && var_02 >= param_00) + { + break; + } + } +} + +//Function Number: 205 +func_3F1D(param_00,param_01) +{ + var_02 = tablelookup("mp/statstable.csv",4,param_01,2); + switch(var_02) + { + case "weapon_smg": + if(param_00 == "reflex") + { + return "reflexsmg"; + } + else if(param_00 == "eotech") + { + return "eotechsmg"; + } + else if(param_00 == "acog") + { + return "acogsmg"; + } + else if(param_00 == "thermal") + { + return "thermalsmg"; + } + + break; + + case "weapon_lmg": + if(param_00 == "reflex") + { + return "reflexlmg"; + } + else if(param_00 == "eotech") + { + return "eotechlmg"; + } + + break; + + case "weapon_machine_pistol": + if(param_00 == "reflex") + { + return "reflexsmg"; + } + else if(param_00 == "eotech") + { + return "eotechsmg"; + } + + break; + + default: + return param_00; + } +} + +//Function Number: 206 +validateattachment(param_00) +{ + switch(param_00) + { + case "silencer03": + case "silencer02": + return "silencer"; + + case "m320": + case "gp25": + return "gl"; + + case "reflexlmg": + case "reflexsmg": + return "reflex"; + + case "eotechlmg": + case "eotechsmg": + return "eotech"; + + case "acogsmg": + return "acog"; + + case "thermalsmg": + return "thermal"; + + default: + return param_00; + } +} + +//Function Number: 207 +_objective_delete(param_00) +{ + objective_delete(param_00); + if(!isdefined(level.reclaimedreservedobjectives)) + { + level.reclaimedreservedobjectives = []; + level.reclaimedreservedobjectives[0] = param_00; + return; + } + + level.reclaimedreservedobjectives[level.reclaimedreservedobjectives.size] = param_00; +} + +//Function Number: 208 +func_2A5A() +{ + var_00 = getentarray("trigger_hurt","classname"); + foreach(var_02 in var_00) + { + if(self istouching(var_02)) + { + return 1; + } + } + + var_04 = getentarray("radiation","targetname"); + foreach(var_02 in var_04) + { + if(self istouching(var_02)) + { + return 1; + } + } + + return 0; +} + +//Function Number: 209 +setthirdpersondof(param_00) +{ + if(param_00) + { + self setdepthoffield(0,110,512,4096,6,1.8); + return; + } + + self setdepthoffield(0,0,512,512,4,0); +} + +//Function Number: 210 +killtrigger(param_00,param_01,param_02) +{ + var_03 = spawn("trigger_radius",param_00,0,param_01,param_02); + for(;;) + { + var_03 waittill("trigger",var_04); + if(!isplayer(var_04)) + { + continue; + } + + var_04 suicide(); + } +} + +//Function Number: 211 +findisfacing(param_00,param_01,param_02) +{ + var_03 = cos(param_02); + var_04 = anglestoforward(param_00.angles); + var_05 = param_01.origin - param_00.origin; + var_04 = var_04 * (1,1,0); + var_05 = var_05 * (1,1,0); + var_05 = vectornormalize(var_05); + var_04 = vectornormalize(var_04); + var_06 = vectordot(var_05,var_04); + if(var_06 >= var_03) + { + return 1; + } + + return 0; +} + +//Function Number: 212 +func_279B(param_00,param_01) +{ + if(!isdefined(param_00) && isdefined(param_01)) + { + return param_01; + } + + if(!isdefined(param_01) && isdefined(param_00)) + { + return param_00; + } + + foreach(var_03 in param_01) + { + param_00[param_00.size] = var_03; + } + + return param_00; +} + +//Function Number: 213 +setrecoilscale(param_00,param_01) +{ + if(!isdefined(param_00)) + { + param_00 = 0; + } + + if(!isdefined(self.recoilscale)) + { + self.recoilscale = param_00; + } + else + { + self.recoilscale = self.recoilscale + param_00; + } + + if(isdefined(param_01)) + { + if(isdefined(self.recoilscale) && param_01 < self.recoilscale) + { + param_01 = self.recoilscale; + } + + var_02 = 100 - param_01; + } + else + { + var_02 = 100 - self.recoilscale; + } + + if(var_02 < 0) + { + var_02 = 0; + } + + if(var_02 > 100) + { + var_02 = 100; + } + + if(var_02 == 100) + { + self player_recoilscaleoff(); + return; + } + + self player_recoilscaleon(var_02); +} + +//Function Number: 214 +cleanarray(param_00) +{ + var_01 = []; + foreach(var_04, var_03 in param_00) + { + if(!isdefined(var_03)) + { + continue; + } + + var_01[var_01.size] = param_00[var_04]; + } + + return var_01; +} + +//Function Number: 215 +notusableforjoiningplayers(param_00) +{ + self endon("death"); + level endon("game_ended"); + param_00 endon("disconnect"); + param_00 endon("death"); + for(;;) + { + level waittill("player_spawned",var_01); + if(isdefined(var_01) && var_01 != param_00) + { + self disableplayeruse(var_01); + } + } +} + +//Function Number: 216 +func_323E(param_00,param_01) +{ + return getsubstr(param_00,0,param_01.size) == param_01; +} + +//Function Number: 217 +func_2DF3() +{ + if(isdefined(self.laststand) && !func_27AF("specialty_finalstand")) + { + self iprintlnbold(&"MP_UNAVILABLE_IN_LASTSTAND"); + return 0; + } + + if(isdefined(level.civilianjetflyby)) + { + self iprintlnbold(&"MP_CIVILIAN_AIR_TRAFFIC"); + return 0; + } + + if(isusingremote()) + { + return 0; + } + + if(func_27E5()) + { + return 0; + } + + return 1; +} + +//Function Number: 218 +func_2BEC(param_00) +{ + if(!isdefined(param_00)) + { + param_00 = 0; + } + + var_01 = param_00; + if(isdefined(level.helis)) + { + var_01 = var_01 + level.helis.size; + } + + if(isdefined(level.littlebirds)) + { + var_01 = var_01 + level.littlebirds.size; + } + + if(isdefined(level.ugvs)) + { + var_01 = var_01 + level.ugvs.size; + } + + return var_01; +} + +//Function Number: 219 +maxvehiclesallowed() +{ + return 8; +} + +//Function Number: 220 +func_80C7() +{ + level.fauxvehiclecount++; +} + +//Function Number: 221 +func_80C8() +{ + level.fauxvehiclecount--; + if(level.fauxvehiclecount < 0) + { + level.fauxvehiclecount = 0; + } +} + +//Function Number: 222 +func_80F2() +{ + return 1.1; +} + +//Function Number: 223 +allowteamchoice() +{ + var_00 = int(tablelookup("mp/gametypesTable.csv",0,level.gametype,4)); + return var_00; +} + +//Function Number: 224 +allowclasschoice() +{ + var_00 = int(tablelookup("mp/gametypesTable.csv",0,level.gametype,5)); + return var_00; +} + +//Function Number: 225 +func_3242(param_00,param_01) +{ + var_02 = 4; + var_03 = 0; + var_04 = 4; + var_05 = self getplayerdata("weaponRank",param_01); + var_06 = int(tablelookup("mp/weaponRankTable.csv",var_03,getweaponclass(param_01),var_04)); + var_07 = tablelookup("mp/weaponRankTable.csv",var_06,param_00,var_02); + if(var_07 != "") + { + if(var_05 >= int(var_07)) + { + return 1; + } + } + + return 0; +} + +//Function Number: 226 +func_822B(param_00,param_01) +{ + if(isdefined(self.loadoutprimary) && self.loadoutprimary == param_01) + { + if(isdefined(self.loadoutprimarybuff) && self.loadoutprimarybuff == param_00) + { + return 1; + } + } + else if(isdefined(self.loadoutsecondary) && self.loadoutsecondary == param_01) + { + if(isdefined(self.loadoutsecondarybuff) && self.loadoutsecondarybuff == param_00) + { + return 1; + } + } + + return 0; +} + +//Function Number: 227 +func_334C(param_00) +{ + var_01 = getmatchrulesdata("commonOption","timeLimit"); + setdynamicdvar("scr_" + level.gametype + "_timeLimit",var_01); + func_3315(level.gametype,var_01); + var_02 = getmatchrulesdata("commonOption","scoreLimit"); + setdynamicdvar("scr_" + level.gametype + "_scoreLimit",var_02); + registerscorelimitdvar(level.gametype,var_02); + var_03 = getmatchrulesdata("commonOption","numLives"); + setdynamicdvar("scr_" + level.gametype + "_numLives",var_03); + func_3317(level.gametype,var_03); + setdynamicdvar("scr_player_maxhealth",getmatchrulesdata("commonOption","maxHealth")); + setdynamicdvar("scr_player_healthregentime",getmatchrulesdata("commonOption","healthRegen")); + level.matchrules_damagemultiplier = 0; + level.matchrules_vampirism = 0; + setdynamicdvar("scr_game_spectatetype",getmatchrulesdata("commonOption","spectateModeAllowed")); + setdynamicdvar("scr_game_allowkillcam",getmatchrulesdata("commonOption","showKillcam")); + setdynamicdvar("scr_game_forceuav",getmatchrulesdata("commonOption","radarAlwaysOn")); + setdynamicdvar("scr_" + level.gametype + "_playerrespawndelay",getmatchrulesdata("commonOption","respawnDelay")); + setdynamicdvar("scr_" + level.gametype + "_waverespawndelay",getmatchrulesdata("commonOption","waveRespawnDelay")); + setdynamicdvar("scr_player_forcerespawn",getmatchrulesdata("commonOption","forceRespawn")); + level.matchrules_allowcustomclasses = getmatchrulesdata("commonOption","allowCustomClasses"); + setdynamicdvar("scr_game_hardpoints",getmatchrulesdata("commonOption","allowKillstreaks")); + setdynamicdvar("scr_game_perks",getmatchrulesdata("commonOption","allowPerks")); + setdynamicdvar("g_hardcore",getmatchrulesdata("commonOption","hardcoreModeOn")); + setdynamicdvar("scr_thirdPerson",getmatchrulesdata("commonOption","forceThirdPersonView")); + setdynamicdvar("camera_thirdPerson",getmatchrulesdata("commonOption","forceThirdPersonView")); + setdynamicdvar("scr_game_onlyheadshots",getmatchrulesdata("commonOption","headshotsOnly")); + if(!isdefined(param_00)) + { + setdynamicdvar("scr_team_fftype",getmatchrulesdata("commonOption","friendlyFire")); + } + + if(getmatchrulesdata("commonOption","hardcoreModeOn")) + { + setdynamicdvar("scr_team_fftype",1); + setdynamicdvar("scr_player_maxhealth",30); + setdynamicdvar("scr_player_healthregentime",0); + setdynamicdvar("scr_player_respawndelay",10); + setdynamicdvar("scr_game_allowkillcam",0); + setdynamicdvar("scr_game_forceuav",0); + } +} + +//Function Number: 228 +func_810A() +{ + for(;;) + { + level waittill("host_migration_begin"); + [[ level.initializematchrules ]](); + } +} + +//Function Number: 229 +reinitializethermal(param_00) +{ + self endon("disconnect"); + if(isdefined(param_00)) + { + param_00 endon("death"); + } + + for(;;) + { + level waittill("host_migration_begin"); + if(isdefined(self.lastvisionsetthermal)) + { + self visionsetthermalforplayer(self.lastvisionsetthermal,0); + } + } +} + +//Function Number: 230 +func_334E(param_00,param_01) +{ + var_02 = []; + if(var_41["loadoutOffhand"] == "specialty_null") + { + } + + var_03 = getmatchrulesdata("defaultClasses",param_01,var_02,"class","perks",5); + if(var_03 != "specialty_null") + { + var_41["loadoutStreakType"] = var_03; + var_41["loadoutKillstreak1"] = maps\mp\gametypes\_class::recipe_getkillstreak(param_01,var_02,var_03,0); + var_41["loadoutKillstreak2"] = maps\mp\gametypes\_class::recipe_getkillstreak(param_01,var_02,var_03,1); + var_41["loadoutKillstreak3"] = maps\mp\gametypes\_class::recipe_getkillstreak(param_01,var_02,var_03,2); + } + + var_41["loadoutDeathstreak"] = getmatchrulesdata("defaultClasses",param_01,var_02,"class","deathstreak"); + var_41["loadoutJuggernaut"] = getmatchrulesdata("defaultClasses",param_01,var_02,"juggernaut"); + return var_41; +} + +//Function Number: 231 +recipeclassapplyjuggernaut(param_00) +{ + level endon("game_ended"); + self endon("disconnect"); + if(level.ingraceperiod && !self.hasdonecombat) + { + self waittill("giveLoadout"); + } + else + { + self waittill("spawned_player"); + } + + if(param_00) + { + self notify("lost_juggernaut"); + wait 0.5; + } + + if(!isdefined(self.isjuiced)) + { + self.movespeedscaler = 0.7; + maps\mp\gametypes\_weapons::func_2884(); + } + + self.juggmovespeedscaler = 0.7; + self disableweaponpickup(); + if(!getdvarint("camera_thirdPerson")) + { + self.juggernautoverlay = newclienthudelem(self); + self.juggernautoverlay.x = 0; + self.juggernautoverlay.y = 0; + self.juggernautoverlay.alignx = "left"; + self.juggernautoverlay.aligny = "top"; + self.juggernautoverlay.horzalign = "fullscreen"; + self.juggernautoverlay.vertalign = "fullscreen"; + self.juggernautoverlay setshader(level.juggsettings["juggernaut"].overlay,640,480); + self.juggernautoverlay.sort = -10; + self.juggernautoverlay.archived = 1; + self.juggernautoverlay.hidein3rdperson = 1; + } + + thread maps\mp\killstreaks\_juggernaut::func_2DD7(); + if(level.gametype != "jugg" || isdefined(level.matchrules_showjuggradaricon) && level.matchrules_showjuggradaricon) + { + self setperk("specialty_radarjuggernaut",1,0); + } + + if(isdefined(self.isjuggmodejuggernaut) && self.isjuggmodejuggernaut) + { + var_01 = spawn("script_model",self.origin); + var_01.team = self.team; + var_01 makeportableradar(self); + self.personalradar = var_01; + thread maps\mp\killstreaks\_juggernaut::func_2DD8(var_01); + } + + level notify("juggernaut_equipped",self); + thread maps\mp\killstreaks\_juggernaut::func_2DD9(); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/gametypes/_battlechatter_mp.gsc b/MW3/Xbox/MP/maps/mp/gametypes/_battlechatter_mp.gsc new file mode 100644 index 0000000..82c3c36 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/gametypes/_battlechatter_mp.gsc @@ -0,0 +1,400 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_battlechatter_mp.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 16 + * Decompile Time: 207 ms + * Timestamp: 10/27/2023 2:25:11 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level.isteamspeaking["allies"] = 0; + level.isteamspeaking["axis"] = 0; + level.speakers["allies"] = []; + level.speakers["axis"] = []; + level.bcsounds = []; + level.bcsounds["reload"] = "inform_reloading_generic"; + level.bcsounds["frag_out"] = "inform_attack_grenade"; + level.bcsounds["flash_out"] = "inform_attack_flashbang"; + level.bcsounds["smoke_out"] = "inform_attack_smoke"; + level.bcsounds["conc_out"] = "inform_attack_stun"; + level.bcsounds["c4_plant"] = "inform_attack_thwc4"; + level.bcsounds["claymore_plant"] = "inform_plant_claymore"; + level.bcsounds["semtex_out"] = "semtex_use"; + level.bcsounds["kill"] = "inform_killfirm_infantry"; + level.bcsounds["casualty"] = "inform_casualty_generic"; + level.bcsounds["suppressing_fire"] = "cmd_suppressfire"; + level.bcsounds["semtex_incoming"] = "semtex_incoming"; + level.bcsounds["c4_incoming"] = "c4_incoming"; + level.bcsounds["flash_incoming"] = "flash_incoming"; + level.bcsounds["stun_incoming"] = "stun_incoming"; + level.bcsounds["grenade_incoming"] = "grenade_incoming"; + level.bcsounds["rpg_incoming"] = "rpg_incoming"; + level thread onplayerconnect(); +} + +//Function Number: 2 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_00 thread onplayerspawned(); + } +} + +//Function Number: 3 +onplayerspawned() +{ + self endon("disconnect"); + for(;;) + { + self waittill("spawned_player"); + var_00 = maps\mp\gametypes\_teams::getteamvoiceprefix(self.team); + if(!isdefined(self.pers["voiceIndex"]) || var_00 != "RU_" && self.pers["voiceNum"] >= 3) + { + if(var_00 == "RU_") + { + self.pers["voiceNum"] = randomintrange(0,4); + } + else + { + self.pers["voiceNum"] = randomintrange(0,2); + } + + self.pers["voicePrefix"] = var_00 + self.pers["voiceNum"] + "_"; + } + + if(level.splitscreen) + { + continue; + } + + thread func_2CB4(); + thread reloadtracking(); + thread func_2CB6(); + thread grenadeproximitytracking(); + thread func_2CB2(); + } +} + +//Function Number: 4 +grenadeproximitytracking() +{ + self endon("disconnect"); + self endon("death"); + var_00 = self.origin; + for(;;) + { + if(!isdefined(level.grenades) || level.grenades.size < 1 || !maps\mp\_utility::isreallyalive(self)) + { + wait 0.05; + continue; + } + + var_01 = maps\mp\_utility::func_279B(level.grenades,level.missiles); + foreach(var_03 in var_01) + { + wait 0.05; + if(!isdefined(var_03)) + { + continue; + } + + if(isdefined(var_03.weaponname)) + { + switch(var_03.weaponname) + { + case "claymore_mp": + break; + } + } + + switch(var_03.model) + { + case "mp_trophy_system": + case "weapon_radar": + case "weapon_parabolic_knife": + case "weapon_jammer": + break; + } + + if(!isdefined(var_03.owner)) + { + var_03.owner = getmissileowner(var_03); + } + + if(isdefined(var_03.owner) && level.teambased && var_03.owner.team == self.team) + { + continue; + } + + var_04 = distancesquared(var_03.origin,self.origin); + if(var_04 < 147456) + { + if(bullettracepassed(var_03.origin,self.origin,0,self)) + { + if(common_scripts\utility::cointoss()) + { + continue; + wait 5; + continue; + } + + if(var_03.model == "projectile_concussion_grenade") + { + level thread func_2CB8(self,"stun_incoming"); + wait 5; + continue; + } + + if(var_03.model == "projectile_m84_flashbang_grenade") + { + level thread func_2CB8(self,"flash_incoming"); + wait 5; + continue; + } + + if(var_03.model == "projectile_rocket") + { + level thread func_2CB8(self,"rpg_incoming"); + wait 5; + continue; + } + + if(var_03.model == "weapon_c4") + { + level thread func_2CB8(self,"c4_incoming"); + wait 5; + continue; + } + + if(var_03.model == "projectile_m203grenade") + { + level thread func_2CB8(self,"rpg_incoming"); + wait 5; + continue; + } + + if(var_03.model == "projectile_semtex_grenade") + { + level thread func_2CB8(self,"semtex_incoming"); + wait 5; + continue; + } + + level thread func_2CB8(self,"grenade_incoming"); + wait 5; + } + } + } + } +} + +//Function Number: 5 +func_2CB2() +{ + self endon("death"); + self endon("disconnect"); + self endon("faux_spawn"); + var_00 = undefined; + for(;;) + { + self waittill("begin_firing"); + thread func_2CB3(); + self waittill("end_firing"); + self notify("stoppedFiring"); + } +} + +//Function Number: 6 +func_2CB3() +{ + self notify("suppressWaiter"); + self endon("suppressWaiter"); + self endon("death"); + self endon("disconnect"); + self endon("stoppedFiring"); + wait 2; + level thread func_2CB8(self,"suppressing_fire"); +} + +//Function Number: 7 +func_2CB4() +{ + self endon("death"); + self endon("disconnect"); + self endon("faux_spawn"); + for(;;) + { + self waittill("begin_firing"); + var_00 = self getcurrentweapon(); + if(var_00 == "claymore_mp") + { + level thread func_2CB8(self,"claymore_plant"); + } + } +} + +//Function Number: 8 +reloadtracking() +{ + self endon("death"); + self endon("disconnect"); + self endon("faux_spawn"); + for(;;) + { + self waittill("reload_start"); + level thread func_2CB8(self,"reload"); + } +} + +//Function Number: 9 +func_2CB6() +{ + self endon("death"); + self endon("disconnect"); + self endon("faux_spawn"); + for(;;) + { + self waittill("grenade_fire",var_00,var_01); + if(var_01 == "frag_grenade_mp") + { + level thread func_2CB8(self,"frag_out"); + continue; + } + + if(var_01 == "semtex_mp") + { + level thread func_2CB8(self,"semtex_out"); + continue; + } + + if(var_01 == "flash_grenade_mp") + { + level thread func_2CB8(self,"flash_out"); + continue; + } + + if(var_01 == "concussion_grenade_mp") + { + level thread func_2CB8(self,"conc_out"); + continue; + } + + if(var_01 == "smoke_grenade_mp") + { + level thread func_2CB8(self,"smoke_out"); + continue; + } + + if(var_01 == "c4_mp") + { + level thread func_2CB8(self,"c4_plant"); + } + } +} + +//Function Number: 10 +saylocalsounddelayed(param_00,param_01,param_02) +{ + param_00 endon("death"); + param_00 endon("disconnect"); + wait param_02; + func_2CB8(param_00,param_01); +} + +//Function Number: 11 +func_2CB8(param_00,param_01) +{ + param_00 endon("death"); + param_00 endon("disconnect"); + if(func_2CBB(param_00)) + { + return; + } + + if(param_00.team != "spectator") + { + var_02 = param_00.pers["voicePrefix"]; + var_03 = var_02 + level.bcsounds[param_01]; + param_00 thread dosound(var_03); + } +} + +//Function Number: 12 +dosound(param_00) +{ + var_01 = self.pers["team"]; + level addspeaker(self,var_01); + self playsoundtoteam(param_00,var_01,self); + thread timehack(param_00); + common_scripts\utility::waittill_any(param_00,"death","disconnect"); + level func_2CBD(self,var_01); +} + +//Function Number: 13 +timehack(param_00) +{ + self endon("death"); + self endon("disconnect"); + wait 2; + self notify(param_00); +} + +//Function Number: 14 +func_2CBB(param_00) +{ + param_00 endon("death"); + param_00 endon("disconnect"); + var_01 = 1000000; + if(isdefined(param_00) && isdefined(param_00.pers["team"]) && param_00.pers["team"] != "spectator") + { + for(var_02 = 0;var_02 < level.speakers[param_00.pers["team"]].size;var_02++) + { + var_03 = level.speakers[param_00.pers["team"]][var_02]; + if(var_03 == param_00) + { + return 1; + } + + if(!isdefined(var_03)) + { + continue; + } + + if(distancesquared(var_03.origin,param_00.origin) < var_01) + { + return 1; + } + } + } + + return 0; +} + +//Function Number: 15 +addspeaker(param_00,param_01) +{ + level.speakers[param_01][level.speakers[param_01].size] = param_00; +} + +//Function Number: 16 +func_2CBD(param_00,param_01) +{ + var_02 = []; + for(var_03 = 0;var_03 < level.speakers[param_01].size;var_03++) + { + if(level.speakers[param_01][var_03] == param_00) + { + continue; + } + + var_02[var_02.size] = level.speakers[param_01][var_03]; + } + + level.speakers[param_01] = var_02; +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/gametypes/_callbacksetup.gsc b/MW3/Xbox/MP/maps/mp/gametypes/_callbacksetup.gsc new file mode 100644 index 0000000..6082b30 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/gametypes/_callbacksetup.gsc @@ -0,0 +1,154 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_callbacksetup.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 15 + * Decompile Time: 205 ms + * Timestamp: 10/27/2023 2:25:12 AM +*******************************************************************/ + +//Function Number: 1 +codecallback_startgametype() +{ + if(getdvar("r_reflectionProbeGenerate") == "1") + { + level waittill("eternity"); + } + + if(!isdefined(level.gametypestarted) || !level.gametypestarted) + { + [[ level.callbackstartgametype ]](); + level.gametypestarted = 1; + } +} + +//Function Number: 2 +codecallback_playerconnect() +{ + if(getdvar("r_reflectionProbeGenerate") == "1") + { + level waittill("eternity"); + } + + self endon("disconnect"); + [[ level.callbackplayerconnect ]](); +} + +//Function Number: 3 +codecallback_playerdisconnect() +{ + self notify("disconnect"); + [[ level.callbackplayerdisconnect ]](); +} + +//Function Number: 4 +codecallback_playerdamage(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09) +{ + self endon("disconnect"); + [[ level.callbackplayerdamage ]](param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09); +} + +//Function Number: 5 +codecallback_playerkilled(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08) +{ + self endon("disconnect"); + [[ level.callbackplayerkilled ]](param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08); +} + +//Function Number: 6 +codecallback_vehicledamage(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A,param_0B) +{ + if(isdefined(self.damagecallback)) + { + self [[ self.damagecallback ]](param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A,param_0B); + return; + } + + self vehicle_finishdamage(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A,param_0B); +} + +//Function Number: 7 +codecallback_codeendgame() +{ + self endon("disconnect"); + [[ level.callbackcodeendgame ]](); +} + +//Function Number: 8 +codecallback_playerlaststand(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08) +{ + self endon("disconnect"); + [[ level.callbackplayerlaststand ]](param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08); +} + +//Function Number: 9 +codecallback_playermigrated() +{ + self endon("disconnect"); + [[ level.callbackplayermigrated ]](); +} + +//Function Number: 10 +codecallback_hostmigration() +{ + [[ level.callbackhostmigration ]](); +} + +//Function Number: 11 +setupdamageflags() +{ + level.idflags_radius = 1; + level.idflags_no_armor = 2; + level.idflags_no_knockback = 4; + level.idflags_penetration = 8; + level.idflags_stun = 16; + level.idflags_shield_explosive_impact = 32; + level.idflags_shield_explosive_impact_huge = 64; + level.idflags_shield_explosive_splash = 128; + level.idflags_no_team_protection = 256; + level.idflags_no_protection = 512; + level.idflags_passthru = 1024; +} + +//Function Number: 12 +setupcallbacks() +{ + setdefaultcallbacks(); + setupdamageflags(); +} + +//Function Number: 13 +setdefaultcallbacks() +{ + level.callbackstartgametype = ::maps\mp\gametypes\_gamelogic::func_2F22; + level.callbackplayerconnect = ::maps\mp\gametypes\_playerlogic::callback_playerconnect; + level.callbackplayerdisconnect = ::maps\mp\gametypes\_playerlogic::func_2B4B; + level.callbackplayerdamage = ::maps\mp\gametypes\_damage::func_2D32; + level.callbackplayerkilled = ::maps\mp\gametypes\_damage::callback_playerkilled; + level.callbackcodeendgame = ::maps\mp\gametypes\_gamelogic::func_2F2D; + level.callbackplayerlaststand = ::maps\mp\gametypes\_damage::func_2D34; + level.callbackplayermigrated = ::maps\mp\gametypes\_playerlogic::callback_playermigrated; + level.callbackhostmigration = ::maps\mp\gametypes\_hostmigration::callback_hostmigration; +} + +//Function Number: 14 +abortlevel() +{ + level.callbackstartgametype = ::callbackvoid; + level.callbackplayerconnect = ::callbackvoid; + level.callbackplayerdisconnect = ::callbackvoid; + level.callbackplayerdamage = ::callbackvoid; + level.callbackplayerkilled = ::callbackvoid; + level.callbackcodeendgame = ::callbackvoid; + level.callbackplayerlaststand = ::callbackvoid; + level.callbackplayermigrated = ::callbackvoid; + level.callbackhostmigration = ::callbackvoid; + setdvar("g_gametype","dm"); + exitlevel(0); +} + +//Function Number: 15 +callbackvoid() +{ +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/gametypes/_class.gsc b/MW3/Xbox/MP/maps/mp/gametypes/_class.gsc new file mode 100644 index 0000000..8381a31 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/gametypes/_class.gsc @@ -0,0 +1,2553 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_class.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 68 + * Decompile Time: 952 ms + * Timestamp: 10/27/2023 2:25:15 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level.classmap["class0"] = 0; + level.classmap["class1"] = 1; + level.classmap["class2"] = 2; + level.classmap["class3"] = 3; + level.classmap["class4"] = 4; + level.classmap["class5"] = 5; + level.classmap["class6"] = 6; + level.classmap["class7"] = 7; + level.classmap["class8"] = 8; + level.classmap["class9"] = 9; + level.classmap["class10"] = 10; + level.classmap["class11"] = 11; + level.classmap["class12"] = 12; + level.classmap["class13"] = 13; + level.classmap["class14"] = 14; + level.classmap["custom1"] = 0; + level.classmap["custom2"] = 1; + level.classmap["custom3"] = 2; + level.classmap["custom4"] = 3; + level.classmap["custom5"] = 4; + level.classmap["custom6"] = 5; + level.classmap["custom7"] = 6; + level.classmap["custom8"] = 7; + level.classmap["custom9"] = 8; + level.classmap["custom10"] = 9; + level.classmap["custom11"] = 10; + level.classmap["custom12"] = 11; + level.classmap["custom13"] = 12; + level.classmap["custom14"] = 13; + level.classmap["custom15"] = 14; + level.classmap["axis_recipe1"] = 0; + level.classmap["axis_recipe2"] = 1; + level.classmap["axis_recipe3"] = 2; + level.classmap["axis_recipe4"] = 3; + level.classmap["axis_recipe5"] = 4; + level.classmap["allies_recipe1"] = 0; + level.classmap["allies_recipe2"] = 1; + level.classmap["allies_recipe3"] = 2; + level.classmap["allies_recipe4"] = 3; + level.classmap["allies_recipe5"] = 4; + level.classmap["copycat"] = -1; + level.defaultclass = "CLASS_ASSAULT"; + level.classtablename = "mp/classTable.csv"; + level thread func_32C5(); +} + +//Function Number: 2 +getclasschoice(param_00) +{ + return param_00; +} + +//Function Number: 3 +func_2AEC(param_00) +{ + var_01 = strtok(param_00,","); + if(var_01.size > 1) + { + return int(var_01[1]); + } + + return 0; +} + +//Function Number: 4 +func_32A4(param_00,param_01,param_02,param_03) +{ + if(param_00 == self.lastclass) + { + return; + } + + self logstring("choseclass: " + param_00 + " weapon: " + param_01 + " special: " + param_02); + for(var_04 = 0;var_04 < param_03.size;var_04++) + { + self logstring("perk" + var_04 + ": " + param_03[var_04]); + } + + self.lastclass = param_00; +} + +//Function Number: 5 +func_8109() +{ + if(getdvarint("xblive_privatematch")) + { + return "privateMatchCustomClasses"; + } + + return "customClasses"; +} + +//Function Number: 6 +func_282D(param_00,param_01) +{ + var_02 = func_8109(); + return self getplayerdata(var_02,param_00,"weaponSetups",param_01,"weapon"); +} + +//Function Number: 7 +cac_getweaponattachment(param_00,param_01) +{ + var_02 = func_8109(); + return self getplayerdata(var_02,param_00,"weaponSetups",param_01,"attachment",0); +} + +//Function Number: 8 +func_28BF(param_00,param_01) +{ + var_02 = func_8109(); + return self getplayerdata(var_02,param_00,"weaponSetups",param_01,"attachment",1); +} + +//Function Number: 9 +cac_getweaponbuff(param_00,param_01) +{ + var_02 = func_8109(); + return self getplayerdata(var_02,param_00,"weaponSetups",param_01,"buff"); +} + +//Function Number: 10 +cac_getweaponcamo(param_00,param_01) +{ + var_02 = func_8109(); + return self getplayerdata(var_02,param_00,"weaponSetups",param_01,"camo"); +} + +//Function Number: 11 +func_32A6(param_00,param_01) +{ + var_02 = func_8109(); + return self getplayerdata(var_02,param_00,"weaponSetups",param_01,"reticle"); +} + +//Function Number: 12 +func_28C1(param_00,param_01) +{ + var_02 = func_8109(); + return self getplayerdata(var_02,param_00,"perks",param_01); +} + +//Function Number: 13 +func_28C4(param_00,param_01,param_02) +{ + var_03 = undefined; + switch(param_01) + { + case "streaktype_support": + var_03 = "defenseStreaks"; + break; + + case "streaktype_specialist": + var_03 = "specialistStreaks"; + break; + + default: + var_03 = "assaultStreaks"; + break; + } + + var_04 = func_8109(); + return self getplayerdata(var_04,param_00,var_03,param_02); +} + +//Function Number: 14 +cac_getdeathstreak(param_00) +{ + var_01 = func_8109(); + return self getplayerdata(var_01,param_00,"deathstreak"); +} + +//Function Number: 15 +cac_getoffhand(param_00) +{ + var_01 = func_8109(); + return self getplayerdata(var_01,param_00,"perks",6); +} + +//Function Number: 16 +recipe_getkillstreak(param_00,param_01,param_02,param_03) +{ + var_04 = undefined; + switch(param_02) + { + case "streaktype_support": + var_04 = "defenseStreaks"; + break; + + case "streaktype_specialist": + var_04 = "specialistStreaks"; + break; + + default: + var_04 = "assaultStreaks"; + break; + } + + return getmatchrulesdata("defaultClasses",param_00,param_01,"class",var_04,param_03); +} + +//Function Number: 17 +func_28C6(param_00,param_01,param_02) +{ + if(param_02 == 0) + { + return tablelookup(param_00,0,"loadoutPrimary",param_01 + 1); + } + + return tablelookup(param_00,0,"loadoutSecondary",param_01 + 1); +} + +//Function Number: 18 +func_28C7(param_00,param_01,param_02,param_03) +{ + var_04 = "none"; + if(param_02 == 0) + { + if(!isdefined(param_03) || param_03 == 0) + { + var_04 = tablelookup(param_00,0,"loadoutPrimaryAttachment",param_01 + 1); + } + else + { + var_04 = tablelookup(param_00,0,"loadoutPrimaryAttachment2",param_01 + 1); + } + } + else if(!isdefined(param_03) || param_03 == 0) + { + var_04 = tablelookup(param_00,0,"loadoutSecondaryAttachment",param_01 + 1); + } + else + { + var_04 = tablelookup(param_00,0,"loadoutSecondaryAttachment2",param_01 + 1); + } + + if(var_04 == "" || var_04 == "none") + { + return "none"; + } + + return var_04; +} + +//Function Number: 19 +table_getweaponbuff(param_00,param_01,param_02) +{ + if(param_02 == 0) + { + return tablelookup(param_00,0,"loadoutPrimaryBuff",param_01 + 1); + } + + return tablelookup(param_00,0,"loadoutSecondaryBuff",param_01 + 1); +} + +//Function Number: 20 +func_32A8(param_00,param_01,param_02) +{ + if(param_02 == 0) + { + return tablelookup(param_00,0,"loadoutPrimaryCamo",param_01 + 1); + } + + return tablelookup(param_00,0,"loadoutSecondaryCamo",param_01 + 1); +} + +//Function Number: 21 +func_32A9(param_00,param_01,param_02) +{ + return "none"; +} + +//Function Number: 22 +table_getequipment(param_00,param_01,param_02) +{ + return tablelookup(param_00,0,"loadoutEquipment",param_01 + 1); +} + +//Function Number: 23 +func_28CA(param_00,param_01,param_02) +{ + return tablelookup(param_00,0,"loadoutPerk" + param_02,param_01 + 1); +} + +//Function Number: 24 +table_getteamperk(param_00,param_01) +{ + return tablelookup(param_00,0,"loadoutTeamPerk",param_01 + 1); +} + +//Function Number: 25 +table_getoffhand(param_00,param_01) +{ + return tablelookup(param_00,0,"loadoutOffhand",param_01 + 1); +} + +//Function Number: 26 +table_getkillstreak(param_00,param_01,param_02) +{ + return tablelookup(param_00,0,"loadoutStreak" + param_02,param_01 + 1); +} + +//Function Number: 27 +table_getdeathstreak(param_00,param_01) +{ + return tablelookup(param_00,0,"loadoutDeathstreak",param_01 + 1); +} + +//Function Number: 28 +func_28BD(param_00) +{ + return level.classmap[param_00]; +} + +//Function Number: 29 +cloneloadout() +{ + var_00 = "none"; + var_01 = []; + var_02 = self.curclass; + if(var_02 == "copycat") + { + return undefined; + } + + if(issubstr(var_02,"axis")) + { + var_00 = "axis"; + } + else if(issubstr(var_02,"allies")) + { + var_00 = "allies"; + } + + if(var_00 != "none") + { + var_03 = func_28BD(var_02); + var_04 = "none"; + var_05 = "none"; + var_06 = getmatchrulesdata("defaultClasses",var_00,var_03,"class","weaponSetups",0,"weapon"); + var_07 = getmatchrulesdata("defaultClasses",var_00,var_03,"class","weaponSetups",0,"attachment",0); + var_04 = getmatchrulesdata("defaultClasses",var_00,var_03,"class","weaponSetups",0,"attachment",1); + var_08 = getmatchrulesdata("defaultClasses",var_00,var_03,"class","weaponSetups",0,"buff"); + var_09 = getmatchrulesdata("defaultClasses",var_00,var_03,"class","weaponSetups",0,"camo"); + var_0A = getmatchrulesdata("defaultClasses",var_00,var_03,"class","weaponSetups",0,"reticle"); + var_0B = getmatchrulesdata("defaultClasses",var_00,var_03,"class","weaponSetups",1,"weapon"); + var_0C = getmatchrulesdata("defaultClasses",var_00,var_03,"class","weaponSetups",1,"attachment",0); + var_05 = getmatchrulesdata("defaultClasses",var_00,var_03,"class","weaponSetups",1,"attachment",1); + var_0D = getmatchrulesdata("defaultClasses",var_00,var_03,"class","weaponSetups",1,"buff"); + var_0E = getmatchrulesdata("defaultClasses",var_00,var_03,"class","weaponSetups",1,"camo"); + var_0F = getmatchrulesdata("defaultClasses",var_00,var_03,"class","weaponSetups",1,"reticle"); + var_10 = getmatchrulesdata("defaultClasses",var_00,var_03,"class","perks",0); + var_11 = getmatchrulesdata("defaultClasses",var_00,var_03,"class","perks",1); + var_12 = getmatchrulesdata("defaultClasses",var_00,var_03,"class","perks",2); + var_13 = getmatchrulesdata("defaultClasses",var_00,var_03,"class","perks",3); + var_14 = getmatchrulesdata("defaultClasses",var_00,var_03,"class","perks",5); + var_15 = recipe_getkillstreak(var_00,var_03,var_14,0); + var_16 = recipe_getkillstreak(var_00,var_03,var_14,1); + var_17 = recipe_getkillstreak(var_00,var_03,var_14,2); + var_18 = getmatchrulesdata("defaultClasses",var_00,var_03,"class","perks",6); + var_19 = getmatchrulesdata("defaultClasses",var_00,var_03,"class","deathstreak"); + } + else if(issubstr(var_19,"custom")) + { + var_1A = func_28BD(var_19); + var_04 = "none"; + var_05 = "none"; + var_06 = func_282D(var_1A,0); + var_07 = cac_getweaponattachment(var_1A,0); + var_04 = func_28BF(var_1A,0); + var_08 = cac_getweaponbuff(var_1A,0); + var_09 = cac_getweaponcamo(var_1A,0); + var_0A = func_32A6(var_1A,0); + var_0B = func_282D(var_1A,1); + var_0C = cac_getweaponattachment(var_1A,1); + var_05 = func_28BF(var_1A,1); + var_0D = cac_getweaponbuff(var_1A,1); + var_0E = cac_getweaponcamo(var_1A,1); + var_0F = func_32A6(var_1A,1); + var_10 = func_28C1(var_1A,0); + var_11 = func_28C1(var_1A,1); + var_12 = func_28C1(var_1A,2); + var_13 = func_28C1(var_1A,3); + var_14 = func_28C1(var_1A,5); + var_15 = func_28C4(var_1A,var_14,0); + var_16 = func_28C4(var_1A,var_14,1); + var_17 = func_28C4(var_1A,var_14,2); + var_18 = cac_getoffhand(var_1A); + var_19 = cac_getdeathstreak(var_1A); + } + else + { + var_1A = func_28BD(var_1A); + var_06 = func_28C6(level.classtablename,var_1A,0); + var_07 = func_28C7(level.classtablename,var_1A,0,0); + var_04 = func_28C7(level.classtablename,var_1A,0,1); + var_08 = table_getweaponbuff(level.classtablename,var_1A,0); + var_09 = func_32A8(level.classtablename,var_1A,0); + var_0A = func_32A9(level.classtablename,var_1A,0); + var_0B = func_28C6(level.classtablename,var_1A,1); + var_0C = func_28C7(level.classtablename,var_1A,1,0); + var_05 = func_28C7(level.classtablename,var_1A,1,1); + var_0D = table_getweaponbuff(level.classtablename,var_1A,1); + var_0E = func_32A8(level.classtablename,var_1A,1); + var_0F = func_32A9(level.classtablename,var_1A,1); + var_10 = table_getequipment(level.classtablename,var_1A,0); + var_11 = func_28CA(level.classtablename,var_1A,1); + var_12 = func_28CA(level.classtablename,var_1A,2); + var_13 = func_28CA(level.classtablename,var_1A,3); + var_14 = func_28CA(level.classtablename,var_1A,5); + var_18 = table_getoffhand(level.classtablename,var_1A); + var_19 = table_getdeathstreak(level.classtablename,var_1A); + switch(var_14) + { + case "streaktype_support": + var_1B = table_getkillstreak(level.classtablename,3,1); + var_1C = table_getkillstreak(level.classtablename,3,2); + var_1D = table_getkillstreak(level.classtablename,3,3); + break; + + case "streaktype_specialist": + var_1B = table_getkillstreak(level.classtablename,1,1); + var_1C = table_getkillstreak(level.classtablename,1,2); + var_1D = table_getkillstreak(level.classtablename,1,3); + break; + + default: + var_1B = table_getkillstreak(level.classtablename,0,1); + var_1C = table_getkillstreak(level.classtablename,0,2); + var_1D = table_getkillstreak(level.classtablename,0,3); + break; + } + + var_15 = var_1B; + var_16 = var_1C; + var_17 = var_1D; + } + + var_01["inUse"] = 0; + var_01["loadoutPrimary"] = var_06; + var_01["loadoutPrimaryAttachment"] = var_07; + var_01["loadoutPrimaryAttachment2"] = var_04; + var_01["loadoutPrimaryBuff"] = var_08; + var_01["loadoutPrimaryCamo"] = var_09; + var_01["loadoutPrimaryReticle"] = var_0A; + var_01["loadoutSecondary"] = var_0B; + var_01["loadoutSecondaryAttachment"] = var_0C; + var_01["loadoutSecondaryAttachment2"] = var_05; + var_01["loadoutSecondaryBuff"] = var_0D; + var_01["loadoutSecondaryCamo"] = var_0E; + var_01["loadoutSecondaryReticle"] = var_0F; + var_01["loadoutEquipment"] = var_10; + var_01["loadoutPerk1"] = var_11; + var_01["loadoutPerk2"] = var_12; + var_01["loadoutPerk3"] = var_13; + var_01["loadoutStreakType"] = var_14; + var_01["loadoutKillstreak1"] = var_15; + var_01["loadoutKillstreak2"] = var_16; + var_01["loadoutKillstreak3"] = var_17; + var_01["loadoutDeathstreak"] = var_19; + var_01["loadoutOffhand"] = var_18; + return var_01; +} + +//Function Number: 30 +loadoutfakeperks(param_00,param_01) +{ + switch(param_00) + { + case "streaktype_support": + self.streaktype = "support"; + break; + + case "streaktype_specialist": + self.streaktype = "specialist"; + break; + + default: + self.streaktype = "assault"; + break; + } +} + +//Function Number: 31 +getloadoutstreaktypefromstreaktype(param_00) +{ + if(!isdefined(param_00)) + { + return "streaktype_assault"; + } + + switch(param_00) + { + case "support": + return "streaktype_support"; + + case "specialist": + return "streaktype_specialist"; + + case "assault": + return "streaktype_assault"; + + default: + return "streaktype_assault"; + } +} + +//Function Number: 32 +func_2A52(param_00,param_01,param_02,param_03) +{ + self takeallweapons(); + self.changingweapon = undefined; + var_04 = "none"; + if(!isdefined(param_03)) + { + param_03 = 1; + } + + var_05 = 0; + self.specialty = []; + if(!isdefined(param_02)) + { + param_02 = 1; + } + + var_06 = undefined; + var_07 = 0; + var_08 = undefined; + var_09 = undefined; + var_0A = undefined; + if(issubstr(param_01,"axis")) + { + var_04 = "axis"; + } + else if(issubstr(param_01,"allies")) + { + var_04 = "allies"; + } + + var_0B = []; + if(isdefined(self.pers["copyCatLoadout"]) && self.pers["copyCatLoadout"]["inUse"] && param_02) + { + func_2AEE("copycat"); + self.class_num = func_28BD("copycat"); + var_0B = self.pers["copyCatLoadout"]; + var_0C = var_0B["loadoutPrimary"]; + var_0D = var_0B["loadoutPrimaryAttachment"]; + var_0E = var_0B["loadoutPrimaryAttachment2"]; + var_0F = var_0B["loadoutPrimaryBuff"]; + var_10 = var_0B["loadoutPrimaryCamo"]; + var_11 = var_0B["loadoutPrimaryReticle"]; + var_12 = var_0B["loadoutSecondary"]; + var_13 = var_0B["loadoutSecondaryAttachment"]; + var_14 = var_0B["loadoutSecondaryAttachment2"]; + var_15 = var_0B["loadoutSecondaryBuff"]; + var_16 = var_0B["loadoutSecondaryCamo"]; + var_17 = var_0B["loadoutSecondaryReticle"]; + var_18 = var_0B["loadoutEquipment"]; + var_19 = var_0B["loadoutPerk1"]; + var_1A = var_0B["loadoutPerk2"]; + var_1B = var_0B["loadoutPerk3"]; + var_1C = var_0B["loadoutStreakType"]; + var_1D = var_0B["loadoutOffhand"]; + var_1E = var_0B["loadoutDeathstreak"]; + var_1F = var_0B["loadoutAmmoType"]; + } + else if(var_17 != "none") + { + var_20 = func_28BD(var_14); + var_0E = "none"; + var_14 = "none"; + var_0C = getmatchrulesdata("defaultClasses",var_04,var_20,"class","weaponSetups",0,"weapon"); + var_0D = getmatchrulesdata("defaultClasses",var_04,var_20,"class","weaponSetups",0,"attachment",0); + var_0E = getmatchrulesdata("defaultClasses",var_04,var_20,"class","weaponSetups",0,"attachment",1); + var_0F = getmatchrulesdata("defaultClasses",var_04,var_20,"class","weaponSetups",0,"buff"); + var_10 = getmatchrulesdata("defaultClasses",var_04,var_20,"class","weaponSetups",0,"camo"); + var_11 = getmatchrulesdata("defaultClasses",var_04,var_20,"class","weaponSetups",0,"reticle"); + var_12 = getmatchrulesdata("defaultClasses",var_04,var_20,"class","weaponSetups",1,"weapon"); + var_13 = getmatchrulesdata("defaultClasses",var_04,var_20,"class","weaponSetups",1,"attachment",0); + var_14 = getmatchrulesdata("defaultClasses",var_04,var_20,"class","weaponSetups",1,"attachment",1); + var_15 = getmatchrulesdata("defaultClasses",var_04,var_20,"class","weaponSetups",1,"buff"); + var_16 = getmatchrulesdata("defaultClasses",var_04,var_20,"class","weaponSetups",1,"camo"); + var_17 = getmatchrulesdata("defaultClasses",var_04,var_20,"class","weaponSetups",1,"reticle"); + if((var_0C == "throwingknife" || var_0C == "none") && var_12 != "none") + { + var_0C = var_12; + var_0D = var_13; + var_0E = var_14; + var_0F = var_15; + var_10 = var_16; + var_11 = var_17; + var_12 = "none"; + var_13 = "none"; + var_14 = "none"; + var_15 = "specialty_null"; + var_16 = "none"; + var_17 = "none"; + } + else if((var_0C == "throwingknife" || var_0C == "none") && var_12 == "none") + { + var_07 = 1; + var_0C = "iw5_usp45"; + var_0D = "tactical"; + } + + var_18 = getmatchrulesdata("defaultClasses",var_04,var_20,"class","perks",0); + var_19 = getmatchrulesdata("defaultClasses",var_04,var_20,"class","perks",1); + var_1A = getmatchrulesdata("defaultClasses",var_04,var_20,"class","perks",2); + var_1B = getmatchrulesdata("defaultClasses",var_04,var_20,"class","perks",3); + if(var_12 != "none" && !func_32A1(var_12,var_1A,var_1B,0)) + { + var_12 = func_28C6(level.classtablename,10,1); + var_13 = "none"; + var_14 = "none"; + var_15 = "specialty_null"; + var_16 = "none"; + var_17 = "none"; + } + + var_1C = getmatchrulesdata("defaultClasses",var_04,var_20,"class","perks",5); + if(var_1C == "specialty_null") + { + var_08 = "none"; + var_09 = "none"; + var_0A = "none"; + } + else + { + var_08 = recipe_getkillstreak(var_04,var_20,var_1C,0); + var_09 = recipe_getkillstreak(var_04,var_20,var_1C,1); + var_0A = recipe_getkillstreak(var_04,var_20,var_1C,2); + } + + var_1D = getmatchrulesdata("defaultClasses",var_04,var_20,"class","perks",6); + if(var_1D == "specialty_null") + { + var_1D = "none"; + } + + var_1E = getmatchrulesdata("defaultClasses",var_04,var_20,"class","deathstreak"); + if(getmatchrulesdata("defaultClasses",var_04,var_20,"juggernaut")) + { + thread maps\mp\_utility::recipeclassapplyjuggernaut(maps\mp\_utility::isjuggernaut()); + self.isjuggernaut = 1; + } + else if(maps\mp\_utility::isjuggernaut()) + { + self notify("lost_juggernaut"); + self.isjuggernaut = 0; + self.movespeedscaler = 1; + } + } + else if(issubstr(var_14,"custom")) + { + var_21 = func_28BD(var_14); + self.class_num = var_21; + var_0C = func_282D(var_21,0); + var_0D = cac_getweaponattachment(var_21,0); + var_0E = func_28BF(var_21,0); + var_0F = cac_getweaponbuff(var_21,0); + var_10 = cac_getweaponcamo(var_21,0); + var_11 = func_32A6(var_21,0); + var_12 = func_282D(var_21,1); + var_13 = cac_getweaponattachment(var_21,1); + var_14 = func_28BF(var_21,1); + var_15 = cac_getweaponbuff(var_21,1); + var_16 = cac_getweaponcamo(var_21,1); + var_17 = func_32A6(var_21,1); + var_18 = func_28C1(var_21,0); + var_19 = func_28C1(var_21,1); + var_1A = func_28C1(var_21,2); + var_1B = func_28C1(var_21,3); + var_1C = func_28C1(var_21,5); + var_1D = cac_getoffhand(var_21); + var_1E = cac_getdeathstreak(var_21); + } + else if(var_14 == "gamemode") + { + var_22 = self.pers["gamemodeLoadout"]; + var_0C = var_22["loadoutPrimary"]; + var_0D = var_22["loadoutPrimaryAttachment"]; + var_0E = var_22["loadoutPrimaryAttachment2"]; + var_0F = var_22["loadoutPrimaryBuff"]; + var_10 = var_22["loadoutPrimaryCamo"]; + var_11 = var_22["loadoutPrimaryReticle"]; + var_12 = var_22["loadoutSecondary"]; + var_13 = var_22["loadoutSecondaryAttachment"]; + var_14 = var_22["loadoutSecondaryAttachment2"]; + var_15 = var_22["loadoutSecondaryBuff"]; + var_16 = var_22["loadoutSecondaryCamo"]; + var_17 = var_22["loadoutSecondaryReticle"]; + if((var_0C == "throwingknife" || var_0C == "none") && var_12 != "none") + { + var_0C = var_12; + var_0D = var_13; + var_0E = var_14; + var_0F = var_15; + var_10 = var_16; + var_11 = var_17; + var_12 = "none"; + var_13 = "none"; + var_14 = "none"; + var_15 = "specialty_null"; + var_16 = "none"; + var_17 = "none"; + } + else if((var_0C == "throwingknife" || var_0C == "none") && var_12 == "none") + { + var_07 = 1; + var_0C = "iw5_usp45"; + var_0D = "tactical"; + } + + var_18 = var_22["loadoutEquipment"]; + var_1D = var_22["loadoutOffhand"]; + if(var_1D == "specialty_null") + { + var_1D = "none"; + } + + var_19 = var_22["loadoutPerk1"]; + var_1A = var_22["loadoutPerk2"]; + var_1B = var_22["loadoutPerk3"]; + if(var_12 != "none" && !func_32A1(var_12,var_1A,var_1B,0)) + { + var_12 = func_28C6(level.classtablename,10,1); + var_13 = "none"; + var_14 = "none"; + var_15 = "specialty_null"; + var_16 = "none"; + var_17 = "none"; + } + + if(level.killstreakrewards && isdefined(var_22["loadoutStreakType"]) && var_22["loadoutStreakType"] != "specialty_null") + { + var_1C = var_22["loadoutStreakType"]; + var_08 = var_22["loadoutKillstreak1"]; + var_09 = var_22["loadoutKillstreak2"]; + var_0A = var_22["loadoutKillstreak3"]; + } + else if(level.killstreakrewards && isdefined(self.streaktype)) + { + var_1C = getloadoutstreaktypefromstreaktype(self.streaktype); + } + else + { + var_1C = "streaktype_assault"; + var_08 = "none"; + var_09 = "none"; + var_0A = "none"; + } + + var_1E = var_22["loadoutDeathstreak"]; + if(var_22["loadoutJuggernaut"]) + { + self.health = self.maxhealth; + thread maps\mp\_utility::recipeclassapplyjuggernaut(maps\mp\_utility::isjuggernaut()); + self.isjuggernaut = 1; + } + else if(maps\mp\_utility::isjuggernaut()) + { + self notify("lost_juggernaut"); + self.isjuggernaut = 0; + self.movespeedscaler = 1; + } + } + else if(var_14 == "juggernaut") + { + var_0C = "iw5_m60jugg"; + var_0D = "none"; + var_0E = "none"; + var_0F = "specialty_null"; + var_10 = "none"; + var_11 = "none"; + var_12 = "iw5_mp412jugg"; + var_13 = "none"; + var_14 = "none"; + var_15 = "specialty_null"; + var_16 = "none"; + var_17 = "none"; + var_18 = "frag_grenade_mp"; + var_19 = "specialty_scavenger"; + var_1A = "specialty_quickdraw"; + var_1B = "specialty_detectexplosive"; + var_1C = getloadoutstreaktypefromstreaktype(self.streaktype); + var_1D = "smoke_grenade_mp"; + var_1E = "specialty_null"; + } + else if(var_14 == "juggernaut_recon") + { + var_0C = "iw5_riotshieldjugg"; + var_0D = "none"; + var_0E = "none"; + var_0F = "specialty_null"; + var_10 = "none"; + var_11 = "none"; + var_12 = "iw5_usp45jugg"; + var_13 = "none"; + var_14 = "none"; + var_15 = "specialty_null"; + var_16 = "none"; + var_17 = "none"; + var_18 = "specialty_portable_radar"; + var_19 = "specialty_scavenger"; + var_1A = "specialty_coldblooded"; + var_1B = "specialty_detectexplosive"; + var_1C = getloadoutstreaktypefromstreaktype(self.streaktype); + var_1D = "smoke_grenade_mp"; + var_1E = "specialty_null"; + } + else + { + var_21 = func_28BD(var_14); + self.class_num = var_21; + var_0C = func_28C6(level.classtablename,var_21,0); + var_0D = func_28C7(level.classtablename,var_21,0,0); + var_0E = func_28C7(level.classtablename,var_21,0,1); + var_0F = table_getweaponbuff(level.classtablename,var_21,0); + var_10 = func_32A8(level.classtablename,var_21,0); + var_11 = func_32A9(level.classtablename,var_21,0); + var_12 = func_28C6(level.classtablename,var_21,1); + var_13 = func_28C7(level.classtablename,var_21,1,0); + var_14 = func_28C7(level.classtablename,var_21,1,1); + var_15 = table_getweaponbuff(level.classtablename,var_21,1); + var_16 = func_32A8(level.classtablename,var_21,1); + var_17 = func_32A9(level.classtablename,var_21,1); + var_18 = table_getequipment(level.classtablename,var_21,0); + var_19 = func_28CA(level.classtablename,var_21,1); + var_1A = func_28CA(level.classtablename,var_21,2); + var_1B = func_28CA(level.classtablename,var_21,3); + var_1C = func_28CA(level.classtablename,var_21,5); + var_1D = table_getoffhand(level.classtablename,var_21); + var_1E = table_getdeathstreak(level.classtablename,var_21); + } + + loadoutfakeperks(var_1C); + var_23 = issubstr(param_01,"custom"); + var_24 = issubstr(param_01,"recipe"); + var_25 = param_01 == "gamemode"; + if(!var_25 && !var_24 && !isdefined(self.pers["copyCatLoadout"]) && self.pers["copyCatLoadout"]["inUse"] && param_02) + { + if(!func_32A0(var_0C) || level.rankedmatch && var_23 && !self isitemunlocked(var_0C)) + { + var_0C = func_28C6(level.classtablename,10,0); + } + + if(!func_32C9(var_0D) || level.rankedmatch && var_23 && !isattachmentunlocked(var_0C,var_0D)) + { + var_0D = func_28C7(level.classtablename,10,0,0); + } + + if(!func_32C9(var_0E) || level.rankedmatch && var_23 && !isattachmentunlocked(var_0C,var_0E)) + { + var_0E = func_28C7(level.classtablename,10,0,1); + } + + if(!isvalidweaponbuff(var_0F,var_0C) || level.rankedmatch && var_23 && !isweaponbuffunlocked(var_0C,var_0F)) + { + var_0F = table_getweaponbuff(level.classtablename,10,0); + } + + if(!isvalidcamo(var_10) || level.rankedmatch && var_23 && !func_32CE(var_0C,var_10)) + { + var_10 = func_32A8(level.classtablename,10,0); + } + + if(!isvalidreticle(var_11)) + { + var_11 = func_32A9(level.classtablenum,10,0); + } + + if(!func_32A1(var_12,var_1A,var_1B) || level.rankedmatch && level.rankedmatch && var_23 && !self isitemunlocked(var_12)) + { + var_12 = func_28C6(level.classtablename,10,1); + var_13 = "none"; + var_14 = "none"; + var_15 = "specialty_null"; + var_16 = "none"; + var_17 = "none"; + } + + if(!func_32C9(var_13) || level.rankedmatch && var_23 && !isattachmentunlocked(var_12,var_13)) + { + var_13 = func_28C7(level.classtablename,10,1,0); + } + + if(!func_32C9(var_14) || level.rankedmatch && var_23 && !isattachmentunlocked(var_12,var_14)) + { + var_14 = func_28C7(level.classtablename,10,1,1); + } + + if((var_1A == "specialty_twoprimaries" && !isvalidweaponbuff(var_15,var_12)) || level.rankedmatch && var_23 && !self isitemunlocked(var_12 + " " + var_15)) + { + var_15 = table_getweaponbuff(level.classtablename,10,1); + } + + if(!isvalidcamo(var_16) || level.rankedmatch && var_23 && !func_32CE(var_12,var_16)) + { + var_16 = func_32A8(level.classtablename,10,1); + } + + if(!isvalidreticle(var_17)) + { + var_17 = func_32A9(level.classtablename,10,1); + } + + if(!func_32CF(var_18) || level.rankedmatch && var_23 && !self isitemunlocked(var_18)) + { + var_18 = table_getequipment(level.classtablename,10,0); + } + + if(!func_32D1(var_19) || level.rankedmatch && var_23 && !self isitemunlocked(var_19)) + { + var_19 = func_28CA(level.classtablename,10,1); + } + + if(!func_32D2(var_1A,var_19) || level.rankedmatch && var_23 && !self isitemunlocked(var_1A)) + { + var_1A = func_28CA(level.classtablename,10,2); + } + + if(!func_32D3(var_1B,var_19) || level.rankedmatch && var_23 && !self isitemunlocked(var_1B)) + { + var_1B = func_28CA(level.classtablename,10,3); + } + + if(!func_32D4(var_1E) || level.rankedmatch && var_23 && !self isitemunlocked(var_1E)) + { + var_1E = table_getdeathstreak(level.classtablename,10); + } + + if(!func_32D0(var_1D)) + { + var_1D = table_getoffhand(level.classtablename,10); + } + } + + self.loadoutprimary = var_0C; + self.loadoutprimarycamo = int(tablelookup("mp/camoTable.csv",1,var_10,0)); + self.loadoutsecondary = var_12; + self.loadoutsecondarycamo = int(tablelookup("mp/camoTable.csv",1,var_16,0)); + if(!issubstr(var_0C,"iw5")) + { + self.loadoutprimarycamo = 0; + } + + if(!issubstr(var_12,"iw5")) + { + self.loadoutsecondarycamo = 0; + } + + self.loadoutprimaryreticle = int(tablelookup("mp/reticleTable.csv",1,var_11,0)); + self.loadoutsecondaryreticle = int(tablelookup("mp/reticleTable.csv",1,var_17,0)); + if(!issubstr(var_0C,"iw5")) + { + self.loadoutprimaryreticle = 0; + } + + if(!issubstr(var_12,"iw5")) + { + self.loadoutsecondaryreticle = 0; + } + + if(var_12 == "none") + { + var_26 = "none"; + } + else + { + var_26 = func_32BC(var_13,var_14,var_15,self.loadoutsecondarycamo,self.loadoutsecondaryreticle); + maps\mp\_utility::_giveweapon(var_26); + var_27 = strtok(var_26,"_"); + if(var_27[0] == "iw5") + { + } + else if(var_41[0] == "alt") + { + } + + var_28 = var_41[0]; + var_29 = maps\mp\gametypes\_rank::func_2881(var_28); + var_2A = self getplayerdata("weaponRank",var_28); + if(var_29 != var_2A) + { + self setplayerdata("weaponRank",var_28,var_29); + } + } + + self setoffhandprimaryclass("other"); + maps\mp\_utility::func_31F3(1,""); + maps\mp\_utility::func_31F3(3,"altMode"); + maps\mp\_utility::func_31F3(4,""); + if(!level.console) + { + maps\mp\_utility::func_31F3(5,""); + maps\mp\_utility::func_31F3(6,""); + maps\mp\_utility::func_31F3(7,""); + } + + maps\mp\_utility::_clearperks(); + _detachall(); + if(level.diehardmode) + { + maps\mp\_utility::giveperk("specialty_pistoldeath",0); + } + + loadoutallperks(var_19,var_1A,var_1B,var_1C,var_10,var_16); + if(maps\mp\_utility::func_27AF("specialty_extraammo") && var_27 != "none" && maps\mp\_utility::getweaponclass(var_27) != "weapon_projectile") + { + self givemaxammo(var_27); + } + + self.spawnperk = 0; + if(!maps\mp\_utility::func_27AF("specialty_blindeye") && self.avoidkillstreakonspawntimer > 0) + { + thread maps\mp\perks\_perks::giveblindeyeafterspawn(); + } + + if(self.pers["cur_death_streak"] > 0) + { + var_2B = []; + if(var_23 != "specialty_null") + { + } + + if(func_28F9(var_1B) == "specialty_rollover" || func_28F9(var_1C) == "specialty_rollover" || func_28F9(var_1D) == "specialty_rollover") + { + foreach(var_2E, var_2D in var_41) + { + var_41[var_2E] = var_41[var_2E] - 1; + } + } + + foreach(var_2E, var_2D in var_41) + { + if(self.pers["cur_death_streak"] >= var_2D) + { + if(var_2E == "specialty_carepackage" && self.pers["cur_death_streak"] > var_2D) + { + continue; + } + + if(var_2E == "specialty_uav" && self.pers["cur_death_streak"] > var_2D) + { + continue; + } + + thread maps\mp\_utility::giveperk(var_2E,1); + thread maps\mp\gametypes\_hud_message::func_2892(var_2E); + } + } + } + + if(level.killstreakrewards && !isdefined(var_0A) && !isdefined(var_0B) && !isdefined(var_0C)) + { + if(isdefined(self.pers["copyCatLoadout"]) && self.pers["copyCatLoadout"]["inUse"] && var_04) + { + var_0A = var_0D["loadoutKillstreak1"]; + var_0B = var_0D["loadoutKillstreak2"]; + var_0C = var_0D["loadoutKillstreak3"]; + } + else + { + var_30 = undefined; + var_31 = undefined; + var_32 = undefined; + var_33 = undefined; + switch(self.streaktype) + { + case "support": + var_30 = table_getkillstreak(level.classtablename,2,1); + var_31 = table_getkillstreak(level.classtablename,2,2); + var_32 = table_getkillstreak(level.classtablename,2,3); + var_33 = "defenseStreaks"; + break; + + case "specialist": + var_30 = table_getkillstreak(level.classtablename,1,1); + var_31 = table_getkillstreak(level.classtablename,1,2); + var_32 = table_getkillstreak(level.classtablename,1,3); + var_33 = "specialistStreaks"; + break; + + default: + var_30 = table_getkillstreak(level.classtablename,0,1); + var_31 = table_getkillstreak(level.classtablename,0,2); + var_32 = table_getkillstreak(level.classtablename,0,3); + var_33 = "assaultStreaks"; + break; + } + + var_0A = undefined; + var_0B = undefined; + var_0C = undefined; + if(issubstr(param_03,"custom")) + { + var_34 = func_8109(); + var_0A = self getplayerdata(var_34,self.class_num,var_33,0); + var_0B = self getplayerdata(var_34,self.class_num,var_33,1); + var_0C = self getplayerdata(var_34,self.class_num,var_33,2); + } + + if(issubstr(param_03,"juggernaut") || var_27) + { + foreach(var_36 in self.killstreaks) + { + if(!isdefined(var_0A)) + { + var_0A = var_36; + continue; + } + + if(!isdefined(var_0B)) + { + var_0B = var_36; + continue; + } + + if(!isdefined(var_0C)) + { + var_0C = var_36; + } + } + + if(var_27 && self.streaktype == "specialist") + { + self.pers["gamemodeLoadout"]["loadoutKillstreak1"] = var_0A; + self.pers["gamemodeLoadout"]["loadoutKillstreak2"] = var_0B; + self.pers["gamemodeLoadout"]["loadoutKillstreak3"] = var_0C; + } + } + + if(!issubstr(param_03,"custom") && !issubstr(param_03,"juggernaut") && !var_27) + { + var_0A = var_30; + var_0B = var_31; + var_0C = var_32; + } + + if(!isdefined(var_0A)) + { + var_0A = "none"; + } + + if(!isdefined(var_0B)) + { + var_0B = "none"; + } + + if(!isdefined(var_0C)) + { + var_0C = "none"; + } + + if(!isvalidkillstreak(var_0A) || var_25 && !self isitemunlocked(var_0A)) + { + var_0A = table_getkillstreak(level.classtablename,0,1); + } + + if(!isvalidkillstreak(var_0B) || var_25 && !self isitemunlocked(var_0B)) + { + var_0B = table_getkillstreak(level.classtablename,0,2); + } + + if(!isvalidkillstreak(var_0C) || var_25 && !self isitemunlocked(var_0C)) + { + var_0C = table_getkillstreak(level.classtablename,0,3); + } + } + } + else if(!level.killstreakrewards) + { + var_0A = "none"; + var_0B = "none"; + var_0C = "none"; + } + + func_32C2(var_0A,var_0B,var_0C); + if(isdefined(self.lastclass) && self.lastclass != self.class && !issubstr(self.class,"juggernaut") && !issubstr(self.lastclass,"juggernaut") && !issubstr(param_03,"juggernaut")) + { + if(maps\mp\_utility::func_2F49() || self.lastclass != "") + { + var_38 = []; + var_39 = 0; + if(self.pers["killstreaks"].size > 5) + { + var_3A = 5; + while(var_3A < self.pers["killstreaks"].size) + { + var_38[var_39] = self.pers["killstreaks"][var_3A].streakname; + var_39++ = var_41[var_23]; + var_3A++ = int(tablelookup("mp/perkTable.csv",1,var_23,6)); + } + } + + if(self.pers["killstreaks"].size) + { + for(var_3A = 1;var_3A < 4;var_3A++ = var_41[1] + "_" + var_41[2]) + { + if(isdefined(self.pers["killstreaks"][var_3A]) && isdefined(self.pers["killstreaks"][var_3A].streakname) && self.pers["killstreaks"][var_3A].available && !self.pers["killstreaks"][var_3A].isspecialist) + { + var_38[var_39] = self.pers["killstreaks"][var_3A].streakname; + var_39++ = var_41[0]; + } + } + } + + self notify("givingLoadout",var_41[0],var_27[0] + "_" + var_27[1]); + maps\mp\killstreaks\_killstreaks::func_2DD6(); + for(var_3A = 0;var_3A < var_38.size;var_3A++) + { + maps\mp\killstreaks\_killstreaks::givekillstreak(var_38[var_3A]); + } + } + } + + if(!issubstr(param_03,"juggernaut")) + { + if(isdefined(self.lastclass) && self.lastclass != "" && self.lastclass != self.class) + { + maps\mp\_utility::incplayerstat("mostclasseschanged",1); + } + + self.pers["lastClass"] = self.class; + self.lastclass = self.class; + } + + if(isdefined(self.gamemode_chosenclass)) + { + self.pers["class"] = self.gamemode_chosenclass; + self.pers["lastClass"] = self.gamemode_chosenclass; + self.class = self.gamemode_chosenclass; + self.lastclass = self.gamemode_chosenclass; + self.gamemode_chosenclass = undefined; + } + + var_3B = func_32BC(var_0E,var_0F,var_10,self.loadoutprimarycamo,self.loadoutprimaryreticle); + maps\mp\_utility::_giveweapon(var_3B); + self switchtoweapon(var_3B); + var_27 = strtok(var_3B,"_"); + if(var_3B[0] == "iw5") + { + var_28 = var_3B[0] + "_" + var_3B[1]; + } + else if(var_28[0] == "alt") + { + var_28 = var_28[1] + "_" + var_28[2]; + } + else + { + var_28 = var_28[0]; + } + + var_29 = maps\mp\gametypes\_rank::func_2881(var_28); + var_2A = self getplayerdata("weaponRank",var_28); + if(var_29 != var_2A) + { + self setplayerdata("weaponRank",var_28,var_29); + } + + if(var_2B == "riotshield_mp" && level.ingraceperiod) + { + self notify("weapon_change","riotshield_mp"); + } + + if(maps\mp\_utility::func_27AF("specialty_extraammo")) + { + self givemaxammo(var_2B); + } + + if(var_04) + { + self setspawnweapon(var_2B); + } + + self.pers["primaryWeapon"] = var_28; + var_3C = strtok(var_2B,"_"); + var_3D = var_1E; + if(var_1E == "none") + { + self setoffhandsecondaryclass("none"); + } + else if(var_1E == "flash_grenade_mp") + { + self setoffhandsecondaryclass("flash"); + } + else if(var_1E == "smoke_grenade_mp" || var_1E == "concussion_grenade_mp") + { + self setoffhandsecondaryclass("smoke"); + } + else + { + self setoffhandsecondaryclass("flash"); + } + + switch(var_3D) + { + case "none": + break; + + case "specialty_tacticalinsertion": + case "specialty_scrambler": + case "specialty_portable_radar": + case "trophy_mp": + maps\mp\_utility::giveperk(var_3D,0); + break; + + default: + self giveweapon(var_3D); + if(var_1E == "flash_grenade_mp") + { + self setweaponammoclip(var_3D,2); + } + else if(var_1E == "concussion_grenade_mp") + { + self setweaponammoclip(var_3D,2); + } + else + { + self setweaponammoclip(var_3D,1); + } + break; + } + + var_07 = var_2B; + self.primaryweapon = var_07; + self.secondaryweapon = var_27; + if(var_08) + { + self setweaponammoclip(self.primaryweapon,0); + self setweaponammostock(self.primaryweapon,0); + } + + maps\mp\gametypes\_teams::func_2762(self.pers["primaryWeapon"],maps\mp\_utility::getbaseweaponname(var_27)); + self.issniper = weaponclass(self.primaryweapon) == "sniper"; + maps\mp\gametypes\_weapons::func_2884(); + maps\mp\perks\_perks::func_298C(); + self notify("changed_kit"); + self notify("giveLoadout"); +} + +//Function Number: 33 +_detachall() +{ + if(isdefined(self.hasriotshield) && self.hasriotshield) + { + if(self.hasriotshieldequipped && !isdefined(self.hasriotshieldhidden) || self.hasriotshieldhidden == 0) + { + self detachshieldmodel("weapon_riot_shield_mp","tag_weapon_left"); + self.hasriotshieldequipped = 0; + } + else + { + self detachshieldmodel("weapon_riot_shield_mp","tag_shield_back"); + } + + self.hasriotshield = 0; + } + + self detachall(); +} + +//Function Number: 34 +func_31F1(param_00) +{ + var_01 = tablelookup("mp/perktable.csv",1,param_00,8); + if(var_01 == "" || var_01 == "specialty_null") + { + return 0; + } + + if(!self isitemunlocked(var_01)) + { + return 0; + } + + return 1; +} + +//Function Number: 35 +func_28F9(param_00) +{ + var_01 = tablelookup("mp/perktable.csv",1,param_00,8); + if(var_01 == "" || var_01 == "specialty_null") + { + return "specialty_null"; + } + + if(!self isitemunlocked(var_01)) + { + return "specialty_null"; + } + + return var_01; +} + +//Function Number: 36 +loadoutallperks(param_00,param_01,param_02,param_03,param_04,param_05) +{ + param_00 = maps\mp\perks\_perks::validateperk(1,param_00); + param_01 = maps\mp\perks\_perks::validateperk(1,param_01); + param_02 = maps\mp\perks\_perks::validateperk(2,param_02); + param_03 = maps\mp\perks\_perks::validateperk(3,param_03); + param_04 = maps\mp\perks\_perks::validateperk(undefined,param_04); + if(param_02 == "specialty_twoprimaries") + { + param_05 = maps\mp\perks\_perks::validateperk(undefined,param_05); + } + + self.loadoutperk1 = param_01; + self.loadoutperk2 = param_02; + self.loadoutperk3 = param_03; + self.loadoutperkequipment = param_00; + self.loadoutprimarybuff = param_04; + self.loadoutsecondarybuff = param_05; + if(param_00 != "specialty_null") + { + maps\mp\_utility::giveperk(param_00,1); + } + + if(param_01 != "specialty_null") + { + maps\mp\_utility::giveperk(param_01,1); + } + + if(param_02 != "specialty_null") + { + maps\mp\_utility::giveperk(param_02,1); + } + + if(param_03 != "specialty_null") + { + maps\mp\_utility::giveperk(param_03,1); + } + + if(param_04 != "specialty_null") + { + maps\mp\_utility::giveperk(param_04,1); + } + + var_06[0] = tablelookup("mp/perktable.csv",1,param_01,8); + foreach(var_08 in var_41) + { + if(var_08 == "" || var_08 == "specialty_null") + { + continue; + } + + if(self isitemunlocked(var_08) || !maps\mp\_utility::rankingenabled()) + { + maps\mp\_utility::giveperk(var_08,1); + } + } + + if(!maps\mp\_utility::func_27AF("specialty_assists")) + { + self.pers["assistsToKill"] = 0; + } +} + +//Function Number: 37 +watchoffhanduse() +{ + self endon("death"); + self endon("disconnect"); + self endon("faux_spawn"); + for(;;) + { + self waittill("grenade_pullback",var_00); + if(self.hasriotshieldequipped) + { + self detachshieldmodel("weapon_riot_shield_mp","tag_weapon_left"); + self.hasriotshieldhidden = 1; + } + else + { + continue; + } + + self waittill("offhand_end",var_00); + if(self.hasriotshieldequipped) + { + self attachshieldmodel("weapon_riot_shield_mp","tag_weapon_left"); + self.hasriotshieldhidden = 0; + } + } +} + +//Function Number: 38 +func_281D() +{ + self endon("death"); + self endon("disconnect"); + self endon("faux_spawn"); + self.hasriotshield = self hasweapon("riotshield_mp"); + self.hasriotshieldequipped = self.currentweaponatspawn == "riotshield_mp"; + thread watchoffhanduse(); + if(self.hasriotshield) + { + if(self.primaryweapon == "riotshield_mp" && self.secondaryweapon == "riotshield_mp") + { + self attachshieldmodel("weapon_riot_shield_mp","tag_weapon_left"); + self attachshieldmodel("weapon_riot_shield_mp","tag_shield_back"); + } + else if(self.hasriotshieldequipped) + { + self attachshieldmodel("weapon_riot_shield_mp","tag_weapon_left"); + } + else + { + self attachshieldmodel("weapon_riot_shield_mp","tag_shield_back"); + } + } + + for(;;) + { + self waittill("weapon_change",var_00); + if(var_00 == "riotshield_mp" || var_00 == "iw5_riotshieldjugg_mp") + { + if(self.hasriotshieldequipped) + { + continue; + } + + if(self.primaryweapon == var_00 && self.secondaryweapon == var_00) + { + continue; + } + else if(self.hasriotshield) + { + self moveshieldmodel("weapon_riot_shield_mp","tag_shield_back","tag_weapon_left"); + } + else + { + self attachshieldmodel("weapon_riot_shield_mp","tag_weapon_left"); + } + + self.hasriotshield = 1; + self.hasriotshieldequipped = 1; + continue; + } + + if(self ismantling() && var_00 == "none") + { + continue; + } + + if(self.hasriotshieldequipped) + { + self.hasriotshield = self hasweapon("riotshield_mp") || self hasweapon("iw5_riotshieldjugg_mp"); + if(self.hasriotshield) + { + self moveshieldmodel("weapon_riot_shield_mp","tag_weapon_left","tag_shield_back"); + } + else + { + self detachshieldmodel("weapon_riot_shield_mp","tag_weapon_left"); + } + + self.hasriotshieldequipped = 0; + continue; + } + + if(self.hasriotshield) + { + if(!self hasweapon("riotshield_mp") && !self hasweapon("iw5_riotshieldjugg_mp")) + { + self detachshieldmodel("weapon_riot_shield_mp","tag_shield_back"); + self.hasriotshield = 0; + } + } + } +} + +//Function Number: 39 +tryattach(param_00) +{ + if(!isdefined(param_00) || param_00 != "back") + { + var_01 = "tag_weapon_left"; + } + else + { + var_01 = "tag_shield_back"; + } + + var_02 = self getattachsize(); + for(var_03 = 0;var_03 < var_02;var_03++) + { + var_04 = self getattachtagname(var_03); + if(var_04 == var_01 && self getattachmodelname(var_03) == "weapon_riot_shield_mp") + { + return; + } + } + + self attachshieldmodel("weapon_riot_shield_mp",var_01); +} + +//Function Number: 40 +func_32BB(param_00) +{ + if(!isdefined(param_00) || param_00 != "back") + { + var_01 = "tag_weapon_left"; + } + else + { + var_01 = "tag_shield_back"; + } + + var_02 = self getattachsize(); + for(var_03 = 0;var_03 < var_02;var_03++) + { + var_04 = self getattachmodelname(var_03); + if(var_04 == "weapon_riot_shield_mp") + { + self detachshieldmodel(var_04,var_01); + return; + } + } +} + +//Function Number: 41 +func_32BC(param_00,param_01,param_02,param_03,param_04) +{ + if(!isdefined(level.lettertonumber)) + { + level.lettertonumber = makeletterstonumbers(); + } + + if(getdvarint("scr_game_perks") == 0) + { + param_02 = "none"; + } + + if(isdefined(param_04) && param_04 != 0 && maps\mp\_utility::func_32BE(param_01) != "rail" && maps\mp\_utility::func_32BE(param_02) != "rail") + { + param_04 = undefined; + } + + if(maps\mp\_utility::func_32BE(param_01) == "rail") + { + param_01 = maps\mp\_utility::func_3F1D(param_01,param_00); + } + else if(maps\mp\_utility::func_32BE(param_02) == "rail") + { + param_02 = maps\mp\_utility::func_3F1D(param_02,param_00); + } + + var_05 = ""; + if(issubstr(param_00,"iw5_")) + { + var_06 = param_00 + "_mp"; + var_07 = param_00.size; + var_05 = getsubstr(param_00,4,var_07); + } + else + { + var_06 = param_01; + } + + var_08 = []; + if(param_01 != "none" && param_02 != "none") + { + if(level.lettertonumber[param_01[0]] < level.lettertonumber[param_02[0]]) + { + } + else if(level.lettertonumber[param_02[0]] == level.lettertonumber[param_03[0]]) + { + if(level.lettertonumber[param_02[1]] < level.lettertonumber[param_03[1]]) + { + } + else + { + } + } + else + { + } + + if(maps\mp\_utility::getweaponclass(param_01) == "weapon_sniper" && maps\mp\_utility::func_32BE(param_02) != "rail" && maps\mp\_utility::func_32BE(param_03) != "rail") + { + if(param_02 != "zoomscope" && param_03 != "zoomscope") + { + } + } + } + else if(param_02 != "none") + { + if(maps\mp\_utility::getweaponclass(param_01) == "weapon_sniper" && maps\mp\_utility::func_32BE(param_02) != "rail" && param_02 != "zoomscope") + { + } + } + else if(param_03 != "none") + { + if(maps\mp\_utility::getweaponclass(param_01) == "weapon_sniper" && maps\mp\_utility::func_32BE(param_03) != "rail" && param_03 != "zoomscope") + { + } + } + else if(maps\mp\_utility::getweaponclass(param_01) == "weapon_sniper") + { + } + + if(isdefined(var_41[0]) && var_41[0] == "vzscope") + { + } + else if(isdefined(var_41[1]) && var_41[1] == "vzscope") + { + } + else if(isdefined(var_41[2]) && var_41[2] == "vzscope") + { + } + + if(isdefined(var_41.size) && var_41.size) + { + for(var_09 = 0;var_09 < var_41.size;var_09++ = var_41[2]) + { + if(isdefined(var_41[var_09 + 1]) && common_scripts\utility::is_later_in_alphabet(var_41[var_09],var_41[var_09 + 1])) + { + var_0A = var_41[var_09]; + var_41[var_09] = var_41[var_09 + 1]; + var_41[var_09 + 1] = var_0A; + var_09 = 0; + continue; + } + } + } + + foreach(var_0C in var_41) + { + var_08 = var_08 + "_" + var_0C; + } + + if(issubstr(var_08,"iw5_")) + { + var_08 = func_32BF(var_08,param_04); + var_08 = buildweaponnamereticle(var_08,var_05); + return var_08; + } + + if(!isvalidweapon(var_08 + "_mp")) + { + return param_01 + "_mp"; + } + + var_08 = func_32BF(var_08,param_04); + var_08 = buildweaponnamereticle(var_08,var_05); + return var_08 + "_mp"; +} + +//Function Number: 42 +func_32BF(param_00,param_01) +{ + if(!isdefined(param_01)) + { + return param_00; + } + + if(param_01 <= 0) + { + return param_00; + } + + if(param_01 < 10) + { + param_00 = param_00 + "_camo0"; + } + else + { + param_00 = param_00 + "_camo"; + } + + param_00 = param_00 + param_01; + return param_00; +} + +//Function Number: 43 +buildweaponnamereticle(param_00,param_01) +{ + if(!isdefined(param_01)) + { + return param_00; + } + + if(param_01 <= 0) + { + return param_00; + } + + param_00 = param_00 + "_scope"; + param_00 = param_00 + param_01; + return param_00; +} + +//Function Number: 44 +makeletterstonumbers() +{ + var_00 = []; + return var_41; +} + +//Function Number: 45 +func_32C2(param_00,param_01,param_02) +{ + self.killstreaks = []; + var_03 = []; + if(isdefined(param_00) && param_00 != "none") + { + var_04 = maps\mp\killstreaks\_killstreaks::getstreakcost(param_00); + var_03[var_04] = param_00; + } + + if(isdefined(param_01) && param_01 != "none") + { + var_04 = maps\mp\killstreaks\_killstreaks::getstreakcost(param_01); + var_03[var_04] = param_01; + } + + if(isdefined(param_02) && param_02 != "none") + { + var_04 = maps\mp\killstreaks\_killstreaks::getstreakcost(param_02); + var_03[var_04] = param_02; + } + + var_05 = 0; + foreach(var_04, var_07 in var_03) + { + if(var_04 > var_05) + { + var_05 = var_04; + } + } + + for(var_08 = 0;var_08 <= var_05;var_08++) + { + if(!isdefined(var_03[var_08])) + { + continue; + } + + var_07 = var_03[var_08]; + self.killstreaks[var_08] = var_03[var_08]; + } +} + +//Function Number: 46 +replenishloadout() +{ + var_00 = self.pers["team"]; + var_01 = self.pers["class"]; + var_02 = self getweaponslistall(); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + var_04 = var_02[var_03]; + self givemaxammo(var_04); + self setweaponammoclip(var_04,9999); + if(var_04 == "claymore_mp" || var_04 == "claymore_detonator_mp") + { + self setweaponammostock(var_04,2); + } + } + + if(self getammocount(level.classgrenades[var_01]["primary"]["type"]) < level.classgrenades[var_01]["primary"]["count"]) + { + self setweaponammoclip(level.classgrenades[var_01]["primary"]["type"],level.classgrenades[var_01]["primary"]["count"]); + } + + if(self getammocount(level.classgrenades[var_01]["secondary"]["type"]) < level.classgrenades[var_01]["secondary"]["count"]) + { + self setweaponammoclip(level.classgrenades[var_01]["secondary"]["type"],level.classgrenades[var_01]["secondary"]["count"]); + } +} + +//Function Number: 47 +func_32C5() +{ + for(;;) + { + level waittill("connected",var_00); + if(!isdefined(var_00.pers["class"])) + { + var_00.pers["class"] = ""; + } + + if(!isdefined(var_00.pers["lastClass"])) + { + var_00.pers["lastClass"] = ""; + } + + var_00.class = var_00.pers["class"]; + var_00.lastclass = var_00.pers["lastClass"]; + var_00.detectexplosives = 0; + var_00.bombsquadicons = []; + var_00.bombsquadids = []; + } +} + +//Function Number: 48 +func_32C6(param_00,param_01) +{ + wait param_00; + self fadeovertime(param_01); + self.alpha = 0; +} + +//Function Number: 49 +func_2AEE(param_00) +{ + self.curclass = param_00; +} + +//Function Number: 50 +getperkforclass(param_00,param_01) +{ + var_02 = func_28BD(param_01); + if(issubstr(param_01,"custom")) + { + return func_28C1(var_02,param_00); + } + + return func_28CA(level.classtablename,var_02,param_00); +} + +//Function Number: 51 +func_32C8(param_00,param_01) +{ + return getperkforclass(0,param_00) == param_01 || getperkforclass(1,param_00) == param_01 || getperkforclass(2,param_00) == param_01; +} + +//Function Number: 52 +func_32A0(param_00,param_01) +{ + if(!isdefined(param_01)) + { + param_01 = 1; + } + + switch(param_00) + { + case "iw5_l96a1": + case "iw5_mg36": + case "iw5_sa80": + case "iw5_pecheneg": + case "iw5_mk46": + case "iw5_m60": + case "xm25": + case "iw5_spas12": + case "iw5_usas12": + case "iw5_aa12": + case "iw5_striker": + case "iw5_1887": + case "iw5_ksg": + case "iw5_as50": + case "iw5_msr": + case "iw5_dragunov": + case "iw5_rsass": + case "iw5_barrett": + case "iw5_ump45": + case "iw5_pp90m1": + case "iw5_p90": + case "iw5_m9": + case "iw5_mp7": + case "iw5_mp5": + case "iw5_cm901": + case "iw5_g36c": + case "iw5_scar": + case "iw5_mk14": + case "iw5_type95": + case "iw5_acr": + case "iw5_fad": + case "iw5_m16": + case "iw5_ak47": + case "riotshield": + case "iw5_m4": + case "iw5_riotshieldjugg": + case "iw5_m60jugg": + return 1; + + default: + if(param_01) + { + } + return 0; + } +} + +//Function Number: 53 +func_32A1(param_00,param_01,param_02,param_03) +{ + if(!isdefined(param_03)) + { + param_03 = 1; + } + + switch(param_00) + { + case "javelin": + case "stinger": + case "iw5_smaw": + case "rpg": + case "iw5_fnfiveseven": + case "iw5_p99": + case "iw5_skorpion": + case "iw5_mp9": + case "iw5_fmg9": + case "iw5_g18": + case "iw5_mp412": + case "iw5_deserteagle": + case "iw5_44magnum": + case "xm25": + case "iw5_usp45jugg": + case "iw5_mp412jugg": + case "iw5_usp45": + case "m320": + return 1; + + case "iw5_l96a1": + case "iw5_mg36": + case "iw5_sa80": + case "iw5_pecheneg": + case "iw5_mk46": + case "iw5_m60": + case "iw5_spas12": + case "iw5_usas12": + case "iw5_aa12": + case "iw5_striker": + case "iw5_1887": + case "iw5_ksg": + case "iw5_as50": + case "iw5_msr": + case "iw5_dragunov": + case "iw5_rsass": + case "iw5_barrett": + case "iw5_ump45": + case "iw5_pp90m1": + case "iw5_p90": + case "iw5_m9": + case "iw5_mp7": + case "iw5_mp5": + case "iw5_cm901": + case "iw5_g36c": + case "iw5_scar": + case "iw5_mk14": + case "iw5_type95": + case "iw5_acr": + case "iw5_fad": + case "iw5_m16": + case "iw5_ak47": + case "riotshield": + case "iw5_m4": + if(getdvarint("scr_game_perks") == 1 && param_01 == "specialty_twoprimaries" || param_02 == "specialty_twoprimaries") + { + return 1; + } + else + { + return 0; + } + + break; + + default: + if(param_03) + { + } + return 0; + } +} + +//Function Number: 54 +func_32C9(param_00,param_01) +{ + if(!isdefined(param_01)) + { + param_01 = 1; + } + + switch(param_00) + { + case "hybrid": + case "hamrhybrid": + case "xmags": + case "rof": + case "fmj": + case "heartbeat": + case "grip": + case "zoomscope": + case "gl": + case "m320": + case "gp25": + case "silencer": + case "silencer03": + case "silencer02": + case "eotechlmg": + case "reflexlmg": + case "thermalsmg": + case "acogsmg": + case "acog": + case "eotechsmg": + case "eotech": + case "reflexsmg": + case "reflex": + case "vzscope": + case "tactical": + case "shotgun": + case "akimbo": + case "none": + case "thermal": + return 1; + + default: + if(param_01) + { + } + return 0; + } +} + +//Function Number: 55 +isattachmentunlocked(param_00,param_01) +{ + var_02 = 0; + var_03 = 2; + var_04 = 4; + var_05 = self getplayerdata("weaponRank",param_00); + var_06 = int(tablelookup("mp/weaponRankTable.csv",var_02,maps\mp\_utility::getweaponclass(param_00),var_03)); + var_07 = int(tablelookup("mp/weaponRankTable.csv",var_06,param_01,var_04)); + if(var_05 >= var_07) + { + return 1; + } + + return 0; +} + +//Function Number: 56 +isvalidweaponbuff(param_00,param_01) +{ + var_02 = maps\mp\_utility::getweaponclass(param_01); + if(var_02 == "weapon_assault") + { + switch(param_00) + { + case "specialty_reducedsway": + case "specialty_holdbreathwhileads": + case "specialty_sharp_focus": + case "specialty_bling": + case "specialty_marksman": + case "specialty_bulletpenetration": + return 1; + + default: + self.detectedexploit = 250; + return 0; + } + + return; + } + + if(var_02 == "weapon_smg") + { + switch(param_00) + { + case "specialty_fastermelee": + case "specialty_longerrange": + case "specialty_reducedsway": + case "specialty_sharp_focus": + case "specialty_bling": + case "specialty_marksman": + return 1; + + default: + self.detectedexploit = 250; + return 0; + } + + return; + } + + if(var_02 == "weapon_lmg") + { + switch(param_00) + { + case "specialty_lightweight": + case "specialty_reducedsway": + case "specialty_sharp_focus": + case "specialty_bling": + case "specialty_marksman": + case "specialty_bulletpenetration": + return 1; + + default: + self.detectedexploit = 250; + return 0; + } + + return; + } + + if(var_02 == "weapon_sniper") + { + switch(param_00) + { + case "specialty_lightweight": + case "specialty_reducedsway": + case "specialty_sharp_focus": + case "specialty_bling": + case "specialty_marksman": + case "specialty_bulletpenetration": + return 1; + + default: + self.detectedexploit = 250; + return 0; + } + + return; + } + + if(var_02 == "weapon_shotgun") + { + switch(param_00) + { + case "specialty_moredamage": + case "specialty_fastermelee": + case "specialty_longerrange": + case "specialty_sharp_focus": + case "specialty_bling": + case "specialty_marksman": + return 1; + + default: + self.detectedexploit = 250; + return 0; + } + + return; + } + + if(var_02 == "weapon_riot") + { + switch(param_00) + { + case "specialty_lightweight": + case "specialty_fastermelee": + return 1; + + default: + self.detectedexploit = 250; + return 0; + } + + return; + } + + self.detectedexploit = 250; + return 0; +} + +//Function Number: 57 +isweaponbuffunlocked(param_00,param_01) +{ + var_02 = 0; + var_03 = 4; + var_04 = 4; + var_05 = self getplayerdata("weaponRank",param_00); + var_06 = int(tablelookup("mp/weaponRankTable.csv",var_02,maps\mp\_utility::getweaponclass(param_00),var_03)); + var_07 = int(tablelookup("mp/weaponRankTable.csv",var_06,param_01,var_04)); + if(var_05 >= var_07) + { + return 1; + } + + return 0; +} + +//Function Number: 58 +isvalidcamo(param_00) +{ + switch(param_00) + { + case "gold": + case "autumn": + case "red": + case "blue": + case "winter": + case "snake": + case "marine": + case "choco": + case "hex": + case "d_urban": + case "multi": + case "snow": + case "classic": + case "none": + return 1; + + default: + return 0; + } +} + +//Function Number: 59 +isvalidreticle(param_00) +{ + switch(param_00) + { + case "ret6": + case "ret5": + case "ret4": + case "ret3": + case "ret2": + case "ret1": + case "none": + return 1; + + default: + return 0; + } +} + +//Function Number: 60 +func_32CE(param_00,param_01) +{ + var_02 = 0; + var_03 = 3; + var_04 = 4; + var_05 = self getplayerdata("weaponRank",param_00); + var_06 = int(tablelookup("mp/weaponRankTable.csv",var_02,maps\mp\_utility::getweaponclass(param_00),var_03)); + var_07 = int(tablelookup("mp/weaponRankTable.csv",var_06,param_01,var_04)); + if(var_05 >= var_07) + { + return 1; + } + + return 0; +} + +//Function Number: 61 +func_32CF(param_00) +{ + switch(param_00) + { + case "bouncingbetty_mp": + case "c4_mp": + case "semtex_mp": + case "claymore_mp": + case "specialty_portable_radar": + case "throwingknife_mp": + case "frag_grenade_mp": + return 1; + + default: + return 0; + } +} + +//Function Number: 62 +func_32D0(param_00) +{ + switch(param_00) + { + case "emp_grenade_mp": + case "specialty_tacticalinsertion": + case "specialty_scrambler": + case "concussion_grenade_mp": + case "flash_grenade_mp": + case "specialty_portable_radar": + case "smoke_grenade_mp": + case "trophy_mp": + return 1; + + default: + return 0; + } +} + +//Function Number: 63 +func_32D1(param_00) +{ + switch(param_00) + { + case "specialty_paint": + case "specialty_fastreload": + case "specialty_longersprint": + case "specialty_blindeye": + case "specialty_scavenger": + return 1; + + default: + return 0; + } +} + +//Function Number: 64 +func_32D2(param_00,param_01) +{ + if(!isdefined(param_01) || param_01 != "specialty_anytwo") + { + switch(param_00) + { + case "_specialty_blastshield": + case "specialty_hardline": + case "specialty_twoprimaries": + case "specialty_quickdraw": + case "specialty_assists": + case "specialty_coldblooded": + return 1; + + default: + return 0; + } + } + + return 1; +} + +//Function Number: 65 +func_32D3(param_00,param_01) +{ + if(!isdefined(param_01) || param_01 != "specialty_anytwo") + { + switch(param_00) + { + case "specialty_stalker": + case "specialty_quieter": + case "specialty_autospot": + case "specialty_detectexplosive": + case "specialty_bulletaccuracy": + return 1; + + default: + return 0; + } + } + + return 1; +} + +//Function Number: 66 +func_32D4(param_00) +{ + switch(param_00) + { + case "specialty_c4death": + case "specialty_stopping_power": + case "specialty_revenge": + case "specialty_grenadepulldeath": + case "specialty_juiced": + case "specialty_uav": + case "specialty_finalstand": + case "specialty_null": + return 1; + + default: + return 0; + } +} + +//Function Number: 67 +isvalidweapon(param_00) +{ + if(!isdefined(level.var_32D6)) + { + level.var_32D6 = []; + foreach(var_02 in level.weaponlist) + { + level.var_32D6[var_02] = 1; + } + } + + if(isdefined(level.var_32D6[param_00])) + { + return 1; + } + + return 0; +} + +//Function Number: 68 +isvalidkillstreak(param_00) +{ + switch(param_00) + { + case "specialty_stalker_ks": + case "specialty_quieter_ks": + case "specialty_bulletaccuracy_ks": + case "specialty_autospot_ks": + case "specialty_detectexplosive_ks": + case "_specialty_blastshield_ks": + case "specialty_assists_ks": + case "specialty_quickdraw_ks": + case "specialty_coldblooded_ks": + case "specialty_hardline_ks": + case "specialty_paint_ks": + case "specialty_blindeye_ks": + case "specialty_scavenger_ks": + case "specialty_fastreload_ks": + case "specialty_longersprint_ks": + case "littlebird_support": + case "helicopter": + case "sam_turret": + case "airdrop_remote_tank": + case "remote_tank": + case "remote_uav": + case "uav_support": + case "airdrop_juggernaut_recon": + case "remote_mg_turret": + case "remote_mortar": + case "aastrike": + case "ims": + case "heli_sniper": + case "directional_uav": + case "deployable_vest": + case "osprey_gunner": + case "escort_airdrop": + case "minigun_turret": + case "airdrop_trap": + case "stealth_airstrike": + case "littlebird_flock": + case "helicopter_flares": + case "airdrop_juggernaut": + case "airdrop_sentry_minigun": + case "airdrop_assault": + case "sentry": + case "counter_uav": + case "predator_missile": + case "precision_airstrike": + case "ac130": + case "triple_uav": + case "double_uav": + case "uav": + case "emp": + case "none": + return 1; + + default: + return 0; + } +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/gametypes/_damage.gsc b/MW3/Xbox/MP/maps/mp/gametypes/_damage.gsc new file mode 100644 index 0000000..73a2cea --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/gametypes/_damage.gsc @@ -0,0 +1,3228 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_damage.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 71 + * Decompile Time: 1061 ms + * Timestamp: 10/27/2023 2:25:18 AM +*******************************************************************/ + +//Function Number: 1 +func_2CBE() +{ + if(isdefined(self.switching_teams)) + { + return 1; + } + + return 0; +} + +//Function Number: 2 +isteamswitchbalanced() +{ + var_00 = maps\mp\gametypes\_teams::func_2764(); + var_7E[self.leaving_team]; + var_7D[self.joining_team]; + return var_7D[self.joining_team] - var_7D[self.leaving_team] < 2; +} + +//Function Number: 3 +func_2CC0(param_00,param_01) +{ + if(!level.teambased) + { + return 0; + } + + if(!isdefined(param_01)) + { + return 0; + } + + if(!isplayer(param_01) && !isdefined(param_01.team)) + { + return 0; + } + + if(param_00.team != param_01.team) + { + return 0; + } + + if(param_00 == param_01) + { + return 0; + } + + return 1; +} + +//Function Number: 4 +killedself(param_00) +{ + if(!isplayer(param_00)) + { + return 0; + } + + if(param_00 != self) + { + return 0; + } + + return 1; +} + +//Function Number: 5 +isheadshot(param_00,param_01,param_02,param_03) +{ + if(isdefined(param_03)) + { + if(param_03.code_classname == "script_vehicle" && isdefined(param_03.owner)) + { + return 0; + } + + if(param_03.code_classname == "misc_turret" && isdefined(param_03.owner)) + { + return 0; + } + + if(param_03.code_classname == "script_model" && isdefined(param_03.owner)) + { + return 0; + } + } + + return (param_01 == "head" || param_01 == "helmet") && param_02 != "MOD_MELEE" && param_02 != "MOD_IMPACT" && !maps\mp\_utility::func_2CC3(param_00); +} + +//Function Number: 6 +func_2CC4() +{ + if(!level.teambased) + { + return; + } + + if(self.joining_team == "spectator" || !isteamswitchbalanced()) + { + self thread [[ level.onxpevent ]]("suicide"); + maps\mp\_utility::func_26FB("suicides",1); + self.suicides = maps\mp\_utility::getpersstat("suicides"); + } +} + +//Function Number: 7 +func_2CC5(param_00,param_01,param_02,param_03) +{ + if(!isdefined(param_00)) + { + return; + } + + if(!isdefined(param_00.team)) + { + handlesuicidedeath(param_02,param_03); + return; + } + + if((level.teambased && param_00.team != self.team) || !level.teambased) + { + if(isdefined(level.onnormaldeath) && isplayer(param_00) && param_00.team != "spectator") + { + [[ level.onnormaldeath ]](self,param_00,param_01); + } + } +} + +//Function Number: 8 +handlesuicidedeath(param_00,param_01) +{ + self setcarddisplayslot(self,7); + self openmenu("killedby_card_display"); + self thread [[ level.onxpevent ]]("suicide"); + maps\mp\_utility::func_26FB("suicides",1); + self.suicides = maps\mp\_utility::getpersstat("suicides"); + if(!maps\mp\_utility::matchmakinggame()) + { + maps\mp\_utility::incplayerstat("suicides",1); + } + + var_02 = maps\mp\gametypes\_tweakables::func_270D("game","suicidepointloss"); + maps\mp\gametypes\_gamescore::_setplayerscore(self,maps\mp\gametypes\_gamescore::_getplayerscore(self) - var_02); + if(param_00 == "MOD_SUICIDE" && param_01 == "none" && isdefined(self.throwinggrenade)) + { + self.lastgrenadesuicidetime = gettime(); + } + + if(isdefined(self.friendlydamage)) + { + self iprintlnbold(&"MP_FRIENDLY_FIRE_WILL_NOT"); + } +} + +//Function Number: 9 +func_2CC8(param_00) +{ + param_00 setcarddisplayslot(self,8); + param_00 openmenu("youkilled_card_display"); + self setcarddisplayslot(param_00,7); + self openmenu("killedby_card_display"); + param_00 thread [[ level.onxpevent ]]("teamkill"); + param_00.pers["teamkills"] = param_00.pers["teamkills"] + 1; + param_00.teamkillsthisround++; + if(maps\mp\gametypes\_tweakables::func_270D("team","teamkillpointloss")) + { + var_01 = maps\mp\gametypes\_rank::getscoreinfovalue("kill"); + maps\mp\gametypes\_gamescore::_setplayerscore(param_00,maps\mp\gametypes\_gamescore::_getplayerscore(param_00) - var_01); + } + + if(level.maxallowedteamkills < 0) + { + return; + } + + if(level.ingraceperiod) + { + var_02 = 1; + param_00.pers["teamkills"] = param_00.pers["teamkills"] + level.maxallowedteamkills; + } + else if(var_02.pers["teamkills"] > 1 && maps\mp\_utility::gettimepassed() < level.graceperiod * 1000 + 8000 + var_02.pers["teamkills"] * 1000) + { + var_02 = 1; + param_00.pers["teamkills"] = param_00.pers["teamkills"] + level.maxallowedteamkills; + } + else + { + var_02 = var_02 maps\mp\gametypes\_playerlogic::teamkilldelay(); + } + + if(var_02 > 0) + { + param_00.pers["teamKillPunish"] = 1; + param_00 maps\mp\_utility::_suicide(); + } +} + +//Function Number: 10 +handlenormaldeath(param_00,param_01,param_02,param_03,param_04) +{ + param_01 thread maps\mp\_events::func_2A97(param_00,self,param_03,param_04); + param_01 setcarddisplayslot(self,8); + param_01 openmenu("youkilled_card_display"); + self setcarddisplayslot(param_01,7); + self openmenu("killedby_card_display"); + if(param_04 == "MOD_HEAD_SHOT") + { + param_01 maps\mp\_utility::func_26FB("headshots",1); + param_01.headshots = param_01 maps\mp\_utility::getpersstat("headshots"); + param_01 maps\mp\_utility::incplayerstat("headshots",1); + if(isdefined(param_01.laststand)) + { + var_05 = maps\mp\gametypes\_rank::getscoreinfovalue("kill") * 2; + } + else + { + var_05 = undefined; + } + + param_01 playlocalsound("bullet_impact_headshot_2"); + } + else if(isdefined(param_02.laststand)) + { + var_05 = maps\mp\gametypes\_rank::getscoreinfovalue("kill") * 2; + } + else + { + var_05 = undefined; + } + + param_01 thread maps\mp\gametypes\_rank::func_2AB3("kill",var_05,param_03,param_04); + param_01 maps\mp\_utility::func_26FB("kills",1); + param_01.kills = param_01 maps\mp\_utility::getpersstat("kills"); + param_01 maps\mp\_utility::updatepersratio("kdRatio","kills","deaths"); + param_01 maps\mp\gametypes\_persistence::func_26D8("round","kills",param_01.kills); + param_01 maps\mp\_utility::incplayerstat("kills",1); + if(isflankkill(self,param_01)) + { + param_01 maps\mp\_utility::incplayerstat("flankkills",1); + maps\mp\_utility::incplayerstat("flankdeaths",1); + } + + var_06 = param_01.pers["cur_kill_streak"]; + self.pers["copyCatLoadout"] = undefined; + if(maps\mp\_utility::func_27AF("specialty_copycat")) + { + self.pers["copyCatLoadout"] = param_01 maps\mp\gametypes\_class::cloneloadout(); + } + + if(isalive(param_01) || param_01.streaktype == "support") + { + if(param_01 maps\mp\_utility::func_2CCE(param_03)) + { + param_01 thread maps\mp\killstreaks\_killstreaks::giveadrenaline("kill"); + param_01.pers["cur_kill_streak"]++; + if(!maps\mp\_utility::func_2829(param_03)) + { + param_01.pers["cur_kill_streak_for_nuke"]++; + } + + var_07 = 25; + if(param_01 maps\mp\_utility::func_27AF("specialty_hardline")) + { + var_07--; + } + + if(!maps\mp\_utility::func_2829(param_03) && param_01.pers["cur_kill_streak_for_nuke"] == var_07) + { + param_01 thread maps\mp\killstreaks\_killstreaks::givekillstreak("nuke",0,1,param_01,1); + param_01 thread maps\mp\gametypes\_hud_message::killstreaksplashnotify("nuke",var_07); + } + } + + param_01 maps\mp\_utility::func_2AAA("killstreak",param_01.pers["cur_kill_streak"]); + if(param_01.pers["cur_kill_streak"] > param_01 maps\mp\_utility::getpersstat("longestStreak")) + { + param_01 maps\mp\_utility::func_2CCF("longestStreak",param_01.pers["cur_kill_streak"]); + } + } + + param_01.pers["cur_death_streak"] = 0; + if(param_01.pers["cur_kill_streak"] > param_01 maps\mp\gametypes\_persistence::statgetchild("round","killStreak")) + { + param_01 maps\mp\gametypes\_persistence::func_26D8("round","killStreak",param_01.pers["cur_kill_streak"]); + } + + if(param_01.pers["cur_kill_streak"] > param_01.kill_streak) + { + param_01 maps\mp\gametypes\_persistence::func_2CD1("killStreak",param_01.pers["cur_kill_streak"]); + param_01.kill_streak = param_01.pers["cur_kill_streak"]; + } + + maps\mp\gametypes\_gamescore::func_26D3("kill",param_01,self); + maps\mp\_skill::processkill(param_01,self); + var_08 = maps\mp\gametypes\_tweakables::func_270D("game","deathpointloss"); + maps\mp\gametypes\_gamescore::_setplayerscore(self,maps\mp\gametypes\_gamescore::_getplayerscore(self) - var_08); + if(isdefined(level.ac130player) && level.ac130player == param_01) + { + level notify("ai_killed",self); + } + + level notify("player_got_killstreak_" + param_01.pers["cur_kill_streak"],param_01); + param_01 notify("got_killstreak",param_01.pers["cur_kill_streak"]); + param_01 notify("killed_enemy"); + if(isdefined(self.uavremotemarkedby)) + { + if(self.uavremotemarkedby != param_01) + { + self.uavremotemarkedby thread maps\mp\killstreaks\_remoteuav::remoteuav_processtaggedassist(self); + } + + self.uavremotemarkedby = undefined; + } + + if(isdefined(level.onnormaldeath) && param_01.pers["team"] != "spectator") + { + [[ level.onnormaldeath ]](self,param_01,param_00); + } + + if(!level.teambased) + { + self.attackers = []; + return; + } + + level thread maps\mp\gametypes\_battlechatter_mp::saylocalsounddelayed(param_01,"kill",0.75); + if(isdefined(self.lastattackedshieldplayer) && isdefined(self.lastattackedshieldtime) && self.lastattackedshieldplayer != param_01) + { + if(gettime() - self.lastattackedshieldtime < 2500) + { + self.lastattackedshieldplayer thread maps\mp\gametypes\_gamescore::func_2700(self); + if(self.lastattackedshieldplayer maps\mp\_utility::func_27AF("specialty_assists")) + { + self.lastattackedshieldplayer.pers["assistsToKill"]++; + if(!self.lastattackedshieldplayer.pers["assistsToKill"] % 2) + { + self.lastattackedshieldplayer maps\mp\gametypes\_missions::processchallenge("ch_hardlineassists"); + self.lastattackedshieldplayer maps\mp\killstreaks\_killstreaks::giveadrenaline("kill"); + self.lastattackedshieldplayer.pers["cur_kill_streak"]++; + } + } + else + { + self.lastattackedshieldplayer.pers["assistsToKill"] = 0; + } + } + else if(isalive(self.lastattackedshieldplayer) && gettime() - self.lastattackedshieldtime < 5000) + { + var_09 = vectornormalize(anglestoforward(self.angles)); + var_0A = vectornormalize(self.lastattackedshieldplayer.origin - self.origin); + if(vectordot(var_0A,var_09) > 0.925) + { + self.lastattackedshieldplayer thread maps\mp\gametypes\_gamescore::func_2700(self); + if(self.lastattackedshieldplayer maps\mp\_utility::func_27AF("specialty_assists")) + { + self.lastattackedshieldplayer.pers["assistsToKill"]++; + if(!self.lastattackedshieldplayer.pers["assistsToKill"] % 2) + { + self.lastattackedshieldplayer maps\mp\gametypes\_missions::processchallenge("ch_hardlineassists"); + self.lastattackedshieldplayer maps\mp\killstreaks\_killstreaks::giveadrenaline("kill"); + self.lastattackedshieldplayer.pers["cur_kill_streak"]++; + } + } + else + { + self.lastattackedshieldplayer.pers["assistsToKill"] = 0; + } + } + } + } + + if(isdefined(self.attackers)) + { + foreach(var_0C in self.attackers) + { + if(!isdefined(var_0C)) + { + continue; + } + + if(var_0C == param_01) + { + continue; + } + + if(self == var_0C) + { + continue; + } + + var_0C thread maps\mp\gametypes\_gamescore::func_26F9(self); + if(var_0C maps\mp\_utility::func_27AF("specialty_assists")) + { + var_0C.pers["assistsToKill"]++; + if(!var_0C.pers["assistsToKill"] % 2) + { + var_0C maps\mp\gametypes\_missions::processchallenge("ch_hardlineassists"); + var_0C maps\mp\killstreaks\_killstreaks::giveadrenaline("kill"); + var_0C.pers["cur_kill_streak"]++; + if(!maps\mp\_utility::func_2829(param_03)) + { + var_0C.pers["cur_kill_streak_for_nuke"]++; + } + + var_07 = 25; + if(var_0C maps\mp\_utility::func_27AF("specialty_hardline")) + { + var_07--; + } + + if(!maps\mp\_utility::func_2829(param_03) && var_0C.pers["cur_kill_streak_for_nuke"] == var_07) + { + var_0C thread maps\mp\killstreaks\_killstreaks::givekillstreak("nuke",0,1,var_0C,1); + var_0C thread maps\mp\gametypes\_hud_message::killstreaksplashnotify("nuke",var_07); + } + } + + continue; + } + + var_0C.pers["assistsToKill"] = 0; + } + + self.attackers = []; + } +} + +//Function Number: 11 +isplayerweapon(param_00) +{ + if(weaponclass(param_00) == "non-player") + { + return 0; + } + + if(weaponclass(param_00) == "turret") + { + return 0; + } + + if(weaponinventorytype(param_00) == "primary" || weaponinventorytype(param_00) == "altmode") + { + return 1; + } + + return 0; +} + +//Function Number: 12 +callback_playerkilled(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08) +{ + func_2CDB(param_00,param_01,self,param_02,param_03,param_04,param_05,param_06,param_07,param_08,0); +} + +//Function Number: 13 +queueshieldforremoval(param_00) +{ + var_01 = 5; + if(!isdefined(level.shieldtrasharray)) + { + level.shieldtrasharray = []; + } + + if(level.shieldtrasharray.size >= var_01) + { + var_02 = level.shieldtrasharray.size - 1; + level.shieldtrasharray[0] delete(); + for(var_03 = 0;var_03 < var_02;var_03++) + { + level.shieldtrasharray[var_03] = level.shieldtrasharray[var_03 + 1]; + } + + level.shieldtrasharray[var_02] = undefined; + } + + level.shieldtrasharray[level.shieldtrasharray.size] = param_00; +} + +//Function Number: 14 +func_2CD8(param_00,param_01) +{ + var_02 = "weapon_riot_shield_mp"; + if(!isdefined(self.hasriotshieldhidden) || self.hasriotshieldhidden == 0) + { + self detachshieldmodel(var_02,"tag_weapon_left"); + } + + self.hasriotshield = 0; + self.hasriotshieldequipped = 0; +} + +//Function Number: 15 +func_2CDB(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A) +{ + param_02 endon("spawned"); + param_02 notify("killed_player"); + if(isdefined(param_01)) + { + param_01.assistedsuicide = undefined; + } + + if(!isdefined(param_02.idflags)) + { + if(param_04 == "MOD_SUICIDE") + { + param_02.idflags = 0; + } + else if(param_04 == "MOD_GRENADE" && issubstr(param_05,"frag_grenade") && param_03 == 100000) + { + param_02.idflags = 0; + } + else if(param_05 == "nuke_mp") + { + param_02.idflags = 0; + } + else if(level.friendlyfire >= 2) + { + param_02.idflags = 0; + } + else + { + } + } + + if(param_02.hasriotshieldequipped) + { + param_02 func_2CD8(param_03,param_04); + } + + if(!param_0A) + { + if(isdefined(param_02.endgame)) + { + if(isdefined(level.nukedetonated)) + { + self visionsetnakedforplayer(level.nukevisionset,2); + } + else + { + self visionsetnakedforplayer("",2); + } + } + else + { + if(isdefined(level.nukedetonated)) + { + self visionsetnakedforplayer(level.nukevisionset,0); + } + else + { + self visionsetnakedforplayer("",0); + } + + param_02 thermalvisionoff(); + } + } + else + { + param_02.fauxdead = 1; + self notify("death"); + } + + if(game["state"] == "postgame") + { + return; + } + + var_0B = 0; + if(!isplayer(param_00) && isdefined(param_00.primaryweapon)) + { + var_0C = param_00.primaryweapon; + } + else if(isdefined(param_02) && isplayer(param_02) && param_02 getcurrentprimaryweapon() != "none") + { + var_0C = param_02 getcurrentprimaryweapon(); + } + else if(issubstr(param_06,"alt_")) + { + var_0C = getsubstr(param_06,4,param_06.size); + } + else + { + var_0C = undefined; + } + + if(isdefined(param_02.uselaststandparams) || isdefined(param_02.laststandparams) && param_04 == "MOD_SUICIDE") + { + param_02 func_2D43(); + param_02.uselaststandparams = undefined; + param_00 = param_02.laststandparams.einflictor; + param_01 = param_02.laststandparams.attacker; + param_03 = param_02.laststandparams.idamage; + param_04 = param_02.laststandparams.smeansofdeath; + param_05 = param_02.laststandparams.sweapon; + var_0C = param_02.laststandparams.sprimaryweapon; + param_06 = param_02.laststandparams.vdir; + param_07 = param_02.laststandparams.shitloc; + var_0B = gettime() - param_02.laststandparams.laststandstarttime / 1000; + param_02.laststandparams = undefined; + } + + if((!isdefined(param_01) || param_01.classname == "trigger_hurt" || param_01.classname == "worldspawn" || param_01 == param_02) && isdefined(self.attackers)) + { + var_0D = undefined; + foreach(var_0F in self.attackers) + { + if(!isdefined(var_0F)) + { + continue; + } + + if(!isdefined(param_02.attackerdata[var_0F.guid].damage)) + { + continue; + } + + if(var_0F == param_02 || level.teambased && var_0F.team == param_02.team) + { + continue; + } + + if(param_02.attackerdata[var_0F.guid].lasttimedamaged + 2500 < gettime() && param_01 != param_02 && isdefined(param_02.laststand) && param_02.laststand) + { + continue; + } + + if(param_02.attackerdata[var_0F.guid].damage > 1 && !isdefined(var_0D)) + { + var_0D = var_0F; + continue; + } + + if(isdefined(var_0D) && param_02.attackerdata[var_0F.guid].damage > param_02.attackerdata[var_0D.guid].damage) + { + var_0D = var_0F; + } + } + + if(isdefined(var_0D)) + { + param_01 = var_0D; + param_01.assistedsuicide = 1; + param_05 = param_02.attackerdata[var_0D.guid].weapon; + param_06 = param_02.attackerdata[var_0D.guid].vdir; + param_07 = param_02.attackerdata[var_0D.guid].shitloc; + param_08 = param_02.attackerdata[var_0D.guid].psoffsettime; + param_04 = param_02.attackerdata[var_0D.guid].smeansofdeath; + param_03 = param_02.attackerdata[var_0D.guid].damage; + var_0C = param_02.attackerdata[var_0D.guid].sprimaryweapon; + param_00 = param_01; + } + } + else if(isdefined(param_01)) + { + param_01.assistedsuicide = undefined; + } + + if(isheadshot(param_05,param_07,param_04,param_01)) + { + param_04 = "MOD_HEAD_SHOT"; + } + else if(param_04 != "MOD_MELEE" && !isdefined(param_02.nuked)) + { + param_02 maps\mp\_utility::playdeathsound(); + } + + var_11 = func_2CC0(param_02,param_01); + if(isdefined(param_01)) + { + if(param_01.code_classname == "script_vehicle" && isdefined(param_01.owner)) + { + param_01 = param_01.owner; + } + + if(param_01.code_classname == "misc_turret" && isdefined(param_01.owner)) + { + if(isdefined(param_01.vehicle)) + { + param_01.vehicle notify("killedPlayer",param_02); + } + + param_01 = param_01.owner; + } + + if(param_01.code_classname == "script_model" && isdefined(param_01.owner)) + { + param_01 = param_01.owner; + if(!func_2CC0(param_02,param_01) && param_01 != param_02) + { + param_01 notify("crushed_enemy"); + } + } + } + + param_02 maps\mp\gametypes\_weapons::dropscavengerfordeath(param_01); + param_02 maps\mp\gametypes\_weapons::dropweaponfordeath(param_01); + if(!param_0A) + { + param_02.sessionstate = "dead"; + param_02.statusicon = "hud_status_dead"; + } + + param_02 maps\mp\gametypes\_playerlogic::removefromalivecount(); + if(!isdefined(param_02.switching_teams)) + { + param_02 maps\mp\_utility::func_26FB("deaths",1); + param_02.deaths = param_02 maps\mp\_utility::getpersstat("deaths"); + param_02 maps\mp\_utility::updatepersratio("kdRatio","kills","deaths"); + param_02 maps\mp\gametypes\_persistence::func_26D8("round","deaths",param_02.deaths); + param_02 maps\mp\_utility::incplayerstat("deaths",1); + } + + if(isdefined(param_01) && isplayer(param_01)) + { + param_01 func_2CF0(param_02); + } + + obituary(param_02,param_01,param_05,param_04); + var_12 = 0; + var_13 = maps\mp\_utility::func_28D8(); + param_02 func_2D55(var_13,param_01,param_03,param_04,param_05,var_0C,param_07); + param_02 maps\mp\_matchdata::func_28B6(var_13); + param_02 maps\mp\_matchdata::func_28CF(var_13,param_01,param_03,param_04,param_05,var_0C,param_07); + if(param_04 == "MOD_MELEE") + { + if(issubstr(param_05,"riotshield")) + { + param_01 maps\mp\_utility::incplayerstat("shieldkills",1); + if(!maps\mp\_utility::matchmakinggame()) + { + param_02 maps\mp\_utility::incplayerstat("shielddeaths",1); + } + } + else + { + param_01 maps\mp\_utility::incplayerstat("knifekills",1); + } + } + + if(param_02 func_2CBE()) + { + func_2CC4(); + } + else if(!isplayer(param_01) || isplayer(param_01) && param_04 == "MOD_FALLING") + { + func_2CC5(param_01,var_13,param_04,param_07); + } + else if(param_01 == param_02) + { + handlesuicidedeath(param_04,param_07); + } + else if(var_11) + { + if(!isdefined(param_02.nuked)) + { + func_2CC8(param_01); + } + } + else + { + if(param_04 == "MOD_GRENADE" && param_00 == param_01) + { + func_2D2E(param_02,param_01,param_00,param_05,param_03,(0,0,0),param_06,param_07,param_08,param_04); + } + + var_12 = 1; + handlenormaldeath(var_13,param_01,param_00,param_05,param_04); + param_02 thread maps\mp\gametypes\_missions::func_2CE6(param_00,param_01,param_03,param_04,param_05,var_0C,param_07,param_01.modifiers); + param_02.pers["cur_death_streak"]++; + if(!maps\mp\_utility::getgametypenumlives() && !maps\mp\_utility::matchmakinggame()) + { + param_02 maps\mp\_utility::func_2AAA("deathstreak",param_02.pers["cur_death_streak"]); + } + + if(isplayer(param_01) && param_02 maps\mp\_utility::isjuggernaut()) + { + param_01 thread maps\mp\_utility::teamplayercardsplash("callout_killed_juggernaut",param_01); + } + } + + var_14 = 0; + var_15 = undefined; + if(isdefined(self.previousprimary)) + { + var_14 = 1; + var_15 = self.previousprimary; + self.previousprimary = undefined; + } + + if(isplayer(param_01) && param_01 != self && !level.teambased || level.teambased && self.team != param_01.team) + { + if(var_14 && isdefined(var_15)) + { + var_16 = var_15; + } + else + { + var_16 = self.lastdroppableweapon; + } + + thread maps\mp\gametypes\_gamelogic::trackleaderboarddeathstats(var_16,param_04); + param_01 thread maps\mp\gametypes\_gamelogic::trackattackerleaderboarddeathstats(param_05,param_04); + } + + param_02.wasswitchingteamsforonplayerkilled = undefined; + if(isdefined(param_02.switching_teams)) + { + param_02.wasswitchingteamsforonplayerkilled = 1; + } + + param_02 resetplayervariables(); + param_02.lastattacker = param_01; + param_02.lastdeathpos = param_02.origin; + param_02.deathtime = gettime(); + param_02.wantsafespawn = 0; + param_02.revived = 0; + param_02.sameshotdamage = 0; + if(maps\mp\killstreaks\_killstreaks::func_2CEC(param_02.streaktype)) + { + param_02 maps\mp\killstreaks\_killstreaks::resetadrenaline(); + } + + if(param_0A) + { + var_12 = 0; + param_09 = param_02 playerforcedeathanim(param_00,param_04,param_05,param_07,param_06); + } + + param_02.body = param_02 cloneplayer(param_09); + if(param_0A) + { + param_02 playerhide(); + } + + if(param_02 isonladder() || param_02 ismantling() || !param_02 isonground() || isdefined(param_02.nuked)) + { + param_02.body startragdoll(); + } + + if(!isdefined(param_02.switching_teams)) + { + thread maps\mp\gametypes\_deathicons::adddeathicon(param_02.body,param_02,param_02.team,5); + } + + thread delaystartragdoll(param_02.body,param_07,param_06,param_05,param_00,param_04); + param_02 thread [[ level.onplayerkilled ]](param_00,param_01,param_03,param_04,param_05,param_06,param_07,param_08,param_09,var_13); + if(isplayer(param_01)) + { + var_17 = param_01 getentitynumber(); + } + else + { + var_17 = -1; + } + + var_18 = param_02 getkillcamentity(param_01,param_00,param_05); + var_19 = -1; + var_1A = 0; + if(isdefined(var_18)) + { + var_19 = var_18 getentitynumber(); + var_1A = var_18.birthtime; + if(!isdefined(var_1A)) + { + var_1A = 0; + } + } + + if(param_04 != "MOD_SUICIDE" && !!isdefined(param_01) || param_01.classname == "trigger_hurt" || param_01.classname == "worldspawn" || param_01 == param_02) + { + func_2CFF(5,param_02,param_01,var_17,var_19,var_1A,param_05,var_0B,param_08); + } + + param_02 setplayerdata("killCamHowKilled",0); + switch(param_04) + { + case "MOD_HEAD_SHOT": + param_02 setplayerdata("killCamHowKilled",1); + break; + + default: + break; + } + + if(!param_0A) + { + if(!level.showingfinalkillcam && !level.killcam && var_12) + { + if(param_02 maps\mp\_utility::func_27AF("specialty_copycat") && isdefined(param_02.pers["copyCatLoadout"])) + { + param_02 thread maps\mp\gametypes\_killcam::func_2BA9(param_01); + wait 1; + } + } + + wait 0.25; + param_02 thread maps\mp\gametypes\_killcam::cancelkillcamonuse(); + wait 0.25; + self.respawntimerstarttime = gettime() + 1000; + var_1B = maps\mp\gametypes\_playerlogic::func_2B00(1); + if(var_1B < 1) + { + var_1B = 1; + } + + param_02 thread maps\mp\gametypes\_playerlogic::predictabouttospawnplayerovertime(var_1B); + wait 1; + param_02 notify("death_delay_finished"); + } + + var_1C = gettime() - param_02.deathtime / 1000; + self.respawntimerstarttime = gettime(); + if(!isdefined(param_02.cancelkillcam) && param_02.cancelkillcam && var_12 && level.killcam && game["state"] == "playing" && !param_02 maps\mp\_utility::isusingremote() && !level.showingfinalkillcam) + { + var_1D = !maps\mp\_utility::getgametypenumlives() && !param_02.pers["lives"]; + var_1B = maps\mp\gametypes\_playerlogic::func_2B00(1); + var_1E = var_1D && var_1B <= 0; + if(!var_1D) + { + var_1B = -1; + level notify("player_eliminated",param_02); + } + + param_02 maps\mp\gametypes\_killcam::killcam(var_17,var_19,var_1A,param_05,var_1C + var_0B,param_08,var_1B,maps\mp\gametypes\_gamelogic::func_2CEE(),param_01,param_02); + } + + if(game["state"] != "playing") + { + if(!level.showingfinalkillcam) + { + param_02.sessionstate = "dead"; + param_02 maps\mp\_utility::func_2B28(); + } + + return; + } + + if(maps\mp\_utility::func_2B5F(param_02.class)) + { + param_02 thread maps\mp\gametypes\_playerlogic::spawnclient(); + } +} + +//Function Number: 16 +func_2CEF() +{ + if(level.diehardmode != 1) + { + return 0; + } + + if(!maps\mp\_utility::getgametypenumlives()) + { + return 0; + } + + if(level.livescount[self.team] > 0) + { + return 0; + } + + foreach(var_01 in level.players) + { + if(!isalive(var_01)) + { + continue; + } + + if(var_01.team != self.team) + { + continue; + } + + if(var_01 == self) + { + continue; + } + + if(!var_01.inlaststand) + { + return 0; + } + } + + foreach(var_01 in level.players) + { + if(!isalive(var_01)) + { + continue; + } + + if(var_01.team != self.team) + { + continue; + } + + if(var_01.inlaststand && var_01 != self) + { + var_01 func_2D3D(0); + } + } + + return 1; +} + +//Function Number: 17 +func_2CF0(param_00) +{ + if(maps\mp\_utility::matchmakinggame()) + { + return; + } + + var_01 = 0; + var_02 = undefined; + if(isdefined(param_00.attackerdata) && param_00.attackerdata.size > 1) + { + foreach(var_04 in param_00.attackerdata) + { + if(var_04.damage > var_01) + { + var_01 = var_04.damage; + var_02 = var_04.attackerent; + } + } + + if(isdefined(var_02) && var_02 != self) + { + maps\mp\_utility::incplayerstat("killsteals",1); + } + } +} + +//Function Number: 18 +initfinalkillcam() +{ + level.finalkillcam_delay = []; + level.finalkillcam_victim = []; + level.finalkillcam_attacker = []; + level.finalkillcam_attackernum = []; + level.finalkillcam_killcamentityindex = []; + level.finalkillcam_killcamentitystarttime = []; + level.finalkillcam_sweapon = []; + level.finalkillcam_deathtimeoffset = []; + level.finalkillcam_psoffsettime = []; + level.finalkillcam_timerecorded = []; + level.finalkillcam_timegameended = []; + level.finalkillcam_delay["axis"] = undefined; + level.finalkillcam_victim["axis"] = undefined; + level.finalkillcam_attacker["axis"] = undefined; + level.finalkillcam_attackernum["axis"] = undefined; + level.finalkillcam_killcamentityindex["axis"] = undefined; + level.finalkillcam_killcamentitystarttime["axis"] = undefined; + level.finalkillcam_sweapon["axis"] = undefined; + level.finalkillcam_deathtimeoffset["axis"] = undefined; + level.finalkillcam_psoffsettime["axis"] = undefined; + level.finalkillcam_timerecorded["axis"] = undefined; + level.finalkillcam_timegameended["axis"] = undefined; + level.finalkillcam_delay["allies"] = undefined; + level.finalkillcam_victim["allies"] = undefined; + level.finalkillcam_attacker["allies"] = undefined; + level.finalkillcam_attackernum["allies"] = undefined; + level.finalkillcam_killcamentityindex["allies"] = undefined; + level.finalkillcam_killcamentitystarttime["allies"] = undefined; + level.finalkillcam_sweapon["allies"] = undefined; + level.finalkillcam_deathtimeoffset["allies"] = undefined; + level.finalkillcam_psoffsettime["allies"] = undefined; + level.finalkillcam_timerecorded["allies"] = undefined; + level.finalkillcam_timegameended["allies"] = undefined; + level.finalkillcam_delay["none"] = undefined; + level.finalkillcam_victim["none"] = undefined; + level.finalkillcam_attacker["none"] = undefined; + level.finalkillcam_attackernum["none"] = undefined; + level.finalkillcam_killcamentityindex["none"] = undefined; + level.finalkillcam_killcamentitystarttime["none"] = undefined; + level.finalkillcam_sweapon["none"] = undefined; + level.finalkillcam_deathtimeoffset["none"] = undefined; + level.finalkillcam_psoffsettime["none"] = undefined; + level.finalkillcam_timerecorded["none"] = undefined; + level.finalkillcam_timegameended["none"] = undefined; + level.finalkillcam_winner = undefined; +} + +//Function Number: 19 +func_2CFF(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08) +{ + if(level.teambased && isdefined(param_02.team)) + { + level.finalkillcam_delay[param_02.team] = param_00; + level.finalkillcam_victim[param_02.team] = param_01; + level.finalkillcam_attacker[param_02.team] = param_02; + level.finalkillcam_attackernum[param_02.team] = param_03; + level.finalkillcam_killcamentityindex[param_02.team] = param_04; + level.finalkillcam_killcamentitystarttime[param_02.team] = param_05; + level.finalkillcam_sweapon[param_02.team] = param_06; + level.finalkillcam_deathtimeoffset[param_02.team] = param_07; + level.finalkillcam_psoffsettime[param_02.team] = param_08; + level.finalkillcam_timerecorded[param_02.team] = maps\mp\_utility::func_2D00(); + level.finalkillcam_timegameended[param_02.team] = maps\mp\_utility::func_2D00(); + } + + level.finalkillcam_delay["none"] = param_00; + level.finalkillcam_victim["none"] = param_01; + level.finalkillcam_attacker["none"] = param_02; + level.finalkillcam_attackernum["none"] = param_03; + level.finalkillcam_killcamentityindex["none"] = param_04; + level.finalkillcam_killcamentitystarttime["none"] = param_05; + level.finalkillcam_sweapon["none"] = param_06; + level.finalkillcam_deathtimeoffset["none"] = param_07; + level.finalkillcam_psoffsettime["none"] = param_08; + level.finalkillcam_timerecorded["none"] = maps\mp\_utility::func_2D00(); + level.finalkillcam_timegameended["none"] = maps\mp\_utility::func_2D00(); +} + +//Function Number: 20 +func_2D01() +{ + level.finalkillcam_delay["axis"] = undefined; + level.finalkillcam_victim["axis"] = undefined; + level.finalkillcam_attacker["axis"] = undefined; + level.finalkillcam_attackernum["axis"] = undefined; + level.finalkillcam_killcamentityindex["axis"] = undefined; + level.finalkillcam_killcamentitystarttime["axis"] = undefined; + level.finalkillcam_sweapon["axis"] = undefined; + level.finalkillcam_deathtimeoffset["axis"] = undefined; + level.finalkillcam_psoffsettime["axis"] = undefined; + level.finalkillcam_timerecorded["axis"] = undefined; + level.finalkillcam_timegameended["axis"] = undefined; + level.finalkillcam_delay["allies"] = undefined; + level.finalkillcam_victim["allies"] = undefined; + level.finalkillcam_attacker["allies"] = undefined; + level.finalkillcam_attackernum["allies"] = undefined; + level.finalkillcam_killcamentityindex["allies"] = undefined; + level.finalkillcam_killcamentitystarttime["allies"] = undefined; + level.finalkillcam_sweapon["allies"] = undefined; + level.finalkillcam_deathtimeoffset["allies"] = undefined; + level.finalkillcam_psoffsettime["allies"] = undefined; + level.finalkillcam_timerecorded["allies"] = undefined; + level.finalkillcam_timegameended["allies"] = undefined; + level.finalkillcam_delay["none"] = undefined; + level.finalkillcam_victim["none"] = undefined; + level.finalkillcam_attacker["none"] = undefined; + level.finalkillcam_attackernum["none"] = undefined; + level.finalkillcam_killcamentityindex["none"] = undefined; + level.finalkillcam_killcamentitystarttime["none"] = undefined; + level.finalkillcam_sweapon["none"] = undefined; + level.finalkillcam_deathtimeoffset["none"] = undefined; + level.finalkillcam_psoffsettime["none"] = undefined; + level.finalkillcam_timerecorded["none"] = undefined; + level.finalkillcam_timegameended["none"] = undefined; + level.finalkillcam_winner = undefined; +} + +//Function Number: 21 +func_2D02() +{ + level waittill("round_end_finished"); + level.showingfinalkillcam = 1; + var_00 = "none"; + if(isdefined(level.finalkillcam_winner)) + { + var_00 = level.finalkillcam_winner; + } + + var_01 = level.finalkillcam_delay[var_00]; + var_02 = level.finalkillcam_victim[var_00]; + var_03 = level.finalkillcam_attacker[var_00]; + var_04 = level.finalkillcam_attackernum[var_00]; + var_05 = level.finalkillcam_killcamentityindex[var_00]; + var_06 = level.finalkillcam_killcamentitystarttime[var_00]; + var_07 = level.finalkillcam_sweapon[var_00]; + var_08 = level.finalkillcam_deathtimeoffset[var_00]; + var_09 = level.finalkillcam_psoffsettime[var_00]; + var_0A = level.finalkillcam_timerecorded[var_00]; + var_0B = level.finalkillcam_timegameended[var_00]; + if(!isdefined(var_02) || !isdefined(var_03)) + { + level.showingfinalkillcam = 0; + level notify("final_killcam_done"); + return; + } + + var_0C = 15; + var_0D = var_0B - var_0A; + if(var_0D > var_0C) + { + level.showingfinalkillcam = 0; + level notify("final_killcam_done"); + return; + } + + if(isdefined(var_03)) + { + var_03.finalkill = 1; + if(level.gametype == "conf" && isdefined(level.finalkillcam_attacker[var_03.team]) && level.finalkillcam_attacker[var_03.team] == var_03) + { + var_03 maps\mp\gametypes\_missions::processchallenge("ch_theedge"); + if(isdefined(var_03.modifiers["revenge"])) + { + var_03 maps\mp\gametypes\_missions::processchallenge("ch_moneyshot"); + } + + if(isdefined(var_03.infinalstand) && var_03.infinalstand) + { + var_03 maps\mp\gametypes\_missions::processchallenge("ch_lastresort"); + } + + if(isdefined(var_02) && isdefined(var_02.explosiveinfo) && isdefined(var_02.explosiveinfo["stickKill"]) && var_02.explosiveinfo["stickKill"]) + { + var_03 maps\mp\gametypes\_missions::processchallenge("ch_stickman"); + } + + if(isdefined(var_02.attackerdata[var_03.guid]) && isdefined(var_02.attackerdata[var_03.guid].smeansofdeath) && isdefined(var_02.attackerdata[var_03.guid].weapon) && issubstr(var_02.attackerdata[var_03.guid].smeansofdeath,"MOD_MELEE") && issubstr(var_02.attackerdata[var_03.guid].weapon,"riotshield_mp")) + { + var_03 maps\mp\gametypes\_missions::processchallenge("ch_owned"); + } + + switch(level.finalkillcam_sweapon[var_03.team]) + { + case "artillery_mp": + var_03 maps\mp\gametypes\_missions::processchallenge("ch_finishingtouch"); + break; + + case "stealth_bomb_mp": + var_03 maps\mp\gametypes\_missions::processchallenge("ch_technokiller"); + break; + + case "pavelow_minigun_mp": + var_03 maps\mp\gametypes\_missions::processchallenge("ch_transformer"); + break; + + case "sentry_minigun_mp": + var_03 maps\mp\gametypes\_missions::processchallenge("ch_absentee"); + break; + + case "ac130_25mm_mp": + case "ac130_40mm_mp": + case "ac130_105mm_mp": + var_03 maps\mp\gametypes\_missions::processchallenge("ch_deathfromabove"); + break; + + case "remotemissile_projectile_mp": + var_03 maps\mp\gametypes\_missions::processchallenge("ch_dronekiller"); + break; + + case "cobra_20mm_mp": + var_03 maps\mp\gametypes\_missions::processchallenge("ch_og"); + break; + + default: + break; + } + } + } + + var_0E = gettime() - var_02.deathtime / 1000; + foreach(var_10 in level.players) + { + var_10 closepopupmenu(); + var_10 closeingamemenu(); + if(isdefined(level.nukedetonated)) + { + var_10 visionsetnakedforplayer(level.nukevisionset,0); + } + else + { + var_10 visionsetnakedforplayer("",0); + } + + var_10.killcamentitylookat = var_02 getentitynumber(); + if((var_10 != var_02 || !maps\mp\_utility::func_26EC() || maps\mp\_utility::func_2B08()) && var_10 maps\mp\_utility::func_27AF("specialty_copycat")) + { + var_10 maps\mp\_utility::func_282E("specialty_copycat"); + } + + var_10 thread maps\mp\gametypes\_killcam::killcam(var_04,var_05,var_06,var_07,var_0E + var_08,var_09,0,10000,var_03,var_02); + } + + wait 0.1; + while(func_2D04()) + { + wait 0.05; + } + + level notify("final_killcam_done"); + level.showingfinalkillcam = 0; +} + +//Function Number: 22 +func_2D04() +{ + foreach(var_01 in level.players) + { + if(isdefined(var_01.killcam)) + { + return 1; + } + } + + return 0; +} + +//Function Number: 23 +resetplayervariables() +{ + self.killedplayerscurrent = []; + self.switching_teams = undefined; + self.joining_team = undefined; + self.leaving_team = undefined; + self.pers["cur_kill_streak"] = 0; + self.pers["cur_kill_streak_for_nuke"] = 0; + maps\mp\gametypes\_gameobjects::detachusemodels(); +} + +//Function Number: 24 +getkillcamentity(param_00,param_01,param_02) +{ + if(!isdefined(param_01) || param_01 == param_00) + { + return undefined; + } + + switch(param_02) + { + case "airdrop_trap_explosive_mp": + case "osprey_minigun_mp": + case "littlebird_guard_minigun_mp": + case "apache_minigun_mp": + case "pavelow_minigun_mp": + case "stealth_bomb_mp": + case "artillery_mp": + case "bouncingbetty_mp": + case "bomb_site_mp": + return param_01.killcament; + + case "sam_projectile_mp": + if(isdefined(param_01.samturret) && isdefined(param_01.samturret.killcament)) + { + return param_01.samturret.killcament; + } + break; + + case "ims_projectile_mp": + if(isdefined(param_00) && isdefined(param_00.imskillcament)) + { + return param_00.imskillcament; + } + break; + + case "none": + if(isdefined(param_01.targetname) && param_01.targetname == "care_package") + { + return param_01.killcament; + } + break; + + case "ugv_turret_mp": + case "osprey_player_minigun_mp": + case "remote_turret_mp": + case "remotemissile_projectile_mp": + case "ac130_25mm_mp": + case "ac130_40mm_mp": + case "ac130_105mm_mp": + return undefined; + } + + if(param_01.classname == "script_origin" || param_01.classname == "script_model" || param_01.classname == "script_brushmodel") + { + if(isdefined(param_01.killcament) && !param_00 func_2D09()) + { + return param_01.killcament; + } + else + { + return undefined; + } + } + + return param_01; +} + +//Function Number: 25 +func_2D09() +{ + if(!isdefined(self)) + { + return 0; + } + + if(isdefined(level.ac130player) && self == level.ac130player) + { + return 1; + } + + if(isdefined(level.chopper) && isdefined(level.chopper.gunner) && self == level.chopper.gunner) + { + return 1; + } + + if(isdefined(level.remote_mortar) && isdefined(level.remote_mortar.owner) && self == level.remote_mortar.owner) + { + return 1; + } + + if(isdefined(self.using_remote_turret) && self.using_remote_turret) + { + return 1; + } + + if(isdefined(self.using_remote_tank) && self.using_remote_tank) + { + return 1; + } + + return 0; +} + +//Function Number: 26 +func_2D0D(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = []; + if(!getdvarint("scr_hitloc_debug")) + { + return; + } + + if(!isdefined(param_01.hitlocinited)) + { + for(var_06 = 0;var_06 < 6;var_06++ = var_41[3]) + { + param_01 setclientdvar("ui_hitloc_" + var_06,""); + } + + param_01.hitlocinited = 1; + } + + if(level.splitscreen || !isplayer(param_01)) + { + return; + } + + var_07 = 6; + if(!isdefined(param_01.damageinfo)) + { + param_01.damageinfo = []; + for(var_06 = 0;var_06 < var_07;var_06++ = 7) + { + param_01.damageinfo[var_06] = spawnstruct(); + param_01.damageinfo[var_06].damage = 0; + param_01.damageinfo[var_06].hitloc = ""; + param_01.damageinfo[var_06].bp = 0; + param_01.damageinfo[var_06].jugg = 0; + param_01.damageinfo[var_06].colorindex = 0; + } + + param_01.damageinfocolorindex = 0; + param_01.damageinfovictim = undefined; + } + + for(var_06 = var_07 - 1;var_06 > 0;var_06-- = var_41[2]) + { + param_01.damageinfo[var_06].damage = param_01.damageinfo[var_06 - 1].damage; + param_01.damageinfo[var_06].hitloc = param_01.damageinfo[var_06 - 1].hitloc; + param_01.damageinfo[var_06].bp = param_01.damageinfo[var_06 - 1].bp; + param_01.damageinfo[var_06].jugg = param_01.damageinfo[var_06 - 1].jugg; + param_01.damageinfo[var_06].colorindex = param_01.damageinfo[var_06 - 1].colorindex; + } + + param_01.damageinfo[0].damage = param_03; + param_01.damageinfo[0].hitloc = param_04; + param_01.damageinfo[0].bp = var_05 & level.idflags_penetration; + param_01.damageinfo[0].jugg = param_02 maps\mp\_utility::isjuggernaut(); + if(isdefined(param_01.damageinfovictim) && param_01.damageinfovictim != param_02) + { + param_01.damageinfocolorindex++ = 5; + if(param_01.damageinfocolorindex == var_41.size) + { + param_01.damageinfocolorindex = 0; + } + } + + param_01.damageinfovictim = param_02; + param_01.damageinfo[0].colorindex = param_01.damageinfocolorindex; + for(var_06 = 0;var_06 < var_07;var_06++ = var_41[1]) + { + var_08 = "^" + var_41[param_01.damageinfo[var_06].colorindex]; + if(param_01.damageinfo[var_06].hitloc != "") + { + var_09 = var_08 + param_01.damageinfo[var_06].hitloc; + if(param_01.damageinfo[var_06].bp) + { + var_09 = var_09 + " (BP)"; + } + + if(param_01.damageinfo[var_06].jugg) + { + var_09 = var_09 + " (Jugg)"; + } + + param_01 setclientdvar("ui_hitloc_" + var_06,var_09); + } + + param_01 setclientdvar("ui_hitloc_damage_" + var_06,var_08 + param_01.damageinfo[var_06].damage); + } +} + +//Function Number: 27 +func_2D15() +{ + self endon("death"); + self endon("disconnect"); + self notify("giveRecentShieldXP"); + self endon("giveRecentShieldXP"); + self.recentshieldxp++; + wait 20; + self.recentshieldxp = 0; +} + +//Function Number: 28 +func_2D16(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A) +{ + if(!maps\mp\_utility::isreallyalive(param_02)) + { + return; + } + + if(isdefined(param_01) && param_01.classname == "script_origin" && isdefined(param_01.type) && param_01.type == "soft_landing") + { + return; + } + + if(param_06 == "killstreak_emp_mp") + { + return; + } + + if(param_06 == "bouncingbetty_mp" && !maps\mp\gametypes\_weapons::func_28A2(param_00,param_02)) + { + return; + } + + if(param_06 == "bouncingbetty_mp" && param_02 getstance() == "crouch" || param_02 getstance() == "prone") + { + param_03 = int(param_03 / 2); + } + + if(param_06 == "xm25_mp" && param_05 == "MOD_IMPACT") + { + param_03 = 95; + } + + if(param_06 == "emp_grenade_mp" && param_05 != "MOD_IMPACT") + { + param_02 notify("emp_grenaded",param_01); + } + + if(isdefined(level.hostmigrationtimer)) + { + return; + } + + if(param_05 == "MOD_FALLING") + { + param_02 thread emitfalldamage(param_03); + } + + if(param_05 == "MOD_EXPLOSIVE_BULLET" && param_03 != 1) + { + param_03 = param_03 * getdvarfloat("scr_explBulletMod"); + param_03 = int(param_03); + } + + if(isdefined(param_01) && param_01.classname == "worldspawn") + { + param_01 = undefined; + } + + if(isdefined(param_01) && isdefined(param_01.gunner)) + { + param_01 = param_01.gunner; + } + + var_0B = isdefined(param_01) && !isdefined(param_01.gunner) && param_01.classname == "script_vehicle" || param_01.classname == "misc_turret" || param_01.classname == "script_model"; + var_0C = level.teambased && isdefined(param_01) && param_02 != param_01 && isdefined(param_01.team) && param_02.pers["team"] == param_01.team || isdefined(param_01.teamchangedthisframe); + var_0D = isdefined(param_01) && isdefined(param_00) && isdefined(param_02) && isplayer(param_01) && param_01 == param_00 && param_01 == param_02; + if(var_0D) + { + return; + } + + var_0E = 0; + if(param_04 & level.idflags_stun) + { + var_0E = 0; + param_03 = 0; + } + else if(param_09 == "shield") + { + if(var_0C && level.friendlyfire == 0) + { + return; + } + + if(param_05 == "MOD_PISTOL_BULLET" || param_05 == "MOD_RIFLE_BULLET" || param_05 == "MOD_EXPLOSIVE_BULLET" && !var_0C) + { + if(isplayer(param_01)) + { + param_01.lastattackedshieldplayer = param_02; + param_01.lastattackedshieldtime = gettime(); + } + + param_02 notify("shield_blocked"); + if(maps\mp\_utility::func_2CC3(param_06)) + { + var_0F = 25; + } + else + { + var_0F = maps\mp\perks\_perks::func_297C(param_03,param_02,param_04,param_06,param_07,param_08,param_09,param_0A); + } + + param_02.shielddamage = param_02.shielddamage + var_0F; + if(!maps\mp\_utility::func_2CC3(param_06) || common_scripts\utility::cointoss()) + { + param_02.shieldbullethits++; + } + + if(param_02.shieldbullethits >= level.riotshieldxpbullets) + { + if(self.recentshieldxp > 4) + { + var_10 = int(50 / self.recentshieldxp); + } + else + { + var_10 = 50; + } + + param_02 thread maps\mp\gametypes\_rank::func_2AB3("shield_damage",var_10); + param_02 thread func_2D15(); + param_02 thread maps\mp\gametypes\_missions::genericchallenge("shield_damage",param_02.shielddamage); + param_02 thread maps\mp\gametypes\_missions::genericchallenge("shield_bullet_hits",param_02.shieldbullethits); + param_02.shielddamage = 0; + param_02.shieldbullethits = 0; + } + } + + if(param_04 & level.idflags_shield_explosive_impact) + { + if(!var_0C) + { + param_02 thread maps\mp\gametypes\_missions::genericchallenge("shield_explosive_hits",1); + } + + param_09 = "none"; + if(!param_04 & level.idflags_shield_explosive_impact_huge) + { + param_03 = param_03 * 0; + } + } + else if(param_04 & level.idflags_shield_explosive_splash) + { + if(isdefined(param_00) && isdefined(param_00.stuckenemyentity) && param_00.stuckenemyentity == param_02) + { + param_03 = 151; + } + + param_02 thread maps\mp\gametypes\_missions::genericchallenge("shield_explosive_hits",1); + param_09 = "none"; + } + else + { + return; + } + } + else if(param_05 == "MOD_MELEE" && issubstr(param_06,"riotshield")) + { + if(!var_0C && level.friendlyfire == 0) + { + var_0E = 0; + param_02 stunplayer(0); + } + } + + if(isdefined(param_00) && isdefined(param_00.stuckenemyentity) && param_00.stuckenemyentity == param_02) + { + param_03 = 151; + } + + if(!var_0C) + { + param_03 = maps\mp\perks\_perks::func_297C(param_02,param_01,param_03,param_05,param_06,param_07,param_08,param_09); + } + + if(isdefined(level.modifyplayerdamage)) + { + param_03 = [[ level.modifyplayerdamage ]](param_02,param_01,param_03,param_05,param_06,param_07,param_08,param_09); + } + + if(!param_03) + { + return 0; + } + + param_02.idflags = param_04; + param_02.idflagstime = gettime(); + if(game["state"] == "postgame") + { + return; + } + + if(param_02.sessionteam == "spectator") + { + return; + } + + if(isdefined(param_02.candocombat) && !param_02.candocombat) + { + return; + } + + if(isdefined(param_01) && isplayer(param_01) && isdefined(param_01.candocombat) && !param_01.candocombat) + { + return; + } + + if(var_0B && var_0C) + { + if(param_05 == "MOD_CRUSH") + { + param_02 maps\mp\_utility::_suicide(); + return; + } + + if(!level.friendlyfire) + { + return; + } + } + + if(!isdefined(param_08)) + { + param_04 = param_04 | level.idflags_no_knockback; + } + + var_11 = 0; + if((param_02.health == param_02.maxhealth && !isdefined(param_02.laststand) || !param_02.laststand) || !isdefined(param_02.attackers) && !isdefined(param_02.laststand)) + { + param_02.attackers = []; + param_02.attackerdata = []; + } + + if(isheadshot(param_06,param_09,param_05,param_01)) + { + param_05 = "MOD_HEAD_SHOT"; + } + + if(maps\mp\gametypes\_tweakables::func_270D("game","onlyheadshots")) + { + if(param_05 == "MOD_PISTOL_BULLET" || param_05 == "MOD_RIFLE_BULLET" || param_05 == "MOD_EXPLOSIVE_BULLET") + { + return; + } + else if(param_05 == "MOD_HEAD_SHOT") + { + if(param_02 maps\mp\_utility::isjuggernaut()) + { + param_03 = 75; + } + else + { + param_03 = 150; + } + } + } + + if(param_06 == "none" && isdefined(param_00)) + { + if(isdefined(param_00.destructible_type) && issubstr(param_00.destructible_type,"vehicle_")) + { + param_06 = "destructible_car"; + } + } + + if(gettime() < param_02.spawntime + level.killstreakspawnshield) + { + var_12 = int(max(param_02.health / 4,1)); + if(param_03 >= var_12 && maps\mp\_utility::func_2829(param_06)) + { + param_03 = var_12; + } + } + + if(!param_04 & level.idflags_no_protection) + { + if(!level.teambased && var_0B && isdefined(param_01.owner) && param_01.owner == param_02) + { + if(param_05 == "MOD_CRUSH") + { + param_02 maps\mp\_utility::_suicide(); + } + + return; + } + + if((issubstr(param_05,"MOD_GRENADE") || issubstr(param_05,"MOD_EXPLOSIVE") || issubstr(param_05,"MOD_PROJECTILE")) && isdefined(param_00) && isdefined(param_01)) + { + if(param_02 != param_01 && param_00.classname == "grenade" && param_02.lastspawntime + 3500 > gettime() && isdefined(param_02.lastspawnpoint) && distance(param_00.origin,param_02.lastspawnpoint.origin) < 250) + { + return; + } + + param_02.explosiveinfo = []; + param_02.explosiveinfo["damageTime"] = gettime(); + param_02.explosiveinfo["damageId"] = param_00 getentitynumber(); + param_02.explosiveinfo["returnToSender"] = 0; + param_02.explosiveinfo["counterKill"] = 0; + param_02.explosiveinfo["chainKill"] = 0; + param_02.explosiveinfo["cookedKill"] = 0; + param_02.explosiveinfo["throwbackKill"] = 0; + param_02.explosiveinfo["suicideGrenadeKill"] = 0; + param_02.explosiveinfo["weapon"] = param_06; + var_13 = issubstr(param_06,"frag_"); + if(param_01 != param_02) + { + if((issubstr(param_06,"c4_") || issubstr(param_06,"claymore_")) && isdefined(param_01) && isdefined(param_00.owner)) + { + param_02.explosiveinfo["returnToSender"] = param_00.owner == param_02; + param_02.explosiveinfo["counterKill"] = isdefined(param_00.wasdamaged); + param_02.explosiveinfo["chainKill"] = isdefined(param_00.waschained); + param_02.explosiveinfo["bulletPenetrationKill"] = isdefined(param_00.wasdamagedfrombulletpenetration); + param_02.explosiveinfo["cookedKill"] = 0; + } + + if(isdefined(param_01.lastgrenadesuicidetime) && param_01.lastgrenadesuicidetime >= gettime() - 50 && var_13) + { + param_02.explosiveinfo["suicideGrenadeKill"] = 1; + } + } + + if(var_13) + { + param_02.explosiveinfo["cookedKill"] = isdefined(param_00.iscooked); + param_02.explosiveinfo["throwbackKill"] = isdefined(param_00.threwback); + } + + param_02.explosiveinfo["stickKill"] = isdefined(param_00.isstuck) && param_00.isstuck == "enemy"; + param_02.explosiveinfo["stickFriendlyKill"] = isdefined(param_00.isstuck) && param_00.isstuck == "friendly"; + if(isplayer(param_01) && param_01 != self) + { + maps\mp\gametypes\_gamelogic::func_2D23(param_00,param_01,param_06); + } + } + + if(issubstr(param_05,"MOD_IMPACT") && param_06 == "m320_mp" || issubstr(param_06,"gl") || issubstr(param_06,"gp25") || param_06 == "xm25_mp") + { + if(isplayer(param_01) && param_01 != self) + { + maps\mp\gametypes\_gamelogic::func_2D23(param_00,param_01,param_06); + } + } + + if(isplayer(param_01) && isdefined(param_01.pers["participation"])) + { + param_01.pers["participation"]++; + } + else if(isplayer(param_01)) + { + param_01.pers["participation"] = 1; + } + + var_14 = param_02.health / param_02.maxhealth; + if(var_0C) + { + if(!maps\mp\_utility::matchmakinggame() && isplayer(param_01)) + { + param_01 maps\mp\_utility::incplayerstat("mostff",1); + } + + if(level.friendlyfire == 0 || !isplayer(param_01) && level.friendlyfire != 1) + { + if(param_06 == "artillery_mp" || param_06 == "stealth_bomb_mp") + { + param_02 func_2D49(param_00,param_06,param_05,param_03,param_04,param_01); + } + + return; + } + else if(level.friendlyfire == 1) + { + if(param_03 < 1) + { + param_03 = 1; + } + + if(param_02 maps\mp\_utility::isjuggernaut()) + { + param_03 = maps\mp\perks\_perks::func_297C(param_02,param_01,param_03,param_05,param_06,param_07,param_08,param_09); + } + + param_02.lastdamagewasfromenemy = 0; + param_02 finishplayerdamagewrapper(param_00,param_01,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A,var_0E); + } + else if(level.friendlyfire == 2 && maps\mp\_utility::isreallyalive(param_01)) + { + param_03 = int(param_03 * 0.5); + if(param_03 < 1) + { + param_03 = 1; + } + + param_01.lastdamagewasfromenemy = 0; + param_01.friendlydamage = 1; + param_01 finishplayerdamagewrapper(param_00,param_01,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A,var_0E); + param_01.friendlydamage = undefined; + } + else if(level.friendlyfire == 3 && maps\mp\_utility::isreallyalive(param_01)) + { + param_03 = int(param_03 * 0.5); + if(param_03 < 1) + { + param_03 = 1; + } + + param_02.lastdamagewasfromenemy = 0; + param_01.lastdamagewasfromenemy = 0; + param_02 finishplayerdamagewrapper(param_00,param_01,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A,var_0E); + if(maps\mp\_utility::isreallyalive(param_01)) + { + param_01.friendlydamage = 1; + param_01 finishplayerdamagewrapper(param_00,param_01,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A,var_0E); + param_01.friendlydamage = undefined; + } + } + + var_11 = 1; + } + else + { + if(param_03 < 1) + { + param_03 = 1; + } + + if(isdefined(param_01) && isplayer(param_01)) + { + func_2D2E(param_02,param_01,param_00,param_06,param_03,param_07,param_08,param_09,param_0A,param_05); + } + + if(param_05 == "MOD_EXPLOSIVE" || param_05 == "MOD_GRENADE_SPLASH" && param_03 < param_02.health) + { + param_02 notify("survived_explosion",param_01); + } + + if(isdefined(param_01)) + { + level.lastlegitimateattacker = param_01; + } + + if(isdefined(param_01) && isplayer(param_01) && isdefined(param_06)) + { + param_01 thread maps\mp\gametypes\_weapons::checkhit(param_06,param_02); + } + + if(isdefined(param_01) && isplayer(param_01) && isdefined(param_06) && param_01 != param_02) + { + param_01 thread maps\mp\_events::func_2A96(self,param_03,param_06); + param_02.attackerposition = param_01.origin; + } + else + { + param_02.attackerposition = undefined; + } + + if(issubstr(param_05,"MOD_GRENADE") && isdefined(param_00.iscooked)) + { + param_02.wascooked = gettime(); + } + else + { + param_02.wascooked = undefined; + } + + param_02.lastdamagewasfromenemy = isdefined(param_01) && param_01 != param_02; + if(param_02.lastdamagewasfromenemy) + { + param_01.damagedplayers[param_02.guid] = gettime(); + } + + param_02 finishplayerdamagewrapper(param_00,param_01,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A,var_0E); + if(isdefined(level.ac130player) && isdefined(param_01) && level.ac130player == param_01) + { + level notify("ai_pain",param_02); + } + + param_02 thread maps\mp\gametypes\_missions::playerdamaged(param_00,param_01,param_03,param_05,param_06,param_09); + } + + if(var_0B && isdefined(param_01.gunner)) + { + var_15 = param_01.gunner; + } + else + { + var_15 = param_02; + } + + if(isdefined(var_15) && var_15 != param_02 && param_03 > 0 && !isdefined(param_09) || param_09 != "shield") + { + if(param_04 & level.idflags_stun) + { + var_16 = "stun"; + } + else if(isexplosivedamagemod(param_06) && param_03 maps\mp\_utility::func_27AF("_specialty_blastshield")) + { + var_16 = "hitBodyArmor"; + } + else if(param_03 maps\mp\_utility::func_27AF("specialty_combathigh")) + { + var_16 = "hitEndGame"; + } + else if(isdefined(param_03.haslightarmor)) + { + var_16 = "hitLightArmor"; + } + else if(param_03 maps\mp\_utility::isjuggernaut()) + { + var_16 = "hitJuggernaut"; + } + else if(!shouldweaponfeedback(param_07)) + { + var_16 = "none"; + } + else + { + var_16 = "standard"; + } + + var_15 thread maps\mp\gametypes\_damagefeedback::updatedamagefeedback(var_16); + } + + maps\mp\gametypes\_gamelogic::sethasdonecombat(param_02,1); + } + + if(isdefined(param_01) && param_01 != param_02 && !var_11) + { + level.usestartspawns = 0; + } + + if(param_03 > 0 && isdefined(param_01) && !param_02 maps\mp\_utility::isusingremote()) + { + param_02 thread maps\mp\gametypes\_shellshock::bloodeffect(param_01.origin); + } + + if(param_02.sessionstate != "dead") + { + var_17 = param_02 getentitynumber(); + var_18 = param_02.name; + var_19 = param_02.pers["team"]; + var_1A = param_02.guid; + var_1B = ""; + if(isplayer(param_01)) + { + var_1C = param_01 getentitynumber(); + var_1D = param_01.guid; + var_1E = param_01.name; + var_1B = param_01.pers["team"]; + } + else + { + var_1C = -1; + var_1D = ""; + var_1E = ""; + var_1B = "world"; + } + + logprint("D;" + var_1A + ";" + var_17 + ";" + var_19 + ";" + var_18 + ";" + var_1D + ";" + var_1C + ";" + var_1B + ";" + var_1E + ";" + param_06 + ";" + param_03 + ";" + param_05 + ";" + param_09 + "\n"); + } + + func_2D0D(param_01,param_02,param_03,param_09,param_04); + if(isdefined(param_01) && param_01 != param_02) + { + if(isplayer(param_01)) + { + param_01 maps\mp\_utility::incplayerstat("damagedone",param_03); + } + + param_02 maps\mp\_utility::incplayerstat("damagetaken",param_03); + } +} + +//Function Number: 29 +shouldweaponfeedback(param_00) +{ + switch(param_00) + { + case "stealth_bomb_mp": + case "artillery_mp": + return 0; + } + + return 1; +} + +//Function Number: 30 +func_2D2A(param_00,param_01,param_02,param_03,param_04) +{ + if(param_04 == "MOD_PISTOL_BULLET" || param_04 == "MOD_RIFLE_BULLET" || param_04 == "MOD_HEAD_SHOT") + { + if(distance(param_00.origin,param_01.origin) > 256) + { + return; + } + + var_05 = param_00 getvelocity(); + if(lengthsquared(var_05) < 10) + { + return; + } + + var_06 = maps\mp\_utility::findisfacing(param_00,param_01,25); + if(var_06) + { + param_00 thread func_2D2C(); + } + } +} + +//Function Number: 31 +func_2D2C(param_00) +{ + self endon("disconnect"); + self endon("death"); + level endon("game_ended"); + self.instutter = 1; + self.movespeedscaler = 0.05; + maps\mp\gametypes\_weapons::func_2884(); + wait 0.5; + self.movespeedscaler = 1; + if(maps\mp\_utility::func_27AF("specialty_lightweight")) + { + self.movespeedscaler = maps\mp\_utility::func_80F2(); + } + + maps\mp\gametypes\_weapons::func_2884(); + self.instutter = 0; +} + +//Function Number: 32 +func_2D2E(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09) +{ + if(!isdefined(param_00.attackerdata)) + { + param_00.attackerdata = []; + } + + if(!isdefined(param_00.attackerdata[param_01.guid])) + { + param_00.attackers[param_01.guid] = param_01; + param_00.attackerdata[param_01.guid] = spawnstruct(); + param_00.attackerdata[param_01.guid].damage = 0; + param_00.attackerdata[param_01.guid].attackerent = param_01; + param_00.attackerdata[param_01.guid].firsttimedamaged = gettime(); + } + + if(maps\mp\gametypes\_weapons::isprimaryweapon(param_03) && !maps\mp\gametypes\_weapons::func_287D(param_03)) + { + param_00.attackerdata[param_01.guid].isprimary = 1; + } + + param_00.attackerdata[param_01.guid].damage = param_00.attackerdata[param_01.guid].damage + param_04; + param_00.attackerdata[param_01.guid].weapon = param_03; + param_00.attackerdata[param_01.guid].vpoint = param_05; + param_00.attackerdata[param_01.guid].vdir = param_06; + param_00.attackerdata[param_01.guid].shitloc = param_07; + param_00.attackerdata[param_01.guid].psoffsettime = param_08; + param_00.attackerdata[param_01.guid].smeansofdeath = param_09; + param_00.attackerdata[param_01.guid].attackerent = param_01; + param_00.attackerdata[param_01.guid].lasttimedamaged = gettime(); + if(isdefined(param_02) && !isplayer(param_02) && isdefined(param_02.primaryweapon)) + { + param_00.attackerdata[param_01.guid].sprimaryweapon = param_02.primaryweapon; + return; + } + + if(isdefined(param_01) && isplayer(param_01) && param_01 getcurrentprimaryweapon() != "none") + { + param_00.attackerdata[param_01.guid].sprimaryweapon = param_01 getcurrentprimaryweapon(); + return; + } + + param_00.attackerdata[param_01.guid].sprimaryweapon = undefined; +} + +//Function Number: 33 +func_2D31() +{ + self endon("disconnect"); + self endon("death"); + level endon("game_ended"); + wait 1.75; + self.attackers = []; + self.attackerdata = []; +} + +//Function Number: 34 +func_2D32(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09) +{ + func_2D16(param_00,param_01,self,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09); +} + +//Function Number: 35 +finishplayerdamagewrapper(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A) +{ + if(maps\mp\_utility::isusingremote() && param_02 >= self.health && !param_03 & level.idflags_stun) + { + if(!isdefined(param_07)) + { + param_07 = (0,0,0); + } + + if(!isdefined(param_01) && !isdefined(param_00)) + { + param_01 = self; + param_00 = param_01; + } + + func_2CDB(param_00,param_01,self,param_02,param_04,param_05,param_07,param_08,param_09,0,1); + } + else + { + if(!func_2D50(param_00,param_01,param_02 - param_02 * param_0A,param_03,param_04,param_05,param_06,param_07,param_08,param_09)) + { + return; + } + + if(!isalive(self)) + { + return; + } + + self finishplayerdamage(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A); + } + + if(param_04 == "MOD_EXPLOSIVE_BULLET") + { + self shellshock("damage_mp",getdvarfloat("scr_csmode")); + } + + func_2D49(param_00,param_05,param_04,param_02,param_03,param_01); +} + +//Function Number: 36 +func_2D34(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08) +{ + var_09 = spawnstruct(); + var_09.einflictor = param_00; + var_09.attacker = param_01; + var_09.idamage = param_02; + var_09.attackerposition = param_01.origin; + if(param_01 == self) + { + var_09.smeansofdeath = "MOD_SUICIDE"; + } + else + { + var_09.smeansofdeath = param_03; + } + + var_09.sweapon = param_04; + if(isdefined(param_01) && isplayer(param_01) && param_01 getcurrentprimaryweapon() != "none") + { + var_09.sprimaryweapon = param_01 getcurrentprimaryweapon(); + } + else + { + var_09.sprimaryweapon = undefined; + } + + var_09.vdir = param_05; + var_09.shitloc = param_06; + var_09.laststandstarttime = gettime(); + var_0A = func_2D42(param_04,param_03,param_06); + if(isdefined(self.endgame)) + { + var_0A = 0; + } + + if(level.teambased && isdefined(param_01.team) && param_01.team == self.team) + { + var_0A = 0; + } + + if(!var_0A) + { + self.laststandparams = var_09; + self.uselaststandparams = 1; + maps\mp\_utility::_suicide(); + return; + } + + self.inlaststand = 1; + var_0B = spawnstruct(); + if(maps\mp\_utility::func_27AF("specialty_finalstand")) + { + var_0B.titletext = game["strings"]["final_stand"]; + var_0B.iconname = "specialty_finalstand"; + } + else if(maps\mp\_utility::func_27AF("specialty_c4death")) + { + var_0B.titletext = game["strings"]["c4_death"]; + var_0B.iconname = "specialty_c4death"; + } + else + { + var_0B.titletext = game["strings"]["last_stand"]; + var_0B.iconname = "specialty_pistoldeath"; + } + + var_0B.glowcolor = (1,0,0); + var_0B.sound = "mp_last_stand"; + var_0B.duration = 2; + self.health = 1; + thread maps\mp\gametypes\_hud_message::func_EBE(var_0B); + var_0C = "frag_grenade_mp"; + if(isdefined(level.ac130player) && isdefined(param_01) && level.ac130player == param_01) + { + level notify("ai_crawling",self); + } + + if(maps\mp\_utility::func_27AF("specialty_finalstand")) + { + self.laststandparams = var_09; + self.infinalstand = 1; + var_0D = self getweaponslistexclusives(); + foreach(var_0F in var_0D) + { + self takeweapon(var_0F); + } + + common_scripts\utility::_disableusability(); + thread enablelaststandweapons(); + thread func_2D3B(20,1); + return; + } + + if(maps\mp\_utility::func_27AF("specialty_c4death")) + { + self.previousprimary = self.lastdroppableweapon; + self.laststandparams = var_09; + self takeallweapons(); + self giveweapon("c4death_mp",0,0); + self switchtoweapon("c4death_mp"); + common_scripts\utility::_disableusability(); + self.inc4death = 1; + thread func_2D3B(20,0); + thread detonateonuse(); + thread detonateondeath(); + return; + } + + if(level.diehardmode) + { + self.laststandparams = var_09; + thread enablelaststandweapons(); + thread func_2D3B(20,0); + common_scripts\utility::_disableusability(); + return; + } + + self.laststandparams = var_09; + var_11 = undefined; + var_12 = self getweaponslistprimaries(); + foreach(var_0F in var_12) + { + if(maps\mp\gametypes\_weapons::func_287D(var_0F)) + { + var_11 = var_0F; + } + } + + if(!isdefined(var_11)) + { + var_11 = "iw5_usp45_mp"; + maps\mp\_utility::_giveweapon(var_11); + } + + self givemaxammo(var_11); + self disableweaponswitch(); + common_scripts\utility::_disableusability(); + if(!maps\mp\_utility::func_27AF("specialty_laststandoffhand")) + { + self disableoffhandweapons(); + } + + self switchtoweapon(var_11); + thread func_2D3B(10,0); +} + +//Function Number: 37 +dieaftertime(param_00) +{ + self endon("death"); + self endon("disconnect"); + self endon("joined_team"); + level endon("game_ended"); + wait param_00; + self.uselaststandparams = 1; + maps\mp\_utility::_suicide(); +} + +//Function Number: 38 +detonateonuse() +{ + self endon("death"); + self endon("disconnect"); + self endon("joined_team"); + level endon("game_ended"); + self waittill("detonate"); + self.uselaststandparams = 1; + c4deathdetonate(); +} + +//Function Number: 39 +detonateondeath() +{ + self endon("detonate"); + self endon("disconnect"); + self endon("joined_team"); + level endon("game_ended"); + self waittill("death"); + c4deathdetonate(); +} + +//Function Number: 40 +c4deathdetonate() +{ + self playsound("detpack_explo_default"); + self.c4deatheffect = playfx(level.c4death,self.origin); + radiusdamage(self.origin,400,100,100,self); + if(isalive(self)) + { + maps\mp\_utility::_suicide(); + } +} + +//Function Number: 41 +enablelaststandweapons() +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + maps\mp\_utility::freezecontrolswrapper(1); + wait 0.3; + maps\mp\_utility::freezecontrolswrapper(0); +} + +//Function Number: 42 +func_2D3B(param_00,param_01) +{ + self endon("death"); + self endon("disconnect"); + self endon("revive"); + level endon("game_ended"); + level notify("player_last_stand"); + thread func_2D41(); + self.laststand = 1; + if(!param_01 && !level.diehardmode && !isdefined(self.inc4death) || !self.inc4death) + { + thread func_2D3F(); + maps\mp\_utility::setlowermessage("last_stand",&"PLATFORM_COWARDS_WAY_OUT",undefined,undefined,undefined,undefined,undefined,undefined,1); + thread func_2D40(); + } + + if(level.diehardmode == 1 && level.diehardmode != 2) + { + var_02 = spawn("script_model",self.origin); + var_02 setmodel("tag_origin"); + var_02 setcursorhint("HINT_NOICON"); + var_02 sethintstring(&"PLATFORM_REVIVE"); + var_02 func_2D4A(self); + var_02 endon("death"); + var_03 = newteamhudelem(self.team); + var_03 setshader("waypoint_revive",8,8); + var_03 setwaypoint(1,1); + var_03 settargetent(self); + var_03 thread destroyonreviveentdeath(var_02); + var_03.color = (0.33,0.75,0.24); + maps\mp\_utility::playdeathsound(); + if(param_01) + { + wait param_00; + if(self.infinalstand) + { + thread func_2D3D(param_01,var_02); + } + } + + return; + } + else if(level.diehardmode == 2) + { + thread func_2D40(); + var_02 = spawn("script_model",self.origin); + var_03 setmodel("tag_origin"); + var_03 setcursorhint("HINT_NOICON"); + var_03 sethintstring(&"PLATFORM_REVIVE"); + var_03 func_2D4A(self); + var_03 endon("death"); + var_03 = newteamhudelem(self.team); + var_03 setshader("waypoint_revive",8,8); + var_03 setwaypoint(1,1); + var_03 settargetent(self); + var_03 thread destroyonreviveentdeath(var_02); + var_03.color = (0.33,0.75,0.24); + maps\mp\_utility::playdeathsound(); + if(param_01) + { + wait param_00; + if(self.infinalstand) + { + thread func_2D3D(param_01,var_02); + } + } + + wait param_00 / 3; + var_03.color = (1,0.64,0); + while(var_02.inuse) + { + wait 0.05; + } + + maps\mp\_utility::playdeathsound(); + wait param_00 / 3; + var_03.color = (1,0,0); + while(var_02.inuse) + { + wait 0.05; + } + + maps\mp\_utility::playdeathsound(); + wait param_00 / 3; + while(var_02.inuse) + { + wait 0.05; + } + + wait 0.05; + thread func_2D3D(param_01); + return; + } + + thread func_2D40(); + wait var_02; + thread func_2D3D(var_03); +} + +//Function Number: 43 +func_2D3C(param_00,param_01) +{ + self endon("stop_maxHealthOverlay"); + self endon("revive"); + self endon("death"); + for(;;) + { + self.health = self.health - 1; + self.maxhealth = param_00; + wait 0.05; + self.maxhealth = 50; + self.health = self.health + 1; + wait 0.5; + } +} + +//Function Number: 44 +func_2D3D(param_00,param_01) +{ + if(param_00) + { + self.laststand = undefined; + self.infinalstand = 0; + self notify("revive"); + maps\mp\_utility::clearlowermessage("last_stand"); + maps\mp\gametypes\_playerlogic::func_2B11(); + if(isdefined(param_01)) + { + param_01 delete(); + return; + } + + return; + } + + self.uselaststandparams = 1; + self.beingrevived = 0; + maps\mp\_utility::_suicide(); +} + +//Function Number: 45 +func_2D3F() +{ + self endon("death"); + self endon("disconnect"); + self endon("game_ended"); + self endon("revive"); + for(;;) + { + if(self usebuttonpressed()) + { + var_00 = gettime(); + while(self usebuttonpressed()) + { + wait 0.05; + if(gettime() - var_00 > 700) + { + break; + } + } + + if(gettime() - var_00 > 700) + { + break; + } + } + + wait 0.05; + } + + thread func_2D3D(0); +} + +//Function Number: 46 +func_2D40() +{ + level endon("game_ended"); + self endon("death"); + self endon("disconnect"); + self endon("revive"); + while(!level.gameended) + { + self.health = 2; + wait 0.05; + self.health = 1; + wait 0.5; + } + + self.health = self.maxhealth; +} + +//Function Number: 47 +func_2D41() +{ + self endon("disconnect"); + self endon("revive"); + level endon("game_ended"); + self waittill("death"); + maps\mp\_utility::clearlowermessage("last_stand"); + self.laststand = undefined; +} + +//Function Number: 48 +func_2D42(param_00,param_01,param_02) +{ + if(param_01 == "MOD_TRIGGER_HURT") + { + return 0; + } + + if(param_01 != "MOD_PISTOL_BULLET" && param_01 != "MOD_RIFLE_BULLET" && param_01 != "MOD_FALLING" && param_01 != "MOD_EXPLOSIVE_BULLET") + { + return 0; + } + + if(param_01 == "MOD_IMPACT" && param_00 == "throwingknife_mp") + { + return 0; + } + + if(param_01 == "MOD_IMPACT" && param_00 == "m79_mp" || issubstr(param_00,"gl_")) + { + return 0; + } + + if(isheadshot(param_00,param_02,param_01)) + { + return 0; + } + + if(maps\mp\_utility::isusingremote()) + { + return 0; + } + + return 1; +} + +//Function Number: 49 +func_2D43() +{ + if(!isdefined(self.laststandparams.attacker)) + { + self.laststandparams.attacker = self; + } +} + +//Function Number: 50 +func_2D44(param_00) +{ + switch(param_00) + { + case "neck": + case "helmet": + case "head": + return 60; + + case "gun": + case "left_hand": + case "right_hand": + case "left_arm_lower": + case "right_arm_lower": + case "left_arm_upper": + case "right_arm_upper": + case "torso_upper": + return 48; + + case "torso_lower": + return 40; + + case "left_leg_upper": + case "right_leg_upper": + return 32; + + case "left_leg_lower": + case "right_leg_lower": + return 10; + + case "left_foot": + case "right_foot": + return 5; + } + + return 48; +} + +//Function Number: 51 +delaystartragdoll(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if(isdefined(param_00)) + { + var_06 = param_00 getcorpseanim(); + if(animhasnotetrack(var_06,"ignore_ragdoll")) + { + return; + } + } + + if(isdefined(level.noragdollents) && level.noragdollents.size) + { + foreach(var_08 in level.noragdollents) + { + if(distancesquared(param_00.origin,var_08.origin) < 65536) + { + return; + } + } + } + + wait 0.2; + if(!isdefined(param_00)) + { + return; + } + + if(param_00 isragdoll()) + { + return; + } + + var_06 = param_00 getcorpseanim(); + var_0A = 0.35; + if(animhasnotetrack(var_06,"start_ragdoll")) + { + var_0B = getnotetracktimes(var_06,"start_ragdoll"); + if(isdefined(var_0B)) + { + var_0A = var_0B[0]; + } + } + + var_0C = var_0A * getanimlength(var_06); + wait var_0C; + if(isdefined(param_00)) + { + param_00 startragdoll(1); + } +} + +//Function Number: 52 +getmostkilledby() +{ + var_00 = ""; + var_01 = 0; + var_02 = getarraykeys(self.killedby); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + var_04 = var_02[var_03]; + if(self.killedby[var_04] <= var_01) + { + continue; + } + + var_01 = self.killedby[var_04]; + var_05 = var_04; + } + + return var_00; +} + +//Function Number: 53 +func_2D48() +{ + var_00 = ""; + var_01 = 0; + var_02 = getarraykeys(self.killedplayers); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + var_04 = var_02[var_03]; + if(self.killedplayers[var_04] <= var_01) + { + continue; + } + + var_01 = self.killedplayers[var_04]; + var_00 = var_04; + } + + return var_00; +} + +//Function Number: 54 +func_2D49(param_00,param_01,param_02,param_03,param_04,param_05) +{ + thread maps\mp\gametypes\_weapons::onweapondamage(param_00,param_01,param_02,param_03,param_05); + self playrumbleonentity("damage_heavy"); +} + +//Function Number: 55 +func_2D4A(param_00) +{ + var_01 = param_00.team; + self linkto(param_00,"tag_origin"); + self.owner = param_00; + self.inuse = 0; + self makeusable(); + func_2D4C(var_01); + thread func_2D4D(var_01); + thread revivetriggerthink(var_01); + thread deleteonreviveordeathordisconnect(); +} + +//Function Number: 56 +deleteonreviveordeathordisconnect() +{ + self endon("death"); + self.owner common_scripts\utility::waittill_any("death","disconnect"); + self delete(); +} + +//Function Number: 57 +func_2D4C(param_00) +{ + foreach(var_02 in level.players) + { + if(param_00 == var_02.team && var_02 != self.owner) + { + self enableplayeruse(var_02); + continue; + } + + self disableplayeruse(var_02); + } +} + +//Function Number: 58 +func_2D4D(param_00) +{ + self endon("death"); + for(;;) + { + level waittill("joined_team"); + func_2D4C(param_00); + } +} + +//Function Number: 59 +func_2D4E(param_00) +{ + self endon("death"); + for(;;) + { + level waittill("player_last_stand"); + func_2D4C(param_00); + } +} + +//Function Number: 60 +revivetriggerthink(param_00) +{ + self endon("death"); + level endon("game_ended"); + for(;;) + { + self waittill("trigger",var_01); + self.owner.beingrevived = 1; + if(isdefined(var_01.beingrevived) && var_01.beingrevived) + { + self.owner.beingrevived = 0; + continue; + } + + self makeunusable(); + self.owner maps\mp\_utility::freezecontrolswrapper(1); + var_02 = func_2A04(var_01); + self.owner.beingrevived = 0; + if(!isalive(self.owner)) + { + self delete(); + return; + } + + self.owner maps\mp\_utility::freezecontrolswrapper(0); + if(var_02) + { + var_01 thread maps\mp\gametypes\_hud_message::func_2701("reviver",200); + var_01 thread maps\mp\gametypes\_rank::func_2AB3("reviver",200); + self.owner.laststand = undefined; + self.owner maps\mp\_utility::clearlowermessage("last_stand"); + self.owner.movespeedscaler = 1; + if(self.owner maps\mp\_utility::func_27AF("specialty_lightweight")) + { + self.owner.movespeedscaler = maps\mp\_utility::func_80F2(); + } + + self.owner.maxhealth = 100; + self.owner maps\mp\gametypes\_weapons::func_2884(); + self.owner maps\mp\gametypes\_playerlogic::func_2B11(); + self.owner maps\mp\_utility::giveperk("specialty_pistoldeath",0); + self.owner.beingrevived = 0; + self delete(); + return; + } + + self makeusable(); + func_2D4C(param_00); + } +} + +//Function Number: 61 +func_2A04(param_00) +{ + var_01 = spawn("script_origin",self.origin); + var_01 hide(); + param_00 playerlinkto(var_01); + param_00 playerlinkedoffsetenable(); + param_00 common_scripts\utility::_disableweapon(); + self.curprogress = 0; + self.inuse = 1; + self.userate = 0; + self.usetime = 3000; + param_00 thread personalusebar(self); + var_02 = func_2A08(param_00); + if(isdefined(param_00) && maps\mp\_utility::isreallyalive(param_00)) + { + param_00 unlink(); + param_00 common_scripts\utility::_enableweapon(); + } + + if(isdefined(var_02) && var_02) + { + self.owner thread maps\mp\gametypes\_hud_message::playercardsplashnotify("revived",param_00); + self.owner.inlaststand = 0; + return 1; + } + + self.inuse = 0; + var_01 delete(); + return 0; +} + +//Function Number: 62 +personalusebar(param_00) +{ + var_01 = maps\mp\gametypes\_hud_util::createprimaryprogressbar(); + var_02 = maps\mp\gametypes\_hud_util::createprimaryprogressbartext(); + var_02 settext(&"MPUI_REVIVING"); + var_03 = param_00.owner maps\mp\gametypes\_hud_util::createprimaryprogressbar(); + var_04 = param_00.owner maps\mp\gametypes\_hud_util::createprimaryprogressbartext(); + var_04 settext(&"MPUI_BEING_REVIVED"); + var_05 = -1; + while(maps\mp\_utility::isreallyalive(self) && isdefined(param_00) && param_00.inuse && !level.gameended && isdefined(self)) + { + if(var_05 != param_00.userate) + { + if(param_00.curprogress > param_00.usetime) + { + param_00.curprogress = param_00.usetime; + } + + var_01 maps\mp\gametypes\_hud_util::updatebar(param_00.curprogress / param_00.usetime,1000 / param_00.usetime * param_00.userate); + var_03 maps\mp\gametypes\_hud_util::updatebar(param_00.curprogress / param_00.usetime,1000 / param_00.usetime * param_00.userate); + if(!param_00.userate) + { + var_01 maps\mp\gametypes\_hud_util::hideelem(); + var_02 maps\mp\gametypes\_hud_util::hideelem(); + var_03 maps\mp\gametypes\_hud_util::hideelem(); + var_04 maps\mp\gametypes\_hud_util::hideelem(); + } + else + { + var_01 maps\mp\gametypes\_hud_util::func_26BD(); + var_02 maps\mp\gametypes\_hud_util::func_26BD(); + var_03 maps\mp\gametypes\_hud_util::func_26BD(); + var_04 maps\mp\gametypes\_hud_util::func_26BD(); + } + } + + var_05 = param_00.userate; + wait 0.05; + } + + if(isdefined(var_01)) + { + var_01 maps\mp\gametypes\_hud_util::destroyelem(); + } + + if(isdefined(var_02)) + { + var_02 maps\mp\gametypes\_hud_util::destroyelem(); + } + + if(isdefined(var_03)) + { + var_03 maps\mp\gametypes\_hud_util::destroyelem(); + } + + if(isdefined(var_04)) + { + var_04 maps\mp\gametypes\_hud_util::destroyelem(); + } +} + +//Function Number: 63 +func_2A08(param_00) +{ + level endon("game_ended"); + self.owner endon("death"); + self.owner endon("disconnect"); + while(maps\mp\_utility::isreallyalive(param_00) && param_00 usebuttonpressed() && self.curprogress < self.usetime) + { + self.curprogress = self.curprogress + 50 * self.userate; + self.userate = 1; + if(self.curprogress >= self.usetime) + { + self.inuse = 0; + return maps\mp\_utility::isreallyalive(param_00); + } + + wait 0.05; + } + + return 0; +} + +//Function Number: 64 +func_2D50(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09) +{ + if(isdefined(self.lastdamagewasfromenemy) && self.lastdamagewasfromenemy && param_02 >= self.health && isdefined(self.combathigh) && self.combathigh == "specialty_endgame") + { + maps\mp\_utility::giveperk("specialty_endgame",0); + return 0; + } + + return 1; +} + +//Function Number: 65 +emitfalldamage(param_00) +{ + physicsexplosionsphere(self.origin,64,64,1); + var_01 = []; + for(var_02 = 0;var_02 < 360;var_02 = var_02 + 30) + { + var_03 = cos(var_02) * 16; + var_04 = sin(var_02) * 16; + var_05 = bullettrace(self.origin + (var_03,var_04,4),self.origin + (var_03,var_04,-6),1,self); + if(isdefined(var_05["entity"]) && isdefined(var_05["entity"].targetname) && var_05["entity"].targetname == "destructible_vehicle" || var_05["entity"].targetname == "destructible_toy") + { + var_01[var_01.size] = var_05["entity"]; + } + } + + if(var_01.size) + { + var_06 = spawn("script_origin",self.origin); + var_06 hide(); + var_06.type = "soft_landing"; + var_06.destructibles = var_01; + radiusdamage(self.origin,64,100,100,var_06); + wait 0.1; + var_06 delete(); + } +} + +//Function Number: 66 +drawline(param_00,param_01,param_02) +{ + var_03 = int(param_02 * 20); + for(var_04 = 0;var_04 < var_03;var_04++) + { + wait 0.05; + } +} + +//Function Number: 67 +isflankkill(param_00,param_01) +{ + var_02 = anglestoforward(param_00.angles); + var_02 = (var_02[0],var_02[1],0); + var_02 = vectornormalize(var_02); + var_03 = param_00.origin - param_01.origin; + var_03 = (var_03[0],var_03[1],0); + var_03 = vectornormalize(var_03); + var_04 = vectordot(var_02,var_03); + if(var_04 > 0) + { + return 1; + } + + return 0; +} + +//Function Number: 68 +func_2D54(param_00,param_01,param_02,param_03) +{ + var_04 = param_00.team; + foreach(var_06 in level.players) + { + var_07 = var_06.team; + if(var_07 == "spectator") + { + var_06 iprintln(&"MP_OBITUARY_NEUTRAL",param_01.name,param_00.name); + continue; + } + + if(var_07 == var_04) + { + var_06 iprintln(&"MP_OBITUARY_ENEMY",param_01.name,param_00.name); + continue; + } + + var_06 iprintln(&"MP_OBITUARY_FRIENDLY",param_01.name,param_00.name); + } +} + +//Function Number: 69 +func_2D55(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + var_07 = self getentitynumber(); + var_08 = self.name; + var_09 = self.team; + var_0A = self.guid; + if(isplayer(param_01)) + { + var_0B = param_01.guid; + var_0C = param_01.name; + var_0D = param_01.team; + var_0E = param_01 getentitynumber(); + var_0F = param_01 getxuid() + "(" + var_0C + ")"; + } + else + { + var_0B = ""; + var_0C = ""; + var_0D = "world"; + var_0E = -1; + var_0F = "none"; + } + + logprint("K;" + var_0A + ";" + var_07 + ";" + var_09 + ";" + var_08 + ";" + var_0B + ";" + var_0E + ";" + var_0D + ";" + var_0C + ";" + param_04 + ";" + param_02 + ";" + param_03 + ";" + param_06 + "\n"); +} + +//Function Number: 70 +destroyonreviveentdeath(param_00) +{ + param_00 waittill("death"); + self destroy(); +} + +//Function Number: 71 +func_2D57(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07) +{ + if(isdefined(param_01) && isplayer(param_01) && isalive(param_01)) + { + if(level.matchrules_damagemultiplier) + { + param_02 = param_02 * level.matchrules_damagemultiplier; + } + + if(level.matchrules_vampirism) + { + param_01.health = int(min(float(param_01.maxhealth),float(param_01.health + 20))); + } + } + + return param_02; +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/gametypes/_damagefeedback.gsc b/MW3/Xbox/MP/maps/mp/gametypes/_damagefeedback.gsc new file mode 100644 index 0000000..55166dd --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/gametypes/_damagefeedback.gsc @@ -0,0 +1,118 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_damagefeedback.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 3 + * Decompile Time: 49 ms + * Timestamp: 10/27/2023 2:25:18 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + precacheshader("damage_feedback"); + precacheshader("damage_feedback_j"); + precacheshader("damage_feedback_lightarmor"); + precacheshader("damage_feedback_juggernaut"); + precacheshader("scavenger_pickup"); + level thread onplayerconnect(); +} + +//Function Number: 2 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_00.hud_damagefeedback = newclienthudelem(var_00); + var_00.hud_damagefeedback.horzalign = "center"; + var_00.hud_damagefeedback.vertalign = "middle"; + var_00.hud_damagefeedback.x = -12; + var_00.hud_damagefeedback.y = -12; + var_00.hud_damagefeedback.alpha = 0; + var_00.hud_damagefeedback.archived = 1; + var_00.hud_damagefeedback setshader("damage_feedback",24,48); + } +} + +//Function Number: 3 +updatedamagefeedback(param_00) +{ + if(!isplayer(self)) + { + return; + } + + var_01 = -12; + var_02 = -12; + if(getdvarint("camera_thirdPerson")) + { + var_03 = self getthirdpersoncrosshairoffset() * 240; + } + else + { + var_03 = getdvarfloat("cg_crosshairVerticalOffset") * 240; + } + + if(level.splitscreen || self issplitscreenplayer()) + { + var_03 = var_03 * 0.5; + } + + var_04 = 0; + var_05 = 1; + if(param_00 == "hitBodyArmor") + { + self.hud_damagefeedback setshader("damage_feedback_j",24,48); + self playlocalsound("MP_hit_alert"); + } + else if(param_00 == "hitLightArmor") + { + self.hud_damagefeedback setshader("damage_feedback_lightarmor",24,48); + self playlocalsound("MP_hit_alert"); + } + else if(param_00 == "hitJuggernaut") + { + self.hud_damagefeedback setshader("damage_feedback_juggernaut",24,48); + self playlocalsound("MP_hit_alert"); + } + else if(param_00 == "none") + { + return; + } + else if(param_00 == "scavenger" && !level.hardcoremode) + { + var_01 = -36; + var_02 = 32; + self.hud_damagefeedback setshader("scavenger_pickup",64,32); + var_04 = 2.5; + } + else + { + self.hud_damagefeedback setshader("damage_feedback",24,48); + self playlocalsound("MP_hit_alert"); + } + + self.hud_damagefeedback.alpha = var_05; + if(var_04 != 0) + { + self.hud_damagefeedback fadeovertime(var_04); + } + else + { + self.hud_damagefeedback fadeovertime(1); + } + + self.hud_damagefeedback.alpha = 0; + if(self.hud_damagefeedback.x != var_01) + { + self.hud_damagefeedback.x = var_01; + } + + var_02 = var_02 - int(var_03); + if(self.hud_damagefeedback.y != var_02) + { + self.hud_damagefeedback.y = var_02; + } +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/gametypes/_deathicons.gsc b/MW3/Xbox/MP/maps/mp/gametypes/_deathicons.gsc new file mode 100644 index 0000000..5072318 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/gametypes/_deathicons.gsc @@ -0,0 +1,95 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_deathicons.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 5 + * Decompile Time: 74 ms + * Timestamp: 10/27/2023 2:25:19 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + if(!level.teambased) + { + return; + } + + precacheshader("headicon_dead"); + level thread onplayerconnect(); +} + +//Function Number: 2 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_00.selfdeathicons = []; + } +} + +//Function Number: 3 +func_2BB8() +{ +} + +//Function Number: 4 +adddeathicon(param_00,param_01,param_02,param_03) +{ + if(!level.teambased) + { + return; + } + + var_04 = param_00.origin; + param_01 endon("spawned_player"); + param_01 endon("disconnect"); + wait 0.05; + maps\mp\_utility::waittillslowprocessallowed(); + if(getdvar("ui_hud_showdeathicons") == "0") + { + return; + } + + if(level.hardcoremode) + { + return; + } + + if(isdefined(self.lastdeathicon)) + { + self.lastdeathicon destroy(); + } + + var_05 = newteamhudelem(param_02); + var_05.x = var_04[0]; + var_05.y = var_04[1]; + var_05.z = var_04[2] + 54; + var_05.alpha = 0.61; + var_05.archived = 1; + if(level.splitscreen) + { + var_05 setshader("headicon_dead",14,14); + } + else + { + var_05 setshader("headicon_dead",7,7); + } + + var_05 setwaypoint(0); + self.lastdeathicon = var_05; + var_05 thread func_2BBB(param_03); +} + +//Function Number: 5 +func_2BBB(param_00) +{ + self endon("death"); + wait param_00; + self fadeovertime(1); + self.alpha = 0; + wait 1; + self destroy(); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/gametypes/_dev.gsc b/MW3/Xbox/MP/maps/mp/gametypes/_dev.gsc new file mode 100644 index 0000000..452c7ae --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/gametypes/_dev.gsc @@ -0,0 +1,69 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_dev.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 11 + * Decompile Time: 176 ms + * Timestamp: 10/27/2023 2:29:03 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ +} + +//Function Number: 2 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_00 thread updatereflectionprobe(); + } +} + +//Function Number: 3 +func_344B(param_00,param_01,param_02) +{ +} + +//Function Number: 4 +showspawnpoints() +{ +} + +//Function Number: 5 +print3duntilnotified(param_00,param_01,param_02,param_03,param_04) +{ +} + +//Function Number: 6 +func_344E(param_00,param_01,param_02,param_03) +{ +} + +//Function Number: 7 +func_344F() +{ +} + +//Function Number: 8 +updatereflectionprobe() +{ +} + +//Function Number: 9 +func_3451() +{ +} + +//Function Number: 10 +func_3452() +{ +} + +//Function Number: 11 +func_3453() +{ +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/gametypes/_equipment.gsc b/MW3/Xbox/MP/maps/mp/gametypes/_equipment.gsc new file mode 100644 index 0000000..fc1c384 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/gametypes/_equipment.gsc @@ -0,0 +1,491 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_equipment.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 10 + * Decompile Time: 141 ms + * Timestamp: 10/27/2023 2:25:20 AM +*******************************************************************/ + +//Function Number: 1 +func_2788() +{ + self endon("spawned_player"); + self endon("disconnect"); + self.trophyarray = []; + for(;;) + { + self waittill("grenade_fire",var_00,var_01); + if(var_01 == "trophy" || var_01 == "trophy_mp") + { + if(!isalive(self)) + { + var_00 delete(); + return; + } + + var_00 hide(); + var_00 waittill("missile_stuck"); + var_02 = 40; + if(var_02 * var_02 < distancesquared(var_00.origin,self.origin)) + { + var_03 = bullettrace(self.origin,self.origin - (0,0,var_02),0,self); + if(var_03["fraction"] == 1) + { + var_00 delete(); + self setweaponammostock("trophy_mp",self getweaponammostock("trophy_mp") + 1); + continue; + } + + var_00.origin = var_03["position"]; + } + + var_00 show(); + self.trophyarray = common_scripts\utility::array_removeundefined(self.trophyarray); + if(self.trophyarray.size >= level.maxperplayerexplosives) + { + self.trophyarray[0] detonate(); + } + + var_04 = spawn("script_model",var_00.origin); + var_04 setmodel("mp_trophy_system"); + var_04 thread maps\mp\gametypes\_weapons::createbombsquadmodel("mp_trophy_system_bombsquad","tag_origin",level.otherteam[self.team],self); + var_04.angles = var_00.angles; + self.trophyarray[self.trophyarray.size] = var_04; + var_04.owner = self; + var_04.team = self.team; + var_04.weaponname = var_01; + if(isdefined(self.trophyremainingammo) && self.trophyremainingammo > 0) + { + var_04.ammo = self.trophyremainingammo; + } + else + { + var_04.ammo = 2; + } + + var_04.trigger = spawn("script_origin",var_04.origin); + var_04 thread trophydamage(self); + var_04 thread func_2797(self); + var_04 thread trophydisconnectwaiter(self); + var_04 thread trophyplayerspawnwaiter(self); + var_04 thread trophyuselistener(self); + var_04 thread maps\mp\gametypes\_weapons::func_2790(); + if(level.teambased) + { + var_04 maps\mp\_entityheadicons::setteamheadicon(var_04.team,(0,0,65)); + } + else + { + var_04 maps\mp\_entityheadicons::setplayerheadicon(var_04.owner,(0,0,65)); + } + + wait 0.05; + if(isdefined(var_00)) + { + var_00 delete(); + } + } + } +} + +//Function Number: 2 +trophyuselistener(param_00) +{ + self endon("death"); + level endon("game_ended"); + param_00 endon("disconnect"); + param_00 endon("death"); + self.trigger setcursorhint("HINT_NOICON"); + self.trigger sethintstring(&"MP_PICKUP_TROPHY"); + self.trigger maps\mp\_utility::setselfusable(param_00); + self.trigger thread maps\mp\_utility::notusableforjoiningplayers(param_00); + for(;;) + { + self.trigger waittill("trigger",param_00); + param_00 playlocalsound("scavenger_pack_pickup"); + if(!param_00 maps\mp\_utility::isjuggernaut()) + { + param_00 maps\mp\_utility::giveperk("trophy_mp",0); + param_00.trophyremainingammo = self.ammo; + } + + self.trigger delete(); + self delete(); + self notify("death"); + } +} + +//Function Number: 3 +trophyplayerspawnwaiter(param_00) +{ + self endon("disconnect"); + self endon("death"); + param_00 waittill("spawned"); + thread trophybreak(); +} + +//Function Number: 4 +trophydisconnectwaiter(param_00) +{ + self endon("death"); + param_00 waittill("disconnect"); + thread trophybreak(); +} + +//Function Number: 5 +func_2797(param_00) +{ + param_00 endon("disconnect"); + self endon("death"); + var_01 = self.origin; + for(;;) + { + if(!isdefined(level.grenades) || level.grenades.size < 1 && level.missiles.size < 1 || isdefined(self.disabled)) + { + wait 0.05; + continue; + } + + var_02 = maps\mp\_utility::func_279B(level.grenades,level.missiles); + foreach(var_04 in var_02) + { + wait 0.05; + if(!isdefined(var_04)) + { + continue; + } + + if(var_04 == self) + { + continue; + } + + if(isdefined(var_04.weaponname)) + { + switch(var_04.weaponname) + { + case "claymore_mp": + break; + } + } + + switch(var_04.model) + { + case "mp_trophy_system": + case "weapon_radar": + case "weapon_parabolic_knife": + case "weapon_jammer": + break; + } + + if(!isdefined(var_04.owner)) + { + var_04.owner = getmissileowner(var_04); + } + + if(isdefined(var_04.owner) && level.teambased && var_04.owner.team == param_00.team) + { + continue; + } + + if(isdefined(var_04.owner) && var_04.owner == param_00) + { + continue; + } + + var_05 = distancesquared(var_04.origin,self.origin); + if(var_05 < 147456) + { + if(bullettracepassed(var_04.origin,self.origin,0,self)) + { + playfx(level.sentry_fire,self.origin + (0,0,32),var_04.origin - self.origin,anglestoup(self.angles)); + self playsound("trophy_detect_projectile"); + if(isdefined(var_04.classname) && var_04.classname == "rocket" && isdefined(var_04.type) && var_04.type == "remote" || var_04.type == "remote_mortar") + { + if(isdefined(var_04.type) && var_04.type == "remote") + { + level thread maps\mp\gametypes\_missions::vehiclekilled(var_04.owner,param_00,undefined,param_00,undefined,"MOD_EXPLOSIVE","trophy_mp"); + level thread maps\mp\_utility::teamplayercardsplash("callout_destroyed_predator_missile",param_00); + param_00 thread maps\mp\gametypes\_rank::func_2AB3("kill",100,"trophy_mp","MOD_EXPLOSIVE"); + param_00 notify("destroyed_killstreak","trophy_mp"); + } + + if(isdefined(level.chopper_fx["explode"]["medium"])) + { + playfx(level.chopper_fx["explode"]["medium"],var_04.origin); + } + + if(isdefined(level.barrelexpsound)) + { + var_04 playsound(level.barrelexpsound); + } + } + + param_00 thread projectileexplode(var_04,self); + param_00 maps\mp\gametypes\_missions::processchallenge("ch_noboomforyou"); + self.ammo--; + if(self.ammo <= 0) + { + thread trophybreak(); + } + } + } + } + } +} + +//Function Number: 6 +projectileexplode(param_00,param_01) +{ + self endon("death"); + var_02 = param_00.origin; + var_03 = param_00.model; + var_04 = param_00.angles; + if(var_03 == "weapon_light_marker") + { + playfx(level.empgrenadeexplode,var_02,anglestoforward(var_04),anglestoup(var_04)); + param_01 thread trophybreak(); + param_00 delete(); + return; + } + + param_00 delete(); + param_01 playsound("trophy_fire"); + playfx(level.mine_explode,var_02,anglestoforward(var_04),anglestoup(var_04)); + radiusdamage(var_02,128,105,10,self,"MOD_EXPLOSIVE","trophy_mp"); +} + +//Function Number: 7 +trophydamage(param_00) +{ + self endon("death"); + param_00 endon("death"); + self setcandamage(1); + self.health = 999999; + self.maxhealth = 100; + self.damagetaken = 0; + for(;;) + { + self waittill("damage",var_01,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09,var_0A); + if(!isplayer(var_02)) + { + continue; + } + + if(!maps\mp\gametypes\_weapons::func_27A1(self.owner,var_02)) + { + continue; + } + + if(isdefined(var_0A)) + { + switch(var_0A) + { + case "concussion_grenade_mp": + case "flash_grenade_mp": + case "smoke_grenade_mp": + break; + } + } + + if(!isdefined(self)) + { + return; + } + + if(var_05 == "MOD_MELEE") + { + self.damagetaken = self.damagetaken + self.maxhealth; + } + + if(isdefined(var_09) && var_09 & level.idflags_penetration) + { + self.wasdamagedfrombulletpenetration = 1; + } + + self.wasdamaged = 1; + if(isdefined(var_0A) && var_0A == "emp_grenade_mp") + { + self.damagetaken = self.damagetaken + self.maxhealth; + } + + self.damagetaken = self.damagetaken + var_01; + if(isplayer(var_02)) + { + var_02 maps\mp\gametypes\_damagefeedback::updatedamagefeedback("trophy"); + } + + if(self.damagetaken >= self.maxhealth) + { + if(isdefined(param_00) && var_02 != param_00) + { + var_02 notify("destroyed_explosive"); + } + + thread trophybreak(); + } + } +} + +//Function Number: 8 +trophybreak() +{ + playfxontag(common_scripts\utility::func_539("sentry_explode_mp"),self,"tag_origin"); + playfxontag(common_scripts\utility::func_539("sentry_smoke_mp"),self,"tag_origin"); + self playsound("sentry_explode"); + self notify("death"); + var_00 = self.origin; + self.trigger makeunusable(); + wait 3; + if(isdefined(self.trigger)) + { + self.trigger delete(); + } + + if(isdefined(self)) + { + self delete(); + } +} + +//Function Number: 9 +createkilltriggers() +{ + switch(level.script) + { + case "mp_dome": + createkilltrigger((65.2303,284.217,-307.954),20,64); + createkilltrigger((550.941,1778.53,-108.78),120,64); + break; + + case "mp_hardhat": + createkilltrigger((916.224,-1911.95,332.625),230,64); + createkilltrigger((78.2076,800.055,498.384),120,32); + createkilltrigger((165.7,-208.641,408.544),90,64); + createkilltrigger((647.502,-619.168,318.386),70,64); + createkilltrigger((1353.14,1379.13,500.502),100,64); + break; + + case "mp_paris": + createkilltrigger((442.346,-895.006,128.819),14,32); + createkilltrigger((277.62,-972.828,129.303),32,64); + createkilltrigger((1717.79,549.294,144.871),20,32); + createkilltrigger((130.734,2027.64,95.1856),32,64); + createkilltrigger((-2077.26,602.075,646.415),300,64); + break; + + case "mp_plaza2": + createkilltrigger((-1355.79,-56.389,952.179),50,32); + createkilltrigger((-1354.92,147.436,914.707),40,32); + createkilltrigger((-266.038,976.432,761.29),30,32); + createkilltrigger((189.786,-472.274,738.957),60,40); + createkilltrigger((652.957,-398.834,687.308),60,40); + createkilltrigger((480.709,-1961.1,742.611),110,40); + createkilltrigger((-990.873,-140.348,905.785),45,64); + createkilltrigger((-1215.71,-140.041,905.785),45,64); + createkilltrigger((-485.723,559.951,801.125),50,64); + createkilltrigger((-350.711,559.951,801.125),50,64); + createkilltrigger((369.49,912.654,798.966),200,64); + createkilltrigger((-738.525,1698.84,796.122),100,200); + break; + + case "mp_seatown": + createkilltrigger((-1965.25,-862.286,273.747),100,120); + createkilltrigger((-583.448,582.223,375.4),20,64); + createkilltrigger((-1400.83,1367.31,391.082),200,100); + break; + + case "mp_lambeth": + createkilltrigger((202.69,1447.83,-85.4053),100,64); + createkilltrigger((1487.4,1713.4,-141.171),20,120); + createkilltrigger((1375.03,2067.73,3.36294),20,64); + createkilltrigger((333.856,2020.39,14.2658),32,64); + break; + + case "mp_alpha": + createkilltrigger((-768,1277.92,162.01),8,40); + createkilltrigger((-768,1151.35,162.01),8,40); + createkilltrigger((-768,1024.97,162.01),8,40); + createkilltrigger((-768,896.526,162.01),8,40); + createkilltrigger((-115.306,-423.98,188.944),50,72); + break; + + case "mp_underground": + createkilltrigger((975.678,1727.09,-121.848),20,72); + createkilltrigger((273.891,1933.97,-97.8215),12,72); + createkilltrigger((-44.8348,1878.63,-108.455),30,64); + createkilltrigger((-287.736,3014.45,60.6556),300,200); + break; + + case "mp_bootleg": + createkilltrigger((-1353.36,33.4733,49.2629),60,32); + createkilltrigger((-1360.71,-37.7305,49.2629),60,32); + createkilltrigger((-1553.97,-744.555,113.469),14,64); + createkilltrigger((52.7655,-257.007,-48.4873),40,64); + createkilltrigger((-952.634,1634.85,-68.327),50,64); + createkilltrigger((-894.218,1518.04,-68.327),55,64); + createkilltrigger((44.5985,-1871.56,226.461),200,64); + createkilltrigger((-1476.79,-730.554,87.178),30,64); + createkilltrigger((-1336.19,141.716,61.0992),70,64); + break; + + case "mp_radar": + createkilltrigger((-4213.97,2374.97,1287.35),120,64); + createkilltrigger((-4340.14,3693.87,1299.49),120,64); + createkilltrigger((-4832.37,4363.34,1365.7),120,64); + createkilltrigger((-3837.91,1665.4,1256),68,64); + createkilltrigger((-3841.18,1537.42,1267.05),68,64); + createkilltrigger((-6917.44,4752.67,1498.9),200,64); + createkilltrigger((-5801.42,3119.02,1638.7),300,300); + break; + + case "mp_mogadishu": + createkilltrigger((-87.1578,483.38,152.515),24,64); + createkilltrigger((-140.927,129.438,84.5235),16,64); + createkilltrigger((1514.97,2500.66,171.984),32,32); + createkilltrigger((238.065,249.291,75.904),100,64); + createkilltrigger((564.572,1132.1,65.043),12,64); + createkilltrigger((-32.8942,297.377,88.8334),52,64); + createkilltrigger((219.136,1207.01,121.441),130,64); + createkilltrigger((722.165,1210.59,73.5508),150,64); + createkilltrigger((98.2886,-869.883,138.138),100,64); + break; + + case "mp_carbon": + createkilltrigger((-1933.36,-4337.14,3890.75),14,90); + createkilltrigger((-2676.72,-3496.48,3694.44),14,14); + createkilltrigger((-3377.57,-4567.52,3785.84),40,80); + break; + + case "mp_bravo": + createkilltrigger((878.518,-539.478,1171.53),14,64); + createkilltrigger((-1275.65,984.295,1394.08),200,64); + break; + + case "mp_interchange": + createkilltrigger((-712.089,1183.13,192.016),100,64); + break; + + case "mp_exchange": + createkilltrigger((76.163,-1513.53,265.376),600,64); + createkilltrigger((-1078.77,-1040.27,196.185),250,64); + createkilltrigger((1705.31,1012.04,238.247),40,64); + createkilltrigger((1706.24,881.525,238.247),40,64); + createkilltrigger((918.001,-1387.3,192.754),40,64); + createkilltrigger((1039.45,-1420.39,192.754),40,64); + createkilltrigger((-270.995,-691.246,184.239),40,64); + createkilltrigger((-511.649,-1104.71,169.967),40,64); + createkilltrigger((-841.228,-522.82,147.096),50,64); + createkilltrigger((445.223,1552.75,234.433),40,64); + createkilltrigger((261.291,814.016,204.573),50,64); + break; + } +} + +//Function Number: 10 +createkilltrigger(param_00,param_01,param_02) +{ + thread maps\mp\_utility::killtrigger(param_00,param_01,param_02); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/gametypes/_friendicons.gsc b/MW3/Xbox/MP/maps/mp/gametypes/_friendicons.gsc new file mode 100644 index 0000000..33dd96f --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/gametypes/_friendicons.gsc @@ -0,0 +1,125 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_friendicons.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 7 + * Decompile Time: 102 ms + * Timestamp: 10/27/2023 2:28:56 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level.drawfriend = 0; + game["headicon_allies"] = maps\mp\gametypes\_teams::func_2770("allies"); + game["headicon_axis"] = maps\mp\gametypes\_teams::func_2770("axis"); + precacheheadicon(game["headicon_allies"]); + precacheheadicon(game["headicon_axis"]); + precacheshader("waypoint_revive"); + level thread onplayerconnect(); + for(;;) + { + func_2EDF(); + wait 5; + } +} + +//Function Number: 2 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_00 thread onplayerspawned(); + var_00 thread onplayerkilled(); + } +} + +//Function Number: 3 +onplayerspawned() +{ + self endon("disconnect"); + for(;;) + { + self waittill("spawned_player"); + thread func_2EDE(); + } +} + +//Function Number: 4 +onplayerkilled() +{ + self endon("disconnect"); + for(;;) + { + self waittill("killed_player"); + self.headicon = ""; + } +} + +//Function Number: 5 +func_2EDE() +{ + if(level.drawfriend) + { + if(self.pers["team"] == "allies") + { + self.headicon = game["headicon_allies"]; + self.headiconteam = "allies"; + return; + } + + self.headicon = game["headicon_axis"]; + self.headiconteam = "axis"; + } +} + +//Function Number: 6 +func_2EDF() +{ + var_00 = maps\mp\_utility::getintproperty("scr_drawfriend",level.drawfriend); + if(level.drawfriend != var_00) + { + level.drawfriend = var_00; + func_2EE0(); + } +} + +//Function Number: 7 +func_2EE0() +{ + var_00 = level.players; + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + var_02 = var_00[var_01]; + if(isdefined(var_02.pers["team"]) && var_02.pers["team"] != "spectator" && var_02.sessionstate == "playing") + { + if(level.drawfriend) + { + if(var_02.pers["team"] == "allies") + { + var_02.headicon = game["headicon_allies"]; + var_02.headiconteam = "allies"; + } + else + { + var_02.headicon = game["headicon_axis"]; + var_02.headiconteam = "axis"; + } + + continue; + } + + var_00 = level.players; + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + var_02 = var_00[var_01]; + if(isdefined(var_02.pers["team"]) && var_02.pers["team"] != "spectator" && var_02.sessionstate == "playing") + { + var_02.headicon = ""; + } + } + } + } +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/gametypes/_gamelogic.gsc b/MW3/Xbox/MP/maps/mp/gametypes/_gamelogic.gsc new file mode 100644 index 0000000..b5c0d99 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/gametypes/_gamelogic.gsc @@ -0,0 +1,3078 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_gamelogic.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 81 + * Decompile Time: 1238 ms + * Timestamp: 10/27/2023 2:25:23 AM +*******************************************************************/ + +//Function Number: 1 +onforfeit(param_00) +{ + if(isdefined(level.forfeitinprogress)) + { + return; + } + + level endon("abort_forfeit"); + level thread func_2EE8(); + level.forfeitinprogress = 1; + if(!level.teambased && level.players.size > 1) + { + wait 10; + } + + level.forfeit_aborted = 0; + var_01 = 20; + matchforfeittimer(var_01); + var_02 = &""; + if(!isdefined(param_00)) + { + level.finalkillcam_winner = "none"; + var_02 = game["strings"]["players_forfeited"]; + var_03 = level.players[0]; + } + else if(var_01 == "allies") + { + level.finalkillcam_winner = "axis"; + var_03 = game["strings"]["allies_forfeited"]; + var_03 = "axis"; + } + else if(var_01 == "axis") + { + level.finalkillcam_winner = "allies"; + var_03 = game["strings"]["axis_forfeited"]; + var_03 = "allies"; + } + else + { + level.finalkillcam_winner = "none"; + var_03 = "tie"; + } + + level.forcedend = 1; + if(isplayer(var_03)) + { + logstring("forfeit, win: " + var_03 getxuid() + "(" + var_03.name + ")"); + } + else + { + logstring("forfeit, win: " + var_03 + ", allies: " + game["teamScores"]["allies"] + ", opfor: " + game["teamScores"]["axis"]); + } + + thread endgame(var_03,var_02); +} + +//Function Number: 2 +func_2EE8() +{ + level endon("game_ended"); + level waittill("abort_forfeit"); + level.forfeit_aborted = 1; + if(isdefined(level.matchforfeittimer)) + { + level.matchforfeittimer maps\mp\gametypes\_hud_util::destroyelem(); + } + + if(isdefined(level.matchforfeittext)) + { + level.matchforfeittext maps\mp\gametypes\_hud_util::destroyelem(); + } +} + +//Function Number: 3 +matchforfeittimer_internal(param_00,param_01) +{ + waittillframeend; + level endon("match_forfeit_timer_beginning"); + while(param_00 > 0 && !level.gameended && !level.forfeit_aborted && !level.ingraceperiod) + { + param_01 thread maps\mp\gametypes\_hud::fontpulse(level); + wait param_01.inframes * 0.05; + param_01 setvalue(param_00); + param_00--; + wait 1 - param_01.inframes * 0.05; + } +} + +//Function Number: 4 +matchforfeittimer(param_00) +{ + level notify("match_forfeit_timer_beginning"); + var_01 = maps\mp\gametypes\_hud_util::createserverfontstring("objective",1.5); + var_01 maps\mp\gametypes\_hud_util::setpoint("CENTER","CENTER",0,-40); + var_01.sort = 1001; + var_01 settext(game["strings"]["opponent_forfeiting_in"]); + var_01.foreground = 0; + var_01.hidewheninmenu = 1; + var_02 = maps\mp\gametypes\_hud_util::createserverfontstring("hudbig",1); + var_02 maps\mp\gametypes\_hud_util::setpoint("CENTER","CENTER",0,0); + var_02.sort = 1001; + var_02.color = (1,1,0); + var_02.foreground = 0; + var_02.hidewheninmenu = 1; + var_02 maps\mp\gametypes\_hud::fontpulseinit(); + var_03 = int(param_00); + level.matchforfeittimer = var_02; + level.matchforfeittext = var_01; + matchforfeittimer_internal(var_03,var_02); + var_02 maps\mp\gametypes\_hud_util::destroyelem(); + var_01 maps\mp\gametypes\_hud_util::destroyelem(); +} + +//Function Number: 5 +default_ondeadevent(param_00) +{ + level.finalkillcam_winner = "none"; + if(param_00 == "allies") + { + iprintln(game["strings"]["allies_eliminated"]); + logstring("team eliminated, win: opfor, allies: " + game["teamScores"]["allies"] + ", opfor: " + game["teamScores"]["axis"]); + level.finalkillcam_winner = "axis"; + thread endgame("axis",game["strings"]["allies_eliminated"]); + return; + } + + if(param_00 == "axis") + { + iprintln(game["strings"]["axis_eliminated"]); + logstring("team eliminated, win: allies, allies: " + game["teamScores"]["allies"] + ", opfor: " + game["teamScores"]["axis"]); + level.finalkillcam_winner = "allies"; + thread endgame("allies",game["strings"]["axis_eliminated"]); + return; + } + + logstring("tie, allies: " + game["teamScores"]["allies"] + ", opfor: " + game["teamScores"]["axis"]); + level.finalkillcam_winner = "none"; + if(level.teambased) + { + thread endgame("tie",game["strings"]["tie"]); + return; + } + + thread endgame(undefined,game["strings"]["tie"]); +} + +//Function Number: 6 +func_2EED(param_00) +{ + if(level.teambased) + { + var_01 = maps\mp\_utility::getlastlivingplayer(param_00); + var_01 thread func_2F52(); + } + else + { + var_01 = maps\mp\_utility::getlastlivingplayer(); + logstring("last one alive, win: " + var_01.name); + level.finalkillcam_winner = "none"; + thread endgame(var_01,&"MP_ENEMIES_ELIMINATED"); + } + + return 1; +} + +//Function Number: 7 +func_2EEF() +{ + var_00 = undefined; + level.finalkillcam_winner = "none"; + if(level.teambased) + { + if(game["teamScores"]["allies"] == game["teamScores"]["axis"]) + { + var_00 = "tie"; + } + else if(game["teamScores"]["axis"] > game["teamScores"]["allies"]) + { + level.finalkillcam_winner = "axis"; + var_00 = "axis"; + } + else + { + level.finalkillcam_winner = "allies"; + var_00 = "allies"; + } + + logstring("time limit, win: " + var_00 + ", allies: " + game["teamScores"]["allies"] + ", opfor: " + game["teamScores"]["axis"]); + } + else + { + var_00 = maps\mp\gametypes\_gamescore::func_26D0(); + if(isdefined(var_00)) + { + logstring("time limit, win: " + var_00.name); + } + else + { + logstring("time limit, tie"); + } + } + + thread endgame(var_00,game["strings"]["time_limit_reached"]); +} + +//Function Number: 8 +func_2EF0() +{ + var_00 = undefined; + level.finalkillcam_winner = "none"; + thread endgame("halftime",game["strings"]["time_limit_reached"]); +} + +//Function Number: 9 +forceend() +{ + if(level.hostforcedend || level.forcedend) + { + return; + } + + var_00 = undefined; + level.finalkillcam_winner = "none"; + if(level.teambased) + { + if(game["teamScores"]["allies"] == game["teamScores"]["axis"]) + { + var_00 = "tie"; + } + else if(game["teamScores"]["axis"] > game["teamScores"]["allies"]) + { + level.finalkillcam_winner = "axis"; + var_00 = "axis"; + } + else + { + level.finalkillcam_winner = "allies"; + var_00 = "allies"; + } + + logstring("host ended game, win: " + var_00 + ", allies: " + game["teamScores"]["allies"] + ", opfor: " + game["teamScores"]["axis"]); + } + else + { + var_00 = maps\mp\gametypes\_gamescore::func_26D0(); + if(isdefined(var_00)) + { + logstring("host ended game, win: " + var_00.name); + } + else + { + logstring("host ended game, tie"); + } + } + + level.forcedend = 1; + level.hostforcedend = 1; + if(level.splitscreen) + { + var_01 = &"MP_ENDED_GAME"; + } + else + { + var_01 = &"MP_HOST_ENDED_GAME"; + } + + thread endgame(var_00,var_01); +} + +//Function Number: 10 +func_26E9() +{ + var_00 = game["strings"]["score_limit_reached"]; + var_01 = undefined; + level.finalkillcam_winner = "none"; + if(level.teambased) + { + if(game["teamScores"]["allies"] == game["teamScores"]["axis"]) + { + var_01 = "tie"; + } + else if(game["teamScores"]["axis"] > game["teamScores"]["allies"]) + { + var_01 = "axis"; + level.finalkillcam_winner = "axis"; + } + else + { + var_01 = "allies"; + level.finalkillcam_winner = "allies"; + } + + logstring("scorelimit, win: " + var_01 + ", allies: " + game["teamScores"]["allies"] + ", opfor: " + game["teamScores"]["axis"]); + } + else + { + var_01 = maps\mp\gametypes\_gamescore::func_26D0(); + if(isdefined(var_01)) + { + logstring("scorelimit, win: " + var_01.name); + } + else + { + logstring("scorelimit, tie"); + } + } + + thread endgame(var_01,var_00); + return 1; +} + +//Function Number: 11 +func_2734() +{ + if(maps\mp\_utility::matchmakinggame() && !level.ingraceperiod) + { + if(level.teambased) + { + if(level.teamcount["allies"] < 1 && level.teamcount["axis"] > 0 && game["state"] == "playing") + { + thread onforfeit("allies"); + return; + } + + if(level.teamcount["axis"] < 1 && level.teamcount["allies"] > 0 && game["state"] == "playing") + { + thread onforfeit("axis"); + return; + } + + if(level.teamcount["axis"] > 0 && level.teamcount["allies"] > 0) + { + level.forfeitinprogress = undefined; + level notify("abort_forfeit"); + } + } + else + { + if(level.teamcount["allies"] + level.teamcount["axis"] == 1 && level.maxplayercount > 1) + { + thread onforfeit(); + return; + } + + if(level.teamcount["axis"] + level.teamcount["allies"] > 1) + { + level.forfeitinprogress = undefined; + level notify("abort_forfeit"); + } + } + } + + if(!maps\mp\_utility::getgametypenumlives() && !isdefined(level.disablespawning) || !level.disablespawning) + { + return; + } + + if(!maps\mp\_utility::gamehasstarted()) + { + return; + } + + if(level.ingraceperiod) + { + return; + } + + if(level.teambased) + { + var_00["allies"] = level.livescount["allies"]; + if(isdefined(level.disablespawning) && level.disablespawning) + { + } + + if(!level.alivecount["allies"] && !level.alivecount["axis"] && !var_41["allies"] && !var_41["axis"]) + { + return [[ level.ondeadevent ]]("all"); + } + + if(!level.alivecount["allies"] && !var_41["allies"]) + { + return [[ level.ondeadevent ]]("allies"); + } + + if(!level.alivecount["axis"] && !var_41["axis"]) + { + return [[ level.ondeadevent ]]("axis"); + } + + if(level.alivecount["allies"] == 1 && !var_41["allies"]) + { + if(!isdefined(level.onelefttime["allies"])) + { + level.onelefttime["allies"] = gettime(); + return [[ level.ononeleftevent ]]("allies"); + } + } + + if(level.alivecount["axis"] == 1 && !var_41["axis"]) + { + if(!isdefined(level.onelefttime["axis"])) + { + level.onelefttime["axis"] = gettime(); + return [[ level.ononeleftevent ]]("axis"); + } + + return; + } + + return; + } + + if(!level.alivecount["allies"] && !level.alivecount["axis"] && !level.livescount["allies"] && !level.livescount["axis"]) + { + return [[ level.ondeadevent ]]("all"); + } + + var_01 = maps\mp\_utility::getpotentiallivingplayers(); + if(var_01.size == 1) + { + return [[ level.ononeleftevent ]]("all"); + } +} + +//Function Number: 12 +waittillfinalkillcamdone() +{ + if(!isdefined(level.finalkillcam_winner)) + { + return 0; + } + + level waittill("final_killcam_done"); + return 1; +} + +//Function Number: 13 +func_2EF7(param_00) +{ + setgameendtime(gettime() + int(param_00 * 1000)); + var_01 = spawn("script_origin",(0,0,0)); + var_01 hide(); + if(param_00 >= 10) + { + wait param_00 - 10; + } + + for(;;) + { + var_01 playsound("ui_mp_timer_countdown"); + wait 1; + } +} + +//Function Number: 14 +func_2EF8(param_00) +{ + var_01 = gettime() + param_00 * 1000 - 200; + if(level.teambased) + { + while((!level.hasspawned["axis"] || !level.hasspawned["allies"]) && gettime() < var_01) + { + wait 0.05; + } + + return; + } + + while(level.maxplayercount < 2 && gettime() < var_01) + { + wait 0.05; + } +} + +//Function Number: 15 +prematchperiod() +{ + level endon("game_ended"); + if(level.prematchperiod > 0) + { + if(level.console) + { + thread matchstarttimer("match_starting_in",level.prematchperiod); + wait level.prematchperiod; + } + else + { + matchstarttimerpc(); + } + } + else + { + func_2F12(); + } + + for(var_00 = 0;var_00 < level.players.size;var_00++) + { + level.players[var_00] maps\mp\_utility::freezecontrolswrapper(0); + level.players[var_00] enableweapons(); + var_01 = maps\mp\_utility::func_2B3B(level.players[var_00].pers["team"]); + if(!isdefined(var_01) || !level.players[var_00].hasspawned) + { + continue; + } + + level.players[var_00] setclientdvar("scr_objectiveText",var_01); + level.players[var_00] thread maps\mp\gametypes\_hud_message::hintmessage(var_01); + } + + if(game["state"] != "playing") + { + } +} + +//Function Number: 16 +graceperiod() +{ + level endon("game_ended"); + while(level.ingraceperiod > 0) + { + wait 1; + level.ingraceperiod--; + } + + level notify("grace_period_ending"); + wait 0.05; + maps\mp\_utility::func_2EFB("graceperiod_done"); + level.ingraceperiod = 0; + if(game["state"] != "playing") + { + return; + } + + if(maps\mp\_utility::getgametypenumlives()) + { + var_00 = level.players; + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + var_02 = var_00[var_01]; + if(!var_02.hasspawned && var_02.sessionteam != "spectator" && !isalive(var_02)) + { + var_02.statusicon = "hud_status_dead"; + } + } + } + + level thread func_2734(); +} + +//Function Number: 17 +sethasdonecombat(param_00,param_01) +{ + param_00.hasdonecombat = param_01; + var_02 = !isdefined(param_00.hasdoneanycombat) || !param_00.hasdoneanycombat; + if(var_02 && param_01) + { + param_00.hasdoneanycombat = 1; + updatelossstats(param_00); + } +} + +//Function Number: 18 +func_2EFC(param_00) +{ + if(!param_00 maps\mp\_utility::rankingenabled()) + { + return; + } + + if(!isdefined(param_00.hasdoneanycombat) || !param_00.hasdoneanycombat) + { + return; + } + + param_00 maps\mp\gametypes\_persistence::statadd("losses",-1); + param_00 maps\mp\gametypes\_persistence::statadd("wins",1); + param_00 maps\mp\_utility::updatepersratio("winLossRatio","wins","losses"); + param_00 maps\mp\gametypes\_persistence::statadd("currentWinStreak",1); + var_01 = param_00 maps\mp\gametypes\_persistence::func_2B58("currentWinStreak"); + if(var_01 > param_00 maps\mp\gametypes\_persistence::func_2B58("winStreak")) + { + param_00 maps\mp\gametypes\_persistence::func_2CD1("winStreak",var_01); + } + + param_00 maps\mp\gametypes\_persistence::func_26D8("round","win",1); + param_00 maps\mp\gametypes\_persistence::func_26D8("round","loss",0); +} + +//Function Number: 19 +updatelossstats(param_00) +{ + if(!param_00 maps\mp\_utility::rankingenabled()) + { + return; + } + + if(!isdefined(param_00.hasdoneanycombat) || !param_00.hasdoneanycombat) + { + return; + } + + param_00 maps\mp\gametypes\_persistence::statadd("losses",1); + param_00 maps\mp\_utility::updatepersratio("winLossRatio","wins","losses"); + param_00 maps\mp\gametypes\_persistence::func_26D8("round","loss",1); +} + +//Function Number: 20 +func_2EFD(param_00) +{ + if(!param_00 maps\mp\_utility::rankingenabled()) + { + return; + } + + if(!isdefined(param_00.hasdoneanycombat) || !param_00.hasdoneanycombat) + { + return; + } + + param_00 maps\mp\gametypes\_persistence::statadd("losses",-1); + param_00 maps\mp\gametypes\_persistence::statadd("ties",1); + param_00 maps\mp\_utility::updatepersratio("winLossRatio","wins","losses"); + param_00 maps\mp\gametypes\_persistence::func_2CD1("currentWinStreak",0); +} + +//Function Number: 21 +updatewinlossstats(param_00) +{ + if(maps\mp\_utility::func_2EFF()) + { + return; + } + + if(!maps\mp\_utility::waslastround()) + { + return; + } + + var_01 = level.players; + if(!isdefined(param_00) || isdefined(param_00) && isstring(param_00) && param_00 == "tie") + { + foreach(var_03 in level.players) + { + if(isdefined(var_03.connectedpostgame)) + { + continue; + } + + if(level.hostforcedend && var_03 ishost()) + { + var_03 maps\mp\gametypes\_persistence::func_2CD1("currentWinStreak",0); + continue; + } + + func_2EFD(var_03); + } + + return; + } + + if(isplayer(param_00)) + { + if(level.hostforcedend && param_00 ishost()) + { + param_00 maps\mp\gametypes\_persistence::func_2CD1("currentWinStreak",0); + return; + } + + func_2EFC(param_00); + return; + } + + if(isstring(param_00)) + { + foreach(var_03 in level.players) + { + if(isdefined(var_03.connectedpostgame)) + { + continue; + } + + if(level.hostforcedend && var_03 ishost()) + { + var_03 maps\mp\gametypes\_persistence::func_2CD1("currentWinStreak",0); + continue; + } + + if(param_00 == "tie") + { + func_2EFD(var_03); + continue; + } + + if(var_03.pers["team"] == param_00) + { + func_2EFC(var_03); + continue; + } + + var_03 maps\mp\gametypes\_persistence::func_2CD1("currentWinStreak",0); + } + + return; + } +} + +//Function Number: 22 +freezeplayerforroundend(param_00) +{ + self endon("disconnect"); + maps\mp\_utility::func_2B45(); + if(!isdefined(param_00)) + { + param_00 = 0.05; + } + + self closepopupmenu(); + self closeingamemenu(); + wait param_00; + maps\mp\_utility::freezecontrolswrapper(1); +} + +//Function Number: 23 +updatematchbonusscores(param_00) +{ + if(!game["timePassed"]) + { + return; + } + + if(!maps\mp\_utility::matchmakinggame()) + { + return; + } + + if(!maps\mp\_utility::gettimelimit() || level.forcedend) + { + var_01 = maps\mp\_utility::gettimepassed() / 1000; + var_01 = min(var_01,1200); + } + else + { + var_01 = maps\mp\_utility::gettimelimit() * 60; + } + + if(level.teambased) + { + if(param_00 == "allies") + { + var_02 = "allies"; + var_03 = "axis"; + } + else if(var_02 == "axis") + { + var_02 = "axis"; + var_03 = "allies"; + } + else + { + var_02 = "tie"; + var_03 = "tie"; + } + + if(var_02 != "tie") + { + var_04 = maps\mp\gametypes\_rank::getscoreinfovalue("win"); + var_05 = maps\mp\gametypes\_rank::getscoreinfovalue("loss"); + setwinningteam(var_02); + } + else + { + var_04 = maps\mp\gametypes\_rank::getscoreinfovalue("tie"); + var_05 = maps\mp\gametypes\_rank::getscoreinfovalue("tie"); + } + + foreach(var_07 in level.players) + { + if(isdefined(var_07.connectedpostgame)) + { + continue; + } + + if(!var_07 maps\mp\_utility::rankingenabled()) + { + continue; + } + + if(var_07.timeplayed["total"] < 1 || var_07.pers["participation"] < 1) + { + var_07 thread maps\mp\gametypes\_rank::func_2F02(); + continue; + } + + if(level.hostforcedend && var_07 ishost()) + { + continue; + } + + if(!isdefined(var_07.hasdoneanycombat) || !var_07.hasdoneanycombat) + { + continue; + } + + var_08 = var_07 maps\mp\gametypes\_rank::getspm(); + if(var_02 == "tie") + { + var_09 = int(var_04 * var_01 / 60 * var_08 * var_07.timeplayed["total"] / var_01); + var_07 thread givematchbonus("tie",var_09); + var_07.matchbonus = var_09; + continue; + } + + if(isdefined(var_07.pers["team"]) && var_07.pers["team"] == var_02) + { + var_09 = int(var_04 * var_01 / 60 * var_08 * var_07.timeplayed["total"] / var_01); + var_07 thread givematchbonus("win",var_09); + var_07.matchbonus = var_09; + continue; + } + + if(isdefined(var_07.pers["team"]) && var_07.pers["team"] == var_03) + { + var_09 = int(var_05 * var_01 / 60 * var_08 * var_07.timeplayed["total"] / var_01); + var_07 thread givematchbonus("loss",var_09); + var_07.matchbonus = var_09; + } + } + + return; + } + + if(isdefined(var_07)) + { + var_04 = maps\mp\gametypes\_rank::getscoreinfovalue("win"); + var_05 = maps\mp\gametypes\_rank::getscoreinfovalue("loss"); + } + else + { + var_04 = maps\mp\gametypes\_rank::getscoreinfovalue("tie"); + var_05 = maps\mp\gametypes\_rank::getscoreinfovalue("tie"); + } + + foreach(var_07 in level.players) + { + if(isdefined(var_07.connectedpostgame)) + { + continue; + } + + if(var_07.timeplayed["total"] < 1 || var_07.pers["participation"] < 1) + { + var_07 thread maps\mp\gametypes\_rank::func_2F02(); + continue; + } + + if(!isdefined(var_07.hasdoneanycombat) || !var_07.hasdoneanycombat) + { + continue; + } + + var_08 = var_07 maps\mp\gametypes\_rank::getspm(); + var_0C = 0; + for(var_0D = 0;var_0D < min(level.placement["all"].size,3);var_0D++) + { + if(level.placement["all"][var_0D] != var_07) + { + continue; + } + + var_0C = 1; + } + + if(var_0C) + { + var_09 = int(var_04 * var_01 / 60 * var_08 * var_07.timeplayed["total"] / var_01); + var_07 thread givematchbonus("win",var_09); + var_07.matchbonus = var_09; + continue; + } + + var_09 = int(var_05 * var_01 / 60 * var_08 * var_07.timeplayed["total"] / var_01); + var_07 thread givematchbonus("loss",var_09); + var_07.matchbonus = var_09; + } +} + +//Function Number: 24 +givematchbonus(param_00,param_01) +{ + self endon("disconnect"); + level waittill("give_match_bonus"); + maps\mp\gametypes\_rank::func_2AB3(param_00,param_01); + maps\mp\gametypes\_rank::func_2F02(); +} + +//Function Number: 25 +setxenonranks(param_00) +{ + var_01 = level.players; + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + var_03 = var_01[var_02]; + if(!isdefined(var_03.score) || !isdefined(var_03.pers["team"])) + { + continue; + } + } + + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + var_03 = var_01[var_02]; + if(!isdefined(var_03.score) || !isdefined(var_03.pers["team"])) + { + continue; + } + + setplayerteamrank(var_03,var_03.clientid,var_03.score - 5 * var_03.deaths); + } +} + +//Function Number: 26 +func_2F07(param_00) +{ + if(isdefined(level.timelimitoverride) && level.timelimitoverride) + { + return; + } + + if(game["state"] != "playing") + { + setgameendtime(0); + return; + } + + if(maps\mp\_utility::gettimelimit() <= 0) + { + if(isdefined(level.starttime)) + { + setgameendtime(level.starttime); + } + else + { + setgameendtime(0); + } + + return; + } + + if(!maps\mp\_utility::gameflag("prematch_done")) + { + setgameendtime(0); + return; + } + + if(!isdefined(level.starttime)) + { + return; + } + + var_01 = func_2F0C(); + setgameendtime(gettime() + int(var_01)); + if(var_01 > 0) + { + if(maps\mp\_utility::gethalftime() && func_2F0B(param_00)) + { + [[ level.onhalftime ]](); + } + + return; + } + + [[ level.ontimelimit ]](); +} + +//Function Number: 27 +func_2F0B(param_00) +{ + if(!level.teambased) + { + return 0; + } + + if(maps\mp\_utility::gettimelimit()) + { + var_01 = maps\mp\_utility::gettimelimit() * 60 * 1000 * 0.5; + if(maps\mp\_utility::gettimepassed() >= var_01 && param_00 < var_01 && param_00 > 0) + { + game["roundMillisecondsAlreadyPassed"] = maps\mp\_utility::gettimepassed(); + return 1; + } + } + + return 0; +} + +//Function Number: 28 +func_2F0C() +{ + return maps\mp\_utility::gettimelimit() * 60 * 1000 - maps\mp\_utility::gettimepassed(); +} + +//Function Number: 29 +func_26EA(param_00) +{ + if(maps\mp\_utility::func_18D0("scorelimit") <= 0 || maps\mp\_utility::isobjectivebased()) + { + return; + } + + if(isdefined(level.scorelimitoverride) && level.scorelimitoverride) + { + return; + } + + if(level.gametype == "conf" || level.gametype == "jugg") + { + return; + } + + if(!level.teambased) + { + return; + } + + if(maps\mp\_utility::gettimepassed() < -5536) + { + return; + } + + var_01 = estimatedtimetillscorelimit(param_00); + if(var_01 < 2) + { + level notify("match_ending_soon","score"); + } +} + +//Function Number: 30 +func_26DA() +{ + if(maps\mp\_utility::func_18D0("scorelimit") <= 0 || maps\mp\_utility::isobjectivebased()) + { + return; + } + + if(level.teambased) + { + return; + } + + if(maps\mp\_utility::gettimepassed() < -5536) + { + return; + } + + var_00 = estimatedtimetillscorelimit(); + if(var_00 < 2) + { + level notify("match_ending_soon","score"); + } +} + +//Function Number: 31 +func_26DB() +{ + if(maps\mp\_utility::isobjectivebased()) + { + return 0; + } + + if(isdefined(level.scorelimitoverride) && level.scorelimitoverride) + { + return 0; + } + + if(game["state"] != "playing") + { + return 0; + } + + if(maps\mp\_utility::func_18D0("scorelimit") <= 0) + { + return 0; + } + + if(level.teambased) + { + if(game["teamScores"]["allies"] < maps\mp\_utility::func_18D0("scorelimit") && game["teamScores"]["axis"] < maps\mp\_utility::func_18D0("scorelimit")) + { + return 0; + } + } + else + { + if(!isplayer(self)) + { + return 0; + } + + if(self.score < maps\mp\_utility::func_18D0("scorelimit")) + { + return 0; + } + } + + return func_26E9(); +} + +//Function Number: 32 +func_2F0E() +{ + level endon("game_ended"); + while(game["state"] == "playing") + { + if(isdefined(level.starttime)) + { + if(func_2F0C() < 3000) + { + wait 0.1; + continue; + } + } + + wait 1; + } +} + +//Function Number: 33 +matchstarttimerpc() +{ + thread matchstarttimer("waiting_for_teams",level.prematchperiod + level.prematchperiodend); + func_2EF8(level.prematchperiod); + if(level.prematchperiodend > 0) + { + matchstarttimer("match_starting_in",level.prematchperiodend); + } +} + +//Function Number: 34 +func_2F11(param_00,param_01) +{ + waittillframeend; + visionsetnaked("mpIntro",0); + level endon("match_start_timer_beginning"); + while(param_00 > 0 && !level.gameended) + { + param_01 thread maps\mp\gametypes\_hud::fontpulse(level); + wait param_01.inframes * 0.05; + param_01 setvalue(param_00); + if(param_00 == 0) + { + visionsetnaked("",0); + } + + param_00--; + wait 1 - param_01.inframes * 0.05; + } +} + +//Function Number: 35 +matchstarttimer(param_00,param_01) +{ + level notify("match_start_timer_beginning"); + var_02 = maps\mp\gametypes\_hud_util::createserverfontstring("objective",1.5); + var_02 maps\mp\gametypes\_hud_util::setpoint("CENTER","CENTER",0,-40); + var_02.sort = 1001; + var_02 settext(game["strings"]["waiting_for_teams"]); + var_02.foreground = 0; + var_02.hidewheninmenu = 1; + var_02 settext(game["strings"][param_00]); + var_03 = maps\mp\gametypes\_hud_util::createserverfontstring("hudbig",1); + var_03 maps\mp\gametypes\_hud_util::setpoint("CENTER","CENTER",0,0); + var_03.sort = 1001; + var_03.color = (1,1,0); + var_03.foreground = 0; + var_03.hidewheninmenu = 1; + var_03 maps\mp\gametypes\_hud::fontpulseinit(); + var_04 = int(param_01); + if(var_04 >= 2) + { + func_2F11(var_04,var_03); + visionsetnaked("",3); + } + else + { + visionsetnaked("mpIntro",0); + visionsetnaked("",1); + } + + var_03 maps\mp\gametypes\_hud_util::destroyelem(); + var_02 maps\mp\gametypes\_hud_util::destroyelem(); +} + +//Function Number: 36 +func_2F12() +{ + visionsetnaked("",0); +} + +//Function Number: 37 +func_2D66() +{ + if(!isdefined(game["switchedsides"])) + { + game["switchedsides"] = 0; + } + + if(game["roundsWon"]["allies"] == maps\mp\_utility::func_18D0("winlimit") - 1 && game["roundsWon"]["axis"] == maps\mp\_utility::func_18D0("winlimit") - 1) + { + var_00 = func_2F3F(); + if(var_00 != game["defenders"]) + { + game["switchedsides"] = !game["switchedsides"]; + } + else + { + level.halftimesubcaption = ""; + } + + level.halftimetype = "overtime"; + return; + } + + level.halftimetype = "halftime"; + game["switchedsides"] = !game["switchedsides"]; +} + +//Function Number: 38 +checkroundswitch() +{ + if(!level.teambased) + { + return 0; + } + + if(!isdefined(level.roundswitch) || !level.roundswitch) + { + return 0; + } + + if(game["roundsPlayed"] % level.roundswitch == 0) + { + func_2D66(); + return 1; + } + + return 0; +} + +//Function Number: 39 +func_2CEE() +{ + if(level.gameended) + { + var_00 = gettime() - level.gameendtime / 1000; + var_01 = level.postroundtime - var_00; + if(var_01 < 0) + { + return 0; + } + + return var_01; + } + + if(maps\mp\_utility::gettimelimit() <= 0) + { + return undefined; + } + + if(!isdefined(level.starttime)) + { + return undefined; + } + + var_02 = maps\mp\_utility::gettimelimit(); + var_00 = gettime() - level.starttime / 1000; + var_01 = maps\mp\_utility::gettimelimit() * 60 - var_02; + if(isdefined(level.timepaused)) + { + var_02 = var_02 + level.timepaused; + } + + return var_02 + level.postroundtime; +} + +//Function Number: 40 +func_2F18() +{ + if(isdefined(self.perkicon)) + { + if(isdefined(self.perkicon[0])) + { + self.perkicon[0] maps\mp\gametypes\_hud_util::destroyelem(); + self.perkname[0] maps\mp\gametypes\_hud_util::destroyelem(); + } + + if(isdefined(self.perkicon[1])) + { + self.perkicon[1] maps\mp\gametypes\_hud_util::destroyelem(); + self.perkname[1] maps\mp\gametypes\_hud_util::destroyelem(); + } + + if(isdefined(self.perkicon[2])) + { + self.perkicon[2] maps\mp\gametypes\_hud_util::destroyelem(); + self.perkname[2] maps\mp\gametypes\_hud_util::destroyelem(); + } + } + + self notify("perks_hidden"); + self.lowermessage maps\mp\gametypes\_hud_util::destroyelem(); + self.lowertimer maps\mp\gametypes\_hud_util::destroyelem(); + if(isdefined(self.proxbar)) + { + self.proxbar maps\mp\gametypes\_hud_util::destroyelem(); + } + + if(isdefined(self.proxbartext)) + { + self.proxbartext maps\mp\gametypes\_hud_util::destroyelem(); + } +} + +//Function Number: 41 +gethostplayer() +{ + var_00 = getentarray("player","classname"); + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + if(var_00[var_01] ishost()) + { + return var_00[var_01]; + } + } +} + +//Function Number: 42 +hostidledout() +{ + var_00 = gethostplayer(); + if(isdefined(var_00) && !var_00.hasspawned && !isdefined(var_00.selectedclass)) + { + return 1; + } + + return 0; +} + +//Function Number: 43 +func_2F1F(param_00,param_01) +{ + var_02 = 0; + while(!var_02) + { + var_03 = level.players; + var_02 = 1; + foreach(var_05 in var_03) + { + if(!isdefined(var_05.doingsplash)) + { + continue; + } + + if(!var_05 maps\mp\gametypes\_hud_message::func_2F20()) + { + continue; + } + + var_02 = 0; + } + + wait 0.5; + } + + if(!param_01) + { + wait param_00; + level notify("round_end_finished"); + return; + } + + wait param_00 / 2; + level notify("give_match_bonus"); + wait param_00 / 2; + var_02 = 0; + while(!var_02) + { + var_03 = level.players; + var_02 = 1; + foreach(var_05 in var_03) + { + if(!isdefined(var_05.doingsplash)) + { + continue; + } + + if(!var_05 maps\mp\gametypes\_hud_message::func_2F20()) + { + continue; + } + + var_02 = 0; + } + + wait 0.5; + } + + level notify("round_end_finished"); +} + +//Function Number: 44 +func_2F21(param_00) +{ + self setdepthoffield(0,128,512,4000,6,1.8); +} + +//Function Number: 45 +fixbootlegbrush() +{ + var_00 = spawn("script_model",(-297,-1356.3,159.2)); + var_00.angles = (270,102,0); + var_00 setmodel("me_chainlink_fence_pole"); + var_01 = spawn("script_model",(-277.8,-1444.8,70)); + var_01.angles = (0,0,0); + var_01 setmodel("me_chainlink_fence_pole"); + var_02 = spawn("script_model",(-267.7,-1526.8,159.5)); + var_02.angles = (296,97,-180); + var_02 setmodel("me_chainlink_fence_pole"); + var_03 = spawn("script_model",(-273.2,-1480.3,159.1)); + var_03.angles = (270,97,0); + var_03 setmodel("me_chainlink_fence_pole"); + var_04 = spawn("script_model",(-266.7,-1534.8,159.1)); + var_04.angles = (270,277,0); + var_04 setmodel("me_chainlink_fence_pole"); + var_05 = spawn("script_model",(-158.7,-1479.5,159.2)); + var_05.angles = (270,90,0); + var_05 setmodel("me_chainlink_fence_pole"); + var_06 = spawn("script_model",(-158.8,-1535.5,159.2)); + var_06.angles = (270,270,0); + var_06 setmodel("me_chainlink_fence_pole"); + var_07 = spawn("script_model",(-158.8,-1525.8,159.5)); + var_07.angles = (296,90,-180); + var_07 setmodel("me_chainlink_fence_pole"); + var_08 = spawn("script_model",(-158.8,-1444.3,70)); + var_08.angles = (0,0,0); + var_08 setmodel("me_chainlink_fence_pole"); + var_09 = spawn("script_model",(-249.5,-1444.7,159.2)); + var_09.angles = (270,180,0); + var_09 setmodel("me_chainlink_fence_pole"); + var_0A = spawn("script_model",(-185,-1444.8,159.2)); + var_0A.angles = (270,360,0); + var_0A setmodel("me_chainlink_fence_pole"); + var_0B = spawn("script_model",(-172,-1570.5,159)); + var_0B.angles = (270,361,0); + var_0B setmodel("me_chainlink_fence_pole"); + var_0C = spawn("script_model",(-248.5,-1572,159)); + var_0C.angles = (270,181,0); + var_0C setmodel("me_chainlink_fence_pole"); + var_0D = spawn("script_model",(-200,-1511,161.5)); + var_0D.angles = (0,181,-90); + var_0D setmodel("me_corrugated_metal8x8"); + var_0E = spawn("script_model",(-229.5,-1510.5,161)); + var_0E.angles = (0,181,-90); + var_0E setmodel("me_corrugated_metal8x8"); +} + +//Function Number: 46 +fixranktable() +{ + var_00 = 11; + var_01 = 0; + for(var_00 = 11;var_00 <= level.maxprestige;var_00++) + { + for(var_01 = 0;var_01 <= level.maxrank;var_01++) + { + precacheshader(tablelookup("mp/rankIconTable.csv",0,var_01,var_00 + 1)); + } + } +} + +//Function Number: 47 +func_2F22() +{ + maps\mp\_load::main(); + maps\mp\_utility::func_2F23("round_over",0); + maps\mp\_utility::func_2F23("game_over",0); + maps\mp\_utility::func_2F23("block_notifies",0); + level.prematchperiod = 0; + level.prematchperiodend = 0; + level.postgamenotifies = 0; + level.intermission = 0; + makedvarserverinfo("cg_thirdPersonAngle",356); + makedvarserverinfo("scr_gameended",0); + if(!isdefined(game["gamestarted"])) + { + game["clientid"] = 0; + var_00 = getmapcustom("allieschar"); + if(!isdefined(var_00) || var_00 == "") + { + if(!isdefined(game["allies"])) + { + var_00 = "sas_urban"; + } + else + { + var_00 = game["allies"]; + } + } + + var_01 = getmapcustom("axischar"); + if(!isdefined(var_01) || var_01 == "") + { + if(!isdefined(game["axis"])) + { + var_01 = "opforce_henchmen"; + } + else + { + var_01 = game["axis"]; + } + } + + game["allies"] = var_00; + game["axis"] = var_01; + if(!isdefined(game["attackers"]) || !isdefined(game["defenders"])) + { + thread common_scripts\utility::error("No attackers or defenders team defined in level .gsc."); + } + + if(!isdefined(game["attackers"])) + { + game["attackers"] = "allies"; + } + + if(!isdefined(game["defenders"])) + { + game["defenders"] = "axis"; + } + + if(!isdefined(game["state"])) + { + game["state"] = "playing"; + } + + precachestatusicon("hud_status_dead"); + precachestatusicon("hud_status_connecting"); + precachestring(&"MPUI_REVIVING"); + precachestring(&"MPUI_BEING_REVIVED"); + precacherumble("damage_heavy"); + precacheshader("white"); + precacheshader("black"); + game["strings"]["press_to_spawn"] = &"PLATFORM_PRESS_TO_SPAWN"; + if(level.teambased) + { + game["strings"]["waiting_for_teams"] = &"MP_WAITING_FOR_TEAMS"; + game["strings"]["opponent_forfeiting_in"] = &"MP_OPPONENT_FORFEITING_IN"; + } + else + { + game["strings"]["waiting_for_teams"] = &"MP_WAITING_FOR_MORE_PLAYERS"; + game["strings"]["opponent_forfeiting_in"] = &"MP_OPPONENT_FORFEITING_IN"; + } + + game["strings"]["match_starting_in"] = &"MP_MATCH_STARTING_IN"; + game["strings"]["match_resuming_in"] = &"MP_MATCH_RESUMING_IN"; + game["strings"]["waiting_for_players"] = &"MP_WAITING_FOR_PLAYERS"; + game["strings"]["spawn_next_round"] = &"MP_SPAWN_NEXT_ROUND"; + game["strings"]["waiting_to_spawn"] = &"MP_WAITING_TO_SPAWN"; + game["strings"]["waiting_to_safespawn"] = &"MP_WAITING_TO_SAFESPAWN"; + game["strings"]["match_starting"] = &"MP_MATCH_STARTING"; + game["strings"]["change_class"] = &"MP_CHANGE_CLASS_NEXT_SPAWN"; + game["strings"]["last_stand"] = &"MPUI_LAST_STAND"; + game["strings"]["final_stand"] = &"MPUI_FINAL_STAND"; + game["strings"]["c4_death"] = &"MPUI_C4_DEATH"; + game["strings"]["cowards_way"] = &"PLATFORM_COWARDS_WAY_OUT"; + game["strings"]["tie"] = &"MP_MATCH_TIE"; + game["strings"]["round_draw"] = &"MP_ROUND_DRAW"; + game["strings"]["grabbed_flag"] = &"MP_GRABBED_FLAG_FIRST"; + game["strings"]["enemies_eliminated"] = &"MP_ENEMIES_ELIMINATED"; + game["strings"]["score_limit_reached"] = &"MP_SCORE_LIMIT_REACHED"; + game["strings"]["round_limit_reached"] = &"MP_ROUND_LIMIT_REACHED"; + game["strings"]["time_limit_reached"] = &"MP_TIME_LIMIT_REACHED"; + game["strings"]["players_forfeited"] = &"MP_PLAYERS_FORFEITED"; + game["strings"]["S.A.S Win"] = &"SAS_WIN"; + game["strings"]["Spetsnaz Win"] = &"SPETSNAZ_WIN"; + game["colors"]["blue"] = (0.25,0.25,0.75); + game["colors"]["red"] = (0.75,0.25,0.25); + game["colors"]["white"] = (1,1,1); + game["colors"]["black"] = (0,0,0); + game["colors"]["green"] = (0.25,0.75,0.25); + game["colors"]["yellow"] = (0.65,0.65,0); + game["colors"]["orange"] = (1,0.45,0); + game["strings"]["allies_eliminated"] = maps\mp\gametypes\_teams::func_276D("allies"); + game["strings"]["allies_forfeited"] = maps\mp\gametypes\_teams::getteamforfeitedstring("allies"); + game["strings"]["allies_name"] = maps\mp\gametypes\_teams::getteamname("allies"); + game["icons"]["allies"] = maps\mp\gametypes\_teams::getteamicon("allies"); + game["colors"]["allies"] = maps\mp\gametypes\_teams::getteamcolor("allies"); + game["strings"]["axis_eliminated"] = maps\mp\gametypes\_teams::func_276D("axis"); + game["strings"]["axis_forfeited"] = maps\mp\gametypes\_teams::getteamforfeitedstring("axis"); + game["strings"]["axis_name"] = maps\mp\gametypes\_teams::getteamname("axis"); + game["icons"]["axis"] = maps\mp\gametypes\_teams::getteamicon("axis"); + game["colors"]["axis"] = maps\mp\gametypes\_teams::getteamcolor("axis"); + if(game["colors"]["allies"] == (0,0,0)) + { + game["colors"]["allies"] = (0.5,0.5,0.5); + } + + if(game["colors"]["axis"] == (0,0,0)) + { + game["colors"]["axis"] = (0.5,0.5,0.5); + } + + [[ level.onprecachegametype ]](); + if(level.console) + { + if(!level.splitscreen) + { + level.prematchperiod = maps\mp\gametypes\_tweakables::func_270D("game","graceperiod"); + } + } + else + { + level.prematchperiod = maps\mp\gametypes\_tweakables::func_270D("game","playerwaittime"); + level.prematchperiodend = maps\mp\gametypes\_tweakables::func_270D("game","matchstarttime"); + } + } + else if(level.console) + { + if(!level.splitscreen) + { + level.prematchperiod = 5; + } + } + else + { + level.prematchperiod = 5; + level.prematchperiodend = maps\mp\gametypes\_tweakables::func_270D("game","matchstarttime"); + } + + if(!isdefined(game["status"])) + { + game["status"] = "normal"; + } + + makedvarserverinfo("ui_overtime",game["status"] == "overtime"); + if(game["status"] != "overtime" && game["status"] != "halftime") + { + game["teamScores"]["allies"] = 0; + game["teamScores"]["axis"] = 0; + } + + if(!isdefined(game["timePassed"])) + { + game["timePassed"] = 0; + } + + if(!isdefined(game["roundsPlayed"])) + { + game["roundsPlayed"] = 0; + } + + if(!isdefined(game["roundsWon"])) + { + game["roundsWon"] = []; + } + + if(level.teambased) + { + if(!isdefined(game["roundsWon"]["axis"])) + { + game["roundsWon"]["axis"] = 0; + } + + if(!isdefined(game["roundsWon"]["allies"])) + { + game["roundsWon"]["allies"] = 0; + } + } + + level.gameended = 0; + level.forcedend = 0; + level.hostforcedend = 0; + level.hardcoremode = getdvarint("g_hardcore"); + if(level.hardcoremode) + { + logstring("game mode: hardcore"); + } + + level.diehardmode = getdvarint("scr_diehard"); + if(!level.teambased) + { + level.diehardmode = 0; + } + + if(level.diehardmode) + { + logstring("game mode: diehard"); + } + + level.killstreakrewards = getdvarint("scr_game_hardpoints"); + level.usestartspawns = 1; + level.objectivepointsmod = 1; + if(maps\mp\_utility::matchmakinggame()) + { + level.maxallowedteamkills = 2; + } + else + { + level.maxallowedteamkills = -1; + } + + thread maps\mp\gametypes\_persistence::init(); + thread maps\mp\gametypes\_menus::init(); + thread maps\mp\gametypes\_hud::init(); + thread maps\mp\gametypes\_serversettings::init(); + thread maps\mp\gametypes\_teams::init(); + thread maps\mp\gametypes\_weapons::init(); + thread maps\mp\gametypes\_killcam::init(); + thread maps\mp\gametypes\_shellshock::init(); + thread maps\mp\gametypes\_deathicons::init(); + thread maps\mp\gametypes\_damagefeedback::init(); + thread maps\mp\gametypes\_healthoverlay::init(); + thread maps\mp\gametypes\_spectating::init(); + thread maps\mp\gametypes\_objpoints::init(); + thread maps\mp\gametypes\_gameobjects::init(); + thread maps\mp\gametypes\_spawnlogic::init(); + thread maps\mp\gametypes\_battlechatter_mp::init(); + thread maps\mp\gametypes\_music_and_dialog::init(); + thread maps\mp\_matchdata::init(); + thread maps\mp\_awards::init(); + thread maps\mp\_skill::init(); + thread maps\mp\_areas::init(); + thread maps\mp\killstreaks\_killstreaks::init(); + thread maps\mp\perks\_perks::init(); + thread maps\mp\_events::init(); + thread maps\mp\_defcon::init(); + thread maps\mp\_matchevents::init(); + thread maps\mp\gametypes\_damage::initfinalkillcam(); + if(level.teambased) + { + thread maps\mp\gametypes\_friendicons::init(); + } + + thread maps\mp\gametypes\_hud_message::init(); + if(!level.console) + { + thread maps\mp\gametypes\_quickmessages::init(); + } + + foreach(var_03 in game["strings"]) + { + precachestring(var_03); + } + + foreach(var_06 in game["icons"]) + { + precacheshader(var_06); + } + + game["gamestarted"] = 1; + level.maxplayercount = 0; + level.wavedelay["allies"] = 0; + level.wavedelay["axis"] = 0; + level.lastwave["allies"] = 0; + level.lastwave["axis"] = 0; + level.waveplayerspawnindex["allies"] = 0; + level.waveplayerspawnindex["axis"] = 0; + level.aliveplayers["allies"] = []; + level.aliveplayers["axis"] = []; + level.activeplayers = []; + makedvarserverinfo("ui_scorelimit",0); + makedvarserverinfo("ui_allow_classchange",getdvar("ui_allow_classchange")); + makedvarserverinfo("ui_allow_teamchange",1); + setdvar("ui_allow_teamchange",1); + if(maps\mp\_utility::getgametypenumlives()) + { + setdvar("g_deadChat",0); + } + else + { + setdvar("g_deadChat",1); + } + + var_08 = getdvarint("scr_" + level.gametype + "_waverespawndelay"); + if(var_08) + { + level.wavedelay["allies"] = var_08; + level.wavedelay["axis"] = var_08; + level.lastwave["allies"] = 0; + level.lastwave["axis"] = 0; + level thread func_2F3E(); + } + + maps\mp\_utility::func_2F29("prematch_done",0); + level.graceperiod = 15; + level.ingraceperiod = level.graceperiod; + maps\mp\_utility::func_2F29("graceperiod_done",0); + level.roundenddelay = 4; + level.halftimeroundenddelay = 4; + level.noragdollents = getentarray("noragdoll","targetname"); + if(level.teambased) + { + maps\mp\gametypes\_gamescore::func_26EB("axis"); + maps\mp\gametypes\_gamescore::func_26EB("allies"); + } + else + { + thread maps\mp\gametypes\_gamescore::func_26F8(); + } + + thread func_2F2F(); + level notify("update_scorelimit"); + [[ level.onstartgametype ]](); + if(!level.console && getdvar("dedicated") == "dedicated LAN server" || getdvar("dedicated") == "dedicated internet server") + { + thread verifydedicatedconfiguration(); + } + + if(level.script == "mp_bootleg") + { + fixbootlegbrush(); + } + + fixranktable(); + thread startgame(); + level thread maps\mp\_utility::func_2F2C(); + level thread func_2F2E(); + level thread maps\mp\gametypes\_damage::func_2D02(); +} + +//Function Number: 48 +func_2F2D() +{ + endparty(); + if(!level.gameended) + { + level thread forceend(); + } +} + +//Function Number: 49 +verifydedicatedconfiguration() +{ + for(;;) + { + if(level.rankedmatch) + { + exitlevel(0); + } + + if(!getdvarint("xblive_privatematch")) + { + exitlevel(0); + } + + if(getdvar("dedicated") != "dedicated LAN server" && getdvar("dedicated") != "dedicated internet server") + { + exitlevel(0); + } + + wait 5; + } +} + +//Function Number: 50 +func_2F2E() +{ + level endon("game_ended"); + var_00 = maps\mp\_utility::gettimepassed(); + while(game["state"] == "playing") + { + thread func_2F07(var_00); + var_00 = maps\mp\_utility::gettimepassed(); + if(isdefined(level.starttime)) + { + if(func_2F0C() < 3000) + { + wait 0.1; + continue; + } + } + + wait 1; + } +} + +//Function Number: 51 +func_2F2F() +{ + for(;;) + { + level common_scripts\utility::waittill_either("update_scorelimit","update_winlimit"); + if(!maps\mp\_utility::func_26EC() || !maps\mp\_utility::isobjectivebased()) + { + setdvar("ui_scorelimit",maps\mp\_utility::func_18D0("scorelimit")); + thread func_26DB(); + continue; + } + + setdvar("ui_scorelimit",maps\mp\_utility::func_18D0("winlimit")); + } +} + +//Function Number: 52 +func_2F30() +{ + self endon("death"); + self endon("stop_ticking"); + level endon("game_ended"); + var_00 = level.bombtimer; + for(;;) + { + self playsound("ui_mp_suitcasebomb_timer"); + if(var_00 > 10) + { + var_00 = var_00 - 1; + wait 1; + } + else if(var_00 > 4) + { + var_00 = var_00 - 0.5; + wait 0.5; + } + else if(var_00 > 1) + { + var_00 = var_00 - 0.4; + wait 0.4; + } + else + { + var_00 = var_00 - 0.3; + wait 0.3; + } + + maps\mp\gametypes\_hostmigration::func_273E(); + } +} + +//Function Number: 53 +func_2F32() +{ + self notify("stop_ticking"); +} + +//Function Number: 54 +timelimitclock() +{ + level endon("game_ended"); + wait 0.05; + var_00 = spawn("script_origin",(0,0,0)); + var_00 hide(); + while(game["state"] == "playing") + { + if(!level.timerstopped && maps\mp\_utility::gettimelimit()) + { + var_01 = func_2F0C() / 1000; + var_02 = int(var_01 + 0.5); + if(maps\mp\_utility::gethalftime() && var_02 > maps\mp\_utility::gettimelimit() * 60 * 0.5) + { + var_02 = var_02 - int(maps\mp\_utility::gettimelimit() * 60 * 0.5); + } + + if(var_02 >= 30 && var_02 <= 60) + { + level notify("match_ending_soon","time"); + } + + if(var_02 <= 10 || var_02 <= 30 && var_02 % 2 == 0) + { + level notify("match_ending_very_soon"); + if(var_02 == 0) + { + break; + } + + var_00 playsound("ui_mp_timer_countdown"); + } + + if(var_01 - floor(var_01) >= 0.05) + { + wait var_01 - floor(var_01); + } + } + + wait 1; + } +} + +//Function Number: 55 +gametimer() +{ + level endon("game_ended"); + level waittill("prematch_over"); + level.starttime = gettime(); + level.discardtime = 0; + if(isdefined(game["roundMillisecondsAlreadyPassed"])) + { + level.starttime = level.starttime - game["roundMillisecondsAlreadyPassed"]; + game["roundMillisecondsAlreadyPassed"] = undefined; + } + + var_00 = gettime(); + while(game["state"] == "playing") + { + if(!level.timerstopped) + { + game["timePassed"] = game["timePassed"] + gettime() - var_00; + } + + var_00 = gettime(); + wait 1; + } +} + +//Function Number: 56 +updatetimerpausedness() +{ + var_00 = level.timerstoppedforgamemode || isdefined(level.hostmigrationtimer); + if(!maps\mp\_utility::gameflag("prematch_done")) + { + var_00 = 0; + } + + if(!level.timerstopped && var_00) + { + level.timerstopped = 1; + level.timerpausetime = gettime(); + return; + } + + if(level.timerstopped && !var_00) + { + level.timerstopped = 0; + level.discardtime = level.discardtime + gettime() - level.timerpausetime; + } +} + +//Function Number: 57 +pausetimer() +{ + level.timerstoppedforgamemode = 1; + updatetimerpausedness(); +} + +//Function Number: 58 +resumetimer() +{ + level.timerstoppedforgamemode = 0; + updatetimerpausedness(); +} + +//Function Number: 59 +startgame() +{ + thread gametimer(); + level.timerstopped = 0; + level.timerstoppedforgamemode = 0; + thread maps\mp\gametypes\_spawnlogic::spawnperframeupdate(); + prematchperiod(); + maps\mp\_utility::func_2EFB("prematch_done"); + level notify("prematch_over"); + updatetimerpausedness(); + thread timelimitclock(); + thread graceperiod(); + thread maps\mp\gametypes\_missions::roundbegin(); +} + +//Function Number: 60 +func_2F3E() +{ + level endon("game_ended"); + while(game["state"] == "playing") + { + var_00 = gettime(); + if(var_00 - level.lastwave["allies"] > level.wavedelay["allies"] * 1000) + { + level notify("wave_respawn_allies"); + level.lastwave["allies"] = var_00; + level.waveplayerspawnindex["allies"] = 0; + } + + if(var_00 - level.lastwave["axis"] > level.wavedelay["axis"] * 1000) + { + level notify("wave_respawn_axis"); + level.lastwave["axis"] = var_00; + level.waveplayerspawnindex["axis"] = 0; + } + + wait 0.05; + } +} + +//Function Number: 61 +func_2F3F() +{ + var_00["allies"] = 0; + var_00["allies"] = 0; + foreach(var_03 in level.players) + { + var_04 = var_03.pers["team"]; + if(isdefined(var_04) && var_04 == "allies" || var_04 == "axis") + { + var_00[var_04] = var_00[var_04] + var_03.kills; + var_41[var_04] = var_41[var_04] + var_03.deaths; + } + } + + if(var_00["allies"] > var_00["axis"]) + { + return "allies"; + } + else if(var_00["axis"] > var_00["allies"]) + { + return "axis"; + } + + if(var_41["allies"] < var_41["axis"]) + { + return "allies"; + } + else if(var_41["axis"] < var_41["allies"]) + { + return "axis"; + } + + if(randomint(2) == 0) + { + return "allies"; + } + + return "axis"; +} + +//Function Number: 62 +func_2F40(param_00) +{ + if(maps\mp\_utility::matchmakinggame()) + { + setxenonranks(); + if(hostidledout()) + { + level.hostforcedend = 1; + logstring("host idled out"); + endlobby(); + } + + updatematchbonusscores(param_00); + } + + updatewinlossstats(param_00); +} + +//Function Number: 63 +displayroundend(param_00,param_01) +{ + foreach(var_03 in level.players) + { + if(isdefined(var_03.connectedpostgame) || var_03.pers["team"] == "spectator") + { + continue; + } + + if(level.teambased) + { + var_03 thread maps\mp\gametypes\_hud_message::teamoutcomenotify(param_00,1,param_01); + continue; + } + + var_03 thread maps\mp\gametypes\_hud_message::outcomenotify(param_00,param_01); + } + + if(!maps\mp\_utility::waslastround()) + { + level notify("round_win",param_00); + } + + if(maps\mp\_utility::waslastround()) + { + func_2F1F(level.roundenddelay,0); + return; + } + + func_2F1F(level.roundenddelay,1); +} + +//Function Number: 64 +displaygameend(param_00,param_01) +{ + foreach(var_03 in level.players) + { + if(isdefined(var_03.connectedpostgame) || var_03.pers["team"] == "spectator") + { + continue; + } + + if(level.teambased) + { + var_03 thread maps\mp\gametypes\_hud_message::teamoutcomenotify(param_00,0,param_01); + continue; + } + + var_03 thread maps\mp\gametypes\_hud_message::outcomenotify(param_00,param_01); + } + + level notify("game_win",param_00); + func_2F1F(level.postroundtime,1); +} + +//Function Number: 65 +displayroundswitch() +{ + var_00 = level.halftimetype; + if(var_00 == "halftime") + { + if(maps\mp\_utility::func_18D0("roundlimit")) + { + if(game["roundsPlayed"] * 2 == maps\mp\_utility::func_18D0("roundlimit")) + { + var_00 = "halftime"; + } + else + { + var_00 = "intermission"; + } + } + else if(maps\mp\_utility::func_18D0("winlimit")) + { + if(game["roundsPlayed"] == maps\mp\_utility::func_18D0("winlimit") - 1) + { + var_00 = "halftime"; + } + else + { + var_00 = "intermission"; + } + } + else + { + var_00 = "intermission"; + } + } + + level notify("round_switch",var_00); + foreach(var_02 in level.players) + { + if(isdefined(var_02.connectedpostgame) || var_02.pers["team"] == "spectator") + { + continue; + } + + var_02 thread maps\mp\gametypes\_hud_message::teamoutcomenotify(var_00,1,level.halftimesubcaption); + } + + func_2F1F(level.halftimeroundenddelay,0); +} + +//Function Number: 66 +endgameovertime(param_00,param_01) +{ + visionsetnaked("mpOutro",0.5); + setdvar("scr_gameended",3); + foreach(var_03 in level.players) + { + var_03 thread freezeplayerforroundend(0); + var_03 thread func_2F21(4); + var_03 func_2F18(); + var_03 setclientdvars("cg_everyoneHearsEveryone",1); + var_03 setclientdvars("cg_drawSpectatorMessages",0,"g_compassShowEnemies",0); + if(var_03.pers["team"] == "spectator") + { + var_03 thread maps\mp\gametypes\_playerlogic::spawnintermission(); + } + } + + level notify("round_switch","overtime"); + foreach(var_03 in level.players) + { + if(isdefined(var_03.connectedpostgame) || var_03.pers["team"] == "spectator") + { + continue; + } + + if(level.teambased) + { + var_03 thread maps\mp\gametypes\_hud_message::teamoutcomenotify(param_00,0,param_01); + continue; + } + + var_03 thread maps\mp\gametypes\_hud_message::outcomenotify(param_00,param_01); + } + + func_2F1F(level.roundenddelay,0); + if(isdefined(level.finalkillcam_winner)) + { + level.finalkillcam_timegameended[level.finalkillcam_winner] = maps\mp\_utility::func_2D00(); + foreach(var_03 in level.players) + { + var_03 notify("reset_outcome"); + } + + level notify("game_cleanup"); + waittillfinalkillcamdone(); + } + + game["status"] = "overtime"; + level notify("restarting"); + game["state"] = "playing"; + map_restart(1); +} + +//Function Number: 67 +endgamehalftime() +{ + visionsetnaked("mpOutro",0.5); + setdvar("scr_gameended",2); + game["switchedsides"] = !game["switchedsides"]; + foreach(var_01 in level.players) + { + var_01 thread freezeplayerforroundend(0); + var_01 thread func_2F21(4); + var_01 func_2F18(); + var_01 setclientdvars("cg_everyoneHearsEveryone",1); + var_01 setclientdvars("cg_drawSpectatorMessages",0,"g_compassShowEnemies",0); + if(var_01.pers["team"] == "spectator") + { + var_01 thread maps\mp\gametypes\_playerlogic::spawnintermission(); + } + } + + foreach(var_01 in level.players) + { + var_01.pers["stats"] = var_01.stats; + } + + level notify("round_switch","halftime"); + foreach(var_01 in level.players) + { + if(isdefined(var_01.connectedpostgame) || var_01.pers["team"] == "spectator") + { + continue; + } + + var_01 thread maps\mp\gametypes\_hud_message::teamoutcomenotify("halftime",1,level.halftimesubcaption); + } + + func_2F1F(level.roundenddelay,0); + if(isdefined(level.finalkillcam_winner)) + { + level.finalkillcam_timegameended[level.finalkillcam_winner] = maps\mp\_utility::func_2D00(); + foreach(var_01 in level.players) + { + var_01 notify("reset_outcome"); + } + + level notify("game_cleanup"); + waittillfinalkillcamdone(); + } + + game["status"] = "halftime"; + level notify("restarting"); + game["state"] = "playing"; + map_restart(1); +} + +//Function Number: 68 +endgame(param_00,param_01,param_02) +{ + if(!isdefined(param_02)) + { + param_02 = 0; + } + + if(game["state"] == "postgame" || level.gameended && !isdefined(level.gtnw) || !level.gtnw) + { + return; + } + + game["state"] = "postgame"; + level.gameendtime = gettime(); + level.gameended = 1; + level.ingraceperiod = 0; + level notify("game_ended",param_00); + maps\mp\_utility::levelflagset("game_over"); + maps\mp\_utility::levelflagset("block_notifies"); + common_scripts\utility::waitframe(); + setgameendtime(0); + var_03 = getmatchdata("gameLength"); + var_03 = var_03 + int(maps\mp\_utility::func_2D00()); + setmatchdata("gameLength",var_03); + maps\mp\gametypes\_playerlogic::printpredictedspawnpointcorrectness(); + if(isdefined(param_00) && isstring(param_00) && param_00 == "overtime") + { + level.finalkillcam_winner = "none"; + endgameovertime(param_00,param_01); + return; + } + + if(isdefined(param_00) && isstring(param_00) && param_00 == "halftime") + { + level.finalkillcam_winner = "none"; + endgamehalftime(); + return; + } + + if(isdefined(level.finalkillcam_winner)) + { + level.finalkillcam_timegameended[level.finalkillcam_winner] = maps\mp\_utility::func_2D00(); + } + + game["roundsPlayed"]++; + if(level.teambased) + { + if(param_00 == "axis" || param_00 == "allies") + { + game["roundsWon"][param_00]++; + } + + maps\mp\gametypes\_gamescore::func_26EB("axis"); + maps\mp\gametypes\_gamescore::func_26EB("allies"); + } + else if(isdefined(param_00) && isplayer(param_00)) + { + game["roundsWon"][param_00.guid]++; + } + + maps\mp\gametypes\_gamescore::func_26F4(); + func_2F40(param_00); + foreach(var_05 in level.players) + { + var_05 setclientdvar("ui_opensummary",1); + if(maps\mp\_utility::func_2F49() || maps\mp\_utility::waslastround()) + { + var_05 maps\mp\killstreaks\_killstreaks::func_2DD6(); + } + } + + setdvar("g_deadChat",1); + setdvar("ui_allow_teamchange",0); + foreach(var_05 in level.players) + { + var_05 thread freezeplayerforroundend(1); + var_05 thread func_2F21(4); + var_05 func_2F18(); + var_05 setclientdvars("cg_everyoneHearsEveryone",1); + var_05 setclientdvars("cg_drawSpectatorMessages",0,"g_compassShowEnemies",0,"cg_fovScale",1); + if(var_05.pers["team"] == "spectator") + { + var_05 thread maps\mp\gametypes\_playerlogic::spawnintermission(); + } + } + + if(!param_02) + { + visionsetnaked("mpOutro",0.5); + } + + if(!maps\mp\_utility::func_2F49() && !param_02) + { + setdvar("scr_gameended",2); + displayroundend(param_00,param_01); + if(isdefined(level.finalkillcam_winner)) + { + foreach(var_05 in level.players) + { + var_05 notify("reset_outcome"); + } + + level notify("game_cleanup"); + waittillfinalkillcamdone(); + } + + if(!maps\mp\_utility::waslastround()) + { + maps\mp\_utility::func_2F4A("block_notifies"); + if(checkroundswitch()) + { + displayroundswitch(); + } + + foreach(var_05 in level.players) + { + var_05.pers["stats"] = var_05.stats; + } + + level notify("restarting"); + game["state"] = "playing"; + map_restart(1); + return; + } + + if(!level.forcedend) + { + var_03 = updateendreasontext(param_02); + } + } + + if(var_03 == game["strings"]["time_limit_reached"]) + { + setdvar("scr_gameended",3); + } + else + { + switch(level.gametype) + { + case "conf": + case "ctf": + case "dom": + case "sd": + case "sab": + case "koth": + setdvar("scr_gameended",4); + break; + + default: + setdvar("scr_gameended",1); + break; + } + } + + if(!isdefined(game["clientMatchDataDef"])) + { + game["clientMatchDataDef"] = "mp/clientmatchdata.def"; + setclientmatchdatadef(game["clientMatchDataDef"]); + } + + maps\mp\gametypes\_missions::func_2F4B(param_02); + displaygameend(param_02,var_03); + if(isdefined(level.finalkillcam_winner) && maps\mp\_utility::func_2F49()) + { + foreach(var_07 in level.players) + { + var_07 notify("reset_outcome"); + } + + level notify("game_cleanup"); + waittillfinalkillcamdone(); + } + + maps\mp\_utility::func_2F4A("block_notifies"); + level.intermission = 1; + level notify("spawning_intermission"); + foreach(var_07 in level.players) + { + var_07 closepopupmenu(); + var_07 closeingamemenu(); + var_07 notify("reset_outcome"); + var_07 thread maps\mp\gametypes\_playerlogic::spawnintermission(); + } + + processlobbydata(); + wait 1; + checkforpersonalbests(); + if(level.teambased) + { + if(param_02 == "axis" || param_02 == "allies") + { + setmatchdata("victor",param_02); + } + else + { + setmatchdata("victor","none"); + } + + setmatchdata("alliesScore",getteamscore("allies")); + setmatchdata("axisScore",getteamscore("axis")); + } + else + { + setmatchdata("victor","none"); + } + + setmatchdata("host",level.hostname); + sendmatchdata(); + foreach(var_07 in level.players) + { + var_07.pers["stats"] = var_07.stats; + } + + if(!var_04 && !level.postgamenotifies) + { + if(!maps\mp\_utility::func_2F49()) + { + wait 6; + } + else + { + wait 3; + } + } + else + { + wait min(10,4 + level.postgamenotifies); + } + + level notify("exitLevel_called"); + exitlevel(0); +} + +//Function Number: 69 +updateendreasontext(param_00) +{ + if(!level.teambased) + { + return 1; + } + + if(maps\mp\_utility::func_2F4D()) + { + return &"MP_ROUND_LIMIT_REACHED"; + } + + if(maps\mp\_utility::func_2F4E()) + { + return &"MP_SCORE_LIMIT_REACHED"; + } + + if(param_00 == "axis") + { + return &"SPETSNAZ_WIN"; + } + + return &"SAS_WIN"; +} + +//Function Number: 70 +estimatedtimetillscorelimit(param_00) +{ + var_01 = func_2F50(param_00); + var_02 = func_2F51(param_00); + var_03 = 999999; + if(var_01) + { + var_03 = var_02 / var_01; + } + + return var_03; +} + +//Function Number: 71 +func_2F50(param_00) +{ + var_01 = maps\mp\_utility::func_18D0("scorelimit"); + var_02 = maps\mp\_utility::gettimelimit(); + var_03 = maps\mp\_utility::gettimepassed() / -5536 + 0.0001; + if(isplayer(self)) + { + var_04 = self.score / var_03; + } + else + { + var_04 = getteamscore(var_01) / var_04; + } + + return var_04; +} + +//Function Number: 72 +func_2F51(param_00) +{ + var_01 = maps\mp\_utility::func_18D0("scorelimit"); + if(isplayer(self)) + { + var_02 = var_01 - self.score; + } + else + { + var_02 = var_02 - getteamscore(var_01); + } + + return var_02; +} + +//Function Number: 73 +func_2F52() +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + maps\mp\_utility::func_2F53(3); + var_00 = maps\mp\_utility::getotherteam(self.pers["team"]); + thread maps\mp\_utility::teamplayercardsplash("callout_lastteammemberalive",self,self.pers["team"]); + thread maps\mp\_utility::teamplayercardsplash("callout_lastenemyalive",self,var_00); + level notify("last_alive",self); +} + +//Function Number: 74 +processlobbydata() +{ + var_00 = 0; + foreach(var_02 in level.players) + { + if(!isdefined(var_02)) + { + continue; + } + + var_02.clientmatchdataid = var_00; + var_00++; + if(level.ps3 && var_02.name.size > level.maxnamelength) + { + var_03 = ""; + for(var_04 = 0;var_04 < level.maxnamelength - 3;var_04++) + { + var_03 = var_03 + var_02.name[var_04]; + } + + var_03 = var_03 + "..."; + } + else + { + var_03 = var_02.name; + } + + setclientmatchdata("players",var_02.clientmatchdataid,"xuid",var_03); + } + + maps\mp\_awards::func_2D9A(); + maps\mp\_scoreboard::func_2EE1(); + sendclientmatchdata(); +} + +//Function Number: 75 +trackleaderboarddeathstats(param_00,param_01) +{ + thread func_2F59(param_00,1,"deaths"); +} + +//Function Number: 76 +trackattackerleaderboarddeathstats(param_00,param_01) +{ + if(isdefined(self) && isplayer(self)) + { + if(param_01 != "MOD_FALLING") + { + if(param_01 == "MOD_MELEE" && issubstr(param_00,"tactical")) + { + maps\mp\_matchdata::func_28DE("tactical","kills",1); + maps\mp\_matchdata::func_28DE("tactical","hits",1); + maps\mp\gametypes\_persistence::incrementattachmentstat("tactical","kills",1); + maps\mp\gametypes\_persistence::incrementattachmentstat("tactical","hits",1); + return; + } + + if(param_01 == "MOD_MELEE" && !issubstr(param_00,"riotshield")) + { + maps\mp\_matchdata::func_28DE("none","kills",1); + maps\mp\_matchdata::func_28DE("none","hits",1); + maps\mp\gametypes\_persistence::incrementattachmentstat("none","kills",1); + maps\mp\gametypes\_persistence::incrementattachmentstat("none","hits",1); + return; + } + + thread func_2F59(param_00,1,"kills"); + } + + if(param_01 == "MOD_HEAD_SHOT") + { + thread func_2F59(param_00,1,"headShots"); + } + } +} + +//Function Number: 77 +setweaponstat(param_00,param_01,param_02) +{ + if(!param_01) + { + return; + } + + var_03 = maps\mp\_utility::getweaponclass(param_00); + if(maps\mp\_utility::func_2829(param_00) || var_03 == "killstreak" || var_03 == "deathstreak" || var_03 == "other") + { + return; + } + + if(maps\mp\_utility::func_2CC3(param_00)) + { + return; + } + + if(var_03 == "weapon_grenade" || var_03 == "weapon_riot" || var_03 == "weapon_explosive") + { + var_04 = maps\mp\_utility::strip_suffix(param_00,"_mp"); + maps\mp\gametypes\_persistence::incrementweaponstat(var_04,param_02,param_01); + maps\mp\_matchdata::logweaponstat(var_04,param_02,param_01); + return; + } + + if(var_03 != "deaths" && var_04 != "weapon_projectile") + { + param_01 = self getcurrentweapon(); + } + + if(maps\mp\_utility::func_2829(param_01) || var_04 == "killstreak" || var_04 == "deathstreak" || var_04 == "other") + { + return; + } + + if(!isdefined(self.trackingweaponname)) + { + self.trackingweaponname = param_01; + } + + if(param_01 != self.trackingweaponname) + { + maps\mp\gametypes\_persistence::updateweaponbufferedstats(); + self.trackingweaponname = param_01; + } + + switch(var_03) + { + case "shots": + self.trackingweaponshots++; + break; + + case "hits": + self.trackingweaponhits++; + break; + + case "headShots": + self.trackingweaponheadshots++; + self.trackingweaponhits++; + break; + + case "kills": + self.trackingweaponkills++; + break; + } + + if(var_03 == "deaths") + { + var_05 = param_01; + var_06 = strtok(param_01,"_"); + var_07 = undefined; + if(var_06[0] == "iw5") + { + var_04 = var_06[0] + "_" + var_06[1]; + } + else if(var_06[0] == "alt") + { + var_04 = var_06[1] + "_" + var_06[2]; + } + else + { + var_04 = var_06[0]; + } + + if(!maps\mp\_utility::func_2827(var_07) && !maps\mp\_utility::iscacsecondaryweapon(var_07)) + { + return; + } + + if(var_05[0] == "alt") + { + var_07 = var_05[1] + "_" + var_05[2]; + foreach(var_09 in var_05) + { + if(var_09 == "gl" || var_09 == "gp25" || var_09 == "m320") + { + var_06 = "gl"; + break; + } + + if(var_09 == "shotgun") + { + var_06 = "shotgun"; + break; + } + } + } + + if(isdefined(var_06) && var_06 == "gl" || var_06 == "shotgun") + { + maps\mp\gametypes\_persistence::incrementattachmentstat(var_06,param_02,param_01); + maps\mp\_matchdata::func_28DE(var_06,param_02,param_01); + return; + } + + maps\mp\gametypes\_persistence::incrementweaponstat(var_07,param_02,param_01); + maps\mp\_matchdata::logweaponstat(var_07,"deaths",param_01); + if(var_05[0] != "none") + { + for(var_0B = 0;var_0B < var_05.size;var_0B++) + { + if(var_05[var_0B] == "alt") + { + var_0B = var_0B + 2; + continue; + } + + if(var_05[var_0B] == "iw5") + { + var_0B = var_0B + 1; + continue; + } + + if(var_05[var_0B] == "mp") + { + continue; + } + + if(issubstr(var_05[var_0B],"camo")) + { + continue; + } + + if(issubstr(var_05[var_0B],"scope") && !issubstr(var_05[var_0B],"vz")) + { + continue; + } + + if(issubstr(var_05[var_0B],"scope") && issubstr(var_05[var_0B],"vz")) + { + var_05[var_0B] = "vzscope"; + } + + var_05[var_0B] = maps\mp\_utility::validateattachment(var_05[var_0B]); + if(var_0B == 0 && var_05[var_0B] != "iw5" && var_05[var_0B] != "alt") + { + continue; + } + + maps\mp\gametypes\_persistence::incrementattachmentstat(var_05[var_0B],param_02,param_01); + maps\mp\_matchdata::func_28DE(var_05[var_0B],param_02,param_01); + } + } + } +} + +//Function Number: 78 +func_2D23(param_00,param_01,param_02) +{ + if(!isdefined(param_01)) + { + return; + } + + if(!isdefined(param_00)) + { + param_01 setweaponstat(param_02,1,"hits"); + return; + } + + if(!isdefined(param_00.playeraffectedarray)) + { + param_00.playeraffectedarray = []; + } + + var_03 = 1; + for(var_04 = 0;var_04 < param_00.playeraffectedarray.size;var_04++) + { + if(param_00.playeraffectedarray[var_04] == self) + { + var_03 = 0; + break; + } + } + + if(var_03) + { + param_00.playeraffectedarray[param_00.playeraffectedarray.size] = self; + param_01 setweaponstat(param_02,1,"hits"); + } +} + +//Function Number: 79 +func_2F59(param_00,param_01,param_02) +{ + self endon("disconnect"); + waittillframeend; + setweaponstat(param_00,param_01,param_02); +} + +//Function Number: 80 +checkforpersonalbests() +{ + foreach(var_01 in level.players) + { + if(!isdefined(var_01)) + { + continue; + } + + if(var_01 maps\mp\_utility::rankingenabled()) + { + var_02 = var_01 getplayerdata("round","kills"); + var_03 = var_01 getplayerdata("round","deaths"); + var_04 = var_01.pers["summary"]["xp"]; + var_05 = var_01 getplayerdata("bestKills"); + var_06 = var_01 getplayerdata("mostDeaths"); + var_07 = var_01 getplayerdata("mostXp"); + if(var_02 > var_05) + { + var_01 setplayerdata("bestKills",var_02); + } + + if(var_04 > var_07) + { + var_01 setplayerdata("mostXp",var_04); + } + + if(var_03 > var_06) + { + var_01 setplayerdata("mostDeaths",var_03); + } + + var_01 func_2F5C(); + var_01 maps\mp\_matchdata::logplayerxp(var_04,"totalXp"); + var_01 maps\mp\_matchdata::logplayerxp(var_01.pers["summary"]["score"],"scoreXp"); + var_01 maps\mp\_matchdata::logplayerxp(var_01.pers["summary"]["challenge"],"challengeXp"); + var_01 maps\mp\_matchdata::logplayerxp(var_01.pers["summary"]["match"],"matchXp"); + var_01 maps\mp\_matchdata::logplayerxp(var_01.pers["summary"]["misc"],"miscXp"); + } + + if(isdefined(var_01.pers["confirmed"])) + { + var_01 maps\mp\_matchdata::func_80EF(); + } + + if(isdefined(var_01.pers["denied"])) + { + var_01 maps\mp\_matchdata::func_80F0(); + } + } +} + +//Function Number: 81 +func_2F5C() +{ + var_00 = maps\mp\_matchdata::func_28DF(); + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + var_02 = var_00[var_01]; + var_03 = strtok(var_02,"_"); + if(var_03[0] == "iw5") + { + var_02 = var_03[0] + "_" + var_03[1]; + } + + if(var_03[0] == "alt") + { + var_02 = var_03[1] + "_" + var_03[2]; + } + + var_04 = maps\mp\_utility::getweaponclass(var_02); + if(!maps\mp\_utility::func_2829(var_02) && var_04 != "killstreak" && var_04 != "deathstreak" && var_04 != "other") + { + var_05 = self getplayerdata("bestWeapon","kills"); + var_06 = getmatchdata("players",self.clientid,"weaponStats",var_02,"kills"); + if(var_06 > var_05) + { + self setplayerdata("bestWeapon","kills",var_06); + var_07 = getmatchdata("players",self.clientid,"weaponStats",var_02,"shots"); + var_08 = getmatchdata("players",self.clientid,"weaponStats",var_02,"headShots"); + var_09 = getmatchdata("players",self.clientid,"weaponStats",var_02,"hits"); + var_0A = getmatchdata("players",self.clientid,"weaponStats",var_02,"deaths"); + var_0B = getmatchdata("players",self.clientid,"weaponStats",var_02,"XP"); + self setplayerdata("bestWeapon","shots",var_07); + self setplayerdata("bestWeapon","headShots",var_08); + self setplayerdata("bestWeapon","hits",var_09); + self setplayerdata("bestWeapon","deaths",var_0A); + self setplayerdata("bestWeaponXP",var_0B); + self setplayerdata("bestWeaponIndex",var_01); + } + } + } +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/gametypes/_gameobjects.gsc b/MW3/Xbox/MP/maps/mp/gametypes/_gameobjects.gsc new file mode 100644 index 0000000..84f87a8 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/gametypes/_gameobjects.gsc @@ -0,0 +1,2292 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_gameobjects.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 86 + * Decompile Time: 1320 ms + * Timestamp: 10/27/2023 2:25:28 AM +*******************************************************************/ + +//Function Number: 1 +main(param_00) +{ + var_01 = getentarray(); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + if(isdefined(var_01[var_02].script_gameobjectname)) + { + var_03 = 1; + var_04 = strtok(var_01[var_02].script_gameobjectname," "); + for(var_05 = 0;var_05 < var_41.size;var_05++ = "airdrop_pallet") + { + var_06 = 0; + while(var_06 < var_04.size) + { + if(var_04[var_06] == var_41[var_05]) + { + var_03 = 0; + break; + } + + var_06++ = var_41[param_00.size]; + } + + if(!var_03) + { + break; + } + } + + if(var_03) + { + var_01[var_02] delete(); + } + } + } +} + +//Function Number: 2 +init() +{ + level.numgametypereservedobjectives = 0; + precacheitem("briefcase_bomb_mp"); + precacheitem("briefcase_bomb_defuse_mp"); + precachemodel("prop_suitcase_bomb"); + level.objidstart = 0; + level thread onplayerconnect(); +} + +//Function Number: 3 +onplayerconnect() +{ + level endon("game_ended"); + for(;;) + { + level waittill("connected",var_00); + var_00 thread onplayerspawned(); + var_00 thread func_29A7(); + } +} + +//Function Number: 4 +onplayerspawned() +{ + self endon("disconnect"); + level endon("game_ended"); + for(;;) + { + self waittill("spawned_player"); + if(isdefined(self.gameobject_fauxspawn)) + { + self.gameobject_fauxspawn = undefined; + continue; + } + + thread ondeath(); + self.touchtriggers = []; + self.carryobject = undefined; + self.claimtrigger = undefined; + self.canpickupobject = 1; + self.killedinuse = undefined; + } +} + +//Function Number: 5 +ondeath() +{ + level endon("game_ended"); + self waittill("death"); + if(isdefined(self.carryobject)) + { + self.carryobject thread setdropped(); + } +} + +//Function Number: 6 +func_29A7() +{ + level endon("game_ended"); + self waittill("disconnect"); + if(isdefined(self.carryobject)) + { + self.carryobject thread setdropped(); + } +} + +//Function Number: 7 +func_29A8(param_00,param_01,param_02,param_03) +{ + var_04 = spawnstruct(); + var_04.type = "carryObject"; + var_04.curorigin = param_01.origin; + var_04.ownerteam = param_00; + var_04.entnum = param_01 getentitynumber(); + if(issubstr(param_01.classname,"use")) + { + var_04.triggertype = "use"; + } + else + { + var_04.triggertype = "proximity"; + } + + param_01.baseorigin = param_01.origin; + var_04.trigger = param_01; + var_04.useweapon = undefined; + if(!isdefined(param_03)) + { + param_03 = (0,0,0); + } + + var_04.offset3d = param_03; + for(var_05 = 0;var_05 < param_02.size;var_05++) + { + param_02[var_05].baseorigin = param_02[var_05].origin; + param_02[var_05].baseangles = param_02[var_05].angles; + } + + var_04.visuals = param_02; + var_04.compassicons = []; + var_04.objidallies = func_2A31(); + var_04.objidaxis = func_2A31(); + var_04.objidpingfriendly = 0; + var_04.objidpingenemy = 0; + level.objidstart = level.objidstart + 2; + objective_add(var_04.objidallies,"invisible",var_04.curorigin); + objective_add(var_04.objidaxis,"invisible",var_04.curorigin); + objective_team(var_04.objidallies,"allies"); + objective_team(var_04.objidaxis,"axis"); + var_04.objpoints["allies"] = maps\mp\gametypes\_objpoints::func_2996("objpoint_allies_" + var_04.entnum,var_04.curorigin + param_03,"allies",undefined); + var_04.objpoints["axis"] = maps\mp\gametypes\_objpoints::func_2996("objpoint_axis_" + var_04.entnum,var_04.curorigin + param_03,"axis",undefined); + var_04.objpoints["allies"].alpha = 0; + var_04.objpoints["axis"].alpha = 0; + var_04.carrier = undefined; + var_04.isresetting = 0; + var_04.interactteam = "none"; + var_04.allowweapons = 0; + var_04.worldicons = []; + var_04.carriervisible = 0; + var_04.visibleteam = "none"; + var_04.carryicon = undefined; + var_04.ondrop = undefined; + var_04.onpickup = undefined; + var_04.onreset = undefined; + if(var_04.triggertype == "use") + { + var_04 thread carryobjectusethink(); + } + else + { + var_04.curprogress = 0; + var_04.usetime = 0; + var_04.userate = 0; + var_04.teamusetimes = []; + var_04.teamusetexts = []; + var_04.numtouching["neutral"] = 0; + var_04.numtouching["axis"] = 0; + var_04.numtouching["allies"] = 0; + var_04.numtouching["none"] = 0; + var_04.touchlist["neutral"] = []; + var_04.touchlist["axis"] = []; + var_04.touchlist["allies"] = []; + var_04.touchlist["none"] = []; + var_04.claimteam = "none"; + var_04.claimplayer = undefined; + var_04.lastclaimteam = "none"; + var_04.lastclaimtime = 0; + var_04 thread carryobjectproxthink(); + } + + var_04 thread func_29D4(); + return var_04; +} + +//Function Number: 8 +carryobjectusethink() +{ + level endon("game_ended"); + for(;;) + { + self.trigger waittill("trigger",var_00); + if(self.isresetting) + { + continue; + } + + if(!maps\mp\_utility::isreallyalive(var_00)) + { + continue; + } + + if(!func_2A2D(var_00.pers["team"])) + { + continue; + } + + if(!var_00.canpickupobject) + { + continue; + } + + if(isdefined(var_00.throwinggrenade)) + { + continue; + } + + if(isdefined(self.carrier)) + { + continue; + } + + if(var_00 maps\mp\_utility::isusingremote()) + { + continue; + } + + func_29D2(var_00); + } +} + +//Function Number: 9 +carryobjectproxthink() +{ + thread func_29CE(); +} + +//Function Number: 10 +carryobjectproxthinkinstant() +{ + level endon("game_ended"); + for(;;) + { + self.trigger waittill("trigger",var_00); + if(self.isresetting) + { + continue; + } + + if(!maps\mp\_utility::isreallyalive(var_00)) + { + continue; + } + + if(!func_2A2D(var_00.pers["team"])) + { + continue; + } + + if(!var_00.canpickupobject) + { + continue; + } + + if(isdefined(var_00.throwinggrenade)) + { + continue; + } + + if(isdefined(self.carrier)) + { + continue; + } + + func_29D2(var_00); + } +} + +//Function Number: 11 +func_29CE() +{ + level endon("game_ended"); + thread proxtriggerthink(); + for(;;) + { + if(self.usetime && self.curprogress >= self.usetime) + { + self.curprogress = 0; + var_00 = func_29F0(); + if(isdefined(self.onenduse)) + { + self [[ self.onenduse ]](func_29F8(),var_00,isdefined(var_00)); + } + + if(isdefined(var_00)) + { + func_29D2(var_00); + } + + setclaimteam("none"); + self.claimplayer = undefined; + } + + if(self.claimteam != "none") + { + if(self.usetime) + { + if(!self.numtouching[self.claimteam]) + { + if(isdefined(self.onenduse)) + { + self [[ self.onenduse ]](func_29F8(),self.claimplayer,0); + } + + setclaimteam("none"); + self.claimplayer = undefined; + } + else + { + self.curprogress = self.curprogress + 50 * self.userate; + if(isdefined(self.onuseupdate)) + { + self [[ self.onuseupdate ]](func_29F8(),self.curprogress / self.usetime,50 * self.userate / self.usetime); + } + } + } + else + { + if(maps\mp\_utility::isreallyalive(self.claimplayer)) + { + func_29D2(self.claimplayer); + } + + setclaimteam("none"); + self.claimplayer = undefined; + } + } + + wait 0.05; + maps\mp\gametypes\_hostmigration::func_273E(); + } +} + +//Function Number: 12 +func_29D1(param_00) +{ + level endon("game_ended"); + self endon("death"); + self endon("disconnect"); + self.canpickupobject = 0; + for(;;) + { + if(distancesquared(self.origin,param_00) > 4096) + { + break; + } + + wait 0.2; + } + + self.canpickupobject = 1; +} + +//Function Number: 13 +func_29D2(param_00) +{ + if(isdefined(param_00.carryobject)) + { + if(isdefined(self.onpickupfailed)) + { + self [[ self.onpickupfailed ]](param_00); + } + + return; + } + + param_00 func_29D6(self); + func_29DE(param_00); + for(var_01 = 0;var_01 < self.visuals.size;var_01++) + { + self.visuals[var_01] hide(); + } + + self.trigger.origin = self.trigger.origin + (0,0,10000); + self notify("pickup_object"); + if(isdefined(self.onpickup)) + { + self [[ self.onpickup ]](param_00); + } + + func_2A0E(); + func_2A0B(); +} + +//Function Number: 14 +func_29D4() +{ + level endon("game_ended"); + var_00 = 5; + for(;;) + { + if(isdefined(self.carrier)) + { + self.curorigin = self.carrier.origin + (0,0,75); + self.objpoints["allies"] maps\mp\gametypes\_objpoints::updateorigin(self.curorigin); + self.objpoints["axis"] maps\mp\gametypes\_objpoints::updateorigin(self.curorigin); + if((self.visibleteam == "friendly" || self.visibleteam == "any") && isfriendlyteam("allies") && self.objidpingfriendly) + { + if(self.objpoints["allies"].isshown) + { + self.objpoints["allies"].alpha = self.objpoints["allies"].basealpha; + self.objpoints["allies"] fadeovertime(var_00 + 1); + self.objpoints["allies"].alpha = 0; + } + + objective_position(self.objidallies,self.curorigin); + } + else if((self.visibleteam == "friendly" || self.visibleteam == "any") && isfriendlyteam("axis") && self.objidpingfriendly) + { + if(self.objpoints["axis"].isshown) + { + self.objpoints["axis"].alpha = self.objpoints["axis"].basealpha; + self.objpoints["axis"] fadeovertime(var_00 + 1); + self.objpoints["axis"].alpha = 0; + } + + objective_position(self.objidaxis,self.curorigin); + } + + if((self.visibleteam == "enemy" || self.visibleteam == "any") && !isfriendlyteam("allies") && self.objidpingenemy) + { + if(self.objpoints["allies"].isshown) + { + self.objpoints["allies"].alpha = self.objpoints["allies"].basealpha; + self.objpoints["allies"] fadeovertime(var_00 + 1); + self.objpoints["allies"].alpha = 0; + } + + objective_position(self.objidallies,self.curorigin); + } + else if((self.visibleteam == "enemy" || self.visibleteam == "any") && !isfriendlyteam("axis") && self.objidpingenemy) + { + if(self.objpoints["axis"].isshown) + { + self.objpoints["axis"].alpha = self.objpoints["axis"].basealpha; + self.objpoints["axis"] fadeovertime(var_00 + 1); + self.objpoints["axis"].alpha = 0; + } + + objective_position(self.objidaxis,self.curorigin); + } + + maps\mp\_utility::func_29D5(var_00,"dropped","reset"); + continue; + } + + self.objpoints["allies"] maps\mp\gametypes\_objpoints::updateorigin(self.curorigin + self.offset3d); + self.objpoints["axis"] maps\mp\gametypes\_objpoints::updateorigin(self.curorigin + self.offset3d); + wait 0.05; + } +} + +//Function Number: 15 +func_80F4() +{ + self endon("disconnect"); + self endon("death"); + self endon("drop_object"); + level waittill("game_ended"); + if(isdefined(self.carryicon)) + { + self.carryicon.alpha = 0; + } +} + +//Function Number: 16 +func_29D6(param_00) +{ + self.carryobject = param_00; + thread trackcarrier(); + if(!param_00.allowweapons) + { + common_scripts\utility::_disableweapon(); + thread func_29E4(); + } + + if(isdefined(param_00.carryicon)) + { + if(level.splitscreen) + { + self.carryicon = maps\mp\gametypes\_hud_util::createicon(param_00.carryicon,33,33); + self.carryicon maps\mp\gametypes\_hud_util::setpoint("BOTTOM RIGHT","BOTTOM RIGHT",-50,-78); + } + else + { + self.carryicon = maps\mp\gametypes\_hud_util::createicon(param_00.carryicon,50,50); + self.carryicon maps\mp\gametypes\_hud_util::setpoint("BOTTOM RIGHT","BOTTOM RIGHT",-50,-65); + } + + self.carryicon.hidewheninmenu = 1; + thread func_80F4(); + } +} + +//Function Number: 17 +func_29D7() +{ + self.isresetting = 1; + self notify("reset"); + for(var_00 = 0;var_00 < self.visuals.size;var_00++) + { + self.visuals[var_00].origin = self.visuals[var_00].baseorigin; + self.visuals[var_00].angles = self.visuals[var_00].baseangles; + self.visuals[var_00] show(); + } + + self.trigger.origin = self.trigger.baseorigin; + self.curorigin = self.trigger.origin; + if(isdefined(self.onreset)) + { + self [[ self.onreset ]](); + } + + clearcarrier(); + func_2A0B(); + func_2A0E(); + self.isresetting = 0; +} + +//Function Number: 18 +func_29D8() +{ + if(isdefined(self.carrier)) + { + return 0; + } + + if(self.curorigin != self.trigger.baseorigin) + { + return 0; + } + + return 1; +} + +//Function Number: 19 +func_29D9(param_00,param_01) +{ + self.isresetting = 1; + for(var_02 = 0;var_02 < self.visuals.size;var_02++) + { + self.visuals[var_02].origin = self.origin; + self.visuals[var_02].angles = self.angles; + self.visuals[var_02] show(); + } + + self.trigger.origin = param_00; + self.curorigin = self.trigger.origin; + clearcarrier(); + func_2A0B(); + func_2A0E(); + self.isresetting = 0; +} + +//Function Number: 20 +func_29DA() +{ + if(isdefined(self.carryobject)) + { + self.carryobject thread setdropped(); + } +} + +//Function Number: 21 +setdropped() +{ + self.isresetting = 1; + self notify("dropped"); + if(isdefined(self.carrier) && self.carrier.team != "spectator") + { + var_00 = playerphysicstrace(self.carrier.origin + (0,0,20),self.carrier.origin - (0,0,2000),0,self.carrier.body); + var_01 = bullettrace(self.carrier.origin + (0,0,20),self.carrier.origin - (0,0,2000),0,self.carrier.body); + } + else + { + var_00 = playerphysicstrace(self.safeorigin + (0,0,20),self.safeorigin - (0,0,20),0,undefined); + var_01 = bullettrace(self.safeorigin + (0,0,20),self.safeorigin - (0,0,20),0,undefined); + } + + var_02 = self.carrier; + var_03 = 0; + if(isdefined(var_00)) + { + var_04 = randomfloat(360); + var_05 = var_00; + if(var_01["fraction"] < 1 && distance(var_01["position"],var_00) < 10) + { + var_06 = (cos(var_04),sin(var_04),0); + var_06 = vectornormalize(var_06 - var_01["normal"] * vectordot(var_06,var_01["normal"])); + var_07 = vectortoangles(var_06); + } + else + { + var_07 = (0,var_05,0); + } + + for(var_08 = 0;var_08 < self.visuals.size;var_08++) + { + self.visuals[var_08].origin = var_05; + self.visuals[var_08].angles = var_07; + self.visuals[var_08] show(); + } + + self.trigger.origin = var_05; + self.curorigin = self.trigger.origin; + thread pickuptimeout(); + } + + if(!isdefined(var_00)) + { + for(var_08 = 0;var_08 < self.visuals.size;var_08++) + { + self.visuals[var_08].origin = self.visuals[var_08].baseorigin; + self.visuals[var_08].angles = self.visuals[var_08].baseangles; + self.visuals[var_08] show(); + } + + self.trigger.origin = self.trigger.baseorigin; + self.curorigin = self.trigger.baseorigin; + } + + if(isdefined(self.ondrop)) + { + self [[ self.ondrop ]](var_02); + } + + clearcarrier(); + func_2A0E(); + func_2A0B(); + self.isresetting = 0; +} + +//Function Number: 22 +func_29DE(param_00) +{ + self.carrier = param_00; + thread func_2A13(); +} + +//Function Number: 23 +clearcarrier() +{ + if(!isdefined(self.carrier)) + { + return; + } + + self.carrier func_29E2(self); + self.carrier = undefined; + self notify("carrier_cleared"); +} + +//Function Number: 24 +pickuptimeout() +{ + self endon("pickup_object"); + self endon("stop_pickup_timeout"); + wait 0.05; + var_00 = getentarray("minefield","targetname"); + var_01 = getentarray("trigger_hurt","classname"); + var_02 = getentarray("radiation","targetname"); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + if(!self.visuals[0] istouching(var_02[var_03])) + { + continue; + } + + func_29D7(); + return; + } + + for(var_03 = 0;var_03 < var_00.size;var_03++) + { + if(!self.visuals[0] istouching(var_00[var_03])) + { + continue; + } + + func_29D7(); + return; + } + + for(var_03 = 0;var_03 < var_01.size;var_03++) + { + if(!self.visuals[0] istouching(var_01[var_03])) + { + continue; + } + + func_29D7(); + return; + } + + if(isdefined(self.autoresettime)) + { + wait self.autoresettime; + if(!isdefined(self.carrier)) + { + func_29D7(); + } + } +} + +//Function Number: 25 +func_29E2(param_00) +{ + if(isdefined(self.carryicon)) + { + self.carryicon maps\mp\gametypes\_hud_util::destroyelem(); + } + + if(isdefined(self)) + { + self.carryobject = undefined; + } + + self notify("drop_object"); + if(param_00.triggertype == "proximity") + { + thread func_29D1(param_00.trigger.origin); + } + + if(maps\mp\_utility::isreallyalive(self) && !param_00.allowweapons) + { + common_scripts\utility::_enableweapon(); + } +} + +//Function Number: 26 +trackcarrier() +{ + level endon("game_ended"); + self endon("disconnect"); + self endon("death"); + self endon("drop_object"); + while(isdefined(self.carryobject) && maps\mp\_utility::isreallyalive(self)) + { + if(self isonground()) + { + var_00 = bullettrace(self.origin + (0,0,20),self.origin - (0,0,20),0,undefined); + if(var_00["fraction"] < 1) + { + self.carryobject.safeorigin = var_00["position"]; + } + } + + wait 0.05; + } +} + +//Function Number: 27 +func_29E4() +{ + level endon("game_ended"); + self endon("disconnect"); + self endon("death"); + self endon("drop_object"); + for(;;) + { + while(self attackbuttonpressed() || self fragbuttonpressed() || self secondaryoffhandbuttonpressed() || self meleebuttonpressed()) + { + wait 0.05; + } + + while(!self attackbuttonpressed() && !self fragbuttonpressed() && !self secondaryoffhandbuttonpressed() && !self meleebuttonpressed()) + { + wait 0.05; + } + + if(isdefined(self.carryobject) && !self usebuttonpressed()) + { + self.carryobject thread setdropped(); + } + } +} + +//Function Number: 28 +deleteuseobject() +{ + maps\mp\_utility::_objective_delete(self.objidallies); + maps\mp\_utility::_objective_delete(self.objidaxis); + maps\mp\gametypes\_objpoints::deleteobjpoint(self.objpoints["allies"]); + maps\mp\gametypes\_objpoints::deleteobjpoint(self.objpoints["axis"]); + self.trigger = undefined; + self notify("deleted"); +} + +//Function Number: 29 +func_29E7(param_00,param_01,param_02,param_03) +{ + var_04 = spawnstruct(); + var_04.type = "useObject"; + var_04.curorigin = param_01.origin; + var_04.ownerteam = param_00; + var_04.entnum = param_01 getentitynumber(); + var_04.keyobject = undefined; + if(issubstr(param_01.classname,"use")) + { + var_04.triggertype = "use"; + } + else + { + var_04.triggertype = "proximity"; + } + + var_04.trigger = param_01; + for(var_05 = 0;var_05 < param_02.size;var_05++) + { + param_02[var_05].baseorigin = param_02[var_05].origin; + param_02[var_05].baseangles = param_02[var_05].angles; + } + + var_04.visuals = param_02; + if(!isdefined(param_03)) + { + param_03 = (0,0,0); + } + + var_04.offset3d = param_03; + var_04.compassicons = []; + var_04.objidallies = func_2A31(); + var_04.objidaxis = func_2A31(); + objective_add(var_04.objidallies,"invisible",var_04.curorigin); + objective_add(var_04.objidaxis,"invisible",var_04.curorigin); + objective_team(var_04.objidallies,"allies"); + objective_team(var_04.objidaxis,"axis"); + var_04.objpoints["allies"] = maps\mp\gametypes\_objpoints::func_2996("objpoint_allies_" + var_04.entnum,var_04.curorigin + param_03,"allies",undefined); + var_04.objpoints["axis"] = maps\mp\gametypes\_objpoints::func_2996("objpoint_axis_" + var_04.entnum,var_04.curorigin + param_03,"axis",undefined); + var_04.objpoints["allies"].alpha = 0; + var_04.objpoints["axis"].alpha = 0; + var_04.interactteam = "none"; + var_04.worldicons = []; + var_04.visibleteam = "none"; + var_04.onuse = undefined; + var_04.oncantuse = undefined; + var_04.usetext = "default"; + var_04.usetime = 10000; + var_04.curprogress = 0; + if(var_04.triggertype == "proximity") + { + var_04.teamusetimes = []; + var_04.teamusetexts = []; + var_04.numtouching["neutral"] = 0; + var_04.numtouching["axis"] = 0; + var_04.numtouching["allies"] = 0; + var_04.numtouching["none"] = 0; + var_04.touchlist["neutral"] = []; + var_04.touchlist["axis"] = []; + var_04.touchlist["allies"] = []; + var_04.touchlist["none"] = []; + var_04.userate = 0; + var_04.claimteam = "none"; + var_04.claimplayer = undefined; + var_04.lastclaimteam = "none"; + var_04.lastclaimtime = 0; + var_04 thread func_29F2(); + } + else + { + var_04.userate = 1; + var_04 thread func_29ED(); + } + + return var_04; +} + +//Function Number: 30 +func_29EC(param_00) +{ + self.keyobject = param_00; +} + +//Function Number: 31 +func_29ED() +{ + level endon("game_ended"); + self endon("deleted"); + for(;;) + { + self.trigger waittill("trigger",var_00); + if(!maps\mp\_utility::isreallyalive(var_00)) + { + continue; + } + + if(!func_2A2D(var_00.pers["team"])) + { + continue; + } + + if(!var_00 isonground()) + { + continue; + } + + if(!var_00 maps\mp\_utility::isjuggernaut() && maps\mp\_utility::func_2829(var_00 getcurrentweapon())) + { + continue; + } + + if(isdefined(self.keyobject) && !isdefined(var_00.carryobject) || var_00.carryobject != self.keyobject) + { + if(isdefined(self.oncantuse)) + { + self [[ self.oncantuse ]](var_00); + } + + continue; + } + + if(!var_00 common_scripts\utility::isweaponenabled()) + { + continue; + } + + var_01 = 1; + if(self.usetime > 0) + { + if(isdefined(self.onbeginuse)) + { + self [[ self.onbeginuse ]](var_00); + } + + if(!isdefined(self.keyobject)) + { + thread cantusehintthink(); + } + + var_02 = var_00.pers["team"]; + var_01 = func_2A04(var_00); + self notify("finished_use"); + if(isdefined(self.onenduse)) + { + self [[ self.onenduse ]](var_02,var_00,var_01); + } + } + + if(!var_01) + { + continue; + } + + if(isdefined(self.onuse)) + { + self [[ self.onuse ]](var_00); + } + } +} + +//Function Number: 32 +cantusehintthink() +{ + level endon("game_ended"); + self endon("deleted"); + self endon("finished_use"); + for(;;) + { + self.trigger waittill("trigger",var_00); + if(!maps\mp\_utility::isreallyalive(var_00)) + { + continue; + } + + if(!func_2A2D(var_00.pers["team"])) + { + continue; + } + + if(isdefined(self.oncantuse)) + { + self [[ self.oncantuse ]](var_00); + } + } +} + +//Function Number: 33 +func_29F0() +{ + var_00 = self.claimteam; + if(maps\mp\_utility::isreallyalive(self.claimplayer)) + { + var_01 = self.claimplayer; + } + else + { + var_01 = undefined; + } + + if(self.touchlist[var_00].size > 0) + { + var_02 = undefined; + var_03 = getarraykeys(self.touchlist[var_00]); + for(var_04 = 0;var_04 < var_03.size;var_04++) + { + var_05 = self.touchlist[var_00][var_03[var_04]]; + if(maps\mp\_utility::isreallyalive(var_05.player) && !isdefined(var_02) || var_05.starttime < var_02) + { + var_01 = var_05.player; + var_02 = var_05.starttime; + } + } + } + + return var_01; +} + +//Function Number: 34 +func_29F2() +{ + level endon("game_ended"); + self endon("deleted"); + thread proxtriggerthink(); + for(;;) + { + if(self.usetime && self.curprogress >= self.usetime) + { + self.curprogress = 0; + var_00 = func_29F0(); + if(isdefined(self.onenduse)) + { + self [[ self.onenduse ]](func_29F8(),var_00,isdefined(var_00)); + } + + if(isdefined(var_00) && isdefined(self.onuse)) + { + self [[ self.onuse ]](var_00); + } + + setclaimteam("none"); + self.claimplayer = undefined; + } + + if(self.claimteam != "none") + { + if(self.usetime) + { + if(!self.numtouching[self.claimteam]) + { + if(isdefined(self.onenduse)) + { + self [[ self.onenduse ]](func_29F8(),self.claimplayer,0); + } + + setclaimteam("none"); + self.claimplayer = undefined; + } + else + { + self.curprogress = self.curprogress + 50 * self.userate; + if(isdefined(self.onuseupdate)) + { + self [[ self.onuseupdate ]](func_29F8(),self.curprogress / self.usetime,50 * self.userate / self.usetime); + } + } + } + else + { + if(isdefined(self.onuse)) + { + self [[ self.onuse ]](self.claimplayer); + } + + setclaimteam("none"); + self.claimplayer = undefined; + } + } + + wait 0.05; + maps\mp\gametypes\_hostmigration::func_273E(); + } +} + +//Function Number: 35 +proxtriggerthink() +{ + level endon("game_ended"); + self endon("deleted"); + var_00 = self.entnum; + for(;;) + { + self.trigger waittill("trigger",var_01); + if(!maps\mp\_utility::isreallyalive(var_01)) + { + continue; + } + + if(isdefined(self.carrier)) + { + continue; + } + + if(var_01 maps\mp\_utility::isusingremote() || isdefined(var_01.spawningafterremotedeath)) + { + continue; + } + + if(isdefined(var_01.classname) && var_01.classname == "script_vehicle") + { + continue; + } + + if(level.gametype == "ctfpro") + { + if(isdefined(self.type) && self.type == "carryObject" && isdefined(var_01.carryflag)) + { + continue; + } + } + + if(func_2A2D(var_01.pers["team"],var_01) && self.claimteam == "none") + { + if(!isdefined(self.keyobject) || isdefined(var_01.carryobject) && var_01.carryobject == self.keyobject) + { + if(!func_29F5(var_01)) + { + continue; + } + + setclaimteam(var_01.pers["team"]); + self.claimplayer = var_01; + var_02 = getrelativeteam(var_01.pers["team"]); + if(isdefined(self.teamusetimes[var_02])) + { + self.usetime = self.teamusetimes[var_02]; + } + + if(self.usetime && isdefined(self.onbeginuse)) + { + self [[ self.onbeginuse ]](self.claimplayer); + } + } + else if(isdefined(self.oncantuse)) + { + self [[ self.oncantuse ]](var_01); + } + } + + if(self.usetime && maps\mp\_utility::isreallyalive(var_01) && !isdefined(var_01.touchtriggers[var_00])) + { + var_01 thread triggertouchthink(self); + } + } +} + +//Function Number: 36 +func_29F5(param_00) +{ + if(!isdefined(self.requireslos)) + { + return 1; + } + + var_01 = param_00 geteye(); + var_02 = self.trigger.origin + (0,0,32); + var_03 = bullettrace(var_01,var_02,0,undefined); + if(var_03["fraction"] != 1) + { + var_02 = self.trigger.origin + (0,0,16); + var_03 = bullettrace(var_01,var_02,0,undefined); + } + + if(var_03["fraction"] != 1) + { + var_02 = self.trigger.origin + (0,0,0); + var_03 = bullettrace(var_01,var_02,0,undefined); + } + + return var_03["fraction"] == 1; +} + +//Function Number: 37 +setclaimteam(param_00) +{ + if(self.claimteam == "none" && gettime() - self.lastclaimtime > 1000) + { + self.curprogress = 0; + } + else if(param_00 != "none" && param_00 != self.lastclaimteam) + { + self.curprogress = 0; + } + + self.lastclaimteam = self.claimteam; + self.lastclaimtime = gettime(); + self.claimteam = param_00; + func_29FF(); +} + +//Function Number: 38 +func_29F8() +{ + return self.claimteam; +} + +//Function Number: 39 +triggertouchthink(param_00) +{ + var_01 = self.pers["team"]; + param_00.numtouching[var_01]++; + var_02 = self.guid; + var_03 = spawnstruct(); + var_03.player = self; + var_03.starttime = gettime(); + param_00.touchlist[var_01][var_02] = var_03; + if(!isdefined(param_00.nousebar)) + { + param_00.nousebar = 0; + } + + self.touchtriggers[param_00.entnum] = param_00.trigger; + param_00 func_29FF(); + while(maps\mp\_utility::isreallyalive(self) && isdefined(param_00.trigger) && self istouching(param_00.trigger) && !level.gameended && param_00.usetime) + { + func_29FA(param_00,0); + wait 0.05; + } + + if(isdefined(self)) + { + func_29FA(param_00,1); + self.touchtriggers[param_00.entnum] = undefined; + } + + if(level.gameended) + { + return; + } + + param_00.touchlist[var_01][var_02] = undefined; + param_00.numtouching[var_01]--; + param_00 func_29FF(); +} + +//Function Number: 40 +func_29FA(param_00,param_01) +{ + if(param_01 || !param_00 func_2A2D(self.pers["team"]) || self.pers["team"] != param_00.claimteam || param_00.nousebar) + { + if(isdefined(self.proxbar)) + { + self.proxbar maps\mp\gametypes\_hud_util::hideelem(); + } + + if(isdefined(self.proxbartext)) + { + self.proxbartext maps\mp\gametypes\_hud_util::hideelem(); + } + + return; + } + + if(!isdefined(self.proxbar)) + { + self.proxbar = maps\mp\gametypes\_hud_util::createprimaryprogressbar(); + self.proxbar.lastuserate = -1; + self.proxbar.lasthostmigrationstate = 0; + } + + if(self.proxbar.hidden) + { + self.proxbar maps\mp\gametypes\_hud_util::func_26BD(); + self.proxbar.lastuserate = -1; + self.proxbar.lasthostmigrationstate = 0; + } + + if(!isdefined(self.proxbartext)) + { + self.proxbartext = maps\mp\gametypes\_hud_util::createprimaryprogressbartext(); + var_02 = param_00 getrelativeteam(self.pers["team"]); + if(isdefined(param_00.teamusetexts[var_02])) + { + self.proxbartext settext(param_00.teamusetexts[var_02]); + } + else + { + self.proxbartext settext(param_00.usetext); + } + } + + if(self.proxbartext.hidden) + { + self.proxbartext maps\mp\gametypes\_hud_util::func_26BD(); + var_02 = param_00 getrelativeteam(self.pers["team"]); + if(isdefined(param_00.teamusetexts[var_02])) + { + self.proxbartext settext(param_00.teamusetexts[var_02]); + } + else + { + self.proxbartext settext(param_00.usetext); + } + } + + if(self.proxbar.lastuserate != param_00.userate || self.proxbar.lasthostmigrationstate != isdefined(level.hostmigrationtimer)) + { + if(param_00.curprogress > param_00.usetime) + { + param_00.curprogress = param_00.usetime; + } + + var_03 = param_00.curprogress / param_00.usetime; + var_04 = 1000 / param_00.usetime * param_00.userate; + if(isdefined(level.hostmigrationtimer)) + { + var_04 = 0; + } + + self.proxbar maps\mp\gametypes\_hud_util::updatebar(var_03,var_04); + self.proxbar.lastuserate = param_00.userate; + self.proxbar.lasthostmigrationstate = isdefined(level.hostmigrationtimer); + } +} + +//Function Number: 41 +func_29FF() +{ + var_00 = self.numtouching[self.claimteam]; + var_01 = 0; + var_02 = 0; + if(self.claimteam != "axis") + { + var_01 = var_01 + self.numtouching["axis"]; + } + + if(self.claimteam != "allies") + { + var_01 = var_01 + self.numtouching["allies"]; + } + + foreach(var_04 in self.touchlist[self.claimteam]) + { + if(var_04.player.pers["team"] != self.claimteam) + { + continue; + } + + if(var_04.player.objectivescaler == 1) + { + continue; + } + + var_00 = var_00 * var_04.player.objectivescaler; + var_02 = var_04.player.objectivescaler; + } + + self.userate = 0; + if(var_00 && !var_01) + { + self.userate = min(var_00,4); + } + + if(isdefined(self.isarena) && self.isarena && var_02 != 0) + { + self.userate = 1 * var_02; + return; + } + + if(isdefined(self.isarena) && self.isarena) + { + self.userate = 1; + } +} + +//Function Number: 42 +attachusemodel() +{ + self endon("death"); + self endon("disconnect"); + self endon("done_using"); + wait 1.3; + self attach("prop_suitcase_bomb","tag_inhand",1); + self.attachedusemodel = "prop_suitcase_bomb"; +} + +//Function Number: 43 +func_2A04(param_00) +{ + param_00 notify("use_hold"); + param_00 playerlinkto(self.trigger); + param_00 playerlinkedoffsetenable(); + param_00 clientclaimtrigger(self.trigger); + param_00.claimtrigger = self.trigger; + var_01 = self.useweapon; + var_02 = param_00 getcurrentweapon(); + if(isdefined(var_01)) + { + if(var_02 == var_01) + { + var_02 = param_00.lastnonuseweapon; + } + + param_00.lastnonuseweapon = var_02; + param_00 maps\mp\_utility::_giveweapon(var_01); + param_00 setweaponammostock(var_01,0); + param_00 setweaponammoclip(var_01,0); + param_00 switchtoweapon(var_01); + param_00 thread attachusemodel(); + } + else + { + param_00 common_scripts\utility::_disableweapon(); + } + + self.curprogress = 0; + self.inuse = 1; + self.userate = 0; + param_00 thread personalusebar(self); + var_03 = func_2A08(param_00,var_02); + if(isdefined(param_00)) + { + param_00 detachusemodels(); + param_00 notify("done_using"); + } + + if(isdefined(var_01) && isdefined(param_00)) + { + param_00 thread func_2A07(var_01); + } + + if(isdefined(var_03) && var_03) + { + return 1; + } + + if(isdefined(param_00)) + { + param_00.claimtrigger = undefined; + if(isdefined(var_01)) + { + if(var_02 != "none") + { + param_00 switchtoweapon(var_02); + } + else + { + param_00 takeweapon(var_01); + } + } + else + { + param_00 common_scripts\utility::_enableweapon(); + } + + param_00 unlink(); + if(!maps\mp\_utility::isreallyalive(param_00)) + { + param_00.killedinuse = 1; + } + } + + self.inuse = 0; + self.trigger releaseclaimedtrigger(); + return 0; +} + +//Function Number: 44 +detachusemodels() +{ + if(isdefined(self.attachedusemodel)) + { + self detach(self.attachedusemodel,"tag_inhand"); + self.attachedusemodel = undefined; + } +} + +//Function Number: 45 +func_2A07(param_00) +{ + self endon("use_hold"); + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + while(self getcurrentweapon() == param_00 && !isdefined(self.throwinggrenade)) + { + wait 0.05; + } + + self takeweapon(param_00); +} + +//Function Number: 46 +func_2A08(param_00,param_01) +{ + level endon("game_ended"); + self endon("disabled"); + var_02 = self.useweapon; + var_03 = 1; + var_04 = 0; + var_05 = 1.5; + while(maps\mp\_utility::isreallyalive(param_00) && param_00 istouching(self.trigger) && param_00 usebuttonpressed() && !isdefined(param_00.throwinggrenade) && !param_00 meleebuttonpressed() && self.curprogress < self.usetime && self.userate || var_03 && !var_03 && var_04 > var_05) + { + var_04 = var_04 + 0.05; + if(!isdefined(var_02) || param_00 getcurrentweapon() == var_02) + { + self.curprogress = self.curprogress + 50 * self.userate; + self.userate = 1 * param_00.objectivescaler; + var_03 = 0; + } + else + { + self.userate = 0; + } + + if(self.curprogress >= self.usetime) + { + self.inuse = 0; + param_00 clientreleasetrigger(self.trigger); + param_00.claimtrigger = undefined; + if(isdefined(var_02)) + { + param_00 setweaponammostock(var_02,1); + param_00 setweaponammoclip(var_02,1); + if(param_01 != "none") + { + param_00 switchtoweapon(param_01); + } + else + { + param_00 takeweapon(var_02); + } + } + else + { + param_00 common_scripts\utility::_enableweapon(); + } + + param_00 unlink(); + return maps\mp\_utility::isreallyalive(param_00); + } + + wait 0.05; + maps\mp\gametypes\_hostmigration::func_273E(); + } + + return 0; +} + +//Function Number: 47 +personalusebar(param_00) +{ + self endon("disconnect"); + var_01 = maps\mp\gametypes\_hud_util::createprimaryprogressbar(); + var_02 = maps\mp\gametypes\_hud_util::createprimaryprogressbartext(); + var_02 settext(param_00.usetext); + var_03 = -1; + var_04 = isdefined(level.hostmigrationtimer); + while(maps\mp\_utility::isreallyalive(self) && param_00.inuse && !level.gameended) + { + if(var_03 != param_00.userate || var_04 != isdefined(level.hostmigrationtimer)) + { + if(param_00.curprogress > param_00.usetime) + { + param_00.curprogress = param_00.usetime; + } + + var_05 = param_00.curprogress / param_00.usetime; + var_06 = 1000 / param_00.usetime * param_00.userate; + if(isdefined(level.hostmigrationtimer)) + { + var_06 = 0; + } + + var_01 maps\mp\gametypes\_hud_util::updatebar(var_05,var_06); + if(!param_00.userate) + { + var_01 maps\mp\gametypes\_hud_util::hideelem(); + var_02 maps\mp\gametypes\_hud_util::hideelem(); + } + else + { + var_01 maps\mp\gametypes\_hud_util::func_26BD(); + var_02 maps\mp\gametypes\_hud_util::func_26BD(); + } + } + + var_03 = param_00.userate; + var_04 = isdefined(level.hostmigrationtimer); + wait 0.05; + } + + var_01 maps\mp\gametypes\_hud_util::destroyelem(); + var_02 maps\mp\gametypes\_hud_util::destroyelem(); +} + +//Function Number: 48 +updatetrigger() +{ + if(self.triggertype != "use") + { + return; + } + + if(self.interactteam == "none") + { + self.trigger.origin = self.trigger.origin - (0,0,50000); + return; + } + + if(self.interactteam == "any") + { + self.trigger.origin = self.curorigin; + self.trigger setteamfortrigger("none"); + return; + } + + if(self.interactteam == "friendly") + { + self.trigger.origin = self.curorigin; + if(self.ownerteam == "allies") + { + self.trigger setteamfortrigger("allies"); + return; + } + + if(self.ownerteam == "axis") + { + self.trigger setteamfortrigger("axis"); + return; + } + + self.trigger.origin = self.trigger.origin - (0,0,50000); + return; + } + + if(self.interactteam == "enemy") + { + self.trigger.origin = self.curorigin; + if(self.ownerteam == "allies") + { + self.trigger setteamfortrigger("axis"); + return; + } + + if(self.ownerteam == "axis") + { + self.trigger setteamfortrigger("allies"); + return; + } + + self.trigger setteamfortrigger("none"); + return; + } +} + +//Function Number: 49 +func_2A0B() +{ + if(self.visibleteam == "any") + { + updateworldicon("friendly",1); + updateworldicon("enemy",1); + return; + } + + if(self.visibleteam == "friendly") + { + updateworldicon("friendly",1); + updateworldicon("enemy",0); + return; + } + + if(self.visibleteam == "enemy") + { + updateworldicon("friendly",0); + updateworldicon("enemy",1); + return; + } + + updateworldicon("friendly",0); + updateworldicon("enemy",0); +} + +//Function Number: 50 +updateworldicon(param_00,param_01) +{ + if(!isdefined(self.worldicons[param_00])) + { + param_01 = 0; + } + + var_02 = getupdateteams(param_00); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + var_04 = "objpoint_" + var_02[var_03] + "_" + self.entnum; + var_05 = maps\mp\gametypes\_objpoints::func_299C(var_04); + var_05 notify("stop_flashing_thread"); + var_05 thread maps\mp\gametypes\_objpoints::stopflashing(); + if(param_01) + { + var_05 setshader(self.worldicons[param_00],level.objpointsize,level.objpointsize); + var_05 fadeovertime(0.05); + var_05.alpha = var_05.basealpha; + var_05.isshown = 1; + if(isdefined(self.compassicons[param_00])) + { + var_05 setwaypoint(1,1); + } + else + { + var_05 setwaypoint(1,0); + } + + if(self.type == "carryObject") + { + if(isdefined(self.carrier) && !shouldpingobject(param_00)) + { + var_05 settargetent(self.carrier); + } + else + { + var_05 cleartargetent(); + } + } + } + else + { + var_05 fadeovertime(0.05); + var_05.alpha = 0; + var_05.isshown = 0; + var_05 cleartargetent(); + } + + var_05 thread hideworldiconongameend(); + } +} + +//Function Number: 51 +hideworldiconongameend() +{ + self notify("hideWorldIconOnGameEnd"); + self endon("hideWorldIconOnGameEnd"); + self endon("death"); + level waittill("game_ended"); + if(isdefined(self)) + { + self.alpha = 0; + } +} + +//Function Number: 52 +updatetimer(param_00,param_01) +{ +} + +//Function Number: 53 +func_2A0E() +{ + if(self.visibleteam == "any") + { + updatecompassicon("friendly",1); + updatecompassicon("enemy",1); + return; + } + + if(self.visibleteam == "friendly") + { + updatecompassicon("friendly",1); + updatecompassicon("enemy",0); + return; + } + + if(self.visibleteam == "enemy") + { + updatecompassicon("friendly",0); + updatecompassicon("enemy",1); + return; + } + + updatecompassicon("friendly",0); + updatecompassicon("enemy",0); +} + +//Function Number: 54 +updatecompassicon(param_00,param_01) +{ + var_02 = getupdateteams(param_00); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + var_04 = param_01; + if(!var_04 && func_2A12(var_02[var_03])) + { + var_04 = 1; + } + + var_05 = self.objidallies; + if(var_02[var_03] == "axis") + { + var_05 = self.objidaxis; + } + + if(!isdefined(self.compassicons[param_00]) || !var_04) + { + objective_state(var_05,"invisible"); + continue; + } + + objective_icon(var_05,self.compassicons[param_00]); + objective_state(var_05,"active"); + if(self.type == "carryObject") + { + if(maps\mp\_utility::isreallyalive(self.carrier) && !shouldpingobject(param_00)) + { + objective_onentity(var_05,self.carrier); + continue; + } + + objective_position(var_05,self.curorigin); + } + } +} + +//Function Number: 55 +shouldpingobject(param_00) +{ + if(param_00 == "friendly" && self.objidpingfriendly) + { + return 1; + } + else if(param_00 == "enemy" && self.objidpingenemy) + { + return 1; + } + + return 0; +} + +//Function Number: 56 +getupdateteams(param_00) +{ + var_01 = []; + if(param_00 == "friendly") + { + if(isfriendlyteam("allies")) + { + } + else if(isfriendlyteam("axis")) + { + } + } + else if(var_01 == "enemy") + { + if(!isfriendlyteam("allies")) + { + } + + if(!isfriendlyteam("axis")) + { + } + } + + return var_41; +} + +//Function Number: 57 +func_2A12(param_00) +{ + if(!isdefined(self.carrier)) + { + return 0; + } + + if(self.carrier maps\mp\_utility::func_27AF("specialty_gpsjammer")) + { + return 0; + } + + return getteamradar(param_00); +} + +//Function Number: 58 +func_2A13() +{ + self endon("death"); + self endon("carrier_cleared"); + for(;;) + { + level waittill("radar_status_change"); + func_2A0E(); + } +} + +//Function Number: 59 +setownerteam(param_00) +{ + self.ownerteam = param_00; + updatetrigger(); + func_2A0E(); + func_2A0B(); +} + +//Function Number: 60 +func_2A15() +{ + return self.ownerteam; +} + +//Function Number: 61 +setusetime(param_00) +{ + self.usetime = int(param_00 * 1000); +} + +//Function Number: 62 +setusetext(param_00) +{ + self.usetext = param_00; +} + +//Function Number: 63 +func_2A18(param_00,param_01) +{ + self.teamusetimes[param_00] = int(param_01 * 1000); +} + +//Function Number: 64 +setteamusetext(param_00,param_01) +{ + self.teamusetexts[param_00] = param_01; +} + +//Function Number: 65 +setusehinttext(param_00) +{ + self.trigger sethintstring(param_00); +} + +//Function Number: 66 +allowcarry(param_00) +{ + self.interactteam = param_00; +} + +//Function Number: 67 +allowuse(param_00) +{ + self.interactteam = param_00; + updatetrigger(); +} + +//Function Number: 68 +setvisibleteam(param_00) +{ + self.visibleteam = param_00; + func_2A0E(); + func_2A0B(); +} + +//Function Number: 69 +setmodelvisibility(param_00) +{ + if(param_00) + { + for(var_01 = 0;var_01 < self.visuals.size;var_01++) + { + self.visuals[var_01] show(); + if(self.visuals[var_01].classname == "script_brushmodel" || self.visuals[var_01].classname == "script_model") + { + foreach(var_03 in level.players) + { + if(var_03 istouching(self.visuals[var_01])) + { + var_03 maps\mp\_utility::_suicide(); + } + } + + self.visuals[var_01] thread func_2A20(); + } + } + + return; + } + + for(var_01 = 0;var_01 < self.visuals.size;var_01++) + { + self.visuals[var_01] hide(); + if(self.visuals[var_01].classname == "script_brushmodel" || self.visuals[var_01].classname == "script_model") + { + self.visuals[var_01] notify("changing_solidness"); + self.visuals[var_01] notsolid(); + } + } +} + +//Function Number: 70 +func_2A20() +{ + self endon("death"); + self notify("changing_solidness"); + self endon("changing_solidness"); + for(;;) + { + for(var_00 = 0;var_00 < level.players.size;var_00++) + { + if(level.players[var_00] istouching(self)) + { + break; + } + } + + if(var_00 == level.players.size) + { + self solid(); + break; + } + + wait 0.05; + } +} + +//Function Number: 71 +setcarriervisible(param_00) +{ + self.carriervisible = param_00; +} + +//Function Number: 72 +setcanuse(param_00) +{ + self.useteam = param_00; +} + +//Function Number: 73 +set2dicon(param_00,param_01) +{ + self.compassicons[param_00] = param_01; + func_2A0E(); +} + +//Function Number: 74 +func_2A25(param_00,param_01) +{ + self.worldicons[param_00] = param_01; + func_2A0B(); +} + +//Function Number: 75 +func_2A26(param_00,param_01) +{ + self.worlduseicons[param_00] = param_01; +} + +//Function Number: 76 +setcarryicon(param_00) +{ + self.carryicon = param_00; +} + +//Function Number: 77 +disableobject() +{ + self notify("disabled"); + if(self.type == "carryObject") + { + if(isdefined(self.carrier)) + { + self.carrier func_29E2(self); + } + + for(var_00 = 0;var_00 < self.visuals.size;var_00++) + { + self.visuals[var_00] hide(); + } + } + + self.trigger common_scripts\utility::trigger_off(); + setvisibleteam("none"); +} + +//Function Number: 78 +enableobject() +{ + if(self.type == "carryObject") + { + for(var_00 = 0;var_00 < self.visuals.size;var_00++) + { + self.visuals[var_00] show(); + } + } + + self.trigger common_scripts\utility::trigger_on(); + setvisibleteam("any"); +} + +//Function Number: 79 +getrelativeteam(param_00) +{ + if(param_00 == self.ownerteam) + { + return "friendly"; + } + + return "enemy"; +} + +//Function Number: 80 +isfriendlyteam(param_00) +{ + if(self.ownerteam == "any") + { + return 1; + } + + if(self.ownerteam == param_00) + { + return 1; + } + + return 0; +} + +//Function Number: 81 +func_2A2D(param_00,param_01) +{ + switch(self.interactteam) + { + case "none": + return 0; + + case "any": + return 1; + + case "friendly": + if(param_00 == self.ownerteam) + { + return 1; + } + else + { + return 0; + } + + break; + + case "enemy": + if(param_00 != self.ownerteam) + { + return 1; + } + else + { + return 0; + } + + break; + + default: + return 0; + } +} + +//Function Number: 82 +isteam(param_00) +{ + if(param_00 == "neutral") + { + return 1; + } + + if(param_00 == "allies") + { + return 1; + } + + if(param_00 == "axis") + { + return 1; + } + + if(param_00 == "any") + { + return 1; + } + + if(param_00 == "none") + { + return 1; + } + + return 0; +} + +//Function Number: 83 +func_2A2F(param_00) +{ + if(param_00 == "friendly") + { + return 1; + } + + if(param_00 == "enemy") + { + return 1; + } + + if(param_00 == "any") + { + return 1; + } + + if(param_00 == "none") + { + return 1; + } + + return 0; +} + +//Function Number: 84 +getenemyteam(param_00) +{ + if(param_00 == "neutral") + { + return "none"; + } + + if(param_00 == "allies") + { + return "axis"; + } + + return "allies"; +} + +//Function Number: 85 +func_2A31() +{ + if(!isdefined(level.reclaimedreservedobjectives) || level.reclaimedreservedobjectives.size < 1) + { + var_00 = level.numgametypereservedobjectives; + level.numgametypereservedobjectives++; + } + else + { + var_00 = level.reclaimedreservedobjectives[level.reclaimedreservedobjectives.size - 1]; + level.reclaimedreservedobjectives[level.reclaimedreservedobjectives.size - 1] = undefined; + } + + if(var_00 > 31) + { + var_00 = 31; + } + + return var_00; +} + +//Function Number: 86 +getlabel() +{ + var_00 = self.trigger.script_label; + if(!isdefined(var_00)) + { + var_00 = ""; + return var_00; + } + + if(var_00[0] != "_") + { + return "_" + var_00; + } + + return var_00; +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/gametypes/_gamescore.gsc b/MW3/Xbox/MP/maps/mp/gametypes/_gamescore.gsc new file mode 100644 index 0000000..cc1c6e2 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/gametypes/_gamescore.gsc @@ -0,0 +1,443 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_gamescore.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 20 + * Decompile Time: 325 ms + * Timestamp: 10/27/2023 2:28:54 AM +*******************************************************************/ + +//Function Number: 1 +func_26D0() +{ + func_26F4(); + if(!level.placement["all"].size) + { + return undefined; + } + + return level.placement["all"][0]; +} + +//Function Number: 2 +getlosingplayers() +{ + func_26F4(); + var_00 = level.placement["all"]; + var_01 = []; + foreach(var_03 in var_00) + { + if(var_03 == level.placement["all"][0]) + { + continue; + } + + var_01[var_01.size] = var_03; + } + + return var_01; +} + +//Function Number: 3 +func_26D3(param_00,param_01,param_02,param_03,param_04) +{ + if(!isdefined(param_03)) + { + param_03 = 0; + } + + if(!isdefined(param_04)) + { + param_04 = 0; + } + + var_05 = param_01.pers["score"]; + onplayerscore(param_00,param_01,param_02); + if(var_05 == param_01.pers["score"]) + { + return; + } + + if(!param_01 maps\mp\_utility::rankingenabled() && !level.hardcoremode && !param_04) + { + param_01 thread maps\mp\gametypes\_rank::xppointspopup(param_01.pers["score"] - var_05,0,(0.85,0.85,0.85),0); + } + + param_01 maps\mp\gametypes\_persistence::statadd("score",param_01.pers["score"] - var_05); + param_01.score = param_01.pers["score"]; + param_01 maps\mp\gametypes\_persistence::func_26D8("round","score",param_01.score); + if(!level.teambased) + { + thread sendupdateddmscores(); + } + + if(!param_03) + { + param_01 maps\mp\gametypes\_gamelogic::func_26DA(); + } + + var_06 = param_01 maps\mp\gametypes\_gamelogic::func_26DB(); +} + +//Function Number: 4 +onplayerscore(param_00,param_01,param_02) +{ + var_03 = maps\mp\gametypes\_rank::getscoreinfovalue(param_00); + param_01.pers["score"] = param_01.pers["score"] + var_03 * level.objectivepointsmod; +} + +//Function Number: 5 +_setplayerscore(param_00,param_01) +{ + if(param_01 == param_00.pers["score"]) + { + return; + } + + param_00.pers["score"] = param_01; + param_00.score = param_00.pers["score"]; + param_00 thread maps\mp\gametypes\_gamelogic::func_26DB(); +} + +//Function Number: 6 +_getplayerscore(param_00) +{ + return param_00.pers["score"]; +} + +//Function Number: 7 +giveteamscoreforobjective(param_00,param_01) +{ + param_01 = param_01 * level.objectivepointsmod; + var_02 = game["teamScores"][param_00]; + var_03 = level.otherteam[param_00]; + if(game["teamScores"][param_00] > game["teamScores"][var_03]) + { + level.waswinning = param_00; + } + else if(game["teamScores"][var_03] > game["teamScores"][param_00]) + { + level.waswinning = var_03; + } + + _setteamscore(param_00,func_26EE(param_00) + param_01); + var_04 = "none"; + if(game["teamScores"][param_00] > game["teamScores"][var_03]) + { + var_04 = param_00; + } + else if(game["teamScores"][var_03] > game["teamScores"][param_00]) + { + var_04 = var_03; + } + + if(!level.splitscreen && var_04 != "none" && var_04 != level.waswinning && gettime() - level.laststatustime > 5000 && maps\mp\_utility::func_26E4() != 1) + { + level.laststatustime = gettime(); + maps\mp\_utility::func_26E5("lead_taken",var_04,"status"); + if(level.waswinning != "none") + { + maps\mp\_utility::func_26E5("lead_lost",level.waswinning,"status"); + } + } + + if(var_04 != "none") + { + level.waswinning = var_04; + } +} + +//Function Number: 8 +func_26E6() +{ + if(game["teamScores"]["allies"] > game["teamScores"]["axis"]) + { + return "allies"; + } + else if(game["teamScores"]["allies"] < game["teamScores"]["axis"]) + { + return "axis"; + } + + return "none"; +} + +//Function Number: 9 +_setteamscore(param_00,param_01) +{ + if(param_01 == game["teamScores"][param_00]) + { + return; + } + + game["teamScores"][param_00] = param_01; + func_26EB(param_00); + if((game["status"] == "overtime" && !isdefined(level.overtimescorewinoverride)) || isdefined(level.overtimescorewinoverride) && !level.overtimescorewinoverride) + { + thread maps\mp\gametypes\_gamelogic::func_26E9(); + return; + } + + thread maps\mp\gametypes\_gamelogic::func_26EA(param_00); + thread maps\mp\gametypes\_gamelogic::func_26DB(); +} + +//Function Number: 10 +func_26EB(param_00) +{ + var_01 = 0; + if(!maps\mp\_utility::func_26EC() || !maps\mp\_utility::isobjectivebased()) + { + var_01 = func_26EE(param_00); + } + else + { + var_01 = game["roundsWon"][param_00]; + } + + setteamscore(param_00,var_01); +} + +//Function Number: 11 +func_26EE(param_00) +{ + return game["teamScores"][param_00]; +} + +//Function Number: 12 +sendupdatedteamscores() +{ + level notify("updating_scores"); + level endon("updating_scores"); + wait 0.05; + maps\mp\_utility::waittillslowprocessallowed(); + foreach(var_01 in level.players) + { + var_01 updatescores(); + } +} + +//Function Number: 13 +sendupdateddmscores() +{ + level notify("updating_dm_scores"); + level endon("updating_dm_scores"); + wait 0.05; + maps\mp\_utility::waittillslowprocessallowed(); + for(var_00 = 0;var_00 < level.players.size;var_00++) + { + level.players[var_00] updatedmscores(); + level.players[var_00].updateddmscores = 1; + } +} + +//Function Number: 14 +func_26F3() +{ + var_00 = 0; + var_01 = level.placement["all"].size; + var_02 = 0; + for(var_03 = 0;var_03 < var_01;var_03++) + { + if(level.placement["all"][var_03] == self) + { + var_02 = 1; + } + + if(var_02) + { + level.placement["all"][var_03] = level.placement["all"][var_03 + 1]; + } + } + + if(!var_02) + { + return; + } + + level.placement["all"][var_01 - 1] = undefined; + if(level.teambased) + { + updateteamplacement(); + return; + } + + var_01 = level.placement["all"].size; + for(var_03 = 0;var_03 < var_01;var_03++) + { + var_04 = level.placement["all"][var_03]; + var_04 notify("update_outcome"); + } +} + +//Function Number: 15 +func_26F4() +{ + var_00 = []; + foreach(var_02 in level.players) + { + if(isdefined(var_02.connectedpostgame) || var_02.pers["team"] != "allies" && var_02.pers["team"] != "axis") + { + continue; + } + + var_00[var_00.size] = var_02; + } + + for(var_04 = 1;var_04 < var_00.size;var_04++) + { + var_02 = var_00[var_04]; + var_05 = var_02.score; + for(var_06 = var_04 - 1;var_06 >= 0 && getbetterplayer(var_02,var_00[var_06]) == var_02;var_06--) + { + var_00[var_06 + 1] = var_00[var_06]; + } + + var_00[var_06 + 1] = var_02; + } + + level.placement["all"] = var_00; + if(level.teambased) + { + updateteamplacement(); + } +} + +//Function Number: 16 +getbetterplayer(param_00,param_01) +{ + if(param_00.score > param_01.score) + { + return param_00; + } + + if(param_01.score > param_00.score) + { + return param_01; + } + + if(param_00.deaths < param_01.deaths) + { + return param_00; + } + + if(param_01.deaths < param_00.deaths) + { + return param_01; + } + + if(common_scripts\utility::cointoss()) + { + return param_00; + } + + return param_01; +} + +//Function Number: 17 +updateteamplacement() +{ + var_00["allies"] = []; + var_01 = level.placement["all"]; + var_02 = var_01.size; + for(var_03 = 0;var_03 < var_02;var_03++ = var_41["spectator"]) + { + var_04 = var_01[var_03]; + var_05 = var_04.pers["team"]; + var_41[var_05][var_41[var_05].size] = var_04; + } + + level.placement["allies"] = var_41["allies"]; + level.placement["axis"] = var_41["axis"]; +} + +//Function Number: 18 +func_26F8() +{ + wait 0.2; + var_00 = 0; + for(;;) + { + var_01 = 0; + var_02 = level.players; + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + var_04 = var_02[var_03]; + if(!isdefined(var_04)) + { + continue; + } + + if(isdefined(var_04.updateddmscores)) + { + continue; + } + + var_04.updateddmscores = 1; + var_04 updatedmscores(); + var_01 = 1; + wait 0.5; + } + + if(!var_01) + { + wait 3; + } + } +} + +//Function Number: 19 +func_26F9(param_00) +{ + self endon("disconnect"); + param_00 endon("disconnect"); + wait 0.05; + maps\mp\_utility::waittillslowprocessallowed(); + if(self.pers["team"] != "axis" && self.pers["team"] != "allies") + { + return; + } + + if(self.pers["team"] == param_00.pers["team"]) + { + return; + } + + self thread [[ level.onxpevent ]]("assist"); + maps\mp\_utility::func_26FB("assists",1); + self.assists = maps\mp\_utility::getpersstat("assists"); + maps\mp\_utility::incplayerstat("assists",1); + maps\mp\gametypes\_persistence::func_26D8("round","assists",self.assists); + func_26D3("assist",self,param_00); + maps\mp\killstreaks\_killstreaks::giveadrenaline("assist"); + thread maps\mp\gametypes\_missions::func_26FF(); +} + +//Function Number: 20 +func_2700(param_00) +{ + self endon("disconnect"); + param_00 endon("disconnect"); + wait 0.05; + maps\mp\_utility::waittillslowprocessallowed(); + if(self.pers["team"] != "axis" && self.pers["team"] != "allies") + { + return; + } + + if(self.pers["team"] == param_00.pers["team"]) + { + return; + } + + self thread [[ level.onxpevent ]]("assist"); + self thread [[ level.onxpevent ]]("assist"); + maps\mp\_utility::func_26FB("assists",1); + self.assists = maps\mp\_utility::getpersstat("assists"); + maps\mp\_utility::incplayerstat("assists",1); + maps\mp\gametypes\_persistence::func_26D8("round","assists",self.assists); + func_26D3("assist",self,param_00); + thread maps\mp\gametypes\_hud_message::func_2701("shield_assist"); + thread maps\mp\gametypes\_missions::func_26FF(); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/gametypes/_globallogic.gsc b/MW3/Xbox/MP/maps/mp/gametypes/_globallogic.gsc new file mode 100644 index 0000000..5471043 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/gametypes/_globallogic.gsc @@ -0,0 +1,190 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_globallogic.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 9 + * Decompile Time: 136 ms + * Timestamp: 10/27/2023 2:25:28 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level.splitscreen = issplitscreen(); + level.ps3 = getdvar("ps3Game") == "true"; + level.xenon = getdvar("xenonGame") == "true"; + level.console = level.ps3 || level.xenon; + level.onlinegame = getdvarint("onlinegame"); + level.rankedmatch = !level.onlinegame || !getdvarint("xblive_privatematch"); + level.script = tolower(getdvar("mapname")); + level.gametype = tolower(getdvar("g_gametype")); + level.otherteam["allies"] = "axis"; + level.otherteam["axis"] = "allies"; + level.teambased = 0; + level.objectivebased = 0; + level.endgameontimelimit = 1; + level.showingfinalkillcam = 0; + level.tispawndelay = getdvarint("scr_tispawndelay"); + if(!isdefined(level.tweakablesinitialized)) + { + maps\mp\gametypes\_tweakables::init(); + } + + precachestring(&"MP_HALFTIME"); + precachestring(&"MP_OVERTIME"); + precachestring(&"MP_ROUNDEND"); + precachestring(&"MP_INTERMISSION"); + precachestring(&"MP_SWITCHING_SIDES"); + precachestring(&"MP_FRIENDLY_FIRE_WILL_NOT"); + precachestring(&"PLATFORM_REVIVE"); + precachestring(&"MP_OBITUARY_NEUTRAL"); + precachestring(&"MP_OBITUARY_FRIENDLY"); + precachestring(&"MP_OBITUARY_ENEMY"); + if(level.splitscreen) + { + precachestring(&"MP_ENDED_GAME"); + } + else + { + precachestring(&"MP_HOST_ENDED_GAME"); + } + + level.halftimetype = "halftime"; + level.halftimesubcaption = &"MP_SWITCHING_SIDES"; + level.laststatustime = 0; + level.waswinning = "none"; + level.lastslowprocessframe = 0; + level.placement["allies"] = []; + level.placement["axis"] = []; + level.placement["all"] = []; + level.postroundtime = 5; + level.playerslookingforsafespawn = []; + func_3456(); + precachemodel("vehicle_mig29_desert"); + precachemodel("projectile_cbu97_clusterbomb"); + precachemodel("tag_origin"); + level.fx_airstrike_afterburner = loadfx("fire/jet_afterburner"); + level.fx_airstrike_contrail = loadfx("smoke/jet_contrail"); + if(maps\mp\_utility::matchmakinggame()) + { + var_00 = " LB_MAP_" + getdvar("ui_mapname"); + var_01 = " LB_GM_" + level.gametype; + if(getdvarint("g_hardcore")) + { + var_01 = var_01 + "_HC"; + } + + precacheleaderboards("LB_GB_TOTALXP_AT LB_GB_TOTALXP_LT LB_GB_WINS_AT LB_GB_WINS_LT LB_GB_KILLS_AT LB_GB_KILLS_LT LB_GB_ACCURACY_AT LB_ACCOLADES" + var_01 + var_00); + } + + level.teamcount["allies"] = 0; + level.teamcount["axis"] = 0; + level.teamcount["spectator"] = 0; + level.alivecount["allies"] = 0; + level.alivecount["axis"] = 0; + level.alivecount["spectator"] = 0; + level.livescount["allies"] = 0; + level.livescount["axis"] = 0; + level.onelefttime = []; + level.hasspawned["allies"] = 0; + level.hasspawned["axis"] = 0; +} + +//Function Number: 2 +func_3456() +{ + makedvarserverinfo("ui_bomb_timer",0); + makedvarserverinfo("ui_nuke_end_milliseconds",0); + makedvarserverinfo("ui_danger_team",""); + makedvarserverinfo("ui_inhostmigration",0); + makedvarserverinfo("ui_override_halftime",0); + makedvarserverinfo("camera_thirdPerson",getdvarint("scr_thirdPerson")); +} + +//Function Number: 3 +setupcallbacks() +{ + level.onxpevent = ::onxpevent; + level.getspawnpoint = ::blank; + level.onspawnplayer = ::blank; + level.onrespawndelay = ::blank; + level.ontimelimit = ::maps\mp\gametypes\_gamelogic::func_2EEF; + level.onhalftime = ::maps\mp\gametypes\_gamelogic::func_2EF0; + level.ondeadevent = ::maps\mp\gametypes\_gamelogic::default_ondeadevent; + level.ononeleftevent = ::maps\mp\gametypes\_gamelogic::func_2EED; + level.onprecachegametype = ::blank; + level.onstartgametype = ::blank; + level.onplayerkilled = ::blank; + level.autoassign = ::maps\mp\gametypes\_menus::menuautoassign; + level.spectator = ::maps\mp\gametypes\_menus::func_2AE8; + level.class = ::maps\mp\gametypes\_menus::func_2AEA; + level.allies = ::maps\mp\gametypes\_menus::menuallies; + level.axis = ::maps\mp\gametypes\_menus::func_2AE7; +} + +//Function Number: 4 +blank(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09) +{ +} + +//Function Number: 5 +func_3458() +{ + self endon("death"); + self endon("disconnect"); + for(;;) + { + wait 10; + var_00 = spawnstruct(); + var_00.titletext = &"MP_CHALLENGE_COMPLETED"; + var_00.notifytext = "wheee"; + var_00.sound = "mp_challenge_complete"; + thread maps\mp\gametypes\_hud_message::func_EBE(var_00); + } +} + +//Function Number: 6 +func_3459() +{ + self endon("death"); + self endon("disconnect"); + for(;;) + { + wait 3; + var_00 = randomint(6); + for(var_01 = 0;var_01 < var_00;var_01++) + { + iprintlnbold(var_00); + self shellshock("frag_grenade_mp",0.2); + wait 0.1; + } + } +} + +//Function Number: 7 +onxpevent(param_00) +{ + thread maps\mp\gametypes\_rank::func_2AB3(param_00); +} + +//Function Number: 8 +fakelag() +{ + self endon("disconnect"); + self.fakelag = randomintrange(50,150); + for(;;) + { + self setclientdvar("fakelag_target",self.fakelag); + wait randomfloatrange(5,15); + } +} + +//Function Number: 9 +debugline(param_00,param_01) +{ + for(var_02 = 0;var_02 < 50;var_02++) + { + wait 0.05; + } +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/gametypes/_healthoverlay.gsc b/MW3/Xbox/MP/maps/mp/gametypes/_healthoverlay.gsc new file mode 100644 index 0000000..d7a6aaf --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/gametypes/_healthoverlay.gsc @@ -0,0 +1,268 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_healthoverlay.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 8 + * Decompile Time: 133 ms + * Timestamp: 10/27/2023 2:25:29 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level.healthoverlaycutoff = 0.55; + var_00 = 5; + var_00 = maps\mp\gametypes\_tweakables::func_270D("player","healthregentime"); + level.playerhealth_regularregendelay = var_00 * 1000; + level.healthregendisabled = level.playerhealth_regularregendelay <= 0; + level thread onplayerconnect(); +} + +//Function Number: 2 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_00 thread onplayerspawned(); + } +} + +//Function Number: 3 +onplayerspawned() +{ + self endon("disconnect"); + for(;;) + { + self waittill("spawned_player"); + thread playerhealthregen(); + self visionsetthermalforplayer(game["thermal_vision"]); + } +} + +//Function Number: 4 +playerhealthregen() +{ + self endon("death"); + self endon("disconnect"); + self endon("joined_team"); + self endon("joined_spectators"); + self endon("faux_spawn"); + level endon("game_ended"); + if(self.health <= 0) + { + return; + } + + var_00 = 0; + var_01 = 0; + thread playerpainbreathingsound(self.maxhealth * 0.55); + for(;;) + { + self waittill("damage"); + if(self.health <= 0) + { + return; + } + + var_01 = gettime(); + var_02 = self.health / self.maxhealth; + if(!isdefined(self.healthregenlevel)) + { + self.regenspeed = 1; + } + else if(self.healthregenlevel == 0.33) + { + self.regenspeed = 0.75; + } + else if(self.healthregenlevel == 0.66) + { + self.regenspeed = 0.5; + } + else if(self.healthregenlevel == 0.99) + { + self.regenspeed = 0.3; + } + else + { + self.regenspeed = 1; + } + + if(var_02 <= level.healthoverlaycutoff) + { + self.atbrinkofdeath = 1; + } + + thread func_2D60(var_01,var_02); + thread breathingmanager(var_01,var_02); + } +} + +//Function Number: 5 +breathingmanager(param_00,param_01) +{ + self notify("breathingManager"); + self endon("breathingManager"); + self endon("death"); + self endon("disconnect"); + self endon("joined_team"); + self endon("joined_spectators"); + level endon("game_ended"); + if(maps\mp\_utility::isusingremote()) + { + return; + } + + self.breathingstoptime = param_00 + 6000 * self.regenspeed; + wait 6 * self.regenspeed; + if(!level.gameended) + { + self playlocalsound("breathing_better"); + } +} + +//Function Number: 6 +func_2D60(param_00,param_01) +{ + self notify("healthRegeneration"); + self endon("healthRegeneration"); + self endon("death"); + self endon("disconnect"); + self endon("joined_team"); + self endon("joined_spectators"); + level endon("game_ended"); + if(level.healthregendisabled) + { + return; + } + + wait level.playerhealth_regularregendelay / 1000 * self.regenspeed; + if(param_01 < 0.55) + { + var_02 = 1; + } + else + { + var_02 = 0; + } + + for(;;) + { + if(self.regenspeed == 0.75) + { + wait 0.2; + if(self.health < self.maxhealth) + { + self.health = self.health + 5; + } + else + { + break; + } + } + else if(self.regenspeed == 0.5) + { + wait 0.05; + if(self.health < self.maxhealth) + { + self.health = self.health + 2; + } + else + { + break; + } + } + else if(self.regenspeed == 0.3) + { + wait 0.15; + if(self.health < self.maxhealth) + { + self.health = self.health + 9; + } + else + { + break; + } + } + else if(!isdefined(self.regenspeed) || self.regenspeed == 1) + { + wait 0.05; + if(self.health < self.maxhealth) + { + self.health = self.health + 1; + param_01 = self.health / self.maxhealth; + } + else + { + break; + } + } + + if(self.health > self.maxhealth) + { + self.health = self.maxhealth; + } + } + + maps\mp\gametypes\_damage::func_2D31(); + if(var_02) + { + maps\mp\gametypes\_missions::func_2D61(); + } +} + +//Function Number: 7 +func_2D62() +{ + self notify("waiting_to_stop_remote"); + self endon("waiting_to_stop_remote"); + self endon("death"); + level endon("game_ended"); + self waittill("stopped_using_remote"); + if(isdefined(level.nukedetonated)) + { + self visionsetnakedforplayer(level.nukevisionset,0); + return; + } + + self visionsetnakedforplayer("",0); +} + +//Function Number: 8 +playerpainbreathingsound(param_00) +{ + level endon("game_ended"); + self endon("death"); + self endon("disconnect"); + self endon("joined_team"); + self endon("joined_spectators"); + wait 2; + for(;;) + { + wait 0.2; + if(self.health <= 0) + { + return; + } + + if(self.health >= param_00) + { + continue; + } + + if(level.healthregendisabled && gettime() > self.breathingstoptime) + { + continue; + } + + if(maps\mp\_utility::isusingremote()) + { + continue; + } + + self playlocalsound("breathing_hurt"); + wait 0.784; + wait 0.1 + randomfloat(0.8); + } +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/gametypes/_hostmigration.gsc b/MW3/Xbox/MP/maps/mp/gametypes/_hostmigration.gsc new file mode 100644 index 0000000..a109a65 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/gametypes/_hostmigration.gsc @@ -0,0 +1,166 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_hostmigration.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 9 + * Decompile Time: 124 ms + * Timestamp: 10/27/2023 2:25:30 AM +*******************************************************************/ + +//Function Number: 1 +callback_hostmigration() +{ + level.hostmigrationreturnedplayercount = 0; + if(level.gameended) + { + return; + } + + level.hostmigrationtimer = 1; + setdvar("ui_inhostmigration",1); + level notify("host_migration_begin"); + maps\mp\gametypes\_gamelogic::updatetimerpausedness(); + foreach(var_01 in level.players) + { + var_01 thread func_273D(); + } + + level endon("host_migration_begin"); + func_2735(); + level.hostmigrationtimer = undefined; + setdvar("ui_inhostmigration",0); + level notify("host_migration_end"); + maps\mp\gametypes\_gamelogic::updatetimerpausedness(); + level thread maps\mp\gametypes\_gamelogic::func_2734(); +} + +//Function Number: 2 +func_2735() +{ + level endon("game_ended"); + level.ingraceperiod = 25; + thread maps\mp\gametypes\_gamelogic::matchstarttimer("waiting_for_players",20); + hostmigrationwaitforplayers(); + level.ingraceperiod = 10; + thread maps\mp\gametypes\_gamelogic::matchstarttimer("match_resuming_in",5); + wait 5; + level.ingraceperiod = 0; +} + +//Function Number: 3 +hostmigrationwaitforplayers() +{ + level endon("hostmigration_enoughplayers"); + wait 15; +} + +//Function Number: 4 +func_2739() +{ + level endon("host_migration_begin"); + level endon("host_migration_end"); + self.hostmigrationcontrolsfrozen = 0; + while(!maps\mp\_utility::isreallyalive(self)) + { + self waittill("spawned"); + } + + self.hostmigrationcontrolsfrozen = 1; + maps\mp\_utility::freezecontrolswrapper(1); + level waittill("host_migration_end"); +} + +//Function Number: 5 +func_273D() +{ + self endon("disconnect"); + self setclientdvar("cg_scoreboardPingGraph","0"); + func_2739(); + if(self.hostmigrationcontrolsfrozen) + { + maps\mp\_utility::freezecontrolswrapper(0); + } + + self setclientdvar("cg_scoreboardPingGraph","1"); +} + +//Function Number: 6 +func_273E() +{ + if(!isdefined(level.hostmigrationtimer)) + { + return 0; + } + + var_00 = gettime(); + level waittill("host_migration_end"); + return gettime() - var_00; +} + +//Function Number: 7 +func_273F(param_00) +{ + if(isdefined(level.hostmigrationtimer)) + { + return; + } + + level endon("host_migration_begin"); + wait param_00; +} + +//Function Number: 8 +func_2740(param_00) +{ + if(param_00 == 0) + { + return; + } + + var_01 = gettime(); + var_02 = gettime() + param_00 * 1000; + while(gettime() < var_02) + { + func_273F(var_02 - gettime() / 1000); + if(isdefined(level.hostmigrationtimer)) + { + var_03 = func_273E(); + var_02 = var_02 + var_03; + } + } + + func_273E(); + return gettime() - var_01; +} + +//Function Number: 9 +waitlongdurationwithgameendtimeupdate(param_00) +{ + if(param_00 == 0) + { + return; + } + + var_01 = gettime(); + var_02 = gettime() + param_00 * 1000; + while(gettime() < var_02) + { + func_273F(var_02 - gettime() / 1000); + while(isdefined(level.hostmigrationtimer)) + { + var_02 = var_02 + 1000; + setgameendtime(int(var_02)); + wait 1; + } + } + + while(isdefined(level.hostmigrationtimer)) + { + var_02 = var_02 + 1000; + setgameendtime(int(var_02)); + wait 1; + } + + return gettime() - var_01; +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/gametypes/_hud.gsc b/MW3/Xbox/MP/maps/mp/gametypes/_hud.gsc new file mode 100644 index 0000000..c5cde26 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/gametypes/_hud.gsc @@ -0,0 +1,78 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_hud.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 3 + * Decompile Time: 56 ms + * Timestamp: 10/27/2023 2:25:30 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + precacheshader("progress_bar_bg"); + precacheshader("progress_bar_fg"); + precacheshader("progress_bar_fill"); + level.uiparent = spawnstruct(); + level.uiparent.horzalign = "left"; + level.uiparent.vertalign = "top"; + level.uiparent.alignx = "left"; + level.uiparent.aligny = "top"; + level.uiparent.x = 0; + level.uiparent.y = 0; + level.uiparent.width = 0; + level.uiparent.height = 0; + level.uiparent.children = []; + level.fontheight = 12; + level.hud["allies"] = spawnstruct(); + level.hud["axis"] = spawnstruct(); + level.primaryprogressbary = -61; + level.primaryprogressbarx = 0; + level.primaryprogressbarheight = 9; + level.primaryprogressbarwidth = 120; + level.primaryprogressbartexty = -75; + level.primaryprogressbartextx = 0; + level.primaryprogressbarfontsize = 0.6; + level.teamprogressbary = 32; + level.teamprogressbarheight = 14; + level.teamprogressbarwidth = 192; + level.teamprogressbartexty = 8; + level.teamprogressbarfontsize = 1.65; + level.lowertextyalign = "BOTTOM"; + level.lowertexty = -90; + level.lowertextfontsize = 1.6; +} + +//Function Number: 2 +fontpulseinit(param_00) +{ + self.basefontscale = self.fontscale; + if(isdefined(param_00)) + { + self.maxfontscale = min(param_00,6.3); + } + else + { + self.maxfontscale = min(self.fontscale * 2,6.3); + } + + self.inframes = 2; + self.outframes = 4; +} + +//Function Number: 3 +fontpulse(param_00) +{ + self notify("fontPulse"); + self endon("fontPulse"); + self endon("death"); + param_00 endon("disconnect"); + param_00 endon("joined_team"); + param_00 endon("joined_spectators"); + self changefontscaleovertime(self.inframes * 0.05); + self.fontscale = self.maxfontscale; + wait self.inframes * 0.05; + self changefontscaleovertime(self.outframes * 0.05); + self.fontscale = self.basefontscale; +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/gametypes/_hud_message.gsc b/MW3/Xbox/MP/maps/mp/gametypes/_hud_message.gsc new file mode 100644 index 0000000..a9b5c22 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/gametypes/_hud_message.gsc @@ -0,0 +1,1375 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_hud_message.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 35 + * Decompile Time: 534 ms + * Timestamp: 10/27/2023 2:25:32 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + precachestring(&"MP_FIRSTPLACE_NAME"); + precachestring(&"MP_SECONDPLACE_NAME"); + precachestring(&"MP_THIRDPLACE_NAME"); + precachestring(&"MP_MATCH_BONUS_IS"); + precachemenu("splash"); + precachemenu("challenge"); + precachemenu("defcon"); + precachemenu("killstreak"); + precachemenu("perk_display"); + precachemenu("perk_hide"); + precachemenu("killedby_card_display"); + precachemenu("killedby_card_hide"); + precachemenu("youkilled_card_display"); + game["menu_endgameupdate"] = "endgameupdate"; + if(level.splitscreen) + { + game["menu_endgameupdate"] = game["menu_endgameupdate"] + "_splitscreen"; + } + + precachemenu(game["menu_endgameupdate"]); + game["strings"]["draw"] = &"MP_DRAW"; + game["strings"]["round_draw"] = &"MP_ROUND_DRAW"; + game["strings"]["round_win"] = &"MP_ROUND_WIN"; + game["strings"]["round_loss"] = &"MP_ROUND_LOSS"; + game["strings"]["victory"] = &"MP_VICTORY"; + game["strings"]["defeat"] = &"MP_DEFEAT"; + game["strings"]["halftime"] = &"MP_HALFTIME"; + game["strings"]["overtime"] = &"MP_OVERTIME"; + game["strings"]["roundend"] = &"MP_ROUNDEND"; + game["strings"]["intermission"] = &"MP_INTERMISSION"; + game["strings"]["side_switch"] = &"MP_SWITCHING_SIDES"; + game["strings"]["match_bonus"] = &"MP_MATCH_BONUS_IS"; + level thread onplayerconnect(); +} + +//Function Number: 2 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_00 thread hintmessagedeaththink(); + var_00 thread lowermessagethink(); + var_00 thread initnotifymessage(); + } +} + +//Function Number: 3 +hintmessage(param_00) +{ + var_01 = spawnstruct(); + var_01.notifytext = param_00; + var_01.glowcolor = (0.3,0.6,0.3); + func_0EBE(var_01); +} + +//Function Number: 4 +initnotifymessage() +{ + if(level.splitscreen || self issplitscreenplayer()) + { + var_00 = 1.5; + var_01 = 1.25; + var_02 = 24; + var_03 = "default"; + var_04 = "TOP"; + var_05 = "BOTTOM"; + var_06 = 0; + var_07 = 0; + } + else + { + var_00 = 2.5; + var_01 = 1.75; + var_02 = 30; + var_03 = "objective"; + var_04 = "TOP"; + var_05 = "BOTTOM"; + var_06 = 50; + var_07 = 0; + } + + self.notifytitle = maps\mp\gametypes\_hud_util::createfontstring(var_03,var_00); + self.notifytitle maps\mp\gametypes\_hud_util::setpoint(var_04,undefined,var_07,var_06); + self.notifytitle.glowcolor = (0.2,0.3,0.7); + self.notifytitle.glowalpha = 1; + self.notifytitle.hidewheninmenu = 1; + self.notifytitle.archived = 0; + self.notifytitle.alpha = 0; + self.notifytext = maps\mp\gametypes\_hud_util::createfontstring(var_03,var_01); + self.notifytext maps\mp\gametypes\_hud_util::setparent(self.notifytitle); + self.notifytext maps\mp\gametypes\_hud_util::setpoint(var_04,var_05,0,0); + self.notifytext.glowcolor = (0.2,0.3,0.7); + self.notifytext.glowalpha = 1; + self.notifytext.hidewheninmenu = 1; + self.notifytext.archived = 0; + self.notifytext.alpha = 0; + self.notifytext2 = maps\mp\gametypes\_hud_util::createfontstring(var_03,var_01); + self.notifytext2 maps\mp\gametypes\_hud_util::setparent(self.notifytitle); + self.notifytext2 maps\mp\gametypes\_hud_util::setpoint(var_04,var_05,0,0); + self.notifytext2.glowcolor = (0.2,0.3,0.7); + self.notifytext2.glowalpha = 1; + self.notifytext2.hidewheninmenu = 1; + self.notifytext2.archived = 0; + self.notifytext2.alpha = 0; + self.notifyicon = maps\mp\gametypes\_hud_util::createicon("white",var_02,var_02); + self.notifyicon maps\mp\gametypes\_hud_util::setparent(self.notifytext2); + self.notifyicon maps\mp\gametypes\_hud_util::setpoint(var_04,var_05,0,0); + self.notifyicon.hidewheninmenu = 1; + self.notifyicon.archived = 0; + self.notifyicon.alpha = 0; + self.notifyoverlay = maps\mp\gametypes\_hud_util::createicon("white",var_02,var_02); + self.notifyoverlay maps\mp\gametypes\_hud_util::setparent(self.notifyicon); + self.notifyoverlay maps\mp\gametypes\_hud_util::setpoint("CENTER","CENTER",0,0); + self.notifyoverlay.hidewheninmenu = 1; + self.notifyoverlay.archived = 0; + self.notifyoverlay.alpha = 0; + self.doingsplash = []; + self.doingsplash[0] = undefined; + self.doingsplash[1] = undefined; + self.doingsplash[2] = undefined; + self.doingsplash[3] = undefined; + self.splashqueue = []; + self.splashqueue[0] = []; + self.splashqueue[1] = []; + self.splashqueue[2] = []; + self.splashqueue[3] = []; +} + +//Function Number: 5 +oldnotifymessage(param_00,param_01,param_02,param_03,param_04,param_05) +{ + var_06 = spawnstruct(); + var_06.titletext = param_00; + var_06.notifytext = param_01; + var_06.iconname = param_02; + var_06.glowcolor = param_03; + var_06.sound = param_04; + var_06.duration = param_05; + func_0EBE(var_06); +} + +//Function Number: 6 +func_0EBE(param_00) +{ + self endon("death"); + self endon("disconnect"); + if(!isdefined(param_00.slot)) + { + param_00.slot = 0; + } + + var_01 = param_00.slot; + if(!isdefined(param_00.type)) + { + param_00.type = ""; + } + + if(!isdefined(self.doingsplash[var_01])) + { + thread shownotifymessage(param_00); + return; + } + + self.splashqueue[var_01][self.splashqueue[var_01].size] = param_00; +} + +//Function Number: 7 +dispatchnotify(param_00) +{ + var_01 = self.splashqueue[param_00][0]; + for(var_02 = 1;var_02 < self.splashqueue[param_00].size;var_02++) + { + self.splashqueue[param_00][var_02 - 1] = self.splashqueue[param_00][var_02]; + } + + self.splashqueue[param_00][var_02 - 1] = undefined; + if(isdefined(var_01.name)) + { + actionnotify(var_01); + return; + } + + shownotifymessage(var_01); +} + +//Function Number: 8 +func_320F() +{ + self endon("disconnect"); + var_00 = spawnstruct(); + var_00.name = "promotion"; + var_00.type = "rank"; + var_00.sound = "mp_level_up"; + var_00.slot = 0; + thread actionnotify(var_00); +} + +//Function Number: 9 +weaponpromotionsplashnotify() +{ + self endon("disconnect"); + var_00 = spawnstruct(); + var_00.name = "promotion_weapon"; + var_00.type = "weaponRank"; + var_00.sound = "mp_level_up"; + var_00.slot = 0; + thread actionnotify(var_00); +} + +//Function Number: 10 +shownotifymessage(param_00) +{ + self endon("disconnect"); + var_01 = param_00.slot; + if(level.gameended) + { + if(isdefined(param_00.type) && param_00.type == "rank") + { + self setclientdvar("ui_promotion",1); + self.postgamepromotion = 1; + } + + if(self.splashqueue[var_01].size) + { + thread dispatchnotify(var_01); + } + + return; + } + + self.doingsplash[var_01] = param_00; + func_0EC7(0); + if(isdefined(param_00.duration)) + { + var_02 = param_00.duration; + } + else if(level.gameended) + { + var_02 = 2; + } + else + { + var_02 = 4; + } + + thread func_0EC6(); + if(isdefined(param_00.sound)) + { + self playlocalsound(param_00.sound); + } + + if(isdefined(param_00.leadersound)) + { + maps\mp\_utility::func_2A60(param_00.leadersound); + } + + if(isdefined(param_00.glowcolor)) + { + var_03 = param_00.glowcolor; + } + else + { + var_03 = (0.3,0.6,0.3); + } + + var_04 = self.notifytitle; + if(isdefined(param_00.titletext)) + { + if(isdefined(param_00.titlelabel)) + { + self.notifytitle.label = param_00.titlelabel; + } + else + { + self.notifytitle.label = &""; + } + + if(isdefined(param_00.titlelabel) && !isdefined(param_00.titleisstring)) + { + self.notifytitle setvalue(param_00.titletext); + } + else + { + self.notifytitle settext(param_00.titletext); + } + + self.notifytitle setpulsefx(int(25 * var_02),int(var_02 * 1000),1000); + self.notifytitle.glowcolor = var_03; + self.notifytitle.alpha = 1; + } + + if(isdefined(param_00.textglowcolor)) + { + var_03 = param_00.textglowcolor; + } + + if(isdefined(param_00.notifytext)) + { + if(isdefined(param_00.textlabel)) + { + self.notifytext.label = param_00.textlabel; + } + else + { + self.notifytext.label = &""; + } + + if(isdefined(param_00.textlabel) && !isdefined(param_00.textisstring)) + { + self.notifytext setvalue(param_00.notifytext); + } + else + { + self.notifytext settext(param_00.notifytext); + } + + self.notifytext setpulsefx(100,int(var_02 * 1000),1000); + self.notifytext.glowcolor = var_03; + self.notifytext.alpha = 1; + var_04 = self.notifytext; + } + + if(isdefined(param_00.notifytext2)) + { + self.notifytext2 maps\mp\gametypes\_hud_util::setparent(var_04); + if(isdefined(param_00.text2label)) + { + self.notifytext2.label = param_00.text2label; + } + else + { + self.notifytext2.label = &""; + } + + self.notifytext2 settext(param_00.notifytext2); + self.notifytext2 setpulsefx(100,int(var_02 * 1000),1000); + self.notifytext2.glowcolor = var_03; + self.notifytext2.alpha = 1; + var_04 = self.notifytext2; + } + + if(isdefined(param_00.iconname)) + { + self.notifyicon maps\mp\gametypes\_hud_util::setparent(var_04); + if(level.splitscreen || self issplitscreenplayer()) + { + self.notifyicon setshader(param_00.iconname,30,30); + } + else + { + self.notifyicon setshader(param_00.iconname,60,60); + } + + self.notifyicon.alpha = 0; + if(isdefined(param_00.iconoverlay)) + { + self.notifyicon fadeovertime(0.15); + self.notifyicon.alpha = 1; + param_00.overlayoffsety = 0; + self.notifyoverlay maps\mp\gametypes\_hud_util::setparent(self.notifyicon); + self.notifyoverlay maps\mp\gametypes\_hud_util::setpoint("CENTER","CENTER",0,param_00.overlayoffsety); + self.notifyoverlay setshader(param_00.iconoverlay,512,512); + self.notifyoverlay.alpha = 0; + self.notifyoverlay.color = (1,0,0); + self.notifyoverlay fadeovertime(0.4); + self.notifyoverlay.alpha = 0.85; + self.notifyoverlay scaleovertime(0.4,32,32); + func_0EC7(var_02); + self.notifyicon fadeovertime(0.75); + self.notifyicon.alpha = 0; + self.notifyoverlay fadeovertime(0.75); + self.notifyoverlay.alpha = 0; + } + else + { + self.notifyicon fadeovertime(1); + self.notifyicon.alpha = 1; + func_0EC7(var_02); + self.notifyicon fadeovertime(0.75); + self.notifyicon.alpha = 0; + } + } + else + { + func_0EC7(var_02); + } + + self notify("notifyMessageDone"); + self.doingsplash[var_01] = undefined; + if(self.splashqueue[var_01].size) + { + thread dispatchnotify(var_01); + } +} + +//Function Number: 11 +killstreaksplashnotify(param_00,param_01,param_02) +{ + self endon("disconnect"); + waittillframeend; + if(level.gameended) + { + return; + } + + var_03 = spawnstruct(); + if(isdefined(param_02)) + { + var_03.name = param_00 + "_" + param_02; + } + else + { + var_03.name = param_00; + } + + var_03.type = "killstreak"; + var_03.optionalnumber = param_01; + var_03.sound = maps\mp\killstreaks\_killstreaks::func_31F9(param_00); + var_03.leadersound = param_00; + var_03.leadersoundgroup = "killstreak_earned"; + var_03.slot = 0; + thread actionnotify(var_03); +} + +//Function Number: 12 +defconsplashnotify(param_00,param_01) +{ +} + +//Function Number: 13 +challengesplashnotify(param_00) +{ + self endon("disconnect"); + waittillframeend; + wait 0.05; + var_01 = maps\mp\gametypes\_hud_util::ch_getstate(param_00) - 1; + var_02 = maps\mp\gametypes\_hud_util::ch_gettarget(param_00,var_01); + if(var_02 == 0) + { + var_02 = 1; + } + + if(param_00 == "ch_longersprint_pro" || param_00 == "ch_longersprint_pro_daily" || param_00 == "ch_longersprint_pro_weekly") + { + var_02 = int(var_02 / 5280); + } + + var_03 = spawnstruct(); + var_03.type = "challenge"; + var_03.optionalnumber = var_02; + var_03.name = param_00; + var_03.sound = tablelookup("mp/splashTable.csv",0,var_03.name,9); + var_03.slot = 0; + thread actionnotify(var_03); +} + +//Function Number: 14 +func_2892(param_00,param_01) +{ + self endon("disconnect"); + wait 0.05; + var_02 = spawnstruct(); + var_02.name = param_00; + var_02.optionalnumber = param_01; + var_02.sound = tablelookup("mp/splashTable.csv",0,var_02.name,9); + var_02.slot = 0; + thread actionnotify(var_02); +} + +//Function Number: 15 +func_2701(param_00,param_01) +{ + if(level.hardcoremode) + { + return; + } + + self endon("disconnect"); + waittillframeend; + if(level.gameended) + { + return; + } + + var_02 = spawnstruct(); + var_02.name = param_00; + var_02.optionalnumber = param_01; + var_02.sound = tablelookup("mp/splashTable.csv",0,var_02.name,9); + var_02.slot = 0; + thread actionnotify(var_02); +} + +//Function Number: 16 +playercardsplashnotify(param_00,param_01,param_02) +{ + self endon("disconnect"); + waittillframeend; + if(level.gameended) + { + return; + } + + var_03 = spawnstruct(); + var_03.name = param_00; + var_03.optionalnumber = param_02; + var_03.sound = tablelookup("mp/splashTable.csv",0,var_03.name,9); + var_03.playercardplayer = param_01; + var_03.slot = 1; + thread actionnotify(var_03); +} + +//Function Number: 17 +actionnotify(param_00) +{ + self endon("death"); + self endon("disconnect"); + var_01 = param_00.slot; + if(!isdefined(param_00.type)) + { + param_00.type = ""; + } + + if(!isdefined(self.doingsplash[var_01])) + { + thread actionnotifymessage(param_00); + return; + } + else if(param_00.type == "killstreak" && self.doingsplash[var_01].type != "challenge" && self.doingsplash[var_01].type != "rank") + { + self.notifytext.alpha = 0; + self.notifytext2.alpha = 0; + self.notifyicon.alpha = 0; + thread actionnotifymessage(param_00); + return; + } + else if(param_00.type == "challenge" && self.doingsplash[var_01].type != "killstreak" && self.doingsplash[var_01].type != "challenge" && self.doingsplash[var_01].type != "rank") + { + self.notifytext.alpha = 0; + self.notifytext2.alpha = 0; + self.notifyicon.alpha = 0; + thread actionnotifymessage(param_00); + return; + } + + if(param_00.type == "challenge" || param_00.type == "killstreak") + { + if(param_00.type == "killstreak") + { + removetypefromqueue("killstreak",var_01); + } + + for(var_02 = self.splashqueue[var_01].size;var_02 > 0;var_02--) + { + self.splashqueue[var_01][var_02] = self.splashqueue[var_01][var_02 - 1]; + } + + self.splashqueue[var_01][0] = param_00; + return; + } + + self.splashqueue[var_01][self.splashqueue[var_01].size] = param_00; +} + +//Function Number: 18 +removetypefromqueue(param_00,param_01) +{ + var_02 = []; + for(var_03 = 0;var_03 < self.splashqueue[param_01].size;var_03++) + { + if(self.splashqueue[param_01][var_03].type != "killstreak") + { + var_02[var_02.size] = self.splashqueue[param_01][var_03]; + } + } + + self.splashqueue[param_01] = var_02; +} + +//Function Number: 19 +actionnotifymessage(param_00) +{ + self endon("disconnect"); + var_01 = param_00.slot; + if(level.gameended) + { + wait 0; + if(isdefined(param_00.type) && param_00.type == "rank" || param_00.type == "weaponRank") + { + self setclientdvar("ui_promotion",1); + self.postgamepromotion = 1; + } + else if(isdefined(param_00.type) && param_00.type == "challenge") + { + self.pers["postGameChallenges"]++; + self setclientdvar("ui_challenge_" + self.pers["postGameChallenges"] + "_ref",param_00.name); + } + + if(self.splashqueue[var_01].size) + { + thread dispatchnotify(var_01); + } + + return; + } + + if(tablelookup("mp/splashTable.csv",0,param_00.name,0) != "") + { + if(isdefined(param_00.playercardplayer)) + { + self setcarddisplayslot(param_00.playercardplayer,5); + } + + if(isdefined(param_00.optionalnumber)) + { + self showhudsplash(param_00.name,param_00.slot,param_00.optionalnumber); + } + else + { + self showhudsplash(param_00.name,param_00.slot); + } + + self.doingsplash[var_01] = param_00; + var_02 = maps\mp\_utility::func_EBF(tablelookup("mp/splashTable.csv",0,param_00.name,4)); + if(isdefined(param_00.sound)) + { + self playlocalsound(param_00.sound); + } + + if(isdefined(param_00.leadersound)) + { + if(isdefined(param_00.leadersoundgroup)) + { + maps\mp\_utility::func_2A60(param_00.leadersound,param_00.leadersoundgroup,1); + } + else + { + maps\mp\_utility::func_2A60(param_00.leadersound); + } + } + + self notify("actionNotifyMessage" + var_01); + self endon("actionNotifyMessage" + var_01); + wait var_02 - 0.05; + self.doingsplash[var_01] = undefined; + } + + if(self.splashqueue[var_01].size) + { + thread dispatchnotify(var_01); + } +} + +//Function Number: 20 +func_0EC7(param_00) +{ + var_01 = 0.05; + while(!canreadtext()) + { + wait var_01; + } + + while(param_00 > 0) + { + wait var_01; + if(canreadtext()) + { + param_00 = param_00 - var_01; + } + } +} + +//Function Number: 21 +canreadtext() +{ + if(maps\mp\_flashgrenades::isflashbanged()) + { + return 0; + } + + return 1; +} + +//Function Number: 22 +func_3215() +{ + self endon("notifyMessageDone"); + self endon("disconnect"); + level endon("game_ended"); + self waittill("death"); + func_3216(); +} + +//Function Number: 23 +func_0EC6() +{ + self notify("resetOnCancel"); + self endon("resetOnCancel"); + self endon("notifyMessageDone"); + self endon("disconnect"); + level waittill("cancel_notify"); + func_3216(); +} + +//Function Number: 24 +func_3216() +{ + self.notifytitle.alpha = 0; + self.notifytext.alpha = 0; + self.notifyicon.alpha = 0; + self.notifyoverlay.alpha = 0; + self.doingsplash[0] = undefined; + self.doingsplash[1] = undefined; + self.doingsplash[2] = undefined; + self.doingsplash[3] = undefined; +} + +//Function Number: 25 +hintmessagedeaththink() +{ + self endon("disconnect"); + for(;;) + { + self waittill("death"); + if(isdefined(self.hintmessage)) + { + self.hintmessage maps\mp\gametypes\_hud_util::destroyelem(); + } + } +} + +//Function Number: 26 +lowermessagethink() +{ + self endon("disconnect"); + self.lowermessages = []; + self.lowermessage = maps\mp\gametypes\_hud_util::createfontstring("default",level.lowertextfontsize); + self.lowermessage settext(""); + self.lowermessage.archived = 0; + self.lowermessage.sort = 10; + if(level.splitscreen || self issplitscreenplayer()) + { + self.lowermessage maps\mp\gametypes\_hud_util::setpoint("CENTER",level.lowertextyalign,0,level.lowertexty); + var_00 = 0.5; + } + else + { + self.lowermessage maps\mp\gametypes\_hud_util::setpoint("CENTER",level.lowertextyalign,0,level.lowertexty - 40); + var_00 = 0.75; + } + + self.lowertimer = maps\mp\gametypes\_hud_util::createfontstring("hudbig",var_00); + self.lowertimer maps\mp\gametypes\_hud_util::setparent(self.lowermessage); + self.lowertimer maps\mp\gametypes\_hud_util::setpoint("TOP","BOTTOM",0,0); + self.lowertimer settext(""); + self.lowertimer.archived = 0; + self.lowertimer.sort = 10; +} + +//Function Number: 27 +func_321A(param_00) +{ + if(level.teambased) + { + if(param_00 == "tie") + { + func_321B("draw"); + return; + } + + if(param_00 == self.team) + { + func_321B("victory"); + return; + } + + func_321B("defeat"); + return; + } + + if(param_00 == self) + { + func_321B("victory"); + return; + } + + func_321B("defeat"); +} + +//Function Number: 28 +func_321B(param_00) +{ + var_01 = self.team; + var_02 = maps\mp\gametypes\_hud_util::createfontstring("bigfixed",1); + var_02 maps\mp\gametypes\_hud_util::setpoint("TOP",undefined,0,50); + var_02.foreground = 1; + var_02.glowalpha = 1; + var_02.hidewheninmenu = 0; + var_02.archived = 0; + var_02 settext(game["strings"][param_00]); + var_02.alpha = 0; + var_02 fadeovertime(0.5); + var_02.alpha = 1; + switch(param_00) + { + case "victory": + var_02.glowcolor = (0.6,0.9,0.6); + break; + + default: + var_02.glowcolor = (0.9,0.6,0.6); + break; + } + + var_03 = maps\mp\gametypes\_hud_util::createicon(game["icons"][var_01],64,64); + var_03 maps\mp\gametypes\_hud_util::setparent(var_02); + var_03 maps\mp\gametypes\_hud_util::setpoint("TOP","BOTTOM",0,30); + var_03.foreground = 1; + var_03.hidewheninmenu = 0; + var_03.archived = 0; + var_03.alpha = 0; + var_03 fadeovertime(0.5); + var_03.alpha = 1; + wait 3; + var_02 maps\mp\gametypes\_hud_util::destroyelem(); + var_03 maps\mp\gametypes\_hud_util::destroyelem(); +} + +//Function Number: 29 +func_2F20() +{ + if(isdefined(self.doingsplash[0])) + { + return 1; + } + + if(isdefined(self.doingsplash[1])) + { + return 1; + } + + if(isdefined(self.doingsplash[2])) + { + return 1; + } + + if(isdefined(self.doingsplash[3])) + { + return 1; + } + + return 0; +} + +//Function Number: 30 +teamoutcomenotify(param_00,param_01,param_02) +{ + self endon("disconnect"); + self notify("reset_outcome"); + wait 0.5; + var_03 = self.pers["team"]; + if(!isdefined(var_03) || var_03 != "allies" && var_03 != "axis") + { + var_03 = "allies"; + } + + while(func_2F20()) + { + wait 0.05; + } + + self endon("reset_outcome"); + if(level.splitscreen || self issplitscreenplayer()) + { + var_04 = 1; + var_05 = -76; + var_06 = 0.667; + var_07 = 12; + var_08 = 0.833; + var_09 = 46; + var_0A = 40; + var_0B = 30; + var_0C = 0; + var_0D = 60; + var_0E = "hudbig"; + } + else + { + var_04 = 1.5; + var_05 = -134; + var_06 = 1; + var_07 = 18; + var_08 = 1.25; + var_09 = 70; + var_0A = 60; + var_0B = 45; + var_0C = 0; + var_0D = 90; + var_0E = "hudbig"; + } + + var_0F = -5536; + var_10 = maps\mp\gametypes\_hud_util::createfontstring(var_0E,var_04); + var_10 maps\mp\gametypes\_hud_util::setpoint("CENTER",undefined,0,var_05); + var_10.foreground = 1; + var_10.glowalpha = 1; + var_10.hidewheninmenu = 0; + var_10.archived = 0; + var_11 = maps\mp\gametypes\_hud_util::createfontstring(var_0E,var_06); + var_11 maps\mp\gametypes\_hud_util::setparent(var_10); + var_11.foreground = 1; + var_11 maps\mp\gametypes\_hud_util::setpoint("TOP","BOTTOM",0,var_07); + var_11.glowalpha = 1; + var_11.hidewheninmenu = 0; + var_11.archived = 0; + if(param_00 == "halftime") + { + var_10.glowcolor = (0.2,0.3,0.7); + var_10 settext(game["strings"]["halftime"]); + var_10.color = (1,1,1); + param_00 = "allies"; + } + else if(param_00 == "intermission") + { + var_10.glowcolor = (0.2,0.3,0.7); + var_10 settext(game["strings"]["intermission"]); + var_10.color = (1,1,1); + param_00 = "allies"; + } + else if(param_00 == "roundend") + { + var_10.glowcolor = (0.2,0.3,0.7); + var_10 settext(game["strings"]["roundend"]); + var_10.color = (1,1,1); + param_00 = "allies"; + } + else if(param_00 == "overtime") + { + var_10.glowcolor = (0.2,0.3,0.7); + var_10 settext(game["strings"]["overtime"]); + var_10.color = (1,1,1); + param_00 = "allies"; + } + else if(param_00 == "tie") + { + var_10.glowcolor = (0.2,0.3,0.7); + if(param_01) + { + var_10 settext(game["strings"]["round_draw"]); + } + else + { + var_10 settext(game["strings"]["draw"]); + } + + var_10.color = (1,1,1); + param_00 = "allies"; + } + else if(isdefined(self.pers["team"]) && param_00 == var_03) + { + var_10.glowcolor = (0,0,0); + if(param_01) + { + var_10 settext(game["strings"]["round_win"]); + } + else + { + var_10 settext(game["strings"]["victory"]); + } + + var_10.color = (0.6,0.9,0.6); + } + else + { + var_10.glowcolor = (0,0,0); + if(param_01) + { + var_10 settext(game["strings"]["round_loss"]); + } + else + { + var_10 settext(game["strings"]["defeat"]); + } + + var_10.color = (0.7,0.3,0.2); + } + + var_11.glowcolor = (0.2,0.3,0.7); + var_11 settext(param_02); + var_10 setpulsefx(100,var_0F,1000); + var_11 setpulsefx(100,var_0F,1000); + if(maps\mp\_utility::getintproperty("useRelativeTeamColors",0)) + { + var_12 = maps\mp\gametypes\_hud_util::createicon(game["icons"][var_03] + "_blue",var_09,var_09); + } + else + { + var_12 = maps\mp\gametypes\_hud_util::createicon(game["icons"][var_04],var_0A,var_0A); + } + + var_12 maps\mp\gametypes\_hud_util::setparent(var_11); + var_12 maps\mp\gametypes\_hud_util::setpoint("TOP","BOTTOM",var_0A * -1,var_0B); + var_12.foreground = 1; + var_12.hidewheninmenu = 0; + var_12.archived = 0; + var_12.alpha = 0; + var_12 fadeovertime(0.5); + var_12.alpha = 1; + if(maps\mp\_utility::getintproperty("useRelativeTeamColors",0)) + { + var_13 = maps\mp\gametypes\_hud_util::createicon(game["icons"][level.otherteam[var_03]] + "_red",var_09,var_09); + } + else + { + var_13 = maps\mp\gametypes\_hud_util::createicon(game["icons"][level.otherteam[var_04]],var_0A,var_0A); + } + + var_13 maps\mp\gametypes\_hud_util::setparent(var_11); + var_13 maps\mp\gametypes\_hud_util::setpoint("TOP","BOTTOM",var_0A,var_0B); + var_13.foreground = 1; + var_13.hidewheninmenu = 0; + var_13.archived = 0; + var_13.alpha = 0; + var_13 fadeovertime(0.5); + var_13.alpha = 1; + var_14 = maps\mp\gametypes\_hud_util::createfontstring(var_0E,var_08); + var_14 maps\mp\gametypes\_hud_util::setparent(var_12); + var_14 maps\mp\gametypes\_hud_util::setpoint("TOP","BOTTOM",0,var_0C); + if(maps\mp\_utility::getintproperty("useRelativeTeamColors",0)) + { + var_14.glowcolor = game["colors"]["blue"]; + } + else + { + var_14.glowcolor = game["colors"][var_03]; + } + + var_14.glowalpha = 1; + if(!maps\mp\_utility::func_26EC() || !maps\mp\_utility::isobjectivebased()) + { + var_14 setvalue(maps\mp\gametypes\_gamescore::func_26EE(var_03)); + } + else + { + var_14 setvalue(game["roundsWon"][var_03]); + } + + var_14.foreground = 1; + var_14.hidewheninmenu = 0; + var_14.archived = 0; + var_14 setpulsefx(100,var_0F,1000); + var_15 = maps\mp\gametypes\_hud_util::createfontstring(var_0E,var_08); + var_15 maps\mp\gametypes\_hud_util::setparent(var_13); + var_15 maps\mp\gametypes\_hud_util::setpoint("TOP","BOTTOM",0,var_0C); + if(maps\mp\_utility::getintproperty("useRelativeTeamColors",0)) + { + var_15.glowcolor = game["colors"]["red"]; + } + else + { + var_15.glowcolor = game["colors"][level.otherteam[var_03]]; + } + + var_15.glowalpha = 1; + if(!maps\mp\_utility::func_26EC() || !maps\mp\_utility::isobjectivebased()) + { + var_15 setvalue(maps\mp\gametypes\_gamescore::func_26EE(level.otherteam[var_03])); + } + else + { + var_15 setvalue(game["roundsWon"][level.otherteam[var_03]]); + } + + var_15.foreground = 1; + var_15.hidewheninmenu = 0; + var_15.archived = 0; + var_15 setpulsefx(100,var_0F,1000); + var_16 = undefined; + if(isdefined(self.matchbonus)) + { + var_16 = maps\mp\gametypes\_hud_util::createfontstring(var_0E,var_06); + var_16 maps\mp\gametypes\_hud_util::setparent(var_11); + var_16 maps\mp\gametypes\_hud_util::setpoint("TOP","BOTTOM",0,var_09 + var_0D + var_14.height); + var_16.glowalpha = 1; + var_16.foreground = 1; + var_16.hidewheninmenu = 0; + var_16.color = (1,1,0.5); + var_16.archived = 0; + var_16.label = game["strings"]["match_bonus"]; + var_16 setvalue(self.matchbonus); + } + + thread func_321D(var_10,var_11,var_12,var_13,var_14,var_15,var_16); +} + +//Function Number: 31 +outcomenotify(param_00,param_01) +{ + self endon("disconnect"); + self notify("reset_outcome"); + while(func_2F20()) + { + wait 0.05; + } + + self endon("reset_outcome"); + if(level.splitscreen || self issplitscreenplayer()) + { + var_02 = 2; + var_03 = 1.5; + var_04 = 1.5; + var_05 = 30; + var_06 = 2; + var_07 = "default"; + } + else + { + var_02 = 3; + var_03 = 2; + var_04 = 1.5; + var_05 = 30; + var_06 = 20; + var_07 = "objective"; + } + + var_08 = -5536; + var_09 = level.placement["all"]; + var_0A = var_09[0]; + var_0B = var_09[1]; + var_0C = var_09[2]; + var_0D = maps\mp\gametypes\_hud_util::createfontstring(var_07,var_02); + var_0D maps\mp\gametypes\_hud_util::setpoint("TOP",undefined,0,var_06); + var_0E = 0; + if(isdefined(var_0A) && self.score == var_0A.score && self.deaths == var_0A.deaths) + { + if(self != var_0A) + { + var_0E = 1; + } + else if(isdefined(var_0B) && var_0B.score == var_0A.score && var_0B.deaths == var_0A.deaths) + { + var_0E = 1; + } + } + + if(var_0E) + { + var_0D settext(game["strings"]["tie"]); + var_0D.glowcolor = (0.2,0.3,0.7); + } + else if(isdefined(var_0A) && self == var_0A) + { + var_0D settext(game["strings"]["victory"]); + var_0D.glowcolor = (0.2,0.3,0.7); + } + else + { + var_0D settext(game["strings"]["defeat"]); + var_0D.glowcolor = (0.7,0.3,0.2); + } + + var_0D.glowalpha = 1; + var_0D.foreground = 1; + var_0D.hidewheninmenu = 0; + var_0D.archived = 0; + var_0D setpulsefx(100,var_08,1000); + var_0F = maps\mp\gametypes\_hud_util::createfontstring(var_07,2); + var_0F maps\mp\gametypes\_hud_util::setparent(var_0D); + var_0F maps\mp\gametypes\_hud_util::setpoint("TOP","BOTTOM",0,0); + var_0F.glowalpha = 1; + var_0F.foreground = 1; + var_0F.hidewheninmenu = 0; + var_0F.archived = 0; + var_0F.glowcolor = (0.2,0.3,0.7); + var_0F settext(param_01); + var_10 = maps\mp\gametypes\_hud_util::createfontstring(var_07,var_03); + var_10 maps\mp\gametypes\_hud_util::setparent(var_0F); + var_10 maps\mp\gametypes\_hud_util::setpoint("TOP","BOTTOM",0,var_06); + var_10.glowcolor = (0.3,0.7,0.2); + var_10.glowalpha = 1; + var_10.foreground = 1; + var_10.hidewheninmenu = 0; + var_10.archived = 0; + if(isdefined(var_0A)) + { + var_10.label = &"MP_FIRSTPLACE_NAME"; + var_10 setplayernamestring(var_0A); + var_10 setpulsefx(100,var_08,1000); + } + + var_11 = maps\mp\gametypes\_hud_util::createfontstring(var_07,var_04); + var_11 maps\mp\gametypes\_hud_util::setparent(var_10); + var_11 maps\mp\gametypes\_hud_util::setpoint("TOP","BOTTOM",0,var_06); + var_11.glowcolor = (0.2,0.3,0.7); + var_11.glowalpha = 1; + var_11.foreground = 1; + var_11.hidewheninmenu = 0; + var_11.archived = 0; + if(isdefined(var_0B)) + { + var_11.label = &"MP_SECONDPLACE_NAME"; + var_11 setplayernamestring(var_0B); + var_11 setpulsefx(100,var_08,1000); + } + + var_12 = maps\mp\gametypes\_hud_util::createfontstring(var_07,var_04); + var_12 maps\mp\gametypes\_hud_util::setparent(var_11); + var_12 maps\mp\gametypes\_hud_util::setpoint("TOP","BOTTOM",0,var_06); + var_12 maps\mp\gametypes\_hud_util::setparent(var_11); + var_12.glowcolor = (0.2,0.3,0.7); + var_12.glowalpha = 1; + var_12.foreground = 1; + var_12.hidewheninmenu = 0; + var_12.archived = 0; + if(isdefined(var_0C)) + { + var_12.label = &"MP_THIRDPLACE_NAME"; + var_12 setplayernamestring(var_0C); + var_12 setpulsefx(100,var_08,1000); + } + + var_13 = maps\mp\gametypes\_hud_util::createfontstring(var_07,2); + var_13 maps\mp\gametypes\_hud_util::setparent(var_12); + var_13 maps\mp\gametypes\_hud_util::setpoint("TOP","BOTTOM",0,var_06); + var_13.glowalpha = 1; + var_13.foreground = 1; + var_13.hidewheninmenu = 0; + var_13.archived = 0; + if(isdefined(self.matchbonus)) + { + var_13.label = game["strings"]["match_bonus"]; + var_13 setvalue(self.matchbonus); + } + + thread func_321E(var_10,var_11,var_12); + thread func_321C(var_0D,var_0F,var_10,var_11,var_12,var_13); +} + +//Function Number: 32 +func_321C(param_00,param_01,param_02,param_03,param_04,param_05) +{ + self endon("disconnect"); + self waittill("reset_outcome"); + if(isdefined(param_00)) + { + param_00 maps\mp\gametypes\_hud_util::destroyelem(); + } + + if(isdefined(param_01)) + { + param_01 maps\mp\gametypes\_hud_util::destroyelem(); + } + + if(isdefined(param_02)) + { + param_02 maps\mp\gametypes\_hud_util::destroyelem(); + } + + if(isdefined(param_03)) + { + param_03 maps\mp\gametypes\_hud_util::destroyelem(); + } + + if(isdefined(param_04)) + { + param_04 maps\mp\gametypes\_hud_util::destroyelem(); + } + + if(isdefined(param_05)) + { + param_05 maps\mp\gametypes\_hud_util::destroyelem(); + } +} + +//Function Number: 33 +func_321D(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + self endon("disconnect"); + self waittill("reset_outcome"); + if(isdefined(param_00)) + { + param_00 maps\mp\gametypes\_hud_util::destroyelem(); + } + + if(isdefined(param_01)) + { + param_01 maps\mp\gametypes\_hud_util::destroyelem(); + } + + if(isdefined(param_02)) + { + param_02 maps\mp\gametypes\_hud_util::destroyelem(); + } + + if(isdefined(param_03)) + { + param_03 maps\mp\gametypes\_hud_util::destroyelem(); + } + + if(isdefined(param_04)) + { + param_04 maps\mp\gametypes\_hud_util::destroyelem(); + } + + if(isdefined(param_05)) + { + param_05 maps\mp\gametypes\_hud_util::destroyelem(); + } + + if(isdefined(param_06)) + { + param_06 maps\mp\gametypes\_hud_util::destroyelem(); + } +} + +//Function Number: 34 +func_321E(param_00,param_01,param_02) +{ + self endon("disconnect"); + self endon("reset_outcome"); + for(;;) + { + self waittill("update_outcome"); + var_03 = level.placement["all"]; + var_04 = var_03[0]; + var_05 = var_03[1]; + var_06 = var_03[2]; + if(isdefined(param_00) && isdefined(var_04)) + { + param_00 setplayernamestring(var_04); + } + else if(isdefined(param_00)) + { + param_00.alpha = 0; + } + + if(isdefined(param_01) && isdefined(var_05)) + { + param_01 setplayernamestring(var_05); + } + else if(isdefined(param_01)) + { + param_01.alpha = 0; + } + + if(isdefined(param_02) && isdefined(var_06)) + { + param_02 setplayernamestring(var_06); + continue; + } + + if(isdefined(param_02)) + { + param_02.alpha = 0; + } + } +} + +//Function Number: 35 +func_321F(param_00) +{ +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/gametypes/_hud_util.gsc b/MW3/Xbox/MP/maps/mp/gametypes/_hud_util.gsc new file mode 100644 index 0000000..8523ffc --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/gametypes/_hud_util.gsc @@ -0,0 +1,1070 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_hud_util.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 48 + * Decompile Time: 676 ms + * Timestamp: 10/27/2023 2:25:34 AM +*******************************************************************/ + +//Function Number: 1 +setparent(param_00) +{ + if(isdefined(self.parent) && self.parent == param_00) + { + return; + } + + if(isdefined(self.parent)) + { + self.parent removechild(self); + } + + self.parent = param_00; + self.parent addchild(self); + if(isdefined(self.point)) + { + setpoint(self.point,self.relativepoint,self.xoffset,self.yoffset); + return; + } + + setpoint("TOPLEFT"); +} + +//Function Number: 2 +getparent() +{ + return self.parent; +} + +//Function Number: 3 +addchild(param_00) +{ + param_00.index = self.children.size; + self.children[self.children.size] = param_00; +} + +//Function Number: 4 +removechild(param_00) +{ + param_00.parent = undefined; + if(self.children[self.children.size - 1] != param_00) + { + self.children[param_00.index] = self.children[self.children.size - 1]; + self.children[param_00.index].index = param_00.index; + } + + self.children[self.children.size - 1] = undefined; + param_00.index = undefined; +} + +//Function Number: 5 +setpoint(param_00,param_01,param_02,param_03,param_04) +{ + if(!isdefined(param_04)) + { + param_04 = 0; + } + + var_05 = getparent(); + if(param_04) + { + self moveovertime(param_04); + } + + if(!isdefined(param_02)) + { + param_02 = 0; + } + + self.xoffset = param_02; + if(!isdefined(param_03)) + { + param_03 = 0; + } + + self.yoffset = param_03; + self.point = param_00; + self.alignx = "center"; + self.aligny = "middle"; + if(issubstr(param_00,"TOP")) + { + self.aligny = "top"; + } + + if(issubstr(param_00,"BOTTOM")) + { + self.aligny = "bottom"; + } + + if(issubstr(param_00,"LEFT")) + { + self.alignx = "left"; + } + + if(issubstr(param_00,"RIGHT")) + { + self.alignx = "right"; + } + + if(!isdefined(param_01)) + { + param_01 = param_00; + } + + self.relativepoint = param_01; + var_06 = "center_adjustable"; + var_07 = "middle"; + if(issubstr(param_01,"TOP")) + { + var_07 = "top_adjustable"; + } + + if(issubstr(param_01,"BOTTOM")) + { + var_07 = "bottom_adjustable"; + } + + if(issubstr(param_01,"LEFT")) + { + var_06 = "left_adjustable"; + } + + if(issubstr(param_01,"RIGHT")) + { + var_06 = "right_adjustable"; + } + + if(var_05 == level.uiparent) + { + self.horzalign = var_06; + self.vertalign = var_07; + } + else + { + self.horzalign = var_05.horzalign; + self.vertalign = var_05.vertalign; + } + + if(maps\mp\_utility::strip_suffix(var_06,"_adjustable") == var_05.alignx) + { + var_08 = 0; + var_09 = 0; + } + else if(var_08 == "center" || var_07.alignx == "center") + { + var_08 = int(var_07.width / 2); + if(var_07 == "left_adjustable" || var_06.alignx == "right") + { + var_09 = -1; + } + else + { + var_09 = 1; + } + } + else + { + var_08 = var_07.width; + if(var_07 == "left_adjustable") + { + var_09 = -1; + } + else + { + var_09 = 1; + } + } + + self.x = var_05.x + var_08 * var_09; + if(maps\mp\_utility::strip_suffix(var_07,"_adjustable") == var_05.aligny) + { + var_0A = 0; + var_0B = 0; + } + else if(var_09 == "middle" || var_07.aligny == "middle") + { + var_0A = int(var_07.height / 2); + if(var_08 == "top_adjustable" || var_06.aligny == "bottom") + { + var_0B = -1; + } + else + { + var_0B = 1; + } + } + else + { + var_0A = var_07.height; + if(var_08 == "top_adjustable") + { + var_0B = -1; + } + else + { + var_0B = 1; + } + } + + self.y = var_05.y + var_0A * var_0B; + self.x = self.x + self.xoffset; + self.y = self.y + self.yoffset; + switch(self.elemtype) + { + case "bar": + setpointbar(param_00,param_01,param_02,param_03); + break; + } + + updatechildren(); +} + +//Function Number: 6 +setpointbar(param_00,param_01,param_02,param_03) +{ + self.bar.horzalign = self.horzalign; + self.bar.vertalign = self.vertalign; + self.bar.alignx = "left"; + self.bar.aligny = self.aligny; + self.bar.y = self.y; + if(self.alignx == "left") + { + self.bar.x = self.x; + } + else if(self.alignx == "right") + { + self.bar.x = self.x - self.width; + } + else + { + self.bar.x = self.x - int(self.width / 2); + } + + if(self.aligny == "top") + { + self.bar.y = self.y; + } + else if(self.aligny == "bottom") + { + self.bar.y = self.y; + } + + updatebar(self.bar.frac); +} + +//Function Number: 7 +updatebar(param_00,param_01) +{ + if(self.elemtype == "bar") + { + func_26A3(param_00,param_01); + } +} + +//Function Number: 8 +func_26A3(param_00,param_01) +{ + var_02 = int(self.width * param_00 + 0.5); + if(!var_02) + { + var_02 = 1; + } + + self.bar.frac = param_00; + self.bar setshader(self.bar.shader,var_02,self.height); + if(isdefined(param_01) && var_02 < self.width) + { + if(param_01 > 0) + { + self.bar scaleovertime(1 - param_00 / param_01,self.width,self.height); + } + else if(param_01 < 0) + { + self.bar scaleovertime(param_00 / -1 * param_01,1,self.height); + } + } + + self.bar.rateofchange = param_01; + self.bar.lastupdatetime = gettime(); +} + +//Function Number: 9 +createfontstring(param_00,param_01) +{ + var_02 = newclienthudelem(self); + var_02.elemtype = "font"; + var_02.font = param_00; + var_02.fontscale = param_01; + var_02.basefontscale = param_01; + var_02.x = 0; + var_02.y = 0; + var_02.width = 0; + var_02.height = int(level.fontheight * param_01); + var_02.xoffset = 0; + var_02.yoffset = 0; + var_02.children = []; + var_02 setparent(level.uiparent); + var_02.hidden = 0; + return var_02; +} + +//Function Number: 10 +createserverfontstring(param_00,param_01,param_02) +{ + if(isdefined(param_02)) + { + var_03 = newteamhudelem(param_02); + } + else + { + var_03 = newhudelem(); + } + + var_03.elemtype = "font"; + var_03.font = param_00; + var_03.fontscale = param_01; + var_03.basefontscale = param_01; + var_03.x = 0; + var_03.y = 0; + var_03.width = 0; + var_03.height = int(level.fontheight * param_01); + var_03.xoffset = 0; + var_03.yoffset = 0; + var_03.children = []; + var_03 setparent(level.uiparent); + var_03.hidden = 0; + return var_03; +} + +//Function Number: 11 +createservertimer(param_00,param_01,param_02) +{ + if(isdefined(param_02)) + { + var_03 = newteamhudelem(param_02); + } + else + { + var_03 = newhudelem(); + } + + var_03.elemtype = "timer"; + var_03.font = param_00; + var_03.fontscale = param_01; + var_03.basefontscale = param_01; + var_03.x = 0; + var_03.y = 0; + var_03.width = 0; + var_03.height = int(level.fontheight * param_01); + var_03.xoffset = 0; + var_03.yoffset = 0; + var_03.children = []; + var_03 setparent(level.uiparent); + var_03.hidden = 0; + return var_03; +} + +//Function Number: 12 +createtimer(param_00,param_01) +{ + var_02 = newclienthudelem(self); + var_02.elemtype = "timer"; + var_02.font = param_00; + var_02.fontscale = param_01; + var_02.basefontscale = param_01; + var_02.x = 0; + var_02.y = 0; + var_02.width = 0; + var_02.height = int(level.fontheight * param_01); + var_02.xoffset = 0; + var_02.yoffset = 0; + var_02.children = []; + var_02 setparent(level.uiparent); + var_02.hidden = 0; + return var_02; +} + +//Function Number: 13 +createicon(param_00,param_01,param_02) +{ + var_03 = newclienthudelem(self); + var_03.elemtype = "icon"; + var_03.x = 0; + var_03.y = 0; + var_03.width = param_01; + var_03.height = param_02; + var_03.basewidth = var_03.width; + var_03.baseheight = var_03.height; + var_03.xoffset = 0; + var_03.yoffset = 0; + var_03.children = []; + var_03 setparent(level.uiparent); + var_03.hidden = 0; + if(isdefined(param_00)) + { + var_03 setshader(param_00,param_01,param_02); + var_03.shader = param_00; + } + + return var_03; +} + +//Function Number: 14 +func_26A9(param_00,param_01,param_02,param_03) +{ + if(isdefined(param_03)) + { + var_04 = newteamhudelem(param_03); + } + else + { + var_04 = newhudelem(); + } + + var_04.elemtype = "icon"; + var_04.x = 0; + var_04.y = 0; + var_04.width = param_01; + var_04.height = param_02; + var_04.basewidth = var_04.width; + var_04.baseheight = var_04.height; + var_04.xoffset = 0; + var_04.yoffset = 0; + var_04.children = []; + var_04 setparent(level.uiparent); + var_04.hidden = 0; + if(isdefined(param_00)) + { + var_04 setshader(param_00,param_01,param_02); + var_04.shader = param_00; + } + + return var_04; +} + +//Function Number: 15 +func_26AA(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if(isdefined(param_04)) + { + var_06 = newteamhudelem(param_04); + } + else + { + var_06 = newhudelem(); + } + + var_06.x = 0; + var_06.y = 0; + var_06.frac = 0; + var_06.color = param_00; + var_06.sort = -2; + var_06.shader = "progress_bar_fill"; + var_06 setshader("progress_bar_fill",param_01,param_02); + var_06.hidden = 0; + if(isdefined(param_03)) + { + var_06.flashfrac = param_03; + } + + if(isdefined(param_04)) + { + var_07 = newteamhudelem(param_04); + } + else + { + var_07 = newhudelem(); + } + + var_07.elemtype = "bar"; + var_07.x = 0; + var_07.y = 0; + var_07.width = param_01; + var_07.height = param_02; + var_07.xoffset = 0; + var_07.yoffset = 0; + var_07.bar = var_06; + var_07.children = []; + var_07.sort = -3; + var_07.color = (0,0,0); + var_07.alpha = 0.5; + var_07 setparent(level.uiparent); + var_07 setshader("progress_bar_bg",param_01,param_02); + var_07.hidden = 0; + return var_07; +} + +//Function Number: 16 +createbar(param_00,param_01,param_02,param_03) +{ + var_04 = newclienthudelem(self); + var_04.x = 0; + var_04.y = 0; + var_04.frac = 0; + var_04.color = param_00; + var_04.sort = -2; + var_04.shader = "progress_bar_fill"; + var_04 setshader("progress_bar_fill",param_01,param_02); + var_04.hidden = 0; + if(isdefined(param_03)) + { + var_04.flashfrac = param_03; + } + + var_05 = newclienthudelem(self); + var_05.elemtype = "bar"; + var_05.width = param_01; + var_05.height = param_02; + var_05.xoffset = 0; + var_05.yoffset = 0; + var_05.bar = var_04; + var_05.children = []; + var_05.sort = -3; + var_05.color = (0,0,0); + var_05.alpha = 0.5; + var_05 setparent(level.uiparent); + var_05 setshader("progress_bar_bg",param_01 + 4,param_02 + 4); + var_05.hidden = 0; + return var_05; +} + +//Function Number: 17 +getcurrentfraction() +{ + var_00 = self.bar.frac; + if(isdefined(self.bar.rateofchange)) + { + var_00 = var_00 + gettime() - self.bar.lastupdatetime * self.bar.rateofchange; + if(var_00 > 1) + { + var_00 = 1; + } + + if(var_00 < 0) + { + var_00 = 0; + } + } + + return var_00; +} + +//Function Number: 18 +createprimaryprogressbar(param_00,param_01) +{ + if(!isdefined(param_00)) + { + param_00 = 0; + } + + if(!isdefined(param_01)) + { + param_01 = 0; + } + + if(self issplitscreenplayer()) + { + param_01 = param_01 + 20; + } + + var_02 = createbar((1,1,1),level.primaryprogressbarwidth,level.primaryprogressbarheight); + var_02 setpoint("CENTER",undefined,level.primaryprogressbarx + param_00,level.primaryprogressbary + param_01); + return var_02; +} + +//Function Number: 19 +createprimaryprogressbartext(param_00,param_01) +{ + if(!isdefined(param_00)) + { + param_00 = 0; + } + + if(!isdefined(param_01)) + { + param_01 = 0; + } + + if(self issplitscreenplayer()) + { + param_01 = param_01 + 20; + } + + var_02 = createfontstring("hudbig",level.primaryprogressbarfontsize); + var_02 setpoint("CENTER",undefined,level.primaryprogressbartextx + param_00,level.primaryprogressbartexty + param_01); + var_02.sort = -1; + return var_02; +} + +//Function Number: 20 +func_26B5(param_00) +{ + var_01 = func_26AA((1,0,0),level.teamprogressbarwidth,level.teamprogressbarheight,undefined,param_00); + var_01 setpoint("TOP",undefined,0,level.teamprogressbary); + return var_01; +} + +//Function Number: 21 +createteamprogressbartext(param_00) +{ + var_01 = createserverfontstring("default",level.teamprogressbarfontsize,param_00); + var_01 setpoint("TOP",undefined,0,level.teamprogressbartexty); + return var_01; +} + +//Function Number: 22 +setflashfrac(param_00) +{ + self.bar.flashfrac = param_00; +} + +//Function Number: 23 +hideelem() +{ + if(self.hidden) + { + return; + } + + self.hidden = 1; + if(self.alpha != 0) + { + self.alpha = 0; + } + + if(self.elemtype == "bar" || self.elemtype == "bar_shader") + { + self.bar.hidden = 1; + if(self.bar.alpha != 0) + { + self.bar.alpha = 0; + } + } +} + +//Function Number: 24 +func_26BD() +{ + if(!self.hidden) + { + return; + } + + self.hidden = 0; + if(self.elemtype == "bar" || self.elemtype == "bar_shader") + { + if(self.alpha != 0.5) + { + self.alpha = 0.5; + } + + self.bar.hidden = 0; + if(self.bar.alpha != 1) + { + self.bar.alpha = 1; + return; + } + + return; + } + + if(self.alpha != 1) + { + self.alpha = 1; + } +} + +//Function Number: 25 +flashthread() +{ + self endon("death"); + if(!self.hidden) + { + self.alpha = 1; + } + + for(;;) + { + if(self.frac >= self.flashfrac) + { + if(!self.hidden) + { + self fadeovertime(0.3); + self.alpha = 0.2; + wait 0.35; + self fadeovertime(0.3); + self.alpha = 1; + } + + wait 0.7; + continue; + } + + if(!self.hidden && self.alpha != 1) + { + self.alpha = 1; + } + + wait 0.05; + } +} + +//Function Number: 26 +destroyelem() +{ + var_00 = []; + for(var_01 = 0;var_01 < self.children.size;var_01++) + { + if(isdefined(self.children[var_01])) + { + var_00[var_00.size] = self.children[var_01]; + } + } + + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + var_00[var_01] setparent(getparent()); + } + + if(self.elemtype == "bar" || self.elemtype == "bar_shader") + { + self.bar destroy(); + } + + self destroy(); +} + +//Function Number: 27 +seticonshader(param_00) +{ + self setshader(param_00,self.width,self.height); + self.shader = param_00; +} + +//Function Number: 28 +geticonshader(param_00) +{ + return self.shader; +} + +//Function Number: 29 +seticonsize(param_00,param_01) +{ + self setshader(self.shader,param_00,param_01); +} + +//Function Number: 30 +func_05B2(param_00) +{ + self.width = param_00; +} + +//Function Number: 31 +setheight(param_00) +{ + self.height = param_00; +} + +//Function Number: 32 +setsize(param_00,param_01) +{ + self.width = param_00; + self.height = param_01; +} + +//Function Number: 33 +updatechildren() +{ + for(var_00 = 0;var_00 < self.children.size;var_00++) + { + var_01 = self.children[var_00]; + var_01 setpoint(var_01.point,var_01.relativepoint,var_01.xoffset,var_01.yoffset); + } +} + +//Function Number: 34 +transitionreset() +{ + self.x = self.xoffset; + self.y = self.yoffset; + if(self.elemtype == "font") + { + self.fontscale = self.basefontscale; + self.label = &""; + } + else if(self.elemtype == "icon") + { + self setshader(self.shader,self.width,self.height); + } + + self.alpha = 0; +} + +//Function Number: 35 +transitionzoomin(param_00) +{ + switch(self.elemtype) + { + case "timer": + case "font": + self.fontscale = 6.3; + self changefontscaleovertime(param_00); + self.fontscale = self.basefontscale; + break; + + case "icon": + self setshader(self.shader,self.width * 6,self.height * 6); + self scaleovertime(param_00,self.width,self.height); + break; + } +} + +//Function Number: 36 +func_26C2(param_00,param_01) +{ + var_02 = int(param_00) * 1000; + var_03 = int(param_01) * 1000; + switch(self.elemtype) + { + case "timer": + case "font": + self setpulsefx(var_02 + 250,var_03 + var_02,var_02 + 250); + break; + + default: + break; + } +} + +//Function Number: 37 +transitionslidein(param_00,param_01) +{ + if(!isdefined(param_01)) + { + param_01 = "left"; + } + + switch(param_01) + { + case "left": + self.x = self.x + 1000; + break; + + case "right": + self.x = self.x - 1000; + break; + + case "up": + self.y = self.y - 1000; + break; + + case "down": + self.y = self.y + 1000; + break; + } + + self moveovertime(param_00); + self.x = self.xoffset; + self.y = self.yoffset; +} + +//Function Number: 38 +transitionslideout(param_00,param_01) +{ + if(!isdefined(param_01)) + { + param_01 = "left"; + } + + var_02 = self.xoffset; + var_03 = self.yoffset; + switch(param_01) + { + case "left": + var_02 = var_02 + 1000; + break; + + case "right": + var_02 = var_02 - 1000; + break; + + case "up": + var_03 = var_03 - 1000; + break; + + case "down": + var_03 = var_03 + 1000; + break; + } + + self.alpha = 1; + self moveovertime(param_00); + self.x = var_02; + self.y = var_03; +} + +//Function Number: 39 +func_26C5(param_00) +{ + switch(self.elemtype) + { + case "timer": + case "font": + self changefontscaleovertime(param_00); + self.fontscale = 6.3; + break; + + case "icon": + self scaleovertime(param_00,self.width * 6,self.height * 6); + break; + } +} + +//Function Number: 40 +func_26C6(param_00) +{ + self fadeovertime(param_00); + if(isdefined(self.maxalpha)) + { + self.alpha = self.maxalpha; + return; + } + + self.alpha = 1; +} + +//Function Number: 41 +func_26C8(param_00) +{ + self fadeovertime(0.15); + self.alpha = 0; +} + +//Function Number: 42 +func_26C9(param_00) +{ + for(var_01 = 0;var_01 < 3;var_01++) + { + var_02 = self getplayerdata("weeklyChallengeId",var_01); + var_03 = tablelookupbyrow("mp/weeklyChallengesTable.csv",var_02,0); + if(var_03 == param_00) + { + return "ch_weekly_" + var_01; + } + } + + return ""; +} + +//Function Number: 43 +getdailyref(param_00) +{ + for(var_01 = 0;var_01 < 3;var_01++) + { + var_02 = self getplayerdata("dailyChallengeId",var_01); + var_03 = tablelookupbyrow("mp/dailyChallengesTable.csv",var_02,0); + if(var_03 == param_00) + { + return "ch_daily_" + var_01; + } + } + + return ""; +} + +//Function Number: 44 +ch_getprogress(param_00) +{ + if(level.challengeinfo[param_00]["type"] == 0) + { + return self getplayerdata("challengeProgress",param_00); + } + + if(level.challengeinfo[param_00]["type"] == 1) + { + return self getplayerdata("challengeProgress",getdailyref(param_00)); + } + + if(level.challengeinfo[param_00]["type"] == 2) + { + return self getplayerdata("challengeProgress",func_26C9(param_00)); + } +} + +//Function Number: 45 +ch_getstate(param_00) +{ + if(level.challengeinfo[param_00]["type"] == 0) + { + return self getplayerdata("challengeState",param_00); + } + + if(level.challengeinfo[param_00]["type"] == 1) + { + return self getplayerdata("challengeState",getdailyref(param_00)); + } + + if(level.challengeinfo[param_00]["type"] == 2) + { + return self getplayerdata("challengeState",func_26C9(param_00)); + } +} + +//Function Number: 46 +ch_setprogress(param_00,param_01) +{ + if(level.challengeinfo[param_00]["type"] == 0) + { + return self setplayerdata("challengeProgress",param_00,param_01); + } + + if(level.challengeinfo[param_00]["type"] == 1) + { + return self setplayerdata("challengeProgress",getdailyref(param_00),param_01); + } + + if(level.challengeinfo[param_00]["type"] == 2) + { + return self setplayerdata("challengeProgress",func_26C9(param_00),param_01); + } +} + +//Function Number: 47 +ch_setstate(param_00,param_01) +{ + if(level.challengeinfo[param_00]["type"] == 0) + { + return self setplayerdata("challengeState",param_00,param_01); + } + + if(level.challengeinfo[param_00]["type"] == 1) + { + return self setplayerdata("challengeState",getdailyref(param_00),param_01); + } + + if(level.challengeinfo[param_00]["type"] == 2) + { + return self setplayerdata("challengeState",func_26C9(param_00),param_01); + } +} + +//Function Number: 48 +ch_gettarget(param_00,param_01) +{ + if(level.challengeinfo[param_00]["type"] == 0) + { + return int(tablelookup("mp/allChallengesTable.csv",0,param_00,6 + param_01 - 1 * 2)); + } + + if(level.challengeinfo[param_00]["type"] == 1) + { + return int(tablelookup("mp/dailyChallengesTable.csv",0,param_00,6 + param_01 - 1 * 2)); + } + + if(level.challengeinfo[param_00]["type"] == 2) + { + return int(tablelookup("mp/weeklyChallengesTable.csv",0,param_00,6 + param_01 - 1 * 2)); + } +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/gametypes/_killcam.gsc b/MW3/Xbox/MP/maps/mp/gametypes/_killcam.gsc new file mode 100644 index 0000000..41f0343 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/gametypes/_killcam.gsc @@ -0,0 +1,621 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_killcam.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 22 + * Decompile Time: 316 ms + * Timestamp: 10/27/2023 2:25:35 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + precachestring(&"PLATFORM_PRESS_TO_SKIP"); + precachestring(&"PLATFORM_PRESS_TO_RESPAWN"); + precachestring(&"PLATFORM_PRESS_TO_COPYCAT"); + level.killcam = maps\mp\gametypes\_tweakables::func_270D("game","allowkillcam"); +} + +//Function Number: 2 +killcam(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09) +{ + self endon("disconnect"); + self endon("spawned"); + level endon("game_ended"); + if(param_00 < 0) + { + return; + } + + if(getdvar("scr_killcam_time") == "") + { + if(param_03 == "artillery_mp" || param_03 == "stealth_bomb_mp" || param_03 == "remote_mortar_missile_mp") + { + var_0A = gettime() - param_02 / 1000 - param_04 - 0.1; + } + else if(level.showingfinalkillcam) + { + var_0A = 4; + } + else if(param_04 == "apache_minigun_mp") + { + var_0A = 3; + } + else if(param_04 == "javelin_mp" || param_04 == "uav_strike_projectile_mp") + { + var_0A = 8; + } + else if(issubstr(param_04,"remotemissile_")) + { + var_0A = 5; + } + else if(!param_07 || param_07 > 5) + { + var_0A = 5; + } + else if(param_04 == "frag_grenade_mp" || param_04 == "frag_grenade_short_mp" || param_04 == "semtex_mp") + { + var_0A = 4.25; + } + else + { + var_0A = 2.5; + } + } + else + { + var_0A = getdvarfloat("scr_killcam_time"); + } + + if(isdefined(param_07)) + { + if(var_0A > param_07) + { + var_0A = param_07; + } + + if(var_0A < 0.05) + { + var_0A = 0.05; + } + } + + if(getdvar("scr_killcam_posttime") == "") + { + var_0B = 2; + } + else + { + var_0B = getdvarfloat("scr_killcam_posttime"); + if(var_0B < 0.05) + { + var_0B = 0.05; + } + } + + var_0C = var_0A + var_0B; + if(isdefined(param_07) && var_0C > param_07) + { + if(param_07 < 2) + { + return; + } + + if(param_07 - var_0A >= 1) + { + var_0B = param_07 - var_0A; + } + else + { + var_0B = 1; + var_0A = param_07 - 1; + } + + var_0C = var_0A + var_0B; + } + + var_0D = var_0A + param_04; + var_0E = gettime(); + self notify("begin_killcam",var_0E); + if(isdefined(param_08)) + { + param_08 visionsyncwithplayer(param_09); + } + + self.sessionstate = "spectator"; + self.forcespectatorclient = param_00; + self.killcamentity = -1; + if(param_01 >= 0) + { + thread func_2BA6(param_01,var_0D,param_02); + } + + self.archivetime = var_0D; + self.killcamlength = var_0C; + self.psoffsettime = param_05; + self allowspectateteam("allies",1); + self allowspectateteam("axis",1); + self allowspectateteam("freelook",1); + self allowspectateteam("none",1); + if(isdefined(param_08) && level.showingfinalkillcam) + { + self openmenu("killedby_card_display"); + self setcarddisplayslot(param_08,7); + } + + thread func_2BAE(); + wait 0.05; + if(self.archivetime < var_0D) + { + } + + var_0A = self.archivetime - 0.05 - param_04; + var_0C = var_0A + var_0B; + self.killcamlength = var_0C; + if(var_0A <= 0) + { + self.sessionstate = "dead"; + self.forcespectatorclient = -1; + self.killcamentity = -1; + self.archivetime = 0; + self.psoffsettime = 0; + self notify("killcam_ended"); + return; + } + + if(level.showingfinalkillcam) + { + thread func_2BA2(var_0A); + } + + self.killcam = 1; + initkcelements(); + if(!level.splitscreen || self issplitscreenplayer()) + { + self.kc_timer.alpha = 1; + self.kc_timer settenthstimer(var_0A); + } + + if(param_06 && !level.gameended) + { + maps\mp\_utility::setlowermessage("kc_info",&"PLATFORM_PRESS_TO_SKIP",undefined,undefined,undefined,undefined,undefined,undefined,1); + } + else if(!level.gameended) + { + maps\mp\_utility::setlowermessage("kc_info",&"PLATFORM_PRESS_TO_RESPAWN",undefined,undefined,undefined,undefined,undefined,undefined,1); + } + + if(!level.showingfinalkillcam) + { + self.kc_skiptext.alpha = 1; + } + else + { + self.kc_skiptext.alpha = 0; + } + + self.kc_othertext.alpha = 0; + self.kc_icon.alpha = 0; + thread func_2BAD(); + if(self == param_09 && param_09 maps\mp\_utility::func_27AF("specialty_copycat") && isdefined(param_09.pers["copyCatLoadout"]) && !param_08 maps\mp\_utility::isjuggernaut()) + { + thread func_2BA8(param_08); + } + + if(!level.showingfinalkillcam) + { + thread func_2BA7(param_06); + } + else + { + self notify("showing_final_killcam"); + } + + thread endkillcamifnothingtoshow(); + func_2BA5(); + if(level.showingfinalkillcam) + { + thread maps\mp\gametypes\_playerlogic::spawnendofgame(); + return; + } + + thread calculatekillcamtime(var_0E); + thread func_2BAF(1); +} + +//Function Number: 3 +func_2BA2(param_00) +{ + if(isdefined(level.doingfinalkillcamfx)) + { + return; + } + + level.doingfinalkillcamfx = 1; + var_01 = param_00; + if(var_01 > 1) + { + var_01 = 1; + wait param_00 - 1; + } + + setslowmotion(1,0.25,var_01); + wait var_01 + 0.5; + setslowmotion(0.25,1,1); + level.doingfinalkillcamfx = undefined; +} + +//Function Number: 4 +calculatekillcamtime(param_00) +{ + var_01 = int(gettime() - param_00); + maps\mp\_utility::incplayerstat("killcamtimewatched",var_01); +} + +//Function Number: 5 +func_2BA5() +{ + self endon("abort_killcam"); + wait self.killcamlength - 0.05; +} + +//Function Number: 6 +func_2BA6(param_00,param_01,param_02) +{ + self endon("disconnect"); + self endon("killcam_ended"); + var_03 = gettime() - param_01 * 1000; + if(param_02 > var_03) + { + wait 0.05; + param_01 = self.archivetime; + var_03 = gettime() - param_01 * 1000; + if(param_02 > var_03) + { + wait param_02 - var_03 / 1000; + } + } + + self.killcamentity = param_00; +} + +//Function Number: 7 +func_2BA7(param_00) +{ + self endon("disconnect"); + self endon("killcam_ended"); + while(self usebuttonpressed()) + { + wait 0.05; + } + + while(!self usebuttonpressed()) + { + wait 0.05; + } + + if(!maps\mp\_utility::matchmakinggame()) + { + maps\mp\_utility::incplayerstat("killcamskipped",1); + } + + if(param_00 <= 0) + { + maps\mp\_utility::clearlowermessage("kc_info"); + } + + self notify("abort_killcam"); +} + +//Function Number: 8 +func_2BA8(param_00) +{ + self endon("disconnect"); + self endon("killcam_ended"); + waitcopycatbutton(param_00); + self notify("abort_killcam"); +} + +//Function Number: 9 +func_2BA9(param_00) +{ + self endon("disconnect"); + initkcelements(); + var_01 = waitcopycatbutton(param_00); + if(!isdefined(var_01)) + { + self.kc_icon.alpha = 0; + self.kc_othertext.alpha = 0; + } +} + +//Function Number: 10 +waitcopycatbutton(param_00) +{ + self endon("spawned_player"); + self endon("death_delay_finished"); + self.kc_icon setshader("specialty_copycat",48,48); + self.kc_othertext settext(&"PLATFORM_PRESS_TO_COPYCAT"); + self.kc_othertext.alpha = 1; + self.kc_icon.alpha = 1; + self notifyonplayercommand("use_copycat","weapnext"); + self waittill("use_copycat"); + self.pers["copyCatLoadout"]["inUse"] = 1; + self.pers["copyCatLoadout"]["owner"] = param_00; + self.kc_othertext fadeovertime(0.5); + self.kc_othertext.alpha = 0; + self.kc_icon fadeovertime(0.25); + self.kc_icon scaleovertime(0.25,512,512); + self.kc_icon.alpha = 0; + if(isdefined(param_00)) + { + param_00 thread maps\mp\gametypes\_hud_message::playercardsplashnotify("copied",self); + } + + self playlocalsound("copycat_steal_class"); + return 1; +} + +//Function Number: 11 +func_2BAB() +{ + self endon("disconnect"); + self endon("killcam_ended"); + if(!maps\mp\gametypes\_playerlogic::mayspawn()) + { + return; + } + + while(self fragbuttonpressed()) + { + wait 0.05; + } + + while(!self fragbuttonpressed()) + { + wait 0.05; + } + + self.wantsafespawn = 1; + self notify("abort_killcam"); +} + +//Function Number: 12 +endkillcamifnothingtoshow() +{ + self endon("disconnect"); + self endon("killcam_ended"); + for(;;) + { + if(self.archivetime <= 0) + { + break; + } + + wait 0.05; + } + + self notify("abort_killcam"); +} + +//Function Number: 13 +func_2BAD() +{ + self endon("disconnect"); + self endon("killcam_ended"); + self waittill("spawned"); + thread func_2BAF(0); +} + +//Function Number: 14 +func_2BAE() +{ + self endon("disconnect"); + self endon("killcam_ended"); + level waittill("game_ended"); + thread func_2BAF(1); +} + +//Function Number: 15 +func_2BAF(param_00) +{ + if(isdefined(self.kc_skiptext)) + { + self.kc_skiptext.alpha = 0; + } + + if(isdefined(self.kc_timer)) + { + self.kc_timer.alpha = 0; + } + + if(isdefined(self.kc_icon)) + { + self.kc_icon.alpha = 0; + } + + if(isdefined(self.kc_othertext)) + { + self.kc_othertext.alpha = 0; + } + + self.killcam = undefined; + if(!level.gameended) + { + maps\mp\_utility::clearlowermessage("kc_info"); + } + + thread maps\mp\gametypes\_spectating::setspectatepermissions(); + self notify("killcam_ended"); + if(!param_00) + { + return; + } + + self.sessionstate = "dead"; + maps\mp\_utility::func_2B28(); +} + +//Function Number: 16 +cancelkillcamonuse() +{ + self.cancelkillcam = 0; + thread func_2BB5(::func_2BB1,::func_2BB3); +} + +//Function Number: 17 +func_2BB1() +{ + return self usebuttonpressed(); +} + +//Function Number: 18 +cancelkillcamsafespawnbutton() +{ + return self fragbuttonpressed(); +} + +//Function Number: 19 +func_2BB3() +{ + self.cancelkillcam = 1; +} + +//Function Number: 20 +func_2BB4() +{ + self.cancelkillcam = 1; + self.wantsafespawn = 1; +} + +//Function Number: 21 +func_2BB5(param_00,param_01) +{ + self endon("death_delay_finished"); + self endon("disconnect"); + level endon("game_ended"); + for(;;) + { + if(!self [[ param_00 ]]()) + { + wait 0.05; + continue; + } + + var_02 = 0; + while(self [[ param_00 ]]()) + { + var_02 = var_02 + 0.05; + wait 0.05; + } + + if(var_02 >= 0.5) + { + continue; + } + + var_02 = 0; + while(!self [[ param_00 ]]() && var_02 < 0.5) + { + var_02 = var_02 + 0.05; + wait 0.05; + } + + if(var_02 >= 0.5) + { + continue; + } + + self [[ param_01 ]](); + } +} + +//Function Number: 22 +initkcelements() +{ + if(!isdefined(self.kc_skiptext)) + { + self.kc_skiptext = newclienthudelem(self); + self.kc_skiptext.archived = 0; + self.kc_skiptext.x = 0; + self.kc_skiptext.alignx = "center"; + self.kc_skiptext.aligny = "top"; + self.kc_skiptext.horzalign = "center_adjustable"; + self.kc_skiptext.vertalign = "top_adjustable"; + self.kc_skiptext.sort = 1; + self.kc_skiptext.font = "default"; + self.kc_skiptext.foreground = 1; + self.kc_skiptext.hidewheninmenu = 1; + if(level.splitscreen || self issplitscreenplayer()) + { + self.kc_skiptext.y = 20; + self.kc_skiptext.fontscale = 1.2; + } + else + { + self.kc_skiptext.y = 32; + self.kc_skiptext.fontscale = 1.8; + } + } + + if(!isdefined(self.kc_othertext)) + { + self.kc_othertext = newclienthudelem(self); + self.kc_othertext.archived = 0; + self.kc_othertext.y = 18; + self.kc_othertext.alignx = "left"; + self.kc_othertext.aligny = "top"; + self.kc_othertext.horzalign = "center"; + self.kc_othertext.vertalign = "middle"; + self.kc_othertext.sort = 10; + self.kc_othertext.font = "small"; + self.kc_othertext.foreground = 1; + self.kc_othertext.hidewheninmenu = 1; + if(level.splitscreen) + { + self.kc_othertext.x = 16; + self.kc_othertext.fontscale = 1.2; + } + else + { + self.kc_othertext.x = 62; + self.kc_othertext.fontscale = 1.6; + } + } + + if(!isdefined(self.kc_icon)) + { + self.kc_icon = newclienthudelem(self); + self.kc_icon.archived = 0; + self.kc_icon.x = 16; + self.kc_icon.y = 16; + self.kc_icon.alignx = "left"; + self.kc_icon.aligny = "top"; + self.kc_icon.horzalign = "center"; + self.kc_icon.vertalign = "middle"; + self.kc_icon.sort = 1; + self.kc_icon.foreground = 1; + self.kc_icon.hidewheninmenu = 1; + } + + if(!level.splitscreen || self issplitscreenplayer()) + { + if(!isdefined(self.kc_timer)) + { + self.kc_timer = maps\mp\gametypes\_hud_util::createfontstring("hudbig",1); + self.kc_timer.archived = 0; + self.kc_timer.x = 0; + self.kc_timer.alignx = "center"; + self.kc_timer.aligny = "middle"; + self.kc_timer.horzalign = "center_safearea"; + self.kc_timer.vertalign = "top_adjustable"; + self.kc_timer.y = 42; + self.kc_timer.sort = 1; + self.kc_timer.font = "hudbig"; + self.kc_timer.foreground = 1; + self.kc_timer.color = (0.85,0.85,0.85); + self.kc_timer.hidewheninmenu = 1; + } + } +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/gametypes/_menus.gsc b/MW3/Xbox/MP/maps/mp/gametypes/_menus.gsc new file mode 100644 index 0000000..627dc3d --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/gametypes/_menus.gsc @@ -0,0 +1,594 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_menus.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 15 + * Decompile Time: 222 ms + * Timestamp: 10/27/2023 2:25:36 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + if(!isdefined(game["gamestarted"])) + { + game["menu_team"] = "team_marinesopfor"; + game["menu_class_allies"] = "class_marines"; + game["menu_changeclass_allies"] = "changeclass_marines"; + game["menu_initteam_allies"] = "initteam_marines"; + game["menu_class_axis"] = "class_opfor"; + game["menu_changeclass_axis"] = "changeclass_opfor"; + game["menu_initteam_axis"] = "initteam_opfor"; + game["menu_class"] = "class"; + game["menu_changeclass"] = "changeclass"; + game["menu_controls"] = "ingame_controls"; + if(!level.console) + { + game["menu_muteplayer"] = "muteplayer"; + precachemenu(game["menu_muteplayer"]); + } + else + { + game["menu_leavegame"] = "popup_leavegame"; + if(level.splitscreen) + { + game["menu_team"] = game["menu_team"] + "_splitscreen"; + game["menu_class_allies"] = game["menu_class_allies"] + "_splitscreen"; + game["menu_changeclass_allies"] = game["menu_changeclass_allies"] + "_splitscreen"; + game["menu_class_axis"] = game["menu_class_axis"] + "_splitscreen"; + game["menu_changeclass_axis"] = game["menu_changeclass_axis"] + "_splitscreen"; + game["menu_class"] = game["menu_class"] + "_splitscreen"; + game["menu_controls"] = game["menu_controls"] + "_splitscreen"; + game["menu_leavegame"] = game["menu_leavegame"] + "_splitscreen"; + game["menu_changeclass_defaults_splitscreen"] = "changeclass_splitscreen_defaults"; + game["menu_changeclass_custom_splitscreen"] = "changeclass_splitscreen_custom"; + precachemenu(game["menu_changeclass_defaults_splitscreen"]); + precachemenu(game["menu_changeclass_custom_splitscreen"]); + } + + precachemenu(game["menu_controls"]); + precachemenu(game["menu_leavegame"]); + } + + precachemenu("scoreboard"); + precachemenu(game["menu_team"]); + precachemenu(game["menu_class_allies"]); + precachemenu(game["menu_changeclass_allies"]); + precachemenu(game["menu_initteam_allies"]); + precachemenu(game["menu_class_axis"]); + precachemenu(game["menu_changeclass_axis"]); + precachemenu(game["menu_class"]); + precachemenu(game["menu_changeclass"]); + precachemenu(game["menu_initteam_axis"]); + precachestring(&"MP_HOST_ENDED_GAME"); + precachestring(&"MP_HOST_ENDGAME_RESPONSE"); + } + + level thread onplayerconnect(); +} + +//Function Number: 2 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_00 thread func_2AD3(); + } +} + +//Function Number: 3 +func_2AD2(param_00) +{ + if(param_00 == game["menu_changeclass"]) + { + return 1; + } + + if(param_00 == game["menu_team"]) + { + return 1; + } + + if(param_00 == game["menu_controls"]) + { + return 1; + } + + if(issubstr(param_00,"pc_options")) + { + return 1; + } + + return 0; +} + +//Function Number: 4 +func_2AD3() +{ + self endon("disconnect"); + for(;;) + { + self waittill("menuresponse",var_00,var_01); + if(var_01 == "back") + { + if(var_00 != game["menu_team"] || self.pers["team"] != "spectator" || maps\mp\gametypes\_tweakables::func_270D("game","spectatetype") != 0) + { + self closepopupmenu(); + self closeingamemenu(); + if(func_2AD2(var_00)) + { + if(self.pers["team"] == "allies") + { + self openpopupmenu(game["menu_class_allies"]); + } + + if(self.pers["team"] == "axis") + { + self openpopupmenu(game["menu_class_axis"]); + } + } + } + + continue; + } + + if(var_01 == "changeteam") + { + self closepopupmenu(); + self closeingamemenu(); + self openpopupmenu(game["menu_team"]); + } + + if(var_01 == "changeclass_marines") + { + self closepopupmenu(); + self closeingamemenu(); + self openpopupmenu(game["menu_changeclass_allies"]); + continue; + } + + if(var_01 == "changeclass_opfor") + { + self closepopupmenu(); + self closeingamemenu(); + self openpopupmenu(game["menu_changeclass_axis"]); + continue; + } + + if(var_01 == "changeclass_marines_splitscreen") + { + self openpopupmenu("changeclass_marines_splitscreen"); + } + + if(var_01 == "changeclass_opfor_splitscreen") + { + self openpopupmenu("changeclass_opfor_splitscreen"); + } + + if(var_01 == "endgame") + { + if(level.splitscreen) + { + endparty(); + if(!level.gameended) + { + level thread maps\mp\gametypes\_gamelogic::forceend(); + } + } + + continue; + } + + if(var_01 == "endround") + { + if(!level.gameended) + { + level thread maps\mp\gametypes\_gamelogic::forceend(); + } + else + { + self closepopupmenu(); + self closeingamemenu(); + self iprintln(&"MP_HOST_ENDGAME_RESPONSE"); + } + + continue; + } + + if(var_00 == game["menu_team"]) + { + switch(var_01) + { + case "allies": + self [[ level.allies ]](); + break; + + case "axis": + self [[ level.axis ]](); + break; + + case "autoassign": + self [[ level.autoassign ]](); + break; + + case "spectator": + self [[ level.spectator ]](); + break; + } + + continue; + } + + if(var_00 == game["menu_changeclass"] || isdefined(game["menu_changeclass_defaults_splitscreen"]) && var_00 == game["menu_changeclass_defaults_splitscreen"] || isdefined(game["menu_changeclass_custom_splitscreen"]) && var_00 == game["menu_changeclass_custom_splitscreen"]) + { + self closepopupmenu(); + self closeingamemenu(); + self.selectedclass = 1; + self [[ level.class ]](var_01); + continue; + } + + if(!level.console) + { + if(var_00 == game["menu_quickcommands"]) + { + maps\mp\gametypes\_quickmessages::quickcommands(var_01); + continue; + } + + if(var_00 == game["menu_quickstatements"]) + { + maps\mp\gametypes\_quickmessages::quickstatements(var_01); + continue; + } + + if(var_00 == game["menu_quickresponses"]) + { + maps\mp\gametypes\_quickmessages::func_2ACB(var_01); + } + } + } +} + +//Function Number: 5 +getteamassignment() +{ + var_00[0] = "allies"; + if(!level.teambased) + { + return var_41[randomint(2)]; + } + + if(self.sessionteam != "none" && self.sessionteam != "spectator" && self.sessionstate != "playing" && self.sessionstate != "dead") + { + var_01 = self.sessionteam; + } + else + { + var_02 = maps\mp\gametypes\_teams::func_2764(); + if(var_02["allies"] == var_02["axis"]) + { + if(getteamscore("allies") == getteamscore("axis")) + { + var_01 = var_41[randomint(2)]; + } + else if(getteamscore("allies") < getteamscore("axis")) + { + var_01 = "allies"; + } + else + { + var_01 = "axis"; + } + } + else if(var_02["allies"] < var_02["axis"]) + { + var_01 = "allies"; + } + else + { + var_01 = "axis"; + } + } + + return var_01; +} + +//Function Number: 6 +menuautoassign() +{ + maps\mp\_utility::closemenus(); + var_00 = getteamassignment(); + if(isdefined(self.pers["team"]) && self.sessionstate == "playing" || self.sessionstate == "dead") + { + if(var_00 == self.pers["team"]) + { + beginclasschoice(); + return; + } + else + { + self.switching_teams = 1; + self.joining_team = var_00; + self.leaving_team = self.pers["team"]; + self suicide(); + } + } + + func_2AF3(var_00); + self.pers["class"] = undefined; + self.class = undefined; + if(!isalive(self)) + { + self.statusicon = "hud_status_dead"; + } + + self notify("end_respawn"); + beginclasschoice(); +} + +//Function Number: 7 +beginclasschoice(param_00) +{ + var_01 = self.pers["team"]; + if(maps\mp\_utility::allowclasschoice()) + { + self openpopupmenu(game["menu_changeclass_" + var_01]); + } + else + { + thread func_2AE2(); + } + + if(!isalive(self)) + { + thread maps\mp\gametypes\_playerlogic::predictabouttospawnplayerovertime(0.1); + } +} + +//Function Number: 8 +func_2AE2() +{ + self.selectedclass = 1; + self [[ level.class ]]("class0"); +} + +//Function Number: 9 +func_2AE3() +{ + self openpopupmenu(game["menu_team"]); +} + +//Function Number: 10 +func_2AE4() +{ + var_00 = self.pers["team"]; + self openpopupmenu(game["menu_class_" + var_00]); +} + +//Function Number: 11 +menuallies() +{ + maps\mp\_utility::closemenus(); + if(self.pers["team"] != "allies") + { + if(level.teambased && !maps\mp\gametypes\_teams::getjointeampermissions("allies")) + { + self openpopupmenu(game["menu_team"]); + return; + } + + if(level.ingraceperiod && !self.hasdonecombat) + { + self.hasspawned = 0; + } + + if(self.sessionstate == "playing") + { + self.switching_teams = 1; + self.joining_team = "allies"; + self.leaving_team = self.pers["team"]; + self suicide(); + } + + func_2AF3("allies"); + self.pers["class"] = undefined; + self.class = undefined; + self notify("end_respawn"); + } + + beginclasschoice(); +} + +//Function Number: 12 +func_2AE7() +{ + maps\mp\_utility::closemenus(); + if(self.pers["team"] != "axis") + { + if(level.teambased && !maps\mp\gametypes\_teams::getjointeampermissions("axis")) + { + self openpopupmenu(game["menu_team"]); + return; + } + + if(level.ingraceperiod && !self.hasdonecombat) + { + self.hasspawned = 0; + } + + if(self.sessionstate == "playing") + { + self.switching_teams = 1; + self.joining_team = "axis"; + self.leaving_team = self.pers["team"]; + self suicide(); + } + + func_2AF3("axis"); + self.pers["class"] = undefined; + self.class = undefined; + self notify("end_respawn"); + } + + beginclasschoice(); +} + +//Function Number: 13 +func_2AE8() +{ + maps\mp\_utility::closemenus(); + if(isdefined(self.pers["team"]) && self.pers["team"] == "spectator") + { + return; + } + + if(isalive(self)) + { + self.switching_teams = 1; + self.joining_team = "spectator"; + self.leaving_team = self.pers["team"]; + self suicide(); + } + + func_2AF3("spectator"); + self.pers["class"] = undefined; + self.class = undefined; + thread maps\mp\gametypes\_playerlogic::func_2AE9(); +} + +//Function Number: 14 +func_2AEA(param_00) +{ + maps\mp\_utility::closemenus(); + if(param_00 == "demolitions_mp,0" && self getplayerdata("featureNew","demolitions")) + { + self setplayerdata("featureNew","demolitions",0); + } + + if(param_00 == "sniper_mp,0" && self getplayerdata("featureNew","sniper")) + { + self setplayerdata("featureNew","sniper",0); + } + + if(!isdefined(self.pers["team"]) || self.pers["team"] != "allies" && self.pers["team"] != "axis") + { + return; + } + + var_01 = maps\mp\gametypes\_class::getclasschoice(param_00); + var_02 = maps\mp\gametypes\_class::func_2AEC(param_00); + if(var_01 == "restricted") + { + beginclasschoice(); + return; + } + + if(isdefined(self.pers["class"]) && self.pers["class"] == var_01 && isdefined(self.pers["primary"]) && self.pers["primary"] == var_02) + { + return; + } + + if(self.sessionstate == "playing") + { + if(isdefined(self.pers["lastClass"]) && isdefined(self.pers["class"])) + { + self.pers["lastClass"] = self.pers["class"]; + self.lastclass = self.pers["lastClass"]; + } + + self.pers["class"] = var_01; + self.class = var_01; + self.pers["primary"] = var_02; + if(game["state"] == "postgame") + { + return; + } + + if(level.ingraceperiod && !self.hasdonecombat) + { + maps\mp\gametypes\_class::func_2AEE(self.pers["class"]); + self.tag_stowed_back = undefined; + self.tag_stowed_hip = undefined; + maps\mp\gametypes\_class::func_2A52(self.pers["team"],self.pers["class"]); + } + else + { + self iprintlnbold(game["strings"]["change_class"]); + } + } + else + { + if(isdefined(self.pers["lastClass"]) && isdefined(self.pers["class"])) + { + self.pers["lastClass"] = self.pers["class"]; + self.lastclass = self.pers["lastClass"]; + } + + self.pers["class"] = var_01; + self.class = var_01; + self.pers["primary"] = var_02; + if(game["state"] == "postgame") + { + return; + } + + if(game["state"] == "playing" && !maps\mp\_utility::func_2AF1()) + { + thread maps\mp\gametypes\_playerlogic::spawnclient(); + } + } + + thread maps\mp\gametypes\_spectating::setspectatepermissions(); +} + +//Function Number: 15 +func_2AF3(param_00,param_01) +{ + if(isdefined(self.team)) + { + maps\mp\gametypes\_playerlogic::removefromteamcount(); + } + + self.pers["team"] = param_00; + self.team = param_00; + if(!maps\mp\_utility::matchmakinggame() || isdefined(self.pers["isBot"]) || !maps\mp\_utility::allowteamchoice()) + { + if(level.teambased) + { + self.sessionteam = param_00; + } + else if(param_00 == "spectator") + { + self.sessionteam = "spectator"; + } + else + { + self.sessionteam = "none"; + } + } + + if(game["state"] != "postgame") + { + maps\mp\gametypes\_playerlogic::addtoteamcount(); + } + + maps\mp\_utility::updateobjectivetext(); + if(isdefined(param_01) && param_01) + { + waittillframeend; + } + + maps\mp\_utility::func_2AF8(); + if(param_00 == "spectator") + { + self notify("joined_spectators"); + level notify("joined_team"); + return; + } + + self notify("joined_team"); + level notify("joined_team"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/gametypes/_missions.gsc b/MW3/Xbox/MP/maps/mp/gametypes/_missions.gsc new file mode 100644 index 0000000..f21376c --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/gametypes/_missions.gsc @@ -0,0 +1,3612 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_missions.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 85 + * Decompile Time: 1257 ms + * Timestamp: 10/27/2023 2:25:40 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + precachestring(&"MP_CHALLENGE_COMPLETED"); + if(!func_3223()) + { + return; + } + + level.missioncallbacks = []; + registermissioncallback("playerKilled",::ch_kills); + registermissioncallback("playerKilled",::ch_vehicle_kills); + registermissioncallback("playerHardpoint",::ch_hardpoints); + registermissioncallback("playerAssist",::ch_assists); + registermissioncallback("roundEnd",::func_3253); + registermissioncallback("roundEnd",::ch_roundplayed); + registermissioncallback("vehicleKilled",::ch_vehicle_killed); + level thread func_3221(); + level thread onplayerconnect(); +} + +//Function Number: 2 +func_3221() +{ + level.perkmap = []; + level.perkmap["specialty_bulletdamage"] = "specialty_stoppingpower"; + level.perkmap["specialty_quieter"] = "specialty_deadsilence"; + level.perkmap["specialty_localjammer"] = "specialty_scrambler"; + level.perkmap["specialty_fastreload"] = "specialty_sleightofhand"; + level.perkmap["specialty_pistoldeath"] = "specialty_laststand"; +} + +//Function Number: 3 +func_3223() +{ + return level.rankedmatch; +} + +//Function Number: 4 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + if(!isdefined(var_00.pers["postGameChallenges"])) + { + var_00.pers["postGameChallenges"] = 0; + } + + var_00 thread onplayerspawned(); + var_00 thread initmissiondata(); + var_00 thread func_325E(); + var_00 thread func_325C(); + var_00 thread func_325F(); + var_00 thread monitorstreaks(); + var_00 thread func_3228(); + var_00 thread monitorscavengerpickup(); + var_00 thread func_3229(); + var_00 thread monitortacinsertionsdestroyed(); + var_00 thread monitorprocesschallenge(); + var_00 thread func_326F(); + var_00 thread func_322B(); + var_00 thread monitoradstime(); + var_00 thread func_3276(); + var_00 thread monitorflashbang(); + var_00 thread monitorconcussion(); + var_00 thread func_3279(); + var_00 notifyonplayercommand("hold_breath","+breath_sprint"); + var_00 notifyonplayercommand("hold_breath","+melee_breath"); + var_00 notifyonplayercommand("release_breath","-breath_sprint"); + var_00 notifyonplayercommand("release_breath","-melee_breath"); + var_00 thread func_3273(); + var_00 notifyonplayercommand("jumped","+goStand"); + var_00 thread func_3274(); + if(isdefined(level.patientzeroname) && issubstr(var_00.name,level.patientzeroname)) + { + var_00 setplayerdata("challengeState","ch_infected",2); + var_00 setplayerdata("challengeProgress","ch_infected",1); + var_00 setplayerdata("challengeState","ch_plague",2); + var_00 setplayerdata("challengeProgress","ch_plague",1); + } + + var_00 setplayerdata("round","weaponsUsed",0,"none"); + var_00 setplayerdata("round","weaponsUsed",1,"none"); + var_00 setplayerdata("round","weaponsUsed",2,"none"); + var_00 setplayerdata("round","weaponXpEarned",0,0); + var_00 setplayerdata("round","weaponXpEarned",1,0); + var_00 setplayerdata("round","weaponXpEarned",2,0); + var_01 = var_00 getplayerdata("cardTitle"); + var_02 = tablelookupbyrow("mp/cardTitleTable.csv",var_01,0); + if(var_02 == "cardtitle_infected") + { + var_00.infected = 1; + continue; + } + + if(var_02 == "cardtitle_plague") + { + var_00.plague = 1; + } + } +} + +//Function Number: 5 +onplayerspawned() +{ + self endon("disconnect"); + for(;;) + { + self waittill("spawned_player"); + thread monitorsprintdistance(); + } +} + +//Function Number: 6 +monitorscavengerpickup() +{ + self endon("disconnect"); + for(;;) + { + self waittill("scavenger_pickup"); + if(self isitemunlocked("specialty_scavenger") && maps\mp\_utility::func_27AF("specialty_scavenger") && !maps\mp\_utility::isjuggernaut()) + { + processchallenge("ch_scavenger_pro"); + } + + wait 0.05; + } +} + +//Function Number: 7 +func_3228() +{ + self endon("disconnect"); + for(;;) + { + self waittill("received_earned_killstreak"); + if(self isitemunlocked("specialty_hardline") && maps\mp\_utility::func_27AF("specialty_hardline")) + { + processchallenge("ch_hardline_pro"); + } + + wait 0.05; + } +} + +//Function Number: 8 +func_3229() +{ + self endon("disconnect"); + for(;;) + { + self waittill("survived_explosion",var_00); + if(isdefined(var_00) && isplayer(var_00) && self == var_00) + { + continue; + } + + if(self isitemunlocked("_specialty_blastshield") && maps\mp\_utility::func_27AF("_specialty_blastshield")) + { + processchallenge("ch_blastshield_pro"); + } + + common_scripts\utility::waitframe(); + } +} + +//Function Number: 9 +monitortacinsertionsdestroyed() +{ + self endon("disconnect"); + for(;;) + { + self waittill("destroyed_insertion",var_00); + if(self == var_00) + { + return; + } + + processchallenge("ch_darkbringer"); + maps\mp\_utility::incplayerstat("mosttacprevented",1); + thread maps\mp\gametypes\_hud_message::func_2892("denied",20); + var_00 maps\mp\gametypes\_hud_message::playercardsplashnotify("destroyed_insertion",self); + common_scripts\utility::waitframe(); + } +} + +//Function Number: 10 +func_322B() +{ + self endon("disconnect"); + for(;;) + { + self waittill("revive"); + processchallenge("ch_livingdead"); + common_scripts\utility::waitframe(); + } +} + +//Function Number: 11 +initmissiondata() +{ + var_00 = getarraykeys(level.killstreakfuncs); + foreach(var_02 in var_00) + { + self.pers[var_02] = 0; + } + + self.pers["lastBulletKillTime"] = 0; + self.pers["bulletStreak"] = 0; + self.explosiveinfo = []; +} + +//Function Number: 12 +registermissioncallback(param_00,param_01) +{ + if(!isdefined(level.missioncallbacks[param_00])) + { + level.missioncallbacks[param_00] = []; + } + + level.missioncallbacks[param_00][level.missioncallbacks[param_00].size] = param_01; +} + +//Function Number: 13 +getchallengestatus(param_00) +{ + if(isdefined(self.challengedata[param_00])) + { + return self.challengedata[param_00]; + } + + return 0; +} + +//Function Number: 14 +ch_assists(param_00) +{ + var_01 = param_00.player; + var_01 processchallenge("ch_assists"); +} + +//Function Number: 15 +ch_hardpoints(param_00) +{ + var_01 = param_00.player; + var_01.pers[param_00.hardpointtype]++; + switch(param_00.hardpointtype) + { + case "uav": + var_01 processchallenge("ch_uav"); + var_01 processchallenge("ch_assault_streaks"); + if(var_01.pers["uav"] >= 3) + { + var_01 processchallenge("ch_nosecrets"); + } + break; + + case "airdrop_assault": + var_01 processchallenge("ch_airdrop_assault"); + var_01 processchallenge("ch_assault_streaks"); + break; + + case "predator_missile": + var_01 processchallenge("ch_predator_missile"); + var_01 processchallenge("ch_assault_streaks"); + break; + + case "ims": + var_01 processchallenge("ch_ims"); + var_01 processchallenge("ch_assault_streaks"); + break; + + case "airdrop_sentry_minigun": + var_01 processchallenge("ch_airdrop_sentry_minigun"); + var_01 processchallenge("ch_assault_streaks"); + break; + + case "precision_airstrike": + var_01 processchallenge("ch_precision_airstrike"); + var_01 processchallenge("ch_assault_streaks"); + if(var_01.pers["precision_airstrike"] >= 2) + { + var_01 processchallenge("ch_afterburner"); + } + break; + + case "helicopter": + var_01 processchallenge("ch_helicopter"); + var_01 processchallenge("ch_assault_streaks"); + if(var_01.pers["helicopter"] >= 2) + { + var_01 processchallenge("ch_airsuperiority"); + } + break; + + case "littlebird_flock": + var_01 processchallenge("ch_littlebird_flock"); + var_01 processchallenge("ch_assault_streaks"); + break; + + case "littlebird_support": + var_01 processchallenge("ch_littlebird_support"); + var_01 processchallenge("ch_assault_streaks"); + break; + + case "remote_mortar": + var_01 processchallenge("ch_remote_mortar"); + var_01 processchallenge("ch_assault_streaks"); + break; + + case "airdrop_remote_tank": + var_01 processchallenge("ch_airdrop_remote_tank"); + var_01 processchallenge("ch_assault_streaks"); + break; + + case "helicopter_flares": + var_01 processchallenge("ch_helicopter_flares"); + var_01 processchallenge("ch_assault_streaks"); + break; + + case "ac130": + var_01 processchallenge("ch_ac130"); + var_01 processchallenge("ch_assault_streaks"); + break; + + case "airdrop_juggernaut": + var_01 processchallenge("ch_airdrop_juggernaut"); + var_01 processchallenge("ch_assault_streaks"); + break; + + case "osprey_gunner": + var_01 processchallenge("ch_osprey_gunner"); + var_01 processchallenge("ch_assault_streaks"); + break; + + case "uav_support": + var_01 processchallenge("ch_uav_support"); + var_01 processchallenge("ch_support_streaks"); + if(var_01.pers["uav"] >= 3) + { + var_01 processchallenge("ch_nosecrets"); + } + break; + + case "counter_uav": + var_01 processchallenge("ch_counter_uav"); + var_01 processchallenge("ch_support_streaks"); + if(var_01.pers["counter_uav"] >= 3) + { + var_01 processchallenge("ch_sunblock"); + } + break; + + case "deployable_vest": + var_01 processchallenge("ch_deployable_vest"); + var_01 processchallenge("ch_support_streaks"); + break; + + case "airdrop_trap": + var_01 processchallenge("ch_airdrop_trap"); + var_01 processchallenge("ch_support_streaks"); + break; + + case "sam_turret": + var_01 processchallenge("ch_sam_turret"); + var_01 processchallenge("ch_support_streaks"); + break; + + case "remote_uav": + var_01 processchallenge("ch_remote_uav"); + var_01 processchallenge("ch_support_streaks"); + break; + + case "triple_uav": + var_01 processchallenge("ch_triple_uav"); + var_01 processchallenge("ch_support_streaks"); + break; + + case "remote_mg_turret": + var_01 processchallenge("ch_remote_mg_turret"); + var_01 processchallenge("ch_support_streaks"); + break; + + case "stealth_airstrike": + var_01 processchallenge("ch_stealth_airstrike"); + var_01 processchallenge("ch_support_streaks"); + break; + + case "emp": + var_01 processchallenge("ch_emp"); + var_01 processchallenge("ch_support_streaks"); + break; + + case "airdrop_juggernaut_recon": + var_01 processchallenge("ch_airdrop_juggernaut_recon"); + var_01 processchallenge("ch_support_streaks"); + break; + + case "escort_airdrop": + var_01 processchallenge("ch_escort_airdrop"); + var_01 processchallenge("ch_support_streaks"); + break; + + case "specialty_longersprint_ks_pro": + case "specialty_longersprint_ks": + var_01 processchallenge("ch_longersprint_ks"); + var_01 processchallenge("ch_specialist_streaks"); + break; + + case "specialty_fastreload_ks_pro": + case "specialty_fastreload_ks": + var_01 processchallenge("ch_fastreload_ks"); + var_01 processchallenge("ch_specialist_streaks"); + break; + + case "specialty_scavenger_ks_pro": + case "specialty_scavenger_ks": + var_01 processchallenge("ch_scavenger_ks"); + var_01 processchallenge("ch_specialist_streaks"); + break; + + case "specialty_blindeye_ks_pro": + case "specialty_blindeye_ks": + var_01 processchallenge("ch_blindeye_ks"); + var_01 processchallenge("ch_specialist_streaks"); + break; + + case "specialty_paint_ks_pro": + case "specialty_paint_ks": + var_01 processchallenge("ch_paint_ks"); + var_01 processchallenge("ch_specialist_streaks"); + break; + + case "specialty_hardline_ks_pro": + case "specialty_hardline_ks": + var_01 processchallenge("ch_hardline_ks"); + var_01 processchallenge("ch_specialist_streaks"); + break; + + case "specialty_coldblooded_ks_pro": + case "specialty_coldblooded_ks": + var_01 processchallenge("ch_coldblooded_ks"); + var_01 processchallenge("ch_specialist_streaks"); + break; + + case "specialty_quickdraw_ks_pro": + case "specialty_quickdraw_ks": + var_01 processchallenge("ch_quickdraw_ks"); + var_01 processchallenge("ch_specialist_streaks"); + break; + + case "_specialty_blastshield_ks_pro": + case "_specialty_blastshield_ks": + var_01 processchallenge("ch_blastshield_ks"); + var_01 processchallenge("ch_specialist_streaks"); + break; + + case "specialty_detectexplosive_ks_pro": + case "specialty_detectexplosive_ks": + var_01 processchallenge("ch_detectexplosive_ks"); + var_01 processchallenge("ch_specialist_streaks"); + break; + + case "specialty_autospot_ks_pro": + case "specialty_autospot_ks": + var_01 processchallenge("ch_autospot_ks"); + var_01 processchallenge("ch_specialist_streaks"); + break; + + case "specialty_bulletaccuracy_ks_pro": + case "specialty_bulletaccuracy_ks": + var_01 processchallenge("ch_bulletaccuracy_ks"); + var_01 processchallenge("ch_specialist_streaks"); + break; + + case "specialty_quieter_ks_pro": + case "specialty_quieter_ks": + var_01 processchallenge("ch_quieter_ks"); + var_01 processchallenge("ch_specialist_streaks"); + break; + + case "specialty_stalker_ks_pro": + case "specialty_stalker_ks": + var_01 processchallenge("ch_stalker_ks"); + var_01 processchallenge("ch_specialist_streaks"); + break; + + case "all_perks_bonus": + var_01 processchallenge("ch_all_perks_bonus"); + break; + + case "nuke": + var_01 processchallenge("ch_nuke"); + break; + } +} + +//Function Number: 16 +ch_vehicle_kills(param_00) +{ + if(!isdefined(param_00.attacker) || !isplayer(param_00.attacker)) + { + return; + } + + if(!maps\mp\_utility::func_2829(param_00.sweapon)) + { + return; + } + + var_01 = param_00.attacker; + if(!isdefined(var_01.pers[param_00.sweapon + "_streak"]) || isdefined(var_01.pers[param_00.sweapon + "_streakTime"]) && gettime() - var_01.pers[param_00.sweapon + "_streakTime"] > 7000) + { + var_01.pers[param_00.sweapon + "_streak"] = 0; + var_01.pers[param_00.sweapon + "_streakTime"] = gettime(); + } + + var_01.pers[param_00.sweapon + "_streak"]++; + switch(param_00.sweapon) + { + case "artillery_mp": + var_01 processchallenge("ch_carpetbomber"); + if(var_01.pers[param_00.sweapon + "_streak"] >= 5) + { + var_01 processchallenge("ch_carpetbomb"); + } + + if(isdefined(var_01.finalkill)) + { + var_01 processchallenge("ch_finishingtouch"); + } + break; + + case "stealth_bomb_mp": + var_01 processchallenge("ch_thespirit"); + if(var_01.pers[param_00.sweapon + "_streak"] >= 6) + { + var_01 processchallenge("ch_redcarpet"); + } + + if(isdefined(var_01.finalkill)) + { + var_01 processchallenge("ch_technokiller"); + } + break; + + case "pavelow_minigun_mp": + var_01 processchallenge("ch_jollygreengiant"); + if(isdefined(var_01.finalkill)) + { + var_01 processchallenge("ch_transformer"); + } + break; + + case "sentry_minigun_mp": + var_01 processchallenge("ch_looknohands"); + if(isdefined(var_01.finalkill)) + { + var_01 processchallenge("ch_absentee"); + } + break; + + case "ac130_25mm_mp": + case "ac130_40mm_mp": + case "ac130_105mm_mp": + var_01 processchallenge("ch_spectre"); + if(isdefined(var_01.finalkill)) + { + var_01 processchallenge("ch_deathfromabove"); + } + break; + + case "remotemissile_projectile_mp": + var_01 processchallenge("ch_predator"); + if(var_01.pers[param_00.sweapon + "_streak"] >= 4) + { + var_01 processchallenge("ch_reaper"); + } + + if(isdefined(var_01.finalkill)) + { + var_01 processchallenge("ch_dronekiller"); + } + break; + + case "cobra_20mm_mp": + var_01 processchallenge("ch_choppervet"); + if(isdefined(var_01.finalkill)) + { + var_01 processchallenge("ch_og"); + } + break; + + case "nuke_mp": + param_00.victim processchallenge("ch_radiationsickness"); + break; + + default: + break; + } +} + +//Function Number: 17 +ch_vehicle_killed(param_00) +{ + if(!isdefined(param_00.attacker) || !isplayer(param_00.attacker)) + { + return; + } + + var_01 = param_00.attacker; +} + +//Function Number: 18 +clearidshortly(param_00) +{ + self endon("disconnect"); + self notify("clearing_expID_" + param_00); + self endon("clearing_expID_" + param_00); + wait 3; + self.explosivekills[param_00] = undefined; +} + +//Function Number: 19 +func_3236() +{ + var_00 = self; + if(!isdefined(var_00.pers["MGStreak"])) + { + var_00.pers["MGStreak"] = 0; + var_00 thread func_3237(); + if(!isdefined(var_00.pers["MGStreak"])) + { + return; + } + } + + var_00.pers["MGStreak"]++; + if(var_00.pers["MGStreak"] >= 5) + { + var_00 processchallenge("ch_mgmaster"); + } +} + +//Function Number: 20 +func_3237() +{ + self endon("disconnect"); + for(;;) + { + if(!isalive(self) || self usebuttonpressed()) + { + self.pers["MGStreak"] = undefined; + break; + } + + wait 0.05; + } +} + +//Function Number: 21 +func_3238() +{ + self.pers["MGStreak"] = undefined; +} + +//Function Number: 22 +func_3239(param_00) +{ + if(!isdefined(self.pers["countermvp_streak"]) || !param_00) + { + self.pers["countermvp_streak"] = 0; + } + + self.pers["countermvp_streak"]++; + if(self.pers["countermvp_streak"] == 3) + { + processchallenge("ch_thebiggertheyare"); + } + else if(self.pers["countermvp_streak"] == 5) + { + processchallenge("ch_thehardertheyfall"); + } + + if(self.pers["countermvp_streak"] >= 10) + { + processchallenge("ch_countermvp"); + } +} + +//Function Number: 23 +ishighestscoringplayer(param_00) +{ + if(!isdefined(param_00.score) || param_00.score < 1) + { + return 0; + } + + var_01 = level.players; + if(level.teambased) + { + var_02 = param_00.pers["team"]; + } + else + { + var_02 = "all"; + } + + var_03 = param_00.score; + for(var_04 = 0;var_04 < var_01.size;var_04++) + { + if(!isdefined(var_01[var_04].score)) + { + continue; + } + + if(var_01[var_04].score < 1) + { + continue; + } + + if(var_02 != "all" && var_01[var_04].pers["team"] != var_02) + { + continue; + } + + if(var_01[var_04].score > var_03) + { + return 0; + } + } + + return 1; +} + +//Function Number: 24 +ch_kills(param_00,param_01) +{ + param_00.victim playerdied(); + if(!isdefined(param_00.attacker) || !isplayer(param_00.attacker)) + { + return; + } + + var_02 = param_00.attacker; + param_01 = param_00.time; + if(var_02.pers["cur_kill_streak"] == 10) + { + var_02 processchallenge("ch_fearless"); + } + + if(level.teambased) + { + if(level.teamcount[param_00.victim.pers["team"]] > 3 && var_02.killedplayers.size >= level.teamcount[param_00.victim.pers["team"]]) + { + var_02 processchallenge("ch_tangodown"); + } + + if(level.teamcount[param_00.victim.pers["team"]] > 3 && var_02.killedplayerscurrent.size >= level.teamcount[param_00.victim.pers["team"]]) + { + var_02 processchallenge("ch_extremecruelty"); + } + } + + if(isdefined(param_00.victim.inplayersmokescreen) && param_00.victim.inplayersmokescreen == var_02) + { + var_02 processchallenge("ch_smokeemifyougotem"); + } + + if(isdefined(param_00.victim.inplayerscrambler) && param_00.victim.inplayerscrambler == var_02) + { + var_02 processchallenge("ch_scram"); + } + + if(isdefined(param_00.victim.inplayerportableradar) && param_00.victim.inplayerportableradar == var_02) + { + var_02 processchallenge("ch_zerolatency"); + } + + if(isdefined(var_02.killedplayers[param_00.victim.guid]) && var_02.killedplayers[param_00.victim.guid] == 5) + { + var_02 processchallenge("ch_rival"); + } + + if(isdefined(var_02.tookweaponfrom[param_00.sweapon])) + { + if(var_02.tookweaponfrom[param_00.sweapon] == param_00.victim && param_00.smeansofdeath != "MOD_MELEE") + { + var_02 processchallenge("ch_cruelty"); + } + } + + var_03 = 0; + var_04 = 0; + var_05 = 0; + var_06 = 1; + var_07[param_00.victim.name] = param_00.victim.name; + var_08[param_00.sweapon] = param_00.sweapon; + var_09 = 1; + var_0A = []; + foreach(var_0C in var_02.killsthislife) + { + if(maps\mp\_utility::iscacsecondaryweapon(var_0C.sweapon) && var_0C.smeansofdeath != "MOD_MELEE") + { + var_04++; + } + + if(isdefined(var_0C.modifiers["longshot"])) + { + var_05++; + } + + if(param_01 - var_0C.time < 10000) + { + var_06++; + } + + if(maps\mp\_utility::func_2829(var_0C.sweapon)) + { + if(!isdefined(var_0A[var_0C.sweapon])) + { + var_0A[var_0C.sweapon] = 0; + } + + var_0A[var_0C.sweapon]++; + continue; + } + + if(isdefined(level.onelefttime[var_02.team]) && var_0C.time > level.onelefttime[var_02.team]) + { + var_03++; + } + + if(isdefined(var_0C.victim)) + { + if(!isdefined(var_07[var_0C.victim.name]) && !isdefined(var_08[var_0C.sweapon]) && !maps\mp\_utility::func_2829(var_0C.sweapon)) + { + var_09++; + } + + var_07[var_0C.victim.name] = var_0C.victim.name; + } + + var_08[var_0C.sweapon] = var_0C.sweapon; + } + + foreach(var_0F in var_0A) + { + if(var_0F >= 10) + { + var_02 processchallenge("ch_crabmeat"); + } + } + + if(var_09 == 3) + { + var_02 processchallenge("ch_renaissance"); + } + + if(var_06 > 3 && level.teamcount[param_00.victim.team] <= var_06) + { + var_02 processchallenge("ch_omnicide"); + } + + if(maps\mp\_utility::iscacsecondaryweapon(param_00.sweapon) && var_04 == 2) + { + var_02 processchallenge("ch_sidekick"); + } + + if(isdefined(param_00.modifiers["longshot"]) && var_05 == 2) + { + var_02 processchallenge("ch_nbk"); + } + + if(isdefined(level.onelefttime[var_02.team]) && var_03 == 2) + { + var_02 processchallenge("ch_enemyofthestate"); + } + + if(var_02 isitemunlocked("specialty_twoprimaries") && var_02 maps\mp\_utility::func_27AF("specialty_twoprimaries") && var_02.secondaryweapon == param_00.sweapon) + { + var_02 processchallenge("ch_twoprimaries_pro"); + } + + if(param_00.victim.score > 0) + { + if(level.teambased) + { + var_11 = param_00.victim.pers["team"]; + if(isdefined(var_11) && var_11 != var_02.pers["team"]) + { + if(ishighestscoringplayer(param_00.victim) && level.players.size >= 6) + { + var_02 func_3239(1); + } + else + { + var_02 func_3239(0); + } + } + } + else if(ishighestscoringplayer(param_00.victim) && level.players.size >= 4) + { + var_02 func_3239(1); + } + else + { + var_02 func_3239(0); + } + } + + if(isdefined(param_00.modifiers["avenger"])) + { + var_02 processchallenge("ch_avenger"); + } + + if(isdefined(param_00.modifiers["buzzkill"]) && param_00.modifiers["buzzkill"] >= 9) + { + var_02 processchallenge("ch_thedenier"); + } + + if(isdefined(var_02.finalkill)) + { + var_02 processchallenge("ch_theedge"); + } + + if(maps\mp\_utility::func_2829(param_00.sweapon)) + { + return; + } + + if(isdefined(param_00.modifiers["jackintheboxkill"])) + { + var_02 processchallenge("ch_jackinthebox"); + } + + if(isdefined(param_00.modifiers["cooking"])) + { + var_02 processchallenge("ch_no"); + } + + if(isdefined(var_02.finalkill)) + { + if(isdefined(param_00.modifiers["revenge"])) + { + var_02 processchallenge("ch_moneyshot"); + } + } + + if(var_02 func_3268()) + { + var_02.brinkofdeathkillstreak++; + if(var_02.brinkofdeathkillstreak >= 3) + { + var_02 processchallenge("ch_thebrink"); + } + } + + if(isdefined(var_02.infinalstand) && var_02.infinalstand) + { + if(isdefined(param_00.modifiers["revenge"])) + { + var_02 processchallenge("ch_robinhood"); + } + + if(isdefined(var_02.finalkill)) + { + var_02 processchallenge("ch_lastresort"); + } + + if(maps\mp\_utility::func_323E(param_00.sweapon,"c4_")) + { + var_02 processchallenge("ch_clickclickboom"); + } + + var_02 processchallenge("ch_laststandvet"); + } + + if(param_00.smeansofdeath == "MOD_PISTOL_BULLET" || param_00.smeansofdeath == "MOD_RIFLE_BULLET") + { + var_12 = maps\mp\_utility::getweaponclass(param_00.sweapon); + func_324D(param_00,var_02,param_01,var_12); + if(maps\mp\_utility::func_2CC3(param_00.sweapon)) + { + var_02 func_3236(); + } + else + { + var_13 = maps\mp\_utility::getbaseweaponname(param_00.sweapon); + if(isdefined(level.challengeinfo["ch_marksman_" + var_13])) + { + var_02 processchallenge("ch_marksman_" + var_13); + } + + if(isdefined(level.challengeinfo["pr_marksman_" + var_13])) + { + var_02 processchallenge("pr_marksman_" + var_13); + } + + var_12 = tablelookup("mp/statstable.csv",4,var_13,2); + switch(var_12) + { + case "weapon_smg": + var_02 processchallenge("ch_smg_kill"); + break; + + case "weapon_assault": + var_02 processchallenge("ch_ar_kill"); + break; + + case "weapon_shotgun": + var_02 processchallenge("ch_shotgun_kill"); + break; + + case "weapon_sniper": + var_02 processchallenge("ch_sniper_kill"); + break; + + case "weapon_pistol": + var_02 processchallenge("ch_handgun_kill"); + break; + + case "weapon_machine_pistol": + var_02 processchallenge("ch_machine_pistols_kill"); + break; + + case "weapon_lmg": + var_02 processchallenge("ch_lmg_kill"); + break; + + default: + break; + } + } + } + else if(issubstr(param_00.smeansofdeath,"MOD_GRENADE") || issubstr(param_00.smeansofdeath,"MOD_EXPLOSIVE") || issubstr(param_00.smeansofdeath,"MOD_PROJECTILE")) + { + if(maps\mp\_utility::func_323E(param_00.sweapon,"frag_grenade_short") && !isdefined(param_00.victim.explosiveinfo["throwbackKill"]) || !param_00.victim.explosiveinfo["throwbackKill"]) + { + var_02 processchallenge("ch_martyr"); + } + + if(isdefined(param_00.victim.explosiveinfo["damageTime"]) && param_00.victim.explosiveinfo["damageTime"] == param_01) + { + if(param_00.sweapon == "none") + { + param_00.sweapon = param_00.victim.explosiveinfo["weapon"]; + } + + var_14 = param_01 + "_" + param_00.victim.explosiveinfo["damageId"]; + if(!isdefined(var_02.explosivekills[var_14])) + { + var_02.explosivekills[var_14] = 0; + } + + var_02 thread clearidshortly(var_14); + var_02.explosivekills[var_14]++; + var_13 = maps\mp\_utility::getbaseweaponname(param_00.sweapon); + if(var_13 == "javelin" || var_13 == "m79" || var_13 == "at4" || var_13 == "rpg" || var_13 == "iw5_smaw") + { + var_02 processchallenge("ch_launcher_kill"); + if(var_02.explosivekills[var_14] > 1) + { + var_02 processchallenge("pr_expert_" + var_13); + } + } + + var_15 = maps\mp\_utility::getweaponattachments(param_00.sweapon); + foreach(var_17 in var_15) + { + switch(var_17) + { + case "gl": + case "m320": + case "gp25": + if(maps\mp\_utility::func_323E(param_00.sweapon,"alt_")) + { + var_02 processchallenge("ch_" + var_13 + "_" + var_17); + } + break; + } + } + + if(isdefined(param_00.victim.explosiveinfo["stickKill"]) && param_00.victim.explosiveinfo["stickKill"]) + { + if(isdefined(param_00.modifiers["revenge"])) + { + var_02 processchallenge("ch_overdraft"); + } + + if(isdefined(var_02.finalkill)) + { + var_02 processchallenge("ch_stickman"); + } + + if(var_02.explosivekills[var_14] > 1) + { + var_02 processchallenge("ch_grouphug"); + } + } + + if(isdefined(param_00.victim.explosiveinfo["stickFriendlyKill"]) && param_00.victim.explosiveinfo["stickFriendlyKill"]) + { + var_02 processchallenge("ch_resourceful"); + } + + if(!issubstr(var_13,"stinger")) + { + if(isdefined(level.challengeinfo["ch_marksman_" + var_13])) + { + var_02 processchallenge("ch_marksman_" + var_13); + } + + if(isdefined(level.challengeinfo["pr_marksman_" + var_13])) + { + var_02 processchallenge("pr_marksman_" + var_13); + } + } + + if(maps\mp\_utility::func_323E(param_00.sweapon,"frag_")) + { + if(var_02.explosivekills[var_14] > 1) + { + var_02 processchallenge("ch_multifrag"); + } + + if(isdefined(param_00.modifiers["revenge"])) + { + var_02 processchallenge("ch_bangforbuck"); + } + + var_02 processchallenge("ch_grenadekill"); + if(param_00.victim.explosiveinfo["cookedKill"]) + { + var_02 processchallenge("ch_masterchef"); + } + + if(param_00.victim.explosiveinfo["suicideGrenadeKill"]) + { + var_02 processchallenge("ch_miserylovescompany"); + } + + if(param_00.victim.explosiveinfo["throwbackKill"]) + { + var_02 processchallenge("ch_hotpotato"); + } + } + else if(maps\mp\_utility::func_323E(param_00.sweapon,"semtex_")) + { + if(isdefined(param_00.modifiers["revenge"])) + { + var_02 processchallenge("ch_timeismoney"); + } + } + else if(maps\mp\_utility::func_323E(param_00.sweapon,"c4_")) + { + if(isdefined(param_00.modifiers["revenge"])) + { + var_02 processchallenge("ch_iamrich"); + } + + if(var_02.explosivekills[var_14] > 1) + { + var_02 processchallenge("ch_multic4"); + } + + if(param_00.victim.explosiveinfo["returnToSender"]) + { + var_02 processchallenge("ch_returntosender"); + } + + if(param_00.victim.explosiveinfo["counterKill"]) + { + var_02 processchallenge("ch_counterc4"); + } + + if(param_00.victim.explosiveinfo["bulletPenetrationKill"]) + { + var_02 processchallenge("ch_howthe"); + } + + if(param_00.victim.explosiveinfo["chainKill"]) + { + var_02 processchallenge("ch_dominos"); + } + + var_02 processchallenge("ch_c4shot"); + } + else if(maps\mp\_utility::func_323E(param_00.sweapon,"claymore_")) + { + if(isdefined(param_00.modifiers["revenge"])) + { + var_02 processchallenge("ch_breakbank"); + } + + var_02 processchallenge("ch_claymoreshot"); + if(var_02.explosivekills[var_14] > 1) + { + var_02 processchallenge("ch_multiclaymore"); + } + + if(param_00.victim.explosiveinfo["returnToSender"]) + { + var_02 processchallenge("ch_returntosender"); + } + + if(param_00.victim.explosiveinfo["counterKill"]) + { + var_02 processchallenge("ch_counterclaymore"); + } + + if(param_00.victim.explosiveinfo["bulletPenetrationKill"]) + { + var_02 processchallenge("ch_howthe"); + } + + if(param_00.victim.explosiveinfo["chainKill"]) + { + var_02 processchallenge("ch_dominos"); + } + } + else if(maps\mp\_utility::func_323E(param_00.sweapon,"bouncingbetty_")) + { + var_02 processchallenge("ch_bouncingbetty"); + } + else if(param_00.sweapon == "explodable_barrel") + { + } + else if(param_00.sweapon == "destructible_car") + { + var_02 processchallenge("ch_carbomb"); + } + else if(maps\mp\_utility::func_323E(param_00.sweapon,"rpg_") || maps\mp\_utility::func_323E(param_00.sweapon,"at4_") || maps\mp\_utility::func_323E(param_00.sweapon,"iw5_smaw_")) + { + if(var_02.explosivekills[var_14] > 1) + { + var_02 processchallenge("ch_multirpg"); + } + } + } + } + else if(issubstr(param_00.smeansofdeath,"MOD_MELEE") && !issubstr(param_00.sweapon,"riotshield_mp")) + { + var_02 func_3238(); + var_02 processchallenge("ch_knifevet"); + var_02.pers["meleeKillStreak"]++; + if(var_02.pers["meleeKillStreak"] == 3) + { + var_02 processchallenge("ch_slasher"); + } + + if(var_02 isitemunlocked("specialty_quieter") && var_02 maps\mp\_utility::func_27AF("specialty_quieter")) + { + var_02 processchallenge("ch_deadsilence_pro"); + } + + var_19 = param_00.victim.anglesondeath[1]; + var_1A = var_02.anglesonkill[1]; + var_1B = angleclamp180(var_19 - var_1A); + if(abs(var_1B) < 30) + { + var_02 processchallenge("ch_backstabber"); + if(isdefined(var_02.attackers)) + { + foreach(var_1D in var_02.attackers) + { + if(var_1D != param_00.victim) + { + continue; + } + + var_02 processchallenge("ch_neverforget"); + break; + } + } + } + + if(!var_02 func_3271()) + { + var_02 processchallenge("ch_survivor"); + } + + if(isdefined(var_02.infected)) + { + param_00.victim processchallenge("ch_infected"); + } + + if(isdefined(param_00.victim.plague)) + { + var_02 processchallenge("ch_plague"); + } + + var_13 = maps\mp\_utility::getbaseweaponname(param_00.sweapon); + var_15 = maps\mp\_utility::getweaponattachments(param_00.sweapon); + foreach(var_17 in var_15) + { + switch(var_17) + { + case "tactical": + var_02 processchallenge("ch_" + var_13 + "_" + var_17); + if(isdefined(level.challengeinfo["ch_marksman_" + var_13])) + { + var_02 processchallenge("ch_marksman_" + var_13); + } + + if(isdefined(level.challengeinfo["pr_marksman_" + var_13])) + { + var_02 processchallenge("pr_marksman_" + var_13); + } + break; + } + } + } + else if(issubstr(param_00.smeansofdeath,"MOD_MELEE") && issubstr(param_00.sweapon,"riotshield_mp")) + { + var_02 func_3238(); + var_02 processchallenge("ch_shieldvet"); + var_02.pers["shieldKillStreak"]++; + if(var_02.pers["shieldKillStreak"] == 3) + { + var_02 processchallenge("ch_smasher"); + } + + if(isdefined(var_02.finalkill)) + { + var_02 processchallenge("ch_owned"); + } + + var_02 processchallenge("ch_riot_kill"); + var_19 = param_00.victim.anglesondeath[1]; + var_1A = var_02.anglesonkill[1]; + var_1B = angleclamp180(var_19 - var_1A); + if(abs(var_1B) < 30) + { + var_02 processchallenge("ch_backsmasher"); + } + + if(!var_02 func_3271()) + { + var_02 processchallenge("ch_survivor"); + } + } + else if(issubstr(param_00.smeansofdeath,"MOD_IMPACT")) + { + if(maps\mp\_utility::func_323E(param_00.sweapon,"frag_")) + { + var_02 processchallenge("ch_thinkfast"); + } + else if(maps\mp\_utility::func_323E(param_00.sweapon,"concussion_")) + { + var_02 processchallenge("ch_thinkfastconcussion"); + } + else if(maps\mp\_utility::func_323E(param_00.sweapon,"flash_")) + { + var_02 processchallenge("ch_thinkfastflash"); + } + + if(param_00.sweapon == "throwingknife_mp") + { + if(isdefined(param_00.modifiers["revenge"])) + { + var_02 processchallenge("ch_atm"); + } + + if(param_01 < var_02.flashendtime || param_01 < var_02.concussionendtime) + { + var_02 processchallenge("ch_didyouseethat"); + } + + if(isdefined(var_02.finalkill)) + { + var_02 processchallenge("ch_unbelievable"); + } + + var_02 processchallenge("ch_carnie"); + if(isdefined(param_00.victim.attackerdata[var_02.guid].isprimary)) + { + var_02 processchallenge("ch_its_personal"); + } + + if(var_02 isitemunlocked("specialty_fastoffhand") && var_02 maps\mp\_utility::func_27AF("specialty_fastoffhand")) + { + var_02 processchallenge("ch_fastoffhand"); + } + } + + var_15 = maps\mp\_utility::getweaponattachments(param_00.sweapon); + var_13 = maps\mp\_utility::getbaseweaponname(param_00.sweapon); + foreach(var_17 in var_15) + { + switch(var_17) + { + case "gl": + case "m320": + case "gp25": + if(maps\mp\_utility::func_323E(param_00.sweapon,"alt_")) + { + var_02 processchallenge("ch_" + var_13 + "_" + var_17); + if(isdefined(level.challengeinfo["ch_marksman_" + var_13])) + { + var_02 processchallenge("ch_marksman_" + var_13); + } + + if(isdefined(level.challengeinfo["pr_marksman_" + var_13])) + { + var_02 processchallenge("pr_marksman_" + var_13); + } + + var_02 processchallenge("ch_ouch"); + } + break; + } + } + } + else if(param_00.smeansofdeath == "MOD_HEAD_SHOT") + { + var_12 = maps\mp\_utility::getweaponclass(param_00.sweapon); + func_324D(param_00,var_02,param_01,var_12); + switch(var_12) + { + case "weapon_smg": + var_02 processchallenge("ch_smg_kill"); + var_02 processchallenge("ch_expert_smg"); + break; + + case "weapon_assault": + var_02 processchallenge("ch_ar_kill"); + var_02 processchallenge("ch_expert_assault"); + break; + + case "weapon_shotgun": + var_02 processchallenge("ch_shotgun_kill"); + break; + + case "weapon_sniper": + var_02 processchallenge("ch_sniper_kill"); + break; + + case "weapon_pistol": + var_02 processchallenge("ch_handgun_kill"); + break; + + case "weapon_machine_pistol": + var_02 processchallenge("ch_machine_pistols_kill"); + break; + + case "weapon_lmg": + var_02 processchallenge("ch_lmg_kill"); + var_02 processchallenge("ch_expert_lmg"); + break; + + default: + break; + } + + if(isdefined(param_00.modifiers["revenge"])) + { + var_02 processchallenge("ch_colorofmoney"); + } + + if(maps\mp\_utility::func_2CC3(param_00.sweapon)) + { + var_02 func_3236(); + } + else if(maps\mp\_utility::func_323E(param_00.sweapon,"frag_")) + { + var_02 processchallenge("ch_thinkfast"); + } + else if(maps\mp\_utility::func_323E(param_00.sweapon,"concussion_")) + { + var_02 processchallenge("ch_thinkfastconcussion"); + } + else if(maps\mp\_utility::func_323E(param_00.sweapon,"flash_")) + { + var_02 processchallenge("ch_thinkfastflash"); + } + else + { + var_13 = maps\mp\_utility::getbaseweaponname(param_00.sweapon); + if(isdefined(level.challengeinfo["ch_expert_" + var_13])) + { + var_02 processchallenge("ch_expert_" + var_13); + } + + if(isdefined(level.challengeinfo["pr_expert_" + var_13])) + { + var_02 processchallenge("pr_expert_" + var_13); + } + + if(isdefined(level.challengeinfo["ch_marksman_" + var_13])) + { + var_02 processchallenge("ch_marksman_" + var_13); + } + + if(isdefined(level.challengeinfo["pr_marksman_" + var_13])) + { + var_02 processchallenge("pr_marksman_" + var_13); + } + } + } + + if((param_00.smeansofdeath == "MOD_PISTOL_BULLET" || param_00.smeansofdeath == "MOD_RIFLE_BULLET" || param_00.smeansofdeath == "MOD_HEAD_SHOT") && !maps\mp\_utility::func_2829(param_00.sweapon) && !maps\mp\_utility::func_2CC3(param_00.sweapon)) + { + var_15 = maps\mp\_utility::getweaponattachments(param_00.sweapon); + var_13 = maps\mp\_utility::getbaseweaponname(param_00.sweapon); + foreach(var_17 in var_15) + { + switch(var_17) + { + case "acogsmg": + case "acog": + var_17 = "acog"; + if(var_02 playerads()) + { + var_02 processchallenge("ch_" + var_13 + "_" + var_17); + } + break; + + case "akimbo": + var_02 processchallenge("ch_" + var_13 + "_" + var_17); + break; + + case "eotechlmg": + case "eotechsmg": + case "eotech": + var_17 = "eotech"; + if(var_02 playerads()) + { + var_02 processchallenge("ch_" + var_13 + "_" + var_17); + } + break; + + case "grip": + var_02 processchallenge("ch_" + var_13 + "_" + var_17); + break; + + case "heartbeat": + var_02 processchallenge("ch_" + var_13 + "_" + var_17); + break; + + case "hamrhybrid": + if(var_02 playerads()) + { + var_02 processchallenge("ch_" + var_13 + "_" + var_17); + } + break; + + case "hybrid": + if(var_02 playerads()) + { + var_02 processchallenge("ch_" + var_13 + "_" + var_17); + } + break; + + case "reflexlmg": + case "reflexsmg": + case "reflex": + var_17 = "reflex"; + if(var_02 playerads()) + { + var_02 processchallenge("ch_" + var_13 + "_" + var_17); + } + break; + + case "rof": + var_02 processchallenge("ch_" + var_13 + "_" + var_17); + break; + + case "shotgun": + if(maps\mp\_utility::func_323E(param_00.sweapon,"alt_")) + { + var_02 processchallenge("ch_" + var_13 + "_" + var_17); + } + break; + + case "silencer01": + case "silencer": + case "silencer03": + case "silencer02": + var_02 processchallenge("ch_" + var_13 + "_" + var_17); + break; + + case "thermalsmg": + case "thermal": + var_17 = "thermal"; + if(var_02 playerads()) + { + var_02 processchallenge("ch_" + var_13 + "_" + var_17); + } + break; + + case "vzscope": + if(var_02 playerads()) + { + var_02 processchallenge("ch_" + var_13 + "_" + var_17); + } + break; + + case "xmags": + var_02 processchallenge("ch_" + var_13 + "_" + var_17); + break; + + default: + break; + } + } + + if(var_02 isitemunlocked("specialty_autospot") && var_02 maps\mp\_utility::func_27AF("specialty_autospot") && var_02.holdingbreath && var_02 playerads()) + { + var_02 processchallenge("ch_autospot_pro"); + } + + if(var_02 isitemunlocked("specialty_bulletaccuracy") && var_02 maps\mp\_utility::func_27AF("specialty_bulletaccuracy") && !var_02 playerads()) + { + var_02 processchallenge("ch_bulletaccuracy_pro"); + } + + if(var_02 isitemunlocked("specialty_stalker") && var_02 maps\mp\_utility::func_27AF("specialty_stalker") && var_02 playerads()) + { + var_02 processchallenge("ch_stalker_pro"); + } + + if(distancesquared(var_02.origin,param_00.victim.origin) < 65536) + { + if(var_02 isitemunlocked("specialty_quieter") && var_02 maps\mp\_utility::func_27AF("specialty_quieter")) + { + var_02 processchallenge("ch_deadsilence_pro"); + } + } + + if(var_02 isitemunlocked("specialty_fastreload") && var_02 maps\mp\_utility::func_27AF("specialty_fastreload")) + { + var_02 processchallenge("ch_sleightofhand_pro"); + } + + if(var_02 maps\mp\_utility::func_3242("specialty_marksman",var_13) && var_02 maps\mp\_utility::func_822B("specialty_marksman",var_13) && var_02 maps\mp\_utility::func_27AF("specialty_marksman") && var_02 playerads()) + { + var_02 processchallenge("ch_kickstop"); + } + + if(param_00.victim.idflagstime == param_01) + { + if(param_00.victim.idflags & level.idflags_penetration) + { + if(var_02 maps\mp\_utility::func_3242("specialty_bulletpenetration",var_13) && var_02 maps\mp\_utility::func_822B("specialty_bulletpenetration",var_13) && var_02 maps\mp\_utility::func_27AF("specialty_bulletpenetration")) + { + var_02 processchallenge("ch_xrayvision"); + } + } + } + + if(var_02 maps\mp\_utility::func_3242("specialty_bling",var_13) && var_02 maps\mp\_utility::func_822B("specialty_bling",var_13) && var_02 maps\mp\_utility::func_27AF("specialty_bling") && var_15.size > 1) + { + var_02 processchallenge("ch_blingbling"); + } + + if(var_02 maps\mp\_utility::func_3242("specialty_sharp_focus",var_13) && var_02 maps\mp\_utility::func_822B("specialty_sharp_focus",var_13) && var_02 maps\mp\_utility::func_27AF("specialty_sharp_focus") && var_02.health < var_02.maxhealth && isdefined(var_02.attackers)) + { + foreach(var_1D in var_02.attackers) + { + if(var_1D == param_00.victim) + { + var_02 processchallenge("ch_unshakeable"); + break; + } + } + } + + if(var_02 maps\mp\_utility::func_3242("specialty_holdbreathwhileads",var_13) && var_02 maps\mp\_utility::func_822B("specialty_holdbreathwhileads",var_13) && var_02 maps\mp\_utility::func_27AF("specialty_holdbreathwhileads") && var_02.holdingbreath && var_02 playerads()) + { + var_02 processchallenge("ch_holditrightthere"); + } + + if(var_02 maps\mp\_utility::func_3242("specialty_reducedsway",var_13) && var_02 maps\mp\_utility::func_822B("specialty_reducedsway",var_13) && var_02 maps\mp\_utility::func_27AF("specialty_reducedsway") && var_02 playerads()) + { + var_02 processchallenge("ch_swayless"); + } + + if(var_02 maps\mp\_utility::func_3242("specialty_longerrange",var_13) && var_02 maps\mp\_utility::func_822B("specialty_longerrange",var_13) && var_02 maps\mp\_utility::func_27AF("specialty_longerrange")) + { + var_02 processchallenge("ch_longishshot"); + } + + if(var_02 maps\mp\_utility::func_3242("specialty_lightweight",var_13) && var_02 maps\mp\_utility::func_822B("specialty_lightweight",var_13) && var_02 maps\mp\_utility::func_27AF("specialty_lightweight")) + { + var_02 processchallenge("ch_lightweight"); + } + + if(var_02 maps\mp\_utility::func_3242("specialty_moredamage",var_13) && var_02 maps\mp\_utility::func_822B("specialty_moredamage",var_13) && var_02 maps\mp\_utility::func_27AF("specialty_moredamage")) + { + var_02 processchallenge("ch_moredamage"); + } + } + + if(param_00.smeansofdeath == "MOD_MELEE") + { + var_13 = maps\mp\_utility::getbaseweaponname(param_00.sweapon); + if(var_02 maps\mp\_utility::func_3242("specialty_fastermelee",var_13) && var_02 maps\mp\_utility::func_822B("specialty_fastermelee",var_13) && var_02 maps\mp\_utility::func_27AF("specialty_fastermelee")) + { + var_02 processchallenge("ch_coldsteel"); + } + } + + if(var_02 isitemunlocked("specialty_quickdraw") && var_02 maps\mp\_utility::func_27AF("specialty_quickdraw") && var_02.adstime > 0 && var_02.adstime < 3) + { + var_02 processchallenge("ch_quickdraw_pro"); + } + + if(var_02 isitemunlocked("specialty_coldblooded") && var_02 maps\mp\_utility::func_27AF("specialty_coldblooded")) + { + if(level.teambased) + { + var_27 = 0; + foreach(var_29 in level.uavmodels[maps\mp\_utility::getotherteam(var_02.team)]) + { + switch(var_29.uavtype) + { + case "counter": + case "remote_mortar": + break; + } + + var_27 = 1; + break; + } + + if(var_27) + { + var_02 processchallenge("ch_coldblooded_pro"); + } + } + else + { + var_2B = 0; + foreach(var_2D in level.players) + { + if(var_2D == var_02) + { + continue; + } + + var_2B = var_2B + level.activeuavs[var_2D.guid]; + } + + if(var_2B > 0) + { + var_02 processchallenge("ch_coldblooded_pro"); + } + } + } + + if(var_02 isitemunlocked("specialty_empimmune") && var_02 maps\mp\_utility::func_27AF("specialty_empimmune")) + { + if(level.teambased) + { + var_2F = 0; + foreach(var_31 in level.uavmodels[maps\mp\_utility::getotherteam(var_02.team)]) + { + if(var_31.uavtype != "counter") + { + continue; + } + + var_2F = 1; + break; + } + + if(var_2F || var_02 maps\mp\_utility::func_27E5()) + { + var_02 processchallenge("ch_spygame"); + } + } + else if(var_02.isradarblocked || var_02 maps\mp\_utility::func_27E5()) + { + var_02 processchallenge("ch_spygame"); + } + } + + if(isdefined(param_00.victim.isplanting) && param_00.victim.isplanting) + { + var_02 processchallenge("ch_bombplanter"); + } + + if(isdefined(param_00.victim.isdefusing) && param_00.victim.isdefusing) + { + var_02 processchallenge("ch_bombdefender"); + } + + if(isdefined(param_00.victim.isbombcarrier) && param_00.victim.isbombcarrier && !isdefined(level.dd) || !level.dd) + { + var_02 processchallenge("ch_bombdown"); + } + + if(isdefined(param_00.victim.wasti) && param_00.victim.wasti) + { + var_02 processchallenge("ch_tacticaldeletion"); + } + + if(var_02 isitemunlocked("specialty_quickswap") && var_02 maps\mp\_utility::func_27AF("specialty_quickswap")) + { + if(isdefined(var_02.lastprimaryweaponswaptime) && gettime() - var_02.lastprimaryweaponswaptime < 3000) + { + var_02 processchallenge("ch_quickswap"); + } + } + + if(var_02 isitemunlocked("specialty_extraammo") && var_02 maps\mp\_utility::func_27AF("specialty_extraammo")) + { + var_02 processchallenge("ch_extraammo"); + } + + if(isexplosivedamagemod(param_00.smeansofdeath)) + { + switch(param_00.sweapon) + { + case "emp_grenade_mp": + case "semtex_mp": + case "concussion_grenade_mp": + case "flash_grenade_mp": + case "frag_grenade_mp": + if(var_02 isitemunlocked("specialty_fastoffhand") && var_02 maps\mp\_utility::func_27AF("specialty_fastoffhand")) + { + var_02 processchallenge("ch_fastoffhand"); + } + break; + } + } + + if(var_02 isitemunlocked("specialty_overkillpro") && var_02 maps\mp\_utility::func_27AF("specialty_overkillpro")) + { + if(var_02.secondaryweapon == param_00.sweapon) + { + var_15 = maps\mp\_utility::getweaponattachments(param_00.sweapon); + if(var_15.size > 0) + { + var_02 processchallenge("ch_secondprimary"); + } + } + } + + if(var_02 isitemunlocked("specialty_stun_resistance") && var_02 maps\mp\_utility::func_27AF("specialty_stun_resistance")) + { + if(isdefined(var_02.lastflashedtime) && gettime() - var_02.lastflashedtime < 5000) + { + var_02 processchallenge("ch_stunresistance"); + } + else if(isdefined(var_02.lastconcussedtime) && gettime() - var_02.lastconcussedtime < 5000) + { + var_02 processchallenge("ch_stunresistance"); + } + } + + if(var_02 isitemunlocked("specialty_selectivehearing") && var_02 maps\mp\_utility::func_27AF("specialty_selectivehearing")) + { + var_02 processchallenge("ch_selectivehearing"); + } + + if(var_02 isitemunlocked("specialty_fastsprintrecovery") && var_02 maps\mp\_utility::func_27AF("specialty_fastsprintrecovery")) + { + if(isdefined(var_02.lastsprintendtime) && gettime() - var_02.lastsprintendtime < 3000) + { + var_02 processchallenge("ch_fastsprintrecovery"); + } + } +} + +//Function Number: 25 +func_324D(param_00,param_01,param_02,param_03) +{ + if(!maps\mp\_utility::func_2CC3(param_00.sweapon)) + { + param_01 func_3238(); + } + + if(maps\mp\_utility::func_2829(param_00.sweapon)) + { + return; + } + + if(param_01.pers["lastBulletKillTime"] == param_02) + { + param_01.pers["bulletStreak"]++; + } + else + { + param_01.pers["bulletStreak"] = 1; + } + + param_01.pers["lastBulletKillTime"] = param_02; + if(!param_00.victimonground) + { + param_01 processchallenge("ch_hardlanding"); + } + + if(!param_00.attackeronground) + { + param_01.pers["midairStreak"]++; + } + + if(param_01.pers["midairStreak"] == 2) + { + param_01 processchallenge("ch_airborne"); + } + + if(param_02 < param_00.victim.flashendtime) + { + param_01 processchallenge("ch_flashbangvet"); + } + + if(param_02 < param_01.flashendtime) + { + param_01 processchallenge("ch_blindfire"); + } + + if(param_02 < param_00.victim.concussionendtime) + { + param_01 processchallenge("ch_concussionvet"); + } + + if(param_02 < param_01.concussionendtime) + { + param_01 processchallenge("ch_slowbutsure"); + } + + if(param_01.pers["bulletStreak"] == 2) + { + if(isdefined(param_00.modifiers["headshot"])) + { + foreach(var_05 in param_01.killsthislife) + { + if(var_05.time != param_02) + { + continue; + } + + if(!isdefined(param_00.modifiers["headshot"])) + { + continue; + } + + param_01 processchallenge("ch_allpro"); + } + } + + if(param_03 == "weapon_sniper") + { + param_01 processchallenge("ch_collateraldamage"); + } + } + + if(param_03 == "weapon_pistol") + { + if(isdefined(param_00.victim.attackerdata) && isdefined(param_00.victim.attackerdata[param_01.guid])) + { + if(isdefined(param_00.victim.attackerdata[param_01.guid].isprimary)) + { + param_01 processchallenge("ch_fastswap"); + } + } + } + + if(!isdefined(param_01.infinalstand) || !param_01.infinalstand) + { + if(param_00.attackerstance == "crouch") + { + param_01 processchallenge("ch_crouchshot"); + } + else if(param_00.attackerstance == "prone") + { + param_01 processchallenge("ch_proneshot"); + if(param_03 == "weapon_sniper") + { + param_01 processchallenge("ch_invisible"); + } + } + } + + if(param_03 == "weapon_sniper") + { + if(isdefined(param_00.modifiers["oneshotkill"])) + { + param_01 processchallenge("ch_ghillie"); + } + } + + if(issubstr(param_00.sweapon,"silencer")) + { + param_01 processchallenge("ch_stealthvet"); + } +} + +//Function Number: 26 +ch_roundplayed(param_00) +{ + var_01 = param_00.player; + if(var_01.wasaliveatmatchstart) + { + var_02 = var_01.pers["deaths"]; + var_03 = var_01.pers["kills"]; + var_04 = 1000000; + if(var_02 > 0) + { + var_04 = var_03 / var_02; + } + + if(var_04 >= 5 && var_03 >= 5) + { + var_01 processchallenge("ch_starplayer"); + } + + if(var_02 == 0 && maps\mp\_utility::gettimepassed() > 300000) + { + var_01 processchallenge("ch_flawless"); + } + + if(level.placement["all"].size < 3) + { + return; + } + + if(var_01.score > 0) + { + switch(level.gametype) + { + case "dm": + if(param_00.place < 3) + { + var_01 processchallenge("ch_victor_dm"); + var_01 processchallenge("ch_ffa_win"); + } + + var_01 processchallenge("ch_ffa_participate"); + break; + + case "war": + if(param_00.winner) + { + var_01 processchallenge("ch_war_win"); + } + + var_01 processchallenge("ch_war_participate"); + break; + + case "kc": + if(param_00.winner) + { + var_01 processchallenge("ch_kc_win"); + } + + var_01 processchallenge("ch_kc_participate"); + break; + + case "dd": + if(param_00.winner) + { + var_01 processchallenge("ch_dd_win"); + } + + var_01 processchallenge("ch_dd_participate"); + break; + + case "koth": + if(param_00.winner) + { + var_01 processchallenge("ch_koth_win"); + } + + var_01 processchallenge("ch_koth_participate"); + break; + + case "sab": + if(param_00.winner) + { + var_01 processchallenge("ch_sab_win"); + } + + var_01 processchallenge("ch_sab_participate"); + break; + + case "sd": + if(param_00.winner) + { + var_01 processchallenge("ch_sd_win"); + } + + var_01 processchallenge("ch_sd_participate"); + break; + + case "dom": + if(param_00.winner) + { + var_01 processchallenge("ch_dom_win"); + } + + var_01 processchallenge("ch_dom_participate"); + break; + + case "ctf": + if(param_00.winner) + { + var_01 processchallenge("ch_ctf_win"); + } + + var_01 processchallenge("ch_ctf_participate"); + break; + + case "tdef": + if(param_00.winner) + { + var_01 processchallenge("ch_tdef_win"); + } + + var_01 processchallenge("ch_tdef_participate"); + break; + } + } + } +} + +//Function Number: 27 +func_3253(param_00) +{ + if(!param_00.winner) + { + return; + } + + var_01 = param_00.player; + if(var_01.wasaliveatmatchstart) + { + switch(level.gametype) + { + case "war": + if(level.hardcoremode) + { + var_01 processchallenge("ch_teamplayer_hc"); + if(param_00.place == 0) + { + var_01 processchallenge("ch_mvp_thc"); + } + } + else + { + var_01 processchallenge("ch_teamplayer"); + if(param_00.place == 0) + { + var_01 processchallenge("ch_mvp_tdm"); + } + } + break; + + case "sab": + var_01 processchallenge("ch_victor_sab"); + break; + + case "sd": + var_01 processchallenge("ch_victor_sd"); + break; + + case "hc": + case "ctf": + case "dom": + case "koth": + case "dm": + break; + + default: + break; + } + } +} + +//Function Number: 28 +playerdamaged(param_00,param_01,param_02,param_03,param_04,param_05) +{ + self endon("disconnect"); + if(isdefined(param_01)) + { + param_01 endon("disconnect"); + } + + wait 0.05; + maps\mp\_utility::waittillslowprocessallowed(); + var_06 = spawnstruct(); + var_06.victim = self; + var_06.einflictor = param_00; + var_06.attacker = param_01; + var_06.idamage = param_02; + var_06.smeansofdeath = param_03; + var_06.sweapon = param_04; + var_06.shitloc = param_05; + var_06.victimonground = var_06.victim isonground(); + if(isplayer(param_01)) + { + var_06.attackerinlaststand = isdefined(var_06.attacker.laststand); + var_06.attackeronground = var_06.attacker isonground(); + var_06.attackerstance = var_06.attacker getstance(); + } + else + { + var_06.attackerinlaststand = 0; + var_06.attackeronground = 0; + var_06.attackerstance = "stand"; + } + + domissioncallback("playerDamaged",var_06); +} + +//Function Number: 29 +func_2CE6(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07) +{ + self.anglesondeath = self getplayerangles(); + if(isdefined(param_01)) + { + param_01.anglesonkill = param_01 getplayerangles(); + } + + self endon("disconnect"); + var_08 = spawnstruct(); + var_08.victim = self; + var_08.einflictor = param_00; + var_08.attacker = param_01; + var_08.idamage = param_02; + var_08.smeansofdeath = param_03; + var_08.sweapon = param_04; + var_08.sprimaryweapon = param_05; + var_08.shitloc = param_06; + var_08.time = gettime(); + var_08.modifiers = param_07; + var_08.victimonground = var_08.victim isonground(); + if(isplayer(param_01)) + { + var_08.attackerinlaststand = isdefined(var_08.attacker.laststand); + var_08.attackeronground = var_08.attacker isonground(); + var_08.attackerstance = var_08.attacker getstance(); + } + else + { + var_08.attackerinlaststand = 0; + var_08.attackeronground = 0; + var_08.attackerstance = "stand"; + } + + func_3255(var_08); + if(isdefined(param_01) && maps\mp\_utility::isreallyalive(param_01)) + { + param_01.killsthislife[param_01.killsthislife.size] = var_08; + } + + var_08.attacker notify("playerKilledChallengesProcessed"); +} + +//Function Number: 30 +vehiclekilled(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + var_07 = spawnstruct(); + var_07.vehicle = param_01; + var_07.victim = param_00; + var_07.einflictor = param_02; + var_07.attacker = param_03; + var_07.idamage = param_04; + var_07.smeansofdeath = param_05; + var_07.sweapon = param_06; + var_07.time = gettime(); + if(isdefined(param_03) && isplayer(param_03) && !isdefined(param_00) || param_03 != param_00 && !maps\mp\_utility::func_2829(param_06)) + { + param_03 maps\mp\killstreaks\_killstreaks::giveadrenaline("vehicleDestroyed"); + switch(param_06) + { + case "stinger_mp": + if(isdefined(param_01.helitype) && param_01.helitype == "flares" || param_01.helitype == "littlebird" || param_01.helitype == "helicopter" || param_01.helitype == "airdrop") + { + param_03 processchallenge("pr_expert_stinger"); + } + + param_03 processchallenge("ch_marksman_stinger"); + param_03 processchallenge("pr_marksman_stinger"); + break; + + default: + var_08 = maps\mp\_utility::getbaseweaponname(param_06); + if(isdefined(level.challengeinfo["ch_marksman_" + var_08])) + { + param_03 processchallenge("ch_marksman_" + var_08); + } + + if(isdefined(level.challengeinfo["pr_marksman_" + var_08])) + { + param_03 processchallenge("pr_marksman_" + var_08); + } + break; + } + + switch(param_06) + { + case "javelin_mp": + case "iw5_smaw_mp": + case "stinger_mp": + if(param_03 isitemunlocked("specialty_fasterlockon") && param_03 maps\mp\_utility::func_27AF("specialty_fasterlockon")) + { + param_03 processchallenge("ch_fasterlockon"); + } + break; + } + + if(param_03 isitemunlocked("specialty_blindeye") && param_03 maps\mp\_utility::func_27AF("specialty_blindeye")) + { + var_09 = 1; + if(isdefined(param_03.scramproxyperk) && param_03.scramproxyperk) + { + var_09 = 0; + } + + if(isdefined(param_03.spawnperk) && param_03.spawnperk) + { + var_09 = 0; + } + + if(var_09) + { + param_03 processchallenge("ch_blindeye_pro"); + return; + } + } + } +} + +//Function Number: 31 +func_3255(param_00) +{ + if(isdefined(param_00.attacker)) + { + param_00.attacker endon("disconnect"); + } + + self.processingkilledchallenges = 1; + wait 0.05; + maps\mp\_utility::waittillslowprocessallowed(); + domissioncallback("playerKilled",param_00); + self.processingkilledchallenges = undefined; +} + +//Function Number: 32 +func_26FF() +{ + var_00 = spawnstruct(); + var_00.player = self; + domissioncallback("playerAssist",var_00); +} + +//Function Number: 33 +usehardpoint(param_00) +{ + self endon("disconnect"); + wait 0.05; + maps\mp\_utility::waittillslowprocessallowed(); + var_01 = spawnstruct(); + var_01.player = self; + var_01.hardpointtype = param_00; + domissioncallback("playerHardpoint",var_01); +} + +//Function Number: 34 +roundbegin() +{ + domissioncallback("roundBegin"); +} + +//Function Number: 35 +func_2F4B(param_00) +{ + var_01 = spawnstruct(); + if(level.teambased) + { + var_02 = "allies"; + for(var_03 = 0;var_03 < level.placement[var_02].size;var_03++) + { + var_01.player = level.placement[var_02][var_03]; + var_01.winner = var_02 == param_00; + var_01.place = var_03; + domissioncallback("roundEnd",var_01); + } + + var_02 = "axis"; + for(var_03 = 0;var_03 < level.placement[var_02].size;var_03++) + { + var_01.player = level.placement[var_02][var_03]; + var_01.winner = var_02 == param_00; + var_01.place = var_03; + domissioncallback("roundEnd",var_01); + } + + return; + } + + for(var_03 = 0;var_03 < level.placement["all"].size;var_03++) + { + var_01.player = level.placement["all"][var_03]; + var_01.winner = isdefined(param_00) && isplayer(param_00) && var_01.player == param_00; + var_01.place = var_03; + domissioncallback("roundEnd",var_01); + } +} + +//Function Number: 36 +domissioncallback(param_00,param_01) +{ + if(!func_3223()) + { + return; + } + + if(getdvarint("disable_challenges") > 0) + { + return; + } + + if(!isdefined(level.missioncallbacks[param_00])) + { + return; + } + + if(isdefined(param_01)) + { + for(var_02 = 0;var_02 < level.missioncallbacks[param_00].size;var_02++) + { + thread [[ level.missioncallbacks[param_00][var_02] ]](param_01); + } + + return; + } + + for(var_02 = 0;var_02 < level.missioncallbacks[param_00].size;var_02++) + { + thread [[ level.missioncallbacks[param_00][var_02] ]](); + } +} + +//Function Number: 37 +monitorsprintdistance() +{ + level endon("game_ended"); + self endon("spawned_player"); + self endon("death"); + self endon("disconnect"); + for(;;) + { + self waittill("sprint_begin"); + self.sprintdistthissprint = 0; + thread func_325B(); + monitorsinglesprintdistance(); + if(self isitemunlocked("specialty_longersprint") && maps\mp\_utility::func_27AF("specialty_longersprint")) + { + processchallenge("ch_longersprint_pro",int(self.sprintdistthissprint / 12)); + } + } +} + +//Function Number: 38 +monitorsinglesprintdistance() +{ + level endon("game_ended"); + self endon("spawned_player"); + self endon("death"); + self endon("disconnect"); + self endon("sprint_end"); + var_00 = self.origin; + for(;;) + { + wait 0.1; + self.sprintdistthissprint = self.sprintdistthissprint + distance(self.origin,var_00); + var_00 = self.origin; + } +} + +//Function Number: 39 +func_325B() +{ + level endon("game_ended"); + self endon("spawned_player"); + self endon("death"); + self endon("disconnect"); + var_00 = gettime(); + self waittill("sprint_end"); + var_01 = int(gettime() - var_00); + maps\mp\_utility::incplayerstat("sprinttime",var_01); + self.lastsprintendtime = gettime(); +} + +//Function Number: 40 +func_325C() +{ + self endon("disconnect"); + self.pers["midairStreak"] = 0; + for(;;) + { + if(!isalive(self)) + { + self waittill("spawned_player"); + continue; + } + + if(!self isonground()) + { + self.pers["midairStreak"] = 0; + var_00 = self.origin[2]; + while(!self isonground() && isalive(self)) + { + if(self.origin[2] > var_00) + { + var_00 = self.origin[2]; + } + + wait 0.05; + } + + self.pers["midairStreak"] = 0; + var_01 = var_00 - self.origin[2]; + if(var_01 < 0) + { + var_01 = 0; + } + + if(var_01 / 12 > 15 && isalive(self)) + { + processchallenge("ch_basejump"); + } + + if(var_01 / 12 > 30 && !isalive(self)) + { + processchallenge("ch_goodbye"); + } + } + + wait 0.05; + } +} + +//Function Number: 41 +func_325D() +{ + if(!func_3223()) + { + return; + } + + if(!self.wasaliveatmatchstart) + { + return; + } + + if(self.teamkillsthisround > 0) + { + return; + } + + processchallenge("ch_lastmanstanding"); +} + +//Function Number: 42 +func_325E() +{ + self endon("disconnect"); + for(;;) + { + var_00 = common_scripts\utility::waittill_any_return("bomb_planted","bomb_defused"); + if(!isdefined(var_00)) + { + continue; + } + + if(var_00 == "bomb_planted") + { + processchallenge("ch_saboteur"); + continue; + } + + if(var_00 == "bomb_defused") + { + processchallenge("ch_hero"); + } + } +} + +//Function Number: 43 +func_325F() +{ + for(;;) + { + self waittill("spawned_player"); + thread survivalistchallenge(); + } +} + +//Function Number: 44 +survivalistchallenge() +{ + self endon("death"); + self endon("disconnect"); + wait 300; + if(isdefined(self)) + { + processchallenge("ch_survivalist"); + } +} + +//Function Number: 45 +monitorstreaks() +{ + self endon("disconnect"); + self.pers["airstrikeStreak"] = 0; + self.pers["meleeKillStreak"] = 0; + self.pers["shieldKillStreak"] = 0; + thread func_3262(); + for(;;) + { + self waittill("death"); + self.pers["airstrikeStreak"] = 0; + self.pers["meleeKillStreak"] = 0; + self.pers["shieldKillStreak"] = 0; + } +} + +//Function Number: 46 +func_3262() +{ + thread monitormiscsingle("destroyed_explosive"); + thread monitormiscsingle("begin_airstrike"); + thread monitormiscsingle("destroyed_car"); + thread monitormiscsingle("destroyed_helicopter"); + thread monitormiscsingle("used_uav"); + thread monitormiscsingle("used_double_uav"); + thread monitormiscsingle("used_triple_uav"); + thread monitormiscsingle("used_counter_uav"); + thread monitormiscsingle("used_directional_uav"); + thread monitormiscsingle("used_airdrop"); + thread monitormiscsingle("used_emp"); + thread monitormiscsingle("used_nuke"); + thread monitormiscsingle("crushed_enemy"); + self waittill("disconnect"); + self notify("destroyed_explosive"); + self notify("begin_airstrike"); + self notify("destroyed_car"); + self notify("destroyed_helicopter"); +} + +//Function Number: 47 +monitormiscsingle(param_00) +{ + for(;;) + { + self waittill(param_00); + if(!isdefined(self)) + { + return; + } + + monitormisccallback(param_00); + } +} + +//Function Number: 48 +monitormisccallback(param_00) +{ + switch(param_00) + { + case "begin_airstrike": + self.pers["airstrikeStreak"] = 0; + break; + + case "destroyed_explosive": + if(self isitemunlocked("specialty_detectexplosive") && maps\mp\_utility::func_27AF("specialty_detectexplosive")) + { + processchallenge("ch_detectexplosives_pro"); + } + + processchallenge("ch_backdraft"); + break; + + case "destroyed_helicopter": + processchallenge("ch_flyswatter"); + break; + + case "destroyed_car": + processchallenge("ch_vandalism"); + break; + + case "crushed_enemy": + processchallenge("ch_heads_up"); + if(isdefined(self.finalkill)) + { + processchallenge("ch_droppincrates"); + } + break; + } +} + +//Function Number: 49 +func_2D61() +{ + if(!isalive(self)) + { + return; + } + + if(!func_3223()) + { + return; + } + + if(!maps\mp\_utility::rankingenabled()) + { + return; + } + + thread resetbrinkofdeathkillstreakshortly(); + self notify("healed"); + if(isdefined(self.lastdamagewasfromenemy) && self.lastdamagewasfromenemy) + { + self.healthregenerationstreak++; + if(self.healthregenerationstreak >= 5) + { + processchallenge("ch_invincible"); + } + } +} + +//Function Number: 50 +resetbrinkofdeathkillstreakshortly() +{ + self endon("disconnect"); + self endon("death"); + self endon("damage"); + wait 1; + self.brinkofdeathkillstreak = 0; +} + +//Function Number: 51 +playerspawned() +{ + self.brinkofdeathkillstreak = 0; + self.healthregenerationstreak = 0; + self.pers["MGStreak"] = 0; +} + +//Function Number: 52 +playerdied() +{ + self.brinkofdeathkillstreak = 0; + self.healthregenerationstreak = 0; + self.pers["MGStreak"] = 0; +} + +//Function Number: 53 +func_3268() +{ + var_00 = self.health / self.maxhealth; + return var_00 <= level.healthoverlaycutoff; +} + +//Function Number: 54 +processchallenge(param_00,param_01,param_02) +{ + if(!func_3223()) + { + return; + } + + if(level.players.size < 2) + { + return; + } + + if(!maps\mp\_utility::rankingenabled()) + { + return; + } + + if(!isdefined(param_01)) + { + param_01 = 1; + } + + if(!issubstr(param_00,"_daily") && !issubstr(param_00,"_weekly") && self isitemunlocked("tier_90")) + { + thread processchallenge(param_00 + "_daily",param_01,param_02); + thread processchallenge(param_00 + "_weekly",param_01,param_02); + } + + var_03 = getchallengestatus(param_00); + if(var_03 == 0) + { + return; + } + + if(var_03 > level.challengeinfo[param_00]["targetval"].size) + { + return; + } + + var_04 = maps\mp\gametypes\_hud_util::ch_getprogress(param_00); + if(isdefined(param_02) && param_02) + { + var_05 = param_01; + } + else + { + var_05 = var_05 + param_02; + } + + var_06 = level.challengeinfo[param_00]["targetval"][var_03]; + if(var_05 >= var_06) + { + var_07 = 1; + var_05 = var_06; + } + else + { + var_07 = 0; + } + + if(var_04 < var_05) + { + maps\mp\gametypes\_hud_util::ch_setprogress(param_00,var_05); + } + + if(var_07) + { + thread giverankxpafterwait(param_00,var_03); + maps\mp\_matchdata::func_28E0(param_00,var_03); + if(!isdefined(self.challengescompleted)) + { + self.challengescompleted = []; + } + + var_08 = 0; + foreach(var_0A in self.challengescompleted) + { + if(var_0A == param_00) + { + var_08 = 1; + } + } + + if(!var_08) + { + self.challengescompleted[self.challengescompleted.size] = param_00; + } + + var_03++; + maps\mp\gametypes\_hud_util::ch_setstate(param_00,var_03); + self.challengedata[param_00] = var_03; + thread maps\mp\gametypes\_hud_message::challengesplashnotify(param_00); + } +} + +//Function Number: 55 +giverankxpafterwait(param_00,param_01) +{ + self endon("disconnect"); + wait 0.25; + maps\mp\gametypes\_rank::func_2AB3("challenge",level.challengeinfo[param_00]["reward"][param_01],undefined,undefined,param_00); +} + +//Function Number: 56 +func_3269(param_00,param_01) +{ + return tablelookup("mp/unlockTable.csv",0,param_00,4 + param_01); +} + +//Function Number: 57 +getweaponattachment(param_00,param_01) +{ + return tablelookup("mp/statsTable.csv",4,param_00,11 + param_01); +} + +//Function Number: 58 +func_326B(param_00) +{ + if(tablelookup("mp/allChallengesTable.csv",0,"ch_" + param_00 + "_mastery",1) == "") + { + return; + } + + var_01 = 0; + for(var_02 = 0;var_02 <= 10;var_02++) + { + var_03 = getweaponattachment(param_00,var_02); + if(var_03 == "") + { + continue; + } + + if(maps\mp\gametypes\_class::isattachmentunlocked(param_00,var_03)) + { + var_01++; + } + } + + processchallenge("ch_" + param_00 + "_mastery",var_01,1); +} + +//Function Number: 59 +updatechallenges() +{ + self.challengedata = []; + self endon("disconnect"); + if(!func_3223()) + { + return; + } + + if(!self isitemunlocked("challenges")) + { + return; + } + + var_00 = 0; + foreach(var_0D, var_02 in level.challengeinfo) + { + var_00++; + if(var_00 % 40 == 0) + { + wait 0.05; + } + + self.challengedata[var_0D] = 0; + if(isweaponchallenge(var_0D)) + { + if(!self isitemunlocked(var_0D)) + { + continue; + } + + var_03 = func_8105(var_0D); + if(!self isitemunlocked(var_03)) + { + continue; + } + + var_04 = func_8106(var_0D); + if(isdefined(var_04)) + { + if(!maps\mp\gametypes\_class::isattachmentunlocked(var_03,var_04)) + { + continue; + } + } + } + else if(func_8107(var_0D)) + { + if(!self isitemunlocked(var_0D)) + { + continue; + } + + var_05 = func_8108(var_0D); + if(isdefined(var_05)) + { + if(!self getplayerdata("killstreakUnlocked",var_05)) + { + continue; + } + } + } + else + { + var_06 = self isitemunlocked(var_0D); + if(var_06 == 0) + { + continue; + } + else if(var_06 == 2) + { + var_07 = func_8102(var_0D); + if(var_07 != "") + { + var_08 = func_8103(var_07); + if(var_08 != "") + { + var_09 = func_8104(var_08,var_0D); + if(var_09 != "") + { + if(!self isitemunlocked(var_09)) + { + continue; + } + } + } + } + } + } + + if(isdefined(var_02["requirement"]) && !self isitemunlocked(var_02["requirement"])) + { + continue; + } + + if(var_02["type"] == 1) + { + var_0A = maps\mp\gametypes\_hud_util::getdailyref(var_0D); + if(var_0A == "") + { + continue; + } + } + else if(var_02["type"] == 2) + { + var_0B = maps\mp\gametypes\_hud_util::func_26C9(var_0D); + if(var_0B == "") + { + continue; + } + } + + var_0C = maps\mp\gametypes\_hud_util::ch_getstate(var_0D); + if(var_0C == 0) + { + maps\mp\gametypes\_hud_util::ch_setstate(var_0D,1); + var_0C = 1; + } + + self.challengedata[var_0D] = var_0C; + } +} + +//Function Number: 60 +func_8101(param_00) +{ + return tablelookup("mp/unlockTable.csv",0,param_00,0) != ""; +} + +//Function Number: 61 +func_8102(param_00) +{ + return tablelookup("mp/allChallengesTable.csv",0,param_00,5); +} + +//Function Number: 62 +func_8103(param_00) +{ + return tablelookup("mp/challengeTable.csv",8,param_00,4); +} + +//Function Number: 63 +func_8104(param_00,param_01) +{ + return tablelookup(param_00,0,param_01,1); +} + +//Function Number: 64 +isweaponchallenge(param_00) +{ + if(!isdefined(param_00)) + { + return 0; + } + + var_01 = func_8102(param_00); + if(isdefined(var_01) && var_01 == "riotshield") + { + return 1; + } + + var_02 = strtok(param_00,"_"); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + var_04 = var_02[var_03]; + if(var_04 == "iw5") + { + var_04 = var_02[var_03] + "_" + var_02[var_03 + 1]; + } + + if(maps\mp\gametypes\_class::func_32A0(var_04,0) || maps\mp\gametypes\_class::func_32A1(var_04,"specialty_null","specialty_null",0)) + { + return 1; + } + } + + return 0; +} + +//Function Number: 65 +func_8105(param_00) +{ + var_01 = "ch_"; + if(issubstr(param_00,"ch_marksman_")) + { + var_01 = "ch_marksman_"; + } + else if(issubstr(param_00,"ch_expert_")) + { + var_01 = "ch_expert_"; + } + else if(issubstr(param_00,"pr_marksman_")) + { + var_01 = "pr_marksman_"; + } + else if(issubstr(param_00,"pr_expert_")) + { + var_01 = "pr_expert_"; + } + + var_02 = getsubstr(param_00,var_01.size,param_00.size); + var_03 = strtok(var_02,"_"); + var_02 = undefined; + if(var_03[0] == "iw5") + { + var_02 = var_03[0] + "_" + var_03[1]; + } + else + { + var_02 = var_03[0]; + } + + return var_02; +} + +//Function Number: 66 +func_8106(param_00) +{ + var_01 = "ch_"; + if(issubstr(param_00,"ch_marksman_")) + { + var_01 = "ch_marksman_"; + } + else if(issubstr(param_00,"ch_expert_")) + { + var_01 = "ch_expert_"; + } + else if(issubstr(param_00,"pr_marksman_")) + { + var_01 = "pr_marksman_"; + } + else if(issubstr(param_00,"pr_expert_")) + { + var_01 = "pr_expert_"; + } + + var_02 = getsubstr(param_00,var_01.size,param_00.size); + var_03 = strtok(var_02,"_"); + var_04 = undefined; + if(isdefined(var_03[2]) && maps\mp\_utility::isattachment(var_03[2])) + { + var_04 = var_03[2]; + } + + return var_04; +} + +//Function Number: 67 +func_8107(param_00) +{ + if(!isdefined(param_00)) + { + return 0; + } + + var_01 = func_8102(param_00); + if(isdefined(var_01) && var_01 == "killstreaks_assault" || var_01 == "killstreaks_support") + { + return 1; + } + + return 0; +} + +//Function Number: 68 +func_8108(param_00) +{ + var_01 = "ch_"; + var_02 = getsubstr(param_00,var_01.size,param_00.size); + if(var_02 == "assault_streaks" || var_02 == "support_streaks") + { + var_02 = undefined; + } + + return var_02; +} + +//Function Number: 69 +challenge_targetval(param_00,param_01,param_02) +{ + var_03 = tablelookup(param_00,0,param_01,6 + param_02 - 1 * 2); + return int(var_03); +} + +//Function Number: 70 +challenge_rewardval(param_00,param_01,param_02) +{ + var_03 = tablelookup(param_00,0,param_01,7 + param_02 - 1 * 2); + return int(var_03); +} + +//Function Number: 71 +func_0E7B(param_00,param_01) +{ + var_02 = 0; + var_03 = 0; + var_04 = tablelookupbyrow(param_00,0,0); + for(var_02 = 1;var_04 != "";var_02++) + { + level.challengeinfo[var_04] = []; + level.challengeinfo[var_04]["type"] = param_01; + level.challengeinfo[var_04]["targetval"] = []; + level.challengeinfo[var_04]["reward"] = []; + for(var_05 = 1;var_05 < 11;var_05++) + { + var_06 = challenge_targetval(param_00,var_04,var_05); + var_07 = challenge_rewardval(param_00,var_04,var_05); + if(var_06 == 0) + { + break; + } + + level.challengeinfo[var_04]["targetval"][var_05] = var_06; + level.challengeinfo[var_04]["reward"][var_05] = var_07; + var_03 = var_03 + var_07; + } + + var_04 = tablelookupbyrow(param_00,var_02,0); + } + + return int(var_03); +} + +//Function Number: 72 +buildchallegeinfo() +{ + level.challengeinfo = []; + var_00 = 0; + var_00 = var_00 + func_0E7B("mp/allChallengesTable.csv",0); + var_00 = var_00 + func_0E7B("mp/dailychallengesTable.csv",1); + var_00 = var_00 + func_0E7B("mp/weeklychallengesTable.csv",2); + var_01 = tablelookupbyrow("mp/challengeTable.csv",0,4); + for(var_02 = 1;var_01 != "";var_02++) + { + var_03 = tablelookupbyrow(var_01,0,0); + for(var_04 = 1;var_03 != "";var_04++) + { + var_05 = tablelookup(var_01,0,var_03,1); + if(var_05 != "") + { + level.challengeinfo[var_03]["requirement"] = var_05; + } + + var_03 = tablelookupbyrow(var_01,var_04,0); + } + + var_01 = tablelookupbyrow("mp/challengeTable.csv",var_02,4); + } +} + +//Function Number: 73 +monitorprocesschallenge() +{ + self endon("disconnect"); + level endon("game_end"); + for(;;) + { + if(!func_3223()) + { + return; + } + + self waittill("process",var_00); + processchallenge(var_00); + } +} + +//Function Number: 74 +func_326F() +{ + self endon("disconnect"); + level endon("game_end"); + for(;;) + { + self waittill("got_killstreak",var_00); + if(!isdefined(var_00)) + { + continue; + } + + switch(var_00) + { + case 3: + maps\mp\killstreaks\_killstreaks::giveadrenaline("3streak"); + break; + + case 4: + maps\mp\killstreaks\_killstreaks::giveadrenaline("4streak"); + break; + + case 5: + maps\mp\killstreaks\_killstreaks::giveadrenaline("5streak"); + break; + + case 6: + maps\mp\killstreaks\_killstreaks::giveadrenaline("6streak"); + break; + + case 7: + maps\mp\killstreaks\_killstreaks::giveadrenaline("7streak"); + break; + + case 8: + maps\mp\killstreaks\_killstreaks::giveadrenaline("8streak"); + break; + + case 9: + maps\mp\killstreaks\_killstreaks::giveadrenaline("9streak"); + break; + + case 10: + maps\mp\killstreaks\_killstreaks::giveadrenaline("10streak"); + break; + + default: + break; + } + + if(var_00 == 10 && self.killstreaks.size == 0) + { + processchallenge("ch_theloner"); + continue; + } + + if(var_00 == 9) + { + if(isdefined(self.killstreaks[7]) && isdefined(self.killstreaks[8]) && isdefined(self.killstreaks[9])) + { + processchallenge("ch_6fears7"); + } + } + } +} + +//Function Number: 75 +func_3270() +{ + self endon("disconnect"); + level endon("game_end"); + for(;;) + { + self waittill("destroyed_killstreak",var_00); + if(self isitemunlocked("specialty_blindeye") && maps\mp\_utility::func_27AF("specialty_blindeye")) + { + processchallenge("ch_blindeye_pro"); + } + + if(isdefined(var_00) && var_00 == "stinger_mp") + { + processchallenge("ch_marksman_stinger"); + processchallenge("pr_marksman_stinger"); + } + } +} + +//Function Number: 76 +genericchallenge(param_00,param_01) +{ + switch(param_00) + { + case "hijacker_airdrop": + processchallenge("ch_smoothcriminal"); + break; + + case "hijacker_airdrop_mega": + processchallenge("ch_poolshark"); + break; + + case "wargasm": + processchallenge("ch_wargasm"); + break; + + case "weapon_assault": + processchallenge("ch_surgical_assault"); + break; + + case "weapon_smg": + processchallenge("ch_surgical_smg"); + break; + + case "weapon_lmg": + processchallenge("ch_surgical_lmg"); + break; + + case "weapon_sniper": + processchallenge("ch_surgical_sniper"); + break; + + case "shield_damage": + if(!maps\mp\_utility::isjuggernaut()) + { + processchallenge("ch_shield_damage",param_01); + } + break; + + case "shield_bullet_hits": + if(!maps\mp\_utility::isjuggernaut()) + { + processchallenge("ch_shield_bullet",param_01); + } + break; + + case "shield_explosive_hits": + if(!maps\mp\_utility::isjuggernaut()) + { + processchallenge("ch_shield_explosive",param_01); + } + break; + } +} + +//Function Number: 77 +func_3271() +{ + var_00 = self getweaponslistprimaries(); + foreach(var_02 in var_00) + { + if(self getweaponammoclip(var_02)) + { + return 1; + } + + var_03 = weaponaltweaponname(var_02); + if(!isdefined(var_03) || var_03 == "none") + { + continue; + } + + if(self getweaponammoclip(var_03)) + { + return 1; + } + } + + return 0; +} + +//Function Number: 78 +monitoradstime() +{ + self endon("disconnect"); + self.adstime = 0; + for(;;) + { + if(self playerads() == 1) + { + self.adstime = self.adstime + 0.05; + } + else + { + self.adstime = 0; + } + + wait 0.05; + } +} + +//Function Number: 79 +func_3273() +{ + self endon("disconnect"); + self.holdingbreath = 0; + for(;;) + { + self waittill("hold_breath"); + self.holdingbreath = 1; + self waittill("release_breath"); + self.holdingbreath = 0; + } +} + +//Function Number: 80 +func_3274() +{ + self endon("disconnect"); + self.mantling = 0; + for(;;) + { + self waittill("jumped"); + var_00 = self getcurrentweapon(); + common_scripts\utility::waittill_notify_or_timeout("weapon_change",1); + var_01 = self getcurrentweapon(); + if(var_01 == "none") + { + self.mantling = 1; + } + else + { + self.mantling = 0; + } + + if(self.mantling) + { + if(self isitemunlocked("specialty_fastmantle") && maps\mp\_utility::func_27AF("specialty_fastmantle")) + { + processchallenge("ch_fastmantle"); + } + + common_scripts\utility::waittill_notify_or_timeout("weapon_change",1); + var_01 = self getcurrentweapon(); + if(var_01 == var_00) + { + self.mantling = 0; + } + } + } +} + +//Function Number: 81 +func_3276() +{ + self endon("disconnect"); + var_00 = self getcurrentweapon(); + for(;;) + { + self waittill("weapon_change",var_01); + if(var_01 == "none") + { + continue; + } + + if(var_01 == var_00) + { + continue; + } + + if(maps\mp\_utility::func_2829(var_01) || maps\mp\_utility::isdeathstreakweapon(var_01)) + { + continue; + } + + if(var_01 == "briefcase_bomb_mp" || var_01 == "briefcase_bomb_defuse_mp") + { + continue; + } + + var_02 = weaponinventorytype(var_01); + if(var_02 != "primary") + { + continue; + } + + self.lastprimaryweaponswaptime = gettime(); + } +} + +//Function Number: 82 +monitorflashbang() +{ + self endon("disconnect"); + for(;;) + { + self waittill("flashbang",var_00,var_01,var_02,var_03); + if(self == var_03) + { + continue; + } + + self.lastflashedtime = gettime(); + } +} + +//Function Number: 83 +monitorconcussion() +{ + self endon("disconnect"); + for(;;) + { + self waittill("concussed",var_00); + if(self == var_00) + { + continue; + } + + self.lastconcussedtime = gettime(); + } +} + +//Function Number: 84 +func_3279() +{ + self endon("disconnect"); + for(;;) + { + common_scripts\utility::waittill_any("triggered_mine","triggered_claymore","triggered_ims"); + thread waitdelayminetime(); + } +} + +//Function Number: 85 +waitdelayminetime() +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + wait level.delayminetime + 2; + processchallenge("ch_delaymine"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/gametypes/_music_and_dialog.gsc b/MW3/Xbox/MP/maps/mp/gametypes/_music_and_dialog.gsc new file mode 100644 index 0000000..11cbd90 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/gametypes/_music_and_dialog.gsc @@ -0,0 +1,536 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_music_and_dialog.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 11 + * Decompile Time: 165 ms + * Timestamp: 10/27/2023 2:25:41 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + game["music"]["spawn_allies"] = maps\mp\gametypes\_teams::getteamvoiceprefix("allies") + "spawn_music"; + game["music"]["defeat_allies"] = maps\mp\gametypes\_teams::getteamvoiceprefix("allies") + "defeat_music"; + game["music"]["victory_allies"] = maps\mp\gametypes\_teams::getteamvoiceprefix("allies") + "victory_music"; + game["music"]["winning_allies"] = maps\mp\gametypes\_teams::getteamvoiceprefix("allies") + "winning_music"; + game["music"]["losing_allies"] = maps\mp\gametypes\_teams::getteamvoiceprefix("allies") + "losing_music"; + game["voice"]["allies"] = maps\mp\gametypes\_teams::getteamvoiceprefix("allies") + "1mc_"; + game["music"]["spawn_axis"] = maps\mp\gametypes\_teams::getteamvoiceprefix("axis") + "spawn_music"; + game["music"]["defeat_axis"] = maps\mp\gametypes\_teams::getteamvoiceprefix("axis") + "defeat_music"; + game["music"]["victory_axis"] = maps\mp\gametypes\_teams::getteamvoiceprefix("axis") + "victory_music"; + game["music"]["winning_axis"] = maps\mp\gametypes\_teams::getteamvoiceprefix("axis") + "winning_music"; + game["music"]["losing_axis"] = maps\mp\gametypes\_teams::getteamvoiceprefix("axis") + "losing_music"; + game["voice"]["axis"] = maps\mp\gametypes\_teams::getteamvoiceprefix("axis") + "1mc_"; + game["music"]["losing_time"] = "mp_time_running_out_losing"; + game["music"]["suspense"] = []; + game["music"]["suspense"][game["music"]["suspense"].size] = "mp_suspense_01"; + game["music"]["suspense"][game["music"]["suspense"].size] = "mp_suspense_02"; + game["music"]["suspense"][game["music"]["suspense"].size] = "mp_suspense_03"; + game["music"]["suspense"][game["music"]["suspense"].size] = "mp_suspense_04"; + game["music"]["suspense"][game["music"]["suspense"].size] = "mp_suspense_05"; + game["music"]["suspense"][game["music"]["suspense"].size] = "mp_suspense_06"; + game["dialog"]["mission_success"] = "mission_success"; + game["dialog"]["mission_failure"] = "mission_fail"; + game["dialog"]["mission_draw"] = "draw"; + game["dialog"]["round_success"] = "encourage_win"; + game["dialog"]["round_failure"] = "encourage_lost"; + game["dialog"]["round_draw"] = "draw"; + game["dialog"]["timesup"] = "timesup"; + game["dialog"]["winning_time"] = "winning"; + game["dialog"]["losing_time"] = "losing"; + game["dialog"]["winning_score"] = "winning_fight"; + game["dialog"]["losing_score"] = "losing_fight"; + game["dialog"]["lead_lost"] = "lead_lost"; + game["dialog"]["lead_tied"] = "tied"; + game["dialog"]["lead_taken"] = "lead_taken"; + game["dialog"]["last_alive"] = "lastalive"; + game["dialog"]["boost"] = "boost"; + if(!isdefined(game["dialog"]["offense_obj"])) + { + game["dialog"]["offense_obj"] = "boost"; + } + + if(!isdefined(game["dialog"]["defense_obj"])) + { + game["dialog"]["defense_obj"] = "boost"; + } + + game["dialog"]["hardcore"] = "hardcore"; + game["dialog"]["highspeed"] = "highspeed"; + game["dialog"]["tactical"] = "tactical"; + game["dialog"]["challenge"] = "challengecomplete"; + game["dialog"]["promotion"] = "promotion"; + game["dialog"]["bomb_taken"] = "acheive_bomb"; + game["dialog"]["bomb_lost"] = "bomb_taken"; + game["dialog"]["bomb_defused"] = "bomb_defused"; + game["dialog"]["bomb_planted"] = "bomb_planted"; + game["dialog"]["obj_taken"] = "securedobj"; + game["dialog"]["obj_lost"] = "lostobj"; + game["dialog"]["obj_defend"] = "obj_defend"; + game["dialog"]["obj_destroy"] = "obj_destroy"; + game["dialog"]["obj_capture"] = "capture_obj"; + game["dialog"]["objs_capture"] = "capture_objs"; + game["dialog"]["hq_located"] = "hq_located"; + game["dialog"]["hq_enemy_captured"] = "hq_captured"; + game["dialog"]["hq_enemy_destroyed"] = "hq_destroyed"; + game["dialog"]["hq_secured"] = "hq_secured"; + game["dialog"]["hq_offline"] = "hq_offline"; + game["dialog"]["hq_online"] = "hq_online"; + game["dialog"]["move_to_new"] = "new_positions"; + game["dialog"]["push_forward"] = "pushforward"; + game["dialog"]["attack"] = "attack"; + game["dialog"]["defend"] = "defend"; + game["dialog"]["offense"] = "offense"; + game["dialog"]["defense"] = "defense"; + game["dialog"]["halftime"] = "halftime"; + game["dialog"]["overtime"] = "overtime"; + game["dialog"]["side_switch"] = "switching"; + game["dialog"]["flag_taken"] = "ourflag"; + game["dialog"]["flag_dropped"] = "ourflag_drop"; + game["dialog"]["flag_returned"] = "ourflag_return"; + game["dialog"]["flag_captured"] = "ourflag_capt"; + game["dialog"]["flag_getback"] = "getback_ourflag"; + game["dialog"]["enemy_flag_bringhome"] = "enemyflag_tobase"; + game["dialog"]["enemy_flag_taken"] = "enemyflag"; + game["dialog"]["enemy_flag_dropped"] = "enemyflag_drop"; + game["dialog"]["enemy_flag_returned"] = "enemyflag_return"; + game["dialog"]["enemy_flag_captured"] = "enemyflag_capt"; + game["dialog"]["got_flag"] = "achieve_flag"; + game["dialog"]["dropped_flag"] = "lost_flag"; + game["dialog"]["enemy_got_flag"] = "enemy_has_flag"; + game["dialog"]["enemy_dropped_flag"] = "enemy_dropped_flag"; + game["dialog"]["capturing_a"] = "capturing_a"; + game["dialog"]["capturing_b"] = "capturing_b"; + game["dialog"]["capturing_c"] = "capturing_c"; + game["dialog"]["captured_a"] = "capture_a"; + game["dialog"]["captured_b"] = "capture_c"; + game["dialog"]["captured_c"] = "capture_b"; + game["dialog"]["securing_a"] = "securing_a"; + game["dialog"]["securing_b"] = "securing_b"; + game["dialog"]["securing_c"] = "securing_c"; + game["dialog"]["secured_a"] = "secure_a"; + game["dialog"]["secured_b"] = "secure_b"; + game["dialog"]["secured_c"] = "secure_c"; + game["dialog"]["losing_a"] = "losing_a"; + game["dialog"]["losing_b"] = "losing_b"; + game["dialog"]["losing_c"] = "losing_c"; + game["dialog"]["lost_a"] = "lost_a"; + game["dialog"]["lost_b"] = "lost_b"; + game["dialog"]["lost_c"] = "lost_c"; + game["dialog"]["enemy_taking_a"] = "enemy_take_a"; + game["dialog"]["enemy_taking_b"] = "enemy_take_b"; + game["dialog"]["enemy_taking_c"] = "enemy_take_c"; + game["dialog"]["enemy_has_a"] = "enemy_has_a"; + game["dialog"]["enemy_has_b"] = "enemy_has_b"; + game["dialog"]["enemy_has_c"] = "enemy_has_c"; + game["dialog"]["lost_all"] = "take_positions"; + game["dialog"]["secure_all"] = "positions_lock"; + game["dialog"]["destroy_sentry"] = "dest_sentrygun"; + game["music"]["nuke_music"] = "nuke_music"; + game["dialog"]["sentry_gone"] = "sentry_gone"; + game["dialog"]["sentry_destroyed"] = "sentry_destroyed"; + game["dialog"]["ti_gone"] = "ti_cancelled"; + game["dialog"]["ti_destroyed"] = "ti_blocked"; + game["dialog"]["ims_destroyed"] = "ims_destroyed"; + game["dialog"]["lbguard_destroyed"] = "lbguard_destroyed"; + game["dialog"]["ballistic_vest_destroyed"] = "ballistic_vest_destroyed"; + game["dialog"]["remote_sentry_destroyed"] = "remote_sentry_destroyed"; + game["dialog"]["sam_destroyed"] = "sam_destroyed"; + game["dialog"]["sam_gone"] = "sam_gone"; + level thread onplayerconnect(); + level thread onlastalive(); + level thread func_2D6D(); + level thread func_2D67(); + level thread func_2D66(); +} + +//Function Number: 2 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_00 thread onplayerspawned(); + var_00 thread finalkillcammusic(); + } +} + +//Function Number: 3 +onplayerspawned() +{ + self endon("disconnect"); + self waittill("spawned_player"); + if(!level.splitscreen || level.splitscreen && !isdefined(level.playedstartingmusic)) + { + if(!self issplitscreenplayer() || self issplitscreenplayerprimary()) + { + self playlocalsound(game["music"]["spawn_" + self.team]); + } + + if(level.splitscreen) + { + level.playedstartingmusic = 1; + } + } + + if(isdefined(game["dialog"]["gametype"]) && !level.splitscreen || self == level.players[0]) + { + if(isdefined(game["dialog"]["allies_gametype"]) && self.team == "allies") + { + maps\mp\_utility::func_2A60("allies_gametype"); + } + else if(isdefined(game["dialog"]["axis_gametype"]) && self.team == "axis") + { + maps\mp\_utility::func_2A60("axis_gametype"); + } + else if(!self issplitscreenplayer() || self issplitscreenplayerprimary()) + { + maps\mp\_utility::func_2A60("gametype"); + } + } + + maps\mp\_utility::func_274B("prematch_done"); + if(self.team == game["attackers"]) + { + if(!self issplitscreenplayer() || self issplitscreenplayerprimary()) + { + maps\mp\_utility::func_2A60("offense_obj","introboost"); + return; + } + + return; + } + + if(!self issplitscreenplayer() || self issplitscreenplayerprimary()) + { + maps\mp\_utility::func_2A60("defense_obj","introboost"); + } +} + +//Function Number: 4 +onlastalive() +{ + level endon("game_ended"); + level waittill("last_alive",var_00); + if(!isalive(var_00)) + { + return; + } + + var_00 maps\mp\_utility::func_2A60("last_alive"); +} + +//Function Number: 5 +func_2D66() +{ + level waittill("round_switch",var_00); + switch(var_00) + { + case "halftime": + foreach(var_02 in level.players) + { + if(var_02 issplitscreenplayer() && !var_02 issplitscreenplayerprimary()) + { + continue; + } + + var_02 maps\mp\_utility::func_2A60("halftime"); + } + break; + + case "overtime": + foreach(var_02 in level.players) + { + if(var_02 issplitscreenplayer() && !var_02 issplitscreenplayerprimary()) + { + continue; + } + + var_02 maps\mp\_utility::func_2A60("overtime"); + } + break; + + default: + foreach(var_02 in level.players) + { + if(var_02 issplitscreenplayer() && !var_02 issplitscreenplayerprimary()) + { + continue; + } + + var_02 maps\mp\_utility::func_2A60("side_switch"); + } + break; + } +} + +//Function Number: 6 +func_2D67() +{ + level thread func_2D69(); + level thread gamewinnerdialog(); + level waittill("game_win",var_00); + if(level.teambased) + { + if(level.splitscreen) + { + if(var_00 == "allies") + { + maps\mp\_utility::func_2D68(game["music"]["victory_allies"],"allies"); + return; + } + + if(var_00 == "axis") + { + maps\mp\_utility::func_2D68(game["music"]["victory_axis"],"axis"); + return; + } + + maps\mp\_utility::func_2D68(game["music"]["nuke_music"]); + return; + } + + if(var_00 == "allies") + { + maps\mp\_utility::func_2D68(game["music"]["victory_allies"],"allies"); + maps\mp\_utility::func_2D68(game["music"]["defeat_axis"],"axis"); + return; + } + + if(var_00 == "axis") + { + maps\mp\_utility::func_2D68(game["music"]["victory_axis"],"axis"); + maps\mp\_utility::func_2D68(game["music"]["defeat_allies"],"allies"); + return; + } + + maps\mp\_utility::func_2D68(game["music"]["nuke_music"]); + return; + } + + foreach(var_02 in level.players) + { + if(var_02 issplitscreenplayer() && !var_02 issplitscreenplayerprimary()) + { + continue; + } + + if(var_02.pers["team"] != "allies" && var_02.pers["team"] != "axis") + { + var_02 playlocalsound(game["music"]["nuke_music"]); + continue; + } + + if(isdefined(var_00) && isplayer(var_00) && var_02 == var_00) + { + var_02 playlocalsound(game["music"]["victory_" + var_02.pers["team"]]); + continue; + } + + if(!level.splitscreen) + { + var_02 playlocalsound(game["music"]["defeat_" + var_02.pers["team"]]); + } + } +} + +//Function Number: 7 +func_2D69() +{ + level waittill("round_win",var_00); + var_01 = level.roundenddelay / 4; + if(var_01 > 0) + { + wait var_01; + } + + if(!isdefined(var_00) || isplayer(var_00)) + { + return; + } + + if(var_00 == "allies") + { + maps\mp\_utility::func_26E5("round_success","allies"); + maps\mp\_utility::func_26E5("round_failure","axis"); + return; + } + + if(var_00 == "axis") + { + maps\mp\_utility::func_26E5("round_success","axis"); + maps\mp\_utility::func_26E5("round_failure","allies"); + } +} + +//Function Number: 8 +gamewinnerdialog() +{ + level waittill("game_win",var_00); + var_01 = level.postroundtime / 2; + if(var_01 > 0) + { + wait var_01; + } + + if(!isdefined(var_00) || isplayer(var_00)) + { + return; + } + + if(var_00 == "allies") + { + maps\mp\_utility::func_26E5("mission_success","allies"); + maps\mp\_utility::func_26E5("mission_failure","axis"); + return; + } + + if(var_00 == "axis") + { + maps\mp\_utility::func_26E5("mission_success","axis"); + maps\mp\_utility::func_26E5("mission_failure","allies"); + return; + } + + maps\mp\_utility::func_26E5("mission_draw"); +} + +//Function Number: 9 +func_2D6D() +{ + level endon("game_ended"); + if(!level.hardcoremode) + { + thread suspensemusic(); + } + + level waittill("match_ending_soon",var_00); + if(maps\mp\_utility::func_18D0("roundlimit") == 1 || game["roundsPlayed"] == maps\mp\_utility::func_18D0("roundlimit") - 1) + { + if(!level.splitscreen) + { + if(var_00 == "time") + { + if(level.teambased) + { + if(game["teamScores"]["allies"] > game["teamScores"]["axis"]) + { + if(!level.hardcoremode) + { + maps\mp\_utility::func_2D68(game["music"]["winning_allies"],"allies"); + maps\mp\_utility::func_2D68(game["music"]["losing_axis"],"axis"); + } + + maps\mp\_utility::func_26E5("winning_time","allies"); + maps\mp\_utility::func_26E5("losing_time","axis"); + } + else if(game["teamScores"]["axis"] > game["teamScores"]["allies"]) + { + if(!level.hardcoremode) + { + maps\mp\_utility::func_2D68(game["music"]["winning_axis"],"axis"); + maps\mp\_utility::func_2D68(game["music"]["losing_allies"],"allies"); + } + + maps\mp\_utility::func_26E5("winning_time","axis"); + maps\mp\_utility::func_26E5("losing_time","allies"); + } + } + else + { + if(!level.hardcoremode) + { + maps\mp\_utility::func_2D68(game["music"]["losing_time"]); + } + + maps\mp\_utility::func_26E5("timesup"); + } + } + else if(var_00 == "score") + { + if(level.teambased) + { + if(game["teamScores"]["allies"] > game["teamScores"]["axis"]) + { + if(!level.hardcoremode) + { + maps\mp\_utility::func_2D68(game["music"]["winning_allies"],"allies"); + maps\mp\_utility::func_2D68(game["music"]["losing_axis"],"axis"); + } + + maps\mp\_utility::func_26E5("winning_score","allies"); + maps\mp\_utility::func_26E5("losing_score","axis"); + } + else if(game["teamScores"]["axis"] > game["teamScores"]["allies"]) + { + if(!level.hardcoremode) + { + maps\mp\_utility::func_2D68(game["music"]["winning_axis"],"axis"); + maps\mp\_utility::func_2D68(game["music"]["losing_allies"],"allies"); + } + + maps\mp\_utility::func_26E5("winning_score","axis"); + maps\mp\_utility::func_26E5("losing_score","allies"); + } + } + else + { + var_01 = maps\mp\gametypes\_gamescore::func_26D0(); + var_02 = maps\mp\gametypes\_gamescore::getlosingplayers(); + var_03[0] = var_01; + if(!level.hardcoremode) + { + var_01 playlocalsound(game["music"]["winning_" + var_01.pers["team"]]); + foreach(var_05 in level.players) + { + if(var_05 == var_01) + { + continue; + } + + var_05 playlocalsound(game["music"]["losing_" + var_05.pers["team"]]); + } + } + + var_01 maps\mp\_utility::func_2A60("winning_score"); + maps\mp\_utility::func_2D6E("losing_score",var_02); + } + } + + level waittill("match_ending_very_soon"); + maps\mp\_utility::func_26E5("timesup"); + return; + } + + return; + } + + if(!level.hardcoremode) + { + maps\mp\_utility::func_2D68(game["music"]["losing_allies"]); + } + + maps\mp\_utility::func_26E5("timesup"); +} + +//Function Number: 10 +suspensemusic() +{ + level endon("game_ended"); + level endon("match_ending_soon"); + var_00 = game["music"]["suspense"].size; + wait 120; + for(;;) + { + wait randomfloatrange(60,120); + maps\mp\_utility::func_2D68(game["music"]["suspense"][randomint(var_00)]); + } +} + +//Function Number: 11 +finalkillcammusic() +{ + self waittill("showing_final_killcam"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/gametypes/_objpoints.gsc b/MW3/Xbox/MP/maps/mp/gametypes/_objpoints.gsc new file mode 100644 index 0000000..1db6b6b --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/gametypes/_objpoints.gsc @@ -0,0 +1,184 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_objpoints.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 9 + * Decompile Time: 135 ms + * Timestamp: 10/27/2023 2:25:42 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + precacheshader("objpoint_default"); + level.objpointnames = []; + level.objpoints = []; + if(level.splitscreen) + { + level.objpointsize = 15; + } + else + { + level.objpointsize = 8; + } + + level.objpoint_alpha_default = 0.5; + level.objpointscale = 1; +} + +//Function Number: 2 +func_2996(param_00,param_01,param_02,param_03,param_04,param_05) +{ + var_06 = func_299C(param_00); + if(isdefined(var_06)) + { + deleteobjpoint(var_06); + } + + if(!isdefined(param_03)) + { + param_03 = "objpoint_default"; + } + + if(!isdefined(param_05)) + { + param_05 = 1; + } + + if(param_02 != "all") + { + var_06 = newteamhudelem(param_02); + } + else + { + var_06 = newhudelem(); + } + + var_06.name = param_00; + var_06.x = param_01[0]; + var_06.y = param_01[1]; + var_06.z = param_01[2]; + var_06.team = param_02; + var_06.isflashing = 0; + var_06.isshown = 1; + var_06 setshader(param_03,level.objpointsize,level.objpointsize); + var_06 setwaypoint(1,0); + if(isdefined(param_04)) + { + var_06.alpha = param_04; + } + else + { + var_06.alpha = level.objpoint_alpha_default; + } + + var_06.basealpha = var_06.alpha; + var_06.index = level.objpointnames.size; + level.objpoints[param_00] = var_06; + level.objpointnames[level.objpointnames.size] = param_00; + return var_06; +} + +//Function Number: 3 +deleteobjpoint(param_00) +{ + if(level.objpoints.size == 1) + { + level.objpoints = []; + level.objpointnames = []; + param_00 destroy(); + return; + } + + var_01 = param_00.index; + var_02 = level.objpointnames.size - 1; + var_03 = getobjpointbyindex(var_02); + level.objpointnames[var_01] = var_03.name; + var_03.index = var_01; + level.objpointnames[var_02] = undefined; + level.objpoints[param_00.name] = undefined; + param_00 destroy(); +} + +//Function Number: 4 +updateorigin(param_00) +{ + if(self.x != param_00[0]) + { + self.x = param_00[0]; + } + + if(self.y != param_00[1]) + { + self.y = param_00[1]; + } + + if(self.z != param_00[2]) + { + self.z = param_00[2]; + } +} + +//Function Number: 5 +setoriginbyname(param_00,param_01) +{ + var_02 = func_299C(param_00); + var_02 updateorigin(param_01); +} + +//Function Number: 6 +func_299C(param_00) +{ + if(isdefined(level.objpoints[param_00])) + { + return level.objpoints[param_00]; + } + + return undefined; +} + +//Function Number: 7 +getobjpointbyindex(param_00) +{ + if(isdefined(level.objpointnames[param_00])) + { + return level.objpoints[level.objpointnames[param_00]]; + } + + return undefined; +} + +//Function Number: 8 +startflashing() +{ + self endon("stop_flashing_thread"); + if(self.isflashing) + { + return; + } + + self.isflashing = 1; + while(self.isflashing) + { + self fadeovertime(0.75); + self.alpha = 0.35 * self.basealpha; + wait 0.75; + self fadeovertime(0.75); + self.alpha = self.basealpha; + wait 0.75; + } + + self.alpha = self.basealpha; +} + +//Function Number: 9 +stopflashing() +{ + if(!self.isflashing) + { + return; + } + + self.isflashing = 0; +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/gametypes/_persistance.gsc b/MW3/Xbox/MP/maps/mp/gametypes/_persistance.gsc new file mode 100644 index 0000000..9732194 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/gametypes/_persistance.gsc @@ -0,0 +1,566 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_persistance.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 22 + * Decompile Time: 307 ms + * Timestamp: 10/27/2023 2:25:43 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level.persistentdatainfo = []; + maps\mp\gametypes\_class::init(); + maps\mp\gametypes\_rank::init(); + maps\mp\gametypes\_missions::init(); + maps\mp\gametypes\_playercards::init(); + level thread func_32DD(); + level thread func_32DF(); +} + +//Function Number: 2 +initbufferedstats() +{ + self.bufferedstats = []; + self.bufferedstats["totalShots"] = self getplayerdata("totalShots"); + self.bufferedstats["accuracy"] = self getplayerdata("accuracy"); + self.bufferedstats["misses"] = self getplayerdata("misses"); + self.bufferedstats["hits"] = self getplayerdata("hits"); + self.bufferedstats["timePlayedAllies"] = self getplayerdata("timePlayedAllies"); + self.bufferedstats["timePlayedOpfor"] = self getplayerdata("timePlayedOpfor"); + self.bufferedstats["timePlayedOther"] = self getplayerdata("timePlayedOther"); + self.bufferedstats["timePlayedTotal"] = self getplayerdata("timePlayedTotal"); + self.bufferedchildstats = []; + self.bufferedchildstats["round"] = []; + self.bufferedchildstats["round"]["timePlayed"] = self getplayerdata("round","timePlayed"); + self.bufferedchildstats["xpMultiplierTimePlayed"] = []; + self.bufferedchildstats["xpMultiplierTimePlayed"][0] = self getplayerdata("xpMultiplierTimePlayed",0); + self.bufferedchildstats["xpMultiplierTimePlayed"][1] = self getplayerdata("xpMultiplierTimePlayed",1); + self.bufferedchildstats["xpMultiplierTimePlayed"][2] = self getplayerdata("xpMultiplierTimePlayed",2); + self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"] = []; + self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][0] = self getplayerdata("xpMaxMultiplierTimePlayed",0); + self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][1] = self getplayerdata("xpMaxMultiplierTimePlayed",1); + self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][2] = self getplayerdata("xpMaxMultiplierTimePlayed",2); + self.bufferedchildstats["challengeXPMultiplierTimePlayed"] = []; + self.bufferedchildstats["challengeXPMultiplierTimePlayed"][0] = self getplayerdata("challengeXPMultiplierTimePlayed",0); + self.bufferedchildstatsmax["challengeXPMaxMultiplierTimePlayed"] = []; + self.bufferedchildstatsmax["challengeXPMaxMultiplierTimePlayed"][0] = self getplayerdata("challengeXPMaxMultiplierTimePlayed",0); + self.bufferedchildstats["weaponXPMultiplierTimePlayed"] = []; + self.bufferedchildstats["weaponXPMultiplierTimePlayed"][0] = self getplayerdata("weaponXPMultiplierTimePlayed",0); + self.bufferedchildstatsmax["weaponXPMaxMultiplierTimePlayed"] = []; + self.bufferedchildstatsmax["weaponXPMaxMultiplierTimePlayed"][0] = self getplayerdata("weaponXPMaxMultiplierTimePlayed",0); + self.bufferedstats["prestigeDoubleXp"] = self getplayerdata("prestigeDoubleXp"); + self.bufferedstats["prestigeDoubleXpTimePlayed"] = self getplayerdata("prestigeDoubleXpTimePlayed"); + self.bufferedstatsmax["prestigeDoubleXpMaxTimePlayed"] = self getplayerdata("prestigeDoubleXpMaxTimePlayed"); + self.bufferedstats["prestigeDoubleWeaponXp"] = self getplayerdata("prestigeDoubleWeaponXp"); + self.bufferedstats["prestigeDoubleWeaponXpTimePlayed"] = self getplayerdata("prestigeDoubleWeaponXpTimePlayed"); + self.bufferedstatsmax["prestigeDoubleWeaponXpMaxTimePlayed"] = self getplayerdata("prestigeDoubleWeaponXpMaxTimePlayed"); +} + +//Function Number: 3 +func_2B58(param_00) +{ + return self getplayerdata(param_00); +} + +//Function Number: 4 +func_2CD1(param_00,param_01) +{ + if(!maps\mp\_utility::rankingenabled()) + { + return; + } + + self setplayerdata(param_00,param_01); +} + +//Function Number: 5 +statadd(param_00,param_01,param_02) +{ + if(!maps\mp\_utility::rankingenabled()) + { + return; + } + + if(isdefined(param_02)) + { + var_03 = self getplayerdata(param_00,param_02); + self setplayerdata(param_00,param_02,param_01 + var_03); + return; + } + + var_03 = self getplayerdata(param_01); + self setplayerdata(param_00,param_01 + var_03); +} + +//Function Number: 6 +statgetchild(param_00,param_01) +{ + return self getplayerdata(param_00,param_01); +} + +//Function Number: 7 +func_26D8(param_00,param_01,param_02) +{ + if(!maps\mp\_utility::rankingenabled()) + { + return; + } + + self setplayerdata(param_00,param_01,param_02); +} + +//Function Number: 8 +func_32DB(param_00,param_01,param_02) +{ + if(!maps\mp\_utility::rankingenabled()) + { + return; + } + + var_03 = self getplayerdata(param_00,param_01); + self setplayerdata(param_00,param_01,var_03 + param_02); +} + +//Function Number: 9 +func_32DC(param_00,param_01) +{ + return self.bufferedchildstats[param_00][param_01]; +} + +//Function Number: 10 +statsetchildbuffered(param_00,param_01,param_02) +{ + if(!maps\mp\_utility::rankingenabled()) + { + return; + } + + self.bufferedchildstats[param_00][param_01] = param_02; +} + +//Function Number: 11 +func_2750(param_00,param_01,param_02) +{ + if(!maps\mp\_utility::rankingenabled()) + { + return; + } + + var_03 = func_32DC(param_00,param_01); + statsetchildbuffered(param_00,param_01,var_03 + param_02); +} + +//Function Number: 12 +stataddbufferedwithmax(param_00,param_01,param_02) +{ + if(!maps\mp\_utility::rankingenabled()) + { + return; + } + + var_03 = func_2845(param_00) + param_01; + if(var_03 > param_02) + { + var_03 = param_02; + } + + if(var_03 < func_2845(param_00)) + { + var_03 = param_02; + } + + func_2846(param_00,var_03); +} + +//Function Number: 13 +stataddchildbufferedwithmax(param_00,param_01,param_02,param_03) +{ + if(!maps\mp\_utility::rankingenabled()) + { + return; + } + + var_04 = func_32DC(param_00,param_01) + param_02; + if(var_04 > param_03) + { + var_04 = param_03; + } + + if(var_04 < func_32DC(param_00,param_01)) + { + var_04 = param_03; + } + + statsetchildbuffered(param_00,param_01,var_04); +} + +//Function Number: 14 +func_2845(param_00) +{ + return self.bufferedstats[param_00]; +} + +//Function Number: 15 +func_2846(param_00,param_01) +{ + if(!maps\mp\_utility::rankingenabled()) + { + return; + } + + self.bufferedstats[param_00] = param_01; +} + +//Function Number: 16 +func_274F(param_00,param_01) +{ + if(!maps\mp\_utility::rankingenabled()) + { + return; + } + + var_02 = func_2845(param_00); + func_2846(param_00,var_02 + param_01); +} + +//Function Number: 17 +func_32DD() +{ + wait 0.15; + var_00 = 0; + while(!level.gameended) + { + maps\mp\gametypes\_hostmigration::func_273E(); + var_00++; + if(var_00 >= level.players.size) + { + var_00 = 0; + } + + if(isdefined(level.players[var_00])) + { + level.players[var_00] func_32DE(); + level.players[var_00] updateweaponbufferedstats(); + } + + wait 2; + } + + foreach(var_02 in level.players) + { + var_02 func_32DE(); + var_02 updateweaponbufferedstats(); + } +} + +//Function Number: 18 +func_32DE() +{ + foreach(var_02, var_01 in self.bufferedstats) + { + self setplayerdata(var_02,var_01); + } + + foreach(var_02, var_01 in self.bufferedchildstats) + { + foreach(var_06, var_05 in var_01) + { + self setplayerdata(var_02,var_06,var_05); + } + } +} + +//Function Number: 19 +incrementweaponstat(param_00,param_01,param_02) +{ + if(maps\mp\_utility::func_2829(param_00)) + { + return; + } + + if(maps\mp\_utility::rankingenabled()) + { + var_03 = self getplayerdata("weaponStats",param_00,param_01); + self setplayerdata("weaponStats",param_00,param_01,var_03 + param_02); + } +} + +//Function Number: 20 +incrementattachmentstat(param_00,param_01,param_02) +{ + if(maps\mp\_utility::rankingenabled()) + { + var_03 = self getplayerdata("attachmentsStats",param_00,param_01); + self setplayerdata("attachmentsStats",param_00,param_01,var_03 + param_02); + } +} + +//Function Number: 21 +updateweaponbufferedstats() +{ + if(!isdefined(self.trackingweaponname)) + { + return; + } + + if(self.trackingweaponname == "" || self.trackingweaponname == "none") + { + return; + } + + var_00 = self.trackingweaponname; + if(maps\mp\_utility::func_2829(var_00) || maps\mp\_utility::func_2CC3(var_00)) + { + return; + } + + var_01 = strtok(var_00,"_"); + if(var_01[0] == "iw5") + { + } + + if(var_41[0] == "alt") + { + foreach(var_03 in var_41) + { + if(var_03 == "gl" || var_03 == "gp25" || var_03 == "m320") + { + var_41[0] = "gl"; + break; + } + + if(var_03 == "shotgun") + { + var_41[0] = "shotgun"; + break; + } + } + + if(var_41[0] == "alt") + { + var_41[0] = var_41[1] + "_" + var_41[2]; + } + } + + if(var_41[0] == "gl" || var_41[0] == "shotgun") + { + if(self.trackingweaponshots > 0) + { + incrementattachmentstat(var_41[0],"shots",self.trackingweaponshots); + maps\mp\_matchdata::func_28DE(var_41[0],"shots",self.trackingweaponshots); + } + + if(self.trackingweaponkills > 0) + { + incrementattachmentstat(var_41[0],"kills",self.trackingweaponkills); + maps\mp\_matchdata::func_28DE(var_41[0],"kills",self.trackingweaponkills); + } + + if(self.trackingweaponhits > 0) + { + incrementattachmentstat(var_41[0],"hits",self.trackingweaponhits); + maps\mp\_matchdata::func_28DE(var_41[0],"hits",self.trackingweaponhits); + } + + if(self.trackingweaponheadshots > 0) + { + incrementattachmentstat(var_41[0],"headShots",self.trackingweaponheadshots); + maps\mp\_matchdata::func_28DE(var_41[0],"headShots",self.trackingweaponheadshots); + } + + if(self.trackingweapondeaths > 0) + { + incrementattachmentstat(var_41[0],"deaths",self.trackingweapondeaths); + maps\mp\_matchdata::func_28DE(var_41[0],"deaths",self.trackingweapondeaths); + } + + self.trackingweaponname = "none"; + self.trackingweaponshots = 0; + self.trackingweaponkills = 0; + self.trackingweaponhits = 0; + self.trackingweaponheadshots = 0; + self.trackingweapondeaths = 0; + return; + } + + if(!maps\mp\_utility::func_2827(var_41[0]) && !maps\mp\_utility::iscacsecondaryweapon(var_41[0])) + { + return; + } + + if(self.trackingweaponshots > 0) + { + incrementweaponstat(var_41[0],"shots",self.trackingweaponshots); + maps\mp\_matchdata::logweaponstat(var_41[0],"shots",self.trackingweaponshots); + } + + if(self.trackingweaponkills > 0) + { + incrementweaponstat(var_41[0],"kills",self.trackingweaponkills); + maps\mp\_matchdata::logweaponstat(var_41[0],"kills",self.trackingweaponkills); + } + + if(self.trackingweaponhits > 0) + { + incrementweaponstat(var_41[0],"hits",self.trackingweaponhits); + maps\mp\_matchdata::logweaponstat(var_41[0],"hits",self.trackingweaponhits); + } + + if(self.trackingweaponheadshots > 0) + { + incrementweaponstat(var_41[0],"headShots",self.trackingweaponheadshots); + maps\mp\_matchdata::logweaponstat(var_41[0],"headShots",self.trackingweaponheadshots); + } + + if(self.trackingweapondeaths > 0) + { + incrementweaponstat(var_41[0],"deaths",self.trackingweapondeaths); + maps\mp\_matchdata::logweaponstat(var_41[0],"deaths",self.trackingweapondeaths); + } + + var_41 = strtok(var_01,"_"); + if(var_41[0] != "none") + { + for(var_05 = 0;var_05 < var_41.size;var_05++ = var_41[0]) + { + if(var_41[var_05] == "mp" || var_41[var_05] == "scope1" || var_41[var_05] == "scope2" || var_41[var_05] == "scope3" || var_41[var_05] == "scope4" || var_41[var_05] == "scope5" || var_41[var_05] == "scope6" || var_41[var_05] == "scope7" || var_41[var_05] == "scope8" || var_41[var_05] == "scope9" || var_41[var_05] == "scope10") + { + continue; + } + + if(issubstr(var_41[var_05],"camo")) + { + continue; + } + + if(issubstr(var_41[var_05],"scope") && !issubstr(var_41[var_05],"vz")) + { + continue; + } + + if(var_41[var_05] == "alt") + { + var_05 = var_05 + 2; + continue; + } + + if(var_41[var_05] == "iw5") + { + var_05 = var_05 + 1; + continue; + } + + var_41[var_05] = maps\mp\_utility::validateattachment(var_41[var_05]); + if(var_41[var_05] == "gl" || var_41[var_05] == "shotgun") + { + continue; + } + + if(issubstr(var_41[var_05],"scope") && issubstr(var_41[var_05],"vz")) + { + var_41[var_05] = "vzscope"; + } + + if(var_05 == 0 && var_41[var_05] != "iw5" && var_41[var_05] != "alt") + { + continue; + } + + if(self.trackingweaponshots > 0) + { + if(var_41[var_05] != "tactical") + { + incrementattachmentstat(var_41[var_05],"shots",self.trackingweaponshots); + maps\mp\_matchdata::func_28DE(var_41[var_05],"shots",self.trackingweaponshots); + } + } + + if(self.trackingweaponkills > 0) + { + if(var_41[var_05] != "tactical") + { + incrementattachmentstat(var_41[var_05],"kills",self.trackingweaponkills); + maps\mp\_matchdata::func_28DE(var_41[var_05],"kills",self.trackingweaponkills); + } + } + + if(self.trackingweaponhits > 0) + { + if(var_41[var_05] != "tactical") + { + incrementattachmentstat(var_41[var_05],"hits",self.trackingweaponhits); + maps\mp\_matchdata::func_28DE(var_41[var_05],"hits",self.trackingweaponhits); + } + } + + if(self.trackingweaponheadshots > 0) + { + if(var_41[var_05] != "tactical") + { + incrementattachmentstat(var_41[var_05],"headShots",self.trackingweaponheadshots); + maps\mp\_matchdata::func_28DE(var_41[var_05],"headShots",self.trackingweaponheadshots); + } + } + + if(self.trackingweapondeaths > 0) + { + incrementattachmentstat(var_41[var_05],"deaths",self.trackingweapondeaths); + maps\mp\_matchdata::func_28DE(var_41[var_05],"deaths",self.trackingweapondeaths); + } + } + } + + self.trackingweaponname = "none"; + self.trackingweaponshots = 0; + self.trackingweaponkills = 0; + self.trackingweaponhits = 0; + self.trackingweaponheadshots = 0; + self.trackingweapondeaths = 0; +} + +//Function Number: 22 +func_32DF() +{ + level waittill("game_ended"); + if(!maps\mp\_utility::matchmakinggame()) + { + return; + } + + var_00 = 0; + var_01 = 0; + var_02 = 0; + var_03 = 0; + var_04 = 0; + var_05 = 0; + foreach(var_07 in level.players) + { + var_05 = var_05 + var_07.timeplayed["total"]; + } + + incrementcounter("global_minutes",int(var_05 / 60)); + if(!maps\mp\_utility::waslastround()) + { + return; + } + + wait 0.05; + foreach(var_07 in level.players) + { + var_00 = var_00 + var_07.kills; + var_01 = var_01 + var_07.deaths; + var_02 = var_02 + var_07.assists; + var_03 = var_03 + var_07.headshots; + var_04 = var_04 + var_07.suicides; + } + + incrementcounter("global_kills",var_00); + incrementcounter("global_deaths",var_01); + incrementcounter("global_assists",var_02); + incrementcounter("global_headshots",var_03); + incrementcounter("global_suicides",var_04); + incrementcounter("global_games",1); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/gametypes/_playercards.gsc b/MW3/Xbox/MP/maps/mp/gametypes/_playercards.gsc new file mode 100644 index 0000000..3019670 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/gametypes/_playercards.gsc @@ -0,0 +1,32 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_playercards.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 36 ms + * Timestamp: 10/27/2023 2:25:43 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level thread onplayerconnect(); +} + +//Function Number: 2 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_01 = var_00 maps\mp\gametypes\_persistence::func_2B58("cardIcon"); + var_02 = tablelookupbyrow("mp/cardIconTable.csv",var_01,0); + var_00 setcardicon(var_02); + var_03 = var_00 maps\mp\gametypes\_persistence::func_2B58("cardTitle"); + var_04 = tablelookupbyrow("mp/cardTitleTable.csv",var_03,0); + var_00 setcardtitle(var_04); + var_05 = var_00 maps\mp\gametypes\_persistence::func_2B58("cardNameplate"); + var_00 setcardnameplate(var_05); + } +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/gametypes/_playerlogic.gsc b/MW3/Xbox/MP/maps/mp/gametypes/_playerlogic.gsc new file mode 100644 index 0000000..ff515f5 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/gametypes/_playerlogic.gsc @@ -0,0 +1,1645 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_playerlogic.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 53 + * Decompile Time: 744 ms + * Timestamp: 10/27/2023 2:25:46 AM +*******************************************************************/ + +//Function Number: 1 +func_2AF9(param_00) +{ + if(!self.hasspawned) + { + return 0; + } + + var_01 = gettime() + param_00 * 1000; + var_02 = level.lastwave[self.pers["team"]]; + var_03 = level.wavedelay[self.pers["team"]] * 1000; + var_04 = var_01 - var_02 / var_03; + var_05 = ceil(var_04); + var_06 = var_02 + var_05 * var_03; + if(isdefined(self.respawntimerstarttime)) + { + var_07 = gettime() - self.respawntimerstarttime / 1000; + if(self.respawntimerstarttime < var_02) + { + return 0; + } + } + + if(isdefined(self.wavespawnindex)) + { + var_06 = var_06 + 50 * self.wavespawnindex; + } + + return var_06 - gettime() / 1000; +} + +//Function Number: 2 +teamkilldelay() +{ + var_00 = self.pers["teamkills"]; + if(level.maxallowedteamkills < 0 || var_00 <= level.maxallowedteamkills) + { + return 0; + } + + var_01 = var_00 - level.maxallowedteamkills; + return maps\mp\gametypes\_tweakables::func_270D("team","teamkillspawndelay") * var_01; +} + +//Function Number: 3 +func_2B00(param_00) +{ + if((level.ingraceperiod && !self.hasspawned) || level.gameended) + { + return 0; + } + + var_01 = 0; + if(self.hasspawned) + { + var_02 = self [[ level.onrespawndelay ]](); + if(isdefined(var_02)) + { + var_01 = var_02; + } + else + { + var_01 = getdvarint("scr_" + level.gametype + "_playerrespawndelay"); + } + + if(param_00 && isdefined(self.pers["teamKillPunish"]) && self.pers["teamKillPunish"]) + { + var_01 = var_01 + teamkilldelay(); + } + + if(isdefined(self.respawntimerstarttime)) + { + var_03 = gettime() - self.respawntimerstarttime / 1000; + var_01 = var_01 - var_03; + if(var_01 < 0) + { + var_01 = 0; + } + } + + if(isdefined(self.setspawnpoint)) + { + var_01 = var_01 + level.tispawndelay; + } + } + + var_04 = getdvarint("scr_" + level.gametype + "_waverespawndelay") > 0; + if(var_04) + { + return func_2AF9(var_01); + } + + return var_01; +} + +//Function Number: 4 +mayspawn() +{ + if(maps\mp\_utility::getgametypenumlives() || isdefined(level.disablespawning)) + { + if(isdefined(level.disablespawning) && level.disablespawning) + { + return 0; + } + + if(isdefined(self.pers["teamKillPunish"]) && self.pers["teamKillPunish"]) + { + return 0; + } + + if(!self.pers["lives"] && maps\mp\_utility::gamehasstarted()) + { + return 0; + } + else if(maps\mp\_utility::gamehasstarted()) + { + if(!level.ingraceperiod && !self.hasspawned) + { + return 0; + } + } + } + + return 1; +} + +//Function Number: 5 +spawnclient() +{ + if(isdefined(self.var_2AF3)) + { + maps\mp\gametypes\_menus::func_2AF3(self.var_2AF3); + self.var_2AF3 = undefined; + } + + if(!mayspawn()) + { + var_00 = self.origin; + var_01 = self.angles; + self notify("attempted_spawn"); + if(isdefined(self.pers["teamKillPunish"]) && self.pers["teamKillPunish"]) + { + self.pers["teamkills"] = max(self.pers["teamkills"] - 1,0); + maps\mp\_utility::setlowermessage("friendly_fire",&"MP_FRIENDLY_FIRE_WILL_NOT"); + if(!self.hasspawned && self.pers["teamkills"] <= level.maxallowedteamkills) + { + self.pers["teamKillPunish"] = 0; + } + } + else if(maps\mp\_utility::func_26EC() && !maps\mp\_utility::func_2B08()) + { + maps\mp\_utility::setlowermessage("spawn_info",game["strings"]["spawn_next_round"]); + thread removespawnmessageshortly(3); + } + + if(self.sessionstate != "spectator") + { + var_00 = var_00 + (0,0,60); + } + + thread func_2AE9(var_00,var_01); + return; + } + + if(self.waitingtospawn) + { + return; + } + + self.waitingtospawn = 1; + func_2B0A(); + if(isdefined(self)) + { + self.waitingtospawn = 0; + } +} + +//Function Number: 6 +func_2B0A() +{ + self endon("disconnect"); + self endon("end_respawn"); + level endon("game_ended"); + self notify("attempted_spawn"); + var_00 = 0; + if(isdefined(self.pers["teamKillPunish"]) && self.pers["teamKillPunish"]) + { + var_01 = teamkilldelay(); + if(var_01 > 0) + { + maps\mp\_utility::setlowermessage("friendly_fire",&"MP_FRIENDLY_FIRE_WILL_NOT",var_01,1,1); + thread func_2B40(self.origin + (0,0,60),self.angles); + var_00 = 1; + wait var_01; + maps\mp\_utility::clearlowermessage("friendly_fire"); + self.respawntimerstarttime = gettime(); + } + + self.pers["teamKillPunish"] = 0; + } + else if(teamkilldelay()) + { + self.pers["teamkills"] = max(self.pers["teamkills"] - 1,0); + } + + if(maps\mp\_utility::isusingremote()) + { + self.spawningafterremotedeath = 1; + self waittill("stopped_using_remote"); + } + + if(!isdefined(self.wavespawnindex) && isdefined(level.waveplayerspawnindex[self.team])) + { + self.wavespawnindex = level.waveplayerspawnindex[self.team]; + level.waveplayerspawnindex[self.team]++; + } + + var_02 = func_2B00(0); + thread predictabouttospawnplayerovertime(var_02); + if(var_02 > 0) + { + maps\mp\_utility::setlowermessage("spawn_info",game["strings"]["waiting_to_spawn"],var_02,1,1); + if(!var_00) + { + thread func_2B40(self.origin + (0,0,60),self.angles); + } + + var_00 = 1; + maps\mp\_utility::func_2B0D(var_02,"force_spawn"); + self notify("stop_wait_safe_spawn_button"); + } + + var_03 = getdvarint("scr_" + level.gametype + "_waverespawndelay") > 0; + if(maps\mp\gametypes\_tweakables::func_270D("player","forcerespawn") == 0 && self.hasspawned && !var_03 && !self.wantsafespawn) + { + maps\mp\_utility::setlowermessage("spawn_info",game["strings"]["press_to_spawn"],undefined,undefined,undefined,undefined,undefined,undefined,1); + if(!var_00) + { + thread func_2B40(self.origin + (0,0,60),self.angles); + } + + var_00 = 1; + waitrespawnbutton(); + } + + self.waitingtospawn = 0; + maps\mp\_utility::clearlowermessage("spawn_info"); + self.wavespawnindex = undefined; + thread func_2B25(); +} + +//Function Number: 7 +waitrespawnbutton() +{ + self endon("disconnect"); + self endon("end_respawn"); + for(;;) + { + if(self usebuttonpressed()) + { + break; + } + + wait 0.05; + } +} + +//Function Number: 8 +removespawnmessageshortly(param_00) +{ + self endon("disconnect"); + level endon("game_ended"); + waittillframeend; + self endon("end_respawn"); + wait param_00; + maps\mp\_utility::clearlowermessage("spawn_info"); +} + +//Function Number: 9 +func_2B11() +{ + self laststandrevive(); + if(maps\mp\_utility::func_27AF("specialty_finalstand") && !level.diehardmode) + { + maps\mp\_utility::func_282E("specialty_finalstand"); + } + + if(level.diehardmode) + { + self.headicon = ""; + } + + self setstance("crouch"); + self.revived = 1; + self notify("revive"); + if(isdefined(self.standardmaxhealth)) + { + self.maxhealth = self.standardmaxhealth; + } + + self.health = self.maxhealth; + common_scripts\utility::_enableusability(); + if(game["state"] == "postgame") + { + maps\mp\gametypes\_gamelogic::freezeplayerforroundend(); + } +} + +//Function Number: 10 +func_2B16() +{ + var_00 = spawn("script_origin",self.origin); + var_00 hide(); + var_00.angles = self.angles; + return var_00; +} + +//Function Number: 11 +showspawnnotifies() +{ + if(isdefined(game["defcon"])) + { + thread maps\mp\gametypes\_hud_message::defconsplashnotify(game["defcon"],0); + } + + if(maps\mp\_utility::isrested()) + { + thread maps\mp\gametypes\_hud_message::func_2892("rested"); + } +} + +//Function Number: 12 +predictabouttospawnplayerovertime(param_00) +{ + self endon("disconnect"); + self endon("spawned"); + self endon("used_predicted_spawnpoint"); + self notify("predicting_about_to_spawn_player"); + self endon("predicting_about_to_spawn_player"); + if(param_00 <= 0) + { + return; + } + + if(param_00 > 1) + { + wait param_00 - 1; + } + + predictabouttospawnplayer(); + self predictstreampos(self.predictedspawnpoint.origin + (0,0,60),self.predictedspawnpoint.angles); + self.predictedspawnpointtime = gettime(); + for(var_01 = 0;var_01 < 30;var_01++) + { + wait 0.4; + var_02 = self.predictedspawnpoint; + predictabouttospawnplayer(); + if(self.predictedspawnpoint != var_02) + { + self predictstreampos(self.predictedspawnpoint.origin + (0,0,60),self.predictedspawnpoint.angles); + self.predictedspawnpointtime = gettime(); + } + } +} + +//Function Number: 13 +predictabouttospawnplayer() +{ + if(func_2B00(1) > 1) + { + var_00 = "mp_global_intermission"; + var_01 = getentarray(var_00,"classname"); + self.predictedspawnpoint = maps\mp\gametypes\_spawnlogic::getspawnpoint_random(var_01); + return; + } + + if(isdefined(self.setspawnpoint)) + { + self.predictedspawnpoint = self.setspawnpoint; + return; + } + + var_02 = self [[ level.getspawnpoint ]](); + self.predictedspawnpoint = var_02; +} + +//Function Number: 14 +checkpredictedspawnpointcorrectness(param_00) +{ + self notify("used_predicted_spawnpoint"); + self.predictedspawnpoint = undefined; +} + +//Function Number: 15 +percentage(param_00,param_01) +{ + return param_00 + " (" + int(param_00 / param_01 * 100) + "%)"; +} + +//Function Number: 16 +printpredictedspawnpointcorrectness() +{ +} + +//Function Number: 17 +func_2B22(param_00) +{ + if(!positionwouldtelefrag(param_00.origin)) + { + return param_00.origin; + } + + if(!isdefined(param_00.alternates)) + { + return param_00.origin; + } + + foreach(var_02 in param_00.alternates) + { + if(!positionwouldtelefrag(var_02)) + { + return var_02; + } + } + + return param_00.origin; +} + +//Function Number: 18 +func_2B24() +{ + if(!isdefined(self.setspawnpoint)) + { + return 0; + } + + var_00 = getentarray("care_package","targetname"); + foreach(var_02 in var_00) + { + if(distance(var_02.origin,self.setspawnpoint.playerspawnpos) > 64) + { + continue; + } + + if(isdefined(var_02.owner)) + { + maps\mp\gametypes\_hud_message::playercardsplashnotify("destroyed_insertion",var_02.owner); + } + + maps\mp\perks\_perkfunctions::func_2A63(self.setspawnpoint); + return 0; + } + + return 1; +} + +//Function Number: 19 +func_2B25(param_00) +{ + self endon("disconnect"); + self endon("joined_spectators"); + self notify("spawned"); + self notify("end_respawn"); + if(!isdefined(param_00)) + { + param_00 = 0; + } + + if(isdefined(self.setspawnpoint) && isdefined(self.setspawnpoint.notti) || func_2B24()) + { + var_01 = self.setspawnpoint; + if(!isdefined(self.setspawnpoint.notti)) + { + self playlocalsound("tactical_spawn"); + if(level.teambased) + { + self playsoundtoteam("tactical_spawn",level.otherteam[self.team]); + } + else + { + self playsound("tactical_spawn"); + } + } + + foreach(var_03 in level.ugvs) + { + if(distancesquared(var_03.origin,var_01.playerspawnpos) < 1024) + { + var_03 notify("damage",5000,var_03.owner,(0,0,0),(0,0,0),"MOD_EXPLOSIVE","","","",undefined,"killstreak_emp_mp"); + } + } + + var_05 = self.setspawnpoint.playerspawnpos; + var_06 = self.setspawnpoint.angles; + if(isdefined(self.setspawnpoint.enemytrigger)) + { + self.setspawnpoint.enemytrigger delete(); + } + + self.setspawnpoint delete(); + var_01 = undefined; + } + else + { + var_01 = self [[ level.getspawnpoint ]](); + var_05 = var_06.origin; + var_06 = var_05.angles; + } + + setspawnvariables(); + var_07 = self.hasspawned; + self.fauxdead = undefined; + if(!param_00) + { + self.killsthislife = []; + func_2B67("playing",""); + maps\mp\_utility::func_2B28(); + self.cancelkillcam = 1; + self openmenu("killedby_card_hide"); + self.maxhealth = maps\mp\gametypes\_tweakables::func_270D("player","maxhealth"); + self.health = self.maxhealth; + self.friendlydamage = undefined; + self.hasspawned = 1; + self.spawntime = gettime(); + self.wasti = !isdefined(var_01); + self.afk = 0; + self.damagedplayers = []; + self.killstreakscaler = 1; + self.xpscaler = 1; + self.objectivescaler = 1; + self.clampedhealth = undefined; + self.shielddamage = 0; + self.shieldbullethits = 0; + self.recentshieldxp = 0; + } + + self.movespeedscaler = 1; + self.inlaststand = 0; + self.laststand = undefined; + self.infinalstand = undefined; + self.inc4death = undefined; + self.disabledweapon = 0; + self.disabledweaponswitch = 0; + self.disabledoffhandweapons = 0; + common_scripts\utility::resetusability(); + if(!param_00) + { + self.avoidkillstreakonspawntimer = 5; + if(self.pers["lives"] == maps\mp\_utility::getgametypenumlives()) + { + func_2B7B(); + } + + if(self.pers["lives"]) + { + self.pers["lives"]--; + } + + addtoalivecount(); + if(!var_07 || maps\mp\_utility::gamehasstarted() || maps\mp\_utility::gamehasstarted() && level.ingraceperiod && self.hasdonecombat) + { + removefromlivescount(); + } + + if(!self.wasaliveatmatchstart) + { + var_08 = 20; + if(maps\mp\_utility::gettimelimit() > 0 && var_08 < maps\mp\_utility::gettimelimit() * 60 / 4) + { + var_08 = maps\mp\_utility::gettimelimit() * 60 / 4; + } + + if(level.ingraceperiod || maps\mp\_utility::gettimepassed() < var_08 * 1000) + { + self.wasaliveatmatchstart = 1; + } + } + } + + self setclientdvar("cg_thirdPerson","0"); + self setdepthoffield(0,0,512,512,4,0); + self setclientdvar("cg_fov","65"); + if(isdefined(var_01)) + { + maps\mp\gametypes\_spawnlogic::finalizespawnpointchoice(var_01); + var_05 = func_2B22(var_01); + var_06 = var_01.angles; + } + else + { + self.lastspawntime = gettime(); + } + + self.spawnpos = var_05; + self spawn(var_05,var_06); + if(param_00 && isdefined(self.faux_spawn_stance)) + { + self setstance(self.faux_spawn_stance); + self.faux_spawn_stance = undefined; + } + + [[ level.onspawnplayer ]](); + if(isdefined(var_01)) + { + checkpredictedspawnpointcorrectness(var_01.origin); + } + + if(!param_00) + { + maps\mp\gametypes\_missions::playerspawned(); + } + + maps\mp\gametypes\_class::func_2AEE(self.class); + maps\mp\gametypes\_class::func_2A52(self.team,self.class); + if(getdvarint("camera_thirdPerson")) + { + maps\mp\_utility::setthirdpersondof(1); + } + + if(!maps\mp\_utility::gameflag("prematch_done")) + { + maps\mp\_utility::freezecontrolswrapper(1); + } + else + { + maps\mp\_utility::freezecontrolswrapper(0); + } + + if(!maps\mp\_utility::gameflag("prematch_done") || !var_07 && game["state"] == "playing") + { + self setclientdvar("scr_objectiveText",maps\mp\_utility::func_2B3B(self.pers["team"])); + var_09 = self.pers["team"]; + if(game["status"] == "overtime") + { + thread maps\mp\gametypes\_hud_message::oldnotifymessage(game["strings"]["overtime"],game["strings"]["overtime_hint"],undefined,(1,0,0),"mp_last_stand"); + } + else if(maps\mp\_utility::getintproperty("useRelativeTeamColors",0)) + { + thread maps\mp\gametypes\_hud_message::oldnotifymessage(game["strings"][var_09 + "_name"],undefined,game["icons"][var_09] + "_blue",game["colors"]["blue"]); + } + else + { + thread maps\mp\gametypes\_hud_message::oldnotifymessage(game["strings"][var_09 + "_name"],undefined,game["icons"][var_09],game["colors"][var_09]); + } + + thread showspawnnotifies(); + } + + if(maps\mp\_utility::getintproperty("scr_showperksonspawn",1) == 1 && game["state"] != "postgame") + { + self openmenu("perk_display"); + thread func_2B3D(4); + thread hideperksondeath(); + } + + waittillframeend; + self.spawningafterremotedeath = undefined; + self notify("spawned_player"); + level notify("player_spawned",self); + if(game["state"] == "postgame") + { + maps\mp\gametypes\_gamelogic::freezeplayerforroundend(); + } +} + +//Function Number: 20 +func_2B3D(param_00) +{ + self endon("disconnect"); + self endon("perks_hidden"); + wait param_00; + self openmenu("perk_hide"); + self notify("perks_hidden"); +} + +//Function Number: 21 +hideperksondeath() +{ + self endon("disconnect"); + self endon("perks_hidden"); + self waittill("death"); + self openmenu("perk_hide"); + self notify("perks_hidden"); +} + +//Function Number: 22 +hideperksonkill() +{ + self endon("disconnect"); + self endon("death"); + self endon("perks_hidden"); + self waittill("killed_player"); + self openmenu("perk_hide"); + self notify("perks_hidden"); +} + +//Function Number: 23 +func_2AE9(param_00,param_01) +{ + self notify("spawned"); + self notify("end_respawn"); + self notify("joined_spectators"); + in_spawnspectator(param_00,param_01); +} + +//Function Number: 24 +func_2B40(param_00,param_01) +{ + in_spawnspectator(param_00,param_01); +} + +//Function Number: 25 +in_spawnspectator(param_00,param_01) +{ + setspawnvariables(); + if(isdefined(self.pers["team"]) && self.pers["team"] == "spectator" && !level.gameended) + { + maps\mp\_utility::clearlowermessage("spawn_info"); + } + + self.sessionstate = "spectator"; + maps\mp\_utility::func_2B28(); + self.friendlydamage = undefined; + if(isdefined(self.pers["team"]) && self.pers["team"] == "spectator") + { + self.statusicon = ""; + } + else + { + self.statusicon = "hud_status_dead"; + } + + maps\mp\gametypes\_spectating::setspectatepermissions(); + onspawnspectator(param_00,param_01); + if(level.teambased && !level.splitscreen && !self issplitscreenplayer()) + { + self setdepthoffield(0,128,512,4000,6,1.8); + } +} + +//Function Number: 26 +getplayerfromclientnum(param_00) +{ + if(param_00 < 0) + { + return undefined; + } + + for(var_01 = 0;var_01 < level.players.size;var_01++) + { + if(level.players[var_01] getentitynumber() == param_00) + { + return level.players[var_01]; + } + } + + return undefined; +} + +//Function Number: 27 +onspawnspectator(param_00,param_01) +{ + if(isdefined(param_00) && isdefined(param_01)) + { + self setspectatedefaults(param_00,param_01); + self spawn(param_00,param_01); + checkpredictedspawnpointcorrectness(param_00); + return; + } + + var_02 = "mp_global_intermission"; + var_03 = getentarray(var_02,"classname"); + var_04 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random(var_03); + self setspectatedefaults(var_04.origin,var_04.angles); + self spawn(var_04.origin,var_04.angles); + checkpredictedspawnpointcorrectness(var_04.origin); +} + +//Function Number: 28 +spawnintermission() +{ + self endon("disconnect"); + self notify("spawned"); + self notify("end_respawn"); + setspawnvariables(); + self closepopupmenu(); + self closeingamemenu(); + maps\mp\_utility::func_2B45(); + maps\mp\_utility::freezecontrolswrapper(1); + self setclientdvar("cg_everyoneHearsEveryone",1); + if(level.rankedmatch && self.postgamepromotion || self.pers["postGameChallenges"]) + { + if(self.postgamepromotion) + { + self playlocalsound("mp_level_up"); + } + else + { + self playlocalsound("mp_challenge_complete"); + } + + if(self.postgamepromotion > level.postgamenotifies) + { + level.postgamenotifies = 1; + } + + if(self.pers["postGameChallenges"] > level.postgamenotifies) + { + level.postgamenotifies = self.pers["postGameChallenges"]; + } + + self closepopupmenu(); + self closeingamemenu(); + self openmenu(game["menu_endgameupdate"]); + var_00 = 4 + min(self.pers["postGameChallenges"],3); + while(var_00) + { + wait 0.25; + var_00 = var_00 - 0.25; + self openmenu(game["menu_endgameupdate"]); + } + + self closemenu(game["menu_endgameupdate"]); + } + + self.sessionstate = "intermission"; + maps\mp\_utility::func_2B28(); + self.friendlydamage = undefined; + var_01 = getentarray("mp_global_intermission","classname"); + var_02 = var_01[0]; + self spawn(var_02.origin,var_02.angles); + checkpredictedspawnpointcorrectness(var_02.origin); + self setdepthoffield(0,128,512,4000,6,1.8); +} + +//Function Number: 29 +spawnendofgame() +{ + if(1) + { + maps\mp\_utility::freezecontrolswrapper(1); + func_2AE9(); + maps\mp\_utility::freezecontrolswrapper(1); + return; + } + + self notify("spawned"); + self notify("end_respawn"); + setspawnvariables(); + self closepopupmenu(); + self closeingamemenu(); + maps\mp\_utility::func_2B45(); + self setclientdvar("cg_everyoneHearsEveryone",1); + self.sessionstate = "dead"; + maps\mp\_utility::func_2B28(); + self.friendlydamage = undefined; + var_00 = getentarray("mp_global_intermission","classname"); + var_01 = var_00[0]; + self spawn(var_01.origin,var_01.angles); + checkpredictedspawnpointcorrectness(var_01.origin); + var_01 setmodel("tag_origin"); + self playerlinkto(var_01); + self playerhide(); + maps\mp\_utility::freezecontrolswrapper(1); + self setdepthoffield(0,128,512,4000,6,1.8); +} + +//Function Number: 30 +setspawnvariables() +{ + self stopshellshock(); + self stoprumble("damage_heavy"); +} + +//Function Number: 31 +notifyconnecting() +{ + waittillframeend; + if(isdefined(self)) + { + level notify("connecting",self); + } +} + +//Function Number: 32 +func_2B4B() +{ + if(!isdefined(self.connected)) + { + return; + } + + var_00 = getmatchdata("gameLength"); + var_00 = var_00 + int(maps\mp\_utility::func_2D00()); + setmatchdata("players",self.clientid,"disconnectTime",var_00); + if(isdefined(self.pers["confirmed"])) + { + maps\mp\_matchdata::func_80EF(); + } + + if(isdefined(self.pers["denied"])) + { + maps\mp\_matchdata::func_80F0(); + } + + func_2B4D(); + if(!level.teambased) + { + game["roundsWon"][self.guid] = undefined; + } + + if(level.splitscreen) + { + var_01 = level.players; + if(var_01.size <= 1) + { + level thread maps\mp\gametypes\_gamelogic::forceend(); + } + } + + if(isdefined(self.score) && isdefined(self.pers["team"])) + { + setplayerteamrank(self,self.clientid,self.score - 5 * self.deaths); + } + + var_02 = self getentitynumber(); + var_03 = self.guid; + logprint("Q;" + var_03 + ";" + var_02 + ";" + self.name + "\n"); + thread maps\mp\_events::func_2AC3(); + if(level.gameended) + { + maps\mp\gametypes\_gamescore::func_26F3(); + } + + if(isdefined(self.team)) + { + removefromteamcount(); + } + + if(self.sessionstate == "playing") + { + removefromalivecount(1); + return; + } + + if(self.sessionstate == "spectator" || self.sessionstate == "dead") + { + level thread maps\mp\gametypes\_gamelogic::func_2734(); + } +} + +//Function Number: 33 +func_2B4D() +{ + var_00 = 0; + for(var_01 = 0;var_01 < level.players.size;var_01++) + { + if(level.players[var_01] == self) + { + var_00 = 1; + while(var_01 < level.players.size - 1) + { + level.players[var_01] = level.players[var_01 + 1]; + var_01++; + } + + level.players[var_01] = undefined; + break; + } + } +} + +//Function Number: 34 +initclientdvarssplitscreenspecific() +{ + if(level.splitscreen || self issplitscreenplayer()) + { + self setclientdvars("cg_hudGrenadeIconHeight","37.5","cg_hudGrenadeIconWidth","37.5","cg_hudGrenadeIconOffset","75","cg_hudGrenadePointerHeight","18","cg_hudGrenadePointerWidth","37.5","cg_hudGrenadePointerPivot","18 40.5","cg_fovscale","0.75"); + return; + } + + self setclientdvars("cg_hudGrenadeIconHeight","25","cg_hudGrenadeIconWidth","25","cg_hudGrenadeIconOffset","50","cg_hudGrenadePointerHeight","12","cg_hudGrenadePointerWidth","25","cg_hudGrenadePointerPivot","12 27","cg_fovscale","1"); +} + +//Function Number: 35 +func_2B4E() +{ + makedvarserverinfo("cg_drawTalk",1); + makedvarserverinfo("cg_drawCrosshair",1); + makedvarserverinfo("cg_drawCrosshairNames",1); + makedvarserverinfo("cg_hudGrenadeIconMaxRangeFrag",250); + if(level.hardcoremode) + { + setdvar("cg_drawTalk",3); + setdvar("cg_drawCrosshair",0); + setdvar("cg_drawCrosshairNames",1); + setdvar("cg_hudGrenadeIconMaxRangeFrag",0); + } + + self setclientdvars("cg_drawSpectatorMessages",1,"g_compassShowEnemies",getdvar("scr_game_forceuav"),"cg_scoreboardPingGraph",1); + initclientdvarssplitscreenspecific(); + if(maps\mp\_utility::getgametypenumlives()) + { + self setclientdvars("cg_deadChatWithDead",1,"cg_deadChatWithTeam",0,"cg_deadHearTeamLiving",0,"cg_deadHearAllLiving",0); + } + else + { + self setclientdvars("cg_deadChatWithDead",0,"cg_deadChatWithTeam",1,"cg_deadHearTeamLiving",1,"cg_deadHearAllLiving",0); + } + + if(level.teambased) + { + self setclientdvars("cg_everyonehearseveryone",0); + } + + self setclientdvar("ui_altscene",0); + if(getdvarint("scr_hitloc_debug")) + { + for(var_00 = 0;var_00 < 6;var_00++) + { + self setclientdvar("ui_hitloc_" + var_00,""); + } + + self.hitlocinited = 1; + } +} + +//Function Number: 36 +func_2B50() +{ + var_00 = 0; + for(var_01 = 0;var_01 < 30;var_01++) + { + foreach(var_03 in level.players) + { + if(!isdefined(var_03)) + { + continue; + } + + if(var_03.clientid == var_01) + { + var_00 = 1; + break; + } + + var_00 = 0; + } + + if(!var_00) + { + return var_01; + } + } +} + +//Function Number: 37 +callback_playerconnect() +{ + thread notifyconnecting(); + self.statusicon = "hud_status_connecting"; + self waittill("begin"); + self.statusicon = ""; + var_00 = undefined; + level notify("connected",self); + self.connected = 1; + if(self ishost()) + { + level.player = self; + } + + if(!level.splitscreen && !isdefined(self.pers["score"])) + { + iprintln(&"MP_CONNECTED",self); + } + + self.usingonlinedataoffline = self isusingonlinedataoffline(); + func_2B4E(); + initplayerstats(); + if(getdvar("r_reflectionProbeGenerate") == "1") + { + level waittill("eternity"); + } + + self.guid = self getguid(); + var_01 = 0; + if(!isdefined(self.pers["clientid"])) + { + if(game["clientid"] >= 30) + { + self.pers["clientid"] = func_2B50(); + } + else + { + self.pers["clientid"] = game["clientid"]; + } + + if(game["clientid"] < 30) + { + game["clientid"]++; + } + + var_01 = 1; + } + + if(var_01) + { + maps\mp\killstreaks\_killstreaks::resetadrenaline(); + } + + self.clientid = self.pers["clientid"]; + self.pers["teamKillPunish"] = 0; + logprint("J;" + self.guid + ";" + self getentitynumber() + ";" + self.name + "\n"); + if(game["clientid"] <= 30 && game["clientid"] != getmatchdata("playerCount")) + { + var_02 = 0; + var_03 = 0; + setmatchdata("playerCount",game["clientid"]); + setmatchdata("players",self.clientid,"xuid",self getxuid()); + setmatchdata("players",self.clientid,"gamertag",self.name); + var_03 = self getplayerdata("connectionIDChunkLow"); + var_02 = self getplayerdata("connectionIDChunkHigh"); + setmatchdata("players",self.clientid,"connectionIDChunkLow",var_03); + setmatchdata("players",self.clientid,"connectionIDChunkHigh",var_02); + setmatchclientip(self,self.clientid); + var_04 = getmatchdata("gameLength"); + var_04 = var_04 + int(maps\mp\_utility::func_2D00()); + setmatchdata("players",self.clientid,"connectTime",var_04); + setmatchdata("players",self.clientid,"startXp",self getplayerdata("experience")); + if(maps\mp\_utility::matchmakinggame() && maps\mp\_utility::allowteamchoice()) + { + setmatchdata("players",self.clientid,"team",self.sessionteam); + } + } + + if(!level.teambased) + { + game["roundsWon"][self.guid] = 0; + } + + self.leaderdialogqueue = []; + self.leaderdialogactive = ""; + self.leaderdialoggroups = []; + self.leaderdialoggroup = ""; + if(!isdefined(self.pers["cur_kill_streak"])) + { + self.pers["cur_kill_streak"] = 0; + } + + if(!isdefined(self.pers["cur_death_streak"])) + { + self.pers["cur_death_streak"] = 0; + } + + if(!isdefined(self.pers["assistsToKill"])) + { + self.pers["assistsToKill"] = 0; + } + + if(!isdefined(self.pers["cur_kill_streak_for_nuke"])) + { + self.pers["cur_kill_streak_for_nuke"] = 0; + } + + self.kill_streak = maps\mp\gametypes\_persistence::func_2B58("killStreak"); + self.lastgrenadesuicidetime = -1; + self.teamkillsthisround = 0; + self.hasspawned = 0; + self.waitingtospawn = 0; + self.wantsafespawn = 0; + self.wasaliveatmatchstart = 0; + self.movespeedscaler = 1; + self.killstreakscaler = 1; + self.xpscaler = 1; + self.objectivescaler = 1; + self.issniper = 0; + self.saved_actionslotdata = []; + func_2B63(); + for(var_05 = 1;var_05 <= 4;var_05++) + { + self.saved_actionslotdata[var_05] = spawnstruct(); + self.saved_actionslotdata[var_05].type = ""; + self.saved_actionslotdata[var_05].item = undefined; + } + + if(!level.console) + { + for(var_05 = 5;var_05 <= 8;var_05++) + { + self.saved_actionslotdata[var_05] = spawnstruct(); + self.saved_actionslotdata[var_05].type = ""; + self.saved_actionslotdata[var_05].item = undefined; + } + } + + thread maps\mp\_flashgrenades::monitorflash(); + waittillframeend; + level.players[level.players.size] = self; + if(level.teambased) + { + self updatescores(); + } + + if(game["state"] == "postgame") + { + self.connectedpostgame = 1; + if(maps\mp\_utility::matchmakinggame()) + { + maps\mp\gametypes\_menus::func_2AF3(maps\mp\gametypes\_menus::getteamassignment(),1); + } + else + { + maps\mp\gametypes\_menus::func_2AF3("spectator",1); + } + + self setclientdvars("cg_drawSpectatorMessages",0); + spawnintermission(); + return; + } + + level endon("game_ended"); + if(isdefined(level.hostmigrationtimer)) + { + thread maps\mp\gametypes\_hostmigration::func_273D(); + } + + if(isdefined(level.onplayerconnectaudioinit)) + { + [[ level.onplayerconnectaudioinit ]](); + } + + if(!isdefined(self.pers["team"])) + { + if(maps\mp\_utility::matchmakinggame()) + { + thread func_2AE9(); + self [[ level.autoassign ]](); + thread kickifdontspawn(); + return; + } + + if(maps\mp\_utility::allowteamchoice()) + { + self [[ level.spectator ]](); + maps\mp\gametypes\_menus::func_2AE3(); + return; + } + + self [[ level.spectator ]](); + self [[ level.autoassign ]](); + return; + } + + maps\mp\gametypes\_menus::func_2AF3(self.pers["team"],1); + if(maps\mp\_utility::func_2B5F(self.pers["class"])) + { + thread spawnclient(); + return; + } + + thread func_2AE9(); + if(self.pers["team"] == "spectator") + { + if(maps\mp\_utility::allowteamchoice()) + { + maps\mp\gametypes\_menus::func_2AE3(); + return; + } + + self [[ level.autoassign ]](); + return; + } + + maps\mp\gametypes\_menus::beginclasschoice(); +} + +//Function Number: 38 +callback_playermigrated() +{ + if(isdefined(self.connected) && self.connected) + { + maps\mp\_utility::updateobjectivetext(); + maps\mp\_utility::func_2AF8(); + if(level.teambased) + { + self updatescores(); + } + } + + if(self ishost()) + { + initclientdvarssplitscreenspecific(); + } + + level.hostmigrationreturnedplayercount++; + if(level.hostmigrationreturnedplayercount >= level.players.size * 2 / 3) + { + level notify("hostmigration_enoughplayers"); + } +} + +//Function Number: 39 +func_2B61(param_00,param_01) +{ + var_02 = maps\mp\gametypes\_rank::getrankforxp(param_00); + var_03 = maps\mp\gametypes\_rank::getrankinfominxp(var_02); + var_04 = maps\mp\gametypes\_rank::getrankinfomaxxp(var_02); + var_02 = var_02 + param_00 - var_03 / var_04 - var_03; + var_02 = var_02 + param_01; + if(var_02 < 0) + { + var_02 = 0; + var_05 = 0; + } + else if(var_03 >= level.maxrank + 1) + { + var_03 = level.maxrank; + var_05 = 1; + } + else + { + var_05 = var_03 - floor(var_03); + var_02 = int(floor(var_02)); + } + + var_03 = maps\mp\gametypes\_rank::getrankinfominxp(var_02); + var_04 = maps\mp\gametypes\_rank::getrankinfomaxxp(var_02); + return int(var_05 * var_04 - var_03) + var_03; +} + +//Function Number: 40 +getrestxpcap(param_00) +{ + var_01 = getdvarfloat("scr_restxp_cap"); + return func_2B61(param_00,var_01); +} + +//Function Number: 41 +func_2B63() +{ + if(!getdvarint("scr_restxp_enable")) + { + self setplayerdata("restXPGoal",0); + return; + } + + var_00 = self getrestedtime(); + var_01 = var_00 / 3600; + var_02 = self getplayerdata("experience"); + var_03 = getdvarfloat("scr_restxp_minRestTime"); + var_04 = getdvarfloat("scr_restxp_levelsPerDay") / 24; + var_05 = getrestxpcap(var_02); + var_06 = self getplayerdata("restXPGoal"); + if(var_06 < var_02) + { + var_06 = var_02; + } + + var_07 = var_06; + var_08 = 0; + if(var_01 > var_03) + { + var_08 = var_04 * var_01; + var_06 = func_2B61(var_06,var_08); + } + + var_09 = ""; + if(var_06 >= var_05) + { + var_06 = var_05; + var_09 = " (hit cap)"; + } + + self setplayerdata("restXPGoal",var_06); +} + +//Function Number: 42 +func_2B64() +{ + self endon("death"); + self endon("disconnect"); + self endon("spawned"); + wait 60; + if(self.hasspawned) + { + return; + } + + if(self.pers["team"] == "spectator") + { + return; + } + + if(!maps\mp\_utility::func_2B5F(self.pers["class"])) + { + self.pers["class"] = "CLASS_CUSTOM1"; + self.class = self.pers["class"]; + } + + maps\mp\_utility::closemenus(); + thread spawnclient(); +} + +//Function Number: 43 +kickifdontspawn() +{ + self endon("death"); + self endon("disconnect"); + self endon("spawned"); + self endon("attempted_spawn"); + var_00 = getdvarfloat("scr_kick_time",90); + var_01 = getdvarfloat("scr_kick_mintime",45); + var_02 = gettime(); + if(self ishost()) + { + kickwait(120); + } + else + { + kickwait(var_00); + } + + var_03 = gettime() - var_02 / 1000; + if(var_03 < var_00 - 0.1 && var_03 < var_01) + { + return; + } + + if(self.hasspawned) + { + return; + } + + if(self.pers["team"] == "spectator") + { + return; + } + + kick(self getentitynumber(),"EXE_PLAYERKICKED_INACTIVE"); + level thread maps\mp\gametypes\_gamelogic::func_2734(); +} + +//Function Number: 44 +kickwait(param_00) +{ + level endon("game_ended"); + maps\mp\gametypes\_hostmigration::func_2740(param_00); +} + +//Function Number: 45 +func_2B67(param_00,param_01) +{ + self.sessionstate = param_00; + self.statusicon = param_01; +} + +//Function Number: 46 +initplayerstats() +{ + maps\mp\gametypes\_persistence::initbufferedstats(); + self.pers["lives"] = maps\mp\_utility::getgametypenumlives(); + if(!isdefined(self.pers["deaths"])) + { + maps\mp\_utility::initpersstat("deaths"); + maps\mp\gametypes\_persistence::func_26D8("round","deaths",0); + } + + self.deaths = maps\mp\_utility::getpersstat("deaths"); + if(!isdefined(self.pers["score"])) + { + maps\mp\_utility::initpersstat("score"); + maps\mp\gametypes\_persistence::func_26D8("round","score",0); + } + + self.score = maps\mp\_utility::getpersstat("score"); + if(!isdefined(self.pers["suicides"])) + { + maps\mp\_utility::initpersstat("suicides"); + } + + self.suicides = maps\mp\_utility::getpersstat("suicides"); + if(!isdefined(self.pers["kills"])) + { + maps\mp\_utility::initpersstat("kills"); + maps\mp\gametypes\_persistence::func_26D8("round","kills",0); + } + + self.kills = maps\mp\_utility::getpersstat("kills"); + if(!isdefined(self.pers["headshots"])) + { + maps\mp\_utility::initpersstat("headshots"); + } + + self.headshots = maps\mp\_utility::getpersstat("headshots"); + if(!isdefined(self.pers["assists"])) + { + maps\mp\_utility::initpersstat("assists"); + maps\mp\gametypes\_persistence::func_26D8("round","assists",0); + } + + self.assists = maps\mp\_utility::getpersstat("assists"); + if(!isdefined(self.pers["captures"])) + { + maps\mp\_utility::initpersstat("captures"); + maps\mp\gametypes\_persistence::func_26D8("round","captures",0); + } + + self.var_2B6D = maps\mp\_utility::getpersstat("captures"); + if(!isdefined(self.pers["returns"])) + { + maps\mp\_utility::initpersstat("returns"); + maps\mp\gametypes\_persistence::func_26D8("round","returns",0); + } + + self.var_2B6E = maps\mp\_utility::getpersstat("returns"); + if(!isdefined(self.pers["defends"])) + { + maps\mp\_utility::initpersstat("defends"); + maps\mp\gametypes\_persistence::func_26D8("round","defends",0); + } + + self.var_2B6F = maps\mp\_utility::getpersstat("defends"); + if(!isdefined(self.pers["plants"])) + { + maps\mp\_utility::initpersstat("plants"); + maps\mp\gametypes\_persistence::func_26D8("round","plants",0); + } + + self.var_2B70 = maps\mp\_utility::getpersstat("plants"); + if(!isdefined(self.pers["defuses"])) + { + maps\mp\_utility::initpersstat("defuses"); + maps\mp\gametypes\_persistence::func_26D8("round","defuses",0); + } + + self.var_2B71 = maps\mp\_utility::getpersstat("defuses"); + if(!isdefined(self.pers["destructions"])) + { + maps\mp\_utility::initpersstat("destructions"); + maps\mp\gametypes\_persistence::func_26D8("round","destructions",0); + } + + self.var_2B72 = maps\mp\_utility::getpersstat("destructions"); + if(!isdefined(self.pers["confirmed"])) + { + maps\mp\_utility::initpersstat("confirmed"); + maps\mp\gametypes\_persistence::func_26D8("round","confirmed",0); + } + + self.var_2B73 = maps\mp\_utility::getpersstat("confirmed"); + if(!isdefined(self.pers["denied"])) + { + maps\mp\_utility::initpersstat("denied"); + maps\mp\gametypes\_persistence::func_26D8("round","denied",0); + } + + self.var_2B74 = maps\mp\_utility::getpersstat("denied"); + if(!isdefined(self.pers["teamkills"])) + { + maps\mp\_utility::initpersstat("teamkills"); + } + + if(!isdefined(self.pers["teamKillPunish"])) + { + self.pers["teamKillPunish"] = 0; + } + + maps\mp\_utility::initpersstat("longestStreak"); + self.pers["lives"] = maps\mp\_utility::getgametypenumlives(); + maps\mp\gametypes\_persistence::func_26D8("round","killStreak",0); + maps\mp\gametypes\_persistence::func_26D8("round","loss",0); + maps\mp\gametypes\_persistence::func_26D8("round","win",0); + maps\mp\gametypes\_persistence::func_26D8("round","scoreboardType","none"); + maps\mp\gametypes\_persistence::statsetchildbuffered("round","timePlayed",0); +} + +//Function Number: 47 +addtoteamcount() +{ + level.teamcount[self.team]++; + maps\mp\gametypes\_gamelogic::func_2734(); +} + +//Function Number: 48 +removefromteamcount() +{ + level.teamcount[self.team]--; +} + +//Function Number: 49 +addtoalivecount() +{ + level.alivecount[self.team]++; + level.hasspawned[self.team]++; + if(level.alivecount["allies"] + level.alivecount["axis"] > level.maxplayercount) + { + level.maxplayercount = level.alivecount["allies"] + level.alivecount["axis"]; + } +} + +//Function Number: 50 +removefromalivecount(param_00) +{ + if(isdefined(self.switching_teams) || isdefined(param_00)) + { + func_2B7E(); + if(isdefined(self.switching_teams)) + { + self.pers["lives"] = 0; + } + } + + level.alivecount[self.team]--; + return maps\mp\gametypes\_gamelogic::func_2734(); +} + +//Function Number: 51 +func_2B7B() +{ + level.livescount[self.team] = level.livescount[self.team] + self.pers["lives"]; +} + +//Function Number: 52 +removefromlivescount() +{ + level.livescount[self.team]--; + level.livescount[self.team] = int(max(0,level.livescount[self.team])); +} + +//Function Number: 53 +func_2B7E() +{ + level.livescount[self.team] = level.livescount[self.team] - self.pers["lives"]; + level.livescount[self.team] = int(max(0,level.livescount[self.team])); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/gametypes/_portable_radar.gsc b/MW3/Xbox/MP/maps/mp/gametypes/_portable_radar.gsc new file mode 100644 index 0000000..9b29fd9 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/gametypes/_portable_radar.gsc @@ -0,0 +1,253 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_portable_radar.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 10 + * Decompile Time: 154 ms + * Timestamp: 10/27/2023 2:25:46 AM +*******************************************************************/ + +//Function Number: 1 +setportableradar() +{ + self setoffhandsecondaryclass("flash"); + maps\mp\_utility::_giveweapon("portable_radar_mp",0); + self givestartammo("portable_radar_mp"); + thread monitorportableradaruse(); +} + +//Function Number: 2 +unsetportableradar() +{ + self notify("end_monitorPortableRadarUse"); +} + +//Function Number: 3 +deleteportableradar(param_00) +{ + if(!isdefined(param_00)) + { + return; + } + + foreach(var_02 in level.players) + { + if(isdefined(var_02)) + { + var_02.inplayerportableradar = undefined; + } + } + + param_00 notify("death"); + param_00 delete(); + self.deployedportableradar = undefined; +} + +//Function Number: 4 +monitorportableradaruse() +{ + self notify("end_monitorPortableRadarUse"); + self endon("end_monitorPortableRadarUse"); + self endon("disconnect"); + level endon("game_ended"); + for(;;) + { + self waittill("grenade_fire",var_00,var_01); + if(var_01 == "portabl_radar" || var_01 == "portable_radar_mp") + { + if(!isalive(self)) + { + var_00 delete(); + return; + } + + if(isdefined(self.deployedportableradar)) + { + deleteportableradar(self.deployedportableradar); + } + + var_00 waittill("missile_stuck"); + var_02 = var_00.origin; + if(isdefined(var_00)) + { + var_00 delete(); + } + + var_03 = spawn("script_model",var_02); + var_03.health = 100; + var_03.team = self.team; + var_03.owner = self; + var_03 setcandamage(1); + var_03 makeportableradar(self); + var_03 portableradarsetup(self); + var_03 thread maps\mp\gametypes\_weapons::createbombsquadmodel("weapon_radar_bombsquad","tag_origin",level.otherteam[self.team],self); + var_03 thread func_291A(); + thread func_2916(var_03); + self.deployedportableradar = var_03; + } + } +} + +//Function Number: 5 +portableradarsetup(param_00) +{ + self setmodel("weapon_radar"); + if(level.teambased) + { + maps\mp\_entityheadicons::setteamheadicon(self.team,(0,0,20)); + } + else + { + maps\mp\_entityheadicons::setplayerheadicon(param_00,(0,0,20)); + } + + thread portableradardamagelistener(param_00); + thread portableradaruselistener(param_00); + thread portableradarbeepsounds(); + thread maps\mp\_utility::notusableforjoiningplayers(param_00); +} + +//Function Number: 6 +func_2916(param_00) +{ + param_00 endon("death"); + level endon("game_ended"); + common_scripts\utility::waittill_any("disconnect","joined_team","joined_spectators","spawned_player"); + level thread deleteportableradar(param_00); +} + +//Function Number: 7 +portableradarbeepsounds() +{ + self endon("death"); + level endon("game_ended"); + for(;;) + { + wait 2; + self playsound("sentry_gun_beep"); + } +} + +//Function Number: 8 +portableradardamagelistener(param_00) +{ + self endon("death"); + self.health = 999999; + self.maxhealth = 100; + self.damagetaken = 0; + for(;;) + { + self waittill("damage",var_01,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09,var_0A); + if(!maps\mp\gametypes\_weapons::func_27A1(self.owner,var_02)) + { + continue; + } + + if(isdefined(var_0A)) + { + switch(var_0A) + { + case "concussion_grenade_mp": + case "flash_grenade_mp": + case "smoke_grenade_mp": + break; + } + } + + if(!isdefined(self)) + { + return; + } + + if(var_05 == "MOD_MELEE") + { + self.damagetaken = self.damagetaken + self.maxhealth; + } + + if(isdefined(var_09) && var_09 & level.idflags_penetration) + { + self.wasdamagedfrombulletpenetration = 1; + } + + self.wasdamaged = 1; + self.damagetaken = self.damagetaken + var_01; + if(isdefined(var_0A) && var_0A == "emp_grenade_mp") + { + self.damagetaken = self.maxhealth + 1; + } + + if(isplayer(var_02)) + { + var_02 maps\mp\gametypes\_damagefeedback::updatedamagefeedback("portable_radar"); + } + + if(self.damagetaken >= self.maxhealth) + { + if(isdefined(param_00) && var_02 != param_00) + { + var_02 notify("destroyed_explosive"); + } + + self playsound("sentry_explode"); + self.deatheffect = playfx(common_scripts\utility::func_539("equipment_explode"),self.origin); + var_02 thread deleteportableradar(self); + } + } +} + +//Function Number: 9 +portableradaruselistener(param_00) +{ + self endon("death"); + level endon("game_ended"); + param_00 endon("disconnect"); + self setcursorhint("HINT_NOICON"); + self sethintstring(&"MP_PATCH_PICKUP_PORTABLE_RADAR"); + maps\mp\_utility::setselfusable(param_00); + for(;;) + { + self waittill("trigger",var_01); + var_01 playlocalsound("scavenger_pack_pickup"); + if(var_01 getammocount("portable_radar_mp") == 0) + { + var_01 setportableradar(); + } + + var_01 thread deleteportableradar(self); + } +} + +//Function Number: 10 +func_291A() +{ + self endon("death"); + level endon("game_ended"); + var_00 = 512; + for(;;) + { + foreach(var_02 in level.players) + { + if(!isdefined(var_02)) + { + continue; + } + + if(level.teambased && var_02.team == self.team) + { + continue; + } + + var_03 = distancesquared(self.origin,var_02.origin); + if(distancesquared(var_02.origin,self.origin) < var_00 * var_00) + { + var_02.inplayerportableradar = self.owner; + continue; + } + + var_02.inplayerportableradar = undefined; + } + + wait 0.05; + } +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/gametypes/_quickmessages.gsc b/MW3/Xbox/MP/maps/mp/gametypes/_quickmessages.gsc new file mode 100644 index 0000000..0078681 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/gametypes/_quickmessages.gsc @@ -0,0 +1,270 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_quickmessages.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 7 + * Decompile Time: 96 ms + * Timestamp: 10/27/2023 2:25:47 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + game["menu_quickcommands"] = "quickcommands"; + game["menu_quickstatements"] = "quickstatements"; + game["menu_quickresponses"] = "quickresponses"; + precachemenu(game["menu_quickcommands"]); + precachemenu(game["menu_quickstatements"]); + precachemenu(game["menu_quickresponses"]); + precacheheadicon("talkingicon"); + precachestring(&"QUICKMESSAGE_FOLLOW_ME"); + precachestring(&"QUICKMESSAGE_MOVE_IN"); + precachestring(&"QUICKMESSAGE_FALL_BACK"); + precachestring(&"QUICKMESSAGE_SUPPRESSING_FIRE"); + precachestring(&"QUICKMESSAGE_ATTACK_LEFT_FLANK"); + precachestring(&"QUICKMESSAGE_ATTACK_RIGHT_FLANK"); + precachestring(&"QUICKMESSAGE_HOLD_THIS_POSITION"); + precachestring(&"QUICKMESSAGE_REGROUP"); + precachestring(&"QUICKMESSAGE_ENEMY_SPOTTED"); + precachestring(&"QUICKMESSAGE_ENEMIES_SPOTTED"); + precachestring(&"QUICKMESSAGE_IM_IN_POSITION"); + precachestring(&"QUICKMESSAGE_AREA_SECURE"); + precachestring(&"QUICKMESSAGE_GRENADE"); + precachestring(&"QUICKMESSAGE_SNIPER"); + precachestring(&"QUICKMESSAGE_NEED_REINFORCEMENTS"); + precachestring(&"QUICKMESSAGE_HOLD_YOUR_FIRE"); + precachestring(&"QUICKMESSAGE_YES_SIR"); + precachestring(&"QUICKMESSAGE_NO_SIR"); + precachestring(&"QUICKMESSAGE_IM_ON_MY_WAY"); + precachestring(&"QUICKMESSAGE_SORRY"); + precachestring(&"QUICKMESSAGE_GREAT_SHOT"); + precachestring(&"QUICKMESSAGE_TOOK_LONG_ENOUGH"); + precachestring(&"QUICKMESSAGE_ARE_YOU_CRAZY"); + precachestring(&"QUICKMESSAGE_WATCH_SIX"); + precachestring(&"QUICKMESSAGE_COME_ON"); +} + +//Function Number: 2 +quickcommands(param_00) +{ + self endon("disconnect"); + if(!isdefined(self.pers["team"]) || self.pers["team"] == "spectator" || isdefined(self.spamdelay)) + { + return; + } + + self.spamdelay = 1; + switch(param_00) + { + case "1": + var_01 = "mp_cmd_followme"; + var_02 = &"QUICKMESSAGE_FOLLOW_ME"; + break; + + case "2": + var_01 = "mp_cmd_movein"; + var_02 = &"QUICKMESSAGE_MOVE_IN"; + break; + + case "3": + var_01 = "mp_cmd_fallback"; + var_02 = &"QUICKMESSAGE_FALL_BACK"; + break; + + case "4": + var_01 = "mp_cmd_suppressfire"; + var_02 = &"QUICKMESSAGE_SUPPRESSING_FIRE"; + break; + + case "5": + var_01 = "mp_cmd_attackleftflank"; + var_02 = &"QUICKMESSAGE_ATTACK_LEFT_FLANK"; + break; + + case "6": + var_01 = "mp_cmd_attackrightflank"; + var_02 = &"QUICKMESSAGE_ATTACK_RIGHT_FLANK"; + break; + + case "7": + var_01 = "mp_cmd_holdposition"; + var_02 = &"QUICKMESSAGE_HOLD_THIS_POSITION"; + break; + + default: + var_01 = "mp_cmd_regroup"; + var_02 = &"QUICKMESSAGE_REGROUP"; + break; + } + + saveheadicon(); + doquickmessage(var_01,var_02); + wait 2; + self.spamdelay = undefined; + func_2AD1(); +} + +//Function Number: 3 +quickstatements(param_00) +{ + if(!isdefined(self.pers["team"]) || self.pers["team"] == "spectator" || isdefined(self.spamdelay)) + { + return; + } + + self.spamdelay = 1; + switch(param_00) + { + case "1": + var_01 = "mp_stm_enemyspotted"; + var_02 = &"QUICKMESSAGE_ENEMY_SPOTTED"; + break; + + case "2": + var_01 = "mp_stm_enemiesspotted"; + var_02 = &"QUICKMESSAGE_ENEMIES_SPOTTED"; + break; + + case "3": + var_01 = "mp_stm_iminposition"; + var_02 = &"QUICKMESSAGE_IM_IN_POSITION"; + break; + + case "4": + var_01 = "mp_stm_areasecure"; + var_02 = &"QUICKMESSAGE_AREA_SECURE"; + break; + + case "5": + var_01 = "mp_stm_watchsix"; + var_02 = &"QUICKMESSAGE_WATCH_SIX"; + break; + + case "6": + var_01 = "mp_stm_sniper"; + var_02 = &"QUICKMESSAGE_SNIPER"; + break; + + default: + var_01 = "mp_stm_needreinforcements"; + var_02 = &"QUICKMESSAGE_NEED_REINFORCEMENTS"; + break; + } + + saveheadicon(); + doquickmessage(var_01,var_02); + wait 2; + self.spamdelay = undefined; + func_2AD1(); +} + +//Function Number: 4 +func_2ACB(param_00) +{ + if(!isdefined(self.pers["team"]) || self.pers["team"] == "spectator" || isdefined(self.spamdelay)) + { + return; + } + + self.spamdelay = 1; + switch(param_00) + { + case "1": + var_01 = "mp_rsp_yessir"; + var_02 = &"QUICKMESSAGE_YES_SIR"; + break; + + case "2": + var_01 = "mp_rsp_nosir"; + var_02 = &"QUICKMESSAGE_NO_SIR"; + break; + + case "3": + var_01 = "mp_rsp_onmyway"; + var_02 = &"QUICKMESSAGE_IM_ON_MY_WAY"; + break; + + case "4": + var_01 = "mp_rsp_sorry"; + var_02 = &"QUICKMESSAGE_SORRY"; + break; + + case "5": + var_01 = "mp_rsp_greatshot"; + var_02 = &"QUICKMESSAGE_GREAT_SHOT"; + break; + + default: + var_01 = "mp_rsp_comeon"; + var_02 = &"QUICKMESSAGE_COME_ON"; + break; + } + + saveheadicon(); + doquickmessage(var_01,var_02); + wait 2; + self.spamdelay = undefined; + func_2AD1(); +} + +//Function Number: 5 +doquickmessage(param_00,param_01) +{ + if(self.sessionstate != "playing") + { + return; + } + + var_02 = maps\mp\gametypes\_teams::getteamvoiceprefix(self.team); + if(isdefined(level.quickmessagetoall) && level.quickmessagetoall) + { + self.headiconteam = "none"; + self.headicon = "talkingicon"; + self playsound(var_02 + param_00); + self sayall(param_01); + return; + } + + if(self.sessionteam == "allies") + { + self.headiconteam = "allies"; + } + else if(self.sessionteam == "axis") + { + self.headiconteam = "axis"; + } + + self.headicon = "talkingicon"; + self playsound(var_02 + param_00); + self sayteam(param_01); + self pingplayer(); +} + +//Function Number: 6 +saveheadicon() +{ + if(isdefined(self.headicon)) + { + self.oldheadicon = self.headicon; + } + + if(isdefined(self.headiconteam)) + { + self.oldheadiconteam = self.headiconteam; + } +} + +//Function Number: 7 +func_2AD1() +{ + if(isdefined(self.oldheadicon)) + { + self.headicon = self.oldheadicon; + } + + if(isdefined(self.oldheadiconteam)) + { + self.headiconteam = self.oldheadiconteam; + } +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/gametypes/_rank.gsc b/MW3/Xbox/MP/maps/mp/gametypes/_rank.gsc new file mode 100644 index 0000000..71115de --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/gametypes/_rank.gsc @@ -0,0 +1,1275 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_rank.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 52 + * Decompile Time: 722 ms + * Timestamp: 10/27/2023 2:25:49 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level.scoreinfo = []; + level.xpscale = getdvarint("scr_xpscale"); + if(level.xpscale > 4 || level.xpscale < 0) + { + exitlevel(0); + } + + level.xpscale = min(level.xpscale,4); + level.xpscale = max(level.xpscale,0); + level.ranktable = []; + level.weaponranktable = []; + precacheshader("white"); + precachestring(&"RANK_PLAYER_WAS_PROMOTED_N"); + precachestring(&"RANK_PLAYER_WAS_PROMOTED"); + precachestring(&"RANK_WEAPON_WAS_PROMOTED"); + precachestring(&"RANK_PROMOTED"); + precachestring(&"RANK_PROMOTED_WEAPON"); + precachestring(&"MP_PLUS"); + precachestring(&"RANK_ROMANI"); + precachestring(&"RANK_ROMANII"); + precachestring(&"RANK_ROMANIII"); + precachestring(&"SPLASHES_LONGSHOT"); + precachestring(&"SPLASHES_PROXIMITYASSIST"); + precachestring(&"SPLASHES_PROXIMITYKILL"); + precachestring(&"SPLASHES_EXECUTION"); + precachestring(&"SPLASHES_AVENGER"); + precachestring(&"SPLASHES_ASSISTEDSUICIDE"); + precachestring(&"SPLASHES_DEFENDER"); + precachestring(&"SPLASHES_POSTHUMOUS"); + precachestring(&"SPLASHES_REVENGE"); + precachestring(&"SPLASHES_DOUBLEKILL"); + precachestring(&"SPLASHES_TRIPLEKILL"); + precachestring(&"SPLASHES_MULTIKILL"); + precachestring(&"SPLASHES_BUZZKILL"); + precachestring(&"SPLASHES_COMEBACK"); + precachestring(&"SPLASHES_KNIFETHROW"); + precachestring(&"SPLASHES_ONE_SHOT_KILL"); + if(level.teambased) + { + registerscoreinfo("kill",100); + registerscoreinfo("headshot",100); + registerscoreinfo("assist",20); + registerscoreinfo("proximityassist",20); + registerscoreinfo("proximitykill",20); + registerscoreinfo("suicide",0); + registerscoreinfo("teamkill",0); + } + else + { + registerscoreinfo("kill",50); + registerscoreinfo("headshot",50); + registerscoreinfo("assist",0); + registerscoreinfo("suicide",0); + registerscoreinfo("teamkill",0); + } + + registerscoreinfo("win",1); + registerscoreinfo("loss",0.5); + registerscoreinfo("tie",0.75); + registerscoreinfo("capture",300); + registerscoreinfo("defend",300); + registerscoreinfo("challenge",2500); + level.maxrank = int(tablelookup("mp/rankTable.csv",0,"maxrank",1)); + level.maxprestige = int(tablelookup("mp/rankIconTable.csv",0,"maxprestige",1)); + var_00 = 0; + var_01 = 0; + for(var_00 = 0;var_00 <= min(10,level.maxprestige);var_00++) + { + for(var_01 = 0;var_01 <= level.maxrank;var_01++) + { + precacheshader(tablelookup("mp/rankIconTable.csv",0,var_01,var_00 + 1)); + } + } + + var_02 = 0; + var_03 = tablelookup("mp/ranktable.csv",0,var_02,1); + while(isdefined(var_03) && var_03 != "") + { + level.ranktable[var_02][1] = tablelookup("mp/ranktable.csv",0,var_02,1); + level.ranktable[var_02][2] = tablelookup("mp/ranktable.csv",0,var_02,2); + level.ranktable[var_02][3] = tablelookup("mp/ranktable.csv",0,var_02,3); + level.ranktable[var_02][7] = tablelookup("mp/ranktable.csv",0,var_02,7); + precachestring(tablelookupistring("mp/ranktable.csv",0,var_02,16)); + var_02++; + var_03 = tablelookup("mp/ranktable.csv",0,var_02,1); + } + + var_04 = int(tablelookup("mp/weaponRankTable.csv",0,"maxrank",1)); + for(var_05 = 0;var_05 < var_04 + 1;var_05++) + { + level.weaponranktable[var_05][1] = tablelookup("mp/weaponRankTable.csv",0,var_05,1); + level.weaponranktable[var_05][2] = tablelookup("mp/weaponRankTable.csv",0,var_05,2); + level.weaponranktable[var_05][3] = tablelookup("mp/weaponRankTable.csv",0,var_05,3); + } + + maps\mp\gametypes\_missions::buildchallegeinfo(); + level thread func_327D(); + level thread onplayerconnect(); +} + +//Function Number: 2 +func_327D() +{ + level endon("game_ended"); + while(!isdefined(level.players) || !level.players.size) + { + wait 0.05; + } + + if(!maps\mp\_utility::matchmakinggame()) + { + if(getdvar("mapname") == "mp_rust" && randomint(1000) == 999) + { + level.patientzeroname = level.players[0].name; + return; + } + + return; + } + + if(getdvar("scr_patientZero") != "") + { + level.patientzeroname = getdvar("scr_patientZero"); + } +} + +//Function Number: 3 +func_327E(param_00) +{ + if(isdefined(level.scoreinfo[param_00])) + { + return 1; + } + + return 0; +} + +//Function Number: 4 +registerscoreinfo(param_00,param_01) +{ + level.scoreinfo[param_00]["value"] = param_01; +} + +//Function Number: 5 +getscoreinfovalue(param_00) +{ + var_01 = "scr_" + level.gametype + "_score_" + param_00; + if(getdvar(var_01) != "") + { + return getdvarint(var_01); + } + + return level.scoreinfo[param_00]["value"]; +} + +//Function Number: 6 +func_327F(param_00) +{ + return level.scoreinfo[param_00]["label"]; +} + +//Function Number: 7 +getrankinfominxp(param_00) +{ + return int(level.ranktable[param_00][2]); +} + +//Function Number: 8 +func_3280(param_00) +{ + return int(level.weaponranktable[param_00][1]); +} + +//Function Number: 9 +func_0ECE(param_00) +{ + return int(level.ranktable[param_00][3]); +} + +//Function Number: 10 +getweaponrankinfoxpamt(param_00) +{ + return int(level.weaponranktable[param_00][2]); +} + +//Function Number: 11 +getrankinfomaxxp(param_00) +{ + return int(level.ranktable[param_00][7]); +} + +//Function Number: 12 +func_3282(param_00) +{ + return int(level.weaponranktable[param_00][3]); +} + +//Function Number: 13 +getrankinfofull(param_00) +{ + return tablelookupistring("mp/ranktable.csv",0,param_00,16); +} + +//Function Number: 14 +getrankinfoicon(param_00,param_01) +{ + return tablelookup("mp/rankIconTable.csv",0,param_00,param_01 + 1); +} + +//Function Number: 15 +func_3283(param_00) +{ + return int(tablelookup("mp/ranktable.csv",0,param_00,13)); +} + +//Function Number: 16 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_00.pers["rankxp"] = var_00 maps\mp\gametypes\_persistence::func_2B58("experience"); + if(var_00.pers["rankxp"] < 0) + { + var_00.pers["rankxp"] = 0; + } + + var_01 = var_00 getrankforxp(var_00 getrankxp()); + var_00.pers["rank"] = var_01; + var_00.pers["participation"] = 0; + var_00.xpupdatetotal = 0; + var_00.bonusupdatetotal = 0; + var_02 = var_00 getprestigelevel(); + var_00 setrank(var_01,var_02); + var_00.pers["prestige"] = var_02; + if(var_00.clientid < level.maxlogclients) + { + setmatchdata("players",var_00.clientid,"rank",var_01); + setmatchdata("players",var_00.clientid,"Prestige",var_02); + } + + var_00.postgamepromotion = 0; + if(!isdefined(var_00.pers["postGameChallenges"])) + { + var_00 setclientdvars("ui_challenge_1_ref","","ui_challenge_2_ref","","ui_challenge_3_ref","","ui_challenge_4_ref","","ui_challenge_5_ref","","ui_challenge_6_ref","","ui_challenge_7_ref",""); + } + + var_00 setclientdvar("ui_promotion",0); + if(!isdefined(var_00.pers["summary"])) + { + var_00.pers["summary"] = []; + var_00.pers["summary"]["xp"] = 0; + var_00.pers["summary"]["score"] = 0; + var_00.pers["summary"]["challenge"] = 0; + var_00.pers["summary"]["match"] = 0; + var_00.pers["summary"]["misc"] = 0; + var_00 setclientdvar("player_summary_xp","0"); + var_00 setclientdvar("player_summary_score","0"); + var_00 setclientdvar("player_summary_challenge","0"); + var_00 setclientdvar("player_summary_match","0"); + var_00 setclientdvar("player_summary_misc","0"); + } + + var_00 setclientdvar("ui_opensummary",0); + var_00 thread maps\mp\gametypes\_missions::updatechallenges(); + var_00.explosivekills[0] = 0; + var_00.xpgains = []; + var_00.hud_xppointspopup = var_00 createxppointspopup(); + var_00.hud_xpeventpopup = var_00 createxpeventpopup(); + var_00 thread onplayerspawned(); + var_00 thread func_2747(); + var_00 thread func_2748(); + var_00 thread func_328A(); + if(var_00 getplayerdata("prestigeDoubleXp")) + { + var_00.prestigedoublexp = 1; + } + else + { + var_00.prestigedoublexp = 0; + } + + if(var_00 getplayerdata("prestigeDoubleWeaponXp")) + { + var_00.prestigedoubleweaponxp = 1; + continue; + } + + var_00.prestigedoubleweaponxp = 0; + } +} + +//Function Number: 17 +func_328A() +{ + self endon("disconnect"); + for(;;) + { + wait 30; + if(!self.hasdonecombat) + { + continue; + } + + maps\mp\gametypes\_persistence::statadd("gamesPlayed",1); + break; + } +} + +//Function Number: 18 +func_2747() +{ + self endon("disconnect"); + for(;;) + { + self waittill("joined_team"); + thread removerankhud(); + } +} + +//Function Number: 19 +func_2748() +{ + self endon("disconnect"); + for(;;) + { + self waittill("joined_spectators"); + thread removerankhud(); + } +} + +//Function Number: 20 +onplayerspawned() +{ + self endon("disconnect"); + self waittill("spawned_player"); +} + +//Function Number: 21 +roundup(param_00) +{ + if(int(param_00) != param_00) + { + return int(param_00 + 1); + } + + return int(param_00); +} + +//Function Number: 22 +func_2AB3(param_00,param_01,param_02,param_03,param_04) +{ + self endon("disconnect"); + var_05 = "none"; + if(!maps\mp\_utility::rankingenabled()) + { + if(param_00 == "assist") + { + if(isdefined(self.taggedassist)) + { + self.taggedassist = undefined; + } + else + { + var_06 = &"MP_ASSIST"; + if(maps\mp\_utility::func_27AF("specialty_assists")) + { + if(!self.pers["assistsToKill"] % 2) + { + var_06 = &"MP_ASSIST_TO_KILL"; + } + } + + thread xpeventpopup(var_06); + } + } + + return; + } + + if(level.teambased && !level.teamcount["allies"] || !level.teamcount["axis"]) + { + return; + } + else if(!level.teambased && level.teamcount["allies"] + level.teamcount["axis"] < 2) + { + return; + } + + if(!isdefined(param_01)) + { + param_01 = getscoreinfovalue(param_00); + } + + if(!isdefined(self.xpgains[param_00])) + { + self.xpgains[param_00] = 0; + } + + var_07 = 0; + var_08 = 0; + switch(param_00) + { + case "shield_damage": + case "headshot": + case "kill": + param_01 = param_01 * self.xpscaler; + break; + + case "jugg_on_jugg": + case "kill_juggernaut": + case "kill_as_juggernaut": + case "got_juggernaut": + case "dropped_enemy_gun_rank": + case "gained_gun_rank": + case "final_rogue": + case "survivor": + case "draft_rogue": + case "kill_carrier": + case "kill_bonus": + case "team_assist": + case "tags_retrieved": + case "kill_denied": + case "kill_confirmed": + case "defuse": + case "save": + case "plant": + case "pickup": + case "return": + case "assault": + case "defend": + case "capture": + case "teamkill": + case "assist": + case "suicide": + case "destroy": + if(maps\mp\_utility::getgametypenumlives() > 0 && param_00 != "shield_damage") + { + var_09 = max(1,int(10 / maps\mp\_utility::getgametypenumlives())); + param_01 = int(param_01 * var_09); + } + + var_0A = 0; + var_0B = 0; + if(self.prestigedoublexp) + { + var_0C = self getplayerdata("prestigeDoubleXpTimePlayed"); + if(var_0C >= self.bufferedstatsmax["prestigeDoubleXpMaxTimePlayed"]) + { + self setplayerdata("prestigeDoubleXp",0); + self setplayerdata("prestigeDoubleXpTimePlayed",0); + self setplayerdata("prestigeDoubleXpMaxTimePlayed",0); + self.prestigedoublexp = 0; + } + else + { + var_0B = 2; + } + } + + if(!self.prestigedoublexp) + { + for(var_0D = 0;var_0D < 3;var_0D++) + { + if(self getplayerdata("xpMultiplierTimePlayed",var_0D) < self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][var_0D]) + { + var_0A = var_0A + int(self getplayerdata("xpMultiplier",var_0D)); + } + } + } + + if(var_0B > 0) + { + param_01 = int(param_01 * level.xpscale * var_0B); + } + else if(var_0A > 0) + { + param_01 = int(param_01 * level.xpscale * var_0A); + } + else + { + param_01 = int(param_01 * level.xpscale); + } + + if(isdefined(level.nukedetonated) && level.nukedetonated) + { + if(level.teambased && level.nukeinfo.team == self.team) + { + param_01 = param_01 * level.nukeinfo.var_822A; + } + else if(!level.teambased && level.nukeinfo.player == self) + { + param_01 = param_01 * level.nukeinfo.var_822A; + } + + param_01 = int(param_01); + } + + var_0E = getrestxpaward(param_01); + param_01 = param_01 + var_0E; + if(var_0E > 0) + { + if(islastrestxpaward(param_01)) + { + thread maps\mp\gametypes\_hud_message::func_2892("rested_done"); + } + + var_08 = 1; + } + break; + + case "challenge": + var_0A = 0; + if(self getplayerdata("challengeXPMultiplierTimePlayed",0) < self.bufferedchildstatsmax["challengeXPMaxMultiplierTimePlayed"][0]) + { + var_0A = var_0A + int(self getplayerdata("challengeXPMultiplier",0)); + if(var_0A > 0) + { + param_01 = int(param_01 * var_0A); + } + } + break; + } + + if(!var_08) + { + if(self getplayerdata("restXPGoal") > getrankxp()) + { + self setplayerdata("restXPGoal",self getplayerdata("restXPGoal") + param_01); + } + } + + var_0F = getrankxp(); + self.xpgains[param_00] = self.xpgains[param_00] + param_01; + incrankxp(param_01); + if(maps\mp\_utility::rankingenabled() && func_0EB5(var_0F)) + { + thread updaterankannouncehud(); + } + + func_329E(); + var_10 = maps\mp\gametypes\_missions::isweaponchallenge(param_04); + if(var_10) + { + param_02 = self getcurrentweapon(); + } + + if(param_00 == "shield_damage") + { + param_02 = self getcurrentweapon(); + param_03 = "MOD_MELEE"; + } + + if(func_328C(param_02,param_03) || var_10) + { + var_11 = strtok(param_02,"_"); + if(var_11[0] == "iw5") + { + var_12 = var_11[0] + "_" + var_11[1]; + } + else if(var_12[0] == "alt") + { + var_12 = var_12[1] + "_" + var_12[2]; + } + else + { + var_12 = var_12[0]; + } + + if(var_11[0] == "gl") + { + var_12 = var_11[1]; + } + + if(self isitemunlocked(var_12)) + { + if(self.primaryweapon == param_02 || self.secondaryweapon == param_02 || weaponaltweaponname(self.primaryweapon) == param_02 || isdefined(self.tookweaponfrom) && isdefined(self.tookweaponfrom[param_02])) + { + var_13 = func_3297(var_12); + switch(param_00) + { + case "kill": + var_14 = 100; + break; + + default: + var_14 = param_02; + break; + } + + if(self.prestigedoubleweaponxp) + { + var_15 = self getplayerdata("prestigeDoubleWeaponXpTimePlayed"); + if(var_15 >= self.bufferedstatsmax["prestigeDoubleWeaponXpMaxTimePlayed"]) + { + self setplayerdata("prestigeDoubleWeaponXp",0); + self setplayerdata("prestigeDoubleWeaponXpTimePlayed",0); + self setplayerdata("prestigeDoubleWeaponXpMaxTimePlayed",0); + self.prestigedoubleweaponxp = 0; + } + else + { + var_14 = var_14 * 2; + } + } + + if(self getplayerdata("weaponXPMultiplierTimePlayed",0) < self.bufferedchildstatsmax["weaponXPMaxMultiplierTimePlayed"][0]) + { + var_16 = int(self getplayerdata("weaponXPMultiplier",0)); + if(var_16 > 0) + { + var_14 = var_14 * var_16; + } + } + + var_17 = var_13 + var_14; + if(!isweaponmaxrank(var_12)) + { + var_18 = func_3298(var_12); + if(var_17 > var_18) + { + var_17 = var_18; + var_14 = var_18 - var_13; + } + + if(!isdefined(self.weaponsused)) + { + self.weaponsused = []; + self.weaponxpearned = []; + } + + var_19 = 0; + var_1A = 999; + for(var_0D = 0;var_0D < self.weaponsused.size;var_0D++) + { + if(self.weaponsused[var_0D] == var_12) + { + var_19 = 1; + var_1A = var_0D; + } + } + + if(var_19) + { + self.weaponxpearned[var_1A] = self.weaponxpearned[var_1A] + var_14; + } + else + { + self.weaponsused[self.weaponsused.size] = var_12; + self.weaponxpearned[self.weaponxpearned.size] = var_14; + } + + self setplayerdata("weaponXP",var_12,var_17); + maps\mp\_matchdata::logweaponstat(var_12,"XP",var_14); + maps\mp\_utility::incplayerstat("weaponxpearned",var_14); + if(maps\mp\_utility::rankingenabled() && func_2880(var_17,var_12)) + { + thread func_328E(); + } + } + } + } + } + + if(!level.hardcoremode) + { + if(param_00 == "teamkill") + { + thread xppointspopup(0 - getscoreinfovalue("kill"),0,(1,0,0),0); + } + else + { + var_1B = (1,1,0.5); + if(var_08) + { + var_1B = (1,0.65,0); + } + + thread xppointspopup(param_01,var_07,var_1B,0); + if(param_00 == "assist") + { + if(isdefined(self.taggedassist)) + { + self.taggedassist = undefined; + } + else + { + var_06 = &"MP_ASSIST"; + if(maps\mp\_utility::func_27AF("specialty_assists")) + { + if(!self.pers["assistsToKill"] % 2) + { + var_06 = &"MP_ASSIST_TO_KILL"; + } + } + + thread xpeventpopup(var_06); + } + } + } + } + + switch(param_00) + { + case "jugg_on_jugg": + case "kill_juggernaut": + case "kill_as_juggernaut": + case "got_juggernaut": + case "dropped_enemy_gun_rank": + case "gained_gun_rank": + case "final_rogue": + case "survivor": + case "draft_rogue": + case "kill_carrier": + case "kill_bonus": + case "team_assist": + case "tags_retrieved": + case "kill_denied": + case "kill_confirmed": + case "defuse": + case "plant": + case "pickup": + case "return": + case "assault": + case "defend": + case "capture": + case "teamkill": + case "assist": + case "headshot": + case "kill": + case "suicide": + self.pers["summary"]["score"] = self.pers["summary"]["score"] + param_01; + self.pers["summary"]["xp"] = self.pers["summary"]["xp"] + param_01; + break; + + case "tie": + case "loss": + case "win": + self.pers["summary"]["match"] = self.pers["summary"]["match"] + param_01; + self.pers["summary"]["xp"] = self.pers["summary"]["xp"] + param_01; + break; + + case "challenge": + self.pers["summary"]["challenge"] = self.pers["summary"]["challenge"] + param_01; + self.pers["summary"]["xp"] = self.pers["summary"]["xp"] + param_01; + break; + + default: + self.pers["summary"]["misc"] = self.pers["summary"]["misc"] + param_01; + self.pers["summary"]["xp"] = self.pers["summary"]["xp"] + param_01; + break; + } +} + +//Function Number: 23 +func_328C(param_00,param_01) +{ + if(self isitemunlocked("cac") && !maps\mp\_utility::isjuggernaut() && isdefined(param_00) && isdefined(param_01) && !maps\mp\_utility::func_2829(param_00)) + { + if(maps\mp\_utility::func_297E(param_01)) + { + return 1; + } + + if(isexplosivedamagemod(param_01) || param_01 == "MOD_IMPACT") + { + if(maps\mp\_utility::getweaponclass(param_00) == "weapon_projectile" || maps\mp\_utility::getweaponclass(param_00) == "weapon_assault") + { + return 1; + } + } + + if(param_01 == "MOD_MELEE") + { + if(maps\mp\_utility::getweaponclass(param_00) == "weapon_riot") + { + return 1; + } + } + } + + return 0; +} + +//Function Number: 24 +func_0EB5(param_00) +{ + var_01 = getrank(); + if(var_01 == self.pers["rank"]) + { + return 0; + } + + var_02 = self.pers["rank"]; + self.pers["rank"] = var_01; + self setrank(var_01); + return 1; +} + +//Function Number: 25 +func_2880(param_00,param_01) +{ + var_02 = func_2881(param_01); + if(var_02 == self getplayerdata("weaponRank",param_01)) + { + return 0; + } + + self.pers["weaponRank"] = var_02; + self setplayerdata("weaponRank",param_01,var_02); + thread maps\mp\gametypes\_missions::func_326B(param_01); + return 1; +} + +//Function Number: 26 +updaterankannouncehud() +{ + self endon("disconnect"); + self notify("update_rank"); + self endon("update_rank"); + var_00 = self.pers["team"]; + if(!isdefined(var_00)) + { + return; + } + + if(!maps\mp\_utility::levelflag("game_over")) + { + level common_scripts\utility::waittill_notify_or_timeout("game_over",0.25); + } + + var_01 = getrankinfofull(self.pers["rank"]); + var_02 = level.ranktable[self.pers["rank"]][1]; + var_03 = int(var_02[var_02.size - 1]); + thread maps\mp\gametypes\_hud_message::func_320F(); + if(var_03 > 1) + { + return; + } + + for(var_04 = 0;var_04 < level.players.size;var_04++) + { + var_05 = level.players[var_04]; + var_06 = var_05.pers["team"]; + if(isdefined(var_06) && var_05 != self) + { + if(var_06 == var_00) + { + var_05 iprintln(&"RANK_PLAYER_WAS_PROMOTED",self,var_01); + } + } + } +} + +//Function Number: 27 +func_328E() +{ + self endon("disconnect"); + self notify("update_weapon_rank"); + self endon("update_weapon_rank"); + var_00 = self.pers["team"]; + if(!isdefined(var_00)) + { + return; + } + + if(!maps\mp\_utility::levelflag("game_over")) + { + level common_scripts\utility::waittill_notify_or_timeout("game_over",0.25); + } + + thread maps\mp\gametypes\_hud_message::weaponpromotionsplashnotify(); +} + +//Function Number: 28 +func_2F02() +{ + var_00 = self; +} + +//Function Number: 29 +createxppointspopup() +{ + var_00 = newclienthudelem(self); + var_00.horzalign = "center"; + var_00.vertalign = "middle"; + var_00.alignx = "center"; + var_00.aligny = "middle"; + var_00.x = 30; + if(level.splitscreen) + { + var_00.y = -30; + } + else + { + var_00.y = -50; + } + + var_00.font = "hudbig"; + var_00.fontscale = 0.65; + var_00.archived = 0; + var_00.color = (0.5,0.5,0.5); + var_00.sort = 10000; + var_00 maps\mp\gametypes\_hud::fontpulseinit(3); + return var_00; +} + +//Function Number: 30 +xppointspopup(param_00,param_01,param_02,param_03) +{ + self endon("disconnect"); + self endon("joined_team"); + self endon("joined_spectators"); + if(param_00 == 0) + { + return; + } + + self notify("xpPointsPopup"); + self endon("xpPointsPopup"); + self.xpupdatetotal = self.xpupdatetotal + param_00; + self.bonusupdatetotal = self.bonusupdatetotal + param_01; + wait 0.05; + if(self.xpupdatetotal < 0) + { + self.hud_xppointspopup.label = &""; + } + else + { + self.hud_xppointspopup.label = &"MP_PLUS"; + } + + self.hud_xppointspopup.color = param_02; + self.hud_xppointspopup.glowcolor = param_02; + self.hud_xppointspopup.glowalpha = param_03; + self.hud_xppointspopup setvalue(self.xpupdatetotal); + self.hud_xppointspopup.alpha = 0.85; + self.hud_xppointspopup thread maps\mp\gametypes\_hud::fontpulse(self); + var_04 = max(int(self.bonusupdatetotal / 20),1); + if(self.bonusupdatetotal) + { + while(self.bonusupdatetotal > 0) + { + self.xpupdatetotal = self.xpupdatetotal + min(self.bonusupdatetotal,var_04); + self.bonusupdatetotal = self.bonusupdatetotal - min(self.bonusupdatetotal,var_04); + self.hud_xppointspopup setvalue(self.xpupdatetotal); + wait 0.05; + } + } + else + { + wait 1; + } + + self.hud_xppointspopup fadeovertime(0.75); + self.hud_xppointspopup.alpha = 0; + self.xpupdatetotal = 0; +} + +//Function Number: 31 +createxpeventpopup() +{ + var_00 = newclienthudelem(self); + var_00.children = []; + var_00.horzalign = "center"; + var_00.vertalign = "middle"; + var_00.alignx = "center"; + var_00.aligny = "middle"; + var_00.x = 55; + if(level.splitscreen) + { + var_00.y = -20; + } + else + { + var_00.y = -35; + } + + var_00.font = "hudbig"; + var_00.fontscale = 0.65; + var_00.archived = 0; + var_00.color = (0.5,0.5,0.5); + var_00.sort = 10000; + var_00.elemtype = "msgText"; + var_00 maps\mp\gametypes\_hud::fontpulseinit(3); + return var_00; +} + +//Function Number: 32 +xpeventpopupfinalize(param_00,param_01,param_02) +{ + self endon("disconnect"); + self endon("joined_team"); + self endon("joined_spectators"); + self notify("xpEventPopup"); + self endon("xpEventPopup"); + if(level.hardcoremode) + { + return; + } + + wait 0.05; + if(!isdefined(param_01)) + { + param_01 = (1,1,0.5); + } + + if(!isdefined(param_02)) + { + param_02 = 0; + } + + if(!isdefined(self)) + { + return; + } + + self.hud_xpeventpopup.color = param_01; + self.hud_xpeventpopup.glowcolor = param_01; + self.hud_xpeventpopup.glowalpha = param_02; + self.hud_xpeventpopup settext(param_00); + self.hud_xpeventpopup.alpha = 0.85; + wait 1; + if(!isdefined(self)) + { + return; + } + + self.hud_xpeventpopup fadeovertime(0.75); + self.hud_xpeventpopup.alpha = 0; + self notify("PopComplete"); +} + +//Function Number: 33 +xpeventpopupterminate() +{ + self endon("PopComplete"); + common_scripts\utility::waittill_any("joined_team","joined_spectators"); + self.hud_xpeventpopup fadeovertime(0.05); + self.hud_xpeventpopup.alpha = 0; +} + +//Function Number: 34 +xpeventpopup(param_00,param_01,param_02) +{ + thread xpeventpopupfinalize(param_00,param_01,param_02); + thread xpeventpopupterminate(); +} + +//Function Number: 35 +removerankhud() +{ + self.hud_xppointspopup.alpha = 0; +} + +//Function Number: 36 +getrank() +{ + var_00 = self.pers["rankxp"]; + var_01 = self.pers["rank"]; + if(var_00 < getrankinfominxp(var_01) + func_0ECE(var_01)) + { + return var_01; + } + + return getrankforxp(var_00); +} + +//Function Number: 37 +func_2881(param_00) +{ + var_01 = self getplayerdata("weaponXP",param_00); + return func_3295(var_01,param_00); +} + +//Function Number: 38 +func_3292(param_00) +{ + return getrankforxp(param_00); +} + +//Function Number: 39 +func_3293(param_00) +{ + return func_3295(param_00); +} + +//Function Number: 40 +func_3294() +{ + var_00 = self getcurrentweapon(); + if(isdefined(var_00)) + { + return self getplayerdata("weaponXP",var_00); + } + + return 0; +} + +//Function Number: 41 +getrankforxp(param_00) +{ + var_01 = 0; + for(var_02 = level.ranktable[var_01][1];isdefined(var_02) && var_02 != "";var_02 = undefined) + { + if(param_00 < getrankinfominxp(var_01) + func_0ECE(var_01)) + { + return var_01; + } + + var_01++; + if(isdefined(level.ranktable[var_01])) + { + var_02 = level.ranktable[var_01][1]; + continue; + } + } + + var_01--; + return var_01; +} + +//Function Number: 42 +func_3295(param_00,param_01) +{ + if(!isdefined(param_00)) + { + param_00 = 0; + } + + var_02 = tablelookup("mp/statstable.csv",4,param_01,2); + var_03 = int(tablelookup("mp/weaponRankTable.csv",0,var_02,1)); + for(var_04 = 0;var_04 < var_03 + 1;var_04++) + { + if(param_00 < func_3280(var_04) + getweaponrankinfoxpamt(var_04)) + { + return var_04; + } + } + + return var_04 - 1; +} + +//Function Number: 43 +getspm() +{ + var_00 = getrank() + 1; + return 3 + var_00 * 0.5 * 10; +} + +//Function Number: 44 +getprestigelevel() +{ + return maps\mp\gametypes\_persistence::func_2B58("prestige"); +} + +//Function Number: 45 +getrankxp() +{ + return self.pers["rankxp"]; +} + +//Function Number: 46 +func_3297(param_00) +{ + return self getplayerdata("weaponXP",param_00); +} + +//Function Number: 47 +func_3298(param_00) +{ + var_01 = tablelookup("mp/statstable.csv",4,param_00,2); + var_02 = int(tablelookup("mp/weaponRankTable.csv",0,var_01,1)); + var_03 = func_3282(var_02); + return var_03; +} + +//Function Number: 48 +isweaponmaxrank(param_00) +{ + var_01 = self getplayerdata("weaponXP",param_00); + var_02 = func_3298(param_00); + return var_01 >= var_02; +} + +//Function Number: 49 +incrankxp(param_00) +{ + if(!maps\mp\_utility::rankingenabled()) + { + return; + } + + if(isdefined(self.ischeater)) + { + return; + } + + var_01 = getrankxp(); + var_02 = int(min(var_01,getrankinfomaxxp(level.maxrank))) + param_00; + if(self.pers["rank"] == level.maxrank && var_02 >= getrankinfomaxxp(level.maxrank)) + { + var_02 = getrankinfomaxxp(level.maxrank); + } + + self.pers["rankxp"] = var_02; +} + +//Function Number: 50 +getrestxpaward(param_00) +{ + if(!getdvarint("scr_restxp_enable")) + { + return 0; + } + + var_01 = getdvarfloat("scr_restxp_restedAwardScale"); + var_02 = int(param_00 * var_01); + var_03 = self getplayerdata("restXPGoal") - getrankxp(); + if(var_03 <= 0) + { + return 0; + } + + return var_02; +} + +//Function Number: 51 +islastrestxpaward(param_00) +{ + if(!getdvarint("scr_restxp_enable")) + { + return 0; + } + + var_01 = getdvarfloat("scr_restxp_restedAwardScale"); + var_02 = int(param_00 * var_01); + var_03 = self getplayerdata("restXPGoal") - getrankxp(); + if(var_03 <= 0) + { + return 0; + } + + if(var_02 >= var_03) + { + return 1; + } + + return 0; +} + +//Function Number: 52 +func_329E() +{ + if(level.xpscale > 4 || level.xpscale <= 0) + { + exitlevel(0); + } + + var_00 = getrankxp(); + maps\mp\gametypes\_persistence::func_2CD1("experience",var_00); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/gametypes/_serversettings.gsc b/MW3/Xbox/MP/maps/mp/gametypes/_serversettings.gsc new file mode 100644 index 0000000..d15f54c --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/gametypes/_serversettings.gsc @@ -0,0 +1,123 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_serversettings.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 3 + * Decompile Time: 48 ms + * Timestamp: 10/27/2023 2:25:50 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level.hostname = getdvar("sv_hostname"); + if(level.hostname == "") + { + level.hostname = "CoDHost"; + } + + setdvar("sv_hostname",level.hostname); + level.allowvote = getdvarint("g_allowvote",1); + setdvar("g_allowvote",level.allowvote); + makedvarserverinfo("ui_allowvote",level.allowvote); + level.friendlyfire = maps\mp\gametypes\_tweakables::func_270D("team","fftype"); + makedvarserverinfo("ui_friendlyfire",level.friendlyfire); + func_2B94(getdvar("g_gametype")); + for(;;) + { + func_2B93(); + wait 5; + } +} + +//Function Number: 2 +func_2B93() +{ + var_00 = getdvar("sv_hostname"); + if(level.hostname != var_00) + { + level.hostname = var_00; + } + + var_01 = getdvarint("g_allowvote",1); + if(level.allowvote != var_01) + { + level.allowvote = var_01; + setdvar("ui_allowvote",level.allowvote); + } + + var_02 = maps\mp\gametypes\_tweakables::func_270D("team","fftype"); + if(level.friendlyfire != var_02) + { + level.friendlyfire = var_02; + setdvar("ui_friendlyfire",level.friendlyfire); + } +} + +//Function Number: 3 +func_2B94(param_00) +{ + var_01 = getentarray(); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + var_03 = var_01[var_02]; + if(param_00 == "dm") + { + if(isdefined(var_03.script_gametype_dm) && var_03.script_gametype_dm != "1") + { + var_03 delete(); + } + + continue; + } + + if(param_00 == "tdm") + { + if(isdefined(var_03.script_gametype_tdm) && var_03.script_gametype_tdm != "1") + { + var_03 delete(); + } + + continue; + } + + if(param_00 == "ctf") + { + if(isdefined(var_03.script_gametype_ctf) && var_03.script_gametype_ctf != "1") + { + var_03 delete(); + } + + continue; + } + + if(param_00 == "hq") + { + if(isdefined(var_03.script_gametype_hq) && var_03.script_gametype_hq != "1") + { + var_03 delete(); + } + + continue; + } + + if(param_00 == "sd") + { + if(isdefined(var_03.script_gametype_sd) && var_03.script_gametype_sd != "1") + { + var_03 delete(); + } + + continue; + } + + if(param_00 == "koth") + { + if(isdefined(var_03.script_gametype_koth) && var_03.script_gametype_koth != "1") + { + var_03 delete(); + } + } + } +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/gametypes/_shellshock.gsc b/MW3/Xbox/MP/maps/mp/gametypes/_shellshock.gsc new file mode 100644 index 0000000..b912fbe --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/gametypes/_shellshock.gsc @@ -0,0 +1,187 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_shellshock.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 9 + * Decompile Time: 158 ms + * Timestamp: 10/27/2023 2:25:50 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + precacheshellshock("frag_grenade_mp"); + precacheshellshock("damage_mp"); + precacherumble("artillery_rumble"); + precacherumble("grenade_rumble"); + precachemenu("dirt_effect_center"); + precachemenu("dirt_effect_left"); + precachemenu("dirt_effect_right"); + precachemenu("blood_effect_center"); + precachemenu("blood_effect_left"); + precachemenu("blood_effect_right"); +} + +//Function Number: 2 +shellshockondamage(param_00,param_01) +{ + if(maps\mp\_flashgrenades::isflashbanged()) + { + return; + } + + if(param_00 == "MOD_EXPLOSIVE" || param_00 == "MOD_GRENADE" || param_00 == "MOD_GRENADE_SPLASH" || param_00 == "MOD_PROJECTILE" || param_00 == "MOD_PROJECTILE_SPLASH") + { + if(param_01 > 10) + { + if(isdefined(self.shellshockreduction) && self.shellshockreduction) + { + self shellshock("frag_grenade_mp",self.shellshockreduction); + return; + } + + self shellshock("frag_grenade_mp",0.5); + return; + } + } +} + +//Function Number: 3 +func_2374() +{ + self waittill("death"); + waittillframeend; + self notify("end_explode"); +} + +//Function Number: 4 +grenade_earthquake() +{ + thread func_2374(); + self endon("end_explode"); + self waittill("explode",var_00); + playrumbleonposition("grenade_rumble",var_00); + earthquake(0.5,0.75,var_00,800); + foreach(var_02 in level.players) + { + if(var_02 maps\mp\_utility::isusingremote()) + { + continue; + } + + if(distance(var_00,var_02.origin) > 600) + { + continue; + } + + if(var_02 damageconetrace(var_00)) + { + var_02 thread dirteffect(var_00); + } + } +} + +//Function Number: 5 +dirteffect(param_00) +{ + self endon("disconnect"); + var_01 = vectornormalize(anglestoforward(self.angles)); + var_02 = vectornormalize(anglestoright(self.angles)); + var_03 = vectornormalize(param_00 - self.origin); + var_04 = vectordot(var_03,var_01); + var_05 = vectordot(var_03,var_02); + var_06 = []; + if(var_04 > 0 && var_04 > 0.5 && self getcurrentweapon() != "riotshield_mp") + { + } + + if(abs(var_05) < 0.866) + { + if(var_06 > 0) + { + } + else + { + } + } + + foreach(var_08 in var_41) + { + self openmenu(var_08); + } + + if(isalive(self)) + { + common_scripts\utility::waittill_notify_or_timeout("death",2); + } + + foreach(var_08 in var_41) + { + self closemenu(var_08); + } +} + +//Function Number: 6 +bloodeffect(param_00) +{ + self endon("disconnect"); + var_01 = vectornormalize(anglestoforward(self.angles)); + var_02 = vectornormalize(anglestoright(self.angles)); + var_03 = vectornormalize(param_00 - self.origin); + var_04 = vectordot(var_03,var_01); + var_05 = vectordot(var_03,var_02); + var_06 = []; + if(var_04 > 0 && var_04 > 0.5) + { + } + + if(abs(var_05) < 0.866) + { + if(var_06 > 0) + { + } + else + { + } + } + + foreach(var_08 in var_41) + { + self openmenu(var_08); + } + + if(isalive(self)) + { + common_scripts\utility::waittill_notify_or_timeout("death",7); + } + + foreach(var_08 in var_41) + { + self closemenu(var_08); + } +} + +//Function Number: 7 +c4_earthquake() +{ + thread func_2374(); + self endon("end_explode"); + self waittill("explode",var_00); + playrumbleonposition("grenade_rumble",var_00); + earthquake(0.4,0.75,var_00,512); +} + +//Function Number: 8 +barrel_earthquake() +{ + playrumbleonposition("grenade_rumble",self.origin); + earthquake(0.4,0.5,self.origin,512); +} + +//Function Number: 9 +artillery_earthquake() +{ + playrumbleonposition("artillery_rumble",self.origin); + earthquake(0.7,0.5,self.origin,800); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/gametypes/_spawnlogic.gsc b/MW3/Xbox/MP/maps/mp/gametypes/_spawnlogic.gsc new file mode 100644 index 0000000..3d81d95 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/gametypes/_spawnlogic.gsc @@ -0,0 +1,1708 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_spawnlogic.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 49 + * Decompile Time: 707 ms + * Timestamp: 10/27/2023 2:25:53 AM +*******************************************************************/ + +//Function Number: 1 +func_2FCD(param_00,param_01) +{ + var_02 = (0,0,0); + var_02 = param_01 - param_00; + var_02 = (var_02[0] / 2,var_02[1] / 2,var_02[2] / 2) + param_00; + return var_02; +} + +//Function Number: 2 +expandmins(param_00,param_01) +{ + if(param_00[0] > param_01[0]) + { + param_00 = (param_01[0],param_00[1],param_00[2]); + } + + if(param_00[1] > param_01[1]) + { + param_00 = (param_00[0],param_01[1],param_00[2]); + } + + if(param_00[2] > param_01[2]) + { + param_00 = (param_00[0],param_00[1],param_01[2]); + } + + return param_00; +} + +//Function Number: 3 +func_2FCF(param_00,param_01) +{ + if(param_00[0] < param_01[0]) + { + param_00 = (param_01[0],param_00[1],param_00[2]); + } + + if(param_00[1] < param_01[1]) + { + param_00 = (param_00[0],param_01[1],param_00[2]); + } + + if(param_00[2] < param_01[2]) + { + param_00 = (param_00[0],param_00[1],param_01[2]); + } + + return param_00; +} + +//Function Number: 4 +func_2FD0(param_00,param_01,param_02) +{ + if(!isdefined(param_02)) + { + param_02 = 0; + } + + var_03 = []; + if(level.teamspawnpoints[param_00].size) + { + var_03 = level.teamspawnpoints[param_00]; + } + + level.teamspawnpoints[param_00] = getspawnpointarray(param_01); + if(!level.teamspawnpoints[param_00].size && !param_02) + { + maps\mp\gametypes\_callbacksetup::abortlevel(); + wait 1; + return; + } + + if(!isdefined(level.spawnpoints)) + { + level.spawnpoints = []; + } + + for(var_04 = 0;var_04 < level.teamspawnpoints[param_00].size;var_04++) + { + var_05 = level.teamspawnpoints[param_00][var_04]; + if(!isdefined(var_05.inited)) + { + var_05 spawnpointinit(); + level.spawnpoints[level.spawnpoints.size] = var_05; + } + } + + for(var_04 = 0;var_04 < var_03.size;var_04++) + { + var_06 = var_03[var_04].origin; + level.spawnmins = expandmins(level.spawnmins,var_06); + level.spawnmaxs = func_2FCF(level.spawnmaxs,var_06); + level.teamspawnpoints[param_00][level.teamspawnpoints[param_00].size] = var_03[var_04]; + } +} + +//Function Number: 5 +placespawnpoints(param_00) +{ + var_01 = getspawnpointarray(param_00); + if(!var_01.size) + { + maps\mp\gametypes\_callbacksetup::abortlevel(); + wait 1; + return; + } + + if(!isdefined(level.startspawnpoints)) + { + level.startspawnpoints = []; + } + + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + var_01[var_02] spawnpointinit(); + level.startspawnpoints[level.startspawnpoints.size] = var_01[var_02]; + } +} + +//Function Number: 6 +getspawnpointarray(param_00) +{ + var_01 = getentarray(param_00,"classname"); + if(!isdefined(level.extraspawnpoints) || !isdefined(level.extraspawnpoints[param_00])) + { + return var_01; + } + + for(var_02 = 0;var_02 < level.extraspawnpoints[param_00].size;var_02++) + { + var_01[var_01.size] = level.extraspawnpoints[param_00][var_02]; + } + + return var_01; +} + +//Function Number: 7 +func_2FD9(param_00) +{ + var_01 = getspawnpointarray(param_00); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + level.spawnmins = expandmins(level.spawnmins,var_01[var_02].origin); + level.spawnmaxs = func_2FCF(level.spawnmaxs,var_01[var_02].origin); + } +} + +//Function Number: 8 +func_2B8C() +{ + level.spawnmins = (0,0,0); + level.spawnmaxs = (0,0,0); + func_2FD9("mp_tdm_spawn_allies_start"); + func_2FD9("mp_tdm_spawn_axis_start"); + level.mapcenter = func_2FCD(level.spawnmins,level.spawnmaxs); + setmapcenter(level.mapcenter); +} + +//Function Number: 9 +spawnpointinit() +{ + var_00 = self; + var_01 = var_00.origin; + level.spawnmins = expandmins(level.spawnmins,var_01); + level.spawnmaxs = func_2FCF(level.spawnmaxs,var_01); + var_00 placespawnpoint(); + var_00.forward = anglestoforward(var_00.angles); + var_00.sighttracepoint = var_00.origin + (0,0,50); + var_00.lastspawnedplayer = var_00; + var_00.lastspawntime = gettime(); + var_02 = 1024; + var_00.outside = 1; + if(!bullettracepassed(var_00.sighttracepoint,var_00.sighttracepoint + (0,0,var_02),0,undefined)) + { + var_03 = var_00.sighttracepoint + var_00.forward * 100; + if(!bullettracepassed(var_03,var_03 + (0,0,var_02),0,undefined)) + { + var_00.outside = 0; + } + } + + var_04 = anglestoright(var_00.angles); + var_00.alternates = []; + func_2FDE(var_00,var_00.origin + var_04 * 45); + func_2FDE(var_00,var_00.origin - var_04 * 45); + spawnpointupdate(var_00); + var_00.inited = 1; +} + +//Function Number: 10 +func_2FDE(param_00,param_01) +{ + var_02 = playerphysicstrace(param_00.origin,param_00.origin + (0,0,18),0,undefined); + var_03 = var_02[2] - param_00.origin[2]; + var_04 = (param_01[0],param_01[1],param_01[2] + var_03); + var_05 = playerphysicstrace(var_02,var_04,0,undefined); + if(var_05 != var_04) + { + return; + } + + var_06 = playerphysicstrace(var_04,param_01); + param_00.alternates[param_00.alternates.size] = var_06; +} + +//Function Number: 11 +getteamspawnpoints(param_00) +{ + return level.teamspawnpoints[param_00]; +} + +//Function Number: 12 +func_2FE0(param_00,param_01) +{ + var_02 = undefined; + if(!isdefined(param_00) || param_00.size == 0) + { + return undefined; + } + + if(!isdefined(param_01)) + { + param_01 = 1; + } + + if(param_01) + { + var_02 = getbestweightedspawnpoint(param_00); + } + else + { + var_03 = getentarray("care_package","targetname"); + for(var_04 = 0;var_04 < param_00.size;var_04++) + { + if(isdefined(self.lastspawnpoint) && self.lastspawnpoint == param_00[var_04]) + { + continue; + } + + if(positionwouldtelefrag(param_00[var_04].origin)) + { + continue; + } + + if(var_03.size && !canspawn(param_00[var_04].origin)) + { + continue; + } + + var_02 = param_00[var_04]; + break; + } + + if(!isdefined(var_02)) + { + if(isdefined(self.lastspawnpoint) && !positionwouldtelefrag(self.lastspawnpoint.origin)) + { + for(var_04 = 0;var_04 < param_00.size;var_04++) + { + if(param_00[var_04] == self.lastspawnpoint) + { + var_02 = param_00[var_04]; + break; + } + } + } + } + } + + if(!isdefined(var_02)) + { + if(param_01) + { + var_02 = param_00[randomint(param_00.size)]; + } + else + { + var_02 = param_00[0]; + } + } + + return var_02; +} + +//Function Number: 13 +finalizespawnpointchoice(param_00) +{ + var_01 = gettime(); + self.lastspawnpoint = param_00; + self.lastspawntime = var_01; + param_00.lastspawnedplayer = self; + param_00.lastspawntime = var_01; +} + +//Function Number: 14 +getbestweightedspawnpoint(param_00) +{ + var_01 = maps\mp\_utility::getotherteam(self.team); + var_02 = 0; + for(;;) + { + var_03 = []; + var_03[0] = param_00[0]; + var_04 = param_00[0].weight; + for(var_05 = 1;var_05 < param_00.size;var_05++) + { + var_06 = param_00[var_05]; + if(var_06.weight > var_04) + { + var_03 = []; + var_03[0] = var_06; + var_04 = var_06.weight; + continue; + } + + if(var_06.weight == var_04) + { + var_03[var_03.size] = var_06; + } + } + + var_07 = var_03[randomint(var_03.size)]; + if(var_02 >= 3) + { + return var_07; + } + + var_08 = 0; + if(level.teambased) + { + var_08 = var_07.sights[var_01]; + } + else + { + var_08 = var_07.sights; + } + + if(var_08 > 0) + { + return var_07; + } + + if(isdefined(var_07.lastsighttracetime) && var_07.lastsighttracetime == gettime()) + { + return var_07; + } + + var_09 = func_3010(var_07); + if(var_09 == 0) + { + return var_07; + } + + var_09 = adjustsightvalue(var_09); + if(level.teambased) + { + var_07.sights[var_01] = var_07.sights[var_01] + var_09; + } + else + { + var_07.sights = var_07.sights + var_09; + } + + var_0A = func_300F() * var_09; + var_07.weight = var_07.weight - var_0A; + var_07.lastsighttracetime = gettime(); + var_02++; + } +} + +//Function Number: 15 +getspawnpoint_random(param_00) +{ + if(!isdefined(param_00)) + { + return undefined; + } + + for(var_01 = 0;var_01 < param_00.size;var_01++) + { + var_02 = randomint(param_00.size); + var_03 = param_00[var_01]; + param_00[var_01] = param_00[var_02]; + param_00[var_02] = var_03; + } + + if(isdefined(self.predictedspawnpoint)) + { + for(var_01 = 1;var_01 < param_00.size;var_01++) + { + if(param_00[var_01] == self.predictedspawnpoint) + { + var_04 = param_00[0]; + param_00[0] = param_00[var_01]; + param_00[var_01] = var_04; + break; + } + } + } + + return func_2FE0(param_00,0); +} + +//Function Number: 16 +getallotherplayers() +{ + var_00 = []; + for(var_01 = 0;var_01 < level.players.size;var_01++) + { + if(!isdefined(level.players[var_01])) + { + continue; + } + + var_02 = level.players[var_01]; + if(var_02.sessionstate == "spectating" || var_02 == self) + { + continue; + } + + var_00[var_00.size] = var_02; + } + + return var_00; +} + +//Function Number: 17 +initweights(param_00) +{ + for(var_01 = 0;var_01 < param_00.size;var_01++) + { + param_00[var_01].weight = 0; + } +} + +//Function Number: 18 +func_2FE6(param_00,param_01) +{ + if(!isdefined(param_00)) + { + return undefined; + } + + func_2FF0(); + initweights(param_00); + var_02 = 2; + var_03 = self.team; + var_04 = maps\mp\_utility::getotherteam(var_03); + var_05 = getentarray("care_package","targetname"); + foreach(var_07 in param_00) + { + if(var_07.numplayersatlastupdate > 0) + { + var_08 = var_07.weighteddistsum[var_03]; + var_09 = var_07.distsum[var_04]; + var_07.weight = var_09 - var_02 * var_08 / var_07.numplayersatlastupdate; + if(isdefined(level.favorclosespawnent)) + { + if(!isdefined(level.favorclosespawnscalar)) + { + level.favorclosespawnscalar = 1; + } + + var_0A = distance(var_07.origin,level.favorclosespawnent.origin); + var_07.weight = var_07.weight - var_0A * level.favorclosespawnscalar; + } + + if(isdefined(level.favorclosespawnentattacker)) + { + if(!isdefined(level.favorclosespawnscalarattacker)) + { + level.favorclosespawnscalarattacker = 1; + } + + var_0A = distance(var_07.origin,level.favorclosespawnentattacker.origin); + var_07.weight = var_07.weight - var_0A * level.favorclosespawnscalarattacker; + } + + if(isdefined(level.favorclosespawnentdefender)) + { + if(!isdefined(level.favorclosespawnscalardefender)) + { + level.favorclosespawnscalardefender = 1; + } + + var_0A = distance(var_07.origin,level.favorclosespawnentdefender.origin); + var_07.weight = var_07.weight - var_0A * level.favorclosespawnscalardefender; + } + } + else + { + var_07.weight = 0; + } + + if(var_05.size && !canspawn(var_07.origin)) + { + var_07.weight = var_07.weight - 500000; + } + } + + if(isdefined(param_01)) + { + for(var_0C = 0;var_0C < param_01.size;var_0C++) + { + param_01[var_0C].weight = param_01[var_0C].weight + -15536; + } + } + + if(isdefined(self.predictedspawnpoint) && isdefined(self.predictedspawnpoint.weight)) + { + self.predictedspawnpoint.weight = self.predictedspawnpoint.weight + 100; + } + + avoidsamespawn(); + avoidweapondamage(param_00); + func_3015(param_00,1); + if(isdefined(self.lastdeathpos) && level.gametype != "dom") + { + func_3013(param_00,self.lastdeathpos); + } + + var_0D = func_2FE0(param_00); + return var_0D; +} + +//Function Number: 19 +func_2FEC(param_00) +{ + if(!isdefined(param_00)) + { + return undefined; + } + + func_2FF0(); + var_01 = undefined; + var_02 = undefined; + var_03 = maps\mp\_utility::getotherteam(self.team); + if(!level.teambased) + { + var_03 = "all"; + } + + var_04 = 250000; + foreach(var_06 in param_00) + { + var_07 = var_06.mindist[var_03]; + foreach(var_09 in level.grenades) + { + if(!isdefined(var_09)) + { + continue; + } + + if(distancesquared(var_06.origin,var_09.origin) < var_04) + { + var_0A = distance(var_06.origin,var_09.origin) - 220; + if(var_0A < var_07) + { + if(var_0A < 0) + { + var_0A = 0; + } + + var_07 = var_0A; + } + } + } + + if(positionwouldtelefrag(var_06.origin)) + { + var_07 = var_07 - 200; + } + + if(isdefined(level.artillerydangercenters)) + { + var_0C = maps\mp\killstreaks\_airstrike::getairstrikedanger(var_06.origin); + if(var_0C > 0) + { + var_07 = 0; + } + } + + if(level.teambased) + { + if(var_06.sights[var_03] > 0) + { + var_07 = 0; + } + } + else if(var_06.sights > 0) + { + var_07 = 0; + } + + if(!isdefined(var_01) || var_07 > var_02) + { + var_01 = var_06; + var_02 = var_07; + } + } + + if(!isdefined(var_01)) + { + var_01 = param_00[randomint(param_00.size)]; + var_01.safespawndangerdist = 500; + } + else + { + var_01.safespawndangerdist = var_02; + } + + return var_01; +} + +//Function Number: 20 +func_2FEF(param_00) +{ + self.bestspawnpoint = undefined; + if(!isdefined(param_00)) + { + return undefined; + } + + func_2FF0(); + initweights(param_00); + var_01 = getallotherplayers(); + var_02 = 1600; + var_03 = 1200; + if(var_01.size > 0) + { + for(var_04 = 0;var_04 < param_00.size;var_04++) + { + var_05 = 0; + var_06 = 0; + for(var_07 = 0;var_07 < var_01.size;var_07++) + { + if(var_01[var_07].sessionstate == "dead" && isdefined(var_01[var_07].bestspawnpoint)) + { + var_08 = distance(param_00[var_04].origin,var_01[var_07].bestspawnpoint.origin); + } + else + { + var_08 = distance(param_00[var_04].origin,var_01[var_07].origin); + } + + if(var_08 < var_03) + { + var_06 = var_06 + var_03 - var_08 / var_03; + } + + var_09 = abs(var_08 - var_02); + var_05 = var_05 + var_09; + } + + var_0A = var_05 / var_01.size; + var_0B = var_02 - var_0A / var_02; + param_00[var_04].weight = var_0B - var_06 * 2 + randomfloat(0.2); + } + } + + var_0C = getentarray("care_package","targetname"); + for(var_04 = 0;var_04 < param_00.size;var_04++) + { + if(var_0C.size && !canspawn(param_00[var_04].origin)) + { + param_00[var_04].weight = param_00[var_04].weight - 500000; + } + } + + if(isdefined(self.predictedspawnpoint) && isdefined(self.predictedspawnpoint.weight)) + { + self.predictedspawnpoint.weight = self.predictedspawnpoint.weight + 100; + } + + avoidsamespawn(); + avoidweapondamage(param_00); + func_3015(param_00,0); + return getspawnpoint_final_dm(param_00); +} + +//Function Number: 21 +getspawnpoint_final_dm(param_00) +{ + var_01 = undefined; + if(!isdefined(param_00) || param_00.size == 0) + { + return undefined; + } + + var_01 = getbestweightedspawnpoint(param_00); + if(!isdefined(var_01)) + { + var_01 = param_00[randomint(param_00.size)]; + } + + self.bestspawnpoint = var_01; + return var_01; +} + +//Function Number: 22 +func_2FF0() +{ +} + +//Function Number: 23 +init() +{ + setupkillstreakspawnshield(); + level.spawnlogic_deaths = []; + level.spawnlogic_spawnkills = []; + level.players = []; + level.grenades = []; + level.pipebombs = []; + level.turrets = []; + level.helis = []; + level.tanks = []; + level.scramblers = []; + level.ims = []; + level.ugvs = []; + level.teamspawnpoints["axis"] = []; + level.teamspawnpoints["allies"] = []; + level thread trackgrenades(); + level thread trackmissiles(); + level.spawnmins = (0,0,0); + level.spawnmaxs = (0,0,0); + if(isdefined(level.safespawns)) + { + for(var_00 = 0;var_00 < level.safespawns.size;var_00++) + { + level.safespawns[var_00] spawnpointinit(); + } + } +} + +//Function Number: 24 +sightcheckcost() +{ + var_00 = 30; + for(;;) + { + var_01 = getdvar("scr_debugcost"); + if(var_01 == "bullet" && isdefined(level.players[0])) + { + for(var_02 = 0;var_02 < var_00;var_02++) + { + bullettracepassed(level.players[0].origin + (0,0,50),(0,0,0),0,undefined); + } + } + else if(var_01 == "damagecone" && isdefined(level.players[0])) + { + for(var_02 = 0;var_02 < var_00;var_02++) + { + level.players[0] damageconetrace((0,0,0)); + } + } + else if(var_01 == "sightcone" && isdefined(level.players[0])) + { + for(var_02 = 0;var_02 < var_00;var_02++) + { + level.players[0] sightconetrace((0,0,0)); + } + } + else + { + wait 1; + } + + wait 0.05; + } +} + +//Function Number: 25 +watchspawnprofile() +{ + for(;;) + { + while(getdvar("scr_spawnprofile") == "" || getdvar("scr_spawnprofile") == "0") + { + wait 0.05; + } + + thread spawnprofile(); + while(getdvar("scr_spawnprofile") != "" && getdvar("scr_spawnprofile") != "0") + { + wait 0.05; + } + + level notify("stop_spawn_profile"); + } +} + +//Function Number: 26 +spawnprofile() +{ + level endon("stop_spawn_profile"); + var_00 = spawnstruct(); + for(;;) + { + var_01 = getdvar("scr_spawnprofile"); + if(var_01 != "allies" && var_01 != "axis") + { + if(common_scripts\utility::cointoss()) + { + var_01 = "allies"; + } + else + { + var_01 = "axis"; + } + } + + var_00.team = var_01; + var_00.pers["team"] = var_01; + var_00 func_2FE6(level.spawnpoints); + wait 0.05; + } +} + +//Function Number: 27 +spawngraphcheck() +{ + for(;;) + { + if(getdvarint("scr_spawngraph") < 1) + { + wait 3; + continue; + } + + thread spawngraph(); + while(getdvarint("scr_spawngraph") >= 1) + { + wait 0.2; + continue; + } + + level notify("end_spawn_graph"); + level notify("spawn_graph_stop_draw"); + } +} + +//Function Number: 28 +spawngraph() +{ + level endon("end_spawn_graph"); + var_00 = 20; + var_01 = 20; + var_02 = 0.1; + var_03 = []; + var_04 = getentarray("minimap_corner","targetname"); + if(var_04.size != 2) + { + return; + } + + var_05 = var_04[0].origin; + var_06 = var_04[0].origin; + if(var_04[1].origin[0] > var_06[0]) + { + var_06 = (var_04[1].origin[0],var_06[1],var_06[2]); + } + else + { + var_05 = (var_04[1].origin[0],var_05[1],var_05[2]); + } + + if(var_04[1].origin[1] > var_06[1]) + { + var_06 = (var_06[0],var_04[1].origin[1],var_06[2]); + } + else + { + var_05 = (var_05[0],var_04[1].origin[1],var_05[2]); + } + + var_07 = 0; + for(var_08 = 0;var_08 < var_01;var_08++) + { + var_09 = var_08 / var_01 - 1; + for(var_0A = 0;var_0A < var_00;var_0A++) + { + var_0B = var_0A / var_00 - 1; + var_03[var_07] = spawnstruct(); + var_03[var_07].origin = (var_05[0] * var_0B + var_06[0] * 1 - var_0B,var_05[1] * var_09 + var_06[1] * 1 - var_09,var_05[2]); + var_03[var_07].angles = (0,0,0); + var_03[var_07].forward = anglestoforward(var_03[var_07].angles); + var_03[var_07].sighttracepoint = var_03[var_07].origin; + var_03[var_07].outside = 1; + var_03[var_07].secondfloor = 0; + var_03[var_07].fake = 1; + var_07++; + } + } + + var_0C = 0; + for(;;) + { + var_0D = 0; + var_0E = 10; + for(var_07 = 0;var_07 < var_0E;var_07++) + { + if(!level.players.size || !isdefined(level.players[0].team) || level.players[0].team == "spectator" || !isdefined(level.players[0].class)) + { + break; + } + + var_0F = var_0D + var_03.size / var_0E; + if(var_07 == var_0E - 1) + { + var_0F = var_03.size; + } + + while(var_0D < var_0F) + { + spawnpointupdate(var_03[var_0D]); + var_0D++; + } + + wait 0.05; + } + + if(!level.players.size || !isdefined(level.players[0].team) || level.players[0].team == "spectator" || !isdefined(level.players[0].class)) + { + wait 1; + continue; + } + + level.players[0] func_2FE6(var_03); + for(var_07 = 0;var_07 < var_03.size;var_07++) + { + setupspawngraphpoint(var_03[var_07],var_02); + } + + var_0C = 1; + level.players[0] func_2FFE(var_03,var_00,var_01,var_02); + wait 0.05; + } +} + +//Function Number: 29 +func_2FFE(param_00,param_01,param_02,param_03) +{ + level notify("spawn_graph_stop_draw"); + var_04 = 0; + for(var_05 = 0;var_05 < param_02;var_05++) + { + var_06 = var_05 / param_02 - 1; + for(var_07 = 0;var_07 < param_01;var_07++) + { + var_08 = var_07 / param_01 - 1; + if(var_05 > 0) + { + thread func_3001(param_00[var_04],param_00[var_04 - param_01],param_03); + } + + if(var_07 > 0) + { + thread func_3001(param_00[var_04],param_00[var_04 - 1],param_03); + } + + var_04++; + } + } +} + +//Function Number: 30 +setupspawngraphpoint(param_00,param_01) +{ + param_00.visible = 1; + if(param_00.weight < -1000 / param_01) + { + param_00.visible = 0; + } +} + +//Function Number: 31 +func_3001(param_00,param_01,param_02) +{ + if(!param_00.visible || !param_01.visible) + { + return; + } + + var_03 = param_00.origin + (0,0,param_00.weight * param_02 + 100); + var_04 = param_01.origin + (0,0,param_01.weight * param_02 + 100); + level endon("spawn_graph_stop_draw"); + for(;;) + { + wait 0.05; + waittillframeend; + } +} + +//Function Number: 32 +loopbotspawns() +{ + for(;;) + { + if(getdvarint("scr_killbots") < 1) + { + wait 3; + continue; + } + + if(!isdefined(level.players)) + { + wait 0.05; + continue; + } + + var_00 = []; + for(var_01 = 0;var_01 < level.players.size;var_01++) + { + if(!isdefined(level.players[var_01])) + { + continue; + } + + if(level.players[var_01].sessionstate == "playing" && issubstr(level.players[var_01].name,"bot")) + { + var_00[var_00.size] = level.players[var_01]; + } + } + + if(var_00.size > 0) + { + if(getdvarint("scr_killbots") == 1) + { + var_02 = var_00[randomint(var_00.size)]; + var_03 = var_00[randomint(var_00.size)]; + var_03 thread [[ level.callbackplayerdamage ]](var_02,var_02,1000,0,"MOD_RIFLE_BULLET","none",(0,0,0),(0,0,0),"none",0); + } + else + { + var_04 = getdvarint("scr_killbots"); + var_05 = undefined; + for(var_06 = 0;var_06 < var_04;var_06++) + { + var_02 = var_00[randomint(var_00.size)]; + var_03 = var_00[randomint(var_00.size)]; + while(isdefined(var_05) && var_03 == var_05) + { + var_03 = var_00[randomint(var_00.size)]; + } + + var_03 thread [[ level.callbackplayerdamage ]](var_02,var_02,1000,0,"MOD_RIFLE_BULLET","none",(0,0,0),(0,0,0),"none",0); + var_05 = var_03; + } + } + } + + if(getdvarfloat("scr_killbottimer") > 0.05) + { + wait getdvarfloat("scr_killbottimer"); + continue; + } + + wait 0.05; + } +} + +//Function Number: 33 +trackgrenades() +{ + for(;;) + { + level.grenades = getentarray("grenade","classname"); + wait 0.05; + } +} + +//Function Number: 34 +trackmissiles() +{ + for(;;) + { + level.missiles = getentarray("rocket","classname"); + wait 0.05; + } +} + +//Function Number: 35 +ispointvulnerable(param_00) +{ + var_01 = self.origin + level.claymoremodelcenteroffset; + var_02 = param_00 + (0,0,32); + var_03 = distancesquared(var_01,var_02); + var_04 = anglestoforward(self.angles); + if(var_03 < level.claymoredetectionradius * level.claymoredetectionradius) + { + var_05 = vectornormalize(var_02 - var_01); + var_06 = acos(vectordot(var_05,var_04)); + if(var_06 < level.claymoredetectionconeangle) + { + return 1; + } + } + + return 0; +} + +//Function Number: 36 +avoidweapondamage(param_00) +{ + var_01 = 100000; + if(getdvar("scr_spawnpointweaponpenalty") != "" && getdvar("scr_spawnpointweaponpenalty") != "0") + { + var_01 = getdvarfloat("scr_spawnpointweaponpenalty"); + } + + var_02 = -3036; + for(var_03 = 0;var_03 < param_00.size;var_03++) + { + for(var_04 = 0;var_04 < level.grenades.size;var_04++) + { + if(!isdefined(level.grenades[var_04])) + { + continue; + } + + if(distancesquared(param_00[var_03].origin,level.grenades[var_04].origin) < var_02) + { + param_00[var_03].weight = param_00[var_03].weight - var_01; + } + } + + foreach(var_06 in level.mines) + { + if(!isdefined(var_06)) + { + continue; + } + + if(distancesquared(param_00[var_03].origin,var_06.origin) < var_02) + { + param_00[var_03].weight = param_00[var_03].weight - var_01; + } + } + + if(!isdefined(level.artillerydangercenters)) + { + continue; + } + + var_08 = maps\mp\killstreaks\_airstrike::getairstrikedanger(param_00[var_03].origin); + if(var_08 > 0) + { + var_09 = var_08 * var_01; + param_00[var_03].weight = param_00[var_03].weight - var_09; + } + } +} + +//Function Number: 37 +spawnperframeupdate() +{ + var_00 = 0; + for(;;) + { + wait 0.05; + if(!isdefined(level.spawnpoints)) + { + return; + } + + var_00 = var_00 + 1 % level.spawnpoints.size; + if(getdvar("scr_spawnpoint_forceindex") != "") + { + var_00 = getdvarint("scr_spawnpoint_forceindex"); + } + + var_01 = level.spawnpoints[var_00]; + spawnpointupdate(var_01); + } +} + +//Function Number: 38 +adjustsightvalue(param_00) +{ + if(param_00 <= 0) + { + return 0; + } + + if(param_00 >= 1) + { + return 1; + } + + return param_00 * 0.5 + 0.25; +} + +//Function Number: 39 +spawnpointupdate(param_00) +{ + if(level.teambased) + { + param_00.sights["axis"] = 0; + param_00.sights["allies"] = 0; + } + else + { + param_00.sights = 0; + } + + var_01 = param_00.forward; + var_02 = 0; + param_00.distsum["all"] = 0; + param_00.distsum["allies"] = 0; + param_00.distsum["axis"] = 0; + param_00.weighteddistsum["all"] = 0; + param_00.weighteddistsum["allies"] = 0; + param_00.weighteddistsum["axis"] = 0; + param_00.mindist["all"] = 9999999; + param_00.mindist["allies"] = 9999999; + param_00.mindist["axis"] = 9999999; + param_00.numplayersatlastupdate = 0; + var_03["all"] = 0; + param_00["all"] = 0; + var_05 = undefined; + var_06 = gettime(); + var_07 = "all"; + var_08 = level.teambased; + foreach(var_0A in level.players) + { + if(var_0A.sessionstate != "playing") + { + continue; + } + + var_0B = var_0A.origin - param_00.origin; + var_0B = (var_0B[0],var_0B[1],0); + var_0C = 1; + var_0D = length(var_0B); + if(var_08) + { + var_07 = var_0A.team; + } + + if(var_0D < param_00.mindist[var_07]) + { + param_00.mindist[var_07] = var_0D; + } + + if(var_0A.wasti && var_06 - var_0A.spawntime < 15000) + { + var_0C = var_0C * 0.1; + } + + if(var_0A.issniper) + { + var_0C = var_0C * 0.5; + } + + var_41[var_07] = var_41[var_07] + var_0C; + param_00.weighteddistsum[var_07] = param_00.weighteddistsum[var_07] + var_0D * var_0C; + param_00.distsum[var_07] = param_00.distsum[var_07] + var_0D; + param_00.numplayersatlastupdate++ = var_41["axis"]; + var_03[var_07]++ = 0; + var_0E = anglestoforward(var_0A.angles); + if(vectordot(var_01,var_0B) < 0 && vectordot(var_0E,var_0B) > 0) + { + continue; + } + + if(var_0A getstance() == "stand") + { + var_0F = 72; + } + else if(var_0A getstance() == "crouch") + { + var_0F = 54; + } + else + { + var_0F = 32; + } + + var_10 = spawnsighttrace(param_00,param_00.origin + (0,0,var_0F),var_0A.origin + (0,0,var_0F)); + param_00.lastsighttracetime = gettime(); + if(var_10 > 0) + { + var_10 = adjustsightvalue(var_10); + if(var_08) + { + param_00.sights[var_07] = param_00.sights[var_07] + var_10; + continue; + } + + param_00.sights = param_00.sights + var_10; + } + } + + var_12 = maps\mp\_utility::func_300C("scr_spawn_enemyavoiddist",2000); + var_13 = 2000; + var_14 = maps\mp\_utility::func_300C("scr_spawn_enemyavoiddist_strict",750); + var_15 = maps\mp\_utility::getintproperty("scr_spawn_enemyavoidpenalty_strict",-15536); + foreach(var_07, var_17 in var_41) + { + if(var_41[var_07]) + { + param_00.weighteddistsum[var_07] = param_00.weighteddistsum[var_07] / var_41[var_07] * var_03[var_07]; + } + + var_18 = 0; + var_19 = param_00.mindist[var_07]; + if(var_19 < var_12) + { + var_18 = var_13 * 1 - var_19 / var_12; + } + + if(var_19 < var_14) + { + var_18 = var_18 + var_15; + } + + param_00.nearbypenalty[var_07] = var_18; + } + + foreach(var_1B in level.tanks) + { + var_10 = spawnsighttrace(param_00,param_00.sighttracepoint,var_1B.origin + (0,0,50)); + param_00.lastsighttracetime = gettime(); + if(var_10 <= 0) + { + continue; + } + + var_10 = adjustsightvalue(var_10); + if(var_08) + { + param_00.sights[var_1B.team] = param_00.sights[var_1B.team] + var_10; + continue; + } + + param_00.sights = param_00.sights + var_10; + } + + foreach(var_1E in level.turrets) + { + if(!isdefined(var_1E)) + { + continue; + } + + var_10 = spawnsighttrace(param_00,param_00.sighttracepoint,var_1E.origin + (0,0,50)); + param_00.lastsighttracetime = gettime(); + if(var_10 <= 0) + { + continue; + } + + var_10 = adjustsightvalue(var_10); + if(var_08) + { + param_00.sights[var_1E.team] = param_00.sights[var_1E.team] + var_10; + continue; + } + + param_00.sights = param_00.sights + var_10; + } + + foreach(var_21 in level.ims) + { + if(!isdefined(var_21)) + { + continue; + } + + if(!isdefined(var_21.attackheightpos)) + { + continue; + } + + var_10 = spawnsighttrace(param_00,param_00.sighttracepoint,var_21.attackheightpos); + param_00.lastsighttracetime = gettime(); + if(var_10 <= 0) + { + continue; + } + + var_10 = adjustsightvalue(var_10); + if(var_08) + { + param_00.sights[var_21.team] = param_00.sights[var_21.team] + var_10; + continue; + } + + param_00.sights = param_00.sights + var_10; + } + + foreach(var_24 in level.ugvs) + { + if(!isdefined(var_24)) + { + continue; + } + + var_10 = spawnsighttrace(param_00,param_00.sighttracepoint,var_24.origin + (0,0,50)); + param_00.lastsighttracetime = gettime(); + if(var_10 <= 0) + { + continue; + } + + var_10 = adjustsightvalue(var_10); + if(var_08) + { + param_00.sights[var_24.team] = param_00.sights[var_24.team] + var_10; + continue; + } + + param_00.sights = param_00.sights + var_10; + } +} + +//Function Number: 40 +func_300F() +{ + if(getdvar("scr_spawnpointlospenalty") != "" && getdvar("scr_spawnpointlospenalty") != "0") + { + return getdvarfloat("scr_spawnpointlospenalty"); + } + + return 100000; +} + +//Function Number: 41 +func_3010(param_00) +{ + var_01 = undefined; + var_02 = 1E+08; + var_03 = undefined; + var_04 = 1E+08; + foreach(var_06 in level.players) + { + if(var_06.team == self.team && level.teambased) + { + continue; + } + + if(var_06.sessionstate != "playing") + { + continue; + } + + if(var_06 == self) + { + continue; + } + + var_07 = distancesquared(param_00.origin,var_06.origin); + if(var_07 < var_02) + { + var_03 = var_01; + var_04 = var_02; + var_01 = var_06; + var_02 = var_07; + continue; + } + + if(var_07 < var_04) + { + var_03 = var_06; + var_04 = var_07; + } + } + + if(isdefined(var_01)) + { + if(var_01 getstance() == "stand") + { + var_09 = 72; + } + else if(var_02 getstance() == "crouch") + { + var_09 = 54; + } + else + { + var_09 = 32; + } + + var_0A = spawnsighttrace(param_00,param_00.origin + (0,0,var_09),var_01.origin + (0,0,var_09)); + if(var_0A > 0) + { + var_0A = adjustsightvalue(var_0A); + return var_0A; + } + } + + if(isdefined(var_03)) + { + if(var_03 getstance() == "stand") + { + var_09 = 72; + } + else if(var_04 getstance() == "crouch") + { + var_09 = 54; + } + else + { + var_09 = 32; + } + + var_0A = spawnsighttrace(param_00,param_00.origin + (0,0,var_09),var_03.origin + (0,0,var_09)); + if(var_0A > 0) + { + var_0A = adjustsightvalue(var_0A); + return var_0A; + } + } + + return 0; +} + +//Function Number: 42 +func_3011() +{ + var_00 = getdvarfloat("scr_revengespawnpenalty",25000); + return var_00; +} + +//Function Number: 43 +getrevengespawndistancesq() +{ + var_00 = getdvarfloat("scr_revengespawndist",1200); + return var_00 * var_00; +} + +//Function Number: 44 +func_3013(param_00,param_01) +{ + var_02 = getrevengespawndistancesq(); + var_03 = func_3011(); + foreach(var_05 in param_00) + { + var_06 = distancesquared(var_05.origin,param_01); + if(var_06 < var_02) + { + var_05.weight = var_05.weight - var_03; + } + } + + if(isdefined(self.lastattacker) && isdefined(self.lastattacker.origin)) + { + func_3014(param_00,self.lastattacker.origin); + } +} + +//Function Number: 45 +func_3014(param_00,param_01) +{ + var_02 = getrevengespawndistancesq(); + var_03 = func_3011(); + foreach(var_05 in param_00) + { + var_06 = distancesquared(var_05.origin,param_01); + if(var_06 < var_02) + { + var_05.weight = var_05.weight - var_03; + } + } +} + +//Function Number: 46 +func_3015(param_00,param_01) +{ + var_02 = func_300F(); + var_03 = "axis"; + if(self.team == "axis") + { + var_03 = "allies"; + } + + if(param_01) + { + foreach(var_05 in param_00) + { + var_06 = var_02 * var_05.sights[var_03]; + var_05.weight = var_05.weight - var_06; + } + } + else + { + foreach(var_05 in var_02) + { + var_06 = var_02 * var_05.sights; + var_05.weight = var_05.weight - var_06; + } + + var_03 = "all"; + } + + foreach(var_05 in param_00) + { + var_05.weight = var_05.weight - var_05.nearbypenalty[var_03]; + if(positionwouldtelefrag(var_05.origin)) + { + var_0B = 1; + foreach(var_0D in var_05.alternates) + { + if(positionwouldtelefrag(var_0D)) + { + var_0B++; + continue; + } + + break; + } + + var_06 = 100000; + if(var_0B < var_05.alternates.size + 1) + { + var_06 = 1500 * var_0B; + if(isdefined(self.forcespawnnearteammates)) + { + var_06 = 0; + } + } + + var_05.weight = var_05.weight - var_06; + } + } +} + +//Function Number: 47 +func_3017(param_00,param_01) +{ + var_02 = gettime(); + var_03 = 10000; + var_04 = 1048576; + foreach(var_06 in param_00) + { + var_07 = var_06.lastspawnedplayer; + if(!isalive(var_07)) + { + continue; + } + + if(param_01 && var_06.lastspawnedplayer.team == self.team) + { + continue; + } + + if(var_06.lastspawnedplayer == self) + { + continue; + } + + var_08 = var_02 - var_06.lastspawntime; + if(var_08 < var_03) + { + var_09 = distancesquared(var_06.lastspawnedplayer.origin,var_06.origin); + if(var_09 < var_04) + { + var_0A = 5000 * 1 - var_09 / var_04 * 1 - var_08 / var_03; + var_06.weight = var_06.weight - var_0A; + } + else + { + var_06.lastspawnedplayer = undefined; + } + + continue; + } + + var_06.lastspawnedplayer = undefined; + } +} + +//Function Number: 48 +avoidsamespawn() +{ + var_00 = self.lastspawnpoint; + if(!isdefined(var_00) || !isdefined(var_00.weight)) + { + return; + } + + var_00.weight = var_00.weight - 1000; +} + +//Function Number: 49 +setupkillstreakspawnshield() +{ + level.killstreakspawnshield = 5000; + if(getdvar("killstreakSpawnShield") != "") + { + var_00 = getdvarint("killstreakSpawnShield"); + if(var_00 >= 0 && var_00 <= 10000) + { + level.killstreakspawnshield = var_00; + } + } +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/gametypes/_spectating.gsc b/MW3/Xbox/MP/maps/mp/gametypes/_spectating.gsc new file mode 100644 index 0000000..ed49f73 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/gametypes/_spectating.gsc @@ -0,0 +1,161 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_spectating.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 8 + * Decompile Time: 124 ms + * Timestamp: 10/27/2023 2:25:53 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level.spectateoverride["allies"] = spawnstruct(); + level.spectateoverride["axis"] = spawnstruct(); + level thread onplayerconnect(); +} + +//Function Number: 2 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_00 thread func_2747(); + var_00 thread func_2748(); + var_00 thread func_2A87(); + } +} + +//Function Number: 3 +func_2747() +{ + self endon("disconnect"); + for(;;) + { + self waittill("joined_team"); + setspectatepermissions(); + } +} + +//Function Number: 4 +func_2748() +{ + self endon("disconnect"); + for(;;) + { + self waittill("joined_spectators"); + setspectatepermissions(); + } +} + +//Function Number: 5 +func_2A87() +{ + self endon("disconnect"); + for(;;) + { + self waittill("spectating_cycle"); + var_00 = self getspectatingplayer(); + if(isdefined(var_00)) + { + self setcarddisplayslot(var_00,6); + } + } +} + +//Function Number: 6 +updatespectatesettings() +{ + level endon("game_ended"); + for(var_00 = 0;var_00 < level.players.size;var_00++) + { + level.players[var_00] setspectatepermissions(); + } +} + +//Function Number: 7 +getotherteam(param_00) +{ + if(param_00 == "axis") + { + return "allies"; + } + + if(param_00 == "allies") + { + return "axis"; + } + + return "none"; +} + +//Function Number: 8 +setspectatepermissions() +{ + var_00 = self.sessionteam; + if(level.gameended && gettime() - level.gameendtime >= 2000) + { + self allowspectateteam("allies",0); + self allowspectateteam("axis",0); + self allowspectateteam("freelook",0); + self allowspectateteam("none",1); + return; + } + + var_01 = maps\mp\gametypes\_tweakables::func_270D("game","spectatetype"); + switch(var_01) + { + case 0: + self allowspectateteam("allies",0); + self allowspectateteam("axis",0); + self allowspectateteam("freelook",0); + self allowspectateteam("none",0); + break; + + case 1: + if(!level.teambased) + { + self allowspectateteam("allies",1); + self allowspectateteam("axis",1); + self allowspectateteam("none",1); + self allowspectateteam("freelook",0); + } + else if(isdefined(var_00) && var_00 == "allies" || var_00 == "axis") + { + self allowspectateteam(var_00,1); + self allowspectateteam(getotherteam(var_00),0); + self allowspectateteam("freelook",0); + self allowspectateteam("none",0); + } + else + { + self allowspectateteam("allies",0); + self allowspectateteam("axis",0); + self allowspectateteam("freelook",0); + self allowspectateteam("none",0); + } + break; + + case 2: + self allowspectateteam("allies",1); + self allowspectateteam("axis",1); + self allowspectateteam("freelook",1); + self allowspectateteam("none",1); + break; + } + + if(isdefined(var_00) && var_00 == "axis" || var_00 == "allies") + { + if(isdefined(level.spectateoverride[var_00].allowfreespectate)) + { + self allowspectateteam("freelook",1); + } + + if(isdefined(level.spectateoverride[var_00].allowenemyspectate)) + { + self allowspectateteam(getotherteam(var_00),1); + } + } +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/gametypes/_teams.gsc b/MW3/Xbox/MP/maps/mp/gametypes/_teams.gsc new file mode 100644 index 0000000..37be30b --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/gametypes/_teams.gsc @@ -0,0 +1,1020 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_teams.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 41 + * Decompile Time: 532 ms + * Timestamp: 10/27/2023 2:25:55 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + func_2745(); + level.teambalance = getdvarint("scr_teambalance"); + level.maxclients = getdvarint("sv_maxclients"); + level._effect["thermal_beacon"] = loadfx("misc/thermal_beacon_inverted"); + var_00 = level._effect["thermal_beacon"]; + precachefxteamthermal(var_00,"J_Spine4"); + func_2761(); + level.freeplayers = []; + if(level.teambased) + { + level thread onplayerconnect(); + level thread func_2757(); + wait 0.15; + level thread func_274C(); + return; + } + + level thread onfreeplayerconnect(); + wait 0.15; + level thread updatefreeplayertimes(); +} + +//Function Number: 2 +func_2745() +{ + setdvar("g_TeamName_Allies",func_276B("allies")); + setdvar("g_TeamIcon_Allies",getteamicon("allies")); + setdvar("g_TeamIcon_MyAllies",getteamicon("allies")); + setdvar("g_TeamIcon_EnemyAllies",getteamicon("allies")); + var_00 = getteamcolor("allies"); + setdvar("g_ScoresColor_Allies",var_00[0] + " " + var_00[1] + " " + var_00[2]); + setdvar("g_TeamName_Axis",func_276B("axis")); + setdvar("g_TeamIcon_Axis",getteamicon("axis")); + setdvar("g_TeamIcon_MyAxis",getteamicon("axis")); + setdvar("g_TeamIcon_EnemyAxis",getteamicon("axis")); + var_00 = getteamcolor("axis"); + setdvar("g_ScoresColor_Axis",var_00[0] + " " + var_00[1] + " " + var_00[2]); + setdvar("g_ScoresColor_Spectator",".25 .25 .25"); + setdvar("g_ScoresColor_Free",".76 .78 .10"); + setdvar("g_teamTitleColor_MyTeam",".6 .8 .6"); + setdvar("g_teamTitleColor_EnemyTeam","1 .45 .5"); +} + +//Function Number: 3 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_00 thread func_2747(); + var_00 thread func_2748(); + var_00 thread onplayerspawned(); + var_00 thread trackplayedtime(); + } +} + +//Function Number: 4 +onfreeplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_00 thread func_2765(); + } +} + +//Function Number: 5 +func_2747() +{ + self endon("disconnect"); + for(;;) + { + self waittill("joined_team"); + updateteamtime(); + } +} + +//Function Number: 6 +func_2748() +{ + self endon("disconnect"); + for(;;) + { + self waittill("joined_spectators"); + self.pers["teamTime"] = undefined; + } +} + +//Function Number: 7 +trackplayedtime() +{ + self endon("disconnect"); + self.timeplayed["allies"] = 0; + self.timeplayed["axis"] = 0; + self.timeplayed["free"] = 0; + self.timeplayed["other"] = 0; + self.timeplayed["total"] = 0; + maps\mp\_utility::func_274B("prematch_done"); + for(;;) + { + if(game["state"] == "playing") + { + if(self.sessionteam == "allies") + { + self.timeplayed["allies"]++; + self.timeplayed["total"]++; + } + else if(self.sessionteam == "axis") + { + self.timeplayed["axis"]++; + self.timeplayed["total"]++; + } + else if(self.sessionteam == "spectator") + { + self.timeplayed["other"]++; + } + } + + wait 1; + } +} + +//Function Number: 8 +func_274C() +{ + if(!level.rankedmatch) + { + return; + } + + level endon("game_ended"); + for(;;) + { + maps\mp\gametypes\_hostmigration::func_273E(); + foreach(var_01 in level.players) + { + var_01 updateplayedtime(); + } + + wait 1; + } +} + +//Function Number: 9 +updateplayedtime() +{ + if(!maps\mp\_utility::rankingenabled()) + { + return; + } + + if(self.timeplayed["allies"]) + { + maps\mp\gametypes\_persistence::func_274F("timePlayedAllies",self.timeplayed["allies"]); + maps\mp\gametypes\_persistence::func_274F("timePlayedTotal",self.timeplayed["allies"]); + maps\mp\gametypes\_persistence::func_2750("round","timePlayed",self.timeplayed["allies"]); + if(!self.prestigedoublexp) + { + maps\mp\gametypes\_persistence::stataddchildbufferedwithmax("xpMultiplierTimePlayed",0,self.timeplayed["allies"],self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][0]); + maps\mp\gametypes\_persistence::stataddchildbufferedwithmax("xpMultiplierTimePlayed",1,self.timeplayed["allies"],self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][1]); + maps\mp\gametypes\_persistence::stataddchildbufferedwithmax("xpMultiplierTimePlayed",2,self.timeplayed["allies"],self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][2]); + } + + maps\mp\gametypes\_persistence::stataddchildbufferedwithmax("challengeXPMultiplierTimePlayed",0,self.timeplayed["allies"],self.bufferedchildstatsmax["challengeXPMaxMultiplierTimePlayed"][0]); + maps\mp\gametypes\_persistence::stataddchildbufferedwithmax("weaponXPMultiplierTimePlayed",0,self.timeplayed["allies"],self.bufferedchildstatsmax["weaponXPMaxMultiplierTimePlayed"][0]); + maps\mp\gametypes\_persistence::stataddbufferedwithmax("prestigeDoubleXpTimePlayed",self.timeplayed["allies"],self.bufferedstatsmax["prestigeDoubleXpMaxTimePlayed"]); + maps\mp\gametypes\_persistence::stataddbufferedwithmax("prestigeDoubleWeaponXpTimePlayed",self.timeplayed["allies"],self.bufferedstatsmax["prestigeDoubleWeaponXpMaxTimePlayed"]); + } + + if(self.timeplayed["axis"]) + { + maps\mp\gametypes\_persistence::func_274F("timePlayedOpfor",self.timeplayed["axis"]); + maps\mp\gametypes\_persistence::func_274F("timePlayedTotal",self.timeplayed["axis"]); + maps\mp\gametypes\_persistence::func_2750("round","timePlayed",self.timeplayed["axis"]); + if(!self.prestigedoublexp) + { + maps\mp\gametypes\_persistence::stataddchildbufferedwithmax("xpMultiplierTimePlayed",0,self.timeplayed["axis"],self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][0]); + maps\mp\gametypes\_persistence::stataddchildbufferedwithmax("xpMultiplierTimePlayed",1,self.timeplayed["axis"],self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][1]); + maps\mp\gametypes\_persistence::stataddchildbufferedwithmax("xpMultiplierTimePlayed",2,self.timeplayed["axis"],self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][2]); + } + + maps\mp\gametypes\_persistence::stataddchildbufferedwithmax("challengeXPMultiplierTimePlayed",0,self.timeplayed["axis"],self.bufferedchildstatsmax["challengeXPMaxMultiplierTimePlayed"][0]); + maps\mp\gametypes\_persistence::stataddchildbufferedwithmax("weaponXPMultiplierTimePlayed",0,self.timeplayed["axis"],self.bufferedchildstatsmax["weaponXPMaxMultiplierTimePlayed"][0]); + maps\mp\gametypes\_persistence::stataddbufferedwithmax("prestigeDoubleXpTimePlayed",self.timeplayed["axis"],self.bufferedstatsmax["prestigeDoubleXpMaxTimePlayed"]); + maps\mp\gametypes\_persistence::stataddbufferedwithmax("prestigeDoubleWeaponXpTimePlayed",self.timeplayed["axis"],self.bufferedstatsmax["prestigeDoubleWeaponXpMaxTimePlayed"]); + } + + if(self.timeplayed["other"]) + { + maps\mp\gametypes\_persistence::func_274F("timePlayedOther",self.timeplayed["other"]); + maps\mp\gametypes\_persistence::func_274F("timePlayedTotal",self.timeplayed["other"]); + maps\mp\gametypes\_persistence::func_2750("round","timePlayed",self.timeplayed["other"]); + if(!self.prestigedoublexp) + { + maps\mp\gametypes\_persistence::stataddchildbufferedwithmax("xpMultiplierTimePlayed",0,self.timeplayed["other"],self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][0]); + maps\mp\gametypes\_persistence::stataddchildbufferedwithmax("xpMultiplierTimePlayed",1,self.timeplayed["other"],self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][1]); + maps\mp\gametypes\_persistence::stataddchildbufferedwithmax("xpMultiplierTimePlayed",2,self.timeplayed["other"],self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][2]); + } + + maps\mp\gametypes\_persistence::stataddchildbufferedwithmax("challengeXPMultiplierTimePlayed",0,self.timeplayed["other"],self.bufferedchildstatsmax["challengeXPMaxMultiplierTimePlayed"][0]); + maps\mp\gametypes\_persistence::stataddchildbufferedwithmax("weaponXPMultiplierTimePlayed",0,self.timeplayed["other"],self.bufferedchildstatsmax["weaponXPMaxMultiplierTimePlayed"][0]); + maps\mp\gametypes\_persistence::stataddbufferedwithmax("prestigeDoubleXpTimePlayed",self.timeplayed["other"],self.bufferedstatsmax["prestigeDoubleXpMaxTimePlayed"]); + maps\mp\gametypes\_persistence::stataddbufferedwithmax("prestigeDoubleWeaponXpTimePlayed",self.timeplayed["other"],self.bufferedstatsmax["prestigeDoubleWeaponXpMaxTimePlayed"]); + } + + if(game["state"] == "postgame") + { + return; + } + + self.timeplayed["allies"] = 0; + self.timeplayed["axis"] = 0; + self.timeplayed["other"] = 0; +} + +//Function Number: 10 +updateteamtime() +{ + if(game["state"] != "playing") + { + return; + } + + self.pers["teamTime"] = gettime(); +} + +//Function Number: 11 +func_2756() +{ + for(;;) + { + var_00 = getdvarint("scr_teambalance"); + if(level.teambalance != var_00) + { + level.teambalance = getdvarint("scr_teambalance"); + } + + wait 1; + } +} + +//Function Number: 12 +func_2757() +{ + level.teamlimit = level.maxclients / 2; + level thread func_2756(); + wait 0.15; + if(level.teambalance && maps\mp\_utility::func_26EC()) + { + if(isdefined(game["BalanceTeamsNextRound"])) + { + iprintlnbold(&"MP_AUTOBALANCE_NEXT_ROUND"); + } + + level waittill("restarting"); + if(isdefined(game["BalanceTeamsNextRound"])) + { + level func_275A(); + game["BalanceTeamsNextRound"] = undefined; + return; + } + + if(!getteambalance()) + { + game["BalanceTeamsNextRound"] = 1; + return; + } + + return; + } + + level endon("game_ended"); + for(;;) + { + if(level.teambalance) + { + if(!getteambalance()) + { + iprintlnbold(&"MP_AUTOBALANCE_SECONDS",15); + wait 15; + if(!getteambalance()) + { + level func_275A(); + } + } + + wait 59; + } + + wait 1; + } +} + +//Function Number: 13 +getteambalance() +{ + level.team["allies"] = 0; + level.team["axis"] = 0; + var_00 = level.players; + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + if(isdefined(var_00[var_01].pers["team"]) && var_00[var_01].pers["team"] == "allies") + { + level.team["allies"]++; + continue; + } + + if(isdefined(var_00[var_01].pers["team"]) && var_00[var_01].pers["team"] == "axis") + { + level.team["axis"]++; + } + } + + if(level.team["allies"] > level.team["axis"] + level.teambalance || level.team["axis"] > level.team["allies"] + level.teambalance) + { + return 0; + } + + return 1; +} + +//Function Number: 14 +func_275A() +{ + iprintlnbold(game["strings"]["autobalance"]); + var_00 = []; + var_01 = []; + var_02 = level.players; + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + if(!isdefined(var_02[var_03].pers["teamTime"])) + { + continue; + } + + if(isdefined(var_02[var_03].pers["team"]) && var_02[var_03].pers["team"] == "allies") + { + var_00[var_00.size] = var_02[var_03]; + continue; + } + + if(isdefined(var_02[var_03].pers["team"]) && var_02[var_03].pers["team"] == "axis") + { + var_01[var_01.size] = var_02[var_03]; + } + } + + var_04 = undefined; + while(var_00.size > var_01.size + 1 || var_01.size > var_00.size + 1) + { + if(var_00.size > var_01.size + 1) + { + for(var_05 = 0;var_05 < var_00.size;var_05++) + { + if(isdefined(var_00[var_05].dont_auto_balance)) + { + continue; + } + + if(!isdefined(var_04)) + { + var_04 = var_00[var_05]; + continue; + } + + if(var_00[var_05].pers["teamTime"] > var_04.pers["teamTime"]) + { + var_04 = var_00[var_05]; + } + } + + var_04 [[ level.axis ]](); + } + else if(var_01.size > var_00.size + 1) + { + for(var_05 = 0;var_05 < var_01.size;var_05++) + { + if(isdefined(var_01[var_05].dont_auto_balance)) + { + continue; + } + + if(!isdefined(var_04)) + { + var_04 = var_01[var_05]; + continue; + } + + if(var_01[var_05].pers["teamTime"] > var_04.pers["teamTime"]) + { + var_04 = var_01[var_05]; + } + } + + var_04 [[ level.allies ]](); + } + + var_04 = undefined; + var_00 = []; + var_01 = []; + var_02 = level.players; + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + if(isdefined(var_02[var_03].pers["team"]) && var_02[var_03].pers["team"] == "allies") + { + var_00[var_00.size] = var_02[var_03]; + continue; + } + + if(isdefined(var_02[var_03].pers["team"]) && var_02[var_03].pers["team"] == "axis") + { + var_01[var_01.size] = var_02[var_03]; + } + } + } +} + +//Function Number: 15 +setghilliemodels(param_00) +{ + level.environment = param_00; + switch(param_00) + { + case "desert": + mptype\mptype_ally_ghillie_desert::precache(); + mptype\mptype_opforce_ghillie_desert::precache(); + game["allies_model"]["GHILLIE"] = ::mptype\mptype_ally_ghillie_desert::main; + game["axis_model"]["GHILLIE"] = ::mptype\mptype_opforce_ghillie_desert::main; + break; + + case "arctic": + mptype\mptype_ally_ghillie_arctic::precache(); + mptype\mptype_opforce_ghillie_arctic::precache(); + game["allies_model"]["GHILLIE"] = ::mptype\mptype_ally_ghillie_arctic::main; + game["axis_model"]["GHILLIE"] = ::mptype\mptype_opforce_ghillie_arctic::main; + break; + + case "urban": + mptype\mptype_ally_ghillie_urban::precache(); + mptype\mptype_opforce_ghillie_urban::precache(); + game["allies_model"]["GHILLIE"] = ::mptype\mptype_ally_ghillie_urban::main; + game["axis_model"]["GHILLIE"] = ::mptype\mptype_opforce_ghillie_urban::main; + break; + + case "forest": + mptype\mptype_ally_ghillie_forest::precache(); + mptype\mptype_opforce_ghillie_forest::precache(); + game["allies_model"]["GHILLIE"] = ::mptype\mptype_ally_ghillie_forest::main; + game["axis_model"]["GHILLIE"] = ::mptype\mptype_opforce_ghillie_forest::main; + break; + + case "forest_militia": + mptype\mptype_ally_ghillie_forest::precache(); + mptype\mptype_opforce_ghillie_militia::precache(); + game["allies_model"]["GHILLIE"] = ::mptype\mptype_ally_ghillie_forest::main; + game["axis_model"]["GHILLIE"] = ::mptype\mptype_opforce_ghillie_militia::main; + break; + + case "desert_militia": + mptype\mptype_ally_ghillie_desert::precache(); + mptype\mptype_opforce_ghillie_militia::precache(); + game["allies_model"]["GHILLIE"] = ::mptype\mptype_ally_ghillie_desert::main; + game["axis_model"]["GHILLIE"] = ::mptype\mptype_opforce_ghillie_militia::main; + break; + + case "arctic_militia": + mptype\mptype_ally_ghillie_arctic::precache(); + mptype\mptype_opforce_ghillie_militia::precache(); + game["allies_model"]["GHILLIE"] = ::mptype\mptype_ally_ghillie_arctic::main; + game["axis_model"]["GHILLIE"] = ::mptype\mptype_opforce_ghillie_militia::main; + break; + + case "urban_militia": + mptype\mptype_ally_ghillie_urban::precache(); + mptype\mptype_opforce_ghillie_militia::precache(); + game["allies_model"]["GHILLIE"] = ::mptype\mptype_ally_ghillie_urban::main; + game["axis_model"]["GHILLIE"] = ::mptype\mptype_opforce_ghillie_militia::main; + break; + + default: + break; + } +} + +//Function Number: 16 +setteammodels(param_00,param_01) +{ + switch(param_01) + { + case "delta_multicam": + mptype\mptype_delta_multicam_assault::precache(); + mptype\mptype_delta_multicam_lmg::precache(); + mptype\mptype_delta_multicam_smg::precache(); + mptype\mptype_delta_multicam_shotgun::precache(); + mptype\mptype_delta_multicam_sniper::precache(); + mptype\mptype_delta_multicam_riot::precache(); + mptype\mptype_ally_juggernaut::precache(); + game[param_00 + "_model"]["SNIPER"] = ::mptype\mptype_delta_multicam_sniper::main; + game[param_00 + "_model"]["LMG"] = ::mptype\mptype_delta_multicam_lmg::main; + game[param_00 + "_model"]["ASSAULT"] = ::mptype\mptype_delta_multicam_assault::main; + game[param_00 + "_model"]["SHOTGUN"] = ::mptype\mptype_delta_multicam_shotgun::main; + game[param_00 + "_model"]["SMG"] = ::mptype\mptype_delta_multicam_smg::main; + game[param_00 + "_model"]["RIOT"] = ::mptype\mptype_delta_multicam_riot::main; + game[param_00 + "_model"]["JUGGERNAUT"] = ::mptype\mptype_ally_juggernaut::main; + break; + + case "sas_urban": + mptype\mptype_sas_urban_assault::precache(); + mptype\mptype_sas_urban_lmg::precache(); + mptype\mptype_sas_urban_shotgun::precache(); + mptype\mptype_sas_urban_smg::precache(); + mptype\mptype_sas_urban_sniper::precache(); + mptype\mptype_ally_juggernaut::precache(); + game[param_00 + "_model"]["SNIPER"] = ::mptype\mptype_sas_urban_sniper::main; + game[param_00 + "_model"]["LMG"] = ::mptype\mptype_sas_urban_lmg::main; + game[param_00 + "_model"]["ASSAULT"] = ::mptype\mptype_sas_urban_assault::main; + game[param_00 + "_model"]["SHOTGUN"] = ::mptype\mptype_sas_urban_shotgun::main; + game[param_00 + "_model"]["SMG"] = ::mptype\mptype_sas_urban_smg::main; + game[param_00 + "_model"]["RIOT"] = ::mptype\mptype_sas_urban_smg::main; + game[param_00 + "_model"]["JUGGERNAUT"] = ::mptype\mptype_ally_juggernaut::main; + break; + + case "gign_paris": + mptype\mptype_gign_paris_assault::precache(); + mptype\mptype_gign_paris_lmg::precache(); + mptype\mptype_gign_paris_shotgun::precache(); + mptype\mptype_gign_paris_smg::precache(); + mptype\mptype_gign_paris_sniper::precache(); + mptype\mptype_gign_paris_riot::precache(); + mptype\mptype_ally_juggernaut::precache(); + game[param_00 + "_model"]["SNIPER"] = ::mptype\mptype_gign_paris_sniper::main; + game[param_00 + "_model"]["LMG"] = ::mptype\mptype_gign_paris_lmg::main; + game[param_00 + "_model"]["ASSAULT"] = ::mptype\mptype_gign_paris_assault::main; + game[param_00 + "_model"]["SHOTGUN"] = ::mptype\mptype_gign_paris_shotgun::main; + game[param_00 + "_model"]["SMG"] = ::mptype\mptype_gign_paris_smg::main; + game[param_00 + "_model"]["RIOT"] = ::mptype\mptype_gign_paris_riot::main; + game[param_00 + "_model"]["JUGGERNAUT"] = ::mptype\mptype_ally_juggernaut::main; + break; + + case "pmc_africa": + mptype\mptype_pmc_africa_assault::precache(); + mptype\mptype_pmc_africa_lmg::precache(); + mptype\mptype_pmc_africa_smg::precache(); + mptype\mptype_pmc_africa_shotgun::precache(); + mptype\mptype_pmc_africa_sniper::precache(); + mptype\mptype_pmc_africa_riot::precache(); + mptype\mptype_ally_juggernaut::precache(); + game[param_00 + "_model"]["SNIPER"] = ::mptype\mptype_pmc_africa_sniper::main; + game[param_00 + "_model"]["LMG"] = ::mptype\mptype_pmc_africa_lmg::main; + game[param_00 + "_model"]["ASSAULT"] = ::mptype\mptype_pmc_africa_assault::main; + game[param_00 + "_model"]["SHOTGUN"] = ::mptype\mptype_pmc_africa_shotgun::main; + game[param_00 + "_model"]["SMG"] = ::mptype\mptype_pmc_africa_smg::main; + game[param_00 + "_model"]["RIOT"] = ::mptype\mptype_pmc_africa_riot::main; + game[param_00 + "_model"]["JUGGERNAUT"] = ::mptype\mptype_ally_juggernaut::main; + break; + + case "opforce_air": + mptype\mptype_opforce_air_assault::precache(); + mptype\mptype_opforce_air_lmg::precache(); + mptype\mptype_opforce_air_shotgun::precache(); + mptype\mptype_opforce_air_smg::precache(); + mptype\mptype_opforce_air_sniper::precache(); + mptype\mptype_opforce_air_riot::precache(); + mptype\mptype_opforce_juggernaut::precache(); + game[param_00 + "_model"]["SNIPER"] = ::mptype\mptype_opforce_air_sniper::main; + game[param_00 + "_model"]["LMG"] = ::mptype\mptype_opforce_air_lmg::main; + game[param_00 + "_model"]["ASSAULT"] = ::mptype\mptype_opforce_air_assault::main; + game[param_00 + "_model"]["SHOTGUN"] = ::mptype\mptype_opforce_air_shotgun::main; + game[param_00 + "_model"]["SMG"] = ::mptype\mptype_opforce_air_smg::main; + game[param_00 + "_model"]["RIOT"] = ::mptype\mptype_opforce_air_riot::main; + game[param_00 + "_model"]["JUGGERNAUT"] = ::mptype\mptype_opforce_juggernaut::main; + break; + + case "opforce_snow": + mptype\mptype_opforce_snow_assault::precache(); + mptype\mptype_opforce_snow_lmg::precache(); + mptype\mptype_opforce_snow_shotgun::precache(); + mptype\mptype_opforce_snow_smg::precache(); + mptype\mptype_opforce_snow_sniper::precache(); + mptype\mptype_opforce_snow_riot::precache(); + mptype\mptype_opforce_juggernaut::precache(); + game[param_00 + "_model"]["SNIPER"] = ::mptype\mptype_opforce_snow_sniper::main; + game[param_00 + "_model"]["LMG"] = ::mptype\mptype_opforce_snow_lmg::main; + game[param_00 + "_model"]["ASSAULT"] = ::mptype\mptype_opforce_snow_assault::main; + game[param_00 + "_model"]["SHOTGUN"] = ::mptype\mptype_opforce_snow_shotgun::main; + game[param_00 + "_model"]["SMG"] = ::mptype\mptype_opforce_snow_smg::main; + game[param_00 + "_model"]["RIOT"] = ::mptype\mptype_opforce_snow_riot::main; + game[param_00 + "_model"]["JUGGERNAUT"] = ::mptype\mptype_opforce_juggernaut::main; + break; + + case "opforce_urban": + mptype\mptype_opforce_urban_assault::precache(); + mptype\mptype_opforce_urban_lmg::precache(); + mptype\mptype_opforce_urban_shotgun::precache(); + mptype\mptype_opforce_urban_smg::precache(); + mptype\mptype_opforce_urban_sniper::precache(); + mptype\mptype_opforce_urban_riot::precache(); + mptype\mptype_opforce_juggernaut::precache(); + game[param_00 + "_model"]["SNIPER"] = ::mptype\mptype_opforce_urban_sniper::main; + game[param_00 + "_model"]["LMG"] = ::mptype\mptype_opforce_urban_lmg::main; + game[param_00 + "_model"]["ASSAULT"] = ::mptype\mptype_opforce_urban_assault::main; + game[param_00 + "_model"]["SHOTGUN"] = ::mptype\mptype_opforce_urban_shotgun::main; + game[param_00 + "_model"]["SMG"] = ::mptype\mptype_opforce_urban_smg::main; + game[param_00 + "_model"]["RIOT"] = ::mptype\mptype_opforce_urban_riot::main; + game[param_00 + "_model"]["JUGGERNAUT"] = ::mptype\mptype_opforce_juggernaut::main; + break; + + case "opforce_woodland": + mptype\mptype_opforce_woodland_assault::precache(); + mptype\mptype_opforce_woodland_lmg::precache(); + mptype\mptype_opforce_woodland_shotgun::precache(); + mptype\mptype_opforce_woodland_smg::precache(); + mptype\mptype_opforce_woodland_sniper::precache(); + mptype\mptype_opforce_woodland_riot::precache(); + mptype\mptype_opforce_juggernaut::precache(); + game[param_00 + "_model"]["SNIPER"] = ::mptype\mptype_opforce_woodland_sniper::main; + game[param_00 + "_model"]["LMG"] = ::mptype\mptype_opforce_woodland_lmg::main; + game[param_00 + "_model"]["ASSAULT"] = ::mptype\mptype_opforce_woodland_assault::main; + game[param_00 + "_model"]["SHOTGUN"] = ::mptype\mptype_opforce_woodland_shotgun::main; + game[param_00 + "_model"]["SMG"] = ::mptype\mptype_opforce_woodland_smg::main; + game[param_00 + "_model"]["RIOT"] = ::mptype\mptype_opforce_woodland_riot::main; + game[param_00 + "_model"]["JUGGERNAUT"] = ::mptype\mptype_opforce_juggernaut::main; + break; + + case "opforce_africa": + mptype\mptype_opforce_africa_assault::precache(); + mptype\mptype_opforce_africa_lmg::precache(); + mptype\mptype_opforce_africa_shotgun::precache(); + mptype\mptype_opforce_africa_smg::precache(); + mptype\mptype_opforce_africa_sniper::precache(); + mptype\mptype_opforce_africa_riot::precache(); + mptype\mptype_opforce_juggernaut::precache(); + game[param_00 + "_model"]["SNIPER"] = ::mptype\mptype_opforce_africa_lmg::main; + game[param_00 + "_model"]["LMG"] = ::mptype\mptype_opforce_africa_lmg::main; + game[param_00 + "_model"]["ASSAULT"] = ::mptype\mptype_opforce_africa_assault::main; + game[param_00 + "_model"]["SHOTGUN"] = ::mptype\mptype_opforce_africa_shotgun::main; + game[param_00 + "_model"]["SMG"] = ::mptype\mptype_opforce_africa_smg::main; + game[param_00 + "_model"]["RIOT"] = ::mptype\mptype_opforce_africa_riot::main; + game[param_00 + "_model"]["JUGGERNAUT"] = ::mptype\mptype_opforce_juggernaut::main; + break; + + case "opforce_henchmen": + mptype\mptype_opforce_henchmen_assault::precache(); + mptype\mptype_opforce_henchmen_lmg::precache(); + mptype\mptype_opforce_henchmen_shotgun::precache(); + mptype\mptype_opforce_henchmen_smg::precache(); + mptype\mptype_opforce_henchmen_sniper::precache(); + mptype\mptype_opforce_henchmen_riot::precache(); + mptype\mptype_opforce_juggernaut::precache(); + game[param_00 + "_model"]["SNIPER"] = ::mptype\mptype_opforce_henchmen_sniper::main; + game[param_00 + "_model"]["LMG"] = ::mptype\mptype_opforce_henchmen_lmg::main; + game[param_00 + "_model"]["ASSAULT"] = ::mptype\mptype_opforce_henchmen_assault::main; + game[param_00 + "_model"]["SHOTGUN"] = ::mptype\mptype_opforce_henchmen_shotgun::main; + game[param_00 + "_model"]["SMG"] = ::mptype\mptype_opforce_henchmen_smg::main; + game[param_00 + "_model"]["RIOT"] = ::mptype\mptype_opforce_henchmen_riot::main; + game[param_00 + "_model"]["JUGGERNAUT"] = ::mptype\mptype_opforce_juggernaut::main; + break; + } +} + +//Function Number: 17 +func_2761() +{ + setteammodels("allies",game["allies"]); + setteammodels("axis",game["axis"]); + setghilliemodels(getmapcustom("environment")); +} + +//Function Number: 18 +func_2762(param_00,param_01) +{ + var_02 = self.team; + if(isdefined(game[var_02 + "_model"][param_00])) + { + [[ game[var_02 + "_model"][param_00] ]](); + return; + } + + var_03 = tablelookup("mp/statstable.csv",4,param_00,2); + switch(var_03) + { + case "weapon_smg": + [[ game[var_02 + "_model"]["SMG"] ]](); + break; + + case "weapon_assault": + [[ game[var_02 + "_model"]["ASSAULT"] ]](); + break; + + case "weapon_sniper": + if(level.environment != "" && self isitemunlocked("ghillie_" + level.environment) && game[var_02] != "opforce_africa") + { + [[ game[var_02 + "_model"]["GHILLIE"] ]](); + } + else + { + [[ game[var_02 + "_model"]["SNIPER"] ]](); + } + break; + + case "weapon_lmg": + [[ game[var_02 + "_model"]["LMG"] ]](); + break; + + case "weapon_riot": + [[ game[var_02 + "_model"]["RIOT"] ]](); + break; + + case "weapon_shotgun": + [[ game[var_02 + "_model"]["SHOTGUN"] ]](); + break; + + default: + [[ game[var_02 + "_model"]["ASSAULT"] ]](); + break; + } + + if(maps\mp\_utility::isjuggernaut()) + { + [[ game[var_02 + "_model"]["JUGGERNAUT"] ]](); + } +} + +//Function Number: 19 +func_2764() +{ + var_00 = level.players; + var_01 = 0; + var_02 = 0; + for(var_03 = 0;var_03 < var_00.size;var_03++) + { + if(var_00[var_03] == self) + { + continue; + } + + if(isdefined(var_00[var_03].pers["team"]) && var_00[var_03].pers["team"] == "allies") + { + var_01++; + continue; + } + + if(isdefined(var_00[var_03].pers["team"]) && var_00[var_03].pers["team"] == "axis") + { + var_02++; + } + } + + var_00["allies"] = var_01; + var_00["axis"] = var_02; + return var_00; +} + +//Function Number: 20 +func_2765() +{ + self endon("disconnect"); + self.timeplayed["allies"] = 0; + self.timeplayed["axis"] = 0; + self.timeplayed["other"] = 0; + self.timeplayed["total"] = 0; + for(;;) + { + if(game["state"] == "playing") + { + if(isdefined(self.pers["team"]) && self.pers["team"] == "allies" && self.sessionteam != "spectator") + { + self.timeplayed["allies"]++; + self.timeplayed["total"]++; + } + else if(isdefined(self.pers["team"]) && self.pers["team"] == "axis" && self.sessionteam != "spectator") + { + self.timeplayed["axis"]++; + self.timeplayed["total"]++; + } + else + { + self.timeplayed["other"]++; + } + } + + wait 1; + } +} + +//Function Number: 21 +updatefreeplayertimes() +{ + if(!level.rankedmatch) + { + return; + } + + var_00 = 0; + for(;;) + { + var_00++; + if(var_00 >= level.players.size) + { + var_00 = 0; + } + + if(isdefined(level.players[var_00])) + { + level.players[var_00] updatefreeplayedtime(); + } + + wait 1; + } +} + +//Function Number: 22 +updatefreeplayedtime() +{ + if(!maps\mp\_utility::rankingenabled()) + { + return; + } + + if(self.timeplayed["allies"]) + { + maps\mp\gametypes\_persistence::func_274F("timePlayedAllies",self.timeplayed["allies"]); + maps\mp\gametypes\_persistence::func_274F("timePlayedTotal",self.timeplayed["allies"]); + maps\mp\gametypes\_persistence::func_2750("round","timePlayed",self.timeplayed["allies"]); + if(!self.prestigedoublexp) + { + maps\mp\gametypes\_persistence::stataddchildbufferedwithmax("xpMultiplierTimePlayed",0,self.timeplayed["allies"],self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][0]); + maps\mp\gametypes\_persistence::stataddchildbufferedwithmax("xpMultiplierTimePlayed",1,self.timeplayed["allies"],self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][1]); + maps\mp\gametypes\_persistence::stataddchildbufferedwithmax("xpMultiplierTimePlayed",2,self.timeplayed["allies"],self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][2]); + } + + maps\mp\gametypes\_persistence::stataddbufferedwithmax("prestigeDoubleXpTimePlayed",self.timeplayed["allies"],self.bufferedstatsmax["prestigeDoubleXpMaxTimePlayed"]); + maps\mp\gametypes\_persistence::stataddbufferedwithmax("prestigeDoubleWeaponXpTimePlayed",self.timeplayed["allies"],self.bufferedstatsmax["prestigeDoubleWeaponXpMaxTimePlayed"]); + } + + if(self.timeplayed["axis"]) + { + maps\mp\gametypes\_persistence::func_274F("timePlayedOpfor",self.timeplayed["axis"]); + maps\mp\gametypes\_persistence::func_274F("timePlayedTotal",self.timeplayed["axis"]); + maps\mp\gametypes\_persistence::func_2750("round","timePlayed",self.timeplayed["axis"]); + if(!self.prestigedoublexp) + { + maps\mp\gametypes\_persistence::stataddchildbufferedwithmax("xpMultiplierTimePlayed",0,self.timeplayed["axis"],self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][0]); + maps\mp\gametypes\_persistence::stataddchildbufferedwithmax("xpMultiplierTimePlayed",1,self.timeplayed["axis"],self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][1]); + maps\mp\gametypes\_persistence::stataddchildbufferedwithmax("xpMultiplierTimePlayed",2,self.timeplayed["axis"],self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][2]); + } + + maps\mp\gametypes\_persistence::stataddbufferedwithmax("prestigeDoubleXpTimePlayed",self.timeplayed["axis"],self.bufferedstatsmax["prestigeDoubleXpMaxTimePlayed"]); + maps\mp\gametypes\_persistence::stataddbufferedwithmax("prestigeDoubleWeaponXpTimePlayed",self.timeplayed["axis"],self.bufferedstatsmax["prestigeDoubleWeaponXpMaxTimePlayed"]); + } + + if(self.timeplayed["other"]) + { + maps\mp\gametypes\_persistence::func_274F("timePlayedOther",self.timeplayed["other"]); + maps\mp\gametypes\_persistence::func_274F("timePlayedTotal",self.timeplayed["other"]); + maps\mp\gametypes\_persistence::func_2750("round","timePlayed",self.timeplayed["other"]); + if(!self.prestigedoublexp) + { + maps\mp\gametypes\_persistence::stataddchildbufferedwithmax("xpMultiplierTimePlayed",0,self.timeplayed["other"],self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][0]); + maps\mp\gametypes\_persistence::stataddchildbufferedwithmax("xpMultiplierTimePlayed",1,self.timeplayed["other"],self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][1]); + maps\mp\gametypes\_persistence::stataddchildbufferedwithmax("xpMultiplierTimePlayed",2,self.timeplayed["other"],self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][2]); + } + + maps\mp\gametypes\_persistence::stataddbufferedwithmax("prestigeDoubleXpTimePlayed",self.timeplayed["other"],self.bufferedstatsmax["prestigeDoubleXpMaxTimePlayed"]); + maps\mp\gametypes\_persistence::stataddbufferedwithmax("prestigeDoubleWeaponXpTimePlayed",self.timeplayed["other"],self.bufferedstatsmax["prestigeDoubleWeaponXpMaxTimePlayed"]); + } + + if(game["state"] == "postgame") + { + return; + } + + self.timeplayed["allies"] = 0; + self.timeplayed["axis"] = 0; + self.timeplayed["other"] = 0; +} + +//Function Number: 23 +getjointeampermissions(param_00) +{ + var_01 = 0; + var_02 = level.players; + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + var_04 = var_02[var_03]; + if(isdefined(var_04.pers["team"]) && var_04.pers["team"] == param_00) + { + var_01++; + } + } + + if(var_01 < level.teamlimit) + { + return 1; + } + + return 0; +} + +//Function Number: 24 +onplayerspawned() +{ + level endon("game_ended"); + self waittill("spawned_player"); +} + +//Function Number: 25 +getteamname(param_00) +{ + return tablelookupistring("mp/factionTable.csv",0,game[param_00],1); +} + +//Function Number: 26 +func_276B(param_00) +{ + return tablelookupistring("mp/factionTable.csv",0,game[param_00],2); +} + +//Function Number: 27 +getteamforfeitedstring(param_00) +{ + return tablelookupistring("mp/factionTable.csv",0,game[param_00],4); +} + +//Function Number: 28 +func_276D(param_00) +{ + return tablelookupistring("mp/factionTable.csv",0,game[param_00],3); +} + +//Function Number: 29 +getteamicon(param_00) +{ + return tablelookup("mp/factionTable.csv",0,game[param_00],5); +} + +//Function Number: 30 +getteamhudicon(param_00) +{ + return tablelookup("mp/factionTable.csv",0,game[param_00],6); +} + +//Function Number: 31 +func_2770(param_00) +{ + return tablelookup("mp/factionTable.csv",0,game[param_00],17); +} + +//Function Number: 32 +getteamvoiceprefix(param_00) +{ + return tablelookup("mp/factionTable.csv",0,game[param_00],7); +} + +//Function Number: 33 +func_2772(param_00) +{ + return tablelookup("mp/factionTable.csv",0,game[param_00],8); +} + +//Function Number: 34 +func_2773(param_00) +{ + return tablelookup("mp/factionTable.csv",0,game[param_00],9); +} + +//Function Number: 35 +func_2774(param_00) +{ + return tablelookup("mp/factionTable.csv",0,game[param_00],10); +} + +//Function Number: 36 +func_2775(param_00) +{ + return tablelookup("mp/factionTable.csv",0,game[param_00],11); +} + +//Function Number: 37 +func_2776(param_00) +{ + return tablelookup("mp/factionTable.csv",0,game[param_00],12); +} + +//Function Number: 38 +func_2777(param_00) +{ + return tablelookup("mp/factionTable.csv",0,game[param_00],13); +} + +//Function Number: 39 +getteamcolor(param_00) +{ + return (maps\mp\_utility::func_EBF(tablelookup("mp/factionTable.csv",0,game[param_00],14)),maps\mp\_utility::func_EBF(tablelookup("mp/factionTable.csv",0,game[param_00],15)),maps\mp\_utility::func_EBF(tablelookup("mp/factionTable.csv",0,game[param_00],16))); +} + +//Function Number: 40 +getteamcratemodel(param_00) +{ + return tablelookup("mp/factionTable.csv",0,game[param_00],18); +} + +//Function Number: 41 +getteamdeploymodel(param_00) +{ + return tablelookup("mp/factionTable.csv",0,game[param_00],19); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/gametypes/_weapons.gsc b/MW3/Xbox/MP/maps/mp/gametypes/_weapons.gsc new file mode 100644 index 0000000..1e4d4cb --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/gametypes/_weapons.gsc @@ -0,0 +1,3436 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\_weapons.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 112 + * Decompile Time: 1681 ms + * Timestamp: 10/27/2023 2:26:00 AM +*******************************************************************/ + +//Function Number: 1 +attachmentgroup(param_00) +{ + return tablelookup("mp/attachmentTable.csv",4,param_00,2); +} + +//Function Number: 2 +getattachmentlist() +{ + var_00 = []; + var_01 = 0; + var_02 = tablelookup("mp/attachmentTable.csv",9,var_01,4); + while(var_02 != "") + { + var_00[var_00.size] = var_02; + var_01++; + var_02 = tablelookup("mp/attachmentTable.csv",9,var_01,4); + } + + return common_scripts\utility::alphabetize(var_00); +} + +//Function Number: 3 +init() +{ + level.scavenger_altmode = 1; + level.scavenger_secondary = 1; + level.maxperplayerexplosives = max(maps\mp\_utility::getintproperty("scr_maxPerPlayerExplosives",2),1); + level.riotshieldxpbullets = maps\mp\_utility::getintproperty("scr_riotShieldXPBullets",15); + switch(maps\mp\_utility::getintproperty("perk_scavengerMode",0)) + { + case 1: + level.scavenger_altmode = 0; + break; + + case 2: + level.scavenger_secondary = 0; + break; + + case 3: + level.scavenger_altmode = 0; + level.scavenger_secondary = 0; + break; + } + + var_00 = getattachmentlist(); + var_01 = 149; + level.weaponlist = []; + for(var_02 = 0;var_02 <= var_01;var_02++) + { + var_03 = tablelookup("mp/statstable.csv",0,var_02,4); + if(var_03 == "") + { + continue; + } + + if(!issubstr(tablelookup("mp/statsTable.csv",0,var_02,2),"weapon_")) + { + continue; + } + + if(issubstr(var_03,"iw5_")) + { + var_04 = strtok(var_03,"_"); + var_03 = var_04[0] + "_" + var_04[1] + "_mp"; + level.weaponlist[level.weaponlist.size] = var_03; + continue; + } + else + { + level.weaponlist[level.weaponlist.size] = var_03 + "_mp"; + } + + var_05 = []; + for(var_06 = 0;var_06 < 10;var_06++) + { + var_07 = tablelookup("mp/statStable.csv",0,var_02,var_06 + 11); + if(var_07 == "") + { + break; + } + + var_05[var_07] = 1; + } + + var_08 = []; + foreach(var_07 in var_00) + { + if(!isdefined(var_05[var_07])) + { + continue; + } + + level.weaponlist[level.weaponlist.size] = var_03 + "_" + var_07 + "_mp"; + var_08[var_08.size] = var_07; + } + + var_0B = []; + for(var_0C = 0;var_0C < var_08.size - 1;var_0C++) + { + var_0D = tablelookuprownum("mp/attachmentCombos.csv",0,var_08[var_0C]); + for(var_0E = var_0C + 1;var_0E < var_08.size;var_0E++) + { + if(tablelookup("mp/attachmentCombos.csv",0,var_08[var_0E],var_0D) == "no") + { + continue; + } + + var_0B[var_0B.size] = var_08[var_0C] + "_" + var_08[var_0E]; + } + } + + foreach(var_10 in var_0B) + { + level.weaponlist[level.weaponlist.size] = var_03 + "_" + var_10 + "_mp"; + } + } + + foreach(var_13 in level.weaponlist) + { + precacheitem(var_13); + } + + precacheitem("flare_mp"); + precacheitem("scavenger_bag_mp"); + precacheitem("frag_grenade_short_mp"); + precacheitem("c4death_mp"); + precacheitem("destructible_car"); + precacheitem("destructible_toy"); + precacheitem("bouncingbetty_mp"); + precacheitem("scrambler_mp"); + precacheitem("portable_radar_mp"); + precacheshellshock("default"); + precacheshellshock("concussion_grenade_mp"); + thread maps\mp\_flashgrenades::main(); + thread maps\mp\_entityheadicons::init(); + thread maps\mp\_empgrenade::init(); + var_16 = 70; + level.claymoredetectiondot = cos(var_16); + level.claymoredetectionmindist = 20; + level.claymoredetectiongraceperiod = 0.75; + level.claymoredetonateradius = 192; + level.minedetectiongraceperiod = 0.3; + level.minedetectionradius = 100; + level.minedetectionheight = 20; + level.minedamageradius = 256; + level.minedamagemin = 70; + level.minedamagemax = 210; + level.minedamagehalfheight = 46; + level.mineselfdestructtime = 120; + level.mine_launch = loadfx("impacts/bouncing_betty_launch_dirt"); + level.mine_spin = loadfx("dust/bouncing_betty_swirl"); + level.mine_explode = loadfx("explosions/bouncing_betty_explosion"); + level.mine_beacon["enemy"] = loadfx("misc/light_c4_blink"); + level.mine_beacon["friendly"] = loadfx("misc/light_mine_blink_friendly"); + level.empgrenadeexplode = loadfx("explosions/emp_grenade"); + level.delayminetime = 3; + level.sentry_fire = loadfx("muzzleflashes/shotgunflash"); + level.stingerfxid = loadfx("explosions/aerial_explosion_large"); + level.primary_weapon_array = []; + level.side_arm_array = []; + level.grenade_array = []; + level.missile_array = []; + level.inventory_array = []; + level.mines = []; + precachemodel("weapon_claymore_bombsquad"); + precachemodel("weapon_c4_bombsquad"); + precachemodel("projectile_m67fraggrenade_bombsquad"); + precachemodel("projectile_semtex_grenade_bombsquad"); + precachemodel("weapon_light_stick_tactical_bombsquad"); + precachemodel("projectile_bouncing_betty_grenade"); + precachemodel("projectile_bouncing_betty_grenade_bombsquad"); + precachemodel("projectile_bouncing_betty_trigger"); + precachemodel("weapon_jammer"); + precachemodel("weapon_jammer_bombsquad"); + precachemodel("weapon_radar"); + precachemodel("weapon_radar_bombsquad"); + precachemodel("mp_trophy_system"); + precachemodel("mp_trophy_system_bombsquad"); + level._effect["equipment_explode"] = loadfx("explosions/sparks_a"); + level._effect["sniperDustLarge"] = loadfx("dust/sniper_dust_kickup"); + level._effect["sniperDustSmall"] = loadfx("dust/sniper_dust_kickup_minimal"); + level._effect["sniperDustLargeSuppress"] = loadfx("dust/sniper_dust_kickup_accum_suppress"); + level._effect["sniperDustSmallSuppress"] = loadfx("dust/sniper_dust_kickup_accum_supress_minimal"); + level thread onplayerconnect(); + level.c4explodethisframe = 0; + common_scripts\utility::array_thread(getentarray("misc_turret","classname"),::turret_monitoruse); +} + +//Function Number: 4 +dumpit() +{ + wait 5; +} + +//Function Number: 5 +bombsquadwaiter() +{ + self endon("disconnect"); + for(;;) + { + self waittill("grenade_fire",var_00,var_01); + var_02 = level.otherteam[self.team]; + if(var_01 == "c4_mp") + { + var_00 thread createbombsquadmodel("weapon_c4_bombsquad","tag_origin",var_02,self); + continue; + } + + if(var_01 == "claymore_mp") + { + var_00 thread createbombsquadmodel("weapon_claymore_bombsquad","tag_origin",var_02,self); + continue; + } + + if(var_01 == "frag_grenade_mp") + { + var_00 thread createbombsquadmodel("projectile_m67fraggrenade_bombsquad","tag_weapon",var_02,self); + continue; + } + + if(var_01 == "frag_grenade_short_mp") + { + var_00 thread createbombsquadmodel("projectile_m67fraggrenade_bombsquad","tag_weapon",var_02,self); + continue; + } + + if(var_01 == "semtex_mp") + { + var_00 thread createbombsquadmodel("projectile_semtex_grenade_bombsquad","tag_weapon",var_02,self); + } + } +} + +//Function Number: 6 +createbombsquadmodel(param_00,param_01,param_02,param_03) +{ + var_04 = spawn("script_model",(0,0,0)); + var_04 hide(); + wait 0.05; + if(!isdefined(self)) + { + return; + } + + var_04 thread bombsquadvisibilityupdater(param_02,param_03); + var_04 setmodel(param_00); + var_04 linkto(self,param_01,(0,0,0),(0,0,0)); + var_04 setcontents(0); + self waittill("death"); + if(isdefined(self.trigger)) + { + self.trigger delete(); + } + + var_04 delete(); +} + +//Function Number: 7 +bombsquadvisibilityupdater(param_00,param_01) +{ + self endon("death"); + foreach(var_03 in level.players) + { + if(level.teambased) + { + if(var_03.team == param_00 && var_03 maps\mp\_utility::func_27AF("specialty_detectexplosive")) + { + self showtoplayer(var_03); + } + + continue; + } + + if(isdefined(param_01) && var_03 == param_01) + { + continue; + } + + if(!var_03 maps\mp\_utility::func_27AF("specialty_detectexplosive")) + { + continue; + } + + self showtoplayer(var_03); + } + + for(;;) + { + level common_scripts\utility::waittill_any("joined_team","player_spawned","changed_kit","update_bombsquad"); + self hide(); + foreach(var_03 in level.players) + { + if(level.teambased) + { + if(var_03.team == param_00 && var_03 maps\mp\_utility::func_27AF("specialty_detectexplosive")) + { + self showtoplayer(var_03); + } + + continue; + } + + if(isdefined(param_01) && var_03 == param_01) + { + continue; + } + + if(!var_03 maps\mp\_utility::func_27AF("specialty_detectexplosive")) + { + continue; + } + + self showtoplayer(var_03); + } + } +} + +//Function Number: 8 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_00.hits = 0; + maps\mp\gametypes\_gamelogic::sethasdonecombat(var_00,0); + var_00 kc_regweaponforfxremoval("remotemissile_projectile_mp"); + var_00 thread onplayerspawned(); + var_00 thread bombsquadwaiter(); + var_00 thread func_2858(); + var_00 thread func_2821(); + } +} + +//Function Number: 9 +onplayerspawned() +{ + self endon("disconnect"); + for(;;) + { + self waittill("spawned_player"); + self.currentweaponatspawn = self getcurrentweapon(); + self.empendtime = 0; + self.concussionendtime = 0; + self.hits = 0; + maps\mp\gametypes\_gamelogic::sethasdonecombat(self,0); + if(!isdefined(self.trackingweaponname)) + { + self.trackingweaponname = ""; + self.trackingweaponname = "none"; + self.trackingweaponshots = 0; + self.trackingweaponkills = 0; + self.trackingweaponhits = 0; + self.trackingweaponheadshots = 0; + self.trackingweapondeaths = 0; + } + + thread func_2844(); + thread watchgrenadeusage(); + thread watchweaponchange(); + thread func_2823(); + thread watchjavelinusage(); + thread func_285A(); + thread func_2831(); + thread watchmineusage(); + thread maps\mp\gametypes\_class::func_281D(); + thread maps\mp\gametypes\_equipment::func_2788(); + thread func_2888(); + self.lasthittime = []; + self.droppeddeathweapon = undefined; + self.tookweaponfrom = []; + thread updatesavedlastweapon(); + if(self hasweapon("semtex_mp")) + { + thread func_288E(); + } + + self.currentweaponatspawn = undefined; + self.trophyremainingammo = undefined; + } +} + +//Function Number: 10 +func_2821() +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + var_00 = undefined; + for(;;) + { + self waittill("weapon_fired"); + if(maps\mp\_utility::getweaponclass(self getcurrentweapon()) != "weapon_sniper") + { + continue; + } + + if(self getstance() != "prone") + { + continue; + } + + var_01 = anglestoforward(self.angles); + if(!isdefined(var_00) || gettime() - var_00 > 2000) + { + playfx(level._effect["sniperDustLarge"],self.origin + (0,0,10) + var_01 * 50,var_01); + var_00 = gettime(); + continue; + } + + playfx(level._effect["sniperDustLargeSuppress"],self.origin + (0,0,10) + var_01 * 50,var_01); + } +} + +//Function Number: 11 +func_2823() +{ + maps\mp\_stinger::stingerusageloop(); +} + +//Function Number: 12 +watchjavelinusage() +{ + maps\mp\_javelin::func_27E4(); +} + +//Function Number: 13 +watchweaponchange() +{ + self endon("death"); + self endon("disconnect"); + self endon("faux_spawn"); + thread watchstartweaponchange(); + self.lastdroppableweapon = self.currentweaponatspawn; + self.hitsthismag = []; + var_00 = self getcurrentweapon(); + if(maps\mp\_utility::func_2827(var_00) && !isdefined(self.hitsthismag[var_00])) + { + self.hitsthismag[var_00] = weaponclipsize(var_00); + } + + self.bothbarrels = undefined; + if(issubstr(var_00,"ranger")) + { + thread func_2832(var_00); + } + + for(;;) + { + self waittill("weapon_change",var_01); + if(var_01 == "none") + { + continue; + } + + if(var_01 == "briefcase_bomb_mp" || var_01 == "briefcase_bomb_defuse_mp") + { + continue; + } + + if(maps\mp\_utility::func_2829(var_01)) + { + if(maps\mp\_utility::isjuggernaut() && !maps\mp\killstreaks\_airdrop::func_2E9F(var_01)) + { + self.changingweapon = undefined; + } + + continue; + } + + var_02 = strtok(var_01,"_"); + self.bothbarrels = undefined; + if(issubstr(var_01,"ranger")) + { + thread func_2832(var_01); + } + + if(var_02[0] == "alt") + { + var_03 = getsubstr(var_01,4); + var_01 = var_03; + var_02 = strtok(var_01,"_"); + } + else if(var_02[0] != "iw5") + { + var_01 = var_02[0]; + } + + if(var_01 != "none" && var_02[0] != "iw5") + { + if(maps\mp\_utility::func_2827(var_01) && !isdefined(self.hitsthismag[var_01 + "_mp"])) + { + self.hitsthismag[var_01 + "_mp"] = weaponclipsize(var_01 + "_mp"); + } + } + else if(var_01 != "none" && var_02[0] == "iw5") + { + if(maps\mp\_utility::func_2827(var_01) && !isdefined(self.hitsthismag[var_01])) + { + self.hitsthismag[var_01] = weaponclipsize(var_01); + } + } + + self.changingweapon = undefined; + if(var_02[0] == "iw5") + { + self.lastdroppableweapon = var_01; + } + else if(var_01 != "none" && func_2834(var_01 + "_mp")) + { + self.lastdroppableweapon = var_01 + "_mp"; + } + + if(isdefined(self.class_num)) + { + if(var_02[0] != "iw5") + { + var_01 = var_01 + "_mp"; + } + + if(isdefined(self.loadoutprimarybuff) && self.loadoutprimarybuff != "specialty_null") + { + if(var_01 == self.primaryweapon && !maps\mp\_utility::func_27AF(self.loadoutprimarybuff)) + { + maps\mp\_utility::giveperk(self.loadoutprimarybuff,1); + } + + if(var_01 != self.primaryweapon && maps\mp\_utility::func_27AF(self.loadoutprimarybuff)) + { + maps\mp\_utility::func_282E(self.loadoutprimarybuff); + } + } + + if(isdefined(self.loadoutsecondarybuff) && self.loadoutsecondarybuff != "specialty_null") + { + if(var_01 == self.secondaryweapon && !maps\mp\_utility::func_27AF(self.loadoutsecondarybuff)) + { + maps\mp\_utility::giveperk(self.loadoutsecondarybuff,1); + } + + if(var_01 != self.secondaryweapon && maps\mp\_utility::func_27AF(self.loadoutsecondarybuff)) + { + if(var_01 == self.primaryweapon) + { + if(self.loadoutprimarybuff != self.loadoutsecondarybuff) + { + maps\mp\_utility::func_282E(self.loadoutsecondarybuff); + } + + continue; + } + + maps\mp\_utility::func_282E(self.loadoutsecondarybuff); + } + } + } + } +} + +//Function Number: 14 +watchstartweaponchange() +{ + self endon("death"); + self endon("disconnect"); + self.changingweapon = undefined; + for(;;) + { + self waittill("weapon_switch_started",var_00); + thread makesureweaponchanges(self getcurrentweapon()); + self.changingweapon = var_00; + if(var_00 == "none" && isdefined(self.iscapturingcrate) && self.iscapturingcrate) + { + while(self.iscapturingcrate) + { + wait 0.05; + } + + self.changingweapon = undefined; + } + } +} + +//Function Number: 15 +makesureweaponchanges(param_00) +{ + self endon("weapon_switch_started"); + self endon("weapon_change"); + self endon("disconnect"); + self endon("death"); + level endon("game_ended"); + if(maps\mp\_utility::func_2829(param_00)) + { + return; + } + + wait 1; + self.changingweapon = undefined; +} + +//Function Number: 16 +func_2831() +{ + self endon("death"); + self endon("disconnect"); + self endon("faux_spawn"); + for(;;) + { + self waittill("reload"); + var_00 = self getcurrentweapon(); + self.bothbarrels = undefined; + if(!issubstr(var_00,"ranger")) + { + continue; + } + + thread func_2832(var_00); + } +} + +//Function Number: 17 +func_2832(param_00) +{ + var_01 = self getweaponammoclip(param_00,"right"); + var_02 = self getweaponammoclip(param_00,"left"); + self endon("reload"); + self endon("weapon_change"); + for(;;) + { + self waittill("weapon_fired",var_03); + if(var_03 != param_00) + { + continue; + } + + self.bothbarrels = undefined; + if(issubstr(param_00,"akimbo")) + { + var_04 = self getweaponammoclip(param_00,"left"); + var_05 = self getweaponammoclip(param_00,"right"); + if(var_02 != var_04 && var_01 != var_05) + { + self.bothbarrels = 1; + } + + if(!var_04 || !var_05) + { + return; + } + + var_02 = var_04; + var_01 = var_05; + continue; + } + + if(var_01 == 2 && !self getweaponammoclip(param_00,"right")) + { + self.bothbarrels = 1; + return; + } + } +} + +//Function Number: 18 +func_2833(param_00) +{ + if(param_00 == "radar_mp" || param_00 == "airstrike_mp" || param_00 == "helicopter_mp") + { + return 1; + } + + if(param_00 == "briefcase_bomb_mp") + { + return 1; + } + + return 0; +} + +//Function Number: 19 +func_2834(param_00) +{ + if(param_00 == "none") + { + return 0; + } + + if(issubstr(param_00,"ac130")) + { + return 0; + } + + if(issubstr(param_00,"uav")) + { + return 0; + } + + if(issubstr(param_00,"killstreak")) + { + return 0; + } + + var_01 = weaponinventorytype(param_00); + if(var_01 != "primary") + { + return 0; + } + + return 1; +} + +//Function Number: 20 +dropweaponfordeath(param_00) +{ + if(isdefined(level.blockweapondrops)) + { + return; + } + + if(isdefined(self.droppeddeathweapon)) + { + return; + } + + if(level.ingraceperiod) + { + return; + } + + var_01 = self.lastdroppableweapon; + if(!isdefined(var_01)) + { + return; + } + + if(var_01 == "none") + { + return; + } + + if(!self hasweapon(var_01)) + { + return; + } + + if(maps\mp\_utility::isjuggernaut()) + { + return; + } + + var_02 = strtok(var_01,"_"); + if(var_02[0] == "alt") + { + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + if(var_03 > 0 && var_03 < 2) + { + var_01 = var_01 + var_02[var_03]; + continue; + } + + if(var_03 > 0) + { + var_01 = var_01 + "_" + var_02[var_03]; + continue; + } + + var_01 = ""; + } + } + + if(var_01 != "riotshield_mp") + { + if(!self anyammoforweaponmodes(var_01)) + { + return; + } + + var_04 = self getweaponammoclip(var_01,"right"); + var_05 = self getweaponammoclip(var_01,"left"); + if(!var_04 && !var_05) + { + return; + } + + var_06 = self getweaponammostock(var_01); + var_07 = weaponmaxammo(var_01); + if(var_06 > var_07) + { + var_06 = var_07; + } + + var_08 = self dropitem(var_01); + if(!isdefined(var_08)) + { + return; + } + + var_08 itemweaponsetammo(var_04,var_06,var_05); + } + else + { + var_08 = self dropitem(var_02); + if(!isdefined(var_08)) + { + return; + } + + var_08 itemweaponsetammo(1,1,0); + } + + self.droppeddeathweapon = 1; + var_08.owner = self; + var_08.ownersattacker = param_00; + var_08 thread watchpickup(); + var_08 thread deletepickupafterawhile(); +} + +//Function Number: 21 +detachifattached(param_00,param_01) +{ + var_02 = self getattachsize(); + var_03 = 0; + while(var_03 < var_02) + { + var_04 = self getattachmodelname(var_03); + if(var_04 != param_00) + { + continue; + } + + var_05 = self getattachtagname(var_03); + self detach(param_00,var_05); + if(var_05 != param_01) + { + var_02 = self getattachsize(); + for(var_03 = 0;var_03 < var_02;var_03++) + { + var_05 = self getattachtagname(var_03); + if(var_05 != param_01) + { + continue; + } + + param_00 = self getattachmodelname(var_03); + self detach(param_00,var_05); + break; + } + } + + return 1; + var_04++; + } + + return 0; +} + +//Function Number: 22 +deletepickupafterawhile() +{ + self endon("death"); + wait 60; + if(!isdefined(self)) + { + return; + } + + self delete(); +} + +//Function Number: 23 +getitemweaponname() +{ + var_00 = self.classname; + var_01 = getsubstr(var_00,7); + return var_01; +} + +//Function Number: 24 +watchpickup() +{ + self endon("death"); + var_00 = getitemweaponname(); + for(;;) + { + self waittill("trigger",var_01,var_02); + if(isdefined(var_02)) + { + break; + } + } + + var_03 = var_02 getitemweaponname(); + if(isdefined(var_01.tookweaponfrom[var_03])) + { + var_02.owner = var_01.tookweaponfrom[var_03]; + var_02.ownersattacker = var_01; + var_01.tookweaponfrom[var_03] = undefined; + } + + var_02 thread watchpickup(); + if(isdefined(self.ownersattacker) && self.ownersattacker == var_01) + { + var_01.tookweaponfrom[var_00] = self.owner; + return; + } + + var_01.tookweaponfrom[var_00] = undefined; +} + +//Function Number: 25 +func_283C() +{ + var_00 = getitemweaponname(); + var_01 = weaponaltweaponname(var_00); + for(var_02 = 1;var_01 != "none" && var_01 != var_00;var_02++) + { + self itemweaponsetammo(0,0,0,var_02); + var_01 = weaponaltweaponname(var_01); + } +} + +//Function Number: 26 +func_283D(param_00) +{ + self endon("death"); + level endon("game_ended"); + self waittill("scavenger",var_01); + var_01 notify("scavenger_pickup"); + var_01 playlocalsound("scavenger_pack_pickup"); + var_02 = var_01 getweaponslistoffhands(); + foreach(var_04 in var_02) + { + if(var_04 != "throwingknife_mp") + { + continue; + } + + var_05 = var_01 getweaponammoclip(var_04); + var_01 setweaponammoclip(var_04,var_05 + 1); + } + + var_07 = var_01 getweaponslistprimaries(); + foreach(var_09 in var_07) + { + if(!maps\mp\_utility::func_2827(var_09) && !level.scavenger_secondary) + { + continue; + } + + if(issubstr(var_09,"alt") && issubstr(var_09,"m320") || issubstr(var_09,"gl") || issubstr(var_09,"gp25") || issubstr(var_09,"hybrid")) + { + continue; + } + + if(maps\mp\_utility::getweaponclass(var_09) == "weapon_projectile") + { + continue; + } + + var_0A = var_01 getweaponammostock(var_09); + var_0B = weaponclipsize(var_09); + var_01 setweaponammostock(var_09,var_0A + var_0B); + } + + var_01 maps\mp\gametypes\_damagefeedback::updatedamagefeedback("scavenger"); +} + +//Function Number: 27 +dropscavengerfordeath(param_00) +{ + if(level.ingraceperiod) + { + return; + } + + if(!isdefined(param_00)) + { + return; + } + + if(param_00 == self) + { + return; + } + + var_01 = self dropscavengerbag("scavenger_bag_mp"); + var_01 thread func_283D(self); +} + +//Function Number: 28 +getweaponbasedgrenadecount(param_00) +{ + return 2; +} + +//Function Number: 29 +func_2840(param_00) +{ + return 1; +} + +//Function Number: 30 +func_2841() +{ + var_00 = "frag_grenade_mp"; + var_01 = self getammocount(var_00); + return var_01; +} + +//Function Number: 31 +func_2842() +{ + var_00 = "smoke_grenade_mp"; + var_01 = self getammocount(var_00); + return var_01; +} + +//Function Number: 32 +setweaponstat(param_00,param_01,param_02) +{ + maps\mp\gametypes\_gamelogic::setweaponstat(param_00,param_01,param_02); +} + +//Function Number: 33 +func_2844(param_00) +{ + self endon("death"); + self endon("disconnect"); + self endon("faux_spawn"); + level endon("game_ended"); + for(;;) + { + self waittill("weapon_fired",var_01); + maps\mp\gametypes\_gamelogic::sethasdonecombat(self,1); + if(!maps\mp\_utility::func_2827(var_01) && !maps\mp\_utility::iscacsecondaryweapon(var_01)) + { + continue; + } + + if(isdefined(self.hitsthismag[var_01])) + { + thread func_2849(var_01); + } + + var_02 = maps\mp\gametypes\_persistence::func_2845("totalShots") + 1; + var_03 = maps\mp\gametypes\_persistence::func_2845("hits"); + var_04 = clamp(float(var_03) / float(var_02),0,1) * 10000; + maps\mp\gametypes\_persistence::func_2846("totalShots",var_02); + maps\mp\gametypes\_persistence::func_2846("accuracy",int(var_04)); + maps\mp\gametypes\_persistence::func_2846("misses",int(var_02 - var_03)); + if(isdefined(self.laststandparams) && self.laststandparams.laststandstarttime == gettime()) + { + self.hits = 0; + return; + } + + var_05 = 1; + setweaponstat(var_01,var_05,"shots"); + setweaponstat(var_01,self.hits,"hits"); + self.hits = 0; + } +} + +//Function Number: 34 +func_2849(param_00) +{ + self endon("death"); + self endon("disconnect"); + self endon("updateMagShots_" + param_00); + self.hitsthismag[param_00]--; + wait 0.05; + self.hitsthismag[param_00] = weaponclipsize(param_00); +} + +//Function Number: 35 +func_284A(param_00) +{ + self endon("death"); + self endon("disconnect"); + self notify("updateMagShots_" + param_00); + waittillframeend; + if(isdefined(self.hitsthismag[param_00]) && self.hitsthismag[param_00] == 0) + { + var_01 = maps\mp\_utility::getweaponclass(param_00); + maps\mp\gametypes\_missions::genericchallenge(var_01); + self.hitsthismag[param_00] = weaponclipsize(param_00); + } +} + +//Function Number: 36 +checkhit(param_00,param_01) +{ + if(maps\mp\_utility::func_323E(param_00,"alt_")) + { + var_02 = strtok(param_00,"_"); + foreach(var_04 in var_02) + { + if(var_04 == "shotgun") + { + var_05 = getsubstr(param_00,0,4); + if(!isprimaryweapon(var_05) && !func_287D(var_05)) + { + self.hits = 1; + } + + continue; + } + + if(var_04 == "hybrid") + { + var_06 = getsubstr(param_00,4); + param_00 = var_06; + } + } + } + + if(!isprimaryweapon(param_00) && !func_287D(param_00)) + { + return; + } + + if(self meleebuttonpressed()) + { + return; + } + + switch(weaponclass(param_00)) + { + case "mg": + case "rifle": + case "smg": + case "pistol": + case "sniper": + self.hits++; + break; + + case "spread": + self.hits = 1; + break; + + default: + break; + } + + if(issubstr(param_00,"riotshield")) + { + thread maps\mp\gametypes\_gamelogic::func_2F59("riotshield",self.hits,"hits"); + self.hits = 0; + } + + waittillframeend; + if(isdefined(self.hitsthismag[param_00])) + { + thread func_284A(param_00); + } + + if(!isdefined(self.lasthittime[param_00])) + { + self.lasthittime[param_00] = 0; + } + + if(self.lasthittime[param_00] == gettime()) + { + return; + } + + self.lasthittime[param_00] = gettime(); + var_08 = maps\mp\gametypes\_persistence::func_2845("totalShots"); + var_09 = maps\mp\gametypes\_persistence::func_2845("hits") + 1; + if(var_09 <= var_08) + { + maps\mp\gametypes\_persistence::func_2846("hits",var_09); + maps\mp\gametypes\_persistence::func_2846("misses",int(var_08 - var_09)); + var_0A = clamp(float(var_09) / float(var_08),0,1) * 10000; + maps\mp\gametypes\_persistence::func_2846("accuracy",int(var_0A)); + } +} + +//Function Number: 37 +func_284D(param_00,param_01) +{ + return func_27A1(param_01,param_00); +} + +//Function Number: 38 +func_27A1(param_00,param_01,param_02) +{ + if(!isdefined(param_00)) + { + return 1; + } + + if(!level.teambased) + { + return 1; + } + + var_03 = param_01.team; + var_04 = level.friendlyfire; + if(isdefined(param_02)) + { + var_04 = param_02; + } + + if(var_04 != 0) + { + return 1; + } + + if(param_01 == param_00) + { + return 1; + } + + if(!isdefined(var_03)) + { + return 1; + } + + if(var_03 != param_00.team) + { + return 1; + } + + return 0; +} + +//Function Number: 39 +watchgrenadeusage() +{ + self endon("death"); + self endon("disconnect"); + self endon("faux_spawn"); + self.throwinggrenade = undefined; + self.gotpullbacknotify = 0; + if(maps\mp\_utility::getintproperty("scr_deleteexplosivesonspawn",1) == 1) + { + if(isdefined(self.c4array)) + { + for(var_00 = 0;var_00 < self.c4array.size;var_00++) + { + if(isdefined(self.c4array[var_00])) + { + if(isdefined(self.c4array[var_00].trigger)) + { + self.c4array[var_00].trigger delete(); + } + + self.c4array[var_00] delete(); + } + } + } + + self.c4array = []; + if(isdefined(self.claymorearray)) + { + for(var_00 = 0;var_00 < self.claymorearray.size;var_00++) + { + if(isdefined(self.claymorearray[var_00])) + { + if(isdefined(self.claymorearray[var_00].trigger)) + { + self.claymorearray[var_00].trigger delete(); + } + + self.claymorearray[var_00] delete(); + } + } + } + + self.claymorearray = []; + if(isdefined(self.bouncingbettyarray)) + { + for(var_00 = 0;var_00 < self.bouncingbettyarray.size;var_00++) + { + if(isdefined(self.bouncingbettyarray[var_00])) + { + if(isdefined(self.bouncingbettyarray[var_00].trigger)) + { + self.bouncingbettyarray[var_00].trigger delete(); + } + + self.bouncingbettyarray[var_00] delete(); + } + } + } + + self.bouncingbettyarray = []; + } + else + { + if(!isdefined(self.c4array)) + { + self.c4array = []; + } + + if(!isdefined(self.claymorearray)) + { + self.claymorearray = []; + } + + if(!isdefined(self.bouncingbettyarray)) + { + self.bouncingbettyarray = []; + } + } + + thread watchc4(); + thread func_17B5(); + thread func_17B6(); + thread watchclaymores(); + thread func_2864(); + thread func_285C(); + for(;;) + { + self waittill("grenade_pullback",var_01); + setweaponstat(var_01,1,"shots"); + maps\mp\gametypes\_gamelogic::sethasdonecombat(self,1); + thread watchoffhandcancel(); + if(var_01 == "claymore_mp") + { + continue; + } + + self.throwinggrenade = var_01; + self.gotpullbacknotify = 1; + if(var_01 == "c4_mp") + { + beginc4tracking(); + } + else + { + func_17A7(); + } + + self.throwinggrenade = undefined; + } +} + +//Function Number: 40 +func_17A7() +{ + self endon("death"); + self endon("disconnect"); + self endon("offhand_end"); + self endon("weapon_change"); + var_00 = gettime(); + self waittill("grenade_fire",var_01,var_02); + if(gettime() - var_00 > 1000 && var_02 == "frag_grenade_mp") + { + var_01.iscooked = 1; + } + + self.changingweapon = undefined; + var_01.owner = self; + switch(var_02) + { + case "semtex_mp": + case "frag_grenade_mp": + var_01 thread maps\mp\gametypes\_shellshock::grenade_earthquake(); + var_01.originalowner = self; + break; + + case "concussion_grenade_mp": + case "flash_grenade_mp": + var_01 thread func_285B(); + break; + + case "smoke_grenade_mp": + var_01 thread watchsmokeexplode(); + break; + } +} + +//Function Number: 41 +watchoffhandcancel() +{ + self endon("death"); + self endon("disconnect"); + self endon("faux_spawn"); + self endon("grenade_fire"); + self waittill("offhand_end"); + if(isdefined(self.changingweapon) && self.changingweapon != self getcurrentweapon()) + { + self.changingweapon = undefined; + } +} + +//Function Number: 42 +watchsmokeexplode() +{ + level endon("smokeTimesUp"); + var_00 = self.owner; + var_00 endon("disconnect"); + self waittill("explode",var_01); + var_02 = 128; + var_03 = 8; + level thread func_2855(var_03,var_02,var_01); + for(;;) + { + if(!isdefined(var_00)) + { + break; + } + + foreach(var_05 in level.players) + { + if(!isdefined(var_05)) + { + continue; + } + + if(level.teambased && var_05.team == var_00.team) + { + continue; + } + + if(distancesquared(var_05.origin,var_01) < var_02 * var_02) + { + var_05.inplayersmokescreen = var_00; + continue; + } + + var_05.inplayersmokescreen = undefined; + } + + wait 0.05; + } +} + +//Function Number: 43 +func_2855(param_00,param_01,param_02) +{ + maps\mp\gametypes\_hostmigration::func_2740(param_00); + level notify("smokeTimesUp"); + waittillframeend; + foreach(var_04 in level.players) + { + if(isdefined(var_04)) + { + var_04.inplayersmokescreen = undefined; + } + } +} + +//Function Number: 44 +addmissiletosighttraces(param_00) +{ + self.team = param_00; + level.missilesforsighttraces[level.missilesforsighttraces.size] = self; + self waittill("death"); + var_01 = []; + foreach(var_03 in level.missilesforsighttraces) + { + if(var_03 != self) + { + var_01[var_01.size] = var_03; + } + } + + level.missilesforsighttraces = var_01; +} + +//Function Number: 45 +func_2858() +{ + self endon("disconnect"); + for(;;) + { + self waittill("missile_fire",var_00,var_01); + if(issubstr(var_01,"gl_")) + { + var_00.primaryweapon = self getcurrentprimaryweapon(); + var_00 thread maps\mp\gametypes\_shellshock::grenade_earthquake(); + } + + switch(var_01) + { + case "at4_mp": + case "iw5_smaw_mp": + case "stinger_mp": + level notify("stinger_fired",self,var_00,self.stingertarget); + thread maps\mp\_utility::setaltsceneobj(var_00,"tag_origin",65); + break; + + case "remote_mortar_missile_mp": + case "uav_strike_projectile_mp": + case "javelin_mp": + level notify("stinger_fired",self,var_00,self.javelintarget); + thread maps\mp\_utility::setaltsceneobj(var_00,"tag_origin",65); + break; + + default: + break; + } + + switch(var_01) + { + case "rpg_mp": + case "at4_mp": + case "remote_mortar_missile_mp": + case "uav_strike_projectile_mp": + case "javelin_mp": + case "iw5_smaw_mp": + case "remotemissile_projectile_mp": + case "ac130_40mm_mp": + case "ac130_105mm_mp": + var_00 thread maps\mp\gametypes\_shellshock::grenade_earthquake(); + break; + + default: + break; + } + } +} + +//Function Number: 46 +func_285A() +{ + self endon("death"); + self endon("disconnect"); + self endon("faux_spawn"); + for(;;) + { + self waittill("sentry_placement_finished",var_00); + thread maps\mp\_utility::setaltsceneobj(var_00,"tag_flash",65); + } +} + +//Function Number: 47 +func_285B() +{ + thread maps\mp\gametypes\_shellshock::func_2374(); + self endon("end_explode"); + self waittill("explode",var_00); + var_01 = func_2877(var_00,512,0); + foreach(var_03 in var_01) + { + if(isdefined(var_03.owner) && !func_27A1(self.owner,var_03.owner)) + { + continue; + } + + var_03 notify("emp_damage",self.owner,8); + } +} + +//Function Number: 48 +beginc4tracking() +{ + self endon("death"); + self endon("disconnect"); + common_scripts\utility::waittill_any("grenade_fire","weapon_change","offhand_end"); + self.changingweapon = undefined; +} + +//Function Number: 49 +func_285C() +{ + self endon("death"); + self endon("disconnect"); + for(;;) + { + self waittill("grenade_fire",var_00,var_01); + if(self.gotpullbacknotify) + { + self.gotpullbacknotify = 0; + continue; + } + + if(!issubstr(var_01,"frag_") && !issubstr(var_01,"semtex_")) + { + continue; + } + + var_00.threwback = 1; + thread maps\mp\_utility::incplayerstat("throwbacks",1); + var_00 thread maps\mp\gametypes\_shellshock::grenade_earthquake(); + var_00.originalowner = self; + } +} + +//Function Number: 50 +watchc4() +{ + self endon("spawned_player"); + self endon("disconnect"); + for(;;) + { + self waittill("grenade_fire",var_00,var_01); + if(var_01 == "c4" || var_01 == "c4_mp") + { + if(!self.c4array.size) + { + thread watchc4altdetonate(); + } + + if(self.c4array.size) + { + self.c4array = common_scripts\utility::array_removeundefined(self.c4array); + if(self.c4array.size >= level.maxperplayerexplosives) + { + self.c4array[0] detonate(); + } + } + + self.c4array[self.c4array.size] = var_00; + var_00.owner = self; + var_00.team = self.team; + var_00.activated = 0; + var_00.weaponname = var_01; + var_00 thread maps\mp\gametypes\_shellshock::c4_earthquake(); + var_00 thread c4activate(); + var_00 thread func_17B8(); + var_00 thread func_285F(); + var_00 thread func_2790(); + var_00 waittill("missile_stuck"); + var_00.trigger = spawn("script_origin",var_00.origin); + var_00 thread equipmentwatchuse(self); + } + } +} + +//Function Number: 51 +func_285F() +{ + self endon("death"); + for(;;) + { + self waittill("emp_damage",var_00,var_01); + playfxontag(common_scripts\utility::func_539("sentry_explode_mp"),self,"tag_origin"); + self.disabled = 1; + self notify("disabled"); + wait var_01; + self.disabled = undefined; + self notify("enabled"); + } +} + +//Function Number: 52 +func_2790() +{ + self endon("death"); + for(;;) + { + level waittill("emp_update"); + if((level.teambased && level.teamemped[self.team]) || !level.teambased && isdefined(level.empplayer) && level.empplayer != self.owner) + { + self.disabled = 1; + self notify("disabled"); + continue; + } + + self.disabled = undefined; + self notify("enabled"); + } +} + +//Function Number: 53 +func_2860(param_00) +{ + self endon("death"); + wait 0.05; + if(level.teambased) + { + maps\mp\_entityheadicons::setteamheadicon(param_00,(0,0,20)); + return; + } + + if(isdefined(self.owner)) + { + maps\mp\_entityheadicons::setplayerheadicon(self.owner,(0,0,20)); + } +} + +//Function Number: 54 +watchclaymores() +{ + self endon("spawned_player"); + self endon("disconnect"); + self.claymorearray = []; + for(;;) + { + self waittill("grenade_fire",var_00,var_01); + if(var_01 == "claymore" || var_01 == "claymore_mp") + { + if(!isalive(self)) + { + var_00 delete(); + return; + } + + var_00 hide(); + var_00 waittill("missile_stuck"); + var_02 = 40; + if(var_02 * var_02 < distancesquared(var_00.origin,self.origin)) + { + var_03 = bullettrace(self.origin,self.origin - (0,0,var_02),0,self); + if(var_03["fraction"] == 1) + { + var_00 delete(); + self setweaponammostock("claymore_mp",self getweaponammostock("claymore_mp") + 1); + continue; + } + + var_00.origin = var_03["position"]; + } + + var_00 show(); + self.claymorearray = common_scripts\utility::array_removeundefined(self.claymorearray); + if(self.claymorearray.size >= level.maxperplayerexplosives) + { + self.claymorearray[0] detonate(); + } + + self.claymorearray[self.claymorearray.size] = var_00; + var_00.owner = self; + var_00.team = self.team; + var_00.weaponname = var_01; + var_00.trigger = spawn("script_origin",var_00.origin); + level.mines[level.mines.size] = var_00; + var_00 thread func_17B8(); + var_00 thread func_285F(); + var_00 thread func_2790(); + var_00 thread claymoredetonation(); + var_00 thread equipmentwatchuse(self); + var_00 thread func_2860(self.pers["team"]); + self.changingweapon = undefined; + } + } +} + +//Function Number: 55 +equipmentwatchuse(param_00) +{ + self endon("spawned_player"); + self endon("disconnect"); + self.trigger setcursorhint("HINT_NOICON"); + if(self.weaponname == "c4_mp") + { + self.trigger sethintstring(&"MP_PICKUP_C4"); + } + else if(self.weaponname == "claymore_mp") + { + self.trigger sethintstring(&"MP_PICKUP_CLAYMORE"); + } + else if(self.weaponname == "bouncingbetty_mp") + { + self.trigger sethintstring(&"MP_PICKUP_BOUNCING_BETTY"); + } + + self.trigger maps\mp\_utility::setselfusable(param_00); + self.trigger thread maps\mp\_utility::notusableforjoiningplayers(self); + for(;;) + { + self.trigger waittill("trigger",param_00); + param_00 playlocalsound("scavenger_pack_pickup"); + param_00 setweaponammostock(self.weaponname,param_00 getweaponammostock(self.weaponname) + 1); + self.trigger delete(); + self delete(); + self notify("death"); + } +} + +//Function Number: 56 +claymoredetonation() +{ + self endon("death"); + var_00 = spawn("trigger_radius",self.origin + (0,0,0 - level.claymoredetonateradius),0,level.claymoredetonateradius,level.claymoredetonateradius * 2); + thread deleteondeath(var_00); + for(;;) + { + var_00 waittill("trigger",var_01); + if(getdvarint("scr_claymoredebug") != 1) + { + if(isdefined(self.owner) && var_01 == self.owner) + { + continue; + } + + if(!func_27A1(self.owner,var_01,0)) + { + continue; + } + } + + if(lengthsquared(var_01 getentityvelocity()) < 10) + { + continue; + } + + var_02 = abs(var_01.origin[2] - self.origin[2]); + if(var_02 > 128) + { + continue; + } + + if(!var_01 func_2862(self)) + { + continue; + } + + if(var_01 damageconetrace(self.origin,self) > 0) + { + break; + } + } + + self playsound("claymore_activated"); + if(isplayer(var_01) && var_01 maps\mp\_utility::func_27AF("specialty_delaymine")) + { + var_01 notify("triggered_claymore"); + wait level.delayminetime; + } + else + { + wait level.claymoredetectiongraceperiod; + } + + if(isdefined(self.trigger)) + { + self.trigger delete(); + } + + self detonate(); +} + +//Function Number: 57 +func_2862(param_00) +{ + if(isdefined(param_00.disabled)) + { + return 0; + } + + var_01 = self.origin + (0,0,32); + var_02 = var_01 - param_00.origin; + var_03 = anglestoforward(param_00.angles); + var_04 = vectordot(var_02,var_03); + if(var_04 < level.claymoredetectionmindist) + { + return 0; + } + + var_02 = vectornormalize(var_02); + var_05 = vectordot(var_02,var_03); + return var_05 > level.claymoredetectiondot; +} + +//Function Number: 58 +deleteondeath(param_00) +{ + self waittill("death"); + wait 0.05; + if(isdefined(param_00)) + { + if(isdefined(param_00.trigger)) + { + param_00.trigger delete(); + } + + param_00 delete(); + } +} + +//Function Number: 59 +c4activate() +{ + self endon("death"); + self waittill("missile_stuck"); + wait 0.05; + self notify("activated"); + self.activated = 1; +} + +//Function Number: 60 +watchc4altdetonate() +{ + self endon("death"); + self endon("disconnect"); + self endon("detonated"); + level endon("game_ended"); + var_00 = 0; + for(;;) + { + if(self usebuttonpressed()) + { + var_00 = 0; + while(self usebuttonpressed()) + { + var_00 = var_00 + 0.05; + wait 0.05; + } + + if(var_00 >= 0.5) + { + continue; + } + + var_00 = 0; + while(!self usebuttonpressed() && var_00 < 0.5) + { + var_00 = var_00 + 0.05; + wait 0.05; + } + + if(var_00 >= 0.5) + { + continue; + } + + if(!self.c4array.size) + { + return; + } + + self notify("alt_detonate"); + } + + wait 0.05; + } +} + +//Function Number: 61 +func_17B5() +{ + self endon("death"); + self endon("disconnect"); + for(;;) + { + self waittillmatch("c4_mp","detonate"); + var_00 = []; + for(var_01 = 0;var_01 < self.c4array.size;var_01++) + { + var_02 = self.c4array[var_01]; + if(isdefined(self.c4array[var_01])) + { + var_02 thread func_17B7(0.1); + } + } + + self.c4array = var_00; + self notify("detonated"); + } +} + +//Function Number: 62 +func_17B6() +{ + self endon("death"); + self endon("disconnect"); + for(;;) + { + self waittill("alt_detonate"); + var_00 = self getcurrentweapon(); + if(var_00 != "c4_mp") + { + var_01 = []; + for(var_02 = 0;var_02 < self.c4array.size;var_02++) + { + var_03 = self.c4array[var_02]; + if(isdefined(self.c4array[var_02])) + { + var_03 thread func_17B7(0.1); + } + } + + self.c4array = var_01; + self notify("detonated"); + } + } +} + +//Function Number: 63 +func_17B7(param_00) +{ + self endon("death"); + wait param_00; + func_2866(); + self detonate(); +} + +//Function Number: 64 +func_2864() +{ + self endon("death"); + self waittill("disconnect"); + var_00 = self.c4array; + var_01 = self.claymorearray; + wait 0.05; + for(var_02 = 0;var_02 < var_00.size;var_02++) + { + if(isdefined(var_00[var_02])) + { + var_00[var_02] delete(); + } + } + + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + if(isdefined(var_01[var_02])) + { + var_01[var_02] delete(); + } + } +} + +//Function Number: 65 +func_17B8() +{ + self endon("death"); + self setcandamage(1); + self.maxhealth = 100000; + self.health = self.maxhealth; + var_00 = undefined; + for(;;) + { + self waittill("damage",var_01,var_00,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09); + if(!isplayer(var_00)) + { + continue; + } + + if(!func_27A1(self.owner,var_00)) + { + continue; + } + + if(isdefined(var_09)) + { + switch(var_09) + { + case "concussion_grenade_mp": + case "flash_grenade_mp": + case "smoke_grenade_mp": + break; + } + } + + break; + } + + if(level.c4explodethisframe) + { + wait 0.1 + randomfloat(0.4); + } + else + { + wait 0.05; + } + + if(!isdefined(self)) + { + return; + } + + level.c4explodethisframe = 1; + thread resetc4explodethisframe(); + if(isdefined(var_04) && issubstr(var_04,"MOD_GRENADE") || issubstr(var_04,"MOD_EXPLOSIVE")) + { + self.waschained = 1; + } + + if(isdefined(var_08) && var_08 & level.idflags_penetration) + { + self.wasdamagedfrombulletpenetration = 1; + } + + self.wasdamaged = 1; + if(isplayer(var_00)) + { + var_00 maps\mp\gametypes\_damagefeedback::updatedamagefeedback("c4"); + } + + if(level.teambased) + { + if(isdefined(var_00) && isdefined(var_00.pers["team"]) && isdefined(self.owner) && isdefined(self.owner.pers["team"])) + { + if(var_00.pers["team"] != self.owner.pers["team"]) + { + var_00 notify("destroyed_explosive"); + } + } + } + else if(isdefined(self.owner) && isdefined(var_00) && var_00 != self.owner) + { + var_00 notify("destroyed_explosive"); + } + + if(isdefined(self.trigger)) + { + self.trigger delete(); + } + + self detonate(var_00); +} + +//Function Number: 66 +resetc4explodethisframe() +{ + wait 0.05; + level.c4explodethisframe = 0; +} + +//Function Number: 67 +saydamaged(param_00,param_01) +{ + for(var_02 = 0;var_02 < 60;var_02++) + { + wait 0.05; + } +} + +//Function Number: 68 +func_2866() +{ + if(!isdefined(self.disabled)) + { + return; + } + + self waittill("enabled"); +} + +//Function Number: 69 +c4detectiontrigger(param_00) +{ + self waittill("activated"); + var_01 = spawn("trigger_radius",self.origin - (0,0,128),0,512,256); + var_01.detectid = "trigger" + gettime() + randomint(1000000); + var_01.owner = self; + var_01 thread detecticonwaiter(level.otherteam[param_00]); + self waittill("death"); + var_01 notify("end_detection"); + if(isdefined(var_01.bombsquadicon)) + { + var_01.bombsquadicon destroy(); + } + + var_01 delete(); +} + +//Function Number: 70 +func_286A(param_00) +{ + var_01 = spawn("trigger_radius",self.origin - (0,0,128),0,512,256); + var_01.detectid = "trigger" + gettime() + randomint(1000000); + var_01.owner = self; + var_01 thread detecticonwaiter(level.otherteam[param_00]); + self waittill("death"); + var_01 notify("end_detection"); + if(isdefined(var_01.bombsquadicon)) + { + var_01.bombsquadicon destroy(); + } + + var_01 delete(); +} + +//Function Number: 71 +detecticonwaiter(param_00) +{ + self endon("end_detection"); + level endon("game_ended"); + while(!level.gameended) + { + self waittill("trigger",var_01); + if(!var_01.detectexplosives) + { + continue; + } + + if(level.teambased && var_01.team != param_00) + { + continue; + } + else if(!level.teambased && var_01 == self.owner.owner) + { + continue; + } + + if(isdefined(var_01.bombsquadids[self.detectid])) + { + continue; + } + + var_01 thread showheadicon(self); + } +} + +//Function Number: 72 +setupbombsquad() +{ + self.bombsquadids = []; + if(self.detectexplosives && !self.bombsquadicons.size) + { + for(var_00 = 0;var_00 < 4;var_00++) + { + self.bombsquadicons[var_00] = newclienthudelem(self); + self.bombsquadicons[var_00].x = 0; + self.bombsquadicons[var_00].y = 0; + self.bombsquadicons[var_00].z = 0; + self.bombsquadicons[var_00].alpha = 0; + self.bombsquadicons[var_00].archived = 1; + self.bombsquadicons[var_00] setshader("waypoint_bombsquad",14,14); + self.bombsquadicons[var_00] setwaypoint(0,0); + self.bombsquadicons[var_00].detectid = ""; + } + + return; + } + + if(!self.detectexplosives) + { + for(var_00 = 0;var_00 < self.bombsquadicons.size;var_00++) + { + self.bombsquadicons[var_00] destroy(); + } + + self.bombsquadicons = []; + } +} + +//Function Number: 73 +showheadicon(param_00) +{ + var_01 = param_00.detectid; + var_02 = -1; + for(var_03 = 0;var_03 < 4;var_03++) + { + var_04 = self.bombsquadicons[var_03].detectid; + if(var_04 == var_01) + { + return; + } + + if(var_04 == "") + { + var_02 = var_03; + } + } + + if(var_02 < 0) + { + return; + } + + self.bombsquadids[var_01] = 1; + self.bombsquadicons[var_02].x = param_00.origin[0]; + self.bombsquadicons[var_02].y = param_00.origin[1]; + self.bombsquadicons[var_02].z = param_00.origin[2] + 24 + 128; + self.bombsquadicons[var_02] fadeovertime(0.25); + self.bombsquadicons[var_02].alpha = 1; + self.bombsquadicons[var_02].detectid = param_00.detectid; + while(isalive(self) && isdefined(param_00) && self istouching(param_00)) + { + wait 0.05; + } + + if(!isdefined(self)) + { + return; + } + + self.bombsquadicons[var_02].detectid = ""; + self.bombsquadicons[var_02] fadeovertime(0.25); + self.bombsquadicons[var_02].alpha = 0; + self.bombsquadids[var_01] = undefined; +} + +//Function Number: 74 +func_17BE(param_00,param_01,param_02,param_03) +{ + var_04 = []; + if(!isdefined(param_02)) + { + param_02 = 0; + } + + if(!isdefined(param_03)) + { + param_03 = 0; + } + + var_05 = param_01 * param_01; + var_06 = level.players; + for(var_07 = 0;var_07 < var_06.size;var_07++) + { + if(!isalive(var_06[var_07]) || var_06[var_07].sessionstate != "playing") + { + continue; + } + + var_08 = maps\mp\_utility::get_damageable_player_pos(var_06[var_07]); + var_09 = distancesquared(param_00,var_08); + if(var_09 < var_05 && !param_02 || weapondamagetracepassed(param_00,var_08,param_03,var_06[var_07])) + { + var_04[var_04.size] = maps\mp\_utility::func_2872(var_06[var_07],var_08); + } + } + + var_0A = getentarray("grenade","classname"); + for(var_07 = 0;var_07 < var_0A.size;var_07++) + { + var_0B = maps\mp\_utility::get_damageable_grenade_pos(var_0A[var_07]); + var_09 = distancesquared(param_00,var_0B); + if(var_09 < var_05 && !param_02 || weapondamagetracepassed(param_00,var_0B,param_03,var_0A[var_07])) + { + var_04[var_04.size] = maps\mp\_utility::get_damageable_grenade(var_0A[var_07],var_0B); + } + } + + var_0C = getentarray("destructible","targetname"); + for(var_07 = 0;var_07 < var_0C.size;var_07++) + { + var_0B = var_0C[var_07].origin; + var_09 = distancesquared(param_00,var_0B); + if(var_09 < var_05 && !param_02 || weapondamagetracepassed(param_00,var_0B,param_03,var_0C[var_07])) + { + var_0D = spawnstruct(); + var_0D.isplayer = 0; + var_0D.isadestructable = 0; + var_0D.entity = var_0C[var_07]; + var_0D.damagecenter = var_0B; + var_04[var_04.size] = var_0D; + } + } + + var_0E = getentarray("destructable","targetname"); + for(var_07 = 0;var_07 < var_0E.size;var_07++) + { + var_0B = var_0E[var_07].origin; + var_09 = distancesquared(param_00,var_0B); + if(var_09 < var_05 && !param_02 || weapondamagetracepassed(param_00,var_0B,param_03,var_0E[var_07])) + { + var_0D = spawnstruct(); + var_0D.isplayer = 0; + var_0D.isadestructable = 1; + var_0D.entity = var_0E[var_07]; + var_0D.damagecenter = var_0B; + var_04[var_04.size] = var_0D; + } + } + + var_0F = getentarray("misc_turret","classname"); + foreach(var_11 in var_0F) + { + var_0B = var_11.origin + (0,0,32); + var_09 = distancesquared(param_00,var_0B); + if(var_09 < var_05 && !param_02 || weapondamagetracepassed(param_00,var_0B,param_03,var_11)) + { + switch(var_11.model) + { + case "vehicle_ugv_talon_gun_mp": + case "mp_remote_turret": + case "mp_sam_turret": + case "sentry_minigun_weak": + var_04[var_04.size] = maps\mp\_utility::get_damageable_sentry(var_11,var_0B); + break; + } + } + } + + var_13 = getentarray("script_model","classname"); + foreach(var_15 in var_13) + { + if(var_15.model != "projectile_bouncing_betty_grenade" && var_15.model != "ims_scorpion_body") + { + continue; + } + + var_0B = var_15.origin + (0,0,32); + var_09 = distancesquared(param_00,var_0B); + if(var_09 < var_05 && !param_02 || weapondamagetracepassed(param_00,var_0B,param_03,var_15)) + { + var_04[var_04.size] = maps\mp\_utility::get_damageable_mine(var_15,var_0B); + } + } + + return var_04; +} + +//Function Number: 75 +func_2877(param_00,param_01,param_02,param_03) +{ + var_04 = []; + if(!isdefined(param_02)) + { + param_02 = 0; + } + + if(!isdefined(param_03)) + { + param_03 = 0; + } + + var_05 = getentarray("grenade","classname"); + foreach(var_07 in var_05) + { + var_08 = var_07.origin; + var_09 = distance(param_00,var_08); + if(var_09 < param_01 && !param_02 || weapondamagetracepassed(param_00,var_08,param_03,var_07)) + { + var_04[var_04.size] = var_07; + } + } + + var_0B = getentarray("misc_turret","classname"); + foreach(var_0D in var_0B) + { + var_08 = var_0D.origin; + var_09 = distance(param_00,var_08); + if(var_09 < param_01 && !param_02 || weapondamagetracepassed(param_00,var_08,param_03,var_0D)) + { + var_04[var_04.size] = var_0D; + } + } + + return var_04; +} + +//Function Number: 76 +weapondamagetracepassed(param_00,param_01,param_02,param_03) +{ + var_04 = undefined; + var_05 = param_01 - param_00; + if(lengthsquared(var_05) < param_02 * param_02) + { + return 1; + } + + var_06 = vectornormalize(var_05); + var_04 = param_00 + (var_06[0] * param_02,var_06[1] * param_02,var_06[2] * param_02); + var_07 = bullettrace(var_04,param_01,0,param_03); + if(getdvarint("scr_damage_debug") != 0 || getdvarint("scr_debugMines") != 0) + { + thread debugprint(param_00,".dmg"); + if(isdefined(param_03)) + { + thread debugprint(param_01,"." + param_03.classname); + } + else + { + thread debugprint(param_01,".undefined"); + } + + if(var_07["fraction"] == 1) + { + thread debugline(var_04,param_01,(1,1,1)); + } + else + { + thread debugline(var_04,var_07["position"],(1,0.9,0.8)); + thread debugline(var_07["position"],param_01,(1,0.4,0.3)); + } + } + + return var_07["fraction"] == 1; +} + +//Function Number: 77 +damageent(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + if(self.isplayer) + { + self.damageorigin = param_05; + self.entity thread [[ level.callbackplayerdamage ]](param_00,param_01,param_02,0,param_03,param_04,param_05,param_06,"none",0); + return; + } + + if(self.isadestructable && param_04 == "artillery_mp" || param_04 == "claymore_mp" || param_04 == "stealth_bomb_mp") + { + return; + } + + self.entity notify("damage",param_02,param_01,(0,0,0),(0,0,0),"MOD_EXPLOSIVE","","","",undefined,param_04); +} + +//Function Number: 78 +debugline(param_00,param_01,param_02) +{ + for(var_03 = 0;var_03 < 600;var_03++) + { + wait 0.05; + } +} + +//Function Number: 79 +debugcircle(param_00,param_01,param_02,param_03) +{ + if(!isdefined(param_03)) + { + param_03 = 16; + } + + var_04 = 360 / param_03; + var_05 = []; + for(var_06 = 0;var_06 < param_03;var_06++) + { + var_07 = var_04 * var_06; + var_08 = cos(var_07) * param_01; + var_09 = sin(var_07) * param_01; + var_0A = param_00[0] + var_08; + var_0B = param_00[1] + var_09; + var_0C = param_00[2]; + var_05[var_05.size] = (var_0A,var_0B,var_0C); + } + + for(var_06 = 0;var_06 < var_05.size;var_06++) + { + var_0D = var_05[var_06]; + if(var_06 + 1 >= var_05.size) + { + var_0E = var_05[0]; + } + else + { + var_0E = var_05[var_06 + 1]; + } + + thread debugline(var_0D,var_0E,param_02); + } +} + +//Function Number: 80 +debugprint(param_00,param_01) +{ + for(var_02 = 0;var_02 < 600;var_02++) + { + wait 0.05; + } +} + +//Function Number: 81 +onweapondamage(param_00,param_01,param_02,param_03,param_04) +{ + self endon("death"); + self endon("disconnect"); + switch(param_01) + { + case "concussion_grenade_mp": + if(!isdefined(param_00)) + { + return; + } + else if(param_02 == "MOD_IMPACT") + { + return; + } + + var_05 = 1; + if(isdefined(param_00.owner) && param_00.owner == param_04) + { + var_05 = 0; + } + + var_06 = 512; + var_07 = 1 - distance(self.origin,param_00.origin) / var_06; + if(var_07 < 0) + { + var_07 = 0; + } + + var_08 = 2 + 4 * var_07; + if(isdefined(self.stunscaler)) + { + var_08 = var_08 * self.stunscaler; + } + + wait 0.05; + param_04 notify("stun_hit"); + self notify("concussed",param_04); + if(param_04 != self) + { + param_04 maps\mp\gametypes\_missions::processchallenge("ch_alittleconcussed"); + } + + self shellshock("concussion_grenade_mp",var_08); + self.concussionendtime = gettime() + var_08 * 1000; + if(var_05) + { + param_04 thread maps\mp\gametypes\_damagefeedback::updatedamagefeedback("stun"); + } + break; + + case "weapon_cobra_mk19_mp": + break; + + default: + maps\mp\gametypes\_shellshock::shellshockondamage(param_02,param_03); + break; + } +} + +//Function Number: 82 +isprimaryweapon(param_00) +{ + if(param_00 == "none") + { + return 0; + } + + if(weaponinventorytype(param_00) != "primary") + { + return 0; + } + + switch(weaponclass(param_00)) + { + case "rocketlauncher": + case "spread": + case "mg": + case "rifle": + case "smg": + case "pistol": + case "sniper": + return 1; + + default: + return 0; + } +} + +//Function Number: 83 +isaltmodeweapon(param_00) +{ + if(param_00 == "none") + { + return 0; + } + + return weaponinventorytype(param_00) == "altmode"; +} + +//Function Number: 84 +func_287A(param_00) +{ + if(param_00 == "none") + { + return 0; + } + + return weaponinventorytype(param_00) == "item"; +} + +//Function Number: 85 +isriotshield(param_00) +{ + if(param_00 == "none") + { + return 0; + } + + return weapontype(param_00) == "riotshield"; +} + +//Function Number: 86 +isoffhandweapon(param_00) +{ + if(param_00 == "none") + { + return 0; + } + + return weaponinventorytype(param_00) == "offhand"; +} + +//Function Number: 87 +func_287D(param_00) +{ + if(param_00 == "none") + { + return 0; + } + + if(weaponinventorytype(param_00) != "primary") + { + return 0; + } + + return weaponclass(param_00) == "pistol"; +} + +//Function Number: 88 +isgrenade(param_00) +{ + var_01 = weaponclass(param_00); + var_02 = weaponinventorytype(param_00); + if(var_01 != "grenade") + { + return 0; + } + + if(var_02 != "offhand") + { + return 0; + } +} + +//Function Number: 89 +updatesavedlastweapon() +{ + self endon("death"); + self endon("disconnect"); + self endon("faux_spawn"); + var_00 = self.currentweaponatspawn; + self.saved_lastweapon = var_00; + for(;;) + { + self waittill("weapon_change",var_01); + if(var_01 == "none") + { + self.saved_lastweapon = var_00; + continue; + } + + var_02 = weaponinventorytype(var_01); + if(var_02 != "primary" && var_02 != "altmode") + { + self.saved_lastweapon = var_00; + continue; + } + + func_2884(); + self.saved_lastweapon = var_00; + var_00 = var_01; + } +} + +//Function Number: 90 +empplayer(param_00) +{ + self endon("disconnect"); + self endon("death"); + thread clearempondeath(); +} + +//Function Number: 91 +clearempondeath() +{ + self endon("disconnect"); + self waittill("death"); +} + +//Function Number: 92 +func_2884() +{ + self.weaponlist = self getweaponslistprimaries(); + if(self.weaponlist.size) + { + var_00 = 1000; + foreach(var_02 in self.weaponlist) + { + var_03 = maps\mp\_utility::getbaseweaponname(var_02); + var_04 = int(tablelookup("mp/statstable.csv",4,var_03,8)); + if(var_04 == 0) + { + continue; + } + + if(var_04 < var_00) + { + var_00 = var_04; + } + } + + if(var_00 > 10) + { + var_00 = 10; + } + } + else + { + var_00 = 8; + } + + var_06 = var_00 / 10; + self.weaponspeed = var_06; + self setmovespeedscale(var_06 * self.movespeedscaler); +} + +//Function Number: 93 +func_2888() +{ + self endon("death"); + self endon("disconnect"); + self endon("faux_spawn"); + self notifyonplayercommand("adjustedStance","+stance"); + self notifyonplayercommand("adjustedStance","+goStand"); + for(;;) + { + common_scripts\utility::waittill_any("adjustedStance","sprint_begin","weapon_change"); + wait 0.5; + self.stance = self getstance(); + var_00 = maps\mp\_utility::getweaponclass(self getcurrentprimaryweapon()); + if(self.stance == "prone") + { + if(var_00 == "weapon_lmg") + { + maps\mp\_utility::setrecoilscale(0,40); + } + else if(var_00 == "weapon_sniper") + { + maps\mp\_utility::setrecoilscale(0,60); + } + else + { + maps\mp\_utility::setrecoilscale(); + } + + continue; + } + + if(self.stance == "crouch") + { + if(var_00 == "weapon_lmg") + { + maps\mp\_utility::setrecoilscale(0,10); + } + else if(var_00 == "weapon_sniper") + { + maps\mp\_utility::setrecoilscale(0,30); + } + else + { + maps\mp\_utility::setrecoilscale(); + } + + continue; + } + + maps\mp\_utility::setrecoilscale(); + } +} + +//Function Number: 94 +buildweapondata(param_00) +{ + var_01 = getattachmentlist(); + var_02 = 149; + var_03 = []; + for(var_04 = 0;var_04 <= var_02;var_04++) + { + var_05 = tablelookup("mp/statstable.csv",0,var_04,4); + if(var_05 == "") + { + continue; + } + + var_06 = var_05 + "_mp"; + if(!issubstr(tablelookup("mp/statsTable.csv",0,var_04,2),"weapon_")) + { + continue; + } + + if(weaponinventorytype(var_06) != "primary") + { + continue; + } + + var_07 = spawnstruct(); + var_07.basename = var_05; + var_07.assetname = var_06; + var_07.variants = []; + var_07.variants[0] = var_06; + var_08 = []; + for(var_09 = 0;var_09 < 6;var_09++) + { + var_0A = tablelookup("mp/statStable.csv",0,var_04,var_09 + 11); + if(param_00) + { + switch(var_0A) + { + case "xmags": + case "rof": + case "fmj": + break; + } + } + + if(var_0A == "") + { + break; + } + + var_08[var_0A] = 1; + } + + var_0B = []; + foreach(var_0A in var_01) + { + if(!isdefined(var_08[var_0A])) + { + continue; + } + + var_07.variants[var_07.variants.size] = var_05 + "_" + var_0A + "_mp"; + var_0B[var_0B.size] = var_0A; + } + + for(var_0E = 0;var_0E < var_0B.size - 1;var_0E++) + { + var_0F = tablelookuprownum("mp/attachmentCombos.csv",0,var_0B[var_0E]); + for(var_10 = var_0E + 1;var_10 < var_0B.size;var_10++) + { + if(tablelookup("mp/attachmentCombos.csv",0,var_0B[var_10],var_0F) == "no") + { + continue; + } + + var_07.variants[var_07.variants.size] = var_05 + "_" + var_0B[var_0E] + "_" + var_0B[var_10] + "_mp"; + } + } + + var_03[var_05] = var_07; + } + + return var_03; +} + +//Function Number: 95 +func_288E() +{ + self endon("disconnect"); + self endon("death"); + self endon("faux_spawn"); + for(;;) + { + self waittill("grenade_fire",var_00); + if(!issubstr(var_00.model,"semtex")) + { + continue; + } + + var_00 waittill("missile_stuck",var_01); + if(!isplayer(var_01)) + { + continue; + } + + if(level.teambased && isdefined(var_01.team) && var_01.team == self.team) + { + var_00.isstuck = "friendly"; + continue; + } + + var_00.isstuck = "enemy"; + var_00.stuckenemyentity = var_01; + var_01 maps\mp\gametypes\_hud_message::playercardsplashnotify("semtex_stuck",self); + thread maps\mp\gametypes\_hud_message::func_2892("stuck_semtex",100); + self notify("process","ch_bullseye"); + } +} + +//Function Number: 96 +turret_monitoruse() +{ + for(;;) + { + self waittill("trigger",var_00); + thread turret_playerthread(var_00); + } +} + +//Function Number: 97 +turret_playerthread(param_00) +{ + param_00 endon("death"); + param_00 endon("disconnect"); + param_00 notify("weapon_change","none"); + self waittill("turret_deactivate"); + param_00 notify("weapon_change",param_00 getcurrentweapon()); +} + +//Function Number: 98 +func_2895(param_00,param_01,param_02,param_03) +{ + if(!isdefined(param_03)) + { + param_03 = (0,randomfloat(360),0); + } + + var_04 = "projectile_bouncing_betty_grenade"; + var_05 = spawn("script_model",param_00); + var_05.angles = param_03; + var_05 setmodel(var_04); + var_05.owner = param_01; + var_05.weaponname = "bouncingbetty_mp"; + level.mines[level.mines.size] = var_05; + var_05.killcamoffset = (0,0,4); + var_05.killcament = spawn("script_model",var_05.origin + var_05.killcamoffset); + var_05.killcament setscriptmoverkillcam("explosive"); + if(!isdefined(param_02) || param_02 == "equipment") + { + param_01.equipmentmines = common_scripts\utility::array_removeundefined(param_01.equipmentmines); + if(param_01.equipmentmines.size >= level.maxperplayerexplosives) + { + param_01.equipmentmines[0] delete(); + } + + param_01.equipmentmines[param_01.equipmentmines.size] = var_05; + } + else + { + param_01.killstreakmines[param_01.killstreakmines.size] = var_05; + } + + var_05 thread createbombsquadmodel("projectile_bouncing_betty_grenade_bombsquad","tag_origin",level.otherteam[param_01.team],param_01); + var_05 thread minebeacon(); + var_05 thread func_2860(param_01.pers["team"]); + var_05 thread minedamagemonitor(); + var_05 thread func_289B(); + return var_05; +} + +//Function Number: 99 +minedamagemonitor() +{ + self endon("mine_triggered"); + self endon("mine_selfdestruct"); + self endon("death"); + self setcandamage(1); + self.maxhealth = 100000; + self.health = self.maxhealth; + var_00 = undefined; + for(;;) + { + self waittill("damage",var_01,var_00,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09); + if(!isplayer(var_00) || isdefined(var_09) && var_09 == "bouncingbetty_mp") + { + continue; + } + + if(!func_27A1(self.owner,var_00)) + { + continue; + } + + if(isdefined(var_09)) + { + switch(var_09) + { + case "smoke_grenade_mp": + break; + } + } + + break; + } + + self notify("mine_destroyed"); + if(isdefined(var_04) && issubstr(var_04,"MOD_GRENADE") || issubstr(var_04,"MOD_EXPLOSIVE")) + { + self.waschained = 1; + } + + if(isdefined(var_08) && var_08 & level.idflags_penetration) + { + self.wasdamagedfrombulletpenetration = 1; + } + + self.wasdamaged = 1; + if(isplayer(var_00)) + { + var_00 maps\mp\gametypes\_damagefeedback::updatedamagefeedback("bouncing_betty"); + } + + if(level.teambased) + { + if(isdefined(var_00) && isdefined(var_00.pers["team"]) && isdefined(self.owner) && isdefined(self.owner.pers["team"])) + { + if(var_00.pers["team"] != self.owner.pers["team"]) + { + var_00 notify("destroyed_explosive"); + } + } + } + else if(isdefined(self.owner) && isdefined(var_00) && var_00 != self.owner) + { + var_00 notify("destroyed_explosive"); + } + + thread func_289F(var_00); +} + +//Function Number: 100 +func_289B() +{ + self endon("mine_destroyed"); + self endon("mine_selfdestruct"); + self endon("death"); + wait 2; + var_00 = spawn("trigger_radius",self.origin,0,level.minedetectionradius,level.minedetectionheight); + thread func_289C(var_00); + var_01 = undefined; + for(;;) + { + var_00 waittill("trigger",var_01); + if(getdvarint("scr_minesKillOwner") != 1) + { + if(isdefined(self.owner) && var_01 == self.owner) + { + continue; + } + + if(!func_27A1(self.owner,var_01,0)) + { + continue; + } + } + + if(lengthsquared(var_01 getentityvelocity()) < 10) + { + continue; + } + + if(var_01 damageconetrace(self.origin,self) > 0) + { + break; + } + } + + self notify("mine_triggered"); + self playsound("mine_betty_click"); + if(isplayer(var_01) && var_01 maps\mp\_utility::func_27AF("specialty_delaymine")) + { + var_01 notify("triggered_mine"); + wait level.delayminetime; + } + else + { + wait level.minedetectiongraceperiod; + } + + thread minebounce(); +} + +//Function Number: 101 +func_289C(param_00) +{ + common_scripts\utility::waittill_any("mine_triggered","mine_destroyed","mine_selfdestruct","death"); + param_00 delete(); +} + +//Function Number: 102 +mineselfdestruct() +{ + self endon("mine_triggered"); + self endon("mine_destroyed"); + self endon("death"); + wait level.mineselfdestructtime; + wait randomfloat(0.4); + self notify("mine_selfdestruct"); + thread func_289F(); +} + +//Function Number: 103 +minebounce() +{ + self playsound("mine_betty_spin"); + playfx(level.mine_launch,self.origin); + if(isdefined(self.trigger)) + { + self.trigger delete(); + } + + var_00 = self.origin + (0,0,64); + self moveto(var_00,0.7,0,0.65); + self.killcament moveto(var_00 + self.killcamoffset,0.7,0,0.65); + self rotatevelocity((0,750,32),0.7,0,0.65); + thread playspinnerfx(); + wait 0.65; + thread func_289F(); +} + +//Function Number: 104 +func_289F(param_00) +{ + if(!isdefined(self) || !isdefined(self.owner)) + { + return; + } + + if(!isdefined(param_00)) + { + param_00 = self.owner; + } + + self playsound("grenade_explode_metal"); + var_01 = self gettagorigin("tag_fx"); + playfx(level.mine_explode,var_01); + wait 0.05; + if(!isdefined(self) || !isdefined(self.owner)) + { + return; + } + + self hide(); + self radiusdamage(self.origin,level.minedamageradius,level.minedamagemax,level.minedamagemin,param_00,"MOD_EXPLOSIVE","bouncingbetty_mp"); + wait 0.2; + if(!isdefined(self) || !isdefined(self.owner)) + { + return; + } + + if(isdefined(self.trigger)) + { + self.trigger delete(); + } + + self.killcament delete(); + self delete(); +} + +//Function Number: 105 +playspinnerfx() +{ + self endon("death"); + var_00 = gettime() + 1000; + while(gettime() < var_00) + { + wait 0.05; + playfxontag(level.mine_spin,self,"tag_fx_spin1"); + playfxontag(level.mine_spin,self,"tag_fx_spin3"); + wait 0.05; + playfxontag(level.mine_spin,self,"tag_fx_spin2"); + playfxontag(level.mine_spin,self,"tag_fx_spin4"); + } +} + +//Function Number: 106 +minedamagedebug(param_00,param_01,param_02,param_03,param_04,param_05) +{ + var_06[0] = (1,0,0); + if(param_02[2] < var_06) + { + var_07 = 0; + } + else + { + var_07 = 1; + } + + var_08 = (param_01[0],param_01[1],var_06); + var_09 = (param_02[0],param_02[1],var_06); + thread debugcircle(var_08,level.minedamageradius,var_41[var_07],32); + var_0A = distancesquared(param_01,param_02); + if(var_0A > param_03) + { + var_07 = 0; + } + else + { + var_07 = 1; + } + + thread debugline(var_08,var_09,var_41[var_07]); +} + +//Function Number: 107 +func_28A2(param_00,param_01) +{ + if(isplayer(param_01) && isalive(param_01) && param_01.sessionstate == "playing") + { + var_02 = param_01 maps\mp\_utility::func_28A3(); + } + else if(var_02.classname == "misc_turret") + { + var_02 = var_02.origin + (0,0,32); + } + else + { + var_02 = var_02.origin; + } + + var_03 = 0; + var_04 = param_00.origin[2] + var_03 + level.minedamagehalfheight; + var_05 = param_00.origin[2] + var_03 - level.minedamagehalfheight; + if(var_02[2] > var_04 || var_02[2] < var_05) + { + return 0; + } + + return 1; +} + +//Function Number: 108 +watchmineusage() +{ + self endon("disconnect"); + self endon("spawned_player"); + if(isdefined(self.equipmentmines)) + { + if(maps\mp\_utility::getintproperty("scr_deleteexplosivesonspawn",1) == 1) + { + self.equipmentmines = common_scripts\utility::array_removeundefined(self.equipmentmines); + foreach(var_01 in self.equipmentmines) + { + if(isdefined(var_01.trigger)) + { + var_01.trigger delete(); + } + + var_01 delete(); + } + } + } + else + { + self.equipmentmines = []; + } + + if(!isdefined(self.killstreakmines)) + { + self.killstreakmines = []; + } + + for(;;) + { + self waittill("grenade_fire",var_03,var_04); + if(var_04 == "bouncingbetty" || var_04 == "bouncingbetty_mp") + { + if(!isalive(self)) + { + var_03 delete(); + return; + } + + maps\mp\gametypes\_gamelogic::sethasdonecombat(self,1); + var_03 thread minethrown(self); + } + } +} + +//Function Number: 109 +minethrown(param_00) +{ + self.owner = param_00; + self waittill("missile_stuck"); + if(!isdefined(param_00)) + { + return; + } + + var_01 = bullettrace(self.origin + (0,0,4),self.origin - (0,0,4),0,self); + var_02 = var_01["position"]; + if(var_01["fraction"] == 1) + { + var_02 = getgroundposition(self.origin,12,0,32); + var_01["normal"] = var_01["normal"] * -1; + } + + var_03 = vectornormalize(var_01["normal"]); + var_04 = vectortoangles(var_03); + var_04 = var_04 + (90,0,0); + var_05 = func_2895(var_02,param_00,"equipment",var_04); + var_05.trigger = spawn("script_origin",var_05.origin + (0,0,25)); + var_05 thread equipmentwatchuse(param_00); + param_00 thread minewatchowner(var_05); + self delete(); +} + +//Function Number: 110 +minewatchowner(param_00) +{ + param_00 endon("death"); + level endon("game_ended"); + common_scripts\utility::waittill_any("disconnect","joined_team","joined_spectators"); + if(isdefined(param_00.trigger)) + { + param_00.trigger delete(); + } + + param_00 delete(); +} + +//Function Number: 111 +minebeacon() +{ + var_00["friendly"] = spawnfx(level.mine_beacon["friendly"],self gettagorigin("tag_fx")); + thread minebeaconteamupdater(var_41); + self waittill(spawnfx(level.mine_beacon["enemy"],self gettagorigin("tag_fx")),var_41["enemy"],"death"); + var_41["friendly"] delete(); + var_41["enemy"] delete(); +} + +//Function Number: 112 +minebeaconteamupdater(param_00) +{ + self endon("death"); + var_01 = self.owner.team; + wait 0.05; + triggerfx(param_00["friendly"]); + triggerfx(param_00["enemy"]); + for(;;) + { + param_00["friendly"] hide(); + param_00["enemy"] hide(); + foreach(var_03 in level.players) + { + if(level.teambased) + { + if(var_03.team == var_01) + { + param_00["friendly"] showtoplayer(var_03); + } + else + { + param_00["enemy"] showtoplayer(var_03); + } + + continue; + } + + if(var_03 == self.owner) + { + param_00["friendly"] showtoplayer(var_03); + continue; + } + + param_00["enemy"] showtoplayer(var_03); + } + + level common_scripts\utility::waittill_either("joined_team","player_spawned"); + } +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/gametypes/arena.gsc b/MW3/Xbox/MP/maps/mp/gametypes/arena.gsc new file mode 100644 index 0000000..d95f8d3 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/gametypes/arena.gsc @@ -0,0 +1,511 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\arena.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 25 + * Decompile Time: 384 ms + * Timestamp: 10/27/2023 2:26:02 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(getdvar("mapname") == "mp_background") + { + return; + } + + maps\mp\gametypes\_globallogic::init(); + maps\mp\gametypes\_callbacksetup::setupcallbacks(); + maps\mp\gametypes\_globallogic::setupcallbacks(); + maps\mp\_utility::func_330E(level.gametype,0,0,9); + maps\mp\_utility::func_3315(level.gametype,10,0,1440); + maps\mp\_utility::registerscorelimitdvar(level.gametype,500,0,5000); + maps\mp\_utility::func_3312(level.gametype,1,0,10); + maps\mp\_utility::registerwinlimitdvar(level.gametype,1,0,10); + maps\mp\_utility::func_330E(level.gametype,3,0,30); + maps\mp\_utility::func_3317(level.gametype,0,0,10); + maps\mp\_utility::registerhalftimedvar(level.gametype,0,0,1); + level.teambased = 1; + level.objectivebased = 1; + level.onprecachegametype = ::onprecachegametype; + level.onstartgametype = ::onstartgametype; + level.getspawnpoint = ::getspawnpoint; + level.onspawnplayer = ::onspawnplayer; + level.onnormaldeath = ::onnormaldeath; + level.onplayerkilled = ::onplayerkilled; + level.ondeadevent = ::ondeadevent; + game["dialog"]["gametype"] = "arena"; + if(getdvarint("g_hardcore")) + { + game["dialog"]["gametype"] = "hc_" + game["dialog"]["gametype"]; + } + else if(getdvarint("camera_thirdPerson")) + { + game["dialog"]["gametype"] = "thirdp_" + game["dialog"]["gametype"]; + } + else if(getdvarint("scr_diehard")) + { + game["dialog"]["gametype"] = "dh_" + game["dialog"]["gametype"]; + } + + game["strings"]["overtime_hint"] = &"MP_FIRST_BLOOD"; +} + +//Function Number: 2 +onprecachegametype() +{ + precacheshader("compass_waypoint_captureneutral"); + precacheshader("compass_waypoint_capture"); + precacheshader("compass_waypoint_defend"); + precacheshader("waypoint_captureneutral"); + precacheshader("waypoint_capture"); + precacheshader("waypoint_defend"); +} + +//Function Number: 3 +onstartgametype() +{ + setclientnamemode("auto_change"); + if(!isdefined(game["switchedsides"])) + { + game["switchedsides"] = 0; + } + + if(game["switchedsides"]) + { + var_00 = game["attackers"]; + var_01 = game["defenders"]; + game["attackers"] = var_01; + game["defenders"] = var_00; + } + + maps\mp\_utility::func_3305("allies",&"OBJECTIVES_ARENA"); + maps\mp\_utility::func_3305("axis",&"OBJECTIVES_ARENA"); + if(level.splitscreen) + { + maps\mp\_utility::func_3306("allies",&"OBJECTIVES_ARENA"); + maps\mp\_utility::func_3306("axis",&"OBJECTIVES_ARENA"); + } + else + { + maps\mp\_utility::func_3306("allies",&"OBJECTIVES_ARENA_SCORE"); + maps\mp\_utility::func_3306("axis",&"OBJECTIVES_ARENA_SCORE"); + } + + maps\mp\_utility::setobjectivehinttext("allies",&"OBJECTIVES_ARENA_HINT"); + maps\mp\_utility::setobjectivehinttext("axis",&"OBJECTIVES_ARENA_HINT"); + level.spawnmins = (0,0,0); + level.spawnmaxs = (0,0,0); + maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_tdm_spawn_allies_start"); + maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_tdm_spawn_axis_start"); + maps\mp\gametypes\_spawnlogic::func_2FD0("allies","mp_tdm_spawn"); + maps\mp\gametypes\_spawnlogic::func_2FD0("axis","mp_tdm_spawn"); + level.mapcenter = maps\mp\gametypes\_spawnlogic::func_2FCD(level.spawnmins,level.spawnmaxs); + setmapcenter(level.mapcenter); + var_02[0] = "dom"; + maps\mp\gametypes\_rank::registerscoreinfo("capture",200); + maps\mp\gametypes\_gameobjects::main(var_41); + precacheflag(); + thread func_3583(); + thread arenatimeflagwaiter(); +} + +//Function Number: 4 +precacheflag() +{ + game["flagmodels"] = []; + game["flagmodels"]["neutral"] = "prop_flag_neutral"; + game["flagmodels"]["allies"] = maps\mp\gametypes\_teams::func_2774("allies"); + game["flagmodels"]["axis"] = maps\mp\gametypes\_teams::func_2774("axis"); + precachemodel(game["flagmodels"]["neutral"]); + precachemodel(game["flagmodels"]["allies"]); + precachemodel(game["flagmodels"]["axis"]); + precachestring(&"MP_CAPTURING_FLAG"); + precachestring(&"MP_LOSING_FLAG"); + precachestring(&"MP_DOM_YOUR_FLAG_WAS_CAPTURED"); + precachestring(&"MP_DOM_ENEMY_FLAG_CAPTURED"); + precachestring(&"MP_DOM_NEUTRAL_FLAG_CAPTURED"); + precachestring(&"MP_ENEMY_FLAG_CAPTURED_BY"); + precachestring(&"MP_NEUTRAL_FLAG_CAPTURED_BY"); + precachestring(&"MP_FRIENDLY_FLAG_CAPTURED_BY"); +} + +//Function Number: 5 +arenatimeflagwaiter() +{ + level endon("down_to_one"); + level endon("game_end"); + for(;;) + { + var_00 = maps\mp\gametypes\_gamelogic::func_2F0C(); + if(var_00 < -4536) + { + break; + } + + wait 1; + } + + level notify("arena_flag_time"); + thread arenaflag(); +} + +//Function Number: 6 +func_3583() +{ + level endon("game_end"); + level endon("arena_flag_time"); + for(;;) + { + if(level.ingraceperiod == 0) + { + break; + } + + wait 0.05; + } + + for(;;) + { + if(getteamplayersalive("axis") == 1) + { + thread arenaflag(); + level notify("down_to_one"); + break; + } + + if(getteamplayersalive("allies") == 1) + { + thread arenaflag(); + level notify("down_to_one"); + break; + } + + wait 1; + } +} + +//Function Number: 7 +getspawnpoint() +{ + var_00 = self.pers["team"]; + if(game["switchedsides"]) + { + var_00 = maps\mp\_utility::getotherteam(var_00); + } + + if(level.ingraceperiod) + { + var_01 = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_tdm_spawn_" + var_00 + "_start"); + var_02 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random(var_01); + } + else + { + var_01 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints(var_02); + var_02 = maps\mp\gametypes\_spawnlogic::func_2FE6(var_02); + } + + return var_02; +} + +//Function Number: 8 +onspawnplayer() +{ + self.usingobj = undefined; + level notify("spawned_player"); +} + +//Function Number: 9 +onnormaldeath(param_00,param_01,param_02) +{ + var_03 = maps\mp\gametypes\_rank::getscoreinfovalue("kill"); + param_01 maps\mp\gametypes\_gamescore::giveteamscoreforobjective(param_01.pers["team"],var_03); + var_04 = param_00.team; + if(game["state"] == "postgame") + { + param_01.finalkill = 1; + } +} + +//Function Number: 10 +onplayerkilled(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09) +{ + thread checkallowspectating(); +} + +//Function Number: 11 +ontimelimit() +{ + if(game["status"] == "overtime") + { + var_00 = "forfeit"; + } + else if(game["teamScores"]["allies"] == game["teamScores"]["axis"]) + { + var_00 = "overtime"; + } + else if(game["teamScores"]["axis"] > game["teamScores"]["allies"]) + { + var_00 = "axis"; + } + else + { + var_00 = "allies"; + } + + thread maps\mp\gametypes\_gamelogic::endgame(var_00,game["strings"]["time_limit_reached"]); +} + +//Function Number: 12 +checkallowspectating() +{ + wait 0.05; + var_00 = 0; + if(!level.alivecount[game["attackers"]]) + { + level.spectateoverride[game["attackers"]].allowenemyspectate = 1; + var_00 = 1; + } + + if(!level.alivecount[game["defenders"]]) + { + level.spectateoverride[game["defenders"]].allowenemyspectate = 1; + var_00 = 1; + } + + if(var_00) + { + maps\mp\gametypes\_spectating::updatespectatesettings(); + } +} + +//Function Number: 13 +arenaflag() +{ + level.laststatus["allies"] = 0; + level.laststatus["axis"] = 0; + var_00 = getentarray("flag_arena","targetname"); + var_01 = getentarray("flag_primary","targetname"); + var_02 = getentarray("flag_secondary","targetname"); + if(!isdefined(var_00[0])) + { + if(var_01.size + var_02.size < 1) + { + maps\mp\gametypes\_callbacksetup::abortlevel(); + return; + } + + func_3585(var_01,var_02); + } + else + { + level.arenaflag = var_00[0]; + } + + var_03 = level.arenaflag; + if(isdefined(var_03.target)) + { + var_04[0] = getent(var_03.target,"targetname"); + } + else + { + var_00[0] = spawn("script_model",var_04.origin); + var_04[0].angles = var_03.angles; + } + + var_04[0] setmodel(game["flagmodels"]["neutral"]); + var_00 = maps\mp\gametypes\_gameobjects::func_29E7("neutral",var_03,var_04,(0,0,100)); + var_00 maps\mp\gametypes\_gameobjects::allowuse("enemy"); + var_00 maps\mp\gametypes\_gameobjects::setusetime(20); + var_00 maps\mp\gametypes\_gameobjects::setusetext(&"MP_CAPTURING_FLAG"); + var_05 = var_00 maps\mp\gametypes\_gameobjects::getlabel(); + var_00.label = var_05; + var_00 maps\mp\gametypes\_gameobjects::set2dicon("friendly","compass_waypoint_defend"); + var_00 maps\mp\gametypes\_gameobjects::func_2A25("friendly","waypoint_defend"); + var_00 maps\mp\gametypes\_gameobjects::set2dicon("enemy","compass_waypoint_captureneutral"); + var_00 maps\mp\gametypes\_gameobjects::func_2A25("enemy","waypoint_captureneutral"); + var_00 maps\mp\gametypes\_gameobjects::setvisibleteam("any"); + var_00.onuse = ::onuse; + var_00.onbeginuse = ::onbeginuse; + var_00.onuseupdate = ::onuseupdate; + var_00.onenduse = ::onenduse; + var_00.isarena = 1; + iprintlnbold("Arena flag spawned"); + level.arenaflag playsound("flag_spawned"); + var_06 = var_04[0].origin + (0,0,32); + var_07 = var_04[0].origin + (0,0,-32); + var_08 = bullettrace(var_06,var_07,0,undefined); + var_09 = vectortoangles(var_08["normal"]); + var_00.baseeffectforward = anglestoforward(var_09); + var_00.baseeffectright = anglestoright(var_09); + var_00.baseeffectpos = var_08["position"]; + var_00.levelflag = level.arenaflag; + level.arenaflag = var_00; +} + +//Function Number: 14 +func_3585(param_00,param_01) +{ + for(var_02 = 0;var_02 < param_00.size;var_02++) + { + var_03 = param_00[var_02].script_label; + if(var_03 != "_b") + { + param_00[var_02] delete(); + continue; + } + + level.arenaflag = param_00[var_02]; + return; + } +} + +//Function Number: 15 +ondeadevent(param_00) +{ + if(param_00 == game["attackers"]) + { + level thread func_3586(game["defenders"],game["strings"][game["attackers"] + "_eliminated"]); + return; + } + + if(param_00 == game["defenders"]) + { + level thread func_3586(game["attackers"],game["strings"][game["defenders"] + "_eliminated"]); + } +} + +//Function Number: 16 +func_3586(param_00,param_01) +{ + thread maps\mp\gametypes\_gamelogic::endgame(param_00,param_01); +} + +//Function Number: 17 +func_346E(param_00) +{ + level endon("game_ended"); + wait 0.05; + maps\mp\_utility::waittillslowprocessallowed(); + var_01 = getarraykeys(param_00); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + var_03 = param_00[var_01[var_02]].player; + var_03 thread [[ level.onxpevent ]]("capture"); + maps\mp\gametypes\_gamescore::func_26D3("capture",var_03); + var_03 thread maps\mp\_matchdata::loggameevent("capture",var_03.origin); + } +} + +//Function Number: 18 +onuse(param_00) +{ + var_01 = param_00.pers["team"]; + var_02 = maps\mp\gametypes\_gameobjects::func_2A15(); + var_03 = maps\mp\gametypes\_gameobjects::getlabel(); + self.capturetime = gettime(); + maps\mp\gametypes\_gameobjects::setownerteam(var_01); + maps\mp\gametypes\_gameobjects::set2dicon("enemy","compass_waypoint_capture"); + maps\mp\gametypes\_gameobjects::func_2A25("enemy","waypoint_capture"); + self.visuals[0] setmodel(game["flagmodels"][var_01]); + if(var_02 == "neutral") + { + var_04 = maps\mp\_utility::getotherteam(var_01); + thread maps\mp\_utility::func_32F9(var_01,var_04,&"MP_NEUTRAL_FLAG_CAPTURED_BY",&"MP_NEUTRAL_FLAG_CAPTURED_BY","mp_war_objective_taken",undefined,param_00); + statusdialog("captured_a",var_01); + statusdialog("enemy_has_a",var_04); + } + else + { + thread maps\mp\_utility::func_32F9(var_01,var_02,&"MP_ENEMY_FLAG_CAPTURED_BY",&"MP_FRIENDLY_FLAG_CAPTURED_BY","mp_war_objective_taken","mp_war_objective_lost",param_00); + } + + thread func_346E(self.touchlist[var_01]); + param_00 notify("objective","captured"); + thread flagcaptured(var_01,&"MP_DOM_NEUTRAL_FLAG_CAPTURED"); +} + +//Function Number: 19 +onbeginuse(param_00) +{ + var_01 = maps\mp\gametypes\_gameobjects::func_2A15(); + self.didstatusnotify = 0; + if(var_01 == "neutral") + { + var_02 = maps\mp\_utility::getotherteam(param_00.pers["team"]); + statusdialog("securing",param_00.pers["team"]); + self.objpoints[param_00.pers["team"]] thread maps\mp\gametypes\_objpoints::startflashing(); + statusdialog("enemy_taking",var_02); + return; + } + + if(var_02 == "allies") + { + var_02 = "axis"; + } + else + { + var_02 = "allies"; + } + + self.objpoints["allies"] thread maps\mp\gametypes\_objpoints::startflashing(); + self.objpoints["axis"] thread maps\mp\gametypes\_objpoints::startflashing(); +} + +//Function Number: 20 +onuseupdate(param_00,param_01,param_02) +{ + if(param_01 > 0.05 && param_02 && !self.didstatusnotify) + { + var_03 = maps\mp\_utility::getotherteam(param_00); + statusdialog("losing_a",var_03); + statusdialog("securing_a",param_00); + self.didstatusnotify = 1; + } +} + +//Function Number: 21 +onenduse(param_00,param_01,param_02) +{ + self.objpoints["allies"] thread maps\mp\gametypes\_objpoints::stopflashing(); + self.objpoints["axis"] thread maps\mp\gametypes\_objpoints::stopflashing(); +} + +//Function Number: 22 +statusdialog(param_00,param_01) +{ + var_02 = gettime(); + if(gettime() < level.laststatus[param_01] + 6000) + { + return; + } + + thread func_346F(param_00,param_01); + level.laststatus[param_01] = gettime(); +} + +//Function Number: 23 +func_346F(param_00,param_01) +{ + level endon("game_ended"); + wait 0.1; + maps\mp\_utility::waittillslowprocessallowed(); + maps\mp\_utility::func_26E5(param_00,param_01); +} + +//Function Number: 24 +func_3470(param_00,param_01,param_02,param_03) +{ + level endon("game_ended"); + wait 0.1; + maps\mp\_utility::waittillslowprocessallowed(); + maps\mp\_utility::leaderdialogbothteams(param_00,param_01,param_02,param_03); +} + +//Function Number: 25 +flagcaptured(param_00,param_01) +{ + maps\mp\gametypes\_gamelogic::endgame(param_00,param_01); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/gametypes/conf.gsc b/MW3/Xbox/MP/maps/mp/gametypes/conf.gsc new file mode 100644 index 0000000..41c6e33 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/gametypes/conf.gsc @@ -0,0 +1,403 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\conf.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 16 + * Decompile Time: 226 ms + * Timestamp: 10/27/2023 2:26:03 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(getdvar("mapname") == "mp_background") + { + return; + } + + maps\mp\gametypes\_globallogic::init(); + maps\mp\gametypes\_callbacksetup::setupcallbacks(); + maps\mp\gametypes\_globallogic::setupcallbacks(); + if(isusingmatchrulesdata()) + { + level.initializematchrules = ::initializematchrules; + [[ level.initializematchrules ]](); + level thread maps\mp\_utility::func_810A(); + } + else + { + maps\mp\_utility::func_330E(level.gametype,0,0,9); + maps\mp\_utility::func_3315(level.gametype,10); + maps\mp\_utility::registerscorelimitdvar(level.gametype,65); + maps\mp\_utility::func_3312(level.gametype,1); + maps\mp\_utility::registerwinlimitdvar(level.gametype,1); + maps\mp\_utility::func_3317(level.gametype,0); + maps\mp\_utility::registerhalftimedvar(level.gametype,0); + level.matchrules_damagemultiplier = 0; + level.matchrules_vampirism = 0; + } + + level.teambased = 1; + level.initgametypeawards = ::initgametypeawards; + level.onstartgametype = ::onstartgametype; + level.getspawnpoint = ::getspawnpoint; + level.onnormaldeath = ::onnormaldeath; + level.onprecachegametype = ::onprecachegametype; + if(level.matchrules_damagemultiplier || level.matchrules_vampirism) + { + level.modifyplayerdamage = ::maps\mp\gametypes\_damage::func_2D57; + } + + game["dialog"]["gametype"] = "kill_confirmed"; + level.conf_fx["vanish"] = loadfx("impacts/small_snowhit"); +} + +//Function Number: 2 +initializematchrules() +{ + maps\mp\_utility::func_334C(); + setdynamicdvar("scr_conf_roundswitch",0); + maps\mp\_utility::func_330E("conf",0,0,9); + setdynamicdvar("scr_conf_roundlimit",1); + maps\mp\_utility::func_3312("conf",1); + setdynamicdvar("scr_conf_winlimit",1); + maps\mp\_utility::registerwinlimitdvar("conf",1); + setdynamicdvar("scr_conf_halftime",0); + maps\mp\_utility::registerhalftimedvar("conf",0); + setdynamicdvar("scr_conf_promode",0); +} + +//Function Number: 3 +onprecachegametype() +{ + precachemodel("prop_dogtags_friend"); + precachemodel("prop_dogtags_foe"); + precacheshader("waypoint_dogtags"); +} + +//Function Number: 4 +onstartgametype() +{ + setclientnamemode("auto_change"); + if(!isdefined(game["switchedsides"])) + { + game["switchedsides"] = 0; + } + + if(game["switchedsides"]) + { + var_00 = game["attackers"]; + var_01 = game["defenders"]; + game["attackers"] = var_01; + game["defenders"] = var_00; + } + + maps\mp\_utility::func_3305("allies",&"OBJECTIVES_CONF"); + maps\mp\_utility::func_3305("axis",&"OBJECTIVES_CONF"); + if(level.splitscreen) + { + maps\mp\_utility::func_3306("allies",&"OBJECTIVES_CONF"); + maps\mp\_utility::func_3306("axis",&"OBJECTIVES_CONF"); + } + else + { + maps\mp\_utility::func_3306("allies",&"OBJECTIVES_CONF_SCORE"); + maps\mp\_utility::func_3306("axis",&"OBJECTIVES_CONF_SCORE"); + } + + maps\mp\_utility::setobjectivehinttext("allies",&"OBJECTIVES_CONF_HINT"); + maps\mp\_utility::setobjectivehinttext("axis",&"OBJECTIVES_CONF_HINT"); + level.spawnmins = (0,0,0); + level.spawnmaxs = (0,0,0); + maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_tdm_spawn_allies_start"); + maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_tdm_spawn_axis_start"); + maps\mp\gametypes\_spawnlogic::func_2FD0("allies","mp_tdm_spawn"); + maps\mp\gametypes\_spawnlogic::func_2FD0("axis","mp_tdm_spawn"); + level.mapcenter = maps\mp\gametypes\_spawnlogic::func_2FCD(level.spawnmins,level.spawnmaxs); + setmapcenter(level.mapcenter); + maps\mp\gametypes\_rank::registerscoreinfo("kill",50); + maps\mp\gametypes\_rank::registerscoreinfo("kill_confirmed",50); + maps\mp\gametypes\_rank::registerscoreinfo("kill_denied",50); + maps\mp\gametypes\_rank::registerscoreinfo("tags_retrieved",250); + level.dogtags = []; + var_02[0] = level.gametype; + maps\mp\gametypes\_gameobjects::main(var_02); +} + +//Function Number: 5 +getspawnpoint() +{ + var_00 = self.pers["team"]; + if(game["switchedsides"]) + { + var_00 = maps\mp\_utility::getotherteam(var_00); + } + + if(level.ingraceperiod) + { + var_01 = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_tdm_spawn_" + var_00 + "_start"); + var_02 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random(var_01); + } + else + { + var_01 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints(var_02); + var_02 = maps\mp\gametypes\_spawnlogic::func_2FE6(var_02); + } + + return var_02; +} + +//Function Number: 6 +onnormaldeath(param_00,param_01,param_02) +{ + level thread func_3546(param_00,param_01); + if(game["state"] == "postgame" && game["teamScores"][param_01.team] > game["teamScores"][level.otherteam[param_01.team]]) + { + param_01.finalkill = 1; + } +} + +//Function Number: 7 +func_3546(param_00,param_01) +{ + if(isdefined(level.dogtags[param_00.guid])) + { + playfx(level.conf_fx["vanish"],level.dogtags[param_00.guid].curorigin); + level.dogtags[param_00.guid] notify("reset"); + } + else + { + var_02[0] = spawn("script_model",(0,0,0)); + var_02[0] setmodel("prop_dogtags_foe"); + var_41[1] setmodel("prop_dogtags_friend"); + var_03 = spawn("trigger_radius",(0,0,0),0,32,32); + level.dogtags[param_01.guid] = maps\mp\gametypes\_gameobjects::func_29E7("any",var_03,var_41,(0,0,16)); + maps\mp\_utility::_objective_delete(level.dogtags[param_01.guid].objidallies); + maps\mp\_utility::_objective_delete(level.dogtags[param_01.guid].objidaxis); + maps\mp\gametypes\_objpoints::deleteobjpoint(level.dogtags[param_01.guid].objpoints["allies"]); + maps\mp\gametypes\_objpoints::deleteobjpoint(level.dogtags[param_01.guid].objpoints["axis"]); + level.dogtags[param_01.guid] maps\mp\gametypes\_gameobjects::setusetime(0); + level.dogtags[param_01.guid].onuse = ::onuse; + level.dogtags[param_01.guid].victim = param_01; + level.dogtags[param_01.guid].victimteam = param_01.pers["team"]; + level.dogtags[param_01.guid].objid = maps\mp\gametypes\_gameobjects::func_2A31(); + objective_add(level.dogtags[param_01.guid].objid,"invisible",(0,0,0)); + objective_icon(level.dogtags[param_01.guid].objid,"waypoint_dogtags"); + level thread func_354A(param_01); + param_01 thread tagteamupdater(level.dogtags[param_01.guid]); + } + + var_04 = param_01.origin + (0,0,14); + level.dogtags[param_01.guid].curorigin = var_04; + level.dogtags[param_01.guid].trigger.origin = var_04; + level.dogtags[param_01.guid].visuals[0].origin = var_04; + level.dogtags[param_01.guid].visuals[1].origin = var_04; + level.dogtags[param_01.guid] maps\mp\gametypes\_gameobjects::allowuse("any"); + level.dogtags[param_01.guid].visuals[0] thread func_3548(level.dogtags[param_01.guid],maps\mp\_utility::getotherteam(param_01.pers["team"])); + level.dogtags[param_01.guid].visuals[1] thread func_3548(level.dogtags[param_01.guid],param_01.pers["team"]); + level.dogtags[param_01.guid].attacker = var_02; + objective_position(level.dogtags[param_01.guid].objid,var_04); + objective_state(level.dogtags[param_01.guid].objid,"active"); + objective_player(level.dogtags[param_01.guid].objid,var_02 getentitynumber()); + playsoundatpos(var_04,"mp_killconfirm_tags_drop"); + level.dogtags[param_01.guid] thread func_3549(); +} + +//Function Number: 8 +func_3548(param_00,param_01) +{ + param_00 endon("death"); + param_00 endon("reset"); + self hide(); + foreach(var_03 in level.players) + { + if(var_03.team == param_01) + { + self showtoplayer(var_03); + } + } + + for(;;) + { + level waittill("joined_team"); + self hide(); + foreach(var_03 in level.players) + { + if(var_03.team == param_01) + { + self showtoplayer(var_03); + } + + if(param_00.victimteam == var_03.team && var_03 == param_00.attacker) + { + objective_state(param_00.objid,"invisible"); + } + } + } +} + +//Function Number: 9 +onuse(param_00) +{ + if(param_00.pers["team"] == self.victimteam) + { + self.trigger playsound("mp_killconfirm_tags_deny"); + param_00 maps\mp\_utility::incplayerstat("killsdenied",1); + param_00 maps\mp\_utility::func_26FB("denied",1); + param_00 maps\mp\gametypes\_persistence::func_26D8("round","denied",param_00.pers["denied"]); + if(self.victim == param_00) + { + var_01 = "tags_retrieved"; + var_02 = &"SPLASHES_TAGS_RETRIEVED"; + } + else + { + var_01 = "kill_denied"; + var_02 = &"SPLASHES_KILL_DENIED"; + } + + if(isdefined(self.attacker)) + { + self.attacker thread maps\mp\gametypes\_rank::xpeventpopup(&"SPLASHES_DENIED_KILL",(1,0.5,0.5)); + } + } + else + { + self.trigger playsound("mp_killconfirm_tags_pickup"); + var_01 = "kill_confirmed"; + var_02 = &"SPLASHES_KILL_CONFIRMED"; + param_00 maps\mp\_utility::incplayerstat("killsconfirmed",1); + param_00 maps\mp\_utility::func_26FB("confirmed",1); + param_00 maps\mp\gametypes\_persistence::func_26D8("round","confirmed",param_00.pers["confirmed"]); + if(self.attacker != param_00) + { + self.attacker thread onpickup(var_01,var_02); + } + + self.trigger playsoundtoplayer(game["voice"][param_00.team] + "kill_confirmed",param_00); + param_00 maps\mp\gametypes\_gamescore::giveteamscoreforobjective(param_00.pers["team"],1); + } + + param_00 thread onpickup(var_01,var_02); + resettags(); +} + +//Function Number: 10 +onpickup(param_00,param_01) +{ + level endon("game_ended"); + self endon("disconnect"); + while(!isdefined(self.pers)) + { + wait 0.05; + } + + thread maps\mp\gametypes\_rank::xpeventpopup(param_01); + maps\mp\gametypes\_gamescore::func_26D3(param_00,self,undefined,1); + thread maps\mp\gametypes\_rank::func_2AB3(param_00); +} + +//Function Number: 11 +resettags() +{ + self.attacker = undefined; + self notify("reset"); + self.visuals[0] hide(); + self.visuals[1] hide(); + self.curorigin = (0,0,1000); + self.trigger.origin = (0,0,1000); + self.visuals[0].origin = (0,0,1000); + self.visuals[1].origin = (0,0,1000); + maps\mp\gametypes\_gameobjects::allowuse("none"); + objective_state(self.objid,"invisible"); +} + +//Function Number: 12 +func_3549() +{ + level endon("game_ended"); + self endon("reset"); + var_00 = self.curorigin; + var_01 = self.curorigin + (0,0,12); + for(;;) + { + self.visuals[0] moveto(var_01,0.5,0.15,0.15); + self.visuals[0] rotateyaw(180,0.5); + self.visuals[1] moveto(var_01,0.5,0.15,0.15); + self.visuals[1] rotateyaw(180,0.5); + wait 0.5; + self.visuals[0] moveto(var_00,0.5,0.15,0.15); + self.visuals[0] rotateyaw(180,0.5); + self.visuals[1] moveto(var_00,0.5,0.15,0.15); + self.visuals[1] rotateyaw(180,0.5); + wait 0.5; + } +} + +//Function Number: 13 +timeout(param_00) +{ + level endon("game_ended"); + param_00 endon("disconnect"); + self notify("timeout"); + self endon("timeout"); + level maps\mp\gametypes\_hostmigration::func_2740(30); + self.visuals[0] hide(); + self.visuals[1] hide(); + self.curorigin = (0,0,1000); + self.trigger.origin = (0,0,1000); + self.visuals[0].origin = (0,0,1000); + self.visuals[1].origin = (0,0,1000); + maps\mp\gametypes\_gameobjects::allowuse("none"); +} + +//Function Number: 14 +tagteamupdater(param_00) +{ + level endon("game_ended"); + self endon("disconnect"); + for(;;) + { + self waittill("joined_team"); + param_00.victimteam = self.pers["team"]; + param_00 resettags(); + } +} + +//Function Number: 15 +func_354A(param_00) +{ + level endon("game_ended"); + var_01 = param_00.guid; + param_00 waittill("disconnect"); + if(isdefined(level.dogtags[var_01])) + { + level.dogtags[var_01] maps\mp\gametypes\_gameobjects::allowuse("none"); + if(isdefined(level.dogtags[var_01].attacker)) + { + level.dogtags[var_01].attacker thread maps\mp\gametypes\_rank::xpeventpopup(&"SPLASHES_DENIED_KILL",(1,0.5,0.5)); + } + + playfx(level.conf_fx["vanish"],level.dogtags[var_01].curorigin); + level.dogtags[var_01] notify("reset"); + wait 0.05; + if(isdefined(level.dogtags[var_01])) + { + objective_delete(level.dogtags[var_01].objid); + level.dogtags[var_01].trigger delete(); + for(var_02 = 0;var_02 < level.dogtags[var_01].visuals.size;var_02++) + { + level.dogtags[var_01].visuals[var_02] delete(); + } + + level.dogtags[var_01] notify("deleted"); + level.dogtags[var_01] = undefined; + } + } +} + +//Function Number: 16 +initgametypeawards() +{ +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/gametypes/ctf.gsc b/MW3/Xbox/MP/maps/mp/gametypes/ctf.gsc new file mode 100644 index 0000000..a2275fc --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/gametypes/ctf.gsc @@ -0,0 +1,960 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\ctf.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 31 + * Decompile Time: 421 ms + * Timestamp: 10/27/2023 2:26:04 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + maps\mp\gametypes\_globallogic::init(); + maps\mp\gametypes\_callbacksetup::setupcallbacks(); + maps\mp\gametypes\_globallogic::setupcallbacks(); + if(isusingmatchrulesdata()) + { + level.initializematchrules = ::initializematchrules; + [[ level.initializematchrules ]](); + level thread maps\mp\_utility::func_810A(); + } + else + { + maps\mp\_utility::func_3315(level.gametype,5); + maps\mp\_utility::registerscorelimitdvar(level.gametype,3); + maps\mp\_utility::func_3312(level.gametype,1); + maps\mp\_utility::registerwinlimitdvar(level.gametype,1); + maps\mp\_utility::func_3317(level.gametype,0); + maps\mp\_utility::registerhalftimedvar(level.gametype,0); + level.matchrules_damagemultiplier = 0; + level.matchrules_vampirism = 0; + } + + maps\mp\_utility::func_3318(4); + func_34B3(); + level.teambased = 1; + level.objectivebased = 1; + level.overtimescorewinoverride = 1; + level.onprecachegametype = ::onprecachegametype; + level.onstartgametype = ::onstartgametype; + level.getspawnpoint = ::getspawnpoint; + level.onplayerkilled = ::onplayerkilled; + level.initgametypeawards = ::initgametypeawards; + level.ontimelimit = ::ontimelimit; + level.onspawnplayer = ::onspawnplayer; + if(level.matchrules_damagemultiplier || level.matchrules_vampirism) + { + level.modifyplayerdamage = ::maps\mp\gametypes\_damage::func_2D57; + } + + level.flagreturntime = maps\mp\_utility::getintproperty("scr_ctf_returntime",30); + game["dialog"]["gametype"] = "captureflag"; + if(getdvarint("g_hardcore")) + { + game["dialog"]["gametype"] = "hc_" + game["dialog"]["gametype"]; + } + else if(getdvarint("camera_thirdPerson")) + { + game["dialog"]["gametype"] = "thirdp_" + game["dialog"]["gametype"]; + } + else if(getdvarint("scr_diehard")) + { + game["dialog"]["gametype"] = "dh_" + game["dialog"]["gametype"]; + } + else if(getdvarint("scr_" + level.gametype + "_promode")) + { + game["dialog"]["gametype"] = game["dialog"]["gametype"] + "_pro"; + } + + game["dialog"]["offense_obj"] = "capture_obj"; + game["dialog"]["defense_obj"] = "capture_obj"; +} + +//Function Number: 2 +initializematchrules() +{ + maps\mp\_utility::func_334C(); + setdynamicdvar("scr_ctf_roundlimit",1); + maps\mp\_utility::func_3312("ctf",1); + setdynamicdvar("scr_ctf_winlimit",1); + maps\mp\_utility::registerwinlimitdvar("ctf",1); + setdynamicdvar("scr_ctf_halftime",0); + maps\mp\_utility::registerhalftimedvar("ctf",0); + setdynamicdvar("scr_ctf_returntime",30); + setdynamicdvar("scr_ctf_promode",0); +} + +//Function Number: 3 +onprecachegametype() +{ + precachestring(&"MP_FLAG_TAKEN_BY"); + precachestring(&"MP_ENEMY_FLAG_TAKEN_BY"); + precachestring(&"MP_FLAG_CAPTURED_BY"); + precachestring(&"MP_ENEMY_FLAG_CAPTURED_BY"); + precachestring(&"MP_FLAG_RETURNED"); + precachestring(&"MP_ENEMY_FLAG_RETURNED"); + precachestring(&"MP_YOUR_FLAG_RETURNING_IN"); + precachestring(&"MP_ENEMY_FLAG_RETURNING_IN"); + precachestring(&"MP_ENEMY_FLAG_DROPPED_BY"); + precachestring(&"MP_DOM_NEUTRAL_FLAG_CAPTURED"); + precachestring(&"MP_GRABBING_FLAG"); + precachestring(&"MP_RETURNING_FLAG"); +} + +//Function Number: 4 +onspawnplayer() +{ +} + +//Function Number: 5 +func_34A3() +{ + self endon("disconnect"); + wait 0.25; + self.otspawned = 1; + var_00 = maps\mp\_utility::func_2B3B(self.team); + thread maps\mp\gametypes\_hud_message::hintmessage(var_00); +} + +//Function Number: 6 +onstartgametype() +{ + if(!isdefined(game["switchedsides"])) + { + game["switchedsides"] = 0; + } + + if(maps\mp\_utility::inovertime()) + { + setdvar("ui_override_halftime",0); + } + else if(game["switchedsides"]) + { + setdvar("ui_override_halftime",2); + } + else + { + setdvar("ui_override_halftime",1); + } + + if(!isdefined(game["original_defenders"])) + { + game["original_defenders"] = game["defenders"]; + } + + if(game["switchedsides"]) + { + var_00 = game["attackers"]; + var_01 = game["defenders"]; + game["attackers"] = var_01; + game["defenders"] = var_00; + } + + game["teamScores"][game["attackers"]] = 0; + setteamscore(game["attackers"],0); + game["teamScores"][game["defenders"]] = 0; + setteamscore(game["defenders"],0); + setclientnamemode("auto_change"); + if(level.splitscreen) + { + maps\mp\_utility::func_3306(game["attackers"],&"OBJECTIVES_ONE_FLAG_ATTACKER"); + maps\mp\_utility::func_3306(game["defenders"],&"OBJECTIVES_ONE_FLAG_DEFENDER"); + } + else + { + maps\mp\_utility::func_3306(game["attackers"],&"OBJECTIVES_ONE_FLAG_ATTACKER_SCORE"); + maps\mp\_utility::func_3306(game["defenders"],&"OBJECTIVES_ONE_FLAG_DEFENDER_SCORE"); + } + + maps\mp\_utility::func_3305(game["attackers"],&"OBJECTIVES_CTF"); + maps\mp\_utility::func_3305(game["defenders"],&"OBJECTIVES_CTF"); + maps\mp\_utility::setobjectivehinttext(game["attackers"],&"OBJECTIVES_ONE_FLAG_ATTACKER_HINT"); + maps\mp\_utility::setobjectivehinttext(game["defenders"],&"OBJECTIVES_ONE_FLAG_DEFENDER_HINT"); + level.spawnmins = (0,0,0); + level.spawnmaxs = (0,0,0); + maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_ctf_spawn_allies_start"); + maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_ctf_spawn_axis_start"); + maps\mp\gametypes\_spawnlogic::func_2FD0("allies","mp_ctf_spawn_allies"); + maps\mp\gametypes\_spawnlogic::func_2FD0("axis","mp_ctf_spawn_axis"); + level.mapcenter = maps\mp\gametypes\_spawnlogic::func_2FCD(level.spawnmins,level.spawnmaxs); + setmapcenter(level.mapcenter); + maps\mp\gametypes\_rank::registerscoreinfo("kill",50); + maps\mp\gametypes\_rank::registerscoreinfo("headshot",50); + maps\mp\gametypes\_rank::registerscoreinfo("assist",20); + maps\mp\gametypes\_rank::registerscoreinfo("pickup",50); + maps\mp\gametypes\_rank::registerscoreinfo("return",50); + maps\mp\gametypes\_rank::registerscoreinfo("capture",250); + maps\mp\gametypes\_rank::registerscoreinfo("kill_carrier",50); + maps\mp\gametypes\_rank::registerscoreinfo("defend",100); + maps\mp\gametypes\_rank::registerscoreinfo("defend_assist",100); + maps\mp\gametypes\_rank::registerscoreinfo("assault",200); + maps\mp\gametypes\_rank::registerscoreinfo("assault_assist",40); + var_02[0] = "ctf"; + maps\mp\gametypes\_gameobjects::main(var_02); + thread func_34F2(); +} + +//Function Number: 7 +getspawnpoint() +{ + if(self.team == "axis") + { + var_00 = game["attackers"]; + } + else + { + var_00 = game["defenders"]; + } + + if(level.ingraceperiod) + { + var_01 = getentarray("mp_ctf_spawn_" + var_00 + "_start","classname"); + var_02 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random(var_01); + } + else + { + var_01 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints(var_02); + var_02 = maps\mp\gametypes\_spawnlogic::func_2FE6(var_02); + } + + return var_02; +} + +//Function Number: 8 +func_34F2() +{ + level.flagmodel["allies"] = maps\mp\gametypes\_teams::func_2774("allies"); + level.icon2d["allies"] = maps\mp\gametypes\_teams::func_2776("allies"); + level.carryflag["allies"] = maps\mp\gametypes\_teams::func_2775("allies"); + precachemodel(level.flagmodel["allies"]); + precachemodel(level.carryflag["allies"]); + level.flagmodel["axis"] = maps\mp\gametypes\_teams::func_2774("axis"); + level.icon2d["axis"] = maps\mp\gametypes\_teams::func_2776("axis"); + level.carryflag["axis"] = maps\mp\gametypes\_teams::func_2775("axis"); + precachemodel(level.flagmodel["axis"]); + precachemodel(level.carryflag["axis"]); + level.iconescort3d = "waypoint_escort"; + level.iconescort2d = "waypoint_escort"; + precacheshader(level.iconescort3d); + precacheshader(level.iconescort2d); + level.iconkill3d = "waypoint_kill"; + level.iconkill2d = "waypoint_kill"; + precacheshader(level.iconkill3d); + precacheshader(level.iconkill2d); + level.iconcaptureflag3d = "waypoint_capture_flag"; + level.iconcaptureflag2d = "waypoint_capture_flag"; + precacheshader(level.iconcaptureflag3d); + precacheshader(level.iconcaptureflag2d); + level.icondefendflag3d = "waypoint_defend_flag"; + level.icondefendflag2d = "waypoint_defend_flag"; + precacheshader(level.icondefendflag3d); + precacheshader(level.icondefendflag2d); + level.iconreturnflag3d = "waypoint_return_flag"; + level.iconreturnflag2d = "waypoint_return_flag"; + precacheshader(level.iconreturnflag3d); + precacheshader(level.iconreturnflag2d); + level.iconwaitforflag3d = "waypoint_waitfor_flag"; + level.iconwaitforflag2d = "waypoint_waitfor_flag"; + precacheshader(level.iconwaitforflag3d); + precacheshader(level.iconwaitforflag2d); + precacheshader(level.icon2d["axis"]); + precacheshader(level.icon2d["allies"]); + precacheshader("waypoint_flag_friendly"); + precacheshader("waypoint_flag_enemy"); + precachestring(&"OBJECTIVES_FLAG_HOME"); + precachestring(&"OBJECTIVES_FLAG_NAME"); + precachestring(&"OBJECTIVES_FLAG_AWAY"); + level.teamflags[game["defenders"]] = func_34EC(game["defenders"],"allies"); + level.teamflags[game["attackers"]] = func_34EC(game["attackers"],level.otherteam["allies"]); + level.capzones[game["defenders"]] = func_34ED(game["defenders"],"allies"); + level.capzones[game["attackers"]] = func_34ED(game["attackers"],level.otherteam["allies"]); + if(level.splitscreen) + { + var_00 = 0; + } + else + { + var_00 = 0.85; + } + + level.friendlyflagstatusicon["allies"] = maps\mp\gametypes\_hud_util::func_26A9("waypoint_flag_friendly",32,32,"allies"); + level.friendlyflagstatusicon["allies"] maps\mp\gametypes\_hud_util::setpoint("TOP LEFT","TOP LEFT",132,0); + level.friendlyflagstatusicon["allies"].alpha = var_00; + level.friendlyflagstatusicon["allies"].hidewheninmenu = 1; + level thread func_3535(level.friendlyflagstatusicon["allies"]); + level.friendlyflagstatustext["allies"] = maps\mp\gametypes\_hud_util::createserverfontstring("small",1.6,"allies"); + level.friendlyflagstatustext["allies"] maps\mp\gametypes\_hud_util::setparent(level.friendlyflagstatusicon["allies"]); + level.friendlyflagstatustext["allies"] maps\mp\gametypes\_hud_util::setpoint("LEFT","RIGHT",4); + level.friendlyflagstatustext["allies"] settext(&"OBJECTIVES_FLAG_HOME"); + level.friendlyflagstatustext["allies"].alpha = var_00; + level.friendlyflagstatustext["allies"].color = (1,1,1); + level.friendlyflagstatustext["allies"].glowalpha = 1; + level.friendlyflagstatustext["allies"].hidewheninmenu = 1; + level thread func_3535(level.friendlyflagstatustext["allies"]); + level.enemyflagstatusicon["allies"] = maps\mp\gametypes\_hud_util::func_26A9("waypoint_flag_enemy",24,24,"allies"); + level.enemyflagstatusicon["allies"] maps\mp\gametypes\_hud_util::setpoint("TOP LEFT","TOP LEFT",132,26); + level.enemyflagstatusicon["allies"].alpha = var_00; + level.enemyflagstatusicon["allies"].hidewheninmenu = 1; + level thread func_3535(level.enemyflagstatusicon["allies"]); + level.enemyflagstatustext["allies"] = maps\mp\gametypes\_hud_util::createserverfontstring("small",1.6,"allies"); + level.enemyflagstatustext["allies"] maps\mp\gametypes\_hud_util::setparent(level.enemyflagstatusicon["allies"]); + level.enemyflagstatustext["allies"] maps\mp\gametypes\_hud_util::setpoint("LEFT","RIGHT",4); + level.enemyflagstatustext["allies"] settext(&"OBJECTIVES_FLAG_HOME"); + level.enemyflagstatustext["allies"].alpha = var_00; + level.enemyflagstatustext["allies"].color = (1,1,1); + level.enemyflagstatustext["allies"].glowalpha = 1; + level.enemyflagstatustext["allies"].hidewheninmenu = 1; + level thread func_3535(level.enemyflagstatustext["allies"]); + level.friendlyflagstatusicon["axis"] = maps\mp\gametypes\_hud_util::func_26A9("waypoint_flag_friendly",32,32,"axis"); + level.friendlyflagstatusicon["axis"] maps\mp\gametypes\_hud_util::setpoint("TOP LEFT","TOP LEFT",132,0); + level.friendlyflagstatusicon["axis"].alpha = var_00; + level.friendlyflagstatusicon["axis"].hidewheninmenu = 1; + level thread func_3535(level.friendlyflagstatusicon["axis"]); + level.friendlyflagstatustext["axis"] = maps\mp\gametypes\_hud_util::createserverfontstring("small",1.6,"axis"); + level.friendlyflagstatustext["axis"] maps\mp\gametypes\_hud_util::setparent(level.friendlyflagstatusicon["axis"]); + level.friendlyflagstatustext["axis"] maps\mp\gametypes\_hud_util::setpoint("LEFT","RIGHT",4); + level.friendlyflagstatustext["axis"] settext(&"OBJECTIVES_FLAG_HOME"); + level.friendlyflagstatustext["axis"].alpha = var_00; + level.friendlyflagstatustext["axis"].color = (1,1,1); + level.friendlyflagstatustext["axis"].glowalpha = 1; + level.friendlyflagstatustext["axis"].hidewheninmenu = 1; + level thread func_3535(level.friendlyflagstatustext["axis"]); + level.enemyflagstatusicon["axis"] = maps\mp\gametypes\_hud_util::func_26A9("waypoint_flag_enemy",24,24,"axis"); + level.enemyflagstatusicon["axis"] maps\mp\gametypes\_hud_util::setpoint("TOP LEFT","TOP LEFT",132,26); + level.enemyflagstatusicon["axis"].alpha = var_00; + level.enemyflagstatusicon["axis"].hidewheninmenu = 1; + level thread func_3535(level.enemyflagstatusicon["axis"]); + level.enemyflagstatustext["axis"] = maps\mp\gametypes\_hud_util::createserverfontstring("small",1.6,"axis"); + level.enemyflagstatustext["axis"] maps\mp\gametypes\_hud_util::setparent(level.enemyflagstatusicon["axis"]); + level.enemyflagstatustext["axis"] maps\mp\gametypes\_hud_util::setpoint("LEFT","RIGHT",4); + level.enemyflagstatustext["axis"] settext(&"OBJECTIVES_FLAG_HOME"); + level.enemyflagstatustext["axis"].alpha = var_00; + level.enemyflagstatustext["axis"].color = (1,1,1); + level.enemyflagstatustext["axis"].glowalpha = 1; + level.enemyflagstatustext["axis"].hidewheninmenu = 1; + level thread func_3535(level.enemyflagstatustext["axis"]); +} + +//Function Number: 9 +func_3535(param_00) +{ + level waittill("game_ended"); + if(isdefined(param_00)) + { + param_00.alpha = 0; + } +} + +//Function Number: 10 +func_3084(param_00,param_01,param_02,param_03,param_04) +{ + wait param_04; + var_05 = spawnfx(param_00,param_01,param_02,param_03); + triggerfx(var_05); +} + +//Function Number: 11 +func_34EC(param_00,param_01) +{ + var_02 = getent("ctf_zone_" + param_01,"targetname"); + if(!isdefined(var_02)) + { + common_scripts\utility::error("No ctf_zone_" + param_01 + " trigger found in map."); + return; + } + + var_03[0] = getent("ctf_flag_" + param_01,"targetname"); + if(!isdefined(var_03[0])) + { + common_scripts\utility::error("No ctf_flag_" + param_01 + " script_model found in map."); + return; + } + + var_04 = spawn("trigger_radius",var_02.origin,0,96,var_02.height); + var_02 = var_04; + var_03[0] setmodel(level.flagmodel[param_00]); + var_05 = maps\mp\gametypes\_gameobjects::func_29A8(param_00,var_02,var_03,(0,0,85)); + var_05 maps\mp\gametypes\_gameobjects::func_2A18("friendly",0.5); + var_05 maps\mp\gametypes\_gameobjects::func_2A18("enemy",0.5); + var_05 maps\mp\gametypes\_gameobjects::setteamusetext("enemy",&"MP_GRABBING_FLAG"); + var_05 maps\mp\gametypes\_gameobjects::setteamusetext("friendly",&"MP_RETURNING_FLAG"); + var_05 maps\mp\gametypes\_gameobjects::allowcarry("enemy"); + var_05 maps\mp\gametypes\_gameobjects::setvisibleteam("none"); + var_05 maps\mp\gametypes\_gameobjects::set2dicon("friendly",level.iconkill2d); + var_05 maps\mp\gametypes\_gameobjects::func_2A25("friendly",level.iconkill3d); + var_05 maps\mp\gametypes\_gameobjects::set2dicon("enemy",level.iconescort2d); + var_05 maps\mp\gametypes\_gameobjects::func_2A25("enemy",level.iconescort3d); + var_05 maps\mp\gametypes\_gameobjects::setcarryicon(level.icon2d[param_00]); + var_05.objidpingfriendly = 1; + var_05.allowweapons = 1; + var_05.onpickup = ::onpickup; + var_05.onpickupfailed = ::onpickup; + var_05.ondrop = ::ondrop; + var_05.onreset = ::onreset; + var_05.oldradius = var_02.radius; + var_06 = var_02.origin + (0,0,32); + var_07 = var_02.origin + (0,0,-32); + var_08 = bullettrace(var_06,var_07,0,undefined); + var_09 = maps\mp\gametypes\_teams::func_2777(param_00); + var_0A = loadfx(var_09); + var_0B = vectortoangles(var_08["normal"]); + var_0C = anglestoforward(var_0B); + var_0D = anglestoright(var_0B); + thread func_3084(var_0A,var_08["position"],var_0C,var_0D,0.5); + return var_05; +} + +//Function Number: 12 +func_34ED(param_00,param_01) +{ + var_02 = getent("ctf_zone_" + param_01,"targetname"); + if(!isdefined(var_02)) + { + common_scripts\utility::error("No ctf_zone_" + param_01 + " trigger found in map."); + return; + } + + var_03 = []; + var_04 = maps\mp\gametypes\_gameobjects::func_29E7(param_00,var_02,var_03,(0,0,85)); + var_04 maps\mp\gametypes\_gameobjects::allowuse("friendly"); + var_04 maps\mp\gametypes\_gameobjects::setvisibleteam("any"); + var_04 maps\mp\gametypes\_gameobjects::set2dicon("friendly",level.icondefendflag2d); + var_04 maps\mp\gametypes\_gameobjects::func_2A25("friendly",level.icondefendflag3d); + var_04 maps\mp\gametypes\_gameobjects::set2dicon("enemy",level.iconcaptureflag2d); + var_04 maps\mp\gametypes\_gameobjects::func_2A25("enemy",level.iconcaptureflag3d); + var_04 maps\mp\gametypes\_gameobjects::setusetime(0); + var_04 maps\mp\gametypes\_gameobjects::func_29EC(level.teamflags[maps\mp\_utility::getotherteam(param_00)]); + var_04.onuse = ::onuse; + var_04.oncantuse = ::oncantuse; + var_05 = var_02.origin + (0,0,32); + var_06 = var_02.origin + (0,0,-32); + var_07 = bullettrace(var_05,var_06,0,undefined); + var_08 = maps\mp\gametypes\_teams::func_2777(param_00); + var_09 = loadfx(var_08); + var_0A = vectortoangles(var_07["normal"]); + var_0B = anglestoforward(var_0A); + var_0C = anglestoright(var_0A); + thread func_3084(var_09,var_07["position"],var_0B,var_0C,0.5); + return var_04; +} + +//Function Number: 13 +onbeginuse(param_00) +{ + var_01 = param_00.pers["team"]; + if(var_01 == maps\mp\gametypes\_gameobjects::func_2A15()) + { + self.trigger.radius = 1024; + return; + } + + self.trigger.radius = self.oldradius; +} + +//Function Number: 14 +onenduse(param_00,param_01,param_02) +{ + self.trigger.radius = self.oldradius; +} + +//Function Number: 15 +onpickup(param_00) +{ + self notify("picked_up"); + var_01 = param_00.pers["team"]; + if(var_01 == "allies") + { + var_02 = "axis"; + } + else + { + var_02 = "allies"; + } + + if(var_01 == maps\mp\gametypes\_gameobjects::func_2A15()) + { + param_00 thread maps\mp\gametypes\_hud_message::func_2892("flagreturn",maps\mp\gametypes\_rank::getscoreinfovalue("return")); + param_00 thread [[ level.onxpevent ]]("return"); + thread func_34EE(); + param_00 maps\mp\_utility::incplayerstat("flagsreturned",1); + param_00 thread maps\mp\_matchdata::loggameevent("return",param_00.origin); + maps\mp\_utility::func_32F9(var_01,maps\mp\_utility::getotherteam(var_01),&"MP_FLAG_RETURNED",&"MP_ENEMY_FLAG_RETURNED","mp_obj_returned","mp_obj_returned",""); + maps\mp\_utility::func_26E5("enemy_flag_returned",var_02,"status"); + maps\mp\_utility::func_26E5("flag_returned",var_01,"status"); + param_00 maps\mp\_utility::func_26FB("returns",1); + param_00 maps\mp\gametypes\_persistence::func_26D8("round","returns",param_00.pers["returns"]); + level.friendlyflagstatustext[var_01] settext(&"OBJECTIVES_FLAG_HOME"); + level.friendlyflagstatustext[var_01].glowcolor = (1,1,1); + level.friendlyflagstatustext[var_01].glowalpha = 0; + level.enemyflagstatustext[var_02] settext(&"OBJECTIVES_FLAG_HOME"); + level.enemyflagstatustext[var_02].glowcolor = (1,1,1); + level.enemyflagstatustext[var_02].glowalpha = 0; + return; + } + + if(isdefined(level.ctf_loadouts) && isdefined(level.ctf_loadouts[var_01])) + { + param_00 thread applyflagcarrierclass(); + } + else + { + param_00 func_34EF(); + } + + level.friendlyflagstatustext[var_02] setplayernamestring(param_00); + level.friendlyflagstatustext[var_02].glowcolor = (0.75,0.25,0.25); + level.friendlyflagstatustext[var_02].glowalpha = 1; + level.enemyflagstatustext[var_01] setplayernamestring(param_00); + level.enemyflagstatustext[var_01].glowcolor = (0.25,0.75,0.25); + level.enemyflagstatustext[var_01].glowalpha = 1; + maps\mp\gametypes\_gameobjects::setvisibleteam("any"); + maps\mp\gametypes\_gameobjects::set2dicon("friendly",level.iconkill2d); + maps\mp\gametypes\_gameobjects::func_2A25("friendly",level.iconkill3d); + maps\mp\gametypes\_gameobjects::set2dicon("enemy",level.iconescort2d); + maps\mp\gametypes\_gameobjects::func_2A25("enemy",level.iconescort3d); + level.capzones[var_02] maps\mp\gametypes\_gameobjects::allowuse("none"); + level.capzones[var_02] maps\mp\gametypes\_gameobjects::setvisibleteam("none"); + if(!level.teamflags[var_01] maps\mp\gametypes\_gameobjects::func_29D8()) + { + level.capzones[var_01].trigger maps\mp\_entityheadicons::func_277C(param_00,level.iconwaitforflag2d,(0,0,85),undefined,undefined,undefined,undefined,undefined,undefined,undefined,0); + if(isdefined(level.teamflags[var_01].carrier)) + { + level.capzones[var_02].trigger maps\mp\_entityheadicons::func_277C(level.teamflags[var_01].carrier,level.iconwaitforflag2d,(0,0,85),undefined,undefined,undefined,undefined,undefined,undefined,undefined,0); + } + } + + maps\mp\_utility::func_32F9(var_01,var_02,&"MP_ENEMY_FLAG_TAKEN_BY",&"MP_FLAG_TAKEN_BY","mp_obj_taken","mp_enemy_obj_taken",param_00); + maps\mp\_utility::func_26E5("enemy_flag_taken",var_01,"status"); + maps\mp\_utility::func_26E5("flag_taken",var_02,"status"); + thread maps\mp\_utility::teamplayercardsplash("callout_flagpickup",param_00); + param_00 thread maps\mp\gametypes\_hud_message::func_2892("flagpickup",maps\mp\gametypes\_rank::getscoreinfovalue("pickup")); + maps\mp\gametypes\_gamescore::func_26D3("pickup",param_00); + param_00 thread [[ level.onxpevent ]]("pickup"); + param_00 maps\mp\_utility::incplayerstat("flagscarried",1); + param_00 thread maps\mp\_matchdata::loggameevent("pickup",param_00.origin); +} + +//Function Number: 16 +func_34EE() +{ + maps\mp\gametypes\_gameobjects::func_29D7(); +} + +//Function Number: 17 +ondrop(param_00) +{ + var_01 = maps\mp\gametypes\_gameobjects::func_2A15(); + var_02 = level.otherteam[var_01]; + maps\mp\gametypes\_gameobjects::allowcarry("any"); + maps\mp\gametypes\_gameobjects::setvisibleteam("any"); + maps\mp\gametypes\_gameobjects::set2dicon("friendly",level.iconreturnflag2d); + maps\mp\gametypes\_gameobjects::func_2A25("friendly",level.iconreturnflag3d); + maps\mp\gametypes\_gameobjects::set2dicon("enemy",level.iconcaptureflag2d); + maps\mp\gametypes\_gameobjects::func_2A25("enemy",level.iconcaptureflag3d); + level.friendlyflagstatustext[var_01] settext(&"OBJECTIVES_FLAG_AWAY"); + level.friendlyflagstatustext[var_01].glowcolor = (1,1,1); + level.friendlyflagstatustext[var_01].glowalpha = 0; + level.enemyflagstatustext[var_02] settext(&"OBJECTIVES_FLAG_AWAY"); + level.enemyflagstatustext[var_02].glowcolor = (1,1,1); + level.enemyflagstatustext[var_02].glowalpha = 0; + level.capzones[var_02].trigger maps\mp\_entityheadicons::func_277C("none","",(0,0,0)); + if(isdefined(param_00)) + { + if(isdefined(param_00.carryflag)) + { + param_00 func_34F0(); + } + + maps\mp\_utility::func_32F9(var_02,"none",&"MP_ENEMY_FLAG_DROPPED_BY","","mp_war_objective_lost","",param_00); + } + else + { + maps\mp\_utility::func_2D68("mp_war_objective_lost",var_02); + } + + maps\mp\_utility::func_26E5("enemy_flag_dropped",var_02,"status"); + maps\mp\_utility::func_26E5("flag_dropped",var_01,"status"); + thread returnaftertime(); +} + +//Function Number: 18 +returnaftertime() +{ + self endon("picked_up"); + wait level.flagreturntime; + var_00 = maps\mp\gametypes\_gameobjects::func_2A15(); + var_01 = level.otherteam[var_00]; + maps\mp\_utility::func_2D68("mp_war_objective_taken",var_00); + maps\mp\_utility::func_2D68("mp_war_objective_lost",var_01); + maps\mp\gametypes\_gameobjects::func_29D7(); +} + +//Function Number: 19 +onreset() +{ + var_00 = maps\mp\gametypes\_gameobjects::func_2A15(); + var_01 = level.otherteam[var_00]; + maps\mp\gametypes\_gameobjects::allowcarry("enemy"); + maps\mp\gametypes\_gameobjects::setvisibleteam("none"); + maps\mp\gametypes\_gameobjects::set2dicon("friendly",level.iconkill2d); + maps\mp\gametypes\_gameobjects::func_2A25("friendly",level.iconkill3d); + maps\mp\gametypes\_gameobjects::set2dicon("enemy",level.iconescort2d); + maps\mp\gametypes\_gameobjects::func_2A25("enemy",level.iconescort3d); + level.friendlyflagstatustext[var_00] settext(&"OBJECTIVES_FLAG_HOME"); + level.friendlyflagstatustext[var_00].glowcolor = (1,1,1); + level.friendlyflagstatustext[var_00].glowalpha = 0; + level.enemyflagstatustext[var_01] settext(&"OBJECTIVES_FLAG_HOME"); + level.enemyflagstatustext[var_01].glowcolor = (1,1,1); + level.enemyflagstatustext[var_01].glowalpha = 0; + level.capzones[var_00] maps\mp\gametypes\_gameobjects::allowuse("friendly"); + level.capzones[var_00] maps\mp\gametypes\_gameobjects::setvisibleteam("any"); + level.capzones[var_00] maps\mp\gametypes\_gameobjects::set2dicon("friendly",level.icondefendflag2d); + level.capzones[var_00] maps\mp\gametypes\_gameobjects::func_2A25("friendly",level.icondefendflag3d); + level.capzones[var_00] maps\mp\gametypes\_gameobjects::set2dicon("enemy",level.iconcaptureflag2d); + level.capzones[var_00] maps\mp\gametypes\_gameobjects::func_2A25("enemy",level.iconcaptureflag3d); + level.capzones[var_00].trigger maps\mp\_entityheadicons::func_277C("none","",(0,0,0)); +} + +//Function Number: 20 +onuse(param_00) +{ + var_01 = param_00.pers["team"]; + if(var_01 == "allies") + { + var_02 = "axis"; + } + else + { + var_02 = "allies"; + } + + maps\mp\_utility::func_26E5("enemy_flag_captured",var_01,"status"); + maps\mp\_utility::func_26E5("flag_captured",var_02,"status"); + thread maps\mp\_utility::teamplayercardsplash("callout_flagcapture",param_00); + maps\mp\gametypes\_gamescore::giveteamscoreforobjective(var_01,1); + param_00 thread maps\mp\gametypes\_hud_message::func_2892("flag_capture",maps\mp\gametypes\_rank::getscoreinfovalue("capture")); + maps\mp\gametypes\_gamescore::func_26D3("capture",param_00); + param_00 thread [[ level.onxpevent ]]("capture"); + param_00 maps\mp\_utility::incplayerstat("flagscaptured",1); + param_00 notify("objective","captured"); + param_00 thread maps\mp\_matchdata::loggameevent("capture",param_00.origin); + param_00 maps\mp\_utility::func_26FB("captures",1); + param_00 maps\mp\gametypes\_persistence::func_26D8("round","captures",param_00.pers["captures"]); + maps\mp\_utility::func_32F9(var_01,var_02,&"MP_ENEMY_FLAG_CAPTURED_BY",&"MP_FLAG_CAPTURED_BY","mp_obj_captured","mp_enemy_obj_captured",param_00); + if(isdefined(param_00.carryflag)) + { + param_00 func_34F0(); + } + + if(isdefined(level.ctf_loadouts) && isdefined(level.ctf_loadouts[var_01])) + { + param_00 thread removeflagcarrierclass(); + } + + level.teamflags[var_02] func_34EE(); + level thread func_3F1E(var_01); +} + +//Function Number: 21 +func_3F1E(param_00) +{ + if(maps\mp\_utility::inovertime()) + { + game["roundsWon"][param_00]++; + level.finalkillcam_winner = param_00; + game["teamScores"]["axis"] = game["roundsWon"]["axis"]; + game["teamScores"]["allies"] = game["roundsWon"]["allies"]; + setteamscore("axis",game["teamScores"]["axis"]); + setteamscore("allies",game["teamScores"]["allies"]); + thread maps\mp\gametypes\_gamelogic::endgame(param_00,game["strings"]["score_limit_reached"]); + return; + } + + if(game["switchedsides"]) + { + if(game["teamScores"][param_00] == maps\mp\_utility::func_18D0("scorelimit")) + { + game["roundsWon"][param_00]++; + game["teamScores"]["axis"] = game["roundsWon"]["axis"]; + game["teamScores"]["allies"] = game["roundsWon"]["allies"]; + setteamscore("axis",game["teamScores"]["axis"]); + setteamscore("allies",game["teamScores"]["allies"]); + if(game["roundsWon"][param_00] > game["roundsWon"][level.otherteam[param_00]]) + { + level.finalkillcam_winner = param_00; + thread maps\mp\gametypes\_gamelogic::endgame(param_00,game["strings"]["score_limit_reached"]); + return; + } + + level.finalkillcam_winner = "none"; + thread maps\mp\gametypes\_gamelogic::endgame("overtime",game["strings"]["score_limit_reached"]); + return; + } + + return; + } + + if(game["teamScores"][param_00] == maps\mp\_utility::func_18D0("scorelimit")) + { + game["roundsWon"][param_00]++; + level.finalkillcam_winner = param_00; + game["teamScores"]["axis"] = game["roundsWon"]["axis"]; + game["teamScores"]["allies"] = game["roundsWon"]["allies"]; + setteamscore("axis",game["teamScores"]["axis"]); + setteamscore("allies",game["teamScores"]["allies"]); + thread maps\mp\gametypes\_gamelogic::endgame("halftime",game["strings"]["score_limit_reached"]); + return; + } +} + +//Function Number: 22 +ontimelimit() +{ + if(maps\mp\_utility::inovertime()) + { + game["teamScores"]["axis"] = game["roundsWon"]["axis"]; + game["teamScores"]["allies"] = game["roundsWon"]["allies"]; + setteamscore("axis",game["teamScores"]["axis"]); + setteamscore("allies",game["teamScores"]["allies"]); + level.finalkillcam_winner = "none"; + thread maps\mp\gametypes\_gamelogic::endgame("tie",game["strings"]["time_limit_reached"]); + return; + } + + if(game["switchedsides"]) + { + if(game["teamScores"]["axis"] > game["teamScores"]["allies"]) + { + game["roundsWon"]["axis"]++; + } + else if(game["teamScores"]["allies"] > game["teamScores"]["axis"]) + { + game["roundsWon"]["allies"]++; + } + + game["teamScores"]["axis"] = game["roundsWon"]["axis"]; + game["teamScores"]["allies"] = game["roundsWon"]["allies"]; + setteamscore("axis",game["teamScores"]["axis"]); + setteamscore("allies",game["teamScores"]["allies"]); + if(game["roundsWon"]["axis"] > game["roundsWon"]["allies"]) + { + level.finalkillcam_winner = "axis"; + thread maps\mp\gametypes\_gamelogic::endgame("axis",game["strings"]["time_limit_reached"]); + return; + } + + if(game["roundsWon"]["allies"] > game["roundsWon"]["axis"]) + { + level.finalkillcam_winner = "allies"; + thread maps\mp\gametypes\_gamelogic::endgame("allies",game["strings"]["time_limit_reached"]); + return; + } + + level.finalkillcam_winner = "none"; + thread maps\mp\gametypes\_gamelogic::endgame("overtime",game["strings"]["time_limit_reached"]); + return; + } + + if(game["teamScores"]["axis"] > game["teamScores"]["allies"]) + { + game["roundsWon"]["axis"]++; + level.finalkillcam_winner = "axis"; + } + else if(game["teamScores"]["allies"] > game["teamScores"]["axis"]) + { + game["roundsWon"]["allies"]++; + level.finalkillcam_winner = "allies"; + } + else + { + level.finalkillcam_winner = "none"; + } + + game["teamScores"]["axis"] = game["roundsWon"]["axis"]; + game["teamScores"]["allies"] = game["roundsWon"]["allies"]; + setteamscore("axis",game["teamScores"]["axis"]); + setteamscore("allies",game["teamScores"]["allies"]); + thread maps\mp\gametypes\_gamelogic::endgame("halftime",game["strings"]["time_limit_reached"]); +} + +//Function Number: 23 +applyflagcarrierclass() +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + if(isdefined(self.iscarrying) && self.iscarrying == 1) + { + self notify("force_cancel_placement"); + wait 0.05; + } + + while(self ismantling()) + { + wait 0.05; + } + + while(!self isonground()) + { + wait 0.05; + } + + if(maps\mp\_utility::isjuggernaut()) + { + self notify("lost_juggernaut"); + wait 0.05; + } + + self.pers["gamemodeLoadout"] = level.ctf_loadouts[self.team]; + if(isdefined(self.setspawnpoint)) + { + maps\mp\perks\_perkfunctions::func_2A63(self.setspawnpoint); + } + + var_00 = spawn("script_model",self.origin); + var_00.angles = self.angles; + var_00.playerspawnpos = self.origin; + var_00.notti = 1; + self.setspawnpoint = var_00; + self.gamemode_chosenclass = self.class; + self.pers["class"] = "gamemode"; + self.pers["lastClass"] = "gamemode"; + self.class = "gamemode"; + self.lastclass = "gamemode"; + self notify("faux_spawn"); + self.gameobject_fauxspawn = 1; + self.faux_spawn_stance = self getstance(); + thread maps\mp\gametypes\_playerlogic::func_2B25(1); + thread waitattachflag(); +} + +//Function Number: 24 +waitattachflag() +{ + level endon("game_ende"); + self endon("disconnect"); + self endon("death"); + self waittill("spawned_player"); + func_34EF(); +} + +//Function Number: 25 +removeflagcarrierclass() +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + if(isdefined(self.iscarrying) && self.iscarrying == 1) + { + self notify("force_cancel_placement"); + wait 0.05; + } + + while(self ismantling()) + { + wait 0.05; + } + + while(!self isonground()) + { + wait 0.05; + } + + if(maps\mp\_utility::isjuggernaut()) + { + self notify("lost_juggernaut"); + wait 0.05; + } + + self.pers["gamemodeLoadout"] = undefined; + if(isdefined(self.setspawnpoint)) + { + maps\mp\perks\_perkfunctions::func_2A63(self.setspawnpoint); + } + + var_00 = spawn("script_model",self.origin); + var_00.angles = self.angles; + var_00.playerspawnpos = self.origin; + var_00.notti = 1; + self.setspawnpoint = var_00; + self notify("faux_spawn"); + self.faux_spawn_stance = self getstance(); + thread maps\mp\gametypes\_playerlogic::func_2B25(1); +} + +//Function Number: 26 +oncantuse(param_00) +{ +} + +//Function Number: 27 +onplayerkilled(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09) +{ + if(isdefined(param_01) && isplayer(param_01) && param_01.pers["team"] != self.pers["team"]) + { + if(isdefined(param_01.carryflag)) + { + param_01 maps\mp\_utility::incplayerstat("killsasflagcarrier",1); + } + + if(isdefined(self.carryflag)) + { + param_01 thread [[ level.onxpevent ]]("kill_carrier"); + maps\mp\gametypes\_gamescore::func_26D3("kill_carrier",param_01); + param_01 maps\mp\_utility::incplayerstat("flagcarrierkills",1); + param_01 maps\mp\_utility::func_26FB("defends",1); + param_01 maps\mp\gametypes\_persistence::func_26D8("round","defends",param_01.pers["defends"]); + thread maps\mp\_matchdata::func_28B4(param_09,"carrying"); + func_34F0(); + return; + } + + return; + } + + if(isdefined(self.carryflag)) + { + func_34F0(); + } +} + +//Function Number: 28 +func_34EF() +{ + var_00 = level.otherteam[self.pers["team"]]; + self attach(level.carryflag[var_00],"J_spine4",1); + self.carryflag = level.carryflag[var_00]; +} + +//Function Number: 29 +func_34F0() +{ + self detach(self.carryflag,"J_spine4"); + self.carryflag = undefined; +} + +//Function Number: 30 +initgametypeawards() +{ + maps\mp\_awards::func_2D85("flagscaptured",0,::maps\mp\_awards::func_2DA7); + maps\mp\_awards::func_2D85("flagsreturned",0,::maps\mp\_awards::func_2DA7); + maps\mp\_awards::func_2D85("flagcarrierkills",0,::maps\mp\_awards::func_2DA7); + maps\mp\_awards::func_2D85("flagscarried",0,::maps\mp\_awards::func_2DA7); + maps\mp\_awards::func_2D85("killsasflagcarrier",0,::maps\mp\_awards::func_2DA7); +} + +//Function Number: 31 +func_34B3() +{ + if(isusingmatchrulesdata() && getmatchrulesdata("defaultClasses","axis",5,"class","inUse")) + { + level.ctf_loadouts["axis"] = maps\mp\_utility::func_334E("axis",5); + } + + if(isusingmatchrulesdata() && getmatchrulesdata("defaultClasses","allies",5,"class","inUse")) + { + level.ctf_loadouts["allies"] = maps\mp\_utility::func_334E("allies",5); + } +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/gametypes/ctfpro.gsc b/MW3/Xbox/MP/maps/mp/gametypes/ctfpro.gsc new file mode 100644 index 0000000..8dc3490 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/gametypes/ctfpro.gsc @@ -0,0 +1,715 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\ctfpro.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 26 + * Decompile Time: 373 ms + * Timestamp: 10/27/2023 2:26:06 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + maps\mp\gametypes\_globallogic::init(); + maps\mp\gametypes\_callbacksetup::setupcallbacks(); + maps\mp\gametypes\_globallogic::setupcallbacks(); + maps\mp\_utility::registerscorelimitdvar(level.gametype,1000); + maps\mp\_utility::func_3315(level.gametype,6,0,0); + maps\mp\_utility::func_3312(level.gametype,2,0,0); + maps\mp\_utility::setoverridewatchdvar("winlimit",2); + maps\mp\_utility::func_330E(level.gametype,1,0,0); + maps\mp\_utility::func_3317(level.gametype,0,0,0); + maps\mp\_utility::registerhalftimedvar(level.gametype,1,0,0); + level.teambased = 1; + level.onprecachegametype = ::onprecachegametype; + level.onstartgametype = ::onstartgametype; + level.getspawnpoint = ::getspawnpoint; + level.onplayerkilled = ::onplayerkilled; + level.initgametypeawards = ::initgametypeawards; + level.onhalftime = ::ontimelimit; + level.ontimelimit = ::ontimelimit; + level.onspawnplayer = ::onspawnplayer; + level.scorelimitoverride = 1; + level.overtimescorewinoverride = 1; + level.flagreturntime = maps\mp\_utility::getintproperty("scr_ctf_returntime",30); + game["dialog"]["gametype"] = "captureflag"; + if(getdvarint("g_hardcore")) + { + game["dialog"]["gametype"] = "hc_" + game["dialog"]["gametype"]; + } + else if(getdvarint("camera_thirdPerson")) + { + game["dialog"]["gametype"] = "thirdp_" + game["dialog"]["gametype"]; + } + else if(getdvarint("scr_diehard")) + { + game["dialog"]["gametype"] = "dh_" + game["dialog"]["gametype"]; + } + else if(getdvarint("scr_" + level.gametype + "_promode")) + { + game["dialog"]["gametype"] = game["dialog"]["gametype"] + "_pro"; + } + + game["dialog"]["offense_obj"] = "capture_obj"; + game["dialog"]["defense_obj"] = "capture_obj"; +} + +//Function Number: 2 +onprecachegametype() +{ + precachestring(&"MP_FLAG_TAKEN_BY"); + precachestring(&"MP_ENEMY_FLAG_TAKEN_BY"); + precachestring(&"MP_FLAG_CAPTURED_BY"); + precachestring(&"MP_ENEMY_FLAG_CAPTURED_BY"); + precachestring(&"MP_FLAG_RETURNED"); + precachestring(&"MP_ENEMY_FLAG_RETURNED"); + precachestring(&"MP_YOUR_FLAG_RETURNING_IN"); + precachestring(&"MP_ENEMY_FLAG_RETURNING_IN"); + precachestring(&"MP_ENEMY_FLAG_DROPPED_BY"); + precachestring(&"MP_DOM_NEUTRAL_FLAG_CAPTURED"); + precachestring(&"MP_GRABBING_FLAG"); + precachestring(&"MP_RETURNING_FLAG"); +} + +//Function Number: 3 +onspawnplayer() +{ + if(maps\mp\_utility::inovertime() && !isdefined(self.otspawned)) + { + thread func_34A3(); + } +} + +//Function Number: 4 +func_34A3() +{ + self endon("disconnect"); + wait 0.25; + self.otspawned = 1; + var_00 = maps\mp\_utility::func_2B3B(self.team); + thread maps\mp\gametypes\_hud_message::hintmessage(var_00); +} + +//Function Number: 5 +onstartgametype() +{ + if(!isdefined(game["switchedsides"])) + { + game["switchedsides"] = 0; + } + + if(!isdefined(game["original_defenders"])) + { + game["original_defenders"] = game["defenders"]; + } + + if(game["switchedsides"]) + { + var_00 = game["attackers"]; + var_01 = game["defenders"]; + game["attackers"] = var_01; + game["defenders"] = var_00; + if(game["roundsWon"][game["defenders"]] > 0) + { + game["teamScores"][game["defenders"]] = 500; + setteamscore(game["defenders"],500); + } + else + { + game["teamScores"][game["defenders"]] = 0; + setteamscore(game["defenders"],0); + } + } + + setclientnamemode("auto_change"); + if(level.splitscreen) + { + if(maps\mp\_utility::inovertime()) + { + maps\mp\_utility::func_3306(game["attackers"],&"OBJECTIVES_GRAB_FLAG"); + maps\mp\_utility::func_3306(game["defenders"],&"OBJECTIVES_GRAB_FLAG"); + } + else + { + maps\mp\_utility::func_3306(game["attackers"],&"OBJECTIVES_ONE_FLAG_ATTACKER"); + maps\mp\_utility::func_3306(game["defenders"],&"OBJECTIVES_ONE_FLAG_DEFENDER"); + } + } + else if(maps\mp\_utility::inovertime()) + { + maps\mp\_utility::func_3306(game["attackers"],&"OBJECTIVES_GRAB_FLAG_SCORE"); + maps\mp\_utility::func_3306(game["defenders"],&"OBJECTIVES_GRAB_FLAG_SCORE"); + } + else + { + maps\mp\_utility::func_3306(game["attackers"],&"OBJECTIVES_ONE_FLAG_ATTACKER_SCORE"); + maps\mp\_utility::func_3306(game["defenders"],&"OBJECTIVES_ONE_FLAG_DEFENDER_SCORE"); + } + + if(maps\mp\_utility::inovertime()) + { + maps\mp\_utility::func_3305(game["attackers"],&"OBJECTIVES_OVERTIME_CTF"); + maps\mp\_utility::func_3305(game["defenders"],&"OBJECTIVES_OVERTIME_CTF"); + maps\mp\_utility::setobjectivehinttext(game["attackers"],&"OBJECTIVES_GRAB_FLAG_HINT"); + maps\mp\_utility::setobjectivehinttext(game["defenders"],&"OBJECTIVES_GRAB_FLAG_HINT"); + } + else + { + maps\mp\_utility::func_3305(game["attackers"],&"OBJECTIVES_CTF"); + maps\mp\_utility::func_3305(game["defenders"],&"OBJECTIVES_CTF"); + maps\mp\_utility::setobjectivehinttext(game["attackers"],&"OBJECTIVES_ONE_FLAG_ATTACKER_HINT"); + maps\mp\_utility::setobjectivehinttext(game["defenders"],&"OBJECTIVES_ONE_FLAG_DEFENDER_HINT"); + } + + level.spawnmins = (0,0,0); + level.spawnmaxs = (0,0,0); + maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_ctf_pro_spawn_attackers_start"); + maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_ctf_pro_spawn_defenders_start"); + maps\mp\gametypes\_spawnlogic::func_2FD0(game["attackers"],"mp_ctf_pro_spawn_attackers"); + maps\mp\gametypes\_spawnlogic::func_2FD0(game["defenders"],"mp_ctf_pro_spawn_defenders"); + level.mapcenter = maps\mp\gametypes\_spawnlogic::func_2FCD(level.spawnmins,level.spawnmaxs); + setmapcenter(level.mapcenter); + maps\mp\gametypes\_rank::registerscoreinfo("kill",50); + maps\mp\gametypes\_rank::registerscoreinfo("headshot",50); + maps\mp\gametypes\_rank::registerscoreinfo("assist",20); + maps\mp\gametypes\_rank::registerscoreinfo("pickup",50); + maps\mp\gametypes\_rank::registerscoreinfo("return",50); + maps\mp\gametypes\_rank::registerscoreinfo("capture",250); + maps\mp\gametypes\_rank::registerscoreinfo("kill_carrier",50); + maps\mp\gametypes\_rank::registerscoreinfo("defend",100); + maps\mp\gametypes\_rank::registerscoreinfo("defend_assist",100); + maps\mp\gametypes\_rank::registerscoreinfo("assault",100); + maps\mp\gametypes\_rank::registerscoreinfo("assault_assist",100); + maps\mp\killstreaks\_killstreaks::registeradrenalineinfo("capture",1); + var_02[0] = "ctf_pro"; + maps\mp\gametypes\_gameobjects::main(var_02); + thread func_3506(); +} + +//Function Number: 6 +getspawnpoint() +{ + if(level.ingraceperiod) + { + if(self.team == game["attackers"]) + { + var_00 = "attackers"; + } + else + { + var_00 = "defenders"; + } + + var_01 = getentarray("mp_ctf_pro_spawn_" + var_00 + "_start","classname"); + var_02 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random(var_01); + } + else + { + var_01 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints(self.team); + var_02 = maps\mp\gametypes\_spawnlogic::func_2FE6(var_02); + } + + return var_02; +} + +//Function Number: 7 +func_3506() +{ + level.flagmodel[game["defenders"]] = maps\mp\gametypes\_teams::func_2774(game["defenders"]); + level.icon2d[game["defenders"]] = maps\mp\gametypes\_teams::func_2776(game["defenders"]); + level.carryflag[game["defenders"]] = maps\mp\gametypes\_teams::func_2775(game["defenders"]); + precachemodel(level.flagmodel[game["defenders"]]); + precachemodel(level.carryflag[game["defenders"]]); + level.iconescort2d["a"] = "waypoint_escort_a"; + level.iconescort2d["b"] = "waypoint_escort_b"; + level.iconescort3d["a"] = level.iconescort2d["a"]; + level.iconescort3d["b"] = level.iconescort2d["b"]; + precacheshader(level.iconescort2d["a"]); + precacheshader(level.iconescort2d["b"]); + level.iconkill2d["a"] = "waypoint_kill_a"; + level.iconkill2d["b"] = "waypoint_kill_b"; + level.iconkill3d["a"] = level.iconkill2d["a"]; + level.iconkill3d["b"] = level.iconkill2d["b"]; + precacheshader(level.iconkill2d["a"]); + precacheshader(level.iconkill2d["b"]); + level.iconcaptureflag2d["a"] = "waypoint_capture_flag_a"; + level.iconcaptureflag2d["b"] = "waypoint_capture_flag_b"; + level.iconcaptureflag3d["a"] = level.iconcaptureflag2d["a"]; + level.iconcaptureflag3d["b"] = level.iconcaptureflag2d["b"]; + precacheshader(level.iconcaptureflag2d["a"]); + precacheshader(level.iconcaptureflag2d["b"]); + level.icondefendflag2d["a"] = "waypoint_defend_flag_a"; + level.icondefendflag2d["b"] = "waypoint_defend_flag_b"; + level.icondefendflag3d["a"] = level.icondefendflag2d["a"]; + level.icondefendflag3d["b"] = level.icondefendflag2d["b"]; + precacheshader(level.icondefendflag2d["a"]); + precacheshader(level.icondefendflag2d["b"]); + level.iconreturnflag2d["a"] = "waypoint_return_flag_a"; + level.iconreturnflag2d["b"] = "waypoint_return_flag_b"; + level.iconreturnflag3d["a"] = level.iconreturnflag2d["a"]; + level.iconreturnflag3d["b"] = level.iconreturnflag2d["b"]; + precacheshader(level.iconreturnflag2d["a"]); + precacheshader(level.iconreturnflag2d["b"]); + level.iconflagbase2d = "waypoint_flag_base"; + level.iconflagbase3d = level.iconflagbase2d; + precacheshader(level.iconflagbase2d); + precacheshader(level.icon2d[game["defenders"]]); + precacheshader("waypoint_flag_friendly"); + precacheshader("waypoint_flag_enemy"); + precachestring(&"OBJECTIVES_FLAG_HOME"); + precachestring(&"OBJECTIVES_FLAG_NAME"); + precachestring(&"OBJECTIVES_FLAG_AWAY"); + level.teamflags[game["defenders"]] = func_3509(game["defenders"]); + level.capzones[game["attackers"]] = createcapzones(game["attackers"]); +} + +//Function Number: 8 +ontimelimit() +{ + if(game["switchedsides"] == 1) + { + if(game["roundsWon"][game["defenders"]] > 0) + { + game["teamScores"][game["defenders"]] = 1; + setteamscore(game["defenders"],1); + game["teamScores"][game["attackers"]] = 0; + setteamscore(game["attackers"],0); + maps\mp\_utility::setoverridewatchdvar("winlimit",1); + level.onlyroundoverride = 1; + thread maps\mp\gametypes\_gamelogic::endgame(game["defenders"],game["strings"]["time_limit_reached"]); + return; + } + + game["teamScores"][game["defenders"]] = 0; + setteamscore(game["defenders"],0); + game["teamScores"][game["attackers"]] = 0; + setteamscore(game["attackers"],0); + thread maps\mp\gametypes\_gamelogic::endgame("tie",game["strings"]["time_limit_reached"]); + return; + } + + game["roundsPlayed"]++; + game["teamScores"][game["attackers"]] = 0; + setteamscore(game["attackers"],0); + thread maps\mp\gametypes\_gamelogic::endgame("halftime",game["strings"]["time_limit_reached"]); +} + +//Function Number: 9 +func_3084(param_00,param_01,param_02,param_03,param_04) +{ + wait param_04; + var_05 = spawnfx(param_00,param_01,param_02,param_03); + triggerfx(var_05); +} + +//Function Number: 10 +func_3509(param_00) +{ + var_01 = []; + var_41[0].points = 200; + var_41[1].points = 200; + return var_41; +} + +//Function Number: 11 +func_34EC(param_00,param_01) +{ + var_02 = getent("ctf_pro_trig_" + param_01,"targetname"); + if(!isdefined(var_02)) + { + common_scripts\utility::error("No ctf_pro_trig_" + param_01 + " trigger found in map."); + return; + } + + var_03 = getent("ctf_pro_flag_" + param_01,"targetname"); + if(!isdefined(var_03)) + { + common_scripts\utility::error("No ctf_pro_flag_" + param_01 + " script_model found in map."); + return; + } + + var_04 = getent("ctf_pro_flag_spawn_" + param_01,"targetname"); + if(!isdefined(var_04)) + { + common_scripts\utility::error("No ctf_pro_flag_spawn_" + param_01 + " script_origin found in map."); + return; + } + + var_03 setmodel(level.flagmodel[param_00]); + var_05[0] = var_03; + var_06 = maps\mp\gametypes\_gameobjects::func_29A8(param_00,var_02,var_05,(0,0,85)); + var_06 maps\mp\gametypes\_gameobjects::func_2A18("friendly",0.5); + var_06 maps\mp\gametypes\_gameobjects::func_2A18("enemy",0.5); + var_06 maps\mp\gametypes\_gameobjects::setteamusetext("enemy",&"MP_GRABBING_FLAG"); + var_06 maps\mp\gametypes\_gameobjects::setteamusetext("friendly",&"MP_RETURNING_FLAG"); + var_06 maps\mp\gametypes\_gameobjects::allowcarry("enemy"); + var_06 maps\mp\gametypes\_gameobjects::setvisibleteam("none"); + var_06 maps\mp\gametypes\_gameobjects::set2dicon("friendly",level.iconkill2d[param_01]); + var_06 maps\mp\gametypes\_gameobjects::func_2A25("friendly",level.iconkill3d[param_01]); + var_06 maps\mp\gametypes\_gameobjects::set2dicon("enemy",level.iconescort2d[param_01]); + var_06 maps\mp\gametypes\_gameobjects::func_2A25("enemy",level.iconescort3d[param_01]); + var_06 maps\mp\gametypes\_gameobjects::setcarryicon(level.icon2d[param_00]); + var_06.objidpingfriendly = 1; + var_06.allowweapons = 1; + var_06.onpickup = ::onpickup; + var_06.onpickupfailed = ::onpickup; + var_06.ondrop = ::ondrop; + var_06.onreset = ::onreset; + var_06.oldradius = var_02.radius; + var_06.athome = 1; + var_06.label = param_01; + var_05 = []; + var_07 = maps\mp\gametypes\_gameobjects::func_29E7(param_00,var_04,var_05,(0,0,85)); + var_07 maps\mp\gametypes\_gameobjects::allowuse("none"); + var_07 maps\mp\gametypes\_gameobjects::setvisibleteam("any"); + var_07 maps\mp\gametypes\_gameobjects::set2dicon("friendly",level.icondefendflag2d[param_01]); + var_07 maps\mp\gametypes\_gameobjects::func_2A25("friendly",level.icondefendflag3d[param_01]); + var_07 maps\mp\gametypes\_gameobjects::set2dicon("enemy",level.iconcaptureflag2d[param_01]); + var_07 maps\mp\gametypes\_gameobjects::func_2A25("enemy",level.iconcaptureflag3d[param_01]); + var_06.marker = var_07; + var_08 = var_02.origin + (0,0,32); + var_09 = var_02.origin + (0,0,-32); + var_0A = bullettrace(var_08,var_09,0,undefined); + var_0B = maps\mp\gametypes\_teams::func_2777(param_00); + var_0C = loadfx(var_0B); + var_0D = vectortoangles(var_0A["normal"]); + var_0E = anglestoforward(var_0D); + var_0F = anglestoright(var_0D); + thread func_3084(var_0C,var_0A["position"],var_0E,var_0F,0.5); + return var_06; +} + +//Function Number: 12 +createcapzones(param_00) +{ + var_01 = []; + var_01 = getentarray("ctf_pro_zone","targetname"); + if(!isdefined(var_01[0])) + { + common_scripts\utility::error("No ctf_pro_zone triggers found in map."); + return; + } + + var_02 = []; + for(var_03 = 0;var_03 < var_01.size;var_03++) + { + if(isdefined(level.teamflags[maps\mp\_utility::getotherteam(param_00)][var_03])) + { + var_04 = []; + var_02[var_03] = maps\mp\gametypes\_gameobjects::func_29E7(param_00,var_01[var_03],var_04,(0,0,0)); + var_02[var_03] maps\mp\gametypes\_gameobjects::allowuse("friendly"); + var_02[var_03] maps\mp\gametypes\_gameobjects::setvisibleteam("none"); + var_02[var_03] maps\mp\gametypes\_gameobjects::setusetime(0); + var_02[var_03] maps\mp\gametypes\_gameobjects::func_29EC(level.teamflags[maps\mp\_utility::getotherteam(param_00)][var_03]); + var_02[var_03].onuse = ::onuse; + var_02[var_03].oncantuse = ::oncantuse; + } + } + + var_02[0].origin = var_01[0].origin; + var_05 = var_01[0].origin + (0,0,32); + var_06 = var_01[0].origin + (0,0,-32); + var_07 = bullettrace(var_05,var_06,0,undefined); + var_08 = maps\mp\gametypes\_teams::func_2777(param_00); + var_09 = loadfx(var_08); + var_0A = vectortoangles(var_07["normal"]); + var_0B = anglestoforward(var_0A); + var_0C = anglestoright(var_0A); + thread func_3084(var_09,var_07["position"],var_0B,var_0C,0.5); + return var_02; +} + +//Function Number: 13 +onbeginuse(param_00) +{ + var_01 = param_00.pers["team"]; + if(var_01 == maps\mp\gametypes\_gameobjects::func_2A15()) + { + self.trigger.radius = 1024; + return; + } + + self.trigger.radius = self.oldradius; +} + +//Function Number: 14 +onenduse(param_00,param_01,param_02) +{ + self.trigger.radius = self.oldradius; +} + +//Function Number: 15 +onpickup(param_00) +{ + self notify("picked_up"); + var_01 = param_00.pers["team"]; + if(var_01 == "allies") + { + var_02 = "axis"; + } + else + { + var_02 = "allies"; + } + + if(var_01 == maps\mp\gametypes\_gameobjects::func_2A15()) + { + thread maps\mp\_utility::teamplayercardsplash("callout_flagreturn",param_00); + param_00 thread maps\mp\gametypes\_hud_message::func_2892("flagreturn",maps\mp\gametypes\_rank::getscoreinfovalue("return")); + maps\mp\gametypes\_gamescore::func_26D3("return",param_00); + param_00 thread [[ level.onxpevent ]]("return"); + thread func_34EE(); + param_00 maps\mp\_utility::incplayerstat("flagsreturned",1); + param_00 maps\mp\_utility::func_26FB("returns",1); + param_00 thread maps\mp\_matchdata::loggameevent("return",param_00.origin); + maps\mp\_utility::func_32F9(var_01,maps\mp\_utility::getotherteam(var_01),&"MP_FLAG_RETURNED",&"MP_ENEMY_FLAG_RETURNED","mp_obj_returned","mp_obj_returned",""); + maps\mp\_utility::func_26E5("enemy_flag_returned",var_02,"status"); + maps\mp\_utility::func_26E5("flag_returned",var_01,"status"); + return; + } + + param_00 func_34EF(self); + maps\mp\gametypes\_gameobjects::setvisibleteam("any"); + maps\mp\gametypes\_gameobjects::set2dicon("friendly",level.iconkill2d[self.label]); + maps\mp\gametypes\_gameobjects::func_2A25("friendly",level.iconkill3d[self.label]); + maps\mp\gametypes\_gameobjects::set2dicon("enemy",level.iconescort2d[self.label]); + maps\mp\gametypes\_gameobjects::func_2A25("enemy",level.iconescort3d[self.label]); + self.marker maps\mp\gametypes\_gameobjects::setvisibleteam("none"); + param_00.zoneheadicon = level.capzones[game["attackers"]][0] maps\mp\_entityheadicons::func_277C(param_00,level.iconflagbase2d,(0,0,0),24,24,undefined,undefined,undefined,undefined,undefined,0); + param_00.zonemapicon = maps\mp\gametypes\_gameobjects::func_2A31(); + objective_add(param_00.zonemapicon,"invisible",(0,0,0)); + objective_position(param_00.zonemapicon,level.capzones[game["attackers"]][0].origin); + objective_state(param_00.zonemapicon,"active"); + objective_player(param_00.zonemapicon,param_00 getentitynumber()); + objective_icon(param_00.zonemapicon,level.iconflagbase2d); + maps\mp\_utility::func_32F9(var_01,var_02,&"MP_ENEMY_FLAG_TAKEN_BY",&"MP_FLAG_TAKEN_BY","mp_obj_taken","mp_enemy_obj_taken",param_00); + maps\mp\_utility::func_26E5("enemy_flag_taken",var_01,"status"); + maps\mp\_utility::func_26E5("flag_taken",var_02,"status"); + thread maps\mp\_utility::teamplayercardsplash("callout_flagpickup",param_00); + param_00 thread maps\mp\gametypes\_hud_message::func_2892("flagpickup",maps\mp\gametypes\_rank::getscoreinfovalue("pickup")); + maps\mp\gametypes\_gamescore::func_26D3("pickup",param_00); + param_00 thread [[ level.onxpevent ]]("pickup"); + param_00 maps\mp\_utility::incplayerstat("flagscarried",1); + param_00 thread maps\mp\_matchdata::loggameevent("pickup",param_00.origin); +} + +//Function Number: 16 +func_34EE() +{ + maps\mp\gametypes\_gameobjects::func_29D7(); +} + +//Function Number: 17 +ondrop(param_00) +{ + var_01 = maps\mp\gametypes\_gameobjects::func_2A15(); + var_02 = level.otherteam[var_01]; + maps\mp\gametypes\_gameobjects::allowcarry("any"); + maps\mp\gametypes\_gameobjects::setvisibleteam("any"); + maps\mp\gametypes\_gameobjects::set2dicon("friendly",level.iconreturnflag2d[self.label]); + maps\mp\gametypes\_gameobjects::func_2A25("friendly",level.iconreturnflag3d[self.label]); + maps\mp\gametypes\_gameobjects::set2dicon("enemy",level.iconcaptureflag2d[self.label]); + maps\mp\gametypes\_gameobjects::func_2A25("enemy",level.iconcaptureflag3d[self.label]); + if(isdefined(param_00)) + { + if(isdefined(param_00.carryflag)) + { + param_00 func_34F0(); + } + + maps\mp\_utility::func_32F9(var_02,"none",&"MP_ENEMY_FLAG_DROPPED_BY","","mp_war_objective_lost","",param_00); + if(isdefined(param_00.zoneheadicon)) + { + param_00.zoneheadicon destroy(); + } + + if(isdefined(param_00.zonemapicon)) + { + maps\mp\_utility::_objective_delete(param_00.zonemapicon); + param_00.zonemapicon = undefined; + } + } + else + { + maps\mp\_utility::func_2D68("mp_war_objective_lost",var_02); + } + + maps\mp\_utility::func_26E5("enemy_flag_dropped",var_02,"status"); + maps\mp\_utility::func_26E5("flag_dropped",var_01,"status"); + thread returnaftertime(); +} + +//Function Number: 18 +returnaftertime() +{ + self endon("picked_up"); + wait level.flagreturntime; + maps\mp\gametypes\_gameobjects::func_29D7(); +} + +//Function Number: 19 +onreset() +{ + var_00 = maps\mp\gametypes\_gameobjects::func_2A15(); + var_01 = level.otherteam[var_00]; + maps\mp\gametypes\_gameobjects::allowcarry("enemy"); + maps\mp\gametypes\_gameobjects::setvisibleteam("none"); + maps\mp\gametypes\_gameobjects::set2dicon("friendly",level.iconkill2d[self.label]); + maps\mp\gametypes\_gameobjects::func_2A25("friendly",level.iconkill3d[self.label]); + maps\mp\gametypes\_gameobjects::set2dicon("enemy",level.iconescort2d[self.label]); + maps\mp\gametypes\_gameobjects::func_2A25("enemy",level.iconescort3d[self.label]); + self.marker maps\mp\gametypes\_gameobjects::setvisibleteam("any"); +} + +//Function Number: 20 +onuse(param_00) +{ + var_01 = param_00.pers["team"]; + if(var_01 == "allies") + { + var_02 = "axis"; + } + else + { + var_02 = "allies"; + } + + maps\mp\_utility::func_26E5("enemy_flag_captured",var_01,"status"); + maps\mp\_utility::func_26E5("flag_captured",var_02,"status"); + thread maps\mp\_utility::teamplayercardsplash("callout_flagcapture",param_00); + givescore(var_01,param_00.cappedflag.points); + param_00 thread maps\mp\gametypes\_hud_message::func_2892("flag_capture",maps\mp\gametypes\_rank::getscoreinfovalue("capture")); + maps\mp\gametypes\_gamescore::func_26D3("capture",param_00); + param_00 thread [[ level.onxpevent ]]("capture"); + param_00 maps\mp\_utility::incplayerstat("flagscaptured",1); + param_00 maps\mp\_utility::func_26FB("captures",1); + param_00 notify("objective","captured"); + param_00 thread maps\mp\_matchdata::loggameevent("capture",param_00.origin); + if(isdefined(level.adrenalineinfo["capture"])) + { + param_00 maps\mp\killstreaks\_killstreaks::giveadrenaline("capture"); + } + + maps\mp\_utility::func_32F9(var_01,var_02,&"MP_ENEMY_FLAG_CAPTURED_BY",&"MP_FLAG_CAPTURED_BY","mp_obj_captured","mp_enemy_obj_captured",param_00); + if(isdefined(param_00.carryflag)) + { + param_00 func_34F0(); + } + + if(isdefined(param_00.zoneheadicon)) + { + param_00.zoneheadicon destroy(); + } + + if(isdefined(param_00.zonemapicon)) + { + maps\mp\_utility::_objective_delete(param_00.zonemapicon); + param_00.zonemapicon = undefined; + } + + param_00.cappedflag func_34EE(); +} + +//Function Number: 21 +givescore(param_00,param_01) +{ + maps\mp\gametypes\_gamescore::giveteamscoreforobjective(param_00,param_01); + if(game["state"] != "playing") + { + return; + } + + if(game["switchedsides"]) + { + if(game["teamScores"][game["attackers"]] >= maps\mp\_utility::func_18D0("scorelimit")) + { + maps\mp\_utility::setoverridewatchdvar("winlimit",1); + level.onlyroundoverride = 1; + if(game["roundsWon"][game["defenders"]] == 0) + { + game["teamScores"][game["attackers"]] = 1; + setteamscore(game["attackers"],1); + game["teamScores"][game["defenders"]] = 0; + setteamscore(game["defenders"],0); + thread maps\mp\gametypes\_gamelogic::endgame(game["attackers"],game["strings"]["score_limit_reached"]); + return; + } + + game["teamScores"][game["attackers"]] = 1; + setteamscore(game["attackers"],1); + game["teamScores"][game["defenders"]] = 1; + setteamscore(game["defenders"],1); + thread maps\mp\gametypes\_gamelogic::endgame("tie",game["strings"]["score_limit_reached"]); + return; + } + + return; + } + + if(game["teamScores"][game["attackers"]] >= maps\mp\_utility::func_18D0("scorelimit")) + { + game["roundsPlayed"]++; + game["teamScores"][game["attackers"]] = 1; + setteamscore(game["attackers"],1); + game["teamScores"][game["defenders"]] = 0; + setteamscore(game["defenders"],0); + game["roundsWon"][game["attackers"]]++; + maps\mp\gametypes\_gamescore::func_26EB(game["attackers"]); + thread maps\mp\gametypes\_gamelogic::endgame("halftime",game["strings"]["score_limit_reached"]); + } +} + +//Function Number: 22 +oncantuse(param_00) +{ +} + +//Function Number: 23 +onplayerkilled(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09) +{ + if(isdefined(param_01) && isplayer(param_01) && param_01.pers["team"] != self.pers["team"]) + { + if(isdefined(param_01.carryflag)) + { + param_01 maps\mp\_utility::incplayerstat("killsasflagcarrier",1); + } + + if(isdefined(self.carryflag)) + { + thread maps\mp\_utility::teamplayercardsplash("callout_killflagcarrier",param_01); + param_01 thread maps\mp\gametypes\_hud_message::func_2892("killflagcarrier",maps\mp\gametypes\_rank::getscoreinfovalue("kill_carrier")); + maps\mp\gametypes\_gamescore::func_26D3("kill_carrier",param_01); + param_01 thread [[ level.onxpevent ]]("kill_carrier"); + param_01 maps\mp\_utility::func_26FB("defends",1); + thread maps\mp\_matchdata::func_28B4(param_09,"carrying"); + func_34F0(); + } + } +} + +//Function Number: 24 +func_34EF(param_00) +{ + var_01 = level.otherteam[self.pers["team"]]; + self attach(level.carryflag[var_01],"J_spine4",1); + self.carryflag = level.carryflag[var_01]; + self.cappedflag = param_00; +} + +//Function Number: 25 +func_34F0() +{ + self detach(self.carryflag,"J_spine4"); + self.carryflag = undefined; +} + +//Function Number: 26 +initgametypeawards() +{ + maps\mp\_awards::func_2D85("flagscaptured",0,::maps\mp\_awards::func_2DA7); + maps\mp\_awards::func_2D85("flagsreturned",0,::maps\mp\_awards::func_2DA7); + maps\mp\_awards::func_2D85("flagcarrierkills",0,::maps\mp\_awards::func_2DA7); + maps\mp\_awards::func_2D85("flagscarried",0,::maps\mp\_awards::func_2DA7); + maps\mp\_awards::func_2D85("killsasflagcarrier",0,::maps\mp\_awards::func_2DA7); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/gametypes/dd.gsc b/MW3/Xbox/MP/maps/mp/gametypes/dd.gsc new file mode 100644 index 0000000..cdf6600 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/gametypes/dd.gsc @@ -0,0 +1,1151 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\dd.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 33 + * Decompile Time: 484 ms + * Timestamp: 10/27/2023 2:26:07 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(getdvar("mapname") == "mp_background") + { + return; + } + + maps\mp\gametypes\_globallogic::init(); + maps\mp\gametypes\_callbacksetup::setupcallbacks(); + maps\mp\gametypes\_globallogic::setupcallbacks(); + if(isusingmatchrulesdata()) + { + level.initializematchrules = ::initializematchrules; + [[ level.initializematchrules ]](); + level thread maps\mp\_utility::func_810A(); + } + else + { + maps\mp\_utility::func_330E(level.gametype,1,0,9); + maps\mp\_utility::func_3315(level.gametype,3); + maps\mp\_utility::registerscorelimitdvar(level.gametype,0); + maps\mp\_utility::func_3312(level.gametype,3); + maps\mp\_utility::registerwinlimitdvar(level.gametype,2); + maps\mp\_utility::func_3317(level.gametype,0); + maps\mp\_utility::registerhalftimedvar(level.gametype,0); + level.matchrules_damagemultiplier = 0; + level.matchrules_vampirism = 0; + } + + maps\mp\_utility::func_3318(3); + level.objectivebased = 1; + level.teambased = 1; + level.onprecachegametype = ::onprecachegametype; + level.onstartgametype = ::onstartgametype; + level.getspawnpoint = ::getspawnpoint; + level.onspawnplayer = ::onspawnplayer; + level.ondeadevent = ::ondeadevent; + level.ontimelimit = ::ontimelimit; + level.onnormaldeath = ::onnormaldeath; + level.initgametypeawards = ::initgametypeawards; + if(level.matchrules_damagemultiplier || level.matchrules_vampirism) + { + level.modifyplayerdamage = ::maps\mp\gametypes\_damage::func_2D57; + } + + level.dd = 1; + level.bombsplanted = 0; + level.ddbombmodel = [] setbombtimerdvar(); + makedvarserverinfo("ui_bombtimer_a",-1); + makedvarserverinfo("ui_bombtimer_b",-1); + game["dialog"]["gametype"] = "demolition"; + if(getdvarint("g_hardcore")) + { + game["dialog"]["gametype"] = "hc_" + game["dialog"]["gametype"]; + } + else if(getdvarint("camera_thirdPerson")) + { + game["dialog"]["gametype"] = "thirdp_" + game["dialog"]["gametype"]; + } + else if(getdvarint("scr_diehard")) + { + game["dialog"]["gametype"] = "dh_" + game["dialog"]["gametype"]; + } + else if(getdvarint("scr_" + level.gametype + "_promode")) + { + game["dialog"]["gametype"] = game["dialog"]["gametype"] + "_pro"; + } + + game["dialog"]["offense_obj"] = "obj_destroy"; + game["dialog"]["defense_obj"] = "obj_defend"; +} + +//Function Number: 2 +initializematchrules() +{ + maps\mp\_utility::func_334C(); + var_00 = getmatchrulesdata("demData","roundSwitch"); + setdynamicdvar("scr_dd_roundswitch",var_00); + maps\mp\_utility::func_330E("dd",var_00,0,9); + setdynamicdvar("scr_dd_bombtimer",getmatchrulesdata("demData","bombTimer")); + setdynamicdvar("scr_dd_planttime",getmatchrulesdata("demData","plantTime")); + setdynamicdvar("scr_dd_defusetime",getmatchrulesdata("demData","defuseTime")); + setdynamicdvar("scr_dd_addtime",getmatchrulesdata("demData","extraTime")); + setdynamicdvar("scr_dd_roundlimit",3); + maps\mp\_utility::func_3312("dd",3); + setdynamicdvar("scr_dd_winlimit",2); + maps\mp\_utility::registerwinlimitdvar("dd",2); + setdynamicdvar("scr_dd_halftime",0); + maps\mp\_utility::registerhalftimedvar("dd",0); + setdynamicdvar("scr_dd_promode",0); +} + +//Function Number: 3 +onprecachegametype() +{ + game["bomb_dropped_sound"] = "mp_war_objective_lost"; + game["bomb_recovered_sound"] = "mp_war_objective_taken"; + precacheshader("waypoint_bomb"); + precacheshader("hud_suitcase_bomb"); + precacheshader("waypoint_target"); + precacheshader("waypoint_target_a"); + precacheshader("waypoint_target_b"); + precacheshader("waypoint_defend"); + precacheshader("waypoint_defend_a"); + precacheshader("waypoint_defend_b"); + precacheshader("waypoint_defuse_a"); + precacheshader("waypoint_defuse_b"); + precacheshader("waypoint_target"); + precacheshader("waypoint_target_a"); + precacheshader("waypoint_target_b"); + precacheshader("waypoint_defend"); + precacheshader("waypoint_defend_a"); + precacheshader("waypoint_defend_b"); + precacheshader("waypoint_defuse"); + precacheshader("waypoint_defuse_a"); + precacheshader("waypoint_defuse_b"); + precachestring(&"MP_EXPLOSIVES_RECOVERED_BY"); + precachestring(&"MP_EXPLOSIVES_DROPPED_BY"); + precachestring(&"MP_EXPLOSIVES_PLANTED_BY"); + precachestring(&"MP_EXPLOSIVES_DEFUSED_BY"); + precachestring(&"PLATFORM_HOLD_TO_PLANT_EXPLOSIVES"); + precachestring(&"PLATFORM_HOLD_TO_DEFUSE_EXPLOSIVES"); + precachestring(&"MP_CANT_PLANT_WITHOUT_BOMB"); + precachestring(&"MP_PLANTING_EXPLOSIVE"); + precachestring(&"MP_DEFUSING_EXPLOSIVE"); + precachestring(&"MP_BOMB_A_TIMER"); + precachestring(&"MP_BOMB_B_TIMER"); + precachestring(&"MP_BOMBSITE_IN_USE"); +} + +//Function Number: 4 +onstartgametype() +{ + if(game["roundsPlayed"] == 2) + { + game["status"] = "overtime"; + setdvar("ui_overtime",1); + } + + if(!isdefined(game["switchedsides"])) + { + game["switchedsides"] = 0; + } + + if(game["switchedsides"]) + { + var_00 = game["attackers"]; + var_01 = game["defenders"]; + game["attackers"] = var_01; + game["defenders"] = var_00; + } + + level.usestartspawns = 1; + setclientnamemode("manual_change"); + game["strings"]["target_destroyed"] = &"MP_TARGET_DESTROYED"; + game["strings"]["bomb_defused"] = &"MP_BOMB_DEFUSED"; + if(maps\mp\_utility::inovertime()) + { + game["dialog"]["defense_obj"] = "obj_destroy"; + } + + precachestring(game["strings"]["target_destroyed"]); + precachestring(game["strings"]["bomb_defused"]); + level._effect["bombexplosion"] = loadfx("explosions/tanker_explosion"); + maps\mp\_utility::func_3305(game["attackers"],&"OBJECTIVES_DD_ATTACKER"); + maps\mp\_utility::func_3305(game["defenders"],&"OBJECTIVES_DD_DEFENDER"); + if(level.splitscreen) + { + maps\mp\_utility::func_3306(game["attackers"],&"OBJECTIVES_DD_ATTACKER"); + maps\mp\_utility::func_3306(game["defenders"],&"OBJECTIVES_DD_DEFENDER"); + } + else + { + maps\mp\_utility::func_3306(game["attackers"],&"OBJECTIVES_DD_ATTACKER_SCORE"); + maps\mp\_utility::func_3306(game["defenders"],&"OBJECTIVES_DD_DEFENDER_SCORE"); + } + + if(maps\mp\_utility::inovertime()) + { + maps\mp\_utility::setobjectivehinttext(game["attackers"],&"OBJECTIVES_DD_OVERTIME_HINT"); + maps\mp\_utility::setobjectivehinttext(game["defenders"],&"OBJECTIVES_DD_OVERTIME_HINT"); + } + else + { + maps\mp\_utility::setobjectivehinttext(game["attackers"],&"OBJECTIVES_DD_ATTACKER_HINT"); + maps\mp\_utility::setobjectivehinttext(game["defenders"],&"OBJECTIVES_DD_DEFENDER_HINT"); + } + + level.spawnmins = (0,0,0); + level.spawnmaxs = (0,0,0); + maps\mp\gametypes\_spawnlogic::func_2FD0(game["defenders"],"mp_dd_spawn_defender"); + maps\mp\gametypes\_spawnlogic::func_2FD0(game["defenders"],"mp_dd_spawn_defender_a",1); + maps\mp\gametypes\_spawnlogic::func_2FD0(game["defenders"],"mp_dd_spawn_defender_b",1); + maps\mp\gametypes\_spawnlogic::func_2FD0(game["attackers"],"mp_tdm_spawn"); + level.favorclosespawnscalardefender = 2; + maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_dd_spawn_defender_start"); + maps\mp\gametypes\_spawnlogic::func_2FD0(game["attackers"],"mp_dd_spawn_attacker"); + maps\mp\gametypes\_spawnlogic::func_2FD0(game["attackers"],"mp_dd_spawn_attacker_a",1); + maps\mp\gametypes\_spawnlogic::func_2FD0(game["attackers"],"mp_dd_spawn_attacker_b",1); + maps\mp\gametypes\_spawnlogic::func_2FD0(game["attackers"],"mp_tdm_spawn"); + level.favorclosespawnscalarattacker = 2; + maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_dd_spawn_attacker_start"); + level.tdmspawns = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_tdm_spawn"); + level.spawn_defenders = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_dd_spawn_defender"); + level.defenderdefaultentorigin = level.spawn_defenders[0]; + level.spawn_defenders = common_scripts\utility::array_combine(level.spawn_defenders,level.tdmspawns); + level.spawn_defenders_a = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_dd_spawn_defender_a"); + if(isdefined(level.spawn_defenders_a[0])) + { + level.defenderaentorigin = level.spawn_defenders_a[0]; + } + + level.spawn_defenders_a = common_scripts\utility::array_combine(level.spawn_defenders,level.spawn_defenders_a); + level.spawn_defenders_b = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_dd_spawn_defender_b"); + if(isdefined(level.spawn_defenders_b[0])) + { + level.defenderbentorigin = level.spawn_defenders_b[0]; + } + + level.spawn_defenders_b = common_scripts\utility::array_combine(level.spawn_defenders,level.spawn_defenders_b); + level.spawn_attackers = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_dd_spawn_attacker"); + level.attackerdefaultentorigin = level.spawn_attackers[0]; + level.spawn_attackers = common_scripts\utility::array_combine(level.spawn_defenders,level.tdmspawns); + level.spawn_attackers_a = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_dd_spawn_attacker_a"); + if(isdefined(level.spawn_attackers_a[0])) + { + level.attackeraentorigin = level.spawn_attackers_a[0]; + } + + level.spawn_attackers_a = common_scripts\utility::array_combine(level.spawn_attackers,level.spawn_attackers_a); + level.spawn_attackers_b = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_dd_spawn_attacker_b"); + if(isdefined(level.spawn_attackers_b[0])) + { + level.attackerbentorigin = level.spawn_attackers_b[0]; + } + + level.spawn_attackers_b = common_scripts\utility::array_combine(level.spawn_attackers,level.spawn_attackers_b); + level.spawn_defenders_start = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_dd_spawn_defender_start"); + level.spawn_attackers_start = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_dd_spawn_attacker_start"); + level.mapcenter = maps\mp\gametypes\_spawnlogic::func_2FCD(level.spawnmins,level.spawnmaxs); + level.aplanted = 0; + level.bplanted = 0; + setmapcenter(level.mapcenter); + maps\mp\gametypes\_rank::registerscoreinfo("win",2); + maps\mp\gametypes\_rank::registerscoreinfo("loss",1); + maps\mp\gametypes\_rank::registerscoreinfo("tie",1.5); + maps\mp\gametypes\_rank::registerscoreinfo("kill",50); + maps\mp\gametypes\_rank::registerscoreinfo("headshot",50); + maps\mp\gametypes\_rank::registerscoreinfo("assist",20); + maps\mp\gametypes\_rank::registerscoreinfo("plant",100); + maps\mp\gametypes\_rank::registerscoreinfo("defuse",100); + thread func_2F0E(); + thread func_3593(); + var_02 = maps\mp\_utility::func_18D0("winlimit"); + var_03[0] = "dd"; + maps\mp\gametypes\_gameobjects::main(var_41); + thread func_348C(); +} + +//Function Number: 5 +func_3593() +{ + level endon("game_end"); + for(;;) + { + if(level.ingraceperiod == 0) + { + break; + } + + wait 0.05; + } + + level.usestartspawns = 0; +} + +//Function Number: 6 +getspawnpoint() +{ + var_00 = self.pers["team"]; + if(level.usestartspawns) + { + if(var_00 == game["attackers"]) + { + var_01 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random(level.spawn_attackers_start); + } + else + { + var_01 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random(level.spawn_defenders_start); + } + } + else + { + var_02 = level.tdmspawns; + if(var_00 == game["attackers"]) + { + if(maps\mp\_utility::inovertime()) + { + var_02 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints(var_00); + } + else if(!level.aplanted && !level.bplanted) + { + level.favorclosespawnentattacker = level.attackerdefaultentorigin; + } + else if(level.aplanted && !level.bplanted) + { + if(isdefined(level.attackeraentorigin)) + { + level.favorclosespawnentattacker = level.attackeraentorigin; + } + else + { + level.favorclosespawnentattacker = level.attackerdefaultentorigin; + } + } + else if(level.bplanted && !level.aplanted) + { + if(isdefined(level.attackerbentorigin)) + { + level.favorclosespawnentattacker = level.attackerbentorigin; + } + else + { + level.favorclosespawnentattacker = level.attackerdefaultentorigin; + } + } + else if(isdefined(level.attackeraentorigin)) + { + level.favorclosespawnentattacker = level.attackeraentorigin; + } + else if(isdefined(level.attackerbentorigin)) + { + level.favorclosespawnentattacker = level.attackerbentorigin; + } + else + { + level.favorclosespawnentattacker = level.attackerdefaultentorigin; + } + + var_01 = maps\mp\gametypes\_spawnlogic::func_2FE6(var_02); + } + else + { + if(maps\mp\_utility::inovertime()) + { + var_02 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints(var_00); + } + else if(!level.aplanted && !level.bplanted) + { + level.favorclosespawnentdefender = level.defenderdefaultentorigin; + } + else if(level.aplanted && !level.bplanted) + { + if(isdefined(level.defenderaentorigin)) + { + level.favorclosespawnentdefender = level.defenderaentorigin; + } + else + { + level.favorclosespawnentdefender = level.defenderdefaultentorigin; + } + } + else if(level.bplanted && !level.aplanted) + { + if(isdefined(level.defenderbentorigin)) + { + level.favorclosespawnentdefender = level.defenderbentorigin; + } + else + { + level.favorclosespawnentdefender = level.defenderdefaultentorigin; + } + } + else if(isdefined(level.defenderaentorigin)) + { + level.favorclosespawnentdefender = level.defenderaentorigin; + } + else if(isdefined(level.defenderbentorigin)) + { + level.favorclosespawnentdefender = level.defenderbentorigin; + } + else + { + level.favorclosespawnentdefender = level.defenderdefaultentorigin; + } + + var_01 = maps\mp\gametypes\_spawnlogic::func_2FE6(var_02); + } + } + + return var_01; +} + +//Function Number: 7 +onspawnplayer() +{ + if(maps\mp\_utility::inovertime() || self.pers["team"] == game["attackers"]) + { + self.isplanting = 0; + self.isdefusing = 0; + self.isbombcarrier = 1; + if(level.splitscreen) + { + self.carryicon = maps\mp\gametypes\_hud_util::createicon("hud_suitcase_bomb",33,33); + self.carryicon maps\mp\gametypes\_hud_util::setpoint("BOTTOM RIGHT","BOTTOM RIGHT",-50,-78); + self.carryicon.alpha = 0.75; + } + else + { + self.carryicon = maps\mp\gametypes\_hud_util::createicon("hud_suitcase_bomb",50,50); + self.carryicon maps\mp\gametypes\_hud_util::setpoint("BOTTOM RIGHT","BOTTOM RIGHT",-50,-65); + self.carryicon.alpha = 0.75; + } + + self.carryicon.hidewheninmenu = 1; + thread func_80F4(); + } + else + { + self.isplanting = 0; + self.isdefusing = 0; + self.isbombcarrier = 0; + if(isdefined(self.carryicon)) + { + self.carryicon destroy(); + } + } + + level notify("spawned_player"); +} + +//Function Number: 8 +func_80F4() +{ + self endon("disconnect"); + level waittill("game_ended"); + if(isdefined(self.carryicon)) + { + self.carryicon.alpha = 0; + } +} + +//Function Number: 9 +func_3594(param_00,param_01) +{ + if(param_00 == "tie") + { + level.finalkillcam_winner = "none"; + } + else + { + level.finalkillcam_winner = param_00; + } + + thread maps\mp\gametypes\_gamelogic::endgame(param_00,param_01); +} + +//Function Number: 10 +ondeadevent(param_00) +{ + if(level.bombexploded || level.bombdefused) + { + return; + } + + if(param_00 == "all") + { + if(level.bombplanted) + { + func_3594(game["attackers"],game["strings"][game["defenders"] + "_eliminated"]); + return; + } + + func_3594(game["defenders"],game["strings"][game["attackers"] + "_eliminated"]); + return; + } + + if(param_00 == game["attackers"]) + { + if(level.bombplanted) + { + return; + } + + level thread func_3594(game["defenders"],game["strings"][game["attackers"] + "_eliminated"]); + return; + } + + if(param_00 == game["defenders"]) + { + level thread func_3594(game["attackers"],game["strings"][game["defenders"] + "_eliminated"]); + return; + } +} + +//Function Number: 11 +onnormaldeath(param_00,param_01,param_02) +{ + var_03 = maps\mp\gametypes\_rank::getscoreinfovalue("kill"); + var_04 = param_00.team; + if(game["state"] == "postgame" && param_00.team == game["defenders"] || !level.bombplanted) + { + param_01.finalkill = 1; + } + + if(param_00.isplanting) + { + thread maps\mp\_matchdata::func_28B4(param_02,"planting"); + param_01 maps\mp\_utility::func_26FB("defends",1); + param_01 maps\mp\gametypes\_persistence::func_26D8("round","defends",param_01.pers["defends"]); + return; + } + + if(param_00.isdefusing) + { + thread maps\mp\_matchdata::func_28B4(param_02,"defusing"); + param_01 maps\mp\_utility::func_26FB("defends",1); + param_01 maps\mp\gametypes\_persistence::func_26D8("round","defends",param_01.pers["defends"]); + } +} + +//Function Number: 12 +ontimelimit() +{ + if(maps\mp\_utility::inovertime()) + { + func_3594("tie",game["strings"]["time_limit_reached"]); + return; + } + + func_3594(game["defenders"],game["strings"]["time_limit_reached"]); +} + +//Function Number: 13 +func_2F0E() +{ + level.planttime = maps\mp\_utility::dvarfloatvalue("planttime",5,0,20); + level.defusetime = maps\mp\_utility::dvarfloatvalue("defusetime",5,0,20); + level.bombtimer = maps\mp\_utility::func_32FD("bombtimer",45,1,300); + level.ddtimetoadd = maps\mp\_utility::dvarfloatvalue("addtime",2,0,5); +} + +//Function Number: 14 +func_3595(param_00) +{ + var_01 = ""; + if(param_00.size != 3) + { + var_02 = 0; + var_03 = 0; + var_04 = 0; + foreach(var_06 in param_00) + { + if(issubstr(tolower(var_06.script_label),"a")) + { + var_02 = 1; + continue; + } + + if(issubstr(tolower(var_06.script_label),"b")) + { + var_03 = 1; + continue; + } + + if(issubstr(tolower(var_06.script_label),"c")) + { + var_04 = 1; + } + } + + if(!var_02) + { + var_01 = var_01 + " A "; + } + + if(!var_03) + { + var_01 = var_01 + " B "; + } + + if(!var_04) + { + var_01 = var_01 + " C "; + } + } + + if(var_01 != "") + { + } +} + +//Function Number: 15 +func_348C() +{ + level.bombplanted = 0; + level.bombdefused = 0; + level.bombexploded = 0; + level.bombzones = []; + var_00 = getentarray("dd_bombzone","targetname"); + func_3595(var_00); + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + var_02 = var_00[var_01]; + var_03 = getentarray(var_00[var_01].target,"targetname"); + var_04 = var_00[var_01].script_label; + var_05 = getent("dd_bombzone_clip" + var_04,"targetname"); + if(maps\mp\_utility::inovertime()) + { + if(var_04 == "_a" || var_04 == "_b") + { + var_02 delete(); + var_03[0] delete(); + var_05 delete(); + continue; + } + + var_06 = maps\mp\gametypes\_gameobjects::func_29E7("neutral",var_02,var_03,(0,0,64)); + var_06 maps\mp\gametypes\_gameobjects::allowuse("any"); + } + else + { + if(var_04 == "_c") + { + var_02 delete(); + var_03[0] delete(); + var_05 delete(); + continue; + } + + var_06 = maps\mp\gametypes\_gameobjects::func_29E7(game["defenders"],var_02,var_03,(0,0,64)); + var_06 maps\mp\gametypes\_gameobjects::allowuse("enemy"); + } + + var_06 maps\mp\gametypes\_gameobjects::setusetime(level.planttime); + var_06 maps\mp\gametypes\_gameobjects::setusetext(&"MP_PLANTING_EXPLOSIVE"); + var_06 maps\mp\gametypes\_gameobjects::setusehinttext(&"PLATFORM_HOLD_TO_PLANT_EXPLOSIVES"); + var_06 maps\mp\gametypes\_gameobjects::func_29EC(level.ddbomb); + if(maps\mp\_utility::inovertime()) + { + var_04 = "_a"; + } + + var_06.label = var_04; + var_06.index = var_01; + if(maps\mp\_utility::inovertime()) + { + var_06 maps\mp\gametypes\_gameobjects::set2dicon("friendly","waypoint_target"); + var_06 maps\mp\gametypes\_gameobjects::func_2A25("friendly","waypoint_target"); + var_06 maps\mp\gametypes\_gameobjects::set2dicon("enemy","waypoint_target"); + var_06 maps\mp\gametypes\_gameobjects::func_2A25("enemy","waypoint_target"); + } + else + { + var_06 maps\mp\gametypes\_gameobjects::set2dicon("friendly","waypoint_defend" + var_04); + var_06 maps\mp\gametypes\_gameobjects::func_2A25("friendly","waypoint_defend" + var_04); + var_06 maps\mp\gametypes\_gameobjects::set2dicon("enemy","waypoint_target" + var_04); + var_06 maps\mp\gametypes\_gameobjects::func_2A25("enemy","waypoint_target" + var_04); + } + + var_06 maps\mp\gametypes\_gameobjects::setvisibleteam("any"); + var_06.onbeginuse = ::onbeginuse; + var_06.onenduse = ::onenduse; + var_06.onuse = ::func_3597; + var_06.oncantuse = ::oncantuse; + var_06.useweapon = "briefcase_bomb_mp"; + var_06.bombplanted = 0; + var_06.visuals[0] thread func_3491(); + for(var_07 = 0;var_07 < var_03.size;var_07++) + { + if(isdefined(var_03[var_07].script_exploder)) + { + var_06.exploderindex = var_03[var_07].script_exploder; + break; + } + } + + level.bombzones[level.bombzones.size] = var_06; + var_06.bombdefusetrig = getent(var_03[0].target,"targetname"); + var_06.bombdefusetrig.origin = var_06.bombdefusetrig.origin + (0,0,-10000); + var_06.bombdefusetrig.label = var_04; + } + + for(var_01 = 0;var_01 < level.bombzones.size;var_01++) + { + var_08 = []; + for(var_09 = 0;var_09 < level.bombzones.size;var_09++) + { + if(var_09 != var_01) + { + var_08[var_08.size] = level.bombzones[var_09]; + } + } + + level.bombzones[var_01].otherbombzones = var_08; + } +} + +//Function Number: 16 +func_3491() +{ + var_00 = spawn("script_origin",self.origin); + var_00.angles = self.angles; + var_00 rotateyaw(-45,0.05); + wait 0.05; + var_01 = self.origin + (0,0,5); + var_02 = self.origin + anglestoforward(var_00.angles) * 100 + (0,0,128); + var_03 = bullettrace(var_01,var_02,0,self); + self.killcament = spawn("script_model",var_03["position"]); + self.killcament setscriptmoverkillcam("explosive"); + var_00 delete(); +} + +//Function Number: 17 +func_3597(param_00) +{ + var_01 = param_00.pers["team"]; + var_02 = level.otherteam[var_01]; + if((maps\mp\_utility::inovertime() && self.bombplanted == 0) || !maps\mp\_utility::inovertime() && !maps\mp\gametypes\_gameobjects::isfriendlyteam(param_00.pers["team"])) + { + self.bombplanted = 1; + param_00 notify("bomb_planted"); + param_00 playsound("mp_bomb_plant"); + thread maps\mp\_utility::teamplayercardsplash("callout_bombplanted",param_00); + param_00 notify("objective","plant"); + maps\mp\_utility::func_26E5("bomb_planted"); + param_00 thread maps\mp\gametypes\_hud_message::func_2892("plant",maps\mp\gametypes\_rank::getscoreinfovalue("plant")); + param_00 thread maps\mp\gametypes\_rank::func_2AB3("plant"); + maps\mp\gametypes\_gamescore::func_26D3("plant",param_00); + param_00 maps\mp\_utility::incplayerstat("bombsplanted",1); + param_00 thread maps\mp\_matchdata::loggameevent("plant",param_00.origin); + param_00.bombplantedtime = gettime(); + param_00 maps\mp\_utility::func_26FB("plants",1); + param_00 maps\mp\gametypes\_persistence::func_26D8("round","plants",param_00.pers["plants"]); + level thread bombplanted(self,param_00); + level.bombowner = param_00; + self.useweapon = "briefcase_bomb_defuse_mp"; + return; + } + + self.bombplanted = 0; + thread bombhandler(param_00,"defused"); + param_00 notify("objective","defuse"); +} + +//Function Number: 18 +resetbombzone() +{ + if(maps\mp\_utility::inovertime()) + { + maps\mp\gametypes\_gameobjects::setownerteam("neutral"); + maps\mp\gametypes\_gameobjects::allowuse("any"); + var_00 = "waypoint_target"; + var_01 = "waypoint_target"; + } + else + { + maps\mp\gametypes\_gameobjects::allowuse("enemy"); + var_00 = "waypoint_defend" + self.label; + var_01 = "waypoint_target" + self.label; + } + + maps\mp\gametypes\_gameobjects::setusetime(level.planttime); + maps\mp\gametypes\_gameobjects::setusetext(&"MP_PLANTING_EXPLOSIVE"); + maps\mp\gametypes\_gameobjects::setusehinttext(&"PLATFORM_HOLD_TO_PLANT_EXPLOSIVES"); + maps\mp\gametypes\_gameobjects::func_29EC(level.ddbomb); + maps\mp\gametypes\_gameobjects::set2dicon("friendly",var_00); + maps\mp\gametypes\_gameobjects::func_2A25("friendly",var_00); + maps\mp\gametypes\_gameobjects::set2dicon("enemy",var_01); + maps\mp\gametypes\_gameobjects::func_2A25("enemy",var_01); + maps\mp\gametypes\_gameobjects::setvisibleteam("any"); + self.useweapon = "briefcase_bomb_mp"; +} + +//Function Number: 19 +func_34B2() +{ + if(maps\mp\_utility::inovertime()) + { + var_00 = "waypoint_defuse"; + var_01 = "waypoint_defend"; + } + else + { + var_00 = "waypoint_defuse" + self.label; + var_01 = "waypoint_defend" + self.label; + } + + maps\mp\gametypes\_gameobjects::allowuse("friendly"); + maps\mp\gametypes\_gameobjects::setusetime(level.defusetime); + maps\mp\gametypes\_gameobjects::setusetext(&"MP_DEFUSING_EXPLOSIVE"); + maps\mp\gametypes\_gameobjects::setusehinttext(&"PLATFORM_HOLD_TO_DEFUSE_EXPLOSIVES"); + maps\mp\gametypes\_gameobjects::func_29EC(undefined); + maps\mp\gametypes\_gameobjects::set2dicon("friendly",var_00); + maps\mp\gametypes\_gameobjects::func_2A25("friendly",var_00); + maps\mp\gametypes\_gameobjects::set2dicon("enemy",var_01); + maps\mp\gametypes\_gameobjects::func_2A25("enemy",var_01); + maps\mp\gametypes\_gameobjects::setvisibleteam("any"); +} + +//Function Number: 20 +onbeginuse(param_00) +{ + if((maps\mp\_utility::inovertime() && self.bombplanted == 1) || !maps\mp\_utility::inovertime() && maps\mp\gametypes\_gameobjects::isfriendlyteam(param_00.pers["team"])) + { + param_00 playsound("mp_bomb_defuse"); + param_00.isdefusing = 1; + var_01 = 9000000; + var_02 = undefined; + if(isdefined(level.ddbombmodel)) + { + foreach(var_04 in level.ddbombmodel) + { + if(!isdefined(var_04)) + { + continue; + } + + var_05 = distancesquared(param_00.origin,var_04.origin); + if(var_05 < var_01) + { + var_01 = var_05; + var_02 = var_04; + } + } + + param_00.defusing = var_02; + var_02 hide(); + return; + } + + return; + } + + var_04.isplanting = 1; +} + +//Function Number: 21 +onenduse(param_00,param_01,param_02) +{ + if(!isdefined(param_01)) + { + return; + } + + if(param_01.isdefusing) + { + if(isdefined(param_01.defusing) && !param_02) + { + param_01.defusing show(); + } + } + + if(isalive(param_01)) + { + param_01.isdefusing = 0; + param_01.isplanting = 0; + } +} + +//Function Number: 22 +oncantuse(param_00) +{ + param_00 iprintlnbold(&"MP_BOMBSITE_IN_USE"); +} + +//Function Number: 23 +onreset() +{ +} + +//Function Number: 24 +bombplanted(param_00,param_01) +{ + param_00 endon("defused"); + var_02 = param_01.team; + level.bombsplanted = level.bombsplanted + 1; + setbombtimerdvar(); + maps\mp\gametypes\_gamelogic::pausetimer(); + level.timepausestart = gettime(); + level.timelimitoverride = 1; + level.bombplanted = 1; + level.destroyedobject = param_00; + if(level.destroyedobject.label == "_a") + { + level.aplanted = 1; + } + else + { + level.bplanted = 1; + } + + level.destroyedobject.bombplanted = 1; + param_00.visuals[0] thread func_359D(param_00); + level.tickingobject = param_00.visuals[0]; + func_35A0(param_01,param_00.label); + param_00.bombdefused = 0; + param_00 maps\mp\gametypes\_gameobjects::allowuse("none"); + param_00 maps\mp\gametypes\_gameobjects::setvisibleteam("none"); + if(maps\mp\_utility::inovertime()) + { + param_00 maps\mp\gametypes\_gameobjects::setownerteam(level.otherteam[param_01.team]); + } + + param_00 func_34B2(); + param_00 func_349A(param_00); + param_00 thread bombhandler(param_01,"explode",var_02); +} + +//Function Number: 25 +bombhandler(param_00,param_01,param_02) +{ + self.visuals[0] notify("stopTicking"); + level.bombsplanted = level.bombsplanted - 1; + if(self.label == "_a") + { + level.aplanted = 0; + } + else + { + level.bplanted = 0; + } + + restarttimer(); + setbombtimerdvar(); + setdvar("ui_bombtimer" + self.label,-1); + if(level.gameended) + { + return; + } + + if(param_01 == "explode") + { + level notify("bomb_exploded" + self.label); + level.bombexploded = level.bombexploded + 1; + var_03 = self.curorigin; + level.ddbombmodel[self.label] delete(); + if(isdefined(param_00)) + { + self.visuals[0] radiusdamage(var_03,512,200,20,param_00,"MOD_EXPLOSIVE","bomb_site_mp"); + param_00 maps\mp\_utility::incplayerstat("targetsdestroyed",1); + param_00 maps\mp\_utility::func_26FB("destructions",1); + param_00 maps\mp\gametypes\_persistence::func_26D8("round","destructions",param_00.pers["destructions"]); + } + else + { + self.visuals[0] radiusdamage(var_03,512,200,20,undefined,"MOD_EXPLOSIVE","bomb_site_mp"); + } + + var_04 = randomfloat(360); + var_05 = spawnfx(level._effect["bombexplosion"],var_03 + (0,0,50),(0,0,1),(cos(var_04),sin(var_04),0)); + triggerfx(var_05); + playrumbleonposition("grenade_rumble",var_03); + earthquake(0.75,2,var_03,2000); + thread maps\mp\_utility::func_2ED2("exp_suitcase_bomb_main",var_03); + if(isdefined(self.exploderindex)) + { + common_scripts\utility::exploder(self.exploderindex); + } + + maps\mp\gametypes\_gameobjects::disableobject(); + if(!maps\mp\_utility::inovertime() && level.bombexploded < 2 && level.ddtimetoadd > 0) + { + foreach(var_07 in level.players) + { + var_07 thread maps\mp\gametypes\_hud_message::func_2892("time_added"); + } + } + + wait 2; + if(maps\mp\_utility::inovertime() || level.bombexploded > 1) + { + func_3594(param_02,game["strings"]["target_destroyed"]); + return; + } + + if(level.ddtimetoadd > 0) + { + level thread maps\mp\_utility::teamplayercardsplash("callout_time_added",param_00); + return; + } + + return; + } + + param_00 notify("bomb_defused"); + self notify("defused"); + maps\mp\_utility::func_26E5("bomb_defused"); + level thread maps\mp\_utility::teamplayercardsplash("callout_bombdefused",param_00); + level thread bombdefused(self); + resetbombzone(); + if(isdefined(level.bombowner) && level.bombowner.bombplantedtime + 4000 + level.defusetime * 1000 > gettime() && maps\mp\_utility::isreallyalive(level.bombowner)) + { + param_00 thread maps\mp\gametypes\_hud_message::func_2892("ninja_defuse",maps\mp\gametypes\_rank::getscoreinfovalue("defuse")); + } + else + { + param_00 thread maps\mp\gametypes\_hud_message::func_2892("defuse",maps\mp\gametypes\_rank::getscoreinfovalue("defuse")); + } + + param_00 thread maps\mp\gametypes\_rank::func_2AB3("defuse"); + maps\mp\gametypes\_gamescore::func_26D3("defuse",param_00); + param_00 maps\mp\_utility::incplayerstat("bombsdefused",1); + param_00 maps\mp\_utility::func_26FB("defuses",1); + param_00 maps\mp\gametypes\_persistence::func_26D8("round","defuses",param_00.pers["defuses"]); + param_00 thread maps\mp\_matchdata::loggameevent("defuse",param_00.origin); +} + +//Function Number: 26 +func_359D(param_00) +{ + self endon("death"); + self endon("stopTicking"); + level endon("game_ended"); + for(;;) + { + self playsound("ui_mp_suitcasebomb_timer"); + if(!isdefined(param_00.waittime) || param_00.waittime > 10) + { + wait 1; + } + else if(isdefined(param_00.waittime) && param_00.waittime > 5) + { + wait 0.5; + } + else + { + wait 0.25; + } + + maps\mp\gametypes\_hostmigration::func_273E(); + } +} + +//Function Number: 27 +setbombtimerdvar() +{ + if(level.bombsplanted == 1) + { + setdvar("ui_bomb_timer",2); + return; + } + + if(level.bombsplanted == 2) + { + setdvar("ui_bomb_timer",3); + return; + } + + setdvar("ui_bomb_timer",0); +} + +//Function Number: 28 +func_35A0(param_00,param_01) +{ + var_02 = bullettrace(param_00.origin + (0,0,20),param_00.origin - (0,0,2000),0,param_00); + var_03 = randomfloat(360); + var_04 = (cos(var_03),sin(var_03),0); + var_04 = vectornormalize(var_04 - var_02["normal"] * vectordot(var_04,var_02["normal"])); + var_05 = vectortoangles(var_04); + level.ddbombmodel[param_01] = spawn("script_model",var_02["position"]); + level.ddbombmodel[param_01].angles = var_05; + level.ddbombmodel[param_01] setmodel("prop_suitcase_bomb"); +} + +//Function Number: 29 +restarttimer() +{ + if(level.bombsplanted <= 0) + { + maps\mp\gametypes\_gamelogic::resumetimer(); + level.timepaused = gettime() - level.timepausestart; + level.timelimitoverride = 0; + } +} + +//Function Number: 30 +func_349A(param_00) +{ + level endon("game_ended"); + level endon("bomb_defused" + param_00.label); + if(maps\mp\_utility::inovertime()) + { + param_00.waittime = level.bombtimer; + } + else + { + param_00.waittime = level.bombtimer; + } + + level thread func_30FE(param_00); + while(param_00.waittime >= 0) + { + param_00.waittime--; + if(param_00.waittime >= 0) + { + wait 1; + } + + maps\mp\gametypes\_hostmigration::func_273E(); + } +} + +//Function Number: 31 +func_30FE(param_00) +{ + level endon("game_ended"); + level endon("disconnect"); + level endon("bomb_defused" + param_00.label); + level endon("bomb_exploded" + param_00.label); + var_01 = param_00.waittime * 1000 + gettime(); + setdvar("ui_bombtimer" + param_00.label,var_01); + level waittill("host_migration_begin"); + var_02 = maps\mp\gametypes\_hostmigration::func_273E(); + if(var_02 > 0) + { + setdvar("ui_bombtimer" + param_00.label,var_01 + var_02); + } +} + +//Function Number: 32 +bombdefused(param_00) +{ + level.tickingobject maps\mp\gametypes\_gamelogic::func_2F32(); + param_00.bombdefused = 1; + setbombtimerdvar(); + setdvar("ui_bombtimer" + param_00.label,-1); + level notify("bomb_defused" + param_00.label); +} + +//Function Number: 33 +initgametypeawards() +{ + maps\mp\_awards::func_2D85("targetsdestroyed",0,::maps\mp\_awards::func_2DA7); + maps\mp\_awards::func_2D85("bombsplanted",0,::maps\mp\_awards::func_2DA7); + maps\mp\_awards::func_2D85("bombsdefused",0,::maps\mp\_awards::func_2DA7); + maps\mp\_awards::func_2D85("bombcarrierkills",0,::maps\mp\_awards::func_2DA7); + maps\mp\_awards::func_2D85("bombscarried",0,::maps\mp\_awards::func_2DA7); + maps\mp\_awards::func_2D85("killsasbombcarrier",0,::maps\mp\_awards::func_2DA7); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/gametypes/dm.gsc b/MW3/Xbox/MP/maps/mp/gametypes/dm.gsc new file mode 100644 index 0000000..681ed37 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/gametypes/dm.gsc @@ -0,0 +1,141 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\dm.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 5 + * Decompile Time: 74 ms + * Timestamp: 10/27/2023 2:26:08 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + maps\mp\gametypes\_globallogic::init(); + maps\mp\gametypes\_callbacksetup::setupcallbacks(); + maps\mp\gametypes\_globallogic::setupcallbacks(); + if(isusingmatchrulesdata()) + { + level.initializematchrules = ::initializematchrules; + [[ level.initializematchrules ]](); + level thread maps\mp\_utility::func_810A(); + } + else + { + maps\mp\_utility::func_3315(level.gametype,10); + maps\mp\_utility::registerscorelimitdvar(level.gametype,1000); + maps\mp\_utility::registerwinlimitdvar(level.gametype,1); + maps\mp\_utility::func_3312(level.gametype,1); + maps\mp\_utility::func_3317(level.gametype,0); + maps\mp\_utility::registerhalftimedvar(level.gametype,0); + level.matchrules_damagemultiplier = 0; + level.matchrules_vampirism = 0; + } + + level.onstartgametype = ::onstartgametype; + level.getspawnpoint = ::getspawnpoint; + level.onnormaldeath = ::onnormaldeath; + if(level.matchrules_damagemultiplier || level.matchrules_vampirism) + { + level.modifyplayerdamage = ::maps\mp\gametypes\_damage::func_2D57; + } + + game["dialog"]["gametype"] = "freeforall"; + if(getdvarint("g_hardcore")) + { + game["dialog"]["gametype"] = "hc_" + game["dialog"]["gametype"]; + return; + } + + if(getdvarint("camera_thirdPerson")) + { + game["dialog"]["gametype"] = "thirdp_" + game["dialog"]["gametype"]; + return; + } + + if(getdvarint("scr_diehard")) + { + game["dialog"]["gametype"] = "dh_" + game["dialog"]["gametype"]; + return; + } + + if(getdvarint("scr_" + level.gametype + "_promode")) + { + game["dialog"]["gametype"] = game["dialog"]["gametype"] + "_pro"; + return; + } +} + +//Function Number: 2 +initializematchrules() +{ + maps\mp\_utility::func_334C(1); + setdynamicdvar("scr_dm_winlimit",1); + maps\mp\_utility::registerwinlimitdvar("dm",1); + setdynamicdvar("scr_dm_roundlimit",1); + maps\mp\_utility::func_3312("dm",1); + setdynamicdvar("scr_dm_halftime",0); + maps\mp\_utility::registerhalftimedvar("dm",0); +} + +//Function Number: 3 +onstartgametype() +{ + setclientnamemode("auto_change"); + maps\mp\_utility::func_3305("allies",&"OBJECTIVES_DM"); + maps\mp\_utility::func_3305("axis",&"OBJECTIVES_DM"); + if(level.splitscreen) + { + maps\mp\_utility::func_3306("allies",&"OBJECTIVES_DM"); + maps\mp\_utility::func_3306("axis",&"OBJECTIVES_DM"); + } + else + { + maps\mp\_utility::func_3306("allies",&"OBJECTIVES_DM_SCORE"); + maps\mp\_utility::func_3306("axis",&"OBJECTIVES_DM_SCORE"); + } + + maps\mp\_utility::setobjectivehinttext("allies",&"OBJECTIVES_DM_HINT"); + maps\mp\_utility::setobjectivehinttext("axis",&"OBJECTIVES_DM_HINT"); + level.spawnmins = (0,0,0); + level.spawnmaxs = (0,0,0); + maps\mp\gametypes\_spawnlogic::func_2FD0("allies","mp_dm_spawn"); + maps\mp\gametypes\_spawnlogic::func_2FD0("axis","mp_dm_spawn"); + level.mapcenter = maps\mp\gametypes\_spawnlogic::func_2FCD(level.spawnmins,level.spawnmaxs); + setmapcenter(level.mapcenter); + var_00[0] = "dm"; + maps\mp\gametypes\_gameobjects::main(var_00); + maps\mp\gametypes\_rank::registerscoreinfo("kill",50); + maps\mp\gametypes\_rank::registerscoreinfo("headshot",50); + maps\mp\gametypes\_rank::registerscoreinfo("assist",10); + maps\mp\gametypes\_rank::registerscoreinfo("suicide",0); + maps\mp\gametypes\_rank::registerscoreinfo("teamkill",0); + level.quickmessagetoall = 1; +} + +//Function Number: 4 +getspawnpoint() +{ + var_00 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints(self.pers["team"]); + var_01 = maps\mp\gametypes\_spawnlogic::func_2FEF(var_00); + return var_01; +} + +//Function Number: 5 +onnormaldeath(param_00,param_01,param_02) +{ + var_03 = maps\mp\gametypes\_rank::getscoreinfovalue("kill"); + var_04 = 0; + foreach(var_06 in level.players) + { + if(isdefined(var_06.score) && var_06.score > var_04) + { + var_04 = var_06.score; + } + } + + if(game["state"] == "postgame" && param_01.score >= var_04) + { + param_01.finalkill = 1; + } +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/gametypes/dom.gsc b/MW3/Xbox/MP/maps/mp/gametypes/dom.gsc new file mode 100644 index 0000000..fe3e67c --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/gametypes/dom.gsc @@ -0,0 +1,953 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\dom.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 31 + * Decompile Time: 439 ms + * Timestamp: 10/27/2023 2:26:09 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(getdvar("mapname") == "mp_background") + { + return; + } + + maps\mp\gametypes\_globallogic::init(); + maps\mp\gametypes\_callbacksetup::setupcallbacks(); + maps\mp\gametypes\_globallogic::setupcallbacks(); + if(isusingmatchrulesdata()) + { + level.initializematchrules = ::initializematchrules; + [[ level.initializematchrules ]](); + level thread maps\mp\_utility::func_810A(); + } + else + { + maps\mp\_utility::func_3315(level.gametype,30); + maps\mp\_utility::registerscorelimitdvar(level.gametype,300); + maps\mp\_utility::func_3312(level.gametype,1); + maps\mp\_utility::registerwinlimitdvar(level.gametype,1); + maps\mp\_utility::func_3317(level.gametype,0); + maps\mp\_utility::registerhalftimedvar(level.gametype,0); + level.matchrules_damagemultiplier = 0; + level.matchrules_vampirism = 0; + } + + level.teambased = 1; + level.onstartgametype = ::onstartgametype; + level.getspawnpoint = ::getspawnpoint; + level.onplayerkilled = ::onplayerkilled; + level.onprecachegametype = ::onprecachegametype; + level.initgametypeawards = ::initgametypeawards; + level.onspawnplayer = ::onspawnplayer; + if(level.matchrules_damagemultiplier || level.matchrules_vampirism) + { + level.modifyplayerdamage = ::maps\mp\gametypes\_damage::func_2D57; + } + + game["dialog"]["gametype"] = "domination"; + if(getdvarint("g_hardcore")) + { + game["dialog"]["gametype"] = "hc_" + game["dialog"]["gametype"]; + } + else if(getdvarint("camera_thirdPerson")) + { + game["dialog"]["gametype"] = "thirdp_" + game["dialog"]["gametype"]; + } + else if(getdvarint("scr_diehard")) + { + game["dialog"]["gametype"] = "dh_" + game["dialog"]["gametype"]; + } + else if(getdvarint("scr_" + level.gametype + "_promode")) + { + game["dialog"]["gametype"] = game["dialog"]["gametype"] + "_pro"; + } + + game["dialog"]["offense_obj"] = "capture_objs"; + game["dialog"]["defense_obj"] = "capture_objs"; +} + +//Function Number: 2 +initializematchrules() +{ + maps\mp\_utility::func_334C(); + setdynamicdvar("scr_dom_roundlimit",1); + maps\mp\_utility::func_3312("dom",1); + setdynamicdvar("scr_dom_winlimit",1); + maps\mp\_utility::registerwinlimitdvar("dom",1); + setdynamicdvar("scr_dom_halftime",0); + maps\mp\_utility::registerhalftimedvar("dom",0); + setdynamicdvar("scr_dom_promode",0); +} + +//Function Number: 3 +onprecachegametype() +{ + precacheshader("waypoint_captureneutral"); + precacheshader("waypoint_capture"); + precacheshader("waypoint_defend"); + precacheshader("waypoint_captureneutral_a"); + precacheshader("waypoint_capture_a"); + precacheshader("waypoint_defend_a"); + precacheshader("waypoint_captureneutral_b"); + precacheshader("waypoint_capture_b"); + precacheshader("waypoint_defend_b"); + precacheshader("waypoint_captureneutral_c"); + precacheshader("waypoint_capture_c"); + precacheshader("waypoint_defend_c"); + precacheshader("waypoint_captureneutral"); + precacheshader("waypoint_capture"); + precacheshader("waypoint_defend"); + precacheshader("waypoint_captureneutral_a"); + precacheshader("waypoint_capture_a"); + precacheshader("waypoint_defend_a"); + precacheshader("waypoint_captureneutral_b"); + precacheshader("waypoint_capture_b"); + precacheshader("waypoint_defend_b"); + precacheshader("waypoint_captureneutral_c"); + precacheshader("waypoint_capture_c"); + precacheshader("waypoint_defend_c"); +} + +//Function Number: 4 +onstartgametype() +{ + maps\mp\_utility::func_3305("allies",&"OBJECTIVES_DOM"); + maps\mp\_utility::func_3305("axis",&"OBJECTIVES_DOM"); + if(level.splitscreen) + { + maps\mp\_utility::func_3306("allies",&"OBJECTIVES_DOM"); + maps\mp\_utility::func_3306("axis",&"OBJECTIVES_DOM"); + } + else + { + maps\mp\_utility::func_3306("allies",&"OBJECTIVES_DOM_SCORE"); + maps\mp\_utility::func_3306("axis",&"OBJECTIVES_DOM_SCORE"); + } + + maps\mp\_utility::setobjectivehinttext("allies",&"OBJECTIVES_DOM_HINT"); + maps\mp\_utility::setobjectivehinttext("axis",&"OBJECTIVES_DOM_HINT"); + setclientnamemode("auto_change"); + level.spawnmins = (0,0,0); + level.spawnmaxs = (0,0,0); + maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_dom_spawn_allies_start"); + maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_dom_spawn_axis_start"); + maps\mp\gametypes\_spawnlogic::func_2FD0("allies","mp_dom_spawn"); + maps\mp\gametypes\_spawnlogic::func_2FD0("axis","mp_dom_spawn"); + level.mapcenter = maps\mp\gametypes\_spawnlogic::func_2FCD(level.spawnmins,level.spawnmaxs); + setmapcenter(level.mapcenter); + level.spawn_all = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_dom_spawn"); + level.spawn_axis_start = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_dom_spawn_axis_start"); + level.spawn_allies_start = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_dom_spawn_allies_start"); + level.startpos["allies"] = level.spawn_allies_start[0].origin; + level.startpos["axis"] = level.spawn_axis_start[0].origin; + level.flagbasefxid["allies"] = loadfx(maps\mp\gametypes\_teams::func_2777("allies")); + level.flagbasefxid["axis"] = loadfx(maps\mp\gametypes\_teams::func_2777("axis")); + var_00[0] = "dom"; + maps\mp\gametypes\_gameobjects::main(var_00); + maps\mp\gametypes\_rank::registerscoreinfo("kill",50); + maps\mp\gametypes\_rank::registerscoreinfo("headshot",50); + maps\mp\gametypes\_rank::registerscoreinfo("assist",10); + maps\mp\gametypes\_rank::registerscoreinfo("capture",150); + maps\mp\gametypes\_rank::registerscoreinfo("defend",50); + maps\mp\gametypes\_rank::registerscoreinfo("defend_assist",10); + maps\mp\gametypes\_rank::registerscoreinfo("assault",50); + maps\mp\gametypes\_rank::registerscoreinfo("assault_assist",10); + thread domflags(); + thread func_3471(); +} + +//Function Number: 5 +getspawnpoint() +{ + var_00 = undefined; + if(!level.usestartspawns) + { + var_01 = 0; + var_02 = 0; + var_03 = self.pers["team"]; + var_04 = maps\mp\_utility::getotherteam(var_03); + for(var_05 = 0;var_05 < level.flags.size;var_05++) + { + var_06 = level.flags[var_05] func_3474(); + if(var_06 == var_03) + { + var_01++; + continue; + } + + if(var_06 == var_04) + { + var_02++; + } + } + + if(var_01 == level.flags.size) + { + var_07 = level.bestspawnflag[maps\mp\_utility::getotherteam(self.pers["team"])]; + var_00 = maps\mp\gametypes\_spawnlogic::func_2FE6(level.spawn_all,func_3477(var_07)); + } + else if(var_01 > 0) + { + var_00 = maps\mp\gametypes\_spawnlogic::func_2FE6(level.spawn_all,getboundaryflagspawns(var_03)); + } + else + { + var_08 = undefined; + if(var_02 > 0 && var_02 < level.flags.size) + { + var_08 = getunownedflagneareststart(var_03); + } + + if(!isdefined(var_08)) + { + var_08 = level.bestspawnflag[self.pers["team"]]; + } + + level.bestspawnflag[self.pers["team"]] = var_08; + var_00 = maps\mp\gametypes\_spawnlogic::func_2FE6(level.spawn_all,var_08.nearbyspawns); + } + } + + if(!isdefined(var_00)) + { + if(self.pers["team"] == "axis") + { + var_00 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random(level.spawn_axis_start); + } + else + { + var_00 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random(level.spawn_allies_start); + } + } + + return var_00; +} + +//Function Number: 6 +domflags() +{ + level.laststatus["allies"] = 0; + level.laststatus["axis"] = 0; + game["flagmodels"] = []; + game["flagmodels"]["neutral"] = "prop_flag_neutral"; + game["flagmodels"]["allies"] = maps\mp\gametypes\_teams::func_2774("allies"); + game["flagmodels"]["axis"] = maps\mp\gametypes\_teams::func_2774("axis"); + precachemodel(game["flagmodels"]["neutral"]); + precachemodel(game["flagmodels"]["allies"]); + precachemodel(game["flagmodels"]["axis"]); + precachestring(&"MP_SECURING_POSITION"); + var_00 = getentarray("flag_primary","targetname"); + var_01 = getentarray("flag_secondary","targetname"); + if(var_00.size + var_01.size < 2) + { + maps\mp\gametypes\_callbacksetup::abortlevel(); + return; + } + + level.flags = []; + for(var_02 = 0;var_02 < var_00.size;var_02++) + { + level.flags[level.flags.size] = var_00[var_02]; + } + + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + level.flags[level.flags.size] = var_01[var_02]; + } + + level.domflags = []; + for(var_02 = 0;var_02 < level.flags.size;var_02++) + { + var_03 = level.flags[var_02]; + if(isdefined(var_03.target)) + { + var_04[0] = getent(var_03.target,"targetname"); + } + else + { + var_04[0] = spawn("script_model",var_03.origin); + var_04[0].angles = var_03.angles; + } + + var_04[0] setmodel(game["flagmodels"]["neutral"]); + var_05 = maps\mp\gametypes\_gameobjects::func_29E7("neutral",var_03,var_04,(0,0,100)); + var_05 maps\mp\gametypes\_gameobjects::allowuse("enemy"); + var_05 maps\mp\gametypes\_gameobjects::setusetime(10); + var_05 maps\mp\gametypes\_gameobjects::setusetext(&"MP_SECURING_POSITION"); + var_06 = var_05 maps\mp\gametypes\_gameobjects::getlabel(); + var_05.label = var_06; + var_05 maps\mp\gametypes\_gameobjects::set2dicon("friendly","waypoint_defend" + var_06); + var_05 maps\mp\gametypes\_gameobjects::func_2A25("friendly","waypoint_defend" + var_06); + var_05 maps\mp\gametypes\_gameobjects::set2dicon("enemy","waypoint_captureneutral" + var_06); + var_05 maps\mp\gametypes\_gameobjects::func_2A25("enemy","waypoint_captureneutral" + var_06); + var_05 maps\mp\gametypes\_gameobjects::setvisibleteam("any"); + var_05.onuse = ::onuse; + var_05.onbeginuse = ::onbeginuse; + var_05.onuseupdate = ::onuseupdate; + var_05.onenduse = ::onenduse; + var_07 = var_04[0].origin + (0,0,32); + var_08 = var_04[0].origin + (0,0,-32); + var_09 = bullettrace(var_07,var_08,0,undefined); + var_0A = vectortoangles(var_09["normal"]); + var_05.baseeffectforward = anglestoforward(var_0A); + var_05.baseeffectright = anglestoright(var_0A); + var_05.baseeffectpos = var_09["position"]; + level.flags[var_02].useobj = var_05; + level.flags[var_02].adjflags = []; + level.flags[var_02].nearbyspawns = []; + var_05.levelflag = level.flags[var_02]; + level.domflags[level.domflags.size] = var_05; + } + + level.bestspawnflag = []; + level.bestspawnflag["allies"] = getunownedflagneareststart("allies",undefined); + level.bestspawnflag["axis"] = getunownedflagneareststart("axis",level.bestspawnflag["allies"]); + flagsetup(); +} + +//Function Number: 7 +getunownedflagneareststart(param_00,param_01) +{ + var_02 = undefined; + var_03 = undefined; + for(var_04 = 0;var_04 < level.flags.size;var_04++) + { + var_05 = level.flags[var_04]; + if(var_05 func_3474() != "neutral") + { + continue; + } + + var_06 = distancesquared(var_05.origin,level.startpos[param_00]); + if((!isdefined(param_01) || var_05 != param_01) && !isdefined(var_02) || var_06 < var_03) + { + var_03 = var_06; + var_02 = var_05; + } + } + + return var_02; +} + +//Function Number: 8 +onbeginuse(param_00) +{ + var_01 = maps\mp\gametypes\_gameobjects::func_2A15(); + self.didstatusnotify = 0; + if(var_01 == "neutral") + { + statusdialog("securing" + self.label,param_00.pers["team"]); + self.objpoints[param_00.pers["team"]] thread maps\mp\gametypes\_objpoints::startflashing(); + return; + } + + if(var_01 == "allies") + { + var_02 = "axis"; + } + else + { + var_02 = "allies"; + } + + self.objpoints["allies"] thread maps\mp\gametypes\_objpoints::startflashing(); + self.objpoints["axis"] thread maps\mp\gametypes\_objpoints::startflashing(); +} + +//Function Number: 9 +onuseupdate(param_00,param_01,param_02) +{ + if(param_01 > 0.05 && param_02 && !self.didstatusnotify) + { + var_03 = maps\mp\gametypes\_gameobjects::func_2A15(); + if(var_03 == "neutral") + { + statusdialog("securing" + self.label,param_00); + } + else + { + statusdialog("losing" + self.label,var_03); + statusdialog("securing" + self.label,param_00); + } + + self.didstatusnotify = 1; + } +} + +//Function Number: 10 +statusdialog(param_00,param_01,param_02) +{ + var_03 = gettime(); + if(gettime() < level.laststatus[param_01] + 5000 && !isdefined(param_02) || !param_02) + { + return; + } + + thread func_346F(param_00,param_01); + level.laststatus[param_01] = gettime(); +} + +//Function Number: 11 +onenduse(param_00,param_01,param_02) +{ + self.objpoints["allies"] thread maps\mp\gametypes\_objpoints::stopflashing(); + self.objpoints["axis"] thread maps\mp\gametypes\_objpoints::stopflashing(); +} + +//Function Number: 12 +resetflagbaseeffect() +{ + if(isdefined(self.baseeffect)) + { + self.baseeffect delete(); + } + + var_00 = maps\mp\gametypes\_gameobjects::func_2A15(); + if(var_00 != "axis" && var_00 != "allies") + { + return; + } + + var_01 = level.flagbasefxid[var_00]; + self.baseeffect = spawnfx(var_01,self.baseeffectpos,self.baseeffectforward,self.baseeffectright); + triggerfx(self.baseeffect); +} + +//Function Number: 13 +onuse(param_00) +{ + var_01 = param_00.pers["team"]; + var_02 = maps\mp\gametypes\_gameobjects::func_2A15(); + var_03 = maps\mp\gametypes\_gameobjects::getlabel(); + self.capturetime = gettime(); + maps\mp\gametypes\_gameobjects::setownerteam(var_01); + maps\mp\gametypes\_gameobjects::set2dicon("enemy","waypoint_capture" + var_03); + maps\mp\gametypes\_gameobjects::func_2A25("enemy","waypoint_capture" + var_03); + self.visuals[0] setmodel(game["flagmodels"][var_01]); + resetflagbaseeffect(); + level.usestartspawns = 0; + if(var_02 == "neutral") + { + var_04 = maps\mp\_utility::getotherteam(var_01); + thread maps\mp\_utility::func_32F9(var_01,var_04,undefined,undefined,"mp_war_objective_taken",undefined,param_00); + statusdialog("secured" + self.label,var_01,1); + statusdialog("enemy_has" + self.label,var_04,1); + } + else + { + thread maps\mp\_utility::func_32F9(var_01,var_02,undefined,undefined,"mp_war_objective_taken","mp_war_objective_lost",param_00); + if(getteamflagcount(var_01) == level.flags.size) + { + statusdialog("secure_all",var_01); + statusdialog("lost_all",var_02); + } + else + { + statusdialog("secured" + self.label,var_01,1); + statusdialog("lost" + self.label,var_02,1); + } + + level.bestspawnflag[var_02] = self.levelflag; + } + + param_00 notify("objective","captured"); + thread func_346E(self.touchlist[var_01]); +} + +//Function Number: 14 +func_346E(param_00) +{ + level endon("game_ended"); + var_01 = getarraykeys(param_00); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + var_03 = param_00[var_01[var_02]].player; + var_03 thread maps\mp\gametypes\_hud_message::func_2892("capture",maps\mp\gametypes\_rank::getscoreinfovalue("capture")); + var_03 thread func_347C(); + var_03 thread maps\mp\gametypes\_rank::func_2AB3("capture",maps\mp\gametypes\_rank::getscoreinfovalue("capture") * var_03 getcapxpscale()); + maps\mp\gametypes\_gamescore::func_26D3("capture",var_03); + var_03 maps\mp\_utility::incplayerstat("pointscaptured",1); + var_03 maps\mp\_utility::func_26FB("captures",1); + var_03 maps\mp\gametypes\_persistence::func_26D8("round","captures",var_03.pers["captures"]); + if(var_03 != self) + { + var_03 notify("objective","assistedCapture"); + } + } + + var_03 = maps\mp\gametypes\_gameobjects::func_29F0(); + level thread maps\mp\_utility::teamplayercardsplash("callout_securedposition" + self.label,var_03); + var_03 thread maps\mp\_matchdata::loggameevent("capture",var_03.origin); +} + +//Function Number: 15 +func_346F(param_00,param_01) +{ + level endon("game_ended"); + wait 0.1; + maps\mp\_utility::waittillslowprocessallowed(); + maps\mp\_utility::func_26E5(param_00,param_01); +} + +//Function Number: 16 +func_3470(param_00,param_01,param_02,param_03) +{ + level endon("game_ended"); + wait 0.1; + maps\mp\_utility::waittillslowprocessallowed(); + maps\mp\_utility::leaderdialogbothteams(param_00,param_01,param_02,param_03); +} + +//Function Number: 17 +func_3471() +{ + level endon("game_ended"); + while(!level.gameended) + { + var_00 = func_3472(); + if(var_00.size) + { + for(var_01 = 1;var_01 < var_00.size;var_01++) + { + var_02 = var_00[var_01]; + var_03 = gettime() - var_02.capturetime; + for(var_04 = var_01 - 1;var_04 >= 0 && var_03 > gettime() - var_00[var_04].capturetime;var_04--) + { + var_00[var_04 + 1] = var_00[var_04]; + } + + var_00[var_04 + 1] = var_02; + } + + foreach(var_02 in var_00) + { + var_06 = var_02 maps\mp\gametypes\_gameobjects::func_2A15(); + maps\mp\gametypes\_gamescore::giveteamscoreforobjective(var_06,1); + } + } + + if(((maps\mp\_utility::gettimepassed() / 1000 > 120 && var_00.size < 2) || maps\mp\_utility::gettimepassed() / 1000 > 300 && var_00.size < 3) && maps\mp\_utility::matchmakinggame()) + { + level.finalkillcam_winner = "none"; + thread maps\mp\gametypes\_gamelogic::endgame("none",game["strings"]["time_limit_reached"]); + return; + } + + wait 5; + maps\mp\gametypes\_hostmigration::func_273E(); + } +} + +//Function Number: 18 +onplayerkilled(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09) +{ + if(!isplayer(param_01) || param_01.pers["team"] == self.pers["team"]) + { + return; + } + + var_0A = 0; + var_0B = 0; + var_0C = self; + foreach(var_0E in var_0C.touchtriggers) + { + if(var_0E != level.flags[0] && var_0E != level.flags[1] && var_0E != level.flags[2]) + { + continue; + } + + var_0F = var_0E.useobj.ownerteam; + var_10 = var_0C.pers["team"]; + if(var_0F == "neutral") + { + continue; + } + + if(var_10 == var_0F) + { + var_0A = 1; + param_01 thread maps\mp\gametypes\_hud_message::func_2892("assault",maps\mp\gametypes\_rank::getscoreinfovalue("assault")); + param_01 thread maps\mp\gametypes\_rank::func_2AB3("assault"); + maps\mp\gametypes\_gamescore::func_26D3("assault",param_01); + thread maps\mp\_matchdata::func_28B4(param_09,"defending"); + continue; + } + + var_0B = 1; + param_01 thread maps\mp\gametypes\_hud_message::func_2892("defend",maps\mp\gametypes\_rank::getscoreinfovalue("defend")); + param_01 thread maps\mp\gametypes\_rank::func_2AB3("defend"); + maps\mp\gametypes\_gamescore::func_26D3("defend",param_01); + param_01 maps\mp\_utility::func_26FB("defends",1); + param_01 maps\mp\gametypes\_persistence::func_26D8("round","defends",param_01.pers["defends"]); + thread maps\mp\_matchdata::func_28B4(param_09,"assaulting"); + } + + foreach(var_0E in param_01.touchtriggers) + { + if(var_0E != level.flags[0] && var_0E != level.flags[1] && var_0E != level.flags[2]) + { + continue; + } + + var_0F = var_0E.useobj.ownerteam; + var_13 = param_01.pers["team"]; + if(var_0F == "neutral") + { + continue; + } + + if(var_13 != var_0F) + { + if(!var_0A) + { + param_01 thread maps\mp\gametypes\_hud_message::func_2892("assault",maps\mp\gametypes\_rank::getscoreinfovalue("assault")); + } + + param_01 thread maps\mp\gametypes\_rank::func_2AB3("assault"); + maps\mp\gametypes\_gamescore::func_26D3("assault",param_01); + thread maps\mp\_matchdata::func_28B4(param_09,"defending"); + } + } + + foreach(var_0E in level.flags) + { + var_0F = var_0E.useobj.ownerteam; + var_13 = param_01.pers["team"]; + var_16 = distancesquared(var_0E.origin,var_0C.origin); + var_17 = 90000; + if(var_13 == var_0F && var_16 < var_17) + { + if(!var_0B) + { + param_01 thread maps\mp\gametypes\_hud_message::func_2892("defend",maps\mp\gametypes\_rank::getscoreinfovalue("defend")); + } + + param_01 thread maps\mp\gametypes\_rank::func_2AB3("defend"); + maps\mp\gametypes\_gamescore::func_26D3("defend",param_01); + thread maps\mp\_matchdata::func_28B4(param_09,"assaulting"); + } + } +} + +//Function Number: 19 +func_3472() +{ + var_00 = []; + foreach(var_02 in level.domflags) + { + if(var_02 maps\mp\gametypes\_gameobjects::func_2A15() != "neutral" && isdefined(var_02.capturetime)) + { + var_00[var_00.size] = var_02; + } + } + + return var_00; +} + +//Function Number: 20 +getteamflagcount(param_00) +{ + var_01 = 0; + for(var_02 = 0;var_02 < level.flags.size;var_02++) + { + if(level.domflags[var_02] maps\mp\gametypes\_gameobjects::func_2A15() == param_00) + { + var_01++; + } + } + + return var_01; +} + +//Function Number: 21 +func_3474() +{ + return self.useobj maps\mp\gametypes\_gameobjects::func_2A15(); +} + +//Function Number: 22 +func_3475() +{ + var_00 = []; + for(var_01 = 0;var_01 < level.flags.size;var_01++) + { + for(var_02 = 0;var_02 < level.flags[var_01].adjflags.size;var_02++) + { + if(level.flags[var_01].useobj maps\mp\gametypes\_gameobjects::func_2A15() != level.flags[var_01].adjflags[var_02].useobj maps\mp\gametypes\_gameobjects::func_2A15()) + { + var_00[var_00.size] = level.flags[var_01]; + break; + } + } + } + + return var_00; +} + +//Function Number: 23 +getboundaryflagspawns(param_00) +{ + var_01 = []; + var_02 = func_3475(); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + if(isdefined(param_00) && var_02[var_03] func_3474() != param_00) + { + continue; + } + + for(var_04 = 0;var_04 < var_02[var_03].nearbyspawns.size;var_04++) + { + var_01[var_01.size] = var_02[var_03].nearbyspawns[var_04]; + } + } + + return var_01; +} + +//Function Number: 24 +func_3477(param_00) +{ + var_01 = []; + for(var_02 = 0;var_02 < level.flags.size;var_02++) + { + var_03 = level.flags[var_02]; + if(var_03 == param_00) + { + continue; + } + + var_04 = 0; + for(var_05 = 0;var_05 < var_03.adjflags.size;var_05++) + { + if(var_03.adjflags[var_05] == param_00) + { + var_04 = 1; + break; + } + } + + if(!var_04) + { + continue; + } + + for(var_05 = 0;var_05 < var_03.nearbyspawns.size;var_05++) + { + var_01[var_01.size] = var_03.nearbyspawns[var_05]; + } + } + + return var_01; +} + +//Function Number: 25 +func_3478(param_00) +{ + var_01 = []; + for(var_02 = 0;var_02 < level.flags.size;var_02++) + { + if(level.flags[var_02] func_3474() == param_00) + { + for(var_03 = 0;var_03 < level.flags[var_02].nearbyspawns.size;var_03++) + { + var_01[var_01.size] = level.flags[var_02].nearbyspawns[var_03]; + } + + continue; + } + + for(var_04 = 0;var_04 < level.flags[var_02].adjflags.size;var_04++) + { + if(level.flags[var_02].adjflags[var_04] func_3474() == param_00) + { + for(var_03 = 0;var_03 < level.flags[var_02].nearbyspawns.size;var_03++) + { + var_01[var_01.size] = level.flags[var_02].nearbyspawns[var_03]; + } + + break; + } + } + } + + return var_01; +} + +//Function Number: 26 +getownedflagspawns(param_00) +{ + var_01 = []; + for(var_02 = 0;var_02 < level.flags.size;var_02++) + { + if(level.flags[var_02] func_3474() == param_00) + { + for(var_03 = 0;var_03 < level.flags[var_02].nearbyspawns.size;var_03++) + { + var_01[var_01.size] = level.flags[var_02].nearbyspawns[var_03]; + } + } + } + + return var_01; +} + +//Function Number: 27 +flagsetup() +{ + var_00 = []; + var_01 = []; + var_02 = getentarray("flag_descriptor","targetname"); + var_03 = level.flags; + for(var_04 = 0;var_04 < level.domflags.size;var_04++) + { + var_05 = undefined; + var_06 = undefined; + for(var_07 = 0;var_07 < var_02.size;var_07++) + { + var_08 = distance(var_03[var_04].origin,var_02[var_07].origin); + if(!isdefined(var_05) || var_08 < var_05) + { + var_05 = var_08; + var_06 = var_02[var_07]; + } + } + + if(!isdefined(var_06)) + { + var_00[var_00.size] = "there is no flag_descriptor in the map! see explanation in dom.gsc"; + break; + } + + if(isdefined(var_06.flag)) + { + var_00[var_00.size] = "flag_descriptor with script_linkname \" + var_06.script_linkname + "\" is nearby more than one flag; is there a unique descriptor near each flag?"; + continue; + } + + var_03[var_04].descriptor = var_06; + var_06.flag = var_03[var_04]; + var_01[var_06.script_linkname] = var_06; + } + + if(var_00.size == 0) + { + for(var_04 = 0;var_04 < var_03.size;var_04++) + { + if(isdefined(var_03[var_04].descriptor.script_linkto)) + { + var_09 = strtok(var_03[var_04].descriptor.script_linkto," "); + } + else + { + var_09 = []; + } + + for(var_07 = 0;var_07 < var_09.size;var_07++) + { + var_0A = var_01[var_09[var_07]]; + if(!isdefined(var_0A) || var_0A.targetname != "flag_descriptor") + { + var_00[var_00.size] = "flag_descriptor with script_linkname \" + var_03[var_04].descriptor.script_linkname + "\" linked to \" + var_09[var_07] + "\" which does not exist as a script_linkname of any other entity with a targetname of flag_descriptor (or, if it does, that flag_descriptor has not been assigned to a flag)"; + continue; + } + + var_0B = var_0A.flag; + if(var_0B == var_03[var_04]) + { + var_00[var_00.size] = "flag_descriptor with script_linkname \" + var_03[var_04].descriptor.script_linkname + "\" linked to itself"; + continue; + } + + var_03[var_04].adjflags[var_03[var_04].adjflags.size] = var_0B; + } + } + } + + var_0C = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_dom_spawn"); + for(var_04 = 0;var_04 < var_0C.size;var_04++) + { + if(isdefined(var_0C[var_04].script_linkto)) + { + var_0D = var_01[var_0C[var_04].script_linkto]; + if(!isdefined(var_0D) || var_0D.targetname != "flag_descriptor") + { + var_00[var_00.size] = "Spawnpoint at " + var_0C[var_04].origin + "\" linked to \" + var_0C[var_04].script_linkto + "\" which does not exist as a script_linkname of any entity with a targetname of flag_descriptor (or, if it does, that flag_descriptor has not been assigned to a flag)"; + continue; + } + + var_0E = var_0D.flag; + } + else + { + var_0E = undefined; + var_0F = undefined; + for(var_07 = 0;var_07 < var_03.size;var_07++) + { + var_08 = distancesquared(var_03[var_07].origin,var_0C[var_04].origin); + if(!isdefined(var_0E) || var_08 < var_0F) + { + var_0E = var_03[var_07]; + var_0F = var_08; + } + } + } + + var_0E.nearbyspawns[var_0E.nearbyspawns.size] = var_0C[var_04]; + } + + if(var_00.size > 0) + { + for(var_04 = 0;var_04 < var_00.size;var_04++) + { + } + + common_scripts\utility::error("Map errors. See above"); + maps\mp\gametypes\_callbacksetup::abortlevel(); + } +} + +//Function Number: 28 +initgametypeawards() +{ + maps\mp\_awards::func_2D85("pointscaptured",0,::maps\mp\_awards::func_2DA7); +} + +//Function Number: 29 +onspawnplayer() +{ +} + +//Function Number: 30 +func_347C() +{ + if(!isdefined(self.cpm)) + { + self.numcaps = 0; + self.cpm = 0; + } + + self.numcaps++; + if(maps\mp\_utility::getminutespassed() < 1) + { + return; + } + + self.cpm = self.numcaps / maps\mp\_utility::getminutespassed(); +} + +//Function Number: 31 +getcapxpscale() +{ + if(self.cpm < 4) + { + return 1; + } + + return 0.25; +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/gametypes/grnd.gsc b/MW3/Xbox/MP/maps/mp/gametypes/grnd.gsc new file mode 100644 index 0000000..c037da1 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/gametypes/grnd.gsc @@ -0,0 +1,859 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\grnd.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 23 + * Decompile Time: 343 ms + * Timestamp: 10/27/2023 2:26:11 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(getdvar("mapname") == "mp_background") + { + return; + } + + maps\mp\gametypes\_globallogic::init(); + maps\mp\gametypes\_callbacksetup::setupcallbacks(); + maps\mp\gametypes\_globallogic::setupcallbacks(); + if(isusingmatchrulesdata()) + { + level.initializematchrules = ::initializematchrules; + [[ level.initializematchrules ]](); + level thread maps\mp\_utility::func_810A(); + } + else + { + maps\mp\_utility::func_330E(level.gametype,0,0,9); + maps\mp\_utility::func_3315(level.gametype,10); + maps\mp\_utility::registerscorelimitdvar(level.gametype,20000); + maps\mp\_utility::func_3312(level.gametype,1); + maps\mp\_utility::registerwinlimitdvar(level.gametype,1); + maps\mp\_utility::func_3317(level.gametype,0); + maps\mp\_utility::registerhalftimedvar(level.gametype,0); + level.matchrules_droptime = 30; + level.matchrules_zoneswitchtime = 120; + level.matchrules_damagemultiplier = 0; + level.matchrules_vampirism = 0; + } + + level.teambased = 1; + level.onprecachegametype = ::onprecachegametype; + level.onstartgametype = ::onstartgametype; + level.getspawnpoint = ::getspawnpoint; + level.onspawnplayer = ::onspawnplayer; + if(level.matchrules_damagemultiplier || level.matchrules_vampirism) + { + level.modifyplayerdamage = ::maps\mp\gametypes\_damage::func_2D57; + } + + level.grnd_fx["smoke"] = loadfx("smoke/airdrop_flare_mp_effect_now"); + level.grnd_fx["flare"] = loadfx("smoke/signal_smoke_airdrop"); + level.grnd_targetfxid = loadfx("misc/ui_flagbase_red"); + level.dangermaxradius["drop_zone"] = 1200; + level.dangerminradius["drop_zone"] = 1190; + level.dangerforwardpush["drop_zone"] = 0; + level.dangerovalscale["drop_zone"] = 1; + createzones(); +} + +//Function Number: 2 +initializematchrules() +{ + maps\mp\_utility::func_334C(); + level.matchrules_droptime = getmatchrulesdata("grndData","dropTime"); + level.matchrules_zoneswitchtime = 60 * getmatchrulesdata("grndData","zoneSwitchTime"); + if(level.matchrules_zoneswitchtime < 60) + { + level.matchrules_zoneswitchtime = 120; + } + + setdynamicdvar("scr_grnd_roundswitch",0); + maps\mp\_utility::func_330E("grnd",0,0,9); + setdynamicdvar("scr_grnd_roundlimit",1); + maps\mp\_utility::func_3312("grnd",1); + setdynamicdvar("scr_grnd_winlimit",1); + maps\mp\_utility::registerwinlimitdvar("grnd",1); + setdynamicdvar("scr_grnd_halftime",0); + maps\mp\_utility::registerhalftimedvar("grnd",0); + setdynamicdvar("scr_grnd_promode",0); +} + +//Function Number: 3 +onprecachegametype() +{ + precacheshader("waypoint_captureneutral"); + precacheshader("waypoint_capture"); + precacheshader("waypoint_defend"); + precachemodel("prop_flag_neutral"); + precachestring(&"OBJECTIVES_GRND"); + precachestring(&"OBJECTIVES_GRND_SCORE"); + precachestring(&"OBJECTIVES_GRND_HINT"); + precachestring(&"OBJECTIVES_GRND_CONFIRM"); + precachestring(&"MP_CALLING_AIRDROP"); + precachestring(&"MP_NEXT_DROP_ZONE_IN"); + precachemodel("weapon_us_smoke_grenade_burnt2"); +} + +//Function Number: 4 +onstartgametype() +{ + setclientnamemode("auto_change"); + if(!isdefined(game["switchedsides"])) + { + game["switchedsides"] = 0; + } + + maps\mp\_utility::func_3305("allies",&"OBJECTIVES_GRND"); + maps\mp\_utility::func_3305("axis",&"OBJECTIVES_GRND"); + if(level.splitscreen) + { + maps\mp\_utility::func_3306("allies",&"OBJECTIVES_GRND"); + maps\mp\_utility::func_3306("axis",&"OBJECTIVES_GRND"); + } + else + { + maps\mp\_utility::func_3306("allies",&"OBJECTIVES_GRND_SCORE"); + maps\mp\_utility::func_3306("axis",&"OBJECTIVES_GRND_SCORE"); + } + + maps\mp\_utility::setobjectivehinttext("allies",&"OBJECTIVES_GRND_HINT"); + maps\mp\_utility::setobjectivehinttext("axis",&"OBJECTIVES_GRND_HINT"); + level.spawnmins = (0,0,0); + level.spawnmaxs = (0,0,0); + maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_sab_spawn_allies_start"); + maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_sab_spawn_axis_start"); + maps\mp\gametypes\_spawnlogic::func_2FD0("allies","mp_tdm_spawn"); + maps\mp\gametypes\_spawnlogic::func_2FD0("axis","mp_tdm_spawn"); + level.mapcenter = maps\mp\gametypes\_spawnlogic::func_2FCD(level.spawnmins,level.spawnmaxs); + setmapcenter(level.mapcenter); + var_00 = getent("sab_bomb","targetname"); + level.grnd_centerloc = var_00.origin; + maps\mp\gametypes\_rank::registerscoreinfo("kill",50); + maps\mp\gametypes\_rank::registerscoreinfo("zone_kill",100); + maps\mp\gametypes\_rank::registerscoreinfo("zone_tick",20); + var_01[0] = level.gametype; + maps\mp\gametypes\_gameobjects::main(var_41); + level.grnd_hud["timerDisplay"] = maps\mp\gametypes\_hud_util::createservertimer("objective",1.4); + level.grnd_hud["timerDisplay"].label = &"MP_NEXT_DROP_ZONE_IN"; + if(level.splitscreen) + { + level.grnd_hud["timerDisplay"] maps\mp\gametypes\_hud_util::setpoint("TOPLEFT","TOPLEFT",80,0); + } + else + { + level.grnd_hud["timerDisplay"] maps\mp\gametypes\_hud_util::setpoint("TOPLEFT","TOPLEFT",115,5); + } + + level.grnd_hud["timerDisplay"].alpha = 0; + level.grnd_hud["timerDisplay"].archived = 0; + level.grnd_hud["timerDisplay"].hidewheninmenu = 1; + thread func_3535(level.grnd_hud["timerDisplay"]); + initfirstzone(); +} + +//Function Number: 5 +initfirstzone() +{ + level.zonescycling = 0; + level.var_8244 = 0; + var_00 = 999999; + var_01 = 0; + for(var_02 = 0;var_02 < level.grnd_dropzones[level.script].size;var_02++) + { + var_03 = level.grnd_dropzones[level.script][var_02]; + var_04 = distance2d(level.grnd_centerloc,var_03); + if(var_04 < var_00) + { + var_00 = var_04; + var_01 = var_02; + } + } + + level.grnd_initialindex = var_01; + var_05 = level.grnd_dropzones[level.script][var_01]; + level.grnd_initialpos = var_05; + level.grnd_zone = spawn("script_model",var_05); + level.grnd_zone.origin = var_05; + level.grnd_zone.angles = (90,0,0); + level.grnd_zone setmodel("weapon_us_smoke_grenade_burnt2"); + level.grnd_dangercenter = spawnstruct(); + level.grnd_dangercenter.origin = var_05; + level.grnd_dangercenter.forward = anglestoforward((0,0,0)); + level.grnd_dangercenter.streakname = "drop_zone"; + level.artillerydangercenters[level.artillerydangercenters.size] = level.grnd_dangercenter; + level.favorclosespawnent = level.grnd_zone; + level.favorclosespawnscalar = 5; + level thread func_3525(); +} + +//Function Number: 6 +func_3525() +{ + level.grnd_zones = []; + for(var_00 = 0;var_00 < level.grnd_dropzones[level.script].size;var_00++) + { + var_01 = level.grnd_dropzones[level.script][var_00]; + level.grnd_zones[var_00] = spawn("script_origin",var_01); + level.grnd_zones[var_00].origin = var_01; + wait 0.05; + } + + level.grnd_zones[level.grnd_initialindex] delete(); + level.grnd_zones[level.grnd_initialindex] = undefined; + level.grnd_zones = common_scripts\utility::array_removeundefined(level.grnd_zones); +} + +//Function Number: 7 +getspawnpoint() +{ + if(level.ingraceperiod) + { + var_00 = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_sab_spawn_" + self.pers["team"] + "_start"); + var_01 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random(var_00); + } + else + { + var_00 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints(self.pers["team"]); + var_01 = maps\mp\gametypes\_spawnlogic::func_2FE6(var_01); + } + + return var_01; +} + +//Function Number: 8 +onspawnplayer() +{ + if(!isdefined(self.ingrindzone)) + { + level thread setplayermessages(self); + if(!level.zonescycling) + { + level.zonescycling = 1; + level thread cyclezones(); + level thread locationstatus(); + level thread locationscoring(); + } + + thread waitreplaysmokefxfornewplayer(); + } + + level notify("spawned_player"); +} + +//Function Number: 9 +waitreplaysmokefxfornewplayer() +{ + level endon("game_ended"); + self endon("disconnect"); + maps\mp\_utility::func_274B("prematch_done"); + wait 0.5; + if(!isdefined(self.grnd_fx_playing)) + { + playfxontagforclients(level.grnd_fx["smoke"],level.grnd_zone,"tag_fx",self); + self.grnd_fx_playing = 1; + } +} + +//Function Number: 10 +createhudinfo(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + var_07 = maps\mp\gametypes\_hud_util::createfontstring(param_01,param_02); + var_07 settext(param_05); + if(level.splitscreen) + { + var_07 maps\mp\gametypes\_hud_util::setpoint("TOPLEFT","TOPLEFT",param_03 - 35,param_04 - 5); + } + else + { + var_07 maps\mp\gametypes\_hud_util::setpoint("TOPLEFT","TOPLEFT",param_03,param_04); + } + + var_07.alpha = 1; + var_07.color = param_06; + var_07.glowcolor = param_06; + var_07.archived = 0; + var_07.hidewheninmenu = 1; + thread func_3535(var_07); + self.grnd_hud[param_00] = var_07; +} + +//Function Number: 11 +setplayermessages(param_00) +{ + level endon("game_ended"); + maps\mp\_utility::func_274B("prematch_done"); + param_00.ingrindzonepoints = 0; + var_01 = param_00.team + "Score"; + param_00 createhudinfo(var_01,"small",1.6,115,22,0,(0.6,1,0.6)); + var_01 = param_00.team + "Text"; + param_00 createhudinfo(var_01,"small",1.6,135,22,maps\mp\gametypes\_teams::func_276B(param_00.team),(0.6,1,0.6)); + var_01 = level.otherteam[param_00.team] + "Score"; + param_00 createhudinfo(var_01,"small",1.6,115,39,0,(1,0.6,0.6)); + var_01 = level.otherteam[param_00.team] + "Text"; + param_00 createhudinfo(var_01,"small",1.6,135,39,maps\mp\gametypes\_teams::func_276B(level.otherteam[param_00.team]),(1,0.6,0.6)); + param_00.grndheadicon = level.grnd_zone maps\mp\_entityheadicons::func_277C(param_00,"waypoint_captureneutral",(0,0,0),14,14,undefined,undefined,undefined,1,undefined,0); + param_00.grndobjid = maps\mp\gametypes\_gameobjects::func_2A31(); + objective_add(param_00.grndobjid,"invisible",(0,0,0)); + objective_player(param_00.grndobjid,param_00 getentitynumber()); + objective_onentity(param_00.grndobjid,level.grnd_zone); + objective_icon(param_00.grndobjid,"waypoint_captureneutral"); + objective_state(param_00.grndobjid,"active"); + if(param_00 isingrindzone()) + { + param_00.ingrindzone = 1; + param_00.grndheadicon.alpha = 0; + } + else + { + param_00.ingrindzone = 0; + param_00.grndheadicon.alpha = 0.85; + } + + param_00.grnd_wasspectator = 0; + if(param_00.team == "spectator") + { + param_00.ingrindzone = 0; + param_00.ingrindzonepoints = 0; + param_00.grndheadicon.alpha = 0; + param_00.grnd_hud["axisScore"].alpha = 0; + param_00.grnd_hud["axisText"].alpha = 0; + param_00.grnd_hud["alliesScore"].alpha = 0; + param_00.grnd_hud["alliesText"].alpha = 0; + param_00.grnd_wasspectator = 1; + } + + param_00 thread grndtracking(); +} + +//Function Number: 12 +getnextzone() +{ + var_00 = undefined; + var_01 = undefined; + if(level.grnd_zones.size > 2) + { + var_02 = 999999; + var_03 = 0; + for(var_04 = 0;var_04 < level.grnd_zones.size;var_04++) + { + level.grnd_zones[var_04].index = var_04; + level.grnd_zones[var_04].disttozone = distance(level.grnd_zones[var_04].origin,level.grnd_zone.origin); + if(level.grnd_zones[var_04].disttozone > var_03) + { + var_03 = level.grnd_zones[var_04].disttozone; + continue; + } + + if(level.grnd_zones[var_04].disttozone < var_02) + { + var_02 = level.grnd_zones[var_04].disttozone; + } + } + + var_05 = []; + var_06 = []; + var_07 = int(var_02 + var_03 / 2); + for(var_04 = 0;var_04 < level.grnd_zones.size;var_04++) + { + if(level.grnd_zones[var_04].disttozone >= var_07) + { + var_05[var_05.size] = level.grnd_zones[var_04]; + continue; + } + + var_06[var_06.size] = level.grnd_zones[var_04]; + } + + var_08 = undefined; + if(var_05.size > 1) + { + var_08 = var_05[randomintrange(0,var_05.size)]; + } + else if(var_05.size) + { + var_08 = var_05[0]; + } + else + { + var_08 = var_06[randomintrange(0,var_06.size)]; + } + + var_01 = var_08.index; + } + else if(level.grnd_zones.size == 2) + { + var_09 = distance(level.grnd_zones[0].origin,level.grnd_zone.origin); + var_0A = distance(level.grnd_zones[1].origin,level.grnd_zone.origin); + if(var_09 > var_0A) + { + var_01 = 0; + } + else + { + var_01 = 1; + } + } + else if(level.grnd_zones.size == 1) + { + var_01 = 0; + } + + if(isdefined(var_01)) + { + var_00 = level.grnd_zones[var_01].origin; + level.grnd_zones[var_01] delete(); + level.grnd_zones[var_01] = undefined; + level.grnd_zones = common_scripts\utility::array_removeundefined(level.grnd_zones); + } + else + { + var_00 = level.grnd_dropzones[level.script][level.grnd_initialindex]; + level thread func_3525(); + } + + return var_00; +} + +//Function Number: 13 +cyclezones() +{ + level endon("game_ended"); + maps\mp\_utility::func_274B("prematch_done"); + for(;;) + { + var_00 = undefined; + if(!level.var_8244) + { + level.var_8244 = 1; + var_00 = level.grnd_zone.origin; + } + else + { + var_00 = getnextzone(); + stopfxontag(level.grnd_fx["smoke"],level.grnd_zone,"tag_fx"); + wait 0.05; + } + + var_01 = var_00 + (0,0,30); + var_02 = var_00 + (0,0,-1000); + var_03 = bullettrace(var_01,var_02,0,undefined); + level.grnd_zone.origin = var_03["position"] + (0,0,1); + level.grnd_dangercenter.origin = level.grnd_zone.origin; + var_04 = vectortoangles(var_03["normal"]); + var_05 = anglestoforward(var_04); + var_06 = anglestoright(var_04); + thread func_3084(var_03["position"],var_05,var_06,0.5); + wait 0.05; + playfxontag(level.grnd_fx["smoke"],level.grnd_zone,"tag_fx"); + foreach(var_08 in level.players) + { + var_08.grnd_fx_playing = 1; + } + + if(level.matchrules_droptime) + { + level thread func_3532(); + } + + level.grnd_hud["timerDisplay"].label = &"MP_NEXT_DROP_ZONE_IN"; + level.grnd_hud["timerDisplay"] settimer(level.matchrules_zoneswitchtime); + level.grnd_hud["timerDisplay"].alpha = 1; + maps\mp\gametypes\_hostmigration::func_2740(level.matchrules_zoneswitchtime); + level.grnd_hud["timerDisplay"].alpha = 0; + maps\mp\_utility::func_2D68("mp_obj_captured"); + } +} + +//Function Number: 14 +func_3084(param_00,param_01,param_02,param_03) +{ + if(isdefined(level.grnd_targetfx)) + { + level.grnd_targetfx delete(); + } + + wait param_03; + level.grnd_targetfx = spawnfx(level.grnd_targetfxid,param_00,param_01,param_02); + triggerfx(level.grnd_targetfx); +} + +//Function Number: 15 +grndtracking() +{ + self endon("disconnect"); + level endon("game_ended"); + for(;;) + { + if(!self.grnd_wasspectator && self.team == "spectator") + { + self.ingrindzone = 0; + self.ingrindzonepoints = 0; + self.grndheadicon.alpha = 0; + self.grnd_hud["axisScore"].alpha = 0; + self.grnd_hud["axisText"].alpha = 0; + self.grnd_hud["alliesScore"].alpha = 0; + self.grnd_hud["alliesText"].alpha = 0; + self.grnd_wasspectator = 1; + } + else if(self.team != "spectator") + { + if((self.grnd_wasspectator || !self.ingrindzone) && isingrindzone()) + { + self.ingrindzone = 1; + self.ingrindzonepoints = 0; + self iprintlnbold(&"OBJECTIVES_GRND_CONFIRM"); + self.grnd_hud["axisScore"].alpha = 1; + self.grnd_hud["axisText"].alpha = 1; + self.grnd_hud["alliesScore"].alpha = 1; + self.grnd_hud["alliesText"].alpha = 1; + self.grnd_hud[self.team + "Score"].glowalpha = 1; + self.grnd_hud[self.team + "Text"].glowalpha = 1; + self.grndheadicon.alpha = 0; + } + else if((self.grnd_wasspectator || self.ingrindzone) && !isingrindzone()) + { + self.ingrindzone = 0; + self.ingrindzonepoints = 0; + self iprintlnbold(&"OBJECTIVES_GRND_HINT"); + self.grnd_hud["axisScore"].alpha = 1; + self.grnd_hud["axisText"].alpha = 1; + self.grnd_hud["alliesScore"].alpha = 1; + self.grnd_hud["alliesText"].alpha = 1; + self.grnd_hud[self.team + "Score"].glowalpha = 0; + self.grnd_hud[self.team + "Text"].glowalpha = 0; + self.grndheadicon.alpha = 0.85; + } + + self.grnd_wasspectator = 0; + } + + wait 0.05; + } +} + +//Function Number: 16 +locationstatus() +{ + level endon("game_ended"); + level.grnd_numplayers["axis"] = 0; + level.grnd_numplayers["allies"] = 0; + maps\mp\_utility::func_274B("prematch_done"); + for(;;) + { + level.grnd_numplayers["axis"] = 0; + level.grnd_numplayers["allies"] = 0; + foreach(var_01 in level.players) + { + if(isdefined(var_01.ingrindzone) && maps\mp\_utility::isreallyalive(var_01) && var_01.pers["team"] != "spectator" && var_01 isingrindzone()) + { + level.grnd_numplayers[var_01.pers["team"]]++; + } + } + + foreach(var_01 in level.players) + { + if(isdefined(var_01.ingrindzone) && var_01.pers["team"] != "spectator") + { + var_01.grnd_hud["axisScore"] settext(level.grnd_numplayers["axis"]); + var_01.grnd_hud["alliesScore"] settext(level.grnd_numplayers["allies"]); + if(level.grnd_numplayers["axis"] == level.grnd_numplayers["allies"]) + { + var_01.grndheadicon setshader("waypoint_captureneutral",14,14); + var_01.grndheadicon setwaypoint(0,1,0,0); + objective_icon(var_01.grndobjid,"waypoint_captureneutral"); + continue; + } + + if(level.grnd_numplayers[var_01.pers["team"]] > level.grnd_numplayers[level.otherteam[var_01.pers["team"]]]) + { + var_01.grndheadicon setshader("waypoint_defend",14,14); + var_01.grndheadicon setwaypoint(0,1,0,0); + objective_icon(var_01.grndobjid,"waypoint_defend"); + continue; + } + + var_01.grndheadicon setshader("waypoint_capture",14,14); + var_01.grndheadicon setwaypoint(0,1,0,0); + objective_icon(var_01.grndobjid,"waypoint_capture"); + } + } + + wait 0.5; + } +} + +//Function Number: 17 +locationscoring() +{ + level endon("game_ended"); + maps\mp\_utility::func_274B("prematch_done"); + var_00 = maps\mp\gametypes\_rank::getscoreinfovalue("zone_tick"); + for(;;) + { + if(level.grnd_numplayers["axis"]) + { + maps\mp\gametypes\_gamescore::giveteamscoreforobjective("axis",var_00 * level.grnd_numplayers["axis"]); + } + + if(level.grnd_numplayers["allies"]) + { + maps\mp\gametypes\_gamescore::giveteamscoreforobjective("allies",var_00 * level.grnd_numplayers["allies"]); + } + + foreach(var_02 in level.players) + { + if(isdefined(var_02.ingrindzone) && maps\mp\_utility::isreallyalive(var_02) && var_02.pers["team"] != "spectator" && var_02 isingrindzone()) + { + var_02.ingrindzonepoints = var_02.ingrindzonepoints + var_00; + maps\mp\gametypes\_gamescore::func_26D3("zone_tick",var_02,undefined,0,1); + var_02.xpupdatetotal = 0; + var_02 thread maps\mp\gametypes\_rank::xppointspopup(20,0,(1,1,0.5),0); + } + } + + maps\mp\gametypes\_hostmigration::func_2740(1); + } +} + +//Function Number: 18 +func_3532() +{ + level endon("game_ended"); + level notify("reset_grnd_drops"); + level endon("reset_grnd_drops"); + level.grnd_previouscratetypes = []; + for(;;) + { + var_00 = func_3533(); + var_01 = 1; + if(isdefined(var_00) && maps\mp\_utility::func_2BEC() < maps\mp\_utility::maxvehiclesallowed() && level.fauxvehiclecount + var_01 < maps\mp\_utility::maxvehiclesallowed() && level.numdropcrates < 8) + { + var_00 thread maps\mp\gametypes\_rank::xpeventpopup(&"SPLASHES_EARNED_CAREPACKAGE"); + thread maps\mp\_utility::teamplayercardsplash("callout_earned_carepackage",var_00); + var_00 thread maps\mp\_utility::func_26E5(level.otherteam[var_00.team] + "_enemy_airdrop_assault_inbound",level.otherteam[var_00.team]); + var_00 thread maps\mp\_utility::func_26E5(var_00.team + "_friendly_airdrop_assault_inbound",var_00.team); + maps\mp\_utility::func_2D68("mp_war_objective_taken",var_00.team); + maps\mp\_utility::func_2D68("mp_war_objective_lost",level.otherteam[var_00.team]); + var_02 = level.grnd_zone.origin + (randomintrange(-50,50),randomintrange(-50,50),0); + var_03 = getdropzonecratetype(); + if(issubstr(tolower(var_03),"juggernaut")) + { + level thread maps\mp\killstreaks\_airdrop::doc130flyby(var_00,var_02,randomfloat(360),var_03); + } + else if(var_03 == "mega") + { + level thread maps\mp\killstreaks\_airdrop::func_2E77(var_00,var_02,randomfloat(360),"airdrop_grnd",-360); + } + else + { + maps\mp\_utility::func_80C7(); + level thread maps\mp\killstreaks\_airdrop::doflyby(var_00,var_02,randomfloat(360),"airdrop_grnd",0,var_03); + } + + var_04 = level.matchrules_droptime; + } + else + { + var_04 = 0.5; + } + + maps\mp\gametypes\_hostmigration::func_2740(var_04); + } +} + +//Function Number: 19 +func_3533() +{ + var_00 = undefined; + var_01 = 0; + foreach(var_03 in level.players) + { + if(maps\mp\_utility::isreallyalive(var_03) && var_03.pers["team"] != "spectator") + { + if(var_03 isingrindzone() && var_03.ingrindzonepoints > var_01) + { + var_00 = var_03; + var_01 = var_03.ingrindzonepoints; + } + } + } + + return var_00; +} + +//Function Number: 20 +getdropzonecratetype() +{ + var_00 = undefined; + if(!isdefined(level.grnd_previouscratetypes["mega"]) && level.numdropcrates == 0 && randomintrange(0,100) < 5) + { + var_00 = "mega"; + } + else + { + if(level.grnd_previouscratetypes.size) + { + for(var_01 = 200;var_01;var_01--) + { + var_00 = maps\mp\killstreaks\_airdrop::getrandomcratetype("airdrop_grnd"); + if(isdefined(level.grnd_previouscratetypes[var_00])) + { + var_00 = undefined; + continue; + } + + break; + } + } + + if(!isdefined(var_00)) + { + var_00 = maps\mp\killstreaks\_airdrop::getrandomcratetype("airdrop_grnd"); + } + } + + level.grnd_previouscratetypes[var_00] = 1; + if(level.grnd_previouscratetypes.size == 15) + { + level.grnd_previouscratetypes = []; + } + + return var_00; +} + +//Function Number: 21 +isingrindzone() +{ + if(distance2d(level.grnd_zone.origin,self.origin) < 300 && self.origin[2] > level.grnd_zone.origin[2] - 50) + { + return 1; + } + + return 0; +} + +//Function Number: 22 +func_3535(param_00) +{ + level waittill("game_ended"); + if(isdefined(param_00)) + { + param_00.alpha = 0; + } +} + +//Function Number: 23 +createzones() +{ + level.grnd_dropzones = []; + var_00 = getentarray("grnd_dropZone","targetname"); + if(isdefined(var_00) && var_00.size) + { + var_01 = 0; + foreach(var_03 in var_00) + { + level.grnd_dropzones[level.script][var_01] = var_03.origin; + var_01++; + } + + return; + } + + level.grnd_dropzones["mp_seatown"][0] = (-665,-209,226); + level.grnd_dropzones["mp_seatown"][1] = (-2225,1573,260); + level.grnd_dropzones["mp_seatown"][2] = (1275,-747,292); + level.grnd_dropzones["mp_seatown"][3] = (1210,963,225); + level.grnd_dropzones["mp_seatown"][4] = (-2343,-811,226); + level.grnd_dropzones["mp_seatown"][5] = (-1125,-1610,184); + level.grnd_dropzones["mp_dome"][0] = (649,1096,-250); + level.grnd_dropzones["mp_dome"][1] = (953,-501,-328); + level.grnd_dropzones["mp_dome"][2] = (-37,2099,-231); + level.grnd_dropzones["mp_dome"][3] = (-716,1100,-296); + level.grnd_dropzones["mp_dome"][4] = (-683,-51,-352); + level.grnd_dropzones["mp_plaza2"][0] = (266,-212,708); + level.grnd_dropzones["mp_plaza2"][1] = (295,1842,668); + level.grnd_dropzones["mp_plaza2"][2] = (-1449,1833,692); + level.grnd_dropzones["mp_plaza2"][3] = (835,-1815,668); + level.grnd_dropzones["mp_plaza2"][4] = (-1116,76,729); + level.grnd_dropzones["mp_plaza2"][5] = (-399,951,676); + level.grnd_dropzones["mp_mogadishu"][0] = (552,1315,8); + level.grnd_dropzones["mp_mogadishu"][1] = (990,3248,144); + level.grnd_dropzones["mp_mogadishu"][2] = (-879,2643,135); + level.grnd_dropzones["mp_mogadishu"][3] = (-68,-995,16); + level.grnd_dropzones["mp_mogadishu"][4] = (1499,-1206,15); + level.grnd_dropzones["mp_mogadishu"][5] = (2387,1786,61); + level.grnd_dropzones["mp_paris"][0] = (-150,-80,63); + level.grnd_dropzones["mp_paris"][1] = (-947,-1088,107); + level.grnd_dropzones["mp_paris"][2] = (1052,-614,50); + level.grnd_dropzones["mp_paris"][3] = (1886,648,24); + level.grnd_dropzones["mp_paris"][4] = (628,2096,30); + level.grnd_dropzones["mp_paris"][5] = (-2033,1082,308); + level.grnd_dropzones["mp_paris"][6] = (-1230,1836,295); + level.grnd_dropzones["mp_exchange"][0] = (904,441,-77); + level.grnd_dropzones["mp_exchange"][1] = (-1056,1435,141); + level.grnd_dropzones["mp_exchange"][2] = (800,1543,148); + level.grnd_dropzones["mp_exchange"][3] = (2423,1368,141); + level.grnd_dropzones["mp_exchange"][4] = (596,-1870,89); + level.grnd_dropzones["mp_exchange"][5] = (-1241,-821,30); + level.grnd_dropzones["mp_bootleg"][0] = (-444,-114,-8); + level.grnd_dropzones["mp_bootleg"][1] = (1053,-1051,-13); + level.grnd_dropzones["mp_bootleg"][2] = (889,1184,-28); + level.grnd_dropzones["mp_bootleg"][3] = (-994,1877,-41); + level.grnd_dropzones["mp_bootleg"][4] = (-1707,-1333,63); + level.grnd_dropzones["mp_bootleg"][5] = (-334,-2155,61); + level.grnd_dropzones["mp_carbon"][0] = (-1791,-3892,3813); + level.grnd_dropzones["mp_carbon"][1] = (-338,-4978,3964); + level.grnd_dropzones["mp_carbon"][2] = (-82,-2941,3990); + level.grnd_dropzones["mp_carbon"][3] = (-3198,-2829,3809); + level.grnd_dropzones["mp_carbon"][4] = (-3673,-3893,3610); + level.grnd_dropzones["mp_carbon"][5] = (-2986,-4863,3648); + level.grnd_dropzones["mp_hardhat"][0] = (1187,-322,238); + level.grnd_dropzones["mp_hardhat"][1] = (2010,-1379,357); + level.grnd_dropzones["mp_hardhat"][2] = (1615,1245,366); + level.grnd_dropzones["mp_hardhat"][3] = (-371,825,436); + level.grnd_dropzones["mp_hardhat"][4] = (-820,-927,348); + level.grnd_dropzones["mp_alpha"][0] = (-239,1315,52); + level.grnd_dropzones["mp_alpha"][1] = (-1678,-219,55); + level.grnd_dropzones["mp_alpha"][2] = (235,-369,60); + level.grnd_dropzones["mp_alpha"][3] = (-201,2138,60); + level.grnd_dropzones["mp_alpha"][4] = (-1903,2433,198); + level.grnd_dropzones["mp_village"][0] = (990,-821,331); + level.grnd_dropzones["mp_village"][1] = (658,2155,337); + level.grnd_dropzones["mp_village"][2] = (-559,1882,310); + level.grnd_dropzones["mp_village"][3] = (-1999,1184,343); + level.grnd_dropzones["mp_village"][4] = (215,-2875,384); + level.grnd_dropzones["mp_village"][5] = (1731,-483,290); + level.grnd_dropzones["mp_lambeth"][0] = (712,217,-196); + level.grnd_dropzones["mp_lambeth"][1] = (1719,-1095,-196); + level.grnd_dropzones["mp_lambeth"][2] = (2843,1034,-269); + level.grnd_dropzones["mp_lambeth"][3] = (1251,2645,-213); + level.grnd_dropzones["mp_lambeth"][4] = (-1114,1301,-200); + level.grnd_dropzones["mp_lambeth"][5] = (-693,-823,-132); + level.grnd_dropzones["mp_radar"][0] = (-5052,2371,1223); + level.grnd_dropzones["mp_radar"][1] = (-4550,4199,1268); + level.grnd_dropzones["mp_radar"][2] = (-7149,4449,1376); + level.grnd_dropzones["mp_radar"][3] = (-6350,1528,1302); + level.grnd_dropzones["mp_radar"][4] = (-3333,992,1222); + level.grnd_dropzones["mp_radar"][5] = (-4040,-361,1222); + level.grnd_dropzones["mp_interchange"][0] = (662,-513,142); + level.grnd_dropzones["mp_interchange"][1] = (674,1724,112); + level.grnd_dropzones["mp_interchange"][2] = (-1003,1103,30); + level.grnd_dropzones["mp_interchange"][3] = (385,-2910,209); + level.grnd_dropzones["mp_interchange"][4] = (2004,-1760,144); + level.grnd_dropzones["mp_interchange"][5] = (2458,-300,147); + level.grnd_dropzones["mp_underground"][0] = (31,1319,-196); + level.grnd_dropzones["mp_underground"][1] = (165,-940,60); + level.grnd_dropzones["mp_underground"][2] = (-747,143,4); + level.grnd_dropzones["mp_underground"][3] = (-1671,1666,-216); + level.grnd_dropzones["mp_underground"][4] = (-631,3158,-68); + level.grnd_dropzones["mp_underground"][5] = (500,2865,-89); + level.grnd_dropzones["mp_bravo"][0] = (-39,-119,1280); + level.grnd_dropzones["mp_bravo"][1] = (1861,-563,1229); + level.grnd_dropzones["mp_bravo"][2] = (-1548,-366,1007); + level.grnd_dropzones["mp_bravo"][3] = (-678,1272,1273); + level.grnd_dropzones["mp_bravo"][4] = (1438,842,1272); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/gametypes/gtnw.gsc b/MW3/Xbox/MP/maps/mp/gametypes/gtnw.gsc new file mode 100644 index 0000000..7add221 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/gametypes/gtnw.gsc @@ -0,0 +1,488 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\gtnw.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 21 + * Decompile Time: 296 ms + * Timestamp: 10/27/2023 2:26:12 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + maps\mp\gametypes\_globallogic::init(); + maps\mp\gametypes\_callbacksetup::setupcallbacks(); + maps\mp\gametypes\_globallogic::setupcallbacks(); + maps\mp\_utility::func_3315(level.gametype,3,0,1440); + maps\mp\_utility::registerscorelimitdvar(level.gametype,101,0,10000); + maps\mp\_utility::func_3312(level.gametype,1,0,30); + maps\mp\_utility::registerwinlimitdvar(level.gametype,1,0,10); + maps\mp\_utility::func_330E(level.gametype,0,0,30); + maps\mp\_utility::func_3317(level.gametype,0,0,10); + maps\mp\_utility::registerhalftimedvar(level.gametype,0,0,1); + level.teambased = 1; + level.onprecachegametype = ::onprecachegametype; + level.onstartgametype = ::onstartgametype; + level.getspawnpoint = ::getspawnpoint; + level.ondeadevent = ::ondeadevent; + level.initgametypeawards = ::initgametypeawards; + level.ontimelimit = ::ontimelimit; + level.onnormaldeath = ::onnormaldeath; + level.gtnw = 1; + game["dialog"]["gametype"] = "gtw"; + if(getdvarint("g_hardcore")) + { + game["dialog"]["gametype"] = "hc_" + game["dialog"]["gametype"]; + } + else if(getdvarint("camera_thirdPerson")) + { + game["dialog"]["gametype"] = "thirdp_" + game["dialog"]["gametype"]; + } + else if(getdvarint("scr_diehard")) + { + game["dialog"]["gametype"] = "dh_" + game["dialog"]["gametype"]; + } + else if(getdvarint("scr_" + level.gametype + "_promode")) + { + game["dialog"]["gametype"] = game["dialog"]["gametype"] + "_pro"; + } + + game["dialog"]["offense_obj"] = "obj_destroy"; + game["dialog"]["defense_obj"] = "obj_defend"; + level thread onplayerconnect(); +} + +//Function Number: 2 +func_35AC(param_00,param_01) +{ + thread maps\mp\gametypes\_gamelogic::endgame(param_00,param_01); +} + +//Function Number: 3 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_01 = var_00 maps\mp\gametypes\_hud_util::createprimaryprogressbar(); + var_02 = var_00 maps\mp\gametypes\_hud_util::createprimaryprogressbartext(); + var_02 settext(&"MP_CAPTURING_NUKE"); + var_01.usetime = 100; + var_00.usebar = var_01; + var_00.usebar maps\mp\gametypes\_hud_util::hideelem(); + var_00.usebartext = var_02; + var_00.usebartext maps\mp\gametypes\_hud_util::hideelem(); + } +} + +//Function Number: 4 +onstartgametype() +{ + if(!isdefined(game["switchedsides"])) + { + game["switchedsides"] = 0; + } + + if(!isdefined(game["original_defenders"])) + { + game["original_defenders"] = game["defenders"]; + } + + if(game["switchedsides"]) + { + var_00 = game["attackers"]; + var_01 = game["defenders"]; + game["attackers"] = var_01; + game["defenders"] = var_00; + } + + setclientnamemode("auto_change"); + if(level.splitscreen) + { + maps\mp\_utility::func_3306(game["attackers"],&"OBJECTIVES_GTNW"); + maps\mp\_utility::func_3306(game["defenders"],&"OBJECTIVES_GTNW"); + } + else + { + maps\mp\_utility::func_3306(game["attackers"],&"OBJECTIVES_GTNW_SCORE"); + maps\mp\_utility::func_3306(game["defenders"],&"OBJECTIVES_GTNW_SCORE"); + } + + maps\mp\_utility::func_3305(game["attackers"],&"OBJECTIVES_GTNW"); + maps\mp\_utility::func_3305(game["defenders"],&"OBJECTIVES_GTNW"); + maps\mp\_utility::setobjectivehinttext(game["attackers"],&"OBJECTIVES_GTNW_HINT"); + maps\mp\_utility::setobjectivehinttext(game["defenders"],&"OBJECTIVES_GTNW_HINT"); + level.spawnmins = (0,0,0); + level.spawnmaxs = (0,0,0); + maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_ctf_spawn_allies_start"); + maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_ctf_spawn_axis_start"); + maps\mp\gametypes\_spawnlogic::func_2FD0("allies","mp_ctf_spawn_allies"); + maps\mp\gametypes\_spawnlogic::func_2FD0("axis","mp_ctf_spawn_axis"); + level.mapcenter = maps\mp\gametypes\_spawnlogic::func_2FCD(level.spawnmins,level.spawnmaxs); + setmapcenter(level.mapcenter); + maps\mp\gametypes\_rank::registerscoreinfo("kill",50); + maps\mp\gametypes\_rank::registerscoreinfo("headshot",100); + maps\mp\gametypes\_rank::registerscoreinfo("assist",20); + maps\mp\gametypes\_rank::registerscoreinfo("capture",500); + var_02[0] = "airdrop_pallet"; + maps\mp\gametypes\_gameobjects::main(var_41); + thread setupnukesite(); +} + +//Function Number: 5 +onprecachegametype() +{ + precacheshader("waypoint_defend"); + precacheshader("waypoint_target"); + precacheshader("waypoint_capture"); + precacheshader("compass_waypoint_target"); + precacheshader("compass_waypoint_defend"); + precacheshader("compass_waypoint_capture"); + precachestring(&"MP_CAPTURING_NUKE"); +} + +//Function Number: 6 +setupnukesite() +{ + level.laststatus["allies"] = 0; + level.laststatus["axis"] = 0; + var_00 = getent("gtnw_zone","targetname"); + var_01 = []; + var_02 = maps\mp\gametypes\_gameobjects::func_29E7("neutral",var_00,var_01,(0,0,100)); + var_02 maps\mp\gametypes\_gameobjects::set2dicon("friendly","compass_waypoint_defend"); + var_02 maps\mp\gametypes\_gameobjects::func_2A25("friendly","waypoint_defend"); + var_02 maps\mp\gametypes\_gameobjects::set2dicon("enemy","compass_waypoint_captureneutral"); + var_02 maps\mp\gametypes\_gameobjects::func_2A25("enemy","waypoint_captureneutral"); + var_02 maps\mp\gametypes\_gameobjects::allowuse("enemy"); + var_02.nousebar = 1; + var_02 maps\mp\gametypes\_gameobjects::setvisibleteam("any"); + var_02.onbeginuse = ::onbeginuse; + var_02.onenduse = ::onenduse; + level.nukesite = var_02; + var_02 thread scorecounter(); +} + +//Function Number: 7 +getspawnpoint() +{ + if(self.team == "axis") + { + var_00 = game["attackers"]; + } + else + { + var_00 = game["defenders"]; + } + + if(level.ingraceperiod) + { + var_01 = getentarray("mp_ctf_spawn_" + var_00 + "_start","classname"); + var_02 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random(var_01); + } + else + { + var_01 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints(var_02); + var_02 = maps\mp\gametypes\_spawnlogic::func_2FE6(var_02); + } + + return var_02; +} + +//Function Number: 8 +func_3084(param_00,param_01,param_02,param_03,param_04) +{ + wait param_04; + var_05 = spawnfx(param_00,param_01,param_02,param_03); + triggerfx(var_05); +} + +//Function Number: 9 +ondeadevent(param_00) +{ + if((isdefined(level.nukeincoming) && level.nukeincoming) || isdefined(level.nukedetonated) && level.nukedetonated) + { + return; + } + + if(param_00 == game["attackers"]) + { + maps\mp\gametypes\_gamescore::giveteamscoreforobjective(param_00,1); + level thread func_35AC(game["defenders"],game["strings"][game["attackers"] + "_eliminated"]); + return; + } + + if(param_00 == game["defenders"]) + { + maps\mp\gametypes\_gamescore::giveteamscoreforobjective(param_00,1); + level thread func_35AC(game["attackers"],game["strings"][game["defenders"] + "_eliminated"]); + } +} + +//Function Number: 10 +initgametypeawards() +{ +} + +//Function Number: 11 +ontimelimit() +{ + if(game["teamScores"]["allies"] == game["teamScores"]["axis"]) + { + level thread func_34AE(); + return; + } + + if(game["teamScores"]["axis"] > game["teamScores"]["allies"]) + { + thread maps\mp\gametypes\_gamelogic::endgame("axis",game["strings"]["time_limit_reached"]); + return; + } + + if(game["teamScores"]["axis"] < game["teamScores"]["allies"]) + { + thread maps\mp\gametypes\_gamelogic::endgame("allies",game["strings"]["time_limit_reached"]); + return; + } +} + +//Function Number: 12 +func_34AE(param_00) +{ + level endon("game_ended"); + level.inovertime = 1; + level thread disablespawning(5); + level.endgametime = 120; + param_00 = level.endgametime; + foreach(var_02 in level.players) + { + var_02 thread maps\mp\gametypes\_hud_message::func_2892("gtnw_overtime"); + } + + maps\mp\gametypes\_gamelogic::pausetimer(); + level.timelimitoverride = 1; + setgameendtime(int(gettime() + level.endgametime * 1000)); + maps\mp\gametypes\_hostmigration::waitlongdurationwithgameendtimeupdate(param_00); + if(game["teamScores"]["axis"] > game["teamScores"]["allies"]) + { + thread maps\mp\gametypes\_gamelogic::endgame("axis",game["strings"]["time_limit_reached"]); + return; + } + + if(game["teamScores"]["axis"] < game["teamScores"]["allies"]) + { + thread maps\mp\gametypes\_gamelogic::endgame("allies",game["strings"]["time_limit_reached"]); + return; + } + + thread maps\mp\gametypes\_gamelogic::endgame("tie",game["strings"]["time_limit_reached"]); +} + +//Function Number: 13 +disablespawning(param_00) +{ + level endon("game_ended"); + wait 5; + level.disablespawning = 1; +} + +//Function Number: 14 +onbeginuse(param_00) +{ + param_00.usebar maps\mp\gametypes\_hud_util::func_26BD(); + param_00.usebartext maps\mp\gametypes\_hud_util::func_26BD(); +} + +//Function Number: 15 +onenduse(param_00,param_01,param_02) +{ + param_01.usebar maps\mp\gametypes\_hud_util::hideelem(); + param_01.usebartext maps\mp\gametypes\_hud_util::hideelem(); +} + +//Function Number: 16 +scorecounter() +{ + level endon("game_ended"); + self endon("stop_counting"); + for(;;) + { + if(!self.touchlist["axis"].size && !self.touchlist["allies"].size) + { + setdvar("ui_danger_team","none"); + maps\mp\gametypes\_gameobjects::set2dicon("enemy","compass_waypoint_captureneutral"); + maps\mp\gametypes\_gameobjects::func_2A25("enemy","waypoint_captureneutral"); + maps\mp\gametypes\_gameobjects::setownerteam("none"); + func_35B5(); + wait 1; + continue; + } + + maps\mp\gametypes\_gameobjects::set2dicon("friendly","compass_waypoint_defend"); + maps\mp\gametypes\_gameobjects::func_2A25("friendly","waypoint_defend"); + maps\mp\gametypes\_gameobjects::set2dicon("enemy","compass_waypoint_capture"); + maps\mp\gametypes\_gameobjects::func_2A25("enemy","waypoint_capture"); + if(self.touchlist["axis"].size > self.touchlist["allies"].size) + { + if(maps\mp\gametypes\_gamescore::func_26EE("axis") < 100) + { + maps\mp\gametypes\_gamescore::giveteamscoreforobjective("axis",1); + } + + thread func_35B4("axis"); + setdvar("ui_danger_team","allies"); + maps\mp\gametypes\_gameobjects::setownerteam("axis"); + if(maps\mp\gametypes\_gamescore::func_26EE("axis") >= 100) + { + maps\mp\gametypes\_gameobjects::allowuse("none"); + func_35B3("axis"); + self notify("stop_counting"); + } + } + else if(self.touchlist["axis"].size < self.touchlist["allies"].size) + { + if(maps\mp\gametypes\_gamescore::func_26EE("allies") < 100) + { + maps\mp\gametypes\_gamescore::giveteamscoreforobjective("allies",1); + } + + thread func_35B4("allies"); + setdvar("ui_danger_team","axis"); + maps\mp\gametypes\_gameobjects::setownerteam("allies"); + if(maps\mp\gametypes\_gamescore::func_26EE("allies") >= 100) + { + maps\mp\gametypes\_gameobjects::allowuse("none"); + func_35B3("allies"); + self notify("stop_counting"); + } + } + else + { + maps\mp\gametypes\_gameobjects::set2dicon("enemy","compass_waypoint_captureneutral"); + maps\mp\gametypes\_gameobjects::func_2A25("enemy","waypoint_captureneutral"); + maps\mp\gametypes\_gameobjects::setownerteam("none"); + setdvar("ui_danger_team","contested"); + } + + func_35B5(); + wait 1; + } +} + +//Function Number: 17 +func_35B3(param_00) +{ + func_346E(self.touchlist[param_00]); + maps\mp\gametypes\_gameobjects::setvisibleteam("none"); + maps\mp\gametypes\_gameobjects::allowuse("none"); + var_01 = 99999999; + var_02 = undefined; + foreach(var_04 in level.players) + { + if(!isdefined(var_04)) + { + continue; + } + + var_04.usebar maps\mp\gametypes\_hud_util::hideelem(); + var_04.usebartext maps\mp\gametypes\_hud_util::hideelem(); + if(var_04.team != param_00) + { + continue; + } + + if(!isdefined(self.touchlist[param_00][var_04.guid])) + { + continue; + } + + var_05 = self.touchlist[param_00][var_04.guid].starttime; + if(var_05 < var_01) + { + var_02 = var_04; + var_01 = var_05; + } + } + + var_02 maps\mp\killstreaks\_nuke::tryusenuke(1); +} + +//Function Number: 18 +func_346E(param_00) +{ + level endon("game_ended"); + wait 0.05; + maps\mp\_utility::waittillslowprocessallowed(); + var_01 = getarraykeys(param_00); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + var_03 = param_00[var_01[var_02]].player; + var_03 thread maps\mp\gametypes\_hud_message::func_2892("captured_nuke",maps\mp\gametypes\_rank::getscoreinfovalue("capture")); + var_03 thread [[ level.onxpevent ]]("capture"); + maps\mp\gametypes\_gamescore::func_26D3("capture",var_03); + } +} + +//Function Number: 19 +func_35B4(param_00) +{ + var_01 = getteamscore(param_00); + foreach(var_03 in level.players) + { + if(!isdefined(var_03)) + { + continue; + } + + if(var_03.team != param_00) + { + continue; + } + + if(!isdefined(self.touchlist[param_00][var_03.guid])) + { + continue; + } + + var_03.usebar maps\mp\gametypes\_hud_util::updatebar(var_01 / 100,0); + } +} + +//Function Number: 20 +func_35B5() +{ + foreach(var_01 in level.players) + { + if(!isdefined(var_01)) + { + continue; + } + + if(!isdefined(self.touchlist["axis"][var_01.guid]) && !isdefined(self.touchlist["allies"][var_01.guid])) + { + var_01.usebar maps\mp\gametypes\_hud_util::hideelem(); + var_01.usebartext maps\mp\gametypes\_hud_util::hideelem(); + } + + if(isdefined(self.touchlist["axis"][var_01.guid]) || isdefined(self.touchlist["allies"][var_01.guid])) + { + var_01.usebar maps\mp\gametypes\_hud_util::func_26BD(); + var_01.usebartext maps\mp\gametypes\_hud_util::func_26BD(); + } + } +} + +//Function Number: 21 +onnormaldeath(param_00,param_01,param_02) +{ + if(!isdefined(level.inovertime) || !level.inovertime) + { + return; + } + + var_03 = param_00.team; + if(game["state"] == "postgame") + { + param_01.finalkill = 1; + } +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/gametypes/gun.gsc b/MW3/Xbox/MP/maps/mp/gametypes/gun.gsc new file mode 100644 index 0000000..9b28a4e --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/gametypes/gun.gsc @@ -0,0 +1,876 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\gun.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 24 + * Decompile Time: 340 ms + * Timestamp: 10/27/2023 2:26:13 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + maps\mp\gametypes\_globallogic::init(); + maps\mp\gametypes\_callbacksetup::setupcallbacks(); + maps\mp\gametypes\_globallogic::setupcallbacks(); + setguns(); + if(isusingmatchrulesdata()) + { + level.initializematchrules = ::initializematchrules; + [[ level.initializematchrules ]](); + level thread maps\mp\_utility::func_810A(); + } + else + { + maps\mp\_utility::func_3315(level.gametype,10); + setdynamicdvar("scr_gun_scorelimit",level.gun_guns.size); + maps\mp\_utility::registerscorelimitdvar(level.gametype,level.gun_guns.size); + level thread func_810F(); + maps\mp\_utility::func_3312(level.gametype,1); + maps\mp\_utility::registerwinlimitdvar(level.gametype,0); + maps\mp\_utility::func_3317(level.gametype,0); + maps\mp\_utility::registerhalftimedvar(level.gametype,0); + level.matchrules_randomize = 0; + level.matchrules_damagemultiplier = 0; + level.matchrules_vampirism = 0; + } + + setspecialloadout(); + level.teambased = 0; + level.doprematch = 1; + level.killstreakrewards = 0; + level.onprecachegametype = ::onprecachegametype; + level.onstartgametype = ::onstartgametype; + level.onspawnplayer = ::onspawnplayer; + level.getspawnpoint = ::getspawnpoint; + level.onplayerkilled = ::onplayerkilled; + level.ontimelimit = ::ontimelimit; + if(level.matchrules_damagemultiplier || level.matchrules_vampirism) + { + level.modifyplayerdamage = ::maps\mp\gametypes\_damage::func_2D57; + } +} + +//Function Number: 2 +initializematchrules() +{ + maps\mp\_utility::func_334C(1); + level.matchrules_randomize = getmatchrulesdata("gunData","randomize"); + setdynamicdvar("scr_gun_scorelimit",level.gun_guns.size); + maps\mp\_utility::registerscorelimitdvar(level.gametype,level.gun_guns.size); + setdynamicdvar("scr_gun_winlimit",1); + maps\mp\_utility::registerwinlimitdvar("gun",1); + setdynamicdvar("scr_gun_roundlimit",1); + maps\mp\_utility::func_3312("gun",1); + setdynamicdvar("scr_gun_halftime",0); + maps\mp\_utility::registerhalftimedvar("gun",0); + setdynamicdvar("scr_gun_playerrespawndelay",0); + setdynamicdvar("scr_gun_waverespawndelay",0); + setdynamicdvar("scr_player_forcerespawn",1); + setdynamicdvar("scr_gun_promode",0); +} + +//Function Number: 3 +func_810F() +{ + setdynamicdvar("scr_gun_scorelimit",level.gun_guns.size); + maps\mp\_utility::registerscorelimitdvar(level.gametype,level.gun_guns.size); +} + +//Function Number: 4 +onprecachegametype() +{ + precachestring(&"MP_GUN"); +} + +//Function Number: 5 +onstartgametype() +{ + setclientnamemode("auto_change"); + maps\mp\_utility::func_3305("allies",&"OBJECTIVES_DM"); + maps\mp\_utility::func_3305("axis",&"OBJECTIVES_DM"); + if(level.splitscreen) + { + maps\mp\_utility::func_3306("allies",&"OBJECTIVES_DM"); + maps\mp\_utility::func_3306("axis",&"OBJECTIVES_DM"); + } + else + { + maps\mp\_utility::func_3306("allies",&"OBJECTIVES_DM_SCORE"); + maps\mp\_utility::func_3306("axis",&"OBJECTIVES_DM_SCORE"); + } + + maps\mp\_utility::setobjectivehinttext("allies",&"OBJECTIVES_DM_HINT"); + maps\mp\_utility::setobjectivehinttext("axis",&"OBJECTIVES_DM_HINT"); + level.spawnmins = (0,0,0); + level.spawnmaxs = (0,0,0); + maps\mp\gametypes\_spawnlogic::func_2FD0("allies","mp_dm_spawn"); + maps\mp\gametypes\_spawnlogic::func_2FD0("axis","mp_dm_spawn"); + level.mapcenter = maps\mp\gametypes\_spawnlogic::func_2FCD(level.spawnmins,level.spawnmaxs); + setmapcenter(level.mapcenter); + maps\mp\gametypes\_rank::registerscoreinfo("kill",0); + maps\mp\gametypes\_rank::registerscoreinfo("assist",0); + maps\mp\gametypes\_rank::registerscoreinfo("suicide",0); + maps\mp\gametypes\_rank::registerscoreinfo("teamkill",0); + maps\mp\gametypes\_rank::registerscoreinfo("headshot",0); + maps\mp\gametypes\_rank::registerscoreinfo("execution",0); + maps\mp\gametypes\_rank::registerscoreinfo("avenger",0); + maps\mp\gametypes\_rank::registerscoreinfo("defender",0); + maps\mp\gametypes\_rank::registerscoreinfo("posthumous",0); + maps\mp\gametypes\_rank::registerscoreinfo("revenge",0); + maps\mp\gametypes\_rank::registerscoreinfo("double",0); + maps\mp\gametypes\_rank::registerscoreinfo("triple",0); + maps\mp\gametypes\_rank::registerscoreinfo("multi",0); + maps\mp\gametypes\_rank::registerscoreinfo("buzzkill",0); + maps\mp\gametypes\_rank::registerscoreinfo("firstblood",0); + maps\mp\gametypes\_rank::registerscoreinfo("comeback",0); + maps\mp\gametypes\_rank::registerscoreinfo("longshot",0); + maps\mp\gametypes\_rank::registerscoreinfo("assistedsuicide",0); + maps\mp\gametypes\_rank::registerscoreinfo("knifethrow",0); + maps\mp\gametypes\_rank::registerscoreinfo("gained_gun_score",1); + maps\mp\gametypes\_rank::registerscoreinfo("dropped_gun_score",-1); + maps\mp\gametypes\_rank::registerscoreinfo("gained_gun_rank",100); + maps\mp\gametypes\_rank::registerscoreinfo("dropped_enemy_gun_rank",100); + var_00 = []; + maps\mp\gametypes\_gameobjects::main(var_00); + if(maps\mp\_utility::matchmakinggame()) + { + maps\mp\gametypes\_equipment::createkilltriggers(); + } + + level.quickmessagetoall = 1; + level.blockweapondrops = 1; + level thread onplayerconnect(); + level.killstreakrewards = 0; +} + +//Function Number: 6 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_00.gun_firstspawn = 1; + var_00.gungamegunindex = 0; + var_00.gungameprevgunindex = 0; + var_00 func_356D(); + if(level.matchrules_randomize) + { + var_00.gun_nextguns = level.gun_guns; + var_00.gun_prevguns = []; + } + + var_00 thread func_2E9E(); + var_00 thread func_356C(); + } +} + +//Function Number: 7 +getspawnpoint() +{ + if(self.gun_firstspawn) + { + self.gun_firstspawn = 0; + self.pers["class"] = "gamemode"; + self.pers["lastClass"] = ""; + self.class = self.pers["class"]; + self.lastclass = self.pers["lastClass"]; + if(common_scripts\utility::cointoss()) + { + maps\mp\gametypes\_menus::func_2AF3("axis",1); + } + else + { + maps\mp\gametypes\_menus::func_2AF3("allies",1); + } + } + + var_00 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints(self.pers["team"]); + var_01 = maps\mp\gametypes\_spawnlogic::func_2FEF(var_00); + return var_01; +} + +//Function Number: 8 +onspawnplayer() +{ + self.pers["gamemodeLoadout"] = level.gun_loadouts[self.pers["team"]]; + thread waitloadoutdone(); + level notify("spawned_player"); +} + +//Function Number: 9 +waitloadoutdone() +{ + level endon("game_ended"); + self endon("disconnect"); + self waittill("spawned_player"); + maps\mp\_utility::giveperk("specialty_bling",0); + func_3569(1); +} + +//Function Number: 10 +onplayerkilled(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09) +{ + if(param_03 == "MOD_FALLING" || isdefined(param_01) && isplayer(param_01)) + { + if(param_03 == "MOD_FALLING" || param_01 == self || param_03 == "MOD_MELEE" && param_04 != "riotshield_mp") + { + self playlocalsound("mp_war_objective_lost"); + self.gungameprevgunindex = self.gungamegunindex; + self.gungamegunindex = int(max(0,self.gungamegunindex - 1)); + if(self.gungameprevgunindex > self.gungamegunindex) + { + maps\mp\gametypes\_gamescore::func_26D3("dropped_gun_score",self,undefined,1,1); + } + + if(param_03 == "MOD_MELEE") + { + if(self.gungameprevgunindex) + { + param_01 thread maps\mp\gametypes\_rank::xpeventpopup(&"SPLASHES_DROPPED_ENEMY_GUN_RANK"); + param_01 thread maps\mp\gametypes\_rank::func_2AB3("dropped_enemy_gun_rank"); + return; + } + + return; + } + + return; + } + + if(param_03 == "MOD_PISTOL_BULLET" || param_03 == "MOD_RIFLE_BULLET" || param_03 == "MOD_HEAD_SHOT" || param_03 == "MOD_PROJECTILE" || param_03 == "MOD_PROJECTILE_SPLASH" || param_03 == "MOD_IMPACT" || param_03 == "MOD_GRENADE" || param_03 == "MOD_GRENADE_SPLASH" || param_03 == "MOD_MELEE" && param_04 == "riotshield_mp") + { + if(param_04 != param_01.primaryweapon) + { + return; + } + + param_01.gungameprevgunindex = param_01.gungamegunindex; + param_01.gungamegunindex++; + param_01 thread maps\mp\gametypes\_rank::func_2AB3("gained_gun_rank"); + maps\mp\gametypes\_gamescore::func_26D3("gained_gun_score",param_01,self,1,1); + if(param_01.gungamegunindex == level.gun_guns.size - 1) + { + maps\mp\_utility::func_2D68("mp_enemy_obj_captured"); + level thread maps\mp\_utility::teamplayercardsplash("callout_top_gun_rank",param_01); + } + + if(param_01.gungamegunindex < level.gun_guns.size) + { + param_01 playlocalsound("mp_war_objective_taken"); + param_01 func_3569(); + return; + } + + return; + } + } +} + +//Function Number: 11 +func_3569(param_00) +{ + var_01 = func_8113(); + self.gun_curgun = var_01; + var_01 = func_8114(var_01); + self takeallweapons(); + maps\mp\_utility::_giveweapon(var_01); + if(isdefined(param_00)) + { + self setspawnweapon(var_01); + } + + var_02 = strtok(var_01,"_"); + if(var_02[0] == "iw5") + { + var_03 = var_02[0] + "_" + var_02[1]; + } + else if(var_03[0] == "alt") + { + var_03 = var_03[1] + "_" + var_03[2]; + } + else + { + var_03 = var_03[0]; + } + + self.pers["primaryWeapon"] = var_03; + self.primaryweapon = var_01; + self givestartammo(var_01); + self switchtoweapon(var_01); + if(self.gungameprevgunindex > self.gungamegunindex) + { + thread maps\mp\gametypes\_rank::xpeventpopup(&"SPLASHES_DROPPED_GUN_RANK"); + } + else if(self.gungameprevgunindex < self.gungamegunindex) + { + thread maps\mp\gametypes\_rank::xpeventpopup(&"SPLASHES_GAINED_GUN_RANK"); + } + + self.gungameprevgunindex = self.gungamegunindex; + showweaponname(var_03); + updategunhud(); +} + +//Function Number: 12 +func_8113() +{ + if(level.matchrules_randomize) + { + if(self.gungameprevgunindex < self.gungamegunindex) + { + var_00 = randomint(self.gun_nextguns.size); + var_01 = self.gun_nextguns[var_00]; + self.gun_prevguns[self.gun_prevguns.size] = self.gun_nextguns[var_00]; + self.gun_nextguns[var_00] = undefined; + self.gun_nextguns = common_scripts\utility::array_removeundefined(self.gun_nextguns); + } + else if(self.gungameprevgunindex > self.gungamegunindex) + { + if(self.gun_prevguns.size > 1) + { + for(var_02 = 0;var_02 < self.gun_prevguns.size;var_02++) + { + if(self.gun_prevguns[var_02] == self.gun_curgun) + { + break; + } + } + + self.gun_nextguns[self.gun_nextguns.size] = self.gun_prevguns[var_02]; + self.gun_prevguns[var_02] = undefined; + self.gun_prevguns = common_scripts\utility::array_removeundefined(self.gun_prevguns); + } + + var_00 = randomint(self.gun_prevguns.size); + var_01 = self.gun_prevguns[var_00]; + } + else if(self.gun_prevguns.size) + { + var_00 = randomint(self.gun_prevguns.size); + var_01 = self.gun_prevguns[var_00]; + } + else + { + var_00 = randomint(self.gun_nextguns.size); + var_01 = self.gun_nextguns[var_00]; + self.gun_prevguns[self.gun_prevguns.size] = self.gun_nextguns[var_00]; + self.gun_nextguns[var_00] = undefined; + self.gun_nextguns = common_scripts\utility::array_removeundefined(self.gun_nextguns); + } + } + else + { + var_01 = level.gun_guns[self.gungamegunindex]; + } + + return var_01; +} + +//Function Number: 13 +func_8114(param_00) +{ + if(isdefined(level.gun_attachments[param_00]) && isdefined(level.gun_attachments[param_00]["attach1"])) + { + var_01 = level.gun_attachments[param_00]["attach1"]; + } + else + { + var_01 = "none"; + } + + if(isdefined(level.gun_attachments[param_00]) && isdefined(level.gun_attachments[param_00]["attach2"])) + { + var_02 = level.gun_attachments[param_00]["attach2"]; + } + else + { + var_02 = "none"; + } + + var_03 = maps\mp\gametypes\_class::func_32BC(param_00,var_01,var_02,0,0); + return var_03; +} + +//Function Number: 14 +ontimelimit() +{ + level.finalkillcam_winner = "none"; + var_00 = func_7FB4(); + if(!isdefined(var_00) || !var_00.size) + { + thread maps\mp\gametypes\_gamelogic::endgame("tie",game["strings"]["time_limit_reached"]); + return; + } + + if(var_00.size == 1) + { + thread maps\mp\gametypes\_gamelogic::endgame(var_00[0],game["strings"]["time_limit_reached"]); + return; + } + + if(var_00[var_00.size - 1].gungamegunindex > var_00[var_00.size - 2].gungamegunindex) + { + thread maps\mp\gametypes\_gamelogic::endgame(var_00[var_00.size - 1],game["strings"]["time_limit_reached"]); + return; + } + + thread maps\mp\gametypes\_gamelogic::endgame("tie",game["strings"]["time_limit_reached"]); +} + +//Function Number: 15 +func_7FB4() +{ + var_00 = -1; + var_01 = []; + foreach(var_03 in level.players) + { + if(isdefined(var_03.gungamegunindex) && var_03.gungamegunindex >= var_00) + { + var_00 = var_03.gungamegunindex; + var_01[var_01.size] = var_03; + } + } + + return var_01; +} + +//Function Number: 16 +func_2E9E() +{ + level endon("game_ended"); + self endon("disconnect"); + for(;;) + { + self waittill("reload"); + self givestartammo(self.primaryweapon); + } +} + +//Function Number: 17 +func_356C() +{ + level endon("game_ended"); + self endon("disconnect"); + for(;;) + { + if(maps\mp\_utility::isreallyalive(self) && self.team != "spectator" && isdefined(self.primaryweapon) && self getammocount(self.primaryweapon) == 0) + { + wait 2; + self notify("reload"); + wait 1; + continue; + } + + wait 0.05; + } +} + +//Function Number: 18 +func_356D() +{ + if(level.splitscreen) + { + self.gun_progressdisplay[0] = maps\mp\gametypes\_hud_util::createfontstring("small",1.2); + self.gun_progressdisplay[0] maps\mp\gametypes\_hud_util::setpoint("TOP LEFT","TOP LEFT",80,0); + self.gun_progressdisplay[0] settext(&"MP_WEAPON"); + self.gun_progressdisplay[0].alpha = 1; + self.gun_progressdisplay[0].archived = 0; + self.gun_progressdisplay[0].hidewheninmenu = 1; + self.gun_progressdisplay[1] = maps\mp\gametypes\_hud_util::createfontstring("small",1.2); + self.gun_progressdisplay[1] maps\mp\gametypes\_hud_util::setpoint("TOP LEFT","TOP LEFT",80,12); + self.gun_progressdisplay[1] settext("1 / " + level.gun_guns.size); + self.gun_progressdisplay[1].alpha = 1; + self.gun_progressdisplay[1].archived = 0; + self.gun_progressdisplay[1].hidewheninmenu = 1; + } + else + { + self.gun_progressdisplay[0] = maps\mp\gametypes\_hud_util::createfontstring("small",1.2); + self.gun_progressdisplay[0] maps\mp\gametypes\_hud_util::setpoint("TOP LEFT","TOP LEFT",115,5); + self.gun_progressdisplay[0] settext(&"MP_WEAPON"); + self.gun_progressdisplay[0].alpha = 1; + self.gun_progressdisplay[0].archived = 0; + self.gun_progressdisplay[0].hidewheninmenu = 1; + self.gun_progressdisplay[1] = maps\mp\gametypes\_hud_util::createfontstring("small",1.2); + self.gun_progressdisplay[1] maps\mp\gametypes\_hud_util::setpoint("TOP LEFT","TOP LEFT",115,17); + self.gun_progressdisplay[1] settext("1 / " + level.gun_guns.size); + self.gun_progressdisplay[1].alpha = 1; + self.gun_progressdisplay[1].archived = 0; + self.gun_progressdisplay[1].hidewheninmenu = 1; + } + + thread func_3571(); + thread hideinkillcam(); +} + +//Function Number: 19 +updategunhud() +{ + self.gun_progressdisplay[1] settext(self.gungamegunindex + 1 + " / " + level.gun_guns.size); +} + +//Function Number: 20 +hideinkillcam() +{ + self endon("disconnect"); + var_00 = 1; + for(;;) + { + if(var_00 && !isalive(self) || maps\mp\_utility::func_2AF1()) + { + self.gun_progressdisplay[0].alpha = 0; + self.gun_progressdisplay[1].alpha = 0; + var_00 = 0; + } + else if(!var_00 && isalive(self) && !maps\mp\_utility::func_2AF1()) + { + self.gun_progressdisplay[0].alpha = 1; + self.gun_progressdisplay[1].alpha = 1; + var_00 = 1; + } + + wait 0.05; + } +} + +//Function Number: 21 +func_3571() +{ + self endon("disconnect"); + level waittill("game_ended"); + self.gun_progressdisplay[0].alpha = 0; + self.gun_progressdisplay[1].alpha = 0; +} + +//Function Number: 22 +showweaponname(param_00) +{ + self endon("disconnect"); + maps\mp\_utility::func_274B("prematch_done"); + var_01 = tablelookup("mp/statstable.csv",4,param_00,3); + switch(var_01) + { + case "WEAPON_RIOTSHIELD": + self iprintlnbold(&"WEAPON_RIOTSHIELD"); + break; + + case "WEAPON_MAGNUM": + self iprintlnbold(&"WEAPON_MAGNUM"); + break; + + case "WEAPON_USP": + self iprintlnbold(&"WEAPON_USP"); + break; + + case "WEAPON_DESERTEAGLE": + self iprintlnbold(&"WEAPON_DESERTEAGLE"); + break; + + case "WEAPON_MP412": + self iprintlnbold(&"WEAPON_MP412"); + break; + + case "WEAPON_P99": + self iprintlnbold(&"WEAPON_P99"); + break; + + case "WEAPON_FNFIVESEVEN": + self iprintlnbold(&"WEAPON_FNFIVESEVEN"); + break; + + case "WEAPON_FMG9": + self iprintlnbold(&"WEAPON_FMG9"); + break; + + case "WEAPON_SKORPION": + self iprintlnbold(&"WEAPON_SKORPION"); + break; + + case "WEAPON_MP9": + self iprintlnbold(&"WEAPON_MP9"); + break; + + case "WEAPON_GLOCK": + self iprintlnbold(&"WEAPON_GLOCK"); + break; + + case "WEAPON_MP5K": + self iprintlnbold(&"WEAPON_MP5K"); + break; + + case "WEAPON_UZI": + self iprintlnbold(&"WEAPON_UZI"); + break; + + case "WEAPON_P90": + self iprintlnbold(&"WEAPON_P90"); + break; + + case "WEAPON_PP90M1": + self iprintlnbold(&"WEAPON_PP90M1"); + break; + + case "WEAPON_UMP45": + self iprintlnbold(&"WEAPON_UMP45"); + break; + + case "WEAPON_MP7": + self iprintlnbold(&"WEAPON_MP7"); + break; + + case "WEAPON_AK47": + self iprintlnbold(&"WEAPON_AK47"); + break; + + case "WEAPON_M16": + self iprintlnbold(&"WEAPON_M16"); + break; + + case "WEAPON_M4": + self iprintlnbold(&"WEAPON_M4"); + break; + + case "WEAPON_FAD": + self iprintlnbold(&"WEAPON_FAD"); + break; + + case "WEAPON_ACR": + self iprintlnbold(&"WEAPON_ACR"); + break; + + case "WEAPON_TYPE95": + self iprintlnbold(&"WEAPON_TYPE95"); + break; + + case "WEAPON_MK14": + self iprintlnbold(&"WEAPON_MK14"); + break; + + case "WEAPON_SCAR": + self iprintlnbold(&"WEAPON_SCAR"); + break; + + case "WEAPON_G36": + self iprintlnbold(&"WEAPON_G36"); + break; + + case "WEAPON_CM901": + self iprintlnbold(&"WEAPON_CM901"); + break; + + case "WEAPON_GRENADE_LAUNCHER": + self iprintlnbold(&"WEAPON_GRENADE_LAUNCHER"); + break; + + case "WEAPON_M320": + self iprintlnbold(&"WEAPON_M320"); + break; + + case "WEAPON_RPG": + self iprintlnbold(&"WEAPON_RPG"); + break; + + case "WEAPON_SMAW": + self iprintlnbold(&"WEAPON_SMAW"); + break; + + case "WEAPON_STINGER": + self iprintlnbold(&"WEAPON_STINGER"); + break; + + case "WEAPON_JAVELIN": + self iprintlnbold(&"WEAPON_JAVELIN"); + break; + + case "WEAPON_XM25": + self iprintlnbold(&"WEAPON_XM25"); + break; + + case "WEAPON_DRAGUNOV": + self iprintlnbold(&"WEAPON_DRAGUNOV"); + break; + + case "WEAPON_MSR": + self iprintlnbold(&"WEAPON_MSR"); + break; + + case "WEAPON_BARRETT": + self iprintlnbold(&"WEAPON_BARRETT"); + break; + + case "WEAPON_RSASS": + self iprintlnbold(&"WEAPON_RSASS"); + break; + + case "WEAPON_AS50": + self iprintlnbold(&"WEAPON_AS50"); + break; + + case "WEAPON_L96A1": + self iprintlnbold(&"WEAPON_L96A1"); + break; + + case "WEAPON_KSG": + self iprintlnbold(&"WEAPON_KSG"); + break; + + case "WEAPON_MODEL1887": + self iprintlnbold(&"WEAPON_MODEL1887"); + break; + + case "WEAPON_STRIKER": + self iprintlnbold(&"WEAPON_STRIKER"); + break; + + case "WEAPON_AA12": + self iprintlnbold(&"WEAPON_AA12"); + break; + + case "WEAPON_USAS12": + self iprintlnbold(&"WEAPON_USAS12"); + break; + + case "WEAPON_SPAS12": + self iprintlnbold(&"WEAPON_SPAS12"); + break; + + case "WEAPON_M60": + self iprintlnbold(&"WEAPON_M60"); + break; + + case "WEAPON_MK46": + self iprintlnbold(&"WEAPON_MK46"); + break; + + case "WEAPON_PECHENEG": + self iprintlnbold(&"WEAPON_PECHENEG"); + break; + + case "WEAPON_SA80": + self iprintlnbold(&"WEAPON_SA80"); + break; + + case "WEAPON_MG36": + self iprintlnbold(&"WEAPON_MG36"); + break; + + default: + break; + } +} + +//Function Number: 23 +setguns() +{ + level.gun_guns = []; + var_00 = 0; + if(isusingmatchrulesdata()) + { + var_00 = getmatchrulesdata("gunData","numGuns"); + } + + if(var_00 > 20) + { + var_00 = 20; + } + + if(var_00) + { + for(var_01 = 0;var_01 < var_00;var_01++) + { + level.gun_guns[var_01] = getmatchrulesdata("gunData","guns",var_01); + if(level.gun_guns[var_01] == "none") + { + level.gun_guns[var_01] = "iw5_mp5"; + } + } + } + else + { + level.gun_guns[0] = "iw5_deserteagle"; + level.gun_guns[1] = "iw5_g18"; + level.gun_guns[2] = "iw5_mp9"; + level.gun_guns[3] = "iw5_mp5"; + level.gun_guns[4] = "iw5_p90"; + level.gun_guns[5] = "iw5_mp7"; + level.gun_guns[6] = "iw5_ak47"; + level.gun_guns[7] = "iw5_scar"; + level.gun_guns[8] = "iw5_pecheneg"; + level.gun_guns[9] = "iw5_mg36"; + level.gun_guns[10] = "iw5_spas12"; + level.gun_guns[11] = "iw5_1887"; + level.gun_guns[12] = "iw5_type95"; + level.gun_guns[13] = "iw5_mk14"; + level.gun_guns[14] = "iw5_barrett"; + level.gun_guns[15] = "iw5_msr"; + level.gun_guns[16] = "xm25"; + level.gun_guns[17] = "javelin"; + } + + level.gun_attachments = []; + level.gun_attachments["iw5_44magnum"]["attach1"] = "tactical"; + level.gun_attachments["iw5_deserteagle"]["attach1"] = "tactical"; + level.gun_attachments["iw5_mp412"]["attach1"] = "tactical"; + level.gun_attachments["iw5_fmg9"]["attach1"] = "reflex"; + level.gun_attachments["iw5_skorpion"]["attach1"] = "reflex"; + level.gun_attachments["iw5_mp9"]["attach1"] = "reflex"; + level.gun_attachments["iw5_g18"]["attach1"] = "reflex"; + level.gun_attachments["iw5_mp5"]["attach1"] = "reflex"; + level.gun_attachments["iw5_m9"]["attach1"] = "reflex"; + level.gun_attachments["iw5_p90"]["attach1"] = "reflex"; + level.gun_attachments["iw5_pp90m1"]["attach1"] = "reflex"; + level.gun_attachments["iw5_ump45"]["attach1"] = "reflex"; + level.gun_attachments["iw5_mp7"]["attach1"] = "reflex"; + level.gun_attachments["iw5_ak47"]["attach1"] = "reflex"; + level.gun_attachments["iw5_m16"]["attach1"] = "reflex"; + level.gun_attachments["iw5_m4"]["attach1"] = "reflex"; + level.gun_attachments["iw5_fad"]["attach1"] = "reflex"; + level.gun_attachments["iw5_acr"]["attach1"] = "reflex"; + level.gun_attachments["iw5_type95"]["attach1"] = "reflex"; + level.gun_attachments["iw5_mk14"]["attach1"] = "reflex"; + level.gun_attachments["iw5_scar"]["attach1"] = "reflex"; + level.gun_attachments["iw5_g36c"]["attach1"] = "reflex"; + level.gun_attachments["iw5_cm901"]["attach1"] = "reflex"; + level.gun_attachments["iw5_ksg"]["attach1"] = "grip"; + level.gun_attachments["iw5_striker"]["attach1"] = "grip"; + level.gun_attachments["iw5_aa12"]["attach1"] = "grip"; + level.gun_attachments["iw5_usas12"]["attach1"] = "grip"; + level.gun_attachments["iw5_spas12"]["attach1"] = "grip"; + level.gun_attachments["iw5_m60"]["attach1"] = "grip"; + level.gun_attachments["iw5_m60"]["attach2"] = "reflex"; + level.gun_attachments["iw5_mk46"]["attach1"] = "grip"; + level.gun_attachments["iw5_mk46"]["attach2"] = "reflex"; + level.gun_attachments["iw5_pecheneg"]["attach1"] = "grip"; + level.gun_attachments["iw5_pecheneg"]["attach2"] = "reflex"; + level.gun_attachments["iw5_sa80"]["attach1"] = "grip"; + level.gun_attachments["iw5_sa80"]["attach2"] = "reflex"; + level.gun_attachments["iw5_mg36"]["attach1"] = "grip"; + level.gun_attachments["iw5_mg36"]["attach2"] = "reflex"; +} + +//Function Number: 24 +setspecialloadout() +{ + level.gun_loadouts["axis"]["loadoutPrimary"] = "iw5_acr"; + level.gun_loadouts["axis"]["loadoutPrimaryAttachment"] = "none"; + level.gun_loadouts["axis"]["loadoutPrimaryAttachment2"] = "none"; + level.gun_loadouts["axis"]["loadoutPrimaryBuff"] = "specialty_null"; + level.gun_loadouts["axis"]["loadoutPrimaryCamo"] = "none"; + level.gun_loadouts["axis"]["loadoutPrimaryReticle"] = "none"; + level.gun_loadouts["axis"]["loadoutSecondary"] = "none"; + level.gun_loadouts["axis"]["loadoutSecondaryAttachment"] = "none"; + level.gun_loadouts["axis"]["loadoutSecondaryAttachment2"] = "none"; + level.gun_loadouts["axis"]["loadoutSecondaryBuff"] = "specialty_null"; + level.gun_loadouts["axis"]["loadoutSecondaryCamo"] = "none"; + level.gun_loadouts["axis"]["loadoutSecondaryReticle"] = "none"; + level.gun_loadouts["axis"]["loadoutEquipment"] = "specialty_null"; + level.gun_loadouts["axis"]["loadoutOffhand"] = "none"; + level.gun_loadouts["axis"]["loadoutPerk1"] = "specialty_null"; + level.gun_loadouts["axis"]["loadoutPerk2"] = "specialty_null"; + level.gun_loadouts["axis"]["loadoutPerk3"] = "specialty_null"; + level.gun_loadouts["axis"]["loadoutDeathstreak"] = "specialty_null"; + level.gun_loadouts["axis"]["loadoutJuggernaut"] = 0; + level.gun_loadouts["allies"] = level.gun_loadouts["axis"]; +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/gametypes/infect.gsc b/MW3/Xbox/MP/maps/mp/gametypes/infect.gsc new file mode 100644 index 0000000..3d50da7 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/gametypes/infect.gsc @@ -0,0 +1,919 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\infect.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 25 + * Decompile Time: 386 ms + * Timestamp: 10/27/2023 2:26:14 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + maps\mp\gametypes\_globallogic::init(); + maps\mp\gametypes\_callbacksetup::setupcallbacks(); + maps\mp\gametypes\_globallogic::setupcallbacks(); + if(isusingmatchrulesdata()) + { + level.initializematchrules = ::initializematchrules; + [[ level.initializematchrules ]](); + level thread maps\mp\_utility::func_810A(); + } + else + { + maps\mp\_utility::func_3315(level.gametype,10); + maps\mp\_utility::setoverridewatchdvar("scorelimit",0); + maps\mp\_utility::func_3312(level.gametype,1); + maps\mp\_utility::registerwinlimitdvar(level.gametype,1); + maps\mp\_utility::func_3317(level.gametype,0); + maps\mp\_utility::registerhalftimedvar(level.gametype,0); + level.matchrules_numinitialinfected = 1; + level.matchrules_damagemultiplier = 0; + level.matchrules_vampirism = 0; + } + + func_34B3(); + level.teambased = 1; + level.doprematch = 1; + level.onprecachegametype = ::onprecachegametype; + level.onstartgametype = ::onstartgametype; + level.onspawnplayer = ::onspawnplayer; + level.getspawnpoint = ::getspawnpoint; + level.onplayerkilled = ::onplayerkilled; + level.ondeadevent = ::ondeadevent; + level.ontimelimit = ::ontimelimit; + level.infect_perks = []; + level.infect_perks[level.infect_perks.size] = "specialty_longersprint"; + level.infect_perks[level.infect_perks.size] = "specialty_fastreload"; + level.infect_perks[level.infect_perks.size] = "specialty_scavenger"; + level.infect_perks[level.infect_perks.size] = "specialty_blindeye"; + level.infect_perks[level.infect_perks.size] = "specialty_paint"; + level.infect_perks[level.infect_perks.size] = "specialty_hardline"; + level.infect_perks[level.infect_perks.size] = "specialty_coldblooded"; + level.infect_perks[level.infect_perks.size] = "specialty_quickdraw"; + level.infect_perks[level.infect_perks.size] = "_specialty_blastshield"; + level.infect_perks[level.infect_perks.size] = "specialty_detectexplosive"; + level.infect_perks[level.infect_perks.size] = "specialty_autospot"; + level.infect_perks[level.infect_perks.size] = "specialty_bulletaccuracy"; + level.infect_perks[level.infect_perks.size] = "specialty_quieter"; + level.infect_perks[level.infect_perks.size] = "specialty_stalker"; + if(level.matchrules_damagemultiplier || level.matchrules_vampirism) + { + level.modifyplayerdamage = ::maps\mp\gametypes\_damage::func_2D57; + } +} + +//Function Number: 2 +initializematchrules() +{ + maps\mp\_utility::func_334C(); + level.matchrules_numinitialinfected = getmatchrulesdata("infectData","numInitialInfected"); + setdynamicdvar("scr_" + level.gametype + "_numLives",0); + maps\mp\_utility::func_3317(level.gametype,0); + maps\mp\_utility::setoverridewatchdvar("scorelimit",0); + setdynamicdvar("scr_infect_roundswitch",0); + maps\mp\_utility::func_330E("infect",0,0,9); + setdynamicdvar("scr_infect_roundlimit",1); + maps\mp\_utility::func_3312("infect",1); + setdynamicdvar("scr_infect_winlimit",1); + maps\mp\_utility::registerwinlimitdvar("infect",1); + setdynamicdvar("scr_infect_halftime",0); + maps\mp\_utility::registerhalftimedvar("infect",0); + setdynamicdvar("scr_infect_playerrespawndelay",0); + setdynamicdvar("scr_infect_waverespawndelay",0); + setdynamicdvar("scr_player_forcerespawn",1); + setdynamicdvar("scr_team_fftype",0); + setdynamicdvar("scr_infect_promode",0); +} + +//Function Number: 3 +onprecachegametype() +{ + precachestring(&"MP_CONSCRIPTION_STARTS_IN"); +} + +//Function Number: 4 +onstartgametype() +{ + setclientnamemode("auto_change"); + maps\mp\_utility::func_3305("allies",&"OBJECTIVES_INFECT"); + maps\mp\_utility::func_3305("axis",&"OBJECTIVES_INFECT"); + if(level.splitscreen) + { + maps\mp\_utility::func_3306("allies",&"OBJECTIVES_INFECT"); + maps\mp\_utility::func_3306("axis",&"OBJECTIVES_INFECT"); + } + else + { + maps\mp\_utility::func_3306("allies",&"OBJECTIVES_INFECT_SCORE"); + maps\mp\_utility::func_3306("axis",&"OBJECTIVES_INFECT_SCORE"); + } + + maps\mp\_utility::setobjectivehinttext("allies",&"OBJECTIVES_INFECT_HINT"); + maps\mp\_utility::setobjectivehinttext("axis",&"OBJECTIVES_INFECT_HINT"); + level.spawnmins = (0,0,0); + level.spawnmaxs = (0,0,0); + maps\mp\gametypes\_spawnlogic::func_2FD0("allies","mp_tdm_spawn"); + maps\mp\gametypes\_spawnlogic::func_2FD0("axis","mp_tdm_spawn"); + level.mapcenter = maps\mp\gametypes\_spawnlogic::func_2FCD(level.spawnmins,level.spawnmaxs); + setmapcenter(level.mapcenter); + var_00 = []; + maps\mp\gametypes\_gameobjects::main(var_00); + if(maps\mp\_utility::matchmakinggame()) + { + maps\mp\gametypes\_equipment::createkilltriggers(); + } + + maps\mp\gametypes\_rank::registerscoreinfo("firstblood",0); + maps\mp\gametypes\_rank::registerscoreinfo("first_draft",350); + maps\mp\gametypes\_rank::registerscoreinfo("final_rogue",200); + maps\mp\gametypes\_rank::registerscoreinfo("kill",50); + maps\mp\gametypes\_rank::registerscoreinfo("draft_rogue",200); + maps\mp\gametypes\_rank::registerscoreinfo("survivor",50); + level.quickmessagetoall = 1; + level.blockweapondrops = 1; + level.infect_allowsuicide = 0; + level.infect_timerdisplay = maps\mp\gametypes\_hud_util::createservertimer("objective",1.4); + level.infect_timerdisplay maps\mp\gametypes\_hud_util::setpoint("TOPLEFT","TOPLEFT",115,5); + level.infect_timerdisplay.label = &"MP_DRAFT_STARTS_IN"; + level.infect_timerdisplay.alpha = 0; + level.infect_timerdisplay.archived = 0; + level.infect_timerdisplay.hidewheninmenu = 1; + level.infect_chosefirstinfected = 0; + level.infect_choosingfirstinfected = 0; + level.infect_awardedfinalsurvivor = 0; + level.infect_teamscores["axis"] = 0; + level.infect_teamscores["allies"] = 0; + level.infect_players = []; + level thread onplayerconnect(); + level thread watchinfectforfeit(); +} + +//Function Number: 5 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_00.infect_firstspawn = 1; + if(maps\mp\_utility::gameflag("prematch_done")) + { + var_00.infect_joinedatstart = 0; + } + else + { + var_00.infect_joinedatstart = 1; + } + + if(isdefined(level.infect_players[var_00.name])) + { + var_00.infect_rejoined = 1; + } + } +} + +//Function Number: 6 +getspawnpoint() +{ + if(self.infect_firstspawn) + { + self.infect_firstspawn = 0; + self.pers["class"] = "gamemode"; + self.pers["lastClass"] = ""; + self.class = self.pers["class"]; + self.lastclass = self.pers["lastClass"]; + if(isdefined(self.infect_rejoined)) + { + maps\mp\gametypes\_menus::func_2AF3("axis",1); + } + else + { + maps\mp\gametypes\_menus::func_2AF3("allies",1); + } + + thread func_29A7(); + } + + if(level.ingraceperiod) + { + var_00 = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_tdm_spawn"); + var_01 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random(var_00); + } + else + { + var_00 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints(self.pers["team"]); + var_01 = maps\mp\gametypes\_spawnlogic::func_2FE6(var_01); + } + + return var_01; +} + +//Function Number: 7 +onspawnplayer() +{ + self.teamchangedthisframe = undefined; + self.infect_spawnpos = self.origin; + func_3555(); + if(!level.infect_choosingfirstinfected) + { + level.infect_choosingfirstinfected = 1; + level thread choosefirstinfected(); + } + + if(isdefined(self.infect_rejoined)) + { + self.infect_rejoined = undefined; + if(!level.infect_allowsuicide) + { + level notify("infect_stopCountdown"); + level.infect_chosefirstinfected = 1; + level.infect_allowsuicide = 1; + foreach(var_01 in level.players) + { + if(isdefined(var_01.infect_isbeingchosen)) + { + var_01.infect_isbeingchosen = undefined; + } + } + } + + foreach(var_01 in level.players) + { + if(isdefined(var_01.isinitialinfected)) + { + var_01 thread setinitialtonormalinfected(); + } + } + + if(level.infect_teamscores["axis"] == 1) + { + self.isinitialinfected = 1; + } + } + + if(isdefined(self.isinitialinfected)) + { + self.pers["gamemodeLoadout"] = level.infect_loadouts["axis_initial"]; + } + else + { + self.pers["gamemodeLoadout"] = level.infect_loadouts[self.pers["team"]]; + } + + thread onspawnfinished(); + level notify("spawned_player"); +} + +//Function Number: 8 +onspawnfinished() +{ + self endon("death"); + self endon("disconnect"); + self waittill("spawned_player"); + if(self.pers["team"] == "axis") + { + thread setinfectedmsg(); + } + + wait 0.05; + if(self.pers["team"] == "axis") + { + maps\mp\killstreaks\_killstreaks::func_2DD6(); + } + + if(maps\mp\_utility::matchmakinggame()) + { + foreach(var_01 in level.infect_perks) + { + if(maps\mp\_utility::func_27AF(var_01)) + { + var_02 = tablelookup("mp/perktable.csv",1,var_01,8); + if(!maps\mp\_utility::func_27AF(var_02)) + { + maps\mp\_utility::giveperk(var_02,0); + } + } + } + + if(self.pers["team"] == "allies") + { + if(!maps\mp\_utility::func_27AF("specialty_scavenger")) + { + maps\mp\_utility::giveperk("specialty_scavenger",0); + var_02 = tablelookup("mp/perktable.csv",1,"specialty_scavenger",8); + if(!maps\mp\_utility::func_27AF(var_02)) + { + maps\mp\_utility::giveperk(var_02,0); + return; + } + + return; + } + + return; + } + + if(self.pers["team"] == "axis") + { + if(isdefined(self.isinitialinfected) && !maps\mp\_utility::func_27AF("specialty_longersprint")) + { + maps\mp\_utility::giveperk("specialty_longersprint",0); + var_02 = tablelookup("mp/perktable.csv",1,"specialty_longersprint",8); + if(!maps\mp\_utility::func_27AF(var_02)) + { + maps\mp\_utility::giveperk(var_02,0); + } + } + + if(!maps\mp\_utility::func_27AF("specialty_falldamage")) + { + maps\mp\_utility::giveperk("specialty_falldamage",0); + } + + if(maps\mp\_utility::func_27AF("specialty_longersprint")) + { + maps\mp\_utility::giveperk("specialty_lightweight",0); + self setmovespeedscale(1.2); + return; + } + + return; + } + } +} + +//Function Number: 9 +setinfectedmsg() +{ + if(isdefined(self.isinitialinfected)) + { + thread maps\mp\gametypes\_rank::xpeventpopup(&"SPLASHES_FIRST_MERCENARY",(1,0,0),0.3); + return; + } + + if(isdefined(self.changingtoregularinfected)) + { + self.changingtoregularinfected = undefined; + if(isdefined(self.changingtoregularinfectedbykill)) + { + self.changingtoregularinfectedbykill = undefined; + thread maps\mp\gametypes\_rank::xpeventpopup(&"SPLASHES_FIRSTBLOOD"); + maps\mp\gametypes\_gamescore::func_26D3("first_draft",self); + thread maps\mp\gametypes\_rank::func_2AB3("first_draft"); + return; + } + + return; + } + + thread maps\mp\gametypes\_rank::xpeventpopup(&"SPLASHES_DRAFTED",(1,0,0),0.3); +} + +//Function Number: 10 +choosefirstinfected() +{ + level endon("game_ended"); + level endon("infect_stopCountdown"); + level.infect_allowsuicide = 0; + maps\mp\_utility::func_274B("prematch_done"); + level.infect_timerdisplay.label = &"MP_DRAFT_STARTS_IN"; + level.infect_timerdisplay settimer(8); + level.infect_timerdisplay.alpha = 1; + maps\mp\gametypes\_hostmigration::func_2740(8); + level.infect_timerdisplay.alpha = 0; + level.players[randomint(level.players.size)] setfirstinfected(1); +} + +//Function Number: 11 +setfirstinfected(param_00) +{ + self endon("disconnect"); + if(param_00) + { + self.infect_isbeingchosen = 1; + } + + while(!maps\mp\_utility::isreallyalive(self) || maps\mp\_utility::isusingremote()) + { + wait 0.05; + } + + if(isdefined(self.iscarrying) && self.iscarrying == 1) + { + self notify("force_cancel_placement"); + wait 0.05; + } + + while(self ismantling()) + { + wait 0.05; + } + + while(!self isonground() && !self isonladder()) + { + wait 0.05; + } + + if(maps\mp\_utility::isjuggernaut()) + { + self notify("lost_juggernaut"); + wait 0.05; + } + + if(param_00) + { + maps\mp\gametypes\_menus::func_2AF3("axis"); + level.infect_chosefirstinfected = 1; + self.infect_isbeingchosen = undefined; + func_3555(); + level.infect_allowsuicide = 1; + } + + self.isinitialinfected = 1; + self.pers["gamemodeLoadout"] = level.infect_loadouts["axis_initial"]; + if(isdefined(self.setspawnpoint)) + { + maps\mp\perks\_perkfunctions::func_2A63(self.setspawnpoint); + } + + var_01 = spawn("script_model",self.origin); + var_01.angles = self.angles; + var_01.playerspawnpos = self.origin; + var_01.notti = 1; + self.setspawnpoint = var_01; + self notify("faux_spawn"); + self.faux_spawn_stance = self getstance(); + thread maps\mp\gametypes\_playerlogic::func_2B25(1); + if(param_00) + { + level.infect_players[self.name] = 1; + } + + thread maps\mp\_utility::teamplayercardsplash("callout_first_mercenary",self); + maps\mp\_utility::func_2D68("mp_enemy_obj_captured"); +} + +//Function Number: 12 +setinitialtonormalinfected(param_00) +{ + level endon("game_ended"); + self.isinitialinfected = undefined; + self.changingtoregularinfected = 1; + if(isdefined(param_00)) + { + self.changingtoregularinfectedbykill = 1; + } + + while(!maps\mp\_utility::isreallyalive(self)) + { + wait 0.05; + } + + if(isdefined(self.iscarrying) && self.iscarrying == 1) + { + self notify("force_cancel_placement"); + wait 0.05; + } + + while(self ismantling()) + { + wait 0.05; + } + + while(!self isonground()) + { + wait 0.05; + } + + if(maps\mp\_utility::isjuggernaut()) + { + self notify("lost_juggernaut"); + wait 0.05; + } + + while(!maps\mp\_utility::isreallyalive(self)) + { + wait 0.05; + } + + self.pers["gamemodeLoadout"] = level.infect_loadouts["axis"]; + if(isdefined(self.setspawnpoint)) + { + maps\mp\perks\_perkfunctions::func_2A63(self.setspawnpoint); + } + + var_01 = spawn("script_model",self.origin); + var_01.angles = self.angles; + var_01.playerspawnpos = self.origin; + var_01.notti = 1; + self.setspawnpoint = var_01; + self notify("faux_spawn"); + self.faux_spawn_stance = self getstance(); + thread maps\mp\gametypes\_playerlogic::func_2B25(1); +} + +//Function Number: 13 +onplayerkilled(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 = 0; + if(self.team == "allies" && isdefined(param_01)) + { + if(isplayer(param_01) && param_01 != self) + { + var_0A = 1; + } + else if(level.infect_allowsuicide && param_01 == self || !isplayer(param_01)) + { + var_0A = 1; + var_0B = 1; + } + } + + if(var_0A) + { + self.teamchangedthisframe = 1; + maps\mp\gametypes\_menus::func_2AF3("axis"); + func_3555(); + level.infect_players[self.name] = 1; + if(var_0B) + { + if(level.infect_teamscores["axis"] > 1) + { + foreach(var_0D in level.players) + { + if(isdefined(var_0D.isinitialinfected)) + { + var_0D thread setinitialtonormalinfected(); + } + } + } + } + else if(isdefined(param_01.isinitialinfected)) + { + param_01 thread setinitialtonormalinfected(1); + } + else + { + param_01 thread maps\mp\gametypes\_rank::xpeventpopup(&"SPLASHES_DRAFTED"); + maps\mp\gametypes\_gamescore::func_26D3("draft_rogue",param_01,self,1); + param_01 thread maps\mp\gametypes\_rank::func_2AB3("draft_rogue"); + } + + if(level.infect_teamscores["allies"] > 1) + { + maps\mp\_utility::func_2D68("mp_enemy_obj_captured","allies"); + maps\mp\_utility::func_2D68("mp_war_objective_taken","axis"); + thread maps\mp\_utility::teamplayercardsplash("callout_got_drafted",self,"allies"); + if(!var_0B) + { + thread maps\mp\_utility::teamplayercardsplash("callout_drafted_rogue",param_01,"axis"); + foreach(var_0D in level.players) + { + if(var_0D.team == "allies" && var_0D != self && distance(var_0D.infect_spawnpos,var_0D.origin) > 32) + { + var_0D thread maps\mp\gametypes\_rank::xpeventpopup(&"SPLASHES_SURVIVOR"); + maps\mp\gametypes\_gamescore::func_26D3("survivor",var_0D,undefined,1); + var_0D thread maps\mp\gametypes\_rank::func_2AB3("survivor"); + } + } + + return; + } + + return; + } + + if(level.infect_teamscores["allies"] == 1) + { + onfinalsurvivor(); + return; + } + + if(level.infect_teamscores["allies"] == 0) + { + onsurvivorseliminated(); + return; + } + + return; + } +} + +//Function Number: 14 +onfinalsurvivor() +{ + maps\mp\_utility::func_2D68("mp_obj_captured"); + foreach(var_01 in level.players) + { + if(var_01.team == "allies") + { + var_01 thread maps\mp\gametypes\_rank::xpeventpopup(&"SPLASHES_FINAL_ROGUE"); + if(!level.infect_awardedfinalsurvivor) + { + if(var_01.infect_joinedatstart && distance(var_01.infect_spawnpos,var_01.origin) > 32) + { + maps\mp\gametypes\_gamescore::func_26D3("final_rogue",var_01,undefined,1); + var_01 thread maps\mp\gametypes\_rank::func_2AB3("final_rogue"); + } + + level.infect_awardedfinalsurvivor = 1; + } + + thread maps\mp\_utility::teamplayercardsplash("callout_final_rogue",var_01); + if(maps\mp\_utility::matchmakinggame() && !var_01 maps\mp\_utility::isjuggernaut()) + { + level thread finalsurvivoruav(var_01); + } + + break; + } + } +} + +//Function Number: 15 +finalsurvivoruav(param_00) +{ + level endon("game_ended"); + param_00 endon("disconnect"); + param_00 endon("eliminated"); + level endon("infect_lateJoiner"); + level thread enduavonlatejoiner(param_00); + var_01 = 0; + level.radarmode["axis"] = "normal_radar"; + foreach(var_03 in level.players) + { + if(var_03.team == "axis") + { + var_03.radarmode = "normal_radar"; + } + } + + setteamradarstrength("axis",1); + for(;;) + { + var_05 = param_00.origin; + wait 4; + if(var_01) + { + setteamradar("axis",0); + var_01 = 0; + } + + wait 6; + if(distance(var_05,param_00.origin) < 200) + { + setteamradar("axis",1); + var_01 = 1; + foreach(var_03 in level.players) + { + var_03 playlocalsound("recondrone_tag"); + } + } + } +} + +//Function Number: 16 +enduavonlatejoiner(param_00) +{ + level endon("game_ended"); + param_00 endon("disconnect"); + param_00 endon("eliminated"); + for(;;) + { + if(level.infect_teamscores["allies"] > 1) + { + level notify("infect_lateJoiner"); + wait 0.05; + setteamradar("axis",0); + break; + } + + wait 0.05; + } +} + +//Function Number: 17 +func_29A7() +{ + level endon("game_ended"); + self endon("eliminated"); + self waittill("disconnect"); + func_3555(); + if(isdefined(self.infect_isbeingchosen) || level.infect_chosefirstinfected) + { + if(level.infect_teamscores["axis"] && level.infect_teamscores["allies"]) + { + if(self.team == "allies" && level.infect_teamscores["allies"] == 1) + { + onfinalsurvivor(); + } + else if(self.team == "axis" && level.infect_teamscores["axis"] == 1) + { + foreach(var_01 in level.players) + { + if(var_01 != self && var_01.team == "axis") + { + var_01 setfirstinfected(0); + } + } + } + } + else if(level.infect_teamscores["allies"] == 0) + { + onsurvivorseliminated(); + } + else if(level.infect_teamscores["axis"] == 0) + { + if(level.infect_teamscores["allies"] == 1) + { + level.finalkillcam_winner = "allies"; + level thread maps\mp\gametypes\_gamelogic::endgame("allies",game["strings"]["axis_eliminated"]); + } + else if(level.infect_teamscores["allies"] > 1) + { + level.infect_chosefirstinfected = 0; + level thread choosefirstinfected(); + } + } + } + + self.isinitialinfected = undefined; +} + +//Function Number: 18 +watchinfectforfeit() +{ + level endon("game_ended"); + level.forfeitinprogress = 1; + for(;;) + { + if(!isdefined(level.forfeitinprogress)) + { + level.forfeitinprogress = 1; + } + + wait 0.05; + } +} + +//Function Number: 19 +ondeadevent(param_00) +{ +} + +//Function Number: 20 +ontimelimit() +{ + level.finalkillcam_winner = "allies"; + level thread maps\mp\gametypes\_gamelogic::endgame("allies",game["strings"]["time_limit_reached"]); +} + +//Function Number: 21 +onsurvivorseliminated() +{ + level.finalkillcam_winner = "axis"; + level thread maps\mp\gametypes\_gamelogic::endgame("axis",game["strings"]["allies_eliminated"]); +} + +//Function Number: 22 +getnumaxis() +{ + var_00 = 0; + foreach(var_02 in level.players) + { + if(isdefined(var_02.team) && var_02.team == "axis") + { + var_00++; + } + } + + return var_00; +} + +//Function Number: 23 +getnumallies() +{ + var_00 = 0; + foreach(var_02 in level.players) + { + if(isdefined(var_02.team) && var_02.team == "allies") + { + var_00++; + } + } + + return var_00; +} + +//Function Number: 24 +func_3555() +{ + level.infect_teamscores["axis"] = getnumaxis(); + level.infect_teamscores["allies"] = getnumallies(); + game["teamScores"]["axis"] = level.infect_teamscores["axis"]; + setteamscore("axis",level.infect_teamscores["axis"]); + game["teamScores"]["allies"] = level.infect_teamscores["allies"]; + setteamscore("allies",level.infect_teamscores["allies"]); +} + +//Function Number: 25 +func_34B3() +{ + if(isusingmatchrulesdata() && getmatchrulesdata("defaultClasses","axis",0,"class","inUse")) + { + level.infect_loadouts["axis"] = maps\mp\_utility::func_334E("axis",0); + level.infect_loadouts["axis"]["loadoutStreakType"] = "assault"; + level.infect_loadouts["axis"]["loadoutKillstreak1"] = "none"; + level.infect_loadouts["axis"]["loadoutKillstreak2"] = "none"; + level.infect_loadouts["axis"]["loadoutKillstreak3"] = "none"; + } + else + { + level.infect_loadouts["axis"]["loadoutPrimary"] = "iw5_fmg9"; + level.infect_loadouts["axis"]["loadoutPrimaryAttachment"] = "reflex"; + level.infect_loadouts["axis"]["loadoutPrimaryAttachment2"] = "none"; + level.infect_loadouts["axis"]["loadoutPrimaryBuff"] = "specialty_null"; + level.infect_loadouts["axis"]["loadoutPrimaryCamo"] = "none"; + level.infect_loadouts["axis"]["loadoutPrimaryReticle"] = "none"; + level.infect_loadouts["axis"]["loadoutSecondary"] = "none"; + level.infect_loadouts["axis"]["loadoutSecondaryAttachment"] = "none"; + level.infect_loadouts["axis"]["loadoutSecondaryAttachment2"] = "none"; + level.infect_loadouts["axis"]["loadoutSecondaryBuff"] = "specialty_null"; + level.infect_loadouts["axis"]["loadoutSecondaryCamo"] = "none"; + level.infect_loadouts["axis"]["loadoutSecondaryReticle"] = "none"; + level.infect_loadouts["axis"]["loadoutEquipment"] = "throwingknife_mp"; + level.infect_loadouts["axis"]["loadoutOffhand"] = "none"; + level.infect_loadouts["axis"]["loadoutPerk1"] = "specialty_longersprint"; + level.infect_loadouts["axis"]["loadoutPerk2"] = "specialty_quickdraw"; + level.infect_loadouts["axis"]["loadoutPerk3"] = "specialty_quieter"; + level.infect_loadouts["axis"]["loadoutStreakType"] = "assault"; + level.infect_loadouts["axis"]["loadoutKillstreak1"] = "none"; + level.infect_loadouts["axis"]["loadoutKillstreak2"] = "none"; + level.infect_loadouts["axis"]["loadoutKillstreak3"] = "none"; + level.infect_loadouts["axis"]["loadoutDeathstreak"] = "specialty_grenadepulldeath"; + level.infect_loadouts["axis"]["loadoutJuggernaut"] = 0; + } + + if(isusingmatchrulesdata() && getmatchrulesdata("defaultClasses","axis",5,"class","inUse")) + { + level.infect_loadouts["axis_initial"] = maps\mp\_utility::func_334E("axis",5); + level.infect_loadouts["axis_initial"]["loadoutStreakType"] = "assault"; + level.infect_loadouts["axis_initial"]["loadoutKillstreak1"] = "none"; + level.infect_loadouts["axis_initial"]["loadoutKillstreak2"] = "none"; + level.infect_loadouts["axis_initial"]["loadoutKillstreak3"] = "none"; + } + else + { + level.infect_loadouts["axis_initial"]["loadoutPrimary"] = "iw5_scar"; + level.infect_loadouts["axis_initial"]["loadoutPrimaryAttachment"] = "reflex"; + level.infect_loadouts["axis_initial"]["loadoutPrimaryAttachment2"] = "xmags"; + level.infect_loadouts["axis_initial"]["loadoutPrimaryBuff"] = "specialty_bling"; + level.infect_loadouts["axis_initial"]["loadoutPrimaryCamo"] = "none"; + level.infect_loadouts["axis_initial"]["loadoutPrimaryReticle"] = "none"; + level.infect_loadouts["axis_initial"]["loadoutSecondary"] = "none"; + level.infect_loadouts["axis_initial"]["loadoutSecondaryAttachment"] = "none"; + level.infect_loadouts["axis_initial"]["loadoutSecondaryAttachment2"] = "none"; + level.infect_loadouts["axis_initial"]["loadoutSecondaryBuff"] = "specialty_null"; + level.infect_loadouts["axis_initial"]["loadoutSecondaryCamo"] = "none"; + level.infect_loadouts["axis_initial"]["loadoutSecondaryReticle"] = "none"; + level.infect_loadouts["axis_initial"]["loadoutEquipment"] = "specialty_null"; + level.infect_loadouts["axis_initial"]["loadoutOffhand"] = "none"; + level.infect_loadouts["axis_initial"]["loadoutPerk1"] = "specialty_longersprint"; + level.infect_loadouts["axis_initial"]["loadoutPerk2"] = "specialty_quickdraw"; + level.infect_loadouts["axis_initial"]["loadoutPerk3"] = "specialty_bulletaccuracy"; + level.infect_loadouts["axis_initial"]["loadoutStreakType"] = "assault"; + level.infect_loadouts["axis_initial"]["loadoutKillstreak1"] = "none"; + level.infect_loadouts["axis_initial"]["loadoutKillstreak2"] = "none"; + level.infect_loadouts["axis_initial"]["loadoutKillstreak3"] = "none"; + level.infect_loadouts["axis_initial"]["loadoutDeathstreak"] = "specialty_grenadepulldeath"; + level.infect_loadouts["axis_initial"]["loadoutJuggernaut"] = 0; + } + + if(isusingmatchrulesdata() && getmatchrulesdata("defaultClasses","allies",0,"class","inUse")) + { + level.infect_loadouts["allies"] = maps\mp\_utility::func_334E("allies",0); + return; + } + + level.infect_loadouts["allies"]["loadoutPrimary"] = "iw5_spas12"; + level.infect_loadouts["allies"]["loadoutPrimaryAttachment"] = "silencer03"; + level.infect_loadouts["allies"]["loadoutPrimaryAttachment2"] = "none"; + level.infect_loadouts["allies"]["loadoutPrimaryBuff"] = "specialty_longerrange"; + level.infect_loadouts["allies"]["loadoutPrimaryCamo"] = "none"; + level.infect_loadouts["allies"]["loadoutPrimaryReticle"] = "none"; + level.infect_loadouts["allies"]["loadoutSecondary"] = "none"; + level.infect_loadouts["allies"]["loadoutSecondaryAttachment"] = "none"; + level.infect_loadouts["allies"]["loadoutSecondaryAttachment2"] = "none"; + level.infect_loadouts["allies"]["loadoutSecondaryBuff"] = "specialty_null"; + level.infect_loadouts["allies"]["loadoutSecondaryCamo"] = "none"; + level.infect_loadouts["allies"]["loadoutSecondaryReticle"] = "none"; + level.infect_loadouts["allies"]["loadoutEquipment"] = "claymore_mp"; + level.infect_loadouts["allies"]["loadoutOffhand"] = "flash_grenade_mp"; + level.infect_loadouts["allies"]["loadoutPerk1"] = "specialty_scavenger"; + level.infect_loadouts["allies"]["loadoutPerk2"] = "specialty_quickdraw"; + level.infect_loadouts["allies"]["loadoutPerk3"] = "specialty_quieter"; + level.infect_loadouts["allies"]["loadoutDeathstreak"] = "specialty_null"; + level.infect_loadouts["allies"]["loadoutJuggernaut"] = 0; +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/gametypes/jugg.gsc b/MW3/Xbox/MP/maps/mp/gametypes/jugg.gsc new file mode 100644 index 0000000..374f159 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/gametypes/jugg.gsc @@ -0,0 +1,438 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\jugg.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 17 + * Decompile Time: 255 ms + * Timestamp: 10/27/2023 2:26:15 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + maps\mp\gametypes\_globallogic::init(); + maps\mp\gametypes\_callbacksetup::setupcallbacks(); + maps\mp\gametypes\_globallogic::setupcallbacks(); + if(isusingmatchrulesdata()) + { + level.initializematchrules = ::initializematchrules; + [[ level.initializematchrules ]](); + level thread maps\mp\_utility::func_810A(); + } + else + { + maps\mp\_utility::func_3315(level.gametype,10); + maps\mp\_utility::func_3312(level.gametype,1); + maps\mp\_utility::registerscorelimitdvar(level.gametype,10); + maps\mp\_utility::registerwinlimitdvar(level.gametype,1); + maps\mp\_utility::func_3317(level.gametype,0); + maps\mp\_utility::registerhalftimedvar(level.gametype,0); + level.matchrules_respawnnewjugg = 0; + level.matchrules_showjuggradaricon = 1; + level.matchrules_showjuggworldicon = 0; + level.matchrules_damagemultiplier = 0; + level.matchrules_vampirism = 0; + } + + func_34B3(); + level.teambased = 1; + level.doprematch = 1; + level.onprecachegametype = ::onprecachegametype; + level.onstartgametype = ::onstartgametype; + level.getspawnpoint = ::getspawnpoint; + level.onspawnplayer = ::onspawnplayer; + level.onplayerkilled = ::onplayerkilled; + level.ontimelimit = ::ontimelimit; + if(level.matchrules_damagemultiplier || level.matchrules_vampirism) + { + level.modifyplayerdamage = ::maps\mp\gametypes\_damage::func_2D57; + } +} + +//Function Number: 2 +initializematchrules() +{ + maps\mp\_utility::func_334C(); + level.matchrules_respawnnewjugg = getmatchrulesdata("juggData","respawnNewJugg"); + level.matchrules_showjuggradaricon = getmatchrulesdata("juggData","showJuggRadarIcon"); + level.matchrules_showjuggworldicon = getmatchrulesdata("juggData","showJuggWorldIcon"); + setdynamicdvar("scr_jugg_roundswitch",0); + maps\mp\_utility::func_330E("jugg",0,0,9); + setdynamicdvar("scr_jugg_roundlimit",1); + maps\mp\_utility::func_3312("jugg",1); + setdynamicdvar("scr_jugg_winlimit",1); + maps\mp\_utility::registerwinlimitdvar("jugg",1); + setdynamicdvar("scr_jugg_halftime",0); + maps\mp\_utility::registerhalftimedvar("jugg",0); + setdynamicdvar("scr_jugg_playerrespawndelay",0); + setdynamicdvar("scr_jugg_waverespawndelay",0); + setdynamicdvar("scr_player_forcerespawn",1); + setdynamicdvar("scr_team_fftype",0); + setdynamicdvar("scr_jugg_promode",0); +} + +//Function Number: 3 +onprecachegametype() +{ + precachestring(&"MP_JUGG_NEXT_JUGG_IN"); + precacheshader("waypoint_kill"); +} + +//Function Number: 4 +onstartgametype() +{ + setclientnamemode("auto_change"); + maps\mp\_utility::func_3305("allies",&"OBJECTIVES_JUGG"); + maps\mp\_utility::func_3305("axis",&"OBJECTIVES_JUGG"); + if(level.splitscreen) + { + maps\mp\_utility::func_3306("allies",&"OBJECTIVES_JUGG"); + maps\mp\_utility::func_3306("axis",&"OBJECTIVES_JUGG"); + } + else + { + maps\mp\_utility::func_3306("allies",&"OBJECTIVES_JUGG_SCORE"); + maps\mp\_utility::func_3306("axis",&"OBJECTIVES_JUGG_SCORE"); + } + + maps\mp\_utility::setobjectivehinttext("allies",&"OBJECTIVES_JUGG_HINT"); + maps\mp\_utility::setobjectivehinttext("axis",&"OBJECTIVES_JUGG_HINT"); + level.spawnmins = (0,0,0); + level.spawnmaxs = (0,0,0); + maps\mp\gametypes\_spawnlogic::func_2FD0("allies","mp_tdm_spawn"); + maps\mp\gametypes\_spawnlogic::func_2FD0("axis","mp_tdm_spawn"); + level.mapcenter = maps\mp\gametypes\_spawnlogic::func_2FCD(level.spawnmins,level.spawnmaxs); + setmapcenter(level.mapcenter); + maps\mp\gametypes\_rank::registerscoreinfo("got_juggernaut",250); + maps\mp\gametypes\_rank::registerscoreinfo("kill_as_juggernaut",50); + var_00 = []; + maps\mp\gametypes\_gameobjects::main(var_00); + level.quickmessagetoall = 1; + level.blockweapondrops = 1; + level.jugg_juggernaut = undefined; + level.jugg_choosingjugg = 0; + level thread onplayerconnect(); + level.jugg_timerdisplay = maps\mp\gametypes\_hud_util::createservertimer("objective",1.4); + level.jugg_timerdisplay maps\mp\gametypes\_hud_util::setpoint("TOPLEFT","TOPLEFT",115,5); + level.jugg_timerdisplay.label = &"MP_JUGG_NEXT_JUGG_IN"; + level.jugg_timerdisplay.alpha = 0; + level.jugg_timerdisplay.archived = 0; + level.jugg_timerdisplay.hidewheninmenu = 1; + thread func_34CC(level.jugg_timerdisplay); + level.killstreakrewards = 0; +} + +//Function Number: 5 +func_355D() +{ + level endon("game_ended"); + level notify("chooseInitialJugg"); + level endon("chooseInitialJugg"); + maps\mp\_utility::func_274B("prematch_done"); + level.jugg_timerdisplay.label = &"MP_JUGG_NEXT_JUGG_IN"; + level.jugg_timerdisplay settimer(8); + level.jugg_timerdisplay.alpha = 1; + maps\mp\gametypes\_hostmigration::func_2740(8); + level.jugg_timerdisplay.alpha = 0; + while(!level.players.size) + { + wait 1; + } + + func_3562(level.players[randomint(level.players.size)],undefined,1); +} + +//Function Number: 6 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_00.jugg_juggscore = 0; + var_00.jugg_firstspawn = 1; + var_00 thread func_29A7(); + } +} + +//Function Number: 7 +func_29A7() +{ + level endon("game_ended"); + self waittill("disconnect"); + func_3564(); +} + +//Function Number: 8 +onspawnplayer() +{ + if(!level.jugg_choosingjugg) + { + level.jugg_choosingjugg = 1; + level thread func_355D(); + } + + self.pers["gamemodeLoadout"] = level.jugg_loadouts[self.pers["team"]]; + level notify("spawned_player"); +} + +//Function Number: 9 +getspawnpoint() +{ + if(self.jugg_firstspawn) + { + self.jugg_firstspawn = 0; + self.pers["class"] = "gamemode"; + self.pers["lastClass"] = ""; + self.class = self.pers["class"]; + self.lastclass = self.pers["lastClass"]; + maps\mp\gametypes\_menus::func_2AF3("axis",1); + } + + if(level.ingraceperiod) + { + var_00 = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_tdm_spawn"); + var_01 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random(var_00); + } + else + { + var_00 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints(self.pers["team"]); + var_01 = maps\mp\gametypes\_spawnlogic::func_2FE6(var_01); + } + + return var_01; +} + +//Function Number: 10 +onplayerkilled(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09) +{ + if(isdefined(param_01) && isplayer(param_01) && param_01 != self) + { + if(isdefined(level.jugg_juggernaut) && level.jugg_juggernaut == self) + { + if(level.matchrules_showjuggworldicon) + { + self.jugg_headicon destroy(); + } + + func_3562(param_01,self); + return; + } + + if(isdefined(level.jugg_juggernaut) && level.jugg_juggernaut == param_01) + { + param_01.jugg_juggscore++; + param_01 maps\mp\gametypes\_gamescore::giveteamscoreforobjective(param_01.pers["team"],1); + param_01 thread maps\mp\gametypes\_rank::xpeventpopup(&"SPLASHES_JUGGERNAUT_KILL"); + maps\mp\gametypes\_gamescore::func_26D3("kill_as_juggernaut",param_01,self,1); + param_01 thread maps\mp\gametypes\_rank::func_2AB3("kill_as_juggernaut"); + return; + } + + return; + } + + if(isdefined(level.jugg_juggernaut) && level.jugg_juggernaut == self) + { + self.var_2AF3 = "axis"; + maps\mp\_utility::func_2D68("mp_enemy_obj_captured"); + level.jugg_juggernaut = undefined; + level thread func_355D(); + } +} + +//Function Number: 11 +func_3562(param_00,param_01,param_02) +{ + if(isdefined(param_01)) + { + param_01.var_2AF3 = "axis"; + } + + if(isdefined(level.jugg_juggernaut)) + { + maps\mp\_utility::func_2D68("mp_enemy_obj_captured"); + level.jugg_juggernaut = undefined; + } + else + { + maps\mp\_utility::func_2D68("mp_obj_captured"); + } + + param_00 endon("disconnect"); + param_00 thread func_822C(); + while(!isalive(param_00)) + { + wait 0.05; + } + + while(param_00 ismantling()) + { + wait 0.05; + } + + while(!param_00 isonground()) + { + wait 0.05; + } + + if(param_00 maps\mp\_utility::isjuggernaut()) + { + param_00 notify("lost_juggernaut"); + wait 0.05; + } + + param_00 maps\mp\gametypes\_menus::func_2AF3("allies"); + level.jugg_juggernaut = param_00; + func_3564(); + if(isdefined(param_02)) + { + param_00 thread func_3563(1); + return; + } + + param_00 thread func_3563(); +} + +//Function Number: 12 +func_3563(param_00) +{ + self.pers["gamemodeLoadout"] = level.jugg_loadouts[self.pers["team"]]; + if(level.matchrules_respawnnewjugg) + { + self notify("faux_spawn"); + self.faux_spawn_stance = self getstance(); + thread maps\mp\gametypes\_playerlogic::func_2B25(1); + } + else + { + if(isdefined(self.setspawnpoint)) + { + maps\mp\perks\_perkfunctions::func_2A63(self.setspawnpoint); + } + + var_01 = spawn("script_model",self.origin); + var_01.angles = self.angles; + var_01.playerspawnpos = self.origin; + var_01.notti = 1; + self.setspawnpoint = var_01; + self notify("faux_spawn"); + self.faux_spawn_stance = self getstance(); + thread maps\mp\gametypes\_playerlogic::func_2B25(1); + } + + if(level.matchrules_showjuggworldicon) + { + self.jugg_headicon = maps\mp\_entityheadicons::func_277C(level.otherteam[self.team],"waypoint_kill",(0,0,85),24,24,undefined,undefined,undefined,1,undefined,0); + } + + if(!isdefined(param_00)) + { + var_02 = maps\mp\gametypes\_rank::getscoreinfovalue("got_juggernaut"); + thread maps\mp\gametypes\_hud_message::func_2892("got_juggernaut",var_02); + maps\mp\gametypes\_gamescore::func_26D3("got_juggernaut",self,undefined,1); + thread maps\mp\gametypes\_rank::func_2AB3("got_juggernaut"); + } + + level thread maps\mp\_utility::teamplayercardsplash("callout_new_juggernaut",self,level.otherteam[self.team]); +} + +//Function Number: 13 +func_3564() +{ + if(isdefined(level.jugg_juggernaut)) + { + game["teamScores"]["allies"] = level.jugg_juggernaut.jugg_juggscore; + setteamscore("allies",level.jugg_juggernaut.jugg_juggscore); + } + else + { + game["teamScores"]["allies"] = 0; + setteamscore("allies",0); + } + + game["teamScores"]["axis"] = 0; + setteamscore("axis",0); +} + +//Function Number: 14 +func_822C() +{ + level endon("game_ended"); + self endon("death"); + self waittill("disconnect"); + level thread func_355D(); +} + +//Function Number: 15 +ontimelimit() +{ + level.finalkillcam_winner = "axis"; + level thread maps\mp\gametypes\_gamelogic::endgame("axis",game["strings"]["time_limit_reached"]); +} + +//Function Number: 16 +func_34CC(param_00) +{ + level waittill("game_ended"); + param_00.alpha = 0; +} + +//Function Number: 17 +func_34B3() +{ + if(isusingmatchrulesdata() && getmatchrulesdata("defaultClasses","axis",0,"class","inUse")) + { + level.jugg_loadouts["axis"] = maps\mp\_utility::func_334E("axis",0); + level.jugg_loadouts["axis"]["loadoutJuggernaut"] = 0; + } + else + { + level.jugg_loadouts["axis"]["loadoutPrimary"] = "iw5_usas12"; + level.jugg_loadouts["axis"]["loadoutPrimaryAttachment"] = "none"; + level.jugg_loadouts["axis"]["loadoutPrimaryAttachment2"] = "none"; + level.jugg_loadouts["axis"]["loadoutPrimaryBuff"] = "specialty_longerrange"; + level.jugg_loadouts["axis"]["loadoutPrimaryCamo"] = "none"; + level.jugg_loadouts["axis"]["loadoutPrimaryReticle"] = "none"; + level.jugg_loadouts["axis"]["loadoutSecondary"] = "iw5_44magnum"; + level.jugg_loadouts["axis"]["loadoutSecondaryAttachment"] = "none"; + level.jugg_loadouts["axis"]["loadoutSecondaryAttachment2"] = "none"; + level.jugg_loadouts["axis"]["loadoutSecondaryBuff"] = "specialty_null"; + level.jugg_loadouts["axis"]["loadoutSecondaryCamo"] = "none"; + level.jugg_loadouts["axis"]["loadoutSecondaryReticle"] = "none"; + level.jugg_loadouts["axis"]["loadoutEquipment"] = "claymore_mp"; + level.jugg_loadouts["axis"]["loadoutOffhand"] = "flash_grenade_mp"; + level.jugg_loadouts["axis"]["loadoutPerk1"] = "specialty_longersprint"; + level.jugg_loadouts["axis"]["loadoutPerk2"] = "specialty_quickdraw"; + level.jugg_loadouts["axis"]["loadoutPerk3"] = "specialty_bulletaccuracy"; + level.jugg_loadouts["axis"]["loadoutDeathstreak"] = "specialty_grenadepulldeath"; + level.jugg_loadouts["axis"]["loadoutJuggernaut"] = 0; + } + + if(isusingmatchrulesdata() && getmatchrulesdata("defaultClasses","allies",5,"class","inUse")) + { + level.jugg_loadouts["allies"] = maps\mp\_utility::func_334E("allies",5); + level.jugg_loadouts["allies"]["loadoutJuggernaut"] = 1; + return; + } + + level.jugg_loadouts["allies"]["loadoutPrimary"] = "iw5_scar"; + level.jugg_loadouts["allies"]["loadoutPrimaryAttachment"] = "none"; + level.jugg_loadouts["allies"]["loadoutPrimaryAttachment2"] = "none"; + level.jugg_loadouts["allies"]["loadoutPrimaryBuff"] = "specialty_bulletpenetration"; + level.jugg_loadouts["allies"]["loadoutPrimaryCamo"] = "none"; + level.jugg_loadouts["allies"]["loadoutPrimaryReticle"] = "none"; + level.jugg_loadouts["allies"]["loadoutSecondary"] = "rpg"; + level.jugg_loadouts["allies"]["loadoutSecondaryAttachment"] = "none"; + level.jugg_loadouts["allies"]["loadoutSecondaryAttachment2"] = "none"; + level.jugg_loadouts["allies"]["loadoutSecondaryBuff"] = "specialty_null"; + level.jugg_loadouts["allies"]["loadoutSecondaryCamo"] = "none"; + level.jugg_loadouts["allies"]["loadoutSecondaryReticle"] = "none"; + level.jugg_loadouts["allies"]["loadoutEquipment"] = "frag_grenade_mp"; + level.jugg_loadouts["allies"]["loadoutOffhand"] = "smoke_grenade_mp"; + level.jugg_loadouts["allies"]["loadoutPerk1"] = "specialty_scavenger"; + level.jugg_loadouts["allies"]["loadoutPerk2"] = "_specialty_blastshield"; + level.jugg_loadouts["allies"]["loadoutPerk3"] = "specialty_bulletaccuracy"; + level.jugg_loadouts["allies"]["loadoutDeathstreak"] = "specialty_null"; + level.jugg_loadouts["allies"]["loadoutJuggernaut"] = 1; +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/gametypes/koth.gsc b/MW3/Xbox/MP/maps/mp/gametypes/koth.gsc new file mode 100644 index 0000000..a75b550 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/gametypes/koth.gsc @@ -0,0 +1,1036 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\koth.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 23 + * Decompile Time: 336 ms + * Timestamp: 10/27/2023 2:26:17 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(getdvar("mapname") == "mp_background") + { + return; + } + + maps\mp\gametypes\_globallogic::init(); + maps\mp\gametypes\_callbacksetup::setupcallbacks(); + maps\mp\gametypes\_globallogic::setupcallbacks(); + if(isusingmatchrulesdata()) + { + level.initializematchrules = ::initializematchrules; + [[ level.initializematchrules ]](); + level thread maps\mp\_utility::func_810A(); + } + else + { + maps\mp\_utility::func_3315(level.gametype,30); + maps\mp\_utility::registerscorelimitdvar(level.gametype,300); + maps\mp\_utility::func_3312(level.gametype,1); + maps\mp\_utility::registerwinlimitdvar(level.gametype,1); + maps\mp\_utility::func_3317(level.gametype,0); + maps\mp\_utility::registerhalftimedvar(level.gametype,0); + level.matchrules_damagemultiplier = 0; + level.matchrules_vampirism = 0; + } + + level.teambased = 1; + level.doprematch = 1; + level.onstartgametype = ::onstartgametype; + level.getspawnpoint = ::getspawnpoint; + level.onspawnplayer = ::onspawnplayer; + level.onplayerkilled = ::onplayerkilled; + level.initgametypeawards = ::initgametypeawards; + if(level.matchrules_damagemultiplier || level.matchrules_vampirism) + { + level.modifyplayerdamage = ::maps\mp\gametypes\_damage::func_2D57; + } + + precacheshader("waypoint_captureneutral"); + precacheshader("waypoint_capture"); + precacheshader("waypoint_defend"); + precacheshader("waypoint_targetneutral"); + precacheshader("waypoint_captureneutral"); + precacheshader("waypoint_capture"); + precacheshader("waypoint_defend"); + precachestring(&"MP_WAITING_FOR_HQ"); + if(getdvar("koth_autodestroytime") == "") + { + setdvar("koth_autodestroytime","60"); + } + + level.hqautodestroytime = getdvarint("koth_autodestroytime"); + if(getdvar("koth_spawntime") == "") + { + setdvar("koth_spawntime","0"); + } + + level.hqspawntime = getdvarint("koth_spawntime"); + if(getdvar("koth_kothmode") == "") + { + setdvar("koth_kothmode","1"); + } + + level.kothmode = getdvarint("koth_kothmode"); + if(getdvar("koth_captureTime") == "") + { + setdvar("koth_captureTime","20"); + } + + level.capturetime = getdvarint("koth_captureTime"); + if(getdvar("koth_destroyTime") == "") + { + setdvar("koth_destroyTime","10"); + } + + level.destroytime = getdvarint("koth_destroyTime"); + if(getdvar("koth_delayPlayer") == "") + { + setdvar("koth_delayPlayer",1); + } + + level.delayplayer = getdvarint("koth_delayPlayer"); + if(getdvar("koth_spawnDelay") == "") + { + setdvar("koth_spawnDelay",0); + } + + level.spawndelay = getdvarint("koth_spawnDelay"); + if(getdvar("koth_extraDelay") == "") + { + setdvar("koth_extraDelay",0); + } + + level.extradelay = getdvarint("koth_extraDelay"); + setdvarifuninitialized("koth_proMode",0); + level.promode = getdvarint("koth_proMode"); + level.iconoffset = (0,0,32); + level.onrespawndelay = ::func_34BF; + game["dialog"]["gametype"] = "headquarters"; + if(getdvarint("g_hardcore")) + { + if(getmapcustom("allieschar") == "us_army") + { + game["dialog"]["allies_gametype"] = "hc_hq"; + } + + if(getmapcustom("axischar") == "us_army") + { + game["dialog"]["axis_gametype"] = "hc_hq"; + } + + game["dialog"]["gametype"] = "hc_" + game["dialog"]["gametype"]; + return; + } + + if(getdvarint("camera_thirdPerson")) + { + game["dialog"]["gametype"] = "thirdp_" + game["dialog"]["gametype"]; + return; + } + + if(getdvarint("scr_diehard")) + { + game["dialog"]["gametype"] = "dh_" + game["dialog"]["gametype"]; + return; + } + + if(getdvarint("scr_" + level.gametype + "_promode")) + { + game["dialog"]["gametype"] = game["dialog"]["gametype"] + "_pro"; + return; + } +} + +//Function Number: 2 +initializematchrules() +{ + maps\mp\_utility::func_334C(); + setdynamicdvar("koth_autodestroytime",getmatchrulesdata("hqData","HQLifetime")); + setdynamicdvar("koth_spawntime",getmatchrulesdata("hqData","HQActivateDelay")); + setdynamicdvar("scr_koth_roundswitch",1); + maps\mp\_utility::func_330E("koth",1,0,9); + setdynamicdvar("scr_koth_roundlimit",1); + maps\mp\_utility::func_3312("koth",1); + setdynamicdvar("scr_koth_winlimit",1); + maps\mp\_utility::registerwinlimitdvar("koth",1); + setdynamicdvar("scr_koth_halftime",0); + maps\mp\_utility::registerhalftimedvar("koth",0); + setdynamicdvar("koth_kothmode",0); + setdynamicdvar("koth_capturetime",20); + setdynamicdvar("koth_destroytime",10); + setdynamicdvar("koth_delayPlayer",0); + setdynamicdvar("koth_spawnDelay",60); + setdynamicdvar("koth_extraDelay",0); + setdynamicdvar("koth_proMode",0); + setdynamicdvar("scr_koth_promode",0); +} + +//Function Number: 3 +updateobjectivehintmessages(param_00,param_01) +{ + game["strings"]["objective_hint_allies"] = param_00; + game["strings"]["objective_hint_axis"] = param_01; + for(var_02 = 0;var_02 < level.players.size;var_02++) + { + var_03 = level.players[var_02]; + if(isdefined(var_03.pers["team"]) && var_03.pers["team"] != "spectator") + { + var_04 = maps\mp\_utility::func_2B3B(var_03.pers["team"]); + var_03 thread maps\mp\gametypes\_hud_message::hintmessage(var_04); + } + } +} + +//Function Number: 4 +func_34BF() +{ + maps\mp\_utility::clearlowermessage("hq_respawn"); + if(!isdefined(level.radioobject)) + { + return undefined; + } + + var_00 = level.radioobject maps\mp\gametypes\_gameobjects::func_2A15(); + if(self.pers["team"] == var_00) + { + if(!isdefined(level.hqdestroytime)) + { + return undefined; + } + + if(!level.spawndelay) + { + return undefined; + } + + var_01 = level.hqdestroytime - gettime() / 1000; + var_01 = var_01 + level.extradelay + 1; + if(level.spawndelay >= level.hqautodestroytime) + { + maps\mp\_utility::setlowermessage("hq_respawn",&"MP_WAITING_FOR_HQ",undefined,10); + } + + if(!isalive(self)) + { + self.forcespawnnearteammates = 1; + } + + if(level.delayplayer) + { + return min(level.spawndelay,var_01); + } + + return int(var_01) % level.spawndelay; + } +} + +//Function Number: 5 +onstartgametype() +{ + maps\mp\_utility::func_3305("allies",&"OBJECTIVES_KOTH"); + maps\mp\_utility::func_3305("axis",&"OBJECTIVES_KOTH"); + if(level.splitscreen) + { + maps\mp\_utility::func_3306("allies",&"OBJECTIVES_KOTH"); + maps\mp\_utility::func_3306("axis",&"OBJECTIVES_KOTH"); + } + else + { + maps\mp\_utility::func_3306("allies",&"OBJECTIVES_KOTH_SCORE"); + maps\mp\_utility::func_3306("axis",&"OBJECTIVES_KOTH_SCORE"); + } + + level.objectivehintpreparehq = &"MP_CONTROL_HQ"; + level.objectivehintcapturehq = &"MP_CAPTURE_HQ"; + level.objectivehintdestroyhq = &"MP_DESTROY_HQ"; + level.objectivehintdefendhq = &"MP_DEFEND_HQ"; + precachestring(level.objectivehintpreparehq); + precachestring(level.objectivehintcapturehq); + precachestring(level.objectivehintdestroyhq); + precachestring(level.objectivehintdefendhq); + if(level.kothmode) + { + level.objectivehintdestroyhq = level.objectivehintcapturehq; + } + + if(level.hqspawntime) + { + updateobjectivehintmessages(level.objectivehintpreparehq,level.objectivehintpreparehq); + } + else + { + updateobjectivehintmessages(level.objectivehintcapturehq,level.objectivehintcapturehq); + } + + setclientnamemode("auto_change"); + level.spawnmins = (0,0,0); + level.spawnmaxs = (0,0,0); + maps\mp\gametypes\_spawnlogic::func_2FD0("allies","mp_tdm_spawn"); + maps\mp\gametypes\_spawnlogic::func_2FD0("axis","mp_tdm_spawn"); + level.mapcenter = maps\mp\gametypes\_spawnlogic::func_2FCD(level.spawnmins,level.spawnmaxs); + setmapcenter(level.mapcenter); + level.spawn_all = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_tdm_spawn"); + if(!level.spawn_all.size) + { + maps\mp\gametypes\_callbacksetup::abortlevel(); + return; + } + + var_00[0] = "hq"; + maps\mp\gametypes\_gameobjects::main(var_00); + thread func_34D4(); + maps\mp\gametypes\_rank::registerscoreinfo("kill",50); + maps\mp\gametypes\_rank::registerscoreinfo("headshot",50); + maps\mp\gametypes\_rank::registerscoreinfo("assist",10); + maps\mp\gametypes\_rank::registerscoreinfo("defend",10); + maps\mp\gametypes\_rank::registerscoreinfo("assault",10); + maps\mp\gametypes\_rank::registerscoreinfo("capture",250); + thread func_34C6(); +} + +//Function Number: 6 +func_34C6() +{ + level endon("game_ended"); + level.hqrevealtime = -100000; + var_00 = &"MP_HQ_AVAILABLE_IN"; + if(level.kothmode) + { + var_01 = &"MP_HQ_DESPAWN_IN"; + var_02 = &"MP_HQ_DESPAWN_IN"; + } + else if(!level.splitscreen) + { + var_01 = &"MP_HQ_REINFORCEMENTS_IN"; + var_02 = &"MP_HQ_DESPAWN_IN"; + } + else + { + var_01 = &"MP_HQ_REINFORCEMENTS_IN_SPLITSCREEN"; + var_02 = &"MP_HQ_DESPAWN_IN"; + } + + precachestring(var_00); + precachestring(var_01); + precachestring(var_02); + precachestring(&"MP_CAPTURING_HQ"); + precachestring(&"MP_DESTROYING_HQ"); + maps\mp\_utility::func_274B("prematch_done"); + wait 5; + var_03 = []; + var_41["allies"] maps\mp\gametypes\_hud_util::setpoint("TOP LEFT","TOP LEFT",125,2); + var_41["allies"].label = var_01; + var_41["allies"].alpha = 0; + var_41["allies"].archived = 0; + var_41["allies"].hidewheninmenu = 1; + var_41["axis"] maps\mp\gametypes\_hud_util::setpoint("TOP LEFT","TOP LEFT",125,2); + var_41["axis"].label = var_01; + var_41["axis"].alpha = 0; + var_41["axis"].archived = 0; + var_41["axis"].hidewheninmenu = 1; + level.timerdisplay = var_41; + thread func_34CC(var_41["allies"]); + thread func_34CC(var_41["axis"]); + var_04 = maps\mp\gametypes\_gameobjects::func_2A31(); + objective_add(var_04,"invisible",(0,0,0)); + for(;;) + { + var_05 = pickradiotospawn(); + var_05 makeradioactive(); + maps\mp\_utility::func_2D68("mp_suitcase_pickup"); + maps\mp\_utility::func_26E5("hq_located"); + var_06 = var_05.gameobject; + level.radioobject = var_06; + var_06 maps\mp\gametypes\_gameobjects::setmodelvisibility(1); + level.hqrevealtime = gettime(); + if(level.hqspawntime) + { + var_07 = maps\mp\gametypes\_objpoints::func_2996("objpoint_next_hq",var_05.origin + level.iconoffset,"all","waypoint_targetneutral"); + var_07 setwaypoint(1,1); + objective_position(var_04,var_05.trigorigin); + objective_icon(var_04,"waypoint_targetneutral"); + objective_state(var_04,"active"); + updateobjectivehintmessages(level.objectivehintpreparehq,level.objectivehintpreparehq); + var_41["allies"].label = var_01; + var_41["allies"] settimer(level.hqspawntime); + var_41["allies"].alpha = 1; + var_41["axis"].label = var_01; + var_41["axis"] settimer(level.hqspawntime); + var_41["axis"].alpha = 1; + wait level.hqspawntime; + maps\mp\gametypes\_objpoints::deleteobjpoint(var_07); + objective_state(var_04,"invisible"); + maps\mp\_utility::func_26E5("hq_online"); + } + + var_41["allies"].alpha = 0; + var_41["axis"].alpha = 0; + waittillframeend; + maps\mp\_utility::func_26E5("obj_capture"); + updateobjectivehintmessages(level.objectivehintcapturehq,level.objectivehintcapturehq); + maps\mp\_utility::func_2D68("mp_killstreak_radar"); + var_06 maps\mp\gametypes\_gameobjects::allowuse("any"); + var_06 maps\mp\gametypes\_gameobjects::setusetime(level.capturetime); + var_06 maps\mp\gametypes\_gameobjects::setusetext(&"MP_CAPTURING_HQ"); + var_06 maps\mp\gametypes\_gameobjects::set2dicon("enemy","waypoint_captureneutral"); + var_06 maps\mp\gametypes\_gameobjects::func_2A25("enemy","waypoint_captureneutral"); + var_06 maps\mp\gametypes\_gameobjects::setvisibleteam("any"); + var_06.onuse = ::onradiocapture; + var_06.onbeginuse = ::onbeginuse; + var_06.onenduse = ::onenduse; + level waittill(maps\mp\gametypes\_hud_util::createservertimer("objective",1.4,"allies"),var_41["allies"],maps\mp\gametypes\_hud_util::createservertimer("objective",1.4,"axis"),var_41["axis"],"hq_captured"); + var_08 = var_06 maps\mp\gametypes\_gameobjects::func_2A15(); + var_09 = maps\mp\_utility::getotherteam(var_08); + if(level.hqautodestroytime) + { + thread destroyhqaftertime(level.hqautodestroytime); + var_41[var_08] settimer(level.hqautodestroytime + level.extradelay); + var_41[var_09] settimer(level.hqautodestroytime); + } + else + { + level.hqdestroyedbytimer = 0; + } + + for(;;) + { + var_08 = var_06 maps\mp\gametypes\_gameobjects::func_2A15(); + var_09 = maps\mp\_utility::getotherteam(var_08); + if(var_08 == "allies") + { + updateobjectivehintmessages(level.objectivehintdefendhq,level.objectivehintdestroyhq); + } + else + { + updateobjectivehintmessages(level.objectivehintdestroyhq,level.objectivehintdefendhq); + } + + var_06 maps\mp\gametypes\_gameobjects::allowuse("enemy"); + var_06 maps\mp\gametypes\_gameobjects::set2dicon("friendly","waypoint_defend"); + var_06 maps\mp\gametypes\_gameobjects::func_2A25("friendly","waypoint_defend"); + var_06 maps\mp\gametypes\_gameobjects::set2dicon("enemy","waypoint_capture"); + var_06 maps\mp\gametypes\_gameobjects::func_2A25("enemy","waypoint_capture"); + if(!level.kothmode) + { + var_06 maps\mp\gametypes\_gameobjects::setusetext(&"MP_DESTROYING_HQ"); + } + + var_06.onuse = ::func_34CF; + if(level.hqautodestroytime) + { + var_41[var_08].label = var_02; + var_41[var_08].alpha = 1; + var_41[var_09].label = var_03; + var_41[var_09].alpha = 1; + } + + level waittill("hq_destroyed"); + var_41[var_09].alpha = 0; + if(!level.kothmode || level.hqdestroyedbytimer) + { + break; + } + + thread func_34CD(var_08); + var_06 maps\mp\gametypes\_gameobjects::setownerteam(maps\mp\_utility::getotherteam(var_08)); + } + + level notify("hq_reset"); + var_06 maps\mp\gametypes\_gameobjects::allowuse("none"); + var_06 maps\mp\gametypes\_gameobjects::setownerteam("neutral"); + var_06 maps\mp\gametypes\_gameobjects::setmodelvisibility(0); + var_05 makeradioinactive(); + level.radioobject = undefined; + thread func_34CD(var_08,level.extradelay); + wait level.extradelay; + wait max(1,6 - level.extradelay); + } +} + +//Function Number: 7 +func_34CC(param_00) +{ + level waittill("game_ended"); + param_00.alpha = 0; +} + +//Function Number: 8 +func_34CD(param_00,param_01) +{ + if(param_01) + { + foreach(var_03 in level.players) + { + if(isalive(var_03)) + { + continue; + } + + if(var_03.pers["team"] == param_00) + { + var_03 maps\mp\_utility::setlowermessage("hq_respawn",game["strings"]["waiting_to_spawn"]); + } + } + + wait param_01; + } + + level.timerdisplay[param_00].alpha = 0; + foreach(var_03 in level.players) + { + if(var_03.pers["team"] == param_00) + { + var_03 maps\mp\_utility::clearlowermessage("hq_respawn"); + if(!isalive(var_03)) + { + var_03.forcespawnnearteammates = 1; + } + + var_03 notify("force_spawn"); + } + } +} + +//Function Number: 9 +onbeginuse(param_00) +{ + var_01 = maps\mp\gametypes\_gameobjects::func_2A15(); + if(var_01 == "neutral") + { + self.objpoints[param_00.pers["team"]] thread maps\mp\gametypes\_objpoints::startflashing(); + return; + } + + self.objpoints["allies"] thread maps\mp\gametypes\_objpoints::startflashing(); + self.objpoints["axis"] thread maps\mp\gametypes\_objpoints::startflashing(); +} + +//Function Number: 10 +onenduse(param_00,param_01,param_02) +{ + self.objpoints["allies"] thread maps\mp\gametypes\_objpoints::stopflashing(); + self.objpoints["axis"] thread maps\mp\gametypes\_objpoints::stopflashing(); +} + +//Function Number: 11 +onradiocapture(param_00) +{ + var_01 = param_00.pers["team"]; + param_00 thread [[ level.onxpevent ]]("capture"); + maps\mp\gametypes\_gamescore::func_26D3("capture",param_00); + foreach(var_03 in self.touchlist[var_01]) + { + var_04 = var_03.player; + var_04 maps\mp\_utility::incplayerstat("hqscaptured",1); + var_04 maps\mp\_utility::func_26FB("captures",1); + var_04 maps\mp\gametypes\_persistence::func_26D8("round","captures",param_00.pers["captures"]); + } + + param_00 thread maps\mp\_matchdata::loggameevent("capture",param_00.origin); + var_06 = maps\mp\gametypes\_gameobjects::func_2A15(); + maps\mp\gametypes\_gameobjects::setownerteam(var_01); + if(!level.kothmode) + { + maps\mp\gametypes\_gameobjects::setusetime(level.destroytime); + } + + var_07 = "axis"; + if(var_01 == "axis") + { + var_07 = "allies"; + } + + maps\mp\_utility::teamplayercardsplash("callout_capturedhq",param_00); + maps\mp\_utility::func_26E5("hq_secured",var_01); + maps\mp\_utility::func_26E5("hq_enemy_captured",var_07); + thread maps\mp\_utility::func_2D68("mp_war_objective_taken",var_01); + thread maps\mp\_utility::func_2D68("mp_war_objective_lost",var_07); + level thread func_34D1(var_01); + param_00 notify("objective","captured"); + level notify("hq_captured"); +} + +//Function Number: 12 +func_34CF(param_00) +{ + var_01 = param_00.pers["team"]; + var_02 = "axis"; + if(var_01 == "axis") + { + var_02 = "allies"; + } + + param_00 thread [[ level.onxpevent ]]("capture"); + maps\mp\gametypes\_gamescore::func_26D3("capture",param_00); + foreach(var_04 in self.touchlist[var_01]) + { + var_05 = var_04.player; + var_05 maps\mp\_utility::incplayerstat("hqsdestroyed",1); + var_05 maps\mp\_utility::func_26FB("destructions",1); + var_05 maps\mp\gametypes\_persistence::func_26D8("round","destructions",param_00.pers["destructions"]); + } + + param_00 thread maps\mp\_matchdata::loggameevent("destroy",param_00.origin); + if(level.kothmode) + { + maps\mp\_utility::teamplayercardsplash("callout_capturedhq",param_00); + maps\mp\_utility::func_26E5("hq_secured",var_01); + maps\mp\_utility::func_26E5("hq_enemy_captured",var_02); + } + else + { + maps\mp\_utility::teamplayercardsplash("callout_destroyedhq",param_00); + maps\mp\_utility::func_26E5("hq_secured",var_01); + maps\mp\_utility::func_26E5("hq_enemy_destroyed",var_02); + } + + thread maps\mp\_utility::func_2D68("mp_war_objective_taken",var_01); + thread maps\mp\_utility::func_2D68("mp_war_objective_lost",var_02); + level notify("hq_destroyed"); + if(level.kothmode) + { + level thread func_34D1(var_01); + } +} + +//Function Number: 13 +destroyhqaftertime(param_00) +{ + level endon("game_ended"); + level endon("hq_reset"); + level.hqdestroytime = gettime() + param_00 * 1000; + level.hqdestroyedbytimer = 0; + wait param_00; + level.hqdestroyedbytimer = 1; + maps\mp\_utility::func_26E5("hq_offline"); + level notify("hq_destroyed"); +} + +//Function Number: 14 +func_34D1(param_00) +{ + level endon("game_ended"); + level endon("hq_destroyed"); + level notify("awardHQPointsRunning"); + level endon("awardHQPointsRunning"); + var_01 = 12; + var_02 = 5; + var_03 = 5; + var_04 = 10; + if(level.promode) + { + var_05 = int(level.hqautodestroytime / var_01); + } + else + { + var_05 = 5; + } + + var_06 = 0; + while(!level.gameended) + { + if(level.promode && level.hqautodestroytime) + { + maps\mp\gametypes\_gamescore::giveteamscoreforobjective(param_00,int(var_04 * var_06 + 1)); + } + else + { + maps\mp\gametypes\_gamescore::giveteamscoreforobjective(param_00,var_04); + } + + for(var_07 = 0;var_07 < level.players.size;var_07++) + { + var_08 = level.players[var_07]; + if(var_08.pers["team"] == param_00) + { + if(level.promode) + { + if(level.hqautodestroytime) + { + var_08 thread maps\mp\gametypes\_rank::func_2AB3("defend",int(var_02 + var_03 * var_06)); + } + else + { + var_08 thread maps\mp\gametypes\_rank::func_2AB3("defend",int(var_02 + var_03)); + } + } + else + { + var_08 thread maps\mp\gametypes\_rank::func_2AB3("defend"); + } + + if(isalive(var_08)) + { + maps\mp\gametypes\_gamescore::func_26D3("defend",var_08); + } + } + } + + var_06++; + wait var_05; + maps\mp\gametypes\_hostmigration::func_273E(); + } +} + +//Function Number: 15 +getspawnpoint() +{ + var_00 = undefined; + if(isdefined(level.radioobject)) + { + var_01 = level.radioobject maps\mp\gametypes\_gameobjects::func_2A15(); + if(self.pers["team"] == var_01) + { + var_00 = maps\mp\gametypes\_spawnlogic::func_2FE6(level.spawn_all,level.radioobject.nearspawns); + } + else + { + var_00 = maps\mp\gametypes\_spawnlogic::func_2FE6(level.spawn_all,level.radioobject.outerspawns); + } + } + + if(!isdefined(var_00)) + { + var_00 = maps\mp\gametypes\_spawnlogic::func_2FE6(level.spawn_all); + } + + return var_00; +} + +//Function Number: 16 +onspawnplayer() +{ + maps\mp\_utility::clearlowermessage("hq_respawn"); + self.forcespawnnearteammates = undefined; +} + +//Function Number: 17 +func_34D4() +{ + var_00 = []; + var_01 = getentarray("hq_hardpoint","targetname"); + if(var_01.size < 2) + { + var_00[var_00.size] = "There are not at least 2 entities with targetname \"radio\"; + } + + var_02 = getentarray("radiotrigger","targetname"); + for(var_03 = 0;var_03 < var_01.size;var_03++) + { + var_04 = 0; + var_05 = var_01[var_03]; + var_05.trig = undefined; + for(var_06 = 0;var_06 < var_02.size;var_06++) + { + if(var_05 istouching(var_02[var_06])) + { + if(isdefined(var_05.trig)) + { + var_00[var_00.size] = "Radio at " + var_05.origin + " is touching more than one \"radiotrigger\" trigger"; + var_04 = 1; + break; + } + + var_05.trig = var_02[var_06]; + break; + } + } + + if(!isdefined(var_05.trig)) + { + if(!var_04) + { + var_00[var_00.size] = "Radio at " + var_05.origin + " is not inside any \"radiotrigger\" trigger"; + continue; + } + } + + var_05.trigorigin = var_05.trig.origin; + var_07 = []; + var_07[0] = var_05; + var_08 = getentarray(var_05.target,"targetname"); + for(var_06 = 0;var_06 < var_08.size;var_06++) + { + var_07[var_07.size] = var_08[var_06]; + } + + var_05.visuals = var_07; + var_05 maps\mp\gametypes\_gameobjects::setmodelvisibility(0); + } + + if(var_00.size > 0) + { + for(var_03 = 0;var_03 < var_00.size;var_03++) + { + } + + common_scripts\utility::error("Map errors. See above"); + maps\mp\gametypes\_callbacksetup::abortlevel(); + return; + } + + level.radios = var_01; + level.prevradio = undefined; + level.prevradio2 = undefined; + return 1; +} + +//Function Number: 18 +makeradioactive() +{ + self.gameobject = maps\mp\gametypes\_gameobjects::func_29E7("neutral",self.trig,self.visuals,self.origin - self.trigorigin + level.iconoffset); + self.gameobject maps\mp\gametypes\_gameobjects::setmodelvisibility(0); + self.trig.useobj = self.gameobject; + func_34DB(); +} + +//Function Number: 19 +makeradioinactive() +{ + self.gameobject maps\mp\gametypes\_gameobjects::deleteuseobject(); + self.gameobject = undefined; +} + +//Function Number: 20 +func_34DB() +{ + var_00 = level.spawn_all; + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + var_00[var_01].distsq = distancesquared(var_00[var_01].origin,self.origin); + } + + for(var_01 = 1;var_01 < var_00.size;var_01++) + { + var_02 = var_00[var_01]; + for(var_03 = var_01 - 1;var_03 >= 0 && var_02.distsq < var_00[var_03].distsq;var_03--) + { + var_00[var_03 + 1] = var_00[var_03]; + } + + var_00[var_03 + 1] = var_02; + } + + var_04 = []; + var_05 = []; + var_06 = var_00.size / 3; + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + if(var_01 <= var_06 || var_00[var_01].distsq <= 490000) + { + var_04[var_04.size] = var_00[var_01]; + } + + if(var_01 > var_06 || var_00[var_01].distsq > 1000000) + { + if(var_05.size < 10 || var_00[var_01].distsq < 2250000) + { + var_05[var_05.size] = var_00[var_01]; + } + } + } + + self.gameobject.nearspawns = var_04; + self.gameobject.outerspawns = var_05; +} + +//Function Number: 21 +pickradiotospawn() +{ + var_00 = []; + var_01 = []; + foreach(var_03 in level.players) + { + if(var_03.team == "spectator") + { + continue; + } + + if(!isalive(var_03)) + { + continue; + } + + var_03.dist = 0; + if(var_03.team == "allies") + { + var_00[var_00.size] = var_03; + continue; + } + + var_01[var_01.size] = var_03; + } + + if(!var_00.size || !var_01.size) + { + var_05 = level.radios[randomint(level.radios.size)]; + while(isdefined(level.prevradio) && var_05 == level.prevradio) + { + var_05 = level.radios[randomint(level.radios.size)]; + } + + level.prevradio2 = level.prevradio; + level.prevradio = var_05; + return var_05; + } + + for(var_06 = 0;var_06 < var_01.size;var_06++) + { + for(var_07 = var_06 + 1;var_07 < var_01.size;var_07++) + { + var_08 = distancesquared(var_01[var_06].origin,var_01[var_07].origin); + var_01[var_06].dist = var_01[var_06].dist + var_08; + var_01[var_07].dist = var_01[var_07].dist + var_08; + } + } + + for(var_06 = 0;var_06 < var_02.size;var_06++) + { + for(var_07 = var_06 + 1;var_07 < var_02.size;var_07++) + { + var_08 = distancesquared(var_02[var_06].origin,var_02[var_07].origin); + var_02[var_06].dist = var_02[var_06].dist + var_08; + var_02[var_07].dist = var_02[var_07].dist + var_08; + } + } + + var_09 = var_01[0]; + foreach(var_04 in var_01) + { + if(var_04.dist < var_09.dist) + { + var_09 = var_04; + } + } + + var_0C["allies"] = var_09.origin; + var_09 = var_02[0]; + foreach(var_04 in var_02) + { + if(var_04.dist < var_09.dist) + { + var_09 = var_04; + } + } + + var_0C["axis"] = var_02[0].origin; + var_0F = undefined; + var_10 = undefined; + var_06 = 0; + while(var_05 < level.radios.size) + { + var_10 = level.radios[var_05]; + var_11 = abs(distance(var_10.origin,var_0B["allies"]) - distance(var_10.origin,var_0B["axis"])); + if(isdefined(level.prevradio) && var_10 == level.prevradio) + { + continue; + } + + if(isdefined(level.prevradio2) && var_10 == level.prevradio2) + { + if(level.radios.size > 2) + { + continue; + } + else + { + var_11 = var_11 + 512; + } + } + + if(!isdefined(var_0F) || var_11 < var_0F) + { + var_0F = var_11; + var_0E = var_10; + } + + var_05++; + } + + level.prevradio2 = level.prevradio; + level.prevradio = var_0E; + return var_0E; +} + +//Function Number: 22 +onplayerkilled(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09) +{ + if(!isplayer(param_01) || !self.touchtriggers.size && !param_01.touchtriggers.size || param_01.pers["team"] == self.pers["team"]) + { + return; + } + + if(self.touchtriggers.size) + { + foreach(var_0B in self.touchtriggers) + { + if(!isdefined(var_0B.useobj)) + { + continue; + } + + var_0C = var_0B.useobj.ownerteam; + var_0D = self.pers["team"]; + if(var_0C == "neutral") + { + continue; + } + + var_0D = self.pers["team"]; + if(var_0D == var_0C) + { + param_01 thread [[ level.onxpevent ]]("assault"); + maps\mp\gametypes\_gamescore::func_26D3("assault",param_01); + thread maps\mp\_matchdata::func_28B4(param_09,"defending"); + continue; + } + + param_01 thread [[ level.onxpevent ]]("defend"); + maps\mp\gametypes\_gamescore::func_26D3("defend",param_01); + param_01 maps\mp\_utility::func_26FB("defends",1); + param_01 maps\mp\gametypes\_persistence::func_26D8("round","defends",param_01.pers["defends"]); + thread maps\mp\_matchdata::func_28B4(param_09,"assaulting"); + } + } + + if(param_01.touchtriggers.size) + { + foreach(var_0B in param_01.touchtriggers) + { + if(!isdefined(var_0B.useobj)) + { + continue; + } + + var_0C = var_0B.useobj.ownerteam; + var_0D = param_01.pers["team"]; + if(var_0C == "neutral") + { + var_0D = param_01.pers["team"]; + } + + if(var_0D == var_0C) + { + param_01 thread [[ level.onxpevent ]]("defend"); + maps\mp\gametypes\_gamescore::func_26D3("defend",param_01); + thread maps\mp\_matchdata::func_28B4(param_09,"assaulting"); + continue; + } + + param_01 thread [[ level.onxpevent ]]("assault"); + maps\mp\gametypes\_gamescore::func_26D3("assault",param_01); + thread maps\mp\_matchdata::func_28B4(param_09,"defending"); + } + } +} + +//Function Number: 23 +initgametypeawards() +{ + maps\mp\_awards::func_2D85("hqsdestroyed",0,::maps\mp\_awards::func_2DA7); + maps\mp\_awards::func_2D85("hqscaptured",0,::maps\mp\_awards::func_2DA7); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/gametypes/oic.gsc b/MW3/Xbox/MP/maps/mp/gametypes/oic.gsc new file mode 100644 index 0000000..6309eb4 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/gametypes/oic.gsc @@ -0,0 +1,689 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\oic.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 23 + * Decompile Time: 322 ms + * Timestamp: 10/27/2023 2:26:18 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + maps\mp\gametypes\_globallogic::init(); + maps\mp\gametypes\_callbacksetup::setupcallbacks(); + maps\mp\gametypes\_globallogic::setupcallbacks(); + if(isusingmatchrulesdata()) + { + level.initializematchrules = ::initializematchrules; + [[ level.initializematchrules ]](); + level thread maps\mp\_utility::func_810A(); + } + else + { + maps\mp\_utility::func_3315(level.gametype,10); + maps\mp\_utility::registerscorelimitdvar(level.gametype,0); + maps\mp\_utility::func_3312(level.gametype,1); + maps\mp\_utility::registerwinlimitdvar(level.gametype,1); + maps\mp\_utility::func_3317(level.gametype,2); + maps\mp\_utility::registerhalftimedvar(level.gametype,0); + level.matchrules_damagemultiplier = 0; + level.matchrules_vampirism = 0; + level.matchrules_oneshotkill = 0; + level.matchrules_initialammo = 2; + level.matchrules_rewardammo = 2; + } + + func_351A(); + func_34B3(); + level.teambased = 0; + level.doprematch = 1; + level.onstartgametype = ::onstartgametype; + level.onspawnplayer = ::onspawnplayer; + level.getspawnpoint = ::getspawnpoint; + level.onplayerkilled = ::onplayerkilled; + level.ononeleftevent = ::ononeleftevent; + if(level.matchrules_oneshotkill) + { + level.modifyplayerdamage = ::modifyplayerdamage; + } +} + +//Function Number: 2 +initializematchrules() +{ + maps\mp\_utility::func_334C(1); + level.matchrules_initialammo = getmatchrulesdata("oicData","initialAmmoCount"); + level.matchrules_rewardammo = getmatchrulesdata("oicData","killRewardAmmoCount"); + level.matchrules_oneshotkill = getmatchrulesdata("oicData","oneShotKill"); + level.matchrules_damagemultiplier = 0; + level.matchrules_vampirism = 0; + setdynamicdvar("scr_oic_winlimit",1); + maps\mp\_utility::registerwinlimitdvar("oic",1); + setdynamicdvar("scr_oic_roundlimit",1); + maps\mp\_utility::func_3312("oic",1); + setdynamicdvar("scr_oic_halftime",0); + maps\mp\_utility::registerhalftimedvar("oic",0); + setdynamicdvar("scr_oic_promode",0); + setdynamicdvar("scr_oic_playerrespawndelay",0); + setdynamicdvar("scr_oic_waverespawndelay",0); + setdynamicdvar("scr_player_forcerespawn",1); + setdynamicdvar("scr_player_maxhealth",100); + setdynamicdvar("scr_game_onlyheadshots",0); + setdynamicdvar("scr_player_healthregentime",5); + if(maps\mp\_utility::matchmakinggame()) + { + setdynamicdvar("scr_game_hardpoints",1); + setdynamicdvar("scr_game_perks",1); + return; + } + + setdynamicdvar("scr_game_hardpoints",0); +} + +//Function Number: 3 +onstartgametype() +{ + setclientnamemode("auto_change"); + maps\mp\_utility::func_3305("allies",&"OBJECTIVES_OIC"); + maps\mp\_utility::func_3305("axis",&"OBJECTIVES_OIC"); + if(level.splitscreen) + { + maps\mp\_utility::func_3306("allies",&"OBJECTIVES_OIC"); + maps\mp\_utility::func_3306("axis",&"OBJECTIVES_OIC"); + } + else + { + maps\mp\_utility::func_3306("allies",&"OBJECTIVES_OIC_SCORE"); + maps\mp\_utility::func_3306("axis",&"OBJECTIVES_OIC_SCORE"); + } + + maps\mp\_utility::setobjectivehinttext("allies",&"OBJECTIVES_OIC_HINT"); + maps\mp\_utility::setobjectivehinttext("axis",&"OBJECTIVES_OIC_HINT"); + level.spawnmins = (0,0,0); + level.spawnmaxs = (0,0,0); + maps\mp\gametypes\_spawnlogic::func_2FD0("allies","mp_dm_spawn"); + maps\mp\gametypes\_spawnlogic::func_2FD0("axis","mp_dm_spawn"); + level.mapcenter = maps\mp\gametypes\_spawnlogic::func_2FCD(level.spawnmins,level.spawnmaxs); + setmapcenter(level.mapcenter); + var_00 = []; + maps\mp\gametypes\_gameobjects::main(var_00); + if(maps\mp\_utility::matchmakinggame()) + { + maps\mp\gametypes\_equipment::createkilltriggers(); + } + + maps\mp\gametypes\_rank::registerscoreinfo("kill_bonus",50); + maps\mp\gametypes\_rank::registerscoreinfo("kill",100); + maps\mp\gametypes\_rank::registerscoreinfo("survivor",20); + maps\mp\gametypes\_rank::registerscoreinfo("assist",0); + maps\mp\gametypes\_rank::registerscoreinfo("suicide",0); + maps\mp\gametypes\_rank::registerscoreinfo("teamkill",0); + maps\mp\gametypes\_rank::registerscoreinfo("headshot",0); + maps\mp\gametypes\_rank::registerscoreinfo("execution",0); + maps\mp\gametypes\_rank::registerscoreinfo("avenger",0); + maps\mp\gametypes\_rank::registerscoreinfo("defender",0); + maps\mp\gametypes\_rank::registerscoreinfo("posthumous",0); + maps\mp\gametypes\_rank::registerscoreinfo("revenge",0); + maps\mp\gametypes\_rank::registerscoreinfo("double",0); + maps\mp\gametypes\_rank::registerscoreinfo("triple",0); + maps\mp\gametypes\_rank::registerscoreinfo("multi",0); + maps\mp\gametypes\_rank::registerscoreinfo("buzzkill",0); + maps\mp\gametypes\_rank::registerscoreinfo("firstblood",0); + maps\mp\gametypes\_rank::registerscoreinfo("comeback",0); + maps\mp\gametypes\_rank::registerscoreinfo("longshot",0); + maps\mp\gametypes\_rank::registerscoreinfo("assistedsuicide",0); + maps\mp\gametypes\_rank::registerscoreinfo("knifethrow",0); + level.quickmessagetoall = 1; + level.blockweapondrops = 1; + if(maps\mp\_utility::matchmakinggame()) + { + level.killstreakrewards = 1; + level thread finalthreeuav(); + } + else + { + level.killstreakrewards = 0; + } + + level thread onplayerconnect(); +} + +//Function Number: 4 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_00.oic_firstspawn = 1; + var_00.oic_hasspawned = 0; + var_00.oichud_button = undefined; + var_00.oichud_text = undefined; + var_00.oichud_name = undefined; + } +} + +//Function Number: 5 +getspawnpoint() +{ + if(self.oic_firstspawn) + { + self.oic_firstspawn = 0; + self.pers["class"] = "gamemode"; + self.pers["lastClass"] = ""; + self.class = self.pers["class"]; + self.lastclass = self.pers["lastClass"]; + if(common_scripts\utility::cointoss()) + { + maps\mp\gametypes\_menus::func_2AF3("axis",1); + } + else + { + maps\mp\gametypes\_menus::func_2AF3("allies",1); + } + + thread movelatejoinerstospectators(); + } + + var_00 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints(self.pers["team"]); + var_01 = maps\mp\gametypes\_spawnlogic::func_2FEF(var_00); + return var_01; +} + +//Function Number: 6 +movelatejoinerstospectators() +{ + level endon("game_ended"); + self endon("disconnect"); + maps\mp\_utility::func_274B("prematch_done"); + maps\mp\_utility::func_274B("graceperiod_done"); + maps\mp\gametypes\_hostmigration::func_2740(5); + if(!self.oic_hasspawned) + { + self notify("used_predicted_spawnpoint"); + maps\mp\gametypes\_menus::func_2AF3("spectator",1); + if(level.console && maps\mp\_utility::matchmakinggame()) + { + thread playerwager(0); + } + } +} + +//Function Number: 7 +onspawnplayer() +{ + if(isdefined(self.oic_rewardammo) && self.oic_rewardammo) + { + func_3518(); + } + else + { + self.oic_rewardammo = 0; + } + + self.pers["gamemodeLoadout"] = level.oic_loadouts[self.pers["team"]]; + thread waitloadoutdone(); + level notify("spawned_player"); +} + +//Function Number: 8 +waitloadoutdone() +{ + level endon("game_ended"); + self endon("disconnect"); + self waittill("spawned_player"); + self takeallweapons(); + maps\mp\_utility::giveperk("specialty_bling",0); + var_00 = func_8114(level.oic_gun); + maps\mp\_utility::_giveweapon(var_00); + self switchtoweapon(var_00); + self setspawnweapon(var_00); + var_01 = strtok(var_00,"_"); + if(var_01[0] == "iw5") + { + var_02 = var_01[0] + "_" + var_01[1]; + } + else if(var_02[0] == "alt") + { + var_02 = var_02[1] + "_" + var_02[2]; + } + else + { + var_02 = var_02[0]; + } + + self.pers["primaryWeapon"] = var_02; + self.primaryweapon = var_00; + var_03 = weaponclipsize(var_00); + if(level.matchrules_initialammo > var_03) + { + self setweaponammoclip(self.primaryweapon,var_03); + self setweaponammostock(self.primaryweapon,level.matchrules_initialammo - var_03); + } + else + { + self setweaponammoclip(self.primaryweapon,level.matchrules_initialammo); + self setweaponammostock(self.primaryweapon,0); + } + + if(maps\mp\_utility::matchmakinggame()) + { + thread removescavenger(); + wait 0.05; + if(!maps\mp\_utility::func_27AF("specialty_fastmantle")) + { + maps\mp\_utility::giveperk("specialty_fastmantle",0); + } + + if(!maps\mp\_utility::func_27AF("specialty_assists")) + { + maps\mp\_utility::giveperk("specialty_assists",0); + } + + if(!maps\mp\_utility::func_27AF("specialty_falldamage")) + { + maps\mp\_utility::giveperk("specialty_falldamage",0); + } + } + + self.oic_hasspawned = 1; +} + +//Function Number: 9 +func_8114(param_00) +{ + if(isdefined(level.gun_attachments[param_00]) && isdefined(level.gun_attachments[param_00]["attach1"])) + { + var_01 = level.gun_attachments[param_00]["attach1"]; + } + else + { + var_01 = "none"; + } + + if(isdefined(level.gun_attachments[param_00]) && isdefined(level.gun_attachments[param_00]["attach2"])) + { + var_02 = level.gun_attachments[param_00]["attach2"]; + } + else + { + var_02 = "none"; + } + + var_03 = maps\mp\gametypes\_class::func_32BC(param_00,var_01,var_02,0,0); + return var_03; +} + +//Function Number: 10 +modifyplayerdamage(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07) +{ + if(param_03 == "MOD_PISTOL_BULLET" || param_03 == "MOD_RIFLE_BULLET" || param_03 == "MOD_HEAD_SHOT") + { + param_02 = 999; + } + + return param_02; +} + +//Function Number: 11 +onplayerkilled(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09) +{ + if(isdefined(param_01) && isplayer(param_01) && self != param_01) + { + param_01.oic_rewardammo = param_01.oic_rewardammo + level.matchrules_rewardammo; + if(self attackbuttonpressed()) + { + param_01 thread waitgiveammo(); + } + else + { + param_01 func_3518(); + } + + if(maps\mp\_utility::getgametypenumlives() && self.pers["deaths"] == maps\mp\_utility::getgametypenumlives()) + { + eliminateplayer(); + } + + if(level.console && maps\mp\_utility::matchmakinggame()) + { + foreach(var_0B in level.players) + { + if(isdefined(var_0B.sessionstate) && var_0B.sessionstate == "spectator" || var_0B.sessionstate == "spectating" && isdefined(var_0B.wagingplayer) && var_0B.wagingplayer == param_01.name) + { + var_0B thread maps\mp\gametypes\_rank::xpeventpopup(&"SPLASHES_PROXIMITYKILL"); + var_0B thread maps\mp\gametypes\_rank::func_2AB3("kill_bonus"); + } + } + } + } +} + +//Function Number: 12 +ononeleftevent(param_00) +{ + var_01 = maps\mp\_utility::getlastlivingplayer(); + logstring("last one alive, win: " + var_01.name); + level.finalkillcam_winner = "none"; + level thread maps\mp\gametypes\_gamelogic::endgame(var_01,&"MP_ENEMIES_ELIMINATED"); +} + +//Function Number: 13 +waitgiveammo() +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + self notify("oic_waitGiveAmmo"); + self endon("oic_waitGiveAmmo"); + while(self attackbuttonpressed()) + { + wait 0.05; + } + + func_3518(); +} + +//Function Number: 14 +func_3518() +{ + var_00 = self getcurrentweapon(); + var_01 = self getweaponammostock(var_00); + var_02 = self getweaponammoclip(var_00); + var_03 = weaponclipsize(var_00); + if(var_02 + self.oic_rewardammo > var_03) + { + self setweaponammoclip(var_00,var_03); + self setweaponammostock(var_00,var_01 + var_02 + self.oic_rewardammo - var_03); + } + else + { + self setweaponammoclip(var_00,var_02 + self.oic_rewardammo); + } + + self playlocalsound("scavenger_pack_pickup"); + self.oic_rewardammo = 0; +} + +//Function Number: 15 +eliminateplayer() +{ + if(level.console && maps\mp\_utility::matchmakinggame()) + { + thread playerwager(1); + } + + thread maps\mp\_utility::teamplayercardsplash("callout_eliminated",self); + var_00 = []; + foreach(var_02 in level.players) + { + if(var_02.pers["deaths"] < maps\mp\_utility::getgametypenumlives() && var_02.oic_hasspawned) + { + var_00[var_00.size] = var_02; + var_02 thread maps\mp\gametypes\_rank::xpeventpopup(&"SPLASHES_SURVIVOR"); + maps\mp\gametypes\_gamescore::func_26D3("survivor",var_02,undefined,1); + var_02 thread maps\mp\gametypes\_rank::func_2AB3("survivor"); + continue; + } + + if(isdefined(var_02.wagingplayer) && var_02.wagingplayer == self.name) + { + var_02.oichud_name settext(" "); + } + } + + if(var_00.size > 2) + { + maps\mp\_utility::func_2D68("mp_enemy_obj_captured"); + return; + } + + if(var_00.size == 2) + { + maps\mp\_utility::func_2D68("mp_obj_captured"); + var_00[0] thread maps\mp\gametypes\_hud_message::playercardsplashnotify("callout_lastenemyalive",var_00[1]); + var_00[1] thread maps\mp\gametypes\_hud_message::playercardsplashnotify("callout_lastenemyalive",var_00[0]); + } +} + +//Function Number: 16 +playerwager(param_00) +{ + level endon("game_ended"); + self endon("disconnect"); + if(param_00) + { + wait 7; + } + + self.oichud_button = createhudelem("^3[{+usereload}]^7",1.4,(0.8,0.8,0.8),0,-50,100); + self.oichud_text = createhudelem(&"MENU_SELECT",1.6,(0.8,0.8,0.8),0,-27,99); + self.oichud_name = createhudelem(" ",1.75,(0.25,0.75,0.25),0.75,-23,122); + thread hidebuttonsonfreespectate(); + self notifyonplayercommand("selected_player","+usereload"); + for(;;) + { + self waittill("selected_player"); + var_01 = self getspectatingplayer(); + if(isdefined(var_01)) + { + self.wagingplayer = var_01.name; + self.oichud_name settext(var_01.name); + self playlocalsound("recondrone_lockon"); + } + } +} + +//Function Number: 17 +createhudelem(param_00,param_01,param_02,param_03,param_04,param_05) +{ + var_06 = maps\mp\gametypes\_hud_util::createfontstring("small",param_01); + var_06 settext(param_00); + if(self issplitscreenplayer()) + { + param_05 = param_05 - 35; + } + + var_06 maps\mp\gametypes\_hud_util::setpoint("TOPLEFT","CENTER",param_04,param_05); + var_06.alpha = 0; + var_06.color = param_02; + var_06.glowcolor = param_02; + var_06.glowalpha = param_03; + var_06.archived = 0; + var_06.hidewheninmenu = 1; + level thread func_3535(var_06); + return var_06; +} + +//Function Number: 18 +hidebuttonsonfreespectate() +{ + level endon("game_ended"); + self endon("disconnect"); + for(;;) + { + var_00 = self getspectatingplayer(); + if(isdefined(var_00)) + { + self.oichud_button.alpha = 1; + self.oichud_text.alpha = 1; + self.oichud_name.alpha = 1; + } + else + { + self.oichud_button.alpha = 0; + self.oichud_text.alpha = 0; + self.oichud_name.alpha = 0; + } + + wait 0.05; + } +} + +//Function Number: 19 +func_3535(param_00) +{ + level waittill("game_ended"); + if(isdefined(param_00)) + { + param_00.alpha = 0; + } +} + +//Function Number: 20 +removescavenger() +{ + level endon("game_ended"); + self endon("disconnect"); + self endon("death"); + for(;;) + { + if(maps\mp\_utility::func_27AF("specialty_scavenger")) + { + maps\mp\_utility::func_282E("specialty_scavenger"); + } + + wait 0.05; + } +} + +//Function Number: 21 +finalthreeuav() +{ + level endon("game_ended"); + maps\mp\_utility::func_274B("prematch_done"); + maps\mp\_utility::func_274B("graceperiod_done"); + for(;;) + { + var_00 = []; + foreach(var_02 in level.players) + { + if(var_02.pers["deaths"] < maps\mp\_utility::getgametypenumlives() && var_02.oic_hasspawned) + { + var_00[var_00.size] = var_02; + } + } + + if(var_00.size < 4) + { + foreach(var_02 in var_00) + { + var_02 setclientdvars("g_compassShowEnemies",1); + } + + setdynamicdvar("scr_game_forceuav",1); + break; + } + + wait 0.5; + } +} + +//Function Number: 22 +func_351A() +{ + level.oic_gun = undefined; + var_00 = "none"; + if(isusingmatchrulesdata()) + { + var_00 = getmatchrulesdata("oicData","weapon"); + } + + if(isdefined(var_00) && var_00 != "none") + { + level.oic_gun = var_00; + } + else + { + level.oic_gun = "iw5_deserteagle"; + } + + if(level.oic_gun == "iw5_type95" || level.oic_gun == "iw5_m16") + { + level.matchrules_initialammo = level.matchrules_initialammo * 3; + level.matchrules_rewardammo = level.matchrules_rewardammo * 3; + } +} + +//Function Number: 23 +func_34B3() +{ + level.oic_loadouts["axis"]["loadoutPrimary"] = "iw5_acr"; + level.oic_loadouts["axis"]["loadoutPrimaryAttachment"] = "none"; + level.oic_loadouts["axis"]["loadoutPrimaryAttachment2"] = "none"; + level.oic_loadouts["axis"]["loadoutPrimaryBuff"] = "specialty_null"; + level.oic_loadouts["axis"]["loadoutPrimaryCamo"] = "none"; + level.oic_loadouts["axis"]["loadoutPrimaryReticle"] = "none"; + level.oic_loadouts["axis"]["loadoutSecondary"] = "none"; + level.oic_loadouts["axis"]["loadoutSecondaryAttachment"] = "none"; + level.oic_loadouts["axis"]["loadoutSecondaryAttachment2"] = "none"; + level.oic_loadouts["axis"]["loadoutSecondaryBuff"] = "specialty_null"; + level.oic_loadouts["axis"]["loadoutSecondaryCamo"] = "none"; + level.oic_loadouts["axis"]["loadoutSecondaryReticle"] = "none"; + level.oic_loadouts["axis"]["loadoutEquipment"] = "specialty_null"; + level.oic_loadouts["axis"]["loadoutOffhand"] = "none"; + if(maps\mp\_utility::matchmakinggame()) + { + level.oic_loadouts["axis"]["loadoutPerk1"] = "specialty_longersprint"; + level.oic_loadouts["axis"]["loadoutPerk2"] = "specialty_hardline"; + level.oic_loadouts["axis"]["loadoutPerk3"] = "specialty_null"; + level.oic_loadouts["axis"]["loadoutStreakType"] = "streaktype_specialist"; + level.oic_loadouts["axis"]["loadoutKillstreak1"] = "specialty_quickdraw_ks"; + level.oic_loadouts["axis"]["loadoutKillstreak2"] = "specialty_stalker_ks"; + level.oic_loadouts["axis"]["loadoutKillstreak3"] = "specialty_bulletaccuracy_ks"; + level.oic_loadouts["axis"]["loadoutDeathstreak"] = "specialty_juiced"; + } + else + { + level.oic_loadouts["axis"]["loadoutPerk1"] = "specialty_null"; + level.oic_loadouts["axis"]["loadoutPerk2"] = "specialty_null"; + level.oic_loadouts["axis"]["loadoutPerk3"] = "specialty_null"; + level.oic_loadouts["axis"]["loadoutDeathstreak"] = "specialty_null"; + } + + level.oic_loadouts["axis"]["loadoutJuggernaut"] = 0; + level.oic_loadouts["allies"] = level.oic_loadouts["axis"]; + level.gun_attachments = []; + level.gun_attachments["iw5_usp45"]["attach1"] = "tactical"; + level.gun_attachments["iw5_p99"]["attach1"] = "tactical"; + level.gun_attachments["iw5_fnfiveseven"]["attach1"] = "tactical"; + level.gun_attachments["iw5_44magnum"]["attach1"] = "tactical"; + level.gun_attachments["iw5_deserteagle"]["attach1"] = "tactical"; + level.gun_attachments["iw5_mp412"]["attach1"] = "tactical"; + level.gun_attachments["iw5_fmg9"]["attach1"] = "reflex"; + level.gun_attachments["iw5_skorpion"]["attach1"] = "reflex"; + level.gun_attachments["iw5_mp9"]["attach1"] = "reflex"; + level.gun_attachments["iw5_g18"]["attach1"] = "reflex"; + level.gun_attachments["iw5_mp5"]["attach1"] = "reflex"; + level.gun_attachments["iw5_m9"]["attach1"] = "reflex"; + level.gun_attachments["iw5_p90"]["attach1"] = "reflex"; + level.gun_attachments["iw5_pp90m1"]["attach1"] = "reflex"; + level.gun_attachments["iw5_ump45"]["attach1"] = "reflex"; + level.gun_attachments["iw5_mp7"]["attach1"] = "reflex"; + level.gun_attachments["iw5_ak47"]["attach1"] = "reflex"; + level.gun_attachments["iw5_m16"]["attach1"] = "reflex"; + level.gun_attachments["iw5_m4"]["attach1"] = "reflex"; + level.gun_attachments["iw5_fad"]["attach1"] = "reflex"; + level.gun_attachments["iw5_acr"]["attach1"] = "reflex"; + level.gun_attachments["iw5_type95"]["attach1"] = "reflex"; + level.gun_attachments["iw5_mk14"]["attach1"] = "reflex"; + level.gun_attachments["iw5_scar"]["attach1"] = "reflex"; + level.gun_attachments["iw5_g36c"]["attach1"] = "reflex"; + level.gun_attachments["iw5_cm901"]["attach1"] = "reflex"; + level.gun_attachments["iw5_ksg"]["attach1"] = "grip"; + level.gun_attachments["iw5_striker"]["attach1"] = "grip"; + level.gun_attachments["iw5_aa12"]["attach1"] = "grip"; + level.gun_attachments["iw5_usas12"]["attach1"] = "grip"; + level.gun_attachments["iw5_spas12"]["attach1"] = "grip"; + level.gun_attachments["iw5_m60"]["attach1"] = "grip"; + level.gun_attachments["iw5_m60"]["attach2"] = "reflex"; + level.gun_attachments["iw5_mk46"]["attach1"] = "grip"; + level.gun_attachments["iw5_mk46"]["attach2"] = "reflex"; + level.gun_attachments["iw5_pecheneg"]["attach1"] = "grip"; + level.gun_attachments["iw5_pecheneg"]["attach2"] = "reflex"; + level.gun_attachments["iw5_sa80"]["attach1"] = "grip"; + level.gun_attachments["iw5_sa80"]["attach2"] = "reflex"; + level.gun_attachments["iw5_mg36"]["attach1"] = "grip"; + level.gun_attachments["iw5_mg36"]["attach2"] = "reflex"; +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/gametypes/oneflag.gsc b/MW3/Xbox/MP/maps/mp/gametypes/oneflag.gsc new file mode 100644 index 0000000..9ed4fab --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/gametypes/oneflag.gsc @@ -0,0 +1,510 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\oneflag.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 23 + * Decompile Time: 315 ms + * Timestamp: 10/27/2023 2:26:19 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + maps\mp\gametypes\_globallogic::init(); + maps\mp\gametypes\_callbacksetup::setupcallbacks(); + maps\mp\gametypes\_globallogic::setupcallbacks(); + maps\mp\_utility::func_3315(level.gametype,3,0,1440); + maps\mp\_utility::registerscorelimitdvar(level.gametype,1,0,10000); + maps\mp\_utility::func_3312(level.gametype,0,0,30); + maps\mp\_utility::registerwinlimitdvar(level.gametype,4,0,10); + maps\mp\_utility::func_330E(level.gametype,3,0,30); + maps\mp\_utility::func_3317(level.gametype,0,0,10); + maps\mp\_utility::registerhalftimedvar(level.gametype,0,0,1); + level.objectivebased = 1; + level.teambased = 1; + level.onprecachegametype = ::onprecachegametype; + level.onstartgametype = ::onstartgametype; + level.getspawnpoint = ::getspawnpoint; + level.onspawnplayer = ::onspawnplayer; + level.onplayerkilled = ::onplayerkilled; + level.ontimelimit = ::ontimelimit; + level.initgametypeawards = ::initgametypeawards; + game["dialog"]["gametype"] = "oneflag"; + if(getdvarint("g_hardcore")) + { + game["dialog"]["gametype"] = "hc_" + game["dialog"]["gametype"]; + } + else if(getdvarint("camera_thirdPerson")) + { + game["dialog"]["gametype"] = "thirdp_" + game["dialog"]["gametype"]; + } + else if(getdvarint("scr_diehard")) + { + game["dialog"]["gametype"] = "dh_" + game["dialog"]["gametype"]; + } + else if(getdvarint("scr_" + level.gametype + "_promode")) + { + game["dialog"]["gametype"] = game["dialog"]["gametype"] + "_pro"; + } + + if(getdvar("scr_oneflag_returntime") == "") + { + setdvar("scr_oneflag_returntime","15"); + } + + level.flagreturntime = getdvarint("scr_oneflag_returntime"); +} + +//Function Number: 2 +onprecachegametype() +{ + precachestring(&"MP_FLAG_TAKEN_BY"); + precachestring(&"MP_ENEMY_FLAG_TAKEN_BY"); + precachestring(&"MP_FLAG_CAPTURED_BY"); + precachestring(&"MP_ENEMY_FLAG_CAPTURED_BY"); + precachestring(&"MP_FLAG_RETURNED"); + precachestring(&"MP_ENEMY_FLAG_RETURNED"); + precachestring(&"MP_YOUR_FLAG_RETURNING_IN"); + precachestring(&"MP_ENEMY_FLAG_RETURNING_IN"); + precachestring(&"MP_ENEMY_FLAG_DROPPED_BY"); + precachestring(&"MP_DOM_NEUTRAL_FLAG_CAPTURED"); +} + +//Function Number: 3 +onstartgametype() +{ + if(!isdefined(game["switchedsides"])) + { + game["switchedsides"] = 0; + } + + if(!isdefined(game["original_defenders"])) + { + game["original_defenders"] = game["defenders"]; + } + + if(game["switchedsides"]) + { + var_00 = game["attackers"]; + var_01 = game["defenders"]; + game["attackers"] = var_01; + game["defenders"] = var_00; + } + + setclientnamemode("auto_change"); + maps\mp\_utility::func_3305(game["attackers"],&"OBJECTIVES_CTF"); + maps\mp\_utility::func_3305(game["defenders"],&"OBJECTIVES_CTF"); + if(level.splitscreen) + { + maps\mp\_utility::func_3306(game["attackers"],&"OBJECTIVES_ONE_FLAG_ATTACKER"); + maps\mp\_utility::func_3306(game["defenders"],&"OBJECTIVES_ONE_FLAG_DEFENDER"); + } + else + { + maps\mp\_utility::func_3306(game["attackers"],&"OBJECTIVES_ONE_FLAG_ATTACKER_SCORE"); + maps\mp\_utility::func_3306(game["defenders"],&"OBJECTIVES_ONE_FLAG_DEFENDER_SCORE"); + } + + maps\mp\_utility::setobjectivehinttext(game["attackers"],&"OBJECTIVES_ONE_FLAG_ATTACKER_HINT"); + maps\mp\_utility::setobjectivehinttext(game["defenders"],&"OBJECTIVES_ONE_FLAG_DEFENDER_HINT"); + level.spawnmins = (0,0,0); + level.spawnmaxs = (0,0,0); + maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_ctf_spawn_allies_start"); + maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_ctf_spawn_axis_start"); + maps\mp\gametypes\_spawnlogic::func_2FD0("allies","mp_ctf_spawn_allies"); + maps\mp\gametypes\_spawnlogic::func_2FD0("axis","mp_ctf_spawn_axis"); + level.mapcenter = maps\mp\gametypes\_spawnlogic::func_2FCD(level.spawnmins,level.spawnmaxs); + setmapcenter(level.mapcenter); + var_02[0] = "ctf"; + maps\mp\gametypes\_gameobjects::main(var_02); + maps\mp\gametypes\_rank::registerscoreinfo("kill",100); + maps\mp\gametypes\_rank::registerscoreinfo("headshot",100); + maps\mp\gametypes\_rank::registerscoreinfo("assist",20); + maps\mp\gametypes\_rank::registerscoreinfo("pickup",100); + maps\mp\gametypes\_rank::registerscoreinfo("return",50); + maps\mp\gametypes\_rank::registerscoreinfo("capture",500); + maps\mp\gametypes\_rank::registerscoreinfo("kill_carrier",100); + maps\mp\gametypes\_rank::registerscoreinfo("defend",100); + maps\mp\gametypes\_rank::registerscoreinfo("defend_assist",100); + maps\mp\gametypes\_rank::registerscoreinfo("assault",200); + maps\mp\gametypes\_rank::registerscoreinfo("assault_assist",40); + thread func_34E0(); +} + +//Function Number: 4 +getspawnpoint() +{ + var_00 = self.pers["team"]; + if(game["switchedsides"]) + { + var_00 = maps\mp\_utility::getotherteam(var_00); + } + + if(level.ingraceperiod) + { + var_01 = getentarray("mp_ctf_spawn_" + var_00 + "_start","classname"); + var_02 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random(var_01); + } + else + { + var_01 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints(var_02); + var_02 = maps\mp\gametypes\_spawnlogic::func_2FE6(var_02); + } + + return var_02; +} + +//Function Number: 5 +onspawnplayer() +{ + self.usingobj = undefined; +} + +//Function Number: 6 +func_34E0() +{ + level.flagmodel["allies"] = maps\mp\gametypes\_teams::func_2774("allies"); + level.icon2d["allies"] = maps\mp\gametypes\_teams::func_2776("allies"); + level.carryflag["allies"] = maps\mp\gametypes\_teams::func_2775("allies"); + precachemodel(level.flagmodel["allies"]); + precachemodel(level.carryflag["allies"]); + level.flagmodel["axis"] = maps\mp\gametypes\_teams::func_2774("axis"); + level.icon2d["axis"] = maps\mp\gametypes\_teams::func_2776("axis"); + level.carryflag["axis"] = maps\mp\gametypes\_teams::func_2775("axis"); + precachemodel(level.flagmodel["axis"]); + precachemodel(level.carryflag["axis"]); + level.iconcapture3d = "waypoint_capture"; + level.iconcapture2d = "compass_waypoint_capture"; + level.icondefend3d = "waypoint_defend"; + level.icondefend2d = "compass_waypoint_defend"; + level.icontarget3d = "waypoint_target"; + level.icontarget2d = "compass_waypoint_target"; + precacheshader(level.icon2d["axis"]); + precacheshader(level.icon2d["allies"]); + precacheshader(level.iconcapture3d); + precacheshader(level.icondefend3d); + precacheshader(level.iconcapture2d); + precacheshader(level.icondefend2d); + precacheshader(level.icontarget3d); + precacheshader(level.icontarget2d); + precacheshader("waypoint_kill"); + level.teamflags[game["defenders"]] = func_34EC(game["defenders"]); + level.capzones[game["attackers"]] = func_34ED(game["attackers"]); + level.flagcaptured = 0; +} + +//Function Number: 7 +func_3084(param_00,param_01,param_02,param_03,param_04) +{ + wait param_04; + var_05 = spawnfx(param_00,param_01,param_02,param_03); + triggerfx(var_05); +} + +//Function Number: 8 +func_34EC(param_00) +{ + var_01 = game["original_defenders"]; + var_02 = getent("ctf_trig_" + var_01,"targetname"); + if(!isdefined(var_02)) + { + common_scripts\utility::error("No ctf_trig_" + var_01 + " trigger found in map."); + return; + } + + var_03[0] = getent("ctf_flag_" + var_01,"targetname"); + if(!isdefined(var_03[0])) + { + common_scripts\utility::error("No ctf_flag_" + var_01 + " script_model found in map."); + return; + } + + var_04 = spawn("trigger_radius",var_02.origin,0,96,var_02.height); + var_02 delete(); + var_02 = var_04; + var_03[0] setmodel(level.flagmodel[param_00]); + var_05 = maps\mp\gametypes\_gameobjects::func_29A8(param_00,var_02,var_03,(0,0,85)); + var_05 maps\mp\gametypes\_gameobjects::func_2A18("friendly",15); + var_05 maps\mp\gametypes\_gameobjects::func_2A18("enemy",0); + var_05 maps\mp\gametypes\_gameobjects::setteamusetext("enemy",&"MP_CAPTURING_FLAG"); + var_05 maps\mp\gametypes\_gameobjects::setteamusetext("friendly",&"MP_RETURNING_FLAG"); + var_05 maps\mp\gametypes\_gameobjects::allowcarry("enemy"); + var_05 maps\mp\gametypes\_gameobjects::setvisibleteam("any"); + var_05 maps\mp\gametypes\_gameobjects::set2dicon("friendly",level.icondefend2d); + var_05 maps\mp\gametypes\_gameobjects::func_2A25("friendly",level.icondefend3d); + var_05 maps\mp\gametypes\_gameobjects::set2dicon("enemy",level.iconcapture2d); + var_05 maps\mp\gametypes\_gameobjects::func_2A25("enemy",level.iconcapture3d); + var_05 maps\mp\gametypes\_gameobjects::setcarryicon(level.icon2d[param_00]); + var_05.allowweapons = 1; + var_05.onpickup = ::onpickup; + var_05.onpickupfailed = ::onpickup; + var_05.ondrop = ::ondrop; + var_05.onreset = ::onreset; + var_05.oldradius = var_02.radius; + var_06 = var_02.origin + (0,0,32); + var_07 = var_02.origin + (0,0,-32); + var_08 = bullettrace(var_06,var_07,0,undefined); + var_09 = maps\mp\gametypes\_teams::func_2777(param_00); + var_0A = loadfx(var_09); + var_0B = vectortoangles(var_08["normal"]); + var_0C = anglestoforward(var_0B); + var_0D = anglestoright(var_0B); + thread func_3084(var_0A,var_08["position"],var_0C,var_0D,0.5); + return var_05; +} + +//Function Number: 9 +func_34ED(param_00) +{ + var_01 = level.otherteam[game["original_defenders"]]; + var_02 = getent("ctf_zone_" + var_01,"targetname"); + if(!isdefined(var_02)) + { + common_scripts\utility::error("No ctf_zone_" + var_01 + " trigger found in map."); + return; + } + + var_03[0] = getent("ctf_flag_" + var_01,"targetname"); + if(!isdefined(var_03[0])) + { + common_scripts\utility::error("No ctf_flag_" + var_01 + " script_model found in map."); + return; + } + + var_03[0] hide(); + var_03 = []; + var_04 = maps\mp\gametypes\_gameobjects::func_29E7(param_00,var_02,var_03,(0,0,85)); + var_04 maps\mp\gametypes\_gameobjects::allowuse("friendly"); + var_04 maps\mp\gametypes\_gameobjects::setvisibleteam("none"); + var_04 maps\mp\gametypes\_gameobjects::set2dicon("friendly",level.icontarget2d); + var_04 maps\mp\gametypes\_gameobjects::func_2A25("friendly",level.icontarget3d); + var_04 maps\mp\gametypes\_gameobjects::setusetime(0); + var_04 maps\mp\gametypes\_gameobjects::func_29EC(level.teamflags[maps\mp\_utility::getotherteam(param_00)]); + var_04.onuse = ::onuse; + var_04.oncantuse = ::oncantuse; + var_05 = var_02.origin + (0,0,32); + var_06 = var_02.origin + (0,0,-32); + var_07 = bullettrace(var_05,var_06,0,undefined); + var_08 = maps\mp\gametypes\_teams::func_2777(param_00); + var_09 = loadfx(var_08); + var_0A = vectortoangles(var_07["normal"]); + var_0B = anglestoforward(var_0A); + var_0C = anglestoright(var_0A); + thread func_3084(var_09,var_07["position"],var_0B,var_0C,0.5); + return var_04; +} + +//Function Number: 10 +onbeginuse(param_00) +{ + var_01 = param_00.pers["team"]; + if(var_01 == maps\mp\gametypes\_gameobjects::func_2A15()) + { + self.trigger.radius = 1024; + return; + } + + self.trigger.radius = self.oldradius; +} + +//Function Number: 11 +onenduse(param_00,param_01,param_02) +{ + self.trigger.radius = self.oldradius; +} + +//Function Number: 12 +onpickup(param_00) +{ + var_01 = param_00.pers["team"]; + if(var_01 == "allies") + { + var_02 = "axis"; + } + else + { + var_02 = "allies"; + } + + if(var_01 == maps\mp\gametypes\_gameobjects::func_2A15()) + { + param_00 thread maps\mp\gametypes\_hud_message::func_2892("flagreturn",maps\mp\gametypes\_rank::getscoreinfovalue("pickup")); + param_00 thread [[ level.onxpevent ]]("pickup"); + thread func_34EE(); + param_00 maps\mp\_utility::incplayerstat("flagsreturned",1); + param_00 thread maps\mp\_matchdata::loggameevent("return",param_00.origin); + return; + } + + param_00 func_34EF(); + level.capzones[var_01] maps\mp\gametypes\_gameobjects::setvisibleteam("any"); + maps\mp\gametypes\_gameobjects::func_2A25("enemy","waypoint_defend"); + maps\mp\gametypes\_gameobjects::func_2A25("friendly","waypoint_kill"); + maps\mp\gametypes\_gameobjects::set2dicon("friendly",level.icontarget2d); + maps\mp\_utility::func_32F9(var_01,var_02,&"MP_ENEMY_FLAG_TAKEN_BY",&"MP_FLAG_TAKEN_BY","mp_obj_taken","mp_enemy_obj_taken",param_00); + maps\mp\_utility::func_26E5("enemy_flag_taken",var_01,"status"); + maps\mp\_utility::func_26E5("flag_taken",var_02,"status"); + param_00 thread maps\mp\gametypes\_hud_message::func_2892("flagpickup",maps\mp\gametypes\_rank::getscoreinfovalue("pickup")); + maps\mp\gametypes\_gamescore::func_26D3("pickup",param_00); + param_00 thread [[ level.onxpevent ]]("pickup"); + param_00 maps\mp\_utility::incplayerstat("flagscarried",1); + param_00 thread maps\mp\_matchdata::loggameevent("pickup",param_00.origin); +} + +//Function Number: 13 +func_34EE() +{ + var_00 = maps\mp\gametypes\_gameobjects::func_2A15(); + var_01 = level.otherteam[var_00]; + maps\mp\gametypes\_gameobjects::func_29D7(); + maps\mp\gametypes\_gameobjects::setvisibleteam("any"); + maps\mp\gametypes\_gameobjects::allowcarry("enemy"); + level.capzones[var_01] maps\mp\gametypes\_gameobjects::setvisibleteam("none"); + maps\mp\_utility::func_32F9(var_00,maps\mp\_utility::getotherteam(var_00),&"MP_FLAG_RETURNED",&"MP_ENEMY_FLAG_RETURNED","mp_obj_returned","mp_obj_returned",""); + maps\mp\_utility::func_26E5("enemy_flag_returned",var_01,"status"); + maps\mp\_utility::func_26E5("flag_returned",var_00,"status"); +} + +//Function Number: 14 +ondrop(param_00) +{ + var_01 = maps\mp\gametypes\_gameobjects::func_2A15(); + var_02 = level.otherteam[var_01]; + maps\mp\gametypes\_gameobjects::func_2A25("friendly",level.icondefend3d); + maps\mp\gametypes\_gameobjects::set2dicon("friendly",level.icondefend2d); + maps\mp\gametypes\_gameobjects::func_2A25("enemy",level.iconcapture3d); + maps\mp\gametypes\_gameobjects::setvisibleteam("any"); + maps\mp\gametypes\_gameobjects::allowcarry("any"); + level.capzones[var_02] maps\mp\gametypes\_gameobjects::setvisibleteam("none"); + if(isdefined(param_00)) + { + if(isdefined(param_00.carryflag)) + { + param_00 func_34F0(); + } + + maps\mp\_utility::func_32F9(var_02,"none",&"MP_ENEMY_FLAG_DROPPED_BY","","mp_war_objective_lost","",param_00); + } + else + { + maps\mp\_utility::func_2D68("mp_war_objective_lost",var_02); + } + + maps\mp\_utility::func_26E5("enemy_flag_dropped",var_02,"status"); + maps\mp\_utility::func_26E5("flag_dropped",var_01,"status"); +} + +//Function Number: 15 +onreset() +{ + self notify("flag_reset"); + var_00 = maps\mp\gametypes\_gameobjects::func_2A15(); + var_01 = level.otherteam[var_00]; + maps\mp\gametypes\_gameobjects::setvisibleteam("any"); + maps\mp\gametypes\_gameobjects::func_2A25("friendly",level.icondefend3d); + maps\mp\gametypes\_gameobjects::set2dicon("friendly",level.icondefend2d); + maps\mp\gametypes\_gameobjects::func_2A25("enemy",level.iconcapture3d); + level.capzones[var_01] maps\mp\gametypes\_gameobjects::setvisibleteam("none"); +} + +//Function Number: 16 +onuse(param_00) +{ + var_01 = param_00.pers["team"]; + if(var_01 == "allies") + { + var_02 = "axis"; + } + else + { + var_02 = "allies"; + } + + maps\mp\_utility::func_26E5("enemy_flag_captured",var_01,"status"); + maps\mp\_utility::func_26E5("flag_captured",var_02,"status"); + maps\mp\gametypes\_gamescore::func_26D3("capture",param_00); + param_00 thread [[ level.onxpevent ]]("capture"); + param_00 maps\mp\_utility::incplayerstat("flagscaptured",1); + param_00 notify("objective","captured"); + param_00 thread maps\mp\_matchdata::loggameevent("capture",param_00.origin); + maps\mp\_utility::func_32F9(var_01,var_02,&"MP_ENEMY_FLAG_CAPTURED_BY",&"MP_FLAG_CAPTURED_BY","mp_obj_captured","mp_enemy_obj_captured",param_00); + thread flagcaptured(var_01,&"MP_DOM_NEUTRAL_FLAG_CAPTURED"); + level.teamflags[var_02] maps\mp\gametypes\_gameobjects::allowcarry("none"); + level.teamflags[var_02] maps\mp\gametypes\_gameobjects::setvisibleteam("none"); + level.teamflags[var_02] maps\mp\gametypes\_gameobjects::disableobject(); + level.capzones[var_01] maps\mp\gametypes\_gameobjects::allowuse("none"); + if(isdefined(param_00.carryflag)) + { + param_00 func_34F0(); + } +} + +//Function Number: 17 +flagcaptured(param_00,param_01) +{ + maps\mp\gametypes\_gamelogic::endgame(param_00,param_01); + level.flagcaptured = 1; +} + +//Function Number: 18 +ontimelimit() +{ + if(level.flagcaptured) + { + return; + } + + maps\mp\gametypes\_gamelogic::endgame(game["defenders"],game["strings"]["time_limit_reached"]); +} + +//Function Number: 19 +oncantuse(param_00) +{ +} + +//Function Number: 20 +onplayerkilled(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09) +{ + if(isdefined(param_01) && isplayer(param_01) && param_01.pers["team"] != self.pers["team"]) + { + if(isdefined(param_01.carryflag)) + { + param_01 maps\mp\_utility::incplayerstat("killsasflagcarrier",1); + } + + if(isdefined(self.carryflag)) + { + param_01 thread [[ level.onxpevent ]]("kill_carrier"); + maps\mp\gametypes\_gamescore::func_26D3("kill_carrier",param_01); + param_01 maps\mp\_utility::incplayerstat("flagcarrierkills",1); + thread maps\mp\_matchdata::func_28B4(param_09,"carrying"); + func_34F0(); + } + } +} + +//Function Number: 21 +func_34EF() +{ + var_00 = level.otherteam[self.pers["team"]]; + self attach(level.carryflag[var_00],"J_spine4",1); + self.carryflag = level.carryflag[var_00]; +} + +//Function Number: 22 +func_34F0() +{ + self detach(self.carryflag,"J_spine4"); + self.carryflag = undefined; +} + +//Function Number: 23 +initgametypeawards() +{ + maps\mp\_awards::func_2D85("flagscaptured",0,::maps\mp\_awards::func_2DA7); + maps\mp\_awards::func_2D85("flagsreturned",0,::maps\mp\_awards::func_2DA7); + maps\mp\_awards::func_2D85("flagcarrierkills",0,::maps\mp\_awards::func_2DA7); + maps\mp\_awards::func_2D85("flagscarried",0,::maps\mp\_awards::func_2DA7); + maps\mp\_awards::func_2D85("killsasflagcarrier",0,::maps\mp\_awards::func_2DA7); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/gametypes/sab.gsc b/MW3/Xbox/MP/maps/mp/gametypes/sab.gsc new file mode 100644 index 0000000..39017d4 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/gametypes/sab.gsc @@ -0,0 +1,1022 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\sab.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 37 + * Decompile Time: 1234 ms + * Timestamp: 10/27/2023 2:26:23 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(getdvar("mapname") == "mp_background") + { + return; + } + + maps\mp\gametypes\_globallogic::init(); + maps\mp\gametypes\_callbacksetup::setupcallbacks(); + maps\mp\gametypes\_globallogic::setupcallbacks(); + level.teambased = 1; + if(isusingmatchrulesdata()) + { + level.initializematchrules = ::initializematchrules; + [[ level.initializematchrules ]](); + level thread maps\mp\_utility::func_810A(); + } + else + { + maps\mp\_utility::func_330E(level.gametype,0,0,9); + maps\mp\_utility::func_3315(level.gametype,10); + maps\mp\_utility::registerscorelimitdvar(level.gametype,0); + maps\mp\_utility::func_3312(level.gametype,1); + maps\mp\_utility::registerwinlimitdvar(level.gametype,1); + maps\mp\_utility::func_3317(level.gametype,0); + maps\mp\_utility::registerhalftimedvar(level.gametype,0); + level.matchrules_damagemultiplier = 0; + level.matchrules_vampirism = 0; + } + + maps\mp\_utility::func_3318(2); + func_34B3(); + level.onprecachegametype = ::onprecachegametype; + level.onstartgametype = ::onstartgametype; + level.getspawnpoint = ::getspawnpoint; + level.onspawnplayer = ::onspawnplayer; + level.ononeleftevent = ::ononeleftevent; + level.ontimelimit = ::ontimelimit; + level.onnormaldeath = ::onnormaldeath; + level.initgametypeawards = ::initgametypeawards; + if(level.matchrules_damagemultiplier || level.matchrules_vampirism) + { + level.modifyplayerdamage = ::maps\mp\gametypes\_damage::func_2D57; + } + + game["dialog"]["gametype"] = "sabotage"; + if(getdvarint("g_hardcore")) + { + game["dialog"]["gametype"] = "hc_" + game["dialog"]["gametype"]; + } + else if(getdvarint("camera_thirdPerson")) + { + game["dialog"]["gametype"] = "thirdp_" + game["dialog"]["gametype"]; + } + else if(getdvarint("scr_diehard")) + { + game["dialog"]["gametype"] = "dh_" + game["dialog"]["gametype"]; + } + else if(getdvarint("scr_" + level.gametype + "_promode")) + { + game["dialog"]["gametype"] = game["dialog"]["gametype"] + "_pro"; + } + + game["dialog"]["offense_obj"] = "capture_obj"; + game["dialog"]["defense_obj"] = "capture_obj"; + var_00 = getent("sab_bomb_defuse_allies","targetname"); + if(isdefined(var_00)) + { + var_00 delete(); + } + + var_00 = getent("sab_bomb_defuse_axis","targetname"); + if(isdefined(var_00)) + { + var_00 delete(); + } + + makedvarserverinfo("ui_bomb_timer_endtime",-1); +} + +//Function Number: 2 +initializematchrules() +{ + maps\mp\_utility::func_334C(); + setdynamicdvar("scr_sab_bombtimer",getmatchrulesdata("sabData","bombTimer")); + setdynamicdvar("scr_sab_planttime",getmatchrulesdata("sabData","plantTime")); + setdynamicdvar("scr_sab_defusetime",getmatchrulesdata("sabData","defuseTime")); + setdynamicdvar("scr_sab_hotpotato",getmatchrulesdata("sabData","sharedBombTimer")); + setdynamicdvar("scr_sab_roundswitch",1); + maps\mp\_utility::func_330E("sab",1,0,9); + setdynamicdvar("scr_sab_roundlimit",1); + maps\mp\_utility::func_3312("sab",1); + setdynamicdvar("scr_sab_winlimit",1); + maps\mp\_utility::registerwinlimitdvar("sab",1); + setdynamicdvar("scr_sab_halftime",0); + maps\mp\_utility::registerhalftimedvar("sab",0); + setdynamicdvar("scr_sab_promode",0); +} + +//Function Number: 3 +onprecachegametype() +{ + game["bomb_dropped_sound"] = "mp_war_objective_lost"; + game["bomb_recovered_sound"] = "mp_war_objective_taken"; + precacheshader("waypoint_bomb"); + precacheshader("waypoint_kill"); + precacheshader("waypoint_bomb_enemy"); + precacheshader("waypoint_defend"); + precacheshader("waypoint_defuse"); + precacheshader("waypoint_target"); + precacheshader("waypoint_escort"); + precacheshader("waypoint_bomb"); + precacheshader("waypoint_defend"); + precacheshader("waypoint_defuse"); + precacheshader("waypoint_target"); + precacheshader("hud_suitcase_bomb"); + precachestring(&"MP_EXPLOSIVES_RECOVERED_BY"); + precachestring(&"MP_EXPLOSIVES_DROPPED_BY"); + precachestring(&"MP_EXPLOSIVES_PLANTED_BY"); + precachestring(&"MP_EXPLOSIVES_DEFUSED_BY"); + precachestring(&"MP_YOU_HAVE_RECOVERED_THE_BOMB"); + precachestring(&"PLATFORM_HOLD_TO_PLANT_EXPLOSIVES"); + precachestring(&"PLATFORM_HOLD_TO_DEFUSE_EXPLOSIVES"); + precachestring(&"MP_PLANTING_EXPLOSIVE"); + precachestring(&"MP_DEFUSING_EXPLOSIVE"); + precachestring(&"MP_TARGET_DESTROYED"); + precachestring(&"MP_NO_RESPAWN"); + precachestring(&"MP_TIE_BREAKER"); + precachestring(&"MP_NO_RESPAWN"); + precachestring(&"MP_SUDDEN_DEATH"); +} + +//Function Number: 4 +onstartgametype() +{ + if(!isdefined(game["switchedsides"])) + { + game["switchedsides"] = 0; + } + + setclientnamemode("auto_change"); + game["strings"]["target_destroyed"] = &"MP_TARGET_DESTROYED"; + game["strings"]["target_defended"] = &"MP_TARGET_DEDEFEND"; + maps\mp\_utility::func_3305("allies",&"OBJECTIVES_SAB"); + maps\mp\_utility::func_3305("axis",&"OBJECTIVES_SAB"); + if(level.splitscreen) + { + maps\mp\_utility::func_3306("allies",&"OBJECTIVES_SAB"); + maps\mp\_utility::func_3306("axis",&"OBJECTIVES_SAB"); + } + else + { + maps\mp\_utility::func_3306("allies",&"OBJECTIVES_SAB_SCORE"); + maps\mp\_utility::func_3306("axis",&"OBJECTIVES_SAB_SCORE"); + } + + maps\mp\_utility::setobjectivehinttext("allies",&"OBJECTIVES_SAB_HINT"); + maps\mp\_utility::setobjectivehinttext("axis",&"OBJECTIVES_SAB_HINT"); + level.spawnmins = (0,0,0); + level.spawnmaxs = (0,0,0); + maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_sab_spawn_allies_start"); + maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_sab_spawn_axis_start"); + maps\mp\gametypes\_spawnlogic::func_2FD0("allies","mp_sab_spawn_allies"); + maps\mp\gametypes\_spawnlogic::func_2FD0("axis","mp_sab_spawn_axis"); + maps\mp\gametypes\_spawnlogic::func_2FD0("allies","mp_sab_spawn_allies_planted",1); + maps\mp\gametypes\_spawnlogic::func_2FD0("axis","mp_sab_spawn_axis_planted",1); + level.mapcenter = maps\mp\gametypes\_spawnlogic::func_2FCD(level.spawnmins,level.spawnmaxs); + setmapcenter(level.mapcenter); + level.spawn_axis = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_sab_spawn_axis"); + level.spawn_axis_planted = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_sab_spawn_axis_planted"); + level.spawn_axis_planted = common_scripts\utility::array_combine(level.spawn_axis_planted,level.spawn_axis); + level.spawn_allies = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_sab_spawn_allies"); + level.spawn_allies_planted = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_sab_spawn_allies_planted"); + level.spawn_allies_planted = common_scripts\utility::array_combine(level.spawn_allies_planted,level.spawn_allies); + level.spawn_axis_start = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_sab_spawn_axis_start"); + level.spawn_allies_start = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_sab_spawn_allies_start"); + maps\mp\gametypes\_rank::registerscoreinfo("plant",200); + maps\mp\gametypes\_rank::registerscoreinfo("destroy",1000); + maps\mp\gametypes\_rank::registerscoreinfo("defuse",150); + var_00[0] = "sab"; + maps\mp\gametypes\_gameobjects::main(var_00); + thread func_2F0E(); + thread sabotage(); +} + +//Function Number: 5 +getspawnpoint() +{ + var_00 = self.pers["team"]; + if(game["switchedsides"]) + { + var_00 = maps\mp\_utility::getotherteam(var_00); + } + + if(level.usestartspawns) + { + if(var_00 == "axis") + { + var_01 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random(level.spawn_axis_start); + } + else + { + var_01 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random(level.spawn_allies_start); + } + } + else if(isdefined(level.bombplanted) && level.bombplanted && isdefined(level.bombowner) && var_01 == level.bombowner.team) + { + if(var_01 == "axis") + { + var_01 = maps\mp\gametypes\_spawnlogic::func_2FE6(level.spawn_axis_planted); + } + else + { + var_01 = maps\mp\gametypes\_spawnlogic::func_2FE6(level.spawn_allies_planted); + } + } + else if(var_01 == "axis") + { + var_01 = maps\mp\gametypes\_spawnlogic::func_2FE6(level.spawn_axis); + } + else + { + var_01 = maps\mp\gametypes\_spawnlogic::func_2FE6(level.spawn_allies); + } + + return var_01; +} + +//Function Number: 6 +onspawnplayer() +{ + self.isplanting = 0; + self.isdefusing = 0; + self.isbombcarrier = 0; + if(maps\mp\_utility::inovertime() && !isdefined(self.otspawned)) + { + thread func_34A3(); + } +} + +//Function Number: 7 +func_34A3() +{ + self endon("disconnect"); + wait 0.25; + thread maps\mp\gametypes\_hud_message::func_2892("sudden_death"); + self.otspawned = 1; +} + +//Function Number: 8 +func_2F0E() +{ + level.planttime = maps\mp\_utility::dvarfloatvalue("planttime",5,0,20); + level.defusetime = maps\mp\_utility::dvarfloatvalue("defusetime",5,0,20); + level.bombtimer = maps\mp\_utility::dvarfloatvalue("bombtimer",45,1,300); + level.hotpotato = maps\mp\_utility::func_32FD("hotpotato",1,0,1); + level.scoremode = maps\mp\_utility::func_18D0("scorelimit"); +} + +//Function Number: 9 +sabotage() +{ + level.bombplanted = 0; + level.bombexploded = 0; + level._effect["bombexplosion"] = loadfx("explosions/tanker_explosion"); + var_00 = getent("sab_bomb_pickup_trig","targetname"); + if(!isdefined(var_00)) + { + common_scripts\utility::error("No sab_bomb_pickup_trig trigger found in map."); + return; + } + + var_01[0] = getent("sab_bomb","targetname"); + if(!isdefined(var_01[0])) + { + common_scripts\utility::error("No sab_bomb script_model found in map."); + return; + } + + precachemodel("prop_suitcase_bomb"); + var_01[0] setmodel("prop_suitcase_bomb"); + level.sabbomb = maps\mp\gametypes\_gameobjects::func_29A8("neutral",var_00,var_01,(0,0,32)); + level.sabbomb maps\mp\gametypes\_gameobjects::allowcarry("any"); + level.sabbomb maps\mp\gametypes\_gameobjects::set2dicon("enemy","waypoint_bomb"); + level.sabbomb maps\mp\gametypes\_gameobjects::func_2A25("enemy","waypoint_bomb"); + level.sabbomb maps\mp\gametypes\_gameobjects::set2dicon("friendly","waypoint_bomb"); + level.sabbomb maps\mp\gametypes\_gameobjects::func_2A25("friendly","waypoint_bomb"); + level.sabbomb maps\mp\gametypes\_gameobjects::setcarryicon("hud_suitcase_bomb"); + level.sabbomb maps\mp\gametypes\_gameobjects::setvisibleteam("any"); + level.sabbomb.objidpingenemy = 1; + level.sabbomb.onpickup = ::onpickup; + level.sabbomb.ondrop = ::ondrop; + level.sabbomb.allowweapons = 1; + level.sabbomb.objpoints["allies"].archived = 1; + level.sabbomb.objpoints["axis"].archived = 1; + level.sabbomb.autoresettime = 60; + if(!isdefined(getent("sab_bomb_axis","targetname"))) + { + common_scripts\utility::error("No sab_bomb_axis trigger found in map."); + return; + } + + if(!isdefined(getent("sab_bomb_allies","targetname"))) + { + common_scripts\utility::error("No sab_bomb_allies trigger found in map."); + return; + } + + if(game["switchedsides"]) + { + level.bombzones["allies"] = func_34AC("allies",getent("sab_bomb_axis","targetname")); + level.bombzones["axis"] = func_34AC("axis",getent("sab_bomb_allies","targetname")); + } + else + { + level.bombzones["allies"] = func_34AC("allies",getent("sab_bomb_allies","targetname")); + level.bombzones["axis"] = func_34AC("axis",getent("sab_bomb_axis","targetname")); + } + + if(level.scoremode) + { + level thread func_34AA(); + } + + if(maps\mp\_utility::inovertime()) + { + level thread func_34AE(); + } +} + +//Function Number: 10 +func_34A8() +{ + if(distance2d(self.origin,level.bombzones["allies"].trigger.origin) < distance2d(self.origin,level.bombzones["axis"].trigger.origin)) + { + return "allies"; + } + + return "axis"; +} + +//Function Number: 11 +distancetosite(param_00) +{ + return distance2d(self.origin,level.bombzones[param_00].trigger.origin); +} + +//Function Number: 12 +func_34AA() +{ + level.bombdistance = distance2d(getent("sab_bomb_axis","targetname") getorigin(),getent("sab_bomb_allies","targetname") getorigin()); + var_00 = level.bombdistance / 2 - 384; + var_01 = level.sabbomb.trigger; + if(var_00 > var_01 distancetosite("allies") || var_00 > var_01 distancetosite("axis")) + { + var_00 = var_01 distancetosite(var_01 func_34A8()) - 128; + } + + var_02 = ""; + for(;;) + { + if(isdefined(level.sabbomb.carrier)) + { + var_01 = level.sabbomb.carrier; + } + else + { + var_01 = level.sabbomb.trigger; + } + + var_03 = var_02; + var_02 = "none"; + if(var_01 distancetosite("allies") < var_00) + { + var_02 = level.bombzones["allies"] maps\mp\gametypes\_gameobjects::func_2A15(); + } + else if(var_01 distancetosite("axis") < var_00) + { + var_02 = level.bombzones["axis"] maps\mp\gametypes\_gameobjects::func_2A15(); + } + else if(var_01 distancetosite("allies") > level.bombdistance && var_01 func_34A8() != "allies") + { + var_02 = level.bombzones["axis"] maps\mp\gametypes\_gameobjects::func_2A15(); + } + else if(var_01 distancetosite("axis") > level.bombdistance && var_01 func_34A8() != "axis") + { + var_02 = level.bombzones["allies"] maps\mp\gametypes\_gameobjects::func_2A15(); + } + + if(var_02 != "none") + { + if(!level.bombplanted || !maps\mp\_utility::func_18D0("scorelimit") || level.bombplanted && maps\mp\gametypes\_gamescore::func_26EE(level.otherteam[var_02]) < maps\mp\_utility::func_18D0("scorelimit") - 1) + { + maps\mp\gametypes\_gamescore::_setteamscore(level.otherteam[var_02],maps\mp\gametypes\_gamescore::func_26EE(level.otherteam[var_02]) + 1); + maps\mp\gametypes\_gamescore::func_26EB(level.otherteam[var_02]); + } + } + + if(var_02 != var_03 && !level.bombexploded) + { + setdvar("ui_danger_team",var_02); + } + + wait 2.5; + } +} + +//Function Number: 13 +func_34AC(param_00,param_01) +{ + var_02 = getentarray(param_01.target,"targetname"); + var_03 = maps\mp\gametypes\_gameobjects::func_29E7(param_00,param_01,var_02,(0,0,64)); + var_03 func_34B1(); + var_03.onuse = ::onuse; + var_03.onbeginuse = ::onbeginuse; + var_03.onenduse = ::onenduse; + var_03.oncantuse = ::oncantuse; + var_03.useweapon = "briefcase_bomb_mp"; + for(var_04 = 0;var_04 < var_02.size;var_04++) + { + if(isdefined(var_02[var_04].script_exploder)) + { + var_03.exploderindex = var_02[var_04].script_exploder; + var_02[var_04] thread func_3491(); + break; + } + } + + return var_03; +} + +//Function Number: 14 +func_3491() +{ + var_00 = spawn("script_origin",self.origin); + var_00.angles = self.angles; + var_00 rotateyaw(-45,0.05); + wait 0.05; + var_01 = self.origin + (0,0,5); + var_02 = self.origin + anglestoforward(var_00.angles) * 100 + (0,0,128); + var_03 = bullettrace(var_01,var_02,0,self); + self.killcament = spawn("script_model",var_03["position"]); + self.killcament setscriptmoverkillcam("explosive"); + var_00 delete(); +} + +//Function Number: 15 +onbeginuse(param_00) +{ + if(!maps\mp\gametypes\_gameobjects::isfriendlyteam(param_00.pers["team"])) + { + param_00.isplanting = 1; + return; + } + + param_00.isdefusing = 1; +} + +//Function Number: 16 +onenduse(param_00,param_01,param_02) +{ + if(!isalive(param_01)) + { + return; + } + + param_01.isplanting = 0; + param_01.isdefusing = 0; +} + +//Function Number: 17 +onpickup(param_00) +{ + level notify("bomb_picked_up"); + self.autoresettime = 60; + level.usestartspawns = 0; + var_01 = param_00.pers["team"]; + if(var_01 == "allies") + { + var_02 = "axis"; + } + else + { + var_02 = "allies"; + } + + param_00 playlocalsound("mp_suitcase_pickup"); + param_00 maps\mp\_utility::func_2A60("obj_destroy","bomb"); + var_03[0] = param_00; + maps\mp\_utility::func_26E5("bomb_taken",var_01,"bomb",var_03); + if(!level.splitscreen) + { + maps\mp\_utility::func_26E5("bomb_lost",var_02,"bomb"); + maps\mp\_utility::func_26E5("obj_defend",var_02,"bomb"); + } + + param_00.isbombcarrier = 1; + if(isdefined(level.sab_loadouts) && isdefined(level.sab_loadouts[var_01])) + { + param_00 thread func_3496(); + } + + if(var_01 == maps\mp\gametypes\_gameobjects::func_2A15()) + { + maps\mp\_utility::func_2D68(game["bomb_recovered_sound"],var_01); + } + else + { + maps\mp\_utility::func_2D68(game["bomb_recovered_sound"]); + } + + maps\mp\gametypes\_gameobjects::setownerteam(var_01); + maps\mp\gametypes\_gameobjects::setvisibleteam("any"); + maps\mp\gametypes\_gameobjects::set2dicon("enemy","waypoint_target"); + maps\mp\gametypes\_gameobjects::func_2A25("enemy","waypoint_kill"); + maps\mp\gametypes\_gameobjects::set2dicon("friendly","waypoint_escort"); + maps\mp\gametypes\_gameobjects::func_2A25("friendly","waypoint_escort"); + level.bombzones[var_01] maps\mp\gametypes\_gameobjects::setvisibleteam("none"); + level.bombzones[var_02] maps\mp\gametypes\_gameobjects::setvisibleteam("any"); + param_00 maps\mp\_utility::incplayerstat("bombscarried",1); + param_00 thread maps\mp\_matchdata::loggameevent("pickup",param_00.origin); +} + +//Function Number: 18 +ondrop(param_00) +{ + if(level.bombplanted) + { + return; + } + + if(isdefined(param_00)) + { + maps\mp\_utility::printonteamarg(&"MP_EXPLOSIVES_DROPPED_BY",maps\mp\gametypes\_gameobjects::func_2A15(),param_00); + } + + maps\mp\_utility::func_2D68(game["bomb_dropped_sound"],maps\mp\gametypes\_gameobjects::func_2A15()); + thread abandonmentthink(0); +} + +//Function Number: 19 +abandonmentthink(param_00) +{ + level endon("bomb_picked_up"); + wait param_00; + if(isdefined(self.carrier)) + { + return; + } + + if(maps\mp\gametypes\_gameobjects::func_2A15() == "allies") + { + var_01 = "axis"; + } + else + { + var_01 = "allies"; + } + + maps\mp\_utility::func_2D68(game["bomb_dropped_sound"],var_01); + maps\mp\gametypes\_gameobjects::setownerteam("neutral"); + maps\mp\gametypes\_gameobjects::setvisibleteam("any"); + maps\mp\gametypes\_gameobjects::set2dicon("enemy","waypoint_bomb"); + maps\mp\gametypes\_gameobjects::func_2A25("enemy","waypoint_bomb"); + maps\mp\gametypes\_gameobjects::set2dicon("friendly","waypoint_bomb"); + maps\mp\gametypes\_gameobjects::func_2A25("friendly","waypoint_bomb"); + level.bombzones["allies"] maps\mp\gametypes\_gameobjects::setvisibleteam("none"); + level.bombzones["axis"] maps\mp\gametypes\_gameobjects::setvisibleteam("none"); +} + +//Function Number: 20 +onuse(param_00) +{ + var_01 = param_00.pers["team"]; + var_02 = level.otherteam[var_01]; + if(!maps\mp\gametypes\_gameobjects::isfriendlyteam(param_00.pers["team"])) + { + param_00 notify("bomb_planted"); + param_00 notify("objective","plant"); + param_00 playsound("mp_bomb_plant"); + level thread maps\mp\_utility::teamplayercardsplash("callout_bombplanted",param_00); + maps\mp\_utility::func_26E5("bomb_planted"); + param_00 thread maps\mp\gametypes\_hud_message::func_2892("plant",maps\mp\gametypes\_rank::getscoreinfovalue("plant")); + param_00 thread maps\mp\gametypes\_rank::func_2AB3("plant"); + maps\mp\gametypes\_gamescore::func_26D3("plant",param_00); + param_00 maps\mp\_utility::incplayerstat("bombsplanted",1); + param_00 thread maps\mp\_matchdata::loggameevent("plant",param_00.origin); + param_00.bombplantedtime = gettime(); + param_00 maps\mp\_utility::func_26FB("plants",1); + param_00 maps\mp\gametypes\_persistence::func_26D8("round","plants",param_00.pers["plants"]); + level thread bombplanted(self,param_00.pers["team"]); + level.bombowner = param_00; + if(isdefined(level.sab_loadouts) && isdefined(level.sab_loadouts[var_01])) + { + param_00 thread removebombcarrierclass(); + } + + level.sabbomb.autoresettime = undefined; + level.sabbomb maps\mp\gametypes\_gameobjects::allowcarry("none"); + level.sabbomb maps\mp\gametypes\_gameobjects::setvisibleteam("none"); + level.sabbomb maps\mp\gametypes\_gameobjects::setdropped(); + self.useweapon = "briefcase_bomb_defuse_mp"; + func_34B2(); + return; + } + + param_00 notify("bomb_defused"); + param_00 notify("objective","defuse"); + maps\mp\_utility::func_26E5("bomb_defused"); + level thread maps\mp\_utility::teamplayercardsplash("callout_bombdefused",param_00); + if(isdefined(level.bombowner) && level.bombowner.bombplantedtime + 3000 + level.defusetime * 1000 > gettime() && maps\mp\_utility::isreallyalive(level.bombowner)) + { + param_00 thread maps\mp\gametypes\_hud_message::func_2892("ninja_defuse",maps\mp\gametypes\_rank::getscoreinfovalue("defuse")); + } + else + { + param_00 thread maps\mp\gametypes\_hud_message::func_2892("defuse",maps\mp\gametypes\_rank::getscoreinfovalue("defuse")); + } + + param_00 thread maps\mp\gametypes\_rank::func_2AB3("defuse"); + maps\mp\gametypes\_gamescore::func_26D3("defuse",param_00); + param_00 maps\mp\_utility::func_26FB("defuses",1); + param_00 maps\mp\gametypes\_persistence::func_26D8("round","defuses",param_00.pers["defuses"]); + param_00 thread maps\mp\_matchdata::loggameevent("defuse",param_00.origin); + if(maps\mp\_utility::inovertime()) + { + level.finalkillcam_winner = var_01; + thread maps\mp\gametypes\_gamelogic::endgame(var_01,game["strings"]["target_destroyed"]); + return; + } + + level thread bombdefused(self); + func_34B1(); + level.sabbomb maps\mp\gametypes\_gameobjects::allowcarry("any"); + level.sabbomb maps\mp\gametypes\_gameobjects::func_29D2(param_00); +} + +//Function Number: 21 +func_3496() +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + if(isdefined(self.iscarrying) && self.iscarrying == 1) + { + self notify("force_cancel_placement"); + wait 0.05; + } + + while(self ismantling()) + { + wait 0.05; + } + + while(!self isonground()) + { + wait 0.05; + } + + if(maps\mp\_utility::isjuggernaut()) + { + self notify("lost_juggernaut"); + wait 0.05; + } + + self.pers["gamemodeLoadout"] = level.sab_loadouts[self.team]; + if(isdefined(self.setspawnpoint)) + { + maps\mp\perks\_perkfunctions::func_2A63(self.setspawnpoint); + } + + var_00 = spawn("script_model",self.origin); + var_00.angles = self.angles; + var_00.playerspawnpos = self.origin; + var_00.notti = 1; + self.setspawnpoint = var_00; + self.gamemode_chosenclass = self.class; + self.pers["class"] = "gamemode"; + self.pers["lastClass"] = "gamemode"; + self.class = "gamemode"; + self.lastclass = "gamemode"; + self notify("faux_spawn"); + self.gameobject_fauxspawn = 1; + self.faux_spawn_stance = self getstance(); + thread maps\mp\gametypes\_playerlogic::func_2B25(1); +} + +//Function Number: 22 +removebombcarrierclass() +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + if(isdefined(self.iscarrying) && self.iscarrying == 1) + { + self notify("force_cancel_placement"); + wait 0.05; + } + + while(self ismantling()) + { + wait 0.05; + } + + while(!self isonground()) + { + wait 0.05; + } + + if(maps\mp\_utility::isjuggernaut()) + { + self notify("lost_juggernaut"); + wait 0.05; + } + + self.pers["gamemodeLoadout"] = undefined; + if(isdefined(self.setspawnpoint)) + { + maps\mp\perks\_perkfunctions::func_2A63(self.setspawnpoint); + } + + var_00 = spawn("script_model",self.origin); + var_00.angles = self.angles; + var_00.playerspawnpos = self.origin; + var_00.notti = 1; + self.setspawnpoint = var_00; + self notify("faux_spawn"); + self.faux_spawn_stance = self getstance(); + thread maps\mp\gametypes\_playerlogic::func_2B25(1); +} + +//Function Number: 23 +oncantuse(param_00) +{ + param_00 iprintlnbold(&"MP_CANT_PLANT_WITHOUT_BOMB"); +} + +//Function Number: 24 +bombplanted(param_00,param_01) +{ + level endon("overtime"); + maps\mp\gametypes\_gamelogic::pausetimer(); + level.bombplanted = 1; + level.timelimitoverride = 1; + level.scorelimitoverride = 1; + setdvar("ui_bomb_timer",1); + setgameendtime(int(gettime() + level.bombtimer * 1000)); + param_00.visuals[0] thread maps\mp\gametypes\_gamelogic::func_2F30(); + var_02 = gettime(); + func_349A(); + setdvar("ui_bomb_timer",0); + param_00.visuals[0] maps\mp\gametypes\_gamelogic::func_2F32(); + if(!level.bombplanted) + { + if(level.hotpotato) + { + var_03 = gettime() - var_02 / 1000; + level.bombtimer = level.bombtimer - var_03; + } + + return; + } + + var_04 = level.sabbomb.visuals[0].origin; + level.bombexploded = 1; + setdvar("ui_danger_team","BombExploded"); + if(isdefined(level.bombowner)) + { + param_00.visuals[0] radiusdamage(var_04,512,200,20,level.bombowner,"MOD_EXPLOSIVE","bomb_site_mp"); + level.bombowner maps\mp\_utility::func_26FB("destructions",1); + level.bombowner maps\mp\gametypes\_persistence::func_26D8("round","destructions",level.bombowner.pers["destructions"]); + } + else + { + param_00.visuals[0] radiusdamage(var_04,512,200,20,undefined,"MOD_EXPLOSIVE","bomb_site_mp"); + } + + var_05 = randomfloat(360); + var_06 = spawnfx(level._effect["bombexplosion"],var_04 + (0,0,50),(0,0,1),(cos(var_05),sin(var_05),0)); + triggerfx(var_06); + playrumbleonposition("grenade_rumble",var_04); + earthquake(0.75,2,var_04,2000); + thread maps\mp\_utility::func_2ED2("exp_suitcase_bomb_main",var_04); + if(isdefined(param_00.exploderindex)) + { + common_scripts\utility::exploder(param_00.exploderindex); + } + + level.sabbomb maps\mp\gametypes\_gameobjects::setvisibleteam("none"); + level.bombzones["allies"] maps\mp\gametypes\_gameobjects::setvisibleteam("none"); + level.bombzones["axis"] maps\mp\gametypes\_gameobjects::setvisibleteam("none"); + setgameendtime(0); + level.scorelimitoverride = 1; + if(level.scoremode) + { + maps\mp\gametypes\_gamescore::_setteamscore(param_01,int(max(maps\mp\_utility::func_18D0("scorelimit"),maps\mp\gametypes\_gamescore::func_26EE(level.otherteam[param_01]) + 1))); + } + else + { + maps\mp\gametypes\_gamescore::_setteamscore(param_01,1); + } + + maps\mp\gametypes\_gamescore::func_26EB(param_01); + if(isdefined(level.bombowner)) + { + level.bombowner thread maps\mp\gametypes\_rank::func_2AB3("destroy"); + maps\mp\gametypes\_gamescore::func_26D3("destroy",level.bombowner); + level thread maps\mp\_utility::teamplayercardsplash("callout_destroyed_objective",level.bombowner); + } + + wait 3; + level.finalkillcam_winner = param_01; + thread maps\mp\gametypes\_gamelogic::endgame(param_01,game["strings"]["target_destroyed"]); +} + +//Function Number: 25 +func_349A() +{ + level endon("bomb_defused"); + level endon("overtime_ended"); + var_00 = level.bombtimer * 1000 + gettime(); + setdvar("ui_bomb_timer_endtime",var_00); + level thread func_349B(var_00); + maps\mp\gametypes\_hostmigration::waitlongdurationwithgameendtimeupdate(level.bombtimer); +} + +//Function Number: 26 +func_349B(param_00) +{ + level endon("bomb_defused"); + level endon("overtime_ended"); + level endon("game_ended"); + level endon("disconnect"); + level waittill("host_migration_begin"); + var_01 = maps\mp\gametypes\_hostmigration::func_273E(); + if(var_01 > 0) + { + setdvar("ui_bomb_timer_endtime",param_00 + var_01); + } +} + +//Function Number: 27 +func_2F52() +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + maps\mp\_utility::func_2F53(3); + var_00 = maps\mp\_utility::getotherteam(self.pers["team"]); + level thread maps\mp\_utility::teamplayercardsplash("callout_lastteammemberalive",self,self.pers["team"]); + level thread maps\mp\_utility::teamplayercardsplash("callout_lastenemyalive",self,var_00); + level notify("last_alive",self); +} + +//Function Number: 28 +ontimelimit() +{ + if(level.bombexploded) + { + return; + } + + if(game["teamScores"]["axis"] > game["teamScores"]["allies"]) + { + level.finalkillcam_winner = "axis"; + thread maps\mp\gametypes\_gamelogic::endgame("axis",game["strings"]["time_limit_reached"]); + return; + } + + if(game["teamScores"]["axis"] < game["teamScores"]["allies"]) + { + level.finalkillcam_winner = "allies"; + thread maps\mp\gametypes\_gamelogic::endgame("allies",game["strings"]["time_limit_reached"]); + return; + } + + if(game["teamScores"]["axis"] == game["teamScores"]["allies"]) + { + level.finalkillcam_winner = "none"; + if(maps\mp\_utility::inovertime()) + { + thread maps\mp\gametypes\_gamelogic::endgame("tie",game["strings"]["time_limit_reached"]); + return; + } + + thread maps\mp\gametypes\_gamelogic::endgame("overtime",game["strings"]["time_limit_reached"]); + return; + } +} + +//Function Number: 29 +func_34AE(param_00) +{ + level endon("game_ended"); + level.inovertime = 1; + wait 5; + level.disablespawning = 1; +} + +//Function Number: 30 +func_34AF() +{ + level endon("game_ended"); + if(common_scripts\utility::cointoss()) + { + level.dangerteam = "allies"; + } + else + { + level.dangerteam = "axis"; + } + + for(;;) + { + if(isdefined(level.sabbomb.carrier)) + { + var_00 = level.sabbomb.carrier; + } + else + { + var_00 = level.sabbomb.visuals[0]; + } + + if(distance(var_00.origin,level.bombzones[maps\mp\_utility::getotherteam(level.dangerteam)].visuals[0].origin) < distance(var_00.origin,level.bombzones[level.dangerteam].visuals[0].origin)) + { + level.dangerteam = maps\mp\_utility::getotherteam(level.dangerteam); + } + + wait 0.05; + } +} + +//Function Number: 31 +func_34B1() +{ + maps\mp\gametypes\_gameobjects::allowuse("enemy"); + maps\mp\gametypes\_gameobjects::setusetime(level.planttime); + maps\mp\gametypes\_gameobjects::setusetext(&"MP_PLANTING_EXPLOSIVE"); + maps\mp\gametypes\_gameobjects::setusehinttext(&"PLATFORM_HOLD_TO_PLANT_EXPLOSIVES"); + maps\mp\gametypes\_gameobjects::func_29EC(level.sabbomb); + maps\mp\gametypes\_gameobjects::set2dicon("friendly","waypoint_defend"); + maps\mp\gametypes\_gameobjects::func_2A25("friendly","waypoint_defend"); + maps\mp\gametypes\_gameobjects::set2dicon("enemy","waypoint_target"); + maps\mp\gametypes\_gameobjects::func_2A25("enemy","waypoint_target"); + maps\mp\gametypes\_gameobjects::setvisibleteam("none"); + self.useweapon = "briefcase_bomb_mp"; +} + +//Function Number: 32 +func_34B2() +{ + maps\mp\gametypes\_gameobjects::allowuse("friendly"); + maps\mp\gametypes\_gameobjects::setusetime(level.defusetime); + maps\mp\gametypes\_gameobjects::setusetext(&"MP_DEFUSING_EXPLOSIVE"); + maps\mp\gametypes\_gameobjects::setusehinttext(&"PLATFORM_HOLD_TO_DEFUSE_EXPLOSIVES"); + maps\mp\gametypes\_gameobjects::func_29EC(undefined); + maps\mp\gametypes\_gameobjects::set2dicon("friendly","waypoint_defuse"); + maps\mp\gametypes\_gameobjects::func_2A25("friendly","waypoint_defuse"); + maps\mp\gametypes\_gameobjects::set2dicon("enemy","waypoint_defend"); + maps\mp\gametypes\_gameobjects::func_2A25("enemy","waypoint_defend"); + maps\mp\gametypes\_gameobjects::setvisibleteam("any"); +} + +//Function Number: 33 +bombdefused(param_00) +{ + setdvar("ui_bomb_timer",0); + maps\mp\gametypes\_gamelogic::resumetimer(); + level.bombplanted = 0; + level.timelimitoverride = 0; + level.scorelimitoverride = 0; + level notify("bomb_defused"); +} + +//Function Number: 34 +ononeleftevent(param_00) +{ + if(level.bombexploded) + { + return; + } + + var_01 = maps\mp\_utility::getlastlivingplayer(param_00); + var_01 thread func_2F52(); +} + +//Function Number: 35 +//Function Number: 36 +initgametypeawards() +{ + maps\mp\_awards::func_2D85("targetsdestroyed",0,::maps\mp\_awards::func_2DA7); + maps\mp\_awards::func_2D85("bombsplanted",0,::maps\mp\_awards::func_2DA7); + maps\mp\_awards::func_2D85("bombsdefused",0,::maps\mp\_awards::func_2DA7); + maps\mp\_awards::func_2D85("bombcarrierkills",0,::maps\mp\_awards::func_2DA7); + maps\mp\_awards::func_2D85("bombscarried",0,::maps\mp\_awards::func_2DA7); + maps\mp\_awards::func_2D85("killsasbombcarrier",0,::maps\mp\_awards::func_2DA7); +} + +//Function Number: 37 +func_34B3() +{ + if(isusingmatchrulesdata() && getmatchrulesdata("defaultClasses","axis",5,"class","inUse")) + { + level.sab_loadouts["axis"] = maps\mp\_utility::func_334E("axis",5); + } + + if(isusingmatchrulesdata() && getmatchrulesdata("defaultClasses","allies",5,"class","inUse")) + { + level.sab_loadouts["allies"] = maps\mp\_utility::func_334E("allies",5); + } +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/gametypes/sd.gsc b/MW3/Xbox/MP/maps/mp/gametypes/sd.gsc new file mode 100644 index 0000000..4e4432a --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/gametypes/sd.gsc @@ -0,0 +1,984 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\sd.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 35 + * Decompile Time: 508 ms + * Timestamp: 10/27/2023 2:26:25 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(getdvar("mapname") == "mp_background") + { + return; + } + + maps\mp\gametypes\_globallogic::init(); + maps\mp\gametypes\_callbacksetup::setupcallbacks(); + maps\mp\gametypes\_globallogic::setupcallbacks(); + if(isusingmatchrulesdata()) + { + level.initializematchrules = ::initializematchrules; + [[ level.initializematchrules ]](); + level thread maps\mp\_utility::func_810A(); + } + else + { + maps\mp\_utility::func_330E(level.gametype,3,0,9); + maps\mp\_utility::func_3315(level.gametype,2.5); + maps\mp\_utility::registerscorelimitdvar(level.gametype,1); + maps\mp\_utility::func_3312(level.gametype,0); + maps\mp\_utility::registerwinlimitdvar(level.gametype,4); + maps\mp\_utility::func_3317(level.gametype,1); + maps\mp\_utility::registerhalftimedvar(level.gametype,0); + level.matchrules_damagemultiplier = 0; + level.matchrules_vampirism = 0; + } + + level.objectivebased = 1; + level.teambased = 1; + level.onprecachegametype = ::onprecachegametype; + level.onstartgametype = ::onstartgametype; + level.getspawnpoint = ::getspawnpoint; + level.onspawnplayer = ::onspawnplayer; + level.onplayerkilled = ::onplayerkilled; + level.ondeadevent = ::ondeadevent; + level.ononeleftevent = ::ononeleftevent; + level.ontimelimit = ::ontimelimit; + level.onnormaldeath = ::onnormaldeath; + level.initgametypeawards = ::initgametypeawards; + if(level.matchrules_damagemultiplier || level.matchrules_vampirism) + { + level.modifyplayerdamage = ::maps\mp\gametypes\_damage::func_2D57; + } + + game["dialog"]["gametype"] = "searchdestroy"; + if(getdvarint("g_hardcore")) + { + game["dialog"]["gametype"] = "hc_" + game["dialog"]["gametype"]; + } + else if(getdvarint("camera_thirdPerson")) + { + game["dialog"]["gametype"] = "thirdp_" + game["dialog"]["gametype"]; + } + else if(getdvarint("scr_diehard")) + { + game["dialog"]["gametype"] = "dh_" + game["dialog"]["gametype"]; + } + else if(getdvarint("scr_" + level.gametype + "_promode")) + { + game["dialog"]["gametype"] = game["dialog"]["gametype"] + "_pro"; + } + + game["dialog"]["offense_obj"] = "obj_destroy"; + game["dialog"]["defense_obj"] = "obj_defend"; + makedvarserverinfo("ui_bomb_timer_endtime",-1); +} + +//Function Number: 2 +initializematchrules() +{ + maps\mp\_utility::func_334C(); + var_00 = getmatchrulesdata("sdData","roundLength"); + setdynamicdvar("scr_sd_timelimit",var_00); + maps\mp\_utility::func_3315("sd",var_00); + var_01 = getmatchrulesdata("sdData","roundSwitch"); + setdynamicdvar("scr_sd_roundswitch",var_01); + maps\mp\_utility::func_330E("sd",var_01,0,9); + var_02 = getmatchrulesdata("commonOption","scoreLimit"); + setdynamicdvar("scr_sd_winlimit",var_02); + maps\mp\_utility::registerwinlimitdvar("sd",var_02); + setdynamicdvar("scr_sd_bombtimer",getmatchrulesdata("sdData","bombTimer")); + setdynamicdvar("scr_sd_planttime",getmatchrulesdata("sdData","plantTime")); + setdynamicdvar("scr_sd_defusetime",getmatchrulesdata("sdData","defuseTime")); + setdynamicdvar("scr_sd_multibomb",getmatchrulesdata("sdData","multiBomb")); + setdynamicdvar("scr_sd_roundlimit",0); + maps\mp\_utility::func_3312("sd",0); + setdynamicdvar("scr_sd_scorelimit",1); + maps\mp\_utility::registerscorelimitdvar("sd",1); + setdynamicdvar("scr_sd_halftime",0); + maps\mp\_utility::registerhalftimedvar("sd",0); + setdynamicdvar("scr_sd_promode",0); +} + +//Function Number: 3 +onprecachegametype() +{ + game["bomb_dropped_sound"] = "mp_war_objective_lost"; + game["bomb_recovered_sound"] = "mp_war_objective_taken"; + precacheshader("waypoint_bomb"); + precacheshader("hud_suitcase_bomb"); + precacheshader("waypoint_target"); + precacheshader("waypoint_target_a"); + precacheshader("waypoint_target_b"); + precacheshader("waypoint_defend"); + precacheshader("waypoint_defend_a"); + precacheshader("waypoint_defend_b"); + precacheshader("waypoint_defuse"); + precacheshader("waypoint_defuse_a"); + precacheshader("waypoint_defuse_b"); + precacheshader("waypoint_escort"); + precachestring(&"MP_EXPLOSIVES_RECOVERED_BY"); + precachestring(&"MP_EXPLOSIVES_DROPPED_BY"); + precachestring(&"MP_EXPLOSIVES_PLANTED_BY"); + precachestring(&"MP_EXPLOSIVES_DEFUSED_BY"); + precachestring(&"PLATFORM_HOLD_TO_PLANT_EXPLOSIVES"); + precachestring(&"PLATFORM_HOLD_TO_DEFUSE_EXPLOSIVES"); + precachestring(&"MP_CANT_PLANT_WITHOUT_BOMB"); + precachestring(&"MP_PLANTING_EXPLOSIVE"); + precachestring(&"MP_DEFUSING_EXPLOSIVE"); +} + +//Function Number: 4 +onstartgametype() +{ + if(!isdefined(game["switchedsides"])) + { + game["switchedsides"] = 0; + } + + if(game["switchedsides"]) + { + var_00 = game["attackers"]; + var_01 = game["defenders"]; + game["attackers"] = var_01; + game["defenders"] = var_00; + } + + setclientnamemode("manual_change"); + game["strings"]["target_destroyed"] = &"MP_TARGET_DESTROYED"; + game["strings"]["bomb_defused"] = &"MP_BOMB_DEFUSED"; + precachestring(game["strings"]["target_destroyed"]); + precachestring(game["strings"]["bomb_defused"]); + level._effect["bombexplosion"] = loadfx("explosions/tanker_explosion"); + maps\mp\_utility::func_3305(game["attackers"],&"OBJECTIVES_SD_ATTACKER"); + maps\mp\_utility::func_3305(game["defenders"],&"OBJECTIVES_SD_DEFENDER"); + if(level.splitscreen) + { + maps\mp\_utility::func_3306(game["attackers"],&"OBJECTIVES_SD_ATTACKER"); + maps\mp\_utility::func_3306(game["defenders"],&"OBJECTIVES_SD_DEFENDER"); + } + else + { + maps\mp\_utility::func_3306(game["attackers"],&"OBJECTIVES_SD_ATTACKER_SCORE"); + maps\mp\_utility::func_3306(game["defenders"],&"OBJECTIVES_SD_DEFENDER_SCORE"); + } + + maps\mp\_utility::setobjectivehinttext(game["attackers"],&"OBJECTIVES_SD_ATTACKER_HINT"); + maps\mp\_utility::setobjectivehinttext(game["defenders"],&"OBJECTIVES_SD_DEFENDER_HINT"); + level.spawnmins = (0,0,0); + level.spawnmaxs = (0,0,0); + maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_sd_spawn_attacker"); + maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_sd_spawn_defender"); + level.mapcenter = maps\mp\gametypes\_spawnlogic::func_2FCD(level.spawnmins,level.spawnmaxs); + setmapcenter(level.mapcenter); + var_02[0] = "sd"; + maps\mp\gametypes\_gameobjects::main(var_41); + maps\mp\gametypes\_rank::registerscoreinfo("win",2); + maps\mp\gametypes\_rank::registerscoreinfo("loss",1); + maps\mp\gametypes\_rank::registerscoreinfo("tie",1.5); + maps\mp\gametypes\_rank::registerscoreinfo("kill",50); + maps\mp\gametypes\_rank::registerscoreinfo("headshot",50); + maps\mp\gametypes\_rank::registerscoreinfo("assist",20); + maps\mp\gametypes\_rank::registerscoreinfo("plant",100); + maps\mp\gametypes\_rank::registerscoreinfo("defuse",100); + thread func_2F0E(); + setspecialloadout(); + thread func_348C(); +} + +//Function Number: 5 +getspawnpoint() +{ + if(self.pers["team"] == game["attackers"]) + { + var_00 = "mp_sd_spawn_attacker"; + } + else + { + var_00 = "mp_sd_spawn_defender"; + } + + var_01 = maps\mp\gametypes\_spawnlogic::getspawnpointarray(var_00); + var_02 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random(var_01); + return var_02; +} + +//Function Number: 6 +onspawnplayer() +{ + self.isplanting = 0; + self.isdefusing = 0; + self.isbombcarrier = 0; + if(level.multibomb && !isdefined(self.carryicon) && self.pers["team"] == game["attackers"] && !level.bombplanted) + { + if(level.splitscreen) + { + self.carryicon = maps\mp\gametypes\_hud_util::createicon("hud_suitcase_bomb",33,33); + self.carryicon maps\mp\gametypes\_hud_util::setpoint("BOTTOM RIGHT","BOTTOM RIGHT",-50,-78); + self.carryicon.alpha = 0.75; + } + else + { + self.carryicon = maps\mp\gametypes\_hud_util::createicon("hud_suitcase_bomb",50,50); + self.carryicon maps\mp\gametypes\_hud_util::setpoint("BOTTOM RIGHT","BOTTOM RIGHT",-50,-65); + self.carryicon.alpha = 0.75; + } + + self.carryicon.hidewheninmenu = 1; + thread func_80F4(); + } + else if(level.multibomb && isdefined(self.carryicon) && self.pers["team"] != game["attackers"]) + { + self.carryicon maps\mp\gametypes\_hud_util::destroyelem(); + } + + level notify("spawned_player"); +} + +//Function Number: 7 +func_80F4() +{ + self endon("disconnect"); + level waittill("game_ended"); + if(isdefined(self.carryicon)) + { + self.carryicon.alpha = 0; + } +} + +//Function Number: 8 +onplayerkilled(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09) +{ + thread checkallowspectating(); +} + +//Function Number: 9 +checkallowspectating() +{ + wait 0.05; + var_00 = 0; + if(!level.alivecount[game["attackers"]]) + { + level.spectateoverride[game["attackers"]].allowenemyspectate = 1; + var_00 = 1; + } + + if(!level.alivecount[game["defenders"]]) + { + level.spectateoverride[game["defenders"]].allowenemyspectate = 1; + var_00 = 1; + } + + if(var_00) + { + maps\mp\gametypes\_spectating::updatespectatesettings(); + } +} + +//Function Number: 10 +sd_endgame(param_00,param_01) +{ + level.finalkillcam_winner = param_00; + if(param_01 == game["strings"]["target_destroyed"] || param_01 == game["strings"]["bomb_defused"]) + { + var_02 = 1; + foreach(var_04 in level.bombzones) + { + if(isdefined(level.finalkillcam_killcamentityindex[param_00]) && level.finalkillcam_killcamentityindex[param_00] == var_04.killcamentnum) + { + var_02 = 0; + break; + } + } + + if(var_02) + { + maps\mp\gametypes\_damage::func_2D01(); + } + } + + thread maps\mp\gametypes\_gamelogic::endgame(param_00,param_01); +} + +//Function Number: 11 +ondeadevent(param_00) +{ + if(level.bombexploded || level.bombdefused) + { + return; + } + + if(param_00 == "all") + { + if(level.bombplanted) + { + sd_endgame(game["attackers"],game["strings"][game["defenders"] + "_eliminated"]); + return; + } + + sd_endgame(game["defenders"],game["strings"][game["attackers"] + "_eliminated"]); + return; + } + + if(param_00 == game["attackers"]) + { + if(level.bombplanted) + { + return; + } + + level thread sd_endgame(game["defenders"],game["strings"][game["attackers"] + "_eliminated"]); + return; + } + + if(param_00 == game["defenders"]) + { + level thread sd_endgame(game["attackers"],game["strings"][game["defenders"] + "_eliminated"]); + return; + } +} + +//Function Number: 12 +ononeleftevent(param_00) +{ + if(level.bombexploded || level.bombdefused) + { + return; + } + + var_01 = maps\mp\_utility::getlastlivingplayer(param_00); + var_01 thread func_2F52(); +} + +//Function Number: 13 +onnormaldeath(param_00,param_01,param_02) +{ + var_03 = maps\mp\gametypes\_rank::getscoreinfovalue("kill"); + var_04 = param_00.team; + if(game["state"] == "postgame" && param_00.team == game["defenders"] || !level.bombplanted) + { + param_01.finalkill = 1; + } + + if(param_00.isplanting) + { + thread maps\mp\_matchdata::func_28B4(param_02,"planting"); + param_01 maps\mp\_utility::func_26FB("defends",1); + param_01 maps\mp\gametypes\_persistence::func_26D8("round","defends",param_01.pers["defends"]); + } + else if(param_00.isbombcarrier) + { + param_01 maps\mp\_utility::incplayerstat("bombcarrierkills",1); + thread maps\mp\_matchdata::func_28B4(param_02,"carrying"); + } + else if(param_00.isdefusing) + { + thread maps\mp\_matchdata::func_28B4(param_02,"defusing"); + param_01 maps\mp\_utility::func_26FB("defends",1); + param_01 maps\mp\gametypes\_persistence::func_26D8("round","defends",param_01.pers["defends"]); + } + + if(param_01.isbombcarrier) + { + param_01 maps\mp\_utility::incplayerstat("killsasbombcarrier",1); + } +} + +//Function Number: 14 +func_2F52() +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + maps\mp\_utility::func_2F53(3); + var_00 = maps\mp\_utility::getotherteam(self.pers["team"]); + level thread maps\mp\_utility::teamplayercardsplash("callout_lastteammemberalive",self,self.pers["team"]); + level thread maps\mp\_utility::teamplayercardsplash("callout_lastenemyalive",self,var_00); + level notify("last_alive",self); + maps\mp\gametypes\_missions::func_325D(); +} + +//Function Number: 15 +ontimelimit() +{ + sd_endgame(game["defenders"],game["strings"]["time_limit_reached"]); +} + +//Function Number: 16 +func_2F0E() +{ + level.planttime = maps\mp\_utility::dvarfloatvalue("planttime",5,0,20); + level.defusetime = maps\mp\_utility::dvarfloatvalue("defusetime",5,0,20); + level.bombtimer = maps\mp\_utility::dvarfloatvalue("bombtimer",45,1,300); + level.multibomb = maps\mp\_utility::func_32FD("multibomb",0,0,1); +} + +//Function Number: 17 +func_348A(param_00) +{ + var_01 = []; + var_02 = getentarray("script_brushmodel","classname"); + foreach(var_04 in var_02) + { + if(isdefined(var_04.script_gameobjectname) && var_04.script_gameobjectname == "bombzone") + { + foreach(var_06 in param_00) + { + if(distance(var_04.origin,var_06.origin) < 100 && issubstr(tolower(var_06.script_label),"c")) + { + var_06.relatedbrushmodel = var_04; + var_01[var_01.size] = var_06; + break; + } + } + } + } + + foreach(var_0A in var_01) + { + var_0A.relatedbrushmodel delete(); + var_0B = getentarray(var_0A.target,"targetname"); + foreach(var_0D in var_0B) + { + var_0D delete(); + } + + var_0A delete(); + } + + return common_scripts\utility::array_removeundefined(param_00); +} + +//Function Number: 18 +func_348C() +{ + level.bombplanted = 0; + level.bombdefused = 0; + level.bombexploded = 0; + var_00 = getent("sd_bomb_pickup_trig","targetname"); + if(!isdefined(var_00)) + { + common_scripts\utility::error("No sd_bomb_pickup_trig trigger found in map."); + return; + } + + var_01[0] = getent("sd_bomb","targetname"); + if(!isdefined(var_01[0])) + { + common_scripts\utility::error("No sd_bomb script_model found in map."); + return; + } + + precachemodel("prop_suitcase_bomb"); + var_01[0] setmodel("prop_suitcase_bomb"); + if(!level.multibomb) + { + level.sdbomb = maps\mp\gametypes\_gameobjects::func_29A8(game["attackers"],var_00,var_01,(0,0,32)); + level.sdbomb maps\mp\gametypes\_gameobjects::allowcarry("friendly"); + level.sdbomb maps\mp\gametypes\_gameobjects::set2dicon("friendly","waypoint_bomb"); + level.sdbomb maps\mp\gametypes\_gameobjects::func_2A25("friendly","waypoint_bomb"); + level.sdbomb maps\mp\gametypes\_gameobjects::setvisibleteam("friendly"); + level.sdbomb maps\mp\gametypes\_gameobjects::setcarryicon("hud_suitcase_bomb"); + level.sdbomb.allowweapons = 1; + level.sdbomb.onpickup = ::onpickup; + level.sdbomb.ondrop = ::ondrop; + } + else + { + var_00 delete(); + var_01[0] delete(); + } + + level.bombzones = []; + var_02 = getentarray("bombzone","targetname"); + var_02 = func_348A(var_02); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + var_00 = var_02[var_03]; + var_01 = getentarray(var_02[var_03].target,"targetname"); + var_04 = maps\mp\gametypes\_gameobjects::func_29E7(game["defenders"],var_00,var_01,(0,0,64)); + var_04 maps\mp\gametypes\_gameobjects::allowuse("enemy"); + var_04 maps\mp\gametypes\_gameobjects::setusetime(level.planttime); + var_04 maps\mp\gametypes\_gameobjects::setusetext(&"MP_PLANTING_EXPLOSIVE"); + var_04 maps\mp\gametypes\_gameobjects::setusehinttext(&"PLATFORM_HOLD_TO_PLANT_EXPLOSIVES"); + if(!level.multibomb) + { + var_04 maps\mp\gametypes\_gameobjects::func_29EC(level.sdbomb); + } + + var_05 = var_04 maps\mp\gametypes\_gameobjects::getlabel(); + var_04.label = var_05; + var_04 maps\mp\gametypes\_gameobjects::set2dicon("friendly","waypoint_defend" + var_05); + var_04 maps\mp\gametypes\_gameobjects::func_2A25("friendly","waypoint_defend" + var_05); + var_04 maps\mp\gametypes\_gameobjects::set2dicon("enemy","waypoint_target" + var_05); + var_04 maps\mp\gametypes\_gameobjects::func_2A25("enemy","waypoint_target" + var_05); + var_04 maps\mp\gametypes\_gameobjects::setvisibleteam("any"); + var_04.onbeginuse = ::onbeginuse; + var_04.onenduse = ::onenduse; + var_04.onuse = ::onuseplantobject; + var_04.oncantuse = ::oncantuse; + var_04.useweapon = "briefcase_bomb_mp"; + for(var_06 = 0;var_06 < var_01.size;var_06++) + { + if(isdefined(var_01[var_06].script_exploder)) + { + var_04.exploderindex = var_01[var_06].script_exploder; + var_01[var_06] thread func_3491(var_04); + break; + } + } + + level.bombzones[level.bombzones.size] = var_04; + var_04.bombdefusetrig = getent(var_01[0].target,"targetname"); + var_04.bombdefusetrig.origin = var_04.bombdefusetrig.origin + (0,0,-10000); + var_04.bombdefusetrig.label = var_05; + } + + for(var_03 = 0;var_03 < level.bombzones.size;var_03++) + { + var_07 = []; + for(var_08 = 0;var_08 < level.bombzones.size;var_08++) + { + if(var_08 != var_03) + { + var_07[var_07.size] = level.bombzones[var_08]; + } + } + + level.bombzones[var_03].otherbombzones = var_07; + } +} + +//Function Number: 19 +func_3491(param_00) +{ + var_01 = spawn("script_origin",self.origin); + var_01.angles = self.angles; + var_01 rotateyaw(-45,0.05); + wait 0.05; + var_02 = self.origin + (0,0,5); + var_03 = self.origin + anglestoforward(var_01.angles) * 100 + (0,0,128); + var_04 = bullettrace(var_02,var_03,0,self); + self.killcament = spawn("script_model",var_04["position"]); + self.killcament setscriptmoverkillcam("explosive"); + param_00.killcamentnum = self.killcament getentitynumber(); + var_01 delete(); +} + +//Function Number: 20 +onbeginuse(param_00) +{ + if(maps\mp\gametypes\_gameobjects::isfriendlyteam(param_00.pers["team"])) + { + param_00 playsound("mp_bomb_defuse"); + param_00.isdefusing = 1; + if(isdefined(level.sdbombmodel)) + { + level.sdbombmodel hide(); + return; + } + + return; + } + + param_00.isplanting = 1; + if(level.multibomb) + { + for(var_01 = 0;var_01 < self.otherbombzones.size;var_01++) + { + self.otherbombzones[var_01] maps\mp\gametypes\_gameobjects::allowuse("none"); + self.otherbombzones[var_01] maps\mp\gametypes\_gameobjects::setvisibleteam("friendly"); + } + } +} + +//Function Number: 21 +onenduse(param_00,param_01,param_02) +{ + if(!isdefined(param_01)) + { + return; + } + + if(isalive(param_01)) + { + param_01.isdefusing = 0; + param_01.isplanting = 0; + } + + if(maps\mp\gametypes\_gameobjects::isfriendlyteam(param_01.pers["team"])) + { + if(isdefined(level.sdbombmodel) && !param_02) + { + level.sdbombmodel show(); + return; + } + + return; + } + + if(level.multibomb && !param_02) + { + for(var_03 = 0;var_03 < self.otherbombzones.size;var_03++) + { + self.otherbombzones[var_03] maps\mp\gametypes\_gameobjects::allowuse("enemy"); + self.otherbombzones[var_03] maps\mp\gametypes\_gameobjects::setvisibleteam("any"); + } + } +} + +//Function Number: 22 +oncantuse(param_00) +{ + param_00 iprintlnbold(&"MP_CANT_PLANT_WITHOUT_BOMB"); +} + +//Function Number: 23 +onuseplantobject(param_00) +{ + if(!maps\mp\gametypes\_gameobjects::isfriendlyteam(param_00.pers["team"])) + { + level thread bombplanted(self,param_00); + for(var_01 = 0;var_01 < level.bombzones.size;var_01++) + { + if(level.bombzones[var_01] == self) + { + continue; + } + + level.bombzones[var_01] maps\mp\gametypes\_gameobjects::disableobject(); + } + + param_00 playsound("mp_bomb_plant"); + param_00 notify("bomb_planted"); + param_00 notify("objective","plant"); + param_00 maps\mp\_utility::func_26FB("plants",1); + param_00 maps\mp\gametypes\_persistence::func_26D8("round","plants",param_00.pers["plants"]); + if(isdefined(level.sd_loadout) && isdefined(level.sd_loadout[param_00.team])) + { + param_00 thread removebombcarrierclass(); + } + + maps\mp\_utility::func_26E5("bomb_planted"); + level thread maps\mp\_utility::teamplayercardsplash("callout_bombplanted",param_00); + level.bombowner = param_00; + param_00 thread maps\mp\gametypes\_hud_message::func_2892("plant",maps\mp\gametypes\_rank::getscoreinfovalue("plant")); + param_00 thread maps\mp\gametypes\_rank::func_2AB3("plant"); + param_00.bombplantedtime = gettime(); + maps\mp\gametypes\_gamescore::func_26D3("plant",param_00); + param_00 thread maps\mp\_matchdata::loggameevent("plant",param_00.origin); + } +} + +//Function Number: 24 +func_3496() +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + if(isdefined(self.iscarrying) && self.iscarrying == 1) + { + self notify("force_cancel_placement"); + wait 0.05; + } + + while(self ismantling()) + { + wait 0.05; + } + + while(!self isonground()) + { + wait 0.05; + } + + if(maps\mp\_utility::isjuggernaut()) + { + self notify("lost_juggernaut"); + wait 0.05; + } + + self.pers["gamemodeLoadout"] = level.sd_loadout[self.team]; + if(isdefined(self.setspawnpoint)) + { + maps\mp\perks\_perkfunctions::func_2A63(self.setspawnpoint); + } + + var_00 = spawn("script_model",self.origin); + var_00.angles = self.angles; + var_00.playerspawnpos = self.origin; + var_00.notti = 1; + self.setspawnpoint = var_00; + self.gamemode_chosenclass = self.class; + self.pers["class"] = "gamemode"; + self.pers["lastClass"] = "gamemode"; + self.class = "gamemode"; + self.lastclass = "gamemode"; + self notify("faux_spawn"); + self.gameobject_fauxspawn = 1; + self.faux_spawn_stance = self getstance(); + thread maps\mp\gametypes\_playerlogic::func_2B25(1); +} + +//Function Number: 25 +removebombcarrierclass() +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + if(isdefined(self.iscarrying) && self.iscarrying == 1) + { + self notify("force_cancel_placement"); + wait 0.05; + } + + while(self ismantling()) + { + wait 0.05; + } + + while(!self isonground()) + { + wait 0.05; + } + + if(maps\mp\_utility::isjuggernaut()) + { + self notify("lost_juggernaut"); + wait 0.05; + } + + self.pers["gamemodeLoadout"] = undefined; + if(isdefined(self.setspawnpoint)) + { + maps\mp\perks\_perkfunctions::func_2A63(self.setspawnpoint); + } + + var_00 = spawn("script_model",self.origin); + var_00.angles = self.angles; + var_00.playerspawnpos = self.origin; + var_00.notti = 1; + self.setspawnpoint = var_00; + self notify("faux_spawn"); + self.faux_spawn_stance = self getstance(); + thread maps\mp\gametypes\_playerlogic::func_2B25(1); +} + +//Function Number: 26 +func_3498(param_00) +{ + param_00 notify("bomb_defused"); + param_00 notify("objective","defuse"); + level thread bombdefused(); + maps\mp\gametypes\_gameobjects::disableobject(); + maps\mp\_utility::func_26E5("bomb_defused"); + level thread maps\mp\_utility::teamplayercardsplash("callout_bombdefused",param_00); + if(isdefined(level.bombowner) && level.bombowner.bombplantedtime + 3000 + level.defusetime * 1000 > gettime() && maps\mp\_utility::isreallyalive(level.bombowner)) + { + param_00 thread maps\mp\gametypes\_hud_message::func_2892("ninja_defuse",maps\mp\gametypes\_rank::getscoreinfovalue("defuse")); + } + else + { + param_00 thread maps\mp\gametypes\_hud_message::func_2892("defuse",maps\mp\gametypes\_rank::getscoreinfovalue("defuse")); + } + + param_00 thread maps\mp\gametypes\_rank::func_2AB3("defuse"); + maps\mp\gametypes\_gamescore::func_26D3("defuse",param_00); + param_00 maps\mp\_utility::func_26FB("defuses",1); + param_00 maps\mp\gametypes\_persistence::func_26D8("round","defuses",param_00.pers["defuses"]); + param_00 thread maps\mp\_matchdata::loggameevent("defuse",param_00.origin); +} + +//Function Number: 27 +ondrop(param_00) +{ + maps\mp\gametypes\_gameobjects::set2dicon("friendly","waypoint_bomb"); + maps\mp\gametypes\_gameobjects::func_2A25("friendly","waypoint_bomb"); + maps\mp\_utility::func_2D68(game["bomb_dropped_sound"],game["attackers"]); +} + +//Function Number: 28 +onpickup(param_00) +{ + param_00.isbombcarrier = 1; + param_00 maps\mp\_utility::incplayerstat("bombscarried",1); + param_00 thread maps\mp\_matchdata::loggameevent("pickup",param_00.origin); + maps\mp\gametypes\_gameobjects::set2dicon("friendly","waypoint_escort"); + maps\mp\gametypes\_gameobjects::func_2A25("friendly","waypoint_escort"); + if(isdefined(level.sd_loadout) && isdefined(level.sd_loadout[param_00.team])) + { + param_00 thread func_3496(); + } + + if(!level.bombdefused) + { + maps\mp\_utility::teamplayercardsplash("callout_bombtaken",param_00,param_00.team); + maps\mp\_utility::func_26E5("bomb_taken",param_00.pers["team"]); + } + + maps\mp\_utility::func_2D68(game["bomb_recovered_sound"],game["attackers"]); +} + +//Function Number: 29 +onreset() +{ +} + +//Function Number: 30 +bombplanted(param_00,param_01) +{ + maps\mp\gametypes\_gamelogic::pausetimer(); + level.bombplanted = 1; + param_00.visuals[0] thread maps\mp\gametypes\_gamelogic::func_2F30(); + level.tickingobject = param_00.visuals[0]; + level.timelimitoverride = 1; + setgameendtime(int(gettime() + level.bombtimer * 1000)); + setdvar("ui_bomb_timer",1); + if(!level.multibomb) + { + level.sdbomb maps\mp\gametypes\_gameobjects::allowcarry("none"); + level.sdbomb maps\mp\gametypes\_gameobjects::setvisibleteam("none"); + level.sdbomb maps\mp\gametypes\_gameobjects::setdropped(); + level.sdbombmodel = level.sdbomb.visuals[0]; + } + else + { + for(var_02 = 0;var_02 < level.players.size;var_02++) + { + if(isdefined(level.players[var_02].carryicon)) + { + level.players[var_02].carryicon maps\mp\gametypes\_hud_util::destroyelem(); + } + } + + level.sdbombmodel = spawn("script_model",param_01.origin); + level.sdbombmodel.angles = param_01.angles; + level.sdbombmodel setmodel("prop_suitcase_bomb"); + } + + param_00 maps\mp\gametypes\_gameobjects::allowuse("none"); + param_00 maps\mp\gametypes\_gameobjects::setvisibleteam("none"); + var_03 = param_00 maps\mp\gametypes\_gameobjects::getlabel(); + var_04 = param_00.bombdefusetrig; + var_04.origin = level.sdbombmodel.origin; + var_05 = []; + var_06 = maps\mp\gametypes\_gameobjects::func_29E7(game["defenders"],var_04,var_05,(0,0,32)); + var_06 maps\mp\gametypes\_gameobjects::allowuse("friendly"); + var_06 maps\mp\gametypes\_gameobjects::setusetime(level.defusetime); + var_06 maps\mp\gametypes\_gameobjects::setusetext(&"MP_DEFUSING_EXPLOSIVE"); + var_06 maps\mp\gametypes\_gameobjects::setusehinttext(&"PLATFORM_HOLD_TO_DEFUSE_EXPLOSIVES"); + var_06 maps\mp\gametypes\_gameobjects::setvisibleteam("any"); + var_06 maps\mp\gametypes\_gameobjects::set2dicon("friendly","waypoint_defuse" + var_03); + var_06 maps\mp\gametypes\_gameobjects::set2dicon("enemy","waypoint_defend" + var_03); + var_06 maps\mp\gametypes\_gameobjects::func_2A25("friendly","waypoint_defuse" + var_03); + var_06 maps\mp\gametypes\_gameobjects::func_2A25("enemy","waypoint_defend" + var_03); + var_06.label = var_03; + var_06.onbeginuse = ::onbeginuse; + var_06.onenduse = ::onenduse; + var_06.onuse = ::func_3498; + var_06.useweapon = "briefcase_bomb_defuse_mp"; + func_349A(); + setdvar("ui_bomb_timer",0); + param_00.visuals[0] maps\mp\gametypes\_gamelogic::func_2F32(); + if(level.gameended || level.bombdefused) + { + return; + } + + level.bombexploded = 1; + var_07 = level.sdbombmodel.origin; + level.sdbombmodel hide(); + if(isdefined(param_01)) + { + param_00.visuals[0] radiusdamage(var_07,512,200,20,param_01,"MOD_EXPLOSIVE","bomb_site_mp"); + param_01 maps\mp\_utility::func_26FB("destructions",1); + param_01 maps\mp\gametypes\_persistence::func_26D8("round","destructions",param_01.pers["destructions"]); + } + else + { + param_00.visuals[0] radiusdamage(var_07,512,200,20,undefined,"MOD_EXPLOSIVE","bomb_site_mp"); + } + + var_08 = randomfloat(360); + var_09 = spawnfx(level._effect["bombexplosion"],var_07 + (0,0,50),(0,0,1),(cos(var_08),sin(var_08),0)); + triggerfx(var_09); + playrumbleonposition("grenade_rumble",var_07); + earthquake(0.75,2,var_07,2000); + thread maps\mp\_utility::func_2ED2("exp_suitcase_bomb_main",var_07); + if(isdefined(param_00.exploderindex)) + { + common_scripts\utility::exploder(param_00.exploderindex); + } + + for(var_02 = 0;var_02 < level.bombzones.size;var_02++) + { + level.bombzones[var_02] maps\mp\gametypes\_gameobjects::disableobject(); + } + + var_06 maps\mp\gametypes\_gameobjects::disableobject(); + setgameendtime(0); + wait 3; + sd_endgame(game["attackers"],game["strings"]["target_destroyed"]); +} + +//Function Number: 31 +func_349A() +{ + level endon("game_ended"); + level endon("bomb_defused"); + var_00 = level.bombtimer * 1000 + gettime(); + setdvar("ui_bomb_timer_endtime",var_00); + level thread func_349B(var_00); + maps\mp\gametypes\_hostmigration::waitlongdurationwithgameendtimeupdate(level.bombtimer); +} + +//Function Number: 32 +func_349B(param_00) +{ + level endon("game_ended"); + level endon("bomb_defused"); + level endon("game_ended"); + level endon("disconnect"); + level waittill("host_migration_begin"); + var_01 = maps\mp\gametypes\_hostmigration::func_273E(); + if(var_01 > 0) + { + setdvar("ui_bomb_timer_endtime",param_00 + var_01); + } +} + +//Function Number: 33 +bombdefused() +{ + level.tickingobject maps\mp\gametypes\_gamelogic::func_2F32(); + level.bombdefused = 1; + setdvar("ui_bomb_timer",0); + level notify("bomb_defused"); + wait 1.5; + setgameendtime(0); + sd_endgame(game["defenders"],game["strings"]["bomb_defused"]); +} + +//Function Number: 34 +initgametypeawards() +{ + maps\mp\_awards::func_2D85("targetsdestroyed",0,::maps\mp\_awards::func_2DA7); + maps\mp\_awards::func_2D85("bombsplanted",0,::maps\mp\_awards::func_2DA7); + maps\mp\_awards::func_2D85("bombsdefused",0,::maps\mp\_awards::func_2DA7); + maps\mp\_awards::func_2D85("bombcarrierkills",0,::maps\mp\_awards::func_2DA7); + maps\mp\_awards::func_2D85("bombscarried",0,::maps\mp\_awards::func_2DA7); + maps\mp\_awards::func_2D85("killsasbombcarrier",0,::maps\mp\_awards::func_2DA7); +} + +//Function Number: 35 +setspecialloadout() +{ + if(isusingmatchrulesdata() && getmatchrulesdata("defaultClasses","axis",5,"class","inUse")) + { + level.sd_loadout[game["attackers"]] = maps\mp\_utility::func_334E("axis",5); + } +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/gametypes/tdef.gsc b/MW3/Xbox/MP/maps/mp/gametypes/tdef.gsc new file mode 100644 index 0000000..f4b2832 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/gametypes/tdef.gsc @@ -0,0 +1,614 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\tdef.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 23 + * Decompile Time: 354 ms + * Timestamp: 10/27/2023 2:26:26 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(getdvar("mapname") == "mp_background") + { + return; + } + + maps\mp\gametypes\_globallogic::init(); + maps\mp\gametypes\_callbacksetup::setupcallbacks(); + maps\mp\gametypes\_globallogic::setupcallbacks(); + if(isusingmatchrulesdata()) + { + level.initializematchrules = ::initializematchrules; + [[ level.initializematchrules ]](); + level thread maps\mp\_utility::func_810A(); + } + else + { + maps\mp\_utility::func_330E(level.gametype,0,0,9); + maps\mp\_utility::func_3315(level.gametype,10); + maps\mp\_utility::registerscorelimitdvar(level.gametype,7500); + maps\mp\_utility::func_3312(level.gametype,1); + maps\mp\_utility::registerwinlimitdvar(level.gametype,1); + maps\mp\_utility::func_3317(level.gametype,0); + maps\mp\_utility::registerhalftimedvar(level.gametype,0); + level.matchrules_enemyflagradar = 1; + level.matchrules_damagemultiplier = 0; + level.matchrules_vampirism = 0; + } + + func_34B3(); + level.teambased = 1; + level.initgametypeawards = ::initgametypeawards; + level.onprecachegametype = ::onprecachegametype; + level.onstartgametype = ::onstartgametype; + level.getspawnpoint = ::getspawnpoint; + level.onnormaldeath = ::onnormaldeath; + if(level.matchrules_damagemultiplier || level.matchrules_vampirism) + { + level.modifyplayerdamage = ::maps\mp\gametypes\_damage::func_2D57; + } + + precacheshader("waypoint_targetneutral"); + game["dialog"]["gametype"] = "team_def"; + if(getdvarint("g_hardcore")) + { + game["dialog"]["gametype"] = "hc_" + game["dialog"]["gametype"]; + } + + game["strings"]["overtime_hint"] = &"MP_FIRST_BLOOD"; +} + +//Function Number: 2 +initializematchrules() +{ + maps\mp\_utility::func_334C(); + level.matchrules_enemyflagradar = getmatchrulesdata("tdefData","enemyFlagRadar"); + setdynamicdvar("scr_tdef_roundswitch",0); + maps\mp\_utility::func_330E("tdef",0,0,9); + setdynamicdvar("scr_tdef_roundlimit",1); + maps\mp\_utility::func_3312("tdef",1); + setdynamicdvar("scr_tdef_winlimit",1); + maps\mp\_utility::registerwinlimitdvar("tdef",1); + setdynamicdvar("scr_tdef_halftime",0); + maps\mp\_utility::registerhalftimedvar("tdef",0); + setdynamicdvar("scr_tdef_promode",0); +} + +//Function Number: 3 +onprecachegametype() +{ + precachestring(&"MP_NEUTRAL_FLAG_CAPTURED_BY"); + precachestring(&"MP_NEUTRAL_FLAG_DROPPED_BY"); + precachestring(&"MP_GRABBING_FLAG"); + precachestring(&"OBJECTIVES_TDEF_ATTACKER_HINT"); + precachestring(&"OBJECTIVES_TDEF_DEFENDER_HINT"); + precachestring(&"OBJECTIVES_TDEF"); + precachestring(&"OBJECTIVES_TDEF_SCORE"); + precachestring(&"OBJECTIVES_TDEF_HINT"); +} + +//Function Number: 4 +onstartgametype() +{ + setclientnamemode("auto_change"); + if(!isdefined(game["switchedsides"])) + { + game["switchedsides"] = 0; + } + + if(game["switchedsides"]) + { + var_00 = game["attackers"]; + var_01 = game["defenders"]; + game["attackers"] = var_01; + game["defenders"] = var_00; + } + + maps\mp\_utility::func_3305("allies",&"OBJECTIVES_TDEF"); + maps\mp\_utility::func_3305("axis",&"OBJECTIVES_TDEF"); + if(level.splitscreen) + { + maps\mp\_utility::func_3306("allies",&"OBJECTIVES_TDEF"); + maps\mp\_utility::func_3306("axis",&"OBJECTIVES_TDEF"); + } + else + { + maps\mp\_utility::func_3306("allies",&"OBJECTIVES_TDEF_SCORE"); + maps\mp\_utility::func_3306("axis",&"OBJECTIVES_TDEF_SCORE"); + } + + maps\mp\_utility::setobjectivehinttext("allies",&"OBJECTIVES_TDEF_ATTACKER_HINT"); + maps\mp\_utility::setobjectivehinttext("axis",&"OBJECTIVES_TDEF_ATTACKER_HINT"); + level.spawnmins = (0,0,0); + level.spawnmaxs = (0,0,0); + maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_tdm_spawn_allies_start"); + maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_tdm_spawn_axis_start"); + maps\mp\gametypes\_spawnlogic::func_2FD0("allies","mp_tdm_spawn"); + maps\mp\gametypes\_spawnlogic::func_2FD0("axis","mp_tdm_spawn"); + level.mapcenter = maps\mp\gametypes\_spawnlogic::func_2FCD(level.spawnmins,level.spawnmaxs); + setmapcenter(level.mapcenter); + maps\mp\gametypes\_rank::registerscoreinfo("firstblood",200); + maps\mp\gametypes\_rank::registerscoreinfo("kill",50); + maps\mp\gametypes\_rank::registerscoreinfo("kill_bonus",50); + maps\mp\gametypes\_rank::registerscoreinfo("capture",100); + maps\mp\gametypes\_rank::registerscoreinfo("kill_carrier",50); + maps\mp\gametypes\_rank::registerscoreinfo("team_assist",20); + var_02[0] = level.gametype; + maps\mp\gametypes\_gameobjects::main(var_41); + func_3538(); +} + +//Function Number: 5 +func_3538() +{ + level.icon2d["allies"] = maps\mp\gametypes\_teams::func_2776("allies"); + level.icon2d["axis"] = maps\mp\gametypes\_teams::func_2776("axis"); + precacheshader(level.icon2d["axis"]); + precacheshader(level.icon2d["allies"]); + level.carryflag["allies"] = maps\mp\gametypes\_teams::func_2775("allies"); + level.carryflag["axis"] = maps\mp\gametypes\_teams::func_2775("axis"); + level.carryflag["neutral"] = "prop_flag_neutral"; + precachemodel(level.carryflag["allies"]); + precachemodel(level.carryflag["axis"]); + precachemodel(level.carryflag["neutral"]); + level.iconescort3d = "waypoint_defend"; + level.iconescort2d = "waypoint_defend"; + precacheshader(level.iconescort3d); + precacheshader(level.iconescort2d); + level.iconkill3d = "waypoint_kill"; + level.iconkill2d = "waypoint_kill"; + precacheshader(level.iconkill3d); + precacheshader(level.iconkill2d); + level.iconcaptureflag3d = "waypoint_capture_flag"; + level.iconcaptureflag2d = "waypoint_capture_flag"; + precacheshader(level.iconcaptureflag3d); + precacheshader(level.iconcaptureflag2d); + precacheshader("waypoint_flag_friendly"); + precacheshader("waypoint_flag_enemy"); + level.gameflag = undefined; +} + +//Function Number: 6 +onnormaldeath(param_00,param_01,param_02) +{ + var_03 = maps\mp\gametypes\_rank::getscoreinfovalue("kill"); + if(isdefined(level.gameflag) && level.gameflag maps\mp\gametypes\_gameobjects::func_2A15() == param_01.pers["team"]) + { + if(isdefined(param_01.carryflag)) + { + param_01 maps\mp\_utility::incplayerstat("killsasflagcarrier",1); + } + else + { + level.gameflag.carrier thread maps\mp\gametypes\_rank::xpeventpopup(&"SPLASHES_TEAM_ASSIST"); + maps\mp\gametypes\_gamescore::func_26D3("team_assist",level.gameflag.carrier,param_00,1); + level.gameflag.carrier thread maps\mp\gametypes\_rank::func_2AB3("team_assist"); + } + + param_01 thread maps\mp\gametypes\_rank::xpeventpopup(&"SPLASHES_X2_BONUS"); + maps\mp\gametypes\_gamescore::func_26D3("kill_bonus",param_01,param_00,1); + param_01 thread maps\mp\gametypes\_rank::func_2AB3("kill_bonus"); + var_03 = var_03 * 2; + } + else if(!isdefined(level.gameflag) && cancreateflagatvictimorigin(param_00)) + { + level.gameflag = createflag(param_00); + var_03 = var_03 + maps\mp\gametypes\_rank::getscoreinfovalue("firstblood"); + maps\mp\gametypes\_gamescore::func_26D3("firstblood",param_01,param_00,1); + } + else if(isdefined(param_00.carryflag)) + { + var_04 = maps\mp\gametypes\_rank::getscoreinfovalue("kill_carrier"); + thread maps\mp\_utility::teamplayercardsplash("callout_killflagcarrier",param_01); + param_01 thread maps\mp\gametypes\_hud_message::func_2892("flag_carrier_killed",var_04); + maps\mp\gametypes\_gamescore::func_26D3("kill_carrier",param_01,param_00,1); + param_01 maps\mp\_utility::incplayerstat("flagcarrierkills",1); + param_01 thread [[ level.onxpevent ]]("kill_carrier"); + param_01 notify("objective","kill_carrier"); + param_01 thread maps\mp\_matchdata::loggameevent("kill_carrier",param_01.origin); + var_03 = var_03 + var_04; + } + + param_01 maps\mp\gametypes\_gamescore::giveteamscoreforobjective(param_01.pers["team"],var_03); + if(game["state"] == "postgame" && game["teamScores"][param_01.team] > game["teamScores"][level.otherteam[param_01.team]]) + { + param_01.finalkill = 1; + } +} + +//Function Number: 7 +ondrop(param_00) +{ + if(isdefined(param_00) && isdefined(param_00.tdef_flagtime)) + { + var_01 = int(gettime() - param_00.tdef_flagtime); + param_00 maps\mp\_utility::incplayerstat("holdingteamdefenderflag",var_01); + if(var_01 / 100 / 60 < 1) + { + var_02 = 0; + } + else + { + var_02 = int(var_02 / 100 / 60); + } + + param_00 maps\mp\_utility::func_26FB("destructions",var_02); + param_00 maps\mp\gametypes\_persistence::func_26D8("round","destructions",param_00.pers["destructions"]); + param_00.tdef_flagtime = undefined; + param_00 notify("dropped_flag"); + } + + var_03 = maps\mp\gametypes\_gameobjects::func_2A15(); + var_04 = level.otherteam[var_03]; + if(isdefined(self.portable_radar)) + { + level maps\mp\gametypes\_portable_radar::deleteportableradar(self.portable_radar); + self.portable_radar = undefined; + } + + self.currentcarrier = undefined; + maps\mp\gametypes\_gameobjects::setownerteam("neutral"); + maps\mp\gametypes\_gameobjects::allowcarry("any"); + maps\mp\gametypes\_gameobjects::setvisibleteam("any"); + maps\mp\gametypes\_gameobjects::set2dicon("friendly",level.iconcaptureflag2d); + maps\mp\gametypes\_gameobjects::func_2A25("friendly",level.iconcaptureflag3d); + maps\mp\gametypes\_gameobjects::set2dicon("enemy",level.iconcaptureflag2d); + maps\mp\gametypes\_gameobjects::func_2A25("enemy",level.iconcaptureflag3d); + if(isdefined(param_00)) + { + if(isdefined(param_00.carryflag)) + { + param_00 func_34F0(); + } + + maps\mp\_utility::func_32F9(var_03,var_04,&"MP_NEUTRAL_FLAG_DROPPED_BY",&"MP_NEUTRAL_FLAG_DROPPED_BY","mp_war_objective_lost","mp_war_objective_lost",param_00); + } + else + { + maps\mp\_utility::func_2D68("mp_war_objective_lost",var_03); + maps\mp\_utility::func_2D68("mp_war_objective_lost",var_04); + } + + maps\mp\_utility::func_26E5("dropped_flag",var_03,"status"); + maps\mp\_utility::func_26E5("enemy_dropped_flag",var_04,"status"); +} + +//Function Number: 8 +onpickup(param_00) +{ + self notify("picked_up"); + param_00.tdef_flagtime = gettime(); + param_00 thread watchforendgame(); + var_01 = maps\mp\gametypes\_rank::getscoreinfovalue("capture"); + var_02 = param_00.pers["team"]; + var_03 = level.otherteam[var_02]; + if(isdefined(level.tdef_loadouts) && isdefined(level.tdef_loadouts[var_02])) + { + param_00 thread applyflagcarrierclass(); + } + else + { + param_00 func_34EF(); + } + + self.currentcarrier = param_00; + param_00.carryicon setshader(level.icon2d[var_02],param_00.carryicon.width,param_00.carryicon.height); + maps\mp\gametypes\_gameobjects::setownerteam(var_02); + maps\mp\gametypes\_gameobjects::setvisibleteam("any"); + maps\mp\gametypes\_gameobjects::set2dicon("friendly",level.iconescort2d); + maps\mp\gametypes\_gameobjects::func_2A25("friendly",level.iconescort2d); + maps\mp\gametypes\_gameobjects::set2dicon("enemy",level.iconkill3d); + maps\mp\gametypes\_gameobjects::func_2A25("enemy",level.iconkill3d); + maps\mp\_utility::func_26E5("got_flag",var_02,"status"); + maps\mp\_utility::func_26E5("enemy_got_flag",var_03,"status"); + thread maps\mp\_utility::teamplayercardsplash("callout_flagcapture",param_00); + param_00 thread maps\mp\gametypes\_hud_message::func_2892("flag_capture",var_01); + maps\mp\gametypes\_gamescore::func_26D3("capture",param_00,undefined,1); + param_00 thread [[ level.onxpevent ]]("capture"); + param_00 maps\mp\_utility::incplayerstat("flagscaptured",1); + param_00 notify("objective","captured"); + param_00 thread maps\mp\_matchdata::loggameevent("capture",param_00.origin); + maps\mp\_utility::func_32F9(var_02,var_03,&"MP_NEUTRAL_FLAG_CAPTURED_BY",&"MP_NEUTRAL_FLAG_CAPTURED_BY","mp_obj_captured","mp_enemy_obj_captured",param_00); + if(self.currentteam == var_03) + { + param_00 maps\mp\gametypes\_gamescore::giveteamscoreforobjective(var_02,var_01); + } + + self.currentteam = var_02; + if(level.matchrules_enemyflagradar) + { + thread flagattachradar(var_03); + } +} + +//Function Number: 9 +applyflagcarrierclass() +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + if(isdefined(self.iscarrying) && self.iscarrying == 1) + { + self notify("force_cancel_placement"); + wait 0.05; + } + + while(self ismantling()) + { + wait 0.05; + } + + while(!self isonground()) + { + wait 0.05; + } + + if(maps\mp\_utility::isjuggernaut()) + { + self notify("lost_juggernaut"); + wait 0.05; + } + + self.pers["gamemodeLoadout"] = level.tdef_loadouts[self.team]; + if(isdefined(self.setspawnpoint)) + { + maps\mp\perks\_perkfunctions::func_2A63(self.setspawnpoint); + } + + var_00 = spawn("script_model",self.origin); + var_00.angles = self.angles; + var_00.playerspawnpos = self.origin; + var_00.notti = 1; + self.setspawnpoint = var_00; + self.gamemode_chosenclass = self.class; + self.pers["class"] = "gamemode"; + self.pers["lastClass"] = "gamemode"; + self.class = "gamemode"; + self.lastclass = "gamemode"; + thread waitattachflag(); + self notify("faux_spawn"); + self.gameobject_fauxspawn = 1; + self.faux_spawn_stance = self getstance(); + thread maps\mp\gametypes\_playerlogic::func_2B25(1); +} + +//Function Number: 10 +waitattachflag() +{ + level endon("game_ende"); + self endon("disconnect"); + self endon("death"); + self waittill("spawned_player"); + func_34EF(); +} + +//Function Number: 11 +watchforendgame() +{ + self endon("dropped_flag"); + self endon("disconnect"); + level waittill("game_ended"); + if(isdefined(self)) + { + if(isdefined(self.tdef_flagtime)) + { + var_00 = int(gettime() - self.tdef_flagtime); + maps\mp\_utility::incplayerstat("holdingteamdefenderflag",var_00); + if(var_00 / 100 / 60 < 1) + { + var_01 = 0; + } + else + { + var_01 = int(var_01 / 100 / 60); + } + + maps\mp\_utility::func_26FB("destructions",var_01); + maps\mp\gametypes\_persistence::func_26D8("round","destructions",self.pers["destructions"]); + } + } +} + +//Function Number: 12 +cancreateflagatvictimorigin(param_00) +{ + var_01 = getentarray("minefield","targetname"); + var_02 = getentarray("trigger_hurt","classname"); + var_03 = getentarray("radiation","targetname"); + for(var_04 = 0;var_04 < var_03.size;var_04++) + { + if(param_00 istouching(var_03[var_04])) + { + return 0; + } + } + + for(var_04 = 0;var_04 < var_01.size;var_04++) + { + if(param_00 istouching(var_01[var_04])) + { + return 0; + } + } + + for(var_04 = 0;var_04 < var_02.size;var_04++) + { + if(param_00 istouching(var_02[var_04])) + { + return 0; + } + } + + return 1; +} + +//Function Number: 13 +createflag(param_00) +{ + var_01[0] = spawn("script_model",param_00.origin); + var_01[0] setmodel(level.carryflag["neutral"]); + var_02 = spawn("trigger_radius",param_00.origin,0,96,72); + var_03 = maps\mp\gametypes\_gameobjects::func_29A8("neutral",var_02,var_01,(0,0,85)); + var_03 maps\mp\gametypes\_gameobjects::func_2A18("friendly",0.5); + var_03 maps\mp\gametypes\_gameobjects::func_2A18("enemy",0.5); + var_03 maps\mp\gametypes\_gameobjects::setteamusetext("enemy",&"MP_GRABBING_FLAG"); + var_03 maps\mp\gametypes\_gameobjects::setteamusetext("friendly",&"MP_GRABBING_FLAG"); + var_03 maps\mp\gametypes\_gameobjects::allowcarry("any"); + var_03 maps\mp\gametypes\_gameobjects::setvisibleteam("any"); + var_03 maps\mp\gametypes\_gameobjects::set2dicon("enemy",level.iconcaptureflag2d); + var_03 maps\mp\gametypes\_gameobjects::func_2A25("enemy",level.iconcaptureflag3d); + var_03 maps\mp\gametypes\_gameobjects::set2dicon("friendly",level.iconcaptureflag2d); + var_03 maps\mp\gametypes\_gameobjects::func_2A25("friendly",level.iconcaptureflag3d); + var_03 maps\mp\gametypes\_gameobjects::setcarryicon(level.icon2d["axis"]); + var_03.allowweapons = 1; + var_03.onpickup = ::onpickup; + var_03.onpickupfailed = ::onpickup; + var_03.ondrop = ::ondrop; + var_03.oldradius = 96; + var_03.currentteam = "none"; + var_03.requireslos = 1; + level.favorclosespawnent = var_03.trigger; + level.favorclosespawnscalar = 3; + var_03 thread updatebaseposition(); + return var_03; +} + +//Function Number: 14 +updatebaseposition() +{ + level endon("game_ended"); + for(;;) + { + if(isdefined(self.safeorigin)) + { + self.baseorigin = self.safeorigin; + self.trigger.baseorigin = self.safeorigin; + self.visuals[0].baseorigin = self.safeorigin; + } + + wait 0.05; + } +} + +//Function Number: 15 +func_34EF() +{ + self attach(level.carryflag[self.pers["team"]],"J_spine4",1); + self.carryflag = level.carryflag[self.pers["team"]]; + level.favorclosespawnent = self; +} + +//Function Number: 16 +func_34F0() +{ + self detach(self.carryflag,"J_spine4"); + self.carryflag = undefined; + level.favorclosespawnent = level.gameflag.trigger; +} + +//Function Number: 17 +flagattachradar(param_00) +{ + level endon("game_ended"); + self endon("dropped"); + var_01 = getflagradarowner(param_00); + var_02 = spawn("script_model",self.currentcarrier.origin); + var_02.team = param_00; + var_02.owner = var_01; + var_02 makeportableradar(var_01); + self.portable_radar = var_02; + thread flagradarmover(); + thread func_3543(); +} + +//Function Number: 18 +getflagradarowner(param_00) +{ + level endon("game_ended"); + self endon("dropped"); + for(;;) + { + foreach(var_02 in level.players) + { + if(isalive(var_02) && var_02.pers["team"] == param_00) + { + return var_02; + } + } + + wait 0.05; + } +} + +//Function Number: 19 +flagradarmover() +{ + level endon("game_ended"); + self endon("dropped"); + self.portable_radar endon("death"); + for(;;) + { + self.portable_radar moveto(self.currentcarrier.origin,0.05); + wait 0.05; + } +} + +//Function Number: 20 +func_3543() +{ + level endon("game_ended"); + self endon("dropped"); + var_00 = self.portable_radar.team; + self.portable_radar.owner common_scripts\utility::waittill_any("disconnect","joined_team","joined_spectators"); + level maps\mp\gametypes\_portable_radar::deleteportableradar(self.portable_radar); + self.portable_radar = undefined; + flagattachradar(var_00); +} + +//Function Number: 21 +getspawnpoint() +{ + var_00 = self.pers["team"]; + if(game["switchedsides"]) + { + var_00 = maps\mp\_utility::getotherteam(var_00); + } + + if(level.ingraceperiod) + { + var_01 = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_tdm_spawn_" + var_00 + "_start"); + var_02 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random(var_01); + } + else + { + var_01 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints(var_02); + var_02 = maps\mp\gametypes\_spawnlogic::func_2FE6(var_02); + } + + return var_02; +} + +//Function Number: 22 +initgametypeawards() +{ + maps\mp\_awards::func_2D85("flagscaptured",0,::maps\mp\_awards::func_2DA7); + maps\mp\_awards::func_2D85("flagcarrierkills",0,::maps\mp\_awards::func_2DA7); + maps\mp\_awards::func_2D85("killsasflagcarrier",0,::maps\mp\_awards::func_2DA7); +} + +//Function Number: 23 +func_34B3() +{ + if(isusingmatchrulesdata() && getmatchrulesdata("defaultClasses","axis",5,"class","inUse")) + { + level.tdef_loadouts["axis"] = maps\mp\_utility::func_334E("axis",5); + } + + if(isusingmatchrulesdata() && getmatchrulesdata("defaultClasses","allies",5,"class","inUse")) + { + level.tdef_loadouts["allies"] = maps\mp\_utility::func_334E("allies",5); + } +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/gametypes/tjugg.gsc b/MW3/Xbox/MP/maps/mp/gametypes/tjugg.gsc new file mode 100644 index 0000000..928705d --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/gametypes/tjugg.gsc @@ -0,0 +1,676 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\tjugg.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 18 + * Decompile Time: 292 ms + * Timestamp: 10/27/2023 2:26:27 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + maps\mp\gametypes\_globallogic::init(); + maps\mp\gametypes\_callbacksetup::setupcallbacks(); + maps\mp\gametypes\_globallogic::setupcallbacks(); + if(isusingmatchrulesdata()) + { + level.initializematchrules = ::initializematchrules; + [[ level.initializematchrules ]](); + level thread maps\mp\_utility::func_810A(); + } + else + { + maps\mp\_utility::func_3315(level.gametype,10); + maps\mp\_utility::func_3312(level.gametype,1); + maps\mp\_utility::registerscorelimitdvar(level.gametype,7500); + maps\mp\_utility::registerwinlimitdvar(level.gametype,1); + maps\mp\_utility::func_3317(level.gametype,0); + maps\mp\_utility::registerhalftimedvar(level.gametype,0); + level.matchrules_juggswitchtime = 90; + level.matchrules_damagemultiplier = 0; + level.matchrules_vampirism = 0; + } + + func_34B3(); + level.teambased = 1; + level.doprematch = 1; + level.onprecachegametype = ::onprecachegametype; + level.onstartgametype = ::onstartgametype; + level.getspawnpoint = ::getspawnpoint; + level.onplayerkilled = ::onplayerkilled; + if(level.matchrules_damagemultiplier || level.matchrules_vampirism) + { + level.modifyplayerdamage = ::maps\mp\gametypes\_damage::func_2D57; + } +} + +//Function Number: 2 +initializematchrules() +{ + maps\mp\_utility::func_334C(); + level.matchrules_juggswitchtime = getmatchrulesdata("tjuggData","juggSwitchTime"); + if(level.matchrules_juggswitchtime < 1) + { + level.matchrules_juggswitchtime = 30; + } + + setdynamicdvar("scr_tjugg_roundswitch",0); + maps\mp\_utility::func_330E("tjugg",0,0,9); + setdynamicdvar("scr_tjugg_roundlimit",1); + maps\mp\_utility::func_3312("tjugg",1); + setdynamicdvar("scr_tjugg_winlimit",1); + maps\mp\_utility::registerwinlimitdvar("tjugg",1); + setdynamicdvar("scr_tjugg_halftime",0); + maps\mp\_utility::registerhalftimedvar("tjugg",0); + setdynamicdvar("scr_tjugg_playerrespawndelay",0); + setdynamicdvar("scr_tjugg_waverespawndelay",0); + setdynamicdvar("scr_player_forcerespawn",1); + setdynamicdvar("scr_team_fftype",0); + setdynamicdvar("scr_tjugg_promode",0); +} + +//Function Number: 3 +onprecachegametype() +{ + precachestring(&"MP_JUGG_NEXT_JUGG_IN"); +} + +//Function Number: 4 +onstartgametype() +{ + setclientnamemode("auto_change"); + maps\mp\_utility::func_3305("allies",&"OBJECTIVES_TJUGG"); + maps\mp\_utility::func_3305("axis",&"OBJECTIVES_TJUGG"); + if(level.splitscreen) + { + maps\mp\_utility::func_3306("allies",&"OBJECTIVES_TJUGG"); + maps\mp\_utility::func_3306("axis",&"OBJECTIVES_TJUGG"); + } + else + { + maps\mp\_utility::func_3306("allies",&"OBJECTIVES_TJUGG_SCORE"); + maps\mp\_utility::func_3306("axis",&"OBJECTIVES_TJUGG_SCORE"); + } + + maps\mp\_utility::setobjectivehinttext("allies",&"OBJECTIVES_TJUGG_HINT"); + maps\mp\_utility::setobjectivehinttext("axis",&"OBJECTIVES_TJUGG_HINT"); + level.spawnmins = (0,0,0); + level.spawnmaxs = (0,0,0); + maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_tdm_spawn_allies_start"); + maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_tdm_spawn_axis_start"); + maps\mp\gametypes\_spawnlogic::func_2FD0("allies","mp_tdm_spawn"); + maps\mp\gametypes\_spawnlogic::func_2FD0("axis","mp_tdm_spawn"); + level.mapcenter = maps\mp\gametypes\_spawnlogic::func_2FCD(level.spawnmins,level.spawnmaxs); + setmapcenter(level.mapcenter); + maps\mp\gametypes\_rank::registerscoreinfo("got_juggernaut",250); + maps\mp\gametypes\_rank::registerscoreinfo("kill_juggernaut",250); + maps\mp\gametypes\_rank::registerscoreinfo("kill_as_juggernaut",100); + maps\mp\gametypes\_rank::registerscoreinfo("jugg_on_jugg",400); + var_00[0] = "tjugg"; + maps\mp\gametypes\_gameobjects::main(var_00); + level.quickmessagetoall = 1; + level.blockweapondrops = 1; + level.respawnoldjugg_fx = loadfx("explosions/bouncing_betty_explosion"); + level.jugg_available = []; + level.jugg_available["axis"] = 1; + level.jugg_available["allies"] = 1; + level.jugg_attackers = []; + level.jugg_attackers["axis"] = []; + level.jugg_attackers["allies"] = []; + level.jugg_currjugg = []; + level.jugg_currjugg["axis"] = undefined; + level.jugg_currjugg["allies"] = undefined; + level.tjugg_timerdisplay = []; + level.tjugg_timerdisplay["allies"] = maps\mp\gametypes\_hud_util::createservertimer("objective",1.4,"allies"); + level.tjugg_timerdisplay["allies"] maps\mp\gametypes\_hud_util::setpoint("TOPLEFT","TOPLEFT",115,5); + level.tjugg_timerdisplay["allies"].label = &"MP_JUGG_NEXT_JUGG_IN"; + level.tjugg_timerdisplay["allies"].alpha = 0; + level.tjugg_timerdisplay["allies"].archived = 0; + level.tjugg_timerdisplay["allies"].hidewheninmenu = 1; + level.tjugg_timerdisplay["axis"] = maps\mp\gametypes\_hud_util::createservertimer("objective",1.4,"axis"); + level.tjugg_timerdisplay["axis"] maps\mp\gametypes\_hud_util::setpoint("TOPLEFT","TOPLEFT",115,5); + level.tjugg_timerdisplay["axis"].label = &"MP_JUGG_NEXT_JUGG_IN"; + level.tjugg_timerdisplay["axis"].alpha = 0; + level.tjugg_timerdisplay["axis"].archived = 0; + level.tjugg_timerdisplay["axis"].hidewheninmenu = 1; + thread func_34CC(level.tjugg_timerdisplay["allies"]); + thread func_34CC(level.tjugg_timerdisplay["axis"]); + level.favorclosespawnscalar = 5; + level thread onplayerconnect(); +} + +//Function Number: 5 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_00.jugg_alligience = 0; + } +} + +//Function Number: 6 +getspawnpoint() +{ + if(level.ingraceperiod) + { + var_00 = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_tdm_spawn_" + self.pers["team"] + "_start"); + var_01 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random(var_00); + } + else + { + level.favorclosespawnent = level.jugg_currjugg[self.pers["team"]]; + var_00 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints(self.pers["team"]); + var_01 = maps\mp\gametypes\_spawnlogic::func_2FE6(var_01); + } + + return var_01; +} + +//Function Number: 7 +onplayerkilled(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09) +{ + if(param_03 == "MOD_SUICIDE" && param_04 == "none" && isdefined(self.wasswitchingteamsforonplayerkilled)) + { + return; + } + + var_0A = self; + if(isdefined(param_01) && isplayer(param_01)) + { + var_0B = 0; + var_0C = 0; + var_0D = 0; + var_0E = 0; + var_0F = 0; + var_10 = 0; + var_11 = 0; + if(param_01 == var_0A) + { + if(isdefined(var_0A.isjuggmodejuggernaut)) + { + var_0C = 1; + } + } + else if(param_01.team != var_0A.team) + { + var_11 = var_11 + maps\mp\gametypes\_rank::getscoreinfovalue("kill"); + if(isdefined(var_0A.isjuggmodejuggernaut)) + { + var_0C = 1; + if(isdefined(param_01.isjuggmodejuggernaut)) + { + var_0D = 1; + } + else + { + var_0E = 1; + } + } + else if(isdefined(param_01.isjuggmodejuggernaut)) + { + var_0F = 1; + } + + if(level.jugg_available[param_01.team]) + { + var_0B = 1; + } + } + else if(isdefined(var_0A.isjuggmodejuggernaut) && param_01.team == var_0A.team) + { + var_0A thread func_3563(); + return; + } + + if(var_0B) + { + func_3562(param_01); + } + + if(var_0C) + { + var_12 = getbestteammate(var_0A.team,0); + if(!isdefined(var_12)) + { + var_12 = getbestteammate(var_0A.team,1); + } + + if(!isdefined(var_12)) + { + var_12 = var_0A; + } + + func_3562(var_12,var_0A); + } + + if(var_0B || var_0C) + { + maps\mp\_utility::func_2D68("mp_enemy_obj_captured"); + } + + if(param_01 != var_0A && param_01.team != var_0A.team && !isdefined(param_01.isjuggmodejuggernaut)) + { + param_01.jugg_alligience = param_01.jugg_alligience + 50; + if(var_0E) + { + param_01.jugg_alligience = param_01.jugg_alligience + 100; + } + + if(isdefined(level.jugg_attackers[param_01.team][var_0A.guid])) + { + var_10 = 1; + param_01.jugg_alligience = param_01.jugg_alligience + 100; + level.jugg_attackers[param_01.team][var_0A.guid] = undefined; + } + } + + if(var_0E) + { + var_13 = maps\mp\gametypes\_rank::getscoreinfovalue("kill_juggernaut"); + var_11 = var_11 + var_13; + param_01 thread maps\mp\gametypes\_rank::xpeventpopup(&"SPLASHES_KILLED_JUGGERNAUT"); + maps\mp\gametypes\_gamescore::func_26D3("kill_juggernaut",param_01,var_0A,1); + param_01 thread maps\mp\gametypes\_rank::func_2AB3("kill_juggernaut"); + } + else if(var_0D) + { + var_11 = var_11 + maps\mp\gametypes\_rank::getscoreinfovalue("jugg_on_jugg"); + param_01 thread maps\mp\gametypes\_rank::xpeventpopup(&"SPLASHES_JUGGERNAUT_KILL_JUGGERNAUT"); + maps\mp\gametypes\_gamescore::func_26D3("jugg_on_jugg",param_01,var_0A,1); + param_01 thread maps\mp\gametypes\_rank::func_2AB3("jugg_on_jugg"); + } + else if(var_0F) + { + var_11 = var_11 + maps\mp\gametypes\_rank::getscoreinfovalue("kill_as_juggernaut"); + param_01 thread maps\mp\gametypes\_rank::xpeventpopup(&"SPLASHES_JUGGERNAUT_KILL"); + maps\mp\gametypes\_gamescore::func_26D3("kill_as_juggernaut",param_01,var_0A,1); + param_01 thread maps\mp\gametypes\_rank::func_2AB3("kill_as_juggernaut"); + } + + if(var_11) + { + param_01 maps\mp\gametypes\_gamescore::giveteamscoreforobjective(param_01.pers["team"],var_11); + } + + if(param_01.team != var_0A.team && game["state"] == "postgame" && game["teamScores"][param_01.team] > game["teamScores"][level.otherteam[param_01.team]]) + { + param_01.finalkill = 1; + return; + } + + return; + } + + if(isdefined(var_0A.isjuggmodejuggernaut)) + { + var_12 = getbestteammate(var_0A.team,0); + if(!isdefined(var_12)) + { + var_12 = getbestteammate(var_0A.team,1); + } + + if(!isdefined(var_12)) + { + var_12 = var_0A; + } + + func_3562(var_12,var_0A); + } +} + +//Function Number: 8 +func_3562(param_00,param_01) +{ + if(isdefined(param_01)) + { + param_01.isjuggmodejuggernaut = undefined; + } + else + { + level.jugg_available[param_00.team] = 0; + } + + level.jugg_currjugg[param_00.team] = undefined; + level.tjugg_timerdisplay[param_00.team].alpha = 0; + level.jugg_attackers[param_00.team] = []; + foreach(var_03 in level.players) + { + if(var_03.team == param_00.team) + { + var_03.jugg_alligience = 0; + } + } + + param_00 thread func_3563(); +} + +//Function Number: 9 +func_3563() +{ + if(!maps\mp\_utility::isreallyalive(self) || maps\mp\_utility::isusingremote()) + { + self endon("disconnect"); + thread resetjuggloadoutondisconnect(0); + while(!maps\mp\_utility::isreallyalive(self) || maps\mp\_utility::isusingremote()) + { + wait 0.05; + } + + self notify("end_resetJuggLoadoutOnDisconnect"); + } + + if(isdefined(self.iscarrying) && self.iscarrying == 1) + { + self notify("force_cancel_placement"); + wait 0.05; + } + + while(self ismantling()) + { + wait 0.05; + } + + while(!self isonground()) + { + wait 0.05; + } + + if(maps\mp\_utility::isjuggernaut()) + { + self notify("lost_juggernaut"); + wait 0.05; + } + + self.isjuggmodejuggernaut = 1; + level.jugg_currjugg[self.team] = self; + self.pers["gamemodeLoadout"] = level.tjugg_loadouts[self.pers["team"]]; + if(isdefined(self.setspawnpoint)) + { + maps\mp\perks\_perkfunctions::func_2A63(self.setspawnpoint); + } + + var_00 = spawn("script_model",self.origin); + var_00.angles = self.angles; + var_00.playerspawnpos = self.origin; + var_00.notti = 1; + self.setspawnpoint = var_00; + self.gamemode_chosenclass = self.class; + self.pers["class"] = "gamemode"; + self.pers["lastClass"] = "gamemode"; + self.class = "gamemode"; + self.lastclass = "gamemode"; + self notify("faux_spawn"); + self.faux_spawn_stance = self getstance(); + thread maps\mp\gametypes\_playerlogic::func_2B25(1); + var_01 = maps\mp\gametypes\_rank::getscoreinfovalue("got_juggernaut"); + thread maps\mp\gametypes\_hud_message::func_2892("got_juggernaut",var_01); + maps\mp\gametypes\_gamescore::func_26D3("got_juggernaut",self,undefined,1); + thread resetjuggloadoutondisconnect(1); + thread resetjuggloadoutonchangeteam(); + thread func_357D(); + thread logattackers(); + thread func_357B(); +} + +//Function Number: 10 +func_357B() +{ + level endon("game_ended"); + self endon("disconnect"); + self endon("death"); + level.tjugg_timerdisplay[self.team].label = &"MP_JUGG_NEXT_JUGG_IN"; + level.tjugg_timerdisplay[self.team] settimer(level.matchrules_juggswitchtime); + level.tjugg_timerdisplay[self.team].alpha = 1; + maps\mp\gametypes\_hostmigration::func_2740(level.matchrules_juggswitchtime); + level.tjugg_timerdisplay[self.team].alpha = 0; + var_00 = getbestteammate(self.team,0); + if(!isdefined(var_00)) + { + var_00 = getbestteammate(self.team,1); + } + + if(!isdefined(var_00)) + { + var_00 = self; + } + + maps\mp\_utility::func_2D68("mp_enemy_obj_captured"); + func_3562(var_00,self); + if(var_00 != self) + { + thread respawnoldjugg(); + } +} + +//Function Number: 11 +respawnoldjugg() +{ + level endon("game_ended"); + self endon("disconnect"); + while(!maps\mp\_utility::isreallyalive(self) || maps\mp\_utility::isusingremote()) + { + wait 0.05; + } + + if(isdefined(self.iscarrying) && self.iscarrying == 1) + { + self notify("force_cancel_placement"); + wait 0.05; + } + + if(isdefined(self.setspawnpoint)) + { + maps\mp\perks\_perkfunctions::func_2A63(self.setspawnpoint); + } + + playfx(level.respawnoldjugg_fx,self.origin); + self notify("lost_juggernaut"); + wait 0.05; + while(!self isonground()) + { + wait 0.05; + } + + self notify("faux_spawn"); + self.faux_spawn_stance = self getstance(); + thread maps\mp\gametypes\_playerlogic::func_2B25(1); +} + +//Function Number: 12 +func_357D() +{ + level endon("game_ended"); + self endon("death"); + self endon("disconnect"); + for(;;) + { + wait 1; + foreach(var_01 in level.players) + { + if(maps\mp\_utility::isreallyalive(var_01) && !var_01 maps\mp\_utility::isusingremote() && var_01 != self && var_01.team == self.team && distancesquared(var_01.origin,self.origin) < -17136) + { + var_01.jugg_alligience = var_01.jugg_alligience + 25; + } + } + } +} + +//Function Number: 13 +logattackers() +{ + level endon("game_ended"); + self endon("death"); + self endon("disconnect"); + for(;;) + { + self waittill("damage",var_00,var_01); + if(isplayer(var_01) && var_01.team != self.team) + { + if(!isdefined(level.jugg_attackers[self.team][var_01.guid])) + { + level.jugg_attackers[self.team][var_01.guid] = 1; + } + } + } +} + +//Function Number: 14 +resetjuggloadoutondisconnect(param_00) +{ + level endon("game_ended"); + if(param_00) + { + self endon("death"); + } + else + { + self endon("end_resetJuggLoadoutOnDisconnect"); + } + + var_01 = self.team; + self waittill("disconnect"); + var_02 = getbestteammate(var_01,0); + if(!isdefined(var_02)) + { + var_02 = getbestteammate(var_01,1); + } + + if(isdefined(var_02)) + { + maps\mp\_utility::func_2D68("mp_enemy_obj_captured"); + func_3562(var_02); + return; + } + + level.jugg_available[var_01] = 1; + level.jugg_currjugg[var_01] = undefined; + level.tjugg_timerdisplay[var_01].alpha = 0; + level.jugg_attackers[var_01] = []; + foreach(var_04 in level.players) + { + if(var_04.team == var_01) + { + var_04.jugg_alligience = 0; + } + } +} + +//Function Number: 15 +resetjuggloadoutonchangeteam() +{ + level endon("game_ended"); + self endon("disconnect"); + var_00 = self.team; + common_scripts\utility::waittill_any("joined_team","joined_spectators"); + self.isjuggmodejuggernaut = undefined; + var_01 = getbestteammate(var_00,0); + if(!isdefined(var_01)) + { + var_01 = getbestteammate(var_00,1); + } + + if(isdefined(var_01)) + { + maps\mp\_utility::func_2D68("mp_enemy_obj_captured"); + func_3562(var_01); + return; + } + + level.jugg_available[var_00] = 1; + level.jugg_currjugg[var_00] = undefined; + level.tjugg_timerdisplay[var_00].alpha = 0; + level.jugg_attackers[var_00] = []; + foreach(var_03 in level.players) + { + if(var_03.team == var_00) + { + var_03.jugg_alligience = 0; + } + } +} + +//Function Number: 16 +getbestteammate(param_00,param_01) +{ + var_02 = undefined; + var_03 = -1; + foreach(var_05 in level.players) + { + if((param_01 || !var_05 maps\mp\_utility::isusingremote()) && var_05 != self && var_05.team == param_00 && var_05.jugg_alligience > var_03) + { + var_02 = var_05; + var_03 = var_05.jugg_alligience; + } + } + + return var_02; +} + +//Function Number: 17 +func_34CC(param_00) +{ + level waittill("game_ended"); + param_00.alpha = 0; +} + +//Function Number: 18 +func_34B3() +{ + if(isusingmatchrulesdata() && getmatchrulesdata("defaultClasses","axis",5,"class","inUse")) + { + level.tjugg_loadouts["axis"] = maps\mp\_utility::func_334E("axis",5); + level.tjugg_loadouts["axis"]["loadoutJuggernaut"] = 1; + } + else + { + level.tjugg_loadouts["axis"]["loadoutPrimary"] = "iw5_scar"; + level.tjugg_loadouts["axis"]["loadoutPrimaryAttachment"] = "none"; + level.tjugg_loadouts["axis"]["loadoutPrimaryAttachment2"] = "none"; + level.tjugg_loadouts["axis"]["loadoutPrimaryBuff"] = "specialty_bulletpenetration"; + level.tjugg_loadouts["axis"]["loadoutPrimaryCamo"] = "none"; + level.tjugg_loadouts["axis"]["loadoutPrimaryReticle"] = "none"; + level.tjugg_loadouts["axis"]["loadoutSecondary"] = "rpg"; + level.tjugg_loadouts["axis"]["loadoutSecondaryAttachment"] = "none"; + level.tjugg_loadouts["axis"]["loadoutSecondaryAttachment2"] = "none"; + level.tjugg_loadouts["axis"]["loadoutSecondaryBuff"] = "specialty_null"; + level.tjugg_loadouts["axis"]["loadoutSecondaryCamo"] = "none"; + level.tjugg_loadouts["axis"]["loadoutSecondaryReticle"] = "none"; + level.tjugg_loadouts["axis"]["loadoutEquipment"] = "frag_grenade_mp"; + level.tjugg_loadouts["axis"]["loadoutOffhand"] = "smoke_grenade_mp"; + level.tjugg_loadouts["axis"]["loadoutPerk1"] = "specialty_scavenger"; + level.tjugg_loadouts["axis"]["loadoutPerk2"] = "_specialty_blastshield"; + level.tjugg_loadouts["axis"]["loadoutPerk3"] = "specialty_bulletaccuracy"; + level.tjugg_loadouts["axis"]["loadoutDeathstreak"] = "specialty_null"; + level.tjugg_loadouts["axis"]["loadoutJuggernaut"] = 1; + } + + if(isusingmatchrulesdata() && getmatchrulesdata("defaultClasses","allies",5,"class","inUse")) + { + level.tjugg_loadouts["allies"] = maps\mp\_utility::func_334E("allies",5); + level.tjugg_loadouts["allies"]["loadoutJuggernaut"] = 1; + return; + } + + level.tjugg_loadouts["allies"]["loadoutPrimary"] = "iw5_scar"; + level.tjugg_loadouts["allies"]["loadoutPrimaryAttachment"] = "none"; + level.tjugg_loadouts["allies"]["loadoutPrimaryAttachment2"] = "none"; + level.tjugg_loadouts["allies"]["loadoutPrimaryBuff"] = "specialty_bulletpenetration"; + level.tjugg_loadouts["allies"]["loadoutPrimaryCamo"] = "none"; + level.tjugg_loadouts["allies"]["loadoutPrimaryReticle"] = "none"; + level.tjugg_loadouts["allies"]["loadoutSecondary"] = "rpg"; + level.tjugg_loadouts["allies"]["loadoutSecondaryAttachment"] = "none"; + level.tjugg_loadouts["allies"]["loadoutSecondaryAttachment2"] = "none"; + level.tjugg_loadouts["allies"]["loadoutSecondaryBuff"] = "specialty_null"; + level.tjugg_loadouts["allies"]["loadoutSecondaryCamo"] = "none"; + level.tjugg_loadouts["allies"]["loadoutSecondaryReticle"] = "none"; + level.tjugg_loadouts["allies"]["loadoutEquipment"] = "frag_grenade_mp"; + level.tjugg_loadouts["allies"]["loadoutOffhand"] = "smoke_grenade_mp"; + level.tjugg_loadouts["allies"]["loadoutPerk1"] = "specialty_scavenger"; + level.tjugg_loadouts["allies"]["loadoutPerk2"] = "_specialty_blastshield"; + level.tjugg_loadouts["allies"]["loadoutPerk3"] = "specialty_bulletaccuracy"; + level.tjugg_loadouts["allies"]["loadoutDeathstreak"] = "specialty_null"; + level.tjugg_loadouts["allies"]["loadoutJuggernaut"] = 1; +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/gametypes/vip.gsc b/MW3/Xbox/MP/maps/mp/gametypes/vip.gsc new file mode 100644 index 0000000..ece2fbf --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/gametypes/vip.gsc @@ -0,0 +1,433 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\vip.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 23 + * Decompile Time: 301 ms + * Timestamp: 10/27/2023 2:26:28 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(getdvar("mapname") == "mp_background") + { + return; + } + + maps\mp\gametypes\_globallogic::init(); + maps\mp\gametypes\_callbacksetup::setupcallbacks(); + maps\mp\gametypes\_globallogic::setupcallbacks(); + maps\mp\_utility::func_330E(level.gametype,0,0,9); + maps\mp\_utility::func_3315(level.gametype,10,0,1440); + maps\mp\_utility::registerscorelimitdvar(level.gametype,500,0,5000); + maps\mp\_utility::func_3312(level.gametype,1,0,10); + maps\mp\_utility::registerwinlimitdvar(level.gametype,1,0,10); + maps\mp\_utility::func_330E(level.gametype,3,0,30); + maps\mp\_utility::func_3317(level.gametype,1,0,10); + maps\mp\_utility::func_3325("halftime",0); + level.teambased = 1; + level.objectivebased = 1; + level.onprecachegametype = ::onprecachegametype; + level.onstartgametype = ::onstartgametype; + level.getspawnpoint = ::getspawnpoint; + level.onspawnplayer = ::onspawnplayer; + level.onnormaldeath = ::onnormaldeath; + level.onplayerkilled = ::onplayerkilled; + level.ondeadevent = ::ondeadevent; + game["dialog"]["gametype"] = "VIP"; +} + +//Function Number: 2 +onprecachegametype() +{ + precacheshader("compass_waypoint_captureneutral"); + precacheshader("compass_waypoint_capture"); + precacheshader("compass_waypoint_defend"); + precacheshader("waypoint_captureneutral"); + precacheshader("waypoint_capture"); + precacheshader("waypoint_defend"); + precachestring(&"MP_ELIMINATED_VIP"); + precachestring(&"MP_DEFENDED_VIP"); + precachestring(&"SPLASHES_VIP"); + game["flagmodels"] = []; + game["flagmodels"]["neutral"] = "prop_flag_neutral"; + game["flagmodels"]["allies"] = maps\mp\gametypes\_teams::func_2774("allies"); + game["flagmodels"]["axis"] = maps\mp\gametypes\_teams::func_2774("axis"); + precachemodel(game["flagmodels"]["neutral"]); + precachemodel(game["flagmodels"]["allies"]); + precachemodel(game["flagmodels"]["axis"]); +} + +//Function Number: 3 +onstartgametype() +{ + setclientnamemode("auto_change"); + if(!isdefined(game["switchedsides"])) + { + game["switchedsides"] = 0; + } + + if(game["switchedsides"]) + { + var_00 = game["attackers"]; + var_01 = game["defenders"]; + game["attackers"] = var_01; + game["defenders"] = var_00; + } + + maps\mp\_utility::func_3305("allies",&"OBJECTIVES_VIP"); + maps\mp\_utility::func_3305("axis",&"OBJECTIVES_VIP"); + if(level.splitscreen) + { + maps\mp\_utility::func_3306("allies",&"OBJECTIVES_VIP"); + maps\mp\_utility::func_3306("axis",&"OBJECTIVES_VIP"); + } + else + { + maps\mp\_utility::func_3306("allies",&"OBJECTIVES_VIP_SCORE"); + maps\mp\_utility::func_3306("axis",&"OBJECTIVES_VIP_SCORE"); + } + + maps\mp\_utility::setobjectivehinttext("allies",&"OBJECTIVES_VIP_HINT"); + maps\mp\_utility::setobjectivehinttext("axis",&"OBJECTIVES_VIP_HINT"); + level.spawnmins = (0,0,0); + level.spawnmaxs = (0,0,0); + maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_tdm_spawn_allies_start"); + maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_tdm_spawn_axis_start"); + maps\mp\gametypes\_spawnlogic::func_2FD0("allies","mp_tdm_spawn"); + maps\mp\gametypes\_spawnlogic::func_2FD0("axis","mp_tdm_spawn"); + level.mapcenter = maps\mp\gametypes\_spawnlogic::func_2FCD(level.spawnmins,level.spawnmaxs); + setmapcenter(level.mapcenter); + var_02[0] = "vip"; + maps\mp\gametypes\_gameobjects::main(var_41); + thread func_3593(); +} + +//Function Number: 4 +func_3593() +{ + level endon("game_end"); + level endon("waitSkipped"); + thread extractionzone(); + thread skipwait(); + maps\mp\_utility::func_274B("prematch_done"); + maps\mp\_utility::func_274B("graceperiod_done"); + self notify("graceComplete"); + thread vipselection(); +} + +//Function Number: 5 +skipwait() +{ + self endon("graceComplete"); + for(;;) + { + if(level.players.size > 2) + { + break; + } + + wait 0.5; + } + + self notify("waitSkipped"); + thread vipselection(); +} + +//Function Number: 6 +getspawnpoint() +{ + var_00 = self.pers["team"]; + if(game["switchedsides"]) + { + var_00 = maps\mp\_utility::getotherteam(var_00); + } + + if(level.ingraceperiod) + { + var_01 = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_tdm_spawn_" + var_00 + "_start"); + var_02 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random(var_01); + } + else + { + var_01 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints(var_02); + var_02 = maps\mp\gametypes\_spawnlogic::func_2FE6(var_02); + } + + return var_02; +} + +//Function Number: 7 +onspawnplayer() +{ + self.isvip = 0; + self.usingobj = undefined; + level notify("spawned_player"); +} + +//Function Number: 8 +onnormaldeath(param_00,param_01,param_02) +{ + var_03 = maps\mp\gametypes\_rank::getscoreinfovalue("kill"); + param_01 maps\mp\gametypes\_gamescore::giveteamscoreforobjective(param_01.pers["team"],var_03); + var_04 = param_00.team; + if(isdefined(param_00.isvip) && param_00.isvip) + { + level thread func_35A4(game["attackers"],&"MP_ELIMINATED_VIP"); + param_01.finalkill = 1; + } +} + +//Function Number: 9 +onplayerkilled(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09) +{ + thread checkallowspectating(); +} + +//Function Number: 10 +ontimelimit() +{ + if(game["status"] == "overtime") + { + var_00 = "forfeit"; + } + else if(game["teamScores"]["allies"] == game["teamScores"]["axis"]) + { + var_00 = "overtime"; + } + else if(game["teamScores"]["axis"] > game["teamScores"]["allies"]) + { + var_00 = "axis"; + } + else + { + var_00 = "allies"; + } + + thread maps\mp\gametypes\_gamelogic::endgame(var_00,game["strings"]["time_limit_reached"]); +} + +//Function Number: 11 +checkallowspectating() +{ + wait 0.05; + var_00 = 0; + if(!level.alivecount[game["attackers"]]) + { + level.spectateoverride[game["attackers"]].allowenemyspectate = 1; + var_00 = 1; + } + + if(!level.alivecount[game["defenders"]]) + { + level.spectateoverride[game["defenders"]].allowenemyspectate = 1; + var_00 = 1; + } + + if(var_00) + { + maps\mp\gametypes\_spectating::updatespectatesettings(); + } +} + +//Function Number: 12 +ondeadevent(param_00) +{ + if(param_00 == game["attackers"]) + { + level thread func_35A4(game["defenders"],game["strings"][game["attackers"] + "_eliminated"]); + return; + } + + if(param_00 == game["defenders"]) + { + level thread func_35A4(game["attackers"],game["strings"][game["defenders"] + "_eliminated"]); + } +} + +//Function Number: 13 +func_35A4(param_00,param_01) +{ + thread maps\mp\gametypes\_gamelogic::endgame(param_00,param_01); +} + +//Function Number: 14 +vipselection() +{ + var_00 = []; + var_01 = 0; + for(;;) + { + if(level.players.size >= 2) + { + break; + } + + if(var_01 >= 100) + { + iprintlnbold("Game mode only playable with 2 or more players"); + wait 2; + maps\mp\gametypes\_callbacksetup::abortlevel(); + } + + var_01++; + wait 0.1; + } + + foreach(var_03 in level.players) + { + if(var_03.team == game["defenders"]) + { + var_00[var_00.size] = var_03; + } + } + + var_05 = randomintrange(0,var_00.size); + var_06 = var_00[var_05]; + if(!isalive(var_06) && !issubstr(var_06.guid,"bot")) + { + var_06 forcevipspawn(); + } + + func_35A6(var_06); +} + +//Function Number: 15 +func_35A6(param_00) +{ + param_00 takeallweapons(); + param_00 maps\mp\_utility::_clearperks(); + param_00.isvip = 1; + param_00 giveweapon("deserteagle_fmj_mp"); + param_00 givestartammo("deserteagle_fmj_mp"); + param_00 giveweapon("riotshield_mp"); + param_00 switchtoweapon("riotshield_mp"); + param_00 maps\mp\_utility::giveperk("specialty_armorvest",0); + param_00 maps\mp\_utility::giveperk("specialty_finalstand",0); + param_00 iprintlnbold("You Are the VIP"); +} + +//Function Number: 16 +extractionzone() +{ + var_00 = getentarray("extraction_vip","targetname"); + if(!isdefined(var_00)) + { + maps\mp\gametypes\_callbacksetup::abortlevel(); + return; + } + else + { + level.extractionzone = var_00; + } + + var_01 = level.extractionzone[0]; + if(isdefined(var_01.target)) + { + var_02[0] = getent(var_01.target,"targetname"); + } + else + { + var_00[0] = spawn("script_model",var_02.origin); + var_02[0].angles = var_01.angles; + } + + var_00 = maps\mp\gametypes\_gameobjects::func_29E7(game["defenders"],var_01,var_02,(0,0,100)); + var_00 maps\mp\gametypes\_gameobjects::allowuse("friendly"); + var_00 maps\mp\gametypes\_gameobjects::setvisibleteam("none"); + var_00 maps\mp\gametypes\_gameobjects::setusetext(&"MP_CALLING_EXTRACTION"); + var_00 maps\mp\gametypes\_gameobjects::setusetime(0); + var_00.onuse = ::onuse; + var_00.oncantuse = ::oncantuse; + var_03 = var_01.origin + (0,0,32); + var_04 = var_01.origin + (0,0,-32); + var_05 = bullettrace(var_03,var_04,0,undefined); + var_06 = maps\mp\gametypes\_teams::func_2777(game["defenders"]); + var_07 = loadfx(var_06); + var_08 = vectortoangles(var_05["normal"]); + var_09 = anglestoforward(var_08); + var_0A = anglestoright(var_08); + thread func_3084(var_07,var_05["position"],var_09,var_0A,0.5); + var_00 maps\mp\gametypes\_gameobjects::set2dicon("friendly","compass_waypoint_defend"); + var_00 maps\mp\gametypes\_gameobjects::func_2A25("friendly","waypoint_defend"); + var_00 maps\mp\gametypes\_gameobjects::setvisibleteam("friendly"); + level.extractionzone = var_00; +} + +//Function Number: 17 +setvipuse() +{ + foreach(var_01 in level.players) + { + if(!var_01.isvip) + { + self.trigger disableplayeruse(var_01); + } + } +} + +//Function Number: 18 +onuse(param_00) +{ + if(!isdefined(param_00.isvip) || !param_00.isvip) + { + return; + } + + iprintlnbold("Extraction on its way"); + func_35A9(param_00); +} + +//Function Number: 19 +func_35A9(param_00) +{ + param_00 endon("death"); + level endon("game_end"); + level.extractiontime = 45; + maps\mp\gametypes\_gamelogic::pausetimer(); + level.timelimitoverride = 1; + setgameendtime(int(gettime() + level.extractiontime * 1000)); + wait level.extractiontime; + level thread func_35A4(game["defenders"],&"MP_DEFENDED_VIP"); +} + +//Function Number: 20 +onenduse(param_00,param_01,param_02) +{ +} + +//Function Number: 21 +oncantuse(param_00) +{ +} + +//Function Number: 22 +func_3084(param_00,param_01,param_02,param_03,param_04) +{ + wait param_04; + var_05 = spawnfx(param_00,param_01,param_02,param_03); + triggerfx(var_05); +} + +//Function Number: 23 +forcevipspawn() +{ + self endon("death"); + self endon("disconnect"); + self endon("spawned"); + if(self.hasspawned) + { + return; + } + + if(!maps\mp\_utility::func_2B5F(self.pers["class"])) + { + self.pers["class"] = "CLASS_CUSTOM1"; + self.class = self.pers["class"]; + } + + maps\mp\_utility::closemenus(); + thread maps\mp\gametypes\_playerlogic::spawnclient(); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/gametypes/war.gsc b/MW3/Xbox/MP/maps/mp/gametypes/war.gsc new file mode 100644 index 0000000..95d2223 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/gametypes/war.gsc @@ -0,0 +1,188 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\gametypes\war.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 6 + * Decompile Time: 101 ms + * Timestamp: 10/27/2023 2:26:29 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(getdvar("mapname") == "mp_background") + { + return; + } + + maps\mp\gametypes\_globallogic::init(); + maps\mp\gametypes\_callbacksetup::setupcallbacks(); + maps\mp\gametypes\_globallogic::setupcallbacks(); + if(isusingmatchrulesdata()) + { + level.initializematchrules = ::initializematchrules; + [[ level.initializematchrules ]](); + level thread maps\mp\_utility::func_810A(); + } + else + { + maps\mp\_utility::func_330E(level.gametype,0,0,9); + maps\mp\_utility::func_3315(level.gametype,10); + maps\mp\_utility::registerscorelimitdvar(level.gametype,500); + maps\mp\_utility::func_3312(level.gametype,1); + maps\mp\_utility::registerwinlimitdvar(level.gametype,1); + maps\mp\_utility::func_3317(level.gametype,0); + maps\mp\_utility::registerhalftimedvar(level.gametype,0); + level.matchrules_damagemultiplier = 0; + level.matchrules_vampirism = 0; + } + + level.teambased = 1; + level.onstartgametype = ::onstartgametype; + level.getspawnpoint = ::getspawnpoint; + level.onnormaldeath = ::onnormaldeath; + if(level.matchrules_damagemultiplier || level.matchrules_vampirism) + { + level.modifyplayerdamage = ::maps\mp\gametypes\_damage::func_2D57; + } + + game["dialog"]["gametype"] = "tm_death"; + if(getdvarint("g_hardcore")) + { + game["dialog"]["gametype"] = "hc_" + game["dialog"]["gametype"]; + } + else if(getdvarint("camera_thirdPerson")) + { + game["dialog"]["gametype"] = "thirdp_" + game["dialog"]["gametype"]; + } + else if(getdvarint("scr_diehard")) + { + game["dialog"]["gametype"] = "dh_" + game["dialog"]["gametype"]; + } + else if(getdvarint("scr_" + level.gametype + "_promode")) + { + game["dialog"]["gametype"] = game["dialog"]["gametype"] + "_pro"; + } + + game["strings"]["overtime_hint"] = &"MP_FIRST_BLOOD"; +} + +//Function Number: 2 +initializematchrules() +{ + maps\mp\_utility::func_334C(); + setdynamicdvar("scr_war_roundswitch",0); + maps\mp\_utility::func_330E("war",0,0,9); + setdynamicdvar("scr_war_roundlimit",1); + maps\mp\_utility::func_3312("war",1); + setdynamicdvar("scr_war_winlimit",1); + maps\mp\_utility::registerwinlimitdvar("war",1); + setdynamicdvar("scr_war_halftime",0); + maps\mp\_utility::registerhalftimedvar("war",0); + setdynamicdvar("scr_war_promode",0); +} + +//Function Number: 3 +onstartgametype() +{ + setclientnamemode("auto_change"); + if(!isdefined(game["switchedsides"])) + { + game["switchedsides"] = 0; + } + + if(game["switchedsides"]) + { + var_00 = game["attackers"]; + var_01 = game["defenders"]; + game["attackers"] = var_01; + game["defenders"] = var_00; + } + + maps\mp\_utility::func_3305("allies",&"OBJECTIVES_WAR"); + maps\mp\_utility::func_3305("axis",&"OBJECTIVES_WAR"); + if(level.splitscreen) + { + maps\mp\_utility::func_3306("allies",&"OBJECTIVES_WAR"); + maps\mp\_utility::func_3306("axis",&"OBJECTIVES_WAR"); + } + else + { + maps\mp\_utility::func_3306("allies",&"OBJECTIVES_WAR_SCORE"); + maps\mp\_utility::func_3306("axis",&"OBJECTIVES_WAR_SCORE"); + } + + maps\mp\_utility::setobjectivehinttext("allies",&"OBJECTIVES_WAR_HINT"); + maps\mp\_utility::setobjectivehinttext("axis",&"OBJECTIVES_WAR_HINT"); + level.spawnmins = (0,0,0); + level.spawnmaxs = (0,0,0); + maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_tdm_spawn_allies_start"); + maps\mp\gametypes\_spawnlogic::placespawnpoints("mp_tdm_spawn_axis_start"); + maps\mp\gametypes\_spawnlogic::func_2FD0("allies","mp_tdm_spawn"); + maps\mp\gametypes\_spawnlogic::func_2FD0("axis","mp_tdm_spawn"); + level.mapcenter = maps\mp\gametypes\_spawnlogic::func_2FCD(level.spawnmins,level.spawnmaxs); + setmapcenter(level.mapcenter); + var_02[0] = level.gametype; + maps\mp\gametypes\_gameobjects::main(var_41); +} + +//Function Number: 4 +getspawnpoint() +{ + var_00 = self.pers["team"]; + if(game["switchedsides"]) + { + var_00 = maps\mp\_utility::getotherteam(var_00); + } + + if(level.ingraceperiod) + { + var_01 = maps\mp\gametypes\_spawnlogic::getspawnpointarray("mp_tdm_spawn_" + var_00 + "_start"); + var_02 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random(var_01); + } + else + { + var_01 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints(var_02); + var_02 = maps\mp\gametypes\_spawnlogic::func_2FE6(var_02); + } + + return var_02; +} + +//Function Number: 5 +onnormaldeath(param_00,param_01,param_02) +{ + var_03 = maps\mp\gametypes\_rank::getscoreinfovalue("kill"); + param_01 maps\mp\gametypes\_gamescore::giveteamscoreforobjective(param_01.pers["team"],var_03); + if(game["state"] == "postgame" && game["teamScores"][param_01.team] > game["teamScores"][level.otherteam[param_01.team]]) + { + param_01.finalkill = 1; + } +} + +//Function Number: 6 +ontimelimit() +{ + level.finalkillcam_winner = "none"; + if(game["status"] == "overtime") + { + var_00 = "forfeit"; + } + else if(game["teamScores"]["allies"] == game["teamScores"]["axis"]) + { + var_00 = "overtime"; + } + else if(game["teamScores"]["axis"] > game["teamScores"]["allies"]) + { + level.finalkillcam_winner = "axis"; + var_00 = "axis"; + } + else + { + level.finalkillcam_winner = "allies"; + var_00 = "allies"; + } + + thread maps\mp\gametypes\_gamelogic::endgame(var_00,game["strings"]["time_limit_reached"]); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/killstreaks/_a10.gsc b/MW3/Xbox/MP/maps/mp/killstreaks/_a10.gsc new file mode 100644 index 0000000..95dae02 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/killstreaks/_a10.gsc @@ -0,0 +1,567 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\killstreaks\_a10.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 22 + * Decompile Time: 316 ms + * Timestamp: 10/27/2023 2:26:30 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + precachestring(&"MP_WAR_AIRSTRIKE_INBOUND"); + precachestring(&"SPLASHES_DESTROYED_A10"); + precachestring(&"KILLSTREAKS_A10_SUPPORT"); + precachemodel("vehicle_a10_warthog"); + precacheitem("a10_30mm_mp"); + precachempanim("MP_A10_strafing_run"); + precacheshader("compass_objpoint_a10_friendly"); + precacheshader("compass_objpoint_a10_enemy"); + precacheminimapicon("compass_objpoint_a10_friendly"); + precacheminimapicon("compass_objpoint_a10_enemy"); + level.a10_fx["bullet_rain"] = loadfx("misc/warthog_volley_runner"); + level.a10_fx["bullet_impacts"] = loadfx("impacts/warthog_volley_runner"); + level.a10_fx["bullet_dust"] = loadfx("dust/wing_drop_dust"); + level.a10_fx["afterburner"] = loadfx("fire/jet_afterburner"); + level.a10_fx["contrail"] = loadfx("smoke/jet_contrail"); + level.a10_fx["wingtip_light_green"] = loadfx("misc/aircraft_light_wingtip_green"); + level.a10_fx["wingtip_light_red"] = loadfx("misc/aircraft_light_wingtip_red"); + level.killstreakfuncs["a10_support"] = ::tryusea10strike; + level.killstreaksetupfuncs["a10_support"] = ::func_3430; + level.a10maxhealth = 350; + level.a10speed = 100; + level.a10speedreduction = 75; + level.a10startpointoffset = 5000; + level.a10impactfxdelay = 0.5; + level.a10damage = 200; + level.a10damageradius = 384; + level.a10damagedelay = 0.5; + level.a10bulletraindelay = 0.5; + level.a10bulletimpactsdelay = 0.5; + level.a10earthquakemagnitude = 0.1; + level.a10earthquakeduration = 0.5; + level.a10earthquakedelay = 0.5; + level.a10dirteffectradius = 350; + level.a10shootinggroundsounddelay = 0.1; + level.a10startpositionscalar = 2000; +} + +//Function Number: 2 +func_3430() +{ + self.useduava10 = 0; +} + +//Function Number: 3 +tryusea10strike(param_00) +{ + var_01 = undefined; + if(isdefined(level.civilianjetflyby)) + { + self iprintlnbold(&"MP_CIVILIAN_AIR_TRAFFIC"); + return 0; + } + + if(maps\mp\_utility::isusingremote()) + { + return 0; + } + + if(maps\mp\_utility::func_2BE7()) + { + return 0; + } + + if(maps\mp\_utility::func_27E5()) + { + return 0; + } + + var_02 = "a10_support"; + if(!self.useduava10) + { + self.useduava10 = 1; + maps\mp\killstreaks\_uav::useuav(var_02); + } + + var_01 = func_3433(param_00,var_02); + if(!isdefined(var_01) || !var_01) + { + return 0; + } + + return 1; +} + +//Function Number: 4 +func_3433(param_00,param_01) +{ + self playlocalsound("US_KS_hqr_a10"); + maps\mp\_utility::_beginlocationselection(param_01,"map_artillery_selector",1,500); + self endon("stop_location_selection"); + self waittill("confirm_location",var_02,var_03); + self playlocalsound("US_KS_a10_inbound"); + thread finisha10strikeusage(param_00,var_02,::calla10strike,var_03); + self setblurforplayer(0,0.3); + return 1; +} + +//Function Number: 5 +finisha10strikeusage(param_00,param_01,param_02,param_03) +{ + self notify("used"); + wait 0.05; + thread maps\mp\_utility::func_2EB1(0); + self thread [[ param_02 ]](param_00,param_01,param_03); + return 1; +} + +//Function Number: 6 +calla10strike(param_00,param_01,param_02) +{ + if(!isdefined(self)) + { + return; + } + + if(level.teambased) + { + var_03 = level.players; + foreach(var_05 in level.players) + { + var_06 = var_05.pers["team"]; + if(isdefined(var_06)) + { + if(var_06 == self.team) + { + var_05 iprintln(&"MP_WAR_AIRSTRIKE_INBOUND",self); + } + } + } + } + + var_08 = (0,param_02,0); + var_09 = 12000; + var_0A = param_01 + anglestoforward(var_08) * -1 * var_09; + var_0B = param_01 + anglestoforward(var_08) * var_09 * 2; + var_0A = var_0A * (1,1,0); + var_0B = var_0B * (1,1,0); + var_0C = getbestheight(var_0A,var_0B); + var_0B = var_0B + (0,0,var_0C); + var_0A = var_0A + (0,0,var_0C); + self endon("disconnect"); + var_0D = self.lifeid; + level thread doa10strike(param_00,self,var_0D,param_01,var_0A,var_0B,var_08,0); +} + +//Function Number: 7 +getbestheight(param_00,param_01) +{ + var_02 = getent("airstrikeheight","targetname"); + var_03 = level.spawnpoints; + var_04 = var_03[0]; + foreach(var_06 in var_03) + { + if(var_06.origin[2] < var_04.origin[2]) + { + var_04 = var_06; + } + } + + if(isdefined(var_02)) + { + var_08 = var_02.origin[2]; + } + else if(isdefined(level.airstrikeheightscale)) + { + var_08 = 850 * level.airstrikeheightscale; + } + else + { + var_08 = 850; + } + + var_09 = var_08; + var_0A = var_08; + var_0B = var_04.origin[2]; + var_0C = undefined; + var_0D = 0; + for(;;) + { + var_0E = var_0A - var_0B / 2 + var_0B; + var_0F = bullettrace(param_00 + (0,0,var_0E),param_01 + (0,0,var_0E),0,undefined); + if(var_0F["surfacetype"] != "none") + { + var_0B = var_0E; + var_0D++; + if(var_0D > 4 && isdefined(var_0C)) + { + var_08 = var_0C; + break; + } + else if(var_0D > 6) + { + var_08 = var_09; + break; + } + } + else + { + var_0C = var_0E; + var_0A = var_0E; + if(var_0E < var_04.origin[2] + 512) + { + var_08 = var_04.origin[2] + 512; + break; + } + } + + wait 0.05; + } + + var_0D = 0; + for(;;) + { + wait 0.05; + var_10 = bullettrace(param_00 + (0,0,var_08),param_01 + (0,0,var_08),0,undefined); + var_11 = bullettrace(param_00 + (50,50,var_08 + 50),param_01 + (50,50,var_08 + 50),0,undefined); + wait 0.05; + var_12 = bullettrace(param_00 + (-50,-50,var_08 - 50),param_01 + (-50,-50,var_08 - 50),0,undefined); + var_13 = bullettrace(param_00 + (50,50,var_08 - 50),param_01 + (50,50,var_08 - 50),0,undefined); + wait 0.05; + var_14 = bullettrace(param_00 + (-50,-50,var_08 + 50),param_01 + (-50,-50,var_08 + 50),0,undefined); + if(var_10["surfacetype"] != "none" || var_11["surfacetype"] != "none" || var_12["surfacetype"] != "none" || var_13["surfacetype"] != "none" || var_14["surfacetype"] != "none") + { + var_0D++; + var_08 = var_08 + 200; + if(var_0D > 5) + { + var_08 = var_09; + break; + } + + continue; + } + + break; + } + + return var_08 + 175; +} + +//Function Number: 8 +doa10strike(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07) +{ + if(!isdefined(param_01)) + { + return; + } + + var_08 = func_343E(param_01,param_04,param_05,param_03,param_07); + var_08.lifeid = param_00; + var_08 playloopsound("veh_mig29_dist_loop"); + var_09 = level.spawnpoints; + var_0A = var_09[0]; + foreach(var_0C in var_09) + { + if(var_0C.origin[2] > var_0A.origin[2]) + { + var_0A = var_0C; + } + } + + var_08.killcament = spawn("script_model",(var_08.origin[0],var_08.origin[1],var_0A.origin[2] + 5000)); + var_08.killcament linkto(var_08); + param_01.a10 = var_08; + var_08 thread watchtimeout(); + var_08 thread func_28F6(); + var_08 endon("death"); + var_08 thread func_3438(); +} + +//Function Number: 9 +watchtimeout() +{ + level endon("game_ended"); + self endon("gone"); + self endon("death"); + maps\mp\gametypes\_hostmigration::func_2740(35); + self notify("death"); +} + +//Function Number: 10 +func_3438() +{ + self endon("death"); + wait self.initialdelay; + var_00 = self.startpoint; + var_01 = self.attackpoint; + var_02 = self.endpoint; + var_01 = (var_01[0],var_01[1],var_00[2] - level.a10startpointoffset); + var_03 = distance(var_00,var_01) * 0.5; + var_04 = float(level.a10speed); + var_05 = var_03 / var_04 / 60; + var_06 = var_00 + vectornormalize(var_01 - var_00) * var_03; + thread a10playenginefx(); + self moveto(var_06,var_05); + wait var_05; + var_03 = distance(var_00,var_01) * 0.5; + var_04 = float(level.a10speed - level.a10speedreduction); + var_05 = var_03 / var_04 / 60; + self moveto(var_01,var_05); + thread func_3440(var_05); + thread monitorkills(); + wait var_05; + self notify("stopShooting"); + var_03 = distance2d(var_01,var_02); + var_04 = level.a10speed; + var_05 = var_03 / var_04 / 60; + self moveto(var_02,var_05); + var_07 = vectortoangles(var_02 - var_01); + self waittill("movedone"); + self notify("gone"); + wait 0.5; + func_3448(); +} + +//Function Number: 11 +a10playenginefx() +{ + self endon("death"); + wait 0.5; + playfxontag(level.a10_fx["afterburner"],self,"tag_engine_right"); + wait 0.5; + playfxontag(level.a10_fx["afterburner"],self,"tag_engine_left"); + wait 0.5; + playfxontag(level.a10_fx["contrail"],self,"tag_right_wingtip"); + wait 0.5; + playfxontag(level.a10_fx["contrail"],self,"tag_left_wingtip"); + wait 0.5; + playfxontag(level.a10_fx["wingtip_light_red"],self,"tag_right_wingtip"); + wait 0.5; + playfxontag(level.a10_fx["wingtip_light_green"],self,"tag_left_wingtip"); +} + +//Function Number: 12 +monitorkills() +{ + level endon("game_ended"); + self endon("gone"); + self endon("death"); + self endon("stopShooting"); + for(;;) + { + self waittill("killedPlayer"); + self.killcount++; + } +} + +//Function Number: 13 +func_343E(param_00,param_01,param_02,param_03,param_04) +{ + param_01 = param_01 + (0,0,level.a10startpointoffset); + var_05 = vectortoangles(param_02 - param_01); + var_06 = spawn("script_model",param_01); + var_07 = spawnplane(param_00,"script_model",param_01,"compass_objpoint_a10_friendly","compass_objpoint_a10_enemy"); + if(!isdefined(var_06)) + { + return; + } + + var_07 linkto(var_06); + var_06.fakea10 = var_07; + var_06 setmodel("vehicle_a10_warthog"); + var_06.health = 999999; + var_06.maxhealth = level.a10maxhealth; + var_06.damagetaken = 0; + var_06.owner = param_00; + var_06.team = param_00.team; + var_06.killcount = 0; + var_06.startpoint = param_01; + var_06.endpoint = param_02; + var_06.attackpoint = param_03; + var_06.initialdelay = param_04; + var_06.angles = var_05; + return var_06; +} + +//Function Number: 14 +func_3440(param_00) +{ + self endon("gone"); + self endon("death"); + self endon("stopShooting"); + var_01 = level.spawnpoints; + var_02 = var_01[0]; + var_03 = vectornormalize(self.origin - self.attackpoint) * level.a10startpositionscalar; + var_03 = self.attackpoint + (var_03[0],var_03[1],0); + var_04 = vectornormalize(self.origin - self.attackpoint) * -1 * level.a10startpositionscalar; + var_04 = self.attackpoint + (var_04[0],var_04[1],0); + var_05 = vectornormalize(var_04 - var_03); + var_06 = distance2d(var_03,var_04) / param_00 / 0.05; + self.a10shootingpos = (var_03[0],var_03[1],var_02.origin[2] - 128); + var_07 = var_05 * var_06; + thread func_3442(); + thread func_3443(); + thread manageshootinggroundsound(); + thread func_3445(); + while(param_00 > 0) + { + foreach(var_09 in level.players) + { + if(level.teambased) + { + if(var_09.team != self.owner.team) + { + var_0A = pointonsegmentnearesttopoint(self.origin,self.a10shootingpos,var_09.origin); + if(distancesquared(var_0A,var_09.origin) < level.a10damageradius * level.a10damageradius) + { + radiusdamage(var_0A,level.a10damageradius,level.a10damage,level.a10damage,self,"MOD_RIFLE_BULLET","a10_30mm_mp"); + } + } + + continue; + } + + var_0A = pointonsegmentnearesttopoint(self.origin,self.a10shootingpos,var_09.origin); + if(distancesquared(var_0A,var_09.origin) < level.a10damageradius * level.a10damageradius) + { + radiusdamage(var_0A,level.a10damageradius,level.a10damage,level.a10damage,self,"MOD_RIFLE_BULLET","a10_30mm_mp"); + } + } + + var_0C = self gettagorigin("tag_gun"); + for(var_0D = 0;var_0D < 1;var_0D++) + { + magicbullet("a10_30mm_mp",var_0C,self.a10shootingpos + (randomintrange(-100,100),randomintrange(-100,100),0),self.owner); + } + + self.a10shootingpos = self.a10shootingpos + (var_07[0],var_07[1],0); + param_00 = param_00 - 0.05; + wait 0.05; + } +} + +//Function Number: 15 +func_3442() +{ + self endon("gone"); + self endon("death"); + self endon("stopShooting"); + for(;;) + { + var_00 = self gettagorigin("tag_gun"); + var_01 = self.a10shootingpos - var_00; + var_02 = anglestoup(var_01); + playfx(level.a10_fx["bullet_rain"],var_00,var_01,var_02); + wait level.a10bulletraindelay; + } +} + +//Function Number: 16 +func_3443() +{ + var_00 = spawn("script_origin",self gettagorigin("tag_gun")); + if(!isdefined(var_00)) + { + return; + } + + var_00 linkto(self,"tag_gun"); + var_00 playloopsound("pavelow_mg_loop"); + common_scripts\utility::waittill_any("stopShooting","gone","death"); + var_00 stoploopsound("pavelow_mg_loop"); + wait 0.5; + var_00 delete(); +} + +//Function Number: 17 +manageshootinggroundsound() +{ + self endon("death"); + self endon("gone"); + self endon("stopShooting"); + for(;;) + { + level thread common_scripts\utility::play_sound_in_space("bullet_a10warthog_default",self.a10shootingpos); + wait level.a10shootinggroundsounddelay; + } +} + +//Function Number: 18 +func_3445() +{ + self endon("death"); + self endon("gone"); + self endon("stopShooting"); + for(;;) + { + playrumbleonposition("grenade_rumble",self.a10shootingpos); + earthquake(level.a10earthquakemagnitude,level.a10earthquakeduration,self.a10shootingpos,level.a10damageradius); + foreach(var_01 in level.players) + { + if(var_01 maps\mp\_utility::isusingremote()) + { + continue; + } + + if(distance(self.a10shootingpos,var_01.origin) > level.a10dirteffectradius) + { + continue; + } + + if(var_01 damageconetrace(self.a10shootingpos)) + { + var_01 thread maps\mp\gametypes\_shellshock::dirteffect(self.a10shootingpos); + } + } + + wait level.a10earthquakedelay; + } +} + +//Function Number: 19 +func_28F6() +{ + self endon("gone"); + self waittill("death"); + thread func_3446(); +} + +//Function Number: 20 +func_3446() +{ + self endon("gone"); + if(!isdefined(self)) + { + return; + } + + wait randomfloatrange(0.5,1.5); + func_3447(); +} + +//Function Number: 21 +func_3447() +{ + self notify("explode"); + func_3448(); +} + +//Function Number: 22 +func_3448() +{ + if(isdefined(self.killcament)) + { + self.killcament delete(); + } + + if(isdefined(self.fakea10)) + { + self.fakea10 delete(); + } + + self delete(); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/killstreaks/_aamissile.gsc b/MW3/Xbox/MP/maps/mp/killstreaks/_aamissile.gsc new file mode 100644 index 0000000..12ce3eb --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/killstreaks/_aamissile.gsc @@ -0,0 +1,253 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\killstreaks\_aamissile.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 11 + * Decompile Time: 158 ms + * Timestamp: 10/27/2023 2:26:31 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + precacheitem("aamissile_projectile_mp"); + precacheshader("ac130_overlay_grain"); + level.aamissilelaunchvert = 14000; + level.aamissilelaunchhorz = 30000; + level.aamissilelaunchtargetdist = 1500; + level.rockets = []; + level.killstreakfuncs["aamissile"] = ::func_35B9; +} + +//Function Number: 2 +func_35B9(param_00) +{ + if(isdefined(level.civilianjetflyby)) + { + self iprintlnbold(&"MP_CIVILIAN_AIR_TRAFFIC"); + return 0; + } + + maps\mp\_utility::setusingremote("aamissile"); + var_01 = maps\mp\killstreaks\_killstreaks::initridekillstreak(); + if(var_01 != "success") + { + if(var_01 != "disconnect") + { + maps\mp\_utility::clearusingremote(); + } + + return 0; + } + + level thread aa_missile_fire(param_00,self); + return 1; +} + +//Function Number: 3 +drawline(param_00,param_01,param_02,param_03) +{ + var_04 = int(param_02 * 20); + for(var_05 = 0;var_05 < var_04;var_05++) + { + wait 0.05; + } +} + +//Function Number: 4 +gettargets() +{ + var_00 = []; + var_01 = []; + if(isdefined(level.littlebirds) && level.littlebirds.size) + { + foreach(var_03 in level.littlebirds) + { + if(var_03.team != self.team) + { + var_00[var_00.size] = var_03; + } + } + } + + if(isdefined(level.helis) && level.helis.size) + { + foreach(var_06 in level.helis) + { + if(var_06.team != self.team) + { + var_01[var_01.size] = var_06; + } + } + } + + if(level.ac130inuse && isdefined(level.ac130.owner) && level.ac130.owner.team != self.team) + { + return level.ac130.planemodel; + } + + if(isdefined(var_01) && var_01.size) + { + return var_01[0]; + } + + if(isdefined(var_00) && var_00.size) + { + return var_00[0]; + } +} + +//Function Number: 5 +aa_missile_fire(param_00,param_01) +{ + var_02 = undefined; + var_03 = (0,0,level.aamissilelaunchvert); + var_04 = level.aamissilelaunchhorz; + var_05 = level.aammissilelaunchtargetdist; + var_06 = param_01 gettargets(); + if(!isdefined(var_06)) + { + var_07 = (0,0,0); + } + else + { + var_07 = var_07.origin; + var_03 = (0,0,1) * var_07 + (0,0,1000); + } + + var_08 = anglestoforward(param_01.angles); + var_09 = param_01.origin + var_03 + var_08 * var_04 * -1; + var_0A = magicbullet("aamissile_projectile_mp",var_09,var_07,param_01); + if(!isdefined(var_0A)) + { + param_01 maps\mp\_utility::clearusingremote(); + return; + } + + var_0A.lifeid = param_00; + var_0A.type = "remote"; + missileeyes(param_01,var_0A); +} + +//Function Number: 6 +missileeyes(param_00,param_01) +{ + param_00 endon("joined_team"); + param_00 endon("joined_spectators"); + param_01 thread rocket_cleanupondeath(); + param_00 thread player_cleanupongameended(param_01); + param_00 thread func_3077(param_01); + param_00 visionsetmissilecamforplayer("black_bw",0); + param_00 endon("disconnect"); + if(isdefined(param_01)) + { + param_00 visionsetmissilecamforplayer(game["thermal_vision"],1); + param_00 thread func_3074(); + param_00 cameralinkto(param_01,"tag_origin"); + param_00 controlslinkto(param_01); + if(getdvarint("camera_thirdPerson")) + { + param_00 maps\mp\_utility::setthirdpersondof(0); + } + + param_01 waittill("death"); + if(isdefined(param_01)) + { + param_00 maps\mp\_matchdata::logkillstreakevent("predator_missile",param_01.origin); + } + + param_00 controlsunlink(); + param_00 maps\mp\_utility::freezecontrolswrapper(1); + if(!level.gameended || isdefined(param_00.finalkill)) + { + param_00 thread staticeffect(0.5); + } + + wait 0.5; + param_00 thermalvisionfofoverlayoff(); + param_00 cameraunlink(); + if(getdvarint("camera_thirdPerson")) + { + param_00 maps\mp\_utility::setthirdpersondof(1); + } + } + + param_00 maps\mp\_utility::clearusingremote(); +} + +//Function Number: 7 +func_3074() +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + wait 0.15; + self thermalvisionfofoverlayon(); +} + +//Function Number: 8 +staticeffect(param_00) +{ + self endon("disconnect"); + var_01 = newclienthudelem(self); + var_01.horzalign = "fullscreen"; + var_01.vertalign = "fullscreen"; + var_01 setshader("white",640,480); + var_01.archive = 1; + var_01.sort = 10; + var_02 = newclienthudelem(self); + var_02.horzalign = "fullscreen"; + var_02.vertalign = "fullscreen"; + var_02 setshader("ac130_overlay_grain",640,480); + var_02.archive = 1; + var_02.sort = 20; + wait param_00; + var_02 destroy(); + var_01 destroy(); +} + +//Function Number: 9 +func_3077(param_00) +{ + param_00 endon("death"); + self endon("disconnect"); + common_scripts\utility::waittill_any("joined_team","joined_spectators"); + if(self.team != "spectator") + { + self thermalvisionfofoverlayoff(); + self controlsunlink(); + self cameraunlink(); + if(getdvarint("camera_thirdPerson")) + { + maps\mp\_utility::setthirdpersondof(1); + } + } + + maps\mp\_utility::clearusingremote(); + level.remotemissileinprogress = undefined; +} + +//Function Number: 10 +rocket_cleanupondeath() +{ + var_00 = self getentitynumber(); + level.rockets[var_00] = self; + self waittill("death"); + level.rockets[var_00] = undefined; +} + +//Function Number: 11 +player_cleanupongameended(param_00) +{ + param_00 endon("death"); + self endon("death"); + level waittill("game_ended"); + self thermalvisionfofoverlayoff(); + self controlsunlink(); + self cameraunlink(); + if(getdvarint("camera_thirdPerson")) + { + maps\mp\_utility::setthirdpersondof(1); + } +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/killstreaks/_aastrike.gsc b/MW3/Xbox/MP/maps/mp/killstreaks/_aastrike.gsc new file mode 100644 index 0000000..25ba54b --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/killstreaks/_aastrike.gsc @@ -0,0 +1,318 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\killstreaks\_aastrike.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 11 + * Decompile Time: 185 ms + * Timestamp: 10/27/2023 2:26:32 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + precacheitem("aamissile_projectile_mp"); + precachemodel("vehicle_av8b_harrier_jet_mp"); + precachestring(&"MP_NO_AIR_TARGETS"); + level.teamairdenied["axis"] = 0; + level.teamairdenied["allies"] = 0; + level.rockets = []; + level.killstreakfuncs["aastrike"] = ::tryuseaastrike; +} + +//Function Number: 2 +tryuseaastrike(param_00) +{ + if(isdefined(level.civilianjetflyby)) + { + self iprintlnbold(&"MP_CIVILIAN_AIR_TRAFFIC"); + return 0; + } + + if(maps\mp\_utility::isusingremote()) + { + return 0; + } + + if(maps\mp\_utility::func_2BE7()) + { + return 0; + } + + if(maps\mp\_utility::func_27E5()) + { + return 0; + } + + maps\mp\_matchdata::logkillstreakevent("aastrike",self.origin); + thread finishaastrike(param_00); + thread maps\mp\_utility::teamplayercardsplash("used_aastrike",self,self.team); + return 1; +} + +//Function Number: 3 +cycletargets() +{ + self endon("stopFindingTargets"); + self endon("disconnect"); + self endon("joined_team"); + self endon("joined_spectators"); + self endon("game_ended"); + for(;;) + { + wait 0.05; + func_35C0(); + wait randomintrange(4,5); + } +} + +//Function Number: 4 +func_35C0() +{ + self endon("disconnect"); + self endon("joined_team"); + self endon("joined_spectators"); + self endon("game_ended"); + var_00 = []; + var_01 = []; + var_02 = []; + if(isdefined(level.littlebirds) && level.littlebirds.size) + { + foreach(var_04 in level.littlebirds) + { + if(isdefined(var_04.team) && var_04.team != self.team) + { + var_00[var_00.size] = var_04; + } + } + } + + if(isdefined(level.helis) && level.helis.size) + { + foreach(var_07 in level.helis) + { + if(var_07.team != self.team) + { + var_01[var_01.size] = var_07; + } + } + } + + var_09 = maps\mp\_utility::getotherteam(self.team); + if(isdefined(level.activeuavs[var_09])) + { + foreach(var_0B in level.uavmodels[var_09]) + { + var_02[var_02.size] = var_0B; + } + } + + var_0D = 0; + foreach(var_04 in var_00) + { + wait 3; + if(var_0D % 2) + { + thread fireattarget(var_04,self.team,1); + } + else + { + thread fireattarget(var_04,self.team,0); + } + + var_0D++; + } + + foreach(var_07 in var_01) + { + wait 3; + thread fireattarget(var_07,self.team,1); + } + + foreach(var_0B in var_02) + { + wait 0.5; + thread fireattarget(var_0B,self.team,0); + } + + if(level.ac130inuse && isdefined(level.ac130.owner) && level.ac130.owner.team != self.team) + { + var_14 = level.ac130.planemodel; + wait 6; + thread fireattarget(var_14,self.team,1); + } +} + +//Function Number: 5 +func_35C1() +{ + self endon("stopFindingTargets"); + var_00 = self.team; + common_scripts\utility::waittill_any("disconnect","joined_team","joined_spectators","game_ended"); + level.teamairdenied[maps\mp\_utility::getotherteam(var_00)] = 0; + level.airdeniedplayer = undefined; +} + +//Function Number: 6 +finishaastrike(param_00) +{ + self endon("disconnect"); + self endon("joined_team"); + self endon("joined_spectators"); + self endon("game_ended"); + level.teamairdenied[maps\mp\_utility::getotherteam(self.team)] = 1; + level.airdeniedplayer = self; + thread func_35C1(); + thread cycletargets(); + for(var_01 = 0;var_01 < 4;var_01++) + { + wait 6; + if(var_01 == 1 || var_01 == 3) + { + thread doflyby(1); + continue; + } + + thread doflyby(0); + } + + wait 3; + self notify("stopFindingTargets"); + level.teamairdenied[maps\mp\_utility::getotherteam(self.team)] = 0; + level.airdeniedplayer = undefined; +} + +//Function Number: 7 +fireattarget(param_00,param_01,param_02) +{ + if(!isdefined(param_00)) + { + return; + } + + var_03 = (0,0,14000); + var_04 = (0,0,1500); + var_05 = 15000; + var_06 = 20000; + var_07 = param_00.origin; + var_03 = (0,0,1) * var_07 + (0,0,1000); + var_08 = param_00.angles * (0,1,0); + var_09 = anglestoforward(var_08); + var_0A = param_00.origin + var_04 + var_09 * var_05 * -1; + var_0B = param_00.origin + var_04 + var_09 * var_06; + var_0C = magicbullet("aamissile_projectile_mp",var_0A + (0,0,-75),param_00.origin,self); + var_0C missile_settargetent(param_00); + var_0C missile_setflightmodedirect(); + var_0D = magicbullet("aamissile_projectile_mp",var_0A + (randomint(500),randomint(500),-75),param_00.origin,self); + var_0D missile_settargetent(param_00); + var_0D missile_setflightmodedirect(); + if(param_02) + { + var_0E = spawnplane(self,"script_model",var_0A,"hud_minimap_harrier_green","hud_minimap_harrier_red"); + } + else + { + var_0E = spawnplane(self,"script_model",var_0B); + } + + if(self.team == "allies") + { + var_0E setmodel("vehicle_av8b_harrier_jet_mp"); + } + else + { + var_0E setmodel("vehicle_av8b_harrier_jet_opfor_mp"); + } + + var_0F = distance(var_0A,var_0B); + var_0E.angles = vectortoangles(var_0B - var_0A); + var_0E thread aasoundmanager(var_0F); + var_0E thread func_2ED7(); + var_0F = distance(var_0A,var_0B); + var_0E moveto(var_0B * 2,var_0F / 2000,0,0); + wait var_0F / 3000; + var_0E delete(); +} + +//Function Number: 8 +aasoundmanager(param_00) +{ + self playloopsound("veh_aastrike_flyover_loop"); + wait param_00 / 2 / 2000; + self stoploopsound(); + self playloopsound("veh_aastrike_flyover_outgoing_loop"); +} + +//Function Number: 9 +doflyby(param_00) +{ + self endon("disconnect"); + var_01 = randomint(level.spawnpoints.size - 1); + var_02 = level.spawnpoints[var_01].origin * (1,1,0); + var_03 = 20000; + var_04 = 20000; + var_05 = getent("airstrikeheight","targetname"); + var_06 = (0,0,var_05.origin[2] + randomintrange(-100,600)); + var_07 = anglestoforward((0,randomint(45),0)); + var_08 = var_02 + var_06 + var_07 * var_03 * -1; + var_09 = var_02 + var_06 + var_07 * var_04; + var_0A = var_08 + (randomintrange(400,500),randomintrange(400,500),randomintrange(200,300)); + var_0B = var_09 + (randomintrange(400,500),randomintrange(400,500),randomintrange(200,300)); + if(param_00) + { + var_0C = spawnplane(self,"script_model",var_08,"hud_minimap_harrier_green","hud_minimap_harrier_red"); + } + else + { + var_0C = spawnplane(self,"script_model",var_09); + } + + var_0D = spawnplane(self,"script_model",var_0A); + if(self.team == "allies") + { + var_0C setmodel("vehicle_av8b_harrier_jet_mp"); + var_0D setmodel("vehicle_av8b_harrier_jet_mp"); + } + else + { + var_0C setmodel("vehicle_av8b_harrier_jet_opfor_mp"); + var_0D setmodel("vehicle_av8b_harrier_jet_opfor_mp"); + } + + var_0C.angles = vectortoangles(var_09 - var_08); + var_0C playloopsound("veh_aastrike_flyover_loop"); + var_0C thread func_2ED7(); + var_0D.angles = vectortoangles(var_09 - var_0A); + var_0D thread func_2ED7(); + var_0E = distance(var_08,var_09); + var_0C moveto(var_09 * 2,var_0E / 1800,0,0); + wait randomfloatrange(0.25,0.5); + var_0D moveto(var_0B * 2,var_0E / 1800,0,0); + wait var_0E / 1600; + var_0C delete(); + var_0D delete(); +} + +//Function Number: 10 +drawline(param_00,param_01,param_02,param_03) +{ + var_04 = int(param_02 * 20); + for(var_05 = 0;var_05 < var_04;var_05++) + { + wait 0.05; + } +} + +//Function Number: 11 +func_2ED7() +{ + self endon("death"); + wait 0.5; + playfxontag(level.fx_airstrike_afterburner,self,"tag_engine_right"); + wait 0.5; + playfxontag(level.fx_airstrike_afterburner,self,"tag_engine_left"); + wait 0.5; + playfxontag(level.fx_airstrike_contrail,self,"tag_right_wingtip"); + wait 0.5; + playfxontag(level.fx_airstrike_contrail,self,"tag_left_wingtip"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/killstreaks/_ac130.gsc b/MW3/Xbox/MP/maps/mp/killstreaks/_ac130.gsc new file mode 100644 index 0000000..d39bcd2 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/killstreaks/_ac130.gsc @@ -0,0 +1,1909 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\killstreaks\_ac130.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 77 + * Decompile Time: 1096 ms + * Timestamp: 10/27/2023 2:26:35 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level.ac130_use_duration = 40; + level.ac130_num_flares = 2; + makedvarserverinfo("ui_ac130usetime",level.ac130_use_duration); + precacheshader("black"); + precachestring(&"AC130_HUD_FLIR"); + precachestring(&"AC130_HUD_OPTICS"); + precachemenu("ac130timer"); + precachemodel("vehicle_ac130_coop"); + precacheitem("ac130_25mm_mp"); + precacheitem("ac130_40mm_mp"); + precacheitem("ac130_105mm_mp"); + precacheminimapicon("compass_objpoint_ac130_friendly"); + precacheminimapicon("compass_objpoint_ac130_enemy"); + precacheshellshock("ac130"); + angelflareprecache(); + level._effect["cloud"] = loadfx("misc/ac130_cloud"); + level._effect["beacon"] = loadfx("misc/ir_beacon_coop"); + level._effect["ac130_explode"] = loadfx("explosions/aerial_explosion_ac130_coop"); + level._effect["ac130_flare"] = loadfx("misc/flares_cobra"); + level._effect["ac130_light_red"] = loadfx("misc/aircraft_light_wingtip_red"); + level._effect["ac130_light_white_blink"] = loadfx("misc/aircraft_light_white_blink"); + level._effect["ac130_light_red_blink"] = loadfx("misc/aircraft_light_red_blink"); + level._effect["ac130_engineeffect"] = loadfx("fire/jet_engine_ac130"); + level._effect["coop_muzzleflash_105mm"] = loadfx("muzzleflashes/ac130_105mm"); + level._effect["coop_muzzleflash_40mm"] = loadfx("muzzleflashes/ac130_40mm"); + level.radioforcedtransmissionqueue = []; + level.enemieskilledintimewindow = 0; + level.lastradiotransmission = gettime(); + level.color["white"] = (1,1,1); + level.color["red"] = (1,0,0); + level.color["blue"] = (0.1,0.3,1); + level.cosine = []; + level.cosine["45"] = cos(45); + level.cosine["5"] = cos(5); + level.huditem = []; + level.physicssphereradius["ac130_25mm_mp"] = 60; + level.physicssphereradius["ac130_40mm_mp"] = 600; + level.physicssphereradius["ac130_105mm_mp"] = 1000; + level.physicssphereforce["ac130_25mm_mp"] = 0; + level.physicssphereforce["ac130_40mm_mp"] = 3; + level.physicssphereforce["ac130_105mm_mp"] = 6; + level.weaponreloadtime["ac130_25mm_mp"] = 1.5; + level.weaponreloadtime["ac130_40mm_mp"] = 3; + level.weaponreloadtime["ac130_105mm_mp"] = 5; + level.ac130_speed["move"] = 250; + level.ac130_speed["rotate"] = 70; + common_scripts\utility::flag_init("allow_context_sensative_dialog"); + common_scripts\utility::flag_set("allow_context_sensative_dialog"); + var_00 = getentarray("minimap_corner","targetname"); + var_01 = (0,0,0); + if(var_00.size) + { + var_01 = maps\mp\gametypes\_spawnlogic::func_2FCD(var_00[0].origin,var_00[1].origin); + } + + level.ac130 = spawn("script_model",var_01); + level.ac130 setmodel("c130_zoomrig"); + level.ac130.angles = (0,115,0); + level.ac130.owner = undefined; + level.ac130.thermal_vision = "ac130_thermal_mp"; + level.ac130.enhanced_vision = "ac130_enhanced_mp"; + level.ac130.targetname = "ac130rig_script_model"; + level.ac130 hide(); + level.ac130inuse = 0; + init_sounds(); + thread func_3043("on"); + thread func_303F(); + thread onplayerconnect(); + thread handleincomingstinger(); + thread func_2C53(); + level.killstreakfuncs["ac130"] = ::tryuseac130; + level.ac130queue = []; +} + +//Function Number: 2 +tryuseac130(param_00) +{ + if(isdefined(level.civilianjetflyby)) + { + self iprintlnbold(&"MP_CIVILIAN_AIR_TRAFFIC"); + return 0; + } + + if(isdefined(level.ac130player) || level.ac130inuse) + { + self iprintlnbold(&"MP_AIR_SPACE_TOO_CROWDED"); + return 0; + } + + if(maps\mp\_utility::isusingremote()) + { + return 0; + } + + if(maps\mp\_utility::func_2BE7()) + { + return 0; + } + + if(maps\mp\_utility::func_27E5()) + { + return 0; + } + + maps\mp\_utility::setusingremote("ac130"); + var_01 = maps\mp\killstreaks\_killstreaks::initridekillstreak(); + if(var_01 != "success") + { + if(var_01 != "disconnect") + { + maps\mp\_utility::clearusingremote(); + } + + return 0; + } + + var_01 = setac130player(self); + if(isdefined(var_01) && var_01) + { + maps\mp\_matchdata::logkillstreakevent("ac130",self.origin); + level.ac130.planemodel.crashed = undefined; + level.ac130inuse = 1; + } + else + { + maps\mp\_utility::clearusingremote(); + } + + return isdefined(var_01) && var_01; +} + +//Function Number: 3 +init_sounds() +{ + setac130ambience("ambient_ac130_int1"); + level.scr_sound["foo"]["bar"] = ""; + func_3028("ai","in_sight",0,"ac130_fco_moreenemy"); + func_3028("ai","in_sight",1,"ac130_fco_getthatguy"); + func_3028("ai","in_sight",2,"ac130_fco_guymovin"); + func_3028("ai","in_sight",3,"ac130_fco_getperson"); + func_3028("ai","in_sight",4,"ac130_fco_guyrunnin"); + func_3028("ai","in_sight",5,"ac130_fco_gotarunner"); + func_3028("ai","in_sight",6,"ac130_fco_backonthose"); + func_3028("ai","in_sight",7,"ac130_fco_gonnagethim"); + func_3028("ai","in_sight",8,"ac130_fco_personnelthere"); + func_3028("ai","in_sight",9,"ac130_fco_nailthoseguys"); + func_3028("ai","in_sight",11,"ac130_fco_lightemup"); + func_3028("ai","in_sight",12,"ac130_fco_takehimout"); + func_3028("ai","in_sight",14,"ac130_plt_yeahcleared"); + func_3028("ai","in_sight",15,"ac130_plt_copysmoke"); + func_3028("ai","in_sight",16,"ac130_fco_rightthere"); + func_3028("ai","in_sight",17,"ac130_fco_tracking"); + func_3028("ai","wounded_crawl",0,"ac130_fco_movingagain"); + add_context_sensative_timeout("ai","wounded_crawl",undefined,6); + func_3028("ai","wounded_pain",0,"ac130_fco_doveonground"); + func_3028("ai","wounded_pain",1,"ac130_fco_knockedwind"); + func_3028("ai","wounded_pain",2,"ac130_fco_downstillmoving"); + func_3028("ai","wounded_pain",3,"ac130_fco_gettinbackup"); + func_3028("ai","wounded_pain",4,"ac130_fco_yepstillmoving"); + func_3028("ai","wounded_pain",5,"ac130_fco_stillmoving"); + add_context_sensative_timeout("ai","wounded_pain",undefined,12); + func_3028("weapons","105mm_ready",0,"ac130_gnr_gunready1"); + func_3028("weapons","105mm_fired",0,"ac130_gnr_shot1"); + func_3028("plane","rolling_in",0,"ac130_plt_rollinin"); + func_3028("explosion","secondary",0,"ac130_nav_secondaries1"); + func_3028("explosion","secondary",1,"ac130_tvo_directsecondary1"); + func_3028("explosion","secondary",1,"ac130_tvo_directsecondary2"); + add_context_sensative_timeout("explosion","secondary",undefined,7); + func_3028("kill","single",0,"ac130_plt_gottahurt"); + func_3028("kill","single",1,"ac130_fco_iseepieces"); + func_3028("kill","single",2,"ac130_fco_oopsiedaisy"); + func_3028("kill","single",3,"ac130_fco_goodkill"); + func_3028("kill","single",4,"ac130_fco_yougothim"); + func_3028("kill","single",5,"ac130_fco_yougothim2"); + func_3028("kill","single",6,"ac130_fco_thatsahit"); + func_3028("kill","single",7,"ac130_fco_directhit"); + func_3028("kill","single",8,"ac130_fco_rightontarget"); + func_3028("kill","single",9,"ac130_fco_okyougothim"); + func_3028("kill","single",10,"ac130_fco_within2feet"); + func_3028("kill","small_group",0,"ac130_fco_nice"); + func_3028("kill","small_group",1,"ac130_fco_directhits"); + func_3028("kill","small_group",2,"ac130_fco_iseepieces"); + func_3028("kill","small_group",3,"ac130_fco_goodkill"); + func_3028("kill","small_group",4,"ac130_fco_yougothim"); + func_3028("kill","small_group",5,"ac130_fco_yougothim2"); + func_3028("kill","small_group",6,"ac130_fco_thatsahit"); + func_3028("kill","small_group",7,"ac130_fco_directhit"); + func_3028("kill","small_group",8,"ac130_fco_rightontarget"); + func_3028("kill","small_group",9,"ac130_fco_okyougothim"); + func_3028("misc","action",0,"ac130_plt_scanrange"); + add_context_sensative_timeout("misc","action",0,70); + func_3028("misc","action",1,"ac130_plt_cleanup"); + add_context_sensative_timeout("misc","action",1,80); + func_3028("misc","action",2,"ac130_plt_targetreset"); + add_context_sensative_timeout("misc","action",2,55); + func_3028("misc","action",3,"ac130_plt_azimuthsweep"); + add_context_sensative_timeout("misc","action",3,100); +} + +//Function Number: 4 +func_3028(param_00,param_01,param_02,param_03) +{ + var_04 = maps\mp\gametypes\_teams::getteamvoiceprefix("allies") + param_03; + var_04 = maps\mp\gametypes\_teams::getteamvoiceprefix("axis") + param_03; + if(!isdefined(level.scr_sound[param_00]) || !isdefined(level.scr_sound[param_00][param_01]) || !isdefined(level.scr_sound[param_00][param_01][param_02])) + { + level.scr_sound[param_00][param_01][param_02] = spawnstruct(); + level.scr_sound[param_00][param_01][param_02].played = 0; + level.scr_sound[param_00][param_01][param_02].sounds = []; + } + + var_05 = level.scr_sound[param_00][param_01][param_02].sounds.size; + level.scr_sound[param_00][param_01][param_02].sounds[var_05] = param_03; +} + +//Function Number: 5 +add_context_sensative_timeout(param_00,param_01,param_02,param_03) +{ + if(!isdefined(level.context_sensative_dialog_timeouts)) + { + level.context_sensative_dialog_timeouts = []; + } + + var_04 = 0; + if(!isdefined(level.context_sensative_dialog_timeouts[param_00])) + { + var_04 = 1; + } + else if(!isdefined(level.context_sensative_dialog_timeouts[param_00][param_01])) + { + var_04 = 1; + } + + if(var_04) + { + level.context_sensative_dialog_timeouts[param_00][param_01] = spawnstruct(); + } + + if(isdefined(param_02)) + { + level.context_sensative_dialog_timeouts[param_00][param_01].groups = []; + level.context_sensative_dialog_timeouts[param_00][param_01].groups[string(param_02)] = spawnstruct(); + level.context_sensative_dialog_timeouts[param_00][param_01].groups[string(param_02)].v["timeoutDuration"] = param_03 * 1000; + level.context_sensative_dialog_timeouts[param_00][param_01].groups[string(param_02)].v["lastPlayed"] = param_03 * -1000; + return; + } + + level.context_sensative_dialog_timeouts[param_00][param_01].v["timeoutDuration"] = param_03 * 1000; + level.context_sensative_dialog_timeouts[param_00][param_01].v["lastPlayed"] = param_03 * -1000; +} + +//Function Number: 6 +play_sound_on_entity(param_00) +{ + maps\mp\_utility::play_sound_on_tag(param_00); +} + +//Function Number: 7 +within_fov(param_00,param_01,param_02,param_03) +{ + var_04 = vectornormalize(param_02 - param_00); + var_05 = anglestoforward(param_01); + var_06 = vectordot(var_05,var_04); + return var_06 >= param_03; +} + +//Function Number: 8 +array_remove_nokeys(param_00,param_01) +{ + var_02 = []; + for(var_03 = 0;var_03 < param_00.size;var_03++) + { + if(param_00[var_03] != param_01) + { + var_02[var_02.size] = param_00[var_03]; + } + } + + return var_02; +} + +//Function Number: 9 +array_remove_index(param_00,param_01) +{ + var_02 = []; + var_03 = getarraykeys(param_00); + for(var_04 = var_03.size - 1;var_04 >= 0;var_04--) + { + if(var_03[var_04] != param_01) + { + var_02[var_02.size] = param_00[var_03[var_04]]; + } + } + + return var_02; +} + +//Function Number: 10 +string(param_00) +{ + return "" + param_00; +} + +//Function Number: 11 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_00 thread onplayerspawned(); + } +} + +//Function Number: 12 +onplayerspawned() +{ + self endon("disconnect"); + self waittill("spawned_player"); +} + +//Function Number: 13 +deleteonac130playerremoved() +{ + level waittill("ac130player_removed"); + self delete(); +} + +//Function Number: 14 +setac130player(param_00) +{ + self endon("ac130player_removed"); + if(isdefined(level.ac130player)) + { + return 0; + } + + level.ac130player = param_00; + level.ac130.owner = param_00; + level.ac130.planemodel show(); + level.ac130.planemodel thread func_3031(); + level.ac130.incomingmissile = 0; + level.ac130.planemodel playloopsound("veh_ac130_ext_dist"); + level.ac130.planemodel thread damagetracker(); + var_01 = spawnplane(param_00,"script_model",level.ac130.planemodel.origin,"compass_objpoint_ac130_friendly","compass_objpoint_ac130_enemy"); + var_01 notsolid(); + var_01 linkto(level.ac130,"tag_player",(0,80,32),(0,-90,0)); + var_01 thread deleteonac130playerremoved(); + param_00 startac130(); + param_00 openmenu("ac130timer"); + level.ac130.numflares = level.ac130_num_flares; + thread maps\mp\_utility::teamplayercardsplash("used_ac130",param_00); + param_00 thread waitsetthermal(1); + param_00 thread maps\mp\_utility::reinitializethermal(level.ac130.planemodel); + if(getdvarint("camera_thirdPerson")) + { + param_00 maps\mp\_utility::setthirdpersondof(0); + } + + param_00 maps\mp\_utility::_giveweapon("ac130_105mm_mp"); + param_00 maps\mp\_utility::_giveweapon("ac130_40mm_mp"); + param_00 maps\mp\_utility::_giveweapon("ac130_25mm_mp"); + param_00 switchtoweapon("ac130_105mm_mp"); + param_00 setplayerdata("ac130Ammo105mm",param_00 getweaponammoclip("ac130_105mm_mp")); + param_00 setplayerdata("ac130Ammo40mm",param_00 getweaponammoclip("ac130_40mm_mp")); + param_00 setplayerdata("ac130Ammo25mm",param_00 getweaponammoclip("ac130_25mm_mp")); + param_00 thread overlay(param_00); + param_00 thread func_3044(param_00); + param_00 thread changeweapons(); + param_00 thread func_3046(); + param_00 thread func_3050(); + param_00 thread shotfired(); + param_00 thread func_3048(); + param_00 thread removeac130playeraftertime(level.ac130_use_duration * param_00.killstreakscaler); + param_00 thread removeac130playerondisconnect(); + param_00 thread func_3039(); + param_00 thread removeac130playeronspectate(); + param_00 thread removeac130playeroncrash(); + param_00 thread removeac130playerongamecleanup(); + thread ac130_altscene(); + return 1; +} + +//Function Number: 15 +waitsetthermal(param_00) +{ + self endon("disconnect"); + level endon("ac130player_removed"); + wait param_00; + self visionsetthermalforplayer(game["thermal_vision"],0); + self thermalvisionfofoverlayon(); + thread thermalvision(); +} + +//Function Number: 16 +func_3031() +{ + wait 0.05; + playfxontag(level._effect["ac130_light_red_blink"],self,"tag_light_belly"); + playfxontag(level._effect["ac130_engineeffect"],self,"tag_body"); + wait 0.5; + playfxontag(level._effect["ac130_light_white_blink"],self,"tag_light_tail"); + playfxontag(level._effect["ac130_light_red"],self,"tag_light_top"); +} + +//Function Number: 17 +ac130_altscene() +{ + foreach(var_01 in level.players) + { + if(var_01 != level.ac130player && var_01.team == level.ac130player.team) + { + var_01 thread maps\mp\_utility::setaltsceneobj(level.ac130.cameramodel,"tag_origin",20); + } + } +} + +//Function Number: 18 +removeac130playerongameend() +{ + self endon("ac130player_removed"); + level waittill("game_ended"); + level thread func_303C(self,0); +} + +//Function Number: 19 +removeac130playerongamecleanup() +{ + self endon("ac130player_removed"); + level waittill("game_cleanup"); + level thread func_303C(self,0); +} + +//Function Number: 20 +func_3036() +{ + self endon("ac130player_removed"); + self waittill("death"); + level thread func_303C(self,0); +} + +//Function Number: 21 +removeac130playeroncrash() +{ + self endon("ac130player_removed"); + level.ac130.planemodel waittill("crashing"); + level thread func_303C(self,0); +} + +//Function Number: 22 +removeac130playerondisconnect() +{ + self endon("ac130player_removed"); + self waittill("disconnect"); + level thread func_303C(self,1); +} + +//Function Number: 23 +func_3039() +{ + self endon("ac130player_removed"); + self waittill("joined_team"); + level thread func_303C(self,0); +} + +//Function Number: 24 +removeac130playeronspectate() +{ + self endon("ac130player_removed"); + common_scripts\utility::waittill_any("joined_spectators","spawned"); + level thread func_303C(self,0); +} + +//Function Number: 25 +removeac130playeraftertime(param_00) +{ + self endon("ac130player_removed"); + var_01 = param_00; + setdvar("ui_ac130usetime",var_01); + maps\mp\gametypes\_hostmigration::func_2740(var_01); + level thread func_303C(self,0); +} + +//Function Number: 26 +func_303C(param_00,param_01) +{ + param_00 notify("ac130player_removed"); + level notify("ac130player_removed"); + level.ac130.cameramodel notify("death"); + waittillframeend; + if(!param_01) + { + param_00 maps\mp\_utility::clearusingremote(); + param_00 stoplocalsound("missile_incoming"); + param_00 show(); + param_00 unlink(); + param_00 thermalvisionoff(); + param_00 thermalvisionfofoverlayoff(); + param_00 visionsetthermalforplayer(level.ac130.thermal_vision,0); + param_00.lastvisionsetthermal = level.ac130.thermal_vision; + param_00 setblurforplayer(0,0); + param_00 stopac130(); + if(getdvarint("camera_thirdPerson")) + { + param_00 maps\mp\_utility::setthirdpersondof(1); + } + + var_02 = maps\mp\killstreaks\_killstreaks::func_2C01("ac130"); + param_00 takeweapon(var_02); + param_00 takeweapon("ac130_105mm_mp"); + param_00 takeweapon("ac130_40mm_mp"); + param_00 takeweapon("ac130_25mm_mp"); + if(isdefined(param_00.darkscreenoverlay)) + { + param_00.darkscreenoverlay destroy(); + } + + var_03 = getarraykeys(level.huditem); + foreach(var_05 in var_03) + { + level.huditem[var_05] destroy(); + level.huditem[var_05] = undefined; + } + } + + wait 0.5; + level.ac130.planemodel playsound("veh_ac130_ext_dist_fade"); + wait 0.5; + level.ac130player = undefined; + level.ac130.planemodel hide(); + level.ac130.planemodel stoploopsound(); + if(isdefined(level.ac130.planemodel.crashed)) + { + level.ac130inuse = 0; + return; + } + + var_07 = spawn("script_model",level.ac130.planemodel gettagorigin("tag_origin")); + var_07.angles = level.ac130.planemodel.angles; + var_07 setmodel("vehicle_ac130_coop"); + var_08 = var_07.origin + anglestoright(var_07.angles) * 20000; + var_07 thread func_3031(); + var_07 moveto(var_08,40,0,0); + var_07 thread deployflares(1); + wait 5; + var_07 thread deployflares(1); + wait 5; + var_07 thread deployflares(1); + level.ac130inuse = 0; + wait 30; + var_07 delete(); +} + +//Function Number: 27 +damagetracker() +{ + self endon("death"); + self endon("crashing"); + level endon("game_ended"); + level endon("ac130player_removed"); + self.health = 999999; + self.maxhealth = 1000; + self.damagetaken = 0; + for(;;) + { + self waittill("damage",var_00,var_01,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09); + if(isdefined(level.ac130player) && level.teambased && isplayer(var_01) && var_01.team == level.ac130player.team && !isdefined(level.nukedetonated)) + { + continue; + } + + if(var_04 == "MOD_RIFLE_BULLET" || var_04 == "MOD_PISTOL_BULLET" || var_04 == "MOD_EXPLOSIVE_BULLET") + { + continue; + } + + self.wasdamaged = 1; + var_0A = var_00; + if(isplayer(var_01)) + { + var_01 maps\mp\gametypes\_damagefeedback::updatedamagefeedback("ac130"); + } + + maps\mp\killstreaks\_killstreaks::killstreakhit(var_01,var_09,level.ac130); + if(isdefined(var_01.owner) && isplayer(var_01.owner)) + { + var_01.owner maps\mp\gametypes\_damagefeedback::updatedamagefeedback("ac130"); + } + + self.damagetaken = self.damagetaken + var_0A; + if(self.damagetaken >= self.maxhealth) + { + if(isplayer(var_01)) + { + thread maps\mp\gametypes\_missions::vehiclekilled(level.ac130player,self,undefined,var_01,var_00,var_04,var_09); + thread maps\mp\_utility::teamplayercardsplash("callout_destroyed_ac130",var_01); + var_01 thread maps\mp\gametypes\_rank::func_2AB3("kill",400,var_09,var_04); + var_01 notify("destroyed_killstreak"); + } + + level thread func_3067(10); + } + } +} + +//Function Number: 28 +func_303F() +{ + wait 0.05; + var_00 = spawn("script_model",level.ac130 gettagorigin("tag_player")); + var_00 setmodel("vehicle_ac130_coop"); + var_00.targetname = "vehicle_ac130_coop"; + var_00 setcandamage(1); + var_00.maxhealth = 1000; + var_00.health = var_00.maxhealth; + var_00 linkto(level.ac130,"tag_player",(0,80,32),(-25,0,0)); + level.ac130.planemodel = var_00; + level.ac130.planemodel hide(); + var_01 = spawn("script_model",level.ac130 gettagorigin("tag_player")); + var_01 setmodel("tag_origin"); + var_01 hide(); + var_01.targetname = "ac130CameraModel"; + var_01 linkto(level.ac130,"tag_player",(0,0,32),(-25,0,0)); + level.ac130.cameramodel = var_01; + level.ac130player = level.players[0]; +} + +//Function Number: 29 +overlay(param_00) +{ + level.huditem = []; + level.huditem["thermal_vision"] = newclienthudelem(param_00); + level.huditem["thermal_vision"].x = 200; + level.huditem["thermal_vision"].y = 0; + level.huditem["thermal_vision"].alignx = "left"; + level.huditem["thermal_vision"].aligny = "top"; + level.huditem["thermal_vision"].horzalign = "left"; + level.huditem["thermal_vision"].vertalign = "top"; + level.huditem["thermal_vision"].fontscale = 2.5; + level.huditem["thermal_vision"] settext(&"AC130_HUD_FLIR"); + level.huditem["thermal_vision"].alpha = 1; + level.huditem["enhanced_vision"] = newclienthudelem(param_00); + level.huditem["enhanced_vision"].x = -200; + level.huditem["enhanced_vision"].y = 0; + level.huditem["enhanced_vision"].alignx = "right"; + level.huditem["enhanced_vision"].aligny = "top"; + level.huditem["enhanced_vision"].horzalign = "right"; + level.huditem["enhanced_vision"].vertalign = "top"; + level.huditem["enhanced_vision"].fontscale = 2.5; + level.huditem["enhanced_vision"] settext(&"AC130_HUD_OPTICS"); + level.huditem["enhanced_vision"].alpha = 1; + param_00 thread overlay_coords(); + param_00 setblurforplayer(1.2,0); +} + +//Function Number: 30 +overlay_coords() +{ + self endon("ac130player_removed"); + level.huditem["coord1_posx"] = newclienthudelem(self); + level.huditem["coord1_posx"].x = 60; + level.huditem["coord1_posx"].y = 100; + level.huditem["coord1_posx"].alignx = "right"; + level.huditem["coord1_posx"].aligny = "middle"; + level.huditem["coord1_posx"].horzalign = "center"; + level.huditem["coord1_posx"].vertalign = "middle"; + level.huditem["coord1_posx"].fontscale = 1; + level.huditem["coord1_posx"].alpha = 1; + level.huditem["coord1_posy"] = newclienthudelem(self); + level.huditem["coord1_posy"].x = 100; + level.huditem["coord1_posy"].y = 100; + level.huditem["coord1_posy"].alignx = "right"; + level.huditem["coord1_posy"].aligny = "middle"; + level.huditem["coord1_posy"].horzalign = "center"; + level.huditem["coord1_posy"].vertalign = "middle"; + level.huditem["coord1_posy"].fontscale = 1; + level.huditem["coord1_posy"].alpha = 1; + level.huditem["coord1_posz"] = newclienthudelem(self); + level.huditem["coord1_posz"].x = 140; + level.huditem["coord1_posz"].y = 100; + level.huditem["coord1_posz"].alignx = "right"; + level.huditem["coord1_posz"].aligny = "middle"; + level.huditem["coord1_posz"].horzalign = "center"; + level.huditem["coord1_posz"].vertalign = "middle"; + level.huditem["coord1_posz"].fontscale = 1; + level.huditem["coord1_posz"].alpha = 1; + level.huditem["coord2_posx"] = newclienthudelem(self); + level.huditem["coord2_posx"].x = 60; + level.huditem["coord2_posx"].y = 110; + level.huditem["coord2_posx"].alignx = "right"; + level.huditem["coord2_posx"].aligny = "middle"; + level.huditem["coord2_posx"].horzalign = "center"; + level.huditem["coord2_posx"].vertalign = "middle"; + level.huditem["coord2_posx"].fontscale = 1; + level.huditem["coord2_posx"].alpha = 1; + level.huditem["coord2_posy"] = newclienthudelem(self); + level.huditem["coord2_posy"].x = 100; + level.huditem["coord2_posy"].y = 110; + level.huditem["coord2_posy"].alignx = "right"; + level.huditem["coord2_posy"].aligny = "middle"; + level.huditem["coord2_posy"].horzalign = "center"; + level.huditem["coord2_posy"].vertalign = "middle"; + level.huditem["coord2_posy"].fontscale = 1; + level.huditem["coord2_posy"].alpha = 1; + level.huditem["coord2_posz"] = newclienthudelem(self); + level.huditem["coord2_posz"].x = 140; + level.huditem["coord2_posz"].y = 110; + level.huditem["coord2_posz"].alignx = "right"; + level.huditem["coord2_posz"].aligny = "middle"; + level.huditem["coord2_posz"].horzalign = "center"; + level.huditem["coord2_posz"].vertalign = "middle"; + level.huditem["coord2_posz"].fontscale = 1; + level.huditem["coord2_posz"].alpha = 1; + level.huditem["coord3_posx"] = newclienthudelem(self); + level.huditem["coord3_posx"].x = -120; + level.huditem["coord3_posx"].y = 100; + level.huditem["coord3_posx"].alignx = "right"; + level.huditem["coord3_posx"].aligny = "middle"; + level.huditem["coord3_posx"].horzalign = "center"; + level.huditem["coord3_posx"].vertalign = "middle"; + level.huditem["coord3_posx"].fontscale = 1; + level.huditem["coord3_posx"].alpha = 1; + level.huditem["coord3_posy"] = newclienthudelem(self); + level.huditem["coord3_posy"].x = -80; + level.huditem["coord3_posy"].y = 100; + level.huditem["coord3_posy"].alignx = "right"; + level.huditem["coord3_posy"].aligny = "middle"; + level.huditem["coord3_posy"].horzalign = "center"; + level.huditem["coord3_posy"].vertalign = "middle"; + level.huditem["coord3_posy"].fontscale = 1; + level.huditem["coord3_posy"].alpha = 1; + level.huditem["coord3_posz"] = newclienthudelem(self); + level.huditem["coord3_posz"].x = -40; + level.huditem["coord3_posz"].y = 100; + level.huditem["coord3_posz"].alignx = "right"; + level.huditem["coord3_posz"].aligny = "middle"; + level.huditem["coord3_posz"].horzalign = "center"; + level.huditem["coord3_posz"].vertalign = "middle"; + level.huditem["coord3_posz"].fontscale = 1; + level.huditem["coord3_posz"].alpha = 1; + wait 0.05; + thread func_3041(); + for(;;) + { + level.huditem["coord1_posx"] setvalue(abs(level.ac130.planemodel.origin[0])); + level.huditem["coord1_posy"] setvalue(abs(level.ac130.planemodel.origin[1])); + level.huditem["coord1_posz"] setvalue(abs(level.ac130.planemodel.origin[2])); + level.huditem["coord2_posx"] setvalue(abs(self.origin[0])); + level.huditem["coord2_posy"] setvalue(abs(self.origin[1])); + level.huditem["coord2_posz"] setvalue(abs(self.origin[2])); + wait 0.5; + } +} + +//Function Number: 31 +func_3041() +{ + self endon("ac130player_removed"); + for(;;) + { + var_00 = self geteye(); + var_01 = self getplayerangles(); + var_02 = anglestoforward(var_01); + var_03 = var_00 + var_02 * 15000; + var_04 = physicstrace(var_00,var_03); + level.huditem["coord3_posx"] setvalue(abs(var_04[0])); + level.huditem["coord3_posy"] setvalue(abs(var_04[1])); + level.huditem["coord3_posz"] setvalue(abs(var_04[2])); + wait 0.05; + } +} + +//Function Number: 32 +func_3042() +{ + self endon("ac130player_removed"); + level endon("post_effects_disabled"); + var_00 = 5; + for(;;) + { + self shellshock("ac130",var_00); + wait var_00; + } +} + +//Function Number: 33 +func_3043(param_00) +{ + level notify("stop_rotatePlane_thread"); + level endon("stop_rotatePlane_thread"); + if(param_00 == "on") + { + var_01 = 10; + var_02 = level.ac130_speed["rotate"] / 360 * var_01; + level.ac130 rotateyaw(level.ac130.angles[2] + var_01,var_02,var_02,0); + for(;;) + { + level.ac130 rotateyaw(360,level.ac130_speed["rotate"]); + wait level.ac130_speed["rotate"]; + } + + return; + } + + if(param_00 == "off") + { + var_03 = 10; + var_02 = level.ac130_speed["rotate"] / 360 * var_03; + level.ac130 rotateyaw(level.ac130.angles[2] + var_03,var_02,0,var_02); + } +} + +//Function Number: 34 +func_3044(param_00) +{ + self playerlinkweaponviewtodelta(level.ac130,"tag_player",1,35,35,35,35); + self setplayerangles(level.ac130 gettagangles("tag_player")); +} + +//Function Number: 35 +changeweapons() +{ + self endon("ac130player_removed"); + wait 0.05; + self enableweapons(); + for(;;) + { + self waittill("weapon_change",var_00); + thread play_sound_on_entity("ac130_weapon_switch"); + } +} + +//Function Number: 36 +func_3046() +{ + self endon("ac130player_removed"); + for(;;) + { + self waittill("weapon_fired"); + var_00 = self getcurrentweapon(); + switch(var_00) + { + case "ac130_105mm_mp": + thread gun_fired_and_ready_105mm(); + earthquake(0.2,1,level.ac130.planemodel.origin,1000); + self setplayerdata("ac130Ammo105mm",self getweaponammoclip(var_00)); + break; + + case "ac130_40mm_mp": + earthquake(0.1,0.5,level.ac130.planemodel.origin,1000); + self setplayerdata("ac130Ammo40mm",self getweaponammoclip(var_00)); + break; + + case "ac130_25mm_mp": + self setplayerdata("ac130Ammo25mm",self getweaponammoclip(var_00)); + break; + } + + if(self getweaponammoclip(var_00)) + { + continue; + } + + thread func_3047(var_00); + } +} + +//Function Number: 37 +func_3047(param_00) +{ + self endon("ac130player_removed"); + wait level.weaponreloadtime[param_00]; + self setweaponammoclip(param_00,9999); + switch(param_00) + { + case "ac130_105mm_mp": + self setplayerdata("ac130Ammo105mm",self getweaponammoclip(param_00)); + break; + + case "ac130_40mm_mp": + self setplayerdata("ac130Ammo40mm",self getweaponammoclip(param_00)); + break; + + case "ac130_25mm_mp": + self setplayerdata("ac130Ammo25mm",self getweaponammoclip(param_00)); + break; + } + + if(self getcurrentweapon() == param_00) + { + self takeweapon(param_00); + maps\mp\_utility::_giveweapon(param_00); + self switchtoweapon(param_00); + } +} + +//Function Number: 38 +thermalvision() +{ + self endon("ac130player_removed"); + if(maps\mp\_utility::getintproperty("ac130_thermal_enabled",1) == 0) + { + return; + } + + var_00 = 0; + self thermalvisionoff(); + self visionsetthermalforplayer(level.ac130.enhanced_vision,1); + self.lastvisionsetthermal = level.ac130.enhanced_vision; + level.huditem["thermal_vision"].alpha = 0.25; + level.huditem["enhanced_vision"].alpha = 1; + self notifyonplayercommand("switch thermal","+usereload"); + self notifyonplayercommand("switch thermal","+activate"); + for(;;) + { + self waittill("switch thermal"); + if(!var_00) + { + self thermalvisionon(); + self visionsetthermalforplayer(level.ac130.thermal_vision,0.62); + self.lastvisionsetthermal = level.ac130.thermal_vision; + level.huditem["thermal_vision"].alpha = 1; + level.huditem["enhanced_vision"].alpha = 0.25; + } + else + { + self thermalvisionoff(); + self visionsetthermalforplayer(level.ac130.enhanced_vision,0.51); + self.lastvisionsetthermal = level.ac130.enhanced_vision; + level.huditem["thermal_vision"].alpha = 0.25; + level.huditem["enhanced_vision"].alpha = 1; + } + + var_00 = !var_00; + } +} + +//Function Number: 39 +func_3048() +{ + self endon("ac130player_removed"); + wait 6; + clouds_create(); + for(;;) + { + wait randomfloatrange(40,80); + clouds_create(); + } +} + +//Function Number: 40 +clouds_create() +{ + if(isdefined(level.playerweapon) && issubstr(tolower(level.playerweapon),"25")) + { + return; + } + + playfxontagforclients(level._effect["cloud"],level.ac130,"tag_player",level.ac130player); +} + +//Function Number: 41 +gun_fired_and_ready_105mm() +{ + self endon("ac130player_removed"); + level notify("gun_fired_and_ready_105mm"); + level endon("gun_fired_and_ready_105mm"); + wait 0.5; + if(randomint(2) == 0) + { + thread context_sensative_dialog_play_random_group_sound("weapons","105mm_fired"); + } + + wait 5; + thread context_sensative_dialog_play_random_group_sound("weapons","105mm_ready"); +} + +//Function Number: 42 +shotfired() +{ + self endon("ac130player_removed"); + for(;;) + { + self waittill("projectile_impact",var_00,var_01,var_02); + if(issubstr(tolower(var_00),"105")) + { + earthquake(0.4,1,var_01,3500); + thread shotfireddarkscreenoverlay(); + } + else if(issubstr(tolower(var_00),"40")) + { + earthquake(0.2,0.5,var_01,2000); + } + + if(maps\mp\_utility::getintproperty("ac130_ragdoll_deaths",0)) + { + thread func_304D(var_01,var_00); + } + + wait 0.05; + } +} + +//Function Number: 43 +func_304D(param_00,param_01) +{ + wait 0.1; + physicsexplosionsphere(param_00,level.physicssphereradius[param_01],level.physicssphereradius[param_01] / 2,level.physicssphereforce[param_01]); +} + +//Function Number: 44 +shotfireddarkscreenoverlay() +{ + self endon("ac130player_removed"); + self notify("darkScreenOverlay"); + self endon("darkScreenOverlay"); + if(!isdefined(self.darkscreenoverlay)) + { + self.darkscreenoverlay = newclienthudelem(self); + self.darkscreenoverlay.x = 0; + self.darkscreenoverlay.y = 0; + self.darkscreenoverlay.alignx = "left"; + self.darkscreenoverlay.aligny = "top"; + self.darkscreenoverlay.horzalign = "fullscreen"; + self.darkscreenoverlay.vertalign = "fullscreen"; + self.darkscreenoverlay setshader("black",640,480); + self.darkscreenoverlay.sort = -10; + self.darkscreenoverlay.alpha = 0; + } + + self.darkscreenoverlay.alpha = 0; + self.darkscreenoverlay fadeovertime(0.2); + self.darkscreenoverlay.alpha = 0.6; + wait 0.4; + self.darkscreenoverlay fadeovertime(0.8); + self.darkscreenoverlay.alpha = 0; +} + +//Function Number: 45 +func_304F() +{ + self endon("death"); + var_00 = 0.75; + wait randomfloat(3); + for(;;) + { + if(level.ac130player) + { + playfxontagforclients(level._effect["beacon"],self,"j_spine4",level.ac130player); + } + + wait var_00; + } +} + +//Function Number: 46 +func_3050() +{ + thread func_3056(); + thread context_sensative_dialog_guy_in_sight(); + thread context_sensative_dialog_guy_crawling(); + thread func_3054(); + thread func_3055(); + thread context_sensative_dialog_kill_thread(); + thread context_sensative_dialog_locations(); + thread func_305E(); +} + +//Function Number: 47 +context_sensative_dialog_guy_in_sight() +{ + self endon("ac130player_removed"); + for(;;) + { + if(context_sensative_dialog_guy_in_sight_check()) + { + thread context_sensative_dialog_play_random_group_sound("ai","in_sight"); + } + + wait randomfloatrange(1,3); + } +} + +//Function Number: 48 +context_sensative_dialog_guy_in_sight_check() +{ + var_00 = []; + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + if(!isdefined(var_00[var_01])) + { + continue; + } + + if(!isalive(var_00[var_01])) + { + continue; + } + + if(within_fov(level.ac130player geteye(),level.ac130player getplayerangles(),var_00[var_01].origin,level.cosine["5"])) + { + return 1; + } + + wait 0.05; + } + + return 0; +} + +//Function Number: 49 +context_sensative_dialog_guy_crawling() +{ + self endon("ac130player_removed"); + for(;;) + { + level waittill("ai_crawling",var_00); + thread context_sensative_dialog_play_random_group_sound("ai","wounded_crawl"); + } +} + +//Function Number: 50 +func_3054() +{ + self endon("ac130player_removed"); + for(;;) + { + level waittill("ai_pain",var_00); + thread context_sensative_dialog_play_random_group_sound("ai","wounded_pain"); + } +} + +//Function Number: 51 +func_3055() +{ + self endon("ac130player_removed"); + for(;;) + { + level waittill("player_destroyed_car",var_00,var_01); + wait 1; + thread context_sensative_dialog_play_random_group_sound("explosion","secondary"); + } +} + +//Function Number: 52 +func_3056() +{ + self endon("ac130player_removed"); + for(;;) + { + level waittill("ai_killed",var_00); + thread func_3057(var_00,level.ac130player); + } +} + +//Function Number: 53 +func_3057(param_00,param_01) +{ + if(!isdefined(param_01)) + { + return; + } + + if(!isplayer(param_01)) + { + return; + } + + level.enemieskilledintimewindow++; + level notify("enemy_killed"); +} + +//Function Number: 54 +context_sensative_dialog_kill_thread() +{ + self endon("ac130player_removed"); + var_00 = 1; + for(;;) + { + level waittill("enemy_killed"); + wait var_00; + var_01 = "kill"; + var_02 = undefined; + if(level.enemieskilledintimewindow >= 2) + { + var_02 = "small_group"; + } + else + { + var_02 = "single"; + if(randomint(3) != 1) + { + level.enemieskilledintimewindow = 0; + continue; + } + } + + level.enemieskilledintimewindow = 0; + thread context_sensative_dialog_play_random_group_sound(var_01,var_02,1); + } +} + +//Function Number: 55 +context_sensative_dialog_locations() +{ + common_scripts\utility::array_thread(getentarray("context_dialog_car","targetname"),::func_305B,"car"); + common_scripts\utility::array_thread(getentarray("context_dialog_truck","targetname"),::func_305B,"truck"); + common_scripts\utility::array_thread(getentarray("context_dialog_building","targetname"),::func_305B,"building"); + common_scripts\utility::array_thread(getentarray("context_dialog_wall","targetname"),::func_305B,"wall"); + common_scripts\utility::array_thread(getentarray("context_dialog_field","targetname"),::func_305B,"field"); + common_scripts\utility::array_thread(getentarray("context_dialog_road","targetname"),::func_305B,"road"); + common_scripts\utility::array_thread(getentarray("context_dialog_church","targetname"),::func_305B,"church"); + common_scripts\utility::array_thread(getentarray("context_dialog_ditch","targetname"),::func_305B,"ditch"); + thread func_305A(); +} + +//Function Number: 56 +func_305A() +{ + self endon("ac130player_removed"); + for(;;) + { + level waittill("context_location",var_00); + if(!isdefined(var_00)) + { + continue; + } + + if(!common_scripts\utility::flag("allow_context_sensative_dialog")) + { + continue; + } + + thread context_sensative_dialog_play_random_group_sound("location",var_00); + wait 5 + randomfloat(10); + } +} + +//Function Number: 57 +func_305B(param_00) +{ + self endon("ac130player_removed"); + for(;;) + { + self waittill("trigger",var_01); + if(!isdefined(var_01)) + { + continue; + } + + if(!isdefined(var_01.team) || var_01.team != "axis") + { + continue; + } + + level notify("context_location",param_00); + wait 5; + } +} + +//Function Number: 58 +context_sensative_dialog_vehiclespawn(param_00) +{ + if(param_00.script_team != "axis") + { + return; + } + + thread func_305D(param_00); + param_00 endon("death"); + while(!within_fov(level.ac130player geteye(),level.ac130player getplayerangles(),param_00.origin,level.cosine["45"])) + { + wait 0.5; + } + + context_sensative_dialog_play_random_group_sound("vehicle","incoming"); +} + +//Function Number: 59 +func_305D(param_00) +{ + param_00 waittill("death"); + thread context_sensative_dialog_play_random_group_sound("vehicle","death"); +} + +//Function Number: 60 +func_305E() +{ + self endon("ac130player_removed"); + for(;;) + { + if(isdefined(level.radio_in_use) && level.radio_in_use == 1) + { + level waittill("radio_not_in_use"); + } + + var_00 = gettime(); + if(var_00 - level.lastradiotransmission >= 3000) + { + level.lastradiotransmission = var_00; + thread context_sensative_dialog_play_random_group_sound("misc","action"); + } + + wait 0.25; + } +} + +//Function Number: 61 +context_sensative_dialog_play_random_group_sound(param_00,param_01,param_02) +{ + level endon("ac130player_removed"); + if(!isdefined(param_02)) + { + param_02 = 0; + } + + if(!common_scripts\utility::flag("allow_context_sensative_dialog")) + { + if(param_02) + { + common_scripts\utility::flag_wait("allow_context_sensative_dialog"); + } + else + { + return; + } + } + + var_03 = undefined; + var_04 = randomint(level.scr_sound[param_00][param_01].size); + if(level.scr_sound[param_00][param_01][var_04].played == 1) + { + for(var_05 = 0;var_05 < level.scr_sound[param_00][param_01].size;var_05++) + { + var_04++; + if(var_04 >= level.scr_sound[param_00][param_01].size) + { + var_04 = 0; + } + + if(level.scr_sound[param_00][param_01][var_04].played == 1) + { + continue; + } + + var_03 = var_04; + break; + } + + if(!isdefined(var_03)) + { + for(var_05 = 0;var_05 < level.scr_sound[param_00][param_01].size;var_05++) + { + level.scr_sound[param_00][param_01][var_05].played = 0; + } + + var_03 = randomint(level.scr_sound[param_00][param_01].size); + } + } + else + { + var_03 = var_04; + } + + if(func_3061(param_00,param_01,var_03)) + { + return; + } + + level.scr_sound[param_00][param_01][var_03].played = 1; + var_06 = randomint(level.scr_sound[param_00][param_01][var_03].size); + func_3062(level.scr_sound[param_00][param_01][var_03].sounds[var_06],param_02); +} + +//Function Number: 62 +func_3061(param_00,param_01,param_02) +{ + if(!isdefined(level.context_sensative_dialog_timeouts)) + { + return 0; + } + + if(!isdefined(level.context_sensative_dialog_timeouts[param_00])) + { + return 0; + } + + if(!isdefined(level.context_sensative_dialog_timeouts[param_00][param_01])) + { + return 0; + } + + if(isdefined(level.context_sensative_dialog_timeouts[param_00][param_01].groups) && isdefined(level.context_sensative_dialog_timeouts[param_00][param_01].groups[string(param_02)])) + { + var_03 = gettime(); + if(var_03 - level.context_sensative_dialog_timeouts[param_00][param_01].groups[string(param_02)].v["lastPlayed"] < level.context_sensative_dialog_timeouts[param_00][param_01].groups[string(param_02)].v["timeoutDuration"]) + { + return 1; + } + + level.context_sensative_dialog_timeouts[param_00][param_01].groups[string(param_02)].v["lastPlayed"] = var_03; + } + else if(isdefined(level.context_sensative_dialog_timeouts[param_00][param_01].v)) + { + var_03 = gettime(); + if(var_03 - level.context_sensative_dialog_timeouts[param_00][param_01].v["lastPlayed"] < level.context_sensative_dialog_timeouts[param_00][param_01].v["timeoutDuration"]) + { + return 1; + } + + level.context_sensative_dialog_timeouts[param_00][param_01].v["lastPlayed"] = var_03; + } + + return 0; +} + +//Function Number: 63 +func_3062(param_00,param_01,param_02) +{ + if(!isdefined(level.radio_in_use)) + { + level.radio_in_use = 0; + } + + if(!isdefined(param_01)) + { + param_01 = 0; + } + + if(!isdefined(param_02)) + { + param_02 = 0; + } + + param_02 = param_02 * 1000; + var_03 = gettime(); + var_04 = 0; + var_04 = func_3063(param_00); + if(var_04) + { + return; + } + + if(!param_01) + { + return; + } + + level.radioforcedtransmissionqueue[level.radioforcedtransmissionqueue.size] = param_00; + while(!var_04) + { + if(level.radio_in_use) + { + level waittill("radio_not_in_use"); + } + + if(param_02 > 0 && gettime() - var_03 > param_02) + { + break; + } + + if(!isdefined(level.ac130player)) + { + break; + } + + var_04 = func_3063(level.radioforcedtransmissionqueue[0]); + if(!level.radio_in_use && isdefined(level.ac130player) && !var_04) + { + } + } + + level.radioforcedtransmissionqueue = array_remove_index(level.radioforcedtransmissionqueue,0); +} + +//Function Number: 64 +func_3063(param_00) +{ + if(level.radio_in_use) + { + return 0; + } + + if(!isdefined(level.ac130player)) + { + return 0; + } + + level.radio_in_use = 1; + if(self.team == "allies" || self.team == "axis") + { + param_00 = maps\mp\gametypes\_teams::getteamvoiceprefix(self.team) + param_00; + level.ac130player playlocalsound(param_00); + } + + wait 4; + level.radio_in_use = 0; + level.lastradiotransmission = gettime(); + level notify("radio_not_in_use"); + return 1; +} + +//Function Number: 65 +debug_circle(param_00,param_01,param_02,param_03,param_04,param_05) +{ + var_06 = 16; + var_07 = 360 / var_06; + var_08 = []; + for(var_09 = 0;var_09 < var_06;var_09++) + { + var_0A = var_07 * var_09; + var_0B = cos(var_0A) * param_01; + var_0C = sin(var_0A) * param_01; + var_0D = param_00[0] + var_0B; + var_0E = param_00[1] + var_0C; + var_0F = param_00[2]; + var_08[var_08.size] = (var_0D,var_0E,var_0F); + } + + if(isdefined(param_04)) + { + wait param_04; + } + + thread debug_circle_drawlines(var_08,param_02,param_03,param_05,param_00); +} + +//Function Number: 66 +debug_circle_drawlines(param_00,param_01,param_02,param_03,param_04) +{ + if(!isdefined(param_03)) + { + param_03 = 0; + } + + if(!isdefined(param_04)) + { + param_03 = 0; + } + + for(var_05 = 0;var_05 < param_00.size;var_05++) + { + var_06 = param_00[var_05]; + if(var_05 + 1 >= param_00.size) + { + var_07 = param_00[0]; + } + else + { + var_07 = param_00[var_05 + 1]; + } + + thread debug_line(var_06,var_07,param_01,param_02); + if(param_03) + { + thread debug_line(param_04,var_06,param_01,param_02); + } + } +} + +//Function Number: 67 +debug_line(param_00,param_01,param_02,param_03) +{ + if(!isdefined(param_03)) + { + param_03 = (1,1,1); + } + + for(var_04 = 0;var_04 < param_02 * 20;var_04++) + { + wait 0.05; + } +} + +//Function Number: 68 +handleincomingstinger() +{ + level endon("game_ended"); + for(;;) + { + level waittill("stinger_fired",var_00,var_01,var_02); + if(!isdefined(var_02) || var_02 != level.ac130.planemodel) + { + continue; + } + + var_01 thread stingerproximitydetonate(var_00,var_00.team); + } +} + +//Function Number: 69 +func_2C55(param_00) +{ + wait param_00; + self delete(); +} + +//Function Number: 70 +stingerproximitydetonate(param_00,param_01) +{ + self endon("death"); + if(isdefined(level.ac130player)) + { + level.ac130player playlocalsound("missile_incoming"); + } + + level.ac130.incomingmissile = 1; + var_02 = level.ac130.planemodel; + self missile_settargetent(var_02); + var_03 = 0; + var_04 = var_02 getpointinbounds(0,0,0); + var_05 = distance(self.origin,var_04); + var_06 = vectornormalize(var_04 - self.origin); + for(;;) + { + if(!isdefined(level.ac130player) || isdefined(level.ac130.planemodel.crashed) && level.ac130.planemodel.crashed == 1) + { + self missile_settargetpos(level.ac130.origin + (0,0,100000)); + return; + } + + var_04 = var_02 getpointinbounds(0,0,0); + var_07 = distance(self.origin,var_04); + if(var_07 < 3000 && var_02 == level.ac130.planemodel && level.ac130.numflares > 0) + { + level.ac130.numflares--; + var_08 = var_02 deployflares(); + self missile_settargetent(var_08); + var_02 = var_08; + if(isdefined(level.ac130player)) + { + level.ac130player stoplocalsound("missile_incoming"); + } + + return; + } + + if(var_0B < var_06) + { + var_09 = var_06 - var_0B * 20; + var_0A = var_0B / var_09; + if(var_0A < 1.5 && !var_04 && var_03 == level.ac130.planemodel) + { + if(isdefined(level.ac130player)) + { + level.ac130player playlocalsound("fasten_seatbelts"); + } + + var_04 = 1; + } + + var_06 = var_0B; + } + + var_08 = vectornormalize(var_05 - self.origin); + if(vectordot(var_08,var_07) < 0) + { + if(isdefined(level.ac130player)) + { + level.ac130player stoplocalsound("missile_incoming"); + if(level.ac130player.team != var_02) + { + radiusdamage(self.origin,1000,1000,1000,param_01,"MOD_EXPLOSIVE","stinger_mp"); + } + } + + self hide(); + wait 0.05; + self delete(); + } + else + { + var_07 = var_08; + } + + wait 0.05; + } +} + +//Function Number: 71 +func_2C53() +{ + level endon("game_ended"); + for(;;) + { + level waittill("sam_fired",var_00,var_01,var_02); + if(!isdefined(var_02) || var_02 != level.ac130.planemodel) + { + continue; + } + + level thread func_3066(var_00,var_00.team,var_01); + } +} + +//Function Number: 72 +func_3066(param_00,param_01,param_02) +{ + if(isdefined(level.ac130player)) + { + level.ac130player playlocalsound("missile_incoming"); + } + + level.ac130.incomingmissile = 1; + var_03 = level.ac130.planemodel; + var_04 = 0; + var_05 = []; + var_06 = var_03 getpointinbounds(0,0,0); + for(var_07 = 0;var_07 < param_02.size;var_07++) + { + if(isdefined(param_02[var_07])) + { + var_05[var_07] = distance(param_02[var_07].origin,var_06); + param_02[var_07].lastvectotarget = vectornormalize(var_06 - param_02[var_07].origin); + continue; + } + + var_05[var_07] = undefined; + } + + for(;;) + { + if(!isdefined(level.ac130player) || isdefined(level.ac130.planemodel.crashed) && level.ac130.planemodel.crashed == 1) + { + for(var_07 = 0;var_07 < param_02.size;var_07++) + { + if(isdefined(param_02[var_07])) + { + param_02[var_07] missile_settargetpos(level.ac130.origin + (0,0,100000)); + } + } + + return; + } + + var_06 = var_03 getpointinbounds(0,0,0); + var_08 = []; + var_07 = 0; + while(var_07 < param_02.size) + { + if(isdefined(param_02[var_07])) + { + } + + var_08++ = var_41[var_07]; + } + + if(!isdefined(level.ac130player)) + { + return; + } + + var_08 = 0; + while(var_08 < var_41.size) + { + if(isdefined(var_41[var_08])) + { + if(var_41[var_08] < 3000 && var_04 == level.ac130.planemodel && level.ac130.numflares > 0) + { + level.ac130.numflares-- = distance(param_02[var_07].origin,var_06); + var_09 = var_04 deployflares(); + for(var_0A = 0;var_0A < var_03.size;var_0A++) + { + if(isdefined(var_03[var_0A])) + { + var_03[var_0A] missile_settargetent(var_09); + } + } + + if(isdefined(level.ac130player)) + { + level.ac130player stoplocalsound("missile_incoming"); + } + + return; + } + + if(var_0A[var_09] < var_08[var_09]) + { + var_0B = var_08[var_09] - var_0A[var_09] * 20; + var_0C = var_0A[var_09] / var_0B; + if(var_0C < 1.5 && !var_07 && var_06 == level.ac130.planemodel) + { + if(isdefined(level.ac130player)) + { + level.ac130player playlocalsound("fasten_seatbelts"); + } + + var_07 = 1; + } + + var_08[var_09] = var_0A[var_09]; + } + + var_0D = vectornormalize(var_41 - var_05[var_09].origin); + if(vectordot(var_0D,var_05[var_09].lastvectotarget) < 0) + { + if(isdefined(level.ac130player)) + { + level.ac130player stoplocalsound("missile_incoming"); + if(level.teambased) + { + if(level.ac130player.team != var_04) + { + radiusdamage(var_05[var_09].origin,1000,1000,1000,var_03,"MOD_EXPLOSIVE","sam_projectile_mp"); + } + } + else + { + radiusdamage(var_05[var_09].origin,1000,1000,1000,var_03,"MOD_EXPLOSIVE","sam_projectile_mp"); + } + } + + var_05[var_09] hide(); + wait 0.05; + var_05[var_09] delete(); + } + } + + var_09++; + } + + wait 0.05; + } +} + +//Function Number: 73 +func_3067(param_00) +{ + level.ac130.planemodel notify("crashing"); + level.ac130.planemodel.crashed = 1; + playfxontag(level._effect["ac130_explode"],level.ac130.planemodel,"tag_deathfx"); + wait 0.25; + level.ac130.planemodel hide(); +} + +//Function Number: 74 +func_2C4D(param_00) +{ + for(var_01 = 0;var_01 < param_00;var_01++) + { + thread func_3069(); + wait randomfloatrange(0.1,0.25); + } +} + +//Function Number: 75 +deployflares(param_00) +{ + self playsound("ac130_flare_burst"); + if(!isdefined(param_00)) + { + var_01 = spawn("script_origin",level.ac130.planemodel.origin); + var_01.angles = level.ac130.planemodel.angles; + var_01 movegravity((0,0,0),5); + thread func_2C4D(10); + var_01 thread func_2C55(5); + return var_01; + } + + thread func_2C4D(5); +} + +//Function Number: 76 +angelflareprecache() +{ + precachemodel("angel_flare_rig"); + precachempanim("ac130_angel_flares01"); + precachempanim("ac130_angel_flares02"); + precachempanim("ac130_angel_flares03"); + level._effect["angel_flare_geotrail"] = loadfx("smoke/angel_flare_geotrail"); + level._effect["angel_flare_swirl"] = loadfx("smoke/angel_flare_swirl_runner"); +} + +//Function Number: 77 +func_3069() +{ + var_00 = spawn("script_model",self.origin); + var_00 setmodel("angel_flare_rig"); + var_00.origin = self gettagorigin("tag_flash_flares"); + var_00.angles = self gettagangles("tag_flash_flares"); + var_00.angles = (var_00.angles[0],var_00.angles[1] + 180,var_00.angles[2] + -90); + var_01 = level._effect["angel_flare_geotrail"]; + var_00 scriptmodelplayanim("ac130_angel_flares0" + randomint(3) + 1); + wait 0.1; + playfxontag(var_01,var_00,"flare_left_top"); + playfxontag(var_01,var_00,"flare_right_top"); + wait 0.05; + playfxontag(var_01,var_00,"flare_left_bot"); + playfxontag(var_01,var_00,"flare_right_bot"); + wait 3; + stopfxontag(var_01,var_00,"flare_left_top"); + stopfxontag(var_01,var_00,"flare_right_top"); + stopfxontag(var_01,var_00,"flare_left_bot"); + stopfxontag(var_01,var_00,"flare_right_bot"); + var_00 delete(); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/killstreaks/_airdrop.gsc b/MW3/Xbox/MP/maps/mp/killstreaks/_airdrop.gsc new file mode 100644 index 0000000..a2ef312 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/killstreaks/_airdrop.gsc @@ -0,0 +1,2403 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\killstreaks\_airdrop.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 90 + * Decompile Time: 1284 ms + * Timestamp: 10/27/2023 2:26:40 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + precachevehicle("littlebird_mp"); + precachemodel("com_plasticcase_friendly"); + precachemodel("com_plasticcase_enemy"); + precachemodel("com_plasticcase_trap_friendly"); + precachemodel("com_plasticcase_trap_bombsquad"); + precachemodel("vehicle_little_bird_armed"); + precachemodel("vehicle_ac130_low_mp"); + precachemodel("sentry_minigun_folded"); + precachestring(&"PLATFORM_GET_RANDOM"); + precachestring(&"PLATFORM_GET_KILLSTREAK"); + precachestring(&"PLATFORM_CALL_NUKE"); + precachestring(&"MP_CAPTURING_CRATE"); + precacheshader("compassping_friendly_mp"); + precacheshader("compassping_enemy"); + precacheitem("airdrop_trap_explosive_mp"); + precachemodel(maps\mp\gametypes\_teams::getteamcratemodel("allies")); + precachemodel(maps\mp\gametypes\_teams::getteamcratemodel("axis")); + precachemodel("prop_suitcase_bomb"); + precacheshader(maps\mp\gametypes\_teams::getteamhudicon("allies")); + precacheshader(maps\mp\gametypes\_teams::getteamhudicon("axis")); + precacheshader("waypoint_ammo_friendly"); + precacheshader("compass_objpoint_ammo_friendly"); + precacheshader("compass_objpoint_trap_friendly"); + precacheshader("compass_objpoint_ammo_enemy"); + precacheminimapicon("compass_objpoint_c130_friendly"); + precacheminimapicon("compass_objpoint_c130_enemy"); + game["strings"]["ammo_hint"] = &"MP_AMMO_PICKUP"; + game["strings"]["explosive_ammo_hint"] = &"MP_EXPLOSIVE_AMMO_PICKUP"; + game["strings"]["uav_hint"] = &"MP_UAV_PICKUP"; + game["strings"]["counter_uav_hint"] = &"MP_COUNTER_UAV_PICKUP"; + game["strings"]["sentry_hint"] = &"MP_SENTRY_PICKUP"; + game["strings"]["juggernaut_hint"] = &"MP_JUGGERNAUT_PICKUP"; + game["strings"]["airdrop_juggernaut_hint"] = &"MP_JUGGERNAUT_PICKUP"; + game["strings"]["airdrop_juggernaut_def_hint"] = &"MP_JUGGERNAUT_PICKUP"; + game["strings"]["airdrop_juggernaut_gl_hint"] = &"MP_JUGGERNAUT_PICKUP"; + game["strings"]["airdrop_juggernaut_recon_hint"] = &"MP_JUGGERNAUT_PICKUP"; + game["strings"]["trophy_hint"] = &"MP_PICKUP_TROPHY"; + game["strings"]["predator_missile_hint"] = &"MP_PREDATOR_MISSILE_PICKUP"; + game["strings"]["airstrike_hint"] = &"MP_AIRSTRIKE_PICKUP"; + game["strings"]["precision_airstrike_hint"] = &"MP_PRECISION_AIRSTRIKE_PICKUP"; + game["strings"]["harrier_airstrike_hint"] = &"MP_HARRIER_AIRSTRIKE_PICKUP"; + game["strings"]["helicopter_hint"] = &"MP_HELICOPTER_PICKUP"; + game["strings"]["helicopter_flares_hint"] = &"MP_HELICOPTER_FLARES_PICKUP"; + game["strings"]["stealth_airstrike_hint"] = &"MP_STEALTH_AIRSTRIKE_PICKUP"; + game["strings"]["helicopter_minigun_hint"] = &"MP_HELICOPTER_MINIGUN_PICKUP"; + game["strings"]["ac130_hint"] = &"MP_AC130_PICKUP"; + game["strings"]["emp_hint"] = &"MP_EMP_PICKUP"; + game["strings"]["littlebird_support_hint"] = &"MP_LITTLEBIRD_SUPPORT_PICKUP"; + game["strings"]["littlebird_flock_hint"] = &"MP_LITTLEBIRD_FLOCK_PICKUP"; + game["strings"]["uav_strike_hint"] = &"MP_UAV_STRIKE_PICKUP"; + game["strings"]["light_armor_hint"] = &"MP_LIGHT_ARMOR_PICKUP"; + game["strings"]["minigun_turret_hint"] = &"MP_MINIGUN_TURRET_PICKUP"; + game["strings"]["team_ammo_refill_hint"] = &"MP_TEAM_AMMO_REFILL_PICKUP"; + game["strings"]["deployable_vest_hint"] = &"MP_DEPLOYABLE_VEST_PICKUP"; + game["strings"]["deployable_exp_ammo_hint"] = &"MP_DEPLOYABLE_EXP_AMMO_PICKUP"; + game["strings"]["gl_turret_hint"] = &"MP_GL_TURRET_PICKUP"; + game["strings"]["directional_uav_hint"] = &"MP_DIRECTIONAL_UAV_PICKUP"; + game["strings"]["ims_hint"] = &"MP_IMS_PICKUP"; + game["strings"]["heli_sniper_hint"] = &"MP_HELI_SNIPER_PICKUP"; + game["strings"]["heli_minigunner_hint"] = &"MP_HELI_MINIGUNNER_PICKUP"; + game["strings"]["remote_mortar_hint"] = &"MP_REMOTE_MORTAR_PICKUP"; + game["strings"]["remote_uav_hint"] = &"MP_REMOTE_UAV_PICKUP"; + game["strings"]["littlebird_support_hint"] = &"MP_LITTLEBIRD_SUPPORT_PICKUP"; + game["strings"]["osprey_gunner_hint"] = &"MP_OSPREY_GUNNER_PICKUP"; + game["strings"]["remote_tank_hint"] = &"MP_REMOTE_TANK_PICKUP"; + game["strings"]["triple_uav_hint"] = &"MP_TRIPLE_UAV_PICKUP"; + game["strings"]["remote_mg_turret_hint"] = &"MP_REMOTE_MG_TURRET_PICKUP"; + game["strings"]["sam_turret_hint"] = &"MP_SAM_TURRET_PICKUP"; + game["strings"]["escort_airdrop_hint"] = &"MP_ESCORT_AIRDROP_PICKUP"; + level.airdropcrates = getentarray("care_package","targetname"); + level.oldairdropcrates = getentarray("airdrop_crate","targetname"); + if(!level.airdropcrates.size) + { + level.airdropcrates = level.oldairdropcrates; + level.airdropcratecollision = getent(level.airdropcrates[0].target,"targetname"); + } + else + { + foreach(var_01 in level.oldairdropcrates) + { + var_01 deletecrate(); + } + + level.airdropcratecollision = getent(level.airdropcrates[0].target,"targetname"); + level.oldairdropcrates = getentarray("airdrop_crate","targetname"); + } + + if(level.airdropcrates.size) + { + foreach(var_01 in level.airdropcrates) + { + var_01 deletecrate(); + } + } + + level.numdropcrates = 0; + level.killstreakfuncs["airdrop_assault"] = ::tryuseassaultairdrop; + level.killstreakfuncs["airdrop_support"] = ::func_2E41; + level.killstreakfuncs["airdrop_mega"] = ::tryusemegaairdrop; + level.killstreakfuncs["airdrop_predator_missile"] = ::func_2E42; + level.killstreakfuncs["airdrop_sentry_minigun"] = ::tryuseairdropsentryminigun; + level.killstreakfuncs["airdrop_juggernaut"] = ::func_2E44; + level.killstreakfuncs["airdrop_juggernaut_def"] = ::tryusejuggernautdefairdrop; + level.killstreakfuncs["airdrop_juggernaut_gl"] = ::tryusejuggernautglairdrop; + level.killstreakfuncs["airdrop_juggernaut_recon"] = ::func_2E46; + level.killstreakfuncs["airdrop_trophy"] = ::tryusetrophyairdrop; + level.killstreakfuncs["airdrop_trap"] = ::func_2E4A; + level.killstreakfuncs["airdrop_remote_tank"] = ::tryuseairdropremotetank; + level.killstreakfuncs["ammo"] = ::func_2E4C; + level.killstreakfuncs["explosive_ammo"] = ::func_2E4D; + level.killstreakfuncs["explosive_ammo_2"] = ::func_2E4D; + level.killstreakfuncs["light_armor"] = ::func_2E4E; + level.littlebirds = []; + level.cratetypes = []; + func_2E3C("airdrop_assault","uav",10,::func_2E8B); + func_2E3C("airdrop_assault","ims",20,::func_2E8B); + func_2E3C("airdrop_assault","predator_missile",20,::func_2E8B); + func_2E3C("airdrop_assault","sentry",20,::func_2E8B); + func_2E3C("airdrop_assault","precision_airstrike",6,::func_2E8B); + func_2E3C("airdrop_assault","helicopter",4,::func_2E8B); + func_2E3C("airdrop_assault","littlebird_support",4,::func_2E8B); + func_2E3C("airdrop_assault","littlebird_flock",4,::func_2E8B); + func_2E3C("airdrop_assault","remote_mortar",3,::func_2E8B); + func_2E3C("airdrop_assault","remote_tank",3,::func_2E8B); + func_2E3C("airdrop_assault","helicopter_flares",2,::func_2E8B); + func_2E3C("airdrop_assault","ac130",2,::func_2E8B); + func_2E3C("airdrop_assault","airdrop_juggernaut",1,::juggernautcratethink); + func_2E3C("airdrop_assault","osprey_gunner",1,::func_2E8B); + func_2E3C("airdrop_osprey_gunner","uav",10,::func_2E8B); + func_2E3C("airdrop_osprey_gunner","ims",20,::func_2E8B); + func_2E3C("airdrop_osprey_gunner","predator_missile",20,::func_2E8B); + func_2E3C("airdrop_osprey_gunner","sentry",20,::func_2E8B); + func_2E3C("airdrop_osprey_gunner","precision_airstrike",8,::func_2E8B); + func_2E3C("airdrop_osprey_gunner","littlebird_flock",8,::func_2E8B); + func_2E3C("airdrop_osprey_gunner","remote_mortar",5,::func_2E8B); + func_2E3C("airdrop_osprey_gunner","remote_tank",2,::func_2E8B); + func_2E3C("airdrop_osprey_gunner","helicopter_flares",2,::func_2E8B); + func_2E3C("airdrop_osprey_gunner","airdrop_juggernaut",1,::juggernautcratethink); + func_2E3C("airdrop_osprey_gunner","ac130",1,::func_2E8B); + func_2E3C("airdrop_support","uav",9,::func_2E8B); + func_2E3C("airdrop_support","counter_uav",9,::func_2E8B); + func_2E3C("airdrop_support","deployable_vest",8,::func_2E8B); + func_2E3C("airdrop_support","sam_turret",6,::func_2E8B); + func_2E3C("airdrop_support","remote_uav",5,::func_2E8B); + func_2E3C("airdrop_support","remote_mg_turret",5,::func_2E8B); + func_2E3C("airdrop_support","stealth_airstrike",4,::func_2E8B); + func_2E3C("airdrop_support","triple_uav",3,::func_2E8B); + func_2E3C("airdrop_support","airdrop_juggernaut_recon",2,::juggernautcratethink); + func_2E3C("airdrop_support","escort_airdrop",1,::func_2E8B); + func_2E3C("airdrop_support","emp",1,::func_2E8B); + func_2E3C("airdrop_escort","airdrop_trap",10,::func_2E95); + func_2E3C("airdrop_escort","uav",8,::func_2E8B); + func_2E3C("airdrop_escort","counter_uav",8,::func_2E8B); + func_2E3C("airdrop_escort","deployable_vest",7,::func_2E8B); + func_2E3C("airdrop_escort","sentry",7,::func_2E8B); + func_2E3C("airdrop_escort","ims",7,::func_2E8B); + func_2E3C("airdrop_escort","sam_turret",6,::func_2E8B); + func_2E3C("airdrop_escort","stealth_airstrike",5,::func_2E8B); + func_2E3C("airdrop_escort","airdrop_juggernaut_recon",5,::juggernautcratethink); + func_2E3C("airdrop_escort","remote_uav",5,::func_2E8B); + func_2E3C("airdrop_escort","triple_uav",3,::func_2E8B); + func_2E3C("airdrop_escort","remote_mg_turret",3,::func_2E8B); + func_2E3C("airdrop_escort","emp",1,::func_2E8B); + func_2E3C("airdrop_trapcontents","ims",6,::func_2E94); + func_2E3C("airdrop_trapcontents","predator_missile",7,::func_2E94); + func_2E3C("airdrop_trapcontents","sentry",7,::func_2E94); + func_2E3C("airdrop_trapcontents","precision_airstrike",7,::func_2E94); + func_2E3C("airdrop_trapcontents","helicopter",8,::func_2E94); + func_2E3C("airdrop_trapcontents","littlebird_support",8,::func_2E94); + func_2E3C("airdrop_trapcontents","littlebird_flock",8,::func_2E94); + func_2E3C("airdrop_trapcontents","remote_mortar",9,::func_2E94); + func_2E3C("airdrop_trapcontents","remote_tank",9,::func_2E94); + func_2E3C("airdrop_trapcontents","helicopter_flares",10,::func_2E94); + func_2E3C("airdrop_trapcontents","ac130",10,::func_2E94); + func_2E3C("airdrop_trapcontents","airdrop_juggernaut",10,::func_2E94); + func_2E3C("airdrop_trapcontents","osprey_gunner",10,::func_2E94); + func_2E3C("airdrop_grnd","uav",25,::func_2E8B); + func_2E3C("airdrop_grnd","counter_uav",25,::func_2E8B); + func_2E3C("airdrop_grnd","deployable_vest",21,::func_2E8B); + func_2E3C("airdrop_grnd","sentry",21,::func_2E8B); + func_2E3C("airdrop_grnd","remote_mg_turret",17,::func_2E8B); + func_2E3C("airdrop_grnd","ims",17,::func_2E8B); + func_2E3C("airdrop_grnd","triple_uav",13,::func_2E8B); + func_2E3C("airdrop_grnd","predator_missile",13,::func_2E8B); + func_2E3C("airdrop_grnd","airdrop_trap",11,::func_2E95); + func_2E3C("airdrop_grnd","precision_airstrike",9,::func_2E8B); + func_2E3C("airdrop_grnd","stealth_airstrike",9,::func_2E8B); + func_2E3C("airdrop_grnd","helicopter",9,::func_2E8B); + func_2E3C("airdrop_grnd","remote_tank",7,::func_2E8B); + func_2E3C("airdrop_grnd","sam_turret",7,::func_2E8B); + func_2E3C("airdrop_grnd","remote_uav",7,::func_2E8B); + func_2E3C("airdrop_grnd","littlebird_support",4,::func_2E8B); + func_2E3C("airdrop_grnd","airdrop_juggernaut_recon",4,::juggernautcratethink); + func_2E3C("airdrop_grnd","littlebird_flock",2,::func_2E8B); + func_2E3C("airdrop_grnd","helicopter_flares",2,::func_2E8B); + func_2E3C("airdrop_grnd","remote_mortar",2,::func_2E8B); + func_2E3C("airdrop_grnd","ac130",2,::func_2E8B); + func_2E3C("airdrop_grnd","airdrop_juggernaut",1,::juggernautcratethink); + func_2E3C("airdrop_grnd","osprey_gunner",1,::func_2E8B); + func_2E3C("airdrop_grnd","emp",1,::func_2E8B); + func_2E3C("airdrop_sentry_minigun","sentry",100,::func_2E8B); + func_2E3C("airdrop_juggernaut","airdrop_juggernaut",100,::juggernautcratethink); + func_2E3C("airdrop_juggernaut_recon","airdrop_juggernaut_recon",100,::juggernautcratethink); + func_2E3C("airdrop_trophy","airdrop_trophy",100,::func_2E91); + func_2E3C("airdrop_trap","airdrop_trap",100,::func_2E95); + func_2E3C("littlebird_support","littlebird_support",100,::func_2E8B); + func_2E3C("airdrop_remote_tank","remote_tank",100,::func_2E8B); + foreach(var_0A, var_06 in level.cratetypes) + { + level.cratemaxval[var_0A] = 0; + foreach(var_09, var_08 in level.cratetypes[var_0A]) + { + if(!var_08) + { + continue; + } + + level.cratemaxval[var_0A] = level.cratemaxval[var_0A] + var_08; + level.cratetypes[var_0A][var_09] = level.cratemaxval[var_0A]; + } + } + + var_0B = getentarray("mp_tdm_spawn","classname"); + var_0C = undefined; + foreach(var_0E in var_0B) + { + if(!isdefined(var_0C) || var_0E.origin[2] < var_0C.origin[2]) + { + var_0C = var_0E; + } + } + + level.lowspawn = var_0C; +} + +//Function Number: 2 +func_2E3C(param_00,param_01,param_02,param_03) +{ + level.cratetypes[param_00][param_01] = param_02; + level.cratefuncs[param_00][param_01] = param_03; +} + +//Function Number: 3 +getrandomcratetype(param_00) +{ + var_01 = randomint(level.cratemaxval[param_00]); + if(isdefined(self.owner) && self.owner maps\mp\_utility::func_27AF("specialty_luckycharm")) + { + var_02 = 1; + } + else + { + var_02 = 0; + } + + var_03 = undefined; + foreach(var_06, var_05 in level.cratetypes[param_00]) + { + if(!var_05) + { + continue; + } + + var_03 = var_06; + if(var_05 > var_01) + { + if(var_02) + { + var_02 = 0; + continue; + } + + break; + } + } + + return var_03; +} + +//Function Number: 4 +getcratetypefordroptype(param_00) +{ + switch(param_00) + { + case "airdrop_sentry_minigun": + return "sentry"; + + case "airdrop_predator_missile": + return "predator_missile"; + + case "airdrop_juggernaut": + return "airdrop_juggernaut"; + + case "airdrop_juggernaut_def": + return "airdrop_juggernaut_def"; + + case "airdrop_juggernaut_gl": + return "airdrop_juggernaut_gl"; + + case "airdrop_juggernaut_recon": + return "airdrop_juggernaut_recon"; + + case "airdrop_trap": + return "airdrop_trap"; + + case "airdrop_trophy": + return "airdrop_trophy"; + + case "airdrop_remote_tank": + return "remote_tank"; + + case "airdrop_grnd_mega": + case "airdrop_grnd": + case "airdrop_escort": + case "airdrop_mega": + case "airdrop_support": + case "airdrop_assault": + default: + return getrandomcratetype(param_00); + } +} + +//Function Number: 5 +drawline(param_00,param_01,param_02) +{ + var_03 = int(param_02 * 20); + for(var_04 = 0;var_04 < var_03;var_04++) + { + wait 0.05; + } +} + +//Function Number: 6 +tryuseassaultairdrop(param_00,param_01) +{ + return tryuseairdrop(param_00,param_01,"airdrop_assault"); +} + +//Function Number: 7 +func_2E41(param_00,param_01) +{ + return tryuseairdrop(param_00,param_01,"airdrop_support"); +} + +//Function Number: 8 +func_2E42(param_00,param_01) +{ + return tryuseairdrop(param_00,param_01,"airdrop_predator_missile"); +} + +//Function Number: 9 +tryuseairdropsentryminigun(param_00,param_01) +{ + return tryuseairdrop(param_00,param_01,"airdrop_sentry_minigun"); +} + +//Function Number: 10 +func_2E44(param_00,param_01) +{ + return tryuseairdrop(param_00,param_01,"airdrop_juggernaut"); +} + +//Function Number: 11 +tryusejuggernautglairdrop(param_00,param_01) +{ + return tryuseairdrop(param_00,param_01,"airdrop_juggernaut_gl"); +} + +//Function Number: 12 +func_2E46(param_00,param_01) +{ + return tryuseairdrop(param_00,param_01,"airdrop_juggernaut_recon"); +} + +//Function Number: 13 +tryusejuggernautdefairdrop(param_00,param_01) +{ + return tryuseairdrop(param_00,param_01,"airdrop_juggernaut_def"); +} + +//Function Number: 14 +tryusetrophyairdrop(param_00,param_01) +{ + return tryuseairdrop(param_00,param_01,"airdrop_trophy"); +} + +//Function Number: 15 +tryusemegaairdrop(param_00,param_01) +{ + return tryuseairdrop(param_00,param_01,"airdrop_mega"); +} + +//Function Number: 16 +func_2E4A(param_00,param_01) +{ + if(tryuseairdrop(param_00,param_01,"airdrop_trap")) + { + if(level.teambased) + { + thread maps\mp\_utility::func_26E5(level.otherteam[self.team] + "_enemy_airdrop_assault_inbound",level.otherteam[self.team]); + } + else + { + var_02[0] = self; + thread maps\mp\_utility::func_26E5(level.otherteam[self.team] + "_enemy_airdrop_assault_inbound",undefined,undefined,var_02); + } + + return 1; + } + + return 0; +} + +//Function Number: 17 +tryuseairdropremotetank(param_00,param_01) +{ + return tryuseairdrop(param_00,param_01,"airdrop_remote_tank"); +} + +//Function Number: 18 +func_2E4C(param_00) +{ + if(maps\mp\_utility::isjuggernaut()) + { + return 0; + } + + func_2E9E(1); + return 1; +} + +//Function Number: 19 +func_2E4D(param_00) +{ + if(maps\mp\_utility::isjuggernaut()) + { + return 0; + } + + func_2E9E(0); + maps\mp\_utility::giveperk("specialty_explosivebullets",0); + return 1; +} + +//Function Number: 20 +func_2E4E(param_00) +{ + if(maps\mp\_utility::isjuggernaut()) + { + return 0; + } + + thread maps\mp\perks\_perkfunctions::givelightarmor(); + return 1; +} + +//Function Number: 21 +tryuseairdrop(param_00,param_01,param_02) +{ + var_03 = undefined; + if(!isdefined(param_02)) + { + param_02 = "airdrop_assault"; + } + + var_04 = 1; + if((level.littlebirds.size >= 4 || level.fauxvehiclecount >= 4) && param_02 != "airdrop_mega" && !issubstr(tolower(param_02),"juggernaut")) + { + self iprintlnbold(&"MP_AIR_SPACE_TOO_CROWDED"); + return 0; + } + else if(maps\mp\_utility::func_2BEC() >= maps\mp\_utility::maxvehiclesallowed() || level.fauxvehiclecount + var_04 >= maps\mp\_utility::maxvehiclesallowed()) + { + self iprintlnbold(&"MP_TOO_MANY_VEHICLES"); + return 0; + } + else if(isdefined(level.civilianjetflyby)) + { + self iprintlnbold(&"MP_CIVILIAN_AIR_TRAFFIC"); + return 0; + } + else if(maps\mp\_utility::isusingremote()) + { + return 0; + } + else if(!maps\mp\_utility::func_2DF3()) + { + return 0; + } + + if(param_02 != "airdrop_mega" && !issubstr(tolower(param_02),"juggernaut")) + { + thread watchdisconnect(); + } + + if(!issubstr(param_02,"juggernaut")) + { + maps\mp\_utility::func_80C7(); + } + + var_03 = beginairdropviamarker(param_00,param_01,param_02); + if(!isdefined(var_03) || !var_03) + { + self notify("markerDetermined"); + maps\mp\_utility::func_80C8(); + return 0; + } + + if(param_02 == "airdrop_mega") + { + thread maps\mp\_utility::teamplayercardsplash("used_airdrop_mega",self); + } + + self notify("markerDetermined"); + maps\mp\_matchdata::logkillstreakevent(param_02,self.origin); + return 1; +} + +//Function Number: 22 +watchdisconnect() +{ + self endon("markerDetermined"); + self waittill("disconnect"); +} + +//Function Number: 23 +beginairdropviamarker(param_00,param_01,param_02) +{ + self notify("beginAirdropViaMarker"); + self endon("beginAirdropViaMarker"); + self endon("disconnect"); + level endon("game_ended"); + self.threwairdropmarker = undefined; + self.threwairdropmarkerindex = undefined; + thread func_2E53(param_00,param_01,param_02); + thread func_2E55(param_00,param_01,param_02); + thread func_2E56(param_00,param_01,param_02); + var_03 = common_scripts\utility::waittill_any_return("notAirDropWeapon","markerDetermined"); + if(isdefined(var_03) && var_03 == "markerDetermined") + { + return 1; + } + else if(!isdefined(var_03) && isdefined(self.threwairdropmarker)) + { + return 1; + } + + return 0; +} + +//Function Number: 24 +func_2E53(param_00,param_01,param_02) +{ + level endon("game_ended"); + self notify("watchAirDropWeaponChange"); + self endon("watchAirDropWeaponChange"); + self endon("disconnect"); + self endon("markerDetermined"); + while(maps\mp\_utility::ischangingweapon()) + { + wait 0.05; + } + + var_03 = self getcurrentweapon(); + if(func_2E9F(var_03)) + { + var_04 = var_03; + } + else + { + var_04 = undefined; + } + + while(func_2E9F(var_03)) + { + self waittill("weapon_change",var_03); + if(func_2E9F(var_03)) + { + var_04 = var_03; + } + } + + if(isdefined(self.threwairdropmarker)) + { + var_05 = maps\mp\killstreaks\_killstreaks::func_2C01(self.pers["killstreaks"][self.threwairdropmarkerindex].streakname); + self takeweapon(var_05); + self notify("markerDetermined"); + return; + } + + self notify("notAirDropWeapon"); +} + +//Function Number: 25 +func_2E55(param_00,param_01,param_02) +{ + level endon("game_ended"); + self notify("watchAirDropMarkerUsage"); + self endon("watchAirDropMarkerUsage"); + self endon("disconnect"); + self endon("markerDetermined"); + for(;;) + { + self waittill("grenade_pullback",var_03); + if(!func_2E9F(var_03)) + { + continue; + } + + common_scripts\utility::_disableusability(); + beginairdropmarkertracking(); + } +} + +//Function Number: 26 +func_2E56(param_00,param_01,param_02) +{ + level endon("game_ended"); + self notify("watchAirDropMarker"); + self endon("watchAirDropMarker"); + self endon("disconnect"); + self endon("markerDetermined"); + for(;;) + { + self waittill("grenade_fire",var_03,var_04); + if(!func_2E9F(var_04)) + { + continue; + } + + self.threwairdropmarker = 1; + self.threwairdropmarkerindex = self.killstreakindexweapon; + var_03 thread airdropdetonateonstuck(); + var_03.owner = self; + var_03.weaponname = var_04; + var_03 thread airdropmarkeractivate(param_02); + } +} + +//Function Number: 27 +beginairdropmarkertracking() +{ + level endon("game_ended"); + self notify("beginAirDropMarkerTracking"); + self endon("beginAirDropMarkerTracking"); + self endon("death"); + self endon("disconnect"); + common_scripts\utility::waittill_any("grenade_fire","weapon_change"); + common_scripts\utility::_enableusability(); +} + +//Function Number: 28 +airdropmarkeractivate(param_00,param_01) +{ + level endon("game_ended"); + self notify("airDropMarkerActivate"); + self endon("airDropMarkerActivate"); + self waittill("explode",var_02); + var_03 = self.owner; + if(!isdefined(var_03)) + { + return; + } + + if(var_03 maps\mp\_utility::func_27E5()) + { + return; + } + + if(var_03 maps\mp\_utility::func_2BE7()) + { + return; + } + + if(issubstr(tolower(param_00),"escort_airdrop") && isdefined(level.chopper)) + { + return; + } + + wait 0.05; + if(issubstr(tolower(param_00),"juggernaut")) + { + level doc130flyby(var_03,var_02,randomfloat(360),param_00); + return; + } + + if(issubstr(tolower(param_00),"escort_airdrop")) + { + var_03 maps\mp\killstreaks\_escortairdrop::finishsupportescortusage(param_01,var_02,randomfloat(360),"escort_airdrop"); + return; + } + + level doflyby(var_03,var_02,randomfloat(360),param_00); +} + +//Function Number: 29 +func_2E5A() +{ + self.inuse = 0; + self hide(); + if(isdefined(self.target)) + { + self.collision = getent(self.target,"targetname"); + self.collision notsolid(); + return; + } + + self.collision = undefined; +} + +//Function Number: 30 +func_2E5C(param_00) +{ + wait 0.25; + self linkto(param_00,"tag_origin",(0,0,0),(0,0,0)); + param_00 waittill("death"); + self delete(); +} + +//Function Number: 31 +func_80C9() +{ + self endon("death"); + self hide(); + foreach(var_01 in level.players) + { + if(var_01.team != "spectator") + { + self showtoplayer(var_01); + } + } + + for(;;) + { + level waittill("joined_team"); + self hide(); + foreach(var_01 in level.players) + { + if(var_01.team != "spectator") + { + self showtoplayer(var_01); + } + } + } +} + +//Function Number: 32 +func_2E5D(param_00) +{ + self endon("death"); + self hide(); + foreach(var_02 in level.players) + { + if(var_02.team == param_00) + { + self showtoplayer(var_02); + } + } + + for(;;) + { + level waittill("joined_team"); + self hide(); + foreach(var_02 in level.players) + { + if(var_02.team == param_00) + { + self showtoplayer(var_02); + } + } + } +} + +//Function Number: 33 +func_2E5E(param_00,param_01) +{ + self endon("death"); + self hide(); + foreach(var_03 in level.players) + { + if(param_01 && isdefined(param_00) && var_03 != param_00) + { + continue; + } + + if(!param_01 && isdefined(param_00) && var_03 == param_00) + { + continue; + } + + self showtoplayer(var_03); + } + + for(;;) + { + level waittill("joined_team"); + self hide(); + foreach(var_03 in level.players) + { + if(param_01 && isdefined(param_00) && var_03 != param_00) + { + continue; + } + + if(!param_01 && isdefined(param_00) && var_03 == param_00) + { + continue; + } + + self showtoplayer(var_03); + } + } +} + +//Function Number: 34 +func_2E5F(param_00) +{ + self endon("death"); + for(;;) + { + func_2E6A(param_00); + level waittill("joined_team"); + } +} + +//Function Number: 35 +func_2E60() +{ + if(!issubstr(self.cratetype,"juggernaut")) + { + return; + } + + self endon("death"); + level endon("game_ended"); + for(;;) + { + level waittill("juggernaut_equipped",var_00); + self disableplayeruse(var_00); + thread func_2E62(var_00); + } +} + +//Function Number: 36 +func_2E62(param_00) +{ + self endon("death"); + level endon("game_ended"); + param_00 endon("disconnect"); + param_00 waittill("death"); + self enableplayeruse(param_00); +} + +//Function Number: 37 +func_2E63(param_00,param_01,param_02,param_03) +{ + var_04 = spawn("script_model",param_03); + var_04.curprogress = 0; + var_04.usetime = 0; + var_04.userate = 0; + var_04.team = self.team; + if(isdefined(param_00)) + { + var_04.owner = param_00; + } + else + { + var_04.owner = undefined; + } + + var_04.cratetype = param_02; + var_04.droptype = param_01; + var_04.targetname = "care_package"; + var_04 setmodel(maps\mp\gametypes\_teams::getteamcratemodel(var_04.team)); + var_04 thread func_80C9(); + var_05 = "com_plasticcase_friendly"; + if(param_02 == "airdrop_trap") + { + var_05 = "com_plasticcase_trap_friendly"; + var_04 thread func_2E68(); + } + + var_04.friendlymodel = spawn("script_model",param_03); + var_04.friendlymodel setmodel(var_05); + var_04.enemymodel = spawn("script_model",param_03); + var_04.enemymodel setmodel("com_plasticcase_enemy"); + var_04.friendlymodel thread func_2E5C(var_04); + if(level.teambased) + { + var_04.friendlymodel thread func_2E5D(var_04.team); + } + else + { + var_04.friendlymodel thread func_2E5E(param_00,1); + } + + var_04.enemymodel thread func_2E5C(var_04); + if(level.teambased) + { + var_04.enemymodel thread func_2E5D(level.otherteam[var_04.team]); + } + else + { + var_04.enemymodel thread func_2E5E(param_00,0); + } + + var_04.inuse = 0; + var_04 clonebrushmodeltoscriptmodel(level.airdropcratecollision); + var_04.killcament = spawn("script_model",var_04.origin + (0,0,300)); + var_04.killcament setscriptmoverkillcam("explosive"); + var_04.killcament linkto(var_04); + level.numdropcrates++; + var_04 thread func_2E67(); + return var_04; +} + +//Function Number: 38 +func_2E67() +{ + level endon("game_ended"); + self waittill("death"); + level.numdropcrates--; +} + +//Function Number: 39 +func_2E68() +{ + var_00 = spawn("script_model",self.origin); + var_00.angles = self.angles; + var_00 hide(); + var_01 = level.otherteam[self.team]; + var_00 thread maps\mp\gametypes\_weapons::bombsquadvisibilityupdater(var_01,self.owner); + var_00 setmodel("com_plasticcase_trap_bombsquad"); + var_00 linkto(self); + var_00 setcontents(0); + self waittill("death"); + var_00 delete(); +} + +//Function Number: 40 +cratesetupforuse(param_00,param_01,param_02) +{ + self setcursorhint("HINT_NOICON"); + self sethintstring(param_00); + self makeusable(); + self.mode = param_01; + if(level.teambased || isdefined(self.owner)) + { + var_03 = maps\mp\gametypes\_gameobjects::func_2A31(); + objective_add(var_03,"invisible",(0,0,0)); + objective_position(var_03,self.origin); + objective_state(var_03,"active"); + var_04 = "compass_objpoint_ammo_friendly"; + if(param_01 == "trap") + { + var_04 = "compass_objpoint_trap_friendly"; + } + + objective_icon(var_03,var_04); + if(!level.teambased && isdefined(self.owner)) + { + objective_playerteam(var_03,self.owner getentitynumber()); + } + else + { + objective_team(var_03,self.team); + } + + self.objidfriendly = var_03; + } + + var_03 = maps\mp\gametypes\_gameobjects::func_2A31(); + objective_add(var_03,"invisible",(0,0,0)); + objective_position(var_03,self.origin); + objective_state(var_03,"active"); + objective_icon(var_03,"compass_objpoint_ammo_enemy"); + if(!level.teambased && isdefined(self.owner)) + { + objective_playerenemyteam(var_03,self.owner getentitynumber()); + } + else + { + objective_team(var_03,level.otherteam[self.team]); + } + + self.objidenemy = var_03; + if(param_01 == "trap") + { + thread func_2E5F(maps\mp\_utility::getotherteam(self.team)); + } + else + { + thread func_2E5F(); + if(issubstr(self.cratetype,"juggernaut")) + { + foreach(var_06 in level.players) + { + if(var_06 maps\mp\_utility::isjuggernaut()) + { + thread func_2E62(var_06); + } + } + } + + if(level.teambased) + { + maps\mp\_entityheadicons::func_277C(self.team,param_02,(0,0,24),14,14,undefined,undefined,undefined,undefined,undefined,0); + } + else if(isdefined(self.owner)) + { + maps\mp\_entityheadicons::func_277C(self.owner,param_02,(0,0,24),14,14,undefined,undefined,undefined,undefined,undefined,0); + } + } + + thread func_2E60(); +} + +//Function Number: 41 +func_2E6A(param_00) +{ + foreach(var_02 in level.players) + { + if(issubstr(self.cratetype,"juggernaut") && var_02 maps\mp\_utility::isjuggernaut()) + { + self disableplayeruse(var_02); + continue; + } + + if(!level.teambased && self.mode == "trap") + { + if(isdefined(self.owner) && var_02 == self.owner) + { + self disableplayeruse(var_02); + } + else + { + self enableplayeruse(var_02); + } + + continue; + } + + if(!isdefined(param_00) || param_00 == var_02.team) + { + self enableplayeruse(var_02); + continue; + } + + self disableplayeruse(var_02); + } +} + +//Function Number: 42 +dropthecrate(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08) +{ + var_09 = []; + self.owner endon("disconnect"); + if(!isdefined(param_04)) + { + if(isdefined(param_07)) + { + var_0A = undefined; + var_0B = undefined; + for(var_0C = 0;var_0C < 100;var_0C++) + { + var_0B = getcratetypefordroptype(param_01); + var_0A = 0; + for(var_0D = 0;var_0D < param_07.size;var_0D++) + { + if(var_0B == param_07[var_0D]) + { + var_0A = 1; + break; + } + } + + if(var_0A == 0) + { + break; + } + } + + if(var_0A == 1) + { + var_0B = getcratetypefordroptype(param_01); + } + } + else + { + var_0B = getcratetypefordroptype(param_02); + } + } + else + { + var_0B = param_05; + } + + if(!isdefined(param_06)) + { + param_06 = (randomint(5),randomint(5),randomint(5)); + } + + var_09 = func_2E63(self.owner,param_01,var_0B,param_05); + switch(param_01) + { + case "nuke_drop": + case "airdrop_mega": + case "airdrop_juggernaut_recon": + case "airdrop_juggernaut": + var_09 linkto(self,"tag_ground",(64,32,-128),(0,0,0)); + break; + + case "airdrop_escort": + case "airdrop_osprey_gunner": + var_09 linkto(self,param_08,(0,0,0),(0,0,0)); + break; + + default: + var_09 linkto(self,"tag_ground",(32,0,5),(0,0,0)); + break; + } + + var_09.angles = (0,0,0); + var_09 show(); + var_0E = self.veh_speed; + thread func_2E6C(var_09,param_06,param_01,var_0B); + return var_0B; +} + +//Function Number: 43 +func_2E6C(param_00,param_01,param_02,param_03) +{ + self waittill("drop_crate"); + param_00 unlink(); + param_00 physicslaunchserver((0,0,0),param_01); + param_00 thread func_2E6D(param_02,param_03); + if(isdefined(param_00.killcament)) + { + param_00.killcament unlink(); + var_04 = bullettrace(param_00.origin,param_00.origin + (0,0,-10000),0,param_00); + var_05 = distance(param_00.origin,var_04["position"]); + var_06 = var_05 / 800; + param_00.killcament moveto(var_04["position"] + (0,0,300),var_06); + } +} + +//Function Number: 44 +func_2E6D(param_00,param_01) +{ + self waittill("physics_finished"); + self thread [[ level.cratefuncs[param_00][param_01] ]](param_00); + level thread droptimeout(self,self.owner,param_01); + var_02 = getentarray("trigger_hurt","classname"); + foreach(var_04 in var_02) + { + if(self.friendlymodel istouching(var_04)) + { + deletecrate(); + return; + } + } + + if(abs(self.origin[2] - level.lowspawn.origin[2]) > 3000) + { + deletecrate(); + } +} + +//Function Number: 45 +droptimeout(param_00,param_01,param_02) +{ + level endon("game_ended"); + param_00 endon("death"); + if(param_00.droptype == "nuke_drop") + { + return; + } + + maps\mp\gametypes\_hostmigration::func_2740(90); + while(param_00.curprogress != 0) + { + wait 1; + } + + param_00 deletecrate(); +} + +//Function Number: 46 +getpathstart(param_00,param_01) +{ + var_02 = 100; + var_03 = 15000; + var_04 = (0,param_01,0); + var_05 = param_00 + anglestoforward(var_04) * -1 * var_03; + var_05 = var_05 + (randomfloat(2) - 1 * var_02,randomfloat(2) - 1 * var_02,0); + return var_05; +} + +//Function Number: 47 +func_2E70(param_00,param_01) +{ + var_02 = 150; + var_03 = 15000; + var_04 = (0,param_01,0); + var_05 = param_00 + anglestoforward(var_04 + (0,90,0)) * var_03; + var_05 = var_05 + (randomfloat(2) - 1 * var_02,randomfloat(2) - 1 * var_02,0); + return var_05; +} + +//Function Number: 48 +getflyheightoffset(param_00) +{ + var_01 = 850; + var_02 = getent("airstrikeheight","targetname"); + if(!isdefined(var_02)) + { + if(isdefined(level.airstrikeheightscale)) + { + if(level.airstrikeheightscale > 2) + { + var_01 = 1500; + return var_01 * level.airstrikeheightscale; + } + + return var_01 * level.airstrikeheightscale + 256 + param_00[2]; + } + + return var_01 + param_00[2]; + } + + return var_02.origin[2]; +} + +//Function Number: 49 +doflyby(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if(!isdefined(param_00)) + { + return; + } + + var_06 = getflyheightoffset(param_01); + if(isdefined(param_04)) + { + var_06 = var_06 + param_04; + } + + foreach(var_08 in level.littlebirds) + { + if(isdefined(var_08.droptype)) + { + var_06 = var_06 + 128; + } + } + + var_0A = param_01 * (1,1,0) + (0,0,var_06); + var_0B = getpathstart(var_0A,param_02); + var_0C = func_2E70(var_0A,param_02); + var_0A = var_0A + anglestoforward((0,param_02,0)) * -50; + var_0D = func_2E7D(param_00,var_0B,var_0A); + var_0D endon("death"); + if(!isdefined(param_05)) + { + param_05 = undefined; + } + + var_0D.droptype = param_03; + var_0D setvehgoalpos(var_0A,1); + var_0D thread dropthecrate(param_01,param_03,var_06,0,param_05,var_0B); + wait 2; + var_0D vehicle_setspeed(75,40); + var_0D setyawspeed(180,180,180,0.3); + var_0D waittill("goal"); + wait 0.1; + var_0D notify("drop_crate"); + var_0D setvehgoalpos(var_0C,1); + var_0D vehicle_setspeed(300,75); + var_0D.leaving = 1; + var_0D waittill("goal"); + var_0D notify("leaving"); + var_0D notify("delete"); + maps\mp\_utility::func_80C8(); + var_0D delete(); +} + +//Function Number: 50 +domegaflyby(param_00,param_01,param_02,param_03) +{ + level thread doflyby(param_00,param_01,param_02,param_03,0); + wait randomintrange(1,2); + level thread doflyby(param_00,param_01 + (128,128,0),param_02,param_03,128); + wait randomintrange(1,2); + level thread doflyby(param_00,param_01 + (172,256,0),param_02,param_03,256); + wait randomintrange(1,2); + level thread doflyby(param_00,param_01 + (64,0,0),param_02,param_03,0); +} + +//Function Number: 51 +doc130flyby(param_00,param_01,param_02,param_03) +{ + var_04 = 18000; + var_05 = 3000; + var_06 = vectortoyaw(param_01 - param_00.origin); + var_07 = (0,var_06,0); + var_08 = getflyheightoffset(param_01); + var_09 = param_01 + anglestoforward(var_07) * -1 * var_04; + var_09 = var_09 * (1,1,0) + (0,0,var_08); + var_0A = param_01 + anglestoforward(var_07) * var_04; + var_0A = var_0A * (1,1,0) + (0,0,var_08); + var_0B = length(var_09 - var_0A); + var_0C = var_0B / var_05; + var_0D = func_2E7B(param_00,var_09,var_0A); + var_0D.veh_speed = var_05; + var_0D.droptype = param_03; + var_0D playloopsound("veh_ac130_dist_loop"); + var_0D.angles = var_07; + var_0E = anglestoforward(var_07); + var_0D moveto(var_0A,var_0C,0,0); + var_0F = distance2d(var_0D.origin,param_01); + var_10 = 0; + for(;;) + { + var_11 = distance2d(var_0D.origin,param_01); + if(var_11 < var_0F) + { + var_0F = var_11; + } + else if(var_11 > var_0F) + { + break; + } + + if(var_11 < 320) + { + break; + } + else if(var_11 < 768) + { + earthquake(0.15,1.5,param_01,1500); + if(!var_10) + { + var_0D playsound("veh_ac130_sonic_boom"); + var_10 = 1; + } + } + + wait 0.05; + } + + wait 0.05; + var_12 = (0.25,0,0); + var_13[0] = var_0D thread dropthecrate(param_01,param_03,var_08,0,undefined,var_09,var_12); + wait 0.05; + var_0D notify("drop_crate"); + var_14 = param_01 + anglestoforward(var_07) * var_04 * 1.5; + var_0D moveto(var_14,var_0C / 2,0,0); + wait 6; + var_0D delete(); +} + +//Function Number: 52 +func_2E77(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = 24000; + var_06 = 2000; + var_07 = vectortoyaw(param_01 - param_00.origin); + var_08 = (0,var_07,0); + var_09 = anglestoforward(var_08); + if(isdefined(param_04)) + { + param_01 = param_01 + var_09 * param_04; + } + + var_0A = getflyheightoffset(param_01); + var_0B = param_01 + anglestoforward(var_08) * -1 * var_05; + var_0B = var_0B * (1,1,0) + (0,0,var_0A); + var_0C = param_01 + anglestoforward(var_08) * var_05; + var_0C = var_0C * (1,1,0) + (0,0,var_0A); + var_0D = length(var_0B - var_0C); + var_0E = var_0D / var_06; + var_0F = func_2E7B(param_00,var_0B,var_0C); + var_0F.veh_speed = var_06; + var_0F.droptype = param_03; + var_0F playloopsound("veh_ac130_dist_loop"); + var_0F.angles = var_08; + var_09 = anglestoforward(var_08); + var_0F moveto(var_0C,var_0E,0,0); + var_10 = distance2d(var_0F.origin,param_01); + var_11 = 0; + for(;;) + { + var_12 = distance2d(var_0F.origin,param_01); + if(var_12 < var_10) + { + var_10 = var_12; + } + else if(var_12 > var_10) + { + break; + } + + if(var_12 < 256) + { + break; + } + else if(var_12 < 768) + { + earthquake(0.15,1.5,param_01,1500); + if(!var_11) + { + var_0F playsound("veh_ac130_sonic_boom"); + var_11 = 1; + } + } + + wait 0.05; + } + + wait 0.05; + var_13[0] = var_0F thread dropthecrate(param_01,param_03,var_0A,0,undefined,var_0B); + wait 0.05; + var_0F notify("drop_crate"); + wait 0.05; + wait 0.05; + var_10 notify("drop_crate",var_41[1],var_0F thread dropthecrate(param_01,param_03,var_0A,0,undefined,var_0B,undefined,var_13)); + wait 0.05; + wait 0.05; + var_10 notify("drop_crate",var_41[2],var_10 thread dropthecrate(param_02,param_04,var_0B,0,undefined,var_0C,undefined,var_41)); + wait 0.05; + wait 0.05; + var_10 notify("drop_crate",var_41[3],var_10 thread dropthecrate(param_02,param_04,var_0B,0,undefined,var_0C,undefined,var_41)); + wait 4; + var_10 delete(); +} + +//Function Number: 53 +func_2E78(param_00,param_01,param_02) +{ + var_03 = 24000; + var_04 = 2000; + var_05 = randomint(360); + var_06 = (0,var_05,0); + var_07 = getflyheightoffset(param_00); + var_08 = param_00 + anglestoforward(var_06) * -1 * var_03; + var_08 = var_08 * (1,1,0) + (0,0,var_07); + var_09 = param_00 + anglestoforward(var_06) * var_03; + var_09 = var_09 * (1,1,0) + (0,0,var_07); + var_0A = length(var_08 - var_09); + var_0B = var_0A / var_04; + var_0C = func_2E7B(param_01,var_08,var_09); + var_0C.veh_speed = var_04; + var_0C.droptype = param_02; + var_0C playloopsound("veh_ac130_dist_loop"); + var_0C.angles = var_06; + var_0D = anglestoforward(var_06); + var_0C moveto(var_09,var_0B,0,0); + var_0E = 0; + var_0F = distance2d(var_0C.origin,param_00); + for(;;) + { + var_10 = distance2d(var_0C.origin,param_00); + if(var_10 < var_0F) + { + var_0F = var_10; + } + else if(var_10 > var_0F) + { + break; + } + + if(var_10 < 256) + { + break; + } + else if(var_10 < 768) + { + earthquake(0.15,1.5,param_00,1500); + if(!var_0E) + { + var_0C playsound("veh_ac130_sonic_boom"); + var_0E = 1; + } + } + + wait 0.05; + } + + var_0C thread dropthecrate(param_00,param_02,var_07,0,"nuke",var_08); + wait 0.05; + var_0C notify("drop_crate"); + wait 4; + var_0C delete(); +} + +//Function Number: 54 +stoploopafter(param_00) +{ + self endon("death"); + wait param_00; + self stoploopsound(); +} + +//Function Number: 55 +playlooponent(param_00) +{ + var_01 = spawn("script_origin",(0,0,0)); + var_01 hide(); + var_01 endon("death"); + thread common_scripts\utility::delete_on_death(var_01); + var_01.origin = self.origin; + var_01.angles = self.angles; + var_01 linkto(self); + var_01 playloopsound(param_00); + self waittill("stop sound" + param_00); + var_01 stoploopsound(param_00); + var_01 delete(); +} + +//Function Number: 56 +func_2E7B(param_00,param_01,param_02) +{ + var_03 = vectortoangles(param_02 - param_01); + var_04 = spawnplane(param_00,"script_model",param_01,"compass_objpoint_c130_friendly","compass_objpoint_c130_enemy"); + var_04 setmodel("vehicle_ac130_low_mp"); + if(!isdefined(var_04)) + { + return; + } + + var_04.owner = param_00; + var_04.team = param_00.team; + level.c130 = var_04; + return var_04; +} + +//Function Number: 57 +func_2E7D(param_00,param_01,param_02) +{ + var_03 = vectortoangles(param_02 - param_01); + var_04 = spawnhelicopter(param_00,param_01,var_03,"littlebird_mp","vehicle_little_bird_armed"); + if(!isdefined(var_04)) + { + return; + } + + var_04 maps\mp\killstreaks\_helicopter::func_2C4A(); + var_04 thread maps\mp\killstreaks\_helicopter::func_2C4B(); + var_04.health = 999999; + var_04.maxhealth = 500; + var_04.damagetaken = 0; + var_04 setcandamage(1); + var_04.owner = param_00; + var_04.team = param_00.team; + var_04.isairdrop = 1; + var_04 thread watchtimeout(); + var_04 thread heli_existence(); + var_04 thread func_2E83(); + var_04 thread heli_handledamage(); + var_04 setmaxpitchroll(45,85); + var_04 vehicle_setspeed(250,175); + var_04.helitype = "airdrop"; + var_04.specialdamagecallback = ::callback_vehicledamage; + return var_04; +} + +//Function Number: 58 +watchtimeout() +{ + level endon("game_ended"); + self endon("leaving"); + self endon("helicopter_gone"); + self endon("death"); + maps\mp\gametypes\_hostmigration::func_2740(25); + self notify("death"); +} + +//Function Number: 59 +heli_existence() +{ + common_scripts\utility::waittill_any("crashing","leaving"); + self notify("helicopter_gone"); +} + +//Function Number: 60 +heli_handledamage() +{ + self endon("death"); + level endon("game_ended"); + for(;;) + { + self waittill("damage",var_00,var_01,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09); + if(isdefined(self.specialdamagecallback)) + { + self [[ self.specialdamagecallback ]](undefined,var_01,var_00,var_08,var_04,var_09,var_03,var_02,undefined,undefined,var_05,var_07); + } + } +} + +//Function Number: 61 +callback_vehicledamage(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A,param_0B) +{ + if(isdefined(self.alreadydead) && self.alreadydead) + { + return; + } + + if(!isdefined(param_01) || param_01 == self) + { + return; + } + + if(!maps\mp\gametypes\_weapons::func_27A1(self.owner,param_01)) + { + return; + } + + if(isdefined(param_03) && param_03 & level.idflags_penetration) + { + self.wasdamagedfrombulletpenetration = 1; + } + + self.wasdamaged = 1; + var_0C = param_02; + if(isplayer(param_01)) + { + param_01 maps\mp\gametypes\_damagefeedback::updatedamagefeedback("helicopter"); + if(param_04 == "MOD_RIFLE_BULLET" || param_04 == "MOD_PISTOL_BULLET") + { + if(param_01 maps\mp\_utility::func_27AF("specialty_armorpiercing")) + { + var_0C = var_0C + param_02 * level.armorpiercingmod; + } + } + } + + if(isdefined(param_01.owner) && isplayer(param_01.owner)) + { + param_01.owner maps\mp\gametypes\_damagefeedback::updatedamagefeedback("helicopter"); + } + + if(isdefined(param_05)) + { + switch(param_05) + { + case "remote_mortar_missile_mp": + case "javelin_mp": + case "stinger_mp": + case "remotemissile_projectile_mp": + case "ac130_40mm_mp": + case "ac130_105mm_mp": + self.largeprojectiledamage = 1; + var_0C = self.maxhealth + 1; + break; + + case "sam_projectile_mp": + self.largeprojectiledamage = 1; + var_0C = self.maxhealth * 0.5; + break; + + case "emp_grenade_mp": + self.largeprojectiledamage = 0; + var_0C = self.maxhealth + 1; + break; + } + + maps\mp\killstreaks\_killstreaks::killstreakhit(param_01,param_05,self); + } + + self.damagetaken = self.damagetaken + var_0C; + if(self.damagetaken >= self.maxhealth) + { + if(isplayer(param_01) && !isdefined(self.owner) || param_01 != self.owner) + { + self.alreadydead = 1; + param_01 notify("destroyed_helicopter"); + param_01 notify("destroyed_killstreak",param_05); + thread maps\mp\_utility::teamplayercardsplash("callout_destroyed_helicopter",param_01); + param_01 thread maps\mp\gametypes\_rank::func_2AB3("kill",300,param_05,param_04); + param_01 thread maps\mp\gametypes\_rank::xpeventpopup(&"SPLASHES_DESTROYED_HELICOPTER"); + thread maps\mp\gametypes\_missions::vehiclekilled(self.owner,self,undefined,param_01,param_02,param_04,param_05); + } + + self notify("death"); + } +} + +//Function Number: 62 +func_2E83() +{ + self endon("leaving"); + self endon("helicopter_gone"); + self waittill("death"); + if(!isdefined(self)) + { + return; + } + + self vehicle_setspeed(25,5); + thread func_2E85(randomintrange(180,220)); + wait randomfloatrange(0.5,1.5); + self notify("drop_crate"); + func_2E84(); +} + +//Function Number: 63 +func_2E84() +{ + var_00 = self.origin + (0,0,1) - self.origin; + playfx(level.chopper_fx["explode"]["death"]["cobra"],self.origin,var_00); + self playsound("cobra_helicopter_crash"); + self notify("explode"); + maps\mp\_utility::func_80C8(); + self delete(); +} + +//Function Number: 64 +func_2E85(param_00) +{ + self endon("explode"); + playfxontag(level.chopper_fx["explode"]["medium"],self,"tail_rotor_jnt"); + playfxontag(level.chopper_fx["fire"]["trail"]["medium"],self,"tail_rotor_jnt"); + self setyawspeed(param_00,param_00,param_00); + while(isdefined(self)) + { + self settargetyaw(self.angles[1] + param_00 * 0.9); + wait 1; + } +} + +//Function Number: 65 +nukecapturethink() +{ + while(isdefined(self)) + { + self waittill("trigger",var_00); + if(!var_00 isonground()) + { + continue; + } + + if(!func_2A04(var_00)) + { + continue; + } + + self notify("captured",var_00); + } +} + +//Function Number: 66 +crateothercapturethink(param_00) +{ + while(isdefined(self)) + { + self waittill("trigger",var_01); + if(isdefined(self.owner) && var_01 == self.owner) + { + continue; + } + + if(!func_2E8A(var_01)) + { + continue; + } + + var_01.iscapturingcrate = 1; + var_02 = func_2EA0(); + var_03 = var_02 func_2A04(var_01,undefined,param_00); + if(isdefined(var_02)) + { + var_02 delete(); + } + + if(!var_03) + { + var_01.iscapturingcrate = 0; + continue; + } + + var_01.iscapturingcrate = 0; + self notify("captured",var_01); + } +} + +//Function Number: 67 +func_2E89(param_00) +{ + while(isdefined(self)) + { + self waittill("trigger",var_01); + if(isdefined(self.owner) && var_01 != self.owner) + { + continue; + } + + if(!func_2E8A(var_01)) + { + continue; + } + + var_01.iscapturingcrate = 1; + if(!func_2A04(var_01,500,param_00)) + { + var_01.iscapturingcrate = 0; + continue; + } + + var_01.iscapturingcrate = 0; + self notify("captured",var_01); + } +} + +//Function Number: 68 +func_2E8A(param_00) +{ + if((self.cratetype == "airdrop_juggernaut_def" || self.cratetype == "airdrop_juggernaut") && param_00 maps\mp\_utility::isjuggernaut()) + { + return 0; + } + + var_01 = param_00 getcurrentweapon(); + if(maps\mp\_utility::func_2829(var_01) && !issubstr(var_01,"jugg_mp")) + { + return 0; + } + + if(isdefined(param_00.changingweapon) && maps\mp\_utility::func_2829(param_00.changingweapon) && !issubstr(param_00.changingweapon,"jugg_mp")) + { + return 0; + } + + return 1; +} + +//Function Number: 69 +func_2E8B(param_00) +{ + self endon("death"); + if(isdefined(game["strings"][self.cratetype + "_hint"])) + { + var_01 = game["strings"][self.cratetype + "_hint"]; + } + else + { + var_01 = &"PLATFORM_GET_KILLSTREAK"; + } + + cratesetupforuse(var_01,"all",maps\mp\killstreaks\_killstreaks::getkillstreakcrateicon(self.cratetype)); + thread crateothercapturethink(); + thread func_2E89(); + for(;;) + { + self waittill("captured",var_02); + if(isdefined(self.owner) && var_02 != self.owner) + { + if(!level.teambased || var_02.team != self.team) + { + switch(param_00) + { + case "airdrop_escort": + case "airdrop_osprey_gunner": + case "airdrop_support": + case "airdrop_assault": + var_02 thread maps\mp\gametypes\_missions::genericchallenge("hijacker_airdrop"); + var_02 thread hijacknotify(self,"airdrop"); + break; + + case "airdrop_sentry_minigun": + var_02 thread maps\mp\gametypes\_missions::genericchallenge("hijacker_airdrop"); + var_02 thread hijacknotify(self,"sentry"); + break; + + case "airdrop_remote_tank": + var_02 thread maps\mp\gametypes\_missions::genericchallenge("hijacker_airdrop"); + var_02 thread hijacknotify(self,"remote_tank"); + break; + + case "airdrop_mega": + var_02 thread maps\mp\gametypes\_missions::genericchallenge("hijacker_airdrop_mega"); + var_02 thread hijacknotify(self,"emergency_airdrop"); + break; + } + } + else + { + self.owner thread maps\mp\gametypes\_rank::func_2AB3("killstreak_giveaway",int(maps\mp\killstreaks\_killstreaks::getstreakcost(self.cratetype) / 10 * 50)); + self.owner thread maps\mp\gametypes\_hud_message::func_2701("sharepackage",int(maps\mp\killstreaks\_killstreaks::getstreakcost(self.cratetype) / 10 * 50)); + } + } + + var_02 playlocalsound("ammo_crate_use"); + var_02 thread maps\mp\killstreaks\_killstreaks::givekillstreak(self.cratetype,0,0,self.owner); + deletecrate(); + } +} + +//Function Number: 70 +nukecratethink(param_00) +{ + self endon("death"); + cratesetupforuse(&"PLATFORM_CALL_NUKE","nukeDrop",maps\mp\killstreaks\_killstreaks::getkillstreakcrateicon(self.cratetype)); + thread nukecapturethink(); + for(;;) + { + self waittill("captured",var_01); + var_01 thread [[ level.killstreakfuncs[self.cratetype] ]](level.gtnw); + level notify("nukeCaptured",var_01); + if(isdefined(level.gtnw) && level.gtnw) + { + var_01.capturednuke = 1; + } + + var_01 playlocalsound("ammo_crate_use"); + deletecrate(); + } +} + +//Function Number: 71 +func_2E91(param_00) +{ + self endon("death"); + cratesetupforuse(game["strings"]["trophy_hint"],"all",maps\mp\killstreaks\_killstreaks::getkillstreakcrateicon(self.cratetype)); + thread crateothercapturethink(); + thread func_2E89(); + for(;;) + { + self waittill("captured",var_01); + if(isdefined(self.owner) && var_01 != self.owner) + { + if(!level.teambased || var_01.team != self.team) + { + var_01 thread hijacknotify(self,"trophy"); + } + else + { + self.owner thread maps\mp\gametypes\_rank::func_2AB3("killstreak_giveaway",int(maps\mp\killstreaks\_killstreaks::getstreakcost("airdrop_trophy") / 10) * 50); + self.owner maps\mp\gametypes\_hud_message::playercardsplashnotify("giveaway_trophy",var_01); + } + } + + var_01 playlocalsound("ammo_crate_use"); + var_01 thread func_2E9A(param_00); + deletecrate(); + } +} + +//Function Number: 72 +juggernautcratethink(param_00) +{ + self endon("death"); + cratesetupforuse(game["strings"]["juggernaut_hint"],"all",maps\mp\killstreaks\_killstreaks::getkillstreakcrateicon(self.cratetype)); + thread crateothercapturethink(); + thread func_2E89(); + for(;;) + { + self waittill("captured",var_01); + if(isdefined(self.owner) && var_01 != self.owner) + { + if(!level.teambased || var_01.team != self.team) + { + var_01 thread hijacknotify(self,"juggernaut"); + } + else + { + self.owner thread maps\mp\gametypes\_rank::func_2AB3("killstreak_giveaway",int(maps\mp\killstreaks\_killstreaks::getstreakcost(self.cratetype) / 10) * 50); + self.owner maps\mp\gametypes\_hud_message::playercardsplashnotify("giveaway_juggernaut",var_01); + } + } + + var_01 playlocalsound("ammo_crate_use"); + var_02 = "juggernaut"; + switch(self.cratetype) + { + case "airdrop_juggernaut": + var_02 = "juggernaut"; + break; + + case "airdrop_juggernaut_recon": + var_02 = "juggernaut_recon"; + break; + } + + var_01 thread maps\mp\killstreaks\_juggernaut::func_2DD1(var_02); + deletecrate(); + } +} + +//Function Number: 73 +func_2E93(param_00) +{ + self endon("death"); + cratesetupforuse(game["strings"]["sentry_hint"],"all",maps\mp\killstreaks\_killstreaks::getkillstreakcrateicon(self.cratetype)); + thread crateothercapturethink(); + thread func_2E89(); + for(;;) + { + self waittill("captured",var_01); + if(isdefined(self.owner) && var_01 != self.owner) + { + if(!level.teambased || var_01.team != self.team) + { + if(issubstr(param_00,"airdrop_sentry")) + { + var_01 thread hijacknotify(self,"sentry"); + } + else + { + var_01 thread hijacknotify(self,"emergency_airdrop"); + } + } + else + { + self.owner thread maps\mp\gametypes\_rank::func_2AB3("killstreak_giveaway",int(maps\mp\killstreaks\_killstreaks::getstreakcost("sentry") / 10) * 50); + self.owner maps\mp\gametypes\_hud_message::playercardsplashnotify("giveaway_sentry",var_01); + } + } + + var_01 playlocalsound("ammo_crate_use"); + var_01 thread func_2E99(); + deletecrate(); + } +} + +//Function Number: 74 +func_2E94() +{ +} + +//Function Number: 75 +func_2E95(param_00) +{ + self endon("death"); + var_01 = getrandomcratetype("airdrop_trapcontents"); + cratesetupforuse(game["strings"][var_01 + "_hint"],"trap","none"); + self.bomb = spawn("script_model",self.origin); + var_02 = bullettrace(self.bomb.origin,self.bomb.origin + (100,100,128),0,self.bomb); + self.bomb.killcament = spawn("script_model",var_02["position"]); + self.bomb.killcament setscriptmoverkillcam("explosive"); + thread crateothercapturethink(); + for(;;) + { + self waittill("captured",var_03); + var_03 thread detonatetrap(self.bomb,self,self.owner); + } +} + +//Function Number: 76 +detonatetrap(param_00,param_01,param_02) +{ + param_01 endon("death"); + param_00 rotatevelocity((0,300,0),3); + param_00 setmodel("prop_suitcase_bomb"); + var_03 = param_01.origin; + thread common_scripts\utility::play_sound_in_space("boobytrap_crate_lock",var_03); + wait 1; + var_04 = var_03 + (0,0,1) - var_03; + playfx(level.chopper_fx["explode"]["death"]["cobra"],var_03,var_04); + thread common_scripts\utility::play_sound_in_space("cobra_helicopter_crash",var_03); + if(isdefined(param_02)) + { + param_00 radiusdamage(var_03,400,200,50,param_02,"MOD_EXPLOSIVE","airdrop_trap_explosive_mp"); + } + else + { + param_00 radiusdamage(var_03,400,200,50,undefined,"MOD_EXPLOSIVE","airdrop_trap_explosive_mp"); + } + + param_01 deletecrate(); +} + +//Function Number: 77 +deletecrate() +{ + if(isdefined(self.objidfriendly)) + { + maps\mp\_utility::_objective_delete(self.objidfriendly); + } + + if(isdefined(self.objidenemy)) + { + maps\mp\_utility::_objective_delete(self.objidenemy); + } + + if(isdefined(self.bomb) && isdefined(self.bomb.killcament)) + { + self.bomb.killcament delete(); + } + + if(isdefined(self.bomb)) + { + self.bomb delete(); + } + + if(isdefined(self.killcament)) + { + self.killcament delete(); + } + + self delete(); +} + +//Function Number: 78 +func_2E99() +{ + if(!maps\mp\killstreaks\_autosentry::func_2DF2("sentry_minigun")) + { + maps\mp\killstreaks\_killstreaks::givekillstreak("sentry"); + } +} + +//Function Number: 79 +func_2E9A(param_00) +{ + self.activetrophy = 1; + self.trophyammo = 6; + thread func_2EA3(); +} + +//Function Number: 80 +hijacknotify(param_00,param_01) +{ + self notify("hijacker",param_01,param_00.owner); +} + +//Function Number: 81 +func_2E9E(param_00) +{ + var_01 = self getweaponslistall(); + if(param_00) + { + if(maps\mp\_utility::func_27AF("specialty_tacticalinsertion") && self getammocount("flare_mp") < 1) + { + maps\mp\_utility::giveperk("specialty_tacticalinsertion",0); + } + + if(maps\mp\_utility::func_27AF("specialty_scrambler") && self getammocount("scrambler_mp") < 1) + { + maps\mp\_utility::giveperk("specialty_scrambler",0); + } + + if(maps\mp\_utility::func_27AF("specialty_portable_radar") && self getammocount("portable_radar_mp") < 1) + { + maps\mp\_utility::giveperk("specialty_portable_radar",0); + } + } + + foreach(var_03 in var_01) + { + if(issubstr(var_03,"grenade") || getsubstr(var_03,0,2) == "gl") + { + if(!param_00 || self getammocount(var_03) >= 1) + { + continue; + } + } + + self givemaxammo(var_03); + } +} + +//Function Number: 82 +func_2A04(param_00,param_01,param_02) +{ + param_00 playerlinkto(self); + param_00 playerlinkedoffsetenable(); + param_00 common_scripts\utility::_disableweapon(); + self.curprogress = 0; + self.inuse = 1; + self.userate = 0; + if(isdefined(param_01)) + { + self.usetime = param_01; + } + else + { + self.usetime = 3000; + } + + param_00 thread personalusebar(self,param_02); + var_03 = func_2A08(param_00); + if(isalive(param_00)) + { + param_00 common_scripts\utility::_enableweapon(); + param_00 unlink(); + } + + if(!isdefined(self)) + { + return 0; + } + + self.inuse = 0; + self.curprogress = 0; + return var_03; +} + +//Function Number: 83 +personalusebar(param_00,param_01) +{ + self endon("disconnect"); + var_02 = maps\mp\gametypes\_hud_util::createprimaryprogressbar(0,25); + var_03 = maps\mp\gametypes\_hud_util::createprimaryprogressbartext(0,25); + if(!isdefined(param_01)) + { + param_01 = &"MP_CAPTURING_CRATE"; + } + + var_03 settext(param_01); + var_04 = -1; + while(maps\mp\_utility::isreallyalive(self) && isdefined(param_00) && param_00.inuse && !level.gameended) + { + if(var_04 != param_00.userate) + { + if(param_00.curprogress > param_00.usetime) + { + param_00.curprogress = param_00.usetime; + } + + var_02 maps\mp\gametypes\_hud_util::updatebar(param_00.curprogress / param_00.usetime,1000 / param_00.usetime * param_00.userate); + if(!param_00.userate) + { + var_02 maps\mp\gametypes\_hud_util::hideelem(); + var_03 maps\mp\gametypes\_hud_util::hideelem(); + } + else + { + var_02 maps\mp\gametypes\_hud_util::func_26BD(); + var_03 maps\mp\gametypes\_hud_util::func_26BD(); + } + } + + var_04 = param_00.userate; + wait 0.05; + } + + var_02 maps\mp\gametypes\_hud_util::destroyelem(); + var_03 maps\mp\gametypes\_hud_util::destroyelem(); +} + +//Function Number: 84 +func_2A08(param_00) +{ + while(!level.gameended && isdefined(self) && maps\mp\_utility::isreallyalive(param_00) && param_00 usebuttonpressed() && self.curprogress < self.usetime) + { + self.curprogress = self.curprogress + 50 * self.userate; + if(isdefined(self.objectivescaler)) + { + self.userate = 1 * self.objectivescaler; + } + else + { + self.userate = 1; + } + + if(self.curprogress >= self.usetime) + { + return maps\mp\_utility::isreallyalive(param_00); + } + + wait 0.05; + } + + return 0; +} + +//Function Number: 85 +func_2E9F(param_00) +{ + switch(param_00) + { + case "airdrop_escort_marker_mp": + case "airdrop_trap_marker_mp": + case "airdrop_tank_marker_mp": + case "airdrop_juggernaut_def_mp": + case "airdrop_juggernaut_mp": + case "airdrop_sentry_marker_mp": + case "airdrop_mega_marker_mp": + case "airdrop_marker_mp": + return 1; + + default: + return 0; + } +} + +//Function Number: 86 +func_2EA0() +{ + var_00 = spawn("script_origin",self.origin); + var_00.curprogress = 0; + var_00.usetime = 0; + var_00.userate = 3000; + var_00.inuse = 0; + var_00 thread deleteuseent(self); + return var_00; +} + +//Function Number: 87 +deleteuseent(param_00) +{ + self endon("death"); + param_00 waittill("death"); + self delete(); +} + +//Function Number: 88 +airdropdetonateonstuck() +{ + self endon("death"); + self waittill("missile_stuck"); + self detonate(); +} + +//Function Number: 89 +projectileexplode(param_00) +{ + self endon("death"); + var_01 = param_00.origin; + var_02 = param_00.model; + var_03 = param_00.angles; + param_00 delete(); + playfx(level.mine_explode,var_01,anglestoforward(var_03),anglestoup(var_03)); + radiusdamage(var_01,65,75,10,self); +} + +//Function Number: 90 +func_2EA3() +{ + self endon("disconnect"); + self endon("death"); + var_00 = self.origin; + for(;;) + { + if(!isdefined(level.grenades) || level.grenades.size < 1) + { + wait 0.05; + continue; + } + + var_01 = maps\mp\_utility::func_279B(level.grenades,level.missiles); + foreach(var_03 in var_01) + { + wait 0.05; + if(!isdefined(var_03)) + { + continue; + } + + if(var_03 == self) + { + continue; + } + + if(isdefined(var_03.weaponname) && var_03.weaponname == "trophy_mp") + { + continue; + } + + if(var_03.model == "weapon_parabolic_knife") + { + continue; + } + + if(!isdefined(var_03.owner)) + { + var_03.owner = getmissileowner(var_03); + } + + if(isdefined(var_03.owner) && level.teambased && var_03.owner.team == self.team) + { + continue; + } + + var_04 = distancesquared(var_03.origin,self.origin); + if(var_04 < 147456) + { + if(bullettracepassed(var_03.origin,self.origin,0,self)) + { + playfx(level.sentry_fire,self.origin + (0,0,32),var_03.origin - self.origin,anglestoup(self.angles)); + thread projectileexplode(var_03); + self.trophyammo--; + if(self.trophyammo <= 0) + { + return; + } + } + } + } + } +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/killstreaks/_airstrike.gsc b/MW3/Xbox/MP/maps/mp/killstreaks/_airstrike.gsc new file mode 100644 index 0000000..b16d3f8 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/killstreaks/_airstrike.gsc @@ -0,0 +1,1017 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\killstreaks\_airstrike.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 40 + * Decompile Time: 592 ms + * Timestamp: 10/27/2023 2:26:42 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + precachelocationselector("map_artillery_selector"); + precachestring(&"KILLSTREAKS_PRECISION_AIRSTRIKE"); + precachestring(&"KILLSTREAKS_STEALTH_AIRSTRIKE"); + precachestring(&"KILLSTREAKS_HARRIER_AIRSTRIKE"); + precacheitem("stealth_bomb_mp"); + precacheitem("artillery_mp"); + precacheitem("harrier_missile_mp"); + precachemodel("vehicle_av8b_harrier_jet_mp"); + precachemodel("vehicle_av8b_harrier_jet_opfor_mp"); + precachemodel("weapon_minigun"); + precachemodel("vehicle_b2_bomber"); + precachevehicle("harrier_mp"); + precacheturret("harrier_FFAR_mp"); + precacheminimapicon("compass_objpoint_airstrike_friendly"); + precacheminimapicon("compass_objpoint_airstrike_busy"); + precacheminimapicon("compass_objpoint_b2_airstrike_friendly"); + precacheminimapicon("compass_objpoint_b2_airstrike_enemy"); + precacheminimapicon("hud_minimap_harrier_green"); + precacheminimapicon("hud_minimap_harrier_red"); + level.onfirefx = loadfx("fire/fire_smoke_trail_L"); + level.airstrikefx = loadfx("explosions/clusterbomb"); + level.var_80F7 = loadfx("explosions/clusterbomb_no_fount"); + level.airstrikessfx = loadfx("explosions/clusterbomb_exp_direct_runner"); + level.mortareffect = loadfx("explosions/clusterbomb_exp_direct_runner_stealth"); + level.bombstrike = loadfx("explosions/wall_explosion_pm_a"); + level.stealthbombfx = loadfx("explosions/stealth_bomb_mp"); + level.airplane = []; + level.harriers = []; + level.planes = 0; + level.harrier_smoke = loadfx("fire/jet_afterburner_harrier_damaged"); + level.harrier_deathfx = loadfx("explosions/aerial_explosion_harrier"); + level.harrier_afterburnerfx = loadfx("fire/jet_afterburner_harrier"); + level.fx_airstrike_afterburner = loadfx("fire/jet_afterburner"); + level.fx_airstrike_contrail = loadfx("smoke/jet_contrail"); + level.dangermaxradius["stealth_airstrike"] = 900; + level.dangerminradius["stealth_airstrike"] = 750; + level.dangerforwardpush["stealth_airstrike"] = 1; + level.dangerovalscale["stealth_airstrike"] = 6; + level.dangermaxradius["airstrike"] = 550; + level.dangerminradius["airstrike"] = 300; + level.dangerforwardpush["airstrike"] = 1.5; + level.dangerovalscale["airstrike"] = 6; + level.dangermaxradius["precision_airstrike"] = 550; + level.dangerminradius["precision_airstrike"] = 300; + level.dangerforwardpush["precision_airstrike"] = 2; + level.dangerovalscale["precision_airstrike"] = 6; + level.dangermaxradius["harrier_airstrike"] = 550; + level.dangerminradius["harrier_airstrike"] = 300; + level.dangerforwardpush["harrier_airstrike"] = 1.5; + level.dangerovalscale["harrier_airstrike"] = 6; + level.artillerydangercenters = []; + level.killstreakfuncs["airstrike"] = ::func_2FA5; + level.killstreakfuncs["precision_airstrike"] = ::func_2FA6; + level.killstreakfuncs["super_airstrike"] = ::func_2FA7; + level.killstreakfuncs["harrier_airstrike"] = ::tryuseharrierairstrike; + level.killstreakfuncs["stealth_airstrike"] = ::func_2FA9; + level.planes = []; +} + +//Function Number: 2 +func_2FA5(param_00) +{ + return func_2FAA(param_00,"airstrike"); +} + +//Function Number: 3 +func_2FA6(param_00) +{ + return func_2FAA(param_00,"precision_airstrike"); +} + +//Function Number: 4 +func_2FA7(param_00) +{ + return func_2FAA(param_00,"super_airstrike"); +} + +//Function Number: 5 +tryuseharrierairstrike(param_00) +{ + return func_2FAA(param_00,"harrier_airstrike"); +} + +//Function Number: 6 +func_2FA9(param_00) +{ + return func_2FAA(param_00,"stealth_airstrike"); +} + +//Function Number: 7 +func_2FAA(param_00,param_01) +{ + if(!maps\mp\_utility::func_2DF3()) + { + return 0; + } + + if(isdefined(level.civilianjetflyby)) + { + self iprintlnbold(&"MP_CIVILIAN_AIR_TRAFFIC"); + return 0; + } + + if(maps\mp\_utility::isusingremote()) + { + return 0; + } + + switch(param_01) + { + case "precision_airstrike": + break; + + case "stealth_airstrike": + break; + + case "harrier_airstrike": + if(level.planes > 1) + { + self iprintlnbold(&"MP_AIR_SPACE_TOO_CROWDED"); + return 0; + } + break; + + case "super_airstrike": + break; + } + + var_02 = func_2FC8(param_00,param_01); + if(!isdefined(var_02) || !var_02) + { + return 0; + } + + return 1; +} + +//Function Number: 8 +func_2ED4(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if(param_05 == "harrier_airstrike") + { + level.planes++; + } + + if(isdefined(level.airstrikeinprogress)) + { + while(isdefined(level.airstrikeinprogress)) + { + level waittill("begin_airstrike"); + } + + level.airstrikeinprogress = 1; + wait 2; + } + + if(!isdefined(param_03)) + { + if(param_05 == "harrier_airstrike") + { + level.planes--; + } + + return; + } + + level.airstrikeinprogress = 1; + var_06 = 17 + randomint(3); + var_07 = bullettrace(param_01,param_01 + (0,0,-1000000),0,undefined); + var_08 = var_07["position"]; + var_09 = spawnstruct(); + var_09.origin = var_08; + var_09.forward = anglestoforward((0,param_02,0)); + var_09.streakname = param_05; + level.artillerydangercenters[level.artillerydangercenters.size] = var_09; + var_0A = callstrike(param_00,param_03,var_08,param_02,param_05); + wait 1; + level.airstrikeinprogress = undefined; + param_03 notify("begin_airstrike"); + level notify("begin_airstrike"); + wait 7.5; + var_0B = 0; + var_0C = []; + for(var_0D = 0;var_0D < level.artillerydangercenters.size;var_0D++) + { + if(!var_0B && level.artillerydangercenters[var_0D].origin == var_08) + { + var_0B = 1; + continue; + } + + var_0C[var_0C.size] = level.artillerydangercenters[var_0D]; + } + + level.artillerydangercenters = var_0C; + if(param_05 != "harrier_airstrike") + { + return; + } + + while(isdefined(var_0A)) + { + wait 0.1; + } + + level.planes--; +} + +//Function Number: 9 +func_2FAB(param_00) +{ + wait 2; + level.airstrikeinprogress = undefined; +} + +//Function Number: 10 +getairstrikedanger(param_00) +{ + var_01 = 0; + for(var_02 = 0;var_02 < level.artillerydangercenters.size;var_02++) + { + var_03 = level.artillerydangercenters[var_02].origin; + var_04 = level.artillerydangercenters[var_02].forward; + var_05 = level.artillerydangercenters[var_02].streakname; + var_01 = var_01 + getsingleairstrikedanger(param_00,var_03,var_04,var_05); + } + + return var_01; +} + +//Function Number: 11 +getsingleairstrikedanger(param_00,param_01,param_02,param_03) +{ + var_04 = param_01 + level.dangerforwardpush[param_03] * level.dangermaxradius[param_03] * param_02; + var_05 = param_00 - var_04; + var_05 = (var_05[0],var_05[1],0); + var_06 = vectordot(var_05,param_02) * param_02; + var_07 = var_05 - var_06; + var_08 = var_07 + var_06 / level.dangerovalscale[param_03]; + var_09 = lengthsquared(var_08); + if(var_09 > level.dangermaxradius[param_03] * level.dangermaxradius[param_03]) + { + return 0; + } + + if(var_09 < level.dangerminradius[param_03] * level.dangerminradius[param_03]) + { + return 1; + } + + var_0A = sqrt(var_09); + var_0B = var_0A - level.dangerminradius[param_03] / level.dangermaxradius[param_03] - level.dangerminradius[param_03]; + return 1 - var_0B; +} + +//Function Number: 12 +pointisinairstrikearea(param_00,param_01,param_02,param_03) +{ + return distance2d(param_00,param_01) <= level.dangermaxradius[param_03] * 1.25; +} + +//Function Number: 13 +func_2FAF(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + var_07 = maps\mp\gametypes\_weapons::func_17BE(param_00,param_01,1); + glassradiusdamage(param_00,param_01,param_02,param_03); + for(var_08 = 0;var_08 < var_07.size;var_08++) + { + if(var_07[var_08].entity == self) + { + continue; + } + + var_09 = distance(param_00,var_07[var_08].damagecenter); + if(var_07[var_08].isplayer || isdefined(var_07[var_08].issentry) && var_07[var_08].issentry) + { + var_0A = !bullettracepassed(var_07[var_08].entity.origin,var_07[var_08].entity.origin + (0,0,130),0,undefined); + if(var_0A) + { + var_0A = !bullettracepassed(var_07[var_08].entity.origin + (0,0,130),param_00 + (0,0,114),0,undefined); + if(var_0A) + { + var_09 = var_09 * 4; + if(var_09 > param_01) + { + continue; + } + } + } + } + + var_07[var_08].damage = int(param_02 + param_03 - param_02 * var_09 / param_01); + var_07[var_08].pos = param_00; + var_07[var_08].damageowner = param_04; + var_07[var_08].einflictor = param_05; + level.airstrikedamagedents[level.airstrikedamagedentscount] = var_07[var_08]; + level.airstrikedamagedentscount++; + } + + thread airstrikedamageentsthread(param_06); +} + +//Function Number: 14 +airstrikedamageentsthread(param_00) +{ + self notify("airstrikeDamageEntsThread"); + self endon("airstrikeDamageEntsThread"); + while(level.airstrikedamagedentsindex < level.airstrikedamagedentscount) + { + if(!isdefined(level.airstrikedamagedents[level.airstrikedamagedentsindex])) + { + continue; + } + + var_01 = level.airstrikedamagedents[level.airstrikedamagedentsindex]; + if(!isdefined(var_01.entity)) + { + continue; + } + + if(!var_01.isplayer || isalive(var_01.entity)) + { + var_01 maps\mp\gametypes\_weapons::damageent(var_01.einflictor,var_01.damageowner,var_01.damage,"MOD_PROJECTILE_SPLASH",param_00,var_01.pos,vectornormalize(var_01.damagecenter - var_01.pos)); + level.airstrikedamagedents[level.airstrikedamagedentsindex] = undefined; + if(var_01.isplayer) + { + wait 0.05; + } + + continue; + } + + level.airstrikedamagedents[level.airstrikedamagedentsindex] = undefined; + level.airstrikedamagedentsindex++; + } +} + +//Function Number: 15 +func_2FB5(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = level.players; + foreach(var_07 in level.players) + { + if(!isalive(var_07)) + { + continue; + } + + if(var_07.team == param_04 || var_07.team == "spectator") + { + continue; + } + + var_08 = var_07.origin + (0,0,32); + var_09 = distance(param_00,var_08); + if(var_09 > param_01) + { + continue; + } + + var_0A = int(param_02 + param_03 - param_02 * var_09 / param_01); + var_07 thread func_2FB6("default",var_0A); + } +} + +//Function Number: 16 +func_2FB6(param_00,param_01) +{ + self endon("disconnect"); + if(isdefined(self.beingartilleryshellshocked) && self.beingartilleryshellshocked) + { + return; + } + + self.beingartilleryshellshocked = 1; + self shellshock(param_00,param_01); + wait param_01 + 1; + self.beingartilleryshellshocked = 0; +} + +//Function Number: 17 +dobomberstrike(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09) +{ + if(!isdefined(param_01)) + { + return; + } + + var_0A = 100; + var_0B = 150; + var_0C = param_04 + (randomfloat(2) - 1 * var_0A,randomfloat(2) - 1 * var_0A,0); + var_0D = param_05 + (randomfloat(2) - 1 * var_0B,randomfloat(2) - 1 * var_0B,0); + var_0E = spawnplane(param_01,"script_model",var_0C,"compass_objpoint_b2_airstrike_friendly","compass_objpoint_b2_airstrike_enemy"); + addplanetolist(var_0E); + var_0E thread func_2FBF(); + var_0E playloopsound("veh_b2_dist_loop"); + var_0E setmodel("vehicle_b2_bomber"); + var_0E thread handleemp(param_01); + var_0E.lifeid = param_00; + var_0E.angles = param_08; + var_0F = anglestoforward(param_08); + var_0E moveto(var_0D,param_07,0,0); + thread func_2FBB(var_0E,var_0D,param_07,param_09); + thread func_2FB9(var_0E,param_03,param_01); + var_0E endon("death"); + wait param_07 * 0.65; + removeplanefromlist(var_0E); + var_0E notify("delete"); + var_0E delete(); +} + +//Function Number: 18 +func_2FB9(param_00,param_01,param_02) +{ + param_00 endon("death"); + while(!func_18DB(param_00,param_01,5000)) + { + wait 0.05; + } + + var_03 = 1; + var_04 = 0; + param_00 notify("start_bombing"); + param_00 thread playbombfx(); + for(var_05 = func_2FC6(param_00,param_01);var_05 < 5000;var_05 = func_2FC6(param_00,param_01)) + { + if(var_05 < 1500 && !var_04) + { + param_00 playsound("veh_b2_sonic_boom"); + var_04 = 1; + } + + var_03 = !var_03; + if(var_05 < 4500) + { + param_00 thread callstrike_bomb(param_00.origin,param_02,(0,0,0),var_03); + } + + wait 0.1; + } + + param_00 notify("stop_bombing"); +} + +//Function Number: 19 +playbombfx() +{ + self endon("stop_bombing"); + self endon("death"); + for(;;) + { + playfxontag(level.stealthbombfx,self,"tag_left_alamo_missile"); + playfxontag(level.stealthbombfx,self,"tag_right_alamo_missile"); + wait 0.5; + } +} + +//Function Number: 20 +func_2FBB(param_00,param_01,param_02,param_03) +{ + param_00 waittill("start_bombing"); + var_04 = anglestoforward(param_00.angles); + var_05 = spawn("script_model",param_00.origin + (0,0,100) - var_04 * 200); + param_00.killcament = var_05; + param_00.killcament setscriptmoverkillcam("airstrike"); + param_00.airstriketype = param_03; + var_05.starttime = gettime(); + var_05 thread func_2C55(15); + var_05 linkto(param_00,"tag_origin",(-256,768,768),(0,0,0)); +} + +//Function Number: 21 +callstrike_bomb(param_00,param_01,param_02,param_03) +{ + if(!isdefined(param_01) || param_01 maps\mp\_utility::func_27E5() || param_01 maps\mp\_utility::func_2BE7()) + { + self notify("stop_bombing"); + return; + } + + var_04 = 512; + var_05 = (0,randomint(360),0); + var_06 = param_00 + anglestoforward(var_05) * randomfloat(var_04); + var_07 = bullettrace(var_06,var_06 + (0,0,-10000),0,undefined); + var_06 = var_07["position"]; + var_08 = distance(param_00,var_06); + if(var_08 > 5000) + { + return; + } + + wait 0.85 * var_08 / 2000; + if(!isdefined(param_01) || param_01 maps\mp\_utility::func_27E5() || param_01 maps\mp\_utility::func_2BE7()) + { + self notify("stop_bombing"); + return; + } + + if(param_03) + { + playfx(level.mortareffect,var_06); + playrumbleonposition("grenade_rumble",var_06); + earthquake(1,0.6,var_06,2000); + } + + thread maps\mp\_utility::func_2ED2("exp_airstrike_bomb",var_06); + func_2FB5(var_06,512,8,4,param_01.team); + func_2FAF(var_06 + (0,0,16),896,300,50,param_01,self,"stealth_bomb_mp"); +} + +//Function Number: 22 +func_2FBE(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09) +{ + if(!isdefined(param_01)) + { + return; + } + + var_0A = 100; + var_0B = 150; + var_0C = param_04 + (randomfloat(2) - 1 * var_0A,randomfloat(2) - 1 * var_0A,0); + var_0D = param_05 + (randomfloat(2) - 1 * var_0B,randomfloat(2) - 1 * var_0B,0); + if(param_09 == "harrier_airstrike") + { + var_0E = spawnplane(param_01,"script_model",var_0C,"hud_minimap_harrier_green","hud_minimap_harrier_red"); + } + else + { + var_0E = spawnplane(param_02,"script_model",var_0D,"compass_objpoint_airstrike_friendly","compass_objpoint_airstrike_busy"); + } + + addplanetolist(var_0E); + var_0E thread func_2FBF(); + if(param_09 == "harrier_airstrike") + { + if(param_01.team == "allies") + { + var_0E setmodel("vehicle_av8b_harrier_jet_mp"); + } + else + { + var_0E setmodel("vehicle_av8b_harrier_jet_opfor_mp"); + } + } + else + { + var_0E setmodel("vehicle_mig29_desert"); + } + + var_0E playloopsound("veh_mig29_dist_loop"); + var_0E thread handleemp(param_01); + var_0E.lifeid = param_00; + var_0E.angles = param_08; + var_0F = anglestoforward(param_08); + var_0E thread func_2ED7(); + var_0E moveto(var_0D,param_07,0,0); + thread callstrike_bombeffect(var_0E,var_0D,param_07,param_06 - 1,param_01,param_02,param_09); + var_0E endon("death"); + wait param_07; + removeplanefromlist(var_0E); + var_0E notify("delete"); + var_0E delete(); +} + +//Function Number: 23 +func_2FBF() +{ + level endon("game_ended"); + self endon("delete"); + self waittill("death"); + var_00 = anglestoforward(self.angles) * 200; + playfx(level.harrier_deathfx,self.origin,var_00); + removeplanefromlist(self); + self delete(); +} + +//Function Number: 24 +addplanetolist(param_00) +{ + level.planes[level.planes.size] = param_00; +} + +//Function Number: 25 +removeplanefromlist(param_00) +{ + for(var_01 = 0;var_01 < level.planes.size;var_01++) + { + if(isdefined(level.planes[var_01]) && level.planes[var_01] == param_00) + { + level.planes[var_01] = undefined; + } + } +} + +//Function Number: 26 +callstrike_bombeffect(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + param_00 endon("death"); + wait param_03; + if(!isdefined(param_04) || param_04 maps\mp\_utility::func_27E5() || param_04 maps\mp\_utility::func_2BE7()) + { + return; + } + + param_00 playsound("veh_mig29_sonic_boom"); + var_07 = anglestoforward(param_00.angles); + var_08 = spawnbomb(param_00.origin,param_00.angles); + var_08 movegravity(anglestoforward(param_00.angles) * 4666.667,3); + var_08.lifeid = param_05; + var_09 = spawn("script_model",param_00.origin + (0,0,100) - var_07 * 200); + var_08.killcament = var_09; + var_08.killcament setscriptmoverkillcam("airstrike"); + var_08.airstriketype = param_06; + var_09.starttime = gettime(); + var_09 thread func_2C55(15); + var_09.angles = var_07; + var_09 moveto(param_01 + (0,0,100),param_02,0,0); + wait 0.4; + var_09 moveto(var_09.origin + var_07 * 4000,1,0,0); + wait 0.45; + var_09 moveto(var_09.origin + var_07 + (0,0,-0.2) * 3500,2,0,0); + wait 0.15; + var_0A = spawn("script_model",var_08.origin); + var_0A setmodel("tag_origin"); + var_0A.origin = var_08.origin; + var_0A.angles = var_08.angles; + var_08 setmodel("tag_origin"); + wait 0.1; + var_0B = var_0A.origin; + var_0C = var_0A.angles; + if(level.splitscreen) + { + playfxontag(level.var_80F7,var_0A,"tag_origin"); + } + else + { + playfxontag(level.airstrikefx,var_0A,"tag_origin"); + } + + wait 0.05; + var_09 moveto(var_09.origin + var_07 + (0,0,-0.25) * 2500,2,0,0); + wait 0.25; + var_09 moveto(var_09.origin + var_07 + (0,0,-0.35) * 2000,2,0,0); + wait 0.2; + var_09 moveto(var_09.origin + var_07 + (0,0,-0.45) * 1500,2,0,0); + wait 0.5; + var_0D = 12; + var_0E = 5; + var_0F = 55; + var_10 = var_0F - var_0E / var_0D; + var_11 = (0,0,0); + for(var_12 = 0;var_12 < var_0D;var_12++) + { + var_13 = anglestoforward(var_0C + (var_0F - var_10 * var_12,randomint(10) - 5,0)); + var_14 = var_0B + var_13 * 10000; + var_15 = bullettrace(var_0B,var_14,0,undefined); + var_16 = var_15["position"]; + var_11 = var_11 + var_16; + playfx(level.airstrikessfx,var_16); + thread func_2FAF(var_16 + (0,0,16),512,200,30,param_04,var_08,"artillery_mp"); + if(var_12 % 3 == 0) + { + thread maps\mp\_utility::func_2ED2("exp_airstrike_bomb",var_16); + playrumbleonposition("artillery_rumble",var_16); + earthquake(0.7,0.75,var_16,1000); + } + + wait 0.05; + } + + var_11 = var_11 / var_0D + (0,0,128); + var_09 moveto(var_08.killcament.origin * 0.35 + var_11 * 0.65,1.5,0,0.5); + wait 5; + var_0A delete(); + var_08 delete(); +} + +//Function Number: 27 +spawnbomb(param_00,param_01) +{ + var_02 = spawn("script_model",param_00); + var_02.angles = param_01; + var_02 setmodel("projectile_cbu97_clusterbomb"); + return var_02; +} + +//Function Number: 28 +func_2C55(param_00) +{ + self endon("death"); + wait 10; + self delete(); +} + +//Function Number: 29 +func_2ED7() +{ + self endon("death"); + wait 0.5; + playfxontag(level.fx_airstrike_afterburner,self,"tag_engine_right"); + wait 0.5; + playfxontag(level.fx_airstrike_afterburner,self,"tag_engine_left"); + wait 0.5; + playfxontag(level.fx_airstrike_contrail,self,"tag_right_wingtip"); + wait 0.5; + playfxontag(level.fx_airstrike_contrail,self,"tag_left_wingtip"); +} + +//Function Number: 30 +callstrike(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = undefined; + var_06 = 0; + var_07 = (0,param_03,0); + var_05 = getent("airstrikeheight","targetname"); + if(param_04 == "stealth_airstrike") + { + thread maps\mp\_utility::teamplayercardsplash("used_stealth_airstrike",param_01,param_01.team); + var_08 = 12000; + var_09 = 2000; + if(!isdefined(var_05)) + { + var_0A = 950; + var_06 = 1500; + if(isdefined(level.airstrikeheightscale)) + { + var_0A = var_0A * level.airstrikeheightscale; + } + } + else + { + var_0A = var_06.origin[2]; + if(getdvar("mapname") == "mp_exchange") + { + var_0A = var_0A + 1024; + } + + var_06 = func_2FC5(var_0A); + } + } + else + { + var_08 = 24000; + var_09 = 7000; + if(!isdefined(var_06)) + { + var_0A = 850; + var_06 = 1500; + if(isdefined(level.airstrikeheightscale)) + { + var_0A = var_0A * level.airstrikeheightscale; + } + } + else + { + var_0A = var_06.origin[2]; + var_06 = func_2FC5(var_0A); + } + } + + var_0B = param_02 + anglestoforward(var_07) * -1 * var_08; + if(isdefined(var_05)) + { + var_0B = var_0B * (1,1,0); + } + + var_0B = var_0B + (0,0,var_0A); + if(param_04 == "stealth_airstrike") + { + var_0C = param_02 + anglestoforward(var_07) * var_08 * 4; + } + else + { + var_0C = param_03 + anglestoforward(var_08) * var_09; + } + + if(isdefined(var_05)) + { + var_0C = var_0C * (1,1,0); + } + + var_0C = var_0C + (0,0,var_0A); + var_0D = length(var_0B - var_0C); + var_0E = var_0D / var_09; + var_0D = abs(var_0D / 2 + var_06); + var_0F = var_0D / var_09; + param_01 endon("disconnect"); + var_10 = param_00; + level.airstrikedamagedents = []; + level.airstrikedamagedentscount = 0; + level.airstrikedamagedentsindex = 0; + if(param_04 == "harrier_airstrike") + { + level thread func_2FBE(param_00,param_01,var_10,param_02,var_0B + (0,0,randomint(500)),var_0C + (0,0,randomint(500)),var_0F,var_0E,var_07,param_04); + wait randomfloatrange(1.5,2.5); + maps\mp\gametypes\_hostmigration::func_273E(); + level thread func_2FBE(param_00,param_01,var_10,param_02,var_0B + (0,0,randomint(200)),var_0C + (0,0,randomint(200)),var_0F,var_0E,var_07,param_04); + wait randomfloatrange(1.5,2.5); + maps\mp\gametypes\_hostmigration::func_273E(); + var_11 = maps\mp\killstreaks\_harrier::beginharrier(param_00,var_0B,param_02); + param_01 thread maps\mp\killstreaks\_harrier::defendlocation(var_11); + return var_11; + } + + if(var_05 == "stealth_airstrike") + { + level thread dobomberstrike(param_01,param_02,var_11,param_03,var_0C + (0,0,randomint(1000)),var_0D + (0,0,randomint(1000)),var_10,var_0F,var_08,var_05); + return; + } + + level thread func_2FBE(param_01,param_02,var_11,param_03,var_0C + (0,0,randomint(500)),var_0D + (0,0,randomint(500)),var_10,var_0F,var_08,var_05); + wait randomfloatrange(1.5,2.5); + maps\mp\gametypes\_hostmigration::func_273E(); + level thread func_2FBE(param_01,param_02,var_11,param_03,var_0C + (0,0,randomint(200)),var_0D + (0,0,randomint(200)),var_10,var_0F,var_08,var_05); + wait randomfloatrange(1.5,2.5); + maps\mp\gametypes\_hostmigration::func_273E(); + level thread func_2FBE(param_01,param_02,var_11,param_03,var_0C + (0,0,randomint(200)),var_0D + (0,0,randomint(200)),var_10,var_0F,var_08,var_05); + if(var_05 == "super_airstrike") + { + wait randomfloatrange(2.5,3.5); + maps\mp\gametypes\_hostmigration::func_273E(); + level thread func_2FBE(param_01,param_02,var_11,param_03,var_0C + (0,0,randomint(200)),var_0D + (0,0,randomint(200)),var_10,var_0F,var_08,var_05); + return; + } +} + +//Function Number: 31 +func_2FC5(param_00) +{ + var_01 = 850; + var_02 = 1500; + var_03 = var_01 / param_00; + var_04 = var_03 * var_02; + return var_04; +} + +//Function Number: 32 +func_2FC6(param_00,param_01) +{ + var_02 = func_18DA(param_00,param_01); + if(var_02) + { + var_03 = 1; + } + else + { + var_03 = -1; + } + + var_04 = common_scripts\utility::flat_origin(param_00.origin); + var_05 = var_04 + anglestoforward(common_scripts\utility::flat_angle(param_00.angles)) * var_03 * 100000; + var_06 = pointonsegmentnearesttopoint(var_04,var_05,param_01); + var_07 = distance(var_04,var_06); + return var_07; +} + +//Function Number: 33 +func_18DB(param_00,param_01,param_02) +{ + if(!isdefined(param_02)) + { + param_02 = 3000; + } + + var_03 = func_18DA(param_00,param_01); + if(var_03) + { + var_04 = 1; + } + else + { + var_04 = -1; + } + + var_05 = common_scripts\utility::flat_origin(param_00.origin); + var_06 = var_05 + anglestoforward(common_scripts\utility::flat_angle(param_00.angles)) * var_04 * 100000; + var_07 = pointonsegmentnearesttopoint(var_05,var_06,param_01); + var_08 = distance(var_05,var_07); + if(var_08 < param_02) + { + return 1; + } + + return 0; +} + +//Function Number: 34 +func_18DA(param_00,param_01) +{ + var_02 = anglestoforward(common_scripts\utility::flat_angle(param_00.angles)); + var_03 = vectornormalize(common_scripts\utility::flat_origin(param_01) - param_00.origin); + var_04 = vectordot(var_02,var_03); + if(var_04 > 0) + { + return 1; + } + + return 0; +} + +//Function Number: 35 +func_2FC7() +{ + self waittill("cancel_location"); + self setblurforplayer(0,0.3); +} + +//Function Number: 36 +func_2FC8(param_00,param_01) +{ + var_02 = level.mapsize / 6.46875; + if(level.splitscreen) + { + var_02 = var_02 * 1.5; + } + + var_03 = 0; + switch(param_01) + { + case "precision_airstrike": + var_03 = 1; + self playlocalsound(game["voice"][self.team] + "KS_hqr_airstrike"); + break; + + case "stealth_airstrike": + var_03 = 1; + self playlocalsound(game["voice"][self.team] + "KS_hqr_bomber"); + break; + } + + maps\mp\_utility::_beginlocationselection(param_01,"map_artillery_selector",var_03,var_02); + self endon("stop_location_selection"); + self waittill("confirm_location",var_04,var_05); + if(!var_03) + { + var_05 = randomint(360); + } + + self setblurforplayer(0,0.3); + if(param_01 == "harrier_airstrike" && level.planes > 1) + { + self notify("cancel_location"); + self iprintlnbold(&"MP_AIR_SPACE_TOO_CROWDED"); + return 0; + } + + thread func_2FCC(param_01); + maps\mp\_matchdata::logkillstreakevent(param_01,var_04); + thread finishairstrikeusage(param_00,var_04,var_05,param_01); + return 1; +} + +//Function Number: 37 +finishairstrikeusage(param_00,param_01,param_02,param_03) +{ + self notify("used"); + var_04 = bullettrace(level.mapcenter + (0,0,1000000),level.mapcenter,0,undefined); + param_01 = (param_01[0],param_01[1],var_04["position"][2] - 514); + thread func_2ED4(param_00,param_01,param_02,self,self.pers["team"],param_03); +} + +//Function Number: 38 +func_2FCA(param_00,param_01,param_02) +{ +} + +//Function Number: 39 +handleemp(param_00) +{ + self endon("death"); + if(param_00 maps\mp\_utility::func_27E5()) + { + self notify("death"); + return; + } + + for(;;) + { + level waittill("emp_update"); + if(!param_00 maps\mp\_utility::func_27E5()) + { + continue; + } + + self notify("death"); + } +} + +//Function Number: 40 +func_2FCC(param_00) +{ + self endon("death"); + self endon("disconnect"); + switch(param_00) + { + case "precision_airstrike": + self playlocalsound(game["voice"][self.team] + "KS_ast_inbound"); + break; + + case "stealth_airstrike": + self playlocalsound(game["voice"][self.team] + "KS_bmb_inbound"); + break; + } +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/killstreaks/_autosentry.gsc b/MW3/Xbox/MP/maps/mp/killstreaks/_autosentry.gsc new file mode 100644 index 0000000..20973b2 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/killstreaks/_autosentry.gsc @@ -0,0 +1,1618 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\killstreaks\_autosentry.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 56 + * Decompile Time: 787 ms + * Timestamp: 10/27/2023 2:26:44 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level.sentrytype = []; + level.sentrytype["sentry_minigun"] = "sentry"; + level.sentrytype["sam_turret"] = "sam_turret"; + level.killstreakfuncs[level.sentrytype["sentry_minigun"]] = ::tryuseautosentry; + level.killstreakfuncs[level.sentrytype["sam_turret"]] = ::tryusesam; + level.sentrysettings = []; + level.sentrysettings["sentry_minigun"] = spawnstruct(); + level.sentrysettings["sentry_minigun"].health = 999999; + level.sentrysettings["sentry_minigun"].maxhealth = 1000; + level.sentrysettings["sentry_minigun"].burstmin = 20; + level.sentrysettings["sentry_minigun"].burstmax = 120; + level.sentrysettings["sentry_minigun"].pausemin = 0.15; + level.sentrysettings["sentry_minigun"].pausemax = 0.35; + level.sentrysettings["sentry_minigun"].sentrymodeon = "sentry"; + level.sentrysettings["sentry_minigun"].sentrymodeoff = "sentry_offline"; + level.sentrysettings["sentry_minigun"].timeout = 90; + level.sentrysettings["sentry_minigun"].spinuptime = 0.05; + level.sentrysettings["sentry_minigun"].overheattime = 8; + level.sentrysettings["sentry_minigun"].cooldowntime = 0.1; + level.sentrysettings["sentry_minigun"].fxtime = 0.3; + level.sentrysettings["sentry_minigun"].streakname = "sentry"; + level.sentrysettings["sentry_minigun"].weaponinfo = "sentry_minigun_mp"; + level.sentrysettings["sentry_minigun"].modelbase = "sentry_minigun_weak"; + level.sentrysettings["sentry_minigun"].modelplacement = "sentry_minigun_weak_obj"; + level.sentrysettings["sentry_minigun"].modelplacementfailed = "sentry_minigun_weak_obj_red"; + level.sentrysettings["sentry_minigun"].modeldestroyed = "sentry_minigun_weak_destroyed"; + level.sentrysettings["sentry_minigun"].hintstring = &"SENTRY_PICKUP"; + level.sentrysettings["sentry_minigun"].headicon = 1; + level.sentrysettings["sentry_minigun"].teamsplash = "used_sentry"; + level.sentrysettings["sentry_minigun"].shouldsplash = 0; + level.sentrysettings["sentry_minigun"].vodestroyed = "sentry_destroyed"; + level.sentrysettings["sam_turret"] = spawnstruct(); + level.sentrysettings["sam_turret"].health = 999999; + level.sentrysettings["sam_turret"].maxhealth = 1000; + level.sentrysettings["sam_turret"].burstmin = 20; + level.sentrysettings["sam_turret"].burstmax = 120; + level.sentrysettings["sam_turret"].pausemin = 0.15; + level.sentrysettings["sam_turret"].pausemax = 0.35; + level.sentrysettings["sam_turret"].sentrymodeon = "sentry"; + level.sentrysettings["sam_turret"].sentrymodeoff = "sentry_offline"; + level.sentrysettings["sam_turret"].timeout = 90; + level.sentrysettings["sam_turret"].spinuptime = 0.05; + level.sentrysettings["sam_turret"].overheattime = 8; + level.sentrysettings["sam_turret"].cooldowntime = 0.1; + level.sentrysettings["sam_turret"].fxtime = 0.3; + level.sentrysettings["sam_turret"].streakname = "sam_turret"; + level.sentrysettings["sam_turret"].weaponinfo = "sam_mp"; + level.sentrysettings["sam_turret"].modelbase = "mp_sam_turret"; + level.sentrysettings["sam_turret"].modelplacement = "mp_sam_turret_placement"; + level.sentrysettings["sam_turret"].modelplacementfailed = "mp_sam_turret_placement_failed"; + level.sentrysettings["sam_turret"].modeldestroyed = "mp_sam_turret"; + level.sentrysettings["sam_turret"].hintstring = &"SENTRY_PICKUP"; + level.sentrysettings["sam_turret"].headicon = 1; + level.sentrysettings["sam_turret"].teamsplash = "used_sam_turret"; + level.sentrysettings["sam_turret"].shouldsplash = 0; + level.sentrysettings["sam_turret"].vodestroyed = "sam_destroyed"; + foreach(var_01 in level.sentrysettings) + { + precacheitem(var_01.weaponinfo); + precachemodel(var_01.modelbase); + precachemodel(var_01.modelplacement); + precachemodel(var_01.modelplacementfailed); + precachemodel(var_01.modeldestroyed); + precachestring(var_01.hintstring); + if(isdefined(var_01.ownerhintstring)) + { + precachestring(var_01.ownerhintstring); + } + } + + precacheitem("sam_projectile_mp"); + level._effect["sentry_overheat_mp"] = loadfx("smoke/sentry_turret_overheat_smoke"); + level._effect["sentry_explode_mp"] = loadfx("explosions/sentry_gun_explosion"); + level._effect["sentry_smoke_mp"] = loadfx("smoke/car_damage_blacksmoke"); +} + +//Function Number: 2 +tryuseautosentry(param_00) +{ + var_01 = func_2DF2("sentry_minigun"); + if(var_01) + { + maps\mp\_matchdata::logkillstreakevent(level.sentrysettings["sentry_minigun"].streakname,self.origin); + } + + return var_01; +} + +//Function Number: 3 +tryusesam(param_00) +{ + var_01 = func_2DF2("sam_turret"); + if(var_01) + { + maps\mp\_matchdata::logkillstreakevent(level.sentrysettings["sam_turret"].streakname,self.origin); + } + + return var_01; +} + +//Function Number: 4 +func_2DF2(param_00) +{ + if(!maps\mp\_utility::func_2DF3()) + { + return 0; + } + + self.last_sentry = param_00; + var_01 = func_2DFD(param_00,self); + func_2DF8(); + var_02 = func_2DF5(var_01,1); + thread waitrestoreperks(); + self.iscarrying = 0; + if(isdefined(var_01)) + { + return 1; + } + + return 0; +} + +//Function Number: 5 +func_2DF5(param_00,param_01) +{ + self endon("death"); + self endon("disconnect"); + param_00 sentry_setcarried(self); + common_scripts\utility::_disableweapon(); + self notifyonplayercommand("place_sentry","+attack"); + self notifyonplayercommand("place_sentry","+attack_akimbo_accessible"); + self notifyonplayercommand("cancel_sentry","+actionslot 4"); + if(!level.console) + { + self notifyonplayercommand("cancel_sentry","+actionslot 5"); + self notifyonplayercommand("cancel_sentry","+actionslot 6"); + self notifyonplayercommand("cancel_sentry","+actionslot 7"); + } + + for(;;) + { + var_02 = common_scripts\utility::waittill_any_return("place_sentry","cancel_sentry","force_cancel_placement"); + if(var_02 == "cancel_sentry" || var_02 == "force_cancel_placement") + { + if(!param_01 && var_02 == "cancel_sentry") + { + continue; + } + + if(level.console) + { + var_03 = maps\mp\killstreaks\_killstreaks::func_2C01(level.sentrysettings[param_00.sentrytype].streakname); + if(isdefined(self.killstreakindexweapon) && var_03 == maps\mp\killstreaks\_killstreaks::func_2C01(self.pers["killstreaks"][self.killstreakindexweapon].streakname) && !self getweaponslistitems().size) + { + maps\mp\_utility::_giveweapon(var_03,0); + maps\mp\_utility::func_31F3(4,"weapon",var_03); + } + } + + param_00 func_2E11(); + common_scripts\utility::_enableweapon(); + return 0; + } + + if(!param_00.canbeplaced) + { + continue; + } + + param_00 func_2E10(); + common_scripts\utility::_enableweapon(); + return 1; + } +} + +//Function Number: 6 +func_2DF6() +{ + if(self hasweapon("riotshield_mp")) + { + self.restoreweapon = "riotshield_mp"; + self takeweapon("riotshield_mp"); + } +} + +//Function Number: 7 +func_2DF8() +{ + if(maps\mp\_utility::func_27AF("specialty_explosivebullets")) + { + self.restoreperk = "specialty_explosivebullets"; + maps\mp\_utility::func_282E("specialty_explosivebullets"); + } +} + +//Function Number: 8 +func_2DFA() +{ + if(isdefined(self.restoreweapon)) + { + maps\mp\_utility::_giveweapon(self.restoreweapon); + self.restoreweapon = undefined; + } +} + +//Function Number: 9 +func_2DFB() +{ + if(isdefined(self.restoreperk)) + { + maps\mp\_utility::giveperk(self.restoreperk,0); + self.restoreperk = undefined; + } +} + +//Function Number: 10 +waitrestoreperks() +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + wait 0.05; + func_2DFB(); +} + +//Function Number: 11 +func_2DFD(param_00,param_01) +{ + var_02 = spawnturret("misc_turret",param_01.origin,level.sentrysettings[param_00].weaponinfo); + var_02.angles = param_01.angles; + var_02 sentry_initsentry(param_00,param_01); + return var_02; +} + +//Function Number: 12 +sentry_initsentry(param_00,param_01) +{ + self.sentrytype = param_00; + self.canbeplaced = 1; + self setmodel(level.sentrysettings[self.sentrytype].modelbase); + self.shouldsplash = 1; + self setcandamage(1); + switch(param_00) + { + case "gl_turret": + case "minigun_turret": + self setleftarc(80); + self setrightarc(80); + self setbottomarc(50); + self setdefaultdroppitch(0); + self.originalowner = param_01; + break; + + case "sam_turret": + self maketurretinoperable(); + self setleftarc(180); + self setrightarc(180); + self settoparc(80); + self setdefaultdroppitch(-89); + self.laser_on = 0; + var_02 = spawn("script_model",self gettagorigin("tag_laser")); + var_02 linkto(self); + self.killcament = var_02; + self.killcament setscriptmoverkillcam("explosive"); + break; + + default: + self maketurretinoperable(); + self setdefaultdroppitch(-89); + break; + } + + self setturretmodechangewait(1); + func_2E19(); + func_2E0F(param_01); + thread sentry_handledamage(); + thread sentry_handledeath(); + thread sentry_timeout(); + switch(param_00) + { + case "minigun_turret": + self.momentum = 0; + self.heatlevel = 0; + self.overheated = 0; + thread sentry_heatmonitor(); + break; + + case "gl_turret": + self.momentum = 0; + self.heatlevel = 0; + self.cooldownwaittime = 0; + self.overheated = 0; + thread func_2E25(); + thread turret_coolmonitor(); + break; + + case "sam_turret": + thread sentry_handleuse(); + thread func_2E29(); + break; + + default: + thread sentry_handleuse(); + thread sentry_attacktargets(); + thread func_2E29(); + break; + } +} + +//Function Number: 13 +sentry_handledamage() +{ + self endon("death"); + level endon("game_ended"); + self.health = level.sentrysettings[self.sentrytype].health; + self.maxhealth = level.sentrysettings[self.sentrytype].maxhealth; + self.damagetaken = 0; + for(;;) + { + self waittill("damage",var_00,var_01,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09); + if(!maps\mp\gametypes\_weapons::func_27A1(self.owner,var_01)) + { + continue; + } + + if(isdefined(var_08) && var_08 & level.idflags_penetration) + { + self.wasdamagedfrombulletpenetration = 1; + } + + switch(var_09) + { + case "stealth_bomb_mp": + case "artillery_mp": + var_00 = var_00 * 4; + break; + + case "bomb_site_mp": + var_00 = self.maxhealth; + break; + } + + if(var_04 == "MOD_MELEE") + { + self.damagetaken = self.damagetaken + self.maxhealth; + } + + var_0A = var_00; + if(isplayer(var_01)) + { + var_01 maps\mp\gametypes\_damagefeedback::updatedamagefeedback("sentry"); + if(var_01 maps\mp\_utility::func_27AF("specialty_armorpiercing")) + { + var_0A = var_00 * level.armorpiercingmod; + } + } + + if(isdefined(var_01.owner) && isplayer(var_01.owner)) + { + var_01.owner maps\mp\gametypes\_damagefeedback::updatedamagefeedback("sentry"); + } + + if(isdefined(var_09)) + { + switch(var_09) + { + case "remote_mortar_missile_mp": + case "javelin_mp": + case "stinger_mp": + case "remotemissile_projectile_mp": + case "ac130_40mm_mp": + case "ac130_105mm_mp": + self.largeprojectiledamage = 1; + var_0A = self.maxhealth + 1; + break; + + case "stealth_bomb_mp": + case "artillery_mp": + self.largeprojectiledamage = 0; + var_0A = var_0A + var_00 * 4; + break; + + case "emp_grenade_mp": + case "bomb_site_mp": + self.largeprojectiledamage = 0; + var_0A = self.maxhealth + 1; + break; + } + + maps\mp\killstreaks\_killstreaks::killstreakhit(var_01,var_09,self); + } + + self.damagetaken = self.damagetaken + var_0A; + if(self.damagetaken >= self.maxhealth) + { + thread maps\mp\gametypes\_missions::vehiclekilled(self.owner,self,undefined,var_01,var_00,var_04,var_09); + if(isplayer(var_01) && !isdefined(self.owner) || var_01 != self.owner) + { + var_01 thread maps\mp\gametypes\_rank::func_2AB3("kill",100,var_09,var_04); + var_01 notify("destroyed_killstreak"); + if(isdefined(self.uavremotemarkedby) && self.uavremotemarkedby != var_01) + { + self.uavremotemarkedby thread maps\mp\killstreaks\_remoteuav::remoteuav_processtaggedassist(); + } + } + + if(isdefined(self.owner)) + { + self.owner thread maps\mp\_utility::func_2A60(level.sentrysettings[self.sentrytype].vodestroyed); + } + + self notify("death"); + return; + } + } +} + +//Function Number: 14 +func_2E05() +{ + self endon("carried"); + self endon("death"); + level endon("game_ended"); + for(;;) + { + self waittill("emp_damage",var_00,var_01); + playfxontag(common_scripts\utility::func_539("sentry_explode_mp"),self,"tag_aim"); + self setdefaultdroppitch(40); + self setmode(level.sentrysettings[self.sentrytype].sentrymodeoff); + wait var_01; + self setdefaultdroppitch(-89); + self setmode(level.sentrysettings[self.sentrytype].sentrymodeon); + } +} + +//Function Number: 15 +sentry_handledeath() +{ + self waittill("death"); + if(!isdefined(self)) + { + return; + } + + self setmodel(level.sentrysettings[self.sentrytype].modeldestroyed); + func_2E19(); + self setdefaultdroppitch(40); + self setsentryowner(undefined); + self setturretminimapvisible(0); + if(isdefined(self.ownertrigger)) + { + self.ownertrigger delete(); + } + + self playsound("sentry_explode"); + switch(self.sentrytype) + { + case "gl_turret": + case "minigun_turret": + self.forcedisable = 1; + self turretfiredisable(); + break; + + default: + break; + } + + if(isdefined(self.inuseby)) + { + playfxontag(common_scripts\utility::func_539("sentry_explode_mp"),self,"tag_origin"); + playfxontag(common_scripts\utility::func_539("sentry_smoke_mp"),self,"tag_aim"); + self.inuseby.turret_overheat_bar maps\mp\gametypes\_hud_util::destroyelem(); + self.inuseby func_2DFB(); + self.inuseby func_2DFA(); + self notify("deleting"); + wait 1; + stopfxontag(common_scripts\utility::func_539("sentry_explode_mp"),self,"tag_origin"); + stopfxontag(common_scripts\utility::func_539("sentry_smoke_mp"),self,"tag_aim"); + } + else + { + playfxontag(common_scripts\utility::func_539("sentry_explode_mp"),self,"tag_aim"); + wait 1.5; + self playsound("sentry_explode_smoke"); + var_00 = 8; + while(var_00 > 0) + { + playfxontag(common_scripts\utility::func_539("sentry_smoke_mp"),self,"tag_aim"); + wait 0.4; + var_00 = var_00 - 0.4; + } + + self notify("deleting"); + } + + if(isdefined(self.killcament)) + { + self.killcament delete(); + } + + self delete(); +} + +//Function Number: 16 +sentry_handleuse() +{ + self endon("death"); + level endon("game_ended"); + for(;;) + { + self waittill("trigger",var_00); + if(!maps\mp\_utility::isreallyalive(var_00)) + { + continue; + } + + if(self.sentrytype == "sam_turret") + { + self setmode(level.sentrysettings[self.sentrytype].sentrymodeoff); + } + + var_00 func_2DF5(self,0); + } +} + +//Function Number: 17 +turret_handlepickup(param_00) +{ + self endon("disconnect"); + level endon("game_ended"); + param_00 endon("death"); + if(!isdefined(param_00.ownertrigger)) + { + return; + } + + var_01 = 0; + for(;;) + { + if(isalive(self) && self istouching(param_00.ownertrigger) && !isdefined(param_00.inuseby) && !isdefined(param_00.carriedby) && self isonground()) + { + if(self usebuttonpressed()) + { + if(isdefined(self.using_remote_turret) && self.using_remote_turret) + { + continue; + } + + var_01 = 0; + while(self usebuttonpressed()) + { + var_01 = var_01 + 0.05; + wait 0.05; + } + + if(var_01 >= 0.5) + { + continue; + } + + var_01 = 0; + while(!self usebuttonpressed() && var_01 < 0.5) + { + var_01 = var_01 + 0.05; + wait 0.05; + } + + if(var_01 >= 0.5) + { + continue; + } + + if(!maps\mp\_utility::isreallyalive(self)) + { + continue; + } + + if(isdefined(self.using_remote_turret) && self.using_remote_turret) + { + continue; + } + + param_00 setmode(level.sentrysettings[param_00.sentrytype].sentrymodeoff); + thread func_2DF5(param_00,0); + param_00.ownertrigger delete(); + return; + } + } + + wait 0.05; + } +} + +//Function Number: 18 +turret_handleuse() +{ + self notify("turret_handluse"); + self endon("turret_handleuse"); + self endon("deleting"); + level endon("game_ended"); + self.forcedisable = 0; + var_00 = (1,0.9,0.7); + var_01 = (1,0.65,0); + var_02 = (1,0.25,0); + for(;;) + { + self waittill("trigger",var_03); + if(isdefined(self.carriedby)) + { + continue; + } + + if(isdefined(self.inuseby)) + { + continue; + } + + if(!maps\mp\_utility::isreallyalive(var_03)) + { + continue; + } + + var_03 func_2DF8(); + var_03 func_2DF6(); + self.inuseby = var_03; + self setmode(level.sentrysettings[self.sentrytype].sentrymodeoff); + func_2E0F(var_03); + self setmode(level.sentrysettings[self.sentrytype].sentrymodeon); + var_03 thread turret_shotmonitor(self); + var_03.turret_overheat_bar = var_03 maps\mp\gametypes\_hud_util::createbar(var_00,100,6); + var_03.turret_overheat_bar maps\mp\gametypes\_hud_util::setpoint("CENTER","BOTTOM",0,-70); + var_03.turret_overheat_bar.alpha = 0.65; + var_03.turret_overheat_bar.bar.alpha = 0.65; + var_04 = 0; + for(;;) + { + if(!maps\mp\_utility::isreallyalive(var_03)) + { + self.inuseby = undefined; + var_03.turret_overheat_bar maps\mp\gametypes\_hud_util::destroyelem(); + break; + } + + if(!var_03 isusingturret()) + { + self notify("player_dismount"); + self.inuseby = undefined; + var_03.turret_overheat_bar maps\mp\gametypes\_hud_util::destroyelem(); + var_03 func_2DFB(); + var_03 func_2DFA(); + self sethintstring(level.sentrysettings[self.sentrytype].hintstring); + self setmode(level.sentrysettings[self.sentrytype].sentrymodeoff); + func_2E0F(self.originalowner); + self setmode(level.sentrysettings[self.sentrytype].sentrymodeon); + break; + } + + if(self.heatlevel >= level.sentrysettings[self.sentrytype].overheattime) + { + var_05 = 1; + } + else + { + var_05 = self.heatlevel / level.sentrysettings[self.sentrytype].overheattime; + } + + var_03.turret_overheat_bar maps\mp\gametypes\_hud_util::updatebar(var_05); + if(self.forcedisable || self.overheated) + { + self turretfiredisable(); + var_03.turret_overheat_bar.bar.color = var_02; + var_04 = 0; + } + else if(self.heatlevel > level.sentrysettings[self.sentrytype].overheattime * 0.75 && self.sentrytype == "minigun_turret") + { + var_03.turret_overheat_bar.bar.color = var_01; + if(randomintrange(0,10) < 6) + { + self turretfireenable(); + } + else + { + self turretfiredisable(); + } + + if(!var_04) + { + var_04 = 1; + thread func_2E27(); + } + } + else + { + var_03.turret_overheat_bar.bar.color = var_00; + self turretfireenable(); + var_04 = 0; + self notify("not_overheated"); + } + + wait 0.05; + } + + self setdefaultdroppitch(0); + } +} + +//Function Number: 19 +sentry_handleownerdisconnect() +{ + self endon("death"); + level endon("game_ended"); + self notify("sentry_handleOwner"); + self endon("sentry_handleOwner"); + self.owner common_scripts\utility::waittill_any("disconnect","joined_team","joined_spectators"); + self notify("death"); +} + +//Function Number: 20 +func_2E0F(param_00) +{ + self.owner = param_00; + self setsentryowner(self.owner); + self setturretminimapvisible(1,self.sentrytype); + if(level.teambased) + { + self.team = self.owner.team; + self setturretteam(self.team); + } + + thread sentry_handleownerdisconnect(); +} + +//Function Number: 21 +func_2E10() +{ + self setmodel(level.sentrysettings[self.sentrytype].modelbase); + if(self getmode() == "manual") + { + self setmode(level.sentrysettings[self.sentrytype].sentrymodeoff); + } + + self setsentrycarrier(undefined); + self setcandamage(1); + switch(self.sentrytype) + { + case "gl_turret": + case "minigun_turret": + self.angles = self.carriedby.angles; + if(isalive(self.originalowner)) + { + self.originalowner maps\mp\_utility::setlowermessage("pickup_hint",level.sentrysettings[self.sentrytype].ownerhintstring,3,undefined,undefined,undefined,undefined,undefined,1); + } + + self.ownertrigger = spawn("trigger_radius",self.origin + (0,0,1),0,105,64); + self.originalowner thread turret_handlepickup(self); + thread turret_handleuse(); + break; + + default: + break; + } + + func_2E1A(); + self.carriedby forceusehintoff(); + self.carriedby = undefined; + if(isdefined(self.owner)) + { + self.owner.iscarrying = 0; + } + + func_2E18(); + self playsound("sentry_gun_plant"); + self notify("placed"); +} + +//Function Number: 22 +func_2E11() +{ + self.carriedby forceusehintoff(); + if(isdefined(self.owner)) + { + self.owner.iscarrying = 0; + } + + self delete(); +} + +//Function Number: 23 +sentry_setcarried(param_00) +{ + if(isdefined(self.originalowner)) + { + } + else + { + } + + self setmodel(level.sentrysettings[self.sentrytype].modelplacement); + self setsentrycarrier(param_00); + self setcandamage(0); + func_2E1B(); + self.carriedby = param_00; + param_00.iscarrying = 1; + param_00 thread updatesentryplacement(self); + thread sentry_oncarrierdeath(param_00); + thread sentry_oncarrierdisconnect(param_00); + thread func_2E16(param_00); + thread func_2E17(); + self setdefaultdroppitch(-89); + func_2E19(); + self notify("carried"); +} + +//Function Number: 24 +updatesentryplacement(param_00) +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + param_00 endon("placed"); + param_00 endon("death"); + param_00.canbeplaced = 1; + var_01 = -1; + for(;;) + { + var_02 = self canplayerplacesentry(); + param_00.origin = var_02["origin"]; + param_00.angles = var_02["angles"]; + param_00.canbeplaced = self isonground() && var_02["result"] && abs(param_00.origin[2] - self.origin[2]) < 10; + if(param_00.canbeplaced != var_01) + { + if(param_00.canbeplaced) + { + param_00 setmodel(level.sentrysettings[param_00.sentrytype].modelplacement); + self forceusehinton(&"SENTRY_PLACE"); + } + else + { + param_00 setmodel(level.sentrysettings[param_00.sentrytype].modelplacementfailed); + self forceusehinton(&"SENTRY_CANNOT_PLACE"); + } + } + + var_01 = param_00.canbeplaced; + wait 0.05; + } +} + +//Function Number: 25 +sentry_oncarrierdeath(param_00) +{ + self endon("placed"); + self endon("death"); + param_00 waittill("death"); + if(self.canbeplaced) + { + func_2E10(); + return; + } + + self delete(); +} + +//Function Number: 26 +sentry_oncarrierdisconnect(param_00) +{ + self endon("placed"); + self endon("death"); + param_00 waittill("disconnect"); + self delete(); +} + +//Function Number: 27 +func_2E16(param_00) +{ + self endon("placed"); + self endon("death"); + param_00 common_scripts\utility::waittill_any("joined_team","joined_spectators"); + self delete(); +} + +//Function Number: 28 +func_2E17(param_00) +{ + self endon("placed"); + self endon("death"); + level waittill("game_ended"); + self delete(); +} + +//Function Number: 29 +func_2E18() +{ + self setmode(level.sentrysettings[self.sentrytype].sentrymodeon); + self setcursorhint("HINT_NOICON"); + self sethintstring(level.sentrysettings[self.sentrytype].hintstring); + if(level.sentrysettings[self.sentrytype].headicon) + { + if(level.teambased) + { + maps\mp\_entityheadicons::setteamheadicon(self.team,(0,0,65)); + } + else + { + maps\mp\_entityheadicons::setplayerheadicon(self.owner,(0,0,65)); + } + } + + self makeusable(); + foreach(var_01 in level.players) + { + switch(self.sentrytype) + { + case "gl_turret": + case "minigun_turret": + self enableplayeruse(var_01); + break; + + default: + var_02 = self getentitynumber(); + func_2E1D(var_02); + if(var_01 == self.owner) + { + self enableplayeruse(var_01); + } + else + { + self disableplayeruse(var_01); + } + break; + } + } + + if(self.shouldsplash) + { + level thread maps\mp\_utility::teamplayercardsplash(level.sentrysettings[self.sentrytype].teamsplash,self.owner,self.owner.team); + self.shouldsplash = 0; + } + + if(self.sentrytype == "sam_turret") + { + thread func_2E2A(); + } + + thread func_2E05(); +} + +//Function Number: 30 +func_2E19() +{ + self setmode(level.sentrysettings[self.sentrytype].sentrymodeoff); + self makeunusable(); + var_00 = self getentitynumber(); + switch(self.sentrytype) + { + case "gl_turret": + break; + + default: + removefromturretlist(var_00); + break; + } + + if(level.teambased) + { + maps\mp\_entityheadicons::setteamheadicon("none",(0,0,0)); + return; + } + + if(isdefined(self.owner)) + { + maps\mp\_entityheadicons::setplayerheadicon(undefined,(0,0,0)); + } +} + +//Function Number: 31 +func_2E1A() +{ + self maketurretsolid(); +} + +//Function Number: 32 +func_2E1B() +{ + self setcontents(0); +} + +//Function Number: 33 +func_2E1C(param_00) +{ + if(level.teambased && self.team == param_00.team) + { + return 1; + } + + return 0; +} + +//Function Number: 34 +func_2E1D(param_00) +{ + level.turrets[param_00] = self; +} + +//Function Number: 35 +removefromturretlist(param_00) +{ + level.turrets[param_00] = undefined; +} + +//Function Number: 36 +sentry_attacktargets() +{ + self endon("death"); + level endon("game_ended"); + self.momentum = 0; + self.heatlevel = 0; + self.overheated = 0; + thread sentry_heatmonitor(); + for(;;) + { + common_scripts\utility::waittill_either("turretstatechange","cooled"); + if(self isfiringturret()) + { + thread sentry_burstfirestart(); + continue; + } + + func_2E22(); + thread sentry_burstfirestop(); + } +} + +//Function Number: 37 +sentry_timeout() +{ + self endon("death"); + level endon("game_ended"); + var_00 = level.sentrysettings[self.sentrytype].timeout; + while(var_00) + { + wait 1; + maps\mp\gametypes\_hostmigration::func_273E(); + if(!isdefined(self.carriedby)) + { + var_00 = max(0,var_00 - 1); + } + } + + if(isdefined(self.owner)) + { + if(self.sentrytype == "sam_turret") + { + self.owner thread maps\mp\_utility::func_2A60("sam_gone"); + } + else + { + self.owner thread maps\mp\_utility::func_2A60("sentry_gone"); + } + } + + self notify("death"); +} + +//Function Number: 38 +func_2E20() +{ + self endon("death"); + self playsound("sentry_gun_beep"); + wait 0.1; + self playsound("sentry_gun_beep"); + wait 0.1; + self playsound("sentry_gun_beep"); +} + +//Function Number: 39 +sentry_spinup() +{ + thread func_2E20(); + while(self.momentum < level.sentrysettings[self.sentrytype].spinuptime) + { + self.momentum = self.momentum + 0.1; + wait 0.1; + } +} + +//Function Number: 40 +func_2E22() +{ + self.momentum = 0; +} + +//Function Number: 41 +sentry_burstfirestart() +{ + self endon("death"); + self endon("stop_shooting"); + level endon("game_ended"); + sentry_spinup(); + var_00 = weaponfiretime(level.sentrysettings[self.sentrytype].weaponinfo); + var_01 = level.sentrysettings[self.sentrytype].burstmin; + var_02 = level.sentrysettings[self.sentrytype].burstmax; + var_03 = level.sentrysettings[self.sentrytype].pausemin; + var_04 = level.sentrysettings[self.sentrytype].pausemax; + for(;;) + { + var_05 = randomintrange(var_01,var_02 + 1); + for(var_06 = 0;var_06 < var_05 && !self.overheated;var_06++) + { + self shootturret(); + self.heatlevel = self.heatlevel + var_00; + wait var_00; + } + + wait randomfloatrange(var_03,var_04); + } +} + +//Function Number: 42 +sentry_burstfirestop() +{ + self notify("stop_shooting"); +} + +//Function Number: 43 +turret_shotmonitor(param_00) +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + param_00 endon("death"); + param_00 endon("player_dismount"); + var_01 = weaponfiretime(level.sentrysettings[param_00.sentrytype].weaponinfo); + for(;;) + { + param_00 waittill("turret_fire"); + param_00.heatlevel = param_00.heatlevel + var_01; + param_00.cooldownwaittime = var_01; + } +} + +//Function Number: 44 +sentry_heatmonitor() +{ + self endon("death"); + var_00 = weaponfiretime(level.sentrysettings[self.sentrytype].weaponinfo); + var_01 = 0; + var_02 = 0; + var_03 = level.sentrysettings[self.sentrytype].overheattime; + var_04 = level.sentrysettings[self.sentrytype].cooldowntime; + for(;;) + { + if(self.heatlevel != var_01) + { + wait var_00; + } + else + { + self.heatlevel = max(0,self.heatlevel - 0.05); + } + + if(self.heatlevel > var_03) + { + self.overheated = 1; + thread func_2E27(); + switch(self.sentrytype) + { + case "minigun_turret": + playfxontag(common_scripts\utility::func_539("sentry_smoke_mp"),self,"tag_aim"); + break; + + default: + break; + } + + while(self.heatlevel) + { + self.heatlevel = max(0,self.heatlevel - var_04); + wait 0.1; + } + + self.overheated = 0; + self notify("not_overheated"); + } + + var_01 = self.heatlevel; + wait 0.05; + } +} + +//Function Number: 45 +func_2E25() +{ + self endon("death"); + var_00 = level.sentrysettings[self.sentrytype].overheattime; + for(;;) + { + if(self.heatlevel > var_00) + { + self.overheated = 1; + thread func_2E27(); + switch(self.sentrytype) + { + case "gl_turret": + playfxontag(common_scripts\utility::func_539("sentry_smoke_mp"),self,"tag_aim"); + break; + + default: + break; + } + + while(self.heatlevel) + { + wait 0.1; + } + + self.overheated = 0; + self notify("not_overheated"); + } + + wait 0.05; + } +} + +//Function Number: 46 +turret_coolmonitor() +{ + self endon("death"); + for(;;) + { + if(self.heatlevel > 0) + { + if(self.cooldownwaittime <= 0) + { + self.heatlevel = max(0,self.heatlevel - 0.05); + } + else + { + self.cooldownwaittime = max(0,self.cooldownwaittime - 0.05); + } + } + + wait 0.05; + } +} + +//Function Number: 47 +func_2E27() +{ + self endon("death"); + self endon("not_overheated"); + level endon("game_ended"); + self notify("playing_heat_fx"); + self endon("playing_heat_fx"); + for(;;) + { + playfxontag(common_scripts\utility::func_539("sentry_overheat_mp"),self,"tag_flash"); + wait level.sentrysettings[self.sentrytype].fxtime; + } +} + +//Function Number: 48 +func_2E28() +{ + self endon("death"); + self endon("not_overheated"); + level endon("game_ended"); + for(;;) + { + playfxontag(common_scripts\utility::func_539("sentry_smoke_mp"),self,"tag_aim"); + wait 0.4; + } +} + +//Function Number: 49 +func_2E29() +{ + self endon("death"); + level endon("game_ended"); + for(;;) + { + wait 3; + if(!isdefined(self.carriedby)) + { + self playsound("sentry_gun_beep"); + } + } +} + +//Function Number: 50 +func_2E2A() +{ + self endon("carried"); + self endon("death"); + level endon("game_ended"); + self.samtargetent = undefined; + self.sammissilegroups = []; + for(;;) + { + self.samtargetent = func_2E2D(); + func_2E2F(); + wait 0.05; + } +} + +//Function Number: 51 +func_2E2D() +{ + var_00 = self gettagorigin("tag_laser"); + if(!isdefined(self.samtargetent)) + { + if(level.teambased) + { + foreach(var_02 in level.uavmodels[level.otherteam[self.team]]) + { + if(isdefined(var_02.isleaving) && var_02.isleaving) + { + continue; + } + + if(sighttracepassed(var_00,var_02.origin,0,self)) + { + return var_02; + } + } + + foreach(var_05 in level.littlebirds) + { + if(isdefined(var_05.team) && var_05.team == self.team) + { + continue; + } + + if(sighttracepassed(var_00,var_05.origin,0,self)) + { + return var_05; + } + } + + foreach(var_08 in level.helis) + { + if(isdefined(var_08.team) && var_08.team == self.team) + { + continue; + } + + if(sighttracepassed(var_00,var_08.origin,0,self)) + { + return var_08; + } + } + + if(level.ac130inuse && isdefined(level.ac130.owner) && level.ac130.owner.team != self.team) + { + if(sighttracepassed(var_00,level.ac130.planemodel.origin,0,self)) + { + return level.ac130.planemodel; + } + } + + foreach(var_02 in level.remote_uav) + { + if(!isdefined(var_02)) + { + continue; + } + + if(isdefined(var_02.team) && var_02.team == self.team) + { + continue; + } + + if(sighttracepassed(var_00,var_02.origin,0,self,var_02)) + { + return var_02; + } + } + } + else + { + foreach(var_02 in level.uavmodels) + { + if(isdefined(var_02.isleaving) && var_02.isleaving) + { + continue; + } + + if(isdefined(var_02.owner) && isdefined(self.owner) && var_02.owner == self.owner) + { + continue; + } + + if(sighttracepassed(var_00,var_02.origin,0,self)) + { + return var_02; + } + } + + foreach(var_05 in level.littlebirds) + { + if(isdefined(var_05.owner) && isdefined(self.owner) && var_05.owner == self.owner) + { + continue; + } + + if(sighttracepassed(var_00,var_05.origin,0,self)) + { + return var_05; + } + } + + foreach(var_08 in level.helis) + { + if(isdefined(var_08.owner) && isdefined(self.owner) && var_08.owner == self.owner) + { + continue; + } + + if(sighttracepassed(var_00,var_08.origin,0,self)) + { + return var_08; + } + } + + if(level.ac130inuse && isdefined(level.ac130.owner) && isdefined(self.owner) && level.ac130.owner != self.owner) + { + if(sighttracepassed(var_00,level.ac130.planemodel.origin,0,self)) + { + return level.ac130.planemodel; + } + } + + foreach(var_02 in level.remote_uav) + { + if(!isdefined(var_02)) + { + continue; + } + + if(isdefined(var_02.owner) && isdefined(self.owner) && var_02.owner == self.owner) + { + continue; + } + + if(sighttracepassed(var_00,var_02.origin,0,self,var_02)) + { + return var_02; + } + } + } + + self cleartargetentity(); + return undefined; + } + + if(!sighttracepassed(var_08,self.samtargetent.origin,0,self)) + { + self cleartargetentity(); + return undefined; + } + + return self.samtargetent; +} + +//Function Number: 52 +func_2E2F() +{ + if(isdefined(self.samtargetent)) + { + if(self.samtargetent == level.ac130.planemodel && !isdefined(level.ac130player)) + { + self.samtargetent = undefined; + self cleartargetentity(); + return; + } + + self settargetentity(self.samtargetent); + self waittill("turret_on_target"); + if(!isdefined(self.samtargetent)) + { + return; + } + + if(!self.laser_on) + { + thread func_2E32(); + thread func_2E33(); + thread func_2E34(); + thread sam_watchlineofsight(); + } + + wait 2; + if(!isdefined(self.samtargetent)) + { + return; + } + + if(self.samtargetent == level.ac130.planemodel && !isdefined(level.ac130player)) + { + self.samtargetent = undefined; + self cleartargetentity(); + return; + } + + var_00 = []; + var_01 = self.sammissilegroups.size; + for(var_02 = 0;var_02 < 4;var_02++) + { + if(!isdefined(self.samtargetent)) + { + return; + } + + if(isdefined(self.carriedby)) + { + return; + } + + self shootturret(); + var_03 = magicbullet("sam_projectile_mp",var_41[var_02],self.samtargetent.origin,self.owner); + var_03 missile_settargetent(self.samtargetent); + var_03 missile_setflightmodedirect(); + var_03.samturret = self; + var_03.sammissilegroup = var_01; + self.sammissilegroups[var_01][var_02] = var_03; + level notify("sam_missile_fired",self.owner,var_03,self.samtargetent,var_41[3],self gettagorigin("tag_ri_missile2"),var_41[2],self gettagorigin("tag_ri_missile1"),var_41[1],self gettagorigin("tag_le_missile2"),var_41[0],self gettagorigin("tag_le_missile1")); + if(var_02 == 3) + { + break; + } + + wait 0.25; + } + + level notify("sam_fired",self.owner,self.sammissilegroups[var_01],self.samtargetent); + wait 3; + } +} + +//Function Number: 53 +sam_watchlineofsight() +{ + level endon("game_ended"); + self endon("death"); + while(isdefined(self.samtargetent) && isdefined(self getturrettarget(1)) && self getturrettarget(1) == self.samtargetent) + { + var_00 = self gettagorigin("tag_laser"); + if(!sighttracepassed(var_00,self.samtargetent.origin,0,self,self.samtargetent)) + { + self cleartargetentity(); + self.samtargetent = undefined; + break; + } + + wait 0.05; + } +} + +//Function Number: 54 +func_2E32() +{ + self endon("death"); + self laseron(); + self.laser_on = 1; + while(isdefined(self.samtargetent) && isdefined(self getturrettarget(1)) && self getturrettarget(1) == self.samtargetent) + { + wait 0.05; + } + + self laseroff(); + self.laser_on = 0; +} + +//Function Number: 55 +func_2E33() +{ + self endon("death"); + self.samtargetent endon("death"); + if(!isdefined(self.samtargetent.helitype)) + { + return; + } + + self.samtargetent waittill("crashing"); + self cleartargetentity(); + self.samtargetent = undefined; +} + +//Function Number: 56 +func_2E34() +{ + self endon("death"); + self.samtargetent endon("death"); + if(!isdefined(self.samtargetent.model)) + { + return; + } + + if(self.samtargetent.model == "vehicle_uav_static_mp") + { + self.samtargetent waittill("leaving"); + self cleartargetentity(); + self.samtargetent = undefined; + } +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/killstreaks/_autoshotgun.gsc b/MW3/Xbox/MP/maps/mp/killstreaks/_autoshotgun.gsc new file mode 100644 index 0000000..fc57ce1 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/killstreaks/_autoshotgun.gsc @@ -0,0 +1,132 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\killstreaks\_autoshotgun.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 9 + * Decompile Time: 120 ms + * Timestamp: 10/27/2023 2:26:45 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level.killstreakfuncs["auto_shotgun"] = ::func_338E; + level.killstreaksetupfuncs["auto_shotgun"] = ::func_338D; + level.killstreakfuncs["thumper"] = ::tryusethumper; + level.killstreaksetupfuncs["thumper"] = ::thumpersetup; + thread onplayerconnect(); +} + +//Function Number: 2 +func_338D() +{ + self givemaxammo("aa12_mp"); + thread saveweaponammoondeath("aa12_mp"); +} + +//Function Number: 3 +func_338E(param_00) +{ + thread func_3392("aa12_mp"); + return 1; +} + +//Function Number: 4 +thumpersetup() +{ + self givemaxammo("m79_mp"); + thread saveweaponammoondeath("m79_mp"); +} + +//Function Number: 5 +tryusethumper() +{ + thread func_3392("m79_mp"); + return 1; +} + +//Function Number: 6 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_00 thread onplayerspawned(); + } +} + +//Function Number: 7 +onplayerspawned() +{ + self endon("disconnect"); + for(;;) + { + self waittill("spawned_player"); + if(!isdefined(self.pers["ksWeapon_clip_ammo"]) || !isdefined(self.pers["ksWeapon_name"])) + { + continue; + } + + var_00 = self.pers["ksWeapon_name"]; + if(isdefined(self.pers["killstreak"]) && maps\mp\killstreaks\_killstreaks::func_2C01(self.pers["killstreak"]) != var_00) + { + self.pers["ksWeapon_name"] = undefined; + self.pers["ksWeapon_clip_ammo"] = undefined; + self.pers["ksWeapon_stock_ammo"] = undefined; + continue; + } + + maps\mp\killstreaks\_killstreaks::func_31F2(var_00); + self setweaponammostock(var_00,self.pers["ksWeapon_stock_ammo"]); + self setweaponammoclip(var_00,self.pers["ksWeapon_clip_ammo"]); + thread func_3392(var_00); + thread saveweaponammoondeath(var_00); + } +} + +//Function Number: 8 +saveweaponammoondeath(param_00) +{ + self endon("disconnect"); + self endon("got_killstreak"); + self notify("saveWeaponAmmoOnDeath"); + self endon("saveWeaponAmmoOnDeath"); + self.pers["ksWeapon_name"] = undefined; + self.pers["ksWeapon_clip_ammo"] = undefined; + self.pers["ksWeapon_stock_ammo"] = undefined; + self waittill("death"); + if(!self hasweapon(param_00)) + { + return; + } + + self.pers["ksWeapon_name"] = param_00; + self.pers["ksWeapon_clip_ammo"] = self getweaponammoclip(param_00); + self.pers["ksWeapon_stock_ammo"] = self getweaponammostock(param_00); +} + +//Function Number: 9 +func_3392(param_00) +{ + self endon("disconnect"); + self endon("death"); + self notify(param_00 + "_ammo_monitor"); + self endon(param_00 + "_ammo_monitor"); + for(;;) + { + self waittill("end_firing"); + if(self getcurrentweapon() != param_00) + { + continue; + } + + var_01 = self getweaponammoclip(param_00) + self getweaponammostock(param_00); + if(var_01) + { + continue; + } + + self takeweapon(param_00); + } +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/killstreaks/_deployablebox.gsc b/MW3/Xbox/MP/maps/mp/killstreaks/_deployablebox.gsc new file mode 100644 index 0000000..bc730a2 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/killstreaks/_deployablebox.gsc @@ -0,0 +1,757 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\killstreaks\_deployablebox.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 28 + * Decompile Time: 385 ms + * Timestamp: 10/27/2023 2:26:46 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level.killstreakfuncs["deployable_vest"] = ::tryusedeployablevest; + level.boxsettings = []; + level.boxsettings["deployable_vest"] = spawnstruct(); + level.boxsettings["deployable_vest"].weaponinfo = "deployable_vest_marker_mp"; + level.boxsettings["deployable_vest"].modelbase = "com_deploy_ballistic_vest_friend_world"; + level.boxsettings["deployable_vest"].hintstring = &"MP_LIGHT_ARMOR_PICKUP"; + level.boxsettings["deployable_vest"].capturingstring = &"MP_BOX_GETTING_VEST"; + level.boxsettings["deployable_vest"].eventstring = &"MP_DEPLOYED_VEST"; + level.boxsettings["deployable_vest"].streakname = "deployable_vest"; + level.boxsettings["deployable_vest"].splashname = "used_deployable_vest"; + level.boxsettings["deployable_vest"].shadername = "compass_objpoint_deploy_friendly"; + level.boxsettings["deployable_vest"].lifespan = 60; + level.boxsettings["deployable_vest"].xp = 50; + level.boxsettings["deployable_vest"].vodestroyed = "ballistic_vest_destroyed"; + foreach(var_01 in level.boxsettings) + { + precacheitem(var_01.weaponinfo); + precachemodel(var_01.modelbase); + precachestring(var_01.hintstring); + precachestring(var_01.capturingstring); + precachestring(var_01.eventstring); + precacheshader(var_01.shadername); + } + + precachestring(&"PLATFORM_HOLD_TO_USE"); + level._effect["box_explode_mp"] = loadfx("fire/ballistic_vest_death"); +} + +//Function Number: 2 +tryusedeployablevest(param_00) +{ + var_01 = func_311A(param_00,"deployable_vest"); + if(!isdefined(var_01) || !var_01) + { + return 0; + } + + maps\mp\_matchdata::logkillstreakevent("deployable_vest",self.origin); + return 1; +} + +//Function Number: 3 +func_311A(param_00,param_01) +{ + self endon("death"); + self.marker = undefined; + thread watchmarkerusage(param_00,param_01); + var_02 = self getcurrentweapon(); + if(func_3120(var_02)) + { + var_03 = var_02; + } + else + { + var_03 = undefined; + } + + while(func_3120(var_02)) + { + self waittill("weapon_change",var_02); + if(func_3120(var_02)) + { + var_03 = var_02; + } + } + + self notify("stopWatchingMarker"); + if(!isdefined(var_03)) + { + return 0; + } + + return !self getammocount(var_03) && self hasweapon(var_03); +} + +//Function Number: 4 +watchmarkerusage(param_00,param_01) +{ + self notify("watchMarkerUsage"); + self endon("death"); + self endon("disconnect"); + self endon("watchMarkerUsage"); + self endon("stopWatchingMarker"); + thread watchmarker(param_00,param_01); + for(;;) + { + self waittill("grenade_pullback",var_02); + if(!func_3120(var_02)) + { + continue; + } + + common_scripts\utility::_disableusability(); + func_311E(); + } +} + +//Function Number: 5 +watchmarker(param_00,param_01) +{ + self notify("watchMarker"); + self endon("watchMarker"); + self endon("spawned_player"); + self endon("disconnect"); + self endon("stopWatchingMarker"); + for(;;) + { + self waittill("grenade_fire",var_02,var_03); + if(!func_3120(var_03)) + { + continue; + } + + if(!isalive(self)) + { + var_02 delete(); + return; + } + + var_02.owner = self; + var_02.weaponname = var_03; + self.marker = var_02; + thread takeweapononstuck(var_02,var_03); + var_02 thread markeractivate(param_00,param_01,::func_3123); + } +} + +//Function Number: 6 +takeweapononstuck(param_00,param_01) +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + param_00 playsoundtoplayer("mp_vest_deployed_ui",self); + if(self hasweapon(param_01)) + { + self takeweapon(param_01); + self switchtoweapon(common_scripts\utility::getlastweapon()); + } +} + +//Function Number: 7 +func_311E() +{ + self notify("beginMarkerTracking"); + self endon("beginMarkerTracking"); + self endon("death"); + self endon("disconnect"); + common_scripts\utility::waittill_any("grenade_fire","weapon_change"); + common_scripts\utility::_enableusability(); +} + +//Function Number: 8 +markeractivate(param_00,param_01,param_02) +{ + self notify("markerActivate"); + self endon("markerActivate"); + self waittill("missile_stuck"); + var_03 = self.owner; + var_04 = self.origin; + if(!isdefined(var_03)) + { + return; + } + + var_05 = func_3121(param_01,var_04,var_03); + wait 0.05; + var_05 thread [[ param_02 ]](); + self delete(); +} + +//Function Number: 9 +func_3120(param_00) +{ + switch(param_00) + { + case "deployable_vest_marker_mp": + return 1; + + default: + return 0; + } +} + +//Function Number: 10 +func_3121(param_00,param_01,param_02) +{ + var_03 = spawn("script_model",param_01); + var_03 setmodel(level.boxsettings[param_00].modelbase); + var_03.health = 1000; + var_03.angles = param_02.angles; + var_03.boxtype = param_00; + var_03.owner = param_02; + var_03.team = param_02.team; + var_03 func_3127(); + var_03 thread box_handleownerdisconnect(); + return var_03; +} + +//Function Number: 11 +func_3123() +{ + self setcursorhint("HINT_NOICON"); + self sethintstring(level.boxsettings[self.boxtype].hintstring); + self.inuse = 0; + if(level.teambased) + { + var_00 = maps\mp\gametypes\_gameobjects::func_2A31(); + objective_add(var_00,"invisible",(0,0,0)); + objective_position(var_00,self.origin); + objective_state(var_00,"active"); + objective_icon(var_00,level.boxsettings[self.boxtype].shadername); + objective_team(var_00,self.team); + self.objidfriendly = var_00; + foreach(var_02 in level.players) + { + if(self.team == var_02.team && !var_02 maps\mp\_utility::isjuggernaut()) + { + maps\mp\_entityheadicons::func_277C(var_02,maps\mp\killstreaks\_killstreaks::getkillstreakcrateicon(level.boxsettings[self.boxtype].streakname),(0,0,20),14,14,undefined,undefined,undefined,undefined,undefined,0); + } + } + } + else + { + var_00 = maps\mp\gametypes\_gameobjects::func_2A31(); + objective_add(var_00,"invisible",(0,0,0)); + objective_position(var_00,self.origin); + objective_state(var_00,"active"); + objective_icon(var_00,level.boxsettings[self.boxtype].shadername); + objective_player(var_00,self.owner getentitynumber()); + self.objidfriendly = var_00; + if(!self.owner maps\mp\_utility::isjuggernaut()) + { + maps\mp\_entityheadicons::func_277C(self.owner,maps\mp\killstreaks\_killstreaks::getkillstreakcrateicon(level.boxsettings[self.boxtype].streakname),(0,0,20),14,14,undefined,undefined,undefined,undefined,undefined,0); + } + } + + self makeusable(); + self.isusable = 1; + self setcandamage(1); + thread func_3128(); + thread func_3129(); + thread func_312F(); + thread disablewhenjuggernaut(); + foreach(var_02 in level.players) + { + if(level.teambased) + { + if(self.team == var_02.team) + { + if(var_02 maps\mp\_utility::isjuggernaut()) + { + self disableplayeruse(var_02); + thread func_312C(var_02); + } + else + { + self enableplayeruse(var_02); + } + + thread boxthink(var_02); + } + else + { + self disableplayeruse(var_02); + } + + thread func_3126(var_02); + continue; + } + + if(isdefined(self.owner) && self.owner == var_02) + { + if(var_02 maps\mp\_utility::isjuggernaut()) + { + self disableplayeruse(var_02); + thread func_312C(var_02); + } + else + { + self enableplayeruse(var_02); + } + + thread boxthink(var_02); + continue; + } + + self disableplayeruse(var_02); + } + + level thread maps\mp\_utility::teamplayercardsplash(level.boxsettings[self.boxtype].splashname,self.owner,self.team); + thread func_3125(); +} + +//Function Number: 12 +func_3125() +{ + self endon("death"); + level waittill("connected",var_00); + var_00 waittill("spawned_player"); + if(level.teambased) + { + if(self.team == var_00.team) + { + self enableplayeruse(var_00); + thread boxthink(var_00); + maps\mp\_entityheadicons::func_277C(var_00,maps\mp\killstreaks\_killstreaks::getkillstreakcrateicon(level.boxsettings[self.boxtype].streakname),(0,0,20),14,14,undefined,undefined,undefined,undefined,undefined,0); + return; + } + + self disableplayeruse(var_00); + maps\mp\_entityheadicons::func_277C(var_00,"",(0,0,0)); + } +} + +//Function Number: 13 +func_3126(param_00) +{ + self endon("death"); + param_00 endon("disconnect"); + for(;;) + { + param_00 waittill("joined_team"); + if(level.teambased) + { + if(self.team == param_00.team) + { + self enableplayeruse(param_00); + thread boxthink(param_00); + maps\mp\_entityheadicons::func_277C(param_00,maps\mp\killstreaks\_killstreaks::getkillstreakcrateicon(level.boxsettings[self.boxtype].streakname),(0,0,20),14,14,undefined,undefined,undefined,undefined,undefined,0); + continue; + } + + self disableplayeruse(param_00); + maps\mp\_entityheadicons::func_277C(param_00,"",(0,0,0)); + } + } +} + +//Function Number: 14 +func_3127() +{ + self makeunusable(); + self.isusable = 0; + maps\mp\_entityheadicons::func_277C("none","",(0,0,0)); + if(isdefined(self.objidfriendly)) + { + maps\mp\_utility::_objective_delete(self.objidfriendly); + } +} + +//Function Number: 15 +func_3128() +{ + self.health = 999999; + self.maxhealth = 300; + self.damagetaken = 0; + for(;;) + { + self waittill("damage",var_00,var_01,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09); + if(!maps\mp\gametypes\_weapons::func_27A1(self.owner,var_01)) + { + continue; + } + + if(isdefined(var_09)) + { + switch(var_09) + { + case "concussion_grenade_mp": + case "flash_grenade_mp": + case "smoke_grenade_mp": + break; + } + } + + if(!isdefined(self)) + { + return; + } + + if(var_04 == "MOD_MELEE") + { + self.damagetaken = self.damagetaken + self.maxhealth; + } + + if(isdefined(var_08) && var_08 & level.idflags_penetration) + { + self.wasdamagedfrombulletpenetration = 1; + } + + self.wasdamaged = 1; + var_0A = var_00; + if(isplayer(var_01)) + { + var_01 maps\mp\gametypes\_damagefeedback::updatedamagefeedback("deployable_bag"); + if(var_04 == "MOD_RIFLE_BULLET" || var_04 == "MOD_PISTOL_BULLET") + { + if(var_01 maps\mp\_utility::func_27AF("specialty_armorpiercing")) + { + var_0A = var_0A + var_00 * level.armorpiercingmod; + } + } + } + + if(isdefined(var_01.owner) && isplayer(var_01.owner)) + { + var_01.owner maps\mp\gametypes\_damagefeedback::updatedamagefeedback("deployable_bag"); + } + + if(isdefined(var_09)) + { + switch(var_09) + { + case "remote_mortar_missile_mp": + case "javelin_mp": + case "stinger_mp": + case "remotemissile_projectile_mp": + case "ac130_40mm_mp": + case "ac130_105mm_mp": + self.largeprojectiledamage = 1; + var_0A = self.maxhealth + 1; + break; + + case "stealth_bomb_mp": + case "artillery_mp": + self.largeprojectiledamage = 0; + var_0A = var_0A + var_00 * 4; + break; + + case "bomb_site_mp": + self.largeprojectiledamage = 0; + var_0A = self.maxhealth + 1; + break; + } + + maps\mp\killstreaks\_killstreaks::killstreakhit(var_01,var_09,self); + } + + self.damagetaken = self.damagetaken + var_0A; + if(self.damagetaken >= self.maxhealth) + { + if(isplayer(var_01) && !isdefined(self.owner) || var_01 != self.owner) + { + var_01 thread maps\mp\gametypes\_rank::func_2AB3("kill",100,var_09,var_04); + var_01 notify("destroyed_killstreak"); + } + + if(isdefined(self.owner)) + { + self.owner thread maps\mp\_utility::func_2A60(level.boxsettings[self.boxtype].vodestroyed); + } + + self notify("death"); + return; + } + } +} + +//Function Number: 16 +func_3129() +{ + self waittill("death"); + if(!isdefined(self)) + { + return; + } + + func_3127(); + playfx(common_scripts\utility::func_539("box_explode_mp"),self.origin); + wait 0.5; + self notify("deleting"); + self delete(); +} + +//Function Number: 17 +box_handleownerdisconnect() +{ + self endon("death"); + level endon("game_ended"); + self notify("box_handleOwner"); + self endon("box_handleOwner"); + self.owner common_scripts\utility::waittill_any("disconnect","joined_team","joined_spectators"); + self notify("death"); +} + +//Function Number: 18 +boxthink(param_00) +{ + self endon("death"); + thread boxcapturethink(param_00); + for(;;) + { + self waittill("captured",var_01); + if(var_01 != param_00) + { + continue; + } + + switch(self.boxtype) + { + case "deployable_vest": + param_00 playlocalsound("ammo_crate_use"); + param_00 [[ level.killstreakfuncs["light_armor"] ]](); + break; + } + + if(isdefined(self.owner) && param_00 != self.owner) + { + self.owner thread maps\mp\gametypes\_rank::xpeventpopup(level.boxsettings[self.boxtype].eventstring); + self.owner thread maps\mp\gametypes\_rank::func_2AB3("support",level.boxsettings[self.boxtype].xp); + } + + maps\mp\_entityheadicons::func_277C(param_00,"",(0,0,0)); + self disableplayeruse(param_00); + thread func_312C(param_00); + } +} + +//Function Number: 19 +func_312C(param_00) +{ + self endon("death"); + param_00 endon("disconnect"); + param_00 waittill("death"); + if(level.teambased) + { + if(self.team == param_00.team) + { + maps\mp\_entityheadicons::func_277C(param_00,maps\mp\killstreaks\_killstreaks::getkillstreakcrateicon(level.boxsettings[self.boxtype].streakname),(0,0,20),14,14,undefined,undefined,undefined,undefined,undefined,0); + self enableplayeruse(param_00); + return; + } + + return; + } + + if(isdefined(self.owner) && self.owner == param_00) + { + maps\mp\_entityheadicons::func_277C(param_00,maps\mp\killstreaks\_killstreaks::getkillstreakcrateicon(level.boxsettings[self.boxtype].streakname),(0,0,20),14,14,undefined,undefined,undefined,undefined,undefined,0); + self enableplayeruse(param_00); + } +} + +//Function Number: 20 +boxcapturethink(param_00) +{ + while(isdefined(self)) + { + self waittill("trigger",var_01); + if(var_01 != param_00) + { + continue; + } + + if(!func_2A04(param_00,2000)) + { + continue; + } + + self notify("captured",param_00); + } +} + +//Function Number: 21 +func_312E(param_00) +{ + if(level.teambased && self.team == param_00.team) + { + return 1; + } + + return 0; +} + +//Function Number: 22 +func_312F() +{ + self endon("death"); + level endon("game_ended"); + var_00 = level.boxsettings[self.boxtype].lifespan; + while(var_00) + { + wait 1; + maps\mp\gametypes\_hostmigration::func_273E(); + if(!isdefined(self.carriedby)) + { + var_00 = max(0,var_00 - 1); + } + } + + self notify("death"); +} + +//Function Number: 23 +func_2E5C(param_00) +{ + wait 0.25; + self linkto(param_00,"tag_origin",(0,0,0),(0,0,0)); + param_00 waittill("death"); + self delete(); +} + +//Function Number: 24 +box_modelteamupdater(param_00) +{ + self endon("death"); + self hide(); + foreach(var_02 in level.players) + { + if(var_02.team == param_00) + { + self showtoplayer(var_02); + } + } + + for(;;) + { + level waittill("joined_team"); + self hide(); + foreach(var_02 in level.players) + { + if(var_02.team == param_00) + { + self showtoplayer(var_02); + } + } + } +} + +//Function Number: 25 +func_2A04(param_00,param_01) +{ + param_00 playerlinkto(self); + param_00 playerlinkedoffsetenable(); + param_00 common_scripts\utility::_disableweapon(); + param_00.boxparams = spawnstruct(); + param_00.boxparams.curprogress = 0; + param_00.boxparams.inuse = 1; + param_00.boxparams.userate = 0; + if(isdefined(param_01)) + { + param_00.boxparams.usetime = param_01; + } + else + { + param_00.boxparams.usetime = 3000; + } + + param_00 thread personalusebar(self); + var_02 = func_2A08(param_00); + if(isalive(param_00)) + { + param_00 common_scripts\utility::_enableweapon(); + param_00 unlink(); + } + + if(!isdefined(self)) + { + return 0; + } + + param_00.boxparams.inuse = 0; + param_00.boxparams.curprogress = 0; + return var_02; +} + +//Function Number: 26 +personalusebar(param_00) +{ + self endon("disconnect"); + var_01 = maps\mp\gametypes\_hud_util::createprimaryprogressbar(0,25); + var_02 = maps\mp\gametypes\_hud_util::createprimaryprogressbartext(0,25); + var_02 settext(level.boxsettings[param_00.boxtype].capturingstring); + var_03 = -1; + while(maps\mp\_utility::isreallyalive(self) && isdefined(param_00) && self.boxparams.inuse && param_00.isusable && !level.gameended) + { + if(var_03 != self.boxparams.userate) + { + if(self.boxparams.curprogress > self.boxparams.usetime) + { + self.boxparams.curprogress = self.boxparams.usetime; + } + + var_01 maps\mp\gametypes\_hud_util::updatebar(self.boxparams.curprogress / self.boxparams.usetime,1000 / self.boxparams.usetime * self.boxparams.userate); + if(!self.boxparams.userate) + { + var_01 maps\mp\gametypes\_hud_util::hideelem(); + var_02 maps\mp\gametypes\_hud_util::hideelem(); + } + else + { + var_01 maps\mp\gametypes\_hud_util::func_26BD(); + var_02 maps\mp\gametypes\_hud_util::func_26BD(); + } + } + + var_03 = self.boxparams.userate; + wait 0.05; + } + + var_01 maps\mp\gametypes\_hud_util::destroyelem(); + var_02 maps\mp\gametypes\_hud_util::destroyelem(); +} + +//Function Number: 27 +func_2A08(param_00) +{ + while(!level.gameended && isdefined(self) && maps\mp\_utility::isreallyalive(param_00) && param_00 usebuttonpressed() && param_00.boxparams.curprogress < param_00.boxparams.usetime) + { + param_00.boxparams.curprogress = param_00.boxparams.curprogress + 50 * param_00.boxparams.userate; + if(isdefined(param_00.objectivescaler)) + { + param_00.boxparams.userate = 1 * param_00.objectivescaler; + } + else + { + param_00.boxparams.userate = 1; + } + + if(param_00.boxparams.curprogress >= param_00.boxparams.usetime) + { + return maps\mp\_utility::isreallyalive(param_00); + } + + wait 0.05; + } + + return 0; +} + +//Function Number: 28 +disablewhenjuggernaut() +{ + level endon("game_ended"); + self endon("death"); + for(;;) + { + level waittill("juggernaut_equipped",var_00); + maps\mp\_entityheadicons::func_277C(var_00,"",(0,0,0)); + self disableplayeruse(var_00); + thread func_312C(var_00); + } +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/killstreaks/_emp.gsc b/MW3/Xbox/MP/maps/mp/killstreaks/_emp.gsc new file mode 100644 index 0000000..d657a77 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/killstreaks/_emp.gsc @@ -0,0 +1,558 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\killstreaks\_emp.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 21 + * Decompile Time: 356 ms + * Timestamp: 10/27/2023 2:26:47 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level._effect["emp_flash"] = loadfx("explosions/emp_flash_mp"); + level.teamemped["allies"] = 0; + level.teamemped["axis"] = 0; + level.empplayer = undefined; + level.emptimeout = 60; + level.emptimeremaining = int(level.emptimeout); + if(level.teambased) + { + level thread func_30E6(); + } + else + { + level thread func_30E7(); + } + + level.killstreakfuncs["emp"] = ::func_30E0; + level thread onplayerconnect(); +} + +//Function Number: 2 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_00 thread onplayerspawned(); + } +} + +//Function Number: 3 +onplayerspawned() +{ + self endon("disconnect"); + for(;;) + { + self waittill("spawned_player"); + if((level.teambased && level.teamemped[self.team]) || !level.teambased && isdefined(level.empplayer) && level.empplayer != self) + { + self setempjammed(1); + } + } +} + +//Function Number: 4 +func_30E0(param_00) +{ + if(!maps\mp\_utility::func_2DF3()) + { + return 0; + } + + var_01 = self.pers["team"]; + var_02 = level.otherteam[var_01]; + if(level.teambased) + { + thread emp_jamteam(var_02); + } + else + { + thread emp_jamplayers(self); + } + + maps\mp\_matchdata::logkillstreakevent("emp",self.origin); + self notify("used_emp"); + return 1; +} + +//Function Number: 5 +emp_jamteam(param_00) +{ + level endon("game_ended"); + thread maps\mp\_utility::teamplayercardsplash("used_emp",self); + level notify("EMP_JamTeam" + param_00); + level endon("EMP_JamTeam" + param_00); + foreach(var_02 in level.players) + { + var_02 playlocalsound("emp_activate"); + if(var_02.team != param_00) + { + continue; + } + + if(var_02 maps\mp\_utility::func_27AF("specialty_localjammer")) + { + var_02 radarjamoff(); + } + } + + visionsetnaked("coup_sunblind",0.1); + thread func_30E4(); + wait 0.1; + visionsetnaked("coup_sunblind",0); + if(isdefined(level.nukedetonated)) + { + visionsetnaked(level.nukevisionset,3); + } + else + { + visionsetnaked("",3); + } + + level.teamemped[param_00] = 1; + level notify("emp_update"); + level func_30E8(self,param_00); + level thread func_80F9(); + maps\mp\gametypes\_hostmigration::func_2740(level.emptimeout); + level.teamemped[param_00] = 0; + foreach(var_02 in level.players) + { + if(var_02.team != param_00) + { + continue; + } + + if(var_02 maps\mp\_utility::func_27AF("specialty_localjammer")) + { + var_02 radarjamon(); + } + } + + level notify("emp_update"); +} + +//Function Number: 6 +emp_jamplayers(param_00) +{ + level notify("EMP_JamPlayers"); + level endon("EMP_JamPlayers"); + foreach(var_02 in level.players) + { + var_02 playlocalsound("emp_activate"); + if(var_02 == param_00) + { + continue; + } + + if(var_02 maps\mp\_utility::func_27AF("specialty_localjammer")) + { + var_02 radarjamoff(); + } + } + + visionsetnaked("coup_sunblind",0.1); + thread func_30E4(); + wait 0.1; + visionsetnaked("coup_sunblind",0); + if(isdefined(level.nukedetonated)) + { + visionsetnaked(level.nukevisionset,3); + } + else + { + visionsetnaked("",3); + } + + level notify("emp_update"); + level.empplayer = param_00; + level.empplayer thread func_30E3(); + level func_30E8(param_00); + level notify("emp_update"); + level thread func_80F9(); + maps\mp\gametypes\_hostmigration::func_2740(level.emptimeout); + foreach(var_02 in level.players) + { + if(var_02 == param_00) + { + continue; + } + + if(var_02 maps\mp\_utility::func_27AF("specialty_localjammer")) + { + var_02 radarjamon(); + } + } + + level.empplayer = undefined; + level notify("emp_update"); + level notify("emp_ended"); +} + +//Function Number: 7 +func_80F9() +{ + level notify("keepEMPTimeRemaining"); + level endon("keepEMPTimeRemaining"); + level endon("emp_ended"); + level.emptimeremaining = int(level.emptimeout); + while(level.emptimeremaining) + { + wait 1; + level.emptimeremaining--; + } +} + +//Function Number: 8 +func_30E3() +{ + level endon("EMP_JamPlayers"); + level endon("emp_ended"); + self waittill("disconnect"); + level notify("emp_update"); +} + +//Function Number: 9 +func_30E4() +{ + foreach(var_01 in level.players) + { + var_02 = anglestoforward(var_01.angles); + var_02 = (var_02[0],var_02[1],0); + var_02 = vectornormalize(var_02); + var_03 = 20000; + var_04 = spawn("script_model",var_01.origin + (0,0,8000) + var_02 * var_03); + var_04 setmodel("tag_origin"); + var_04.angles = var_04.angles + (270,0,0); + var_04 thread empeffect(var_01); + } +} + +//Function Number: 10 +empeffect(param_00) +{ + param_00 endon("disconnect"); + wait 0.5; + playfxontagforclients(level._effect["emp_flash"],self,"tag_origin",param_00); +} + +//Function Number: 11 +func_30E6() +{ + level endon("game_ended"); + for(;;) + { + level common_scripts\utility::waittill_either("joined_team","emp_update"); + foreach(var_01 in level.players) + { + if(var_01.team == "spectator") + { + continue; + } + + if(!level.teamemped[var_01.team] && !var_01 maps\mp\_utility::func_27E5()) + { + var_01 setempjammed(0); + continue; + } + + var_01 setempjammed(1); + } + } +} + +//Function Number: 12 +func_30E7() +{ + level endon("game_ended"); + for(;;) + { + level common_scripts\utility::waittill_either("joined_team","emp_update"); + foreach(var_01 in level.players) + { + if(var_01.team == "spectator") + { + continue; + } + + if(isdefined(level.empplayer) && level.empplayer != var_01) + { + var_01 setempjammed(1); + continue; + } + + if(!var_01 maps\mp\_utility::func_27E5()) + { + var_01 setempjammed(0); + } + } + } +} + +//Function Number: 13 +func_30E8(param_00,param_01) +{ + thread destroyactivehelis(param_00,param_01); + thread destroyactivelittlebirds(param_00,param_01); + thread destroyactiveturrets(param_00,param_01); + thread destroyactiverockets(param_00,param_01); + thread destroyactiveuavs(param_00,param_01); + thread destroyactiveimss(param_00,param_01); + thread destroyactiveugvs(param_00,param_01); + thread destroyactiveac130(param_00,param_01); +} + +//Function Number: 14 +destroyactivehelis(param_00,param_01) +{ + var_02 = "MOD_EXPLOSIVE"; + var_03 = "killstreak_emp_mp"; + var_04 = 5000; + var_05 = (0,0,0); + var_06 = (0,0,0); + var_07 = ""; + var_08 = ""; + var_09 = ""; + var_0A = undefined; + foreach(var_0C in level.helis) + { + if(level.teambased && isdefined(param_01)) + { + if(isdefined(var_0C.team) && var_0C.team != param_01) + { + continue; + } + } + else if(isdefined(var_0C.owner) && var_0C.owner == param_00) + { + continue; + } + + var_0C notify("damage",var_04,param_00,var_05,var_06,var_02,var_07,var_08,var_09,var_0A,var_03); + wait 0.05; + } +} + +//Function Number: 15 +destroyactivelittlebirds(param_00,param_01) +{ + var_02 = "MOD_EXPLOSIVE"; + var_03 = "killstreak_emp_mp"; + var_04 = 5000; + var_05 = (0,0,0); + var_06 = (0,0,0); + var_07 = ""; + var_08 = ""; + var_09 = ""; + var_0A = undefined; + foreach(var_0C in level.littlebirds) + { + if(level.teambased && isdefined(param_01)) + { + if(isdefined(var_0C.team) && var_0C.team != param_01) + { + continue; + } + } + else if(isdefined(var_0C.owner) && var_0C.owner == param_00) + { + continue; + } + + var_0C notify("damage",var_04,param_00,var_05,var_06,var_02,var_07,var_08,var_09,var_0A,var_03); + wait 0.05; + } +} + +//Function Number: 16 +destroyactiveturrets(param_00,param_01) +{ + var_02 = "MOD_EXPLOSIVE"; + var_03 = "killstreak_emp_mp"; + var_04 = 5000; + var_05 = (0,0,0); + var_06 = (0,0,0); + var_07 = ""; + var_08 = ""; + var_09 = ""; + var_0A = undefined; + foreach(var_0C in level.turrets) + { + if(level.teambased && isdefined(param_01)) + { + if(isdefined(var_0C.team) && var_0C.team != param_01) + { + continue; + } + } + else if(isdefined(var_0C.owner) && var_0C.owner == param_00) + { + continue; + } + + var_0C notify("damage",var_04,param_00,var_05,var_06,var_02,var_07,var_08,var_09,var_0A,var_03); + wait 0.05; + } +} + +//Function Number: 17 +destroyactiverockets(param_00,param_01) +{ + var_02 = "MOD_EXPLOSIVE"; + var_03 = "killstreak_emp_mp"; + var_04 = 5000; + var_05 = (0,0,0); + var_06 = (0,0,0); + var_07 = ""; + var_08 = ""; + var_09 = ""; + var_0A = undefined; + foreach(var_0C in level.rockets) + { + if(level.teambased && isdefined(param_01)) + { + if(isdefined(var_0C.team) && var_0C.team != param_01) + { + continue; + } + } + else if(isdefined(var_0C.owner) && var_0C.owner == param_00) + { + continue; + } + + playfx(level.remotemissile_fx["explode"],var_0C.origin); + var_0C delete(); + wait 0.05; + } +} + +//Function Number: 18 +destroyactiveuavs(param_00,param_01) +{ + var_02 = "MOD_EXPLOSIVE"; + var_03 = "killstreak_emp_mp"; + var_04 = 5000; + var_05 = (0,0,0); + var_06 = (0,0,0); + var_07 = ""; + var_08 = ""; + var_09 = ""; + var_0A = undefined; + var_0B = level.uavmodels; + if(level.teambased && isdefined(param_01)) + { + var_0B = level.uavmodels[param_01]; + } + + foreach(var_0D in var_0B) + { + if(level.teambased && isdefined(param_01)) + { + } + else if(isdefined(var_0D.owner) && var_0D.owner == param_00) + { + continue; + } + + var_0D notify("damage",var_04,param_00,var_05,var_06,var_02,var_07,var_08,var_09,var_0A,var_03); + wait 0.05; + } +} + +//Function Number: 19 +destroyactiveimss(param_00,param_01) +{ + var_02 = "MOD_EXPLOSIVE"; + var_03 = "killstreak_emp_mp"; + var_04 = 5000; + var_05 = (0,0,0); + var_06 = (0,0,0); + var_07 = ""; + var_08 = ""; + var_09 = ""; + var_0A = undefined; + foreach(var_0C in level.ims) + { + if(level.teambased && isdefined(param_01)) + { + if(isdefined(var_0C.team) && var_0C.team != param_01) + { + continue; + } + } + else if(isdefined(var_0C.owner) && var_0C.owner == param_00) + { + continue; + } + + var_0C notify("damage",var_04,param_00,var_05,var_06,var_02,var_07,var_08,var_09,var_0A,var_03); + wait 0.05; + } +} + +//Function Number: 20 +destroyactiveugvs(param_00,param_01) +{ + var_02 = "MOD_EXPLOSIVE"; + var_03 = "killstreak_emp_mp"; + var_04 = 5000; + var_05 = (0,0,0); + var_06 = (0,0,0); + var_07 = ""; + var_08 = ""; + var_09 = ""; + var_0A = undefined; + foreach(var_0C in level.ugvs) + { + if(level.teambased && isdefined(param_01)) + { + if(isdefined(var_0C.team) && var_0C.team != param_01) + { + continue; + } + } + else if(isdefined(var_0C.owner) && var_0C.owner == param_00) + { + continue; + } + + var_0C notify("damage",var_04,param_00,var_05,var_06,var_02,var_07,var_08,var_09,var_0A,var_03); + wait 0.05; + } +} + +//Function Number: 21 +destroyactiveac130(param_00,param_01) +{ + var_02 = "MOD_EXPLOSIVE"; + var_03 = "killstreak_emp_mp"; + var_04 = 5000; + var_05 = (0,0,0); + var_06 = (0,0,0); + var_07 = ""; + var_08 = ""; + var_09 = ""; + var_0A = undefined; + if(level.teambased && isdefined(param_01)) + { + if(isdefined(level.ac130player) && isdefined(level.ac130player.team) && level.ac130player.team == param_01) + { + level.ac130.planemodel notify("damage",var_04,param_00,var_05,var_06,var_02,var_07,var_08,var_09,var_0A,var_03); + return; + } + + return; + } + + if(isdefined(level.ac130player)) + { + if(!isdefined(level.ac130.owner) || isdefined(level.ac130.owner) && level.ac130.owner != param_00) + { + level.ac130.planemodel notify("damage",var_04,param_00,var_05,var_06,var_02,var_07,var_08,var_09,var_0A,var_03); + return; + } + } +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/killstreaks/_escortairdrop.gsc b/MW3/Xbox/MP/maps/mp/killstreaks/_escortairdrop.gsc new file mode 100644 index 0000000..c9521c3 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/killstreaks/_escortairdrop.gsc @@ -0,0 +1,989 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\killstreaks\_escortairdrop.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 33 + * Decompile Time: 480 ms + * Timestamp: 10/27/2023 2:26:49 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level.ospreysettings = []; + level.ospreysettings["escort_airdrop"] = spawnstruct(); + level.ospreysettings["escort_airdrop"].vehicle = "osprey_mp"; + level.ospreysettings["escort_airdrop"].modelbase = "vehicle_v22_osprey_body_mp"; + level.ospreysettings["escort_airdrop"].modelblades = "vehicle_v22_osprey_blades_mp"; + level.ospreysettings["escort_airdrop"].taghatchl = "tag_le_door_attach"; + level.ospreysettings["escort_airdrop"].taghatchr = "tag_ri_door_attach"; + level.ospreysettings["escort_airdrop"].tagdropcrates = "tag_turret_attach"; + level.ospreysettings["escort_airdrop"].prompt = &"MP_DEFEND_AIRDROP_PACKAGES"; + level.ospreysettings["escort_airdrop"].name = &"KILLSTREAKS_ESCORT_AIRDROP"; + level.ospreysettings["escort_airdrop"].weaponinfo = "osprey_minigun_mp"; + level.ospreysettings["escort_airdrop"].helitype = "osprey"; + level.ospreysettings["escort_airdrop"].droptype = "airdrop_escort"; + level.ospreysettings["escort_airdrop"].maxhealth = level.heli_maxhealth * 2; + level.ospreysettings["escort_airdrop"].timeout = 60; + level.ospreysettings["osprey_gunner"] = spawnstruct(); + level.ospreysettings["osprey_gunner"].vehicle = "osprey_player_mp"; + level.ospreysettings["osprey_gunner"].modelbase = "vehicle_v22_osprey_body_mp"; + level.ospreysettings["osprey_gunner"].modelblades = "vehicle_v22_osprey_blades_mp"; + level.ospreysettings["osprey_gunner"].taghatchl = "tag_le_door_attach"; + level.ospreysettings["osprey_gunner"].taghatchr = "tag_ri_door_attach"; + level.ospreysettings["osprey_gunner"].tagdropcrates = "tag_turret_attach"; + level.ospreysettings["osprey_gunner"].prompt = &"MP_DEFEND_AIRDROP_PACKAGES"; + level.ospreysettings["osprey_gunner"].name = &"KILLSTREAKS_OSPREY_GUNNER"; + level.ospreysettings["osprey_gunner"].weaponinfo = "osprey_player_minigun_mp"; + level.ospreysettings["osprey_gunner"].helitype = "osprey_gunner"; + level.ospreysettings["osprey_gunner"].droptype = "airdrop_osprey_gunner"; + level.ospreysettings["osprey_gunner"].maxhealth = level.heli_maxhealth * 2; + level.ospreysettings["osprey_gunner"].timeout = 75; + foreach(var_01 in level.ospreysettings) + { + precachevehicle(var_01.vehicle); + precacheitem(var_01.weaponinfo); + precachemodel(var_01.modelbase); + precachemodel(var_01.modelblades); + precachestring(var_01.prompt); + precachestring(var_01.name); + level.chopper_fx["explode"]["death"][var_01.modelbase] = loadfx("explosions/helicopter_explosion_osprey"); + level.chopper_fx["explode"]["air_death"][var_01.modelbase] = loadfx("explosions/helicopter_explosion_osprey_air_mp"); + level.chopper_fx["anim"]["blades_anim_up"][var_01.modelbase] = loadfx("props/osprey_blades_anim_up"); + level.chopper_fx["anim"]["blades_anim_down"][var_01.modelbase] = loadfx("props/osprey_blades_anim_down"); + level.chopper_fx["anim"]["blades_static_up"][var_01.modelbase] = loadfx("props/osprey_blades_up"); + level.chopper_fx["anim"]["blades_static_down"][var_01.modelbase] = loadfx("props/osprey_blades_default"); + level.chopper_fx["anim"]["hatch_left_static_up"][var_01.modelbase] = loadfx("props/osprey_bottom_door_left_default"); + level.chopper_fx["anim"]["hatch_left_anim_down"][var_01.modelbase] = loadfx("props/osprey_bottom_door_left_anim_open"); + level.chopper_fx["anim"]["hatch_left_static_down"][var_01.modelbase] = loadfx("props/osprey_bottom_door_left_up"); + level.chopper_fx["anim"]["hatch_left_anim_up"][var_01.modelbase] = loadfx("props/osprey_bottom_door_left_anim_close"); + level.chopper_fx["anim"]["hatch_right_static_up"][var_01.modelbase] = loadfx("props/osprey_bottom_door_right_default"); + level.chopper_fx["anim"]["hatch_right_anim_down"][var_01.modelbase] = loadfx("props/osprey_bottom_door_right_anim_open"); + level.chopper_fx["anim"]["hatch_right_static_down"][var_01.modelbase] = loadfx("props/osprey_bottom_door_right_up"); + level.chopper_fx["anim"]["hatch_right_anim_up"][var_01.modelbase] = loadfx("props/osprey_bottom_door_right_anim_close"); + } + + level.air_support_locs = []; + level.killstreakfuncs["escort_airdrop"] = ::tryuseescortairdrop; + level.killstreakfuncs["osprey_gunner"] = ::tryuseospreygunner; +} + +//Function Number: 2 +tryuseescortairdrop(param_00,param_01) +{ + var_02 = 1; + if(isdefined(self.laststand) && !maps\mp\_utility::func_27AF("specialty_finalstand")) + { + self iprintlnbold(&"MP_UNAVILABLE_IN_LASTSTAND"); + return 0; + } + else if(isdefined(level.civilianjetflyby)) + { + self iprintlnbold(&"MP_CIVILIAN_AIR_TRAFFIC"); + return 0; + } + else if(isdefined(level.chopper)) + { + self iprintlnbold(&"MP_AIR_SPACE_TOO_CROWDED"); + return 0; + } + else if(maps\mp\_utility::func_2BEC() >= maps\mp\_utility::maxvehiclesallowed() || level.fauxvehiclecount + var_02 >= maps\mp\_utility::maxvehiclesallowed()) + { + self iprintlnbold(&"MP_TOO_MANY_VEHICLES"); + return 0; + } + else if(maps\mp\_utility::isusingremote()) + { + return 0; + } + + if(maps\mp\_utility::func_2BE7()) + { + return 0; + } + + if(maps\mp\_utility::func_27E5()) + { + return 0; + } + + maps\mp\_utility::func_80C7(); + var_04 = maps\mp\killstreaks\_airdrop::beginairdropviamarker(param_00,param_01,"escort_airdrop"); + if(!isdefined(var_04) || !var_04) + { + self notify("markerDetermined"); + maps\mp\_utility::func_80C8(); + return 0; + } + + maps\mp\_matchdata::logkillstreakevent("escort_airdrop",self.origin); + return 1; +} + +//Function Number: 3 +tryuseospreygunner(param_00,param_01) +{ + var_02 = 1; + if(isdefined(self.laststand) && !maps\mp\_utility::func_27AF("specialty_finalstand")) + { + self iprintlnbold(&"MP_UNAVILABLE_IN_LASTSTAND"); + return 0; + } + else if(isdefined(level.civilianjetflyby)) + { + self iprintlnbold(&"MP_CIVILIAN_AIR_TRAFFIC"); + return 0; + } + else if(isdefined(level.chopper)) + { + self iprintlnbold(&"MP_AIR_SPACE_TOO_CROWDED"); + return 0; + } + else if(maps\mp\_utility::func_2BEC() >= maps\mp\_utility::maxvehiclesallowed() || level.fauxvehiclecount + var_02 >= maps\mp\_utility::maxvehiclesallowed()) + { + self iprintlnbold(&"MP_TOO_MANY_VEHICLES"); + return 0; + } + else if(maps\mp\_utility::isusingremote()) + { + return 0; + } + + if(maps\mp\_utility::func_2BE7()) + { + return 0; + } + + if(maps\mp\_utility::func_27E5()) + { + return 0; + } + + maps\mp\_utility::func_80C7(); + var_04 = func_2EAF(param_00,"osprey_gunner","compass_objpoint_osprey_friendly","compass_objpoint_osprey_enemy",&"MP_SELECT_MOBILE_MORTAR_LOCATION"); + if(!isdefined(var_04) || !var_04) + { + maps\mp\_utility::func_80C8(); + return 0; + } + + maps\mp\_matchdata::logkillstreakevent("osprey_gunner",self.origin); + return 1; +} + +//Function Number: 4 +finishsupportescortusage(param_00,param_01,param_02,param_03) +{ + self notify("used"); + var_04 = (0,param_02,0); + var_05 = 12000; + var_06 = getent("airstrikeheight","targetname"); + var_07 = var_06.origin[2]; + var_08 = level.heli_start_nodes[randomint(level.heli_start_nodes.size)]; + var_09 = var_08.origin; + var_0A = (param_01[0],param_01[1],var_07); + var_0B = param_01 + anglestoforward(var_04) * var_05; + var_0C = vectortoangles(var_0A - var_09); + var_0D = param_01; + param_01 = (param_01[0],param_01[1],var_07); + var_0E = func_2EB4(self,param_00,var_09,var_0C,param_01,param_03); + var_09 = var_08; + func_2EB7(param_00,var_0E,var_09,var_0A,var_0B,var_07,var_0D); +} + +//Function Number: 5 +func_2EAD(param_00,param_01,param_02,param_03) +{ + self notify("used"); + var_04 = (0,param_02,0); + var_05 = 12000; + var_06 = getent("airstrikeheight","targetname"); + var_07 = var_06.origin[2]; + var_08 = level.heli_start_nodes[randomint(level.heli_start_nodes.size)]; + var_09 = var_08.origin; + var_0A = (param_01[0],param_01[1],var_07); + var_0B = param_01 + anglestoforward(var_04) * var_05; + var_0C = vectortoangles(var_0A - var_09); + param_01 = (param_01[0],param_01[1],var_07); + var_0D = func_2EB4(self,param_00,var_09,var_0C,param_01,param_03); + var_09 = var_08; + useospreygunner(param_00,var_0D,var_09,var_0A,var_0B,var_07); +} + +//Function Number: 6 +func_2EAE() +{ + self waittill("stop_location_selection",var_00); + switch(var_00) + { + case "emp": + case "weapon_change": + case "disconnect": + case "cancel_location": + case "death": + self notify("customCancelLocation"); + break; + } +} + +//Function Number: 7 +func_2EAF(param_00,param_01,param_02,param_03,param_04) +{ + self endon("customCancelLocation"); + var_05 = undefined; + var_06 = level.mapsize / 6.46875; + if(level.splitscreen) + { + var_06 = var_06 * 1.5; + } + + maps\mp\_utility::_beginlocationselection(param_01,"map_artillery_selector",0,500); + thread func_2EAE(); + self waittill("confirm_location",var_07,var_08); + maps\mp\_utility::func_2EB1(0); + maps\mp\_utility::setusingremote(param_01); + var_09 = maps\mp\killstreaks\_killstreaks::initridekillstreak(param_01); + if(var_09 != "success") + { + if(var_09 != "disconnect") + { + maps\mp\_utility::clearusingremote(); + } + + return 0; + } + + if(isdefined(level.chopper)) + { + maps\mp\_utility::clearusingremote(); + self iprintlnbold(&"MP_AIR_SPACE_TOO_CROWDED"); + return 0; + } + else if(maps\mp\_utility::func_2BEC() >= maps\mp\_utility::maxvehiclesallowed() || level.fauxvehiclecount >= maps\mp\_utility::maxvehiclesallowed()) + { + maps\mp\_utility::clearusingremote(); + self iprintlnbold(&"MP_TOO_MANY_VEHICLES"); + return 0; + } + + thread func_2EAD(param_00,var_07,var_08,param_01); + return 1; +} + +//Function Number: 8 +func_2EB2(param_00,param_01,param_02,param_03) +{ + var_04 = maps\mp\gametypes\_hud_util::createfontstring("bigfixed",0.5); + var_04 maps\mp\gametypes\_hud_util::setpoint("CENTER","CENTER",0,-150); + var_04 settext(param_02); + self.locationobjectives = []; + for(var_05 = 0;var_05 < param_03;var_05++) + { + self.locationobjectives[var_05] = maps\mp\gametypes\_gameobjects::func_2A31(); + objective_add(self.locationobjectives[var_05],"invisible",(0,0,0)); + objective_position(self.locationobjectives[var_05],level.air_support_locs[level.script][var_05]["origin"]); + objective_state(self.locationobjectives[var_05],"active"); + objective_player(self.locationobjectives[var_05],self getentitynumber()); + if(level.air_support_locs[level.script][var_05]["in_use"] == 1) + { + objective_icon(self.locationobjectives[var_05],param_01); + continue; + } + + objective_icon(self.locationobjectives[var_05],param_00); + } + + common_scripts\utility::waittill_any("cancel_location","picked_location","stop_location_selection"); + var_04 maps\mp\gametypes\_hud_util::destroyelem(); + for(var_05 = 0;var_05 < param_03;var_05++) + { + maps\mp\_utility::_objective_delete(self.locationobjectives[var_05]); + } +} + +//Function Number: 9 +func_2EB4(param_00,param_01,param_02,param_03,param_04,param_05) +{ + var_06 = spawnhelicopter(param_00,param_02,param_03,level.ospreysettings[param_05].vehicle,level.ospreysettings[param_05].modelbase); + if(!isdefined(var_06)) + { + return undefined; + } + + var_06.ospreytype = param_05; + var_06.heli_type = level.ospreysettings[param_05].modelbase; + var_06.helitype = level.ospreysettings[param_05].helitype; + var_06.attractor = missile_createattractorent(var_06,level.heli_attract_strength,level.heli_attract_range); + var_06.lifeid = param_01; + var_06.team = param_00.pers["team"]; + var_06.pers["team"] = param_00.pers["team"]; + var_06.owner = param_00; + var_06.maxhealth = level.ospreysettings[param_05].maxhealth; + var_06.zoffset = (0,0,0); + var_06.targeting_delay = level.heli_targeting_delay; + var_06.primarytarget = undefined; + var_06.secondarytarget = undefined; + var_06.attacker = undefined; + var_06.currentstate = "ok"; + var_06.droptype = level.ospreysettings[param_05].droptype; + level.chopper = var_06; + var_06 maps\mp\killstreaks\_helicopter::func_2C47(); + var_06 thread maps\mp\killstreaks\_helicopter::heli_flares_monitor(); + var_06 thread maps\mp\killstreaks\_helicopter::heli_leave_on_disconnect(param_00); + var_06 thread maps\mp\killstreaks\_helicopter::func_2C2B(param_00); + var_06 thread maps\mp\killstreaks\_helicopter::heli_leave_on_gameended(param_00); + var_07 = level.ospreysettings[param_05].timeout; + var_06 thread maps\mp\killstreaks\_helicopter::func_2C2E(var_07); + var_06 thread maps\mp\killstreaks\_helicopter::func_2447(); + var_06 thread maps\mp\killstreaks\_helicopter::func_2C22(); + var_06 thread maps\mp\killstreaks\_helicopter::func_2C14(); + var_06 thread func_2EB6(); + var_06 thread airshipfxonconnect(); + if(param_05 == "escort_airdrop") + { + var_08 = var_06.origin + anglestoforward(var_06.angles) * -200 + anglestoright(var_06.angles) * -200 + (0,0,200); + var_06.killcament = spawn("script_model",var_08); + var_06.killcament setscriptmoverkillcam("explosive"); + var_06.killcament linkto(var_06,"tag_origin"); + } + + return var_06; +} + +//Function Number: 10 +func_2EB6() +{ + self endon("death"); + wait 0.05; + playfxontag(level.chopper_fx["light"]["tail"],self,"tag_light_tail"); + wait 0.05; + playfxontag(level.chopper_fx["light"]["belly"],self,"tag_light_belly"); + wait 0.05; + playfxontag(level.chopper_fx["anim"]["blades_static_down"][level.ospreysettings[self.ospreytype].modelbase],self,"TAG_BLADES_ATTACH"); + wait 0.05; + playfxontag(level.chopper_fx["anim"]["hatch_left_static_up"][level.ospreysettings[self.ospreytype].modelbase],self,level.ospreysettings[self.ospreytype].taghatchl); + wait 0.05; + playfxontag(level.chopper_fx["anim"]["hatch_right_static_up"][level.ospreysettings[self.ospreytype].modelbase],self,level.ospreysettings[self.ospreytype].taghatchr); +} + +//Function Number: 11 +airshipfxonconnect() +{ + self endon("death"); + level endon("game_ended"); + for(;;) + { + level waittill("connected",var_00); + thread airshipfxonclient(var_00); + } +} + +//Function Number: 12 +airshipfxonclient(param_00) +{ + self endon("death"); + level endon("game_ended"); + param_00 endon("disconnect"); + wait 0.05; + playfxontagforclients(level.chopper_fx["light"]["tail"],self,"tag_light_tail",param_00); + wait 0.05; + playfxontagforclients(level.chopper_fx["light"]["belly"],self,"tag_light_belly",param_00); + if(isdefined(self.propsstate)) + { + if(self.propsstate == "up") + { + wait 0.05; + playfxontagforclients(level.chopper_fx["anim"]["blades_static_up"][level.ospreysettings[self.ospreytype].modelbase],self,"TAG_BLADES_ATTACH",param_00); + } + else + { + wait 0.05; + playfxontagforclients(level.chopper_fx["anim"]["blades_static_down"][level.ospreysettings[self.ospreytype].modelbase],self,"TAG_BLADES_ATTACH",param_00); + } + } + else + { + wait 0.05; + playfxontagforclients(level.chopper_fx["anim"]["blades_static_down"][level.ospreysettings[self.ospreytype].modelbase],self,"TAG_BLADES_ATTACH",param_00); + } + + if(isdefined(self.hatchstate)) + { + if(self.hatchstate == "down") + { + wait 0.05; + playfxontagforclients(level.chopper_fx["anim"]["hatch_left_static_down"][level.ospreysettings[self.ospreytype].modelbase],self,level.ospreysettings[self.ospreytype].taghatchl,param_00); + wait 0.05; + playfxontagforclients(level.chopper_fx["anim"]["hatch_right_static_down"][level.ospreysettings[self.ospreytype].modelbase],self,level.ospreysettings[self.ospreytype].taghatchr,param_00); + return; + } + + wait 0.05; + playfxontagforclients(level.chopper_fx["anim"]["hatch_left_static_up"][level.ospreysettings[self.ospreytype].modelbase],self,level.ospreysettings[self.ospreytype].taghatchl,param_00); + wait 0.05; + playfxontagforclients(level.chopper_fx["anim"]["hatch_right_static_up"][level.ospreysettings[self.ospreytype].modelbase],self,level.ospreysettings[self.ospreytype].taghatchr,param_00); + return; + } + + wait 0.05; + playfxontagforclients(level.chopper_fx["anim"]["hatch_left_static_up"][level.ospreysettings[self.ospreytype].modelbase],self,level.ospreysettings[self.ospreytype].taghatchl,param_00); + wait 0.05; + playfxontagforclients(level.chopper_fx["anim"]["hatch_right_static_up"][level.ospreysettings[self.ospreytype].modelbase],self,level.ospreysettings[self.ospreytype].taghatchr,param_00); +} + +//Function Number: 13 +func_2EB7(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + param_01 thread airshipflydefense(self,param_02,param_03,param_04,param_05,param_06); +} + +//Function Number: 14 +useospreygunner(param_00,param_01,param_02,param_03,param_04,param_05) +{ + thread ridegunner(param_00,param_01); + param_01 thread func_2EC8(self,param_02,param_03,param_04,param_05); +} + +//Function Number: 15 +ridegunner(param_00,param_01) +{ + self endon("disconnect"); + param_01 endon("helicopter_done"); + thread maps\mp\_utility::teamplayercardsplash("used_osprey_gunner",self); + maps\mp\_utility::_giveweapon("heli_remote_mp"); + self switchtoweapon("heli_remote_mp"); + if(getdvarint("camera_thirdPerson")) + { + maps\mp\_utility::setthirdpersondof(0); + } + + param_01 vehicleturretcontrolon(self); + self playerlinkweaponviewtodelta(param_01,"tag_player",1,0,0,0,0,1); + self setplayerangles(param_01 gettagangles("tag_player")); + param_01 thread maps\mp\killstreaks\_helicopter::func_2C17(); + thread maps\mp\killstreaks\_helicopter::func_2BFD(param_01); + param_01.gunner = self; + self.heliridelifeid = param_00; + thread func_2ECB(param_01); + thread waitsetthermal(1,param_01); + thread maps\mp\_utility::reinitializethermal(param_01); + for(;;) + { + param_01 waittill("turret_fire"); + param_01 fireweapon(); + earthquake(0.2,1,param_01.origin,1000); + } +} + +//Function Number: 16 +waitsetthermal(param_00,param_01) +{ + self endon("disconnect"); + param_01 endon("death"); + param_01 endon("helicopter_done"); + param_01 endon("crashing"); + param_01 endon("leaving"); + wait param_00; + self visionsetthermalforplayer(level.ac130.enhanced_vision,0); + self.lastvisionsetthermal = level.ac130.enhanced_vision; + self thermalvisionon(); + self thermalvisionfofoverlayon(); + thread maps\mp\killstreaks\_helicopter::thermalvision(param_01); +} + +//Function Number: 17 +func_2EBB(param_00) +{ + self endon("disconnect"); + param_00 endon("helicopter_done"); + self.escort_prompt = maps\mp\gametypes\_hud_util::createfontstring("bigfixed",1.5); + self.escort_prompt maps\mp\gametypes\_hud_util::setpoint("CENTER","CENTER",0,-150); + self.escort_prompt settext(level.ospreysettings[param_00.ospreytype].prompt); + wait 6; + if(isdefined(self.escort_prompt)) + { + self.escort_prompt maps\mp\gametypes\_hud_util::destroyelem(); + } +} + +//Function Number: 18 +airshippitchpropsup() +{ + self endon("crashing"); + self endon("death"); + stopfxontag(level.chopper_fx["anim"]["blades_static_down"][level.ospreysettings[self.ospreytype].modelbase],self,"TAG_BLADES_ATTACH"); + playfxontag(level.chopper_fx["anim"]["blades_anim_up"][level.ospreysettings[self.ospreytype].modelbase],self,"TAG_BLADES_ATTACH"); + wait 1; + if(isdefined(self)) + { + playfxontag(level.chopper_fx["anim"]["blades_static_up"][level.ospreysettings[self.ospreytype].modelbase],self,"TAG_BLADES_ATTACH"); + self.propsstate = "up"; + } +} + +//Function Number: 19 +func_2EBE() +{ + self endon("crashing"); + self endon("death"); + stopfxontag(level.chopper_fx["anim"]["blades_static_up"][level.ospreysettings[self.ospreytype].modelbase],self,"TAG_BLADES_ATTACH"); + playfxontag(level.chopper_fx["anim"]["blades_anim_down"][level.ospreysettings[self.ospreytype].modelbase],self,"TAG_BLADES_ATTACH"); + wait 1; + if(isdefined(self)) + { + playfxontag(level.chopper_fx["anim"]["blades_static_down"][level.ospreysettings[self.ospreytype].modelbase],self,"TAG_BLADES_ATTACH"); + self.propsstate = "down"; + } +} + +//Function Number: 20 +airshippitchhatchup() +{ + self endon("crashing"); + self endon("death"); + stopfxontag(level.chopper_fx["anim"]["hatch_left_static_down"][level.ospreysettings[self.ospreytype].modelbase],self,level.ospreysettings[self.ospreytype].taghatchl); + playfxontag(level.chopper_fx["anim"]["hatch_left_anim_up"][level.ospreysettings[self.ospreytype].modelbase],self,level.ospreysettings[self.ospreytype].taghatchl); + stopfxontag(level.chopper_fx["anim"]["hatch_right_static_down"][level.ospreysettings[self.ospreytype].modelbase],self,level.ospreysettings[self.ospreytype].taghatchr); + playfxontag(level.chopper_fx["anim"]["hatch_right_anim_up"][level.ospreysettings[self.ospreytype].modelbase],self,level.ospreysettings[self.ospreytype].taghatchr); + wait 1; + if(isdefined(self)) + { + playfxontag(level.chopper_fx["anim"]["hatch_left_static_up"][level.ospreysettings[self.ospreytype].modelbase],self,level.ospreysettings[self.ospreytype].taghatchl); + playfxontag(level.chopper_fx["anim"]["hatch_right_static_up"][level.ospreysettings[self.ospreytype].modelbase],self,level.ospreysettings[self.ospreytype].taghatchr); + self.hatchstate = "up"; + } +} + +//Function Number: 21 +airshippitchhatchdown() +{ + self endon("crashing"); + self endon("death"); + stopfxontag(level.chopper_fx["anim"]["hatch_left_static_up"][level.ospreysettings[self.ospreytype].modelbase],self,level.ospreysettings[self.ospreytype].taghatchl); + playfxontag(level.chopper_fx["anim"]["hatch_left_anim_down"][level.ospreysettings[self.ospreytype].modelbase],self,level.ospreysettings[self.ospreytype].taghatchl); + stopfxontag(level.chopper_fx["anim"]["hatch_right_static_up"][level.ospreysettings[self.ospreytype].modelbase],self,level.ospreysettings[self.ospreytype].taghatchr); + playfxontag(level.chopper_fx["anim"]["hatch_right_anim_down"][level.ospreysettings[self.ospreytype].modelbase],self,level.ospreysettings[self.ospreytype].taghatchr); + wait 1; + if(isdefined(self)) + { + playfxontag(level.chopper_fx["anim"]["hatch_left_static_down"][level.ospreysettings[self.ospreytype].modelbase],self,level.ospreysettings[self.ospreytype].taghatchl); + playfxontag(level.chopper_fx["anim"]["hatch_right_static_down"][level.ospreysettings[self.ospreytype].modelbase],self,level.ospreysettings[self.ospreytype].taghatchr); + self.hatchstate = "down"; + } + + self notify("hatch_down"); +} + +//Function Number: 22 +getbestheight(param_00) +{ + self endon("helicopter_removed"); + self endon("heightReturned"); + var_01 = getent("airstrikeheight","targetname"); + if(isdefined(var_01)) + { + var_02 = var_01.origin[2]; + } + else if(isdefined(level.airstrikeheightscale)) + { + var_02 = 850 * level.airstrikeheightscale; + } + else + { + var_02 = 850; + } + + self.bestheight = var_02; + var_03 = 200; + var_04 = 0; + var_05 = 0; + for(var_06 = 0;var_06 < 125;var_06++) + { + wait 0.05; + var_07 = var_06 % 8; + var_08 = var_06 * 3; + switch(var_07) + { + case 0: + var_04 = var_08; + var_05 = var_08; + break; + + case 1: + var_04 = var_08 * -1; + var_05 = var_08 * -1; + break; + + case 2: + var_04 = var_08 * -1; + var_05 = var_08; + break; + + case 3: + var_04 = var_08; + var_05 = var_08 * -1; + break; + + case 4: + var_04 = 0; + var_05 = var_08 * -1; + break; + + case 5: + var_04 = var_08 * -1; + var_05 = 0; + break; + + case 6: + var_04 = var_08; + var_05 = 0; + break; + + case 7: + var_04 = 0; + var_05 = var_08; + break; + + default: + break; + } + + var_09 = bullettrace(param_00 + (var_04,var_05,1000),param_00 + (var_04,var_05,-10000),1,self); + if(var_09["position"][2] > var_03) + { + var_03 = var_09["position"][2]; + } + } + + self.bestheight = var_03 + 300; + switch(getdvar("mapname")) + { + case "mp_morningwood": + self.bestheight = self.bestheight + 600; + break; + + case "mp_overwatch": + var_0A = level.spawnpoints; + var_0B = var_0A[0]; + var_0C = var_0A[0]; + foreach(var_0E in var_0A) + { + if(var_0E.origin[2] < var_0B.origin[2]) + { + var_0B = var_0E; + } + + if(var_0E.origin[2] > var_0C.origin[2]) + { + var_0C = var_0E; + } + } + + if(var_03 < var_0B.origin[2] - 100) + { + self.bestheight = var_0C.origin[2] + 900; + } + break; + } +} + +//Function Number: 23 +airshipflydefense(param_00,param_01,param_02,param_03,param_04,param_05) +{ + self notify("airshipFlyDefense"); + self endon("airshipFlyDefense"); + self endon("helicopter_removed"); + self endon("death"); + self endon("leaving"); + thread getbestheight(param_02); + maps\mp\killstreaks\_helicopter::heli_fly_simple_path(param_01); + self.pathgoal = param_02; + var_06 = self.angles; + self setyawspeed(30,30,30,0.3); + var_07 = self.origin; + var_08 = self.angles[1]; + var_09 = self.angles[0]; + self.timeout = level.ospreysettings[self.ospreytype].timeout; + self setvehgoalpos(param_02,1); + var_0A = gettime(); + self waittill("goal"); + var_0B = gettime() - var_0A * 0.001; + self.timeout = self.timeout - var_0B; + thread airshippitchpropsup(); + var_0C = param_02 * (1,1,0); + var_0C = var_0C + (0,0,self.bestheight); + self vehicle_setspeed(25,10,10); + self setyawspeed(20,10,10,0.3); + self setvehgoalpos(var_0C,1); + var_0A = gettime(); + self waittill("goal"); + var_0B = gettime() - var_0A * 0.001; + self.timeout = self.timeout - var_0B; + self sethoverparams(65,50,50); + ospreydropcrateslowimpulse(1,level.ospreysettings[self.ospreytype].tagdropcrates,var_0C); + thread func_2EC4(param_05); + self waittill("leaving"); + self notify("osprey_leaving"); + thread func_2EBE(); +} + +//Function Number: 24 +func_2C43(param_00) +{ + self endon("death"); + level endon("game_ended"); + wait param_00; + self delete(); +} + +//Function Number: 25 +func_2EC4(param_00) +{ + self endon("osprey_leaving"); + self endon("helicopter_removed"); + self endon("death"); + var_01 = param_00; + for(;;) + { + foreach(var_03 in level.players) + { + wait 0.05; + if(!isdefined(self)) + { + return; + } + + if(!isdefined(var_03)) + { + continue; + } + + if(!maps\mp\_utility::isreallyalive(var_03)) + { + continue; + } + + if(level.teambased && var_03.team == self.team) + { + continue; + } + + if(isdefined(self.owner) && var_03 == self.owner) + { + continue; + } + + if(var_03 maps\mp\_utility::func_27AF("specialty_blindeye")) + { + continue; + } + + if(distancesquared(var_01,var_03.origin) > 500000) + { + continue; + } + + thread aishootplayer(var_03,var_01); + func_2EC7(); + } + } +} + +//Function Number: 26 +aishootplayer(param_00,param_01) +{ + self notify("aiShootPlayer"); + self endon("aiShootPlayer"); + self endon("helicopter_removed"); + self endon("leaving"); + param_00 endon("death"); + self setturrettargetent(param_00); + self setlookatent(param_00); + thread targetdeathwaiter(param_00); + var_02 = 6; + var_03 = 2; + for(;;) + { + var_02--; + self fireweapon("tag_flash",param_00); + wait 0.15; + if(var_02 <= 0) + { + var_03--; + var_02 = 6; + if(distancesquared(param_00.origin,param_01) > 500000 || var_03 <= 0 || !maps\mp\_utility::isreallyalive(param_00)) + { + self notify("abandon_target"); + return; + } + + wait 1; + } + } +} + +//Function Number: 27 +targetdeathwaiter(param_00) +{ + self endon("abandon_target"); + self endon("leaving"); + self endon("helicopter_removed"); + param_00 waittill("death"); + self notify("target_killed"); +} + +//Function Number: 28 +func_2EC7() +{ + self endon("helicopter_removed"); + self endon("leaving"); + self endon("target_killed"); + self endon("abandon_target"); + wait 0.05; +} + +//Function Number: 29 +func_2EC8(param_00,param_01,param_02,param_03,param_04) +{ + self notify("airshipFlyGunner"); + self endon("airshipFlyGunner"); + self endon("helicopter_removed"); + self endon("death"); + self endon("leaving"); + thread getbestheight(param_02); + maps\mp\killstreaks\_helicopter::heli_fly_simple_path(param_01); + thread maps\mp\killstreaks\_helicopter::func_2C2E(level.ospreysettings[self.ospreytype].timeout); + var_05 = self.angles; + self setyawspeed(30,30,30,0.3); + var_06 = self.origin; + var_07 = self.angles[1]; + var_08 = self.angles[0]; + self.timeout = level.ospreysettings[self.ospreytype].timeout; + self setvehgoalpos(param_02,1); + var_09 = gettime(); + self waittill("goal"); + var_0A = gettime() - var_09 * 0.001; + self.timeout = self.timeout - var_0A; + thread airshippitchpropsup(); + var_0B = param_02 * (1,1,0); + var_0B = var_0B + (0,0,self.bestheight); + self vehicle_setspeed(25,10,10); + self setyawspeed(20,10,10,0.3); + self setvehgoalpos(var_0B,1); + var_09 = gettime(); + self waittill("goal"); + var_0A = gettime() - var_09 * 0.001; + self.timeout = self.timeout - var_0A; + func_2ECA(1,level.ospreysettings[self.ospreytype].tagdropcrates,var_0B); + var_0C = 1; + if(isdefined(param_00)) + { + param_00 common_scripts\utility::waittill_any_timeout(var_0C,"disconnect"); + } + + self.timeout = self.timeout - var_0C; + self setvehgoalpos(param_02,1); + var_09 = gettime(); + self waittill("goal"); + var_0A = gettime() - var_09 * 0.001; + self.timeout = self.timeout - var_0A; + var_0D = getentarray("heli_attack_area","targetname"); + var_0E = level.heli_loop_nodes[randomint(level.heli_loop_nodes.size)]; + if(var_0D.size) + { + thread maps\mp\killstreaks\_helicopter::func_2C3F(var_0D); + } + else + { + thread maps\mp\killstreaks\_helicopter::func_2C3A(var_0E); + } + + self waittill("leaving"); + thread func_2EBE(); +} + +//Function Number: 30 +ospreydropcrateslowimpulse(param_00,param_01,param_02) +{ + thread airshippitchhatchdown(); + self waittill("hatch_down"); + var_03[0] = thread maps\mp\killstreaks\_airdrop::dropthecrate(undefined,self.droptype,undefined,0,undefined,self.origin,(randomint(10),randomint(10),randomint(10)),undefined,param_01); + wait 0.05; + self notify("drop_crate"); + wait param_00; + wait 0.05; + self notify("drop_crate",var_41[1],thread maps\mp\killstreaks\_airdrop::dropthecrate(undefined,self.droptype,undefined,0,undefined,self.origin,(randomint(100),randomint(100),randomint(100)),var_03,param_01)); + wait param_01; + wait 0.05; + self notify("drop_crate",var_41[2],thread maps\mp\killstreaks\_airdrop::dropthecrate(undefined,self.droptype,undefined,0,undefined,self.origin,(randomint(50),randomint(50),randomint(50)),var_41,param_02)); + wait param_01; + wait 0.05; + self notify("drop_crate",var_41[3],thread maps\mp\killstreaks\_airdrop::dropthecrate(undefined,self.droptype,undefined,0,undefined,self.origin,(randomintrange(-100,0),randomintrange(-100,0),randomintrange(-100,0)),var_41,param_02)); + wait param_01; + thread maps\mp\killstreaks\_airdrop::dropthecrate(undefined,self.droptype,undefined,0,undefined,self.origin,(randomintrange(-50,0),randomintrange(-50,0),randomintrange(-50,0)),var_41,param_02); + wait 0.05; + self notify("drop_crate"); + wait 1; + thread airshippitchhatchup(); +} + +//Function Number: 31 +func_2ECA(param_00,param_01,param_02) +{ + thread airshippitchhatchdown(); + self waittill("hatch_down"); + var_03[0] = thread maps\mp\killstreaks\_airdrop::dropthecrate(undefined,self.droptype,undefined,0,undefined,self.origin,(randomint(10),randomint(10),randomint(10)),undefined,param_01); + wait 0.05; + self.timeout = self.timeout - 0.05; + self notify("drop_crate"); + wait param_00; + self.timeout = self.timeout - param_00; + wait 0.05; + self.timeout = self.timeout - 0.05; + self notify("drop_crate",var_41[1],thread maps\mp\killstreaks\_airdrop::dropthecrate(undefined,self.droptype,undefined,0,undefined,self.origin,(randomint(100),randomint(100),randomint(100)),var_03,param_01)); + wait param_01; + self.timeout = self.timeout - param_01; + wait 0.05; + self.timeout = self.timeout - 0.05; + self notify("drop_crate",var_41[2],thread maps\mp\killstreaks\_airdrop::dropthecrate(undefined,self.droptype,undefined,0,undefined,self.origin,(randomint(50),randomint(50),randomint(50)),var_41,param_02)); + wait 1; + thread airshippitchhatchup(); +} + +//Function Number: 32 +func_2C00(param_00) +{ + if(isdefined(self.escort_prompt)) + { + self.escort_prompt maps\mp\gametypes\_hud_util::destroyelem(); + } + + self remotecamerasoundscapeoff(); + self thermalvisionoff(); + self thermalvisionfofoverlayoff(); + self unlink(); + maps\mp\_utility::clearusingremote(); + if(getdvarint("camera_thirdPerson")) + { + maps\mp\_utility::setthirdpersondof(1); + } + + self visionsetthermalforplayer(game["thermal_vision"],0); + if(isdefined(param_00)) + { + param_00 vehicleturretcontroloff(self); + } + + self notify("heliPlayer_removed"); + self switchtoweapon(common_scripts\utility::getlastweapon()); + self takeweapon("heli_remote_mp"); +} + +//Function Number: 33 +func_2ECB(param_00) +{ + self endon("disconnect"); + param_00 waittill("helicopter_done"); + func_2C00(param_00); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/killstreaks/_harrier.gsc b/MW3/Xbox/MP/maps/mp/killstreaks/_harrier.gsc new file mode 100644 index 0000000..55ec2fa --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/killstreaks/_harrier.gsc @@ -0,0 +1,1185 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\killstreaks\_harrier.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 46 + * Decompile Time: 642 ms + * Timestamp: 10/27/2023 2:26:51 AM +*******************************************************************/ + +//Function Number: 1 +beginharrier(param_00,param_01,param_02) +{ + var_03 = getent("airstrikeheight","targetname"); + if(isdefined(var_03)) + { + var_04 = var_03.origin[2]; + } + else if(isdefined(level.airstrikeheightscale)) + { + var_04 = 850 * level.airstrikeheightscale; + } + else + { + var_04 = 850; + } + + param_02 = param_02 * (1,1,0); + var_05 = param_02 + (0,0,var_04); + var_06 = func_2F6B(param_00,self,param_01,var_05); + var_06.pathgoal = var_05; + return var_06; +} + +//Function Number: 2 +getcorrectheight(param_00,param_01,param_02) +{ + var_03 = 1200; + var_04 = tracegroundpoint(param_00,param_01); + var_05 = var_04 + var_03; + if(isdefined(level.airstrikeheightscale) && var_05 < 850 * level.airstrikeheightscale) + { + var_05 = 950 * level.airstrikeheightscale; + } + + var_05 = var_05 + randomint(param_02); + return var_05; +} + +//Function Number: 3 +func_2F6B(param_00,param_01,param_02,param_03) +{ + var_04 = vectortoangles(param_03 - param_02); + if(param_01.team == "allies") + { + var_05 = spawnhelicopter(param_01,param_02,var_04,"harrier_mp","vehicle_av8b_harrier_jet_mp"); + } + else + { + var_05 = spawnhelicopter(param_02,param_03,var_05,"harrier_mp","vehicle_av8b_harrier_jet_opfor_mp"); + } + + if(!isdefined(var_05)) + { + return; + } + + var_05 func_2C47(); + var_05 thread func_2F99(); + var_05.speed = 250; + var_05.accel = 175; + var_05.health = 3000; + var_05.maxhealth = var_05.health; + var_05.team = param_01.team; + var_05.owner = param_01; + var_05 setcandamage(1); + var_05.owner = param_01; + var_05 thread harrierdestroyed(); + var_05 setmaxpitchroll(0,90); + var_05 vehicle_setspeed(var_05.speed,var_05.accel); + var_05 thread func_2F7A(); + var_05 setdamagestage(3); + var_05.missiles = 6; + var_05.pers["team"] = var_05.team; + var_05 sethoverparams(50,100,50); + var_05 setturningability(0.05); + var_05 setyawspeed(45,25,25,0.5); + var_05.defendloc = param_03; + var_05.lifeid = param_00; + var_05.damagecallback = ::callback_vehicledamage; + level.harriers = common_scripts\utility::array_removeundefined(level.harriers); + level.harriers[level.harriers.size] = var_05; + return var_05; +} + +//Function Number: 4 +defendlocation(param_00) +{ + param_00 endon("death"); + param_00 thread func_2F74(); + param_00 setvehgoalpos(param_00.pathgoal,1); + param_00 thread closetogoalcheck(param_00.pathgoal); + param_00 waittill("goal"); + param_00 stopharrierwingfx(); + param_00 engageground(); +} + +//Function Number: 5 +closetogoalcheck(param_00) +{ + self endon("goal"); + self endon("death"); + for(;;) + { + if(distance2d(self.origin,param_00) < 768) + { + self setmaxpitchroll(45,25); + break; + } + + wait 0.05; + } +} + +//Function Number: 6 +engageground() +{ + self notify("engageGround"); + self endon("engageGround"); + self endon("death"); + thread func_2F86(); + thread func_2F75(); + var_00 = self.defendloc; + self vehicle_setspeed(15,5); + self setvehgoalpos(var_00,1); + self waittill("goal"); +} + +//Function Number: 7 +harrierleave() +{ + self endon("death"); + self setmaxpitchroll(0,0); + self notify("leaving"); + breaktarget(1); + self notify("stopRand"); + for(;;) + { + self vehicle_setspeed(35,25); + var_00 = self.origin + anglestoforward((0,randomint(360),0)) * 500; + var_00 = var_00 + (0,0,900); + var_01 = bullettrace(self.origin,self.origin + (0,0,900),0,self); + if(var_01["surfacetype"] == "none") + { + break; + } + + wait 0.1; + } + + self setvehgoalpos(var_00,1); + thread func_2F7D(); + self waittill("goal"); + self playsound("harrier_fly_away"); + var_02 = func_2E70(); + self vehicle_setspeed(250,75); + self setvehgoalpos(var_02,1); + self waittill("goal"); + level.airplane[level.airplane.size - 1] = undefined; + self notify("harrier_gone"); + thread harrierdelete(); +} + +//Function Number: 8 +harrierdelete() +{ + self delete(); +} + +//Function Number: 9 +func_2F74() +{ + self endon("death"); + maps\mp\gametypes\_hostmigration::func_2740(45); + harrierleave(); +} + +//Function Number: 10 +func_2F75() +{ + self notify("randomHarrierMovement"); + self endon("randomHarrierMovement"); + self endon("stopRand"); + self endon("death"); + self endon("acquiringTarget"); + self endon("leaving"); + var_00 = self.defendloc; + for(;;) + { + var_01 = getnewpoint(self.origin); + self setvehgoalpos(var_01,1); + self waittill("goal"); + wait randomintrange(3,6); + self notify("randMove"); + } +} + +//Function Number: 11 +getnewpoint(param_00,param_01) +{ + self endon("stopRand"); + self endon("death"); + self endon("acquiringTarget"); + self endon("leaving"); + if(!isdefined(param_01)) + { + var_02 = []; + foreach(var_04 in level.players) + { + if(var_04 == self) + { + continue; + } + + if(!level.teambased || var_04.team != self.team) + { + var_02[var_02.size] = var_04.origin; + } + } + + if(var_02.size > 0) + { + var_06 = averagepoint(var_02); + var_07 = var_06[0]; + var_08 = var_06[1]; + } + else + { + var_09 = level.mapcenter; + var_0A = level.mapsize / 6 - 200; + var_07 = randomfloatrange(var_09[0] - var_0A,var_09[0] + var_0A); + var_08 = randomfloatrange(var_09[1] - var_0A,var_09[1] + var_0A); + } + + var_0B = getcorrectheight(var_07,var_08,20); + } + else if(common_scripts\utility::cointoss()) + { + var_0C = self.origin - self.besttarget.origin; + var_07 = var_0C[0]; + var_08 = var_0C[1] * -1; + var_0B = getcorrectheight(var_07,var_08,20); + var_0D = (var_08,var_07,var_0B); + if(distance2d(self.origin,var_0D) > 1200) + { + var_08 = var_08 * 0.5; + var_07 = var_07 * 0.5; + var_0D = (var_08,var_07,var_0B); + } + } + else + { + if(distance2d(self.origin,self.besttarget.origin) < 200) + { + return; + } + + var_0E = self.angles[1]; + var_0F = (0,var_0E,0); + var_10 = self.origin + anglestoforward(var_0F) * randomintrange(200,400); + var_0B = getcorrectheight(var_10[0],var_10[1],20); + var_07 = var_10[0]; + var_08 = var_10[1]; + } + + for(;;) + { + var_11 = func_2F78(var_07,var_08,var_0B); + if(var_11 != 0) + { + return var_11; + } + + var_07 = randomfloatrange(param_00[0] - 1200,param_00[0] + 1200); + var_08 = randomfloatrange(param_00[1] - 1200,param_00[1] + 1200); + var_0B = getcorrectheight(var_07,var_08,20); + } +} + +//Function Number: 12 +func_2F78(param_00,param_01,param_02) +{ + self endon("stopRand"); + self endon("death"); + self endon("acquiringTarget"); + self endon("leaving"); + self endon("randMove"); + for(var_03 = 1;var_03 <= 10;var_03++) + { + switch(var_03) + { + case 1: + var_04 = bullettrace(self.origin,(param_00,param_01,param_02),0,self); + break; + + case 2: + var_04 = bullettrace(self gettagorigin("tag_left_wingtip"),(param_00,param_01,param_02),0,self); + break; + + case 3: + var_04 = bullettrace(self gettagorigin("tag_right_wingtip"),(param_00,param_01,param_02),0,self); + break; + + case 4: + var_04 = bullettrace(self gettagorigin("tag_engine_left2"),(param_00,param_01,param_02),0,self); + break; + + case 5: + var_04 = bullettrace(self gettagorigin("tag_engine_right2"),(param_00,param_01,param_02),0,self); + break; + + case 6: + var_04 = bullettrace(self gettagorigin("tag_right_alamo_missile"),(param_00,param_01,param_02),0,self); + break; + + case 7: + var_04 = bullettrace(self gettagorigin("tag_left_alamo_missile"),(param_00,param_01,param_02),0,self); + break; + + case 8: + var_04 = bullettrace(self gettagorigin("tag_right_archer_missile"),(param_00,param_01,param_02),0,self); + break; + + case 9: + var_04 = bullettrace(self gettagorigin("tag_left_archer_missile"),(param_00,param_01,param_02),0,self); + break; + + case 10: + var_04 = bullettrace(self gettagorigin("tag_light_tail"),(param_00,param_01,param_02),0,self); + break; + + default: + var_04 = bullettrace(self.origin,(param_00,param_01,param_02),0,self); + break; + } + + if(var_04["surfacetype"] != "none") + { + return 0; + } + + wait 0.05; + } + + var_05 = (param_00,param_01,param_02); + return var_05; +} + +//Function Number: 13 +tracegroundpoint(param_00,param_01) +{ + self endon("death"); + self endon("acquiringTarget"); + self endon("leaving"); + var_02 = -9999999; + var_03 = 9999999; + var_04 = -9999999; + var_05 = self.origin[2]; + var_06 = undefined; + var_07 = undefined; + for(var_08 = 1;var_08 <= 5;var_08++) + { + switch(var_08) + { + case 1: + var_09 = bullettrace((param_00,param_01,var_05),(param_00,param_01,var_04),0,self); + break; + + case 2: + var_09 = bullettrace((param_00 + 20,param_01 + 20,var_05),(param_00 + 20,param_01 + 20,var_04),0,self); + break; + + case 3: + var_09 = bullettrace((param_00 - 20,param_01 - 20,var_05),(param_00 - 20,param_01 - 20,var_04),0,self); + break; + + case 4: + var_09 = bullettrace((param_00 + 20,param_01 - 20,var_05),(param_00 + 20,param_01 - 20,var_04),0,self); + break; + + case 5: + var_09 = bullettrace((param_00 - 20,param_01 + 20,var_05),(param_00 - 20,param_01 + 20,var_04),0,self); + break; + + default: + var_09 = bullettrace(self.origin,(param_00,param_01,var_04),0,self); + break; + } + + if(var_09["position"][2] > var_02) + { + var_02 = var_09["position"][2]; + var_06 = var_09; + } + else if(var_09["position"][2] < var_03) + { + var_03 = var_09["position"][2]; + var_07 = var_09; + } + + wait 0.05; + } + + return var_02; +} + +//Function Number: 14 +func_2F7A() +{ + self endon("death"); + wait 0.2; + playfxontag(level.fx_airstrike_contrail,self,"tag_right_wingtip"); + playfxontag(level.fx_airstrike_contrail,self,"tag_left_wingtip"); + wait 0.2; + playfxontag(level.harrier_afterburnerfx,self,"tag_engine_right"); + playfxontag(level.harrier_afterburnerfx,self,"tag_engine_left"); + wait 0.2; + playfxontag(level.harrier_afterburnerfx,self,"tag_engine_right2"); + playfxontag(level.harrier_afterburnerfx,self,"tag_engine_left2"); + wait 0.2; + playfxontag(level.chopper_fx["light"]["left"],self,"tag_light_L_wing"); + wait 0.2; + playfxontag(level.chopper_fx["light"]["right"],self,"tag_light_R_wing"); + wait 0.2; + playfxontag(level.chopper_fx["light"]["belly"],self,"tag_light_belly"); + wait 0.2; + playfxontag(level.chopper_fx["light"]["tail"],self,"tag_light_tail"); +} + +//Function Number: 15 +stopharrierwingfx() +{ + stopfxontag(level.fx_airstrike_contrail,self,"tag_right_wingtip"); + stopfxontag(level.fx_airstrike_contrail,self,"tag_left_wingtip"); +} + +//Function Number: 16 +func_2F7D() +{ + wait 3; + if(!isdefined(self)) + { + return; + } + + playfxontag(level.fx_airstrike_contrail,self,"tag_right_wingtip"); + playfxontag(level.fx_airstrike_contrail,self,"tag_left_wingtip"); +} + +//Function Number: 17 +getpathstart(param_00) +{ + var_01 = 100; + var_02 = 15000; + var_03 = 850; + var_04 = randomfloat(360); + var_05 = (0,var_04,0); + var_06 = param_00 + anglestoforward(var_05) * -1 * var_02; + var_06 = var_06 + (randomfloat(2) - 1 * var_01,randomfloat(2) - 1 * var_01,0); + return var_06; +} + +//Function Number: 18 +func_2E70() +{ + var_00 = 150; + var_01 = 15000; + var_02 = 850; + var_03 = self.angles[1]; + var_04 = (0,var_03,0); + var_05 = self.origin + anglestoforward(var_04) * var_01; + return var_05; +} + +//Function Number: 19 +func_2F7E(param_00,param_01) +{ + self endon("leaving"); + self endon("stopfiring"); + self endon("explode"); + self endon("death"); + self.besttarget endon("death"); + self.besttarget endon("disconnect"); + var_02 = gettime(); + var_03 = gettime(); + var_04 = 0; + self setvehweapon("harrier_20mm_mp"); + if(!isdefined(param_01)) + { + param_01 = 50; + } + + for(;;) + { + if(isreadytofire(param_00)) + { + break; + } + else + { + wait 0.25; + } + } + + self setturrettargetent(self.besttarget,(0,0,50)); + var_05 = 25; + for(;;) + { + if(var_05 == 25) + { + self playloopsound("weap_cobra_20mm_fire_npc"); + } + + var_05--; + self fireweapon("tag_flash",self.besttarget,(0,0,0),0.05); + wait 0.1; + if(var_05 <= 0) + { + self stoploopsound(); + wait 1; + var_05 = 25; + } + } +} + +//Function Number: 20 +isreadytofire(param_00) +{ + self endon("death"); + self endon("leaving"); + if(!isdefined(param_00)) + { + param_00 = 10; + } + + var_01 = anglestoforward(self.angles); + var_02 = self.besttarget.origin - self.origin; + var_01 = var_01 * (1,1,0); + var_02 = var_02 * (1,1,0); + var_02 = vectornormalize(var_02); + var_01 = vectornormalize(var_01); + var_03 = vectordot(var_02,var_01); + var_04 = cos(param_00); + if(var_03 >= var_04) + { + return 1; + } + + return 0; +} + +//Function Number: 21 +func_2F80(param_00) +{ + self endon("death"); + self endon("leaving"); + if(param_00.size == 1) + { + self.besttarget = param_00[0]; + } + else + { + self.besttarget = func_2F89(param_00); + } + + func_2F81(0); + self notify("acquiringTarget"); + self setturrettargetent(self.besttarget); + self setlookatent(self.besttarget); + var_01 = getnewpoint(self.origin,1); + self setvehgoalpos(var_01,1); + thread func_2F83(); + thread watchtargetlos(); + self setvehweapon("harrier_20mm_mp"); + thread func_2F7E(); +} + +//Function Number: 22 +func_2F81(param_00) +{ + self setvehgoalpos(self.defendloc,1); + if(isdefined(param_00) && param_00) + { + self waittill("goal"); + } +} + +//Function Number: 23 +func_2F82(param_00) +{ + var_01 = bullettrace(self.origin,param_00,1,self); + if(var_01["position"] == param_00) + { + return 0; + } + + return 1; +} + +//Function Number: 24 +func_2F83() +{ + self notify("watchTargetDeath"); + self endon("watchTargetDeath"); + self endon("newTarget"); + self endon("death"); + self endon("leaving"); + self.besttarget waittill("death"); + thread breaktarget(); +} + +//Function Number: 25 +watchtargetlos(param_00) +{ + self endon("death"); + self.besttarget endon("death"); + self.besttarget endon("disconnect"); + self endon("leaving"); + self endon("newTarget"); + var_01 = undefined; + if(!isdefined(param_00)) + { + param_00 = 1000; + } + + for(;;) + { + if(!istarget(self.besttarget)) + { + thread breaktarget(); + return; + } + + if(!isdefined(self.besttarget)) + { + thread breaktarget(); + return; + } + + if(self.besttarget sightconetrace(self.origin,self) < 1) + { + if(!isdefined(var_01)) + { + var_01 = gettime(); + } + + if(gettime() - var_01 > param_00) + { + thread breaktarget(); + return; + } + } + else + { + var_01 = undefined; + } + + wait 0.25; + } +} + +//Function Number: 26 +breaktarget(param_00) +{ + self endon("death"); + self clearlookatent(); + self stoploopsound(); + self notify("stopfiring"); + if(isdefined(param_00) && param_00) + { + return; + } + + thread func_2F75(); + self notify("newTarget"); + thread func_2F86(); +} + +//Function Number: 27 +func_2F86() +{ + self notify("harrierGetTargets"); + self endon("harrierGetTargets"); + self endon("death"); + self endon("leaving"); + var_00 = []; + for(;;) + { + var_00 = []; + var_01 = level.players; + if(isdefined(level.chopper) && level.chopper.team != self.team && isalive(level.chopper)) + { + if(!isdefined(level.chopper.nontarget) || isdefined(level.chopper.nontarget) && !level.chopper.nontarget) + { + thread func_2F92(level.chopper); + return; + } + else + { + func_2F81(1); + } + } + + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + var_03 = var_01[var_02]; + if(istarget(var_03)) + { + if(isdefined(var_01[var_02])) + { + var_00[var_00.size] = var_01[var_02]; + } + } + else + { + continue; + } + + wait 0.05; + } + + if(var_00.size > 0) + { + func_2F80(var_00); + return; + } + + wait 1; + } +} + +//Function Number: 28 +istarget(param_00) +{ + self endon("death"); + if(!isalive(param_00) || param_00.sessionstate != "playing") + { + return 0; + } + + if(isdefined(self.owner) && param_00 == self.owner) + { + return 0; + } + + if(distance(param_00.origin,self.origin) > 8192) + { + return 0; + } + + if(distance2d(param_00.origin,self.origin) < 768) + { + return 0; + } + + if(!isdefined(param_00.pers["team"])) + { + return 0; + } + + if(level.teambased && param_00.pers["team"] == self.team) + { + return 0; + } + + if(param_00.pers["team"] == "spectator") + { + return 0; + } + + if(isdefined(param_00.spawntime) && gettime() - param_00.spawntime / 1000 <= 5) + { + return 0; + } + + if(param_00 maps\mp\_utility::func_27AF("specialty_blindeye")) + { + return 0; + } + + var_01 = self.origin + (0,0,-160); + var_02 = anglestoforward(self.angles); + var_03 = var_01 + 144 * var_02; + var_04 = param_00 sightconetrace(self.origin,self); + if(var_04 < 1) + { + return 0; + } + + return 1; +} + +//Function Number: 29 +func_2F89(param_00) +{ + self endon("death"); + var_01 = self gettagorigin("tag_flash"); + var_02 = self.origin; + var_03 = anglestoforward(self.angles); + var_04 = undefined; + var_05 = undefined; + var_06 = 0; + foreach(var_08 in param_00) + { + var_09 = abs(vectortoangles(var_08.origin - self.origin)[1]); + var_0A = abs(self gettagangles("tag_flash")[1]); + var_09 = abs(var_09 - var_0A); + var_0B = var_08 getweaponslistitems(); + foreach(var_0D in var_0B) + { + if(issubstr(var_0D,"at4") || issubstr(var_0D,"stinger") || issubstr(var_0D,"jav")) + { + var_09 = var_09 - 40; + } + } + + if(distance(self.origin,var_08.origin) > 2000) + { + var_09 = var_09 + 40; + } + + if(!isdefined(var_04)) + { + var_04 = var_09; + var_05 = var_08; + continue; + } + + if(var_04 > var_09) + { + var_04 = var_09; + var_05 = var_08; + } + } + + return var_05; +} + +//Function Number: 30 +firemissile(param_00) +{ + self endon("death"); + self endon("leaving"); + if(self.missiles <= 0) + { + return; + } + + var_01 = func_2F8B(param_00,256); + if(!isdefined(param_00)) + { + return; + } + + if(distance2d(self.origin,param_00.origin) < 512) + { + return; + } + + if(isdefined(var_01) && var_01) + { + return; + } + + self.missiles--; + self setvehweapon("harrier_FFAR_mp"); + if(isdefined(param_00.targetent)) + { + var_02 = self fireweapon("tag_flash",param_00.targetent,(0,0,-250)); + } + else + { + var_02 = self fireweapon("tag_flash",var_01,(0,0,-250)); + } + + var_02 missile_setflightmodedirect(); + var_02 missile_settargetent(param_00); +} + +//Function Number: 31 +func_2F8B(param_00,param_01) +{ + self endon("death"); + self endon("leaving"); + var_02 = []; + var_03 = level.players; + var_04 = param_00.origin; + for(var_05 = 0;var_05 < var_03.size;var_05++) + { + var_06 = var_03[var_05]; + if(var_06.team != self.team) + { + continue; + } + + var_07 = var_06.origin; + if(distance2d(var_07,var_04) < 512) + { + return 1; + } + } + + return 0; +} + +//Function Number: 32 +callback_vehicledamage(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A,param_0B) +{ + if((param_01 == self || isdefined(param_01.pers) && param_01.pers["team"] == self.team && level.teambased) && param_01 != self.owner) + { + return; + } + + if(self.health <= 0) + { + return; + } + + switch(param_05) + { + case "javelin_mp": + case "stinger_mp": + case "remotemissile_projectile_mp": + case "ac130_40mm_mp": + case "ac130_105mm_mp": + self.largeprojectiledamage = 1; + param_02 = self.maxhealth + 1; + break; + + case "rpg_mp": + case "at4_mp": + self.largeprojectiledamage = 1; + param_02 = self.maxhealth - 900; + break; + + default: + if(param_05 != "none") + { + param_02 = int(param_02 / 2); + } + + self.largeprojectiledamage = 0; + break; + } + + maps\mp\killstreaks\_killstreaks::killstreakhit(param_01,param_05,self); + param_01 maps\mp\gametypes\_damagefeedback::updatedamagefeedback(""); + if(isplayer(param_01) && param_01 maps\mp\_utility::func_27AF("specialty_armorpiercing")) + { + var_0C = int(param_02 * level.armorpiercingmod); + param_02 = param_02 + var_0C; + } + + if(self.health <= param_02) + { + if(isplayer(param_01) && !isdefined(self.owner) || param_01 != self.owner) + { + thread maps\mp\_utility::teamplayercardsplash("callout_destroyed_harrier",param_01); + param_01 thread maps\mp\gametypes\_rank::func_2AB3("kill",300,param_05,param_04); + thread maps\mp\gametypes\_missions::vehiclekilled(self.owner,self,undefined,param_01,param_02,param_04,param_05); + param_01 notify("destroyed_killstreak"); + } + + self notify("death"); + } + + if(self.health - param_02 <= 900 && !isdefined(self.smoking) || !self.smoking) + { + thread func_2F8C(); + self.smoking = 1; + } + + self vehicle_finishdamage(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A,param_0B); +} + +//Function Number: 33 +func_2F8C() +{ + self endon("death"); + stopfxontag(level.harrier_afterburnerfx,self,"tag_engine_left"); + playfxontag(level.harrier_smoke,self,"tag_engine_left"); + stopfxontag(level.harrier_afterburnerfx,self,"tag_engine_right"); + playfxontag(level.harrier_smoke,self,"tag_engine_right"); + wait 0.15; + stopfxontag(level.harrier_afterburnerfx,self,"tag_engine_left2"); + playfxontag(level.harrier_smoke,self,"tag_engine_left2"); + stopfxontag(level.harrier_afterburnerfx,self,"tag_engine_right2"); + playfxontag(level.harrier_smoke,self,"tag_engine_right2"); + playfxontag(level.chopper_fx["damage"]["heavy_smoke"],self,"tag_engine_left"); +} + +//Function Number: 34 +harrierdestroyed() +{ + self endon("harrier_gone"); + self waittill("death"); + if(!isdefined(self)) + { + return; + } + + if(!isdefined(self.largeprojectiledamage)) + { + self vehicle_setspeed(25,5); + thread func_2F91(randomintrange(180,220)); + wait randomfloatrange(0.5,1.5); + } + + func_2F8F(); +} + +//Function Number: 35 +func_2F8F() +{ + self playsound("harrier_jet_crash"); + level.airplane[level.airplane.size - 1] = undefined; + var_00 = self gettagangles("tag_deathfx"); + playfx(level.harrier_deathfx,self gettagorigin("tag_deathfx"),anglestoforward(var_00),anglestoup(var_00)); + self notify("explode"); + wait 0.05; + thread harrierdelete(); +} + +//Function Number: 36 +func_2F91(param_00) +{ + self endon("explode"); + playfxontag(level.chopper_fx["explode"]["medium"],self,"tag_origin"); + self setyawspeed(param_00,param_00,param_00); + while(isdefined(self)) + { + self settargetyaw(self.angles[1] + param_00 * 0.9); + wait 1; + } +} + +//Function Number: 37 +func_2F92(param_00) +{ + param_00 endon("death"); + param_00 endon("leaving"); + param_00 endon("crashing"); + self endon("death"); + func_2F94(param_00); + thread func_2F93(); +} + +//Function Number: 38 +func_2F93() +{ + self endon("leaving"); + self endon("stopfiring"); + self endon("explode"); + self.besttarget endon("crashing"); + self.besttarget endon("leaving"); + self.besttarget endon("death"); + var_00 = gettime(); + if(isdefined(self.besttarget) && self.besttarget.classname == "script_vehicle") + { + self setturrettargetent(self.besttarget); + for(;;) + { + var_01 = distance2d(self.origin,self.besttarget.origin); + if(gettime() - var_00 > 2500 && var_01 > 1000) + { + firemissile(self.besttarget); + var_00 = gettime(); + } + + wait 0.1; + } + } +} + +//Function Number: 39 +func_2F94(param_00) +{ + self endon("death"); + self endon("leaving"); + self notify("newTarget"); + self.besttarget = param_00; + self notify("acquiringVehTarget"); + self setlookatent(self.besttarget); + thread watchvehtargetdeath(); + thread watchvehtargetcrash(); + self setturrettargetent(self.besttarget); +} + +//Function Number: 40 +watchvehtargetcrash() +{ + self endon("death"); + self endon("leaving"); + self.besttarget endon("death"); + self.besttarget endon("drop_crate"); + self.besttarget waittill("crashing"); + func_2F97(); +} + +//Function Number: 41 +watchvehtargetdeath() +{ + self endon("death"); + self endon("leaving"); + self.besttarget endon("crashing"); + self.besttarget endon("drop_crate"); + self.besttarget waittill("death"); + func_2F97(); +} + +//Function Number: 42 +func_2F97() +{ + self clearlookatent(); + if(isdefined(self.besttarget) && !isdefined(self.besttarget.nontarget)) + { + self.besttarget.nontarget = 1; + } + + self notify("stopfiring"); + self notify("newTarget"); + thread stopharrierwingfx(); + thread engageground(); +} + +//Function Number: 43 +func_2F98() +{ + self setmaxpitchroll(15,80); + self vehicle_setspeed(50,100); + self setyawspeed(90,30,30,0.5); + var_00 = self.origin; + var_01 = self.angles[1]; + if(common_scripts\utility::cointoss()) + { + var_02 = (0,var_01 + 90,0); + } + else + { + var_02 = (0,var_02 - 90,0); + } + + var_03 = self.origin + anglestoforward(var_02) * 500; + self setvehgoalpos(var_03,1); + self waittill("goal"); +} + +//Function Number: 44 +drawline(param_00,param_01,param_02,param_03) +{ + if(!isdefined(param_03)) + { + param_03 = (1,1,1); + } + + var_04 = int(param_02 * 20); + for(var_05 = 0;var_05 < var_04;var_05++) + { + wait 0.05; + } +} + +//Function Number: 45 +func_2C47() +{ + level.helis[self getentitynumber()] = self; +} + +//Function Number: 46 +func_2F99() +{ + var_00 = self getentitynumber(); + self waittill("death"); + level.helis[var_00] = undefined; +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/killstreaks/_helicopter.gsc b/MW3/Xbox/MP/maps/mp/killstreaks/_helicopter.gsc new file mode 100644 index 0000000..78db0ae --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/killstreaks/_helicopter.gsc @@ -0,0 +1,2408 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\killstreaks\_helicopter.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 87 + * Decompile Time: 1521 ms + * Timestamp: 10/27/2023 2:26:56 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + var_00 = getentarray("heli_start","targetname"); + var_01 = getentarray("heli_loop_start","targetname"); + if(!var_00.size && !var_01.size) + { + return; + } + + level.heli_types = []; + precacheitem("heli_remote_mp"); + precachehelicopter("vehicle_cobra_helicopter_fly_low","cobra"); + precachehelicopter("vehicle_mi24p_hind_mp","hind"); + precachevehicle("cobra_mp"); + precacheitem("cobra_20mm_mp"); + precachehelicopter("vehicle_pavelow","pavelow"); + precachehelicopter("vehicle_pavelow_opfor","pavelow"); + precachevehicle("pavelow_mp"); + precacheturret("pavelow_minigun_mp"); + precachestring(&"SPLASHES_DESTROYED_PAVELOW"); + precachestring(&"SPLASHES_DESTROYED_MINIGUNNER"); + precachestring(&"SPLASHES_DESTROYED_HELICOPTER"); + level.chopper = undefined; + level.heli_start_nodes = getentarray("heli_start","targetname"); + level.heli_loop_nodes = getentarray("heli_loop_start","targetname"); + level.heli_leave_nodes = getentarray("heli_leave","targetname"); + level.heli_crash_nodes = getentarray("heli_crash_start","targetname"); + level.heli_missile_rof = 5; + level.heli_maxhealth = 2000; + level.heli_debug = 0; + level.heli_targeting_delay = 0.5; + level.heli_turretreloadtime = 1.5; + level.heli_turretclipsize = 40; + level.heli_visual_range = 3700; + level.heli_target_spawnprotection = 5; + level.heli_target_recognition = 0.5; + level.heli_missile_friendlycare = 256; + level.heli_missile_target_cone = 0.3; + level.heli_armor_bulletdamage = 0.3; + level.heli_attract_strength = 1000; + level.heli_attract_range = 4096; + level.heli_angle_offset = 90; + level.heli_forced_wait = 0; + level.chopper_fx["explode"]["death"] = []; + level.chopper_fx["explode"]["large"] = loadfx("explosions/helicopter_explosion_secondary_small"); + level.chopper_fx["explode"]["medium"] = loadfx("explosions/aerial_explosion"); + level.chopper_fx["smoke"]["trail"] = loadfx("smoke/smoke_trail_white_heli"); + level.chopper_fx["fire"]["trail"]["medium"] = loadfx("fire/fire_smoke_trail_L_emitter"); + level.chopper_fx["fire"]["trail"]["large"] = loadfx("fire/fire_smoke_trail_L"); + level.chopper_fx["damage"]["light_smoke"] = loadfx("smoke/smoke_trail_white_heli_emitter"); + level.chopper_fx["damage"]["heavy_smoke"] = loadfx("smoke/smoke_trail_black_heli_emitter"); + level.chopper_fx["damage"]["on_fire"] = loadfx("fire/fire_smoke_trail_L_emitter"); + level.chopper_fx["light"]["left"] = loadfx("misc/aircraft_light_wingtip_green"); + level.chopper_fx["light"]["right"] = loadfx("misc/aircraft_light_wingtip_red"); + level.chopper_fx["light"]["belly"] = loadfx("misc/aircraft_light_red_blink"); + level.chopper_fx["light"]["tail"] = loadfx("misc/aircraft_light_white_blink"); + level.fx_heli_dust = loadfx("treadfx/heli_dust_default"); + level.fx_heli_water = loadfx("treadfx/heli_water"); + makehelitype("cobra","explosions/helicopter_explosion_cobra_low",::defaultlightfx); + addairexplosion("cobra","explosions/aerial_explosion_cobra_low_mp"); + makehelitype("pavelow","explosions/helicopter_explosion_pavelow",::pavelowlightfx); + addairexplosion("pavelow","explosions/aerial_explosion_pavelow_mp"); + makehelitype("mi28","explosions/helicopter_explosion_mi28_flying",::defaultlightfx); + addairexplosion("mi28","explosions/aerial_explosion_mi28_flying_mp"); + makehelitype("hind","explosions/helicopter_explosion_hind_chernobyl",::defaultlightfx); + addairexplosion("hind","explosions/aerial_explosion_hind_chernobyl_mp"); + makehelitype("apache","explosions/helicopter_explosion_apache",::defaultlightfx); + addairexplosion("apache","explosions/aerial_explosion_apache_mp"); + makehelitype("littlebird","explosions/aerial_explosion_littlebird_mp",::defaultlightfx); + addairexplosion("littlebird","explosions/aerial_explosion_littlebird_mp"); + level.killstreakfuncs["helicopter"] = ::usehelicopter; + level.killstreakfuncs["helicopter_blackbox"] = ::func_2BE2; + level.killstreakfuncs["helicopter_flares"] = ::usehelicopterflares; + level.killstreakfuncs["helicopter_minigun"] = ::usehelicopterminigun; + level.killstreakfuncs["helicopter_mk19"] = ::usehelicoptermk19; + level.helidialog["tracking"][0] = "ac130_fco_moreenemy"; + level.helidialog["tracking"][1] = "ac130_fco_getthatguy"; + level.helidialog["tracking"][2] = "ac130_fco_guyrunnin"; + level.helidialog["tracking"][3] = "ac130_fco_gotarunner"; + level.helidialog["tracking"][4] = "ac130_fco_personnelthere"; + level.helidialog["tracking"][5] = "ac130_fco_rightthere"; + level.helidialog["tracking"][6] = "ac130_fco_tracking"; + level.helidialog["locked"][0] = "ac130_fco_lightemup"; + level.helidialog["locked"][1] = "ac130_fco_takehimout"; + level.helidialog["locked"][2] = "ac130_fco_nailthoseguys"; + level.lasthelidialogtime = 0; + maps\mp\_utility::func_2BDB("helicopter"); +} + +//Function Number: 2 +makehelitype(param_00,param_01,param_02) +{ + level.chopper_fx["explode"]["death"][param_00] = loadfx(param_01); + level.lightfxfunc[param_00] = param_02; +} + +//Function Number: 3 +addairexplosion(param_00,param_01) +{ + level.chopper_fx["explode"]["air_death"][param_00] = loadfx(param_01); +} + +//Function Number: 4 +pavelowlightfx() +{ + playfxontag(level.chopper_fx["light"]["left"],self,"tag_light_L_wing1"); + wait 0.05; + playfxontag(level.chopper_fx["light"]["right"],self,"tag_light_R_wing1"); + wait 0.05; + playfxontag(level.chopper_fx["light"]["belly"],self,"tag_light_belly"); + wait 0.05; + playfxontag(level.chopper_fx["light"]["tail"],self,"tag_light_tail"); + wait 0.05; + playfxontag(level.chopper_fx["light"]["tail"],self,"tag_light_tail2"); + wait 0.05; + playfxontag(level.chopper_fx["light"]["belly"],self,"tag_light_cockpit01"); +} + +//Function Number: 5 +defaultlightfx() +{ + playfxontag(level.chopper_fx["light"]["left"],self,"tag_light_L_wing"); + wait 0.05; + playfxontag(level.chopper_fx["light"]["right"],self,"tag_light_R_wing"); + wait 0.05; + playfxontag(level.chopper_fx["light"]["belly"],self,"tag_light_belly"); + wait 0.05; + playfxontag(level.chopper_fx["light"]["tail"],self,"tag_light_tail"); +} + +//Function Number: 6 +usehelicopter(param_00) +{ + return tryusehelicopter(param_00,"helicopter"); +} + +//Function Number: 7 +func_2BE2(param_00) +{ + return tryusehelicopter(param_00,"blackbox"); +} + +//Function Number: 8 +usehelicopterflares(param_00) +{ + return tryusehelicopter(param_00,"flares"); +} + +//Function Number: 9 +usehelicopterminigun(param_00) +{ + if(isdefined(self.laststand) && !maps\mp\_utility::func_27AF("specialty_finalstand")) + { + self iprintlnbold(&"MP_UNAVILABLE_IN_LASTSTAND"); + return 0; + } + + return tryusehelicopter(param_00,"minigun"); +} + +//Function Number: 10 +usehelicoptermk19(param_00) +{ + if(isdefined(self.laststand) && !maps\mp\_utility::func_27AF("specialty_finalstand")) + { + self iprintlnbold(&"MP_UNAVILABLE_IN_LASTSTAND"); + return 0; + } + + return tryusehelicopter(param_00,"mk19"); +} + +//Function Number: 11 +tryusehelicopter(param_00,param_01) +{ + if(isdefined(level.civilianjetflyby)) + { + self iprintlnbold(&"MP_CIVILIAN_AIR_TRAFFIC"); + return 0; + } + + if(maps\mp\_utility::func_2BE7()) + { + return 0; + } + + if(maps\mp\_utility::func_27E5()) + { + return 0; + } + + var_02 = 1; + if((!isdefined(param_01) || param_01 == "flares") && isdefined(level.chopper)) + { + self iprintlnbold(&"MP_HELI_IN_QUEUE"); + if(isdefined(param_01)) + { + var_03 = "helicopter_" + param_01; + } + else + { + var_03 = "helicopter"; + } + + thread maps\mp\killstreaks\_killstreaks::updatekillstreaks(); + var_04 = spawn("script_origin",(0,0,0)); + var_04 hide(); + var_04 thread func_2BF1(self,"disconnect"); + var_04.player = self; + var_04.lifeid = param_00; + var_04.helitype = param_01; + var_04.streakname = var_03; + maps\mp\_utility::func_2BEB("helicopter",var_04); + var_05 = undefined; + if(!self hasweapon(common_scripts\utility::getlastweapon())) + { + var_05 = maps\mp\killstreaks\_killstreaks::func_31E7(); + } + else + { + var_05 = common_scripts\utility::getlastweapon(); + } + + var_06 = maps\mp\killstreaks\_killstreaks::func_2C01("helicopter_flares"); + thread maps\mp\killstreaks\_killstreaks::waittakekillstreakweapon(var_06,var_05); + return 0; + } + else if(isdefined(level.chopper)) + { + self iprintlnbold(&"MP_AIR_SPACE_TOO_CROWDED"); + return 0; + } + else if(maps\mp\_utility::func_2BEC() >= maps\mp\_utility::maxvehiclesallowed() || level.fauxvehiclecount + var_06 >= maps\mp\_utility::maxvehiclesallowed()) + { + self iprintlnbold(&"MP_TOO_MANY_VEHICLES"); + return 0; + } + + var_06 = 1; + if(isdefined(var_05) && var_05 == "minigun") + { + maps\mp\_utility::setusingremote("helicopter_" + var_05); + var_07 = maps\mp\killstreaks\_killstreaks::initridekillstreak(); + if(var_07 != "success") + { + if(var_07 != "disconnect") + { + maps\mp\_utility::clearusingremote(); + } + + return 0; + } + + if(isdefined(level.chopper)) + { + maps\mp\_utility::clearusingremote(); + self iprintlnbold(&"MP_AIR_SPACE_TOO_CROWDED"); + return 0; + } + else if(maps\mp\_utility::func_2BEC() >= maps\mp\_utility::maxvehiclesallowed() || level.fauxvehiclecount + var_06 >= maps\mp\_utility::maxvehiclesallowed()) + { + maps\mp\_utility::clearusingremote(); + self iprintlnbold(&"MP_TOO_MANY_VEHICLES"); + return 0; + } + } + + func_2BF2(var_04,var_05); + return 1; +} + +//Function Number: 12 +func_2BF1(param_00,param_01) +{ + self endon("death"); + param_00 waittill(param_01); + self delete(); +} + +//Function Number: 13 +func_2BF2(param_00,param_01) +{ + maps\mp\_utility::func_80C7(); + if(!isdefined(param_01)) + { + param_01 = ""; + } + + switch(param_01) + { + case "flares": + thread func_2C56(); + var_02 = "helicopter_flares"; + break; + + case "minigun": + var_02 = "helicopter_minigun"; + break; + + default: + var_02 = "helicopter"; + break; + } + + var_03 = self.pers["team"]; + var_04 = level.heli_start_nodes[randomint(level.heli_start_nodes.size)]; + maps\mp\_matchdata::logkillstreakevent(var_02,self.origin); + thread heli_think(param_00,self,var_04,self.pers["team"],param_01); +} + +//Function Number: 14 +precachehelicopter(param_00,param_01) +{ + var_02 = loadfx("explosions/tanker_explosion"); + precachemodel(param_00); + level.heli_types[param_00] = param_01; + level.cobra_missile_models = []; + level.cobra_missile_models["cobra_Hellfire"] = "projectile_hellfire_missile"; + precachemodel(level.cobra_missile_models["cobra_Hellfire"]); + level.heli_sound["allies"]["hit"] = "cobra_helicopter_hit"; + level.heli_sound["allies"]["hitsecondary"] = "cobra_helicopter_secondary_exp"; + level.heli_sound["allies"]["damaged"] = "cobra_helicopter_damaged"; + level.heli_sound["allies"]["spinloop"] = "cobra_helicopter_dying_loop"; + level.heli_sound["allies"]["spinstart"] = "cobra_helicopter_dying_layer"; + level.heli_sound["allies"]["crash"] = "cobra_helicopter_crash"; + level.heli_sound["allies"]["missilefire"] = "weap_cobra_missile_fire"; + level.heli_sound["axis"]["hit"] = "cobra_helicopter_hit"; + level.heli_sound["axis"]["hitsecondary"] = "cobra_helicopter_secondary_exp"; + level.heli_sound["axis"]["damaged"] = "cobra_helicopter_damaged"; + level.heli_sound["axis"]["spinloop"] = "cobra_helicopter_dying_loop"; + level.heli_sound["axis"]["spinstart"] = "cobra_helicopter_dying_layer"; + level.heli_sound["axis"]["crash"] = "cobra_helicopter_crash"; + level.heli_sound["axis"]["missilefire"] = "weap_cobra_missile_fire"; +} + +//Function Number: 15 +spawn_helicopter(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = spawnhelicopter(param_00,param_01,param_02,param_03,param_04); + if(!isdefined(var_05)) + { + return undefined; + } + + var_05.heli_type = level.heli_types[param_04]; + var_05 thread [[ level.lightfxfunc[var_05.heli_type] ]](); + var_05 func_2C47(); + var_05.zoffset = (0,0,var_05 gettagorigin("tag_origin")[2] - var_05 gettagorigin("tag_ground")[2]); + var_05.attractor = missile_createattractorent(var_05,level.heli_attract_strength,level.heli_attract_range); + return var_05; +} + +//Function Number: 16 +heliride(param_00,param_01) +{ + self endon("disconnect"); + param_01 endon("helicopter_done"); + thread maps\mp\_utility::teamplayercardsplash("used_helicopter_minigun",self); + self visionsetthermalforplayer("black_bw",0); + maps\mp\_utility::_giveweapon("heli_remote_mp"); + self switchtoweapon("heli_remote_mp"); + self visionsetthermalforplayer(game["thermal_vision"],6); + self thermalvisionon(); + self thermalvisionfofoverlayon(); + thread thermalvision(param_01); + if(getdvarint("camera_thirdPerson")) + { + maps\mp\_utility::setthirdpersondof(0); + } + + param_01 vehicleturretcontrolon(self); + self playerlinkweaponviewtodelta(param_01,"tag_player",1,180,180,0,180,1); + param_01.gunner = self; + self.heliridelifeid = param_00; + thread func_2C02(param_01); + thread func_2BFD(param_01); + for(;;) + { + param_01 waittill("turret_fire"); + param_01 fireweapon(); + earthquake(0.2,1,param_01.origin,1000); + } +} + +//Function Number: 17 +thermalvision(param_00) +{ + param_00 endon("helicopter_done"); + if(maps\mp\_utility::getintproperty("ac130_thermal_enabled",1) == 0) + { + return; + } + + var_01 = 0; + self visionsetthermalforplayer(level.ac130.enhanced_vision,1); + self.lastvisionsetthermal = level.ac130.enhanced_vision; + self thermalvisionoff(); + self notifyonplayercommand("switch thermal","+usereload"); + self notifyonplayercommand("switch thermal","+activate"); + for(;;) + { + self waittill("switch thermal"); + if(!var_01) + { + self visionsetthermalforplayer(level.ac130.thermal_vision,0.62); + self.lastvisionsetthermal = level.ac130.thermal_vision; + self thermalvisionon(); + } + else + { + self visionsetthermalforplayer(level.ac130.enhanced_vision,0.51); + self.lastvisionsetthermal = level.ac130.enhanced_vision; + self thermalvisionoff(); + } + + var_01 = !var_01; + } +} + +//Function Number: 18 +func_2BFD(param_00) +{ + self endon("disconnect"); + param_00 endon("helicopter_done"); + if(!isdefined(level.helitargetorigin)) + { + level.helitargetorigin = spawn("script_origin",(0,0,0)); + level.helitargetorigin hide(); + } + + for(;;) + { + var_01 = bullettrace(self geteye(),self geteye() + anglestoforward(self getplayerangles()) * 100000,1,self); + level.helitargetorigin.origin = var_01["position"]; + var_02 = []; + var_03 = []; + foreach(var_05 in level.players) + { + if(!isalive(var_05)) + { + continue; + } + + if(level.teambased && var_05.team == self.team) + { + continue; + } + + if(var_05 == self) + { + continue; + } + + if(var_05 maps\mp\_utility::func_27AF("specialty_blindeye")) + { + continue; + } + + if(isdefined(var_05.spawntime) && gettime() - var_05.spawntime / 1000 <= 5) + { + continue; + } + + var_05.remotehelilos = 1; + if(!bullettracepassed(self geteye(),var_05.origin + (0,0,32),0,param_00)) + { + var_03[var_03.size] = var_05; + continue; + } + + var_02[var_02.size] = var_05; + } + + var_07 = []; + var_07 = var_02; + foreach(var_09 in var_03) + { + var_02[var_02.size] = var_09; + } + + if(var_07.size != 0) + { + var_0B = sortbydistance(var_07,var_01["position"]); + if(distance(var_0B[0].origin,var_01["position"]) < 384 && var_0B[0] damageconetrace(var_01["position"])) + { + self weaponlockfinalize(var_0B[0]); + helidialog("locked"); + } + else + { + self weaponlockstart(var_0B[0]); + helidialog("tracking"); + } + } + else + { + self weaponlockfree(); + } + + wait 0.05; + } +} + +//Function Number: 19 +helidialog(param_00) +{ + if(gettime() - level.lasthelidialogtime < 6000) + { + return; + } + + level.lasthelidialogtime = gettime(); + var_01 = randomint(level.helidialog[param_00].size); + var_02 = level.helidialog[param_00][var_01]; + var_03 = maps\mp\gametypes\_teams::getteamvoiceprefix(self.team) + var_02; + self playlocalsound(var_03); +} + +//Function Number: 20 +func_2C00(param_00) +{ + self remotecamerasoundscapeoff(); + self thermalvisionoff(); + self thermalvisionfofoverlayoff(); + self unlink(); + self switchtoweapon(common_scripts\utility::getlastweapon()); + maps\mp\_utility::clearusingremote(); + if(getdvarint("camera_thirdPerson")) + { + maps\mp\_utility::setthirdpersondof(1); + } + + self visionsetthermalforplayer(game["thermal_vision"],0); + if(isdefined(param_00)) + { + var_01 = maps\mp\killstreaks\_killstreaks::func_2C01("helicopter_minigun"); + self takeweapon(var_01); + param_00 vehicleturretcontroloff(self); + } + + self notify("heliPlayer_removed"); +} + +//Function Number: 21 +func_2C02(param_00) +{ + self endon("disconnect"); + param_00 waittill("helicopter_done"); + func_2C00(param_00); +} + +//Function Number: 22 +getposnearenemies() +{ + var_00 = []; + foreach(var_02 in level.players) + { + if(var_02.team == "spectator") + { + continue; + } + + if(var_02.team == self.team) + { + continue; + } + + if(!isalive(var_02)) + { + continue; + } + + if(!bullettracepassed(var_02.origin,var_02.origin + (0,0,2048),0,var_02)) + { + continue; + } + + var_02.remotehelidist = 0; + var_00[var_00.size] = var_02; + } + + if(!var_00.size) + { + return undefined; + } + + for(var_04 = 0;var_04 < var_00.size;var_04++) + { + for(var_05 = var_04 + 1;var_05 < var_00.size;var_05++) + { + var_06 = distancesquared(var_00[var_04].origin,var_00[var_05].origin); + var_00[var_04].remotehelidist = var_00[var_04].remotehelidist + var_06; + var_00[var_05].remotehelidist = var_00[var_05].remotehelidist + var_06; + } + } + + var_07 = var_00[0]; + foreach(var_02 in var_00) + { + if(var_02.remotehelidist < var_07.remotehelidist) + { + var_07 = var_02; + } + } + + return var_07.origin; +} + +//Function Number: 23 +func_2C05(param_00) +{ + var_01 = []; + foreach(var_03 in param_00) + { + var_03.validplayers = []; + var_03.nodescore = 0; + } + + foreach(var_06 in level.players) + { + if(!isalive(var_06)) + { + continue; + } + + if(var_06.team == self.team) + { + continue; + } + + foreach(var_03 in param_00) + { + if(distancesquared(var_06.origin,var_03.origin) > 1048576) + { + continue; + } + + var_03.validplayers[var_03.validplayers.size] = var_06; + } + } + + var_0A = param_00[0]; + foreach(var_03 in param_00) + { + var_0C = getent(var_03.target,"targetname"); + foreach(var_06 in var_03.validplayers) + { + var_03.nodescore = var_03.nodescore + 1; + if(bullettracepassed(var_06.origin + (0,0,32),var_0C.origin,0,var_06)) + { + var_03.nodescore = var_03.nodescore + 3; + } + } + + if(var_03.nodescore > var_0A.nodescore) + { + var_0A = var_03; + } + } + + return getent(var_0A.target,"targetname"); +} + +//Function Number: 24 +heli_think(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = param_02.origin; + var_06 = param_02.angles; + switch(param_04) + { + case "minigun": + var_07 = "cobra_minigun_mp"; + if(param_01.team == "allies") + { + var_08 = "vehicle_apache_mp"; + } + else + { + var_08 = "vehicle_mi-28_mp"; + } + break; + + case "flares": + var_07 = "pavelow_mp"; + if(param_02.team == "allies") + { + var_08 = "vehicle_pavelow"; + } + else + { + var_08 = "vehicle_pavelow_opfor"; + } + break; + + default: + var_07 = "cobra_mp"; + if(param_02.team == "allies") + { + var_08 = "vehicle_cobra_helicopter_fly_low"; + } + else + { + var_08 = "vehicle_mi24p_hind_mp"; + } + break; + } + + var_09 = spawn_helicopter(param_01,var_05,var_06,var_07,var_08); + if(!isdefined(var_09)) + { + return; + } + + level.chopper = var_09; + var_09.helitype = param_04; + var_09.lifeid = param_00; + var_09.team = param_03; + var_09.pers["team"] = param_03; + var_09.owner = param_01; + if(param_04 == "flares") + { + var_09.maxhealth = level.heli_maxhealth * 2; + } + else + { + var_09.maxhealth = level.heli_maxhealth; + } + + var_09.targeting_delay = level.heli_targeting_delay; + var_09.primarytarget = undefined; + var_09.secondarytarget = undefined; + var_09.attacker = undefined; + var_09.currentstate = "ok"; + var_09.empgrenaded = 0; + if(param_04 == "flares" || param_04 == "minigun") + { + var_09 thread heli_flares_monitor(); + } + + var_09 thread heli_leave_on_disconnect(param_01); + var_09 thread func_2C2B(param_01); + var_09 thread heli_leave_on_gameended(param_01); + var_09 thread func_2447(); + var_09 thread func_2C22(); + var_09 thread func_2C14(); + var_09 endon("helicopter_done"); + var_09 endon("crashing"); + var_09 endon("leaving"); + var_09 endon("death"); + if(param_04 == "minigun") + { + param_01 thread heliride(param_00,var_09); + var_09 thread heli_leave_on_spawned(param_01); + } + + var_0A = getentarray("heli_attack_area","targetname"); + var_0B = level.heli_loop_nodes[randomint(level.heli_loop_nodes.size)]; + switch(param_04) + { + case "minigun": + var_09 thread func_2C17(); + var_09 heli_fly_simple_path(param_02); + var_09 thread func_2C2E(40); + if(var_0A.size) + { + var_09 thread func_2C3F(var_0A); + } + else + { + var_09 thread func_2C3A(var_0B); + } + break; + + case "flares": + var_09 thread makegunship(); + thread maps\mp\_utility::teamplayercardsplash("used_helicopter_flares",param_01); + var_09 heli_fly_simple_path(param_02); + var_09 thread func_2C2E(60); + var_09 thread func_2C3A(var_0B); + break; + + default: + var_09 thread func_2C2F(); + var_09 thread func_2C17(); + var_09 heli_fly_simple_path(param_02); + var_09 thread func_2C2E(60); + var_09 thread func_2C3A(var_0B); + break; + } +} + +//Function Number: 25 +makegunship() +{ + self endon("death"); + self endon("helicopter_done"); + wait 0.5; + var_00 = spawnturret("misc_turret",self.origin,"pavelow_minigun_mp"); + var_00.lifeid = self.lifeid; + var_00 linkto(self,"tag_gunner_left",(0,0,0),(0,0,0)); + var_00 setmodel("weapon_minigun"); + var_00.owner = self.owner; + var_00.team = self.team; + var_00 maketurretinoperable(); + var_00.pers["team"] = self.team; + var_00.killcament = self; + self.mgturretleft = var_00; + self.mgturretleft setdefaultdroppitch(0); + var_00 = spawnturret("misc_turret",self.origin,"pavelow_minigun_mp"); + var_00.lifeid = self.lifeid; + var_00 linkto(self,"tag_gunner_right",(0,0,0),(0,0,0)); + var_00 setmodel("weapon_minigun"); + var_00.owner = self.owner; + var_00.team = self.team; + var_00 maketurretinoperable(); + var_00.pers["team"] = self.team; + var_00.killcament = self; + self.mgturretright = var_00; + self.mgturretright setdefaultdroppitch(0); + if(level.teambased) + { + self.mgturretleft setturretteam(self.team); + self.mgturretright setturretteam(self.team); + } + + self.mgturretleft setmode("auto_nonai"); + self.mgturretright setmode("auto_nonai"); + self.mgturretleft setsentryowner(self.owner); + self.mgturretright setsentryowner(self.owner); + self.mgturretleft setturretminimapvisible(0); + self.mgturretright setturretminimapvisible(0); + self.mgturretleft.chopper = self; + self.mgturretright.chopper = self; + self.mgturretleft thread sentry_attacktargets(); + self.mgturretright thread sentry_attacktargets(); + thread func_2C10(); +} + +//Function Number: 26 +func_2C10() +{ + self waittill("helicopter_done"); + self.mgturretright delete(); + self.mgturretleft delete(); +} + +//Function Number: 27 +sentry_attacktargets() +{ + self endon("death"); + self endon("helicopter_done"); + level endon("game_ended"); + for(;;) + { + self waittill("turretstatechange"); + if(self isfiringturret() && !self.chopper.empgrenaded) + { + thread sentry_burstfirestart(); + continue; + } + + thread sentry_burstfirestop(); + } +} + +//Function Number: 28 +sentry_burstfirestart() +{ + self endon("death"); + self endon("stop_shooting"); + self endon("leaving"); + level endon("game_ended"); + var_00 = 0.1; + var_01 = 40; + var_02 = 80; + var_03 = 1; + var_04 = 2; + for(;;) + { + var_05 = randomintrange(var_01,var_02 + 1); + for(var_06 = 0;var_06 < var_05;var_06++) + { + var_07 = self getturrettarget(0); + if(isdefined(var_07) && !isdefined(var_07.spawntime) || gettime() - var_07.spawntime / 1000 > 5) + { + self shootturret(); + } + + wait var_00; + } + + wait randomfloatrange(var_03,var_04); + } +} + +//Function Number: 29 +sentry_burstfirestop() +{ + self notify("stop_shooting"); +} + +//Function Number: 30 +func_2C14() +{ + var_00 = self getentitynumber(); + common_scripts\utility::waittill_any("death","crashing","leaving"); + func_2C49(var_00); + self notify("helicopter_done"); + self notify("helicopter_removed"); + var_01 = undefined; + var_02 = maps\mp\_utility::queueremovefirst("helicopter"); + if(!isdefined(var_02)) + { + level.chopper = undefined; + return; + } + + var_01 = var_02.player; + var_03 = var_02.lifeid; + var_04 = var_02.streakname; + var_05 = var_02.helitype; + var_02 delete(); + if(isdefined(var_01) && var_01.sessionstate == "playing" || var_01.sessionstate == "dead") + { + var_01 maps\mp\killstreaks\_killstreaks::func_2C16(var_04,1); + var_01 func_2BF2(var_03,var_05); + return; + } + + level.chopper = undefined; +} + +//Function Number: 31 +func_2C17() +{ + self endon("death"); + self endon("helicopter_done"); + for(;;) + { + var_00 = []; + self.primarytarget = undefined; + self.secondarytarget = undefined; + var_01 = level.players; + foreach(var_03 in level.players) + { + if(!cantarget_turret(var_03)) + { + continue; + } + + var_00[var_00.size] = var_03; + } + + if(var_00.size) + { + for(var_05 = getbestprimarytarget(var_00);!isdefined(var_05);var_05 = getbestprimarytarget(var_00)) + { + wait 0.05; + } + + self.primarytarget = var_05; + self notify("primary acquired"); + } + + if(isdefined(level.harriers)) + { + foreach(var_07 in level.harriers) + { + if(!isdefined(var_07)) + { + continue; + } + + if((level.teambased && var_07.team != self.team) || !level.teambased && var_07.owner != self.owner) + { + self notify("secondary acquired"); + self.secondarytarget = var_07; + } + } + } + + wait 0.5; + } +} + +//Function Number: 32 +cantarget_turret(param_00) +{ + var_01 = 1; + if(!isalive(param_00) || param_00.sessionstate != "playing") + { + return 0; + } + + if(self.helitype == "remote_mortar") + { + if(param_00 sightconetrace(self.origin,self) < 1) + { + return 0; + } + } + else if(self.helitype != "flares") + { + if(!self vehicle_canturrettargetpoint(param_00.origin + (0,0,40),1,self)) + { + return 0; + } + } + + if(distance(param_00.origin,self.origin) > level.heli_visual_range) + { + return 0; + } + + if(level.teambased && param_00.pers["team"] == self.team) + { + return 0; + } + + if(param_00 == self.owner) + { + return 0; + } + + if(isdefined(param_00.spawntime) && gettime() - param_00.spawntime / 1000 <= 5) + { + return 0; + } + + if(param_00 maps\mp\_utility::func_27AF("specialty_blindeye")) + { + return 0; + } + + var_02 = self.origin + (0,0,-160); + var_03 = anglestoforward(self.angles); + var_04 = var_02 + 144 * var_03; + if(param_00 sightconetrace(var_04,self) < level.heli_target_recognition) + { + return 0; + } + + return var_01; +} + +//Function Number: 33 +getbestprimarytarget(param_00) +{ + foreach(var_02 in param_00) + { + func_2C1B(var_02); + } + + var_04 = 0; + var_05 = undefined; + var_06 = getentarray("minimap_corner","targetname"); + foreach(var_02 in param_00) + { + if(var_06.size == 2) + { + var_08 = var_06[0].origin; + var_09 = var_06[0].origin; + if(var_06[1].origin[0] > var_09[0]) + { + var_09 = (var_06[1].origin[0],var_09[1],var_09[2]); + } + else + { + var_08 = (var_06[1].origin[0],var_08[1],var_08[2]); + } + + if(var_06[1].origin[1] > var_09[1]) + { + var_09 = (var_09[0],var_06[1].origin[1],var_09[2]); + } + else + { + var_08 = (var_08[0],var_06[1].origin[1],var_08[2]); + } + + if(var_02.origin[0] < var_08[0] || var_02.origin[0] > var_09[0] || var_02.origin[1] < var_08[1] || var_02.origin[1] > var_09[1]) + { + continue; + } + } + + if(var_02.threatlevel < var_04) + { + continue; + } + + var_04 = var_02.threatlevel; + var_05 = var_02; + } + + return var_05; +} + +//Function Number: 34 +func_2C1B(param_00) +{ + param_00.threatlevel = 0; + var_01 = distance(param_00.origin,self.origin); + param_00.threatlevel = param_00.threatlevel + level.heli_visual_range - var_01 / level.heli_visual_range * 100; + if(isdefined(self.attacker) && param_00 == self.attacker) + { + param_00.threatlevel = param_00.threatlevel + 100; + } + + param_00.threatlevel = param_00.threatlevel + param_00.score * 4; + if(isdefined(param_00.antithreat)) + { + param_00.threatlevel = param_00.threatlevel - param_00.antithreat; + } + + if(param_00.threatlevel <= 0) + { + param_00.threatlevel = 1; + } +} + +//Function Number: 35 +heli_reset() +{ + self cleartargetyaw(); + self cleargoalyaw(); + self vehicle_setspeed(60,25); + self setyawspeed(75,45,45); + self setmaxpitchroll(30,30); + self setneargoalnotifydist(256); + self setturningability(0.9); +} + +//Function Number: 36 +func_2C1E(param_00) +{ + self endon("death"); + self.recentdamageamount = self.recentdamageamount + param_00; + wait 4; + self.recentdamageamount = self.recentdamageamount - param_00; +} + +//Function Number: 37 +func_2447() +{ + self endon("death"); + self endon("crashing"); + self endon("leaving"); + self.health = 999999; + self.damagetaken = 0; + self.recentdamageamount = 0; + for(;;) + { + self waittill("damage",var_00,var_01,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09); + if(isdefined(var_01.class) && var_01.class == "worldspawn") + { + continue; + } + else if(var_01 == self) + { + continue; + } + + if(!maps\mp\gametypes\_weapons::func_27A1(self.owner,var_01)) + { + continue; + } + + self.attacker = var_01; + var_0A = var_00; + if(isplayer(var_01)) + { + var_01 maps\mp\gametypes\_damagefeedback::updatedamagefeedback(""); + if(var_04 == "MOD_RIFLE_BULLET" || var_04 == "MOD_PISTOL_BULLET") + { + if(self.helitype == "flares") + { + var_0A = var_0A * level.heli_armor_bulletdamage; + } + + if(var_01 maps\mp\_utility::func_27AF("specialty_armorpiercing")) + { + var_0A = var_0A + var_00 * level.armorpiercingmod; + } + } + } + + if(isdefined(var_01.owner) && isplayer(var_01.owner)) + { + var_01.owner maps\mp\gametypes\_damagefeedback::updatedamagefeedback("helicopter"); + } + + if(isdefined(var_09)) + { + switch(var_09) + { + case "remote_mortar_missile_mp": + case "javelin_mp": + case "stinger_mp": + case "remotemissile_projectile_mp": + case "ac130_40mm_mp": + case "ac130_105mm_mp": + self.largeprojectiledamage = 1; + var_0A = self.maxhealth + 1; + break; + + case "sam_projectile_mp": + self.largeprojectiledamage = 1; + switch(self.helitype) + { + case "osprey": + case "flares": + case "osprey_gunner": + var_0A = self.maxhealth * 0.07; + break; + + case "littlebird": + case "helicopter": + var_0A = self.maxhealth * 0.09; + break; + } + break; + + case "emp_grenade_mp": + var_0A = 0; + thread heli_empgrenaded(); + break; + + case "osprey_player_minigun_mp": + self.largeprojectiledamage = 0; + var_0A = var_0A * 2; + break; + } + + maps\mp\killstreaks\_killstreaks::killstreakhit(var_01,var_09,self); + } + + self.damagetaken = self.damagetaken + var_0A; + thread func_2C1E(var_0A); + if(self.damagetaken >= self.maxhealth) + { + if((level.teambased && self.team != var_01.team) || !level.teambased) + { + var_0B = undefined; + if(isdefined(var_01.owner) && !isdefined(self.owner) || var_01.owner != self.owner) + { + var_0B = var_01.owner; + } + else if(!isdefined(var_01.owner) && var_01.classname == "script_vehicle") + { + return; + } + else if(!isdefined(self.owner) || var_01 != self.owner) + { + var_0B = var_01; + } + + if(isdefined(var_0B)) + { + var_0B notify("destroyed_helicopter"); + switch(self.helitype) + { + case "flares": + var_0B thread maps\mp\gametypes\_rank::xpeventpopup(&"SPLASHES_DESTROYED_PAVELOW"); + thread maps\mp\_utility::teamplayercardsplash("callout_destroyed_helicopter_flares",var_0B); + var_0C = 400; + break; + + case "minigun": + var_0C thread maps\mp\gametypes\_rank::xpeventpopup(&"SPLASHES_DESTROYED_MINIGUNNER"); + thread maps\mp\_utility::teamplayercardsplash("callout_destroyed_helicopter_minigun",var_0C); + var_0C = 300; + break; + + case "osprey": + case "osprey_gunner": + var_0C thread maps\mp\gametypes\_rank::xpeventpopup(&"SPLASHES_DESTROYED_OSPREY"); + thread maps\mp\_utility::teamplayercardsplash("callout_destroyed_osprey",var_0C); + var_0C = 300; + break; + + case "littlebird": + var_0C thread maps\mp\gametypes\_rank::xpeventpopup(&"SPLASHES_DESTROYED_LITTLE_BIRD"); + thread maps\mp\_utility::teamplayercardsplash("callout_destroyed_little_bird",var_0C); + var_0C = 200; + break; + + default: + var_0B thread maps\mp\gametypes\_rank::xpeventpopup(&"SPLASHES_DESTROYED_HELICOPTER"); + thread maps\mp\_utility::teamplayercardsplash("callout_destroyed_helicopter",var_0B); + var_0C = 200; + break; + } + + var_0B thread maps\mp\gametypes\_rank::func_2AB3("kill",var_0C,var_09,var_04); + thread maps\mp\gametypes\_missions::vehiclekilled(self.owner,self,undefined,var_0B,var_00,var_04,var_09); + } + } + } + } +} + +//Function Number: 38 +heli_empgrenaded() +{ + self notify("heli_EMPGrenaded"); + self endon("heli_EMPGrenaded"); + self endon("death"); + self endon("leaving"); + self endon("crashing"); + self.owner endon("disconnect"); + level endon("game_ended"); + self.empgrenaded = 1; + if(isdefined(self.mgturretleft)) + { + self.mgturretleft notify("stop_shooting"); + } + + if(isdefined(self.mgturretright)) + { + self.mgturretright notify("stop_shooting"); + } + + wait 3.5; + self.empgrenaded = 0; + if(isdefined(self.mgturretleft)) + { + self.mgturretleft notify("turretstatechange"); + } + + if(isdefined(self.mgturretright)) + { + self.mgturretright notify("turretstatechange"); + } +} + +//Function Number: 39 +func_2C22() +{ + self endon("death"); + self endon("leaving"); + self endon("crashing"); + self.currentstate = "ok"; + self.laststate = "ok"; + self setdamagestage(3); + var_00 = 3; + self setdamagestage(var_00); + for(;;) + { + if(self.damagetaken >= self.maxhealth * 0.33 && var_00 == 3) + { + var_00 = 2; + self setdamagestage(var_00); + self.currentstate = "light smoke"; + playfxontag(level.chopper_fx["damage"]["light_smoke"],self,"tag_engine_left"); + } + else if(self.damagetaken >= self.maxhealth * 0.66 && var_00 == 2) + { + var_00 = 1; + self setdamagestage(var_00); + self.currentstate = "heavy smoke"; + stopfxontag(level.chopper_fx["damage"]["light_smoke"],self,"tag_engine_left"); + playfxontag(level.chopper_fx["damage"]["heavy_smoke"],self,"tag_engine_left"); + } + else if(self.damagetaken > self.maxhealth) + { + var_00 = 0; + self setdamagestage(var_00); + stopfxontag(level.chopper_fx["damage"]["heavy_smoke"],self,"tag_engine_left"); + if(isdefined(self.largeprojectiledamage) && self.largeprojectiledamage) + { + thread func_2C28(1); + } + else + { + playfxontag(level.chopper_fx["damage"]["on_fire"],self,"tag_engine_left"); + thread func_2C24(); + } + } + + wait 0.05; + } +} + +//Function Number: 40 +func_2C24() +{ + self notify("crashing"); + var_00 = level.heli_crash_nodes[randomint(level.heli_crash_nodes.size)]; + thread func_2C26(180); + thread func_2C25(); + heli_fly_simple_path(var_00); + thread func_2C28(); +} + +//Function Number: 41 +func_2C25() +{ + playfxontag(level.chopper_fx["explode"]["large"],self,"tag_engine_left"); + self playsound(level.heli_sound[self.team]["hitsecondary"]); + wait 3; + if(!isdefined(self)) + { + return; + } + + playfxontag(level.chopper_fx["explode"]["large"],self,"tag_engine_left"); + self playsound(level.heli_sound[self.team]["hitsecondary"]); +} + +//Function Number: 42 +func_2C26(param_00) +{ + self endon("death"); + self playsound(level.heli_sound[self.team]["hit"]); + thread func_2C27(); + self setyawspeed(param_00,param_00,param_00); + while(isdefined(self)) + { + self settargetyaw(self.angles[1] + param_00 * 0.9); + wait 1; + } +} + +//Function Number: 43 +func_2C27() +{ + self endon("death"); + wait 0.25; + self stoploopsound(); + wait 0.05; + self playloopsound(level.heli_sound[self.team]["spinloop"]); + wait 0.05; + self playloopsound(level.heli_sound[self.team]["spinstart"]); +} + +//Function Number: 44 +func_2C28(param_00) +{ + self notify("death"); + if(isdefined(param_00) && isdefined(level.chopper_fx["explode"]["air_death"][self.heli_type])) + { + var_01 = self gettagangles("tag_deathfx"); + playfx(level.chopper_fx["explode"]["air_death"][self.heli_type],self gettagorigin("tag_deathfx"),anglestoforward(var_01),anglestoup(var_01)); + } + else + { + var_02 = self.origin; + var_03 = self.origin + (0,0,1) - self.origin; + playfx(level.chopper_fx["explode"]["death"][self.heli_type],var_02,var_03); + } + + self playsound(level.heli_sound[self.team]["crash"]); + wait 0.05; + if(isdefined(self.killcament)) + { + self.killcament delete(); + } + + maps\mp\_utility::func_80C8(); + self delete(); +} + +//Function Number: 45 +func_23F2(param_00,param_01,param_02) +{ + if(!isdefined(param_01)) + { + param_01 = 1; + } + + var_03 = undefined; + var_04 = undefined; + var_05 = "cobra_20mm_mp"; + var_06 = []; + switch(param_00) + { + case "ffar": + var_03 = "harrier_FFAR_mp"; + break; + var_41[0] + "tag_store_r_2" + break; + + default: + break; + } + + var_05 = weaponfiretime(var_04); + self setvehweapon(var_04); + var_07 = -1; + for(var_08 = 0;var_08 < param_02;var_08++) + { + var_07++; + if(var_07 >= var_41.size) + { + var_07 = 0; + } + + self setvehweapon("harrier_FFAR_mp"); + if(isdefined(var_03)) + { + var_09 = self fireweapon(var_41[var_07],var_03); + var_09 missile_setflightmodedirect(); + var_09 missile_settargetent(var_03); + } + else + { + var_09 = self fireweapon(var_41[var_07]); + var_09 missile_setflightmodedirect(); + var_09 missile_settargetent(var_03); + } + + if(var_08 < param_02 - 1) + { + wait var_05; + } + } +} + +//Function Number: 46 +check_owner() +{ + if(!isdefined(self.owner) || !isdefined(self.owner.pers["team"]) || self.owner.pers["team"] != self.team) + { + thread func_2C41(); + return 0; + } + + return 1; +} + +//Function Number: 47 +heli_leave_on_disconnect(param_00) +{ + self endon("death"); + self endon("helicopter_done"); + param_00 waittill("disconnect"); + thread func_2C41(); +} + +//Function Number: 48 +func_2C2B(param_00) +{ + self endon("death"); + self endon("helicopter_done"); + param_00 common_scripts\utility::waittill_any("joined_team","joined_spectators"); + thread func_2C41(); +} + +//Function Number: 49 +heli_leave_on_spawned(param_00) +{ + self endon("death"); + self endon("helicopter_done"); + param_00 waittill("spawned"); + thread func_2C41(); +} + +//Function Number: 50 +heli_leave_on_gameended(param_00) +{ + self endon("death"); + self endon("helicopter_done"); + level waittill("game_ended"); + thread func_2C41(); +} + +//Function Number: 51 +func_2C2E(param_00) +{ + self endon("death"); + self endon("helicopter_done"); + maps\mp\gametypes\_hostmigration::func_2740(param_00); + thread func_2C41(); +} + +//Function Number: 52 +func_2C2F() +{ + thread attack_primary(); + thread func_2C30(); +} + +//Function Number: 53 +func_2C30() +{ + self endon("death"); + self endon("crashing"); + self endon("leaving"); + for(;;) + { + if(isdefined(self.secondarytarget)) + { + self.secondarytarget.antithreat = undefined; + self.missiletarget = self.secondarytarget; + var_00 = 0; + while(isdefined(self.missiletarget) && isalive(self.missiletarget)) + { + if(func_2C32(self.missiletarget)) + { + thread missile_support(self.missiletarget,level.heli_missile_rof); + } + else + { + break; + } + + self waittill("missile ready"); + if(!isdefined(self.secondarytarget) || isdefined(self.secondarytarget) && self.missiletarget != self.secondarytarget) + { + break; + } + } + + if(isdefined(self.missiletarget)) + { + self.missiletarget.antithreat = undefined; + } + } + + self waittill("secondary acquired"); + check_owner(); + } +} + +//Function Number: 54 +func_2C32(param_00) +{ + var_01 = vectornormalize(param_00.origin - self.origin); + var_02 = anglestoforward(self.angles); + var_03 = vectornormalize(var_02); + var_04 = vectordot(var_01,var_03); + if(var_04 >= level.heli_missile_target_cone) + { + func_2C45("Missile sight: " + var_04,self,(0,0,-40),40); + return 1; + } + + return 0; +} + +//Function Number: 55 +missile_support(param_00,param_01) +{ + self endon("death"); + self endon("crashing"); + self endon("leaving"); + if(isdefined(param_00)) + { + if(level.teambased) + { + if(isdefined(param_00.owner) && param_00.team != self.team) + { + func_23F2("ffar",1,param_00); + self notify("missile fired"); + } + } + else if(isdefined(param_00.owner) && param_00.owner != self.owner) + { + func_23F2("ffar",1,param_00); + self notify("missile fired"); + } + } + + wait param_01; + self notify("missile ready"); +} + +//Function Number: 56 +attack_primary() +{ + self endon("death"); + self endon("crashing"); + self endon("leaving"); + for(;;) + { + wait 0.05; + if(!isalive(self.primarytarget)) + { + continue; + } + + var_00 = self.primarytarget; + var_00.antithreat = 0; + if(randomint(5) < 3) + { + var_01 = var_00.angles[1] + randomfloatrange(-30,30); + } + else + { + var_01 = randomint(360); + } + + var_02 = 96; + var_03 = cos(var_01) * var_02; + var_04 = sin(var_01) * var_02; + self setturrettargetent(var_00,(var_03,var_04,40)); + waitontargetordeath(var_00,3); + if(!isalive(var_00) || !self vehicle_canturrettargetpoint(var_00.origin + (0,0,40))) + { + continue; + } + + var_05 = weaponfiretime("cobra_20mm_mp"); + var_06 = 1; + var_07 = 0; + self playloopsound("weap_cobra_20mm_fire_npc"); + for(var_08 = 0;var_08 < level.heli_turretclipsize;var_08++) + { + if(self.empgrenaded) + { + break; + } + + self setvehweapon("cobra_20mm_mp"); + self fireweapon("tag_flash"); + if(var_08 < level.heli_turretclipsize - 1) + { + wait var_05; + } + + if(!isdefined(var_00)) + { + break; + } + + if(self vehicle_canturrettargetpoint(var_00.origin + (0,0,40),1,self)) + { + var_06 = max(var_06 - 0.05,0); + var_07 = 0; + } + else + { + var_07++; + } + + if(var_07 > 10) + { + break; + } + + var_09 = (var_03 * var_06 + randomfloatrange(-6,6),var_04 * var_06 + randomfloatrange(-6,6),40 + randomfloatrange(-6,6)); + self setturrettargetent(var_00,var_09); + } + + self stoploopsound(); + if(isalive(var_00)) + { + var_00.antithreat = var_00.antithreat + 100; + } + + wait randomfloatrange(0.5,2); + } +} + +//Function Number: 57 +waitontargetordeath(param_00,param_01) +{ + self endon("death"); + self endon("helicopter_done"); + param_00 endon("death"); + param_00 endon("disconnect"); + common_scripts\utility::waittill_notify_or_timeout("turret_on_target",param_01); +} + +//Function Number: 58 +firemissile(param_00) +{ + self endon("death"); + self endon("crashing"); + self endon("leaving"); + if(!isdefined(param_00)) + { + return; + } + + if(distance2d(self.origin,param_00.origin) < 512) + { + return; + } + + self setvehweapon("harrier_FFAR_mp"); + var_01 = self fireweapon("tag_flash",param_00); + var_01 missile_setflightmodedirect(); + var_01 missile_settargetent(param_00); +} + +//Function Number: 59 +func_2C37(param_00) +{ + var_01 = self.origin; + var_02 = param_00.origin; + var_03 = 0; + var_04 = 40; + var_05 = (0,0,-196); + for(var_06 = bullettrace(var_01 + var_05,var_02 + var_05,0,self);distancesquared(var_06["position"],var_02 + var_05) > 10 && var_03 < var_04;var_06 = bullettrace(var_01 + var_05,var_02 + var_05,0,self)) + { + if(var_01[2] < var_02[2]) + { + var_01 = var_01 + (0,0,128); + } + else if(var_01[2] > var_02[2]) + { + var_02 = var_02 + (0,0,128); + } + else + { + var_01 = var_01 + (0,0,128); + var_02 = var_02 + (0,0,128); + } + + var_03++; + } + + var_07 = []; + return var_41; +} + +//Function Number: 60 +func_2C38(param_00) +{ + var_01 = func_2C37(param_00); + if(var_01["start"] != self.origin) + { + if(isdefined(param_00.script_airspeed) && isdefined(param_00.script_accel)) + { + var_02 = param_00.script_airspeed; + var_03 = param_00.script_accel; + } + else + { + var_02 = 30 + randomint(20); + var_03 = 15 + randomint(15); + } + + self vehicle_setspeed(var_02,var_03); + self setvehgoalpos(var_01["start"] + (0,0,30),0); + self setgoalyaw(param_00.angles[1] + level.heli_angle_offset); + self waittill("goal"); + } + + if(var_01["end"] != param_00.origin) + { + if(isdefined(param_00.script_airspeed) && isdefined(param_00.script_accel)) + { + var_02 = param_00.script_airspeed; + var_03 = param_00.script_accel; + } + else + { + var_02 = 30 + randomint(20); + var_03 = 15 + randomint(15); + } + + self vehicle_setspeed(var_02,var_03); + self setvehgoalpos(var_01["end"] + (0,0,30),0); + self setgoalyaw(param_00.angles[1] + level.heli_angle_offset); + self waittill("goal"); + } +} + +//Function Number: 61 +heli_fly_simple_path(param_00) +{ + self endon("death"); + self endon("leaving"); + self notify("flying"); + self endon("flying"); + heli_reset(); + for(var_01 = param_00;isdefined(var_01.target);var_01 = var_02) + { + var_02 = getent(var_01.target,"targetname"); + if(isdefined(var_01.script_airspeed) && isdefined(var_01.script_accel)) + { + var_03 = var_01.script_airspeed; + var_04 = var_01.script_accel; + } + else + { + var_03 = 30 + randomint(20); + var_04 = 15 + randomint(15); + } + + self vehicle_setspeed(var_03,var_04); + if(!isdefined(var_02.target)) + { + self setvehgoalpos(var_02.origin + self.zoffset,1); + self waittill("near_goal"); + continue; + } + + self setvehgoalpos(var_02.origin + self.zoffset,0); + self waittill("near_goal"); + self setgoalyaw(var_02.angles[1]); + self waittillmatch("goal"); + } +} + +//Function Number: 62 +func_2C3A(param_00) +{ + self endon("death"); + self endon("crashing"); + self endon("leaving"); + self notify("flying"); + self endon("flying"); + heli_reset(); + thread heli_loop_speed_control(param_00); + for(var_01 = param_00;isdefined(var_01.target);var_01 = var_02) + { + var_02 = getent(var_01.target,"targetname"); + if(isdefined(var_01.script_airspeed) && isdefined(var_01.script_accel)) + { + self.desired_speed = var_01.script_airspeed; + self.desired_accel = var_01.script_accel; + } + else + { + self.desired_speed = 30 + randomint(20); + self.desired_accel = 15 + randomint(15); + } + + if(self.helitype == "flares") + { + self.desired_speed = self.desired_speed * 0.5; + self.desired_accel = self.desired_accel * 0.5; + } + + if(isdefined(var_02.script_delay) && isdefined(self.primarytarget) && !func_2C3E()) + { + self setvehgoalpos(var_02.origin + self.zoffset,1); + self waittill("near_goal"); + wait var_02.script_delay; + continue; + } + + self setvehgoalpos(var_02.origin + self.zoffset,0); + self waittill("near_goal"); + self setgoalyaw(var_02.angles[1]); + self waittillmatch("goal"); + } +} + +//Function Number: 63 +heli_loop_speed_control(param_00) +{ + self endon("death"); + self endon("crashing"); + self endon("leaving"); + if(isdefined(param_00.script_airspeed) && isdefined(param_00.script_accel)) + { + self.desired_speed = param_00.script_airspeed; + self.desired_accel = param_00.script_accel; + } + else + { + self.desired_speed = 30 + randomint(20); + self.desired_accel = 15 + randomint(15); + } + + var_01 = 0; + var_02 = 0; + for(;;) + { + var_03 = self.desired_speed; + var_04 = self.desired_accel; + if(self.helitype != "flares" && isdefined(self.primarytarget) && !func_2C3E()) + { + var_03 = var_03 * 0.25; + } + + if(var_01 != var_03 || var_02 != var_04) + { + self vehicle_setspeed(var_03,var_04); + var_01 = var_03; + var_02 = var_04; + } + + wait 0.05; + } +} + +//Function Number: 64 +func_2C3E() +{ + if(self.recentdamageamount > 50) + { + return 1; + } + + if(self.currentstate == "heavy smoke") + { + return 1; + } + + return 0; +} + +//Function Number: 65 +func_2C3F(param_00) +{ + self notify("flying"); + self endon("flying"); + self endon("death"); + self endon("crashing"); + self endon("leaving"); + for(;;) + { + var_01 = func_2C40(param_00); + func_2C38(var_01); + if(isdefined(var_01.script_airspeed) && isdefined(var_01.script_accel)) + { + var_02 = var_01.script_airspeed; + var_03 = var_01.script_accel; + } + else + { + var_02 = 30 + randomint(20); + var_03 = 15 + randomint(15); + } + + self vehicle_setspeed(var_02,var_03); + self setvehgoalpos(var_01.origin + self.zoffset,1); + self setgoalyaw(var_01.angles[1] + level.heli_angle_offset); + if(level.heli_forced_wait != 0) + { + self waittill("near_goal"); + wait level.heli_forced_wait; + continue; + } + + if(!isdefined(var_01.script_delay)) + { + self waittill("near_goal"); + wait 5 + randomint(5); + continue; + } + + self waittillmatch("goal"); + wait var_01.script_delay; + } +} + +//Function Number: 66 +func_2C40(param_00) +{ + return func_2C05(param_00); +} + +//Function Number: 67 +func_2C41(param_00) +{ + self notify("leaving"); + if(isdefined(self.helitype) && self.helitype == "osprey" && isdefined(self.pathgoal)) + { + self setvehgoalpos(self.pathgoal,1); + common_scripts\utility::waittill_any_timeout(5,"goal"); + } + + if(!isdefined(param_00)) + { + var_01 = level.heli_leave_nodes[randomint(level.heli_leave_nodes.size)]; + param_00 = var_01.origin; + } + + var_02 = spawn("script_origin",param_00); + if(isdefined(var_02)) + { + self setlookatent(var_02); + var_02 thread func_2C43(3); + } + + heli_reset(); + self vehicle_setspeed(100,45); + self setvehgoalpos(param_00,1); + self waittillmatch("goal"); + self notify("death"); + wait 0.05; + if(isdefined(self.killcament)) + { + self.killcament delete(); + } + + maps\mp\_utility::func_80C8(); + self delete(); +} + +//Function Number: 68 +func_2C43(param_00) +{ + self endon("death"); + level endon("game_ended"); + wait param_00; + self delete(); +} + +//Function Number: 69 +debug_print3d(param_00,param_01,param_02,param_03,param_04) +{ + if(isdefined(level.heli_debug) && level.heli_debug == 1) + { + thread func_2C46(param_00,param_01,param_02,param_03,param_04); + } +} + +//Function Number: 70 +func_2C45(param_00,param_01,param_02,param_03) +{ + if(isdefined(level.heli_debug) && level.heli_debug == 1) + { + if(isdefined(param_03)) + { + thread func_2C46(param_00,(0.8,0.8,0.8),param_01,param_02,param_03); + return; + } + + thread func_2C46(param_00,(0.8,0.8,0.8),param_01,param_02,0); + } +} + +//Function Number: 71 +debug_line(param_00,param_01,param_02,param_03) +{ + if(isdefined(level.heli_debug) && level.heli_debug == 1 && !isdefined(param_03)) + { + thread draw_line(param_00,param_01,param_02); + return; + } + + if(isdefined(level.heli_debug) && level.heli_debug == 1) + { + thread draw_line(param_00,param_01,param_02,param_03); + } +} + +//Function Number: 72 +func_2C46(param_00,param_01,param_02,param_03,param_04) +{ + if(param_04 == 0) + { + while(isdefined(param_02)) + { + wait 0.05; + } + + return; + } + + for(var_05 = 0;var_05 < param_04;var_05++) + { + if(!isdefined(param_02)) + { + break; + } + + wait 0.05; + } +} + +//Function Number: 73 +draw_line(param_00,param_01,param_02,param_03) +{ + if(isdefined(param_03)) + { + for(var_04 = 0;var_04 < param_03;var_04++) + { + wait 0.05; + } + + return; + } + + wait 0.05; +} + +//Function Number: 74 +func_2C47() +{ + level.helis[self getentitynumber()] = self; +} + +//Function Number: 75 +func_2C49(param_00) +{ + level.helis[param_00] = undefined; +} + +//Function Number: 76 +func_2C4A() +{ + level.littlebirds[self getentitynumber()] = self; +} + +//Function Number: 77 +func_2C4B() +{ + var_00 = self getentitynumber(); + self waittill("death"); + level.littlebirds[var_00] = undefined; +} + +//Function Number: 78 +exceededmaxlittlebirds(param_00) +{ + if(level.littlebirds.size >= 4 || level.littlebirds.size >= 2 && param_00 == "littlebird_flock") + { + return 1; + } + + return 0; +} + +//Function Number: 79 +func_2C4D() +{ + for(var_00 = 0;var_00 < 10;var_00++) + { + if(!isdefined(self)) + { + return; + } + + playfxontag(level._effect["ac130_flare"],self,"TAG_FLARE"); + wait 0.15; + } +} + +//Function Number: 80 +deployflares() +{ + var_00 = spawn("script_origin",self.origin + (0,0,-256)); + var_00.angles = self.angles; + var_00 movegravity((0,0,-1),5); + var_00 thread func_2C55(5); + return var_00; +} + +//Function Number: 81 +heli_flares_monitor() +{ + switch(self.helitype) + { + case "osprey": + case "osprey_gunner": + self.numflares = 2; + break; + + default: + self.numflares = 1; + break; + } + + thread func_2C53(); + thread handleincomingstinger(); +} + +//Function Number: 82 +handleincomingstinger(param_00) +{ + level endon("game_ended"); + self endon("death"); + self endon("crashing"); + self endon("leaving"); + self endon("helicopter_done"); + for(;;) + { + level waittill("stinger_fired",var_01,var_02,var_03); + if(!isdefined(var_03) || var_03 != self) + { + continue; + } + + if(isdefined(param_00)) + { + var_02 thread [[ param_00 ]](var_01,var_01.team,var_03); + continue; + } + + var_02 thread func_2C52(var_01,var_01.team,var_03); + } +} + +//Function Number: 83 +func_2C52(param_00,param_01,param_02) +{ + self endon("death"); + for(;;) + { + if(!isdefined(param_02)) + { + break; + } + + var_03 = param_02 getpointinbounds(0,0,0); + var_04 = distance(self.origin,var_03); + if(var_04 < 4000 && param_02.numflares > 0) + { + param_02.numflares--; + param_02 thread func_2C4D(); + var_05 = param_02 deployflares(); + self missile_settargetent(var_05); + return; + } + + wait 0.05; + } +} + +//Function Number: 84 +func_2C53(param_00) +{ + level endon("game_ended"); + self endon("death"); + self endon("crashing"); + self endon("leaving"); + self endon("helicopter_done"); + for(;;) + { + level waittill("sam_fired",var_01,var_02,var_03); + if(!isdefined(var_03) || var_03 != self) + { + continue; + } + + if(isdefined(param_00)) + { + level thread [[ param_00 ]](var_01,var_01.team,var_03,var_02); + continue; + } + + level thread watchsamproximity(var_01,var_01.team,var_03,var_02); + } +} + +//Function Number: 85 +watchsamproximity(param_00,param_01,param_02,param_03) +{ + level endon("game_ended"); + param_02 endon("death"); + for(;;) + { + var_04 = param_02 getpointinbounds(0,0,0); + var_05 = []; + for(var_06 = 0;var_06 < param_03.size;var_06++) + { + if(isdefined(param_03[var_06])) + { + var_05[var_06] = distance(param_03[var_06].origin,var_04); + } + } + + var_06 = 0; + while(var_06 < var_05.size) + { + if(isdefined(var_05[var_06])) + { + if(var_05[var_06] < 4000 && param_02.numflares > 0) + { + param_02.numflares--; + param_02 thread func_2C4D(); + var_07 = param_02 deployflares(); + for(var_08 = 0;var_08 < param_03.size;var_08++) + { + if(isdefined(param_03[var_08])) + { + param_03[var_08] missile_settargetent(var_07); + } + } + + return; + } + } + + var_08++; + } + + wait 0.05; + } +} + +//Function Number: 86 +func_2C55(param_00) +{ + wait param_00; + self delete(); +} + +//Function Number: 87 +func_2C56() +{ + self endon("death"); + self endon("disconnect"); + self playlocalsound(game["voice"][self.team] + "KS_hqr_pavelow"); + wait 3.5; + self playlocalsound(game["voice"][self.team] + "KS_pvl_inbound"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/killstreaks/_helicopter_flock.gsc b/MW3/Xbox/MP/maps/mp/killstreaks/_helicopter_flock.gsc new file mode 100644 index 0000000..6cc5139 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/killstreaks/_helicopter_flock.gsc @@ -0,0 +1,511 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\killstreaks\_helicopter_flock.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 23 + * Decompile Time: 418 ms + * Timestamp: 10/27/2023 2:26:58 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + precachevehicle("attack_littlebird_mp"); + precachemodel("vehicle_apache_mp"); + precachemodel("vehicle_apache_mg"); + precacheturret("apache_minigun_mp"); + precachevehicle("apache_strafe_mp"); + level.killstreakfuncs["littlebird_flock"] = ::tryuselbflock; + level.heli_flock = []; +} + +//Function Number: 2 +tryuselbflock(param_00,param_01) +{ + if(!maps\mp\_utility::func_2DF3()) + { + return 0; + } + + var_02 = 5; + if(heliflockactive() || maps\mp\_utility::func_2BEC() >= maps\mp\_utility::maxvehiclesallowed() || level.fauxvehiclecount + var_02 >= maps\mp\_utility::maxvehiclesallowed()) + { + self iprintlnbold(&"MP_TOO_MANY_VEHICLES"); + return 0; + } + + maps\mp\_utility::func_80C7(); + maps\mp\_utility::func_80C7(); + maps\mp\_utility::func_80C7(); + maps\mp\_utility::func_80C7(); + maps\mp\_utility::func_80C7(); + var_03 = selectlbstrikelocation(param_00,"littlebird_flock"); + if(!isdefined(var_03) || !var_03) + { + maps\mp\_utility::func_80C8(); + maps\mp\_utility::func_80C8(); + maps\mp\_utility::func_80C8(); + maps\mp\_utility::func_80C8(); + maps\mp\_utility::func_80C8(); + return 0; + } + + level thread maps\mp\_utility::teamplayercardsplash("used_littlebird_flock",self,self.team); + return 1; +} + +//Function Number: 3 +heliflockactive() +{ + var_00 = 0; + for(var_01 = 0;var_01 < level.heli_flock.size;var_01++) + { + if(isdefined(level.heli_flock[var_01])) + { + var_00 = 1; + break; + } + } + + return var_00; +} + +//Function Number: 4 +selectlbstrikelocation(param_00,param_01) +{ + self playlocalsound(game["voice"][self.team] + "KS_lbd_inposition"); + maps\mp\_utility::_beginlocationselection(param_01,"map_artillery_selector",1,500); + self endon("stop_location_selection"); + self waittill("confirm_location",var_02,var_03); + if(heliflockactive() || maps\mp\_utility::func_2BEC() >= maps\mp\_utility::maxvehiclesallowed() || level.fauxvehiclecount >= maps\mp\_utility::maxvehiclesallowed()) + { + self iprintlnbold(&"MP_TOO_MANY_VEHICLES"); + self notify("cancel_location"); + return 0; + } + + level.heli_flock = []; + level.heli_flock_victims = []; + thread func_30A6(); + thread finishlbstrikeusage(param_00,var_02,::callstrike,var_03); + self setblurforplayer(0,0.3); + return 1; +} + +//Function Number: 5 +func_30A6() +{ + self endon("death"); + self endon("disconnect"); + self playlocalsound(game["voice"][self.team] + "KS_hqr_littlebird"); + wait 3; + self playlocalsound(game["voice"][self.team] + "KS_lbd_inbound"); +} + +//Function Number: 6 +finishlbstrikeusage(param_00,param_01,param_02,param_03) +{ + self notify("used"); + wait 0.05; + thread maps\mp\_utility::func_2EB1(0); + if(isdefined(self)) + { + self thread [[ param_02 ]](param_00,param_01,param_03); + } +} + +//Function Number: 7 +callstrike(param_00,param_01,param_02) +{ + level endon("game_ended"); + self endon("disconnect"); + thread handleownerleft(); + var_03 = getflightpath(param_01,param_02,0); + var_04 = getflightpath(param_01,param_02,-520); + var_05 = getflightpath(param_01,param_02,520); + var_06 = getflightpath(param_01,param_02,-1040); + var_07 = getflightpath(param_01,param_02,1040); + level thread func_30AA(param_00,self,var_03,0); + wait 0.3; + level thread func_30AA(param_00,self,var_04,1); + level thread func_30AA(param_00,self,var_05,2); + wait 0.3; + level thread func_30AA(param_00,self,var_06,3); + level thread func_30AA(param_00,self,var_07,4); + maps\mp\_matchdata::logkillstreakevent("littlebird_flock",param_01); +} + +//Function Number: 8 +getflightpath(param_00,param_01,param_02) +{ + param_00 = param_00 * (1,1,0); + var_03 = (0,param_01,0); + var_04 = 12000; + var_05 = []; + if(isdefined(param_02) && param_02 != 0) + { + param_00 = param_00 + anglestoright(var_03) * param_02 + (0,0,randomint(300)); + } + + var_06 = param_00 + anglestoforward(var_03) * -1 * var_04; + var_07 = param_00 + anglestoforward(var_03) * var_04; + var_08 = maps\mp\killstreaks\_airdrop::getflyheightoffset(param_00) + 256; + var_05["start"] = var_06 + (0,0,var_08); + var_05["end"] = var_07 + (0,0,var_08); + return var_05; +} + +//Function Number: 9 +func_30AA(param_00,param_01,param_02,param_03) +{ + level endon("game_ended"); + if(!isdefined(param_01)) + { + return; + } + + var_04 = vectortoangles(param_02["end"] - param_02["start"]); + var_05 = func_30AB(param_01,param_02["start"],var_04,param_03); + var_05.lifeid = param_00; + var_05.alreadydead = 0; + var_05 thread watchtimeout(); + var_05 thread func_28F6(); + var_05 thread flock_handledamage(); + var_05 thread func_30AF(); + var_05 thread monitorkills(); + var_05 endon("death"); + var_05 setmaxpitchroll(120,60); + var_05 vehicle_setspeed(48,48); + var_05 setvehgoalpos(param_02["end"],0); + var_05 waittill("goal"); + var_05 setmaxpitchroll(30,40); + var_05 vehicle_setspeed(32,32); + var_05 setvehgoalpos(param_02["start"],0); + wait 2; + var_05 setmaxpitchroll(100,60); + var_05 vehicle_setspeed(64,64); + var_05 waittill("goal"); + var_05 notify("gone"); + var_05 func_30B2(); +} + +//Function Number: 10 +func_30AB(param_00,param_01,param_02,param_03) +{ + var_04 = spawnhelicopter(param_00,param_01,param_02,"apache_strafe_mp","vehicle_apache_mp"); + if(!isdefined(var_04)) + { + return; + } + + var_04 maps\mp\killstreaks\_helicopter::func_2C4A(); + var_04 thread maps\mp\killstreaks\_helicopter::func_2C4B(); + var_04.health = 999999; + var_04.maxhealth = 2000; + var_04.damagetaken = 0; + var_04 setcandamage(1); + var_04.owner = param_00; + var_04.team = param_00.team; + var_04.killcount = 0; + var_04.streakname = "littlebird_flock"; + var_04.helitype = "littlebird"; + var_04.specialdamagecallback = ::callback_vehicledamage; + var_05 = spawnturret("misc_turret",var_04.origin,"apache_minigun_mp"); + var_05 linkto(var_04,"tag_turret",(0,0,0),(0,0,0)); + var_05 setmodel("vehicle_apache_mg"); + var_05.angles = var_04.angles; + var_05.owner = var_04.owner; + var_05.team = var_05.owner.team; + var_05 maketurretinoperable(); + var_05.vehicle = var_04; + var_06 = var_04.origin + anglestoforward(var_04.angles) * -200 + anglestoright(var_04.angles) * -200 + (0,0,50); + var_05.killcament = spawn("script_model",var_06); + var_05.killcament setscriptmoverkillcam("explosive"); + var_05.killcament linkto(var_04,"tag_origin"); + var_04.mgturret1 = var_05; + var_04.mgturret1 setdefaultdroppitch(0); + var_04.mgturret1 setmode("auto_nonai"); + var_04.mgturret1 setsentryowner(var_04.owner); + if(level.teambased) + { + var_04.mgturret1 setturretteam(var_04.owner.team); + } + + level.heli_flock[param_03] = var_04; + return var_04; +} + +//Function Number: 11 +watchtimeout() +{ + level endon("game_ended"); + self endon("gone"); + self endon("death"); + maps\mp\gametypes\_hostmigration::func_2740(60); + self notify("death"); +} + +//Function Number: 12 +monitorkills() +{ + level endon("game_ended"); + self endon("gone"); + self endon("death"); + self endon("stopFiring"); + for(;;) + { + self waittill("killedPlayer",var_00); + self.killcount++; + level.heli_flock_victims[level.heli_flock_victims.size] = var_00; + } +} + +//Function Number: 13 +func_30AF() +{ + self endon("gone"); + self endon("death"); + self endon("stopFiring"); + for(;;) + { + self.mgturret1 waittill("turret_on_target"); + var_00 = 1; + var_01 = self.mgturret1 getturrettarget(0); + foreach(var_03 in level.heli_flock_victims) + { + if(var_01 == var_03) + { + self.mgturret1 cleartargetentity(); + var_00 = 0; + break; + } + } + + if(var_00) + { + self.mgturret1 shootturret(); + } + } +} + +//Function Number: 14 +handleownerleft() +{ + level endon("game_ended"); + self endon("flock_done"); + thread notifyonflockdone(); + common_scripts\utility::waittill_any("disconnect","joined_team","joined_spectators"); + for(var_00 = 0;var_00 < level.heli_flock.size;var_00++) + { + if(isdefined(level.heli_flock[var_00])) + { + level.heli_flock[var_00] notify("stopFiring"); + } + } + + for(var_00 = 0;var_00 < level.heli_flock.size;var_00++) + { + if(isdefined(level.heli_flock[var_00])) + { + level.heli_flock[var_00] notify("death"); + wait 0.1; + } + } +} + +//Function Number: 15 +notifyonflockdone() +{ + level endon("game_ended"); + self endon("disconnect"); + self endon("joined_team"); + self endon("joined_spectators"); + while(heliflockactive()) + { + wait 0.5; + } + + self notify("flock_done"); +} + +//Function Number: 16 +flock_handledamage() +{ + self endon("death"); + level endon("game_ended"); + for(;;) + { + self waittill("damage",var_00,var_01,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09); + if(isdefined(self.specialdamagecallback)) + { + self [[ self.specialdamagecallback ]](undefined,var_01,var_00,var_08,var_04,var_09,var_03,var_02,undefined,undefined,var_05,var_07); + } + } +} + +//Function Number: 17 +callback_vehicledamage(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A,param_0B) +{ + if(isdefined(self.alreadydead) && self.alreadydead) + { + return; + } + + if(!isdefined(param_01) || param_01 == self) + { + return; + } + + if(!maps\mp\gametypes\_weapons::func_27A1(self.owner,param_01)) + { + return; + } + + if(isdefined(param_03) && param_03 & level.idflags_penetration) + { + self.wasdamagedfrombulletpenetration = 1; + } + + self.wasdamaged = 1; + var_0C = param_02; + if(isplayer(param_01)) + { + param_01 maps\mp\gametypes\_damagefeedback::updatedamagefeedback("helicopter"); + if(param_04 == "MOD_RIFLE_BULLET" || param_04 == "MOD_PISTOL_BULLET") + { + if(param_01 maps\mp\_utility::func_27AF("specialty_armorpiercing")) + { + var_0C = var_0C + param_02 * level.armorpiercingmod; + } + } + } + + if(isdefined(param_01.owner) && isplayer(param_01.owner)) + { + param_01.owner maps\mp\gametypes\_damagefeedback::updatedamagefeedback("helicopter"); + } + + if(isdefined(param_05)) + { + switch(param_05) + { + case "remote_mortar_missile_mp": + case "javelin_mp": + case "stinger_mp": + case "remotemissile_projectile_mp": + case "ac130_40mm_mp": + case "ac130_105mm_mp": + self.largeprojectiledamage = 1; + var_0C = self.maxhealth + 1; + break; + + case "sam_projectile_mp": + self.largeprojectiledamage = 1; + var_0C = self.maxhealth * 0.25; + break; + + case "emp_grenade_mp": + self.largeprojectiledamage = 0; + var_0C = self.maxhealth + 1; + break; + } + + maps\mp\killstreaks\_killstreaks::killstreakhit(param_01,param_05,self); + } + + self.damagetaken = self.damagetaken + var_0C; + if(self.damagetaken >= self.maxhealth) + { + if(isplayer(param_01) && !isdefined(self.owner) || param_01 != self.owner) + { + self.alreadydead = 1; + param_01 notify("destroyed_helicopter"); + param_01 notify("destroyed_killstreak",param_05); + thread maps\mp\_utility::teamplayercardsplash("callout_destroyed_helicopter",param_01); + param_01 thread maps\mp\gametypes\_rank::func_2AB3("kill",300,param_05,param_04); + param_01 thread maps\mp\gametypes\_rank::xpeventpopup(&"SPLASHES_DESTROYED_HELICOPTER"); + thread maps\mp\gametypes\_missions::vehiclekilled(self.owner,self,undefined,param_01,param_02,param_04,param_05); + } + + self notify("death"); + } +} + +//Function Number: 18 +func_28F6() +{ + self endon("gone"); + self waittill("death"); + thread func_2E83(); +} + +//Function Number: 19 +func_2E83() +{ + self endon("gone"); + if(!isdefined(self)) + { + return; + } + + self vehicle_setspeed(25,5); + thread func_2E85(randomintrange(180,220)); + wait randomfloatrange(0.5,1.5); + func_2E84(); +} + +//Function Number: 20 +func_2E85(param_00) +{ + self endon("explode"); + playfxontag(level.chopper_fx["explode"]["medium"],self,"tail_rotor_jnt"); + thread trail_fx(level.chopper_fx["smoke"]["trail"],"tail_rotor_jnt","stop tail smoke"); + self setyawspeed(param_00,param_00,param_00); + while(isdefined(self)) + { + self settargetyaw(self.angles[1] + param_00 * 0.9); + wait 1; + } +} + +//Function Number: 21 +trail_fx(param_00,param_01,param_02) +{ + self notify(param_02); + self endon(param_02); + self endon("death"); + for(;;) + { + playfxontag(param_00,self,param_01); + wait 0.05; + } +} + +//Function Number: 22 +func_2E84() +{ + var_00 = self.origin + (0,0,1) - self.origin; + var_01 = self gettagangles("tag_deathfx"); + playfx(level.chopper_fx["explode"]["air_death"]["littlebird"],self gettagorigin("tag_deathfx"),anglestoforward(var_01),anglestoup(var_01)); + self playsound("cobra_helicopter_crash"); + self notify("explode"); + func_30B2(); +} + +//Function Number: 23 +func_30B2() +{ + if(isdefined(self.mgturret1)) + { + if(isdefined(self.mgturret1.killcament)) + { + self.mgturret1.killcament delete(); + } + + self.mgturret1 delete(); + } + + maps\mp\_utility::func_80C8(); + self delete(); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/killstreaks/_helicopter_guard.gsc b/MW3/Xbox/MP/maps/mp/killstreaks/_helicopter_guard.gsc new file mode 100644 index 0000000..4551e04 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/killstreaks/_helicopter_guard.gsc @@ -0,0 +1,1013 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\killstreaks\_helicopter_guard.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 35 + * Decompile Time: 662 ms + * Timestamp: 10/27/2023 2:27:00 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level.killstreakfuncs["littlebird_support"] = ::func_30BB; + level.heliguardsettings = []; + level.heliguardsettings["littlebird_support"] = spawnstruct(); + level.heliguardsettings["littlebird_support"].timeout = 60; + level.heliguardsettings["littlebird_support"].health = 999999; + level.heliguardsettings["littlebird_support"].maxhealth = 2000; + level.heliguardsettings["littlebird_support"].streakname = "littlebird_support"; + level.heliguardsettings["littlebird_support"].vehicleinfo = "attack_littlebird_mp"; + level.heliguardsettings["littlebird_support"].weaponinfo = "littlebird_guard_minigun_mp"; + level.heliguardsettings["littlebird_support"].weaponmodelleft = "vehicle_little_bird_minigun_left"; + level.heliguardsettings["littlebird_support"].weaponmodelright = "vehicle_little_bird_minigun_right"; + level.heliguardsettings["littlebird_support"].weapontagleft = "tag_minigun_attach_left"; + level.heliguardsettings["littlebird_support"].weapontagright = "tag_minigun_attach_right"; + level.heliguardsettings["littlebird_support"].sentrymode = "auto_nonai"; + level.heliguardsettings["littlebird_support"].modelbase = "vehicle_little_bird_armed"; + level.heliguardsettings["littlebird_support"].teamsplash = "used_littlebird_support"; + foreach(var_01 in level.heliguardsettings) + { + precachevehicle(var_01.vehicleinfo); + precacheturret(var_01.weaponinfo); + precachemodel(var_01.weaponmodelleft); + precachemodel(var_01.weaponmodelright); + precachemodel(var_01.modelbase); + } + + func_30DA(); + func_30DB(); +} + +//Function Number: 2 +func_30BB(param_00) +{ + var_01 = "littlebird_support"; + var_02 = 1; + if(isdefined(level.civilianjetflyby)) + { + self iprintlnbold(&"MP_CIVILIAN_AIR_TRAFFIC"); + return 0; + } + else if(maps\mp\_utility::isusingremote()) + { + return 0; + } + else if(isdefined(level.littlebirdguard) || maps\mp\killstreaks\_helicopter::exceededmaxlittlebirds(var_01)) + { + self iprintlnbold(&"MP_AIR_SPACE_TOO_CROWDED"); + return 0; + } + else if(!level.air_node_mesh.size) + { + self iprintlnbold(&"MP_UNAVAILABLE_IN_LEVEL"); + return 0; + } + else if(maps\mp\_utility::func_2BEC() >= maps\mp\_utility::maxvehiclesallowed() || level.fauxvehiclecount + var_02 >= maps\mp\_utility::maxvehiclesallowed()) + { + self iprintlnbold(&"MP_TOO_MANY_VEHICLES"); + return 0; + } + + maps\mp\_utility::func_80C7(); + var_03 = func_30BE(var_01); + if(!isdefined(var_03)) + { + maps\mp\_utility::func_80C8(); + return 0; + } + + thread func_30C6(var_03); + level thread maps\mp\_utility::teamplayercardsplash(level.heliguardsettings[var_01].teamsplash,self,self.team); + return 1; +} + +//Function Number: 3 +func_30BE(param_00) +{ + var_01 = lbsupport_getcloseststartnode(self.origin); + if(isdefined(var_01.angles)) + { + var_02 = var_01.angles; + } + else + { + var_02 = (0,0,0); + } + + var_03 = maps\mp\killstreaks\_airdrop::getflyheightoffset(self.origin); + var_04 = func_30D5(self.origin); + var_04 = lbsupport_tu0_new_incoming_position(var_04); + var_05 = anglestoforward(self.angles); + var_06 = var_04.origin * (1,1,0) + (0,0,1) * var_03 + var_05 * -100; + var_07 = var_01.origin; + var_08 = spawnhelicopter(self,var_07,var_02,level.heliguardsettings[param_00].vehicleinfo,level.heliguardsettings[param_00].modelbase); + if(!isdefined(var_08)) + { + return; + } + + var_08 maps\mp\killstreaks\_helicopter::func_2C4A(); + var_08 thread maps\mp\killstreaks\_helicopter::func_2C4B(); + var_08.health = level.heliguardsettings[param_00].health; + var_08.maxhealth = level.heliguardsettings[param_00].maxhealth; + var_08.damagetaken = 0; + var_08.speed = 100; + var_08.followspeed = 40; + var_08.owner = self; + var_08.team = self.team; + var_08 setmaxpitchroll(45,45); + var_08 vehicle_setspeed(var_08.speed,100,40); + var_08 setyawspeed(120,60); + var_08 setneargoalnotifydist(512); + var_08.killcount = 0; + var_08.helitype = "littlebird"; + var_08.heliguardtype = "littlebird_support"; + var_08.targettingradius = 2000; + var_08.targetpos = var_06; + var_08.currentnode = var_04; + var_09 = spawnturret("misc_turret",var_08.origin,level.heliguardsettings[param_00].weaponinfo); + var_09 linkto(var_08,level.heliguardsettings[param_00].weapontagleft,(0,0,0),(0,0,0)); + var_09 setmodel(level.heliguardsettings[param_00].weaponmodelleft); + var_09.angles = var_08.angles; + var_09.owner = var_08.owner; + var_09.team = self.team; + var_09 maketurretinoperable(); + var_09.vehicle = var_08; + var_08.mgturretleft = var_09; + var_08.mgturretleft setdefaultdroppitch(0); + var_0A = var_08.origin + anglestoforward(var_08.angles) * -100 + anglestoright(var_08.angles) * -100 + (0,0,50); + var_09.killcament = spawn("script_model",var_0A); + var_09.killcament setscriptmoverkillcam("explosive"); + var_09.killcament linkto(var_08,"tag_origin"); + var_09 = spawnturret("misc_turret",var_08.origin,level.heliguardsettings[param_00].weaponinfo); + var_09 linkto(var_08,level.heliguardsettings[param_00].weapontagright,(0,0,0),(0,0,0)); + var_09 setmodel(level.heliguardsettings[param_00].weaponmodelright); + var_09.angles = var_08.angles; + var_09.owner = var_08.owner; + var_09.team = self.team; + var_09 maketurretinoperable(); + var_09.vehicle = var_08; + var_08.mgturretright = var_09; + var_08.mgturretright setdefaultdroppitch(0); + var_0A = var_08.origin + anglestoforward(var_08.angles) * -100 + anglestoright(var_08.angles) * 100 + (0,0,50); + var_09.killcament = spawn("script_model",var_0A); + var_09.killcament setscriptmoverkillcam("explosive"); + var_09.killcament linkto(var_08,"tag_origin"); + if(level.teambased) + { + var_08.mgturretleft setturretteam(self.team); + var_08.mgturretright setturretteam(self.team); + } + + var_08.mgturretleft setmode(level.heliguardsettings[param_00].sentrymode); + var_08.mgturretright setmode(level.heliguardsettings[param_00].sentrymode); + var_08.mgturretleft setsentryowner(self); + var_08.mgturretright setsentryowner(self); + var_08.mgturretleft thread func_30DC(); + var_08.mgturretright thread func_30DC(); + var_08.attract_strength = 10000; + var_08.attract_range = 150; + var_08.attractor = missile_createattractorent(var_08,var_08.attract_strength,var_08.attract_range); + var_08.hasdodged = 0; + var_08.empgrenaded = 0; + var_08 thread lbsupport_handledamage(); + var_08 thread lbsupport_watchdeath(); + var_08 thread func_30CB(); + var_08 thread func_30CC(); + var_08 thread lbsupport_watchownerdamage(); + var_08 thread func_30CE(); + var_08 thread lbsupport_lightfx(); + level.littlebirdguard = var_08; + var_08.owner maps\mp\_matchdata::logkillstreakevent(level.heliguardsettings[var_08.heliguardtype].streakname,var_08.targetpos); + return var_08; +} + +//Function Number: 4 +lbsupport_lightfx() +{ + playfxontag(level.chopper_fx["light"]["left"],self,"tag_light_nose"); + wait 0.05; + playfxontag(level.chopper_fx["light"]["belly"],self,"tag_light_belly"); + wait 0.05; + playfxontag(level.chopper_fx["light"]["tail"],self,"tag_light_tail1"); + wait 0.05; + playfxontag(level.chopper_fx["light"]["tail"],self,"tag_light_tail2"); +} + +//Function Number: 5 +func_30C6(param_00) +{ + level endon("game_ended"); + param_00 endon("death"); + param_00 setlookatent(self); + param_00 setvehgoalpos(param_00.targetpos); + param_00 waittill("near_goal"); + param_00 vehicle_setspeed(param_00.speed,60,30); + param_00 waittill("goal"); + param_00 setvehgoalpos(param_00.currentnode.origin,1); + param_00 waittill("goal"); + param_00 thread func_30C7(); + param_00 thread maps\mp\killstreaks\_helicopter::func_2C53(::func_30D2); + param_00 thread maps\mp\killstreaks\_helicopter::handleincomingstinger(::lbsupport_watchstingerproximity); +} + +//Function Number: 6 +func_30C7() +{ + level endon("game_ended"); + self endon("death"); + self endon("leaving"); + if(!isdefined(self.owner)) + { + thread func_30CF(); + return; + } + + self.owner endon("disconnect"); + self.owner endon("joined_team"); + self.owner endon("joined_spectators"); + self vehicle_setspeed(self.followspeed,20,20); + for(;;) + { + if(isdefined(self.owner) && isalive(self.owner)) + { + var_00 = func_30D6(self.owner.origin); + if(isdefined(var_00) && var_00 != self.currentnode) + { + self.currentnode = var_00; + lbsupport_movetoplayer(); + continue; + } + } + + wait 1; + } +} + +//Function Number: 7 +lbsupport_movetoplayer() +{ + level endon("game_ended"); + self endon("death"); + self endon("leaving"); + self.owner endon("death"); + self.owner endon("disconnect"); + self.owner endon("joined_team"); + self.owner endon("joined_spectators"); + self notify("lbSupport_moveToPlayer"); + self endon("lbSupport_moveToPlayer"); + self.intransit = 1; + self setvehgoalpos(self.currentnode.origin,1); + self waittill("goal"); + self.intransit = 0; + self notify("hit_goal"); +} + +//Function Number: 8 +lbsupport_watchdeath() +{ + level endon("game_ended"); + self endon("gone"); + self waittill("death"); + thread func_2E83(); +} + +//Function Number: 9 +func_30CB() +{ + level endon("game_ended"); + self endon("death"); + self.owner endon("disconnect"); + self.owner endon("joined_team"); + self.owner endon("joined_spectators"); + var_00 = level.heliguardsettings[self.heliguardtype].timeout; + maps\mp\gametypes\_hostmigration::func_2740(var_00); + thread func_30CF(); +} + +//Function Number: 10 +func_30CC() +{ + level endon("game_ended"); + self endon("death"); + self endon("leaving"); + self.owner common_scripts\utility::waittill_any("disconnect","joined_team","joined_spectators"); + thread func_30CF(); +} + +//Function Number: 11 +lbsupport_watchownerdamage() +{ + level endon("game_ended"); + self endon("death"); + self endon("leaving"); + self.owner endon("disconnect"); + self.owner endon("joined_team"); + self.owner endon("joined_spectators"); + for(;;) + { + self.owner waittill("damage",var_00,var_01,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09); + if(isplayer(var_01)) + { + if(var_01 != self.owner && distance2d(var_01.origin,self.origin) <= self.targettingradius && !var_01 maps\mp\_utility::func_27AF("specialty_blindeye") && !level.hardcoremode && level.teambased && var_01.team == self.team) + { + self setlookatent(var_01); + self.mgturretleft settargetentity(var_01); + self.mgturretright settargetentity(var_01); + } + } + } +} + +//Function Number: 12 +func_30CE() +{ + level endon("game_ended"); + self endon("death"); + self endon("leaving"); + self.owner endon("disconnect"); + self.owner endon("joined_team"); + self.owner endon("joined_spectators"); + level waittill("round_end_finished"); + thread func_30CF(); +} + +//Function Number: 13 +func_30CF() +{ + self endon("death"); + self notify("leaving"); + level.littlebirdguard = undefined; + self clearlookatent(); + var_00 = maps\mp\killstreaks\_airdrop::getflyheightoffset(self.origin); + var_01 = self.origin + (0,0,var_00); + self vehicle_setspeed(self.speed,60); + self setmaxpitchroll(45,180); + self setvehgoalpos(var_01); + self waittill("goal"); + var_01 = var_01 + anglestoforward(self.angles) * 15000; + var_02 = spawn("script_origin",var_01); + if(isdefined(var_02)) + { + self setlookatent(var_02); + var_02 thread func_2C43(3); + } + + self setvehgoalpos(var_01); + self waittill("goal"); + self notify("gone"); + func_30B2(); +} + +//Function Number: 14 +func_2C43(param_00) +{ + self endon("death"); + level endon("game_ended"); + wait param_00; + self delete(); +} + +//Function Number: 15 +lbsupport_handledamage() +{ + self endon("death"); + level endon("game_ended"); + self setcandamage(1); + for(;;) + { + self waittill("damage",var_00,var_01,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09); + if(!maps\mp\gametypes\_weapons::func_27A1(self.owner,var_01)) + { + continue; + } + + if(!isdefined(self)) + { + return; + } + + if(isdefined(var_08) && var_08 & level.idflags_penetration) + { + self.wasdamagedfrombulletpenetration = 1; + } + + self.wasdamaged = 1; + var_0A = var_00; + if(isplayer(var_01)) + { + if(var_01 != self.owner && distance2d(var_01.origin,self.origin) <= self.targettingradius && !var_01 maps\mp\_utility::func_27AF("specialty_blindeye") && !level.hardcoremode && level.teambased && var_01.team == self.team) + { + self setlookatent(var_01); + self.mgturretleft settargetentity(var_01); + self.mgturretright settargetentity(var_01); + } + + var_01 maps\mp\gametypes\_damagefeedback::updatedamagefeedback("helicopter"); + if(var_04 == "MOD_RIFLE_BULLET" || var_04 == "MOD_PISTOL_BULLET") + { + if(var_01 maps\mp\_utility::func_27AF("specialty_armorpiercing")) + { + var_0A = var_0A + var_00 * level.armorpiercingmod; + } + } + } + + if(isdefined(var_01.owner) && isplayer(var_01.owner)) + { + var_01.owner maps\mp\gametypes\_damagefeedback::updatedamagefeedback("helicopter"); + } + + if(isdefined(var_09)) + { + switch(var_09) + { + case "remote_mortar_missile_mp": + case "javelin_mp": + case "stinger_mp": + case "remotemissile_projectile_mp": + case "ac130_40mm_mp": + case "ac130_105mm_mp": + self.largeprojectiledamage = 1; + var_0A = self.maxhealth + 1; + break; + + case "sam_projectile_mp": + self.largeprojectiledamage = 1; + var_0A = self.maxhealth * 0.25; + break; + + case "emp_grenade_mp": + var_0A = 0; + thread lbsupport_empgrenaded(); + break; + + case "osprey_player_minigun_mp": + self.largeprojectiledamage = 0; + var_0A = var_0A * 2; + break; + } + + maps\mp\killstreaks\_killstreaks::killstreakhit(var_01,var_09,self); + } + + self.damagetaken = self.damagetaken + var_0A; + if(self.damagetaken >= self.maxhealth) + { + if(isplayer(var_01) && !isdefined(self.owner) || var_01 != self.owner) + { + var_01 notify("destroyed_helicopter"); + var_01 notify("destroyed_killstreak",var_09); + thread maps\mp\_utility::teamplayercardsplash("callout_destroyed_little_bird",var_01); + var_01 thread maps\mp\gametypes\_rank::func_2AB3("kill",300,var_09,var_04); + var_01 thread maps\mp\gametypes\_rank::xpeventpopup(&"SPLASHES_DESTROYED_LITTLE_BIRD"); + thread maps\mp\gametypes\_missions::vehiclekilled(self.owner,self,undefined,var_01,var_00,var_04,var_09); + } + + if(isdefined(self.owner)) + { + self.owner thread maps\mp\_utility::func_2A60("lbguard_destroyed"); + } + + self notify("death"); + return; + } + } +} + +//Function Number: 16 +lbsupport_empgrenaded() +{ + self notify("lbSupport_EMPGrenaded"); + self endon("lbSupport_EMPGrenaded"); + self endon("death"); + self.owner endon("disconnect"); + level endon("game_ended"); + self.empgrenaded = 1; + self.mgturretright notify("stop_shooting"); + self.mgturretleft notify("stop_shooting"); + if(isdefined(level._effect["ims_sensor_explode"])) + { + playfxontag(common_scripts\utility::func_539("ims_sensor_explode"),self.mgturretright,"tag_aim"); + playfxontag(common_scripts\utility::func_539("ims_sensor_explode"),self.mgturretleft,"tag_aim"); + } + + wait 3.5; + self.empgrenaded = 0; + self.mgturretright notify("turretstatechange"); + self.mgturretleft notify("turretstatechange"); +} + +//Function Number: 17 +func_2E83() +{ + level.littlebirdguard = undefined; + if(!isdefined(self)) + { + return; + } + + self vehicle_setspeed(25,5); + thread func_2E85(randomintrange(180,220)); + wait randomfloatrange(0.5,1.5); + func_2E84(); +} + +//Function Number: 18 +func_2E84() +{ + var_00 = self.origin + (0,0,1) - self.origin; + var_01 = self gettagangles("tag_deathfx"); + playfx(level.chopper_fx["explode"]["air_death"]["littlebird"],self gettagorigin("tag_deathfx"),anglestoforward(var_01),anglestoup(var_01)); + self playsound("cobra_helicopter_crash"); + self notify("explode"); + func_30B2(); +} + +//Function Number: 19 +func_2E85(param_00) +{ + self endon("explode"); + playfxontag(level.chopper_fx["explode"]["medium"],self,"tail_rotor_jnt"); + thread trail_fx(level.chopper_fx["smoke"]["trail"],"tail_rotor_jnt","stop tail smoke"); + self setyawspeed(param_00,param_00,param_00); + while(isdefined(self)) + { + self settargetyaw(self.angles[1] + param_00 * 0.9); + wait 1; + } +} + +//Function Number: 20 +trail_fx(param_00,param_01,param_02) +{ + self notify(param_02); + self endon(param_02); + self endon("death"); + for(;;) + { + playfxontag(param_00,self,param_01); + wait 0.05; + } +} + +//Function Number: 21 +func_30B2() +{ + level.var_30B3 = 0; + if(isdefined(self.mgturretleft)) + { + if(isdefined(self.mgturretleft.killcament)) + { + self.mgturretleft.killcament delete(); + } + + self.mgturretleft delete(); + } + + if(isdefined(self.mgturretright)) + { + if(isdefined(self.mgturretright.killcament)) + { + self.mgturretright.killcament delete(); + } + + self.mgturretright delete(); + } + + if(isdefined(self.marker)) + { + self.marker delete(); + } + + maps\mp\_utility::func_80C8(); + self delete(); +} + +//Function Number: 22 +func_30D2(param_00,param_01,param_02,param_03) +{ + level endon("game_ended"); + param_02 endon("death"); + for(var_04 = 0;var_04 < param_03.size;var_04++) + { + if(isdefined(param_03[var_04]) && !param_02.hasdodged) + { + param_02.hasdodged = 1; + var_05 = spawn("script_origin",param_02.origin); + var_05.angles = param_02.angles; + var_05 movegravity(anglestoright(param_03[var_04].angles) * -1000,0.05); + var_05 thread maps\mp\killstreaks\_helicopter::func_2C55(5); + for(var_06 = 0;var_06 < param_03.size;var_06++) + { + if(isdefined(param_03[var_06])) + { + param_03[var_06] missile_settargetent(var_05); + } + } + + var_07 = param_02.origin + anglestoright(param_03[var_04].angles) * 200; + param_02 vehicle_setspeed(param_02.speed,100,40); + param_02 setvehgoalpos(var_07,1); + wait 2; + param_02 vehicle_setspeed(param_02.followspeed,20,20); + break; + } + } +} + +//Function Number: 23 +lbsupport_watchstingerproximity(param_00,param_01,param_02) +{ + level endon("game_ended"); + param_02 endon("death"); + if(isdefined(self) && !param_02.hasdodged) + { + param_02.hasdodged = 1; + var_03 = spawn("script_origin",param_02.origin); + var_03.angles = param_02.angles; + var_03 movegravity(anglestoright(self.angles) * -1000,0.05); + var_03 thread maps\mp\killstreaks\_helicopter::func_2C55(5); + self missile_settargetent(var_03); + var_04 = param_02.origin + anglestoright(self.angles) * 200; + param_02 vehicle_setspeed(param_02.speed,100,40); + param_02 setvehgoalpos(var_04,1); + wait 2; + param_02 vehicle_setspeed(param_02.followspeed,20,20); + } +} + +//Function Number: 24 +lbsupport_getcloseststartnode(param_00) +{ + var_01 = undefined; + var_02 = 999999; + foreach(var_04 in level.air_start_nodes) + { + var_05 = distance(var_04.origin,param_00); + if(var_05 < var_02) + { + var_01 = var_04; + var_02 = var_05; + } + } + + return var_01; +} + +//Function Number: 25 +func_30D5(param_00) +{ + var_01 = undefined; + var_02 = 999999; + foreach(var_04 in level.air_node_mesh) + { + var_05 = distance(var_04.origin,param_00); + if(var_05 < var_02) + { + var_01 = var_04; + var_02 = var_05; + } + } + + return var_01; +} + +//Function Number: 26 +func_30D6(param_00) +{ + var_01 = undefined; + var_02 = distance2d(self.currentnode.origin,param_00); + var_03 = var_02; + foreach(var_05 in self.currentnode.neighbors) + { + var_06 = distance2d(var_05.origin,param_00); + if(var_06 < var_02 && var_06 < var_03) + { + var_01 = var_05; + var_03 = var_06; + } + } + + return var_01; +} + +//Function Number: 27 +lbsupport_arraycontains(param_00,param_01) +{ + if(param_00.size <= 0) + { + return 0; + } + + foreach(var_03 in param_00) + { + if(var_03 == param_01) + { + return 1; + } + } + + return 0; +} + +//Function Number: 28 +lbsupport_getlinkedstructs() +{ + var_00 = []; + if(isdefined(self.script_linkto)) + { + var_01 = common_scripts\utility::get_links(); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + var_03 = common_scripts\utility::getstruct(var_01[var_02],"script_linkname"); + if(isdefined(var_03)) + { + var_00[var_00.size] = var_03; + } + } + } + + return var_00; +} + +//Function Number: 29 +func_30DA() +{ + level.air_start_nodes = common_scripts\utility::getstructarray("chopper_boss_path_start","targetname"); + foreach(var_01 in level.air_start_nodes) + { + var_01.neighbors = var_01 lbsupport_getlinkedstructs(); + } +} + +//Function Number: 30 +func_30DB() +{ + level.air_node_mesh = common_scripts\utility::getstructarray("so_chopper_boss_path_struct","script_noteworthy"); + lbsupport_tu0_raise_positions(); + foreach(var_01 in level.air_node_mesh) + { + var_01.neighbors = var_01 lbsupport_getlinkedstructs(); + foreach(var_03 in level.air_node_mesh) + { + if(var_01 == var_03) + { + continue; + } + + if(!lbsupport_arraycontains(var_01.neighbors,var_03) && lbsupport_arraycontains(var_03 lbsupport_getlinkedstructs(),var_01)) + { + var_01.neighbors[var_01.neighbors.size] = var_03; + } + } + } +} + +//Function Number: 31 +lbsupport_tu0_raise_positions() +{ + switch(getdvar("mapname")) + { + case "mp_lambeth": + var_00 = []; + var_01 = []; + var_02 = 0; + while(var_02 < level.air_node_mesh.size) + { + foreach(var_04 in var_41) + { + if(int(level.air_node_mesh[var_02].origin[0]) == int(var_04[0]) && int(level.air_node_mesh[var_02].origin[1]) == int(var_04[1]) && int(level.air_node_mesh[var_02].origin[2]) == int(var_04[2])) + { + level.air_node_mesh[var_02].origin = level.air_node_mesh[var_02].origin + (0,0,192); + break; + } + } + + foreach(var_04 in var_01) + { + if(int(level.air_node_mesh[var_02].origin[0]) == int(var_04[0]) && int(level.air_node_mesh[var_02].origin[1]) == int(var_04[1]) && int(level.air_node_mesh[var_02].origin[2]) == int(var_04[2])) + { + level.air_node_mesh[var_02].origin = level.air_node_mesh[var_02].origin + (0,0,300); + break; + } + } + + var_02++ = var_41[var_01.size]; + } + + break; + (-1027.1,-1180.7,312) + var_41[var_41.size] + (2732.9,83.3,376) + var_41[var_41.size] + (2748.9,963.3,328) + var_41[var_41.size] + (956.9,2931.3,216) + var_41[var_41.size] + (-467.1,-316.7,184) + var_41[var_41.size] + (-1155.1,1187.3,344) + var_41[var_41.size] + (-947.1,1859.3,376) + var_41[var_00.size] + (-291.1,1587.3,184) + break; + + case "mp_village": + var_08 = []; + var_09 = []; + var_0A = []; + var_0B = (-1155.1,-1260.7,1096); + var_02 = 0; + while(var_02 < level.air_node_mesh.size) + { + foreach(var_04 in var_41) + { + if(int(level.air_node_mesh[var_02].origin[0]) == int(var_04[0]) && int(level.air_node_mesh[var_02].origin[1]) == int(var_04[1]) && int(level.air_node_mesh[var_02].origin[2]) == int(var_04[2])) + { + level.air_node_mesh[var_02].origin = level.air_node_mesh[var_02].origin + (0,0,200); + break; + } + } + + foreach(var_04 in var_09) + { + if(int(level.air_node_mesh[var_02].origin[0]) == int(var_04[0]) && int(level.air_node_mesh[var_02].origin[1]) == int(var_04[1]) && int(level.air_node_mesh[var_02].origin[2]) == int(var_04[2])) + { + level.air_node_mesh[var_02].origin = level.air_node_mesh[var_02].origin + (0,0,250); + break; + } + } + + foreach(var_04 in var_0A) + { + if(int(level.air_node_mesh[var_02].origin[0]) == int(var_04[0]) && int(level.air_node_mesh[var_02].origin[1]) == int(var_04[1]) && int(level.air_node_mesh[var_02].origin[2]) == int(var_04[2])) + { + level.air_node_mesh[var_02].origin = level.air_node_mesh[var_02].origin + (0,0,400); + break; + } + } + + if(int(level.air_node_mesh[var_02].origin[0]) == int(var_0B[0]) && int(level.air_node_mesh[var_02].origin[1]) == int(var_0B[1]) && int(level.air_node_mesh[var_02].origin[2]) == int(var_0B[2])) + { + level.air_node_mesh[var_02].origin = (-1003,-1035,986); + continue; + } + + var_02++ = var_41[var_0A.size]; + } + + break; + (1100.9,1155.3,632) + var_41[var_09.size] + (1600,352,752) + var_41[var_09.size] + (352,800,736) + var_41[var_41.size] + (412.9,67.3,680) + var_41[var_41.size] + (1756.9,-444.7,744) + var_41[var_41.size] + (972.9,163.3,744) + var_41[var_41.size] + (60.9,1363.3,728) + var_41[var_08.size] + (684.9,2227.3,680) + break; + + case "mp_interchange": + var_12 = []; + var_02 = 0; + while(var_02 < level.air_node_mesh.size) + { + foreach(var_04 in var_41) + { + if(int(level.air_node_mesh[var_02].origin[0]) == int(var_04[0]) && int(level.air_node_mesh[var_02].origin[1]) == int(var_04[1]) && int(level.air_node_mesh[var_02].origin[2]) == int(var_04[2])) + { + level.air_node_mesh[var_02].origin = level.air_node_mesh[var_02].origin + (0,0,100); + break; + } + } + + var_02++ = var_41[var_12.size]; + } + + break; + (-755.1,-1788.7,360) + break; + + default: + break; + } +} + +//Function Number: 32 +lbsupport_tu0_new_incoming_position(param_00) +{ + switch(getdvar("mapname")) + { + case "mp_interchange": + var_01 = []; + var_02 = []; + var_01[var_02.size][0] = (1340.9,1299.3,360); + var_01[var_02.size][1] = (2220.9,115.3,408); + var_02[var_41.size][0] = (-755.1,-588.7,728); + var_02[var_41.size][1] = (-2563.1,-1580.7,1192); + var_02[var_41.size][0] = (-35.1,-2492.7,488); + var_02[var_41.size][1] = (396.9,-1884.7,696); + var_03 = randomintrange(0,100) > 50; + var_04 = 0; + while(var_04 < var_41.size) + { + if(int(var_01.origin[0]) == int(var_41[var_04][0]) && int(var_01.origin[1]) == int(var_41[var_04][1]) && int(var_01.origin[2]) == int(var_41[var_04][2])) + { + var_05 = 0; + while(var_05 < level.air_node_mesh.size) + { + if(int(level.air_node_mesh[var_05].origin[0]) == int(var_02[var_04][var_03][0]) && int(level.air_node_mesh[var_05].origin[1]) == int(var_02[var_04][var_03][1]) && int(level.air_node_mesh[var_05].origin[2]) == int(var_02[var_04][var_03][2])) + { + return level.air_node_mesh[var_05]; + } + + var_05++ = var_41[var_41.size]; + } + } + + var_04++ = (-755.1,-1788.7,460); + } + + break; + var_41[var_41.size] + (-1363.1,-1164.7,472) + var_41[var_02.size] + (1884.9,787.3,312) + break; + + default: + break; + } + + return var_01; +} + +//Function Number: 33 +func_30DC() +{ + self.vehicle endon("death"); + level endon("game_ended"); + for(;;) + { + self waittill("turretstatechange"); + if(self isfiringturret() && !self.vehicle.empgrenaded) + { + thread lbsupport_burstfirestart(); + continue; + } + + thread lbsupport_burstfirestop(); + } +} + +//Function Number: 34 +lbsupport_burstfirestart() +{ + self.vehicle endon("death"); + self.vehicle endon("leaving"); + self endon("stop_shooting"); + level endon("game_ended"); + var_00 = 0.1; + var_01 = 40; + var_02 = 80; + var_03 = 1; + var_04 = 2; + for(;;) + { + var_05 = randomintrange(var_01,var_02 + 1); + for(var_06 = 0;var_06 < var_05;var_06++) + { + var_07 = self getturrettarget(0); + if(isdefined(var_07) && !isdefined(var_07.spawntime) || gettime() - var_07.spawntime / 1000 > 5 && isdefined(var_07.team) && var_07.team != "spectator" && maps\mp\_utility::isreallyalive(var_07)) + { + self.vehicle setlookatent(var_07); + self shootturret(); + } + + wait var_00; + } + + wait randomfloatrange(var_03,var_04); + } +} + +//Function Number: 35 +lbsupport_burstfirestop() +{ + self notify("stop_shooting"); + if(isdefined(self.vehicle.owner)) + { + self.vehicle setlookatent(self.vehicle.owner); + } +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/killstreaks/_ims.gsc b/MW3/Xbox/MP/maps/mp/killstreaks/_ims.gsc new file mode 100644 index 0000000..e354f71 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/killstreaks/_ims.gsc @@ -0,0 +1,1272 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\killstreaks\_ims.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 37 + * Decompile Time: 695 ms + * Timestamp: 10/27/2023 2:27:02 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level.killstreakfuncs["ims"] = ::func_3148; + level.imssettings = []; + level.imssettings["ims"] = spawnstruct(); + level.imssettings["ims"].weaponinfo = "ims_projectile_mp"; + level.imssettings["ims"].modelbase = "ims_scorpion_body"; + level.imssettings["ims"].modelplacement = "ims_scorpion_body_placement"; + level.imssettings["ims"].modelplacementfailed = "ims_scorpion_body_placement_failed"; + level.imssettings["ims"].modeldestroyed = "ims_scorpion_body"; + level.imssettings["ims"].modelbombsquad = "ims_scorpion_body_bombsquad"; + level.imssettings["ims"].hintstring = &"MP_IMS_PICKUP"; + level.imssettings["ims"].placestring = &"MP_IMS_PLACE"; + level.imssettings["ims"].cannotplacestring = &"MP_IMS_CANNOT_PLACE"; + level.imssettings["ims"].streakname = "ims"; + level.imssettings["ims"].splashname = "used_ims"; + level.imssettings["ims"].lifespan = 90; + level.imssettings["ims"].graceperiod = 0.4; + level.imssettings["ims"].attacks = 4; + level.imssettings["ims"].modelexplosive1 = "ims_scorpion_explosive1"; + level.imssettings["ims"].modelexplosive2 = "ims_scorpion_explosive2"; + level.imssettings["ims"].modelexplosive3 = "ims_scorpion_explosive3"; + level.imssettings["ims"].modelexplosive4 = "ims_scorpion_explosive4"; + level.imssettings["ims"].modellid1 = "ims_scorpion_lid1"; + level.imssettings["ims"].modellid2 = "ims_scorpion_lid2"; + level.imssettings["ims"].modellid3 = "ims_scorpion_lid3"; + level.imssettings["ims"].modellid4 = "ims_scorpion_lid4"; + level.imssettings["ims"].tagexplosive1 = "tag_explosive1"; + level.imssettings["ims"].tagexplosive2 = "tag_explosive2"; + level.imssettings["ims"].tagexplosive3 = "tag_explosive3"; + level.imssettings["ims"].tagexplosive4 = "tag_explosive4"; + level.imssettings["ims"].taglid1 = "tag_lid1"; + level.imssettings["ims"].taglid2 = "tag_lid2"; + level.imssettings["ims"].taglid3 = "tag_lid3"; + level.imssettings["ims"].taglid4 = "tag_lid4"; + foreach(var_01 in level.imssettings) + { + precacheitem(var_01.weaponinfo); + precachemodel(var_01.modelbase); + precachemodel(var_01.modelplacement); + precachemodel(var_01.modelplacementfailed); + precachemodel(var_01.modeldestroyed); + precachemodel(var_01.modelbombsquad); + precachemodel(var_01.modelexplosive1); + precachemodel(var_01.modelexplosive2); + precachemodel(var_01.modelexplosive3); + precachemodel(var_01.modelexplosive4); + precachemodel(var_01.modellid1); + precachemodel(var_01.modellid2); + precachemodel(var_01.modellid3); + precachemodel(var_01.modellid4); + precachestring(var_01.hintstring); + precachestring(var_01.placestring); + precachestring(var_01.cannotplacestring); + } + + precachestring(&"PLATFORM_HOLD_TO_USE"); + level._effect["ims_explode_mp"] = loadfx("explosions/sentry_gun_explosion"); + level._effect["ims_smoke_mp"] = loadfx("smoke/car_damage_blacksmoke"); + level._effect["ims_sensor_trail"] = loadfx("smoke/smoke_geotrail_rpg"); + level._effect["ims_sensor_explode"] = loadfx("explosions/generator_sparks_d"); + level._effect["ims_antenna_light_mp"] = loadfx("lights/light_detonator_blink"); +} + +//Function Number: 2 +func_3148(param_00) +{ + var_01 = []; + if(isdefined(self.imslist)) + { + var_01 = self.imslist; + } + + var_02 = giveims("ims"); + if(!isdefined(var_02)) + { + var_02 = 0; + if(isdefined(self.imslist)) + { + if(!var_01.size && self.imslist.size) + { + var_02 = 1; + } + + if(var_01.size && var_01[0] != self.imslist[0]) + { + var_02 = 1; + } + } + } + + if(var_02) + { + maps\mp\_matchdata::logkillstreakevent(level.imssettings["ims"].streakname,self.origin); + } + + self.iscarrying = 0; + return var_02; +} + +//Function Number: 3 +giveims(param_00) +{ + var_01 = createimsforplayer(param_00,self); + func_2DF8(); + var_02 = func_314B(var_01,1); + thread func_2DFB(); + return var_02; +} + +//Function Number: 4 +func_314B(param_00,param_01) +{ + self endon("death"); + self endon("disconnect"); + param_00 thread func_315E(self); + common_scripts\utility::_disableweapon(); + self notifyonplayercommand("place_ims","+attack"); + self notifyonplayercommand("place_ims","+attack_akimbo_accessible"); + self notifyonplayercommand("cancel_ims","+actionslot 4"); + if(!level.console) + { + self notifyonplayercommand("cancel_ims","+actionslot 5"); + self notifyonplayercommand("cancel_ims","+actionslot 6"); + self notifyonplayercommand("cancel_ims","+actionslot 7"); + } + + for(;;) + { + var_02 = common_scripts\utility::waittill_any_return("place_ims","cancel_ims","force_cancel_placement"); + if(var_02 == "cancel_ims" || var_02 == "force_cancel_placement") + { + if(!param_01 && var_02 == "cancel_ims") + { + continue; + } + + if(level.console) + { + var_03 = maps\mp\killstreaks\_killstreaks::func_2C01(level.imssettings[param_00.imstype].streakname); + if(isdefined(self.killstreakindexweapon) && var_03 == maps\mp\killstreaks\_killstreaks::func_2C01(self.pers["killstreaks"][self.killstreakindexweapon].streakname) && !self getweaponslistitems().size) + { + maps\mp\_utility::_giveweapon(var_03,0); + maps\mp\_utility::func_31F3(4,"weapon",var_03); + } + } + + param_00 func_315D(); + common_scripts\utility::_enableweapon(); + return 0; + } + + if(!param_00.canbeplaced) + { + continue; + } + + param_00 thread func_315C(); + common_scripts\utility::_enableweapon(); + return 1; + } +} + +//Function Number: 5 +func_2DF6() +{ + if(self hasweapon("riotshield_mp")) + { + self.restoreweapon = "riotshield_mp"; + self takeweapon("riotshield_mp"); + } +} + +//Function Number: 6 +func_2DF8() +{ + if(maps\mp\_utility::func_27AF("specialty_explosivebullets")) + { + self.restoreperk = "specialty_explosivebullets"; + maps\mp\_utility::func_282E("specialty_explosivebullets"); + } +} + +//Function Number: 7 +func_2DFA() +{ + if(isdefined(self.restoreweapon)) + { + maps\mp\_utility::_giveweapon(self.restoreweapon); + self.restoreweapon = undefined; + } +} + +//Function Number: 8 +func_2DFB() +{ + if(isdefined(self.restoreperk)) + { + maps\mp\_utility::giveperk(self.restoreperk,0); + self.restoreperk = undefined; + } +} + +//Function Number: 9 +waitrestoreperks() +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + wait 0.05; + func_2DFB(); +} + +//Function Number: 10 +createimsforplayer(param_00,param_01) +{ + if(isdefined(param_01.iscarrying) && param_01.iscarrying) + { + return; + } + + var_02 = spawnturret("misc_turret",param_01.origin + (0,0,25),"sentry_minigun_mp"); + var_02.angles = param_01.angles; + var_02.imstype = param_00; + var_02.owner = param_01; + var_02 setmodel(level.imssettings[param_00].modelbase); + var_02 maketurretinoperable(); + var_02 setturretmodechangewait(1); + var_02 setmode("sentry_offline"); + var_02 makeunusable(); + var_02 setsentryowner(param_01); + return var_02; +} + +//Function Number: 11 +createims(param_00) +{ + var_01 = param_00.owner; + var_02 = param_00.imstype; + var_03 = spawn("script_model",param_00.origin); + var_03 setmodel(level.imssettings[var_02].modelbase); + var_03.scale = 3; + var_03.health = 1000; + var_03.angles = var_01.angles; + var_03.imstype = var_02; + var_03.owner = var_01; + var_03.team = var_01.team; + var_03.shouldsplash = 0; + var_03.hidden = 0; + var_03.attacks = level.imssettings[var_02].attacks; + var_03.lid1 = spawn("script_model",var_03 gettagorigin(level.imssettings[var_02].taglid1 + "_attach")); + var_03.lid1 setmodel(level.imssettings[var_02].modellid1); + var_03.lid1.tag = level.imssettings[var_02].taglid1; + var_03.lid1 linkto(var_03); + var_03.lid2 = spawn("script_model",var_03 gettagorigin(level.imssettings[var_02].taglid2 + "_attach")); + var_03.lid2 setmodel(level.imssettings[var_02].modellid2); + var_03.lid2.tag = level.imssettings[var_02].taglid2; + var_03.lid2 linkto(var_03); + var_03.lid3 = spawn("script_model",var_03 gettagorigin(level.imssettings[var_02].taglid3 + "_attach")); + var_03.lid3 setmodel(level.imssettings[var_02].modellid3); + var_03.lid3.tag = level.imssettings[var_02].taglid3; + var_03.lid3 linkto(var_03); + var_03.lid4 = spawn("script_model",var_03 gettagorigin(level.imssettings[var_02].taglid4 + "_attach")); + var_03.lid4 setmodel(level.imssettings[var_02].modellid4); + var_03.lid4.tag = level.imssettings[var_02].taglid4; + var_03.lid4 linkto(var_03); + var_03.explosive1 = spawn("script_model",var_03 gettagorigin(level.imssettings[var_02].tagexplosive1 + "_attach")); + var_03.explosive1 setmodel(level.imssettings[var_02].modelexplosive1); + var_03.explosive1.tag = level.imssettings[var_02].tagexplosive1; + var_03.explosive1 linkto(var_03); + var_03.explosive2 = spawn("script_model",var_03 gettagorigin(level.imssettings[var_02].tagexplosive2 + "_attach")); + var_03.explosive2 setmodel(level.imssettings[var_02].modelexplosive2); + var_03.explosive2.tag = level.imssettings[var_02].tagexplosive2; + var_03.explosive2 linkto(var_03); + var_03.explosive3 = spawn("script_model",var_03 gettagorigin(level.imssettings[var_02].tagexplosive3 + "_attach")); + var_03.explosive3 setmodel(level.imssettings[var_02].modelexplosive3); + var_03.explosive3.tag = level.imssettings[var_02].tagexplosive3; + var_03.explosive3 linkto(var_03); + var_03.explosive4 = spawn("script_model",var_03 gettagorigin(level.imssettings[var_02].tagexplosive4 + "_attach")); + var_03.explosive4 setmodel(level.imssettings[var_02].modelexplosive4); + var_03.explosive4.tag = level.imssettings[var_02].tagexplosive4; + var_03.explosive4 linkto(var_03); + var_03 ims_setinactive(); + var_03 thread ims_handleownerdisconnect(); + var_03 thread ims_handledeath(); + var_03 thread ims_handleuse(); + var_03 thread func_3158(); + var_03 thread func_316D(); + var_03 thread ims_createbombsquadmodel(); + return var_03; +} + +//Function Number: 12 +ims_createbombsquadmodel() +{ + var_00 = spawn("script_model",self.origin); + var_00.angles = self.angles; + var_00 hide(); + var_01 = level.otherteam[self.team]; + var_00 thread maps\mp\gametypes\_weapons::bombsquadvisibilityupdater(var_01,self.owner); + var_00 setmodel(level.imssettings[self.imstype].modelbombsquad); + var_00 linkto(self); + var_00 setcontents(0); + self.bombsquadmodel = var_00; + self waittill("death"); + var_00 delete(); +} + +//Function Number: 13 +func_3158() +{ + self endon("death"); + level endon("game_ended"); + self.health = 999999; + self.maxhealth = 300; + self.damagetaken = 0; + for(;;) + { + self waittill("damage",var_00,var_01,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09); + if(!maps\mp\gametypes\_weapons::func_27A1(self.owner,var_01)) + { + continue; + } + + if(isdefined(var_09)) + { + switch(var_09) + { + case "ims_projectile_mp": + case "concussion_grenade_mp": + case "flash_grenade_mp": + case "smoke_grenade_mp": + break; + } + } + + if(!isdefined(self)) + { + return; + } + + if(self.hidden) + { + continue; + } + + if(var_04 == "MOD_MELEE") + { + self.damagetaken = self.damagetaken + self.maxhealth; + } + + if(isexplosivedamagemod(var_04)) + { + var_00 = var_00 * 1.5; + } + + if(isdefined(var_08) && var_08 & level.idflags_penetration) + { + self.wasdamagedfrombulletpenetration = 1; + } + + self.wasdamaged = 1; + var_0A = var_00; + if(isplayer(var_01)) + { + var_01 maps\mp\gametypes\_damagefeedback::updatedamagefeedback("ims"); + if(var_01 maps\mp\_utility::func_27AF("specialty_armorpiercing")) + { + var_0A = var_00 * level.armorpiercingmod; + } + } + + if(isdefined(var_01.owner) && isplayer(var_01.owner)) + { + var_01.owner maps\mp\gametypes\_damagefeedback::updatedamagefeedback("ims"); + } + + if(isdefined(var_09)) + { + switch(var_09) + { + case "remote_mortar_missile_mp": + case "javelin_mp": + case "stinger_mp": + case "remotemissile_projectile_mp": + case "ac130_40mm_mp": + case "ac130_105mm_mp": + self.largeprojectiledamage = 1; + var_0A = self.maxhealth + 1; + break; + + case "stealth_bomb_mp": + case "artillery_mp": + self.largeprojectiledamage = 0; + var_0A = var_0A + var_00 * 4; + break; + + case "emp_grenade_mp": + case "bomb_site_mp": + self.largeprojectiledamage = 0; + var_0A = self.maxhealth + 1; + break; + } + + maps\mp\killstreaks\_killstreaks::killstreakhit(var_01,var_09,self); + } + + self.damagetaken = self.damagetaken + var_0A; + if(self.damagetaken >= self.maxhealth) + { + thread maps\mp\gametypes\_missions::vehiclekilled(self.owner,self,undefined,var_01,var_00,var_04,var_09); + if(isplayer(var_01) && !isdefined(self.owner) || var_01 != self.owner) + { + var_01 thread maps\mp\gametypes\_rank::func_2AB3("kill",100,var_09,var_04); + var_01 notify("destroyed_killstreak"); + var_01 notify("destroyed_explosive"); + } + + if(isdefined(self.owner)) + { + self.owner thread maps\mp\_utility::func_2A60("ims_destroyed"); + } + + self notify("death"); + return; + } + } +} + +//Function Number: 14 +ims_handledeath() +{ + var_00 = self getentitynumber(); + func_316E(var_00); + self waittill("death"); + removefromimslist(var_00); + if(!isdefined(self)) + { + return; + } + + self setmodel(level.imssettings[self.imstype].modeldestroyed); + ims_setinactive(); + self playsound("ims_destroyed"); + if(isdefined(self.inuseby)) + { + playfx(common_scripts\utility::func_539("ims_explode_mp"),self.origin + (0,0,10)); + playfx(common_scripts\utility::func_539("ims_smoke_mp"),self.origin); + self.inuseby func_2DFB(); + self.inuseby func_2DFA(); + self notify("deleting"); + wait 1; + } + else + { + playfx(common_scripts\utility::func_539("ims_explode_mp"),self.origin + (0,0,10)); + wait 1.5; + self playsound("ims_fire"); + var_01 = 8; + while(var_01 > 0) + { + playfx(common_scripts\utility::func_539("ims_smoke_mp"),self.origin); + wait 0.4; + var_01 = var_01 - 0.4; + } + + self notify("deleting"); + } + + if(isdefined(self.objidfriendly)) + { + maps\mp\_utility::_objective_delete(self.objidfriendly); + } + + if(isdefined(self.objidenemy)) + { + maps\mp\_utility::_objective_delete(self.objidenemy); + } + + if(isdefined(self.lid1)) + { + self.lid1 delete(); + } + + if(isdefined(self.lid2)) + { + self.lid2 delete(); + } + + if(isdefined(self.lid3)) + { + self.lid3 delete(); + } + + if(isdefined(self.lid4)) + { + self.lid4 delete(); + } + + if(isdefined(self.explosive1)) + { + if(isdefined(self.explosive1.killcament)) + { + self.explosive1.killcament delete(); + } + + self.explosive1 delete(); + } + + if(isdefined(self.explosive2)) + { + if(isdefined(self.explosive2.killcament)) + { + self.explosive2.killcament delete(); + } + + self.explosive2 delete(); + } + + if(isdefined(self.explosive3)) + { + if(isdefined(self.explosive3.killcament)) + { + self.explosive3.killcament delete(); + } + + self.explosive3 delete(); + } + + if(isdefined(self.explosive4)) + { + if(isdefined(self.explosive4.killcament)) + { + self.explosive4.killcament delete(); + } + + self.explosive4 delete(); + } + + self delete(); +} + +//Function Number: 15 +ims_handleuse() +{ + self endon("death"); + level endon("game_ended"); + for(;;) + { + self waittill("trigger",var_00); + if(!maps\mp\_utility::isreallyalive(var_00)) + { + continue; + } + + if(self.damagetaken >= self.maxhealth) + { + continue; + } + + var_01 = createimsforplayer(self.imstype,var_00); + if(!isdefined(var_01)) + { + continue; + } + + var_01.ims = self; + ims_setinactive(); + func_3170(); + var_00 func_314B(var_01,0); + } +} + +//Function Number: 16 +ims_handleownerdisconnect() +{ + self endon("death"); + level endon("game_ended"); + self notify("ims_handleOwner"); + self endon("ims_handleOwner"); + self.owner common_scripts\utility::waittill_any("disconnect","joined_team","joined_spectators"); + self notify("death"); +} + +//Function Number: 17 +func_315C() +{ + self endon("death"); + level endon("game_ended"); + if(isdefined(self.carriedby)) + { + self.carriedby forceusehintoff(); + } + + self.carriedby = undefined; + if(isdefined(self.owner)) + { + self.owner.iscarrying = 0; + } + + var_00 = undefined; + if(isdefined(self.ims)) + { + var_00 = self.ims; + var_00 endon("death"); + var_00.origin = self.origin; + var_00.angles = self.angles; + var_00.carriedby = undefined; + wait 0.05; + var_00 ims_showallparts(); + if(isdefined(var_00.bombsquadmodel)) + { + var_00.bombsquadmodel show(); + level notify("update_bombsquad"); + } + } + else + { + var_00 = createims(self); + } + + var_00 setcandamage(1); + self playsound("ims_plant"); + self notify("placed"); + var_00 thread func_3163(); + self delete(); +} + +//Function Number: 18 +func_315D() +{ + if(isdefined(self.carriedby)) + { + self.carriedby forceusehintoff(); + } + + if(isdefined(self.owner)) + { + self.owner.iscarrying = 0; + } + + if(isdefined(self.lid1)) + { + self.lid1 delete(); + } + + if(isdefined(self.lid2)) + { + self.lid2 delete(); + } + + if(isdefined(self.lid3)) + { + self.lid3 delete(); + } + + if(isdefined(self.lid4)) + { + self.lid4 delete(); + } + + if(isdefined(self.explosive1)) + { + self.explosive1 delete(); + } + + if(isdefined(self.explosive2)) + { + self.explosive2 delete(); + } + + if(isdefined(self.explosive3)) + { + self.explosive3 delete(); + } + + if(isdefined(self.explosive4)) + { + self.explosive4 delete(); + } + + self delete(); +} + +//Function Number: 19 +func_315E(param_00) +{ + self setmodel(level.imssettings[self.imstype].modelplacement); + self setsentrycarrier(param_00); + self setcontents(0); + self setcandamage(0); + self.carriedby = param_00; + param_00.iscarrying = 1; + param_00 thread func_315F(self); + thread ims_oncarrierdeath(param_00); + thread ims_oncarrierdisconnect(param_00); + thread func_3162(); + self notify("carried"); + if(isdefined(self.ims)) + { + self.ims notify("carried"); + self.ims.carriedby = param_00; + if(isdefined(self.ims.bombsquadmodel)) + { + self.ims.bombsquadmodel hide(); + } + } +} + +//Function Number: 20 +func_315F(param_00) +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + param_00 endon("placed"); + param_00 endon("death"); + param_00.canbeplaced = 1; + var_01 = -1; + for(;;) + { + var_02 = self canplayerplacesentry(); + param_00.origin = var_02["origin"]; + param_00.angles = var_02["angles"]; + param_00.canbeplaced = self isonground() && var_02["result"] && abs(param_00.origin[2] - self.origin[2]) < 10; + if(param_00.canbeplaced != var_01) + { + if(param_00.canbeplaced) + { + param_00 setmodel(level.imssettings[param_00.imstype].modelplacement); + self forceusehinton(level.imssettings[param_00.imstype].placestring); + } + else + { + param_00 setmodel(level.imssettings[param_00.imstype].modelplacementfailed); + self forceusehinton(level.imssettings[param_00.imstype].cannotplacestring); + } + } + + var_01 = param_00.canbeplaced; + wait 0.05; + } +} + +//Function Number: 21 +ims_oncarrierdeath(param_00) +{ + self endon("placed"); + self endon("death"); + param_00 endon("disconnect"); + param_00 waittill("death"); + if(self.canbeplaced) + { + thread func_315C(); + return; + } + + func_315D(); +} + +//Function Number: 22 +ims_oncarrierdisconnect(param_00) +{ + self endon("placed"); + self endon("death"); + param_00 waittill("disconnect"); + func_315D(); +} + +//Function Number: 23 +func_3162(param_00) +{ + self endon("placed"); + self endon("death"); + level waittill("game_ended"); + func_315D(); +} + +//Function Number: 24 +func_3163() +{ + self setcursorhint("HINT_NOICON"); + self sethintstring(level.imssettings[self.imstype].hintstring); + var_00 = self.owner; + var_00 forceusehintoff(); + if(level.teambased) + { + maps\mp\_entityheadicons::setteamheadicon(self.team,(0,0,45)); + } + else + { + maps\mp\_entityheadicons::setplayerheadicon(var_00,(0,0,45)); + } + + self makeusable(); + self setcandamage(1); + if(isdefined(var_00.imslist)) + { + foreach(var_02 in var_00.imslist) + { + if(var_02 == self) + { + continue; + } + + var_02 notify("death"); + } + } + + var_00.imslist = []; + var_00.imslist[0] = self; + foreach(var_05 in level.players) + { + if(var_05 == var_00) + { + self enableplayeruse(var_05); + continue; + } + + self disableplayeruse(var_05); + } + + if(self.shouldsplash) + { + level thread maps\mp\_utility::teamplayercardsplash(level.imssettings[self.imstype].splashname,var_00); + self.shouldsplash = 0; + } + + var_07 = (0,0,20); + var_08 = (0,0,256); + var_09 = []; + var_0A = self gettagorigin(level.imssettings[self.imstype].tagexplosive1) + var_07; + var_09[0] = bullettrace(var_0A,var_0A + var_08 - var_07,0,self); + var_0A = self gettagorigin(level.imssettings[self.imstype].tagexplosive2) + var_07; + var_09[1] = bullettrace(var_0A,var_0A + var_08 - var_07,0,self); + var_0A = self gettagorigin(level.imssettings[self.imstype].tagexplosive3) + var_07; + var_09[2] = bullettrace(var_0A,var_0A + var_08 - var_07,0,self); + var_0A = self gettagorigin(level.imssettings[self.imstype].tagexplosive4) + var_07; + var_09[3] = bullettrace(var_0A,var_0A + var_08 - var_07,0,self); + var_0B = var_09[0]; + for(var_0C = 0;var_0C < var_09.size;var_0C++) + { + if(var_09[var_0C]["position"][2] < var_0B["position"][2]) + { + var_0B = var_09[var_0C]; + } + } + + self.attackheightpos = var_0B["position"] - (0,0,20); + var_0D = spawn("trigger_radius",self.origin,0,256,100); + self.attacktrigger = var_0D; + self.attackmovetime = distance(self.origin,self.attackheightpos) / 200; + self.killcamoffset = (0,0,12); + if(isdefined(self.explosive1.killcament)) + { + self.explosive1.killcament delete(); + } + + if(isdefined(self.explosive2.killcament)) + { + self.explosive2.killcament delete(); + } + + if(isdefined(self.explosive3.killcament)) + { + self.explosive3.killcament delete(); + } + + if(isdefined(self.explosive4.killcament)) + { + self.explosive4.killcament delete(); + } + + var_00.imskillcament = undefined; + if(isdefined(self.explosive1)) + { + self.explosive1.killcament = spawn("script_model",self.explosive1.origin + self.killcamoffset); + self.explosive1.killcament setscriptmoverkillcam("explosive"); + if(!isdefined(var_00.imskillcament)) + { + var_00.imskillcament = self.explosive1.killcament; + } + } + + if(isdefined(self.explosive2)) + { + self.explosive2.killcament = spawn("script_model",self.explosive2.origin + self.killcamoffset); + self.explosive2.killcament setscriptmoverkillcam("explosive"); + if(!isdefined(var_00.imskillcament)) + { + var_00.imskillcament = self.explosive2.killcament; + } + } + + if(isdefined(self.explosive3)) + { + self.explosive3.killcament = spawn("script_model",self.explosive3.origin + self.killcamoffset); + self.explosive3.killcament setscriptmoverkillcam("explosive"); + if(!isdefined(var_00.imskillcament)) + { + var_00.imskillcament = self.explosive3.killcament; + } + } + + if(isdefined(self.explosive4)) + { + self.explosive4.killcament = spawn("script_model",self.explosive4.origin + self.killcamoffset); + self.explosive4.killcament setscriptmoverkillcam("explosive"); + if(!isdefined(var_00.imskillcament)) + { + var_00.imskillcament = self.explosive4.killcament; + } + } + + thread func_3168(); + thread ims_attacktargets(); + thread func_3166(); + foreach(var_05 in level.players) + { + thread func_3167(var_05); + } +} + +//Function Number: 25 +func_3166() +{ + self endon("death"); + level waittill("connected",var_00); + var_00 waittill("spawned_player"); + self disableplayeruse(var_00); +} + +//Function Number: 26 +func_3167(param_00) +{ + self endon("death"); + param_00 endon("disconnect"); + for(;;) + { + param_00 waittill("joined_team"); + self disableplayeruse(param_00); + } +} + +//Function Number: 27 +func_3168() +{ + self endon("death"); + self endon("carried"); + for(;;) + { + playfxontag(common_scripts\utility::func_539("ims_antenna_light_mp"),self,"tag_fx"); + wait 1; + stopfxontag(common_scripts\utility::func_539("ims_antenna_light_mp"),self,"tag_fx"); + } +} + +//Function Number: 28 +ims_setinactive() +{ + self makeunusable(); + if(level.teambased) + { + maps\mp\_entityheadicons::setteamheadicon("none",(0,0,0)); + } + else if(isdefined(self.owner)) + { + maps\mp\_entityheadicons::setplayerheadicon(undefined,(0,0,0)); + } + + if(isdefined(self.attacktrigger)) + { + self.attacktrigger delete(); + } +} + +//Function Number: 29 +isfriendlytoims(param_00) +{ + if(level.teambased && self.team == param_00.team) + { + return 1; + } + + return 0; +} + +//Function Number: 30 +ims_attacktargets() +{ + level endon("game_ended"); + for(;;) + { + if(!isdefined(self.attacktrigger)) + { + break; + } + + self.attacktrigger waittill("trigger",var_00); + if(isplayer(var_00)) + { + if(isdefined(self.owner) && var_00 == self.owner) + { + continue; + } + + if(level.teambased && var_00.pers["team"] == self.team) + { + continue; + } + + if(!maps\mp\_utility::isreallyalive(var_00)) + { + continue; + } + } + else if(isdefined(var_00.owner)) + { + if(isdefined(self.owner) && var_00.owner == self.owner) + { + continue; + } + + if(level.teambased && var_00.owner.pers["team"] == self.team) + { + continue; + } + } + + if(!sighttracepassed(self.attackheightpos,var_00.origin + (0,0,50),0,self) || !sighttracepassed(self gettagorigin(level.imssettings[self.imstype].taglid1) + (0,0,5),var_00.origin + (0,0,50),0,self) && !sighttracepassed(self gettagorigin(level.imssettings[self.imstype].taglid2) + (0,0,5),var_00.origin + (0,0,50),0,self) && !sighttracepassed(self gettagorigin(level.imssettings[self.imstype].taglid3) + (0,0,5),var_00.origin + (0,0,50),0,self) && !sighttracepassed(self gettagorigin(level.imssettings[self.imstype].taglid4) + (0,0,5),var_00.origin + (0,0,50),0,self)) + { + continue; + } + + self playsound("ims_trigger"); + if(isplayer(var_00) && var_00 maps\mp\_utility::func_27AF("specialty_delaymine")) + { + var_00 notify("triggered_ims"); + wait level.delayminetime; + if(!isdefined(self.attacktrigger)) + { + break; + } + } + else + { + wait level.imssettings[self.imstype].graceperiod; + } + + if(isdefined(self.explosive1) && !isdefined(self.explosive1.fired)) + { + func_316C(var_00,self.explosive1,self.lid1); + } + else if(isdefined(self.explosive2) && !isdefined(self.explosive2.fired)) + { + func_316C(var_00,self.explosive2,self.lid2); + } + else if(isdefined(self.explosive3) && !isdefined(self.explosive3.fired)) + { + func_316C(var_00,self.explosive3,self.lid3); + } + else if(isdefined(self.explosive4) && !isdefined(self.explosive4.fired)) + { + func_316C(var_00,self.explosive4,self.lid4); + } + + self.attacks--; + if(self.attacks <= 0) + { + break; + } + + wait 2; + if(!isdefined(self.owner)) + { + break; + } + } + + if(isdefined(self.carriedby) && isdefined(self.owner) && self.carriedby == self.owner) + { + return; + } + + self notify("death"); +} + +//Function Number: 31 +func_316C(param_00,param_01,param_02) +{ + playfx(level._effect["ims_sensor_explode"],param_02.origin); + param_02 hide(); + param_01.fired = 1; + param_01 unlink(); + param_01 rotateyaw(3600,self.attackmovetime); + param_01 moveto(self.attackheightpos,self.attackmovetime,self.attackmovetime * 0.25,self.attackmovetime * 0.25); + if(isdefined(param_01.killcament)) + { + if(isdefined(self.owner)) + { + self.owner.imskillcament = param_01.killcament; + } + + param_01.killcament moveto(self.attackheightpos + self.killcamoffset,self.attackmovetime,self.attackmovetime * 0.25,self.attackmovetime * 0.25); + param_01.killcament thread func_2C55(5); + } + + param_01 playsound("ims_launch"); + param_01 waittill("movedone"); + playfx(level._effect["ims_sensor_explode"],param_01.origin); + var_03 = []; + for(var_04 = 0;var_04 < var_41.size;var_04++ = var_41[0]) + { + if(isdefined(self.owner)) + { + magicbullet("ims_projectile_mp",param_02.origin,var_41[var_04],self.owner); + continue; + } + + magicbullet("ims_projectile_mp",param_02.origin,var_41[var_04]); + } + + var_03 delete(); + param_02 delete(); +} + +//Function Number: 32 +func_2C55(param_00) +{ + self endon("death"); + level maps\mp\gametypes\_hostmigration::func_2740(param_00); + if(isdefined(self)) + { + self delete(); + } +} + +//Function Number: 33 +func_316D() +{ + self endon("death"); + level endon("game_ended"); + var_00 = level.imssettings[self.imstype].lifespan; + while(var_00) + { + wait 1; + maps\mp\gametypes\_hostmigration::func_273E(); + if(!isdefined(self.carriedby)) + { + var_00 = max(0,var_00 - 1); + } + } + + self notify("death"); +} + +//Function Number: 34 +func_316E(param_00) +{ + level.ims[param_00] = self; +} + +//Function Number: 35 +removefromimslist(param_00) +{ + level.ims[param_00] = undefined; +} + +//Function Number: 36 +func_3170() +{ + if(isdefined(self.lid1)) + { + self.lid1 hide(); + } + + if(isdefined(self.lid2)) + { + self.lid2 hide(); + } + + if(isdefined(self.lid3)) + { + self.lid3 hide(); + } + + if(isdefined(self.lid4)) + { + self.lid4 hide(); + } + + if(isdefined(self.explosive1)) + { + self.explosive1 hide(); + } + + if(isdefined(self.explosive2)) + { + self.explosive2 hide(); + } + + if(isdefined(self.explosive3)) + { + self.explosive3 hide(); + } + + if(isdefined(self.explosive4)) + { + self.explosive4 hide(); + } + + self hide(); + self.hidden = 1; +} + +//Function Number: 37 +ims_showallparts() +{ + if(isdefined(self.lid1)) + { + self.lid1 show(); + } + + if(isdefined(self.lid2)) + { + self.lid2 show(); + } + + if(isdefined(self.lid3)) + { + self.lid3 show(); + } + + if(isdefined(self.lid4)) + { + self.lid4 show(); + } + + if(isdefined(self.explosive1)) + { + self.explosive1 show(); + } + + if(isdefined(self.explosive2)) + { + self.explosive2 show(); + } + + if(isdefined(self.explosive3)) + { + self.explosive3 show(); + } + + if(isdefined(self.explosive4)) + { + self.explosive4 show(); + } + + self show(); + self.hidden = 0; +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/killstreaks/_juggernaut.gsc b/MW3/Xbox/MP/maps/mp/killstreaks/_juggernaut.gsc new file mode 100644 index 0000000..9066abe --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/killstreaks/_juggernaut.gsc @@ -0,0 +1,187 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\killstreaks\_juggernaut.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 7 + * Decompile Time: 144 ms + * Timestamp: 10/27/2023 2:27:03 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level.juggsettings = []; + level.juggsettings["juggernaut"] = spawnstruct(); + level.juggsettings["juggernaut"].splashusedname = "used_juggernaut"; + level.juggsettings["juggernaut"].overlay = "goggles_overlay"; + level.juggsettings["juggernaut_recon"] = spawnstruct(); + level.juggsettings["juggernaut_recon"].splashusedname = "used_juggernaut"; + level.juggsettings["juggernaut_recon"].overlay = "goggles_overlay"; + foreach(var_01 in level.juggsettings) + { + precacheshader(var_01.overlay); + } +} + +//Function Number: 2 +func_2DD1(param_00) +{ + self endon("death"); + self endon("disconnect"); + wait 0.05; + if(isdefined(self.haslightarmor) && self.haslightarmor == 1) + { + maps\mp\perks\_perkfunctions::removelightarmor(self.previousmaxhealth); + } + + if(maps\mp\_utility::func_27AF("specialty_explosivebullets")) + { + maps\mp\_utility::func_282E("specialty_explosivebullets"); + } + + self.health = self.maxhealth; + switch(param_00) + { + case "juggernaut": + self.isjuggernaut = 1; + self.juggmovespeedscaler = 0.65; + maps\mp\gametypes\_class::func_2A52(self.pers["team"],param_00,0,0); + self.movespeedscaler = 0.65; + break; + + case "juggernaut_recon": + self.isjuggernautrecon = 1; + self.juggmovespeedscaler = 0.75; + maps\mp\gametypes\_class::func_2A52(self.pers["team"],param_00,0,0); + self.movespeedscaler = 0.75; + var_01 = spawn("script_model",self.origin); + var_01.team = self.team; + var_01 makeportableradar(self); + self.personalradar = var_01; + thread func_2DD8(var_01); + break; + } + + maps\mp\gametypes\_weapons::func_2884(); + self disableweaponpickup(); + if(!getdvarint("camera_thirdPerson")) + { + self.juggernautoverlay = newclienthudelem(self); + self.juggernautoverlay.x = 0; + self.juggernautoverlay.y = 0; + self.juggernautoverlay.alignx = "left"; + self.juggernautoverlay.aligny = "top"; + self.juggernautoverlay.horzalign = "fullscreen"; + self.juggernautoverlay.vertalign = "fullscreen"; + self.juggernautoverlay setshader(level.juggsettings[param_00].overlay,640,480); + self.juggernautoverlay.sort = -10; + self.juggernautoverlay.archived = 1; + self.juggernautoverlay.hidein3rdperson = 1; + } + + thread func_2DD7(); + self setperk("specialty_radarjuggernaut",1,0); + thread maps\mp\_utility::teamplayercardsplash(level.juggsettings[param_00].splashusedname,self); + if(self.streaktype == "specialist") + { + thread maps\mp\killstreaks\_killstreaks::func_2DD6(); + } + else + { + thread maps\mp\killstreaks\_killstreaks::updatekillstreaks(1); + } + + thread func_2DD9(); + if(isdefined(self.carryflag)) + { + wait 0.05; + self attach(self.carryflag,"J_spine4",1); + } + + level notify("juggernaut_equipped",self); + maps\mp\_matchdata::logkillstreakevent("juggernaut",self.origin); +} + +//Function Number: 3 +func_2DD7() +{ + level endon("game_ended"); + self endon("death"); + self endon("disconnect"); + self endon("jugg_removed"); + for(;;) + { + wait 3; + self playsound("juggernaut_breathing_sound"); + } +} + +//Function Number: 4 +func_2DD8(param_00) +{ + level endon("game_ended"); + self endon("disconnect"); + self endon("jugg_removed"); + self endon("jugdar_removed"); + for(;;) + { + param_00 moveto(self.origin,0.05); + wait 0.05; + } +} + +//Function Number: 5 +func_2DD9() +{ + level endon("game_ended"); + self endon("disconnect"); + self endon("jugg_removed"); + thread func_2DDC(); + thread func_80F6(); + common_scripts\utility::waittill_any("death","joined_team","joined_spectators","lost_juggernaut"); + self enableweaponpickup(); + self.isjuggernaut = 0; + self.isjuggernautdef = 0; + self.isjuggernautgl = 0; + self.isjuggernautrecon = 0; + if(isdefined(self.juggernautoverlay)) + { + self.juggernautoverlay destroy(); + } + + self unsetperk("specialty_radarjuggernaut",1); + if(isdefined(self.personalradar)) + { + self notify("jugdar_removed"); + level maps\mp\gametypes\_portable_radar::deleteportableradar(self.personalradar); + self.personalradar = undefined; + } + + self notify("jugg_removed"); +} + +//Function Number: 6 +func_2DDC() +{ + self endon("disconnect"); + self endon("jugg_removed"); + level waittill("game_ended"); + if(isdefined(self.juggernautoverlay)) + { + self.juggernautoverlay destroy(); + } +} + +//Function Number: 7 +func_80F6() +{ + self endon("jugg_removed"); + level endon("game_ended"); + var_00 = self.personalradar; + self waittill("disconnect"); + if(isdefined(var_00)) + { + level maps\mp\gametypes\_portable_radar::deleteportableradar(var_00); + } +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/killstreaks/_killstreaks.gsc b/MW3/Xbox/MP/maps/mp/killstreaks/_killstreaks.gsc new file mode 100644 index 0000000..2367629 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/killstreaks/_killstreaks.gsc @@ -0,0 +1,2335 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\killstreaks\_killstreaks.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 69 + * Decompile Time: 1271 ms + * Timestamp: 10/27/2023 2:27:07 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + precachestring(&"MP_KILLSTREAK_N"); + precachestring(&"MP_NUKE_ALREADY_INBOUND"); + precachestring(&"MP_UNAVILABLE_IN_LASTSTAND"); + precachestring(&"MP_UNAVAILABLE_FOR_N_WHEN_EMP"); + precachestring(&"MP_UNAVAILABLE_FOR_N_WHEN_NUKE"); + precachestring(&"MP_UNAVAILABLE_USING_TURRET"); + precachestring(&"MP_UNAVAILABLE_WHEN_INCAP"); + precachestring(&"MP_HELI_IN_QUEUE"); + precachestring(&"MP_SPECIALIST_STREAKING_XP"); + precachestring(&"MP_AIR_SPACE_TOO_CROWDED"); + precachestring(&"MP_CIVILIAN_AIR_TRAFFIC"); + precachestring(&"MP_TOO_MANY_VEHICLES"); + precachestring(&"SPLASHES_HEADSHOT"); + precachestring(&"SPLASHES_FIRSTBLOOD"); + precachestring(&"MP_ASSIST"); + precachestring(&"MP_ASSIST_TO_KILL"); + precacheshader("hud_killstreak_dpad_arrow_down"); + precacheshader("hud_killstreak_dpad_arrow_right"); + precacheshader("hud_killstreak_dpad_arrow_up"); + precacheshader("hud_killstreak_frame"); + precacheshader("hud_killstreak_frame_fade_top"); + precacheshader("hud_killstreak_highlight"); + precacheshader("hud_killstreak_bar_empty"); + precacheshader("hud_killstreak_bar_full"); + initkillstreakdata(); + level.killstreakfuncs = []; + level.killstreaksetupfuncs = []; + level.killstreakweapons = []; + thread maps\mp\killstreaks\_ac130::init(); + thread maps\mp\killstreaks\_remotemissile::init(); + thread maps\mp\killstreaks\_uav::init(); + thread maps\mp\killstreaks\_airstrike::init(); + thread maps\mp\killstreaks\_airdrop::init(); + thread maps\mp\killstreaks\_helicopter::init(); + thread maps\mp\killstreaks\_helicopter_flock::init(); + thread maps\mp\killstreaks\_helicopter_guard::init(); + thread maps\mp\killstreaks\_autosentry::init(); + thread maps\mp\killstreaks\_emp::init(); + thread maps\mp\killstreaks\_nuke::init(); + thread maps\mp\killstreaks\_escortairdrop::init(); + thread maps\mp\killstreaks\_remotemortar::init(); + thread maps\mp\killstreaks\_deployablebox::init(); + thread maps\mp\killstreaks\_ims::init(); + thread maps\mp\killstreaks\_perkstreaks::init(); + thread maps\mp\killstreaks\_remoteturret::init(); + thread maps\mp\killstreaks\_remoteuav::init(); + thread maps\mp\killstreaks\_remotetank::init(); + thread maps\mp\killstreaks\_juggernaut::init(); + level.killstreakweildweapons = []; + level.killstreakweildweapons["cobra_player_minigun_mp"] = 1; + level.killstreakweildweapons["artillery_mp"] = 1; + level.killstreakweildweapons["stealth_bomb_mp"] = 1; + level.killstreakweildweapons["pavelow_minigun_mp"] = 1; + level.killstreakweildweapons["sentry_minigun_mp"] = 1; + level.killstreakweildweapons["harrier_20mm_mp"] = 1; + level.killstreakweildweapons["ac130_105mm_mp"] = 1; + level.killstreakweildweapons["ac130_40mm_mp"] = 1; + level.killstreakweildweapons["ac130_25mm_mp"] = 1; + level.killstreakweildweapons["remotemissile_projectile_mp"] = 1; + level.killstreakweildweapons["cobra_20mm_mp"] = 1; + level.killstreakweildweapons["nuke_mp"] = 1; + level.killstreakweildweapons["apache_minigun_mp"] = 1; + level.killstreakweildweapons["littlebird_guard_minigun_mp"] = 1; + level.killstreakweildweapons["uav_strike_marker_mp"] = 1; + level.killstreakweildweapons["osprey_minigun_mp"] = 1; + level.killstreakweildweapons["strike_marker_mp"] = 1; + level.killstreakweildweapons["a10_30mm_mp"] = 1; + level.killstreakweildweapons["manned_minigun_turret_mp"] = 1; + level.killstreakweildweapons["manned_gl_turret_mp"] = 1; + level.killstreakweildweapons["airdrop_trap_explosive_mp"] = 1; + level.killstreakweildweapons["uav_strike_projectile_mp"] = 1; + level.killstreakweildweapons["remote_mortar_missile_mp"] = 1; + level.killstreakweildweapons["manned_littlebird_sniper_mp"] = 1; + level.killstreakweildweapons["iw5_m60jugg_mp"] = 1; + level.killstreakweildweapons["iw5_mp412jugg_mp"] = 1; + level.killstreakweildweapons["iw5_riotshieldjugg_mp"] = 1; + level.killstreakweildweapons["iw5_usp45jugg_mp"] = 1; + level.killstreakweildweapons["remote_turret_mp"] = 1; + level.killstreakweildweapons["osprey_player_minigun_mp"] = 1; + level.killstreakweildweapons["deployable_vest_marker_mp"] = 1; + level.killstreakweildweapons["ugv_turret_mp"] = 1; + level.killstreakweildweapons["ugv_gl_turret_mp"] = 1; + level.killstreakweildweapons["uav_remote_mp"] = 1; + level.killstreakchainingweapons = []; + level.killstreakchainingweapons["remotemissile_projectile_mp"] = "predator_missile"; + level.killstreakchainingweapons["ims_projectile_mp"] = "ims"; + level.killstreakchainingweapons["sentry_minigun_mp"] = "airdrop_sentry_minigun"; + level.killstreakchainingweapons["artillery_mp"] = "precision_airstrike"; + level.killstreakchainingweapons["cobra_20mm_mp"] = "helicopter"; + level.killstreakchainingweapons["apache_minigun_mp"] = "littlebird_flock"; + level.killstreakchainingweapons["littlebird_guard_minigun_mp"] = "littlebird_support"; + level.killstreakchainingweapons["remote_mortar_missile_mp"] = "remote_mortar"; + level.killstreakchainingweapons["ugv_turret_mp"] = "airdrop_remote_tank"; + level.killstreakchainingweapons["ugv_gl_turret_mp"] = "airdrop_remote_tank"; + level.killstreakchainingweapons["pavelow_minigun_mp"] = "helicopter_flares"; + level.killstreakchainingweapons["ac130_105mm_mp"] = "ac130"; + level.killstreakchainingweapons["ac130_40mm_mp"] = "ac130"; + level.killstreakchainingweapons["ac130_25mm_mp"] = "ac130"; + level.killstreakchainingweapons["iw5_m60jugg_mp"] = "airdrop_juggernaut"; + level.killstreakchainingweapons["iw5_mp412jugg_mp"] = "airdrop_juggernaut"; + level.killstreakchainingweapons["osprey_player_minigun_mp"] = "osprey_gunner"; + level.killstreakrounddelay = maps\mp\_utility::getintproperty("scr_game_killstreakdelay",8); + level thread onplayerconnect(); +} + +//Function Number: 2 +initkillstreakdata() +{ + var_00 = 1; + for(;;) + { + var_01 = tablelookup("mp/killstreakTable.csv",0,var_00,1); + if(!isdefined(var_01) || var_01 == "") + { + break; + } + + var_02 = tablelookup("mp/killstreakTable.csv",0,var_00,1); + var_03 = tablelookupistring("mp/killstreakTable.csv",0,var_00,6); + precachestring(var_03); + var_04 = tablelookup("mp/killstreakTable.csv",0,var_00,8); + game["dialog"][var_02] = var_04; + var_05 = tablelookup("mp/killstreakTable.csv",0,var_00,9); + game["dialog"]["allies_friendly_" + var_02 + "_inbound"] = "use_" + var_05; + game["dialog"]["allies_enemy_" + var_02 + "_inbound"] = "enemy_" + var_05; + var_06 = tablelookup("mp/killstreakTable.csv",0,var_00,10); + game["dialog"]["axis_friendly_" + var_02 + "_inbound"] = "use_" + var_06; + game["dialog"]["axis_enemy_" + var_02 + "_inbound"] = "enemy_" + var_06; + var_07 = tablelookup("mp/killstreakTable.csv",0,var_00,12); + precacheitem(var_07); + var_08 = int(tablelookup("mp/killstreakTable.csv",0,var_00,13)); + maps\mp\gametypes\_rank::registerscoreinfo("killstreak_" + var_02,var_08); + var_09 = tablelookup("mp/killstreakTable.csv",0,var_00,14); + precacheshader(var_09); + var_09 = tablelookup("mp/killstreakTable.csv",0,var_00,15); + if(var_09 != "") + { + precacheshader(var_09); + } + + var_09 = tablelookup("mp/killstreakTable.csv",0,var_00,16); + if(var_09 != "") + { + precacheshader(var_09); + } + + var_09 = tablelookup("mp/killstreakTable.csv",0,var_00,17); + if(var_09 != "") + { + precacheshader(var_09); + } + + var_00++; + } +} + +//Function Number: 3 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + if(!isdefined(var_00.pers["killstreaks"])) + { + var_00.pers["killstreaks"] = []; + } + + if(!isdefined(var_00.pers["kID"])) + { + var_00.pers["kID"] = 10; + } + + var_00.lifeid = 0; + var_00.curdefvalue = 0; + if(isdefined(var_00.pers["deaths"])) + { + var_00.lifeid = var_00.pers["deaths"]; + } + + var_00 visionsetmissilecamforplayer(game["thermal_vision"]); + var_00 thread onplayerspawned(); + var_00.spupdatetotal = 0; + } +} + +//Function Number: 4 +onplayerspawned() +{ + self endon("disconnect"); + for(;;) + { + self waittill("spawned_player"); + thread func_31E8(); + thread waitforchangeteam(); + if(level.console) + { + thread streakselectuptracker(); + thread func_3209(); + thread streakusetimetracker(); + } + else + { + thread pc_watchstreakuse(); + } + + thread func_320A(); + if(!isdefined(self.pers["killstreaks"][0])) + { + initplayerkillstreaks(); + } + + if(!isdefined(self.earnedstreaklevel)) + { + self.earnedstreaklevel = 0; + } + + if(!isdefined(self.adrenaline)) + { + self.adrenaline = self getplayerdata("killstreaksState","count"); + } + + func_28ED(); + func_31DD(); + if(self.streaktype == "specialist") + { + updatespecialistkillstreaks(); + continue; + } + + giveownedkillstreakitem(); + } +} + +//Function Number: 5 +initplayerkillstreaks() +{ + if(!isdefined(self.streaktype)) + { + return; + } + + if(self.streaktype == "specialist") + { + self setplayerdata("killstreaksState","isSpecialist",1); + } + else + { + self setplayerdata("killstreaksState","isSpecialist",0); + } + + self.pers["killstreaks"][0] = spawnstruct(); + self.pers["killstreaks"][0].available = 0; + self.pers["killstreaks"][0].streakname = undefined; + self.pers["killstreaks"][0].earned = 0; + self.pers["killstreaks"][0].awardxp = undefined; + self.pers["killstreaks"][0].owner = undefined; + self.pers["killstreaks"][0].kid = undefined; + self.pers["killstreaks"][0].lifeid = undefined; + self.pers["killstreaks"][0].isgimme = 1; + self.pers["killstreaks"][0].isspecialist = 0; + self.pers["killstreaks"][0].nextslot = undefined; + for(var_00 = 1;var_00 < 4;var_00++) + { + self.pers["killstreaks"][var_00] = spawnstruct(); + self.pers["killstreaks"][var_00].available = 0; + self.pers["killstreaks"][var_00].streakname = undefined; + self.pers["killstreaks"][var_00].earned = 1; + self.pers["killstreaks"][var_00].awardxp = 1; + self.pers["killstreaks"][var_00].owner = undefined; + self.pers["killstreaks"][var_00].kid = undefined; + self.pers["killstreaks"][var_00].lifeid = -1; + self.pers["killstreaks"][var_00].isgimme = 0; + self.pers["killstreaks"][var_00].isspecialist = 0; + } + + self.pers["killstreaks"][4] = spawnstruct(); + self.pers["killstreaks"][4].available = 0; + self.pers["killstreaks"][4].streakname = "all_perks_bonus"; + self.pers["killstreaks"][4].earned = 1; + self.pers["killstreaks"][4].awardxp = 0; + self.pers["killstreaks"][4].owner = undefined; + self.pers["killstreaks"][4].kid = undefined; + self.pers["killstreaks"][4].lifeid = -1; + self.pers["killstreaks"][4].isgimme = 0; + self.pers["killstreaks"][4].isspecialist = 1; + for(var_00 = 0;var_00 < 4;var_00++) + { + self setplayerdata("killstreaksState","icons",var_00,0); + self setplayerdata("killstreaksState","hasStreak",var_00,0); + } + + self setplayerdata("killstreaksState","hasStreak",0,0); + var_01 = 1; + foreach(var_03 in self.killstreaks) + { + self.pers["killstreaks"][var_01].streakname = var_03; + self.pers["killstreaks"][var_01].isspecialist = self.streaktype == "specialist"; + var_04 = self.pers["killstreaks"][var_01].streakname; + if(self.streaktype == "specialist") + { + var_05 = strtok(self.pers["killstreaks"][var_01].streakname,"_"); + if(var_05[var_05.size - 1] == "ks") + { + var_06 = undefined; + foreach(var_08 in var_05) + { + if(var_08 != "ks") + { + if(!isdefined(var_06)) + { + var_06 = var_08; + continue; + } + + var_06 = var_06 + "_" + var_08; + } + } + + if(maps\mp\_utility::func_323E(self.pers["killstreaks"][var_01].streakname,"_")) + { + var_06 = "_" + var_06; + } + + if(isdefined(var_06) && maps\mp\gametypes\_class::func_28F9(var_06) != "specialty_null") + { + var_04 = self.pers["killstreaks"][var_01].streakname + "_pro"; + } + } + } + + self setplayerdata("killstreaksState","icons",var_01,getkillstreakindex(var_04)); + self setplayerdata("killstreaksState","hasStreak",var_01,0); + var_01++; + } + + self setplayerdata("killstreaksState","nextIndex",1); + self setplayerdata("killstreaksState","selectedIndex",-1); + self setplayerdata("killstreaksState","numAvailable",0); + self setplayerdata("killstreaksState","hasStreak",4,0); +} + +//Function Number: 6 +func_31D8() +{ + if(!isdefined(self.pers["killstreaks"])) + { + return; + } + + if(self.adrenaline == self.previousadrenaline) + { + return; + } + + var_00 = self.adrenaline; + self setplayerdata("killstreaksState","count",self.adrenaline); + if(self.adrenaline >= self getplayerdata("killstreaksState","countToNext")) + { + func_28ED(); + } +} + +//Function Number: 7 +resetstreakcount() +{ + self setplayerdata("killstreaksState","count",0); + func_28ED(); +} + +//Function Number: 8 +func_28ED() +{ + if(!isdefined(self.streaktype)) + { + self setplayerdata("killstreaksState","countToNext",0); + return; + } + + if(getmaxstreakcost() == 0) + { + self setplayerdata("killstreaksState","countToNext",0); + return; + } + + if(self.streaktype == "specialist") + { + if(self.adrenaline >= getmaxstreakcost()) + { + return; + } + } + + var_00 = func_31DB(); + if(!isdefined(var_00)) + { + return; + } + + var_01 = getstreakcost(var_00); + self setplayerdata("killstreaksState","countToNext",var_01); +} + +//Function Number: 9 +func_31DB() +{ + if(self.adrenaline == getmaxstreakcost() && self.streaktype != "specialist") + { + var_00 = 0; + } + else + { + var_00 = self.adrenaline; + } + + foreach(var_02 in self.killstreaks) + { + var_03 = getstreakcost(var_02); + if(var_03 > var_00) + { + return var_02; + } + } + + return undefined; +} + +//Function Number: 10 +getmaxstreakcost() +{ + var_00 = 0; + foreach(var_02 in self.killstreaks) + { + var_03 = getstreakcost(var_02); + if(var_03 > var_00) + { + var_00 = var_03; + } + } + + return var_00; +} + +//Function Number: 11 +func_31DD() +{ + if(!isdefined(self.streaktype)) + { + return; + } + + if(!maps\mp\_utility::isreallyalive(self)) + { + return; + } + + var_00 = 0; + for(var_01 = 0;var_01 < 4;var_01++) + { + if(isdefined(self.pers["killstreaks"][var_01]) && isdefined(self.pers["killstreaks"][var_01].streakname)) + { + self setplayerdata("killstreaksState","hasStreak",var_01,self.pers["killstreaks"][var_01].available); + if(self.pers["killstreaks"][var_01].available == 1) + { + var_00++; + } + } + } + + if(self.streaktype != "specialist") + { + self setplayerdata("killstreaksState","numAvailable",var_00); + } + + var_02 = self.earnedstreaklevel; + var_03 = getmaxstreakcost(); + if(self.earnedstreaklevel == var_03 && self.streaktype != "specialist") + { + var_02 = 0; + } + + var_04 = 1; + foreach(var_06 in self.killstreaks) + { + var_07 = getstreakcost(var_06); + if(var_07 > var_02) + { + var_08 = var_06; + break; + } + + if(self.streaktype == "specialist") + { + if(self.earnedstreaklevel == var_03) + { + break; + } + } + + var_04++; + } + + self setplayerdata("killstreaksState","nextIndex",var_04); + if(isdefined(self.killstreakindexweapon) && self.streaktype != "specialist") + { + self setplayerdata("killstreaksState","selectedIndex",self.killstreakindexweapon); + return; + } + + if(self.streaktype == "specialist" && self.pers["killstreaks"][0].available) + { + self setplayerdata("killstreaksState","selectedIndex",0); + return; + } + + self setplayerdata("killstreaksState","selectedIndex",-1); +} + +//Function Number: 12 +waitforchangeteam() +{ + self endon("disconnect"); + self endon("faux_spawn"); + self notify("waitForChangeTeam"); + self endon("waitForChangeTeam"); + for(;;) + { + self waittill("joined_team"); + func_2DD6(); + } +} + +//Function Number: 13 +isridekillstreak(param_00) +{ + switch(param_00) + { + case "helicopter_mk19": + case "helicopter_minigun": + case "remote_tank": + case "remote_uav": + case "remote_mortar": + case "osprey_gunner": + case "predator_missile": + case "ac130": + return 1; + + default: + return 0; + } +} + +//Function Number: 14 +func_31E1(param_00) +{ + switch(param_00) + { + case "deployable_exp_ammo": + case "gl_turret": + case "sentry_gl": + case "ims": + case "deployable_vest": + case "minigun_turret": + case "sentry": + return 1; + + default: + return 0; + } +} + +//Function Number: 15 +func_31E2(param_00) +{ + switch(param_00) + { + case "harrier_airstrike": + case "helicopter_minigun": + case "littlebird_support": + case "helicopter": + case "remote_tank": + case "remote_mortar": + case "osprey_gunner": + case "stealth_airstrike": + case "littlebird_flock": + case "helicopter_flares": + case "predator_missile": + case "precision_airstrike": + case "ac130": + return 1; + } + + return 0; +} + +//Function Number: 16 +killstreakusepressed() +{ + var_00 = self.pers["killstreaks"][self.killstreakindexweapon].streakname; + var_01 = self.pers["killstreaks"][self.killstreakindexweapon].lifeid; + var_02 = self.pers["killstreaks"][self.killstreakindexweapon].earned; + var_03 = self.pers["killstreaks"][self.killstreakindexweapon].awardxp; + var_04 = self.pers["killstreaks"][self.killstreakindexweapon].kid; + var_05 = self.pers["killstreaks"][self.killstreakindexweapon].isgimme; + if(!self isonground() && isridekillstreak(var_00) || func_31E1(var_00)) + { + return 0; + } + + if(maps\mp\_utility::isusingremote()) + { + return 0; + } + + if(isdefined(self.selectinglocation)) + { + return 0; + } + + if(func_31E2(var_00) && level.killstreakrounddelay && maps\mp\_utility::getgametypenumlives()) + { + if(level.graceperiod - level.ingraceperiod < level.killstreakrounddelay) + { + self iprintlnbold(&"MP_UNAVAILABLE_FOR_N",level.killstreakrounddelay - level.graceperiod - level.ingraceperiod); + return 0; + } + } + + if((level.teambased && level.teamemped[self.team]) || !level.teambased && isdefined(level.empplayer) && level.empplayer != self) + { + if(var_00 != "deployable_vest") + { + self iprintlnbold(&"MP_UNAVAILABLE_FOR_N_WHEN_EMP",level.emptimeremaining); + return 0; + } + } + + if(isdefined(self.nuked) && self.nuked) + { + if(var_00 != "deployable_vest") + { + self iprintlnbold(&"MP_UNAVAILABLE_FOR_N_WHEN_NUKE",level.nukeemptimeremaining); + return 0; + } + } + + if(self isusingturret() && isridekillstreak(var_00) || func_31E1(var_00)) + { + self iprintlnbold(&"MP_UNAVAILABLE_USING_TURRET"); + return 0; + } + + if(isdefined(self.laststand) && isridekillstreak(var_00)) + { + self iprintlnbold(&"MP_UNAVILABLE_IN_LASTSTAND"); + return 0; + } + + if(!common_scripts\utility::isweaponenabled()) + { + return 0; + } + + var_06 = 0; + if(maps\mp\_utility::func_27AF("specialty_explosivebullets") && !issubstr(var_00,"explosive_ammo")) + { + var_06 = 1; + } + + if(issubstr(var_00,"airdrop") || var_00 == "littlebird_flock") + { + if(!self [[ level.killstreakfuncs[var_00] ]](var_01,var_04)) + { + return 0; + } + } + else if(!self [[ level.killstreakfuncs[var_00] ]](var_01)) + { + return 0; + } + + if(var_06) + { + maps\mp\_utility::func_282E("specialty_explosivebullets"); + } + + thread updatekillstreaks(); + func_2C16(var_00,var_03); + return 1; +} + +//Function Number: 17 +func_2C16(param_00,param_01) +{ + self playlocalsound("weap_c4detpack_trigger_plr"); + if(param_01) + { + self thread [[ level.onxpevent ]]("killstreak_" + param_00); + thread maps\mp\gametypes\_missions::usehardpoint(param_00); + } + + var_02 = maps\mp\_awards::getkillstreakawardref(param_00); + if(isdefined(var_02)) + { + thread maps\mp\_utility::incplayerstat(var_02,1); + } + + if(func_31F4(param_00)) + { + thread maps\mp\_utility::incplayerstat("assaultkillstreaksused",1); + } + else if(func_31F5(param_00)) + { + thread maps\mp\_utility::incplayerstat("supportkillstreaksused",1); + } + else if(func_31F6(param_00)) + { + thread maps\mp\_utility::incplayerstat("specialistkillstreaksearned",1); + return; + } + + var_03 = self.team; + if(level.teambased) + { + thread maps\mp\_utility::func_26E5(var_03 + "_friendly_" + param_00 + "_inbound",var_03); + if(getkillstreakinformenemy(param_00)) + { + thread maps\mp\_utility::func_26E5(var_03 + "_enemy_" + param_00 + "_inbound",level.otherteam[var_03]); + return; + } + + return; + } + + thread maps\mp\_utility::func_2A60(var_03 + "_friendly_" + param_00 + "_inbound"); + if(getkillstreakinformenemy(param_00)) + { + var_04[0] = self; + thread maps\mp\_utility::func_26E5(var_03 + "_enemy_" + param_00 + "_inbound",undefined,undefined,var_04); + } +} + +//Function Number: 18 +updatekillstreaks(param_00) +{ + if(!isdefined(param_00)) + { + self.pers["killstreaks"][self.killstreakindexweapon].available = 0; + if(self.killstreakindexweapon == 0) + { + self.pers["killstreaks"][self.pers["killstreaks"][0].nextslot] = undefined; + var_01 = undefined; + for(var_02 = 5;var_02 < self.pers["killstreaks"].size;var_02++) + { + if(!isdefined(self.pers["killstreaks"][var_02]) || !isdefined(self.pers["killstreaks"][var_02].streakname)) + { + continue; + } + + var_01 = self.pers["killstreaks"][var_02].streakname; + self.pers["killstreaks"][0].nextslot = var_02; + } + + if(isdefined(var_01)) + { + self.pers["killstreaks"][0].available = 1; + self.pers["killstreaks"][0].streakname = var_01; + var_03 = getkillstreakindex(var_01); + self setplayerdata("killstreaksState","icons",0,var_03); + if(!level.console) + { + var_04 = func_2C01(var_01); + maps\mp\_utility::func_31F3(4,"weapon",var_04); + } + } + } + } + + var_05 = undefined; + if(self.streaktype == "specialist") + { + if(self.pers["killstreaks"][0].available) + { + var_05 = 0; + } + } + else + { + for(var_02 = 0;var_02 < 4;var_02++) + { + if(isdefined(self.pers["killstreaks"][var_02]) && isdefined(self.pers["killstreaks"][var_02].streakname) && self.pers["killstreaks"][var_02].available) + { + var_05 = var_02; + } + } + } + + if(isdefined(var_05)) + { + if(level.console) + { + self.killstreakindexweapon = var_05; + self.pers["lastEarnedStreak"] = self.pers["killstreaks"][var_05].streakname; + func_3201(); + return; + } + + for(var_02 = 0;var_02 < 4;var_02++) + { + if(isdefined(self.pers["killstreaks"][var_02]) && isdefined(self.pers["killstreaks"][var_02].streakname) && self.pers["killstreaks"][var_02].available) + { + var_04 = func_2C01(self.pers["killstreaks"][var_02].streakname); + var_06 = self getweaponslistitems(); + var_07 = 0; + for(var_08 = 0;var_08 < var_06.size;var_08++) + { + if(var_04 == var_06[var_08]) + { + var_07 = 1; + break; + } + } + + if(!var_07) + { + maps\mp\_utility::_giveweapon(var_04); + } + else if(issubstr(var_04,"airdrop_")) + { + self setweaponammoclip(var_04,1); + } + + maps\mp\_utility::func_31F3(var_02 + 4,"weapon",var_04); + } + } + + self.killstreakindexweapon = undefined; + self.pers["lastEarnedStreak"] = self.pers["killstreaks"][var_05].streakname; + func_31DD(); + return; + } + + self.killstreakindexweapon = undefined; + self.pers["lastEarnedStreak"] = undefined; + func_31DD(); +} + +//Function Number: 19 +func_2DD6() +{ + for(var_00 = self.pers["killstreaks"].size - 1;var_00 > -1;var_00--) + { + if(isdefined(self.pers["killstreaks"][var_00])) + { + self.pers["killstreaks"][var_00] = undefined; + } + } + + initplayerkillstreaks(); + resetadrenaline(); + self.killstreakindexweapon = undefined; + func_31DD(); +} + +//Function Number: 20 +updatespecialistkillstreaks() +{ + if(self.adrenaline == 0) + { + for(var_00 = 1;var_00 < 4;var_00++) + { + if(isdefined(self.pers["killstreaks"][var_00])) + { + self.pers["killstreaks"][var_00].available = 0; + self setplayerdata("killstreaksState","hasStreak",var_00,0); + } + } + + self setplayerdata("killstreaksState","nextIndex",1); + self setplayerdata("killstreaksState","hasStreak",4,0); + } + else + { + for(var_00 = 1;var_00 < 4;var_00++) + { + if(isdefined(self.pers["killstreaks"][var_00]) && isdefined(self.pers["killstreaks"][var_00].streakname) && self.pers["killstreaks"][var_00].available) + { + var_01 = getstreakcost(self.pers["killstreaks"][var_00].streakname); + if(var_01 > self.adrenaline) + { + self.pers["killstreaks"][var_00].available = 0; + self setplayerdata("killstreaksState","hasStreak",var_00,0); + continue; + } + + if(self.adrenaline >= var_01) + { + if(self getplayerdata("killstreaksState","hasStreak",var_00)) + { + if(isdefined(level.killstreakfuncs[self.pers["killstreaks"][var_00].streakname])) + { + self [[ level.killstreakfuncs[self.pers["killstreaks"][var_00].streakname] ]](); + } + + continue; + } + + givekillstreak(self.pers["killstreaks"][var_00].streakname,self.pers["killstreaks"][var_00].earned,0,self,1); + } + } + } + + var_02 = 8; + if(maps\mp\_utility::func_27AF("specialty_hardline")) + { + var_02--; + } + + if(self.adrenaline >= var_02) + { + self setplayerdata("killstreaksState","hasStreak",4,1); + giveallperks(); + } + else + { + self setplayerdata("killstreaksState","hasStreak",4,0); + } + } + + if(self.pers["killstreaks"][0].available) + { + var_03 = self.pers["killstreaks"][0].streakname; + var_04 = func_2C01(var_03); + if(level.console) + { + func_31F2(var_04); + self.killstreakindexweapon = 0; + return; + } + + maps\mp\_utility::_giveweapon(var_04); + maps\mp\_utility::func_31F3(4,"weapon",var_04); + self.killstreakindexweapon = undefined; + } +} + +//Function Number: 21 +func_31E7() +{ + var_00 = self getweaponslistprimaries(); + return var_00[0]; +} + +//Function Number: 22 +func_31E8() +{ + self endon("disconnect"); + self endon("finish_death"); + self endon("joined_team"); + self endon("faux_spawn"); + level endon("game_ended"); + self notify("killstreakUseWaiter"); + self endon("killstreakUseWaiter"); + self.lastkillstreak = 0; + if(!isdefined(self.pers["lastEarnedStreak"])) + { + self.pers["lastEarnedStreak"] = undefined; + } + + thread func_31EC(); + for(;;) + { + self waittill("weapon_change",var_00); + if(!isalive(self)) + { + continue; + } + + if(!isdefined(self.killstreakindexweapon)) + { + continue; + } + + if(!isdefined(self.pers["killstreaks"][self.killstreakindexweapon]) || !isdefined(self.pers["killstreaks"][self.killstreakindexweapon].streakname)) + { + continue; + } + + var_01 = func_2C01(self.pers["killstreaks"][self.killstreakindexweapon].streakname); + if(var_00 != var_01) + { + if(maps\mp\_utility::func_323E(var_00,"airdrop_")) + { + self takeweapon(var_00); + self switchtoweapon(self.lastdroppableweapon); + } + + continue; + } + + waittillframeend; + var_02 = self.pers["killstreaks"][self.killstreakindexweapon].streakname; + var_03 = self.pers["killstreaks"][self.killstreakindexweapon].isgimme; + var_04 = killstreakusepressed(); + var_05 = undefined; + if(!var_04 && !isalive(self) && !self hasweapon(common_scripts\utility::getlastweapon())) + { + var_05 = common_scripts\utility::getlastweapon(); + maps\mp\_utility::_giveweapon(var_05); + } + else if(!self hasweapon(common_scripts\utility::getlastweapon())) + { + var_05 = func_31E7(); + } + else + { + var_05 = common_scripts\utility::getlastweapon(); + } + + if(var_04) + { + thread waittakekillstreakweapon(var_01,var_05); + } + + if(func_31EB(var_04,var_02)) + { + self switchtoweapon(var_05); + } + + if(self getcurrentweapon() == "none") + { + while(self getcurrentweapon() == "none") + { + wait 0.05; + } + + waittillframeend; + } + } +} + +//Function Number: 23 +waittakekillstreakweapon(param_00,param_01) +{ + self endon("disconnect"); + self endon("finish_death"); + self endon("joined_team"); + level endon("game_ended"); + self notify("waitTakeKillstreakWeapon"); + self endon("waitTakeKillstreakWeapon"); + var_02 = self getcurrentweapon() == "none"; + self waittill("weapon_change",var_03); + if(var_03 == param_01) + { + takekillstreakweaponifnodupe(param_00); + if(!level.console) + { + self.killstreakindexweapon = undefined; + return; + } + + return; + } + + if(var_03 != param_00) + { + thread waittakekillstreakweapon(param_00,param_01); + return; + } + + if(var_02 && self getcurrentweapon() == param_00) + { + thread waittakekillstreakweapon(param_00,param_01); + return; + } +} + +//Function Number: 24 +takekillstreakweaponifnodupe(param_00) +{ + var_01 = 0; + for(var_02 = 0;var_02 < self.pers["killstreaks"].size;var_02++) + { + if(isdefined(self.pers["killstreaks"][var_02]) && isdefined(self.pers["killstreaks"][var_02].streakname) && self.pers["killstreaks"][var_02].available) + { + if(!func_31F6(self.pers["killstreaks"][var_02].streakname) && param_00 == func_2C01(self.pers["killstreaks"][var_02].streakname)) + { + var_01 = 1; + break; + } + } + } + + if(var_01) + { + if(level.console) + { + if(isdefined(self.killstreakindexweapon) && param_00 != func_2C01(self.pers["killstreaks"][self.killstreakindexweapon].streakname)) + { + self takeweapon(param_00); + return; + } + + if(isdefined(self.killstreakindexweapon) && param_00 == func_2C01(self.pers["killstreaks"][self.killstreakindexweapon].streakname)) + { + self takeweapon(param_00); + maps\mp\_utility::_giveweapon(param_00,0); + maps\mp\_utility::func_31F3(4,"weapon",param_00); + return; + } + + return; + } + + self takeweapon(param_00); + maps\mp\_utility::_giveweapon(param_00,0); + return; + } + + self takeweapon(param_00); +} + +//Function Number: 25 +func_31EB(param_00,param_01) +{ + switch(param_01) + { + case "uav_strike": + if(!param_00) + { + return 0; + } + + break; + } + + if(!param_00) + { + return 1; + } + + if(isridekillstreak(param_01)) + { + return 0; + } + + return 1; +} + +//Function Number: 26 +func_31EC() +{ + self endon("disconnect"); + level endon("game_ended"); + self notify("finishDeathWaiter"); + self endon("finishDeathWaiter"); + self waittill("death"); + wait 0.05; + self notify("finish_death"); + self.pers["lastEarnedStreak"] = undefined; +} + +//Function Number: 27 +func_31ED() +{ + foreach(var_01 in self.killstreaks) + { + var_02 = getstreakcost(var_01); + if(var_02 > self.adrenaline) + { + break; + } + + if(self.previousadrenaline < var_02 && self.adrenaline >= var_02) + { + earnkillstreak(var_01,var_02); + break; + } + } +} + +//Function Number: 28 +getcustomclassloc() +{ + if(getdvarint("xblive_privatematch")) + { + return "privateMatchCustomClasses"; + } + + return "customClasses"; +} + +//Function Number: 29 +killstreakearned(param_00) +{ + var_01 = "assault"; + switch(self.streaktype) + { + case "assault": + var_01 = "assaultStreaks"; + break; + + case "support": + var_01 = "defenseStreaks"; + break; + + case "specialist": + var_01 = "specialistStreaks"; + break; + } + + if(isdefined(self.class_num)) + { + var_02 = getcustomclassloc(); + if(self getplayerdata(var_02,self.class_num,var_01,0) == param_00) + { + self.firstkillstreakearned = gettime(); + return; + } + + if(self getplayerdata(var_02,self.class_num,var_01,2) == param_00 && isdefined(self.firstkillstreakearned)) + { + if(gettime() - self.firstkillstreakearned < 20000) + { + thread maps\mp\gametypes\_missions::genericchallenge("wargasm"); + return; + } + + return; + } + } +} + +//Function Number: 30 +earnkillstreak(param_00,param_01) +{ + level notify("gave_killstreak",param_00); + self.earnedstreaklevel = param_01; + if(!level.gameended) + { + var_02 = undefined; + if(self.streaktype == "specialist") + { + var_03 = getsubstr(param_00,0,param_00.size - 3); + if(maps\mp\gametypes\_class::func_31F1(var_03)) + { + var_02 = "pro"; + } + } + + thread maps\mp\gametypes\_hud_message::killstreaksplashnotify(param_00,param_01,var_02); + } + + thread killstreakearned(param_00); + self.pers["lastEarnedStreak"] = param_00; + func_28ED(); + givekillstreak(param_00,1,1); +} + +//Function Number: 31 +givekillstreak(param_00,param_01,param_02,param_03,param_04) +{ + self endon("givingLoadout"); + if(!isdefined(level.killstreakfuncs[param_00]) || tablelookup("mp/killstreakTable.csv",1,param_00,0) == "") + { + return; + } + + if(!isdefined(self.pers["killstreaks"])) + { + return; + } + + self endon("disconnect"); + if(!isdefined(param_04)) + { + param_04 = 0; + } + + var_05 = undefined; + if(!isdefined(param_01) || param_01 == 0) + { + var_06 = self.pers["killstreaks"].size; + if(!isdefined(self.pers["killstreaks"][var_06])) + { + self.pers["killstreaks"][var_06] = spawnstruct(); + } + + self.pers["killstreaks"][var_06].available = 0; + self.pers["killstreaks"][var_06].streakname = param_00; + self.pers["killstreaks"][var_06].earned = 0; + self.pers["killstreaks"][var_06].awardxp = isdefined(param_02) && param_02; + self.pers["killstreaks"][var_06].owner = param_03; + self.pers["killstreaks"][var_06].kid = self.pers["kID"]; + self.pers["killstreaks"][var_06].lifeid = -1; + self.pers["killstreaks"][var_06].isgimme = 1; + self.pers["killstreaks"][var_06].isspecialist = 0; + self.pers["killstreaks"][0].nextslot = var_06; + self.pers["killstreaks"][0].streakname = param_00; + var_05 = 0; + var_07 = getkillstreakindex(param_00); + self setplayerdata("killstreaksState","icons",0,var_07); + if(!param_04) + { + func_3202(param_00); + } + } + else + { + for(var_08 = 1;var_08 < 4;var_08++) + { + if(isdefined(self.pers["killstreaks"][var_08]) && isdefined(self.pers["killstreaks"][var_08].streakname) && param_00 == self.pers["killstreaks"][var_08].streakname) + { + var_05 = var_08; + break; + } + } + + if(!isdefined(var_05)) + { + return; + } + } + + self.pers["killstreaks"][var_05].available = 1; + self.pers["killstreaks"][var_05].earned = isdefined(param_01) && param_01; + self.pers["killstreaks"][var_05].awardxp = isdefined(param_02) && param_02; + self.pers["killstreaks"][var_05].owner = param_03; + self.pers["killstreaks"][var_05].kid = self.pers["kID"]; + self.pers["kID"]++; + if(!self.pers["killstreaks"][var_05].earned) + { + self.pers["killstreaks"][var_05].lifeid = -1; + } + else + { + self.pers["killstreaks"][var_05].lifeid = self.pers["deaths"]; + } + + if(self.streaktype == "specialist" && var_05 != 0) + { + self.pers["killstreaks"][var_05].isspecialist = 1; + if(isdefined(level.killstreakfuncs[param_00])) + { + self [[ level.killstreakfuncs[param_00] ]](); + } + + func_2C16(param_00,param_02); + } + else if(level.console) + { + var_09 = func_2C01(param_00); + func_31F2(var_09); + if(isdefined(self.killstreakindexweapon)) + { + param_00 = self.pers["killstreaks"][self.killstreakindexweapon].streakname; + var_0A = func_2C01(param_00); + if(!iscurrentlyholdingkillstreakweapon(var_0A)) + { + self.killstreakindexweapon = var_05; + } + } + else + { + self.killstreakindexweapon = var_05; + } + } + else + { + if(0 == var_05 && self.pers["killstreaks"][0].nextslot > 5) + { + var_0B = self.pers["killstreaks"][0].nextslot - 1; + var_0C = func_2C01(self.pers["killstreaks"][var_0B].streakname); + self takeweapon(var_0C); + } + + var_0A = func_2C01(param_00); + maps\mp\_utility::_giveweapon(var_0A,0); + maps\mp\_utility::func_31F3(var_05 + 4,"weapon",var_0A); + } + + func_31DD(); + if(isdefined(level.killstreaksetupfuncs[param_00])) + { + self [[ level.killstreaksetupfuncs[param_00] ]](); + } + + if(isdefined(param_01) && param_01 && isdefined(param_02) && param_02) + { + self notify("received_earned_killstreak"); + } +} + +//Function Number: 32 +iscurrentlyholdingkillstreakweapon(param_00) +{ + var_01 = self getcurrentweapon(); + switch(param_00) + { + case "killstreak_uav_mp": + return var_01 == "killstreak_remote_uav_mp"; + } + + return var_01 == param_00; +} + +//Function Number: 33 +func_31F2(param_00) +{ + self endon("disconnect"); + if(!level.console) + { + return; + } + + var_01 = self getweaponslistitems(); + foreach(var_03 in var_01) + { + if(!maps\mp\_utility::func_323E(var_03,"killstreak_") && !maps\mp\_utility::func_323E(var_03,"airdrop_") && !maps\mp\_utility::func_323E(var_03,"deployable_")) + { + continue; + } + + if(self getcurrentweapon() == var_03 || isdefined(self.changingweapon) && self.changingweapon == var_03) + { + continue; + } + + while(maps\mp\_utility::ischangingweapon()) + { + wait 0.05; + } + + self takeweapon(var_03); + } + + if(isdefined(self.killstreakindexweapon)) + { + var_05 = self.pers["killstreaks"][self.killstreakindexweapon].streakname; + var_06 = func_2C01(var_05); + if(self getcurrentweapon() != var_06) + { + maps\mp\_utility::_giveweapon(param_00,0); + maps\mp\_utility::func_31F3(4,"weapon",param_00); + return; + } + + return; + } + + maps\mp\_utility::_giveweapon(param_00,0); + maps\mp\_utility::func_31F3(4,"weapon",param_00); +} + +//Function Number: 34 +getstreakcost(param_00) +{ + var_01 = int(tablelookup("mp/killstreakTable.csv",1,param_00,4)); + if(isdefined(self) && isplayer(self)) + { + if(func_31F6(param_00)) + { + if(isdefined(self.pers["gamemodeLoadout"])) + { + if(isdefined(self.pers["gamemodeLoadout"]["loadoutKillstreak1"]) && self.pers["gamemodeLoadout"]["loadoutKillstreak1"] == param_00) + { + var_01 = 2; + } + else if(isdefined(self.pers["gamemodeLoadout"]["loadoutKillstreak2"]) && self.pers["gamemodeLoadout"]["loadoutKillstreak2"] == param_00) + { + var_01 = 4; + } + else if(isdefined(self.pers["gamemodeLoadout"]["loadoutKillstreak3"]) && self.pers["gamemodeLoadout"]["loadoutKillstreak3"] == param_00) + { + var_01 = 6; + } + else + { + } + } + else if(issubstr(self.curclass,"custom")) + { + var_02 = getcustomclassloc(); + for(var_03 = 0;var_03 < 3;var_03++) + { + var_04 = self getplayerdata(var_02,self.class_num,"specialistStreaks",var_03); + if(var_04 == param_00) + { + break; + } + } + + var_01 = self getplayerdata(var_02,self.class_num,"specialistStreakKills",var_03); + } + else if(issubstr(self.curclass,"axis") || issubstr(self.curclass,"allies")) + { + var_03 = 0; + var_05 = "none"; + if(issubstr(self.curclass,"axis")) + { + var_05 = "axis"; + } + else if(issubstr(self.curclass,"allies")) + { + var_05 = "allies"; + } + + var_06 = maps\mp\gametypes\_class::func_28BD(self.curclass); + while(var_03 < 3) + { + var_04 = getmatchrulesdata("defaultClasses",var_05,var_06,"class","specialistStreaks",var_03); + if(var_04 == param_00) + { + break; + } + + var_03++; + } + + var_01 = getmatchrulesdata("defaultClasses",var_05,var_06,"class","specialistStreakKills",var_03); + } + } + + if(maps\mp\_utility::func_27AF("specialty_hardline") && var_01 > 0) + { + var_01--; + } + } + + return var_01; +} + +//Function Number: 35 +func_31F4(param_00) +{ + switch(param_00) + { + case "littlebird_support": + case "helicopter": + case "airdrop_remote_tank": + case "remote_mortar": + case "ims": + case "osprey_gunner": + case "littlebird_flock": + case "helicopter_flares": + case "airdrop_juggernaut": + case "airdrop_sentry_minigun": + case "airdrop_assault": + case "predator_missile": + case "precision_airstrike": + case "ac130": + case "uav": + return 1; + + default: + return 0; + } +} + +//Function Number: 36 +func_31F5(param_00) +{ + switch(param_00) + { + case "sam_turret": + case "remote_uav": + case "uav_support": + case "airdrop_juggernaut_recon": + case "remote_mg_turret": + case "deployable_vest": + case "escort_airdrop": + case "airdrop_trap": + case "stealth_airstrike": + case "counter_uav": + case "triple_uav": + case "emp": + return 1; + + default: + return 0; + } +} + +//Function Number: 37 +func_31F6(param_00) +{ + switch(param_00) + { + case "all_perks_bonus": + case "specialty_stalker_ks": + case "specialty_quieter_ks": + case "specialty_bulletaccuracy_ks": + case "specialty_autospot_ks": + case "specialty_detectexplosive_ks": + case "_specialty_blastshield_ks": + case "specialty_assists_ks": + case "specialty_quickdraw_ks": + case "specialty_coldblooded_ks": + case "specialty_hardline_ks": + case "specialty_paint_ks": + case "specialty_blindeye_ks": + case "specialty_scavenger_ks": + case "specialty_fastreload_ks": + case "specialty_longersprint_ks": + return 1; + + default: + return 0; + } +} + +//Function Number: 38 +func_31F7(param_00) +{ + return tablelookupistring("mp/killstreakTable.csv",1,param_00,6); +} + +//Function Number: 39 +getkillstreakinformenemy(param_00) +{ + return int(tablelookup("mp/killstreakTable.csv",1,param_00,11)); +} + +//Function Number: 40 +func_31F9(param_00) +{ + return tablelookup("mp/killstreakTable.csv",1,param_00,7); +} + +//Function Number: 41 +getkillstreakdialog(param_00) +{ + return tablelookup("mp/killstreakTable.csv",1,param_00,8); +} + +//Function Number: 42 +func_2C01(param_00) +{ + return tablelookup("mp/killstreakTable.csv",1,param_00,12); +} + +//Function Number: 43 +getkillstreakicon(param_00) +{ + return tablelookup("mp/killstreakTable.csv",1,param_00,14); +} + +//Function Number: 44 +getkillstreakcrateicon(param_00) +{ + return tablelookup("mp/killstreakTable.csv",1,param_00,15); +} + +//Function Number: 45 +getkillstreakdpadicon(param_00) +{ + return tablelookup("mp/killstreakTable.csv",1,param_00,16); +} + +//Function Number: 46 +getkillstreakindex(param_00) +{ + return tablelookuprownum("mp/killstreakTable.csv",1,param_00) - 1; +} + +//Function Number: 47 +func_2CEC(param_00) +{ + switch(param_00) + { + case "assault": + case "specialist": + return 1; + + case "support": + return 0; + } +} + +//Function Number: 48 +giveownedkillstreakitem(param_00) +{ + if(level.console) + { + var_01 = -1; + var_02 = -1; + for(var_03 = 0;var_03 < 4;var_03++) + { + if(isdefined(self.pers["killstreaks"][var_03]) && isdefined(self.pers["killstreaks"][var_03].streakname) && self.pers["killstreaks"][var_03].available && getstreakcost(self.pers["killstreaks"][var_03].streakname) > var_02) + { + var_02 = 0; + if(!self.pers["killstreaks"][var_03].isgimme) + { + var_02 = getstreakcost(self.pers["killstreaks"][var_03].streakname); + } + + var_01 = var_03; + } + } + + if(var_01 != -1) + { + self.killstreakindexweapon = var_01; + var_04 = self.pers["killstreaks"][self.killstreakindexweapon].streakname; + var_05 = func_2C01(var_04); + func_31F2(var_05); + if(!isdefined(param_00) && !level.ingraceperiod) + { + func_3202(var_04); + } + } + else + { + self.killstreakindexweapon = undefined; + } + } + else + { + var_01 = -1; + var_02 = -1; + for(var_03 = 0;var_03 < 4;var_03++) + { + if(isdefined(self.pers["killstreaks"][var_03]) && isdefined(self.pers["killstreaks"][var_03].streakname) && self.pers["killstreaks"][var_03].available) + { + var_06 = func_2C01(self.pers["killstreaks"][var_03].streakname); + var_07 = self getweaponslistitems(); + var_08 = 0; + for(var_09 = 0;var_09 < var_07.size;var_09++) + { + if(var_06 == var_07[var_09]) + { + var_08 = 1; + break; + } + } + + if(!var_08) + { + maps\mp\_utility::_giveweapon(var_06); + } + else if(issubstr(var_06,"airdrop_")) + { + self setweaponammoclip(var_06,1); + } + + maps\mp\_utility::func_31F3(var_03 + 4,"weapon",var_06); + if(getstreakcost(self.pers["killstreaks"][var_03].streakname) > var_02) + { + var_02 = 0; + if(!self.pers["killstreaks"][var_03].isgimme) + { + var_02 = getstreakcost(self.pers["killstreaks"][var_03].streakname); + } + + var_01 = var_03; + } + } + } + + if(var_01 != -1) + { + var_04 = self.pers["killstreaks"][var_01].streakname; + if(!isdefined(param_00) && !level.ingraceperiod) + { + func_3202(var_04); + } + } + + self.killstreakindexweapon = undefined; + } + + func_31DD(); +} + +//Function Number: 49 +initridekillstreak(param_00) +{ + common_scripts\utility::_disableusability(); + var_01 = func_31FF(param_00); + if(isdefined(self)) + { + common_scripts\utility::_enableusability(); + } + + return var_01; +} + +//Function Number: 50 +func_31FF(param_00) +{ + if(isdefined(param_00) && param_00 == "osprey_gunner" || param_00 == "remote_uav" || param_00 == "remote_tank") + { + var_01 = "timeout"; + } + else + { + var_01 = common_scripts\utility::waittill_any_timeout(1,"disconnect","death","weapon_switch_started"); + } + + maps\mp\gametypes\_hostmigration::func_273E(); + if(var_01 == "weapon_switch_started") + { + return "fail"; + } + + if(!isalive(self)) + { + return "fail"; + } + + if(var_01 == "disconnect" || var_01 == "death") + { + if(var_01 == "disconnect") + { + return "disconnect"; + } + + if(self.team == "spectator") + { + return "fail"; + } + + return "success"; + } + + if(maps\mp\_utility::func_27E5() || maps\mp\_utility::func_3200() || maps\mp\_utility::func_2BE7()) + { + return "fail"; + } + + self visionsetnakedforplayer("black_bw",0.75); + var_02 = common_scripts\utility::waittill_any_timeout(0.8,"disconnect","death"); + maps\mp\gametypes\_hostmigration::func_273E(); + if(var_02 != "disconnect") + { + thread func_3195(1); + if(self.team == "spectator") + { + return "fail"; + } + } + + if(self isonladder()) + { + return "fail"; + } + + if(!isalive(self)) + { + return "fail"; + } + + if(maps\mp\_utility::func_27E5() || maps\mp\_utility::func_3200() || maps\mp\_utility::func_2BE7()) + { + return "fail"; + } + + if(var_02 == "disconnect") + { + return "disconnect"; + } + + return "success"; +} + +//Function Number: 51 +func_3195(param_00) +{ + self endon("disconnect"); + if(isdefined(param_00)) + { + wait param_00; + } + + if(isdefined(level.nukedetonated)) + { + self visionsetnakedforplayer(level.nukevisionset,0); + return; + } + + self visionsetnakedforplayer("",0); +} + +//Function Number: 52 +func_3201() +{ + var_00 = self.pers["killstreaks"][self.killstreakindexweapon].streakname; + var_01 = func_2C01(var_00); + func_31F2(var_01); + func_31DD(); +} + +//Function Number: 53 +func_3202(param_00) +{ + var_01 = spawnstruct(); + var_01.name = "selected_" + param_00; + var_01.type = "killstreak_minisplash"; + var_01.optionalnumber = getstreakcost(param_00); + var_01.leadersound = param_00; + var_01.leadersoundgroup = "killstreak_earned"; + var_01.slot = 0; + self.notifytext.alpha = 0; + self.notifytext2.alpha = 0; + self.notifyicon.alpha = 0; + thread maps\mp\gametypes\_hud_message::actionnotifymessage(var_01); +} + +//Function Number: 54 +getkillstreakcount() +{ + var_00 = 0; + for(var_01 = 0;var_01 < 4;var_01++) + { + if(isdefined(self.pers["killstreaks"][var_01]) && isdefined(self.pers["killstreaks"][var_01].streakname) && self.pers["killstreaks"][var_01].available) + { + var_00++; + } + } + + return var_00; +} + +//Function Number: 55 +shufflekillstreaksup() +{ + if(getkillstreakcount() > 1) + { + for(;;) + { + self.killstreakindexweapon++; + if(self.killstreakindexweapon > 3) + { + self.killstreakindexweapon = 0; + } + + if(self.pers["killstreaks"][self.killstreakindexweapon].available == 1) + { + break; + } + } + + func_3201(); + func_3202(self.pers["killstreaks"][self.killstreakindexweapon].streakname); + } +} + +//Function Number: 56 +func_3207() +{ + if(getkillstreakcount() > 1) + { + for(;;) + { + self.killstreakindexweapon--; + if(self.killstreakindexweapon < 0) + { + self.killstreakindexweapon = 3; + } + + if(self.pers["killstreaks"][self.killstreakindexweapon].available == 1) + { + break; + } + } + + func_3201(); + func_3202(self.pers["killstreaks"][self.killstreakindexweapon].streakname); + } +} + +//Function Number: 57 +streakselectuptracker() +{ + self endon("death"); + self endon("disconnect"); + self endon("faux_spawn"); + level endon("game_ended"); + for(;;) + { + self waittill("toggled_up"); + if(!self ismantling() && !isdefined(self.changingweapon) || isdefined(self.changingweapon) && self.changingweapon == "none" && !maps\mp\_utility::func_2829(self getcurrentweapon()) || maps\mp\_utility::isjuggernautweapon(self getcurrentweapon()) && maps\mp\_utility::isjuggernaut() && self.streaktype != "specialist" && !isdefined(self.iscarrying) || isdefined(self.iscarrying) && self.iscarrying == 0 && !isdefined(self.laststreakused) || isdefined(self.laststreakused) && gettime() - self.laststreakused > 100) + { + shufflekillstreaksup(); + } + + wait 0.12; + } +} + +//Function Number: 58 +func_3209() +{ + self endon("death"); + self endon("disconnect"); + self endon("faux_spawn"); + level endon("game_ended"); + for(;;) + { + self waittill("toggled_down"); + if(!self ismantling() && !isdefined(self.changingweapon) || isdefined(self.changingweapon) && self.changingweapon == "none" && !maps\mp\_utility::func_2829(self getcurrentweapon()) || maps\mp\_utility::isjuggernautweapon(self getcurrentweapon()) && maps\mp\_utility::isjuggernaut() && self.streaktype != "specialist" && !isdefined(self.iscarrying) || isdefined(self.iscarrying) && self.iscarrying == 0 && !isdefined(self.laststreakused) || isdefined(self.laststreakused) && gettime() - self.laststreakused > 100) + { + func_3207(); + } + + wait 0.12; + } +} + +//Function Number: 59 +streakusetimetracker() +{ + self endon("death"); + self endon("disconnect"); + self endon("faux_spawn"); + level endon("game_ended"); + for(;;) + { + self waittill("streakUsed"); + self.laststreakused = gettime(); + } +} + +//Function Number: 60 +func_320A() +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + maps\mp\_utility::func_274B("prematch_done"); + if(level.console) + { + self notifyonplayercommand("toggled_up","+actionslot 1"); + self notifyonplayercommand("toggled_down","+actionslot 2"); + self notifyonplayercommand("streakUsed","+actionslot 4"); + self notifyonplayercommand("streakUsed","+actionslot 5"); + self notifyonplayercommand("streakUsed","+actionslot 6"); + self notifyonplayercommand("streakUsed","+actionslot 7"); + return; + } + + self notifyonplayercommand("streakUsed1","+actionslot 4"); + self notifyonplayercommand("streakUsed2","+actionslot 5"); + self notifyonplayercommand("streakUsed3","+actionslot 6"); + self notifyonplayercommand("streakUsed4","+actionslot 7"); +} + +//Function Number: 61 +registeradrenalineinfo(param_00,param_01) +{ + if(!isdefined(level.adrenalineinfo)) + { + level.adrenalineinfo = []; + } + + level.adrenalineinfo[param_00] = param_01; +} + +//Function Number: 62 +giveadrenaline(param_00) +{ + if(level.adrenalineinfo[param_00] == 0) + { + return; + } + + var_01 = self.adrenaline + level.adrenalineinfo[param_00]; + var_02 = var_01; + var_03 = getmaxstreakcost(); + if(var_02 > var_03 && self.streaktype != "specialist") + { + var_02 = var_02 - var_03; + } + else if(level.killstreakrewards && var_02 > var_03 && self.streaktype == "specialist") + { + var_04 = 8; + if(maps\mp\_utility::func_27AF("specialty_hardline")) + { + var_04--; + } + + if(var_02 == var_04) + { + giveallperks(); + func_2C16("all_perks_bonus",1); + thread maps\mp\gametypes\_hud_message::killstreaksplashnotify("all_perks_bonus",var_04); + self setplayerdata("killstreaksState","hasStreak",4,1); + self.pers["killstreaks"][4].available = 1; + } + + if(var_03 > 0 && !var_02 - var_03 % 2) + { + thread maps\mp\gametypes\_rank::xpeventpopup(&"MP_SPECIALIST_STREAKING_XP"); + thread maps\mp\gametypes\_rank::func_2AB3("kill"); + } + } + + func_320D(var_02); + func_31ED(); + if(var_01 == var_03 && self.streaktype != "specialist") + { + func_320D(0); + } +} + +//Function Number: 63 +giveallperks() +{ + var_00 = []; + foreach(var_02 in var_41) + { + if(!maps\mp\_utility::func_27AF(var_02)) + { + maps\mp\_utility::giveperk(var_02,0); + if(maps\mp\gametypes\_class::func_31F1(var_02)) + { + var_03 = tablelookup("mp/perktable.csv",1,var_02,8); + maps\mp\_utility::giveperk(var_03,0); + } + } + } +} + +//Function Number: 64 +resetadrenaline() +{ + self.earnedstreaklevel = 0; + func_320D(0); + resetstreakcount(); + if(isdefined(self.pers["lastEarnedStreak"])) + { + self.pers["lastEarnedStreak"] = undefined; + } +} + +//Function Number: 65 +func_320D(param_00) +{ + if(param_00 < 0) + { + param_00 = 0; + } + + if(isdefined(self.adrenaline)) + { + self.previousadrenaline = self.adrenaline; + } + else + { + self.previousadrenaline = 0; + } + + self.adrenaline = param_00; + self setclientdvar("ui_adrenaline",self.adrenaline); + func_31D8(); +} + +//Function Number: 66 +pc_watchstreakuse() +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + self.actionslotenabled = []; + self.actionslotenabled[0] = 1; + self.actionslotenabled[1] = 1; + self.actionslotenabled[2] = 1; + self.actionslotenabled[3] = 1; + for(;;) + { + var_00 = common_scripts\utility::waittill_any_return("streakUsed1","streakUsed2","streakUsed3","streakUsed4"); + if(!isdefined(var_00)) + { + continue; + } + + if(self.streaktype == "specialist" && var_00 != "streakUsed1") + { + continue; + } + + if(isdefined(self.changingweapon) && self.changingweapon == "none") + { + continue; + } + + switch(var_00) + { + case "streakUsed1": + if(self.pers["killstreaks"][0].available && self.actionslotenabled[0]) + { + self.killstreakindexweapon = 0; + } + break; + + case "streakUsed2": + if(self.pers["killstreaks"][1].available && self.actionslotenabled[1]) + { + self.killstreakindexweapon = 1; + } + break; + + case "streakUsed3": + if(self.pers["killstreaks"][2].available && self.actionslotenabled[2]) + { + self.killstreakindexweapon = 2; + } + break; + + case "streakUsed4": + if(self.pers["killstreaks"][3].available && self.actionslotenabled[3]) + { + self.killstreakindexweapon = 3; + } + break; + } + + if(isdefined(self.killstreakindexweapon) && !self.pers["killstreaks"][self.killstreakindexweapon].available) + { + self.killstreakindexweapon = undefined; + } + + if(isdefined(self.killstreakindexweapon)) + { + disablekillstreakactionslots(); + for(;;) + { + self waittill("weapon_change",var_01); + if(isdefined(self.killstreakindexweapon)) + { + var_02 = func_2C01(self.pers["killstreaks"][self.killstreakindexweapon].streakname); + if(var_01 == var_02 || var_01 == "none" || var_02 == "killstreak_uav_mp" && var_01 == "killstreak_remote_uav_mp" || var_02 == "killstreak_uav_mp" && var_01 == "uav_remote_mp") + { + continue; + } + + break; + } + + break; + } + + enablekillstreakactionslots(); + self.killstreakindexweapon = undefined; + } + } +} + +//Function Number: 67 +disablekillstreakactionslots() +{ + for(var_00 = 0;var_00 < 4;var_00++) + { + if(!isdefined(self.killstreakindexweapon)) + { + break; + } + + if(self.killstreakindexweapon == var_00) + { + continue; + } + + maps\mp\_utility::func_31F3(var_00 + 4,""); + self.actionslotenabled[var_00] = 0; + } +} + +//Function Number: 68 +enablekillstreakactionslots() +{ + for(var_00 = 0;var_00 < 4;var_00++) + { + if(self.pers["killstreaks"][var_00].available) + { + var_01 = func_2C01(self.pers["killstreaks"][var_00].streakname); + maps\mp\_utility::func_31F3(var_00 + 4,"weapon",var_01); + } + else + { + maps\mp\_utility::func_31F3(var_00 + 4,""); + } + + self.actionslotenabled[var_00] = 1; + } +} + +//Function Number: 69 +killstreakhit(param_00,param_01,param_02) +{ + if(isdefined(param_01) && isplayer(param_00) && isdefined(param_02.owner) && isdefined(param_02.owner.team)) + { + if(((level.teambased && param_02.owner.team != param_00.team) || !level.teambased) && param_00 != param_02.owner) + { + if(maps\mp\_utility::func_2829(param_01)) + { + return; + } + + if(!isdefined(param_00.lasthittime[param_01])) + { + param_00.lasthittime[param_01] = 0; + } + + if(param_00.lasthittime[param_01] == gettime()) + { + return; + } + + param_00.lasthittime[param_01] = gettime(); + param_00 thread maps\mp\gametypes\_gamelogic::func_2F59(param_01,1,"hits"); + var_03 = param_00 maps\mp\gametypes\_persistence::func_2845("totalShots"); + var_04 = param_00 maps\mp\gametypes\_persistence::func_2845("hits") + 1; + if(var_04 <= var_03) + { + param_00 maps\mp\gametypes\_persistence::func_2846("hits",var_04); + param_00 maps\mp\gametypes\_persistence::func_2846("misses",int(var_03 - var_04)); + param_00 maps\mp\gametypes\_persistence::func_2846("accuracy",int(var_04 * 10000 / var_03)); + return; + } + } + } +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/killstreaks/_mobilemortar.gsc b/MW3/Xbox/MP/maps/mp/killstreaks/_mobilemortar.gsc new file mode 100644 index 0000000..8447c6a --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/killstreaks/_mobilemortar.gsc @@ -0,0 +1,660 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\killstreaks\_mobilemortar.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 16 + * Decompile Time: 316 ms + * Timestamp: 10/27/2023 2:27:09 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + precachemodel("vehicle_bradley"); + precachemodel("vehicle_bradley_destroyed"); + precacheshader("compass_objpoint_tank_friendly"); + precacheshader("compass_objpoint_tank_enemy"); + precacheshader("compass_objpoint_mortar_target"); + precachestring(&"KILLSTREAKS_MOBILE_MORTAR"); + precachestring(&"MP_GROUND_APPROACHES_TOO_CROWDED"); + precachestring(&"MP_SELECT_MOBILE_MORTAR_LOCATION"); + level.tankfire = loadfx("props/barrelexp"); + level.tankexplode = loadfx("explosions/large_vehicle_explosion"); + level.tankflash = loadfx("muzzleflashes/ac130_105mm"); + level.tankdust1 = loadfx("smoke/ground_smoke_launch_a"); + level.tankdust2 = loadfx("smoke/ground_smoke_launch_a"); + level.ground_support_locs = []; + level.ground_support_locs["mp_alpha"][0]["origin"] = (-2748.91,2921.33,125.394); + level.ground_support_locs["mp_alpha"][0]["angles"] = (0,16,0); + level.ground_support_locs["mp_alpha"][1]["origin"] = (707.795,-499.191,-7.875); + level.ground_support_locs["mp_alpha"][1]["angles"] = (0,90,0); + level.ground_support_locs["mp_alpha"][2]["origin"] = (81.8557,2343.87,-7.875); + level.ground_support_locs["mp_alpha"][2]["angles"] = (0,-90.1,0); + level.ground_support_locs["mp_bravo"][0]["origin"] = (-761.529,1221.7,1212.13); + level.ground_support_locs["mp_bravo"][0]["angles"] = (0,-92.373,0); + level.ground_support_locs["mp_bravo"][1]["origin"] = (1474.99,971.865,1140.13); + level.ground_support_locs["mp_bravo"][1]["angles"] = (0,-178.401,0); + level.ground_support_locs["mp_bravo"][2]["origin"] = (-1366.57,-370.995,975.807); + level.ground_support_locs["mp_bravo"][2]["angles"] = (0,0.807495,0); + level.ground_support_locs["mp_dome"][0]["origin"] = (960.279,-482.564,-388.872); + level.ground_support_locs["mp_dome"][0]["angles"] = (0,100.536,0); + level.ground_support_locs["mp_dome"][1]["origin"] = (-921.941,166.449,-418.131); + level.ground_support_locs["mp_dome"][1]["angles"] = (0,25.4524,0); + level.ground_support_locs["mp_dome"][2]["origin"] = (43.3564,2102.85,-290.875); + level.ground_support_locs["mp_dome"][2]["angles"] = (0,-95.0347,0); + level.ground_support_locs["mp_plaza2"][0]["origin"] = (-1579.34,-2349.41,556.125); + level.ground_support_locs["mp_plaza2"][0]["angles"] = (0,5.32288,0); + level.ground_support_locs["mp_plaza2"][1]["origin"] = (-135.286,1622.04,607.13); + level.ground_support_locs["mp_plaza2"][1]["angles"] = (0,173.639,0); + level.ground_support_locs["mp_plaza2"][2]["origin"] = (-1544.55,1966.84,632.024); + level.ground_support_locs["mp_plaza2"][2]["angles"] = (0,0.796509,0); + level.ground_support_locs["mp_radar"][0]["origin"] = (896.685,2692.74,1208.13); + level.ground_support_locs["mp_radar"][0]["angles"] = (0,-178.313,0); + level.ground_support_locs["mp_radar"][1]["origin"] = (-2455.87,1564.41,1308.9); + level.ground_support_locs["mp_radar"][1]["angles"] = (0,1.93471,0); + level.ground_support_locs["mp_radar"][2]["origin"] = (1609,-1098.99,1162.13); + level.ground_support_locs["mp_radar"][2]["angles"] = (0,170.421,0); + level.ground_support_locs["mp_interchange"][0]["origin"] = (-2067.08,1218.17,-82.0487); + level.ground_support_locs["mp_interchange"][0]["angles"] = (0,-26.2946,0); + level.ground_support_locs["mp_interchange"][1]["origin"] = (-1198.2,-1782.62,103.665); + level.ground_support_locs["mp_interchange"][1]["angles"] = (0,23.3544,0); + level.ground_support_locs["mp_interchange"][2]["origin"] = (2391.95,899.034,87.7839); + level.ground_support_locs["mp_interchange"][2]["angles"] = (0,-136.134,0); + level.ground_support_locs["mp_lambeth"][0]["origin"] = (1641.37,-1318.01,-260.173); + level.ground_support_locs["mp_lambeth"][0]["angles"] = (0,133.329,0); + level.ground_support_locs["mp_lambeth"][1]["origin"] = (-1346.56,-880.226,-191.875); + level.ground_support_locs["mp_lambeth"][1]["angles"] = (0,0.432892,0); + level.ground_support_locs["mp_lambeth"][2]["origin"] = (1403.95,3083.4,-287.354); + level.ground_support_locs["mp_lambeth"][2]["angles"] = (0,-106.321,0); + level.ground_support_locs["mp_paris"][0]["origin"] = (-2427.42,619.217,188.826); + level.ground_support_locs["mp_paris"][0]["angles"] = (0,-2.90588,0); + level.ground_support_locs["mp_paris"][1]["origin"] = (2066.95,796.542,-88.322); + level.ground_support_locs["mp_paris"][1]["angles"] = (0,177.292,0); + level.ground_support_locs["mp_paris"][2]["origin"] = (506.406,-2165.36,-64.1201); + level.ground_support_locs["mp_paris"][2]["angles"] = (0,89.5715,0); + level.ground_support_locs["mp_hardhat"][0]["origin"] = (2033.65,-1428.62,299.86); + level.ground_support_locs["mp_hardhat"][0]["angles"] = (0,177.979,0); + level.ground_support_locs["mp_hardhat"][1]["origin"] = (-1044.73,82.9179,181.022); + level.ground_support_locs["mp_hardhat"][1]["angles"] = (0,-2.68066,0); + level.ground_support_locs["mp_hardhat"][2]["origin"] = (1248.95,1322.56,304.125); + level.ground_support_locs["mp_hardhat"][2]["angles"] = (0,-93.4772,0); + level.ground_support_locs["mp_carbon"][0]["origin"] = (-47.1408,-2841.26,3940.01); + level.ground_support_locs["mp_carbon"][0]["angles"] = (0,-101.667,0); + level.ground_support_locs["mp_carbon"][1]["origin"] = (-1686.2,-4727.09,3756.16); + level.ground_support_locs["mp_carbon"][1]["angles"] = (0,87.6436,0); + level.ground_support_locs["mp_carbon"][2]["origin"] = (-3761.18,-3716.69,3568.91); + level.ground_support_locs["mp_carbon"][2]["angles"] = (0,-4.20761,0); + level.ground_support_locs["mp_seatown"][0]["origin"] = (1339.87,763.592,175.114); + level.ground_support_locs["mp_seatown"][0]["angles"] = (0,178.551,0); + level.ground_support_locs["mp_seatown"][1]["origin"] = (1317.92,-725.589,232.125); + level.ground_support_locs["mp_seatown"][1]["angles"] = (0,177.738,0); + level.ground_support_locs["mp_seatown"][2]["origin"] = (-961.699,-1581.56,144.125); + level.ground_support_locs["mp_seatown"][2]["angles"] = (0,90.0176,0); + level.ground_support_locs["mp_bootleg"][0]["origin"] = (-988.964,1833.74,-99.9509); + level.ground_support_locs["mp_bootleg"][0]["angles"] = (0,-78.8909,0); + level.ground_support_locs["mp_bootleg"][1]["origin"] = (1105.84,-1116.13,-72.3048); + level.ground_support_locs["mp_bootleg"][1]["angles"] = (0,176.558,0); + level.ground_support_locs["mp_bootleg"][2]["origin"] = (-2027.31,84.2235,-51.875); + level.ground_support_locs["mp_bootleg"][2]["angles"] = (0,-5.12868,0); + level.ground_support_locs["mp_meteora"][0]["origin"] = (-590.972,1667.65,-99.6187); + level.ground_support_locs["mp_meteora"][0]["angles"] = (0,-89.7745,0); + level.ground_support_locs["mp_meteora"][1]["origin"] = (-1371.02,-1095.66,4.125); + level.ground_support_locs["mp_meteora"][1]["angles"] = (0,179.879,0); + level.ground_support_locs["mp_meteora"][2]["origin"] = (938.851,-1376.99,-60.0877); + level.ground_support_locs["mp_meteora"][2]["angles"] = (0,110.545,0); + level.killstreakfuncs["mobile_mortar"] = ::func_340B; +} + +//Function Number: 2 +func_340B(param_00,param_01) +{ + if(!isdefined(level.ground_support_locs[level.script])) + { + self iprintlnbold(&"MP_UNAVAILABLE_IN_LEVEL"); + return 0; + } + + if(isdefined(self.laststand) && !maps\mp\_utility::func_27AF("specialty_finalstand")) + { + self iprintlnbold(&"MP_UNAVILABLE_IN_LASTSTAND"); + return 0; + } + else if(isdefined(level.mobilemortar)) + { + self iprintlnbold(&"MP_GROUND_APPROACHES_TOO_CROWDED"); + return 0; + } + else if(maps\mp\_utility::isusingremote()) + { + return 0; + } + + var_02 = selectentrancelocation(); + if(!isdefined(var_02)) + { + return 0; + } + else + { + thread maps\mp\_utility::func_2EB1(0); + } + + var_03 = createmobilemortar(self,var_02); + if(!isdefined(var_03)) + { + return 0; + } + + var_03 thread movetoposition("entrance"); + return 1; +} + +//Function Number: 3 +selectentrancelocation() +{ + var_00 = undefined; + for(;;) + { + thread func_2EB2(); + maps\mp\_utility::_beginlocationselection("mobile_mortar","map_artillery_selector",0,500); + self endon("stop_location_selection"); + self waittill("confirm_location",var_01); + for(var_02 = 0;var_02 < 3;var_02++) + { + var_03 = level.ground_support_locs[level.script][var_02]["origin"] * (1,1,0); + var_04 = distancesquared(var_01,var_03); + if(var_04 < -5536) + { + var_00 = var_02; + break; + } + } + + if(isdefined(var_00)) + { + for(var_02 = 0;var_02 < 3;var_02++) + { + if(var_02 == var_00) + { + objective_icon(self.locationobjectives[var_02],"compass_objpoint_mortar_target"); + continue; + } + + objective_state(self.locationobjectives[var_02],"invisible"); + } + } + else + { + for(var_02 = 0;var_02 < 3;var_02++) + { + objective_icon(self.locationobjectives[var_02],"compass_objpoint_tank_enemy"); + } + } + + wait 0.5; + self notify("picked_location"); + wait 0.05; + if(isdefined(var_00)) + { + break; + } + } + + return var_00; +} + +//Function Number: 4 +func_2EB2() +{ + var_00 = maps\mp\gametypes\_hud_util::createfontstring("bigfixed",0.5); + var_00 maps\mp\gametypes\_hud_util::setpoint("CENTER","CENTER",0,-150); + var_00 settext(&"MP_SELECT_MOBILE_MORTAR_LOCATION"); + self.locationobjectives = []; + for(var_01 = 0;var_01 < 3;var_01++) + { + self.locationobjectives[var_01] = maps\mp\gametypes\_gameobjects::func_2A31(); + objective_add(self.locationobjectives[var_01],"invisible",(0,0,0)); + objective_position(self.locationobjectives[var_01],level.ground_support_locs[level.script][var_01]["origin"]); + objective_state(self.locationobjectives[var_01],"active"); + objective_team(self.locationobjectives[var_01],self.team); + objective_icon(self.locationobjectives[var_01],"compass_objpoint_tank_friendly"); + } + + common_scripts\utility::waittill_any("cancel_location","picked_location","stop_location_selection"); + var_00 maps\mp\gametypes\_hud_util::destroyelem(); + for(var_01 = 0;var_01 < 3;var_01++) + { + maps\mp\_utility::_objective_delete(self.locationobjectives[var_01]); + } +} + +//Function Number: 5 +createmobilemortar(param_00,param_01) +{ + var_02 = maps\mp\killstreaks\_airdrop::getflyheightoffset(level.ground_support_locs[level.script][param_01]["origin"]); + var_03 = bullettrace(level.ground_support_locs[level.script][param_01]["origin"] + (0,0,var_02),level.ground_support_locs[level.script][param_01]["origin"] - (0,0,var_02),0); + var_04 = var_03["position"] + anglestoforward(level.ground_support_locs[level.script][param_01]["angles"]) * -1000; + var_05 = spawn("script_model",var_04); + if(!isdefined(var_05)) + { + return undefined; + } + + var_05.angles = level.ground_support_locs[level.script][param_01]["angles"]; + var_05 setmodel("vehicle_bradley"); + var_05 setcandamage(1); + var_05.maxhealth = level.heli_maxhealth * 2; + var_05.health = var_05.maxhealth; + var_05.owner = param_00; + var_05.playersattacked = []; + var_05.lasttarget = var_05.origin; + if(level.teambased) + { + var_05.team = param_00.team; + } + + var_05.lowx = level.spawnpoints[0].origin[0]; + var_05.highx = level.spawnpoints[0].origin[0]; + var_05.lowy = level.spawnpoints[0].origin[1]; + var_05.highy = level.spawnpoints[0].origin[1]; + var_06 = 200; + if(level.spawnpoints.size > 1) + { + for(var_07 = 1;var_07 < level.spawnpoints.size;var_07++) + { + if(level.spawnpoints[var_07].origin[0] < var_05.lowx) + { + var_05.lowx = level.spawnpoints[var_07].origin[0]; + } + else if(level.spawnpoints[var_07].origin[0] > var_05.highx) + { + var_05.highx = level.spawnpoints[var_07].origin[0]; + } + + if(level.spawnpoints[var_07].origin[1] < var_05.lowy) + { + var_05.lowy = level.spawnpoints[var_07].origin[1]; + continue; + } + + if(level.spawnpoints[var_07].origin[1] > var_05.highy) + { + var_05.highy = level.spawnpoints[var_07].origin[1]; + } + } + } + else + { + var_06 = -2000; + } + + var_05.lowx = var_05.lowx + var_06; + var_05.highx = var_05.highx - var_06; + var_05.lowy = var_05.lowy + var_06; + var_05.highy = var_05.highy - var_06; + if(level.teambased) + { + var_08 = maps\mp\gametypes\_gameobjects::func_2A31(); + objective_add(var_08,"invisible",(0,0,0)); + objective_position(var_08,var_03["position"]); + objective_state(var_08,"active"); + objective_team(var_08,var_05.team); + objective_icon(var_08,"compass_objpoint_tank_friendly"); + var_05.objidfriendly = var_08; + var_08 = maps\mp\gametypes\_gameobjects::func_2A31(); + objective_add(var_08,"invisible",(0,0,0)); + objective_position(var_08,var_03["position"]); + objective_state(var_08,"active"); + objective_team(var_08,level.otherteam[var_05.team]); + objective_icon(var_08,"compass_objpoint_tank_enemy"); + var_05.objidenemy = var_08; + } + + var_05 thread watchtimeout(); + var_05 thread maps\mp\killstreaks\_helicopter::func_2447(); + var_05 thread func_28F6(); + var_05 thread func_341D(); + level.mobilemortar = var_05; + return var_05; +} + +//Function Number: 6 +movetoposition(param_00) +{ + level endon("game_ended"); + self endon("death"); + if(param_00 == "entrance") + { + var_01 = self.origin + anglestoforward(self.angles) * 1000; + } + else + { + self notify("leaving"); + var_01 = self.origin + anglestoforward(self.angles) * -1000; + } + + var_02 = 3; + self moveto(var_01,var_02,var_02 * 0.6,var_02 * 0.4); + wait var_02; + if(param_00 == "entrance") + { + thread func_3419(); + return; + } + + stopfxontag(level.tankdust1,self.fxent,"tag_origin"); + stopfxontag(level.tankdust2,self.fxent,"tag_origin"); + self.fxent delete(); + maps\mp\_utility::_objective_delete(self.objidfriendly); + maps\mp\_utility::_objective_delete(self.objidenemy); + level.mobilemortar = undefined; + self delete(); +} + +//Function Number: 7 +func_3417() +{ + var_00 = undefined; + foreach(var_02 in level.players) + { + if(var_02 == self.owner) + { + continue; + } + + if(var_02 maps\mp\_utility::func_27AF("specialty_blindeye")) + { + continue; + } + + if(level.teambased && var_02.team == self.owner.team) + { + continue; + } + + if(distancesquared(self.origin,var_02.origin) < 1000000) + { + continue; + } + + for(var_03 = 0;var_03 < self.playersattacked.size;var_03++) + { + if(var_02 == self.playersattacked[var_03]) + { + continue; + } + } + + if(distancesquared(var_02.origin,self.lasttarget) < 500000) + { + continue; + } + + if(level.teambased) + { + var_04 = 0; + for(var_03 = 0;var_03 < level.players.size;var_03++) + { + if(level.players[var_03].team != var_02.team && distancesquared(var_02.origin,level.players[var_03].origin) < 250000) + { + var_04 = 1; + break; + } + } + + if(var_04 == 1) + { + continue; + } + } + + wait 0.05; + var_05 = bullettrace(var_02.origin + (0,0,var_02 maps\mp\killstreaks\_airdrop::getflyheightoffset(var_02.origin)),var_02.origin + (0,0,100),0); + if(var_05["surfacetype"] != "none") + { + continue; + } + + var_00 = var_02.origin; + self.lasttarget = var_02.origin; + self.playersattacked[self.playersattacked.size] = var_02; + break; + } + + return var_00; +} + +//Function Number: 8 +findrandomtarget() +{ + var_00 = undefined; + for(var_01 = 0;var_01 < 20;var_01++) + { + var_02 = (randomfloatrange(self.lowx,self.highx),randomfloatrange(self.lowy,self.highy),0); + if(distancesquared(self.origin * (1,1,0),var_02) < 1000000) + { + continue; + } + + if(distancesquared(self.owner.origin * (1,1,0),var_02) < 250000) + { + continue; + } + + if(distancesquared(self.origin * (1,1,0),self.lasttarget) < 500000) + { + continue; + } + + var_03 = 0; + if(level.teambased) + { + foreach(var_05 in level.players) + { + if(var_05.team == self.owner.team && distancesquared(var_05.origin * (1,1,0),var_02) < 250000) + { + var_03 = 1; + break; + } + } + } + + if(var_03 == 0) + { + var_00 = var_02; + self.lasttarget = var_02; + break; + } + } + + if(!isdefined(var_00)) + { + var_00 = (randomfloatrange(self.lowx,self.highx),randomfloatrange(self.lowy,self.highy),0); + } + + return var_00; +} + +//Function Number: 9 +func_3419() +{ + level endon("game_ended"); + self endon("death"); + self endon("leaving"); + var_00 = 0; + self.fxent = spawn("script_model",self.origin); + self.fxent setmodel("tag_origin"); + self.fxent.angles = self.angles; + self.fxent addpitch(-90); + for(;;) + { + var_01 = func_3417(); + if(!isdefined(var_01)) + { + var_01 = findrandomtarget(); + } + + var_02 = self.origin[2] + 3500; + var_03 = bullettrace(var_01 + (0,0,var_02),var_01 - (0,0,var_02),0); + var_04 = var_01 + (0,0,var_02); + var_05 = var_01 + (0,0,var_03["position"][2]); + self playsound("bmp_fire"); + playfx(level.tankflash,self.origin + anglestoforward(self.angles) * 50); + if(var_00 < 3) + { + playfxontag(level.tankdust1,self.fxent,"tag_origin"); + playfxontag(level.tankdust2,self.fxent,"tag_origin"); + var_00++; + } + + thread func_341C(); + level thread firemortar(self,var_04,var_05); + self waittill("mortar_fire_done"); + wait 2.5; + } +} + +//Function Number: 10 +firemortar(param_00,param_01,param_02) +{ + level endon("game_ended"); + var_03 = param_00.owner; + var_04 = magicbullet("javelin_mp",param_00.origin + (0,0,150),param_01,var_03); + var_05 = maps\mp\gametypes\_gameobjects::func_2A31(); + objective_add(var_05,"invisible",(0,0,0)); + objective_position(var_05,param_02); + objective_state(var_05,"active"); + objective_team(var_05,param_00.team); + objective_icon(var_05,"compass_objpoint_mortar_target"); + var_04.objidfriendly = var_05; + var_06 = maps\mp\gametypes\_gameobjects::func_2A31(); + objective_add(var_06,"invisible",(0,0,0)); + objective_position(var_06,param_02); + objective_state(var_06,"active"); + objective_team(var_06,level.otherteam[param_00.team]); + objective_icon(var_06,"compass_objpoint_mortar_target"); + var_04.objidenemy = var_06; + var_07 = 0; + for(;;) + { + if(!isdefined(var_04) || var_07 > 115 || distancesquared(var_04.origin,param_01) < 500) + { + break; + } + else + { + wait 0.05; + } + + var_07++; + } + + if(isdefined(var_04)) + { + var_04 delete(); + } + + if(isdefined(var_03)) + { + var_08 = magicbullet("javelin_mp",param_01 + (0,0,200),param_02,var_03); + } + else + { + var_08 = magicbullet("javelin_mp",param_02 + (0,0,200),var_03); + } + + var_08.objidfriendly = var_05; + var_08.objidenemy = var_06; + var_08 thread func_341B(param_00); +} + +//Function Number: 11 +func_341B(param_00) +{ + level endon("game_ended"); + self waittill("death"); + maps\mp\_utility::_objective_delete(self.objidfriendly); + maps\mp\_utility::_objective_delete(self.objidenemy); + if(isdefined(param_00)) + { + param_00 notify("mortar_fire_done"); + } +} + +//Function Number: 12 +func_341C() +{ + level endon("game_ended"); + self endon("death"); + self endon("leaving"); + var_00 = self.origin + anglestoforward(self.angles) * -20; + var_01 = self.origin; + var_02 = self.angles; + self moveto(var_00,0.1); + self rotatepitch(-3,0.1); + wait 0.1; + self moveto(var_01,0.15); + self rotateto(var_02,0.15); + wait 0.15; +} + +//Function Number: 13 +watchtimeout() +{ + level endon("game_ended"); + self endon("death"); + maps\mp\gametypes\_hostmigration::func_2740(90); + self setcandamage(0); + thread movetoposition("exit"); +} + +//Function Number: 14 +func_341D() +{ + level endon("game_ended"); + self endon("death"); + self endon("leaving"); + for(;;) + { + radiusdamage(self.origin,200,20,20); + wait 1; + } +} + +//Function Number: 15 +func_28F6() +{ + level endon("game_ended"); + self endon("leaving"); + self waittill("death"); + playfx(level.tankfire,self.origin); + playfx(level.tankexplode,self.origin); + var_00 = spawn("script_model",self.origin); + var_00 setmodel("vehicle_bradley_destroyed"); + var_00.angles = self.angles; + stopfxontag(level.tankdust1,self.fxent,"tag_origin"); + stopfxontag(level.tankdust2,self.fxent,"tag_origin"); + maps\mp\_utility::_objective_delete(self.objidfriendly); + maps\mp\_utility::_objective_delete(self.objidenemy); + self.fxent delete(); + self delete(); + wait 3.5; + var_00 delete(); + level.mobilemortar = undefined; +} + +//Function Number: 16 +func_341E() +{ + level endon("game_ended"); + self endon("death"); + for(;;) + { + self waittill("damage",var_00,var_01,var_02,var_03,var_04); + if(self.health < 0) + { + break; + } + } +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/killstreaks/_nuke.gsc b/MW3/Xbox/MP/maps/mp/killstreaks/_nuke.gsc new file mode 100644 index 0000000..2b09ec3 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/killstreaks/_nuke.gsc @@ -0,0 +1,403 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\killstreaks\_nuke.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 20 + * Decompile Time: 351 ms + * Timestamp: 10/27/2023 2:27:10 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + precacheitem("nuke_mp"); + precachelocationselector("map_nuke_selector"); + precachestring(&"MP_TACTICAL_NUKE_CALLED"); + precachestring(&"MP_FRIENDLY_TACTICAL_NUKE"); + precachestring(&"MP_TACTICAL_NUKE"); + level.nukevisionset = "aftermath"; + level._effect["nuke_player"] = loadfx("explosions/player_death_nuke"); + level._effect["nuke_flash"] = loadfx("explosions/player_death_nuke_flash"); + level._effect["nuke_aftermath"] = loadfx("dust/nuke_aftermath_mp"); + game["strings"]["nuclear_strike"] = &"MP_TACTICAL_NUKE"; + level.killstreakfuncs["nuke"] = ::tryusenuke; + setdvarifuninitialized("scr_nukeTimer",10); + setdvarifuninitialized("scr_nukeCancelMode",0); + level.nuketimer = getdvarint("scr_nukeTimer"); + level.cancelmode = getdvarint("scr_nukeCancelMode"); + level.teamnukeemped["allies"] = 0; + level.teamnukeemped["axis"] = 0; + level.nukeemptimeout = 60; + level.nukeemptimeremaining = int(level.nukeemptimeout); + level.nukeinfo = spawnstruct(); + level.nukeinfo.var_822A = 2; + level.nukedetonated = undefined; + level thread nuke_empteamtracker(); + level thread onplayerconnect(); +} + +//Function Number: 2 +tryusenuke(param_00,param_01) +{ + if(isdefined(level.nukeincoming)) + { + self iprintlnbold(&"MP_NUKE_ALREADY_INBOUND"); + return 0; + } + + if(maps\mp\_utility::isusingremote() && !isdefined(level.gtnw) || !level.gtnw) + { + return 0; + } + + if(!isdefined(param_01)) + { + param_01 = 1; + } + + thread donuke(param_01); + self notify("used_nuke"); + maps\mp\_matchdata::logkillstreakevent("nuke",self.origin); + return 1; +} + +//Function Number: 3 +delaythread_nuke(param_00,param_01) +{ + level endon("nuke_cancelled"); + maps\mp\gametypes\_hostmigration::func_2740(param_00); + thread [[ param_01 ]](); +} + +//Function Number: 4 +donuke(param_00) +{ + level endon("nuke_cancelled"); + level.nukeinfo.player = self; + level.nukeinfo.team = self.pers["team"]; + level.nukeincoming = 1; + setdvar("ui_bomb_timer",4); + if(level.teambased) + { + thread maps\mp\_utility::teamplayercardsplash("used_nuke",self,self.team); + } + else if(!level.hardcoremode) + { + self iprintlnbold(&"MP_FRIENDLY_TACTICAL_NUKE"); + } + + level thread delaythread_nuke(level.nuketimer - 3.3,::func_30F2); + level thread delaythread_nuke(level.nuketimer,::nukesoundexplosion); + level thread delaythread_nuke(level.nuketimer,::func_30F7); + level thread delaythread_nuke(level.nuketimer,::nukeeffects); + level thread delaythread_nuke(level.nuketimer + 0.25,::nukevision); + level thread delaythread_nuke(level.nuketimer + 1.5,::func_30FA); + level thread delaythread_nuke(level.nuketimer + 1.5,::nukeearthquake); + level thread nukeaftermatheffect(); + level thread func_30FE(); + if(level.cancelmode && param_00) + { + level thread cancelnukeondeath(self); + } + + if(!isdefined(level.nuke_clockobject)) + { + level.nuke_clockobject = spawn("script_origin",(0,0,0)); + level.nuke_clockobject hide(); + } + + if(!isdefined(level.nuke_soundobject)) + { + level.nuke_soundobject = spawn("script_origin",(0,0,1)); + level.nuke_soundobject hide(); + } + + for(var_01 = level.nuketimer;var_01 > 0;var_01--) + { + level.nuke_clockobject playsound("ui_mp_nukebomb_timer"); + wait 1; + } +} + +//Function Number: 5 +cancelnukeondeath(param_00) +{ + param_00 common_scripts\utility::waittill_any("death","disconnect"); + if(isdefined(param_00) && level.cancelmode == 2) + { + param_00 thread maps\mp\killstreaks\_emp::func_30E0(0,0); + } + + setdvar("ui_bomb_timer",0); + level.nukeincoming = undefined; + level notify("nuke_cancelled"); +} + +//Function Number: 6 +func_30F2() +{ + level endon("nuke_cancelled"); + if(isdefined(level.nuke_soundobject)) + { + level.nuke_soundobject playsound("nuke_incoming"); + } +} + +//Function Number: 7 +nukesoundexplosion() +{ + level endon("nuke_cancelled"); + if(isdefined(level.nuke_soundobject)) + { + level.nuke_soundobject playsound("nuke_explosion"); + level.nuke_soundobject playsound("nuke_wave"); + } +} + +//Function Number: 8 +nukeeffects() +{ + level endon("nuke_cancelled"); + setdvar("ui_bomb_timer",0); + level.nukedetonated = 1; + foreach(var_01 in level.players) + { + var_02 = anglestoforward(var_01.angles); + var_02 = (var_02[0],var_02[1],0); + var_02 = vectornormalize(var_02); + var_03 = 5000; + var_04 = spawn("script_model",var_01.origin + var_02 * var_03); + var_04 setmodel("tag_origin"); + var_04.angles = (0,var_01.angles[1] + 180,90); + var_04 thread func_30F5(var_01); + } +} + +//Function Number: 9 +func_30F5(param_00) +{ + level endon("nuke_cancelled"); + param_00 endon("disconnect"); + common_scripts\utility::waitframe(); + playfxontagforclients(level._effect["nuke_flash"],self,"tag_origin",param_00); +} + +//Function Number: 10 +nukeaftermatheffect() +{ + level endon("nuke_cancelled"); + level waittill("spawning_intermission"); + var_00 = getentarray("mp_global_intermission","classname"); + var_00 = var_00[0]; + var_01 = anglestoup(var_00.angles); + var_02 = anglestoright(var_00.angles); + playfx(level._effect["nuke_aftermath"],var_00.origin,var_01,var_02); +} + +//Function Number: 11 +func_30F7() +{ + level endon("nuke_cancelled"); + setslowmotion(1,0.25,0.5); + level waittill("nuke_death"); + setslowmotion(0.25,1,2); +} + +//Function Number: 12 +nukevision() +{ + level endon("nuke_cancelled"); + level.nukevisioninprogress = 1; + visionsetnaked("mpnuke",3); + level waittill("nuke_death"); + visionsetnaked(level.nukevisionset,5); + visionsetpain(level.nukevisionset); +} + +//Function Number: 13 +func_30FA() +{ + level endon("nuke_cancelled"); + level notify("nuke_death"); + maps\mp\gametypes\_hostmigration::func_273E(); + ambientstop(1); + foreach(var_01 in level.players) + { + if(level.teambased) + { + if(isdefined(level.nukeinfo.team) && var_01.team == level.nukeinfo.team) + { + continue; + } + } + else if(isdefined(level.nukeinfo.player) && var_01 == level.nukeinfo.player) + { + continue; + } + + var_01.nuked = 1; + if(isalive(var_01)) + { + var_01 thread maps\mp\gametypes\_damage::finishplayerdamagewrapper(level.nukeinfo.player,level.nukeinfo.player,999999,0,"MOD_EXPLOSIVE","nuke_mp",var_01.origin,var_01.origin,"none",0,0); + } + } + + level thread func_30FC(); + level.nukeincoming = undefined; +} + +//Function Number: 14 +nukeearthquake() +{ + level endon("nuke_cancelled"); + level waittill("nuke_death"); +} + +//Function Number: 15 +func_30FC() +{ + level endon("game_ended"); + level maps\mp\killstreaks\_emp::func_30E8(level.nukeinfo.player,maps\mp\_utility::getotherteam(level.nukeinfo.team)); + level notify("nuke_EMPJam"); + level endon("nuke_EMPJam"); + if(level.teambased) + { + level.teamnukeemped[maps\mp\_utility::getotherteam(level.nukeinfo.team)] = 1; + } + else + { + level.teamnukeemped[level.nukeinfo.team] = 1; + level.teamnukeemped[maps\mp\_utility::getotherteam(level.nukeinfo.team)] = 1; + } + + level notify("nuke_emp_update"); + level thread func_80FB(); + maps\mp\gametypes\_hostmigration::func_2740(level.nukeemptimeout); + if(level.teambased) + { + level.teamnukeemped[maps\mp\_utility::getotherteam(level.nukeinfo.team)] = 0; + } + else + { + level.teamnukeemped[level.nukeinfo.team] = 0; + level.teamnukeemped[maps\mp\_utility::getotherteam(level.nukeinfo.team)] = 0; + } + + foreach(var_01 in level.players) + { + if(level.teambased && var_01.team == level.nukeinfo.team) + { + continue; + } + + var_01.nuked = undefined; + } + + level notify("nuke_emp_update"); + level notify("nuke_emp_ended"); +} + +//Function Number: 16 +func_80FB() +{ + level notify("keepNukeEMPTimeRemaining"); + level endon("keepNukeEMPTimeRemaining"); + level endon("nuke_emp_ended"); + level.nukeemptimeremaining = int(level.nukeemptimeout); + while(level.nukeemptimeremaining) + { + wait 1; + level.nukeemptimeremaining--; + } +} + +//Function Number: 17 +nuke_empteamtracker() +{ + level endon("game_ended"); + for(;;) + { + level common_scripts\utility::waittill_either("joined_team","nuke_emp_update"); + foreach(var_01 in level.players) + { + if(var_01.team == "spectator") + { + continue; + } + + if(level.teambased) + { + if(isdefined(level.nukeinfo.team) && var_01.team == level.nukeinfo.team) + { + continue; + } + } + else if(isdefined(level.nukeinfo.player) && var_01 == level.nukeinfo.player) + { + continue; + } + + if(!level.teamnukeemped[var_01.team] && !var_01 maps\mp\_utility::func_27E5()) + { + var_01 setempjammed(0); + continue; + } + + var_01 setempjammed(1); + } + } +} + +//Function Number: 18 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_00 thread onplayerspawned(); + } +} + +//Function Number: 19 +onplayerspawned() +{ + self endon("disconnect"); + for(;;) + { + self waittill("spawned_player"); + if(level.teamnukeemped[self.team]) + { + if(level.teambased) + { + self setempjammed(1); + } + else if(!isdefined(level.nukeinfo.player) || isdefined(level.nukeinfo.player) && self != level.nukeinfo.player) + { + self setempjammed(1); + } + } + + if(isdefined(level.nukedetonated)) + { + self visionsetnakedforplayer(level.nukevisionset,0); + } + } +} + +//Function Number: 20 +func_30FE() +{ + level endon("game_ended"); + level endon("disconnect"); + level endon("nuke_cancelled"); + level endon("nuke_death"); + var_00 = level.nuketimer * 1000 + gettime(); + setdvar("ui_nuke_end_milliseconds",var_00); + level waittill("host_migration_begin"); + var_01 = maps\mp\gametypes\_hostmigration::func_273E(); + if(var_01 > 0) + { + setdvar("ui_nuke_end_milliseconds",var_00 + var_01); + } +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/killstreaks/_perkstreaks.gsc b/MW3/Xbox/MP/maps/mp/killstreaks/_perkstreaks.gsc new file mode 100644 index 0000000..e525f7b --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/killstreaks/_perkstreaks.gsc @@ -0,0 +1,178 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\killstreaks\_perkstreaks.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 22 + * Decompile Time: 380 ms + * Timestamp: 10/27/2023 2:27:11 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level.killstreakfuncs["specialty_longersprint_ks"] = ::func_28E9; + level.killstreakfuncs["specialty_fastreload_ks"] = ::func_28EA; + level.killstreakfuncs["specialty_scavenger_ks"] = ::tryusescavenger; + level.killstreakfuncs["specialty_blindeye_ks"] = ::func_28E4; + level.killstreakfuncs["specialty_paint_ks"] = ::tryusepaint; + level.killstreakfuncs["specialty_hardline_ks"] = ::func_28EC; + level.killstreakfuncs["specialty_coldblooded_ks"] = ::tryusecoldblooded; + level.killstreakfuncs["specialty_quickdraw_ks"] = ::func_28EF; + level.killstreakfuncs["specialty_assists_ks"] = ::func_28E6; + level.killstreakfuncs["_specialty_blastshield_ks"] = ::tryuseblastshield; + level.killstreakfuncs["specialty_detectexplosive_ks"] = ::tryusesitrep; + level.killstreakfuncs["specialty_autospot_ks"] = ::tryuseironlungs; + level.killstreakfuncs["specialty_bulletaccuracy_ks"] = ::tryusesteadyaim; + level.killstreakfuncs["specialty_quieter_ks"] = ::tryusedeadsilence; + level.killstreakfuncs["specialty_stalker_ks"] = ::func_28E8; + level.killstreakfuncs["all_perks_bonus"] = ::func_28E3; +} + +//Function Number: 2 +func_28E3() +{ +} + +//Function Number: 3 +func_28E4(param_00) +{ + func_28F5("specialty_blindeye"); +} + +//Function Number: 4 +tryusepaint(param_00) +{ + func_28F5("specialty_paint"); +} + +//Function Number: 5 +func_28E6(param_00) +{ + func_28F5("specialty_assists"); +} + +//Function Number: 6 +tryusesteadyaim(param_00) +{ + func_28F5("specialty_bulletaccuracy"); +} + +//Function Number: 7 +func_28E8(param_00) +{ + func_28F5("specialty_stalker"); +} + +//Function Number: 8 +func_28E9(param_00) +{ + func_28F5("specialty_longersprint"); +} + +//Function Number: 9 +func_28EA(param_00) +{ + func_28F5("specialty_fastreload"); +} + +//Function Number: 10 +tryusescavenger(param_00) +{ + func_28F5("specialty_scavenger"); +} + +//Function Number: 11 +func_28EC(param_00) +{ + func_28F5("specialty_hardline"); + maps\mp\killstreaks\_killstreaks::func_28ED(); +} + +//Function Number: 12 +tryusecoldblooded(param_00) +{ + func_28F5("specialty_coldblooded"); +} + +//Function Number: 13 +func_28EF(param_00) +{ + func_28F5("specialty_quickdraw"); +} + +//Function Number: 14 +tryuseblastshield(param_00) +{ + func_28F5("_specialty_blastshield"); +} + +//Function Number: 15 +tryusesitrep(param_00) +{ + func_28F5("specialty_detectexplosive"); +} + +//Function Number: 16 +tryuseironlungs(param_00) +{ + func_28F5("specialty_autospot"); +} + +//Function Number: 17 +func_28F3(param_00) +{ + func_28F5("specialty_heartbreaker"); +} + +//Function Number: 18 +tryusedeadsilence(param_00) +{ + func_28F5("specialty_quieter"); +} + +//Function Number: 19 +func_28F5(param_00) +{ + maps\mp\_utility::giveperk(param_00,0); + thread func_28F6(param_00); + thread func_28F8(param_00); + maps\mp\_matchdata::logkillstreakevent(param_00 + "_ks",self.origin); +} + +//Function Number: 20 +func_28F6(param_00) +{ + self endon("disconnect"); + self waittill("death"); + maps\mp\_utility::func_282E(param_00); + maps\mp\_utility::_unsetextraperks(param_00); +} + +//Function Number: 21 +func_28F8(param_00) +{ + var_01 = maps\mp\gametypes\_class::func_28F9(param_00); + if(var_01 != "specialty_null") + { + maps\mp\_utility::giveperk(var_01,0); + thread func_28F6(var_01); + } +} + +//Function Number: 22 +isperkstreakon(param_00) +{ + for(var_01 = 1;var_01 < 4;var_01++) + { + if(isdefined(self.pers["killstreaks"][var_01].streakname) && self.pers["killstreaks"][var_01].streakname == param_00) + { + if(self.pers["killstreaks"][var_01].available) + { + return 1; + } + } + } + + return 0; +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/killstreaks/_remotemissile.gsc b/MW3/Xbox/MP/maps/mp/killstreaks/_remotemissile.gsc new file mode 100644 index 0000000..8165be2 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/killstreaks/_remotemissile.gsc @@ -0,0 +1,334 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\killstreaks\_remotemissile.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 12 + * Decompile Time: 217 ms + * Timestamp: 10/27/2023 2:27:12 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + var_00 = getdvar("mapname"); + if(var_00 == "mp_suburbia") + { + level.missileremotelaunchvert = 7000; + level.missileremotelaunchhorz = 10000; + level.missileremotelaunchtargetdist = 2000; + } + else if(var_00 == "mp_mainstreet") + { + level.missileremotelaunchvert = 7000; + level.missileremotelaunchhorz = 10000; + level.missileremotelaunchtargetdist = 2000; + } + else + { + level.missileremotelaunchvert = 14000; + level.missileremotelaunchhorz = 7000; + level.missileremotelaunchtargetdist = 1500; + } + + precacheitem("remotemissile_projectile_mp"); + precacheshader("ac130_overlay_grain"); + level.rockets = []; + level.killstreakfuncs["predator_missile"] = ::tryusepredatormissile; + level.missilesforsighttraces = []; + level.remotemissile_fx["explode"] = loadfx("explosions/aerial_explosion"); +} + +//Function Number: 2 +tryusepredatormissile(param_00) +{ + if(isdefined(level.civilianjetflyby)) + { + self iprintlnbold(&"MP_CIVILIAN_AIR_TRAFFIC"); + return 0; + } + + maps\mp\_utility::setusingremote("remotemissile"); + var_01 = maps\mp\killstreaks\_killstreaks::initridekillstreak(); + if(var_01 != "success") + { + if(var_01 != "disconnect") + { + maps\mp\_utility::clearusingremote(); + } + + return 0; + } + + level thread func_3071(param_00,self); + return 1; +} + +//Function Number: 3 +getbestspawnpoint(param_00) +{ + var_01 = []; + foreach(var_03 in param_00) + { + var_03.validplayers = []; + var_03.spawnscore = 0; + } + + foreach(var_06 in level.players) + { + if(!maps\mp\_utility::isreallyalive(var_06)) + { + continue; + } + + if(var_06.team == self.team) + { + continue; + } + + if(var_06.team == "spectator") + { + continue; + } + + var_07 = 999999999; + var_08 = undefined; + foreach(var_03 in param_00) + { + var_03.validplayers[var_03.validplayers.size] = var_06; + var_0A = distance2d(var_03.targetent.origin,var_06.origin); + if(var_0A <= var_07) + { + var_07 = var_0A; + var_08 = var_03; + } + } + + var_08.spawnscore = var_08.spawnscore + 2; + } + + var_0D = param_00[0]; + foreach(var_03 in param_00) + { + foreach(var_06 in var_03.validplayers) + { + var_03.spawnscore = var_03.spawnscore + 1; + if(bullettracepassed(var_06.origin + (0,0,32),var_03.origin,0,var_06)) + { + var_03.spawnscore = var_03.spawnscore + 3; + } + + if(var_03.spawnscore > var_0D.spawnscore) + { + var_0D = var_03; + continue; + } + + if(var_03.spawnscore == var_0D.spawnscore) + { + if(common_scripts\utility::cointoss()) + { + var_0D = var_03; + } + } + } + } + + return var_0D; +} + +//Function Number: 4 +drawline(param_00,param_01,param_02,param_03) +{ + var_04 = int(param_02 * 20); + for(var_05 = 0;var_05 < var_04;var_05++) + { + wait 0.05; + } +} + +//Function Number: 5 +func_3071(param_00,param_01) +{ + var_02 = getentarray("remoteMissileSpawn","targetname"); + foreach(var_04 in var_02) + { + if(isdefined(var_04.target)) + { + var_04.targetent = getent(var_04.target,"targetname"); + } + } + + if(var_02.size > 0) + { + var_06 = param_01 getbestspawnpoint(var_02); + } + else + { + var_06 = undefined; + } + + if(isdefined(var_06)) + { + var_07 = var_06.origin; + var_08 = var_06.targetent.origin; + var_09 = vectornormalize(var_07 - var_08); + var_07 = var_09 * 14000 + var_08; + var_0A = magicbullet("remotemissile_projectile_mp",var_07,var_08,param_01); + } + else + { + var_0B = (0,0,level.missileremotelaunchvert); + var_0C = level.missileremotelaunchhorz; + var_0D = level.missileremotelaunchtargetdist; + var_0E = anglestoforward(param_01.angles); + var_07 = param_01.origin + var_0B + var_0E * var_0C * -1; + var_08 = param_01.origin + var_0E * var_0D; + var_0A = magicbullet("remotemissile_projectile_mp",var_07,var_08,param_01); + } + + if(!isdefined(var_0A)) + { + param_01 maps\mp\_utility::clearusingremote(); + return; + } + + var_0A thread maps\mp\gametypes\_weapons::addmissiletosighttraces(param_01.team); + var_0A thread handledamage(); + var_0A.lifeid = param_00; + var_0A.type = "remote"; + missileeyes(param_01,var_0A); +} + +//Function Number: 6 +handledamage() +{ + self endon("death"); + self endon("deleted"); + self setcandamage(1); + self waittill("damage"); +} + +//Function Number: 7 +missileeyes(param_00,param_01) +{ + param_00 endon("joined_team"); + param_00 endon("joined_spectators"); + param_01 thread rocket_cleanupondeath(); + param_00 thread player_cleanupongameended(param_01); + param_00 thread func_3077(param_01); + param_00 visionsetmissilecamforplayer("black_bw",0); + param_00 endon("disconnect"); + if(isdefined(param_01)) + { + param_00 visionsetmissilecamforplayer(game["thermal_vision"],1); + param_00 thermalvisionon(); + param_00 thread func_3074(); + param_00 cameralinkto(param_01,"tag_origin"); + param_00 controlslinkto(param_01); + if(getdvarint("camera_thirdPerson")) + { + param_00 maps\mp\_utility::setthirdpersondof(0); + } + + param_01 waittill("death"); + param_00 thermalvisionoff(); + if(isdefined(param_01)) + { + param_00 maps\mp\_matchdata::logkillstreakevent("predator_missile",param_01.origin); + } + + param_00 controlsunlink(); + param_00 maps\mp\_utility::freezecontrolswrapper(1); + if(!level.gameended || isdefined(param_00.finalkill)) + { + param_00 thread staticeffect(0.5); + } + + wait 0.5; + param_00 thermalvisionfofoverlayoff(); + param_00 cameraunlink(); + if(getdvarint("camera_thirdPerson")) + { + param_00 maps\mp\_utility::setthirdpersondof(1); + } + } + + param_00 maps\mp\_utility::clearusingremote(); +} + +//Function Number: 8 +func_3074() +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + wait 0.15; + self thermalvisionfofoverlayon(); +} + +//Function Number: 9 +staticeffect(param_00) +{ + self endon("disconnect"); + var_01 = newclienthudelem(self); + var_01.horzalign = "fullscreen"; + var_01.vertalign = "fullscreen"; + var_01 setshader("white",640,480); + var_01.archive = 1; + var_01.sort = 10; + var_02 = newclienthudelem(self); + var_02.horzalign = "fullscreen"; + var_02.vertalign = "fullscreen"; + var_02 setshader("ac130_overlay_grain",640,480); + var_02.archive = 1; + var_02.sort = 20; + wait param_00; + var_02 destroy(); + var_01 destroy(); +} + +//Function Number: 10 +func_3077(param_00) +{ + param_00 endon("death"); + self endon("disconnect"); + common_scripts\utility::waittill_any("joined_team","joined_spectators"); + if(self.team != "spectator") + { + self thermalvisionfofoverlayoff(); + self controlsunlink(); + self cameraunlink(); + if(getdvarint("camera_thirdPerson")) + { + maps\mp\_utility::setthirdpersondof(1); + } + } + + maps\mp\_utility::clearusingremote(); + level.remotemissileinprogress = undefined; +} + +//Function Number: 11 +rocket_cleanupondeath() +{ + var_00 = self getentitynumber(); + level.rockets[var_00] = self; + self waittill("death"); + level.rockets[var_00] = undefined; +} + +//Function Number: 12 +player_cleanupongameended(param_00) +{ + param_00 endon("death"); + self endon("death"); + level waittill("game_ended"); + self thermalvisionfofoverlayoff(); + self controlsunlink(); + self cameraunlink(); + if(getdvarint("camera_thirdPerson")) + { + maps\mp\_utility::setthirdpersondof(1); + } +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/killstreaks/_remotemortar.gsc b/MW3/Xbox/MP/maps/mp/killstreaks/_remotemortar.gsc new file mode 100644 index 0000000..f295252 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/killstreaks/_remotemortar.gsc @@ -0,0 +1,796 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\killstreaks\_remotemortar.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 26 + * Decompile Time: 468 ms + * Timestamp: 10/27/2023 2:27:14 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + precachestring(&"MP_LASE_TARGET_FOR_GUIDED_MORTAR"); + precachestring(&"MP_WAIT_FOR_MORTAR_READY"); + precachestring(&"MP_MORTAR_ROUNDS_DEPLETED"); + precachestring(&"SPLASHES_DESTROYED_REMOTE_MORTAR"); + precachemodel("vehicle_predator_b"); + precacheitem("remote_mortar_missile_mp"); + precacheitem("mortar_remote_mp"); + precacheitem("mortar_remote_zoom_mp"); + precacheshader("compass_waypoint_bomb"); + precacheshader("viper_locked_box"); + precacheminimapicon("compass_objpoint_reaper_friendly"); + precacheminimapicon("compass_objpoint_reaper_enemy"); + level.remote_mortar_fx["laserTarget"] = loadfx("misc/laser_glow"); + level.remote_mortar_fx["missileExplode"] = loadfx("explosions/bouncing_betty_explosion"); + level.killstreakfuncs["remote_mortar"] = ::func_3100; + level.remote_mortar = undefined; +} + +//Function Number: 2 +func_3100(param_00) +{ + if(isdefined(level.remote_mortar)) + { + self iprintlnbold(&"MP_AIR_SPACE_TOO_CROWDED"); + return 0; + } + + if(!maps\mp\_utility::func_2DF3()) + { + return 0; + } + + maps\mp\_utility::setusingremote("remote_mortar"); + var_01 = maps\mp\killstreaks\_killstreaks::initridekillstreak("remote_mortar"); + if(var_01 != "success") + { + if(var_01 != "disconnect") + { + maps\mp\_utility::clearusingremote(); + } + + return 0; + } + else if(isdefined(level.remote_mortar)) + { + self iprintlnbold(&"MP_AIR_SPACE_TOO_CROWDED"); + maps\mp\_utility::clearusingremote(); + return 0; + } + + maps\mp\_matchdata::logkillstreakevent("remote_mortar",self.origin); + return func_3101(param_00); +} + +//Function Number: 3 +func_3101(param_00) +{ + var_01 = spawnremote(param_00,self); + if(!isdefined(var_01)) + { + return 0; + } + + level.remote_mortar = var_01; + func_3104(var_01); + thread maps\mp\_utility::teamplayercardsplash("used_remote_mortar",self); + return 1; +} + +//Function Number: 4 +spawnremote(param_00,param_01) +{ + var_02 = spawnplane(param_01,"script_model",level.uavrig gettagorigin("tag_origin"),"compass_objpoint_reaper_friendly","compass_objpoint_reaper_enemy"); + if(!isdefined(var_02)) + { + return undefined; + } + + var_02 setmodel("vehicle_predator_b"); + var_02.lifeid = param_00; + var_02.team = param_01.team; + var_02.owner = param_01; + var_02.numflares = 1; + var_02 setcandamage(1); + var_02 thread damagetracker(); + var_02.helitype = "remote_mortar"; + var_02.uavtype = "remote_mortar"; + var_02 maps\mp\killstreaks\_uav::func_309E(); + var_03 = 6300; + var_04 = randomint(360); + var_05 = 6100; + var_06 = cos(var_04) * var_05; + var_07 = sin(var_04) * var_05; + var_08 = vectornormalize((var_06,var_07,var_03)); + var_08 = var_08 * 6100; + var_02 linkto(level.uavrig,"tag_origin",var_08,(0,var_04 - 90,10)); + param_01 setclientdvar("ui_reaper_targetDistance",-1); + param_01 setclientdvar("ui_reaper_ammoCount",14); + var_02 thread func_2FBF(param_01); + var_02 thread func_310D(param_01); + var_02 thread func_310E(param_01); + var_02 thread handleownerdisconnect(param_01); + var_02 thread handleincomingstinger(); + var_02 thread func_2C53(); + return var_02; +} + +//Function Number: 5 +lookcenter(param_00) +{ + self endon("disconnect"); + level endon("game_ended"); + param_00 endon("death"); + wait 0.05; + var_01 = vectortoangles(level.uavrig.origin - param_00 gettagorigin("tag_player")); + self setplayerangles(var_01); +} + +//Function Number: 6 +func_3104(param_00) +{ + maps\mp\_utility::_giveweapon("mortar_remote_mp"); + self switchtoweapon("mortar_remote_mp"); + thread waitsetthermal(1,param_00); + thread maps\mp\_utility::reinitializethermal(param_00); + if(getdvarint("camera_thirdPerson")) + { + maps\mp\_utility::setthirdpersondof(0); + } + + self playerlinkweaponviewtodelta(param_00,"tag_player",1,40,40,25,40); + thread lookcenter(param_00); + common_scripts\utility::_disableweaponswitch(); + thread func_3105(param_00); + thread func_3106(param_00); + thread func_3108(param_00); +} + +//Function Number: 7 +waitsetthermal(param_00,param_01) +{ + self endon("disconnect"); + param_01 endon("death"); + wait param_00; + self visionsetthermalforplayer(level.ac130.enhanced_vision,0); + self.lastvisionsetthermal = level.ac130.enhanced_vision; + self thermalvisionfofoverlayon(); +} + +//Function Number: 8 +func_3105(param_00) +{ + level endon("game_ended"); + self endon("disconnect"); + param_00 endon("remote_done"); + param_00 endon("death"); + param_00.targetent = spawnfx(level.remote_mortar_fx["laserTarget"],(0,0,0)); + for(;;) + { + var_01 = self geteye(); + var_02 = anglestoforward(self getplayerangles()); + var_03 = var_01 + var_02 * 15000; + var_04 = bullettrace(var_01,var_03,0,param_00.targetent); + if(isdefined(var_04["position"])) + { + param_00.targetent.origin = var_04["position"]; + triggerfx(param_00.targetent); + } + + wait 0.05; + } +} + +//Function Number: 9 +func_3106(param_00) +{ + level endon("game_ended"); + self endon("disconnect"); + param_00 endon("remote_done"); + param_00 endon("death"); + var_01 = gettime(); + var_02 = var_01 - 2200; + var_03 = 14; + self.firingreaper = 0; + for(;;) + { + var_01 = gettime(); + if(self attackbuttonpressed() && var_01 - var_02 > 3000) + { + var_03--; + self setclientdvar("ui_reaper_ammoCount",var_03); + var_02 = var_01; + self.firingreaper = 1; + self playlocalsound("reaper_fire"); + self playrumbleonentity("damage_heavy"); + var_04 = self geteye(); + var_05 = anglestoforward(self getplayerangles()); + var_06 = anglestoright(self getplayerangles()); + var_07 = var_04 + var_05 * 100 + var_06 * -100; + var_08 = magicbullet("remote_mortar_missile_mp",var_07,param_00.targetent.origin,self); + var_08.type = "remote_mortar"; + earthquake(0.3,0.5,var_04,256); + var_08 missile_settargetent(param_00.targetent); + var_08 missile_setflightmodedirect(); + var_08 thread func_310A(param_00); + var_08 thread func_310B(param_00); + var_08 waittill("death"); + self setclientdvar("ui_reaper_targetDistance",-1); + self.firingreaper = 0; + if(var_03 == 0) + { + break; + } + + continue; + } + + wait 0.05; + } + + self notify("removed_reaper_ammo"); + func_310C(param_00); + param_00 thread func_3111(); +} + +//Function Number: 10 +func_80FC(param_00) +{ + level endon("game_ended"); + self endon("disconnect"); + param_00 endon("remote_done"); + param_00 endon("death"); + self notifyonplayercommand("remote_mortar_toggleZoom1","+ads_akimbo_accessible"); + if(!level.console) + { + self notifyonplayercommand("remote_mortar_toggleZoom1","+toggleads_throw"); + } + + for(;;) + { + var_01 = common_scripts\utility::waittill_any_return("remote_mortar_toggleZoom1"); + if(!isdefined(self.remote_mortar_togglezoom)) + { + self.remote_mortar_togglezoom = 0; + } + + self.remote_mortar_togglezoom = 1 - self.remote_mortar_togglezoom; + } +} + +//Function Number: 11 +func_3108(param_00) +{ + level endon("game_ended"); + self endon("disconnect"); + param_00 endon("remote_done"); + param_00 endon("death"); + self.remote_mortar_togglezoom = undefined; + thread func_80FC(param_00); + param_00.var_3109 = 0; + var_01 = 0; + for(;;) + { + if(self adsbuttonpressed()) + { + wait 0.05; + if(isdefined(self.remote_mortar_togglezoom)) + { + var_01 = 1; + } + + break; + } + + wait 0.05; + } + + for(;;) + { + if((!var_01 && self adsbuttonpressed()) || var_01 && self.remote_mortar_togglezoom) + { + if(param_00.var_3109 == 0) + { + maps\mp\_utility::_giveweapon("mortar_remote_zoom_mp"); + self switchtoweapon("mortar_remote_zoom_mp"); + param_00.var_3109 = 1; + } + } + else if((!var_01 && !self adsbuttonpressed()) || var_01 && !self.remote_mortar_togglezoom) + { + if(param_00.var_3109 == 1) + { + maps\mp\_utility::_giveweapon("mortar_remote_mp"); + self switchtoweapon("mortar_remote_mp"); + param_00.var_3109 = 0; + } + } + + wait 0.05; + } +} + +//Function Number: 12 +func_310A(param_00) +{ + level endon("game_ended"); + param_00 endon("death"); + param_00 endon("remote_done"); + self endon("death"); + for(;;) + { + var_01 = distance(self.origin,param_00.targetent.origin); + param_00.owner setclientdvar("ui_reaper_targetDistance",int(var_01 / 12)); + wait 0.05; + } +} + +//Function Number: 13 +func_310B(param_00) +{ + self endon("death"); + maps\mp\gametypes\_hostmigration::func_2740(6); + playfx(level.remote_mortar_fx["missileExplode"],self.origin); + self delete(); +} + +//Function Number: 14 +func_310C(param_00) +{ + if(!maps\mp\_utility::isusingremote()) + { + return; + } + + if(isdefined(param_00)) + { + param_00 notify("helicopter_done"); + } + + self thermalvisionoff(); + self thermalvisionfofoverlayoff(); + self visionsetthermalforplayer(game["thermal_vision"],0); + if(isdefined(level.nukedetonated)) + { + self visionsetnakedforplayer(level.nukevisionset,0); + } + else + { + self visionsetnakedforplayer("",0); + } + + self unlink(); + maps\mp\_utility::clearusingremote(); + if(getdvarint("camera_thirdPerson")) + { + maps\mp\_utility::setthirdpersondof(1); + } + + self switchtoweapon(common_scripts\utility::getlastweapon()); + var_01 = maps\mp\killstreaks\_killstreaks::func_2C01("remote_mortar"); + self takeweapon(var_01); + self takeweapon("mortar_remote_zoom_mp"); + self takeweapon("mortar_remote_mp"); + common_scripts\utility::_enableweaponswitch(); +} + +//Function Number: 15 +func_310D(param_00) +{ + level endon("game_ended"); + param_00 endon("disconnect"); + param_00 endon("removed_reaper_ammo"); + self endon("death"); + var_01 = 40; + maps\mp\gametypes\_hostmigration::func_2740(var_01); + while(param_00.firingreaper) + { + wait 0.05; + } + + if(isdefined(param_00)) + { + param_00 func_310C(self); + } + + thread func_3111(); +} + +//Function Number: 16 +func_2FBF(param_00) +{ + level endon("game_ended"); + param_00 endon("disconnect"); + self endon("remote_removed"); + self endon("remote_done"); + self waittill("death"); + if(isdefined(param_00)) + { + param_00 func_310C(self); + } + + level thread removeremote(self,1); +} + +//Function Number: 17 +func_310E(param_00) +{ + level endon("game_ended"); + self endon("remote_done"); + self endon("death"); + param_00 endon("disconnect"); + param_00 endon("removed_reaper_ammo"); + param_00 common_scripts\utility::waittill_any("joined_team","joined_spectators"); + if(isdefined(param_00)) + { + param_00 func_310C(self); + } + + thread func_3111(); +} + +//Function Number: 18 +handleownerdisconnect(param_00) +{ + level endon("game_ended"); + self endon("remote_done"); + self endon("death"); + param_00 endon("removed_reaper_ammo"); + param_00 waittill("disconnect"); + thread func_3111(); +} + +//Function Number: 19 +removeremote(param_00,param_01) +{ + self notify("remote_removed"); + if(isdefined(param_00.targetent)) + { + param_00.targetent delete(); + } + + if(isdefined(param_00)) + { + param_00 delete(); + param_00 maps\mp\killstreaks\_uav::func_309F(); + } + + if(!isdefined(param_01) || param_01 == 1) + { + level.remote_mortar = undefined; + } +} + +//Function Number: 20 +func_3111() +{ + level.remote_mortar = undefined; + level endon("game_ended"); + self endon("death"); + self notify("remote_done"); + self unlink(); + var_00 = self.origin + anglestoforward(self.angles) * 20000; + self moveto(var_00,30); + playfxontag(level._effect["ac130_engineeffect"],self,"tag_origin"); + maps\mp\gametypes\_hostmigration::func_2740(3); + self moveto(var_00,4,4,0); + maps\mp\gametypes\_hostmigration::func_2740(4); + level thread removeremote(self,0); +} + +//Function Number: 21 +remoteexplode() +{ + self notify("death"); + self hide(); + var_00 = anglestoright(self.angles) * 200; + playfx(level.uav_fx["explode"],self.origin,var_00); +} + +//Function Number: 22 +damagetracker() +{ + level endon("game_ended"); + self.owner endon("disconnect"); + self.health = 999999; + self.maxhealth = 1500; + self.damagetaken = 0; + for(;;) + { + self waittill("damage",var_00,var_01,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09); + if(!maps\mp\gametypes\_weapons::func_27A1(self.owner,var_01)) + { + continue; + } + + if(!isdefined(self)) + { + return; + } + + if(isdefined(var_08) && var_08 & level.idflags_penetration) + { + self.wasdamagedfrombulletpenetration = 1; + } + + self.wasdamaged = 1; + var_0A = var_00; + if(isplayer(var_01)) + { + var_01 maps\mp\gametypes\_damagefeedback::updatedamagefeedback(""); + if(var_04 == "MOD_RIFLE_BULLET" || var_04 == "MOD_PISTOL_BULLET") + { + if(var_01 maps\mp\_utility::func_27AF("specialty_armorpiercing")) + { + var_0A = var_0A + var_00 * level.armorpiercingmod; + } + } + } + + if(isdefined(var_09)) + { + switch(var_09) + { + case "javelin_mp": + case "stinger_mp": + self.largeprojectiledamage = 1; + var_0A = self.maxhealth + 1; + break; + + case "sam_projectile_mp": + self.largeprojectiledamage = 1; + break; + } + + maps\mp\killstreaks\_killstreaks::killstreakhit(var_01,var_09,self); + } + + self.damagetaken = self.damagetaken + var_0A; + if(isdefined(self.owner)) + { + self.owner playlocalsound("reaper_damaged"); + } + + if(self.damagetaken >= self.maxhealth) + { + if(isplayer(var_01) && !isdefined(self.owner) || var_01 != self.owner) + { + var_01 notify("destroyed_killstreak",var_09); + thread maps\mp\_utility::teamplayercardsplash("callout_destroyed_remote_mortar",var_01); + var_01 thread maps\mp\gametypes\_rank::func_2AB3("kill",50,var_09,var_04); + var_01 thread maps\mp\gametypes\_rank::xpeventpopup(&"SPLASHES_DESTROYED_REMOTE_MORTAR"); + thread maps\mp\gametypes\_missions::vehiclekilled(self.owner,self,undefined,var_01,var_00,var_04,var_09); + } + + if(isdefined(self.owner)) + { + self.owner stoplocalsound("missile_incoming"); + } + + thread remoteexplode(); + level.remote_mortar = undefined; + return; + } + } +} + +//Function Number: 23 +handleincomingstinger() +{ + level endon("game_ended"); + self endon("death"); + self endon("remote_done"); + for(;;) + { + level waittill("stinger_fired",var_00,var_01,var_02); + if(!isdefined(var_02) || var_02 != self) + { + continue; + } + + var_01 thread stingerproximitydetonate(var_02,var_00); + } +} + +//Function Number: 24 +stingerproximitydetonate(param_00,param_01) +{ + self endon("death"); + param_00 endon("death"); + if(isdefined(param_00.owner)) + { + param_00.owner playlocalsound("missile_incoming"); + } + + self missile_settargetent(param_00); + var_02 = distance(self.origin,param_00 getpointinbounds(0,0,0)); + var_03 = param_00 getpointinbounds(0,0,0); + for(;;) + { + if(!isdefined(param_00)) + { + var_04 = var_03; + } + else + { + var_04 = param_00 getpointinbounds(0,0,0); + } + + var_03 = var_04; + var_05 = distance(self.origin,var_04); + if(var_05 < 3000 && param_00.numflares > 0) + { + param_00.numflares--; + param_00 thread maps\mp\killstreaks\_helicopter::func_2C4D(); + var_06 = param_00 maps\mp\killstreaks\_helicopter::deployflares(); + self missile_settargetent(var_06); + param_00 = var_06; + if(isdefined(param_00.owner)) + { + param_00.owner stoplocalsound("missile_incoming"); + } + + return; + } + + if(var_06 < var_03) + { + var_03 = var_06; + } + + if(var_06 > var_03) + { + if(var_06 > 1536) + { + return; + } + + if(isdefined(param_01.owner)) + { + param_01.owner stoplocalsound("missile_incoming"); + if(level.teambased) + { + if(param_01.team != var_02.team) + { + radiusdamage(self.origin,1000,1000,1000,var_02,"MOD_EXPLOSIVE","stinger_mp"); + } + } + else + { + radiusdamage(self.origin,1000,1000,1000,var_02,"MOD_EXPLOSIVE","stinger_mp"); + } + } + + self hide(); + wait 0.05; + self delete(); + } + + wait 0.05; + } +} + +//Function Number: 25 +func_2C53() +{ + level endon("game_ended"); + self endon("death"); + self endon("remote_done"); + for(;;) + { + level waittill("sam_fired",var_00,var_01,var_02); + if(!isdefined(var_02) || var_02 != self) + { + continue; + } + + level thread func_3066(var_02,var_00,var_01); + } +} + +//Function Number: 26 +func_3066(param_00,param_01,param_02) +{ + param_00 endon("death"); + if(isdefined(param_00.owner)) + { + param_00.owner playlocalsound("missile_incoming"); + } + + var_03 = 150; + var_04 = 1000; + var_05 = []; + for(var_06 = 0;var_06 < param_02.size;var_06++) + { + if(isdefined(param_02[var_06])) + { + var_05[var_06] = distance(param_02[var_06].origin,param_00 getpointinbounds(0,0,0)); + continue; + } + + var_05[var_06] = undefined; + } + + for(;;) + { + var_07 = param_00 getpointinbounds(0,0,0); + var_08 = []; + var_06 = 0; + while(var_06 < param_02.size) + { + if(isdefined(param_02[var_06])) + { + } + + var_07++ = var_41[var_06]; + } + + var_07 = 0; + while(var_07 < var_41.size) + { + if(isdefined(var_41[var_07])) + { + if(var_41[var_07] < 3000 && param_01.numflares > 0) + { + param_01.numflares-- = distance(param_02[var_06].origin,var_07); + param_01 thread maps\mp\killstreaks\_helicopter::func_2C4D(); + var_09 = param_01 maps\mp\killstreaks\_helicopter::deployflares(); + for(var_0A = 0;var_0A < var_03.size;var_0A++) + { + if(isdefined(var_03[var_0A])) + { + var_03[var_0A] missile_settargetent(var_09); + } + } + + if(isdefined(param_01.owner)) + { + param_01.owner stoplocalsound("missile_incoming"); + } + + return; + } + + if(var_0A[var_41] < var_08[var_41]) + { + var_08[var_41] = var_0A[var_41]; + } + + if(var_0A[var_41] > var_08[var_41]) + { + if(var_0A[var_41] > 1536) + { + continue; + } + + if(isdefined(var_03.owner)) + { + var_03.owner stoplocalsound("missile_incoming"); + if(level.teambased) + { + if(var_03.team != var_04.team) + { + radiusdamage(var_05[var_41].origin,var_07,var_06,var_06,var_04,"MOD_EXPLOSIVE","sam_projectile_mp"); + } + } + else + { + radiusdamage(var_05[var_41].origin,var_07,var_06,var_06,var_04,"MOD_EXPLOSIVE","sam_projectile_mp"); + } + } + + var_05[var_41] hide(); + wait 0.05; + var_05[var_41] delete(); + } + } + + var_41++; + } + + wait 0.05; + } +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/killstreaks/_remotetank.gsc b/MW3/Xbox/MP/maps/mp/killstreaks/_remotetank.gsc new file mode 100644 index 0000000..f2a467a --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/killstreaks/_remotetank.gsc @@ -0,0 +1,1108 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\killstreaks\_remotetank.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 43 + * Decompile Time: 730 ms + * Timestamp: 10/27/2023 2:27:17 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level.killstreakfuncs["remote_tank"] = ::func_31A5; + level.tanksettings = []; + level.tanksettings["remote_tank"] = spawnstruct(); + level.tanksettings["remote_tank"].timeout = 60; + level.tanksettings["remote_tank"].health = 99999; + level.tanksettings["remote_tank"].maxhealth = 1000; + level.tanksettings["remote_tank"].streakname = "remote_tank"; + level.tanksettings["remote_tank"].mgturretinfo = "ugv_turret_mp"; + level.tanksettings["remote_tank"].missileinfo = "remote_tank_projectile_mp"; + level.tanksettings["remote_tank"].sentrymodeoff = "sentry_offline"; + level.tanksettings["remote_tank"].vehicleinfo = "remote_ugv_mp"; + level.tanksettings["remote_tank"].modelbase = "vehicle_ugv_talon_mp"; + level.tanksettings["remote_tank"].modelmgturret = "vehicle_ugv_talon_gun_mp"; + level.tanksettings["remote_tank"].modelplacement = "vehicle_ugv_talon_obj"; + level.tanksettings["remote_tank"].modelplacementfailed = "vehicle_ugv_talon_obj_red"; + level.tanksettings["remote_tank"].modeldestroyed = "vehicle_ugv_talon_mp"; + level.tanksettings["remote_tank"].stringplace = &"MP_REMOTE_TANK_PLACE"; + level.tanksettings["remote_tank"].stringcannotplace = &"MP_REMOTE_TANK_CANNOT_PLACE"; + level.tanksettings["remote_tank"].laptopinfo = "killstreak_remote_tank_laptop_mp"; + level.tanksettings["remote_tank"].remoteinfo = "killstreak_remote_tank_remote_mp"; + makedvarserverinfo("ui_remoteTankUseTime",level.tanksettings["remote_tank"].timeout); + precachemenu("remotetank_timer"); + foreach(var_01 in level.tanksettings) + { + precachemodel(var_01.modelbase); + precachemodel(var_01.modelmgturret); + precachemodel(var_01.modelplacement); + precachemodel(var_01.modelplacementfailed); + precachemodel(var_01.modeldestroyed); + precacheturret(var_01.mgturretinfo); + precachevehicle(var_01.vehicleinfo); + precachestring(var_01.stringplace); + precachestring(var_01.stringcannotplace); + precacheitem(var_01.laptopinfo); + precacheitem(var_01.remoteinfo); + precacheitem(var_01.missileinfo); + } + + level._effect["remote_tank_dying"] = loadfx("explosions/killstreak_explosion_quick"); + level._effect["remote_tank_explode"] = loadfx("explosions/bouncing_betty_explosion"); + level._effect["remote_tank_spark"] = loadfx("impacts/large_metal_painted_hit"); + level._effect["remote_tank_antenna_light_mp"] = loadfx("misc/aircraft_light_red_blink"); + level._effect["remote_tank_camera_light_mp"] = loadfx("misc/aircraft_light_wingtip_green"); + level.remote_tank_armor_bulletdamage = 0.5; +} + +//Function Number: 2 +func_31A5(param_00) +{ + var_01 = 1; + if(!maps\mp\_utility::func_2DF3()) + { + return 0; + } + else if(maps\mp\_utility::func_2BEC() >= maps\mp\_utility::maxvehiclesallowed() || level.fauxvehiclecount + var_01 >= maps\mp\_utility::maxvehiclesallowed()) + { + self iprintlnbold(&"MP_TOO_MANY_VEHICLES"); + return 0; + } + + maps\mp\_utility::func_80C7(); + var_02 = func_31A6(param_00,"remote_tank"); + if(var_02) + { + maps\mp\_matchdata::logkillstreakevent("remote_tank",self.origin); + thread maps\mp\_utility::teamplayercardsplash("used_remote_tank",self); + takekillstreakweapons("remote_tank"); + } + else + { + maps\mp\_utility::func_80C8(); + } + + self.iscarrying = 0; + return var_02; +} + +//Function Number: 3 +takekillstreakweapons(param_00) +{ + var_01 = maps\mp\killstreaks\_killstreaks::func_2C01(level.tanksettings[param_00].streakname); + maps\mp\killstreaks\_killstreaks::takekillstreakweaponifnodupe(var_01); + self takeweapon(level.tanksettings[param_00].laptopinfo); + self takeweapon(level.tanksettings[param_00].remoteinfo); +} + +//Function Number: 4 +func_2DF8() +{ + if(maps\mp\_utility::func_27AF("specialty_explosivebullets")) + { + self.restoreperk = "specialty_explosivebullets"; + maps\mp\_utility::func_282E("specialty_explosivebullets"); + } +} + +//Function Number: 5 +func_2DFB() +{ + if(isdefined(self.restoreperk)) + { + maps\mp\_utility::giveperk(self.restoreperk,0); + self.restoreperk = undefined; + } +} + +//Function Number: 6 +waitrestoreperks() +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + wait 0.05; + func_2DFB(); +} + +//Function Number: 7 +func_2DF6() +{ + var_00 = self getweaponslistprimaries(); + foreach(var_02 in var_00) + { + var_03 = strtok(var_02,"_"); + if(var_03[0] == "alt") + { + self.restoreweaponclipammo[var_02] = self getweaponammoclip(var_02); + self.restoreweaponstockammo[var_02] = self getweaponammostock(var_02); + continue; + } + + self.restoreweaponclipammo[var_02] = self getweaponammoclip(var_02); + self.restoreweaponstockammo[var_02] = self getweaponammostock(var_02); + } + + self.weaponstorestore = []; + foreach(var_02 in var_00) + { + var_03 = strtok(var_02,"_"); + self.weaponstorestore[self.weaponstorestore.size] = var_02; + if(var_03[0] == "alt") + { + continue; + } + + self takeweapon(var_02); + } +} + +//Function Number: 8 +func_2DFA() +{ + if(!isdefined(self.restoreweaponclipammo) || !isdefined(self.restoreweaponstockammo) || !isdefined(self.weaponstorestore)) + { + return; + } + + var_00 = []; + foreach(var_02 in self.weaponstorestore) + { + var_03 = strtok(var_02,"_"); + if(var_03[0] == "alt") + { + var_00[var_00.size] = var_02; + continue; + } + + maps\mp\_utility::_giveweapon(var_02); + if(isdefined(self.restoreweaponclipammo[var_02])) + { + self setweaponammoclip(var_02,self.restoreweaponclipammo[var_02]); + } + + if(isdefined(self.restoreweaponstockammo[var_02])) + { + self setweaponammostock(var_02,self.restoreweaponstockammo[var_02]); + } + } + + foreach(var_06 in var_00) + { + if(isdefined(self.restoreweaponclipammo[var_06])) + { + self setweaponammoclip(var_06,self.restoreweaponclipammo[var_06]); + } + + if(isdefined(self.restoreweaponstockammo[var_06])) + { + self setweaponammostock(var_06,self.restoreweaponstockammo[var_06]); + } + } + + self.restoreweaponclipammo = undefined; + self.restoreweaponstockammo = undefined; +} + +//Function Number: 9 +waitrestoreweapons() +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + wait 0.05; + func_2DFA(); +} + +//Function Number: 10 +func_31A6(param_00,param_01) +{ + var_02 = func_31A7(param_01,self); + var_02.lifeid = param_00; + func_2DF8(); + func_2DF6(); + var_03 = func_31A9(var_02,1); + thread func_2DFB(); + thread func_2DFA(); + if(!isdefined(var_03)) + { + var_03 = 0; + } + + return var_03; +} + +//Function Number: 11 +func_31A7(param_00,param_01) +{ + var_02 = spawnturret("misc_turret",param_01.origin + (0,0,25),level.tanksettings[param_00].mgturretinfo); + var_02.angles = param_01.angles; + var_02.tanktype = param_00; + var_02.owner = param_01; + var_02 setmodel(level.tanksettings[param_00].modelbase); + var_02 maketurretinoperable(); + var_02 setturretmodechangewait(1); + var_02 setmode("sentry_offline"); + var_02 makeunusable(); + var_02 setsentryowner(param_01); + return var_02; +} + +//Function Number: 12 +func_31A9(param_00,param_01) +{ + self endon("death"); + self endon("disconnect"); + param_00 thread tank_setcarried(self); + common_scripts\utility::_disableweapon(); + self notifyonplayercommand("place_tank","+attack"); + self notifyonplayercommand("place_tank","+attack_akimbo_accessible"); + self notifyonplayercommand("cancel_tank","+actionslot 4"); + if(!level.console) + { + self notifyonplayercommand("cancel_tank","+actionslot 5"); + self notifyonplayercommand("cancel_tank","+actionslot 6"); + self notifyonplayercommand("cancel_tank","+actionslot 7"); + } + + for(;;) + { + var_02 = common_scripts\utility::waittill_any_return("place_tank","cancel_tank","force_cancel_placement"); + if(var_02 == "cancel_tank" || var_02 == "force_cancel_placement") + { + if(!param_01 && var_02 == "cancel_tank") + { + continue; + } + + if(level.console) + { + var_03 = maps\mp\killstreaks\_killstreaks::func_2C01(level.tanksettings[param_00.tanktype].streakname); + if(isdefined(self.killstreakindexweapon) && var_03 == maps\mp\killstreaks\_killstreaks::func_2C01(self.pers["killstreaks"][self.killstreakindexweapon].streakname) && !self getweaponslistitems().size) + { + maps\mp\_utility::_giveweapon(var_03,0); + maps\mp\_utility::func_31F3(4,"weapon",var_03); + } + } + + param_00 tank_setcancelled(); + common_scripts\utility::_enableweapon(); + return 0; + } + + if(!param_00.canbeplaced) + { + continue; + } + + param_00 thread func_31B0(); + common_scripts\utility::_enableweapon(); + return 1; + } +} + +//Function Number: 13 +tank_setcarried(param_00) +{ + self setmodel(level.tanksettings[self.tanktype].modelplacement); + self setsentrycarrier(param_00); + self setcontents(0); + self setcandamage(0); + self.carriedby = param_00; + param_00.iscarrying = 1; + param_00 thread func_31AB(self); + thread tank_oncarrierdeath(param_00); + thread tank_oncarrierdisconnect(param_00); + thread tank_ongameended(); + self notify("carried"); +} + +//Function Number: 14 +func_31AB(param_00) +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + param_00 endon("placed"); + param_00 endon("death"); + param_00.canbeplaced = 1; + var_01 = -1; + for(;;) + { + var_02 = self canplayerplacetank(25,25,50,40,80,0.7); + param_00.origin = var_02["origin"]; + param_00.angles = var_02["angles"]; + param_00.canbeplaced = self isonground() && var_02["result"] && abs(var_02["origin"][2] - self.origin[2]) < 20; + if(param_00.canbeplaced != var_01) + { + if(param_00.canbeplaced) + { + param_00 setmodel(level.tanksettings[param_00.tanktype].modelplacement); + if(self.team != "spectator") + { + self forceusehinton(level.tanksettings[param_00.tanktype].stringplace); + } + } + else + { + param_00 setmodel(level.tanksettings[param_00.tanktype].modelplacementfailed); + if(self.team != "spectator") + { + self forceusehinton(level.tanksettings[param_00.tanktype].stringcannotplace); + } + } + } + + var_01 = param_00.canbeplaced; + wait 0.05; + } +} + +//Function Number: 15 +tank_oncarrierdeath(param_00) +{ + self endon("placed"); + self endon("death"); + param_00 waittill("death"); + tank_setcancelled(); +} + +//Function Number: 16 +tank_oncarrierdisconnect(param_00) +{ + self endon("placed"); + self endon("death"); + param_00 waittill("disconnect"); + tank_setcancelled(); +} + +//Function Number: 17 +tank_ongameended(param_00) +{ + self endon("placed"); + self endon("death"); + level waittill("game_ended"); + tank_setcancelled(); +} + +//Function Number: 18 +tank_setcancelled() +{ + if(isdefined(self.carriedby)) + { + self.carriedby forceusehintoff(); + } + + if(isdefined(self.owner)) + { + self.owner.iscarrying = 0; + } + + self delete(); +} + +//Function Number: 19 +func_31B0() +{ + self endon("death"); + level endon("game_ended"); + self notify("placed"); + self.carriedby forceusehintoff(); + self.carriedby = undefined; + if(!isdefined(self.owner)) + { + return 0; + } + + var_00 = self.owner; + var_00.iscarrying = 0; + var_01 = func_31B2(self); + if(!isdefined(var_01)) + { + return 0; + } + + var_01 playsound("sentry_gun_plant"); + var_01 notify("placed"); + var_01 thread func_31B4(); + self delete(); +} + +//Function Number: 20 +func_31B1() +{ + self endon("death"); + level endon("game_ended"); + if(!isdefined(self.owner)) + { + return; + } + + var_00 = self.owner; + var_00 endon("death"); + self waittill("placed"); + var_00 takekillstreakweapons(self.tanktype); + var_00 maps\mp\_utility::_giveweapon(level.tanksettings[self.tanktype].laptopinfo); + var_00 switchtoweaponimmediate(level.tanksettings[self.tanktype].laptopinfo); +} + +//Function Number: 21 +func_31B2(param_00) +{ + var_01 = param_00.owner; + var_02 = param_00.tanktype; + var_03 = param_00.lifeid; + var_04 = spawnvehicle(level.tanksettings[var_02].modelbase,var_02,level.tanksettings[var_02].vehicleinfo,param_00.origin,param_00.angles,var_01); + if(!isdefined(var_04)) + { + return undefined; + } + + var_05 = var_04 gettagorigin("tag_turret_attach"); + var_06 = spawnturret("misc_turret",var_05,level.tanksettings[var_02].mgturretinfo,0); + var_06 linkto(var_04,"tag_turret_attach",(0,0,0),(0,0,0)); + var_06 setmodel(level.tanksettings[var_02].modelmgturret); + var_06.health = level.tanksettings[var_02].health; + var_06.owner = var_01; + var_06.angles = var_01.angles; + var_06.specialdamagecallback = ::callback_vehicledamage; + var_06.tank = var_04; + var_06 makeunusable(); + var_06 setdefaultdroppitch(0); + var_06 setcandamage(0); + var_04.specialdamagecallback = ::callback_vehicledamage; + var_04.lifeid = var_03; + var_04.team = var_01.team; + var_04.owner = var_01; + var_04.mgturret = var_06; + var_04.health = level.tanksettings[var_02].health; + var_04.maxhealth = level.tanksettings[var_02].maxhealth; + var_04.damagetaken = 0; + var_04.destroyed = 0; + var_04 setcandamage(0); + var_04.tanktype = var_02; + var_06 setturretmodechangewait(1); + var_04 func_31B8(); + var_06 setsentryowner(var_01); + var_01.using_remote_tank = 0; + var_01 setplayerdata("ugvMissile",1); + var_01 setplayerdata("ugvDamageFade",1); + var_01 setplayerdata("ugvDamaged",0); + var_01 setplayerdata("ugvDamageState",0); + var_01 setplayerdata("ugvBullets",0); + var_01 setplayerdata("ugvMaxBullets",0); + var_04.empgrenaded = 0; + var_04.damagefade = 1; + var_04 thread tank_incrementdamagefade(); + var_04 thread func_31BF(); + var_04 thread func_31B1(); + return var_04; +} + +//Function Number: 22 +func_31B4() +{ + self endon("death"); + self.owner endon("disconnect"); + level endon("game_ended"); + self makeunusable(); + self.mgturret maketurretsolid(); + self makevehiclesolidcapsule(23,23,23); + if(!isdefined(self.owner)) + { + return; + } + + var_00 = self.owner; + var_01 = (0,0,20); + if(level.teambased) + { + self.team = var_00.team; + self.mgturret.team = var_00.team; + self.mgturret setturretteam(var_00.team); + foreach(var_03 in level.players) + { + if(var_03 != var_00 && var_03.team == var_00.team) + { + var_04 = self.mgturret maps\mp\_entityheadicons::func_277C(var_03,maps\mp\gametypes\_teams::func_2770(self.team),var_01,10,10,0,0.05,0,1,0,1); + if(isdefined(var_04)) + { + var_04 settargetent(self); + } + } + } + } + + thread func_31BA(); + thread func_31BB(); + thread tank_handledeath(); + thread tank_handletimeout(); + thread func_31B6(); + thread func_31B7(); + func_31B5(); + var_00 openmenu("remotetank_timer"); +} + +//Function Number: 23 +func_31B5() +{ + var_00 = self.owner; + var_00 maps\mp\_utility::setusingremote(self.tanktype); + if(getdvarint("camera_thirdPerson")) + { + var_00 maps\mp\_utility::setthirdpersondof(0); + } + + var_00.restoreangles = var_00.angles; + var_00 maps\mp\_utility::freezecontrolswrapper(1); + var_01 = var_00 maps\mp\killstreaks\_killstreaks::initridekillstreak(); + if(var_01 != "success") + { + if(var_01 != "disconnect") + { + var_00 maps\mp\_utility::clearusingremote(); + } + + if(isdefined(var_00.disabledweapon) && var_00.disabledweapon) + { + var_00 common_scripts\utility::_enableweapon(); + } + + self notify("death"); + return 0; + } + + var_00 maps\mp\_utility::freezecontrolswrapper(0); + self.mgturret setcandamage(1); + self setcandamage(1); + var_00 remotecontrolvehicle(self); + var_00 remotecontrolturret(self.mgturret); + var_00 thread tank_watchfiring(self); + var_00 thread tank_firemissiles(self); + thread tank_earthquake(); + thread tank_playerexit(); + var_00.using_remote_tank = 1; + if(var_00 maps\mp\_utility::isjuggernaut()) + { + var_00.juggernautoverlay.alpha = 0; + } + + var_00 maps\mp\_utility::_giveweapon(level.tanksettings[self.tanktype].remoteinfo); + var_00 switchtoweaponimmediate(level.tanksettings[self.tanktype].remoteinfo); + thread func_31C0(); + self.mgturret thread func_31C1(); +} + +//Function Number: 24 +func_31B6() +{ + self endon("death"); + for(;;) + { + playfxontag(common_scripts\utility::func_539("remote_tank_antenna_light_mp"),self.mgturret,"tag_headlight_right"); + wait 1; + stopfxontag(common_scripts\utility::func_539("remote_tank_antenna_light_mp"),self.mgturret,"tag_headlight_right"); + } +} + +//Function Number: 25 +func_31B7() +{ + self endon("death"); + for(;;) + { + playfxontag(common_scripts\utility::func_539("remote_tank_camera_light_mp"),self.mgturret,"tag_tail_light_right"); + wait 2; + stopfxontag(common_scripts\utility::func_539("remote_tank_camera_light_mp"),self.mgturret,"tag_tail_light_right"); + } +} + +//Function Number: 26 +func_31B8() +{ + self.mgturret setmode(level.tanksettings[self.tanktype].sentrymodeoff); + if(level.teambased) + { + maps\mp\_entityheadicons::setteamheadicon("none",(0,0,0)); + } + else if(isdefined(self.owner)) + { + maps\mp\_entityheadicons::setplayerheadicon(undefined,(0,0,0)); + } + + if(!isdefined(self.owner)) + { + return; + } + + var_00 = self.owner; + if(isdefined(var_00.using_remote_tank) && var_00.using_remote_tank) + { + var_00 notify("end_remote"); + var_00 remotecontrolvehicleoff(self); + var_00 remotecontrolturretoff(self.mgturret); + var_00 switchtoweapon(var_00 common_scripts\utility::getlastweapon()); + var_00 maps\mp\_utility::clearusingremote(); + var_00 setplayerangles(var_00.restoreangles); + if(getdvarint("camera_thirdPerson")) + { + var_00 maps\mp\_utility::setthirdpersondof(1); + } + + if(isdefined(var_00.disabledusability) && var_00.disabledusability) + { + var_00 common_scripts\utility::_enableusability(); + } + + var_00 takekillstreakweapons(level.tanksettings[self.tanktype].streakname); + var_00.using_remote_tank = 0; + var_00 thread tank_freezebuffer(); + } +} + +//Function Number: 27 +tank_freezebuffer() +{ + self endon("disconnect"); + self endon("death"); + level endon("game_ended"); + maps\mp\_utility::freezecontrolswrapper(1); + wait 0.5; + maps\mp\_utility::freezecontrolswrapper(0); +} + +//Function Number: 28 +func_31BA() +{ + self endon("death"); + self.owner waittill("disconnect"); + if(isdefined(self.mgturret)) + { + self.mgturret notify("death"); + } + + self notify("death"); +} + +//Function Number: 29 +func_31BB() +{ + self endon("death"); + self.owner common_scripts\utility::waittill_any("joined_team","joined_spectators"); + self notify("death"); +} + +//Function Number: 30 +tank_handletimeout() +{ + self endon("death"); + var_00 = level.tanksettings[self.tanktype].timeout; + setdvar("ui_remoteTankUseTime",var_00); + maps\mp\gametypes\_hostmigration::func_2740(var_00); + self notify("death"); +} + +//Function Number: 31 +tank_handledeath() +{ + level endon("game_ended"); + var_00 = self getentitynumber(); + addtougvlist(var_00); + self waittill("death"); + self playsound("talon_destroyed"); + removefromugvlist(var_00); + self setmodel(level.tanksettings[self.tanktype].modeldestroyed); + if(isdefined(self.owner) && self.owner.using_remote_tank || self.owner maps\mp\_utility::isusingremote()) + { + self.owner setplayerdata("ugvDamageState",0); + func_31B8(); + self.owner.using_remote_tank = 0; + if(self.owner maps\mp\_utility::isjuggernaut()) + { + self.owner.juggernautoverlay.alpha = 1; + } + } + + self.mgturret setdefaultdroppitch(40); + self.mgturret setsentryowner(undefined); + self playsound("sentry_explode"); + playfxontag(level._effect["remote_tank_dying"],self.mgturret,"tag_aim"); + wait 2; + playfx(level._effect["remote_tank_explode"],self.origin); + self.mgturret delete(); + maps\mp\_utility::func_80C8(); + self delete(); +} + +//Function Number: 32 +callback_vehicledamage(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A,param_0B) +{ + var_0C = self; + if(isdefined(self.tank)) + { + var_0C = self.tank; + } + + if(isdefined(var_0C.alreadydead) && var_0C.alreadydead) + { + return; + } + + if(!maps\mp\gametypes\_weapons::func_27A1(var_0C.owner,param_01)) + { + return; + } + + if(isdefined(param_03) && param_03 & level.idflags_penetration) + { + var_0C.wasdamagedfrombulletpenetration = 1; + } + + var_0C.wasdamaged = 1; + var_0C.damagefade = 0; + var_0C.owner setplayerdata("ugvDamaged",1); + playfxontagforclients(level._effect["remote_tank_spark"],var_0C,"tag_player",var_0C.owner); + if(isdefined(param_05)) + { + switch(param_05) + { + case "stealth_bomb_mp": + case "artillery_mp": + param_02 = param_02 * 4; + break; + } + } + + if(param_04 == "MOD_MELEE") + { + param_02 = var_0C.maxhealth * 0.5; + } + + var_0D = param_02; + if(isplayer(param_01)) + { + param_01 maps\mp\gametypes\_damagefeedback::updatedamagefeedback("remote_tank"); + if(param_04 == "MOD_RIFLE_BULLET" || param_04 == "MOD_PISTOL_BULLET") + { + if(param_01 maps\mp\_utility::func_27AF("specialty_armorpiercing")) + { + var_0D = var_0D + param_02 * level.armorpiercingmod; + } + } + + if(isexplosivedamagemod(param_04)) + { + var_0D = var_0D + param_02; + } + } + + if(isexplosivedamagemod(param_04) && isdefined(param_05) && param_05 == "destructible_car") + { + var_0D = var_0C.maxhealth; + } + + if(isdefined(param_01.owner) && isplayer(param_01.owner)) + { + param_01.owner maps\mp\gametypes\_damagefeedback::updatedamagefeedback("remote_tank"); + } + + if(isdefined(param_05)) + { + switch(param_05) + { + case "remote_mortar_missile_mp": + case "javelin_mp": + case "stinger_mp": + case "remotemissile_projectile_mp": + case "ac130_40mm_mp": + case "ac130_105mm_mp": + var_0C.largeprojectiledamage = 1; + var_0D = var_0C.maxhealth + 1; + break; + + case "stealth_bomb_mp": + case "artillery_mp": + var_0C.largeprojectiledamage = 0; + var_0D = var_0C.maxhealth * 0.5; + break; + + case "bomb_site_mp": + var_0C.largeprojectiledamage = 0; + var_0D = var_0C.maxhealth + 1; + break; + + case "emp_grenade_mp": + var_0D = 0; + var_0C thread tank_empgrenaded(); + break; + + case "ims_projectile_mp": + var_0C.largeprojectiledamage = 1; + var_0D = var_0C.maxhealth * 0.5; + break; + } + + maps\mp\killstreaks\_killstreaks::killstreakhit(param_01,param_05,self); + } + + var_0C.damagetaken = var_0C.damagetaken + var_0D; + var_0C playsound("talon_damaged"); + if(var_0C.damagetaken >= var_0C.maxhealth) + { + if(isplayer(param_01) && !isdefined(var_0C.owner) || param_01 != var_0C.owner) + { + var_0C.alreadydead = 1; + param_01 notify("destroyed_killstreak",param_05); + thread maps\mp\_utility::teamplayercardsplash("callout_destroyed_remote_tank",param_01); + param_01 thread maps\mp\gametypes\_rank::func_2AB3("kill",300,param_05,param_04); + param_01 thread maps\mp\gametypes\_rank::xpeventpopup(&"SPLASHES_DESTROYED_REMOTE_TANK"); + thread maps\mp\gametypes\_missions::vehiclekilled(var_0C.owner,var_0C,undefined,param_01,param_02,param_04,param_05); + } + + var_0C notify("death"); + } +} + +//Function Number: 33 +tank_empgrenaded() +{ + self notify("tank_EMPGrenaded"); + self endon("tank_EMPGrenaded"); + self endon("death"); + self.owner endon("disconnect"); + level endon("game_ended"); + self.empgrenaded = 1; + self.owner setplayerdata("ugvDamageFade",0); + var_00 = self.owner getplayerdata("ugvBullets"); + self.owner setplayerdata("ugvBullets",0); + self.owner setplayerdata("ugvMissile",0); + self.mgturret turretfiredisable(); + wait 3.5; + self.empgrenaded = 0; + self.owner setplayerdata("ugvBullets",var_00); + self.owner setplayerdata("ugvMissile",1); + self.mgturret turretfireenable(); +} + +//Function Number: 34 +tank_incrementdamagefade() +{ + self endon("death"); + level endon("game_ended"); + var_00 = 0; + for(;;) + { + if(!self.empgrenaded) + { + if(self.damagefade < 1) + { + self.owner setplayerdata("ugvDamageFade",self.damagefade); + self.damagefade = self.damagefade + 0.1; + var_00 = 1; + } + else if(var_00) + { + self.damagefade = 1; + self.owner setplayerdata("ugvDamageFade",self.damagefade); + self.owner setplayerdata("ugvDamaged",0); + var_00 = 0; + } + } + + wait 0.1; + } +} + +//Function Number: 35 +func_31BF() +{ + self endon("death"); + level endon("game_ended"); + var_00 = 0.1; + var_01 = 1; + var_02 = 1; + for(;;) + { + if(var_02) + { + if(self.damagetaken > 0) + { + var_02 = 0; + self.owner setplayerdata("ugvDamageState",var_01); + var_01++; + } + } + else if(self.damagetaken >= self.maxhealth * var_00 * var_01) + { + self.owner setplayerdata("ugvDamageState",var_01); + var_01++; + } + + wait 0.05; + } +} + +//Function Number: 36 +func_31C0() +{ + self endon("death"); + level endon("game_ended"); + for(;;) + { + self waittill("damage",var_00,var_01,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09); + if(isdefined(self.specialdamagecallback)) + { + self [[ self.specialdamagecallback ]](undefined,var_01,var_00,var_08,var_04,var_09,var_03,var_02,undefined,undefined,var_05,var_07); + } + } +} + +//Function Number: 37 +func_31C1() +{ + self endon("death"); + level endon("game_ended"); + for(;;) + { + self waittill("damage",var_00,var_01,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09); + if(isdefined(self.specialdamagecallback) && isdefined(self.tank) && !isexplosivedamagemod(var_04) || isdefined(var_09) && isexplosivedamagemod(var_04) && var_09 == "stealth_bomb_mp" || var_09 == "artillery_mp") + { + self.tank [[ self.specialdamagecallback ]](undefined,var_01,var_00,var_08,var_04,var_09,var_03,var_02,undefined,undefined,var_05,var_07); + } + } +} + +//Function Number: 38 +tank_watchfiring(param_00) +{ + self endon("disconnect"); + self endon("end_remote"); + param_00 endon("death"); + var_01 = 50; + var_02 = var_01; + self setplayerdata("ugvMaxBullets",var_01); + self setplayerdata("ugvBullets",var_02); + var_03 = weaponfiretime(level.tanksettings[param_00.tanktype].mgturretinfo); + for(;;) + { + if(param_00.mgturret isfiringvehicleturret()) + { + var_02--; + self setplayerdata("ugvBullets",var_02); + if(var_02 <= 0) + { + param_00.mgturret turretfiredisable(); + wait 2.5; + param_00 playsound("talon_reload"); + self playlocalsound("talon_reload_plr"); + var_02 = var_01; + self setplayerdata("ugvBullets",var_02); + param_00.mgturret turretfireenable(); + } + } + + wait var_03; + } +} + +//Function Number: 39 +tank_firemissiles(param_00) +{ + self endon("disconnect"); + self endon("end_remote"); + level endon("game_ended"); + param_00 endon("death"); + var_01 = 0; + for(;;) + { + if(self fragbuttonpressed() && !param_00.empgrenaded) + { + var_02 = param_00.mgturret.origin; + var_03 = param_00.mgturret.angles; + switch(var_01) + { + case 0: + var_02 = param_00.mgturret gettagorigin("tag_missile1"); + var_03 = param_00.mgturret gettagangles("tag_player"); + break; + + case 1: + var_02 = param_00.mgturret gettagorigin("tag_missile2"); + var_03 = param_00.mgturret gettagangles("tag_player"); + break; + } + + param_00 playsound("talon_missile_fire"); + self playlocalsound("talon_missile_fire_plr"); + var_04 = var_02 + anglestoforward(var_03) * 100; + var_05 = magicbullet(level.tanksettings[param_00.tanktype].missileinfo,var_02,var_04,self); + var_01 = var_01 + 1 % 2; + self setplayerdata("ugvMissile",0); + wait 5; + param_00 playsound("talon_rocket_reload"); + self playlocalsound("talon_rocket_reload_plr"); + self setplayerdata("ugvMissile",1); + continue; + } + + wait 0.05; + } +} + +//Function Number: 40 +tank_earthquake() +{ + self endon("death"); + self.owner endon("end_remote"); + for(;;) + { + earthquake(0.1,0.25,self.mgturret gettagorigin("tag_player"),50); + wait 0.25; + } +} + +//Function Number: 41 +addtougvlist(param_00) +{ + level.ugvs[param_00] = self; +} + +//Function Number: 42 +removefromugvlist(param_00) +{ + level.ugvs[param_00] = undefined; +} + +//Function Number: 43 +tank_playerexit() +{ + if(!isdefined(self.owner)) + { + return; + } + + var_00 = self.owner; + level endon("game_ended"); + var_00 endon("disconnect"); + var_00 endon("end_remote"); + self endon("death"); + for(;;) + { + var_01 = 0; + while(var_00 usebuttonpressed()) + { + var_01 = var_01 + 0.05; + if(var_01 > 0.75) + { + self notify("death"); + return; + } + + wait 0.05; + } + + wait 0.05; + } +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/killstreaks/_remoteturret.gsc b/MW3/Xbox/MP/maps/mp/killstreaks/_remoteturret.gsc new file mode 100644 index 0000000..ef3e511 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/killstreaks/_remoteturret.gsc @@ -0,0 +1,1169 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\killstreaks\_remoteturret.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 36 + * Decompile Time: 646 ms + * Timestamp: 10/27/2023 2:27:19 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level.turrettype = []; + level.turrettype["mg_turret"] = "remote_mg_turret"; + level.killstreakfuncs["remote_mg_turret"] = ::func_3177; + level.turretsettings = []; + level.turretsettings["mg_turret"] = spawnstruct(); + level.turretsettings["mg_turret"].sentrymodeon = "manual"; + level.turretsettings["mg_turret"].sentrymodeoff = "sentry_offline"; + level.turretsettings["mg_turret"].timeout = 60; + level.turretsettings["mg_turret"].health = 999999; + level.turretsettings["mg_turret"].maxhealth = 1000; + level.turretsettings["mg_turret"].streakname = "remote_mg_turret"; + level.turretsettings["mg_turret"].weaponinfo = "remote_turret_mp"; + level.turretsettings["mg_turret"].modelbase = "mp_remote_turret"; + level.turretsettings["mg_turret"].modelplacement = "mp_remote_turret_placement"; + level.turretsettings["mg_turret"].modelplacementfailed = "mp_remote_turret_placement_failed"; + level.turretsettings["mg_turret"].modeldestroyed = "mp_remote_turret"; + level.turretsettings["mg_turret"].teamsplash = "used_remote_mg_turret"; + level.turretsettings["mg_turret"].hintenter = &"MP_ENTER_REMOTE_TURRET"; + level.turretsettings["mg_turret"].hintexit = &"MP_EARLY_EXIT"; + level.turretsettings["mg_turret"].hintpickup = &"MP_DOUBLE_TAP_TO_CARRY"; + level.turretsettings["mg_turret"].placestring = &"MP_TURRET_PLACE"; + level.turretsettings["mg_turret"].cannotplacestring = &"MP_TURRET_CANNOT_PLACE"; + level.turretsettings["mg_turret"].vodestroyed = "remote_sentry_destroyed"; + level.turretsettings["mg_turret"].laptopinfo = "killstreak_remote_turret_laptop_mp"; + level.turretsettings["mg_turret"].remoteinfo = "killstreak_remote_turret_remote_mp"; + foreach(var_01 in level.turretsettings) + { + precacheitem(var_01.weaponinfo); + precachemodel(var_01.modelbase); + precachemodel(var_01.modelplacement); + precachemodel(var_01.modelplacementfailed); + precachemodel(var_01.modeldestroyed); + precachestring(var_01.hintenter); + precachestring(var_01.hintexit); + precachestring(var_01.placestring); + precachestring(var_01.cannotplacestring); + precacheitem(var_01.laptopinfo); + precacheitem(var_01.remoteinfo); + } + + level._effect["sentry_explode_mp"] = loadfx("explosions/sentry_gun_explosion"); + level._effect["sentry_smoke_mp"] = loadfx("smoke/car_damage_blacksmoke"); + level._effect["antenna_light_mp"] = loadfx("lights/light_detonator_blink"); +} + +//Function Number: 2 +func_3177(param_00) +{ + var_01 = tryuseremoteturret(param_00,"mg_turret"); + if(var_01) + { + maps\mp\_matchdata::logkillstreakevent(level.turretsettings["mg_turret"].streakname,self.origin); + } + + self.iscarrying = 0; + return var_01; +} + +//Function Number: 3 +takekillstreakweapons(param_00) +{ + self takeweapon(level.turretsettings[param_00].laptopinfo); + self takeweapon(level.turretsettings[param_00].remoteinfo); +} + +//Function Number: 4 +tryuseremoteturret(param_00,param_01) +{ + if(maps\mp\_utility::isusingremote()) + { + return 0; + } + + var_02 = createturretforplayer(param_01,self); + func_2DF8(); + setcarryingturret(var_02,1); + thread func_2DFB(); + if(isdefined(var_02)) + { + return 1; + } + + return 0; +} + +//Function Number: 5 +setcarryingturret(param_00,param_01) +{ + self endon("death"); + self endon("disconnect"); + param_00 func_3181(self); + common_scripts\utility::_disableweapon(); + self notifyonplayercommand("place_turret","+attack"); + self notifyonplayercommand("place_turret","+attack_akimbo_accessible"); + self notifyonplayercommand("cancel_turret","+actionslot 4"); + if(!level.console) + { + self notifyonplayercommand("cancel_turret","+actionslot 5"); + self notifyonplayercommand("cancel_turret","+actionslot 6"); + self notifyonplayercommand("cancel_turret","+actionslot 7"); + } + + for(;;) + { + var_02 = common_scripts\utility::waittill_any_return("place_turret","cancel_turret","force_cancel_placement"); + if(var_02 == "cancel_turret" || var_02 == "force_cancel_placement") + { + if(var_02 == "cancel_turret" && !param_01) + { + continue; + } + + if(level.console) + { + var_03 = maps\mp\killstreaks\_killstreaks::func_2C01(level.turretsettings[param_00.turrettype].streakname); + if(isdefined(self.killstreakindexweapon) && var_03 == maps\mp\killstreaks\_killstreaks::func_2C01(self.pers["killstreaks"][self.killstreakindexweapon].streakname) && !self getweaponslistitems().size) + { + maps\mp\_utility::_giveweapon(var_03,0); + maps\mp\_utility::func_31F3(4,"weapon",var_03); + } + } + + param_00 func_3180(); + common_scripts\utility::_enableweapon(); + return 0; + } + + if(!param_00.canbeplaced) + { + continue; + } + + param_00 func_317F(); + common_scripts\utility::_enableweapon(); + return 1; + } +} + +//Function Number: 6 +func_2DF8() +{ + if(maps\mp\_utility::func_27AF("specialty_explosivebullets")) + { + self.restoreperk = "specialty_explosivebullets"; + maps\mp\_utility::func_282E("specialty_explosivebullets"); + } +} + +//Function Number: 7 +func_2DFB() +{ + if(isdefined(self.restoreperk)) + { + maps\mp\_utility::giveperk(self.restoreperk,0); + self.restoreperk = undefined; + } +} + +//Function Number: 8 +waitrestoreperks() +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + wait 0.05; + func_2DFB(); +} + +//Function Number: 9 +func_2DF6() +{ + foreach(var_01 in self.weaponlist) + { + var_02 = strtok(var_01,"_"); + if(var_02[0] == "alt") + { + self.restoreweaponclipammo[var_01] = self getweaponammoclip(var_01); + self.restoreweaponstockammo[var_01] = self getweaponammostock(var_01); + continue; + } + + self.restoreweaponclipammo[var_01] = self getweaponammoclip(var_01); + self.restoreweaponstockammo[var_01] = self getweaponammostock(var_01); + } + + self.weaponstorestore = []; + foreach(var_01 in self.weaponlist) + { + var_02 = strtok(var_01,"_"); + if(var_02[0] == "alt") + { + continue; + } + + self.weaponstorestore[self.weaponstorestore.size] = var_01; + self takeweapon(var_01); + } +} + +//Function Number: 10 +func_2DFA() +{ + if(!isdefined(self.restoreweaponclipammo) || !isdefined(self.restoreweaponstockammo) || !isdefined(self.weaponstorestore)) + { + return; + } + + var_00 = []; + foreach(var_02 in self.weaponstorestore) + { + var_03 = strtok(var_02,"_"); + if(var_03[0] == "alt") + { + var_00[var_00.size] = var_02; + continue; + } + + maps\mp\_utility::_giveweapon(var_02); + if(isdefined(self.restoreweaponclipammo[var_02])) + { + self setweaponammoclip(var_02,self.restoreweaponclipammo[var_02]); + } + + if(isdefined(self.restoreweaponstockammo[var_02])) + { + self setweaponammostock(var_02,self.restoreweaponstockammo[var_02]); + } + } + + foreach(var_06 in var_00) + { + if(isdefined(self.restoreweaponclipammo[var_06])) + { + self setweaponammoclip(var_06,self.restoreweaponclipammo[var_06]); + } + + if(isdefined(self.restoreweaponstockammo[var_06])) + { + self setweaponammostock(var_06,self.restoreweaponstockammo[var_06]); + } + } + + self.restoreweaponclipammo = undefined; + self.restoreweaponstockammo = undefined; +} + +//Function Number: 11 +waitrestoreweapons() +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + wait 0.05; + func_2DFA(); +} + +//Function Number: 12 +func_317F() +{ + self setmodel(level.turretsettings[self.turrettype].modelbase); + self setsentrycarrier(undefined); + self setcandamage(1); + self.carriedby forceusehintoff(); + self.carriedby = undefined; + if(isdefined(self.owner)) + { + self.owner.iscarrying = 0; + } + + self playsound("sentry_gun_plant"); + thread func_318B(); + self notify("placed"); +} + +//Function Number: 13 +func_3180() +{ + self.carriedby forceusehintoff(); + if(isdefined(self.owner)) + { + self.owner.iscarrying = 0; + } + + self delete(); +} + +//Function Number: 14 +func_3181(param_00) +{ + self setmodel(level.turretsettings[self.turrettype].modelplacement); + self setcandamage(0); + self setsentrycarrier(param_00); + self setcontents(0); + self.carriedby = param_00; + param_00.iscarrying = 1; + param_00 thread updateturretplacement(self); + thread func_3183(param_00); + thread turret_oncarrierdisconnect(param_00); + thread turret_oncarrierchangedteam(param_00); + thread turret_ongameended(); + self setdefaultdroppitch(-89); + turret_setinactive(); + self notify("carried"); +} + +//Function Number: 15 +updateturretplacement(param_00) +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + param_00 endon("placed"); + param_00 endon("death"); + param_00.canbeplaced = 1; + var_01 = -1; + for(;;) + { + var_02 = self canplayerplacesentry(); + param_00.origin = var_02["origin"]; + param_00.angles = var_02["angles"]; + param_00.canbeplaced = self isonground() && var_02["result"] && abs(param_00.origin[2] - self.origin[2]) < 10; + if(param_00.canbeplaced != var_01) + { + if(param_00.canbeplaced) + { + param_00 setmodel(level.turretsettings[param_00.turrettype].modelplacement); + self forceusehinton(level.turretsettings[param_00.turrettype].placestring); + } + else + { + param_00 setmodel(level.turretsettings[param_00.turrettype].modelplacementfailed); + self forceusehinton(level.turretsettings[param_00.turrettype].cannotplacestring); + } + } + + var_01 = param_00.canbeplaced; + wait 0.05; + } +} + +//Function Number: 16 +func_3183(param_00) +{ + self endon("placed"); + self endon("death"); + param_00 waittill("death"); + if(self.canbeplaced) + { + func_317F(); + return; + } + + self delete(); +} + +//Function Number: 17 +turret_oncarrierdisconnect(param_00) +{ + self endon("placed"); + self endon("death"); + param_00 waittill("disconnect"); + self delete(); +} + +//Function Number: 18 +turret_oncarrierchangedteam(param_00) +{ + self endon("placed"); + self endon("death"); + param_00 common_scripts\utility::waittill_any("joined_team","joined_spectators"); + self delete(); +} + +//Function Number: 19 +turret_ongameended(param_00) +{ + self endon("placed"); + self endon("death"); + level waittill("game_ended"); + self delete(); +} + +//Function Number: 20 +createturretforplayer(param_00,param_01) +{ + var_02 = spawnturret("misc_turret",param_01.origin,level.turretsettings[param_00].weaponinfo); + var_02.angles = param_01.angles; + var_02 setmodel(level.turretsettings[param_00].modelbase); + var_02.owner = param_01; + var_02.health = level.turretsettings[param_00].health; + var_02.maxhealth = level.turretsettings[param_00].maxhealth; + var_02.damagetaken = 0; + var_02.turrettype = param_00; + var_02.stunned = 0; + var_02.stunnedtime = 5; + var_02 setturretmodechangewait(1); + var_02 turret_setinactive(); + var_02 setsentryowner(param_01); + var_02 setturretminimapvisible(1,param_00); + var_02 setdefaultdroppitch(-89); + var_02 thread func_3196(); + param_01 setplayerdata("remoteTurretDamageFade",1); + param_01 setplayerdata("remoteTurretDamaged",0); + param_01 setplayerdata("remoteTurretDamageState",0); + var_02.damagefade = 1; + var_02 thread func_319B(); + var_02 thread turret_watchlowhealth(); + return var_02; +} + +//Function Number: 21 +func_318B() +{ + self endon("death"); + self.owner endon("disconnect"); + self setdefaultdroppitch(0); + self makeunusable(); + self maketurretsolid(); + if(!isdefined(self.owner)) + { + return; + } + + var_00 = self.owner; + if(isdefined(var_00.remoteturretlist)) + { + foreach(var_02 in var_00.remoteturretlist) + { + var_02 notify("death"); + } + } + + var_00.remoteturretlist = []; + var_00.remoteturretlist[0] = self; + var_00.using_remote_turret = 0; + var_00.pickup_message_deleted = 0; + var_00.enter_message_deleted = 1; + if(isalive(var_00)) + { + var_00 maps\mp\_utility::setlowermessage("pickup_remote_turret",level.turretsettings[self.turrettype].hintpickup,undefined,undefined,undefined,undefined,undefined,undefined,1); + } + + var_00 thread func_3190(self); + if(level.teambased) + { + self.team = var_00.team; + self setturretteam(var_00.team); + maps\mp\_entityheadicons::setteamheadicon(self.team,(0,0,65)); + } + else + { + maps\mp\_entityheadicons::setplayerheadicon(self.owner,(0,0,65)); + } + + self.ownertrigger = spawn("trigger_radius",self.origin + (0,0,1),0,32,64); + var_00 thread turret_handlepickup(self); + thread func_3191(); + thread turret_handledeath(); + thread func_319A(); + thread func_3197(); + thread func_3193(); +} + +//Function Number: 22 +startusingremoteturret() +{ + var_00 = self.owner; + var_00 maps\mp\_utility::setusingremote(self.turrettype); + var_00 maps\mp\_utility::freezecontrolswrapper(1); + var_01 = var_00 maps\mp\killstreaks\_killstreaks::initridekillstreak(); + if(var_01 != "success") + { + if(var_01 != "disconnect") + { + var_00 maps\mp\_utility::clearusingremote(); + } + + return 0; + } + + var_00 maps\mp\_utility::_giveweapon(level.turretsettings[self.turrettype].remoteinfo); + var_00 switchtoweaponimmediate(level.turretsettings[self.turrettype].remoteinfo); + var_00 maps\mp\_utility::freezecontrolswrapper(0); + var_00 thread waitsetthermal(1,self); + if(isdefined(level.huditem["thermal_mode"])) + { + level.huditem["thermal_mode"] settext(""); + } + + if(getdvarint("camera_thirdPerson")) + { + var_00 maps\mp\_utility::setthirdpersondof(0); + } + + var_00 playerlinkweaponviewtodelta(self,"tag_player",0,180,180,50,25,0); + var_00 playerlinkedsetviewznear(0); + var_00 playerlinkedsetusebaseangleforviewclamp(1); + var_00 remotecontrolturret(self); + var_00 maps\mp\_utility::clearlowermessage("enter_remote_turret"); + var_00 maps\mp\_utility::clearlowermessage("pickup_remote_turret"); + var_00 maps\mp\_utility::setlowermessage("early_exit",level.turretsettings[self.turrettype].hintexit,undefined,undefined,undefined,undefined,undefined,undefined,1); + if(var_00 maps\mp\_utility::isjuggernaut()) + { + var_00.juggernautoverlay.alpha = 0; + } +} + +//Function Number: 23 +waitsetthermal(param_00,param_01) +{ + self endon("disconnect"); + param_01 endon("death"); + wait param_00; + self visionsetthermalforplayer(game["thermal_vision"],1.5); + self thermalvisionon(); + self thermalvisionfofoverlayon(); +} + +//Function Number: 24 +stopusingremoteturret() +{ + var_00 = self.owner; + if(var_00 maps\mp\_utility::isusingremote()) + { + var_00 thermalvisionoff(); + var_00 thermalvisionfofoverlayoff(); + var_00 remotecontrolturretoff(self); + var_00 unlink(); + var_00 switchtoweapon(var_00 common_scripts\utility::getlastweapon()); + var_00 maps\mp\_utility::clearusingremote(); + if(getdvarint("camera_thirdPerson")) + { + var_00 maps\mp\_utility::setthirdpersondof(1); + } + + var_00 visionsetthermalforplayer(game["thermal_vision"],0); + var_01 = maps\mp\killstreaks\_killstreaks::func_2C01(level.turretsettings[self.turrettype].streakname); + var_00 maps\mp\killstreaks\_killstreaks::takekillstreakweaponifnodupe(var_01); + } + + if(self.stunned) + { + var_00 stopshellshock(); + } + + var_00 maps\mp\_utility::clearlowermessage("early_exit"); + if(!isdefined(var_00.using_remote_turret_when_died) || !var_00.using_remote_turret_when_died) + { + var_00 maps\mp\_utility::setlowermessage("enter_remote_turret",level.turretsettings[self.turrettype].hintenter,undefined,undefined,undefined,1,0.25,1.5,1); + } + + if(var_00 maps\mp\_utility::isjuggernaut()) + { + var_00.juggernautoverlay.alpha = 1; + } + + self notify("exit"); +} + +//Function Number: 25 +func_3190(param_00) +{ + self endon("disconnect"); + param_00 endon("death"); + self.using_remote_turret_when_died = 0; + for(;;) + { + if(isalive(self)) + { + self waittill("death"); + } + + maps\mp\_utility::clearlowermessage("enter_remote_turret"); + maps\mp\_utility::clearlowermessage("pickup_remote_turret"); + if(self.using_remote_turret) + { + self.using_remote_turret_when_died = 1; + } + else + { + self.using_remote_turret_when_died = 0; + } + + self waittill("spawned_player"); + if(!self.using_remote_turret_when_died) + { + maps\mp\_utility::setlowermessage("enter_remote_turret",level.turretsettings[param_00.turrettype].hintenter,undefined,undefined,undefined,1,0.25,1.5,1); + continue; + } + + param_00 notify("death"); + } +} + +//Function Number: 26 +func_3191() +{ + self endon("death"); + self endon("carried"); + level endon("game_ended"); + var_00 = self.owner; + for(;;) + { + var_01 = var_00 getcurrentweapon(); + if(maps\mp\_utility::func_2829(var_01) && var_01 != level.turretsettings[self.turrettype].weaponinfo && var_01 != level.turretsettings[self.turrettype].laptopinfo && var_01 != level.turretsettings[self.turrettype].remoteinfo && var_01 != "none" && !var_00 maps\mp\_utility::isjuggernaut() || var_00 maps\mp\_utility::isusingremote()) + { + if(!isdefined(var_00.enter_message_deleted) || !var_00.enter_message_deleted) + { + var_00.enter_message_deleted = 1; + var_00 maps\mp\_utility::clearlowermessage("enter_remote_turret"); + } + + wait 0.05; + continue; + } + + if(var_00 istouching(self.ownertrigger)) + { + if(!isdefined(var_00.enter_message_deleted) || !var_00.enter_message_deleted) + { + var_00.enter_message_deleted = 1; + var_00 maps\mp\_utility::clearlowermessage("enter_remote_turret"); + } + + wait 0.05; + continue; + } + + if(isdefined(var_00.empgrenaded) && var_00.empgrenaded) + { + if(!isdefined(var_00.enter_message_deleted) || !var_00.enter_message_deleted) + { + var_00.enter_message_deleted = 1; + var_00 maps\mp\_utility::clearlowermessage("enter_remote_turret"); + } + + wait 0.05; + continue; + } + + if(isdefined(var_00.enter_message_deleted) && var_00.enter_message_deleted && var_01 != "none") + { + var_00 maps\mp\_utility::setlowermessage("enter_remote_turret",level.turretsettings[self.turrettype].hintenter,undefined,undefined,undefined,1,0.25,1.5,1); + var_00.enter_message_deleted = 0; + } + + var_02 = 0; + while(var_00 usebuttonpressed() && !var_00 fragbuttonpressed() && !isdefined(var_00.throwinggrenade) && !var_00 secondaryoffhandbuttonpressed() && !var_00 isusingturret() && var_00 isonground() && !var_00 istouching(self.ownertrigger) && !isdefined(var_00.empgrenaded) || !var_00.empgrenaded) + { + if(isdefined(var_00.iscarrying) && var_00.iscarrying) + { + break; + } + + if(isdefined(var_00.iscapturingcrate) && var_00.iscapturingcrate) + { + break; + } + + if(!isalive(var_00)) + { + break; + } + + if(!var_00.using_remote_turret && var_00 maps\mp\_utility::isusingremote()) + { + break; + } + + var_02 = var_02 + 0.05; + if(var_02 > 0.75) + { + var_00.using_remote_turret = !var_00.using_remote_turret; + if(var_00.using_remote_turret) + { + var_00 func_2DF6(); + var_00 takekillstreakweapons(self.turrettype); + var_00 maps\mp\_utility::_giveweapon(level.turretsettings[self.turrettype].laptopinfo); + var_00 switchtoweaponimmediate(level.turretsettings[self.turrettype].laptopinfo); + startusingremoteturret(); + var_00 func_2DFA(); + } + else + { + var_00 takekillstreakweapons(self.turrettype); + stopusingremoteturret(); + } + + wait 2; + break; + } + + wait 0.05; + } + + wait 0.05; + } +} + +//Function Number: 27 +turret_handlepickup(param_00) +{ + self endon("disconnect"); + level endon("game_ended"); + param_00 endon("death"); + if(!isdefined(param_00.ownertrigger)) + { + return; + } + + if(isdefined(self.pers["isBot"]) && self.pers["isBot"]) + { + return; + } + + var_01 = 0; + for(;;) + { + var_02 = self getcurrentweapon(); + if(maps\mp\_utility::func_2829(var_02) && var_02 != "killstreak_remote_turret_mp" && var_02 != level.turretsettings[param_00.turrettype].weaponinfo && var_02 != level.turretsettings[param_00.turrettype].laptopinfo && var_02 != level.turretsettings[param_00.turrettype].remoteinfo && var_02 != "none" && !maps\mp\_utility::isjuggernaut() || maps\mp\_utility::isusingremote()) + { + if(!isdefined(self.pickup_message_deleted) || !self.pickup_message_deleted) + { + self.pickup_message_deleted = 1; + maps\mp\_utility::clearlowermessage("pickup_remote_turret"); + } + + wait 0.05; + continue; + } + + if(!self istouching(param_00.ownertrigger)) + { + if(!isdefined(self.pickup_message_deleted) || !self.pickup_message_deleted) + { + self.pickup_message_deleted = 1; + maps\mp\_utility::clearlowermessage("pickup_remote_turret"); + } + + wait 0.05; + continue; + } + + if(maps\mp\_utility::isreallyalive(self) && self istouching(param_00.ownertrigger) && !isdefined(param_00.carriedby) && self isonground()) + { + if(isdefined(self.pickup_message_deleted) && self.pickup_message_deleted && var_02 != "none") + { + maps\mp\_utility::setlowermessage("pickup_remote_turret",level.turretsettings[param_00.turrettype].hintpickup,undefined,undefined,undefined,undefined,undefined,undefined,1); + self.pickup_message_deleted = 0; + } + + if(self usebuttonpressed()) + { + if(isdefined(self.using_remote_turret) && self.using_remote_turret) + { + continue; + } + + var_01 = 0; + while(self usebuttonpressed()) + { + var_01 = var_01 + 0.05; + wait 0.05; + } + + if(var_01 >= 0.5) + { + continue; + } + + var_01 = 0; + while(!self usebuttonpressed() && var_01 < 0.5) + { + var_01 = var_01 + 0.05; + wait 0.05; + } + + if(var_01 >= 0.5) + { + continue; + } + + if(!maps\mp\_utility::isreallyalive(self)) + { + continue; + } + + if(isdefined(self.using_remote_turret) && self.using_remote_turret) + { + continue; + } + + param_00 setmode(level.turretsettings[param_00.turrettype].sentrymodeoff); + thread setcarryingturret(param_00,0); + param_00.ownertrigger delete(); + self.remoteturretlist = undefined; + maps\mp\_utility::clearlowermessage("pickup_remote_turret"); + return; + } + } + + wait 0.05; + } +} + +//Function Number: 28 +func_3193() +{ + self endon("death"); + self endon("carried"); + for(;;) + { + playfxontag(common_scripts\utility::func_539("antenna_light_mp"),self,"tag_fx"); + wait 1; + stopfxontag(common_scripts\utility::func_539("antenna_light_mp"),self,"tag_fx"); + } +} + +//Function Number: 29 +turret_setinactive() +{ + self setmode(level.turretsettings[self.turrettype].sentrymodeoff); + if(level.teambased) + { + maps\mp\_entityheadicons::setteamheadicon("none",(0,0,0)); + } + else if(isdefined(self.owner)) + { + maps\mp\_entityheadicons::setplayerheadicon(undefined,(0,0,0)); + } + + if(!isdefined(self.owner)) + { + return; + } + + var_00 = self.owner; + if(isdefined(var_00.using_remote_turret) && var_00.using_remote_turret) + { + var_00 thermalvisionoff(); + var_00 thermalvisionfofoverlayoff(); + var_00 remotecontrolturretoff(self); + var_00 unlink(); + var_00 switchtoweapon(var_00 common_scripts\utility::getlastweapon()); + var_00 maps\mp\_utility::clearusingremote(); + if(getdvarint("camera_thirdPerson")) + { + var_00 maps\mp\_utility::setthirdpersondof(1); + } + + var_00 maps\mp\killstreaks\_killstreaks::func_3195(); + var_00 visionsetthermalforplayer(game["thermal_vision"],0); + if(isdefined(var_00.disabledusability) && var_00.disabledusability) + { + var_00 common_scripts\utility::_enableusability(); + } + + var_00 takekillstreakweapons(self.turrettype); + if(var_00 maps\mp\_utility::isjuggernaut()) + { + var_00.juggernautoverlay.alpha = 1; + } + } +} + +//Function Number: 30 +func_3196() +{ + self endon("death"); + level endon("game_ended"); + self notify("turret_handleOwner"); + self endon("turret_handleOwner"); + self.owner common_scripts\utility::waittill_any("disconnect","joined_team","joined_spectators"); + self notify("death"); +} + +//Function Number: 31 +func_3197() +{ + self endon("death"); + level endon("game_ended"); + var_00 = level.turretsettings[self.turrettype].timeout; + while(var_00) + { + wait 1; + maps\mp\gametypes\_hostmigration::func_273E(); + if(!isdefined(self.carriedby)) + { + var_00 = max(0,var_00 - 1); + } + } + + if(isdefined(self.owner)) + { + self.owner thread maps\mp\_utility::func_2A60("sentry_gone"); + } + + self notify("death"); +} + +//Function Number: 32 +turret_handledeath() +{ + self endon("carried"); + var_00 = self getentitynumber(); + maps\mp\killstreaks\_autosentry::func_2E1D(var_00); + self waittill("death"); + maps\mp\killstreaks\_autosentry::removefromturretlist(var_00); + if(!isdefined(self)) + { + return; + } + + self setmodel(level.turretsettings[self.turrettype].modeldestroyed); + turret_setinactive(); + self setdefaultdroppitch(40); + self setsentryowner(undefined); + self setturretminimapvisible(0); + if(isdefined(self.ownertrigger)) + { + self.ownertrigger delete(); + } + + var_01 = self.owner; + if(isdefined(var_01)) + { + var_01.using_remote_turret = 0; + var_01 maps\mp\_utility::clearlowermessage("enter_remote_turret"); + var_01 maps\mp\_utility::clearlowermessage("early_exit"); + var_01 maps\mp\_utility::clearlowermessage("pickup_remote_turret"); + var_01 setplayerdata("remoteTurretDamageState",0); + var_01 func_2DFB(); + var_01 func_2DFA(); + if(var_01 getcurrentweapon() == "none") + { + var_01 switchtoweapon(var_01 common_scripts\utility::getlastweapon()); + } + + if(self.stunned) + { + var_01 stopshellshock(); + } + } + + self playsound("sentry_explode"); + playfxontag(common_scripts\utility::func_539("sentry_explode_mp"),self,"tag_aim"); + wait 1.5; + self playsound("sentry_explode_smoke"); + var_02 = 8; + while(var_02 > 0) + { + playfxontag(common_scripts\utility::func_539("sentry_smoke_mp"),self,"tag_aim"); + wait 0.4; + var_02 = var_02 - 0.4; + } + + self notify("deleting"); + if(isdefined(self.target_ent)) + { + self.target_ent delete(); + } + + self delete(); +} + +//Function Number: 33 +func_319A() +{ + self endon("death"); + self endon("carried"); + self setcandamage(1); + for(;;) + { + self waittill("damage",var_00,var_01,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09); + if(!maps\mp\gametypes\_weapons::func_27A1(self.owner,var_01)) + { + continue; + } + + if(isdefined(var_09)) + { + switch(var_09) + { + case "concussion_grenade_mp": + case "flash_grenade_mp": + if(var_04 == "MOD_GRENADE_SPLASH" && self.owner.using_remote_turret) + { + self.stunned = 1; + thread turret_stun(); + } + + break; + + case "smoke_grenade_mp": + break; + } + } + + if(!isdefined(self)) + { + return; + } + + if(var_04 == "MOD_MELEE") + { + self.damagetaken = self.damagetaken + self.maxhealth; + } + + if(isdefined(var_08) && var_08 & level.idflags_penetration) + { + self.wasdamagedfrombulletpenetration = 1; + } + + self.wasdamaged = 1; + self.damagefade = 0; + self.owner setplayerdata("remoteTurretDamaged",1); + var_0A = var_00; + if(isplayer(var_01)) + { + var_01 maps\mp\gametypes\_damagefeedback::updatedamagefeedback("remote_turret"); + if(var_01 maps\mp\_utility::func_27AF("specialty_armorpiercing")) + { + var_0A = var_00 * level.armorpiercingmod; + } + } + + if(isdefined(var_01.owner) && isplayer(var_01.owner)) + { + var_01.owner maps\mp\gametypes\_damagefeedback::updatedamagefeedback("remote_turret"); + } + + if(isdefined(var_09)) + { + switch(var_09) + { + case "remote_mortar_missile_mp": + case "javelin_mp": + case "stinger_mp": + case "remotemissile_projectile_mp": + case "ac130_40mm_mp": + case "ac130_105mm_mp": + self.largeprojectiledamage = 1; + var_0A = self.maxhealth + 1; + break; + + case "stealth_bomb_mp": + case "artillery_mp": + self.largeprojectiledamage = 0; + var_0A = var_0A + var_00 * 4; + break; + + case "emp_grenade_mp": + case "bomb_site_mp": + self.largeprojectiledamage = 0; + var_0A = self.maxhealth + 1; + break; + } + + maps\mp\killstreaks\_killstreaks::killstreakhit(var_01,var_09,self); + } + + self.damagetaken = self.damagetaken + var_0A; + if(self.damagetaken >= self.maxhealth) + { + if(isplayer(var_01) && !isdefined(self.owner) || var_01 != self.owner) + { + var_01 thread maps\mp\gametypes\_rank::func_2AB3("kill",100,var_09,var_04); + var_01 notify("destroyed_killstreak"); + } + + if(isdefined(self.owner)) + { + self.owner thread maps\mp\_utility::func_2A60(level.turretsettings[self.turrettype].vodestroyed); + } + + self notify("death"); + return; + } + } +} + +//Function Number: 34 +func_319B() +{ + self endon("death"); + level endon("game_ended"); + var_00 = 0; + for(;;) + { + if(self.damagefade < 1) + { + self.owner setplayerdata("remoteTurretDamageFade",self.damagefade); + self.damagefade = self.damagefade + 0.1; + var_00 = 1; + } + else if(var_00) + { + self.damagefade = 1; + self.owner setplayerdata("remoteTurretDamageFade",self.damagefade); + self.owner setplayerdata("remoteTurretDamaged",0); + var_00 = 0; + } + + wait 0.1; + } +} + +//Function Number: 35 +turret_watchlowhealth() +{ + self endon("death"); + level endon("game_ended"); + var_00 = 0.1; + var_01 = 1; + var_02 = 1; + for(;;) + { + if(var_02) + { + if(self.damagetaken > 0) + { + var_02 = 0; + self.owner setplayerdata("remoteTurretDamageState",var_01); + var_01++; + } + } + else if(self.damagetaken >= self.maxhealth * var_00 * var_01) + { + self.owner setplayerdata("remoteTurretDamageState",var_01); + var_01++; + } + + wait 0.05; + } +} + +//Function Number: 36 +turret_stun() +{ + self notify("stunned"); + self endon("stunned"); + self endon("death"); + while(self.stunned) + { + self.owner shellshock("concussion_grenade_mp",self.stunnedtime); + playfxontag(common_scripts\utility::func_539("sentry_explode_mp"),self,"tag_origin"); + var_00 = 0; + while(var_00 < self.stunnedtime) + { + var_00 = var_00 + 0.05; + wait 0.05; + } + + self.stunned = 0; + } +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/killstreaks/_remoteuav.gsc b/MW3/Xbox/MP/maps/mp/killstreaks/_remoteuav.gsc new file mode 100644 index 0000000..1cfdecc --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/killstreaks/_remoteuav.gsc @@ -0,0 +1,1776 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\killstreaks\_remoteuav.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 59 + * Decompile Time: 1090 ms + * Timestamp: 10/27/2023 2:27:22 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + precachemodel("vehicle_remote_uav"); + precachemodel("test_vehicle_little_bird_toy_placement"); + precachemodel("test_vehicle_little_bird_toy_placement_failed"); + if(level.console) + { + precachevehicle("remote_uav_mp"); + } + else + { + precachevehicle("remote_uav_mp_pc"); + } + + precacheitem("uav_remote_mp"); + precacheitem("killstreak_remote_uav_mp"); + precacheshader("veh_hud_target"); + precacheshader("veh_hud_target_marked"); + precacheshader("veh_hud_target_unmarked"); + precacheshader("compassping_sentry_enemy"); + precacheshader("compassping_enemy_uav"); + precacheshader("hud_fofbox_hostile_vehicle"); + precacherumble("damage_light"); + precachestring(&"MP_REMOTE_UAV_PLACE"); + precachestring(&"MP_REMOTE_UAV_CANNOT_PLACE"); + precachestring(&"SPLASHES_DESTROYED_REMOTE_UAV"); + precachestring(&"SPLASHES_MARKED_BY_REMOTE_UAV"); + precachestring(&"SPLASHES_REMOTE_UAV_MARKED"); + precachestring(&"SPLASHES_TURRET_MARKED_BY_REMOTE_UAV"); + precachestring(&"SPLASHES_REMOTE_UAV_ASSIST"); + level.remoteuav_fx["hit"] = loadfx("impacts/large_metal_painted_hit"); + level.remoteuav_fx["smoke"] = loadfx("smoke/remote_heli_damage_smoke_runner"); + level.remoteuav_fx["explode"] = loadfx("explosions/bouncing_betty_explosion"); + level.remoteuav_fx["missile_explode"] = loadfx("explosions/stinger_explosion"); + level.remoteuav_dialog["launch"][0] = "ac130_plt_yeahcleared"; + level.remoteuav_dialog["launch"][1] = "ac130_plt_rollinin"; + level.remoteuav_dialog["launch"][2] = "ac130_plt_scanrange"; + level.remoteuav_dialog["out_of_range"][0] = "ac130_plt_cleanup"; + level.remoteuav_dialog["out_of_range"][1] = "ac130_plt_targetreset"; + level.remoteuav_dialog["track"][0] = "ac130_fco_moreenemy"; + level.remoteuav_dialog["track"][1] = "ac130_fco_getthatguy"; + level.remoteuav_dialog["track"][2] = "ac130_fco_guymovin"; + level.remoteuav_dialog["track"][3] = "ac130_fco_getperson"; + level.remoteuav_dialog["track"][4] = "ac130_fco_guyrunnin"; + level.remoteuav_dialog["track"][5] = "ac130_fco_gotarunner"; + level.remoteuav_dialog["track"][6] = "ac130_fco_backonthose"; + level.remoteuav_dialog["track"][7] = "ac130_fco_gonnagethim"; + level.remoteuav_dialog["track"][8] = "ac130_fco_personnelthere"; + level.remoteuav_dialog["track"][9] = "ac130_fco_rightthere"; + level.remoteuav_dialog["track"][10] = "ac130_fco_tracking"; + level.remoteuav_dialog["tag"][0] = "ac130_fco_nice"; + level.remoteuav_dialog["tag"][1] = "ac130_fco_yougothim"; + level.remoteuav_dialog["tag"][2] = "ac130_fco_yougothim2"; + level.remoteuav_dialog["tag"][3] = "ac130_fco_okyougothim"; + level.remoteuav_dialog["assist"][0] = "ac130_fco_goodkill"; + level.remoteuav_dialog["assist"][1] = "ac130_fco_thatsahit"; + level.remoteuav_dialog["assist"][2] = "ac130_fco_directhit"; + level.remoteuav_dialog["assist"][3] = "ac130_fco_rightontarget"; + level.remoteuav_lastdialogtime = 0; + level.remoteuav_nodeployzones = getentarray("no_vehicles","targetname"); + level.killstreakfuncs["remote_uav"] = ::useremoteuav; + level.remote_uav = []; +} + +//Function Number: 2 +useremoteuav(param_00) +{ + return tryuseremoteuav(param_00,"remote_uav"); +} + +//Function Number: 3 +func_8241(param_00) +{ + if(level.gametype == "dm") + { + if(isdefined(level.remote_uav[param_00]) || isdefined(level.remote_uav[level.otherteam[param_00]])) + { + return 1; + } + + return 0; + } + + if(isdefined(level.remote_uav[param_00])) + { + return 1; + } + + return 0; +} + +//Function Number: 4 +tryuseremoteuav(param_00,param_01) +{ + common_scripts\utility::_disableusability(); + if(maps\mp\_utility::isusingremote() || self isusingturret() || isdefined(level.nukeincoming)) + { + common_scripts\utility::_enableusability(); + return 0; + } + + var_02 = 1; + if(func_8241(self.team) || level.littlebirds.size >= 4) + { + self iprintlnbold(&"MP_AIR_SPACE_TOO_CROWDED"); + common_scripts\utility::_enableusability(); + return 0; + } + else if(maps\mp\_utility::func_2BEC() >= maps\mp\_utility::maxvehiclesallowed() || level.fauxvehiclecount + var_02 >= maps\mp\_utility::maxvehiclesallowed()) + { + self iprintlnbold(&"MP_TOO_MANY_VEHICLES"); + common_scripts\utility::_enableusability(); + return 0; + } + + self setplayerdata("reconDroneState","staticAlpha",0); + self setplayerdata("reconDroneState","incomingMissile",0); + maps\mp\_utility::func_80C7(); + var_03 = givecarryremoteuav(param_00,param_01); + if(var_03) + { + maps\mp\_matchdata::logkillstreakevent(param_01,self.origin); + thread maps\mp\_utility::teamplayercardsplash("used_remote_uav",self); + } + else + { + maps\mp\_utility::func_80C8(); + } + + self.iscarrying = 0; + return var_03; +} + +//Function Number: 5 +givecarryremoteuav(param_00,param_01) +{ + var_02 = func_2C61(param_01,self); + self takeweapon("killstreak_uav_mp"); + maps\mp\_utility::_giveweapon("killstreak_remote_uav_mp"); + self switchtoweaponimmediate("killstreak_remote_uav_mp"); + setcarryingremoteuav(var_02); + if(isalive(self) && isdefined(var_02)) + { + var_03 = var_02.origin; + var_04 = self.angles; + var_02.var_8242 delete(); + var_02 delete(); + var_05 = func_2C6F(param_00,param_01,var_03,var_04); + } + else + { + var_05 = 0; + if(isalive(self)) + { + self takeweapon("killstreak_remote_uav_mp"); + maps\mp\_utility::_giveweapon("killstreak_uav_mp"); + } + } + + return var_05; +} + +//Function Number: 6 +func_2C61(param_00,param_01) +{ + var_02 = param_01.origin + anglestoforward(param_01.angles) * 4 + anglestoup(param_01.angles) * 50; + var_03 = spawnturret("misc_turret",var_02,"sentry_minigun_mp"); + var_03.origin = var_02; + var_03.angles = param_01.angles; + var_03.sentrytype = "sentry_minigun"; + var_03.canbeplaced = 1; + var_03 setturretmodechangewait(1); + var_03 setmode("sentry_offline"); + var_03 makeunusable(); + var_03 maketurretinoperable(); + var_03.owner = param_01; + var_03 setsentryowner(var_03.owner); + var_03.scale = 3; + var_03.var_2C64 = 0; + var_03 thread func_2C6D(); + var_03.rangetrigger = getent("remote_uav_range","targetname"); + if(!isdefined(var_03.rangetrigger)) + { + var_04 = getent("airstrikeheight","targetname"); + var_03.maxheight = var_04.origin[2]; + var_03.maxdistance = 3600; + } + + var_03.var_8242 = spawn("script_origin",var_03.origin); + var_03.var_8242.angles = var_03.angles; + var_03.var_8242.origin = var_03.origin; + var_03.var_8242 linkto(var_03); + var_03.var_8242 playloopsound("recondrone_idle_high"); + return var_03; +} + +//Function Number: 7 +setcarryingremoteuav(param_00) +{ + param_00 thread func_2C6A(self); + self notifyonplayercommand("place_carryRemoteUAV","+attack"); + self notifyonplayercommand("place_carryRemoteUAV","+attack_akimbo_accessible"); + self notifyonplayercommand("cancel_carryRemoteUAV","+actionslot 4"); + if(!level.console) + { + self notifyonplayercommand("cancel_carryRemoteUAV","+actionslot 5"); + self notifyonplayercommand("cancel_carryRemoteUAV","+actionslot 6"); + self notifyonplayercommand("cancel_carryRemoteUAV","+actionslot 7"); + } + + for(;;) + { + var_01 = local_waittill_any_return("place_carryRemoteUAV","cancel_carryRemoteUAV","weapon_switch_started","force_cancel_placement","death","disconnect"); + self forceusehintoff(); + if(var_01 != "place_carryRemoteUAV") + { + carryremoteuav_delete(param_00); + break; + } + + if(!param_00.canbeplaced) + { + if(self.team != "spectator") + { + self forceusehinton(&"MP_REMOTE_UAV_CANNOT_PLACE"); + } + + continue; + } + + if(isdefined(level.nukeincoming) || maps\mp\_utility::func_27E5() || func_8241(self.team) || maps\mp\_utility::func_2BEC() >= maps\mp\_utility::maxvehiclesallowed() || level.fauxvehiclecount >= maps\mp\_utility::maxvehiclesallowed()) + { + if(isdefined(level.nukeincoming) || maps\mp\_utility::func_27E5()) + { + self iprintlnbold(&"MP_UNAVAILABLE_FOR_N_WHEN_EMP",level.emptimeremaining); + } + else + { + self iprintlnbold(&"MP_TOO_MANY_VEHICLES"); + } + + carryremoteuav_delete(param_00); + break; + } + + self.iscarrying = 0; + param_00.carriedby = undefined; + param_00 playsound("sentry_gun_plant"); + param_00 notify("placed"); + break; + } +} + +//Function Number: 8 +local_waittill_any_return(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if((!isdefined(param_00) || param_00 != "death") && !isdefined(param_01) || param_01 != "death" && !isdefined(param_02) || param_02 != "death" && !isdefined(param_03) || param_03 != "death" && !isdefined(param_04) || param_04 != "death") + { + self endon("death"); + } + + var_06 = spawnstruct(); + if(isdefined(param_00)) + { + thread common_scripts\utility::waittill_string(param_00,var_06); + } + + if(isdefined(param_01)) + { + thread common_scripts\utility::waittill_string(param_01,var_06); + } + + if(isdefined(param_02)) + { + thread common_scripts\utility::waittill_string(param_02,var_06); + } + + if(isdefined(param_03)) + { + thread common_scripts\utility::waittill_string(param_03,var_06); + } + + if(isdefined(param_04)) + { + thread common_scripts\utility::waittill_string(param_04,var_06); + } + + if(isdefined(param_05)) + { + thread common_scripts\utility::waittill_string(param_05,var_06); + } + + var_06 waittill("returned",var_07); + var_06 notify("die"); + return var_07; +} + +//Function Number: 9 +func_2C6A(param_00) +{ + self setcandamage(0); + self setsentrycarrier(param_00); + self setcontents(0); + self.carriedby = param_00; + param_00.iscarrying = 1; + param_00 thread func_2C6C(self); + self notify("carried"); +} + +//Function Number: 10 +carryremoteuav_delete(param_00) +{ + self.iscarrying = 0; + if(isdefined(param_00)) + { + if(isdefined(param_00.var_8242)) + { + param_00.var_8242 delete(); + } + + param_00 delete(); + } +} + +//Function Number: 11 +func_2C6B() +{ + if(isdefined(level.remoteuav_nodeployzones) && level.remoteuav_nodeployzones.size) + { + foreach(var_01 in level.remoteuav_nodeployzones) + { + if(self istouching(var_01)) + { + return 1; + } + } + } + + return 0; +} + +//Function Number: 12 +func_2C6C(param_00) +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + param_00 endon("placed"); + param_00 endon("death"); + param_00.canbeplaced = 1; + var_01 = -1; + common_scripts\utility::_enableusability(); + for(;;) + { + var_02 = 18; + switch(self getstance()) + { + case "stand": + var_02 = 40; + break; + + case "crouch": + var_02 = 25; + break; + + case "prone": + var_02 = 10; + break; + } + + var_03 = self canplayerplacetank(22,22,50,var_02,0,0); + param_00.origin = var_03["origin"] + anglestoup(self.angles) * 27; + param_00.angles = var_03["angles"]; + param_00.canbeplaced = self isonground() && var_03["result"] && param_00 remoteuav_in_range() && !param_00 func_2C6B(); + if(param_00.canbeplaced != var_01) + { + if(param_00.canbeplaced) + { + if(self.team != "spectator") + { + self forceusehinton(&"MP_REMOTE_UAV_PLACE"); + } + + if(self attackbuttonpressed()) + { + self notify("place_carryRemoteUAV"); + } + } + else if(self.team != "spectator") + { + self forceusehinton(&"MP_REMOTE_UAV_CANNOT_PLACE"); + } + } + + var_01 = param_00.canbeplaced; + wait 0.05; + } +} + +//Function Number: 13 +func_2C6D() +{ + level endon("game_ended"); + self.owner endon("place_carryRemoteUAV"); + self.owner endon("cancel_carryRemoteUAV"); + self.owner common_scripts\utility::waittill_any("death","disconnect","joined_team","joined_spectators"); + if(isdefined(self)) + { + if(isdefined(self.var_8242)) + { + self.var_8242 delete(); + } + + self delete(); + } +} + +//Function Number: 14 +func_2C6E() +{ + level endon("game_ended"); + self endon("disconnect"); + wait 0.7; +} + +//Function Number: 15 +func_2C6F(param_00,param_01,param_02,param_03) +{ + lockplayerforremoteuavlaunch(); + maps\mp\_utility::setusingremote(param_01); + maps\mp\_utility::_giveweapon("uav_remote_mp"); + self switchtoweaponimmediate("uav_remote_mp"); + self visionsetnakedforplayer("black_bw",0); + var_04 = maps\mp\killstreaks\_killstreaks::initridekillstreak("remote_uav"); + if(var_04 != "success") + { + if(var_04 != "disconnect") + { + self notify("remoteuav_unlock"); + self takeweapon("uav_remote_mp"); + maps\mp\_utility::clearusingremote(); + } + + return 0; + } + + if(func_8241(self.team) || maps\mp\_utility::func_2BEC() >= maps\mp\_utility::maxvehiclesallowed() || level.fauxvehiclecount >= maps\mp\_utility::maxvehiclesallowed()) + { + self iprintlnbold(&"MP_TOO_MANY_VEHICLES"); + self notify("remoteuav_unlock"); + self takeweapon("uav_remote_mp"); + maps\mp\_utility::clearusingremote(); + return 0; + } + + self notify("remoteuav_unlock"); + var_05 = createremoteuav(param_00,self,param_01,param_02,param_03); + if(isdefined(var_05)) + { + thread func_2C7B(param_00,var_05,param_01); + return 1; + } + + self iprintlnbold(&"MP_TOO_MANY_VEHICLES"); + self takeweapon("uav_remote_mp"); + maps\mp\_utility::clearusingremote(); + return 0; +} + +//Function Number: 16 +remoteuav_clearrideintro() +{ + if(isdefined(level.nukedetonated)) + { + self visionsetnakedforplayer(level.nukevisionset,0); + return; + } + + self visionsetnakedforplayer("",0); +} + +//Function Number: 17 +lockplayerforremoteuavlaunch() +{ + var_00 = spawn("script_origin",self.origin); + var_00 hide(); + self playerlinkto(var_00); + thread clearplayerlockfromremoteuavlaunch(var_00); +} + +//Function Number: 18 +clearplayerlockfromremoteuavlaunch(param_00) +{ + level endon("game_ended"); + var_01 = common_scripts\utility::waittill_any_return("disconnect","death","remoteuav_unlock"); + if(var_01 != "disconnect") + { + self unlink(); + } + + param_00 delete(); +} + +//Function Number: 19 +createremoteuav(param_00,param_01,param_02,param_03,param_04) +{ + if(level.console) + { + var_05 = spawnhelicopter(param_01,param_03,param_04,"remote_uav_mp","vehicle_remote_uav"); + } + else + { + var_05 = spawnhelicopter(param_02,param_04,var_05,"remote_uav_mp_pc","vehicle_remote_uav"); + } + + if(!isdefined(var_05)) + { + return undefined; + } + + var_05 maps\mp\killstreaks\_helicopter::func_2C4A(); + var_05 thread maps\mp\killstreaks\_helicopter::func_2C4B(); + var_05 makevehiclesolidcapsule(18,-9,18); + var_05.lifeid = param_00; + var_05.team = param_01.team; + var_05.pers["team"] = param_01.team; + var_05.owner = param_01; + var_05.health = 999999; + var_05.maxhealth = 250; + var_05.damagetaken = 0; + var_05.destroyed = 0; + var_05 setcandamage(1); + var_05.specialdamagecallback = ::callback_vehicledamage; + var_05.scrambler = spawn("script_model",param_03); + var_05.scrambler linkto(var_05,"tag_origin",(0,0,-160),(0,0,0)); + var_05.scrambler makescrambler(param_01); + var_05.smoking = 0; + var_05.var_2C64 = 0; + var_05.helitype = "remote_uav"; + var_05.markedplayers = []; + var_05 thread remoteuav_light_fx(); + var_05 thread func_2CA0(); + var_05 thread func_2CA1(); + var_05 thread func_2CA5(); + var_05 thread func_2CA2(); + var_05 thread remoteuav_leave_on_timeout(); + var_05 thread func_2C99(); + var_05 thread remoteuav_watchheliproximity(); + var_05 thread func_2CAD(); + var_05.numflares = 2; + var_05.hasincoming = 0; + var_05.incomingmissiles = []; + var_05 thread func_2CAA(); + var_05 thread remoteuav_handleincomingstinger(); + var_05 thread func_2CA9(); + level.remote_uav[var_05.team] = var_05; + return var_05; +} + +//Function Number: 20 +func_2C7B(param_00,param_01,param_02) +{ + param_01.playerlinked = 1; + self.restoreangles = self.angles; + if(getdvarint("camera_thirdPerson")) + { + maps\mp\_utility::setthirdpersondof(0); + } + + if(maps\mp\_utility::isjuggernaut() && isdefined(self.juggernautoverlay)) + { + self.juggernautoverlay.alpha = 0; + } + + if(isdefined(self.haslightarmor) && isdefined(self.combathighoverlay)) + { + self.combathighoverlay.alpha = 0; + } + + self cameralinkto(param_01,"tag_origin"); + self remotecontrolvehicle(param_01); + thread func_2C84(param_01); + thread remoteuav_track(param_01); + thread func_2C8E(param_01); + self.var_2C7F = param_00; + self.remoteuav = param_01; + thread func_2C81(param_01); + self visionsetnakedforplayer("black_bw",0); + if(isdefined(level.nukedetonated)) + { + self visionsetnakedforplayer(level.nukevisionset,1); + return; + } + + self visionsetnakedforplayer("",1); +} + +//Function Number: 21 +func_2C81(param_00) +{ + level endon("game_ended"); + self endon("disconnect"); + param_00 endon("death"); + param_00 endon("end_remote"); + param_00 endon("end_launch_dialog"); + wait 3; + remoteuav_dialog("launch"); +} + +//Function Number: 22 +remoteuav_endride(param_00) +{ + if(isdefined(param_00)) + { + param_00.playerlinked = 0; + param_00 notify("end_remote"); + maps\mp\_utility::clearusingremote(); + if(getdvarint("camera_thirdPerson")) + { + maps\mp\_utility::setthirdpersondof(1); + } + + if(maps\mp\_utility::isjuggernaut() && isdefined(self.juggernautoverlay)) + { + self.juggernautoverlay.alpha = 1; + } + + if(isdefined(self.haslightarmor) && isdefined(self.combathighoverlay)) + { + self.combathighoverlay.alpha = 1; + } + + self cameraunlink(param_00); + self remotecontrolvehicleoff(param_00); + self thermalvisionoff(); + self setplayerangles(self.restoreangles); + self switchtoweapon(common_scripts\utility::getlastweapon()); + self takeweapon("uav_remote_mp"); + thread remoteuav_freezebuffer(); + } + + self.remoteuav = undefined; +} + +//Function Number: 23 +remoteuav_freezebuffer() +{ + self endon("disconnect"); + self endon("death"); + level endon("game_ended"); + maps\mp\_utility::freezecontrolswrapper(1); + wait 0.5; + maps\mp\_utility::freezecontrolswrapper(0); +} + +//Function Number: 24 +func_2C84(param_00) +{ + level endon("game_ended"); + self endon("disconnect"); + param_00 endon("death"); + param_00 endon("end_remote"); + wait 2; + for(;;) + { + var_01 = 0; + while(self usebuttonpressed()) + { + var_01 = var_01 + 0.05; + if(var_01 > 0.75) + { + param_00 thread func_2CA4(); + return; + } + + wait 0.05; + } + + wait 0.05; + } +} + +//Function Number: 25 +remoteuav_track(param_00) +{ + level endon("game_ended"); + self endon("disconnect"); + param_00 endon("death"); + param_00 endon("end_remote"); + param_00.lasttrackingdialogtime = 0; + self.lockedtarget = undefined; + self weaponlockfree(); + wait 1; + for(;;) + { + var_01 = param_00 gettagorigin("tag_turret"); + var_02 = anglestoforward(self getplayerangles()); + var_03 = var_01 + var_02 * 1024; + var_04 = bullettrace(var_01,var_03,1,param_00); + if(isdefined(var_04["position"])) + { + var_05 = var_04["position"]; + } + else + { + var_05 = var_03; + var_04["endpos"] = var_03; + } + + param_00.trace = var_04; + var_06 = func_2C89(param_00,level.players,var_05); + var_07 = func_2C89(param_00,level.turrets,var_05); + var_08 = undefined; + if(level.teambased) + { + var_08 = func_2C89(param_00,level.uavmodels[level.otherteam[self.team]],var_05); + } + else + { + var_08 = func_2C89(param_00,level.uavmodels,var_05); + } + + var_09 = undefined; + if(isdefined(var_06)) + { + var_09 = var_06; + } + else if(isdefined(var_07)) + { + var_09 = var_07; + } + else if(isdefined(var_08)) + { + var_09 = var_08; + } + + if(isdefined(var_09)) + { + if(!isdefined(self.lockedtarget) || isdefined(self.lockedtarget) && self.lockedtarget != var_09) + { + self weaponlockfinalize(var_09); + self.lockedtarget = var_09; + if(isdefined(var_06)) + { + param_00 notify("end_launch_dialog"); + remoteuav_dialog("track"); + } + } + } + else + { + self weaponlockfree(); + self.lockedtarget = undefined; + } + + wait 0.05; + } +} + +//Function Number: 26 +func_2C89(param_00,param_01,param_02) +{ + level endon("game_ended"); + var_03 = undefined; + foreach(var_05 in param_01) + { + if(level.teambased && !isdefined(var_05.team) || var_05.team == self.team) + { + continue; + } + + if(isplayer(var_05)) + { + if(!maps\mp\_utility::isreallyalive(var_05)) + { + continue; + } + + if(var_05 == self) + { + continue; + } + + var_06 = var_05.guid; + } + else + { + var_06 = var_05.birthtime; + } + + if(isdefined(var_05.sentrytype) || isdefined(var_05.turrettype)) + { + var_07 = (0,0,32); + var_08 = "hud_fofbox_hostile_vehicle"; + } + else if(isdefined(var_05.uavtype)) + { + var_07 = (0,0,-52); + var_08 = "hud_fofbox_hostile_vehicle"; + } + else + { + var_07 = (0,0,26); + var_08 = "veh_hud_target_unmarked"; + } + + if(isdefined(var_05.uavremotemarkedby)) + { + if(!isdefined(param_00.markedplayers[var_06])) + { + param_00.markedplayers[var_06] = []; + param_00.markedplayers[var_06]["player"] = var_05; + param_00.markedplayers[var_06]["icon"] = var_05 maps\mp\_entityheadicons::func_277C(self,"veh_hud_target_marked",var_07,10,10,0,0.05,0,0,0,0); + param_00.markedplayers[var_06]["icon"].shader = "veh_hud_target_marked"; + if(!isdefined(var_05.sentrytype) || !isdefined(var_05.turrettype)) + { + param_00.markedplayers[var_06]["icon"] settargetent(var_05); + } + } + else if(isdefined(param_00.markedplayers[var_06]) && isdefined(param_00.markedplayers[var_06]["icon"]) && isdefined(param_00.markedplayers[var_06]["icon"].shader) && param_00.markedplayers[var_06]["icon"].shader != "veh_hud_target_marked") + { + param_00.markedplayers[var_06]["icon"].shader = "veh_hud_target_marked"; + param_00.markedplayers[var_06]["icon"] setshader("veh_hud_target_marked",10,10); + param_00.markedplayers[var_06]["icon"] setwaypoint(0,0,0,0); + } + + continue; + } + + if(isplayer(var_05)) + { + var_09 = isdefined(var_05.spawntime) && gettime() - var_05.spawntime / 1000 <= 5; + var_0A = var_05 maps\mp\_utility::func_27AF("specialty_blindeye"); + var_0B = 0; + var_0C = 0; + } + else + { + var_09 = 0; + var_0A = 0; + var_0B = isdefined(var_07.carriedby); + var_0C = isdefined(var_06.isleaving) && var_06.isleaving == 1; + } + + if(!isdefined(param_00.markedplayers[var_06]) && !var_09 && !var_0A && !var_0B && !var_0C) + { + param_00.markedplayers[var_06] = []; + param_00.markedplayers[var_06]["player"] = var_05; + param_00.markedplayers[var_06]["icon"] = var_05 maps\mp\_entityheadicons::func_277C(self,var_08,var_07,10,10,0,0.05,0,0,0,0); + param_00.markedplayers[var_06]["icon"].shader = var_08; + if(!isdefined(var_05.sentrytype) || !isdefined(var_05.turrettype)) + { + param_00.markedplayers[var_06]["icon"] settargetent(var_05); + } + } + + if(((!isdefined(var_03) || var_03 != var_05) && isdefined(param_00.trace["entity"]) && param_00.trace["entity"] == var_05 && !var_0B && !var_0C) || distance(var_05.origin,param_02) < 200 * param_00.trace["fraction"] && !var_09 && !var_0B && !var_0C || !var_0C && func_2C8D(param_00,var_05)) + { + var_0D = bullettrace(param_00.origin,var_05.origin + (0,0,32),1,param_00); + if((isdefined(var_0D["entity"]) && var_0D["entity"] == var_05) || var_0D["fraction"] == 1) + { + self playlocalsound("recondrone_lockon"); + var_03 = var_05; + } + } + } + + return var_03; +} + +//Function Number: 27 +func_2C8D(param_00,param_01) +{ + if(isdefined(param_01.uavtype)) + { + var_02 = anglestoforward(self getplayerangles()); + var_03 = vectornormalize(param_01.origin - param_00 gettagorigin("tag_turret")); + var_04 = vectordot(var_02,var_03); + if(var_04 > 0.985) + { + return 1; + } + } + + return 0; +} + +//Function Number: 28 +func_2C8E(param_00) +{ + self endon("disconnect"); + param_00 endon("death"); + level endon("game_ended"); + param_00 endon("end_remote"); + wait 1; + self notifyonplayercommand("remoteUAV_tag","+attack"); + self notifyonplayercommand("remoteUAV_tag","+attack_akimbo_accessible"); + for(;;) + { + self waittill("remoteUAV_tag"); + if(isdefined(self.lockedtarget)) + { + self playlocalsound("recondrone_tag"); + maps\mp\gametypes\_damagefeedback::updatedamagefeedback(""); + thread remoteuav_markplayer(self.lockedtarget); + thread func_2C8F(param_00,3); + wait 0.25; + continue; + } + + wait 0.05; + } +} + +//Function Number: 29 +func_2C8F(param_00,param_01) +{ + self endon("disconnect"); + param_00 endon("death"); + level endon("game_ended"); + param_00 endon("end_remote"); + param_00 notify("end_rumble"); + param_00 endon("end_rumble"); + for(var_02 = 0;var_02 < param_01;var_02++) + { + self playrumbleonentity("damage_heavy"); + wait 0.05; + } +} + +//Function Number: 30 +remoteuav_markplayer(param_00) +{ + level endon("game_ended"); + param_00.uavremotemarkedby = self; + if(isplayer(param_00) && !param_00 maps\mp\_utility::isusingremote()) + { + param_00 playlocalsound("player_hit_while_ads_hurt"); + param_00 thread maps\mp\_flashgrenades::func_27AA(2,1); + param_00 thread maps\mp\gametypes\_rank::xpeventpopup(&"SPLASHES_MARKED_BY_REMOTE_UAV"); + } + else if(isdefined(param_00.uavtype)) + { + param_00.birth_time = param_00.birthtime; + } + else if(isdefined(param_00.owner) && isalive(param_00.owner)) + { + param_00.owner thread maps\mp\gametypes\_rank::xpeventpopup(&"SPLASHES_TURRET_MARKED_BY_REMOTE_UAV"); + } + + remoteuav_dialog("tag"); + thread maps\mp\gametypes\_rank::xpeventpopup(&"SPLASHES_REMOTE_UAV_MARKED"); + if(level.gametype != "dm") + { + if(isplayer(param_00)) + { + maps\mp\gametypes\_gamescore::func_26D3("kill",self,undefined,1); + thread maps\mp\gametypes\_rank::func_2AB3("kill"); + } + } + + if(isplayer(param_00)) + { + param_00 setperk("specialty_radarblip",1,0); + } + else + { + if(isdefined(param_00.uavtype)) + { + var_01 = "compassping_enemy_uav"; + } + else + { + var_01 = "compassping_sentry_enemy"; + } + + if(level.teambased) + { + var_02 = maps\mp\gametypes\_gameobjects::func_2A31(); + objective_add(var_02,"invisible",(0,0,0)); + objective_onentity(var_02,param_00); + objective_state(var_02,"active"); + objective_team(var_02,self.team); + objective_icon(var_02,var_01); + param_00.remoteuavmarkedobjid01 = var_02; + } + else + { + var_02 = maps\mp\gametypes\_gameobjects::func_2A31(); + objective_add(var_02,"invisible",(0,0,0)); + objective_onentity(var_02,param_00); + objective_state(var_02,"active"); + objective_team(var_02,level.otherteam[self.team]); + objective_icon(var_02,var_01); + param_00.remoteuavmarkedobjid02 = var_02; + var_02 = maps\mp\gametypes\_gameobjects::func_2A31(); + objective_add(var_02,"invisible",(0,0,0)); + objective_onentity(var_02,param_00); + objective_state(var_02,"active"); + objective_team(var_02,self.team); + objective_icon(var_02,var_01); + param_00.remoteuavmarkedobjid03 = var_02; + } + } + + param_00 thread func_2C96(self.remoteuav); +} + +//Function Number: 31 +remoteuav_processtaggedassist(param_00) +{ + remoteuav_dialog("assist"); + thread maps\mp\gametypes\_rank::xpeventpopup(&"SPLASHES_REMOTE_UAV_ASSIST"); + if(level.gametype != "dm") + { + self.taggedassist = 1; + if(isdefined(param_00)) + { + thread maps\mp\gametypes\_gamescore::func_26F9(param_00); + return; + } + + maps\mp\gametypes\_gamescore::func_26D3("assist",self,undefined,1); + thread maps\mp\gametypes\_rank::func_2AB3("assist"); + } +} + +//Function Number: 32 +func_2C96(param_00) +{ + level endon("game_ended"); + var_01 = common_scripts\utility::waittill_any_return("death","disconnect","carried","leaving"); + if(var_01 == "leaving" || !isdefined(self.uavtype)) + { + self.uavremotemarkedby = undefined; + } + + if(isdefined(param_00)) + { + if(isplayer(self)) + { + var_02 = self.guid; + } + else if(isdefined(self.birthtime)) + { + var_02 = self.birthtime; + } + else + { + var_02 = self.birth_time; + } + + if(var_01 == "carried" || var_01 == "leaving") + { + param_00.markedplayers[var_02]["icon"] destroy(); + param_00.markedplayers[var_02]["icon"] = undefined; + } + + if(isdefined(var_02) && isdefined(param_00.markedplayers[var_02])) + { + param_00.markedplayers[var_02] = undefined; + param_00.markedplayers = common_scripts\utility::array_removeundefined(param_00.markedplayers); + } + } + + if(isplayer(self)) + { + self unsetperk("specialty_radarblip",1); + return; + } + + if(isdefined(self.remoteuavmarkedobjid01)) + { + maps\mp\_utility::_objective_delete(self.remoteuavmarkedobjid01); + } + + if(isdefined(self.remoteuavmarkedobjid02)) + { + maps\mp\_utility::_objective_delete(self.remoteuavmarkedobjid02); + } + + if(isdefined(self.remoteuavmarkedobjid03)) + { + maps\mp\_utility::_objective_delete(self.remoteuavmarkedobjid03); + } +} + +//Function Number: 33 +remoteuav_clearmarkedforowner() +{ + foreach(var_01 in self.markedplayers) + { + if(isdefined(var_01["icon"])) + { + var_01["icon"] destroy(); + var_01["icon"] = undefined; + } + } + + self.markedplayers = undefined; +} + +//Function Number: 34 +remoteuav_operationrumble(param_00) +{ + self endon("disconnect"); + param_00 endon("death"); + level endon("game_ended"); + param_00 endon("end_remote"); + for(;;) + { + self playrumbleonentity("damage_light"); + wait 0.5; + } +} + +//Function Number: 35 +func_2C99() +{ + self endon("death"); + self.rangetrigger = getent("remote_uav_range","targetname"); + if(!isdefined(self.rangetrigger)) + { + var_00 = getent("airstrikeheight","targetname"); + self.maxheight = var_00.origin[2]; + self.maxdistance = 12800; + } + + self.centerref = spawn("script_model",level.mapcenter); + var_01 = self.origin; + self.var_2C9B = 0; + for(;;) + { + if(!remoteuav_in_range()) + { + var_02 = 0; + while(!remoteuav_in_range()) + { + self.owner remoteuav_dialog("out_of_range"); + if(!self.var_2C9B) + { + self.var_2C9B = 1; + thread remoteuav_rangecountdown(); + } + + if(isdefined(self.heliinproximity)) + { + var_03 = distance(self.origin,self.heliinproximity.origin); + var_02 = 1 - var_03 - 150 / 150; + } + else + { + var_03 = distance(self.origin,var_01); + var_02 = min(1,var_03 / 200); + } + + self.owner setplayerdata("reconDroneState","staticAlpha",var_02); + wait 0.05; + } + + self notify("in_range"); + self.var_2C9B = 0; + thread remoteuav_staticfade(var_02); + } + + var_01 = self.origin; + wait 0.05; + } +} + +//Function Number: 36 +remoteuav_in_range() +{ + if(isdefined(self.rangetrigger)) + { + if(!self istouching(self.rangetrigger) && !self.var_2C64) + { + return 1; + } + } + else if(distance2d(self.origin,level.mapcenter) < self.maxdistance && self.origin[2] < self.maxheight && !self.var_2C64) + { + return 1; + } + + return 0; +} + +//Function Number: 37 +remoteuav_staticfade(param_00) +{ + self endon("death"); + while(remoteuav_in_range()) + { + param_00 = param_00 - 0.05; + if(param_00 < 0) + { + self.owner setplayerdata("reconDroneState","staticAlpha",0); + break; + } + + self.owner setplayerdata("reconDroneState","staticAlpha",param_00); + wait 0.05; + } +} + +//Function Number: 38 +remoteuav_rangecountdown() +{ + self endon("death"); + self endon("in_range"); + if(isdefined(self.heliinproximity)) + { + var_00 = 3; + } + else + { + var_00 = 6; + } + + maps\mp\gametypes\_hostmigration::func_2740(var_00); + self notify("death"); +} + +//Function Number: 39 +func_2CA0() +{ + self endon("death"); + self.owner waittill("disconnect"); + self notify("death"); +} + +//Function Number: 40 +func_2CA1() +{ + self endon("death"); + self.owner common_scripts\utility::waittill_any("joined_team","joined_spectators"); + self notify("death"); +} + +//Function Number: 41 +func_2CA2() +{ + self endon("death"); + level waittill("game_ended"); + remoteuav_clearmarkedforowner(); +} + +//Function Number: 42 +remoteuav_leave_on_timeout() +{ + self endon("death"); + var_00 = 60; + maps\mp\gametypes\_hostmigration::func_2740(var_00); + thread func_2CA4(); +} + +//Function Number: 43 +func_2CA4() +{ + level endon("game_ended"); + self endon("death"); + self notify("leaving"); + self.owner remoteuav_endride(self); + self notify("death"); +} + +//Function Number: 44 +func_2CA5() +{ + level endon("game_ended"); + self waittill("death"); + self playsound("recondrone_destroyed"); + playfx(level.remoteuav_fx["explode"],self.origin); + remoteuav_cleanup(); +} + +//Function Number: 45 +remoteuav_cleanup() +{ + if(self.playerlinked == 1 && isdefined(self.owner)) + { + self.owner remoteuav_endride(self); + } + + if(isdefined(self.scrambler)) + { + self.scrambler delete(); + } + + if(isdefined(self.centerref)) + { + self.centerref delete(); + } + + remoteuav_clearmarkedforowner(); + stopfxontag(level.remoteuav_fx["smoke"],self,"tag_origin"); + level.remote_uav[self.team] = undefined; + maps\mp\_utility::func_80C8(); + self delete(); +} + +//Function Number: 46 +remoteuav_light_fx() +{ + playfxontag(level.chopper_fx["light"]["belly"],self,"tag_light_nose"); + wait 0.05; + playfxontag(level.chopper_fx["light"]["tail"],self,"tag_light_tail1"); +} + +//Function Number: 47 +remoteuav_dialog(param_00) +{ + if(param_00 == "tag") + { + var_01 = 1000; + } + else + { + var_01 = 5000; + } + + if(gettime() - level.remoteuav_lastdialogtime < var_01) + { + return; + } + + level.remoteuav_lastdialogtime = gettime(); + var_02 = randomint(level.remoteuav_dialog[param_00].size); + var_03 = level.remoteuav_dialog[param_00][var_02]; + var_04 = maps\mp\gametypes\_teams::getteamvoiceprefix(self.team) + var_03; + self playlocalsound(var_04); +} + +//Function Number: 48 +remoteuav_handleincomingstinger() +{ + level endon("game_ended"); + self endon("death"); + self endon("end_remote"); + for(;;) + { + level waittill("stinger_fired",var_00,var_01,var_02); + if(!isdefined(var_01) || !isdefined(var_02) || var_02 != self) + { + continue; + } + + self.owner playlocalsound("javelin_clu_lock"); + self.owner setplayerdata("reconDroneState","incomingMissile",1); + self.hasincoming = 1; + self.incomingmissiles[self.incomingmissiles.size] = var_01; + var_01.owner = var_00; + var_01 thread func_2C52(var_02); + } +} + +//Function Number: 49 +func_2CA9() +{ + level endon("game_ended"); + self endon("death"); + self endon("end_remote"); + for(;;) + { + level waittill("sam_fired",var_00,var_01,var_02); + if(!isdefined(var_02) || var_02 != self) + { + continue; + } + + var_03 = 0; + foreach(var_05 in var_01) + { + if(isdefined(var_05)) + { + self.incomingmissiles[self.incomingmissiles.size] = var_05; + var_05.owner = var_00; + var_03++; + } + } + + if(var_03) + { + self.owner playlocalsound("javelin_clu_lock"); + self.owner setplayerdata("reconDroneState","incomingMissile",1); + self.hasincoming = 1; + level thread watchsamproximity(var_02,var_01); + } + } +} + +//Function Number: 50 +func_2C52(param_00) +{ + level endon("game_ended"); + self endon("death"); + self missile_settargetent(param_00); + var_01 = vectornormalize(param_00.origin - self.origin); + while(isdefined(param_00)) + { + var_02 = param_00 getpointinbounds(0,0,0); + var_03 = distance(self.origin,var_02); + if(param_00.numflares > 0 && var_03 < 4000) + { + var_04 = param_00 deployflares(); + self missile_settargetent(var_04); + return; + } + else + { + var_04 = vectornormalize(var_01.origin - self.origin); + if(vectordot(var_04,var_02) < 0) + { + self playsound("exp_stinger_armor_destroy"); + playfx(level.remoteuav_fx["missile_explode"],self.origin); + if(isdefined(self.owner)) + { + radiusdamage(self.origin,400,1000,1000,self.owner,"MOD_EXPLOSIVE","stinger_mp"); + } + else + { + radiusdamage(self.origin,400,1000,1000,undefined,"MOD_EXPLOSIVE","stinger_mp"); + } + + self hide(); + wait 0.05; + self delete(); + continue; + } + + var_02 = var_04; + } + + wait 0.05; + } +} + +//Function Number: 51 +watchsamproximity(param_00,param_01) +{ + level endon("game_ended"); + param_00 endon("death"); + foreach(var_03 in param_01) + { + if(isdefined(var_03)) + { + var_03 missile_settargetent(param_00); + var_03.lastvectotarget = vectornormalize(param_00.origin - var_03.origin); + } + } + + while(param_01.size && isdefined(param_00)) + { + var_05 = param_00 getpointinbounds(0,0,0); + foreach(var_0D, var_03 in param_01) + { + if(isdefined(var_03)) + { + if(isdefined(self.markfordetete)) + { + self delete(); + continue; + } + + if(param_00.numflares > 0) + { + var_07 = distance(var_03.origin,var_05); + if(var_07 < 4000) + { + var_08 = param_00 deployflares(); + foreach(var_0A in param_01) + { + if(isdefined(var_0A)) + { + var_0A missile_settargetent(var_08); + } + } + + return; + } + + continue; + } + + var_0C = vectornormalize(var_04.origin - var_0D.origin); + if(vectordot(var_0C,var_0D.lastvectotarget) < 0) + { + var_0D playsound("exp_stinger_armor_destroy"); + playfx(level.remoteuav_fx["missile_explode"],var_0D.origin); + if(isdefined(var_0D.owner)) + { + radiusdamage(var_0D.origin,400,1000,1000,var_0D.owner,"MOD_EXPLOSIVE","stinger_mp"); + } + else + { + radiusdamage(var_0D.origin,400,1000,1000,undefined,"MOD_EXPLOSIVE","stinger_mp"); + } + + var_0D hide(); + var_0D.markfordetete = 1; + } + else + { + var_0D.lastvectotarget = var_0C; + } + } + } + + var_05 = common_scripts\utility::array_removeundefined(var_05); + wait 0.05; + } +} + +//Function Number: 52 +deployflares() +{ + self.numflares--; + self.owner thread func_2C8F(self,6); + self playsound("WEAP_SHOTGUNATTACH_FIRE_NPC"); + thread func_2C4D(); + var_00 = self.origin + (0,0,-100); + var_01 = spawn("script_origin",var_00); + var_01.angles = self.angles; + var_01 movegravity((0,0,-1),5); + var_01 thread func_2C55(5); + return var_01; +} + +//Function Number: 53 +func_2C4D() +{ + for(var_00 = 0;var_00 < 5;var_00++) + { + if(!isdefined(self)) + { + return; + } + + playfxontag(level._effect["ac130_flare"],self,"TAG_FLARE"); + wait 0.15; + } +} + +//Function Number: 54 +func_2C55(param_00) +{ + wait param_00; + self delete(); +} + +//Function Number: 55 +func_2CAA() +{ + level endon("game_ended"); + self endon("death"); + self endon("end_remote"); + for(;;) + { + var_00 = 0; + for(var_01 = 0;var_01 < self.incomingmissiles.size;var_01++) + { + if(isdefined(self.incomingmissiles[var_01]) && missile_isincoming(self.incomingmissiles[var_01],self)) + { + var_00++; + } + } + + if(self.hasincoming && !var_00) + { + self.hasincoming = 0; + self.owner setplayerdata("reconDroneState","incomingMissile",0); + } + + self.incomingmissiles = common_scripts\utility::array_removeundefined(self.incomingmissiles); + wait 0.05; + } +} + +//Function Number: 56 +missile_isincoming(param_00,param_01) +{ + var_02 = vectornormalize(param_01.origin - param_00.origin); + var_03 = anglestoforward(param_00.angles); + return vectordot(var_02,var_03) > 0; +} + +//Function Number: 57 +remoteuav_watchheliproximity() +{ + level endon("game_ended"); + self endon("death"); + self endon("end_remote"); + for(;;) + { + var_00 = 0; + foreach(var_02 in level.helis) + { + if(distance(var_02.origin,self.origin) < 300) + { + var_00 = 1; + self.heliinproximity = var_02; + } + } + + foreach(var_05 in level.littlebirds) + { + if(var_05 != self && !isdefined(var_05.helitype) || var_05.helitype != "remote_uav" && distance(var_05.origin,self.origin) < 300) + { + var_00 = 1; + self.heliinproximity = var_05; + } + } + + if(!self.var_2C64 && var_00) + { + self.var_2C64 = 1; + } + else if(self.var_2C64 && !var_00) + { + self.var_2C64 = 0; + self.heliinproximity = undefined; + } + + wait 0.05; + } +} + +//Function Number: 58 +func_2CAD() +{ + level endon("game_ended"); + self endon("death"); + self endon("end_remote"); + for(;;) + { + self waittill("damage",var_00,var_01,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09); + if(isdefined(self.specialdamagecallback)) + { + self [[ self.specialdamagecallback ]](undefined,var_01,var_00,var_08,var_04,var_09,var_03,var_02,undefined,undefined,var_05,var_07); + } + } +} + +//Function Number: 59 +callback_vehicledamage(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A,param_0B) +{ + if(self.destroyed == 1) + { + return; + } + + var_0C = self.team; + if(isdefined(param_01.team)) + { + var_0D = param_01.team; + } + else + { + var_0D = "none"; + } + + if(!isdefined(param_01) || param_01 != self.owner && level.teambased && var_0D == var_0C) + { + return; + } + + if(isdefined(param_03) && param_03 & level.idflags_penetration) + { + self.wasdamagedfrombulletpenetration = 1; + } + + var_0E = param_02; + if(isplayer(param_01)) + { + param_01 maps\mp\gametypes\_damagefeedback::updatedamagefeedback("remote_uav"); + if(param_01 maps\mp\_utility::func_27AF("specialty_armorpiercing")) + { + var_0E = param_02 * level.armorpiercingmod; + } + } + + if(isdefined(param_01.owner) && isplayer(param_01.owner)) + { + param_01.owner maps\mp\gametypes\_damagefeedback::updatedamagefeedback("remote_uav"); + } + + if(isdefined(param_05)) + { + switch(param_05) + { + case "remote_mortar_missile_mp": + case "javelin_mp": + case "stinger_mp": + case "remotemissile_projectile_mp": + case "ac130_40mm_mp": + case "ac130_105mm_mp": + self.largeprojectiledamage = 1; + var_0E = self.maxhealth + 1; + break; + + case "emp_grenade_mp": + case "bomb_site_mp": + self.largeprojectiledamage = 0; + var_0E = self.maxhealth + 1; + break; + } + + maps\mp\killstreaks\_killstreaks::killstreakhit(param_01,param_05,self); + } + + if(isdefined(param_04) && param_04 == "MOD_MELEE") + { + var_0E = self.maxhealth + 1; + } + + self.damagetaken = self.damagetaken + var_0E; + playfxontagforclients(level.remoteuav_fx["hit"],self,"tag_origin",self.owner); + self playsound("recondrone_damaged"); + if(self.smoking == 0 && self.damagetaken >= self.maxhealth / 2) + { + self.smoking = 1; + playfxontag(level.remoteuav_fx["smoke"],self,"tag_origin"); + } + + if(self.damagetaken >= self.maxhealth && (level.teambased && var_0C != var_0D) || !level.teambased) + { + self.destroyed = 1; + var_0F = undefined; + if(isdefined(param_01.owner) && !isdefined(self.owner) || param_01.owner != self.owner) + { + var_0F = param_01.owner; + } + else if(!isdefined(self.owner) || param_01 != self.owner) + { + var_0F = param_01; + } + + if(!isdefined(param_01.owner) && param_01.classname == "script_vehicle") + { + var_0F = undefined; + } + + if(isdefined(param_01.class) && param_01.class == "worldspawn") + { + var_0F = undefined; + } + + if(param_01.classname == "trigger_hurt") + { + var_0F = undefined; + } + + if(isdefined(var_0F)) + { + var_0F notify("destroyed_killstreak",param_05); + thread maps\mp\_utility::teamplayercardsplash("callout_destroyed_remote_uav",var_0F); + var_0F thread maps\mp\gametypes\_rank::func_2AB3("kill",50,param_05,param_04); + var_0F thread maps\mp\gametypes\_rank::xpeventpopup(&"SPLASHES_DESTROYED_REMOTE_UAV"); + thread maps\mp\gametypes\_missions::vehiclekilled(self.owner,self,undefined,var_0F,param_02,param_04,param_05); + } + + self notify("death"); + } +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/killstreaks/_tank.gsc b/MW3/Xbox/MP/maps/mp/killstreaks/_tank.gsc new file mode 100644 index 0000000..fbc89a9 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/killstreaks/_tank.gsc @@ -0,0 +1,2141 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\killstreaks\_tank.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 80 + * Decompile Time: 1355 ms + * Timestamp: 10/27/2023 2:29:03 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ +} + +//Function Number: 2 +func_3393(param_00,param_01,param_02) +{ + var_03 = self vehicle_dospawn("tank",param_00); + var_03.health = 3000; + var_03.targeting_delay = 1; + var_03.team = param_00.team; + var_03.pers["team"] = var_03.team; + var_03.owner = param_00; + var_03 setcandamage(1); + var_03.standardspeed = 12; + var_03 thread func_3395(); + var_03 addtotanklist(); + var_03.damagecallback = ::callback_vehicledamage; + return var_03; +} + +//Function Number: 3 +func_3395() +{ + self endon("death"); + var_00 = self.origin[2]; + for(;;) + { + if(var_00 - self.origin[2] > 2048) + { + self.health = 0; + self notify("death"); + return; + } + + wait 1; + } +} + +//Function Number: 4 +func_3396(param_00) +{ + return tryusetank(); +} + +//Function Number: 5 +tryusetank() +{ + if(isdefined(level.tankinuse) && level.tankinuse) + { + self iprintlnbold("Armor support unavailable."); + return 0; + } + + if(!isdefined(getvehiclenode("startnode","targetname"))) + { + self iprintlnbold("Tank is currently not supported in this level, bug your friendly neighborhood LD."); + return 0; + } + + if(!vehicle_getspawnerarray().size) + { + return 0; + } + + if(self.team == "allies") + { + var_00 = level.tankspawner["allies"] func_3393(self,"vehicle_bradley"); + } + else + { + var_00 = level.tankspawner["axis"] func_3393(self,"vehicle_bmp"); + } + + var_00 starttank(); + return 1; +} + +//Function Number: 6 +starttank(param_00) +{ + var_01 = getvehiclenode("startnode","targetname"); + var_02 = getvehiclenode("waitnode","targetname"); + self.nodes = getvehiclenodearray("info_vehicle_node","classname"); + level.tankinuse = 1; + thread tankupdate(var_01,var_02); + thread tankdamagemonitor(); + level.tank = self; + if(level.teambased) + { + var_03 = maps\mp\gametypes\_gameobjects::func_2A31(); + objective_add(var_03,"invisible",(0,0,0)); + objective_team(var_03,"allies"); + level.tank.objid["allies"] = var_03; + var_04 = maps\mp\gametypes\_gameobjects::func_2A31(); + objective_add(var_04,"invisible",(0,0,0)); + objective_team(var_04,"axis"); + level.tank.objid["axis"] = var_04; + var_05 = self.team; + level.tank.team = var_05; + level.tank.pers["team"] = var_05; + } + + var_06 = spawnturret("misc_turret",self.origin,"abrams_minigun_mp"); + var_06 linkto(self,"tag_engine_left",(0,0,-20),(0,0,0)); + var_06 setmodel("sentry_minigun"); + var_06.angles = self.angles; + var_06.owner = self.owner; + var_06 maketurretinoperable(); + self.mgturret = var_06; + self.mgturret setdefaultdroppitch(0); + var_07 = self.angles; + self.angles = (0,0,0); + var_08 = self gettagorigin("tag_flash"); + self.angles = var_07; + var_09 = var_08 - self.origin; + thread waitforchangeteams(); + thread waitfordisco(); + self.var_339D = gettime(); + var_0A = spawn("script_origin",self gettagorigin("tag_flash")); + var_0A linkto(self,"tag_origin",var_09,(0,0,0)); + var_0A hide(); + self.neutraltarget = var_0A; + thread tankgettargets(); + thread destroytank(); + thread tankgetminitargets(); + thread checkdanger(); + thread func_33B6(); +} + +//Function Number: 7 +waitforchangeteams() +{ + self endon("death"); + self.owner endon("disconnect"); + self.owner waittill("joined_team"); + self.health = 0; + self notify("death"); +} + +//Function Number: 8 +waitfordisco() +{ + self endon("death"); + self.owner waittill("disconnect"); + self.health = 0; + self notify("death"); +} + +//Function Number: 9 +func_33A1(param_00) +{ + if(self.veh_pathdir != param_00) + { + if(param_00 == "forward") + { + stoptoforward(); + return; + } + + func_33A9(); + } +} + +//Function Number: 10 +func_33A2() +{ + self endon("death"); + self notify("path_abandoned"); + while(isdefined(self.changingdirection)) + { + wait 0.05; + } + + var_00 = 2; + self vehicle_setspeed(var_00,10,10); + self.speedtype = "engage"; +} + +//Function Number: 11 +setminiengagementspeed() +{ + self endon("death"); + self notify("path_abandoned"); + while(isdefined(self.changingdirection)) + { + wait 0.05; + } + + var_00 = 2; + self vehicle_setspeed(var_00,10,10); + self.speedtype = "engage"; +} + +//Function Number: 12 +setstandardspeed() +{ + self endon("death"); + while(isdefined(self.changingdirection)) + { + wait 0.05; + } + + self vehicle_setspeed(self.standardspeed,10,10); + self.speedtype = "standard"; +} + +//Function Number: 13 +setevadespeed() +{ + self endon("death"); + while(isdefined(self.changingdirection)) + { + wait 0.05; + } + + self vehicle_setspeed(15,15,15); + self.speedtype = "evade"; + wait 1.5; + self vehicle_setspeed(self.standardspeed,10,10); +} + +//Function Number: 14 +setdangerspeed() +{ + self endon("death"); + while(isdefined(self.changingdirection)) + { + wait 0.05; + } + + self vehicle_setspeed(5,5,5); + self.speedtype = "danger"; +} + +//Function Number: 15 +func_33A9() +{ + debugprintln2("tank changing direction at " + gettime()); + self vehicle_setspeed(0,5,6); + self.changingdirection = 1; + while(self.veh_speed > 0) + { + wait 0.05; + } + + wait 0.25; + self.changingdirection = undefined; + debugprintln2("tank done changing direction"); + self.veh_transmission = "reverse"; + self.veh_pathdir = "reverse"; + self vehicle_setspeed(self.standardspeed,5,6); +} + +//Function Number: 16 +stoptoforward() +{ + debugprintln2("tank changing direction at " + gettime()); + self vehicle_setspeed(0,5,6); + self.changingdirection = 1; + while(self.veh_speed > 0) + { + wait 0.05; + } + + wait 0.25; + self.changingdirection = undefined; + debugprintln2("tank done changing direction"); + self.veh_transmission = "forward"; + self.veh_pathdir = "forward"; + self vehicle_setspeed(self.standardspeed,5,6); +} + +//Function Number: 17 +checkdanger() +{ + self endon("death"); + var_00 = []; + var_01 = level.players; + self.numenemiesclose = 0; + for(;;) + { + foreach(var_03 in var_01) + { + if(!isdefined(var_03)) + { + continue; + } + + if(var_03.team == self.team) + { + wait 0.05; + continue; + } + + var_04 = distance2d(var_03.origin,self.origin); + if(var_04 < 2048) + { + self.numenemiesclose++; + } + + wait 0.05; + } + + if(isdefined(self.speedtype) && self.speedtype == "evade" || self.speedtype == "engage") + { + self.numenemiesclose = 0; + continue; + } + + if(self.numenemiesclose > 1) + { + thread setdangerspeed(); + } + else + { + thread setstandardspeed(); + } + + self.numenemiesclose = 0; + wait 0.05; + } +} + +//Function Number: 18 +tankupdate(param_00,param_01) +{ + self endon("tankDestroyed"); + self endon("death"); + if(!isdefined(level.graphnodes)) + { + self startpath(param_00); + return; + } + + self attachpath(param_00); + self startpath(param_00); + param_00 notify("trigger",self,1); + wait 0.05; + for(;;) + { + while(isdefined(self.changingdirection)) + { + wait 0.05; + } + + var_02 = func_33D4(); + if(isdefined(var_02)) + { + self.endnode = var_02; + } + else + { + self.endnode = undefined; + } + + wait 0.65; + } +} + +//Function Number: 19 +callback_vehicledamage(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A,param_0B) +{ + if((param_01 == self || param_01 == self.mgturret || isdefined(param_01.pers) && param_01.pers["team"] == self.team) && param_01 != self.owner || param_04 == "MOD_MELEE") + { + return; + } + + var_0C = modifydamage(param_04,param_02,param_01); + self vehicle_finishdamage(param_00,param_01,var_0C,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A,param_0B); +} + +//Function Number: 20 +tankdamagemonitor() +{ + self endon("death"); + self.damagetaken = 0; + var_00 = self vehicle_getspeed(); + var_01 = self.health; + var_02 = 0; + var_03 = 0; + var_04 = 0; + for(;;) + { + self waittill("damage",var_05,var_06,var_07,var_08,var_09); + if(isdefined(var_06.classname) && var_06.classname == "script_vehicle") + { + if(isdefined(self.besttarget) && self.besttarget != var_06) + { + self.forcedtarget = var_06; + thread func_33C1(); + } + } + else if(isplayer(var_06)) + { + var_06 maps\mp\gametypes\_damagefeedback::updatedamagefeedback("hitHelicopter"); + if(var_06 maps\mp\_utility::func_27AF("specialty_armorpiercing")) + { + var_0A = var_05 * level.armorpiercingmod; + self.health = self.health - int(var_0A); + } + } + + if(self.health <= 0) + { + self notify("death"); + return; + } + else if(self.health < var_01 / 4 && var_04 == 0) + { + var_04 = 1; + } + else if(self.health < var_01 / 2 && var_03 == 0) + { + var_03 = 1; + } + else if(self.health < var_01 / 1.5 && var_02 == 0) + { + var_02 = 1; + } + + if(var_05 > 1000) + { + handlethreat(var_06); + } + } +} + +//Function Number: 21 +handlethreat(param_00) +{ + self endon("death"); + var_01 = randomint(100); + if(isdefined(self.besttarget) && self.besttarget != param_00 && var_01 > 30) + { + var_02 = []; + func_33C1(1,self.besttarget); + thread func_33BF(var_41); + return; + } + + if(!isdefined(self.besttarget) && var_02 > 30) + { + var_02 = []; + thread func_33BF(var_41); + return; + } + + if(var_02 < 30) + { + playfx(level.tankcover,self.origin); + thread setevadespeed(); + return; + } + + self fireweapon(); + self playsound("bmp_fire"); +} + +//Function Number: 22 +handlepossiblethreat(param_00) +{ + self endon("death"); + var_01 = func_33B5(param_00); + var_02 = distance(self.origin,param_00.origin); + if(randomint(4) < 3) + { + return; + } + + if(var_01 == "front" && var_02 < 768) + { + thread setevadespeed(); + return; + } + + if(var_01 == "rear_side" || var_01 == "rear" && var_02 >= 768) + { + playfx(level.tankcover,self.origin); + thread setevadespeed(); + return; + } + + if(var_01 == "rear" && var_02 < 768) + { + func_33A9(); + setevadespeed(); + wait 4; + stoptoforward(); + return; + } + + if(var_01 == "front_side" || var_01 == "front") + { + playfx(level.tankcover,self.origin); + func_33A9(); + setevadespeed(); + wait 8; + stoptoforward(); + return; + } +} + +//Function Number: 23 +func_33B5(param_00) +{ + self endon("death"); + param_00 endon("death"); + param_00 endon("disconnect"); + var_01 = anglestoforward(self.angles); + var_02 = param_00.origin - self.origin; + var_01 = var_01 * (1,1,0); + var_02 = var_02 * (1,1,0); + var_02 = vectornormalize(var_02); + var_01 = vectornormalize(var_01); + var_03 = vectordot(var_02,var_01); + if(var_03 > 0) + { + if(var_03 > 0.9) + { + return "front"; + } + else + { + return "front_side"; + } + } + else if(var_03 < -0.9) + { + return "rear"; + } + else + { + return "rear_side"; + } + + param_00 iprintlnbold(var_03); +} + +//Function Number: 24 +func_33B6() +{ + self endon("death"); + for(;;) + { + var_00 = []; + var_01 = level.players; + foreach(var_03 in var_01) + { + if(!isdefined(var_03)) + { + wait 0.05; + continue; + } + + if(!istarget(var_03)) + { + wait 0.05; + continue; + } + + var_04 = var_03 getcurrentweapon(); + if(issubstr(var_04,"at4") || issubstr(var_04,"stinger") || issubstr(var_04,"javelin")) + { + thread handlepossiblethreat(var_03); + wait 8; + } + + wait 0.15; + } + } +} + +//Function Number: 25 +func_33B7() +{ + if(!isdefined(self.owner) || !isdefined(self.owner.pers["team"]) || self.owner.pers["team"] != self.team) + { + self notify("abandoned"); + return 0; + } + + return 1; +} + +//Function Number: 26 +drawline(param_00,param_01,param_02,param_03) +{ + var_04 = int(param_02 * 20); + for(var_05 = 0;var_05 < var_04;var_05++) + { + wait 0.05; + } +} + +//Function Number: 27 +modifydamage(param_00,param_01,param_02) +{ + if(param_00 == "MOD_RIFLE_BULLET") + { + return param_01; + } + + if(param_00 == "MOD_PISTOL_BULLET") + { + return param_01; + } + + if(param_00 == "MOD_IMPACT") + { + return param_01; + } + + if(param_00 == "MOD_MELEE") + { + return 0; + } + + if(param_00 == "MOD_EXPLOSIVE_BULLET") + { + return param_01; + } + + if(param_00 == "MOD_GRENADE") + { + return param_01 * 5; + } + + if(param_00 == "MOD_GRENADE_SPLASH") + { + return param_01 * 5; + } + + return param_01 * 10; +} + +//Function Number: 28 +destroytank() +{ + self waittill("death"); + if(level.teambased) + { + var_00 = level.tank.team; + objective_state(level.tank.objid[var_00],"invisible"); + objective_state(level.tank.objid[level.otherteam[var_00]],"invisible"); + } + + self notify("tankDestroyed"); + self vehicle_setspeed(0,10,10); + level.tankinuse = 0; + playfx(level.spawnfire,self.origin); + playfx(level.tankfire,self.origin); + func_33D3(); + var_01 = spawn("script_model",self.origin); + var_01 setmodel("vehicle_m1a1_abrams_d_static"); + var_01.angles = self.angles; + self.mgturret delete(); + self delete(); + wait 4; + var_01 delete(); +} + +//Function Number: 29 +onhitpitchclamp() +{ + self notify("onTargOrTimeOut"); + self endon("onTargOrTimeOut"); + self endon("turret_on_target"); + self waittill("turret_pitch_clamped"); + thread func_33C1(0,self.besttarget); +} + +//Function Number: 30 +func_2F7E() +{ + self endon("abandonedTarget"); + self endon("killedTarget"); + self endon("death"); + self endon("targetRemoved"); + self endon("lostLOS"); + for(;;) + { + onhitpitchclamp(); + if(!isdefined(self.besttarget)) + { + continue; + } + + var_00 = self gettagorigin("tag_flash"); + var_01 = bullettrace(self.origin,var_00,0,self); + if(var_01["position"] != var_00) + { + thread func_33C1(0,self.besttarget); + } + + var_01 = bullettrace(var_00,self.besttarget.origin,1,self); + var_02 = distance(self.origin,var_01["position"]); + var_03 = distance(self.besttarget.origin,self.origin); + if(var_02 < 384 || var_02 + 256 < var_03) + { + wait 0.5; + if(var_02 > 384) + { + waitforturretready(); + self fireweapon(); + self playsound("bmp_fire"); + self.var_339D = gettime(); + } + + var_04 = func_33B5(self.besttarget); + thread func_33C1(0,self.besttarget); + return; + } + + waitforturretready(); + self fireweapon(); + self playsound("bmp_fire"); + self.var_339D = gettime(); + } +} + +//Function Number: 31 +waitforturretready() +{ + self endon("abandonedTarget"); + self endon("killedTarget"); + self endon("death"); + self endon("targetRemoved"); + self endon("lostLOS"); + var_00 = gettime() - self.var_339D; + if(var_00 < 1499) + { + wait 1.5 - var_00 / 1000; + } +} + +//Function Number: 32 +tankgettargets(param_00) +{ + self endon("death"); + self endon("leaving"); + var_01 = []; + for(;;) + { + var_01 = []; + var_02 = level.players; + if(isdefined(self.forcedtarget)) + { + var_01 = []; + var_01[0] = self.forcedtarget; + func_33BF(var_01); + self.forcedtarget = undefined; + } + + if(isdefined(level.harrier) && level.harrier.team != self.team && isalive(level.harrier)) + { + if(isvehicletarget(level.tank)) + { + var_01[var_01.size] = level.tank; + } + } + + if(isdefined(level.chopper) && level.chopper.team != self.team && isalive(level.chopper)) + { + if(isvehicletarget(level.chopper)) + { + var_01[var_01.size] = level.chopper; + } + } + + foreach(var_04 in var_02) + { + if(!isdefined(var_04)) + { + wait 0.05; + continue; + } + + if(isdefined(param_00) && var_04 == param_00) + { + continue; + } + + if(istarget(var_04)) + { + if(isdefined(var_04)) + { + var_01[var_01.size] = var_04; + } + + continue; + } + + continue; + } + + if(var_01.size > 0) + { + func_33BF(var_01); + continue; + } + + wait 1; + } +} + +//Function Number: 33 +func_33BF(param_00) +{ + self endon("death"); + if(param_00.size == 1) + { + self.besttarget = param_00[0]; + } + else + { + self.besttarget = func_2F89(param_00); + } + + thread func_33A2(); + thread func_2F83(param_00); + self setturrettargetent(self.besttarget); + func_2F7E(); + thread func_33C0(); +} + +//Function Number: 34 +func_33C0() +{ + self endon("death"); + setstandardspeed(); + func_33C4(); + self setturrettargetent(self.neutraltarget); +} + +//Function Number: 35 +func_2F89(param_00) +{ + self endon("death"); + var_01 = self gettagorigin("tag_flash"); + var_02 = self.origin; + var_03 = undefined; + var_04 = undefined; + var_05 = 0; + foreach(var_07 in param_00) + { + var_08 = abs(vectortoangles(var_07.origin - self.origin)[1]); + var_09 = abs(self gettagangles("tag_flash")[1]); + var_08 = abs(var_08 - var_09); + if(isdefined(level.chopper) && var_07 == level.chopper) + { + return var_07; + } + + if(isdefined(level.harrier) && var_07 == level.harrier) + { + return var_07; + } + + var_0A = var_07 getweaponslistitems(); + foreach(var_0C in var_0A) + { + if(issubstr(var_0C,"at4") || issubstr(var_0C,"jav") || issubstr(var_0C,"c4")) + { + var_08 = var_08 - 40; + } + } + + if(!isdefined(var_03)) + { + var_03 = var_08; + var_04 = var_07; + continue; + } + + if(var_03 > var_08) + { + var_03 = var_08; + var_04 = var_07; + } + } + + return var_04; +} + +//Function Number: 36 +func_2F83(param_00) +{ + self endon("abandonedTarget"); + self endon("lostLOS"); + self endon("death"); + self endon("targetRemoved"); + var_01 = self.besttarget; + var_01 endon("disconnect"); + var_01 waittill("death"); + self notify("killedTarget"); + func_33C4(); + setstandardspeed(); + thread func_33C0(); +} + +//Function Number: 37 +func_33C1(param_00,param_01) +{ + self endon("death"); + self notify("abandonedTarget"); + setstandardspeed(); + thread func_33C0(); + func_33C4(); + if(isdefined(param_01)) + { + self.var_33C2 = param_01; + badtargetreset(); + } + + if(isdefined(param_00) && param_00) + { + } +} + +//Function Number: 38 +badtargetreset() +{ + self endon("death"); + wait 1.5; + self.var_33C2 = undefined; +} + +//Function Number: 39 +func_33C4() +{ + self notify("targetRemoved"); + self.besttarget = undefined; + self.var_33C5 = undefined; +} + +//Function Number: 40 +isvehicletarget(param_00) +{ + if(distance2d(param_00.origin,self.origin) > 4096) + { + return 0; + } + + if(distance(param_00.origin,self.origin) < 512) + { + return 0; + } + + return turretsighttrace(param_00,0); +} + +//Function Number: 41 +istarget(param_00) +{ + self endon("death"); + var_01 = distancesquared(param_00.origin,self.origin); + if(!level.teambased && isdefined(self.owner) && param_00 == self.owner) + { + return 0; + } + + if(!isalive(param_00) || param_00.sessionstate != "playing") + { + return 0; + } + + if(var_01 > 16777216) + { + return 0; + } + + if(var_01 < 262144) + { + return 0; + } + + if(!isdefined(param_00.pers["team"])) + { + return 0; + } + + if(param_00 == self.owner) + { + return 0; + } + + if(level.teambased && param_00.pers["team"] == self.team) + { + return 0; + } + + if(param_00.pers["team"] == "spectator") + { + return 0; + } + + if(isdefined(param_00.spawntime) && gettime() - param_00.spawntime / 1000 <= 5) + { + return 0; + } + + if(param_00 maps\mp\_utility::func_27AF("specialty_blindeye")) + { + return 0; + } + + return self vehicle_canturrettargetpoint(param_00.origin,1,self); +} + +//Function Number: 42 +turretsighttrace(param_00,param_01) +{ + var_02 = param_00 sightconetrace(self gettagorigin("tag_turret"),self); + if(var_02 < 0.7) + { + return 0; + } + + if(isdefined(param_01) && param_01) + { + thread drawline(param_00.origin,self gettagorigin("tag_turret"),10,(1,0,0)); + } + + return 1; +} + +//Function Number: 43 +func_33C8(param_00) +{ + self endon("death"); + if(!isalive(param_00) || param_00.sessionstate != "playing") + { + return 0; + } + + if(!isdefined(param_00.pers["team"])) + { + return 0; + } + + if(param_00 == self.owner) + { + return 0; + } + + if(distancesquared(param_00.origin,self.origin) > 1048576) + { + return 0; + } + + if(level.teambased && param_00.pers["team"] == self.team) + { + return 0; + } + + if(param_00.pers["team"] == "spectator") + { + return 0; + } + + if(isdefined(param_00.spawntime) && gettime() - param_00.spawntime / 1000 <= 5) + { + return 0; + } + + if(isdefined(self)) + { + var_01 = self.mgturret.origin + (0,0,64); + var_02 = param_00 sightconetrace(var_01,self); + if(var_02 < 1) + { + return 0; + } + } + + return 1; +} + +//Function Number: 44 +tankgetminitargets() +{ + self endon("death"); + self endon("leaving"); + var_00 = []; + for(;;) + { + var_00 = []; + var_01 = level.players; + for(var_02 = 0;var_02 <= var_01.size;var_02++) + { + if(func_33C8(var_01[var_02])) + { + if(isdefined(var_01[var_02])) + { + var_00[var_00.size] = var_01[var_02]; + } + } + else + { + continue; + } + + wait 0.05; + } + + if(var_00.size > 0) + { + acquireminitarget(var_00); + return; + } + else + { + wait 0.5; + } + } +} + +//Function Number: 45 +func_33CA(param_00) +{ + self endon("death"); + var_01 = self.origin; + var_02 = undefined; + var_03 = undefined; + foreach(var_05 in param_00) + { + var_06 = distance(self.origin,var_05.origin); + var_07 = var_05 getcurrentweapon(); + if(issubstr(var_07,"at4") || issubstr(var_07,"jav") || issubstr(var_07,"c4") || issubstr(var_07,"smart") || issubstr(var_07,"grenade")) + { + var_06 = var_06 - 200; + } + + if(!isdefined(var_02)) + { + var_02 = var_06; + var_03 = var_05; + continue; + } + + if(var_02 > var_06) + { + var_02 = var_06; + var_03 = var_05; + } + } + + return var_03; +} + +//Function Number: 46 +acquireminitarget(param_00) +{ + self endon("death"); + if(param_00.size == 1) + { + self.var_33CC = param_00[0]; + } + else + { + self.var_33CC = func_33CA(param_00); + } + + if(distance2d(self.origin,self.var_33CC.origin) > 768) + { + thread setminiengagementspeed(); + } + + self notify("acquiringMiniTarget"); + self.mgturret settargetentity(self.var_33CC,(0,0,64)); + wait 0.15; + thread fireminiontarget(); + thread func_33CE(param_00); + thread func_33CF(param_00); + thread func_33D0(self.var_33CC); +} + +//Function Number: 47 +fireminiontarget() +{ + self endon("death"); + self endon("abandonedMiniTarget"); + self endon("killedMiniTarget"); + var_00 = undefined; + var_01 = gettime(); + if(!isdefined(self.var_33CC)) + { + return; + } + + for(;;) + { + if(!isdefined(self.mgturret getturrettarget(1))) + { + if(!isdefined(var_00)) + { + var_00 = gettime(); + } + + var_02 = gettime(); + if(var_00 - var_02 > 1) + { + var_00 = undefined; + thread explicitabandonminitarget(); + return; + } + + wait 0.5; + continue; + } + + if(gettime() > var_01 + 1000 && !isdefined(self.besttarget)) + { + if(distance2d(self.origin,self.var_33CC.origin) > 768) + { + var_01[0] = self.var_33CC; + func_33BF(var_05); + } + } + + var_04 = randomintrange(10,16); + for(var_05 = 0;var_05 < var_04;var_05++) + { + self.mgturret shootturret(); + wait 0.1; + } + + wait randomfloatrange(0.5,3); + } +} + +//Function Number: 48 +func_33CE(param_00) +{ + self endon("abandonedMiniTarget"); + self endon("death"); + if(!isdefined(self.var_33CC)) + { + return; + } + + self.var_33CC waittill("death"); + self notify("killedMiniTarget"); + self.var_33CC = undefined; + self.mgturret cleartargetentity(); + tankgetminitargets(); +} + +//Function Number: 49 +func_33CF(param_00) +{ + self endon("abandonedMiniTarget"); + self endon("death"); + for(;;) + { + if(!isdefined(self.var_33CC)) + { + return; + } + + var_01 = bullettrace(self.mgturret.origin,self.var_33CC.origin,0,self); + var_02 = distance(self.origin,var_01["position"]); + if(var_02 > 1024) + { + thread explicitabandonminitarget(); + return; + } + + wait 2; + } +} + +//Function Number: 50 +func_33D0(param_00) +{ + self endon("abandonedMiniTarget"); + self endon("death"); + self endon("killedMiniTarget"); + for(;;) + { + var_01 = []; + var_02 = level.players; + for(var_03 = 0;var_03 <= var_02.size;var_03++) + { + if(func_33C8(var_02[var_03])) + { + if(!isdefined(var_02[var_03])) + { + continue; + } + + if(!isdefined(param_00)) + { + return; + } + + var_04 = distance(self.origin,param_00.origin); + var_05 = distance(self.origin,var_02[var_03].origin); + if(var_05 < var_04) + { + thread explicitabandonminitarget(); + return; + } + } + + wait 0.05; + } + + wait 0.25; + } +} + +//Function Number: 51 +explicitabandonminitarget(param_00) +{ + self notify("abandonedMiniTarget"); + self.var_33CC = undefined; + self.mgturret cleartargetentity(); + if(isdefined(param_00) && param_00) + { + return; + } + + thread tankgetminitargets(); +} + +//Function Number: 52 +addtotanklist() +{ + level.tanks[self getentitynumber()] = self; +} + +//Function Number: 53 +func_33D3() +{ + level.tanks[self getentitynumber()] = undefined; +} + +//Function Number: 54 +func_33D4() +{ + var_00 = []; + foreach(var_02 in level.players) + { + if(var_02.team == "spectator") + { + continue; + } + + if(var_02.team == self.team) + { + continue; + } + + if(!isalive(var_02)) + { + continue; + } + + var_02.dist = 0; + var_00[var_00.size] = var_02; + } + + if(!var_00.size) + { + return undefined; + } + + for(var_04 = 0;var_04 < var_00.size;var_04++) + { + for(var_05 = var_04 + 1;var_05 < var_00.size;var_05++) + { + var_06 = distancesquared(var_00[var_04].origin,var_00[var_05].origin); + var_00[var_04].dist = var_00[var_04].dist + var_06; + var_00[var_05].dist = var_00[var_05].dist + var_06; + } + } + + var_07 = var_00[0]; + foreach(var_02 in var_00) + { + if(var_02.dist < var_07.dist) + { + var_07 = var_02; + } + } + + var_0A = var_07.origin; + var_0B = sortbydistance(level.graphnodes,var_0A); + return var_0B[0]; +} + +//Function Number: 55 +setuppaths() +{ + var_00 = []; + var_01 = []; + var_02 = []; + var_03 = []; + var_04 = getvehiclenode("startnode","targetname"); + var_00[var_00.size] = var_04; + var_01[var_01.size] = var_04; + while(isdefined(var_04.target)) + { + var_05 = var_04; + var_04 = getvehiclenode(var_04.target,"targetname"); + var_04.prev = var_05; + if(var_04 == var_00[0]) + { + break; + } + + var_00[var_00.size] = var_04; + if(!isdefined(var_04.target)) + { + return; + } + } + + var_00[0].branchnodes = []; + var_00[0] thread func_33E1("forward"); + var_03[var_03.size] = var_00[0]; + var_06 = getvehiclenodearray("branchnode","targetname"); + foreach(var_08 in var_06) + { + var_04 = var_08; + var_00[var_00.size] = var_04; + var_01[var_01.size] = var_04; + while(isdefined(var_04.target)) + { + var_05 = var_04; + var_04 = getvehiclenode(var_04.target,"targetname"); + var_00[var_00.size] = var_04; + var_04.prev = var_05; + if(!isdefined(var_04.target)) + { + var_02[var_02.size] = var_04; + } + } + } + + foreach(var_04 in var_00) + { + var_0B = 0; + foreach(var_0D in var_01) + { + if(var_0D == var_04) + { + continue; + } + + if(var_0D.target == var_04.targetname) + { + continue; + } + + if(isdefined(var_04.target) && var_04.target == var_0D.targetname) + { + continue; + } + + if(distance2d(var_04.origin,var_0D.origin) > 80) + { + continue; + } + + var_0D thread func_33E3(var_04,"reverse"); + var_0D.prev = var_04; + if(!isdefined(var_04.branchnodes)) + { + var_04.branchnodes = []; + } + + var_04.branchnodes[var_04.branchnodes.size] = var_0D; + var_0B = 1; + } + + if(var_0B) + { + var_04 thread func_33E1("forward"); + } + + var_0F = 0; + foreach(var_11 in var_02) + { + if(var_11 == var_04) + { + continue; + } + + if(!isdefined(var_04.target)) + { + continue; + } + + if(var_04.target == var_11.targetname) + { + continue; + } + + if(isdefined(var_11.target) && var_11.target == var_04.targetname) + { + continue; + } + + if(distance2d(var_04.origin,var_11.origin) > 80) + { + continue; + } + + var_11 thread func_33E3(var_04,"forward"); + var_11.var_33D8 = getvehiclenode(var_04.targetname,"targetname"); + var_11.var_33D9 = distance(var_11.origin,var_04.origin); + if(!isdefined(var_04.branchnodes)) + { + var_04.branchnodes = []; + } + + var_04.branchnodes[var_04.branchnodes.size] = var_11; + var_0F = 1; + } + + if(var_0F) + { + var_04 thread func_33E1("reverse"); + } + + if(var_0F || var_0B) + { + var_03[var_03.size] = var_04; + } + } + + if(var_03.size < 3) + { + level notify("end_tankPathHandling"); + return; + } + + var_14 = []; + foreach(var_04 in var_00) + { + if(!isdefined(var_04.branchnodes)) + { + continue; + } + + var_14[var_14.size] = var_04; + } + + foreach(var_18 in var_14) + { + var_04 = var_18; + var_19 = 0; + while(isdefined(var_04.target)) + { + var_1A = var_04; + var_04 = getvehiclenode(var_04.target,"targetname"); + var_19 = var_19 + distance(var_04.origin,var_1A.origin); + if(var_04 == var_18) + { + break; + } + + if(isdefined(var_04.branchnodes)) + { + break; + } + } + + if(var_19 > 1000) + { + var_04 = var_18; + var_1B = 0; + while(isdefined(var_04.target)) + { + var_1A = var_04; + var_04 = getvehiclenode(var_04.target,"targetname"); + var_1B = var_1B + distance(var_04.origin,var_1A.origin); + if(var_1B < var_19 / 2) + { + continue; + } + + var_04.branchnodes = []; + var_04 thread func_33E1("forward"); + var_03[var_03.size] = var_04; + break; + } + } + } + + level.graphnodes = func_33EC(var_03); + foreach(var_04 in var_00) + { + if(!isdefined(var_04.var_33DA)) + { + var_04 thread nodetracker(); + } + } +} + +//Function Number: 56 +func_33DB(param_00) +{ + var_01 = []; + foreach(var_04, var_03 in self.var_33DC) + { + if(self.linkdirs[var_04] != param_00) + { + continue; + } + + var_01[var_01.size] = var_03; + } + + return var_01[randomint(var_01.size)]; +} + +//Function Number: 57 +func_33DE(param_00,param_01) +{ + var_02 = level.graphnodes[self.var_33DA]; + var_03 = func_33F4(var_02,param_00,undefined,param_01); + var_04 = var_03[0].var_33DF; + var_05 = func_33F4(var_02,param_00,undefined,level.otherdir[param_01]); + var_06 = var_05[0].var_33DF; + if(!getdvarint("tankDebug")) + { + var_06 = 9999999; + } + + if(var_04 <= var_06) + { + return var_03[1]; + } +} + +//Function Number: 58 +func_33E1(param_00) +{ + level endon("end_tankPathHandling"); + for(;;) + { + self waittill("trigger",var_01,var_02); + var_03 = level.graphnodes[self.var_33DA]; + var_01.node = self; + var_04 = undefined; + if(isdefined(var_01.endnode) && var_01.endnode != var_03) + { + var_04 = func_33DE(var_01.endnode,var_01.veh_pathdir); + if(!isdefined(var_04)) + { + var_01 thread func_33A1(level.otherdir[var_01.veh_pathdir]); + } + } + + if(!isdefined(var_04) || var_04 == var_03) + { + var_04 = var_03 func_33DB(var_01.veh_pathdir); + } + + var_05 = var_03.linkstartnodes[var_04.var_33DA]; + if(var_01.veh_pathdir == "forward") + { + var_06 = func_33EA(); + } + else + { + var_06 = getprevnode(); + } + + if(var_06 != var_05) + { + var_01 startpath(var_05); + } + } +} + +//Function Number: 59 +func_33E3(param_00,param_01) +{ + for(;;) + { + self waittill("trigger",var_02); + if(var_02.veh_pathdir != param_01) + { + continue; + } + + debugprintln2("tank starting path at join node: " + param_00.var_33DA); + var_02 startpath(param_00); + } +} + +//Function Number: 60 +nodetracker() +{ + self.var_33E5 = getforwardgraphnode().var_33DA; + self.var_33E6 = func_33E9().var_33DA; + for(;;) + { + self waittill("trigger",var_00,var_01); + var_00.node = self; + var_00.var_33E5 = self.var_33E5; + var_00.var_33E6 = self.var_33E6; + if(!isdefined(self.target) || self.targetname == "branchnode") + { + var_02 = "TRANS"; + } + else + { + var_02 = "NODE"; + } + + if(isdefined(var_01)) + { + func_3404(self.origin,var_02,(1,0.5,0),1,2,100); + continue; + } + + func_3404(self.origin,var_02,(0,1,0),1,2,100); + } +} + +//Function Number: 61 +forcetrigger(param_00,param_01,param_02) +{ + param_01 endon("trigger"); + param_00 endon("trigger"); + param_02 endon("death"); + var_03 = distancesquared(param_02.origin,param_01.origin); + var_04 = param_02.veh_pathdir; + func_3404(param_00.origin + (0,0,30),"LAST",(0,0,1),0.5,1,100); + func_3404(param_01.origin + (0,0,60),"NEXT",(0,1,0),0.5,1,100); + var_05 = 0; + for(;;) + { + wait 0.05; + if(var_04 != param_02.veh_pathdir) + { + debugprintln2("tank missed node: reversing direction"); + param_02 thread forcetrigger(param_01,param_00,param_02); + return; + } + + if(var_05) + { + debugprintln2("... sending notify."); + param_01 notify("trigger",param_02,1); + return; + } + + var_06 = distancesquared(param_02.origin,param_01.origin); + if(var_06 > var_03) + { + var_05 = 1; + debugprintln2("tank missed node: forcing notify in one frame..."); + } + + var_03 = var_06; + } +} + +//Function Number: 62 +getforwardgraphnode() +{ + for(var_00 = self;!isdefined(var_00.var_33DA);var_00 = var_00 func_33EA()) + { + } + + return var_00; +} + +//Function Number: 63 +func_33E9() +{ + for(var_00 = self;!isdefined(var_00.var_33DA);var_00 = var_00 getprevnode()) + { + } + + return var_00; +} + +//Function Number: 64 +func_33EA() +{ + if(isdefined(self.target)) + { + return getvehiclenode(self.target,"targetname"); + } + + return self.var_33D8; +} + +//Function Number: 65 +getprevnode() +{ + return self.prev; +} + +//Function Number: 66 +func_33EC(param_00) +{ + var_01 = []; + foreach(var_03 in param_00) + { + var_04 = spawnstruct(); + var_04.linkinfos = []; + var_04.var_33DC = []; + var_04.linklengths = []; + var_04.linkdirs = []; + var_04.linkstartnodes = []; + var_04.node = var_03; + var_04.origin = var_03.origin; + var_04.var_33DA = var_01.size; + var_03.var_33DA = var_01.size; + func_3404(var_04.origin + (0,0,80),var_04.var_33DA,(1,1,1),0.65,2,100000); + var_01[var_01.size] = var_04; + } + + foreach(var_03 in param_00) + { + var_07 = var_03.var_33DA; + var_08 = getvehiclenode(var_03.target,"targetname"); + var_09 = distance(var_03.origin,var_08.origin); + var_0A = var_08; + while(!isdefined(var_08.var_33DA)) + { + var_09 = var_09 + distance(var_08.origin,var_08.prev.origin); + if(isdefined(var_08.target)) + { + var_08 = getvehiclenode(var_08.target,"targetname"); + continue; + } + + var_08 = var_08.var_33D8; + } + + var_01[var_07] addlinknode(var_01[var_08.var_33DA],var_09,"forward",var_0A); + var_08 = var_03.prev; + var_09 = distance(var_03.origin,var_08.origin); + var_0A = var_08; + while(!isdefined(var_08.var_33DA)) + { + var_09 = var_09 + distance(var_08.origin,var_08.prev.origin); + var_08 = var_08.prev; + } + + var_01[var_07] addlinknode(var_01[var_08.var_33DA],var_09,"reverse",var_0A); + foreach(var_0C in var_03.branchnodes) + { + var_08 = var_0C; + var_09 = distance(var_03.origin,var_08.origin); + var_0A = var_08; + if(var_08.targetname == "branchnode") + { + while(!isdefined(var_08.var_33DA)) + { + if(isdefined(var_08.target)) + { + var_0D = getvehiclenode(var_08.target,"targetname"); + } + else + { + var_0D = var_08.var_33D8; + } + + var_09 = var_09 + distance(var_08.origin,var_0D.origin); + var_08 = var_0D; + } + + var_01[var_07] addlinknode(var_01[var_08.var_33DA],var_09,"forward",var_0A); + continue; + } + + while(!isdefined(var_08.var_33DA)) + { + var_09 = var_09 + distance(var_08.origin,var_08.prev.origin); + var_08 = var_08.prev; + } + + var_01[var_07] addlinknode(var_01[var_08.var_33DA],var_09,"reverse",var_0A); + } + } + + return var_01; +} + +//Function Number: 67 +addlinknode(param_00,param_01,param_02,param_03) +{ + self.var_33DC[param_00.var_33DA] = param_00; + self.linklengths[param_00.var_33DA] = param_01; + self.linkdirs[param_00.var_33DA] = param_02; + self.linkstartnodes[param_00.var_33DA] = param_03; + var_04 = spawnstruct(); + var_04.tographnode = param_00; + var_04.var_33F1 = param_00.var_33DA; + var_04.var_33D9 = param_01; + var_04.var_33F2 = param_02; + var_04.var_33F3 = param_03; + self.linkinfos[param_00.var_33DA] = var_04; +} + +//Function Number: 68 +func_33F4(param_00,param_01,param_02,param_03) +{ + level.openlist = []; + level.var_33F6 = []; + var_04 = 0; + var_05 = []; + if(!isdefined(param_02)) + { + param_02 = []; + } + + param_01.var_33DF = 0; + param_01.var_33F7 = func_33FE(param_01,param_00); + param_01.var_33F8 = param_01.var_33DF + param_01.var_33F7; + func_33FD(param_01); + var_06 = param_01; + for(;;) + { + foreach(var_08 in var_06.var_33DC) + { + if(func_1E4E(param_02,var_08)) + { + continue; + } + + if(func_1E4E(level.var_33F6,var_08)) + { + continue; + } + + if(isdefined(param_03) && var_08.linkdirs[var_06.var_33DA] != param_03) + { + continue; + } + + if(!func_1E4E(level.openlist,var_08)) + { + func_33FA(var_08); + var_08.var_33F9 = var_06; + var_08.var_33DF = func_33FF(var_08,var_06); + var_08.var_33F7 = func_33FE(var_08,param_00); + var_08.var_33F8 = var_08.var_33DF + var_08.var_33F7; + if(var_08 == param_00) + { + var_04 = 1; + } + + continue; + } + + if(var_08.var_33DF < func_33FF(var_06,var_08)) + { + continue; + } + + var_08.var_33F9 = var_06; + var_08.var_33DF = func_33FF(var_08,var_06); + var_08.var_33F8 = var_08.var_33DF + var_08.var_33F7; + } + + if(var_04) + { + break; + } + + func_33FD(var_06); + var_0A = level.openlist[0]; + foreach(var_0C in level.openlist) + { + if(var_0C.var_33F8 > var_0A.var_33F8) + { + continue; + } + + var_0A = var_0C; + } + + func_33FD(var_0A); + var_06 = var_0A; + } + + var_06 = param_00; + while(var_06 != param_01) + { + var_05[var_05.size] = var_06; + var_06 = var_06.var_33F9; + } + + var_05[var_05.size] = var_06; + return var_05; +} + +//Function Number: 69 +func_33FA(param_00) +{ + param_00.openlistid = level.openlist.size; + level.openlist[level.openlist.size] = param_00; + param_00.var_33FC = undefined; +} + +//Function Number: 70 +func_33FD(param_00) +{ + if(isdefined(param_00.var_33FC)) + { + return; + } + + param_00.var_33FC = level.var_33F6.size; + level.var_33F6[level.var_33F6.size] = param_00; + if(!func_1E4E(level.openlist,param_00)) + { + return; + } + + level.openlist[param_00.openlistid] = level.openlist[level.openlist.size - 1]; + level.openlist[param_00.openlistid].openlistid = param_00.openlistid; + level.openlist[level.openlist.size - 1] = undefined; + param_00.openlistid = undefined; +} + +//Function Number: 71 +func_33FE(param_00,param_01) +{ + return distance(param_00.node.origin,param_01.node.origin); +} + +//Function Number: 72 +func_33FF(param_00,param_01) +{ + return param_00.var_33F9.var_33DF + param_00.linklengths[param_01.var_33DA]; +} + +//Function Number: 73 +func_1E4E(param_00,param_01) +{ + for(var_02 = 0;var_02 < param_00.size;var_02++) + { + if(param_00[var_02] == param_01) + { + return 1; + } + } + + return 0; +} + +//Function Number: 74 +drawpath(param_00) +{ + for(var_01 = 1;var_01 < param_00.size;var_01++) + { + var_02 = param_00[var_01 - 1]; + var_03 = param_00[var_01]; + if(var_02.linkdirs[var_03.var_33DA] == "reverse") + { + level thread drawlink(var_02.node.origin,var_03.node.origin,(1,0,0)); + } + else + { + level thread drawlink(var_02.node.origin,var_03.node.origin,(0,1,0)); + } + + var_04 = var_02.linkstartnodes[var_03.var_33DA]; + level thread drawlink(var_02.node.origin + (0,0,4),var_04.origin + (0,0,4),(0,0,1)); + if(var_02.linkdirs[var_03.var_33DA] == "reverse") + { + while(!isdefined(var_04.var_33DA)) + { + var_05 = var_04; + var_04 = var_04.prev; + level thread drawlink(var_05.origin + (0,0,4),var_04.origin + (0,0,4),(0,1,1)); + } + + continue; + } + + while(!isdefined(var_04.var_33DA)) + { + var_05 = var_04; + if(isdefined(var_04.target)) + { + var_04 = getvehiclenode(var_04.target,"targetname"); + continue; + } + + var_04 = var_04.var_33D8; + level thread drawlink(var_05.origin + (0,0,4),var_04.origin + (0,0,4),(0,1,1)); + } + } +} + +//Function Number: 75 +drawgraph(param_00) +{ +} + +//Function Number: 76 +drawlink(param_00,param_01,param_02) +{ + level endon("endpath"); + wait 0.05; +} + +//Function Number: 77 +debugprintln2(param_00) +{ +} + +//Function Number: 78 +debugprint(param_00) +{ +} + +//Function Number: 79 +func_3404(param_00,param_01,param_02,param_03,param_04,param_05) +{ +} + +//Function Number: 80 +func_3405() +{ +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/killstreaks/_teamammorefill.gsc b/MW3/Xbox/MP/maps/mp/killstreaks/_teamammorefill.gsc new file mode 100644 index 0000000..cd24694 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/killstreaks/_teamammorefill.gsc @@ -0,0 +1,87 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\killstreaks\_teamammorefill.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 4 + * Decompile Time: 82 ms + * Timestamp: 10/27/2023 2:27:23 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level.killstreakfuncs["team_ammo_refill"] = ::func_3449; +} + +//Function Number: 2 +func_3449(param_00) +{ + var_01 = func_344A(); + if(var_01) + { + maps\mp\_matchdata::logkillstreakevent("team_ammo_refill",self.origin); + } + + return var_01; +} + +//Function Number: 3 +func_344A() +{ + if(level.teambased) + { + foreach(var_01 in level.players) + { + if(var_01.team == self.team) + { + var_01 func_2E9E(1); + } + } + } + else + { + func_2E9E(1); + } + + level thread maps\mp\_utility::teamplayercardsplash("used_team_ammo_refill",self); + return 1; +} + +//Function Number: 4 +func_2E9E(param_00) +{ + var_01 = self getweaponslistall(); + if(param_00) + { + if(maps\mp\_utility::func_27AF("specialty_tacticalinsertion") && self getammocount("flare_mp") < 1) + { + maps\mp\_utility::giveperk("specialty_tacticalinsertion",0); + } + + if(maps\mp\_utility::func_27AF("specialty_scrambler") && self getammocount("scrambler_mp") < 1) + { + maps\mp\_utility::giveperk("specialty_scrambler",0); + } + + if(maps\mp\_utility::func_27AF("specialty_portable_radar") && self getammocount("portable_radar_mp") < 1) + { + maps\mp\_utility::giveperk("specialty_portable_radar",0); + } + } + + foreach(var_03 in var_01) + { + if(issubstr(var_03,"grenade") || getsubstr(var_03,0,2) == "gl") + { + if(!param_00 || self getammocount(var_03) >= 1) + { + continue; + } + } + + self givemaxammo(var_03); + } + + self playlocalsound("ammo_crate_use"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/killstreaks/_uav.gsc b/MW3/Xbox/MP/maps/mp/killstreaks/_uav.gsc new file mode 100644 index 0000000..1e43639 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/killstreaks/_uav.gsc @@ -0,0 +1,1060 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\killstreaks\_uav.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 38 + * Decompile Time: 683 ms + * Timestamp: 10/27/2023 2:27:25 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + precachestring(&"MP_WAR_RADAR_ACQUIRED"); + precachestring(&"MP_WAR_RADAR_ACQUIRED_ENEMY"); + precachestring(&"MP_WAR_RADAR_EXPIRED"); + precachestring(&"MP_WAR_RADAR_EXPIRED_ENEMY"); + precachestring(&"MP_WAR_COUNTER_RADAR_ACQUIRED"); + precachestring(&"MP_WAR_COUNTER_RADAR_ACQUIRED_ENEMY"); + precachestring(&"MP_WAR_COUNTER_RADAR_EXPIRED"); + precachestring(&"MP_WAR_COUNTER_RADAR_EXPIRED_ENEMY"); + precachestring(&"MP_LASE_TARGET_FOR_PREDATOR_STRIKE"); + precachemodel("vehicle_uav_static_mp"); + precachemodel("vehicle_phantom_ray"); + precacheitem("uav_strike_marker_mp"); + precacheitem("uav_strike_projectile_mp"); + level.radarviewtime = 30; + level.uavblocktime = 30; + level.uav_fx["explode"] = loadfx("explosions/uav_advanced_death"); + level.uav_fx["trail"] = loadfx("smoke/advanced_uav_contrail"); + level.killstreakfuncs["uav"] = ::func_308C; + level.killstreakfuncs["uav_support"] = ::tryuseuavsupport; + level.killstreakfuncs["uav_2"] = ::func_308C; + level.killstreakfuncs["double_uav"] = ::tryusedoubleuav; + level.killstreakfuncs["triple_uav"] = ::func_308F; + level.killstreakfuncs["counter_uav"] = ::tryusecounteruav; + level.killstreakfuncs["uav_strike"] = ::tryuseuavstrike; + level.killstreaksetupfuncs["uav_strike"] = ::uavstrikesetup; + level.killstreakfuncs["directional_uav"] = ::tryusedirectionaluav; + level._effect["laserTarget"] = loadfx("misc/laser_glow"); + var_00 = getentarray("minimap_corner","targetname"); + if(var_00.size) + { + var_01 = maps\mp\gametypes\_spawnlogic::func_2FCD(var_00[0].origin,var_00[1].origin); + } + else + { + var_01 = (0,0,0); + } + + level.uavrig = spawn("script_model",var_01); + level.uavrig setmodel("c130_zoomrig"); + level.uavrig.angles = (0,115,0); + level.uavrig hide(); + level.uavrig.targetname = "uavrig_script_model"; + level.uavrig thread rotateuavrig(); + if(level.teambased) + { + level.radarmode["allies"] = "normal_radar"; + level.radarmode["axis"] = "normal_radar"; + level.activeuavs["allies"] = 0; + level.activeuavs["axis"] = 0; + level.activecounteruavs["allies"] = 0; + level.activecounteruavs["axis"] = 0; + level.uavmodels["allies"] = []; + level.uavmodels["axis"] = []; + } + else + { + level.radarmode = []; + level.activeuavs = []; + level.activecounteruavs = []; + level.uavmodels = []; + level thread onplayerconnect(); + } + + level thread func_3096(); +} + +//Function Number: 2 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + level.activeuavs[var_00.guid] = 0; + level.activeuavs[var_00.guid + "_radarStrength"] = 0; + level.activecounteruavs[var_00.guid] = 0; + level.radarmode[var_00.guid] = "normal_radar"; + } +} + +//Function Number: 3 +rotateuavrig() +{ + for(;;) + { + self rotateyaw(-360,60); + wait 60; + } +} + +//Function Number: 4 +launchuav(param_00,param_01,param_02,param_03) +{ + if(param_03 == "counter_uav") + { + var_04 = 1; + } + else + { + var_04 = 0; + } + + var_05 = spawn("script_model",level.uavrig gettagorigin("tag_origin")); + var_05.value = 1; + if(param_03 == "double_uav") + { + var_05.value = 2; + } + else if(param_03 == "triple_uav") + { + var_05.value = 3; + } + + if(var_05.value != 3) + { + var_05 setmodel("vehicle_uav_static_mp"); + var_05 thread damagetracker(var_04,0); + } + else + { + var_05 setmodel("vehicle_phantom_ray"); + var_05 thread func_3084(level.uav_fx["trail"],"tag_jet_trail"); + var_05 thread damagetracker(var_04,1); + } + + var_05.team = param_01; + var_05.owner = param_00; + var_05.timetoadd = 0; + var_05 thread handleincomingstinger(); + var_05 func_309E(); + var_06 = randomintrange(3000,5000); + if(isdefined(level.spawnpoints)) + { + var_07 = level.spawnpoints; + } + else + { + var_07 = level.startspawnpoints; + } + + var_08 = var_07[0]; + foreach(var_0A in var_07) + { + if(var_0A.origin[2] < var_08.origin[2]) + { + var_08 = var_0A; + } + } + + var_0C = var_08.origin[2]; + var_0D = level.uavrig.origin[2]; + if(var_0C < 0) + { + var_0D = var_0D + var_0C * -1; + var_0C = 0; + } + + var_0E = var_0D - var_0C; + if(var_0E + var_06 > 8100) + { + var_06 = var_06 - var_0E + var_06 - 8100; + } + + var_0F = randomint(360); + var_10 = randomint(2000) + 5000; + var_11 = cos(var_0F) * var_10; + var_12 = sin(var_0F) * var_10; + var_13 = vectornormalize((var_11,var_12,var_06)); + var_13 = var_13 * randomintrange(6000,7000); + var_05 linkto(level.uavrig,"tag_origin",var_13,(0,var_0F - 90,0)); + var_05 thread func_308B(); + if(var_04) + { + var_05.uavtype = "counter"; + var_05 addactivecounteruav(); + } + else + { + var_05 func_30A0(); + var_05.uavtype = "standard"; + } + + if(isdefined(level.activeuavs[param_01])) + { + foreach(var_15 in level.uavmodels[param_01]) + { + if(var_15 == var_05) + { + continue; + } + + if(var_15.uavtype == "counter" && var_04) + { + var_15.timetoadd = var_15.timetoadd + 5; + continue; + } + + if(var_15.uavtype == "standard" && !var_04) + { + var_15.timetoadd = var_15.timetoadd + 5; + } + } + } + + level notify("uav_update"); + switch(param_03) + { + case "uav_strike": + param_02 = 2; + break; + + default: + param_02 = param_02 - 7; + break; + } + + var_05 waittill_notify_or_timeout_hostmigration_pause("death",param_02); + if(var_05.damagetaken < var_05.maxhealth) + { + var_05 unlink(); + var_17 = var_05.origin + anglestoforward(var_05.angles) * 20000; + var_05 moveto(var_17,60); + playfxontag(level._effect["ac130_engineeffect"],var_05,"tag_origin"); + var_05 waittill_notify_or_timeout_hostmigration_pause("death",3); + if(var_05.damagetaken < var_05.maxhealth) + { + var_05 notify("leaving"); + var_05.isleaving = 1; + var_05 moveto(var_17,4,4,0); + } + + var_05 waittill_notify_or_timeout_hostmigration_pause("death",4 + var_05.timetoadd); + } + + if(var_04) + { + var_05 func_30A3(); + } + else + { + var_05 removeactiveuav(); + } + + var_05 delete(); + var_05 func_309F(); + if(param_03 == "directional_uav") + { + param_00.radarshowenemydirection = 0; + if(level.teambased) + { + foreach(var_19 in level.players) + { + if(var_19.pers["team"] == param_01) + { + var_19.radarshowenemydirection = 0; + } + } + } + } + + level notify("uav_update"); +} + +//Function Number: 5 +func_3084(param_00,param_01) +{ + self endon("death"); + level endon("game_ended"); + wait 0.5; + playfxontag(param_00,self,param_01); +} + +//Function Number: 6 +func_3085() +{ + level endon("game_ended"); + for(;;) + { + var_00 = common_scripts\utility::waittill_any_return("death","uav_strike_cancel","uav_strike_successful"); + if(var_00 == "uav_strike_successful") + { + return 1; + } + else + { + return 0; + } + } +} + +//Function Number: 7 +func_3086() +{ + var_00 = maps\mp\gametypes\_hud_util::createfontstring("bigfixed",0.75); + var_00 maps\mp\gametypes\_hud_util::setpoint("CENTER","CENTER",0,150); + var_00 settext(&"MP_LASE_TARGET_FOR_PREDATOR_STRIKE"); + common_scripts\utility::waittill_any_timeout(4,"death","uav_strike_cancel","uav_strike_successful"); + var_00 maps\mp\gametypes\_hud_util::destroyelem(); +} + +//Function Number: 8 +func_3087() +{ + level endon("game_ended"); + self endon("death"); + self endon("uav_strike_used"); + for(;;) + { + self waittill("weapon_change",var_00); + if(var_00 != "uav_strike_marker_mp") + { + self notify("uav_strike_cancel"); + break; + } + else + { + wait 0.05; + } + } +} + +//Function Number: 9 +func_3088() +{ + level endon("game_ended"); + self endon("death"); + thread func_3086(); + thread func_3087(); + var_00 = common_scripts\utility::getlastweapon(); + var_01 = undefined; + var_02 = self getweaponslistprimaries(); + foreach(var_04 in var_02) + { + if(var_04 != var_00) + { + var_01 = var_04; + self takeweapon(var_01); + break; + } + } + + maps\mp\_utility::_giveweapon("uav_strike_marker_mp"); + self switchtoweapon("uav_strike_marker_mp"); + var_06 = undefined; + for(;;) + { + var_07 = common_scripts\utility::waittill_any_return("weapon_fired","uav_strike_cancel"); + if(var_07 == "uav_strike_cancel") + { + break; + } + + var_08 = self geteye(); + var_09 = anglestoforward(self getplayerangles()); + var_0A = var_08 + var_09 * 15000; + var_06 = bullettrace(var_08,var_0A,1,self); + if(isdefined(var_06["position"])) + { + break; + } + } + + if(isdefined(var_06)) + { + self notify("uav_strike_used"); + var_0B = var_06["position"]; + var_0C = spawnfx(level._effect["laserTarget"],var_0B); + triggerfx(var_0C); + var_0C thread func_3089(); + magicbullet("uav_strike_projectile_mp",var_0B + (0,0,4000),var_0B,self); + } + + self takeweapon("uav_strike_marker_mp"); + if(var_07 != "uav_strike_cancel") + { + self switchtoweapon(var_00); + } + + if(isdefined(var_01)) + { + maps\mp\_utility::_giveweapon(var_01); + } + + if(isdefined(var_06)) + { + self notify("uav_strike_successful"); + } +} + +//Function Number: 10 +func_3089() +{ + wait 2; + self delete(); +} + +//Function Number: 11 +waittill_notify_or_timeout_hostmigration_pause(param_00,param_01) +{ + self endon(param_00); + maps\mp\gametypes\_hostmigration::func_2740(param_01); +} + +//Function Number: 12 +func_308B() +{ + self endon("death"); + for(;;) + { + level common_scripts\utility::waittill_either("joined_team","uav_update"); + self hide(); + foreach(var_01 in level.players) + { + if(level.teambased) + { + if(var_01.team != self.team) + { + self showtoplayer(var_01); + } + + continue; + } + + if(isdefined(self.owner) && var_01 == self.owner) + { + continue; + } + + self showtoplayer(var_01); + } + } +} + +//Function Number: 13 +damagetracker(param_00,param_01) +{ + level endon("game_ended"); + self setcandamage(1); + self.health = 999999; + if(param_01) + { + self.maxhealth = 2000; + } + else + { + self.maxhealth = 1000; + } + + self.damagetaken = 0; + for(;;) + { + self waittill("damage",var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09,var_0A,var_0B); + if(!isplayer(var_03)) + { + if(!isdefined(self)) + { + return; + } + + continue; + } + + if(isdefined(var_0A) && var_0A & level.idflags_penetration) + { + self.wasdamagedfrombulletpenetration = 1; + } + + self.wasdamaged = 1; + var_0C = var_02; + if(isplayer(var_03)) + { + var_03 maps\mp\gametypes\_damagefeedback::updatedamagefeedback(""); + if(var_06 == "MOD_RIFLE_BULLET" || var_06 == "MOD_PISTOL_BULLET") + { + if(var_03 maps\mp\_utility::func_27AF("specialty_armorpiercing")) + { + var_0C = var_0C + var_02 * level.armorpiercingmod; + } + } + } + + if(isdefined(var_0B)) + { + switch(var_0B) + { + case "javelin_mp": + case "stinger_mp": + self.largeprojectiledamage = 1; + var_0C = self.maxhealth + 1; + break; + + case "sam_projectile_mp": + self.largeprojectiledamage = 1; + var_0D = 0.25; + if(param_01) + { + var_0D = 0.15; + } + + var_0C = self.maxhealth * var_0D; + break; + } + + maps\mp\killstreaks\_killstreaks::killstreakhit(var_03,var_0B,self); + } + + self.damagetaken = self.damagetaken + var_0C; + if(self.damagetaken >= self.maxhealth) + { + if(isplayer(var_03) && !isdefined(self.owner) || var_03 != self.owner) + { + self hide(); + var_0E = anglestoright(self.angles) * 200; + playfx(level.uav_fx["explode"],self.origin,var_0E); + if(isdefined(self.uavtype) && self.uavtype == "remote_mortar") + { + thread maps\mp\_utility::teamplayercardsplash("callout_destroyed_remote_mortar",var_03); + } + else if(param_00) + { + thread maps\mp\_utility::teamplayercardsplash("callout_destroyed_counter_uav",var_03); + } + else + { + thread maps\mp\_utility::teamplayercardsplash("callout_destroyed_uav",var_03); + } + + thread maps\mp\gametypes\_missions::vehiclekilled(self.owner,self,undefined,var_03,var_02,var_06,var_0B); + var_03 thread maps\mp\gametypes\_rank::func_2AB3("kill",50,var_0B,var_06); + var_03 notify("destroyed_killstreak"); + if(isdefined(self.uavremotemarkedby) && self.uavremotemarkedby != var_03) + { + self.uavremotemarkedby thread maps\mp\killstreaks\_remoteuav::remoteuav_processtaggedassist(); + } + } + + self notify("death"); + return; + } + } +} + +//Function Number: 14 +func_308C(param_00) +{ + return useuav("uav"); +} + +//Function Number: 15 +tryuseuavsupport(param_00) +{ + return useuav("uav_support"); +} + +//Function Number: 16 +tryusedoubleuav(param_00) +{ + return useuav("double_uav"); +} + +//Function Number: 17 +func_308F(param_00) +{ + return useuav("triple_uav"); +} + +//Function Number: 18 +tryusecounteruav(param_00) +{ + return useuav("counter_uav"); +} + +//Function Number: 19 +uavstrikesetup() +{ + self.usedstrikeuav = 0; +} + +//Function Number: 20 +tryuseuavstrike(param_00) +{ + if(self.usedstrikeuav == 0) + { + self.usedstrikeuav = 1; + useuav("uav_strike"); + } + + thread func_3088(); + return func_3085(); +} + +//Function Number: 21 +tryusedirectionaluav(param_00) +{ + return useuav("directional_uav"); +} + +//Function Number: 22 +useuav(param_00) +{ + if(!maps\mp\_utility::func_2DF3()) + { + return 0; + } + + maps\mp\_matchdata::logkillstreakevent(param_00,self.origin); + var_01 = self.pers["team"]; + var_02 = level.radarviewtime; + level thread launchuav(self,var_01,var_02,param_00); + switch(param_00) + { + case "counter_uav": + self notify("used_counter_uav"); + break; + + case "double_uav": + self notify("used_double_uav"); + break; + + case "triple_uav": + level thread maps\mp\_utility::teamplayercardsplash("used_triple_uav",self,var_01); + self notify("used_triple_uav"); + break; + + case "directional_uav": + self.radarshowenemydirection = 1; + if(level.teambased) + { + foreach(var_04 in level.players) + { + if(var_04.pers["team"] == var_01) + { + var_04.radarshowenemydirection = 1; + } + } + } + + level thread maps\mp\_utility::teamplayercardsplash("used_directional_uav",self,var_01); + self notify("used_directional_uav"); + break; + + default: + self notify("used_uav"); + break; + } + + return 1; +} + +//Function Number: 23 +func_3096() +{ + level endon("game_ended"); + for(;;) + { + level waittill("uav_update"); + if(level.teambased) + { + func_3098("allies"); + func_3098("axis"); + continue; + } + + updateplayersuavstatus(); + } +} + +//Function Number: 24 +func_3097(param_00) +{ + var_01 = 0; + var_02 = 0; + foreach(var_04 in level.uavmodels[param_00]) + { + if(var_04.uavtype == "counter") + { + continue; + } + + if(var_04.uavtype == "remote_mortar") + { + continue; + } + + var_01 = var_01 + var_04.value; + } + + foreach(var_04 in level.uavmodels[level.otherteam[param_00]]) + { + if(var_04.uavtype != "counter") + { + continue; + } + + var_02 = var_02 + var_04.value; + } + + if(var_02 > 0) + { + var_08 = -3; + } + else + { + var_08 = var_02; + } + + var_09 = getuavstrengthmin(); + var_0A = getuavstrengthmax(); + if(var_08 <= var_09) + { + var_08 = var_09; + } + else if(var_08 >= var_0A) + { + var_08 = var_0A; + } + + return var_08; +} + +//Function Number: 25 +func_3098(param_00) +{ + var_01 = func_3097(param_00); + setteamradarstrength(param_00,var_01); + if(var_01 >= getuavstrengthlevelneutral()) + { + unblockteamradar(param_00); + } + else + { + blockteamradar(param_00); + } + + if(var_01 <= getuavstrengthlevelneutral()) + { + setteamradarwrapper(param_00,0); + func_309B(param_00); + return; + } + + if(var_01 >= getuavstrengthlevelshowenemyfastsweep()) + { + level.radarmode[param_00] = "fast_radar"; + } + else + { + level.radarmode[param_00] = "normal_radar"; + } + + func_309B(param_00); + setteamradarwrapper(param_00,1); +} + +//Function Number: 26 +updateplayersuavstatus() +{ + var_00 = getuavstrengthmin(); + var_01 = getuavstrengthmax(); + var_02 = getuavstrengthlevelshowenemydirectional(); + foreach(var_04 in level.players) + { + var_05 = level.activeuavs[var_04.guid + "_radarStrength"]; + foreach(var_07 in level.players) + { + if(var_07 == var_04) + { + continue; + } + + var_08 = level.activecounteruavs[var_07.guid]; + if(var_08 > 0) + { + var_05 = -3; + break; + } + } + + if(var_05 <= var_00) + { + var_05 = var_00; + } + else if(var_05 >= var_01) + { + var_05 = var_01; + } + + var_04.radarstrength = var_05; + if(var_05 >= getuavstrengthlevelneutral()) + { + var_04.isradarblocked = 0; + } + else + { + var_04.isradarblocked = 1; + } + + if(var_05 <= getuavstrengthlevelneutral()) + { + var_04.hasradar = 0; + var_04.radarshowenemydirection = 0; + continue; + } + + if(var_05 >= getuavstrengthlevelshowenemyfastsweep()) + { + var_04.radarmode = "fast_radar"; + } + else + { + var_04.radarmode = "normal_radar"; + } + + var_04.radarshowenemydirection = var_05 >= var_02; + var_04.hasradar = 1; + } +} + +//Function Number: 27 +blockplayeruav() +{ + self endon("disconnect"); + self notify("blockPlayerUAV"); + self endon("blockPlayerUAV"); + self.isradarblocked = 1; + wait level.uavblocktime; + self.isradarblocked = 0; +} + +//Function Number: 28 +func_309B(param_00) +{ + var_01 = func_3097(param_00) >= getuavstrengthlevelshowenemydirectional(); + foreach(var_03 in level.players) + { + if(var_03.team == "spectator") + { + continue; + } + + var_03.radarmode = level.radarmode[var_03.team]; + if(var_03.team == param_00) + { + var_03.radarshowenemydirection = var_01; + } + } +} + +//Function Number: 29 +useplayeruav(param_00,param_01) +{ + level endon("game_ended"); + self endon("disconnect"); + self notify("usePlayerUAV"); + self endon("usePlayerUAV"); + if(param_00) + { + self.radarmode = "fast_radar"; + } + else + { + self.radarmode = "normal_radar"; + } + + self.hasradar = 1; + wait param_01; + self.hasradar = 0; +} + +//Function Number: 30 +setteamradarwrapper(param_00,param_01) +{ + setteamradar(param_00,param_01); + level notify("radar_status_change",param_00); +} + +//Function Number: 31 +handleincomingstinger() +{ + level endon("game_ended"); + self endon("death"); + for(;;) + { + level waittill("stinger_fired",var_00,var_01,var_02); + if(!isdefined(var_02) || var_02 != self) + { + continue; + } + + var_01 thread stingerproximitydetonate(var_02,var_00); + } +} + +//Function Number: 32 +stingerproximitydetonate(param_00,param_01) +{ + self endon("death"); + var_02 = distance(self.origin,param_00 getpointinbounds(0,0,0)); + var_03 = param_00 getpointinbounds(0,0,0); + for(;;) + { + if(!isdefined(param_00)) + { + var_04 = var_03; + } + else + { + var_04 = param_00 getpointinbounds(0,0,0); + } + + var_03 = var_04; + var_05 = distance(self.origin,var_04); + if(var_05 < var_02) + { + var_02 = var_05; + } + + if(var_05 > var_02) + { + if(var_05 > 1536) + { + return; + } + + radiusdamage(self.origin,1536,600,600,param_01,"MOD_EXPLOSIVE","stinger_mp"); + playfx(level.stingerfxid,self.origin); + self hide(); + self notify("deleted"); + wait 0.05; + self delete(); + param_01 notify("killstreak_destroyed"); + } + + wait 0.05; + } +} + +//Function Number: 33 +func_309E() +{ + if(level.teambased) + { + level.uavmodels[self.team][level.uavmodels[self.team].size] = self; + return; + } + + level.uavmodels[self.owner.guid + "_" + gettime()] = self; +} + +//Function Number: 34 +func_309F() +{ + var_00 = []; + if(level.teambased) + { + var_01 = self.team; + foreach(var_03 in level.uavmodels[var_01]) + { + if(!isdefined(var_03)) + { + continue; + } + + var_00[var_00.size] = var_03; + } + + level.uavmodels[var_01] = var_00; + return; + } + + foreach(var_03 in level.uavmodels) + { + if(!isdefined(var_03)) + { + continue; + } + + var_00[var_00.size] = var_03; + } + + level.uavmodels = var_00; +} + +//Function Number: 35 +func_30A0() +{ + if(level.teambased) + { + level.activeuavs[self.team]++; + return; + } + + level.activeuavs[self.owner.guid]++; + level.activeuavs[self.owner.guid + "_radarStrength"] = level.activeuavs[self.owner.guid + "_radarStrength"] + self.value; +} + +//Function Number: 36 +addactivecounteruav() +{ + if(level.teambased) + { + level.activecounteruavs[self.team]++; + return; + } + + level.activecounteruavs[self.owner.guid]++; +} + +//Function Number: 37 +removeactiveuav() +{ + if(level.teambased) + { + level.activeuavs[self.team]--; + if(!level.activeuavs[self.team]) + { + return; + } + + return; + } + + if(isdefined(self.owner)) + { + level.activeuavs[self.owner.guid]--; + level.activeuavs[self.owner.guid + "_radarStrength"] = level.activeuavs[self.owner.guid + "_radarStrength"] - self.value; + } +} + +//Function Number: 38 +func_30A3() +{ + if(level.teambased) + { + level.activecounteruavs[self.team]--; + if(!level.activecounteruavs[self.team]) + { + return; + } + + return; + } + + if(isdefined(self.owner)) + { + level.activecounteruavs[self.owner.guid]--; + } +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/perks/_perkfunctions.gsc b/MW3/Xbox/MP/maps/mp/perks/_perkfunctions.gsc new file mode 100644 index 0000000..783f60e --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/perks/_perkfunctions.gsc @@ -0,0 +1,1695 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\perks\_perkfunctions.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 131 + * Decompile Time: 2239 ms + * Timestamp: 10/27/2023 2:27:32 AM +*******************************************************************/ + +//Function Number: 1 +setoverkillpro() +{ +} + +//Function Number: 2 +unsetoverkillpro() +{ +} + +//Function Number: 3 +func_295F() +{ +} + +//Function Number: 4 +func_2960() +{ +} + +//Function Number: 5 +func_295D() +{ + func_2A36(); + func_2A35(); +} + +//Function Number: 6 +func_2A35() +{ + self waittill("death"); + self endon("disconnect"); + self endon("endAutoSpotAdsWatcher"); + level endon("game_ended"); + self autospotoverlayoff(); +} + +//Function Number: 7 +func_295E() +{ + self notify("endAutoSpotAdsWatcher"); + self autospotoverlayoff(); +} + +//Function Number: 8 +func_2A36() +{ + self endon("death"); + self endon("disconnect"); + self endon("endAutoSpotAdsWatcher"); + level endon("game_ended"); + var_00 = 0; + for(;;) + { + wait 0.05; + if(self isusingturret()) + { + self autospotoverlayoff(); + continue; + } + + var_01 = self playerads(); + if(var_01 < 1 && var_00) + { + var_00 = 0; + self autospotoverlayoff(); + } + + if(var_01 < 1 && !var_00) + { + continue; + } + + if(var_01 == 1 && !var_00) + { + var_00 = 1; + self autospotoverlayon(); + } + } +} + +//Function Number: 9 +func_295B() +{ +} + +//Function Number: 10 +func_295C() +{ +} + +//Function Number: 11 +func_2959() +{ + self.shellshockreduction = 0.25; +} + +//Function Number: 12 +unsethardshell() +{ + self.shellshockreduction = 0; +} + +//Function Number: 13 +func_2957() +{ + self setviewkickscale(0.5); +} + +//Function Number: 14 +func_2958() +{ + self setviewkickscale(1); +} + +//Function Number: 15 +func_2955() +{ + self endon("death"); + self endon("disconnect"); + self endon("endDoubleLoad"); + level endon("game_ended"); + for(;;) + { + self waittill("reload"); + var_00 = self getweaponslist("primary"); + foreach(var_02 in var_00) + { + var_03 = self getweaponammoclip(var_02); + var_04 = weaponclipsize(var_02); + var_05 = var_04 - var_03; + var_06 = self getweaponammostock(var_02); + if(var_03 != var_04 && var_06 > 0) + { + if(var_03 + var_06 >= var_04) + { + self setweaponammoclip(var_02,var_04); + self setweaponammostock(var_02,var_06 - var_05); + continue; + } + + self setweaponammoclip(var_02,var_03 + var_06); + if(var_06 - var_05 > 0) + { + self setweaponammostock(var_02,var_06 - var_05); + continue; + } + + self setweaponammostock(var_02,0); + } + } + } +} + +//Function Number: 16 +unsetdoubleload() +{ + self notify("endDoubleLoad"); +} + +//Function Number: 17 +setmarksman() +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + maps\mp\_utility::setrecoilscale(10); + self.recoilscale = 10; +} + +//Function Number: 18 +unsetmarksman() +{ + maps\mp\_utility::setrecoilscale(0); + self.recoilscale = 0; +} + +//Function Number: 19 +func_2951() +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + self.stunscaler = 0.5; +} + +//Function Number: 20 +unsetstunresistance() +{ + self.stunscaler = 1; +} + +//Function Number: 21 +setsteadyaimpro() +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + self setaimspreadmovementscale(0.5); +} + +//Function Number: 22 +func_2950() +{ + self notify("end_SteadyAimPro"); + self setaimspreadmovementscale(1); +} + +//Function Number: 23 +func_2A38(param_00,param_01) +{ + self endon("death"); + self endon("disconnect"); + self endon("end_perkUseTracker"); + level endon("game_ended"); + for(;;) + { + self waittill("empty_offhand"); + if(!common_scripts\utility::isoffhandweaponenabled()) + { + continue; + } + + self [[ param_01 ]](maps\mp\_utility::func_27AF("_specialty_blastshield")); + } +} + +//Function Number: 24 +perkusedeathtracker() +{ + self endon("disconnect"); + self waittill("death"); + self._useperkenabled = undefined; +} + +//Function Number: 25 +func_293B() +{ +} + +//Function Number: 26 +func_293C() +{ + self notify("end_perkUseTracker"); +} + +//Function Number: 27 +func_2939() +{ + if(isdefined(self.endgame)) + { + return; + } + + self.maxhealth = maps\mp\gametypes\_tweakables::func_270D("player","maxhealth") * 4; + self.health = self.maxhealth; + self.endgame = 1; + self.attackertable[0] = ""; + self visionsetnakedforplayer("end_game",5); + thread func_2A42(7); + maps\mp\gametypes\_gamelogic::sethasdonecombat(self,1); +} + +//Function Number: 28 +func_293A() +{ + self notify("stopEndGame"); + self.endgame = undefined; + func_2A3F(); + if(!isdefined(self.endgametimer)) + { + return; + } + + self.endgametimer maps\mp\gametypes\_hud_util::destroyelem(); + self.endgameicon maps\mp\gametypes\_hud_util::destroyelem(); +} + +//Function Number: 29 +func_2A3F() +{ + if(isdefined(level.nukedetonated)) + { + self visionsetnakedforplayer(level.nukevisionset,1); + return; + } + + self visionsetnakedforplayer("",1); +} + +//Function Number: 30 +func_2A42(param_00) +{ + self endon("death"); + self endon("disconnect"); + self endon("joined_team"); + level endon("game_ended"); + self endon("stopEndGame"); + wait param_00 + 1; + maps\mp\_utility::_suicide(); +} + +//Function Number: 31 +func_2925() +{ + thread tracksiegeenable(); + thread func_2A44(); +} + +//Function Number: 32 +tracksiegeenable() +{ + self endon("death"); + self endon("disconnect"); + self endon("stop_trackSiege"); + for(;;) + { + self waittill("gambit_on"); + self.movespeedscaler = 0; + maps\mp\gametypes\_weapons::func_2884(); + var_00 = weaponclass(self getcurrentweapon()); + if(var_00 == "pistol" || var_00 == "smg") + { + self setspreadoverride(1); + } + else + { + self setspreadoverride(2); + } + + self player_recoilscaleon(0); + self allowjump(0); + } +} + +//Function Number: 33 +func_2A44() +{ + self endon("death"); + self endon("disconnect"); + self endon("stop_trackSiege"); + for(;;) + { + self waittill("gambit_off"); + unsetsiege(); + } +} + +//Function Number: 34 +func_2A45() +{ + self endon("death"); + self endon("disconnect"); + self notifyonplayercommand("adjustedStance","+stance"); + for(;;) + { + self waittill("adjustedStance"); + if(self.movespeedscaler != 0) + { + continue; + } + + unsetsiege(); + } +} + +//Function Number: 35 +func_2A46() +{ + self endon("death"); + self endon("disconnect"); + self notifyonplayercommand("jumped","+goStand"); + for(;;) + { + self waittill("jumped"); + if(self.movespeedscaler != 0) + { + continue; + } + + unsetsiege(); + } +} + +//Function Number: 36 +unsetsiege() +{ + self.movespeedscaler = 1; + self resetspreadoverride(); + maps\mp\gametypes\_weapons::func_2884(); + self player_recoilscaleoff(); + self allowjump(1); +} + +//Function Number: 37 +func_2935() +{ + if(!level.hardcoremode) + { + self.maxhealth = maps\mp\gametypes\_tweakables::func_270D("player","maxhealth"); + if(isdefined(self.xpscaler) && self.xpscaler == 1 && self.maxhealth > 30) + { + self.xpscaler = 2; + } + } +} + +//Function Number: 38 +unsetchallenger() +{ + self.xpscaler = 1; +} + +//Function Number: 39 +func_2937() +{ + self.objectivescaler = 1.2; +} + +//Function Number: 40 +func_2938() +{ + self.objectivescaler = 1; +} + +//Function Number: 41 +setlightweight() +{ + self.movespeedscaler = maps\mp\_utility::func_80F2(); + maps\mp\gametypes\_weapons::func_2884(); +} + +//Function Number: 42 +func_2930() +{ + self.movespeedscaler = 1; + maps\mp\gametypes\_weapons::func_2884(); +} + +//Function Number: 43 +setblackbox() +{ + self.killstreakscaler = 1.5; +} + +//Function Number: 44 +func_292E() +{ + self.killstreakscaler = 1; +} + +//Function Number: 45 +func_2931() +{ + maps\mp\_utility::giveperk("specialty_bulletaccuracy",1); + maps\mp\_utility::giveperk("specialty_holdbreath",0); +} + +//Function Number: 46 +unsetsteelnerves() +{ + maps\mp\_utility::func_282E("specialty_bulletaccuracy"); + maps\mp\_utility::func_282E("specialty_holdbreath"); +} + +//Function Number: 47 +func_2933() +{ +} + +//Function Number: 48 +unsetdelaymine() +{ +} + +//Function Number: 49 +func_2A48() +{ + self attachshieldmodel("weapon_riot_shield_mp","tag_shield_back"); +} + +//Function Number: 50 +func_2A49() +{ + self detachshieldmodel("weapon_riot_shield_mp","tag_shield_back"); +} + +//Function Number: 51 +setlocaljammer() +{ + if(!maps\mp\_utility::func_27E5()) + { + self radarjamon(); + } +} + +//Function Number: 52 +unsetlocaljammer() +{ + self radarjamoff(); +} + +//Function Number: 53 +func_293D() +{ + thread killstreakthink("ac130",7,"end_ac130Think"); +} + +//Function Number: 54 +unsetac130() +{ + self notify("end_ac130Think"); +} + +//Function Number: 55 +func_293F() +{ + thread killstreakthink("airdrop_sentry_minigun",2,"end_sentry_minigunThink"); +} + +//Function Number: 56 +func_2940() +{ + self notify("end_sentry_minigunThink"); +} + +//Function Number: 57 +func_2943() +{ + thread killstreakthink("tank",6,"end_tankThink"); +} + +//Function Number: 58 +func_2944() +{ + self notify("end_tankThink"); +} + +//Function Number: 59 +setprecision_airstrike() +{ + thread killstreakthink("precision_airstrike",6,"end_precision_airstrike"); +} + +//Function Number: 60 +unsetprecision_airstrike() +{ + self notify("end_precision_airstrike"); +} + +//Function Number: 61 +setpredatormissile() +{ + thread killstreakthink("predator_missile",4,"end_predator_missileThink"); +} + +//Function Number: 62 +func_2942() +{ + self notify("end_predator_missileThink"); +} + +//Function Number: 63 +func_2947() +{ + thread killstreakthink("helicopter_minigun",5,"end_helicopter_minigunThink"); +} + +//Function Number: 64 +unsethelicopterminigun() +{ + self notify("end_helicopter_minigunThink"); +} + +//Function Number: 65 +killstreakthink(param_00,param_01,param_02) +{ + self endon("death"); + self endon("disconnect"); + self endon(param_02); + for(;;) + { + self waittill("killed_enemy"); + if(self.pers["cur_kill_streak"] != param_01) + { + continue; + } + + thread maps\mp\killstreaks\_killstreaks::givekillstreak(param_00); + thread maps\mp\gametypes\_hud_message::killstreaksplashnotify(param_00,param_01); + } +} + +//Function Number: 66 +setthermal() +{ + self thermalvisionon(); +} + +//Function Number: 67 +func_292C() +{ + self thermalvisionoff(); +} + +//Function Number: 68 +func_2949() +{ + thread onemanarmyweaponchangetracker(); +} + +//Function Number: 69 +unsetonemanarmy() +{ + self notify("stop_oneManArmyTracker"); +} + +//Function Number: 70 +onemanarmyweaponchangetracker() +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + self endon("stop_oneManArmyTracker"); + for(;;) + { + self waittill("weapon_change",var_00); + if(var_00 != "onemanarmy_mp") + { + continue; + } + + thread func_2A4F(); + } +} + +//Function Number: 71 +func_2A4E(param_00) +{ + if(param_00 == game["menu_onemanarmy"]) + { + return 1; + } + + if(isdefined(game["menu_onemanarmy_defaults_splitscreen"]) && param_00 == game["menu_onemanarmy_defaults_splitscreen"]) + { + return 1; + } + + if(isdefined(game["menu_onemanarmy_custom_splitscreen"]) && param_00 == game["menu_onemanarmy_custom_splitscreen"]) + { + return 1; + } + + return 0; +} + +//Function Number: 72 +func_2A4F() +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + common_scripts\utility::_disableweaponswitch(); + common_scripts\utility::_disableoffhandweapons(); + common_scripts\utility::_disableusability(); + self openpopupmenu(game["menu_onemanarmy"]); + thread func_2A50(); + self waittill("menuresponse",var_00,var_01); + common_scripts\utility::_enableweaponswitch(); + common_scripts\utility::_enableoffhandweapons(); + common_scripts\utility::_enableusability(); + if(var_01 == "back" || !func_2A4E(var_00) || maps\mp\_utility::isusingremote()) + { + if(self getcurrentweapon() == "onemanarmy_mp") + { + common_scripts\utility::_disableweaponswitch(); + common_scripts\utility::_disableoffhandweapons(); + common_scripts\utility::_disableusability(); + self switchtoweapon(common_scripts\utility::getlastweapon()); + self waittill("weapon_change"); + common_scripts\utility::_enableweaponswitch(); + common_scripts\utility::_enableoffhandweapons(); + common_scripts\utility::_enableusability(); + } + + return; + } + + thread func_2A51(var_01); +} + +//Function Number: 73 +func_2A50() +{ + self endon("menuresponse"); + self endon("disconnect"); + level endon("game_ended"); + self waittill("death"); + common_scripts\utility::_enableweaponswitch(); + common_scripts\utility::_enableoffhandweapons(); + common_scripts\utility::_enableusability(); + self closepopupmenu(); +} + +//Function Number: 74 +func_2A51(param_00) +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + if(maps\mp\_utility::func_27AF("specialty_omaquickchange")) + { + var_01 = 3; + self playlocalsound("foly_onemanarmy_bag3_plr"); + self playsoundtoteam("foly_onemanarmy_bag3_npc","allies",self); + self playsoundtoteam("foly_onemanarmy_bag3_npc","axis",self); + } + else + { + var_01 = 6; + self playlocalsound("foly_onemanarmy_bag6_plr"); + self playsoundtoteam("foly_onemanarmy_bag6_npc","allies",self); + self playsoundtoteam("foly_onemanarmy_bag6_npc","axis",self); + } + + thread omausebar(var_01); + common_scripts\utility::_disableweapon(); + common_scripts\utility::_disableoffhandweapons(); + common_scripts\utility::_disableusability(); + wait var_01; + common_scripts\utility::_enableweapon(); + common_scripts\utility::_enableoffhandweapons(); + common_scripts\utility::_enableusability(); + self.omaclasschanged = 1; + maps\mp\gametypes\_class::func_2A52(self.pers["team"],param_00,0); + if(isdefined(self.carryflag)) + { + self attach(self.carryflag,"J_spine4",1); + } + + self notify("changed_kit"); + level notify("changed_kit"); +} + +//Function Number: 75 +omausebar(param_00) +{ + self endon("disconnect"); + var_01 = maps\mp\gametypes\_hud_util::createprimaryprogressbar(0,-25); + var_02 = maps\mp\gametypes\_hud_util::createprimaryprogressbartext(0,-25); + var_02 settext(&"MPUI_CHANGING_KIT"); + var_01 maps\mp\gametypes\_hud_util::updatebar(0,1 / param_00); + var_03 = 0; + while(var_03 < param_00 && isalive(self) && !level.gameended) + { + wait 0.05; + var_03 = var_03 + 0.05; + } + + var_01 maps\mp\gametypes\_hud_util::destroyelem(); + var_02 maps\mp\gametypes\_hud_util::destroyelem(); +} + +//Function Number: 76 +func_2923() +{ + self setweaponhudiconoverride("primaryoffhand","specialty_blastshield"); +} + +//Function Number: 77 +func_2924() +{ + self setweaponhudiconoverride("primaryoffhand","none"); +} + +//Function Number: 78 +func_2927() +{ +} + +//Function Number: 79 +func_2928() +{ +} + +//Function Number: 80 +settacticalinsertion() +{ + self setoffhandsecondaryclass("flash"); + maps\mp\_utility::_giveweapon("flare_mp",0); + self givestartammo("flare_mp"); + thread func_2A59(); +} + +//Function Number: 81 +func_294E() +{ + self notify("end_monitorTIUse"); +} + +//Function Number: 82 +clearprevioustispawnpoint() +{ + common_scripts\utility::waittill_any("disconnect","joined_team","joined_spectators"); + if(isdefined(self.setspawnpoint)) + { + func_2A63(self.setspawnpoint); + } +} + +//Function Number: 83 +func_2A56() +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + self endon("end_monitorTIUse"); + while(maps\mp\_utility::isreallyalive(self)) + { + if(func_2A58()) + { + self.tispawnposition = self.origin; + } + + wait 0.05; + } +} + +//Function Number: 84 +func_2A58() +{ + if(canspawn(self.origin) && self isonground()) + { + return 1; + } + + return 0; +} + +//Function Number: 85 +func_2A59() +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + self endon("end_monitorTIUse"); + thread func_2A56(); + thread clearprevioustispawnpoint(); + for(;;) + { + self waittill("grenade_fire",var_00,var_01); + if(var_01 != "flare_mp") + { + continue; + } + + if(isdefined(self.setspawnpoint)) + { + func_2A63(self.setspawnpoint); + } + + if(!isdefined(self.tispawnposition)) + { + continue; + } + + if(maps\mp\_utility::func_2A5A()) + { + continue; + } + + var_02 = playerphysicstrace(self.tispawnposition + (0,0,16),self.tispawnposition - (0,0,2048)) + (0,0,1); + var_03 = spawn("script_model",var_02); + var_03.angles = self.angles; + var_03.team = self.team; + var_03.owner = self; + var_03.enemytrigger = spawn("script_origin",var_02); + var_03 thread func_2A5D(self); + var_03.playerspawnpos = self.tispawnposition; + var_03 thread maps\mp\gametypes\_weapons::createbombsquadmodel("weapon_light_stick_tactical_bombsquad","tag_fire_fx",level.otherteam[self.team],self); + self.setspawnpoint = var_03; + } +} + +//Function Number: 86 +func_2A5D(param_00) +{ + self setmodel(level.spawnglowmodel["enemy"]); + if(level.teambased) + { + maps\mp\_entityheadicons::setteamheadicon(self.team,(0,0,20)); + } + else + { + maps\mp\_entityheadicons::setplayerheadicon(param_00,(0,0,20)); + } + + thread func_2A5F(param_00); + thread func_2A65(param_00); + thread func_2A61(param_00); + thread glowstickteamupdater(level.otherteam[self.team],level.spawnglow["enemy"],param_00); + var_01 = spawn("script_model",self.origin + (0,0,0)); + var_01.angles = self.angles; + var_01 setmodel(level.spawnglowmodel["friendly"]); + var_01 setcontents(0); + var_01 thread glowstickteamupdater(self.team,level.spawnglow["friendly"],param_00); + var_01 playloopsound("emt_road_flare_burn"); + self waittill("death"); + var_01 stoploopsound(); + var_01 delete(); +} + +//Function Number: 87 +glowstickteamupdater(param_00,param_01,param_02) +{ + self endon("death"); + wait 0.05; + var_03 = self gettagangles("tag_fire_fx"); + var_04 = spawnfx(param_01,self gettagorigin("tag_fire_fx"),anglestoforward(var_03),anglestoup(var_03)); + triggerfx(var_04); + thread deleteondeath(var_04); + for(;;) + { + self hide(); + var_04 hide(); + foreach(var_06 in level.players) + { + if(var_06.team == param_00 && level.teambased) + { + self showtoplayer(var_06); + var_04 showtoplayer(var_06); + continue; + } + + if(!level.teambased && var_06 == param_02 && param_01 == level.spawnglow["friendly"]) + { + self showtoplayer(var_06); + var_04 showtoplayer(var_06); + continue; + } + + if(!level.teambased && var_06 != param_02 && param_01 == level.spawnglow["enemy"]) + { + self showtoplayer(var_06); + var_04 showtoplayer(var_06); + } + } + + level common_scripts\utility::waittill_either("joined_team","player_spawned"); + } +} + +//Function Number: 88 +deleteondeath(param_00) +{ + self waittill("death"); + if(isdefined(param_00)) + { + param_00 delete(); + } +} + +//Function Number: 89 +func_2A5F(param_00) +{ + self endon("death"); + self setcandamage(1); + self.health = 999999; + self.maxhealth = 100; + self.damagetaken = 0; + for(;;) + { + self waittill("damage",var_01,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09,var_0A); + if(!maps\mp\gametypes\_weapons::func_27A1(self.owner,var_02)) + { + continue; + } + + if(isdefined(var_0A)) + { + switch(var_0A) + { + case "concussion_grenade_mp": + case "flash_grenade_mp": + case "smoke_grenade_mp": + break; + } + } + + if(!isdefined(self)) + { + return; + } + + if(var_05 == "MOD_MELEE") + { + self.damagetaken = self.damagetaken + self.maxhealth; + } + + if(isdefined(var_09) && var_09 & level.idflags_penetration) + { + self.wasdamagedfrombulletpenetration = 1; + } + + self.wasdamaged = 1; + self.damagetaken = self.damagetaken + var_01; + if(isplayer(var_02)) + { + var_02 maps\mp\gametypes\_damagefeedback::updatedamagefeedback("tactical_insertion"); + } + + if(self.damagetaken >= self.maxhealth) + { + if(isdefined(param_00) && var_02 != param_00) + { + var_02 notify("destroyed_insertion",param_00); + var_02 notify("destroyed_explosive"); + param_00 thread maps\mp\_utility::func_2A60("ti_destroyed"); + } + + var_02 thread func_2A63(self); + } + } +} + +//Function Number: 90 +func_2A61(param_00) +{ + self endon("death"); + level endon("game_ended"); + param_00 endon("disconnect"); + self setcursorhint("HINT_NOICON"); + self sethintstring(&"MP_PATCH_PICKUP_TI"); + thread updateenemyuse(param_00); + for(;;) + { + self waittill("trigger",var_01); + var_01 playsound("chemlight_pu"); + if(!var_01 maps\mp\_utility::isjuggernaut()) + { + var_01 thread settacticalinsertion(); + } + + var_01 thread func_2A63(self); + } +} + +//Function Number: 91 +updateenemyuse(param_00) +{ + self endon("death"); + for(;;) + { + maps\mp\_utility::setselfusable(param_00); + level common_scripts\utility::waittill_either("joined_team","player_spawned"); + } +} + +//Function Number: 92 +func_2A63(param_00) +{ + if(isdefined(param_00.enemytrigger)) + { + param_00.enemytrigger delete(); + } + + var_01 = param_00.origin; + var_02 = param_00.angles; + param_00 delete(); + var_03 = spawn("script_model",var_01); + var_03.angles = var_02; + var_03 setmodel(level.spawnglowmodel["friendly"]); + var_03 setcontents(0); + thread func_2A64(var_03); +} + +//Function Number: 93 +func_2A64(param_00) +{ + wait 2.5; + param_00 delete(); +} + +//Function Number: 94 +func_2A65(param_00) +{ + self endon("death"); + level endon("game_ended"); + param_00 endon("disconnect"); + self.enemytrigger setcursorhint("HINT_NOICON"); + self.enemytrigger sethintstring(&"MP_PATCH_DESTROY_TI"); + self.enemytrigger maps\mp\_utility::makeenemyusable(param_00); + for(;;) + { + self.enemytrigger waittill("trigger",var_01); + var_01 notify("destroyed_insertion",param_00); + var_01 notify("destroyed_explosive"); + if(isdefined(param_00) && var_01 != param_00) + { + param_00 thread maps\mp\_utility::func_2A60("ti_destroyed"); + } + + var_01 thread func_2A63(self); + } +} + +//Function Number: 95 +setlittlebirdsupport() +{ + thread killstreakthink("littlebird_support",2,"end_littlebird_support_think"); +} + +//Function Number: 96 +func_294C() +{ + self notify("end_littlebird_support_think"); +} + +//Function Number: 97 +func_2980() +{ + if(isplayer(self)) + { + var_00 = 10; + if(maps\mp\_utility::func_27AF("specialty_quieter")) + { + var_00 = var_00 * 0.5; + } + + self.painted = 1; + self setperk("specialty_radararrow",1,0); + thread func_2A69(var_00); + thread func_2A68(); + } +} + +//Function Number: 98 +func_2A68() +{ + self endon("disconnect"); + level endon("game_ended"); + self waittill("death"); + self.painted = 0; +} + +//Function Number: 99 +func_2A69(param_00) +{ + self notify("painted_again"); + self endon("painted_again"); + self endon("disconnect"); + self endon("death"); + level endon("game_ended"); + wait param_00; + self.painted = 0; + self unsetperk("specialty_radararrow",1); +} + +//Function Number: 100 +ispainted() +{ + return isdefined(self.painted) && self.painted; +} + +//Function Number: 101 +setfinalstand() +{ + maps\mp\_utility::giveperk("specialty_pistoldeath",0); +} + +//Function Number: 102 +unsetfinalstand() +{ + maps\mp\_utility::func_282E("specialty_pistoldeath"); +} + +//Function Number: 103 +setcarepackage() +{ + thread maps\mp\killstreaks\_killstreaks::givekillstreak("airdrop_assault",0,0,self,1); +} + +//Function Number: 104 +unsetcarepackage() +{ +} + +//Function Number: 105 +setuav() +{ + thread maps\mp\killstreaks\_killstreaks::givekillstreak("uav",0,0,self,1); +} + +//Function Number: 106 +unsetuav() +{ +} + +//Function Number: 107 +func_2971() +{ + maps\mp\_utility::giveperk("specialty_bulletdamage",0); + thread func_2A6A(); +} + +//Function Number: 108 +func_2A6A() +{ + self notify("watchStoppingPowerKill"); + self endon("watchStoppingPowerKill"); + self endon("disconnect"); + level endon("game_ended"); + self waittill("killed_enemy"); + func_2972(); +} + +//Function Number: 109 +func_2972() +{ + maps\mp\_utility::func_282E("specialty_bulletdamage"); + self notify("watchStoppingPowerKill"); +} + +//Function Number: 110 +func_2969() +{ + if(!maps\mp\_utility::func_27AF("specialty_pistoldeath")) + { + maps\mp\_utility::giveperk("specialty_pistoldeath",0); + } +} + +//Function Number: 111 +func_296A() +{ + if(maps\mp\_utility::func_27AF("specialty_pistoldeath")) + { + maps\mp\_utility::func_282E("specialty_pistoldeath"); + } +} + +//Function Number: 112 +setjuiced() +{ + self endon("death"); + self endon("faux_spawn"); + self endon("disconnect"); + self endon("unset_juiced"); + level endon("end_game"); + self.isjuiced = 1; + self.movespeedscaler = 1.25; + maps\mp\gametypes\_weapons::func_2884(); + if(level.splitscreen) + { + var_00 = 56; + var_01 = 21; + } + else + { + var_00 = 80; + var_01 = 32; + } + + self.juicedtimer = maps\mp\gametypes\_hud_util::createtimer("hudsmall",1); + self.juicedtimer maps\mp\gametypes\_hud_util::setpoint("CENTER","CENTER",0,var_00); + self.juicedtimer settimer(7); + self.juicedtimer.color = (0.8,0.8,0); + self.juicedtimer.archived = 0; + self.juicedtimer.foreground = 1; + self.juicedicon = maps\mp\gametypes\_hud_util::createicon("specialty_juiced",var_01,var_01); + self.juicedicon.alpha = 0; + self.juicedicon maps\mp\gametypes\_hud_util::setparent(self.juicedtimer); + self.juicedicon maps\mp\gametypes\_hud_util::setpoint("BOTTOM","TOP"); + self.juicedicon.archived = 1; + self.juicedicon.sort = 1; + self.juicedicon.foreground = 1; + self.juicedicon fadeovertime(1); + self.juicedicon.alpha = 0.85; + thread func_2A6F(); + thread unsetjuicedonride(); + wait 5; + if(isdefined(self.juicedicon)) + { + self.juicedicon fadeovertime(2); + self.juicedicon.alpha = 0; + } + + if(isdefined(self.juicedtimer)) + { + self.juicedtimer fadeovertime(2); + self.juicedtimer.alpha = 0; + } + + wait 2; + func_296E(); +} + +//Function Number: 113 +func_296E(param_00) +{ + if(!isdefined(param_00)) + { + if(maps\mp\_utility::isjuggernaut()) + { + if(isdefined(self.juggmovespeedscaler)) + { + self.movespeedscaler = self.juggmovespeedscaler; + } + else + { + self.movespeedscaler = 0.7; + } + } + else + { + self.movespeedscaler = 1; + if(maps\mp\_utility::func_27AF("specialty_lightweight")) + { + self.movespeedscaler = maps\mp\_utility::func_80F2(); + } + } + + maps\mp\gametypes\_weapons::func_2884(); + } + + if(isdefined(self.juicedicon)) + { + self.juicedicon destroy(); + } + + if(isdefined(self.juicedtimer)) + { + self.juicedtimer destroy(); + } + + self.isjuiced = undefined; + self notify("unset_juiced"); +} + +//Function Number: 114 +unsetjuicedonride() +{ + self endon("disconnect"); + self endon("unset_juiced"); + for(;;) + { + wait 0.05; + if(maps\mp\_utility::isusingremote()) + { + thread func_296E(); + break; + } + } +} + +//Function Number: 115 +func_2A6F() +{ + self endon("disconnect"); + self endon("unset_juiced"); + common_scripts\utility::waittill_any("death","faux_spawn"); + thread func_296E(1); +} + +//Function Number: 116 +setcombathigh() +{ + self endon("death"); + self endon("disconnect"); + self endon("unset_combathigh"); + level endon("end_game"); + self.damageblockedtotal = 0; + if(level.splitscreen) + { + var_00 = 56; + var_01 = 21; + } + else + { + var_00 = 112; + var_01 = 32; + } + + if(isdefined(self.juicedtimer)) + { + self.juicedtimer destroy(); + } + + if(isdefined(self.juicedicon)) + { + self.juicedicon destroy(); + } + + self.combathighoverlay = newclienthudelem(self); + self.combathighoverlay.x = 0; + self.combathighoverlay.y = 0; + self.combathighoverlay.alignx = "left"; + self.combathighoverlay.aligny = "top"; + self.combathighoverlay.horzalign = "fullscreen"; + self.combathighoverlay.vertalign = "fullscreen"; + self.combathighoverlay setshader("combathigh_overlay",640,480); + self.combathighoverlay.sort = -10; + self.combathighoverlay.archived = 1; + self.combathightimer = maps\mp\gametypes\_hud_util::createtimer("hudsmall",1); + self.combathightimer maps\mp\gametypes\_hud_util::setpoint("CENTER","CENTER",0,var_00); + self.combathightimer settimer(10); + self.combathightimer.color = (0.8,0.8,0); + self.combathightimer.archived = 0; + self.combathightimer.foreground = 1; + self.combathighicon = maps\mp\gametypes\_hud_util::createicon("specialty_painkiller",var_01,var_01); + self.combathighicon.alpha = 0; + self.combathighicon maps\mp\gametypes\_hud_util::setparent(self.combathightimer); + self.combathighicon maps\mp\gametypes\_hud_util::setpoint("BOTTOM","TOP"); + self.combathighicon.archived = 1; + self.combathighicon.sort = 1; + self.combathighicon.foreground = 1; + self.combathighoverlay.alpha = 0; + self.combathighoverlay fadeovertime(1); + self.combathighicon fadeovertime(1); + self.combathighoverlay.alpha = 1; + self.combathighicon.alpha = 0.85; + thread unsetcombathighondeath(); + thread func_2A74(); + wait 8; + self.combathighicon fadeovertime(2); + self.combathighicon.alpha = 0; + self.combathighoverlay fadeovertime(2); + self.combathighoverlay.alpha = 0; + self.combathightimer fadeovertime(2); + self.combathightimer.alpha = 0; + wait 2; + self.damageblockedtotal = undefined; + maps\mp\_utility::func_282E("specialty_combathigh"); +} + +//Function Number: 117 +unsetcombathighondeath() +{ + self endon("disconnect"); + self endon("unset_combathigh"); + self waittill("death"); + thread maps\mp\_utility::func_282E("specialty_combathigh"); +} + +//Function Number: 118 +func_2A74() +{ + self endon("disconnect"); + self endon("unset_combathigh"); + for(;;) + { + wait 0.05; + if(maps\mp\_utility::isusingremote()) + { + thread maps\mp\_utility::func_282E("specialty_combathigh"); + break; + } + } +} + +//Function Number: 119 +unsetcombathigh() +{ + self notify("unset_combathigh"); + self.combathighoverlay destroy(); + self.combathighicon destroy(); + self.combathightimer destroy(); +} + +//Function Number: 120 +func_2965() +{ + thread givelightarmor(); +} + +//Function Number: 121 +givelightarmor() +{ + self notify("give_light_armor"); + self endon("give_light_armor"); + self endon("death"); + self endon("disconnect"); + level endon("end_game"); + if(isdefined(self.haslightarmor) && self.haslightarmor == 1) + { + removelightarmor(self.previousmaxhealth); + } + + var_00 = 200; + thread removelightarmorondeath(); + self.haslightarmor = 1; + self.combathighoverlay = newclienthudelem(self); + self.combathighoverlay.x = 0; + self.combathighoverlay.y = 0; + self.combathighoverlay.alignx = "left"; + self.combathighoverlay.aligny = "top"; + self.combathighoverlay.horzalign = "fullscreen"; + self.combathighoverlay.vertalign = "fullscreen"; + self.combathighoverlay setshader("combathigh_overlay",640,480); + self.combathighoverlay.sort = -10; + self.combathighoverlay.archived = 1; + self.previousmaxhealth = self.maxhealth; + self.maxhealth = var_00; + self.health = self.maxhealth; + var_01 = 50; + var_02 = self.health; + for(;;) + { + if(self.maxhealth != var_00) + { + removelightarmor(); + break; + } + + if(self.health < 100) + { + removelightarmor(self.previousmaxhealth); + break; + } + + if(self.health < var_02) + { + var_01 = var_01 - var_02 - self.health; + var_02 = self.health; + if(var_01 <= 0) + { + removelightarmor(self.previousmaxhealth); + break; + } + } + + wait 0.5; + } +} + +//Function Number: 122 +removelightarmorondeath() +{ + self endon("disconnect"); + self endon("give_light_armor"); + self endon("remove_light_armor"); + self waittill("death"); + removelightarmor(); +} + +//Function Number: 123 +removelightarmor(param_00) +{ + if(isdefined(param_00)) + { + self.maxhealth = param_00; + } + + if(isdefined(self.combathighoverlay)) + { + self.combathighoverlay destroy(); + } + + self.haslightarmor = undefined; + self notify("remove_light_armor"); +} + +//Function Number: 124 +unsetlightarmor() +{ + thread removelightarmor(self.previousmaxhealth); +} + +//Function Number: 125 +setrevenge() +{ + self notify("stopRevenge"); + wait 0.05; + if(!isdefined(self.lastkilledby)) + { + return; + } + + if(level.teambased && self.team == self.lastkilledby.team) + { + return; + } + + var_00 = spawnstruct(); + var_00.showto = self; + var_00.icon = "compassping_revenge"; + var_00.offset = (0,0,64); + var_00.width = 10; + var_00.height = 10; + var_00.archived = 0; + var_00.delay = 1.5; + var_00.constantsize = 0; + var_00.pintoscreenedge = 1; + var_00.fadeoutpinnedicon = 0; + var_00.is3d = 0; + self.revengeparams = var_00; + self.lastkilledby maps\mp\_entityheadicons::func_277C(var_00.showto,var_00.icon,var_00.offset,var_00.width,var_00.height,var_00.archived,var_00.delay,var_00.constantsize,var_00.pintoscreenedge,var_00.fadeoutpinnedicon,var_00.is3d); + thread func_2A80(); + thread watchrevengekill(); + thread func_2A82(); + thread watchrevengevictimdisconnected(); + thread func_2A83(); +} + +//Function Number: 126 +func_2A80() +{ + self endon("stopRevenge"); + self endon("disconnect"); + var_00 = self.lastkilledby; + for(;;) + { + var_00 waittill("spawned_player"); + var_00 maps\mp\_entityheadicons::func_277C(self.revengeparams.showto,self.revengeparams.icon,self.revengeparams.offset,self.revengeparams.width,self.revengeparams.height,self.revengeparams.archived,self.revengeparams.delay,self.revengeparams.constantsize,self.revengeparams.pintoscreenedge,self.revengeparams.fadeoutpinnedicon,self.revengeparams.is3d); + } +} + +//Function Number: 127 +watchrevengekill() +{ + self endon("stopRevenge"); + self waittill("killed_enemy"); + self notify("stopRevenge"); +} + +//Function Number: 128 +func_2A82() +{ + self endon("stopRevenge"); + self.lastkilledby waittill("disconnect"); + self notify("stopRevenge"); +} + +//Function Number: 129 +func_2A83() +{ + var_00 = self.lastkilledby; + self waittill("stopRevenge"); + if(!isdefined(var_00)) + { + return; + } + + foreach(var_02 in var_00.entityheadicons) + { + if(!isdefined(var_02)) + { + continue; + } + + var_02 destroy(); + } +} + +//Function Number: 130 +watchrevengevictimdisconnected() +{ + var_00 = self.objidfriendly; + var_01 = self.lastkilledby; + var_01 endon("disconnect"); + level endon("game_ended"); + self endon("stopRevenge"); + self waittill("disconnect"); + if(!isdefined(var_01)) + { + return; + } + + foreach(var_03 in var_01.entityheadicons) + { + if(!isdefined(var_03)) + { + continue; + } + + var_03 destroy(); + } +} + +//Function Number: 131 +unsetrevenge() +{ + self notify("stopRevenge"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/maps/mp/perks/_perks.gsc b/MW3/Xbox/MP/maps/mp/perks/_perks.gsc new file mode 100644 index 0000000..f751a37 --- /dev/null +++ b/MW3/Xbox/MP/maps/mp/perks/_perks.gsc @@ -0,0 +1,561 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\mp\perks\_perks.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 12 + * Decompile Time: 287 ms + * Timestamp: 10/27/2023 2:27:33 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level.perkfuncs = []; + precacheshader("combathigh_overlay"); + precacheshader("specialty_juiced"); + precacheshader("compassping_revenge"); + precacheshader("specialty_c4death"); + precacheshader("specialty_finalstand"); + precachemodel("weapon_riot_shield_mp"); + precachemodel("viewmodel_riot_shield_mp"); + precachestring(&"MPUI_CHANGING_KIT"); + level.spawnglowmodel["enemy"] = "mil_emergency_flare_mp"; + level.spawnglowmodel["friendly"] = "mil_emergency_flare_mp"; + level.spawnglow["enemy"] = loadfx("misc/flare_ambient"); + level.spawnglow["friendly"] = loadfx("misc/flare_ambient_green"); + level.c4death = loadfx("explosions/javelin_explosion"); + level.spawnfire = loadfx("props/barrelexp"); + precachemodel(level.spawnglowmodel["friendly"]); + precachemodel(level.spawnglowmodel["enemy"]); + precachestring(&"MP_DESTROY_TI"); + precacheshaders(); + level._effect["ricochet"] = loadfx("impacts/large_metalhit_1"); + level.scriptperks = []; + level.perksetfuncs = []; + level.perkunsetfuncs = []; + level.fauxperks = []; + level.scriptperks["specialty_blastshield"] = 1; + level.scriptperks["_specialty_blastshield"] = 1; + level.scriptperks["specialty_akimbo"] = 1; + level.scriptperks["specialty_siege"] = 1; + level.scriptperks["specialty_falldamage"] = 1; + level.scriptperks["specialty_shield"] = 1; + level.scriptperks["specialty_feigndeath"] = 1; + level.scriptperks["specialty_shellshock"] = 1; + level.scriptperks["specialty_delaymine"] = 1; + level.scriptperks["specialty_localjammer"] = 1; + level.scriptperks["specialty_thermal"] = 1; + level.scriptperks["specialty_blackbox"] = 1; + level.scriptperks["specialty_steelnerves"] = 1; + level.scriptperks["specialty_flashgrenade"] = 1; + level.scriptperks["specialty_smokegrenade"] = 1; + level.scriptperks["specialty_concussiongrenade"] = 1; + level.scriptperks["specialty_challenger"] = 1; + level.scriptperks["specialty_saboteur"] = 1; + level.scriptperks["specialty_endgame"] = 1; + level.scriptperks["specialty_rearview"] = 1; + level.scriptperks["specialty_hardline"] = 1; + level.scriptperks["specialty_ac130"] = 1; + level.scriptperks["specialty_sentry_minigun"] = 1; + level.scriptperks["specialty_predator_missile"] = 1; + level.scriptperks["specialty_helicopter_minigun"] = 1; + level.scriptperks["specialty_tank"] = 1; + level.scriptperks["specialty_precision_airstrike"] = 1; + level.scriptperks["specialty_onemanarmy"] = 1; + level.scriptperks["specialty_littlebird_support"] = 1; + level.scriptperks["specialty_primarydeath"] = 1; + level.scriptperks["specialty_secondarybling"] = 1; + level.scriptperks["specialty_explosivedamage"] = 1; + level.scriptperks["specialty_laststandoffhand"] = 1; + level.scriptperks["specialty_dangerclose"] = 1; + level.scriptperks["specialty_luckycharm"] = 1; + level.scriptperks["specialty_hardjack"] = 1; + level.scriptperks["specialty_extraspecialduration"] = 1; + level.scriptperks["specialty_rollover"] = 1; + level.scriptperks["specialty_armorpiercing"] = 1; + level.scriptperks["specialty_omaquickchange"] = 1; + level.scriptperks["_specialty_rearview"] = 1; + level.scriptperks["_specialty_onemanarmy"] = 1; + level.scriptperks["specialty_steadyaimpro"] = 1; + level.scriptperks["specialty_stun_resistance"] = 1; + level.scriptperks["specialty_double_load"] = 1; + level.scriptperks["specialty_hard_shell"] = 1; + level.scriptperks["specialty_regenspeed"] = 1; + level.scriptperks["specialty_twoprimaries"] = 1; + level.scriptperks["specialty_autospot"] = 1; + level.scriptperks["specialty_overkillpro"] = 1; + level.scriptperks["specialty_anytwo"] = 1; + level.scriptperks["specialty_assists"] = 1; + level.scriptperks["specialty_fasterlockon"] = 1; + level.scriptperks["specialty_paint"] = 1; + level.scriptperks["specialty_paint_pro"] = 1; + level.fauxperks["specialty_shield"] = 1; + level.scriptperks["specialty_marksman"] = 1; + level.scriptperks["specialty_sharp_focus"] = 1; + level.scriptperks["specialty_bling"] = 1; + level.scriptperks["specialty_moredamage"] = 1; + level.scriptperks["specialty_copycat"] = 1; + level.scriptperks["specialty_combathigh"] = 1; + level.scriptperks["specialty_finalstand"] = 1; + level.scriptperks["specialty_c4death"] = 1; + level.scriptperks["specialty_juiced"] = 1; + level.scriptperks["specialty_revenge"] = 1; + level.scriptperks["specialty_light_armor"] = 1; + level.scriptperks["specialty_carepackage"] = 1; + level.scriptperks["specialty_stopping_power"] = 1; + level.scriptperks["specialty_uav"] = 1; + level.scriptperks["bouncingbetty_mp"] = 1; + level.scriptperks["c4_mp"] = 1; + level.scriptperks["claymore_mp"] = 1; + level.scriptperks["frag_grenade_mp"] = 1; + level.scriptperks["semtex_mp"] = 1; + level.scriptperks["throwingknife_mp"] = 1; + level.scriptperks["concussion_grenade_mp"] = 1; + level.scriptperks["flash_grenade_mp"] = 1; + level.scriptperks["smoke_grenade_mp"] = 1; + level.scriptperks["specialty_portable_radar"] = 1; + level.scriptperks["specialty_scrambler"] = 1; + level.scriptperks["specialty_tacticalinsertion"] = 1; + level.scriptperks["trophy_mp"] = 1; + level.scriptperks["specialty_null"] = 1; + level.perksetfuncs["specialty_blastshield"] = ::maps\mp\perks\_perkfunctions::func_2923; + level.perkunsetfuncs["specialty_blastshield"] = ::maps\mp\perks\_perkfunctions::func_2924; + level.perksetfuncs["specialty_siege"] = ::maps\mp\perks\_perkfunctions::func_2925; + level.perkunsetfuncs["specialty_siege"] = ::maps\mp\perks\_perkfunctions::unsetsiege; + level.perksetfuncs["specialty_falldamage"] = ::maps\mp\perks\_perkfunctions::func_2927; + level.perkunsetfuncs["specialty_falldamage"] = ::maps\mp\perks\_perkfunctions::func_2928; + level.perksetfuncs["specialty_localjammer"] = ::maps\mp\perks\_perkfunctions::setlocaljammer; + level.perkunsetfuncs["specialty_localjammer"] = ::maps\mp\perks\_perkfunctions::unsetlocaljammer; + level.perksetfuncs["specialty_thermal"] = ::maps\mp\perks\_perkfunctions::setthermal; + level.perkunsetfuncs["specialty_thermal"] = ::maps\mp\perks\_perkfunctions::func_292C; + level.perksetfuncs["specialty_blackbox"] = ::maps\mp\perks\_perkfunctions::setblackbox; + level.perkunsetfuncs["specialty_blackbox"] = ::maps\mp\perks\_perkfunctions::func_292E; + level.perksetfuncs["specialty_lightweight"] = ::maps\mp\perks\_perkfunctions::setlightweight; + level.perkunsetfuncs["specialty_lightweight"] = ::maps\mp\perks\_perkfunctions::func_2930; + level.perksetfuncs["specialty_steelnerves"] = ::maps\mp\perks\_perkfunctions::func_2931; + level.perkunsetfuncs["specialty_steelnerves"] = ::maps\mp\perks\_perkfunctions::unsetsteelnerves; + level.perksetfuncs["specialty_delaymine"] = ::maps\mp\perks\_perkfunctions::func_2933; + level.perkunsetfuncs["specialty_delaymine"] = ::maps\mp\perks\_perkfunctions::unsetdelaymine; + level.perksetfuncs["specialty_challenger"] = ::maps\mp\perks\_perkfunctions::func_2935; + level.perkunsetfuncs["specialty_challenger"] = ::maps\mp\perks\_perkfunctions::unsetchallenger; + level.perksetfuncs["specialty_saboteur"] = ::maps\mp\perks\_perkfunctions::func_2937; + level.perkunsetfuncs["specialty_saboteur"] = ::maps\mp\perks\_perkfunctions::func_2938; + level.perksetfuncs["specialty_endgame"] = ::maps\mp\perks\_perkfunctions::func_2939; + level.perkunsetfuncs["specialty_endgame"] = ::maps\mp\perks\_perkfunctions::func_293A; + level.perksetfuncs["specialty_rearview"] = ::maps\mp\perks\_perkfunctions::func_293B; + level.perkunsetfuncs["specialty_rearview"] = ::maps\mp\perks\_perkfunctions::func_293C; + level.perksetfuncs["specialty_ac130"] = ::maps\mp\perks\_perkfunctions::func_293D; + level.perkunsetfuncs["specialty_ac130"] = ::maps\mp\perks\_perkfunctions::unsetac130; + level.perksetfuncs["specialty_sentry_minigun"] = ::maps\mp\perks\_perkfunctions::func_293F; + level.perkunsetfuncs["specialty_sentry_minigun"] = ::maps\mp\perks\_perkfunctions::func_2940; + level.perksetfuncs["specialty_predator_missile"] = ::maps\mp\perks\_perkfunctions::setpredatormissile; + level.perkunsetfuncs["specialty_predator_missile"] = ::maps\mp\perks\_perkfunctions::func_2942; + level.perksetfuncs["specialty_tank"] = ::maps\mp\perks\_perkfunctions::func_2943; + level.perkunsetfuncs["specialty_tank"] = ::maps\mp\perks\_perkfunctions::func_2944; + level.perksetfuncs["specialty_precision_airstrike"] = ::maps\mp\perks\_perkfunctions::setprecision_airstrike; + level.perkunsetfuncs["specialty_precision_airstrike"] = ::maps\mp\perks\_perkfunctions::unsetprecision_airstrike; + level.perksetfuncs["specialty_helicopter_minigun"] = ::maps\mp\perks\_perkfunctions::func_2947; + level.perkunsetfuncs["specialty_helicopter_minigun"] = ::maps\mp\perks\_perkfunctions::unsethelicopterminigun; + level.perksetfuncs["specialty_onemanarmy"] = ::maps\mp\perks\_perkfunctions::func_2949; + level.perkunsetfuncs["specialty_onemanarmy"] = ::maps\mp\perks\_perkfunctions::unsetonemanarmy; + level.perksetfuncs["specialty_littlebird_support"] = ::maps\mp\perks\_perkfunctions::setlittlebirdsupport; + level.perkunsetfuncs["specialty_littlebird_support"] = ::maps\mp\perks\_perkfunctions::func_294C; + level.perksetfuncs["specialty_tacticalinsertion"] = ::maps\mp\perks\_perkfunctions::settacticalinsertion; + level.perkunsetfuncs["specialty_tacticalinsertion"] = ::maps\mp\perks\_perkfunctions::func_294E; + level.perksetfuncs["specialty_scrambler"] = ::maps\mp\gametypes\_scrambler::func_28FD; + level.perkunsetfuncs["specialty_scrambler"] = ::maps\mp\gametypes\_scrambler::unsetscrambler; + level.perksetfuncs["specialty_portable_radar"] = ::maps\mp\gametypes\_portable_radar::setportableradar; + level.perkunsetfuncs["specialty_portable_radar"] = ::maps\mp\gametypes\_portable_radar::unsetportableradar; + level.perksetfuncs["specialty_steadyaimpro"] = ::maps\mp\perks\_perkfunctions::setsteadyaimpro; + level.perkunsetfuncs["specialty_steadyaimpro"] = ::maps\mp\perks\_perkfunctions::func_2950; + level.perksetfuncs["specialty_stun_resistance"] = ::maps\mp\perks\_perkfunctions::func_2951; + level.perkunsetfuncs["specialty_stun_resistance"] = ::maps\mp\perks\_perkfunctions::unsetstunresistance; + level.perksetfuncs["specialty_marksman"] = ::maps\mp\perks\_perkfunctions::setmarksman; + level.perkunsetfuncs["specialty_marksman"] = ::maps\mp\perks\_perkfunctions::unsetmarksman; + level.perksetfuncs["specialty_double_load"] = ::maps\mp\perks\_perkfunctions::func_2955; + level.perkunsetfuncs["specialty_double_load"] = ::maps\mp\perks\_perkfunctions::unsetdoubleload; + level.perksetfuncs["specialty_sharp_focus"] = ::maps\mp\perks\_perkfunctions::func_2957; + level.perkunsetfuncs["specialty_sharp_focus"] = ::maps\mp\perks\_perkfunctions::func_2958; + level.perksetfuncs["specialty_hard_shell"] = ::maps\mp\perks\_perkfunctions::func_2959; + level.perkunsetfuncs["specialty_hard_shell"] = ::maps\mp\perks\_perkfunctions::unsethardshell; + level.perksetfuncs["specialty_regenspeed"] = ::maps\mp\perks\_perkfunctions::func_295B; + level.perkunsetfuncs["specialty_regenspeed"] = ::maps\mp\perks\_perkfunctions::func_295C; + level.perksetfuncs["specialty_autospot"] = ::maps\mp\perks\_perkfunctions::func_295D; + level.perkunsetfuncs["specialty_autospot"] = ::maps\mp\perks\_perkfunctions::func_295E; + level.perksetfuncs["specialty_empimmune"] = ::maps\mp\perks\_perkfunctions::func_295F; + level.perkunsetfuncs["specialty_empimmune"] = ::maps\mp\perks\_perkfunctions::func_2960; + level.perksetfuncs["specialty_overkill_pro"] = ::maps\mp\perks\_perkfunctions::setoverkillpro; + level.perkunsetfuncs["specialty_overkill_pro"] = ::maps\mp\perks\_perkfunctions::unsetoverkillpro; + level.perksetfuncs["specialty_combathigh"] = ::maps\mp\perks\_perkfunctions::setcombathigh; + level.perkunsetfuncs["specialty_combathigh"] = ::maps\mp\perks\_perkfunctions::unsetcombathigh; + level.perksetfuncs["specialty_light_armor"] = ::maps\mp\perks\_perkfunctions::func_2965; + level.perkunsetfuncs["specialty_light_armor"] = ::maps\mp\perks\_perkfunctions::unsetlightarmor; + level.perksetfuncs["specialty_revenge"] = ::maps\mp\perks\_perkfunctions::setrevenge; + level.perkunsetfuncs["specialty_revenge"] = ::maps\mp\perks\_perkfunctions::unsetrevenge; + level.perksetfuncs["specialty_c4death"] = ::maps\mp\perks\_perkfunctions::func_2969; + level.perkunsetfuncs["specialty_c4death"] = ::maps\mp\perks\_perkfunctions::func_296A; + level.perksetfuncs["specialty_finalstand"] = ::maps\mp\perks\_perkfunctions::setfinalstand; + level.perkunsetfuncs["specialty_finalstand"] = ::maps\mp\perks\_perkfunctions::unsetfinalstand; + level.perksetfuncs["specialty_juiced"] = ::maps\mp\perks\_perkfunctions::setjuiced; + level.perkunsetfuncs["specialty_juiced"] = ::maps\mp\perks\_perkfunctions::func_296E; + level.perksetfuncs["specialty_carepackage"] = ::maps\mp\perks\_perkfunctions::setcarepackage; + level.perkunsetfuncs["specialty_carepackage"] = ::maps\mp\perks\_perkfunctions::unsetcarepackage; + level.perksetfuncs["specialty_stopping_power"] = ::maps\mp\perks\_perkfunctions::func_2971; + level.perkunsetfuncs["specialty_stopping_power"] = ::maps\mp\perks\_perkfunctions::func_2972; + level.perksetfuncs["specialty_uav"] = ::maps\mp\perks\_perkfunctions::setuav; + level.perkunsetfuncs["specialty_uav"] = ::maps\mp\perks\_perkfunctions::unsetuav; + initperkdvars(); + level thread onplayerconnect(); +} + +//Function Number: 2 +precacheshaders() +{ + precacheshader("specialty_blastshield"); +} + +//Function Number: 3 +validateperk(param_00,param_01) +{ + if(getdvarint("scr_game_perks") == 0) + { + if(tablelookup("mp/perkTable.csv",1,param_01,5) != "equipment") + { + return "specialty_null"; + } + } + + return param_01; +} + +//Function Number: 4 +onplayerconnect() +{ + for(;;) + { + level waittill("connected",var_00); + var_00 thread onplayerspawned(); + } +} + +//Function Number: 5 +onplayerspawned() +{ + self endon("disconnect"); + self.perks = []; + self.weaponlist = []; + self.omaclasschanged = 0; + for(;;) + { + self waittill("spawned_player"); + self.omaclasschanged = 0; + thread func_2979(); + thread maps\mp\gametypes\_scrambler::func_290C(); + } +} + +//Function Number: 6 +func_2979() +{ + self endon("disconnect"); + self endon("death"); + self endon("faux_spawn"); + level endon("game_ended"); + self.proximityactive = 0; + for(;;) + { + foreach(var_01 in level.players) + { + wait 0.05; + if(!isdefined(var_01)) + { + continue; + } + + if(var_01.team != self.team) + { + continue; + } + + if(var_01 == self) + { + continue; + } + + if(!maps\mp\_utility::isreallyalive(var_01)) + { + continue; + } + + if(!maps\mp\_utility::isreallyalive(self)) + { + continue; + } + + var_02 = distancesquared(var_01.origin,self.origin); + if(var_02 < 262144) + { + self.proximityactive = 1; + break; + } + } + + wait 0.25; + } +} + +//Function Number: 7 +drawline(param_00,param_01,param_02) +{ + var_03 = int(param_02 * 20); + for(var_04 = 0;var_04 < var_03;var_04++) + { + wait 0.05; + } +} + +//Function Number: 8 +func_297C(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07) +{ + var_08 = 0; + if(maps\mp\_utility::func_297E(param_03)) + { + if(isplayer(param_01) && param_01 maps\mp\_utility::func_27AF("specialty_paint_pro") && !maps\mp\_utility::func_2829(param_04)) + { + if(!param_00 maps\mp\perks\_perkfunctions::ispainted()) + { + param_01 maps\mp\gametypes\_missions::processchallenge("ch_bulletpaint"); + } + + param_00 thread maps\mp\perks\_perkfunctions::func_2980(); + } + + if(isplayer(param_01) && isdefined(param_04) && maps\mp\_utility::getweaponclass(param_04) == "weapon_sniper" && issubstr(param_04,"silencer")) + { + param_02 = param_02 * 0.75; + } + + if(isplayer(param_01) && (param_01 maps\mp\_utility::func_27AF("specialty_stopping_power") && param_01 maps\mp\_utility::func_27AF("specialty_bulletdamage")) || param_01 maps\mp\_utility::func_27AF("specialty_moredamage")) + { + param_02 = param_02 + param_02 * level.bulletdamagemod; + } + + if(param_00 maps\mp\_utility::isjuggernaut()) + { + param_02 = param_02 * level.armorvestmod; + } + } + else if(isexplosivedamagemod(param_03)) + { + if(isplayer(param_01) && param_01 != param_00 && param_01 isitemunlocked("specialty_paint") && param_01 maps\mp\_utility::func_27AF("specialty_paint") && !maps\mp\_utility::func_2829(param_04)) + { + if(!param_00 maps\mp\perks\_perkfunctions::ispainted()) + { + param_01 maps\mp\gametypes\_missions::processchallenge("ch_paint_pro"); + } + + param_00 thread maps\mp\perks\_perkfunctions::func_2980(); + } + + if(isplayer(param_01) && weaponinheritsperks(param_04) && param_01 maps\mp\_utility::func_27AF("specialty_explosivedamage") && param_00 maps\mp\_utility::func_27AF("_specialty_blastshield")) + { + var_08 = var_08 + 0; + } + else if(isplayer(param_01) && weaponinheritsperks(param_04) && param_01 maps\mp\_utility::func_27AF("specialty_explosivedamage")) + { + var_08 = var_08 + param_02 * level.explosivedamagemod; + } + else if(param_00 maps\mp\_utility::func_27AF("_specialty_blastshield") && param_04 != "semtex_mp" || param_02 != 120) + { + var_08 = var_08 - int(param_02 * 1 - level.blastshieldmod); + } + + if(maps\mp\_utility::func_2829(param_04) && isplayer(param_01) && param_01 maps\mp\_utility::func_27AF("specialty_dangerclose")) + { + var_08 = var_08 + param_02 * level.dangerclosemod; + } + + if(param_00 maps\mp\_utility::isjuggernaut()) + { + switch(param_04) + { + case "ac130_25mm_mp": + param_02 = param_02 * level.armorvestmod; + break; + + case "remote_mortar_missile_mp": + param_02 = param_02 * 0.2; + break; + + default: + if(param_02 < 1000) + { + if(param_02 > 1) + { + param_02 = param_02 * level.armorvestmod; + } + } + break; + } + } + + if(10 - level.graceperiod - level.ingraceperiod > 0) + { + param_02 = param_02 * level.armorvestmod; + } + } + else if(param_03 == "MOD_FALLING") + { + if(param_00 maps\mp\_utility::func_27AF("specialty_falldamage")) + { + if(param_02 > 0) + { + param_00 maps\mp\gametypes\_missions::processchallenge("ch_falldamage"); + } + + var_08 = 0; + param_02 = 0; + } + } + else if(param_03 == "MOD_MELEE") + { + if(isdefined(param_00.haslightarmor) && param_00.haslightarmor) + { + if(issubstr(param_04,"riotshield")) + { + param_02 = int(param_00.maxhealth * 0.66); + } + else + { + param_02 = param_00.maxhealth + 1; + } + } + + if(param_00 maps\mp\_utility::isjuggernaut()) + { + param_02 = 20; + var_08 = 0; + } + } + else if(param_03 == "MOD_IMPACT") + { + if(param_00 maps\mp\_utility::isjuggernaut()) + { + switch(param_04) + { + case "semtex_mp": + case "concussion_grenade_mp": + case "flash_grenade_mp": + case "smoke_grenade_mp": + case "frag_grenade_mp": + param_02 = 5; + break; + + default: + if(param_02 < 1000) + { + param_02 = 25; + } + break; + } + + var_08 = 0; + } + } + + if(param_00 maps\mp\_utility::func_27AF("specialty_combathigh")) + { + if(isdefined(self.damageblockedtotal) && !level.teambased || isdefined(param_01) && isdefined(param_01.team) && param_00.team != param_01.team) + { + var_09 = param_02 + var_08; + var_0A = var_09 - var_09 / 3; + self.damageblockedtotal = self.damageblockedtotal + var_0A; + if(self.damageblockedtotal >= 101) + { + self notify("combathigh_survived"); + self.damageblockedtotal = undefined; + } + } + + if(param_04 != "throwingknife_mp") + { + switch(param_03) + { + case "MOD_FALLING": + case "MOD_MELEE": + break; + + default: + param_02 = int(param_02 / 3); + var_08 = int(var_08 / 3); + break; + } + } + } + + if(isdefined(param_00.haslightarmor) && param_00.haslightarmor && param_04 == "throwingknife_mp") + { + param_02 = param_00.health; + var_08 = 0; + } + + if(param_02 <= 1) + { + param_02 = 1; + return param_02; + } + + return int(param_02 + var_08); +} + +//Function Number: 9 +initperkdvars() +{ + level.bulletdamagemod = maps\mp\_utility::getintproperty("perk_bulletDamage",40) / 100; + level.armorvestmod = 0.08; + level.armorvestdefmod = 0.08; + level.armorpiercingmod = 1.5; + level.explosivedamagemod = maps\mp\_utility::getintproperty("perk_explosiveDamage",40) / 100; + level.blastshieldmod = maps\mp\_utility::getintproperty("perk_blastShield",45) / 100; + level.riotshieldmod = maps\mp\_utility::getintproperty("perk_riotShield",100) / 100; + level.dangerclosemod = maps\mp\_utility::getintproperty("perk_dangerClose",100) / 100; +} + +//Function Number: 10 +func_298C() +{ + var_00 = self.specialty; +} + +//Function Number: 11 +gambitusetracker() +{ + self endon("death"); + self endon("disconnect"); + level endon("game_ended"); + if(getdvarint("scr_game_perks") != 1) + { + return; + } + + maps\mp\_utility::func_274B("prematch_done"); + self notifyonplayercommand("gambit_on","+frag"); +} + +//Function Number: 12 +giveblindeyeafterspawn() +{ + self endon("death"); + self endon("disconnect"); + maps\mp\_utility::giveperk("specialty_blindeye",0); + self.spawnperk = 1; + while(self.avoidkillstreakonspawntimer > 0) + { + self.avoidkillstreakonspawntimer = self.avoidkillstreakonspawntimer - 0.05; + wait 0.05; + } + + maps\mp\_utility::func_282E("specialty_blindeye"); + self.spawnperk = 0; +} \ No newline at end of file diff --git a/MW3/Xbox/MP/mptype/mptype_delta_multicam_assault.gsc b/MW3/Xbox/MP/mptype/mptype_delta_multicam_assault.gsc new file mode 100644 index 0000000..2445ae7 --- /dev/null +++ b/MW3/Xbox/MP/mptype/mptype_delta_multicam_assault.gsc @@ -0,0 +1,41 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: mptype\mptype_delta_multicam_assault.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 30 ms + * Timestamp: 10/27/2023 2:28:52 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + switch(codescripts\character::get_random_character(4)) + { + case 0: + character\mp_character_delta_elite_assault_aa::main(); + break; + + case 1: + character\mp_character_delta_elite_assault_ab::main(); + break; + + case 2: + character\mp_character_delta_elite_assault_ba::main(); + break; + + case 3: + character\mp_character_delta_elite_assault_bb::main(); + break; + } +} + +//Function Number: 2 +precache() +{ + character\mp_character_delta_elite_assault_aa::precache(); + character\mp_character_delta_elite_assault_ab::precache(); + character\mp_character_delta_elite_assault_ba::precache(); + character\mp_character_delta_elite_assault_bb::precache(); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/mptype/mptype_opforce_henchmen_assault.gsc b/MW3/Xbox/MP/mptype/mptype_opforce_henchmen_assault.gsc new file mode 100644 index 0000000..59b87b5 --- /dev/null +++ b/MW3/Xbox/MP/mptype/mptype_opforce_henchmen_assault.gsc @@ -0,0 +1,41 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: mptype\mptype_opforce_henchmen_assault.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 30 ms + * Timestamp: 10/27/2023 2:28:52 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + switch(codescripts\character::get_random_character(4)) + { + case 0: + character\mp_character_opforce_hench_assault_a::main(); + break; + + case 1: + character\mp_character_opforce_hench_assault_b::main(); + break; + + case 2: + character\mp_character_opforce_hench_assault_c::main(); + break; + + case 3: + character\mp_character_opforce_hench_assault_d::main(); + break; + } +} + +//Function Number: 2 +precache() +{ + character\mp_character_opforce_hench_assault_a::precache(); + character\mp_character_opforce_hench_assault_b::precache(); + character\mp_character_opforce_hench_assault_c::precache(); + character\mp_character_opforce_hench_assault_d::precache(); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/vehicle_scripts/_c130.gsc b/MW3/Xbox/MP/vehicle_scripts/_c130.gsc new file mode 100644 index 0000000..505b486 --- /dev/null +++ b/MW3/Xbox/MP/vehicle_scripts/_c130.gsc @@ -0,0 +1,53 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: vehicle_scripts\_c130.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 4 + * Decompile Time: 60 ms + * Timestamp: 10/27/2023 2:29:05 AM +*******************************************************************/ + +//Function Number: 1 +main(param_00,param_01,param_02) +{ + maps\_vehicle::build_template("c130",param_00,param_01,param_02); + maps\_vehicle::build_localinit(::func_269F); + maps\_vehicle::func_2640("vehicle_ac130_low"); + maps\_vehicle::build_deathfx("explosions/large_vehicle_explosion",undefined,"explo_metal_rand"); + maps\_vehicle::build_life(999,500,1500); + maps\_vehicle::func_2648("allies"); + maps\_vehicle::build_mainturret(); + var_03 = maps\_vehicle::func_269C(param_00,param_02); + maps\_vehicle::build_light(var_03,"wingtip_green","tag_light_L_wing","misc/aircraft_light_wingtip_green","running",0); + maps\_vehicle::build_light(var_03,"wingtip_red","tag_light_R_wing","misc/aircraft_light_wingtip_red","running",0.05); + maps\_vehicle::build_light(var_03,"tail_red","tag_light_tail","misc/aircraft_light_white_blink","running",0.05); + maps\_vehicle::build_light(var_03,"white_blink","tag_light_belly","misc/aircraft_light_red_blink","running",1); +} + +//Function Number: 2 +func_269F() +{ + maps\_vehicle::lights_on("running"); + self hidepart("tag_25mm"); + self hidepart("tag_40mm"); + self hidepart("tag_105mm"); +} + +//Function Number: 3 +set_vehicle_anims(param_00) +{ + return param_00; +} + +//Function Number: 4 +setanims() +{ + var_00 = []; + for(var_01 = 0;var_01 < 1;var_01++) + { + var_00[var_01] = spawnstruct(); + } + + return var_00; +} \ No newline at end of file diff --git a/MW3/Xbox/MP/vehicle_scripts/_pavelow_noai.gsc b/MW3/Xbox/MP/vehicle_scripts/_pavelow_noai.gsc new file mode 100644 index 0000000..96cc24d --- /dev/null +++ b/MW3/Xbox/MP/vehicle_scripts/_pavelow_noai.gsc @@ -0,0 +1,42 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: vehicle_scripts\_pavelow_noai.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 33 ms + * Timestamp: 10/27/2023 2:28:56 AM +*******************************************************************/ + +//Function Number: 1 +main(param_00,param_01,param_02) +{ + maps\_vehicle::build_template("pavelow_noai",param_00,param_01,param_02); + maps\_vehicle::build_localinit(::func_269F); + maps\_vehicle::func_2640("vehicle_pavelow"); + maps\_vehicle::build_deathfx("explosions/helicopter_explosion_secondary_small","tag_engine_left","pavelow_helicopter_secondary_exp",undefined,undefined,undefined,0,1); + maps\_vehicle::build_deathfx("fire/fire_smoke_trail_L","tag_engine_left","pavelow_helicopter_dying_loop",1,0.05,1,0.5,1); + maps\_vehicle::build_deathfx("explosions/helicopter_explosion_secondary_small","tag_engine_right","pavelow_helicopter_secondary_exp",undefined,undefined,undefined,2.5,1); + maps\_vehicle::build_deathfx("explosions/helicopter_explosion_pavelow",undefined,"pavelow_helicopter_crash",undefined,undefined,undefined,-1,undefined,"stop_crash_loop_sound"); + maps\_vehicle::build_rocket_deathfx("explosions/aerial_explosion_pavelow_mp","tag_deathfx","pavelow_helicopter_crash",undefined,undefined,undefined,undefined,1,undefined,0); + maps\_vehicle::func_2647(); + maps\_vehicle::build_life(999,500,1500); + maps\_vehicle::func_2648("allies"); + maps\_vehicle::build_drive(%bh_rotors,undefined,0); + var_03 = maps\_vehicle::func_269C(param_00,param_02); + maps\_vehicle::build_light(var_03,"cockpit_red_cargo02","tag_light_cargo02","misc/aircraft_light_cockpit_red","interior",0); + maps\_vehicle::build_light(var_03,"cockpit_blue_cockpit01","tag_light_cockpit01","misc/aircraft_light_cockpit_blue","interior",0.1); + maps\_vehicle::build_light(var_03,"white_blink","tag_light_belly","misc/aircraft_light_white_blink","running",0.15); + maps\_vehicle::build_light(var_03,"wingtip_green1","tag_light_L_wing1","misc/aircraft_light_wingtip_green","running",0.3); + maps\_vehicle::build_light(var_03,"wingtip_red1","tag_light_R_wing1","misc/aircraft_light_wingtip_red","running",0.2); + maps\_vehicle::build_light(var_03,"solid_tail","tag_light_tail2","misc/aircraft_light_wingtip_red","running",0.25); + maps\_vehicle::build_light(var_03,"white_blink_tail","tag_light_tail","misc/aircraft_light_red_blink","running",0.05); +} + +//Function Number: 2 +func_269F() +{ + self.var_24E0 = distance(self gettagorigin("tag_origin"),self gettagorigin("tag_ground")); + self.script_badplace = 0; + thread maps\_vehicle::lights_on("running"); +} \ No newline at end of file diff --git a/MW3/Xbox/MP/xmodelalias/alias_africa_militia_heads_mp.gsc b/MW3/Xbox/MP/xmodelalias/alias_africa_militia_heads_mp.gsc new file mode 100644 index 0000000..918e936 --- /dev/null +++ b/MW3/Xbox/MP/xmodelalias/alias_africa_militia_heads_mp.gsc @@ -0,0 +1,16 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: xmodelalias\alias_africa_militia_heads_mp.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 1 + * Decompile Time: 16 ms + * Timestamp: 10/27/2023 2:28:36 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + var_00[0] = "head_africa_militia_a_mp"; + return var_41; +} \ No newline at end of file diff --git a/MW3/Xbox/MP/xmodelalias/alias_delta_elite_heads.gsc b/MW3/Xbox/MP/xmodelalias/alias_delta_elite_heads.gsc new file mode 100644 index 0000000..47515d1 --- /dev/null +++ b/MW3/Xbox/MP/xmodelalias/alias_delta_elite_heads.gsc @@ -0,0 +1,16 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: xmodelalias\alias_delta_elite_heads.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 1 + * Decompile Time: 14 ms + * Timestamp: 10/27/2023 2:29:25 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + var_00[0] = "head_delta_elite_a"; + return var_41; +} \ No newline at end of file diff --git a/MW3/Xbox/MP/xmodelalias/alias_delta_elite_heads_longsleeves.gsc b/MW3/Xbox/MP/xmodelalias/alias_delta_elite_heads_longsleeves.gsc new file mode 100644 index 0000000..137abe3 --- /dev/null +++ b/MW3/Xbox/MP/xmodelalias/alias_delta_elite_heads_longsleeves.gsc @@ -0,0 +1,16 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: xmodelalias\alias_delta_elite_heads_longsleeves.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 1 + * Decompile Time: 13 ms + * Timestamp: 10/27/2023 2:29:25 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + var_00[0] = "head_delta_elite_a"; + return var_41; +} \ No newline at end of file diff --git a/MW3/Xbox/MP/xmodelalias/alias_gign_heads.gsc b/MW3/Xbox/MP/xmodelalias/alias_gign_heads.gsc new file mode 100644 index 0000000..5f8fecb --- /dev/null +++ b/MW3/Xbox/MP/xmodelalias/alias_gign_heads.gsc @@ -0,0 +1,16 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: xmodelalias\alias_gign_heads.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 1 + * Decompile Time: 14 ms + * Timestamp: 10/27/2023 2:29:05 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + var_00[0] = "head_gign_a"; + return var_41; +} \ No newline at end of file diff --git a/MW3/Xbox/MP/xmodelalias/alias_henchmen_heads_mp.gsc b/MW3/Xbox/MP/xmodelalias/alias_henchmen_heads_mp.gsc new file mode 100644 index 0000000..caf1d0a --- /dev/null +++ b/MW3/Xbox/MP/xmodelalias/alias_henchmen_heads_mp.gsc @@ -0,0 +1,16 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: xmodelalias\alias_henchmen_heads_mp.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 1 + * Decompile Time: 15 ms + * Timestamp: 10/27/2023 2:28:47 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + var_00[0] = "head_henchmen_a"; + return var_41; +} \ No newline at end of file diff --git a/MW3/Xbox/MP/xmodelalias/alias_pmc_africa_heads.gsc b/MW3/Xbox/MP/xmodelalias/alias_pmc_africa_heads.gsc new file mode 100644 index 0000000..6d6c035 --- /dev/null +++ b/MW3/Xbox/MP/xmodelalias/alias_pmc_africa_heads.gsc @@ -0,0 +1,16 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: xmodelalias\alias_pmc_africa_heads.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 1 + * Decompile Time: 14 ms + * Timestamp: 10/27/2023 2:28:16 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + var_00[0] = "head_pmc_africa_a"; + return var_41; +} \ No newline at end of file diff --git a/MW3/Xbox/MP/xmodelalias/alias_russian_military_arctic_heads.gsc b/MW3/Xbox/MP/xmodelalias/alias_russian_military_arctic_heads.gsc new file mode 100644 index 0000000..98349fd --- /dev/null +++ b/MW3/Xbox/MP/xmodelalias/alias_russian_military_arctic_heads.gsc @@ -0,0 +1,16 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: xmodelalias\alias_russian_military_arctic_heads.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 1 + * Decompile Time: 14 ms + * Timestamp: 10/27/2023 2:28:22 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + var_00[0] = "head_russian_military_a"; + return var_41; +} \ No newline at end of file diff --git a/MW3/Xbox/MP/xmodelalias/alias_sas_heads.gsc b/MW3/Xbox/MP/xmodelalias/alias_sas_heads.gsc new file mode 100644 index 0000000..c59478e --- /dev/null +++ b/MW3/Xbox/MP/xmodelalias/alias_sas_heads.gsc @@ -0,0 +1,16 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: xmodelalias\alias_sas_heads.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 1 + * Decompile Time: 16 ms + * Timestamp: 10/27/2023 2:28:12 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + var_00[0] = "head_sas_a"; + return var_41; +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/animmode.gsc b/MW3/Xbox/SP/animscripts/animmode.gsc new file mode 100644 index 0000000..58831e1 --- /dev/null +++ b/MW3/Xbox/SP/animscripts/animmode.gsc @@ -0,0 +1,131 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\animmode.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 47 ms + * Timestamp: 10/27/2023 2:29:40 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self endon("death"); + self endon("stop_animmode"); + self notify("killanimscript"); + self._tag_entity endon(self._anime); + if(isdefined(self._custom_anim_thread)) + { + self thread [[ self._custom_anim_thread ]](); + self._custom_anim_thread = undefined; + } + + var_00 = isdefined(self._custom_anim_loop) && self._custom_anim_loop; + if(var_00) + { + self endon("stop_loop"); + self._custom_anim_loop = undefined; + } + else + { + thread notify_on_end(self._anime); + } + + var_01 = self._anime; + self._anime = undefined; + var_02 = 0; + if(var_00) + { + var_02 = level.scr_anim[self._animname][var_01].size; + var_03 = level.scr_anim[self._animname][var_01][randomint(var_02)]; + } + else + { + var_03 = level.scr_anim[self._animname][var_02]; + } + + var_04 = getstartorigin(self._tag_entity.origin,self._tag_entity.angles,var_03); + var_05 = getstartangles(self._tag_entity.origin,self._tag_entity.angles,var_03); + var_06 = self getdroptofloorposition(var_04); + if(isdefined(var_06)) + { + var_04 = var_06; + } + else + { + } + + if(!isdefined(self.noteleport)) + { + self teleport(var_04,var_05); + } + + self.pushable = 0; + var_07 = 0.3; + var_08 = 0.2; + if(isdefined(self.anim_blend_time_override)) + { + var_07 = self.anim_blend_time_override; + var_08 = self.anim_blend_time_override; + } + + self animmode(self._animmode); + self clearanim(self.root_anim,var_07); + self orientmode("face angle",var_05[1]); + var_09 = "custom_animmode"; + self setflaggedanimrestart(var_09,var_03,1,var_08,1); + self._tag_entity thread maps\_anim::start_notetrack_wait(self,var_09,var_01,self._animname); + self._tag_entity thread maps\_anim::animscriptdonotetracksthread(self,var_09,var_01); + var_0A = self._tag_entity; + self._tag_entity = undefined; + self._animmode = undefined; + self endon("killanimscript"); + var_0B = "end"; + if(!var_00) + { + if(animhasnotetrack(var_03,"finish")) + { + var_0B = "finish"; + } + else if(animhasnotetrack(var_03,"stop anim")) + { + var_0B = "stop anim"; + } + } + + for(;;) + { + self waittillmatch(var_0B,var_09); + if(var_00) + { + var_03 = level.scr_anim[self._animname][var_01][randomint(var_02)]; + self setflaggedanimknoblimitedrestart(var_09,var_03,1,0.2,1); + if(isdefined(var_0A)) + { + var_0A thread maps\_anim::start_notetrack_wait(self,var_09,var_01,self._animname); + var_0A thread maps\_anim::animscriptdonotetracksthread(self,var_09,var_01); + } + + continue; + } + + break; + } + + if(var_0B != "end") + { + self orientmode("face motion"); + } + + self notify("finished_custom_animmode" + var_01); +} + +//Function Number: 2 +notify_on_end(param_00) +{ + self endon("death"); + self endon("finished_custom_animmode" + param_00); + self waittill("killanimscript"); + self notify("finished_custom_animmode" + param_00); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/animset.gsc b/MW3/Xbox/SP/animscripts/animset.gsc new file mode 100644 index 0000000..8adff90 --- /dev/null +++ b/MW3/Xbox/SP/animscripts/animset.gsc @@ -0,0 +1,669 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\animset.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 37 + * Decompile Time: 620 ms + * Timestamp: 10/27/2023 2:29:42 AM +*******************************************************************/ + +//Function Number: 1 +func_084F() +{ + anim.animsets = spawnstruct(); + level.animsets.move = []; + init_animset_default_stand(); + init_animset_cqb_stand(); + init_animset_pistol_stand(); + init_animset_rpg_stand(); + init_animset_shotgun_stand(); + init_animset_heat_stand(); + init_animset_default_crouch(); + init_animset_rpg_crouch(); + init_animset_shotgun_crouch(); + init_animset_default_prone(); + init_animset_run_move(); + init_animset_walk_move(); + init_animset_cqb_move(); + init_animset_heat_run_move(); + init_moving_turn_animations(); +} + +//Function Number: 2 +init_animset_run_move() +{ + anim.initanimset = []; + level.initanimset["sprint"] = %sprint_loop_distant; + level.initanimset["sprint_short"] = %sprint1_loop; + level.initanimset["prone"] = %prone_crawl; + level.initanimset["straight"] = %run_lowready_f; + level.initanimset["move_f"] = %walk_forward; + level.initanimset["move_l"] = %walk_left; + level.initanimset["move_r"] = %walk_right; + level.initanimset["move_b"] = %walk_backward; + level.initanimset["crouch"] = %crouch_fastwalk_f; + level.initanimset["crouch_l"] = %crouch_fastwalk_l; + level.initanimset["crouch_r"] = %crouch_fastwalk_r; + level.initanimset["crouch_b"] = %crouch_fastwalk_b; + level.initanimset["stairs_up"] = %traverse_stair_run_01; + level.initanimset["stairs_down"] = %traverse_stair_run_down; + level.animsets.move["run"] = level.initanimset; +} + +//Function Number: 3 +init_animset_heat_run_move() +{ + anim.initanimset = level.animsets.move["run"]; + level.initanimset["straight"] = %heat_run_loop; + level.animsets.move["heat_run"] = level.initanimset; +} + +//Function Number: 4 +init_animset_walk_move() +{ + anim.initanimset = []; + level.initanimset["sprint"] = %sprint_loop_distant; + level.initanimset["sprint_short"] = %sprint1_loop; + level.initanimset["prone"] = %prone_crawl; + level.initanimset["straight"] = %walk_cqb_f; + level.initanimset["move_f"] = %walk_cqb_f; + level.initanimset["move_l"] = %walk_left; + level.initanimset["move_r"] = %walk_right; + level.initanimset["move_b"] = %walk_backward; + level.initanimset["crouch"] = %crouch_fastwalk_f; + level.initanimset["crouch_l"] = %crouch_fastwalk_l; + level.initanimset["crouch_r"] = %crouch_fastwalk_r; + level.initanimset["crouch_b"] = %crouch_fastwalk_b; + level.initanimset["stairs_up"] = %traverse_stair_run; + level.initanimset["stairs_down"] = %traverse_stair_run_down_01; + level.animsets.move["walk"] = level.initanimset; +} + +//Function Number: 5 +init_animset_cqb_move() +{ + anim.initanimset = []; + level.initanimset["sprint"] = %sprint_loop_distant; + level.initanimset["sprint_short"] = %sprint1_loop; + level.initanimset["straight"] = %run_cqb_f_search_v1; + level.initanimset["move_f"] = %walk_cqb_f; + level.initanimset["move_l"] = %walk_left; + level.initanimset["move_r"] = %walk_right; + level.initanimset["move_b"] = %walk_backward; + level.initanimset["stairs_up"] = %traverse_stair_run; + level.initanimset["stairs_down"] = %traverse_stair_run_down_01; + level.animsets.move["cqb"] = level.initanimset; +} + +//Function Number: 6 +init_animset_pistol_stand() +{ + anim.initanimset = []; + level.initanimset["add_aim_up"] = %pistol_stand_aim_8_add; + level.initanimset["add_aim_down"] = %pistol_stand_aim_2_add; + level.initanimset["add_aim_left"] = %pistol_stand_aim_4_add; + level.initanimset["add_aim_right"] = %pistol_stand_aim_6_add; + level.initanimset["straight_level"] = %pistol_stand_aim_5; + level.initanimset["fire"] = %pistol_stand_fire_a; + level.initanimset["single"] = animscripts/utility::array(%pistol_stand_fire_a); + level.initanimset["reload"] = animscripts/utility::array(%pistol_stand_reload_a); + level.initanimset["reload_crouchhide"] = animscripts/utility::array(); + level.initanimset["exposed_idle"] = animscripts/utility::array(%exposed_idle_alert_v1,%exposed_idle_alert_v2,%exposed_idle_alert_v3); + set_animarray_standing_turns_pistol(); + level.initanimset["add_turn_aim_up"] = %pistol_stand_aim_8_alt; + level.initanimset["add_turn_aim_down"] = %pistol_stand_aim_2_alt; + level.initanimset["add_turn_aim_left"] = %pistol_stand_aim_4_alt; + level.initanimset["add_turn_aim_right"] = %pistol_stand_aim_6_alt; + level.animsets.pistolstand = level.initanimset; +} + +//Function Number: 7 +init_animset_rpg_stand() +{ + anim.initanimset = []; + level.initanimset["add_aim_up"] = %rpg_stand_aim_8; + level.initanimset["add_aim_down"] = %rpg_stand_aim_2; + level.initanimset["add_aim_left"] = %rpg_stand_aim_4; + level.initanimset["add_aim_right"] = %rpg_stand_aim_6; + level.initanimset["straight_level"] = %rpg_stand_aim_5; + level.initanimset["fire"] = %rpg_stand_fire; + level.initanimset["single"] = animscripts/utility::array(%exposed_shoot_semi1); + level.initanimset["reload"] = animscripts/utility::array(%rpg_stand_reload); + level.initanimset["reload_crouchhide"] = animscripts/utility::array(); + level.initanimset["exposed_idle"] = animscripts/utility::array(%rpg_stand_idle); + set_animarray_stance_change(); + set_animarray_standing_turns(); + set_animarray_add_turn_aims_stand(); + level.animsets.rpgstand = level.initanimset; +} + +//Function Number: 8 +init_animset_shotgun_stand() +{ + anim.initanimset = []; + level.initanimset["add_aim_up"] = %shotgun_aim_8; + level.initanimset["add_aim_down"] = %shotgun_aim_2; + level.initanimset["add_aim_left"] = %shotgun_aim_4; + level.initanimset["add_aim_right"] = %shotgun_aim_6; + level.initanimset["straight_level"] = %shotgun_aim_5; + level.initanimset["fire"] = %exposed_shoot_auto_v3; + level.initanimset["single"] = animscripts/utility::array(%shotgun_stand_fire_1a,%shotgun_stand_fire_1b); + set_animarray_burst_and_semi_fire_stand(); + level.initanimset["exposed_idle"] = animscripts/utility::array(%exposed_idle_alert_v1,%exposed_idle_alert_v2,%exposed_idle_alert_v3); + level.initanimset["reload"] = animscripts/utility::array(%shotgun_stand_reload_a,%shotgun_stand_reload_b,%shotgun_stand_reload_c,%shotgun_stand_reload_c,%shotgun_stand_reload_c); + level.initanimset["reload_crouchhide"] = animscripts/utility::array(%shotgun_stand_reload_a,%shotgun_stand_reload_b); + set_animarray_stance_change(); + set_animarray_standing_turns(); + set_animarray_add_turn_aims_stand(); + level.animsets.shotgunstand = level.initanimset; +} + +//Function Number: 9 +init_animset_cqb_stand() +{ + anim.initanimset = []; + level.initanimset["add_aim_up"] = %cqb_stand_aim8; + level.initanimset["add_aim_down"] = %cqb_stand_aim2; + level.initanimset["add_aim_left"] = %cqb_stand_aim4; + level.initanimset["add_aim_right"] = %cqb_stand_aim6; + level.initanimset["straight_level"] = %cqb_stand_aim5; + level.initanimset["fire"] = %exposed_shoot_auto_v3; + level.initanimset["single"] = animscripts/utility::array(%exposed_shoot_semi1); + set_animarray_burst_and_semi_fire_stand(); + level.initanimset["exposed_idle"] = animscripts/utility::array(%exposed_idle_alert_v1,%exposed_idle_alert_v2,%exposed_idle_alert_v3); + level.initanimset["reload"] = animscripts/utility::array(%cqb_stand_reload_steady); + level.initanimset["reload_crouchhide"] = animscripts/utility::array(%cqb_stand_reload_knee); + set_animarray_stance_change(); + set_animarray_standing_turns(); + set_animarray_add_turn_aims_stand(); + level.animsets.cqbstand = level.initanimset; +} + +//Function Number: 10 +init_animset_heat_stand() +{ + anim.initanimset = []; + level.initanimset["add_aim_up"] = %heat_stand_aim_8; + level.initanimset["add_aim_down"] = %heat_stand_aim_2; + level.initanimset["add_aim_left"] = %heat_stand_aim_4; + level.initanimset["add_aim_right"] = %heat_stand_aim_6; + level.initanimset["straight_level"] = %heat_stand_aim_5; + level.initanimset["fire"] = %heat_stand_fire_auto; + level.initanimset["single"] = animscripts/utility::array(%heat_stand_fire_single); + set_animarray_custom_burst_and_semi_fire_stand(%heat_stand_fire_burst); + level.initanimset["exposed_idle"] = animscripts/utility::array(%heat_stand_idle,%heat_stand_scana,%heat_stand_scanb); + level.initanimset["reload"] = animscripts/utility::array(%heat_exposed_reload); + level.initanimset["reload_crouchhide"] = animscripts/utility::array(); + set_animarray_stance_change(); + level.initanimset["turn_left_45"] = %heat_stand_turn_l; + level.initanimset["turn_left_90"] = %heat_stand_turn_l; + level.initanimset["turn_left_135"] = %heat_stand_turn_180; + level.initanimset["turn_left_180"] = %heat_stand_turn_180; + level.initanimset["turn_right_45"] = %heat_stand_turn_r; + level.initanimset["turn_right_90"] = %heat_stand_turn_r; + level.initanimset["turn_right_135"] = %heat_stand_turn_180; + level.initanimset["turn_right_180"] = %heat_stand_turn_180; + set_animarray_add_turn_aims_stand(); + level.animsets.heatstand = level.initanimset; +} + +//Function Number: 11 +init_animset_default_stand() +{ + anim.initanimset = []; + level.initanimset["add_aim_up"] = %exposed_aim_8; + level.initanimset["add_aim_down"] = %exposed_aim_2; + level.initanimset["add_aim_left"] = %exposed_aim_4; + level.initanimset["add_aim_right"] = %exposed_aim_6; + level.initanimset["straight_level"] = %exposed_aim_5; + level.initanimset["fire"] = %exposed_shoot_auto_v3; + level.initanimset["single"] = animscripts/utility::array(%exposed_shoot_semi1); + set_animarray_burst_and_semi_fire_stand(); + level.initanimset["exposed_idle"] = animscripts/utility::array(%exposed_idle_alert_v1,%exposed_idle_alert_v2,%exposed_idle_alert_v3); + level.initanimset["exposed_grenade"] = animscripts/utility::array(%exposed_grenadethrowb,%exposed_grenadethrowc); + level.initanimset["reload"] = animscripts/utility::array(%exposed_reload); + level.initanimset["reload_crouchhide"] = animscripts/utility::array(%exposed_reloadb); + set_animarray_stance_change(); + set_animarray_standing_turns(); + set_animarray_add_turn_aims_stand(); + level.animsets.defaultstand = level.initanimset; +} + +//Function Number: 12 +init_animset_default_crouch() +{ + anim.initanimset = []; + level.initanimset["add_aim_up"] = %exposed_crouch_aim_8; + level.initanimset["add_aim_down"] = %exposed_crouch_aim_2; + level.initanimset["add_aim_left"] = %exposed_crouch_aim_4; + level.initanimset["add_aim_right"] = %exposed_crouch_aim_6; + level.initanimset["straight_level"] = %exposed_crouch_aim_5; + level.initanimset["fire"] = %exposed_crouch_shoot_auto_v2; + level.initanimset["single"] = animscripts/utility::array(%exposed_crouch_shoot_semi1); + set_animarray_burst_and_semi_fire_crouch(); + level.initanimset["reload"] = animscripts/utility::array(%exposed_crouch_reload); + level.initanimset["exposed_idle"] = animscripts/utility::array(%exposed_crouch_idle_alert_v1,%exposed_crouch_idle_alert_v2,%exposed_crouch_idle_alert_v3); + set_animarray_stance_change(); + set_animarray_crouching_turns(); + set_animarray_add_turn_aims_crouch(); + level.animsets.defaultcrouch = level.initanimset; +} + +//Function Number: 13 +init_animset_rpg_crouch() +{ + anim.initanimset = []; + level.initanimset["add_aim_up"] = %rpg_crouch_aim_8; + level.initanimset["add_aim_down"] = %rpg_crouch_aim_2; + level.initanimset["add_aim_left"] = %rpg_crouch_aim_4; + level.initanimset["add_aim_right"] = %rpg_crouch_aim_6; + level.initanimset["straight_level"] = %rpg_crouch_aim_5; + level.initanimset["fire"] = %rpg_crouch_fire; + level.initanimset["single"] = animscripts/utility::array(%rpg_crouch_fire); + level.initanimset["reload"] = animscripts/utility::array(%rpg_crouch_reload); + level.initanimset["exposed_idle"] = animscripts/utility::array(%rpg_crouch_idle); + set_animarray_stance_change(); + set_animarray_crouching_turns(); + set_animarray_add_turn_aims_crouch(); + level.animsets.rpgcrouch = level.initanimset; +} + +//Function Number: 14 +init_animset_shotgun_crouch() +{ + anim.initanimset = []; + level.initanimset["add_aim_up"] = %exposed_crouch_aim_8; + level.initanimset["add_aim_down"] = %exposed_crouch_aim_2; + level.initanimset["add_aim_left"] = %exposed_crouch_aim_4; + level.initanimset["add_aim_right"] = %exposed_crouch_aim_6; + level.initanimset["straight_level"] = %exposed_crouch_aim_5; + level.initanimset["fire"] = %exposed_crouch_shoot_auto_v2; + level.initanimset["single"] = animscripts/utility::array(%shotgun_crouch_fire); + set_animarray_burst_and_semi_fire_crouch(); + level.initanimset["reload"] = animscripts/utility::array(%shotgun_crouch_reload); + level.initanimset["exposed_idle"] = animscripts/utility::array(%exposed_crouch_idle_alert_v1,%exposed_crouch_idle_alert_v2,%exposed_crouch_idle_alert_v3); + set_animarray_stance_change(); + set_animarray_crouching_turns(); + set_animarray_add_turn_aims_crouch(); + level.animsets.shotguncrouch = level.initanimset; +} + +//Function Number: 15 +init_animset_default_prone() +{ + anim.initanimset = []; + level.initanimset["add_aim_up"] = %prone_aim_8_add; + level.initanimset["add_aim_down"] = %prone_aim_2_add; + level.initanimset["add_aim_left"] = %prone_aim_4_add; + level.initanimset["add_aim_right"] = %prone_aim_6_add; + level.initanimset["straight_level"] = %prone_aim_5; + level.initanimset["fire"] = %prone_fire_1; + level.initanimset["single"] = animscripts/utility::array(%prone_fire_1); + level.initanimset["reload"] = animscripts/utility::array(%prone_reload); + level.initanimset["burst2"] = %prone_fire_burst; + level.initanimset["burst3"] = %prone_fire_burst; + level.initanimset["burst4"] = %prone_fire_burst; + level.initanimset["burst5"] = %prone_fire_burst; + level.initanimset["burst6"] = %prone_fire_burst; + level.initanimset["semi2"] = %prone_fire_burst; + level.initanimset["semi3"] = %prone_fire_burst; + level.initanimset["semi4"] = %prone_fire_burst; + level.initanimset["semi5"] = %prone_fire_burst; + level.initanimset["exposed_idle"] = animscripts/utility::array(%exposed_crouch_idle_alert_v1,%exposed_crouch_idle_alert_v2,%exposed_crouch_idle_alert_v3); + set_animarray_stance_change(); + level.animsets.defaultprone = level.initanimset; +} + +//Function Number: 16 +init_animset_complete_custom_stand(param_00) +{ + self.combatstandanims = param_00; +} + +//Function Number: 17 +init_animset_custom_stand(param_00,param_01,param_02,param_03) +{ + anim.initanimset = level.animsets.defaultstand; + if(isdefined(param_01)) + { + level.initanimset["straight_level"] = param_01; + } + + if(isdefined(param_00)) + { + level.initanimset["fire"] = param_00; + level.initanimset["single"] = animscripts/utility::array(param_00); + set_animarray_custom_burst_and_semi_fire_stand(param_00); + } + + if(isdefined(param_02)) + { + level.initanimset["exposed_idle"] = animscripts/utility::array(param_02); + } + + if(isdefined(param_03)) + { + level.initanimset["reload"] = animscripts/utility::array(param_03); + level.initanimset["reload_crouchhide"] = animscripts/utility::array(param_03); + } + + self.combatstandanims = level.initanimset; +} + +//Function Number: 18 +func_086F(param_00) +{ + self.combatcrouchanims = param_00; +} + +//Function Number: 19 +func_0871(param_00,param_01,param_02) +{ + anim.initanimset = level.animsets.defaultcrouch; + if(isdefined(param_00)) + { + level.initanimset["fire"] = param_00; + level.initanimset["single"] = animscripts/utility::array(param_00); + set_animarray_custom_burst_and_semi_fire_crouch(param_00); + } + + if(isdefined(param_01)) + { + level.initanimset["exposed_idle"] = animscripts/utility::array(param_01); + } + + if(isdefined(param_02)) + { + level.initanimset["reload"] = animscripts/utility::array(param_02); + } + + self.combatcrouchanims = level.initanimset; +} + +//Function Number: 20 +clear_custom_animset() +{ + self.custommoveanimset = undefined; + self.customidleanimset = undefined; + self.combatstandanims = undefined; + self.combatcrouchanims = undefined; +} + +//Function Number: 21 +set_animarray_standing_turns_pistol(param_00) +{ + level.initanimset["turn_left_45"] = %pistol_stand_turn45l; + level.initanimset["turn_left_90"] = %pistol_stand_turn90l; + level.initanimset["turn_left_135"] = %pistol_stand_turn90l; + level.initanimset["turn_left_180"] = %pistol_stand_turn180l; + level.initanimset["turn_right_45"] = %pistol_stand_turn45r; + level.initanimset["turn_right_90"] = %pistol_stand_turn90r; + level.initanimset["turn_right_135"] = %pistol_stand_turn90r; + level.initanimset["turn_right_180"] = %pistol_stand_turn180l; +} + +//Function Number: 22 +set_animarray_standing_turns() +{ + level.initanimset["turn_left_45"] = %exposed_tracking_turn45l; + level.initanimset["turn_left_90"] = %exposed_tracking_turn90l; + level.initanimset["turn_left_135"] = %exposed_tracking_turn135l; + level.initanimset["turn_left_180"] = %exposed_tracking_turn180l; + level.initanimset["turn_right_45"] = %exposed_tracking_turn45r; + level.initanimset["turn_right_90"] = %exposed_tracking_turn90r; + level.initanimset["turn_right_135"] = %exposed_tracking_turn135r; + level.initanimset["turn_right_180"] = %exposed_tracking_turn180r; +} + +//Function Number: 23 +set_animarray_crouching_turns() +{ + level.initanimset["turn_left_45"] = %exposed_crouch_turn_90_left; + level.initanimset["turn_left_90"] = %exposed_crouch_turn_90_left; + level.initanimset["turn_left_135"] = %exposed_crouch_turn_180_left; + level.initanimset["turn_left_180"] = %exposed_crouch_turn_180_left; + level.initanimset["turn_right_45"] = %exposed_crouch_turn_90_right; + level.initanimset["turn_right_90"] = %exposed_crouch_turn_90_right; + level.initanimset["turn_right_135"] = %exposed_crouch_turn_180_right; + level.initanimset["turn_right_180"] = %exposed_crouch_turn_180_right; +} + +//Function Number: 24 +set_animarray_stance_change() +{ + level.initanimset["crouch_2_stand"] = %exposed_crouch_2_stand; + level.initanimset["crouch_2_prone"] = %crouch_2_prone; + level.initanimset["stand_2_crouch"] = %exposed_stand_2_crouch; + level.initanimset["stand_2_prone"] = %stand_2_prone; + level.initanimset["prone_2_crouch"] = %prone_2_crouch; + level.initanimset["prone_2_stand"] = %prone_2_stand; +} + +//Function Number: 25 +set_animarray_burst_and_semi_fire_stand() +{ + level.initanimset["burst2"] = %exposed_shoot_burst3; + level.initanimset["burst3"] = %exposed_shoot_burst3; + level.initanimset["burst4"] = %exposed_shoot_burst4; + level.initanimset["burst5"] = %exposed_shoot_burst5; + level.initanimset["burst6"] = %exposed_shoot_burst6; + level.initanimset["semi2"] = %exposed_shoot_semi2; + level.initanimset["semi3"] = %exposed_shoot_semi3; + level.initanimset["semi4"] = %exposed_shoot_semi4; + level.initanimset["semi5"] = %exposed_shoot_semi5; +} + +//Function Number: 26 +set_animarray_custom_burst_and_semi_fire_stand(param_00) +{ + level.initanimset["burst2"] = param_00; + level.initanimset["burst3"] = param_00; + level.initanimset["burst4"] = param_00; + level.initanimset["burst5"] = param_00; + level.initanimset["burst6"] = param_00; + level.initanimset["semi2"] = param_00; + level.initanimset["semi3"] = param_00; + level.initanimset["semi4"] = param_00; + level.initanimset["semi5"] = param_00; +} + +//Function Number: 27 +set_animarray_burst_and_semi_fire_crouch() +{ + level.initanimset["burst2"] = %exposed_crouch_shoot_burst3; + level.initanimset["burst3"] = %exposed_crouch_shoot_burst3; + level.initanimset["burst4"] = %exposed_crouch_shoot_burst4; + level.initanimset["burst5"] = %exposed_crouch_shoot_burst5; + level.initanimset["burst6"] = %exposed_crouch_shoot_burst6; + level.initanimset["semi2"] = %exposed_crouch_shoot_semi2; + level.initanimset["semi3"] = %exposed_crouch_shoot_semi3; + level.initanimset["semi4"] = %exposed_crouch_shoot_semi4; + level.initanimset["semi5"] = %exposed_crouch_shoot_semi5; +} + +//Function Number: 28 +set_animarray_custom_burst_and_semi_fire_crouch(param_00) +{ + level.initanimset["burst2"] = param_00; + level.initanimset["burst3"] = param_00; + level.initanimset["burst4"] = param_00; + level.initanimset["burst5"] = param_00; + level.initanimset["burst6"] = param_00; + level.initanimset["semi2"] = param_00; + level.initanimset["semi3"] = param_00; + level.initanimset["semi4"] = param_00; + level.initanimset["semi5"] = param_00; +} + +//Function Number: 29 +set_animarray_add_turn_aims_stand() +{ + level.initanimset["add_turn_aim_up"] = %exposed_turn_aim_8; + level.initanimset["add_turn_aim_down"] = %exposed_turn_aim_2; + level.initanimset["add_turn_aim_left"] = %exposed_turn_aim_4; + level.initanimset["add_turn_aim_right"] = %exposed_turn_aim_6; +} + +//Function Number: 30 +set_animarray_add_turn_aims_crouch() +{ + level.initanimset["add_turn_aim_up"] = %exposed_crouch_turn_aim_8; + level.initanimset["add_turn_aim_down"] = %exposed_crouch_turn_aim_2; + level.initanimset["add_turn_aim_left"] = %exposed_crouch_turn_aim_4; + level.initanimset["add_turn_aim_right"] = %exposed_crouch_turn_aim_6; +} + +//Function Number: 31 +set_animarray_standing() +{ + if(animscripts/utility::usingsidearm()) + { + self.a.array = level.animsets.pistolstand; + return; + } + + if(isdefined(self.combatstandanims)) + { + self.a.array = self.combatstandanims; + return; + } + + if(isdefined(self.heat)) + { + self.a.array = level.animsets.heatstand; + return; + } + + if(animscripts/utility::usingrocketlauncher()) + { + self.a.array = level.animsets.rpgstand; + return; + } + + if(isdefined(self.weapon) && animscripts/utility::weapon_pump_action_shotgun()) + { + self.a.array = level.animsets.shotgunstand; + return; + } + + if(animscripts/utility::iscqbwalking()) + { + self.a.array = level.animsets.cqbstand; + return; + } + + self.a.array = level.animsets.defaultstand; +} + +//Function Number: 32 +set_animarray_crouching() +{ + if(animscripts/utility::usingsidearm()) + { + animscripts/shared::placeweaponon(self.primaryweapon,"right"); + } + + if(isdefined(self.combatcrouchanims)) + { + self.a.array = self.combatcrouchanims; + return; + } + + if(animscripts/utility::usingrocketlauncher()) + { + self.a.array = level.animsets.rpgcrouch; + return; + } + + if(isdefined(self.weapon) && animscripts/utility::weapon_pump_action_shotgun()) + { + self.a.array = level.animsets.shotguncrouch; + return; + } + + self.a.array = level.animsets.defaultcrouch; +} + +//Function Number: 33 +set_animarray_prone() +{ + if(animscripts/utility::usingsidearm()) + { + animscripts/shared::placeweaponon(self.primaryweapon,"right"); + } + + self.a.array = level.animsets.defaultprone; +} + +//Function Number: 34 +init_moving_turn_animations() +{ + level.runturnanims["L90"] = %run_turn_l90; + level.runturnanims["R90"] = %run_turn_r90; + level.runturnanims["L45"] = %run_turn_l45; + level.runturnanims["R45"] = %run_turn_r45; + level.runturnanims["L135"] = %run_turn_l135; + level.runturnanims["R135"] = %run_turn_r135; + level.runturnanims["180"] = %run_turn_180; + level.cqbturnanims["L90"] = %cqb_walk_turn_4; + level.cqbturnanims["R90"] = %cqb_walk_turn_6; + level.cqbturnanims["L45"] = %cqb_walk_turn_7; + level.cqbturnanims["R45"] = %cqb_walk_turn_9; + level.cqbturnanims["L135"] = %cqb_walk_turn_1; + level.cqbturnanims["R135"] = %cqb_walk_turn_3; + level.cqbturnanims["180"] = %cqb_walk_turn_2; +} + +//Function Number: 35 +func_088B() +{ + self.maxrunngunangle = 130; + self.runnguntransitionpoint = 0.4615385; + self.runngunincrement = 0.3; + self.runngunanims["F"] = %run_n_gun_f; + self.runngunanims["L"] = %run_n_gun_l; + self.runngunanims["R"] = %run_n_gun_r; + self.runngunanims["LB"] = %run_n_gun_l_120; + self.runngunanims["RB"] = %run_n_gun_r_120; +} + +//Function Number: 36 +set_ambush_sidestep_anims() +{ + self.a.moveanimset["move_l"] = %combatwalk_l; + self.a.moveanimset["move_r"] = %combatwalk_r; + self.a.moveanimset["move_b"] = %combatwalk_b; +} + +//Function Number: 37 +heat_reload_anim() +{ + if(self.weapon != self.primaryweapon) + { + return animscripts/utility::animarraypickrandom("reload"); + } + + if(isdefined(self.node)) + { + if(self nearclaimnodeandangle()) + { + var_00 = undefined; + if(self.node.type == "Cover Left") + { + var_00 = %heat_cover_reload_r; + } + else if(self.node.type == "Cover Right") + { + var_00 = %heat_cover_reload_l; + } + + if(isdefined(var_00)) + { + return var_00; + } + } + } + + return %heat_exposed_reload; +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/atv.gsc b/MW3/Xbox/SP/animscripts/atv.gsc new file mode 100644 index 0000000..21bf74b --- /dev/null +++ b/MW3/Xbox/SP/animscripts/atv.gsc @@ -0,0 +1,655 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\atv.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 27 + * Decompile Time: 465 ms + * Timestamp: 10/27/2023 2:29:44 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self.current_event = "none"; + self.shoot_while_driving_thread = undefined; + atv_geton(); + main_driver(); +} + +//Function Number: 2 +atv_geton() +{ + self.grenadeawareness = 0; + self.a.var_911 = "crouch"; + maps\_utility::disable_surprise(); + self.allowpain = 0; + self.getoffvehiclefunc = ::func_204E; + self.specialdeathfunc = ::atv_normal_death; + self.disablebulletwhizbyreaction = 1; +} + +//Function Number: 3 +func_204E() +{ + self.allowpain = 1; + self.getoffvehiclefunc = undefined; + self.specialdeathfunc = undefined; + self.a.specialshootbehavior = undefined; + self.disablebulletwhizbyreaction = undefined; +} + +//Function Number: 4 +main_driver() +{ + var_00 = self.ridingvehicle.driver_shooting || self.ridingvehicle.riders.size == 1; + atv_setanim_driver(var_00); + if(var_00) + { + animscripts/shared::placeweaponon(self.primaryweapon,"left"); + self.rightaimlimit = 90; + self.leftaimlimit = -90; + animscripts/track::setanimaimweight(1,0.2); + thread atv_trackshootentorpos_driver(); + thread func_2050(); + } + else + { + animscripts/shared::placeweaponon(self.primaryweapon,"none"); + thread atv_loop_driver(); + } + + func_2052("driver"); +} + +//Function Number: 5 +atv_loop_driver() +{ + self endon("death"); + self endon("killanimscript"); + var_00 = "left2right"; + var_01 = []; + self setanimknoball(%atv_turn,%body,1,0); + self setanim(animscripts/utility::animarray("drive"),1,0); + self setanimknob(animscripts/utility::animarray(var_01),1,0); + self setanimtime(animscripts/utility::animarray(var_01),0.5); + for(;;) + { + if(self.ridingvehicle.steering_enable) + { + var_02 = 0.5 * 1 + maps\_vehicle::update_steering(self.ridingvehicle); + var_03 = self getanimtime(animscripts/utility::animarray(var_01)); + if(var_01 == "right2left") + { + var_03 = 1 - var_03; + } + + var_04 = 20 * abs(var_03 - var_02); + if(var_03 < var_02) + { + var_01 = "left2right"; + var_04 = var_04 * var_41["left2right"]; + } + else + { + var_01 = "right2left"; + var_04 = var_04 * var_41["right2left"]; + var_03 = 1 - var_03; + } + } + else + { + var_01 = "left2right"; + var_04 = 0; + var_03 = 0.5; + } + + self setanimknoblimited(animscripts/utility::animarray(var_01),1,0.1,var_04); + self setanimtime(animscripts/utility::animarray(var_01),var_03); + wait 0.05; + } +} + +//Function Number: 6 +func_2050() +{ + self endon("death"); + self endon("killanimscript"); + var_00 = 0.05; + var_01 = 0; + self setanimknoball(%atv_aiming,%body,1,0); + self setanimknob(animscripts/utility::animarray("idle"),1,0); + for(;;) + { + if(self.current_event != "none") + { + self waittill("atv_event_finished"); + continue; + } + + var_02 = maps\_vehicle::update_steering(self.ridingvehicle); + var_03 = 1 - abs(var_02); + var_04 = max(0,0 - var_02); + var_05 = max(0,var_02); + self setanimlimited(animscripts/utility::animarray("straight_level_center"),var_03,var_00); + self setanimlimited(animscripts/utility::animarray("straight_level_left"),var_04,var_00); + self setanimlimited(animscripts/utility::animarray("straight_level_right"),var_05,var_00); + if(self.bulletsinclip <= 0) + { + animscripts/weaponlist::refillclip(); + var_01 = gettime() + 3000; + } + + if(var_01 <= gettime()) + { + func_2053(); + } + + self setanimknoblimited(animscripts/utility::animarray("add_aim_left_center"),var_03,var_00); + self setanimlimited(animscripts/utility::animarray("add_aim_left_left"),var_04,var_00); + self setanimlimited(animscripts/utility::animarray("add_aim_left_right"),var_05,var_00); + self setanimknoblimited(animscripts/utility::animarray("add_aim_right_center"),var_03,var_00); + self setanimlimited(animscripts/utility::animarray("add_aim_right_left"),var_04,var_00); + self setanimlimited(animscripts/utility::animarray("add_aim_right_right"),var_05,var_00); + thread atv_stop_shooting(); + wait 0.05; + } +} + +//Function Number: 7 +func_2051(param_00) +{ + self endon("death"); + self.ridingvehicle.steering_enable = 0; + self setflaggedanimknoblimitedrestart("atv_event",param_00,1,0.17); + animscripts/shared::donotetracks("atv_event",::atv_waitfor_start_lean); + self setanimknoblimited(animscripts/utility::animarray("event_restore"),1,0.1); + self.ridingvehicle.steering_enable = 1; + self.current_event = "none"; + self notify("atv_event_finished"); +} + +//Function Number: 8 +func_2052(param_00) +{ + self endon("death"); + self endon("killanimscript"); + var_01 = self.ridingvehicle; + for(;;) + { + if(var_01.event["jump"][param_00]) + { + var_01.event["jump"][param_00] = 0; + self notify("atv_event_occurred"); + self.current_event = "jump"; + var_01.steering_enable = 0; + self setflaggedanimknoblimitedrestart("jump",animscripts/utility::animarray("event_jump"),1,0.17); + } + + if(var_01.event["bump"][param_00]) + { + var_01.event["bump"][param_00] = 0; + self notify("atv_event_occurred"); + if(self.current_event != "bump_big") + { + thread func_2051(animscripts/utility::animarray("event_bump")); + } + } + + if(var_01.event["bump_big"][param_00]) + { + var_01.event["bump_big"][param_00] = 0; + self notify("atv_event_occurred"); + self.current_event = "bump_big"; + thread func_2051(animscripts/utility::animarray("event_bump_big")); + } + + if(var_01.event["sway_left"][param_00]) + { + var_01.event["sway_left"][param_00] = 0; + self notify("atv_event_occurred"); + if(self.current_event != "bump_big") + { + thread func_2051(animscripts/utility::animarray("event_sway")["left"]); + } + } + + if(var_01.event["sway_right"][param_00]) + { + var_01.event["sway_right"][param_00] = 0; + self notify("atv_event_occurred"); + if(self.current_event != "bump_big") + { + thread func_2051(animscripts/utility::animarray("event_sway")["right"]); + } + } + + wait 0.05; + } +} + +//Function Number: 9 +func_2053() +{ + self notify("want_shoot_while_driving"); + self setanim(%atv_add_fire,1,0.2); + if(isdefined(self.shoot_while_driving_thread)) + { + return; + } + + self.shoot_while_driving_thread = 1; + thread atv_decide_shoot(); + thread func_2058(); +} + +//Function Number: 10 +atv_stop_shooting() +{ + self endon("killanimscript"); + self endon("want_shoot_while_driving"); + wait 0.05; + self notify("end_shoot_while_driving"); + self.shoot_while_driving_thread = undefined; + self clearanim(%atv_add_fire,0.2); +} + +//Function Number: 11 +atv_decide_shoot() +{ + self endon("killanimscript"); + self endon("end_shoot_while_driving"); + self.a.specialshootbehavior = ::atvshootbehavior; + atv_decide_shoot_internal(); + self.shoot_while_driving_thread = undefined; +} + +//Function Number: 12 +atv_decide_shoot_internal() +{ + self endon("atv_event_occurred"); + animscripts/shoot_behavior::decidewhatandhowtoshoot("normal"); +} + +//Function Number: 13 +atvshootbehavior() +{ + if(!isdefined(self.enemy)) + { + self.shootent = undefined; + self.shootpos = undefined; + self.shootstyle = "none"; + return; + } + + self.shootent = self.enemy; + self.shootpos = self.enemy getshootatpos(); + var_00 = distancesquared(self.origin,self.enemy.origin); + if(var_00 < 1000000) + { + self.shootstyle = "full"; + } + else if(var_00 < 4000000) + { + self.shootstyle = "burst"; + } + else + { + self.shootstyle = "single"; + } + + if(isdefined(self.enemy.vehicle)) + { + var_01 = 0.5; + var_02 = self.shootent.vehicle; + var_03 = self.ridingvehicle; + var_04 = var_03.origin - var_02.origin; + var_05 = anglestoforward(var_02.angles); + var_06 = anglestoright(var_02.angles); + var_07 = vectordot(var_04,var_05); + if(var_07 < 0) + { + var_08 = var_02 vehicle_getspeed() * var_01; + var_08 = var_08 * 17.6; + if(var_08 > 50) + { + var_09 = vectordot(var_04,var_06); + var_09 = var_09 / 3; + if(var_09 > 128) + { + var_09 = 128; + } + else if(var_09 < -128) + { + var_09 = -128; + } + + if(var_09 > 0) + { + var_09 = 128 - var_09; + } + else + { + var_09 = -128 - var_09; + } + + self.shootent = undefined; + self.shootpos = var_02.origin + var_08 * var_05 + var_09 * var_06; + return; + } + } + } +} + +//Function Number: 14 +func_2058() +{ + self endon("killanimscript"); + self endon("end_shoot_while_driving"); + self notify("doing_shootWhileDriving"); + self endon("doing_shootWhileDriving"); + for(;;) + { + if(!self.bulletsinclip) + { + wait 0.5; + continue; + } + + animscripts/combat_utility::shootuntilshootbehaviorchange(); + } +} + +//Function Number: 15 +atv_reload() +{ + if(!self.ridingvehicle.steering_enable) + { + return 0; + } + + if(!animscripts/combat_utility::needtoreload(0)) + { + return 0; + } + + if(!animscripts/utility::usingriflelikeweapon()) + { + return 0; + } + + atv_reload_internal(); + self notify("abort_reload"); + return 1; +} + +//Function Number: 16 +atv_reload_internal() +{ + self endon("atv_event_occurred"); + self.stop_aiming_for_reload = 1; + self waittill("start_blending_reload"); + self setanim(%atv_aiming,0,0.25); + self setflaggedanimrestart("gun_down",animscripts/utility::animarray("gun_down"),1,0.25); + animscripts/shared::donotetracks("gun_down"); + self clearanim(animscripts/utility::animarray("gun_down"),0); + self setflaggedanimknoballrestart("reload_anim",animscripts/utility::animarray("reload"),%body,1,0.25); + animscripts/shared::donotetracks("reload_anim"); + self clearanim(%atv_reload,0.2); + self setflaggedanimrestart("gun_up",animscripts/utility::animarray("gun_up"),1,0.25); + self.var_AF6 = 1; + animscripts/shared::donotetracks("gun_up",::atv_waitfor_start_aim); + self.stop_aiming_for_reload = undefined; + self clearanim(%atv_reload,0.1); + self setanim(%atv_aiming,1,0.1); + if(isdefined(self.var_AF6)) + { + self.var_AF6 = undefined; + animscripts/shared::donotetracks("gun_up",::func_205C); + self clearanim(animscripts/utility::animarray("gun_up"),0); + } +} + +//Function Number: 17 +atv_waitfor_start_aim(param_00) +{ + if(param_00 == "start_aim") + { + return 1; + } +} + +//Function Number: 18 +func_205C(param_00) +{ + if(param_00 == "end") + { + return 1; + } +} + +//Function Number: 19 +atv_waitfor_start_lean(param_00) +{ + if(param_00 == "start_lean") + { + return 1; + } +} + +//Function Number: 20 +atv_trackshootentorpos_driver() +{ + self endon("killanimscript"); + self endon("stop tracking"); + var_00 = 0.05; + var_01 = 8; + var_02 = 0; + var_03 = 0; + var_04 = 1; + for(;;) + { + animscripts/track::incranimaimweight(); + var_05 = (self.origin[0],self.origin[1],self geteye()[2]); + var_06 = self.shootpos; + if(isdefined(self.shootent)) + { + var_06 = self.shootent getshootatpos(); + } + + if(!isdefined(var_06)) + { + var_03 = 0; + var_07 = self getanglestolikelyenemypath(); + if(isdefined(var_07)) + { + var_03 = angleclamp180(self.angles[1] - var_07[1]); + } + } + else + { + var_08 = var_06 - var_05; + var_09 = vectortoangles(var_08); + var_03 = self.angles[1] - var_09[1]; + var_03 = angleclamp180(var_03); + } + + if(var_03 > self.rightaimlimit || var_03 < self.leftaimlimit) + { + var_03 = 0; + } + + if(var_04) + { + var_04 = 0; + } + else + { + var_0A = var_03 - var_02; + if(abs(var_0A) > var_01) + { + var_03 = var_02 + var_01 * common_scripts\utility::sign(var_0A); + } + } + + var_02 = var_03; + var_0B = min(max(0 - var_03,0),90) / 90 * self.a.var_8AE; + var_0C = min(max(var_03,0),90) / 90 * self.a.var_8AE; + self setanimlimited(%atv_aim_4,var_0B,var_00); + self setanimlimited(%atv_aim_6,var_0C,var_00); + wait 0.05; + } +} + +//Function Number: 21 +func_205F(param_00,param_01,param_02) +{ + var_03 = undefined; + var_04 = undefined; + var_05 = 0; + for(var_06 = 0;var_06 < param_00.size;var_06++) + { + var_07 = animscripts/utility::absangleclamp180(param_02 - param_01[var_06]); + if(!isdefined(var_03) || var_07 < var_05) + { + var_04 = var_03; + var_03 = param_00[var_06]; + var_05 = var_07; + continue; + } + + if(!isdefined(var_04)) + { + var_04 = param_00[var_06]; + } + } + + var_08 = var_03; + if(isdefined(level.var_2060) && var_08 == level.var_2060 && gettime() - level.prevatvdeathtime < 500) + { + var_08 = var_04; + } + + anim.var_2060 = var_08; + anim.prevatvdeathtime = gettime(); + return var_08; +} + +//Function Number: 22 +atv_death_launchslide() +{ + var_00 = self.ridingvehicle; + var_01 = var_00.prevframevelocity; + var_01 = (var_01[0],var_01[1],randomfloatrange(200,400)) * 0.75; + if(lengthsquared(var_01) > 1000000) + { + var_01 = vectornormalize(var_01) * 1000; + } + + var_02 = spawn("script_origin",self.origin); + var_02 moveslide((0,0,40),15,var_01); + self linkto(var_02); + var_02 thread func_0B03(); +} + +//Function Number: 23 +atv_normal_death() +{ + var_00 = []; + var_01 = []; + var_02 = func_205F(var_41,var_01,self.damageyaw); + animscripts/death::func_941(var_02); + return 1; +} + +//Function Number: 24 +atv_collide_death() +{ + var_00 = self.ridingvehicle; + if(!isdefined(var_00)) + { + return atv_normal_death(); + } + + var_01 = var_00.prevframevelocity; + atv_death_launchslide(); + var_02 = vectortoangles(var_01); + var_03 = angleclamp180(var_02[1] - self.angles[1]); + var_04 = []; + var_05 = []; + var_06 = func_205F(var_41,var_05,var_04); + animscripts/death::func_941(var_06); + return 1; +} + +//Function Number: 25 +func_0B03() +{ + var_00 = self.origin; + for(var_01 = 0;var_01 < 60;var_01++) + { + wait 0.05; + var_00 = self.origin; + } + + wait 3; + if(isdefined(self)) + { + self delete(); + } +} + +//Function Number: 26 +func_2065(param_00) +{ + self.a.array["idle"] = level.scr_anim["atv"][param_00]["idle"]; + self.a.array["drive"] = level.scr_anim["atv"][param_00]["drive"]; + self.a.array["fire"] = level.scr_anim["atv"][param_00]["fire"]; + self.a.array["single"] = animscripts/utility::array(level.scr_anim["atv"][param_00]["single"]); + self.a.array["burst2"] = level.scr_anim["atv"][param_00]["fire"]; + self.a.array["burst3"] = level.scr_anim["atv"][param_00]["fire"]; + self.a.array["burst4"] = level.scr_anim["atv"][param_00]["fire"]; + self.a.array["burst5"] = level.scr_anim["atv"][param_00]["fire"]; + self.a.array["burst6"] = level.scr_anim["atv"][param_00]["fire"]; + self.a.array["semi2"] = level.scr_anim["atv"][param_00]["fire"]; + self.a.array["semi3"] = level.scr_anim["atv"][param_00]["fire"]; + self.a.array["semi4"] = level.scr_anim["atv"][param_00]["fire"]; + self.a.array["semi5"] = level.scr_anim["atv"][param_00]["fire"]; +} + +//Function Number: 27 +atv_setanim_driver(param_00) +{ + self.a.array = []; + func_2065("driver"); + self.a.array["left2right"] = level.scr_anim["atv"]["driver"]["left2right"]; + self.a.array["right2left"] = level.scr_anim["atv"]["driver"]["right2left"]; + self.a.array["straight_level_left"] = level.scr_anim["atv"]["driver"]["straight_level"]["left"]; + self.a.array["straight_level_center"] = level.scr_anim["atv"]["driver"]["straight_level"]["center"]; + self.a.array["straight_level_right"] = level.scr_anim["atv"]["driver"]["straight_level"]["right"]; + self.a.array["add_aim_left_left"] = level.scr_anim["atv"]["driver"]["add_aim_left"]["left"]; + self.a.array["add_aim_left_center"] = level.scr_anim["atv"]["driver"]["add_aim_left"]["center"]; + self.a.array["add_aim_left_right"] = level.scr_anim["atv"]["driver"]["add_aim_left"]["right"]; + self.a.array["add_aim_right_left"] = level.scr_anim["atv"]["driver"]["add_aim_right"]["left"]; + self.a.array["add_aim_right_center"] = level.scr_anim["atv"]["driver"]["add_aim_right"]["center"]; + self.a.array["add_aim_right_right"] = level.scr_anim["atv"]["driver"]["add_aim_right"]["right"]; + if(param_00) + { + self.a.array["event_jump"] = level.scr_anim["atv"]["driver"]["shoot_jump"]; + self.a.array["event_bump"] = level.scr_anim["atv"]["driver"]["shoot_bump"]; + self.a.array["event_bump_big"] = level.scr_anim["atv"]["driver"]["shoot_bump_big"]; + self.a.array["event_sway"] = []; + self.a.array["event_sway"]["left"] = level.scr_anim["atv"]["driver"]["shoot_sway_left"]; + self.a.array["event_sway"]["right"] = level.scr_anim["atv"]["driver"]["shoot_sway_right"]; + self.a.array["event_restore"] = %atv_aiming; + return; + } + + self.a.array["event_jump"] = level.scr_anim["atv"]["driver"]["drive_jump"]; + self.a.array["event_bump"] = level.scr_anim["atv"]["driver"]["drive_bump"]; + self.a.array["event_bump_big"] = level.scr_anim["atv"]["driver"]["drive_bump_big"]; + self.a.array["event_sway"] = []; + self.a.array["event_sway"]["left"] = level.scr_anim["atv"]["driver"]["drive_sway_left"]; + self.a.array["event_sway"]["right"] = level.scr_anim["atv"]["driver"]["drive_sway_right"]; + self.a.array["event_restore"] = %atv_turn; +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/battlechatter.gsc b/MW3/Xbox/SP/animscripts/battlechatter.gsc new file mode 100644 index 0000000..49e550e --- /dev/null +++ b/MW3/Xbox/SP/animscripts/battlechatter.gsc @@ -0,0 +1,3935 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\battlechatter.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 157 + * Decompile Time: 2689 ms + * Timestamp: 10/27/2023 2:29:53 AM +*******************************************************************/ + +//Function Number: 1 +init_battlechatter() +{ + if(isdefined(level.chatinitialized) && level.chatinitialized) + { + return; + } + + setdvarifuninitialized("bcs_enable","on"); + if(getdvar("bcs_enable","on") == "off") + { + anim.chatinitialized = 0; + level.player.chatinitialized = 0; + return; + } + + anim.chatinitialized = 1; + level.player.chatinitialized = 0; + setdvarifuninitialized("bcs_filterThreat","off"); + setdvarifuninitialized("bcs_filterInform","off"); + setdvarifuninitialized("bcs_filterOrder","off"); + setdvarifuninitialized("bcs_filterReaction","off"); + setdvarifuninitialized("bcs_filterResponse","off"); + setdvarifuninitialized("bcs_forceEnglish","0"); + setdvarifuninitialized("bcs_allowsamevoiceresponse","off"); + setdvarifuninitialized("debug_bcprint","off"); + setdvarifuninitialized("debug_bcprintdump","off"); + setdvarifuninitialized("debug_bcprintdumptype","csv"); + setdvarifuninitialized("debug_bcshowqueue","off"); + anim.bcprintfailprefix = "^3***** BCS FAILURE: "; + anim.var_757 = "^3***** BCS WARNING: "; + bcs_setup_teams_array(); + bcs_setup_countryids(); + level.playernameids["american"] = "1"; + level.playernameids["seal"] = "1"; + level.playernameids["taskforce"] = "1"; + level.playernameids["secretservice"] = "1"; + level.playernameids["delta"] = "1"; + thread setplayerbcnameid(); + anim.usedids = []; + level.usedids["russian"] = []; + level.usedids["russian"][0] = spawnstruct(); + level.usedids["russian"][0].count = 0; + level.usedids["russian"][0].npcid = "0"; + level.usedids["russian"][1] = spawnstruct(); + level.usedids["russian"][1].count = 0; + level.usedids["russian"][1].npcid = "1"; + level.usedids["russian"][2] = spawnstruct(); + level.usedids["russian"][2].count = 0; + level.usedids["russian"][2].npcid = "2"; + level.usedids["russian"][3] = spawnstruct(); + level.usedids["russian"][3].count = 0; + level.usedids["russian"][3].npcid = "3"; + level.usedids["russian"][4] = spawnstruct(); + level.usedids["russian"][4].count = 0; + level.usedids["russian"][4].npcid = "4"; + level.usedids["portuguese"] = []; + level.usedids["portuguese"][0] = spawnstruct(); + level.usedids["portuguese"][0].count = 0; + level.usedids["portuguese"][0].npcid = "0"; + level.usedids["portuguese"][1] = spawnstruct(); + level.usedids["portuguese"][1].count = 0; + level.usedids["portuguese"][1].npcid = "1"; + level.usedids["portuguese"][2] = spawnstruct(); + level.usedids["portuguese"][2].count = 0; + level.usedids["portuguese"][2].npcid = "2"; + level.usedids["shadowcompany"] = []; + level.usedids["shadowcompany"][0] = spawnstruct(); + level.usedids["shadowcompany"][0].count = 0; + level.usedids["shadowcompany"][0].npcid = "0"; + level.usedids["shadowcompany"][1] = spawnstruct(); + level.usedids["shadowcompany"][1].count = 0; + level.usedids["shadowcompany"][1].npcid = "1"; + level.usedids["shadowcompany"][2] = spawnstruct(); + level.usedids["shadowcompany"][2].count = 0; + level.usedids["shadowcompany"][2].npcid = "2"; + level.usedids["shadowcompany"][3] = spawnstruct(); + level.usedids["shadowcompany"][3].count = 0; + level.usedids["shadowcompany"][3].npcid = "3"; + level.usedids["british"] = []; + level.usedids["british"][0] = spawnstruct(); + level.usedids["british"][0].count = 0; + level.usedids["british"][0].npcid = "0"; + level.usedids["british"][1] = spawnstruct(); + level.usedids["british"][1].count = 0; + level.usedids["british"][1].npcid = "1"; + level.usedids["american"] = []; + level.usedids["american"][0] = spawnstruct(); + level.usedids["american"][0].count = 0; + level.usedids["american"][0].npcid = "0"; + level.usedids["american"][1] = spawnstruct(); + level.usedids["american"][1].count = 0; + level.usedids["american"][1].npcid = "1"; + level.usedids["american"][2] = spawnstruct(); + level.usedids["american"][2].count = 0; + level.usedids["american"][2].npcid = "2"; + level.usedids["seal"] = []; + level.usedids["seal"][0] = spawnstruct(); + level.usedids["seal"][0].count = 0; + level.usedids["seal"][0].npcid = "0"; + level.usedids["seal"][1] = spawnstruct(); + level.usedids["seal"][1].count = 0; + level.usedids["seal"][1].npcid = "1"; + level.usedids["seal"][2] = spawnstruct(); + level.usedids["seal"][2].count = 0; + level.usedids["seal"][2].npcid = "2"; + level.usedids["seal"][3] = spawnstruct(); + level.usedids["seal"][3].count = 0; + level.usedids["seal"][3].npcid = "3"; + level.usedids["taskforce"] = []; + level.usedids["taskforce"][0] = spawnstruct(); + level.usedids["taskforce"][0].count = 0; + level.usedids["taskforce"][0].npcid = "0"; + level.usedids["secretservice"] = []; + level.usedids["secretservice"][0] = spawnstruct(); + level.usedids["secretservice"][0].count = 0; + level.usedids["secretservice"][0].npcid = "0"; + level.usedids["secretservice"][1] = spawnstruct(); + level.usedids["secretservice"][1].count = 0; + level.usedids["secretservice"][1].npcid = "1"; + level.usedids["secretservice"][2] = spawnstruct(); + level.usedids["secretservice"][2].count = 0; + level.usedids["secretservice"][2].npcid = "2"; + level.usedids["secretservice"][3] = spawnstruct(); + level.usedids["secretservice"][3].count = 0; + level.usedids["secretservice"][3].npcid = "3"; + level.usedids["arab"] = []; + level.usedids["arab"][0] = spawnstruct(); + level.usedids["arab"][0].count = 0; + level.usedids["arab"][0].npcid = "0"; + level.usedids["arab"][1] = spawnstruct(); + level.usedids["arab"][1].count = 0; + level.usedids["arab"][1].npcid = "1"; + level.usedids["arab"][2] = spawnstruct(); + level.usedids["arab"][2].count = 0; + level.usedids["arab"][2].npcid = "2"; + level.usedids["delta"] = []; + level.usedids["delta"][0] = spawnstruct(); + level.usedids["delta"][0].count = 0; + level.usedids["delta"][0].npcid = "0"; + level.usedids["delta"][1] = spawnstruct(); + level.usedids["delta"][1].count = 0; + level.usedids["delta"][1].npcid = "1"; + level.usedids["delta"][2] = spawnstruct(); + level.usedids["delta"][2].count = 0; + level.usedids["delta"][2].npcid = "2"; + level.usedids["french"] = []; + level.usedids["french"][0] = spawnstruct(); + level.usedids["french"][0].count = 0; + level.usedids["french"][0].npcid = "0"; + level.usedids["african"] = []; + level.usedids["african"][0] = spawnstruct(); + level.usedids["african"][0].count = 0; + level.usedids["african"][0].npcid = "0"; + level.usedids["african"][1] = spawnstruct(); + level.usedids["african"][1].count = 0; + level.usedids["african"][1].npcid = "1"; + level.usedids["african"][2] = spawnstruct(); + level.usedids["african"][2].count = 0; + level.usedids["african"][2].npcid = "2"; + level.usedids["czech"] = []; + level.usedids["czech"][0] = spawnstruct(); + level.usedids["czech"][0].count = 0; + level.usedids["czech"][0].npcid = "0"; + level.usedids["czech"][1] = spawnstruct(); + level.usedids["czech"][1].count = 0; + level.usedids["czech"][1].npcid = "1"; + level.usedids["czech"][2] = spawnstruct(); + level.usedids["czech"][2].count = 0; + level.usedids["czech"][2].npcid = "2"; + level.usedids["pmc"] = []; + level.usedids["pmc"][0] = spawnstruct(); + level.usedids["pmc"][0].count = 0; + level.usedids["pmc"][0].npcid = "0"; + level.usedids["pmc"][1] = spawnstruct(); + level.usedids["pmc"][1].count = 0; + level.usedids["pmc"][1].npcid = "1"; + level.usedids["pmc"][2] = spawnstruct(); + level.usedids["pmc"][2].count = 0; + level.usedids["pmc"][2].npcid = "2"; + init_flavorbursts(); + if(!isdefined(level.friendlyfire_warnings)) + { + level.friendlyfire_warnings = 0; + } + + anim.eventtypeminwait = []; + level.eventtypeminwait["threat"] = []; + level.eventtypeminwait["response"] = []; + level.eventtypeminwait["reaction"] = []; + level.eventtypeminwait["order"] = []; + level.eventtypeminwait["inform"] = []; + level.eventtypeminwait["custom"] = []; + level.eventtypeminwait["direction"] = []; + if(isdefined(level._stealth)) + { + level.eventactionminwait["threat"]["self"] = 20000; + level.eventactionminwait["threat"]["squad"] = 30000; + } + else + { + level.eventactionminwait["threat"]["self"] = 12500; + level.eventactionminwait["threat"]["squad"] = 7500; + } + + level.eventactionminwait["threat"]["location_repeat"] = 5000; + level.eventactionminwait["response"]["self"] = 1000; + level.eventactionminwait["response"]["squad"] = 1000; + level.eventactionminwait["reaction"]["self"] = 1000; + level.eventactionminwait["reaction"]["squad"] = 1000; + level.eventactionminwait["order"]["self"] = 8000; + level.eventactionminwait["order"]["squad"] = 10000; + level.eventactionminwait["inform"]["self"] = 6000; + level.eventactionminwait["inform"]["squad"] = 8000; + level.eventactionminwait["custom"]["self"] = 0; + level.eventactionminwait["custom"]["squad"] = 0; + level.eventtypeminwait["playername"] = -15536; + level.eventtypeminwait["reaction"]["casualty"] = 14000; + level.eventtypeminwait["reaction"]["friendlyfire"] = 5000; + level.eventtypeminwait["reaction"]["taunt"] = 30000; + level.eventtypeminwait["inform"]["reloading"] = 20000; + level.eventtypeminwait["inform"]["killfirm"] = 15000; + level.eventpriority["threat"]["infantry"] = 0.5; + level.eventpriority["threat"]["vehicle"] = 0.7; + level.eventpriority["response"]["ack"] = 0.9; + level.eventpriority["response"]["exposed"] = 0.8; + level.eventpriority["response"]["callout"] = 0.9; + level.eventpriority["response"]["echo"] = 0.9; + level.eventpriority["reaction"]["casualty"] = 0.5; + level.eventpriority["reaction"]["friendlyfire"] = 1; + level.eventpriority["reaction"]["taunt"] = 0.9; + level.eventpriority["order"]["action"] = 0.3; + level.eventpriority["order"]["move"] = 0.3; + level.eventpriority["order"]["displace"] = 0.5; + level.eventpriority["inform"]["attack"] = 0.9; + level.eventpriority["inform"]["incoming"] = 0.9; + level.eventpriority["inform"]["reloading"] = 0.2; + level.eventpriority["inform"]["suppressed"] = 0.2; + level.eventpriority["inform"]["killfirm"] = 0.7; + level.eventpriority["custom"]["generic"] = 1; + level.eventduration["threat"]["infantry"] = 1000; + level.eventduration["threat"]["vehicle"] = 1000; + level.eventduration["response"]["exposed"] = 2000; + level.eventduration["response"]["callout"] = 2000; + level.eventduration["response"]["echo"] = 2000; + level.eventduration["response"]["ack"] = 1750; + level.eventduration["reaction"]["casualty"] = 2000; + level.eventduration["reaction"]["friendlyfire"] = 1000; + level.eventduration["reaction"]["taunt"] = 2000; + level.eventduration["order"]["action"] = 3000; + level.eventduration["order"]["move"] = 3000; + level.eventduration["order"]["displace"] = 3000; + level.eventduration["inform"]["attack"] = 1000; + level.eventduration["inform"]["incoming"] = 1500; + level.eventduration["inform"]["reloading"] = 1000; + level.eventduration["inform"]["suppressed"] = 2000; + level.eventduration["inform"]["killfirm"] = 2000; + level.eventduration["custom"]["generic"] = 1000; + level.eventchance["response"]["exposed"] = 75; + level.eventchance["response"]["reload"] = 65; + level.eventchance["response"]["callout"] = 75; + level.eventchance["response"]["callout_negative"] = 20; + level.eventchance["response"]["order"] = 40; + level.eventchance["moveEvent"]["coverme"] = 70; + level.eventchance["moveEvent"]["ordertoplayer"] = 10; + anim.fbt_desireddistmax = 620; + anim.fbt_waitmin = 12; + anim.var_75F = 24; + anim.fbt_linebreakmin = 2; + anim.fbt_linebreakmax = 5; + anim.moveorigin = spawn("script_origin",(0,0,0)); + if(!isdefined(level.bcs_maxtalkingdistfromplayer)) + { + level.bcs_maxtalkingdistfromplayer = 1500; + } + + if(!isdefined(level.bcs_maxthreatdistfromplayer)) + { + level.bcs_maxthreatdistfromplayer = 2500; + } + + level.heightforhighcallout = 96; + level.mindistancecallout = 8; + level.maxdistancecallout = 45; + maps\_bcs_location_trigs::bcs_location_trigs_init(); + anim.locationlastcallouttimes = []; + anim.var_768 = 4000; + anim.bcs_threatresettime = 3000; + level.var_678[level.var_678.size] = ::func_06C4; + level.squadcreatestrings[level.squadcreatestrings.size] = "::init_squadBattleChatter"; + foreach(var_01 in level.teams) + { + level.isteamspeaking[var_01] = 0; + level.var_76C[var_01]["threat"] = 0; + level.var_76C[var_01]["order"] = 0; + level.var_76C[var_01]["reaction"] = 0; + level.var_76C[var_01]["response"] = 0; + level.var_76C[var_01]["inform"] = 0; + level.var_76C[var_01]["custom"] = 0; + } + + bcs_setup_chatter_toggle_array(); + if(!isdefined(level.flavorburstvoices)) + { + anim.flavorburstvoices = []; + level.flavorburstvoices["american"] = 1; + level.flavorburstvoices["delta"] = 0; + level.flavorburstvoices["french"] = 0; + level.flavorburstvoices["czech"] = 0; + level.flavorburstvoices["pmc"] = 0; + level.flavorburstvoices["african"] = 0; + level.flavorburstvoices["shadowcompany"] = 1; + level.flavorburstvoices["seal"] = 0; + level.flavorburstvoices["taskforce"] = 0; + level.flavorburstvoices["secretservice"] = 0; + level.flavorburstvoices["british"] = 0; + } + + bcs_setup_flavorburst_toggle_array(); + anim.lastteamspeaktime = []; + anim.lastnamesaid = []; + anim.lastnamesaidtime = []; + foreach(var_01 in level.teams) + { + level.lastteamspeaktime[var_01] = --15536; + level.lastnamesaid[var_01] = "none"; + level.lastnamesaidtime[var_01] = -100000; + } + + anim.lastnamesaidtimeout = 120000; + for(var_05 = 0;var_05 < level.squadindex.size;var_05++) + { + if(isdefined(level.squadindex[var_05].chatinitialized) && level.squadindex[var_05].chatinitialized) + { + continue; + } + + level.squadindex[var_05] func_06C4(); + } + + anim.threatcallouts = []; + level.threatcallouts["rpg"] = 100; + level.threatcallouts["exposed"] = 25; + level.threatcallouts["player_distance"] = 25; + level.threatcallouts["player_obvious"] = 25; + level.threatcallouts["player_contact_clock"] = 25; + level.threatcallouts["player_target_clock"] = 25; + level.threatcallouts["player_target_clock_high"] = 25; + level.threatcallouts["player_cardinal"] = 20; + level.threatcallouts["ai_distance"] = 25; + level.threatcallouts["ai_obvious"] = 25; + level.threatcallouts["ai_contact_clock"] = 20; + level.threatcallouts["ai_target_clock"] = 20; + level.threatcallouts["ai_target_clock_high"] = 75; + level.threatcallouts["ai_cardinal"] = 10; + level.threatcallouts["player_location"] = 95; + level.threatcallouts["ai_location"] = 100; + level.threatcallouts["generic_location"] = 90; + anim.lastteamthreatcallout = []; + anim.lastteamthreatcallouttime = []; + foreach(var_01 in level.teams) + { + level.lastteamthreatcallout[var_01] = undefined; + level.lastteamthreatcallouttime[var_01] = undefined; + } + + anim.teamthreatcalloutlimittimeout = 120000; + level notify("battlechatter initialized"); + anim notify("battlechatter initialized"); +} + +//Function Number: 2 +bcs_setup_teams_array() +{ + if(!isdefined(level.teams)) + { + anim.teams = []; + level.teams[level.teams.size] = "axis"; + level.teams[level.teams.size] = "allies"; + level.teams[level.teams.size] = "team3"; + level.teams[level.teams.size] = "neutral"; + } +} + +//Function Number: 3 +bcs_setup_countryids() +{ + if(!isdefined(level.countryids)) + { + level.countryids["british"] = "UK"; + level.countryids["american"] = "US"; + level.countryids["seal"] = "NS"; + level.countryids["taskforce"] = "TF"; + level.countryids["secretservice"] = "SS"; + level.countryids["russian"] = "RU"; + level.countryids["arab"] = "AB"; + level.countryids["portuguese"] = "PG"; + level.countryids["shadowcompany"] = "SC"; + level.countryids["delta"] = "DF"; + level.countryids["french"] = "FR"; + level.countryids["african"] = "AF"; + level.countryids["czech"] = "CZ"; + level.countryids["pmc"] = "PC"; + } +} + +//Function Number: 4 +bcs_setup_chatter_toggle_array() +{ + bcs_setup_teams_array(); + if(!isdefined(level.battlechatter)) + { + level.battlechatter = []; + foreach(var_01 in level.teams) + { + maps\_utility::set_battlechatter_variable(var_01,1); + } + } +} + +//Function Number: 5 +bcs_setup_flavorburst_toggle_array() +{ + bcs_setup_teams_array(); + if(!isdefined(level.flavorbursts)) + { + level.flavorbursts = []; + foreach(var_01 in level.teams) + { + level.flavorbursts[var_01] = 1; + } + } +} + +//Function Number: 6 +init_flavorbursts() +{ + level.flavorbursts["american"] = []; + var_00 = 41; + var_01 = []; + if(level.script == "roadkill" || level.script == "trainer") + { + } + + var_02 = 0; + while(var_02 < var_01) + { + if(var_41.size) + { + var_03 = 0; + foreach(var_05 in var_41) + { + if(var_05 == var_02) + { + var_03 = 1; + break; + } + } + + if(var_03) + { + continue; + } + } + + level.flavorbursts["american"][var_02] = maps\_utility::string(var_02 + 1); + var_02++ = var_41[var_41.size]; + } + + level.flavorbursts["shadowcompany"] = []; + var_01 = 9; + for(var_02 = 1;var_02 <= var_01;var_02++ = 38) + { + level.flavorbursts["shadowcompany"][var_02] = maps\_utility::string(var_02 + 1); + } + + anim.flavorburstsused = []; +} + +//Function Number: 7 +shutdown_battlechatter() +{ + anim.countryids = undefined; + anim.eventtypeminwait = undefined; + anim.eventactionminwait = undefined; + anim.eventtypeminwait = undefined; + anim.eventpriority = undefined; + anim.eventduration = undefined; + anim.moveorigin = undefined; + anim.var_768 = undefined; + anim.bcs_threatresettime = undefined; + anim.locationlastcallouttimes = undefined; + anim.usedids = undefined; + anim.flavorburstsused = undefined; + anim.lastteamthreatcallout = undefined; + anim.lastteamthreatcallouttime = undefined; + anim.lastnamesaidtimeout = undefined; + anim.lastnamesaid = undefined; + anim.lastnamesaidtime = undefined; + anim.chatinitialized = 0; + level.player.chatinitialized = 0; + level.battlechatter = undefined; + for(var_00 = 0;var_00 < level.var_678.size;var_00++) + { + if(level.squadcreatestrings[var_00] != "::init_squadBattleChatter") + { + continue; + } + + if(var_00 != level.var_678.size - 1) + { + level.var_678[var_00] = level.var_678[level.var_678.size - 1]; + level.squadcreatestrings[var_00] = level.squadcreatestrings[level.squadcreatestrings.size - 1]; + } + + level.var_678[level.var_678.size - 1] = undefined; + level.squadcreatestrings[level.squadcreatestrings.size - 1] = undefined; + } + + level notify("battlechatter disabled"); + anim notify("battlechatter disabled"); +} + +//Function Number: 8 +func_06C4() +{ + var_00 = self; + var_00.numspeakers = 0; + var_00.var_780 = 1; + var_00.nextsaytime = gettime() + 50; + var_00.nextsaytimes["threat"] = gettime() + 50; + var_00.nextsaytimes["order"] = gettime() + 50; + var_00.nextsaytimes["reaction"] = gettime() + 50; + var_00.nextsaytimes["response"] = gettime() + 50; + var_00.nextsaytimes["inform"] = gettime() + 50; + var_00.nextsaytimes["custom"] = gettime() + 50; + var_00.nexttypesaytimes["threat"] = []; + var_00.nexttypesaytimes["order"] = []; + var_00.nexttypesaytimes["reaction"] = []; + var_00.nexttypesaytimes["response"] = []; + var_00.nexttypesaytimes["inform"] = []; + var_00.nexttypesaytimes["custom"] = []; + var_00.ismembersaying["threat"] = 0; + var_00.ismembersaying["order"] = 0; + var_00.ismembersaying["reaction"] = 0; + var_00.ismembersaying["response"] = 0; + var_00.ismembersaying["inform"] = 0; + var_00.ismembersaying["custom"] = 0; + var_00.lastdirection = ""; + var_00.memberaddfuncs[var_00.memberaddfuncs.size] = ::animscripts/battlechatter_ai::addtosystem; + var_00.var_688[var_00.var_688.size] = "::addToSystem"; + var_00.var_689[var_00.var_689.size] = ::animscripts/battlechatter_ai::removefromsystem; + var_00.memberremovestrings[var_00.memberremovestrings.size] = "::removeFromSystem"; + var_00.squadupdatefuncs[var_00.squadupdatefuncs.size] = ::initcontact; + var_00.squadupdatestrings[var_00.squadupdatestrings.size] = "::initContact"; + var_00.fbt_firstburst = 1; + var_00.fbt_lastbursterid = undefined; + for(var_01 = 0;var_01 < level.squadindex.size;var_01++) + { + var_00 thread initcontact(level.squadindex[var_01].var_67E); + } + + var_00 thread animscripts/battlechatter_ai::squadthreatwaiter(); + var_00 thread animscripts/battlechatter_ai::func_700(); + var_00 thread squadflavorbursttransmissions(); + var_00.chatinitialized = 1; + var_00 notify("squad chat initialized"); +} + +//Function Number: 9 +shutdown_squadbattlechatter() +{ + var_00 = self; + var_00.numspeakers = undefined; + var_00.var_780 = undefined; + var_00.nextsaytime = undefined; + var_00.nextsaytimes = undefined; + var_00.nexttypesaytimes = undefined; + var_00.ismembersaying = undefined; + var_00.fbt_firstburst = undefined; + var_00.fbt_lastbursterid = undefined; + for(var_01 = 0;var_01 < var_00.memberaddfuncs.size;var_01++) + { + if(var_00.var_688[var_01] != "::addToSystem") + { + continue; + } + + if(var_01 != var_00.memberaddfuncs.size - 1) + { + var_00.memberaddfuncs[var_01] = var_00.memberaddfuncs[var_00.memberaddfuncs.size - 1]; + var_00.var_688[var_01] = var_00.var_688[var_00.var_688.size - 1]; + } + + var_00.memberaddfuncs[var_00.memberaddfuncs.size - 1] = undefined; + var_00.var_688[var_00.var_688.size - 1] = undefined; + } + + for(var_01 = 0;var_01 < var_00.var_689.size;var_01++) + { + if(var_00.memberremovestrings[var_01] != "::removeFromSystem") + { + continue; + } + + if(var_01 != var_00.var_689.size - 1) + { + var_00.var_689[var_01] = var_00.var_689[var_00.var_689.size - 1]; + var_00.memberremovestrings[var_01] = var_00.memberremovestrings[var_00.memberremovestrings.size - 1]; + } + + var_00.var_689[var_00.var_689.size - 1] = undefined; + var_00.memberremovestrings[var_00.memberremovestrings.size - 1] = undefined; + } + + for(var_01 = 0;var_01 < var_00.squadupdatefuncs.size;var_01++) + { + if(var_00.squadupdatestrings[var_01] != "::initContact") + { + continue; + } + + if(var_01 != var_00.squadupdatefuncs.size - 1) + { + var_00.squadupdatefuncs[var_01] = var_00.squadupdatefuncs[var_00.squadupdatefuncs.size - 1]; + var_00.squadupdatestrings[var_01] = var_00.squadupdatestrings[var_00.squadupdatestrings.size - 1]; + } + + var_00.squadupdatefuncs[var_00.squadupdatefuncs.size - 1] = undefined; + var_00.squadupdatestrings[var_00.squadupdatestrings.size - 1] = undefined; + } + + for(var_01 = 0;var_01 < level.squadindex.size;var_01++) + { + var_00 shutdowncontact(level.squadindex[var_01].var_67E); + } + + var_00.chatinitialized = 0; +} + +//Function Number: 10 +bcsenabled() +{ + return level.chatinitialized; +} + +//Function Number: 11 +bcsdebugwaiter() +{ + var_00 = getdvar("bcs_enable","on"); + for(;;) + { + var_01 = getdvar("bcs_enable","on"); + if(var_01 != var_00) + { + switch(var_01) + { + case "on": + if(!level.chatinitialized) + { + enablebattlechatter(); + } + break; + + case "off": + if(level.chatinitialized) + { + disablebattlechatter(); + } + break; + } + + var_00 = var_01; + } + + wait 1; + } +} + +//Function Number: 12 +enablebattlechatter() +{ + init_battlechatter(); + level.player thread animscripts/battlechatter_ai::addtosystem(); + var_00 = getaiarray(); + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + var_00[var_01] animscripts/battlechatter_ai::addtosystem(); + } +} + +//Function Number: 13 +disablebattlechatter() +{ + shutdown_battlechatter(); + var_00 = getaiarray(); + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + if(isdefined(var_00[var_01].squad) && var_00[var_01].squad.chatinitialized) + { + var_00[var_01].squad shutdown_squadbattlechatter(); + } + + var_00[var_01] animscripts/battlechatter_ai::removefromsystem(); + } +} + +//Function Number: 14 +setplayerbcnameid(param_00,param_01) +{ + if(isdefined(param_00) && isdefined(param_01)) + { + level.player.bcnameid = param_00; + level.player.var_78C = param_01; + return; + } + + while(!isdefined(level.campaign)) + { + wait 0.1; + } + + var_02 = level.campaign; + var_03 = level.playernameids[var_02]; + var_04 = level.countryids[var_02]; + if(isdefined(var_03)) + { + level.player.bcnameid = var_03; + } + + if(isdefined(var_04)) + { + level.player.var_78C = var_04; + } +} + +//Function Number: 15 +playbattlechatter() +{ + if(!isalive(self)) + { + return; + } + + if(!bcsenabled()) + { + return; + } + + if(self._animactive > 0) + { + return; + } + + if(isdefined(self.isspeaking) && self.isspeaking) + { + return; + } + + if(self.team == "allies" && isdefined(level.scripteddialoguestarttime)) + { + if(level.scripteddialoguestarttime + level.var_768 > gettime()) + { + return; + } + } + + if(friendlyfire_warning()) + { + return; + } + + if(!isdefined(self.battlechatter) || !self.battlechatter) + { + return; + } + + if(self.team == "allies" && getdvarint("bcs_forceEnglish",0)) + { + return; + } + + if(level.isteamspeaking[self.team]) + { + return; + } + + self endon("death"); + var_00 = gethighestpriorityevent(); + if(!isdefined(var_00)) + { + return; + } + + switch(var_00) + { + case "custom": + thread playcustomevent(); + break; + + case "response": + thread playresponseevent(); + break; + + case "order": + thread playorderevent(); + break; + + case "threat": + thread playthreatevent(); + break; + + case "reaction": + thread playreactionevent(); + break; + + case "inform": + thread playinformevent(); + break; + } +} + +//Function Number: 16 +playthreatevent() +{ + self endon("death"); + self endon("removed from battleChatter"); + self endon("cancel speaking"); + self.curevent = self.chatqueue["threat"]; + var_00 = self.chatqueue["threat"].threat; + if(!isalive(var_00)) + { + return; + } + + if(threatwasalreadycalledout(var_00) && !isplayer(var_00)) + { + return; + } + + anim thread lockaction(self,"threat"); + var_01 = 0; + switch(self.chatqueue["threat"].eventtype) + { + case "infantry": + if(isplayer(var_00) || !isdefined(var_00 getturret())) + { + var_01 = threatinfantry(var_00); + } + else + { + } + break; + + case "dog": + var_01 = threatdog(var_00); + break; + + case "vehicle": + break; + } + + self notify("done speaking"); + if(!var_01) + { + return; + } + + if(!isalive(var_00)) + { + return; + } + + var_00.calledout[self.squad.var_67E] = spawnstruct(); + var_00.calledout[self.squad.var_67E].spotter = self; + var_00.calledout[self.squad.var_67E].threattype = self.chatqueue["threat"].eventtype; + var_00.calledout[self.squad.var_67E].expiretime = gettime() + level.bcs_threatresettime; + if(isdefined(var_00.squad)) + { + self.squad.squadlist[var_00.squad.var_67E].calledout = 1; + } +} + +//Function Number: 17 +threatwasalreadycalledout(param_00) +{ + if(isdefined(param_00.calledout) && isdefined(param_00.calledout[self.squad.var_67E])) + { + if(param_00.calledout[self.squad.var_67E].expiretime < gettime()) + { + return 1; + } + } + + return 0; +} + +//Function Number: 18 +threatinfantry(param_00,param_01) +{ + self endon("cancel speaking"); + var_02 = createchatphrase(); + var_02.master = 1; + var_02.threatent = param_00; + var_03 = getthreatinfantrycallouttype(param_00); + if(!isdefined(var_03) || isdefined(var_03) && !isdefined(var_03.type)) + { + return 0; + } + + switch(var_03.type) + { + case "rpg": + var_02 threatinfantryrpg(param_00); + break; + + case "exposed": + var_04 = doexposedcalloutresponse(var_03.responder); + if(var_04 && cansayname(var_03.responder)) + { + var_02 func_0738(var_03.responder.bcname); + var_02.looktarget = var_03.responder; + } + + var_02 threatinfantryexposed(param_00); + if(var_04) + { + if(randomint(100) < level.eventchance["response"]["callout_negative"]) + { + var_03.responder animscripts/battlechatter_ai::addresponseevent("callout","neg",self,0.9); + } + else + { + var_03.responder animscripts/battlechatter_ai::addresponseevent("exposed","acquired",self,0.9); + } + } + break; + + case "player_obvious": + var_02 addplayernamealias(); + var_02 addthreatobviousalias(); + break; + + case "player_distance": + var_05 = getdistanceyardsnormalized(level.player.origin,param_00.origin); + var_02 addplayernamealias(); + var_02 func_07FA(var_05); + break; + + case "player_contact_clock": + var_02 addplayernamealias(); + var_02 func_0800("contactclock",var_03.playerclockdirection); + break; + + case "player_target_clock": + var_02 addplayernamealias(); + var_02 func_0800("targetclock",var_03.playerclockdirection); + break; + + case "player_target_clock_high": + var_02 addplayernamealias(); + var_06 = getdegreeselevation(level.player.origin,param_00.origin); + if(var_06 >= 20 && var_06 <= 50) + { + var_02 func_0800("targetclock",var_03.playerclockdirection); + var_02 addthreatelevationalias(var_06); + } + else + { + var_02 func_0800("targetclock",var_03.playerclockdirection + "_high"); + } + break; + + case "player_cardinal": + var_02 addplayernamealias(); + var_07 = getdirectioncompass(level.player.origin,param_00.origin); + var_08 = normalizecompassdirection(var_07); + if(var_08 == "impossible") + { + return 0; + } + + var_02 func_0800("cardinal",var_08); + break; + + case "ai_obvious": + if(isdefined(var_03.responder) && cansayname(var_03.responder)) + { + var_02 func_0738(var_03.responder.bcname); + var_02.looktarget = var_03.responder; + } + + var_02 addthreatobviousalias(); + var_02 addcalloutresponseevent(self,var_03,param_00); + break; + + case "ai_distance": + var_09 = self; + if(self.team == "allies") + { + var_09 = level.player; + } + else if(isdefined(var_03.responder) && randomint(100) < level.eventchance["response"]["callout"]) + { + var_09 = var_03.responder; + } + + var_05 = getdistanceyardsnormalized(var_09.origin,param_00.origin); + var_02 func_07FA(var_05); + var_02 addcalloutresponseevent(self,var_03,param_00); + break; + + case "ai_contact_clock": + var_09 = self; + if(self.team == "allies") + { + var_09 = level.player; + } + else if(isdefined(var_03.responder) && randomint(100) < level.eventchance["response"]["callout"]) + { + var_09 = var_03.responder; + } + + var_0A = getrelativeangles(var_09); + var_0B = getdirectionfacingclock(var_0A,var_09.origin,param_00.origin); + var_02 func_0800("contactclock",var_0B); + var_02 addcalloutresponseevent(self,var_03,param_00); + break; + + case "ai_target_clock": + var_09 = self; + if(self.team == "allies") + { + var_09 = level.player; + } + else if(isdefined(var_03.responder) && randomint(100) < level.eventchance["response"]["callout"]) + { + var_09 = var_03.responder; + } + + var_0A = getrelativeangles(var_09); + var_0B = getdirectionfacingclock(var_0A,var_09.origin,param_00.origin); + var_02 func_0800("targetclock",var_0B); + var_02 addcalloutresponseevent(self,var_03,param_00); + break; + + case "ai_target_clock_high": + var_09 = self; + if(self.team == "allies") + { + var_09 = level.player; + } + else if(isdefined(var_03.responder) && randomint(100) < level.eventchance["response"]["callout"]) + { + var_09 = var_03.responder; + } + + var_0A = getrelativeangles(var_09); + var_0B = getdirectionfacingclock(var_0A,var_09.origin,param_00.origin); + var_06 = getdegreeselevation(var_09.origin,param_00.origin); + if(var_06 >= 20 && var_06 <= 50) + { + var_02 func_0800("targetclock",var_0B); + var_02 addthreatelevationalias(var_06); + } + else + { + var_02 func_0800("targetclock",var_0B + "_high"); + } + + var_02 addcalloutresponseevent(self,var_03,param_00); + break; + + case "ai_cardinal": + var_09 = self; + if(self.team == "allies") + { + var_09 = level.player; + } + + var_07 = getdirectioncompass(var_09.origin,param_00.origin); + var_08 = normalizecompassdirection(var_07); + if(var_08 == "impossible") + { + return 0; + } + + var_02 func_0800("cardinal",var_08); + break; + + case "generic_location": + var_0C = var_02 threatinfantry_docalloutlocation(var_03); + if(!var_0C) + { + return 0; + } + break; + + case "player_location": + var_02 addplayernamealias(); + var_0C = var_02 threatinfantry_docalloutlocation(var_03); + if(!var_0C) + { + return 0; + } + break; + + case "ai_location": + if(cansayname(var_03.responder)) + { + var_02 func_0738(var_03.responder.bcname); + var_02.looktarget = var_03.responder; + } + + var_0C = var_02 threatinfantry_docalloutlocation(var_03); + if(!var_0C) + { + return 0; + } + + var_0D = var_02.soundaliases.size - 1; + var_0E = var_02.soundaliases[var_0D]; + if(iscallouttypereport(var_0E)) + { + var_03.responder animscripts/battlechatter_ai::addresponseevent("callout","echo",self,0.9,var_0E); + } + else if(iscallouttypeqa(var_0E,self)) + { + var_03.responder animscripts/battlechatter_ai::addresponseevent("callout","QA",self,0.9,var_0E,var_03.location); + } + else if(randomint(100) < level.eventchance["response"]["callout_negative"]) + { + var_03.responder animscripts/battlechatter_ai::addresponseevent("callout","neg",self,0.9); + } + else + { + var_03.responder animscripts/battlechatter_ai::addresponseevent("exposed","acquired",self,0.9); + } + break; + } + + setlastcallouttype(var_03.type); + playphrase(var_02); + return 1; +} + +//Function Number: 19 +doexposedcalloutresponse(param_00) +{ + if(!isdefined(param_00)) + { + return 0; + } + + if(param_00.countryid != "US" && param_00.countryid != "NS" && param_00.countryid != "TF") + { + return 0; + } + + if(randomint(100) > level.eventchance["response"]["exposed"]) + { + return 0; + } + + return 1; +} + +//Function Number: 20 +threatinfantry_docalloutlocation(param_00) +{ + var_01 = func_0803(param_00.location); + return var_01; +} + +//Function Number: 21 +addcalloutresponseevent(param_00,param_01,param_02) +{ + if(!isdefined(param_01.responder)) + { + return; + } + + if(randomint(100) > level.eventchance["response"]["callout"]) + { + return; + } + + var_03 = "affirm"; + if(!param_01.responder cansee(param_02) && randomint(100) < level.eventchance["response"]["callout_negative"]) + { + var_03 = "neg"; + } + + param_01.responder animscripts/battlechatter_ai::addresponseevent("callout",var_03,param_00,0.9); +} + +//Function Number: 22 +getthreatinfantrycallouttype(param_00) +{ + var_01 = param_00 getlocation(); + var_02 = getdirectionfacingclock(self.angles,self.origin,param_00.origin); + var_03 = getresponder(64,1024,"response"); + var_04 = undefined; + if(isdefined(var_03)) + { + var_04 = getdirectionfacingclock(var_03.angles,var_03.origin,param_00.origin); + } + + var_05 = getdirectionfacingclock(level.player.angles,level.player.origin,param_00.origin); + if(self.team == "allies") + { + var_06 = var_05; + var_07 = level.player; + } + else if(isdefined(var_05)) + { + var_06 = var_06; + var_07 = var_04; + } + else + { + var_06 = var_04; + var_07 = self; + } + + var_08 = getdistanceyards(var_07.origin,param_00.origin); + self.possiblethreatcallouts = []; + if(!isplayer(param_00) && param_00 animscripts/utility::usingrocketlauncher()) + { + addpossiblethreatcallout("rpg"); + } + + if(param_00 isexposed()) + { + addpossiblethreatcallout("exposed"); + } + + if(self.team == "allies") + { + var_09 = 0; + if(param_00.origin[2] - var_07.origin[2] >= level.heightforhighcallout) + { + if(addpossiblethreatcallout("player_target_clock_high")) + { + var_09 = 1; + } + } + + if(!var_09) + { + if(var_06 == "12") + { + addpossiblethreatcallout("player_obvious"); + if(var_08 > level.mindistancecallout && var_08 < level.maxdistancecallout) + { + addpossiblethreatcallout("player_distance"); + } + } + + if(cansayplayername() && var_06 != "12") + { + addpossiblethreatcallout("player_contact_clock"); + addpossiblethreatcallout("player_target_clock"); + addpossiblethreatcallout("player_cardinal"); + } + } + } + + var_09 = 0; + if(param_00.origin[2] - var_07.origin[2] >= level.heightforhighcallout) + { + if(addpossiblethreatcallout("ai_target_clock_high")) + { + var_09 = 1; + } + } + + if(!var_09) + { + if(var_06 == "12") + { + addpossiblethreatcallout("ai_distance"); + if(var_08 > level.mindistancecallout && var_08 < level.maxdistancecallout) + { + addpossiblethreatcallout("ai_obvious"); + } + } + + addpossiblethreatcallout("ai_contact_clock"); + addpossiblethreatcallout("ai_target_clock"); + addpossiblethreatcallout("ai_cardinal"); + } + + if(isdefined(var_01)) + { + var_0A = var_01 getcannedresponse(self); + if(isdefined(var_0A)) + { + if(isdefined(var_03)) + { + addpossiblethreatcallout("ai_location"); + } + else + { + if(cansayplayername()) + { + addpossiblethreatcallout("player_location"); + } + + addpossiblethreatcallout("generic_location"); + } + } + else + { + if(isdefined(var_03)) + { + addpossiblethreatcallout("ai_location"); + } + + if(cansayplayername()) + { + addpossiblethreatcallout("player_location"); + } + + addpossiblethreatcallout("generic_location"); + } + } + + if(!self.possiblethreatcallouts.size) + { + return undefined; + } + + var_0C = getweightedchanceroll(self.possiblethreatcallouts,level.threatcallouts); + var_0D = spawnstruct(); + var_0D.type = var_0C; + var_0D.responder = var_03; + var_0D.responderclockdirection = var_04; + var_0D.playerclockdirection = var_05; + if(isdefined(var_01)) + { + var_0D.location = var_01; + } + + return var_0D; +} + +//Function Number: 23 +getcannedresponse(param_00) +{ + var_01 = undefined; + var_02 = self.locationaliases; + foreach(var_04 in var_02) + { + if(iscallouttypeqa(var_04,param_00) && !isdefined(self.qafinished)) + { + var_01 = var_04; + break; + } + + if(iscallouttypereport(var_04)) + { + var_01 = var_04; + } + } + + return var_01; +} + +//Function Number: 24 +iscallouttypereport(param_00) +{ + return issubstr(param_00,"_report"); +} + +//Function Number: 25 +iscallouttypeqa(param_00,param_01) +{ + if(issubstr(param_00,"_qa") && soundexists(param_00)) + { + return 1; + } + + var_02 = param_01 getqacalloutalias(param_00,0); + if(soundexists(var_02)) + { + return 1; + } + + return 0; +} + +//Function Number: 26 +getqacalloutalias(param_00,param_01) +{ + var_02 = self.countryid + "_" + self.npcid + "_co_"; + var_02 = var_02 + param_00; + var_02 = var_02 + "_qa" + param_01; + return var_02; +} + +//Function Number: 27 +addallowedthreatcallout(param_00) +{ + self.allowedcallouts[self.allowedcallouts.size] = param_00; +} + +//Function Number: 28 +addpossiblethreatcallout(param_00) +{ + var_01 = 0; + foreach(var_03 in self.allowedcallouts) + { + if(var_03 == param_00) + { + if(!callouttypewillrepeat(param_00)) + { + var_01 = 1; + } + + break; + } + } + + if(!var_01) + { + return var_01; + } + + self.possiblethreatcallouts[self.possiblethreatcallouts.size] = param_00; + return var_01; +} + +//Function Number: 29 +callouttypewillrepeat(param_00) +{ + if(!isdefined(level.lastteamthreatcallout[self.team])) + { + return 0; + } + + if(!isdefined(level.lastteamthreatcallouttime[self.team])) + { + return 0; + } + + var_01 = level.lastteamthreatcallout[self.team]; + var_02 = level.lastteamthreatcallouttime[self.team]; + var_03 = level.teamthreatcalloutlimittimeout; + if(param_00 == var_01 && gettime() - var_02 < var_03) + { + return 1; + } + + return 0; +} + +//Function Number: 30 +setlastcallouttype(param_00) +{ + level.lastteamthreatcallout[self.team] = param_00; + level.lastteamthreatcallouttime[self.team] = gettime(); +} + +//Function Number: 31 +getweightedchanceroll(param_00,param_01) +{ + var_02 = undefined; + var_03 = -1; + foreach(var_05 in param_00) + { + if(param_01[var_05] <= 0) + { + continue; + } + + var_06 = randomint(param_01[var_05]); + if(isdefined(var_02) && param_01[var_02] >= 100) + { + if(param_01[var_05] < 100) + { + continue; + } + + continue; + } + + if(param_01[var_05] >= 100) + { + var_02 = var_05; + var_03 = var_06; + continue; + } + + if(var_06 > var_03) + { + var_02 = var_05; + var_03 = var_06; + } + } + + return var_02; +} + +//Function Number: 32 +threatdog(param_00,param_01) +{ + self endon("cancel speaking"); + var_02 = createchatphrase(); + var_02.master = 1; + var_02.threatent = param_00; + var_02 addthreatalias("dog","generic"); + playphrase(var_02); + return 1; +} + +//Function Number: 33 +threatinfantryexposed(param_00) +{ + var_01 = []; + var_01 = maps\_utility::array_add(var_01,"open"); + var_01 = maps\_utility::array_add(var_01,"breaking"); + if(self.owner.team == "allies" && self.owner.countryid != "RU") + { + var_01 = maps\_utility::array_add(var_01,"movement"); + } + + var_02 = var_01[randomint(var_01.size)]; + addthreatexposedalias(var_02); +} + +//Function Number: 34 +threatinfantryrpg(param_00) +{ + addthreatalias("rpg"); +} + +//Function Number: 35 +playreactionevent() +{ + self endon("death"); + self endon("removed from battleChatter"); + self.curevent = self.chatqueue["reaction"]; + var_00 = self.chatqueue["reaction"].reactto; + var_01 = self.chatqueue["reaction"].var_6F8; + anim thread lockaction(self,"reaction"); + switch(self.chatqueue["reaction"].eventtype) + { + case "casualty": + reactioncasualty(var_00,var_01); + break; + + case "taunt": + reactiontaunt(var_00,var_01); + break; + + case "friendlyfire": + reactionfriendlyfire(var_00,var_01); + break; + } + + self notify("done speaking"); +} + +//Function Number: 36 +reactioncasualty(param_00,param_01) +{ + self endon("death"); + self endon("removed from battleChatter"); + var_02 = createchatphrase(); + var_02 addreactionalias("casualty","generic"); + playphrase(var_02); +} + +//Function Number: 37 +reactiontaunt(param_00,param_01) +{ + self endon("death"); + self endon("removed from battleChatter"); + var_02 = createchatphrase(); + if(isdefined(param_01) && param_01 == "hostileburst") + { + var_02 addhostileburstalias(); + } + else + { + var_02 addtauntalias("taunt","generic"); + } + + playphrase(var_02); +} + +//Function Number: 38 +reactionfriendlyfire(param_00,param_01) +{ + self endon("death"); + self endon("removed from battleChatter"); + var_02 = createchatphrase(); + var_02 func_0806(); + playphrase(var_02); +} + +//Function Number: 39 +playresponseevent() +{ + self endon("death"); + self endon("removed from battleChatter"); + self.curevent = self.chatqueue["response"]; + var_00 = self.chatqueue["response"].var_6F8; + var_01 = self.chatqueue["response"].respondto; + if(!isalive(var_01)) + { + return; + } + + if(self.chatqueue["response"].var_6F8 == "follow" && self.a.state != "move") + { + return; + } + + anim thread lockaction(self,"response"); + switch(self.chatqueue["response"].eventtype) + { + case "exposed": + responsethreatexposed(var_01,var_00); + break; + + case "callout": + responsethreatcallout(var_01,var_00); + break; + + case "ack": + func_07B7(var_01,var_00); + break; + } + + self notify("done speaking"); +} + +//Function Number: 40 +responsethreatexposed(param_00,param_01) +{ + self endon("death"); + self endon("removed from battleChatter"); + if(!isalive(param_00)) + { + return; + } + + var_02 = createchatphrase(); + var_02 addthreatexposedalias(param_01); + var_02.looktarget = param_00; + var_02.master = 1; + playphrase(var_02); +} + +//Function Number: 41 +responsethreatcallout(param_00,param_01) +{ + self endon("death"); + self endon("removed from battleChatter"); + if(!isalive(param_00)) + { + return; + } + + var_02 = createchatphrase(); + var_03 = 0; + if(param_01 == "echo") + { + var_03 = var_02 addthreatcalloutecho(self.curevent.reportalias,param_00); + } + else if(param_01 == "QA") + { + var_03 = var_02 addthreatcalloutqa_nextline(param_00,self.curevent.reportalias,self.curevent.location); + } + else + { + var_03 = var_02 addthreatcalloutresponsealias(param_01); + } + + if(!var_03) + { + return; + } + + var_02.looktarget = param_00; + var_02.master = 1; + playphrase(var_02); +} + +//Function Number: 42 +func_07B7(param_00,param_01) +{ + self endon("death"); + self endon("removed from battleChatter"); + if(!isalive(param_00)) + { + return; + } + + var_02 = self.chatqueue["response"].eventtype; + var_03 = createchatphrase(); + var_03 addresponsealias(var_02,param_01); + var_03.looktarget = param_00; + var_03.master = 1; + playphrase(var_03); +} + +//Function Number: 43 +playorderevent() +{ + self endon("death"); + self endon("removed from battleChatter"); + self.curevent = self.chatqueue["order"]; + var_00 = self.chatqueue["order"].var_6F8; + var_01 = self.chatqueue["order"].orderto; + anim thread lockaction(self,"order"); + switch(self.chatqueue["order"].eventtype) + { + case "action": + orderaction(var_00,var_01); + break; + + case "move": + func_07BA(var_00,var_01); + break; + + case "displace": + orderdisplace(var_00); + break; + } + + self notify("done speaking"); +} + +//Function Number: 44 +orderaction(param_00,param_01) +{ + self endon("death"); + self endon("removed from battleChatter"); + var_02 = createchatphrase(); + tryorderto(var_02,param_01); + var_02 addorderalias("action",param_00); + playphrase(var_02); +} + +//Function Number: 45 +func_07BA(param_00,param_01) +{ + self endon("death"); + self endon("removed from battleChatter"); + var_02 = createchatphrase(); + tryorderto(var_02,param_01); + var_02 addorderalias("move",param_00); + playphrase(var_02); +} + +//Function Number: 46 +orderdisplace(param_00) +{ + self endon("death"); + self endon("removed from battleChatter"); + var_01 = createchatphrase(); + var_01 addorderalias("displace",param_00); + playphrase(var_01,1); +} + +//Function Number: 47 +tryorderto(param_00,param_01) +{ + if(randomint(100) > level.eventchance["response"]["order"]) + { + if(!isdefined(param_01) || isdefined(param_01) && !isplayer(param_01)) + { + return; + } + } + + if(isdefined(param_01) && isplayer(param_01) && isdefined(level.player.bcnameid)) + { + param_00 addplayernamealias(); + param_00.looktarget = level.player; + return; + } + + if(isdefined(param_01) && cansayname(param_01)) + { + param_00 func_0738(param_01.bcname); + param_00.looktarget = param_01; + param_01 animscripts/battlechatter_ai::addresponseevent("ack","yes",self,0.9); + return; + } + + level notify("follow order",self); +} + +//Function Number: 48 +playinformevent() +{ + self endon("death"); + self endon("removed from battleChatter"); + self.curevent = self.chatqueue["inform"]; + var_00 = self.chatqueue["inform"].var_6F8; + anim thread lockaction(self,"inform"); + switch(self.chatqueue["inform"].eventtype) + { + case "incoming": + informincoming(var_00); + break; + + case "attack": + informattacking(var_00); + break; + + case "reloading": + func_07BD(var_00); + break; + + case "suppressed": + informsuppressed(var_00); + break; + + case "killfirm": + informkillfirm(var_00); + break; + } + + self notify("done speaking"); +} + +//Function Number: 49 +func_07BD(param_00) +{ + self endon("death"); + self endon("removed from battleChatter"); + var_01 = createchatphrase(); + var_01 addinformalias("reloading",param_00); + playphrase(var_01); +} + +//Function Number: 50 +informsuppressed(param_00) +{ + self endon("death"); + self endon("removed from battleChatter"); + var_01 = createchatphrase(); + var_01 addinformalias("suppressed",param_00); + playphrase(var_01); +} + +//Function Number: 51 +informincoming(param_00) +{ + self endon("death"); + self endon("removed from battleChatter"); + var_01 = createchatphrase(); + if(param_00 == "grenade") + { + var_01.master = 1; + } + + var_01 addinformalias("incoming",param_00); + playphrase(var_01); +} + +//Function Number: 52 +informattacking(param_00) +{ + self endon("death"); + self endon("removed from battleChatter"); + var_01 = createchatphrase(); + var_01 addinformalias("attack",param_00); + playphrase(var_01); +} + +//Function Number: 53 +informkillfirm(param_00) +{ + self endon("death"); + self endon("removed from battleChatter"); + var_01 = createchatphrase(); + var_01 addinformalias("killfirm",param_00); + playphrase(var_01); +} + +//Function Number: 54 +playcustomevent() +{ + self endon("death"); + self endon("removed from battleChatter"); + self.curevent = self.chatqueue["custom"]; + anim thread lockaction(self,self.curevent.type,1); + playphrase(self.customchatphrase); + self notify("done speaking"); + self.customchatevent = undefined; + self.customchatphrase = undefined; +} + +//Function Number: 55 +playphrase(param_00,param_01) +{ + anim endon("battlechatter disabled"); + self endon("death"); + if(isdefined(param_01)) + { + return; + } + + if(battlechatter_canprint() || battlechatter_canprintdump()) + { + var_02 = []; + foreach(var_04 in param_00.soundaliases) + { + var_02[var_02.size] = var_04; + } + + if(battlechatter_canprint()) + { + battlechatter_print(var_02); + } + + if(battlechatter_canprintdump()) + { + var_06 = self.curevent.eventaction + "_" + self.curevent.eventtype; + if(isdefined(self.curevent.var_6F8)) + { + var_06 = var_06 + "_" + self.curevent.var_6F8; + } + + thread battlechatter_printdump(var_02,var_06); + } + } + + for(var_07 = 0;var_07 < param_00.soundaliases.size;var_07++) + { + if(!self.battlechatter) + { + if(!is_friendlyfire_event(self.curevent)) + { + } + else + { + } + else if(!can_say_friendlyfire(0)) + { + } + else if(self._animactive > 0) + { + } + else if(isfiltered(self.curevent.eventaction)) + { + wait 0.85; + } + else if(!soundexists(param_00.soundaliases[var_07])) + { + } + else + { + var_08 = gettime(); + var_09 = spawn("script_origin",self gettagorigin("j_head")); + var_09 linkto(self); + if(param_00.master && self.team == "allies") + { + thread maps\_anim::anim_facialfiller(param_00.soundaliases[var_07],param_00.looktarget); + var_09 playsoundasmaster(param_00.soundaliases[var_07],param_00.soundaliases[var_07],1); + var_09 waittill(param_00.soundaliases[var_07]); + self notify(param_00.soundaliases[var_07]); + } + else + { + thread maps\_anim::anim_facialfiller(param_00.soundaliases[var_07],param_00.looktarget); + if(getdvarint("bcs_forceEnglish",0)) + { + var_09 playsoundasmaster(param_00.soundaliases[var_07],param_00.soundaliases[var_07],1); + } + else + { + var_09 playsound(param_00.soundaliases[var_07],param_00.soundaliases[var_07],1); + } + + var_09 waittill(param_00.soundaliases[var_07]); + self notify(param_00.soundaliases[var_07]); + } + + var_09 delete(); + if(gettime() < var_08 + 250) + { + } + } + } + } + + self notify("playPhrase_done"); + dotypelimit(self.curevent.eventaction,self.curevent.eventtype); +} + +//Function Number: 56 +is_friendlyfire_event(param_00) +{ + if(!isdefined(param_00.eventaction) || !isdefined(param_00.eventtype)) + { + return 0; + } + + if(param_00.eventaction == "reaction" && param_00.eventtype == "friendlyfire") + { + return 1; + } + + return 0; +} + +//Function Number: 57 +isspeakingfailsafe(param_00) +{ + self endon("death"); + wait 25; + clearisspeaking(param_00); +} + +//Function Number: 58 +clearisspeaking(param_00) +{ + self.isspeaking = 0; + self.chatqueue[param_00].expiretime = 0; + self.chatqueue[param_00].priority = 0; + self.nextsaytimes[param_00] = gettime() + level.eventactionminwait[param_00]["self"]; +} + +//Function Number: 59 +lockaction(param_00,param_01,param_02) +{ + anim endon("battlechatter disabled"); + var_03 = param_00.squad; + var_04 = param_00.team; + param_00.isspeaking = 1; + param_00 thread isspeakingfailsafe(param_01); + var_03.ismembersaying[param_01] = 1; + var_03.numspeakers++; + level.isteamspeaking[var_04] = 1; + level.var_76C[var_04][param_01] = 1; + var_05 = param_00 common_scripts\utility::waittill_any_return("death","done speaking","cancel speaking"); + var_03.ismembersaying[param_01] = 0; + var_03.numspeakers--; + level.isteamspeaking[var_04] = 0; + level.var_76C[var_04][param_01] = 0; + if(var_05 == "cancel speaking") + { + return; + } + + level.lastteamspeaktime[var_04] = gettime(); + if(isalive(param_00)) + { + param_00 clearisspeaking(param_01); + } + + var_03.nextsaytimes[param_01] = gettime() + level.eventactionminwait[param_01]["squad"]; +} + +//Function Number: 60 +func_06F2(param_00,param_01) +{ + if(gettime() - self.squadlist[param_00].lastcontact > 10000) + { + var_02 = 0; + for(var_03 = 0;var_03 < self.members.size;var_03++) + { + if(self.members[var_03] != param_01 && isalive(self.members[var_03].enemy) && isdefined(self.members[var_03].enemy.squad) && self.members[var_03].enemy.squad.var_67E == param_00) + { + var_02 = 1; + } + } + + if(!var_02) + { + self.squadlist[param_00].firstcontact = gettime(); + self.squadlist[param_00].calledout = 0; + } + } + + self.squadlist[param_00].lastcontact = gettime(); +} + +//Function Number: 61 +cansay(param_00,param_01,param_02,param_03) +{ + self endon("death"); + self endon("removed from battleChatter"); + if(isplayer(self)) + { + return 0; + } + + if(distance(level.player.origin,self.origin) > level.bcs_maxtalkingdistfromplayer) + { + return 0; + } + + if(!isdefined(self.battlechatter) || !self.battlechatter) + { + return 0; + } + + if(isdefined(param_02) && param_02 >= 1) + { + return 1; + } + + if(gettime() + level.eventactionminwait[param_00]["self"] < self.nextsaytimes[param_00]) + { + return 0; + } + + if(gettime() + level.eventactionminwait[param_00]["squad"] < self.squad.nextsaytimes[param_00]) + { + return 0; + } + + if(isdefined(param_01) && typelimited(param_00,param_01)) + { + return 0; + } + + if(isdefined(param_01) && level.eventpriority[param_00][param_01] < self.bcs_minpriority) + { + return 0; + } + + return 1; +} + +//Function Number: 62 +gethighestpriorityevent() +{ + var_00 = undefined; + var_01 = -999999999; + foreach(var_04, var_03 in self.chatqueue) + { + if(isvalidevent(var_04)) + { + if(var_03.priority > var_01) + { + var_00 = var_04; + var_01 = var_03.priority; + } + } + } + + return var_00; +} + +//Function Number: 63 +gettargettingai(param_00) +{ + var_01 = self.squad; + var_02 = []; + for(var_03 = 0;var_03 < var_01.members.size;var_03++) + { + if(isdefined(var_01.members[var_03].enemy) && var_01.members[var_03].enemy == param_00) + { + var_02[var_02.size] = var_01.members[var_03]; + } + } + + if(!isdefined(var_02[0])) + { + return undefined; + } + + var_04 = undefined; + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + if(var_02[var_03] cansay("response")) + { + return var_04; + } + } + + return maps\_utility::getclosest(self.origin,var_02); +} + +//Function Number: 64 +getqueueevents() +{ + var_00 = []; + var_01 = []; + var_00[0] = "custom"; + var_00[1] = "response"; + var_00[2] = "order"; + var_00[3] = "threat"; + var_00[4] = "inform"; + for(var_02 = var_00.size - 1;var_02 >= 0;var_02--) + { + for(var_03 = 1;var_03 <= var_02;var_03++) + { + if(self.chatqueue[var_00[var_03 - 1]].priority < self.chatqueue[var_00[var_03]].priority) + { + var_04 = var_00[var_03 - 1]; + var_00[var_03 - 1] = var_00[var_03]; + var_00[var_03] = var_04; + } + } + } + + var_05 = 0; + for(var_02 = 0;var_02 < var_00.size;var_02++) + { + var_06 = geteventstate(var_00[var_02]); + if(var_06 == " valid" && !var_05) + { + var_05 = 1; + var_01[var_02] = "g " + var_00[var_02] + var_06 + " " + self.chatqueue[var_00[var_02]].priority; + continue; + } + + if(var_06 == " valid") + { + var_01[var_02] = "y " + var_00[var_02] + var_06 + " " + self.chatqueue[var_00[var_02]].priority; + continue; + } + + if(self.chatqueue[var_00[var_02]].expiretime == 0) + { + var_01[var_02] = "b " + var_00[var_02] + var_06 + " " + self.chatqueue[var_00[var_02]].priority; + continue; + } + + var_01[var_02] = "r " + var_00[var_02] + var_06 + " " + self.chatqueue[var_00[var_02]].priority; + } + + return var_01; +} + +//Function Number: 65 +geteventstate(param_00) +{ + var_01 = ""; + if(self.squad.ismembersaying[param_00]) + { + var_01 = var_01 + " playing"; + } + + if(gettime() > self.chatqueue[param_00].expiretime) + { + var_01 = var_01 + " expired"; + } + + if(gettime() < self.squad.nextsaytimes[param_00]) + { + var_01 = var_01 + " cantspeak"; + } + + if(var_01 == "") + { + var_01 = " valid"; + } + + return var_01; +} + +//Function Number: 66 +isfiltered(param_00) +{ + if(getdvar("bcs_filter" + param_00,"off") == "on" || getdvar("bcs_filter" + param_00,"off") == "1") + { + return 1; + } + + return 0; +} + +//Function Number: 67 +isvalidevent(param_00) +{ + if(!self.squad.ismembersaying[param_00] && !level.var_76C[self.team][param_00] && gettime() < self.chatqueue[param_00].expiretime && gettime() > self.squad.nextsaytimes[param_00]) + { + if(!typelimited(param_00,self.chatqueue[param_00].eventtype)) + { + return 1; + } + } + + return 0; +} + +//Function Number: 68 +typelimited(param_00,param_01) +{ + if(!isdefined(level.eventtypeminwait[param_00][param_01])) + { + return 0; + } + + if(!isdefined(self.squad.nexttypesaytimes[param_00][param_01])) + { + return 0; + } + + if(gettime() > self.squad.nexttypesaytimes[param_00][param_01]) + { + return 0; + } + + return 1; +} + +//Function Number: 69 +dotypelimit(param_00,param_01) +{ + if(!isdefined(level.eventtypeminwait[param_00][param_01])) + { + return; + } + + self.squad.nexttypesaytimes[param_00][param_01] = gettime() + level.eventtypeminwait[param_00][param_01]; +} + +//Function Number: 70 +bcissniper() +{ + if(isplayer(self)) + { + return 0; + } + + if(isexposed()) + { + return 0; + } + + return animscripts/utility::issniperrifle(self.weapon); +} + +//Function Number: 71 +isexposed() +{ + if(distance(self.origin,level.player.origin) > 1500) + { + return 0; + } + + if(isdefined(getlocation())) + { + return 0; + } + + var_00 = bcgetclaimednode(); + if(!isdefined(var_00)) + { + return 1; + } + + if(!isnodecoverorconceal()) + { + return 0; + } + + return 1; +} + +//Function Number: 72 +isnodecoverorconceal() +{ + var_00 = self.node; + if(!isdefined(var_00)) + { + return 0; + } + + if(issubstr(var_00.type,"Cover") || issubstr(var_00.type,"Conceal")) + { + return 1; + } + + return 0; +} + +//Function Number: 73 +func_07D7(param_00) +{ + if(param_00.officercount > 0) + { + return 1; + } + + return 0; +} + +//Function Number: 74 +isofficer() +{ + var_00 = getrank(); + if(!isdefined(var_00)) + { + return 0; + } + + if(var_00 == "sergeant" || var_00 == "lieutenant" || var_00 == "captain" || var_00 == "sergeant") + { + return 1; + } + + return 0; +} + +//Function Number: 75 +bcgetclaimednode() +{ + if(isplayer(self)) + { + return self.node; + } + + return animscripts/utility::getclaimednode(); +} + +//Function Number: 76 +enemy_team_name() +{ + if(self isbadguy()) + { + return 1; + } + + return 0; +} + +//Function Number: 77 +getname() +{ + if(enemy_team_name()) + { + var_00 = self.ainame; + } + else if(self.team == "allies") + { + var_00 = self.name; + } + else + { + var_00 = undefined; + } + + if(!isdefined(var_00)) + { + return undefined; + } + + var_01 = strtok(var_00," "); + if(var_01.size < 2) + { + return var_00; + } + + return var_01[1]; +} + +//Function Number: 78 +getrank() +{ + return self.airank; +} + +//Function Number: 79 +getclosestfriendlyspeaker(param_00) +{ + var_01 = getspeakers(param_00,self.team); + var_02 = maps\_utility::getclosest(self.origin,var_01); + return var_02; +} + +//Function Number: 80 +getspeakers(param_00,param_01) +{ + var_02 = []; + var_03 = getaiarray(param_01); + for(var_04 = 0;var_04 < var_03.size;var_04++) + { + if(var_03[var_04] == self) + { + continue; + } + + if(!var_03[var_04] cansay(param_00)) + { + continue; + } + + var_02[var_02.size] = var_03[var_04]; + } + + return var_02; +} + +//Function Number: 81 +getresponder(param_00,param_01,param_02) +{ + var_03 = undefined; + if(!isdefined(param_02)) + { + param_02 = "response"; + } + + var_04 = maps\_utility::array_randomize(self.squad.members); + param_00 = param_00 * param_00; + param_01 = param_01 * param_01; + for(var_05 = 0;var_05 < var_04.size;var_05++) + { + if(var_04[var_05] == self) + { + continue; + } + + if(!isalive(var_04[var_05])) + { + continue; + } + + var_06 = distancesquared(self.origin,var_04[var_05].origin); + if(var_06 < param_00) + { + continue; + } + + if(var_06 > param_01) + { + continue; + } + + if(isusingsamevoice(var_04[var_05])) + { + continue; + } + + if(!var_04[var_05] cansay(param_02)) + { + continue; + } + + var_03 = var_04[var_05]; + if(cansayname(var_03)) + { + break; + } + } + + return var_03; +} + +//Function Number: 82 +getlocation() +{ + var_00 = get_all_my_locations(); + var_00 = maps\_utility::array_randomize(var_00); + if(var_00.size) + { + foreach(var_02 in var_00) + { + if(!location_called_out_ever(var_02)) + { + return var_02; + } + } + + foreach(var_02 in var_00) + { + if(!location_called_out_recently(var_02)) + { + return var_02; + } + } + } + + return undefined; +} + +//Function Number: 83 +get_all_my_locations() +{ + var_00 = level.bcs_locations; + var_01 = []; + foreach(var_03 in var_00) + { + if(self istouching(var_03) && isdefined(var_03.locationaliases)) + { + var_01[var_01.size] = var_03; + } + } + + return var_01; +} + +//Function Number: 84 +update_bcs_locations() +{ + if(isdefined(level.bcs_locations)) + { + anim.bcs_locations = common_scripts\utility::array_removeundefined(level.bcs_locations); + } +} + +//Function Number: 85 +is_in_callable_location() +{ + var_00 = get_all_my_locations(); + foreach(var_02 in var_00) + { + if(!location_called_out_recently(var_02)) + { + return 1; + } + } + + return 0; +} + +//Function Number: 86 +location_called_out_ever(param_00) +{ + var_01 = location_get_last_callout_time(param_00); + if(!isdefined(var_01)) + { + return 0; + } + + return 1; +} + +//Function Number: 87 +location_called_out_recently(param_00) +{ + var_01 = location_get_last_callout_time(param_00); + if(!isdefined(var_01)) + { + return 0; + } + + var_02 = var_01 + level.eventactionminwait["threat"]["location_repeat"]; + if(gettime() < var_02) + { + return 1; + } + + return 0; +} + +//Function Number: 88 +location_add_last_callout_time(param_00) +{ + level.locationlastcallouttimes[param_00.classname] = gettime(); +} + +//Function Number: 89 +location_get_last_callout_time(param_00) +{ + if(isdefined(level.locationlastcallouttimes[param_00.classname])) + { + return level.locationlastcallouttimes[param_00.classname]; + } + + return undefined; +} + +//Function Number: 90 +getrelativeangles(param_00) +{ + var_01 = param_00.angles; + if(!isplayer(param_00)) + { + var_02 = param_00 bcgetclaimednode(); + if(isdefined(var_02)) + { + var_01 = var_02.angles; + } + } + + return var_01; +} + +//Function Number: 91 +sideisleftright(param_00) +{ + if(param_00 == "left" || param_00 == "right") + { + return 1; + } + + return 0; +} + +//Function Number: 92 +getdirectionfacingflank(param_00,param_01,param_02) +{ + var_03 = vectortoangles(param_02); + var_04 = vectortoangles(param_01 - param_00); + var_05 = var_03[1] - var_04[1]; + var_05 = var_05 + 360; + var_05 = int(var_05) % 360; + if(var_05 > 315 || var_05 < 45) + { + var_06 = "front"; + } + else if(var_06 < 135) + { + var_06 = "right"; + } + else if(var_06 < 225) + { + var_06 = "rear"; + } + else + { + var_06 = "left"; + } + + return var_06; +} + +//Function Number: 93 +normalizecompassdirection(param_00) +{ + var_01 = undefined; + switch(param_00) + { + case "north": + var_01 = "n"; + break; + + case "northwest": + var_01 = "nw"; + break; + + case "west": + var_01 = "w"; + break; + + case "southwest": + var_01 = "sw"; + break; + + case "south": + var_01 = "s"; + break; + + case "southeast": + var_01 = "se"; + break; + + case "east": + var_01 = "e"; + break; + + case "northeast": + var_01 = "ne"; + break; + + case "impossible": + var_01 = "impossible"; + break; + + default: + break; + } + + return var_01; +} + +//Function Number: 94 +getdirectioncompass(param_00,param_01) +{ + var_02 = vectortoangles(param_01 - param_00); + var_03 = var_02[1]; + var_04 = getnorthyaw(); + var_03 = var_03 - var_04; + if(var_03 < 0) + { + var_03 = var_03 + 360; + } + else if(var_03 > 360) + { + var_03 = var_03 - 360; + } + + if(var_03 < 22.5 || var_03 > 337.5) + { + var_05 = "north"; + } + else if(var_04 < 67.5) + { + var_05 = "northwest"; + } + else if(var_04 < 112.5) + { + var_05 = "west"; + } + else if(var_04 < 157.5) + { + var_05 = "southwest"; + } + else if(var_04 < 202.5) + { + var_05 = "south"; + } + else if(var_04 < 247.5) + { + var_05 = "southeast"; + } + else if(var_04 < 292.5) + { + var_05 = "east"; + } + else if(var_04 < 337.5) + { + var_05 = "northeast"; + } + else + { + var_05 = "impossible"; + } + + return var_05; +} + +//Function Number: 95 +getdistanceyards(param_00,param_01) +{ + var_02 = distance2d(param_00,param_01); + var_03 = 0.0254 * var_02; + return var_03; +} + +//Function Number: 96 +getdistanceyardsnormalized(param_00,param_01) +{ + var_02 = getdistanceyards(param_00,param_01); + if(var_02 < 15) + { + return "10"; + } + + if(var_02 < 25) + { + return "20"; + } + + if(var_02 < 35) + { + return "30"; + } + + return "40"; +} + +//Function Number: 97 +getfrontarcclockdirection(param_00) +{ + var_01 = "undefined"; + if(param_00 == "10" || param_00 == "11") + { + var_01 = "10"; + } + else if(param_00 == "12") + { + var_01 = param_00; + } + else if(param_00 == "1" || param_00 == "2") + { + var_01 = "2"; + } + + return var_01; +} + +//Function Number: 98 +getdirectionfacingclock(param_00,param_01,param_02) +{ + var_03 = anglestoforward(param_00); + var_04 = vectornormalize(var_03); + var_05 = vectortoangles(var_04); + var_06 = vectortoangles(param_02 - param_01); + var_07 = var_05[1] - var_06[1]; + var_07 = var_07 + 360; + var_07 = int(var_07) % 360; + if(var_07 > 345 || var_07 < 15) + { + var_08 = "12"; + } + else if(var_08 < 45) + { + var_08 = "1"; + } + else if(var_08 < 75) + { + var_08 = "2"; + } + else if(var_08 < 105) + { + var_08 = "3"; + } + else if(var_08 < 135) + { + var_08 = "4"; + } + else if(var_08 < 165) + { + var_08 = "5"; + } + else if(var_08 < 195) + { + var_08 = "6"; + } + else if(var_08 < 225) + { + var_08 = "7"; + } + else if(var_08 < 255) + { + var_08 = "8"; + } + else if(var_08 < 285) + { + var_08 = "9"; + } + else if(var_08 < 315) + { + var_08 = "10"; + } + else + { + var_08 = "11"; + } + + return var_08; +} + +//Function Number: 99 +getdegreeselevation(param_00,param_01) +{ + var_02 = param_01[2] - param_00[2]; + var_03 = distance2d(param_00,param_01); + var_04 = atan(var_02 / var_03); + if(var_04 < 15 || var_04 > 55) + { + return var_04; + } + + if(var_04 < 25) + { + return 20; + } + + if(var_04 < 35) + { + return 30; + } + + if(var_04 < 45) + { + return 40; + } + + if(var_04 < 55) + { + return 50; + } +} + +//Function Number: 100 +getvectorrightangle(param_00) +{ + return (param_00[1],0 - param_00[0],param_00[2]); +} + +//Function Number: 101 +getvectorarrayaverage(param_00) +{ + var_01 = (0,0,0); + for(var_02 = 0;var_02 < param_00.size;var_02++) + { + var_01 = var_01 + param_00[var_02]; + } + + return (var_01[0] / param_00.size,var_01[1] / param_00.size,var_01[2] / param_00.size); +} + +//Function Number: 102 +func_0738(param_00) +{ + self.soundaliases[self.soundaliases.size] = self.owner.countryid + "_" + self.owner.npcid + "_name_" + param_00; + level.lastnamesaid[self.owner.team] = param_00; + level.lastnamesaidtime[self.owner.team] = gettime(); +} + +//Function Number: 103 +addplayernamealias() +{ + if(!self.owner cansayplayername()) + { + return; + } + + anim.lastplayernamecalltime = gettime(); + var_00 = self.owner.countryid + "_" + self.owner.npcid + "_name_player_" + level.player.var_78C + "_" + level.player.bcnameid; + self.soundaliases[self.soundaliases.size] = var_00; + self.looktarget = level.player; +} + +//Function Number: 104 +func_07F2(param_00) +{ + self.soundaliases[self.soundaliases.size] = self.owner.countryid + "_" + self.owner.npcid + "_rank_" + param_00; +} + +//Function Number: 105 +cansayname(param_00) +{ + if(enemy_team_name()) + { + return 0; + } + + if(!isdefined(param_00.bcname)) + { + return 0; + } + + if(param_00.battlechatter == 0) + { + return 0; + } + + if(!isdefined(param_00.countryid)) + { + return 0; + } + + if(self.countryid != param_00.countryid) + { + return 0; + } + + if(namesaidrecently(param_00)) + { + return 0; + } + + var_01 = self.countryid + "_" + self.npcid + "_name_" + param_00.bcname; + if(soundexists(var_01)) + { + return 1; + } + + return 0; +} + +//Function Number: 106 +namesaidrecently(param_00) +{ + if(level.lastnamesaid[self.team] == param_00.bcname || gettime() - level.lastnamesaidtime[self.team] < level.lastnamesaidtimeout) + { + return 1; + } + + return 0; +} + +//Function Number: 107 +cansayplayername() +{ + if(enemy_team_name()) + { + return 0; + } + + if(!isdefined(level.player.bcnameid) || !isdefined(level.player.var_78C)) + { + return 0; + } + + if(player_name_called_recently()) + { + return 0; + } + + var_00 = self.countryid + "_" + self.npcid + "_name_player_" + level.player.var_78C + "_" + level.player.bcnameid; + if(soundexists(var_00)) + { + return 1; + } + + return 0; +} + +//Function Number: 108 +player_name_called_recently() +{ + if(!isdefined(level.lastplayernamecalltime)) + { + return 0; + } + + if(gettime() - level.lastplayernamecalltime >= level.eventtypeminwait["playername"]) + { + return 0; + } + + return 1; +} + +//Function Number: 109 +isusingsamevoice(param_00) +{ + if(isstring(self.npcid) && isstring(param_00.npcid) && self.npcid == param_00.npcid) + { + return 1; + } + + if(!isstring(self.npcid) && !isstring(param_00.npcid) && self.npcid == param_00.npcid) + { + return 1; + } + + return 0; +} + +//Function Number: 110 +addthreatalias(param_00,param_01) +{ + var_02 = self.owner.countryid + "_" + self.owner.npcid + "_threat_" + param_00; + if(isdefined(param_01)) + { + var_02 = var_02 + "_" + param_01; + } + + self.soundaliases = maps\_utility::array_add(self.soundaliases,var_02); + return 1; +} + +//Function Number: 111 +addthreatexposedalias(param_00) +{ + var_01 = self.owner.countryid + "_" + self.owner.npcid + "_exposed_" + param_00; + self.soundaliases[self.soundaliases.size] = var_01; + return 1; +} + +//Function Number: 112 +addthreatobviousalias() +{ + var_00 = self.owner.countryid + "_" + self.owner.npcid + "_order_action_suppress"; + self.soundaliases[self.soundaliases.size] = var_00; + return 1; +} + +//Function Number: 113 +func_07FA(param_00) +{ + var_01 = self.owner.countryid + "_" + self.owner.npcid + "_co_dist_" + param_00; + self.soundaliases[self.soundaliases.size] = var_01; + return 1; +} + +//Function Number: 114 +addthreatelevationalias(param_00) +{ + var_01 = self.owner.countryid + "_" + self.owner.npcid + "_co_elev_" + param_00; + self.soundaliases[self.soundaliases.size] = var_01; + return 1; +} + +//Function Number: 115 +addthreatcalloutecho(param_00,param_01) +{ + var_02 = createechoalias(param_00,param_01); + if(!soundexists(var_02)) + { + return 0; + } + + self.soundaliases[self.soundaliases.size] = var_02; + return 1; +} + +//Function Number: 116 +addthreatcalloutresponsealias(param_00) +{ + var_01 = self.owner.countryid + "_" + self.owner.npcid + "_resp_ack_co_gnrc_" + param_00; + if(!soundexists(var_01)) + { + return 0; + } + + self.soundaliases[self.soundaliases.size] = var_01; + return 1; +} + +//Function Number: 117 +addthreatcalloutqa_nextline(param_00,param_01,param_02) +{ + var_03 = undefined; + foreach(var_05 in param_02.locationaliases) + { + if(issubstr(param_01,var_05)) + { + var_03 = var_05; + break; + } + } + + var_07 = self.owner.countryid + "_" + self.owner.npcid + "_co_"; + var_08 = getsubstr(param_01,param_01.size - 1,param_01.size); + var_09 = int(var_08) + 1; + var_0A = var_07 + var_03 + "_qa" + var_09; + if(!soundexists(var_0A)) + { + if(randomint(100) < level.eventchance["response"]["callout_negative"]) + { + param_00 animscripts/battlechatter_ai::addresponseevent("callout","neg",self.owner,0.9); + } + else + { + param_00 animscripts/battlechatter_ai::addresponseevent("exposed","acquired",self.owner,0.9); + } + + param_02.qafinished = 1; + return 0; + } + + param_00 animscripts/battlechatter_ai::addresponseevent("callout","QA",self.owner,0.9,var_0A,param_02); + self.soundaliases[self.soundaliases.size] = var_0A; + return 1; +} + +//Function Number: 118 +createechoalias(param_00,param_01) +{ + var_02 = "_report"; + var_03 = "_echo"; + var_04 = self.owner.countryid + "_" + self.owner.npcid + "_"; + var_05 = param_00.size - var_02.size; + var_06 = self.owner.countryid + "_" + param_01.npcid + "_"; + var_07 = var_06.size; + var_08 = getsubstr(param_00,var_07,var_05); + var_09 = var_04 + var_08 + var_03; + return var_09; +} + +//Function Number: 119 +func_0800(param_00,param_01) +{ + var_02 = self.owner.countryid + "_" + self.owner.npcid + "_callout_" + param_00 + "_" + param_01; + self.soundaliases[self.soundaliases.size] = var_02; + return 1; +} + +//Function Number: 120 +addthreatcalloutlandmarkalias(param_00,param_01,param_02) +{ + var_03 = param_00.script_landmark; + if(!isdefined(param_02)) + { + param_02 = 0; + } + + var_04 = self.owner.countryid + "_" + self.owner.npcid + "_callout_obj_" + var_03; + if(param_02) + { + var_04 = var_04 + "_y"; + } + + var_04 = var_04 + "_" + param_01; + if(!soundexists(var_04)) + { + return 0; + } + + self.soundaliases[self.soundaliases.size] = var_04; + return 1; +} + +//Function Number: 121 +func_0803(param_00) +{ + var_01 = undefined; + var_02 = param_00.locationaliases; + var_03 = var_02[0]; + if(var_02.size > 1) + { + var_04 = undefined; + var_04 = param_00 getcannedresponse(self.owner); + if(isdefined(var_04)) + { + var_03 = var_04; + } + else + { + var_03 = common_scripts\utility::random(var_02); + } + } + + var_05 = undefined; + if(!isdefined(param_00.qafinished) && iscallouttypeqa(var_03,self.owner)) + { + var_05 = self.owner getqacalloutalias(var_03,0); + } + else + { + var_06 = self.owner.countryid + "_" + self.owner.npcid + "_"; + if(!issubstr(var_03,"callout")) + { + var_06 = var_06 + "co_"; + } + + var_05 = var_06 + var_03; + } + + if(soundexists(var_05)) + { + var_01 = var_05; + } + + if(!isdefined(var_01)) + { + return 0; + } + + location_add_last_callout_time(param_00); + self.soundaliases[self.soundaliases.size] = var_01; + return 1; +} + +//Function Number: 122 +addinformalias(param_00,param_01) +{ + var_02 = self.owner.countryid + "_" + self.owner.npcid + "_inform_" + param_00 + "_" + param_01; + self.soundaliases[self.soundaliases.size] = var_02; +} + +//Function Number: 123 +addresponsealias(param_00,param_01) +{ + var_02 = self.owner.countryid + "_" + self.owner.npcid + "_response_" + param_00 + "_" + param_01; + self.soundaliases[self.soundaliases.size] = var_02; + return 1; +} + +//Function Number: 124 +addreactionalias(param_00,param_01) +{ + var_02 = self.owner.countryid + "_" + self.owner.npcid + "_reaction_" + param_00 + "_" + param_01; + self.soundaliases[self.soundaliases.size] = var_02; + return 1; +} + +//Function Number: 125 +func_0806() +{ + var_00 = self.owner.countryid + "_" + self.owner.npcid + "_check_fire"; + self.soundaliases[self.soundaliases.size] = var_00; + return 1; +} + +//Function Number: 126 +addtauntalias(param_00,param_01) +{ + var_02 = self.owner.countryid + "_" + self.owner.npcid + "_taunt"; + self.soundaliases[self.soundaliases.size] = var_02; + return 1; +} + +//Function Number: 127 +addhostileburstalias() +{ + var_00 = self.owner.countryid + "_" + self.owner.npcid + "_hostile_burst"; + self.soundaliases[self.soundaliases.size] = var_00; + return 1; +} + +//Function Number: 128 +addorderalias(param_00,param_01) +{ + var_02 = self.owner.countryid + "_" + self.owner.npcid + "_order_" + param_00 + "_" + param_01; + self.soundaliases[self.soundaliases.size] = var_02; + return 1; +} + +//Function Number: 129 +initcontact(param_00) +{ + if(!isdefined(self.squadlist[param_00].calledout)) + { + self.squadlist[param_00].calledout = 0; + } + + if(!isdefined(self.squadlist[param_00].firstcontact)) + { + self.squadlist[param_00].firstcontact = 2000000000; + } + + if(!isdefined(self.squadlist[param_00].lastcontact)) + { + self.squadlist[param_00].lastcontact = 0; + } +} + +//Function Number: 130 +shutdowncontact(param_00) +{ + self.squadlist[param_00].calledout = undefined; + self.squadlist[param_00].firstcontact = undefined; + self.squadlist[param_00].lastcontact = undefined; +} + +//Function Number: 131 +createchatevent(param_00,param_01,param_02) +{ + var_03 = spawnstruct(); + var_03.owner = self; + var_03.eventtype = param_01; + var_03.eventaction = param_00; + if(isdefined(param_02)) + { + var_03.priority = param_02; + } + else + { + var_03.priority = level.eventpriority[param_00][param_01]; + } + + var_03.expiretime = gettime() + level.eventduration[param_00][param_01]; + return var_03; +} + +//Function Number: 132 +createchatphrase() +{ + var_00 = spawnstruct(); + var_00.owner = self; + var_00.soundaliases = []; + var_00.master = 0; + return var_00; +} + +//Function Number: 133 +pointinfov(param_00) +{ + return maps\_utility::within_fov(self.origin,self.angles,param_00,0.766); +} + +//Function Number: 134 +entinfrontarc(param_00) +{ + return maps\_utility::within_fov(self.origin,self.angles,param_00.origin,0); +} + +//Function Number: 135 +squadflavorbursttransmissions() +{ + anim endon("battlechatter disabled"); + self endon("squad_deleting"); + if(self.team != "allies") + { + if(level.script != "af_caves") + { + return; + } + } + + while(self.membercount <= 0) + { + wait 0.5; + } + + var_00 = 0; + while(isdefined(self)) + { + if(!squadcanburst(self)) + { + var_00 = 1; + wait 1; + continue; + } + else if(self.fbt_firstburst) + { + if(!var_00) + { + wait randomfloat(level.fbt_waitmin); + } + + if(var_00) + { + var_00 = 0; + } + + self.fbt_firstburst = 0; + } + else + { + if(!var_00) + { + wait randomfloatrange(level.fbt_waitmin,level.var_75F); + } + + if(var_00) + { + var_00 = 0; + } + } + + var_01 = getburster(self); + if(!isdefined(var_01)) + { + continue; + } + + var_02 = var_01.voice; + var_03 = getflavorburstid(self,var_02); + var_04 = getflavorburstaliases(var_02,var_03); + foreach(var_08, var_06 in var_04) + { + if(!var_01 candoflavorburst() || distance(level.player.origin,var_01.origin) > level.fbt_desireddistmax) + { + for(var_07 = 0;var_07 < self.members.size;var_07++) + { + var_01 = getburster(self); + if(!isdefined(var_01)) + { + continue; + } + + if(var_01.voice == var_02) + { + break; + } + } + + if(!isdefined(var_01) || var_01.voice != var_02) + { + break; + } + } + + thread playflavorburstline(var_01,var_06); + self waittill("burst_line_done"); + if(var_08 != var_04.size - 1) + { + wait randomfloatrange(level.fbt_linebreakmin,level.fbt_linebreakmax); + } + } + } +} + +//Function Number: 136 +squadcanburst(param_00) +{ + var_01 = 0; + foreach(var_03 in param_00.members) + { + if(var_03 candoflavorburst()) + { + var_01 = 1; + break; + } + } + + return var_01; +} + +//Function Number: 137 +candoflavorburst() +{ + var_00 = 0; + if(!isplayer(self) && isalive(self) && self.classname != "actor_enemy_dog" && level.flavorbursts[self.team] && voicecanburst() && self.flavorbursts) + { + var_00 = 1; + } + + return var_00; +} + +//Function Number: 138 +voicecanburst() +{ + if(isdefined(level.flavorburstvoices[self.voice]) && level.flavorburstvoices[self.voice]) + { + return 1; + } + + return 0; +} + +//Function Number: 139 +getburster(param_00) +{ + var_01 = undefined; + var_02 = maps\_utility::get_array_of_farthest(level.player.origin,param_00.members); + foreach(var_04 in var_02) + { + if(var_04 candoflavorburst()) + { + var_01 = var_04; + if(!isdefined(param_00.fbt_lastbursterid)) + { + break; + } + + if(isdefined(param_00.fbt_lastbursterid) && param_00.fbt_lastbursterid == var_01.unique_id) + { + continue; + } + } + } + + if(isdefined(var_01)) + { + param_00.fbt_lastbursterid = var_01.unique_id; + } + + return var_01; +} + +//Function Number: 140 +getflavorburstid(param_00,param_01) +{ + var_02 = maps\_utility::array_randomize(level.flavorbursts[param_01]); + if(level.flavorburstsused.size >= var_02.size) + { + anim.flavorburstsused = []; + } + + var_03 = undefined; + foreach(var_05 in var_02) + { + var_03 = var_05; + if(!flavorburstwouldrepeat(var_03)) + { + break; + } + } + + level.flavorburstsused[level.flavorburstsused.size] = var_03; + return var_03; +} + +//Function Number: 141 +flavorburstwouldrepeat(param_00) +{ + if(!level.flavorburstsused.size) + { + return 0; + } + + var_01 = 0; + foreach(var_03 in level.flavorburstsused) + { + if(var_03 == param_00) + { + var_01 = 1; + break; + } + } + + return var_01; +} + +//Function Number: 142 +getflavorburstaliases(param_00,param_01,param_02) +{ + if(!isdefined(param_02)) + { + param_02 = 1; + } + + var_03 = param_02; + var_04 = []; + for(;;) + { + var_05 = "FB_" + level.countryids[param_00] + "_" + param_01 + "_" + var_03; + var_03++; + if(soundexists(var_05)) + { + var_04[var_04.size] = var_05; + continue; + } + + break; + } + + return var_04; +} + +//Function Number: 143 +playflavorburstline(param_00,param_01) +{ + anim endon("battlechatter disabled"); + var_02 = spawn("script_origin",param_00 gettagorigin("j_head")); + var_02 linkto(param_00); + var_02 playsound(param_01,param_01,1); + var_02 waittill(param_01); + var_02 delete(); + if(isdefined(self)) + { + self notify("burst_line_done"); + } +} + +//Function Number: 144 +flavorburstlinedebug(param_00,param_01) +{ + self endon("burst_line_done"); + wait 0.05; +} + +//Function Number: 145 +battlechatter_canprint() +{ + return 0; +} + +//Function Number: 146 +battlechatter_canprintdump() +{ + return 0; +} + +//Function Number: 147 +battlechatter_print(param_00) +{ + if(param_00.size <= 0) + { + return; + } + + if(!battlechatter_canprint()) + { + return; + } + + var_01 = "^5 "; + if(enemy_team_name()) + { + var_01 = "^6 "; + } + + foreach(var_03 in param_00) + { + } +} + +//Function Number: 148 +battlechatter_printdump(param_00,param_01) +{ +} + +//Function Number: 149 +getaliastypefromsoundalias(param_00) +{ + var_01 = self.countryid + "_" + self.npcid + "_"; + var_02 = getsubstr(param_00,var_01.size,param_00.size); + return var_02; +} + +//Function Number: 150 +battlechatter_printdumpline(param_00,param_01,param_02) +{ + if(common_scripts\utility::flag(param_02)) + { + common_scripts\utility::flag_wait(param_02); + } + + common_scripts\utility::flag_set(param_02); + common_scripts\utility::flag_clear(param_02); +} + +//Function Number: 151 +bcdrawobjects() +{ + for(var_00 = 0;var_00 < level.bcs_locations.size;var_00++) + { + var_01 = level.bcs_locations[var_00].locationaliases; + if(!isdefined(var_01)) + { + continue; + } + + var_02 = ""; + foreach(var_04 in var_01) + { + var_02 = var_02 + var_04; + } + + thread drawbcobject("Location: " + var_02,level.bcs_locations[var_00] getorigin(),(0,0,8),(1,1,1)); + } +} + +//Function Number: 152 +drawbcobject(param_00,param_01,param_02,param_03) +{ + for(;;) + { + if(distance(level.player.origin,param_01) > 2048) + { + wait 0.1; + continue; + } + + wait 0.05; + } +} + +//Function Number: 153 +drawbcdirections(param_00,param_01,param_02) +{ + var_03 = param_00 getorigin(); + for(;;) + { + if(distance(level.player.origin,var_03) > 2048) + { + wait 0.1; + continue; + } + + var_04 = getdirectioncompass(level.player.origin,var_03); + var_04 = normalizecompassdirection(var_04); + var_05 = getdirectionfacingclock(level.player.angles,level.player.origin,var_03); + var_06 = var_04 + ", " + var_05 + ":00"; + wait 0.05; + } +} + +//Function Number: 154 +func_0820(param_00,param_01) +{ + var_02 = getaiarray(param_00); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + var_04 = var_02[var_03]; + if(!isalive(var_04)) + { + continue; + } + + if(!isdefined(var_04.battlechatter)) + { + continue; + } + + var_04.nextsaytimes[param_01] = gettime() + 350; + var_04.squad.nextsaytimes[param_01] = gettime() + 350; + } +} + +//Function Number: 155 +voice_is_british_based() +{ + self endon("death"); + if(self.voice == "british") + { + return 1; + } + + return 0; +} + +//Function Number: 156 +friendlyfire_warning() +{ + if(!can_say_friendlyfire()) + { + return 0; + } + + dotypelimit("reaction","friendlyfire"); + thread playreactionevent(); + return 1; +} + +//Function Number: 157 +can_say_friendlyfire(param_00) +{ + if(isdefined(self.friendlyfire_warnings_disable)) + { + return 0; + } + + if(!isdefined(self.chatqueue)) + { + return 0; + } + + if(!isdefined(self.chatqueue["reaction"]) || !isdefined(self.chatqueue["reaction"].eventtype)) + { + return 0; + } + + if(self.chatqueue["reaction"].eventtype != "friendlyfire") + { + return 0; + } + + if(gettime() > self.chatqueue["reaction"].expiretime) + { + return 0; + } + + if(!isdefined(param_00)) + { + param_00 = 1; + } + + if(param_00) + { + if(isdefined(self.squad.nexttypesaytimes["reaction"]["friendlyfire"])) + { + if(gettime() < self.squad.nexttypesaytimes["reaction"]["friendlyfire"]) + { + return 0; + } + } + } + + return 1; +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/battlechatter_ai.gsc b/MW3/Xbox/SP/animscripts/battlechatter_ai.gsc new file mode 100644 index 0000000..e386bd0 --- /dev/null +++ b/MW3/Xbox/SP/animscripts/battlechatter_ai.gsc @@ -0,0 +1,1358 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\battlechatter_ai.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 55 + * Decompile Time: 899 ms + * Timestamp: 10/27/2023 2:29:56 AM +*******************************************************************/ + +//Function Number: 1 +addtosystem(param_00) +{ + self endon("death"); + if(!animscripts/battlechatter::bcsenabled()) + { + return; + } + + if(self.chatinitialized) + { + return; + } + + if(!isdefined(self.squad.chatinitialized) || !self.squad.chatinitialized) + { + self.squad animscripts/battlechatter::func_6C4(); + } + + self.enemyclass = "infantry"; + self.calledout = []; + if(isplayer(self)) + { + self.battlechatter = 0; + self.flavorbursts = 0; + self.type = "human"; + return; + } + + if(self.type == "dog") + { + self.enemyclass = undefined; + self.battlechatter = 0; + self.flavorbursts = 0; + return; + } + + if(self.team == "neutral") + { + self.enemyclass = undefined; + self.battlechatter = 0; + self.flavorbursts = 0; + return; + } + + if(forceenglish()) + { + if(self.team == "allies") + { + self.script_battlechatter = 0; + } + else + { + self.voice = "american"; + } + } + + self.countryid = level.countryids[self.voice]; + if(isdefined(self.script_friendname)) + { + var_01 = tolower(self.script_friendname); + if(issubstr(var_01,"price")) + { + self.npcid = "pri"; + } + else if(issubstr(var_01,"mactavish") || issubstr(var_01,"soap")) + { + self.npcid = "mct"; + } + else if(issubstr(var_01,"wallcroft")) + { + self.npcid = "wcf"; + } + else if(issubstr(var_01,"griffin")) + { + self.npcid = "grf"; + } + else if(issubstr(var_01,"grinch")) + { + self.npcid = "grn"; + } + else if(issubstr(var_01,"truck")) + { + self.npcid = "trk"; + } + else if(issubstr(var_01,"sandman")) + { + self.npcid = "snd"; + } + else if(issubstr(var_01,"yuri")) + { + self.npcid = "yri"; + } + else + { + setnpcid(); + } + } + else + { + setnpcid(); + } + + thread ainameandrankwaiter(); + init_aibattlechatter(); + thread aithreadthreader(); +} + +//Function Number: 2 +forceenglish() +{ + if(!getdvarint("bcs_forceEnglish",0)) + { + return 0; + } + + switch(level.script) + { + case "pmc_strike": + return 1; + } + + return 0; +} + +//Function Number: 3 +aithreadthreader() +{ + self endon("death"); + self endon("removed from battleChatter"); + var_00 = 0.5; + wait var_00; + thread aigrenadedangerwaiter(); + thread aifolloworderwaiter(); + if(self.team == "allies") + { + wait var_00; + thread aidisplacewaiter(); + if(self.countryid == "CZ") + { + thread aihostileburstloop(); + } + } + else if((self.team == "axis" || self.team == "team3") && !isalliedcountryid(self.countryid)) + { + thread aihostileburstloop(); + } + + if(self.team == level.player.team) + { + thread player_friendlyfire_waiter(); + } + + wait var_00; + thread func_06D6(); +} + +//Function Number: 4 +isalliedcountryid(param_00) +{ + if(param_00 == "UK" || param_00 == "US" || param_00 == "NS" || param_00 == "TF" || param_00 == "SS") + { + return 1; + } + + return 0; +} + +//Function Number: 5 +setnpcid() +{ + var_00 = level.usedids[self.voice]; + var_01 = var_00.size; + var_02 = randomintrange(0,var_01); + var_03 = var_02; + for(var_04 = 0;var_04 <= var_01;var_04++) + { + if(var_00[var_02 + var_04 % var_01].count < var_00[var_03].count) + { + var_03 = var_02 + var_04 % var_01; + } + } + + thread npcidtracker(var_03); + self.npcid = var_00[var_03].npcid; +} + +//Function Number: 6 +npcidtracker(param_00) +{ + level.usedids[self.voice][param_00].count++; + common_scripts\utility::waittill_either("death","removed from battleChatter"); + if(!animscripts/battlechatter::bcsenabled()) + { + return; + } + + level.usedids[self.voice][param_00].count--; +} + +//Function Number: 7 +aihostileburstloop() +{ + self endon("death"); + self endon("removed from battleChatter"); + for(;;) + { + if(distance(self.origin,level.player.origin) < 1024) + { + if(isdefined(self.squad.membercount) && self.squad.membercount > 1) + { + addreactionevent("taunt","hostileburst"); + } + } + + wait randomfloatrange(2,5); + } +} + +//Function Number: 8 +func_06D6() +{ + self endon("death"); + self endon("removed from battleChatter"); + for(;;) + { + animscripts/battlechatter::playbattlechatter(); + wait 0.3 + randomfloat(0.2); + } +} + +//Function Number: 9 +ainameandrankwaiter() +{ + self endon("death"); + self endon("removed from battleChatter"); + for(;;) + { + self.bcname = animscripts/battlechatter::getname(); + self.bcrank = animscripts/battlechatter::getrank(); + self waittill("set name and rank"); + } +} + +//Function Number: 10 +removefromsystem(param_00) +{ + if(!isalive(self) && animscripts/battlechatter::bcsenabled()) + { + aideathfriendly(); + aideathenemy(); + } + + if(isdefined(self)) + { + self.battlechatter = 0; + self.chatinitialized = 0; + } + + self notify("removed from battleChatter"); + if(isdefined(self)) + { + self.chatqueue = undefined; + self.nextsaytime = undefined; + self.nextsaytimes = undefined; + self.isspeaking = undefined; + self.enemyclass = undefined; + self.calledout = undefined; + self.countryid = undefined; + self.npcid = undefined; + } +} + +//Function Number: 11 +init_aibattlechatter() +{ + self.chatqueue = []; + self.chatqueue["threat"] = spawnstruct(); + self.chatqueue["threat"].expiretime = 0; + self.chatqueue["threat"].priority = 0; + self.chatqueue["response"] = spawnstruct(); + self.chatqueue["response"].expiretime = 0; + self.chatqueue["response"].priority = 0; + self.chatqueue["reaction"] = spawnstruct(); + self.chatqueue["reaction"].expiretime = 0; + self.chatqueue["reaction"].priority = 0; + self.chatqueue["inform"] = spawnstruct(); + self.chatqueue["inform"].expiretime = 0; + self.chatqueue["inform"].priority = 0; + self.chatqueue["order"] = spawnstruct(); + self.chatqueue["order"].expiretime = 0; + self.chatqueue["order"].priority = 0; + self.chatqueue["custom"] = spawnstruct(); + self.chatqueue["custom"].expiretime = 0; + self.chatqueue["custom"].priority = 0; + self.nextsaytime = gettime() + 50; + self.nextsaytimes["threat"] = 0; + self.nextsaytimes["reaction"] = 0; + self.nextsaytimes["response"] = 0; + self.nextsaytimes["inform"] = 0; + self.nextsaytimes["order"] = 0; + self.nextsaytimes["custom"] = 0; + self.isspeaking = 0; + self.bcs_minpriority = 0; + self.allowedcallouts = []; + animscripts/battlechatter::addallowedthreatcallout("rpg"); + animscripts/battlechatter::addallowedthreatcallout("exposed"); + if(self.voice != "shadowcompany") + { + if(self.voice != "british" && self.voice != "pmc") + { + animscripts/battlechatter::addallowedthreatcallout("ai_obvious"); + } + + animscripts/battlechatter::addallowedthreatcallout("ai_contact_clock"); + animscripts/battlechatter::addallowedthreatcallout("ai_target_clock"); + animscripts/battlechatter::addallowedthreatcallout("ai_cardinal"); + } + + if(self.voice == "delta") + { + animscripts/battlechatter::addallowedthreatcallout("player_distance"); + animscripts/battlechatter::addallowedthreatcallout("player_target_clock_high"); + animscripts/battlechatter::addallowedthreatcallout("ai_distance"); + animscripts/battlechatter::addallowedthreatcallout("ai_target_clock_high"); + } + + if(self.team == "allies") + { + if(maps\_utility::func_6E9(level.playernameids,self.voice)) + { + animscripts/battlechatter::addallowedthreatcallout("player_contact_clock"); + animscripts/battlechatter::addallowedthreatcallout("player_target_clock"); + animscripts/battlechatter::addallowedthreatcallout("player_cardinal"); + if(self.voice != "british" && self.voice != "pmc") + { + animscripts/battlechatter::addallowedthreatcallout("player_obvious"); + } + + animscripts/battlechatter::addallowedthreatcallout("player_object_clock"); + if(self.voice != "french") + { + animscripts/battlechatter::addallowedthreatcallout("player_location"); + } + } + + if(self.voice != "french") + { + animscripts/battlechatter::addallowedthreatcallout("ai_location"); + animscripts/battlechatter::addallowedthreatcallout("generic_location"); + } + } + + if(isdefined(self.script_battlechatter) && !self.script_battlechatter) + { + self.battlechatter = 0; + } + else + { + self.battlechatter = level.battlechatter[self.team]; + } + + if(animscripts/battlechatter::voicecanburst()) + { + self.flavorbursts = 1; + } + else + { + self.flavorbursts = 0; + } + + if(level.friendlyfire_warnings) + { + maps\_utility::func_6EC(1); + } + else + { + maps\_utility::func_6EC(0); + } + + self.chatinitialized = 1; +} + +//Function Number: 12 +addthreatevent(param_00,param_01,param_02) +{ + self endon("death"); + self endon("removed from battleChatter"); + if(!animscripts/battlechatter::cansay("threat",param_00,param_02)) + { + return; + } + + if(animscripts/battlechatter::threatwasalreadycalledout(param_01) && !isplayer(param_01)) + { + return; + } + + var_03 = animscripts/battlechatter::createchatevent("threat",param_00,param_02); + switch(param_00) + { + case "infantry": + var_03.threat = param_01; + break; + } + + if(isdefined(param_01.squad)) + { + self.squad animscripts/battlechatter::func_6F2(param_01.squad.var_67E,self); + } + + self.chatqueue["threat"] = undefined; + self.chatqueue["threat"] = var_03; +} + +//Function Number: 13 +addresponseevent(param_00,param_01,param_02,param_03,param_04,param_05) +{ + thread addresponseevent_internal(param_00,param_01,param_02,param_03,param_04,param_05); +} + +//Function Number: 14 +addresponseevent_internal(param_00,param_01,param_02,param_03,param_04,param_05) +{ + self endon("death"); + self endon("removed from battleChatter"); + self endon("responseEvent_failsafe"); + thread responseevent_failsafe(param_02); + var_06 = param_02 common_scripts\utility::waittill_any_return("death","done speaking","cancel speaking"); + if(var_06 == "cancel speaking") + { + return; + } + + if(!isalive(param_02)) + { + return; + } + + if(!animscripts/battlechatter::cansay("response",param_00,param_03,param_01)) + { + return; + } + + if(!isplayer(param_02)) + { + if(animscripts/battlechatter::isusingsamevoice(param_02)) + { + return; + } + } + + var_07 = animscripts/battlechatter::createchatevent("response",param_00,param_03); + if(isdefined(param_04)) + { + var_07.reportalias = param_04; + } + + if(isdefined(param_05)) + { + var_07.location = param_05; + } + + var_07.respondto = param_02; + var_07.var_6F8 = param_01; + self.chatqueue["response"] = undefined; + self.chatqueue["response"] = var_07; +} + +//Function Number: 15 +responseevent_failsafe(param_00) +{ + self endon("death"); + self endon("removed from battleChatter"); + param_00 endon("death"); + param_00 endon("done speaking"); + param_00 endon("cancel speaking"); + wait 25; + self notify("responseEvent_failsafe"); +} + +//Function Number: 16 +addinformevent(param_00,param_01,param_02,param_03) +{ + self endon("death"); + self endon("removed from battleChatter"); + if(!animscripts/battlechatter::cansay("inform",param_00,param_03,param_01)) + { + return; + } + + var_04 = animscripts/battlechatter::createchatevent("inform",param_00,param_03); + switch(param_00) + { + case "reloading": + var_04.var_6F8 = param_01; + var_04.var_6FB = param_02; + break; + + default: + var_04.var_6F8 = param_01; + break; + } + + self.chatqueue["inform"] = undefined; + self.chatqueue["inform"] = var_04; +} + +//Function Number: 17 +addreactionevent(param_00,param_01,param_02,param_03) +{ + self endon("death"); + self endon("removed from battleChatter"); + if(!isdefined(self.chatqueue)) + { + return; + } + + var_04 = animscripts/battlechatter::createchatevent("reaction",param_00,param_03); + var_04.reactto = param_02; + var_04.var_6F8 = param_01; + self.chatqueue["reaction"] = undefined; + self.chatqueue["reaction"] = var_04; +} + +//Function Number: 18 +addorderevent(param_00,param_01,param_02,param_03) +{ + self endon("death"); + self endon("removed from battleChatter"); + if(!animscripts/battlechatter::cansay("order",param_00,param_03,param_01)) + { + return; + } + + if(isdefined(param_02) && param_02.type == "dog") + { + return; + } + + var_04 = animscripts/battlechatter::createchatevent("order",param_00,param_03); + var_04.var_6F8 = param_01; + var_04.orderto = param_02; + self.chatqueue["order"] = undefined; + self.chatqueue["order"] = var_04; +} + +//Function Number: 19 +func_0700() +{ + anim endon("battlechatter disabled"); + anim endon("squad deleted " + self.var_67E); + for(;;) + { + var_00 = undefined; + if(self.officers.size) + { + var_01 = self.officers; + } + else + { + var_01 = self.members; + } + + var_02 = []; + for(var_03 = 0;var_03 < var_01.size;var_03++) + { + if(isalive(var_01[var_03])) + { + var_02[var_02.size] = var_01[var_03]; + } + } + + if(var_02.size) + { + var_00 = maps\_utility::getclosest(level.player.origin,var_02); + var_00 aiofficerorders(); + var_00 waittill("death"); + } + + wait 3; + } +} + +//Function Number: 20 +getthreats(param_00) +{ + var_01 = []; + for(var_02 = 0;var_02 < param_00.size;var_02++) + { + if(!isdefined(param_00[var_02].enemyclass)) + { + continue; + } + + if(!threatisviable(param_00[var_02])) + { + continue; + } + + param_00[var_02].threatid = var_01.size; + var_01[var_01.size] = param_00[var_02]; + } + + var_01 = maps\_utility::get_array_of_closest(level.player.origin,var_01); + var_03 = []; + var_04 = []; + foreach(var_06 in var_01) + { + var_07 = var_06 animscripts/battlechatter::getlocation(); + if(isdefined(var_07) && !animscripts/battlechatter::location_called_out_recently(var_07)) + { + var_03[var_03.size] = var_06; + continue; + } + + var_04[var_04.size] = var_06; + } + + var_01 = common_scripts\utility::array_combine(var_03,var_04); + return var_01; +} + +//Function Number: 21 +threatisviable(param_00) +{ + var_01 = level.bcs_maxthreatdistfromplayer * level.bcs_maxthreatdistfromplayer; + if(distancesquared(level.player.origin,param_00.origin) > var_01) + { + return 0; + } + + if(!level.player animscripts/battlechatter::entinfrontarc(param_00)) + { + return 0; + } + + return 1; +} + +//Function Number: 22 +squadthreatwaiter() +{ + anim endon("battlechatter disabled"); + anim endon("squad deleted " + self.var_67E); + for(;;) + { + wait randomfloatrange(0.25,0.75); + if(self.team == "allies") + { + var_00 = getthreats(getaiarray("axis","team3")); + } + else if(self.team == "team3") + { + var_00 = getthreats(getaiarray("allies","axis")); + } + else + { + var_00 = getaiarray("allies","team3"); + var_00[var_00.size] = level.player; + } + + if(!var_00.size) + { + continue; + } + + var_01 = []; + foreach(var_03 in self.members) + { + if(!isalive(var_03)) + { + continue; + } + + if(!var_00.size) + { + var_00 = var_01; + var_01 = []; + } + + foreach(var_06, var_05 in var_00) + { + if(!isdefined(var_05)) + { + if(var_06 == 0) + { + var_00 = []; + } + + continue; + } + + if(!isalive(var_05)) + { + continue; + } + + if(!isdefined(var_05.enemyclass)) + { + continue; + } + + if(!var_03 cansee(var_05)) + { + if(isplayer(var_05)) + { + continue; + } + + if(var_05.team == level.player.team) + { + continue; + } + + if(!maps\_utility::player_can_see_ai(var_05,250)) + { + continue; + } + } + + var_03 addthreatevent(var_05.enemyclass,var_05); + var_01[var_01.size] = var_05; + var_00 = common_scripts\utility::array_remove(var_00,var_05); + break; + } + + wait 0.05; + } + } +} + +//Function Number: 23 +aideathfriendly() +{ + var_00 = self.attacker; + common_scripts\utility::array_thread(self.squad.members,::aideatheventthread); + if(isalive(var_00) && issentient(var_00) && isdefined(var_00.squad) && var_00.battlechatter) + { + if(isdefined(var_00.calledout[var_00.squad.var_67E])) + { + var_00.calledout[var_00.squad.var_67E] = undefined; + } + + if(!isdefined(var_00.enemyclass)) + { + return; + } + + if(!var_00 animscripts/battlechatter::is_in_callable_location()) + { + return; + } + + foreach(var_02 in self.squad.members) + { + if(gettime() > var_02.lastenemysighttime + 2000) + { + continue; + } + + var_02 addthreatevent(var_00.enemyclass,var_00); + } + } +} + +//Function Number: 24 +aideatheventthread() +{ + if(!isalive(self)) + { + return; + } + + self endon("death"); + self endon("removed from battleChatter"); + self notify("aiDeathEventThread"); + self endon("aiDeathEventThread"); + wait 1.5; + addreactionevent("casualty","generic",self,0.9); +} + +//Function Number: 25 +aideathenemy() +{ + var_00 = self.attacker; + if(!isalive(var_00) || !issentient(var_00) || !isdefined(var_00.squad)) + { + return; + } + + if(!isdefined(var_00.countryid) || var_00.countryid != "NS") + { + return; + } + + if(!isplayer(var_00)) + { + var_00 thread aikilleventthread(); + } +} + +//Function Number: 26 +aikilleventthread() +{ + self endon("death"); + self endon("removed from battleChatter"); + wait 1.5; + addinformevent("killfirm","generic"); +} + +//Function Number: 27 +aiofficerorders() +{ + self endon("death"); + self endon("removed from battleChatter"); + if(!isdefined(self.squad.chatinitialized)) + { + self.squad waittill("squad chat initialized"); + } + + for(;;) + { + if(getdvar("bcs_enable","on") == "off") + { + wait 1; + continue; + } + + func_0726(); + wait randomfloatrange(3,6); + } +} + +//Function Number: 28 +aigrenadedangerwaiter() +{ + self endon("death"); + self endon("removed from battleChatter"); + for(;;) + { + self waittill("grenade danger",var_00); + if(getdvar("bcs_enable","on") == "off") + { + continue; + } + + if(!isdefined(var_00) || var_00.model != "projectile_m67fraggrenade") + { + continue; + } + + if(distance(var_00.origin,level.player.origin) < 512) + { + addinformevent("incoming","grenade"); + } + } +} + +//Function Number: 29 +aidisplacewaiter() +{ + self endon("death"); + self endon("removed from battleChatter"); + for(;;) + { + self waittill("trigger"); + if(getdvar("bcs_enable","on") == "off") + { + continue; + } + + if(gettime() < self.a.paintime + 4000) + { + continue; + } + + addresponseevent("ack","yes",level.player,1); + } +} + +//Function Number: 30 +evaluatemoveevent(param_00) +{ + self endon("death"); + self endon("removed from battleChatter"); + if(!animscripts/battlechatter::bcsenabled()) + { + return; + } + + if(!isdefined(self.node)) + { + return; + } + + var_01 = distance(self.origin,self.node.origin); + if(var_01 < 512) + { + return; + } + + if(!animscripts/battlechatter::isnodecoverorconceal()) + { + return; + } + + if(!nationalityokformoveorder()) + { + return; + } + + var_02 = animscripts/battlechatter::getresponder(24,1024,"response"); + if(self.team != "axis" && self.team != "team3") + { + if(!isdefined(var_02)) + { + var_02 = level.player; + } + else if(randomint(100) < level.eventchance["moveEvent"]["ordertoplayer"]) + { + var_02 = level.player; + } + } + + if(self.combattime > 0) + { + if(randomint(100) < level.eventchance["moveEvent"]["coverme"]) + { + addorderevent("action","coverme",var_02); + return; + } + + addorderevent("move","combat",var_02); + return; + } + + if(nationalityokformoveordernoncombat()) + { + addorderevent("move","noncombat",var_02); + } +} + +//Function Number: 31 +nationalityokformoveorder() +{ + if(self.countryid == "SS") + { + return 0; + } + + return 1; +} + +//Function Number: 32 +nationalityokformoveordernoncombat() +{ + if(self.countryid == "US") + { + return 1; + } + + return 0; +} + +//Function Number: 33 +aifolloworderwaiter() +{ + self endon("death"); + self endon("removed from battleChatter"); + for(;;) + { + level waittill("follow order",var_00); + if(!animscripts/battlechatter::bcsenabled()) + { + return; + } + + if(var_00.team != self.team) + { + continue; + } + + if(distance(self.origin,var_00.origin) < 600) + { + addresponseevent("ack","yes",var_00,0.9); + } + } +} + +//Function Number: 34 +player_friendlyfire_waiter() +{ + self endon("death"); + self endon("removed from battleChatter"); + thread func_071E(); + for(;;) + { + self waittill("bulletwhizby",var_00,var_01); + if(!animscripts/battlechatter::bcsenabled()) + { + continue; + } + + if(!isplayer(var_00)) + { + continue; + } + + if(friendlyfire_whizby_distances_valid(var_00,var_01)) + { + player_friendlyfire_addreactionevent(); + wait 3; + } + } +} + +//Function Number: 35 +player_friendlyfire_addreactionevent() +{ + addreactionevent("friendlyfire",undefined,level.player,1); +} + +//Function Number: 36 +func_071E() +{ + self endon("death"); + self endon("removed from battleChatter"); + for(;;) + { + self waittill("damage",var_00,var_01,var_02,var_03,var_04); + if(isdefined(var_01) && isplayer(var_01)) + { + if(damage_is_valid_for_friendlyfire_warning(var_04)) + { + player_friendlyfire_addreactionevent(); + } + } + } +} + +//Function Number: 37 +damage_is_valid_for_friendlyfire_warning(param_00) +{ + if(!isdefined(param_00)) + { + return 0; + } + + switch(param_00) + { + case "MOD_IMPACT": + case "MOD_CRUSH": + case "MOD_MELEE": + case "MOD_GRENADE_SPLASH": + case "MOD_GRENADE": + return 0; + } + + return 1; +} + +//Function Number: 38 +friendlyfire_whizby_distances_valid(param_00,param_01) +{ + var_02 = 65536; + var_03 = 42; + if(distancesquared(param_00.origin,self.origin) < var_02) + { + return 0; + } + + if(param_01 > var_03) + { + return 0; + } + + return 1; +} + +//Function Number: 39 +evaluatereloadevent() +{ + self endon("death"); + self endon("removed from battleChatter"); + if(!animscripts/battlechatter::bcsenabled()) + { + return; + } + + addinformevent("reloading","generic"); +} + +//Function Number: 40 +evaluatemeleeevent() +{ + self endon("death"); + self endon("removed from battleChatter"); + if(!animscripts/battlechatter::bcsenabled()) + { + return 0; + } + + if(!isdefined(self.enemy)) + { + return 0; + } + + return 0; +} + +//Function Number: 41 +evaluatefiringevent() +{ + self endon("death"); + self endon("removed from battleChatter"); + if(!animscripts/battlechatter::bcsenabled()) + { + return; + } + + if(!isdefined(self.enemy)) + { + } +} + +//Function Number: 42 +evaluatesuppressionevent() +{ + self endon("death"); + self endon("removed from battleChatter"); + if(!animscripts/battlechatter::bcsenabled()) + { + return; + } + + if(!self.suppressed) + { + return; + } + + addinformevent("suppressed","generic"); +} + +//Function Number: 43 +evaluateattackevent(param_00) +{ + self endon("death"); + self endon("removed from battleChatter"); + if(!animscripts/battlechatter::bcsenabled()) + { + return; + } + + addinformevent("attack","grenade"); +} + +//Function Number: 44 +func_0726() +{ + self endon("death"); + self endon("removed from battleChatter"); + if(self.squad.squadstates["combat"].isactive) + { + addsituationalcombatorder(); + } +} + +//Function Number: 45 +addsituationalcombatorder() +{ + self endon("death"); + self endon("removed from battleChatter"); + var_00 = self.squad; + var_00 animscripts/squadmanager::updatestates(); + if(var_00.squadstates["suppressed"].isactive) + { + if(var_00.squadstates["cover"].isactive) + { + var_01 = animscripts/battlechatter::getresponder(96,512,"response"); + addorderevent("action","grenade",var_01); + } + else + { + addorderevent("displace","generic"); + } + } + else if(var_00.squadstates["combat"].isactive) + { + if(self.countryid != "SS") + { + var_01 = animscripts/battlechatter::getresponder(24,1024,"response"); + addorderevent("action","suppress",var_01); + } + } +} + +//Function Number: 46 +custom_battlechatter_init_valid_phrases() +{ + var_00 = []; + level.custombcs_validphrases = var_41; +} + +//Function Number: 47 +custom_battlechatter_validate_phrase(param_00) +{ + var_01 = 0; + foreach(var_03 in level.custombcs_validphrases) + { + if(var_03 == param_00) + { + var_01 = 1; + break; + } + } + + return var_01; +} + +//Function Number: 48 +custom_battlechatter_internal(param_00) +{ + if(!isdefined(level.custombcs_validphrases)) + { + custom_battlechatter_init_valid_phrases(); + } + + param_00 = tolower(param_00); + var_01 = level.bcprintfailprefix + "custom battlechatter phrase \'" + param_00 + "\' isn\'t valid. look at _utility::custom_battlechatter_init_valid_phrases(), or the util script documentation for custom_battlechatter(), for a list of valid phrases."; + var_02 = level.bcprintfailprefix + "AI at origin " + self.origin + "wasn\'t able to play custom battlechatter because his nationality is \'" + self.countryid + "\'."; + if(!custom_battlechatter_validate_phrase(param_00)) + { + return 0; + } + + var_03 = animscripts/battlechatter::getresponder(24,512,"response"); + begincustomevent(); + switch(param_00) + { + case "order_move_combat": + if(!nationalityokformoveorder()) + { + return 0; + } + + animscripts/battlechatter::tryorderto(self.customchatphrase,var_03); + addmovecombataliasex(); + break; + + case "order_move_noncombat": + if(!nationalityokformoveordernoncombat()) + { + return 0; + } + + addmovenoncombataliasex(); + break; + + case "order_action_coverme": + animscripts/battlechatter::tryorderto(self.customchatphrase,var_03); + addactioncovermealiasex(); + break; + + case "inform_reloading": + addinformreloadingaliasex(); + break; + + default: + return 0; + } + + endcustomevent(2000); + return 1; +} + +//Function Number: 49 +begincustomevent() +{ + if(!animscripts/battlechatter::bcsenabled()) + { + return; + } + + self.customchatphrase = animscripts/battlechatter::createchatphrase(); +} + +//Function Number: 50 +addactioncovermealiasex() +{ + self.customchatphrase animscripts/battlechatter::addorderalias("action","coverme"); +} + +//Function Number: 51 +addmovecombataliasex() +{ + self.customchatphrase animscripts/battlechatter::addorderalias("move","combat"); +} + +//Function Number: 52 +addmovenoncombataliasex() +{ + self.customchatphrase animscripts/battlechatter::addorderalias("move","noncombat"); +} + +//Function Number: 53 +addinformreloadingaliasex() +{ + self.customchatphrase animscripts/battlechatter::addinformalias("reloading","generic"); +} + +//Function Number: 54 +addnamealiasex(param_00) +{ + if(!animscripts/battlechatter::bcsenabled()) + { + return; + } + + self.customchatphrase animscripts/battlechatter::func_738(param_00); +} + +//Function Number: 55 +endcustomevent(param_00,param_01) +{ + if(!animscripts/battlechatter::bcsenabled()) + { + return; + } + + var_02 = animscripts/battlechatter::createchatevent("custom","generic",1); + if(isdefined(param_00)) + { + var_02.expiretime = gettime() + param_00; + } + + if(isdefined(param_01)) + { + var_02.type = param_01; + } + else + { + var_02.type = "custom"; + } + + self.chatqueue["custom"] = undefined; + self.chatqueue["custom"] = var_02; +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/civilian.gsc b/MW3/Xbox/SP/animscripts/civilian.gsc new file mode 100644 index 0000000..ab3f33a --- /dev/null +++ b/MW3/Xbox/SP/animscripts/civilian.gsc @@ -0,0 +1,69 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\civilian.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 4 + * Decompile Time: 74 ms + * Timestamp: 10/27/2023 2:29:56 AM +*******************************************************************/ + +//Function Number: 1 +func_3B0E() +{ + self endon("killanimscript"); + self clearanim(%root,0.2); + if(animscripts/utility::isincombat()) + { + var_00 = "idle_combat"; + } + else + { + var_00 = "idle_noncombat"; + } + + var_01 = undefined; + if(isdefined(self.animname) && isdefined(level.scr_anim[self.animname])) + { + var_01 = level.scr_anim[self.animname][var_00]; + } + + if(!isdefined(var_01)) + { + if(!isdefined(level.scr_anim["default_civilian"])) + { + return; + } + + var_01 = level.scr_anim["default_civilian"][var_00]; + } + + thread func_3B0F(); + for(;;) + { + self setflaggedanimknoball("idle",common_scripts\utility::random(var_01),%root,1,0.2,1); + self waittillmatch("end","idle"); + } +} + +//Function Number: 2 +func_3B0F() +{ + self endon("killanimscript"); + while(!isdefined(self.var_3B10)) + { + wait 1; + } +} + +//Function Number: 3 +stop() +{ + func_3B0E(); +} + +//Function Number: 4 +func_3B12() +{ + return level.civilianflashedarray[randomint(level.civilianflashedarray.size)]; +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/combat.gsc b/MW3/Xbox/SP/animscripts/combat.gsc new file mode 100644 index 0000000..eeec71b --- /dev/null +++ b/MW3/Xbox/SP/animscripts/combat.gsc @@ -0,0 +1,1533 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\combat.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 62 + * Decompile Time: 1009 ms + * Timestamp: 10/27/2023 2:29:59 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(isdefined(self.no_ai)) + { + return; + } + + if(isdefined(self.var_89E)) + { + animscripts/snowmobile::main(); + return; + } + + if(isdefined(self.custom_animscript_table)) + { + if(isdefined(self.custom_animscript_table["combat"])) + { + [[ self.custom_animscript_table["combat"] ]](); + return; + } + } + + self endon("killanimscript"); + [[ self.exception["exposed"] ]](); + animscripts/utility::initialize("combat"); + self.a.var_CCA = undefined; + if(isdefined(self.node) && self.node.type == "Ambush" && self nearnode(self.node)) + { + self.ambushnode = self.node; + } + + transitiontocombat(); + do_friendly_fire_reaction(); + animscripts/stop::specialidleloop(); + setup(); + exposedcombatmainloop(); + self notify("stop_deciding_how_to_shoot"); +} + +//Function Number: 2 +end_script() +{ + self.ambushnode = undefined; +} + +//Function Number: 3 +do_friendly_fire_reaction() +{ + if(self.team != "allies") + { + return; + } + + if(self ismovesuppressed() && self.prevscript == "move" && self.a.var_911 == "stand" && !isdefined(self.disablefriendlyfirereaction)) + { + if(isdefined(self.enemy) && distancesquared(self.origin,self.enemy.origin) < squared(128)) + { + return; + } + + self animmode("zonly_physics"); + self setflaggedanimknoballrestart("react",%surprise_stop_v1,%root,1,0.2,self.animplaybackrate); + animscripts/shared::donotetracks("react"); + } +} + +//Function Number: 4 +transitiontocombat() +{ + if(isdefined(self.specialidleanim) || isdefined(self.customidleanimset)) + { + return; + } + + if(isdefined(self.enemy) && distancesquared(self.origin,self.enemy.origin) < 262144) + { + return; + } + + if(self.prevscript == "stop" && !animscripts/utility::iscqbwalking() && self.a.var_911 == "stand") + { + self animmode("zonly_physics"); + self setflaggedanimknoballrestart("transition",%casual_stand_idle_trans_out,%root,1,0.2,1.2 * self.animplaybackrate); + animscripts/shared::donotetracks("transition"); + } +} + +//Function Number: 5 +func_0CF3() +{ + if(self.a.var_911 == "stand") + { + animscripts/animset::set_animarray_standing(); + return; + } + + if(self.a.var_911 == "crouch") + { + animscripts/animset::set_animarray_crouching(); + return; + } + + if(self.a.var_911 == "prone") + { + animscripts/animset::set_animarray_prone(); + return; + } +} + +//Function Number: 6 +setup() +{ + if(animscripts/utility::usingsidearm() && self isstanceallowed("stand")) + { + transitionto("stand"); + } + + func_0CF3(); + set_aim_and_turn_limits(); + thread stopshortly(); + self.previouspitchdelta = 0; + self clearanim(%root,0.2); + animscripts/combat_utility::setupaim(0.2); + thread animscripts/combat_utility::aimidlethread(); + self.a.meleestate = "aim"; + func_0D2D(); +} + +//Function Number: 7 +stopshortly() +{ + self endon("killanimscript"); + wait 0.2; + self.a.movement = "stop"; +} + +//Function Number: 8 +set_aim_and_turn_limits() +{ + self setdefaultaimlimits(); + if(self.a.var_911 == "stand") + { + self.upaimlimit = 60; + self.downaimlimit = -60; + } + + self.turnthreshold = self.defaultturnthreshold; +} + +//Function Number: 9 +setupexposedcombatloop() +{ + thread animscripts/track::trackshootentorpos(); + thread reacquirewhennecessary(); + thread animscripts/shoot_behavior::decidewhatandhowtoshoot("normal"); + thread watchshootentvelocity(); + resetgiveuponenemytime(); + if(isdefined(self.a.magicreloadwhenreachenemy)) + { + animscripts/weaponlist::refillclip(); + self.a.magicreloadwhenreachenemy = undefined; + } + + self.a.dontcrouchtime = gettime() + randomintrange(500,1500); +} + +//Function Number: 10 +func_0CFE(param_00) +{ + if(animscripts/utility::usingrocketlauncher() && param_00 < 262144 || self.a.rockets < 1) + { + if(self.a.var_911 != "stand" && self.a.var_911 != "crouch") + { + transitionto("crouch"); + } + + if(self.a.var_911 == "stand") + { + animscripts/shared::throwdownweapon(%rpg_stand_throw); + } + else + { + animscripts/shared::throwdownweapon(%rpg_crouch_throw); + } + + self clearanim(%root,0.2); + animscripts/combat_utility::endfireandanimidlethread(); + func_0CF3(); + animscripts/combat_utility::startfireandaimidlethread(); + return 1; + } + + return 0; +} + +//Function Number: 11 +exposedcombatcheckstance(param_00) +{ + if(self.a.var_911 != "stand" && self isstanceallowed("stand")) + { + if(param_00 < 81225) + { + transitionto("stand"); + return 1; + } + + if(func_0D0B()) + { + return 1; + } + } + + if(param_00 > 262144 && self.a.var_911 != "crouch" && self isstanceallowed("crouch") && !animscripts/utility::usingsidearm() && !isdefined(self.heat) && gettime() >= self.a.dontcrouchtime && lengthsquared(self.var_96C) < 10000) + { + if(!isdefined(self.shootpos) || sighttracepassed(self.origin + (0,0,36),self.shootpos,0,undefined)) + { + transitionto("crouch"); + return 1; + } + } + + return 0; +} + +//Function Number: 12 +func_0D01(param_00) +{ + if(!animscripts/utility::usingsidearm()) + { + if(isdefined(self.forcesidearm) && self.a.var_911 == "stand") + { + if(tryusingsidearm()) + { + return 1; + } + } + + if(animscripts/combat_utility::issniper() && param_00 < 167772.2) + { + if(tryusingsidearm()) + { + return 1; + } + } + } + + if(animscripts/combat_utility::needtoreload(0)) + { + if(!animscripts/utility::usingsidearm() && common_scripts\utility::cointoss() && !animscripts/utility::usingrocketlauncher() && animscripts/utility::usingprimary() && param_00 < 167772.2 && self isstanceallowed("stand")) + { + if(self.a.var_911 != "stand") + { + transitionto("stand"); + return 1; + } + + if(tryusingsidearm()) + { + return 1; + } + } + + if(exposedreload(0)) + { + return 1; + } + } + + return 0; +} + +//Function Number: 13 +exposedcombatcheckputawaypistol(param_00) +{ + if(animscripts/utility::usingsidearm() && self.a.var_911 == "stand" && !isdefined(self.forcesidearm)) + { + if(param_00 > 262144 || self.combatmode == "ambush_nodes_only" && !isdefined(self.enemy) || !self cansee(self.enemy)) + { + switchtolastweapon(%pistol_stand_switch); + } + } +} + +//Function Number: 14 +exposedcombatpositionadjust() +{ + if(isdefined(self.heat) && self nearclaimnodeandangle()) + { + self safeteleport(self.nodeoffsetpos,self.node.angles); + } +} + +//Function Number: 15 +exposedcombatneedtoturn() +{ + if(func_0D0C()) + { + var_00 = 0.25; + if(isdefined(self.shootent) && !issentient(self.shootent)) + { + var_00 = 1.5; + } + + var_01 = animscripts/shared::getpredictedaimyawtoshootentorpos(var_00); + if(turntofacerelativeyaw(var_01)) + { + return 1; + } + } + + return 0; +} + +//Function Number: 16 +exposedcombatmainloop() +{ + self endon("killanimscript"); + self endon("combat_restart"); + setupexposedcombatloop(); + self animmode("zonly_physics",0); + self orientmode("face angle",self.angles[1]); + for(;;) + { + if(animscripts/utility::usingrocketlauncher()) + { + self.deathfunction = undefined; + } + + animscripts/utility::isincombat(); + if(waitforstancechange()) + { + continue; + } + + trymelee(); + exposedcombatpositionadjust(); + if(!isdefined(self.shootpos)) + { + func_0D0E(); + if(!isdefined(self.enemy)) + { + var_00 = 1; + } + + continue; + } + + resetgiveuponenemytime(); + var_01 = lengthsquared(self.origin - self.shootpos); + if(func_0CFE(var_01)) + { + continue; + } + + if(exposedcombatneedtoturn()) + { + continue; + } + + if(considerthrowgrenade()) + { + continue; + } + + if(func_0D01(var_01)) + { + continue; + } + + if(animscripts/utility::usingrocketlauncher() && self.a.var_911 != "crouch" && randomfloat(1) > 0.65) + { + self.deathfunction = ::func_0D48; + } + + exposedcombatcheckputawaypistol(var_01); + if(exposedcombatcheckstance(var_01)) + { + continue; + } + + if(animscripts/combat_utility::func_CCF()) + { + shootuntilneedtoturn(); + animscripts/combat_utility::hidefireshowaimidle(); + continue; + } + + func_0D0A(); + } +} + +//Function Number: 17 +func_0D0A() +{ + if(!isdefined(self.enemy) || !self cansee(self.enemy)) + { + self endon("enemy"); + self endon("shoot_behavior_change"); + wait 0.2 + randomfloat(0.1); + self waittill("do_slow_things"); + return; + } + + wait 0.05; +} + +//Function Number: 18 +func_0D0B() +{ + if(isdefined(self.enemy) && !self cansee(self.enemy) || !self canshootenemy() && sighttracepassed(self.origin + (0,0,64),self.enemy getshootatpos(),0,undefined)) + { + self.a.dontcrouchtime = gettime() + 3000; + transitionto("stand"); + return 1; + } + + return 0; +} + +//Function Number: 19 +func_0D0C() +{ + var_00 = self.shootpos; + if(!isdefined(var_00)) + { + return 0; + } + + var_01 = self.angles[1] - vectortoyaw(var_00 - self.origin); + var_02 = distancesquared(self.origin,var_00); + if(var_02 < 65536) + { + var_03 = sqrt(var_02); + if(var_03 > 3) + { + var_01 = var_01 + asin(-3 / var_03); + } + } + + return animscripts/utility::absangleclamp180(var_01) > self.turnthreshold; +} + +//Function Number: 20 +waitforstancechange() +{ + var_00 = self.a.var_911; + if(isdefined(self.a.onback)) + { + wait 0.1; + return 1; + } + + if(var_00 == "stand" && isdefined(self.heat)) + { + return 0; + } + + if(!self isstanceallowed(var_00)) + { + var_01 = "crouch"; + if(var_00 == "crouch") + { + var_01 = "stand"; + } + + if(self isstanceallowed(var_01)) + { + if(var_00 == "stand" && animscripts/utility::usingsidearm()) + { + return 0; + } + + transitionto(var_01); + return 1; + } + } + + return 0; +} + +//Function Number: 21 +func_0D0E() +{ + if(self.a.var_911 != "stand" && self isstanceallowed("stand") && func_0D0B()) + { + return 1; + } + + var_00 = gettime(); + self.a.dontcrouchtime = var_00 + 1500; + if(isdefined(self.group) && isdefined(self.group.forward)) + { + var_01 = angleclamp180(self.angles[1] - vectortoyaw(self.group.forward)); + if(turntofacerelativeyaw(var_01)) + { + return 1; + } + } + + if(isdefined(self.node) && isdefined(level.iscombatscriptnode[self.node.type])) + { + var_01 = angleclamp180(self.angles[1] - self.node.angles[1]); + if(turntofacerelativeyaw(var_01)) + { + return 1; + } + } + else if((isdefined(self.enemy) && self seerecently(self.enemy,2)) || var_00 > self.a.scriptstarttime + 1200) + { + var_01 = undefined; + var_02 = self getanglestolikelyenemypath(); + if(isdefined(var_02)) + { + var_01 = angleclamp180(self.angles[1] - var_02[1]); + } + else if(isdefined(self.node)) + { + var_01 = angleclamp180(self.angles[1] - self.node.angles[1]); + } + else if(isdefined(self.enemy)) + { + var_02 = vectortoangles(self lastknownpos(self.enemy) - self.origin); + var_01 = angleclamp180(self.angles[1] - var_02[1]); + } + + if(isdefined(var_01) && turntofacerelativeyaw(var_01)) + { + return 1; + } + } + else if(isdefined(self.heat) && self nearclaimnode()) + { + var_01 = angleclamp180(self.angles[1] - self.node.angles[1]); + if(turntofacerelativeyaw(var_01)) + { + return 1; + } + } + + if(considerthrowgrenade()) + { + return 1; + } + + var_03 = self.a.nextgiveuponenemytime < var_00; + var_04 = 0; + if(var_03) + { + var_04 = 0.99999; + } + + if(exposedreload(var_04)) + { + return 1; + } + + if(var_03 && animscripts/utility::usingsidearm()) + { + if(switchtolastweapon(%pistol_stand_switch)) + { + return 1; + } + } + + cantseeenemywait(); + return 1; +} + +//Function Number: 22 +cantseeenemywait() +{ + self endon("shoot_behavior_change"); + wait 0.4 + randomfloat(0.4); + self waittill("do_slow_things"); +} + +//Function Number: 23 +resetgiveuponenemytime() +{ + self.a.nextgiveuponenemytime = gettime() + randomintrange(2000,4000); +} + +//Function Number: 24 +turntofacerelativeyaw(param_00) +{ + if(param_00 < 0 - self.turnthreshold) + { + if(self.a.var_911 == "prone") + { + animscripts/cover_prone::proneto("crouch"); + animscripts/animset::set_animarray_crouching(); + } + + doturn("left",0 - param_00); + maps\_gameskill::didsomethingotherthanshooting(); + return 1; + } + + if(param_00 > self.turnthreshold) + { + if(self.a.var_911 == "prone") + { + animscripts/cover_prone::proneto("crouch"); + animscripts/animset::set_animarray_crouching(); + } + + doturn("right",param_00); + maps\_gameskill::didsomethingotherthanshooting(); + return 1; + } + + return 0; +} + +//Function Number: 25 +watchshootentvelocity() +{ + self endon("killanimscript"); + self.var_96C = (0,0,0); + var_00 = undefined; + var_01 = self.origin; + var_02 = 0.15; + for(;;) + { + if(isdefined(self.shootent) && isdefined(var_00) && self.shootent == var_00) + { + var_03 = self.shootent.origin; + self.var_96C = var_03 - var_01 * 1 / var_02; + var_01 = var_03; + } + else + { + if(isdefined(self.shootent)) + { + var_01 = self.shootent.origin; + } + else + { + var_01 = self.origin; + } + + var_00 = self.shootent; + self.var_96C = (0,0,0); + } + + wait var_02; + } +} + +//Function Number: 26 +shouldswapshotgun() +{ + return 0; +} + +//Function Number: 27 +donotetrackswithendon(param_00) +{ + self endon("killanimscript"); + animscripts/shared::donotetracks(param_00); +} + +//Function Number: 28 +faceenemyimmediately() +{ + self endon("killanimscript"); + self notify("facing_enemy_immediately"); + self endon("facing_enemy_immediately"); + var_00 = 5; + for(;;) + { + var_01 = 0 - animscripts/utility::getyawtoenemy(); + if(abs(var_01) < 2) + { + break; + } + + if(abs(var_01) > var_00) + { + var_01 = var_00 * common_scripts\utility::sign(var_01); + } + + self orientmode("face angle",self.angles[1] + var_01); + wait 0.05; + } + + self orientmode("face current"); + self notify("can_stop_turning"); +} + +//Function Number: 29 +isdeltaallowed(param_00) +{ + var_01 = getmovedelta(param_00,0,1); + var_02 = self localtoworldcoords(var_01); + return self isingoal(var_02) && self maymovetopoint(var_02); +} + +//Function Number: 30 +isanimdeltaingoal(param_00) +{ + var_01 = getmovedelta(param_00,0,1); + var_02 = self localtoworldcoords(var_01); + return self isingoal(var_02); +} + +//Function Number: 31 +doturn(param_00,param_01) +{ + var_02 = isdefined(self.shootpos); + var_03 = 1; + var_04 = 0.2; + var_05 = isdefined(self.enemy) && !isdefined(self.turntomatchnode) && self seerecently(self.enemy,2) && distancesquared(self.enemy.origin,self.origin) < 262144; + if(self.a.scriptstarttime + 500 > gettime()) + { + var_04 = 0.25; + if(var_05) + { + thread faceenemyimmediately(); + } + } + else if(var_05) + { + var_06 = 1 - distance(self.enemy.origin,self.origin) / 512; + var_03 = 1 + var_06 * 1; + if(var_03 > 2) + { + var_04 = 0.05; + } + else if(var_03 > 1.3) + { + var_04 = 0.1; + } + else + { + var_04 = 0.15; + } + } + + var_07 = 0; + if(param_01 > 157.5) + { + var_07 = 180; + } + else if(param_01 > 112.5) + { + var_07 = 135; + } + else if(param_01 > 67.5) + { + var_07 = 90; + } + else + { + var_07 = 45; + } + + var_08 = "turn_" + param_00 + "_" + var_07; + var_09 = animscripts/utility::animarray(var_08); + if(isdefined(self.turntomatchnode)) + { + self animmode("angle deltas",0); + } + else if(isdefined(self.node) && isdefined(level.iscombatpathnode[self.node.type]) && distancesquared(self.origin,self.node.origin) < 256) + { + self animmode("angle deltas",0); + } + else if(isanimdeltaingoal(var_09)) + { + self animmode("zonly_physics",0); + } + else + { + self animmode("angle deltas",0); + } + + self setanimknoball(%exposed_aiming,%body,1,var_04); + if(!isdefined(self.turntomatchnode)) + { + turningaimingon(var_04); + } + + self setanimlimited(%turn,1,var_04); + if(isdefined(self.heat)) + { + var_03 = min(1,var_03); + } + else if(isdefined(self.turntomatchnode)) + { + var_03 = max(1.5,var_03); + } + + self setflaggedanimknoblimitedrestart("turn",var_09,1,var_04,var_03); + self notify("turning"); + if(var_02 && !isdefined(self.turntomatchnode) && !isdefined(self.heat)) + { + thread func_0D20(); + } + + doturnnotetracks(); + self setanimlimited(%turn,0,0.2); + if(!isdefined(self.turntomatchnode)) + { + turningaimingoff(0.2); + } + + if(!isdefined(self.turntomatchnode)) + { + self clearanim(%turn,0.2); + self setanimknob(%exposed_aiming,1,0.2,1); + } + else + { + self clearanim(%exposed_modern,0.3); + } + + if(isdefined(self.turnlastresort)) + { + self.turnlastresort = undefined; + thread faceenemyimmediately(); + } + + self animmode("zonly_physics",0); + self notify("done turning"); +} + +//Function Number: 32 +doturnnotetracks() +{ + self endon("can_stop_turning"); + animscripts/shared::donotetracks("turn"); +} + +//Function Number: 33 +func_0D1D() +{ + self endon("killanimscript"); + self endon("done turning"); + var_00 = self.angles[1]; + wait 0.3; + if(self.angles[1] == var_00) + { + self notify("turning_isnt_working"); + self.turnlastresort = 1; + } +} + +//Function Number: 34 +turningaimingon(param_00) +{ + self setanimlimited(animscripts/utility::animarray("straight_level"),0,param_00); + self setanim(%add_idle,0,param_00); + if(!animscripts/utility::weapon_pump_action_shotgun()) + { + self clearanim(%add_fire,0.2); + } +} + +//Function Number: 35 +turningaimingoff(param_00) +{ + self setanimlimited(animscripts/utility::animarray("straight_level"),1,param_00); + self setanim(%add_idle,1,param_00); +} + +//Function Number: 36 +func_0D20() +{ + self endon("killanimscript"); + self endon("done turning"); + if(animscripts/utility::usingrocketlauncher()) + { + return; + } + + animscripts/combat_utility::shootuntilshootbehaviorchange(); + self clearanim(%add_fire,0.2); +} + +//Function Number: 37 +shootuntilneedtoturn() +{ + thread watchforneedtoturnortimeout(); + self endon("need_to_turn"); + thread keeptryingtomelee(); + animscripts/combat_utility::shootuntilshootbehaviorchange(); + self notify("stop_watching_for_need_to_turn"); + self notify("stop_trying_to_melee"); +} + +//Function Number: 38 +watchforneedtoturnortimeout() +{ + self endon("killanimscript"); + self endon("stop_watching_for_need_to_turn"); + var_00 = gettime() + 4000 + randomint(2000); + for(;;) + { + if(gettime() > var_00 || func_0D0C()) + { + self notify("need_to_turn"); + break; + } + + wait 0.1; + } +} + +//Function Number: 39 +considerthrowgrenade() +{ + if(!animscripts/combat_utility::func_D23()) + { + return 0; + } + + if(isdefined(level.throwgrenadeatplayerasap) && isalive(level.player)) + { + if(tryexposedthrowgrenade(level.player,200)) + { + return 1; + } + } + + if(isdefined(self.enemy) && tryexposedthrowgrenade(self.enemy,self.minexposedgrenadedist)) + { + return 1; + } + + self.a.nextgrenadetrytime = gettime() + 500; + return 0; +} + +//Function Number: 40 +tryexposedthrowgrenade(param_00,param_01) +{ + var_02 = 0; + if(isdefined(self.dontevershoot) || isdefined(param_00.dontattackme)) + { + return 0; + } + + if(!isdefined(self.a.array["exposed_grenade"])) + { + return 0; + } + + var_03 = param_00.origin; + if(!self cansee(param_00)) + { + if(isdefined(self.enemy) && param_00 == self.enemy && isdefined(self.shootpos)) + { + var_03 = self.shootpos; + } + } + + if(!self cansee(param_00)) + { + param_01 = 100; + } + + if(distancesquared(self.origin,var_03) > param_01 * param_01 && self.a.var_911 == self.a.grenadethrowpose) + { + animscripts/combat_utility::setactivegrenadetimer(param_00); + if(!animscripts/combat_utility::grenadecooldownelapsed(param_00)) + { + return 0; + } + + var_04 = animscripts/utility::getyawtospot(var_03); + if(abs(var_04) < 60) + { + var_05 = []; + foreach(var_07 in self.a.array["exposed_grenade"]) + { + if(isdeltaallowed(var_07)) + { + var_05[var_05.size] = var_07; + } + } + + if(var_05.size > 0) + { + self setanim(%exposed_aiming,0,0.1); + self animmode("zonly_physics"); + animscripts/track::setanimaimweight(0,0); + var_02 = animscripts/combat_utility::trygrenade(param_00,var_05[randomint(var_05.size)]); + self setanim(%exposed_aiming,1,0.1); + if(var_02) + { + animscripts/track::setanimaimweight(1,0.5); + } + else + { + animscripts/track::setanimaimweight(1,0); + } + } + } + } + + if(var_02) + { + maps\_gameskill::didsomethingotherthanshooting(); + } + + return var_02; +} + +//Function Number: 41 +transitionto(param_00) +{ + if(param_00 == self.a.var_911) + { + return; + } + + var_01 = self.a.var_911 + "_2_" + param_00; + if(!isdefined(self.a.array)) + { + return; + } + + var_02 = self.a.array[var_01]; + if(!isdefined(var_02)) + { + return; + } + + self clearanim(%root,0.3); + animscripts/combat_utility::endfireandanimidlethread(); + if(param_00 == "stand") + { + var_03 = 2; + } + else + { + var_03 = 1.5; + } + + if(!animhasnotetrack(var_02,"anim_pose = \" + param_00 + "\")) + { + } + + self setflaggedanimknoballrestart("trans",var_02,%body,1,0.2,var_03); + var_04 = getanimlength(var_02) / var_03; + var_05 = var_04 - 0.3; + if(var_05 < 0.2) + { + var_05 = 0.2; + } + + animscripts/notetracks::donotetracksfortime(var_05,"trans"); + self.a.var_911 = param_00; + func_0CF3(); + animscripts/combat_utility::startfireandaimidlethread(); + maps\_gameskill::didsomethingotherthanshooting(); +} + +//Function Number: 42 +keeptryingtomelee() +{ + self endon("killanimscript"); + self endon("stop_trying_to_melee"); + self endon("done turning"); + self endon("need_to_turn"); + self endon("shoot_behavior_change"); + for(;;) + { + wait 0.2 + randomfloat(0.3); + if(isdefined(self.enemy)) + { + if(isplayer(self.enemy)) + { + var_00 = -25536; + } + else + { + var_00 = 10000; + } + + if(distancesquared(self.enemy.origin,self.origin) < var_00) + { + trymelee(); + } + } + } +} + +//Function Number: 43 +trymelee() +{ + animscripts/melee::melee_tryexecuting(); +} + +//Function Number: 44 +func_0D2D() +{ + if(isdefined(self.nomeleechargedelay)) + { + return; + } + + if(isplayer(self.enemy)) + { + return; + } + + animscripts/melee::melee_standard_delaystandardcharge(self.enemy); +} + +//Function Number: 45 +exposedreload(param_00) +{ + if(animscripts/combat_utility::needtoreload(param_00)) + { + self.a.exposedreloading = 1; + animscripts/combat_utility::endfireandanimidlethread(); + var_01 = undefined; + if(isdefined(self.specialreloadanimfunc)) + { + var_01 = self [[ self.specialreloadanimfunc ]](); + self.keepclaimednode = 1; + } + else + { + var_01 = animscripts/utility::animarraypickrandom("reload"); + if(self.a.var_911 == "stand" && animscripts/utility::animarrayanyexist("reload_crouchhide") && common_scripts\utility::cointoss()) + { + var_01 = animscripts/utility::animarraypickrandom("reload_crouchhide"); + } + } + + thread keeptryingtomelee(); + self.var_D32 = 0; + if(weaponclass(self.weapon) == "pistol") + { + self orientmode("face default"); + } + + func_0D33(var_01,param_00 > 0.05); + self notify("abort_reload"); + self orientmode("face current"); + if(self.var_D32) + { + animscripts/weaponlist::refillclip(); + } + + self clearanim(%reload,0.2); + self.keepclaimednode = 0; + self notify("stop_trying_to_melee"); + self.a.exposedreloading = 0; + self.var_D32 = undefined; + maps\_gameskill::didsomethingotherthanshooting(); + animscripts/combat_utility::startfireandaimidlethread(); + return 1; + } + + return 0; +} + +//Function Number: 46 +func_0D33(param_00,param_01) +{ + self endon("abort_reload"); + if(param_01) + { + thread abortreloadwhencanshoot(); + } + + var_02 = 1; + if(!animscripts/utility::usingsidearm() && !animscripts/utility::isshotgun(self.weapon) && isdefined(self.enemy) && self cansee(self.enemy) && distancesquared(self.enemy.origin,self.origin) < 1048576) + { + var_02 = 1.2; + } + + var_03 = "reload_" + animscripts/combat_utility::getuniqueflagnameindex(); + self clearanim(%root,0.2); + self setflaggedanimrestart(var_03,param_00,1,0.2,var_02); + thread func_0D35("abort_reload",var_03); + self endon("start_aim"); + animscripts/shared::donotetracks(var_03); + self.var_D32 = 1; +} + +//Function Number: 47 +abortreloadwhencanshoot() +{ + self endon("abort_reload"); + self endon("killanimscript"); + for(;;) + { + if(isdefined(self.shootent) && self cansee(self.shootent)) + { + break; + } + + wait 0.05; + } + + self notify("abort_reload"); +} + +//Function Number: 48 +func_0D35(param_00,param_01) +{ + self endon(param_00); + self waittillmatch("start_aim",param_01); + self.var_D32 = 1; + self notify("start_aim"); +} + +//Function Number: 49 +func_0CD6(param_00) +{ + self endon("killanimscript"); + animscripts/shared::donotetracks(param_00); +} + +//Function Number: 50 +drop_turret() +{ + maps\_mgturret::dropturret(); + animscripts/weaponlist::refillclip(); + self.a.needstorechamber = 0; + self notify("dropped_gun"); + maps\_mgturret::restoredefaults(); +} + +//Function Number: 51 +exception_exposed_mg42_portable() +{ + drop_turret(); +} + +//Function Number: 52 +tryusingsidearm() +{ + if(isdefined(self.secondaryweapon) && animscripts/utility::isshotgun(self.secondaryweapon)) + { + return 0; + } + + if(isdefined(self.no_pistol_switch)) + { + return 0; + } + + self.a.var_911 = "stand"; + switchtosidearm(%pistol_stand_pullout); + return 1; +} + +//Function Number: 53 +switchtosidearm(param_00) +{ + self endon("killanimscript"); + thread animscripts/combat_utility::func_D3E(); + animscripts/combat_utility::endfireandanimidlethread(); + self.var_D3F = param_00; + self setflaggedanimknoballrestart("weapon swap",param_00,%body,1,0.2,animscripts/combat_utility::fasteranimspeed()); + donotetrackspostcallbackwithendon("weapon swap",::handlepickup,"end_weapon_swap"); + self clearanim(self.var_D3F,0.2); + self notify("facing_enemy_immediately"); + self notify("switched_to_sidearm"); + maps\_gameskill::didsomethingotherthanshooting(); +} + +//Function Number: 54 +donotetrackspostcallbackwithendon(param_00,param_01,param_02) +{ + self endon(param_02); + animscripts/notetracks::donotetrackspostcallback(param_00,param_01); +} + +//Function Number: 55 +faceenemydelay(param_00) +{ + self endon("killanimscript"); + wait param_00; + faceenemyimmediately(); +} + +//Function Number: 56 +handlepickup(param_00) +{ + if(param_00 == "pistol_pickup") + { + self clearanim(animscripts/utility::animarray("straight_level"),0); + animscripts/animset::set_animarray_standing(); + thread faceenemydelay(0.25); + return; + } + + if(param_00 == "start_aim") + { + animscripts/combat_utility::startfireandaimidlethread(); + if(func_0D0C()) + { + self notify("end_weapon_swap"); + return; + } + } +} + +//Function Number: 57 +switchtolastweapon(param_00,param_01) +{ + self endon("killanimscript"); + if(animscripts/utility::isshotgun(self.primaryweapon) && isdefined(self.wantshotgun) && !self.wantshotgun && self.lastweapon == animscripts/utility::func_D45()) + { + return 0; + } + + animscripts/combat_utility::endfireandanimidlethread(); + self.var_D3F = param_00; + self setflaggedanimknoballrestart("weapon swap",param_00,%body,1,0.1,1); + if(isdefined(param_01)) + { + donotetrackspostcallbackwithendon("weapon swap",::handlecleanupputaway,"end_weapon_swap"); + } + else + { + donotetrackspostcallbackwithendon("weapon swap",::handleputaway,"end_weapon_swap"); + } + + self clearanim(self.var_D3F,0.2); + self notify("switched_to_lastweapon"); + maps\_gameskill::didsomethingotherthanshooting(); + return 1; +} + +//Function Number: 58 +handleputaway(param_00) +{ + if(param_00 == "pistol_putaway") + { + self clearanim(animscripts/utility::animarray("straight_level"),0); + animscripts/animset::set_animarray_standing(); + thread animscripts/combat_utility::func_D3E(); + return; + } + + if(param_00 == "start_aim") + { + animscripts/combat_utility::startfireandaimidlethread(); + if(func_0D0C()) + { + self notify("end_weapon_swap"); + return; + } + } +} + +//Function Number: 59 +handlecleanupputaway(param_00) +{ + if(param_00 == "pistol_putaway") + { + thread animscripts/combat_utility::func_D3E(); + return; + } + + if(issubstr(param_00,"anim_gunhand")) + { + self notify("end_weapon_swap"); + } +} + +//Function Number: 60 +func_0D48() +{ + if(!animscripts/utility::usingrocketlauncher() || self.bulletsinclip == 0) + { + return 0; + } + + if(randomfloat(1) > 0.5) + { + self setflaggedanimknoball("deathanim",%rpg_stand_death,%root,1,0.05,1); + } + else + { + self setflaggedanimknoball("deathanim",%rpg_stand_death_stagger,%root,1,0.05,1); + } + + animscripts/shared::donotetracks("deathanim"); + animscripts/shared::dropallaiweapons(); +} + +//Function Number: 61 +reacquirewhennecessary() +{ + self endon("killanimscript"); + self.a.exposedreloading = 0; + for(;;) + { + wait 0.2; + if(isdefined(self.enemy) && !self seerecently(self.enemy,2)) + { + if(self.combatmode == "ambush" || self.combatmode == "ambush_nodes_only") + { + continue; + } + } + + tryexposedreacquire(); + } +} + +//Function Number: 62 +tryexposedreacquire() +{ + if(self.fixednode) + { + return; + } + + if(!isdefined(self.enemy)) + { + self.reacquire_state = 0; + return; + } + + if(gettime() < self.teammovewaittime) + { + self.reacquire_state = 0; + return; + } + + if(isdefined(self.prevenemy) && self.prevenemy != self.enemy) + { + self.reacquire_state = 0; + self.prevenemy = undefined; + return; + } + + self.prevenemy = self.enemy; + if(self cansee(self.enemy) && self canshootenemy()) + { + self.reacquire_state = 0; + return; + } + + if(isdefined(self.var_D32) && !self.var_D32) + { + self.reacquire_state = 0; + return; + } + + if(!isdefined(self.var_3F15) || !self.var_3F15) + { + var_00 = vectornormalize(self.enemy.origin - self.origin); + var_01 = anglestoforward(self.angles); + if(vectordot(var_00,var_01) < 0.5) + { + self.reacquire_state = 0; + return; + } + } + + if(self.a.exposedreloading && animscripts/combat_utility::needtoreload(0.25) && self.enemy.health > self.enemy.maxhealth * 0.5) + { + self.reacquire_state = 0; + return; + } + + if(animscripts/combat_utility::shouldhelpadvancingteammate() && self.reacquire_state < 3) + { + self.reacquire_state = 3; + } + + switch(self.reacquire_state) + { + case 0: + if(self reacquirestep(32)) + { + return; + } + break; + + case 1: + if(self reacquirestep(64)) + { + self.reacquire_state = 0; + return; + } + break; + + case 2: + if(self reacquirestep(96)) + { + self.reacquire_state = 0; + return; + } + break; + + case 3: + if(animscripts/combat_utility::tryrunningtoenemy(0)) + { + self.reacquire_state = 0; + return; + } + break; + + case 4: + if(!self cansee(self.enemy) || !self canshootenemy()) + { + self flagenemyunattackable(); + } + break; + + default: + if(self.reacquire_state > 15) + { + self.reacquire_state = 0; + return; + } + break; + } + + self.reacquire_state++; +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/combat_say.gsc b/MW3/Xbox/SP/animscripts/combat_say.gsc new file mode 100644 index 0000000..02b1cb0 --- /dev/null +++ b/MW3/Xbox/SP/animscripts/combat_say.gsc @@ -0,0 +1,21 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\combat_say.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 44 ms + * Timestamp: 10/27/2023 2:30:00 AM +*******************************************************************/ + +//Function Number: 1 +func_3ADE() +{ + animscripts/battlechatter::playbattlechatter(); +} + +//Function Number: 2 +func_3ADF(param_00) +{ + animscripts/battlechatter::playbattlechatter(); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/combat_utility.gsc b/MW3/Xbox/SP/animscripts/combat_utility.gsc new file mode 100644 index 0000000..6954d25 --- /dev/null +++ b/MW3/Xbox/SP/animscripts/combat_utility.gsc @@ -0,0 +1,1898 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\combat_utility.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 84 + * Decompile Time: 1409 ms + * Timestamp: 10/27/2023 2:30:04 AM +*******************************************************************/ + +//Function Number: 1 +gettargetangleoffset(param_00) +{ + var_01 = self getshootatpos() + (0,0,-3); + var_02 = (var_01[0] - param_00[0],var_01[1] - param_00[1],var_01[2] - param_00[2]); + var_02 = vectornormalize(var_02); + var_03 = var_02[2] * -1; + return var_03; +} + +//Function Number: 2 +getsniperburstdelaytime() +{ + if(isplayer(self.enemy)) + { + return randomfloatrange(self.enemy.var_1C74.min_sniper_burst_delay_time,self.enemy.var_1C74.max_sniper_burst_delay_time); + } + + return randomfloatrange(level.min_sniper_burst_delay_time,level.max_sniper_burst_delay_time); +} + +//Function Number: 3 +func_1EF7() +{ + var_00 = gettime() - self.a.lastshoottime / 1000; + var_01 = getburstdelaytime(); + if(var_01 > var_00) + { + return var_01 - var_00; + } + + return 0; +} + +//Function Number: 4 +getburstdelaytime() +{ + if(animscripts/utility::usingsidearm()) + { + return randomfloatrange(0.15,0.55); + } + + if(animscripts/utility::weapon_pump_action_shotgun()) + { + return randomfloatrange(1,1.7); + } + + if(issniper()) + { + return getsniperburstdelaytime(); + } + + if(self.fastburst) + { + return randomfloatrange(0.1,0.35); + } + + return randomfloatrange(0.4,0.9); +} + +//Function Number: 5 +burstdelay() +{ + if(self.bulletsinclip) + { + if(self.shootstyle == "full" && !self.fastburst) + { + if(self.a.lastshoottime == gettime()) + { + wait 0.05; + } + + return; + } + + var_00 = func_1EF7(); + if(var_00) + { + wait var_00; + } + } +} + +//Function Number: 6 +cheatammoifnecessary() +{ + if(!isdefined(self.enemy)) + { + return 0; + } + + if(self.team != "allies") + { + if(!isplayer(self.enemy)) + { + return 0; + } + + if(self.enemy maps\_utility::ent_flag("player_is_invulnerable")) + { + return 0; + } + } + + if(animscripts/utility::usingsidearm() || animscripts/utility::usingrocketlauncher()) + { + return 0; + } + + if(gettime() - self.ammocheattime < self.ammocheatinterval) + { + return 0; + } + + if(!self cansee(self.enemy) && distancesquared(self.origin,self.enemy.origin) > 65536) + { + return 0; + } + + self.bulletsinclip = int(weaponclipsize(self.weapon) / 2); + if(self.bulletsinclip > weaponclipsize(self.weapon)) + { + self.bulletsinclip = weaponclipsize(self.weapon); + } + + self.ammocheattime = gettime(); + return 1; +} + +//Function Number: 7 +aimbutdontshoot() +{ + for(var_00 = int(60);var_00 > 0;var_00--) + { + if(isdefined(self.dontevershoot) || isdefined(self.enemy) && isdefined(self.enemy.dontattackme)) + { + wait 0.05; + continue; + } + + return 0; + } + + return 1; +} + +//Function Number: 8 +shootuntilshootbehaviorchange() +{ + self endon("shoot_behavior_change"); + self endon("stopShooting"); + if(islongrangeai()) + { + if(isdefined(self.enemy) && isai(self.enemy) && distancesquared(level.player.origin,self.enemy.origin) < 147456) + { + self.enemy animscripts/battlechatter_ai::addthreatevent("infantry",self,1); + } + + if(animscripts/utility::usingrocketlauncher() && issentient(self.enemy)) + { + wait randomfloat(2); + } + } + + if(isdefined(self.enemy) && distancesquared(self.origin,self.enemy.origin) > squared(400)) + { + var_00 = randomintrange(1,5); + } + else + { + var_00 = 10; + } + + for(;;) + { + burstdelay(); + if(aimbutdontshoot()) + { + break; + } + + if(self.shootstyle == "full") + { + fireuntiloutofammo(animscripts/utility::animarray("fire"),1,animscripts/shared::func_1EFB()); + } + else if(self.shootstyle == "burst" || self.shootstyle == "semi") + { + var_01 = animscripts/shared::decidenumshotsforburst(); + if(var_01 == 1) + { + fireuntiloutofammo(animscripts/utility::animarraypickrandom("single"),1,var_01); + } + else + { + fireuntiloutofammo(animscripts/utility::animarray(self.shootstyle + var_01),1,var_01); + } + } + else if(self.shootstyle == "single") + { + fireuntiloutofammo(animscripts/utility::animarraypickrandom("single"),1,1); + } + else + { + self waittill("hell freezes over"); + } + + if(!self.bulletsinclip) + { + break; + } + + var_00--; + if(var_00 < 0) + { + self.shouldreturntocover = 1; + break; + } + } +} + +//Function Number: 9 +getuniqueflagnameindex() +{ + level.var_1C4B++; + return level.var_1C4B; +} + +//Function Number: 10 +setupaim(param_00) +{ + self setanim(%exposed_aiming,1,0.2); + self setanimknoblimited(animscripts/utility::animarray("straight_level"),1,param_00); + self setanimknoblimited(animscripts/utility::animarray("add_aim_up"),1,param_00); + self setanimknoblimited(animscripts/utility::animarray("add_aim_down"),1,param_00); + self setanimknoblimited(animscripts/utility::animarray("add_aim_left"),1,param_00); + self setanimknoblimited(animscripts/utility::animarray("add_aim_right"),1,param_00); +} + +//Function Number: 11 +startfireandaimidlethread() +{ + if(!isdefined(self.a.aimidlethread)) + { + setupaim(0.2); + thread aimidlethread(); + thread animscripts/track::trackshootentorpos(); + } +} + +//Function Number: 12 +endfireandanimidlethread() +{ + endaimidlethread(); + self clearanim(%add_fire,0.1); + self notify("stop tracking"); +} + +//Function Number: 13 +func_1EFD() +{ + if(isdefined(self.a.aimidlethread)) + { + self setanim(%add_idle,0,0.2); + } + + self setanim(%add_fire,1,0.1); +} + +//Function Number: 14 +hidefireshowaimidle() +{ + if(isdefined(self.a.aimidlethread)) + { + self setanim(%add_idle,1,0.2); + } + + self setanim(%add_fire,0,0.1); +} + +//Function Number: 15 +aimidlethread(param_00) +{ + self endon("killanimscript"); + self endon("end_aim_idle_thread"); + if(isdefined(self.a.aimidlethread)) + { + return; + } + + self.a.aimidlethread = 1; + wait 0.1; + self setanimlimited(%add_idle,1,0.2); + var_01 = 0; + for(;;) + { + var_02 = "idle" + var_01; + if(isdefined(self.a.var_1EFE)) + { + var_03 = animscripts/utility::animarraypickrandom("lean_idle"); + } + else + { + var_03 = animscripts/utility::animarraypickrandom("exposed_idle"); + } + + self setflaggedanimknoblimitedrestart(var_02,var_03,1,0.2); + self waittillmatch("end",var_02); + var_01++; + } + + self clearanim(%add_idle,0.1); +} + +//Function Number: 16 +endaimidlethread() +{ + self notify("end_aim_idle_thread"); + self.a.aimidlethread = undefined; + self clearanim(%add_idle,0.1); +} + +//Function Number: 17 +func_1EFF() +{ + if(animscripts/utility::weapon_pump_action_shotgun()) + { + return 1; + } + + if(animscripts/weaponlist::usingautomaticweapon()) + { + return animscripts/weaponlist::autoshootanimrate() * 0.7; + } + + return 0.4; +} + +//Function Number: 18 +fireuntiloutofammo(param_00,param_01,param_02) +{ + var_03 = "fireAnim_" + getuniqueflagnameindex(); + maps\_gameskill::resetmisstime(); + while(!func_0CCF()) + { + wait 0.05; + } + + func_1EFD(); + var_04 = 1; + if(isdefined(self.shootrateoverride)) + { + var_04 = self.shootrateoverride; + } + else if(self.shootstyle == "full") + { + var_04 = animscripts/weaponlist::autoshootanimrate() * randomfloatrange(0.5,1); + } + else if(self.shootstyle == "burst") + { + var_04 = animscripts/weaponlist::burstshootanimrate(); + } + else if(animscripts/utility::usingsidearm()) + { + var_04 = 3; + } + else if(animscripts/utility::func_1F02()) + { + var_04 = func_1EFF(); + } + + self setflaggedanimknobrestart(var_03,param_00,1,0.2,var_04); + self updateplayersightaccuracy(); + if(!isdefined(self.var_8099)) + { + self.var_8099 = 0; + } + + self.var_8099++; + fireuntiloutofammointernal(var_03,param_00,param_01,param_02); + self.var_8099 = 0; + hidefireshowaimidle(); +} + +//Function Number: 19 +fireuntiloutofammointernal(param_00,param_01,param_02,param_03) +{ + self endon("enemy"); + if(isplayer(self.enemy) && self.shootstyle == "full" || self.shootstyle == "semi") + { + level endon("player_becoming_invulnerable"); + } + + if(param_02) + { + thread notifyonanimend(param_00,"fireAnimEnd"); + self endon("fireAnimEnd"); + } + + if(!isdefined(param_03)) + { + param_03 = -1; + } + + var_04 = 0; + var_05 = animhasnotetrack(param_01,"fire"); + var_06 = weaponclass(self.weapon) == "rocketlauncher"; + while(var_04 < param_03 && param_03 > 0) + { + if(var_05) + { + self waittillmatch("fire",param_00); + } + + if(!self.bulletsinclip) + { + if(!cheatammoifnecessary()) + { + break; + } + } + + if(!func_0CCF()) + { + break; + } + + shootatshootentorpos(); + if(isplayer(self.enemy) && self.enemy maps\_utility::ent_flag("player_is_invulnerable")) + { + if(randomint(3) == 0) + { + self.bulletsinclip--; + } + } + else + { + self.bulletsinclip--; + } + + if(var_06) + { + self.a.rockets--; + if(self.weapon == "rpg") + { + self hidepart("tag_rocket"); + self.a.rocketvisible = 0; + } + } + + var_04++; + thread shotgunpumpsound(param_00); + if(self.fastburst && var_04 == param_03) + { + break; + } + + if(!var_05 || param_03 == 1 && self.shootstyle == "single") + { + self waittillmatch("end",param_00); + } + } + + if(param_02) + { + self notify("fireAnimEnd"); + } +} + +//Function Number: 20 +func_0CCF() +{ + if(!isdefined(self.shootpos)) + { + return 1; + } + + var_00 = self getmuzzleangle(); + var_01 = animscripts/shared::func_89B(); + var_02 = vectortoangles(self.shootpos - var_01); + var_03 = animscripts/utility::absangleclamp180(var_00[1] - var_02[1]); + if(var_03 > level.aimyawdifffartolerance) + { + if(distancesquared(self geteye(),self.shootpos) > level.aimyawdiffclosedistsq || var_03 > level.aimyawdiffclosetolerance) + { + return 0; + } + } + + return animscripts/utility::absangleclamp180(var_00[0] - var_02[0]) <= level.aimpitchdifftolerance; +} + +//Function Number: 21 +notifyonanimend(param_00,param_01) +{ + self endon("killanimscript"); + self endon(param_01); + self waittillmatch("end",param_00); + self notify(param_01); +} + +//Function Number: 22 +shootatshootentorpos() +{ + if(isdefined(self.shootent)) + { + if(isdefined(self.enemy) && self.shootent == self.enemy) + { + animscripts/utility::shootenemywrapper(); + } + } + else + { + animscripts/utility::shootposwrapper(self.shootpos); + } +} + +//Function Number: 23 +showrocket() +{ + if(self.weapon != "rpg") + { + return; + } + + self.a.rocketvisible = 1; + self showpart("tag_rocket"); + self notify("showing_rocket"); +} + +//Function Number: 24 +showrocketwhenreloadisdone() +{ + if(self.weapon != "rpg") + { + return; + } + + self endon("death"); + self endon("showing_rocket"); + self waittill("killanimscript"); + showrocket(); +} + +//Function Number: 25 +decrementbulletsinclip() +{ + if(self.bulletsinclip) + { + self.bulletsinclip--; + } +} + +//Function Number: 26 +shotgunpumpsound(param_00) +{ + if(!animscripts/utility::weapon_pump_action_shotgun()) + { + return; + } + + self endon("killanimscript"); + self notify("shotgun_pump_sound_end"); + self endon("shotgun_pump_sound_end"); + thread stopshotgunpumpaftertime(2); + self waittillmatch("rechamber",param_00); + self playsound("ai_shotgun_pump"); + self notify("shotgun_pump_sound_end"); +} + +//Function Number: 27 +stopshotgunpumpaftertime(param_00) +{ + self endon("killanimscript"); + self endon("shotgun_pump_sound_end"); + wait param_00; + self notify("shotgun_pump_sound_end"); +} + +//Function Number: 28 +rechamber(param_00) +{ +} + +//Function Number: 29 +needtoreload(param_00) +{ + if(self.weapon == "none") + { + return 0; + } + + if(isdefined(self.var_1F0C)) + { + if(self.bulletsinclip < weaponclipsize(self.weapon) * 0.5) + { + self.bulletsinclip = int(weaponclipsize(self.weapon) * 0.5); + } + + if(self.bulletsinclip <= 0) + { + self.bulletsinclip = 0; + } + + return 0; + } + + if(self.bulletsinclip <= weaponclipsize(self.weapon) * param_00) + { + if(param_00 == 0) + { + if(cheatammoifnecessary()) + { + return 0; + } + } + + return 1; + } + + return 0; +} + +//Function Number: 30 +func_0D3E() +{ + self endon("weapon_switch_done"); + self endon("death"); + self waittill("killanimscript"); + animscripts/shared::placeweaponon(self.primaryweapon,"right"); +} + +//Function Number: 31 +reload(param_00,param_01) +{ + self endon("killanimscript"); + if(!needtoreload(param_00)) + { + return 0; + } + + animscripts/battlechatter_ai::evaluatereloadevent(); + animscripts/battlechatter::playbattlechatter(); + if(isdefined(param_01)) + { + self setflaggedanimknoball("reloadanim",param_01,%body,1,0.1,1); + animscripts/shared::donotetracks("reloadanim"); + animscripts/weaponlist::refillclip(); + self.a.needstorechamber = 0; + } + else + { + if(self.a.var_911 == "prone") + { + self setflaggedanimknoball("reloadanim",%prone_reload,%body,1,0.1,1); + self updateprone(%prone_legs_up,%prone_legs_down,1,0.1,1); + } + else + { + wait 2; + return; + } + + animscripts/shared::donotetracks("reloadanim"); + animscripts/weaponlist::refillclip(); + self.a.needstorechamber = 0; + } + + return 1; +} + +//Function Number: 32 +addgrenadethrowanimoffset(param_00,param_01) +{ + if(!isdefined(level.grenadethrowanims)) + { + anim.grenadethrowanims = []; + anim.grenadethrowoffsets = []; + } + + var_02 = level.grenadethrowanims.size; + level.grenadethrowanims[var_02] = param_00; + level.grenadethrowoffsets[var_02] = param_01; +} + +//Function Number: 33 +initgrenadethrowanims() +{ + addgrenadethrowanimoffset(%exposed_grenadethrowb,(41.5391,7.28883,72.2128)); + addgrenadethrowanimoffset(%exposed_grenadethrowc,(34.8849,-4.77048,74.0488)); + addgrenadethrowanimoffset(%corner_standl_grenade_a,(41.605,6.80107,81.4785)); + addgrenadethrowanimoffset(%corner_standl_grenade_b,(24.1585,-14.7221,29.2992)); + addgrenadethrowanimoffset(%cornercrl_grenadea,(25.8988,-10.2811,30.4813)); + addgrenadethrowanimoffset(%cornercrl_grenadeb,(24.688,45.0702,64.377)); + addgrenadethrowanimoffset(%corner_standr_grenade_a,(37.1254,-32.7053,76.5745)); + addgrenadethrowanimoffset(%corner_standr_grenade_b,(19.356,15.5341,16.5036)); + addgrenadethrowanimoffset(%cornercrr_grenadea,(39.8857,5.92472,24.5878)); + addgrenadethrowanimoffset(%covercrouch_grenadea,(-1.6363,-0.693674,60.1009)); + addgrenadethrowanimoffset(%covercrouch_grenadeb,(-1.6363,-0.693674,60.1009)); + addgrenadethrowanimoffset(%coverstand_grenadea,(10.8573,7.12614,77.2356)); + addgrenadethrowanimoffset(%coverstand_grenadeb,(19.1804,5.68214,73.2278)); + addgrenadethrowanimoffset(%prone_grenade_a,(12.2859,-1.3019,33.4307)); + addgrenadethrowanimoffset(%cqb_stand_grenade_throw,(35.7494,26.6052,37.7086)); +} + +//Function Number: 34 +getgrenadethrowoffset(param_00) +{ + var_01 = (0,0,64); + if(isdefined(param_00)) + { + foreach(var_04, var_03 in level.grenadethrowanims) + { + if(param_00 == var_03) + { + var_01 = level.grenadethrowoffsets[var_04]; + break; + } + } + } + + if(var_01[2] == 64) + { + if(isdefined(param_00)) + { + } + else + { + } + } + + return var_01; +} + +//Function Number: 35 +throwgrenadeatplayerasap_combat_utility() +{ + for(var_00 = 0;var_00 < level.players.size;var_00++) + { + if(level.players[var_00].var_1C66 == 0) + { + level.players[var_00].grenadetimers["fraggrenade"] = 0; + level.players[var_00].grenadetimers["flash_grenade"] = 0; + } + } + + anim.throwgrenadeatplayerasap = 1; +} + +//Function Number: 36 +setactivegrenadetimer(param_00) +{ + self.activegrenadetimer = spawnstruct(); + if(isplayer(param_00)) + { + self.activegrenadetimer.isplayertimer = 1; + self.activegrenadetimer.player = param_00; + self.activegrenadetimer.timername = self.grenadeweapon; + return; + } + + self.activegrenadetimer.isplayertimer = 0; + self.activegrenadetimer.timername = "AI_" + self.grenadeweapon; +} + +//Function Number: 37 +usingplayergrenadetimer() +{ + return self.activegrenadetimer.isplayertimer; +} + +//Function Number: 38 +func_1F15(param_00,param_01) +{ + if(param_00.isplayertimer) + { + var_02 = param_00.player; + var_03 = var_02.grenadetimers[param_00.timername]; + var_02.grenadetimers[param_00.timername] = max(param_01,var_03); + return; + } + + var_03 = level.grenadetimers[param_01.timername]; + level.grenadetimers[param_00.timername] = max(param_01,var_03); +} + +//Function Number: 39 +getdesiredgrenadetimervalue() +{ + var_00 = undefined; + if(usingplayergrenadetimer()) + { + var_01 = self.activegrenadetimer.player; + var_00 = gettime() + var_01.var_1C74.playergrenadebasetime + randomint(var_01.var_1C74.var_1C75); + } + else + { + var_00 = gettime() + 30000 + randomint(30000); + } + + return var_00; +} + +//Function Number: 40 +func_1F17(param_00) +{ + if(param_00.isplayertimer) + { + return param_00.player.grenadetimers[param_00.timername]; + } + + return level.grenadetimers[param_00.timername]; +} + +//Function Number: 41 +func_1F18(param_00) +{ + if(!isplayer(param_00) && self isbadguy()) + { + if(gettime() < func_1F17(self.activegrenadetimer)) + { + if(level.player.ignoreme) + { + return param_00; + } + + var_01 = self getthreatbiasgroup(); + var_02 = level.player getthreatbiasgroup(); + if(var_01 != "" && var_02 != "" && getthreatbias(var_02,var_01) < -10000) + { + return param_00; + } + + if(self cansee(level.player) || isai(param_00) && param_00 cansee(level.player)) + { + if(isdefined(self.covernode)) + { + var_03 = vectortoangles(level.player.origin - self.origin); + var_04 = angleclamp180(self.covernode.angles[1] - var_03[1]); + } + else + { + var_04 = animscripts/utility::getyawtospot(level.player.origin); + } + + if(abs(var_04) < 60) + { + param_00 = level.player; + setactivegrenadetimer(param_00); + } + } + } + } + + return param_00; +} + +//Function Number: 42 +func_1F19(param_00) +{ + if(maps\_utility::func_1F1A()) + { + return 0; + } + + if(!param_00.var_1C74.double_grenades_allowed) + { + return 0; + } + + var_01 = gettime(); + if(var_01 < param_00.grenadetimers["double_grenade"]) + { + return 0; + } + + if(var_01 > param_00.lastfraggrenadetoplayerstart + 3000) + { + return 0; + } + + if(var_01 < param_00.lastfraggrenadetoplayerstart + 500) + { + return 0; + } + + return param_00.var_1C66 < 2; +} + +//Function Number: 43 +func_0D23() +{ + return gettime() >= self.a.nextgrenadetrytime; +} + +//Function Number: 44 +grenadecooldownelapsed(param_00) +{ + if(maps\_utility::func_1F1A()) + { + return 0; + } + + if(self.script_forcegrenade == 1) + { + return 1; + } + + if(!func_0D23()) + { + return 0; + } + + if(gettime() >= func_1F17(self.activegrenadetimer)) + { + return 1; + } + + if(self.activegrenadetimer.isplayertimer && self.activegrenadetimer.timername == "fraggrenade") + { + return func_1F19(param_00); + } + + return 0; +} + +//Function Number: 45 +trygrenadeposproc(param_00,param_01,param_02,param_03) +{ + if(!self isgrenadepossafe(param_00,param_01)) + { + return 0; + } + else if(distancesquared(self.origin,param_01) < -25536) + { + return 0; + } + + var_04 = physicstrace(param_01 + (0,0,1),param_01 + (0,0,-500)); + if(var_04 == param_01 + (0,0,-500)) + { + return 0; + } + + var_04 = var_04 + (0,0,0.1); + return trygrenadethrow(param_00,var_04,param_02,param_03); +} + +//Function Number: 46 +trygrenade(param_00,param_01) +{ + if(self.weapon == "mg42" || self.grenadeammo <= 0) + { + return 0; + } + + setactivegrenadetimer(param_00); + param_00 = func_1F18(param_00); + if(!grenadecooldownelapsed(param_00)) + { + return 0; + } + + var_02 = getgrenadethrowoffset(param_01); + if(isdefined(self.enemy) && param_00 == self.enemy) + { + if(!checkgrenadethrowdist()) + { + return 0; + } + + if(isplayer(self.enemy) && maps\_utility::is_player_down(self.enemy)) + { + return 0; + } + + if(animscripts/utility::func_B35()) + { + if(!self isgrenadepossafe(param_00,param_00.origin)) + { + return 0; + } + + return trygrenadethrow(param_00,undefined,param_01,var_02); + } + else if(animscripts/utility::cansuppressenemyfromexposed()) + { + return trygrenadeposproc(param_00,animscripts/utility::getenemysightpos(),param_01,var_02); + } + else + { + if(!self isgrenadepossafe(param_00,param_00.origin)) + { + return 0; + } + + return trygrenadethrow(param_00,undefined,param_01,var_02); + } + + return 0; + } + + return trygrenadeposproc(param_00,param_00.origin,param_01,var_02); +} + +//Function Number: 47 +trygrenadethrow(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + if(gettime() < 10000 && !isdefined(level.ignoregrenadesafetime)) + { + return 0; + } + + if(!isdefined(param_05)) + { + param_05 = 1; + } + + if(isdefined(param_02)) + { + var_07 = param_02; + var_08 = self.a.gunhand; + } + else + { + switch(self.a.special) + { + case "cover_crouch": + case "none": + if(self.a.var_911 == "stand") + { + param_05 = (0,0,80); + var_07 = %stand_grenade_throw; + } + else + { + param_05 = (0,0,65); + var_07 = %crouch_grenade_throw; + } + + var_08 = "left"; + break; + + default: + var_07 = undefined; + var_08 = undefined; + break; + } + } + + if(!isdefined(var_07)) + { + return 0; + } + + if(isdefined(param_01)) + { + if(!isdefined(param_04)) + { + var_09 = self checkgrenadethrowpos(param_03,param_01,param_05,"min energy","min time","max time"); + } + else + { + var_09 = self checkgrenadethrowpos(param_04,param_02,param_06,"min time","min energy"); + } + } + else + { + var_0A = self.var_1C38; + var_0B = distance(param_00.origin,self.origin); + if(var_0B < 800) + { + if(var_0B < 256) + { + var_0A = 0; + } + else + { + var_0A = var_0A * var_0B - 256 / 544; + } + } + + if(!isdefined(param_04)) + { + var_09 = self checkgrenadethrow(param_03,var_0A,"min energy","min time","max time"); + } + else + { + var_09 = self checkgrenadethrow(param_03,var_0A,"min time","min energy"); + } + } + + self.a.nextgrenadetrytime = gettime() + randomintrange(1000,2000); + if(isdefined(var_09)) + { + if(!isdefined(self.oldgrenawareness)) + { + self.oldgrenawareness = self.grenadeawareness; + } + + self.grenadeawareness = 0; + var_0C = getdesiredgrenadetimervalue(); + func_1F15(self.activegrenadetimer,min(gettime() + 3000,var_0C)); + var_0D = 0; + if(usingplayergrenadetimer()) + { + param_00.var_1C66++; + thread func_1F1E(param_00); + if(param_00.var_1C66 > 1) + { + var_0D = 1; + } + + if(self.activegrenadetimer.timername == "fraggrenade") + { + if(param_00.var_1C66 <= 1) + { + param_00.lastfraggrenadetoplayerstart = gettime(); + } + } + } + + if(isdefined(param_06)) + { + thread dogrenadethrow(var_07,var_09,var_0C,var_0D); + } + else + { + dogrenadethrow(var_07,var_09,var_0C,var_0D); + } + + return 1; + } + else + { + } + + return 0; +} + +//Function Number: 48 +func_1F1E(param_00) +{ + self endon("dont_reduce_giptp_on_killanimscript"); + self waittill("killanimscript"); + param_00.var_1C66--; +} + +//Function Number: 49 +dogrenadethrow(param_00,param_01,param_02,param_03) +{ + self endon("killanimscript"); + if(self.script == "combat" || self.script == "move") + { + self orientmode("face direction",param_01); + } + + animscripts/battlechatter_ai::evaluateattackevent(self.grenadeweapon); + self notify("stop_aiming_at_enemy"); + self setflaggedanimknoballrestart("throwanim",param_00,%body,fasteranimspeed(),0.1,1); + thread animscripts/notetracks::donotetracksforever("throwanim","killanimscript"); + var_04 = animscripts/utility::getgrenademodel(); + var_05 = "none"; + for(;;) + { + self waittill("throwanim",var_06); + if(var_06 == "grenade_left" || var_06 == "grenade_right") + { + var_05 = func_1F28(var_04,"TAG_INHAND"); + self.isholdinggrenade = 1; + } + + if(var_06 == "grenade_throw" || var_06 == "grenade throw") + { + break; + } + + if(var_06 == "end") + { + self.activegrenadetimer.player.var_1C66--; + self notify("dont_reduce_giptp_on_killanimscript"); + return 0; + } + } + + self notify("dont_reduce_giptp_on_killanimscript"); + if(usingplayergrenadetimer()) + { + thread func_1F23(self.activegrenadetimer.player,param_02); + } + + self throwgrenade(); + if(!usingplayergrenadetimer()) + { + func_1F15(self.activegrenadetimer,param_02); + } + + if(param_03) + { + var_0D = self.activegrenadetimer.player; + if(var_0D.var_1C66 > 1 || gettime() - var_0D.lastgrenadelandednearplayertime < 2000) + { + var_0D.grenadetimers["double_grenade"] = gettime() + min(5000,var_0D.var_1C74.var_1C76); + } + } + + self notify("stop grenade check"); + if(var_05 != "none") + { + self detach(var_04,var_05); + } + else + { + } + + self.isholdinggrenade = undefined; + self.grenadeawareness = self.oldgrenawareness; + self.oldgrenawareness = undefined; + self waittillmatch("end","throwanim"); + self notify("done_grenade_throw"); + self notify("weapon_switch_done"); + self setanim(%exposed_modern,1,0.2); + self setanim(%exposed_aiming,1); + self clearanim(param_00,0.2); +} + +//Function Number: 50 +func_1F23(param_00,param_01) +{ + param_00 endon("death"); + func_1F24(param_01); + param_00.var_1C66--; +} + +//Function Number: 51 +func_1F24(param_00) +{ + var_01 = self.activegrenadetimer; + var_02 = spawnstruct(); + var_02 thread func_1F27(5); + var_02 endon("watchGrenadeTowardsPlayerTimeout"); + var_03 = self.grenadeweapon; + var_04 = func_1F26(); + if(!isdefined(var_04)) + { + return; + } + + func_1F15(var_01,min(gettime() + 5000,param_00)); + var_05 = -3036; + var_06 = 160000; + if(var_03 == "flash_grenade") + { + var_05 = 810000; + var_06 = 1690000; + } + + var_07 = level.players; + var_08 = var_04.origin; + for(;;) + { + wait 0.1; + if(!isdefined(var_04)) + { + break; + } + + if(distancesquared(var_04.origin,var_08) < 400) + { + var_09 = []; + for(var_0A = 0;var_0A < var_07.size;var_0A++) + { + var_0B = var_07[var_0A]; + var_0C = distancesquared(var_04.origin,var_0B.origin); + if(var_0C < var_05) + { + var_0B grenadelandednearplayer(var_01,param_00); + continue; + } + + if(var_0C < var_06) + { + var_09[var_09.size] = var_0B; + } + } + + var_07 = var_09; + if(var_07.size == 0) + { + break; + } + } + + var_08 = var_04.origin; + } +} + +//Function Number: 52 +grenadelandednearplayer(param_00,param_01) +{ + var_02 = self; + anim.throwgrenadeatplayerasap = undefined; + if(gettime() - var_02.lastgrenadelandednearplayertime < 3000) + { + var_02.grenadetimers["double_grenade"] = gettime() + var_02.var_1C74.var_1C76; + } + + var_02.lastgrenadelandednearplayertime = gettime(); + var_03 = var_02.grenadetimers[param_00.timername]; + var_02.grenadetimers[param_00.timername] = max(param_01,var_03); +} + +//Function Number: 53 +func_1F26() +{ + self endon("killanimscript"); + self waittill("grenade_fire",var_00); + return var_00; +} + +//Function Number: 54 +func_1F27(param_00) +{ + wait param_00; + self notify("watchGrenadeTowardsPlayerTimeout"); +} + +//Function Number: 55 +func_1F28(param_00,param_01) +{ + self attach(param_00,param_01); + thread detachgrenadeonscriptchange(param_00,param_01); + return param_01; +} + +//Function Number: 56 +detachgrenadeonscriptchange(param_00,param_01) +{ + self endon("stop grenade check"); + self waittill("killanimscript"); + if(!isdefined(self)) + { + return; + } + + if(isdefined(self.oldgrenawareness)) + { + self.grenadeawareness = self.oldgrenawareness; + self.oldgrenawareness = undefined; + } + + self detach(param_00,param_01); +} + +//Function Number: 57 +offsettoorigin(param_00) +{ + var_01 = anglestoforward(self.angles); + var_02 = anglestoright(self.angles); + var_03 = anglestoup(self.angles); + var_01 = var_01 * param_00[0]; + var_02 = var_02 * param_00[1]; + var_03 = var_03 * param_00[2]; + return var_01 + var_02 + var_03; +} + +//Function Number: 58 +grenadeline(param_00,param_01) +{ + level notify("armoffset"); + level endon("armoffset"); + param_00 = self.origin + offsettoorigin(param_00); + wait 0.05; +} + +//Function Number: 59 +getgrenadedropvelocity() +{ + var_00 = randomfloat(360); + var_01 = randomfloatrange(30,75); + var_02 = sin(var_01); + var_03 = cos(var_01); + var_04 = cos(var_00) * var_03; + var_05 = sin(var_00) * var_03; + var_06 = randomfloatrange(100,200); + var_07 = (var_04,var_05,var_02) * var_06; + return var_07; +} + +//Function Number: 60 +func_1F2C() +{ + var_00 = self gettagorigin("tag_inhand"); + var_01 = getgrenadedropvelocity(); + self magicgrenademanual(var_00,var_01,3); +} + +//Function Number: 61 +func_0B26() +{ + if(!isdefined(self.enemy)) + { + return 0; + } + + if(self.fixednode || self.doingambush) + { + return 0; + } + + var_00 = func_1F2D(); + if(isdefined(var_00)) + { + return usecovernodeifpossible(var_00); + } + + return 0; +} + +//Function Number: 62 +func_1F2D() +{ + var_00 = self findbestcovernode(); + if(!isdefined(var_00)) + { + return undefined; + } + + var_01 = animscripts/utility::getclaimednode(); + if(isdefined(var_01) && var_00 == var_01) + { + return undefined; + } + + if(isdefined(self.covernode) && var_00 == self.covernode) + { + return undefined; + } + + return var_00; +} + +//Function Number: 63 +usecovernodeifpossible(param_00) +{ + var_01 = self.keepclaimednodeifvalid; + var_02 = self.keepclaimednode; + self.keepclaimednodeifvalid = 0; + self.keepclaimednode = 0; + if(self usecovernode(param_00)) + { + return 1; + } + else + { + } + + self.keepclaimednodeifvalid = var_01; + self.keepclaimednode = var_02; + return 0; +} + +//Function Number: 64 +shouldhelpadvancingteammate() +{ + if(level.var_1C6F[self.team] > 0 && level.var_1C6F[self.team] < level.advancetoenemygroupmax) + { + if(gettime() - level.var_1C6B[self.team] > 4000) + { + return 0; + } + + var_00 = level.lastadvancetoenemyattacker[self.team]; + var_01 = isdefined(var_00) && distancesquared(self.origin,var_00.origin) < 65536; + if((var_01 || distancesquared(self.origin,level.lastadvancetoenemysrc[self.team]) < 65536) && !isdefined(self.enemy) || distancesquared(self.enemy.origin,level.var_1C6C[self.team]) < 262144) + { + return 1; + } + } + + return 0; +} + +//Function Number: 65 +checkadvanceonenemyconditions() +{ + if(!isdefined(level.var_1C6B[self.team])) + { + return 0; + } + + if(shouldhelpadvancingteammate()) + { + return 1; + } + + if(gettime() - level.var_1C6B[self.team] < level.advancetoenemyinterval) + { + return 0; + } + + if(!issentient(self.enemy)) + { + return 0; + } + + if(level.var_1C6F[self.team]) + { + level.var_1C6F[self.team] = 0; + } + + var_00 = isdefined(self.var_3F1C) && self.var_3F1C; + if(!var_00 && getaicount(self.team) < getaicount(self.enemy.team)) + { + return 0; + } + + return 1; +} + +//Function Number: 66 +tryrunningtoenemy(param_00) +{ + if(!isdefined(self.enemy)) + { + return 0; + } + + if(self.fixednode) + { + return 0; + } + + if(self.combatmode == "ambush" || self.combatmode == "ambush_nodes_only") + { + return 0; + } + + if(!self isingoal(self.enemy.origin)) + { + return 0; + } + + if(islongrangeai()) + { + return 0; + } + + if(!checkadvanceonenemyconditions()) + { + return 0; + } + + self findreacquiredirectpath(param_00); + if(self reacquiremove()) + { + self.keepclaimednodeifvalid = 0; + self.keepclaimednode = 0; + self.a.magicreloadwhenreachenemy = 1; + if(level.var_1C6F[self.team] == 0) + { + level.var_1C6B[self.team] = gettime(); + level.lastadvancetoenemyattacker[self.team] = self; + } + + level.lastadvancetoenemysrc[self.team] = self.origin; + level.var_1C6C[self.team] = self.enemy.origin; + level.var_1C6F[self.team]++; + return 1; + } + + return 0; +} + +//Function Number: 67 +func_1F30(param_00) +{ + self endon("death"); + wait 0.5; + var_01 = "" + level.var_1C5F; + badplace_cylinder(var_01,5,param_00,16,64,self.team); + level.badplaces[level.badplaces.size] = var_01; + if(level.badplaces.size >= 10) + { + var_02 = []; + for(var_03 = 1;var_03 < level.badplaces.size;var_03++) + { + var_02[var_02.size] = level.badplaces[var_03]; + } + + badplace_delete(level.badplaces[0]); + anim.badplaces = var_02; + } + + level.var_1C5F++; + if(level.var_1C5F > 10) + { + anim.var_1C5F = level.var_1C5F - 20; + } +} + +//Function Number: 68 +func_1F31(param_00,param_01,param_02) +{ + if(param_00 > param_01 && param_00 < param_02) + { + return 1; + } + + return 0; +} + +//Function Number: 69 +getgunyawtoshootentorpos() +{ + if(!isdefined(self.shootpos)) + { + return 0; + } + + var_00 = self getmuzzleangle()[1] - animscripts/utility::func_C05(self.shootpos); + var_00 = angleclamp180(var_00); + return var_00; +} + +//Function Number: 70 +func_1F33() +{ + if(!isdefined(self.shootpos)) + { + return 0; + } + + var_00 = self getmuzzleangle()[0] - vectortoangles(self.shootpos - self getmuzzlepos())[0]; + var_00 = angleclamp180(var_00); + return var_00; +} + +//Function Number: 71 +getpitchtoenemy() +{ + if(!isdefined(self.enemy)) + { + return 0; + } + + var_00 = self.enemy getshootatpos() - self getshootatpos(); + var_00 = vectornormalize(var_00); + var_01 = 360 - vectortoangles(var_00)[0]; + return angleclamp180(var_01); +} + +//Function Number: 72 +getpitchtospot(param_00) +{ + if(!isdefined(param_00)) + { + return 0; + } + + var_01 = param_00 - self getshootatpos(); + var_01 = vectornormalize(var_01); + var_02 = 360 - vectortoangles(var_01)[0]; + return angleclamp180(var_02); +} + +//Function Number: 73 +watchreloading() +{ + self.isreloading = 0; + self.var_1F36 = -1; + for(;;) + { + self waittill("reload_start"); + self.isreloading = 1; + self.var_1F36 = gettime(); + waittillreloadfinished(); + self.isreloading = 0; + } +} + +//Function Number: 74 +waittillreloadfinished() +{ + thread func_1F38(4,"reloadtimeout"); + self endon("reloadtimeout"); + self endon("weapon_taken"); + for(;;) + { + self waittill("reload"); + var_00 = self getcurrentweapon(); + if(var_00 == "none") + { + break; + } + + if(self getcurrentweaponclipammo() >= weaponclipsize(var_00)) + { + break; + } + } + + self notify("reloadtimeout"); +} + +//Function Number: 75 +func_1F38(param_00,param_01) +{ + self endon(param_01); + wait param_00; + self notify(param_01); +} + +//Function Number: 76 +checkgrenadethrowdist() +{ + var_00 = self.enemy.origin - self.origin; + var_01 = lengthsquared((var_00[0],var_00[1],0)); + if(self.grenadeweapon == "flash_grenade") + { + return var_01 < 589824; + } + + return var_01 >= -25536 && var_01 <= 1562500; +} + +//Function Number: 77 +monitorflash() +{ + self endon("death"); + if(!isdefined(level.neverstopmonitoringflash)) + { + self endon("stop_monitoring_flash"); + } + + for(;;) + { + var_00 = undefined; + var_01 = undefined; + var_02 = undefined; + var_03 = undefined; + var_04 = undefined; + self waittill("flashbang",var_01,var_00,var_02,var_03,var_04); + if(isdefined(self.flashbangimmunity) && self.flashbangimmunity) + { + continue; + } + + if(isdefined(self.script_immunetoflash) && self.script_immunetoflash != 0) + { + continue; + } + + if(isdefined(self.var_89E) || isdefined(self.onatv)) + { + continue; + } + + if(isdefined(self.team) && isdefined(var_04) && self.team == var_04) + { + var_00 = 3 * var_00 - 0.75; + if(var_00 < 0) + { + continue; + } + + if(isdefined(self.var_C76)) + { + continue; + } + } + + var_05 = 0.2; + if(var_00 > 1 - var_05) + { + var_00 = 1; + } + else + { + var_00 = var_00 / 1 - var_05; + } + + var_06 = 4.5 * var_00; + if(var_06 < 0.25) + { + continue; + } + + self.flashingteam = var_04; + maps\_utility::func_1F3D(var_06); + self notify("doFlashBanged",var_01,var_03); + } +} + +//Function Number: 78 +func_1F3E() +{ + return animscripts/utility::isshotgun(self.primaryweapon); +} + +//Function Number: 79 +issniper() +{ + return animscripts/utility::issniperrifle(self.primaryweapon); +} + +//Function Number: 80 +islongrangeai() +{ + return issniper() || animscripts/utility::usingrocketlauncher(); +} + +//Function Number: 81 +fasteranimspeed() +{ + return 1.5; +} + +//Function Number: 82 +randomfasteranimspeed() +{ + return randomfloatrange(1,1.2); +} + +//Function Number: 83 +getrandomcovermode(param_00) +{ + if(param_00.size == 0) + { + return undefined; + } + + if(param_00.size == 1) + { + return param_00[0]; + } + + if(isdefined(self.a.prevattack) && randomint(100) > 20) + { + foreach(var_03, var_02 in param_00) + { + if(var_02 == self.a.prevattack) + { + if(var_03 < param_00.size - 1) + { + param_00[var_03] = param_00[param_00.size - 1]; + } + + param_00[param_00.size - 1] = undefined; + break; + } + } + } + + return param_00[randomint(param_00.size)]; +} + +//Function Number: 84 +player_sees_my_scope() +{ + var_00 = self geteye(); + foreach(var_02 in level.players) + { + if(!self cansee(var_02)) + { + continue; + } + + var_03 = var_02 geteye(); + var_04 = vectortoangles(var_00 - var_03); + var_05 = anglestoforward(var_04); + var_06 = var_02 getplayerangles(); + var_07 = anglestoforward(var_06); + var_08 = vectordot(var_05,var_07); + if(var_08 < 0.805) + { + continue; + } + + if(common_scripts\utility::cointoss() && var_08 >= 0.996) + { + continue; + } + + return 1; + } + + return 0; +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/corner.gsc b/MW3/Xbox/SP/animscripts/corner.gsc new file mode 100644 index 0000000..d40198a --- /dev/null +++ b/MW3/Xbox/SP/animscripts/corner.gsc @@ -0,0 +1,1431 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\corner.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 55 + * Decompile Time: 961 ms + * Timestamp: 10/27/2023 2:30:08 AM +*******************************************************************/ + +//Function Number: 1 +corner_think(param_00,param_01) +{ + self endon("killanimscript"); + self.animarrayfuncs["exposed"]["stand"] = ::set_standing_animarray_aiming; + self.animarrayfuncs["exposed"]["crouch"] = ::set_crouching_animarray_aiming; + self.covernode = self.node; + self.var_1FC6 = param_00; + self.a.var_899 = "unknown"; + self.a.aimidlethread = undefined; + animscripts/cover_behavior::func_B5C(param_01); + func_1FCC(); + self.var_1FC7 = 0; + self.var_1FC8 = 0; + self.var_1FC9 = 0; + animscripts/track::setanimaimweight(0); + self.havegonetocover = 0; + var_02 = spawnstruct(); + if(!self.fixednode) + { + var_02.var_B22 = ::animscripts/cover_behavior::func_B22; + } + + var_02.mainloopstart = ::mainloopstart; + var_02.reload = ::cornerreload; + var_02.leavecoverandshoot = ::func_1FE0; + var_02.look = ::lookforenemy; + var_02.fastlook = ::fastlook; + var_02.idle = ::idle; + var_02.grenade = ::trythrowinggrenade; + var_02.grenadehidden = ::trythrowinggrenadestayhidden; + var_02.blindfire = ::blindfire; + animscripts/cover_behavior::main(var_02); +} + +//Function Number: 2 +func_1FCB() +{ + self.stepoutyaw = undefined; + self.a.var_1EFE = undefined; +} + +//Function Number: 3 +func_1FCC() +{ + if(self.a.var_911 == "crouch") + { + set_anim_array("crouch"); + return; + } + + if(self.a.var_911 == "stand") + { + set_anim_array("stand"); + return; + } + + animscripts/utility::exitpronewrapper(1); + self.a.var_911 = "crouch"; + set_anim_array("crouch"); +} + +//Function Number: 4 +shouldchangestanceforfun() +{ + if(!isdefined(self.enemy)) + { + return 0; + } + + if(!isdefined(self.changestanceforfuntime)) + { + self.changestanceforfuntime = gettime() + randomintrange(5000,20000); + } + + if(gettime() > self.changestanceforfuntime) + { + self.changestanceforfuntime = gettime() + randomintrange(5000,20000); + if(isdefined(self.rambochance) && self.a.var_911 == "stand") + { + return 0; + } + + self.a.prevattack = undefined; + return 1; + } + + return 0; +} + +//Function Number: 5 +mainloopstart() +{ + var_00 = "stand"; + if(self.a.var_911 == "crouch") + { + var_00 = "crouch"; + if(self.covernode doesnodeallowstance("stand")) + { + if(!self.covernode doesnodeallowstance("crouch") || shouldchangestanceforfun()) + { + var_00 = "stand"; + } + } + } + else if(self.covernode doesnodeallowstance("crouch")) + { + if(!self.covernode doesnodeallowstance("stand") || shouldchangestanceforfun()) + { + var_00 = "crouch"; + } + } + + if(self.havegonetocover) + { + func_1FF2(var_00); + return; + } + + if(self.a.var_911 == var_00) + { + gotocover(animscripts/utility::animarray("alert_idle"),0.3,0.4); + } + else + { + var_01 = animscripts/utility::animarray("stance_change"); + gotocover(var_01,0.3,getanimlength(var_01)); + set_anim_array(var_00); + } + + self.havegonetocover = 1; +} + +//Function Number: 6 +func_1FCF() +{ + wait 2; + for(;;) + { + printyawtoenemy(); + wait 0.05; + } +} + +//Function Number: 7 +canseepointfromexposedatcorner(param_00,param_01) +{ + var_02 = param_01 animscripts/utility::func_1FD1(param_00); + if(var_02 > 60 || var_02 < -60) + { + return 0; + } + + if(param_01.type == "Cover Left" && var_02 > 14) + { + return 0; + } + + if(param_01.type == "Cover Right" && var_02 < -12) + { + return 0; + } + + return 1; +} + +//Function Number: 8 +shootposoutsidelegalyawrange() +{ + if(!isdefined(self.shootpos)) + { + return 0; + } + + var_00 = self.covernode animscripts/utility::func_1FD1(self.shootpos); + if(self.a.var_899 == "over") + { + return var_00 < self.leftaimlimit || self.rightaimlimit < var_00; + } + + if(self.var_1FC6 == "left") + { + if(self.a.var_899 == "B") + { + return var_00 < 0 - self.var_1FD3 || var_00 > 14; + } + + if(self.a.var_899 == "A") + { + return var_00 > 0 - self.var_1FD3; + } + + return var_00 < -50 || var_00 > 8; + } + + if(self.a.var_899 == "B") + { + return var_00 > self.var_1FD3 || var_00 < -12; + } + + if(self.a.var_899 == "A") + { + return var_00 < self.var_1FD3; + } + + return var_00 > 50 || var_00 < -8; +} + +//Function Number: 9 +func_1FD4(param_00,param_01) +{ + var_02 = 0; + var_03 = 0; + if(isdefined(param_01)) + { + var_03 = param_00 animscripts/utility::func_1FD1(param_01); + } + + var_04 = []; + if(isdefined(param_00) && self.a.var_911 == "crouch" && var_03 > self.leftaimlimit && self.rightaimlimit > var_03) + { + var_04 = param_00 getvalidcoverpeekouts(); + } + + if(self.var_1FC6 == "left") + { + if(func_1FD7(var_03,-40,0)) + { + var_02 = shouldlean(); + } + + if(!var_03 && var_04 < 14) + { + if(var_04 < 0 - self.var_1FD3) + { + } + else + { + } + } + } + else + { + if(func_1FD7(var_04,0,40)) + { + var_03 = shouldlean(); + } + + if(!var_03 && var_04 > -12) + { + if(var_04 > self.var_1FD3) + { + } + else + { + } + } + } + + return animscripts/combat_utility::getrandomcovermode(var_41); +} + +//Function Number: 10 +func_1FD5() +{ + var_00 = 0; + if(animscripts/utility::cansuppressenemy()) + { + var_00 = self.covernode animscripts/utility::func_1FD1(animscripts/utility::getenemysightpos()); + } + else if(self.doingambush && isdefined(self.shootpos)) + { + var_00 = self.covernode animscripts/utility::func_1FD1(self.shootpos); + } + + if(self.a.var_899 == "lean") + { + return "lean"; + } + + if(self.a.var_899 == "over") + { + return "over"; + } + + if(self.a.var_899 == "B") + { + if(self.var_1FC6 == "left") + { + if(var_00 < 0 - self.var_1FD3) + { + return "A"; + } + } + else if(self.var_1FC6 == "right") + { + if(var_00 > self.var_1FD3) + { + return "A"; + } + } + + return "B"; + } + + if(self.a.var_899 == "A") + { + var_02 = "B"; + if(self.var_1FC6 == "left") + { + if(var_00 > 0 - self.var_1FD3) + { + return "B"; + } + } + else if(self.var_1FC6 == "right") + { + if(var_00 < self.var_1FD3) + { + return "B"; + } + } + + return "A"; + } +} + +//Function Number: 11 +changestepoutpos() +{ + self endon("killanimscript"); + var_00 = func_1FD5(); + if(var_00 == self.a.var_899) + { + return 0; + } + + self.var_8C8 = 1; + self notify("done_changing_cover_pos"); + var_01 = self.a.var_899 + "_to_" + var_00; + var_02 = animscripts/utility::animarraypickrandom(var_01); + var_03 = func_1FEF(); + if(!self maymovetopoint(var_03)) + { + return 0; + } + + if(!self maymovefrompointtopoint(var_03,animscripts/utility::getanimendpos(var_02))) + { + return 0; + } + + animscripts/combat_utility::endaimidlethread(); + stopaiming(0.3); + var_04 = self.a.var_911; + self setanimlimited(animscripts/utility::animarray("straight_level"),0,0.2); + self setflaggedanimknob("changeStepOutPos",var_02,1,0.2,1.2); + thread donotetrackswithendon("changeStepOutPos"); + if(animhasnotetrack(var_02,"start_aim")) + { + self waittillmatch("start_aim","changeStepOutPos"); + } + else + { + self waittillmatch("end","changeStepOutPos"); + } + + thread startaiming(undefined,0,0.3); + self waittillmatch("end","changeStepOutPos"); + self clearanim(var_02,0.1); + self.a.var_899 = var_00; + self.var_8C8 = 0; + self.var_8E8 = gettime(); + if(self.a.var_911 != var_04) + { + set_anim_array(self.a.var_911); + } + + thread func_1FDA(undefined,1,0.3); + return 1; +} + +//Function Number: 12 +func_1FD7(param_00,param_01,param_02) +{ + if(self.a.neverlean) + { + return 0; + } + + return param_01 <= param_00 && param_00 <= param_02; +} + +//Function Number: 13 +shouldlean() +{ + if(self.team == "allies") + { + return 1; + } + + if(animscripts/utility::ispartiallysuppressedwrapper()) + { + return 1; + } + + return 0; +} + +//Function Number: 14 +donotetrackswithendon(param_00) +{ + self endon("killanimscript"); + animscripts/shared::donotetracks(param_00); +} + +//Function Number: 15 +startaiming(param_00,param_01,param_02) +{ + self.var_1FC9 = 1; + if(self.a.var_899 == "lean") + { + self.a.var_1EFE = 1; + } + else + { + self.a.var_1EFE = undefined; + } + + setaimingparams(param_00,param_01,param_02); +} + +//Function Number: 16 +func_1FDA(param_00,param_01,param_02) +{ + if(self.a.var_899 == "lean") + { + self.a.var_1EFE = 1; + } + else + { + self.a.var_1EFE = undefined; + } + + setaimingparams(param_00,param_01,param_02); +} + +//Function Number: 17 +stopaiming(param_00) +{ + self.var_1FC9 = 0; + self clearanim(%add_fire,param_00); + animscripts/track::setanimaimweight(0,param_00); +} + +//Function Number: 18 +setaimingparams(param_00,param_01,param_02) +{ + self.spot = param_00; + self setanimlimited(%exposed_modern,1,param_02); + self setanimlimited(%exposed_aiming,1,param_02); + self setanimlimited(%add_idle,1,param_02); + animscripts/track::setanimaimweight(1,param_02); + var_03 = undefined; + if(isdefined(self.a.array["lean_aim_straight"])) + { + var_03 = self.a.array["lean_aim_straight"]; + } + + thread animscripts/combat_utility::aimidlethread(); + if(isdefined(self.a.var_1EFE)) + { + self setanimlimited(var_03,1,param_02); + self setanimlimited(animscripts/utility::animarray("straight_level"),0,0); + self setanimknoblimited(animscripts/utility::animarray("lean_aim_left"),1,param_02); + self setanimknoblimited(animscripts/utility::animarray("lean_aim_right"),1,param_02); + self setanimknoblimited(animscripts/utility::animarray("lean_aim_up"),1,param_02); + self setanimknoblimited(animscripts/utility::animarray("lean_aim_down"),1,param_02); + return; + } + + if(param_01) + { + self setanimlimited(animscripts/utility::animarray("straight_level"),1,param_02); + if(isdefined(var_03)) + { + self setanimlimited(var_03,0,0); + } + + self setanimknoblimited(animscripts/utility::animarray("add_aim_up"),1,param_02); + self setanimknoblimited(animscripts/utility::animarray("add_aim_down"),1,param_02); + self setanimknoblimited(animscripts/utility::animarray("add_aim_left"),1,param_02); + self setanimknoblimited(animscripts/utility::animarray("add_aim_right"),1,param_02); + return; + } + + self setanimlimited(animscripts/utility::animarray("straight_level"),0,param_02); + if(isdefined(var_03)) + { + self setanimlimited(var_03,0,0); + } + + self setanimknoblimited(animscripts/utility::animarray("add_turn_aim_up"),1,param_02); + self setanimknoblimited(animscripts/utility::animarray("add_turn_aim_down"),1,param_02); + self setanimknoblimited(animscripts/utility::animarray("add_turn_aim_left"),1,param_02); + self setanimknoblimited(animscripts/utility::animarray("add_turn_aim_right"),1,param_02); +} + +//Function Number: 19 +stepoutandhidespeed() +{ + if(self.a.var_899 == "over") + { + return 1; + } + + return animscripts/combat_utility::randomfasteranimspeed(); +} + +//Function Number: 20 +stepout() +{ + self.a.var_899 = "alert"; + if(self.goalradius < 64) + { + self.goalradius = 64; + } + + self animmode("zonly_physics"); + if(self.a.var_911 == "stand") + { + self.var_1FD3 = 38; + } + else + { + self.var_1FD3 = 31; + } + + var_00 = self.a.var_911; + set_anim_array(var_00); + self setdefaultaimlimits(); + var_01 = "none"; + if(animscripts/utility::hasenemysightpos()) + { + var_01 = func_1FD4(self.covernode,animscripts/utility::getenemysightpos()); + } + else + { + var_01 = func_1FD4(self.covernode); + } + + if(!isdefined(var_01)) + { + return 0; + } + + var_02 = "alert_to_" + var_01; + var_03 = animscripts/utility::animarraypickrandom(var_02); + if(var_01 == "lean" && !func_1FEA()) + { + return 0; + } + + if(var_01 != "over" && !ispathclear(var_03,var_01 != "lean")) + { + return 0; + } + + self.a.var_899 = var_01; + self.a.prevattack = var_01; + if(self.a.var_899 == "lean") + { + self setdefaultaimlimits(self.covernode); + } + + if(var_01 == "A" || var_01 == "B") + { + self.a.special = "cover_" + self.var_1FC6 + "_" + self.a.var_911 + "_" + var_01; + } + else if(var_01 == "over") + { + self.a.special = "cover_crouch_aim"; + } + else + { + self.a.special = "none"; + } + + self.keepclaimednodeifvalid = 1; + var_04 = 0; + self.var_8C8 = 1; + self notify("done_changing_cover_pos"); + var_05 = stepoutandhidespeed(); + self.pushable = 0; + self setflaggedanimknoballrestart("stepout",var_03,%root,1,0.2,var_05); + thread donotetrackswithendon("stepout"); + var_04 = animhasnotetrack(var_03,"start_aim"); + if(var_04) + { + self.stepoutyaw = self.angles[1] + getangledelta(var_03,0,1); + self waittillmatch("start_aim","stepout"); + } + else + { + self waittillmatch("end","stepout"); + } + + if(var_01 == "B" && common_scripts\utility::cointoss() && self.var_1FC6 == "right") + { + self.a.special = "corner_right_martyrdom"; + } + + func_1FF1(var_00); + var_06 = var_01 == "over"; + startaiming(undefined,var_06,0.3); + thread animscripts/track::trackshootentorpos(); + if(var_04) + { + self waittillmatch("end","stepout"); + self.stepoutyaw = undefined; + } + + func_1FDA(undefined,1,0.2); + self clearanim(%cover,0.1); + self clearanim(%corner,0.1); + self.var_8C8 = 0; + self.var_8E8 = gettime(); + self.pushable = 1; + return 1; +} + +//Function Number: 21 +func_1FE0() +{ + self.keepclaimednodeifvalid = 1; + if(isdefined(self.rambochance) && randomfloat(1) < self.rambochance) + { + if(func_0B76()) + { + return 1; + } + } + + if(!stepout()) + { + return 0; + } + + func_0B73(); + if(isdefined(self.shootpos)) + { + var_00 = lengthsquared(self.origin - self.shootpos); + if(animscripts/utility::usingrocketlauncher() && var_00 < squared(512) || self.a.rockets < 1) + { + if(self.a.var_911 == "stand") + { + animscripts/shared::throwdownweapon(%rpg_stand_throw); + } + else + { + animscripts/shared::throwdownweapon(%rpg_crouch_throw); + } + + thread func_1FFA(); + return; + } + } + + returntocover(); + self.keepclaimednodeifvalid = 0; + return 1; +} + +//Function Number: 22 +func_1FE1(param_00) +{ + if(!isdefined(self.var_B7C)) + { + return 1; + } + + return gettime() - self.var_B7C > param_00 * 1000; +} + +//Function Number: 23 +func_0B76() +{ + if(!animscripts/utility::hasenemysightpos()) + { + return 0; + } + + var_00 = 0; + var_01 = 90; + var_02 = self.covernode animscripts/utility::func_1FD1(animscripts/utility::getenemysightpos()); + if(self.var_1FC6 == "left") + { + var_02 = 0 - var_02; + } + + if(var_02 > 30) + { + var_01 = 45; + if(self.var_1FC6 == "left") + { + var_00 = 45; + } + else + { + var_00 = -45; + } + } + + var_03 = "rambo" + var_01; + if(!animscripts/utility::animarrayanyexist(var_03)) + { + return 0; + } + + var_04 = animscripts/utility::animarraypickrandom(var_03); + var_05 = func_1FEF(48); + if(!self maymovetopoint(var_05)) + { + return 0; + } + + self.var_8E8 = gettime(); + self animmode("zonly_physics"); + self.keepclaimednodeifvalid = 1; + self.isrambo = 1; + self.a.prevattack = "rambo"; + self.var_8C8 = 1; + thread animscripts/shared::ramboaim(var_00); + self setflaggedanimknoballrestart("rambo",var_04,%body,1,0,1); + animscripts/shared::donotetracks("rambo"); + self notify("rambo_aim_end"); + self.var_8C8 = 0; + self.keepclaimednodeifvalid = 0; + self.var_B7C = gettime(); + self.var_8C8 = 0; + self.isrambo = undefined; + return 1; +} + +//Function Number: 24 +func_0B73() +{ + maps\_gameskill::didsomethingotherthanshooting(); + for(;;) + { + for(;;) + { + if(isdefined(self.shouldreturntocover)) + { + break; + } + + if(!isdefined(self.shootpos)) + { + self waittill("do_slow_things"); + waittillframeend; + if(isdefined(self.shootpos)) + { + continue; + } + + break; + } + + if(!self.bulletsinclip) + { + break; + } + + if(shootposoutsidelegalyawrange()) + { + if(!changestepoutpos()) + { + if(func_1FD5() == self.a.var_899) + { + break; + } + + func_1FE2(0.2); + continue; + } + + if(shootposoutsidelegalyawrange()) + { + break; + } + + continue; + } + + shootuntilshootbehaviorchange_corner(1); + self clearanim(%add_fire,0.2); + } + + if(canreturntocover(self.a.var_899 != "lean")) + { + break; + } + + if(shootposoutsidelegalyawrange() && changestepoutpos()) + { + continue; + } + + func_1FE2(0.2); + } +} + +//Function Number: 25 +func_1FE2(param_00) +{ + thread notifystopshootingaftertime(param_00); + var_01 = gettime(); + shootuntilshootbehaviorchange_corner(0); + self notify("stopNotifyStopShootingAfterTime"); + var_02 = gettime() - var_01 / 1000; + if(var_02 < param_00) + { + wait param_00 - var_02; + } +} + +//Function Number: 26 +notifystopshootingaftertime(param_00) +{ + self endon("killanimscript"); + self endon("stopNotifyStopShootingAfterTime"); + wait param_00; + self notify("stopShooting"); +} + +//Function Number: 27 +shootuntilshootbehaviorchange_corner(param_00) +{ + self endon("return_to_cover"); + if(param_00) + { + thread anglerangethread(); + } + + thread animscripts/combat_utility::aimidlethread(); + animscripts/combat_utility::shootuntilshootbehaviorchange(); +} + +//Function Number: 28 +anglerangethread() +{ + self endon("killanimscript"); + self notify("newAngleRangeCheck"); + self endon("newAngleRangeCheck"); + self endon("take_cover_at_corner"); + for(;;) + { + if(shootposoutsidelegalyawrange()) + { + break; + } + + wait 0.1; + } + + self notify("stopShooting"); +} + +//Function Number: 29 +showstate() +{ + self.enemy endon("death"); + self endon("enemy"); + self endon("stopshowstate"); + wait 0.05; +} + +//Function Number: 30 +canreturntocover(param_00) +{ + if(param_00) + { + var_01 = func_1FEF(); + if(!self maymovetopoint(var_01)) + { + return 0; + } + + return self maymovefrompointtopoint(var_01,self.covernode.origin); + } + + return self maymovetopoint(self.covernode.origin); +} + +//Function Number: 31 +returntocover() +{ + animscripts/combat_utility::endfireandanimidlethread(); + var_00 = animscripts/utility::issuppressedwrapper(); + self notify("take_cover_at_corner"); + self.var_8C8 = 1; + self notify("done_changing_cover_pos"); + var_01 = self.a.var_899 + "_to_alert"; + var_02 = animscripts/utility::animarraypickrandom(var_01); + stopaiming(0.3); + var_03 = 0; + if(self.a.var_899 != "lean" && var_00 && animscripts/utility::animarrayanyexist(var_01 + "_reload") && randomfloat(100) < 75) + { + var_02 = animscripts/utility::animarraypickrandom(var_01 + "_reload"); + var_03 = 1; + } + + var_04 = stepoutandhidespeed(); + self clearanim(%body,0.1); + self setflaggedanimrestart("hide",var_02,1,0.1,var_04); + animscripts/shared::donotetracks("hide"); + if(var_03) + { + animscripts/weaponlist::refillclip(); + } + + self.var_8C8 = 0; + if(self.var_1FC6 == "left") + { + self.a.special = "cover_left"; + } + else + { + self.a.special = "cover_right"; + } + + self.keepclaimednodeifvalid = 0; + self clearanim(var_02,0.2); +} + +//Function Number: 32 +blindfire() +{ + if(!animscripts/utility::animarrayanyexist("blind_fire")) + { + return 0; + } + + self animmode("zonly_physics"); + self.keepclaimednodeifvalid = 1; + self setflaggedanimknoballrestart("blindfire",animscripts/utility::animarraypickrandom("blind_fire"),%body,1,0,1); + animscripts/shared::donotetracks("blindfire"); + self.keepclaimednodeifvalid = 0; + return 1; +} + +//Function Number: 33 +func_1FE8(param_00,param_01,param_02) +{ + if(!isdefined(param_02)) + { + param_02 = (1,1,1); + } + + for(var_03 = 0;var_03 < 100;var_03++) + { + wait 0.05; + } +} + +//Function Number: 34 +trythrowinggrenadestayhidden(param_00) +{ + return trythrowinggrenade(param_00,1); +} + +//Function Number: 35 +trythrowinggrenade(param_00,param_01) +{ + if(!self maymovetopoint(func_1FEF())) + { + return 0; + } + + if(isdefined(self.dontevershoot) || isdefined(param_00.dontattackme)) + { + return 0; + } + + var_02 = undefined; + if(isdefined(self.rambochance) && randomfloat(1) < self.rambochance) + { + if(isdefined(self.a.array["grenade_rambo"])) + { + var_02 = animscripts/utility::animarray("grenade_rambo"); + } + } + + if(!isdefined(var_02)) + { + if(isdefined(param_01) && param_01) + { + if(!isdefined(self.a.array["grenade_safe"])) + { + return 0; + } + + var_02 = animscripts/utility::animarray("grenade_safe"); + } + else + { + if(!isdefined(self.a.array["grenade_exposed"])) + { + return 0; + } + + var_02 = animscripts/utility::animarray("grenade_exposed"); + } + } + + self animmode("zonly_physics"); + self.keepclaimednodeifvalid = 1; + var_03 = animscripts/combat_utility::trygrenade(param_00,var_02); + self.keepclaimednodeifvalid = 0; + return var_03; +} + +//Function Number: 36 +printyawtoenemy() +{ +} + +//Function Number: 37 +lookforenemy(param_00) +{ + if(!isdefined(self.a.array["alert_to_look"])) + { + return 0; + } + + self animmode("zonly_physics"); + self.keepclaimednodeifvalid = 1; + if(!peekout()) + { + return 0; + } + + animscripts/shared::func_B7E(animscripts/utility::animarray("look_idle"),param_00,::canstoppeeking); + var_01 = undefined; + if(animscripts/utility::issuppressedwrapper()) + { + var_01 = animscripts/utility::animarray("look_to_alert_fast"); + } + else + { + var_01 = animscripts/utility::animarray("look_to_alert"); + } + + self setflaggedanimknoballrestart("looking_end",var_01,%body,1,0.1,1); + animscripts/shared::donotetracks("looking_end"); + self animmode("zonly_physics"); + self.keepclaimednodeifvalid = 0; + return 1; +} + +//Function Number: 38 +func_1FEA() +{ + var_00 = self geteye(); + var_01 = anglestoright(self.covernode.angles); + if(self.var_1FC6 == "right") + { + var_00 = var_00 + var_01 * 30; + } + else + { + var_00 = var_00 - var_01 * 30; + } + + var_02 = var_00 + anglestoforward(self.covernode.angles) * 30; + return sighttracepassed(var_00,var_02,1,self); +} + +//Function Number: 39 +peekout() +{ + if(isdefined(self.covernode.script_dontpeek)) + { + return 0; + } + + if(isdefined(self.nextpeekoutattempttime) && gettime() < self.nextpeekoutattempttime) + { + return 0; + } + + if(!func_1FEA()) + { + self.nextpeekoutattempttime = gettime() + 3000; + return 0; + } + + var_00 = animscripts/utility::animarray("alert_to_look"); + self setflaggedanimknoball("looking_start",var_00,%body,1,0.2,1); + animscripts/shared::donotetracks("looking_start"); + return 1; +} + +//Function Number: 40 +canstoppeeking() +{ + return self maymovetopoint(self.covernode.origin); +} + +//Function Number: 41 +fastlook() +{ + return 0; +} + +//Function Number: 42 +cornerreload() +{ + var_00 = animscripts/utility::animarraypickrandom("reload"); + self setflaggedanimknobrestart("cornerReload",var_00,1,0.2); + animscripts/shared::donotetracks("cornerReload"); + animscripts/weaponlist::refillclip(); + self setanimrestart(animscripts/utility::animarray("alert_idle"),1,0.2); + self clearanim(var_00,0.2); + return 1; +} + +//Function Number: 43 +ispathclear(param_00,param_01) +{ + if(param_01) + { + var_02 = func_1FEF(); + if(!self maymovetopoint(var_02)) + { + return 0; + } + + return self maymovefrompointtopoint(var_02,animscripts/utility::getanimendpos(param_00)); + } + + return self maymovetopoint(animscripts/utility::getanimendpos(param_01)); +} + +//Function Number: 44 +func_1FEF(param_00) +{ + var_01 = self.covernode.angles; + var_02 = anglestoright(var_01); + if(!isdefined(param_00)) + { + param_00 = 36; + } + + switch(self.script) + { + case "cover_left": + var_02 = var_02 * 0 - param_00; + break; + + case "cover_right": + var_02 = var_02 * param_00; + break; + + default: + break; + } + + return self.covernode.origin + (var_02[0],var_02[1],0); +} + +//Function Number: 45 +idle() +{ + self endon("end_idle"); + for(;;) + { + var_00 = randomint(2) == 0 && animscripts/utility::animarrayanyexist("alert_idle_twitch"); + if(var_00) + { + var_01 = animscripts/utility::animarraypickrandom("alert_idle_twitch"); + } + else + { + var_01 = animscripts/utility::animarray("alert_idle"); + } + + playidleanimation(var_01,var_00); + } +} + +//Function Number: 46 +flinch() +{ + if(!animscripts/utility::animarrayanyexist("alert_idle_flinch")) + { + return 0; + } + + playidleanimation(animscripts/utility::animarraypickrandom("alert_idle_flinch"),1); + return 1; +} + +//Function Number: 47 +playidleanimation(param_00,param_01) +{ + if(param_01) + { + self setflaggedanimknoballrestart("idle",param_00,%body,1,0.1,1); + } + else + { + self setflaggedanimknoball("idle",param_00,%body,1,0.1,1); + } + + animscripts/shared::donotetracks("idle"); +} + +//Function Number: 48 +set_anim_array(param_00) +{ + [[ self.animarrayfuncs["hiding"][param_00] ]](); + [[ self.animarrayfuncs["exposed"][param_00] ]](); +} + +//Function Number: 49 +func_1FF1(param_00) +{ + [[ self.animarrayfuncs["exposed"][param_00] ]](); +} + +//Function Number: 50 +func_1FF2(param_00) +{ + if(self.a.var_911 == param_00) + { + set_anim_array(param_00); + return; + } + + self setflaggedanimknoballrestart("changeStance",animscripts/utility::animarray("stance_change"),%body); + set_anim_array(param_00); + animscripts/shared::donotetracks("changeStance"); + wait 0.2; +} + +//Function Number: 51 +gotocover(param_00,param_01,param_02) +{ + var_03 = animscripts/utility::getnodedirection(); + var_04 = animscripts/utility::getnodeorigin(); + var_05 = var_03 + self.hideyawoffset; + self orientmode("face angle",var_05); + self animmode("normal"); + thread animscripts/shared::movetooriginovertime(var_04,param_01); + self setflaggedanimknoballrestart("coveranim",param_00,%body,1,param_01); + animscripts/notetracks::donotetracksfortime(param_02,"coveranim"); + while(animscripts/utility::absangleclamp180(self.angles[1] - var_05) > 1) + { + animscripts/notetracks::donotetracksfortime(0.1,"coveranim"); + } + + self animmode("zonly_physics"); + if(self.var_1FC6 == "left") + { + self.a.special = "cover_left"; + return; + } + + self.a.special = "cover_right"; +} + +//Function Number: 52 +func_1FF7() +{ + self endon("killanimscript"); + wait 0.05; +} + +//Function Number: 53 +set_standing_animarray_aiming() +{ + if(!isdefined(self.a.array)) + { + } + + self.a.array["add_aim_up"] = %exposed_aim_8; + self.a.array["add_aim_down"] = %exposed_aim_2; + self.a.array["add_aim_left"] = %exposed_aim_4; + self.a.array["add_aim_right"] = %exposed_aim_6; + self.a.array["add_turn_aim_up"] = %exposed_turn_aim_8; + self.a.array["add_turn_aim_down"] = %exposed_turn_aim_2; + self.a.array["add_turn_aim_left"] = %exposed_turn_aim_4; + self.a.array["add_turn_aim_right"] = %exposed_turn_aim_6; + self.a.array["straight_level"] = %exposed_aim_5; + if(self.a.var_899 == "lean") + { + var_00 = self.a.array["lean_fire"]; + var_01 = self.a.array["lean_single"]; + self.a.array["fire"] = var_00; + self.a.array["single"] = animscripts/utility::array(var_01); + self.a.array["semi2"] = var_01; + self.a.array["semi3"] = var_01; + self.a.array["semi4"] = var_01; + self.a.array["semi5"] = var_01; + self.a.array["burst2"] = var_00; + self.a.array["burst3"] = var_00; + self.a.array["burst4"] = var_00; + self.a.array["burst5"] = var_00; + self.a.array["burst6"] = var_00; + } + else + { + self.a.array["fire"] = %exposed_shoot_auto_v2; + self.a.array["semi2"] = %exposed_shoot_semi2; + self.a.array["semi3"] = %exposed_shoot_semi3; + self.a.array["semi4"] = %exposed_shoot_semi4; + self.a.array["semi5"] = %exposed_shoot_semi5; + if(animscripts/utility::weapon_pump_action_shotgun()) + { + self.a.array["single"] = animscripts/utility::array(%shotgun_stand_fire_1a); + } + else + { + self.a.array["single"] = animscripts/utility::array(%exposed_shoot_semi1); + } + + self.a.array["burst2"] = %exposed_shoot_burst3; + self.a.array["burst3"] = %exposed_shoot_burst3; + self.a.array["burst4"] = %exposed_shoot_burst4; + self.a.array["burst5"] = %exposed_shoot_burst5; + self.a.array["burst6"] = %exposed_shoot_burst6; + } + + self.a.array["exposed_idle"] = animscripts/utility::array(%exposed_idle_alert_v1,%exposed_idle_alert_v2,%exposed_idle_alert_v3); +} + +//Function Number: 54 +set_crouching_animarray_aiming() +{ + if(!isdefined(self.a.array)) + { + } + + if(self.a.var_899 == "over") + { + self.a.array["add_aim_up"] = %covercrouch_aim8_add; + self.a.array["add_aim_down"] = %covercrouch_aim2_add; + self.a.array["add_aim_left"] = %covercrouch_aim4_add; + self.a.array["add_aim_right"] = %covercrouch_aim6_add; + self.a.array["straight_level"] = %covercrouch_aim5; + var_00["fire"] = %exposed_shoot_auto_v2; + if(animscripts/utility::weapon_pump_action_shotgun()) + { + } + else + { + } + + self.a.array["exposed_idle"] = animscripts/utility::array(%exposed_idle_alert_v1,%exposed_idle_alert_v2,%exposed_idle_alert_v3); + return; + } + + if(self.a.var_899 == "lean") + { + var_01 = self.a.array["lean_fire"]; + var_02 = self.a.array["lean_single"]; + self.a.array["fire"] = var_01; + self.a.array["single"] = animscripts/utility::array(var_02); + self.a.array["semi2"] = var_02; + self.a.array["semi3"] = var_02; + self.a.array["semi4"] = var_02; + self.a.array["semi5"] = var_02; + self.a.array["burst2"] = var_01; + self.a.array["burst3"] = var_01; + self.a.array["burst4"] = var_01; + self.a.array["burst5"] = var_01; + self.a.array["burst6"] = var_01; + } + else + { + self.a.array["fire"] = %exposed_crouch_shoot_auto_v2; + self.a.array["semi2"] = %exposed_crouch_shoot_semi2; + self.a.array["semi3"] = %exposed_crouch_shoot_semi3; + self.a.array["semi4"] = %exposed_crouch_shoot_semi4; + self.a.array["semi5"] = %exposed_crouch_shoot_semi5; + if(animscripts/utility::weapon_pump_action_shotgun()) + { + self.a.array["single"] = animscripts/utility::array(%shotgun_crouch_fire); + } + else + { + self.a.array["single"] = animscripts/utility::array(%exposed_crouch_shoot_semi1); + } + + self.a.array["burst2"] = %exposed_crouch_shoot_burst3; + self.a.array["burst3"] = %exposed_crouch_shoot_burst3; + self.a.array["burst4"] = %exposed_crouch_shoot_burst4; + self.a.array["burst5"] = %exposed_crouch_shoot_burst5; + self.a.array["burst6"] = %exposed_crouch_shoot_burst6; + } + + self.a.array["add_aim_up"] = %exposed_crouch_aim_8; + self.a.array["add_aim_down"] = %exposed_crouch_aim_2; + self.a.array["add_aim_left"] = %exposed_crouch_aim_4; + self.a.array["add_aim_right"] = %exposed_crouch_aim_6; + self.a.array["add_turn_aim_up"] = %exposed_crouch_turn_aim_8; + self.a.array["add_turn_aim_down"] = %exposed_crouch_turn_aim_2; + self.a.array["add_turn_aim_left"] = %exposed_crouch_turn_aim_4; + self.a.array["add_turn_aim_right"] = %exposed_crouch_turn_aim_6; + self.a.array["straight_level"] = %exposed_crouch_aim_5; + self.a.array["exposed_idle"] = animscripts/utility::array(%exposed_crouch_idle_alert_v1,%exposed_crouch_idle_alert_v2,%exposed_crouch_idle_alert_v3); +} + +//Function Number: 55 +func_1FFA() +{ + self notify("killanimscript"); + thread animscripts/combat::main(); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/cover_arrival.gsc b/MW3/Xbox/SP/animscripts/cover_arrival.gsc new file mode 100644 index 0000000..b72aac0 --- /dev/null +++ b/MW3/Xbox/SP/animscripts/cover_arrival.gsc @@ -0,0 +1,1534 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\cover_arrival.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 49 + * Decompile Time: 813 ms + * Timestamp: 10/27/2023 2:30:10 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self endon("killanimscript"); + self endon("abort_approach"); + var_00 = self.approachnumber; + var_01 = level.covertrans[self.approachtype][var_00]; + if(!isdefined(self.heat)) + { + thread abortapproachifthreatened(); + } + + self clearanim(%body,0.2); + self setflaggedanimrestart("coverArrival",var_01,1,0.2,self.movetransitionrate); + animscripts/shared::donotetracks("coverArrival",::handlestartaim); + var_02 = level.arrivalendstance[self.approachtype]; + if(isdefined(var_02)) + { + self.a.var_911 = var_02; + } + + self.a.movement = "stop"; + self.a.var_CCA = self.approachtype; + self clearanim(%root,0.3); + self.lastapproachaborttime = undefined; +} + +//Function Number: 2 +handlestartaim(param_00) +{ + if(param_00 == "start_aim") + { + if(self.a.var_911 == "stand") + { + animscripts/animset::set_animarray_standing(); + } + else if(self.a.var_911 == "crouch") + { + animscripts/animset::set_animarray_crouching(); + } + else + { + } + + animscripts/combat::set_aim_and_turn_limits(); + self.previouspitchdelta = 0; + animscripts/combat_utility::setupaim(0); + thread animscripts/track::trackshootentorpos(); + } +} + +//Function Number: 3 +isthreatenedbyenemy() +{ + if(!isdefined(self.node)) + { + return 0; + } + + if(isdefined(self.enemy) && self seerecently(self.enemy,1.5) && distancesquared(self.origin,self.enemy.origin) < 250000) + { + return !self iscovervalidagainstenemy(); + } + + return 0; +} + +//Function Number: 4 +abortapproachifthreatened() +{ + self endon("killanimscript"); + for(;;) + { + if(!isdefined(self.node)) + { + return; + } + + if(isthreatenedbyenemy()) + { + self clearanim(%root,0.3); + self notify("abort_approach"); + self.lastapproachaborttime = gettime(); + return; + } + + wait 0.1; + } +} + +//Function Number: 5 +func_0D56(param_00) +{ + if(isdefined(self.heat)) + { + return 0; + } + + if(param_00 == "left" || param_00 == "left_crouch") + { + return 90; + } + else if(param_00 == "right" || param_00 == "right_crouch") + { + return -90; + } + + return 0; +} + +//Function Number: 6 +canusesawapproach(param_00) +{ + if(!animscripts/utility::usingmg()) + { + return 0; + } + + if(!isdefined(param_00.turretinfo)) + { + return 0; + } + + if(param_00.type != "Cover Stand" && param_00.type != "Cover Prone" && param_00.type != "Cover Crouch") + { + return 0; + } + + if(isdefined(self.enemy) && distancesquared(self.enemy.origin,param_00.origin) < 65536) + { + return 0; + } + + if(animscripts/utility::getnodeyawtoenemy() > 40 || animscripts/utility::getnodeyawtoenemy() < -40) + { + return 0; + } + + return 1; +} + +//Function Number: 7 +determinenodeapproachtype(param_00) +{ + if(canusesawapproach(param_00)) + { + if(param_00.type == "Cover Stand") + { + return "stand_saw"; + } + + if(param_00.type == "Cover Crouch") + { + return "crouch_saw"; + } + else if(param_00.type == "Cover Prone") + { + return "prone_saw"; + } + } + + if(!isdefined(level.approach_types[param_00.type])) + { + return; + } + + if(isdefined(param_00.arrivalstance)) + { + var_01 = param_00.arrivalstance; + } + else + { + var_01 = var_01 gethighestnodestance(); + } + + if(var_01 == "prone") + { + var_01 = "crouch"; + } + + var_02 = level.approach_types[param_00.type][var_01]; + if(use_readystand() && var_02 == "exposed") + { + var_02 = "exposed_ready"; + } + + if(animscripts/utility::shouldcqb()) + { + var_03 = var_02 + "_cqb"; + if(isdefined(level.covertrans[var_03])) + { + var_02 = var_03; + } + } + + return var_02; +} + +//Function Number: 8 +determinenodeexittype(param_00) +{ + if(canusesawapproach(param_00)) + { + if(param_00.type == "Cover Stand") + { + return "stand_saw"; + } + + if(param_00.type == "Cover Crouch") + { + return "crouch_saw"; + } + else if(param_00.type == "Cover Prone") + { + return "prone_saw"; + } + } + + if(!isdefined(level.approach_types[param_00.type])) + { + return; + } + + if(isdefined(level.var_D5D[param_00.type]) && level.var_D5D[param_00.type] != self.a.var_911) + { + return; + } + + var_01 = self.a.var_911; + if(var_01 == "prone") + { + var_01 = "crouch"; + } + + var_02 = level.approach_types[param_00.type][var_01]; + if(use_readystand() && var_02 == "exposed") + { + var_02 = "exposed_ready"; + } + + if(animscripts/utility::shouldcqb()) + { + var_03 = var_02 + "_cqb"; + if(isdefined(level.coverexit[var_03])) + { + var_02 = var_03; + } + } + + return var_02; +} + +//Function Number: 9 +determineexposedapproachtype(param_00) +{ + if(isdefined(self.heat)) + { + return "heat"; + } + + if(isdefined(param_00.arrivalstance)) + { + var_01 = param_00.arrivalstance; + } + else + { + var_01 = var_01 gethighestnodestance(); + } + + if(var_01 == "prone") + { + var_01 = "crouch"; + } + + if(var_01 == "crouch") + { + var_02 = "exposed_crouch"; + } + else + { + var_02 = "exposed"; + } + + if(var_02 == "exposed" && use_readystand()) + { + var_02 = var_02 + "_ready"; + } + + if(animscripts/utility::shouldcqb()) + { + return var_02 + "_cqb"; + } + + return var_02; +} + +//Function Number: 10 +getmaxdirectionsandexcludedirfromapproachtype(param_00) +{ + var_01 = spawnstruct(); + if(isdefined(param_00) && isdefined(level.maxdirections[param_00.type])) + { + var_01.maxdirections = level.maxdirections[param_00.type]; + var_01.excludedir = level.excludedir[param_00.type]; + } + else + { + var_01.maxdirections = 9; + var_01.excludedir = -1; + } + + return var_01; +} + +//Function Number: 11 +shouldapproachtoexposed(param_00) +{ + if(!isdefined(self.enemy)) + { + return 0; + } + + if(animscripts/combat_utility::needtoreload(0.5)) + { + return 0; + } + + if(animscripts/utility::issuppressedwrapper()) + { + return 0; + } + + if(isdefined(level.exposedtransition[param_00])) + { + return 0; + } + + if(param_00 == "left_crouch" || param_00 == "right_crouch") + { + return 0; + } + + return animscripts/utility::canseepointfromexposedatnode(self.enemy getshootatpos(),self.node); +} + +//Function Number: 12 +func_0D66(param_00,param_01) +{ + var_02 = anglestoright(param_00); + var_03 = anglestoforward(param_00); + return var_03 * param_01[0] + var_02 * 0 - param_01[1]; +} + +//Function Number: 13 +getapproachent() +{ + if(isdefined(self.scriptedarrivalent)) + { + return self.scriptedarrivalent; + } + + if(isdefined(self.node)) + { + return self.node; + } + + return undefined; +} + +//Function Number: 14 +getapproachpoint(param_00,param_01) +{ + if(param_01 == "stand_saw") + { + var_02 = (param_00.turretinfo.origin[0],param_00.turretinfo.origin[1],param_00.origin[2]); + var_03 = anglestoforward((0,param_00.turretinfo.angles[1],0)); + var_04 = anglestoright((0,param_00.turretinfo.angles[1],0)); + var_02 = var_02 + var_03 * -32.545 - var_04 * 6.899; + } + else if(var_02 == "crouch_saw") + { + var_02 = (param_01.turretinfo.origin[0],param_01.turretinfo.origin[1],param_01.origin[2]); + var_03 = anglestoforward((0,param_00.turretinfo.angles[1],0)); + var_04 = anglestoright((0,param_00.turretinfo.angles[1],0)); + var_02 = var_02 + var_03 * -32.545 - var_04 * 6.899; + } + else if(var_02 == "prone_saw") + { + var_02 = (param_01.turretinfo.origin[0],param_01.turretinfo.origin[1],param_01.origin[2]); + var_03 = anglestoforward((0,param_00.turretinfo.angles[1],0)); + var_04 = anglestoright((0,param_00.turretinfo.angles[1],0)); + var_02 = var_02 + var_03 * -37.36 - var_04 * 13.279; + } + else if(isdefined(self.scriptedarrivalent)) + { + var_02 = self.goalpos; + } + else + { + var_02 = param_01.origin; + } + + return var_02; +} + +//Function Number: 15 +checkapproachpreconditions() +{ + if(isdefined(self getnegotiationstartnode())) + { + return 0; + } + + if(isdefined(self.disablearrivals) && self.disablearrivals) + { + return 0; + } + + return 1; +} + +//Function Number: 16 +checkapproachconditions(param_00,param_01,param_02) +{ + if(isdefined(level.exposedtransition[param_00])) + { + return 0; + } + + if(param_00 == "stand" || param_00 == "crouch") + { + if(animscripts/utility::absangleclamp180(vectortoyaw(param_01) - param_02.angles[1] + 180) < 60) + { + return 0; + } + } + + if(isthreatenedbyenemy() || isdefined(self.lastapproachaborttime) && self.lastapproachaborttime + 500 > gettime()) + { + return 0; + } + + return 1; +} + +//Function Number: 17 +func_0C94(param_00) +{ + self endon("killanimscript"); + if(isdefined(self.heat)) + { + thread dolastminuteexposedapproachwrapper(); + return; + } + + if(param_00) + { + self.requestarrivalnotify = 1; + } + + self.a.var_CCA = undefined; + thread dolastminuteexposedapproachwrapper(); + self waittill("cover_approach",var_01); + if(!checkapproachpreconditions()) + { + return; + } + + thread func_0C94(0); + var_02 = "exposed"; + var_03 = self.pathgoalpos; + var_04 = vectortoyaw(var_01); + var_05 = var_04; + var_06 = getapproachent(); + if(isdefined(var_06)) + { + var_02 = determinenodeapproachtype(var_06); + if(isdefined(var_02) && var_02 != "exposed") + { + var_03 = getapproachpoint(var_06,var_02); + var_04 = var_06.angles[1]; + var_05 = animscripts/utility::getnodeforwardyaw(var_06); + } + } + else if(use_readystand()) + { + if(animscripts/utility::shouldcqb()) + { + var_02 = "exposed_ready_cqb"; + } + else + { + var_02 = "exposed_ready"; + } + } + + if(!checkapproachconditions(var_02,var_01,var_06)) + { + return; + } + + startcoverapproach(var_02,var_03,var_04,var_05,var_01); +} + +//Function Number: 18 +coverapproachlastminutecheck(param_00,param_01,param_02,param_03,param_04) +{ + if(isdefined(self.disablearrivals) && self.disablearrivals) + { + return 0; + } + + if(abs(self getmotionangle()) > 45 && isdefined(self.enemy) && vectordot(anglestoforward(self.angles),vectornormalize(self.enemy.origin - self.origin)) > 0.8) + { + return 0; + } + + if(self.a.var_911 != "stand" || self.a.movement != "run" && !animscripts/utility::iscqbwalkingorfacingenemy()) + { + return 0; + } + + if(animscripts/utility::absangleclamp180(param_04 - self.angles[1]) > 30) + { + if(isdefined(self.enemy) && self cansee(self.enemy) && distancesquared(self.origin,self.enemy.origin) < 65536) + { + if(vectordot(anglestoforward(self.angles),self.enemy.origin - self.origin) > 0) + { + return 0; + } + } + } + + if(!checkcoverenterpos(param_00,param_01,param_02,param_03,0)) + { + return 0; + } + + return 1; +} + +//Function Number: 19 +approachwaittillclose(param_00,param_01) +{ + if(!isdefined(param_00)) + { + return; + } + + for(;;) + { + if(!isdefined(self.pathgoalpos)) + { + waitforpathgoalpos(); + } + + var_02 = distance(self.origin,self.pathgoalpos); + if(var_02 <= param_01 + 8) + { + break; + } + + var_03 = var_02 - param_01 / 250 - 0.1; + if(var_03 < 0.05) + { + var_03 = 0.05; + } + + wait var_03; + } +} + +//Function Number: 20 +startcoverapproach(param_00,param_01,param_02,param_03,param_04) +{ + self endon("killanimscript"); + self endon("cover_approach"); + var_05 = getapproachent(); + var_06 = getmaxdirectionsandexcludedirfromapproachtype(var_05); + var_07 = var_06.maxdirections; + var_08 = var_06.excludedir; + var_09 = vectordot(param_04,anglestoforward(var_05.angles)) >= 0; + var_06 = checkarrivalenterpositions(param_01,param_03,param_00,param_04,var_07,var_08,var_09); + if(var_06.approachnumber < 0) + { + return; + } + + var_0A = var_06.approachnumber; + if(level.newarrivals && var_0A <= 6 && var_09) + { + self endon("goal_changed"); + self.var_C98 = level.covertranslongestdist[param_00]; + approachwaittillclose(var_05,self.var_C98); + var_0B = vectornormalize(param_01 - self.origin); + var_06 = checkarrivalenterpositions(param_01,param_03,param_00,var_0B,var_07,var_08,var_09); + self.var_C98 = length(level.covertransdist[param_00][var_0A]); + approachwaittillclose(var_05,self.var_C98); + if(!self maymovetopoint(param_01)) + { + self.var_C98 = undefined; + return; + } + + if(var_06.approachnumber < 0) + { + self.var_C98 = undefined; + return; + } + + var_0A = var_06.approachnumber; + var_0C = param_03 - level.var_D72[param_00][var_0A]; + } + else + { + self setruntopos(self.var_D73); + self waittill("runto_arrived"); + var_0C = param_04 - level.var_D72[param_01][var_0C]; + if(!coverapproachlastminutecheck(param_01,param_03,param_00,var_0A,var_0C)) + { + return; + } + } + + self.approachnumber = var_0A; + self.approachtype = param_00; + self.var_C98 = undefined; + self startcoverarrival(self.var_D73,var_0C); +} + +//Function Number: 21 +checkarrivalenterpositions(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + var_07 = spawnstruct(); + calculatenodetransitionangles(var_07,param_02,1,param_01,param_03,param_04,param_05); + sortnodetransitionangles(var_07,param_04); + var_08 = spawnstruct(); + var_09 = (0,0,0); + var_08.approachnumber = -1; + var_0A = 2; + for(var_0B = 1;var_0B <= var_0A;var_0B++) + { + var_08.approachnumber = var_07.transindex[var_0B]; + if(!checkcoverenterpos(param_00,param_01,param_02,var_08.approachnumber,param_06)) + { + continue; + } + + break; + } + + if(var_0B > var_0A) + { + var_08.approachnumber = -1; + return var_08; + } + + var_0C = distancesquared(param_00,self.origin); + var_0D = distancesquared(param_00,self.var_D73); + if(var_0C < var_0D * 2 * 2) + { + if(var_0C < var_0D) + { + var_08.approachnumber = -1; + return var_08; + } + + if(!level.newarrivals || !param_06) + { + var_0E = vectornormalize(self.var_D73 - self.origin); + var_0F = param_01 - level.var_D72[param_02][var_08.approachnumber]; + var_10 = anglestoforward((0,var_0F,0)); + var_11 = vectordot(var_0E,var_10); + if(var_11 < 0.707) + { + var_08.approachnumber = -1; + return var_08; + } + } + } + + return var_08; +} + +//Function Number: 22 +dolastminuteexposedapproachwrapper() +{ + self endon("killanimscript"); + self endon("move_interrupt"); + self notify("doing_last_minute_exposed_approach"); + self endon("doing_last_minute_exposed_approach"); + thread watchgoalchanged(); + for(;;) + { + func_0D7D(); + for(;;) + { + common_scripts\utility::waittill_any("goal_changed","goal_changed_previous_frame"); + if(isdefined(self.var_D73) && isdefined(self.pathgoalpos) && distance2d(self.var_D73,self.pathgoalpos) < 1) + { + continue; + } + + break; + } + } +} + +//Function Number: 23 +watchgoalchanged() +{ + self endon("killanimscript"); + self endon("doing_last_minute_exposed_approach"); + for(;;) + { + self waittill("goal_changed"); + wait 0.05; + self notify("goal_changed_previous_frame"); + } +} + +//Function Number: 24 +exposedapproachconditioncheck(param_00,param_01) +{ + if(!isdefined(self.pathgoalpos)) + { + return 0; + } + + if(isdefined(self.disablearrivals) && self.disablearrivals) + { + return 0; + } + + if(isdefined(self.var_D79)) + { + if(!self [[ self.var_D79 ]](param_00)) + { + return 0; + } + } + else + { + if(!self.facemotion && !isdefined(param_00) || param_00.type == "Path") + { + return 0; + } + + if(self.a.var_911 != "stand") + { + return 0; + } + } + + if(isthreatenedbyenemy() || isdefined(self.lastapproachaborttime) && self.lastapproachaborttime + 500 > gettime()) + { + return 0; + } + + if(!self maymovetopoint(self.pathgoalpos)) + { + return 0; + } + + return 1; +} + +//Function Number: 25 +exposedapproachwaittillclose() +{ + for(;;) + { + if(!isdefined(self.pathgoalpos)) + { + waitforpathgoalpos(); + } + + var_00 = getapproachent(); + if(isdefined(var_00) && !isdefined(self.heat)) + { + var_01 = var_00.origin; + } + else + { + var_01 = self.pathgoalpos; + } + + var_02 = distance(self.origin,var_01); + var_03 = level.longestexposedapproachdist; + if(var_02 <= var_03 + 8) + { + break; + } + + var_04 = var_02 - level.longestexposedapproachdist / 250 - 0.1; + if(var_04 < 0) + { + break; + } + + if(var_04 < 0.05) + { + var_04 = 0.05; + } + + wait var_04; + } +} + +//Function Number: 26 +faceenemyatendofapproach(param_00) +{ + if(!isdefined(self.enemy)) + { + return 0; + } + + if(isdefined(self.heat) && isdefined(param_00)) + { + return 0; + } + + if(self.combatmode == "cover" && issentient(self.enemy) && gettime() - self lastknowntime(self.enemy) > 15000) + { + return 0; + } + + return sighttracepassed(self.enemy getshootatpos(),self.pathgoalpos + (0,0,60),0,undefined); +} + +//Function Number: 27 +func_0D7D() +{ + self endon("goal_changed"); + self endon("move_interrupt"); + if(isdefined(self getnegotiationstartnode())) + { + return; + } + + exposedapproachwaittillclose(); + if(isdefined(self.grenade) && isdefined(self.grenade.activator) && self.grenade.activator == self) + { + return; + } + + var_00 = "exposed"; + var_01 = 1; + if(isdefined(self.var_D7E)) + { + var_00 = self [[ self.var_D7E ]](); + } + else if(use_readystand()) + { + if(animscripts/utility::shouldcqb()) + { + var_00 = "exposed_ready_cqb"; + } + else + { + var_00 = "exposed_ready"; + } + } + else if(animscripts/utility::shouldcqb()) + { + var_00 = "exposed_cqb"; + } + else if(isdefined(self.heat)) + { + var_00 = "heat"; + var_01 = 4096; + } + + var_02 = getapproachent(); + if(isdefined(var_02) && isdefined(self.pathgoalpos) && !isdefined(self.var_D7F)) + { + var_03 = distancesquared(self.pathgoalpos,var_02.origin) < var_01; + } + else + { + var_03 = 0; + } + + if(var_03) + { + var_00 = determineexposedapproachtype(var_02); + } + + var_04 = vectornormalize(self.pathgoalpos - self.origin); + var_05 = vectortoyaw(var_04); + if(isdefined(self.faceenemyarrival)) + { + var_05 = self.angles[1]; + } + else if(faceenemyatendofapproach(var_02)) + { + var_05 = vectortoyaw(self.enemy.origin - self.pathgoalpos); + } + else + { + var_06 = isdefined(var_02) && var_03; + var_06 = var_06 && var_02.type != "Path" && var_02.type != "Ambush" || !animscripts/utility::recentlysawenemy(); + if(var_06) + { + var_05 = animscripts/utility::getnodeforwardyaw(var_02); + } + else + { + var_07 = self getanglestolikelyenemypath(); + if(isdefined(var_07)) + { + var_05 = var_07[1]; + } + } + } + + var_08 = spawnstruct(); + calculatenodetransitionangles(var_08,var_00,1,var_05,var_04,9,-1); + var_09 = 1; + for(var_0A = 2;var_0A <= 9;var_0A++) + { + if(var_08.transitions[var_0A] > var_08.transitions[var_09]) + { + var_09 = var_0A; + } + } + + self.approachnumber = var_08.transindex[var_09]; + self.approachtype = var_00; + var_0B = level.covertrans[var_00][self.approachnumber]; + var_0C = length(level.covertransdist[var_00][self.approachnumber]); + var_0D = var_0C + 8; + var_0D = var_0D * var_0D; + while(isdefined(self.pathgoalpos) && distancesquared(self.origin,self.pathgoalpos) > var_0D) + { + wait 0.05; + } + + if(isdefined(self.var_C98) && self.var_C98 < var_0C + 8) + { + return; + } + + if(!exposedapproachconditioncheck(var_02,var_03)) + { + return; + } + + var_0E = distance(self.origin,self.pathgoalpos); + if(abs(var_0E - var_0C) > 8) + { + return; + } + + var_0F = vectortoyaw(self.pathgoalpos - self.origin); + if(isdefined(self.heat) && var_03) + { + var_10 = var_05 - level.var_D72[var_00][self.approachnumber]; + var_11 = getarrivalstartpos(self.pathgoalpos,var_05,var_00,self.approachnumber); + } + else if(var_0E > 0) + { + var_12 = level.covertransdist[var_02][self.approachnumber]; + var_13 = atan(var_12[1] / var_12[0]); + if(!isdefined(self.faceenemyarrival) || self.facemotion) + { + var_10 = var_0F - var_13; + if(animscripts/utility::absangleclamp180(var_10 - self.angles[1]) > 30) + { + return; + } + } + else + { + var_10 = self.angles[1]; + } + + var_14 = var_0E - var_0C; + var_11 = self.origin + vectornormalize(self.pathgoalpos - self.origin) * var_14; + } + else + { + var_10 = self.angles[1]; + var_11 = self.origin; + } + + self startcoverarrival(var_11,var_10); +} + +//Function Number: 28 +waitforpathgoalpos() +{ + for(;;) + { + if(isdefined(self.pathgoalpos)) + { + return; + } + + wait 0.1; + } +} + +//Function Number: 29 +startmovetransitionpreconditions() +{ + if(!isdefined(self.pathgoalpos)) + { + return 0; + } + + if(!self shouldfacemotion()) + { + return 0; + } + + if(self.a.var_911 == "prone") + { + return 0; + } + + if(isdefined(self.disableexits) && self.disableexits) + { + return 0; + } + + if(self.stairsstate != "none") + { + return 0; + } + + if(!self isstanceallowed("stand") && !isdefined(self.heat)) + { + return 0; + } + + if(distancesquared(self.origin,self.pathgoalpos) < 10000) + { + return 0; + } + + return 1; +} + +//Function Number: 30 +startmovetransitionconditions(param_00,param_01) +{ + if(!isdefined(param_00)) + { + return 0; + } + + if(param_00 == "exposed" || isdefined(self.heat)) + { + if(self.a.var_911 != "stand" && self.a.var_911 != "crouch") + { + return 0; + } + + if(self.a.movement != "stop") + { + return 0; + } + } + + if(!isdefined(self.heat) && isdefined(self.enemy) && vectordot(self.lookaheaddir,self.enemy.origin - self.origin) < 0) + { + if(animscripts/utility::func_B35() && distancesquared(self.origin,self.enemy.origin) < 90000) + { + return 0; + } + } + + return 1; +} + +//Function Number: 31 +getexitnode() +{ + var_00 = undefined; + if(!isdefined(self.heat)) + { + var_01 = 400; + } + else + { + var_01 = 4096; + } + + if(isdefined(self.node) && distancesquared(self.origin,self.node.origin) < var_01) + { + var_00 = self.node; + } + else if(isdefined(self.prevnode) && distancesquared(self.origin,self.prevnode.origin) < var_01) + { + var_00 = self.prevnode; + } + + if(isdefined(var_00) && isdefined(self.heat) && animscripts/utility::absangleclamp180(self.angles[1] - var_00.angles[1]) > 30) + { + return undefined; + } + + return var_00; +} + +//Function Number: 32 +custommovetransitionfunc() +{ + if(!isdefined(self.startmovetransitionanim)) + { + return; + } + + self animmode("zonly_physics",0); + self orientmode("face current"); + self setflaggedanimknoballrestart("move",self.startmovetransitionanim,%root,1); + if(animhasnotetrack(self.startmovetransitionanim,"code_move")) + { + animscripts/shared::donotetracks("move"); + self orientmode("face motion"); + self animmode("none",0); + } + + animscripts/shared::donotetracks("move"); +} + +//Function Number: 33 +determinenonnodeexittype(param_00) +{ + if(self.a.var_911 == "stand") + { + param_00 = "exposed"; + } + else + { + param_00 = "exposed_crouch"; + } + + if(use_readystand()) + { + param_00 = "exposed_ready"; + } + + if(animscripts/utility::shouldcqb()) + { + param_00 = param_00 + "_cqb"; + } + else if(isdefined(self.heat)) + { + param_00 = "heat"; + } + + return param_00; +} + +//Function Number: 34 +determineheatcoverexittype(param_00,param_01) +{ + if(param_00.type == "Cover Right") + { + param_01 = "heat_right"; + } + else if(param_00.type == "Cover Left") + { + param_01 = "heat_left"; + } + + return param_01; +} + +//Function Number: 35 +startmovetransition() +{ + if(isdefined(self.var_D8B)) + { + var_00 = self.var_D8B; + if(!isdefined(self.permanentcustommovetransition)) + { + self.var_D8B = undefined; + } + + [[ var_00 ]](); + if(!isdefined(self.permanentcustommovetransition)) + { + self.startmovetransitionanim = undefined; + } + + self clearanim(%root,0.2); + self orientmode("face default"); + self animmode("none",0); + return; + } + + self endon("killanimscript"); + if(!startmovetransitionpreconditions()) + { + return; + } + + var_01 = self.origin; + var_02 = self.angles[1]; + var_03 = "exposed"; + var_04 = 0; + var_05 = getexitnode(); + if(isdefined(var_05)) + { + var_06 = determinenodeexittype(var_05); + if(isdefined(var_06)) + { + var_03 = var_06; + var_04 = 1; + if(isdefined(self.heat)) + { + var_03 = determineheatcoverexittype(var_05,var_03); + } + + if(!isdefined(level.exposedtransition[var_03]) && var_03 != "stand_saw" && var_03 != "crouch_saw") + { + var_07 = animscripts/utility::absangleclamp180(self.angles[1] - animscripts/utility::getnodeforwardyaw(var_05)); + if(var_07 < 5) + { + if(!isdefined(self.heat)) + { + var_01 = var_05.origin; + } + + var_02 = animscripts/utility::getnodeforwardyaw(var_05); + } + } + } + } + + if(!startmovetransitionconditions(var_03,var_05)) + { + return; + } + + var_08 = isdefined(level.exposedtransition[var_03]); + if(!var_04) + { + var_03 = determinenonnodeexittype(); + } + + var_09 = (-1 * self.lookaheaddir[0],-1 * self.lookaheaddir[1],0); + var_0A = getmaxdirectionsandexcludedirfromapproachtype(var_05); + var_0B = var_0A.maxdirections; + var_0C = var_0A.excludedir; + var_0D = spawnstruct(); + calculatenodetransitionangles(var_0D,var_03,0,var_02,var_09,var_0B,var_0C); + sortnodetransitionangles(var_0D,var_0B); + var_0E = -1; + var_0F = 3; + if(var_08) + { + var_0F = 1; + } + + for(var_10 = 1;var_10 <= var_0F;var_10++) + { + var_0E = var_0D.transindex[var_10]; + if(checkcoverexitpos(var_01,var_02,var_03,var_08,var_0E)) + { + break; + } + } + + if(var_10 > var_0F) + { + return; + } + + var_11 = distancesquared(self.origin,self.coverexitpos) * 1.25 * 1.25; + if(distancesquared(self.origin,self.pathgoalpos) < var_11) + { + return; + } + + docoverexitanimation(var_03,var_0E); +} + +//Function Number: 36 +func_0D8E(param_00) +{ + if(!isdefined(param_00)) + { + return "{undefined}"; + } + + return param_00; +} + +//Function Number: 37 +docoverexitanimation(param_00,param_01) +{ + var_02 = level.coverexit[param_00][param_01]; + var_03 = vectortoangles(self.lookaheaddir); + if(self.a.var_911 == "prone") + { + return; + } + + var_05 = 0.2; + self animmode("zonly_physics",0); + self orientmode("face angle",self.angles[1]); + self setflaggedanimknoballrestart("coverexit",var_02,%body,1,var_05,self.movetransitionrate); + animscripts/shared::donotetracks("coverexit"); + self.a.var_911 = "stand"; + self.a.movement = "run"; + self.ignorepathchange = undefined; + self orientmode("face motion"); + self animmode("none",0); + finishcoverexitnotetracks("coverexit"); + self clearanim(%root,0.2); + self orientmode("face default"); + self animmode("normal",0); +} + +//Function Number: 38 +finishcoverexitnotetracks(param_00) +{ + self endon("move_loop_restart"); + animscripts/shared::donotetracks(param_00); +} + +//Function Number: 39 +drawvec(param_00,param_01,param_02,param_03) +{ + for(var_04 = 0;var_04 < param_02 * 100;var_04++) + { + wait 0.05; + } +} + +//Function Number: 40 +drawapproachvec(param_00) +{ + self endon("killanimscript"); + for(;;) + { + if(!isdefined(self.node)) + { + break; + } + + wait 0.05; + } +} + +//Function Number: 41 +calculatenodetransitionangles(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + param_00.transitions = []; + param_00.transindex = []; + var_07 = undefined; + var_08 = 1; + var_09 = 0; + if(param_02) + { + var_07 = level.var_D72[param_01]; + var_08 = -1; + var_09 = 0; + } + else + { + var_07 = level.coverexitangles[param_01]; + var_08 = 1; + var_09 = 180; + } + + for(var_0A = 1;var_0A <= param_05;var_0A++) + { + param_00.transindex[var_0A] = var_0A; + if(var_0A == 5 || var_0A == param_06 || !isdefined(var_07[var_0A])) + { + param_00.transitions[var_0A] = -1.0003; + continue; + } + + var_0B = (0,param_03 + var_08 * var_07[var_0A] + var_09,0); + var_0C = vectornormalize(anglestoforward(var_0B)); + param_00.transitions[var_0A] = vectordot(param_04,var_0C); + } +} + +//Function Number: 42 +sortnodetransitionangles(param_00,param_01) +{ + for(var_02 = 2;var_02 <= param_01;var_02++) + { + var_03 = param_00.transitions[param_00.transindex[var_02]]; + var_04 = param_00.transindex[var_02]; + for(var_05 = var_02 - 1;var_05 >= 1;var_05--) + { + if(var_03 < param_00.transitions[param_00.transindex[var_05]]) + { + break; + } + + param_00.transindex[var_05 + 1] = param_00.transindex[var_05]; + } + + param_00.transindex[var_05 + 1] = var_04; + } +} + +//Function Number: 43 +checkcoverexitpos(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = (0,param_01,0); + var_06 = anglestoforward(var_05); + var_07 = anglestoright(var_05); + var_08 = var_06 * level.coverexitdist[param_02][param_04][0]; + var_09 = var_07 * level.coverexitdist[param_02][param_04][1]; + var_0A = param_00 + var_08 - var_09; + self.coverexitpos = var_0A; + if(!param_03 && !self checkcoverexitposwithpath(var_0A)) + { + return 0; + } + + if(!self maymovefrompointtopoint(self.origin,var_0A)) + { + return 0; + } + + if(param_04 <= 6 || param_03) + { + return 1; + } + + var_08 = var_06 * level.var_D98[param_02][param_04][0]; + var_09 = var_07 * level.var_D98[param_02][param_04][1]; + var_0B = var_0A + var_08 - var_09; + self.coverexitpos = var_0B; + return self maymovefrompointtopoint(var_0A,var_0B); +} + +//Function Number: 44 +getarrivalstartpos(param_00,param_01,param_02,param_03) +{ + var_04 = (0,param_01 - level.var_D72[param_02][param_03],0); + var_05 = anglestoforward(var_04); + var_06 = anglestoright(var_04); + var_07 = var_05 * level.covertransdist[param_02][param_03][0]; + var_08 = var_06 * level.covertransdist[param_02][param_03][1]; + return param_00 - var_07 + var_08; +} + +//Function Number: 45 +getarrivalprestartpos(param_00,param_01,param_02,param_03) +{ + var_04 = (0,param_01 - level.var_D72[param_02][param_03],0); + var_05 = anglestoforward(var_04); + var_06 = anglestoright(var_04); + var_07 = var_05 * level.var_D9B[param_02][param_03][0]; + var_08 = var_06 * level.var_D9B[param_02][param_03][1]; + return param_00 - var_07 + var_08; +} + +//Function Number: 46 +checkcoverenterpos(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = getarrivalstartpos(param_00,param_01,param_02,param_03); + self.var_D73 = var_05; + if(level.newarrivals && param_03 <= 6 && param_04) + { + return 1; + } + + if(!self maymovefrompointtopoint(var_05,param_00)) + { + return 0; + } + + if(param_03 <= 6 || isdefined(level.exposedtransition[param_02])) + { + return 1; + } + + var_06 = getarrivalprestartpos(var_05,param_01,param_02,param_03); + self.var_D73 = var_06; + return self maymovefrompointtopoint(var_06,var_05); +} + +//Function Number: 47 +use_readystand() +{ + if(!isdefined(level.readystand_anims_inited)) + { + return 0; + } + + if(!level.readystand_anims_inited) + { + return 0; + } + + if(!isdefined(self.busereadyidle)) + { + return 0; + } + + if(!self.busereadyidle) + { + return 0; + } + + return 1; +} + +//Function Number: 48 +debug_arrivals_on_actor() +{ + return 0; +} + +//Function Number: 49 +debug_arrival(param_00) +{ + if(!debug_arrivals_on_actor()) + { + } +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/cover_behavior.gsc b/MW3/Xbox/SP/animscripts/cover_behavior.gsc new file mode 100644 index 0000000..c49cc4e --- /dev/null +++ b/MW3/Xbox/SP/animscripts/cover_behavior.gsc @@ -0,0 +1,982 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\cover_behavior.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 37 + * Decompile Time: 659 ms + * Timestamp: 10/27/2023 2:30:13 AM +*******************************************************************/ + +//Function Number: 1 +main(param_00) +{ + self.var_8E4 = self.origin; + var_01 = gettime(); + var_02 = spawnstruct(); + var_02.nextallowedlooktime = var_01 - 1; + var_02.nextallowedsuppresstime = var_01 - 1; + resetlookforbettercovertime(); + resetrespondtodeathtime(); + self.seekoutenemytime = gettime(); + self.a.lastencountertime = var_01; + self.a.idlingatcover = 0; + self.a.movement = "stop"; + self.meleecoverchargemintime = var_01 + 3000; + thread func_0B3B(); + var_03 = gettime() > 2500; + var_04 = getcorrectcoverangles(); + for(;;) + { + if(animscripts/combat_utility::shouldhelpadvancingteammate()) + { + if(animscripts/combat_utility::tryrunningtoenemy(1)) + { + wait 0.05; + continue; + } + } + + if(isdefined(param_00.mainloopstart)) + { + var_05 = gettime(); + thread endidleatframeend(); + [[ param_00.mainloopstart ]](); + if(gettime() == var_05) + { + self notify("dont_end_idle"); + } + } + + if(isdefined(param_00.var_B22)) + { + if([[ param_00.var_B22 ]]()) + { + continue; + } + } + + self safeteleport(self.covernode.origin,var_04); + if(!var_03) + { + idle(param_00,0.05 + randomfloat(1.5)); + var_03 = 1; + continue; + } + + if(dononattackcoverbehavior(param_00)) + { + continue; + } + + if(isdefined(level.throwgrenadeatplayerasap) && isalive(level.player)) + { + if(trythrowinggrenade(param_00,level.player)) + { + continue; + } + } + + if(respondtodeadteammate()) + { + return; + } + + var_06 = 0; + var_07 = 0; + if(isalive(self.enemy)) + { + var_06 = isenemyvisiblefromexposed(); + var_07 = animscripts/utility::cansuppressenemyfromexposed(); + } + + if(var_06) + { + if(self.a.var_B25 < gettime()) + { + if(animscripts/combat_utility::func_B26()) + { + return; + } + } + + attackvisibleenemy(param_00); + continue; + } + + if(isdefined(self.aggressivemode) || enemyishiding()) + { + if(advanceonhidingenemy()) + { + return; + } + } + + if(var_07) + { + attacksuppressableenemy(param_00,var_02); + continue; + } + + if(attacknothingtodo(param_00,var_02)) + { + return; + } + } +} + +//Function Number: 2 +end_script(param_00) +{ + self.turntomatchnode = undefined; + self.a.prevattack = undefined; + if(isdefined(self.meleecoverchargemintime) && self.meleecoverchargemintime <= gettime()) + { + self.meleecoverchargegraceendtime = gettime() + 5000; + self.meleecoverchargemintime = undefined; + } +} + +//Function Number: 3 +getcorrectcoverangles() +{ + var_00 = (self.covernode.angles[0],animscripts/utility::getnodeforwardyaw(self.covernode),self.covernode.angles[2]); + return var_00; +} + +//Function Number: 4 +respondtodeadteammate() +{ + if(self atdangerousnode() && self.a.respondtodeathtime < gettime()) + { + if(animscripts/combat_utility::func_B26()) + { + return 1; + } + + self.a.respondtodeathtime = gettime() + 30000; + } + + return 0; +} + +//Function Number: 5 +dononattackcoverbehavior(param_00) +{ + if(suppressedbehavior(param_00)) + { + if(isenemyvisiblefromexposed()) + { + resetseekoutenemytime(); + } + + self.a.lastencountertime = gettime(); + return 1; + } + + if(coverreload(param_00,0)) + { + return 1; + } + + return 0; +} + +//Function Number: 6 +attackvisibleenemy(param_00) +{ + if(distancesquared(self.origin,self.enemy.origin) > 562500) + { + if(trythrowinggrenade(param_00,self.enemy)) + { + return; + } + } + + if(leavecoverandshoot(param_00,"normal")) + { + resetseekoutenemytime(); + self.a.lastencountertime = gettime(); + return; + } + + idle(param_00); +} + +//Function Number: 7 +attacksuppressableenemy(param_00,param_01) +{ + if(self.doingambush) + { + if(leavecoverandshoot(param_00,"ambush")) + { + return; + } + } + else if(self.providecoveringfire || gettime() >= param_01.nextallowedsuppresstime) + { + var_02 = "suppress"; + if(!self.providecoveringfire && gettime() - self.var_B32 > 5000 && randomint(3) < 2) + { + var_02 = "ambush"; + } + else if(!animscripts/shoot_behavior::shouldsuppress()) + { + var_02 = "ambush"; + } + + if(leavecoverandshoot(param_00,var_02)) + { + param_01.nextallowedsuppresstime = gettime() + randomintrange(3000,20000); + if(isenemyvisiblefromexposed()) + { + self.a.lastencountertime = gettime(); + } + + return; + } + } + + if(trythrowinggrenade(param_00,self.enemy)) + { + return; + } + + idle(param_00); +} + +//Function Number: 8 +attacknothingtodo(param_00,param_01) +{ + if(coverreload(param_00,0.1)) + { + return 0; + } + + if(isdefined(self.enemy)) + { + if(trythrowinggrenade(param_00,self.enemy)) + { + return 0; + } + } + + if(!self.doingambush && gettime() >= param_01.nextallowedlooktime) + { + if(lookforenemy(param_00)) + { + param_01.nextallowedlooktime = gettime() + randomintrange(4000,15000); + return 0; + } + } + + if(gettime() > self.a.var_B25) + { + if(cantfindanythingtodo()) + { + return 1; + } + } + + if(self.doingambush || gettime() >= param_01.nextallowedsuppresstime && isdefined(self.enemy)) + { + if(leavecoverandshoot(param_00,"ambush")) + { + if(isenemyvisiblefromexposed()) + { + resetseekoutenemytime(); + } + + self.a.lastencountertime = gettime(); + param_01.nextallowedsuppresstime = gettime() + randomintrange(6000,20000); + return 0; + } + } + + idle(param_00); + return 0; +} + +//Function Number: 9 +isenemyvisiblefromexposed() +{ + if(!isdefined(self.enemy)) + { + return 0; + } + + if(distancesquared(self.enemy.origin,self.var_8E4) < 256) + { + return 0; + } + + return animscripts/utility::func_B35(); +} + +//Function Number: 10 +suppressedbehavior(param_00) +{ + if(!animscripts/utility::issuppressedwrapper()) + { + return 0; + } + + var_01 = gettime(); + var_02 = 1; + while(animscripts/utility::issuppressedwrapper()) + { + var_02 = 0; + self safeteleport(self.covernode.origin); + var_03 = 1; + if(isdefined(self.favor_blindfire)) + { + var_03 = common_scripts\utility::cointoss(); + } + + if(var_03) + { + if(trytogetoutofdangeroussituation(param_00)) + { + self notify("killanimscript"); + return 1; + } + } + + if(self.a.atconcealmentnode && animscripts/utility::canseeenemy()) + { + return 0; + } + + if(isenemyvisiblefromexposed() || animscripts/utility::cansuppressenemyfromexposed()) + { + if(isdefined(level.throwgrenadeatplayerasap) && isalive(level.player)) + { + if(trythrowinggrenade(param_00,level.player)) + { + continue; + } + } + + if(coverreload(param_00,0)) + { + continue; + } + + if(self.team != "allies" && gettime() >= var_01) + { + if(blindfire(param_00)) + { + var_01 = gettime(); + if(!isdefined(self.favor_blindfire)) + { + var_01 = var_01 + randomintrange(3000,12000); + } + + continue; + } + } + + if(trythrowinggrenade(param_00,self.enemy)) + { + var_02 = 1; + continue; + } + } + + if(coverreload(param_00,0.1)) + { + continue; + } + + idle(param_00); + } + + if(!var_02 && randomint(2) == 0) + { + lookfast(param_00); + } + + return 1; +} + +//Function Number: 11 +getpermutation(param_00) +{ + var_01 = []; + if(param_00 == 1) + { + } + else if(var_01 == 2) + { + } + else + { + for(var_02 = 0;var_02 < var_01;var_02++ = var_41[1]) + { + var_41[var_02] = var_02; + } + + for(var_02 = 0;var_02 < var_01;var_02++ = 1 - var_41[0]) + { + var_03 = var_02 + randomint(var_01 - var_02); + var_04 = var_41[var_03]; + var_41[var_03] = var_41[var_02]; + var_41[var_02] = var_04; + } + } + + return var_41; +} + +//Function Number: 12 +calloptionalbehaviorcallback(param_00,param_01,param_02,param_03) +{ + if(!isdefined(param_00)) + { + return 0; + } + + thread endidleatframeend(); + var_04 = gettime(); + var_05 = undefined; + if(isdefined(param_03)) + { + var_05 = [[ param_00 ]](param_01,param_02,param_03); + } + else if(isdefined(param_02)) + { + var_05 = [[ param_00 ]](param_01,param_02); + } + else if(isdefined(param_01)) + { + var_05 = [[ param_00 ]](param_01); + } + else + { + var_05 = [[ param_00 ]](); + } + + if(!var_05) + { + self notify("dont_end_idle"); + } + + return var_05; +} + +//Function Number: 13 +func_0B3B() +{ + self endon("killanimscript"); + self.var_B32 = gettime() - 100000; + self.suppressionstart = self.var_B32; + for(;;) + { + self waittill("suppression"); + var_00 = gettime(); + if(self.var_B32 < var_00 - 700) + { + self.suppressionstart = var_00; + } + + self.var_B32 = var_00; + } +} + +//Function Number: 14 +coverreload(param_00,param_01) +{ + if(self.bulletsinclip > weaponclipsize(self.weapon) * param_01) + { + return 0; + } + + self.isreloading = 1; + var_02 = calloptionalbehaviorcallback(param_00.reload); + self.isreloading = 0; + return var_02; +} + +//Function Number: 15 +leavecoverandshoot(param_00,param_01) +{ + thread animscripts/shoot_behavior::decidewhatandhowtoshoot(param_01); + if(!self.fixednode && !self.doingambush) + { + thread breakoutofshootingifwanttomoveup(); + } + + var_02 = calloptionalbehaviorcallback(param_00.leavecoverandshoot); + self notify("stop_deciding_how_to_shoot"); + return var_02; +} + +//Function Number: 16 +lookforenemy(param_00) +{ + if(self.a.atconcealmentnode && animscripts/utility::canseeenemy()) + { + return 0; + } + + if(self.a.lastencountertime + 6000 > gettime()) + { + return lookfast(param_00); + } + + var_01 = calloptionalbehaviorcallback(param_00.look,2 + randomfloat(2)); + if(var_01) + { + return 1; + } + + return calloptionalbehaviorcallback(param_00.fastlook); +} + +//Function Number: 17 +lookfast(param_00) +{ + var_01 = calloptionalbehaviorcallback(param_00.fastlook); + if(var_01) + { + return 1; + } + + return calloptionalbehaviorcallback(param_00.look,0); +} + +//Function Number: 18 +idle(param_00,param_01) +{ + self.flinching = 0; + if(isdefined(param_00.flinch)) + { + if(!self.a.idlingatcover && gettime() - self.suppressionstart < 600) + { + if([[ param_00.flinch ]]()) + { + return 1; + } + } + else + { + thread func_0B4A(param_00); + } + } + + if(!self.a.idlingatcover) + { + thread func_0B49(param_00.idle); + self.a.idlingatcover = 1; + } + + if(isdefined(param_01)) + { + idlewait(param_01); + } + else + { + func_0B48(); + } + + if(self.flinching) + { + self waittill("flinch_done"); + } + + self notify("stop_waiting_to_flinch"); +} + +//Function Number: 19 +idlewait(param_00) +{ + self endon("end_idle"); + wait param_00; +} + +//Function Number: 20 +func_0B48() +{ + self endon("end_idle"); + wait 0.3 + randomfloat(0.1); + self waittill("do_slow_things"); +} + +//Function Number: 21 +func_0B49(param_00) +{ + self endon("killanimscript"); + self [[ param_00 ]](); +} + +//Function Number: 22 +func_0B4A(param_00) +{ + self endon("killanimscript"); + self endon("stop_waiting_to_flinch"); + var_01 = self.var_B32; + for(;;) + { + self waittill("suppression"); + var_02 = gettime(); + if(var_01 < var_02 - 2000) + { + break; + } + + var_01 = var_02; + } + + self.flinching = 1; + thread endidleatframeend(); + var_03 = [[ param_00.flinch ]](); + if(!var_03) + { + self notify("dont_end_idle"); + } + + self.flinching = 0; + self notify("flinch_done"); +} + +//Function Number: 23 +endidleatframeend() +{ + self endon("killanimscript"); + self endon("dont_end_idle"); + waittillframeend; + if(!isdefined(self)) + { + return; + } + + self notify("end_idle"); + self.a.idlingatcover = 0; +} + +//Function Number: 24 +trythrowinggrenade(param_00,param_01) +{ + var_02 = anglestoforward(self.angles); + var_03 = vectornormalize(param_01.origin - self.origin); + if(vectordot(var_02,var_03) < 0) + { + return 0; + } + + if(self.doingambush && !animscripts/utility::recentlysawenemy()) + { + return 0; + } + + if(animscripts/utility::ispartiallysuppressedwrapper()) + { + return calloptionalbehaviorcallback(param_00.grenadehidden,param_01); + } + + return calloptionalbehaviorcallback(param_00.grenade,param_01); +} + +//Function Number: 25 +blindfire(param_00) +{ + if(!animscripts/utility::canblindfire()) + { + return 0; + } + + return calloptionalbehaviorcallback(param_00.blindfire); +} + +//Function Number: 26 +breakoutofshootingifwanttomoveup() +{ + self endon("killanimscript"); + self endon("stop_deciding_how_to_shoot"); + for(;;) + { + if(self.fixednode || self.doingambush) + { + return; + } + + wait 0.5 + randomfloat(0.75); + if(!isdefined(self.enemy)) + { + continue; + } + + if(enemyishiding()) + { + if(advanceonhidingenemy()) + { + return; + } + } + + if(!animscripts/utility::recentlysawenemy() && !animscripts/utility::cansuppressenemy()) + { + if(gettime() > self.a.var_B25) + { + if(cantfindanythingtodo()) + { + return; + } + } + } + } +} + +//Function Number: 27 +enemyishiding() +{ + if(!isdefined(self.enemy)) + { + return 0; + } + + if(self.enemy common_scripts\utility::isflashed()) + { + return 1; + } + + if(isplayer(self.enemy)) + { + if(isdefined(self.enemy.health) && self.enemy.health < self.enemy.maxhealth) + { + return 1; + } + } + else if(isai(self.enemy) && self.enemy animscripts/utility::issuppressedwrapper()) + { + return 1; + } + + if(isdefined(self.enemy.isreloading) && self.enemy.isreloading) + { + return 1; + } + + return 0; +} + +//Function Number: 28 +resetrespondtodeathtime() +{ + self.a.respondtodeathtime = 0; +} + +//Function Number: 29 +resetlookforbettercovertime() +{ + var_00 = gettime(); + if(isdefined(self.var_B55) && var_00 > self.a.var_B25) + { + self.a.var_B25 = var_00 + randomintrange(2000,5000); + return; + } + + if(isdefined(self.enemy)) + { + var_01 = distance2d(self.origin,self.enemy.origin); + if(var_01 < self.engagemindist) + { + self.a.var_B25 = var_00 + randomintrange(5000,10000); + return; + } + + if(var_01 > self.engagemaxdist && var_01 < self.goalradius) + { + self.a.var_B25 = var_00 + randomintrange(2000,5000); + return; + } + + self.a.var_B25 = var_00 + randomintrange(10000,15000); + return; + } + + self.a.var_B25 = var_00 + randomintrange(5000,15000); +} + +//Function Number: 30 +resetseekoutenemytime() +{ + if(isdefined(self.aggressivemode)) + { + self.seekoutenemytime = gettime() + randomintrange(500,1000); + return; + } + + self.seekoutenemytime = gettime() + randomintrange(3000,5000); +} + +//Function Number: 31 +cantfindanythingtodo() +{ + return advanceonhidingenemy(); +} + +//Function Number: 32 +advanceonhidingenemy() +{ + if(self.fixednode || self.doingambush) + { + return 0; + } + + if(isdefined(self.aggressivemode) && gettime() >= self.seekoutenemytime) + { + return animscripts/combat_utility::tryrunningtoenemy(0); + } + + var_00 = 0; + if(!isdefined(self.enemy) || !self.enemy common_scripts\utility::isflashed()) + { + var_00 = animscripts/combat_utility::func_B26(); + } + + if(!var_00 && isdefined(self.enemy) && !animscripts/utility::func_B35()) + { + if(gettime() >= self.seekoutenemytime) + { + return animscripts/combat_utility::tryrunningtoenemy(0); + } + } + + return var_00; +} + +//Function Number: 33 +trytogetoutofdangeroussituation(param_00) +{ + if(isdefined(param_00.var_B22)) + { + if([[ param_00.var_B22 ]]()) + { + return 1; + } + } + + return animscripts/combat_utility::func_B26(); +} + +//Function Number: 34 +set_standing_turns() +{ + self.a.array["turn_left_45"] = %exposed_tracking_turn45l; + self.a.array["turn_left_90"] = %exposed_tracking_turn90l; + self.a.array["turn_left_135"] = %exposed_tracking_turn135l; + self.a.array["turn_left_180"] = %exposed_tracking_turn180l; + self.a.array["turn_right_45"] = %exposed_tracking_turn45r; + self.a.array["turn_right_90"] = %exposed_tracking_turn90r; + self.a.array["turn_right_135"] = %exposed_tracking_turn135r; + self.a.array["turn_right_180"] = %exposed_tracking_turn180r; +} + +//Function Number: 35 +set_crouching_turns() +{ + self.a.array["turn_left_45"] = %exposed_crouch_turn_90_left; + self.a.array["turn_left_90"] = %exposed_crouch_turn_90_left; + self.a.array["turn_left_135"] = %exposed_crouch_turn_180_left; + self.a.array["turn_left_180"] = %exposed_crouch_turn_180_left; + self.a.array["turn_right_45"] = %exposed_crouch_turn_90_right; + self.a.array["turn_right_90"] = %exposed_crouch_turn_90_right; + self.a.array["turn_right_135"] = %exposed_crouch_turn_180_right; + self.a.array["turn_right_180"] = %exposed_crouch_turn_180_right; +} + +//Function Number: 36 +func_0B5C(param_00) +{ + if(isdefined(self.node)) + { + var_01 = self.node; + var_02 = abs(angleclamp180(self.angles[1] - var_01.angles[1] + param_00)); + if(self.a.var_911 == "stand" && var_01 gethighestnodestance() != "stand") + { + if(var_02 > 45 && var_02 < 90) + { + self orientmode("face angle",self.angles[1]); + } + else + { + self orientmode("face current"); + } + + var_03 = 1.5; + var_04 = getnotetracktimes(%exposed_stand_2_crouch,"anim_pose = \"crouch\")[0]; + var_04 = min(1,var_04 * 1.1); + var_05 = var_04 * getanimlength(%exposed_stand_2_crouch) / var_03; + self setflaggedanimknoballrestart("crouchanim",%exposed_stand_2_crouch,%body,1,0.2,var_03); + animscripts/notetracks::donotetracksfortime(var_05,"crouchanim"); + self clearanim(%body,0.2); + } + + self orientmode("face angle",self.angles[1]); + var_06 = angleclamp180(self.angles[1] - var_01.angles[1] + param_00); + if(abs(var_06) > 45) + { + if(self.a.var_911 == "stand") + { + set_standing_turns(); + } + else + { + set_crouching_turns(); + } + + self.turnthreshold = 45; + self.turntomatchnode = 1; + animscripts/combat::turntofacerelativeyaw(var_06); + self.turntomatchnode = undefined; + } + } +} + +//Function Number: 37 +func_0B22() +{ + if(!isdefined(self.enemy)) + { + return 0; + } + + if(isdefined(self.var_B55)) + { + self.var_B55 = undefined; + return 0; + } + + if(!isdefined(self.node)) + { + return 0; + } + + if(randomint(3) == 0) + { + return 0; + } + + if(self.fixednode || self.doingambush || self.keepclaimednode || self.keepclaimednodeifvalid) + { + return 0; + } + + if(distancesquared(self.origin,self.node.origin) > 256) + { + return 0; + } + + var_00 = self findshufflecovernode(); + if(isdefined(var_00) && var_00 != self.node && self usecovernode(var_00)) + { + self.shufflemove = 1; + self.shufflenode = var_00; + self.var_B55 = 1; + wait 0.5; + return 1; + } + + return 0; +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/cover_crouch.gsc b/MW3/Xbox/SP/animscripts/cover_crouch.gsc new file mode 100644 index 0000000..595d18c --- /dev/null +++ b/MW3/Xbox/SP/animscripts/cover_crouch.gsc @@ -0,0 +1,24 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\cover_crouch.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 43 ms + * Timestamp: 10/27/2023 2:30:13 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self endon("killanimscript"); + animscripts/utility::initialize("cover_crouch"); + animscripts/cover_wall::cover_wall_think("crouch"); +} + +//Function Number: 2 +end_script() +{ + self.var_897 = undefined; + animscripts/cover_behavior::end_script("crouch"); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/cover_left.gsc b/MW3/Xbox/SP/animscripts/cover_left.gsc new file mode 100644 index 0000000..b532416 --- /dev/null +++ b/MW3/Xbox/SP/animscripts/cover_left.gsc @@ -0,0 +1,47 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\cover_left.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 4 + * Decompile Time: 82 ms + * Timestamp: 10/27/2023 2:30:14 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self.animarrayfuncs = []; + self.animarrayfuncs["hiding"]["stand"] = ::func_3AE0; + self.animarrayfuncs["hiding"]["crouch"] = ::func_3AE1; + self endon("killanimscript"); + animscripts/utility::initialize("cover_left"); + animscripts/corner::corner_think("left",90); +} + +//Function Number: 2 +end_script() +{ + animscripts/corner::func_1FCB(); + animscripts/cover_behavior::end_script("left"); +} + +//Function Number: 3 +func_3AE0() +{ + var_00 = []; + if(isdefined(level.ramboanims)) + { + } + + self.hideyawoffset = 90; + self.a.array = var_41; +} + +//Function Number: 4 +func_3AE1() +{ + var_00 = []; + self.hideyawoffset = 90; + self.a.array = var_41; +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/cover_prone.gsc b/MW3/Xbox/SP/animscripts/cover_prone.gsc new file mode 100644 index 0000000..c2a442c --- /dev/null +++ b/MW3/Xbox/SP/animscripts/cover_prone.gsc @@ -0,0 +1,313 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\cover_prone.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 14 + * Decompile Time: 249 ms + * Timestamp: 10/27/2023 2:30:15 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self endon("killanimscript"); + animscripts/utility::initialize("cover_prone"); + if(weaponclass(self.weapon) == "rocketlauncher") + { + animscripts/combat::main(); + return; + } + + if(isdefined(self.a.var_CCA) && self.a.var_CCA == "prone_saw") + { + animscripts/cover_wall::useselfplacedturret("saw_bipod_prone","weapon_saw_MG_Setup"); + } + else if(isdefined(self.node.turret)) + { + animscripts/cover_wall::func_B92(); + } + + if(isdefined(self.enemy) && lengthsquared(self.origin - self.enemy.origin) < squared(512)) + { + thread animscripts/combat::main(); + return; + } + + setup_cover_prone(); + self.covernode = self.node; + self orientmode("face angle",self.covernode.angles[1]); + self.a.goingtoproneaim = 1; + self setproneanimnodes(-45,45,%prone_legs_down,%exposed_modern,%prone_legs_up); + if(self.a.var_911 != "prone") + { + prone_transitionto("prone"); + } + else + { + animscripts/utility::enterpronewrapper(0); + } + + thread animscripts/combat_utility::aimidlethread(); + setupproneaim(0.2); + self setanim(%prone_aim_5,1,0.1); + self orientmode("face angle",self.covernode.angles[1]); + self animmode("zonly_physics"); + pronecombatmainloop(); + self notify("stop_deciding_how_to_shoot"); +} + +//Function Number: 2 +end_script() +{ + self.a.goingtoproneaim = undefined; +} + +//Function Number: 3 +func_0B49() +{ + self endon("killanimscript"); + self endon("kill_idle_thread"); + for(;;) + { + var_00 = animscripts/utility::animarraypickrandom("prone_idle"); + self setflaggedanimlimited("idle",var_00); + self waittillmatch("end","idle"); + self clearanim(var_00,0.2); + } +} + +//Function Number: 4 +updatepronewrapper(param_00) +{ + self updateprone(%prone_aim_feet_45up,%prone_aim_feet_45down,1,param_00,1); + self setanim(%exposed_aiming,1,0.2); +} + +//Function Number: 5 +pronecombatmainloop() +{ + self endon("killanimscript"); + thread animscripts/track::trackshootentorpos(); + thread animscripts/shoot_behavior::decidewhatandhowtoshoot("normal"); + var_00 = gettime() > 2500; + for(;;) + { + animscripts/utility::isincombat(); + updatepronewrapper(0.05); + if(!var_00) + { + wait 0.05 + randomfloat(1.5); + var_00 = 1; + continue; + } + + if(!isdefined(self.shootpos)) + { + if(considerthrowgrenade()) + { + continue; + } + + wait 0.05; + continue; + } + + var_01 = lengthsquared(self.origin - self.shootpos); + if(self.a.var_911 != "crouch" && self isstanceallowed("crouch") && var_01 < squared(400)) + { + if(var_01 < squared(285)) + { + prone_transitionto("crouch"); + thread animscripts/combat::main(); + return; + } + } + + if(considerthrowgrenade()) + { + continue; + } + + if(pronereload(0)) + { + continue; + } + + if(animscripts/combat_utility::func_CCF()) + { + animscripts/combat_utility::shootuntilshootbehaviorchange(); + self clearanim(%add_fire,0.2); + continue; + } + + wait 0.05; + } +} + +//Function Number: 6 +pronereload(param_00) +{ + return animscripts/combat_utility::reload(param_00,animscripts/utility::animarray("reload")); +} + +//Function Number: 7 +setup_cover_prone() +{ + self setdefaultaimlimits(self.node); + var_00 = []; + self.a.array = var_41; +} + +//Function Number: 8 +trythrowinggrenade(param_00,param_01) +{ + var_02 = undefined; + if(isdefined(param_01) && param_01) + { + var_02 = animscripts/utility::animarraypickrandom("grenade_safe"); + } + else + { + var_02 = animscripts/utility::animarraypickrandom("grenade_exposed"); + } + + self animmode("zonly_physics"); + self.keepclaimednodeifvalid = 1; + var_03 = (32,20,64); + var_04 = animscripts/combat_utility::trygrenade(param_00,var_02); + self.keepclaimednodeifvalid = 0; + return var_04; +} + +//Function Number: 9 +considerthrowgrenade() +{ + if(isdefined(level.throwgrenadeatplayerasap) && isalive(level.player)) + { + if(trythrowinggrenade(level.player,200)) + { + return 1; + } + } + + if(isdefined(self.enemy)) + { + return trythrowinggrenade(self.enemy,850); + } + + return 0; +} + +//Function Number: 10 +shouldfirewhilechangingpose() +{ + if(!isdefined(self.weapon) || !weaponisauto(self.weapon)) + { + return 0; + } + + if(isdefined(self.node) && distancesquared(self.origin,self.node.origin) < 256) + { + return 0; + } + + if(isdefined(self.enemy) && self cansee(self.enemy) && !isdefined(self.grenade) && animscripts/shared::getaimyawtoshootentorpos() < 20) + { + return animscripts/move::mayshootwhilemoving(); + } + + return 0; +} + +//Function Number: 11 +prone_transitionto(param_00) +{ + if(param_00 == self.a.var_911) + { + return; + } + + self clearanim(%root,0.3); + animscripts/combat_utility::endfireandanimidlethread(); + if(shouldfirewhilechangingpose()) + { + var_01 = animscripts/utility::animarray(self.a.var_911 + "_2_" + param_00 + "_firing"); + } + else + { + var_01 = animscripts/utility::animarray(self.a.var_911 + "_2_" + var_01); + } + + if(param_00 == "prone") + { + } + + self setflaggedanimknoballrestart("trans",var_01,%body,1,0.2,1); + animscripts/shared::donotetracks("trans"); + self setanimknoballrestart(animscripts/utility::animarray("straight_level"),%body,1,0.25); + setupproneaim(0.25); +} + +//Function Number: 12 +func_0CD6(param_00) +{ + self endon("killanimscript"); + animscripts/shared::donotetracks(param_00); +} + +//Function Number: 13 +setupproneaim(param_00) +{ + self setanimknoball(%prone_aim_5,%body,1,param_00); + self setanimlimited(%prone_aim_2_add,1,param_00); + self setanimlimited(%prone_aim_4_add,1,param_00); + self setanimlimited(%prone_aim_6_add,1,param_00); + self setanimlimited(%prone_aim_8_add,1,param_00); +} + +//Function Number: 14 +proneto(param_00,param_01) +{ + self clearanim(%root,0.3); + var_02 = undefined; + if(shouldfirewhilechangingpose()) + { + if(param_00 == "crouch") + { + var_02 = %prone_2_crouch_firing; + } + else if(param_00 == "stand") + { + var_02 = %prone_2_stand_firing; + } + } + else if(param_00 == "crouch") + { + var_02 = %prone_2_crouch; + } + else if(param_00 == "stand") + { + var_02 = %prone_2_stand_nodelta; + } + + if(isdefined(self.prone_anim_override)) + { + var_02 = self.prone_anim_override; + } + + if(isdefined(self.prone_rate_override)) + { + param_01 = self.prone_rate_override; + } + + if(!isdefined(param_01)) + { + param_01 = 1; + } + + animscripts/utility::exitpronewrapper(getanimlength(var_02) / 2); + self setflaggedanimknoballrestart("trans",var_02,%body,1,0.2,param_01); + animscripts/shared::donotetracks("trans"); + self clearanim(var_02,0.1); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/cover_right.gsc b/MW3/Xbox/SP/animscripts/cover_right.gsc new file mode 100644 index 0000000..ecc2603 --- /dev/null +++ b/MW3/Xbox/SP/animscripts/cover_right.gsc @@ -0,0 +1,47 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\cover_right.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 4 + * Decompile Time: 84 ms + * Timestamp: 10/27/2023 2:30:15 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self.animarrayfuncs = []; + self.animarrayfuncs["hiding"]["stand"] = ::func_3AE2; + self.animarrayfuncs["hiding"]["crouch"] = ::set_animarray_crouching_right; + self endon("killanimscript"); + animscripts/utility::initialize("cover_right"); + animscripts/corner::corner_think("right",-90); +} + +//Function Number: 2 +end_script() +{ + animscripts/corner::func_1FCB(); + animscripts/cover_behavior::end_script("right"); +} + +//Function Number: 3 +func_3AE2() +{ + var_00 = []; + if(isdefined(level.ramboanims)) + { + } + + self.hideyawoffset = -90; + self.a.array = var_41; +} + +//Function Number: 4 +set_animarray_crouching_right() +{ + var_00 = []; + self.hideyawoffset = -90; + self.a.array = var_41; +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/cover_stand.gsc b/MW3/Xbox/SP/animscripts/cover_stand.gsc new file mode 100644 index 0000000..7f57557 --- /dev/null +++ b/MW3/Xbox/SP/animscripts/cover_stand.gsc @@ -0,0 +1,23 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\cover_stand.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 47 ms + * Timestamp: 10/27/2023 2:30:16 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self endon("killanimscript"); + animscripts/utility::initialize("cover_stand"); + animscripts/cover_wall::cover_wall_think("stand"); +} + +//Function Number: 2 +end_script() +{ + animscripts/cover_behavior::end_script("stand"); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/cover_wall.gsc b/MW3/Xbox/SP/animscripts/cover_wall.gsc new file mode 100644 index 0000000..ef7c223 --- /dev/null +++ b/MW3/Xbox/SP/animscripts/cover_wall.gsc @@ -0,0 +1,856 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\cover_wall.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 35 + * Decompile Time: 577 ms + * Timestamp: 10/27/2023 2:30:18 AM +*******************************************************************/ + +//Function Number: 1 +cover_wall_think(param_00) +{ + self endon("killanimscript"); + self.covernode = self.node; + self.covertype = param_00; + if(!isdefined(self.node.turret)) + { + animscripts/cover_behavior::func_B5C(0); + } + + if(param_00 == "crouch") + { + setup_cover_crouch("unknown"); + self.covernode func_0B6A(); + } + else + { + setup_cover_stand("unknown"); + } + + self.a.aimidlethread = undefined; + self orientmode("face angle",self.covernode.angles[1]); + if(isdefined(self.weapon) && animscripts/utility::usingmg() && isdefined(self.node) && isdefined(self.node.turretinfo) && canspawnturret()) + { + if(param_00 == "crouch") + { + if(isrpd(self.weapon)) + { + var_01 = "rpd_bipod_crouch"; + } + else + { + var_01 = "saw_bipod_crouch"; + } + } + else if(isrpd(self.weapon)) + { + var_01 = "rpd_bipod_stand"; + } + else + { + var_01 = "saw_bipod_stand"; + } + + if(isrpd(self.weapon)) + { + var_02 = "weapon_rpd_MG_Setup"; + } + else + { + var_02 = "weapon_saw_MG_Setup"; + } + + useselfplacedturret(var_01,var_02); + } + else if(isdefined(self.node) && isdefined(self.node.turret)) + { + func_0B92(); + } + + self animmode("normal"); + if(param_00 == "crouch" && self.a.var_911 == "stand") + { + var_03 = animscripts/utility::animarray("stand_2_hide"); + var_04 = getanimlength(var_03); + self setanimknoballrestart(var_03,%body,1,0.2,animscripts/combat_utility::fasteranimspeed()); + thread animscripts/shared::movetooriginovertime(self.covernode.origin,var_04); + wait var_04; + self.a.var_8E3 = "hide"; + } + else + { + loophide(0.4); + if(distancesquared(self.origin,self.covernode.origin) > 1) + { + thread animscripts/shared::movetooriginovertime(self.covernode.origin,0.4); + wait 0.2; + if(param_00 == "crouch") + { + self.a.var_911 = "crouch"; + } + + wait 0.2; + } + else + { + wait 0.1; + } + } + + self animmode("zonly_physics"); + if(param_00 == "crouch") + { + if(self.a.var_911 == "prone") + { + animscripts/utility::exitpronewrapper(1); + } + + self.a.var_911 = "crouch"; + } + + if(self.covertype == "stand") + { + self.a.special = "cover_stand"; + } + else + { + self.a.special = "cover_crouch"; + } + + var_05 = spawnstruct(); + if(!self.fixednode) + { + var_05.var_B22 = ::animscripts/cover_behavior::func_B22; + } + + var_05.reload = ::coverreload; + var_05.leavecoverandshoot = ::popupandshoot; + var_05.look = ::look; + var_05.fastlook = ::fastlook; + var_05.idle = ::idle; + var_05.flinch = ::flinch; + var_05.grenade = ::trythrowinggrenade; + var_05.grenadehidden = ::trythrowinggrenadestayhidden; + var_05.blindfire = ::blindfire; + animscripts/cover_behavior::main(var_05); +} + +//Function Number: 2 +isrpd(param_00) +{ + return getsubstr(param_00,0,3) == "rpd" && param_00.size == 3 || param_00[3] == "_"; +} + +//Function Number: 3 +func_0B6A() +{ + if(isdefined(self.crouchingisok)) + { + return; + } + + var_00 = (0,0,42); + var_01 = anglestoforward(self.angles); + self.crouchingisok = sighttracepassed(self.origin + var_00,self.origin + var_00 + var_01 * 64,0,undefined); +} + +//Function Number: 4 +setup_cover_crouch(param_00) +{ + self setdefaultaimlimits(self.covernode); + func_0B94(param_00); +} + +//Function Number: 5 +setup_cover_stand(param_00) +{ + self setdefaultaimlimits(self.covernode); + setup_standing_anim_array(param_00); +} + +//Function Number: 6 +coverreload() +{ + animscripts/combat_utility::reload(2,animscripts/utility::animarray("reload")); + return 1; +} + +//Function Number: 7 +popupandshoot() +{ + self.keepclaimednodeifvalid = 1; + if(isdefined(self.rambochance) && randomfloat(1) < self.rambochance) + { + if(func_0B76()) + { + return 1; + } + } + + if(!pop_up()) + { + return 0; + } + + func_0B73(); + animscripts/combat_utility::endfireandanimidlethread(); + if(isdefined(self.shootpos)) + { + var_00 = lengthsquared(self.origin - self.shootpos); + if(animscripts/utility::usingrocketlauncher() && var_00 < squared(512) || self.a.rockets < 1) + { + if(self.a.var_911 == "stand") + { + animscripts/shared::throwdownweapon(%rpg_stand_throw); + } + else + { + animscripts/shared::throwdownweapon(%rpg_crouch_throw); + } + } + } + + go_to_hide(); + self.var_897 = undefined; + self.keepclaimednodeifvalid = 0; + return 1; +} + +//Function Number: 8 +func_0B73() +{ + self endon("return_to_cover"); + maps\_gameskill::didsomethingotherthanshooting(); + for(;;) + { + if(isdefined(self.shouldreturntocover)) + { + break; + } + + if(!isdefined(self.shootpos)) + { + self waittill("do_slow_things"); + waittillframeend; + if(isdefined(self.shootpos)) + { + continue; + } + + break; + } + + if(!self.bulletsinclip) + { + break; + } + + if(self.covertype == "crouch" && needtochangecovermode()) + { + break; + } + + shootuntilshootbehaviorchange_coverwall(); + self clearanim(%add_fire,0.2); + } +} + +//Function Number: 9 +shootuntilshootbehaviorchange_coverwall() +{ + if(self.covertype == "crouch") + { + thread anglerangethread(); + } + + thread animscripts/combat_utility::aimidlethread(); + animscripts/combat_utility::shootuntilshootbehaviorchange(); +} + +//Function Number: 10 +func_0B76() +{ + if(!animscripts/utility::hasenemysightpos()) + { + return 0; + } + + var_00 = "rambo"; + if(randomint(10) < 2) + { + var_00 = "rambo_fail"; + } + + if(!animscripts/utility::animarrayanyexist(var_00)) + { + return 0; + } + + if(self.covertype == "crouch" && !self.covernode.crouchingisok) + { + return 0; + } + + var_01 = getshootpospitch(self.covernode.origin + animscripts/utility::getnodeoffset(self.covernode)); + if(var_01 > 15) + { + return 0; + } + + var_02 = anglestoforward(self.angles); + var_03 = self.origin + var_02 * -16; + if(!self maymovetopoint(var_03)) + { + return 0; + } + + self.var_8E8 = gettime(); + self animmode("zonly_physics"); + self.keepclaimednodeifvalid = 1; + self.isrambo = 1; + self.a.prevattack = "rambo"; + self.var_8C8 = 1; + thread animscripts/shared::ramboaim(0); + var_04 = animscripts/utility::animarraypickrandom(var_00); + self setflaggedanimknoballrestart("rambo",var_04,%body,1,0.2,1); + animscripts/shared::donotetracks("rambo"); + self notify("rambo_aim_end"); + self.var_8C8 = 0; + self.keepclaimednodeifvalid = 0; + self.var_B7C = gettime(); + self.var_8C8 = 0; + self.isrambo = undefined; + return 1; +} + +//Function Number: 11 +idle() +{ + self endon("end_idle"); + for(;;) + { + var_00 = randomint(2) == 0 && animscripts/utility::animarrayanyexist("hide_idle_twitch"); + if(var_00) + { + var_01 = animscripts/utility::animarraypickrandom("hide_idle_twitch"); + } + else + { + var_01 = animscripts/utility::animarray("hide_idle"); + } + + playidleanimation(var_01,var_00); + } +} + +//Function Number: 12 +flinch() +{ + if(!animscripts/utility::animarrayanyexist("hide_idle_flinch")) + { + return 0; + } + + var_00 = anglestoforward(self.angles); + var_01 = self.origin + var_00 * -16; + if(!self maymovetopoint(var_01)) + { + return 0; + } + + self animmode("zonly_physics"); + self.keepclaimednodeifvalid = 1; + var_02 = animscripts/utility::animarraypickrandom("hide_idle_flinch"); + playidleanimation(var_02,1); + self.keepclaimednodeifvalid = 0; + return 1; +} + +//Function Number: 13 +playidleanimation(param_00,param_01) +{ + if(param_01) + { + self setflaggedanimknoballrestart("idle",param_00,%body,1,0.25,1); + } + else + { + self setflaggedanimknoball("idle",param_00,%body,1,0.25,1); + } + + self.a.var_8E3 = "hide"; + animscripts/shared::donotetracks("idle"); +} + +//Function Number: 14 +look(param_00) +{ + if(!isdefined(self.a.array["hide_to_look"])) + { + return 0; + } + + if(!peekout()) + { + return 0; + } + + animscripts/shared::func_B7E(animscripts/utility::animarray("look_idle"),param_00); + var_01 = undefined; + if(animscripts/utility::issuppressedwrapper()) + { + var_01 = animscripts/utility::animarray("look_to_hide_fast"); + } + else + { + var_01 = animscripts/utility::animarray("look_to_hide"); + } + + self setflaggedanimknoballrestart("looking_end",var_01,%body,1,0.1); + animscripts/shared::donotetracks("looking_end"); + return 1; +} + +//Function Number: 15 +peekout() +{ + if(isdefined(self.covernode.script_dontpeek)) + { + return 0; + } + + self setflaggedanimknoball("looking_start",animscripts/utility::animarray("hide_to_look"),%body,1,0.2); + animscripts/shared::donotetracks("looking_start"); + return 1; +} + +//Function Number: 16 +fastlook() +{ + self setflaggedanimknoballrestart("look",animscripts/utility::animarraypickrandom("look"),%body,1,0.1); + animscripts/shared::donotetracks("look"); + return 1; +} + +//Function Number: 17 +pop_up_and_hide_speed() +{ + if(self.a.var_8E3 == "left" || self.a.var_8E3 == "right" || self.a.var_8E3 == "over") + { + return 1; + } + + return animscripts/combat_utility::randomfasteranimspeed(); +} + +//Function Number: 18 +pop_up() +{ + var_00 = getbestcovermode(); + var_01 = 0.1; + var_02 = animscripts/utility::animarray("hide_2_" + var_00); + if(!self maymovetopoint(animscripts/utility::getanimendpos(var_02))) + { + return 0; + } + + if(self.script == "cover_crouch" && var_00 == "lean") + { + self.var_897 = 1; + } + + if(self.covertype == "crouch") + { + setup_cover_crouch(var_00); + } + else + { + setup_cover_stand(var_00); + } + + self.a.special = "none"; + self.specialdeathfunc = undefined; + if(self.covertype == "stand") + { + self.a.special = "cover_stand_aim"; + } + else + { + self.a.special = "cover_crouch_aim"; + } + + self.var_8C8 = 1; + self notify("done_changing_cover_pos"); + self animmode("zonly_physics"); + var_03 = pop_up_and_hide_speed(); + self setflaggedanimknoballrestart("pop_up",var_02,%body,1,0.1,var_03); + thread func_0B85("pop_up"); + if(animhasnotetrack(var_02,"start_aim")) + { + self waittillmatch("start_aim","pop_up"); + var_01 = getanimlength(var_02) / var_03 * 1 - self getanimtime(var_02); + } + else + { + self waittillmatch("end","pop_up"); + var_01 = 0.1; + } + + self clearanim(var_02,var_01 + 0.05); + self.a.var_8E3 = var_00; + self.a.prevattack = var_00; + setup_additive_aim(var_01); + thread animscripts/track::trackshootentorpos(); + wait var_01; + if(animscripts/combat_utility::issniper()) + { + thread animscripts/shoot_behavior::sniper_glint_behavior(); + } + + self.var_8C8 = 0; + self.var_8E8 = gettime(); + self notify("stop_popup_donotetracks"); + return 1; +} + +//Function Number: 19 +func_0B85(param_00) +{ + self endon("killanimscript"); + self endon("stop_popup_donotetracks"); + animscripts/shared::donotetracks(param_00); +} + +//Function Number: 20 +setup_additive_aim(param_00) +{ + if(self.a.var_8E3 == "left" || self.a.var_8E3 == "right") + { + var_01 = "crouch"; + } + else + { + var_01 = self.a.var_8E3; + } + + self setanimknoball(animscripts/utility::animarray(var_01 + "_aim"),%body,1,param_00); + if(var_01 == "crouch") + { + self setanimlimited(%covercrouch_aim2_add,1,0); + self setanimlimited(%covercrouch_aim4_add,1,0); + self setanimlimited(%covercrouch_aim6_add,1,0); + self setanimlimited(%covercrouch_aim8_add,1,0); + return; + } + + if(var_01 == "stand") + { + self setanimlimited(%exposed_aim_2,1,0); + self setanimlimited(%exposed_aim_4,1,0); + self setanimlimited(%exposed_aim_6,1,0); + self setanimlimited(%exposed_aim_8,1,0); + return; + } + + if(var_01 == "lean") + { + self setanimlimited(%exposed_aim_2,1,0); + self setanimlimited(%exposed_aim_4,1,0); + self setanimlimited(%exposed_aim_6,1,0); + self setanimlimited(%exposed_aim_8,1,0); + return; + } + + if(var_01 == "over") + { + self setanimlimited(%coverstandaim_aim2_add,1,0); + self setanimlimited(%coverstandaim_aim4_add,1,0); + self setanimlimited(%coverstandaim_aim6_add,1,0); + self setanimlimited(%coverstandaim_aim8_add,1,0); + return; + } +} + +//Function Number: 21 +go_to_hide() +{ + self notify("return_to_cover"); + self.var_8C8 = 1; + self notify("done_changing_cover_pos"); + animscripts/combat_utility::endaimidlethread(); + var_00 = pop_up_and_hide_speed(); + self setflaggedanimknoball("go_to_hide",animscripts/utility::animarray(self.a.var_8E3 + "_2_hide"),%body,1,0.2,var_00); + self clearanim(%exposed_modern,0.2); + animscripts/shared::donotetracks("go_to_hide"); + self.a.var_8E3 = "hide"; + if(self.covertype == "stand") + { + self.a.special = "cover_stand"; + } + else + { + self.a.special = "cover_crouch"; + } + + self.var_8C8 = 0; +} + +//Function Number: 22 +trythrowinggrenadestayhidden(param_00) +{ + return trythrowinggrenade(param_00,1); +} + +//Function Number: 23 +trythrowinggrenade(param_00,param_01) +{ + if(isdefined(self.dontevershoot) || isdefined(param_00.dontattackme)) + { + return 0; + } + + var_02 = undefined; + if(isdefined(self.rambochance) && randomfloat(1) < self.rambochance) + { + var_02 = animscripts/utility::animarraypickrandom("grenade_rambo"); + } + else if(isdefined(param_01) && param_01) + { + var_02 = animscripts/utility::animarraypickrandom("grenade_safe"); + } + else + { + var_02 = animscripts/utility::animarraypickrandom("grenade_exposed"); + } + + self animmode("zonly_physics"); + self.keepclaimednodeifvalid = 1; + var_03 = animscripts/combat_utility::trygrenade(param_00,var_02); + self.keepclaimednodeifvalid = 0; + return var_03; +} + +//Function Number: 24 +blindfire() +{ + if(!animscripts/utility::animarrayanyexist("blind_fire")) + { + return 0; + } + + self animmode("zonly_physics"); + self.keepclaimednodeifvalid = 1; + self setflaggedanimknoballrestart("blindfire",animscripts/utility::animarraypickrandom("blind_fire"),%body,1,0.2,1); + animscripts/shared::donotetracks("blindfire"); + self.keepclaimednodeifvalid = 0; + return 1; +} + +//Function Number: 25 +createturret(param_00,param_01,param_02) +{ + var_03 = spawnturret("misc_turret",param_00.origin,param_01); + var_03.angles = param_00.angles; + var_03.var_B8E = self; + var_03 setmodel(param_02); + var_03 makeusable(); + var_03 setdefaultdroppitch(0); + if(isdefined(param_00.leftarc)) + { + var_03.leftarc = param_00.leftarc; + } + + if(isdefined(param_00.rightarc)) + { + var_03.rightarc = param_00.rightarc; + } + + if(isdefined(param_00.toparc)) + { + var_03.toparc = param_00.toparc; + } + + if(isdefined(param_00.bottomarc)) + { + var_03.bottomarc = param_00.bottomarc; + } + + return var_03; +} + +//Function Number: 26 +func_0B8F(param_00) +{ + self endon("death"); + self endon("being_used"); + wait 0.1; + if(isdefined(param_00)) + { + param_00 notify("turret_use_failed"); + } + + self delete(); +} + +//Function Number: 27 +useselfplacedturret(param_00,param_01) +{ + var_02 = createturret(self.node.turretinfo,param_00,param_01); + if(self useturret(var_02)) + { + var_02 thread func_0B8F(self); + if(isdefined(self.turret_function)) + { + thread [[ self.turret_function ]](var_02); + } + + self waittill("turret_use_failed"); + return; + } + + var_02 delete(); +} + +//Function Number: 28 +func_0B92() +{ + var_00 = self.node.turret; + if(!var_00.issetup) + { + return; + } + + thread maps\_mg_penetration::gunner_think(var_00); + self waittill("continue_cover_script"); +} + +//Function Number: 29 +func_0B94(param_00) +{ + var_01 = []; + if(animscripts/utility::weapon_pump_action_shotgun()) + { + if(var_01 == "lean" || var_01 == "stand") + { + } + else + { + } + } + else + { + } + + if(isdefined(level.ramboanims)) + { + } + + self.a.array = var_41; +} + +//Function Number: 30 +setup_standing_anim_array(param_00) +{ + var_01 = []; + if(var_01 == "over") + { + } + else if(animscripts/utility::weapon_pump_action_shotgun()) + { + } + else + { + } + + if(isdefined(level.ramboanims)) + { + } + + self.a.array = var_41; +} + +//Function Number: 31 +loophide(param_00) +{ + if(!isdefined(param_00)) + { + param_00 = 0.1; + } + + self setanimknoballrestart(animscripts/utility::animarray("hide_idle"),%body,1,param_00); + self.a.var_8E3 = "hide"; +} + +//Function Number: 32 +anglerangethread() +{ + self endon("killanimscript"); + self notify("newAngleRangeCheck"); + self endon("newAngleRangeCheck"); + self endon("return_to_cover"); + for(;;) + { + if(needtochangecovermode()) + { + break; + } + + wait 0.1; + } + + self notify("stopShooting"); +} + +//Function Number: 33 +needtochangecovermode() +{ + if(self.covertype != "crouch") + { + return 0; + } + + var_00 = getshootpospitch(self geteye()); + if(self.a.var_8E3 == "lean") + { + return var_00 < 10; + } + + return var_00 > 45; +} + +//Function Number: 34 +getbestcovermode() +{ + var_00 = []; + if(self.covertype == "stand") + { + var_00 = self.covernode getvalidcoverpeekouts(); + } + else + { + var_01 = getshootpospitch(self.covernode.origin + animscripts/utility::getnodeoffset(self.covernode)); + if(var_01 > 30) + { + return "lean"; + } + + if(var_01 > 15 || !self.covernode.crouchingisok) + { + return "stand"; + } + + var_41 = self.covernode getvalidcoverpeekouts(); + var_41[var_41.size] = "crouch"; + } + + return animscripts/combat_utility::getrandomcovermode(var_41); +} + +//Function Number: 35 +getshootpospitch(param_00) +{ + var_01 = animscripts/utility::getenemyeyepos(); + return angleclamp180(vectortoangles(var_01 - param_00)[0]); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/cqb.gsc b/MW3/Xbox/SP/animscripts/cqb.gsc new file mode 100644 index 0000000..ba20ded --- /dev/null +++ b/MW3/Xbox/SP/animscripts/cqb.gsc @@ -0,0 +1,193 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\cqb.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 5 + * Decompile Time: 92 ms + * Timestamp: 10/27/2023 2:30:18 AM +*******************************************************************/ + +//Function Number: 1 +func_0C60() +{ + animscripts/run::changeweaponstandrun(); + if(self.a.var_911 != "stand") + { + self clearanim(%root,0.2); + if(self.a.var_911 == "prone") + { + animscripts/utility::exitpronewrapper(1); + } + + self.a.var_911 = "stand"; + } + + self.a.movement = self.movemode; + thread cqbtracking(); + var_00 = determinecqbanim(); + var_01 = self.moveplaybackrate; + if(self.movemode == "walk") + { + var_01 = var_01 * 0.6; + } + + if(self.stairsstate == "none") + { + var_02 = 0.3; + } + else + { + var_02 = 0.1; + } + + self setflaggedanimknoball("runanim",var_00,%walk_and_run_loops,1,var_02,var_01,1); + animscripts/run::setmovenonforwardanims(%walk_backward,%walk_left,%walk_right); + thread animscripts/run::setcombatstandmoveanimweights("cqb"); + animscripts/notetracks::donotetracksfortime(0.2,"runanim"); + thread animscripts/run::stopshootwhilemovingthreads(); +} + +//Function Number: 2 +determinecqbanim() +{ + if(isdefined(self.custommoveanimset) && isdefined(self.custommoveanimset["cqb"])) + { + return animscripts/run::getrunanim(); + } + + if(self.stairsstate == "up") + { + return %traverse_stair_run; + } + + if(self.stairsstate == "down") + { + return %traverse_stair_run_down_01; + } + + if(self.movemode == "walk") + { + return %walk_cqb_f; + } + + var_00 = animscripts/utility::getrandomintfromseed(self.a.runloopcount,2); + if(var_00 == 0) + { + return %run_cqb_f_search_v1; + } + + return %run_cqb_f_search_v2; +} + +//Function Number: 3 +cqbtracking() +{ + if(animscripts/move::mayshootwhilemoving()) + { + animscripts/run::runshootwhilemovingthreads(); + } + + animscripts/run::faceenemyaimtracking(); +} + +//Function Number: 4 +func_0C65() +{ + level.cqbpointsofinterest = []; + var_00 = getentarray("cqb_point_of_interest","targetname"); + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + level.cqbpointsofinterest[var_01] = var_00[var_01].origin; + var_00[var_01] delete(); + } +} + +//Function Number: 5 +func_0C67() +{ + if(isdefined(level.var_C68)) + { + return; + } + + anim.var_C68 = 1; + if(!level.cqbpointsofinterest.size) + { + return; + } + + for(;;) + { + var_00 = getaiarray(); + var_01 = 0; + foreach(var_03 in var_00) + { + if(isalive(var_03) && var_03 animscripts/utility::iscqbwalking() && !isdefined(var_03.disable_cqb_points_of_interest)) + { + var_04 = var_03.a.movement != "stop"; + var_05 = (var_03.origin[0],var_03.origin[1],var_03 getshootatpos()[2]); + var_06 = var_05; + var_07 = anglestoforward(var_03.angles); + if(var_04) + { + var_08 = bullettrace(var_06,var_06 + var_07 * 128,0,undefined); + var_06 = var_08["position"]; + } + + var_09 = -1; + var_0A = 1048576; + for(var_0B = 0;var_0B < level.cqbpointsofinterest.size;var_0B++) + { + var_0C = level.cqbpointsofinterest[var_0B]; + var_0D = distancesquared(var_0C,var_06); + if(var_0D < var_0A) + { + if(var_04) + { + if(distancesquared(var_0C,var_05) < 4096) + { + continue; + } + + var_0E = vectordot(vectornormalize(var_0C - var_05),var_07); + if(var_0E < 0.643 || var_0E > 0.966) + { + continue; + } + } + else if(var_0D < 2500) + { + continue; + } + + if(!sighttracepassed(var_06,var_0C,0,undefined)) + { + continue; + } + + var_0A = var_0D; + var_09 = var_0B; + } + } + + if(var_09 < 0) + { + var_03.cqb_point_of_interest = undefined; + } + else + { + var_03.cqb_point_of_interest = level.cqbpointsofinterest[var_09]; + } + + wait 0.05; + var_01 = 1; + } + } + + if(!var_01) + { + wait 0.25; + } + } +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/death.gsc b/MW3/Xbox/SP/animscripts/death.gsc new file mode 100644 index 0000000..050727b --- /dev/null +++ b/MW3/Xbox/SP/animscripts/death.gsc @@ -0,0 +1,933 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\death.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 31 + * Decompile Time: 556 ms + * Timestamp: 10/27/2023 2:30:20 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self endon("killanimscript"); + self stopsoundchannel("voice"); + var_00 = 0.3; + self clearanim(%scripted_talking,var_00); + if(self.a.nodeath == 1) + { + return; + } + + if(isdefined(self.deathfunction)) + { + var_01 = self [[ self.deathfunction ]](); + if(!isdefined(var_01)) + { + var_01 = 1; + } + + if(var_01) + { + return; + } + } + + animscripts/utility::initialize("death"); + removeselffrom_squadlastseenenemypos(self.origin); + level.numdeathsuntilcrawlingpain--; + level.numdeathsuntilcornergrenadedeath--; + if(isdefined(self.ragdoll_immediate) || self.forceragdollimmediate) + { + doimmediateragdolldeath(); + } + + if(isdefined(self.var_93B)) + { + func_0941(self.var_93B); + if(isdefined(self.deathanimscript)) + { + self [[ self.deathanimscript ]](); + } + + return; + } + + var_02 = animscripts/pain::wasdamagedbyexplosive(); + if(self.damagelocation == "helmet" || self.damagelocation == "head") + { + helmetpop(); + } + else if(var_02 && randomint(3) == 0) + { + helmetpop(); + } + + self clearanim(%root,0.3); + if(!animscripts/utility::damagelocationisany("head","helmet")) + { + if(self.diequietly) + { + } + else + { + playdeathsound(); + } + } + + if(var_02 && playexplodedeathanim()) + { + return; + } + + if(isdefined(self.specialdeathfunc)) + { + if([[ self.specialdeathfunc ]]()) + { + return; + } + } + + if(specialdeath()) + { + return; + } + + var_03 = getdeathanim(); + func_0941(var_03); +} + +//Function Number: 2 +doimmediateragdolldeath() +{ + animscripts/shared::dropallaiweapons(); + self.skipdeathanim = 1; + var_00 = 10; + var_01 = common_scripts\_destructible::getdamagetype(self.damagemod); + if(isdefined(self.attacker) && self.attacker == level.player && var_01 == "melee") + { + var_00 = 5; + } + + var_02 = self.damagetaken; + if(var_01 == "bullet") + { + var_02 = max(var_02,300); + } + + var_03 = var_00 * var_02; + var_04 = max(0.3,self.damagedir[2]); + var_05 = (self.damagedir[0],self.damagedir[1],var_04); + if(isdefined(self.ragdoll_directionscale)) + { + var_05 = var_05 * self.ragdoll_directionscale; + } + else + { + var_05 = var_05 * var_03; + } + + if(self.forceragdollimmediate) + { + var_05 = var_05 + self.prevanimdelta * 20 * 10; + } + + if(isdefined(self.ragdoll_start_vel)) + { + var_05 = var_05 + self.ragdoll_start_vel * 10; + } + + self startragdollfromimpact(self.damagelocation,var_05); + wait 0.05; +} + +//Function Number: 3 +func_0941(param_00) +{ + if(!animhasnotetrack(param_00,"dropgun") && !animhasnotetrack(param_00,"fire_spray")) + { + animscripts/shared::dropallaiweapons(); + } + + self setflaggedanimknoballrestart("deathanim",param_00,%body,1,0.1); + if(isdefined(self.skipdeathanim)) + { + if(!isdefined(self.noragdoll)) + { + self startragdoll(); + } + + wait 0.05; + self animmode("gravity"); + } + else if(isdefined(self.ragdolltime)) + { + thread waitforragdoll(self.ragdolltime); + } + else if(!animhasnotetrack(param_00,"start_ragdoll")) + { + thread waitforragdoll(getanimlength(param_00) * 0.35); + } + + if(!isdefined(self.skipdeathanim)) + { + thread playdeathfx(); + } + + animscripts/shared::donotetracks("deathanim"); + animscripts/shared::dropallaiweapons(); +} + +//Function Number: 4 +waitforragdoll(param_00) +{ + wait param_00; + if(isdefined(self)) + { + animscripts/shared::dropallaiweapons(); + } + + if(isdefined(self) && !isdefined(self.noragdoll)) + { + self startragdoll(); + } +} + +//Function Number: 5 +playdeathfx() +{ + self endon("killanimscript"); + if(self.stairsstate != "none") + { + return; + } + + wait 2; + play_blood_pool(); +} + +//Function Number: 6 +play_blood_pool(param_00,param_01) +{ + if(!isdefined(self)) + { + return; + } + + if(isdefined(self.var_AB6)) + { + return; + } + + var_02 = self gettagorigin("j_SpineUpper"); + var_03 = self gettagangles("j_SpineUpper"); + var_04 = anglestoforward(var_03); + var_05 = anglestoup(var_03); + var_06 = anglestoright(var_03); + var_02 = var_02 + var_04 * -8.5 + var_05 * 5 + var_06 * 0; + var_07 = bullettrace(var_02 + (0,0,30),var_02 - (0,0,100),0,undefined); + if(var_07["normal"][2] > 0.9) + { + playfx(level._effect["deathfx_bloodpool_generic"],var_02); + } +} + +//Function Number: 7 +specialdeath() +{ + if(self.a.special == "none") + { + return 0; + } + + switch(self.a.special) + { + case "cover_right": + if(self.a.var_911 == "stand") + { + var_00 = []; + func_0AB8(var_41); + } + else + { + var_00 = []; + if(animscripts/utility::damagelocationisany("head","neck")) + { + } + else + { + } + + func_0AB8(var_41); + } + + return 1; + var_41[1] + %cornercrr_alert_death_back + var_41[0] + %cornercrr_alert_death_slideout + var_41[0] + %cornercrr_alert_death_slideout + var_41[1] + %corner_standr_deathb + var_41[0] + %corner_standr_deatha + break; + + case "cover_left": + if(self.a.var_911 == "stand") + { + var_00 = []; + func_0AB8(var_41); + } + else + { + var_00 = []; + func_0AB8(var_41); + } + + return 1; + var_41[1] + %cornercrl_death_back + var_41[0] + %cornercrl_death_side + var_41[1] + %corner_standl_deathb + var_41[0] + %corner_standl_deatha + break; + + case "cover_stand": + var_00 = []; + func_0AB8(var_41); + return 1; + var_41[1] + %coverstand_death_right + var_41[0] + %coverstand_death_left + break; + + case "cover_crouch": + var_00 = []; + if(animscripts/utility::damagelocationisany("head","neck") && self.damageyaw > 135 || self.damageyaw <= -45) + { + } + + if(self.damageyaw > -45 && self.damageyaw <= 45) + { + } + + func_0AB8(var_41); + return 1; + var_41[var_41.size] + %covercrouch_death_2 + var_41[var_41.size] + %covercrouch_death_3 + var_41[var_41.size] + %covercrouch_death_1 + break; + + case "saw": + if(self.a.var_911 == "stand") + { + func_0AB8(animscripts/utility::array(%saw_gunner_death)); + } + else if(self.a.var_911 == "crouch") + { + func_0AB8(animscripts/utility::array(%saw_gunner_lowwall_death)); + } + else + { + func_0AB8(animscripts/utility::array(%saw_gunner_prone_death)); + } + return 1; + + case "dying_crawl": + if(isdefined(self.a.onback) && self.a.var_911 == "crouch") + { + var_00 = animscripts/utility::array(%dying_back_death_v2,%dying_back_death_v3,%dying_back_death_v4); + func_0AB8(var_41); + } + else + { + var_00 = animscripts/utility::array(%dying_crawl_death_v1,%dying_crawl_death_v2); + func_0AB8(var_41); + } + return 1; + } + + return 0; +} + +//Function Number: 8 +func_0AB8(param_00) +{ + var_01 = param_00[randomint(param_00.size)]; + func_0941(var_01); + if(isdefined(self.deathanimscript)) + { + self [[ self.deathanimscript ]](); + } +} + +//Function Number: 9 +playdeathsound() +{ + animscripts/face::saygenericdialogue("death"); +} + +//Function Number: 10 +print3dfortime(param_00,param_01,param_02) +{ + var_03 = param_02 * 20; + for(var_04 = 0;var_04 < var_03;var_04++) + { + wait 0.05; + } +} + +//Function Number: 11 +helmetpop() +{ + if(!isdefined(self)) + { + return; + } + + if(!isdefined(self.var_ABA)) + { + return; + } + + var_00 = getpartname(self.var_ABA,0); + var_01 = spawn("script_model",self.origin + (0,0,64)); + var_01 setmodel(self.var_ABA); + var_01.origin = self gettagorigin(var_00); + var_01.angles = self gettagangles(var_00); + var_01 thread helmetlaunch(self.damagedir); + var_02 = self.var_ABA; + self.var_ABA = undefined; + wait 0.05; + if(!isdefined(self)) + { + return; + } + + self detach(var_02,""); +} + +//Function Number: 12 +helmetlaunch(param_00) +{ + var_01 = param_00; + var_01 = var_01 * randomfloatrange(2000,4000); + var_02 = var_01[0]; + var_03 = var_01[1]; + var_04 = randomfloatrange(1500,3000); + var_05 = self.origin + (randomfloatrange(-1,1),randomfloatrange(-1,1),randomfloatrange(-1,1)) * 5; + self physicslaunchclient(var_05,(var_02,var_03,var_04)); + wait 60; + for(;;) + { + if(!isdefined(self)) + { + return; + } + + if(distancesquared(self.origin,level.player.origin) > 262144) + { + break; + } + + wait 30; + } + + self delete(); +} + +//Function Number: 13 +removeselffrom_squadlastseenenemypos(param_00) +{ + for(var_01 = 0;var_01 < level.squadindex.size;var_01++) + { + level.squadindex[var_01] clearsightposnear(param_00); + } +} + +//Function Number: 14 +clearsightposnear(param_00) +{ + if(!isdefined(self.sightpos)) + { + return; + } + + if(distance(param_00,self.sightpos) < 80) + { + self.sightpos = undefined; + self.sighttime = gettime(); + } +} + +//Function Number: 15 +shoulddorunningforwarddeath() +{ + if(self.a.movement != "run") + { + return 0; + } + + if(self getmotionangle() > 60 || self getmotionangle() < -60) + { + return 0; + } + + return 1; +} + +//Function Number: 16 +shoulddostrongbulletdamage(param_00,param_01,param_02,param_03) +{ + if(isdefined(self.a.doinglongdeath)) + { + return 0; + } + + if(self.a.var_911 == "prone" || isdefined(self.a.onback)) + { + return 0; + } + + if(param_00 == "none") + { + return 0; + } + + if(param_02 > 500) + { + return 1; + } + + if(param_01 == "MOD_MELEE") + { + return 0; + } + + if(self.a.movement == "run" && !isattackerwithindist(param_03,275)) + { + if(randomint(100) < 65) + { + return 0; + } + } + + if(animscripts/utility::issniperrifle(param_00) && self.maxhealth < param_02) + { + return 1; + } + + if(animscripts/utility::isshotgun(param_00) && isattackerwithindist(param_03,512)) + { + return 1; + } + + if(isdeserteagle(param_00) && isattackerwithindist(param_03,425)) + { + return 1; + } + + return 0; +} + +//Function Number: 17 +isdeserteagle(param_00) +{ + if(param_00 == "deserteagle") + { + return 1; + } + + return 0; +} + +//Function Number: 18 +isattackerwithindist(param_00,param_01) +{ + if(!isdefined(param_00)) + { + return 0; + } + + if(distance(self.origin,param_00.origin) > param_01) + { + return 0; + } + + return 1; +} + +//Function Number: 19 +getdeathanim() +{ + if(shoulddostrongbulletdamage(self.damageweapon,self.damagemod,self.damagetaken,self.attacker)) + { + var_00 = func_0AC4(); + if(isdefined(var_00)) + { + return var_00; + } + } + + if(isdefined(self.a.onback)) + { + if(self.a.var_911 == "crouch") + { + return getbackdeathanim(); + } + else + { + animscripts/notetracks::stoponback(); + } + } + + if(self.a.var_911 == "stand") + { + if(shoulddorunningforwarddeath()) + { + return getrunningforwarddeathanim(); + } + + return func_0AC8(); + } + + if(self.a.var_911 == "crouch") + { + return func_0AC9(); + } + + if(self.a.var_911 == "prone") + { + return getpronedeathanim(); + } +} + +//Function Number: 20 +func_0AC4() +{ + var_00 = abs(self.damageyaw); + if(var_00 < 45) + { + return; + } + + if(var_00 > 150) + { + if(animscripts/utility::damagelocationisany("left_leg_upper","left_leg_lower","right_leg_upper","right_leg_lower","left_foot","right_foot")) + { + var_01 = animscripts/utility::array(%death_shotgun_legs,%death_stand_sniper_leg); + } + else + { + var_01 = []; + if(self.damagelocation == "torso_lower") + { + } + } + } + else if(self.damageyaw < 0) + { + var_01 = animscripts/utility::array(%death_shotgun_spinl,%death_stand_sniper_spin1,%death_stand_sniper_chest1,%death_stand_sniper_chest2); + } + else + { + var_01 = animscripts/utility::array(%death_shotgun_spinr,%death_stand_sniper_spin2,%death_stand_sniper_chest1,%death_stand_sniper_chest2); + } + + return var_41[randomint(var_41.size)]; +} + +//Function Number: 21 +getrunningforwarddeathanim() +{ + var_00 = []; + var_41 = animscripts/pain::removeblockedanims(var_41); + if(!var_41.size) + { + return func_0AC8(); + } + + return var_41[randomint(var_41.size)]; +} + +//Function Number: 22 +removeundefined(param_00) +{ + var_01 = []; + for(var_02 = 0;var_02 < param_00.size;var_02++) + { + if(!isdefined(param_00[var_02])) + { + continue; + } + + var_01[var_01.size] = param_00[var_02]; + } + + return var_01; +} + +//Function Number: 23 +getstandpistoldeathanim() +{ + var_00 = []; + if(abs(self.damageyaw) < 50) + { + } + else + { + if(abs(self.damageyaw) < 110) + { + } + + if(animscripts/utility::damagelocationisany("torso_lower","torso_upper","left_leg_upper","left_leg_lower","right_leg_upper","right_leg_lower")) + { + if(!animscripts/utility::damagelocationisany("torso_upper")) + { + } + } + + if(!animscripts/utility::damagelocationisany("head","neck","helmet","left_foot","right_foot","left_hand","right_hand","gun") && randomint(2) == 0) + { + } + + if(var_41.size == 0 || animscripts/utility::damagelocationisany("torso_lower","torso_upper","neck","head","helmet","right_arm_upper","left_arm_upper")) + { + } + } + + return var_41; +} + +//Function Number: 24 +func_0AC8() +{ + var_00 = []; + var_01 = []; + if(animscripts/utility::usingsidearm()) + { + var_00 = getstandpistoldeathanim(); + } + else + { + if(animscripts/utility::damagelocationisany("torso_lower","left_leg_upper","left_leg_lower","right_leg_lower","right_leg_lower")) + { + var_00[var_00.size] = tryadddeathanim(%exposed_death_groin); + var_00[var_00.size] = tryadddeathanim(%stand_death_leg); + } + + if(animscripts/utility::damagelocationisany("head","helmet")) + { + var_01[var_01.size] = tryadddeathanim(%exposed_death_headshot); + var_01[var_01.size] = tryadddeathanim(%exposed_death_flop); + } + + if(animscripts/utility::damagelocationisany("neck")) + { + var_01[var_01.size] = tryadddeathanim(%exposed_death_neckgrab); + } + + if(animscripts/utility::damagelocationisany("torso_upper","left_arm_upper")) + { + var_01[var_01.size] = tryadddeathanim(%exposed_death_twist); + var_01[var_01.size] = tryadddeathanim(%stand_death_shoulder_spin); + var_01[var_01.size] = tryadddeathanim(%stand_death_shoulderback); + } + + if(animscripts/utility::damagelocationisany("torso_upper")) + { + var_01[var_01.size] = tryadddeathanim(%stand_death_tumbleforward); + var_01[var_01.size] = tryadddeathanim(%stand_death_stumbleforward); + } + + if(self.damageyaw > 135 || self.damageyaw <= -135) + { + if(animscripts/utility::damagelocationisany("neck","head","helmet")) + { + var_01[var_01.size] = tryadddeathanim(%stand_death_face); + var_01[var_01.size] = tryadddeathanim(%stand_death_headshot_slowfall); + } + + if(animscripts/utility::damagelocationisany("torso_upper")) + { + var_01[var_01.size] = tryadddeathanim(%stand_death_tumbleback); + } + } + else if(self.damageyaw > -45 && self.damageyaw <= 45) + { + var_01[var_01.size] = tryadddeathanim(%exposed_death_falltoknees); + var_01[var_01.size] = tryadddeathanim(%exposed_death_falltoknees_02); + } + + var_02 = var_01.size > 0; + if(!var_02 || randomint(100) < 15) + { + var_01[var_01.size] = tryadddeathanim(%exposed_death_02); + var_01[var_01.size] = tryadddeathanim(%exposed_death_nerve); + } + + if(randomint(100) < 10 && firingdeathallowed()) + { + var_01[var_01.size] = tryaddfiringdeathanim(%exposed_death_firing_02); + var_01[var_01.size] = tryaddfiringdeathanim(%exposed_death_firing); + var_01 = removeundefined(var_01); + } + } + + if(var_01.size == 0) + { + var_01[var_01.size] = %exposed_death; + } + + if(!self.a.disablelongdeath && self.stairsstate == "none" && !isdefined(self.a.painonstairs)) + { + var_03 = randomint(var_01.size + var_41.size); + if(var_03 < var_01.size) + { + return var_01[var_03]; + } + else + { + return var_41[var_03 - var_01.size]; + } + } + + return var_01[randomint(var_01.size)]; +} + +//Function Number: 25 +func_0AC9() +{ + var_00 = []; + if(animscripts/utility::damagelocationisany("head","neck")) + { + } + + if(animscripts/utility::damagelocationisany("torso_upper","torso_lower","left_arm_upper","right_arm_upper","neck")) + { + } + + if(var_41.size < 2) + { + } + + if(var_41.size < 2) + { + } + + return var_41[randomint(var_41.size)]; +} + +//Function Number: 26 +getpronedeathanim() +{ + if(isdefined(self.a.var_ACB)) + { + return %prone_death_quickdeath; + } + + return %dying_crawl_death_v1; +} + +//Function Number: 27 +getbackdeathanim() +{ + var_00 = animscripts/utility::array(%dying_back_death_v1,%dying_back_death_v2,%dying_back_death_v3,%dying_back_death_v4); + return var_00[randomint(var_00.size)]; +} + +//Function Number: 28 +firingdeathallowed() +{ + if(!isdefined(self.weapon) || !animscripts/utility::usingriflelikeweapon() || !weaponisauto(self.weapon) || self.diequietly) + { + return 0; + } + + if(self.a.weaponpos["right"] == "none") + { + return 0; + } + + return 1; +} + +//Function Number: 29 +tryadddeathanim(param_00) +{ + return param_00; +} + +//Function Number: 30 +tryaddfiringdeathanim(param_00) +{ + return param_00; +} + +//Function Number: 31 +playexplodedeathanim() +{ + if(isdefined(self.juggernaut)) + { + return 0; + } + + if(self.damagelocation != "none") + { + return 0; + } + + var_00 = []; + if(self.a.movement != "run") + { + if(self.damageyaw > 135 || self.damageyaw <= -135) + { + } + else if(self.damageyaw > 45 && self.damageyaw <= 135) + { + } + else if(self.damageyaw > -45 && self.damageyaw <= 45) + { + } + else + { + } + } + else if(self.damageyaw > 135 || self.damageyaw <= -135) + { + } + else if(self.damageyaw > 45 && self.damageyaw <= 135) + { + } + else if(self.damageyaw > -45 && self.damageyaw <= 45) + { + } + else + { + } + + var_01 = var_41[randomint(var_41.size)]; + if(getdvar("scr_expDeathMayMoveCheck","on") == "on") + { + var_02 = getmovedelta(var_01,0,1); + var_03 = self localtoworldcoords(var_02); + if(!self maymovetopoint(var_03,0)) + { + return 0; + } + } + + self animmode("nogravity"); + func_0941(var_01); + return 1; +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/door.gsc b/MW3/Xbox/SP/animscripts/door.gsc new file mode 100644 index 0000000..1fe601f --- /dev/null +++ b/MW3/Xbox/SP/animscripts/door.gsc @@ -0,0 +1,309 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\door.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 11 + * Decompile Time: 191 ms + * Timestamp: 10/27/2023 2:30:21 AM +*******************************************************************/ + +//Function Number: 1 +doorenterexitcheck() +{ + self endon("killanimscript"); + if(isdefined(self.disabledoorbehavior)) + { + return; + } + + for(;;) + { + var_00 = self getdoorpathnode(); + if(isdefined(var_00)) + { + break; + } + + wait 0.2; + } + + var_01 = var_00.type == "Door Interior" || self comparenodedirtopathdir(var_00); + if(var_01) + { + doorenter(var_00); + } + else + { + doorexit(var_00); + } + + for(;;) + { + var_02 = self getdoorpathnode(); + if(!isdefined(var_02) || var_02 != var_00) + { + break; + } + + wait 0.2; + } + + thread doorenterexitcheck(); +} + +//Function Number: 2 +teamflashbangimmune() +{ + self endon("killanimscript"); + self.var_C76 = 1; + wait 5; + self.var_C76 = undefined; +} + +//Function Number: 3 +dodoorgrenadethrow(param_00) +{ + thread teamflashbangimmune(); + if(self.grenadeweapon == "flash_grenade") + { + self notify("flashbang_thrown"); + } + + self orientmode("face current"); + param_00.nextdoorgrenadetime = gettime() + 5000; + self.minindoortime = gettime() + 100000; + self notify("move_interrupt"); + self.update_move_anim_type = undefined; + self clearanim(%combatrun,0.2); + self.a.movement = "stop"; + self waittill("done_grenade_throw"); + self orientmode("face default"); + self.minindoortime = gettime() + 5000; + self.grenadeweapon = self.oldgrenadeweapon; + self.oldgrenadeweapon = undefined; + animscripts/run::endfaceenemyaimtracking(); + thread animscripts/move::pathchangecheck(); + thread animscripts/move::restartmoveloop(1); +} + +//Function Number: 4 +doorenter_trygrenade(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = 0; + var_06 = 3; + var_07 = undefined; + var_07 = %cqb_stand_grenade_throw; + var_08 = anglestoforward(param_00.angles); + if(param_00.type == "Door Interior" && !self comparenodedirtopathdir(param_00)) + { + var_08 = -1 * var_08; + } + + var_09 = (param_00.origin[0],param_00.origin[1],param_00.origin[2] + 64); + var_0A = var_09; + if(param_02) + { + var_0B = anglestoright(param_00.angles); + var_0C = param_00.origin - self.origin; + var_0D = vectordot(var_0B,var_0C); + if(var_0D > 20) + { + var_0D = 20; + } + else if(var_0D < -20) + { + var_0D = -20; + } + + var_0A = var_09 + var_0D * var_0B; + } + + while(var_06 > 0) + { + if(isdefined(self.grenade) || !isdefined(self.enemy)) + { + return; + } + + if(func_0C8B(param_00,var_08)) + { + return; + } + + if(!self seerecently(self.enemy,0.2) && self.a.var_911 == "stand" && distance2dandheightcheck(self.enemy.origin - param_00.origin,360000,16384)) + { + if(isdefined(param_00.nextdoorgrenadetime) && param_00.nextdoorgrenadetime > gettime()) + { + return; + } + + if(self canshootenemy()) + { + return; + } + + var_0C = param_00.origin - self.origin; + if(lengthsquared(var_0C) < param_03) + { + return; + } + + if(vectordot(var_0C,var_08) < 0) + { + return; + } + + self.oldgrenadeweapon = self.grenadeweapon; + self.grenadeweapon = param_01; + animscripts/combat_utility::setactivegrenadetimer(self.enemy); + if(!var_05) + { + var_0E = var_09 + var_08 * 100; + if(!self isgrenadepossafe(self.enemy,var_0E,128)) + { + return; + } + } + + var_05 = 1; + if(animscripts/combat_utility::trygrenadethrow(self.enemy,var_0A,var_07,animscripts/combat_utility::getgrenadethrowoffset(var_07),1,0,1)) + { + dodoorgrenadethrow(param_00); + return; + } + } + + var_06--; + wait param_04; + var_0F = self getdoorpathnode(); + if(!isdefined(var_0F) || var_0F != param_00) + { + return; + } + } +} + +//Function Number: 5 +indoorcqbtogglecheck() +{ + self endon("killanimscript"); + if(isdefined(self.disabledoorbehavior)) + { + return; + } + + self.isindoor = 0; + for(;;) + { + if(self isindoor() && !self.doingambush) + { + doorenter_enable_cqbwalk(); + } + else if(!isdefined(self.minindoortime) || self.minindoortime < gettime()) + { + self.minindoortime = undefined; + doorexit_disable_cqbwalk(); + } + + wait 0.2; + } +} + +//Function Number: 6 +doorenter_enable_cqbwalk() +{ + if(!isdefined(self.var_C84) && !self.doingambush) + { + self.isindoor = 1; + if(!isdefined(self.cqbwalking) || !self.cqbwalking) + { + maps\_utility::enable_cqbwalk(1); + } + } +} + +//Function Number: 7 +doorexit_disable_cqbwalk() +{ + if(!isdefined(self.cqbenabled)) + { + self.isindoor = 0; + if(isdefined(self.cqbwalking) && self.cqbwalking) + { + maps\_utility::disable_cqbwalk(); + } + } +} + +//Function Number: 8 +distance2dandheightcheck(param_00,param_01,param_02) +{ + return param_00[0] * param_00[0] + param_00[1] * param_00[1] < param_01 && param_00[2] * param_00[2] < param_02; +} + +//Function Number: 9 +func_0C8B(param_00,param_01) +{ + var_02 = param_00.origin - self.origin; + var_03 = param_00.origin - self.enemy.origin; + return vectordot(var_02,param_01) * vectordot(var_03,param_01) > 0; +} + +//Function Number: 10 +doorenter(param_00) +{ + for(;;) + { + if(isdefined(self.doorfragchance) && self.doorfragchance == 0 || self.doorfragchance < randomfloat(1)) + { + break; + } + + if(distance2dandheightcheck(self.origin - param_00.origin,562500,25600)) + { + doorenter_trygrenade(param_00,"fraggrenade",0,302500,0.3); + param_00 = self getdoorpathnode(); + if(!isdefined(param_00)) + { + return; + } + + break; + } + + wait 0.1; + } + + for(;;) + { + if(distance2dandheightcheck(self.origin - param_00.origin,-28672,6400)) + { + doorenter_enable_cqbwalk(); + self.minindoortime = gettime() + 6000; + if(isdefined(self.var_C8E) && self.var_C8E == 0 || self.var_C8E < randomfloat(1)) + { + return; + } + + doorenter_trygrenade(param_00,"flash_grenade",1,4096,0.2); + return; + } + + wait 0.1; + } +} + +//Function Number: 11 +doorexit(param_00) +{ + for(;;) + { + if(!self.isindoor || distancesquared(self.origin,param_00.origin) < 1024) + { + return; + } + + wait 0.1; + } +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/face.gsc b/MW3/Xbox/SP/animscripts/face.gsc new file mode 100644 index 0000000..f95451f --- /dev/null +++ b/MW3/Xbox/SP/animscripts/face.gsc @@ -0,0 +1,349 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\face.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 13 + * Decompile Time: 242 ms + * Timestamp: 10/27/2023 2:30:22 AM +*******************************************************************/ + +//Function Number: 1 +initcharacterface() +{ + if(!level.usefacialanims) + { + return; + } + + if(!isdefined(self.a.currentdialogimportance)) + { + self.a.currentdialogimportance = 0; + self.a.idleface = level.alertface; + self.var_82A = []; + self.facelastnotifynum = 0; + } +} + +//Function Number: 2 +saygenericdialogue(param_00) +{ + var_01 = undefined; + switch(self.voice) + { + case "seal": + case "taskforce": + case "french": + case "pmc": + case "czech": + case "delta": + case "american": + var_02 = "friendly"; + var_03 = level.numfriendlyvoices; + break; + + default: + var_02 = "enemy"; + var_03 = level.numenemyvoices; + break; + } + + var_01 = 1 + self getentitynumber() % var_03; + var_02 = var_02 + "_" + var_01; + var_04 = undefined; + switch(param_00) + { + case "meleeattack": + case "meleecharge": + var_05 = 0.5; + break; + + case "flashbang": + var_05 = 0.7; + break; + + case "pain": + var_05 = 0.9; + break; + + case "death": + var_05 = 1; + break; + + default: + var_05 = 0.3; + break; + } + + var_06 = "generic_" + param_00 + "_" + var_02; + thread playfacethread(var_04,var_06,var_05); +} + +//Function Number: 3 +setidlefacedelayed(param_00) +{ + animscripts/battlechatter::playbattlechatter(); + self.a.idleface = param_00; +} + +//Function Number: 4 +setidleface(param_00) +{ + if(!level.usefacialanims) + { + return; + } + + animscripts/battlechatter::playbattlechatter(); + self.a.idleface = param_00; + playidleface(); +} + +//Function Number: 5 +sayspecificdialogue(param_00,param_01,param_02,param_03,param_04,param_05) +{ + thread playfacethread(param_00,param_01,param_02,param_03,param_04,param_05); +} + +//Function Number: 6 +chooseanimfromset(param_00) +{ +} + +//Function Number: 7 +playidleface() +{ +} + +//Function Number: 8 +playfacethread(param_00,param_01,param_02,param_03,param_04,param_05) +{ + self.a.facialanimdone = 1; + self.a.facialsounddone = 1; + if(isdefined(param_03)) + { + if(isdefined(param_01)) + { + self playsoundatviewheight(param_01,"animscript facesound" + param_03,1); + thread waitforfacesound(param_03); + } + } + else + { + self playsoundatviewheight(param_01); + } + + if(!level.usefacialanims) + { + return; + } + + initcharacterface(); + if(!isdefined(param_00) && !isdefined(param_01)) + { + if(isdefined(param_03)) + { + wait 0; + self.faceresult = "failed"; + self notify(param_03); + } + + return; + } + + self endon("death"); + if(isstring(param_02)) + { + switch(param_02) + { + case "any": + param_02 = 0.1; + break; + + case "pain": + param_02 = 0.9; + break; + + case "death": + param_02 = 1; + break; + } + } + + if(param_02 <= self.a.currentdialogimportance && isdefined(param_04) && param_04 == "wait") + { + var_06 = self.var_82A.size; + var_07 = self.facelastnotifynum + 1; + self.var_82A[var_06]["facialanim"] = param_00; + self.var_82A[var_06]["soundAlias"] = param_01; + self.var_82A[var_06]["importance"] = param_02; + self.var_82A[var_06]["notifyString"] = param_03; + self.var_82A[var_06]["waitOrNot"] = param_04; + self.var_82A[var_06]["timeToWait"] = param_05; + self.var_82A[var_06]["notifyNum"] = var_07; + thread playface_waitfornotify("animscript face stop waiting " + self.var_82A[var_06]["notifyNum"],"Face done waiting","Face done waiting"); + if(isdefined(param_05)) + { + thread playface_waitfortime(param_05,"Face done waiting","Face done waiting"); + } + + self waittill("Face done waiting"); + var_06 = undefined; + for(var_08 = 0;var_08 < self.var_82A.size;var_08++) + { + if(self.var_82A[var_08]["notifyNum"] == var_07) + { + var_06 = var_08; + break; + } + } + + if(self.a.facewaitforresult == "notify") + { + playfacethread(self.var_82A[var_06]["facialanim"],self.var_82A[var_06]["soundAlias"],self.var_82A[var_06]["importance"],self.var_82A[var_06]["notifyString"]); + } + else if(isdefined(param_03)) + { + self.faceresult = "failed"; + self notify(param_03); + } + + for(var_08 = var_06 + 1;var_08 < self.var_82A.size;var_08++) + { + self.var_82A[var_08 - 1]["facialanim"] = self.var_82A[var_08]["facialanim"]; + self.var_82A[var_08 - 1]["soundAlias"] = self.var_82A[var_08]["soundAlias"]; + self.var_82A[var_08 - 1]["importance"] = self.var_82A[var_08]["importance"]; + self.var_82A[var_08 - 1]["notifyString"] = self.var_82A[var_08]["notifyString"]; + self.var_82A[var_08 - 1]["waitOrNot"] = self.var_82A[var_08]["waitOrNot"]; + self.var_82A[var_08 - 1]["timeToWait"] = self.var_82A[var_08]["timeToWait"]; + self.var_82A[var_08 - 1]["notifyNum"] = self.var_82A[var_08]["notifyNum"]; + } + + self.var_82A[self.var_82A.size - 1] = undefined; + return; + } + + if(param_02 >= self.a.currentdialogimportance) + { + self notify("end current face"); + self endon("end current face"); + if(isdefined(param_03)) + { + if(isdefined(self.a.currentdialognotifystring)) + { + self.faceresult = "interrupted"; + self notify(self.a.currentdialognotifystring); + } + } + + self.a.currentdialogimportance = param_02; + self.a.currentdialogsound = param_01; + self.a.currentdialognotifystring = param_03; + self.a.facialanimdone = 1; + self.a.facialsounddone = 1; + if(isdefined(param_00)) + { + self setflaggedanimknobrestart("animscript faceanim",param_00,1,0.1,1); + self.a.facialanimdone = 0; + thread waitforfacialanim(); + } + + if(isdefined(param_01)) + { + self playsoundatviewheight(param_01,"animscript facesound",1); + self.a.facialsounddone = 0; + thread waitforfacesound(); + } + + while(!self.a.facialanimdone || !self.a.facialsounddone) + { + self waittill("animscript facedone"); + } + + self.a.currentdialogimportance = 0; + self.a.currentdialogsound = undefined; + self.a.currentdialognotifystring = undefined; + if(isdefined(param_03)) + { + self.faceresult = "finished"; + self notify(param_03); + } + + if(isdefined(self.var_82A) && self.var_82A.size > 0) + { + var_09 = 0; + var_0A = 1; + for(var_08 = 0;var_08 < self.var_82A.size;var_08++) + { + if(self.var_82A[var_08]["importance"] > var_09) + { + var_09 = self.var_82A[var_08]["importance"]; + var_0A = var_08; + } + } + + self notify("animscript face stop waiting " + self.var_82A[var_0A]["notifyNum"]); + return; + } + + if(isai(self)) + { + playidleface(); + return; + } + + return; + } + + if(isdefined(param_03)) + { + self.faceresult = "failed"; + self notify(param_03); + return; + } +} + +//Function Number: 9 +waitforfacialanim() +{ + self endon("death"); + self endon("end current face"); + animscripts/shared::donotetracks("animscript faceanim"); + self.a.facialanimdone = 1; + self notify("animscript facedone"); +} + +//Function Number: 10 +waitforfacesound(param_00) +{ + self endon("death"); + self waittill("animscript facesound" + param_00); + self notify(param_00); +} + +//Function Number: 11 +playface_waitfornotify(param_00,param_01,param_02) +{ + self endon("death"); + self endon(param_02); + self waittill(param_00); + self.a.facewaitforresult = "notify"; + self notify(param_01); +} + +//Function Number: 12 +playface_waitfortime(param_00,param_01,param_02) +{ + self endon("death"); + self endon(param_02); + wait param_00; + self.a.facewaitforresult = "time"; + self notify(param_01); +} + +//Function Number: 13 +initlevelface() +{ + anim.numfriendlyvoices = 8; + anim.numenemyvoices = 8; +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/first_frame.gsc b/MW3/Xbox/SP/animscripts/first_frame.gsc new file mode 100644 index 0000000..15a78dc --- /dev/null +++ b/MW3/Xbox/SP/animscripts/first_frame.gsc @@ -0,0 +1,23 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\first_frame.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 1 + * Decompile Time: 38 ms + * Timestamp: 10/27/2023 2:30:23 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self endon("death"); + self endon("stop_first_frame"); + self notify("killanimscript"); + self.pushable = 0; + self clearanim(self.root_anim,0.3); + self orientmode("face angle",self.angles[1]); + self setanim(level.scr_anim[self._animname][self._first_frame_anim],1,0,0); + self._first_frame_anim = undefined; + self waittill("killanimscript"); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/flashed.gsc b/MW3/Xbox/SP/animscripts/flashed.gsc new file mode 100644 index 0000000..2eaeb7b --- /dev/null +++ b/MW3/Xbox/SP/animscripts/flashed.gsc @@ -0,0 +1,95 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\flashed.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 6 + * Decompile Time: 106 ms + * Timestamp: 10/27/2023 2:30:23 AM +*******************************************************************/ + +//Function Number: 1 +initflashed() +{ + level.flashanimarray[0] = %exposed_flashbang_v1; + level.flashanimarray[1] = %exposed_flashbang_v2; + level.flashanimarray[2] = %exposed_flashbang_v3; + level.flashanimarray[3] = %exposed_flashbang_v4; + level.flashanimarray[4] = %exposed_flashbang_v5; + randomizeflashanimarray(); + anim.flashanimindex = 0; +} + +//Function Number: 2 +randomizeflashanimarray() +{ + for(var_00 = 0;var_00 < level.flashanimarray.size;var_00++) + { + var_01 = randomint(level.flashanimarray.size); + var_02 = level.flashanimarray[var_00]; + level.flashanimarray[var_00] = level.flashanimarray[var_01]; + level.flashanimarray[var_01] = var_02; + } +} + +//Function Number: 3 +getnextflashanim() +{ + level.flashanimindex++; + if(level.flashanimindex >= level.flashanimarray.size) + { + anim.flashanimindex = 0; + randomizeflashanimarray(); + } + + return level.flashanimarray[level.flashanimindex]; +} + +//Function Number: 4 +func_1C15(param_00) +{ + self endon("killanimscript"); + self setflaggedanimknoball("flashed_anim",param_00,%body,0.2,randomfloatrange(0.9,1.1)); + animscripts/shared::donotetracks("flashed_anim"); +} + +//Function Number: 5 +main() +{ + self endon("death"); + self endon("killanimscript"); + animscripts/utility::initialize("flashed"); + var_00 = maps\_utility::func_1C16(); + if(var_00 <= 0) + { + return; + } + + animscripts/face::saygenericdialogue("flashbang"); + if(isdefined(self.specialflashedfunc)) + { + self [[ self.specialflashedfunc ]](); + return; + } + + var_01 = getnextflashanim(); + func_1C18(var_01,var_00); +} + +//Function Number: 6 +func_1C18(param_00,param_01) +{ + self endon("death"); + self endon("killanimscript"); + if(self.a.var_911 == "prone") + { + animscripts/utility::exitpronewrapper(1); + } + + self.a.var_911 = "stand"; + self.allowdeath = 1; + thread func_1C15(param_00); + wait param_01; + self notify("stop_flashbang_effect"); + self.var_1C19 = 0; +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/grenade_cower.gsc b/MW3/Xbox/SP/animscripts/grenade_cower.gsc new file mode 100644 index 0000000..280662e --- /dev/null +++ b/MW3/Xbox/SP/animscripts/grenade_cower.gsc @@ -0,0 +1,99 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\grenade_cower.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 3 + * Decompile Time: 58 ms + * Timestamp: 10/27/2023 2:30:24 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self endon("killanimscript"); + animscripts/utility::initialize("grenadecower"); + if(isdefined(self.var_35F4)) + { + self [[ self.var_35F4 ]](); + return; + } + + if(self.a.var_911 == "prone") + { + animscripts/stop::main(); + return; + } + + self animmode("zonly_physics"); + self orientmode("face angle",self.angles[1]); + var_00 = 0; + if(isdefined(self.grenade)) + { + var_00 = angleclamp180(vectortoangles(self.grenade.origin - self.origin)[1] - self.angles[1]); + } + else + { + var_00 = self.angles[1]; + } + + if(self.a.var_911 == "stand") + { + if(isdefined(self.grenade) && func_3AE4(var_00)) + { + return; + } + + self setflaggedanimknoballrestart("cowerstart",%exposed_squat_down_grenade_f,%body,1,0.2); + animscripts/shared::donotetracks("cowerstart"); + } + + self.a.var_911 = "crouch"; + self.a.movement = "stop"; + self setflaggedanimknoballrestart("cower",%exposed_squat_idle_grenade_f,%body,1,0.2); + animscripts/shared::donotetracks("cower"); + self waittill("never"); +} + +//Function Number: 2 +end_script() +{ + self.safetochangescript = 1; +} + +//Function Number: 3 +func_3AE4(param_00) +{ + if(randomint(2) == 0) + { + return 0; + } + + if(self.stairsstate != "none") + { + return 0; + } + + var_01 = undefined; + if(abs(param_00) > 90) + { + var_01 = %exposed_dive_grenade_b; + } + else + { + var_01 = %exposed_dive_grenade_f; + } + + var_02 = getmovedelta(var_01,0,0.5); + var_03 = self localtoworldcoords(var_02); + if(!self maymovetopoint(var_03)) + { + return 0; + } + + self.safetochangescript = 0; + self setflaggedanimknoballrestart("cowerstart",var_01,%body,1,0.2); + animscripts/shared::donotetracks("cowerstart"); + self.safetochangescript = 1; + return 1; +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/grenade_return_throw.gsc b/MW3/Xbox/SP/animscripts/grenade_return_throw.gsc new file mode 100644 index 0000000..2e45af3 --- /dev/null +++ b/MW3/Xbox/SP/animscripts/grenade_return_throw.gsc @@ -0,0 +1,98 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\grenade_return_throw.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 4 + * Decompile Time: 79 ms + * Timestamp: 10/27/2023 2:30:24 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self orientmode("face default"); + self endon("killanimscript"); + animscripts/utility::initialize("grenade_return_throw"); + self animmode("zonly_physics"); + var_00 = undefined; + var_01 = 1000; + if(isdefined(self.enemy)) + { + var_01 = distance(self.origin,self.enemy.origin); + } + + var_02 = []; + if(var_01 < 600 && islowthrowsafe()) + { + if(var_01 < 300) + { + } + else + { + } + } + + if(var_41.size == 0) + { + } + + var_01 = var_41[randomint(var_41.size)]; + self setflaggedanimknoballrestart("throwanim",var_01,%body,1,0.3); + var_04 = animhasnotetrack(var_01,"grenade_left") || animhasnotetrack(var_01,"grenade_right"); + if(var_04) + { + animscripts/shared::placeweaponon(self.weapon,"left"); + thread func_3AE6(); + thread func_3AE7("throwanim","grenade_left"); + thread func_3AE7("throwanim","grenade_right"); + self waittill(%grenade_return_running_throw_forward,var_41[0],%grenade_return_standing_throw_forward_1,var_41[1],%grenade_return_running_throw_forward,var_41[0],%grenade_return_standing_throw_overhand_forward,var_41[1],%grenade_return_standing_throw_overhand_forward,var_41[0],"grenade_pickup"); + self pickupgrenade(); + animscripts/battlechatter_ai::evaluateattackevent("grenade"); + self waittillmatch("grenade_throw","throwanim"); + } + else + { + self waittillmatch("grenade_throw","throwanim"); + self pickupgrenade(); + animscripts/battlechatter_ai::evaluateattackevent("grenade"); + } + + if(isdefined(self.grenade)) + { + self throwgrenade(); + } + + wait 1; + if(var_04) + { + self notify("put_weapon_back_in_right_hand"); + animscripts/shared::placeweaponon(self.weapon,"right"); + } +} + +//Function Number: 2 +islowthrowsafe() +{ + var_00 = (self.origin[0],self.origin[1],self.origin[2] + 20); + var_01 = var_00 + anglestoforward(self.angles) * 50; + return sighttracepassed(var_00,var_01,0,undefined); +} + +//Function Number: 3 +func_3AE6() +{ + self endon("death"); + self endon("put_weapon_back_in_right_hand"); + self waittill("killanimscript"); + animscripts/shared::placeweaponon(self.weapon,"right"); +} + +//Function Number: 4 +func_3AE7(param_00,param_01) +{ + self endon("killanimscript"); + self endon("grenade_pickup"); + self waittillmatch(param_01,param_00); + self notify("grenade_pickup"); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/init.gsc b/MW3/Xbox/SP/animscripts/init.gsc new file mode 100644 index 0000000..2ab1381 --- /dev/null +++ b/MW3/Xbox/SP/animscripts/init.gsc @@ -0,0 +1,629 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\init.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 25 + * Decompile Time: 425 ms + * Timestamp: 10/27/2023 2:30:26 AM +*******************************************************************/ + +//Function Number: 1 +func_1C1A(param_00) +{ + self.weaponinfo[param_00] = spawnstruct(); + self.weaponinfo[param_00].var_1C1B = "none"; + self.weaponinfo[param_00].var_1C1C = 1; + if(getweaponclipmodel(param_00) != "") + { + self.weaponinfo[param_00].var_1C1D = 1; + return; + } + + self.weaponinfo[param_00].var_1C1D = 0; +} + +//Function Number: 2 +isweaponinitialized(param_00) +{ + return isdefined(self.weaponinfo[param_00]); +} + +//Function Number: 3 +setglobalaimsettings() +{ + anim.var_898 = 55; + anim.aimyawdifffartolerance = 10; + anim.aimyawdiffclosedistsq = 4096; + anim.aimyawdiffclosetolerance = 45; + anim.aimpitchdifftolerance = 20; + anim.painyawdifffartolerance = 25; + anim.painyawdiffclosedistsq = level.aimyawdiffclosedistsq; + anim.painyawdiffclosetolerance = level.aimyawdiffclosetolerance; + anim.painpitchdifftolerance = 30; + anim.maxanglecheckyawdelta = 65; + anim.maxanglecheckpitchdelta = 65; +} + +//Function Number: 4 +func_1C24() +{ + if(animscripts/utility::isshotgun(self.secondaryweapon)) + { + return 1; + } + + if(weaponclass(self.primaryweapon) == "rocketlauncher") + { + return 1; + } + + return 0; +} + +//Function Number: 5 +main() +{ + self.a = spawnstruct(); + self.a.laseron = 0; + self.primaryweapon = self.weapon; + firstinit(); + if(self.primaryweapon == "") + { + self.primaryweapon = "none"; + } + + if(self.secondaryweapon == "") + { + self.secondaryweapon = "none"; + } + + if(self.sidearm == "") + { + self.sidearm = "none"; + } + + func_1C1A(self.primaryweapon); + func_1C1A(self.secondaryweapon); + func_1C1A(self.sidearm); + self setdefaultaimlimits(); + self.a.weaponpos["left"] = "none"; + self.a.weaponpos["right"] = "none"; + self.a.weaponpos["chest"] = "none"; + self.a.weaponpos["back"] = "none"; + self.a.weaponposdropping["left"] = "none"; + self.a.weaponposdropping["right"] = "none"; + self.a.weaponposdropping["chest"] = "none"; + self.a.weaponposdropping["back"] = "none"; + self.lastweapon = self.weapon; + self.root_anim = %root; + thread func_17A7(); + var_00 = animscripts/utility::usingrocketlauncher(); + self.a.neverlean = var_00; + if(var_00) + { + thread animscripts/shared::rpgplayerrepulsor(); + } + + self.a.rockets = 3; + self.a.rocketvisible = 1; + self.a.var_911 = "stand"; + self.a.grenadethrowpose = "stand"; + self.a.movement = "stop"; + self.a.state = "stop"; + self.a.special = "none"; + self.a.gunhand = "none"; + self.a.prevputguninhandtime = -1; + self.dropweapon = 1; + self.minexposedgrenadedist = 750; + animscripts/shared::placeweaponon(self.primaryweapon,"right"); + if(animscripts/utility::isshotgun(self.secondaryweapon)) + { + animscripts/shared::placeweaponon(self.secondaryweapon,"back"); + } + + self.a.needstorechamber = 0; + self.a.var_1C2B = gettime(); + self.a.lastenemytime = gettime(); + self.a.var_1C2D = 0; + self.a.disablelongdeath = !self isbadguy(); + self.a.lookangle = 0; + self.a.paintime = 0; + self.a.lastshoottime = 0; + self.a.nextgrenadetrytime = 0; + self.a.reacttobulletchance = 0.8; + if(self.team != "allies") + { + self.has_no_ir = 1; + } + + self.a.var_1C2F = undefined; + self.a.stance = "stand"; + self.chooseposefunc = ::animscripts/utility::choosepose; + self._animactive = 0; + self._lastanimtime = 0; + thread func_1C43(); + self.baseaccuracy = 1; + self.a.var_1556 = 0; + self.a.nodeath = 0; + self.a.var_1556 = 0; + self.a.var_1C32 = 0; + self.a.disablepain = 0; + self.accuracystationarymod = 1; + self.chatinitialized = 0; + self.sightpostime = 0; + self.var_1C35 = 1; + self.var_1C36 = 1; + self.defaultturnthreshold = 55; + self.a.nextstandinghitdying = 0; + if(!isdefined(self.script_forcegrenade)) + { + self.script_forcegrenade = 0; + } + + setupuniqueanims(); + animscripts/weaponlist::refillclip(); + self.lastenemysighttime = 0; + self.combattime = 0; + self.suppressed = 0; + self.suppressedtime = 0; + if(self.team == "allies") + { + self.suppressionthreshold = 0.5; + } + else + { + self.suppressionthreshold = 0; + } + + if(self.team == "allies") + { + self.var_1C38 = 0; + } + else + { + self.var_1C38 = 256; + } + + self.ammocheatinterval = 8000; + self.ammocheattime = 0; + animscripts/animset::func_88B(); + self.exception = []; + self.exception["corner"] = 1; + self.exception["cover_crouch"] = 1; + self.exception["stop"] = 1; + self.exception["stop_immediate"] = 1; + self.exception["move"] = 1; + self.exception["exposed"] = 1; + self.exception["corner_normal"] = 1; + var_01 = getarraykeys(self.exception); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + common_scripts\utility::clear_exception(var_01[var_02]); + } + + self.reacquire_state = 0; + thread setnameandrank_andaddtosquad(); + self.shouldconserveammotime = 0; + thread animscripts/combat_utility::monitorflash(); + thread ondeath(); +} + +//Function Number: 6 +weapons_with_ir(param_00) +{ + var_01[0] = "m4_grenadier"; + if(!isdefined(var_01)) + { + return 0; + } + + for(var_02 = 0;var_02 < var_41.size;var_02++ = var_41[3]) + { + if(issubstr(var_01,var_41[var_02])) + { + return 1; + } + } + + return 0; +} + +//Function Number: 7 +setnameandrank_andaddtosquad() +{ + self endon("death"); + if(!isdefined(level.loadoutcomplete)) + { + level waittill("loadout complete"); + } + + maps\_names::get_name(); + thread animscripts/squadmanager::addtosquad(); +} + +//Function Number: 8 +pollallowedstancesthread() +{ + for(;;) + { + if(self isstanceallowed("stand")) + { + var_00[0] = "stand allowed"; + var_01[0] = (0,1,0); + } + else + { + var_00[0] = "stand not allowed"; + var_01[0] = (1,0,0); + } + + if(self isstanceallowed("crouch")) + { + var_00[1] = "crouch allowed"; + var_01[1] = (0,1,0); + } + else + { + var_00[1] = "crouch not allowed"; + var_01[1] = (1,0,0); + } + + if(self isstanceallowed("prone")) + { + var_00[2] = "prone allowed"; + var_01[2] = (0,1,0); + } + else + { + var_00[2] = "prone not allowed"; + var_01[2] = (1,0,0); + } + + var_02 = self getshootatpos() + (0,0,30); + var_03 = (0,0,-10); + for(var_04 = 0;var_04 < var_00.size;var_04++) + { + var_05 = (var_02[0] + var_03[0] * var_04,var_02[1] + var_03[1] * var_04,var_02[2] + var_03[2] * var_04); + } + + wait 0.05; + } +} + +//Function Number: 9 +setupuniqueanims() +{ + if(!isdefined(self.animplaybackrate) || !isdefined(self.moveplaybackrate)) + { + func_1C40(); + } +} + +//Function Number: 10 +func_1C40() +{ + self.animplaybackrate = 0.9 + randomfloat(0.2); + self.movetransitionrate = 0.9 + randomfloat(0.2); + self.moveplaybackrate = 1; + self.sidesteprate = 1.35; +} + +//Function Number: 11 +infiniteloop(param_00,param_01,param_02,param_03) +{ + anim waittill("new exceptions"); +} + +//Function Number: 12 +empty(param_00,param_01,param_02,param_03) +{ +} + +//Function Number: 13 +func_1C43() +{ + self endon("death"); + if(1) + { + return; + } + + for(;;) + { + self waittill("enemy"); + if(!isalive(self.enemy)) + { + continue; + } + + while(isplayer(self.enemy)) + { + if(animscripts/utility::hasenemysightpos()) + { + level.lastplayersighted = gettime(); + } + + wait 2; + } + } +} + +//Function Number: 14 +func_1C45() +{ + level.window_down_height[0] = -36.8552; + level.window_down_height[1] = -27.0095; + level.window_down_height[2] = -15.5981; + level.window_down_height[3] = -4.37769; + level.window_down_height[4] = 17.7776; + level.window_down_height[5] = 59.8499; + level.window_down_height[6] = 104.808; + level.window_down_height[7] = 152.325; + level.window_down_height[8] = 201.052; + level.window_down_height[9] = 250.244; + level.window_down_height[10] = 298.971; + level.window_down_height[11] = 330.681; +} + +//Function Number: 15 +firstinit() +{ + if(isdefined(level.notfirsttime)) + { + return; + } + + anim.notfirsttime = 1; + animscripts/animset::func_84F(); + anim.usefacialanims = 0; + maps\_load::init_level_players(); + level.player.invul = 0; + level.nextgrenadedrop = randomint(3); + level.lastplayersighted = 100; + anim.defaultexception = ::empty; + initdeveloperdvars(); + setdvar("scr_expDeathMayMoveCheck","on"); + maps\_names::setup_names(); + anim.var_1C4B = 0; + animscripts/init_move_transitions::initmovestartstoptransitions(); + animscripts/reactions::func_B07(); + anim.var_1C4C = 10000; + anim.var_1C4D = 6000; + initgrenades(); + func_1C6A(); + animscripts/utility::func_1C4E("none"); + if(!isdefined(level.optionalstepeffectfunction)) + { + anim.optionalstepeffectsmallfunction = ::animscripts/notetracks::playfootstepeffectsmall; + anim.optionalstepeffectfunction = ::animscripts/notetracks::playfootstepeffect; + } + + if(!isdefined(level.var_1C53)) + { + anim.var_1C53 = []; + } + + if(!isdefined(level.optionalstepeffectssmall)) + { + anim.optionalstepeffectssmall = []; + } + + anim.shootenemywrapper_func = ::animscripts/utility::shootenemywrapper_shootnotify; + level.fire_notetrack_functions["scripted"] = ::animscripts/notetracks::fire_straight; + level.fire_notetrack_functions["cover_right"] = ::animscripts/notetracks::shootnotetrack; + level.fire_notetrack_functions["cover_left"] = ::animscripts/notetracks::shootnotetrack; + level.fire_notetrack_functions["cover_crouch"] = ::animscripts/notetracks::shootnotetrack; + level.fire_notetrack_functions["cover_stand"] = ::animscripts/notetracks::shootnotetrack; + level.fire_notetrack_functions["move"] = ::animscripts/notetracks::shootnotetrack; + animscripts/notetracks::registernotetracks(); + if(!isdefined(level.flag)) + { + common_scripts\utility::init_flags(); + } + + maps\_gameskill::setskill(); + level.painai = undefined; + animscripts/setposemovement::initposemovementfunctions(); + animscripts/face::initlevelface(); + anim.burstfirenumshots = animscripts/utility::array(1,2,2,2,3,3,3,3,4,4,5); + anim.var_1C5D = animscripts/utility::array(2,3,3,3,4,4,4,5,5); + anim.var_1C5E = animscripts/utility::array(1,2,2,3,3,4,4,4,4,5,5,5); + anim.badplaces = []; + anim.var_1C5F = 0; + anim.player = getentarray("player","classname")[0]; + initbattlechatter(); + func_1C45(); + animscripts/flashed::initflashed(); + animscripts/cqb::func_C65(); + func_1C63(); + setglobalaimsettings(); + anim.lastcarexplosiontime = -100000; + func_1C77(); + level.player thread animscripts/combat_utility::watchreloading(); + thread aiturnnotifies(); +} + +//Function Number: 16 +initdeveloperdvars() +{ +} + +//Function Number: 17 +initbattlechatter() +{ + animscripts/squadmanager::func_676(); + level.player thread animscripts/squadmanager::addplayertosquad(); + animscripts/battlechatter::init_battlechatter(); + level.player thread animscripts/battlechatter_ai::addtosystem(); + anim thread animscripts/battlechatter::bcsdebugwaiter(); +} + +//Function Number: 18 +func_1C63() +{ + anim.numdeathsuntilcrawlingpain = randomintrange(0,15); + anim.numdeathsuntilcornergrenadedeath = randomintrange(0,10); + anim.nextcrawlingpaintime = gettime() + randomintrange(0,20000); + anim.nextcrawlingpaintimefromlegdamage = gettime() + randomintrange(0,10000); + anim.nextcornergrenadedeathtime = gettime() + randomintrange(0,15000); +} + +//Function Number: 19 +initgrenades() +{ + for(var_00 = 0;var_00 < level.players.size;var_00++) + { + var_01 = level.players[var_00]; + var_01.grenadetimers["fraggrenade"] = randomintrange(1000,20000); + var_01.grenadetimers["flash_grenade"] = randomintrange(1000,20000); + var_01.grenadetimers["double_grenade"] = randomintrange(1000,-5536); + var_01.var_1C66 = 0; + var_01.lastgrenadelandednearplayertime = -1000000; + var_01.lastfraggrenadetoplayerstart = -1000000; + var_01 thread setnextplayergrenadetime(); + } + + level.grenadetimers["AI_fraggrenade"] = randomintrange(0,20000); + level.grenadetimers["AI_flash_grenade"] = randomintrange(0,20000); + level.grenadetimers["AI_smoke_grenade_american"] = randomintrange(0,20000); + animscripts/combat_utility::initgrenadethrowanims(); +} + +//Function Number: 20 +func_1C6A() +{ + level.var_1C6B = []; + level.var_1C6B["axis"] = 0; + level.var_1C6B["allies"] = 0; + level.var_1C6B["team3"] = 0; + level.var_1C6B["neutral"] = 0; + level.var_1C6C = []; + level.var_1C6C["axis"] = (0,0,0); + level.var_1C6C["allies"] = (0,0,0); + level.var_1C6C["team3"] = (0,0,0); + level.var_1C6C["neutral"] = (0,0,0); + level.lastadvancetoenemysrc = []; + level.lastadvancetoenemysrc["axis"] = (0,0,0); + level.lastadvancetoenemysrc["allies"] = (0,0,0); + level.lastadvancetoenemysrc["team3"] = (0,0,0); + level.lastadvancetoenemysrc["neutral"] = (0,0,0); + level.lastadvancetoenemyattacker = []; + level.var_1C6F = []; + level.var_1C6F["axis"] = 0; + level.var_1C6F["allies"] = 0; + level.var_1C6F["team3"] = 0; + level.var_1C6F["neutral"] = 0; + level.advancetoenemyinterval = 30000; + level.advancetoenemygroupmax = 3; +} + +//Function Number: 21 +aiturnnotifies() +{ + var_00 = 0; + var_01 = 3; + for(;;) + { + var_02 = getaiarray(); + if(var_02.size == 0) + { + wait 0.05; + var_00 = 0; + continue; + } + + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + if(!isdefined(var_02[var_03])) + { + continue; + } + + var_02[var_03] notify("do_slow_things"); + var_00++; + if(var_00 == var_01) + { + wait 0.05; + var_00 = 0; + } + } + } +} + +//Function Number: 22 +setnextplayergrenadetime() +{ + waittillframeend; + if(isdefined(self.var_1C74.var_1C75)) + { + var_00 = int(self.var_1C74.var_1C75 * 0.7); + if(var_00 < 1) + { + var_00 = 1; + } + + self.grenadetimers["fraggrenade"] = randomintrange(0,var_00); + self.grenadetimers["flash_grenade"] = randomintrange(0,var_00); + } + + if(isdefined(self.var_1C74.var_1C76)) + { + var_00 = int(self.var_1C74.var_1C76); + var_01 = int(var_00 / 2); + if(var_00 <= var_01) + { + var_00 = var_01 + 1; + } + + self.grenadetimers["double_grenade"] = randomintrange(var_01,var_00); + } +} + +//Function Number: 23 +func_17A7() +{ + self endon("death"); + for(;;) + { + self waittill("grenade_fire",var_00,var_01); + var_00 thread maps\_utility::grenade_earthquake(); + } +} + +//Function Number: 24 +func_1C77() +{ + anim.randominttablesize = 60; + anim.randominttable = []; + for(var_00 = 0;var_00 < level.randominttablesize;var_00++) + { + level.randominttable[var_00] = var_00; + } + + for(var_00 = 0;var_00 < level.randominttablesize;var_00++) + { + var_01 = randomint(level.randominttablesize); + var_02 = level.randominttable[var_00]; + level.randominttable[var_00] = level.randominttable[var_01]; + level.randominttable[var_01] = var_02; + } +} + +//Function Number: 25 +ondeath() +{ + if(isdefined(level.var_1C7B)) + { + return; + } + + self waittill("death"); + if(!isdefined(self)) + { + if(isdefined(self.a.usingturret)) + { + self.a.usingturret delete(); + } + } +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/init_move_transitions.gsc b/MW3/Xbox/SP/animscripts/init_move_transitions.gsc new file mode 100644 index 0000000..808c662 --- /dev/null +++ b/MW3/Xbox/SP/animscripts/init_move_transitions.gsc @@ -0,0 +1,613 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\init_move_transitions.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 5 + * Decompile Time: 112 ms + * Timestamp: 10/27/2023 2:30:27 AM +*******************************************************************/ + +//Function Number: 1 +init_move_transition_arrays() +{ + if(isdefined(level.var_1C05)) + { + return; + } + + anim.var_1C05 = 1; + if(!isdefined(level.covertrans)) + { + anim.covertrans = []; + } + + if(!isdefined(level.coverexit)) + { + anim.coverexit = []; + } + + anim.maxdirections = []; + anim.excludedir = []; + anim.var_1C06 = []; + if(!isdefined(level.covertranslongestdist)) + { + anim.covertranslongestdist = []; + } + + if(!isdefined(level.covertransdist)) + { + anim.covertransdist = []; + } + + if(!isdefined(level.coverexitdist)) + { + anim.coverexitdist = []; + } + + anim.var_D98 = []; + anim.var_D9B = []; + if(!isdefined(level.var_D72)) + { + anim.var_D72 = []; + } + + if(!isdefined(level.coverexitangles)) + { + anim.coverexitangles = []; + } + + anim.var_1C07 = []; + anim.covertranssplit = []; + anim.arrivalendstance = []; +} + +//Function Number: 2 +initmovestartstoptransitions() +{ + init_move_transition_arrays(); + level.newarrivals = 1; + var_00 = []; + var_01 = 6; + anim.approach_types = []; + level.approach_types["Cover Left"] = []; + level.approach_types["Cover Left"]["stand"] = "left"; + level.approach_types["Cover Left"]["crouch"] = "left_crouch"; + level.maxdirections["Cover Left"] = 9; + level.excludedir["Cover Left"] = 9; + level.approach_types["Cover Right"] = []; + level.approach_types["Cover Right"]["stand"] = "right"; + level.approach_types["Cover Right"]["crouch"] = "right_crouch"; + level.maxdirections["Cover Right"] = 9; + level.excludedir["Cover Right"] = 7; + level.approach_types["Cover Crouch"] = []; + level.approach_types["Cover Crouch"]["stand"] = "crouch"; + level.approach_types["Cover Crouch"]["crouch"] = "crouch"; + level.approach_types["Conceal Crouch"] = level.approach_types["Cover Crouch"]; + level.approach_types["Cover Crouch Window"] = level.approach_types["Cover Crouch"]; + level.maxdirections["Cover Crouch"] = 6; + level.excludedir["Cover Crouch"] = -1; + level.maxdirections["Conceal Crouch"] = 6; + level.excludedir["Conceal Crouch"] = -1; + level.approach_types["Cover Stand"] = []; + level.approach_types["Cover Stand"]["stand"] = "stand"; + level.approach_types["Cover Stand"]["crouch"] = "stand"; + level.approach_types["Conceal Stand"] = level.approach_types["Cover Stand"]; + level.maxdirections["Cover Stand"] = 6; + level.excludedir["Cover Stand"] = -1; + level.maxdirections["Conceal Stand"] = 6; + level.excludedir["Conceal Stand"] = -1; + level.approach_types["Cover Prone"] = []; + level.approach_types["Cover Prone"]["stand"] = "exposed"; + level.approach_types["Cover Prone"]["crouch"] = "exposed"; + level.approach_types["Conceal Prone"] = level.approach_types["Cover Prone"]; + level.excludedir["Conceal Prone"] = -1; + level.approach_types["Path"] = []; + level.approach_types["Path"]["stand"] = "exposed"; + level.approach_types["Path"]["crouch"] = "exposed_crouch"; + level.approach_types["Guard"] = level.approach_types["Path"]; + level.approach_types["Ambush"] = level.approach_types["Path"]; + level.approach_types["Scripted"] = level.approach_types["Path"]; + level.approach_types["Exposed"] = level.approach_types["Path"]; + level.iscombatpathnode["Guard"] = 1; + level.iscombatpathnode["Ambush"] = 1; + level.iscombatpathnode["Exposed"] = 1; + level.iscombatscriptnode["Guard"] = 1; + level.iscombatscriptnode["Exposed"] = 1; + level.covertrans["right"][1] = %corner_standr_trans_in_1; + level.covertrans["right"][2] = %corner_standr_trans_in_2; + level.covertrans["right"][3] = %corner_standr_trans_in_3; + level.covertrans["right"][4] = %corner_standr_trans_in_4; + level.covertrans["right"][6] = %corner_standr_trans_in_6; + level.covertrans["right"][8] = %corner_standr_trans_in_8; + level.covertrans["right"][9] = %corner_standr_trans_in_9; + level.covertrans["right_crouch"][1] = %cornercrr_trans_in_ml; + level.covertrans["right_crouch"][2] = %cornercrr_trans_in_m; + level.covertrans["right_crouch"][3] = %cornercrr_trans_in_mr; + level.covertrans["right_crouch"][4] = %cornercrr_trans_in_l; + level.covertrans["right_crouch"][6] = %cornercrr_trans_in_r; + level.covertrans["right_crouch"][8] = %cornercrr_trans_in_f; + level.covertrans["right_crouch"][9] = %cornercrr_trans_in_mf; + level.covertrans["right_cqb"][1] = %corner_standr_trans_cqb_in_1; + level.covertrans["right_cqb"][2] = %corner_standr_trans_cqb_in_2; + level.covertrans["right_cqb"][3] = %corner_standr_trans_cqb_in_3; + level.covertrans["right_cqb"][4] = %corner_standr_trans_cqb_in_4; + level.covertrans["right_cqb"][6] = %corner_standr_trans_cqb_in_6; + level.covertrans["right_cqb"][8] = %corner_standr_trans_cqb_in_8; + level.covertrans["right_cqb"][9] = %corner_standr_trans_cqb_in_9; + level.covertrans["right_crouch_cqb"][1] = %cornercrr_cqb_trans_in_1; + level.covertrans["right_crouch_cqb"][2] = %cornercrr_cqb_trans_in_2; + level.covertrans["right_crouch_cqb"][3] = %cornercrr_cqb_trans_in_3; + level.covertrans["right_crouch_cqb"][4] = %cornercrr_cqb_trans_in_4; + level.covertrans["right_crouch_cqb"][6] = %cornercrr_cqb_trans_in_6; + level.covertrans["right_crouch_cqb"][8] = %cornercrr_cqb_trans_in_8; + level.covertrans["right_crouch_cqb"][9] = %cornercrr_cqb_trans_in_9; + level.covertrans["left"][1] = %corner_standl_trans_in_1; + level.covertrans["left"][2] = %corner_standl_trans_in_2; + level.covertrans["left"][3] = %corner_standl_trans_in_3; + level.covertrans["left"][4] = %corner_standl_trans_in_4; + level.covertrans["left"][6] = %corner_standl_trans_in_6; + level.covertrans["left"][7] = %corner_standl_trans_in_7; + level.covertrans["left"][8] = %corner_standl_trans_in_8; + level.covertrans["left_crouch"][1] = %cornercrl_trans_in_ml; + level.covertrans["left_crouch"][2] = %cornercrl_trans_in_m; + level.covertrans["left_crouch"][3] = %cornercrl_trans_in_mr; + level.covertrans["left_crouch"][4] = %cornercrl_trans_in_l; + level.covertrans["left_crouch"][6] = %cornercrl_trans_in_r; + level.covertrans["left_crouch"][7] = %cornercrl_trans_in_mf; + level.covertrans["left_crouch"][8] = %cornercrl_trans_in_f; + level.covertrans["left_cqb"][1] = %corner_standl_trans_cqb_in_1; + level.covertrans["left_cqb"][2] = %corner_standl_trans_cqb_in_2; + level.covertrans["left_cqb"][3] = %corner_standl_trans_cqb_in_3; + level.covertrans["left_cqb"][4] = %corner_standl_trans_cqb_in_4; + level.covertrans["left_cqb"][6] = %corner_standl_trans_cqb_in_6; + level.covertrans["left_cqb"][7] = %corner_standl_trans_cqb_in_7; + level.covertrans["left_cqb"][8] = %corner_standl_trans_cqb_in_8; + level.covertrans["left_crouch_cqb"][1] = %cornercrl_cqb_trans_in_1; + level.covertrans["left_crouch_cqb"][2] = %cornercrl_cqb_trans_in_2; + level.covertrans["left_crouch_cqb"][3] = %cornercrl_cqb_trans_in_3; + level.covertrans["left_crouch_cqb"][4] = %cornercrl_cqb_trans_in_4; + level.covertrans["left_crouch_cqb"][6] = %cornercrl_cqb_trans_in_6; + level.covertrans["left_crouch_cqb"][7] = %cornercrl_cqb_trans_in_7; + level.covertrans["left_crouch_cqb"][8] = %cornercrl_cqb_trans_in_8; + level.covertrans["crouch"][1] = %covercrouch_run_in_ml; + level.covertrans["crouch"][2] = %covercrouch_run_in_m; + level.covertrans["crouch"][3] = %covercrouch_run_in_mr; + level.covertrans["crouch"][4] = %covercrouch_run_in_l; + level.covertrans["crouch"][6] = %covercrouch_run_in_r; + level.covertrans["stand"][1] = %coverstand_trans_in_ml; + level.covertrans["stand"][2] = %coverstand_trans_in_m; + level.covertrans["stand"][3] = %coverstand_trans_in_mr; + level.covertrans["stand"][4] = %coverstand_trans_in_l; + level.covertrans["stand"][6] = %coverstand_trans_in_r; + level.covertrans["stand_saw"][1] = %saw_gunner_runin_ml; + level.covertrans["stand_saw"][2] = %saw_gunner_runin_m; + level.covertrans["stand_saw"][3] = %saw_gunner_runin_mr; + level.covertrans["stand_saw"][4] = %saw_gunner_runin_l; + level.covertrans["stand_saw"][6] = %saw_gunner_runin_r; + level.covertrans["crouch_saw"][1] = %saw_gunner_lowwall_runin_ml; + level.covertrans["crouch_saw"][2] = %saw_gunner_lowwall_runin_m; + level.covertrans["crouch_saw"][3] = %saw_gunner_lowwall_runin_mr; + level.covertrans["crouch_saw"][4] = %saw_gunner_lowwall_runin_l; + level.covertrans["crouch_saw"][6] = %saw_gunner_lowwall_runin_r; + level.covertrans["prone_saw"][1] = %saw_gunner_prone_runin_ml; + level.covertrans["prone_saw"][2] = %saw_gunner_prone_runin_m; + level.covertrans["prone_saw"][3] = %saw_gunner_prone_runin_mr; + level.covertrans["exposed"] = []; + level.covertrans["exposed"][1] = %cqb_stop_1; + level.covertrans["exposed"][2] = %run_2_stand_f_6; + level.covertrans["exposed"][3] = %cqb_stop_3; + level.covertrans["exposed"][4] = %run_2_stand_90l; + level.covertrans["exposed"][6] = %run_2_stand_90r; + level.covertrans["exposed"][7] = %cqb_stop_7; + level.covertrans["exposed"][8] = %run_2_stand_180l; + level.covertrans["exposed"][9] = %cqb_stop_9; + level.covertrans["exposed_crouch"] = []; + level.covertrans["exposed_crouch"][1] = %cqb_crouch_stop_1; + level.covertrans["exposed_crouch"][2] = %run_2_crouch_f; + level.covertrans["exposed_crouch"][3] = %cqb_crouch_stop_3; + level.covertrans["exposed_crouch"][4] = %run_2_crouch_90l; + level.covertrans["exposed_crouch"][6] = %run_2_crouch_90r; + level.covertrans["exposed_crouch"][7] = %cqb_crouch_stop_7; + level.covertrans["exposed_crouch"][8] = %run_2_crouch_180l; + level.covertrans["exposed_crouch"][9] = %cqb_crouch_stop_9; + level.covertrans["exposed_cqb"] = []; + level.covertrans["exposed_cqb"][1] = %cqb_stop_1; + level.covertrans["exposed_cqb"][2] = %cqb_stop_2; + level.covertrans["exposed_cqb"][3] = %cqb_stop_3; + level.covertrans["exposed_cqb"][4] = %cqb_stop_4; + level.covertrans["exposed_cqb"][6] = %cqb_stop_6; + level.covertrans["exposed_cqb"][7] = %cqb_stop_7; + level.covertrans["exposed_cqb"][8] = %cqb_stop_8; + level.covertrans["exposed_cqb"][9] = %cqb_stop_9; + level.covertrans["exposed_crouch_cqb"] = []; + level.covertrans["exposed_crouch_cqb"][1] = %cqb_crouch_stop_1; + level.covertrans["exposed_crouch_cqb"][2] = %cqb_crouch_stop_2; + level.covertrans["exposed_crouch_cqb"][3] = %cqb_crouch_stop_3; + level.covertrans["exposed_crouch_cqb"][4] = %cqb_crouch_stop_4; + level.covertrans["exposed_crouch_cqb"][6] = %cqb_crouch_stop_6; + level.covertrans["exposed_crouch_cqb"][7] = %cqb_crouch_stop_7; + level.covertrans["exposed_crouch_cqb"][8] = %cqb_crouch_stop_8; + level.covertrans["exposed_crouch_cqb"][9] = %cqb_crouch_stop_9; + level.covertrans["heat"] = []; + level.covertrans["heat"][1] = %heat_approach_1; + level.covertrans["heat"][2] = %heat_approach_2; + level.covertrans["heat"][3] = %heat_approach_3; + level.covertrans["heat"][4] = %heat_approach_4; + level.covertrans["heat"][6] = %heat_approach_6; + level.covertrans["heat"][8] = %heat_approach_8; + level.covertrans["heat_left"] = []; + level.covertrans["heat_right"] = []; + anim.coverstepinanim = []; + level.coverstepinanim["right"] = %corner_standr_trans_b_2_alert; + level.coverstepinanim["right_crouch"] = %cornercrr_trans_b_2_alert; + level.coverstepinanim["left"] = %corner_standl_trans_b_2_alert_v2; + level.coverstepinanim["left_crouch"] = %cornercrl_trans_b_2_alert; + level.coverstepinanim["crouch"] = %covercrouch_aim_2_hide; + level.coverstepinanim["stand"] = %coverstand_aim_2_hide; + anim.coverstepinoffsets = []; + anim.coverstepinangles = []; + for(var_02 = 0;var_02 < var_01;var_02++ = var_41[22]) + { + var_03 = var_41[var_02]; + level.coverstepinoffsets[var_03] = getmovedelta(level.coverstepinanim[var_03],0,1); + level.coverstepinangles[var_03] = getangledelta(level.coverstepinanim[var_03],0,1); + } + + level.coverstepinangles["right"] = level.coverstepinangles["right"] + 90; + level.coverstepinangles["right_crouch"] = level.coverstepinangles["right_crouch"] + 90; + level.coverstepinangles["left"] = level.coverstepinangles["left"] - 90; + level.coverstepinangles["left_crouch"] = level.coverstepinangles["left_crouch"] - 90; + level.covertrans["wall_over_96"][1] = %traverse90_in_ml; + level.covertrans["wall_over_96"][2] = %traverse90_in_m; + level.covertrans["wall_over_96"][3] = %traverse90_in_mr; + level.var_1C06["wall_over_96"]["height"] = 96; + level.covertrans["wall_over_40"][1] = %traverse_window_m_2_run; + level.covertrans["wall_over_40"][2] = %traverse_window_m_2_run; + level.covertrans["wall_over_40"][3] = %traverse_window_m_2_run; + level.coverexit["right"][1] = %corner_standr_trans_out_1; + level.coverexit["right"][2] = %corner_standr_trans_out_2; + level.coverexit["right"][3] = %corner_standr_trans_out_3; + level.coverexit["right"][4] = %corner_standr_trans_out_4; + level.coverexit["right"][6] = %corner_standr_trans_out_6; + level.coverexit["right"][8] = %corner_standr_trans_out_8; + level.coverexit["right"][9] = %corner_standr_trans_out_9; + level.coverexit["right_crouch"][1] = %cornercrr_trans_out_ml; + level.coverexit["right_crouch"][2] = %cornercrr_trans_out_m; + level.coverexit["right_crouch"][3] = %cornercrr_trans_out_mr; + level.coverexit["right_crouch"][4] = %cornercrr_trans_out_l; + level.coverexit["right_crouch"][6] = %cornercrr_trans_out_r; + level.coverexit["right_crouch"][8] = %cornercrr_trans_out_f; + level.coverexit["right_crouch"][9] = %cornercrr_trans_out_mf; + level.coverexit["right_cqb"][1] = %corner_standr_trans_cqb_out_1; + level.coverexit["right_cqb"][2] = %corner_standr_trans_cqb_out_2; + level.coverexit["right_cqb"][3] = %corner_standr_trans_cqb_out_3; + level.coverexit["right_cqb"][4] = %corner_standr_trans_cqb_out_4; + level.coverexit["right_cqb"][6] = %corner_standr_trans_cqb_out_6; + level.coverexit["right_cqb"][8] = %corner_standr_trans_cqb_out_8; + level.coverexit["right_cqb"][9] = %corner_standr_trans_cqb_out_9; + level.coverexit["right_crouch_cqb"][1] = %cornercrr_cqb_trans_out_1; + level.coverexit["right_crouch_cqb"][2] = %cornercrr_cqb_trans_out_2; + level.coverexit["right_crouch_cqb"][3] = %cornercrr_cqb_trans_out_3; + level.coverexit["right_crouch_cqb"][4] = %cornercrr_cqb_trans_out_4; + level.coverexit["right_crouch_cqb"][6] = %cornercrr_cqb_trans_out_6; + level.coverexit["right_crouch_cqb"][8] = %cornercrr_cqb_trans_out_8; + level.coverexit["right_crouch_cqb"][9] = %cornercrr_cqb_trans_out_9; + level.coverexit["left"][1] = %corner_standl_trans_out_1; + level.coverexit["left"][2] = %corner_standl_trans_out_2; + level.coverexit["left"][3] = %corner_standl_trans_out_3; + level.coverexit["left"][4] = %corner_standl_trans_out_4; + level.coverexit["left"][6] = %corner_standl_trans_out_6; + level.coverexit["left"][7] = %corner_standl_trans_out_7; + level.coverexit["left"][8] = %corner_standl_trans_out_8; + level.coverexit["left_crouch"][1] = %cornercrl_trans_out_ml; + level.coverexit["left_crouch"][2] = %cornercrl_trans_out_m; + level.coverexit["left_crouch"][3] = %cornercrl_trans_out_mr; + level.coverexit["left_crouch"][4] = %cornercrl_trans_out_l; + level.coverexit["left_crouch"][6] = %cornercrl_trans_out_r; + level.coverexit["left_crouch"][7] = %cornercrl_trans_out_mf; + level.coverexit["left_crouch"][8] = %cornercrl_trans_out_f; + level.coverexit["left_cqb"][1] = %corner_standl_trans_cqb_out_1; + level.coverexit["left_cqb"][2] = %corner_standl_trans_cqb_out_2; + level.coverexit["left_cqb"][3] = %corner_standl_trans_cqb_out_3; + level.coverexit["left_cqb"][4] = %corner_standl_trans_cqb_out_4; + level.coverexit["left_cqb"][6] = %corner_standl_trans_cqb_out_6; + level.coverexit["left_cqb"][7] = %corner_standl_trans_cqb_out_7; + level.coverexit["left_cqb"][8] = %corner_standl_trans_cqb_out_8; + level.coverexit["left_crouch_cqb"][1] = %cornercrl_cqb_trans_out_1; + level.coverexit["left_crouch_cqb"][2] = %cornercrl_cqb_trans_out_2; + level.coverexit["left_crouch_cqb"][3] = %cornercrl_cqb_trans_out_3; + level.coverexit["left_crouch_cqb"][4] = %cornercrl_cqb_trans_out_4; + level.coverexit["left_crouch_cqb"][6] = %cornercrl_cqb_trans_out_6; + level.coverexit["left_crouch_cqb"][7] = %cornercrl_cqb_trans_out_7; + level.coverexit["left_crouch_cqb"][8] = %cornercrl_cqb_trans_out_8; + level.coverexit["crouch"][1] = %covercrouch_run_out_ml; + level.coverexit["crouch"][2] = %covercrouch_run_out_m; + level.coverexit["crouch"][3] = %covercrouch_run_out_mr; + level.coverexit["crouch"][4] = %covercrouch_run_out_l; + level.coverexit["crouch"][6] = %covercrouch_run_out_r; + level.coverexit["stand"][1] = %coverstand_trans_out_ml; + level.coverexit["stand"][2] = %coverstand_trans_out_m; + level.coverexit["stand"][3] = %coverstand_trans_out_mr; + level.coverexit["stand"][4] = %coverstand_trans_out_l; + level.coverexit["stand"][6] = %coverstand_trans_out_r; + level.coverexit["stand_saw"][1] = %saw_gunner_runout_ml; + level.coverexit["stand_saw"][2] = %saw_gunner_runout_m; + level.coverexit["stand_saw"][3] = %saw_gunner_runout_mr; + level.coverexit["stand_saw"][4] = %saw_gunner_runout_l; + level.coverexit["stand_saw"][6] = %saw_gunner_runout_r; + level.coverexit["prone_saw"][2] = %saw_gunner_prone_runout_m; + level.coverexit["prone_saw"][4] = %saw_gunner_prone_runout_l; + level.coverexit["prone_saw"][6] = %saw_gunner_prone_runout_r; + level.coverexit["prone_saw"][8] = %saw_gunner_prone_runout_f; + level.coverexit["crouch_saw"][1] = %saw_gunner_lowwall_runout_ml; + level.coverexit["crouch_saw"][2] = %saw_gunner_lowwall_runout_m; + level.coverexit["crouch_saw"][3] = %saw_gunner_lowwall_runout_mr; + level.coverexit["crouch_saw"][4] = %saw_gunner_lowwall_runout_l; + level.coverexit["crouch_saw"][6] = %saw_gunner_lowwall_runout_r; + level.coverexit["exposed"] = []; + level.coverexit["exposed"][1] = %cqb_start_1; + level.coverexit["exposed"][2] = %stand_2_run_180l; + level.coverexit["exposed"][3] = %cqb_start_3; + level.coverexit["exposed"][4] = %stand_2_run_l; + level.coverexit["exposed"][6] = %stand_2_run_r; + level.coverexit["exposed"][7] = %cqb_start_7; + level.coverexit["exposed"][8] = %surprise_start_v1; + level.coverexit["exposed"][9] = %cqb_start_9; + level.coverexit["exposed_crouch"] = []; + level.coverexit["exposed_crouch"][1] = %cqb_crouch_start_1; + level.coverexit["exposed_crouch"][2] = %crouch_2run_180; + level.coverexit["exposed_crouch"][3] = %cqb_crouch_start_3; + level.coverexit["exposed_crouch"][4] = %crouch_2run_l; + level.coverexit["exposed_crouch"][6] = %crouch_2run_r; + level.coverexit["exposed_crouch"][7] = %cqb_crouch_start_7; + level.coverexit["exposed_crouch"][8] = %crouch_2run_f; + level.coverexit["exposed_crouch"][9] = %cqb_crouch_start_9; + level.coverexit["exposed_cqb"] = []; + level.coverexit["exposed_cqb"][1] = %cqb_start_1; + level.coverexit["exposed_cqb"][2] = %cqb_start_2; + level.coverexit["exposed_cqb"][3] = %cqb_start_3; + level.coverexit["exposed_cqb"][4] = %cqb_start_4; + level.coverexit["exposed_cqb"][6] = %cqb_start_6; + level.coverexit["exposed_cqb"][7] = %cqb_start_7; + level.coverexit["exposed_cqb"][8] = %cqb_start_8; + level.coverexit["exposed_cqb"][9] = %cqb_start_9; + level.coverexit["exposed_crouch_cqb"] = []; + level.coverexit["exposed_crouch_cqb"][1] = %cqb_crouch_start_1; + level.coverexit["exposed_crouch_cqb"][2] = %cqb_crouch_start_2; + level.coverexit["exposed_crouch_cqb"][3] = %cqb_crouch_start_3; + level.coverexit["exposed_crouch_cqb"][4] = %cqb_crouch_start_4; + level.coverexit["exposed_crouch_cqb"][6] = %cqb_crouch_start_6; + level.coverexit["exposed_crouch_cqb"][7] = %cqb_crouch_start_7; + level.coverexit["exposed_crouch_cqb"][8] = %cqb_crouch_start_8; + level.coverexit["exposed_crouch_cqb"][9] = %cqb_crouch_start_9; + level.coverexit["heat"] = []; + level.coverexit["heat"][1] = %heat_exit_1; + level.coverexit["heat"][2] = %heat_exit_2; + level.coverexit["heat"][3] = %heat_exit_3; + level.coverexit["heat"][4] = %heat_exit_4; + level.coverexit["heat"][6] = %heat_exit_6; + level.coverexit["heat"][7] = %heat_exit_7; + level.coverexit["heat"][8] = %heat_exit_8; + level.coverexit["heat"][9] = %heat_exit_9; + level.coverexit["heat_left"] = []; + level.coverexit["heat_left"][1] = %heat_exit_1; + level.coverexit["heat_left"][2] = %heat_exit_2; + level.coverexit["heat_left"][3] = %heat_exit_3; + level.coverexit["heat_left"][4] = %heat_exit_4; + level.coverexit["heat_left"][6] = %heat_exit_6; + level.coverexit["heat_left"][7] = %heat_exit_8l; + level.coverexit["heat_left"][8] = %heat_exit_8l; + level.coverexit["heat_left"][9] = %heat_exit_8r; + level.coverexit["heat_right"] = []; + level.coverexit["heat_right"][1] = %heat_exit_1; + level.coverexit["heat_right"][2] = %heat_exit_2; + level.coverexit["heat_right"][3] = %heat_exit_3; + level.coverexit["heat_right"][4] = %heat_exit_4; + level.coverexit["heat_right"][6] = %heat_exit_6; + level.coverexit["heat_right"][7] = %heat_exit_8l; + level.coverexit["heat_right"][8] = %heat_exit_8r; + level.coverexit["heat_right"][9] = %heat_exit_8r; + for(var_02 = 1;var_02 <= 6;var_02++ = var_41[21]) + { + if(var_02 == 5) + { + continue; + } + + for(var_04 = 0;var_04 < var_41.size;var_04++ = "exposed_ready_cqb") + { + var_03 = var_41[var_04]; + if(isdefined(level.covertrans[var_03]) && isdefined(level.covertrans[var_03][var_02])) + { + level.covertransdist[var_03][var_02] = getmovedelta(level.covertrans[var_03][var_02],0,1); + level.var_D72[var_03][var_02] = getangledelta(level.covertrans[var_03][var_02],0,1); + } + + if(isdefined(level.coverexit[var_03]) && isdefined(level.coverexit[var_03][var_02])) + { + if(animhasnotetrack(level.coverexit[var_03][var_02],"code_move")) + { + var_05 = getnotetracktimes(level.coverexit[var_03][var_02],"code_move")[0]; + } + else + { + var_05 = 1; + } + + level.coverexitdist[var_03][var_02] = getmovedelta(level.coverexit[var_03][var_02],0,var_05); + level.coverexitangles[var_03][var_02] = getangledelta(level.coverexit[var_03][var_02],0,1); + } + } + } + + for(var_04 = 0;var_04 < var_41.size;var_04++ = var_41[20]) + { + var_03 = var_41[var_04]; + level.covertranslongestdist[var_03] = 0; + for(var_02 = 1;var_02 <= 6;var_02++ = "exposed_ready") + { + if(var_02 == 5 || !isdefined(level.covertrans[var_03]) || !isdefined(level.covertrans[var_03][var_02])) + { + continue; + } + + var_06 = lengthsquared(level.covertransdist[var_03][var_02]); + if(level.covertranslongestdist[var_03] < var_06) + { + level.covertranslongestdist[var_03] = var_06; + } + } + + level.covertranslongestdist[var_03] = sqrt(level.covertranslongestdist[var_03]); + } + + level.exposedtransition["exposed"] = 1; + level.exposedtransition["exposed_crouch"] = 1; + level.exposedtransition["exposed_cqb"] = 1; + level.exposedtransition["exposed_crouch_cqb"] = 1; + level.exposedtransition["exposed_ready_cqb"] = 1; + level.exposedtransition["exposed_ready"] = 1; + level.exposedtransition["heat"] = 1; + if(!isdefined(level.longestexposedapproachdist)) + { + anim.longestexposedapproachdist = 0; + } + + foreach(var_03, var_08 in level.exposedtransition) + { + for(var_02 = 7;var_02 <= 9;var_02++ = "heat_right") + { + if(isdefined(level.covertrans[var_03]) && isdefined(level.covertrans[var_03][var_02])) + { + level.covertransdist[var_03][var_02] = getmovedelta(level.covertrans[var_03][var_02],0,1); + level.var_D72[var_03][var_02] = getangledelta(level.covertrans[var_03][var_02],0,1); + } + + if(isdefined(level.coverexit[var_03]) && isdefined(level.coverexit[var_03][var_02])) + { + var_05 = getnotetracktimes(level.coverexit[var_03][var_02],"code_move")[0]; + level.coverexitdist[var_03][var_02] = getmovedelta(level.coverexit[var_03][var_02],0,var_05); + level.coverexitangles[var_03][var_02] = getangledelta(level.coverexit[var_03][var_02],0,1); + } + } + + for(var_02 = 1;var_02 <= 9;var_02++ = var_41[19]) + { + if(!isdefined(level.covertrans[var_03]) || !isdefined(level.covertrans[var_03][var_02])) + { + continue; + } + + var_09 = length(level.covertransdist[var_03][var_02]); + if(var_09 > level.longestexposedapproachdist) + { + anim.longestexposedapproachdist = var_09; + } + } + } + + level.covertranssplit["left"][7] = 0.369369; + level.covertranssplit["left_crouch"][7] = 0.319319; + level.covertranssplit["left_cqb"][7] = 0.451451; + level.covertranssplit["left_crouch_cqb"][7] = 0.246246; + level.var_1C07["left"][7] = 0.547548; + level.var_1C07["left_crouch"][7] = 0.593594; + level.var_1C07["left_cqb"][7] = 0.702703; + level.var_1C07["left_crouch_cqb"][7] = 0.718719; + level.var_1C07["heat_left"][7] = 0.42; + level.covertranssplit["left"][8] = 0.525526; + level.covertranssplit["left_crouch"][8] = 0.428428; + level.covertranssplit["left_cqb"][8] = 0.431431; + level.covertranssplit["left_crouch_cqb"][8] = 0.33033; + level.var_1C07["left"][8] = 0.614615; + level.var_1C07["left_crouch"][8] = 0.451451; + level.var_1C07["left_cqb"][8] = 0.451451; + level.var_1C07["left_crouch_cqb"][8] = 0.603604; + level.var_1C07["heat_left"][8] = 0.42; + level.covertranssplit["right"][8] = 0.458458; + level.covertranssplit["right_crouch"][8] = 0.248248; + level.covertranssplit["right_cqb"][8] = 0.458458; + level.covertranssplit["right_crouch_cqb"][8] = 0.311311; + level.var_1C07["right"][8] = 0.457457; + level.var_1C07["right_crouch"][8] = 0.545546; + level.var_1C07["right_cqb"][8] = 0.540541; + level.var_1C07["right_crouch_cqb"][8] = 0.399399; + level.var_1C07["heat_right"][8] = 0.4; + level.covertranssplit["right"][9] = 0.546547; + level.covertranssplit["right_crouch"][9] = 0.2002; + level.covertranssplit["right_cqb"][9] = 0.546547; + level.covertranssplit["right_crouch_cqb"][9] = 0.232232; + level.var_1C07["right"][9] = 0.483483; + level.var_1C07["right_crouch"][9] = 0.493493; + level.var_1C07["right_cqb"][9] = 0.565566; + level.var_1C07["right_crouch_cqb"][9] = 0.518519; + level.var_1C07["heat_right"][9] = 0.4; + var_0A = []; + var_0B = []; + getsplittimes(7,8,0,var_0A,var_0B); + var_0A = []; + var_0A["right"] = 1; + var_0A["right_crouch"] = 1; + var_0A["right_cqb"] = 1; + var_0A["right_crouch_cqb"] = 1; + var_0B = []; + getsplittimes(8,9,1,var_0A,var_0B); + level.arrivalendstance["left"] = "stand"; + level.arrivalendstance["left_cqb"] = "stand"; + level.arrivalendstance["right"] = "stand"; + level.arrivalendstance["right_cqb"] = "stand"; + level.arrivalendstance["stand"] = "stand"; + level.arrivalendstance["stand_saw"] = "stand"; + level.arrivalendstance["exposed"] = "stand"; + level.arrivalendstance["exposed_cqb"] = "stand"; + level.arrivalendstance["heat"] = "stand"; + level.arrivalendstance["left_crouch"] = "crouch"; + level.arrivalendstance["left_crouch_cqb"] = "crouch"; + level.arrivalendstance["right_crouch"] = "crouch"; + level.arrivalendstance["right_crouch_cqb"] = "crouch"; + level.arrivalendstance["crouch_saw"] = "crouch"; + level.arrivalendstance["crouch"] = "crouch"; + level.arrivalendstance["exposed_crouch"] = "crouch"; + level.arrivalendstance["exposed_crouch_cqb"] = "crouch"; + level.arrivalendstance["prone_saw"] = "prone"; + level.arrivalendstance["exposed_ready"] = "stand"; + level.arrivalendstance["exposed_ready_cqb"] = "stand"; + level.var_D5D["Cover Stand"] = "stand"; + level.var_D5D["Conceal Stand"] = "stand"; + level.var_D5D["Cover Crouch"] = "crouch"; + level.var_D5D["Conceal Crouch"] = "crouch"; +} + +//Function Number: 3 +getsplittimes(param_00,param_01,param_02,param_03,param_04) +{ + for(var_05 = param_00;var_05 <= param_01;var_05++) + { + foreach(var_08, var_07 in param_03) + { + level.var_D9B[var_08][var_05] = getmovedelta(level.covertrans[var_08][var_05],0,gettranssplittime(var_08,var_05)); + level.covertransdist[var_08][var_05] = getmovedelta(level.covertrans[var_08][var_05],0,1) - level.var_D9B[var_08][var_05]; + level.var_D72[var_08][var_05] = getangledelta(level.covertrans[var_08][var_05],0,1); + } + + foreach(var_08, var_07 in param_04) + { + level.coverexitdist[var_08][var_05] = getmovedelta(level.coverexit[var_08][var_05],0,getexitsplittime(var_08,var_05)); + level.var_D98[var_08][var_05] = getmovedelta(level.coverexit[var_08][var_05],0,1) - level.coverexitdist[var_08][var_05]; + level.coverexitangles[var_08][var_05] = getangledelta(level.coverexit[var_08][var_05],0,1); + } + } +} + +//Function Number: 4 +getexitsplittime(param_00,param_01) +{ + return level.var_1C07[param_00][param_01]; +} + +//Function Number: 5 +gettranssplittime(param_00,param_01) +{ + return level.covertranssplit[param_00][param_01]; +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/melee.gsc b/MW3/Xbox/SP/animscripts/melee.gsc new file mode 100644 index 0000000..9bcf97a --- /dev/null +++ b/MW3/Xbox/SP/animscripts/melee.gsc @@ -0,0 +1,1564 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\melee.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 59 + * Decompile Time: 1007 ms + * Timestamp: 10/27/2023 2:30:30 AM +*******************************************************************/ + +//Function Number: 1 +melee_init() +{ + precachemodel("weapon_parabolic_knife"); + level._effect["melee_knife_ai"] = loadfx("impacts/flesh_hit_knife"); +} + +//Function Number: 2 +melee_stealthcheck() +{ + if(!isdefined(self._stealth)) + { + return 0; + } + + if(isdefined(self.ent_flag) && isdefined(self.ent_flag["_stealth_enabled"]) && self.ent_flag["_stealth_enabled"]) + { + if(isdefined(self.ent_flag["_stealth_attack"]) && !self.ent_flag["_stealth_attack"]) + { + return 1; + } + } + + return 0; +} + +//Function Number: 3 +melee_tryexecuting() +{ + if(!isdefined(self.enemy)) + { + return 0; + } + + if(isdefined(self.dontmelee)) + { + return 0; + } + + if(melee_stealthcheck()) + { + return 0; + } + + if(!melee_acquiremutex(self.enemy)) + { + return 0; + } + + melee_resetaction(); + if(!melee_chooseaction()) + { + melee_releasemutex(self.enemy); + return 0; + } + + self animcustom(::melee_mainloop,::melee_endscript); +} + +//Function Number: 4 +melee_resetaction() +{ + self.melee.target = self.enemy; + self.melee.initiated = 0; + self.melee.inprogress = 0; +} + +//Function Number: 5 +melee_chooseaction() +{ + if(!melee_isvalid()) + { + return 0; + } + + self.melee.initiated = 1; + if(melee_aivsai_chooseaction()) + { + self.melee.func = ::melee_aivsai_main; + return 1; + } + + if(func_0C10()) + { + if(isdefined(self.specialmelee_standard)) + { + self.melee.func = self.specialmelee_standard; + } + else + { + self.melee.func = ::melee_standard_main; + } + + return 1; + } + + self.melee.func = undefined; + self.nextmeleechecktime = gettime() + 150; + self.var_BFD = self.melee.target; + return 0; +} + +//Function Number: 6 +melee_updateandvalidatestartpos() +{ + var_00 = 1; + var_01 = distance2d(self.melee.startpos,self.melee.target.origin); + if(var_01 < 32) + { + var_02 = vectornormalize((self.melee.startpos[0] - self.melee.target.origin[0],self.melee.startpos[1] - self.melee.target.origin[1],0)); + self.melee.startpos = self.melee.startpos + var_02 * 32 - var_01; + var_00 = 0; + } + + var_03 = self getdroptofloorposition(self.melee.startpos); + if(!isdefined(var_03)) + { + return 0; + } + + if(abs(self.melee.startpos[2] - var_03[2]) > 51.2) + { + return 0; + } + + if(abs(self.origin[2] - var_03[2]) > 51.2) + { + return 0; + } + + self.melee.startpos = var_03; + if(!self maymovetopoint(self.melee.startpos,1,var_00)) + { + return 0; + } + + if(isdefined(self.melee.starttotargetcornerangles)) + { + var_04 = self.melee.startpos - self.melee.target.origin; + var_05 = anglestoforward(self.melee.starttotargetcornerangles); + var_06 = vectordot(var_05,var_04); + var_07 = self.melee.startpos - var_05 * var_06; + var_08 = self.melee.target.origin - var_07; + var_09 = distance2d(self.melee.target.origin,var_07); + if(var_09 < 32) + { + var_07 = var_07 - var_08 * 32 - var_09 / 32; + } + } + else + { + var_02 = vectornormalize((self.melee.startpos[0] - self.melee.target.origin[0],self.melee.startpos[1] - self.melee.target.origin[1],0)); + var_07 = self.melee.target.origin + var_02 * 32; + } + + if(!self maymovefrompointtopoint(self.melee.startpos,var_07,1,0)) + { + return 0; + } + + if(!self maymovefrompointtopoint(var_07,self.melee.target.origin,1,1)) + { + return 0; + } + + return 1; +} + +//Function Number: 7 +melee_isvalid() +{ + if(!isdefined(self.melee.target)) + { + return 0; + } + + var_00 = self.melee.target; + if(isdefined(var_00.dontmelee)) + { + return 0; + } + + var_01 = distancesquared(self.origin,var_00.origin); + if(isdefined(self.meleechargedistsq)) + { + var_02 = self.meleechargedistsq; + } + else if(isplayer(var_01)) + { + var_02 = -25536; + } + else + { + var_02 = 25600; + } + + if(!self.melee.initiated && var_01 > var_02) + { + return 0; + } + + if(!isalive(self)) + { + return 0; + } + + if(isdefined(self.a.nofirstframemelee) && self.a.scriptstarttime >= gettime() + 50) + { + return 0; + } + + if(isdefined(self.nextmeleechecktime) && isdefined(self.var_BFD) && gettime() < self.nextmeleechecktime && self.var_BFD == var_00) + { + return 0; + } + + if(isdefined(self.a.onback) || self.a.var_911 == "prone") + { + return 0; + } + + if(animscripts/utility::usingsidearm()) + { + return 0; + } + + if(isdefined(self.grenade) && self.frontshieldanglecos == 1) + { + return 0; + } + + if(!isalive(var_00)) + { + return 0; + } + + if(isdefined(var_00.dontattackme) || isdefined(var_00.ignoreme) && var_00.ignoreme) + { + return 0; + } + + if(!isai(var_00) && !isplayer(var_00)) + { + return 0; + } + + if(isai(var_00)) + { + if(var_00 isinscriptedstate()) + { + return 0; + } + + if(var_00 maps\_utility::doinglongdeath() || var_00.delayeddeath) + { + return 0; + } + } + + if(isplayer(var_00)) + { + var_03 = var_00 getstance(); + } + else + { + var_03 = var_01.a.var_911; + } + + if(var_03 != "stand" && var_03 != "crouch") + { + return 0; + } + + if(isdefined(self.magic_bullet_shield) && isdefined(var_00.magic_bullet_shield)) + { + return 0; + } + + if(isdefined(var_00.grenade)) + { + return 0; + } + + if(self.melee.inprogress) + { + var_04 = 110; + } + else + { + var_04 = 60; + } + + var_05 = angleclamp180(self.angles[1] - animscripts/utility::func_C05(var_00.origin)); + if(abs(var_05) > var_04) + { + return 0; + } + + if(var_01 <= 4096) + { + return 1; + } + + if(self.melee.inprogress) + { + return 0; + } + + if(isdefined(self.nextmeleechargetime) && isdefined(self.nextmeleechargetarget) && gettime() < self.nextmeleechargetime && self.nextmeleechargetarget == var_00) + { + return 0; + } + + return 1; +} + +//Function Number: 8 +melee_startmovement() +{ + self.melee.playingmovementanim = 1; + self.a.movement = "run"; +} + +//Function Number: 9 +melee_stopmovement() +{ + self clearanim(%body,0.2); + self.melee.playingmovementanim = undefined; + self.a.movement = "stop"; + self orientmode("face default"); +} + +//Function Number: 10 +melee_mainloop() +{ + self endon("killanimscript"); + self endon("end_melee"); + for(;;) + { + var_00 = self.melee.func; + [[ self.melee.func ]](); + if(!isdefined(self.melee.func) || var_00 == self.melee.func) + { + break; + } + } +} + +//Function Number: 11 +melee_standard_delaystandardcharge(param_00) +{ + if(!isdefined(param_00)) + { + return; + } + + self.nextmeleestandardchargetime = gettime() + 2500; + self.nextmeleestandardchargetarget = param_00; +} + +//Function Number: 12 +melee_standard_checktimeconstraints() +{ + var_00 = distancesquared(self.melee.target.origin,self.origin); + if(var_00 > 4096 && isdefined(self.nextmeleestandardchargetime) && isdefined(self.nextmeleestandardchargetarget) && gettime() < self.nextmeleestandardchargetime && self.nextmeleestandardchargetarget == self.melee.target) + { + return 0; + } + + return 1; +} + +//Function Number: 13 +func_0C10() +{ + if(isdefined(self.melee.target.magic_bullet_shield)) + { + return 0; + } + + if(!melee_standard_checktimeconstraints()) + { + return 0; + } + + if(isdefined(self.melee.target.specialmeleechooseaction)) + { + return 0; + } + + return func_0C16(); +} + +//Function Number: 14 +melee_standard_resetgiveuptime() +{ + if(isdefined(self.meleechargedistsq)) + { + var_00 = self.meleechargedistsq; + } + else if(isplayer(self.melee.target)) + { + var_00 = -25536; + } + else + { + var_00 = 25600; + } + + if(distancesquared(self.origin,self.melee.target.origin) > var_00) + { + self.melee.giveuptime = gettime() + 3000; + return; + } + + self.melee.giveuptime = gettime() + 1000; +} + +//Function Number: 15 +melee_standard_main() +{ + self animmode("zonly_physics"); + if(isdefined(self.melee.target)) + { + melee_standard_resetgiveuptime(); + } + + while(isdefined(self.melee.target)) + { + if(!melee_standard_getinposition()) + { + self.nextmeleechargetime = gettime() + 1500; + self.nextmeleechargetarget = self.melee.target; + break; + } + + if(!isdefined(self.melee.target)) + { + break; + } + + animscripts/battlechatter_ai::evaluatemeleeevent(); + self orientmode("face point",self.melee.target.origin); + self setflaggedanimknoballrestart("meleeanim",%melee_1,%body,1,0.2,1); + self.melee.inprogress = 1; + if(!melee_standard_playattackloop()) + { + melee_standard_delaystandardcharge(self.melee.target); + break; + } + } + + self animmode("none"); +} + +//Function Number: 16 +melee_standard_playattackloop() +{ + for(;;) + { + self waittill("meleeanim",var_00); + if(var_00 == "end") + { + return 1; + } + + if(var_00 == "stop") + { + if(!melee_chooseaction()) + { + return 0; + } + + if(self.melee.func != ::melee_standard_main) + { + return 1; + } + } + + if(var_00 == "fire") + { + if(isdefined(self.melee.target)) + { + var_01 = self.melee.target.health; + self melee(); + if(isdefined(self.melee.target) && self.melee.target.health < var_01) + { + melee_standard_resetgiveuptime(); + } + } + } + } +} + +//Function Number: 17 +func_0C16() +{ + if(!isdefined(self.melee.target)) + { + return 0; + } + + if(!melee_isvalid()) + { + return 0; + } + + var_00 = vectornormalize(self.melee.target.origin - self.origin); + self.melee.startpos = self.melee.target.origin - 40 * var_00; + return melee_updateandvalidatestartpos(); +} + +//Function Number: 18 +distance2dsquared(param_00,param_01) +{ + var_02 = (param_00[0] - param_01[0],param_00[1] - param_01[1],0); + return lengthsquared(var_02); +} + +//Function Number: 19 +melee_standard_getinposition() +{ + if(!func_0C16()) + { + return 0; + } + + var_00 = distance2dsquared(self.origin,self.melee.target.origin); + if(var_00 <= 4096) + { + self setflaggedanimknoball("readyanim",%stand_2_melee_1,%body,1,0.3,1); + animscripts/shared::donotetracks("readyanim"); + return 1; + } + + melee_playchargesound(); + var_01 = self.melee.target.origin; + var_02 = 0.1; + var_03 = length(getmovedelta(%run_2_melee_charge,0,1)); + var_04 = 32; + var_05 = 48 + var_04 + var_03; + var_06 = var_05 * var_05; + var_07 = 64 + var_04; + var_08 = var_07 * var_07; + var_09 = getanimlength(%run_2_melee_charge) * 1000; + var_0A = var_09 - 100; + var_0B = var_09 - 200; + var_0C = 0; + var_0D = undefined; + var_0E = %run_lowready_f; + if(isplayer(self.melee.target) && self.melee.target == self.enemy) + { + self orientmode("face enemy"); + } + else + { + self orientmode("face point",self.melee.target.origin); + } + + self setflaggedanimknoball("chargeanim",var_0E,%body,1,0.3,1); + var_0F = 0; + for(;;) + { + var_10 = gettime(); + var_11 = isdefined(var_0D) && var_0D <= var_06; + if(!var_0F) + { + if(var_11) + { + melee_startmovement(); + self setflaggedanimknoballrestart("chargeanim",%run_2_melee_charge,%body,1,0.2,1); + var_0C = var_10; + var_0F = 1; + } + } + else + { + var_12 = var_00 <= var_06; + if(var_10 - var_0C >= var_0A || !var_11 && !var_12) + { + melee_startmovement(); + self setflaggedanimknoball("chargeanim",var_0E,%body,1,0.3,1); + var_0F = 0; + } + } + + animscripts/notetracks::donotetracksfortime(var_02,"chargeanim"); + if(!func_0C16()) + { + melee_stopmovement(); + return 0; + } + + var_00 = distance2dsquared(self.origin,self.melee.target.origin); + var_13 = self.melee.target.origin - var_01 * 1 / gettime() - var_10; + var_01 = self.melee.target.origin; + var_14 = self.melee.target.origin + var_13 * var_0B; + var_0D = distance2dsquared(self.origin,var_14); + if(var_0F && var_00 <= var_08 && gettime() - var_0C >= var_0A || !isplayer(self.melee.target)) + { + break; + } + + if(!var_0F && gettime() >= self.melee.giveuptime) + { + melee_stopmovement(); + return 0; + } + } + + melee_stopmovement(); + return 1; +} + +//Function Number: 20 +melee_playchargesound() +{ + if(!isdefined(self.a.var_C1A)) + { + self.a.var_C1A = 0; + } + + if((isdefined(self.enemy) && isplayer(self.enemy)) || randomint(3) == 0) + { + if(gettime() > self.a.var_C1A) + { + animscripts/face::saygenericdialogue("meleecharge"); + self.a.var_C1A = gettime() + 8000; + } + } +} + +//Function Number: 21 +melee_aivsai_exposed_chooseanimationandposition_flip(param_00) +{ + var_01 = 90; + if(self.melee.inprogress) + { + var_01 = var_01 + 50; + } + + if(abs(param_00) < var_01) + { + return 0; + } + + var_02 = self.melee.target; + func_0C27(); + if(self.melee.winner) + { + self.melee.animname = %melee_f_awin_attack; + var_02.melee.animname = %melee_f_awin_defend; + var_02.melee.surviveanimname = %melee_f_awin_defend_survive; + } + else + { + self.melee.animname = %melee_f_dwin_attack; + var_02.melee.animname = %melee_f_dwin_defend; + } + + return 1; +} + +//Function Number: 22 +melee_aivsai_exposed_chooseanimationandposition_wrestle(param_00) +{ + var_01 = 100; + if(self.melee.inprogress) + { + var_01 = var_01 + 50; + } + + if(abs(param_00) < var_01) + { + return 0; + } + + var_02 = self.melee.target; + if(isdefined(var_02.magic_bullet_shield)) + { + return 0; + } + + if(isdefined(var_02.meleealwayswin)) + { + return 0; + } + + self.melee.winner = 1; + self.melee.animname = %bog_melee_r_attack; + var_02.melee.animname = %bog_melee_r_defend; + var_02.melee.surviveanimname = %bog_melee_r_backdeath2; + return 1; +} + +//Function Number: 23 +melee_aivsai_exposed_chooseanimationandposition_behind(param_00) +{ + if(-90 > param_00 || param_00 > 0) + { + return 0; + } + + var_01 = self.melee.target; + if(isdefined(var_01.magic_bullet_shield)) + { + return 0; + } + + if(isdefined(var_01.meleealwayswin)) + { + return 0; + } + + self.melee.winner = 1; + self.melee.animname = %melee_sync_attack; + var_01.melee.animname = %melee_sync_defend; + return 1; +} + +//Function Number: 24 +melee_aivsai_exposed_chooseanimationandposition_buildexposedlist() +{ + if(isdefined(self.var_C23)) + { + var_00[0] = ::melee_aivsai_exposed_chooseanimationandposition_flip; + } + else if(isdefined(self.meleeforcedexposedwrestle)) + { + var_00[0] = ::melee_aivsai_exposed_chooseanimationandposition_wrestle; + } + else + { + var_01 = randomint(2); + var_02 = 1 - var_01; + var_03 = 2; + var_00[var_01] = ::melee_aivsai_exposed_chooseanimationandposition_flip; + var_00[var_02] = ::melee_aivsai_exposed_chooseanimationandposition_wrestle; + var_00[var_03] = ::melee_aivsai_exposed_chooseanimationandposition_behind; + } + + return var_00; +} + +//Function Number: 25 +melee_aivsai_exposed_chooseanimationandposition() +{ + var_00 = self.melee.target; + var_01 = vectortoangles(var_00.origin - self.origin); + var_02 = angleclamp180(var_00.angles[1] - var_01[1]); + var_03 = melee_aivsai_exposed_chooseanimationandposition_buildexposedlist(); + for(var_04 = 0;var_04 < var_03.size;var_04++) + { + if([[ var_03[var_04] ]](var_02)) + { + self.melee.startangles = (0,var_01[1],0); + self.melee.startpos = getstartorigin(var_00.origin,var_00.angles,self.melee.animname); + if(melee_updateandvalidatestartpos()) + { + return 1; + } + } + } + + return 0; +} + +//Function Number: 26 +func_0C27() +{ + var_00 = self.melee.target; + if(isdefined(self.meleealwayswin)) + { + self.melee.winner = 1; + return; + } + else if(isdefined(var_00.meleealwayswin)) + { + self.melee.winner = 0; + return; + } + + if(isdefined(self.magic_bullet_shield)) + { + self.melee.winner = 1; + return; + } + + if(isdefined(var_00.magic_bullet_shield)) + { + self.melee.winner = 0; + return; + } + + self.melee.winner = common_scripts\utility::cointoss(); +} + +//Function Number: 27 +melee_aivsai_specialcover_chooseanimationandposition() +{ + var_00 = self.melee.target; + func_0C27(); + if(var_00.covernode.type == "Cover Left") + { + if(self.melee.winner) + { + self.melee.animname = %cornersdl_melee_wina_attacker; + var_00.melee.animname = %cornersdl_melee_wina_defender; + var_00.melee.surviveanimname = %cornersdl_melee_wina_defender_survive; + } + else + { + self.melee.animname = %cornersdl_melee_wind_attacker; + self.melee.surviveanimname = %cornersdl_melee_wind_attacker_survive; + var_00.melee.animname = %cornersdl_melee_wind_defender; + } + } + else if(self.melee.winner) + { + self.melee.animname = %cornersdr_melee_wina_attacker; + var_00.melee.animname = %cornersdr_melee_wina_defender; + } + else + { + self.melee.animname = %cornersdr_melee_wind_attacker; + var_00.melee.animname = %cornersdr_melee_wind_defender; + } + + self.melee.startpos = getstartorigin(var_00.covernode.origin,var_00.covernode.angles,self.melee.animname); + self.melee.startangles = (var_00.covernode.angles[0],angleclamp180(var_00.covernode.angles[1] + 180),var_00.covernode.angles[2]); + var_00.melee.faceyaw = animscripts/utility::getnodeforwardyaw(var_00.covernode); + self.melee.starttotargetcornerangles = var_00.covernode.angles; + if(!melee_updateandvalidatestartpos()) + { + self.melee.starttotargetcornerangles = undefined; + return 0; + } + + return 1; +} + +//Function Number: 28 +melee_aivsai_specialcover_canexecute() +{ + var_00 = self.melee.target.covernode; + if(!isdefined(var_00)) + { + return 0; + } + + if(distancesquared(var_00.origin,self.melee.target.origin) > 16 && isdefined(self.melee.target.a.var_8E3) && self.melee.target.a.var_8E3 != "hide" && self.melee.target.a.var_8E3 != "lean") + { + return 0; + } + + var_01 = vectortoangles(self.origin - var_00.origin); + var_02 = angleclamp180(var_00.angles[1] - var_01[1]); + if(var_00.type == "Cover Left") + { + if(var_02 >= -50 && var_02 <= 0) + { + return 1; + } + } + else if(var_00.type == "Cover Right") + { + if(var_02 >= 0 && var_02 <= 50) + { + return 1; + } + } + + return 0; +} + +//Function Number: 29 +melee_aivsai_chooseaction() +{ + var_00 = self.melee.target; + if(!isai(var_00) || var_00.type != "human") + { + return 0; + } + + if(self.stairsstate != "none" || var_00.stairsstate != "none") + { + return 0; + } + + if(isdefined(self.meleealwayswin) && isdefined(var_00.meleealwayswin)) + { + return 0; + } + + if(isdefined(self.magic_bullet_shield) && isdefined(var_00.magic_bullet_shield)) + { + return 0; + } + + if((isdefined(self.meleealwayswin) && isdefined(var_00.magic_bullet_shield)) || isdefined(var_00.meleealwayswin) && isdefined(self.magic_bullet_shield)) + { + return 0; + } + + if(isdefined(self.specialmeleechooseaction)) + { + if(![[ self.specialmeleechooseaction ]]()) + { + return 0; + } + + self.melee.precisepositioning = 1; + } + else if(isdefined(var_00.specialmeleechooseaction)) + { + return 0; + } + else if(melee_aivsai_specialcover_canexecute() && melee_aivsai_specialcover_chooseanimationandposition()) + { + self.melee.precisepositioning = 1; + } + else + { + if(!melee_aivsai_exposed_chooseanimationandposition()) + { + return 0; + } + + self.melee.precisepositioning = 0; + } + + if(!isdefined(var_00.melee.faceyaw)) + { + var_00.melee.faceyaw = var_00.angles[1]; + } + + self.melee.startposoffset = self.melee.startpos - var_00.origin; + return 1; +} + +//Function Number: 30 +melee_aivsai_schedulenotetracklink(param_00) +{ + self.melee.syncnotetrackent = param_00; + param_00.melee.syncnotetrackent = undefined; +} + +//Function Number: 31 +melee_aivsai_targetlink(param_00) +{ + if(!isdefined(param_00.melee)) + { + return; + } + + melee_playchargesound(); + if(!isalive(param_00)) + { + return; + } + + self.syncedmeleetarget = param_00; + param_00.syncedmeleetarget = self; + self.melee.var_C31 = 1; + param_00.melee.var_C31 = 1; + self linktoblendtotag(param_00,"tag_sync",1,1); +} + +//Function Number: 32 +melee_aivsai_main() +{ + if(!melee_aivsai_getinposition()) + { + self.nextmeleechargetime = gettime() + 1500; + self.nextmeleechargetarget = self.melee.target; + return; + } + + var_00 = self.melee.target; + melee_aivsai_schedulenotetracklink(var_00); + if(self.melee.winner) + { + self.melee.death = undefined; + var_00.melee.death = 1; + } + else + { + var_00.melee.death = undefined; + self.melee.death = 1; + } + + self.melee.partner = var_00; + var_00.melee.partner = self; + if(animscripts/utility::usingsidearm()) + { + maps\_utility::forceuseweapon(self.primaryweapon,"primary"); + self.lastweapon = self.primaryweapon; + } + + if(var_00 animscripts/utility::usingsidearm()) + { + var_00 maps\_utility::forceuseweapon(var_00.primaryweapon,"primary"); + var_00.lastweapon = var_00.primaryweapon; + } + + self.melee.weapon = self.weapon; + self.melee.weaponslot = animscripts/utility::getcurrentweaponslotname(); + var_00.melee.weapon = var_00.weapon; + var_00.melee.weaponslot = var_00 animscripts/utility::getcurrentweaponslotname(); + self.melee.inprogress = 1; + var_00 animcustom(::melee_aivsai_execute,::melee_endscript); + var_00 thread melee_aivsai_animcustominterruptionmonitor(self); + self.melee.target = undefined; + melee_aivsai_execute(); +} + +//Function Number: 33 +melee_aivsai_animcustominterruptionmonitor(param_00) +{ + self endon("end_melee"); + self endon("melee_aivsai_execute"); + wait 0.1; + if(isdefined(param_00)) + { + param_00 notify("end_melee"); + } + + self notify("end_melee"); +} + +//Function Number: 34 +melee_aivsai_getinposition_updateandvalidatetarget(param_00,param_01) +{ + if(isdefined(param_01) && param_01 <= gettime()) + { + return 0; + } + + if(!melee_isvalid()) + { + return 0; + } + + var_02 = self.melee.target; + var_03 = distancesquared(var_02.origin,param_00); + if(self.melee.precisepositioning) + { + var_04 = 256; + } + else + { + var_04 = 1296; + } + + if(var_03 > var_04) + { + return 0; + } + + self.melee.startpos = var_02.origin + self.melee.startposoffset; + if(!melee_updateandvalidatestartpos()) + { + return 0; + } + + return 1; +} + +//Function Number: 35 +melee_aivsai_getinposition_issuccessful(param_00) +{ + var_01 = distancesquared((self.origin[0],self.origin[1],0),(self.melee.startpos[0],self.melee.startpos[1],0)); + if(var_01 < 64 && abs(self.melee.startpos[2] - self.origin[2]) < 64) + { + return 1; + } + + var_02 = distancesquared((param_00[0],param_00[1],0),(self.melee.startpos[0],self.melee.startpos[1],0)); + var_03 = distancesquared((self.origin[0],self.origin[1],0),(self.melee.target.origin[0],self.melee.target.origin[1],0)); + if(var_02 > var_03 && abs(self.melee.target.origin[2] - self.origin[2]) < 64) + { + return 1; + } + + return 0; +} + +//Function Number: 36 +melee_aivsai_getinposition_finalize(param_00) +{ + melee_stopmovement(); + if(self.melee.precisepositioning) + { + self forceteleport(self.melee.startpos,self.melee.startangles); + wait 0.05; + } + else + { + self orientmode("face angle",self.melee.startangles[1]); + wait 0.05; + } + + return melee_aivsai_getinposition_updateandvalidatetarget(param_00); +} + +//Function Number: 37 +melee_aivsai_getinposition() +{ + if(!melee_isvalid()) + { + return 0; + } + + melee_startmovement(); + self clearanim(%body,0.2); + self setanimknoball(animscripts/run::getrunanim(),%body,1,0.2); + self animmode("zonly_physics"); + self.keepclaimednode = 1; + var_00 = gettime() + 1500; + var_01 = self.melee.target.origin; + while(melee_aivsai_getinposition_updateandvalidatetarget(var_01,var_00)) + { + if(melee_aivsai_getinposition_issuccessful(var_01)) + { + return melee_aivsai_getinposition_finalize(var_01); + } + + self orientmode("face point",self.melee.startpos); + wait 0.05; + } + + melee_stopmovement(); + return 0; +} + +//Function Number: 38 +melee_aivsai_execute() +{ + self endon("killanimscript"); + self endon("end_melee"); + self notify("melee_aivsai_execute"); + self animmode("zonly_physics"); + self.a.special = "none"; + self.specialdeathfunc = undefined; + thread melee_droppedweaponmonitorthread(); + thread func_0C4A(); + if(isdefined(self.melee.faceyaw)) + { + self orientmode("face angle",self.melee.faceyaw); + } + else + { + self orientmode("face current"); + } + + self.a.var_911 = "stand"; + self clearanim(%body,0.2); + if(isdefined(self.melee.death)) + { + melee_disableinterruptions(); + } + + self setflaggedanimknoballrestart("meleeAnim",self.melee.animname,%body,1,0.2); + var_00 = animscripts/shared::donotetracks("meleeAnim",::melee_handlenotetracks); + if(var_00 == "melee_death" && isdefined(self.melee.survive)) + { + func_0C45(); + self setflaggedanimknoballrestart("meleeAnim",self.melee.surviveanimname,%body,1,0.2); + var_00 = animscripts/shared::donotetracks("meleeAnim",::melee_handlenotetracks); + } + + if(isdefined(self.melee) && isdefined(self.melee.death)) + { + self kill(); + } + + self.keepclaimednode = 0; +} + +//Function Number: 39 +melee_disableinterruptions() +{ + self.melee.wasallowingpain = self.allowpain; + self.melee.wasflashbangimmune = self.flashbangimmunity; + maps\_utility::disable_pain(); + maps\_utility::setflashbangimmunity(1); +} + +//Function Number: 40 +func_0C44() +{ + return isdefined(self.melee.weapon) && self.melee.weapon != "none" && self.weapon != self.melee.weapon; +} + +//Function Number: 41 +func_0C45() +{ + if(self.weapon != "none" && self.lastweapon != "none") + { + return; + } + + if(!isdefined(self.melee.weapon) || self.melee.weapon == "none") + { + return; + } + + maps\_utility::forceuseweapon(self.melee.weapon,self.melee.weaponslot); + if(isdefined(self.melee.var_C46)) + { + self.melee.var_C46 delete(); + self.melee.var_C46 = undefined; + } +} + +//Function Number: 42 +melee_droppedweaponmonitorthread() +{ + self endon("killanimscript"); + self endon("end_melee"); + self waittill("weapon_dropped",var_00); + if(isdefined(var_00)) + { + self.melee.var_C46 = var_00; + } +} + +//Function Number: 43 +melee_partnerendedmeleemonitorthread_shouldanimsurvive() +{ + if(!isdefined(self.melee.surviveanimname)) + { + return 0; + } + + if(!isdefined(self.melee.surviveanimallowed)) + { + return 0; + } + + return 1; +} + +//Function Number: 44 +func_0C4A() +{ + self endon("killanimscript"); + self endon("end_melee"); + self waittill("partner_end_melee"); + if(isdefined(self.melee.death)) + { + if(isdefined(self.melee.animateddeath) || isdefined(self.melee.interruptdeath)) + { + self kill(); + return; + } + + self.melee.death = undefined; + if(melee_partnerendedmeleemonitorthread_shouldanimsurvive()) + { + self.melee.survive = 1; + return; + } + + self notify("end_melee"); + return; + } + + if(!isdefined(self.melee.unsynchappened)) + { + self notify("end_melee"); + } +} + +//Function Number: 45 +melee_unlink() +{ + if(!isdefined(self.melee.var_C31)) + { + return; + } + + if(isdefined(self.syncedmeleetarget)) + { + self.syncedmeleetarget func_0C4F(); + } + + func_0C4F(); +} + +//Function Number: 46 +func_0C4F() +{ + self unlink(); + self.syncedmeleetarget = undefined; + if(!isalive(self)) + { + return; + } + + self.melee.var_C31 = undefined; + self animmode("zonly_physics"); + self orientmode("face angle",self.angles[1]); +} + +//Function Number: 47 +melee_handlenotetracks_unsync() +{ + melee_unlink(); + self.melee.unsynchappened = 1; + if(isdefined(self.melee.partner) && isdefined(self.melee.partner.melee)) + { + self.melee.partner.melee.unsynchappened = 1; + } +} + +//Function Number: 48 +melee_handlenotetracks_shoulddieafterunsync() +{ + if(animhasnotetrack(self.melee.animname,"melee_death")) + { + return 0; + } + + return isdefined(self.melee.death); +} + +//Function Number: 49 +melee_handlenotetracks_death(param_00) +{ + if(isdefined(param_00) && param_00) + { + self.melee.interruptdeath = 1; + return; + } + + self.melee.animateddeath = 1; +} + +//Function Number: 50 +melee_handlenotetracks(param_00) +{ + if(issubstr(param_00,"ps_")) + { + var_01 = getsubstr(param_00,3); + self playsound(var_01); + return; + } + + if(var_01 == "sync") + { + if(isdefined(self.melee.syncnotetrackent)) + { + melee_aivsai_targetlink(self.melee.syncnotetrackent); + self.melee.syncnotetrackent = undefined; + return; + } + + return; + } + + if(var_01 == "unsync") + { + melee_handlenotetracks_unsync(); + if(melee_handlenotetracks_shoulddieafterunsync()) + { + melee_handlenotetracks_death(); + return; + } + + return; + } + + if(var_01 == "melee_interact") + { + self.melee.surviveanimallowed = 1; + return; + } + + if(var_01 == "melee_death") + { + if(isdefined(self.melee.survive)) + { + return var_01; + } + + melee_handlenotetracks_death(); + if(isdefined(self.melee.animateddeath)) + { + return var_01; + } + + return; + } + + if(var_01 == "attach_knife") + { + self attach("weapon_parabolic_knife","TAG_INHAND",1); + self.melee.hasknife = 1; + return; + } + + if(var_01 == "detach_knife") + { + self detach("weapon_parabolic_knife","TAG_INHAND",1); + self.melee.hasknife = undefined; + return; + } + + if(var_01 == "stab") + { + self playsound("melee_knife_hit_body"); + playfxontag(level._effect["melee_knife_ai"],self,"TAG_KNIFE_FX"); + if(isdefined(self.melee.partner) && isdefined(self.melee.partner.melee)) + { + self.melee.partner melee_handlenotetracks_death(1); + return; + } + + return; + } +} + +//Function Number: 51 +func_0C55() +{ + self endon("end_melee"); + animscripts/shared::dropallaiweapons(); + return 0; +} + +//Function Number: 52 +melee_deathhandler_delayed() +{ + self endon("end_melee"); + animscripts/notetracks::func_C57("meleeAnim",10); + animscripts/shared::dropallaiweapons(); + self startragdoll(); + return 1; +} + +//Function Number: 53 +melee_endscript_checkdeath() +{ + if(!isalive(self) && isdefined(self.melee.death)) + { + if(isdefined(self.melee.animateddeath)) + { + self.deathfunction = ::melee_deathhandler_delayed; + return; + } + + self.deathfunction = ::func_0C55; + } +} + +//Function Number: 54 +melee_endscript_checkpositionandmovement() +{ + if(!isalive(self)) + { + return; + } + + if(isdefined(self.melee.playingmovementanim)) + { + melee_stopmovement(); + } + + var_00 = self getdroptofloorposition(); + if(isdefined(var_00)) + { + self forceteleport(var_00,self.angles); + } +} + +//Function Number: 55 +melee_endscript_checkweapon() +{ + if(isdefined(self.melee.hasknife)) + { + self detach("weapon_parabolic_knife","TAG_INHAND",1); + } + + if(isalive(self)) + { + func_0C45(); + } +} + +//Function Number: 56 +melee_endscript_checkstatechanges() +{ + if(isdefined(self.melee.wasallowingpain)) + { + if(self.melee.wasallowingpain) + { + maps\_utility::enable_pain(); + } + else + { + maps\_utility::disable_pain(); + } + } + + if(isdefined(self.melee.wasflashbangimmune)) + { + maps\_utility::setflashbangimmunity(self.melee.wasflashbangimmune); + } +} + +//Function Number: 57 +melee_endscript() +{ + melee_unlink(); + melee_endscript_checkdeath(); + melee_endscript_checkpositionandmovement(); + melee_endscript_checkweapon(); + melee_endscript_checkstatechanges(); + if(isdefined(self.melee.partner)) + { + self.melee.partner notify("partner_end_melee"); + } + + melee_releasemutex(self.melee.target); +} + +//Function Number: 58 +melee_acquiremutex(param_00) +{ + if(isdefined(self.melee)) + { + return 0; + } + + if(isdefined(param_00.melee)) + { + return 0; + } + + self.melee = spawnstruct(); + param_00.melee = spawnstruct(); + return 1; +} + +//Function Number: 59 +melee_releasemutex(param_00) +{ + self.melee = undefined; + if(isdefined(param_00)) + { + param_00.melee = undefined; + } +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/move.gsc b/MW3/Xbox/SP/animscripts/move.gsc new file mode 100644 index 0000000..ff46d4f --- /dev/null +++ b/MW3/Xbox/SP/animscripts/move.gsc @@ -0,0 +1,1110 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\move.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 38 + * Decompile Time: 646 ms + * Timestamp: 10/27/2023 2:30:32 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(isdefined(self.custom_animscript_table)) + { + if(isdefined(self.custom_animscript_table["move"])) + { + [[ self.custom_animscript_table["move"] ]](); + return; + } + } + + self endon("killanimscript"); + [[ self.exception["move"] ]](); + moveinit(); + getupifprone(); + animscripts/utility::initialize("move"); + var_00 = waspreviouslyincover(); + if(var_00 && isdefined(self.shufflemove)) + { + movecovertocover(); + movecovertocoverfinish(); + } + else if(isdefined(self.battlechatter) && self.battlechatter) + { + func_0C9D(var_00); + animscripts/battlechatter::playbattlechatter(); + } + + thread stairscheck(); + thread pathchangecheck(); + thread animdodgeobstacle(); + animscripts/cover_arrival::startmovetransition(); + self.doingreacquirestep = undefined; + self.ignorepathchange = undefined; + thread startthreadstorunwhilemoving(); + thread animscripts/cover_arrival::func_C94(1); + self.shoot_while_moving_thread = undefined; + self.var_BBD = undefined; + self.runngun = undefined; + movemainloop(1); +} + +//Function Number: 2 +end_script() +{ + if(isdefined(self.oldgrenadeweapon)) + { + self.grenadeweapon = self.oldgrenadeweapon; + self.oldgrenadeweapon = undefined; + } + + self.var_C76 = undefined; + self.minindoortime = undefined; + self.ignorepathchange = undefined; + self.shufflemove = undefined; + self.shufflenode = undefined; + self.runngun = undefined; + self.reactingtobullet = undefined; + self.requestreacttobullet = undefined; + self.var_C95 = undefined; + self.moveloopoverridefunc = undefined; +} + +//Function Number: 3 +moveinit() +{ + self.reactingtobullet = undefined; + self.requestreacttobullet = undefined; + self.update_move_anim_type = undefined; + self.var_BE0 = undefined; + self.runngunweight = 0; + self.var_C98 = undefined; +} + +//Function Number: 4 +getupifprone() +{ + if(self.a.var_911 == "prone") + { + var_00 = animscripts/utility::choosepose("stand"); + if(var_00 != "prone") + { + self orientmode("face current"); + self animmode("zonly_physics",0); + var_01 = 1; + if(isdefined(self.grenade)) + { + var_01 = 2; + } + + animscripts/cover_prone::proneto(var_00,var_01); + self animmode("none",0); + self orientmode("face default"); + } + } +} + +//Function Number: 5 +waspreviouslyincover() +{ + switch(self.prevscript) + { + case "concealment_stand": + case "concealment_prone": + case "concealment_crouch": + case "cover_wide_right": + case "cover_wide_left": + case "cover_prone": + case "cover_stand": + case "cover_left": + case "turret": + case "cover_crouch": + case "cover_right": + case "hide": + return 1; + } + + return 0; +} + +//Function Number: 6 +func_0C9D(param_00) +{ + if(self.movemode == "run") + { + animscripts/battlechatter_ai::evaluatemoveevent(param_00); + } +} + +//Function Number: 7 +movemainloop(param_00) +{ + movemainloopinternal(param_00); + self notify("abort_reload"); +} + +//Function Number: 8 +changemovemode(param_00) +{ + if(param_00 != self.prevmovemode) + { + if(isdefined(self.custommoveanimset) && isdefined(self.custommoveanimset[param_00])) + { + self.a.moveanimset = self.custommoveanimset[param_00]; + } + else + { + self.a.moveanimset = level.animsets.move[param_00]; + if((self.combatmode == "ambush" || self.combatmode == "ambush_nodes_only") && isdefined(self.pathgoalpos) && distancesquared(self.origin,self.pathgoalpos) > squared(100)) + { + self.sidesteprate = 1; + animscripts/animset::set_ambush_sidestep_anims(); + } + else + { + self.sidesteprate = 1.35; + } + } + + self.prevmovemode = param_00; + } +} + +//Function Number: 9 +movemainloopinternal(param_00) +{ + self endon("killanimscript"); + self endon("move_interrupt"); + var_01 = self getanimtime(%walk_and_run_loops); + self.a.runloopcount = randomint(10000); + self.prevmovemode = "none"; + self.moveloopcleanupfunc = undefined; + for(;;) + { + var_02 = self getanimtime(%walk_and_run_loops); + if(var_02 < var_01) + { + self.a.runloopcount++; + } + + var_01 = var_02; + changemovemode(self.movemode); + movemainloopprocess(self.movemode); + if(isdefined(self.moveloopcleanupfunc)) + { + self [[ self.moveloopcleanupfunc ]](); + self.moveloopcleanupfunc = undefined; + } + + self notify("abort_reload"); + } +} + +//Function Number: 10 +movemainloopprocess(param_00) +{ + self endon("move_loop_restart"); + animscripts/face::setidlefacedelayed(level.alertface); + if(isdefined(self.moveloopoverridefunc)) + { + self [[ self.moveloopoverridefunc ]](); + } + else if(animscripts/utility::shouldcqb()) + { + animscripts/cqb::func_C60(); + } + else if(param_00 == "run") + { + animscripts/run::moverun(); + } + else + { + animscripts/walk::movewalk(); + } + + self.requestreacttobullet = undefined; +} + +//Function Number: 11 +mayshootwhilemoving() +{ + if(self.weapon == "none") + { + return 0; + } + + var_00 = weaponclass(self.weapon); + if(!animscripts/utility::usingriflelikeweapon()) + { + return 0; + } + + if(animscripts/combat_utility::issniper()) + { + if(!animscripts/utility::iscqbwalking() && self.facemotion) + { + return 0; + } + } + + if(isdefined(self.dontshootwhilemoving)) + { + return 0; + } + + return 1; +} + +//Function Number: 12 +shootwhilemoving() +{ + self endon("killanimscript"); + self notify("doing_shootWhileMoving"); + self endon("doing_shootWhileMoving"); + if(isdefined(self.combatstandanims) && isdefined(self.combatstandanims["fire"])) + { + self.a.array["fire"] = self.combatstandanims["fire"]; + } + else + { + self.a.array["fire"] = %exposed_shoot_auto_v3; + } + + if(isdefined(self.weapon) && animscripts/utility::weapon_pump_action_shotgun()) + { + self.a.array["single"] = animscripts/utility::array(%shotgun_stand_fire_1a,%shotgun_stand_fire_1b); + } + else + { + self.a.array["single"] = animscripts/utility::array(%exposed_shoot_semi1); + } + + self.a.array["burst2"] = %exposed_shoot_burst3; + self.a.array["burst3"] = %exposed_shoot_burst3; + self.a.array["burst4"] = %exposed_shoot_burst4; + self.a.array["burst5"] = %exposed_shoot_burst5; + self.a.array["burst6"] = %exposed_shoot_burst6; + self.a.array["semi2"] = %exposed_shoot_semi2; + self.a.array["semi3"] = %exposed_shoot_semi3; + self.a.array["semi4"] = %exposed_shoot_semi4; + self.a.array["semi5"] = %exposed_shoot_semi5; + for(;;) + { + if(!self.bulletsinclip) + { + if(animscripts/utility::iscqbwalkingorfacingenemy()) + { + self.ammocheattime = 0; + animscripts/combat_utility::cheatammoifnecessary(); + } + + if(!self.bulletsinclip) + { + wait 0.5; + continue; + } + } + + animscripts/combat_utility::shootuntilshootbehaviorchange(); + self clearanim(%exposed_aiming,0.2); + } +} + +//Function Number: 13 +startthreadstorunwhilemoving() +{ + self endon("killanimscript"); + wait 0.05; + thread bulletwhizbycheck_whilemoving(); + thread meleeattackcheck_whilemoving(); + thread animscripts/door::indoorcqbtogglecheck(); + thread animscripts/door::doorenterexitcheck(); +} + +//Function Number: 14 +stairscheck() +{ + self endon("killanimscript"); + self.prevstairsstate = self.stairsstate; + for(;;) + { + wait 0.05; + if(self.prevstairsstate != self.stairsstate) + { + if(!isdefined(self.ignorepathchange) || self.stairsstate != "none") + { + self notify("move_loop_restart"); + } + } + + self.prevstairsstate = self.stairsstate; + } +} + +//Function Number: 15 +restartmoveloop(param_00) +{ + self endon("killanimscript"); + if(!param_00) + { + animscripts/cover_arrival::startmovetransition(); + } + + self.ignorepathchange = undefined; + self clearanim(%root,0.1); + self orientmode("face default"); + self animmode("none",0); + self.requestarrivalnotify = 1; + movemainloop(!param_00); +} + +//Function Number: 16 +pathchangecheck() +{ + self endon("killanimscript"); + self endon("move_interrupt"); + self.ignorepathchange = 1; + for(;;) + { + self waittill("path_changed",var_00,var_01); + if(isdefined(self.ignorepathchange) || isdefined(self.noturnanims)) + { + continue; + } + + if(!self.facemotion || abs(self getmotionangle()) > 15) + { + continue; + } + + if(self.a.movement != "run" && self.a.movement != "walk") + { + continue; + } + + if(self.a.var_911 != "stand") + { + continue; + } + + self notify("stop_move_anim_update"); + self.update_move_anim_type = undefined; + var_02 = angleclamp180(self.angles[1] - vectortoyaw(var_01)); + var_03 = pathchange_getturnanim(var_02); + if(isdefined(var_03)) + { + self.turnanim = var_03; + self.turntime = gettime(); + self.moveloopoverridefunc = ::pathchange_doturnanim; + self notify("move_loop_restart"); + animscripts/run::endfaceenemyaimtracking(); + } + } +} + +//Function Number: 17 +pathchange_getturnanim(param_00) +{ + if(isdefined(self.pathturnanimoverridefunc)) + { + return [[ self.pathturnanimoverridefunc ]](param_00); + } + + var_01 = undefined; + var_02 = undefined; + if(animscripts/utility::shouldcqb() || self.movemode == "walk") + { + var_03 = level.cqbturnanims; + } + else + { + var_03 = level.runturnanims; + } + + if(param_00 < -30) + { + if(param_00 > -60) + { + var_01 = var_03["L45"]; + } + else if(param_00 > -112.5) + { + var_01 = var_03["L90"]; + if(param_00 > -90) + { + var_02 = var_03["L45"]; + } + else + { + var_02 = var_03["L135"]; + } + } + else if(param_00 > -157.5) + { + var_01 = var_03["L135"]; + if(param_00 > -135) + { + var_02 = var_03["L90"]; + } + else + { + var_02 = var_03["180"]; + } + } + else + { + var_01 = var_03["180"]; + var_02 = var_03["L135"]; + } + } + else if(param_00 > 30) + { + if(param_00 < 60) + { + var_01 = var_03["R45"]; + } + else if(param_00 < 112.5) + { + var_01 = var_03["R90"]; + if(param_00 < 90) + { + var_02 = var_03["R45"]; + } + else + { + var_02 = var_03["R135"]; + } + } + else if(param_00 < 157.5) + { + var_01 = var_03["R135"]; + if(param_00 < 135) + { + var_02 = var_03["R90"]; + } + else + { + var_02 = var_03["180"]; + } + } + else + { + var_01 = var_03["180"]; + var_02 = var_03["R135"]; + } + } + + if(isdefined(var_01)) + { + if(pathchange_candoturnanim(var_01)) + { + return var_01; + } + } + + if(isdefined(var_02)) + { + if(pathchange_candoturnanim(var_02)) + { + return var_02; + } + } + + return undefined; +} + +//Function Number: 18 +pathchange_candoturnanim(param_00) +{ + if(!isdefined(self.pathgoalpos)) + { + return 0; + } + + var_01 = getnotetracktimes(param_00,"code_move"); + var_02 = var_01[0]; + var_03 = getmovedelta(param_00,0,var_02); + var_04 = self localtoworldcoords(var_03); + if(isdefined(self.var_C98) && squared(self.var_C98) > distancesquared(self.pathgoalpos,var_04)) + { + return 0; + } + + var_03 = getmovedelta(param_00,0,1); + var_05 = self localtoworldcoords(var_03); + var_05 = var_04 + vectornormalize(var_05 - var_04) * 20; + return self maymovefrompointtopoint(var_04,var_05,1,1); +} + +//Function Number: 19 +pathchange_doturnanim() +{ + self endon("killanimscript"); + self.moveloopoverridefunc = undefined; + var_00 = self.turnanim; + if(gettime() > self.turntime + 50) + { + return; + } + + self animmode("zonly_physics",0); + self clearanim(%body,0.1); + self.moveloopcleanupfunc = ::pathchange_cleanupturnanim; + self.ignorepathchange = 1; + var_01 = 0.05; + if(isdefined(self.pathturnanimblendtime)) + { + var_01 = isdefined(self.pathturnanimblendtime); + } + + self setflaggedanimrestart("turnAnim",var_00,1,var_01,self.moveplaybackrate); + self orientmode("face current"); + animscripts/shared::donotetracks("turnAnim"); + self.ignorepathchange = undefined; + self orientmode("face motion"); + self animmode("none",0); + animscripts/shared::donotetracks("turnAnim"); +} + +//Function Number: 20 +pathchange_domovetransition() +{ + self.moveloopoverridefunc = undefined; + if(gettime() > self.turntime + 50) + { + return; + } + + self.moveloopcleanupfunc = ::pathchange_cleanupturnanim; + animscripts/cover_arrival::startmovetransition(); +} + +//Function Number: 21 +pathchange_cleanupturnanim() +{ + self.ignorepathchange = undefined; + self orientmode("face default"); + self clearanim(%root,0.1); + self animmode("none",0); +} + +//Function Number: 22 +dodgemoveloopoverride() +{ + self pushplayer(1); + self animmode("zonly_physics",0); + self clearanim(%body,0.2); + self setflaggedanimrestart("dodgeAnim",self.var_C95,1,0.2,1); + animscripts/shared::donotetracks("dodgeAnim"); + self animmode("none",0); + self orientmode("face default"); + if(animhasnotetrack(self.var_C95,"code_move")) + { + animscripts/shared::donotetracks("dodgeAnim"); + } + + self clearanim(%civilian_dodge,0.2); + self pushplayer(0); + self.var_C95 = undefined; + self.moveloopoverridefunc = undefined; + return 1; +} + +//Function Number: 23 +trydodgewithanim(param_00,param_01) +{ + var_02 = (self.lookaheaddir[1],-1 * self.lookaheaddir[0],0); + var_03 = self.lookaheaddir * param_01[0]; + var_04 = var_02 * param_01[1]; + var_05 = self.origin + var_03 - var_04; + self pushplayer(1); + if(self maymovetopoint(var_05)) + { + self.var_C95 = param_00; + self.moveloopoverridefunc = ::dodgemoveloopoverride; + self notify("move_loop_restart"); + return 1; + } + + self pushplayer(0); + return 0; +} + +//Function Number: 24 +animdodgeobstacle() +{ + if(!isdefined(self.dodgeleftanim) || !isdefined(self.dodgerightanim)) + { + return; + } + + self endon("killanimscript"); + self endon("move_interrupt"); + for(;;) + { + self waittill("path_need_dodge",var_00,var_01); + if(animscripts/utility::isincombat()) + { + self.nododgemove = 0; + return; + } + + if(!issentient(var_00)) + { + continue; + } + + var_02 = vectornormalize(var_01 - self.origin); + if(self.lookaheaddir[0] * var_02[1] - var_02[0] * self.lookaheaddir[1] > 0) + { + if(!trydodgewithanim(self.dodgerightanim,self.dodgerightanimoffset)) + { + trydodgewithanim(self.dodgeleftanim,self.dodgeleftanimoffset); + } + } + else if(!trydodgewithanim(self.dodgeleftanim,self.dodgeleftanimoffset)) + { + trydodgewithanim(self.dodgerightanim,self.dodgerightanimoffset); + } + + if(isdefined(self.var_C95)) + { + wait getanimlength(self.var_C95); + continue; + } + + wait 0.1; + } +} + +//Function Number: 25 +setdodgeanims(param_00,param_01) +{ + self.nododgemove = 1; + self.dodgeleftanim = param_00; + self.dodgerightanim = param_01; + var_02 = 1; + if(animhasnotetrack(param_00,"code_move")) + { + var_02 = getnotetracktimes(param_00,"code_move")[0]; + } + + self.dodgeleftanimoffset = getmovedelta(param_00,0,var_02); + var_02 = 1; + if(animhasnotetrack(param_01,"code_move")) + { + var_02 = getnotetracktimes(param_01,"code_move")[0]; + } + + self.dodgerightanimoffset = getmovedelta(param_01,0,var_02); + self.interval = 80; +} + +//Function Number: 26 +cleardodgeanims() +{ + self.nododgemove = 0; + self.dodgeleftanim = undefined; + self.dodgerightanim = undefined; + self.dodgeleftanimoffset = undefined; + self.dodgerightanimoffset = undefined; +} + +//Function Number: 27 +meleeattackcheck_whilemoving() +{ + self endon("killanimscript"); + for(;;) + { + if(isdefined(self.enemy) && isai(self.enemy) || isdefined(self.meleeplayerwhilemoving)) + { + if(abs(self getmotionangle()) <= 135) + { + animscripts/melee::melee_tryexecuting(); + } + } + + wait 0.1; + } +} + +//Function Number: 28 +bulletwhizbycheck_whilemoving() +{ + self endon("killanimscript"); + if(isdefined(self.disablebulletwhizbyreaction)) + { + return; + } + + for(;;) + { + self waittill("bulletwhizby",var_00); + if(self.movemode != "run" || !self.facemotion || self.a.var_911 != "stand" || isdefined(self.reactingtobullet)) + { + continue; + } + + if(self.stairsstate != "none") + { + continue; + } + + if(!isdefined(self.enemy) && !self.ignoreall && isdefined(var_00.team) && isenemyteam(self.team,var_00.team)) + { + self.whizbyenemy = var_00; + self animcustom(::animscripts/reactions::func_B0E); + continue; + } + + if(self.lookaheadhitsstairs || self.lookaheaddist < 100) + { + continue; + } + + if(isdefined(self.pathgoalpos) && distancesquared(self.origin,self.pathgoalpos) < 10000) + { + wait 0.2; + continue; + } + + self.requestreacttobullet = gettime(); + self notify("move_loop_restart"); + animscripts/run::endfaceenemyaimtracking(); + } +} + +//Function Number: 29 +get_shuffle_to_corner_start_anim(param_00,param_01) +{ + if(param_01.type == "Cover Left") + { + return %cornercrl_alert_2_shuffle; + } + + if(param_01.type == "Cover Right") + { + return %cornercrr_alert_2_shuffle; + } + + if(param_00) + { + return %covercrouch_hide_2_shufflel; + } + + return %covercrouch_hide_2_shuffler; +} + +//Function Number: 30 +func_0CC1(param_00,param_01,param_02) +{ + var_03 = []; + if(param_02.type == "Cover Left") + { + } + else if(var_03.type == "Cover Right") + { + } + else if(var_03.type == "Cover Stand" && param_02.type == var_03.type) + { + if(param_01) + { + } + else + { + } + } + else if(param_01) + { + if(var_03.type == "Cover Stand") + { + } + else + { + } + } + else if(var_03.type == "Cover Stand") + { + } + else + { + } + + self.a.array = var_41; +} + +//Function Number: 31 +func_0CC2(param_00,param_01) +{ + if(self.a.var_911 == "stand" && param_01.type != "Cover Stand" || param_00.type != "Cover Stand") + { + self.a.var_911 = "crouch"; + return 0; + } + + return 1; +} + +//Function Number: 32 +movecovertocover_checkendpose(param_00) +{ + if(self.a.var_911 == "crouch" && param_00.type == "Cover Stand") + { + self.a.var_911 = "stand"; + return 0; + } + + return 1; +} + +//Function Number: 33 +movecovertocover() +{ + self endon("killanimscript"); + self endon("goal_changed"); + var_00 = self.shufflenode; + self.shufflemove = undefined; + self.shufflenode = undefined; + self.shufflemoveinterrupted = 1; + if(!isdefined(self.prevnode)) + { + return; + } + + if(!isdefined(self.node) || !isdefined(var_00) || self.node != var_00) + { + return; + } + + var_01 = self.prevnode; + var_02 = self.node; + var_03 = var_02.origin - self.origin; + if(lengthsquared(var_03) < 1) + { + return; + } + + var_03 = vectornormalize(var_03); + var_04 = anglestoforward(var_02.angles); + var_05 = var_04[0] * var_03[1] - var_04[1] * var_03[0] > 0; + if(movedoorsidetoside(var_05,var_01,var_02)) + { + return; + } + + if(func_0CC2(var_01,var_02)) + { + var_06 = 0.1; + } + else + { + var_06 = 0.4; + } + + func_0CC1(var_05,var_01,var_02); + self animmode("zonly_physics",0); + self clearanim(%body,var_06); + var_07 = animscripts/utility::animarray("shuffle_start"); + var_08 = animscripts/utility::animarray("shuffle"); + var_09 = animscripts/utility::animarray("shuffle_end"); + if(animhasnotetrack(var_07,"finish")) + { + var_0A = getnotetracktimes(var_07,"finish")[0]; + } + else + { + var_0A = 1; + } + + var_0B = length(getmovedelta(var_07,0,var_0A)); + var_0C = length(getmovedelta(var_08,0,1)); + var_0D = length(getmovedelta(var_09,0,1)); + var_0E = distance(self.origin,var_02.origin); + if(var_0E > var_0B) + { + self orientmode("face angle",animscripts/utility::getnodeforwardyaw(var_01)); + self setflaggedanimrestart("shuffle_start",var_07,1,var_06); + animscripts/shared::donotetracks("shuffle_start"); + self clearanim(var_07,0.2); + var_0E = var_0E - var_0B; + var_06 = 0.2; + } + else + { + self orientmode("face angle",var_02.angles[1]); + } + + var_0F = 0; + if(var_0E > var_0D) + { + var_0F = 1; + var_0E = var_0E - var_0D; + } + + var_10 = getanimlength(var_08); + var_11 = var_10 * var_0E / var_0C * 0.9; + var_11 = floor(var_11 * 20) * 0.05; + self setflaggedanim("shuffle",var_08,1,var_06); + animscripts/notetracks::donotetracksfortime(var_11,"shuffle"); + for(var_12 = 0;var_12 < 2;var_12++) + { + var_0E = distance(self.origin,var_02.origin); + if(var_0F) + { + var_0E = var_0E - var_0D; + } + + if(var_0E < 4) + { + break; + } + + var_11 = var_10 * var_0E / var_0C * 0.9; + var_11 = floor(var_11 * 20) * 0.05; + if(var_11 < 0.05) + { + break; + } + + animscripts/notetracks::donotetracksfortime(var_11,"shuffle"); + } + + if(var_0F) + { + if(movecovertocover_checkendpose(var_02)) + { + var_06 = 0.2; + } + else + { + var_06 = 0.4; + } + + self clearanim(var_08,var_06); + self setflaggedanim("shuffle_end",var_09,1,var_06); + animscripts/shared::donotetracks("shuffle_end"); + } + + self safeteleport(var_02.origin); + self animmode("normal"); + self.shufflemoveinterrupted = undefined; +} + +//Function Number: 34 +movecovertocoverfinish() +{ + if(isdefined(self.shufflemoveinterrupted)) + { + self clearanim(%cover_shuffle,0.2); + self.shufflemoveinterrupted = undefined; + self animmode("none",0); + self orientmode("face default"); + return; + } + + wait 0.2; + self clearanim(%cover_shuffle,0.2); +} + +//Function Number: 35 +movedoorsidetoside(param_00,param_01,param_02) +{ + var_03 = undefined; + if(param_01.type == "Cover Right" && param_02.type == "Cover Left" && !param_00) + { + var_03 = %corner_standr_door_r2l; + } + else if(param_01.type == "Cover Left" && param_02.type == "Cover Right" && param_00) + { + var_03 = %corner_standl_door_l2r; + } + + if(!isdefined(var_03)) + { + return 0; + } + + self animmode("zonly_physics",0); + self orientmode("face current"); + self setflaggedanimrestart("sideToSide",var_03,1,0.2); + animscripts/shared::donotetracks("sideToSide",::handlesidetosidenotetracks); + var_04 = self getanimtime(var_03); + var_05 = param_02.origin - param_01.origin; + var_05 = vectornormalize((var_05[0],var_05[1],0)); + var_06 = getmovedelta(var_03,var_04,1); + var_07 = param_02.origin - self.origin; + var_07 = (var_07[0],var_07[1],0); + var_08 = vectordot(var_07,var_05) - abs(var_06[1]); + if(var_08 > 2) + { + var_09 = getnotetracktimes(var_03,"slide_end")[0]; + var_0A = var_09 - var_04 * getanimlength(var_03); + var_0B = int(ceil(var_0A / 0.05)); + var_0C = var_05 * var_08 / var_0B; + thread func_0CC9(var_0C,var_0B); + } + + animscripts/shared::donotetracks("sideToSide"); + self safeteleport(param_02.origin); + self animmode("none"); + self orientmode("face default"); + self.shufflemoveinterrupted = undefined; + wait 0.2; + return 1; +} + +//Function Number: 36 +handlesidetosidenotetracks(param_00) +{ + if(param_00 == "slide_start") + { + return 1; + } +} + +//Function Number: 37 +func_0CC9(param_00,param_01) +{ + self endon("killanimscript"); + self endon("goal_changed"); + while(param_01 > 0) + { + self safeteleport(self.origin + param_00); + param_01--; + wait 0.05; + } +} + +//Function Number: 38 +movestandmoveoverride(param_00,param_01) +{ + self endon("movemode"); + self clearanim(%combatrun,0.6); + self setanimknoball(%combatrun,%body,1,0.5,self.moveplaybackrate); + if(isdefined(self.requestreacttobullet) && gettime() - self.requestreacttobullet < 100 && isdefined(self.run_overridebulletreact) && randomfloat(1) < self.a.reacttobulletchance) + { + animscripts/run::customrunningreacttobullets(); + return; + } + + if(isarray(param_00)) + { + if(isdefined(self.var_BA8)) + { + var_02 = common_scripts\utility::choose_from_weighted_array(param_00,param_01); + } + else + { + var_02 = param_01[randomint(param_01.size)]; + } + } + else + { + var_02 = param_01; + } + + self setflaggedanimknob("moveanim",var_02,1,0.2); + animscripts/shared::donotetracks("moveanim"); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/notetracks.gsc b/MW3/Xbox/SP/animscripts/notetracks.gsc new file mode 100644 index 0000000..b4b6d26 --- /dev/null +++ b/MW3/Xbox/SP/animscripts/notetracks.gsc @@ -0,0 +1,986 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\notetracks.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 58 + * Decompile Time: 934 ms + * Timestamp: 10/27/2023 2:30:35 AM +*******************************************************************/ + +//Function Number: 1 +handledogsoundnotetracks(param_00) +{ + if(param_00 == "sound_dogstep_run_default") + { + self playsound("dogstep_run_default"); + return 1; + } + + var_01 = getsubstr(param_00,0,5); + if(var_01 != "sound") + { + return 0; + } + + var_02 = "anml" + getsubstr(param_00,5); + if(isalive(self)) + { + thread maps\_utility::func_1F5B(var_02,"tag_eye"); + } + else + { + thread common_scripts\utility::play_sound_in_space(var_02,self geteye()); + } + + return 1; +} + +//Function Number: 2 +growling() +{ + return isdefined(self.script_growl); +} + +//Function Number: 3 +registernotetracks() +{ + level.notetracks["anim_pose = \"stand\"] = ::func_1F6B; + level.notetracks["anim_pose = \"crouch\"] = ::notetrackposecrouch; + level.notetracks["anim_pose = \"prone\"] = ::notetrackposeprone; + level.notetracks["anim_pose = \"crawl\"] = ::func_1F6E; + level.notetracks["anim_pose = \"back\"] = ::notetrackposeback; + level.notetracks["anim_movement = \"stop\"] = ::notetrackmovementstop; + level.notetracks["anim_movement = \"walk\"] = ::func_1F65; + level.notetracks["anim_movement = \"run\"] = ::notetrackmovementrun; + level.notetracks["anim_aiming = 1"] = ::notetrackalertnessaiming; + level.notetracks["anim_aiming = 0"] = ::func_1F69; + level.notetracks["anim_alertness = causal"] = ::notetrackalertnesscasual; + level.notetracks["anim_alertness = alert"] = ::func_1F69; + level.notetracks["anim_alertness = aiming"] = ::notetrackalertnessaiming; + level.notetracks["gunhand = (gunhand)_left"] = ::notetrackgunhand; + level.notetracks["anim_gunhand = \"left\"] = ::notetrackgunhand; + level.notetracks["gunhand = (gunhand)_right"] = ::notetrackgunhand; + level.notetracks["anim_gunhand = \"right\"] = ::notetrackgunhand; + level.notetracks["anim_gunhand = \"none\"] = ::notetrackgunhand; + level.notetracks["gun drop"] = ::func_1F70; + level.notetracks["dropgun"] = ::func_1F70; + level.notetracks["gun_2_chest"] = ::notetrackguntochest; + level.notetracks["gun_2_back"] = ::notetrackguntoback; + level.notetracks["pistol_pickup"] = ::notetrackpistolpickup; + level.notetracks["pistol_putaway"] = ::func_1F75; + level.notetracks["drop clip"] = ::notetrackdropclip; + level.notetracks["refill clip"] = ::notetrackrefillclip; + level.notetracks["reload done"] = ::notetrackrefillclip; + level.notetracks["load_shell"] = ::notetrackloadshell; + level.notetracks["pistol_rechamber"] = ::func_1F79; + level.notetracks["gravity on"] = ::notetrackgravity; + level.notetracks["gravity off"] = ::notetrackgravity; + level.notetracks["footstep_right_large"] = ::func_1F7B; + level.notetracks["footstep_right_small"] = ::func_1F7B; + level.notetracks["footstep_left_large"] = ::func_1F7B; + level.notetracks["footstep_left_small"] = ::func_1F7B; + level.notetracks["footscrape"] = ::notetrackfootscrape; + level.notetracks["land"] = ::func_1F81; + level.notetracks["bodyfall large"] = ::notetrackbodyfall; + level.notetracks["bodyfall small"] = ::notetrackbodyfall; + level.notetracks["code_move"] = ::notetrackcodemove; + level.notetracks["face_enemy"] = ::func_1F83; + level.notetracks["laser_on"] = ::func_1F5F; + level.notetracks["laser_off"] = ::func_1F5F; + level.notetracks["start_ragdoll"] = ::notetrackstartragdoll; + level.notetracks["fire"] = ::notetrackfire; + level.notetracks["fire_spray"] = ::func_1F8E; + level.notetracks["bloodpool"] = ::animscripts/death::play_blood_pool; + if(isdefined(level._notetrackfx)) + { + var_00 = getarraykeys(level._notetrackfx); + foreach(var_02 in var_00) + { + level.notetracks[var_02] = ::customnotetrackfx; + } + } +} + +//Function Number: 4 +notetrackfire(param_00,param_01) +{ + if(isdefined(level.fire_notetrack_functions[self.script])) + { + thread [[ level.fire_notetrack_functions[self.script] ]](); + return; + } + + thread [[ ::shootnotetrack ]](); +} + +//Function Number: 5 +func_1F5F(param_00,param_01) +{ + if(issubstr(param_00,"on")) + { + self.a.laseron = 1; + } + else + { + self.a.laseron = 0; + } + + animscripts/shared::updatelaserstatus(); +} + +//Function Number: 6 +notetrackstopanim(param_00,param_01) +{ +} + +//Function Number: 7 +unlinknextframe() +{ + wait 0.1; + if(isdefined(self)) + { + self unlink(); + } +} + +//Function Number: 8 +notetrackstartragdoll(param_00,param_01) +{ + if(isdefined(self.noragdoll)) + { + return; + } + + if(isdefined(self.ragdolltime)) + { + return; + } + + if(!isdefined(self.var_1F63)) + { + thread unlinknextframe(); + } + + self startragdoll(); +} + +//Function Number: 9 +notetrackmovementstop(param_00,param_01) +{ + self.a.movement = "stop"; +} + +//Function Number: 10 +func_1F65(param_00,param_01) +{ + self.a.movement = "walk"; +} + +//Function Number: 11 +notetrackmovementrun(param_00,param_01) +{ + self.a.movement = "run"; +} + +//Function Number: 12 +notetrackalertnessaiming(param_00,param_01) +{ +} + +//Function Number: 13 +notetrackalertnesscasual(param_00,param_01) +{ +} + +//Function Number: 14 +func_1F69(param_00,param_01) +{ +} + +//Function Number: 15 +stoponback() +{ + animscripts/utility::exitpronewrapper(1); + self.a.onback = undefined; +} + +//Function Number: 16 +setpose(param_00) +{ + self.a.var_911 = param_00; + if(isdefined(self.a.onback)) + { + stoponback(); + } + + self notify("entered_pose" + param_00); +} + +//Function Number: 17 +func_1F6B(param_00,param_01) +{ + if(self.a.var_911 == "prone") + { + self orientmode("face default"); + animscripts/utility::exitpronewrapper(1); + } + + setpose("stand"); +} + +//Function Number: 18 +notetrackposecrouch(param_00,param_01) +{ + if(self.a.var_911 == "prone") + { + self orientmode("face default"); + animscripts/utility::exitpronewrapper(1); + } + + setpose("crouch"); +} + +//Function Number: 19 +notetrackposeprone(param_00,param_01) +{ + if(!issentient(self)) + { + return; + } + + self setproneanimnodes(-45,45,%prone_legs_down,%exposed_aiming,%prone_legs_up); + animscripts/utility::enterpronewrapper(1); + setpose("prone"); + if(isdefined(self.a.goingtoproneaim)) + { + self.a.var_ACB = 1; + return; + } + + self.a.var_ACB = undefined; +} + +//Function Number: 20 +func_1F6E(param_00,param_01) +{ + if(!issentient(self)) + { + return; + } + + self setproneanimnodes(-45,45,%prone_legs_down,%exposed_aiming,%prone_legs_up); + animscripts/utility::enterpronewrapper(1); + setpose("prone"); + self.a.var_ACB = undefined; +} + +//Function Number: 21 +notetrackposeback(param_00,param_01) +{ + if(!issentient(self)) + { + return; + } + + setpose("crouch"); + self.a.onback = 1; + self.a.movement = "stop"; + self setproneanimnodes(-90,90,%prone_legs_down,%exposed_aiming,%prone_legs_up); + animscripts/utility::enterpronewrapper(1); +} + +//Function Number: 22 +notetrackgunhand(param_00,param_01) +{ + if(issubstr(param_00,"left")) + { + animscripts/shared::placeweaponon(self.weapon,"left"); + self notify("weapon_switch_done"); + return; + } + + if(issubstr(param_00,"right")) + { + animscripts/shared::placeweaponon(self.weapon,"right"); + self notify("weapon_switch_done"); + return; + } + + if(issubstr(param_00,"none")) + { + animscripts/shared::placeweaponon(self.weapon,"none"); + return; + } +} + +//Function Number: 23 +func_1F70(param_00,param_01) +{ + animscripts/shared::dropaiweapon(); + self.lastweapon = self.weapon; +} + +//Function Number: 24 +notetrackguntochest(param_00,param_01) +{ + animscripts/shared::placeweaponon(self.weapon,"chest"); +} + +//Function Number: 25 +notetrackguntoback(param_00,param_01) +{ + animscripts/shared::placeweaponon(self.weapon,"back"); + self.weapon = animscripts/utility::getpreferredweapon(); + self.bulletsinclip = weaponclipsize(self.weapon); +} + +//Function Number: 26 +notetrackpistolpickup(param_00,param_01) +{ + animscripts/shared::placeweaponon(self.sidearm,"right"); + self.bulletsinclip = weaponclipsize(self.weapon); + self notify("weapon_switch_done"); +} + +//Function Number: 27 +func_1F75(param_00,param_01) +{ + animscripts/shared::placeweaponon(self.weapon,"none"); + self.weapon = animscripts/utility::getpreferredweapon(); + self.bulletsinclip = weaponclipsize(self.weapon); +} + +//Function Number: 28 +notetrackdropclip(param_00,param_01) +{ + thread animscripts/shared::handledropclip(param_01); +} + +//Function Number: 29 +notetrackrefillclip(param_00,param_01) +{ + if(weaponclass(self.weapon) == "rocketlauncher") + { + animscripts/combat_utility::showrocket(); + } + + animscripts/weaponlist::refillclip(); + self.a.needstorechamber = 0; +} + +//Function Number: 30 +notetrackloadshell(param_00,param_01) +{ + self playsound("weap_reload_shotgun_loop_npc"); +} + +//Function Number: 31 +func_1F79(param_00,param_01) +{ + self playsound("weap_reload_pistol_chamber_npc"); +} + +//Function Number: 32 +notetrackgravity(param_00,param_01) +{ + if(issubstr(param_00,"on")) + { + self animmode("gravity"); + return; + } + + if(issubstr(param_00,"off")) + { + self animmode("nogravity"); + } +} + +//Function Number: 33 +func_1F7B(param_00,param_01) +{ + var_02 = issubstr(param_00,"left"); + var_03 = issubstr(param_00,"large"); + func_1F8B(var_02,var_03); + var_04 = get_notetrack_movement(); + self playsound("gear_rattle_" + var_04); +} + +//Function Number: 34 +get_notetrack_movement() +{ + var_00 = "run"; + if(isdefined(self.sprint)) + { + var_00 = "sprint"; + } + + if(isdefined(self.a)) + { + if(isdefined(self.a.movement)) + { + if(self.a.movement == "walk") + { + var_00 = "walk"; + } + } + + if(isdefined(self.a.var_911)) + { + if(self.a.var_911 == "prone") + { + var_00 = "prone"; + } + } + } + + return var_00; +} + +//Function Number: 35 +customnotetrackfx(param_00,param_01) +{ + if(isdefined(self.groundtype)) + { + var_02 = self.groundtype; + } + else + { + var_02 = "dirt"; + } + + var_03 = undefined; + if(isdefined(level._notetrackfx[param_00][var_02])) + { + var_03 = level._notetrackfx[param_00][var_02]; + } + else if(isdefined(level._notetrackfx[param_00]["all"])) + { + var_03 = level._notetrackfx[param_00]["all"]; + } + + if(!isdefined(var_03)) + { + return; + } + + if(isai(self)) + { + playfxontag(var_03.fx,self,var_03.tag); + } + + if(!isdefined(var_03.sound_prefix) && !isdefined(var_03.sound_suffix)) + { + return; + } + + var_04 = "" + var_03.sound_prefix + var_02 + var_03.sound_suffix; + self playsound(var_04); +} + +//Function Number: 36 +notetrackfootscrape(param_00,param_01) +{ + if(isdefined(self.groundtype)) + { + var_02 = self.groundtype; + } + else + { + var_02 = "dirt"; + } + + self playsound("step_scrape_" + var_02); +} + +//Function Number: 37 +func_1F81(param_00,param_01) +{ + if(isdefined(self.groundtype)) + { + var_02 = self.groundtype; + } + else + { + var_02 = "dirt"; + } + + self playsound("land_" + var_02); +} + +//Function Number: 38 +notetrackcodemove(param_00,param_01) +{ + return "code_move"; +} + +//Function Number: 39 +func_1F83(param_00,param_01) +{ + if(self.script != "reactions") + { + self orientmode("face enemy"); + return; + } + + if(isdefined(self.enemy) && distancesquared(self.enemy.origin,self.reactiontargetpos) < 4096) + { + self orientmode("face enemy"); + return; + } + + self orientmode("face point",self.reactiontargetpos); +} + +//Function Number: 40 +notetrackbodyfall(param_00,param_01) +{ + var_02 = "_small"; + if(issubstr(param_00,"large")) + { + var_02 = "_large"; + } + + if(isdefined(self.groundtype)) + { + var_03 = self.groundtype; + } + else + { + var_03 = "dirt"; + } + + self playsound("bodyfall_" + var_03 + var_02); +} + +//Function Number: 41 +func_1F4C(param_00,param_01,param_02) +{ + if(isai(self) && self.type == "dog") + { + if(handledogsoundnotetracks(param_00)) + { + return; + } + } + + var_03 = level.notetracks[param_00]; + if(isdefined(var_03)) + { + return [[ var_03 ]](param_00,param_01); + } + + switch(param_00) + { + case "undefined": + case "finish": + case "end": + return param_00; + + case "finish early": + if(isdefined(self.enemy)) + { + return param_00; + } + break; + + case "swish small": + thread common_scripts\utility::play_sound_in_space("melee_swing_small",self gettagorigin("TAG_WEAPON_RIGHT")); + break; + + case "swish large": + thread common_scripts\utility::play_sound_in_space("melee_swing_large",self gettagorigin("TAG_WEAPON_RIGHT")); + break; + + case "rechamber": + if(animscripts/utility::weapon_pump_action_shotgun()) + { + self playsound("weap_reload_shotgun_pump_npc"); + } + + self.a.needstorechamber = 0; + break; + + case "no death": + self.a.nodeath = 1; + break; + + case "no pain": + self.allowpain = 0; + break; + + case "allow pain": + self.allowpain = 1; + break; + + case "anim_melee = \"right\": + case "anim_melee = right": + self.a.meleestate = "right"; + break; + + case "anim_melee = \"left\": + case "anim_melee = left": + self.a.meleestate = "left"; + break; + + case "swap taghelmet to tagleft": + if(isdefined(self.var_ABA)) + { + if(isdefined(self.var_1F85)) + { + self detach(self.var_1F85,"TAG_HELMETSIDE"); + self.var_1F85 = undefined; + } + + self detach(self.var_ABA,""); + self attach(self.var_ABA,"TAG_WEAPON_LEFT"); + self.var_ABA = undefined; + } + break; + + case "stop anim": + maps\_utility::anim_stopanimscripted(); + return param_00; + + case "break glass": + level notify("glass_break",self); + break; + + case "break_glass": + level notify("glass_break",self); + break; + + default: + if(isdefined(param_02)) + { + return [[ param_02 ]](param_00); + } + break; + } +} + +//Function Number: 42 +donotetracksintercept(param_00,param_01,param_02) +{ + for(;;) + { + self waittill(param_00,var_03); + if(!isdefined(var_03)) + { + var_03 = "undefined"; + } + + var_04 = [[ param_01 ]](var_03); + if(isdefined(var_04) && var_04) + { + continue; + } + + var_05 = func_1F4C(var_03,param_00); + if(isdefined(var_05)) + { + return var_05; + } + } +} + +//Function Number: 43 +donotetrackspostcallback(param_00,param_01) +{ + for(;;) + { + self waittill(param_00,var_02); + if(!isdefined(var_02)) + { + var_02 = "undefined"; + } + + var_03 = func_1F4C(var_02,param_00); + [[ param_01 ]](var_02); + if(isdefined(var_03)) + { + return var_03; + } + } +} + +//Function Number: 44 +donotetracksfortimeout(param_00,param_01,param_02,param_03) +{ + animscripts/shared::donotetracks(param_00,param_02,param_03); +} + +//Function Number: 45 +donotetracksforever(param_00,param_01,param_02,param_03) +{ + donotetracksforeverproc(::animscripts/shared::donotetracks,param_00,param_01,param_02,param_03); +} + +//Function Number: 46 +func_1F87(param_00,param_01,param_02,param_03) +{ + donotetracksforeverproc(::donotetracksintercept,param_00,param_01,param_02,param_03); +} + +//Function Number: 47 +donotetracksforeverproc(param_00,param_01,param_02,param_03,param_04) +{ + if(isdefined(param_02)) + { + self endon(param_02); + } + + self endon("killanimscript"); + if(!isdefined(param_04)) + { + param_04 = "undefined"; + } + + for(;;) + { + var_05 = gettime(); + var_06 = [[ param_00 ]](param_01,param_03,param_04); + var_07 = gettime() - var_05; + if(var_07 < 0.05) + { + var_05 = gettime(); + var_06 = [[ param_00 ]](param_01,param_03,param_04); + var_07 = gettime() - var_05; + if(var_07 < 0.05) + { + wait 0.05 - var_07; + } + } + } +} + +//Function Number: 48 +func_0C57(param_00,param_01,param_02,param_03) +{ + var_04 = spawnstruct(); + var_04 thread donotetracksfortimeendnotify(param_01); + func_1F89(::donotetracksfortimeout,param_00,param_02,param_03,var_04); +} + +//Function Number: 49 +donotetracksfortime(param_00,param_01,param_02,param_03) +{ + var_04 = spawnstruct(); + var_04 thread donotetracksfortimeendnotify(param_00); + func_1F89(::donotetracksforever,param_01,param_02,param_03,var_04); +} + +//Function Number: 50 +donotetracksfortimeintercept(param_00,param_01,param_02,param_03) +{ + var_04 = spawnstruct(); + var_04 thread donotetracksfortimeendnotify(param_00); + func_1F89(::func_1F87,param_01,param_02,param_03,var_04); +} + +//Function Number: 51 +func_1F89(param_00,param_01,param_02,param_03,param_04) +{ + param_04 endon("stop_notetracks"); + [[ param_00 ]](param_01,undefined,param_02,param_03); +} + +//Function Number: 52 +donotetracksfortimeendnotify(param_00) +{ + wait param_00; + self notify("stop_notetracks"); +} + +//Function Number: 53 +func_1F8B(param_00,param_01) +{ + if(!isai(self)) + { + self playsound("step_run_dirt"); + return; + } + + var_02 = undefined; + if(!isdefined(self.groundtype)) + { + if(!isdefined(self.lastgroundtype)) + { + self playsound("step_run_dirt"); + return; + } + + var_02 = self.lastgroundtype; + } + else + { + var_02 = self.groundtype; + self.lastgroundtype = self.groundtype; + } + + var_03 = "J_Ball_RI"; + if(param_00) + { + var_03 = "J_Ball_LE"; + } + + var_04 = get_notetrack_movement(); + self playsound("step_" + var_04 + "_" + var_02); + if(param_01) + { + if(![[ level.optionalstepeffectfunction ]](var_03,var_02)) + { + playfootstepeffectsmall(var_03,var_02); + return; + } + + return; + } + + if(![[ level.optionalstepeffectsmallfunction ]](var_03,var_02)) + { + playfootstepeffect(var_03,var_02); + } +} + +//Function Number: 54 +playfootstepeffect(param_00,param_01) +{ + var_02 = 0; + while(var_02 < level.var_1C53.size) + { + if(param_01 != level.var_1C53[var_02]) + { + continue; + } + + var_03 = self gettagorigin(param_00); + var_04 = self.angles; + var_05 = anglestoforward(var_04); + var_06 = var_05 * -1; + var_07 = anglestoup(var_04); + playfx(level._effect["step_" + level.var_1C53[var_02]],var_03,var_07,var_06); + return 1; + var_07++; + } + + return 0; +} + +//Function Number: 55 +playfootstepeffectsmall(param_00,param_01) +{ + var_02 = 0; + while(var_02 < level.optionalstepeffectssmall.size) + { + if(param_01 != level.optionalstepeffectssmall[var_02]) + { + continue; + } + + var_03 = self gettagorigin(param_00); + var_04 = self.angles; + var_05 = anglestoforward(var_04); + var_06 = var_05 * -1; + var_07 = anglestoup(var_04); + playfx(level._effect["step_small_" + level.optionalstepeffectssmall[var_02]],var_03,var_07,var_06); + return 1; + var_07++; + } + + return 0; +} + +//Function Number: 56 +shootnotetrack() +{ + waittillframeend; + if(isdefined(self) && gettime() > self.a.lastshoottime) + { + animscripts/utility::shootenemywrapper(); + animscripts/combat_utility::decrementbulletsinclip(); + if(weaponclass(self.weapon) == "rocketlauncher") + { + self.a.rockets--; + } + } +} + +//Function Number: 57 +fire_straight() +{ + if(self.a.weaponpos["right"] == "none") + { + return; + } + + if(isdefined(self.dontshootstraight)) + { + shootnotetrack(); + return; + } + + var_00 = self gettagorigin("tag_weapon"); + var_01 = anglestoforward(self getmuzzleangle()); + var_02 = var_00 + var_01 * 1000; + self shoot(1,var_02); + animscripts/combat_utility::decrementbulletsinclip(); +} + +//Function Number: 58 +func_1F8E(param_00,param_01) +{ + if(!isalive(self) && self isbadguy()) + { + if(isdefined(self.var_1F8F)) + { + return; + } + + self.var_1F8F = 1; + var_02["axis"] = "team3"; + self.team = var_41[self.team]; + } + + if(!issentient(self)) + { + self notify("fire",var_41["team3"],"axis"); + return; + } + + if(self.a.weaponpos["right"] == "none") + { + return; + } + + var_03 = self getmuzzlepos(); + var_04 = anglestoforward(self getmuzzleangle()); + var_05 = 10; + if(isdefined(self.isrambo)) + { + var_05 = 20; + } + + var_06 = 0; + if(isalive(self.enemy) && issentient(self.enemy) && self canshootenemy()) + { + var_07 = vectornormalize(self.enemy geteye() - var_03); + if(vectordot(var_04,var_07) > cos(var_05)) + { + var_06 = 1; + } + } + + if(var_06) + { + animscripts/utility::shootenemywrapper(); + } + else + { + var_04 = var_04 + (randomfloat(2) - 1 * 0.1,randomfloat(2) - 1 * 0.1,randomfloat(2) - 1 * 0.1); + var_08 = var_03 + var_04 * 1000; + animscripts/utility::shootposwrapper(var_08); + } + + animscripts/combat_utility::decrementbulletsinclip(); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/pain.gsc b/MW3/Xbox/SP/animscripts/pain.gsc new file mode 100644 index 0000000..66c30f9 --- /dev/null +++ b/MW3/Xbox/SP/animscripts/pain.gsc @@ -0,0 +1,1573 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\pain.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 48 + * Decompile Time: 893 ms + * Timestamp: 10/27/2023 2:30:38 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(isdefined(self.longdeathstarting)) + { + self waittill("killanimscript"); + return; + } + + if([[ level.pain_test ]]()) + { + return; + } + + if(self.a.disablepain) + { + return; + } + + self notify("kill_long_death"); + if(isdefined(self.a.paintime)) + { + self.a.lastpaintime = self.a.paintime; + } + else + { + self.a.lastpaintime = 0; + } + + self.a.paintime = gettime(); + if(self.stairsstate != "none") + { + self.a.painonstairs = 1; + } + else + { + self.a.painonstairs = undefined; + } + + if(self.a.nextstandinghitdying) + { + self.health = 1; + } + + var_00 = 0; + var_01 = 0; + var_02 = self.health / self.maxhealth; + self notify("anim entered pain"); + self endon("killanimscript"); + animscripts/utility::initialize("pain"); + self animmode("gravity"); + if(!isdefined(self.no_pain_sound)) + { + animscripts/face::saygenericdialogue("pain"); + } + + if(self.damagelocation == "helmet") + { + animscripts/death::helmetpop(); + } + else if(wasdamagedbyexplosive() && randomint(2) == 0) + { + animscripts/death::helmetpop(); + } + + if(isdefined(self.painfunction)) + { + self [[ self.painfunction ]](); + return; + } + + if(crawlingpain()) + { + return; + } + + if(specialpain(self.a.special)) + { + return; + } + + var_03 = getpainanim(); + func_0920(var_03); +} + +//Function Number: 2 +initpainfx() +{ + level._effect["crawling_death_blood_smear"] = loadfx("impacts/blood_smear_decal"); +} + +//Function Number: 3 +end_script() +{ + if(isdefined(self.damageshieldpain)) + { + self.var_907 = undefined; + self.damageshieldpain = undefined; + self.allowpain = 1; + if(!isdefined(self.predamageshieldignoreme)) + { + self.ignoreme = 0; + } + + self.predamageshieldignoreme = undefined; + } + + if(isdefined(self.blockingpain)) + { + self.blockingpain = undefined; + self.allowpain = 1; + } +} + +//Function Number: 4 +wasdamagedbyexplosive() +{ + if(isexplosivedamagemod(self.damagemod)) + { + return 1; + } + + if(gettime() - level.lastcarexplosiontime <= 50) + { + var_00 = level.lastcarexplosionrange * level.lastcarexplosionrange * 1.2 * 1.2; + if(distancesquared(self.origin,level.lastcarexplosiondamagelocation) < var_00) + { + var_01 = var_00 * 0.5 * 0.5; + self.maydoupwardsdeath = distancesquared(self.origin,level.lastcarexplosionlocation) < var_01; + return 1; + } + } + + return 0; +} + +//Function Number: 5 +getdamageshieldpainanim() +{ + if(self.a.var_911 == "prone") + { + return; + } + + if(isdefined(self.lastattacker) && isdefined(self.lastattacker.team) && self.lastattacker.team == self.team) + { + return; + } + + if(!isdefined(self.var_907) || gettime() - self.a.lastpaintime > 1500) + { + self.var_907 = randomintrange(2,3); + } + + if(isdefined(self.lastattacker) && distancesquared(self.origin,self.lastattacker.origin) < squared(512)) + { + self.var_907 = 0; + } + + if(self.var_907 > 0) + { + self.var_907--; + return; + } + + self.damageshieldpain = 1; + self.allowpain = 0; + if(self.ignoreme) + { + self.predamageshieldignoreme = 1; + } + else + { + self.ignoreme = 1; + } + + if(animscripts/utility::usingsidearm()) + { + animscripts/shared::placeweaponon(self.primaryweapon,"right"); + } + + if(self.a.var_911 == "crouch") + { + return %exposed_crouch_extendedpaina; + } + + var_00 = animscripts/utility::array(%stand_exposed_extendedpain_chest,%stand_exposed_extendedpain_head_2_crouch,%stand_exposed_extendedpain_hip_2_crouch); + return var_00[randomint(var_00.size)]; +} + +//Function Number: 6 +getpainanim() +{ + if(self.damageshield && !isdefined(self.disabledamageshieldpain)) + { + var_00 = getdamageshieldpainanim(); + if(isdefined(var_00)) + { + return var_00; + } + } + + if(isdefined(self.a.onback)) + { + if(self.a.var_911 == "crouch") + { + return %back_pain; + } + else + { + animscripts/notetracks::stoponback(); + } + } + + if(self.a.var_911 == "stand") + { + var_01 = isdefined(self.node) && distancesquared(self.origin,self.node.origin) < 4096; + if(!var_01 && self.a.movement == "run" && abs(self getmotionangle()) < 60) + { + return getrunningforwardpainanim(); + } + + self.a.movement = "stop"; + return getstandpainanim(); + } + + if(self.a.var_911 == "crouch") + { + self.a.movement = "stop"; + return getcrouchpainanim(); + } + + if(self.a.var_911 == "prone") + { + self.a.movement = "stop"; + return getpronepainanim(); + } +} + +//Function Number: 7 +getrunningforwardpainanim() +{ + var_00 = []; + var_01 = 0; + var_02 = 0; + var_03 = 0; + if(self maymovetopoint(self localtoworldcoords((300,0,0)))) + { + var_02 = 1; + var_01 = 1; + } + else if(self maymovetopoint(self localtoworldcoords((200,0,0)))) + { + var_01 = 1; + } + + if(isdefined(self.a.disablelongpain)) + { + var_02 = 0; + var_01 = 0; + } + + if(var_02) + { + var_00[var_00.size] = %run_pain_leg; + var_00[var_00.size] = %run_pain_shoulder; + var_00[var_00.size] = %run_pain_stomach_stumble; + var_00[var_00.size] = %run_pain_head; + } + + if(var_01) + { + var_00[var_00.size] = %run_pain_fallonknee_02; + var_00[var_00.size] = %run_pain_stomach; + var_00[var_00.size] = %run_pain_stumble; + var_00[var_00.size] = %run_pain_stomach_fast; + var_00[var_00.size] = %run_pain_leg_fast; + var_00[var_00.size] = %run_pain_fall; + } + else if(self maymovetopoint(self localtoworldcoords((120,0,0)))) + { + var_00[var_00.size] = %run_pain_fallonknee; + var_00[var_00.size] = %run_pain_fallonknee_03; + } + + if(!var_00.size) + { + self.a.movement = "stop"; + return getstandpainanim(); + } + + return var_00[randomint(var_00.size)]; +} + +//Function Number: 8 +getstandpistolpainanim() +{ + var_00 = []; + if(animscripts/utility::damagelocationisany("torso_upper","torso_lower","left_arm_upper","right_arm_upper","neck")) + { + } + + if(animscripts/utility::damagelocationisany("torso_lower","left_leg_upper","right_leg_upper")) + { + } + + if(animscripts/utility::damagelocationisany("head","neck")) + { + } + + if(animscripts/utility::damagelocationisany("left_arm_lower","left_arm_upper","torso_upper")) + { + } + + if(animscripts/utility::damagelocationisany("right_arm_lower","right_arm_upper","torso_upper")) + { + } + + if(var_41.size < 2) + { + } + + if(var_41.size < 2) + { + } + + return var_41[randomint(var_41.size)]; +} + +//Function Number: 9 +getstandpainanim() +{ + if(animscripts/utility::usingsidearm()) + { + return getstandpistolpainanim(); + } + + var_00 = []; + var_01 = []; + if(animscripts/utility::damagelocationisany("torso_upper","torso_lower")) + { + } + + if(animscripts/utility::damagelocationisany("torso_upper","head","helmet","neck")) + { + var_01[var_01.size] = %exposed_pain_face; + var_01[var_01.size] = %stand_exposed_extendedpain_neck; + } + + if(animscripts/utility::damagelocationisany("right_arm_upper","right_arm_lower")) + { + var_01[var_01.size] = %exposed_pain_right_arm; + } + + if(animscripts/utility::damagelocationisany("left_arm_lower","left_arm_upper")) + { + var_01[var_01.size] = %stand_exposed_extendedpain_shoulderswing; + } + + if(animscripts/utility::damagelocationisany("torso_lower","left_leg_upper","right_leg_upper")) + { + var_01[var_01.size] = %exposed_pain_groin; + var_01[var_01.size] = %stand_exposed_extendedpain_hip; + } + + if(animscripts/utility::damagelocationisany("left_foot","right_foot","left_leg_lower","right_leg_lower")) + { + var_01[var_01.size] = %stand_exposed_extendedpain_thigh; + } + + if(var_01.size < 2) + { + if(!self.a.disablelongdeath) + { + var_01[var_01.size] = %exposed_pain_2_crouch; + var_01[var_01.size] = %stand_extendedpainb; + } + else + { + var_01[var_01.size] = %exposed_pain_right_arm; + var_01[var_01.size] = %exposed_pain_face; + var_01[var_01.size] = %exposed_pain_groin; + } + } + + if(var_41.size < 2) + { + } + + if(!self.damageshield && !self.a.disablelongdeath) + { + var_02 = randomint(var_01.size + var_41.size); + if(var_02 < var_01.size) + { + return var_01[var_02]; + } + else + { + return var_41[var_02 - var_01.size]; + } + } + + return var_01[randomint(var_01.size)]; +} + +//Function Number: 10 +removeblockedanims(param_00) +{ + var_01 = []; + for(var_02 = 0;var_02 < param_00.size;var_02++) + { + var_03 = param_00[var_02]; + var_04 = 1; + if(animhasnotetrack(var_03,"code_move")) + { + var_04 = getnotetracktimes(var_03,"code_move")[0]; + } + + var_05 = getmovedelta(var_03,0,var_04); + var_06 = self localtoworldcoords(var_05); + if(self maymovetopoint(var_06,1,1)) + { + var_01[var_01.size] = var_03; + } + } + + return var_01; +} + +//Function Number: 11 +getcrouchpainanim() +{ + var_00 = []; + if(!self.damageshield && !self.a.disablelongdeath) + { + } + + if(animscripts/utility::damagelocationisany("left_hand","left_arm_lower","left_arm_upper")) + { + } + + if(animscripts/utility::damagelocationisany("right_hand","right_arm_lower","right_arm_upper")) + { + } + + return var_41[randomint(var_41.size)]; +} + +//Function Number: 12 +getpronepainanim() +{ + if(randomint(2) == 0) + { + return %prone_reaction_a; + } + + return %prone_reaction_b; +} + +//Function Number: 13 +func_0920(param_00) +{ + var_01 = 1; + self setflaggedanimknoballrestart("painanim",param_00,%body,1,0.1,var_01); + if(self.a.var_911 == "prone") + { + self updateprone(%prone_legs_up,%prone_legs_down,1,0.1,1); + } + + if(animhasnotetrack(param_00,"start_aim")) + { + thread notifystartaim("painanim"); + self endon("start_aim"); + } + + if(animhasnotetrack(param_00,"code_move")) + { + animscripts/shared::donotetracks("painanim"); + } + + animscripts/shared::donotetracks("painanim"); +} + +//Function Number: 14 +notifystartaim(param_00) +{ + self endon("killanimscript"); + self waittillmatch("start_aim",param_00); + self notify("start_aim"); +} + +//Function Number: 15 +specialpainblocker() +{ + self endon("killanimscript"); + self.blockingpain = 1; + self.allowpain = 0; + wait 0.5; + self.blockingpain = undefined; + self.allowpain = 1; +} + +//Function Number: 16 +specialpain(param_00) +{ + if(param_00 == "none") + { + return 0; + } + + self.a.special = "none"; + thread specialpainblocker(); + switch(param_00) + { + case "cover_left": + if(self.a.var_911 == "stand") + { + var_01 = []; + dopainfromarray(var_41); + var_01 = 1; + } + else if(self.a.var_911 == "crouch") + { + var_01 = []; + dopainfromarray(var_41); + var_01 = 1; + } + else + { + var_02 = 0; + } + + break; + var_41[var_01.size] + %cornercrl_painb + var_41[var_41.size] + %corner_standl_paine + var_41[var_41.size] + %corner_standl_paind + var_41[var_41.size] + %corner_standl_painc + var_41[var_01.size] + %corner_standl_painb + break; + + case "cover_right": + if(self.a.var_911 == "stand") + { + var_01 = []; + dopainfromarray(var_41); + var_01 = 1; + } + else if(self.a.var_911 == "crouch") + { + var_01 = []; + dopainfromarray(var_41); + var_01 = 1; + } + else + { + var_02 = 0; + } + + break; + var_41[var_41.size] + %cornercrr_alert_painc + var_41[var_01.size] + %cornercrr_alert_paina + var_41[2] + %corner_standr_painc + var_41[1] + %corner_standr_painb + var_41[0] + %corner_standr_pain + break; + + case "cover_right_stand_A": + var_02 = 0; + break; + + case "cover_right_stand_B": + dopain(%corner_standr_pain_b_2_alert); + var_02 = 1; + break; + + case "cover_left_stand_A": + dopain(%corner_standl_pain_a_2_alert); + var_02 = 1; + break; + + case "cover_left_stand_B": + dopain(%corner_standl_pain_b_2_alert); + var_02 = 1; + break; + + case "cover_crouch": + var_01 = []; + dopainfromarray(var_41); + var_01 = 1; + break; + var_41[var_41.size] + %covercrouch_pain_left_3 + var_41[var_41.size] + %covercrouch_pain_front + var_41[var_01.size] + %covercrouch_pain_right + break; + + case "cover_stand": + var_01 = []; + dopainfromarray(var_41); + var_01 = 1; + break; + var_41[var_41.size] + %coverstand_pain_leg + var_41[var_01.size] + %coverstand_pain_groin + break; + + case "cover_stand_aim": + var_01 = []; + dopainfromarray(var_41); + var_01 = 1; + break; + var_41[var_41.size] + %coverstand_pain_aim_2_hide_02 + var_41[var_01.size] + %coverstand_pain_aim_2_hide_01 + break; + + case "cover_crouch_aim": + dopain(%covercrouch_pain_aim_2_hide_01); + var_02 = 1; + break; + + case "saw": + if(self.a.var_911 == "stand") + { + var_03 = %saw_gunner_pain; + } + else if(self.a.var_911 == "crouch") + { + var_03 = %saw_gunner_lowwall_pain_02; + } + else + { + var_03 = %saw_gunner_prone_pain; + } + + self setflaggedanimknob("painanim",var_03,1,0.3,1); + animscripts/shared::donotetracks("painanim"); + var_01 = 1; + break; + + case "mg42": + mg42pain(self.a.var_911); + var_02 = 1; + break; + + case "minigun": + var_02 = 0; + break; + + case "corner_right_martyrdom": + var_02 = func_095B(); + break; + + case "rambo": + case "rambo_right": + case "rambo_left": + case "dying_crawl": + var_02 = 0; + break; + + default: + var_02 = 0; + break; + } + + return var_01; +} + +//Function Number: 17 +paindeathnotify() +{ + self endon("death"); + wait 0.05; + self notify("pain_death"); +} + +//Function Number: 18 +dopainfromarray(param_00) +{ + var_01 = param_00[randomint(param_00.size)]; + self setflaggedanimknob("painanim",var_01,1,0.3,1); + animscripts/shared::donotetracks("painanim"); +} + +//Function Number: 19 +dopain(param_00) +{ + self setflaggedanimknob("painanim",param_00,1,0.3,1); + animscripts/shared::donotetracks("painanim"); +} + +//Function Number: 20 +mg42pain(param_00) +{ + self setflaggedanimknob("painanim",level.mg_animmg["pain_" + param_00],1,0.1,1); + animscripts/shared::donotetracks("painanim"); +} + +//Function Number: 21 +waitsetstop(param_00,param_01) +{ + self endon("killanimscript"); + self endon("death"); + if(isdefined(param_01)) + { + self endon(param_01); + } + + wait param_00; + self.a.movement = "stop"; +} + +//Function Number: 22 +crawlingpain() +{ + if(self.a.disablelongdeath || self.diequietly || self.damageshield) + { + return 0; + } + + if(self.stairsstate != "none") + { + return 0; + } + + if(isdefined(self.a.onback)) + { + return 0; + } + + var_00["prone"] = animscripts/utility::array(%dying_crawl_2_back); + self.a.crawlingpaintransanim = var_41[self.a.var_911][randomint(var_41[self.a.var_911].size)]; + if(isdefined(self.forcelongdeath)) + { + self.health = 10; + thread crawlingpistol(); + self waittill(animscripts/utility::array(%dying_stand_2_back_v1,%dying_stand_2_back_v2),var_41["stand"],animscripts/utility::array(%dying_crouch_2_back),var_41["crouch"],"killanimscript"); + return 1; + } + + if(!iscrawldeltaallowed(self.a.crawlingpaintransanim)) + { + return 0; + } + + if(self.health > 100) + { + return 0; + } + + var_01 = animscripts/utility::damagelocationisany("left_leg_upper","left_leg_lower","right_leg_upper","right_leg_lower","left_foot","right_foot"); + if(var_01 && self.health < self.maxhealth * 0.4) + { + if(gettime() < level.nextcrawlingpaintimefromlegdamage) + { + return 0; + } + } + else + { + if(level.numdeathsuntilcrawlingpain > 0) + { + return 0; + } + + if(gettime() < level.nextcrawlingpaintime) + { + return 0; + } + } + + if(isdefined(self.deathfunction)) + { + return 0; + } + + foreach(var_03 in level.players) + { + if(distance(self.origin,var_03.origin) < 175) + { + return 0; + } + } + + if(animscripts/utility::damagelocationisany("head","helmet","gun","right_hand","left_hand")) + { + return 0; + } + + if(animscripts/utility::usingsidearm()) + { + return 0; + } + + anim.nextcrawlingpaintime = gettime() + 3000; + anim.nextcrawlingpaintimefromlegdamage = gettime() + 3000; + thread crawlingpistol(); + self waittill("killanimscript"); + return 1; +} + +//Function Number: 23 +iscrawldeltaallowed(param_00) +{ + if(isdefined(self.a.force_num_crawls)) + { + return 1; + } + + var_01 = getmovedelta(param_00,0,1); + var_02 = self localtoworldcoords(var_01); + return self maymovetopoint(var_02); +} + +//Function Number: 24 +initcrawlingpistolanims() +{ + self.a.array = []; + self.a.array["stand_2_crawl"] = animscripts/utility::array(%dying_stand_2_crawl_v1,%dying_stand_2_crawl_v2,%dying_stand_2_crawl_v3); + self.a.array["crouch_2_crawl"] = animscripts/utility::array(%dying_crouch_2_crawl); + self.a.array["crawl"] = %dying_crawl; + self.a.array["death"] = animscripts/utility::array(%dying_crawl_death_v1,%dying_crawl_death_v2); + self.a.array["back_idle"] = %dying_back_idle; + self.a.array["back_idle_twitch"] = animscripts/utility::array(%dying_back_twitch_a,%dying_back_twitch_b); + self.a.array["back_crawl"] = %dying_crawl_back; + self.a.array["back_fire"] = %dying_back_fire; + self.a.array["back_death"] = animscripts/utility::array(%dying_back_death_v1,%dying_back_death_v2,%dying_back_death_v3); + if(isdefined(self.var_934)) + { + [[ self.var_934 ]](); + } +} + +//Function Number: 25 +crawlingpistol() +{ + self endon("kill_long_death"); + self endon("death"); + initcrawlingpistolanims(); + thread preventpainforashorttime("crawling"); + self.a.special = "none"; + self.specialdeathfunc = undefined; + thread paindeathnotify(); + level notify("ai_crawling",self); + thread func_093C(); + self setanimknoball(%dying,%body,1,0.1,1); + if(!dyingcrawl()) + { + return; + } + + self setflaggedanimknob("transition",self.a.crawlingpaintransanim,1,0.5,1); + animscripts/notetracks::donotetracksintercept("transition",::handlebackcrawlnotetracks); + self.a.special = "dying_crawl"; + thread dyingcrawlbackaim(); + if(isdefined(self.enemy)) + { + self setlookatentity(self.enemy); + } + + decidenumcrawls(); + while(shouldkeepcrawling()) + { + var_00 = animscripts/utility::animarray("back_crawl"); + if(!iscrawldeltaallowed(var_00)) + { + break; + } + + self setflaggedanimknobrestart("back_crawl",var_00,1,0.1,1); + animscripts/notetracks::donotetracksintercept("back_crawl",::handlebackcrawlnotetracks); + } + + self.desiredtimeofdeath = gettime() + randomintrange(4000,20000); + while(shouldstayalive()) + { + if(animscripts/utility::canseeenemy() && aimedsomewhatatenemy()) + { + var_01 = animscripts/utility::animarray("back_fire"); + self setflaggedanimknobrestart("back_idle_or_fire",var_01,1,0.2,1); + animscripts/shared::donotetracks("back_idle_or_fire"); + continue; + } + + var_01 = animscripts/utility::animarray("back_idle"); + if(randomfloat(1) < 0.4) + { + var_01 = animscripts/utility::animarraypickrandom("back_idle_twitch"); + } + + self setflaggedanimknobrestart("back_idle_or_fire",var_01,1,0.1,1); + var_02 = getanimlength(var_01); + while(var_02 > 0) + { + if(animscripts/utility::canseeenemy() && aimedsomewhatatenemy()) + { + break; + } + + var_03 = 0.5; + if(var_03 > var_02) + { + var_03 = var_02; + var_02 = 0; + continue; + } + + var_02 = var_02 - var_03; + animscripts/notetracks::donotetracksfortime(var_03,"back_idle_or_fire"); + } + } + + self notify("end_dying_crawl_back_aim"); + self clearanim(%dying_back_aim_4_wrapper,0.3); + self clearanim(%dying_back_aim_6_wrapper,0.3); + self.var_93B = animscripts/utility::animarraypickrandom("back_death"); + killwrapper(); + self.a.special = "none"; + self.specialdeathfunc = undefined; +} + +//Function Number: 26 +func_093C() +{ + if(self.team == "allies") + { + return; + } + + self endon("end_dying_crawl_back_aim"); + self waittill("death",var_00,var_01); + if(!isdefined(self) || !isdefined(var_00) || !isplayer(var_00)) + { + } +} + +//Function Number: 27 +shouldstayalive() +{ + if(!enemyisingeneraldirection(anglestoforward(self.angles))) + { + return 0; + } + + return gettime() < self.desiredtimeofdeath; +} + +//Function Number: 28 +dyingcrawl() +{ + if(!isdefined(self.forcelongdeath)) + { + if(self.a.var_911 == "prone") + { + return 1; + } + + if(self.a.movement == "stop") + { + if(randomfloat(1) < 0.4) + { + if(randomfloat(1) < 0.5) + { + return 1; + } + } + else if(abs(self.damageyaw) > 90) + { + return 1; + } + } + else if(abs(self getmotionangle()) > 90) + { + return 1; + } + } + + if(self.a.var_911 != "prone") + { + var_00 = animscripts/utility::animarraypickrandom(self.a.var_911 + "_2_crawl"); + if(!iscrawldeltaallowed(var_00)) + { + return 1; + } + + thread dyingcrawlbloodsmear(); + self setflaggedanimknob("falling",var_00,1,0.5,1); + animscripts/shared::donotetracks("falling"); + } + else + { + thread dyingcrawlbloodsmear(); + } + + self.a.crawlingpaintransanim = %dying_crawl_2_back; + self.a.special = "dying_crawl"; + decidenumcrawls(); + while(shouldkeepcrawling()) + { + var_01 = animscripts/utility::animarray("crawl"); + if(!iscrawldeltaallowed(var_01)) + { + return 1; + } + + if(isdefined(self.custom_crawl_sound)) + { + self playsound(self.custom_crawl_sound); + } + + self setflaggedanimknobrestart("crawling",var_01,1,0.1,1); + animscripts/shared::donotetracks("crawling"); + } + + self notify("done_crawling"); + if(!isdefined(self.forcelongdeath) && enemyisingeneraldirection(anglestoforward(self.angles) * -1)) + { + return 1; + } + + var_02 = animscripts/utility::animarraypickrandom("death"); + if(var_02 != %dying_crawl_death_v2) + { + self.a.nodeath = 1; + } + + animscripts/death::func_941(var_02); + killwrapper(); + self.a.special = "none"; + self.specialdeathfunc = undefined; + return 0; +} + +//Function Number: 29 +dyingcrawlbloodsmear() +{ + self endon("death"); + if(self.a.var_911 != "prone") + { + for(;;) + { + self waittill("falling",var_00); + if(issubstr(var_00,"bodyfall")) + { + break; + } + } + } + + var_01 = "J_SpineLower"; + var_02 = "tag_origin"; + var_03 = 0.25; + var_04 = level._effect["crawling_death_blood_smear"]; + if(isdefined(self.a.crawl_fx_rate)) + { + var_03 = self.a.crawl_fx_rate; + } + + if(isdefined(self.a.crawl_fx)) + { + var_04 = level._effect[self.a.crawl_fx]; + } + + while(var_03) + { + var_05 = self gettagorigin(var_01); + var_06 = self gettagangles(var_02); + var_07 = anglestoright(var_06); + var_08 = anglestoforward((270,0,0)); + playfx(var_04,var_05,var_08,var_07); + wait var_03; + } +} + +//Function Number: 30 +dyingcrawlbackaim() +{ + self endon("kill_long_death"); + self endon("death"); + self endon("end_dying_crawl_back_aim"); + if(isdefined(self.dyingcrawlaiming)) + { + return; + } + + self.dyingcrawlaiming = 1; + self setanimlimited(%dying_back_aim_4,1,0); + self setanimlimited(%dying_back_aim_6,1,0); + var_00 = 0; + for(;;) + { + var_01 = animscripts/utility::getyawtoenemy(); + var_02 = angleclamp180(var_01 - var_00); + if(abs(var_02) > 3) + { + var_02 = common_scripts\utility::sign(var_02) * 3; + } + + var_01 = angleclamp180(var_00 + var_02); + if(var_01 < 0) + { + if(var_01 < -45) + { + var_01 = -45; + } + + var_03 = var_01 / -45; + self setanim(%dying_back_aim_4_wrapper,var_03,0.05); + self setanim(%dying_back_aim_6_wrapper,0,0.05); + } + else + { + if(var_01 > 45) + { + var_01 = 45; + } + + var_03 = var_01 / 45; + self setanim(%dying_back_aim_6_wrapper,var_03,0.05); + self setanim(%dying_back_aim_4_wrapper,0,0.05); + } + + var_00 = var_01; + wait 0.05; + } +} + +//Function Number: 31 +startdyingcrawlbackaimsoon() +{ + self endon("kill_long_death"); + self endon("death"); + wait 0.5; + thread dyingcrawlbackaim(); +} + +//Function Number: 32 +handlebackcrawlnotetracks(param_00) +{ + if(param_00 == "fire_spray") + { + if(!animscripts/utility::canseeenemy()) + { + return 1; + } + + if(!aimedsomewhatatenemy()) + { + return 1; + } + + animscripts/utility::shootenemywrapper(); + return 1; + } + else if(param_00 == "pistol_pickup") + { + thread startdyingcrawlbackaimsoon(); + return 0; + } + + return 0; +} + +//Function Number: 33 +aimedsomewhatatenemy() +{ + var_00 = self.enemy getshootatpos(); + var_01 = self getmuzzleangle(); + var_02 = vectortoangles(var_00 - self getmuzzlepos()); + var_03 = animscripts/utility::absangleclamp180(var_01[1] - var_02[1]); + if(var_03 > level.painyawdifffartolerance) + { + if(distancesquared(self geteye(),var_00) > level.painyawdiffclosedistsq || var_03 > level.painyawdiffclosetolerance) + { + return 0; + } + } + + return animscripts/utility::absangleclamp180(var_01[0] - var_02[0]) <= level.painpitchdifftolerance; +} + +//Function Number: 34 +enemyisingeneraldirection(param_00) +{ + if(!isdefined(self.enemy)) + { + return 0; + } + + var_01 = vectornormalize(self.enemy getshootatpos() - self geteye()); + return vectordot(var_01,param_00) > 0.5; +} + +//Function Number: 35 +preventpainforashorttime(param_00) +{ + self endon("kill_long_death"); + self endon("death"); + self.flashbangimmunity = 1; + self.longdeathstarting = 1; + self.a.doinglongdeath = 1; + self notify("long_death"); + self.health = 10000; + self.threatbias = self.threatbias - 2000; + wait 0.75; + if(self.health > 1) + { + self.health = 1; + } + + wait 0.05; + self.longdeathstarting = undefined; + self.a.mayonlydie = 1; + if(param_00 == "crawling") + { + wait 1; + if(isdefined(level.player) && distancesquared(self.origin,level.player.origin) < 1048576) + { + anim.numdeathsuntilcrawlingpain = randomintrange(10,30); + anim.nextcrawlingpaintime = gettime() + randomintrange(15000,-5536); + } + else + { + anim.numdeathsuntilcrawlingpain = randomintrange(5,12); + anim.nextcrawlingpaintime = gettime() + randomintrange(5000,25000); + } + + anim.nextcrawlingpaintimefromlegdamage = gettime() + randomintrange(7000,13000); + return; + } + + if(param_00 == "corner_grenade") + { + wait 1; + if(isdefined(level.player) && distancesquared(self.origin,level.player.origin) < 490000) + { + anim.numdeathsuntilcornergrenadedeath = randomintrange(10,30); + anim.nextcornergrenadedeathtime = gettime() + randomintrange(15000,-5536); + return; + } + + anim.numdeathsuntilcornergrenadedeath = randomintrange(5,12); + anim.nextcornergrenadedeathtime = gettime() + randomintrange(5000,25000); + return; + } +} + +//Function Number: 36 +decidenumcrawls() +{ + if(isdefined(self.a.force_num_crawls)) + { + self.a.numcrawls = self.a.force_num_crawls; + return; + } + + self.a.numcrawls = randomintrange(1,5); +} + +//Function Number: 37 +shouldkeepcrawling() +{ + if(!self.a.numcrawls) + { + self.a.numcrawls = undefined; + return 0; + } + + self.a.numcrawls--; + return 1; +} + +//Function Number: 38 +func_095B() +{ + if(level.numdeathsuntilcornergrenadedeath > 0) + { + return 0; + } + + if(gettime() < level.nextcornergrenadedeathtime) + { + return 0; + } + + if(self.a.disablelongdeath || self.diequietly || self.damageshield) + { + return 0; + } + + if(isdefined(self.deathfunction)) + { + return 0; + } + + if(distance(self.origin,level.player.origin) < 175) + { + return 0; + } + + anim.nextcornergrenadedeathtime = gettime() + 3000; + thread cornerrightgrenadedeath(); + self waittill("killanimscript"); + return 1; +} + +//Function Number: 39 +cornerrightgrenadedeath() +{ + self endon("kill_long_death"); + self endon("death"); + thread paindeathnotify(); + thread preventpainforashorttime("corner_grenade"); + thread maps\_utility::func_95D(0); + self.threatbias = -1000; + self setflaggedanimknoballrestart("corner_grenade_pain",%corner_standr_death_grenade_hit,%body,1,0.1); + self waittillmatch("dropgun","corner_grenade_pain"); + animscripts/shared::dropallaiweapons(); + self waittillmatch("anim_pose = \"back\","corner_grenade_pain"); + animscripts/notetracks::notetrackposeback(); + self waittillmatch("grenade_left","corner_grenade_pain"); + var_00 = getweaponmodel("fraggrenade"); + self attach(var_00,"tag_inhand"); + self.deathfunction = ::prematurecornergrenadedeath; + self waittillmatch("end","corner_grenade_pain"); + var_01 = gettime() + randomintrange(25000,-5536); + self setflaggedanimknoballrestart("corner_grenade_idle",%corner_standr_death_grenade_idle,%body,1,0.2); + thread watchenemyvelocity(); + while(!enemyisapproaching()) + { + if(gettime() >= var_01) + { + break; + } + + animscripts/notetracks::donotetracksfortime(0.1,"corner_grenade_idle"); + } + + var_02 = %corner_standr_death_grenade_slump; + self setflaggedanimknoballrestart("corner_grenade_release",var_02,%body,1,0.2); + var_03 = getnotetracktimes(var_02,"grenade_drop"); + var_04 = var_03[0] * getanimlength(var_02); + wait var_04 - 1; + animscripts/death::playdeathsound(); + wait 0.7; + self.deathfunction = ::waittillgrenadedrops; + var_05 = (0,0,30) - anglestoright(self.angles) * 70; + cornerdeathreleasegrenade(var_05,randomfloatrange(2,3)); + wait 0.05; + self detach(var_00,"tag_inhand"); + thread killself(); +} + +//Function Number: 40 +cornerdeathreleasegrenade(param_00,param_01) +{ + var_02 = self gettagorigin("tag_inhand"); + var_03 = var_02 + (0,0,20); + var_04 = var_02 - (0,0,20); + var_05 = bullettrace(var_03,var_04,0,undefined); + if(var_05["fraction"] < 0.5) + { + var_02 = var_05["position"]; + } + + var_06 = "default"; + if(var_05["surfacetype"] != "none") + { + var_06 = var_05["surfacetype"]; + } + + thread playsoundatpoint("grenade_bounce_" + var_06,var_02); + self.grenadeweapon = "fraggrenade"; + self magicgrenademanual(var_02,param_00,param_01); +} + +//Function Number: 41 +playsoundatpoint(param_00,param_01) +{ + var_02 = spawn("script_origin",param_01); + var_02 playsound(param_00,"sounddone"); + var_02 waittill("sounddone"); + var_02 delete(); +} + +//Function Number: 42 +killself() +{ + self.a.nodeath = 1; + killwrapper(); + self startragdoll(); + wait 0.1; + self notify("grenade_drop_done"); +} + +//Function Number: 43 +killwrapper() +{ + if(isdefined(self.last_dmg_player)) + { + self kill(self.origin,self.last_dmg_player); + return; + } + + self kill(); +} + +//Function Number: 44 +enemyisapproaching() +{ + if(!isdefined(self.enemy)) + { + return 0; + } + + if(distancesquared(self.origin,self.enemy.origin) > 147456) + { + return 0; + } + + if(distancesquared(self.origin,self.enemy.origin) < 16384) + { + return 1; + } + + var_00 = self.enemy.origin + self.enemyvelocity * 3; + var_01 = self.enemy.origin; + if(self.enemy.origin != var_00) + { + var_01 = pointonsegmentnearesttopoint(self.enemy.origin,var_00,self.origin); + } + + if(distancesquared(self.origin,var_01) < 16384) + { + return 1; + } + + return 0; +} + +//Function Number: 45 +prematurecornergrenadedeath() +{ + var_00 = animscripts/utility::array(%dying_back_death_v1,%dying_back_death_v2,%dying_back_death_v3,%dying_back_death_v4); + var_01 = var_00[randomint(var_00.size)]; + animscripts/death::playdeathsound(); + self setflaggedanimknoballrestart("corner_grenade_die",var_01,%body,1,0.2); + var_02 = animscripts/combat_utility::getgrenadedropvelocity(); + cornerdeathreleasegrenade(var_02,3); + var_03 = getweaponmodel("fraggrenade"); + self detach(var_03,"tag_inhand"); + wait 0.05; + self startragdoll(); + self waittillmatch("end","corner_grenade_die"); +} + +//Function Number: 46 +waittillgrenadedrops() +{ + self waittill("grenade_drop_done"); +} + +//Function Number: 47 +watchenemyvelocity() +{ + self endon("kill_long_death"); + self endon("death"); + self.enemyvelocity = (0,0,0); + var_00 = undefined; + var_01 = self.origin; + var_02 = 0.15; + for(;;) + { + if(isdefined(self.enemy) && isdefined(var_00) && self.enemy == var_00) + { + var_03 = self.enemy.origin; + self.enemyvelocity = var_03 - var_01 * 1 / var_02; + var_01 = var_03; + } + else + { + if(isdefined(self.enemy)) + { + var_01 = self.enemy.origin; + } + else + { + var_01 = self.origin; + } + + var_00 = self.enemy; + self.var_96C = (0,0,0); + } + + wait var_02; + } +} + +//Function Number: 48 +additive_pain(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + self endon("death"); + if(!isdefined(self)) + { + return; + } + + if(isdefined(self.doingadditivepain)) + { + return; + } + + if(param_00 < self.minpaindamage) + { + return; + } + + self.doingadditivepain = 1; + var_07 = animscripts/utility::array(%pain_add_standing_belly,%pain_add_standing_left_arm,%pain_add_standing_right_arm); + var_08 = %pain_add_standing_belly; + if(animscripts/utility::damagelocationisany("left_arm_lower","left_arm_upper","left_hand")) + { + var_08 = %pain_add_standing_left_arm; + } + + if(animscripts/utility::damagelocationisany("right_arm_lower","right_arm_upper","right_hand")) + { + var_08 = %pain_add_standing_right_arm; + } + else if(animscripts/utility::damagelocationisany("left_leg_upper","left_leg_lower","left_foot")) + { + var_08 = %pain_add_standing_left_leg; + } + else if(animscripts/utility::damagelocationisany("right_leg_upper","right_leg_lower","right_foot")) + { + var_08 = %pain_add_standing_right_leg; + } + else + { + var_08 = var_07[randomint(var_07.size)]; + } + + self setanimlimited(%add_pain,1,0.1,1); + self setanimlimited(var_08,1,0,1); + wait 0.4; + self clearanim(var_08,0.2); + self clearanim(%add_pain,0.2); + self.doingadditivepain = undefined; +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/reactions.gsc b/MW3/Xbox/SP/animscripts/reactions.gsc new file mode 100644 index 0000000..eea88f6 --- /dev/null +++ b/MW3/Xbox/SP/animscripts/reactions.gsc @@ -0,0 +1,284 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\reactions.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 11 + * Decompile Time: 194 ms + * Timestamp: 10/27/2023 2:30:39 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self endon("killanimscript"); + animscripts/utility::initialize("reactions"); + newenemysurprisedreaction(); +} + +//Function Number: 2 +func_0B07() +{ + anim.runningreacttobullets = []; + level.runningreacttobullets[level.runningreacttobullets.size] = %run_react_duck; + level.runningreacttobullets[level.runningreacttobullets.size] = %run_react_flinch; + level.runningreacttobullets[level.runningreacttobullets.size] = %run_react_stumble; + anim.lastrunningreactanim = 0; + anim.coverreactions = []; + level.coverreactions["cover_stand"] = animscripts/utility::array(%stand_cover_reaction_a,%stand_cover_reaction_b); + level.coverreactions["cover_crouch"] = animscripts/utility::array(%crouch_cover_reaction_a,%crouch_cover_reaction_b); + level.coverreactions["cover_left"] = animscripts/utility::array(%cornerstndl_react_a); + level.coverreactions["cover_right"] = animscripts/utility::array(%cornerstndr_react_a); +} + +//Function Number: 3 +reactionscheckloop() +{ + thread func_0B12(); +} + +//Function Number: 4 +func_0B0C() +{ + return !isdefined(self.lastreacttime) || gettime() - self.lastreacttime > 2000; +} + +//Function Number: 5 +func_0B0E() +{ + self endon("killanimscript"); + self.lastreacttime = gettime(); + self.a.movement = "stop"; + var_00 = isdefined(self.whizbyenemy) && distancesquared(self.origin,self.whizbyenemy.origin) < 160000; + self animmode("gravity"); + self orientmode("face current"); + if(var_00 || common_scripts\utility::cointoss()) + { + self clearanim(%root,0.1); + var_01 = []; + var_02 = var_41[randomint(var_41.size)]; + if(var_01) + { + var_03 = 1 + randomfloat(0.5); + } + else + { + var_03 = 0.2 + randomfloat(0.5); + } + + self setflaggedanimknobrestart("reactanim",var_02,1,0.1,1); + animscripts/notetracks::donotetracksfortime(var_03,"reactanim"); + self clearanim(%root,0.1); + if(!var_01 && self.stairsstate == "none" && !isdefined(self.disable_dive_whizby_react)) + { + var_04 = 1 + randomfloat(0.2); + var_05 = animscripts/utility::randomanimoftwo(%exposed_dive_grenade_b,%exposed_dive_grenade_f); + self setflaggedanimknobrestart("dive",var_05,1,0.1,var_04); + animscripts/shared::donotetracks("dive"); + } + } + else + { + wait randomfloat(0.2); + var_04 = 1.2 + randomfloat(0.3); + if(self.a.var_911 == "stand") + { + self clearanim(%root,0.1); + self setflaggedanimknobrestart("crouch",%exposed_stand_2_crouch,1,0.1,var_04); + animscripts/shared::donotetracks("crouch"); + } + + var_06 = anglestoforward(self.angles); + if(isdefined(self.whizbyenemy)) + { + var_07 = vectornormalize(self.whizbyenemy.origin - self.origin); + } + else + { + var_07 = var_07; + } + + if(vectordot(var_07,var_06) > 0) + { + var_08 = animscripts/utility::randomanimoftwo(%exposed_crouch_idle_twitch_v2,%exposed_crouch_idle_twitch_v3); + self clearanim(%root,0.1); + self setflaggedanimknobrestart("twitch",var_08,1,0.1,1); + animscripts/shared::donotetracks("twitch"); + } + else + { + var_09 = animscripts/utility::randomanimoftwo(%exposed_crouch_turn_180_left,%exposed_crouch_turn_180_right); + self clearanim(%root,0.1); + self setflaggedanimknobrestart("turn",var_09,1,0.1,1); + animscripts/shared::donotetracks("turn"); + } + } + + self clearanim(%root,0.1); + self.whizbyenemy = undefined; + self animmode("normal"); + self orientmode("face default"); +} + +//Function Number: 6 +func_0B12() +{ + self endon("killanimscript"); + if(isdefined(self.disablebulletwhizbyreaction)) + { + return; + } + + for(;;) + { + self waittill("bulletwhizby",var_00); + if(!isdefined(var_00.team) || self.team == var_00.team) + { + continue; + } + + if(isdefined(self.covernode) || isdefined(self.ambushnode)) + { + continue; + } + + if(self.a.var_911 != "stand") + { + continue; + } + + if(!func_0B0C()) + { + continue; + } + + self.whizbyenemy = var_00; + self animcustom(::func_0B0E); + } +} + +//Function Number: 7 +clearlookatthread() +{ + self endon("killanimscript"); + wait 0.3; + self setlookatentity(); +} + +//Function Number: 8 +func_0B14() +{ + var_00 = undefined; + if(self nearclaimnodeandangle() && isdefined(level.coverreactions[self.prevscript])) + { + var_01 = anglestoforward(self.node.angles); + var_02 = vectornormalize(self.reactiontargetpos - self.origin); + if(vectordot(var_01,var_02) < -0.5) + { + self orientmode("face current"); + var_03 = randomint(level.coverreactions[self.prevscript].size); + var_00 = level.coverreactions[self.prevscript][var_03]; + } + } + + if(!isdefined(var_00)) + { + var_04 = []; + if(isdefined(self.enemy) && distancesquared(self.enemy.origin,self.reactiontargetpos) < 65536) + { + self orientmode("face enemy"); + } + else + { + self orientmode("face point",self.reactiontargetpos); + } + + if(self.a.var_911 == "crouch") + { + var_02 = vectornormalize(self.reactiontargetpos - self.origin); + var_05 = anglestoforward(self.angles); + if(vectordot(var_05,var_02) < -0.5) + { + self orientmode("face current"); + var_41[0] = %crouch_cover_reaction_a; + var_41[1] = %crouch_cover_reaction_b; + } + } + + var_04 = var_41[randomint(var_41.size)]; + } + + return var_04; +} + +//Function Number: 9 +func_0B15() +{ + self clearanim(%root,0.2); + if(randomint(4) < 3) + { + self orientmode("face enemy"); + self setflaggedanimknobrestart("reactanim",%exposed_idle_reactb,1,0.2,1); + var_00 = getanimlength(%exposed_idle_reactb); + animscripts/notetracks::donotetracksfortime(var_00 * 0.8,"reactanim"); + self orientmode("face current"); + return; + } + + self orientmode("face enemy"); + self setflaggedanimknobrestart("reactanim",%exposed_backpedal,1,0.2,1); + var_00 = getanimlength(%exposed_backpedal); + animscripts/notetracks::donotetracksfortime(var_00 * 0.8,"reactanim"); + self orientmode("face current"); + self clearanim(%root,0.2); + self setflaggedanimknobrestart("reactanim",%exposed_backpedal_v2,1,0.2,1); + animscripts/shared::donotetracks("reactanim"); +} + +//Function Number: 10 +newenemyreactionanim() +{ + self endon("death"); + self endon("endNewEnemyReactionAnim"); + self.lastreacttime = gettime(); + self.a.movement = "stop"; + if(isdefined(self._stealth) && self.alertlevel != "combat") + { + func_0B15(); + } + else + { + var_00 = func_0B14(); + self clearanim(%root,0.2); + self setflaggedanimknobrestart("reactanim",var_00,1,0.2,1); + animscripts/shared::donotetracks("reactanim"); + } + + self notify("newEnemyReactionDone"); +} + +//Function Number: 11 +newenemysurprisedreaction() +{ + self endon("death"); + if(isdefined(self.var_B18)) + { + return; + } + + if(!func_0B0C()) + { + return; + } + + if(self.a.var_911 == "prone" || isdefined(self.a.onback)) + { + return; + } + + self animmode("gravity"); + if(isdefined(self.enemy)) + { + newenemyreactionanim(); + } +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/run.gsc b/MW3/Xbox/SP/animscripts/run.gsc new file mode 100644 index 0000000..a319d56 --- /dev/null +++ b/MW3/Xbox/SP/animscripts/run.gsc @@ -0,0 +1,967 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\run.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 43 + * Decompile Time: 743 ms + * Timestamp: 10/27/2023 2:30:42 AM +*******************************************************************/ + +//Function Number: 1 +moverun() +{ + var_00 = [[ self.chooseposefunc ]]("stand"); + switch(var_00) + { + case "stand": + if(animscripts/setposemovement::beginstandrun()) + { + return; + } + + if(isdefined(self.run_overrideanim)) + { + animscripts/move::movestandmoveoverride(self.run_overrideanim,self.var_BA8); + return; + } + + if(changeweaponstandrun()) + { + return; + } + + if(reloadstandrun()) + { + return; + } + + if(animscripts/utility::isincombat()) + { + movestandcombatnormal(); + } + else + { + movestandnoncombatnormal(); + } + break; + + case "crouch": + if(animscripts/setposemovement::begincrouchrun()) + { + return; + } + + if(isdefined(self.crouchrun_combatanim)) + { + movecrouchrunoverride(); + } + else + { + movecrouchrunnormal(); + } + break; + + default: + if(animscripts/setposemovement::beginpronerun()) + { + return; + } + + pronecrawl(); + break; + } +} + +//Function Number: 2 +getrunanim() +{ + if(!isdefined(self.a.moveanimset)) + { + return %run_lowready_f; + } + + if(!self.facemotion) + { + if(self.stairsstate == "none" || abs(self getmotionangle()) > 45) + { + return animscripts/utility::moveanim("move_f"); + } + } + + if(self.stairsstate == "up") + { + return animscripts/utility::moveanim("stairs_up"); + } + else if(self.stairsstate == "down") + { + return animscripts/utility::moveanim("stairs_down"); + } + + return animscripts/utility::moveanim("straight"); +} + +//Function Number: 3 +getcrouchrunanim() +{ + if(!isdefined(self.a.moveanimset)) + { + return %crouch_fastwalk_f; + } + + return animscripts/utility::moveanim("crouch"); +} + +//Function Number: 4 +pronecrawl() +{ + self.a.movement = "run"; + self setflaggedanimknob("runanim",animscripts/utility::moveanim("prone"),1,0.3,self.moveplaybackrate); + animscripts/notetracks::donotetracksfortime(0.25,"runanim"); +} + +//Function Number: 5 +initrunngun() +{ + if(!isdefined(self.runngun)) + { + self notify("stop_move_anim_update"); + self.update_move_anim_type = undefined; + self clearanim(%combatrun_backward,0.2); + self clearanim(%combatrun_right,0.2); + self clearanim(%combatrun_left,0.2); + self clearanim(%w_aim_2,0.2); + self clearanim(%w_aim_4,0.2); + self clearanim(%w_aim_6,0.2); + self clearanim(%w_aim_8,0.2); + self.runngun = 1; + } +} + +//Function Number: 6 +func_0BB5() +{ + if(isdefined(self.runngun)) + { + self clearanim(%run_n_gun,0.2); + self.runngun = undefined; + } + + return 0; +} + +//Function Number: 7 +runngun(param_00) +{ + if(param_00) + { + var_01 = func_0BD7(0.2); + var_02 = var_01 < 0; + } + else + { + var_01 = 0; + var_02 = self.runngunweight < 0; + } + + var_03 = 1 - var_02; + var_04 = self.maxrunngunangle; + var_05 = self.runnguntransitionpoint; + var_06 = self.runngunincrement; + if(!param_00 || squared(var_01) > var_04 * var_04) + { + self clearanim(%add_fire,0); + if(squared(self.runngunweight) < var_06 * var_06) + { + self.runngunweight = 0; + self.runngun = undefined; + return 0; + } + else if(self.runngunweight > 0) + { + self.runngunweight = self.runngunweight - var_06; + } + else + { + self.runngunweight = self.runngunweight + var_06; + } + } + else + { + var_07 = var_01 / var_04; + var_08 = var_07 - self.runngunweight; + if(abs(var_08) < var_05 * 0.7) + { + self.runngunweight = var_07; + } + else if(var_08 > 0) + { + self.runngunweight = self.runngunweight + var_06; + } + else + { + self.runngunweight = self.runngunweight - var_06; + } + } + + initrunngun(); + var_09 = abs(self.runngunweight); + if(var_09 > var_05) + { + var_0A = var_09 - var_05 / var_05; + var_0A = clamp(var_0A,0,1); + self clearanim(self.runngunanims["F"],0.2); + self setanimlimited(self.runngunanims["L"],1 - var_0A * var_02,0.2); + self setanimlimited(self.runngunanims["R"],1 - var_0A * var_03,0.2); + self setanimlimited(self.runngunanims["LB"],var_0A * var_02,0.2); + self setanimlimited(self.runngunanims["RB"],var_0A * var_03,0.2); + } + else + { + var_0A = clamp(var_0A / var_06,0,1); + self setanimlimited(self.runngunanims["F"],1 - var_0A,0.2); + self setanimlimited(self.runngunanims["L"],var_0A * var_02,0.2); + self setanimlimited(self.runngunanims["R"],var_0A * var_03,0.2); + if(var_05 < 1) + { + self clearanim(self.runngunanims["LB"],0.2); + self clearanim(self.runngunanims["RB"],0.2); + } + } + + self setflaggedanimknob("runanim",%run_n_gun,1,0.3,0.8); + self.a.allowedpartialreloadontheruntime = gettime() + 500; + if(param_00 && isplayer(self.enemy)) + { + self updateplayersightaccuracy(); + } + + return 1; +} + +//Function Number: 8 +runngun_backward() +{ + initrunngun(); + self setflaggedanimknob("runanim",%combatwalk_b,1,0.3,0.8); + if(isplayer(self.enemy)) + { + self updateplayersightaccuracy(); + } + + animscripts/notetracks::donotetracksfortime(0.2,"runanim"); + thread stopshootwhilemovingthreads(); + self clearanim(%combatwalk_b,0.2); +} + +//Function Number: 9 +reacttobulletsinterruptcheck() +{ + self endon("killanimscript"); + for(;;) + { + wait 0.2; + if(!isdefined(self.reactingtobullet)) + { + break; + } + + if(!isdefined(self.pathgoalpos) || distancesquared(self.pathgoalpos,self.origin) < squared(80)) + { + func_0BBB(); + self notify("interrupt_react_to_bullet"); + break; + } + } +} + +//Function Number: 10 +func_0BBB() +{ + self orientmode("face default"); + self.reactingtobullet = undefined; + self.requestreacttobullet = undefined; +} + +//Function Number: 11 +runningreacttobullets() +{ + self.var_BBD = undefined; + self notify("end_face_enemy_tracking"); + self endon("interrupt_react_to_bullet"); + self.reactingtobullet = 1; + self orientmode("face motion"); + var_00 = randomint(level.runningreacttobullets.size); + if(var_00 == level.lastrunningreactanim) + { + var_00 = var_00 + 1 % level.runningreacttobullets.size; + } + + anim.lastrunningreactanim = var_00; + var_01 = level.runningreacttobullets[var_00]; + self setflaggedanimknobrestart("reactanim",var_01,1,0.5); + thread reacttobulletsinterruptcheck(); + animscripts/shared::donotetracks("reactanim"); + func_0BBB(); +} + +//Function Number: 12 +customrunningreacttobullets() +{ + self.var_BBD = undefined; + self notify("end_face_enemy_tracking"); + self.reactingtobullet = 1; + self orientmode("face motion"); + var_00 = randomint(self.run_overridebulletreact.size); + var_01 = self.run_overridebulletreact[var_00]; + self setflaggedanimknobrestart("reactanim",var_01,1,0.5); + thread reacttobulletsinterruptcheck(); + animscripts/shared::donotetracks("reactanim"); + func_0BBB(); +} + +//Function Number: 13 +getsprintanim() +{ + var_00 = undefined; + if(isdefined(self.grenade)) + { + var_00 = animscripts/utility::moveanim("sprint_short"); + } + + if(!isdefined(var_00)) + { + var_00 = animscripts/utility::moveanim("sprint"); + } + + return var_00; +} + +//Function Number: 14 +func_0BC1() +{ + if(isdefined(self.sprint)) + { + return 1; + } + + if(isdefined(self.grenade) && isdefined(self.enemy) && self.frontshieldanglecos == 1) + { + return distancesquared(self.origin,self.enemy.origin) > 90000; + } + + return 0; +} + +//Function Number: 15 +shouldsprintforvariation() +{ + if(isdefined(self.neversprintforvariation)) + { + return 0; + } + + if(!self.facemotion || self.stairsstate != "none") + { + return 0; + } + + var_00 = gettime(); + if(isdefined(self.dangersprinttime)) + { + if(var_00 < self.dangersprinttime) + { + return 1; + } + + if(var_00 - self.dangersprinttime < 6000) + { + return 0; + } + } + + if(!isdefined(self.enemy) || !issentient(self.enemy)) + { + return 0; + } + + if(randomint(100) < 25 && self lastknowntime(self.enemy) + 2000 > var_00) + { + self.dangersprinttime = var_00 + 2000 + randomint(1000); + return 1; + } + + return 0; +} + +//Function Number: 16 +getmoveplaybackrate() +{ + var_00 = self.moveplaybackrate; + if(self.lookaheadhitsstairs && self.stairsstate == "none" && self.lookaheaddist < 300) + { + var_00 = var_00 * 0.75; + } + + return var_00; +} + +//Function Number: 17 +movestandcombatnormal() +{ + var_00 = getmoveplaybackrate(); + self setanimknob(%combatrun,1,0.5,var_00); + var_01 = 0; + if(isdefined(self.requestreacttobullet) && gettime() - self.requestreacttobullet < 100 && randomfloat(1) < self.a.reacttobulletchance) + { + func_0BB5(); + runningreacttobullets(); + return; + } + + if(func_0BC1()) + { + self setflaggedanimknob("runanim",getsprintanim(),1,0.5); + var_01 = 1; + } + else if(isdefined(self.enemy) && animscripts/move::mayshootwhilemoving()) + { + runshootwhilemovingthreads(); + if(!self.facemotion) + { + thread faceenemyaimtracking(); + } + else if(self.shootstyle != "none" && !isdefined(self.norunngun)) + { + self notify("end_face_enemy_tracking"); + self.var_BBD = undefined; + if(canshootwhilerunningforward()) + { + var_01 = runngun(1); + } + else if(func_0BD5()) + { + runngun_backward(); + return; + } + } + else if(isdefined(self.runngunweight) && self.runngunweight != 0) + { + var_01 = runngun(0); + } + } + else if(isdefined(self.runngunweight) && self.runngunweight != 0) + { + var_01 = runngun(0); + } + + if(!var_01) + { + func_0BB5(); + if(isdefined(self.requestreacttobullet) && gettime() - self.requestreacttobullet < 100 && self.a.reacttobulletchance != 0) + { + runningreacttobullets(); + return; + } + + if(shouldsprintforvariation()) + { + var_02 = animscripts/utility::moveanim("sprint_short"); + } + else + { + var_02 = getrunanim(); + } + + self setflaggedanimknoblimited("runanim",var_02,1,0.1,1,1); + setmovenonforwardanims(animscripts/utility::moveanim("move_b"),animscripts/utility::moveanim("move_l"),animscripts/utility::moveanim("move_r"),self.sidesteprate); + thread setcombatstandmoveanimweights("run"); + } + + animscripts/notetracks::donotetracksfortime(0.2,"runanim"); + thread stopshootwhilemovingthreads(); +} + +//Function Number: 18 +faceenemyaimtracking() +{ + self notify("want_aim_while_moving"); + if(isdefined(self.var_BBD)) + { + return; + } + + self.var_BBD = 1; + self endon("killanimscript"); + self endon("end_face_enemy_tracking"); + self setdefaultaimlimits(); + if(!isdefined(self.combatstandanims) || !isdefined(self.combatstandanims["walk_aims"])) + { + self setanimlimited(%walk_aim_2); + self setanimlimited(%walk_aim_4); + self setanimlimited(%walk_aim_6); + self setanimlimited(%walk_aim_8); + } + else + { + self setanimlimited(self.combatstandanims["walk_aims"]["walk_aim_2"]); + self setanimlimited(self.combatstandanims["walk_aims"]["walk_aim_4"]); + self setanimlimited(self.combatstandanims["walk_aims"]["walk_aim_6"]); + self setanimlimited(self.combatstandanims["walk_aims"]["walk_aim_8"]); + } + + animscripts/track::trackloop(%w_aim_2,%w_aim_4,%w_aim_6,%w_aim_8); +} + +//Function Number: 19 +endfaceenemyaimtracking() +{ + self.var_BBD = undefined; + self notify("end_face_enemy_tracking"); +} + +//Function Number: 20 +runshootwhilemovingthreads() +{ + self notify("want_shoot_while_moving"); + if(isdefined(self.shoot_while_moving_thread)) + { + return; + } + + self.shoot_while_moving_thread = 1; + thread rundecidewhatandhowtoshoot(); + thread runshootwhilemoving(); +} + +//Function Number: 21 +stopshootwhilemovingthreads() +{ + self endon("killanimscript"); + self endon("want_shoot_while_moving"); + self endon("want_aim_while_moving"); + wait 0.05; + self notify("end_shoot_while_moving"); + self notify("end_face_enemy_tracking"); + self.shoot_while_moving_thread = undefined; + self.var_BBD = undefined; + self.runngun = undefined; +} + +//Function Number: 22 +rundecidewhatandhowtoshoot() +{ + self endon("killanimscript"); + self endon("end_shoot_while_moving"); + animscripts/shoot_behavior::decidewhatandhowtoshoot("normal"); +} + +//Function Number: 23 +runshootwhilemoving() +{ + self endon("killanimscript"); + self endon("end_shoot_while_moving"); + animscripts/move::shootwhilemoving(); +} + +//Function Number: 24 +aimedsomewhatatenemy() +{ + var_00 = self getmuzzleangle(); + var_01 = vectortoangles(self.enemy getshootatpos() - self getmuzzlepos()); + if(animscripts/utility::absangleclamp180(var_00[1] - var_01[1]) > 15) + { + return 0; + } + + return animscripts/utility::absangleclamp180(var_00[0] - var_01[0]) <= 20; +} + +//Function Number: 25 +canshootwhilerunningforward() +{ + if((!isdefined(self.runngunweight) || self.runngunweight == 0) && abs(self getmotionangle()) > self.maxrunngunangle) + { + return 0; + } + + return 1; +} + +//Function Number: 26 +func_0BD5() +{ + if(180 - abs(self getmotionangle()) >= 45) + { + return 0; + } + + var_00 = func_0BD7(0.2); + if(abs(var_00) > 30) + { + return 0; + } + + return 1; +} + +//Function Number: 27 +func_0BD6() +{ + return animscripts/move::mayshootwhilemoving() && isdefined(self.enemy) && canshootwhilerunningforward() || func_0BD5(); +} + +//Function Number: 28 +func_0BD7(param_00) +{ + var_01 = self.origin; + var_02 = self.angles[1] + self getmotionangle(); + var_01 = var_01 + (cos(var_02),sin(var_02),0) * length(self.velocity) * param_00; + var_03 = self.angles[1] - vectortoyaw(self.enemy.origin - var_01); + var_03 = angleclamp180(var_03); + return var_03; +} + +//Function Number: 29 +movestandnoncombatnormal() +{ + self endon("movemode"); + self clearanim(%combatrun,0.6); + var_00 = getmoveplaybackrate(); + self setanimknoball(%combatrun,%body,1,0.2,var_00); + if(func_0BC1()) + { + var_01 = getsprintanim(); + } + else + { + var_01 = getrunanim(); + } + + if(self.stairsstate == "none") + { + var_02 = 0.3; + } + else + { + var_02 = 0.1; + } + + self setflaggedanimknob("runanim",var_01,1,var_02,1,1); + setmovenonforwardanims(animscripts/utility::moveanim("move_b"),animscripts/utility::moveanim("move_l"),animscripts/utility::moveanim("move_r")); + thread setcombatstandmoveanimweights("run"); + animscripts/notetracks::donotetracksfortime(0.2,"runanim"); +} + +//Function Number: 30 +movecrouchrunoverride() +{ + self endon("movemode"); + self setflaggedanimknoball("runanim",self.crouchrun_combatanim,%body,1,0.4,self.moveplaybackrate); + animscripts/shared::donotetracks("runanim"); +} + +//Function Number: 31 +movecrouchrunnormal() +{ + self endon("movemode"); + var_00 = getcrouchrunanim(); + self setanimknob(var_00,1,0.4); + thread updatemoveanimweights("crouchrun",var_00,%crouch_fastwalk_b,%crouch_fastwalk_l,%crouch_fastwalk_r); + self setflaggedanimknoball("runanim",%crouchrun,%body,1,0.2,self.moveplaybackrate); + animscripts/notetracks::donotetracksfortime(0.2,"runanim"); +} + +//Function Number: 32 +reloadstandrun() +{ + var_00 = isdefined(self.a.allowedpartialreloadontheruntime) && self.a.allowedpartialreloadontheruntime > gettime(); + var_00 = var_00 || isdefined(self.enemy) && distancesquared(self.origin,self.enemy.origin) < 65536; + if(var_00) + { + if(!animscripts/combat_utility::needtoreload(0)) + { + return 0; + } + } + else if(!animscripts/combat_utility::needtoreload(0.5)) + { + return 0; + } + + if(isdefined(self.grenade)) + { + return 0; + } + + if(!self.facemotion || self.stairsstate != "none") + { + return 0; + } + + if(isdefined(self.dontshootwhilemoving) || isdefined(self.norunreload)) + { + return 0; + } + + if(func_0BD6() && !animscripts/combat_utility::needtoreload(0)) + { + return 0; + } + + if(!isdefined(self.pathgoalpos) || distancesquared(self.origin,self.pathgoalpos) < 65536) + { + return 0; + } + + var_01 = angleclamp180(self getmotionangle()); + if(abs(var_01) > 25) + { + return 0; + } + + if(!animscripts/utility::usingriflelikeweapon()) + { + return 0; + } + + if(!runloopisnearbeginning()) + { + return 0; + } + + reloadstandruninternal(); + self notify("abort_reload"); + self orientmode("face default"); + return 1; +} + +//Function Number: 33 +reloadstandruninternal() +{ + self endon("movemode"); + self orientmode("face motion"); + var_00 = "reload_" + animscripts/combat_utility::getuniqueflagnameindex(); + self setflaggedanimknoballrestart(var_00,%run_lowready_reload,%body,1,0.25); + self.var_BE0 = 1; + setmovenonforwardanims(animscripts/utility::moveanim("move_b"),animscripts/utility::moveanim("move_l"),animscripts/utility::moveanim("move_r")); + thread setcombatstandmoveanimweights("run"); + animscripts/shared::donotetracks(var_00); + self.var_BE0 = undefined; +} + +//Function Number: 34 +runloopisnearbeginning() +{ + var_00 = self getanimtime(%walk_and_run_loops); + var_01 = getanimlength(%run_lowready_f) / 3; + var_00 = var_00 * 3; + if(var_00 > 3) + { + var_00 = var_00 - 2; + } + else if(var_00 > 2) + { + var_00 = var_00 - 1; + } + + if(var_00 < 0.15 / var_01) + { + return 1; + } + + if(var_00 > 1 - 0.3 / var_01) + { + return 1; + } + + return 0; +} + +//Function Number: 35 +setmovenonforwardanims(param_00,param_01,param_02,param_03) +{ + if(!isdefined(param_03)) + { + param_03 = 1; + } + + self setanimknoblimited(param_00,1,0.1,param_03,1); + self setanimknoblimited(param_01,1,0.1,param_03,1); + self setanimknoblimited(param_02,1,0.1,param_03,1); +} + +//Function Number: 36 +setcombatstandmoveanimweights(param_00) +{ + updatemoveanimweights(param_00,%combatrun_forward,%combatrun_backward,%combatrun_left,%combatrun_right); +} + +//Function Number: 37 +updatemoveanimweights(param_00,param_01,param_02,param_03,param_04) +{ + if(isdefined(self.update_move_anim_type) && self.update_move_anim_type == param_00) + { + return; + } + + self notify("stop_move_anim_update"); + self.update_move_anim_type = param_00; + self.wasfacingmotion = undefined; + self endon("killanimscript"); + self endon("move_interrupt"); + self endon("stop_move_anim_update"); + for(;;) + { + updaterunweightsonce(param_01,param_02,param_03,param_04); + wait 0.05; + waittillframeend; + } +} + +//Function Number: 38 +updaterunweightsonce(param_00,param_01,param_02,param_03) +{ + if(self.facemotion && !animscripts/utility::shouldcqb() && !isdefined(self.var_BE0)) + { + if(!isdefined(self.wasfacingmotion)) + { + self.wasfacingmotion = 1; + self setanim(param_00,1,0.2,1,1); + self setanim(param_01,0,0.2,1,1); + self setanim(param_02,0,0.2,1,1); + self setanim(param_03,0,0.2,1,1); + return; + } + + return; + } + + self.wasfacingmotion = undefined; + var_04 = animscripts/utility::quadrantanimweights(self getmotionangle()); + if(isdefined(self.var_BE0)) + { + if(var_41["front"] < 0.2) + { + } + } + + self setanim(param_01,var_41["front"],0.2,1,1); + self setanim(param_02,var_41["back"],0.2,1,1); + self setanim(param_03,var_41["left"],0.2,1,1); + self setanim(var_04,var_41["right"],0.2,1,1); +} + +//Function Number: 39 +changeweaponstandrun() +{ + var_00 = isdefined(self.wantshotgun) && self.wantshotgun; + var_01 = animscripts/utility::isshotgun(self.weapon); + if(var_00 == var_01) + { + return 0; + } + + if(!isdefined(self.pathgoalpos) || distancesquared(self.origin,self.pathgoalpos) < 65536) + { + return 0; + } + + if(animscripts/utility::usingsidearm()) + { + return 0; + } + + if(self.weapon == self.primaryweapon) + { + if(!var_00) + { + return 0; + } + + if(animscripts/utility::isshotgun(self.secondaryweapon)) + { + return 0; + } + } + else + { + if(var_00) + { + return 0; + } + + if(animscripts/utility::isshotgun(self.primaryweapon)) + { + return 0; + } + } + + var_02 = angleclamp180(self getmotionangle()); + if(abs(var_02) > 25) + { + return 0; + } + + if(!runloopisnearbeginning()) + { + return 0; + } + + if(var_00) + { + shotgunswitchstandruninternal("shotgunPullout",%shotgun_cqbrun_pullout,"gun_2_chest","none",self.secondaryweapon,"shotgun_pickup"); + } + else + { + shotgunswitchstandruninternal("shotgunPutaway",%shotgun_cqbrun_putaway,"gun_2_back","back",self.primaryweapon,"shotgun_pickup"); + } + + self notify("switchEnded"); + return 1; +} + +//Function Number: 40 +shotgunswitchstandruninternal(param_00,param_01,param_02,param_03,param_04,param_05) +{ + self endon("movemode"); + self setflaggedanimknoballrestart(param_00,param_01,%body,1,0.25); + self.var_BE0 = 1; + setmovenonforwardanims(animscripts/utility::moveanim("move_b"),animscripts/utility::moveanim("move_l"),animscripts/utility::moveanim("move_r")); + thread setcombatstandmoveanimweights("run"); + thread func_0BEE(param_00,param_02,param_03,param_04,param_05); + animscripts/notetracks::donotetracksfortimeintercept(getanimlength(param_01) - 0.25,param_00,::func_0BED); + self.var_BE0 = undefined; +} + +//Function Number: 41 +func_0BED(param_00) +{ + if(param_00 == "gun_2_chest" || param_00 == "gun_2_back") + { + return 1; + } +} + +//Function Number: 42 +func_0BEE(param_00,param_01,param_02,param_03,param_04) +{ + self endon("killanimscript"); + self endon("movemode"); + self endon("switchEnded"); + self waittillmatch(param_01,param_00); + animscripts/shared::placeweaponon(self.weapon,param_02); + thread func_0BEF(param_03); + self waittillmatch(param_04,param_00); + self notify("complete_weapon_switch"); +} + +//Function Number: 43 +func_0BEF(param_00) +{ + self endon("death"); + common_scripts\utility::waittill_any("killanimscript","movemode","switchEnded","complete_weapon_switch"); + self.lastweapon = self.weapon; + animscripts/shared::placeweaponon(param_00,"right"); + self.bulletsinclip = weaponclipsize(self.weapon); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/scripted.gsc b/MW3/Xbox/SP/animscripts/scripted.gsc new file mode 100644 index 0000000..69972ff --- /dev/null +++ b/MW3/Xbox/SP/animscripts/scripted.gsc @@ -0,0 +1,60 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\scripted.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 43 ms + * Timestamp: 10/27/2023 2:30:42 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self endon("death"); + self notify("killanimscript"); + self notify("clearSuppressionAttack"); + self.a.var_1C2D = 0; + self.codescripted["root"] = %body; + self endon("end_sequence"); + self startscriptedanim(self.codescripted["notifyName"],self.codescripted["origin"],self.codescripted["angles"],self.codescripted["anim"],self.codescripted["animMode"],self.codescripted["root"]); + self.codescripted = undefined; + if(isdefined(self.var_3AE8) || isdefined(self.facial_animation)) + { + animscripts/face::sayspecificdialogue(self.facial_animation,self.var_3AE8,0.9,"scripted_anim_facedone"); + self.facial_animation = undefined; + self.var_3AE8 = undefined; + } + + if(isdefined(self.deathstring_passed)) + { + self.deathstring = self.deathstring_passed; + } + + self waittill("killanimscript"); +} + +//Function Number: 2 +init(param_00,param_01,param_02,param_03,param_04,param_05) +{ + self.codescripted["notifyName"] = param_00; + self.codescripted["origin"] = param_01; + self.codescripted["angles"] = param_02; + self.codescripted["anim"] = param_03; + if(isdefined(param_04)) + { + self.codescripted["animMode"] = param_04; + } + else + { + self.codescripted["animMode"] = "normal"; + } + + if(isdefined(param_05)) + { + self.codescripted["root"] = param_05; + return; + } + + self.codescripted["root"] = %body; +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/setposemovement.gsc b/MW3/Xbox/SP/animscripts/setposemovement.gsc new file mode 100644 index 0000000..38debd6 --- /dev/null +++ b/MW3/Xbox/SP/animscripts/setposemovement.gsc @@ -0,0 +1,967 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\setposemovement.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 55 + * Decompile Time: 878 ms + * Timestamp: 10/27/2023 2:30:45 AM +*******************************************************************/ + +//Function Number: 1 +setposemovement(param_00,param_01) +{ + if(param_00 == "") + { + if(self.a.var_911 == "prone" && param_01 == "walk" || param_01 == "run") + { + param_00 = "crouch"; + } + else + { + param_00 = self.a.var_911; + } + } + + if(!isdefined(param_01) || param_01 == "") + { + param_01 = self.a.movement; + } + + [[ level.setposemovementfnarray[param_00][param_01] ]](); +} + +//Function Number: 2 +initposemovementfunctions() +{ + level.setposemovementfnarray["stand"]["stop"] = ::beginstandstop; + level.setposemovementfnarray["stand"]["walk"] = ::beginstandwalk; + level.setposemovementfnarray["stand"]["run"] = ::beginstandrun; + level.setposemovementfnarray["crouch"]["stop"] = ::func_1F92; + level.setposemovementfnarray["crouch"]["walk"] = ::func_0C6E; + level.setposemovementfnarray["crouch"]["run"] = ::begincrouchrun; + level.setposemovementfnarray["prone"]["stop"] = ::func_1F93; + level.setposemovementfnarray["prone"]["walk"] = ::beginpronewalk; + level.setposemovementfnarray["prone"]["run"] = ::beginpronerun; +} + +//Function Number: 3 +beginstandstop() +{ + switch(self.a.var_911) + { + case "stand": + switch(self.a.movement) + { + case "stop": + return 0; + + case "walk": + standwalktostand(); + break; + + default: + func_1F98(); + break; + } + break; + + case "crouch": + switch(self.a.movement) + { + case "stop": + crouchtostand(); + break; + + case "walk": + crouchwalktostand(); + break; + + default: + crouchruntostand(); + break; + } + break; + + default: + switch(self.a.movement) + { + case "stop": + pronetostand(); + break; + + default: + pronetostand(); + break; + } + break; + } + + return 1; +} + +//Function Number: 4 +beginstandwalk() +{ + switch(self.a.var_911) + { + case "stand": + switch(self.a.movement) + { + case "stop": + blendintostandwalk(); + break; + + case "walk": + return 0; + + default: + blendintostandwalk(); + break; + } + break; + + case "crouch": + switch(self.a.movement) + { + case "stop": + func_1FA1(); + break; + + case "walk": + blendintostandwalk(); + break; + + default: + blendintostandwalk(); + break; + } + break; + + default: + pronetostandwalk(); + break; + } + + return 1; +} + +//Function Number: 5 +beginstandrun() +{ + switch(self.a.var_911) + { + case "stand": + switch(self.a.movement) + { + case "walk": + case "stop": + return func_1F9B(); + + default: + return 0; + } + break; + + case "crouch": + switch(self.a.movement) + { + case "stop": + return func_1FA7(); + + default: + return func_1F9B(); + } + break; + + default: + func_1FAA(); + break; + } + + return 1; +} + +//Function Number: 6 +func_1F92() +{ + switch(self.a.var_911) + { + case "stand": + switch(self.a.movement) + { + case "stop": + standtocrouch(); + break; + + case "walk": + func_1F97(); + break; + + case "run": + func_1F99(); + break; + + default: + break; + } + break; + + case "crouch": + switch(self.a.movement) + { + case "stop": + break; + + case "walk": + func_1FA2(); + break; + + case "run": + crouchruntocrouch(); + break; + + default: + break; + } + break; + + case "prone": + pronetocrouch(); + break; + + default: + break; + } +} + +//Function Number: 7 +func_0C6E() +{ + switch(self.a.var_911) + { + case "stand": + switch(self.a.movement) + { + case "stop": + blendintocrouchwalk(); + break; + + case "walk": + blendintocrouchwalk(); + break; + + default: + blendintocrouchwalk(); + break; + } + break; + + case "crouch": + switch(self.a.movement) + { + case "stop": + crouchtocrouchwalk(); + break; + + case "walk": + return 0; + + default: + blendintocrouchwalk(); + break; + } + break; + + default: + pronetocrouchwalk(); + break; + } + + return 1; +} + +//Function Number: 8 +begincrouchrun() +{ + switch(self.a.var_911) + { + case "stand": + switch(self.a.movement) + { + case "stop": + blendintocrouchrun(); + break; + + default: + blendintocrouchrun(); + break; + } + break; + + case "crouch": + switch(self.a.movement) + { + case "stop": + func_1FA6(); + break; + + case "walk": + blendintocrouchrun(); + break; + + default: + return 0; + } + break; + + default: + func_1FA9(); + break; + } + + return 1; +} + +//Function Number: 9 +func_1F93() +{ + switch(self.a.var_911) + { + case "stand": + switch(self.a.movement) + { + case "stop": + standtoprone(); + break; + + case "walk": + standtoprone(); + break; + + case "run": + crouchruntoprone(); + break; + + default: + break; + } + break; + + case "crouch": + switch(self.a.movement) + { + case "stop": + func_1FB5(); + break; + + case "walk": + func_1FB5(); + break; + + case "run": + crouchruntoprone(); + break; + + default: + break; + } + break; + + case "prone": + switch(self.a.movement) + { + case "stop": + break; + + case "walk": + case "run": + pronecrawltoprone(); + break; + + default: + break; + } + break; + + default: + break; + } +} + +//Function Number: 10 +beginpronewalk() +{ + switch(self.a.var_911) + { + case "stand": + switch(self.a.movement) + { + case "stop": + standtopronewalk(); + break; + + default: + crouchruntopronewalk(); + break; + } + break; + + case "crouch": + switch(self.a.movement) + { + case "stop": + crouchtopronewalk(); + break; + + default: + crouchruntopronewalk(); + break; + } + break; + + default: + switch(self.a.movement) + { + case "stop": + func_1FB3(); + break; + + default: + self.a.movement = "walk"; + return 0; + } + break; + } + + return 1; +} + +//Function Number: 11 +beginpronerun() +{ + switch(self.a.var_911) + { + case "stand": + switch(self.a.movement) + { + case "stop": + func_1FBA(); + break; + + default: + crouchruntopronerun(); + break; + } + break; + + case "crouch": + switch(self.a.movement) + { + case "stop": + func_1FB7(); + break; + + default: + crouchruntopronerun(); + break; + } + break; + + default: + switch(self.a.movement) + { + case "stop": + func_1FB3(); + break; + + default: + self.a.movement = "run"; + return 0; + } + break; + } + + return 1; +} + +//Function Number: 12 +func_1F94(param_00,param_01,param_02,param_03) +{ + var_04 = gettime() + param_01 * 1000; + if(isarray(param_00)) + { + param_00 = param_00[randomint(param_00.size)]; + } + + self setflaggedanimknoball("blendTransition",param_00,%body,1,param_01,1); + animscripts/notetracks::donotetracksfortime(param_01 / 2,"blendTransition"); + self.a.var_911 = param_02; + self.a.movement = param_03; + var_05 = var_04 - gettime() / 1000; + if(var_05 < 0.05) + { + var_05 = 0.05; + } + + animscripts/notetracks::donotetracksfortime(var_05,"blendTransition"); +} + +//Function Number: 13 +func_1F95(param_00,param_01) +{ + playtransitionanimation(param_00,"stand","walk",param_01); +} + +//Function Number: 14 +standwalktostand() +{ + self.a.movement = "stop"; +} + +//Function Number: 15 +func_1F97() +{ + standwalktostand(); + standtocrouch(); +} + +//Function Number: 16 +func_1F98() +{ + self.a.movement = "stop"; +} + +//Function Number: 17 +func_1F99() +{ + self.a.movement = "stop"; + self.a.var_911 = "crouch"; +} + +//Function Number: 18 +playblendtransitionstandrun(param_00) +{ + var_01 = 0.3; + if(self.a.movement != "stop") + { + self endon("movemode"); + var_01 = 1; + } + + func_1F94(param_00,var_01,"stand","run"); +} + +//Function Number: 19 +func_1F9B() +{ + if(!self.facemotion) + { + self.a.movement = "run"; + self.a.var_911 = "stand"; + return 0; + } + + if(isdefined(self.run_overrideanim)) + { + playblendtransitionstandrun(self.run_overrideanim); + return 1; + } + + var_00 = 0.1; + if(self.a.movement != "stop" && self.stairsstate == "none") + { + var_00 = 0.5; + } + + if(isdefined(self.sprint)) + { + self setanimknoblimited(animscripts/utility::moveanim("sprint"),1,var_00,1); + } + else + { + self setanimknoblimited(animscripts/run::getrunanim(),1,var_00,1); + } + + animscripts/run::setmovenonforwardanims(animscripts/utility::moveanim("move_b"),animscripts/utility::moveanim("move_l"),animscripts/utility::moveanim("move_r"),self.sidesteprate); + thread animscripts/run::setcombatstandmoveanimweights("run"); + wait 0.05; + playblendtransitionstandrun(%combatrun); + return 1; +} + +//Function Number: 20 +blendintostandwalk() +{ + if(self.a.movement != "stop") + { + self endon("movemode"); + } + + if(!isdefined(self.alwaysrunforward) && self.a.var_911 != "prone") + { + animscripts/run::setmovenonforwardanims(animscripts/utility::moveanim("move_b"),animscripts/utility::moveanim("move_l"),animscripts/utility::moveanim("move_r")); + } + + self.a.var_911 = "stand"; + self.a.movement = "walk"; +} + +//Function Number: 21 +crouchtostand() +{ + var_00 = 1; + if(isdefined(self.faststand)) + { + var_00 = 1.8; + self.faststand = undefined; + } + + if(animscripts/utility::usingsidearm()) + { + playtransitionanimation(%pistol_crouchaimstraight2stand,"stand","stop",undefined,var_00); + return; + } + + animscripts/utility::randomizeidleset(); + playtransitionanimation(%crouch2stand,"stand","stop",undefined,var_00); +} + +//Function Number: 22 +crouchtocrouchwalk() +{ + blendintocrouchwalk(); +} + +//Function Number: 23 +func_1FA1() +{ + crouchtocrouchwalk(); + blendintostandwalk(); +} + +//Function Number: 24 +func_1FA2() +{ + self.a.movement = "stop"; +} + +//Function Number: 25 +crouchwalktostand() +{ + func_1FA2(); + crouchtostand(); +} + +//Function Number: 26 +crouchruntocrouch() +{ + self.a.movement = "stop"; +} + +//Function Number: 27 +crouchruntostand() +{ + crouchruntocrouch(); + crouchtostand(); +} + +//Function Number: 28 +func_1FA6() +{ + blendintocrouchrun(); +} + +//Function Number: 29 +func_1FA7() +{ + return func_1F9B(); +} + +//Function Number: 30 +blendintocrouchrun() +{ + if(isdefined(self.crouchrun_combatanim)) + { + func_1F94(self.crouchrun_combatanim,0.6,"crouch","run"); + return; + } + + self setanimknob(%crouchrun,1,0.4,self.moveplaybackrate); + thread animscripts/run::updatemoveanimweights("crouchrun",animscripts/utility::moveanim("crouch"),animscripts/utility::moveanim("crouch_b"),animscripts/utility::moveanim("crouch_l"),animscripts/utility::moveanim("crouch_r")); + wait 0.05; + func_1F94(%crouchrun,0.4,"crouch","run"); +} + +//Function Number: 31 +func_1FA9() +{ + self orientmode("face current"); + animscripts/utility::exitpronewrapper(1); + pronelegsstraighttree(0.2); + animscripts/cover_prone::updatepronewrapper(0.1); + playtransitionanimation(%prone_2_crouch,"crouch","run",animscripts/run::getcrouchrunanim()); +} + +//Function Number: 32 +func_1FAA() +{ + func_1FA9(); + func_1F9B(); +} + +//Function Number: 33 +pronetocrouchwalk() +{ + func_1FA9(); + blendintocrouchwalk(); +} + +//Function Number: 34 +blendintocrouchwalk() +{ + if(isdefined(self.crouchrun_combatanim)) + { + self setanimknoball(self.crouchrun_combatanim,%body,1,0.4); + func_1F94(self.crouchrun_combatanim,0.6,"crouch","walk"); + self notify("BlendIntoCrouchWalk"); + return; + } + + self setanimknob(%crouchrun,1,0.4,self.moveplaybackrate); + thread animscripts/run::updatemoveanimweights("crouchrun",animscripts/utility::moveanim("crouch"),animscripts/utility::moveanim("crouch_b"),animscripts/utility::moveanim("crouch_l"),animscripts/utility::moveanim("crouch_r")); + wait 0.05; + func_1F94(%crouchrun,0.4,"crouch","run"); +} + +//Function Number: 35 +standtocrouch() +{ + animscripts/utility::randomizeidleset(); + var_00 = 1; + if(isdefined(self.fastcrouch)) + { + var_00 = 1.8; + self.fastcrouch = undefined; + } + + playtransitionanimation(%exposed_stand_2_crouch,"crouch","stop",undefined,var_00); +} + +//Function Number: 36 +pronetocrouch() +{ + animscripts/utility::randomizeidleset(); + self orientmode("face current"); + animscripts/utility::exitpronewrapper(1); + pronelegsstraighttree(0.1); + animscripts/cover_prone::updatepronewrapper(0.1); + playtransitionanimation(%prone_2_crouch,"crouch","stop"); +} + +//Function Number: 37 +pronetostand() +{ + self orientmode("face current"); + animscripts/utility::exitpronewrapper(1); + pronelegsstraighttree(0.1); + animscripts/cover_prone::updatepronewrapper(0.1); + playtransitionanimation(%prone_2_stand,"stand","stop"); +} + +//Function Number: 38 +pronetostandwalk() +{ + pronetocrouch(); + crouchtocrouchwalk(); + blendintostandwalk(); +} + +//Function Number: 39 +pronetopronemove(param_00) +{ + pronelegsstraighttree(0.1); + playtransitionanimation(%prone_2_prone_crawl,"prone",param_00,%prone_crawl); + animscripts/cover_prone::updatepronewrapper(0.1); +} + +//Function Number: 40 +func_1FB3() +{ + pronetopronemove("run"); +} + +//Function Number: 41 +pronecrawltoprone() +{ + pronelegsstraighttree(0.1); + animscripts/cover_prone::updatepronewrapper(0.1); + playtransitionanimation(%prone_crawl_2_prone,"prone","stop"); +} + +//Function Number: 42 +func_1FB5() +{ + self setproneanimnodes(-45,45,%prone_legs_down,%exposed_aiming,%prone_legs_up); + animscripts/utility::enterpronewrapper(1); + pronelegsstraighttree(0.3); + animscripts/cover_prone::updatepronewrapper(0.1); + playtransitionanimation(%crouch_2_prone,"prone","stop"); +} + +//Function Number: 43 +crouchtopronewalk() +{ + func_1FB5(); + func_1FB3(); +} + +//Function Number: 44 +func_1FB7() +{ + func_1FB5(); + func_1FB3(); +} + +//Function Number: 45 +standtoprone() +{ + self endon("entered_poseprone"); + var_00 = 0.5; + thread playtransitionanimationthread_withoutwaitsetstates(%stand_2_prone,"prone","stop",undefined,var_00); + self waittillmatch("anim_pose = \"crouch\","transAnimDone2"); + waittillframeend; + self setproneanimnodes(-45,45,%prone_legs_down,%exposed_aiming,%prone_legs_up); + animscripts/utility::enterpronewrapper(var_00); + self.a.movement = "stop"; + pronelegsstraighttree(0.2); + animscripts/cover_prone::updatepronewrapper(0.1); + self waittillmatch("end","transAnimDone2"); +} + +//Function Number: 46 +standtopronewalk() +{ + standtoprone(); + func_1FB3(); +} + +//Function Number: 47 +func_1FBA() +{ + standtoprone(); + func_1FB3(); +} + +//Function Number: 48 +crouchruntoprone() +{ + var_00 = 0.5; + self setproneanimnodes(-45,45,%prone_legs_down,%exposed_aiming,%prone_legs_up); + animscripts/utility::enterpronewrapper(var_00); + pronelegsstraighttree(0.2); + animscripts/cover_prone::updatepronewrapper(0.1); + var_01 = animscripts/utility::getquadrant(self getmotionangle()); + var_02 = %crouch_2_prone; + var_03 = getmovedelta(var_02,0,1); + var_04 = self localtoworldcoords(var_03); + if(self maymovetopoint(var_04)) + { + playtransitionanimation(var_02,"prone","stop",undefined,var_00); + return; + } + + playtransitionanimation(%crouch_2_prone_firing,"prone","stop",undefined,var_00); +} + +//Function Number: 49 +crouchruntopronewalk() +{ + crouchruntoprone(); + func_1FB3(); +} + +//Function Number: 50 +crouchruntopronerun() +{ + crouchruntoprone(); + func_1FB3(); +} + +//Function Number: 51 +playtransitionanimationthread_withoutwaitsetstates(param_00,param_01,param_02,param_03,param_04) +{ + self endon("killanimscript"); + self endon("entered_pose" + param_01); + func_1FC1(param_00,param_01,param_02,param_03,param_04,0); +} + +//Function Number: 52 +playtransitionanimation(param_00,param_01,param_02,param_03,param_04) +{ + func_1FC1(param_00,param_01,param_02,param_03,param_04,1); +} + +//Function Number: 53 +func_1FC1(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if(!isdefined(param_04)) + { + param_04 = 1; + } + + if(param_05) + { + thread func_1FC2(getanimlength(param_00) / 2,"killtimerscript",param_01); + } + + self setflaggedanimknoballrestart("transAnimDone2",param_00,%body,1,0.2,param_04); + if(!isdefined(self.a.var_911)) + { + self.var_911 = "undefined"; + } + + if(!isdefined(self.a.movement)) + { + self.movement = "undefined"; + } + + var_06 = ""; + animscripts/shared::donotetracks("transAnimDone2",undefined,var_06); + self notify("killtimerscript"); + self.a.var_911 = param_01; + self notify("entered_pose" + param_01); + self.a.movement = param_02; + if(isdefined(param_03)) + { + self setanimknoball(param_03,%body,1,0.3,param_04); + } +} + +//Function Number: 54 +func_1FC2(param_00,param_01,param_02) +{ + self endon("killanimscript"); + self endon("death"); + self endon(param_01); + var_03 = self.a.var_911; + wait param_00; + if(var_03 != "prone" && param_02 == "prone") + { + animscripts/cover_prone::updatepronewrapper(0.1); + animscripts/utility::enterpronewrapper(1); + return; + } + + if(var_03 == "prone" && param_02 != "prone") + { + animscripts/utility::exitpronewrapper(1); + self orientmode("face default"); + } +} + +//Function Number: 55 +pronelegsstraighttree(param_00) +{ + self setanimknoball(%prone_legsstraight,%body,1,param_00,1); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/shared.gsc b/MW3/Xbox/SP/animscripts/shared.gsc new file mode 100644 index 0000000..bb84e72 --- /dev/null +++ b/MW3/Xbox/SP/animscripts/shared.gsc @@ -0,0 +1,823 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\shared.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 34 + * Decompile Time: 582 ms + * Timestamp: 10/27/2023 2:30:47 AM +*******************************************************************/ + +//Function Number: 1 +placeweaponon(param_00,param_01,param_02) +{ + self notify("weapon_position_change"); + var_03 = self.weaponinfo[param_00].var_1C1B; + if(param_01 != "none" && self.a.weaponpos[param_01] == param_00) + { + return; + } + + detachallweaponmodels(); + if(var_03 != "none") + { + func_1F40(param_00); + } + + if(param_01 == "none") + { + func_1F46(); + return; + } + + if(self.a.weaponpos[param_01] != "none") + { + func_1F40(self.a.weaponpos[param_01]); + } + + if(!isdefined(param_02)) + { + param_02 = 1; + } + + if(param_02 && param_01 == "left" || param_01 == "right") + { + func_1F41(param_00,param_01); + self.weapon = param_00; + } + else + { + func_1F41(param_00,param_01); + } + + func_1F46(); +} + +//Function Number: 2 +func_1F40(param_00) +{ + self.a.weaponpos[self.weaponinfo[param_00].var_1C1B] = "none"; + self.weaponinfo[param_00].var_1C1B = "none"; +} + +//Function Number: 3 +func_1F41(param_00,param_01) +{ + self.weaponinfo[param_00].var_1C1B = param_01; + self.a.weaponpos[param_01] = param_00; + if(self.a.weaponposdropping[param_01] != "none") + { + self notify("end_weapon_drop_" + param_01); + self.a.weaponposdropping[param_01] = "none"; + } +} + +//Function Number: 4 +func_1F42(param_00) +{ + var_01 = self.a.weaponpos[param_00]; + if(var_01 == "none") + { + return self.a.weaponposdropping[param_00]; + } + + return var_01; +} + +//Function Number: 5 +detachallweaponmodels() +{ + var_00 = []; + self laseroff(); + foreach(var_02 in var_41) + { + var_03 = func_1F42(var_02); + if(var_03 == "none") + { + continue; + } + + if(weapontype(var_03) == "riotshield" && isdefined(self.var_1F44)) + { + if(isdefined(self.shieldbroken) && self.shieldbroken) + { + playfxontag(common_scripts\utility::func_539("riot_shield_dmg"),self,"TAG_BRASS"); + self.shieldbroken = undefined; + } + + self detach(getweaponmodel(var_03,self.var_1F44),func_1F49(var_02)); + continue; + } + + self detach(getweaponmodel(var_03),func_1F49(var_02)); + } +} + +//Function Number: 6 +func_1F46() +{ + var_00 = []; + foreach(var_02 in var_41) + { + var_03 = func_1F42(var_02); + if(var_03 == "none") + { + continue; + } + + var_04 = 0; + if(weapontype(var_03) == "riotshield" && isdefined(self.var_1F44)) + { + var_04 = self.var_1F44; + } + + var_05 = getweaponmodel(var_03,var_04); + if(weapontype(var_03) == "riotshield") + { + self attach(var_05,func_1F49(var_02)); + } + else + { + self attach(var_05,func_1F49(var_02),1); + } + + var_06 = getweaponhidetags(var_03); + var_07 = 0; + while(var_07 < var_06.size) + { + self hidepart(var_06[var_07],var_05); + var_07++ = var_41[var_41.size]; + } + + if(self.weaponinfo[var_03].var_1C1D && !self.weaponinfo[var_03].var_1C1C) + { + self hidepart("tag_clip"); + } + } + + updatelaserstatus(); +} + +//Function Number: 7 +updatelaserstatus() +{ + if(isdefined(self.custom_laser_function)) + { + [[ self.custom_laser_function ]](); + return; + } + + if(self.a.weaponpos["right"] == "none") + { + return; + } + + if(canuselaser()) + { + self laseron(); + return; + } + + self laseroff(); +} + +//Function Number: 8 +canuselaser() +{ + if(!self.a.laseron) + { + return 0; + } + + if(animscripts/utility::isshotgun(self.weapon)) + { + return 0; + } + + return isalive(self); +} + +//Function Number: 9 +func_1F49(param_00) +{ + switch(param_00) + { + case "chest": + return "tag_weapon_chest"; + + case "back": + return "tag_stowed_back"; + + case "left": + return "tag_weapon_left"; + + case "right": + return "tag_weapon_right"; + + case "hand": + return "tag_inhand"; + + default: + break; + } +} + +//Function Number: 10 +dropaiweapon(param_00) +{ + if(!isdefined(param_00)) + { + param_00 = self.weapon; + } + + if(param_00 == "none") + { + return; + } + + if(isdefined(self.var_1CC7)) + { + return; + } + + detachallweaponmodels(); + var_01 = self.weaponinfo[param_00].var_1C1B; + if(self.dropweapon && var_01 != "none") + { + thread dropweaponwrapper(param_00,var_01); + } + + func_1F40(param_00); + if(param_00 == self.weapon) + { + self.weapon = "none"; + } + + func_1F46(); +} + +//Function Number: 11 +dropallaiweapons() +{ + if(isdefined(self.var_1CC7)) + { + return "none"; + } + + var_00 = []; + detachallweaponmodels(); + foreach(var_02 in var_41) + { + var_03 = self.a.weaponpos[var_02]; + if(var_03 == "none") + { + continue; + } + + self.weaponinfo[var_03].var_1C1B = "none"; + self.a.weaponpos[var_02] = "none"; + if(self.dropweapon) + { + thread dropweaponwrapper(var_03,var_02); + } + } + + self.weapon = "none"; + func_1F46(); +} + +//Function Number: 12 +dropweaponwrapper(param_00,param_01) +{ + if(self isragdoll()) + { + return "none"; + } + + self.a.weaponposdropping[param_01] = param_00; + var_02 = param_00; + if(issubstr(tolower(var_02),"rpg")) + { + var_02 = "rpg_player"; + } + + self dropweapon(var_02,param_01,0); + self endon("end_weapon_drop_" + param_01); + wait 0.1; + if(!isdefined(self)) + { + return; + } + + detachallweaponmodels(); + self.a.weaponposdropping[param_01] = "none"; + func_1F46(); +} + +//Function Number: 13 +donotetracks(param_00,param_01,param_02) +{ + for(;;) + { + self waittill(param_00,var_03); + if(!isdefined(var_03)) + { + var_03 = "undefined"; + } + + var_04 = animscripts/notetracks::func_1F4C(var_03,param_00,param_01); + if(isdefined(var_04)) + { + return var_04; + } + } +} + +//Function Number: 14 +getpredictedaimyawtoshootentorpos(param_00) +{ + if(!isdefined(self.shootent)) + { + if(!isdefined(self.shootpos)) + { + return 0; + } + + return getaimyawtopoint(self.shootpos); + } + + var_01 = self.shootent.origin + self.var_96C * param_00; + return getaimyawtopoint(var_01); +} + +//Function Number: 15 +getaimyawtoshootentorpos() +{ + if(!isdefined(self.shootent)) + { + if(!isdefined(self.shootpos)) + { + return 0; + } + + return getaimyawtopoint(self.shootpos); + } + + return getaimyawtopoint(self.shootent getshootatpos()); +} + +//Function Number: 16 +func_1F4D() +{ + var_00 = getpitchtoshootentorpos(); + if(self.script == "cover_crouch" && isdefined(self.a.var_8E3) && self.a.var_8E3 == "lean") + { + var_00 = var_00 - level.var_898; + } + + return var_00; +} + +//Function Number: 17 +getpitchtoshootentorpos() +{ + if(!isdefined(self.shootent)) + { + if(!isdefined(self.shootpos)) + { + return 0; + } + + return animscripts/combat_utility::getpitchtospot(self.shootpos); + } + + return animscripts/combat_utility::getpitchtospot(self.shootent getshootatpos()); +} + +//Function Number: 18 +func_089B() +{ + if(isdefined(self.usemuzzlesideoffset)) + { + var_00 = self getmuzzlesideoffsetpos(); + return (var_00[0],var_00[1],self geteye()[2]); + } + + return (self.origin[0],self.origin[1],self geteye()[2]); +} + +//Function Number: 19 +getaimyawtopoint(param_00) +{ + var_01 = animscripts/utility::getyawtospot(param_00); + var_02 = distance(self.origin,param_00); + if(var_02 > 3) + { + var_03 = asin(-3 / var_02); + var_01 = var_01 + var_03; + } + + var_01 = angleclamp180(var_01); + return var_01; +} + +//Function Number: 20 +ramboaim(param_00) +{ + self endon("killanimscript"); + ramboaiminternal(param_00); + self clearanim(%generic_aim_left,0.5); + self clearanim(%generic_aim_right,0.5); +} + +//Function Number: 21 +ramboaiminternal(param_00) +{ + self endon("rambo_aim_end"); + waittillframeend; + self clearanim(%generic_aim_left,0.2); + self clearanim(%generic_aim_right,0.2); + self setanimlimited(%generic_aim_45l,1,0.2); + self setanimlimited(%generic_aim_45r,1,0.2); + var_01 = 0.2; + var_02 = 0; + for(;;) + { + if(isdefined(self.shootpos)) + { + var_03 = animscripts/utility::func_C05(self.shootpos) - self.covernode.angles[1]; + var_03 = angleclamp180(var_03 - param_00); + if(abs(var_03 - var_02) > 10) + { + if(var_03 > var_02) + { + var_03 = var_02 + 10; + } + else + { + var_03 = var_02 - 10; + } + } + + var_02 = var_03; + } + + if(var_02 < 0) + { + var_04 = var_02 / -45; + if(var_04 > 1) + { + var_04 = 1; + } + + self setanimlimited(%generic_aim_right,var_04,var_01); + self setanimlimited(%generic_aim_left,0,var_01); + } + else + { + var_04 = var_02 / 45; + if(var_04 > 1) + { + var_04 = 1; + } + + self setanimlimited(%generic_aim_left,var_04,var_01); + self setanimlimited(%generic_aim_right,0,var_01); + } + + wait var_01; + } +} + +//Function Number: 22 +decidenumshotsforburst() +{ + var_00 = 0; + var_01 = weaponburstcount(self.weapon); + if(var_01) + { + var_00 = var_01; + } + else if(animscripts/weaponlist::usingsemiautoweapon()) + { + var_00 = level.var_1C5E[randomint(level.var_1C5E.size)]; + } + else if(self.fastburst) + { + var_00 = level.var_1C5D[randomint(level.var_1C5D.size)]; + } + else + { + var_00 = level.burstfirenumshots[randomint(level.burstfirenumshots.size)]; + } + + if(var_00 <= self.bulletsinclip) + { + return var_00; + } + + if(self.bulletsinclip <= 0) + { + return 1; + } + + return self.bulletsinclip; +} + +//Function Number: 23 +func_1EFB() +{ + var_00 = self.bulletsinclip; + if(weaponclass(self.weapon) == "mg") + { + var_01 = randomfloat(10); + if(var_01 < 3) + { + var_00 = randomintrange(2,6); + } + else if(var_01 < 8) + { + var_00 = randomintrange(6,12); + } + else + { + var_00 = randomintrange(12,20); + } + } + + return var_00; +} + +//Function Number: 24 +insure_dropping_clip(param_00,param_01) +{ +} + +//Function Number: 25 +handledropclip(param_00) +{ + self endon("killanimscript"); + self endon("abort_reload"); + var_01 = undefined; + if(self.weaponinfo[self.weapon].var_1C1D) + { + var_01 = getweaponclipmodel(self.weapon); + } + + if(self.weaponinfo[self.weapon].var_1C1C) + { + if(animscripts/utility::usingsidearm()) + { + self playsound("weap_reload_pistol_clipout_npc"); + } + else + { + self playsound("weap_reload_smg_clipout_npc"); + } + + if(isdefined(var_01)) + { + self hidepart("tag_clip"); + thread dropclipmodel(var_01,"tag_clip"); + self.weaponinfo[self.weapon].var_1C1C = 0; + thread resetcliponabort(var_01); + } + } + + for(;;) + { + self waittill(param_00,var_02); + switch(var_02) + { + case "attach clip right": + case "attach clip left": + if(isdefined(var_01)) + { + self attach(var_01,"tag_inhand"); + thread resetcliponabort(var_01,"tag_inhand"); + } + + animscripts/weaponlist::refillclip(); + break; + + case "detach clip nohand": + if(isdefined(var_01)) + { + self detach(var_01,"tag_inhand"); + } + break; + + case "detach clip right": + case "detach clip left": + if(isdefined(var_01)) + { + self detach(var_01,"tag_inhand"); + self showpart("tag_clip"); + self notify("clip_detached"); + self.weaponinfo[self.weapon].var_1C1C = 1; + } + + if(animscripts/utility::usingsidearm()) + { + self playsound("weap_reload_pistol_clipin_npc"); + } + else + { + self playsound("weap_reload_smg_clipin_npc"); + } + self.a.needstorechamber = 0; + break; + } + } +} + +//Function Number: 26 +resetcliponabort(param_00,param_01) +{ + self notify("clip_detached"); + self endon("clip_detached"); + common_scripts\utility::waittill_any("killanimscript","abort_reload"); + if(!isdefined(self)) + { + return; + } + + if(isdefined(param_01)) + { + self detach(param_00,param_01); + } + + if(isalive(self)) + { + if(self.weapon != "none" && self.weaponinfo[self.weapon].var_1C1B != "none") + { + self showpart("tag_clip"); + } + + self.weaponinfo[self.weapon].var_1C1C = 1; + return; + } + + if(isdefined(param_01)) + { + dropclipmodel(param_00,param_01); + } +} + +//Function Number: 27 +dropclipmodel(param_00,param_01) +{ + var_02 = spawn("script_model",self gettagorigin(param_01)); + var_02 setmodel(param_00); + var_02.angles = self gettagangles(param_01); + var_02 physicslaunchclient(var_02.origin,(0,0,0)); + wait 10; + if(isdefined(var_02)) + { + var_02 delete(); + } +} + +//Function Number: 28 +movetooriginovertime(param_00,param_01) +{ + self endon("killanimscript"); + var_02 = distancesquared(self.origin,param_00); + if(var_02 < 1) + { + self safeteleport(param_00); + return; + } + + if(var_02 > 256 && !self maymovetopoint(param_00)) + { + return; + } + + self.keepclaimednodeifvalid = 1; + var_03 = self.origin - param_00; + var_04 = int(param_01 * 20); + var_05 = var_03 * 1 / var_04; + for(var_06 = 0;var_06 < var_04;var_06++) + { + var_03 = var_03 - var_05; + self safeteleport(param_00 + var_03); + wait 0.05; + } + + self.keepclaimednodeifvalid = 0; +} + +//Function Number: 29 +returntrue() +{ + return 1; +} + +//Function Number: 30 +func_0B7E(param_00,param_01,param_02) +{ + if(!isdefined(param_02)) + { + param_02 = ::returntrue; + } + + for(var_03 = 0;var_03 < param_01 * 10;var_03++) + { + if(isalive(self.enemy)) + { + if(animscripts/utility::canseeenemy() && [[ param_02 ]]()) + { + return; + } + } + + if(animscripts/utility::issuppressedwrapper() && [[ param_02 ]]()) + { + return; + } + + self setanimknoball(param_00,%body,1,0.1); + wait 0.1; + } +} + +//Function Number: 31 +throwdownweapon(param_00) +{ + self endon("killanimscript"); + placeweaponon(self.secondaryweapon,"right"); + maps\_gameskill::didsomethingotherthanshooting(); +} + +//Function Number: 32 +rpgplayerrepulsor() +{ + var_00 = rpgplayerrepulsor_getnummisses(); + if(var_00 == 0) + { + return; + } + + self endon("death"); + for(;;) + { + level waittill("an_enemy_shot",var_01); + if(var_01 != self) + { + continue; + } + + if(!isdefined(var_01.enemy)) + { + continue; + } + + if(var_01.enemy != level.player) + { + continue; + } + + if(isdefined(level.createrpgrepulsors) && level.createrpgrepulsors == 0) + { + continue; + } + + thread rpgplayerrepulsor_create(); + var_00--; + if(var_00 <= 0) + { + return; + } + } +} + +//Function Number: 33 +rpgplayerrepulsor_getnummisses() +{ + var_00 = maps\_utility::getdifficulty(); + switch(var_00) + { + case "gimp": + case "easy": + return 2; + + case "difficult": + case "hard": + case "medium": + return 1; + + case "fu": + return 0; + } + + return 2; +} + +//Function Number: 34 +rpgplayerrepulsor_create() +{ + var_00 = missile_createrepulsorent(level.player,5000,800); + wait 4; + missile_deleteattractor(var_00); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/shoot_behavior.gsc b/MW3/Xbox/SP/animscripts/shoot_behavior.gsc new file mode 100644 index 0000000..1f82c5f --- /dev/null +++ b/MW3/Xbox/SP/animscripts/shoot_behavior.gsc @@ -0,0 +1,724 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\shoot_behavior.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 27 + * Decompile Time: 459 ms + * Timestamp: 10/27/2023 2:30:49 AM +*******************************************************************/ + +//Function Number: 1 +decidewhatandhowtoshoot(param_00) +{ + self endon("killanimscript"); + self notify("stop_deciding_how_to_shoot"); + self endon("stop_deciding_how_to_shoot"); + self endon("death"); + maps\_gameskill::resetmisstime(); + self.shootobjective = param_00; + self.shootent = undefined; + self.shootpos = undefined; + self.shootstyle = "none"; + self.fastburst = 0; + self.shouldreturntocover = undefined; + if(!isdefined(self.var_8C8)) + { + self.var_8C8 = 0; + } + + var_01 = isdefined(self.covernode) && self.covernode.type != "Cover Prone" && self.covernode.type != "Conceal Prone"; + if(var_01) + { + wait 0.05; + } + + var_02 = self.shootent; + var_03 = self.shootpos; + var_04 = self.shootstyle; + if(!isdefined(self.has_no_ir)) + { + self.a.laseron = 1; + animscripts/shared::updatelaserstatus(); + } + + if(animscripts/combat_utility::issniper()) + { + resetsniperaim(); + } + + if(var_01 && !self.a.atconcealmentnode || !animscripts/utility::canseeenemy()) + { + thread watchforincomingfire(); + } + + thread runonshootbehaviorend(); + self.ambushendtime = undefined; + for(;;) + { + if(isdefined(self.shootposoverride)) + { + if(!isdefined(self.enemy)) + { + self.shootpos = self.shootposoverride; + self.shootposoverride = undefined; + waitabit(); + } + else + { + self.shootposoverride = undefined; + } + } + + var_05 = undefined; + if(self.weapon == "none") + { + nogunshoot(); + } + else if(animscripts/utility::usingrocketlauncher()) + { + var_05 = rpgshoot(); + } + else if(animscripts/utility::usingsidearm()) + { + var_05 = pistolshoot(); + } + else + { + var_05 = rifleshoot(); + } + + if(isdefined(self.a.specialshootbehavior)) + { + [[ self.a.specialshootbehavior ]](); + } + + if(checkchanged(var_02,self.shootent) || !isdefined(self.shootent) && checkchanged(var_03,self.shootpos) || checkchanged(var_04,self.shootstyle)) + { + self notify("shoot_behavior_change"); + } + + var_02 = self.shootent; + var_03 = self.shootpos; + var_04 = self.shootstyle; + if(!isdefined(var_05)) + { + waitabit(); + } + } +} + +//Function Number: 2 +waitabit() +{ + self endon("enemy"); + self endon("done_changing_cover_pos"); + self endon("weapon_position_change"); + self endon("enemy_visible"); + if(isdefined(self.shootent)) + { + self.shootent endon("death"); + self endon("do_slow_things"); + wait 0.05; + while(isdefined(self.shootent)) + { + self.shootpos = self.shootent getshootatpos(); + wait 0.05; + } + + return; + } + + self waittill("do_slow_things"); +} + +//Function Number: 3 +nogunshoot() +{ + self.shootent = undefined; + self.shootpos = undefined; + self.shootstyle = "none"; + self.shootobjective = "normal"; +} + +//Function Number: 4 +shouldsuppress() +{ + return !animscripts/combat_utility::issniper() && !animscripts/utility::isshotgun(self.weapon); +} + +//Function Number: 5 +shouldshootenemyent() +{ + if(!animscripts/utility::canseeenemy()) + { + return 0; + } + + if(!isdefined(self.covernode) && !self canshootenemy()) + { + return 0; + } + + return 1; +} + +//Function Number: 6 +rifleshootobjectivenormal() +{ + if(!shouldshootenemyent()) + { + if(animscripts/combat_utility::issniper()) + { + resetsniperaim(); + } + + if(self.doingambush) + { + self.shootobjective = "ambush"; + return "retry"; + } + + if(!isdefined(self.enemy)) + { + havenothingtoshoot(); + return; + } + + markenemyposinvisible(); + if((self.providecoveringfire || randomint(5) > 0) && shouldsuppress()) + { + self.shootobjective = "suppress"; + } + else + { + self.shootobjective = "ambush"; + } + + return "retry"; + } + + setshootenttoenemy(); + setshootstyleforvisibleenemy(); +} + +//Function Number: 7 +rifleshootobjectivesuppress(param_00) +{ + if(!param_00) + { + havenothingtoshoot(); + return; + } + + self.shootent = undefined; + self.shootpos = animscripts/utility::getenemysightpos(); + setshootstyleforsuppression(); +} + +//Function Number: 8 +rifleshootobjectiveambush(param_00) +{ + self.shootstyle = "none"; + self.shootent = undefined; + if(!param_00) + { + func_08DB(); + if(shouldstopambushing()) + { + self.ambushendtime = undefined; + self notify("return_to_cover"); + self.shouldreturntocover = 1; + return; + } + + return; + } + + self.shootpos = animscripts/utility::getenemysightpos(); + if(shouldstopambushing()) + { + self.ambushendtime = undefined; + if(shouldsuppress()) + { + self.shootobjective = "suppress"; + } + + if(randomint(3) == 0) + { + self notify("return_to_cover"); + self.shouldreturntocover = 1; + } + + return "retry"; + } +} + +//Function Number: 9 +func_08DB() +{ + if(isdefined(self.enemy) && self cansee(self.enemy)) + { + setshootenttoenemy(); + return; + } + + var_00 = self getanglestolikelyenemypath(); + if(!isdefined(var_00)) + { + if(isdefined(self.covernode)) + { + var_00 = self.covernode.angles; + } + else if(isdefined(self.ambushnode)) + { + var_00 = self.ambushnode.angles; + } + else if(isdefined(self.enemy)) + { + var_00 = vectortoangles(self lastknownpos(self.enemy) - self.origin); + } + else + { + var_00 = self.angles; + } + } + + var_01 = 1024; + if(isdefined(self.enemy)) + { + var_01 = distance(self.origin,self.enemy.origin); + } + + var_02 = self geteye() + anglestoforward(var_00) * var_01; + if(!isdefined(self.shootpos) || distancesquared(var_02,self.shootpos) > 25) + { + self.shootpos = var_02; + } +} + +//Function Number: 10 +rifleshoot() +{ + if(self.shootobjective == "normal") + { + rifleshootobjectivenormal(); + return; + } + + if(shouldshootenemyent()) + { + self.shootobjective = "normal"; + self.ambushendtime = undefined; + return "retry"; + } + + markenemyposinvisible(); + if(animscripts/combat_utility::issniper()) + { + resetsniperaim(); + } + + var_00 = animscripts/utility::cansuppressenemy(); + if(self.shootobjective == "suppress" || self.team == "allies" && !isdefined(self.enemy) && !var_00) + { + rifleshootobjectivesuppress(var_00); + return; + } + + rifleshootobjectiveambush(var_00); +} + +//Function Number: 11 +shouldstopambushing() +{ + if(!isdefined(self.ambushendtime)) + { + if(self isbadguy()) + { + self.ambushendtime = gettime() + randomintrange(10000,-5536); + } + else + { + self.ambushendtime = gettime() + randomintrange(4000,10000); + } + } + + return self.ambushendtime < gettime(); +} + +//Function Number: 12 +rpgshoot() +{ + if(!shouldshootenemyent()) + { + markenemyposinvisible(); + havenothingtoshoot(); + return; + } + + setshootenttoenemy(); + self.shootstyle = "single"; + var_00 = lengthsquared(self.origin - self.shootpos); + if(var_00 < squared(512)) + { + self notify("return_to_cover"); + self.shouldreturntocover = 1; + } +} + +//Function Number: 13 +pistolshoot() +{ + if(self.shootobjective == "normal") + { + if(!shouldshootenemyent()) + { + if(!isdefined(self.enemy)) + { + havenothingtoshoot(); + return; + } + + markenemyposinvisible(); + self.shootobjective = "ambush"; + return "retry"; + } + + setshootenttoenemy(); + self.shootstyle = "single"; + return; + } + + if(shouldshootenemyent()) + { + self.shootobjective = "normal"; + self.ambushendtime = undefined; + return "retry"; + } + + markenemyposinvisible(); + self.shootent = undefined; + self.shootstyle = "none"; + self.shootpos = animscripts/utility::getenemysightpos(); + if(!isdefined(self.ambushendtime)) + { + self.ambushendtime = gettime() + randomintrange(4000,8000); + } + + if(self.ambushendtime < gettime()) + { + self.shootobjective = "normal"; + self.ambushendtime = undefined; + return "retry"; + } +} + +//Function Number: 14 +markenemyposinvisible() +{ + if(isdefined(self.enemy) && !self.var_8C8 && self.script != "combat") + { + if(isai(self.enemy) && isdefined(self.enemy.script) && self.enemy.script == "cover_stand" || self.enemy.script == "cover_crouch") + { + if(isdefined(self.enemy.a.var_8E3) && self.enemy.a.var_8E3 == "hide") + { + return; + } + } + + self.var_8E4 = self.enemy.origin; + } +} + +//Function Number: 15 +watchforincomingfire() +{ + self endon("killanimscript"); + self endon("stop_deciding_how_to_shoot"); + for(;;) + { + self waittill("suppression"); + if(self.suppressionmeter > self.suppressionthreshold) + { + if(readytoreturntocover()) + { + self notify("return_to_cover"); + self.shouldreturntocover = 1; + } + } + } +} + +//Function Number: 16 +readytoreturntocover() +{ + if(self.var_8C8) + { + return 0; + } + + if(!isdefined(self.enemy) || !self cansee(self.enemy)) + { + return 1; + } + + if(gettime() < self.var_8E8 + 800) + { + return 0; + } + + if(isplayer(self.enemy) && self.enemy.health < self.enemy.maxhealth * 0.5) + { + if(gettime() < self.var_8E8 + 3000) + { + return 0; + } + } + + return 1; +} + +//Function Number: 17 +runonshootbehaviorend() +{ + self endon("death"); + common_scripts\utility::waittill_any("killanimscript","stop_deciding_how_to_shoot"); + self.a.laseron = 0; + animscripts/shared::updatelaserstatus(); +} + +//Function Number: 18 +checkchanged(param_00,param_01) +{ + if(isdefined(param_00) != isdefined(param_01)) + { + return 1; + } + + if(!isdefined(param_01)) + { + return 0; + } + + return param_00 != param_01; +} + +//Function Number: 19 +setshootenttoenemy() +{ + self.shootent = self.enemy; + self.shootpos = self.shootent getshootatpos(); +} + +//Function Number: 20 +havenothingtoshoot() +{ + self.shootent = undefined; + self.shootpos = undefined; + self.shootstyle = "none"; + if(self.doingambush) + { + self.shootobjective = "ambush"; + } + + if(!self.var_8C8) + { + self notify("return_to_cover"); + self.shouldreturntocover = 1; + } +} + +//Function Number: 21 +shouldbeajerk() +{ + return level.gameskill == 3 && isplayer(self.enemy); +} + +//Function Number: 22 +setshootstyleforvisibleenemy() +{ + if(isdefined(self.shootent.enemy) && isdefined(self.shootent.enemy.syncedmeleetarget)) + { + return setshootstyle("single",0); + } + + if(animscripts/combat_utility::issniper()) + { + return setshootstyle("single",0); + } + + if(animscripts/utility::isshotgun(self.weapon)) + { + if(animscripts/utility::weapon_pump_action_shotgun()) + { + return setshootstyle("single",0); + } + else + { + return setshootstyle("semi",0); + } + } + + if(weaponburstcount(self.weapon) > 0) + { + return setshootstyle("burst",0); + } + + if(isdefined(self.juggernaut) && self.juggernaut) + { + return setshootstyle("full",1); + } + + var_00 = distancesquared(self getshootatpos(),self.shootpos); + var_01 = weaponclass(self.weapon) == "mg"; + if(self.providecoveringfire && var_01) + { + return setshootstyle("full",0); + } + + if(var_00 < -3036) + { + if(isdefined(self.shootent) && isdefined(self.shootent.magic_bullet_shield)) + { + return setshootstyle("single",0); + } + else + { + return setshootstyle("full",0); + } + } + else if(var_00 < 810000 || shouldbeajerk()) + { + if(weaponissemiauto(self.weapon) || shoulddosemiforvariety()) + { + return setshootstyle("semi",1); + } + else + { + return setshootstyle("burst",1); + } + } + else if(self.providecoveringfire || var_01 || var_00 < 2560000) + { + if(shoulddosemiforvariety()) + { + return setshootstyle("semi",0); + } + else + { + return setshootstyle("burst",0); + } + } + + return setshootstyle("single",0); +} + +//Function Number: 23 +setshootstyleforsuppression() +{ + var_00 = distancesquared(self getshootatpos(),self.shootpos); + if(weaponissemiauto(self.weapon)) + { + if(var_00 < 2560000) + { + return setshootstyle("semi",0); + } + + return setshootstyle("single",0); + } + + if(weaponclass(self.weapon) == "mg") + { + return setshootstyle("full",0); + } + + if(self.providecoveringfire || var_00 < 2560000) + { + if(shoulddosemiforvariety()) + { + return setshootstyle("semi",0); + } + else + { + return setshootstyle("burst",0); + } + } + + return setshootstyle("single",0); +} + +//Function Number: 24 +setshootstyle(param_00,param_01) +{ + self.shootstyle = param_00; + self.fastburst = param_01; +} + +//Function Number: 25 +shoulddosemiforvariety() +{ + if(weaponclass(self.weapon) != "rifle") + { + return 0; + } + + if(self.team != "allies") + { + return 0; + } + + var_00 = animscripts/utility::safemod(int(self.origin[1]),10000) + 2000; + var_01 = int(self.origin[0]) + gettime(); + return var_01 % 2 * var_00 > var_00; +} + +//Function Number: 26 +resetsniperaim() +{ + self.var_8F5 = 0; + self.sniperhitcount = 0; + thread sniper_glint_behavior(); +} + +//Function Number: 27 +sniper_glint_behavior() +{ + self endon("killanimscript"); + self endon("enemy"); + self endon("return_to_cover"); + self notify("new_glint_thread"); + self endon("new_glint_thread"); + if(isdefined(self.disable_sniper_glint) && self.disable_sniper_glint) + { + return; + } + + if(!isdefined(level._effect["sniper_glint"])) + { + return; + } + + if(!isalive(self.enemy)) + { + return; + } + + var_00 = common_scripts\utility::func_539("sniper_glint"); + wait 0.2; + for(;;) + { + if(self.weapon == self.primaryweapon && animscripts/combat_utility::player_sees_my_scope()) + { + if(distancesquared(self.origin,self.enemy.origin) > 65536) + { + playfxontag(var_00,self,"tag_flash"); + } + + var_01 = randomfloatrange(3,5); + wait var_01; + } + + wait 0.2; + } +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/snowmobile.gsc b/MW3/Xbox/SP/animscripts/snowmobile.gsc new file mode 100644 index 0000000..dad3650 --- /dev/null +++ b/MW3/Xbox/SP/animscripts/snowmobile.gsc @@ -0,0 +1,898 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\snowmobile.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 32 + * Decompile Time: 583 ms + * Timestamp: 10/27/2023 2:30:51 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self.current_event = "none"; + self.shoot_while_driving_thread = undefined; + snowmobile_geton(); + if(isdefined(self.drivingvehicle)) + { + main_driver(); + return; + } + + main_passenger(); +} + +//Function Number: 2 +snowmobile_geton() +{ + self.grenadeawareness = 0; + self.a.var_911 = "crouch"; + maps\_utility::disable_surprise(); + self.allowpain = 0; + self.getoffvehiclefunc = ::func_0ADA; + self.specialdeathfunc = ::snowmobile_normal_death; + self.disablebulletwhizbyreaction = 1; +} + +//Function Number: 3 +func_0ADA() +{ + self.allowpain = 1; + self.getoffvehiclefunc = undefined; + self.specialdeathfunc = undefined; + self.a.specialshootbehavior = undefined; + self.disablebulletwhizbyreaction = undefined; +} + +//Function Number: 4 +main_driver() +{ + var_00 = self.ridingvehicle.driver_shooting || self.ridingvehicle.riders.size == 1; + snowmobile_setanim_driver(var_00); + if(var_00) + { + animscripts/shared::placeweaponon(self.primaryweapon,"left"); + self.rightaimlimit = 90; + self.leftaimlimit = -90; + animscripts/track::setanimaimweight(1,0.2); + thread snowmobile_trackshootentorpos_driver(); + thread func_0AE5(); + } + else + { + animscripts/shared::placeweaponon(self.primaryweapon,"none"); + thread snowmobile_loop_driver(); + } + + snowmobile_handle_events("driver"); +} + +//Function Number: 5 +main_passenger() +{ + snowmobile_setanim_passenger(self.ridingvehicle.passenger_shooting); + if(self.ridingvehicle.passenger_shooting) + { + self.rightaimlimit = 180; + self.leftaimlimit = -180; + self.diraimlimit = 1; + animscripts/track::setanimaimweight(1,0.2); + thread snowmobile_trackshootentorpos_passenger(); + thread snowmobile_loop_passenger_shooting(); + } + else + { + thread func_0AE4(); + } + + snowmobile_handle_events("passenger"); +} + +//Function Number: 6 +snowmobile_loop_driver() +{ + self endon("death"); + self endon("killanimscript"); + var_00 = "left2right"; + var_01 = []; + self setanimknoball(%sm_turn,%body,1,0); + self setanim(animscripts/utility::animarray("drive"),1,0); + self setanimknob(animscripts/utility::animarray(var_01),1,0); + self setanimtime(animscripts/utility::animarray(var_01),0.5); + for(;;) + { + if(self.ridingvehicle.steering_enable) + { + var_02 = 0.5 * 1 + maps\_vehicle::update_steering(self.ridingvehicle); + var_03 = self getanimtime(animscripts/utility::animarray(var_01)); + if(var_01 == "right2left") + { + var_03 = 1 - var_03; + } + + var_04 = 20 * abs(var_03 - var_02); + if(var_03 < var_02) + { + var_01 = "left2right"; + var_04 = var_04 * var_41["left2right"]; + } + else + { + var_01 = "right2left"; + var_04 = var_04 * var_41["right2left"]; + var_03 = 1 - var_03; + } + } + else + { + var_01 = "left2right"; + var_04 = 0; + var_03 = 0.5; + } + + self setanimknoblimited(animscripts/utility::animarray(var_01),1,0.1,var_04); + self setanimtime(animscripts/utility::animarray(var_01),var_03); + wait 0.05; + } +} + +//Function Number: 7 +func_0AE4() +{ + self endon("death"); + self endon("killanimscript"); + self setanimknoball(animscripts/utility::animarray("hide"),%body,1,0); + self setanimknob(animscripts/utility::animarray("drive"),1,0); + for(;;) + { + var_00 = maps\_vehicle::update_steering(self.ridingvehicle); + self setanimlimited(%sm_lean,abs(var_00),0.05); + if(var_00 >= 0) + { + self setanimknoblimited(animscripts/utility::animarray("lean_right"),1,0.05); + } + else + { + self setanimknoblimited(animscripts/utility::animarray("lean_left"),1,0.05); + } + + wait 0.05; + } +} + +//Function Number: 8 +func_0AE5() +{ + self endon("death"); + self endon("killanimscript"); + var_00 = 0.05; + var_01 = 0; + self setanimknoball(%sm_aiming,%body,1,0); + self setanimknob(animscripts/utility::animarray("idle"),1,0); + for(;;) + { + if(self.current_event != "none") + { + self waittill("snowmobile_event_finished"); + continue; + } + + var_02 = maps\_vehicle::update_steering(self.ridingvehicle); + var_03 = 1 - abs(var_02); + var_04 = max(0,0 - var_02); + var_05 = max(0,var_02); + self setanimlimited(animscripts/utility::animarray("straight_level_center"),var_03,var_00); + self setanimlimited(animscripts/utility::animarray("straight_level_left"),var_04,var_00); + self setanimlimited(animscripts/utility::animarray("straight_level_right"),var_05,var_00); + if(self.bulletsinclip <= 0) + { + animscripts/weaponlist::refillclip(); + var_01 = gettime() + 3000; + } + + if(var_01 <= gettime()) + { + snowmobile_start_shooting(); + } + + self setanimknoblimited(animscripts/utility::animarray("add_aim_left_center"),var_03,var_00); + self setanimlimited(animscripts/utility::animarray("add_aim_left_left"),var_04,var_00); + self setanimlimited(animscripts/utility::animarray("add_aim_left_right"),var_05,var_00); + self setanimknoblimited(animscripts/utility::animarray("add_aim_right_center"),var_03,var_00); + self setanimlimited(animscripts/utility::animarray("add_aim_right_left"),var_04,var_00); + self setanimlimited(animscripts/utility::animarray("add_aim_right_right"),var_05,var_00); + thread snowmobile_stop_shooting(); + wait 0.05; + } +} + +//Function Number: 9 +snowmobile_loop_passenger_shooting() +{ + self endon("death"); + self endon("killanimscript"); + var_00 = 0.05; + self setanimknoball(%sm_aiming,%body,1,0); + self setanimknob(animscripts/utility::animarray("idle"),1,0); + for(;;) + { + if(self.current_event != "none") + { + self waittill("snowmobile_event_finished"); + continue; + } + + if(snowmobile_reload()) + { + continue; + } + + var_01 = maps\_vehicle::update_steering(self.ridingvehicle); + var_02 = 1 - abs(var_01); + var_03 = max(0,0 - var_01); + var_04 = max(0,var_01); + self setanimlimited(animscripts/utility::animarray("straight_level_center"),var_02,var_00); + self setanimlimited(animscripts/utility::animarray("straight_level_left"),var_03,var_00); + self setanimlimited(animscripts/utility::animarray("straight_level_right"),var_04,var_00); + snowmobile_start_shooting(); + self setanimlimited(animscripts/utility::animarray("aim_left_center"),var_02,var_00); + self setanimlimited(animscripts/utility::animarray("aim_left_left"),var_03,var_00); + self setanimlimited(animscripts/utility::animarray("aim_left_right"),var_04,var_00); + self setanimlimited(animscripts/utility::animarray("aim_right_center"),var_02,var_00); + self setanimlimited(animscripts/utility::animarray("aim_right_left"),var_03,var_00); + self setanimlimited(animscripts/utility::animarray("aim_right_right"),var_04,var_00); + self setanimlimited(animscripts/utility::animarray("add_aim_backleft_center"),var_02,var_00); + self setanimlimited(animscripts/utility::animarray("add_aim_backleft_left"),var_03,var_00); + self setanimlimited(animscripts/utility::animarray("add_aim_backleft_right"),var_04,var_00); + self setanimlimited(animscripts/utility::animarray("add_aim_backright_center"),var_02,var_00); + self setanimlimited(animscripts/utility::animarray("add_aim_backright_left"),var_03,var_00); + self setanimlimited(animscripts/utility::animarray("add_aim_backright_right"),var_04,var_00); + if(isplayer(self.enemy)) + { + self updateplayersightaccuracy(); + } + + wait 0.05; + thread snowmobile_stop_shooting(); + } +} + +//Function Number: 10 +snowmobile_do_event(param_00) +{ + self endon("death"); + self.ridingvehicle.steering_enable = 0; + self setflaggedanimknoblimitedrestart("snowmobile_event",param_00,1,0.17); + animscripts/shared::donotetracks("snowmobile_event",::snowmobile_waitfor_start_lean); + self setanimknoblimited(animscripts/utility::animarray("event_restore"),1,0.1); + self.ridingvehicle.steering_enable = 1; + self.current_event = "none"; + self notify("snowmobile_event_finished"); +} + +//Function Number: 11 +snowmobile_handle_events(param_00) +{ + self endon("death"); + self endon("killanimscript"); + var_01 = self.ridingvehicle; + for(;;) + { + if(var_01.event["jump"][param_00]) + { + var_01.event["jump"][param_00] = 0; + self notify("snowmobile_event_occurred"); + self.current_event = "jump"; + var_01.steering_enable = 0; + self setflaggedanimknoblimitedrestart("jump",animscripts/utility::animarray("event_jump"),1,0.17); + } + + if(var_01.event["bump"][param_00]) + { + var_01.event["bump"][param_00] = 0; + self notify("snowmobile_event_occurred"); + if(self.current_event != "bump_big") + { + thread snowmobile_do_event(animscripts/utility::animarray("event_bump")); + } + } + + if(var_01.event["bump_big"][param_00]) + { + var_01.event["bump_big"][param_00] = 0; + self notify("snowmobile_event_occurred"); + self.current_event = "bump_big"; + thread snowmobile_do_event(animscripts/utility::animarray("event_bump_big")); + } + + if(var_01.event["sway_left"][param_00]) + { + var_01.event["sway_left"][param_00] = 0; + self notify("snowmobile_event_occurred"); + if(self.current_event != "bump_big") + { + thread snowmobile_do_event(animscripts/utility::animarray("event_sway")["left"]); + } + } + + if(var_01.event["sway_right"][param_00]) + { + var_01.event["sway_right"][param_00] = 0; + self notify("snowmobile_event_occurred"); + if(self.current_event != "bump_big") + { + thread snowmobile_do_event(animscripts/utility::animarray("event_sway")["right"]); + } + } + + wait 0.05; + } +} + +//Function Number: 12 +snowmobile_start_shooting() +{ + self notify("want_shoot_while_driving"); + self setanim(%sm_add_fire,1,0.2); + if(isdefined(self.shoot_while_driving_thread)) + { + return; + } + + self.shoot_while_driving_thread = 1; + thread func_0AEC(); + thread snowmobile_shoot(); +} + +//Function Number: 13 +snowmobile_stop_shooting() +{ + self endon("killanimscript"); + self endon("want_shoot_while_driving"); + wait 0.05; + self notify("end_shoot_while_driving"); + self.shoot_while_driving_thread = undefined; + self clearanim(%sm_add_fire,0.2); +} + +//Function Number: 14 +func_0AEC() +{ + self endon("killanimscript"); + self endon("end_shoot_while_driving"); + self.a.specialshootbehavior = ::snowmobileshootbehavior; + snowmobile_decide_shoot_internal(); + self.shoot_while_driving_thread = undefined; +} + +//Function Number: 15 +snowmobile_decide_shoot_internal() +{ + self endon("snowmobile_event_occurred"); + animscripts/shoot_behavior::decidewhatandhowtoshoot("normal"); +} + +//Function Number: 16 +snowmobileshootbehavior() +{ + if(!isdefined(self.enemy)) + { + self.shootent = undefined; + self.shootpos = undefined; + self.shootstyle = "none"; + return; + } + + self.shootent = self.enemy; + self.shootpos = self.enemy getshootatpos(); + var_00 = distancesquared(self.origin,self.enemy.origin); + if(var_00 < 1000000) + { + self.shootstyle = "full"; + } + else if(var_00 < 4000000) + { + self.shootstyle = "burst"; + } + else + { + self.shootstyle = "single"; + } + + if(isdefined(self.enemy.vehicle)) + { + var_01 = 0.5; + var_02 = self.shootent.vehicle; + var_03 = self.ridingvehicle; + var_04 = var_03.origin - var_02.origin; + var_05 = anglestoforward(var_02.angles); + var_06 = anglestoright(var_02.angles); + var_07 = vectordot(var_04,var_05); + if(var_07 < 0) + { + var_08 = var_02 vehicle_getspeed() * var_01; + var_08 = var_08 * 17.6; + if(var_08 > 50) + { + var_09 = vectordot(var_04,var_06); + var_09 = var_09 / 3; + if(var_09 > 128) + { + var_09 = 128; + } + else if(var_09 < -128) + { + var_09 = -128; + } + + if(var_09 > 0) + { + var_09 = 128 - var_09; + } + else + { + var_09 = -128 - var_09; + } + + self.shootent = undefined; + self.shootpos = var_02.origin + var_08 * var_05 + var_09 * var_06; + return; + } + } + } +} + +//Function Number: 17 +snowmobile_shoot() +{ + self endon("killanimscript"); + self endon("end_shoot_while_driving"); + self notify("doing_shootWhileDriving"); + self endon("doing_shootWhileDriving"); + for(;;) + { + if(!self.bulletsinclip) + { + wait 0.5; + continue; + } + + animscripts/combat_utility::shootuntilshootbehaviorchange(); + } +} + +//Function Number: 18 +snowmobile_reload() +{ + if(!self.ridingvehicle.steering_enable) + { + return 0; + } + + if(!animscripts/combat_utility::needtoreload(0)) + { + return 0; + } + + if(!animscripts/utility::usingriflelikeweapon()) + { + return 0; + } + + snowmobile_reload_internal(); + self notify("abort_reload"); + return 1; +} + +//Function Number: 19 +snowmobile_reload_internal() +{ + self endon("snowmobile_event_occurred"); + self.stop_aiming_for_reload = 1; + self waittill("start_blending_reload"); + self setanim(%sm_aiming,0,0.25); + self setflaggedanimrestart("gun_down",animscripts/utility::animarray("gun_down"),1,0.25); + animscripts/shared::donotetracks("gun_down"); + self clearanim(animscripts/utility::animarray("gun_down"),0); + self setflaggedanimknoballrestart("reload_anim",animscripts/utility::animarray("reload"),%body,1,0.25); + animscripts/shared::donotetracks("reload_anim"); + self clearanim(%sm_reload,0.2); + self setflaggedanimrestart("gun_up",animscripts/utility::animarray("gun_up"),1,0.25); + self.var_AF6 = 1; + animscripts/shared::donotetracks("gun_up",::snowmobile_waitfor_start_aim); + self.stop_aiming_for_reload = undefined; + self clearanim(%sm_reload,0.1); + self setanim(%sm_aiming,1,0.1); + if(isdefined(self.var_AF6)) + { + self.var_AF6 = undefined; + animscripts/shared::donotetracks("gun_up",::snowmobile_waitfor_end); + self clearanim(animscripts/utility::animarray("gun_up"),0); + } +} + +//Function Number: 20 +snowmobile_waitfor_start_aim(param_00) +{ + if(param_00 == "start_aim") + { + return 1; + } +} + +//Function Number: 21 +snowmobile_waitfor_end(param_00) +{ + if(param_00 == "end") + { + return 1; + } +} + +//Function Number: 22 +snowmobile_waitfor_start_lean(param_00) +{ + if(param_00 == "start_lean") + { + return 1; + } +} + +//Function Number: 23 +snowmobile_trackshootentorpos_driver() +{ + self endon("killanimscript"); + self endon("stop tracking"); + var_00 = 0.05; + var_01 = 8; + var_02 = 0; + var_03 = 0; + var_04 = 1; + for(;;) + { + animscripts/track::incranimaimweight(); + var_05 = (self.origin[0],self.origin[1],self geteye()[2]); + var_06 = self.shootpos; + if(isdefined(self.shootent)) + { + var_06 = self.shootent getshootatpos(); + } + + if(!isdefined(var_06)) + { + var_03 = 0; + var_07 = self getanglestolikelyenemypath(); + if(isdefined(var_07)) + { + var_03 = angleclamp180(self.angles[1] - var_07[1]); + } + } + else + { + var_08 = var_06 - var_05; + var_09 = vectortoangles(var_08); + var_03 = self.angles[1] - var_09[1]; + var_03 = angleclamp180(var_03); + } + + if(var_03 > self.rightaimlimit || var_03 < self.leftaimlimit) + { + var_03 = 0; + } + + if(var_04) + { + var_04 = 0; + } + else + { + var_0A = var_03 - var_02; + if(abs(var_0A) > var_01) + { + var_03 = var_02 + var_01 * common_scripts\utility::sign(var_0A); + } + } + + var_02 = var_03; + var_0B = min(max(0 - var_03,0),90) / 90 * self.a.var_8AE; + var_0C = min(max(var_03,0),90) / 90 * self.a.var_8AE; + self setanimlimited(%sm_aim_4,var_0B,var_00); + self setanimlimited(%sm_aim_6,var_0C,var_00); + wait 0.05; + } +} + +//Function Number: 24 +snowmobile_trackshootentorpos_passenger() +{ + self endon("killanimscript"); + self endon("stop tracking"); + var_00 = 0.05; + var_01 = 5; + var_02 = 20; + var_03 = 15; + var_04 = 40; + var_05 = 30; + var_06 = 0; + var_07 = 0; + var_08 = 1; + for(;;) + { + animscripts/track::incranimaimweight(); + var_09 = (self.origin[0],self.origin[1],self geteye()[2]); + var_0A = self.shootpos; + if(isdefined(self.shootent)) + { + var_0A = self.shootent getshootatpos(); + } + + if(!isdefined(var_0A)) + { + var_07 = 0; + var_0B = self getanglestolikelyenemypath(); + if(isdefined(var_0B)) + { + var_07 = angleclamp180(self.angles[1] - var_0B[1]); + } + } + else + { + var_0C = var_0A - var_09; + var_0D = vectortoangles(var_0C); + var_07 = self.angles[1] - var_0D[1]; + var_07 = angleclamp180(var_07); + } + + if(isdefined(self.stop_aiming_for_reload) || var_07 > 0 && var_07 - self.rightaimlimit * self.diraimlimit > 0 || var_07 < 0 && var_07 - self.leftaimlimit * self.diraimlimit < 0) + { + var_07 = 0; + } + + if(var_08) + { + var_08 = 0; + } + else + { + if(var_06 < -180 + var_04 && var_07 > 180 - var_05) + { + var_07 = -179; + } + + if(var_06 > 180 - var_04 && var_07 < -180 + var_05) + { + var_07 = 179; + } + + var_0E = var_07 - var_06; + var_0F = var_02 - var_01 * abs(var_0E) / 180 + var_01; + if(isdefined(self.stop_aiming_for_reload)) + { + var_0F = var_03; + if(abs(var_06) < 45) + { + self notify("start_blending_reload"); + } + } + + if(abs(var_0E) > var_0F) + { + var_07 = var_06 + var_0F * common_scripts\utility::sign(var_0E); + } + } + + var_06 = var_07; + var_10 = max(-90 - var_07,0) / 90 * self.a.var_8AE; + var_11 = min(max(0 - var_07,0),90) / 90 * self.a.var_8AE; + var_12 = max(90 - abs(var_07),0) / 90 * self.a.var_8AE; + var_13 = min(max(var_07,0),90) / 90 * self.a.var_8AE; + var_14 = max(-90 + var_07,0) / 90 * self.a.var_8AE; + self setanimlimited(%sm_aim_1,var_10,var_00); + self setanimlimited(%sm_aim_4_delta,var_11,var_00); + self setanimlimited(%sm_aim_5_delta,var_12,var_00); + self setanimlimited(%sm_aim_6_delta,var_13,var_00); + self setanimlimited(%sm_aim_3,var_14,var_00); + wait 0.05; + } +} + +//Function Number: 25 +func_0AFC(param_00,param_01,param_02) +{ + var_03 = undefined; + var_04 = undefined; + var_05 = 0; + for(var_06 = 0;var_06 < param_00.size;var_06++) + { + var_07 = animscripts/utility::absangleclamp180(param_02 - param_01[var_06]); + if(!isdefined(var_03) || var_07 < var_05) + { + var_04 = var_03; + var_03 = param_00[var_06]; + var_05 = var_07; + continue; + } + + if(!isdefined(var_04)) + { + var_04 = param_00[var_06]; + } + } + + var_08 = var_03; + if(isdefined(level.prevsnowmobiledeath) && var_08 == level.prevsnowmobiledeath && gettime() - level.prevsnowmobiledeathtime < 500) + { + var_08 = var_04; + } + + anim.prevsnowmobiledeath = var_08; + anim.prevsnowmobiledeathtime = gettime(); + return var_08; +} + +//Function Number: 26 +snowmobile_death_launchslide() +{ + var_00 = self.ridingvehicle; + var_01 = var_00.prevframevelocity; + var_01 = (var_01[0],var_01[1],randomfloatrange(200,400)) * 0.75; + if(lengthsquared(var_01) > 1000000) + { + var_01 = vectornormalize(var_01) * 1000; + } + + var_02 = spawn("script_origin",self.origin); + var_02 moveslide((0,0,40),15,var_01); + self linkto(var_02); + var_02 thread func_0B03(); +} + +//Function Number: 27 +snowmobile_normal_death() +{ + var_00 = []; + var_01 = []; + var_02 = func_0AFC(var_41,var_01,self.damageyaw); + animscripts/death::func_941(var_02); + return 1; +} + +//Function Number: 28 +snowmobile_collide_death() +{ + var_00 = self.ridingvehicle; + if(!isdefined(var_00)) + { + return snowmobile_normal_death(); + } + + var_01 = var_00.prevframevelocity; + snowmobile_death_launchslide(); + var_02 = vectortoangles(var_01); + var_03 = angleclamp180(var_02[1] - self.angles[1]); + var_04 = []; + var_05 = []; + var_06 = func_0AFC(var_41,var_05,var_04); + animscripts/death::func_941(var_06); + return 1; +} + +//Function Number: 29 +func_0B03() +{ + var_00 = self.origin; + for(var_01 = 0;var_01 < 60;var_01++) + { + wait 0.05; + var_00 = self.origin; + } + + wait 3; + if(isdefined(self)) + { + self delete(); + } +} + +//Function Number: 30 +func_0B04(param_00) +{ + self.a.array["idle"] = level.scr_anim["snowmobile"][param_00]["idle"]; + self.a.array["drive"] = level.scr_anim["snowmobile"][param_00]["drive"]; + self.a.array["fire"] = level.scr_anim["snowmobile"][param_00]["fire"]; + self.a.array["single"] = animscripts/utility::array(level.scr_anim["snowmobile"][param_00]["single"]); + self.a.array["burst2"] = level.scr_anim["snowmobile"][param_00]["fire"]; + self.a.array["burst3"] = level.scr_anim["snowmobile"][param_00]["fire"]; + self.a.array["burst4"] = level.scr_anim["snowmobile"][param_00]["fire"]; + self.a.array["burst5"] = level.scr_anim["snowmobile"][param_00]["fire"]; + self.a.array["burst6"] = level.scr_anim["snowmobile"][param_00]["fire"]; + self.a.array["semi2"] = level.scr_anim["snowmobile"][param_00]["fire"]; + self.a.array["semi3"] = level.scr_anim["snowmobile"][param_00]["fire"]; + self.a.array["semi4"] = level.scr_anim["snowmobile"][param_00]["fire"]; + self.a.array["semi5"] = level.scr_anim["snowmobile"][param_00]["fire"]; +} + +//Function Number: 31 +snowmobile_setanim_driver(param_00) +{ + self.a.array = []; + func_0B04("driver"); + self.a.array["left2right"] = level.scr_anim["snowmobile"]["driver"]["left2right"]; + self.a.array["right2left"] = level.scr_anim["snowmobile"]["driver"]["right2left"]; + self.a.array["straight_level_left"] = level.scr_anim["snowmobile"]["driver"]["straight_level"]["left"]; + self.a.array["straight_level_center"] = level.scr_anim["snowmobile"]["driver"]["straight_level"]["center"]; + self.a.array["straight_level_right"] = level.scr_anim["snowmobile"]["driver"]["straight_level"]["right"]; + self.a.array["add_aim_left_left"] = level.scr_anim["snowmobile"]["driver"]["add_aim_left"]["left"]; + self.a.array["add_aim_left_center"] = level.scr_anim["snowmobile"]["driver"]["add_aim_left"]["center"]; + self.a.array["add_aim_left_right"] = level.scr_anim["snowmobile"]["driver"]["add_aim_left"]["right"]; + self.a.array["add_aim_right_left"] = level.scr_anim["snowmobile"]["driver"]["add_aim_right"]["left"]; + self.a.array["add_aim_right_center"] = level.scr_anim["snowmobile"]["driver"]["add_aim_right"]["center"]; + self.a.array["add_aim_right_right"] = level.scr_anim["snowmobile"]["driver"]["add_aim_right"]["right"]; + if(param_00) + { + self.a.array["event_jump"] = level.scr_anim["snowmobile"]["driver"]["shoot_jump"]; + self.a.array["event_bump"] = level.scr_anim["snowmobile"]["driver"]["shoot_bump"]; + self.a.array["event_bump_big"] = level.scr_anim["snowmobile"]["driver"]["shoot_bump_big"]; + self.a.array["event_sway"] = []; + self.a.array["event_sway"]["left"] = level.scr_anim["snowmobile"]["driver"]["shoot_sway_left"]; + self.a.array["event_sway"]["right"] = level.scr_anim["snowmobile"]["driver"]["shoot_sway_right"]; + self.a.array["event_restore"] = %sm_aiming; + return; + } + + self.a.array["event_jump"] = level.scr_anim["snowmobile"]["driver"]["drive_jump"]; + self.a.array["event_bump"] = level.scr_anim["snowmobile"]["driver"]["drive_bump"]; + self.a.array["event_bump_big"] = level.scr_anim["snowmobile"]["driver"]["drive_bump_big"]; + self.a.array["event_sway"] = []; + self.a.array["event_sway"]["left"] = level.scr_anim["snowmobile"]["driver"]["drive_sway_left"]; + self.a.array["event_sway"]["right"] = level.scr_anim["snowmobile"]["driver"]["drive_sway_right"]; + self.a.array["event_restore"] = %sm_turn; +} + +//Function Number: 32 +snowmobile_setanim_passenger(param_00) +{ + self.a.array = []; + func_0B04("passenger"); + self.a.array["hide"] = level.scr_anim["snowmobile"]["passenger"]["hide"]; + self.a.array["lean_left"] = level.scr_anim["snowmobile"]["passenger"]["add_lean"]["left"]; + self.a.array["lean_right"] = level.scr_anim["snowmobile"]["passenger"]["add_lean"]["right"]; + self.a.array["reload"] = level.scr_anim["snowmobile"]["passenger"]["reload"]; + self.a.array["gun_up"] = level.scr_anim["snowmobile"]["passenger"]["gun_up"]; + self.a.array["gun_down"] = level.scr_anim["snowmobile"]["passenger"]["gun_down"]; + self.a.array["aim_left_left"] = level.scr_anim["snowmobile"]["passenger"]["aim_left"]["left"]; + self.a.array["aim_left_center"] = level.scr_anim["snowmobile"]["passenger"]["aim_left"]["center"]; + self.a.array["aim_left_right"] = level.scr_anim["snowmobile"]["passenger"]["aim_left"]["right"]; + self.a.array["aim_right_left"] = level.scr_anim["snowmobile"]["passenger"]["aim_right"]["left"]; + self.a.array["aim_right_center"] = level.scr_anim["snowmobile"]["passenger"]["aim_right"]["center"]; + self.a.array["aim_right_right"] = level.scr_anim["snowmobile"]["passenger"]["aim_right"]["right"]; + self.a.array["add_aim_backleft_left"] = level.scr_anim["snowmobile"]["passenger"]["add_aim_backleft"]["left"]; + self.a.array["add_aim_backleft_center"] = level.scr_anim["snowmobile"]["passenger"]["add_aim_backleft"]["center"]; + self.a.array["add_aim_backleft_right"] = level.scr_anim["snowmobile"]["passenger"]["add_aim_backleft"]["right"]; + self.a.array["add_aim_backright_left"] = level.scr_anim["snowmobile"]["passenger"]["add_aim_backright"]["left"]; + self.a.array["add_aim_backright_center"] = level.scr_anim["snowmobile"]["passenger"]["add_aim_backright"]["center"]; + self.a.array["add_aim_backright_right"] = level.scr_anim["snowmobile"]["passenger"]["add_aim_backright"]["right"]; + self.a.array["straight_level_left"] = level.scr_anim["snowmobile"]["passenger"]["straight_level"]["left"]; + self.a.array["straight_level_center"] = level.scr_anim["snowmobile"]["passenger"]["straight_level"]["center"]; + self.a.array["straight_level_right"] = level.scr_anim["snowmobile"]["passenger"]["straight_level"]["right"]; + if(param_00) + { + self.a.array["event_jump"] = level.scr_anim["snowmobile"]["passenger"]["drive_jump"]; + self.a.array["event_bump"] = level.scr_anim["snowmobile"]["passenger"]["drive_bump"]; + self.a.array["event_bump_big"] = level.scr_anim["snowmobile"]["passenger"]["drive_bump_big"]; + self.a.array["event_sway"] = []; + self.a.array["event_sway"]["left"] = level.scr_anim["snowmobile"]["passenger"]["drive_sway_left"]; + self.a.array["event_sway"]["right"] = level.scr_anim["snowmobile"]["passenger"]["drive_sway_right"]; + self.a.array["event_restore"] = %sm_aiming; + return; + } + + self.a.array["event_jump"] = level.scr_anim["snowmobile"]["passenger"]["hide_jump"]; + self.a.array["event_bump"] = level.scr_anim["snowmobile"]["passenger"]["hide_bump"]; + self.a.array["event_bump_big"] = level.scr_anim["snowmobile"]["passenger"]["hide_bump_big"]; + self.a.array["event_sway"] = []; + self.a.array["event_sway"]["left"] = level.scr_anim["snowmobile"]["passenger"]["hide_sway_left"]; + self.a.array["event_sway"]["right"] = level.scr_anim["snowmobile"]["passenger"]["hide_sway_right"]; + self.a.array["event_restore"] = %sm_turn; +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/squadmanager.gsc b/MW3/Xbox/SP/animscripts/squadmanager.gsc new file mode 100644 index 0000000..0968b7f --- /dev/null +++ b/MW3/Xbox/SP/animscripts/squadmanager.gsc @@ -0,0 +1,823 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\squadmanager.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 32 + * Decompile Time: 558 ms + * Timestamp: 10/27/2023 2:30:53 AM +*******************************************************************/ + +//Function Number: 1 +func_0676() +{ + if(isdefined(level.squadinitialized) && level.squadinitialized) + { + return; + } + + anim.var_678 = []; + anim.squadcreatestrings = []; + anim.squads = []; + anim.squadindex = []; + anim.squadrand = 0; + anim.squadinitialized = 1; +} + +//Function Number: 2 +createsquad(param_00,param_01) +{ + level.squads[param_00] = spawnstruct(); + var_02 = level.squads[param_00]; + var_02.var_67E = param_00; + var_02.team = getsquadteam(param_01); + var_02.sighttime = 0; + var_02.origin = undefined; + var_02.forward = undefined; + var_02.enemy = undefined; + var_02.isincombat = 0; + var_02.membercount = 0; + var_02.members = []; + var_02.officers = []; + var_02.officercount = 0; + var_02.squadlist = []; + var_02.memberaddfuncs = []; + var_02.var_688 = []; + var_02.var_689 = []; + var_02.memberremovestrings = []; + var_02.squadupdatefuncs = []; + var_02.squadupdatestrings = []; + var_02.squadid = level.squadindex.size; + var_02 func_06B7("combat",0.75); + var_02 func_06B7("cover",0.75); + var_02 func_06B7("move",0.75); + var_02 func_06B7("stop",0.75); + var_02 func_06B7("death",0.75); + var_02 func_06B7("suppressed",0.75); + var_02 func_06B7("attacking",0.5); + level.squadindex[level.squadindex.size] = var_02; + var_02 updatesquadlist(); + level notify("squad created " + param_00); + anim notify("squad created " + param_00); + for(var_03 = 0;var_03 < level.var_678.size;var_03++) + { + var_04 = level.var_678[var_03]; + var_02 thread [[ var_04 ]](); + } + + for(var_03 = 0;var_03 < level.squadindex.size;var_03++) + { + level.squadindex[var_03] updatesquadlist(); + } + + var_02 thread updatewaiter(); + var_02 thread squadtracker(); + var_02 thread officerwaiter(); + var_02 thread updatememberstates(); + return var_02; +} + +//Function Number: 3 +deletesquad(param_00) +{ + if(param_00 == "axis" || param_00 == "team3" || param_00 == "allies") + { + return; + } + + var_01 = level.squads[param_00].squadid; + var_02 = level.squads[param_00]; + var_02 notify("squad_deleting"); + while(var_02.members.size) + { + var_02.members[0] addtosquad(var_02.members[0].team); + } + + level.squadindex[var_01] = level.squadindex[level.squadindex.size - 1]; + level.squadindex[var_01].squadid = var_01; + level.squadindex[level.squadindex.size - 1] = undefined; + level.squads[param_00] = undefined; + level notify("squad deleted " + param_00); + anim notify("squad deleted " + param_00); + for(var_03 = 0;var_03 < level.squadindex.size;var_03++) + { + level.squadindex[var_03] updatesquadlist(); + } +} + +//Function Number: 4 +generatesquadname() +{ + var_00 = "auto" + level.squadrand; + level.squadrand++; + return var_00; +} + +//Function Number: 5 +addplayertosquad(param_00) +{ + if(!isdefined(param_00)) + { + if(isdefined(self.script_squadname)) + { + param_00 = self.script_squadname; + } + else + { + param_00 = self.team; + } + } + + if(!isdefined(level.squads[param_00])) + { + anim createsquad(param_00,self); + } + + var_01 = level.squads[param_00]; + self.squad = var_01; +} + +//Function Number: 6 +squadchange() +{ + self endon("death"); + wait 10; + if(!isdefined(self.script_squadname)) + { + var_00 = self.team + self.script_flanker; + } + else + { + var_00 = self.script_squadname + self.script_flanker; + } + + addtosquad(var_00); +} + +//Function Number: 7 +getsquadteam(param_00) +{ + var_01 = "allies"; + if(param_00.team == "axis" || param_00.team == "neutral" || param_00.team == "team3") + { + var_01 = param_00.team; + } + + return var_01; +} + +//Function Number: 8 +addtosquad(param_00) +{ + if(!isdefined(param_00)) + { + if(isdefined(self.script_flanker)) + { + thread squadchange(); + } + + if(isdefined(self.script_squadname)) + { + param_00 = self.script_squadname; + } + else + { + param_00 = self.team; + } + } + + if(!isdefined(level.squads[param_00])) + { + anim createsquad(param_00,self); + } + + var_01 = level.squads[param_00]; + if(isdefined(self.squad)) + { + if(self.squad == var_01) + { + return; + } + else + { + func_069C(); + } + } + + self.lastenemysighttime = 0; + self.combattime = 0; + self.squad = var_01; + self.memberid = var_01.members.size; + var_01.members[self.memberid] = self; + var_01.membercount = var_01.members.size; + if(isdefined(level.loadoutcomplete)) + { + if(self.team == "allies" && animscripts/battlechatter::isofficer()) + { + addofficertosquad(); + } + } + + for(var_02 = 0;var_02 < self.squad.memberaddfuncs.size;var_02++) + { + var_03 = self.squad.memberaddfuncs[var_02]; + self thread [[ var_03 ]](self.squad.var_67E); + } + + thread membercombatwaiter(); + thread memberdeathwaiter(); +} + +//Function Number: 9 +func_069C() +{ + var_00 = self.squad; + var_01 = -1; + if(isdefined(self)) + { + var_01 = self.memberid; + } + else + { + for(var_02 = 0;var_02 < var_00.members.size;var_02++) + { + if(var_00.members[var_02] == self) + { + var_01 = var_02; + } + } + } + + if(var_01 != var_00.members.size - 1) + { + var_03 = var_00.members[var_00.members.size - 1]; + var_00.members[var_01] = var_03; + if(isdefined(var_03)) + { + var_03.memberid = var_01; + } + } + + var_00.members[var_00.members.size - 1] = undefined; + var_00.membercount = var_00.members.size; + if(isdefined(self.officerid)) + { + removeofficerfromsquad(); + } + + for(var_02 = 0;var_02 < self.squad.var_689.size;var_02++) + { + var_04 = self.squad.var_689[var_02]; + self thread [[ var_04 ]](var_00.var_67E); + } + + if(var_00.membercount == 0) + { + deletesquad(var_00.var_67E); + } + + if(isdefined(self)) + { + self.squad = undefined; + self.memberid = undefined; + } + + self notify("removed from squad"); +} + +//Function Number: 10 +addofficertosquad() +{ + var_00 = self.squad; + if(isdefined(self.officerid)) + { + return; + } + + self.officerid = var_00.officers.size; + var_00.officers[self.officerid] = self; + var_00.officercount = var_00.officers.size; +} + +//Function Number: 11 +removeofficerfromsquad() +{ + var_00 = self.squad; + var_01 = -1; + if(isdefined(self)) + { + var_01 = self.officerid; + } + else + { + for(var_02 = 0;var_02 < var_00.officers.size;var_02++) + { + if(var_00.officers[var_02] == self) + { + var_01 = var_02; + } + } + } + + if(var_01 != var_00.officers.size - 1) + { + var_03 = var_00.officers[var_00.officers.size - 1]; + var_00.officers[var_01] = var_03; + if(isdefined(var_03)) + { + var_03.officerid = var_01; + } + } + + var_00.officers[var_00.officers.size - 1] = undefined; + var_00.officercount = var_00.officers.size; + if(isdefined(self)) + { + self.officerid = undefined; + } +} + +//Function Number: 12 +officerwaiter() +{ + if(!isdefined(level.loadoutcomplete)) + { + anim waittill("loadout complete"); + } + + for(var_00 = 0;var_00 < self.members.size;var_00++) + { + if(self.members[var_00] animscripts/battlechatter::isofficer()) + { + self.members[var_00] addofficertosquad(); + } + } +} + +//Function Number: 13 +updatewaiter() +{ + for(;;) + { + anim waittill("squadupdate",var_00); + switch(var_00) + { + case "squadlist": + updatesquadlist(); + break; + + case "combat": + updatecombat(); + break; + + case "origin": + updateorigin(); + break; + + case "forward": + updateheading(); + break; + } + } +} + +//Function Number: 14 +squadtracker() +{ + anim endon("squad deleted " + self.var_67E); + for(;;) + { + updateall(); + wait 0.1; + } +} + +//Function Number: 15 +memberdeathwaiter() +{ + self endon("removed from squad"); + self waittill("death",var_00); + if(isdefined(self)) + { + self.attacker = var_00; + } + + func_069C(); +} + +//Function Number: 16 +membercombatwaiter() +{ + self endon("removed from squad"); + for(;;) + { + self waittill("enemy"); + if(!isdefined(self.enemy)) + { + self.squad notify("squadupdate","combat"); + } + else + { + self.squad.isincombat = 1; + } + + wait 0.05; + } +} + +//Function Number: 17 +updateheading() +{ + if(isdefined(self.enemy)) + { + self.forward = vectornormalize(self.enemy.origin - self.origin); + return; + } + + var_00 = (0,0,0); + var_01 = 0; + for(var_02 = 0;var_02 < self.members.size;var_02++) + { + if(!isalive(self.members[var_02])) + { + continue; + } + + var_00 = var_00 + anglestoforward(self.members[var_02].angles); + var_01++; + } + + if(var_01) + { + self.forward = (var_00[0] / var_01,var_00[1] / var_01,var_00[2] / var_01); + return; + } + + self.forward = var_00; +} + +//Function Number: 18 +updateorigin() +{ + var_00 = (0,0,0); + var_01 = 0; + for(var_02 = 0;var_02 < self.members.size;var_02++) + { + if(!isalive(self.members[var_02])) + { + continue; + } + + var_00 = var_00 + self.members[var_02].origin; + var_01++; + } + + if(var_01) + { + self.origin = (var_00[0] / var_01,var_00[1] / var_01,var_00[2] / var_01); + return; + } + + self.origin = var_00; +} + +//Function Number: 19 +updatecombat() +{ + self.isincombat = 0; + for(var_00 = 0;var_00 < level.squadindex.size;var_00++) + { + self.squadlist[level.squadindex[var_00].var_67E].isincontact = 0; + } + + for(var_00 = 0;var_00 < self.members.size;var_00++) + { + if(isdefined(self.members[var_00].enemy) && isdefined(self.members[var_00].enemy.squad) && self.members[var_00].combattime > 0) + { + self.squadlist[self.members[var_00].enemy.squad.var_67E].isincontact = 1; + } + } +} + +//Function Number: 20 +updateenemy() +{ + var_00 = undefined; + for(var_01 = 0;var_01 < self.members.size;var_01++) + { + if(isdefined(self.members[var_01].enemy) && isdefined(self.members[var_01].enemy.squad)) + { + if(!isdefined(var_00)) + { + var_00 = self.members[var_01].enemy.squad; + continue; + } + + if(self.members[var_01].enemy.squad.membercount > var_00.membercount) + { + var_00 = self.members[var_01].enemy.squad; + } + } + } + + self.enemy = var_00; +} + +//Function Number: 21 +updateall() +{ + var_00 = (0,0,0); + var_01 = 0; + var_02 = undefined; + var_03 = 0; + updatecombat(); + for(var_04 = 0;var_04 < self.members.size;var_04++) + { + if(!isalive(self.members[var_04])) + { + continue; + } + + var_00 = var_00 + self.members[var_04].origin; + var_01++; + if(isdefined(self.members[var_04].enemy) && isdefined(self.members[var_04].enemy.squad)) + { + if(!isdefined(var_02)) + { + var_02 = self.members[var_04].enemy.squad; + continue; + } + + if(self.members[var_04].enemy.squad.membercount > var_02.membercount) + { + var_02 = self.members[var_04].enemy.squad; + } + } + } + + if(var_01) + { + self.origin = (var_00[0] / var_01,var_00[1] / var_01,var_00[2] / var_01); + } + else + { + self.origin = var_00; + } + + self.isincombat = var_03; + self.enemy = var_02; + updateheading(); +} + +//Function Number: 22 +updatesquadlist() +{ + for(var_00 = 0;var_00 < level.squadindex.size;var_00++) + { + if(!isdefined(self.squadlist[level.squadindex[var_00].var_67E])) + { + self.squadlist[level.squadindex[var_00].var_67E] = spawnstruct(); + self.squadlist[level.squadindex[var_00].var_67E].isincontact = 0; + } + + for(var_01 = 0;var_01 < self.squadupdatefuncs.size;var_01++) + { + var_02 = self.squadupdatefuncs[var_01]; + self thread [[ var_02 ]](level.squadindex[var_00].var_67E); + } + } +} + +//Function Number: 23 +printabovehead(param_00,param_01,param_02,param_03) +{ + self endon("death"); + if(!isdefined(param_02)) + { + param_02 = (0,0,0); + } + + if(!isdefined(param_03)) + { + param_03 = (1,0,0); + } + + for(var_04 = 0;var_04 < param_01 * 2;var_04++) + { + if(!isalive(self)) + { + return; + } + + var_05 = self getshootatpos() + (0,0,10) + param_02; + wait 0.05; + } +} + +//Function Number: 24 +func_06AE(param_00) +{ + switch(param_00) + { + case "move": + case "combat": + case "death": + case "stop": + self.a.state = param_00; + break; + + case "grenadecower": + case "pain": + break; + + case "stalingrad_cover_crouch": + case "concealment_stand": + case "concealment_prone": + case "concealment_crouch": + case "cover_wide_right": + case "cover_wide_left": + case "cover_prone": + case "cover_stand": + case "cover_left": + case "cover_crouch": + case "cover_right": + self.a.state = "cover"; + break; + + case "l33t truckride combat": + case "aim": + self.a.state = "combat"; + break; + } +} + +//Function Number: 25 +updatestates() +{ + resetstate("combat"); + resetstate("cover"); + resetstate("move"); + resetstate("stop"); + resetstate("death"); + resetstate("suppressed"); + resetstate("attacking"); + for(var_00 = 0;var_00 < self.members.size;var_00++) + { + if(!isalive(self.members[var_00])) + { + continue; + } + + querymemberanimstate(self.members[var_00]); + querymemberstate(self.members[var_00],"suppressed"); + querymemberstate(self.members[var_00],"combat"); + querymemberstate(self.members[var_00],"attacking"); + querymemberstate(self.members[var_00],"cover"); + } +} + +//Function Number: 26 +updatememberstates() +{ + anim endon("squad deleted " + self.var_67E); + var_00 = 0.05; + for(;;) + { + for(var_01 = 0;var_01 < self.members.size;var_01++) + { + if(!isalive(self.members[var_01])) + { + continue; + } + + self.members[var_01] aiupdatecombat(var_00); + self.members[var_01] func_06B4(var_00); + } + + wait var_00; + } +} + +//Function Number: 27 +aiupdatecombat(param_00) +{ + if(isdefined(self.lastenemysightpos)) + { + if(self.combattime < 0) + { + self.combattime = param_00; + } + else + { + self.combattime = self.combattime + param_00; + } + + self.lastenemysighttime = gettime(); + return; + } + else if(self issuppressed()) + { + self.combattime = self.combattime + param_00; + return; + } + + if(self.combattime > 0) + { + self.combattime = 0 - param_00; + return; + } + + self.combattime = self.combattime - param_00; +} + +//Function Number: 28 +func_06B4(param_00) +{ + if(self.suppressed) + { + if(self.suppressedtime < 0) + { + self.suppressedtime = param_00; + } + else + { + self.suppressedtime = self.suppressedtime + param_00; + } + + return; + } + + if(self.suppressedtime > 0) + { + self.suppressedtime = 0 - param_00; + return; + } + + self.suppressedtime = self.suppressedtime - param_00; +} + +//Function Number: 29 +func_06B7(param_00,param_01) +{ + self.squadstates[param_00] = spawnstruct(); + self.squadstates[param_00].activateratio = param_01; + self.squadstates[param_00].isactive = 0; + self.squadstates[param_00].numactive = 0; +} + +//Function Number: 30 +resetstate(param_00) +{ + self.squadstates[param_00].isactive = 0; + self.squadstates[param_00].numactive = 0; +} + +//Function Number: 31 +querymemberanimstate(param_00) +{ + self.squadstates[param_00.a.state].numactive++; + if(self.squadstates[param_00.a.state].numactive > self.squadstates[param_00.a.state].activateratio * self.members.size) + { + self.squadstates[param_00.a.state].isactive = 1; + } +} + +//Function Number: 32 +querymemberstate(param_00,param_01) +{ + switch(param_01) + { + case "suppressed": + if(param_00.suppressedtime > 1) + { + self.squadstates[param_01].numactive++; + } + break; + + case "combat": + if(param_00.combattime > 0) + { + self.squadstates[param_01].numactive++; + } + break; + + case "attacking": + if(gettime() < param_00.a.lastshoottime + 2000) + { + self.squadstates[param_01].numactive++; + } + break; + + case "cover": + if(!param_00 animscripts/battlechatter::isexposed()) + { + self.squadstates[param_01].numactive++; + } + break; + } + + if(self.squadstates[param_01].numactive > self.squadstates[param_01].activateratio * self.members.size) + { + self.squadstates[param_01].isactive = 1; + } +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/stop.gsc b/MW3/Xbox/SP/animscripts/stop.gsc new file mode 100644 index 0000000..a12414f --- /dev/null +++ b/MW3/Xbox/SP/animscripts/stop.gsc @@ -0,0 +1,258 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\stop.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 9 + * Decompile Time: 170 ms + * Timestamp: 10/27/2023 2:30:54 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(isdefined(self.no_ai)) + { + return; + } + + if(isdefined(self.var_89E)) + { + animscripts/snowmobile::main(); + return; + } + + if(isdefined(self.custom_animscript_table)) + { + if(isdefined(self.custom_animscript_table["stop"])) + { + [[ self.custom_animscript_table["stop"] ]](); + return; + } + } + + self notify("stopScript"); + self endon("killanimscript"); + [[ self.exception["stop_immediate"] ]](); + thread delayedexception(); + animscripts/utility::initialize("stop"); + specialidleloop(); + animscripts/utility::randomizeidleset(); + thread setlaststoppedtime(); + thread animscripts/reactions::reactionscheckloop(); + var_00 = isdefined(self.customidleanimset); + if(!var_00) + { + if(self.a.weaponpos["right"] == "none" && self.a.weaponpos["left"] == "none") + { + var_00 = 1; + } + else if(angleclamp180(self getmuzzleangle()[0]) > 20) + { + var_00 = 1; + } + } + + for(;;) + { + var_01 = func_0CE3(); + if(var_01 == "prone") + { + var_00 = 1; + pronestill(); + continue; + } + + if(self.a.var_911 != var_01) + { + self clearanim(%root,0.3); + var_00 = 0; + } + + animscripts/setposemovement::setposemovement(var_01,"stop"); + if(!var_00) + { + transitiontoidle(var_01,self.a.idleset); + var_00 = 1; + continue; + } + + playidle(var_01,self.a.idleset); + } +} + +//Function Number: 2 +setlaststoppedtime() +{ + self endon("death"); + self waittill("killanimscript"); + self.laststoppedtime = gettime(); +} + +//Function Number: 3 +specialidleloop() +{ + self endon("stop_specialidle"); + if(isdefined(self.specialidleanim)) + { + var_00 = self.specialidleanim; + self.specialidleanim = undefined; + self notify("clearing_specialIdleAnim"); + self animmode("gravity"); + self orientmode("face current"); + self clearanim(%root,0.2); + for(;;) + { + self setflaggedanimrestart("special_idle",var_00[randomint(var_00.size)],1,0.2,self.animplaybackrate); + self waittillmatch("end","special_idle"); + } + } +} + +//Function Number: 4 +func_0CE3() +{ + var_00 = animscripts/utility::getclaimednode(); + if(isdefined(var_00)) + { + var_01 = var_00.angles[1]; + var_02 = var_00.type; + } + else + { + var_01 = self.desiredangle; + var_02 = "node was undefined"; + } + + animscripts/face::setidleface(level.alertface); + var_03 = animscripts/utility::choosepose(); + if(var_02 == "Cover Stand" || var_02 == "Conceal Stand") + { + var_03 = animscripts/utility::choosepose("stand"); + } + else if(var_02 == "Cover Crouch" || var_02 == "Conceal Crouch") + { + var_03 = animscripts/utility::choosepose("crouch"); + } + else if(var_02 == "Cover Prone" || var_02 == "Conceal Prone") + { + var_03 = animscripts/utility::choosepose("prone"); + } + + return var_03; +} + +//Function Number: 5 +transitiontoidle(param_00,param_01) +{ + if(animscripts/utility::iscqbwalking() && self.a.var_911 == "stand") + { + param_00 = "stand_cqb"; + } + + if(isdefined(level.idleanimtransition[param_00])) + { + var_02 = level.idleanimtransition[param_00]["in"]; + self setflaggedanimknoballrestart("idle_transition",var_02,%body,1,0.2,self.animplaybackrate); + animscripts/shared::donotetracks("idle_transition"); + } +} + +//Function Number: 6 +playidle(param_00,param_01) +{ + if(animscripts/utility::iscqbwalking() && self.a.var_911 == "stand") + { + param_00 = "stand_cqb"; + } + + var_02 = undefined; + if(isdefined(self.customidleanimset) && isdefined(self.customidleanimset[param_00])) + { + var_03 = self.customidleanimset[param_00]; + var_04 = param_00 + "_add"; + if(isdefined(self.customidleanimset[var_04])) + { + var_02 = self.customidleanimset[var_04]; + } + } + else if(isdefined(level.readyanimarray) && param_01 == "stand" || param_01 == "stand_cqb" && isdefined(self.busereadyidle) && self.busereadyidle == 1) + { + var_03 = animscripts/utility::anim_array(level.readyanimarray["stand"][0],level.readyanimweights["stand"][0]); + } + else + { + var_02 = var_02 % level.idleanimarray[param_01].size; + var_03 = animscripts/utility::anim_array(level.idleanimarray[param_01][var_02],level.idleanimweights[param_01][var_02]); + } + + var_05 = 0.2; + if(gettime() == self.a.scriptstarttime) + { + var_05 = 0.5; + } + + if(isdefined(var_02)) + { + self setanimknoball(var_03,%body,1,var_05,1); + self setanim(%add_idle); + self setflaggedanimknoballrestart("idle",var_02,%add_idle,1,var_05,self.animplaybackrate); + } + else + { + self setflaggedanimknoballrestart("idle",var_03,%body,1,var_05,self.animplaybackrate); + } + + animscripts/shared::donotetracks("idle"); +} + +//Function Number: 7 +pronestill() +{ + if(self.a.var_911 != "prone") + { + var_00["stand_2_prone"] = %stand_2_prone; + var_01 = var_41[self.a.var_911 + "_2_prone"]; + self setflaggedanimknoballrestart("trans",var_01,%body,1,0.2,1); + animscripts/shared::donotetracks("trans"); + self.a.movement = "stop"; + self setproneanimnodes(-45,45,%prone_legs_down,%exposed_modern,%prone_legs_up); + return; + } + + thread updatepronethread(); + if(randomint(10) < 3) + { + var_02 = []; + var_03 = var_02[randomint(var_02.size)]; + self setflaggedanimknoball("prone_idle",var_03,%exposed_modern,1,0.2); + } + else + { + self setanimknoball(%prone_aim_5,%exposed_modern,1,0.2); + self setflaggedanimknob("prone_idle",%prone_idle,1,0.2); + } + + self waittillmatch(%crouch_2_prone,var_41["crouch_2_prone"],%prone_twitch_ammocheck,var_41[0],%prone_twitch_look,var_41[1],%prone_twitch_scan,var_41[2],%prone_twitch_lookfast,var_41[3],%prone_twitch_lookup,var_41[4],"end","prone_idle"); + self notify("kill UpdateProneThread"); +} + +//Function Number: 8 +updatepronethread() +{ + self endon("killanimscript"); + self endon("kill UpdateProneThread"); + for(;;) + { + animscripts/cover_prone::updatepronewrapper(0.1); + wait 0.1; + } +} + +//Function Number: 9 +delayedexception() +{ + self endon("killanimscript"); + wait 0.05; + [[ self.exception["stop"] ]](); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/track.gsc b/MW3/Xbox/SP/animscripts/track.gsc new file mode 100644 index 0000000..6164e79 --- /dev/null +++ b/MW3/Xbox/SP/animscripts/track.gsc @@ -0,0 +1,335 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\track.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 9 + * Decompile Time: 156 ms + * Timestamp: 10/27/2023 2:30:55 AM +*******************************************************************/ + +//Function Number: 1 +trackshootentorpos() +{ + self endon("killanimscript"); + self endon("stop tracking"); + self endon("melee"); + trackloop(%aim_2,%aim_4,%aim_6,%aim_8); +} + +//Function Number: 2 +trackloop(param_00,param_01,param_02,param_03) +{ + var_04 = 0; + var_05 = 0; + var_06 = (0,0,0); + var_07 = 1; + var_08 = 0; + var_09 = 0; + var_0A = 10; + var_0B = (0,0,0); + if(self.type == "dog") + { + var_0C = 0; + self.shootent = self.enemy; + } + else + { + var_0C = 1; + var_0D = 0; + var_0E = 0; + if(isdefined(self.var_897)) + { + var_0D = level.var_898; + } + + if((self.script == "cover_left" || self.script == "cover_right") && isdefined(self.a.var_899) && self.a.var_899 == "lean") + { + var_0E = self.covernode.angles[1] - self.angles[1]; + } + + var_0B = (var_0D,var_0E,0); + } + + for(;;) + { + incranimaimweight(); + var_0F = animscripts/shared::func_89B(); + var_10 = self.shootpos; + if(isdefined(self.shootent)) + { + var_10 = self.shootent getshootatpos(); + } + + if(!isdefined(var_10) && animscripts/utility::shouldcqb()) + { + var_10 = trackloop_cqbshootpos(var_0F); + } + + var_11 = isdefined(self.var_89E) || isdefined(self.onatv); + var_12 = isdefined(var_10); + var_13 = (0,0,0); + if(var_12) + { + var_13 = var_10; + } + + var_14 = 0; + var_15 = isdefined(self.stepoutyaw); + if(var_15) + { + var_14 = self.stepoutyaw; + } + + var_06 = self getaimangle(var_0F,var_13,var_12,var_0B,var_14,var_15,var_11); + var_16 = var_06[0]; + var_17 = var_06[1]; + var_06 = undefined; + if(var_09 > 0) + { + var_09 = var_09 - 1; + var_0A = max(10,var_0A - 5); + } + else if(self.relativedir && self.relativedir != var_08) + { + var_09 = 2; + var_0A = 30; + } + else + { + var_0A = 10; + } + + var_18 = squared(var_0A); + var_08 = self.relativedir; + var_19 = self.movemode != "stop" || !var_07; + if(var_19) + { + var_1A = var_17 - var_04; + if(squared(var_1A) > var_18) + { + var_17 = var_04 + clamp(var_1A,-1 * var_0A,var_0A); + var_17 = clamp(var_17,self.leftaimlimit,self.rightaimlimit); + } + + var_1B = var_16 - var_05; + if(squared(var_1B) > var_18) + { + var_16 = var_05 + clamp(var_1B,-1 * var_0A,var_0A); + var_16 = clamp(var_16,self.downaimlimit,self.upaimlimit); + } + } + + var_07 = 0; + var_04 = var_17; + var_05 = var_16; + func_08AD(param_00,param_01,param_02,param_03,var_16,var_17); + wait 0.05; + } +} + +//Function Number: 3 +trackloop_cqbshootpos(param_00) +{ + var_01 = undefined; + var_02 = anglestoforward(self.angles); + if(isdefined(self.cqb_target)) + { + var_01 = self.cqb_target getshootatpos(); + if(isdefined(self.cqb_wide_target_track)) + { + if(vectordot(vectornormalize(var_01 - param_00),var_02) < 0.177) + { + var_01 = undefined; + } + } + else if(vectordot(vectornormalize(var_01 - param_00),var_02) < 0.643) + { + var_01 = undefined; + } + } + + if(!isdefined(var_01) && isdefined(self.cqb_point_of_interest)) + { + var_01 = self.cqb_point_of_interest; + if(isdefined(self.cqb_wide_poi_track)) + { + if(vectordot(vectornormalize(var_01 - param_00),var_02) < 0.177) + { + var_01 = undefined; + } + } + else if(vectordot(vectornormalize(var_01 - param_00),var_02) < 0.643) + { + var_01 = undefined; + } + } + + return var_01; +} + +//Function Number: 4 +trackloop_anglesfornoshootpos(param_00,param_01) +{ + if(animscripts/utility::recentlysawenemy()) + { + var_02 = self.enemy getshootatpos() - self.enemy.origin; + var_03 = self lastknownpos(self.enemy) + var_02; + return trackloop_getdesiredangles(var_03 - param_00,param_01); + } + + var_04 = 0; + var_05 = 0; + if(isdefined(self.node) && isdefined(level.iscombatscriptnode[self.node.type]) && distancesquared(self.origin,self.node.origin) < 16) + { + var_05 = angleclamp180(self.angles[1] - self.node.angles[1]); + } + else + { + var_06 = self getanglestolikelyenemypath(); + if(isdefined(var_06)) + { + var_05 = angleclamp180(self.angles[1] - var_06[1]); + var_04 = angleclamp180(360 - var_06[0]); + } + } + + return (var_04,var_05,0); +} + +//Function Number: 5 +trackloop_getdesiredangles(param_00,param_01) +{ + var_02 = vectortoangles(param_00); + var_03 = 0; + var_04 = 0; + if(self.stairsstate == "up") + { + var_03 = -40; + } + else if(self.stairsstate == "down") + { + var_03 = 40; + var_04 = 12; + } + + var_05 = 360 - var_02[0]; + var_05 = angleclamp180(var_05 + param_01[0] + var_03); + if(isdefined(self.stepoutyaw)) + { + var_06 = self.stepoutyaw - var_02[1]; + } + else + { + var_07 = angleclamp180(self.desiredangle - self.angles[1]) * 0.5; + var_06 = var_07 + self.angles[1] - var_02[1]; + } + + var_06 = angleclamp180(var_06 + param_01[1] + var_04); + return (var_05,var_06,0); +} + +//Function Number: 6 +trackloop_clampangles(param_00,param_01,param_02) +{ + if(isdefined(self.var_89E) || isdefined(self.onatv)) + { + if(param_01 > self.rightaimlimit || param_01 < self.leftaimlimit) + { + param_01 = 0; + } + + if(param_00 > self.upaimlimit || param_00 < self.downaimlimit) + { + param_00 = 0; + } + } + else if(param_02 && abs(param_01) > level.maxanglecheckyawdelta || abs(param_00) > level.maxanglecheckpitchdelta) + { + param_01 = 0; + param_00 = 0; + } + else + { + if(self.gunblockedbywall) + { + param_01 = clamp(param_01,-10,10); + } + else + { + param_01 = clamp(param_01,self.leftaimlimit,self.rightaimlimit); + } + + param_00 = clamp(param_00,self.downaimlimit,self.upaimlimit); + } + + return (param_00,param_01,0); +} + +//Function Number: 7 +func_08AD(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if(param_05 > 0) + { + var_06 = param_05 / self.rightaimlimit * self.a.var_8AE; + self setanimlimited(param_01,0,0.1,1,1); + self setanimlimited(param_02,var_06,0.1,1,1); + } + else if(param_05 < 0) + { + var_06 = param_05 / self.leftaimlimit * self.a.var_8AE; + self setanimlimited(param_02,0,0.1,1,1); + self setanimlimited(param_01,var_06,0.1,1,1); + } + + if(param_04 > 0) + { + var_06 = param_04 / self.upaimlimit * self.a.var_8AE; + self setanimlimited(param_00,0,0.1,1,1); + self setanimlimited(param_03,var_06,0.1,1,1); + return; + } + + if(param_04 < 0) + { + var_06 = param_04 / self.downaimlimit * self.a.var_8AE; + self setanimlimited(param_03,0,0.1,1,1); + self setanimlimited(param_00,var_06,0.1,1,1); + } +} + +//Function Number: 8 +setanimaimweight(param_00,param_01) +{ + if(!isdefined(param_01) || param_01 <= 0) + { + self.a.var_8AE = param_00; + self.a.aimweight_start = param_00; + self.a.aimweight_end = param_00; + self.a.aimweight_transframes = 0; + } + else + { + if(!isdefined(self.a.var_8AE)) + { + self.a.var_8AE = 0; + } + + self.a.aimweight_start = self.a.var_8AE; + self.a.aimweight_end = param_00; + self.a.aimweight_transframes = int(param_01 * 20); + } + + self.a.aimweight_t = 0; +} + +//Function Number: 9 +incranimaimweight() +{ + if(self.a.aimweight_t < self.a.aimweight_transframes) + { + self.a.aimweight_t++; + var_00 = 1 * self.a.aimweight_t / self.a.aimweight_transframes; + self.a.var_8AE = self.a.aimweight_start * 1 - var_00 + self.a.aimweight_end * var_00; + } +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/traverse/crawl.gsc b/MW3/Xbox/SP/animscripts/traverse/crawl.gsc new file mode 100644 index 0000000..1584c91 --- /dev/null +++ b/MW3/Xbox/SP/animscripts/traverse/crawl.gsc @@ -0,0 +1,24 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\crawl.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 1 + * Decompile Time: 35 ms + * Timestamp: 10/27/2023 2:29:26 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + animscripts/setposemovement::beginpronerun(); + animscripts/utility::updateanimpose(); + self endon("killanimscript"); + self traversemode("noclip"); + var_00 = self getnegotiationstartnode(); + self orientmode("face angle",var_00.angles[1]); + self setflaggedanimknoballrestart("crawlanim",%prone_crawl,%body,1,0.1,1); + animscripts/shared::donotetracks("crawlanim"); + self.a.movement = "run"; + self.a.var_911 = "crouch"; +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/traverse/crouch_jump_down_40.gsc b/MW3/Xbox/SP/animscripts/traverse/crouch_jump_down_40.gsc new file mode 100644 index 0000000..bdc3145 --- /dev/null +++ b/MW3/Xbox/SP/animscripts/traverse/crouch_jump_down_40.gsc @@ -0,0 +1,25 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\crouch_jump_down_40.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 1 + * Decompile Time: 31 ms + * Timestamp: 10/27/2023 2:29:26 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self.desired_anim_pose = "crouch"; + animscripts/utility::updateanimpose(); + self endon("killanimscript"); + self.a.movement = "walk"; + self traversemode("nogravity"); + var_00 = self getnegotiationstartnode(); + self orientmode("face angle",var_00.angles[1]); + self setflaggedanimknoballrestart("stepanim",%jump_across_72,%body,1,0.1,1); + wait 0.15; + self traversemode("gravity"); + animscripts/shared::donotetracks("stepanim"); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/traverse/duck_under_56.gsc b/MW3/Xbox/SP/animscripts/traverse/duck_under_56.gsc new file mode 100644 index 0000000..a0bd23e --- /dev/null +++ b/MW3/Xbox/SP/animscripts/traverse/duck_under_56.gsc @@ -0,0 +1,25 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\duck_under_56.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 1 + * Decompile Time: 29 ms + * Timestamp: 10/27/2023 2:29:27 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self.desired_anim_pose = "stand"; + animscripts/utility::updateanimpose(); + self endon("killanimscript"); + self traversemode("nogravity"); + self traversemode("noclip"); + var_00 = self getnegotiationstartnode(); + self orientmode("face angle",var_00.angles[1]); + self setflaggedanimknoballrestart("jumpanim",%gulag_pipe_traverse,%body,1,0.1,1); + self waittillmatch("finish","jumpanim"); + self traversemode("gravity"); + animscripts/shared::donotetracks("jumpanim"); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/traverse/fence_climb.gsc b/MW3/Xbox/SP/animscripts/traverse/fence_climb.gsc new file mode 100644 index 0000000..a4894f6 --- /dev/null +++ b/MW3/Xbox/SP/animscripts/traverse/fence_climb.gsc @@ -0,0 +1,24 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\fence_climb.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 1 + * Decompile Time: 30 ms + * Timestamp: 10/27/2023 2:29:27 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self.desired_anim_pose = "crouch"; + animscripts/utility::updateanimpose(); + self endon("killanimscript"); + self traversemode("nogravity"); + self traversemode("noclip"); + var_00 = self getnegotiationstartnode(); + self orientmode("face angle",var_00.angles[1]); + self setflaggedanimknoballrestart("diveanim",%fenceclimb,%body,1,0.1,1); + animscripts/shared::donotetracks("diveanim"); + self traversemode("gravity"); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/traverse/jump_across_100.gsc b/MW3/Xbox/SP/animscripts/traverse/jump_across_100.gsc new file mode 100644 index 0000000..c14781b --- /dev/null +++ b/MW3/Xbox/SP/animscripts/traverse/jump_across_100.gsc @@ -0,0 +1,31 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\jump_across_100.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 1 + * Decompile Time: 30 ms + * Timestamp: 10/27/2023 2:29:27 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(self.type == "dog") + { + animscripts/traverse/shared::func_8116("window_40",20); + return; + } + + self.desired_anim_pose = "stand"; + animscripts/utility::updateanimpose(); + self endon("killanimscript"); + self traversemode("nogravity"); + self traversemode("noclip"); + var_00 = self getnegotiationstartnode(); + self orientmode("face angle",var_00.angles[1]); + var_01 = []; + var_02 = var_41[randomint(var_41.size)]; + self setflaggedanimknoballrestart("jumpanim",var_02,%body,1,0.1,1); + animscripts/shared::donotetracks("jumpanim"); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/traverse/jump_across_72.gsc b/MW3/Xbox/SP/animscripts/traverse/jump_across_72.gsc new file mode 100644 index 0000000..30a74de --- /dev/null +++ b/MW3/Xbox/SP/animscripts/traverse/jump_across_72.gsc @@ -0,0 +1,31 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\jump_across_72.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 1 + * Decompile Time: 32 ms + * Timestamp: 10/27/2023 2:29:28 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(self.type == "dog") + { + animscripts/traverse/shared::func_8116("wallhop",20); + return; + } + + self.desired_anim_pose = "stand"; + animscripts/utility::updateanimpose(); + self endon("killanimscript"); + self traversemode("nogravity"); + self traversemode("noclip"); + var_00 = self getnegotiationstartnode(); + self orientmode("face angle",var_00.angles[1]); + self setflaggedanimknoballrestart("jumpanim",%jump_across_72,%body,1,0.1,1); + self waittillmatch("gravity on","jumpanim"); + self traversemode("gravity"); + animscripts/shared::donotetracks("jumpanim"); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/traverse/jump_over_high_wall.gsc b/MW3/Xbox/SP/animscripts/traverse/jump_over_high_wall.gsc new file mode 100644 index 0000000..dc63c7a --- /dev/null +++ b/MW3/Xbox/SP/animscripts/traverse/jump_over_high_wall.gsc @@ -0,0 +1,31 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\jump_over_high_wall.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 1 + * Decompile Time: 32 ms + * Timestamp: 10/27/2023 2:29:28 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self.desired_anim_pose = "crouch"; + animscripts/utility::updateanimpose(); + self endon("killanimscript"); + self traversemode("nogravity"); + self traversemode("noclip"); + var_00 = self getnegotiationstartnode(); + self orientmode("face angle",var_00.angles[1]); + self clearanim(%stand_and_crouch,0.1); + self setflaggedanimknoballrestart("diveanim",%jump_over_high_wall,%body,1,0.1,1); + self playsound("dive_wall"); + self waittillmatch("gravity on","diveanim"); + self traversemode("nogravity"); + self waittillmatch("noclip","diveanim"); + self traversemode("noclip"); + self waittillmatch("gravity on","diveanim"); + self traversemode("gravity"); + animscripts/shared::donotetracks("diveanim"); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/traverse/jump_up_80.gsc b/MW3/Xbox/SP/animscripts/traverse/jump_up_80.gsc new file mode 100644 index 0000000..6e23e12 --- /dev/null +++ b/MW3/Xbox/SP/animscripts/traverse/jump_up_80.gsc @@ -0,0 +1,25 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\jump_up_80.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 1 + * Decompile Time: 30 ms + * Timestamp: 10/27/2023 2:29:29 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self endon("killanimscript"); + self traversemode("nogravity"); + self traversemode("noclip"); + var_00 = self getnegotiationstartnode(); + self orientmode("face angle",var_00.angles[1]); + var_01 = var_00.var_1A98 - var_00.origin[2]; + thread animscripts/traverse/shared::func_3AEB(var_01 - 80); + self clearanim(%root,0.2); + self setflaggedanimrestart("jump_up_80",level.dogtraverseanims["jump_up_80"],1,0.2,1); + animscripts/shared::donotetracks("jump_up_80"); + self.var_3682 = 1; +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/traverse/jumpdown_130.gsc b/MW3/Xbox/SP/animscripts/traverse/jumpdown_130.gsc new file mode 100644 index 0000000..1458ad5 --- /dev/null +++ b/MW3/Xbox/SP/animscripts/traverse/jumpdown_130.gsc @@ -0,0 +1,28 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\jumpdown_130.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 71 ms + * Timestamp: 10/27/2023 2:29:29 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(self.type == "dog") + { + animscripts/traverse/shared::func_3AFC(7,0.7); + return; + } + + func_3B0D(); +} + +//Function Number: 2 +func_3B0D() +{ + var_00 = []; + animscripts/traverse/shared::func_3AEF(var_41); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/traverse/jumpdown_40.gsc b/MW3/Xbox/SP/animscripts/traverse/jumpdown_40.gsc new file mode 100644 index 0000000..d479cf8 --- /dev/null +++ b/MW3/Xbox/SP/animscripts/traverse/jumpdown_40.gsc @@ -0,0 +1,28 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\jumpdown_40.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 57 ms + * Timestamp: 10/27/2023 2:29:30 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(self.type == "dog") + { + animscripts/traverse/shared::func_3AFC(3,1); + return; + } + + low_wall_human(); +} + +//Function Number: 2 +low_wall_human() +{ + var_00 = []; + animscripts/traverse/shared::func_3AEF(var_41); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/traverse/jumpdown_56.gsc b/MW3/Xbox/SP/animscripts/traverse/jumpdown_56.gsc new file mode 100644 index 0000000..027714d --- /dev/null +++ b/MW3/Xbox/SP/animscripts/traverse/jumpdown_56.gsc @@ -0,0 +1,28 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\jumpdown_56.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 44 ms + * Timestamp: 10/27/2023 2:29:30 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(self.type == "dog") + { + animscripts/traverse/shared::func_3AFC(5,1); + return; + } + + low_wall_human(); +} + +//Function Number: 2 +low_wall_human() +{ + var_00 = []; + animscripts/traverse/shared::func_3AEF(var_41); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/traverse/jumpdown_96.gsc b/MW3/Xbox/SP/animscripts/traverse/jumpdown_96.gsc new file mode 100644 index 0000000..635b98e --- /dev/null +++ b/MW3/Xbox/SP/animscripts/traverse/jumpdown_96.gsc @@ -0,0 +1,28 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\jumpdown_96.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 47 ms + * Timestamp: 10/27/2023 2:29:30 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(self.type == "dog") + { + animscripts/traverse/shared::func_3AFC(7,0.8); + return; + } + + low_wall_human(); +} + +//Function Number: 2 +low_wall_human() +{ + var_00 = []; + animscripts/traverse/shared::func_3AEF(var_41); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/traverse/ladder_down.gsc b/MW3/Xbox/SP/animscripts/traverse/ladder_down.gsc new file mode 100644 index 0000000..cf64ebc --- /dev/null +++ b/MW3/Xbox/SP/animscripts/traverse/ladder_down.gsc @@ -0,0 +1,40 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\ladder_down.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 1 + * Decompile Time: 33 ms + * Timestamp: 10/27/2023 2:29:31 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self.desired_anim_pose = "crouch"; + animscripts/utility::updateanimpose(); + self endon("killanimscript"); + self traversemode("nogravity"); + self traversemode("noclip"); + var_00 = self getnegotiationendnode(); + var_01 = var_00.origin; + var_02 = self getnegotiationstartnode(); + self orientmode("face angle",var_02.angles[1]); + var_03 = 1; + if(isdefined(self.moveplaybackrate)) + { + var_03 = self.moveplaybackrate; + } + + self setflaggedanimknoballrestart("climbanim",%ladder_climbon,%body,1,0.1,var_03); + animscripts/shared::donotetracks("climbanim"); + var_04 = %ladder_climbdown; + self setflaggedanimknoballrestart("climbanim",var_04,%body,1,0.1,var_03); + var_05 = getmovedelta(var_04,0,1); + var_06 = var_05[2] * var_03 / getanimlength(var_04); + var_07 = var_01[2] - self.origin[2] / var_06; + animscripts/notetracks::donotetracksfortime(var_07,"climbanim"); + self traversemode("gravity"); + self.a.movement = "stop"; + self.a.var_911 = "stand"; +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/traverse/ladder_up.gsc b/MW3/Xbox/SP/animscripts/traverse/ladder_up.gsc new file mode 100644 index 0000000..fff9e39 --- /dev/null +++ b/MW3/Xbox/SP/animscripts/traverse/ladder_up.gsc @@ -0,0 +1,51 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\ladder_up.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 1 + * Decompile Time: 32 ms + * Timestamp: 10/27/2023 2:29:31 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(isdefined(self.type) && self.type == "dog") + { + return; + } + + self.desired_anim_pose = "crouch"; + animscripts/utility::updateanimpose(); + self endon("killanimscript"); + self traversemode("noclip"); + var_00 = %ladder_climbup; + var_01 = %ladder_climboff; + var_02 = self getnegotiationstartnode(); + self orientmode("face angle",var_02.angles[1]); + var_03 = 1; + if(isdefined(self.moveplaybackrate)) + { + var_03 = self.moveplaybackrate; + } + + self setflaggedanimknoballrestart("climbanim",var_00,%body,1,0.1,var_03); + var_04 = getmovedelta(var_01,0,1); + var_05 = self getnegotiationendnode(); + var_06 = var_05.origin - var_04 + (0,0,1); + var_07 = getmovedelta(var_00,0,1); + var_08 = var_07[2] * var_03 / getanimlength(var_00); + var_09 = var_06[2] - self.origin[2] / var_08; + if(var_09 > 0) + { + self.allowpain = 1; + animscripts/notetracks::donotetracksfortime(var_09,"climbanim"); + self setflaggedanimknoballrestart("climbanim",var_01,%body,1,0.1,var_03); + animscripts/shared::donotetracks("climbanim"); + } + + self traversemode("gravity"); + self.a.movement = "run"; + self.a.var_911 = "crouch"; +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/traverse/shared.gsc b/MW3/Xbox/SP/animscripts/traverse/shared.gsc new file mode 100644 index 0000000..3de02b4 --- /dev/null +++ b/MW3/Xbox/SP/animscripts/traverse/shared.gsc @@ -0,0 +1,340 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\shared.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 14 + * Decompile Time: 257 ms + * Timestamp: 10/27/2023 2:29:32 AM +*******************************************************************/ + +//Function Number: 1 +func_3AEA(param_00,param_01) +{ + self.desired_anim_pose = "crouch"; + animscripts/utility::updateanimpose(); + self endon("killanimscript"); + self traversemode("nogravity"); + self traversemode("noclip"); + var_02 = self getnegotiationstartnode(); + self orientmode("face angle",var_02.angles[1]); + var_03 = var_02.var_1A98 - var_02.origin[2]; + thread func_3AEB(var_03 - param_01); + var_04 = 0.15; + self clearanim(%body,var_04); + self setflaggedanimknoballrestart("traverse",param_00,%root,1,var_04,1); + var_05 = 0.2; + var_06 = 0.2; + thread animscripts/notetracks::donotetracksforever("traverse","no clear"); + if(!animhasnotetrack(param_00,"gravity on")) + { + var_07 = 1.23; + wait var_07 - var_05; + self traversemode("gravity"); + wait var_05; + return; + } + + self waittillmatch("gravity on","traverse"); + self traversemode("gravity"); + if(!animhasnotetrack(param_00,"blend")) + { + wait var_05; + return; + } + + self waittillmatch("blend","traverse"); +} + +//Function Number: 2 +func_3AEB(param_00) +{ + self endon("killanimscript"); + self notify("endTeleportThread"); + self endon("endTeleportThread"); + var_01 = 5; + var_02 = (0,0,param_00 / var_01); + for(var_03 = 0;var_03 < var_01;var_03++) + { + self forceteleport(self.origin + var_02); + wait 0.05; + } +} + +//Function Number: 3 +func_3AEC(param_00,param_01,param_02,param_03) +{ + self endon("killanimscript"); + self notify("endTeleportThread"); + self endon("endTeleportThread"); + if(param_00 == 0 || param_02 <= 0) + { + return; + } + + if(param_01 > 0) + { + wait param_01; + } + + var_04 = (0,0,param_00 / param_02); + if(isdefined(param_03) && param_03 < 1) + { + self setflaggedanimknoball("traverseAnim",self.var_3AEE,self.var_3AED,1,0.2,param_03); + } + + for(var_05 = 0;var_05 < param_02;var_05++) + { + self forceteleport(self.origin + var_04); + wait 0.05; + } + + if(isdefined(param_03) && param_03 < 1) + { + self setflaggedanimknoball("traverseAnim",self.var_3AEE,self.var_3AED,1,0.2,1); + } +} + +//Function Number: 4 +func_3AEF(param_00) +{ + self endon("killanimscript"); + self.desired_anim_pose = "stand"; + animscripts/utility::updateanimpose(); + var_01 = self getnegotiationstartnode(); + var_02 = self getnegotiationendnode(); + self orientmode("face angle",var_01.angles[1]); + self.var_3AF0 = param_00["traverseHeight"]; + self.var_3AF1 = var_01; + var_03 = param_00["traverseAnim"]; + var_04 = param_00["traverseToCoverAnim"]; + self traversemode("nogravity"); + self traversemode("noclip"); + self.var_3AF2 = self.origin[2]; + if(!animhasnotetrack(var_03,"traverse_align")) + { + func_3AF7(); + } + + var_05 = 0; + if(isdefined(var_04) && isdefined(self.node) && self.node.type == param_00["coverType"] && distancesquared(self.node.origin,var_02.origin) < 625) + { + if(animscripts/utility::absangleclamp180(self.node.angles[1] - var_02.angles[1]) > 160) + { + var_05 = 1; + var_03 = var_04; + } + } + + if(var_05) + { + if(isdefined(param_00["traverseToCoverSound"])) + { + thread maps\_utility::play_sound_on_entity(param_00["traverseToCoverSound"]); + } + } + else if(isdefined(param_00["traverseSound"])) + { + thread maps\_utility::play_sound_on_entity(param_00["traverseSound"]); + } + + self.var_3AEE = var_03; + self.var_3AED = %body; + self setflaggedanimknoballrestart("traverseAnim",var_03,%body,1,0.2,1); + self.traversedeathindex = 0; + self.var_3AF4 = param_00["interruptDeathAnim"]; + animscripts/shared::donotetracks("traverseAnim",::func_3AF5); + self traversemode("gravity"); + if(self.delayeddeath) + { + return; + } + + self.a.nodeath = 0; + if(var_05 && isdefined(self.node) && distancesquared(self.origin,self.node.origin) < 256) + { + self.a.movement = "stop"; + self teleport(self.node.origin); + } + else if(isdefined(param_00["traverseStopsAtEnd"])) + { + self.a.movement = "stop"; + } + else + { + self.a.movement = "run"; + self clearanim(var_03,0.2); + } + + self.var_3AED = undefined; + self.var_3AEE = undefined; + self.var_93B = undefined; +} + +//Function Number: 5 +func_3AF5(param_00) +{ + if(param_00 == "traverse_death") + { + return handletraversedeathnotetrack(); + } + + if(param_00 == "traverse_align") + { + return func_3AF7(); + } + + if(param_00 == "traverse_drop") + { + return func_3AF8(); + } +} + +//Function Number: 6 +handletraversedeathnotetrack() +{ + if(isdefined(self.var_3AF4)) + { + var_00 = self.var_3AF4[self.traversedeathindex]; + self.var_93B = var_00[randomint(var_00.size)]; + self.traversedeathindex++; + } +} + +//Function Number: 7 +func_3AF7() +{ + self traversemode("nogravity"); + self traversemode("noclip"); + if(isdefined(self.var_3AF0) && isdefined(self.var_3AF1.var_1A98)) + { + var_00 = self.var_3AF1.var_1A98 - self.var_3AF2; + thread func_3AEB(var_00 - self.var_3AF0); + } +} + +//Function Number: 8 +func_3AF8() +{ + var_00 = self.origin + (0,0,32); + var_01 = bullettrace(var_00,self.origin + (0,0,-512),0,undefined); + var_02 = var_01["position"]; + var_03 = distance(var_00,var_02); + var_04 = var_03 - 32 - 0.5; + var_05 = self getanimtime(self.var_3AEE); + var_06 = getmovedelta(self.var_3AEE,var_05,1); + var_07 = getanimlength(self.var_3AEE); + var_08 = 0 - var_06[2]; + var_09 = var_08 - var_04; + if(var_08 < var_04) + { + var_0A = var_08 / var_04; + } + else + { + var_0A = 1; + } + + var_0B = var_07 - var_05 / 3; + var_0C = ceil(var_0B * 20); + thread func_3AEC(var_09,0,var_0C,var_0A); + thread finishtraversedrop(var_02[2]); +} + +//Function Number: 9 +finishtraversedrop(param_00) +{ + self endon("killanimscript"); + param_00 = param_00 + 4; + for(;;) + { + if(self.origin[2] < param_00) + { + self traversemode("gravity"); + break; + } + + wait 0.05; + } +} + +//Function Number: 10 +func_3AFA() +{ + self animmode("zonly_physics"); + self waittill("killanimscript"); +} + +//Function Number: 11 +func_3AFB(param_00,param_01) +{ + self endon("killanimscript"); + self traversemode("nogravity"); + self traversemode("noclip"); + var_02 = self getnegotiationstartnode(); + self orientmode("face angle",var_02.angles[1]); + var_03 = var_02.var_1A98 - var_02.origin[2]; + thread func_3AEB(var_03 - param_01); + self clearanim(%root,0.2); + self setflaggedanimrestart("dog_traverse",level.dogtraverseanims[param_00],1,0.2,1); + animscripts/shared::donotetracks("dog_traverse"); + self.var_3682 = 1; +} + +//Function Number: 12 +func_3AFC(param_00,param_01) +{ + self endon("killanimscript"); + self traversemode("noclip"); + var_02 = self getnegotiationstartnode(); + self orientmode("face angle",var_02.angles[1]); + var_03 = self getnegotiationstartnode().origin[2] - self getnegotiationendnode().origin[2]; + self.var_3AEE = level.dogtraverseanims["jump_down_40"]; + self.var_3AED = %root; + thread func_3AEC(40 - var_03,0.1,param_00,param_01); + self clearanim(%root,0.2); + self setflaggedanimrestart("traverseAnim",self.var_3AEE,1,0.2,1); + animscripts/shared::donotetracks("traverseAnim"); + self clearanim(self.var_3AEE,0); + self traversemode("gravity"); + self.var_3682 = 1; + self.var_3AED = undefined; + self.var_3AEE = undefined; +} + +//Function Number: 13 +func_3AFD(param_00,param_01) +{ + self endon("killanimscript"); + self traversemode("noclip"); + var_02 = self getnegotiationstartnode(); + self orientmode("face angle",var_02.angles[1]); + thread func_3AEC(param_00 - 40,0.2,param_01); + self clearanim(%root,0.25); + self setflaggedanimrestart("traverseAnim",level.dogtraverseanims["jump_up_40"],1,0.2,1); + animscripts/shared::donotetracks("traverseAnim"); + self clearanim(level.dogtraverseanims["jump_up_40"],0); + self traversemode("gravity"); + self.var_3682 = 1; +} + +//Function Number: 14 +func_8116(param_00,param_01) +{ + self endon("killanimscript"); + self traversemode("nogravity"); + self traversemode("noclip"); + var_02 = self getnegotiationstartnode(); + self orientmode("face angle",var_02.angles[1]); + if(!isdefined(var_02.var_1A98)) + { + var_02.var_1A98 = var_02.origin[2]; + } + + var_03 = var_02.var_1A98 - var_02.origin[2]; + thread func_3AEB(var_03 - param_01); + self clearanim(%root,0.2); + self setflaggedanimrestart("dog_traverse",level.dogtraverseanims[param_00],1,0.2,1); + animscripts/shared::donotetracks("dog_traverse"); + self.var_3682 = 1; +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/traverse/slide_across_car.gsc b/MW3/Xbox/SP/animscripts/traverse/slide_across_car.gsc new file mode 100644 index 0000000..42d384e --- /dev/null +++ b/MW3/Xbox/SP/animscripts/traverse/slide_across_car.gsc @@ -0,0 +1,47 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\slide_across_car.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 3 + * Decompile Time: 71 ms + * Timestamp: 10/27/2023 2:29:33 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(self.type == "dog") + { + slide_across_car_dog(); + return; + } + + func_3B08(); +} + +//Function Number: 2 +func_3B08() +{ + var_00 = []; + var_29["interruptDeathAnim"] = 0; + animscripts/traverse/shared::func_3AEF(var_29); +} + +//Function Number: 3 +slide_across_car_dog() +{ + self endon("killanimscript"); + self traversemode("noclip"); + var_00 = self getnegotiationstartnode(); + self orientmode("face angle",var_00.angles[1]); + self clearanim(%root,0.1); + self setflaggedanimrestart("traverse",level.dogtraverseanims["jump_up_40"],1,0.1,1); + animscripts/shared::donotetracks("traverse"); + thread common_scripts\utility::play_sound_in_space("anml_dog_bark",self gettagorigin("tag_eye")); + self clearanim(%root,0); + self setflaggedanimrestart("traverse",level.dogtraverseanims["jump_down_40"],1,0,1); + animscripts/shared::donotetracks("traverse"); + self traversemode("gravity"); + self.var_3682 = 1; +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/traverse/step_down.gsc b/MW3/Xbox/SP/animscripts/traverse/step_down.gsc new file mode 100644 index 0000000..54b4228 --- /dev/null +++ b/MW3/Xbox/SP/animscripts/traverse/step_down.gsc @@ -0,0 +1,37 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\step_down.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 47 ms + * Timestamp: 10/27/2023 2:29:33 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(self.type == "dog") + { + animscripts/traverse/shared::func_3AFC(40,3); + return; + } + + step_down_human(); +} + +//Function Number: 2 +step_down_human() +{ + self.desired_anim_pose = "crouch"; + animscripts/utility::updateanimpose(); + self endon("killanimscript"); + self.a.movement = "walk"; + self traversemode("nogravity"); + var_00 = self getnegotiationstartnode(); + self orientmode("face angle",var_00.angles[1]); + self setflaggedanimknoballrestart("stepanim",%step_down_low_wall,%body,1,0.1,1); + self waittillmatch("gravity on","stepanim"); + self traversemode("gravity"); + animscripts/shared::donotetracks("stepanim"); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/traverse/step_up.gsc b/MW3/Xbox/SP/animscripts/traverse/step_up.gsc new file mode 100644 index 0000000..2b2eb84 --- /dev/null +++ b/MW3/Xbox/SP/animscripts/traverse/step_up.gsc @@ -0,0 +1,38 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\step_up.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 44 ms + * Timestamp: 10/27/2023 2:29:34 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(self.type == "dog") + { + animscripts/traverse/shared::func_3AFD(40,3); + return; + } + + step_up_human(); +} + +//Function Number: 2 +step_up_human() +{ + self.desired_anim_pose = "crouch"; + animscripts/utility::updateanimpose(); + self endon("killanimscript"); + self.a.movement = "walk"; + self traversemode("nogravity"); + var_00 = self getnegotiationstartnode(); + self orientmode("face angle",var_00.angles[1]); + self setflaggedanimknoballrestart("stepanim",%step_up_low_wall,%body,1,0.1,1); + self waittillmatch("gravity on","stepanim"); + self traversemode("gravity"); + animscripts/shared::donotetracks("stepanim"); + self setanimknoballrestart(animscripts/run::getcrouchrunanim(),%body,1,0.1,1); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/traverse/step_up_32.gsc b/MW3/Xbox/SP/animscripts/traverse/step_up_32.gsc new file mode 100644 index 0000000..85c7f2a --- /dev/null +++ b/MW3/Xbox/SP/animscripts/traverse/step_up_32.gsc @@ -0,0 +1,28 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\step_up_32.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 44 ms + * Timestamp: 10/27/2023 2:29:34 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(self.type == "dog") + { + animscripts/traverse/shared::func_3AFD(32,5); + return; + } + + low_wall_human(); +} + +//Function Number: 2 +low_wall_human() +{ + var_00 = []; + animscripts/traverse/shared::func_3AEF(var_41); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/traverse/stepup_52.gsc b/MW3/Xbox/SP/animscripts/traverse/stepup_52.gsc new file mode 100644 index 0000000..5862216 --- /dev/null +++ b/MW3/Xbox/SP/animscripts/traverse/stepup_52.gsc @@ -0,0 +1,28 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\stepup_52.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 43 ms + * Timestamp: 10/27/2023 2:29:35 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(self.type == "dog") + { + animscripts/traverse/shared::func_3AFD(52,5); + return; + } + + low_wall_human(); +} + +//Function Number: 2 +low_wall_human() +{ + var_00 = []; + animscripts/traverse/shared::func_3AEF(var_41); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/traverse/trench_jumpout.gsc b/MW3/Xbox/SP/animscripts/traverse/trench_jumpout.gsc new file mode 100644 index 0000000..81eaf84 --- /dev/null +++ b/MW3/Xbox/SP/animscripts/traverse/trench_jumpout.gsc @@ -0,0 +1,26 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\trench_jumpout.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 1 + * Decompile Time: 30 ms + * Timestamp: 10/27/2023 2:29:35 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self.desired_anim_pose = "crouch"; + animscripts/utility::updateanimpose(); + self endon("killanimscript"); + self.a.movement = "walk"; + self traversemode("nogravity"); + var_00 = self getnegotiationstartnode(); + self orientmode("face angle",var_00.angles[1]); + self setflaggedanimknoballrestart("stepanim",%gully_trenchjump,%body,1,0.1,1); + self waittillmatch("gravity on","stepanim"); + self traversemode("gravity"); + animscripts/shared::donotetracks("stepanim"); + self setanimknoballrestart(animscripts/run::getcrouchrunanim(),%body,1,0.1,1); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/traverse/wall_dive.gsc b/MW3/Xbox/SP/animscripts/traverse/wall_dive.gsc new file mode 100644 index 0000000..78a7150 --- /dev/null +++ b/MW3/Xbox/SP/animscripts/traverse/wall_dive.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\wall_dive.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 1 + * Decompile Time: 30 ms + * Timestamp: 10/27/2023 2:29:36 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self.desired_anim_pose = "crouch"; + animscripts/utility::updateanimpose(); + self endon("killanimscript"); + self traversemode("nogravity"); + self traversemode("noclip"); + var_00 = self getnegotiationstartnode(); + self orientmode("face angle",var_00.angles[1]); + self setflaggedanimknoballrestart("diveanim",%jump_over_low_wall,%body,1,0.1,1); + self playsound("dive_wall"); + self waittillmatch("gravity on","diveanim"); + self traversemode("gravity"); + animscripts/shared::donotetracks("diveanim"); + self.a.movement = "run"; +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/traverse/wall_hop.gsc b/MW3/Xbox/SP/animscripts/traverse/wall_hop.gsc new file mode 100644 index 0000000..9dd8c50 --- /dev/null +++ b/MW3/Xbox/SP/animscripts/traverse/wall_hop.gsc @@ -0,0 +1,33 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\wall_hop.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 46 ms + * Timestamp: 10/27/2023 2:29:36 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(self.type == "dog") + { + animscripts/traverse/shared::func_3AFB("wallhop",40); + return; + } + + func_3B00(); +} + +//Function Number: 2 +func_3B00() +{ + if(randomint(100) < 30) + { + animscripts/traverse/shared::func_3AEA(%traverse_wallhop_3,39.875); + return; + } + + animscripts/traverse/shared::func_3AEA(%traverse_wallhop,39.875); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/traverse/wall_over_40.gsc b/MW3/Xbox/SP/animscripts/traverse/wall_over_40.gsc new file mode 100644 index 0000000..85173ac --- /dev/null +++ b/MW3/Xbox/SP/animscripts/traverse/wall_over_40.gsc @@ -0,0 +1,30 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\wall_over_40.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 49 ms + * Timestamp: 10/27/2023 2:29:36 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(self.type == "dog") + { + animscripts/traverse/shared::func_3AFB("window_40",40); + return; + } + + low_wall_human(); +} + +//Function Number: 2 +low_wall_human() +{ + var_00 = []; + var_29["interruptDeathAnim"] = 0; + var_29["interruptDeathAnim"] = 1; + animscripts/traverse/shared::func_3AEF(var_29); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/traverse/wall_over_96.gsc b/MW3/Xbox/SP/animscripts/traverse/wall_over_96.gsc new file mode 100644 index 0000000..0410c62 --- /dev/null +++ b/MW3/Xbox/SP/animscripts/traverse/wall_over_96.gsc @@ -0,0 +1,78 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\wall_over_96.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 3 + * Decompile Time: 72 ms + * Timestamp: 10/27/2023 2:29:37 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self.traversedeath = 1; + func_3B0B(%traverse90,96); +} + +//Function Number: 2 +func_3B0B(param_00,param_01) +{ + self.desired_anim_pose = "crouch"; + animscripts/utility::updateanimpose(); + self endon("killanimscript"); + self traversemode("nogravity"); + self traversemode("noclip"); + var_02 = self getnegotiationstartnode(); + self orientmode("face angle",var_02.angles[1]); + var_03 = var_02.var_1A98 - var_02.origin[2]; + self setflaggedanimknoballrestart("traverse",param_00,%body,1,0.15,1); + var_04 = gettime(); + thread animscripts/notetracks::donotetracksforever("traverse","no clear",::func_3B0C); + if(!animhasnotetrack(param_00,"gravity on")) + { + var_04 = 1.23; + var_05 = 0.2; + wait 5; + self traversemode("gravity"); + wait var_05; + return; + } + + self waittillmatch("gravity on","traverse"); + self traversemode("gravity"); + if(!animhasnotetrack(param_00,"blend")) + { + wait 0.2; + return; + } + + self waittillmatch("blend","traverse"); +} + +//Function Number: 3 +func_3B0C(param_00) +{ + if(param_00 != "traverse_death") + { + return; + } + + self endon("killanimscript"); + if(self.health == 1) + { + self.a.nodeath = 1; + if(self.traversedeath > 1) + { + self setflaggedanimknoball("deathanim",%traverse90_end_death,%body,1,0.2,1); + } + else + { + self setflaggedanimknoball("deathanim",%traverse90_start_death,%body,1,0.2,1); + } + + animscripts/face::saygenericdialogue("death"); + } + + self.traversedeath++; +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/traverse/window.gsc b/MW3/Xbox/SP/animscripts/traverse/window.gsc new file mode 100644 index 0000000..902174a --- /dev/null +++ b/MW3/Xbox/SP/animscripts/traverse/window.gsc @@ -0,0 +1,25 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\window.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 1 + * Decompile Time: 30 ms + * Timestamp: 10/27/2023 2:29:37 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + self.desired_anim_pose = "crouch"; + animscripts/utility::updateanimpose(); + self endon("killanimscript"); + self traversemode("nogravity"); + self traversemode("noclip"); + var_00 = self getnegotiationstartnode(); + self orientmode("face angle",var_00.angles[1]); + self setflaggedanimknoballrestart("diveanim",%windowclimb,%body,1,0.1,1); + self waittillmatch("gravity on","diveanim"); + self traversemode("gravity"); + animscripts/shared::donotetracks("diveanim"); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/traverse/window_2.gsc b/MW3/Xbox/SP/animscripts/traverse/window_2.gsc new file mode 100644 index 0000000..3882d78 --- /dev/null +++ b/MW3/Xbox/SP/animscripts/traverse/window_2.gsc @@ -0,0 +1,40 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\window_2.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 44 ms + * Timestamp: 10/27/2023 2:29:38 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(self.type == "dog") + { + animscripts/traverse/shared::func_3AFB("wallhop",40); + return; + } + + func_3B01(%windowclimb,35); +} + +//Function Number: 2 +func_3B01(param_00,param_01) +{ + self.desired_anim_pose = "crouch"; + animscripts/utility::updateanimpose(); + self endon("killanimscript"); + self traversemode("nogravity"); + self traversemode("noclip"); + var_02 = self getnegotiationstartnode(); + self orientmode("face angle",var_02.angles[1]); + var_03 = var_02.var_1A98 - var_02.origin[2]; + self setflaggedanimknoballrestart("traverse",param_00,%body,1,0.15,1); + wait 0.7; + thread animscripts/traverse/shared::func_3AEB(var_03 - param_01); + wait 0.9; + self traversemode("gravity"); + animscripts/shared::donotetracks("traverse"); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/traverse/window_divethrough_36.gsc b/MW3/Xbox/SP/animscripts/traverse/window_divethrough_36.gsc new file mode 100644 index 0000000..10e5964 --- /dev/null +++ b/MW3/Xbox/SP/animscripts/traverse/window_divethrough_36.gsc @@ -0,0 +1,28 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\window_divethrough_36.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 47 ms + * Timestamp: 10/27/2023 2:29:38 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(self.type == "dog") + { + animscripts/traverse/shared::func_3AFB("window_40",40); + return; + } + + low_wall_human(); +} + +//Function Number: 2 +low_wall_human() +{ + var_00 = []; + animscripts/traverse/shared::func_3AEF(var_41); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/traverse/window_down.gsc b/MW3/Xbox/SP/animscripts/traverse/window_down.gsc new file mode 100644 index 0000000..fb43b66 --- /dev/null +++ b/MW3/Xbox/SP/animscripts/traverse/window_down.gsc @@ -0,0 +1,91 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\window_down.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 4 + * Decompile Time: 89 ms + * Timestamp: 10/27/2023 2:29:39 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + var_00 = %windowclimb_fall; + var_01 = %windowclimb_land; + var_02 = 35; + self.desired_anim_pose = "crouch"; + animscripts/utility::updateanimpose(); + self endon("killanimscript"); + self traversemode("noclip"); + var_03 = self getnegotiationstartnode(); + self orientmode("face angle",var_03.angles[1]); + var_04 = var_03.var_1A98 - var_03.origin[2]; + self setflaggedanimknoballrestart("traverse",var_00,%body,1,0.15,1); + thread animscripts/notetracks::donotetracksforever("traverse","stop_traverse_notetracks"); + wait 1.5; + var_05 = (0,var_03.angles[1],0); + var_06 = anglestoforward(var_05); + var_06 = var_06 * 85; + var_07 = bullettrace(var_03.origin + var_06,var_03.origin + var_06 + (0,0,-500),0,undefined); + var_08 = var_07["position"][2]; + var_09 = var_03.origin[2] - var_08; + var_0A = 0; + for(var_0B = 0;var_0B < level.window_down_height.size;var_0B++) + { + if(var_09 < level.window_down_height[var_0B]) + { + continue; + } + + var_0A = var_09 - level.window_down_height[var_0B]; + } + + thread animscripts/traverse/shared::func_3AEB(var_0A * -1); + var_0C = self.origin[2]; + var_0D = 0; + level.var_3B03 = []; + for(;;) + { + var_0D = var_0C - self.origin[2]; + if(self.origin[2] - var_0D < var_08) + { + break; + } + + var_0C = self.origin[2]; + wait 0.05; + } + + if(isdefined(self.groundtype)) + { + self playsound("Land_" + self.groundtype); + } + + self notify("stop_traverse_notetracks"); + self setflaggedanimknoballrestart("traverse",var_01,%body,1,0.15,1); + self traversemode("gravity"); + animscripts/shared::donotetracks("traverse"); +} + +//Function Number: 2 +func_3B04(param_00) +{ + level notify("print_this_" + param_00); + level endon("print_this_" + param_00); + wait 0.05; +} + +//Function Number: 3 +func_3B05(param_00,param_01) +{ + wait 0.05; +} + +//Function Number: 4 +func_3B06(param_00,param_01) +{ + level notify("prrint_this_" + param_01); + level endon("prrint_this_" + param_01); + wait 0.05; +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/traverse/window_over_40.gsc b/MW3/Xbox/SP/animscripts/traverse/window_over_40.gsc new file mode 100644 index 0000000..27bfa32 --- /dev/null +++ b/MW3/Xbox/SP/animscripts/traverse/window_over_40.gsc @@ -0,0 +1,30 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\window_over_40.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 45 ms + * Timestamp: 10/27/2023 2:29:39 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(self.type == "dog") + { + animscripts/traverse/shared::func_3AFB("window_40",40); + return; + } + + jump_through_window_human(); +} + +//Function Number: 2 +jump_through_window_human() +{ + var_00 = []; + var_29["interruptDeathAnim"] = 0; + var_29["interruptDeathAnim"] = 1; + animscripts/traverse/shared::func_3AEF(var_29); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/traverse/window_over_quick.gsc b/MW3/Xbox/SP/animscripts/traverse/window_over_quick.gsc new file mode 100644 index 0000000..ceedfcd --- /dev/null +++ b/MW3/Xbox/SP/animscripts/traverse/window_over_quick.gsc @@ -0,0 +1,30 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\traverse\window_over_quick.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 43 ms + * Timestamp: 10/27/2023 2:29:40 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(self.type == "dog") + { + animscripts/traverse/shared::func_3AFB("window_40",40); + return; + } + + jump_through_window_human(); +} + +//Function Number: 2 +jump_through_window_human() +{ + var_00 = []; + var_29["interruptDeathAnim"] = 0; + var_29["interruptDeathAnim"] = 1; + animscripts/traverse/shared::func_3AEF(var_29); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/utility.gsc b/MW3/Xbox/SP/animscripts/utility.gsc new file mode 100644 index 0000000..f655dfc --- /dev/null +++ b/MW3/Xbox/SP/animscripts/utility.gsc @@ -0,0 +1,2240 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\utility.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 132 + * Decompile Time: 2198 ms + * Timestamp: 10/27/2023 2:31:02 AM +*******************************************************************/ + +//Function Number: 1 +initanimtree(param_00) +{ + self clearanim(%body,0.3); + self setanim(%body,1,0); + if(param_00 != "pain" && param_00 != "death") + { + self.a.special = "none"; + } + + self.missedsightchecks = 0; + self.a.var_8AE = 1; + self.a.aimweight_start = 1; + self.a.aimweight_end = 1; + self.a.aimweight_transframes = 0; + self.a.aimweight_t = 0; + isincombat(); +} + +//Function Number: 2 +updateanimpose() +{ + if(isdefined(self.desired_anim_pose) && self.desired_anim_pose != self.a.var_911) + { + if(self.a.var_911 == "prone") + { + exitpronewrapper(0.5); + } + + if(self.desired_anim_pose == "prone") + { + self setproneanimnodes(-45,45,%prone_legs_down,%exposed_aiming,%prone_legs_up); + enterpronewrapper(0.5); + self setanimknoball(%prone_aim_5,%body,1,0.1,1); + } + } + + self.desired_anim_pose = undefined; +} + +//Function Number: 3 +initialize(param_00) +{ + if(isdefined(self.longdeathstarting)) + { + if(param_00 != "pain" && param_00 != "death") + { + self kill(self.origin); + } + + if(param_00 != "pain") + { + self.longdeathstarting = undefined; + self notify("kill_long_death"); + } + } + + if(isdefined(self.a.mayonlydie) && param_00 != "death") + { + self kill(self.origin); + } + + if(isdefined(self.a.var_1C2F)) + { + var_01 = self.a.var_1C2F; + self.a.var_1C2F = undefined; + [[ var_01 ]](param_00); + } + + if(param_00 != "combat" && param_00 != "pain" && param_00 != "death" && usingsidearm()) + { + animscripts/combat::switchtolastweapon(%pistol_stand_switch,1); + } + + if(param_00 != "combat" && param_00 != "move" && param_00 != "pain") + { + self.a.magicreloadwhenreachenemy = undefined; + } + + if(param_00 != "death") + { + self.a.nodeath = 0; + } + + if(isdefined(self.isholdinggrenade) && param_00 == "pain" || param_00 == "death" || param_00 == "flashed") + { + animscripts/combat_utility::func_1F2C(); + } + + self.isholdinggrenade = undefined; + animscripts/squadmanager::func_6AE(param_00); + self.covernode = undefined; + self.suppressed = 0; + self.isreloading = 0; + self.var_8C8 = 0; + self.a.aimidlethread = undefined; + self.a.scriptstarttime = gettime(); + self.a.atconcealmentnode = 0; + if(isdefined(self.node) && self.node.type == "Conceal Prone" || self.node.type == "Conceal Crouch" || self.node.type == "Conceal Stand") + { + self.a.atconcealmentnode = 1; + } + + initanimtree(param_00); + updateanimpose(); +} + +//Function Number: 4 +getpreferredweapon() +{ + if(isdefined(self.wantshotgun) && self.wantshotgun) + { + if(isshotgun(self.primaryweapon)) + { + return self.primaryweapon; + } + else if(isshotgun(self.secondaryweapon)) + { + return self.secondaryweapon; + } + } + + return self.primaryweapon; +} + +//Function Number: 5 +func_1FFF(param_00,param_01,param_02) +{ + for(var_03 = 0;var_03 < param_00 * 20;var_03++) + { + for(var_04 = 0;var_04 < 10;var_04++) + { + var_05 = (0,randomint(360),0); + var_06 = anglestoforward(var_05); + var_07 = var_06 * param_02; + } + + wait 0.05; + } +} + +//Function Number: 6 +func_2000() +{ + self endon("death"); + self notify("displaceprint"); + self endon("displaceprint"); + wait 0.05; +} + +//Function Number: 7 +isincombat() +{ + if(self.alertlevelint > 1) + { + return 1; + } + + if(isdefined(self.enemy)) + { + self.a.var_1C2B = gettime() + level.var_1C4C + randomint(level.var_1C4D); + return 1; + } + + return self.a.var_1C2B > gettime(); +} + +//Function Number: 8 +getenemyeyepos() +{ + if(isdefined(self.enemy)) + { + self.a.var_2001 = self.enemy getshootatpos(); + self.a.lastenemytime = gettime(); + return self.a.var_2001; + } + + if(isdefined(self.a.lastenemytime) && isdefined(self.a.var_2001) && self.a.lastenemytime + 3000 < gettime()) + { + return self.a.var_2001; + } + + var_00 = self getshootatpos(); + var_00 = var_00 + (196 * self.lookforward[0],196 * self.lookforward[1],196 * self.lookforward[2]); + return var_00; +} + +//Function Number: 9 +getnodeforwardyaw(param_00) +{ + if(!isdefined(self.heat)) + { + if(param_00.type == "Cover Left") + { + return param_00.angles[1] + 90; + } + else if(param_00.type == "Cover Right") + { + return param_00.angles[1] - 90; + } + } + + return param_00.angles[1]; +} + +//Function Number: 10 +func_2002(param_00) +{ + if(isdefined(self.node)) + { + var_01 = self.node.angles[1] - func_0C05(param_00); + } + else + { + var_01 = self.angles[1] - func_0C05(var_01); + } + + var_01 = angleclamp180(var_01); + return var_01; +} + +//Function Number: 11 +getnodeyawtoenemy() +{ + var_00 = undefined; + if(isdefined(self.enemy)) + { + var_00 = self.enemy.origin; + } + else + { + if(isdefined(self.node)) + { + var_01 = anglestoforward(self.node.angles); + } + else + { + var_01 = anglestoforward(self.angles); + } + + var_01 = var_01 * 150; + var_00 = self.origin + var_01; + } + + if(isdefined(self.node)) + { + var_02 = self.node.angles[1] - func_0C05(var_00); + } + else + { + var_02 = self.angles[1] - func_0C05(var_02); + } + + var_02 = angleclamp180(var_02); + return var_02; +} + +//Function Number: 12 +getyawtospot(param_00) +{ + var_01 = self.angles[1] - func_0C05(param_00); + var_01 = angleclamp180(var_01); + return var_01; +} + +//Function Number: 13 +getyawtoenemy() +{ + var_00 = undefined; + if(isdefined(self.enemy)) + { + var_00 = self.enemy.origin; + } + else + { + var_01 = anglestoforward(self.angles); + var_01 = var_01 * 150; + var_00 = self.origin + var_01; + } + + var_02 = self.angles[1] - func_0C05(var_00); + var_02 = angleclamp180(var_02); + return var_02; +} + +//Function Number: 14 +func_0C05(param_00) +{ + return vectortoyaw(param_00 - self.origin); +} + +//Function Number: 15 +func_2003(param_00) +{ + var_01 = vectortoangles((param_00[0],param_00[1],0) - (self.origin[0],self.origin[1],0)); + return var_01[1]; +} + +//Function Number: 16 +func_2004() +{ + var_00 = self.angles[1] - func_0C05(self.enemy.origin); + var_00 = angleclamp180(var_00); + if(var_00 < 0) + { + var_00 = -1 * var_00; + } + + return var_00; +} + +//Function Number: 17 +absyawtoenemy2d() +{ + var_00 = self.angles[1] - func_2003(self.enemy.origin); + var_00 = angleclamp180(var_00); + if(var_00 < 0) + { + var_00 = -1 * var_00; + } + + return var_00; +} + +//Function Number: 18 +absyawtoorigin(param_00) +{ + var_01 = self.angles[1] - func_0C05(param_00); + var_01 = angleclamp180(var_01); + if(var_01 < 0) + { + var_01 = -1 * var_01; + } + + return var_01; +} + +//Function Number: 19 +absyawtoangles(param_00) +{ + var_01 = self.angles[1] - param_00; + var_01 = angleclamp180(var_01); + if(var_01 < 0) + { + var_01 = -1 * var_01; + } + + return var_01; +} + +//Function Number: 20 +func_2008(param_00,param_01) +{ + var_02 = vectortoangles(param_00 - param_01); + return var_02[1]; +} + +//Function Number: 21 +getyawtotag(param_00,param_01) +{ + var_02 = self gettagangles(param_00)[1] - func_2008(param_01,self gettagorigin(param_00)); + var_02 = angleclamp180(var_02); + return var_02; +} + +//Function Number: 22 +func_1FD1(param_00) +{ + var_01 = self.angles[1] - func_0C05(param_00); + var_01 = angleclamp180(var_01); + return var_01; +} + +//Function Number: 23 +func_200A(param_00) +{ + var_01 = self gettagangles("TAG_EYE")[1] - func_0C05(param_00); + var_01 = angleclamp180(var_01); + return var_01; +} + +//Function Number: 24 +isstanceallowedwrapper(param_00) +{ + if(isdefined(self.covernode)) + { + return self.covernode doesnodeallowstance(param_00); + } + + return self isstanceallowed(param_00); +} + +//Function Number: 25 +choosepose(param_00) +{ + if(!isdefined(param_00)) + { + param_00 = self.a.var_911; + } + + switch(param_00) + { + case "stand": + if(isstanceallowedwrapper("stand")) + { + var_01 = "stand"; + } + else if(isstanceallowedwrapper("crouch")) + { + var_01 = "crouch"; + } + else if(isstanceallowedwrapper("prone")) + { + var_01 = "prone"; + } + else + { + var_01 = "stand"; + } + break; + + case "crouch": + if(isstanceallowedwrapper("crouch")) + { + var_01 = "crouch"; + } + else if(isstanceallowedwrapper("stand")) + { + var_01 = "stand"; + } + else if(isstanceallowedwrapper("prone")) + { + var_01 = "prone"; + } + else + { + var_01 = "crouch"; + } + break; + + case "prone": + if(isstanceallowedwrapper("prone")) + { + var_01 = "prone"; + } + else if(isstanceallowedwrapper("crouch")) + { + var_01 = "crouch"; + } + else if(isstanceallowedwrapper("stand")) + { + var_01 = "stand"; + } + else + { + var_01 = "prone"; + } + break; + + default: + var_01 = "stand"; + break; + } + + return var_01; +} + +//Function Number: 26 +getclaimednode() +{ + var_00 = self.node; + if(isdefined(var_00) && self nearnode(var_00) || isdefined(self.covernode) && var_00 == self.covernode) + { + return var_00; + } + + return undefined; +} + +//Function Number: 27 +getnodetype() +{ + var_00 = getclaimednode(); + if(isdefined(var_00)) + { + return var_00.type; + } + + return "none"; +} + +//Function Number: 28 +getnodedirection() +{ + var_00 = getclaimednode(); + if(isdefined(var_00)) + { + return var_00.angles[1]; + } + + return self.desiredangle; +} + +//Function Number: 29 +getnodeforward() +{ + var_00 = getclaimednode(); + if(isdefined(var_00)) + { + return anglestoforward(var_00.angles); + } + + return anglestoforward(self.angles); +} + +//Function Number: 30 +getnodeorigin() +{ + var_00 = getclaimednode(); + if(isdefined(var_00)) + { + return var_00.origin; + } + + return self.origin; +} + +//Function Number: 31 +safemod(param_00,param_01) +{ + var_02 = int(param_00) % param_01; + var_02 = var_02 + param_01; + return var_02 % param_01; +} + +//Function Number: 32 +absangleclamp180(param_00) +{ + return abs(angleclamp180(param_00)); +} + +//Function Number: 33 +quadrantanimweights(param_00) +{ + var_01 = cos(param_00); + var_02 = sin(param_00); + var_03["front"] = 0; + if(isdefined(self.alwaysrunforward)) + { + return var_41; + } + + if(var_02 > 0) + { + if(var_03 > var_02) + { + } + else if(var_03 < -1 * var_02) + { + } + else + { + } + } + else + { + var_04 = -1 * var_02; + if(var_03 > var_04) + { + var_41["left"] = 1; + } + else if(var_03 < var_02) + { + var_41["right"] = 1; + } + else + { + var_41["back"] = 1; + } + } + + return var_41; +} + +//Function Number: 34 +getquadrant(param_00) +{ + param_00 = angleclamp(param_00); + if(param_00 < 45 || param_00 > 315) + { + var_01 = "front"; + } + else if(var_01 < 135) + { + var_01 = "left"; + } + else if(var_01 < 225) + { + var_01 = "back"; + } + else + { + var_01 = "right"; + } + + return var_01; +} + +//Function Number: 35 +isinset(param_00,param_01) +{ + for(var_02 = param_01.size - 1;var_02 >= 0;var_02--) + { + if(param_00 == param_01[var_02]) + { + return 1; + } + } + + return 0; +} + +//Function Number: 36 +playanim(param_00) +{ + if(isdefined(param_00)) + { + self setflaggedanimknoballrestart("playAnim",param_00,%root,1,0.1,1); + var_01 = getanimlength(param_00); + var_01 = 3 * var_01 + 1; + thread func_2010("time is up","time is up",var_01); + self waittill("time is up"); + self notify("enddrawstring"); + } +} + +//Function Number: 37 +func_2010(param_00,param_01,param_02) +{ + self endon("death"); + self endon(param_01); + wait param_02; + self notify(param_00); +} + +//Function Number: 38 +drawstring(param_00) +{ + self endon("killanimscript"); + self endon("enddrawstring"); + wait 0.05; +} + +//Function Number: 39 +func_2012(param_00,param_01,param_02,param_03) +{ + var_04 = param_03 * 20; + for(var_05 = 0;var_05 < var_04;var_05++) + { + wait 0.05; + } +} + +//Function Number: 40 +func_2013(param_00) +{ + self notify("got known enemy2"); + self endon("got known enemy2"); + self endon("death"); + if(!isdefined(self.enemy)) + { + return; + } + + if(self.enemy.team == "allies") + { + var_01 = (0.4,0.7,1); + } + else + { + var_01 = (1,0.7,0.4); + } + + for(;;) + { + wait 0.05; + if(!isdefined(self.lastenemysightpos)) + { + continue; + } + } +} + +//Function Number: 41 +hasenemysightpos() +{ + if(isdefined(self.node)) + { + return func_0B35() || cansuppressenemyfromexposed(); + } + + return canseeenemy() || cansuppressenemy(); +} + +//Function Number: 42 +getenemysightpos() +{ + return self.goodshootpos; +} + +//Function Number: 43 +util_ignorecurrentsightpos() +{ + if(!hasenemysightpos()) + { + return; + } + + self.ignoresightpos = getenemysightpos(); + self.ignoreorigin = self.origin; +} + +//Function Number: 44 +func_2017() +{ + if(!hasenemysightpos()) + { + return 0; + } + + var_00 = self getmuzzlepos(); + var_01 = self getshootatpos() - var_00; + if(isdefined(self.ignoresightpos) && isdefined(self.ignoreorigin)) + { + if(distance(self.origin,self.ignoreorigin) < 25) + { + return 0; + } + } + + self.ignoresightpos = undefined; + var_02 = self canshoot(getenemysightpos(),var_01); + if(!var_02) + { + self.ignoresightpos = getenemysightpos(); + return 0; + } + + return 1; +} + +//Function Number: 45 +debugtimeout() +{ + wait 5; + self notify("timeout"); +} + +//Function Number: 46 +debugposinternal(param_00,param_01,param_02) +{ + self endon("death"); + self notify("stop debug " + param_00); + self endon("stop debug " + param_00); + var_03 = spawnstruct(); + var_03 thread debugtimeout(); + var_03 endon("timeout"); + if(self.enemy.team == "allies") + { + var_04 = (0.4,0.7,1); + } + else + { + var_04 = (1,0.7,0.4); + } + + wait 0.05; +} + +//Function Number: 47 +debugpos(param_00,param_01) +{ + thread debugposinternal(param_00,param_01,2.15); +} + +//Function Number: 48 +debugpossize(param_00,param_01,param_02) +{ + thread debugposinternal(param_00,param_01,param_02); +} + +//Function Number: 49 +debugburstprint(param_00,param_01) +{ + var_02 = param_00 / param_01; + var_03 = undefined; + if(param_00 == self.bulletsinclip) + { + var_03 = "all rounds"; + } + else if(var_02 < 0.25) + { + var_03 = "small burst"; + } + else if(var_02 < 0.5) + { + var_03 = "med burst"; + } + else + { + var_03 = "long burst"; + } + + thread debugpossize(self.origin + (0,0,42),var_03,1.5); + thread debugpos(self.origin + (0,0,60),"Suppressing"); +} + +//Function Number: 50 +func_201D() +{ + self endon("death"); + self notify("stop shoot " + self.var_1DEB); + self endon("stop shoot " + self.var_1DEB); + var_00 = 0.25; + var_01 = var_00 * 20; + for(var_02 = 0;var_02 < var_01;var_02 = var_02 + 1) + { + wait 0.05; + } +} + +//Function Number: 51 +func_201E() +{ +} + +//Function Number: 52 +func_201F(param_00,param_01,param_02,param_03) +{ + self endon("death"); + var_04 = param_03 * 20; + for(var_05 = 0;var_05 < var_04;var_05 = var_05 + 1) + { + wait 0.05; + } +} + +//Function Number: 53 +showdebugline(param_00,param_01,param_02,param_03) +{ + thread func_201F(param_00,param_01 + (0,0,-5),param_02,param_03); +} + +//Function Number: 54 +shootenemywrapper() +{ + [[ level.shootenemywrapper_func ]](); +} + +//Function Number: 55 +func_2021() +{ + self.a.lastshoottime = gettime(); + maps\_gameskill::func_1E92(); + self notify("shooting"); + self shoot(); +} + +//Function Number: 56 +shootenemywrapper_shootnotify() +{ + level notify("an_enemy_shot",self); + func_2021(); +} + +//Function Number: 57 +shootposwrapper(param_00) +{ + var_01 = bulletspread(self getmuzzlepos(),param_00,4); + self.a.lastshoottime = gettime(); + self notify("shooting"); + self shoot(1,var_01); +} + +//Function Number: 58 +func_2022() +{ + var_00 = spawn("script_model",(0,0,0)); + var_00 setmodel("temp"); + var_00.origin = self gettagorigin("tag_weapon_right") + (50,50,0); + var_00.angles = self gettagangles("tag_weapon_right"); + var_01 = anglestoright(var_00.angles); + var_01 = var_01 * 15; + var_02 = anglestoforward(var_00.angles); + var_02 = var_02 * 15; + var_00 movegravity((0,50,150),100); + var_03 = "weapon_" + self.weapon; + var_04 = spawn(var_03,var_00.origin); + var_04.angles = self gettagangles("tag_weapon_right"); + var_04 linkto(var_00); + var_05 = var_00.origin; + while(isdefined(var_04) && isdefined(var_04.origin)) + { + var_06 = var_05; + var_07 = var_00.origin; + var_08 = vectortoangles(var_07 - var_06); + var_02 = anglestoforward(var_08); + var_02 = var_02 * 4; + var_09 = bullettrace(var_07,var_07 + var_02,1,var_04); + if(isalive(var_09["entity"]) && var_09["entity"] == self) + { + wait 0.05; + continue; + } + + if(var_09["fraction"] < 1) + { + break; + } + + var_05 = var_00.origin; + wait 0.05; + } + + if(isdefined(var_04) && isdefined(var_04.origin)) + { + var_04 unlink(); + } + + var_00 delete(); +} + +//Function Number: 59 +func_1C4E(param_00) +{ + level.idleanimtransition["stand"]["in"] = %casual_stand_idle_trans_in; + level.idleanimarray["stand"][0][0] = %casual_stand_idle; + level.idleanimarray["stand"][0][1] = %casual_stand_idle_twitch; + level.idleanimarray["stand"][0][2] = %casual_stand_idle_twitchb; + level.idleanimweights["stand"][0][0] = 2; + level.idleanimweights["stand"][0][1] = 1; + level.idleanimweights["stand"][0][2] = 1; + level.idleanimarray["stand"][1][0] = %casual_stand_v2_idle; + level.idleanimarray["stand"][1][1] = %casual_stand_v2_twitch_radio; + level.idleanimarray["stand"][1][2] = %casual_stand_v2_twitch_shift; + level.idleanimarray["stand"][1][3] = %casual_stand_v2_twitch_talk; + level.idleanimweights["stand"][1][0] = 10; + level.idleanimweights["stand"][1][1] = 4; + level.idleanimweights["stand"][1][2] = 7; + level.idleanimweights["stand"][1][3] = 4; + level.idleanimarray["stand_cqb"][0][0] = %cqb_stand_idle; + level.idleanimarray["stand_cqb"][0][1] = %cqb_stand_twitch; + level.idleanimweights["stand_cqb"][0][0] = 2; + level.idleanimweights["stand_cqb"][0][1] = 1; + level.idleanimtransition["crouch"]["in"] = %casual_crouch_idle_in; + level.idleanimarray["crouch"][0][0] = %casual_crouch_idle; + level.idleanimweights["crouch"][0][0] = 6; +} + +//Function Number: 60 +func_2023() +{ + var_00 = "TAG_EYE"; + self endon("death"); + self notify("stop personal effect"); + self endon("stop personal effect"); + while(isdefined(self)) + { + wait 0.05; + if(!isdefined(self)) + { + break; + } + + if(isdefined(self.a.movement) && self.a.movement == "stop") + { + if(isdefined(self.isindoor) && self.isindoor == 1) + { + continue; + } + + playfxontag(level._effect["cold_breath"],self,var_00); + wait 2.5 + randomfloat(3); + continue; + } + + wait 0.5; + } +} + +//Function Number: 61 +personalcoldbreathstop() +{ + self notify("stop personal effect"); +} + +//Function Number: 62 +func_2025() +{ + self endon("death"); + self notify("stop personal effect"); + self endon("stop personal effect"); + for(;;) + { + self waittill("spawned",var_00); + if(maps\_utility::func_F77(var_00)) + { + continue; + } + + var_00 thread func_2023(); + } +} + +//Function Number: 63 +issuppressedwrapper() +{ + if(isdefined(self.forcesuppression)) + { + return self.forcesuppression; + } + + if(self.suppressionmeter <= self.suppressionthreshold) + { + return 0; + } + + return self issuppressed(); +} + +//Function Number: 64 +ispartiallysuppressedwrapper() +{ + if(self.suppressionmeter <= self.suppressionthreshold * 0.25) + { + return 0; + } + + return self issuppressed(); +} + +//Function Number: 65 +getnodeoffset(param_00) +{ + if(isdefined(param_00.offset)) + { + return param_00.offset; + } + + var_01 = (-26,0.4,36); + var_02 = (-32,7,63); + var_03 = (43.5,11,36); + var_04 = (36,8.3,63); + var_05 = (3.5,-12.5,45); + var_06 = (-3.7,-22,63); + var_07 = 0; + var_08 = (0,0,0); + var_09 = anglestoright(param_00.angles); + var_0A = anglestoforward(param_00.angles); + switch(param_00.type) + { + case "Cover Left": + if(param_00 gethighestnodestance() == "crouch") + { + var_08 = calculatenodeoffset(var_09,var_0A,var_01); + } + else + { + var_08 = calculatenodeoffset(var_09,var_0A,var_02); + } + break; + + case "Cover Right": + if(param_00 gethighestnodestance() == "crouch") + { + var_08 = calculatenodeoffset(var_09,var_0A,var_03); + } + else + { + var_08 = calculatenodeoffset(var_09,var_0A,var_04); + } + break; + + case "Turret": + case "Cover Stand": + case "Conceal Stand": + var_08 = calculatenodeoffset(var_09,var_0A,var_06); + break; + + case "Cover Crouch Window": + case "Cover Crouch": + case "Conceal Crouch": + var_08 = calculatenodeoffset(var_09,var_0A,var_05); + break; + } + + param_00.offset = var_08; + return param_00.offset; +} + +//Function Number: 66 +calculatenodeoffset(param_00,param_01,param_02) +{ + return param_00 * param_02[0] + param_01 * param_02[1] + (0,0,param_02[2]); +} + +//Function Number: 67 +recentlysawenemy() +{ + return isdefined(self.enemy) && self seerecently(self.enemy,5); +} + +//Function Number: 68 +canseeenemy(param_00) +{ + if(!isdefined(self.enemy)) + { + return 0; + } + + if((isdefined(param_00) && self cansee(self.enemy,param_00)) || self cansee(self.enemy)) + { + if(!checkpitchvisibility(self geteye(),self.enemy getshootatpos())) + { + return 0; + } + + self.goodshootpos = getenemyeyepos(); + func_2029(); + return 1; + } + + return 0; +} + +//Function Number: 69 +func_0B35() +{ + if(!isdefined(self.enemy)) + { + self.goodshootpos = undefined; + return 0; + } + + var_00 = getenemyeyepos(); + if(!isdefined(self.node)) + { + var_01 = self cansee(self.enemy); + } + else + { + var_01 = canseepointfromexposedatnode(var_01,self.node); + } + + if(var_01) + { + self.goodshootpos = var_00; + func_2029(); + } + else + { + } + + return var_01; +} + +//Function Number: 70 +canseepointfromexposedatnode(param_00,param_01) +{ + if(param_01.type == "Cover Left" || param_01.type == "Cover Right") + { + if(!animscripts/corner::canseepointfromexposedatcorner(param_00,param_01)) + { + return 0; + } + } + + var_02 = getnodeoffset(param_01); + var_03 = param_01.origin + var_02; + if(!checkpitchvisibility(var_03,param_00,param_01)) + { + return 0; + } + + if(!sighttracepassed(var_03,param_00,0,undefined)) + { + if(param_01.type == "Cover Crouch" || param_01.type == "Conceal Crouch") + { + var_03 = (0,0,64) + param_01.origin; + return sighttracepassed(var_03,param_00,0,undefined); + } + + return 0; + } + + return 1; +} + +//Function Number: 71 +checkpitchvisibility(param_00,param_01,param_02) +{ + var_03 = self.downaimlimit - level.aimpitchdifftolerance; + var_04 = self.upaimlimit + level.aimpitchdifftolerance; + var_05 = angleclamp180(vectortoangles(param_01 - param_00)[0]); + if(var_05 > var_04) + { + return 0; + } + + if(var_05 < var_03) + { + if(isdefined(param_02) && param_02.type != "Cover Crouch" && param_02.type != "Conceal Crouch") + { + return 0; + } + + if(var_05 < level.var_898 + var_03) + { + return 0; + } + } + + return 1; +} + +//Function Number: 72 +func_2029() +{ + self.a.shouldresetgiveuponsuppressiontimer = 1; +} + +//Function Number: 73 +updategiveuponsuppressiontimer() +{ + if(!isdefined(self.a.shouldresetgiveuponsuppressiontimer)) + { + self.a.shouldresetgiveuponsuppressiontimer = 1; + } + + if(self.a.shouldresetgiveuponsuppressiontimer) + { + self.a.giveuponsuppressiontime = gettime() + randomintrange(15000,30000); + self.a.shouldresetgiveuponsuppressiontimer = 0; + } +} + +//Function Number: 74 +showlines(param_00,param_01,param_02) +{ + for(;;) + { + wait 0.05; + wait 0.05; + } +} + +//Function Number: 75 +func_202E() +{ + if(!self canattackenemynode()) + { + return 0; + } + + var_00 = undefined; + if(isdefined(self.enemy.node)) + { + var_01 = getnodeoffset(self.enemy.node); + var_00 = self.enemy.node.origin + var_01; + } + else + { + var_00 = self.enemy getshootatpos(); + } + + if(!self canshoot(var_00)) + { + return 0; + } + + if(self.script == "combat") + { + if(!sighttracepassed(self geteye(),self getmuzzlepos(),0,undefined)) + { + return 0; + } + } + + self.goodshootpos = var_00; + return 1; +} + +//Function Number: 76 +cansuppressenemyfromexposed() +{ + if(!hassuppressableenemy()) + { + self.goodshootpos = undefined; + return 0; + } + + if(!isplayer(self.enemy)) + { + return func_202E(); + } + + if(isdefined(self.node)) + { + if(self.node.type == "Cover Left" || self.node.type == "Cover Right") + { + if(!animscripts/corner::canseepointfromexposedatcorner(getenemyeyepos(),self.node)) + { + return 0; + } + } + + var_00 = getnodeoffset(self.node); + var_01 = self.node.origin + var_00; + } + else + { + var_01 = self getmuzzlepos(); + } + + if(!checkpitchvisibility(var_01,self.lastenemysightpos)) + { + return 0; + } + + return func_2034(var_01); +} + +//Function Number: 77 +cansuppressenemy() +{ + if(!hassuppressableenemy()) + { + self.goodshootpos = undefined; + return 0; + } + + if(!isplayer(self.enemy)) + { + return func_202E(); + } + + var_00 = self getmuzzlepos(); + if(!checkpitchvisibility(var_00,self.lastenemysightpos)) + { + return 0; + } + + return func_2034(var_00); +} + +//Function Number: 78 +hassuppressableenemy() +{ + if(!isdefined(self.enemy)) + { + return 0; + } + + if(!isdefined(self.lastenemysightpos)) + { + return 0; + } + + updategiveuponsuppressiontimer(); + if(gettime() > self.a.giveuponsuppressiontime) + { + return 0; + } + + if(!needrecalculatesuppressspot()) + { + return isdefined(self.goodshootpos); + } + + return 1; +} + +//Function Number: 79 +canseeandshootpoint(param_00) +{ + if(!sighttracepassed(self getshootatpos(),param_00,0,undefined)) + { + return 0; + } + + if(self.a.weaponpos["right"] == "none") + { + return 0; + } + + var_01 = self getmuzzlepos(); + return sighttracepassed(var_01,param_00,0,undefined); +} + +//Function Number: 80 +needrecalculatesuppressspot() +{ + if(isdefined(self.goodshootpos) && !canseeandshootpoint(self.goodshootpos)) + { + return 1; + } + + return !isdefined(self.lastenemysightposold) || self.lastenemysightposold != self.lastenemysightpos || distancesquared(self.var_2033,self.origin) > 1024; +} + +//Function Number: 81 +func_2034(param_00) +{ + if(!needrecalculatesuppressspot()) + { + return isdefined(self.goodshootpos); + } + + if(isdefined(self.enemy) && distancesquared(self.origin,self.enemy.origin) > squared(self.enemy.maxvisibledist)) + { + self.goodshootpos = undefined; + return 0; + } + + if(!sighttracepassed(self getshootatpos(),param_00,0,undefined)) + { + self.goodshootpos = undefined; + return 0; + } + + self.var_2033 = self.origin; + self.lastenemysightposold = self.lastenemysightpos; + var_01 = getenemyeyepos(); + var_02 = bullettrace(self.lastenemysightpos,var_01,0,undefined); + var_03 = var_02["position"]; + var_04 = self.lastenemysightpos - var_03; + var_05 = vectornormalize(self.lastenemysightpos - param_00); + var_04 = var_04 - var_05 * vectordot(var_04,var_05); + var_06 = 20; + var_07 = int(length(var_04) / var_06 + 0.5); + if(var_07 < 1) + { + var_07 = 1; + } + + if(var_07 > 20) + { + var_07 = 20; + } + + var_08 = self.lastenemysightpos - var_03; + var_08 = (var_08[0] / var_07,var_08[1] / var_07,var_08[2] / var_07); + var_07++; + var_09 = var_03; + self.goodshootpos = undefined; + var_0A = 0; + var_0B = 2; + for(var_0C = 0;var_0C < var_07 + var_0B;var_0C++) + { + var_0D = sighttracepassed(param_00,var_09,0,undefined); + var_0E = var_09; + if(var_0C == var_07 - 1) + { + var_08 = var_08 - var_05 * vectordot(var_08,var_05); + } + + var_09 = var_09 + var_08; + if(var_0D) + { + var_0A++; + self.goodshootpos = var_0E; + if(var_0C > 0 && var_0A < var_0B && var_0C < var_07 + var_0B - 1) + { + continue; + } + + return 1; + } + else + { + var_0A = 0; + } + } + + return isdefined(self.goodshootpos); +} + +//Function Number: 82 +anim_array(param_00,param_01) +{ + var_02 = param_00.size; + var_03 = randomint(var_02); + if(var_02 == 1) + { + return param_00[0]; + } + + var_04 = 0; + var_05 = 0; + for(var_06 = 0;var_06 < var_02;var_06++) + { + var_05 = var_05 + param_01[var_06]; + } + + var_07 = randomfloat(var_05); + var_08 = 0; + for(var_06 = 0;var_06 < var_02;var_06++) + { + var_08 = var_08 + param_01[var_06]; + if(var_07 >= var_08) + { + continue; + } + + var_03 = var_06; + break; + } + + return param_00[var_03]; +} + +//Function Number: 83 +print3dtime(param_00,param_01,param_02,param_03,param_04,param_05) +{ + var_06 = param_00 / 0.05; + for(var_07 = 0;var_07 < var_06;var_07++) + { + wait 0.05; + } +} + +//Function Number: 84 +func_2036(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = 100; + var_06 = 0; + param_00 = param_00 + common_scripts\utility::randomvector(30); + for(var_07 = 0;var_07 < var_05;var_07++) + { + var_06 = var_06 + 0.5; + wait 0.05; + } +} + +//Function Number: 85 +func_2037(param_00,param_01) +{ + return param_00[0] * param_01[1] - param_00[1] * param_01[0] > 0; +} + +//Function Number: 86 +getgrenademodel() +{ + return getweaponmodel(self.grenadeweapon); +} + +//Function Number: 87 +sawenemymove(param_00) +{ + if(!isdefined(param_00)) + { + param_00 = 500; + } + + return gettime() - self.personalsighttime < param_00; +} + +//Function Number: 88 +func_203A() +{ + if(!self.grenadeammo) + { + return 0; + } + + if(self.script_forcegrenade) + { + return 1; + } + + return isplayer(self.enemy); +} + +//Function Number: 89 +usingboltactionweapon() +{ + return weaponisboltaction(self.weapon); +} + +//Function Number: 90 +random_weight(param_00) +{ + var_01 = randomint(param_00.size); + if(param_00.size > 1) + { + var_02 = 0; + for(var_03 = 0;var_03 < param_00.size;var_03++) + { + var_02 = var_02 + param_00[var_03]; + } + + var_04 = randomfloat(var_02); + var_02 = 0; + for(var_03 = 0;var_03 < param_00.size;var_03++) + { + var_02 = var_02 + param_00[var_03]; + if(var_04 < var_02) + { + var_01 = var_03; + break; + } + } + } + + return var_01; +} + +//Function Number: 91 +setfootstepeffect(param_00,param_01) +{ + if(!isdefined(level.var_1C53)) + { + anim.var_1C53 = []; + } + + level.var_1C53[level.var_1C53.size] = param_00; + level._effect["step_" + param_00] = param_01; +} + +//Function Number: 92 +setfootstepeffectsmall(param_00,param_01) +{ + if(!isdefined(level.optionalstepeffectssmall)) + { + anim.optionalstepeffectssmall = []; + } + + level.optionalstepeffectssmall[level.optionalstepeffectssmall.size] = param_00; + level._effect["step_small_" + param_00] = param_01; +} + +//Function Number: 93 +func_203F(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if(!isdefined(param_02)) + { + param_02 = "all"; + } + + if(!isdefined(level._notetrackfx)) + { + level._notetrackfx = []; + } + + level._notetrackfx[param_00][param_02] = spawnstruct(); + level._notetrackfx[param_00][param_02].tag = param_01; + level._notetrackfx[param_00][param_02].fx = param_03; + if(isdefined(param_04)) + { + level._notetrackfx[param_00][param_02].sound_prefix = param_04; + } + + if(isdefined(param_05)) + { + level._notetrackfx[param_00][param_02].sound_suffix = param_05; + } +} + +//Function Number: 94 +func_2040(param_00,param_01) +{ + self endon("death"); + level notify("newdebugline"); + level endon("newdebugline"); + wait 0.05; +} + +//Function Number: 95 +enterpronewrapper(param_00) +{ + thread enterpronewrapperproc(param_00); +} + +//Function Number: 96 +enterpronewrapperproc(param_00) +{ + self endon("death"); + self notify("anim_prone_change"); + self endon("anim_prone_change"); + self enterprone(param_00,isdefined(self.a.onback)); + self waittill("killanimscript"); + if(self.a.var_911 != "prone" && !isdefined(self.a.onback)) + { + self.a.var_911 = "prone"; + } +} + +//Function Number: 97 +exitpronewrapper(param_00) +{ + thread exitpronewrapperproc(param_00); +} + +//Function Number: 98 +exitpronewrapperproc(param_00) +{ + self endon("death"); + self notify("anim_prone_change"); + self endon("anim_prone_change"); + self exitprone(param_00); + self waittill("killanimscript"); + if(self.a.var_911 == "prone") + { + self.a.var_911 = "crouch"; + } +} + +//Function Number: 99 +canblindfire() +{ + if(self.a.atconcealmentnode) + { + return 0; + } + + if(!animscripts/weaponlist::usingautomaticweapon()) + { + return 0; + } + + if(weaponclass(self.weapon) == "mg") + { + return 0; + } + + if(isdefined(self.var_2043) && self.var_2043 == 1) + { + return 0; + } + + return 1; +} + +//Function Number: 100 +canhitsuppressspot() +{ + if(!hasenemysightpos()) + { + return 0; + } + + var_00 = self getmuzzlepos(); + return sighttracepassed(var_00,getenemysightpos(),0,undefined); +} + +//Function Number: 101 +moveanim(param_00) +{ + return self.a.moveanimset[param_00]; +} + +//Function Number: 102 +randomanimoftwo(param_00,param_01) +{ + if(randomint(2)) + { + return param_00; + } + + return param_01; +} + +//Function Number: 103 +animarray(param_00) +{ + return self.a.array[param_00]; +} + +//Function Number: 104 +animarrayanyexist(param_00) +{ + return self.a.array[param_00].size > 0; +} + +//Function Number: 105 +animarraypickrandom(param_00) +{ + var_01 = randomint(self.a.array[param_00].size); + return self.a.array[param_00][var_01]; +} + +//Function Number: 106 +array(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,param_0D) +{ + var_0E = []; + if(isdefined(param_00)) + { + } + else + { + return var_41; + } + + if(isdefined(param_02)) + { + } + else + { + return var_41; + } + + if(isdefined(param_03)) + { + } + else + { + return var_41; + } + + if(isdefined(param_04)) + { + } + else + { + return var_41; + } + + if(isdefined(param_05)) + { + } + else + { + return var_41; + } + + if(isdefined(param_06)) + { + } + else + { + return var_41; + } + + if(isdefined(param_07)) + { + } + else + { + return var_41; + } + + if(isdefined(param_08)) + { + } + else + { + return var_41; + } + + if(isdefined(param_09)) + { + } + else + { + return var_41; + } + + if(isdefined(param_0A)) + { + } + else + { + return var_41; + } + + if(isdefined(param_0B)) + { + } + else + { + return var_41; + } + + if(isdefined(param_0C)) + { + } + else + { + return var_41; + } + + if(isdefined(param_0D)) + { + } + else + { + return var_41; + } + + if(isdefined(var_0E)) + { + } + + return var_41; +} + +//Function Number: 107 +func_0D45() +{ + return self.primaryweapon; +} + +//Function Number: 108 +getaisecondaryweapon() +{ + return self.secondaryweapon; +} + +//Function Number: 109 +getaisidearmweapon() +{ + return self.sidearm; +} + +//Function Number: 110 +getaicurrentweapon() +{ + return self.weapon; +} + +//Function Number: 111 +usingprimary() +{ + return self.weapon == self.primaryweapon && self.weapon != "none"; +} + +//Function Number: 112 +func_2048() +{ + return self.weapon == self.secondaryweapon && self.weapon != "none"; +} + +//Function Number: 113 +usingsidearm() +{ + return self.weapon == self.sidearm && self.weapon != "none"; +} + +//Function Number: 114 +getaicurrentweaponslot() +{ + if(self.weapon == self.primaryweapon) + { + return "primary"; + } + + if(self.weapon == self.secondaryweapon) + { + return "secondary"; + } + + if(self.weapon == self.sidearm) + { + return "sidearm"; + } +} + +//Function Number: 115 +aihasweapon(param_00) +{ + if(isdefined(self.weaponinfo[param_00])) + { + return 1; + } + + return 0; +} + +//Function Number: 116 +getanimendpos(param_00) +{ + var_01 = getmovedelta(param_00,0,1); + return self localtoworldcoords(var_01); +} + +//Function Number: 117 +damagelocationisany(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A,param_0B) +{ + if(!isdefined(param_00)) + { + return 0; + } + + if(self.damagelocation == param_00) + { + return 1; + } + + if(!isdefined(param_01)) + { + return 0; + } + + if(self.damagelocation == param_01) + { + return 1; + } + + if(!isdefined(param_02)) + { + return 0; + } + + if(self.damagelocation == param_02) + { + return 1; + } + + if(!isdefined(param_03)) + { + return 0; + } + + if(self.damagelocation == param_03) + { + return 1; + } + + if(!isdefined(param_04)) + { + return 0; + } + + if(self.damagelocation == param_04) + { + return 1; + } + + if(!isdefined(param_05)) + { + return 0; + } + + if(self.damagelocation == param_05) + { + return 1; + } + + if(!isdefined(param_06)) + { + return 0; + } + + if(self.damagelocation == param_06) + { + return 1; + } + + if(!isdefined(param_07)) + { + return 0; + } + + if(self.damagelocation == param_07) + { + return 1; + } + + if(!isdefined(param_08)) + { + return 0; + } + + if(self.damagelocation == param_08) + { + return 1; + } + + if(!isdefined(param_09)) + { + return 0; + } + + if(self.damagelocation == param_09) + { + return 1; + } + + if(!isdefined(param_0A)) + { + return 0; + } + + if(self.damagelocation == param_0A) + { + return 1; + } + + return 0; +} + +//Function Number: 118 +usingpistol() +{ + return weaponclass(self.weapon) == "pistol"; +} + +//Function Number: 119 +usingrocketlauncher() +{ + return weaponclass(self.weapon) == "rocketlauncher"; +} + +//Function Number: 120 +usingmg() +{ + return weaponclass(self.weapon) == "mg"; +} + +//Function Number: 121 +func_1F02() +{ + return weaponclass(self.weapon) == "spread"; +} + +//Function Number: 122 +usingriflelikeweapon() +{ + var_00 = weaponclass(self.weapon); + switch(var_00) + { + case "rifle": + case "sniper": + case "smg": + case "spread": + case "mg": + return 1; + } + + return 0; +} + +//Function Number: 123 +ragdolldeath(param_00) +{ + self endon("killanimscript"); + var_01 = self.origin; + var_02 = (0,0,0); + for(;;) + { + wait 0.05; + var_03 = distance(self.origin,var_01); + var_01 = self.origin; + if(self.health == 1) + { + self.a.nodeath = 1; + self startragdoll(); + self clearanim(param_00,0.1); + wait 0.05; + physicsexplosionsphere(var_01,600,0,var_03 * 0.1); + self notify("killanimscript"); + return; + } + } +} + +//Function Number: 124 +shouldcqb() +{ + return isdefined(self.cqbwalking) && !isdefined(self.grenade); +} + +//Function Number: 125 +iscqbwalking() +{ + return isdefined(self.cqbwalking); +} + +//Function Number: 126 +iscqbwalkingorfacingenemy() +{ + return !self.facemotion || isdefined(self.cqbwalking); +} + +//Function Number: 127 +randomizeidleset() +{ + self.a.idleset = randomint(2); +} + +//Function Number: 128 +isshotgun(param_00) +{ + return weaponclass(param_00) == "spread"; +} + +//Function Number: 129 +issniperrifle(param_00) +{ + return weaponclass(param_00) == "sniper"; +} + +//Function Number: 130 +weapon_pump_action_shotgun() +{ + return self.weapon != "none" && weaponisboltaction(self.weapon) && weaponclass(self.weapon) == "spread"; +} + +//Function Number: 131 +getrandomintfromseed(param_00,param_01) +{ + var_02 = param_00 % level.randominttablesize; + return level.randominttable[var_02] % param_01; +} + +//Function Number: 132 +getcurrentweaponslotname() +{ + if(func_2048()) + { + return "secondary"; + } + + if(usingsidearm()) + { + return "sidearm"; + } + + return "primary"; +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/walk.gsc b/MW3/Xbox/SP/animscripts/walk.gsc new file mode 100644 index 0000000..07a39a9 --- /dev/null +++ b/MW3/Xbox/SP/animscripts/walk.gsc @@ -0,0 +1,140 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\walk.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 4 + * Decompile Time: 76 ms + * Timestamp: 10/27/2023 2:31:02 AM +*******************************************************************/ + +//Function Number: 1 +movewalk() +{ + var_00 = undefined; + if(isdefined(self.pathgoalpos) && distancesquared(self.origin,self.pathgoalpos) > 4096) + { + var_00 = "stand"; + } + + var_01 = [[ self.chooseposefunc ]](var_00); + switch(var_01) + { + case "stand": + if(animscripts/setposemovement::beginstandwalk()) + { + return; + } + + if(isdefined(self.walk_overrideanim)) + { + animscripts/move::movestandmoveoverride(self.walk_overrideanim,self.walk_override_weights); + return; + } + + dowalkanim(getwalkanim("straight")); + break; + + case "crouch": + if(animscripts/setposemovement::func_C6E()) + { + return; + } + + dowalkanim(getwalkanim("crouch")); + break; + + default: + if(animscripts/setposemovement::beginpronewalk()) + { + return; + } + + self.a.movement = "walk"; + dowalkanim(getwalkanim("prone")); + break; + } +} + +//Function Number: 2 +dowalkanimoverride(param_00) +{ + self endon("movemode"); + self clearanim(%combatrun,0.6); + self setanimknoball(%combatrun,%body,1,0.5,self.moveplaybackrate); + if(isarray(self.walk_overrideanim)) + { + if(isdefined(self.walk_override_weights)) + { + var_01 = common_scripts\utility::choose_from_weighted_array(self.walk_overrideanim,self.walk_override_weights); + } + else + { + var_01 = self.walk_overrideanim[randomint(self.walk_overrideanim.size)]; + } + } + else + { + var_01 = self.walk_overrideanim; + } + + self setflaggedanimknob("moveanim",var_01,1,0.2); + animscripts/shared::donotetracks("moveanim"); +} + +//Function Number: 3 +getwalkanim(param_00) +{ + if(self.stairsstate == "up") + { + return animscripts/utility::moveanim("stairs_up"); + } + else if(self.stairsstate == "down") + { + return animscripts/utility::moveanim("stairs_down"); + } + + var_01 = animscripts/utility::moveanim(param_00); + if(isarray(var_01)) + { + var_01 = var_01[randomint(var_01.size)]; + } + + return var_01; +} + +//Function Number: 4 +dowalkanim(param_00) +{ + self endon("movemode"); + var_01 = self.moveplaybackrate; + if(self.stairsstate != "none") + { + var_01 = var_01 * 0.6; + } + + if(self.a.var_911 == "stand") + { + if(isdefined(self.enemy)) + { + thread animscripts/cqb::cqbtracking(); + self setflaggedanimknoball("walkanim",animscripts/cqb::determinecqbanim(),%walk_and_run_loops,1,1,var_01,1); + } + else + { + self setflaggedanimknoball("walkanim",param_00,%body,1,1,var_01,1); + } + + animscripts/run::setmovenonforwardanims(animscripts/utility::moveanim("move_b"),animscripts/utility::moveanim("move_l"),animscripts/utility::moveanim("move_r")); + thread animscripts/run::setcombatstandmoveanimweights("walk"); + } + else + { + self setflaggedanimknoball("walkanim",param_00,%body,1,1,var_01,1); + animscripts/run::setmovenonforwardanims(animscripts/utility::moveanim("move_b"),animscripts/utility::moveanim("move_l"),animscripts/utility::moveanim("move_r")); + thread animscripts/run::setcombatstandmoveanimweights("walk"); + } + + animscripts/notetracks::donotetracksfortime(0.2,"walkanim"); + thread animscripts/run::stopshootwhilemovingthreads(); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/animscripts/weaponlist.gsc b/MW3/Xbox/SP/animscripts/weaponlist.gsc new file mode 100644 index 0000000..7f0b619 --- /dev/null +++ b/MW3/Xbox/SP/animscripts/weaponlist.gsc @@ -0,0 +1,126 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: animscripts\weaponlist.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 9 + * Decompile Time: 169 ms + * Timestamp: 10/27/2023 2:31:03 AM +*******************************************************************/ + +//Function Number: 1 +usingautomaticweapon() +{ + return weaponisauto(self.weapon) || weaponburstcount(self.weapon) > 0; +} + +//Function Number: 2 +usingsemiautoweapon() +{ + return weaponissemiauto(self.weapon); +} + +//Function Number: 3 +autoshootanimrate() +{ + if(usingautomaticweapon()) + { + return 0.1 / weaponfiretime(self.weapon); + } + + return 0.5; +} + +//Function Number: 4 +burstshootanimrate() +{ + if(usingautomaticweapon()) + { + return 0.1 / weaponfiretime(self.weapon); + } + + return 0.2; +} + +//Function Number: 5 +waitaftershot() +{ + return 0.25; +} + +//Function Number: 6 +func_08BA(param_00) +{ + if(!usingautomaticweapon() || isdefined(param_00) && param_00 == 1) + { + var_01 = 0.5 + randomfloat(1); + return weaponfiretime(self.weapon) * var_01; + } + + return weaponfiretime(self.weapon); +} + +//Function Number: 7 +refillclip() +{ + if(self.weapon == "none") + { + self.bulletsinclip = 0; + return 0; + } + + if(weaponclass(self.weapon) == "rocketlauncher") + { + if(!self.a.rocketvisible) + { + thread animscripts/combat_utility::showrocketwhenreloadisdone(); + } + } + + if(!isdefined(self.bulletsinclip)) + { + self.bulletsinclip = weaponclipsize(self.weapon); + } + else + { + self.bulletsinclip = weaponclipsize(self.weapon); + } + + if(self.bulletsinclip <= 0) + { + return 0; + } + + return 1; +} + +//Function Number: 8 +add_weapon(param_00,param_01,param_02,param_03,param_04) +{ + if(!isdefined(param_02)) + { + param_02 = 3; + } + + if(!isdefined(param_03)) + { + param_02 = 1; + } + + if(!isdefined(param_04)) + { + param_04 = "rifle"; + } + + param_00 = tolower(param_00); + level.aiweapon[param_00]["type"] = param_01; + level.aiweapon[param_00]["time"] = param_02; + level.aiweapon[param_00]["clipsize"] = param_03; + level.aiweapon[param_00]["anims"] = param_04; +} + +//Function Number: 9 +addturret(param_00) +{ + level.aiweapon[tolower(param_00)]["type"] = "turret"; +} \ No newline at end of file diff --git a/MW3/Xbox/SP/codescripts/character.gsc b/MW3/Xbox/SP/codescripts/character.gsc new file mode 100644 index 0000000..89f67c8 --- /dev/null +++ b/MW3/Xbox/SP/codescripts/character.gsc @@ -0,0 +1,258 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: codescripts\character.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 13 + * Decompile Time: 200 ms + * Timestamp: 10/27/2023 2:35:36 AM +*******************************************************************/ + +//Function Number: 1 +func_19F3(param_00) +{ + self setmodel(param_00[randomint(param_00.size)]); +} + +//Function Number: 2 +func_19F4(param_00) +{ + for(var_01 = 0;var_01 < param_00.size;var_01++) + { + precachemodel(param_00[var_01]); + } +} + +//Function Number: 3 +attachhead(param_00,param_01) +{ + if(!isdefined(level.var_19F6)) + { + level.var_19F6 = []; + } + + if(!isdefined(level.var_19F6[param_00])) + { + level.var_19F6[param_00] = randomint(param_01.size); + } + + var_02 = level.var_19F6[param_00] + 1 % param_01.size; + if(isdefined(self.script_char_index)) + { + var_02 = self.script_char_index % param_01.size; + } + + level.var_19F6[param_00] = var_02; + self attach(param_01[var_02],"",1); + self.headmodel = param_01[var_02]; +} + +//Function Number: 4 +func_19F9(param_00,param_01) +{ + if(!isdefined(level.character_hat_index)) + { + level.character_hat_index = []; + } + + if(!isdefined(level.character_hat_index[param_00])) + { + level.character_hat_index[param_00] = randomint(param_01.size); + } + + var_02 = level.character_hat_index[param_00] + 1 % param_01.size; + level.character_hat_index[param_00] = var_02; + self attach(param_01[var_02]); + self.var_ABA = param_01[var_02]; +} + +//Function Number: 5 +func_19FB() +{ + self detachall(); + var_00 = self.var_19FC; + if(!isdefined(var_00)) + { + return; + } + + self.var_19FC = "none"; + self [[ level.putguninhand ]](var_00); +} + +//Function Number: 6 +save() +{ + var_00["gunHand"] = self.var_19FC; + if(isdefined(self.name)) + { + } + else + { + } + + var_01 = self getattachsize(); + for(var_02 = 0;var_02 < var_01;var_02++ = var_41["name"]) + { + var_41["attach"][var_02]["model"] = self getattachmodelname(var_02); + var_41["attach"][var_02]["tag"] = self getattachtagname(var_02); + } + + return var_41; +} + +//Function Number: 7 +load(param_00) +{ + self detachall(); + self.var_19FC = param_00["gunHand"]; + self.anim_guninhand = param_00["gunInHand"]; + self setmodel(param_00["model"]); + self.var_ABA = param_00["hatModel"]; + if(isdefined(param_00["name"])) + { + self.name = param_00["name"]; + } + else + { + } + + var_01 = param_00["attach"]; + var_02 = var_01.size; + for(var_03 = 0;var_03 < var_02;var_03++) + { + self attach(var_01[var_03]["model"],var_01[var_03]["tag"]); + } +} + +//Function Number: 8 +precache(param_00) +{ + if(isdefined(param_00["name"])) + { + } + else + { + } + + precachemodel(param_00["model"]); + var_01 = param_00["attach"]; + var_02 = var_01.size; + for(var_03 = 0;var_03 < var_02;var_03++) + { + precachemodel(var_01[var_03]["model"]); + } +} + +//Function Number: 9 +get_random_character(param_00) +{ + var_01 = strtok(self.classname,"_"); + if(!common_scripts\utility::issp()) + { + if(isdefined(self.pers["modelIndex"]) && self.pers["modelIndex"] < param_00) + { + return self.pers["modelIndex"]; + } + + var_02 = randomint(param_00); + self.pers["modelIndex"] = var_02; + return var_02; + } + else if(var_02.size <= 2) + { + return randomint(var_01); + } + + var_03 = "auto"; + var_02 = undefined; + var_04 = var_01[2]; + if(isdefined(self.script_char_index)) + { + var_03 = self.script_char_index; + } + + if(isdefined(self.var_1A02)) + { + var_05 = "grouped"; + var_02 = "group_" + self.var_1A02; + } + + if(!isdefined(level.character_index_cache)) + { + level.character_index_cache = []; + } + + if(!isdefined(level.character_index_cache[var_04])) + { + level.character_index_cache[var_04] = []; + } + + if(!isdefined(level.character_index_cache[var_04][var_02])) + { + initialize_character_group(var_04,var_02,param_00); + } + + if(!isdefined(var_03)) + { + var_03 = func_1A04(var_04,var_02); + if(!isdefined(var_03)) + { + var_03 = randomint(5000); + } + } + + while(var_03 >= param_00) + { + var_03 = var_03 - param_00; + } + + level.character_index_cache[var_04][var_02][var_03]++; + return var_03; +} + +//Function Number: 10 +func_1A04(param_00,param_01) +{ + var_02 = []; + var_03 = level.character_index_cache[param_00][param_01][0]; + var_02[0] = 0; + for(var_04 = 1;var_04 < level.character_index_cache[param_00][param_01].size;var_04++) + { + if(level.character_index_cache[param_00][param_01][var_04] > var_03) + { + continue; + } + + if(level.character_index_cache[param_00][param_01][var_04] < var_03) + { + var_02 = []; + var_03 = level.character_index_cache[param_00][param_01][var_04]; + } + + var_02[var_02.size] = var_04; + } + + return random(var_02); +} + +//Function Number: 11 +initialize_character_group(param_00,param_01,param_02) +{ + for(var_03 = 0;var_03 < param_02;var_03++) + { + level.character_index_cache[param_00][param_01][var_03] = 0; + } +} + +//Function Number: 12 +get_random_weapon(param_00) +{ + return randomint(param_00); +} + +//Function Number: 13 +random(param_00) +{ + return param_00[randomint(param_00.size)]; +} \ No newline at end of file diff --git a/MW3/Xbox/SP/common_scripts/_artcommon.gsc b/MW3/Xbox/SP/common_scripts/_artcommon.gsc new file mode 100644 index 0000000..f69b063 --- /dev/null +++ b/MW3/Xbox/SP/common_scripts/_artcommon.gsc @@ -0,0 +1,128 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: common_scripts\_artcommon.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 10 + * Decompile Time: 268 ms + * Timestamp: 10/27/2023 2:33:53 AM +*******************************************************************/ + +//Function Number: 1 +artstartvisionfileexport() +{ + common_scripts\utility::fileprint_launcher_start_file(); +} + +//Function Number: 2 +func_1669() +{ + return common_scripts\utility::fileprint_launcher_end_file("\\share\\raw\\vision\\" + level.script + ".vision",1); +} + +//Function Number: 3 +artstartfogfileexport() +{ + common_scripts\utility::fileprint_launcher_start_file(); +} + +//Function Number: 4 +artendfogfileexport() +{ + return common_scripts\utility::fileprint_launcher_end_file("\\share\\raw\\maps\\createart\\" + level.script + "_art.gsc",1); +} + +//Function Number: 5 +artcommonfxprintln(param_00) +{ + common_scripts\utility::fileprint_launcher(param_00); +} + +//Function Number: 6 +func_166D() +{ +} + +//Function Number: 7 +func_166E() +{ + level.fogexphalfplane = getdvarfloat("scr_fog_exp_halfplane"); + level.fognearplane = getdvarfloat("scr_fog_nearplane"); + level.fogcolor = getdvarvector("scr_fog_color"); + level.fogmaxopacity = getdvarfloat("scr_fog_max_opacity"); + level.sunfogenabled = getdvarint("scr_sunFogEnabled"); + level.sunfogcolor = getdvarvector("scr_sunFogColor"); + level.var_1675 = getdvarvector("scr_sunFogDir"); + level.var_1676 = getdvarfloat("scr_sunFogBeginFadeAngle"); + level.sunfogendfadeangle = getdvarfloat("scr_sunFogEndFadeAngle"); + level.sunfogscale = getdvarfloat("scr_sunFogScale"); + level.fogexphalfplane = func_1679(level.fogexphalfplane); + level.fognearplane = func_1679(level.fognearplane); + var_00 = func_1679(level.fogcolor[0]); + var_01 = func_1679(level.fogcolor[1]); + var_02 = func_1679(level.fogcolor[2]); + level.fogcolor = (var_00,var_01,var_02); + level.fogmaxopacity = func_1679(level.fogmaxopacity); + level.sunfogenabled = func_1679(level.sunfogenabled); + var_00 = func_1679(level.sunfogcolor[0]); + var_01 = func_1679(level.sunfogcolor[1]); + var_02 = func_1679(level.sunfogcolor[2]); + level.sunfogcolor = (var_00,var_01,var_02); + var_03 = func_1679(level.var_1675[0]); + var_04 = func_1679(level.var_1675[1]); + var_05 = func_1679(level.var_1675[2]); + level.var_1675 = (var_03,var_04,var_05); + level.var_1676 = func_1679(level.var_1676); + level.sunfogendfadeangle = func_1679(level.sunfogendfadeangle); + level.sunfogscale = func_1679(level.sunfogscale); +} + +//Function Number: 8 +func_1679(param_00) +{ + var_01 = 0.001; + if(param_00 < var_01 && param_00 > var_01 * -1) + { + param_00 = 0; + } + + return param_00; +} + +//Function Number: 9 +updatefogfromscript() +{ + if(!getdvarint("scr_fog_disable")) + { + if(level.sunfogenabled) + { + setexpfog(level.fognearplane,level.fogexphalfplane,level.fogcolor[0],level.fogcolor[1],level.fogcolor[2],level.fogmaxopacity,0,level.sunfogcolor[0],level.sunfogcolor[1],level.sunfogcolor[2],level.var_1675,level.var_1676,level.sunfogendfadeangle,level.sunfogscale); + return; + } + + setexpfog(level.fognearplane,level.fogexphalfplane,level.fogcolor[0],level.fogcolor[1],level.fogcolor[2],level.fogmaxopacity,0); + return; + } + + setexpfog(1215752192,1215752193,0,0,0,0,0); +} + +//Function Number: 10 +artfxprintlnfog() +{ + common_scripts\utility::fileprint_launcher(""); + common_scripts\utility::fileprint_launcher("\t//* Fog section * "); + common_scripts\utility::fileprint_launcher(""); + common_scripts\utility::fileprint_launcher("\tsetDevDvar( \"scr_fog_disable\", \" + getdvarint("scr_fog_disable") + "\" + " );"); + common_scripts\utility::fileprint_launcher(""); + if(!getdvarint("scr_fog_disable")) + { + if(level.sunfogenabled) + { + common_scripts\utility::fileprint_launcher("\tsetExpFog( " + level.fognearplane + ", " + level.fogexphalfplane + ", " + level.fogcolor[0] + ", " + level.fogcolor[1] + ", " + level.fogcolor[2] + ", " + level.fogmaxopacity + ", 0, " + level.sunfogcolor[0] + ", " + level.sunfogcolor[1] + ", " + level.sunfogcolor[2] + ", (" + level.var_1675[0] + ", " + level.var_1675[1] + ", " + level.var_1675[2] + "), " + level.var_1676 + ", " + level.sunfogendfadeangle + ", " + level.sunfogscale + " );"); + return; + } + + common_scripts\utility::fileprint_launcher("\tsetExpFog( " + level.fognearplane + ", " + level.fogexphalfplane + ", " + level.fogcolor[0] + ", " + level.fogcolor[1] + ", " + level.fogcolor[2] + ", " + level.fogmaxopacity + ", 0 );"); + } +} \ No newline at end of file diff --git a/MW3/Xbox/SP/common_scripts/_createfx.gsc b/MW3/Xbox/SP/common_scripts/_createfx.gsc new file mode 100644 index 0000000..2837001 --- /dev/null +++ b/MW3/Xbox/SP/common_scripts/_createfx.gsc @@ -0,0 +1,1939 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: common_scripts\_createfx.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 83 + * Decompile Time: 1407 ms + * Timestamp: 10/27/2023 2:35:35 AM +*******************************************************************/ + +//Function Number: 1 +createeffect(param_00,param_01) +{ + var_02 = spawnstruct(); + if(!isdefined(level.createfxent)) + { + level.createfxent = []; + } + + level.createfxent[level.createfxent.size] = var_02; + var_02.v = []; + var_02.v["type"] = param_00; + var_02.v["fxid"] = param_01; + var_02.v["angles"] = (0,0,0); + var_02.v["origin"] = (0,0,0); + var_02.drawn = 1; + if(isdefined(param_01) && isdefined(level.createfxbyfxid)) + { + var_03 = level.createfxbyfxid[param_01]; + if(!isdefined(var_03)) + { + var_03 = []; + } + + level.createfxbyfxid[var_02] = var_41; + } + + return var_03; +} + +//Function Number: 2 +getloopeffectdelaydefault() +{ + return 0.5; +} + +//Function Number: 3 +getoneshoteffectdelaydefault() +{ + return -15; +} + +//Function Number: 4 +getexploderdelaydefault() +{ + return 0; +} + +//Function Number: 5 +getintervalsounddelaymindefault() +{ + return 0.75; +} + +//Function Number: 6 +getintervalsounddelaymaxdefault() +{ + return 2; +} + +//Function Number: 7 +add_effect(param_00,param_01) +{ + if(!isdefined(level._effect)) + { + level._effect = []; + } + + level._effect[param_00] = loadfx(param_01); +} + +//Function Number: 8 +createloopsound() +{ + var_00 = spawnstruct(); + if(!isdefined(level.createfxent)) + { + level.createfxent = []; + } + + level.createfxent[level.createfxent.size] = var_00; + var_00.v = []; + var_00.v["type"] = "soundfx"; + var_00.v["fxid"] = "No FX"; + var_00.v["soundalias"] = "nil"; + var_00.v["angles"] = (0,0,0); + var_00.v["origin"] = (0,0,0); + var_00.v["server_culled"] = 1; + if(getdvar("serverCulledSounds") != "1") + { + var_00.v["server_culled"] = 0; + } + + var_00.drawn = 1; + return var_00; +} + +//Function Number: 9 +createintervalsound() +{ + var_00 = createloopsound(); + var_00.v["type"] = "soundfx_interval"; + var_00.v["delay_min"] = getintervalsounddelaymindefault(); + var_00.v["delay_max"] = getintervalsounddelaymaxdefault(); + return var_00; +} + +//Function Number: 10 +createnewexploder() +{ + var_00 = spawnstruct(); + if(!isdefined(level.createfxent)) + { + level.createfxent = []; + } + + level.createfxent[level.createfxent.size] = var_00; + var_00.v = []; + var_00.v["type"] = "exploder"; + var_00.v["fxid"] = "No FX"; + var_00.v["soundalias"] = "nil"; + var_00.v["loopsound"] = "nil"; + var_00.v["angles"] = (0,0,0); + var_00.v["origin"] = (0,0,0); + var_00.v["exploder"] = 1; + var_00.v["flag"] = "nil"; + var_00.v["exploder_type"] = "normal"; + var_00.drawn = 1; + return var_00; +} + +//Function Number: 11 +createexploderex(param_00,param_01) +{ + var_02 = common_scripts\utility::createexploder(param_00); + var_02.v["exploder"] = param_01; + return var_02; +} + +//Function Number: 12 +set_origin_and_angles(param_00,param_01) +{ + self.v["origin"] = param_00; + self.v["angles"] = param_01; +} + +//Function Number: 13 +set_forward_and_up_vectors() +{ + self.v["up"] = anglestoup(self.v["angles"]); + self.v["forward"] = anglestoforward(self.v["angles"]); +} + +//Function Number: 14 +createfx_common() +{ + precacheshader("black"); + if(level.mp_createfx) + { + hack_start("painter_mp"); + } + else + { + hack_start("painter"); + } + + common_scripts\utility::flag_init("createfx_saving"); + if(!isdefined(level.createfx)) + { + level.createfx = []; + } + + level.createfx_loopcounter = 0; + var_00 = getentarray(); + foreach(var_02 in var_00) + { + if(isspawner(var_02)) + { + var_02 delete(); + } + } + + var_04 = getentarray("trigger_multiple","classname"); + for(var_05 = 0;var_05 < var_04.size;var_05++) + { + var_04[var_05] delete(); + } + + var_04 = getentarray("trigger_radius","classname"); + for(var_05 = 0;var_05 < var_04.size;var_05++) + { + var_04[var_05] delete(); + } + + level notify("createfx_common_done"); +} + +//Function Number: 15 +createfxlogic() +{ + waittillframeend; + common_scripts\_createfxmenu::menu_init(); + if(!isdefined(level._effect)) + { + level._effect = []; + } + + if(getdvar("createfx_map") == "") + { + } + else if(getdvar("createfx_map") == common_scripts\utility::get_template_level()) + { + [[ level.func_position_player ]](); + } + + level.createfxhudelements = []; + level.createfx_hudelements = 30; + var_00 = []; + var_01 = []; + var_00[0] = 0; + var_01[1] = 1; + var_01[2] = -2; + var_01[3] = 1; + var_01[4] = -2; + var_02 = newhudelem(); + var_02.location = 0; + var_02.alignx = "center"; + var_02.aligny = "middle"; + var_02.foreground = 1; + var_02.fontscale = 2; + var_02.sort = 20; + var_02.alpha = 1; + var_02.x = 320; + var_02.y = 233; + var_02 settext("."); + level.cleartextmarker = newhudelem(); + level.cleartextmarker.alpha = 0; + level.cleartextmarker settext("marker"); + for(var_03 = 0;var_03 < level.createfx_hudelements;var_03++ = -1) + { + var_04 = []; + for(var_05 = 0;var_05 < 1;var_05++ = var_41[4]) + { + var_06 = newhudelem(); + var_06.alignx = "left"; + var_06.location = 0; + var_06.foreground = 1; + var_06.fontscale = 1.4; + var_06.sort = 20 - var_05; + var_06.alpha = 1; + var_06.x = 0 + var_01[var_05]; + var_06.y = 60 + var_41[var_05] + var_03 * 15; + if(var_05 > 0) + { + var_06.color = (0,0,0); + } + + var_04[var_04.size] = var_06; + } + + level.createfxhudelements[var_03] = var_04; + } + + var_04 = []; + for(var_05 = 0;var_05 < 5;var_05++ = var_41[3]) + { + var_06 = newhudelem(); + var_06.alignx = "center"; + var_06.location = 0; + var_06.foreground = 1; + var_06.fontscale = 1.4; + var_06.sort = 20 - var_05; + var_06.alpha = 1; + var_06.x = 320 + var_01[var_05]; + var_06.y = 80 + var_41[var_05]; + if(var_05 > 0) + { + var_06.color = (0,0,0); + } + + var_04[var_04.size] = var_06; + } + + level.createfx_centerprint = var_04; + level.selectedmove_up = 0; + level.selectedmove_forward = 0; + level.selectedmove_right = 0; + level.selectedrotate_pitch = 0; + level.selectedrotate_roll = 0; + level.selectedrotate_yaw = 0; + level.selected_fx = []; + level.selected_fx_ents = []; + level.createfx_lockedlist = []; + level.createfx_lockedlist["escape"] = 1; + level.createfx_lockedlist["BUTTON_LSHLDR"] = 1; + level.createfx_lockedlist["BUTTON_RSHLDR"] = 1; + level.createfx_lockedlist["mouse1"] = 1; + level.createfx_lockedlist["ctrl"] = 1; + level.createfx_draw_enabled = 1; + level.last_displayed_ent = undefined; + level.buttonisheld = []; + var_07 = 0; + var_08 = (0,0,0); + if(!level.mp_createfx) + { + var_08 = level.player.origin; + } + + var_09 = []; + var_29["loopfx"] = "selected"; + var_29["loopfx"] = "highlighted"; + var_29["loopfx"] = "default"; + var_29["oneshotfx"] = "selected"; + var_29["oneshotfx"] = "highlighted"; + var_29["oneshotfx"] = "default"; + var_29["exploder"] = "selected"; + var_29["exploder"] = "highlighted"; + var_29["exploder"] = "default"; + var_29["rainfx"] = "selected"; + var_29["rainfx"] = "highlighted"; + var_29["rainfx"] = "default"; + var_29["soundfx"] = "selected"; + var_29["soundfx"] = "highlighted"; + var_29["soundfx"] = "default"; + var_29["soundfx_interval"] = "selected"; + var_29["soundfx_interval"] = "highlighted"; + var_29["soundfx_interval"] = "default"; + var_0A = undefined; + level.fx_rotating = 0; + common_scripts\_createfxmenu::setmenu("none"); + level.createfx_selecting = 0; + var_0B = newhudelem(); + var_0B.x = -120; + var_0B.y = 200; + var_0B.foreground = 0; + var_0B setshader("black",250,160); + var_0B.alpha = 0; + level.createfx_inputlocked = 0; + var_04 = 0; + while(var_04 < level.createfxent.size) + { + var_0C = level.createfxent[var_04]; + var_0C post_entity_creation_function(); + var_04++ = (0.2,0.9,0.2); + } + + thread draw_distance(); + var_0D = undefined; + thread createfx_autosave(); + for(;;) + { + var_0E = 0; + var_0F = anglestoright(level.player getplayerangles()); + var_10 = anglestoforward(level.player getplayerangles()); + var_11 = anglestoup(level.player getplayerangles()); + var_12 = 0.85; + var_13 = var_10 * 750; + level.createfxcursor = bullettrace(level.player geteye(),level.player geteye() + var_13,0,undefined); + var_14 = undefined; + level.buttonclick = []; + level.button_is_kb = []; + process_button_held_and_clicked(); + var_15 = button_is_held("ctrl","BUTTON_LSHLDR"); + var_16 = button_is_clicked("mouse1","BUTTON_A"); + var_17 = button_is_held("mouse1","BUTTON_A"); + common_scripts\_createfxmenu::create_fx_menu(); + if(button_is_clicked("shift","BUTTON_X")) + { + var_08 = !var_08; + } + + if(button_is_clicked("F5")) + { + } + + if(getdvarint("scr_createfx_dump")) + { + generate_fx_log(); + } + + if(button_is_clicked("F2")) + { + toggle_createfx_drawing(); + } + + if(button_is_clicked("ins")) + { + insert_effect(); + } + + if(button_is_clicked("del")) + { + delete_pressed(); + } + + if(button_is_clicked("end","l")) + { + drop_selection_to_ground(); + var_0E = 1; + } + + if(button_is_clicked("escape")) + { + clear_settable_fx(); + } + + if(button_is_clicked("space")) + { + set_off_exploders(); + } + + if(button_is_clicked("g")) + { + select_all_exploders_of_currently_selected("exploder"); + select_all_exploders_of_currently_selected("flag"); + } + + if(button_is_clicked("tab","BUTTON_RSHLDR")) + { + move_selection_to_cursor(); + var_0E = 1; + } + + if(button_is_held("h","F1")) + { + show_help(); + wait 0.05; + continue; + } + + if(button_is_clicked("BUTTON_LSTICK")) + { + copy_ents(); + } + + if(button_is_clicked("BUTTON_RSTICK")) + { + paste_ents(); + } + + if(var_15) + { + if(button_is_clicked("c")) + { + copy_ents(); + } + + if(button_is_clicked("v")) + { + paste_ents(); + } + } + + if(isdefined(level.selected_fx_option_index)) + { + common_scripts\_createfxmenu::menu_fx_option_set(); + } + + var_04 = 0; + while(var_04 < level.createfxent.size) + { + var_0C = level.createfxent[var_04]; + var_18 = vectornormalize(var_0C.v["origin"] - level.player.origin + (0,0,55)); + var_19 = vectordot(var_10,var_18); + if(var_19 < var_12) + { + continue; + } + + var_12 = var_19; + var_14 = var_0C; + var_04++ = (0.5,1,0.75); + } + + level.fx_highlightedent = var_14; + if(isdefined(var_14)) + { + if(isdefined(var_0A)) + { + if(var_0A != var_14) + { + if(!ent_is_selected(var_0A)) + { + var_0A thread entity_highlight_disable(); + } + + if(!ent_is_selected(var_14)) + { + var_14 thread entity_highlight_enable(); + } + } + } + else if(!ent_is_selected(var_14)) + { + var_14 thread entity_highlight_enable(); + } + } + + manipulate_createfx_ents(var_14,var_16,var_17,var_15,var_29,var_0F); + if(var_08 && level.selected_fx_ents.size > 0) + { + thread [[ level.func_process_fx_rotater ]](); + if(button_is_clicked("enter","p")) + { + reset_axis_of_selected_ents(); + } + + if(button_is_clicked("v")) + { + copy_angles_of_selected_ents(); + } + + var_04 = 0; + while(var_04 < level.selected_fx_ents.size) + { + level.selected_fx_ents[var_04] draw_axis(); + var_04++ = (1,1,0.2); + } + + if(level.selectedrotate_pitch != 0 || level.selectedrotate_yaw != 0 || level.selectedrotate_roll != 0) + { + var_0E = 1; + } + + wait 0.05; + } + else + { + var_1A = get_selected_move_vector(); + var_04 = 0; + while(var_04 < level.selected_fx_ents.size) + { + var_0C = level.selected_fx_ents[var_04]; + if(isdefined(var_0C.model)) + { + continue; + } + + var_0C.v["origin"] = var_0C.v["origin"] + var_1A; + var_04++ = (0.2,0.9,0.2); + } + + if(distance((0,0,0),var_1A) > 0) + { + var_0E = 1; + } + + wait 0.05; + } + + if(var_0E) + { + update_selected_entities(); + } + + if(!level.mp_createfx) + { + var_09 = [[ level.func_position_player_get ]](var_09); + } + + var_0A = var_14; + if(last_selected_entity_has_changed(var_0D)) + { + level.effect_list_offset = 0; + clear_settable_fx(); + common_scripts\_createfxmenu::setmenu("none"); + } + + if(level.selected_fx_ents.size) + { + var_0D = level.selected_fx_ents[level.selected_fx_ents.size - 1]; + continue; + } + + var_0D = undefined; + } +} + +//Function Number: 16 +copy_angles_of_selected_ents() +{ + level notify("new_ent_selection"); + for(var_00 = 0;var_00 < level.selected_fx_ents.size;var_00++) + { + var_01 = level.selected_fx_ents[var_00]; + var_01.v["angles"] = level.selected_fx_ents[level.selected_fx_ents.size - 1].v["angles"]; + var_01 set_forward_and_up_vectors(); + } + + update_selected_entities(); +} + +//Function Number: 17 +reset_axis_of_selected_ents() +{ + level notify("new_ent_selection"); + for(var_00 = 0;var_00 < level.selected_fx_ents.size;var_00++) + { + var_01 = level.selected_fx_ents[var_00]; + var_01.v["angles"] = (0,0,0); + var_01 set_forward_and_up_vectors(); + } + + update_selected_entities(); +} + +//Function Number: 18 +last_selected_entity_has_changed(param_00) +{ + if(isdefined(param_00)) + { + if(!common_scripts\_createfxmenu::entities_are_selected()) + { + return 1; + } + } + else + { + return common_scripts\_createfxmenu::entities_are_selected(); + } + + return param_00 != level.selected_fx_ents[level.selected_fx_ents.size - 1]; +} + +//Function Number: 19 +createfx_showorigin(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,param_0D,param_0E,param_0F,param_10,param_11,param_12) +{ +} + +//Function Number: 20 +drop_selection_to_ground() +{ + for(var_00 = 0;var_00 < level.selected_fx_ents.size;var_00++) + { + var_01 = level.selected_fx_ents[var_00]; + var_02 = bullettrace(var_01.v["origin"],var_01.v["origin"] + (0,0,-2048),0,undefined); + var_01.v["origin"] = var_02["position"]; + } +} + +//Function Number: 21 +set_off_exploders() +{ + level notify("createfx_exploder_reset"); + var_00 = []; + for(var_01 = 0;var_01 < level.selected_fx_ents.size;var_01++) + { + var_02 = level.selected_fx_ents[var_01]; + if(isdefined(var_02.v["exploder"])) + { + var_00[var_02.v["exploder"]] = 1; + } + } + + var_03 = getarraykeys(var_00); + for(var_01 = 0;var_01 < var_03.size;var_01++) + { + common_scripts\utility::exploder(var_03[var_01]); + } +} + +//Function Number: 22 +draw_distance() +{ + var_00 = 0; + if(getdvarint("createfx_drawdist") == 0) + { + } + + for(;;) + { + var_01 = getdvarint("createfx_drawdist"); + for(var_02 = 0;var_02 < level.createfxent.size;var_02++) + { + var_03 = level.createfxent[var_02]; + var_03.drawn = distance(level.player.origin,var_03.v["origin"]) <= var_01; + var_00++; + if(var_00 > 100) + { + var_00 = 0; + wait 0.05; + } + } + + if(level.createfxent.size == 0) + { + wait 0.05; + } + } +} + +//Function Number: 23 +createfx_autosave() +{ + for(;;) + { + wait 300; + common_scripts\utility::flag_waitopen("createfx_saving"); + generate_fx_log(1); + } +} + +//Function Number: 24 +rotate_over_time(param_00,param_01) +{ + level endon("new_ent_selection"); + var_02 = 0.1; + for(var_03 = 0;var_03 < var_02 * 20;var_03++) + { + if(level.selectedrotate_pitch != 0) + { + param_00 addpitch(level.selectedrotate_pitch); + } + else if(level.selectedrotate_yaw != 0) + { + param_00 addyaw(level.selectedrotate_yaw); + } + else + { + param_00 addroll(level.selectedrotate_roll); + } + + wait 0.05; + param_00 draw_axis(); + for(var_04 = 0;var_04 < level.selected_fx_ents.size;var_04++) + { + var_05 = level.selected_fx_ents[var_04]; + if(isdefined(var_05.model)) + { + continue; + } + + var_05.v["origin"] = param_01[var_04].origin; + var_05.v["angles"] = param_01[var_04].angles; + } + } +} + +//Function Number: 25 +delete_pressed() +{ + if(level.createfx_inputlocked) + { + remove_selected_option(); + return; + } + + delete_selection(); +} + +//Function Number: 26 +remove_selected_option() +{ + if(!isdefined(level.selected_fx_option_index)) + { + return; + } + + var_00 = level.createfx_options[level.selected_fx_option_index]["name"]; + for(var_01 = 0;var_01 < level.createfxent.size;var_01++) + { + var_02 = level.createfxent[var_01]; + if(!ent_is_selected(var_02)) + { + continue; + } + + var_02 remove_option(var_00); + } + + update_selected_entities(); + clear_settable_fx(); +} + +//Function Number: 27 +remove_option(param_00) +{ + self.v[param_00] = undefined; +} + +//Function Number: 28 +delete_selection() +{ + var_00 = []; + for(var_01 = 0;var_01 < level.createfxent.size;var_01++) + { + var_02 = level.createfxent[var_01]; + if(ent_is_selected(var_02)) + { + if(isdefined(var_02.looper)) + { + var_02.looper delete(); + } + + var_02 notify("stop_loop"); + continue; + } + + var_00[var_00.size] = var_02; + } + + level.createfxent = var_00; + level.selected_fx = []; + level.selected_fx_ents = []; + clear_fx_hudelements(); +} + +//Function Number: 29 +move_selection_to_cursor() +{ + var_00 = level.createfxcursor["position"]; + if(level.selected_fx_ents.size <= 0) + { + return; + } + + var_01 = get_center_of_array(level.selected_fx_ents); + var_02 = var_01 - var_00; + for(var_03 = 0;var_03 < level.selected_fx_ents.size;var_03++) + { + var_04 = level.selected_fx_ents[var_03]; + if(isdefined(var_04.model)) + { + continue; + } + + var_04.v["origin"] = var_04.v["origin"] - var_02; + } +} + +//Function Number: 30 +insert_effect() +{ + common_scripts\_createfxmenu::setmenu("creation"); + level.effect_list_offset = 0; + clear_fx_hudelements(); + set_fx_hudelement("Pick effect type to create:"); + set_fx_hudelement("1. One Shot fx"); + set_fx_hudelement("2. Looping fx"); + set_fx_hudelement("3. Looping sound"); + set_fx_hudelement("4. Exploder"); + set_fx_hudelement("5. One Shot Sound"); + set_fx_hudelement("(c) Cancel"); + set_fx_hudelement("(x) Exit"); +} + +//Function Number: 31 +show_help() +{ + clear_fx_hudelements(); + set_fx_hudelement("Help:"); + set_fx_hudelement("Insert Insert entity"); + set_fx_hudelement("L Drop selected entities to the ground"); + set_fx_hudelement("A Add option to the selected entities"); + set_fx_hudelement("P Reset the rotation of the selected entities"); + set_fx_hudelement("V Copy the angles from the most recently selected fx onto all selected fx."); + set_fx_hudelement("Delete Kill the selected entities"); + set_fx_hudelement("ESCAPE Cancel out of option-modify-mode, must have console open"); + set_fx_hudelement("Ctrl-C Copy"); + set_fx_hudelement("Ctrl-V Paste"); + set_fx_hudelement("F2 Toggle createfx dot and text drawing"); + set_fx_hudelement("F5 SAVES your work"); + set_fx_hudelement("Dpad Move selected entitise on X/Y or rotate pitch/yaw"); + set_fx_hudelement("A button Toggle the selection of the current entity"); + set_fx_hudelement("X button Toggle entity rotation mode"); + set_fx_hudelement("Y button Move selected entites up or rotate roll"); + set_fx_hudelement("B button Move selected entites down or rotate roll"); + set_fx_hudelement("R Shoulder Move selected entities to the cursor"); + set_fx_hudelement("L Shoulder Hold to select multiple entites"); + set_fx_hudelement("L JoyClick Copy"); + set_fx_hudelement("R JoyClick Paste"); + set_fx_hudelement("N UFO"); + set_fx_hudelement("T Toggle Timescale FAST"); + set_fx_hudelement("Y Toggle Timescale SLOW"); + set_fx_hudelement("[ Toggle FX Visibility"); + set_fx_hudelement("] Toggle ShowTris"); + set_fx_hudelement("F11 Toggle FX Profile"); +} + +//Function Number: 32 +select_last_entity() +{ + select_entity(level.createfxent.size - 1,level.createfxent[level.createfxent.size - 1]); +} + +//Function Number: 33 +select_all_exploders_of_currently_selected(param_00) +{ + var_01 = []; + foreach(var_03 in level.selected_fx_ents) + { + if(!isdefined(var_03.v[param_00])) + { + continue; + } + + var_04 = var_03.v[param_00]; + var_01[var_04] = 1; + } + + foreach(var_04, var_07 in var_01) + { + foreach(var_09, var_03 in level.createfxent) + { + if(index_is_selected(var_09)) + { + continue; + } + + if(!isdefined(var_03.v[param_00])) + { + continue; + } + + if(var_03.v[param_00] != var_04) + { + continue; + } + + select_entity(var_09,var_03); + } + } + + update_selected_entities(); +} + +//Function Number: 34 +copy_ents() +{ + if(level.selected_fx_ents.size <= 0) + { + return; + } + + var_00 = []; + for(var_01 = 0;var_01 < level.selected_fx_ents.size;var_01++) + { + var_02 = level.selected_fx_ents[var_01]; + var_03 = spawnstruct(); + var_03.v = var_02.v; + var_03 post_entity_creation_function(); + var_00[var_00.size] = var_03; + } + + level.stored_ents = var_00; +} + +//Function Number: 35 +post_entity_creation_function() +{ + self.textalpha = 0; + self.drawn = 1; +} + +//Function Number: 36 +paste_ents() +{ + if(!isdefined(level.stored_ents)) + { + return; + } + + clear_entity_selection(); + for(var_00 = 0;var_00 < level.stored_ents.size;var_00++) + { + add_and_select_entity(level.stored_ents[var_00]); + } + + move_selection_to_cursor(); + update_selected_entities(); + level.stored_ents = []; + copy_ents(); +} + +//Function Number: 37 +add_and_select_entity(param_00) +{ + level.createfxent[level.createfxent.size] = param_00; + select_last_entity(); +} + +//Function Number: 38 +get_center_of_array(param_00) +{ + var_01 = (0,0,0); + for(var_02 = 0;var_02 < param_00.size;var_02++) + { + var_01 = (var_01[0] + param_00[var_02].v["origin"][0],var_01[1] + param_00[var_02].v["origin"][1],var_01[2] + param_00[var_02].v["origin"][2]); + } + + return (var_01[0] / param_00.size,var_01[1] / param_00.size,var_01[2] / param_00.size); +} + +//Function Number: 39 +ent_draw_axis() +{ + self endon("death"); + for(;;) + { + draw_axis(); + wait 0.05; + } +} + +//Function Number: 40 +rotation_is_occuring() +{ + if(level.selectedrotate_roll != 0) + { + return 1; + } + + if(level.selectedrotate_pitch != 0) + { + return 1; + } + + return level.selectedrotate_yaw != 0; +} + +//Function Number: 41 +print_fx_options(param_00,param_01,param_02,param_03) +{ + for(var_04 = 0;var_04 < level.createfx_options.size;var_04++) + { + var_05 = level.createfx_options[var_04]; + var_06 = var_05["name"]; + if(!isdefined(param_00.v[var_06])) + { + continue; + } + + if(!common_scripts\_createfxmenu::mask(var_05["mask"],param_00.v["type"])) + { + continue; + } + + if(!level.mp_createfx) + { + if(common_scripts\_createfxmenu::mask("fx",param_00.v["type"]) && var_06 == "fxid") + { + continue; + } + + if(param_00.v["type"] == "exploder" && var_06 == "exploder") + { + continue; + } + + var_07 = param_00.v["type"] + "/" + var_06; + if(isdefined(level.createfxdefaults[var_07]) && level.createfxdefaults[var_07] == param_00.v[var_06]) + { + continue; + } + } + + if(var_05["type"] == "string") + { + var_08 = param_00.v[var_06] + ""; + if(var_08 == "nil") + { + continue; + } + + cfxprintln(param_02,param_01 + "ent.v[ \" + var_06 + "\" ] = \" + param_00.v[var_06] + "\";"); + continue; + } + + cfxprintln(param_02,param_01 + "ent.v[ \" + var_06 + "\" ] = " + param_00.v[var_06] + ";"); + } +} + +//Function Number: 42 +entity_highlight_disable() +{ + self notify("highlight change"); + self endon("highlight change"); + for(;;) + { + self.textalpha = self.textalpha * 0.85; + self.textalpha = self.textalpha - 0.05; + if(self.textalpha < 0) + { + break; + } + + wait 0.05; + } + + self.textalpha = 0; +} + +//Function Number: 43 +entity_highlight_enable() +{ + self notify("highlight change"); + self endon("highlight change"); + for(;;) + { + self.textalpha = self.textalpha + 0.05; + self.textalpha = self.textalpha * 1.25; + if(self.textalpha > 1) + { + break; + } + + wait 0.05; + } + + self.textalpha = 1; +} + +//Function Number: 44 +toggle_createfx_drawing() +{ + level.createfx_draw_enabled = !level.createfx_draw_enabled; +} + +//Function Number: 45 +manipulate_createfx_ents(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if(!level.createfx_draw_enabled) + { + return; + } + + for(var_06 = 0;var_06 < level.createfxent.size;var_06++) + { + var_07 = level.createfxent[var_06]; + if(!var_07.drawn) + { + continue; + } + + var_08 = getdvarfloat("createfx_scaleid"); + if(isdefined(param_00) && var_07 == param_00) + { + if(!common_scripts\_createfxmenu::entities_are_selected()) + { + common_scripts\_createfxmenu::display_fx_info(var_07); + } + + if(param_01) + { + var_09 = index_is_selected(var_06); + level.createfx_selecting = !var_09; + if(!param_03) + { + var_0A = level.selected_fx_ents.size; + clear_entity_selection(); + if(var_09 && var_0A == 1) + { + select_entity(var_06,var_07); + } + } + + toggle_entity_selection(var_06,var_07); + } + else if(param_02) + { + if(param_03) + { + if(level.createfx_selecting) + { + select_entity(var_06,var_07); + } + + if(!level.createfx_selecting) + { + deselect_entity(var_06,var_07); + } + } + } + + var_0B = "highlighted"; + if(index_is_selected(var_06)) + { + var_0B = "selected"; + } + + if(var_07.textalpha > 0) + { + var_0C = param_05 * var_07.v["fxid"].size * -2.93 * var_08; + } + + continue; + } + + var_0B = "default"; + if(index_is_selected(var_06)) + { + var_0B = "selected"; + } + + if(var_07.textalpha > 0) + { + var_0C = param_05 * var_07.v["fxid"].size * -2.93; + } + } +} + +//Function Number: 46 +clear_settable_fx() +{ + level.createfx_inputlocked = 0; + level.selected_fx_option_index = undefined; + reset_fx_hud_colors(); +} + +//Function Number: 47 +reset_fx_hud_colors() +{ + for(var_00 = 0;var_00 < level.createfx_hudelements;var_00++) + { + level.createfxhudelements[var_00][0].color = (1,1,1); + } +} + +//Function Number: 48 +button_is_held(param_00,param_01) +{ + if(isdefined(param_01)) + { + if(isdefined(level.buttonisheld[param_01])) + { + return 1; + } + } + + return isdefined(level.buttonisheld[param_00]); +} + +//Function Number: 49 +button_is_clicked(param_00,param_01) +{ + if(isdefined(param_01)) + { + if(isdefined(level.buttonclick[param_01])) + { + return 1; + } + } + + return isdefined(level.buttonclick[param_00]); +} + +//Function Number: 50 +toggle_entity_selection(param_00,param_01) +{ + if(isdefined(level.selected_fx[param_00])) + { + deselect_entity(param_00,param_01); + return; + } + + select_entity(param_00,param_01); +} + +//Function Number: 51 +select_entity(param_00,param_01) +{ + if(isdefined(level.selected_fx[param_00])) + { + return; + } + + clear_settable_fx(); + level notify("new_ent_selection"); + param_01 thread entity_highlight_enable(); + level.selected_fx[param_00] = 1; + level.selected_fx_ents[level.selected_fx_ents.size] = param_01; +} + +//Function Number: 52 +ent_is_highlighted(param_00) +{ + if(!isdefined(level.fx_highlightedent)) + { + return 0; + } + + return param_00 == level.fx_highlightedent; +} + +//Function Number: 53 +deselect_entity(param_00,param_01) +{ + if(!isdefined(level.selected_fx[param_00])) + { + return; + } + + clear_settable_fx(); + level notify("new_ent_selection"); + level.selected_fx[param_00] = undefined; + if(!ent_is_highlighted(param_01)) + { + param_01 thread entity_highlight_disable(); + } + + var_02 = []; + for(var_03 = 0;var_03 < level.selected_fx_ents.size;var_03++) + { + if(level.selected_fx_ents[var_03] != param_01) + { + var_02[var_02.size] = level.selected_fx_ents[var_03]; + } + } + + level.selected_fx_ents = var_02; +} + +//Function Number: 54 +index_is_selected(param_00) +{ + return isdefined(level.selected_fx[param_00]); +} + +//Function Number: 55 +ent_is_selected(param_00) +{ + for(var_01 = 0;var_01 < level.selected_fx_ents.size;var_01++) + { + if(level.selected_fx_ents[var_01] == param_00) + { + return 1; + } + } + + return 0; +} + +//Function Number: 56 +clear_entity_selection() +{ + for(var_00 = 0;var_00 < level.selected_fx_ents.size;var_00++) + { + if(!ent_is_highlighted(level.selected_fx_ents[var_00])) + { + level.selected_fx_ents[var_00] thread entity_highlight_disable(); + } + } + + level.selected_fx = []; + level.selected_fx_ents = []; +} + +//Function Number: 57 +draw_axis() +{ + var_00 = 25 * getdvarfloat("createfx_scaleid"); + var_01 = anglestoforward(self.v["angles"]); + var_01 = var_01 * var_00; + var_02 = anglestoright(self.v["angles"]); + var_02 = var_02 * var_00; + var_03 = anglestoup(self.v["angles"]); + var_03 = var_03 * var_00; +} + +//Function Number: 58 +clear_fx_hudelements() +{ + level.cleartextmarker clearalltextafterhudelem(); + for(var_00 = 0;var_00 < level.createfx_hudelements;var_00++) + { + for(var_01 = 0;var_01 < 1;var_01++) + { + level.createfxhudelements[var_00][var_01] settext(""); + } + } + + level.fxhudelements = 0; +} + +//Function Number: 59 +set_fx_hudelement(param_00) +{ + for(var_01 = 0;var_01 < 1;var_01++) + { + level.createfxhudelements[level.fxhudelements][var_01] settext(param_00); + } + + level.fxhudelements++; +} + +//Function Number: 60 +createfx_centerprint(param_00) +{ + thread createfx_centerprint_thread(param_00); +} + +//Function Number: 61 +createfx_centerprint_thread(param_00) +{ + level notify("new_createfx_centerprint"); + level endon("new_createfx_centerprint"); + for(var_01 = 0;var_01 < 5;var_01++) + { + level.createfx_centerprint[var_01] settext(param_00); + } + + wait 4.5; + for(var_01 = 0;var_01 < 5;var_01++) + { + level.createfx_centerprint[var_01] settext(""); + } +} + +//Function Number: 62 +buttondown(param_00,param_01) +{ + return buttonpressed_internal(param_00) || buttonpressed_internal(param_01); +} + +//Function Number: 63 +buttonpressed_internal(param_00) +{ + if(!isdefined(param_00)) + { + return 0; + } + + if(kb_locked(param_00)) + { + return 0; + } + + return level.player buttonpressed(param_00); +} + +//Function Number: 64 +get_selected_move_vector() +{ + var_00 = level.player getplayerangles()[1]; + var_01 = (0,var_00,0); + var_02 = anglestoright(var_01); + var_03 = anglestoforward(var_01); + var_04 = anglestoup(var_01); + var_05 = 0; + var_06 = 1; + if(buttondown("kp_uparrow","DPAD_UP")) + { + if(level.selectedmove_forward < 0) + { + level.selectedmove_forward = 0; + } + + level.selectedmove_forward = level.selectedmove_forward + var_06; + } + else if(buttondown("kp_downarrow","DPAD_DOWN")) + { + if(level.selectedmove_forward > 0) + { + level.selectedmove_forward = 0; + } + + level.selectedmove_forward = level.selectedmove_forward - var_06; + } + else + { + level.selectedmove_forward = 0; + } + + if(buttondown("kp_rightarrow","DPAD_RIGHT")) + { + if(level.selectedmove_right < 0) + { + level.selectedmove_right = 0; + } + + level.selectedmove_right = level.selectedmove_right + var_06; + } + else if(buttondown("kp_leftarrow","DPAD_LEFT")) + { + if(level.selectedmove_right > 0) + { + level.selectedmove_right = 0; + } + + level.selectedmove_right = level.selectedmove_right - var_06; + } + else + { + level.selectedmove_right = 0; + } + + if(buttondown("BUTTON_Y")) + { + if(level.selectedmove_up < 0) + { + level.selectedmove_up = 0; + } + + level.selectedmove_up = level.selectedmove_up + var_06; + } + else if(buttondown("BUTTON_B")) + { + if(level.selectedmove_up > 0) + { + level.selectedmove_up = 0; + } + + level.selectedmove_up = level.selectedmove_up - var_06; + } + else + { + level.selectedmove_up = 0; + } + + var_07 = (0,0,0); + var_07 = var_07 + var_03 * level.selectedmove_forward; + var_07 = var_07 + var_02 * level.selectedmove_right; + var_07 = var_07 + var_04 * level.selectedmove_up; + return var_07; +} + +//Function Number: 65 +process_button_held_and_clicked() +{ + add_button("mouse1"); + add_kb_button("shift"); + add_kb_button("ctrl"); + add_button("BUTTON_RSHLDR"); + add_button("BUTTON_LSHLDR"); + add_button("BUTTON_RSTICK"); + add_button("BUTTON_LSTICK"); + add_button("BUTTON_A"); + add_button("BUTTON_B"); + add_button("BUTTON_X"); + add_button("BUTTON_Y"); + add_button("DPAD_UP"); + add_button("DPAD_LEFT"); + add_button("DPAD_RIGHT"); + add_button("DPAD_DOWN"); + add_kb_button("escape"); + add_kb_button("a"); + add_kb_button("g"); + add_button("F1"); + add_button("F5"); + add_button("F2"); + add_kb_button("c"); + add_kb_button("h"); + add_kb_button("i"); + add_kb_button("k"); + add_kb_button("l"); + add_kb_button("m"); + add_kb_button("p"); + add_kb_button("x"); + add_button("del"); + add_kb_button("end"); + add_kb_button("tab"); + add_kb_button("ins"); + add_kb_button("add"); + add_kb_button("space"); + add_kb_button("enter"); + add_kb_button("v"); + add_kb_button("1"); + add_kb_button("2"); + add_kb_button("3"); + add_kb_button("4"); + add_kb_button("5"); + add_kb_button("6"); + add_kb_button("7"); + add_kb_button("8"); + add_kb_button("9"); + add_kb_button("0"); +} + +//Function Number: 66 +locked(param_00) +{ + if(isdefined(level.createfx_lockedlist[param_00])) + { + return 0; + } + + return kb_locked(param_00); +} + +//Function Number: 67 +kb_locked(param_00) +{ + return level.createfx_inputlocked && isdefined(level.button_is_kb[param_00]); +} + +//Function Number: 68 +add_button(param_00) +{ + if(locked(param_00)) + { + return; + } + + if(!isdefined(level.buttonisheld[param_00])) + { + if(level.player buttonpressed(param_00)) + { + level.buttonisheld[param_00] = 1; + level.buttonclick[param_00] = 1; + return; + } + + return; + } + + if(!level.player buttonpressed(param_00)) + { + level.buttonisheld[param_00] = undefined; + } +} + +//Function Number: 69 +add_kb_button(param_00) +{ + level.button_is_kb[param_00] = 1; + add_button(param_00); +} + +//Function Number: 70 +set_anglemod_move_vector() +{ + var_00 = 2; + if(buttondown("kp_uparrow","DPAD_UP")) + { + if(level.selectedrotate_pitch < 0) + { + level.selectedrotate_pitch = 0; + } + + level.selectedrotate_pitch = level.selectedrotate_pitch + var_00; + } + else if(buttondown("kp_downarrow","DPAD_DOWN")) + { + if(level.selectedrotate_pitch > 0) + { + level.selectedrotate_pitch = 0; + } + + level.selectedrotate_pitch = level.selectedrotate_pitch - var_00; + } + else + { + level.selectedrotate_pitch = 0; + } + + if(buttondown("kp_leftarrow","DPAD_LEFT")) + { + if(level.selectedrotate_yaw < 0) + { + level.selectedrotate_yaw = 0; + } + + level.selectedrotate_yaw = level.selectedrotate_yaw + var_00; + } + else if(buttondown("kp_rightarrow","DPAD_RIGHT")) + { + if(level.selectedrotate_yaw > 0) + { + level.selectedrotate_yaw = 0; + } + + level.selectedrotate_yaw = level.selectedrotate_yaw - var_00; + } + else + { + level.selectedrotate_yaw = 0; + } + + if(buttondown("BUTTON_Y")) + { + if(level.selectedrotate_roll < 0) + { + level.selectedrotate_roll = 0; + } + + level.selectedrotate_roll = level.selectedrotate_roll + var_00; + return; + } + + if(buttondown("BUTTON_B")) + { + if(level.selectedrotate_roll > 0) + { + level.selectedrotate_roll = 0; + } + + level.selectedrotate_roll = level.selectedrotate_roll - var_00; + return; + } + + level.selectedrotate_roll = 0; +} + +//Function Number: 71 +cfxprintlnstart() +{ + common_scripts\utility::fileprint_launcher_start_file(); +} + +//Function Number: 72 +cfxprintln(param_00,param_01) +{ + common_scripts\utility::fileprint_launcher(param_01); + if(param_00 == -1) + { + } +} + +//Function Number: 73 +cfxprintlnend(param_00,param_01,param_02) +{ + var_03 = 1; + if(param_02 != "" || param_01) + { + var_03 = 0; + } + + var_04 = common_scripts\utility::get_template_level() + param_02 + "_fx.gsc"; + if(param_01) + { + var_04 = "backup.gsc"; + } + + common_scripts\utility::fileprint_launcher_end_file("/share/raw/maps/createfx/" + var_04,var_03); +} + +//Function Number: 74 +update_selected_entities() +{ + for(var_00 = 0;var_00 < level.selected_fx_ents.size;var_00++) + { + var_01 = level.selected_fx_ents[var_00]; + var_01 [[ level.func_updatefx ]](); + } +} + +//Function Number: 75 +hack_start(param_00) +{ + if(!isdefined(param_00)) + { + param_00 = "painter_mp"; + } + + precachemenu(param_00); + wait 0.05; + if(param_00 == "painter_mp") + { + return; + } + + level.player openpopupmenu(param_00); + level.player closepopupmenu(param_00); +} + +//Function Number: 76 +get_player() +{ + return getentarray("player","classname")[0]; +} + +//Function Number: 77 +createfx_orgranize_array() +{ + var_00 = []; + var_01 = []; + foreach(var_04, var_03 in var_41) + { + var_01[var_04] = []; + } + + foreach(var_06 in level.createfxent) + { + var_07 = 0; + foreach(var_04, var_09 in var_41) + { + if(var_06.v["type"] != var_09) + { + continue; + } + + var_07 = 1; + var_01[var_04][var_01[var_04].size] = var_06; + break; + } + } + + var_0B = []; + for(var_0C = 0;var_0C < var_41.size;var_0C++ = var_41[4]) + { + foreach(var_06 in var_01[var_0C]) + { + var_0B[var_0B.size] = var_06; + } + } + + level.createfxent = var_0B; +} + +//Function Number: 78 +stop_fx_looper() +{ + if(isdefined(self.looper)) + { + self.looper delete(); + } + + stop_loopsound(); +} + +//Function Number: 79 +stop_loopsound() +{ + self notify("stop_loop"); +} + +//Function Number: 80 +func_get_level_fx() +{ + if(!isdefined(level._effect_keys)) + { + var_00 = getarraykeys(level._effect); + } + else + { + var_00 = getarraykeys(level._effect); + if(var_00.size == level._effect_keys.size) + { + return level._effect_keys; + } + } + + var_00 = common_scripts\utility::alphabetize(var_00); + level._effect_keys = var_00; + return var_00; +} + +//Function Number: 81 +restart_fx_looper() +{ + stop_fx_looper(); + set_forward_and_up_vectors(); + if(self.v["type"] == "loopfx") + { + common_scripts\_fx::create_looper(); + } + + if(self.v["type"] == "oneshotfx") + { + common_scripts\_fx::create_triggerfx(); + } + + if(self.v["type"] == "soundfx") + { + common_scripts\_fx::create_loopsound(); + } + + if(self.v["type"] == "soundfx_interval") + { + common_scripts\_fx::create_interval_sound(); + } +} + +//Function Number: 82 +process_fx_rotater() +{ + if(level.fx_rotating) + { + return; + } + + set_anglemod_move_vector(); + if(!rotation_is_occuring()) + { + return; + } + + level.fx_rotating = 1; + if(level.selected_fx_ents.size > 1) + { + var_00 = get_center_of_array(level.selected_fx_ents); + var_01 = spawn("script_origin",var_00); + var_01.v["angles"] = level.selected_fx_ents[0].v["angles"]; + var_01.v["origin"] = var_00; + var_02 = []; + for(var_03 = 0;var_03 < level.selected_fx_ents.size;var_03++) + { + var_02[var_03] = spawn("script_origin",level.selected_fx_ents[var_03].v["origin"]); + var_02[var_03].angles = level.selected_fx_ents[var_03].v["angles"]; + var_02[var_03] linkto(var_01); + } + + rotate_over_time(var_01,var_02); + var_01 delete(); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + var_02[var_03] delete(); + } + } + else if(level.selected_fx_ents.size == 1) + { + var_04 = level.selected_fx_ents[0]; + var_02 = spawn("script_origin",(0,0,0)); + var_02.angles = var_04.v["angles"]; + if(level.selectedrotate_pitch != 0) + { + var_02 addpitch(level.selectedrotate_pitch); + } + else if(level.selectedrotate_yaw != 0) + { + var_02 addyaw(level.selectedrotate_yaw); + } + else + { + var_02 addroll(level.selectedrotate_roll); + } + + var_04.v["angles"] = var_02.angles; + var_02 delete(); + wait 0.05; + } + + level.fx_rotating = 0; +} + +//Function Number: 83 +generate_fx_log(param_00) +{ +} \ No newline at end of file diff --git a/MW3/Xbox/SP/common_scripts/_createfxmenu.gsc b/MW3/Xbox/SP/common_scripts/_createfxmenu.gsc new file mode 100644 index 0000000..7595a1d --- /dev/null +++ b/MW3/Xbox/SP/common_scripts/_createfxmenu.gsc @@ -0,0 +1,634 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: common_scripts\_createfxmenu.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 25 + * Decompile Time: 443 ms + * Timestamp: 10/27/2023 2:35:52 AM +*******************************************************************/ + +//Function Number: 1 +menu(param_00) +{ + return level.create_fx_menu == param_00; +} + +//Function Number: 2 +setmenu(param_00) +{ + level.create_fx_menu = param_00; +} + +//Function Number: 3 +create_fx_menu() +{ + if(common_scripts\_createfx::button_is_clicked("escape","x")) + { + _exit_menu(); + return; + } + + if(menu("creation")) + { + if(common_scripts\_createfx::button_is_clicked("1")) + { + setmenu("create_oneshot"); + draw_effects_list(); + return; + } + + if(common_scripts\_createfx::button_is_clicked("2")) + { + setmenu("create_loopfx"); + draw_effects_list(); + return; + } + + if(common_scripts\_createfx::button_is_clicked("3")) + { + setmenu("create_loopsound"); + var_00 = common_scripts\_createfx::createloopsound(); + finish_creating_entity(var_00); + return; + } + + if(common_scripts\_createfx::button_is_clicked("4")) + { + setmenu("create_exploder"); + var_00 = common_scripts\_createfx::createnewexploder(); + finish_creating_entity(var_00); + return; + } + + if(common_scripts\_createfx::button_is_clicked("5")) + { + setmenu("create_interval_sound"); + var_00 = common_scripts\_createfx::createintervalsound(); + finish_creating_entity(var_00); + return; + } + + return; + } + + if(menu("create_oneshot") || menu("create_loopfx") || menu("change_fxid")) + { + if(common_scripts\_createfx::button_is_clicked("m")) + { + increment_list_offset(); + draw_effects_list(); + } + + menu_fx_creation(); + return; + } + + if(menu("none")) + { + if(common_scripts\_createfx::button_is_clicked("m")) + { + increment_list_offset(); + } + + menu_change_selected_fx(); + if(entities_are_selected()) + { + var_01 = get_last_selected_entity(); + if(!isdefined(level.last_displayed_ent) || var_01 != level.last_displayed_ent) + { + display_fx_info(var_01); + level.last_displayed_ent = var_01; + } + + if(common_scripts\_createfx::button_is_clicked("a")) + { + common_scripts\_createfx::clear_settable_fx(); + setmenu("add_options"); + return; + } + + return; + } + + return; + } + + if(menu("add_options")) + { + if(!entities_are_selected()) + { + common_scripts\_createfx::clear_fx_hudelements(); + setmenu("none"); + return; + } + + display_fx_add_options(get_last_selected_entity()); + if(common_scripts\_createfx::button_is_clicked("m")) + { + increment_list_offset(); + return; + } + + return; + } +} + +//Function Number: 4 +_exit_menu() +{ + common_scripts\_createfx::clear_fx_hudelements(); + common_scripts\_createfx::clear_entity_selection(); + common_scripts\_createfx::update_selected_entities(); + setmenu("none"); +} + +//Function Number: 5 +get_last_selected_entity() +{ + return level.selected_fx_ents[level.selected_fx_ents.size - 1]; +} + +//Function Number: 6 +menu_fx_creation() +{ + var_00 = 0; + var_01 = undefined; + var_02 = common_scripts\_createfx::func_get_level_fx(); + for(var_03 = level.effect_list_offset;var_03 < var_02.size;var_03++) + { + var_00 = var_00 + 1; + var_04 = var_00; + if(var_04 == 10) + { + var_04 = 0; + } + + if(common_scripts\_createfx::button_is_clicked(var_04 + "")) + { + var_01 = var_02[var_03]; + break; + } + + if(var_00 > level.effect_list_offset_max) + { + break; + } + } + + if(!isdefined(var_01)) + { + return; + } + + if(menu("change_fxid")) + { + apply_option_to_selected_fx(get_option("fxid"),var_01); + level.effect_list_offset = 0; + common_scripts\_createfx::clear_fx_hudelements(); + setmenu("none"); + return; + } + + var_05 = undefined; + if(menu("create_loopfx")) + { + var_05 = common_scripts\utility::createloopeffect(var_01); + } + + if(menu("create_oneshot")) + { + var_05 = common_scripts\utility::createoneshoteffect(var_01); + } + + finish_creating_entity(var_05); +} + +//Function Number: 7 +finish_creating_entity(param_00) +{ + param_00.v["angles"] = vectortoangles(param_00.v["origin"] + (0,0,100) - param_00.v["origin"]); + param_00 common_scripts\_createfx::post_entity_creation_function(); + common_scripts\_createfx::clear_entity_selection(); + common_scripts\_createfx::select_last_entity(); + common_scripts\_createfx::move_selection_to_cursor(); + common_scripts\_createfx::update_selected_entities(); + setmenu("none"); +} + +//Function Number: 8 +menu_init() +{ + level.createfx_options = []; + addoption("string","fxid","The FX","nil","fx"); + addoption("float","delay","Repeat rate/start delay",0.5,"fx"); + addoption("float","fire_range","Fire damage range",0,"fx"); + addoption("string","flag","Flag","nil","exploder"); + addoption("string","firefx","2nd FX id","nil","exploder"); + addoption("float","firefxdelay","2nd FX id repeat rate",0.5,"exploder"); + addoption("float","firefxtimeout","2nd FX timeout",5,"exploder"); + addoption("string","firefxsound","2nd FX soundalias","nil","exploder"); + addoption("float","damage","Radius damage",150,"exploder"); + addoption("float","damage_radius","Radius of radius damage",250,"exploder"); + addoption("float","delay_min","Minimimum time between repeats",1,"soundfx_interval"); + addoption("float","delay_max","Maximum time between repeats",2,"soundfx_interval"); + addoption("int","repeat","Number of times to repeat",5,"exploder"); + addoption("string","exploder","Exploder","1","exploder"); + addoption("string","earthquake","Earthquake","nil","exploder"); + if(!level.mp_createfx) + { + addoption("string","rumble","Rumble","nil","exploder"); + } + + addoption("string","ender","Level notify for ending 2nd FX","nil","exploder"); + addoption("string","soundalias","Soundalias","nil","all"); + addoption("string","loopsound","Loopsound","nil","exploder"); + if(!level.mp_createfx) + { + addoption("int","stoppable","Can be stopped from script","1","all"); + } + + level.effect_list_offset = 0; + level.effect_list_offset_max = 10; + level.createfxmasks = []; + level.createfxmasks["all"] = []; + level.createfxmasks["all"]["exploder"] = 1; + level.createfxmasks["all"]["oneshotfx"] = 1; + level.createfxmasks["all"]["loopfx"] = 1; + level.createfxmasks["all"]["soundfx"] = 1; + level.createfxmasks["all"]["soundfx_interval"] = 1; + level.createfxmasks["fx"] = []; + level.createfxmasks["fx"]["exploder"] = 1; + level.createfxmasks["fx"]["oneshotfx"] = 1; + level.createfxmasks["fx"]["loopfx"] = 1; + level.createfxmasks["exploder"] = []; + level.createfxmasks["exploder"]["exploder"] = 1; + level.createfxmasks["loopfx"] = []; + level.createfxmasks["loopfx"]["loopfx"] = 1; + level.createfxmasks["oneshotfx"] = []; + level.createfxmasks["oneshotfx"]["oneshotfx"] = 1; + level.createfxmasks["soundfx"] = []; + level.createfxmasks["soundfx"]["soundalias"] = 1; + level.createfxmasks["soundfx_interval"] = []; + level.createfxmasks["soundfx_interval"]["soundfx_interval"] = 1; +} + +//Function Number: 9 +get_last_selected_ent() +{ + return level.selected_fx_ents[level.selected_fx_ents.size - 1]; +} + +//Function Number: 10 +entities_are_selected() +{ + return level.selected_fx_ents.size > 0; +} + +//Function Number: 11 +menu_change_selected_fx() +{ + if(!level.selected_fx_ents.size) + { + return; + } + + var_00 = 0; + var_01 = 0; + var_02 = get_last_selected_ent(); + for(var_03 = 0;var_03 < level.createfx_options.size;var_03++) + { + var_04 = level.createfx_options[var_03]; + if(!isdefined(var_02.v[var_04["name"]])) + { + continue; + } + + var_00++; + if(var_00 < level.effect_list_offset) + { + continue; + } + + var_01++; + var_05 = var_01; + if(var_05 == 10) + { + var_05 = 0; + } + + if(common_scripts\_createfx::button_is_clicked(var_05 + "")) + { + prepare_option_for_change(var_04,var_01); + break; + } + + if(var_01 > level.effect_list_offset_max) + { + var_06 = 1; + break; + } + } +} + +//Function Number: 12 +prepare_option_for_change(param_00,param_01) +{ + if(param_00["name"] == "fxid") + { + setmenu("change_fxid"); + draw_effects_list(); + return; + } + + common_scripts\_createfx::createfx_centerprint("To change " + param_00["description"] + " on selected entities, type /fx newvalue"); + level.createfx_inputlocked = 1; + set_option_index(param_00["name"]); + setdvar("fx","nil"); + level.createfxhudelements[param_01 + 3][0].color = (1,1,0); +} + +//Function Number: 13 +menu_fx_option_set() +{ + if(getdvar("fx") == "nil") + { + return; + } + + var_00 = get_selected_option(); + var_01 = undefined; + if(var_00["type"] == "string") + { + var_01 = getdvar("fx"); + } + + if(var_00["type"] == "int") + { + var_01 = getdvarint("fx"); + } + + if(var_00["type"] == "float") + { + var_01 = getdvarfloat("fx"); + } + + apply_option_to_selected_fx(var_00,var_01); +} + +//Function Number: 14 +apply_option_to_selected_fx(param_00,param_01) +{ + for(var_02 = 0;var_02 < level.selected_fx_ents.size;var_02++) + { + var_03 = level.selected_fx_ents[var_02]; + if(mask(param_00["mask"],var_03.v["type"])) + { + var_03.v[param_00["name"]] = param_01; + } + } + + level.last_displayed_ent = undefined; + common_scripts\_createfx::update_selected_entities(); + common_scripts\_createfx::clear_settable_fx(); +} + +//Function Number: 15 +set_option_index(param_00) +{ + for(var_01 = 0;var_01 < level.createfx_options.size;var_01++) + { + if(level.createfx_options[var_01]["name"] != param_00) + { + continue; + } + + level.selected_fx_option_index = var_01; + return; + } +} + +//Function Number: 16 +get_selected_option() +{ + return level.createfx_options[level.selected_fx_option_index]; +} + +//Function Number: 17 +mask(param_00,param_01) +{ + return isdefined(level.createfxmasks[param_00][param_01]); +} + +//Function Number: 18 +addoption(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = []; + level.createfx_options[level.createfx_options.size] = var_41; +} + +//Function Number: 19 +get_option(param_00) +{ + for(var_01 = 0;var_01 < level.createfx_options.size;var_01++) + { + if(level.createfx_options[var_01]["name"] == param_00) + { + return level.createfx_options[var_01]; + } + } +} + +//Function Number: 20 +display_fx_info(param_00) +{ + if(!menu("none")) + { + return; + } + + common_scripts\_createfx::clear_fx_hudelements(); + common_scripts\_createfx::set_fx_hudelement("Name: " + param_00.v["fxid"]); + common_scripts\_createfx::set_fx_hudelement("Type: " + param_00.v["type"]); + common_scripts\_createfx::set_fx_hudelement("Origin: " + param_00.v["origin"]); + common_scripts\_createfx::set_fx_hudelement("Angles: " + param_00.v["angles"]); + if(entities_are_selected()) + { + var_01 = 0; + var_02 = 0; + var_03 = 0; + for(var_04 = 0;var_04 < level.createfx_options.size;var_04++) + { + var_05 = level.createfx_options[var_04]; + if(!isdefined(param_00.v[var_05["name"]])) + { + continue; + } + + var_01++; + if(var_01 < level.effect_list_offset) + { + continue; + } + + var_02++; + common_scripts\_createfx::set_fx_hudelement(var_02 + ". " + var_05["description"] + ": " + param_00.v[var_05["name"]]); + if(var_02 > level.effect_list_offset_max) + { + var_03 = 1; + break; + } + } + + if(var_01 > level.effect_list_offset_max) + { + common_scripts\_createfx::set_fx_hudelement("(m) More >"); + } + + common_scripts\_createfx::set_fx_hudelement("(a) Add >"); + common_scripts\_createfx::set_fx_hudelement("(x) Exit >"); + return; + } + + var_01 = 0; + var_03 = 0; + for(var_04 = 0;var_04 < level.createfx_options.size;var_04++) + { + var_05 = level.createfx_options[var_04]; + if(!isdefined(param_00.v[var_05["name"]])) + { + continue; + } + + var_01++; + common_scripts\_createfx::set_fx_hudelement(var_05["description"] + ": " + param_00.v[var_05["name"]]); + if(var_01 > level.createfx_hudelements) + { + break; + } + } +} + +//Function Number: 21 +display_fx_add_options(param_00) +{ + common_scripts\_createfx::clear_fx_hudelements(); + common_scripts\_createfx::set_fx_hudelement("Name: " + param_00.v["fxid"]); + common_scripts\_createfx::set_fx_hudelement("Type: " + param_00.v["type"]); + common_scripts\_createfx::set_fx_hudelement("Origin: " + param_00.v["origin"]); + common_scripts\_createfx::set_fx_hudelement("Angles: " + param_00.v["angles"]); + var_01 = 0; + var_02 = 0; + var_03 = 0; + if(level.effect_list_offset >= level.createfx_options.size) + { + level.effect_list_offset = 0; + } + + for(var_04 = 0;var_04 < level.createfx_options.size;var_04++) + { + var_05 = level.createfx_options[var_04]; + if(isdefined(param_00.v[var_05["name"]])) + { + continue; + } + + if(!mask(var_05["mask"],param_00.v["type"])) + { + continue; + } + + var_01++; + if(var_01 < level.effect_list_offset) + { + continue; + } + + if(var_02 >= level.effect_list_offset_max) + { + continue; + } + + var_02++; + var_06 = var_02; + if(var_06 == 10) + { + var_06 = 0; + } + + if(common_scripts\_createfx::button_is_clicked(var_06 + "")) + { + add_option_to_selected_entities(var_05); + menunone(); + level.last_displayed_ent = undefined; + return; + } + + common_scripts\_createfx::set_fx_hudelement(var_06 + ". " + var_05["description"]); + } + + if(var_01 > level.effect_list_offset_max) + { + common_scripts\_createfx::set_fx_hudelement("(m) More >"); + } + + common_scripts\_createfx::set_fx_hudelement("(x) Exit >"); +} + +//Function Number: 22 +add_option_to_selected_entities(param_00) +{ + var_01 = undefined; + for(var_02 = 0;var_02 < level.selected_fx_ents.size;var_02++) + { + var_03 = level.selected_fx_ents[var_02]; + if(mask(param_00["mask"],var_03.v["type"])) + { + var_03.v[param_00["name"]] = param_00["default"]; + } + } +} + +//Function Number: 23 +menunone() +{ + level.effect_list_offset = 0; + common_scripts\_createfx::clear_fx_hudelements(); + setmenu("none"); +} + +//Function Number: 24 +draw_effects_list() +{ + common_scripts\_createfx::clear_fx_hudelements(); + common_scripts\_createfx::set_fx_hudelement("Pick an effect:"); + var_00 = 0; + var_01 = 0; + var_02 = common_scripts\_createfx::func_get_level_fx(); + if(level.effect_list_offset >= var_02.size) + { + level.effect_list_offset = 0; + } + + for(var_03 = level.effect_list_offset;var_03 < var_02.size;var_03++) + { + var_00 = var_00 + 1; + common_scripts\_createfx::set_fx_hudelement(var_00 + ". " + var_02[var_03]); + if(var_00 >= level.effect_list_offset_max) + { + var_01 = 1; + break; + } + } + + if(var_02.size > level.effect_list_offset_max) + { + common_scripts\_createfx::set_fx_hudelement("(m) More >"); + } +} + +//Function Number: 25 +increment_list_offset() +{ + level.effect_list_offset = level.effect_list_offset + level.effect_list_offset_max; +} \ No newline at end of file diff --git a/MW3/Xbox/SP/common_scripts/_destructible.gsc b/MW3/Xbox/SP/common_scripts/_destructible.gsc new file mode 100644 index 0000000..4cb7d36 --- /dev/null +++ b/MW3/Xbox/SP/common_scripts/_destructible.gsc @@ -0,0 +1,3112 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: common_scripts\_destructible.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 99 + * Decompile Time: 1896 ms + * Timestamp: 10/27/2023 2:32:15 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level.destructiblespawnedentslimit = 50; + level.destructiblespawnedents = []; + level.currentcaralarms = 0; + level.commonstarttime = gettime(); + if(!isdefined(level.fast_destructible_explode)) + { + level.fast_destructible_explode = 0; + } + + if(!isdefined(level.func)) + { + level.func = []; + } + + var_00 = 1; + if(var_00) + { + find_destructibles(); + } + + var_01 = getentarray("delete_on_load","targetname"); + foreach(var_03 in var_01) + { + var_03 delete(); + } + + init_destroyed_count(); + init_destructible_frame_queue(); +} + +//Function Number: 2 +warn_about_old_destructible() +{ + wait 1; + var_00 = getentarray("destructible","targetname"); + if(var_00.size != 0) + { + foreach(var_02 in var_00) + { + } + } +} + +//Function Number: 3 +find_destructibles() +{ + var_00 = getentarray("destructible_vehicle","targetname"); + foreach(var_02 in var_00) + { + var_02 func_0A2A(); + } + + var_04 = getentarray("destructible_toy","targetname"); + foreach(var_06 in var_04) + { + var_06 func_0A2A(); + } +} + +//Function Number: 4 +func_0A2A(param_00) +{ + if(!isdefined(param_00)) + { + param_00 = 0; + } + + var_01 = undefined; + self.modeldummyon = 0; + add_damage_owner_recorder(); + self.destructibleinfo = common_scripts\_destructible_types::maketype(self.destructible_type); + if(self.destructibleinfo < 0) + { + return; + } + + if(!param_00) + { + precache_destructibles(); + } + + add_destructible_fx(); + if(isdefined(level.destructible_type[self.destructibleinfo].var_A2D)) + { + self.destructible_parts = []; + for(var_03 = 0;var_03 < level.destructible_type[self.destructibleinfo].var_A2D.size;var_03++) + { + self.destructible_parts[var_03] = spawnstruct(); + self.destructible_parts[var_03].v["currentState"] = 0; + if(isdefined(level.destructible_type[self.destructibleinfo].var_A2D[var_03][0].v["health"])) + { + self.destructible_parts[var_03].v["health"] = level.destructible_type[self.destructibleinfo].var_A2D[var_03][0].v["health"]; + } + + if(isdefined(level.destructible_type[self.destructibleinfo].var_A2D[var_03][0].v["random_dynamic_attachment_1"])) + { + var_04 = randomint(level.destructible_type[self.destructibleinfo].var_A2D[var_03][0].v["random_dynamic_attachment_1"].size); + var_05 = level.destructible_type[self.destructibleinfo].var_A2D[var_03][0].v["random_dynamic_attachment_tag"][var_04]; + var_06 = level.destructible_type[self.destructibleinfo].var_A2D[var_03][0].v["random_dynamic_attachment_1"][var_04]; + var_07 = level.destructible_type[self.destructibleinfo].var_A2D[var_03][0].v["random_dynamic_attachment_2"][var_04]; + var_08 = level.destructible_type[self.destructibleinfo].var_A2D[var_03][0].v["clipToRemove"][var_04]; + thread do_random_dynamic_attachment(var_05,var_06,var_07,var_08); + } + + if(var_03 == 0) + { + continue; + } + + var_09 = level.destructible_type[self.destructibleinfo].var_A2D[var_03][0].v["modelName"]; + var_0A = level.destructible_type[self.destructibleinfo].var_A2D[var_03][0].v["tagName"]; + for(var_0B = 1;isdefined(level.destructible_type[self.destructibleinfo].var_A2D[var_03][var_0B]);var_0B++) + { + var_0C = level.destructible_type[self.destructibleinfo].var_A2D[var_03][var_0B].v["tagName"]; + var_0D = level.destructible_type[self.destructibleinfo].var_A2D[var_03][var_0B].v["modelName"]; + if(isdefined(var_0C) && var_0C != var_0A) + { + hideapart(var_0C); + if(self.modeldummyon) + { + self.modeldummy hideapart(var_0C); + } + } + } + } + } + + if(isdefined(self.target)) + { + thread destructible_handles_collision_brushes(); + } + + if(self.code_classname != "script_vehicle") + { + self setcandamage(1); + } + + if(common_scripts\utility::issp()) + { + thread connecttraverses(); + } + + thread destructible_think(); +} + +//Function Number: 5 +destructible_create(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if(!isdefined(level.destructible_type)) + { + level.destructible_type = []; + } + + var_06 = level.destructible_type.size; + var_06 = level.destructible_type.size; + level.destructible_type[var_06] = spawnstruct(); + level.destructible_type[var_06].v["type"] = param_00; + level.destructible_type[var_06].var_A2D = []; + level.destructible_type[var_06].var_A2D[0][0] = spawnstruct(); + level.destructible_type[var_06].var_A2D[0][0].v["modelName"] = self.model; + level.destructible_type[var_06].var_A2D[0][0].v["tagName"] = param_01; + level.destructible_type[var_06].var_A2D[0][0].v["health"] = param_02; + level.destructible_type[var_06].var_A2D[0][0].v["validAttackers"] = param_03; + level.destructible_type[var_06].var_A2D[0][0].v["validDamageZone"] = param_04; + level.destructible_type[var_06].var_A2D[0][0].v["validDamageCause"] = param_05; + level.destructible_type[var_06].var_A2D[0][0].v["godModeAllowed"] = 1; + level.destructible_type[var_06].var_A2D[0][0].v["rotateTo"] = self.angles; + level.destructible_type[var_06].var_A2D[0][0].v["vehicle_exclude_anim"] = 0; +} + +//Function Number: 6 +destructible_part(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09) +{ + var_0A = level.destructible_type.size - 1; + var_0B = level.destructible_type[var_0A].var_A2D.size; + var_0C = 0; + destructible_info(var_0B,var_0C,param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,undefined,param_09); +} + +//Function Number: 7 +destructible_state(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07) +{ + var_08 = level.destructible_type.size - 1; + var_09 = level.destructible_type[var_08].var_A2D.size - 1; + var_0A = level.destructible_type[var_08].var_A2D[var_09].size; + if(!isdefined(param_00) && var_09 == 0) + { + param_00 = level.destructible_type[var_08].var_A2D[var_09][0].v["tagName"]; + } + + destructible_info(var_09,var_0A,param_00,param_01,param_02,param_03,param_04,param_05,undefined,undefined,param_06,param_07); +} + +//Function Number: 8 +destructible_fx(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if(!isdefined(param_02)) + { + param_02 = 1; + } + + if(!isdefined(param_04)) + { + param_04 = 0; + } + + if(!isdefined(param_05)) + { + param_05 = 0; + } + + var_06 = level.destructible_type.size - 1; + var_07 = level.destructible_type[var_06].var_A2D.size - 1; + var_08 = level.destructible_type[var_06].var_A2D[var_07].size - 1; + var_09 = 0; + if(isdefined(level.destructible_type[var_06].var_A2D[var_07][var_08].v["fx_filename"])) + { + if(isdefined(level.destructible_type[var_06].var_A2D[var_07][var_08].v["fx_filename"][param_04])) + { + var_09 = level.destructible_type[var_06].var_A2D[var_07][var_08].v["fx_filename"][param_04].size; + } + } + + if(isdefined(param_03)) + { + level.destructible_type[var_06].var_A2D[var_07][var_08].v["fx_valid_damagetype"][param_04][var_09] = param_03; + } + + level.destructible_type[var_06].var_A2D[var_07][var_08].v["fx_filename"][param_04][var_09] = param_01; + level.destructible_type[var_06].var_A2D[var_07][var_08].v["fx_tag"][param_04][var_09] = param_00; + level.destructible_type[var_06].var_A2D[var_07][var_08].v["fx_useTagAngles"][param_04][var_09] = param_02; + level.destructible_type[var_06].var_A2D[var_07][var_08].v["fx_cost"][param_04][var_09] = param_05; +} + +//Function Number: 9 +destructible_loopfx(param_00,param_01,param_02,param_03) +{ + if(!isdefined(param_03)) + { + param_03 = 0; + } + + var_04 = level.destructible_type.size - 1; + var_05 = level.destructible_type[var_04].var_A2D.size - 1; + var_06 = level.destructible_type[var_04].var_A2D[var_05].size - 1; + var_07 = 0; + if(isdefined(level.destructible_type[var_04].var_A2D[var_05][var_06].v["loopfx_filename"])) + { + var_07 = level.destructible_type[var_04].var_A2D[var_05][var_06].v["loopfx_filename"].size; + } + + level.destructible_type[var_04].var_A2D[var_05][var_06].v["loopfx_filename"][var_07] = param_01; + level.destructible_type[var_04].var_A2D[var_05][var_06].v["loopfx_tag"][var_07] = param_00; + level.destructible_type[var_04].var_A2D[var_05][var_06].v["loopfx_rate"][var_07] = param_02; + level.destructible_type[var_04].var_A2D[var_05][var_06].v["loopfx_cost"][var_07] = param_03; +} + +//Function Number: 10 +destructible_healthdrain(param_00,param_01,param_02,param_03) +{ + var_04 = level.destructible_type.size - 1; + var_05 = level.destructible_type[var_04].var_A2D.size - 1; + var_06 = level.destructible_type[var_04].var_A2D[var_05].size - 1; + level.destructible_type[var_04].var_A2D[var_05][var_06].v["healthdrain_amount"] = param_00; + level.destructible_type[var_04].var_A2D[var_05][var_06].v["healthdrain_interval"] = param_01; + level.destructible_type[var_04].var_A2D[var_05][var_06].v["badplace_radius"] = param_02; + level.destructible_type[var_04].var_A2D[var_05][var_06].v["badplace_team"] = param_03; +} + +//Function Number: 11 +destructible_sound(param_00,param_01,param_02) +{ + var_03 = level.destructible_type.size - 1; + var_04 = level.destructible_type[var_03].var_A2D.size - 1; + var_05 = level.destructible_type[var_03].var_A2D[var_04].size - 1; + if(!isdefined(param_02)) + { + param_02 = 0; + } + + if(!isdefined(level.destructible_type[var_03].var_A2D[var_04][var_05].v["sound"])) + { + level.destructible_type[var_03].var_A2D[var_04][var_05].v["sound"] = []; + level.destructible_type[var_03].var_A2D[var_04][var_05].v["soundCause"] = []; + } + + if(!isdefined(level.destructible_type[var_03].var_A2D[var_04][var_05].v["sound"][param_02])) + { + level.destructible_type[var_03].var_A2D[var_04][var_05].v["sound"][param_02] = []; + level.destructible_type[var_03].var_A2D[var_04][var_05].v["soundCause"][param_02] = []; + } + + var_06 = level.destructible_type[var_03].var_A2D[var_04][var_05].v["sound"][param_02].size; + level.destructible_type[var_03].var_A2D[var_04][var_05].v["sound"][param_02][var_06] = param_00; + level.destructible_type[var_03].var_A2D[var_04][var_05].v["soundCause"][param_02][var_06] = param_01; +} + +//Function Number: 12 +destructible_loopsound(param_00,param_01) +{ + var_02 = level.destructible_type.size - 1; + var_03 = level.destructible_type[var_02].var_A2D.size - 1; + var_04 = level.destructible_type[var_02].var_A2D[var_03].size - 1; + if(!isdefined(level.destructible_type[var_02].var_A2D[var_03][var_04].v["loopsound"])) + { + level.destructible_type[var_02].var_A2D[var_03][var_04].v["loopsound"] = []; + level.destructible_type[var_02].var_A2D[var_03][var_04].v["loopsoundCause"] = []; + } + + var_05 = level.destructible_type[var_02].var_A2D[var_03][var_04].v["loopsound"].size; + level.destructible_type[var_02].var_A2D[var_03][var_04].v["loopsound"][var_05] = param_00; + level.destructible_type[var_02].var_A2D[var_03][var_04].v["loopsoundCause"][var_05] = param_01; +} + +//Function Number: 13 +destructible_anim(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08) +{ + if(!isdefined(param_03)) + { + param_03 = 0; + } + + if(!isdefined(param_04)) + { + param_04 = 0; + } + + var_09 = []; + func_0A32("animation",var_41); +} + +//Function Number: 14 +destructible_spotlight(param_00) +{ + var_01 = []; + var_02 = []; + var_41["dvars"] = var_02; + add_keypairs_to_destructible(var_41); +} + +//Function Number: 15 +add_key_to_destructible(param_00,param_01) +{ + var_02 = []; + add_keypairs_to_destructible(var_41); +} + +//Function Number: 16 +add_keypairs_to_destructible(param_00) +{ + var_01 = level.destructible_type.size - 1; + var_02 = level.destructible_type[var_01].var_A2D.size - 1; + var_03 = level.destructible_type[var_01].var_A2D[var_02].size - 1; + foreach(var_06, var_05 in param_00) + { + level.destructible_type[var_01].var_A2D[var_02][var_03].v[var_06] = var_05; + } +} + +//Function Number: 17 +func_0A32(param_00,param_01) +{ + var_02 = level.destructible_type.size - 1; + var_03 = level.destructible_type[var_02].var_A2D.size - 1; + var_04 = level.destructible_type[var_02].var_A2D[var_03].size - 1; + var_05 = level.destructible_type[var_02].var_A2D[var_03][var_04].v; + if(!isdefined(var_05[param_00])) + { + } + + var_29[param_01] = var_41[param_01].size; + level.destructible_type[var_04].var_A2D[var_05][var_41].v = var_29; +} + +//Function Number: 18 +destructible_car_alarm() +{ + var_00 = level.destructible_type.size - 1; + var_01 = level.destructible_type[var_00].var_A2D.size - 1; + var_02 = level.destructible_type[var_00].var_A2D[var_01].size - 1; + level.destructible_type[var_00].var_A2D[var_01][var_02].v["triggerCarAlarm"] = 1; +} + +//Function Number: 19 +destructible_lights_out(param_00) +{ + if(!isdefined(param_00)) + { + param_00 = 256; + } + + var_01 = level.destructible_type.size - 1; + var_02 = level.destructible_type[var_01].var_A2D.size - 1; + var_03 = level.destructible_type[var_01].var_A2D[var_02].size - 1; + level.destructible_type[var_01].var_A2D[var_02][var_03].v["break_nearby_lights"] = param_00; +} + +//Function Number: 20 +random_dynamic_attachment(param_00,param_01,param_02,param_03) +{ + if(!isdefined(param_02)) + { + param_02 = ""; + } + + var_04 = level.destructible_type.size - 1; + var_05 = level.destructible_type[var_04].var_A2D.size - 1; + var_06 = 0; + if(!isdefined(level.destructible_type[var_04].var_A2D[var_05][var_06].v["random_dynamic_attachment_1"])) + { + level.destructible_type[var_04].var_A2D[var_05][var_06].v["random_dynamic_attachment_1"] = []; + level.destructible_type[var_04].var_A2D[var_05][var_06].v["random_dynamic_attachment_2"] = []; + level.destructible_type[var_04].var_A2D[var_05][var_06].v["random_dynamic_attachment_tag"] = []; + } + + var_07 = level.destructible_type[var_04].var_A2D[var_05][var_06].v["random_dynamic_attachment_1"].size; + level.destructible_type[var_04].var_A2D[var_05][var_06].v["random_dynamic_attachment_1"][var_07] = param_01; + level.destructible_type[var_04].var_A2D[var_05][var_06].v["random_dynamic_attachment_2"][var_07] = param_02; + level.destructible_type[var_04].var_A2D[var_05][var_06].v["random_dynamic_attachment_tag"][var_07] = param_00; + level.destructible_type[var_04].var_A2D[var_05][var_06].v["clipToRemove"][var_07] = param_03; +} + +//Function Number: 21 +destructible_physics(param_00,param_01) +{ + var_02 = level.destructible_type.size - 1; + var_03 = level.destructible_type[var_02].var_A2D.size - 1; + var_04 = level.destructible_type[var_02].var_A2D[var_03].size - 1; + if(!isdefined(level.destructible_type[var_02].var_A2D[var_03][var_04].v["physics"])) + { + level.destructible_type[var_02].var_A2D[var_03][var_04].v["physics"] = []; + level.destructible_type[var_02].var_A2D[var_03][var_04].v["physics_tagName"] = []; + level.destructible_type[var_02].var_A2D[var_03][var_04].v["physics_velocity"] = []; + } + + var_05 = level.destructible_type[var_02].var_A2D[var_03][var_04].v["physics"].size; + level.destructible_type[var_02].var_A2D[var_03][var_04].v["physics"][var_05] = 1; + level.destructible_type[var_02].var_A2D[var_03][var_04].v["physics_tagName"][var_05] = param_00; + level.destructible_type[var_02].var_A2D[var_03][var_04].v["physics_velocity"][var_05] = param_01; +} + +//Function Number: 22 +destructible_splash_damage_scaler(param_00) +{ + var_01 = level.destructible_type.size - 1; + var_02 = level.destructible_type[var_01].var_A2D.size - 1; + var_03 = level.destructible_type[var_01].var_A2D[var_02].size - 1; + level.destructible_type[var_01].var_A2D[var_02][var_03].v["splash_damage_scaler"] = param_00; +} + +//Function Number: 23 +func_0976(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A,param_0B) +{ + var_0C = level.destructible_type.size - 1; + var_0D = level.destructible_type[var_0C].var_A2D.size - 1; + var_0E = level.destructible_type[var_0C].var_A2D[var_0D].size - 1; + if(common_scripts\utility::issp()) + { + level.destructible_type[var_0C].var_A2D[var_0D][var_0E].v["explode_range"] = param_02; + } + else + { + level.destructible_type[var_0C].var_A2D[var_0D][var_0E].v["explode_range"] = param_03; + } + + level.destructible_type[var_0C].var_A2D[var_0D][var_0E].v["explode"] = 1; + level.destructible_type[var_0C].var_A2D[var_0D][var_0E].v["explode_force_min"] = param_00; + level.destructible_type[var_0C].var_A2D[var_0D][var_0E].v["explode_force_max"] = param_01; + level.destructible_type[var_0C].var_A2D[var_0D][var_0E].v["explode_mindamage"] = param_04; + level.destructible_type[var_0C].var_A2D[var_0D][var_0E].v["explode_maxdamage"] = param_05; + level.destructible_type[var_0C].var_A2D[var_0D][var_0E].v["continueDamage"] = param_06; + level.destructible_type[var_0C].var_A2D[var_0D][var_0E].v["originOffset"] = param_07; + level.destructible_type[var_0C].var_A2D[var_0D][var_0E].v["earthQuakeScale"] = param_08; + level.destructible_type[var_0C].var_A2D[var_0D][var_0E].v["earthQuakeRadius"] = param_09; + level.destructible_type[var_0C].var_A2D[var_0D][var_0E].v["originOffset3d"] = param_0A; + level.destructible_type[var_0C].var_A2D[var_0D][var_0E].v["delaytime"] = param_0B; +} + +//Function Number: 24 +destructible_info(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(param_03)) + { + param_03 = tolower(param_03); + } + + var_0D = level.destructible_type.size - 1; + level.destructible_type[var_0D].var_A2D[param_00][param_01] = spawnstruct(); + level.destructible_type[var_0D].var_A2D[param_00][param_01].v["modelName"] = param_03; + level.destructible_type[var_0D].var_A2D[param_00][param_01].v["tagName"] = param_02; + level.destructible_type[var_0D].var_A2D[param_00][param_01].v["health"] = param_04; + level.destructible_type[var_0D].var_A2D[param_00][param_01].v["validAttackers"] = param_05; + level.destructible_type[var_0D].var_A2D[param_00][param_01].v["validDamageZone"] = param_06; + level.destructible_type[var_0D].var_A2D[param_00][param_01].v["validDamageCause"] = param_07; + level.destructible_type[var_0D].var_A2D[param_00][param_01].v["alsoDamageParent"] = param_08; + level.destructible_type[var_0D].var_A2D[param_00][param_01].v["physicsOnExplosion"] = param_09; + level.destructible_type[var_0D].var_A2D[param_00][param_01].v["grenadeImpactDeath"] = param_0A; + level.destructible_type[var_0D].var_A2D[param_00][param_01].v["godModeAllowed"] = 0; + level.destructible_type[var_0D].var_A2D[param_00][param_01].v["splashRotation"] = param_0B; + level.destructible_type[var_0D].var_A2D[param_00][param_01].v["receiveDamageFromParent"] = param_0C; +} + +//Function Number: 25 +precache_destructibles() +{ + if(!isdefined(level.destructible_type[self.destructibleinfo].var_A2D)) + { + return; + } + + for(var_00 = 0;var_00 < level.destructible_type[self.destructibleinfo].var_A2D.size;var_00++) + { + for(var_01 = 0;var_01 < level.destructible_type[self.destructibleinfo].var_A2D[var_00].size;var_01++) + { + if(level.destructible_type[self.destructibleinfo].var_A2D[var_00].size <= var_01) + { + continue; + } + + if(isdefined(level.destructible_type[self.destructibleinfo].var_A2D[var_00][var_01].v["modelName"])) + { + precachemodel(level.destructible_type[self.destructibleinfo].var_A2D[var_00][var_01].v["modelName"]); + } + + if(isdefined(level.destructible_type[self.destructibleinfo].var_A2D[var_00][var_01].v["animation"])) + { + var_02 = level.destructible_type[self.destructibleinfo].var_A2D[var_00][var_01].v["animation"]; + foreach(var_04 in var_02) + { + if(isdefined(var_04["mpAnim"])) + { + common_scripts\utility::noself_func("precacheMpAnim",var_04["mpAnim"]); + } + } + } + + if(isdefined(level.destructible_type[self.destructibleinfo].var_A2D[var_00][var_01].v["random_dynamic_attachment_1"])) + { + foreach(var_07 in level.destructible_type[self.destructibleinfo].var_A2D[var_00][var_01].v["random_dynamic_attachment_1"]) + { + if(isdefined(var_07) && var_07 != "") + { + precachemodel(var_07); + precachemodel(var_07 + "_destroy"); + } + } + + foreach(var_07 in level.destructible_type[self.destructibleinfo].var_A2D[var_00][var_01].v["random_dynamic_attachment_2"]) + { + if(isdefined(var_07) && var_07 != "") + { + precachemodel(var_07); + precachemodel(var_07 + "_destroy"); + } + } + } + } + } +} + +//Function Number: 26 +add_destructible_fx() +{ + if(!isdefined(level.destructible_type[self.destructibleinfo].var_A2D)) + { + return; + } + + for(var_00 = 0;var_00 < level.destructible_type[self.destructibleinfo].var_A2D.size;var_00++) + { + for(var_01 = 0;var_01 < level.destructible_type[self.destructibleinfo].var_A2D[var_00].size;var_01++) + { + if(level.destructible_type[self.destructibleinfo].var_A2D[var_00].size <= var_01) + { + continue; + } + + var_02 = level.destructible_type[self.destructibleinfo].var_A2D[var_00][var_01]; + if(isdefined(var_02.v["fx_filename"])) + { + for(var_03 = 0;var_03 < var_02.v["fx_filename"].size;var_03++) + { + var_04 = var_02.v["fx_filename"][var_03]; + if(isdefined(var_04)) + { + if(isdefined(var_02.v["fx"]) && isdefined(var_02.v["fx"][var_03]) && var_02.v["fx"][var_03].size == var_04.size) + { + continue; + } + + foreach(var_07, var_06 in var_04) + { + level.destructible_type[self.destructibleinfo].var_A2D[var_00][var_01].v["fx"][var_03][var_07] = common_scripts\utility::_loadfx(var_06); + } + } + } + } + + var_08 = level.destructible_type[self.destructibleinfo].var_A2D[var_00][var_01].v["loopfx_filename"]; + if(isdefined(var_08)) + { + if(isdefined(var_02.v["loopfx"]) && var_02.v["loopfx"].size == var_08.size) + { + continue; + } + + foreach(var_07, var_0A in var_08) + { + level.destructible_type[self.destructibleinfo].var_A2D[var_00][var_01].v["loopfx"][var_07] = common_scripts\utility::_loadfx(var_0A); + } + } + } + } +} + +//Function Number: 27 +candamagedestructible(param_00) +{ + foreach(var_02 in self.destructibles) + { + if(var_02 == param_00) + { + return 1; + } + } + + return 0; +} + +//Function Number: 28 +destructible_think() +{ + var_00 = 0; + var_01 = self.model; + var_02 = undefined; + var_03 = self.origin; + var_04 = undefined; + var_05 = undefined; + var_06 = undefined; + destructible_update_part(var_00,var_01,var_02,var_03,var_04,var_05,var_06); + self endon("stop_taking_damage"); + for(;;) + { + var_00 = undefined; + var_05 = undefined; + var_04 = undefined; + var_03 = undefined; + var_07 = undefined; + var_01 = undefined; + var_02 = undefined; + var_08 = undefined; + var_09 = undefined; + self waittill("damage",var_00,var_05,var_04,var_03,var_07,var_01,var_02,var_08,var_09); + if(!isdefined(var_00)) + { + continue; + } + + if(isdefined(var_05) && isdefined(var_05.type) && var_05.type == "soft_landing" && !var_05 candamagedestructible(self)) + { + continue; + } + + if(common_scripts\utility::issp()) + { + var_00 = var_00 * 0.5; + } + else + { + var_00 = var_00 * 1; + } + + if(var_00 <= 0) + { + continue; + } + + if(common_scripts\utility::issp()) + { + if(isdefined(var_05) && isplayer(var_05)) + { + self.damageowner = var_05; + } + } + else if(isdefined(var_05) && isplayer(var_05)) + { + self.damageowner = var_05; + } + else if(isdefined(var_05) && isdefined(var_05.gunner) && isplayer(var_05.gunner)) + { + self.damageowner = var_05.gunner; + } + + var_07 = getdamagetype(var_07); + if(is_shotgun_damage(var_05,var_07)) + { + if(common_scripts\utility::issp()) + { + var_00 = var_00 * 8; + } + else + { + var_00 = var_00 * 4; + } + } + + if(!isdefined(var_01) || var_01 == "") + { + var_01 = self.model; + } + + if(isdefined(var_02) && var_02 == "") + { + if(isdefined(var_08) && var_08 != "" && var_08 != "tag_body" && var_08 != "body_animate_jnt") + { + var_02 = var_08; + } + else + { + var_02 = undefined; + } + + var_0A = level.destructible_type[self.destructibleinfo].var_A2D[0][0].v["tagName"]; + if(isdefined(var_0A) && isdefined(var_08) && var_0A == var_08) + { + var_02 = undefined; + } + } + + if(var_07 == "splash") + { + if(isdefined(level.destructible_type[self.destructibleinfo].var_A2D[0][0].v["splash_damage_scaler"])) + { + var_00 = var_00 * level.destructible_type[self.destructibleinfo].var_A2D[0][0].v["splash_damage_scaler"]; + } + else if(common_scripts\utility::issp()) + { + var_00 = var_00 * 9; + } + else + { + var_00 = var_00 * 13; + } + + destructible_splash_damage(int(var_00),var_03,var_04,var_05,var_07); + continue; + } + + thread destructible_update_part(int(var_00),var_01,var_02,var_03,var_04,var_05,var_07); + } +} + +//Function Number: 29 +is_shotgun_damage(param_00,param_01) +{ + if(param_01 != "bullet") + { + return 0; + } + + if(!isdefined(param_00)) + { + return 0; + } + + var_02 = undefined; + if(isplayer(param_00)) + { + var_02 = param_00 getcurrentweapon(); + } + else if(isdefined(level.enable_ai_shotgun_destructible_damage) && level.enable_ai_shotgun_destructible_damage) + { + if(isdefined(param_00.weapon)) + { + var_02 = param_00.weapon; + } + } + + if(!isdefined(var_02)) + { + return 0; + } + + var_03 = weaponclass(var_02); + if(isdefined(var_03) && var_03 == "spread") + { + return 1; + } + + return 0; +} + +//Function Number: 30 +getpartandstateindex(param_00,param_01) +{ + var_02 = spawnstruct(); + var_02.v = []; + var_03 = -1; + var_04 = -1; + if(tolower(param_00) == tolower(self.model) && !isdefined(param_01)) + { + param_00 = self.model; + param_01 = undefined; + var_03 = 0; + var_04 = 0; + } + + for(var_05 = 0;var_05 < level.destructible_type[self.destructibleinfo].var_A2D.size;var_05++) + { + var_04 = self.destructible_parts[var_05].v["currentState"]; + if(level.destructible_type[self.destructibleinfo].var_A2D[var_05].size <= var_04) + { + continue; + } + + if(!isdefined(param_01)) + { + continue; + } + + if(isdefined(level.destructible_type[self.destructibleinfo].var_A2D[var_05][var_04].v["tagName"])) + { + var_06 = level.destructible_type[self.destructibleinfo].var_A2D[var_05][var_04].v["tagName"]; + if(tolower(var_06) == tolower(param_01)) + { + var_03 = var_05; + break; + } + } + } + + var_02.v["stateIndex"] = var_04; + var_02.v["partIndex"] = var_03; + return var_02; +} + +//Function Number: 31 +destructible_update_part(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07) +{ + if(!isdefined(self.destructible_parts)) + { + return; + } + + if(self.destructible_parts.size == 0) + { + return; + } + + if(level.fast_destructible_explode) + { + self endon("destroyed"); + } + + var_08 = getpartandstateindex(param_01,param_02); + var_09 = var_08.v["stateIndex"]; + var_0A = var_08.v["partIndex"]; + if(var_0A < 0) + { + return; + } + + var_0B = var_09; + var_0C = 0; + var_0D = 0; + for(;;) + { + var_09 = self.destructible_parts[var_0A].v["currentState"]; + if(!isdefined(level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_09])) + { + break; + } + + if(isdefined(level.destructible_type[self.destructibleinfo].var_A2D[var_0A][0].v["alsoDamageParent"])) + { + if(getdamagetype(param_06) != "splash") + { + var_0E = level.destructible_type[self.destructibleinfo].var_A2D[var_0A][0].v["alsoDamageParent"]; + var_0F = int(param_00 * var_0E); + thread notifydamageafterframe(var_0F,param_05,param_04,param_03,param_06,"",""); + } + } + + if(getdamagetype(param_06) != "splash") + { + foreach(var_11 in level.destructible_type[self.destructibleinfo].var_A2D) + { + if(!isdefined(var_11[0].v["receiveDamageFromParent"])) + { + continue; + } + + if(!isdefined(var_11[0].v["tagName"])) + { + continue; + } + + var_0E = var_11[0].v["receiveDamageFromParent"]; + var_12 = int(param_00 * var_0E); + var_13 = var_11[0].v["tagName"]; + thread notifydamageafterframe(var_12,param_05,param_04,param_03,param_06,"",var_13); + } + } + + if(!isdefined(level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_09].v["health"])) + { + break; + } + + if(!isdefined(self.destructible_parts[var_0A].v["health"])) + { + break; + } + + if(var_0C) + { + self.destructible_parts[var_0A].v["health"] = level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_09].v["health"]; + } + + var_0C = 0; + if(isdefined(level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_09].v["grenadeImpactDeath"]) && param_06 == "impact") + { + param_00 = 100000000; + } + + var_15 = self.destructible_parts[var_0A].v["health"]; + var_16 = isattackervalid(var_0A,var_09,param_05); + if(var_16) + { + var_17 = isvaliddamagecause(var_0A,var_09,param_06); + if(var_17) + { + if(isdefined(param_05)) + { + if(isplayer(param_05)) + { + self.player_damage = self.player_damage + param_00; + } + else if(param_05 != self) + { + self.non_player_damage = self.non_player_damage + param_00; + } + } + + if(isdefined(param_06)) + { + if(param_06 == "melee" || param_06 == "impact") + { + param_00 = 100000; + } + } + + self.destructible_parts[var_0A].v["health"] = self.destructible_parts[var_0A].v["health"] - param_00; + } + } + + if(self.destructible_parts[var_0A].v["health"] > 0) + { + return; + } + + if(isdefined(param_07)) + { + param_07.v["fxcost"] = get_part_fx_cost_for_action_state(var_0A,self.destructible_parts[var_0A].v["currentState"]); + add_destructible_to_frame_queue(self,param_07,param_00); + if(!isdefined(self.waiting_for_queue)) + { + self.waiting_for_queue = 1; + } + else + { + self.waiting_for_queue++; + } + + self waittill("queue_processed",var_18); + self.waiting_for_queue--; + if(self.waiting_for_queue == 0) + { + self.waiting_for_queue = undefined; + } + + if(!var_18) + { + self.destructible_parts[var_0A].v["health"] = var_15; + return; + } + } + + param_00 = int(abs(self.destructible_parts[var_0A].v["health"])); + if(param_00 < 0) + { + return; + } + + self.destructible_parts[var_0A].v["currentState"]++; + var_09 = self.destructible_parts[var_0A].v["currentState"]; + var_19 = var_09 - 1; + var_1A = undefined; + if(isdefined(level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19])) + { + var_1A = level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v; + } + + var_1B = undefined; + if(isdefined(level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_09])) + { + var_1B = level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_09].v; + } + + if(!isdefined(level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19])) + { + return; + } + + if(isdefined(level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["explode"])) + { + self.exploding = 1; + } + + if(isdefined(self.loopingsoundstopnotifies) && isdefined(self.loopingsoundstopnotifies[func_0A7A(var_0A)])) + { + for(var_1C = 0;var_1C < self.loopingsoundstopnotifies[func_0A7A(var_0A)].size;var_1C++) + { + self notify(self.loopingsoundstopnotifies[func_0A7A(var_0A)][var_1C]); + if(common_scripts\utility::issp() && self.modeldummyon) + { + self.modeldummy notify(self.loopingsoundstopnotifies[func_0A7A(var_0A)][var_1C]); + } + } + + self.loopingsoundstopnotifies[func_0A7A(var_0A)] = undefined; + } + + if(isdefined(var_1A["break_nearby_lights"])) + { + destructible_get_my_breakable_light(var_1A["break_nearby_lights"]); + } + + if(isdefined(level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_09])) + { + if(var_0A == 0) + { + var_1D = var_1B["modelName"]; + if(isdefined(var_1D) && var_1D != self.model) + { + self setmodel(var_1D); + if(common_scripts\utility::issp() && self.modeldummyon) + { + self.modeldummy setmodel(var_1D); + } + + destructible_splash_rotatation(var_1B); + } + } + else + { + hideapart(param_02); + if(common_scripts\utility::issp() && self.modeldummyon) + { + self.modeldummy hideapart(param_02); + } + + param_02 = var_1B["tagName"]; + if(isdefined(param_02)) + { + showapart(param_02); + if(common_scripts\utility::issp() && self.modeldummyon) + { + self.modeldummy showapart(param_02); + } + } + } + } + + var_1E = get_dummy(); + if(isdefined(self.exploding)) + { + clear_anims(var_1E); + } + + var_1F = destructible_animation_think(var_1A,var_1E,param_06,var_0A); + var_1F = destructible_fx_think(var_1A,var_1E,param_06,var_0A,var_1F); + var_1F = destructible_sound_think(var_1A,var_1E,param_06,var_1F); + if(isdefined(level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["loopfx"])) + { + var_20 = level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["loopfx_filename"].size; + if(var_20 > 0) + { + self notify("FX_State_Change" + var_0A); + } + + for(var_21 = 0;var_21 < var_20;var_21++) + { + var_22 = level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["loopfx"][var_21]; + var_23 = level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["loopfx_tag"][var_21]; + var_24 = level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["loopfx_rate"][var_21]; + thread loopfx_ontag(var_22,var_23,var_24,var_0A); + } + } + + if(isdefined(level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["loopsound"])) + { + for(var_1C = 0;var_1C < level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["loopsound"].size;var_1C++) + { + var_25 = isvalidsoundcause("loopsoundCause",var_1A,var_1C,param_06); + if(var_25) + { + var_26 = level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["loopsound"][var_1C]; + var_27 = level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["tagName"]; + thread play_loop_sound_on_destructible(var_26,var_27); + if(!isdefined(self.loopingsoundstopnotifies)) + { + self.loopingsoundstopnotifies = []; + } + + if(!isdefined(self.loopingsoundstopnotifies[func_0A7A(var_0A)])) + { + self.loopingsoundstopnotifies[func_0A7A(var_0A)] = []; + } + + var_28 = self.loopingsoundstopnotifies[func_0A7A(var_0A)].size; + self.loopingsoundstopnotifies[func_0A7A(var_0A)][var_28] = "stop sound" + var_26; + } + } + } + + if(isdefined(level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["triggerCarAlarm"])) + { + thread do_car_alarm(); + } + + if(isdefined(level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["break_nearby_lights"])) + { + thread break_nearest_light(); + } + + if(isdefined(level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["healthdrain_amount"])) + { + self notify("Health_Drain_State_Change" + var_0A); + var_29 = level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["healthdrain_amount"]; + var_2A = level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["healthdrain_interval"]; + var_2B = level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["modelName"]; + var_2C = level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["tagName"]; + var_2D = level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["badplace_radius"]; + var_2E = level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["badplace_team"]; + if(var_29 > 0) + { + thread health_drain(var_29,var_2A,var_0A,var_2B,var_2C,var_2D,var_2E); + } + } + + if(isdefined(level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["explode"])) + { + var_0D = 1; + var_2F = level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["explode_force_min"]; + var_30 = level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["explode_force_max"]; + var_31 = level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["explode_range"]; + var_32 = level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["explode_mindamage"]; + var_33 = level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["explode_maxdamage"]; + var_34 = level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["continueDamage"]; + var_35 = level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["originOffset"]; + var_36 = level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["earthQuakeScale"]; + var_37 = level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["earthQuakeRadius"]; + var_38 = level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["originOffset3d"]; + var_39 = level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["delaytime"]; + if(isdefined(param_05) && param_05 != self) + { + self.attacker = param_05; + if(self.code_classname == "script_vehicle") + { + self.damage_type = param_06; + } + } + + thread explode(var_0A,var_2F,var_30,var_31,var_32,var_33,var_34,var_35,var_36,var_37,param_05,var_38,var_39); + } + + var_3A = undefined; + if(isdefined(level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["physics"])) + { + for(var_1C = 0;var_1C < level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["physics"].size;var_1C++) + { + var_3A = undefined; + var_3B = level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["physics_tagName"][var_1C]; + var_3C = level.destructible_type[self.destructibleinfo].var_A2D[var_0A][var_19].v["physics_velocity"][var_1C]; + var_3D = undefined; + if(isdefined(var_3C)) + { + var_3E = undefined; + if(isdefined(var_3B)) + { + var_3E = self gettagangles(var_3B); + } + else if(isdefined(param_02)) + { + var_3E = self gettagangles(param_02); + } + + var_3A = undefined; + if(isdefined(var_3B)) + { + var_3A = self gettagorigin(var_3B); + } + else if(isdefined(param_02)) + { + var_3A = self gettagorigin(param_02); + } + + var_3F = var_3C[0] - 5 + randomfloat(10); + var_40 = var_3C[1] - 5 + randomfloat(10); + var_41 = var_3C[2] - 5 + randomfloat(10); + var_42 = anglestoforward(var_3E) * var_3F * randomfloatrange(80,110); + var_43 = anglestoright(var_3E) * var_40 * randomfloatrange(80,110); + var_44 = anglestoup(var_3E) * var_41 * randomfloatrange(80,110); + var_3D = var_42 + var_43 + var_44; + } + else + { + var_3D = param_03; + var_45 = (0,0,0); + if(isdefined(param_05)) + { + var_45 = param_05.origin; + var_3D = vectornormalize(param_03 - var_45); + var_3D = var_3D * 200; + } + } + + if(isdefined(var_3B)) + { + var_46 = undefined; + for(var_47 = 0;var_47 < level.destructible_type[self.destructibleinfo].var_A2D.size;var_47++) + { + if(!isdefined(level.destructible_type[self.destructibleinfo].var_A2D[var_47][0].v["tagName"])) + { + continue; + } + + if(level.destructible_type[self.destructibleinfo].var_A2D[var_47][0].v["tagName"] != var_3B) + { + continue; + } + + var_46 = var_47; + break; + } + + if(isdefined(var_3A)) + { + thread physics_launch(var_46,0,var_3A,var_3D); + } + else + { + thread physics_launch(var_46,0,param_03,var_3D); + } + + continue; + } + + if(isdefined(var_3A)) + { + thread physics_launch(var_0A,var_19,var_3A,var_3D); + } + else + { + thread physics_launch(var_0A,var_19,param_03,var_3D); + } + + return; + } + } + + var_0C = 1; + } +} + +//Function Number: 32 +destructible_splash_rotatation(param_00) +{ + var_01 = param_00["splashRotation"]; + var_02 = param_00["rotateTo"]; + if(!isdefined(var_02)) + { + return; + } + + if(!isdefined(var_01)) + { + return; + } + + if(!var_01) + { + return; + } + + self.angles = (self.angles[0],var_02[1],self.angles[2]); +} + +//Function Number: 33 +damage_not(param_00) +{ + var_01 = strtok(param_00," "); + var_02 = strtok("splash melee bullet splash impact unknown"," "); + var_03 = ""; + foreach(var_05 in var_01) + { + var_02 = common_scripts\utility::array_remove(var_02,var_05); + } + + foreach(var_08 in var_02) + { + var_03 = var_03 + var_08 + " "; + } + + return var_03; +} + +//Function Number: 34 +destructible_splash_damage(param_00,param_01,param_02,param_03,param_04) +{ + if(param_00 <= 0) + { + return; + } + + if(isdefined(self.exploded)) + { + return; + } + + if(!isdefined(level.destructible_type[self.destructibleinfo].var_A2D)) + { + return; + } + + var_05 = getallactiveparts(param_02); + if(var_05.size <= 0) + { + return; + } + + var_05 = setdistanceonparts(var_05,param_01); + var_06 = getlowestpartdistance(var_05); + foreach(var_08 in var_05) + { + var_09 = var_08.v["distance"] * 1.4; + var_0A = param_00 - var_09 - var_06; + if(var_0A <= 0) + { + continue; + } + + if(isdefined(self.exploded)) + { + continue; + } + + thread destructible_update_part(var_0A,var_08.v["modelName"],var_08.v["tagName"],param_01,param_02,param_03,param_04,var_08); + } +} + +//Function Number: 35 +getallactiveparts(param_00) +{ + var_01 = []; + if(!isdefined(level.destructible_type[self.destructibleinfo].var_A2D)) + { + return var_01; + } + + for(var_02 = 0;var_02 < level.destructible_type[self.destructibleinfo].var_A2D.size;var_02++) + { + var_03 = var_02; + var_04 = self.destructible_parts[var_03].v["currentState"]; + for(var_05 = 0;var_05 < level.destructible_type[self.destructibleinfo].var_A2D[var_03].size;var_05++) + { + var_06 = level.destructible_type[self.destructibleinfo].var_A2D[var_03][var_05].v["splashRotation"]; + if(isdefined(var_06) && var_06) + { + var_07 = vectortoangles(param_00); + var_08 = var_07[1] - 90; + level.destructible_type[self.destructibleinfo].var_A2D[var_03][var_05].v["rotateTo"] = (0,var_08,0); + } + } + + if(!isdefined(level.destructible_type[self.destructibleinfo].var_A2D[var_03][var_04])) + { + continue; + } + + var_09 = level.destructible_type[self.destructibleinfo].var_A2D[var_03][var_04].v["tagName"]; + if(!isdefined(var_09)) + { + var_09 = ""; + } + + if(var_09 == "") + { + continue; + } + + var_0A = level.destructible_type[self.destructibleinfo].var_A2D[var_03][var_04].v["modelName"]; + if(!isdefined(var_0A)) + { + var_0A = ""; + } + + var_0B = var_01.size; + var_01[var_0B] = spawnstruct(); + var_01[var_0B].v["modelName"] = var_0A; + var_01[var_0B].v["tagName"] = var_09; + } + + return var_01; +} + +//Function Number: 36 +setdistanceonparts(param_00,param_01) +{ + for(var_02 = 0;var_02 < param_00.size;var_02++) + { + var_03 = distance(param_01,self gettagorigin(param_00[var_02].v["tagName"])); + param_00[var_02].v["distance"] = var_03; + } + + return param_00; +} + +//Function Number: 37 +getlowestpartdistance(param_00) +{ + var_01 = undefined; + foreach(var_03 in param_00) + { + var_04 = var_03.v["distance"]; + if(!isdefined(var_01)) + { + var_01 = var_04; + } + + if(var_04 < var_01) + { + var_01 = var_04; + } + } + + return var_01; +} + +//Function Number: 38 +isvalidsoundcause(param_00,param_01,param_02,param_03,param_04) +{ + if(isdefined(param_04)) + { + var_05 = param_01[param_00][param_04][param_02]; + } + else + { + var_05 = param_02[param_01][param_03]; + } + + if(!isdefined(var_05)) + { + return 1; + } + + if(var_05 == param_03) + { + return 1; + } + + return 0; +} + +//Function Number: 39 +isattackervalid(param_00,param_01,param_02) +{ + if(isdefined(self.forceexploding)) + { + return 1; + } + + if(isdefined(level.destructible_type[self.destructibleinfo].var_A2D[param_00][param_01].v["explode"])) + { + if(isdefined(self.dontallowexplode)) + { + return 0; + } + } + + if(!isdefined(param_02)) + { + return 1; + } + + if(param_02 == self) + { + return 1; + } + + var_03 = level.destructible_type[self.destructibleinfo].var_A2D[param_00][param_01].v["validAttackers"]; + if(!isdefined(var_03)) + { + return 1; + } + + if(var_03 == "no_player") + { + if(!isplayer(param_02)) + { + return 1; + } + + if(!isdefined(param_02.var_A4D)) + { + return 1; + } + + if(param_02.var_A4D == 0) + { + return 1; + } + } + else if(var_03 == "player_only") + { + if(isplayer(param_02)) + { + return 1; + } + + if(isdefined(param_02.var_A4D) && param_02.var_A4D) + { + return 1; + } + } + else if(var_03 == "no_ai" && isdefined(level.isaifunc)) + { + if(![[ level.isaifunc ]](param_02)) + { + return 1; + } + } + else if(var_03 == "ai_only" && isdefined(level.isaifunc)) + { + if([[ level.isaifunc ]](param_02)) + { + return 1; + } + } + else + { + } + + return 0; +} + +//Function Number: 40 +isvaliddamagecause(param_00,param_01,param_02) +{ + if(!isdefined(param_02)) + { + return 1; + } + + var_03 = level.destructible_type[self.destructibleinfo].var_A2D[param_00][param_01].v["godModeAllowed"]; + if(var_03 && (isdefined(self.godmode) && self.godmode) || isdefined(self.script_bulletshield) && self.script_bulletshield && param_02 == "bullet") + { + return 0; + } + + var_04 = level.destructible_type[self.destructibleinfo].var_A2D[param_00][param_01].v["validDamageCause"]; + if(!isdefined(var_04)) + { + return 1; + } + + if(var_04 == "splash" && param_02 != "splash") + { + return 0; + } + + if(var_04 == "no_splash" && param_02 == "splash") + { + return 0; + } + + if((var_04 == "no_melee" && param_02 == "melee") || param_02 == "impact") + { + return 0; + } + + return 1; +} + +//Function Number: 41 +getdamagetype(param_00) +{ + if(!isdefined(param_00)) + { + return "unknown"; + } + + param_00 = tolower(param_00); + switch(param_00) + { + case "mod_crush": + case "mod_melee": + case "melee": + return "melee"; + + case "mod_rifle_bullet": + case "mod_pistol_bullet": + case "bullet": + return "bullet"; + + case "splash": + case "mod_explosive": + case "mod_projectile_splash": + case "mod_projectile": + case "mod_grenade_splash": + case "mod_grenade": + return "splash"; + + case "mod_impact": + return "impact"; + + case "unknown": + return "unknown"; + + default: + return "unknown"; + } +} + +//Function Number: 42 +damage_mirror(param_00,param_01,param_02) +{ + self notify("stop_damage_mirror"); + self endon("stop_damage_mirror"); + param_00 endon("stop_taking_damage"); + self setcandamage(1); + for(;;) + { + self waittill("damage",var_03,var_04,var_05,var_06,var_07); + param_00 notify("damage",var_03,var_04,var_05,var_06,var_07,param_01,param_02); + var_03 = undefined; + var_04 = undefined; + var_05 = undefined; + var_06 = undefined; + var_07 = undefined; + } +} + +//Function Number: 43 +add_damage_owner_recorder() +{ + self.player_damage = 0; + self.non_player_damage = 0; + self.car_damage_owner_recorder = 1; +} + +//Function Number: 44 +loopfx_ontag(param_00,param_01,param_02,param_03) +{ + self endon("FX_State_Change" + param_03); + self endon("delete_destructible"); + level endon("putout_fires"); + while(isdefined(self)) + { + var_04 = get_dummy(); + playfxontag(param_00,var_04,param_01); + wait param_02; + } +} + +//Function Number: 45 +health_drain(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + self endon("Health_Drain_State_Change" + param_02); + level endon("putout_fires"); + self endon("destroyed"); + if(isdefined(param_05) && isdefined(level.destructible_badplace_radius_multiplier)) + { + param_05 = param_05 * level.destructible_badplace_radius_multiplier; + } + + if(isdefined(param_00) && isdefined(level.destructible_health_drain_amount_multiplier)) + { + param_00 = param_00 * level.destructible_health_drain_amount_multiplier; + } + + wait param_01; + self.healthdrain = 1; + var_07 = undefined; + if(isdefined(level.disable_destructible_bad_places) && level.disable_destructible_bad_places) + { + param_05 = undefined; + } + + if(isdefined(param_05) && isdefined(param_06) && common_scripts\utility::issp()) + { + var_07 = "" + gettime(); + if(!isdefined(self.disablebadplace)) + { + if(isdefined(self.script_radius)) + { + param_05 = self.script_radius; + } + + if(param_06 == "both") + { + [[ level.badplace_cylinder_func ]](var_07,0,self.origin,param_05,128,"allies","bad_guys"); + } + else + { + [[ level.badplace_cylinder_func ]](var_07,0,self.origin,param_05,128,param_06); + } + + thread badplace_remove(var_07); + } + } + + while(isdefined(self) && self.destructible_parts[param_02].v["health"] > 0) + { + self notify("damage",param_00,self,(0,0,0),(0,0,0),"MOD_UNKNOWN",param_03,param_04); + wait param_01; + } + + self notify("remove_badplace"); +} + +//Function Number: 46 +badplace_remove(param_00) +{ + common_scripts\utility::waittill_any("destroyed","remove_badplace"); + [[ level.badplace_delete_func ]](param_00); +} + +//Function Number: 47 +physics_launch(param_00,param_01,param_02,param_03) +{ + var_04 = level.destructible_type[self.destructibleinfo].var_A2D[param_00][param_01].v["modelName"]; + var_05 = level.destructible_type[self.destructibleinfo].var_A2D[param_00][param_01].v["tagName"]; + hideapart(var_05); + if(level.destructiblespawnedents.size >= level.destructiblespawnedentslimit) + { + physics_object_remove(level.destructiblespawnedents[0]); + } + + var_06 = spawn("script_model",self gettagorigin(var_05)); + var_06.angles = self gettagangles(var_05); + var_06 setmodel(var_04); + level.destructiblespawnedents[level.destructiblespawnedents.size] = var_06; + var_06 physicslaunchclient(param_02,param_03); +} + +//Function Number: 48 +physics_object_remove(param_00) +{ + var_01 = []; + for(var_02 = 0;var_02 < level.destructiblespawnedents.size;var_02++) + { + if(level.destructiblespawnedents[var_02] == param_00) + { + continue; + } + + var_01[var_01.size] = level.destructiblespawnedents[var_02]; + } + + level.destructiblespawnedents = var_01; + if(isdefined(param_00)) + { + param_00 delete(); + } +} + +//Function Number: 49 +explode(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(param_03) && isdefined(level.destructible_explosion_radius_multiplier)) + { + param_03 = param_03 * level.destructible_explosion_radius_multiplier; + } + + if(!isdefined(param_07)) + { + param_07 = 80; + } + + if(!isdefined(param_0B)) + { + param_0B = (0,0,0); + } + + if(!isdefined(param_06) || isdefined(param_06) && !param_06) + { + if(isdefined(self.exploded)) + { + return; + } + + self.exploded = 1; + } + + if(!isdefined(param_0C)) + { + param_0C = 0; + } + + self notify("exploded",param_0A); + level notify("destructible_exploded"); + if(self.code_classname == "script_vehicle") + { + self notify("death",param_0A,self.damage_type); + } + + if(common_scripts\utility::issp()) + { + thread disconnecttraverses(); + } + + if(!level.fast_destructible_explode) + { + wait 0.05; + } + + if(!isdefined(self)) + { + return; + } + + var_0D = self.destructible_parts[param_00].v["currentState"]; + var_0E = undefined; + if(isdefined(level.destructible_type[self.destructibleinfo].var_A2D[param_00][var_0D])) + { + var_0E = level.destructible_type[self.destructibleinfo].var_A2D[param_00][var_0D].v["tagName"]; + } + + if(isdefined(var_0E)) + { + var_0F = self gettagorigin(var_0E); + } + else + { + var_0F = self.origin; + } + + self notify("damage",param_05,self,(0,0,0),var_0F,"MOD_EXPLOSIVE","",""); + self notify("stop_car_alarm"); + waittillframeend; + if(isdefined(level.destructible_type[self.destructibleinfo].var_A2D)) + { + for(var_10 = level.destructible_type[self.destructibleinfo].var_A2D.size - 1;var_10 >= 0;var_10--) + { + if(var_10 == param_00) + { + continue; + } + + var_11 = self.destructible_parts[var_10].v["currentState"]; + if(var_11 >= level.destructible_type[self.destructibleinfo].var_A2D[var_10].size) + { + var_11 = level.destructible_type[self.destructibleinfo].var_A2D[var_10].size - 1; + } + + var_12 = level.destructible_type[self.destructibleinfo].var_A2D[var_10][var_11].v["modelName"]; + var_0E = level.destructible_type[self.destructibleinfo].var_A2D[var_10][var_11].v["tagName"]; + if(!isdefined(var_12)) + { + continue; + } + + if(!isdefined(var_0E)) + { + continue; + } + + if(isdefined(level.destructible_type[self.destructibleinfo].var_A2D[var_10][0].v["physicsOnExplosion"])) + { + if(level.destructible_type[self.destructibleinfo].var_A2D[var_10][0].v["physicsOnExplosion"] > 0) + { + var_13 = level.destructible_type[self.destructibleinfo].var_A2D[var_10][0].v["physicsOnExplosion"]; + var_14 = self gettagorigin(var_0E); + var_15 = vectornormalize(var_14 - var_0F); + var_15 = var_15 * randomfloatrange(param_01,param_02) * var_13; + thread physics_launch(var_10,var_11,var_14,var_15); + continue; + } + } + } + } + + var_16 = !isdefined(param_06) || isdefined(param_06) && !param_06; + if(var_16) + { + self notify("stop_taking_damage"); + } + + if(!level.fast_destructible_explode) + { + wait 0.05; + } + + if(!isdefined(self)) + { + return; + } + + var_17 = var_0F + (0,0,param_07) + param_0B; + var_18 = getsubstr(level.destructible_type[self.destructibleinfo].v["type"],0,7) == "vehicle"; + if(var_18) + { + anim.lastcarexplosiontime = gettime(); + anim.lastcarexplosiondamagelocation = var_17; + anim.lastcarexplosionlocation = var_0F; + anim.lastcarexplosionrange = param_03; + } + + level thread set_disable_friendlyfire_value_delayed(1); + if(param_0C > 0) + { + wait param_0C; + } + + if(isdefined(level.destructible_protection_func)) + { + thread [[ level.destructible_protection_func ]](); + } + + if(common_scripts\utility::issp()) + { + if(level.gameskill == 0 && !player_touching_post_clip()) + { + self radiusdamage(var_17,param_03,param_05,param_04,self,"MOD_RIFLE_BULLET"); + } + else + { + self radiusdamage(var_17,param_03,param_05,param_04,self); + } + + if(isdefined(self.damageowner) && var_18) + { + self.damageowner notify("destroyed_car"); + level notify("player_destroyed_car",self.damageowner,var_17); + } + } + else + { + var_19 = "destructible_toy"; + if(var_18) + { + var_19 = "destructible_car"; + } + + if(!isdefined(self.damageowner)) + { + self radiusdamage(var_17,param_03,param_05,param_04,self,"MOD_EXPLOSIVE",var_19); + } + else + { + self radiusdamage(var_17,param_03,param_05,param_04,self.damageowner,"MOD_EXPLOSIVE",var_19); + if(var_18) + { + self.damageowner notify("destroyed_car"); + level notify("player_destroyed_car",self.damageowner,var_17); + } + } + } + + if(isdefined(param_08) && isdefined(param_09)) + { + earthquake(param_08,2,var_17,param_09); + } + + level thread set_disable_friendlyfire_value_delayed(0,0.05); + var_1A = 0.01; + var_1B = param_03 * var_1A; + param_03 = param_03 * 0.99; + physicsexplosionsphere(var_17,param_03,0,var_1B); + if(var_16) + { + self setcandamage(0); + thread cleanupvars(); + } + + self notify("destroyed"); +} + +//Function Number: 50 +cleanupvars() +{ + wait 0.05; + while(isdefined(self) && isdefined(self.waiting_for_queue)) + { + self waittill("queue_processed"); + wait 0.05; + } + + if(!isdefined(self)) + { + return; + } + + self.animsapplied = undefined; + self.attacker = undefined; + self.car_damage_owner_recorder = undefined; + self.var_A67 = undefined; + self.damageowner = undefined; + self.destructible_parts = undefined; + self.destructible_type = undefined; + self.destructibleinfo = undefined; + self.healthdrain = undefined; + self.non_player_damage = undefined; + self.player_damage = undefined; + if(!isdefined(level.destructible_cleans_up_more)) + { + return; + } + + self.script_noflip = undefined; + self.exploding = undefined; + self.loopingsoundstopnotifies = undefined; + self.car_alarm_org = undefined; +} + +//Function Number: 51 +set_disable_friendlyfire_value_delayed(param_00,param_01) +{ + level notify("set_disable_friendlyfire_value_delayed"); + level endon("set_disable_friendlyfire_value_delayed"); + if(isdefined(param_01)) + { + wait param_01; + } + + level.friendlyfiredisabledfordestructible = param_00; +} + +//Function Number: 52 +connecttraverses() +{ + var_00 = get_traverse_disconnect_brush(); + if(!isdefined(var_00)) + { + return; + } + + var_00 [[ level.connectpathsfunction ]](); + var_00.origin = var_00.origin - (0,0,10000); +} + +//Function Number: 53 +disconnecttraverses() +{ + var_00 = get_traverse_disconnect_brush(); + if(!isdefined(var_00)) + { + return; + } + + var_00.origin = var_00.origin + (0,0,10000); + var_00 [[ level.disconnectpathsfunction ]](); + var_00.origin = var_00.origin - (0,0,10000); +} + +//Function Number: 54 +get_traverse_disconnect_brush() +{ + if(!isdefined(self.target)) + { + return undefined; + } + + var_00 = getentarray(self.target,"targetname"); + foreach(var_02 in var_00) + { + if(isspawner(var_02)) + { + continue; + } + + if(isdefined(var_02.script_destruct_collision)) + { + continue; + } + + if(var_02.code_classname == "light") + { + continue; + } + + if(!var_02.spawnflags & 1) + { + continue; + } + + return var_02; + } +} + +//Function Number: 55 +hideapart(param_00) +{ + self hidepart(param_00); +} + +//Function Number: 56 +showapart(param_00) +{ + self showpart(param_00); +} + +//Function Number: 57 +disable_explosion() +{ + self.dontallowexplode = 1; +} + +//Function Number: 58 +force_explosion() +{ + self.dontallowexplode = undefined; + self.forceexploding = 1; + self notify("damage",100000,self,self.origin,self.origin,"MOD_EXPLOSIVE","",""); +} + +//Function Number: 59 +get_dummy() +{ + if(!common_scripts\utility::issp()) + { + return self; + } + + if(self.modeldummyon) + { + var_00 = self.modeldummy; + } + else + { + var_00 = self; + } + + return var_00; +} + +//Function Number: 60 +play_loop_sound_on_destructible(param_00,param_01) +{ + var_02 = get_dummy(); + var_03 = spawn("script_origin",(0,0,0)); + if(isdefined(param_01)) + { + var_03.origin = var_02 gettagorigin(param_01); + } + else + { + var_03.origin = var_02.origin; + } + + var_03 playloopsound(param_00); + var_02 thread force_stop_sound(param_00); + var_02 waittill("stop sound" + param_00); + if(!isdefined(var_03)) + { + return; + } + + var_03 stoploopsound(param_00); + var_03 delete(); +} + +//Function Number: 61 +force_stop_sound(param_00) +{ + self endon("stop sound" + param_00); + level waittill("putout_fires"); + self notify("stop sound" + param_00); +} + +//Function Number: 62 +notifydamageafterframe(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + if(isdefined(level.notifydamageafterframe)) + { + return; + } + + level.notifydamageafterframe = 1; + waittillframeend; + if(isdefined(self.exploded)) + { + level.notifydamageafterframe = undefined; + return; + } + + if(common_scripts\utility::issp()) + { + param_00 = param_00 / 0.5; + } + else + { + param_00 = param_00 / 1; + } + + self notify("damage",param_00,param_01,param_02,param_03,param_04,param_05,param_06); + level.notifydamageafterframe = undefined; +} + +//Function Number: 63 +play_sound(param_00,param_01) +{ + if(isdefined(param_01)) + { + var_02 = spawn("script_origin",self gettagorigin(param_01)); + var_02 hide(); + var_02 linkto(self,param_01,(0,0,0),(0,0,0)); + } + else + { + var_02 = spawn("script_origin",(0,0,0)); + var_02 hide(); + var_02.origin = self.origin; + var_02.angles = self.angles; + var_02 linkto(self); + } + + var_02 playsound(param_00); + wait 5; + if(isdefined(var_02)) + { + var_02 delete(); + } +} + +//Function Number: 64 +func_0A7A(param_00) +{ + return "" + param_00; +} + +//Function Number: 65 +do_car_alarm() +{ + if(isdefined(self.var_A67)) + { + return; + } + + self.var_A67 = 1; + if(!func_0A7E()) + { + return; + } + + self.car_alarm_org = spawn("script_model",self.origin); + self.car_alarm_org hide(); + self.car_alarm_org playloopsound("car_alarm"); + level.currentcaralarms++; + thread func_0A7D(); + self waittill("stop_car_alarm"); + level.var_A7C = gettime(); + level.currentcaralarms--; + self.car_alarm_org stoploopsound("car_alarm"); + self.car_alarm_org delete(); +} + +//Function Number: 66 +func_0A7D() +{ + self endon("stop_car_alarm"); + wait 25; + if(!isdefined(self)) + { + return; + } + + thread play_sound("car_alarm_off"); + self notify("stop_car_alarm"); +} + +//Function Number: 67 +func_0A7E() +{ + if(level.currentcaralarms >= 2) + { + return 0; + } + + var_00 = undefined; + if(!isdefined(level.var_A7C)) + { + if(common_scripts\utility::cointoss()) + { + return 1; + } + + var_00 = gettime() - level.commonstarttime; + } + else + { + var_00 = gettime() - level.var_A7C; + } + + if(level.currentcaralarms == 0 && var_00 >= 120) + { + return 1; + } + + if(randomint(100) <= 33) + { + return 1; + } + + return 0; +} + +//Function Number: 68 +do_random_dynamic_attachment(param_00,param_01,param_02,param_03) +{ + var_04 = []; + if(common_scripts\utility::issp()) + { + self attach(param_01,param_00,0); + if(isdefined(param_02) && param_02 != "") + { + self attach(param_02,param_00,0); + } + } + else + { + var_41[0].angles = self gettagangles(param_01); + var_41[0] setmodel(param_02); + var_41[0] linkto(self,param_01); + if(isdefined(param_03) && param_03 != "") + { + var_41[1].angles = self gettagangles(param_01); + var_41[1] setmodel(param_03); + var_41[1] linkto(self,param_01); + } + } + + if(isdefined(var_04)) + { + var_05 = self gettagorigin(param_01); + var_06 = get_closest_with_targetname(var_05,var_04); + if(isdefined(var_06)) + { + var_06 delete(); + } + } + + self waittill(spawn("script_model",self gettagorigin(param_00)),var_41[0],spawn("script_model",self gettagorigin(param_01)),var_41[1],"exploded"); + if(common_scripts\utility::issp()) + { + self detach(param_02,param_01); + self attach(param_02 + "_destroy",param_01,0); + if(isdefined(param_03) && param_03 != "") + { + self detach(param_03,param_01); + self attach(param_03 + "_destroy",param_01,0); + return; + } + + return; + } + + var_41[0] setmodel(param_02 + "_destroy"); + if(isdefined(param_03) && param_03 != "") + { + var_41[1] setmodel(param_03 + "_destroy"); + } +} + +//Function Number: 69 +get_closest_with_targetname(param_00,param_01) +{ + var_02 = undefined; + var_03 = undefined; + var_04 = getentarray(param_01,"targetname"); + foreach(var_06 in var_04) + { + var_07 = distancesquared(param_00,var_06.origin); + if(!isdefined(var_02) || var_07 < var_02) + { + var_02 = var_07; + var_03 = var_06; + } + } + + return var_03; +} + +//Function Number: 70 +player_touching_post_clip() +{ + var_00 = undefined; + if(!isdefined(self.target)) + { + return 0; + } + + var_01 = getentarray(self.target,"targetname"); + foreach(var_03 in var_01) + { + if(isdefined(var_03.script_destruct_collision) && var_03.script_destruct_collision == "post") + { + var_00 = var_03; + break; + } + } + + if(!isdefined(var_00)) + { + return 0; + } + + var_05 = get_player_touching(var_00); + if(isdefined(var_05)) + { + return 1; + } + + return 0; +} + +//Function Number: 71 +get_player_touching(param_00) +{ + foreach(var_02 in level.players) + { + if(!isalive(var_02)) + { + continue; + } + + if(param_00 istouching(var_02)) + { + return var_02; + } + } + + return undefined; +} + +//Function Number: 72 +is_so() +{ + return getdvar("specialops") == "1"; +} + +//Function Number: 73 +destructible_handles_collision_brushes() +{ + var_00 = getentarray(self.target,"targetname"); + var_01 = []; + foreach(var_03 in var_01) + { + if(!isdefined(var_03.script_destruct_collision)) + { + continue; + } + + self thread [[ var_41[var_03.script_destruct_collision] ]](var_03); + } +} + +//Function Number: 74 +collision_brush_pre_explosion(param_00) +{ + waittillframeend; + if(common_scripts\utility::issp() && param_00.spawnflags & 1) + { + param_00 [[ level.disconnectpathsfunction ]](); + } + + self waittill("exploded"); + if(common_scripts\utility::issp() && param_00.spawnflags & 1) + { + param_00 [[ level.connectpathsfunction ]](); + } + + param_00 delete(); +} + +//Function Number: 75 +collision_brush_post_explosion(param_00) +{ + param_00 notsolid(); + if(common_scripts\utility::issp() && param_00.spawnflags & 1) + { + param_00 [[ level.connectpathsfunction ]](); + } + + self waittill("exploded"); + waittillframeend; + if(common_scripts\utility::issp()) + { + if(param_00.spawnflags & 1) + { + param_00 [[ level.disconnectpathsfunction ]](); + } + + if(is_so()) + { + var_01 = get_player_touching(param_00); + if(isdefined(var_01)) + { + self thread [[ level.func_destructible_crush_player ]](var_01); + } + } + else + { + } + } + + param_00 solid(); +} + +//Function Number: 76 +debug_player_in_post_clip(param_00) +{ +} + +//Function Number: 77 +destructible_get_my_breakable_light(param_00) +{ + var_01 = getentarray("light_destructible","targetname"); + if(common_scripts\utility::issp()) + { + var_02 = getentarray("light_destructible","script_noteworthy"); + var_01 = common_scripts\utility::array_combine(var_01,var_02); + } + + if(!var_01.size) + { + return; + } + + var_03 = param_00 * param_00; + var_04 = undefined; + foreach(var_06 in var_01) + { + var_07 = distancesquared(self.origin,var_06.origin); + if(var_07 < var_03) + { + var_04 = var_06; + var_03 = var_07; + } + } + + if(!isdefined(var_04)) + { + return; + } + + self.breakable_light = var_04; +} + +//Function Number: 78 +break_nearest_light(param_00) +{ + if(!isdefined(self.breakable_light)) + { + return; + } + + self.breakable_light setlightintensity(0); +} + +//Function Number: 79 +debug_radiusdamage_circle(param_00,param_01,param_02,param_03) +{ + var_04 = 16; + var_05 = 360 / var_04; + var_06 = []; + for(var_07 = 0;var_07 < var_04;var_07++) + { + var_08 = var_05 * var_07; + var_09 = cos(var_08) * param_01; + var_0A = sin(var_08) * param_01; + var_0B = param_00[0] + var_09; + var_0C = param_00[1] + var_0A; + var_0D = param_00[2]; + var_06[var_06.size] = (var_0B,var_0C,var_0D); + } + + thread debug_circle_drawlines(var_06,5,(1,0,0),param_00); + var_06 = []; + for(var_07 = 0;var_07 < var_04;var_07++) + { + var_08 = var_05 * var_07; + var_09 = cos(var_08) * param_01; + var_0A = sin(var_08) * param_01; + var_0B = param_00[0]; + var_0C = param_00[1] + var_09; + var_0D = param_00[2] + var_0A; + var_06[var_06.size] = (var_0B,var_0C,var_0D); + } + + thread debug_circle_drawlines(var_06,5,(1,0,0),param_00); + var_06 = []; + for(var_07 = 0;var_07 < var_04;var_07++) + { + var_08 = var_05 * var_07; + var_09 = cos(var_08) * param_01; + var_0A = sin(var_08) * param_01; + var_0B = param_00[0] + var_0A; + var_0C = param_00[1]; + var_0D = param_00[2] + var_09; + var_06[var_06.size] = (var_0B,var_0C,var_0D); + } + + thread debug_circle_drawlines(var_06,5,(1,0,0),param_00); +} + +//Function Number: 80 +debug_circle_drawlines(param_00,param_01,param_02,param_03) +{ + for(var_04 = 0;var_04 < param_00.size;var_04++) + { + var_05 = param_00[var_04]; + if(var_04 + 1 >= param_00.size) + { + var_06 = param_00[0]; + } + else + { + var_06 = param_00[var_04 + 1]; + } + + thread debug_line(var_05,var_06,param_01,param_02); + thread debug_line(param_03,var_05,param_01,param_02); + } +} + +//Function Number: 81 +debug_line(param_00,param_01,param_02,param_03) +{ + if(!isdefined(param_03)) + { + param_03 = (1,1,1); + } + + for(var_04 = 0;var_04 < param_02 * 20;var_04++) + { + wait 0.05; + } +} + +//Function Number: 82 +spotlight_tag_origin_cleanup(param_00) +{ + param_00 endon("death"); + level waittill("new_destructible_spotlight"); + param_00 delete(); +} + +//Function Number: 83 +spotlight_fizzles_out(param_00,param_01,param_02,param_03,param_04) +{ + level endon("new_destructible_spotlight"); + thread spotlight_tag_origin_cleanup(param_04); + var_05 = param_00["spotlight_brightness"]; + common_scripts\utility::noself_func("setsaveddvar","r_spotlightbrightness",var_05); + wait randomfloatrange(2,5); + var_06 = randomintrange(5,11); + for(var_07 = 0;var_07 < var_06;var_07++) + { + common_scripts\utility::noself_func("setsaveddvar","r_spotlightbrightness",var_05 * 0.65); + wait 0.05; + common_scripts\utility::noself_func("setsaveddvar","r_spotlightbrightness",var_05); + wait 0.05; + } + + destructible_fx_think(param_00,param_01,param_02,param_03); + level.destructible_spotlight delete(); + param_04 delete(); +} + +//Function Number: 84 +destructible_spotlight_think(param_00,param_01,param_02,param_03) +{ + if(!common_scripts\utility::issp()) + { + return; + } + + if(!isdefined(self.breakable_light)) + { + return; + } + + param_01 common_scripts\utility::self_func("startignoringspotLight"); + foreach(var_06, var_05 in param_00["dvars"]) + { + common_scripts\utility::noself_func("setsaveddvar",var_06,var_05); + } + + if(!isdefined(level.destructible_spotlight)) + { + level.destructible_spotlight = common_scripts\utility::spawn_tag_origin(); + var_07 = common_scripts\utility::func_539(param_00["spotlight_fx"]); + playfxontag(var_07,level.destructible_spotlight,"tag_origin"); + } + + level notify("new_destructible_spotlight"); + level.destructible_spotlight unlink(); + var_08 = common_scripts\utility::spawn_tag_origin(); + var_08 linkto(self,param_00["spotlight_tag"],(0,0,0),(0,0,0)); + level.destructible_spotlight.origin = self.breakable_light.origin; + level.destructible_spotlight.angles = self.breakable_light.angles; + level.destructible_spotlight thread spotlight_fizzles_out(param_00,param_01,param_02,param_03,var_08); + wait 0.05; + if(isdefined(var_08)) + { + level.destructible_spotlight linkto(var_08); + } +} + +//Function Number: 85 +is_valid_damagetype(param_00,param_01,param_02,param_03) +{ + var_04 = undefined; + if(isdefined(param_01["fx_valid_damagetype"])) + { + var_04 = param_01["fx_valid_damagetype"][param_03][param_02]; + } + + if(!isdefined(var_04)) + { + return 1; + } + + return issubstr(var_04,param_00); +} + +//Function Number: 86 +destructible_sound_think(param_00,param_01,param_02,param_03) +{ + if(isdefined(self.exploded)) + { + return undefined; + } + + if(!isdefined(param_00["sound"])) + { + return undefined; + } + + if(!isdefined(param_03)) + { + param_03 = 0; + } + + for(var_04 = 0;var_04 < param_00["sound"][param_03].size;var_04++) + { + var_05 = isvalidsoundcause("soundCause",param_00,var_04,param_02,param_03); + if(!var_05) + { + continue; + } + + var_06 = param_00["sound"][param_03][var_04]; + var_07 = param_00["tagName"]; + param_01 thread play_sound(var_06,var_07); + } + + return param_03; +} + +//Function Number: 87 +destructible_fx_think(param_00,param_01,param_02,param_03,param_04) +{ + if(!isdefined(param_00["fx"])) + { + return undefined; + } + + if(!isdefined(param_04)) + { + param_04 = randomint(param_00["fx_filename"].size); + } + + if(!isdefined(param_00["fx"][param_04])) + { + param_04 = randomint(param_00["fx_filename"].size); + } + + var_05 = param_00["fx_filename"][param_04].size; + for(var_06 = 0;var_06 < var_05;var_06++) + { + if(!is_valid_damagetype(param_02,param_00,var_06,param_04)) + { + continue; + } + + var_07 = param_00["fx"][param_04][var_06]; + if(isdefined(param_00["fx_tag"][param_04][var_06])) + { + var_08 = param_00["fx_tag"][param_04][var_06]; + self notify("FX_State_Change" + param_03); + if(param_00["fx_useTagAngles"][param_04][var_06]) + { + playfxontag(var_07,param_01,var_08); + } + else + { + var_09 = param_01 gettagorigin(var_08); + var_0A = var_09 + (0,0,100) - var_09; + playfx(var_07,var_09,var_0A); + } + + continue; + } + + var_09 = param_01.origin; + var_0A = var_09 + (0,0,100) - var_09; + playfx(var_07,var_09,var_0A); + } + + return param_04; +} + +//Function Number: 88 +destructible_animation_think(param_00,param_01,param_02,param_03) +{ + if(isdefined(self.exploded)) + { + return undefined; + } + + if(!isdefined(param_00["animation"])) + { + return undefined; + } + + if(isdefined(self.var_A96)) + { + return undefined; + } + + if(isdefined(param_00["randomly_flip"]) && !isdefined(self.script_noflip)) + { + if(common_scripts\utility::cointoss()) + { + self.angles = self.angles + (0,180,0); + } + } + + if(isdefined(param_00["spotlight_tag"])) + { + thread destructible_spotlight_think(param_00,param_01,param_02,param_03); + wait 0.05; + } + + var_04 = common_scripts\utility::random(param_00["animation"]); + var_05 = var_04["anim"]; + var_06 = var_04["animTree"]; + var_07 = var_04["groupNum"]; + var_08 = var_04["mpAnim"]; + var_09 = var_04["maxStartDelay"]; + var_0A = var_04["animRateMin"]; + var_0B = var_04["animRateMax"]; + if(!isdefined(var_0A)) + { + var_0A = 1; + } + + if(!isdefined(var_0B)) + { + var_0B = 1; + } + + if(var_0A == var_0B) + { + var_0C = var_0A; + } + else + { + var_0C = randomfloatrange(var_0B,var_0C); + } + + var_0D = var_04["vehicle_exclude_anim"]; + if(self.code_classname == "script_vehicle" && var_0D) + { + return undefined; + } + + param_01 common_scripts\utility::self_func("useanimtree",var_06); + var_0E = var_04["animType"]; + if(!isdefined(self.animsapplied)) + { + self.animsapplied = []; + } + + self.animsapplied[self.animsapplied.size] = var_05; + if(isdefined(self.exploding)) + { + clear_anims(param_01); + } + + if(isdefined(var_09) && var_09 > 0) + { + wait randomfloat(var_09); + } + + if(!common_scripts\utility::issp()) + { + if(isdefined(var_08)) + { + common_scripts\utility::self_func("scriptModelPlayAnim",var_08); + } + + return var_07; + } + + if(var_0E == "setanim") + { + param_01 common_scripts\utility::self_func("setanim",var_05,1,1,var_0C); + return var_07; + } + + if(var_0E == "setanimknob") + { + param_01 common_scripts\utility::self_func("setanimknob",var_05,1,0,var_0C); + return var_07; + } + + return undefined; +} + +//Function Number: 89 +clear_anims(param_00) +{ + if(isdefined(self.animsapplied)) + { + foreach(var_02 in self.animsapplied) + { + if(common_scripts\utility::issp()) + { + param_00 common_scripts\utility::self_func("clearanim",var_02,0); + continue; + } + + param_00 common_scripts\utility::self_func("scriptModelClearAnim"); + } + } +} + +//Function Number: 90 +init_destroyed_count() +{ + level.destroyedcount = 0; + level.destroyedcounttimeout = 0.5; + if(common_scripts\utility::issp()) + { + level.var_A9B = 20; + return; + } + + level.var_A9B = 2; +} + +//Function Number: 91 +add_to_destroyed_count() +{ + level.destroyedcount++; + wait level.destroyedcounttimeout; + level.destroyedcount--; +} + +//Function Number: 92 +get_destroyed_count() +{ + return level.destroyedcount; +} + +//Function Number: 93 +get_max_destroyed_count() +{ + return level.var_A9B; +} + +//Function Number: 94 +init_destructible_frame_queue() +{ + level.destructibleframequeue = []; +} + +//Function Number: 95 +add_destructible_to_frame_queue(param_00,param_01,param_02) +{ + var_03 = self getentitynumber(); + if(!isdefined(level.destructibleframequeue[var_03])) + { + level.destructibleframequeue[var_03] = spawnstruct(); + level.destructibleframequeue[var_03].entnum = var_03; + level.destructibleframequeue[var_03].destructible = param_00; + level.destructibleframequeue[var_03].totaldamage = 0; + level.destructibleframequeue[var_03].neardistance = 9999999; + level.destructibleframequeue[var_03].fxcost = 0; + } + + level.destructibleframequeue[var_03].fxcost = level.destructibleframequeue[var_03].fxcost + param_01.v["fxcost"]; + level.destructibleframequeue[var_03].totaldamage = level.destructibleframequeue[var_03].totaldamage + param_02; + if(param_01.v["distance"] < level.destructibleframequeue[var_03].neardistance) + { + level.destructibleframequeue[var_03].neardistance = param_01.v["distance"]; + } + + thread handle_destructible_frame_queue(); +} + +//Function Number: 96 +handle_destructible_frame_queue() +{ + level notify("handle_destructible_frame_queue"); + level endon("handle_destructible_frame_queue"); + wait 0.05; + var_00 = level.destructibleframequeue; + level.destructibleframequeue = []; + var_01 = sort_destructible_frame_queue(var_00); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + if(get_destroyed_count() < get_max_destroyed_count()) + { + if(var_01[var_02].fxcost) + { + thread add_to_destroyed_count(); + } + + var_01[var_02].destructible notify("queue_processed",1); + continue; + } + + var_01[var_02].destructible notify("queue_processed",0); + } +} + +//Function Number: 97 +sort_destructible_frame_queue(param_00) +{ + var_01 = []; + foreach(var_03 in param_00) + { + var_01[var_01.size] = var_03; + } + + for(var_05 = 1;var_05 < var_01.size;var_05++) + { + var_06 = var_01[var_05]; + for(var_07 = var_05 - 1;var_07 >= 0 && get_better_destructible(var_06,var_01[var_07]) == var_06;var_07--) + { + var_01[var_07 + 1] = var_01[var_07]; + } + + var_01[var_07 + 1] = var_06; + } + + return var_01; +} + +//Function Number: 98 +get_better_destructible(param_00,param_01) +{ + if(param_00.totaldamage > param_01.totaldamage) + { + return param_00; + } + + return param_01; +} + +//Function Number: 99 +get_part_fx_cost_for_action_state(param_00,param_01) +{ + var_02 = 0; + if(!isdefined(level.destructible_type[self.destructibleinfo].var_A2D[param_00][param_01])) + { + return var_02; + } + + var_03 = level.destructible_type[self.destructibleinfo].var_A2D[param_00][param_01].v; + if(isdefined(var_03["fx"])) + { + foreach(var_05 in var_03["fx_cost"]) + { + foreach(var_07 in var_05) + { + var_02 = var_02 + var_07; + } + } + } + + return var_02; +} \ No newline at end of file diff --git a/MW3/Xbox/SP/common_scripts/_destructible_types.gsc b/MW3/Xbox/SP/common_scripts/_destructible_types.gsc new file mode 100644 index 0000000..16db75d --- /dev/null +++ b/MW3/Xbox/SP/common_scripts/_destructible_types.gsc @@ -0,0 +1,6201 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: common_scripts\_destructible_types.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 161 + * Decompile Time: 2089 ms + * Timestamp: 10/27/2023 2:32:21 AM +*******************************************************************/ + +//Function Number: 1 +maketype(param_00) +{ + var_01 = getinfoindex(param_00); + if(var_01 >= 0) + { + return var_01; + } + + switch(param_00) + { + case "rus_vx_gas_canister": + rus_vx_gas_canister(param_00); + break; + + case "prop_ac_prs_enm_barge_a_1": + prop_ac_prs_enm_barge_a_1(); + break; + + case "prop_ac_prs_enm_barge_a_2": + prop_ac_prs_enm_barge_a_2(); + break; + + case "prop_ac_prs_enm_con_digger_a": + prop_ac_prs_enm_con_digger_a(); + break; + + case "prop_ac_prs_enm_con_dump_truck_a": + func_0979(); + break; + + case "prop_ac_prs_enm_fuel_tank_a": + prop_ac_prs_enm_fuel_tank_a(); + break; + + case "vehicle_jeep": + vehicle_jeep(param_00); + break; + + case "vehicle_uaz_van_destructible": + vehicle_uaz_van(param_00); + break; + + case "prop_ac_prs_enm_hanger_a": + prop_ac_prs_enm_hanger_a(); + break; + + case "prop_ac_prs_enm_maz_a": + prop_ac_prs_enm_maz_a(); + break; + + case "prop_ac_prs_enm_mi26_halo_a": + prop_ac_prs_enm_mi26_halo_a(); + break; + + case "prop_ac_prs_enm_mstas_a": + prop_ac_prs_enm_mstas_a(); + break; + + case "prop_ac_prs_enm_radar_maz_a": + prop_ac_prs_enm_radar_maz_a(); + break; + + case "prop_ac_prs_enm_s300v_a": + prop_ac_prs_enm_s300v_a(); + break; + + case "prop_ac_prs_enm_storage_bld_a_1": + prop_ac_prs_enm_storage_bld_a_1(); + break; + + case "prop_ac_prs_enm_storage_bld_a_2": + prop_ac_prs_enm_storage_bld_a_2(); + break; + + case "prop_ac_prs_enm_storage_bld_b": + prop_ac_prs_enm_storage_bld_b(); + break; + + case "vehicle_semi_truck": + vehicle_semi_truck(); + break; + + case "prop_ac_prs_enm_tent_a": + prop_ac_prs_enm_tent_a(); + break; + + case "prop_ac_prs_enm_tent_b": + prop_ac_prs_enm_tent_b(); + break; + + case "prop_ac_prs_enm_tent_c": + prop_ac_prs_enm_tent_c(); + break; + + case "prop_ac_prs_enm_truck_a": + prop_ac_prs_enm_truck_a(); + break; + + case "prop_ac_prs_enm_cargo_crate_a_1": + prop_ac_prs_enm_cargo_crate_a_1(); + break; + + case "prop_ac_prs_enm_cargo_crate_a_2": + prop_ac_prs_enm_cargo_crate_a_2(); + break; + + case "prop_ac_prs_enm_crates_a_1": + prop_ac_prs_enm_crates_a_1(); + break; + + case "prop_ac_prs_enm_crates_a_2": + func_098B(); + break; + + case "prop_ac_prs_enm_crates_b_1": + prop_ac_prs_enm_crates_b_1(); + break; + + case "prop_ac_prs_enm_crates_b_2": + prop_ac_prs_enm_crates_b_2(); + break; + + case "prop_ac_prs_enm_mobile_crane_a": + prop_ac_prs_enm_mobile_crane_a(); + break; + + case "prop_ac_prs_enm_landing_craft_a": + prop_ac_prs_enm_landing_craft_a(); + break; + + case "prop_ac_prs_enm_speed_boat_a": + prop_ac_prs_enm_speed_boat_a(); + break; + + case "prop_ac_prs_prp_satellite_dish_a_dish": + prop_ac_prs_prp_satellite_dish_a_dish(); + break; + + case "prop_ac_prs_fps_hc_extc_balcony_a1": + prop_ac_prs_fps_hc_extc_balcony_a1(); + break; + + case "prop_ac_prs_fps_hc_extc_balcony_a2": + prop_ac_prs_fps_hc_extc_balcony_a2(); + break; + + case "prop_ac_prs_fps_hc_extc_balcony_a3": + prop_ac_prs_fps_hc_extc_balcony_a3(); + break; + + case "prop_ac_prs_fps_hc_extc_balcony_b1": + prop_ac_prs_fps_hc_extc_balcony_b1(); + break; + + case "prop_ac_prs_fps_hc_extc_balcony_b2": + prop_ac_prs_fps_hc_extc_balcony_b2(); + break; + + case "prop_ac_prs_fps_hc_extc_balcony_b3": + prop_ac_prs_fps_hc_extc_balcony_b3(); + break; + + case "prop_ac_prs_fps_hc_extc_balcony_c1": + prop_ac_prs_fps_hc_extc_balcony_c1(); + break; + + case "prop_ac_prs_fps_hc_extc_balcony_c2": + prop_ac_prs_fps_hc_extc_balcony_c2(); + break; + + case "prop_ac_prs_fps_hc_extc_column_b_a1": + prop_ac_prs_fps_hc_extc_column_b_a1(); + break; + + case "prop_ac_prs_fps_hc_extc_column_b_a2": + prop_ac_prs_fps_hc_extc_column_b_a2(); + break; + + case "prop_ac_prs_fps_hc_extc_column_b_a3": + func_099C(); + break; + + case "prop_ac_prs_fps_hc_extc_column_t_a1": + prop_ac_prs_fps_hc_extc_column_t_a1(); + break; + + case "prop_ac_prs_fps_hc_extc_column_t_a2": + prop_ac_prs_fps_hc_extc_column_t_a2(); + break; + + case "prop_ac_prs_fps_hc_extc_column_t_a3": + prop_ac_prs_fps_hc_extc_column_t_a3(); + break; + + case "prop_ac_prs_enm_missile_boat_a": + prop_ac_prs_enm_missile_boat_a(); + break; + + case "toy_glass120x110": + toy_glass("120x110"); + break; + + case "vehicle_mini_destructible_blue": + vehicle_mini("blue"); + break; + + case "vehicle_mini_destructible_gray": + vehicle_mini("gray"); + break; + + case "vehicle_mini_destructible_white": + vehicle_mini("white"); + break; + + case "vehicle_mini_destructible_red": + vehicle_mini("red"); + break; + + case "toy_glass120x44": + toy_glass("120x44"); + break; + + case "toy_glass56x59": + toy_glass("56x59"); + break; + + case "toy_glass74x110": + toy_glass("74x110"); + break; + + case "toy_glass74x44": + toy_glass("74x44"); + break; + + case "toy_dt_mirror": + toy_dt_mirror(""); + break; + + case "toy_dt_mirror_large": + toy_dt_mirror("_large"); + break; + + case "toy_icbm_consolemonitor1": + toy_icbm_consolemonitor("1"); + break; + + case "toy_icbm_consolemonitor2": + toy_icbm_consolemonitor("2"); + break; + + case "toy_icbm_consolemonitor3": + toy_icbm_consolemonitor("3"); + break; + + case "toy_icbm_consolemonitor4": + toy_icbm_consolemonitor("4"); + break; + + case "toy_icbm_consolemonitor5": + toy_icbm_consolemonitor("5"); + break; + + case "toy_icbm_consolemonitor6": + toy_icbm_consolemonitor("6"); + break; + + case "toy_tubetv_tv1": + toy_tubetv_("tv1"); + break; + + case "toy_tubetv_tv2": + toy_tubetv_("tv2"); + break; + + case "toy_tv_flatscreen_01": + toy_tvs_flatscreen("01",""); + break; + + case "toy_tv_flatscreen_02": + toy_tvs_flatscreen("02",""); + break; + + case "toy_tv_flatscreen_wallmount_01": + toy_tvs_flatscreen("01","wallmount_"); + break; + + case "toy_tv_flatscreen_wallmount_01_sturdy": + func_09A9("01","wallmount_"); + break; + + case "toy_tv_flatscreen_wallmount_02": + toy_tvs_flatscreen("02","wallmount_"); + break; + + case "toy_transformer_ratnest01": + toy_transformer_ratnest01(param_00); + break; + + case "toy_transformer_small01": + toy_transformer_small01(param_00); + break; + + case "toy_generator": + toy_generator(param_00); + break; + + case "toy_generator_on": + func_09B0(param_00); + break; + + case "toy_oxygen_tank_01": + toy_oxygen_tank("01"); + break; + + case "toy_oxygen_tank_02": + toy_oxygen_tank("02"); + break; + + case "toy_electricbox2": + toy_electricbox2(param_00); + break; + + case "toy_electricbox4": + toy_electricbox4(param_00); + break; + + case "toy_airconditioner": + toy_airconditioner(param_00); + break; + + case "toy_ceiling_fan": + toy_ceiling_fan(param_00); + break; + + case "toy_wall_fan": + toy_wall_fan(param_00); + break; + + case "toy_propane_tank02": + toy_propane_tank02(param_00); + break; + + case "toy_propane_tank02_small": + toy_propane_tank02_small(param_00); + break; + + case "toy_copier": + toy_copier(param_00); + break; + + case "toy_firehydrant": + toy_firehydrant(param_00); + break; + + case "toy_parkingmeter": + toy_parkingmeter(param_00); + break; + + case "toy_mailbox": + func_09BE(param_00); + break; + + case "toy_mailbox2_black": + toy_mailbox2("black"); + break; + + case "toy_mailbox2_green": + toy_mailbox2("green"); + break; + + case "toy_mailbox2_yellow": + toy_mailbox2("yellow"); + break; + + case "toy_newspaper_stand_red": + toy_newspaper_stand_red(param_00); + break; + + case "toy_newspaper_stand_blue": + func_09C1(param_00); + break; + + case "toy_filecabinet": + toy_filecabinet(param_00); + break; + + case "toy_trashbin_01": + toy_trashbin_01(param_00); + break; + + case "toy_trashbin_02": + func_09C4(param_00); + break; + + case "toy_trashbag1_white": + toy_trashbag1("white"); + break; + + case "toy_trashbag1_black": + toy_trashbag1("black"); + break; + + case "toy_trashbag1_green": + toy_trashbag1("green"); + break; + + case "toy_recyclebin_01": + toy_recyclebin_01(param_00); + break; + + case "toy_trashcan_metal_closed": + toy_trashcan_metal_closed(param_00); + break; + + case "toy_water_collector": + toy_water_collector(param_00); + break; + + case "toy_foliage_tree_oak_1": + toy_foliage_tree_oak_1(param_00); + break; + + case "toy_paris_tree_plane_large": + toy_paris_tree_plane_large(param_00); + break; + + case "toy_usa_gas_station_trash_bin_01": + toy_usa_gas_station_trash_bin_01(param_00); + break; + + case "toy_usa_gas_station_trash_bin_02": + toy_usa_gas_station_trash_bin_02(param_00); + break; + + case "toy_light_ceiling_round": + func_09CD(param_00); + break; + + case "toy_light_ceiling_fluorescent": + toy_light_ceiling_fluorescent(param_00); + break; + + case "toy_light_ceiling_fluorescent_spotlight": + toy_light_ceiling_fluorescent_spotlight(param_00); + break; + + case "toy_light_ceiling_fluorescent_single": + toy_light_ceiling_fluorescent_single(param_00); + break; + + case "toy_light_ceiling_fluorescent_single_spotlight": + toy_light_ceiling_fluorescent_single_spotlight(param_00); + break; + + case "toy_bookstore_bookstand4_books": + toy_bookstore_bookstand4_books(param_00); + break; + + case "toy_locker_double": + toy_locker_double(param_00); + break; + + case "toy_chicken": + toy_chicken(""); + break; + + case "toy_chicken_white": + toy_chicken("_white"); + break; + + case "toy_chicken_black_white": + toy_chicken("_black_white"); + break; + + case "toy_luggage_01": + toy_hide_with_fx("toy_luggage_01","luggage1_lod0","maps/hijack/luggage_1_des_hjk",120); + break; + + case "toy_luggage_02": + toy_hide_with_fx("toy_luggage_02","luggage2_lod0","maps/hijack/luggage_2_des_hjk",120); + break; + + case "toy_luggage_03": + toy_hide_with_fx("toy_luggage_03","luggage3_lod0","maps/hijack/luggage_3_des_hjk",120); + break; + + case "toy_luggage_04": + toy_hide_with_fx("toy_luggage_04","luggage4_lod0","maps/hijack/luggage_4_des_hjk",120); + break; + + case "toy_com_cardboardbox_dusty_05": + toy_hide_with_fx("toy_com_cardboardbox_dusty_05","cardboardbox_5_lod0","props/cardboardbox01_snacks_exp",30); + break; + + case "toy_com_cardboardboxshortclosed_1": + toy_hide_with_fx("toy_com_cardboardboxshortclosed_1","cardboardboxshortclosed_1_lod0","props/cardboardboxshortclosed_snacks_exp",30); + break; + + case "intro_gate_column_02_dest_01": + toy_intro_concrete_chipaway("intro_gate_column_02_dest_01",12); + break; + + case "intro_concrete_junkyardwall_01": + toy_intro_concrete_chipaway("intro_concrete_junkyardwall_01",9); + break; + + case "intro_concrete_kneehighwall_01": + toy_intro_concrete_chipaway("intro_concrete_kneehighwall_01",8); + break; + + case "dub_lobby_fish_sculpture_left_orange": + toy_dubai_fish_sculpture("dub_lobby_fish_sculpture_left_orange","orange",40); + break; + + case "dub_lobby_fish_sculpture_right_orange": + toy_dubai_fish_sculpture("dub_lobby_fish_sculpture_right_orange","orange",40); + break; + + case "dub_lobby_fish_sculpture_left_blue": + toy_dubai_fish_sculpture("dub_lobby_fish_sculpture_left_blue","blue",45); + break; + + case "dub_lobby_fish_sculpture_right_blue": + toy_dubai_fish_sculpture("dub_lobby_fish_sculpture_right_blue","blue",45); + break; + + case "dub_lobby_fish_sculpture_left_purple": + toy_dubai_fish_sculpture("dub_lobby_fish_sculpture_left_purple","purple",39); + break; + + case "dub_lobby_fish_sculpture_right_purple": + toy_dubai_fish_sculpture("dub_lobby_fish_sculpture_right_purple","purple",39); + break; + + case "vehicle_ac130_80s_sedan1_yel": + vehicle_ac130_80s_sedan1("yel"); + break; + + case "vehicle_bus_destructible": + vehicle_bus_destructible(param_00); + break; + + case "vehicle_80s_sedan1_green": + vehicle_80s_sedan1("green"); + break; + + case "vehicle_80s_sedan1_red": + vehicle_80s_sedan1("red"); + break; + + case "vehicle_80s_sedan1_silv": + vehicle_80s_sedan1("silv"); + break; + + case "vehicle_80s_sedan1_tan": + vehicle_80s_sedan1("tan"); + break; + + case "vehicle_80s_sedan1_yel": + vehicle_80s_sedan1("yel"); + break; + + case "vehicle_80s_sedan1_brn": + vehicle_80s_sedan1("brn"); + break; + + case "vehicle_80s_hatch1_green": + vehicle_80s_hatch1("green"); + break; + + case "vehicle_80s_hatch1_red": + vehicle_80s_hatch1("red"); + break; + + case "vehicle_80s_hatch1_silv": + vehicle_80s_hatch1("silv"); + break; + + case "vehicle_80s_hatch1_tan": + vehicle_80s_hatch1("tan"); + break; + + case "vehicle_80s_hatch1_yel": + vehicle_80s_hatch1("yel"); + break; + + case "vehicle_80s_hatch1_brn": + vehicle_80s_hatch1("brn"); + break; + + case "vehicle_80s_hatch2_green": + func_09DE("green"); + break; + + case "vehicle_80s_hatch2_red": + func_09DE("red"); + break; + + case "vehicle_80s_hatch2_silv": + func_09DE("silv"); + break; + + case "vehicle_80s_hatch2_tan": + func_09DE("tan"); + break; + + case "vehicle_80s_hatch2_yel": + func_09DE("yel"); + break; + + case "vehicle_80s_hatch2_brn": + func_09DE("brn"); + break; + + case "vehicle_80s_wagon1_green": + func_09DF("green"); + break; + + case "vehicle_80s_wagon1_red": + func_09DF("red"); + break; + + case "vehicle_80s_wagon1_silv": + func_09DF("silv"); + break; + + case "vehicle_80s_wagon1_tan": + func_09DF("tan"); + break; + + case "vehicle_80s_wagon1_yel": + func_09DF("yel"); + break; + + case "vehicle_80s_wagon1_brn": + func_09DF("brn"); + break; + + case "vehicle_civ_car_a_1": + vehicle_civ_car_a(1); + break; + + case "vehicle_civ_car_a_2": + vehicle_civ_car_a(2); + break; + + case "vehicle_civ_car_a_3": + vehicle_civ_car_a(3); + break; + + case "vehicle_civ_car_a_4": + vehicle_civ_car_a(4); + break; + + case "vehicle_civ_car_a_5": + vehicle_civ_car_a(5); + break; + + case "vehicle_civ_car_a_6": + vehicle_civ_car_a(6); + break; + + case "vehicle_civ_car_a_7": + vehicle_civ_car_a(7); + break; + + case "vehicle_civ_car_a_8": + vehicle_civ_car_a(8); + break; + + case "vehicle_civ_car_a_9": + vehicle_civ_car_a(9); + break; + + case "vehicle_civ_car_a_10": + vehicle_civ_car_a(10); + break; + + case "vehicle_civ_car_a_11": + vehicle_civ_car_a(11); + break; + + case "vehicle_civ_car_a_12": + vehicle_civ_car_a(12); + break; + + case "vehicle_civ_car_a_13": + vehicle_civ_car_a(13); + break; + + case "vehicle_small_hatch_blue": + vehicle_small_hatch("blue"); + break; + + case "vehicle_london_cab_black": + func_09E2(); + break; + + case "vehicle_small_hatch_green": + vehicle_small_hatch("green"); + break; + + case "vehicle_small_hatch_turq": + vehicle_small_hatch("turq"); + break; + + case "vehicle_small_hatch_white": + vehicle_small_hatch("white"); + break; + + case "vehicle_pickup": + vehicle_pickup(param_00); + break; + + case "vehicle_hummer": + vehicle_hummer(param_00); + break; + + case "vehicle_gaz": + vehicle_gaz(param_00); + break; + + case "vehicle_gaz_harbor": + vehicle_gaz_harbor(param_00); + break; + + case "vehicle_moving_truck_thai": + case "vehicle_moving_truck": + vehicle_moving_truck(param_00); + break; + + case "vehicle_subway_cart": + vehicle_subway_cart(param_00); + break; + + case "vehicle_subway_cart_windows": + vehicle_subway_cart_windows(param_00); + break; + + case "vehicle_subway_cart_windows_small": + vehicle_subway_cart_windows_small(param_00); + break; + + case "vehicle_bm21_mobile_bed": + vehicle_bm21(param_00,"vehicle_bm21_mobile_bed_dstry"); + break; + + case "vehicle_bm21_cover": + vehicle_bm21(param_00,"vehicle_bm21_mobile_cover_dstry"); + break; + + case "vehicle_luxurysedan_2008": + vehicle_luxurysedan(""); + break; + + case "vehicle_luxurysedan_2008_gray": + vehicle_luxurysedan("_gray"); + break; + + case "vehicle_luxurysedan_2008_white": + vehicle_luxurysedan("_white"); + break; + + case "vehicle_uk_truck": + vehicle_uk_truck(param_00); + break; + + case "vehicle_uk_police_estate": + vehicle_uk_police_estate(param_00); + break; + + case "vehicle_uaz_winter": + vehicle_uaz_winter(param_00); + break; + + case "vehicle_uaz_fabric": + vehicle_uaz_fabric(param_00); + break; + + case "vehicle_uaz_hardtop": + vehicle_uaz_hardtop(param_00); + break; + + case "vehicle_uaz_open": + vehicle_uaz_open(param_00); + break; + + case "vehicle_india_suv_w": + vehicle_india_suv("w"); + break; + + case "vehicle_india_suv_b": + vehicle_india_suv("b"); + break; + + case "vehicle_india_compact_destructible_gray": + vehicle_india_compact_destructible("gray"); + break; + + case "vehicle_india_compact_destructible_red": + vehicle_india_compact_destructible("red"); + break; + + case "vehicle_india_compact_destructible_brown": + vehicle_india_compact_destructible("brown"); + break; + + case "vehicle_india_compact_destructible_blue": + vehicle_india_compact_destructible("blue"); + break; + + case "vehicle_tuk_tuk": + vehicle_tuk_tuk(param_00); + break; + + case "vehicle_india_rickshaw": + vehicle_india_rickshaw(param_00); + break; + + case "vehicle_policecar": + vehicle_policecar(param_00); + break; + + case "vehicle_policecar_russia": + vehicle_policecar_russia(param_00); + break; + + case "vehicle_taxi": + vehicle_taxi(param_00); + break; + + case "vehicle_taxi_dubai": + vehicle_taxi_dubai(param_00); + break; + + case "vehicle_mig29_landed": + vehicle_mig29_landed(param_00); + break; + + case "vehicle_mack_truck_short_snow": + vehicle_mack_truck_short("snow"); + break; + + case "vehicle_mack_truck_short_green": + vehicle_mack_truck_short("green"); + break; + + case "vehicle_mack_truck_short_white": + vehicle_mack_truck_short("white"); + break; + + case "vehicle_motorcycle_01": + vehicle_motorcycle("01"); + break; + + case "vehicle_motorcycle_02": + vehicle_motorcycle("02"); + break; + + case "vehicle_scooter_vespa": + vehicle_scooter("vehicle_scooter_vespa"); + break; + + case "vehicle_subcompact_black": + vehicle_subcompact("black"); + break; + + case "vehicle_subcompact_blue": + vehicle_subcompact("blue"); + break; + + case "vehicle_subcompact_dark_gray": + vehicle_subcompact("dark_gray"); + break; + + case "vehicle_subcompact_deep_blue": + vehicle_subcompact("deep_blue"); + break; + + case "vehicle_subcompact_gold": + vehicle_subcompact("gold"); + break; + + case "vehicle_subcompact_gray": + vehicle_subcompact("gray"); + break; + + case "vehicle_subcompact_green": + vehicle_subcompact("green"); + break; + + case "vehicle_subcompact_mica": + vehicle_subcompact("mica"); + break; + + case "vehicle_subcompact_slate": + vehicle_subcompact("slate"); + break; + + case "vehicle_subcompact_tan": + vehicle_subcompact("tan"); + break; + + case "vehicle_subcompact_white": + vehicle_subcompact("white"); + break; + + case "vehicle_coupe_black": + vehicle_coupe("black"); + break; + + case "vehicle_coupe_blue": + vehicle_coupe("blue"); + break; + + case "vehicle_coupe_dark_gray": + vehicle_coupe("dark_gray"); + break; + + case "vehicle_coupe_deep_blue": + vehicle_coupe("deep_blue"); + break; + + case "vehicle_coupe_gold": + vehicle_coupe("gold"); + break; + + case "vehicle_coupe_gray": + vehicle_coupe("gray"); + break; + + case "vehicle_coupe_green": + vehicle_coupe("green"); + break; + + case "vehicle_coupe_mica": + vehicle_coupe("mica"); + break; + + case "vehicle_coupe_slate": + vehicle_coupe("slate"); + break; + + case "vehicle_coupe_tan": + vehicle_coupe("tan"); + break; + + case "vehicle_coupe_white": + vehicle_coupe("white"); + break; + + case "vehicle_van_black": + vehicle_van("black"); + break; + + case "vehicle_van_blue": + vehicle_van("blue"); + break; + + case "vehicle_van_dark_gray": + vehicle_van("dark_gray"); + break; + + case "vehicle_van_deep_blue": + vehicle_van("deep_blue"); + break; + + case "vehicle_van_gold": + vehicle_van("gold"); + break; + + case "vehicle_van_gray": + vehicle_van("gray"); + break; + + case "vehicle_van_green": + vehicle_van("green"); + break; + + case "vehicle_van_mica": + vehicle_van("mica"); + break; + + case "vehicle_van_slate": + vehicle_van("slate"); + break; + + case "vehicle_van_tan": + vehicle_van("tan"); + break; + + case "vehicle_van_white": + vehicle_van("white"); + break; + + case "vehicle_suburban": + vehicle_suburban(param_00,""); + break; + + case "vehicle_suburban_beige": + vehicle_suburban(param_00,"_beige"); + break; + + case "vehicle_suburban_dull": + vehicle_suburban(param_00,"_dull"); + break; + + case "vehicle_suburban_red": + vehicle_suburban(param_00,"_red"); + break; + + case "vehicle_snowmobile": + vehicle_snowmobile(param_00); + break; + + case "destructible_gaspump": + destructible_gaspump(param_00); + break; + + case "destructible_electrical_transformer_large": + destructible_electrical_transformer_large(param_00); + break; + + case "toy_new_dlc_destructible": + toy_glass("120x110"); + break; + + case "toy_security_camera": + toy_security_camera(param_00); + break; + + case "toy_building_collapse_paris_ac130": + toy_building_collapse_paris_ac130(param_00); + break; + + case "toy_poison_gas_attack": + toy_poison_gas_attack(param_00); + break; + + case "toy_arcade_machine_1": + toy_arcade_machine("_1"); + break; + + case "toy_arcade_machine_2": + toy_arcade_machine("_2"); + break; + + case "toy_pinball_machine_1": + toy_pinball_machine("_1"); + break; + + case "toy_pinball_machine_2": + toy_pinball_machine("_2"); + break; + + case "toy_fortune_machine": + toy_fortune_machine(param_00); + break; + + case "toy_trashcan_clown": + toy_trashcan_clown(param_00); + break; + + case "toy_afrShanty1": + func_0A1B(param_00); + break; + + case "vehicle_slava_ny_harbor_zonea": + vehicle_slava_ny_harbor_zonea(param_00); + break; + + case "rooftop_skylight_destructible": + rooftop_skylight_destructible(param_00); + break; + + case "satellite_dish_big_destructible": + satellite_dish_big_destructible(param_00); + break; + + case "berlin_hotel_lights_ceiling1": + berlin_hotel_lights_ceiling1(param_00,"berlin_hotel_lights_ceiling1_destroyed"); + break; + + case "berlin_hotel_lights_ceiling1_off": + berlin_hotel_lights_ceiling1(param_00,"berlin_hotel_lights_ceiling1_destroyed"); + break; + + case "berlin_hotel_lights_wall1": + dest_onestate(param_00,"berlin_hotel_lights_wall1_destroyed","misc/light_blowout_wall2_runner"); + break; + + case "berlin_hotel_lights_wall1_off": + dest_onestate(param_00,"berlin_hotel_lights_wall1_destroyed","misc/light_blowout_wall2_runner"); + break; + + case "berlin_hotel_lights_wall2": + dest_onestate(param_00,"berlin_hotel_lights_wall2_destroyed","misc/light_blowout_wall_runner"); + break; + + case "berlin_hotel_lights_wall2_off": + dest_onestate(param_00,"berlin_hotel_lights_wall2_destroyed","misc/light_blowout_wall_runner"); + break; + + case "pb_cubical_planter": + dest_pb_planter(param_00,"pb_cubical_planter_dam","explosions/brick_chunk"); + break; + + case "vehicle_delivery_theme_park_truck_destructible": + vehicle_delivery_theme_park_truck_destructible(param_00); + break; + + case "vehicle_van_sas_dark_destructable": + vehicle_van_iw5("vehicle_van_sas_dark"); + break; + + case "vehicle_uk_police_van_destructable": + vehicle_van_iw5("vehicle_uk_police_van"); + break; + + case "vehicle_jeep_dusty": + vehicle_jeep_dusty(param_00); + break; + + default: + break; + } + + var_01 = getinfoindex(param_00); + return var_01; +} + +//Function Number: 2 +getinfoindex(param_00) +{ + if(!isdefined(level.destructible_type)) + { + return -1; + } + + if(level.destructible_type.size == 0) + { + return -1; + } + + for(var_01 = 0;var_01 < level.destructible_type.size;var_01++) + { + if(param_00 == level.destructible_type[var_01].v["type"]) + { + return var_01; + } + } + + return -1; +} + +//Function Number: 3 +prop_ac_prs_enm_barge_a_1() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_barge_a_1","tag_origin",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("tag_origin","ac_prs_enm_barge_a_1_dam_animated",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_anim(get_precached_anim("paris_ac130_barge_sink"),get_precached_animtree("paris_ac130_barge_sink"),"setanim"); + common_scripts\_destructible::destructible_fx(undefined,"impacts/105mm_water_impact_fast",0); + common_scripts\_destructible::func_976(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 4 +prop_ac_prs_enm_barge_a_2() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_barge_a_2","tag_origin",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("tag_origin","ac_prs_enm_barge_a_2_dam_animated",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_anim(get_precached_anim("paris_ac130_barge_sink"),get_precached_animtree("paris_ac130_barge_sink"),"setanim"); + common_scripts\_destructible::destructible_fx(undefined,"impacts/105mm_water_impact_fast",0); + common_scripts\_destructible::func_976(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 5 +prop_ac_prs_enm_con_digger_a() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_con_digger_a","ac_prs_enm_con_digger_a_lod_0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_enm_con_digger_a_dam_lod0","ac_prs_enm_con_digger_a_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/building_explosion_paris_ac130",0); + common_scripts\_destructible::func_976(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 6 +func_0979() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_con_dump_truck_a","ac_prs_enm_con_dump_truck_a_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_enm_con_dump_truck_a_destroyed_lod0","ac_prs_enm_con_dump_truck_a_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/building_explosion_paris_ac130",0); + common_scripts\_destructible::func_976(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 7 +prop_ac_prs_enm_fuel_tank_a() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_fuel_tank_a","ac_prs_enm_fuel_tank_a_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_enm_fuel_tank_a_dam_lod0","ac_prs_enm_fuel_tank_a_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/fuel_storage",0); + common_scripts\_destructible::func_976(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 8 +prop_ac_prs_enm_hanger_a() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_hanger_a","ac_prs_enm_hanger_a_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_enm_hanger_a_dam_lod0","ac_prs_enm_hanger_a_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/building_explosion_paris_ac130",0); +} + +//Function Number: 9 +prop_ac_prs_enm_maz_a() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_maz_a","ac_prs_enm_maz_a",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_enm_maz_a_dam3","ac_prs_enm_maz_a_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/building_explosion_paris_ac130",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_flir_debris_explosion_a",0); + common_scripts\_destructible::func_976(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 10 +prop_ac_prs_enm_mi26_halo_a() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_mi26_halo_a","ac_prs_enm_mi26_halo_a_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("polySurface80","ac_prs_enm_mi26_halo_a_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/helicopter_explosion_mi26_halo",0); + common_scripts\_destructible::func_976(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 11 +prop_ac_prs_enm_mstas_a() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_mstas_a","ac_prs_enm_mstas_a_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_enm_mstas_a_dam_lod0","ac_prs_enm_mstas_a_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_flir_debris_explosion_a",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_debris_explosion_fire_a",0); + common_scripts\_destructible::func_976(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 12 +prop_ac_prs_enm_radar_maz_a() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_radar_maz_a","tag_origin",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("tag_origin","ac_prs_enm_radar_maz_a",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_anim(get_precached_anim("ac130_radartower_crash"),get_precached_animtree("ac130_radartower_crash"),"setanim"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/building_explosion_paris_ac130",0); + common_scripts\_destructible::func_976(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 13 +prop_ac_prs_enm_s300v_a() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_s300v_a","ac_prs_enm_s300v",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_enm_s300v_dam","ac_prs_enm_s300v_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/vehicle_explosion_sam",0); + common_scripts\_destructible::func_976(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 14 +prop_ac_prs_enm_storage_bld_a_1() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_storage_bld_a_1","p_ac_prs_enm_storage_bld_a_1",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("p_ac_prs_enm_storage_bld_a_1_dam","ac_prs_enm_storage_bld_a_1_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/building_explosion_paris_ac130",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_flir_debris_explosion_a",0); +} + +//Function Number: 15 +prop_ac_prs_enm_storage_bld_a_2() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_storage_bld_a_2","p_ac_prs_enm_storage_bld_a_2",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("p_ac_prs_enm_storage_bld_a_2_dam","ac_prs_enm_storage_bld_a_2_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/building_explosion_paris_ac130",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_flir_debris_explosion_a",0); +} + +//Function Number: 16 +prop_ac_prs_enm_storage_bld_b() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_storage_bld_b","p_ac_prs_enm_storage_bld_b",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("p_ac_prs_enm_storage_bld_b_dam","ac_prs_enm_storage_bld_b_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/building_explosion_paris_ac130",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_flir_debris_explosion_max_a",0); +} + +//Function Number: 17 +prop_ac_prs_enm_tent_a() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_tent_a","ac_prs_enm_tent_a_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("polySurface1","ac_prs_enm_tent_a_dam1",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/tent_collapse",0); +} + +//Function Number: 18 +prop_ac_prs_enm_tent_b() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_tent_b","ac_prs_enm_tent_b_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_enm_tent_b_lod1","ac_prs_enm_tent_b_dam1",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/tent_collapse",0); +} + +//Function Number: 19 +prop_ac_prs_enm_tent_c() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_tent_c","ac_prs_enm_tent_c_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_enm_tent_c_lod1","ac_prs_enm_tent_c_dam1",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/tent_collapse",0); +} + +//Function Number: 20 +prop_ac_prs_enm_truck_a() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_truck_a","ac_prs_enm_truck_a_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_enm_truck_a_dam_lod0","ac_prs_enm_truck_a_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/building_explosion_paris_ac130",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_flir_debris_explosion_a",0); + common_scripts\_destructible::func_976(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 21 +prop_ac_prs_enm_cargo_crate_a_1() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_cargo_crate_a_1","ac_prs_enm_cargo_crate_a_1_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_enm_cargo_crate_a_1_lod0","ac_prs_enm_cargo_crate_a_1_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/building_explosion_paris_ac130",0); + common_scripts\_destructible::func_976(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 22 +prop_ac_prs_enm_cargo_crate_a_2() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_cargo_crate_a_2","ac_prs_enm_cargo_crate_a_2_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_enm_cargo_crate_a_2_lod0","ac_prs_enm_cargo_crate_a_2_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/building_explosion_paris_ac130",0); + common_scripts\_destructible::func_976(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 23 +prop_ac_prs_enm_crates_a_1() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_crates_a_1","ac_prs_enm_crates_a_1_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_enm_crates_a_1_dam_lod0","ac_prs_enm_crates_a_1_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_enm_crates_a_explosion_1",0); +} + +//Function Number: 24 +func_098B() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_crates_a_2","ac_prs_enm_crates_a_2_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_enm_crates_a_2_dam_lod0","ac_prs_enm_crates_a_2_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_enm_crates_a_explosion_1",0); +} + +//Function Number: 25 +prop_ac_prs_enm_crates_b_1() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_crates_b_1","ac_prs_enm_crates_b_1_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_enm_crates_b_1_dam_lod0","ac_prs_enm_crates_b_1_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_enm_crates_b_explosion_1",0); +} + +//Function Number: 26 +prop_ac_prs_enm_crates_b_2() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_crates_b_2","ac_prs_enm_crates_b_2_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_enm_crates_b_2_dam_lod0","ac_prs_enm_crates_b_2_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_enm_crates_b_explosion_1",0); +} + +//Function Number: 27 +prop_ac_prs_enm_mobile_crane_a() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_mobile_crane_a","ac_prs_enm_mobile_crane_a_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_enm_mobile_crane_a_dam_lod0","ac_prs_enm_mobile_crane_a_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/building_explosion_paris_ac130",0); + common_scripts\_destructible::func_976(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 28 +prop_ac_prs_enm_landing_craft_a() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_landing_craft_a","ac_prs_enm_landing_craft_a_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("tag_origin","ac_prs_enm_landing_craft_a_dam",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/building_explosion_paris_ac130",0); + common_scripts\_destructible::func_976(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 29 +prop_ac_prs_enm_speed_boat_a() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_speed_boat_a","ac_prs_enm_speed_boat_a",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_prp_metal_debris_a_01_lod0","ac_prs_prp_metal_debris_a_01",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/building_explosion_paris_ac130",0); + common_scripts\_destructible::func_976(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 30 +prop_ac_prs_prp_satellite_dish_a_dish() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_prp_satellite_dish_a_dish","ac_prs_prp_satellite_dish_a_dish_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_prp_metal_debris_a_01_lod0","ac_prs_prp_metal_debris_a_01",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_dust_explosion_a",0); + common_scripts\_destructible::func_976(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 31 +prop_ac_prs_fps_hc_extc_balcony_a1() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_fps_hc_extc_balcony_a1","ac_prs_fps_hc_extc_balcony_a_lod0",80,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_fps_hc_extc_balcony_a_dam1_lod0","ac_prs_fps_hc_extc_balcony_a_dam1",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_dust_explosion_a",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fps_extc_balcony_a_explosion_1",0); +} + +//Function Number: 32 +prop_ac_prs_fps_hc_extc_balcony_a2() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_fps_hc_extc_balcony_a2","ac_prs_fps_hc_extc_balcony_a_lod0",80,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_fps_hc_extc_balcony_a_dam2_lod0","ac_prs_fps_hc_extc_balcony_a_dam2",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_dust_explosion_a",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fps_extc_balcony_a_explosion_1",0); +} + +//Function Number: 33 +prop_ac_prs_fps_hc_extc_balcony_a3() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_fps_hc_extc_balcony_a3","ac_prs_fps_hc_extc_balcony_a_lod0",80,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_fps_hc_extc_balcony_a_dam3_lod0","ac_prs_fps_hc_extc_balcony_a_dam3",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_dust_explosion_a",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fps_extc_balcony_a_explosion_1",0); +} + +//Function Number: 34 +prop_ac_prs_fps_hc_extc_balcony_b1() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_fps_hc_extc_balcony_b1","ac_prs_fps_hc_extc_balcony_b_lod0",80,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_fps_hc_extc_balcony_b_dam1_lod0","ac_prs_fps_hc_extc_balcony_b_dam1",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_dust_explosion_a",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fps_extc_balcony_b_explosion_1",0); +} + +//Function Number: 35 +prop_ac_prs_fps_hc_extc_balcony_b2() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_fps_hc_extc_balcony_b2","ac_prs_fps_hc_extc_balcony_b_lod0",80,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_fps_hc_extc_balcony_b_dam2_lod0","ac_prs_fps_hc_extc_balcony_b_dam2",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_dust_explosion_a",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fps_extc_balcony_b_explosion_1",0); +} + +//Function Number: 36 +prop_ac_prs_fps_hc_extc_balcony_b3() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_fps_hc_extc_balcony_b3","ac_prs_fps_hc_extc_balcony_b_lod0",80,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_fps_hc_extc_balcony_b_dam3_lod0","ac_prs_fps_hc_extc_balcony_b_dam3",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_dust_explosion_a",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fps_extc_balcony_b_explosion_1",0); +} + +//Function Number: 37 +prop_ac_prs_fps_hc_extc_balcony_c1() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_fps_hc_extc_balcony_c1","ac_prs_fps_hc_extc_balcony_c_lod0",80,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_fps_hc_extc_balcony_c_dam1_lod0","ac_prs_fps_hc_extc_balcony_c_dam1",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_dust_explosion_a",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fps_extc_balcony_c_explosion_1",0); +} + +//Function Number: 38 +prop_ac_prs_fps_hc_extc_balcony_c2() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_fps_hc_extc_balcony_c2","ac_prs_fps_hc_extc_balcony_c_lod0",80,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_fps_hc_extc_balcony_c_dam2_lod0","ac_prs_fps_hc_extc_balcony_c_dam2",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_dust_explosion_a",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fps_extc_balcony_c_explosion_2",0); +} + +//Function Number: 39 +prop_ac_prs_fps_hc_extc_column_b_a1() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_fps_hc_extc_column_b_a1","ac_prs_fps_hc_extc_column_b_a_lod0",80,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_fps_hc_extc_column_b_a_dam1_lod0","ac_prs_fps_hc_extc_column_b_a_dam1",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_dust_explosion_a",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fps_extc_balcony_c_explosion_2",0); +} + +//Function Number: 40 +prop_ac_prs_fps_hc_extc_column_b_a2() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_fps_hc_extc_column_b_a2","ac_prs_fps_hc_extc_column_b_a_lod0",80,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_fps_hc_extc_column_b_a_dam2_lod0","ac_prs_fps_hc_extc_column_b_a_dam2",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_dust_explosion_a",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fps_extc_balcony_c_explosion_2",0); +} + +//Function Number: 41 +func_099C() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_fps_hc_extc_column_b_a3","ac_prs_fps_hc_extc_column_b_a_lod0",80,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_fps_hc_extc_column_b_a_dam3_lod0","ac_prs_fps_hc_extc_column_b_a_dam3",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_dust_explosion_a",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fps_extc_balcony_c_explosion_2",0); +} + +//Function Number: 42 +prop_ac_prs_fps_hc_extc_column_t_a1() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_fps_hc_extc_column_t_a1","ac_prs_fps_hc_extc_column_t_a_lod0",80,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_fps_hc_extc_column_t_a_dam1_lod0","ac_prs_fps_hc_extc_column_t_a_dam1",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_dust_explosion_a",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fps_extc_balcony_c_explosion_2",0); +} + +//Function Number: 43 +prop_ac_prs_fps_hc_extc_column_t_a2() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_fps_hc_extc_column_t_a2","ac_prs_fps_hc_extc_column_t_a_lod0",80,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_fps_hc_extc_column_t_a_dam2_lod0","ac_prs_fps_hc_extc_column_t_a_dam2",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_dust_explosion_a",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fps_extc_balcony_c_explosion_2",0); +} + +//Function Number: 44 +prop_ac_prs_fps_hc_extc_column_t_a3() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_fps_hc_extc_column_t_a3","ac_prs_fps_hc_extc_column_t_a_lod0",80,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_fps_hc_extc_column_t_a_dam3_lod0","ac_prs_fps_hc_extc_column_t_a_dam3",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fx_dust_explosion_a",0); + common_scripts\_destructible::destructible_fx(undefined,"explosions/ac_prs_fps_extc_balcony_c_explosion_2",0); +} + +//Function Number: 45 +prop_ac_prs_enm_missile_boat_a() +{ + common_scripts\_destructible::destructible_create("prop_ac_prs_enm_missile_boat_a","tag_origin",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("tag_origin","ac_prs_enm_missile_boat_a",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_anim(get_precached_anim("paris_ac130_ship_sink"),get_precached_animtree("paris_ac130_ship_sink"),"setanim"); + common_scripts\_destructible::destructible_fx(undefined,"impacts/105mm_water_impact_fast",0); + common_scripts\_destructible::func_976(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 46 +toy_glass(param_00) +{ + common_scripts\_destructible::destructible_create("toy_glass" + param_00,"tag_origin",50); + common_scripts\_destructible::destructible_splash_damage_scaler(5); + common_scripts\_destructible::destructible_sound("building_glass_shatter"); + var_01 = "tag_glass"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/highrise_glass_" + param_00); + common_scripts\_destructible::destructible_sound("building_glass_blowout"); + common_scripts\_destructible::destructible_state(var_01 + "_des",undefined,100,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/highrise_glass_" + param_00 + "_edge"); + common_scripts\_destructible::destructible_sound("building_glass_blowout"); + common_scripts\_destructible::destructible_state(undefined); +} + +//Function Number: 47 +toy_dt_mirror(param_00) +{ + common_scripts\_destructible::destructible_create("toy_dt_mirror" + param_00,"tag_origin",150,undefined,32); + common_scripts\_destructible::destructible_splash_damage_scaler(5); + common_scripts\_destructible::destructible_fx("tag_fx","props/mirror_shatter" + param_00); + common_scripts\_destructible::destructible_sound("mirror_shatter"); + common_scripts\_destructible::destructible_state("tag_origin","dt_mirror" + param_00 + "_dam",150,undefined); + common_scripts\_destructible::destructible_fx("tag_fx","props/mirror_dt_panel" + param_00 + "_broken"); + common_scripts\_destructible::func_976(1000,2000,32,32,32,48,undefined,0); + common_scripts\_destructible::destructible_state("tag_origin","dt_mirror" + param_00 + "_des",150,undefined); +} + +//Function Number: 48 +toy_icbm_consolemonitor(param_00) +{ + common_scripts\_destructible::destructible_create("toy_icbm_consolemonitor" + param_00,"television2_lod04",1,undefined,32); + common_scripts\_destructible::destructible_splash_damage_scaler(1); + common_scripts\_destructible::destructible_fx("television2_lod04","explosions/tv_explosion"); + common_scripts\_destructible::destructible_sound("tv_shot_burst","television2_lod04"); + common_scripts\_destructible::func_976(20,2000,9,9,3,3,undefined,12); + common_scripts\_destructible::destructible_state("television2_lod04","hjk_icbm_consolemonitor7",undefined,undefined,"no_melee"); +} + +//Function Number: 49 +toy_tubetv_(param_00) +{ + common_scripts\_destructible::destructible_create("toy_tubetv_" + param_00,"tag_origin",1,undefined,32); + common_scripts\_destructible::destructible_splash_damage_scaler(1); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/tv_explosion"); + common_scripts\_destructible::destructible_sound("tv_shot_burst"); + common_scripts\_destructible::func_976(20,2000,9,9,3,3,undefined,12); + common_scripts\_destructible::destructible_state(undefined,"com_" + param_00 + "_d",undefined,undefined,"no_melee"); +} + +//Function Number: 50 +toy_tvs_flatscreen(param_00,param_01) +{ + common_scripts\_destructible::destructible_create("toy_tv_flatscreen_" + param_01 + param_00,"tag_origin",1,undefined,32); + common_scripts\_destructible::destructible_splash_damage_scaler(1); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/tv_flatscreen_explosion"); + common_scripts\_destructible::destructible_sound("tv_shot_burst"); + common_scripts\_destructible::func_976(20,2000,10,10,3,3,undefined,15); + common_scripts\_destructible::destructible_state(undefined,"ma_flatscreen_tv_" + param_01 + "broken_" + param_00,200,undefined,"no_melee"); +} + +//Function Number: 51 +func_09A9(param_00,param_01) +{ + common_scripts\_destructible::destructible_create("toy_tv_flatscreen_" + param_01 + param_00 + "_sturdy","tag_origin",1,undefined,1280); + common_scripts\_destructible::destructible_splash_damage_scaler(0.5); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/tv_flatscreen_explosion_cheap"); + common_scripts\_destructible::destructible_sound("tv_shot_burst"); + common_scripts\_destructible::func_976(20,2000,10,10,3,3,undefined,15); + common_scripts\_destructible::destructible_state(undefined,"ma_flatscreen_tv_" + param_01 + "broken_" + param_00,200,undefined,"no_melee"); +} + +//Function Number: 52 +toy_transformer_ratnest01(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",75,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(15); + common_scripts\_destructible::destructible_loopfx("tag_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,75,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,150,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_sparks","explosions/transformer_spark_runner",0.5); + common_scripts\_destructible::destructible_loopsound("transformer_spark_loop"); + common_scripts\_destructible::destructible_healthdrain(24,0.2); + common_scripts\_destructible::destructible_state(undefined,undefined,250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_sparks","explosions/transformer_spark_runner",0.5); + common_scripts\_destructible::destructible_loopfx("tag_fx","fire/transformer_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("transformer01_flareup_med"); + common_scripts\_destructible::destructible_loopsound("transformer_spark_loop"); + common_scripts\_destructible::destructible_healthdrain(24,0.2,150,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,5,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/transformer_explosion",0); + common_scripts\_destructible::destructible_fx("tag_fx","fire/firelp_small_pm"); + common_scripts\_destructible::destructible_sound("transformer01_explode"); + common_scripts\_destructible::func_976(7000,8000,150,256,16,100,undefined,0); + common_scripts\_destructible::destructible_state(undefined,"utility_transformer_ratnest01_dest",undefined,undefined,"no_melee"); +} + +//Function Number: 53 +toy_transformer_small01(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",75,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(15); + common_scripts\_destructible::destructible_loopfx("tag_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,75,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,150,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_fx","explosions/transformer_spark_runner",0.5); + common_scripts\_destructible::destructible_loopsound("transformer_spark_loop"); + common_scripts\_destructible::destructible_healthdrain(24,0.2); + common_scripts\_destructible::destructible_state(undefined,undefined,250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_fx","explosions/transformer_spark_runner",0.5); + common_scripts\_destructible::destructible_loopfx("tag_fx","fire/transformer_small_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("transformer01_flareup_med"); + common_scripts\_destructible::destructible_loopsound("transformer_spark_loop"); + common_scripts\_destructible::destructible_healthdrain(24,0.2,150,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,5,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/transformer_explosion",0); + common_scripts\_destructible::destructible_fx("tag_fx","fire/firelp_small_pm"); + common_scripts\_destructible::destructible_sound("transformer01_explode"); + common_scripts\_destructible::func_976(7000,8000,150,256,16,100,undefined,0); + common_scripts\_destructible::destructible_state(undefined,"utility_transformer_small01_dest",undefined,undefined,"no_melee"); +} + +//Function Number: 54 +toy_generator(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_bounce",75,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(15); + common_scripts\_destructible::destructible_loopfx("tag_fx2","smoke/generator_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,75,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_fx2","smoke/generator_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_fx2","smoke/generator_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_loopfx("tag_fx4","explosions/generator_spark_runner",0.9); + common_scripts\_destructible::destructible_loopfx("tag_fx3","explosions/generator_spark_runner",0.6123); + common_scripts\_destructible::destructible_loopsound("generator_spark_loop"); + common_scripts\_destructible::destructible_healthdrain(24,0.2,64,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,5,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/generator_explosion",1); + common_scripts\_destructible::destructible_fx("tag_fx","fire/generator_des_fire",1); + common_scripts\_destructible::destructible_sound("generator01_explode"); + common_scripts\_destructible::func_976(7000,8000,128,128,16,50,undefined,0); + common_scripts\_destructible::destructible_anim(get_precached_anim("enerator_explode"),#animtree,"setanimknob",undefined,undefined,"generator_explode"); + common_scripts\_destructible::destructible_state(undefined,"machinery_generator_des",undefined,undefined,"no_melee"); +} + +//Function Number: 55 +func_09B0(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_bounce",0,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(15); + common_scripts\_destructible::destructible_loopfx("tag_fx2","smoke/generator_exhaust",0.4); + common_scripts\_destructible::destructible_anim(get_precached_anim("enerator_vibration"),#animtree,"setanimknob",undefined,undefined,"generator_vibration"); + common_scripts\_destructible::destructible_loopsound("generator_running"); + common_scripts\_destructible::destructible_state("tag_origin","machinery_generator",150); + common_scripts\_destructible::destructible_loopfx("tag_fx2","smoke/generator_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_loopsound("generator_running"); + common_scripts\_destructible::destructible_state(undefined,undefined,75,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_fx2","smoke/generator_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_loopsound("generator_damage_loop"); + common_scripts\_destructible::destructible_state(undefined,undefined,250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_fx2","smoke/generator_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_loopfx("tag_fx4","explosions/generator_spark_runner",0.9); + common_scripts\_destructible::destructible_loopfx("tag_fx3","explosions/generator_spark_runner",0.6123); + common_scripts\_destructible::destructible_loopsound("generator_spark_loop"); + common_scripts\_destructible::destructible_loopsound("generator_damage_loop"); + common_scripts\_destructible::destructible_healthdrain(24,0.2,64,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,5,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/generator_explosion",0); + common_scripts\_destructible::destructible_fx("tag_fx","fire/generator_des_fire"); + common_scripts\_destructible::destructible_sound("generator01_explode"); + common_scripts\_destructible::func_976(7000,8000,128,128,16,50,undefined,0); + common_scripts\_destructible::destructible_anim(get_precached_anim("enerator_explode"),#animtree,"setanimknob",undefined,0,"generator_explode"); + common_scripts\_destructible::destructible_anim(get_precached_anim("enerator_explode_02"),#animtree,"setanimknob",undefined,0,"generator_explode_02"); + common_scripts\_destructible::destructible_anim(get_precached_anim("enerator_explode_03"),#animtree,"setanimknob",undefined,0,"generator_explode_03"); + common_scripts\_destructible::destructible_state(undefined,"machinery_generator_des",undefined,undefined,"no_melee"); +} + +//Function Number: 56 +toy_oxygen_tank(param_00) +{ + common_scripts\_destructible::destructible_create("toy_oxygen_tank_" + param_00,"tag_origin",150,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,64,"allies"); + common_scripts\_destructible::destructible_loopsound("oxygen_tank_leak_loop"); + common_scripts\_destructible::destructible_fx("tag_cap","props/oxygen_tank" + param_00 + "_cap"); + common_scripts\_destructible::destructible_loopfx("tag_cap","distortion/oxygen_tank_leak",0.4); + common_scripts\_destructible::destructible_state(undefined,"machinery_oxygen_tank" + param_00 + "_dam",300,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/oxygen_tank" + param_00 + "_explosion",0); + common_scripts\_destructible::destructible_sound("oxygen_tank_explode"); + common_scripts\_destructible::func_976(7000,8000,150,256,16,150,undefined,32); + common_scripts\_destructible::destructible_state(undefined,"machinery_oxygen_tank" + param_00 + "_des",undefined,undefined,"no_melee"); +} + +//Function Number: 57 +toy_electricbox2(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",150,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(15); + common_scripts\_destructible::destructible_fx("tag_fx","props/electricbox4_explode",undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_sound("exp_fusebox_sparks"); + common_scripts\_destructible::func_976(1000,2000,32,32,32,48,undefined,0); + common_scripts\_destructible::destructible_state(undefined,"me_electricbox2_dest",undefined,undefined,"no_melee"); + common_scripts\_destructible::destructible_part("tag_fx","me_electricbox2_door",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_door_upper","me_electricbox2_door_upper",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 58 +toy_electricbox4(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",150,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(15); + common_scripts\_destructible::destructible_fx("tag_fx","props/electricbox4_explode",undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_sound("exp_fusebox_sparks"); + common_scripts\_destructible::func_976(20,2000,32,32,32,48,undefined,0); + common_scripts\_destructible::destructible_state(undefined,"me_electricbox4_dest",undefined,undefined,"no_melee"); + common_scripts\_destructible::destructible_part("tag_fx","me_electricbox4_door",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 59 +toy_airconditioner(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",0,undefined,32); + common_scripts\_destructible::destructible_anim(get_precached_anim("x_airconditioner_fan"),#animtree,"setanimknob",undefined,undefined,"ex_airconditioner_fan"); + common_scripts\_destructible::destructible_loopsound("airconditioner_running_loop"); + common_scripts\_destructible::destructible_state("tag_origin","com_ex_airconditioner",300); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/airconditioner_ex_explode",undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_sound("airconditioner_burst"); + common_scripts\_destructible::func_976(1000,2000,32,32,32,48,undefined,0); + common_scripts\_destructible::destructible_state(undefined,"com_ex_airconditioner_dam",undefined,undefined,"no_melee"); + common_scripts\_destructible::destructible_part("tag_fx","com_ex_airconditioner_fan",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 60 +toy_ceiling_fan(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",0,undefined,32); + common_scripts\_destructible::destructible_anim(get_precached_anim("e_fanceil1_spin"),#animtree,"setanimknob",undefined,undefined,"me_fanceil1_spin"); + common_scripts\_destructible::destructible_state("tag_origin","me_fanceil1",150); + common_scripts\_destructible::destructible_anim(get_precached_anim("e_fanceil1_spin_stop"),#animtree,"setanimknob",undefined,undefined,"me_fanceil1_spin_stop"); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/ceiling_fan_explosion"); + common_scripts\_destructible::destructible_sound("ceiling_fan_sparks"); + common_scripts\_destructible::func_976(1000,2000,32,32,5,32,undefined,0); + common_scripts\_destructible::destructible_state(undefined,"me_fanceil1_des",undefined,undefined,"no_melee"); + common_scripts\_destructible::destructible_part("tag_fx",undefined,150,undefined,undefined,undefined,1); +} + +//Function Number: 61 +toy_wall_fan(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_swivel",0,undefined,32); + common_scripts\_destructible::destructible_anim(get_precached_anim("all_fan_rotate"),#animtree,"setanimknob",undefined,undefined,"wall_fan_rotate"); + common_scripts\_destructible::destructible_loopsound("wall_fan_fanning"); + common_scripts\_destructible::destructible_state("tag_wobble","cs_wallfan1",150); + common_scripts\_destructible::destructible_anim(get_precached_anim("all_fan_stop"),#animtree,"setanimknob",undefined,undefined,"wall_fan_wobble"); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/wallfan_explosion_dmg"); + common_scripts\_destructible::destructible_sound("wall_fan_sparks"); + common_scripts\_destructible::destructible_state("tag_wobble","cs_wallfan1",150,undefined,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/wallfan_explosion_des"); + common_scripts\_destructible::destructible_sound("wall_fan_break"); + common_scripts\_destructible::destructible_state(undefined,"cs_wallfan1_dmg",undefined,undefined,"no_melee"); +} + +//Function Number: 62 +toy_propane_tank02(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",50,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(5); + common_scripts\_destructible::destructible_state(undefined,undefined,350,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("propanetank02_gas_leak_loop"); + common_scripts\_destructible::destructible_loopfx("tag_cap","distortion/propane_cap_distortion",0.1); + common_scripts\_destructible::destructible_state(undefined,undefined,350,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_cap","fire/propane_capfire_leak",0.1); + common_scripts\_destructible::destructible_sound("propanetank02_flareup_med"); + common_scripts\_destructible::destructible_loopsound("propanetank02_fire_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,300,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,150,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_physics("tag_cap",(50,0,0)); + common_scripts\_destructible::destructible_loopfx("tag_cap","fire/propane_capfire",0.6); + common_scripts\_destructible::destructible_fx("tag_valve","fire/propane_valvefire_flareup"); + common_scripts\_destructible::destructible_physics("tag_valve",(50,0,0)); + common_scripts\_destructible::destructible_fx("tag_cap","fire/propane_capfire_flareup"); + common_scripts\_destructible::destructible_loopfx("tag_valve","fire/propane_valvefire",0.1); + common_scripts\_destructible::destructible_sound("propanetank02_flareup2_med"); + common_scripts\_destructible::destructible_loopsound("propanetank02_fire_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,150,undefined,5,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","fire/propane_small_fire"); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/propane_large_exp_fireball"); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/propane_large_exp",0); + common_scripts\_destructible::destructible_sound("propanetank02_explode"); + common_scripts\_destructible::destructible_loopsound("propanetank02_fire_blown_med"); + common_scripts\_destructible::func_976(7000,8000,600,600,32,300); + common_scripts\_destructible::destructible_state(undefined,"com_propane_tank02_DES",undefined,undefined,"no_melee"); + common_scripts\_destructible::destructible_part("tag_valve","com_propane_tank02_valve"); + common_scripts\_destructible::destructible_part("tag_cap","com_propane_tank02_cap"); +} + +//Function Number: 63 +toy_propane_tank02_small(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",50,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(10); + common_scripts\_destructible::destructible_state(undefined,undefined,350,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("propanetank02_gas_leak_loop"); + common_scripts\_destructible::destructible_loopfx("tag_cap","distortion/propane_cap_distortion",0.1); + common_scripts\_destructible::destructible_state(undefined,undefined,350,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_cap","fire/propane_capfire_leak",0.1); + common_scripts\_destructible::destructible_sound("propanetank02_flareup_med"); + common_scripts\_destructible::destructible_loopsound("propanetank02_fire_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_physics("tag_cap",(50,0,0)); + common_scripts\_destructible::destructible_loopfx("tag_cap","fire/propane_capfire",0.6); + common_scripts\_destructible::destructible_fx("tag_valve","fire/propane_valvefire_flareup"); + common_scripts\_destructible::destructible_physics("tag_valve",(50,0,0)); + common_scripts\_destructible::destructible_fx("tag_cap","fire/propane_capfire_flareup"); + common_scripts\_destructible::destructible_loopfx("tag_valve","fire/propane_valvefire",0.1); + common_scripts\_destructible::destructible_sound("propanetank02_flareup_med"); + common_scripts\_destructible::destructible_loopsound("propanetank02_fire_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,5,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","fire/propane_small_fire"); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/propane_large_exp",0); + common_scripts\_destructible::destructible_sound("propanetank02_explode"); + common_scripts\_destructible::func_976(7000,8000,400,400,32,100); + common_scripts\_destructible::destructible_state(undefined,"com_propane_tank02_small_DES",undefined,undefined,"no_melee"); + common_scripts\_destructible::destructible_part("tag_valve","com_propane_tank02_small_valve"); + common_scripts\_destructible::destructible_part("tag_cap","com_propane_tank02_small_cap"); +} + +//Function Number: 64 +toy_copier(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(15); + common_scripts\_destructible::destructible_loopfx("tag_left_feeder","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_left_feeder","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,500,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_fx","props/photocopier_sparks",3); + common_scripts\_destructible::destructible_loopsound("copier_spark_loop"); + common_scripts\_destructible::destructible_healthdrain(12,0.2); + common_scripts\_destructible::destructible_state(undefined,undefined,800,undefined,5,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","props/photocopier_exp",0); + common_scripts\_destructible::destructible_fx("tag_fx","props/photocopier_fire"); + common_scripts\_destructible::destructible_sound("copier_exp"); + common_scripts\_destructible::destructible_loopsound("copier_fire_loop"); + common_scripts\_destructible::func_976(7000,8000,96,96,32,48); + common_scripts\_destructible::destructible_state(undefined,"prop_photocopier_destroyed",undefined,undefined,"no_melee"); + common_scripts\_destructible::destructible_part("tag_left_feeder","prop_photocopier_destroyed_left_feeder",4,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_right_shelf","prop_photocopier_destroyed_right_shelf",4,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_top","prop_photocopier_destroyed_top",4,undefined,undefined,undefined,1,1); +} + +//Function Number: 65 +toy_firehydrant(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(11); + common_scripts\_destructible::destructible_state(undefined,undefined,500,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_cap","props/firehydrant_leak",0.1); + common_scripts\_destructible::destructible_loopsound("firehydrant_spray_loop"); + common_scripts\_destructible::destructible_healthdrain(12,0.2); + common_scripts\_destructible::destructible_state(undefined,undefined,800,undefined,5,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","props/firehydrant_exp",0); + common_scripts\_destructible::destructible_fx("tag_fx","props/firehydrant_spray_10sec",0); + common_scripts\_destructible::destructible_sound("firehydrant_burst"); + common_scripts\_destructible::func_976(17000,18000,96,96,32,48); + common_scripts\_destructible::destructible_state(undefined,"com_firehydrant_dest",undefined,undefined,"no_melee"); + common_scripts\_destructible::destructible_part("tag_fx","com_firehydrant_dam",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_cap","com_firehydrant_cap",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 66 +toy_parkingmeter(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_meter",120); + common_scripts\_destructible::destructible_fx("tag_fx","props/parking_meter_coins",1,common_scripts\_destructible::damage_not("splash")); + common_scripts\_destructible::destructible_fx("tag_fx","props/parking_meter_coins_exploded",1,"splash"); + common_scripts\_destructible::destructible_sound("exp_parking_meter_sweet"); + common_scripts\_destructible::func_976(2800,3000,64,64,0,0,1); + common_scripts\_destructible::destructible_state(undefined,"com_parkingmeter_damaged",20,undefined,undefined,"splash"); + common_scripts\_destructible::destructible_state(undefined,"com_parkingmeter_destroyed",undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_cap","com_parkingmeter_cap",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 67 +func_09BE(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",200); + common_scripts\_destructible::destructible_fx("tag_fx","props/mail_box_explode",1); + common_scripts\_destructible::destructible_sound("exp_mailbox_sweet"); + common_scripts\_destructible::func_976(100,2000,64,64,0,0); + common_scripts\_destructible::destructible_state("tag_origin","com_mailbox_dam"); + common_scripts\_destructible::destructible_part("tag_door","com_mailbox_door",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_flag","com_mailbox_flag",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 68 +toy_mailbox2(param_00) +{ + common_scripts\_destructible::destructible_create("toy_mailbox2_" + param_00,"tag_origin",120); + common_scripts\_destructible::destructible_fx("tag_fx","props/mail_box_explode",1,common_scripts\_destructible::damage_not("splash")); + common_scripts\_destructible::destructible_fx("tag_fx","props/mail_box_explode",1,"splash"); + common_scripts\_destructible::destructible_sound("exp_mailbox_sweet"); + common_scripts\_destructible::func_976(2800,3000,64,64,0,0,1); + common_scripts\_destructible::destructible_state(undefined,"mailbox_" + param_00 + "_dam",20,undefined,undefined,"splash"); + common_scripts\_destructible::destructible_state(undefined,"mailbox_black_dest",undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_door","mailbox_" + param_00 + "_door",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_flag","mailbox_black_flag",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 69 +toy_newspaper_stand_red(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",120); + common_scripts\_destructible::destructible_fx("tag_door","props/news_stand_paper_spill",1,common_scripts\_destructible::damage_not("splash")); + common_scripts\_destructible::destructible_sound("exp_newspaper_box"); + common_scripts\_destructible::func_976(2500,2501,64,64,0,0,1); + common_scripts\_destructible::destructible_state(undefined,"com_newspaperbox_red_dam",20,undefined,undefined,"splash"); + common_scripts\_destructible::destructible_fx("tag_fx","props/news_stand_explosion",1,"splash"); + common_scripts\_destructible::destructible_state(undefined,"com_newspaperbox_red_des",undefined,undefined,undefined,undefined,undefined,0); + common_scripts\_destructible::destructible_part("tag_door","com_newspaperbox_red_door",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 70 +func_09C1(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",120); + common_scripts\_destructible::destructible_fx("tag_door","props/news_stand_paper_spill_shatter",1,common_scripts\_destructible::damage_not("splash")); + common_scripts\_destructible::destructible_sound("exp_newspaper_box"); + common_scripts\_destructible::func_976(800,2001,64,64,0,0,1); + common_scripts\_destructible::destructible_state(undefined,"com_newspaperbox_blue_dam",20,undefined,undefined,"splash"); + common_scripts\_destructible::destructible_fx("tag_fx","props/news_stand_explosion",1,"splash"); + common_scripts\_destructible::destructible_state(undefined,"com_newspaperbox_blue_des",undefined,undefined,undefined,undefined,undefined,0); + common_scripts\_destructible::destructible_part("tag_door","com_newspaperbox_blue_door",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 71 +toy_filecabinet(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",120); + common_scripts\_destructible::destructible_fx("tag_drawer_lower","props/filecabinet_dam",1,common_scripts\_destructible::damage_not("splash")); + common_scripts\_destructible::destructible_sound("exp_filecabinet"); + common_scripts\_destructible::destructible_state(undefined,"com_filecabinetblackclosed_dam",20,undefined,undefined,"splash"); + common_scripts\_destructible::destructible_fx("tag_drawer_upper","props/filecabinet_des",1,"splash"); + common_scripts\_destructible::destructible_sound("exp_filecabinet"); + common_scripts\_destructible::destructible_physics("tag_drawer_upper",(50,-10,5)); + common_scripts\_destructible::destructible_state(undefined,"com_filecabinetblackclosed_des",undefined,undefined,undefined,undefined,undefined,0); + common_scripts\_destructible::destructible_part("tag_drawer_upper","com_filecabinetblackclosed_drawer",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 72 +toy_trashbin_01(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",120,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","props/garbage_spew_des",1,"splash"); + common_scripts\_destructible::destructible_fx("tag_fx","props/garbage_spew",1,common_scripts\_destructible::damage_not("splash")); + common_scripts\_destructible::destructible_sound("exp_trashcan_sweet"); + common_scripts\_destructible::func_976(1300,1351,1,1,10,20); + common_scripts\_destructible::destructible_state(undefined,"com_trashbin01_dmg",undefined,undefined,undefined,undefined,undefined,0); + common_scripts\_destructible::destructible_part("tag_fx","com_trashbin01_lid",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 73 +func_09C4(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",120,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","props/garbage_spew_des",1,"splash"); + common_scripts\_destructible::destructible_fx("tag_fx","props/garbage_spew",1,common_scripts\_destructible::damage_not("splash")); + common_scripts\_destructible::destructible_sound("exp_trashcan_sweet"); + common_scripts\_destructible::func_976(600,800,1,1,10,20); + common_scripts\_destructible::destructible_state(undefined,"com_trashbin02_dmg",undefined,undefined,undefined,undefined,undefined,0); + common_scripts\_destructible::destructible_part("tag_fx","com_trashbin02_lid",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 74 +toy_trashbag1(param_00) +{ + common_scripts\_destructible::destructible_create("toy_trashbag1_" + param_00,"tag_origin",120,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","props/trashbag_" + param_00); + common_scripts\_destructible::destructible_state(undefined,"com_trashbag1_" + param_00 + "_dsr",undefined,undefined,undefined,undefined,undefined,0); +} + +//Function Number: 75 +toy_recyclebin_01(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",120,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","props/garbage_spew_des",1,"splash"); + common_scripts\_destructible::destructible_fx("tag_fx","props/garbage_spew",1,common_scripts\_destructible::damage_not("splash")); + common_scripts\_destructible::destructible_sound("exp_trashcan_sweet"); + common_scripts\_destructible::func_976(600,651,1,1,10,20); + common_scripts\_destructible::destructible_state(undefined,"com_recyclebin01_dmg",undefined,undefined,undefined,undefined,undefined,0); + common_scripts\_destructible::destructible_part("tag_fx","com_recyclebin01_lid",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 76 +toy_trashcan_metal_closed(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",120,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","props/garbage_spew_des",1,"splash"); + common_scripts\_destructible::destructible_fx("tag_fx","props/garbage_spew",1,common_scripts\_destructible::damage_not("splash")); + common_scripts\_destructible::destructible_sound("exp_trashcan_sweet"); + common_scripts\_destructible::func_976(600,651,1,1,10,20); + common_scripts\_destructible::destructible_state(undefined,"com_trashcan_metal_with_trash",undefined,undefined,undefined,undefined,undefined,0); + common_scripts\_destructible::destructible_part("tag_fx","com_trashcan_metalLID",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 77 +toy_water_collector(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",220,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/water_collector_explosion"); + common_scripts\_destructible::destructible_sound("water_collector_splash"); + common_scripts\_destructible::func_976(500,800,32,32,1,10,undefined,32); + common_scripts\_destructible::destructible_state(undefined,"utility_water_collector_base_dest",undefined,undefined,"no_melee",undefined,undefined,0); + common_scripts\_destructible::destructible_part("tag_lid",undefined,220,undefined,undefined,"no_melee",1); + common_scripts\_destructible::destructible_state(undefined); +} + +//Function Number: 78 +toy_foliage_tree_oak_1(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",120,undefined,32,"splash"); + common_scripts\_destructible::destructible_fx("tag_fx","explosions/tree_trunk_explosion_oak_1",1,"splash"); + common_scripts\_destructible::destructible_sound("large_oak_tree_impact"); + common_scripts\_destructible::destructible_sound("large_oak_tree_fall"); + common_scripts\_destructible::func_976(600,651,1,1,10,20); + common_scripts\_destructible::destructible_state(undefined,"foliage_tree_oak_1_destroyed_trunk",undefined,undefined,undefined,undefined,undefined,0); +} + +//Function Number: 79 +toy_paris_tree_plane_large(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",250,undefined,32,"splash"); + common_scripts\_destructible::destructible_fx("tag_origin","props/paris_tree_plane_destruct"); + common_scripts\_destructible::func_976(100,351,150,350,100,200,undefined,undefined,undefined,undefined,(-400,0,80),0.7); + common_scripts\_destructible::destructible_state(undefined,"foliage_paris_tree_plane_broken",undefined,undefined,undefined,undefined,undefined,0); +} + +//Function Number: 80 +toy_usa_gas_station_trash_bin_01(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",120,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx","props/garbage_spew_des",1,"splash"); + common_scripts\_destructible::destructible_fx("tag_fx","props/garbage_spew",1,common_scripts\_destructible::damage_not("splash")); + common_scripts\_destructible::func_976(600,651,1,1,10,20); + common_scripts\_destructible::destructible_state(undefined,"usa_gas_station_trash_bin_01_base",undefined,undefined,undefined,undefined,undefined,0); + common_scripts\_destructible::destructible_part("tag_fx","usa_gas_station_trash_bin_01_lid",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 81 +toy_usa_gas_station_trash_bin_02(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",120,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_fx_high","props/garbage_spew_des",1,"splash"); + common_scripts\_destructible::destructible_fx("tag_fx_high","props/garbage_spew",1,common_scripts\_destructible::damage_not("splash")); + common_scripts\_destructible::func_976(600,651,1,1,10,20); + common_scripts\_destructible::destructible_state(undefined,"usa_gas_station_trash_bin_02_base",undefined,undefined,undefined,undefined,undefined,0); + common_scripts\_destructible::destructible_part("tag_fx_high","usa_gas_station_trash_bin_02_lid",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 82 +func_09CD(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",150,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(15); + common_scripts\_destructible::destructible_lights_out(16); + common_scripts\_destructible::destructible_fx("tag_fx","misc/light_blowout_runner"); + common_scripts\_destructible::destructible_state(undefined,"com_light_ceiling_round_off",undefined,undefined,"no_melee"); +} + +//Function Number: 83 +toy_light_ceiling_fluorescent(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",150,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(15); + common_scripts\_destructible::destructible_fx("tag_fx","misc/light_fluorescent_blowout_runner"); + common_scripts\_destructible::destructible_fx("tag_swing_fx","misc/light_blowout_swinging_runner"); + common_scripts\_destructible::destructible_lights_out(16); + common_scripts\_destructible::func_976(20,2000,64,64,40,80); + common_scripts\_destructible::destructible_anim(get_precached_anim("ight_fluorescent_swing"),#animtree,"setanimknob",undefined,0,"light_fluorescent_swing"); + common_scripts\_destructible::destructible_sound("fluorescent_light_fall",undefined,0); + common_scripts\_destructible::destructible_sound("fluorescent_light_bulb",undefined,0); + common_scripts\_destructible::destructible_anim(get_precached_anim("ight_fluorescent_swing_02"),#animtree,"setanimknob",undefined,1,"light_fluorescent_swing_02"); + common_scripts\_destructible::destructible_sound("fluorescent_light_fall",undefined,1); + common_scripts\_destructible::destructible_sound("fluorescent_light_bulb",undefined,1); + common_scripts\_destructible::destructible_anim(get_precached_anim("ight_fluorescent_null"),#animtree,"setanimknob",undefined,2,"light_fluorescent_null"); + common_scripts\_destructible::destructible_state(undefined,"me_lightfluohang_double_destroyed",undefined,undefined,"no_melee"); +} + +//Function Number: 84 +toy_light_ceiling_fluorescent_spotlight(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",150,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(15); + common_scripts\_destructible::destructible_sound("fluorescent_light_bulb"); + common_scripts\_destructible::destructible_fx("tag_fx","misc/light_fluorescent_blowout_runner"); + common_scripts\_destructible::destructible_fx("tag_swing_fx","misc/light_blowout_swinging_runner"); + common_scripts\_destructible::destructible_lights_out(16); + common_scripts\_destructible::func_976(20,2000,64,64,40,80); + common_scripts\_destructible::destructible_anim(get_precached_anim("ight_fluorescent_swing"),#animtree,"setanimknob",undefined,0,"light_fluorescent_swing"); + common_scripts\_destructible::destructible_sound("fluorescent_light_fall",undefined,0); + common_scripts\_destructible::destructible_sound("fluorescent_light_bulb",undefined,0); + common_scripts\_destructible::destructible_spotlight("tag_swing_r_far"); + common_scripts\_destructible::destructible_sound("fluorescent_light_fall"); + common_scripts\_destructible::destructible_state(undefined,"me_lightfluohang_double_destroyed",undefined,undefined,"no_melee"); +} + +//Function Number: 85 +toy_light_ceiling_fluorescent_single(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",150,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(15); + common_scripts\_destructible::destructible_fx("tag_fx","misc/light_fluorescent_single_blowout_runner"); + common_scripts\_destructible::destructible_fx("tag_swing_center_fx","misc/light_blowout_swinging_runner"); + common_scripts\_destructible::destructible_fx("tag_swing_center_fx_far","misc/light_blowout_swinging_runner"); + common_scripts\_destructible::destructible_lights_out(32); + common_scripts\_destructible::func_976(20,2000,64,64,40,80); + common_scripts\_destructible::destructible_anim(get_precached_anim("ight_fluorescent_single_swing"),#animtree,"setanimknob",undefined,0,"light_fluorescent_single_swing"); + common_scripts\_destructible::destructible_sound("fluorescent_light_fall",undefined,0); + common_scripts\_destructible::destructible_sound("fluorescent_light_bulb",undefined,0); + common_scripts\_destructible::destructible_anim(get_precached_anim("ight_fluorescent_single_swing_02"),#animtree,"setanimknob",undefined,1,"light_fluorescent_single_swing_02"); + common_scripts\_destructible::destructible_sound("fluorescent_light_hinge",undefined,1); + common_scripts\_destructible::destructible_sound("fluorescent_light_bulb",undefined,1); + common_scripts\_destructible::destructible_anim(get_precached_anim("ight_fluorescent_single_swing_03"),#animtree,"setanimknob",undefined,2,"light_fluorescent_single_swing_03"); + common_scripts\_destructible::destructible_sound("fluorescent_light_fall",undefined,2); + common_scripts\_destructible::destructible_sound("fluorescent_light_bulb",undefined,2); + common_scripts\_destructible::destructible_anim(get_precached_anim("ight_fluorescent_single_null"),#animtree,"setanimknob",undefined,3,"light_fluorescent_single_null"); + common_scripts\_destructible::destructible_state(undefined,"me_lightfluohang_single_destroyed",undefined,undefined,"no_melee"); +} + +//Function Number: 86 +toy_light_ceiling_fluorescent_single_spotlight(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",150,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(15); + common_scripts\_destructible::destructible_lights_out(16); + common_scripts\_destructible::destructible_sound("fluorescent_light_bulb"); + common_scripts\_destructible::destructible_fx("tag_fx","misc/light_fluorescent_single_blowout_runner"); + common_scripts\_destructible::destructible_fx("tag_swing_center_fx","misc/light_blowout_swinging_runner"); + common_scripts\_destructible::destructible_fx("tag_swing_center_fx_far","misc/light_blowout_swinging_runner"); + common_scripts\_destructible::func_976(20,2000,64,64,40,80); + common_scripts\_destructible::destructible_anim(get_precached_anim("ight_fluorescent_single_swing_02"),#animtree,"setanimknob",undefined,undefined,"light_fluorescent_single_swing_02"); + common_scripts\_destructible::destructible_sound("fluorescent_light_fall"); + common_scripts\_destructible::destructible_spotlight("tag_swing_center_fx_far"); + common_scripts\_destructible::destructible_state(undefined,"me_lightfluohang_single_destroyed",undefined,undefined,"no_melee"); +} + +//Function Number: 87 +toy_bookstore_bookstand4_books(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(7); + common_scripts\_destructible::destructible_fx("tag_fx","props/bookshelf4_dmg",1,common_scripts\_destructible::damage_not("splash")); + common_scripts\_destructible::destructible_state(undefined,"bookstore_bookstand4",100,undefined,undefined,"splash"); + common_scripts\_destructible::destructible_fx("tag_fx","props/bookshelf4_des",1,"splash"); + common_scripts\_destructible::func_976(2000,3800,32,32,1,5,undefined,0); + common_scripts\_destructible::destructible_state(undefined,"bookstore_bookstand4_null",undefined,undefined,undefined,undefined,undefined,0); +} + +//Function Number: 88 +toy_locker_double(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",150,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_anim(get_precached_anim("ocker_broken_both_doors_1"),#animtree,"setanimknob",undefined,0,"locker_broken_both_doors_1"); + common_scripts\_destructible::destructible_fx("tag_fx","props/locker_double_des_02_right",undefined,undefined,0); + common_scripts\_destructible::destructible_sound("lockers_fast",undefined,0); + common_scripts\_destructible::destructible_anim(get_precached_anim("ocker_broken_both_doors_2"),#animtree,"setanimknob",undefined,1,"locker_broken_both_doors_2"); + common_scripts\_destructible::destructible_fx("tag_fx","props/locker_double_des_01_left",undefined,undefined,1); + common_scripts\_destructible::destructible_sound("lockers_fast",undefined,1); + common_scripts\_destructible::destructible_anim(get_precached_anim("ocker_broken_both_doors_4"),#animtree,"setanimknob",undefined,2,"locker_broken_both_doors_4"); + common_scripts\_destructible::destructible_fx("tag_fx","props/locker_double_des_03_both",undefined,undefined,2); + common_scripts\_destructible::destructible_sound("lockers_double",undefined,2); + common_scripts\_destructible::destructible_anim(get_precached_anim("ocker_broken_door1_fast"),#animtree,"setanimknob",undefined,3,"locker_broken_door1_fast"); + common_scripts\_destructible::destructible_fx("tag_fx","props/locker_double_des_01_left",undefined,undefined,3); + common_scripts\_destructible::destructible_sound("lockers_fast",undefined,3); + common_scripts\_destructible::destructible_anim(get_precached_anim("ocker_broken_door2_fast"),#animtree,"setanimknob",undefined,4,"locker_broken_door2_fast"); + common_scripts\_destructible::destructible_fx("tag_fx","props/locker_double_des_02_right",undefined,undefined,4); + common_scripts\_destructible::destructible_sound("lockers_fast",undefined,4); + common_scripts\_destructible::destructible_anim(get_precached_anim("ocker_broken_both_doors_3"),#animtree,"setanimknob",undefined,5,"locker_broken_both_doors_3"); + common_scripts\_destructible::destructible_fx("tag_fx","misc/no_effect",undefined,undefined,5); + common_scripts\_destructible::destructible_sound("lockers_minor",undefined,5); + common_scripts\_destructible::destructible_anim(get_precached_anim("ocker_broken_door1_slow"),#animtree,"setanimknob",undefined,6,"locker_broken_door1_slow"); + common_scripts\_destructible::destructible_fx("tag_fx","misc/no_effect",undefined,undefined,6); + common_scripts\_destructible::destructible_sound("lockers_minor",undefined,6); + common_scripts\_destructible::destructible_anim(get_precached_anim("ocker_broken_door2_slow"),#animtree,"setanimknob",undefined,7,"locker_broken_door2_slow"); + common_scripts\_destructible::destructible_fx("tag_fx","misc/no_effect",undefined,undefined,7); + common_scripts\_destructible::destructible_sound("lockers_minor",undefined,7); + common_scripts\_destructible::destructible_state(undefined,"com_locker_double_destroyed",undefined,undefined,"no_melee"); +} + +//Function Number: 89 +toy_dubai_fish_sculpture(param_00,param_01,param_02) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",200000000,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(2); + for(var_03 = 1;var_03 <= param_02;var_03++) + { + common_scripts\_destructible::destructible_part("tag_" + param_01 + "_" + var_03,param_00,10); + common_scripts\_destructible::destructible_fx("tag_" + param_01 + "_" + var_03,"props/dub_fish_" + param_01 + "_shatter"); + common_scripts\_destructible::destructible_state(undefined); + } +} + +//Function Number: 90 +toy_intro_concrete_chipaway(param_00,param_01) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",200000000,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("tag_origin",param_00,undefined,undefined,"no_melee"); + for(var_02 = 1;var_02 <= param_01;var_02++) + { + common_scripts\_destructible::destructible_part("tag_chunk_" + var_02,param_00,200,undefined,undefined,"no_splash"); + common_scripts\_destructible::destructible_splash_damage_scaler(0.01); + common_scripts\_destructible::destructible_fx("tag_chunk_" + var_02,"props/intro_wall_chunk_exp"); + common_scripts\_destructible::destructible_state(undefined); + } +} + +//Function Number: 91 +toy_chicken(param_00) +{ + common_scripts\_destructible::destructible_create("toy_chicken" + param_00,"tag_origin",0,undefined,32); + common_scripts\_destructible::destructible_anim(get_precached_anim("hicken_cage_loop_01"),#animtree,"setanimknob",undefined,0,"chicken_cage_loop_01",1.6); + common_scripts\_destructible::destructible_anim(get_precached_anim("hicken_cage_loop_02"),#animtree,"setanimknob",undefined,1,"chicken_cage_loop_02",1.6); + common_scripts\_destructible::destructible_loopsound("animal_chicken_idle_loop"); + common_scripts\_destructible::destructible_state("tag_origin","chicken" + param_00,25); + common_scripts\_destructible::destructible_fx("tag_origin","props/chicken_exp" + param_00); + common_scripts\_destructible::destructible_anim(get_precached_anim("hicken_cage_death"),#animtree,"setanimknob",undefined,0,"chicken_cage_death"); + common_scripts\_destructible::destructible_anim(get_precached_anim("hicken_cage_death_02"),#animtree,"setanimknob",undefined,1,"chicken_cage_death_02"); + common_scripts\_destructible::destructible_sound("animal_chicken_death"); + common_scripts\_destructible::destructible_state(undefined,"chicken" + param_00,undefined,undefined,"no_melee"); +} + +//Function Number: 92 +toy_hide_with_fx(param_00,param_01,param_02,param_03) +{ + common_scripts\_destructible::destructible_create(param_00,param_01,param_03); + common_scripts\_destructible::destructible_fx("tag_origin",param_02); + common_scripts\_destructible::destructible_state("tag_origin","generic_prop_raven"); +} + +//Function Number: 93 +vehicle_ac130_80s_sedan1(param_00) +{ + common_scripts\_destructible::destructible_create("vehicle_ac130_80s_sedan1_" + param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,150,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_80s_sedan1_" + param_00 + "_destroyed",undefined,32,"o_melee"); + var_01 = "tag_hood"; + common_scripts\_destructible::destructible_part(var_01,"vehicle_80s_sedan1_" + param_00 + "_hood",undefined,undefined,undefined,undefined,1,2.5); + var_01 = "tag_trunk"; + common_scripts\_destructible::destructible_part(var_01,"vehicle_80s_sedan1_" + param_00 + "_trunk",undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_80s_sedan1_" + param_00 + "_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","vehicle_80s_sedan1_" + param_00 + "_wheel_LF",20,undefined,undefined,"no_melee",undefined,2.3); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("tag_door_left_front",undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_door_left_back",undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_door_right_front","vehicle_80s_sedan1_" + param_00 + "_door_RF",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_door_right_back","vehicle_80s_sedan1_" + param_00 + "_door_RB",undefined,undefined,undefined,undefined,1,1); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_bumper_front","vehicle_80s_sedan1_" + param_00 + "_bumper_F",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_bumper_back","vehicle_80s_sedan1_" + param_00 + "_bumper_B",undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_80s_sedan1_" + param_00 + "_mirror_L",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_80s_sedan1_" + param_00 + "_mirror_R",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 94 +vehicle_bus_destructible(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + var_01 = "tag_window_front_left"; + common_scripts\_destructible::destructible_part(var_01,undefined,99,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_window_front_right"; + common_scripts\_destructible::destructible_part(var_01,undefined,99,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_window_driver"; + common_scripts\_destructible::destructible_part(var_01,undefined,99,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_window_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,99,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_window_side_1"; + common_scripts\_destructible::destructible_part(var_01,undefined,99,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_window_side_2"; + common_scripts\_destructible::destructible_part(var_01,undefined,99,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_window_side_3"; + common_scripts\_destructible::destructible_part(var_01,undefined,99,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_window_side_4"; + common_scripts\_destructible::destructible_part(var_01,undefined,99,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_window_side_5"; + common_scripts\_destructible::destructible_part(var_01,undefined,99,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_window_side_6"; + common_scripts\_destructible::destructible_part(var_01,undefined,99,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_window_side_7"; + common_scripts\_destructible::destructible_part(var_01,undefined,99,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_window_side_8"; + common_scripts\_destructible::destructible_part(var_01,undefined,99,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_window_side_9"; + common_scripts\_destructible::destructible_part(var_01,undefined,99,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_window_side_10"; + common_scripts\_destructible::destructible_part(var_01,undefined,99,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_window_side_11"; + common_scripts\_destructible::destructible_part(var_01,undefined,99,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,200,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); +} + +//Function Number: 95 +vehicle_80s_sedan1(param_00) +{ + common_scripts\_destructible::destructible_create("vehicle_80s_sedan1_" + param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,150,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,150,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_80s_sedan1_" + param_00 + "_destroyed",undefined,32,"o_melee"); + var_01 = "tag_hood"; + common_scripts\_destructible::destructible_part(var_01,"vehicle_80s_sedan1_" + param_00 + "_hood",undefined,undefined,undefined,undefined,1,2.5); + var_01 = "tag_trunk"; + common_scripts\_destructible::destructible_part(var_01,"vehicle_80s_sedan1_" + param_00 + "_trunk",undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_80s_sedan1_" + param_00 + "_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","vehicle_80s_sedan1_" + param_00 + "_wheel_LF",20,undefined,undefined,"no_melee",undefined,2.3); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("tag_door_left_front",undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_door_left_back",undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_door_right_front","vehicle_80s_sedan1_" + param_00 + "_door_RF",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_door_right_back","vehicle_80s_sedan1_" + param_00 + "_door_RB",undefined,undefined,undefined,undefined,1,1); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_bumper_front","vehicle_80s_sedan1_" + param_00 + "_bumper_F",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_bumper_back","vehicle_80s_sedan1_" + param_00 + "_bumper_B",undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_80s_sedan1_" + param_00 + "_mirror_L",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_80s_sedan1_" + param_00 + "_mirror_R",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 96 +vehicle_80s_hatch1(param_00) +{ + common_scripts\_destructible::destructible_create("vehicle_80s_hatch1_" + param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,150,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,150,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_80s_hatch1_" + param_00 + "_destroyed",undefined,32,"o_melee"); + var_01 = "tag_hood"; + common_scripts\_destructible::destructible_part(var_01,"vehicle_80s_hatch1_" + param_00 + "_hood",800,undefined,undefined,undefined,1,1.5); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_80s_hatch1_" + param_00 + "_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_80s_hatch1_" + param_00 + "_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("tag_door_left_front",undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_door_right_front","vehicle_80s_hatch1_" + param_00 + "_door_RF",undefined,undefined,undefined,undefined,1,1); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,10,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,10,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,10,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,10,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,10,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,10,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_bumper_front"); + common_scripts\_destructible::destructible_part("tag_bumper_back"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_80s_hatch1_" + param_00 + "_mirror_L",40); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_80s_hatch1_" + param_00 + "_mirror_R",40); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 97 +func_09DE(param_00) +{ + common_scripts\_destructible::destructible_create("vehicle_80s_hatch2_" + param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,150,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,150,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_80s_hatch2_" + param_00 + "_destroyed",undefined,32,"o_melee"); + var_01 = "tag_hood"; + common_scripts\_destructible::destructible_part(var_01,"vehicle_80s_hatch2_" + param_00 + "_hood",800,undefined,undefined,undefined,1,1.5); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_80s_hatch2_" + param_00 + "_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_80s_hatch2_" + param_00 + "_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("tag_door_left_front",undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_door_right_front","vehicle_80s_hatch2_" + param_00 + "_door_RF",undefined,undefined,undefined,undefined,1,1); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_bumper_front"); + common_scripts\_destructible::destructible_part("tag_bumper_back"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_80s_hatch2_" + param_00 + "_mirror_L",40); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_80s_hatch2_" + param_00 + "_mirror_R",40); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 98 +func_09DF(param_00) +{ + common_scripts\_destructible::destructible_create("vehicle_80s_wagon1_" + param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,150,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,150,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_80s_wagon1_" + param_00 + "_destroyed",undefined,32,"o_melee"); + var_01 = "tag_hood"; + common_scripts\_destructible::destructible_part(var_01,"vehicle_80s_wagon1_" + param_00 + "_hood",800,undefined,undefined,undefined,1,1.5); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_80s_wagon1_" + param_00 + "_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","vehicle_80s_wagon1_" + param_00 + "_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("tag_door_left_front",undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_door_left_back",undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_door_right_front",undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_door_right_back","vehicle_80s_wagon1_" + param_00 + "_door_RB",undefined,undefined,undefined,undefined,1,1); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back2"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back2_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back2"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back2_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_bumper_front","vehicle_80s_wagon1_" + param_00 + "_bumper_F",undefined,undefined,undefined,undefined,1,0.7); + common_scripts\_destructible::destructible_part("tag_bumper_back",undefined,undefined,undefined,undefined,undefined,undefined,0.6); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_80s_wagon1_" + param_00 + "_mirror_L",40); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_80s_wagon1_" + param_00 + "_mirror_R",40); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 99 +vehicle_civ_car_a(param_00) +{ + common_scripts\_destructible::destructible_create("vehicle_civ_car_a_" + param_00,"ac_prs_veh_civ_car_a_" + param_00 + "_lod0",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("ac_prs_veh_civ_car_a_dam" + param_00 + "_lod0","ac_prs_veh_civ_car_a_dam" + param_00,250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/small_vehicle_explosion_ac130",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,150,250,50,300,undefined,undefined,0.3,500); +} + +//Function Number: 100 +vehicle_small_hatch(param_00) +{ + common_scripts\_destructible::destructible_create("vehicle_small_hatch_" + param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,150,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,150,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_small_hatch_" + param_00 + "_destroyed",undefined,32,"o_melee"); + var_01 = "tag_hood"; + common_scripts\_destructible::destructible_part(var_01,"vehicle_small_hatch_" + param_00 + "_hood",800,undefined,undefined,undefined,1,1.5); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("tag_door_left_front","vehicle_small_hatch_" + param_00 + "_door_LF",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_door_right_front","vehicle_small_hatch_" + param_00 + "_door_RF",undefined,undefined,undefined,undefined,1,1); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_bumper_front",undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_bumper_back",undefined,undefined,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_small_hatch_" + param_00 + "_mirror_L",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_small_hatch_" + param_00 + "_mirror_R",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 101 +func_09E2() +{ + common_scripts\_destructible::destructible_create("vehicle_london_cab_black","tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,150,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,150,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_london_cab_destroyed",undefined,32,"o_melee"); + var_00 = "tag_hood"; + common_scripts\_destructible::destructible_part(var_00,"vehicle_london_cab_hood",800,undefined,undefined,undefined,1,1.5); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_london_cab_wheel_lf",20,undefined,undefined,"no_melee",undefined,1); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_london_cab_wheel_lf",20,undefined,undefined,"no_melee",undefined,1); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","vehicle_london_cab_wheel_lf",20,undefined,undefined,"no_melee",undefined,1); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("tag_door_left_front","vehicle_london_cab_door_lb",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_door_right_front","vehicle_london_cab_door_lb",undefined,undefined,undefined,undefined,1,1); + var_00 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_00,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_00 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_00 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_00 = "tag_center_glass"; + common_scripts\_destructible::destructible_part(var_00,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_00 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_00 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_00 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_00,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_00 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_00 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_00 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_00,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_00 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_00 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_00 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_00,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_00 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_00 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_00 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_00,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_00 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_00 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_00 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_00,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_00 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_00 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_00 = "tag_glass_left_back_02"; + common_scripts\_destructible::destructible_part(var_00,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_00 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_00 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_00 = "tag_glass_right_back_02"; + common_scripts\_destructible::destructible_part(var_00,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_00 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_00 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_00 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_00,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_00,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_00 + "_d"); + var_00 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_00,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_00,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_00 + "_d"); + common_scripts\_destructible::destructible_part("tag_bumper_front",undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_bumper_back",undefined,undefined,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_london_cab_mirror_l",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_london_cab_mirror_r",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 102 +vehicle_pickup(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",300,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,210,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_pickup_destroyed",undefined,32,"o_melee"); + var_01 = "tag_hood"; + common_scripts\_destructible::destructible_part(var_01,"vehicle_pickup_hood",800,undefined,undefined,undefined,1,2.5); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("tag_door_left_front","vehicle_pickup_door_LF",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_door_right_front","vehicle_pickup_door_RF",undefined,undefined,undefined,undefined,1,1); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_bumper_front",undefined,undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_bumper_back",undefined,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_pickup_mirror_L",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_pickup_mirror_R",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 103 +vehicle_hummer(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_deathfx","explosions/vehicle_explosion_hummer",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,210,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_hummer_destroyed",undefined,32,"o_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); +} + +//Function Number: 104 +vehicle_gaz(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire_gaz",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_deathfx","explosions/vehicle_explosion_gaz",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,210,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_gaz_tigr_harbor_destroyed",undefined,32,"o_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_mid"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_mid_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_mid"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_mid_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back_left"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_left_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back_right"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_right_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); +} + +//Function Number: 105 +vehicle_gaz_harbor(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke_moving",0.1); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire_gaz_moving",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(25,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,1000,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_deathfx","explosions/vehicle_explosion_gaz",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,210,250,50,300,undefined,undefined,0.3,500); + common_scripts\_destructible::destructible_state(undefined,"vehicle_gaz_tigr_paris_destroyed",undefined,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_part("tag_frontbumper",undefined,50,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_hood_fx","props/vehicle_gaz_frontBumper",0); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_moving",0.1); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,10,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large_moving"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med_moving"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med_moving"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_mid"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_mid_fx","props/car_glass_med_moving"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_mid"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_mid_fx","props/car_glass_med_moving"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med_moving"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med_moving"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back_left"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_left_fx","props/car_glass_med_moving"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back_right"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_right_fx","props/car_glass_med_moving"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); +} + +//Function Number: 106 +vehicle_bm21(param_00,param_01) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",300,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_deathfx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,210,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,param_01,undefined,32,"o_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + var_02 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_02,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_02 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_02 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_02,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_02 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_02 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_02,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_02 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_02 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_02,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_02 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); +} + +//Function Number: 107 +vehicle_moving_truck(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",300,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/vehicle_explosion_medium",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,210,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_7476(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + if(param_00 == "ehicle_moving_truck") + { + common_scripts\_destructible::destructible_state(undefined,"vehicle_moving_truck_dst",undefined,32,"no_melee"); + } + else + { + common_scripts\_destructible::destructible_state(undefined,"vehicle_moving_truck_thai_dst",undefined,32,"no_melee"); + } + + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); +} + +//Function Number: 108 +vehicle_subway_cart(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",undefined,undefined,32,"no_melee"); + create_vehicle_subway_cart_window_single("TAG_WINDOW_SMALL_02_RI",1,"props/car_glass_subway_tall"); + create_vehicle_subway_cart_window_single("TAG_WINDOW_SMALL_03_RI",1,"props/car_glass_subway_tall"); + create_vehicle_subway_cart_window_single("TAG_WINDOW_SMALL_04_RI",1,"props/car_glass_subway_tall"); + create_vehicle_subway_cart_window_single("TAG_WINDOW_SMALL_05_RI",1,"props/car_glass_subway_tall"); + create_vehicle_subway_cart_window_single("TAG_WINDOW_SMALL_02_LE",1,"props/car_glass_subway_tall"); + create_vehicle_subway_cart_window_single("TAG_WINDOW_SMALL_03_LE",1,"props/car_glass_subway_tall"); + create_vehicle_subway_cart_window_single("TAG_WINDOW_SMALL_04_LE",1,"props/car_glass_subway_tall"); + create_vehicle_subway_cart_window_single("TAG_WINDOW_SMALL_05_LE",1,"props/car_glass_subway_tall"); +} + +//Function Number: 109 +create_vehicle_subway_cart_window_single(param_00,param_01,param_02) +{ + common_scripts\_destructible::destructible_part(param_00,undefined,140,undefined,undefined,undefined,undefined,undefined,1); + if(param_01) + { + common_scripts\_destructible::destructible_state(param_00 + "_D",undefined,80,undefined,undefined,undefined,1); + } + + common_scripts\_destructible::destructible_fx(param_00,param_02); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); +} + +//Function Number: 110 +vehicle_subway_cart_windows(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",undefined,undefined,32,"no_melee"); + create_vehicle_subway_cart_window_single("TAG_FRONT_WINDOW",1,"props/car_glass_subway_tall"); + create_vehicle_subway_cart_window_single("TAG_WINDOW_01_LE",1,"props/car_glass_subway_large"); + create_vehicle_subway_cart_window_single("TAG_WINDOW_03_LE",1,"props/car_glass_subway_large"); + create_vehicle_subway_cart_window_single("TAG_WINDOW_04_LE",1,"props/car_glass_subway_large"); + create_vehicle_subway_cart_window_single("TAG_WINDOW_07_LE",1,"props/car_glass_subway_large"); + create_vehicle_subway_cart_window_single("TAG_WINDOW_08_LE",1,"props/car_glass_subway_large"); + create_vehicle_subway_cart_window_single("TAG_WINDOW_011_LE",1,"props/car_glass_subway_large"); + create_vehicle_subway_cart_window_single("TAG_WINDOW_012_LE",1,"props/car_glass_subway_large"); + create_vehicle_subway_cart_window_single("TAG_WINDOW_014_LE",1,"props/car_glass_subway_tall"); + create_vehicle_subway_cart_window_single("TAG_WINDOW_01_RI",1,"props/car_glass_subway_large"); + create_vehicle_subway_cart_window_single("TAG_WINDOW_03_RI",1,"props/car_glass_subway_large"); + create_vehicle_subway_cart_window_single("TAG_WINDOW_04_RI",1,"props/car_glass_subway_large"); + create_vehicle_subway_cart_window_single("TAG_WINDOW_07_RI",1,"props/car_glass_subway_large"); + create_vehicle_subway_cart_window_single("TAG_WINDOW_08_RI",1,"props/car_glass_subway_large"); + create_vehicle_subway_cart_window_single("TAG_WINDOW_011_RI",1,"props/car_glass_subway_large"); + create_vehicle_subway_cart_window_single("TAG_WINDOW_012_RI",1,"props/car_glass_subway_large"); + create_vehicle_subway_cart_window_single("TAG_WINDOW_014_RI",1,"props/car_glass_subway_tall"); +} + +//Function Number: 111 +vehicle_subway_cart_windows_small(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",undefined,undefined,32,"no_melee"); + create_vehicle_subway_cart_window_single("TAG_WINDOW_SMALL_01_LE",1,"props/car_glass_subway_large"); + create_vehicle_subway_cart_window_single("TAG_WINDOW_SMALL_06_LE",1,"props/car_glass_subway_large"); + create_vehicle_subway_cart_window_single("TAG_WINDOW_SMALL_01_RI",1,"props/car_glass_subway_large"); + create_vehicle_subway_cart_window_single("TAG_WINDOW_SMALL_06_RI",1,"props/car_glass_subway_large"); +} + +//Function Number: 112 +vehicle_luxurysedan(param_00) +{ + common_scripts\_destructible::destructible_create("vehicle_luxurysedan_2008" + param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,210,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_luxurysedan_2008" + param_00 + "_destroy",undefined,32,"o_melee"); + var_01 = "tag_hood"; + common_scripts\_destructible::destructible_part(var_01,"vehicle_luxurysedan_2008" + param_00 + "_hood",800,undefined,undefined,undefined,1,2.5); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_luxurysedan_2008" + param_00 + "_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_luxurysedan_2008" + param_00 + "_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_luxurysedan_2008" + param_00 + "_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","vehicle_luxurysedan_2008" + param_00 + "_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_part("tag_door_left_front","vehicle_luxurysedan_2008" + param_00 + "_door_LF",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_door_right_front","vehicle_luxurysedan_2008" + param_00 + "_door_RF",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_door_left_back","vehicle_luxurysedan_2008" + param_00 + "_door_LB",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_door_right_back","vehicle_luxurysedan_2008" + param_00 + "_door_RB",undefined,undefined,undefined,undefined,1,1); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_luxurysedan_2008" + param_00 + "_mirror_L",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_luxurysedan_2008" + param_00 + "_mirror_R",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 113 +vehicle_mig29_landed(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"TAG_ORIGIN",250,undefined,32,"splash"); + common_scripts\_destructible::destructible_splash_damage_scaler(11); + common_scripts\_destructible::destructible_loopfx("TAG_front_fire","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_loopfx("TAG_rear_fire","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"splash"); + common_scripts\_destructible::destructible_loopfx("TAG_front_fire","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_loopfx("TAG_rear_fire","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"splash"); + common_scripts\_destructible::destructible_loopfx("TAG_front_fire","smoke/airplane_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_loopfx("TAG_rear_fire","smoke/airplane_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,512,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"splash"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"splash"); + common_scripts\_destructible::destructible_fx("TAG_FX","explosions/vehicle_explosion_mig29",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(8000,10000,512,512,50,300,undefined,undefined,0.4,1000); + lib_0F09::nuke_explosion(%,#animtree,"setanimknob",undefined,undefined,"vehicle_mig29_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_mig29_v2_dest",undefined,32,"plash"); + common_scripts\_destructible::destructible_part("TAG_COCKPIT","vehicle_mig29_dest_cockpit",40,undefined,undefined,undefined,undefined,1); +} + +//Function Number: 114 +vehicle_mack_truck_short(param_00) +{ + common_scripts\_destructible::destructible_create("vehicle_mack_truck_short_" + param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/mack_truck_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_loopfx("tag_gastank","smoke/motorcycle_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("mack_truck_flareup_med"); + common_scripts\_destructible::destructible_loopsound("mack_truck_fire_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,300,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("mack_truck_fire_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_gastank","smoke/motorcycle_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_fx("tag_cab_fire","fire/firelp_med_pm"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/propane_large_exp",0); + common_scripts\_destructible::destructible_sound("mack_truck_explode"); + common_scripts\_destructible::destructible_loopsound("mack_truck_fire_med"); + common_scripts\_destructible::func_976(8000,10000,512,512,100,400,undefined,undefined,0.4,1000); + common_scripts\_destructible::destructible_state(undefined,"vehicle_mack_truck_short_" + param_00 + "_destroy",undefined,32,"no_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_mack_truck_short_" + param_00 + "_wheel_lf",20,undefined,undefined,"no_melee",undefined,8); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_mack_truck_short_" + param_00 + "_wheel_lf",20,undefined,undefined,"no_melee",undefined,81); + common_scripts\_destructible::destructible_part("left_wheel_03_jnt","vehicle_mack_truck_short_" + param_00 + "_wheel_lf",20,undefined,undefined,"no_melee",undefined,8); + common_scripts\_destructible::destructible_part("tag_door_left_front","vehicle_mack_truck_short_" + param_00 + "_door_lf",undefined,undefined,undefined,undefined,1,1); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("mack_truck_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("mack_truck_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("mack_truck_glass_break_small"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("mack_truck_glass_break_small"); + common_scripts\_destructible::destructible_state(undefined); +} + +//Function Number: 115 +vehicle_semi_truck() +{ + common_scripts\_destructible::destructible_create("vehicle_semi_truck","tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/mack_truck_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_loopfx("tag_gastank","smoke/motorcycle_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("mack_truck_flareup_med"); + common_scripts\_destructible::destructible_loopsound("mack_truck_fire_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,300,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("mack_truck_fire_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_gastank","smoke/motorcycle_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_fx("tag_cab_fire","fire/firelp_med_pm"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/propane_large_exp",0); + common_scripts\_destructible::destructible_sound("mack_truck_explode"); + common_scripts\_destructible::destructible_loopsound("mack_truck_fire_med"); + common_scripts\_destructible::func_976(8000,10000,512,512,100,400,undefined,undefined,0.4,1000); + common_scripts\_destructible::destructible_state(undefined,"vehicle_semi_truck_destroyed",undefined,32,"no_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_semi_truck_wheel_lf",20,undefined,undefined,"no_melee",undefined,81); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_semi_truck_wheel_lf",20,undefined,undefined,"no_melee",undefined,81); + common_scripts\_destructible::destructible_part("left_wheel_03_jnt","vehicle_semi_truck_wheel_lf",20,undefined,undefined,"no_melee",undefined,81); + common_scripts\_destructible::destructible_part("tag_door_left_front","vehicle_semi_truck_door_lf",undefined,undefined,undefined,undefined,1,1); + var_00 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_00,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_00 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_00 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("mack_truck_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_00 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_00,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_00 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_00 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("mack_truck_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_00 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_00,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_00 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_00 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("mack_truck_glass_break_small"); + common_scripts\_destructible::destructible_state(undefined); + var_00 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_00,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_00 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("mack_truck_glass_break_small"); + common_scripts\_destructible::destructible_state(undefined); + var_00 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_00,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_00 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_00 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("mack_truck_glass_break_small"); + common_scripts\_destructible::destructible_state(undefined); + var_00 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_00,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_00 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("mack_truck_glass_break_small"); + common_scripts\_destructible::destructible_state(undefined); +} + +//Function Number: 116 +vehicle_motorcycle(param_00) +{ + var_01 = undefined; + var_01 = get_precached_anim("vehicle_motorcycle_destroy_" + param_00); + common_scripts\_destructible::destructible_create("vehicle_motorcycle_" + param_00,"body_animate_jnt",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_death_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_death_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_death_fx","smoke/motorcycle_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,128,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(3000,4000,128,150,50,300); + lib_0F09::func_746E(var_01,#animtree,"setanimknob",undefined,undefined,"vehicle_motorcycle_destroy_" + param_00); + common_scripts\_destructible::destructible_state(undefined,"vehicle_motorcycle_" + param_00 + "_destroy",undefined,32,"o_melee"); + common_scripts\_destructible::destructible_part("front_wheel","vehicle_motorcycle_01_front_wheel_d",20,undefined,undefined,"no_melee",undefined,1.7); + common_scripts\_destructible::destructible_part("rear_wheel","vehicle_motorcycle_01_rear_wheel_d",20,undefined,undefined,"no_melee",undefined,1.7); +} + +//Function Number: 117 +vehicle_scooter(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_engine","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_engine","smoke/scooter_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,128,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,150,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/vehicle_explosion_scooter",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(3000,4000,128,150,50,300); + common_scripts\_destructible::destructible_state(undefined,"vehicle_scooter_vespa_destroyed",undefined,32,"no_melee"); +} + +//Function Number: 118 +vehicle_subcompact(param_00) +{ + common_scripts\_destructible::destructible_create("vehicle_subcompact_" + param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,150,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,150,250,50,300,undefined,0,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_subcompact_" + param_00 + "_destroyed",undefined,32,"o_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_subcompact_wheel_lf",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","vehicle_subcompact_wheel_lf",20,undefined,undefined,"no_melee",undefined,2.3); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("tag_door_left_back","vehicle_subcompact_" + param_00 + "_door_LB",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_door_right_back","vehicle_subcompact_" + param_00 + "_door_RB",undefined,undefined,undefined,undefined,1,1); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_subcompact_" + param_00 + "_mirror_L",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_subcompact_" + param_00 + "_mirror_R",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 119 +vehicle_van(param_00) +{ + common_scripts\_destructible::destructible_create("vehicle_van_" + param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_van_" + param_00 + "_destroyed",undefined,32,"o_melee"); + var_01 = "tag_hood"; + common_scripts\_destructible::destructible_part(var_01,"vehicle_van_" + param_00 + "_hood",undefined,undefined,undefined,undefined,1,2.5); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_van_wheel_lf",20,undefined,undefined,"no_melee",undefined,2.3); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_van_wheel_lf",20,undefined,undefined,"no_melee",undefined,2.3); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("tag_door_right_back","vehicle_van_" + param_00 + "_door_RB",undefined,undefined,undefined,undefined,1,1); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_van_" + param_00 + "_mirror_L",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_van_" + param_00 + "_mirror_R",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 120 +vehicle_uaz_van(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_uaz_van_destroyed",undefined,32,"o_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_uaz_van_wheel_lf",20,undefined,undefined,"no_melee",undefined,2.3); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","vehicle_uaz_van_wheel_lf",20,undefined,undefined,"no_melee",undefined,1.6); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); +} + +//Function Number: 121 +vehicle_van_iw5(param_00) +{ + common_scripts\_destructible::destructible_create(param_00 + "_destructable","tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("TAG_DEATH_FX","explosions/vehicle_explosion_medium",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,param_00 + "_destroyed",undefined,32,"o_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",param_00 + "_wheel_lf",20,undefined,undefined,"no_melee",1,1); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",param_00 + "_wheel_lf",20,undefined,undefined,"no_melee",1,1); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",param_00 + "_wheel_lf",20,undefined,undefined,"no_melee",1,1); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",param_00 + "_wheel_lf",20,undefined,undefined,"no_melee",1,1); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + common_scripts\_destructible::destructible_part("tag_mirror_left",param_00 + "_mirror_lf",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right",param_00 + "_mirror_rf",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 122 +vehicle_delivery_theme_park_truck_destructible(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("TAG_HOOD_FX","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("TAG_HOOD_FX","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("TAG_HOOD_FX","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("TAG_DEATH_FX","explosions/vehicle_explosion_medium",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_delivery_theme_park_truck_destroyed",undefined,32,"o_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_van_sas_dark_wheel_lf",20,undefined,undefined,"no_melee",1,2.7); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee",1,1); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee",1,1); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee",1,1); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + var_01 = "TAG_GLASS_FRONT1"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "TAG_GLASS_FRONT2"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "TAG_GLASS_LEFT_BACK"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "TAG_GLASS_LEFT_FRONT"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "TAG_GLASS_RIGHT_FRONT"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "TAG_GLASS_RIGHT_BACK"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); +} + +//Function Number: 123 +vehicle_suburban(param_00,param_01) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,300,300,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_suburban_destroyed" + param_01,undefined,32,"o_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_suburban_wheel_rf",20,undefined,undefined,"no_melee",undefined,2.3); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_suburban_wheel_rf",20,undefined,undefined,"no_melee",undefined,2.3); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_part("tag_door_left_back","vehicle_suburban_door_lb" + param_01,undefined,undefined,undefined,undefined,1,1); + var_02 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_02,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_02 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_02 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_02 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_02,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_02 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_02 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_02 = "tag_center_glass"; + common_scripts\_destructible::destructible_part(var_02,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_02 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_02 + "_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_02 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_02,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_02 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_02 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_02 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_02,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_02 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_02 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_02 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_02,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_02 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_02 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_02 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_02,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_02 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_02 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_02 = "tag_glass_left_back_02"; + common_scripts\_destructible::destructible_part(var_02,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_02 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_02 = "tag_glass_right_back_02"; + common_scripts\_destructible::destructible_part(var_02,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_02 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_02 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_02,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_02,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(var_02 + "_d"); + var_02 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_02,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_02 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_02,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(var_02 + "_d"); +} + +//Function Number: 124 +vehicle_snowmobile(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/snowmobile_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,150,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,150,150,50,300,undefined,undefined,0.3,500); + common_scripts\_destructible::destructible_anim(get_precached_anim("ehicle_snowmobile_destroy_01"),#animtree,"setanimknob",undefined,undefined,"vehicle_snowmobile_destroy_01"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_snowmobile_destroyed",undefined,32,"no_melee"); + var_01 = "right_wheel_01_jnt"; + common_scripts\_destructible::destructible_part(var_01,"vehicle_snowmobile_ski_right",800,undefined,undefined,undefined,1,2.5); + common_scripts\_destructible::destructible_part("TAG_BAG_CENTER","vehicle_snowmobile_bag_center",undefined,undefined,undefined,undefined,1,2); + common_scripts\_destructible::destructible_part("TAG_BAG_LEFT","vehicle_snowmobile_bag_left",undefined,undefined,undefined,undefined,1,2); + common_scripts\_destructible::destructible_part("TAG_BAG_RIGHT","vehicle_snowmobile_bag_right",undefined,undefined,undefined,undefined,1,2); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); +} + +//Function Number: 125 +destructible_gaspump(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",150,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(15); + common_scripts\_destructible::destructible_loopfx("tag_death_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,150,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_death_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_death_fx","fire/gas_pump_fire_damage",0.4); + common_scripts\_destructible::destructible_sound("gaspump01_flareup_med"); + common_scripts\_destructible::destructible_loopsound("gaspump01_fire_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_death_fx","fire/gas_pump_fire_damage",0.4); + common_scripts\_destructible::destructible_loopsound("gaspump01_fire_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,210,"allies"); + common_scripts\_destructible::destructible_sound("gaspump01_flareup_med"); + common_scripts\_destructible::destructible_loopfx("tag_fx","fire/gas_pump_fire_handle",0.05); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"gaspump01_hose"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,5,"o_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/gas_pump_exp",0); + common_scripts\_destructible::destructible_sound("gaspump01_explode"); + common_scripts\_destructible::func_976(6000,8000,210,300,50,300,undefined,undefined,0.3,500); + common_scripts\_destructible::destructible_state(undefined,"furniture_gaspump01_destroyed",undefined,undefined,"no_melee"); + common_scripts\_destructible::destructible_part("tag_panel_front01","furniture_gaspump01_panel01",80,undefined,undefined,undefined,1,1,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_panel_front02","furniture_gaspump01_panel02",40,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_panel_front03","furniture_gaspump01_panel03",40,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_sound("exp_gaspump_sparks"); + common_scripts\_destructible::destructible_fx("tag_panel_front03","props/electricbox4_explode"); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_panel_back01","furniture_gaspump01_panel01",110,undefined,undefined,undefined,1,1,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_panel_back02","furniture_gaspump01_panel02",40,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_panel_back03","furniture_gaspump01_panel03",40,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_sound("exp_gaspump_sparks"); + common_scripts\_destructible::destructible_fx("tag_panel_back03","props/electricbox4_explode"); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 126 +destructible_electrical_transformer_large(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",1500,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_splash_damage_scaler(2); + common_scripts\_destructible::destructible_loopsound("electrical_transformer_sparks"); + common_scripts\_destructible::destructible_loopfx("tag_fx","explosions/electrical_transformer_spark_runner",0.8); + common_scripts\_destructible::destructible_healthdrain(12,0.2,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,500,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("electrical_transformer_sparks"); + common_scripts\_destructible::destructible_fx("tag_fx_junction","explosions/generator_sparks_c",0); + common_scripts\_destructible::destructible_loopfx("tag_fx_junction","fire/electrical_transformer_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_loopfx("tag_fx","explosions/electrical_transformer_spark_runner",0.8); + common_scripts\_destructible::destructible_healthdrain(12,0.2,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("electrical_transformer_sparks"); + common_scripts\_destructible::destructible_loopfx("tag_fx_junction","fire/electrical_transformer_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_loopfx("tag_fx","explosions/electrical_transformer_spark_runner",0.8); + common_scripts\_destructible::destructible_loopfx("tag_fx_valve","explosions/generator_spark_runner",0.6); + common_scripts\_destructible::destructible_healthdrain(12,0.2,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,500,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/electrical_transformer_explosion",0); + common_scripts\_destructible::destructible_sound("electrical_transformer01_explode"); + common_scripts\_destructible::func_976(6000,8000,210,300,20,300,undefined,undefined,0.3,500); + common_scripts\_destructible::destructible_state(undefined,"com_electrical_transformer_large_des",undefined,undefined,"no_melee"); + common_scripts\_destructible::destructible_part("tag_door1","com_electrical_transformer_large_dam_door1",1500,undefined,undefined,undefined,0,1,undefined,1); + common_scripts\_destructible::destructible_sound("electrical_transformer01_explode_detail"); + common_scripts\_destructible::destructible_fx("tag_door1","explosions/generator_explosion"); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_door2","com_electrical_transformer_large_dam_door2",150,undefined,undefined,undefined,0,1,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_door3","com_electrical_transformer_large_dam_door3",150,undefined,undefined,undefined,0,1,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_door4","com_electrical_transformer_large_dam_door4",150,undefined,undefined,undefined,0,1,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_door5","com_electrical_transformer_large_dam_door5",1500,undefined,undefined,undefined,0,1,undefined,1); + common_scripts\_destructible::destructible_sound("electrical_transformer01_explode_detail"); + common_scripts\_destructible::destructible_fx("tag_door5","explosions/generator_explosion"); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_door6","com_electrical_transformer_large_dam_door6",150,undefined,undefined,undefined,0,1,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_door7","com_electrical_transformer_large_dam_door7",150,undefined,undefined,undefined,0,1,undefined,1); + common_scripts\_destructible::destructible_loopsound("electrical_transformer_sparks"); + common_scripts\_destructible::destructible_fx("tag_door7","props/electricbox4_explode"); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 127 +get_precached_anim(param_00) +{ + return level._destructible_preanims[param_00]; +} + +//Function Number: 128 +get_precached_animtree(param_00) +{ + return level._destructible_preanimtree[param_00]; +} + +//Function Number: 129 +vehicle_coupe(param_00) +{ + common_scripts\_destructible::destructible_create("vehicle_coupe_" + param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,150,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,150,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_coupe_" + param_00 + "_destroyed",undefined,32,"o_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","vehicle_coupe_wheel_lf",20,undefined,undefined,"no_melee",undefined,2.3); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("tag_door_left_front","vehicle_coupe_" + param_00 + "_door_LF",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_spoiler","vehicle_coupe_" + param_00 + "_spoiler",undefined,undefined,undefined,undefined,1,2); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_coupe_" + param_00 + "_mirror_L",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_coupe_" + param_00 + "_mirror_R",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 130 +vehicle_mini(param_00) +{ + common_scripts\_destructible::destructible_create("vehicle_mini_destructible_" + param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(12,0.2,150,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,150,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_mini_destroyed_" + param_00,undefined,32,"o_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee",undefined,2.3); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + var_01 = "TAG_GLASS_FRONT"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_D",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_mini_mirror_lf",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_mini_mirror_rf",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 131 +vehicle_uk_truck(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + var_01 = "TAG_GLASS_FRONT"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_D",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "TAG_GLASS_BACK"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_D",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "TAG_GLASS_LEFT_FRONT"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_D",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "TAG_GLASS_RIGHT_FRONT"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_D",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); +} + +//Function Number: 132 +vehicle_uk_police_estate(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"uk_police_estate_destroyed",undefined,32,"o_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","uk_police_estate_wheel_lf",20,undefined,undefined,"no_melee",undefined,1); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","uk_police_estate_wheel_lf",20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","uk_police_estate_wheel_lf",20,undefined,undefined,"no_melee",undefined,10); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","uk_police_estate_wheel_lf",20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + var_01 = "TAG_GLASS_FRONT"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_D",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "TAG_GLASS_BACK"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_D",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "TAG_GLASS_LEFT_FRONT"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_D",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "TAG_GLASS_RIGHT_FRONT"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_D",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "TAG_GLASS_LEFT_BACK"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_D",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "TAG_GLASS_RIGHT_BACK"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_D",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "TAG_GLASS_LEFT_BACK_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_D",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "TAG_GLASS_RIGHT_BACK_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_D",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); +} + +//Function Number: 133 +vehicle_uaz_winter(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_uaz_winter_destroy",undefined,32,"o_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_uaz_wheel_LF_d",20,undefined,undefined,"no_melee",undefined,1); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_uaz_wheel_LF_d",20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_uaz_wheel_RF_d",20,undefined,undefined,"no_melee",undefined,10); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","vehicle_uaz_wheel_RF_d",20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_uaz_winter_mirror_L",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_uaz_winter_mirror_R",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 134 +vehicle_uaz_fabric(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_uaz_fabric_dsr",undefined,32,"o_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_uaz_wheel_LF_d",20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_uaz_wheel_LF_d",20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_uaz_wheel_RF_d",20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","vehicle_uaz_wheel_RF_d",20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_uaz_mirror_L",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_uaz_mirror_R",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 135 +vehicle_uaz_hardtop(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_uaz_hardtop_dsr",undefined,32,"o_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_uaz_wheel_LF_d",20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_uaz_wheel_LF_d",20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_uaz_wheel_RF_d",20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","vehicle_uaz_wheel_RF_d",20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_uaz_mirror_L",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_uaz_mirror_R",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 136 +vehicle_jeep(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_jeep_destroyed",undefined,32,"o_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_jeep_wheel_lf",20,undefined,undefined,"no_melee",undefined,2.7); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_jeep_wheel_lf",20,undefined,undefined,"no_melee",undefined,2.7); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); +} + +//Function Number: 137 +vehicle_jeep_dusty(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_jeep_destroyed",undefined,32,"o_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_jeep_wheel_lf",20,undefined,undefined,"no_melee",undefined,2.7); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_jeep_wheel_lf",20,undefined,undefined,"no_melee",undefined,2.7); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); +} + +//Function Number: 138 +vehicle_uaz_open(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_uaz_open_dsr",undefined,32,"o_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_uaz_wheel_LF_d",20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_uaz_wheel_LF_d",20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_uaz_wheel_LF_d",20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","vehicle_uaz_wheel_LF_d",20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_uaz_mirror_L",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_uaz_mirror_R",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 139 +vehicle_india_compact_destructible(param_00) +{ + common_scripts\_destructible::destructible_create("vehicle_india_compact_destructible_" + param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/india_compact_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_india_compact_destroyed_" + param_00,undefined,32,"o_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_india_compact_wheel_lf_d",20,undefined,undefined,"no_melee",undefined,1.2); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_india_compact_mirror_l",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_india_compact_mirror_r",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 140 +vehicle_india_rickshaw(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/rickshaw_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_deathfx","explosions/india_rickshaw_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"india_vehicle_rksw_d",undefined,32,"o_melee"); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,30,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + common_scripts\_destructible::destructible_part("tag_headlight_left","intro_vehicle_rksw_light_d",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 141 +vehicle_tuk_tuk(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/rickshaw_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/india_rickshaw_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_tuk_tuk_destroyed",undefined,32,"o_melee"); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,30,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,30,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx(var_01 + "_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + common_scripts\_destructible::destructible_part("tag_door_left_front","vehicle_tuk_tuk_door_left",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_door_left_front","vehicle_tuk_tuk_door_right",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_tuk_tuk_mirror",10,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 142 +vehicle_india_suv(param_00) +{ + common_scripts\_destructible::destructible_create("vehicle_india_suv_" + param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_deathfx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_india_suv_" + param_00 + "_dsr",undefined,32,"o_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_india_suv_wheel_lf_d",20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_india_suv_wheel_lf_d",20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_india_suv_wheel_rf_d",20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","vehicle_india_suv_wheel_rf_d",20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim",1); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back_02"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_02_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_brakelight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_uaz_mirror_L",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_uaz_mirror_R",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 143 +vehicle_policecar(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode_police"); + common_scripts\_destructible::func_976(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_policecar_lapd_destroy",undefined,32,"o_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_policecar_lapd_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_policecar_lapd_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_policecar_lapd_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","vehicle_policecar_lapd_wheel_LF",20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("tag_door_left_front","vehicle_policecar_lapd_door_LF",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_door_right_front","vehicle_policecar_lapd_door_RF",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_door_left_back","vehicle_policecar_lapd_door_LB",undefined,undefined,undefined,undefined,1,1); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_center_glass"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("TAG_CENTER_GLASS_FX","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_policecar_lapd_mirror_L",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_policecar_lapd_mirror_R",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 144 +vehicle_policecar_russia(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode_police"); + common_scripts\_destructible::func_976(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_policecar_russia_destroy",undefined,32,"o_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt","vehicle_policecar_russia_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt","vehicle_policecar_russia_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt","vehicle_policecar_russia_wheel_LF",20,undefined,undefined,"no_melee",undefined,1.7); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt","vehicle_policecar_russia_wheel_LF",20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_part("tag_door_left_front","vehicle_policecar_russia_door_LF",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_door_right_front","vehicle_policecar_russia_door_RF",undefined,undefined,undefined,undefined,1,1); + common_scripts\_destructible::destructible_part("tag_door_left_back","vehicle_policecar_russia_door_LB",undefined,undefined,undefined,undefined,1,1); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_center_glass"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("TAG_CENTER_GLASS_FX","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_policecar_russia_mirror_L",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_policecar_russia_mirror_R",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 145 +vehicle_taxi(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::random_dynamic_attachment("tag_ad","vehicle_taxi_rooftop_ad_base","vehicle_taxi_rooftop_ad_1"); + common_scripts\_destructible::random_dynamic_attachment("tag_ad","vehicle_taxi_rooftop_ad_base","vehicle_taxi_rooftop_ad_2"); + common_scripts\_destructible::random_dynamic_attachment("tag_ad","vehicle_taxi_rooftop_ad_base","vehicle_taxi_rooftop_ad_3"); + common_scripts\_destructible::random_dynamic_attachment("tag_ad","vehicle_taxi_rooftop_ad_base","vehicle_taxi_rooftop_ad_4"); + common_scripts\_destructible::random_dynamic_attachment("tag_ad","vehicle_taxi_toplight",undefined,"taxi_ad_clip"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_taxi_yellow_destroy",undefined,32,"o_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee",undefined,1.7); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee",undefined,1.7); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_car_alarm(); + var_01 = "TAG_CENTER_GLASS"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_taxi_mirror_l",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_taxi_mirror_r",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 146 +vehicle_taxi_dubai(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_body",250,undefined,32,"no_melee"); + common_scripts\_destructible::random_dynamic_attachment("tag_ad","vehicle_taxi_toplight_dubai",undefined,"taxi_ad_clip"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_whitesmoke",0.4); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined,undefined,200,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke",0.4); + common_scripts\_destructible::destructible_state(undefined,undefined,100,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_loopfx("tag_hood_fx","smoke/car_damage_blacksmoke_fire",0.4); + common_scripts\_destructible::destructible_sound("fire_vehicle_flareup_med"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_healthdrain(15,0.25,210,"allies"); + common_scripts\_destructible::destructible_state(undefined,undefined,300,"player_only",32,"no_melee"); + common_scripts\_destructible::destructible_loopsound("fire_vehicle_med"); + common_scripts\_destructible::destructible_state(undefined,undefined,400,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx("tag_death_fx","explosions/small_vehicle_explosion",0); + common_scripts\_destructible::destructible_sound("car_explode"); + common_scripts\_destructible::func_976(4000,5000,200,250,50,300,undefined,undefined,0.3,500); + lib_0F09::func_746E(%,#animtree,"setanimknob",undefined,undefined,"vehicle_80s_sedan1_destroy"); + common_scripts\_destructible::destructible_state(undefined,"vehicle_taxi_yellow_destroy_dubai",undefined,32,"o_melee"); + common_scripts\_destructible::destructible_part("left_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_part("left_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee",undefined,1.7); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_part("right_wheel_01_jnt",undefined,20,undefined,undefined,"no_melee",undefined,1.7); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_part("right_wheel_02_jnt",undefined,20,undefined,undefined,"no_melee"); + lib_0F09::func_7462(%,#animtree,"setanim"); + common_scripts\_destructible::destructible_sound("veh_tire_deflate","ullet"); + common_scripts\_destructible::destructible_car_alarm(); + var_01 = "TAG_CENTER_GLASS"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_front_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,40,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_back_fx","props/car_glass_large"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_front_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_left_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_left_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_glass_right_back"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_state(var_01 + "_d",undefined,60,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_glass_right_back_fx","props/car_glass_med"); + common_scripts\_destructible::destructible_sound("veh_glass_break_large"); + common_scripts\_destructible::destructible_car_alarm(); + common_scripts\_destructible::destructible_state(undefined); + var_01 = "tag_light_left_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + var_01 = "tag_light_right_front"; + common_scripts\_destructible::destructible_part(var_01,undefined,20,undefined,undefined,undefined,0.5); + common_scripts\_destructible::destructible_fx(var_01,"props/car_glass_headlight"); + common_scripts\_destructible::destructible_sound("veh_glass_break_small"); + common_scripts\_destructible::destructible_state(var_01 + "_d"); + common_scripts\_destructible::destructible_part("tag_mirror_left","vehicle_taxi_mirror_l",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); + common_scripts\_destructible::destructible_part("tag_mirror_right","vehicle_taxi_mirror_r",40,undefined,undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_physics(); +} + +//Function Number: 147 +toy_security_camera(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_camera_tilt",0,undefined,32); + common_scripts\_destructible::destructible_anim(get_precached_anim("ecurity_camera_idle"),#animtree,"setanimknob",undefined,undefined,"security_camera_idle"); + common_scripts\_destructible::destructible_state("tag_camera_tilt","com_security_camera_tilt_animated",75); + common_scripts\_destructible::destructible_anim(get_precached_anim("ecurity_camera_destroy"),#animtree,"setanimknob",undefined,undefined,"security_camera_destroy"); + common_scripts\_destructible::destructible_fx("tag_fx","props/security_camera_explosion_moving"); + common_scripts\_destructible::destructible_sound("security_camera_sparks"); + common_scripts\_destructible::destructible_state(undefined,"com_security_camera_d_tilt_animated",undefined,undefined,"no_melee"); +} + +//Function Number: 148 +toy_building_collapse_paris_ac130(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",100,undefined,32); + common_scripts\_destructible::destructible_anim(get_precached_anim("c130_building_collapse"),#animtree,"setanimknob",undefined,undefined,"ac130_building_collapse"); + common_scripts\_destructible::destructible_fx("tag_fx","misc/building_collapse_paris_ac130"); + common_scripts\_destructible::destructible_fx("tag_fx_base","misc/building_collapse_paris_ac130_ground"); + common_scripts\_destructible::destructible_fx("tag_fx_crack","misc/building_collapse_paris_ac130_cracks"); + common_scripts\_destructible::destructible_state(undefined,"building_collapse_paris_ac130_dest",undefined,undefined,"no_melee"); +} + +//Function Number: 149 +toy_poison_gas_attack(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",100,undefined,32); + common_scripts\_destructible::destructible_anim(get_precached_anim("ondon_gas_attack"),#animtree,"setanimknob",undefined,undefined,"london_gas_attack"); + common_scripts\_destructible::destructible_fx("tag_origin","smoke/poison_gas_attack"); + common_scripts\_destructible::destructible_state(undefined,"fx_gas_attack",undefined,undefined,"no_melee"); +} + +//Function Number: 150 +toy_arcade_machine(param_00) +{ + common_scripts\_destructible::destructible_create("toy_arcade_machine" + param_00,"tag_origin",0,undefined,32); + common_scripts\_destructible::destructible_state("tag_origin","arcade_machine" + param_00,75); + common_scripts\_destructible::destructible_fx("tag_fx","props/arcade_machine_exp"); + common_scripts\_destructible::destructible_fx("tag_fx2","props/arcade_machine_coins"); + common_scripts\_destructible::destructible_sound("arcade_machine_destroy"); + common_scripts\_destructible::destructible_state(undefined,"arcade_machine" + param_00 + "_des",undefined,undefined,"no_melee"); +} + +//Function Number: 151 +toy_pinball_machine(param_00) +{ + common_scripts\_destructible::destructible_create("toy_pinball_machine" + param_00,"tag_origin",0,undefined,32); + common_scripts\_destructible::destructible_state("tag_origin","pinball_machine" + param_00,75); + common_scripts\_destructible::destructible_fx("tag_fx","props/pinball_machine_exp",undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_fx2","props/arcade_machine_coins"); + common_scripts\_destructible::destructible_fx("tag_fx3","props/pinball_machine_glass"); + common_scripts\_destructible::destructible_sound("pinball_machine_destroy"); + common_scripts\_destructible::destructible_state(undefined,"pinball_machine" + param_00 + "_des",undefined,undefined,"no_melee"); +} + +//Function Number: 152 +toy_fortune_machine(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",0,undefined,32); + common_scripts\_destructible::destructible_loopsound("fortune_machine_idle"); + common_scripts\_destructible::destructible_loopfx("J_Eye_RI","props/fortune_machine_glow_eyes",2.9); + common_scripts\_destructible::destructible_loopfx("J_Eye_LE","props/fortune_machine_glow_eyes",2.9); + common_scripts\_destructible::destructible_loopfx("tag_fx3","props/fortune_machine_glow_ball",4); + common_scripts\_destructible::destructible_anim(get_precached_anim("ortune_machine_anim"),#animtree,"setanimknob",undefined,undefined,"fortune_machine_anim"); + common_scripts\_destructible::destructible_state("tag_origin","fortune_machine",75); + common_scripts\_destructible::destructible_fx("tag_fx","props/fortune_machine_exp",undefined,undefined,undefined,1); + common_scripts\_destructible::destructible_fx("tag_fx2","props/fortune_machine_tickets"); + common_scripts\_destructible::destructible_sound("pinball_machine_destroy"); + common_scripts\_destructible::destructible_anim(get_precached_anim("ortune_machine_des"),#animtree,"setanimknob",undefined,undefined,"fortune_machine_des"); + common_scripts\_destructible::func_976(20,2000,20,20,40,40,undefined,64); + common_scripts\_destructible::destructible_state(undefined,"fortune_machine_des",undefined,undefined,"no_melee"); +} + +//Function Number: 153 +toy_trashcan_clown(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",120,undefined,32); + common_scripts\_destructible::destructible_fx("tag_fx","props/garbage_spew_des",1,"splash"); + common_scripts\_destructible::destructible_fx("tag_fx","props/garbage_spew",1,common_scripts\_destructible::damage_not("splash")); + common_scripts\_destructible::destructible_sound("exp_trashcan_sweet"); + common_scripts\_destructible::func_976(600,651,1,1,10,20); + common_scripts\_destructible::destructible_state("tag_origin","trashcan_clown_base",undefined,undefined,undefined,undefined,undefined,0); + common_scripts\_destructible::destructible_part("tag_fx","trashcan_clown_lid",undefined,undefined,undefined,undefined,1,1); +} + +//Function Number: 154 +func_0A1B(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",25,undefined,32); + common_scripts\_destructible::destructible_fx("tag_origin","dust/dust_shanty_explode"); + common_scripts\_destructible::destructible_anim(get_precached_anim("fr_shanty01_explode"),#animtree,"setanimknob",undefined,undefined,"afr_shanty01_explode"); + common_scripts\_destructible::destructible_state(undefined,"afr_shanty01",undefined,undefined,"no_melee"); +} + +//Function Number: 155 +vehicle_slava_ny_harbor_zonea(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",1,undefined,32); + common_scripts\_destructible::destructible_anim(get_precached_anim("y_harbor_slava_r2a_des"),#animtree,"setanim"); + common_scripts\_destructible::destructible_fx("tag_explosionA","maps/ny_harbor/ny_battleship_explosion"); + common_scripts\_destructible::destructible_fx("tag_explosionB","maps/ny_harbor/ny_battleship_explosion"); +} + +//Function Number: 156 +rooftop_skylight_destructible(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",5,undefined,undefined); + common_scripts\_destructible::destructible_fx("tag_fx1","props/skylight_destroyed_windowglass"); + common_scripts\_destructible::destructible_fx("tag_fx4","props/skylight_destroyed_windowglass"); + common_scripts\_destructible::destructible_fx("tag_fx7","props/skylight_destroyed_windowglass"); + common_scripts\_destructible::destructible_fx("tag_fx4","props/skylight_destroyed_pit"); + common_scripts\_destructible::destructible_state("tag_origin","ny_rooftop_skylight_destroyed",undefined,undefined,"no_melee"); +} + +//Function Number: 157 +satellite_dish_big_destructible(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",150,undefined,32); + common_scripts\_destructible::destructible_fx("tag_origin","props/satellite_dish_big_des"); + common_scripts\_destructible::destructible_state("tag_origin","com_satellite_dish_big_destroyed",undefined,undefined,"no_melee"); +} + +//Function Number: 158 +dest_onestate(param_00,param_01,param_02,param_03) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",150,undefined,32); + common_scripts\_destructible::destructible_fx("tag_fx",param_02); + common_scripts\_destructible::destructible_state("tag_origin",param_01,undefined,undefined,"no_meele"); + if(isdefined(param_03)) + { + common_scripts\_destructible::destructible_sound(param_03); + } +} + +//Function Number: 159 +dest_pb_planter(param_00,param_01,param_02,param_03) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",1150,undefined,32); + common_scripts\_destructible::destructible_state("tag_origin",param_01,undefined,undefined,"no_meele"); + common_scripts\_destructible::destructible_fx("tag_fx",param_02); + common_scripts\_destructible::destructible_fx("tag_fx",param_02); +} + +//Function Number: 160 +berlin_hotel_lights_ceiling1(param_00,param_01) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",150,undefined,32); + common_scripts\_destructible::destructible_fx("tag_fx","misc/light_blowout_ceiling"); + common_scripts\_destructible::destructible_fx("tag_fx_wire","misc/light_blowout_wire_spark"); + common_scripts\_destructible::destructible_state("tag_origin",param_01,undefined,undefined,"no_meele"); +} + +//Function Number: 161 +rus_vx_gas_canister(param_00) +{ + common_scripts\_destructible::destructible_create(param_00,"tag_origin",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_state("tag_origin","rus_vx_gas_canister_destroyed",250,undefined,32,"no_melee"); + common_scripts\_destructible::destructible_fx(undefined,"explosions/rus_vx_gas_canister",0); + common_scripts\_destructible::func_976(7000,8000,150,256,16,150,undefined); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/common_scripts/_dynamic_world.gsc b/MW3/Xbox/SP/common_scripts/_dynamic_world.gsc new file mode 100644 index 0000000..443867e --- /dev/null +++ b/MW3/Xbox/SP/common_scripts/_dynamic_world.gsc @@ -0,0 +1,1488 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: common_scripts\_dynamic_world.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 64 + * Decompile Time: 1091 ms + * Timestamp: 10/27/2023 2:35:21 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + common_scripts\utility::array_thread(getentarray("com_wall_fan_blade_rotate_slow","targetname"),::fan_blade_rotate,"veryslow"); + common_scripts\utility::array_thread(getentarray("com_wall_fan_blade_rotate","targetname"),::fan_blade_rotate,"slow"); + common_scripts\utility::array_thread(getentarray("com_wall_fan_blade_rotate_fast","targetname"),::fan_blade_rotate,"fast"); + var_00 = []; + func_18B7(); + foreach(var_04, var_02 in var_41) + { + var_03 = getentarray(var_04,"classname"); + common_scripts\utility::array_thread(var_03,::triggertouchthink); + common_scripts\utility::array_thread(var_03,var_02); + } + + common_scripts\utility::array_thread(getentarray("vending_machine","targetname"),::vending_machine); + common_scripts\utility::array_thread(getentarray("toggle","targetname"),::use_toggle); + level thread onplayerconnect(); + var_05 = getent("civilian_jet_origin","targetname"); + if(isdefined(var_05)) + { + var_05 thread civilian_jet_flyby(); + } +} + +//Function Number: 2 +onplayerconnect() +{ + for(;;) + { + level waittill("connecting",var_00); + var_00 thread movementtracker(); + } +} + +//Function Number: 3 +func_18B7() +{ + if(common_scripts\utility::issp()) + { + foreach(var_01 in level.players) + { + var_01.touchtriggers = []; + var_01 thread movementtracker(); + } + } +} + +//Function Number: 4 +func_18B9() +{ + self.touchtriggers = []; + thread movementtracker(); +} + +//Function Number: 5 +civilian_jet_flyby() +{ + level endon("game_ended"); + func_18BB(); + level waittill("prematch_over"); + for(;;) + { + thread func_18C9(); + self waittill("start_flyby"); + thread jet_flyby(); + self waittill("flyby_done"); + jet_reset(); + } +} + +//Function Number: 6 +func_18BB() +{ + self.var_18BC = getentarray(self.target,"targetname"); + self.jet_flyto = getent("civilian_jet_flyto","targetname"); + self.engine_fxs = getentarray("engine_fx","targetname"); + self.var_18BF = getentarray("flash_fx","targetname"); + self.jet_engine_fx = loadfx("fire/jet_afterburner"); + self.jet_flash_fx_red = loadfx("misc/aircraft_light_wingtip_red"); + self.jet_flash_fx_green = loadfx("misc/aircraft_light_wingtip_green"); + self.jet_flash_fx_blink = loadfx("misc/aircraft_light_red_blink"); + level.civilianjetflyby = undefined; + var_00 = vectornormalize(self.origin - self.jet_flyto.origin) * 20000; + self.jet_flyto.origin = self.jet_flyto.origin - var_00; + self.origin = self.origin + var_00; + foreach(var_02 in self.var_18BC) + { + var_02.origin = var_02.origin + var_00; + var_02.old_origin = var_02.origin; + var_02 hide(); + } + + foreach(var_05 in self.engine_fxs) + { + var_05.origin = var_05.origin + var_00; + } + + foreach(var_08 in self.var_18BF) + { + var_08.origin = var_08.origin + var_00; + } + + var_0A = self.origin; + var_0B = self.jet_flyto.origin; + self.jet_fly_vec = var_0B - var_0A; + var_0C = 2000; + var_0D = abs(distance(var_0A,var_0B)); + self.var_18C7 = var_0D / var_0C; +} + +//Function Number: 7 +jet_reset() +{ + foreach(var_01 in self.var_18BC) + { + var_01.origin = var_01.old_origin; + var_01 hide(); + } +} + +//Function Number: 8 +func_18C9() +{ + level endon("game_ended"); + var_00 = gettimeinterval(); + var_01 = max(10,var_00); + var_01 = min(var_01,100); + if(getdvar("jet_flyby_timer") != "") + { + level.civilianjetflyby_timer = 5 + getdvarint("jet_flyby_timer"); + } + else + { + level.civilianjetflyby_timer = 0.25 + randomfloatrange(0.3,0.7) * 60 * var_01; + } + + wait level.civilianjetflyby_timer; + while(isdefined(level.airstrikeinprogress) || isdefined(level.ac130player) || isdefined(level.chopper) || isdefined(level.remotemissileinprogress)) + { + wait 0.05; + } + + self notify("start_flyby"); + level.civilianjetflyby = 1; + self waittill("flyby_done"); + level.civilianjetflyby = undefined; +} + +//Function Number: 9 +gettimeinterval() +{ + if(common_scripts\utility::issp()) + { + return 10; + } + + if(isdefined(game["status"]) && game["status"] == "overtime") + { + return 1; + } + + return func_18D0("timelimit"); +} + +//Function Number: 10 +func_18D0(param_00) +{ + param_00 = "scr_" + level.gametype + "_" + param_00; + if(isdefined(level.overridewatchdvars) && isdefined(level.overridewatchdvars[param_00])) + { + return level.overridewatchdvars[param_00]; + } + + return level.watchdvars[param_00].value; +} + +//Function Number: 11 +jet_flyby() +{ + foreach(var_01 in self.var_18BC) + { + var_01 show(); + } + + var_03 = []; + var_04 = []; + foreach(var_06 in self.engine_fxs) + { + var_07 = spawn("script_model",var_06.origin); + var_07 setmodel("tag_origin"); + var_07.angles = var_06.angles; + var_03[var_03.size] = var_07; + } + + foreach(var_0A in self.var_18BF) + { + var_0B = spawn("script_model",var_0A.origin); + var_0B setmodel("tag_origin"); + var_0B.color = var_0A.script_noteworthy; + var_0B.angles = var_0A.angles; + var_04[var_04.size] = var_0B; + } + + thread jet_planesound(self.var_18BC[0],level.mapcenter); + wait 0.05; + foreach(var_07 in var_03) + { + playfxontag(self.jet_engine_fx,var_07,"tag_origin"); + } + + foreach(var_0B in var_04) + { + if(isdefined(var_0B.color) && var_0B.color == "blink") + { + playfxontag(self.jet_flash_fx_blink,var_0B,"tag_origin"); + continue; + } + + if(isdefined(var_0B.color) && var_0B.color == "red") + { + playfxontag(self.jet_flash_fx_red,var_0B,"tag_origin"); + continue; + } + + playfxontag(self.jet_flash_fx_green,var_0B,"tag_origin"); + } + + foreach(var_01 in self.var_18BC) + { + var_01 moveto(var_01.origin + self.jet_fly_vec,self.var_18C7); + } + + foreach(var_07 in var_03) + { + var_07 moveto(var_07.origin + self.jet_fly_vec,self.var_18C7); + } + + foreach(var_0B in var_04) + { + var_0B moveto(var_0B.origin + self.jet_fly_vec,self.var_18C7); + } + + wait self.var_18C7 + 1; + foreach(var_07 in var_03) + { + var_07 delete(); + } + + foreach(var_0B in var_04) + { + var_0B delete(); + } + + self notify("flyby_done"); +} + +//Function Number: 12 +jet_planesound(param_00,param_01) +{ + param_00 thread func_18D9("veh_mig29_dist_loop"); + while(!func_18DB(param_00,param_01)) + { + wait 0.05; + } + + param_00 thread func_18D9("veh_mig29_close_loop"); + while(func_18DA(param_00,param_01)) + { + wait 0.05; + } + + wait 0.5; + param_00 thread func_18D8("veh_mig29_sonic_boom"); + while(func_18DB(param_00,param_01)) + { + wait 0.05; + } + + param_00 notify("stop soundveh_mig29_close_loop"); + self waittill("flyby_done"); + param_00 notify("stop soundveh_mig29_dist_loop"); +} + +//Function Number: 13 +func_18D8(param_00,param_01,param_02) +{ + var_03 = spawn("script_origin",(0,0,1)); + var_03 hide(); + if(!isdefined(param_01)) + { + param_01 = self.origin; + } + + var_03.origin = param_01; + if(isdefined(param_02) && param_02) + { + var_03 playsoundasmaster(param_00); + } + else + { + var_03 playsound(param_00); + } + + wait 10; + var_03 delete(); +} + +//Function Number: 14 +func_18D9(param_00,param_01) +{ + var_02 = spawn("script_origin",(0,0,0)); + var_02 hide(); + var_02 endon("death"); + thread common_scripts\utility::delete_on_death(var_02); + if(isdefined(param_01)) + { + var_02.origin = self.origin + param_01; + var_02.angles = self.angles; + var_02 linkto(self); + } + else + { + var_02.origin = self.origin; + var_02.angles = self.angles; + var_02 linkto(self); + } + + var_02 playloopsound(param_00); + self waittill("stop sound" + param_00); + var_02 stoploopsound(param_00); + var_02 delete(); +} + +//Function Number: 15 +func_18DA(param_00,param_01) +{ + var_02 = anglestoforward(common_scripts\utility::flat_angle(param_00.angles)); + var_03 = vectornormalize(common_scripts\utility::flat_origin(param_01) - param_00.origin); + var_04 = vectordot(var_02,var_03); + if(var_04 > 0) + { + return 1; + } + + return 0; +} + +//Function Number: 16 +func_18DB(param_00,param_01) +{ + var_02 = func_18DA(param_00,param_01); + if(var_02) + { + var_03 = 1; + } + else + { + var_03 = -1; + } + + var_04 = common_scripts\utility::flat_origin(param_00.origin); + var_05 = var_04 + anglestoforward(common_scripts\utility::flat_angle(param_00.angles)) * var_03 * 100000; + var_06 = pointonsegmentnearesttopoint(var_04,var_05,param_01); + var_07 = distance(var_04,var_06); + if(var_07 < 3000) + { + return 1; + } + + return 0; +} + +//Function Number: 17 +vending_machine() +{ + level endon("game_ended"); + self endon("death"); + self setcursorhint("HINT_ACTIVATE"); + self.vm_normal = getent(self.target,"targetname"); + var_00 = getent(self.vm_normal.target,"targetname"); + var_01 = getent(var_00.target,"targetname"); + var_02 = getent(var_01.target,"targetname"); + self.var_18DE = var_02.origin; + var_03 = getent(var_02.target,"targetname"); + self.var_18DF = var_03.origin; + if(isdefined(var_03.target)) + { + self.vm_fx_loc = getent(var_03.target,"targetname").origin; + } + + self.vm_normal setcandamage(1); + self.vm_normal_model = self.vm_normal.model; + self.vm_damaged_model = self.vm_normal.script_noteworthy; + self.vm_soda_model = var_00.model; + self.vm_soda_start_pos = var_00.origin; + self.vm_soda_start_angle = var_00.angles; + self.var_18E6 = var_01.origin; + self.vm_soda_stop_angle = var_01.angles; + precachemodel(self.vm_damaged_model); + var_00 delete(); + var_01 delete(); + var_02 delete(); + var_03 delete(); + self.soda_array = []; + self.soda_count = 12; + self.var_18EA = undefined; + self.hp = 400; + thread func_18EC(self.vm_normal); + self playloopsound("vending_machine_hum"); + for(;;) + { + self waittill("trigger",var_04); + self playsound("vending_machine_button_press"); + if(!self.soda_count) + { + continue; + } + + if(isdefined(self.var_18EA)) + { + soda_can_eject(); + } + + soda_can_drop(spawn_soda()); + wait 0.05; + } +} + +//Function Number: 18 +func_18EC(param_00) +{ + level endon("game_ended"); + var_01 = "mod_grenade mod_projectile mod_explosive mod_grenade_splash mod_projectile_splash splash"; + var_02 = loadfx("explosions/tv_explosion"); + for(;;) + { + var_03 = undefined; + var_04 = undefined; + var_05 = undefined; + var_06 = undefined; + var_07 = undefined; + param_00 waittill("damage",var_03,var_04,var_05,var_06,var_07); + if(isdefined(var_07)) + { + if(issubstr(var_01,tolower(var_07))) + { + var_03 = var_03 * 3; + } + + self.hp = self.hp - var_03; + if(self.hp > 0) + { + continue; + } + + self notify("death"); + self.origin = self.origin + (0,0,10000); + if(!isdefined(self.vm_fx_loc)) + { + var_08 = self.vm_normal.origin + (37,-31,52); + } + else + { + var_08 = self.vm_fx_loc; + } + + playfx(var_02,var_08); + self.vm_normal setmodel(self.vm_damaged_model); + while(self.soda_count > 0) + { + if(isdefined(self.var_18EA)) + { + soda_can_eject(); + } + + soda_can_drop(spawn_soda()); + wait 0.05; + } + + self stoploopsound("vending_machine_hum"); + return; + } + } +} + +//Function Number: 19 +spawn_soda() +{ + var_00 = spawn("script_model",self.vm_soda_start_pos); + var_00 setmodel(self.vm_soda_model); + var_00.origin = self.vm_soda_start_pos; + var_00.angles = self.vm_soda_start_angle; + return var_00; +} + +//Function Number: 20 +soda_can_drop(param_00) +{ + param_00 moveto(self.var_18E6,0.2); + param_00 playsound("vending_machine_soda_drop"); + wait 0.2; + self.var_18EA = param_00; + self.soda_count--; +} + +//Function Number: 21 +soda_can_eject() +{ + self endon("death"); + if(isdefined(self.var_18EA.var_18F0) && self.var_18EA.var_18F0 == 1) + { + return; + } + + var_00 = 1; + var_01 = var_00 * -999; + var_02 = int(-25536); + var_03 = (int(var_02 / 2),int(var_02 / 2),0) - (randomint(var_02),randomint(var_02),0); + var_04 = vectornormalize(self.var_18DF - self.var_18DE + var_03); + var_05 = var_04 * randomfloatrange(var_01,var_00); + self.var_18EA physicslaunchclient(self.var_18DE,var_05); + self.var_18EA.var_18F0 = 1; +} + +//Function Number: 22 +freefall() +{ + level endon("game_ended"); + var_00 = "briefcase_bomb_mp"; + precacheitem(var_00); + for(;;) + { + self waittill("trigger_enter",var_01); + if(!var_01 hasweapon(var_00)) + { + var_01 playsound("freefall_death"); + var_01 giveweapon(var_00); + var_01 setweaponammostock(var_00,0); + var_01 setweaponammoclip(var_00,0); + var_01 switchtoweapon(var_00); + } + } +} + +//Function Number: 23 +metal_detector() +{ + level endon("game_ended"); + var_00 = getent(self.target,"targetname"); + var_00 enablegrenadetouchdamage(); + var_01 = getent(var_00.target,"targetname"); + var_02 = getent(var_01.target,"targetname"); + var_03 = getent(var_02.target,"targetname"); + var_04 = getent(var_03.target,"targetname"); + var_05 = []; + var_06 = min(var_01.origin[0],var_02.origin[0]); + var_05[0] = var_06; + var_07 = max(var_01.origin[0],var_02.origin[0]); + var_05[1] = var_07; + var_08 = min(var_01.origin[1],var_02.origin[1]); + var_05[2] = var_08; + var_09 = max(var_01.origin[1],var_02.origin[1]); + var_05[3] = var_09; + var_0A = min(var_01.origin[2],var_02.origin[2]); + var_05[4] = var_0A; + var_0B = max(var_01.origin[2],var_02.origin[2]); + var_05[5] = var_0B; + var_01 delete(); + var_02 delete(); + if(!common_scripts\utility::issp()) + { + self.var_18F3 = 7; + } + else + { + self.var_18F3 = 2; + } + + self.alarm_playing = 0; + self.alarm_annoyance = 0; + self.tolerance = 0; + thread metal_detector_dmg_monitor(var_00); + thread metal_detector_touch_monitor(); + thread metal_detector_weapons(var_05,"weapon_claymore","weapon_c4"); + var_0C = (var_03.origin[0],var_03.origin[1],var_0B); + var_0D = (var_04.origin[0],var_04.origin[1],var_0B); + var_0E = loadfx("props/metal_detector_light"); + for(;;) + { + common_scripts\utility::waittill_any("dmg_triggered","touch_triggered","weapon_triggered"); + thread func_18F7("alarm_metal_detector",var_0E,var_0C,var_0D); + } +} + +//Function Number: 24 +func_18F7(param_00,param_01,param_02,param_03) +{ + level endon("game_ended"); + if(!self.alarm_playing) + { + self.alarm_playing = 1; + thread func_18F8(); + if(!self.alarm_annoyance) + { + self playsound(param_00); + } + + playfx(param_01,param_02); + playfx(param_01,param_03); + wait self.var_18F3; + self.alarm_playing = 0; + } +} + +//Function Number: 25 +func_18F8() +{ + level endon("game_ended"); + if(!self.tolerance) + { + return; + } + + var_00 = self.var_18F3 + 0.15; + if(self.tolerance) + { + self.tolerance--; + } + else + { + self.alarm_annoyance = 1; + } + + var_01 = gettime(); + var_02 = 7; + if(common_scripts\utility::issp()) + { + var_02 = 2; + } + + waittill_any_or_timeout("dmg_triggered","touch_triggered","weapon_triggered",var_02 + 2); + var_03 = gettime() - var_01; + if(var_03 > var_02 * 1000 + 1150) + { + self.alarm_annoyance = 0; + self.tolerance = 0; + } +} + +//Function Number: 26 +waittill_any_or_timeout(param_00,param_01,param_02,param_03) +{ + level endon("game_ended"); + self endon(param_00); + self endon(param_01); + self endon(param_02); + wait param_03; +} + +//Function Number: 27 +metal_detector_weapons(param_00,param_01,param_02) +{ + level endon("game_ended"); + for(;;) + { + waittill_weapon_placed(); + var_03 = getentarray("grenade","classname"); + foreach(var_05 in var_03) + { + if(isdefined(var_05.model) && var_05.model == param_01 || var_05.model == param_02) + { + if(isinbound(var_05,param_00)) + { + thread weapon_notify_loop(var_05,param_00); + } + } + } + } +} + +//Function Number: 28 +waittill_weapon_placed() +{ + level endon("game_ended"); + self endon("dmg_triggered"); + self waittill("touch_triggered"); +} + +//Function Number: 29 +weapon_notify_loop(param_00,param_01) +{ + param_00 endon("death"); + while(isinbound(param_00,param_01)) + { + self notify("weapon_triggered"); + wait self.var_18F3; + } +} + +//Function Number: 30 +isinbound(param_00,param_01) +{ + var_02 = param_01[0]; + var_03 = param_01[1]; + var_04 = param_01[2]; + var_05 = param_01[3]; + var_06 = param_01[4]; + var_07 = param_01[5]; + var_08 = param_00.origin[0]; + var_09 = param_00.origin[1]; + var_0A = param_00.origin[2]; + if(isinbound_single(var_08,var_02,var_03)) + { + if(isinbound_single(var_09,var_04,var_05)) + { + if(isinbound_single(var_0A,var_06,var_07)) + { + return 1; + } + } + } + + return 0; +} + +//Function Number: 31 +isinbound_single(param_00,param_01,param_02) +{ + if(param_00 > param_01 && param_00 < param_02) + { + return 1; + } + + return 0; +} + +//Function Number: 32 +metal_detector_dmg_monitor(param_00) +{ + level endon("game_ended"); + for(;;) + { + param_00 waittill("damage",var_01,var_02,var_03,var_04,var_05); + if(isdefined(var_05) && alarm_validate_damage(var_05)) + { + self notify("dmg_triggered"); + } + } +} + +//Function Number: 33 +metal_detector_touch_monitor() +{ + level endon("game_ended"); + for(;;) + { + self waittill("trigger_enter"); + while(func_1930(self)) + { + self notify("touch_triggered"); + wait self.var_18F3; + } + } +} + +//Function Number: 34 +alarm_validate_damage(param_00) +{ + var_01 = "mod_melee melee mod_grenade mod_projectile mod_explosive mod_impact"; + var_02 = strtok(var_01," "); + foreach(var_04 in var_02) + { + if(tolower(var_04) == tolower(param_00)) + { + return 1; + } + } + + return 0; +} + +//Function Number: 35 +func_1901() +{ + level endon("game_ended"); + for(;;) + { + self waittill("trigger_enter",var_00); + var_00 thread func_1902(self); + } +} + +//Function Number: 36 +func_1902(param_00) +{ + self endon("disconnect"); + self endon("death"); + self playsound("step_walk_plr_woodcreak_on"); + for(;;) + { + self waittill("trigger_leave",var_01); + if(param_00 != var_01) + { + continue; + } + + self playsound("step_walk_plr_woodcreak_off"); + } +} + +//Function Number: 37 +motion_light() +{ + level endon("game_ended"); + self.movetracker = 1; + self.var_1905 = 0; + var_00 = getentarray(self.target,"targetname"); + precachemodel("com_two_light_fixture_off"); + precachemodel("com_two_light_fixture_on"); + foreach(var_02 in var_00) + { + var_02.lightrigs = []; + var_03 = getent(var_02.target,"targetname"); + if(!isdefined(var_03.target)) + { + continue; + } + + var_02.lightrigs = getentarray(var_03.target,"targetname"); + } + + for(;;) + { + self waittill("trigger_enter"); + while(func_1930(self)) + { + var_05 = 0; + foreach(var_07 in self.touchlist) + { + if(isdefined(var_07.distmoved) && var_07.distmoved > 5) + { + var_05 = 1; + } + } + + if(var_05) + { + if(!self.var_1905) + { + self.var_1905 = 1; + var_00[0] playsound("switch_auto_lights_on"); + foreach(var_02 in var_00) + { + var_02 setlightintensity(1); + if(isdefined(var_02.lightrigs)) + { + foreach(var_0B in var_02.lightrigs) + { + var_0B setmodel("com_two_light_fixture_on"); + } + } + } + } + + thread motion_light_timeout(var_00,10); + } + + wait 0.05; + } + } +} + +//Function Number: 38 +motion_light_timeout(param_00,param_01) +{ + self notify("motion_light_timeout"); + self endon("motion_light_timeout"); + wait param_01; + foreach(var_03 in param_00) + { + var_03 setlightintensity(0); + if(isdefined(var_03.lightrigs)) + { + foreach(var_05 in var_03.lightrigs) + { + var_05 setmodel("com_two_light_fixture_off"); + } + } + } + + param_00[0] playsound("switch_auto_lights_off"); + self.var_1905 = 0; +} + +//Function Number: 39 +outdoor_motion_dlight() +{ + if(!isdefined(level.var_190B)) + { + level.var_190B = loadfx("misc/outdoor_motion_light"); + } + + level endon("game_ended"); + self.movetracker = 1; + self.var_1905 = 0; + var_00 = getent(self.target,"targetname"); + var_01 = getentarray(var_00.target,"targetname"); + precachemodel("com_two_light_fixture_off"); + precachemodel("com_two_light_fixture_on"); + for(;;) + { + self waittill("trigger_enter"); + while(func_1930(self)) + { + var_02 = 0; + foreach(var_04 in self.touchlist) + { + if(isdefined(var_04.distmoved) && var_04.distmoved > 5) + { + var_02 = 1; + } + } + + if(var_02) + { + if(!self.var_1905) + { + self.var_1905 = 1; + var_00 playsound("switch_auto_lights_on"); + var_00 setmodel("com_two_light_fixture_on"); + foreach(var_07 in var_01) + { + var_07.lightent = spawn("script_model",var_07.origin); + var_07.lightent setmodel("tag_origin"); + playfxontag(level.var_190B,var_07.lightent,"tag_origin"); + } + } + + thread outdoor_motion_dlight_timeout(var_00,var_01,10); + } + + wait 0.05; + } + } +} + +//Function Number: 40 +outdoor_motion_dlight_timeout(param_00,param_01,param_02) +{ + self notify("motion_light_timeout"); + self endon("motion_light_timeout"); + wait param_02; + foreach(var_04 in param_01) + { + var_04.lightent delete(); + } + + param_00 playsound("switch_auto_lights_off"); + param_00 setmodel("com_two_light_fixture_off"); + self.var_1905 = 0; +} + +//Function Number: 41 +dog_bark() +{ + level endon("game_ended"); + self.movetracker = 1; + var_00 = getent(self.target,"targetname"); + for(;;) + { + self waittill("trigger_enter",var_01); + while(func_1930(self)) + { + var_02 = 0; + foreach(var_04 in self.touchlist) + { + if(isdefined(var_04.distmoved) && var_04.distmoved > var_02) + { + var_02 = var_04.distmoved; + } + } + + if(var_02 > 6) + { + var_00 playsound("dyn_anml_dog_bark"); + wait randomfloatrange(16 / var_02,16 / var_02 + randomfloat(1)); + continue; + } + + wait 0.05; + } + } +} + +//Function Number: 42 +trigger_door() +{ + var_00 = getent(self.target,"targetname"); + self.var_1910 = var_00; + self.doorangle = getvectorrightangle(vectornormalize(self getorigin() - var_00 getorigin())); + var_00.baseyaw = var_00.angles[1]; + var_01 = 1; + for(;;) + { + self waittill("trigger_enter",var_02); + var_00 thread func_1913(var_01,func_1915(var_02)); + if(func_1930(self)) + { + self waittill("trigger_empty"); + } + + wait 3; + if(func_1930(self)) + { + self waittill("trigger_empty"); + } + + var_00 thread func_1914(var_01); + } +} + +//Function Number: 43 +func_1913(param_00,param_01) +{ + if(param_01) + { + self rotateto((0,self.baseyaw + 90,1),param_00,0.1,0.75); + } + else + { + self rotateto((0,self.baseyaw - 90,1),param_00,0.1,0.75); + } + + self playsound("door_generic_house_open"); + wait param_00 + 0.05; +} + +//Function Number: 44 +func_1914(param_00) +{ + self rotateto((0,self.baseyaw,1),param_00); + self playsound("door_generic_house_close"); + wait param_00 + 0.05; +} + +//Function Number: 45 +func_1915(param_00) +{ + return vectordot(self.doorangle,vectornormalize(param_00.origin - self.var_1910 getorigin())) > 0; +} + +//Function Number: 46 +getvectorrightangle(param_00) +{ + return (param_00[1],0 - param_00[0],param_00[2]); +} + +//Function Number: 47 +use_toggle() +{ + if(self.classname != "trigger_use_touch") + { + return; + } + + var_00 = getentarray(self.target,"targetname"); + self.var_1905 = 1; + foreach(var_02 in var_00) + { + var_02 setlightintensity(1.5 * self.var_1905); + } + + for(;;) + { + self waittill("trigger"); + self.var_1905 = !self.var_1905; + if(self.var_1905) + { + foreach(var_02 in var_00) + { + var_02 setlightintensity(1.5); + } + + self playsound("switch_auto_lights_on"); + continue; + } + + foreach(var_02 in var_00) + { + var_02 setlightintensity(0); + } + + self playsound("switch_auto_lights_off"); + } +} + +//Function Number: 48 +bird_startle() +{ +} + +//Function Number: 49 +func_1918(param_00) +{ + self.copier = get_photo_copier(param_00); + var_01 = getent(self.copier.target,"targetname"); + var_02 = getent(var_01.target,"targetname"); + var_02.intensity = var_02 getlightintensity(); + var_02 setlightintensity(0); + param_00.copy_bar = var_01; + param_00.var_191B = var_01.origin; + param_00.light = var_02; + var_03 = self.copier.angles + (0,90,0); + var_04 = anglestoforward(var_03); + param_00.end_pos = param_00.var_191B + var_04 * 30; +} + +//Function Number: 50 +get_photo_copier(param_00) +{ + if(!isdefined(param_00.target)) + { + var_01 = getentarray("destructible_toy","targetname"); + var_02 = var_01[0]; + foreach(var_04 in var_01) + { + if(isdefined(var_04.destructible_type) && var_04.destructible_type == "toy_copier") + { + if(distance(param_00.origin,var_02.origin) > distance(param_00.origin,var_04.origin)) + { + var_02 = var_04; + } + } + } + } + else + { + var_02 = getent(var_02.target,"targetname"); + var_02 setcandamage(1); + } + + return var_02; +} + +//Function Number: 51 +waittill_copier_copies() +{ + self.copier endon("FX_State_Change0"); + self.copier endon("death"); + self waittill("trigger_enter"); +} + +//Function Number: 52 +photo_copier() +{ + level endon("game_ended"); + func_1918(self); + self.copier endon("FX_State_Change0"); + thread func_1925(); + for(;;) + { + waittill_copier_copies(); + self playsound("mach_copier_run"); + if(isdefined(self.copy_bar)) + { + reset_copier(self); + thread photo_copier_copy_bar_goes(); + thread photo_copier_light_on(); + } + + wait 3; + } +} + +//Function Number: 53 +photo_copier_no_light() +{ + level endon("game_ended"); + self endon("death"); + if(common_scripts\utility::get_template_level() == "hamburg") + { + return; + } + + self.copier = get_photo_copier(self); + self.copier endon("FX_State_Change0"); + for(;;) + { + waittill_copier_copies(); + self playsound("mach_copier_run"); + wait 3; + } +} + +//Function Number: 54 +reset_copier(param_00) +{ + param_00.copy_bar moveto(param_00.var_191B,0.2); + param_00.light setlightintensity(0); +} + +//Function Number: 55 +photo_copier_copy_bar_goes() +{ + self.copier notify("bar_goes"); + self.copier endon("bar_goes"); + self.copier endon("FX_State_Change0"); + self.copier endon("death"); + var_00 = self.copy_bar; + wait 2; + var_00 moveto(self.end_pos,1.6); + wait 1.8; + var_00 moveto(self.var_191B,1.6); + wait 1.6; + var_01 = self.light; + var_02 = 0.2; + var_03 = var_02 / 0.05; + for(var_04 = 0;var_04 < var_03;var_04++) + { + var_05 = var_04 * 0.05; + var_05 = var_05 / var_02; + var_05 = 1 - var_05 * var_01.intensity; + if(var_05 > 0) + { + var_01 setlightintensity(var_05); + } + + wait 0.05; + } +} + +//Function Number: 56 +photo_copier_light_on() +{ + self.copier notify("light_on"); + self.copier endon("light_on"); + self.copier endon("FX_State_Change0"); + self.copier endon("death"); + var_00 = self.light; + var_01 = 0.2; + var_02 = var_01 / 0.05; + for(var_03 = 0;var_03 < var_02;var_03++) + { + var_04 = var_03 * 0.05; + var_04 = var_04 / var_01; + var_00 setlightintensity(var_04 * var_00.intensity); + wait 0.05; + } + + photo_light_flicker(var_00); +} + +//Function Number: 57 +func_1925() +{ + self.copier waittill("FX_State_Change0"); + self.copier endon("death"); + reset_copier(self); +} + +//Function Number: 58 +photo_light_flicker(param_00) +{ + param_00 setlightintensity(1); + wait 0.05; + param_00 setlightintensity(0); + wait 0.1; + param_00 setlightintensity(1); + wait 0.05; + param_00 setlightintensity(0); + wait 0.1; + param_00 setlightintensity(1); +} + +//Function Number: 59 +fan_blade_rotate(param_00) +{ + var_01 = 0; + var_02 = 20000; + var_03 = 1; + if(isdefined(self.speed)) + { + var_03 = self.speed; + } + + if(param_00 == "slow") + { + if(isdefined(self.script_noteworthy) && self.script_noteworthy == "lockedspeed") + { + var_01 = 180; + } + else + { + var_01 = randomfloatrange(100 * var_03,360 * var_03); + } + } + else if(param_00 == "fast") + { + var_01 = randomfloatrange(720 * var_03,1000 * var_03); + } + else if(param_00 == "veryslow") + { + var_01 = randomfloatrange(1 * var_03,2 * var_03); + } + else + { + } + + if(isdefined(self.script_noteworthy) && self.script_noteworthy == "lockedspeed") + { + wait 0; + } + else + { + wait randomfloatrange(0,1); + } + + var_04 = self.angles; + var_05 = anglestoright(self.angles) * 100; + var_05 = vectornormalize(var_05); + for(;;) + { + var_06 = abs(vectordot(var_05,(1,0,0))); + var_07 = abs(vectordot(var_05,(0,1,0))); + var_08 = abs(vectordot(var_05,(0,0,1))); + if(var_06 > 0.9) + { + self rotatevelocity((var_01,0,0),var_02); + } + else if(var_07 > 0.9) + { + self rotatevelocity((var_01,0,0),var_02); + } + else if(var_08 > 0.9) + { + self rotatevelocity((0,var_01,0),var_02); + } + else + { + self rotatevelocity((0,var_01,0),var_02); + } + + wait var_02; + } +} + +//Function Number: 60 +triggertouchthink(param_00,param_01) +{ + level endon("game_ended"); + self.entnum = self getentitynumber(); + for(;;) + { + self waittill("trigger",var_02); + if(!isplayer(var_02) && !isdefined(var_02.var_1929)) + { + continue; + } + + if(!isalive(var_02)) + { + continue; + } + + if(!isdefined(var_02.touchtriggers[self.entnum])) + { + var_02 thread playertouchtriggerthink(self,param_00,param_01); + } + } +} + +//Function Number: 61 +playertouchtriggerthink(param_00,param_01,param_02) +{ + if(!isplayer(self)) + { + self endon("death"); + } + + if(!common_scripts\utility::issp()) + { + var_03 = self.guid; + } + else + { + var_03 = "player" + gettime(); + } + + param_00.touchlist[var_03] = self; + if(isdefined(param_00.movetracker)) + { + self.movetrackers++; + } + + param_00 notify("trigger_enter",self); + self notify("trigger_enter",param_00); + if(isdefined(param_01)) + { + self thread [[ param_01 ]](param_00); + } + + self.touchtriggers[param_00.entnum] = param_00; + while(isalive(self) && self istouching(param_00) && common_scripts\utility::issp() || !level.gameended) + { + wait 0.05; + } + + if(isdefined(self)) + { + self.touchtriggers[param_00.entnum] = undefined; + if(isdefined(param_00.movetracker)) + { + self.movetrackers--; + } + + self notify("trigger_leave",param_00); + if(isdefined(param_02)) + { + self thread [[ param_02 ]](param_00); + } + } + + if(!common_scripts\utility::issp() && level.gameended) + { + return; + } + + param_00.touchlist[var_03] = undefined; + param_00 notify("trigger_leave",self); + if(!func_1930(param_00)) + { + param_00 notify("trigger_empty"); + } +} + +//Function Number: 62 +movementtracker() +{ + if(isdefined(level.disablemovementtracker)) + { + return; + } + + self endon("disconnect"); + if(!isplayer(self)) + { + self endon("death"); + } + + self.movetrackers = 0; + self.distmoved = 0; + for(;;) + { + self waittill("trigger_enter"); + var_00 = self.origin; + while(self.movetrackers) + { + self.distmoved = distance(var_00,self.origin); + var_00 = self.origin; + wait 0.05; + } + + self.distmoved = 0; + } +} + +//Function Number: 63 +func_1930(param_00) +{ + return param_00.touchlist.size; +} + +//Function Number: 64 +func_1931(param_00,param_01) +{ + return isdefined(param_00.touchtriggers[param_01.entnum]); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/common_scripts/_elevator.gsc b/MW3/Xbox/SP/common_scripts/_elevator.gsc new file mode 100644 index 0000000..d809d0e --- /dev/null +++ b/MW3/Xbox/SP/common_scripts/_elevator.gsc @@ -0,0 +1,1107 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: common_scripts\_elevator.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 55 + * Decompile Time: 954 ms + * Timestamp: 10/27/2023 2:35:16 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + if(getdvar("scr_elevator_disabled") == "1") + { + return; + } + + var_00 = getentarray("elevator_group","targetname"); + if(!isdefined(var_00)) + { + return; + } + + if(!var_00.size) + { + return; + } + + precachestring(&"ELEVATOR_CALL_HINT"); + precachestring(&"ELEVATOR_USE_HINT"); + precachestring(&"ELEVATOR_FLOOR_SELECT_HINT"); + precachemenu("elevator_floor_selector"); + thread elevator_update_global_dvars(); + level.elevators = []; + level.elevator_callbutton_link_v = elevator_get_dvar_int("scr_elevator_callbutton_link_v","96"); + level.var_1858 = elevator_get_dvar_int("scr_elevator_callbutton_link_h","256"); + build_elevators(); + position_elevators(); + elevator_call(); + if(!level.elevators.size) + { + return; + } + + foreach(var_02 in level.elevators) + { + var_02 thread elevator_think(); + var_02 thread func_1875(); + } + + thread elevator_debug(); +} + +//Function Number: 2 +elevator_update_global_dvars() +{ + for(;;) + { + level.elevator_accel = elevator_get_dvar("scr_elevator_accel","0.2"); + level.var_185B = elevator_get_dvar("scr_elevator_decel","0.2"); + level.elevator_music = elevator_get_dvar_int("scr_elevator_music","1"); + level.var_185D = elevator_get_dvar_int("scr_elevator_speed","96"); + level.var_185E = elevator_get_dvar_int("scr_elevator_innerdoorspeed","14"); + level.var_185F = elevator_get_dvar_int("scr_elevator_outterdoorspeed","16"); + level.var_1860 = elevator_get_dvar_int("scr_elevator_return","0"); + level.elevator_waittime = elevator_get_dvar_int("scr_elevator_waittime","6"); + level.elevator_aggressive_call = elevator_get_dvar_int("scr_elevator_aggressive_call","0"); + level.elevator_debug = elevator_get_dvar_int("debug_elevator","0"); + if(common_scripts\utility::issp()) + { + level.elevator_motion_detection = elevator_get_dvar_int("scr_elevator_motion_detection","0"); + } + else + { + level.elevator_motion_detection = elevator_get_dvar_int("scr_elevator_motion_detection","1"); + } + + wait 1; + } +} + +//Function Number: 3 +elevator_think() +{ + elevator_fsm("[A]"); +} + +//Function Number: 4 +elevator_call() +{ + foreach(var_01 in level.var_1867) + { + var_01 thread monitor_callbutton(); + } +} + +//Function Number: 5 +floor_override(param_00) +{ + self endon("elevator_moving"); + self.floor_override = 0; + self.overrider = undefined; + for(;;) + { + param_00 waittill("trigger",var_01); + self.floor_override = 1; + self.overrider = var_01; + break; + } + + self notify("floor_override"); +} + +//Function Number: 6 +elevator_fsm(param_00) +{ + self.var_186B = param_00; + var_01 = get_housing_door_trigger(); + var_02 = get_housing_inside_trigger(); + for(;;) + { + if(self.var_186B == "[A]") + { + if(level.var_1860 && get_curfloor() != func_189A()) + { + self.moveto_floor = func_189A(); + thread floor_override(var_02); + waittill_or_timeout("floor_override",level.elevator_waittime); + if(self.floor_override && isdefined(self.overrider) && isplayer(self.overrider)) + { + func_1872(self.overrider); + } + + self.var_186B = "[B]"; + continue; + } + + for(;;) + { + if(self.moveto_floor == get_curfloor()) + { + var_03 = var_02 func_1882("trigger"); + } + else + { + var_03 = "elevator_called"; + } + + if(isstring(var_03) && var_03 == "elevator_called" && self.moveto_floor != get_curfloor()) + { + self.var_186B = "[B]"; + break; + } + + if(isdefined(var_03) && isplayer(var_03) && isalive(var_03)) + { + var_04 = var_03 istouching(var_02); + var_05 = isdefined(var_02.motion_trigger) && var_03 istouching(var_02.motion_trigger); + var_06 = var_04 || var_05; + if(var_06) + { + var_07 = var_03; + func_1872(var_07); + if(self.moveto_floor == get_curfloor()) + { + continue; + } + + self.var_186B = "[B]"; + break; + } + } + } + } + + if(self.var_186B == "[B]") + { + thread elevator_interrupt(var_01); + var_08 = get_curfloor(); + thread close_inner_doors(); + thread func_187B(var_08); + common_scripts\utility::waittill_any("closed_inner_doors","interrupted"); + if(self.elevator_interrupted) + { + self.var_186B = "[C]"; + continue; + } + + self.var_186B = "[D]"; + continue; + } + + if(self.var_186B == "[C]") + { + var_08 = get_curfloor(); + thread func_187A(); + thread open_outer_doors(var_08); + self waittill("opened_floor_" + var_08 + "_outer_doors"); + if(self.elevator_interrupted) + { + self.var_186B = "[B]"; + continue; + } + + self.var_186B = "[A]"; + continue; + } + + if(self.var_186B == "[D]") + { + if(self.moveto_floor != get_curfloor()) + { + thread elevator_move(self.moveto_floor); + self waittill("elevator_moved"); + } + + self.var_186B = "[C]"; + continue; + } + } +} + +//Function Number: 7 +monitor_callbutton() +{ + for(;;) + { + var_00 = func_1882("trigger"); + var_01 = undefined; + var_02 = []; + foreach(var_05, var_04 in self.e) + { + var_01 = var_05; + var_02 = var_04; + } + + var_06 = 0; + foreach(var_08 in var_02) + { + var_09 = var_08 elevator_floor_update(); + if(!level.elevator_aggressive_call && !var_09) + { + if(var_08 get_curfloor() == var_01) + { + var_06 = 1; + var_02 = []; + break; + } + } + } + + foreach(var_08 in var_02) + { + if(var_08.var_186B == "[A]") + { + var_08 func_1871(var_01); + var_06 = 1; + if(!level.elevator_aggressive_call) + { + break; + } + } + } + + if(var_06) + { + self playsound("elev_bell_ding"); + } + } +} + +//Function Number: 8 +func_1871(param_00) +{ + self.moveto_floor = param_00; + var_01 = get_housing_inside_trigger(); + var_01 notify("trigger","elevator_called"); + if(level.elevator_motion_detection) + { + var_01.motion_trigger notify("trigger","elevator_called"); + } +} + +//Function Number: 9 +func_1872(param_00) +{ + var_01 = get_outer_doorsets(); + if(var_01.size == 2) + { + var_02 = get_curfloor(); + self.moveto_floor = !var_02; + return; + } + + var_01 openpopupmenu("elevator_floor_selector"); + var_01 setclientdvar("player_current_floor",get_curfloor()); + for(;;) + { + var_01 waittill("menuresponse",var_03,var_04); + if(var_03 == "elevator_floor_selector") + { + if(var_04 != "none") + { + self.moveto_floor = int(var_04); + } + + break; + } + } +} + +//Function Number: 10 +elevator_interrupt(param_00) +{ + self notify("interrupt_watch"); + level notify("elevator_interior_button_pressed"); + self endon("interrupt_watch"); + self endon("elevator_moving"); + self.elevator_interrupted = 0; + wait 0.5; + param_00 waittill("trigger",var_01); + self notify("interrupted"); + self.elevator_interrupted = 1; +} + +//Function Number: 11 +elevator_floor_update() +{ + var_00 = get_housing_mainframe(); + var_01 = var_00.origin; + var_02 = 1; + foreach(var_06, var_04 in get_outer_doorsets()) + { + var_05 = self.e["floor" + var_06 + "_pos"]; + if(var_01 == var_05) + { + self.e["current_floor"] = var_06; + var_02 = 0; + } + } + + return var_02; +} + +//Function Number: 12 +func_1875() +{ + var_00 = get_housing_musak_model(); + if(level.elevator_music && isdefined(var_00)) + { + var_00 playloopsound("elev_musak_loop"); + } + + thread listen_for("closing_inner_doors"); + thread listen_for("opening_inner_doors"); + thread listen_for("closed_inner_doors"); + thread listen_for("opened_inner_doors"); + foreach(var_03, var_02 in get_outer_doorsets()) + { + thread listen_for("closing_floor_" + var_03 + "_outer_doors"); + thread listen_for("opening_floor_" + var_03 + "_outer_doors"); + thread listen_for("closed_floor_" + var_03 + "_outer_doors"); + thread listen_for("opened_floor_" + var_03 + "_outer_doors"); + } + + thread listen_for("interrupted"); + thread listen_for("elevator_moving"); + thread listen_for("elevator_moved"); +} + +//Function Number: 13 +listen_for(param_00) +{ + for(;;) + { + self waittill(param_00); + var_01 = get_housing_mainframe(); + if(issubstr(param_00,"closing_")) + { + var_01 playsound("elev_door_close"); + } + + if(issubstr(param_00,"opening_")) + { + var_01 playsound("elev_door_open"); + } + + if(param_00 == "elevator_moving") + { + var_01 playsound("elev_run_start"); + var_01 playloopsound("elev_run_loop"); + } + + if(param_00 == "interrupted") + { + var_01 playsound("elev_door_interupt"); + } + + if(param_00 == "elevator_moved") + { + var_01 stoploopsound("elev_run_loop"); + var_01 playsound("elev_run_end"); + var_01 playsound("elev_bell_ding"); + } + } +} + +//Function Number: 14 +position_elevators() +{ + foreach(var_01 in level.elevators) + { + var_01.moveto_floor = var_01 get_curfloor(); + foreach(var_04, var_03 in var_01 get_outer_doorsets()) + { + if(var_01 get_curfloor() != var_04) + { + var_01 thread func_187B(var_04); + } + } + } +} + +//Function Number: 15 +elevator_move(param_00) +{ + self notify("elevator_moving"); + self endon("elevator_moving"); + var_01 = get_housing_mainframe(); + var_02 = self.e["floor" + param_00 + "_pos"] - var_01.origin; + var_03 = level.var_185D; + var_04 = abs(distance(self.e["floor" + param_00 + "_pos"],var_01.origin)); + var_05 = var_04 / var_03; + var_01 moveto(var_01.origin + var_02,var_05,var_05 * level.elevator_accel,var_05 * level.var_185B); + foreach(var_07 in get_housing_children()) + { + var_08 = var_07.origin + var_02; + if(!issubstr(var_07.classname,"trigger_")) + { + var_07 moveto(var_08,var_05,var_05 * level.elevator_accel,var_05 * level.var_185B); + continue; + } + + var_07.origin = var_08; + } + + func_189B(var_01,self.e["floor" + param_00 + "_pos"]); + self notify("elevator_moved"); +} + +//Function Number: 16 +close_inner_doors() +{ + self notify("closing_inner_doors"); + self endon("closing_inner_doors"); + self endon("opening_inner_doors"); + var_00 = func_1895(); + var_01 = get_housing_rightdoor(); + var_02 = get_housing_mainframe(); + var_03 = func_1894(); + var_04 = (var_03[0],var_03[1],var_02.origin[2]); + var_05 = level.var_185E; + var_06 = abs(distance(var_00.origin,var_04)); + var_07 = var_06 / var_05; + var_00 moveto(var_04,var_07,var_07 * 0.1,var_07 * 0.25); + var_01 moveto(var_04,var_07,var_07 * 0.1,var_07 * 0.25); + func_189B(var_00,var_04,var_01,var_04); + self notify("closed_inner_doors"); +} + +//Function Number: 17 +func_187A() +{ + self notify("opening_inner_doors"); + self endon("opening_inner_doors"); + var_00 = func_1895(); + var_01 = get_housing_rightdoor(); + var_02 = get_housing_mainframe(); + var_03 = get_housing_leftdoor_opened_pos(); + var_04 = get_housing_rightdoor_opened_pos(); + var_05 = (var_03[0],var_03[1],var_02.origin[2]); + var_06 = (var_04[0],var_04[1],var_02.origin[2]); + var_07 = level.var_185E; + var_08 = abs(distance(var_05,var_06) * 0.5); + var_09 = var_08 / var_07 * 0.5; + var_00 moveto(var_05,var_09,var_09 * 0.1,var_09 * 0.25); + var_01 moveto(var_06,var_09,var_09 * 0.1,var_09 * 0.25); + func_189B(var_00,var_05,var_01,var_06); + self notify("opened_inner_doors"); +} + +//Function Number: 18 +func_187B(param_00) +{ + self notify("closing_floor_" + param_00 + "_outer_doors"); + self endon("closing_floor_" + param_00 + "_outer_doors"); + self endon("opening_floor_" + param_00 + "_outer_doors"); + var_01 = get_outer_leftdoor(param_00); + var_02 = get_outer_rightdoor(param_00); + var_03 = func_188B(param_00); + var_04 = get_outer_closedpos(param_00); + var_05 = level.var_185F; + var_06 = abs(distance(var_03,var_04)); + var_07 = var_06 / var_05; + var_01 moveto(var_04,var_07,var_07 * 0.1,var_07 * 0.25); + var_02 moveto(var_04,var_07,var_07 * 0.1,var_07 * 0.25); + func_189B(var_01,var_04,var_02,var_04); + self notify("closed_floor_" + param_00 + "_outer_doors"); +} + +//Function Number: 19 +open_outer_doors(param_00) +{ + level notify("elevator_doors_opening"); + self notify("opening_floor_" + param_00 + "_outer_doors"); + self endon("opening_floor_" + param_00 + "_outer_doors"); + var_01 = get_outer_leftdoor(param_00); + var_02 = get_outer_rightdoor(param_00); + var_03 = func_188B(param_00); + var_04 = get_outer_rightdoor_openedpos(param_00); + var_05 = get_outer_closedpos(param_00); + var_06 = level.var_185F; + var_07 = abs(distance(var_03,var_05)); + var_08 = var_07 / var_06 * 0.5; + var_01 moveto(var_03,var_08,var_08 * 0.1,var_08 * 0.25); + var_02 moveto(var_04,var_08,var_08 * 0.1,var_08 * 0.25); + func_189B(var_01,var_03,var_02,var_04); + self notify("opened_floor_" + param_00 + "_outer_doors"); +} + +//Function Number: 20 +build_elevators() +{ + var_00 = getentarray("elevator_group","targetname"); + var_01 = getentarray("elevator_housing","targetname"); + var_02 = getentarray("elevator_doorset","targetname"); + foreach(var_04 in var_00) + { + var_05 = getent(var_04.target,"targetname"); + var_06 = []; + var_06[0] = min(var_04.origin[0],var_05.origin[0]); + var_06[1] = max(var_04.origin[0],var_05.origin[0]); + var_06[2] = min(var_04.origin[1],var_05.origin[1]); + var_06[3] = max(var_04.origin[1],var_05.origin[1]); + var_07 = spawnstruct(); + var_07.e["id"] = level.elevators.size; + var_07.e["housing"] = []; + var_07.e["housing"]["mainframe"] = []; + foreach(var_09 in var_01) + { + if(var_09 isinbound(var_06)) + { + var_07.e["housing"]["mainframe"][var_07.e["housing"]["mainframe"].size] = var_09; + if(var_09.classname == "script_model") + { + continue; + } + + if(var_09.code_classname == "light") + { + continue; + } + + var_0A = getent(var_09.target,"targetname"); + var_07.e["housing"]["left_door"] = var_0A; + var_07.e["housing"]["left_door_opened_pos"] = var_0A.origin; + var_0B = getent(var_0A.target,"targetname"); + var_07.e["housing"]["right_door"] = var_0B; + var_07.e["housing"]["right_door_opened_pos"] = var_0B.origin; + var_0C = var_0A.origin - var_0B.origin * (0.5,0.5,0.5) + var_0B.origin; + var_07.e["housing"]["door_closed_pos"] = var_0C; + var_0D = getent(var_0B.target,"targetname"); + var_07.e["housing"]["door_trigger"] = var_0D; + var_0E = getent(var_0D.target,"targetname"); + var_07.e["housing"]["inside_trigger"] = var_0E; + var_0E make_discrete_trigger(); + var_0E.motion_trigger = spawn("trigger_radius",var_09.origin,0,64,128); + } + } + + var_07.e["outer_doorset"] = []; + foreach(var_11 in var_02) + { + if(var_11 isinbound(var_06)) + { + var_12 = isdefined(var_11.script_noteworthy) && var_11.script_noteworthy == "closed_for_lighting"; + var_13 = var_07.e["outer_doorset"].size; + var_07.e["outer_doorset"][var_13] = []; + var_07.e["outer_doorset"][var_13]["door_closed_pos"] = var_11.origin; + var_14 = getent(var_11.target,"targetname"); + var_07.e["outer_doorset"][var_13]["left_door"] = var_14; + var_07.e["outer_doorset"][var_13]["left_door_opened_pos"] = var_14.origin; + var_15 = getent(var_14.target,"targetname"); + var_07.e["outer_doorset"][var_13]["right_door"] = var_15; + var_07.e["outer_doorset"][var_13]["right_door_opened_pos"] = var_15.origin; + if(var_12) + { + var_16 = var_11.origin - var_14.origin; + var_11.origin = var_14.origin; + var_14.origin = var_14.origin + var_16; + var_15.origin = var_15.origin - var_16; + var_07.e["outer_doorset"][var_13]["door_closed_pos"] = var_11.origin; + var_07.e["outer_doorset"][var_13]["left_door_opened_pos"] = var_14.origin; + var_07.e["outer_doorset"][var_13]["right_door_opened_pos"] = var_15.origin; + } + } + } + + for(var_18 = 0;var_18 < var_07.e["outer_doorset"].size - 1;var_18++) + { + for(var_19 = 0;var_19 < var_07.e["outer_doorset"].size - 1 - var_18;var_19++) + { + if(var_07.e["outer_doorset"][var_19 + 1]["door_closed_pos"][2] < var_07.e["outer_doorset"][var_19]["door_closed_pos"][2]) + { + var_1A = var_07.e["outer_doorset"][var_19]["left_door"]; + var_1B = var_07.e["outer_doorset"][var_19]["left_door_opened_pos"]; + var_1C = var_07.e["outer_doorset"][var_19]["right_door"]; + var_1D = var_07.e["outer_doorset"][var_19]["right_door_opened_pos"]; + var_1E = var_07.e["outer_doorset"][var_19]["door_closed_pos"]; + var_07.e["outer_doorset"][var_19]["left_door"] = var_07.e["outer_doorset"][var_19 + 1]["left_door"]; + var_07.e["outer_doorset"][var_19]["left_door_opened_pos"] = var_07.e["outer_doorset"][var_19 + 1]["left_door_opened_pos"]; + var_07.e["outer_doorset"][var_19]["right_door"] = var_07.e["outer_doorset"][var_19 + 1]["right_door"]; + var_07.e["outer_doorset"][var_19]["right_door_opened_pos"] = var_07.e["outer_doorset"][var_19 + 1]["right_door_opened_pos"]; + var_07.e["outer_doorset"][var_19]["door_closed_pos"] = var_07.e["outer_doorset"][var_19 + 1]["door_closed_pos"]; + var_07.e["outer_doorset"][var_19 + 1]["left_door"] = var_1A; + var_07.e["outer_doorset"][var_19 + 1]["left_door_opened_pos"] = var_1B; + var_07.e["outer_doorset"][var_19 + 1]["right_door"] = var_1C; + var_07.e["outer_doorset"][var_19 + 1]["right_door_opened_pos"] = var_1D; + var_07.e["outer_doorset"][var_19 + 1]["door_closed_pos"] = var_1E; + } + } + } + + var_1F = []; + foreach(var_18, var_21 in var_07.e["outer_doorset"]) + { + var_22 = var_07 get_housing_mainframe(); + var_1F = (var_22.origin[0],var_22.origin[1],var_21["door_closed_pos"][2]); + var_07.e["floor" + var_18 + "_pos"] = var_1F; + if(var_22.origin == var_1F) + { + var_07.e["initial_floor"] = var_18; + var_07.e["current_floor"] = var_18; + } + } + + level.elevators[level.elevators.size] = var_07; + var_04 delete(); + var_05 delete(); + } + + foreach(var_11 in var_02) + { + var_11 delete(); + } + + build_call_buttons(); + if(!level.elevator_motion_detection) + { + func_187F(); + } + + foreach(var_27 in level.elevators) + { + var_28 = var_27 get_housing_primarylight(); + if(isdefined(var_28) && var_28.size) + { + foreach(var_2A in var_28) + { + var_2A setlightintensity(0.75); + } + } + } +} + +//Function Number: 21 +build_call_buttons() +{ + level.var_1867 = getentarray("elevator_call","targetname"); + foreach(var_01 in level.var_1867) + { + var_01.e = []; + var_02 = (0,0,var_01.origin[2]); + var_03 = (var_01.origin[0],var_01.origin[1],0); + var_04 = []; + foreach(var_06 in level.elevators) + { + foreach(var_0B, var_08 in var_06 get_outer_doorsets()) + { + var_09 = (0,0,var_06.e["floor" + var_0B + "_pos"][2]); + var_0A = (var_06.e["floor" + var_0B + "_pos"][0],var_06.e["floor" + var_0B + "_pos"][1],0); + if(abs(distance(var_02,var_09)) <= level.elevator_callbutton_link_v) + { + if(abs(distance(var_03,var_0A)) <= level.var_1858) + { + var_04[var_04.size] = var_06; + var_01.e[var_0B] = var_04; + } + } + } + } + + var_01 make_discrete_trigger(); + var_01.motion_trigger = spawn("trigger_radius",var_01.origin + (0,0,-32),0,32,64); + } +} + +//Function Number: 22 +func_187F() +{ + foreach(var_01 in level.elevators) + { + var_02 = var_01 get_housing_inside_trigger(); + var_03 = var_01 get_outer_doorsets(); + var_04 = var_03.size; + var_02 setcursorhint("HINT_NOICON"); + if(var_04 > 2) + { + var_02 sethintstring(&"ELEVATOR_FLOOR_SELECT_HINT"); + continue; + } + + var_02 sethintstring(&"ELEVATOR_USE_HINT"); + } + + foreach(var_07 in level.var_1867) + { + var_07 setcursorhint("HINT_NOICON"); + var_07 sethintstring(&"ELEVATOR_CALL_HINT"); + } +} + +//Function Number: 23 +make_discrete_trigger() +{ + self.enabled = 1; + func_1884(); +} + +//Function Number: 24 +func_1882(param_00) +{ + enable_trigger(); + if(level.elevator_motion_detection) + { + self.motion_trigger waittill(param_00,var_01); + } + else + { + self waittill(var_01,var_01); + } + + func_1884(); + return var_01; +} + +//Function Number: 25 +enable_trigger() +{ + if(!self.enabled) + { + self.enabled = 1; + self.origin = self.origin + (0,0,10000); + if(isdefined(self.motion_trigger)) + { + self.motion_trigger.origin = self.motion_trigger.origin + (0,0,10000); + } + } +} + +//Function Number: 26 +func_1884() +{ + self notify("disable_trigger"); + if(self.enabled) + { + thread disable_trigger_helper(); + } +} + +//Function Number: 27 +disable_trigger_helper() +{ + self endon("disable_trigger"); + self.enabled = 0; + wait 1.5; + self.origin = self.origin + (0,0,-10000); + if(isdefined(self.motion_trigger)) + { + self.motion_trigger.origin = self.motion_trigger.origin + (0,0,-10000); + } +} + +//Function Number: 28 +func_1886(param_00) +{ + return self.e["outer_doorset"][param_00]; +} + +//Function Number: 29 +get_outer_doorsets() +{ + return self.e["outer_doorset"]; +} + +//Function Number: 30 +get_outer_closedpos(param_00) +{ + return self.e["outer_doorset"][param_00]["door_closed_pos"]; +} + +//Function Number: 31 +get_outer_leftdoor(param_00) +{ + return self.e["outer_doorset"][param_00]["left_door"]; +} + +//Function Number: 32 +get_outer_rightdoor(param_00) +{ + return self.e["outer_doorset"][param_00]["right_door"]; +} + +//Function Number: 33 +func_188B(param_00) +{ + return self.e["outer_doorset"][param_00]["left_door_opened_pos"]; +} + +//Function Number: 34 +get_outer_rightdoor_openedpos(param_00) +{ + return self.e["outer_doorset"][param_00]["right_door_opened_pos"]; +} + +//Function Number: 35 +get_housing_children() +{ + var_00 = []; + var_01 = get_housing_door_trigger(); + var_02 = get_housing_inside_trigger(); + var_03 = var_02.motion_trigger; + var_04 = func_1895(); + var_05 = get_housing_rightdoor(); + var_00[var_00.size] = var_01; + var_00[var_00.size] = var_02; + var_00[var_00.size] = var_04; + var_00[var_00.size] = var_05; + if(isdefined(var_03)) + { + var_00[var_00.size] = var_03; + } + + var_06 = func_188F(); + foreach(var_08 in var_06) + { + var_00[var_00.size] = var_08; + } + + var_0A = get_housing_primarylight(); + foreach(var_0C in var_0A) + { + var_00[var_00.size] = var_0C; + } + + return var_00; +} + +//Function Number: 36 +get_housing_mainframe() +{ + var_00 = self.e["housing"]["mainframe"]; + var_01 = undefined; + foreach(var_03 in var_00) + { + if(var_03.classname != "script_model" && var_03.code_classname != "light") + { + var_01 = var_03; + } + } + + return var_01; +} + +//Function Number: 37 +func_188F() +{ + var_00 = self.e["housing"]["mainframe"]; + var_01 = []; + foreach(var_03 in var_00) + { + if(var_03.classname == "script_model") + { + var_01[var_01.size] = var_03; + } + } + + return var_01; +} + +//Function Number: 38 +get_housing_primarylight() +{ + var_00 = self.e["housing"]["mainframe"]; + var_01 = []; + foreach(var_03 in var_00) + { + if(var_03.code_classname == "light") + { + var_01[var_01.size] = var_03; + } + } + + return var_01; +} + +//Function Number: 39 +get_housing_musak_model() +{ + var_00 = func_188F(); + var_01 = undefined; + foreach(var_03 in var_00) + { + if(isdefined(var_03.script_noteworthy) && var_03.script_noteworthy == "play_musak") + { + var_01 = var_03; + } + } + + return var_01; +} + +//Function Number: 40 +get_housing_door_trigger() +{ + return self.e["housing"]["door_trigger"]; +} + +//Function Number: 41 +get_housing_inside_trigger() +{ + return self.e["housing"]["inside_trigger"]; +} + +//Function Number: 42 +func_1894() +{ + return self.e["housing"]["door_closed_pos"]; +} + +//Function Number: 43 +func_1895() +{ + return self.e["housing"]["left_door"]; +} + +//Function Number: 44 +get_housing_rightdoor() +{ + return self.e["housing"]["right_door"]; +} + +//Function Number: 45 +get_housing_leftdoor_opened_pos() +{ + return self.e["housing"]["left_door_opened_pos"]; +} + +//Function Number: 46 +get_housing_rightdoor_opened_pos() +{ + return self.e["housing"]["right_door_opened_pos"]; +} + +//Function Number: 47 +get_curfloor() +{ + var_00 = elevator_floor_update(); + return self.e["current_floor"]; +} + +//Function Number: 48 +func_189A() +{ + return self.e["initial_floor"]; +} + +//Function Number: 49 +func_189B(param_00,param_01,param_02,param_03) +{ + if(!isdefined(param_02) && !isdefined(param_03)) + { + param_02 = param_00; + param_03 = param_01; + } + + for(;;) + { + var_04 = param_00.origin; + var_05 = param_02.origin; + if(var_04 == param_01 && var_05 == param_03) + { + break; + } + + wait 0.05; + } +} + +//Function Number: 50 +isinbound(param_00) +{ + if(level.script == "plaza" || level.script == "highrise_test") + { + return func_189D(param_00); + } + + var_01 = self.origin[0]; + var_02 = self.origin[1]; + var_03 = param_00[0]; + var_04 = param_00[1]; + var_05 = param_00[2]; + var_06 = param_00[3]; + return var_01 >= var_03 && var_01 <= var_04 && var_02 >= var_05 && var_02 <= var_06; +} + +//Function Number: 51 +func_189D(param_00) +{ + var_01 = self.origin[0]; + var_02 = self.origin[1]; + var_03 = param_00[0]; + var_04 = param_00[1]; + var_05 = param_00[2]; + var_06 = param_00[3]; + var_07 = var_03 + var_04 / 2; + var_08 = var_05 + var_06 / 2; + var_09 = abs(distance((var_03,var_05,0),(var_07,var_08,0))); + return abs(distance((var_01,var_02,0),(var_07,var_08,0))) < var_09; +} + +//Function Number: 52 +waittill_or_timeout(param_00,param_01) +{ + self endon(param_00); + wait param_01; +} + +//Function Number: 53 +elevator_get_dvar_int(param_00,param_01) +{ + return int(elevator_get_dvar(param_00,param_01)); +} + +//Function Number: 54 +elevator_get_dvar(param_00,param_01) +{ + if(getdvar(param_00) != "") + { + return getdvarfloat(param_00); + } + + setdvar(param_00,param_01); + return param_01; +} + +//Function Number: 55 +elevator_debug() +{ + if(!level.elevator_debug) + { + return; + } + + for(;;) + { + if(level.elevator_debug != 2) + { + continue; + } + + foreach(var_01 in level.elevators) + { + var_02 = var_01 get_housing_mainframe(); + var_03 = var_01 get_housing_musak_model(); + foreach(var_05 in var_01.e["outer_doorset"]) + { + } + } + + foreach(var_09 in level.var_1867) + { + foreach(var_05 in var_09.e) + { + var_0B = 0; + foreach(var_0D in var_05) + { + var_0B++; + var_0E = var_09.origin + (0,0,var_0B * -4); + } + } + } + + wait 0.05; + } +} \ No newline at end of file diff --git a/MW3/Xbox/SP/common_scripts/_fx.gsc b/MW3/Xbox/SP/common_scripts/_fx.gsc new file mode 100644 index 0000000..8ae90ca --- /dev/null +++ b/MW3/Xbox/SP/common_scripts/_fx.gsc @@ -0,0 +1,595 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: common_scripts\_fx.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 28 + * Decompile Time: 453 ms + * Timestamp: 10/27/2023 2:35:54 AM +*******************************************************************/ + +//Function Number: 1 +initfx() +{ + if(!isdefined(level.func)) + { + level.func = []; + } + + if(!isdefined(level.func["create_triggerfx"])) + { + level.func["create_triggerfx"] = ::create_triggerfx; + } + + common_scripts\utility::create_lock("createfx_looper",20); + level.exploderfunction = ::common_scripts\utility::exploder_before_load; + waittillframeend; + waittillframeend; + level.exploderfunction = ::common_scripts\utility::exploder_after_load; + level.server_culled_sounds = 0; + if(getdvarint("serverCulledSounds") == 1) + { + level.server_culled_sounds = 1; + } + + if(level.createfx_enabled) + { + level.server_culled_sounds = 0; + } + + if(level.createfx_enabled) + { + level waittill("createfx_common_done"); + } + + if(isdefined(level.var_7FAE)) + { + wait level.var_7FAE; + } + + for(var_00 = 0;var_00 < level.createfxent.size;var_00++) + { + var_01 = level.createfxent[var_00]; + var_01 common_scripts\_createfx::set_forward_and_up_vectors(); + if(var_01.v["type"] == "loopfx") + { + var_01 thread loopfxthread(); + } + + if(var_01.v["type"] == "oneshotfx") + { + var_01 thread oneshotfxthread(); + } + + if(var_01.v["type"] == "soundfx") + { + var_01 thread create_loopsound(); + } + + if(var_01.v["type"] == "soundfx_interval") + { + var_01 thread create_interval_sound(); + } + } +} + +//Function Number: 2 +print_org(param_00,param_01,param_02,param_03) +{ + if(getdvar("debug") == "1") + { + } +} + +//Function Number: 3 +oneshotfx(param_00,param_01,param_02,param_03) +{ +} + +//Function Number: 4 +exploderfx(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,param_0D,param_0E,param_0F,param_10,param_11) +{ + if(1) + { + var_12 = common_scripts\utility::createexploder(param_01); + var_12.v["origin"] = param_02; + var_12.v["angles"] = (0,0,0); + if(isdefined(param_04)) + { + var_12.v["angles"] = vectortoangles(param_04 - param_02); + } + + var_12.v["delay"] = param_03; + var_12.v["exploder"] = param_00; + if(isdefined(level.createfxexploders)) + { + var_13 = level.createfxexploders[var_12.v["exploder"]]; + if(!isdefined(var_13)) + { + var_13 = []; + } + + level.createfxexploders[var_13.v["exploder"]] = var_41; + } + + return; + } + + var_14 = spawn("script_origin",(0,0,0)); + var_14.origin = param_04; + var_14.angles = vectortoangles(param_06 - param_04); + var_14.script_exploder = param_02; + var_14.script_fxid = param_03; + var_14.script_delay = param_05; + var_14.script_firefx = param_07; + var_14.script_firefxdelay = param_08; + var_14.script_firefxsound = param_09; + var_14.script_sound = param_0A; + var_14.script_earthquake = param_0B; + var_14.script_damage = param_0C; + var_14.script_radius = param_11; + var_14.script_soundalias = param_0D; + var_14.script_firefxtimeout = var_12; + var_14.script_repeat = param_0E; + var_14.script_delay_min = param_0F; + var_14.script_delay_max = param_10; + var_14.script_exploder_group = var_13; + var_15 = anglestoforward(var_14.angles); + var_15 = var_15 * 150; + var_14.targetpos = param_04 + var_15; + if(!isdefined(level._script_exploders)) + { + level._script_exploders = []; + } + + level._script_exploders[level._script_exploders.size] = var_14; + common_scripts\_createfx::createfx_showorigin(param_03,param_04,param_05,param_06,"exploderfx",var_14,undefined,param_07,param_08,param_09,param_0A,param_0B,param_0C,param_0D,param_0E,param_0F,param_10,param_11,var_12); +} + +//Function Number: 5 +loopfx(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + var_07 = common_scripts\utility::createloopeffect(param_00); + var_07.v["origin"] = param_01; + var_07.v["angles"] = (0,0,0); + if(isdefined(param_03)) + { + var_07.v["angles"] = vectortoangles(param_03 - param_01); + } + + var_07.v["delay"] = param_02; +} + +//Function Number: 6 +create_looper() +{ + self.looper = playloopedfx(level._effect[self.v["fxid"]],self.v["delay"],self.v["origin"],0,self.v["forward"],self.v["up"]); + create_loopsound(); +} + +//Function Number: 7 +create_loopsound() +{ + self notify("stop_loop"); + if(isdefined(self.v["soundalias"]) && self.v["soundalias"] != "nil") + { + if(isdefined(self.v["stopable"]) && self.v["stopable"]) + { + if(isdefined(self.looper)) + { + self.looper thread common_scripts\utility::loop_fx_sound(self.v["soundalias"],self.v["origin"],0,"death"); + return; + } + + thread common_scripts\utility::loop_fx_sound(self.v["soundalias"],self.v["origin"],0,"stop_loop"); + return; + } + + if(isdefined(self.looper)) + { + self.looper thread common_scripts\utility::loop_fx_sound(self.v["soundalias"],self.v["origin"],0); + return; + } + + var_00 = 0; + if(level.server_culled_sounds == 1 && isdefined(self.v["server_culled"])) + { + var_00 = self.v["server_culled"]; + } + + thread common_scripts\utility::loop_fx_sound(self.v["soundalias"],self.v["origin"],var_00); + return; + } +} + +//Function Number: 8 +create_interval_sound() +{ + self notify("stop_loop"); + if(!isdefined(self.v["soundalias"])) + { + return; + } + + if(self.v["soundalias"] == "nil") + { + return; + } + + var_00 = undefined; + var_01 = self; + if((isdefined(self.v["stopable"]) && self.v["stopable"]) || level.createfx_enabled) + { + if(isdefined(self.looper)) + { + var_01 = self.looper; + var_00 = "death"; + } + else + { + var_00 = "stop_loop"; + } + } + + var_01 thread common_scripts\utility::loop_fx_sound_interval(self.v["soundalias"],self.v["origin"],var_00,undefined,self.v["delay_min"],self.v["delay_max"]); +} + +//Function Number: 9 +loopfxthread() +{ + common_scripts\utility::waitframe(); + if(isdefined(self.fxstart)) + { + level waittill("start fx" + self.fxstart); + } + + for(;;) + { + create_looper(); + if(isdefined(self.timeout)) + { + thread loopfxstop(self.timeout); + } + + if(isdefined(self.fxstop)) + { + level waittill("stop fx" + self.fxstop); + } + else + { + return; + } + + if(isdefined(self.looper)) + { + self.looper delete(); + } + + if(isdefined(self.fxstart)) + { + level waittill("start fx" + self.fxstart); + continue; + } + } +} + +//Function Number: 10 +loopfxchangeid(param_00) +{ + self endon("death"); + param_00 waittill("effect id changed",var_01); +} + +//Function Number: 11 +loopfxchangeorg(param_00) +{ + self endon("death"); + for(;;) + { + param_00 waittill("effect org changed",var_01); + self.origin = var_01; + } +} + +//Function Number: 12 +loopfxchangedelay(param_00) +{ + self endon("death"); + param_00 waittill("effect delay changed",var_01); +} + +//Function Number: 13 +loopfxdeletion(param_00) +{ + self endon("death"); + param_00 waittill("effect deleted"); + self delete(); +} + +//Function Number: 14 +loopfxstop(param_00) +{ + self endon("death"); + wait param_00; + self.looper delete(); +} + +//Function Number: 15 +loopsound(param_00,param_01,param_02) +{ + level thread loopsoundthread(param_00,param_01,param_02); +} + +//Function Number: 16 +loopsoundthread(param_00,param_01,param_02) +{ + var_03 = spawn("script_origin",param_01); + var_03.origin = param_01; + var_03 playloopsound(param_00); +} + +//Function Number: 17 +gunfireloopfx(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07) +{ + thread gunfireloopfxthread(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07); +} + +//Function Number: 18 +gunfireloopfxthread(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07) +{ + level endon("stop all gunfireloopfx"); + common_scripts\utility::waitframe(); + if(param_07 < param_06) + { + var_08 = param_07; + param_07 = param_06; + param_06 = var_08; + } + + var_09 = param_06; + var_0A = param_07 - param_06; + if(param_05 < param_04) + { + var_08 = param_05; + param_05 = param_04; + param_04 = var_08; + } + + var_0B = param_04; + var_0C = param_05 - param_04; + if(param_03 < param_02) + { + var_08 = param_03; + param_03 = param_02; + param_02 = var_08; + } + + var_0D = param_02; + var_0E = param_03 - param_02; + var_0F = spawnfx(level._effect[param_00],param_01); + if(!level.createfx_enabled) + { + var_0F willneverchange(); + } + + for(;;) + { + var_10 = var_0D + randomint(var_0E); + for(var_11 = 0;var_11 < var_10;var_11++) + { + triggerfx(var_0F); + wait var_0B + randomfloat(var_0C); + } + + wait var_09 + randomfloat(var_0A); + } +} + +//Function Number: 19 +gunfireloopfxvec(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08) +{ + thread gunfireloopfxvecthread(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08); +} + +//Function Number: 20 +gunfireloopfxvecthread(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08) +{ + level endon("stop all gunfireloopfx"); + common_scripts\utility::waitframe(); + if(param_08 < param_07) + { + var_09 = param_08; + param_08 = param_07; + param_07 = var_09; + } + + var_0A = param_07; + var_0B = param_08 - param_07; + if(param_06 < param_05) + { + var_09 = param_06; + param_06 = param_05; + param_05 = var_09; + } + + var_0C = param_05; + var_0D = param_06 - param_05; + if(param_04 < param_03) + { + var_09 = param_04; + param_04 = param_03; + param_03 = var_09; + } + + var_0E = param_03; + var_0F = param_04 - param_03; + param_02 = vectornormalize(param_02 - param_01); + var_10 = spawnfx(level._effect[param_00],param_01,param_02); + if(!level.createfx_enabled) + { + var_10 willneverchange(); + } + + for(;;) + { + var_11 = var_0E + randomint(var_0F); + for(var_12 = 0;var_12 < int(var_11 / level.fxfireloopmod);var_12++) + { + triggerfx(var_10); + var_13 = var_0C + randomfloat(var_0D) * level.fxfireloopmod; + if(var_13 < 0.05) + { + var_13 = 0.05; + } + + wait var_13; + } + + wait var_0C + randomfloat(var_0D); + wait var_0A + randomfloat(var_0B); + } +} + +//Function Number: 21 +setfireloopmod(param_00) +{ + level.fxfireloopmod = 1 / param_00; +} + +//Function Number: 22 +setup_fx() +{ + if(!isdefined(self.script_fxid) || !isdefined(self.script_fxcommand) || !isdefined(self.script_delay)) + { + return; + } + + if(isdefined(self.model)) + { + if(self.model == "toilet") + { + thread burnville_paratrooper_hack(); + return; + } + } + + var_00 = undefined; + if(isdefined(self.target)) + { + var_01 = getent(self.target,"targetname"); + if(isdefined(var_01)) + { + var_00 = var_01.origin; + } + } + + var_02 = undefined; + if(isdefined(self.script_fxstart)) + { + var_02 = self.script_fxstart; + } + + var_03 = undefined; + if(isdefined(self.script_fxstop)) + { + var_03 = self.script_fxstop; + } + + if(self.script_fxcommand == "OneShotfx") + { + oneshotfx(self.script_fxid,self.origin,self.script_delay,var_00); + } + + if(self.script_fxcommand == "loopfx") + { + loopfx(self.script_fxid,self.origin,self.script_delay,var_00,var_02,var_03); + } + + if(self.script_fxcommand == "loopsound") + { + loopsound(self.script_fxid,self.origin,self.script_delay); + } + + self delete(); +} + +//Function Number: 23 +burnville_paratrooper_hack() +{ + var_00 = (0,0,self.angles[1]); + var_01 = level._effect[self.script_fxid]; + var_02 = self.origin; + wait 1; + level thread burnville_paratrooper_hack_loop(var_00,var_02,var_01); + self delete(); +} + +//Function Number: 24 +burnville_paratrooper_hack_loop(param_00,param_01,param_02) +{ + for(;;) + { + playfx(param_02,param_01); + wait 30 + randomfloat(40); + } +} + +//Function Number: 25 +create_triggerfx() +{ + if(!verify_effects_assignment(self.v["fxid"])) + { + return; + } + + self.looper = spawnfx(level._effect[self.v["fxid"]],self.v["origin"],self.v["forward"],self.v["up"]); + triggerfx(self.looper,self.v["delay"]); + if(!level.createfx_enabled) + { + self.looper willneverchange(); + } + + create_loopsound(); +} + +//Function Number: 26 +verify_effects_assignment(param_00) +{ + if(isdefined(level._effect[param_00])) + { + return 1; + } + + if(!isdefined(level._missing_fx)) + { + level._missing_fx = []; + } + + level._missing_fx[self.v["fxid"]] = param_00; + verify_effects_assignment_print(param_00); + return 0; +} + +//Function Number: 27 +verify_effects_assignment_print(param_00) +{ + level notify("verify_effects_assignment_print"); + level endon("verify_effects_assignment_print"); + wait 0.05; + var_01 = getarraykeys(level._missing_fx); + foreach(var_03 in var_01) + { + } +} + +//Function Number: 28 +oneshotfxthread() +{ + common_scripts\utility::waitframe(); + if(self.v["delay"] > 0) + { + wait self.v["delay"]; + } + + [[ level.func["create_triggerfx"] ]](); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/common_scripts/_painter.gsc b/MW3/Xbox/SP/common_scripts/_painter.gsc new file mode 100644 index 0000000..f3c1988 --- /dev/null +++ b/MW3/Xbox/SP/common_scripts/_painter.gsc @@ -0,0 +1,1319 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: common_scripts\_painter.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 53 + * Decompile Time: 904 ms + * Timestamp: 10/27/2023 2:34:15 AM +*******************************************************************/ + +//Function Number: 1 +main(param_00) +{ + var_01 = getentarray("painter_setup","targetname"); + if(!var_01.size) + { + return; + } + + if(!getdvarint("painter")) + { + common_scripts\utility::array_thread(var_01,::painter_clean_me); + return; + } + + func_1762(param_00); + var_02 = []; + var_03 = func_1761(var_01); + foreach(var_05 in var_03) + { + setup_painter_group(var_05); + } + + thread painter_init(); + common_scripts\utility::array_thread(level.spam_model_group,::default_undefined); + level.var_1750 = 1; + level waittill("forever"); +} + +//Function Number: 2 +painter_clean_me() +{ + if(isdefined(self.target)) + { + var_00 = getent(self.target,"targetname"); + var_00 delete(); + } + + self delete(); +} + +//Function Number: 3 +default_undefined() +{ + if(!isdefined(self.bposedstyle)) + { + self.bposedstyle = 0; + } + + if(!isdefined(self.var_1754)) + { + self.var_1754 = 0; + } + + if(!isdefined(self.btreeorient)) + { + self.btreeorient = 0; + } + + if(!isdefined(self.bfacade)) + { + self.bfacade = 0; + } + + if(!isdefined(self.density)) + { + self.density = 32; + } + + if(!isdefined(self.radius)) + { + self.radius = 84; + } + + if(!isdefined(self.maxdist)) + { + self.maxdist = 1000; + } + + if(!isdefined(self.var_1759)) + { + self.var_1759 = []; + } +} + +//Function Number: 4 +setup_painter_group(param_00) +{ + var_01 = 100000001; + var_02 = param_00; + var_03 = undefined; + var_04 = undefined; + var_05 = undefined; + var_06 = undefined; + var_07 = undefined; + var_08 = undefined; + var_09 = undefined; + var_0A = undefined; + foreach(var_0C in param_00) + { + var_0A = get_angle_offset(var_0C); + var_07 = func_1760(var_0C); + var_0D = isdefined(var_0C.script_parameters) && var_0C.script_parameters == "use_prefab_model"; + if(isdefined(var_0C.radius)) + { + var_05 = var_0C.radius; + } + + if(isdefined(var_0C.script_painter_treeorient) && var_0C.script_painter_treeorient) + { + var_03 = 1; + } + + if(isdefined(var_0C.var_175C) && var_0C.var_175C) + { + var_06 = var_0C.var_175C; + } + + if(isdefined(var_0C.script_painter_facade) && var_0C.script_painter_facade) + { + var_04 = 1; + } + + foreach(var_0F in var_02) + { + if(var_0C == var_0F) + { + continue; + } + + var_10 = distance(var_0C.origin,var_0F.origin); + if(var_10 < var_01) + { + var_01 = var_10; + } + } + + if(var_01 == 100000001) + { + var_01 = undefined; + } + + func_1775(var_0C.script_paintergroup,var_0C.model,var_03,var_04,var_01,var_05,var_06,var_07,var_08,var_09,var_0A,var_0D); + } +} + +//Function Number: 5 +get_angle_offset(param_00) +{ + if(!isdefined(param_00.target)) + { + return undefined; + } + + var_01 = getent(param_00.target,"targetname"); + return var_01.angles - param_00.angles; +} + +//Function Number: 6 +func_1760(param_00) +{ + if(!isdefined(param_00.target)) + { + return undefined; + } + + var_01 = getent(param_00.target,"targetname"); + var_02 = var_01.origin[2] - param_00.origin[2]; + var_01 delete(); + return var_02; +} + +//Function Number: 7 +func_1761(param_00) +{ + var_01 = []; + var_02 = ""; + foreach(var_04 in param_00) + { + if(!isdefined(var_04.script_paintergroup)) + { + var_04.script_paintergroup = var_04.model; + } + + var_02 = var_04.script_paintergroup; + level.var_16ED = var_02; + if(!isdefined(var_01[var_02]) || !var_01[var_02].size) + { + var_01[var_02] = []; + } + + var_01[var_02][var_01[var_02].size] = var_04; + } + + return var_01; +} + +//Function Number: 8 +func_1762(param_00) +{ + level._clearalltextafterhudelem = 0; + level.bposedstyle = 0; + level.var_1754 = 0; + level.var_1763 = 16; + level.var_1764 = 0; + level.spam_model_group = []; + level.var_1765 = []; + level.spam_models_flowrate = 0.1; + level.var_1767 = 31; + level.spam_maxdist = 1000; + level.previewmodels = []; + level.spam_models_iscustomrotation = 0; + level.spam_models_iscustomheight = 0; + level.spam_models_customheight = 0; + level.spam_model_circlescale_lasttime = 0; + level.spam_model_circlescale_accumtime = 0; + level.var_176F = ::func_1775; + level.timelimitoverride = 1; + thread hack_start(param_00); + thread func_16CA(); +} + +//Function Number: 9 +hack_start(param_00) +{ + if(!isdefined(param_00)) + { + param_00 = "painter"; + } + + precachemenu(param_00); + common_scripts\utility::flag_init("user_alive"); + while(!isdefined(get_player())) + { + wait 0.05; + } + + level.painter_player = get_player(); + wait 0.05; + var_01 = "team_marinesopfor"; + var_02 = "autoassign"; + level.painter_player notify("menuresponse",var_01,var_02); + wait 0.05; + var_01 = "changeclass_offline"; + var_02 = "offline_class1_mp, 0"; + level.painter_player notify("menuresponse",var_01,var_02); + level.painter_player openpopupmenu(param_00); + wait 0.05; + level.painter_player closepopupmenu(); + common_scripts\utility::flag_set("user_alive"); +} + +//Function Number: 10 +painter_init() +{ + common_scripts\utility::array_call(getentarray("script_model","classname"),::delete); + setcurrentgroup(level.var_16ED); + level.var_16ED = undefined; + playerinit(); +} + +//Function Number: 11 +hud_update_placed_model_count() +{ + level.hud_controler["helppm"].var_16D0 setvalue(level.var_1765.size); + var_00 = 256; + if(level.var_1765.size < var_00) + { + level.hud_controler["helppm"].var_16D0.color = (1,1,1); + return; + } + + var_01 = 1; + var_02 = 1 - level.var_1765.size - var_00 / var_00; + var_03 = var_02; + level.hud_controler["helppm"].var_16D0.color = (var_01,var_02,var_03); +} + +//Function Number: 12 +func_16CA() +{ + common_scripts\utility::flag_init("user_hud_active"); + common_scripts\utility::flag_wait("user_alive"); + var_00 = 7; + if(is_mp()) + { + var_00 = 7; + } + + var_01 = []; + var_02 = 15; + var_03 = int(var_00 / 2); + var_04 = 240 + var_03 * var_02; + var_05 = 0.5 / var_03; + var_06 = var_05; + for(var_07 = 0;var_07 < var_00;var_07++) + { + var_01[var_07] = _newhudelem(); + var_01[var_07].location = 0; + var_01[var_07].alignx = "left"; + var_01[var_07].aligny = "middle"; + var_01[var_07].foreground = 1; + var_01[var_07].fontscale = 2; + var_01[var_07].sort = 20; + if(var_07 == var_03) + { + var_01[var_07].alpha = 1; + } + else + { + var_01[var_07].alpha = var_06; + } + + var_01[var_07].x = 20; + var_01[var_07].y = var_04; + var_01[var_07] _settext("."); + if(var_07 == var_03) + { + var_05 = var_05 * -1; + } + + var_06 = var_06 + var_05; + var_04 = var_04 - var_02; + } + + level.var_16CB = var_01; + var_08 = _newhudelem(); + var_08.location = 0; + var_08.alignx = "center"; + var_08.aligny = "bottom"; + var_08.foreground = 1; + var_08.fontscale = 2; + var_08.sort = 20; + var_08.alpha = 1; + var_08.x = 320; + var_08.y = 244; + var_08 _settext("."); + level.var_16CC = var_08; + var_08 = _newhudelem(); + var_08.location = 0; + var_08.alignx = "center"; + var_08.aligny = "bottom"; + var_08.foreground = 1; + var_08.fontscale = 2; + var_08.sort = 20; + var_08.alpha = 0; + var_08.x = 320; + var_08.y = 244; + var_08 setvalue(0); + level.crosshair_value = var_08; + controler_hud_add("helppm",1,"^5Placed Models: ",undefined,level.var_1765.size); + controler_hud_add("helpdensity",2,"^5Spacing: ",undefined,level.var_1763); + controler_hud_add("helpradius",3,"^5Radius: ",undefined,level.var_1767); + controler_hud_add("helpxy",6,"^4X / ^3Y: ",undefined,level.var_1767); + controler_hud_add("helpab",7,"^2A / ^1B^7: "," - "); + controler_hud_add("helplsrs",8,"^8L^7 / R Stick: "," - "); + controler_hud_add("helplbrb",9,"^8L^7 / R Shoulder: "," - "); + controler_hud_add("helpdpu",10,"^8DPad U / ^7D: "," - "); + controler_hud_add("helpdpl",11,"^8DPad L / ^7R: "," - "); + controler_hud_add("helpF",17,"^8F: ^7( dump ) ^3map_source/" + level.script + "_modeldump.map",""); + hint_buttons_main(); + common_scripts\utility::flag_set("user_hud_active"); +} + +//Function Number: 13 +hint_buttons_main() +{ + controler_hud_update_text("helpxy","^4Select Set Up ^7 / ^3Down"); + controler_hud_update_text("helpab","^2Spacing Down ^7 / ^1up "); + controler_hud_update_text("helplsrs","^8Radius Down ^7 / Up"); + controler_hud_update_text("helplbrb","^8Remove ^7 / Place"); + controler_hud_update_text("helpdpl","^8zOffset Clear ^7 / Set"); + controler_hud_update_text("helpdpu","^8Rotation Clear ^7 / Set"); +} + +//Function Number: 14 +hint_buttons_zoffset() +{ + controler_hud_update_text("helpxy","^4 - ^7 / ^3 - "); + controler_hud_update_text("helpab","^2Height Down ^7 / ^1Up "); + controler_hud_update_text("helplsrs","^8 - ^7 / - "); + controler_hud_update_text("helplbrb","^8 - ^7 / - "); + controler_hud_update_text("helpdpl","^8 - ^7 / Set"); + controler_hud_update_text("helpdpu","^8 - ^7 / - "); + controler_hud_update_text("helpF"," - "); +} + +//Function Number: 15 +func_1774() +{ + controler_hud_update_text("helpxy","^4 - ^7 / ^3 - "); + controler_hud_update_text("helpab","^2RotateOther Up ^7 / ^1Down "); + controler_hud_update_text("helplsrs","^8 - ^7 / - "); + controler_hud_update_text("helplbrb","^8 - ^7 / - "); + controler_hud_update_text("helpdpl","^8 - ^7 / - "); + controler_hud_update_text("helpdpu","^8Set ^7 / - "); + controler_hud_update_text("helpF"," - "); +} + +//Function Number: 16 +setcurrentgroup(param_00) +{ + common_scripts\utility::flag_wait("user_hud_active"); + level.spam_model_current_group = param_00; + var_01 = getarraykeys(level.spam_model_group); + var_02 = 0; + var_03 = int(level.var_16CB.size / 2); + for(var_04 = 0;var_04 < var_01.size;var_04++) + { + if(var_01[var_04] == param_00) + { + var_02 = var_04; + break; + } + } + + level.var_16CB[var_03] _settext(var_01[var_02]); + for(var_04 = 1;var_04 < level.var_16CB.size - var_03;var_04++) + { + if(var_02 - var_04 < 0) + { + level.var_16CB[var_03 + var_04] _settext("."); + continue; + } + + level.var_16CB[var_03 + var_04] _settext(var_01[var_02 - var_04]); + } + + for(var_04 = 1;var_04 < level.var_16CB.size - var_03;var_04++) + { + if(var_02 + var_04 > var_01.size - 1) + { + level.var_16CB[var_03 - var_04] _settext("."); + continue; + } + + level.var_16CB[var_03 - var_04] _settext(var_01[var_02 + var_04]); + } + + param_00 = getcurrent_groupstruct(); + level.var_1754 = param_00.var_1754; + level.bposedstyle = param_00.bposedstyle; + level.spam_maxdist = param_00.maxdist; + level.var_1767 = param_00.radius; + level.hud_controler["helpradius"].var_16D0 setvalue(level.var_1767); + level.var_1763 = param_00.density; + level.hud_controler["helpdensity"].var_16D0 setvalue(level.var_1763); +} + +//Function Number: 17 +setgroup_up() +{ + var_00 = undefined; + var_01 = getarraykeys(level.spam_model_group); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + if(var_01[var_02] == level.spam_model_current_group) + { + var_00 = var_02 + 1; + break; + } + } + + if(var_00 == var_01.size) + { + return; + } + + setcurrentgroup(var_01[var_00]); + while(level.painter_player buttonpressed("BUTTON_Y")) + { + wait 0.05; + } +} + +//Function Number: 18 +setgroup_down() +{ + var_00 = undefined; + var_01 = getarraykeys(level.spam_model_group); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + if(var_01[var_02] == level.spam_model_current_group) + { + var_00 = var_02 - 1; + break; + } + } + + if(var_00 < 0) + { + return; + } + + setcurrentgroup(var_01[var_00]); + while(level.painter_player buttonpressed("BUTTON_X")) + { + wait 0.05; + } +} + +//Function Number: 19 +func_1775(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A,param_0B) +{ + if(!isdefined(level.spam_model_group[param_00])) + { + var_0C = spawnstruct(); + level.spam_model_group[param_00] = var_0C; + level.spam_model_group[param_00].var_1776 = []; + } + + if(!isdefined(param_0A)) + { + param_0A = (0,0,0); + } + + level.spam_model_group[param_00].bfacade = param_03; + level.spam_model_group[param_00].btreeorient = param_02; + level.spam_model_group[param_00].density = param_04; + level.spam_model_group[param_00].radius = param_05; + level.spam_model_group[param_00].maxdist = param_06; + level.spam_model_group[param_00].bposedstyle = param_08; + level.spam_model_group[param_00].var_1754 = param_09; + if(!isdefined(level.spam_model_group[param_00].var_1759)) + { + level.spam_model_group[param_00].var_1759 = []; + } + + level.spam_model_group[param_00].var_1759[param_01] = param_0A; + if(!isdefined(level.spam_model_group[param_00].heightoffset)) + { + level.spam_model_group[param_00].heightoffset = []; + } + + level.spam_model_group[param_00].heightoffset[param_01] = param_07; + if(!isdefined(level.spam_model_group[param_00].var_1778)) + { + level.spam_model_group[param_00].var_1778 = []; + } + + level.spam_model_group[param_00].var_1778[param_01] = param_0B; + level.spam_model_group[param_00].var_1776[level.spam_model_group[param_00].var_1776.size] = param_01; +} + +//Function Number: 20 +playerinit() +{ + level.var_1779 = 700; + level.painter_player takeallweapons(); + common_scripts\utility::flag_wait("user_hud_active"); + for(;;) + { + var_00 = player_view_trace(); + draw_placement_circle(var_00); + if(level.painter_player buttonpressed("f")) + { + dump_models(); + } + + if(level.painter_player buttonpressed("DPAD_UP")) + { + customrotation_mode(var_00,"DPAD_UP"); + } + else if(level.painter_player buttonpressed("DPAD_DOWN")) + { + customrotation_mode_off(); + } + else if(level.painter_player buttonpressed("DPAD_RIGHT")) + { + customheight_mode(var_00,"DPAD_RIGHT"); + } + else if(level.painter_player buttonpressed("DPAD_LEFT")) + { + func_177A(); + } + else if(level.painter_player buttonpressed("BUTTON_X")) + { + setgroup_down(); + } + else if(level.painter_player buttonpressed("BUTTON_Y")) + { + setgroup_up(); + } + else if(level.painter_player buttonpressed("BUTTON_LSTICK")) + { + spam_model_circlescale(var_00,-1); + } + else if(level.painter_player buttonpressed("BUTTON_RSTICK")) + { + spam_model_circlescale(var_00,1); + } + else if(level.painter_player buttonpressed("BUTTON_A")) + { + func_1784(var_00,-1); + } + else if(level.painter_player buttonpressed("BUTTON_B")) + { + func_1784(var_00,1); + } + else + { + if(level.painter_player buttonpressed("BUTTON_LSHLDR")) + { + func_178F(var_00); + } + + if(level.painter_player buttonpressed("BUTTON_RSHLDR")) + { + thread spam_model_place(var_00); + } + } + + level notify("clear_previews"); + wait 0.05; + hud_update_placed_model_count(); + } +} + +//Function Number: 21 +func_177A() +{ + level.spam_models_iscustomheight = 0; + hint_buttons_main(); +} + +//Function Number: 22 +customheight_mode(param_00,param_01) +{ + if(param_00["fraction"] == 1) + { + return; + } + + while(level.painter_player buttonpressed(param_01)) + { + wait 0.05; + } + + level.spam_models_iscustomheight = 1; + hint_buttons_zoffset(); + var_02 = []; + var_02 = func_178A(param_00,0,1); + var_03 = 2; + var_04 = 1; + var_05 = param_00["position"]; + while(!level.painter_player buttonpressed(param_01)) + { + var_06 = level.spam_models_customheight; + if(level.painter_player buttonpressed("BUTTON_A")) + { + var_04 = -1; + } + else if(level.painter_player buttonpressed("BUTTON_B")) + { + var_04 = 1; + } + else + { + var_04 = 0; + } + + var_06 = var_06 + var_04 * var_03; + if(var_06 == 0) + { + var_06 = var_06 + var_04 * var_03; + } + + level.spam_models_customheight = var_06; + common_scripts\utility::array_thread(var_02,::customheight_mode_offsetmodels,param_00); + draw_placement_circle(param_00,(1,1,1)); + wait 0.05; + } + + common_scripts\utility::array_thread(var_02,::deleteme); + hint_buttons_main(); + while(level.painter_player buttonpressed(param_01)) + { + wait 0.05; + } +} + +//Function Number: 23 +customheight_mode_offsetmodels(param_00) +{ + self.origin = self.orgorg + param_00["normal"] * level.spam_models_customheight; +} + +//Function Number: 24 +customrotation_mode_off() +{ + level.spam_models_iscustomrotation = 0; + hint_buttons_main(); +} + +//Function Number: 25 +customrotation_mode(param_00,param_01) +{ + if(param_00["fraction"] == 1) + { + return; + } + + while(level.painter_player buttonpressed(param_01)) + { + wait 0.05; + } + + func_1774(); + level.spam_models_iscustomrotation = 1; + level.spam_models_customrotation = level.painter_player getplayerangles(); + var_02 = []; + var_02 = func_178A(param_00,1,1); + var_03 = 0; + var_04 = 1; + var_05 = 0; + while(!level.painter_player buttonpressed(param_01)) + { + var_05 = 0; + if(level.painter_player buttonpressed("BUTTON_A")) + { + var_05 = -1; + } + else if(level.painter_player buttonpressed("BUTTON_B")) + { + var_05 = 1; + } + + var_03 = var_03 + var_05 * var_04; + if(var_03 > 360) + { + var_03 = 1; + } + + if(var_03 < 0) + { + var_03 = 359; + } + + draw_placement_circle(param_00,(0,0,1)); + level.spam_models_customrotation = level.painter_player getplayerangles(); + level.spam_models_customrotation = level.spam_models_customrotation + (0,0,var_03); + for(var_06 = 0;var_06 < var_02.size;var_06++) + { + var_02[var_06].angles = level.spam_models_customrotation; + } + + wait 0.05; + } + + hint_buttons_main(); + while(level.painter_player buttonpressed(param_01)) + { + wait 0.05; + } + + for(var_06 = 0;var_06 < var_02.size;var_06++) + { + var_02[var_06] thread deleteme(); + } +} + +//Function Number: 26 +deleteme() +{ + self delete(); +} + +//Function Number: 27 +func_1781() +{ + self endon("death"); + level waittill("clear_previews"); + level.previewmodels = common_scripts\utility::array_remove(level.previewmodels,self); + self delete(); +} + +//Function Number: 28 +crosshair_fadetopoint() +{ + level notify("crosshair_fadetopoint"); + level endon("crosshair_fadetopoint"); + wait 2; + level.crosshair_value.alpha = 0; + level.var_16CC.alpha = 1; +} + +//Function Number: 29 +spam_model_circlescale(param_00,param_01) +{ + if(gettime() - level.spam_model_circlescale_lasttime > 60) + { + level.spam_model_circlescale_accumtime = 0; + } + + level.spam_model_circlescale_accumtime = level.spam_model_circlescale_accumtime + 0.05; + if(level.spam_model_circlescale_accumtime < 0.5) + { + var_02 = 2; + } + else + { + var_02 = level.spam_model_circlescale_accumtime / 0.3; + } + + var_03 = level.var_1767; + var_03 = var_03 + param_01 * var_02; + if(var_03 > 0) + { + level.var_1767 = var_03; + } + + level.hud_controler["helpradius"].var_16D0 setvalue(level.var_1767); + level.spam_model_circlescale_lasttime = gettime(); +} + +//Function Number: 30 +func_1784(param_00,param_01) +{ + var_02 = 2; + var_03 = level.var_1763; + var_03 = var_03 + param_01 * var_02; + if(var_03 > 0) + { + level.var_1763 = var_03; + } + + level.crosshair_value.alpha = 1; + level.var_16CC.alpha = 0; + level.crosshair_value setvalue(level.var_1763); + level.hud_controler["helpdensity"].var_16D0 setvalue(level.var_1763); + thread crosshair_fadetopoint(); +} + +//Function Number: 31 +draw_placement_circle(param_00,param_01) +{ + if(!isdefined(param_01)) + { + param_01 = (0,1,0); + } + + if(param_00["fraction"] == 1) + { + return; + } + + var_02 = vectortoangles(param_00["normal"]); + var_03 = param_00["position"]; + var_04 = level.var_1767; + plot_circle(var_03,var_04,var_02,param_01,40,level.var_1767); + if(level.spam_models_iscustomrotation) + { + draw_axis(var_03,level.spam_models_customrotation); + } + + if(level.spam_models_iscustomheight) + { + common_scripts\utility::draw_arrow(var_03,var_03 + param_00["normal"] * level.spam_models_customheight,(1,1,1)); + } +} + +//Function Number: 32 +player_view_trace() +{ + var_00 = level.spam_maxdist; + var_01 = level.painter_player geteye(); + return bullettrace(var_01,var_01 + anglestoforward(level.painter_player getplayerangles()) * var_00,0,self); +} + +//Function Number: 33 +orienttoplayeryrot() +{ + self addyaw(level.painter_player getplayerangles()[1] - common_scripts\utility::flat_angle(self.angles)[1]); +} + +//Function Number: 34 +getcurrent_groupstruct() +{ + return level.spam_model_group[level.spam_model_current_group]; +} + +//Function Number: 35 +func_1787() +{ + var_00 = getcurrent_groupstruct(); + if(level.spam_models_iscustomrotation) + { + self.angles = level.spam_models_customrotation; + return; + } + + if(level.bposedstyle) + { + self.angles = level.painter_player getplayerangles(); + } + + if(level.var_1754) + { + orienttoplayeryrot(); + } + + if(var_00.btreeorient) + { + self.angles = common_scripts\utility::flat_angle(self.angles); + } + + if(!level.var_1754 && !level.bposedstyle) + { + self addyaw(randomint(360)); + } + + if(var_00.bfacade) + { + self.angles = common_scripts\utility::flat_angle(vectortoangles(self.origin - level.painter_player geteye())); + self addyaw(90); + } + + self addroll(var_00.var_1759[self.model][0]); + self addpitch(var_00.var_1759[self.model][1]); + self addyaw(var_00.var_1759[self.model][2]); +} + +//Function Number: 36 +spam_model_place(param_00) +{ + if(level.var_1764) + { + return; + } + + if(param_00["fraction"] == 1 && !level.bposedstyle) + { + return; + } + + level.var_1764 = 1; + var_01 = func_178A(param_00,1); + level.var_1765 = common_scripts\utility::array_combine(level.var_1765,var_01); + level.var_1764 = 0; +} + +//Function Number: 37 +func_1789() +{ + var_00 = level.spam_model_group[level.spam_model_current_group].var_1776; + return var_00[randomint(var_00.size)]; +} + +//Function Number: 38 +func_178A(param_00,param_01,param_02) +{ + if(!isdefined(param_02)) + { + param_02 = 0; + } + + var_03 = []; + var_04 = level.var_1763; + var_05 = level.var_1767; + var_06 = int(var_05 / var_04) * 2; + var_07 = 0; + var_08 = param_00["position"]; + var_09 = vectortoangles(param_00["normal"]); + if(param_01) + { + var_09 = var_09 + (0,randomfloat(360),0); + } + + var_0A = vectornormalize(anglestoright(var_09)); + var_0B = vectornormalize(anglestoup(var_09)); + var_0C = var_08; + var_0C = var_0C - var_0A * var_05; + var_0C = var_0C - var_0B * var_05; + var_0C = var_0C + var_0A * var_04; + var_0C = var_0C + var_0B * var_04; + var_0D = var_0C; + if(var_06 == 0 || level.bposedstyle) + { + if(!param_02) + { + if(is_too_dense(var_08)) + { + return var_03; + } + } + + if(!param_02) + { + if(level.var_1765.size + var_03.size > level.var_1779) + { + return var_03; + } + } + + var_0E = func_1789(); + var_03[0] = func_178C(param_00,var_0E); + var_03[0] func_1787(); + return var_03; + } + + var_0F = []; + var_10 = var_08; + while(var_0F < var_06) + { + for(var_10 = var_07;var_10 < var_06;var_10++) + { + if(!param_02) + { + if(level.var_1765.size + var_03.size > level.var_1779) + { + return var_03; + } + } + + var_0D = var_0C; + var_0D = var_0D + var_0A * var_0F * var_04; + var_0D = var_0D + var_0B * var_10 * var_04; + if(distance(var_0D,var_08) > var_05) + { + continue; + } + + var_0E = contour_point(var_0D,var_09,level.var_1767); + if(var_0E["fraction"] == 1) + { + continue; + } + + if(is_too_dense(var_0E["position"])) + { + continue; + } + + var_11 = func_1789(); + var_12 = func_178C(var_0E,var_11); + var_12 func_1787(); + var_03[var_03.size] = var_12; + } + + var_0F++; + } + + return var_03; +} + +//Function Number: 39 +is_too_dense(param_00) +{ + for(var_01 = level.var_1765.size - 1;var_01 >= 0;var_01--) + { + if(distance(level.var_1765[var_01].orgorg,param_00) < level.var_1763 - 1) + { + return 1; + } + } + + return 0; +} + +//Function Number: 40 +get_player() +{ + return getentarray("player","classname")[0]; +} + +//Function Number: 41 +func_178C(param_00,param_01) +{ + var_02 = spawn("script_model",level.painter_player.origin); + var_02 setmodel(param_01); + var_02 notsolid(); + var_02.origin = param_00["position"]; + var_02.angles = vectortoangles(param_00["normal"]); + var_02 addpitch(90); + var_02.orgorg = var_02.origin; + var_03 = getcurrent_groupstruct(); + if(level.spam_models_iscustomheight) + { + var_02.origin = var_02.origin + param_00["normal"] * level.spam_models_customheight; + } + + var_03 = getcurrent_groupstruct(); + if(isdefined(var_03.heightoffset[param_01])) + { + var_02.origin = var_02.origin + param_00["normal"] * var_03.heightoffset[param_01]; + } + + if(isdefined(var_03.var_1778[param_01])) + { + var_02.var_1778 = var_03.var_1778[param_01]; + } + + return var_02; +} + +//Function Number: 42 +contour_point(param_00,param_01,param_02) +{ + var_03 = param_02; + var_04 = anglestoforward(param_01); + var_05 = param_00 + var_04 * var_03; + var_06 = param_00 + var_04 * -1 * var_03; + return bullettrace(var_05,var_06,0,level.painter_player); +} + +//Function Number: 43 +plot_circle(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if(!isdefined(param_03)) + { + param_03 = (0,1,0); + } + + if(!isdefined(param_04)) + { + param_04 = 16; + } + + var_06 = param_04 / 2; + var_07 = 360 / param_04; + param_04++; + var_08 = []; + var_09 = 0; + var_08 = []; + var_09 = 0; + for(var_0A = 0;var_0A < param_04;var_0A++) + { + var_0B = param_00 + anglestoup(param_02 + (0,0,var_09)) * param_01; + var_0C = contour_point(var_0B,param_02,level.var_1767); + if(var_0C["fraction"] != 1) + { + var_08[var_08.size] = var_0C["position"]; + } + + var_09 = var_09 + var_07; + } + + common_scripts\utility::plot_points(var_08,param_03[0],param_03[1],param_03[2]); + var_08 = []; +} + +//Function Number: 44 +func_178F(param_00) +{ + var_01 = param_00["position"]; + var_02 = []; + var_03 = []; + for(var_04 = 0;var_04 < level.var_1765.size;var_04++) + { + if(distance(level.var_1765[var_04].orgorg,var_01) > level.var_1767) + { + var_02[var_02.size] = level.var_1765[var_04]; + continue; + } + + var_03[var_03.size] = level.var_1765[var_04]; + } + + level.var_1765 = var_02; + for(var_04 = 0;var_04 < var_03.size;var_04++) + { + var_03[var_04] delete(); + } +} + +//Function Number: 45 +dump_models() +{ +} + +//Function Number: 46 +draw_axis(param_00,param_01) +{ + var_02 = 32; + var_03 = var_02 * anglestoforward(param_01); + var_04 = var_02 * anglestoright(param_01); + var_05 = var_02 * anglestoup(param_01); +} + +//Function Number: 47 +_newhudelem() +{ + if(!isdefined(level.var_16D3)) + { + level.var_16D3 = []; + } + + var_00 = newhudelem(); + level.var_16D3[level.var_16D3.size] = var_00; + return var_00; +} + +//Function Number: 48 +_settext(param_00) +{ + self.realtext = param_00; + self settext("_"); + thread _clearalltextafterhudelem(); + var_01 = 0; + foreach(var_03 in level.var_16D3) + { + if(isdefined(var_03.realtext)) + { + var_01 = var_01 + var_03.realtext.size; + var_03 settext(var_03.realtext); + } + } +} + +//Function Number: 49 +controler_hud_add(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = 520; + if(is_mp()) + { + var_05 = 630; + } + + var_06 = 120; + var_07 = 18; + var_08 = 0.8; + var_09 = 20; + var_0A = 1.4; + if(!isdefined(param_02)) + { + param_02 = ""; + } + + if(!isdefined(level.hud_controler) || !isdefined(level.hud_controler[param_00])) + { + level.hud_controler[param_00] = _newhudelem(); + var_0B = _newhudelem(); + } + else + { + var_0B = level.hud_controler[param_01].var_16D0; + } + + level.hud_controler[param_00].location = 0; + level.hud_controler[param_00].alignx = "right"; + level.hud_controler[param_00].aligny = "middle"; + level.hud_controler[param_00].foreground = 1; + level.hud_controler[param_00].fontscale = 1.5; + level.hud_controler[param_00].sort = 20; + level.hud_controler[param_00].alpha = var_08; + level.hud_controler[param_00].x = var_05 + var_09; + level.hud_controler[param_00].y = var_06 + param_01 * var_07; + level.hud_controler[param_00] _settext(param_02); + level.hud_controler[param_00].base_button_text = param_02; + var_0B.location = 0; + var_0B.alignx = "left"; + var_0B.aligny = "middle"; + var_0B.foreground = 1; + var_0B.fontscale = var_0A; + var_0B.sort = 20; + var_0B.alpha = var_08; + var_0B.x = var_05 + var_09; + var_0B.y = var_06 + param_01 * var_07; + if(isdefined(param_04)) + { + var_0B setvalue(param_04); + } + + if(isdefined(param_03)) + { + var_0B _settext(param_03); + } + + level.hud_controler[param_00].var_16D0 = var_0B; +} + +//Function Number: 50 +controler_hud_update_text(param_00,param_01) +{ + if(is_mp()) + { + level.hud_controler[param_00] _settext(level.hud_controler[param_00].base_button_text + param_01); + level.hud_controler[param_00].var_16D0 _settext(""); + return; + } + + level.hud_controler[param_00].var_16D0 _settext(param_01); +} + +//Function Number: 51 +controler_hud_update_button(param_00,param_01) +{ + level.hud_controler[param_00] _settext(param_01); +} + +//Function Number: 52 +_clearalltextafterhudelem() +{ + if(level._clearalltextafterhudelem) + { + return; + } + + level._clearalltextafterhudelem = 1; + self clearalltextafterhudelem(); + wait 0.05; + level._clearalltextafterhudelem = 0; +} + +//Function Number: 53 +is_mp() +{ + return issubstr(level.script,"mp_"); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/common_scripts/_pipes.gsc b/MW3/Xbox/SP/common_scripts/_pipes.gsc new file mode 100644 index 0000000..50a613c --- /dev/null +++ b/MW3/Xbox/SP/common_scripts/_pipes.gsc @@ -0,0 +1,290 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: common_scripts\_pipes.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 12 + * Decompile Time: 243 ms + * Timestamp: 10/27/2023 2:35:17 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + level.var_18A1 = 25; + var_00 = getentarray("pipe_shootable","targetname"); + if(!var_00.size) + { + return; + } + + level.var_18A2 = spawnstruct(); + level.var_18A2.num_pipe_fx = 0; + var_00 thread precachefx(); + var_00 thread methodsinit(); + waittillframeend; + common_scripts\utility::array_thread(var_00,::pipesetup); +} + +//Function Number: 2 +pipesetup() +{ + self setcandamage(1); + self setcanradiusdamage(0); + self.var_18A5 = []; + var_00 = undefined; + if(isdefined(self.target)) + { + var_00 = common_scripts\utility::getstruct(self.target,"targetname"); + self.a = var_00.origin; + var_01 = anglestoforward(var_00.angles); + var_01 = var_01 * 128; + self.b = self.a + var_01; + } + else + { + var_01 = anglestoforward(self.angles); + var_02 = var_01 * 64; + self.a = self.origin + var_02; + var_02 = var_01 * -64; + self.b = self.origin + var_02; + } + + thread pipe_wait_loop(); +} + +//Function Number: 3 +pipe_wait_loop() +{ + var_00 = (0,0,0); + var_01 = 0; + var_02 = 4; + for(;;) + { + self waittill("damage",var_03,var_04,var_05,var_00,var_06); + if(var_01) + { + if(randomint(100) <= 33) + { + continue; + } + } + + var_01 = 1; + var_07 = pipe_logic(var_05,var_00,var_06,var_04); + if(var_07) + { + var_02--; + } + + if(var_02 <= 0) + { + break; + } + } + + self setcandamage(0); +} + +//Function Number: 4 +pipe_logic(param_00,param_01,param_02,param_03) +{ + if(level.var_18A2.num_pipe_fx > 8) + { + return 0; + } + + if(!isdefined(level.var_18A2._pipe_methods[param_02])) + { + param_01 = pipe_calc_nofx(param_01,param_02); + } + else + { + param_01 = self [[ level.var_18A2._pipe_methods[param_02] ]](param_01,param_02); + } + + if(!isdefined(param_01)) + { + return 0; + } + + if(isdefined(param_03.classname) && param_03.classname == "worldspawn") + { + return 0; + } + + foreach(var_05 in self.var_18A5) + { + if(distancesquared(param_01,var_05.origin) < 25) + { + return 0; + } + } + + var_07 = vectorfromlinetopoint(self.a,self.b,param_01); + thread pipefx(param_01,var_07,param_03); + return 1; +} + +//Function Number: 5 +pipefx(param_00,param_01,param_02) +{ + var_03 = level.var_18A2.fx_time[self.script_noteworthy]; + var_04 = int(level.var_18A1 / var_03); + var_05 = level.var_18A2._sound[self.script_noteworthy + "_hit"]; + var_06 = level.var_18A2._sound[self.script_noteworthy + "_loop"]; + var_07 = level.var_18A2._sound[self.script_noteworthy + "_end"]; + var_08 = spawn("script_origin",param_00); + var_08 hide(); + var_08 playsound(var_05); + var_08 playloopsound(var_06); + self.var_18A5[self.var_18A5.size] = var_08; + level.var_18A2.num_pipe_fx++; + if(common_scripts\utility::issp() || self.script_noteworthy != "steam") + { + thread pipe_damage(param_00,param_01,param_02,var_08); + } + + playfx(level.var_18A2._effect[self.script_noteworthy],param_00,param_01); + wait var_03; + var_04--; + while(level.var_18A2.num_pipe_fx <= 8 && var_04 > 0) + { + playfx(level.var_18A2._effect[self.script_noteworthy],param_00,param_01); + wait var_03; + var_04--; + } + + var_08 playsound(var_07); + wait 0.5; + var_08 stoploopsound(var_06); + var_08 delete(); + self.var_18A5 = common_scripts\utility::array_removeundefined(self.var_18A5); + level.var_18A2.num_pipe_fx--; +} + +//Function Number: 6 +pipe_damage(param_00,param_01,param_02,param_03) +{ + if(!func_18AF()) + { + return; + } + + param_03 endon("death"); + var_04 = param_03.origin + vectornormalize(param_01) * 40; + var_05 = level.var_18A2._dmg[self.script_noteworthy]; + for(;;) + { + if(!isdefined(self.damageowner)) + { + self radiusdamage(var_04,36,var_05,var_05 * 0.75,undefined,"MOD_TRIGGER_HURT"); + } + else + { + self radiusdamage(var_04,36,var_05,var_05 * 0.75,param_02,"MOD_TRIGGER_HURT"); + } + + wait 0.4; + } +} + +//Function Number: 7 +func_18AF() +{ + if(!common_scripts\utility::issp()) + { + return 0; + } + + if(!isdefined(level.var_18B0)) + { + return 1; + } + + return level.var_18B0; +} + +//Function Number: 8 +methodsinit() +{ + level.var_18A2._pipe_methods = []; + level.var_18A2._pipe_methods["MOD_UNKNOWN"] = ::func_18B3; + level.var_18A2._pipe_methods["MOD_PISTOL_BULLET"] = ::pipe_calc_ballistic; + level.var_18A2._pipe_methods["MOD_RIFLE_BULLET"] = ::pipe_calc_ballistic; + level.var_18A2._pipe_methods["MOD_GRENADE"] = ::func_18B3; + level.var_18A2._pipe_methods["MOD_GRENADE_SPLASH"] = ::func_18B3; + level.var_18A2._pipe_methods["MOD_PROJECTILE"] = ::func_18B3; + level.var_18A2._pipe_methods["MOD_PROJECTILE_SPLASH"] = ::func_18B3; + level.var_18A2._pipe_methods["MOD_TRIGGER_HURT"] = ::func_18B3; + level.var_18A2._pipe_methods["MOD_EXPLOSIVE"] = ::func_18B3; + level.var_18A2._pipe_methods["MOD_EXPLOSIVE_BULLET"] = ::func_18B3; +} + +//Function Number: 9 +pipe_calc_ballistic(param_00,param_01) +{ + return param_00; +} + +//Function Number: 10 +func_18B3(param_00,param_01) +{ + var_02 = vectornormalize(vectorfromlinetopoint(self.a,self.b,param_00)); + param_00 = pointonsegmentnearesttopoint(self.a,self.b,param_00); + return param_00 + var_02 * 4; +} + +//Function Number: 11 +pipe_calc_nofx(param_00,param_01) +{ + return undefined; +} + +//Function Number: 12 +precachefx() +{ + var_00 = 0; + var_01 = 0; + foreach(var_03 in self) + { + if(var_03.script_noteworthy == "water") + { + var_03.script_noteworthy = "steam"; + } + + if(var_03.script_noteworthy == "steam") + { + var_03 willneverchange(); + var_00 = 1; + continue; + } + + if(var_03.script_noteworthy == "fire") + { + var_03 willneverchange(); + var_01 = 1; + continue; + } + } + + if(var_00) + { + level.var_18A2._effect["steam"] = loadfx("impacts/pipe_steam"); + level.var_18A2._sound["steam_hit"] = "mtl_steam_pipe_hit"; + level.var_18A2._sound["steam_loop"] = "mtl_steam_pipe_hiss_loop"; + level.var_18A2._sound["steam_end"] = "mtl_steam_pipe_hiss_loop_end"; + level.var_18A2.fx_time["steam"] = 3; + level.var_18A2._dmg["steam"] = 5; + } + + if(var_01) + { + level.var_18A2._effect["fire"] = loadfx("impacts/pipe_fire"); + level.var_18A2._sound["fire_hit"] = "mtl_gas_pipe_hit"; + level.var_18A2._sound["fire_loop"] = "mtl_gas_pipe_flame_loop"; + level.var_18A2._sound["fire_end"] = "mtl_gas_pipe_flame_end"; + level.var_18A2.fx_time["fire"] = 3; + level.var_18A2._dmg["fire"] = 5; + } +} \ No newline at end of file diff --git a/MW3/Xbox/SP/common_scripts/utility.gsc b/MW3/Xbox/SP/common_scripts/utility.gsc new file mode 100644 index 0000000..f0d76e5 --- /dev/null +++ b/MW3/Xbox/SP/common_scripts/utility.gsc @@ -0,0 +1,3053 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: common_scripts\utility.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 173 + * Decompile Time: 2902 ms + * Timestamp: 10/27/2023 2:35:13 AM +*******************************************************************/ + +//Function Number: 1 +scriptprintln(param_00,param_01) +{ +} + +//Function Number: 2 +debugprintln(param_00,param_01) +{ +} + +//Function Number: 3 +draw_debug_line(param_00,param_01,param_02) +{ + for(var_03 = 0;var_03 < param_02 * 20;var_03++) + { + wait 0.05; + } +} + +//Function Number: 4 +waittillend(param_00) +{ + self waittillmatch("end",param_00); +} + +//Function Number: 5 +noself_func(param_00,param_01,param_02,param_03,param_04) +{ + if(!isdefined(level.func)) + { + return; + } + + if(!isdefined(level.func[param_00])) + { + return; + } + + if(!isdefined(param_01)) + { + [[ level.func[param_00] ]](); + return; + } + + if(!isdefined(param_02)) + { + [[ level.func[param_00] ]](param_01); + return; + } + + if(!isdefined(param_03)) + { + [[ level.func[param_00] ]](param_01,param_02); + return; + } + + if(!isdefined(param_04)) + { + [[ level.func[param_00] ]](param_01,param_02,param_03); + return; + } + + [[ level.func[param_00] ]](param_01,param_02,param_03,param_04); +} + +//Function Number: 6 +self_func(param_00,param_01,param_02,param_03,param_04) +{ + if(!isdefined(level.func[param_00])) + { + return; + } + + if(!isdefined(param_01)) + { + self [[ level.func[param_00] ]](); + return; + } + + if(!isdefined(param_02)) + { + self [[ level.func[param_00] ]](param_01); + return; + } + + if(!isdefined(param_03)) + { + self [[ level.func[param_00] ]](param_01,param_02); + return; + } + + if(!isdefined(param_04)) + { + self [[ level.func[param_00] ]](param_01,param_02,param_03); + return; + } + + self [[ level.func[param_00] ]](param_01,param_02,param_03,param_04); +} + +//Function Number: 7 +randomvector(param_00) +{ + return (randomfloat(param_00) - param_00 * 0.5,randomfloat(param_00) - param_00 * 0.5,randomfloat(param_00) - param_00 * 0.5); +} + +//Function Number: 8 +randomvectorrange(param_00,param_01) +{ + var_02 = randomfloatrange(param_00,param_01); + if(randomint(2) == 0) + { + var_02 = var_02 * -1; + } + + var_03 = randomfloatrange(param_00,param_01); + if(randomint(2) == 0) + { + var_03 = var_03 * -1; + } + + var_04 = randomfloatrange(param_00,param_01); + if(randomint(2) == 0) + { + var_04 = var_04 * -1; + } + + return (var_02,var_03,var_04); +} + +//Function Number: 9 +angle_dif(param_00,param_01) +{ + if(param_00 == param_01) + { + return 0; + } + + while(param_01 > 360) + { + param_01 = param_01 - 360; + } + + while(param_01 < 0) + { + param_01 = param_01 + 360; + } + + while(param_00 > 360) + { + param_00 = param_00 - 360; + } + + while(param_00 < 0) + { + param_00 = param_00 + 360; + } + + var_02 = undefined; + var_03 = undefined; + if(param_01 > 180) + { + var_03 = 360 - param_01; + } + else + { + var_03 = param_01; + } + + if(param_00 > 180) + { + var_02 = 360 - param_00; + } + else + { + var_02 = param_00; + } + + var_04 = var_03 + var_02; + var_05 = 0; + if(param_01 > param_00) + { + var_05 = param_01 - param_00; + } + else + { + var_05 = param_00 - param_01; + } + + if(var_05 < var_04) + { + return var_05; + } + + return var_04; +} + +//Function Number: 10 +sign(param_00) +{ + if(param_00 >= 0) + { + return 1; + } + + return -1; +} + +//Function Number: 11 +track(param_00) +{ + if(isdefined(self.current_target)) + { + if(param_00 == self.current_target) + { + return; + } + } + + self.current_target = param_00; +} + +//Function Number: 12 +get_enemy_team(param_00) +{ + var_01 = []; + return var_41[var_01]; +} + +//Function Number: 13 +clear_exception(param_00) +{ + self.exception[param_00] = level.defaultexception; +} + +//Function Number: 14 +set_exception(param_00,param_01) +{ + self.exception[param_00] = param_01; +} + +//Function Number: 15 +set_all_exceptions(param_00) +{ + var_01 = getarraykeys(self.exception); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + self.exception[var_01[var_02]] = param_00; + } +} + +//Function Number: 16 +cointoss() +{ + return randomint(100) >= 50; +} + +//Function Number: 17 +choose_from_weighted_array(param_00,param_01) +{ + var_02 = randomint(param_01[param_01.size - 1] + 1); + for(var_03 = 0;var_03 < param_01.size;var_03++) + { + if(var_02 <= param_01[var_03]) + { + return param_00[var_03]; + } + } +} + +//Function Number: 18 +get_cumulative_weights(param_00) +{ + var_01 = []; + var_02 = 0; + for(var_03 = 0;var_03 < param_00.size;var_03++) + { + var_02 = var_02 + param_00[var_03]; + var_01[var_03] = var_02; + } + + return var_01; +} + +//Function Number: 19 +waittill_string(param_00,param_01) +{ + if(param_00 != "death") + { + self endon("death"); + } + + param_01 endon("die"); + self waittill(param_00); + param_01 notify("returned",param_00); +} + +//Function Number: 20 +waittill_multiple(param_00,param_01,param_02,param_03,param_04) +{ + self endon("death"); + var_05 = spawnstruct(); + var_05.threads = 0; + if(isdefined(param_00)) + { + thread waittill_string(param_00,var_05); + var_05.threads++; + } + + if(isdefined(param_01)) + { + thread waittill_string(param_01,var_05); + var_05.threads++; + } + + if(isdefined(param_02)) + { + thread waittill_string(param_02,var_05); + var_05.threads++; + } + + if(isdefined(param_03)) + { + thread waittill_string(param_03,var_05); + var_05.threads++; + } + + if(isdefined(param_04)) + { + thread waittill_string(param_04,var_05); + var_05.threads++; + } + + while(var_05.threads) + { + var_05 waittill("returned"); + var_05.threads--; + } + + var_05 notify("die"); +} + +//Function Number: 21 +waittill_multiple_ents(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07) +{ + self endon("death"); + var_08 = spawnstruct(); + var_08.threads = 0; + if(isdefined(param_00)) + { + param_00 thread waittill_string(param_01,var_08); + var_08.threads++; + } + + if(isdefined(param_02)) + { + param_02 thread waittill_string(param_03,var_08); + var_08.threads++; + } + + if(isdefined(param_04)) + { + param_04 thread waittill_string(param_05,var_08); + var_08.threads++; + } + + if(isdefined(param_06)) + { + param_06 thread waittill_string(param_07,var_08); + var_08.threads++; + } + + while(var_08.threads) + { + var_08 waittill("returned"); + var_08.threads--; + } + + var_08 notify("die"); +} + +//Function Number: 22 +waittill_any_return(param_00,param_01,param_02,param_03,param_04) +{ + if((!isdefined(param_00) || param_00 != "death") && !isdefined(param_01) || param_01 != "death" && !isdefined(param_02) || param_02 != "death" && !isdefined(param_03) || param_03 != "death" && !isdefined(param_04) || param_04 != "death") + { + self endon("death"); + } + + var_05 = spawnstruct(); + if(isdefined(param_00)) + { + thread waittill_string(param_00,var_05); + } + + if(isdefined(param_01)) + { + thread waittill_string(param_01,var_05); + } + + if(isdefined(param_02)) + { + thread waittill_string(param_02,var_05); + } + + if(isdefined(param_03)) + { + thread waittill_string(param_03,var_05); + } + + if(isdefined(param_04)) + { + thread waittill_string(param_04,var_05); + } + + var_05 waittill("returned",var_06); + var_05 notify("die"); + return var_06; +} + +//Function Number: 23 +waittill_any_timeout(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if((!isdefined(param_01) || param_01 != "death") && !isdefined(param_02) || param_02 != "death" && !isdefined(param_03) || param_03 != "death" && !isdefined(param_04) || param_04 != "death" && !isdefined(param_05) || param_05 != "death") + { + self endon("death"); + } + + var_06 = spawnstruct(); + if(isdefined(param_01)) + { + thread waittill_string(param_01,var_06); + } + + if(isdefined(param_02)) + { + thread waittill_string(param_02,var_06); + } + + if(isdefined(param_03)) + { + thread waittill_string(param_03,var_06); + } + + if(isdefined(param_04)) + { + thread waittill_string(param_04,var_06); + } + + if(isdefined(param_05)) + { + thread waittill_string(param_05,var_06); + } + + var_06 thread _timeout(param_00); + var_06 waittill("returned",var_07); + var_06 notify("die"); + return var_07; +} + +//Function Number: 24 +_timeout(param_00) +{ + self endon("die"); + wait param_00; + self notify("returned","timeout"); +} + +//Function Number: 25 +waittill_any(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07) +{ + if(isdefined(param_01)) + { + self endon(param_01); + } + + if(isdefined(param_02)) + { + self endon(param_02); + } + + if(isdefined(param_03)) + { + self endon(param_03); + } + + if(isdefined(param_04)) + { + self endon(param_04); + } + + if(isdefined(param_05)) + { + self endon(param_05); + } + + if(isdefined(param_06)) + { + self endon(param_06); + } + + if(isdefined(param_07)) + { + self endon(param_07); + } + + self waittill(param_00); +} + +//Function Number: 26 +waittill_any_ents(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,param_0D) +{ + if(isdefined(param_02) && isdefined(param_03)) + { + param_02 endon(param_03); + } + + if(isdefined(param_04) && isdefined(param_05)) + { + param_04 endon(param_05); + } + + if(isdefined(param_06) && isdefined(param_07)) + { + param_06 endon(param_07); + } + + if(isdefined(param_08) && isdefined(param_09)) + { + param_08 endon(param_09); + } + + if(isdefined(param_0A) && isdefined(param_0B)) + { + param_0A endon(param_0B); + } + + if(isdefined(param_0C) && isdefined(param_0D)) + { + param_0C endon(param_0D); + } + + param_00 waittill(param_01); +} + +//Function Number: 27 +isflashed() +{ + if(!isdefined(self.flashendtime)) + { + return 0; + } + + return gettime() < self.flashendtime; +} + +//Function Number: 28 +flag_exist(param_00) +{ + return isdefined(level.flag[param_00]); +} + +//Function Number: 29 +flag(param_00) +{ + return level.flag[param_00]; +} + +//Function Number: 30 +init_flags() +{ + level.flag = []; + level.flags_lock = []; + level.generic_index = 0; + if(!isdefined(level.sp_stat_tracking_func)) + { + level.sp_stat_tracking_func = ::empty_init_func; + } + + level.flag_struct = spawnstruct(); + level.flag_struct assign_unique_id(); +} + +//Function Number: 31 +flag_init(param_00) +{ + if(!isdefined(level.flag)) + { + init_flags(); + } + + level.flag[param_00] = 0; + if(!isdefined(level.trigger_flags)) + { + init_trigger_flags(); + level.trigger_flags[param_00] = []; + } + else if(!isdefined(level.trigger_flags[param_00])) + { + level.trigger_flags[param_00] = []; + } + + if(issuffix(param_00,"aa_")) + { + thread [[ level.sp_stat_tracking_func ]](param_00); + } +} + +//Function Number: 32 +empty_init_func(param_00) +{ +} + +//Function Number: 33 +issuffix(param_00,param_01) +{ + if(param_01.size > param_00.size) + { + return 0; + } + + for(var_02 = 0;var_02 < param_01.size;var_02++) + { + if(param_00[var_02] != param_01[var_02]) + { + return 0; + } + } + + return 1; +} + +//Function Number: 34 +flag_set(param_00,param_01) +{ + level.flag[param_00] = 1; + set_trigger_flag_permissions(param_00); + if(isdefined(param_01)) + { + level notify(param_00,param_01); + return; + } + + level notify(param_00); +} + +//Function Number: 35 +assign_unique_id() +{ + self.unique_id = "generic" + level.generic_index; + level.generic_index++; +} + +//Function Number: 36 +flag_wait(param_00,param_01) +{ + var_02 = undefined; + while(!flag(param_00)) + { + var_02 = undefined; + level waittill(param_00,var_02); + if(isdefined(param_01) && flag(param_00,param_01)) + { + break; + } + } + + if(isdefined(var_02)) + { + return var_02; + } +} + +//Function Number: 37 +flag_clear(param_00) +{ + if(!flag(param_00)) + { + return; + } + + level.flag[param_00] = 0; + set_trigger_flag_permissions(param_00); + level notify(param_00); +} + +//Function Number: 38 +flag_waitopen(param_00) +{ + while(flag(param_00)) + { + level waittill(param_00); + } +} + +//Function Number: 39 +waittill_either(param_00,param_01) +{ + self endon(param_00); + self waittill(param_01); +} + +//Function Number: 40 +array_thread(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A) +{ + if(!isdefined(param_02)) + { + foreach(var_0C in param_00) + { + var_0C thread [[ param_01 ]](); + } + + return; + } + + if(!isdefined(param_06)) + { + foreach(var_0E in param_03) + { + var_0E thread [[ param_03 ]](param_04); + } + + return; + } + + if(!isdefined(param_09)) + { + foreach(var_10 in param_05) + { + var_10 thread [[ param_05 ]](param_06,param_07); + } + + return; + } + + if(!isdefined(var_0C)) + { + foreach(var_12 in param_07) + { + var_12 thread [[ param_07 ]](param_08,param_09,param_0A); + } + + return; + } + + if(!isdefined(var_0F)) + { + foreach(var_14 in param_09) + { + var_14 thread [[ param_09 ]](param_0A,var_0B,var_0C,var_0D); + } + + return; + } + + if(!isdefined(var_12)) + { + foreach(var_16 in var_0B) + { + var_16 thread [[ var_0B ]](var_0C,var_0D,var_0E,var_0F,var_10); + } + + return; + } + + if(!isdefined(var_15)) + { + foreach(var_18 in var_0D) + { + var_18 thread [[ var_0D ]](var_0E,var_0F,var_10,var_11,var_12,var_13); + } + + return; + } + + if(!isdefined(var_18)) + { + foreach(var_1A in var_0F) + { + var_1A thread [[ var_0F ]](var_10,var_11,var_12,var_13,var_14,var_15,var_16); + } + + return; + } + + if(!isdefined(var_1B)) + { + foreach(var_1C in var_11) + { + var_1C thread [[ var_11 ]](var_12,var_13,var_14,var_15,var_16,var_17,var_18,var_19); + } + + return; + } + + foreach(var_1E in var_13) + { + var_1E thread [[ var_13 ]](var_14,var_15,var_16,var_17,var_18,var_19,var_1A,var_1B,var_1C); + } +} + +//Function Number: 41 +array_call(param_00,param_01,param_02,param_03,param_04) +{ + if(isdefined(param_04)) + { + foreach(var_06 in param_00) + { + var_06 [[ param_01 ]](param_02,param_03,param_04); + } + + return; + } + + if(isdefined(var_06)) + { + foreach(var_08 in param_03) + { + var_08 [[ param_03 ]](param_04,var_05); + } + + return; + } + + if(isdefined(var_07)) + { + foreach(var_0A in var_05) + { + var_0A [[ var_05 ]](var_06); + } + + return; + } + + foreach(var_0C in var_07) + { + var_0C [[ var_07 ]](); + } +} + +//Function Number: 42 +array_thread4(param_00,param_01,param_02,param_03,param_04,param_05) +{ + array_thread(param_00,param_01,param_02,param_03,param_04,param_05); +} + +//Function Number: 43 +array_thread5(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + array_thread(param_00,param_01,param_02,param_03,param_04,param_05,param_06); +} + +//Function Number: 44 +trigger_on(param_00,param_01) +{ + if(isdefined(param_00) && isdefined(param_01)) + { + var_02 = getentarray(param_00,param_01); + array_thread(var_02,::trigger_on_proc); + return; + } + + trigger_on_proc(); +} + +//Function Number: 45 +trigger_on_proc() +{ + if(isdefined(self.realorigin)) + { + self.origin = self.realorigin; + } + + self.trigger_off = undefined; +} + +//Function Number: 46 +trigger_off(param_00,param_01) +{ + if(isdefined(param_00) && isdefined(param_01)) + { + var_02 = getentarray(param_00,param_01); + array_thread(var_02,::trigger_off_proc); + return; + } + + trigger_off_proc(); +} + +//Function Number: 47 +trigger_off_proc() +{ + if(!isdefined(self.realorigin)) + { + self.realorigin = self.origin; + } + + if(self.origin == self.realorigin) + { + self.origin = self.origin + (0,0,-10000); + } + + self.trigger_off = 1; +} + +//Function Number: 48 +set_trigger_flag_permissions(param_00) +{ + if(!isdefined(level.trigger_flags)) + { + return; + } + + level.trigger_flags[param_00] = array_removeundefined(level.trigger_flags[param_00]); + array_thread(level.trigger_flags[param_00],::update_trigger_based_on_flags); +} + +//Function Number: 49 +update_trigger_based_on_flags() +{ + var_00 = 1; + if(isdefined(self.script_flag_true)) + { + var_00 = 0; + var_01 = create_flags_and_return_tokens(self.script_flag_true); + foreach(var_03 in var_01) + { + if(flag(var_03)) + { + var_00 = 1; + break; + } + } + } + + var_05 = 1; + if(isdefined(self.script_flag_false)) + { + var_01 = create_flags_and_return_tokens(self.script_flag_false); + foreach(var_03 in var_01) + { + if(flag(var_03)) + { + var_05 = 0; + break; + } + } + } + + [[ level.trigger_func[var_00 && var_05] ]](); +} + +//Function Number: 50 +create_flags_and_return_tokens(param_00) +{ + var_01 = strtok(param_00," "); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + if(!isdefined(level.flag[var_01[var_02]])) + { + flag_init(var_01[var_02]); + } + } + + return var_01; +} + +//Function Number: 51 +init_trigger_flags() +{ + level.trigger_flags = []; + level.trigger_func[1] = ::trigger_on; + level.trigger_func[0] = ::trigger_off; +} + +//Function Number: 52 +getstruct(param_00,param_01) +{ + var_02 = level.struct_class_names[param_01][param_00]; + if(!isdefined(var_02)) + { + return undefined; + } + + if(var_02.size > 1) + { + return undefined; + } + + return var_02[0]; +} + +//Function Number: 53 +getstructarray(param_00,param_01) +{ + var_02 = level.struct_class_names[param_01][param_00]; + if(!isdefined(var_02)) + { + return []; + } + + return var_02; +} + +//Function Number: 54 +struct_class_init() +{ + level.struct_class_names = []; + level.struct_class_names["target"] = []; + level.struct_class_names["targetname"] = []; + level.struct_class_names["script_noteworthy"] = []; + level.struct_class_names["script_linkname"] = []; + foreach(var_01 in level.struct) + { + if(isdefined(var_01.targetname)) + { + if(!isdefined(level.struct_class_names["targetname"][var_01.targetname])) + { + level.struct_class_names["targetname"][var_01.targetname] = []; + } + + var_02 = level.struct_class_names["targetname"][var_01.targetname].size; + level.struct_class_names["targetname"][var_01.targetname][var_02] = var_01; + } + + if(isdefined(var_01.target)) + { + if(!isdefined(level.struct_class_names["target"][var_01.target])) + { + level.struct_class_names["target"][var_01.target] = []; + } + + var_02 = level.struct_class_names["target"][var_01.target].size; + level.struct_class_names["target"][var_01.target][var_02] = var_01; + } + + if(isdefined(var_01.script_noteworthy)) + { + if(!isdefined(level.struct_class_names["script_noteworthy"][var_01.script_noteworthy])) + { + level.struct_class_names["script_noteworthy"][var_01.script_noteworthy] = []; + } + + var_02 = level.struct_class_names["script_noteworthy"][var_01.script_noteworthy].size; + level.struct_class_names["script_noteworthy"][var_01.script_noteworthy][var_02] = var_01; + } + + if(isdefined(var_01.script_linkname)) + { + level.struct_class_names["script_linkname"][var_01.script_linkname][0] = var_01; + } + } +} + +//Function Number: 55 +fileprint_start(param_00) +{ +} + +//Function Number: 56 +fileprint_map_start() +{ +} + +//Function Number: 57 +fileprint_map_header(param_00) +{ + if(!isdefined(param_00)) + { + param_00 = 0; + } +} + +//Function Number: 58 +fileprint_map_keypairprint(param_00,param_01) +{ +} + +//Function Number: 59 +fileprint_map_entity_start() +{ +} + +//Function Number: 60 +fileprint_map_entity_end() +{ +} + +//Function Number: 61 +fileprint_radiant_vec(param_00) +{ +} + +//Function Number: 62 +array_remove(param_00,param_01) +{ + var_02 = []; + foreach(var_04 in param_00) + { + if(var_04 != param_01) + { + var_02[var_02.size] = var_04; + } + } + + return var_02; +} + +//Function Number: 63 +array_remove_array(param_00,param_01) +{ + foreach(var_03 in param_01) + { + param_00 = array_remove(param_00,var_03); + } + + return param_00; +} + +//Function Number: 64 +array_removeundefined(param_00) +{ + var_01 = []; + foreach(var_03 in param_00) + { + if(!isdefined(var_03)) + { + continue; + } + + var_01[var_01.size] = var_03; + } + + return var_01; +} + +//Function Number: 65 +array_levelthread(param_00,param_01,param_02,param_03,param_04) +{ + if(isdefined(param_04)) + { + foreach(var_06 in param_00) + { + thread [[ param_01 ]](var_06,param_02,param_03,param_04); + } + + return; + } + + if(isdefined(var_06)) + { + foreach(var_08 in param_03) + { + thread [[ param_03 ]](var_08,param_04,var_05); + } + + return; + } + + if(isdefined(var_07)) + { + foreach(var_0A in var_05) + { + thread [[ var_05 ]](var_0A,var_06); + } + + return; + } + + foreach(var_0C in var_07) + { + thread [[ var_07 ]](var_0C); + } +} + +//Function Number: 66 +array_levelcall(param_00,param_01,param_02,param_03,param_04) +{ + if(isdefined(param_04)) + { + foreach(var_06 in param_00) + { + [[ param_01 ]](var_06,param_02,param_03,param_04); + } + + return; + } + + if(isdefined(var_06)) + { + foreach(var_08 in param_03) + { + [[ param_03 ]](var_08,param_04,var_05); + } + + return; + } + + if(isdefined(var_07)) + { + foreach(var_0A in var_05) + { + [[ var_05 ]](var_0A,var_06); + } + + return; + } + + foreach(var_0C in var_07) + { + [[ var_07 ]](var_0C); + } +} + +//Function Number: 67 +add_to_array(param_00,param_01) +{ + if(!isdefined(param_01)) + { + return param_00; + } + + if(!isdefined(param_00)) + { + param_00[0] = param_01; + } + else + { + param_00[param_00.size] = param_01; + } + + return param_00; +} + +//Function Number: 68 +flag_assert(param_00) +{ +} + +//Function Number: 69 +func_051A(param_00,param_01) +{ + for(;;) + { + if(flag(param_00)) + { + return; + } + + if(flag(param_01)) + { + return; + } + + level waittill_either(param_00,param_01); + } +} + +//Function Number: 70 +flag_wait_either_return(param_00,param_01) +{ + for(;;) + { + if(flag(param_00)) + { + return param_00; + } + + if(flag(param_01)) + { + return param_01; + } + + var_02 = level waittill_any_return(param_00,param_01); + return var_02; + } +} + +//Function Number: 71 +flag_wait_any(param_00,param_01,param_02,param_03,param_04,param_05) +{ + var_06 = []; + if(isdefined(param_05)) + { + } + else if(isdefined(param_05)) + { + } + else if(isdefined(param_04)) + { + } + else if(isdefined(param_03)) + { + } + else if(isdefined(param_02)) + { + func_051A(param_01,param_02); + return; + } + else + { + return; + } + + for(;;) + { + var_07 = 0; + while(var_07 < var_41.size) + { + if(flag(var_41[var_07])) + { + return; + } + + var_07++ = var_41[var_41.size]; + } + + level waittill_any(param_01,param_02,param_03,param_04,param_05,var_06); + } +} + +//Function Number: 72 +flag_wait_any_return(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = []; + if(isdefined(param_04)) + { + } + else if(isdefined(param_04)) + { + } + else if(isdefined(param_03)) + { + } + else if(isdefined(param_02)) + { + var_06 = flag_wait_either_return(param_01,param_02); + return var_06; + } + else + { + return; + } + + for(;;) + { + var_07 = 0; + while(var_07 < var_06.size) + { + if(flag(var_06[var_07])) + { + return var_06[var_07]; + } + + var_07++ = var_41[var_41.size]; + } + + var_06 = level waittill_any_return(param_02,param_03,param_04,var_05,var_41); + return var_07; + } +} + +//Function Number: 73 +flag_wait_all(param_00,param_01,param_02,param_03) +{ + if(isdefined(param_00)) + { + flag_wait(param_00); + } + + if(isdefined(param_01)) + { + flag_wait(param_01); + } + + if(isdefined(param_02)) + { + flag_wait(param_02); + } + + if(isdefined(param_03)) + { + flag_wait(param_03); + } +} + +//Function Number: 74 +flag_wait_or_timeout(param_00,param_01) +{ + var_02 = param_01 * 1000; + var_03 = gettime(); + for(;;) + { + if(flag(param_00)) + { + break; + } + + if(gettime() >= var_03 + var_02) + { + break; + } + + var_04 = var_02 - gettime() - var_03; + var_05 = var_04 / 1000; + wait_for_flag_or_time_elapses(param_00,var_05); + } +} + +//Function Number: 75 +flag_waitopen_or_timeout(param_00,param_01) +{ + var_02 = gettime(); + for(;;) + { + if(!flag(param_00)) + { + break; + } + + if(gettime() >= var_02 + param_01 * 1000) + { + break; + } + + wait_for_flag_or_time_elapses(param_00,param_01); + } +} + +//Function Number: 76 +wait_for_flag_or_time_elapses(param_00,param_01) +{ + level endon(param_00); + wait param_01; +} + +//Function Number: 77 +delaycall(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09) +{ + thread delaycall_proc(param_01,param_00,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09); +} + +//Function Number: 78 +delaycall_proc(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09) +{ + if(issp()) + { + self endon("death"); + } + + wait param_01; + if(isdefined(param_09)) + { + self [[ param_00 ]](param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09); + return; + } + + if(isdefined(param_08)) + { + self [[ param_00 ]](param_02,param_03,param_04,param_05,param_06,param_07,param_08); + return; + } + + if(isdefined(param_07)) + { + self [[ param_00 ]](param_02,param_03,param_04,param_05,param_06,param_07); + return; + } + + if(isdefined(param_06)) + { + self [[ param_00 ]](param_02,param_03,param_04,param_05,param_06); + return; + } + + if(isdefined(param_05)) + { + self [[ param_00 ]](param_02,param_03,param_04,param_05); + return; + } + + if(isdefined(param_04)) + { + self [[ param_00 ]](param_02,param_03,param_04); + return; + } + + if(isdefined(param_03)) + { + self [[ param_00 ]](param_02,param_03); + return; + } + + if(isdefined(param_02)) + { + self [[ param_00 ]](param_02); + return; + } + + self [[ param_00 ]](); +} + +//Function Number: 79 +noself_delaycall(param_00,param_01,param_02,param_03,param_04,param_05) +{ + thread noself_delaycall_proc(param_01,param_00,param_02,param_03,param_04,param_05); +} + +//Function Number: 80 +noself_delaycall_proc(param_00,param_01,param_02,param_03,param_04,param_05) +{ + wait param_01; + if(isdefined(param_05)) + { + [[ param_00 ]](param_02,param_03,param_04,param_05); + return; + } + + if(isdefined(param_04)) + { + [[ param_00 ]](param_02,param_03,param_04); + return; + } + + if(isdefined(param_03)) + { + [[ param_00 ]](param_02,param_03); + return; + } + + if(isdefined(param_02)) + { + [[ param_00 ]](param_02); + return; + } + + [[ param_00 ]](); +} + +//Function Number: 81 +issp() +{ + if(!isdefined(level.issp)) + { + level.issp = !string_starts_with(getdvar("mapname"),"mp_"); + } + + return level.issp; +} + +//Function Number: 82 +issp_towerdefense() +{ + if(!isdefined(level.issp_towerdefense)) + { + level.issp_towerdefense = string_starts_with(getdvar("mapname"),"so_td_"); + } + + return level.issp_towerdefense; +} + +//Function Number: 83 +string_starts_with(param_00,param_01) +{ + if(param_00.size < param_01.size) + { + return 0; + } + + for(var_02 = 0;var_02 < param_01.size;var_02++) + { + if(tolower(param_00[var_02]) != tolower(param_01[var_02])) + { + return 0; + } + } + + return 1; +} + +//Function Number: 84 +plot_points(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = param_00[0]; + if(!isdefined(param_01)) + { + param_01 = 1; + } + + if(!isdefined(param_02)) + { + param_02 = 1; + } + + if(!isdefined(param_03)) + { + param_03 = 1; + } + + if(!isdefined(param_04)) + { + param_04 = 0.05; + } + + for(var_06 = 1;var_06 < param_00.size;var_06++) + { + thread draw_line_for_time(var_05,param_00[var_06],param_01,param_02,param_03,param_04); + var_05 = param_00[var_06]; + } +} + +//Function Number: 85 +draw_line_for_time(param_00,param_01,param_02,param_03,param_04,param_05) +{ + param_05 = gettime() + param_05 * 1000; + while(gettime() < param_05) + { + wait 0.05; + } +} + +//Function Number: 86 +array_combine(param_00,param_01) +{ + var_02 = []; + foreach(var_04 in param_00) + { + var_02[var_02.size] = var_04; + } + + foreach(var_04 in param_01) + { + var_02[var_02.size] = var_04; + } + + return var_02; +} + +//Function Number: 87 +flat_angle(param_00) +{ + var_01 = (0,param_00[1],0); + return var_01; +} + +//Function Number: 88 +flat_origin(param_00) +{ + var_01 = (param_00[0],param_00[1],0); + return var_01; +} + +//Function Number: 89 +draw_arrow_time(param_00,param_01,param_02,param_03) +{ + level endon("newpath"); + var_04 = []; + var_05 = vectortoangles(param_00 - param_01); + var_06 = anglestoright(var_05); + var_07 = anglestoforward(var_05); + var_08 = anglestoup(var_05); + var_09 = distance(param_00,param_01); + var_0A = []; + var_0B = 0.1; + var_0A[0] = param_00; + var_0A[1] = param_00 + var_06 * var_09 * var_0B + var_07 * var_09 * -0.1; + var_0A[2] = param_01; + var_0A[3] = param_00 + var_06 * var_09 * -1 * var_0B + var_07 * var_09 * -0.1; + var_0A[4] = param_00; + var_0A[5] = param_00 + var_08 * var_09 * var_0B + var_07 * var_09 * -0.1; + var_0A[6] = param_01; + var_0A[7] = param_00 + var_08 * var_09 * -1 * var_0B + var_07 * var_09 * -0.1; + var_0A[8] = param_00; + var_0C = param_02[0]; + var_0D = param_02[1]; + var_0E = param_02[2]; + plot_points(var_0A,var_0C,var_0D,var_0E,param_03); +} + +//Function Number: 90 +get_linked_ents() +{ + var_00 = []; + if(isdefined(self.script_linkto)) + { + var_01 = get_links(); + foreach(var_03 in var_01) + { + var_04 = getentarray(var_03,"script_linkname"); + if(var_04.size > 0) + { + var_00 = array_combine(var_00,var_04); + } + } + } + + return var_00; +} + +//Function Number: 91 +get_linked_vehicle_nodes() +{ + var_00 = []; + if(isdefined(self.script_linkto)) + { + var_01 = get_links(); + foreach(var_03 in var_01) + { + var_04 = getvehiclenodearray(var_03,"script_linkname"); + if(var_04.size > 0) + { + var_00 = array_combine(var_00,var_04); + } + } + } + + return var_00; +} + +//Function Number: 92 +get_linked_ent() +{ + var_00 = get_linked_ents(); + return var_00[0]; +} + +//Function Number: 93 +get_linked_vehicle_node() +{ + var_00 = get_linked_vehicle_nodes(); + return var_00[0]; +} + +//Function Number: 94 +get_links() +{ + return strtok(self.script_linkto," "); +} + +//Function Number: 95 +run_thread_on_targetname(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = getentarray(param_00,"targetname"); + array_thread(var_05,param_01,param_02,param_03,param_04); + var_05 = getstructarray(param_00,"targetname"); + array_thread(var_05,param_01,param_02,param_03,param_04); + var_05 = [[ level.getnodearrayfunction ]](param_00,"targetname"); + array_thread(var_05,param_01,param_02,param_03,param_04); + var_05 = getvehiclenodearray(param_00,"targetname"); + array_thread(var_05,param_01,param_02,param_03,param_04); +} + +//Function Number: 96 +run_thread_on_noteworthy(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = getentarray(param_00,"script_noteworthy"); + array_thread(var_05,param_01,param_02,param_03,param_04); + var_05 = getstructarray(param_00,"script_noteworthy"); + array_thread(var_05,param_01,param_02,param_03,param_04); + var_05 = [[ level.getnodearrayfunction ]](param_00,"script_noteworthy"); + array_thread(var_05,param_01,param_02,param_03,param_04); + var_05 = getvehiclenodearray(param_00,"script_noteworthy"); + array_thread(var_05,param_01,param_02,param_03,param_04); +} + +//Function Number: 97 +draw_arrow(param_00,param_01,param_02) +{ + level endon("newpath"); + var_03 = []; + var_04 = vectortoangles(param_00 - param_01); + var_05 = anglestoright(var_04); + var_06 = anglestoforward(var_04); + var_07 = distance(param_00,param_01); + var_08 = []; + var_09 = 0.05; + var_08[0] = param_00; + var_08[1] = param_00 + var_05 * var_07 * var_09 + var_06 * var_07 * -0.2; + var_08[2] = param_01; + var_08[3] = param_00 + var_05 * var_07 * -1 * var_09 + var_06 * var_07 * -0.2; + for(var_0A = 0;var_0A < 4;var_0A++) + { + var_0B = var_0A + 1; + if(var_0B >= 4) + { + var_0B = 0; + } + } +} + +//Function Number: 98 +func_0539(param_00) +{ + return level._effect[param_00]; +} + +//Function Number: 99 +fxexists(param_00) +{ + return isdefined(level._effect[param_00]); +} + +//Function Number: 100 +print_csv_asset(param_00,param_01) +{ + var_02 = param_01 + "," + param_00; + if(isdefined(level.csv_lines[var_02])) + { + return; + } + + level.csv_lines[var_02] = 1; +} + +//Function Number: 101 +fileprint_csv_start(param_00) +{ +} + +//Function Number: 102 +_loadfx(param_00) +{ + return loadfx(param_00); +} + +//Function Number: 103 +getlastweapon() +{ + return self.saved_lastweapon; +} + +//Function Number: 104 +playerunlimitedammothread() +{ +} + +//Function Number: 105 +isusabilityenabled() +{ + return !self.disabledusability; +} + +//Function Number: 106 +_disableusability() +{ + self.disabledusability++; + self disableusability(); +} + +//Function Number: 107 +_enableusability() +{ + self.disabledusability--; + if(!self.disabledusability) + { + self enableusability(); + } +} + +//Function Number: 108 +resetusability() +{ + self.disabledusability = 0; + self enableusability(); +} + +//Function Number: 109 +_disableweapon() +{ + self.disabledweapon++; + self disableweapons(); +} + +//Function Number: 110 +_enableweapon() +{ + self.disabledweapon--; + if(!self.disabledweapon) + { + self enableweapons(); + } +} + +//Function Number: 111 +isweaponenabled() +{ + return !self.disabledweapon; +} + +//Function Number: 112 +_disableweaponswitch() +{ + self.disabledweaponswitch++; + self disableweaponswitch(); +} + +//Function Number: 113 +_enableweaponswitch() +{ + self.disabledweaponswitch--; + if(!self.disabledweaponswitch) + { + self enableweaponswitch(); + } +} + +//Function Number: 114 +isweaponswitchenabled() +{ + return !self.disabledweaponswitch; +} + +//Function Number: 115 +_disableoffhandweapons() +{ + self.disabledoffhandweapons++; + self disableoffhandweapons(); +} + +//Function Number: 116 +_enableoffhandweapons() +{ + self.disabledoffhandweapons--; + if(!self.disabledoffhandweapons) + { + self enableoffhandweapons(); + } +} + +//Function Number: 117 +isoffhandweaponenabled() +{ + return !self.disabledoffhandweapons; +} + +//Function Number: 118 +random(param_00) +{ + var_01 = []; + foreach(var_03 in param_00) + { + var_01[var_01.size] = var_03; + } + + if(!var_01.size) + { + return undefined; + } + + return var_01[randomint(var_01.size)]; +} + +//Function Number: 119 +spawn_tag_origin() +{ + var_00 = spawn("script_model",(0,0,0)); + var_00 setmodel("tag_origin"); + var_00 hide(); + if(isdefined(self.origin)) + { + var_00.origin = self.origin; + } + + if(isdefined(self.angles)) + { + var_00.angles = self.angles; + } + + return var_00; +} + +//Function Number: 120 +waittill_notify_or_timeout(param_00,param_01) +{ + self endon(param_00); + wait param_01; +} + +//Function Number: 121 +fileprint_launcher_start_file() +{ + level.fileprintlauncher_linecount = 0; + level.fileprint_launcher = 1; + fileprint_launcher("GAMEPRINTSTARTFILE:"); +} + +//Function Number: 122 +fileprint_launcher(param_00) +{ + level.fileprintlauncher_linecount++; + if(level.fileprintlauncher_linecount > 200) + { + wait 0.05; + level.fileprintlauncher_linecount = 0; + } +} + +//Function Number: 123 +fileprint_launcher_end_file(param_00,param_01) +{ + if(!isdefined(param_01)) + { + param_01 = 0; + } + + if(param_01) + { + fileprint_launcher("GAMEPRINTENDFILE:GAMEPRINTP4ENABLED:" + param_00); + } + else + { + fileprint_launcher("GAMEPRINTENDFILE:" + param_00); + } + + var_02 = gettime() + 4000; + while(getdvarint("LAUNCHER_PRINT_SUCCESS") == 0 && getdvar("LAUNCHER_PRINT_FAIL") == "0" && gettime() < var_02) + { + wait 0.05; + } + + if(!gettime() < var_02) + { + iprintlnbold("LAUNCHER_PRINT_FAIL:( TIMEOUT ): launcherconflict? restart launcher and try again? "); + level.fileprint_launcher = undefined; + return 0; + } + + var_03 = getdvar("LAUNCHER_PRINT_FAIL"); + if(var_03 != "0") + { + iprintlnbold("LAUNCHER_PRINT_FAIL:( " + var_03 + " ): launcherconflict? restart launcher and try again? "); + level.fileprint_launcher = undefined; + return 0; + } + + level.fileprint_launcher = undefined; + return 1; +} + +//Function Number: 124 +launcher_write_clipboard(param_00) +{ + level.fileprintlauncher_linecount = 0; + fileprint_launcher("LAUNCHER_CLIP:" + param_00); +} + +//Function Number: 125 +isdestructible() +{ + if(!isdefined(self)) + { + return 0; + } + + return isdefined(self.destructible_type); +} + +//Function Number: 126 +pauseeffect() +{ + common_scripts\_createfx::stop_fx_looper(); +} + +//Function Number: 127 +activate_individual_exploder() +{ + if(isdefined(self.v["firefx"])) + { + thread fire_effect(); + } + + if(isdefined(self.v["fxid"]) && self.v["fxid"] != "No FX") + { + thread cannon_effect(); + } + else if(isdefined(self.v["soundalias"]) && self.v["soundalias"] != "nil") + { + thread sound_effect(); + } + + if(isdefined(self.v["loopsound"]) && self.v["loopsound"] != "nil") + { + thread effect_loopsound(); + } + + if(isdefined(self.v["damage"])) + { + thread exploder_damage(); + } + + if(isdefined(self.v["earthquake"])) + { + thread exploder_earthquake(); + } + + if(isdefined(self.v["rumble"])) + { + thread exploder_rumble(); + } + + if(self.v["exploder_type"] == "exploder") + { + thread brush_show(); + return; + } + + if(self.v["exploder_type"] == "exploderchunk" || self.v["exploder_type"] == "exploderchunk visible") + { + thread brush_throw(); + return; + } + + thread brush_delete(); +} + +//Function Number: 128 +waitframe() +{ + wait 0.05; +} + +//Function Number: 129 +brush_delete() +{ + var_00 = self.v["exploder"]; + if(isdefined(self.v["delay"])) + { + wait self.v["delay"]; + } + else + { + wait 0.05; + } + + if(!isdefined(self.model)) + { + return; + } + + if(isdefined(self.model.classname)) + { + if(issp() && self.model.spawnflags & 1) + { + self.model [[ level.connectpathsfunction ]](); + } + } + + if(level.createfx_enabled) + { + if(isdefined(self.exploded)) + { + return; + } + + self.exploded = 1; + self.model hide(); + self.model notsolid(); + wait 3; + self.exploded = undefined; + self.model show(); + self.model solid(); + return; + } + + if(!isdefined(self.v["fxid"]) || self.v["fxid"] == "No FX") + { + self.v["exploder"] = undefined; + } + + waittillframeend; + if(isdefined(self.model) && isdefined(self.model.classname)) + { + self.model delete(); + } +} + +//Function Number: 130 +brush_throw() +{ + if(isdefined(self.v["delay"])) + { + wait self.v["delay"]; + } + + var_00 = undefined; + if(isdefined(self.v["target"])) + { + var_00 = get_target_ent(self.v["target"]); + } + + if(!isdefined(var_00)) + { + self.model delete(); + return; + } + + self.model show(); + if(isdefined(self.v["delay_post"])) + { + wait self.v["delay_post"]; + } + + var_01 = self.v["origin"]; + var_02 = self.v["angles"]; + var_03 = var_00.origin; + var_04 = var_03 - self.v["origin"]; + var_05 = var_04[0]; + var_06 = var_04[1]; + var_07 = var_04[2]; + var_08 = isdefined(self.v["physics"]); + if(var_08) + { + var_09 = undefined; + if(isdefined(var_00.target)) + { + var_09 = var_00 get_target_ent(); + } + + if(!isdefined(var_09)) + { + var_0A = var_01; + var_0B = var_00.origin; + } + else + { + var_0A = var_02.origin; + var_0B = var_0A.origin - var_01.origin * self.v["physics"]; + } + + self.model physicslaunchclient(var_0A,var_0B); + return; + } + else + { + self.model rotatevelocity((var_08,var_09,var_0A),12); + self.model movegravity((var_08,var_09,var_0A),12); + } + + if(level.createfx_enabled) + { + if(isdefined(self.exploded)) + { + return; + } + + self.exploded = 1; + wait 3; + self.exploded = undefined; + self.v["origin"] = var_04; + self.v["angles"] = var_05; + self.model hide(); + return; + } + + self.v["exploder"] = undefined; + wait 6; + self.model delete(); +} + +//Function Number: 131 +get_target_ent(param_00) +{ + if(!isdefined(param_00)) + { + param_00 = self.target; + } + + var_01 = getent(param_00,"targetname"); + if(isdefined(var_01)) + { + return var_01; + } + + if(issp()) + { + var_01 = [[ level.getnodefunction ]](param_00,"targetname"); + if(isdefined(var_01)) + { + return var_01; + } + } + + var_01 = getstruct(param_00,"targetname"); + if(isdefined(var_01)) + { + return var_01; + } + + var_01 = getvehiclenode(param_00,"targetname"); + if(isdefined(var_01)) + { + return var_01; + } +} + +//Function Number: 132 +brush_show() +{ + if(isdefined(self.v["delay"])) + { + wait self.v["delay"]; + } + + if(!isdefined(self.model.var_563)) + { + self.model show(); + self.model solid(); + } + else + { + var_00 = self.model spawn_tag_origin(); + if(isdefined(self.model.script_linkname)) + { + var_00.script_linkname = self.model.script_linkname; + } + + var_00 setmodel(self.model.var_563); + var_00 show(); + } + + self.brush_shown = 1; + if(issp() && !isdefined(self.model.var_563) && self.model.spawnflags & 1) + { + if(!isdefined(self.model.disconnect_paths)) + { + self.model [[ level.connectpathsfunction ]](); + } + else + { + self.model [[ level.disconnectpathsfunction ]](); + } + } + + if(level.createfx_enabled) + { + if(isdefined(self.exploded)) + { + return; + } + + self.exploded = 1; + wait 3; + self.exploded = undefined; + if(!isdefined(self.model.var_563)) + { + self.model hide(); + self.model notsolid(); + } + } +} + +//Function Number: 133 +exploder_earthquake() +{ + exploder_delay(); + do_earthquake(self.v["earthquake"],self.v["origin"]); +} + +//Function Number: 134 +do_earthquake(param_00,param_01) +{ + var_02 = level.earthquake[param_00]; + earthquake(var_02["magnitude"],var_02["duration"],param_01,var_02["radius"]); +} + +//Function Number: 135 +exploder_rumble() +{ + if(!issp()) + { + return; + } + + exploder_delay(); + level.player playrumbleonentity(self.v["rumble"]); +} + +//Function Number: 136 +exploder_delay() +{ + if(!isdefined(self.v["delay"])) + { + self.v["delay"] = 0; + } + + var_00 = self.v["delay"]; + var_01 = self.v["delay"] + 0.001; + if(isdefined(self.v["delay_min"])) + { + var_00 = self.v["delay_min"]; + } + + if(isdefined(self.v["delay_max"])) + { + var_01 = self.v["delay_max"]; + } + + if(var_00 > 0) + { + wait randomfloatrange(var_00,var_01); + } +} + +//Function Number: 137 +exploder_damage() +{ + if(isdefined(self.v["delay"])) + { + var_00 = self.v["delay"]; + } + else + { + var_00 = 0; + } + + if(isdefined(self.v["damage_radius"])) + { + var_01 = self.v["damage_radius"]; + } + else + { + var_01 = 128; + } + + var_02 = self.v["damage"]; + var_03 = self.v["origin"]; + wait var_00; + radiusdamage(var_03,var_01,var_02,var_02); +} + +//Function Number: 138 +effect_loopsound() +{ + if(isdefined(self.loopsound_ent)) + { + self.loopsound_ent delete(); + } + + var_00 = self.v["origin"]; + var_01 = self.v["loopsound"]; + exploder_delay(); + self.loopsound_ent = play_loopsound_in_space(var_01,var_00); +} + +//Function Number: 139 +play_loopsound_in_space(param_00,param_01) +{ + var_02 = spawn("script_origin",(0,0,0)); + if(!isdefined(param_01)) + { + param_01 = self.origin; + } + + var_02.origin = param_01; + var_02 playloopsound(param_00); + return var_02; +} + +//Function Number: 140 +sound_effect() +{ + effect_soundalias(); +} + +//Function Number: 141 +effect_soundalias() +{ + var_00 = self.v["origin"]; + var_01 = self.v["soundalias"]; + exploder_delay(); + play_sound_in_space(var_01,var_00); +} + +//Function Number: 142 +play_sound_in_space(param_00,param_01,param_02) +{ + var_03 = spawn("script_origin",(0,0,1)); + if(!isdefined(param_01)) + { + param_01 = self.origin; + } + + var_03.origin = param_01; + if(issp()) + { + if(isdefined(param_02) && param_02) + { + var_03 playsoundasmaster(param_00,"sounddone"); + } + else + { + var_03 playsound(param_00,"sounddone"); + } + } + else if(isdefined(param_02) && param_02) + { + var_03 playsoundasmaster(param_00); + } + else + { + var_03 playsound(param_00); + } + + var_03 waittill("sounddone"); + var_03 delete(); +} + +//Function Number: 143 +cannon_effect() +{ + if(isdefined(self.v["repeat"])) + { + thread exploder_playsound(); + for(var_00 = 0;var_00 < self.v["repeat"];var_00++) + { + playfx(level._effect[self.v["fxid"]],self.v["origin"],self.v["forward"],self.v["up"]); + exploder_delay(); + } + + return; + } + + exploder_delay(); + if(isdefined(self.looper)) + { + self.looper delete(); + } + + self.looper = spawnfx(func_0539(self.v["fxid"]),self.v["origin"],self.v["forward"],self.v["up"]); + triggerfx(self.looper); + exploder_playsound(); +} + +//Function Number: 144 +exploder_playsound() +{ + if(!isdefined(self.v["soundalias"]) || self.v["soundalias"] == "nil") + { + return; + } + + play_sound_in_space(self.v["soundalias"],self.v["origin"]); +} + +//Function Number: 145 +fire_effect() +{ + var_00 = self.v["forward"]; + var_01 = self.v["up"]; + var_02 = undefined; + var_03 = self.v["firefxsound"]; + var_04 = self.v["origin"]; + var_05 = self.v["firefx"]; + var_06 = self.v["ender"]; + if(!isdefined(var_06)) + { + var_06 = "createfx_effectStopper"; + } + + var_07 = self.v["firefxtimeout"]; + var_08 = 0.5; + if(isdefined(self.v["firefxdelay"])) + { + var_08 = self.v["firefxdelay"]; + } + + exploder_delay(); + if(isdefined(var_03)) + { + level thread loop_fx_sound(var_03,var_04,1,var_06,var_07); + } + + playfx(level._effect[var_05],self.v["origin"],var_00,var_01); +} + +//Function Number: 146 +loop_fx_sound(param_00,param_01,param_02,param_03,param_04) +{ + if(isdefined(param_02) && param_02 == 1) + { + if(!isdefined(level.first_frame) || level.first_frame == 1) + { + spawnloopingsound(param_00,param_01); + return; + } + + return; + } + + var_05 = spawn("script_origin",(0,0,0)); + if(isdefined(param_03)) + { + thread loop_sound_delete(param_03,var_05); + self endon(param_03); + } + + var_05.origin = param_01; + var_05 playloopsound(param_00); + var_06 = 0; + if(isdefined(level.createfx_enabled)) + { + var_06 = level.createfx_enabled; + } + + if(!isdefined(param_04) && !var_06) + { + var_05 willneverchange(); + return; + } + + if(isdefined(param_04)) + { + wait param_04; + } +} + +//Function Number: 147 +loop_fx_sound_interval(param_00,param_01,param_02,param_03,param_04,param_05) +{ + var_06 = spawn("script_origin",(0,0,0)); + if(isdefined(param_02)) + { + thread loop_sound_delete(param_02,var_06); + self endon(param_02); + } + + var_06.origin = param_01; + if(param_04 >= param_05) + { + wait 0.05; + } + + if(!soundexists(param_00)) + { + wait 0.05; + } + + for(;;) + { + lock("createfx_looper"); + thread play_sound_in_space(param_00,var_06.origin); + unlock("createfx_looper"); + wait randomfloatrange(param_04,param_05); + } +} + +//Function Number: 148 +loop_sound_delete(param_00,param_01) +{ + param_01 endon("death"); + self waittill(param_00); + param_01 delete(); +} + +//Function Number: 149 +exploder_before_load(param_00) +{ + waittillframeend; + waittillframeend; + activate_exploder(param_00); +} + +//Function Number: 150 +exploder_after_load(param_00) +{ + activate_exploder(param_00); +} + +//Function Number: 151 +activate_exploder(param_00) +{ + param_00 = param_00 + ""; + level notify("exploding_" + param_00); + if(isdefined(level.createfxexploders) && !level.createfx_enabled) + { + var_01 = level.createfxexploders[param_00]; + if(isdefined(var_01)) + { + foreach(var_03 in var_01) + { + var_03 activate_individual_exploder(); + } + + return; + } + + return; + } + + var_05 = 0; + while(var_03 < level.createfxent.size) + { + var_05 = level.createfxent[var_03]; + if(!isdefined(var_05)) + { + continue; + } + + if(var_05.v["type"] != "exploder") + { + continue; + } + + if(!isdefined(var_05.v["exploder"])) + { + continue; + } + + if(var_05.v["exploder"] + "" != var_02) + { + continue; + } + + var_05 activate_individual_exploder(); + var_03++; + } +} + +//Function Number: 152 +createloopeffect(param_00) +{ + var_01 = common_scripts\_createfx::createeffect("loopfx",param_00); + var_01.v["delay"] = common_scripts\_createfx::getloopeffectdelaydefault(); + return var_01; +} + +//Function Number: 153 +createoneshoteffect(param_00) +{ + var_01 = common_scripts\_createfx::createeffect("oneshotfx",param_00); + var_01.v["delay"] = common_scripts\_createfx::getoneshoteffectdelaydefault(); + return var_01; +} + +//Function Number: 154 +createexploder(param_00) +{ + var_01 = common_scripts\_createfx::createeffect("exploder",param_00); + var_01.v["delay"] = common_scripts\_createfx::getexploderdelaydefault(); + var_01.v["exploder_type"] = "normal"; + return var_01; +} + +//Function Number: 155 +alphabetize(param_00) +{ + if(param_00.size <= 1) + { + return param_00; + } + + var_01 = 0; + for(var_02 = param_00.size - 1;var_02 >= 1;var_02--) + { + var_03 = param_00[var_02]; + var_04 = var_02; + for(var_05 = 0;var_05 < var_02;var_05++) + { + var_06 = param_00[var_05]; + if(stricmp(var_06,var_03) > 0) + { + var_03 = var_06; + var_04 = var_05; + } + } + + if(var_04 != var_02) + { + param_00[var_04] = param_00[var_02]; + param_00[var_02] = var_03; + } + } + + return param_00; +} + +//Function Number: 156 +is_later_in_alphabet(param_00,param_01) +{ + return stricmp(param_00,param_01) > 0; +} + +//Function Number: 157 +alphabet_compare(param_00,param_01) +{ + var_02 = []; + var_03 = 1; + var_02["0"] = var_03; + var_03++; + var_02["1"] = var_03; + var_03++; + var_02["2"] = var_03; + var_03++; + var_02["3"] = var_03; + var_03++; + var_02["4"] = var_03; + var_03++; + var_02["5"] = var_03; + var_03++; + var_02["6"] = var_03; + var_03++; + var_02["7"] = var_03; + var_03++; + var_02["8"] = var_03; + var_03++; + var_02["9"] = var_03; + var_03++; + var_02["_"] = var_03; + var_03++; + var_02["a"] = var_03; + var_03++; + var_02["b"] = var_03; + var_03++; + var_02["c"] = var_03; + var_03++; + var_02["d"] = var_03; + var_03++; + var_02["e"] = var_03; + var_03++; + var_02["f"] = var_03; + var_03++; + var_02["g"] = var_03; + var_03++; + var_02["h"] = var_03; + var_03++; + var_02["i"] = var_03; + var_03++; + var_02["j"] = var_03; + var_03++; + var_02["k"] = var_03; + var_03++; + var_02["l"] = var_03; + var_03++; + var_02["m"] = var_03; + var_03++; + var_02["n"] = var_03; + var_03++; + var_02["o"] = var_03; + var_03++; + var_02["p"] = var_03; + var_03++; + var_02["q"] = var_03; + var_03++; + var_02["r"] = var_03; + var_03++; + var_02["s"] = var_03; + var_03++; + var_02["t"] = var_03; + var_03++; + var_02["u"] = var_03; + var_03++; + var_02["v"] = var_03; + var_03++; + var_02["w"] = var_03; + var_03++; + var_02["x"] = var_03; + var_03++; + var_02["y"] = var_03; + var_03++; + var_02["z"] = var_03; + var_03++; + param_00 = tolower(param_00); + param_01 = tolower(param_01); + var_04 = 0; + if(isdefined(var_02[param_00])) + { + var_04 = var_02[param_00]; + } + + var_05 = 0; + if(isdefined(var_02[param_01])) + { + var_05 = var_02[param_01]; + } + + if(var_04 > var_05) + { + return "1st"; + } + + if(var_04 < var_05) + { + return "2nd"; + } + + return "same"; +} + +//Function Number: 158 +play_loop_sound_on_entity(param_00,param_01) +{ + var_02 = spawn("script_origin",(0,0,0)); + var_02 endon("death"); + thread delete_on_death(var_02); + if(isdefined(param_01)) + { + var_02.origin = self.origin + param_01; + var_02.angles = self.angles; + var_02 linkto(self); + } + else + { + var_02.origin = self.origin; + var_02.angles = self.angles; + var_02 linkto(self); + } + + var_02 playloopsound(param_00); + self waittill("stop sound" + param_00); + var_02 stoploopsound(param_00); + var_02 delete(); +} + +//Function Number: 159 +stop_loop_sound_on_entity(param_00) +{ + self notify("stop sound" + param_00); +} + +//Function Number: 160 +delete_on_death(param_00) +{ + param_00 endon("death"); + self waittill("death"); + if(isdefined(param_00)) + { + param_00 delete(); + } +} + +//Function Number: 161 +error(param_00) +{ + waitframe(); +} + +//Function Number: 162 +exploder(param_00) +{ + [[ level.exploderfunction ]](param_00); +} + +//Function Number: 163 +create_dvar(param_00,param_01) +{ + setdvarifuninitialized(param_00,param_01); +} + +//Function Number: 164 +void() +{ +} + +//Function Number: 165 +tag_project(param_00,param_01) +{ + var_02 = self gettagorigin(param_00); + var_03 = self gettagangles(param_00); + var_04 = anglestoforward(var_03); + var_04 = vectornormalize(var_04) * param_01; + return var_02 + var_04; +} + +//Function Number: 166 +ter_op(param_00,param_01,param_02) +{ + if(param_00) + { + return param_01; + } + + return param_02; +} + +//Function Number: 167 +create_lock(param_00,param_01) +{ + if(!isdefined(param_01)) + { + param_01 = 1; + } + + if(!isdefined(level.lock)) + { + level.lock = []; + } + + var_02 = spawnstruct(); + var_02.max_count = param_01; + var_02.count = 0; + level.lock[param_00] = var_02; +} + +//Function Number: 168 +lock(param_00) +{ + for(var_01 = level.lock[param_00];var_01.count >= var_01.max_count;var_01 waittill("unlocked")) + { + } + + var_01.count++; +} + +//Function Number: 169 +is_locked(param_00) +{ + var_01 = level.lock[param_00]; + return var_01.count > var_01.max_count; +} + +//Function Number: 170 +unlock_wait(param_00) +{ + thread unlock_thread(param_00); + wait 0.05; +} + +//Function Number: 171 +unlock(param_00) +{ + thread unlock_thread(param_00); +} + +//Function Number: 172 +unlock_thread(param_00) +{ + wait 0.05; + var_01 = level.lock[param_00]; + var_01.count--; + var_01 notify("unlocked"); +} + +//Function Number: 173 +get_template_level() +{ + var_00 = level.script; + if(isdefined(level.template_script)) + { + var_00 = level.template_script; + } + + return var_00; +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_ambient.gsc b/MW3/Xbox/SP/maps/_ambient.gsc new file mode 100644 index 0000000..47d78f6 --- /dev/null +++ b/MW3/Xbox/SP/maps/_ambient.gsc @@ -0,0 +1,116 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_ambient.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 11 + * Decompile Time: 181 ms + * Timestamp: 10/27/2023 2:33:50 AM +*******************************************************************/ + +//Function Number: 1 +setup_new_eq_settings(param_00,param_01) +{ + if(!isdefined(param_00) || !isdefined(level.ambient_eq[param_00])) + { + deactivate_index(param_01); + return 0; + } + + if(level.eq_track[param_01] == param_00) + { + return 0; + } + + level.eq_track[param_01] = param_00; + use_eq_settings(param_00,param_01); + return 1; +} + +//Function Number: 2 +use_eq_settings(param_00,param_01) +{ + if(level.player maps\_utility::ent_flag("player_has_red_flashing_overlay")) + { + return; + } + + maps\_audio::func_1138(param_00,param_01); +} + +//Function Number: 3 +deactivate_index(param_00) +{ + level.eq_track[param_00] = ""; + level.player deactivateeq(param_00); +} + +//Function Number: 4 +blend_to_eq_track(param_00,param_01) +{ + var_02 = 1; + if(isdefined(param_01)) + { + var_02 = param_01; + } + + var_03 = 0.05; + var_04 = var_02 / var_03; + var_05 = 1 / var_04; + for(var_06 = 0;var_06 <= 1;var_06 = var_06 + var_05) + { + level.player seteqlerp(var_06,param_00); + wait var_03; + } + + level.player seteqlerp(1,param_00); +} + +//Function Number: 5 +func_14E7(param_00) +{ + if(level.player maps\_utility::ent_flag("player_has_red_flashing_overlay")) + { + return; + } + + maps\_audio_reverb::rvb_start_preset(param_00); +} + +//Function Number: 6 +deactivate_reverb() +{ + maps\_audio_reverb::rvb_deactive_reverb(); +} + +//Function Number: 7 +ambientdelay(param_00,param_01,param_02) +{ + maps\_audio::aud_print_warning("ambientDelay called, this is deprecated! Use new preset string tables."); +} + +//Function Number: 8 +ambientevent(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + maps\_audio::aud_print_warning("ambientEvent called, this is deprecated! Use new preset string tables."); +} + +//Function Number: 9 +func_14EB(param_00) +{ + maps\_audio::aud_print_warning("ambientEventStart called, this is deprecated! Use maps_utility::set_ambient( track, fade_ )."); + maps\_utility::set_ambient(param_00); +} + +//Function Number: 10 +func_14ED(param_00) +{ + maps\_audio::aud_print_warning("start_ambient_event called, this is deprecated! Use maps_utility::set_ambient( track, fade_ )."); + maps\_utility::set_ambient(param_00); +} + +//Function Number: 11 +get_progess(param_00,param_01,param_02,param_03) +{ + maps\_utility::get_progress(param_00,param_01,param_03,param_02); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_anim.gsc b/MW3/Xbox/SP/maps/_anim.gsc new file mode 100644 index 0000000..4488087 --- /dev/null +++ b/MW3/Xbox/SP/maps/_anim.gsc @@ -0,0 +1,2409 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_anim.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 129 + * Decompile Time: 2138 ms + * Timestamp: 10/27/2023 2:31:55 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + if(!isdefined(level.scr_notetrack)) + { + level.scr_notetrack = []; + } + + if(!isdefined(level.scr_face)) + { + level.scr_face = []; + } + + if(!isdefined(level.scr_look)) + { + level.scr_look = []; + } + + if(!isdefined(level.scr_animsound)) + { + level.scr_animsound = []; + } + + if(!isdefined(level.scr_sound)) + { + level.scr_sound = []; + } + + if(!isdefined(level.scr_radio)) + { + level.scr_radio = []; + } + + if(!isdefined(level.scr_text)) + { + level.scr_text = []; + } + + if(!isdefined(level.scr_anim)) + { + level.scr_anim[0][0] = 0; + } + + if(!isdefined(level.scr_radio)) + { + level.scr_radio = []; + } +} + +//Function Number: 2 +func_0DA8(param_00,param_01) +{ + self waittill(param_00); + foreach(var_03 in param_01) + { + var_04 = var_03["guy"]; + if(!isdefined(var_04)) + { + continue; + } + + var_04._animactive--; + var_04._lastanimtime = gettime(); + } +} + +//Function Number: 3 +anim_first_frame(param_00,param_01,param_02) +{ + var_03 = get_anim_position(param_02); + var_04 = var_03["origin"]; + var_05 = var_03["angles"]; + common_scripts\utility::array_levelthread(param_00,::anim_first_frame_on_guy,param_01,var_04,var_05); +} + +//Function Number: 4 +anim_generic_first_frame(param_00,param_01,param_02) +{ + var_03 = get_anim_position(param_02); + var_04 = var_03["origin"]; + var_05 = var_03["angles"]; + thread anim_first_frame_on_guy(param_00,param_01,var_04,var_05,"generic"); +} + +//Function Number: 5 +anim_generic(param_00,param_01,param_02) +{ + var_03 = []; + anim_single(var_41,param_02,var_03,0,"generic"); +} + +//Function Number: 6 +anim_generic_gravity(param_00,param_01,param_02) +{ + var_03 = param_00.allowpain; + param_00 maps\_utility::disable_pain(); + anim_generic_custom_animmode(param_00,"gravity",param_01,param_02); + if(var_03) + { + param_00 maps\_utility::enable_pain(); + } +} + +//Function Number: 7 +anim_generic_run(param_00,param_01,param_02) +{ + var_03 = []; + anim_single(var_41,param_02,var_03,0.25,"generic"); +} + +//Function Number: 8 +anim_generic_reach(param_00,param_01,param_02) +{ + var_03 = []; + anim_reach(var_41,param_02,var_03,"generic"); +} + +//Function Number: 9 +anim_generic_reach_and_arrive(param_00,param_01,param_02) +{ + var_03 = []; + anim_reach_with_funcs(var_41,param_02,var_03,"generic",::reach_with_arrivals_begin,::reach_with_standard_adjustments_end); +} + +//Function Number: 10 +anim_reach_and_plant(param_00,param_01,param_02) +{ + anim_reach_with_funcs(param_00,param_01,param_02,undefined,::reach_with_planting,::reach_with_standard_adjustments_end); +} + +//Function Number: 11 +anim_reach_and_plant_and_arrive(param_00,param_01,param_02) +{ + anim_reach_with_funcs(param_00,param_01,param_02,undefined,::func_0E0B,::reach_with_standard_adjustments_end); +} + +//Function Number: 12 +anim_generic_loop(param_00,param_01,param_02,param_03) +{ + var_04 = []; + param_00[0] = var_41; + anim_loop_packet(var_41,param_01,param_02,"generic"); +} + +//Function Number: 13 +anim_custom_animmode(param_00,param_01,param_02,param_03) +{ + var_04 = get_anim_position(param_03); + var_05 = var_04["origin"]; + var_06 = var_04["angles"]; + var_07 = undefined; + foreach(var_09 in param_00) + { + var_07 = var_09; + thread anim_custom_animmode_on_guy(var_09,param_01,param_02,var_05,var_06,var_09.animname,0); + } + + var_07 wait_until_anim_finishes(param_02); + self notify(param_02); +} + +//Function Number: 14 +anim_custom_animmode_loop(param_00,param_01,param_02,param_03) +{ + var_04 = get_anim_position(param_03); + var_05 = var_04["origin"]; + var_06 = var_04["angles"]; + foreach(var_08 in param_00) + { + thread anim_custom_animmode_on_guy(var_08,param_01,param_02,var_05,var_06,var_08.animname,1); + } + + param_00[0] wait_until_anim_finishes(param_02); + self notify(param_02); +} + +//Function Number: 15 +wait_until_anim_finishes(param_00) +{ + self endon("finished_custom_animmode" + param_00); + self waittill("death"); +} + +//Function Number: 16 +anim_generic_custom_animmode(param_00,param_01,param_02,param_03,param_04,param_05) +{ + var_06 = get_anim_position(param_03); + var_07 = var_06["origin"]; + var_08 = var_06["angles"]; + thread anim_custom_animmode_on_guy(param_00,param_01,param_02,var_07,var_08,"generic",0,param_04,param_05); + param_00 wait_until_anim_finishes(param_02); + self notify(param_02); +} + +//Function Number: 17 +anim_generic_custom_animmode_loop(param_00,param_01,param_02,param_03,param_04,param_05) +{ + var_06 = get_anim_position(param_03); + var_07 = var_06["origin"]; + var_08 = var_06["angles"]; + thread anim_custom_animmode_on_guy(param_00,param_01,param_02,var_07,var_08,"generic",1,param_04,param_05); + param_00 wait_until_anim_finishes(param_02); + self notify(param_02); +} + +//Function Number: 18 +func_0DB9(param_00,param_01,param_02,param_03) +{ + var_04 = []; + anim_custom_animmode(var_41,param_02,param_03,var_04); +} + +//Function Number: 19 +anim_first_frame_solo(param_00,param_01,param_02) +{ + var_03 = []; + anim_first_frame(var_41,param_02,var_03); +} + +//Function Number: 20 +anim_last_frame_solo(param_00,param_01,param_02) +{ + var_03 = []; + anim_first_frame(var_41,param_02,var_03); + anim_set_time(var_41,param_02,1); +} + +//Function Number: 21 +assert_existance_of_anim(param_00,param_01) +{ + if(!isdefined(param_01)) + { + param_01 = self.animname; + } + + var_02 = 0; + if(isdefined(level.scr_anim[param_01])) + { + var_02 = 1; + if(isdefined(level.scr_anim[param_01][param_00])) + { + return; + } + } + + var_03 = 0; + if(isdefined(level.scr_sound[param_01])) + { + var_03 = 1; + if(isdefined(level.scr_sound[param_01][param_00])) + { + return; + } + } + + if(var_02 || var_03) + { + if(var_02) + { + var_04 = getarraykeys(level.scr_anim[param_01]); + foreach(var_06 in var_04) + { + } + } + + if(var_03) + { + var_04 = getarraykeys(level.scr_sound[param_01]); + foreach(var_06 in var_04) + { + } + } + + return; + } + + var_0A = getarraykeys(level.scr_anim); + var_0A = common_scripts\utility::array_combine(var_0A,getarraykeys(level.scr_sound)); + foreach(var_0C in var_0A) + { + } +} + +//Function Number: 22 +anim_first_frame_on_guy(param_00,param_01,param_02,param_03,param_04) +{ + param_00.first_frame_time = gettime(); + if(isdefined(param_04)) + { + var_05 = param_04; + } + else + { + var_05 = param_01.animname; + } + + param_00 set_start_pos(param_01,param_02,param_03,var_05); + if(isai(param_00)) + { + param_00._first_frame_anim = param_01; + param_00._animname = var_05; + param_00 animcustom(::animscripts/first_frame::main); + return; + } + + param_00 stopanimscripted(); + param_00 setanimknob(level.scr_anim[var_05][param_01],1,0,0); +} + +//Function Number: 23 +anim_custom_animmode_on_guy(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08) +{ + if(isai(param_00) && param_00 maps\_utility::doinglongdeath()) + { + return; + } + + var_09 = undefined; + if(isdefined(param_05)) + { + var_09 = param_05; + } + else + { + var_09 = param_00.animname; + } + + if(!isdefined(param_08) || !param_08) + { + param_00 set_start_pos(param_02,param_03,param_04,param_05,param_06); + } + + param_00._animmode = param_01; + param_00._custom_anim = param_02; + param_00._tag_entity = self; + param_00._anime = param_02; + param_00._animname = var_09; + param_00._custom_anim_loop = param_06; + param_00._custom_anim_thread = param_07; + param_00 animcustom(::animscripts/animmode::main); +} + +//Function Number: 24 +func_0DC1(param_00,param_01,param_02,param_03) +{ + var_04 = []; + foreach(var_06 in param_00) + { + var_07 = []; + var_07["guy"] = var_06; + var_07["entity"] = self; + var_07["tag"] = param_03; + var_04[var_04.size] = var_07; + } + + anim_loop_packet(var_04,param_01,param_02); +} + +//Function Number: 25 +anim_loop_packet_solo(param_00,param_01,param_02) +{ + var_03 = []; + anim_loop_packet(var_41,param_02,var_03); +} + +//Function Number: 26 +anim_loop_packet(param_00,param_01,param_02,param_03) +{ + foreach(var_05 in param_00) + { + var_06 = var_05["guy"]; + if(!isdefined(var_06)) + { + continue; + } + + if(!isdefined(var_06._animactive)) + { + var_06._animactive = 0; + } + + var_06 endon("death"); + var_06._animactive++; + } + + var_08 = param_00[0]["guy"]; + if(!isdefined(param_02)) + { + param_02 = "stop_loop"; + } + + thread func_0DA8(param_02,param_00); + self endon(param_02); + var_09 = "looping anim"; + var_0A = undefined; + if(isdefined(param_03)) + { + var_0A = param_03; + } + else + { + var_0A = var_08.animname; + } + + var_0B = 0; + var_0C = 0; + for(;;) + { + for(var_0B = anim_weight(var_0A,param_01);var_0B == var_0C && var_0B != 0;var_0B = anim_weight(var_0A,param_01)) + { + } + + var_0C = var_0B; + var_0D = undefined; + var_0E = 999999; + var_0F = undefined; + var_06 = undefined; + foreach(var_1D, var_05 in param_00) + { + var_11 = var_05["entity"]; + var_06 = var_05["guy"]; + var_12 = var_11 get_anim_position(var_05["tag"]); + var_13 = var_12["origin"]; + var_14 = var_12["angles"]; + if(isdefined(var_06.remove_from_animloop)) + { + var_06.remove_from_animloop = undefined; + param_00[var_1D] = undefined; + continue; + } + + var_15 = 0; + var_16 = 0; + var_17 = 0; + var_18 = 0; + var_19 = undefined; + var_1A = undefined; + var_1B = undefined; + if(isdefined(param_03)) + { + var_1B = param_03; + } + else + { + var_1B = var_06.animname; + } + + if(isdefined(level.scr_face[var_1B]) && isdefined(level.scr_face[var_1B][param_01]) && isdefined(level.scr_face[var_1B][param_01][var_0B])) + { + var_15 = 1; + var_19 = level.scr_face[var_1B][param_01][var_0B]; + } + + if(isdefined(level.scr_sound[var_1B]) && isdefined(level.scr_sound[var_1B][param_01]) && isdefined(level.scr_sound[var_1B][param_01][var_0B])) + { + var_16 = 1; + var_1A = level.scr_sound[var_1B][param_01][var_0B]; + } + + if(isdefined(level.scr_animsound[var_1B]) && isdefined(level.scr_animsound[var_1B][var_0B + param_01])) + { + var_06 playsound(level.scr_animsound[var_1B][var_0B + param_01]); + } + + if(isdefined(level.scr_anim[var_1B]) && isdefined(level.scr_anim[var_1B][param_01]) && !isai(var_06) || !var_06 maps\_utility::doinglongdeath()) + { + var_17 = 1; + } + + if(var_17) + { + var_06 last_anim_time_check(); + var_06 animscripted(var_09,var_13,var_14,level.scr_anim[var_1B][param_01][var_0B]); + var_1C = getanimlength(level.scr_anim[var_1B][param_01][var_0B]); + if(var_1C < var_0E) + { + var_0E = var_1C; + var_0D = var_1D; + } + + thread start_notetrack_wait(var_06,var_09,param_01,var_1B); + thread animscriptdonotetracksthread(var_06,var_09,param_01); + } + + if(var_15 || var_16) + { + if(isai(var_06)) + { + if(var_17) + { + var_06 animscripts/face::sayspecificdialogue(var_19,var_1A,1); + } + else + { + var_06 animscripts/face::sayspecificdialogue(var_19,var_1A,1,var_09); + } + } + else + { + var_06 maps\_utility::play_sound_on_entity(var_1A); + } + + var_0F = var_1D; + } + } + + if(!isdefined(var_06)) + { + break; + } + + if(isdefined(var_0D)) + { + param_00[var_0D]["guy"] waittillmatch("end",var_09); + continue; + } + + if(isdefined(var_0F)) + { + param_00[var_0F]["guy"] waittill(var_09); + } + } +} + +//Function Number: 27 +start_notetrack_wait(param_00,param_01,param_02,param_03) +{ + param_00 notify("stop_sequencing_notetracks"); + thread notetrack_wait(param_00,param_01,self,param_02,param_03); +} + +//Function Number: 28 +anim_single_failsafeonguy(param_00,param_01) +{ +} + +//Function Number: 29 +anim_single_failsafe(param_00,param_01) +{ + foreach(var_03 in param_00) + { + var_03 thread anim_single_failsafeonguy(self,param_01); + } +} + +//Function Number: 30 +anim_single(param_00,param_01,param_02,param_03,param_04) +{ + if(!isdefined(param_03)) + { + param_03 = 0; + } + + anim_single_internal(param_00,param_01,param_02,param_03,param_04); +} + +//Function Number: 31 +func_0DC9(param_00,param_01,param_02,param_03) +{ + anim_single_internal(param_00,param_01,param_02,0.25,param_03); +} + +//Function Number: 32 +anim_single_internal(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = self; + foreach(var_07 in param_00) + { + if(!isdefined(var_07)) + { + continue; + } + + if(!isdefined(var_07._animactive)) + { + var_07._animactive = 0; + } + + var_07._animactive++; + } + + var_09 = get_anim_position(param_02); + var_0A = var_09["origin"]; + var_0B = var_09["angles"]; + var_0C = undefined; + var_0D = 999999; + var_0E = undefined; + var_0F = undefined; + var_10 = undefined; + var_11 = "single anim"; + foreach(var_1D, var_07 in param_00) + { + var_13 = 0; + var_14 = 0; + var_15 = 0; + var_16 = 0; + var_17 = undefined; + var_18 = undefined; + var_19 = undefined; + if(isdefined(param_04)) + { + var_19 = param_04; + } + else + { + var_19 = var_07.animname; + } + + if(isdefined(level.scr_face[var_19]) && isdefined(level.scr_face[var_19][param_01])) + { + var_13 = 1; + var_18 = level.scr_face[var_19][param_01]; + var_10 = var_18; + } + + if(isdefined(level.scr_sound[var_19]) && isdefined(level.scr_sound[var_19][param_01])) + { + var_14 = 1; + var_17 = level.scr_sound[var_19][param_01]; + } + + if(isdefined(level.scr_anim[var_19]) && isdefined(level.scr_anim[var_19][param_01]) && !isai(var_07) || !var_07 maps\_utility::doinglongdeath()) + { + var_15 = 1; + } + + if(isdefined(level.scr_animsound[var_19]) && isdefined(level.scr_animsound[var_19][param_01])) + { + var_07 playsound(level.scr_animsound[var_19][param_01]); + } + + if(var_15) + { + var_07 last_anim_time_check(); + if(isplayer(var_07)) + { + var_1A = level.scr_anim[var_19]["root"]; + var_07 setanim(var_1A,0,0.2); + var_1B = level.scr_anim[var_19][param_01]; + var_07 setflaggedanim(var_11,var_1B,1,0.2); + } + else if(var_07.code_classname == "misc_turret") + { + var_1B = level.scr_anim[var_19][param_01]; + var_07 setflaggedanim(var_11,var_1B,1,0.2); + } + else + { + var_07 animscripted(var_11,var_0A,var_0B,level.scr_anim[var_19][param_01]); + } + + var_1C = getanimlength(level.scr_anim[var_19][param_01]); + if(var_1C < var_0D) + { + var_0D = var_1C; + var_0C = var_1D; + } + + thread start_notetrack_wait(var_07,var_11,param_01,var_19); + thread animscriptdonotetracksthread(var_07,var_11,param_01); + } + + if(var_13 || var_14) + { + if(var_13) + { + if(var_14) + { + var_07 thread delayeddialogue(param_01,var_13,var_17,level.scr_face[var_19][param_01]); + } + + thread func_0E31(var_07,param_01,level.scr_face[var_19][param_01]); + var_0F = var_1D; + } + else if(isai(var_07)) + { + if(var_15) + { + var_07 animscripts/face::sayspecificdialogue(var_18,var_17,1); + } + else + { + var_07 thread anim_facialfiller("single dialogue"); + var_07 animscripts/face::sayspecificdialogue(var_18,var_17,1,"single dialogue"); + } + } + else + { + var_07 thread maps\_utility::play_sound_on_entity(var_17,"single dialogue"); + } + + var_0E = var_1D; + } + } + + if(isdefined(var_0C)) + { + var_1E = spawnstruct(); + var_1E thread anim_deathnotify(param_00[var_0C],param_01); + var_1E thread anim_animationendnotify(param_00[var_0C],param_01,var_0D,param_03); + var_1E waittill(param_01); + } + else if(isdefined(var_0F)) + { + var_1E = spawnstruct(); + var_1E thread anim_deathnotify(param_00[var_0F],param_01); + var_1E thread func_0DCC(param_00[var_0F],param_01,var_10); + var_1E waittill(param_01); + } + else if(isdefined(var_0E)) + { + var_1E = spawnstruct(); + var_1E thread anim_deathnotify(param_00[var_0E],param_01); + var_1E thread anim_dialogueendnotify(param_00[var_0E],param_01); + var_1E waittill(param_01); + } + + foreach(var_07 in param_00) + { + if(!isdefined(var_07)) + { + continue; + } + + if(isplayer(var_07)) + { + var_19 = undefined; + if(isdefined(param_04)) + { + var_19 = param_04; + } + else + { + var_19 = var_07.animname; + } + + if(isdefined(level.scr_anim[var_19][param_01])) + { + var_1A = level.scr_anim[var_19]["root"]; + var_07 setanim(var_1A,1,0.2); + var_1B = level.scr_anim[var_19][param_01]; + var_07 clearanim(var_1B,0.2); + } + } + + var_07._animactive--; + var_07._lastanimtime = gettime(); + } + + self notify(param_01); +} + +//Function Number: 33 +anim_deathnotify(param_00,param_01) +{ + self endon(param_01); + param_00 waittill("death"); + self notify(param_01); +} + +//Function Number: 34 +func_0DCC(param_00,param_01,param_02) +{ + self endon(param_01); + var_03 = getanimlength(param_02); + wait var_03; + self notify(param_01); +} + +//Function Number: 35 +anim_dialogueendnotify(param_00,param_01) +{ + self endon(param_01); + param_00 waittill("single dialogue"); + self notify(param_01); +} + +//Function Number: 36 +anim_animationendnotify(param_00,param_01,param_02,param_03) +{ + self endon(param_01); + param_00 endon("death"); + param_02 = param_02 - param_03; + if(param_03 > 0 && param_02 > 0) + { + param_00 maps\_utility::waittill_match_or_timeout("single anim","end",param_02); + param_00 stopanimscripted(); + } + else + { + param_00 waittillmatch("end","single anim"); + } + + self notify(param_01); +} + +//Function Number: 37 +animscriptdonotetracksthread(param_00,param_01,param_02) +{ + if(isdefined(param_00.dontdonotetracks) && param_00.dontdonotetracks) + { + return; + } + + param_00 endon("stop_sequencing_notetracks"); + param_00 endon("death"); + param_00 animscripts/shared::donotetracks(param_01); +} + +//Function Number: 38 +add_animsound(param_00) +{ + for(var_01 = 0;var_01 < level.animsound_hudlimit;var_01++) + { + if(isdefined(self.animsounds[var_01])) + { + continue; + } + + self.animsounds[var_01] = param_00; + return; + } + + var_02 = getarraykeys(self.animsounds); + var_03 = var_02[0]; + var_04 = self.animsounds[var_03].end_time; + for(var_01 = 1;var_01 < var_02.size;var_01++) + { + var_05 = var_02[var_01]; + if(self.animsounds[var_05].end_time < var_04) + { + var_04 = self.animsounds[var_05].end_time; + var_03 = var_05; + } + } + + self.animsounds[var_03] = param_00; +} + +//Function Number: 39 +func_0DD5(param_00,param_01) +{ + param_01 = tolower(param_01); + var_02 = getarraykeys(self.animsounds); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + var_04 = var_02[var_03]; + if(self.animsounds[var_04].anime != param_00) + { + continue; + } + + if(self.animsounds[var_04].notetrack != param_01) + { + continue; + } + + self.animsounds[var_04].end_time = gettime() + -5536; + return 1; + } + + return 0; +} + +//Function Number: 40 +animsound_tracker(param_00,param_01,param_02) +{ + param_01 = tolower(param_01); + add_to_animsound(); + if(param_01 == "end") + { + return; + } + + if(func_0DD5(param_00,param_01)) + { + return; + } + + var_03 = spawnstruct(); + var_03.anime = param_00; + var_03.notetrack = param_01; + var_03.animname = param_02; + var_03.end_time = gettime() + -5536; + add_animsound(var_03); +} + +//Function Number: 41 +animsound_start_tracker(param_00,param_01) +{ + add_to_animsound(); + var_02 = spawnstruct(); + var_02.anime = param_00; + var_02.notetrack = "#" + param_00; + var_02.animname = param_01; + var_02.end_time = gettime() + -5536; + if(func_0DD5(param_00,var_02.notetrack)) + { + return; + } + + add_animsound(var_02); +} + +//Function Number: 42 +func_0DDA(param_00,param_01,param_02) +{ + add_to_animsound(); + param_00 = param_01 + param_00; + var_03 = spawnstruct(); + var_03.anime = param_00; + var_03.notetrack = "#" + param_00; + var_03.animname = param_02; + var_03.end_time = gettime() + -5536; + if(func_0DD5(param_00,var_03.notetrack)) + { + return; + } + + add_animsound(var_03); +} + +//Function Number: 43 +notetrack_wait(param_00,param_01,param_02,param_03,param_04) +{ + param_00 endon("stop_sequencing_notetracks"); + param_00 endon("death"); + if(isdefined(param_02)) + { + var_05 = param_02; + } + else + { + var_05 = self; + } + + var_06 = undefined; + if(isdefined(param_04)) + { + var_06 = param_04; + } + else + { + var_06 = param_00.animname; + } + + var_07 = spawnstruct(); + var_07.var_DDC = []; + var_08 = []; + if(isdefined(var_06) && isdefined(level.scr_notetrack[var_06])) + { + if(isdefined(level.scr_notetrack[var_06][param_03])) + { + } + + if(isdefined(level.scr_notetrack[var_07]["any"])) + { + } + } + + foreach(var_11, var_0A in var_41) + { + foreach(var_0C in level.scr_notetrack[var_07][var_11]) + { + foreach(var_0E in var_0C) + { + if(isdefined(var_0E["dialog"])) + { + var_08.var_DDC[var_0E["dialog"]] = 1; + } + } + } + } + + for(;;) + { + var_08.var_DDD = 0; + var_12 = undefined; + param_01 waittill(level.scr_notetrack[var_06][param_03],var_41[param_03],level.scr_notetrack[var_07]["any"],var_41["any"],param_02,var_12); + if(var_12 == "end") + { + return; + } + + foreach(var_11, var_0A in var_41) + { + if(isdefined(level.scr_notetrack[var_07][var_11][var_12])) + { + foreach(var_0E in level.scr_notetrack[var_07][var_11][var_12]) + { + anim_handle_notetrack(var_0E,param_01,var_08,var_06); + } + } + } + + var_16 = getsubstr(var_12,0,3); + if(var_16 == "ps_") + { + var_17 = getsubstr(var_12,3); + if(var_17 == "dubai_elevse_yuri_remove_plr_armor") + { + } + + param_01 thread maps\_utility::play_sound_on_tag(var_17,undefined,1); + continue; + } + + if(var_16 == "psm") + { + var_18 = getsubstr(var_12,4); + maps\_audio::func_121F(var_18,param_01); + continue; + } + + var_16 = getsubstr(var_12,0,4); + if(var_16 == "psr_") + { + var_17 = getsubstr(var_12,4); + maps\_utility::func_DDF(var_17); + continue; + } + + switch(var_12) + { + case "ignoreall true": + self.ignoreall = 1; + break; + + case "ignoreall false": + self.ignoreall = 0; + break; + + case "ignoreme true": + self.ignoreme = 1; + break; + + case "ignoreme false": + self.ignoreme = 0; + break; + + case "allowdeath true": + self.allowdeath = 1; + break; + + case "allowdeath false": + self.allowdeath = 0; + break; + } + } +} + +//Function Number: 44 +anim_handle_notetrack(param_00,param_01,param_02,param_03) +{ + if(isdefined(param_00["function"])) + { + self thread [[ param_00["function"] ]](param_01); + } + + if(isdefined(param_00["flag"])) + { + common_scripts\utility::flag_set(param_00["flag"]); + } + + if(isdefined(param_00["flag_clear"])) + { + common_scripts\utility::flag_clear(param_00["flag_clear"]); + } + + if(isdefined(param_00["attach gun left"])) + { + param_01 gun_pickup_left(); + return; + } + + if(isdefined(param_00["attach gun right"])) + { + param_01 gun_pickup_right(); + return; + } + + if(isdefined(param_00["detach gun"])) + { + param_01 gun_leave_behind(param_00); + return; + } + + if(isdefined(param_00["attach model"])) + { + if(isdefined(param_00["selftag"])) + { + param_01 attach(param_00["attach model"],param_00["selftag"]); + } + else + { + param_03 attach(param_00["attach model"],param_00["tag"]); + } + + return; + } + + if(isdefined(param_00["detach model"])) + { + waittillframeend; + if(isdefined(param_00["selftag"])) + { + param_01 detach(param_00["detach model"],param_00["selftag"]); + } + else + { + param_03 detach(param_00["detach model"],param_00["tag"]); + } + } + + if(isdefined(param_00["sound"])) + { + param_01 thread maps\_utility::play_sound_on_tag(param_00["sound"],undefined,1); + } + + if(!param_02.var_DDD) + { + if(isdefined(param_00["dialog"]) && isdefined(param_02.var_DDC[param_00["dialog"]])) + { + param_01 animscripts/face::sayspecificdialogue(undefined,param_00["dialog"],1); + param_02.var_DDC[param_00["dialog"]] = undefined; + param_02.var_DDD = 1; + } + } + + if(isdefined(param_00["create model"])) + { + anim_addmodel(param_01,param_00); + } + else if(isdefined(param_00["delete model"])) + { + anim_removemodel(param_01,param_00); + } + + if(isdefined(param_00["selftag"])) + { + if(isdefined(param_00["effect"])) + { + playfxontag(level._effect[param_00["effect"]],param_01,param_00["selftag"]); + } + + if(isdefined(param_00["stop_effect"])) + { + stopfxontag(level._effect[param_00["stop_effect"]],param_01,param_00["selftag"]); + } + } + + if(isdefined(param_00["tag"]) && isdefined(param_00["effect"])) + { + playfxontag(level._effect[param_00["effect"]],param_03,param_00["tag"]); + } + + if(isdefined(param_00["selftag"]) && isdefined(param_00["effect_looped"])) + { + playfxontag(level._effect[param_00["effect_looped"]],param_01,param_00["selftag"]); + } +} + +//Function Number: 45 +anim_addmodel(param_00,param_01) +{ + if(!isdefined(param_00.scriptmodel)) + { + param_00.scriptmodel = []; + } + + var_02 = param_00.scriptmodel.size; + param_00.scriptmodel[var_02] = spawn("script_model",(0,0,0)); + param_00.scriptmodel[var_02] setmodel(param_01["create model"]); + param_00.scriptmodel[var_02].origin = param_00 gettagorigin(param_01["selftag"]); + param_00.scriptmodel[var_02].angles = param_00 gettagangles(param_01["selftag"]); +} + +//Function Number: 46 +anim_removemodel(param_00,param_01) +{ + for(var_02 = 0;var_02 < param_00.scriptmodel.size;var_02++) + { + if(isdefined(param_01["explosion"])) + { + var_03 = anglestoforward(param_00.scriptmodel[var_02].angles); + var_03 = var_03 * 120; + var_03 = var_03 + param_00.scriptmodel[var_02].origin; + playfx(level._effect[param_01["explosion"]],param_00.scriptmodel[var_02].origin); + radiusdamage(param_00.scriptmodel[var_02].origin,350,700,50); + } + + param_00.scriptmodel[var_02] delete(); + } +} + +//Function Number: 47 +gun_pickup_left() +{ + if(!isdefined(self.var_DE5)) + { + return; + } + + self.var_DE5 delete(); + self.dropweapon = 1; + animscripts/shared::placeweaponon(self.weapon,"left"); +} + +//Function Number: 48 +gun_pickup_right() +{ + if(!isdefined(self.var_DE5)) + { + return; + } + + self.var_DE5 delete(); + self.dropweapon = 1; + animscripts/shared::placeweaponon(self.weapon,"right"); +} + +//Function Number: 49 +gun_leave_behind(param_00) +{ + if(isdefined(self.var_DE5)) + { + return; + } + + var_01 = self gettagorigin(param_00["tag"]); + var_02 = self gettagangles(param_00["tag"]); + var_03 = 0; + if(isdefined(param_00["suspend"])) + { + var_03 = param_00["suspend"]; + } + + var_04 = spawn("weapon_" + self.weapon,var_01,var_03); + var_04.angles = var_02; + self.var_DE5 = var_04; + animscripts/shared::placeweaponon(self.weapon,"none"); + self.dropweapon = 0; +} + +//Function Number: 50 +anim_weight(param_00,param_01) +{ + var_02 = level.scr_anim[param_00][param_01].size; + var_03 = randomint(var_02); + if(var_02 > 1) + { + var_04 = 0; + var_05 = 0; + for(var_06 = 0;var_06 < var_02;var_06++) + { + if(isdefined(level.scr_anim[param_00][param_01 + "weight"])) + { + if(isdefined(level.scr_anim[param_00][param_01 + "weight"][var_06])) + { + var_04++; + var_05 = var_05 + level.scr_anim[param_00][param_01 + "weight"][var_06]; + } + } + } + + if(var_04 == var_02) + { + var_07 = randomfloat(var_05); + var_05 = 0; + for(var_06 = 0;var_06 < var_02;var_06++) + { + var_05 = var_05 + level.scr_anim[param_00][param_01 + "weight"][var_06]; + if(var_07 < var_05) + { + var_03 = var_06; + break; + } + } + } + } + + return var_03; +} + +//Function Number: 51 +anim_reach_and_idle(param_00,param_01,param_02,param_03,param_04) +{ + thread anim_reach(param_00,param_01,param_04); + var_05 = spawnstruct(); + var_05.reachers = 0; + foreach(var_07 in param_00) + { + var_05.reachers++; + thread idle_on_reach(var_07,param_02,param_03,param_04,var_05); + } + + for(;;) + { + var_05 waittill("reached_position"); + if(var_05.reachers <= 0) + { + return; + } + } +} + +//Function Number: 52 +wait_for_guy_to_die_or_get_in_position() +{ + self endon("death"); + self waittill("anim_reach_complete"); +} + +//Function Number: 53 +idle_on_reach(param_00,param_01,param_02,param_03,param_04) +{ + param_00 wait_for_guy_to_die_or_get_in_position(); + param_04.reachers--; + param_04 notify("reached_position"); + if(isalive(param_00)) + { + func_0E16(param_00,param_01,param_02,param_03); + } +} + +//Function Number: 54 +get_anim_position(param_00) +{ + var_01 = undefined; + var_02 = undefined; + if(isdefined(param_00)) + { + var_01 = self gettagorigin(param_00); + var_02 = self gettagangles(param_00); + } + else + { + var_01 = self.origin; + var_02 = self.angles; + } + + var_03 = []; + return var_41; +} + +//Function Number: 55 +anim_reach_together(param_00,param_01,param_02,param_03) +{ + thread modify_moveplaybackrate_together(param_00); + anim_reach_with_funcs(param_00,param_01,param_02,param_03,::reach_with_standard_adjustments_begin,::reach_with_standard_adjustments_end); +} + +//Function Number: 56 +modify_moveplaybackrate_together(param_00) +{ + var_01 = 0.3; + waittillframeend; + for(;;) + { + param_00 = maps\_utility::remove_dead_from_array(param_00); + var_02 = []; + var_03 = 0; + foreach(var_08, var_05 in param_00) + { + var_06 = var_05.goalpos; + if(isdefined(var_05.reach_goal_pos)) + { + var_06 = var_05.reach_goal_pos; + } + + var_07 = distance(var_05.origin,var_06); + var_02[var_05.unique_id] = var_07; + if(var_07 <= 4) + { + param_00[var_08] = undefined; + continue; + } + + var_03 = var_03 + var_07; + } + + if(param_00.size <= 1) + { + break; + } + + var_03 = var_03 / param_00.size; + foreach(var_05 in param_00) + { + var_0A = var_02[var_05.unique_id] - var_03; + var_0B = var_0A * 0.003; + if(var_0B > var_01) + { + var_0B = var_01; + } + else if(var_0B < var_01 * -1) + { + var_0B = var_01 * -1; + } + + var_05.moveplaybackrate = 1 + var_0B; + } + + wait 0.05; + } + + foreach(var_05 in param_00) + { + if(isalive(var_05)) + { + var_05.moveplaybackrate = 1; + } + } +} + +//Function Number: 57 +anim_reach(param_00,param_01,param_02,param_03) +{ + anim_reach_with_funcs(param_00,param_01,param_02,param_03,::reach_with_standard_adjustments_begin,::reach_with_standard_adjustments_end); +} + +//Function Number: 58 +anim_reach_with_funcs(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + var_07 = get_anim_position(param_02); + var_08 = var_07["origin"]; + var_09 = var_07["angles"]; + if(isdefined(param_06)) + { + self.type = param_06; + self.arrivalstance = "stand"; + } + + var_0A = spawnstruct(); + var_0B = 0; + var_0C = 0; + foreach(var_0E in param_00) + { + if(isdefined(param_06)) + { + var_0E.scriptedarrivalent = self; + } + + if(isdefined(param_03)) + { + var_0F = param_03; + } + else + { + var_0F = var_0E.animname; + } + + if(isdefined(level.scr_anim[var_0F][param_01])) + { + if(isarray(level.scr_anim[var_0F][param_01])) + { + var_10 = getstartorigin(var_08,var_09,level.scr_anim[var_0F][param_01][0]); + } + else + { + var_10 = getstartorigin(var_08,var_09,level.scr_anim[var_0F][param_01]); + } + } + else + { + var_10 = var_08; + } + + var_0C++; + var_0E thread func_0DFE(var_0A,var_10,param_04,param_05); + } + + while(var_0C) + { + var_0A waittill("reach_notify"); + var_0C--; + } + + foreach(var_0E in param_00) + { + if(!isalive(var_0E)) + { + continue; + } + + var_0E.goalradius = var_0E.oldgoalradius; + var_0E.scriptedarrivalent = undefined; + var_0E.stopanimdistsq = 0; + } + + if(isdefined(param_06)) + { + self.type = undefined; + } +} + +//Function Number: 59 +anim_teleport(param_00,param_01,param_02) +{ + var_03 = get_anim_position(param_02); + var_04 = var_03["origin"]; + var_05 = var_03["angles"]; + foreach(var_07 in param_00) + { + var_08 = getstartorigin(var_04,var_05,level.scr_anim[var_07.animname][param_01]); + var_09 = getstartangles(var_04,var_05,level.scr_anim[var_07.animname][param_01]); + if(isai(var_07)) + { + var_07 teleport(var_08); + continue; + } + + var_07.origin = var_08; + var_07.angles = var_09; + } +} + +//Function Number: 60 +anim_moveto(param_00,param_01,param_02,param_03,param_04,param_05) +{ + var_06 = get_anim_position(param_02); + var_07 = var_06["origin"]; + var_08 = var_06["angles"]; + foreach(var_0A in param_00) + { + var_0B = getstartorigin(var_07,var_08,level.scr_anim[var_0A.animname][param_01]); + var_0C = getstartangles(var_07,var_08,level.scr_anim[var_0A.animname][param_01]); + if(isai(var_0A)) + { + continue; + } + + var_0A moveto(var_0B,param_03,param_04,param_05); + var_0A rotateto(var_0C,param_03,param_04,param_05); + } +} + +//Function Number: 61 +anim_generic_teleport(param_00,param_01,param_02) +{ + var_03 = get_anim_position(param_02); + var_04 = var_03["origin"]; + var_05 = var_03["angles"]; + var_06 = getstartorigin(var_04,var_05,level.scr_anim["generic"][param_01]); + var_07 = getstartangles(var_04,var_05,level.scr_anim["generic"][param_01]); + if(isai(param_00)) + { + param_00 teleport(var_06); + return; + } + + param_00.origin = var_06; + param_00.angles = var_07; +} + +//Function Number: 62 +anim_spawn_generic_model(param_00,param_01,param_02) +{ + return anim_spawn_model(param_00,"generic",param_01,param_02); +} + +//Function Number: 63 +anim_spawn_model(param_00,param_01,param_02,param_03) +{ + var_04 = get_anim_position(param_03); + var_05 = var_04["origin"]; + var_06 = var_04["angles"]; + var_07 = getstartorigin(var_05,var_06,level.scr_anim[param_01][param_02]); + var_08 = getstartorigin(var_05,var_06,level.scr_anim[param_01][param_02]); + var_09 = spawn("script_model",var_07); + var_09 setmodel(param_00); + var_09.angles = var_08; + return var_09; +} + +//Function Number: 64 +anim_spawn_tag_model(param_00,param_01) +{ + self attach(param_00,param_01); +} + +//Function Number: 65 +anim_link_tag_model(param_00,param_01) +{ + var_02 = self gettagorigin(param_01); + var_03 = spawn("script_model",var_02); + var_03 setmodel(param_00); + var_03 linkto(self,param_01,(0,0,0),(0,0,0)); + return var_03; +} + +//Function Number: 66 +anim_spawner_teleport(param_00,param_01,param_02) +{ + var_03 = get_anim_position(param_02); + var_04 = var_03["origin"]; + var_05 = var_03["angles"]; + var_06 = spawnstruct(); + foreach(var_08 in param_00) + { + var_09 = getstartorigin(var_04,var_05,level.scr_anim[var_08.animname][param_01]); + var_08.origin = var_09; + } +} + +//Function Number: 67 +reach_death_notify(param_00) +{ + common_scripts\utility::waittill_either("death","goal"); + param_00 notify("reach_notify"); +} + +//Function Number: 68 +func_0DFE(param_00,param_01,param_02,param_03) +{ + self endon("death"); + self endon("new_anim_reach"); + thread reach_death_notify(param_00); + param_01 = [[ param_02 ]](param_01); + maps\_utility::set_goal_pos(param_01); + self.reach_goal_pos = param_01; + self.goalradius = 0; + self.stopanimdistsq = squared(64); + self waittill("goal"); + self notify("anim_reach_complete"); + [[ param_03 ]](); + self notify("new_anim_reach"); +} + +//Function Number: 69 +reach_with_standard_adjustments_begin(param_00) +{ + self.oldgoalradius = self.goalradius; + self.oldpathenemyfightdist = self.pathenemyfightdist; + self.oldpathenemylookahead = self.pathenemylookahead; + self.pathenemyfightdist = 128; + self.pathenemylookahead = 128; + maps\_utility::func_E03(); + anim_changes_pushplayer(1); + self.nododgemove = 1; + self.fixednodewason = self.fixednode; + self.fixednode = 0; + if(!isdefined(self.scriptedarrivalent)) + { + self.old_disablearrivals = self.disablearrivals; + self.disablearrivals = 1; + } + + self.reach_goal_pos = undefined; + return param_00; +} + +//Function Number: 70 +reach_with_standard_adjustments_end() +{ + anim_changes_pushplayer(0); + self.nododgemove = 0; + self.fixednode = self.fixednodewason; + self.fixednodewason = undefined; + self.pathenemyfightdist = self.oldpathenemyfightdist; + self.pathenemylookahead = self.oldpathenemylookahead; + self.disablearrivals = self.old_disablearrivals; +} + +//Function Number: 71 +anim_changes_pushplayer(param_00) +{ + if(isdefined(self.dontchangepushplayer)) + { + return; + } + + self pushplayer(param_00); +} + +//Function Number: 72 +reach_with_arrivals_begin(param_00) +{ + param_00 = reach_with_standard_adjustments_begin(param_00); + self.disablearrivals = 0; + return param_00; +} + +//Function Number: 73 +reach_with_planting(param_00) +{ + var_01 = self getdroptofloorposition(param_00); + param_00 = var_01; + param_00 = reach_with_standard_adjustments_begin(param_00); + self.disablearrivals = 1; + return param_00; +} + +//Function Number: 74 +func_0E0B(param_00) +{ + var_01 = self getdroptofloorposition(param_00); + param_00 = var_01; + param_00 = reach_with_standard_adjustments_begin(param_00); + self.disablearrivals = 0; + return param_00; +} + +//Function Number: 75 +setanimtree() +{ + self useanimtree(level.scr_animtree[self.animname]); +} + +//Function Number: 76 +func_0E0E(param_00,param_01,param_02,param_03,param_04) +{ + self endon("death"); + var_05[0] = param_00; + if(!isdefined(param_03)) + { + param_03 = 0; + } + + anim_single(var_05,param_01,param_02,param_03,param_04); +} + +//Function Number: 77 +func_0E0F(param_00,param_01,param_02) +{ + self endon("death"); + var_03[0] = param_00; + anim_single(var_03,param_01,param_02,0.25); +} + +//Function Number: 78 +anim_single_run_solo(param_00,param_01,param_02,param_03) +{ + self endon("death"); + var_04[0] = param_00; + anim_single(var_04,param_01,param_02,0.25); +} + +//Function Number: 79 +anim_reach_and_idle_solo(param_00,param_01,param_02,param_03,param_04) +{ + self endon("death"); + var_05[0] = param_00; + anim_reach_and_idle(var_05,param_01,param_02,param_03,param_04); +} + +//Function Number: 80 +func_0E12(param_00,param_01,param_02) +{ + self endon("death"); + var_03[0] = param_00; + anim_reach(var_03,param_01,param_02); +} + +//Function Number: 81 +anim_reach_and_approach_solo(param_00,param_01,param_02,param_03) +{ + self endon("death"); + var_04[0] = param_00; + func_0E15(var_04,param_01,param_02,param_03); +} + +//Function Number: 82 +anim_reach_and_approach_node_solo(param_00,param_01,param_02) +{ + self endon("death"); + var_03[0] = param_00; + var_04 = spawn("script_origin",self.origin); + var_04.type = self.type; + var_04.angles = self.angles; + var_04.arrivalstance = self gethighestnodestance(); + param_00.scriptedarrivalent = var_04; + func_0E15(var_03,param_01,param_02); + param_00.scriptedarrivalent = undefined; + var_04 delete(); + while(param_00.a.movement != "stop") + { + wait 0.05; + } +} + +//Function Number: 83 +func_0E15(param_00,param_01,param_02,param_03) +{ + self endon("death"); + anim_reach_with_funcs(param_00,param_01,param_02,undefined,::reach_with_arrivals_begin,::reach_with_standard_adjustments_end,param_03); +} + +//Function Number: 84 +func_0E16(param_00,param_01,param_02,param_03) +{ + self endon("death"); + param_00 endon("death"); + var_04[0] = param_00; + func_0DC1(var_04,param_01,param_02,param_03); +} + +//Function Number: 85 +anim_teleport_solo(param_00,param_01,param_02) +{ + self endon("death"); + var_03[0] = param_00; + anim_teleport(var_03,param_01,param_02); +} + +//Function Number: 86 +func_0E18(param_00,param_01) +{ + if(!isdefined(level.completedanims)) + { + level.completedanims[param_00][0] = param_01; + return; + } + + if(!isdefined(level.completedanims[param_00])) + { + level.completedanims[param_00][0] = param_01; + return; + } + + for(var_02 = 0;var_02 < level.completedanims[param_00].size;var_02++) + { + if(level.completedanims[param_00][var_02] == param_01) + { + return; + } + } + + level.completedanims[param_00][level.completedanims[param_00].size] = param_01; +} + +//Function Number: 87 +anim_single_queue(param_00,param_01,param_02,param_03) +{ + if(!isdefined(param_03)) + { + param_03 = 0; + } + + if(isdefined(param_00.last_queue_time)) + { + maps\_utility::wait_for_buffer_time_to_pass(param_00.last_queue_time,0.5); + } + + maps\_utility::func_E1D(::func_0E0E,param_00,param_01,param_02,param_03); + if(isalive(param_00)) + { + param_00.last_queue_time = gettime(); + } +} + +//Function Number: 88 +anim_generic_queue(param_00,param_01,param_02,param_03,param_04) +{ + param_00 endon("death"); + if(!isdefined(param_03)) + { + param_03 = 0; + } + + if(isdefined(param_00.last_queue_time)) + { + maps\_utility::wait_for_buffer_time_to_pass(param_00.last_queue_time,0.5); + } + + if(isdefined(param_04)) + { + maps\_utility::function_stack_timeout(param_04,::func_0E0E,param_00,param_01,param_02,param_03,"generic"); + } + else + { + maps\_utility::func_E1D(::func_0E0E,param_00,param_01,param_02,param_03,"generic"); + } + + if(isalive(param_00)) + { + param_00.last_queue_time = gettime(); + } +} + +//Function Number: 89 +anim_dontpushplayer(param_00) +{ + foreach(var_02 in param_00) + { + var_02 pushplayer(0); + } +} + +//Function Number: 90 +anim_pushplayer(param_00) +{ + foreach(var_02 in param_00) + { + var_02 pushplayer(1); + } +} + +//Function Number: 91 +addnotetrack_dialogue(param_00,param_01,param_02,param_03) +{ + param_01 = tolower(param_01); + param_02 = get_generic_anime(param_02); + var_04 = add_notetrack_and_get_index(param_00,param_01,param_02); + level.scr_notetrack[param_00][param_02][param_01][var_04] = []; + level.scr_notetrack[param_00][param_02][param_01][var_04]["dialog"] = param_03; +} + +//Function Number: 92 +add_notetrack_and_get_index(param_00,param_01,param_02) +{ + param_01 = tolower(param_01); + func_0E24(param_00,param_01,param_02); + return level.scr_notetrack[param_00][param_02][param_01].size; +} + +//Function Number: 93 +func_0E24(param_00,param_01,param_02) +{ + param_01 = tolower(param_01); + if(!isdefined(level.scr_notetrack)) + { + level.scr_notetrack = []; + } + + if(!isdefined(level.scr_notetrack[param_00])) + { + level.scr_notetrack[param_00] = []; + } + + if(!isdefined(level.scr_notetrack[param_00][param_02])) + { + level.scr_notetrack[param_00][param_02] = []; + } + + if(!isdefined(level.scr_notetrack[param_00][param_02][param_01])) + { + level.scr_notetrack[param_00][param_02][param_01] = []; + } +} + +//Function Number: 94 +addnotetrack_sound(param_00,param_01,param_02,param_03) +{ + param_01 = tolower(param_01); + param_02 = get_generic_anime(param_02); + var_04 = add_notetrack_and_get_index(param_00,param_01,param_02); + level.scr_notetrack[param_00][param_02][param_01][var_04] = []; + level.scr_notetrack[param_00][param_02][param_01][var_04]["sound"] = param_03; +} + +//Function Number: 95 +get_generic_anime(param_00) +{ + if(!isdefined(param_00)) + { + return "any"; + } + + return param_00; +} + +//Function Number: 96 +func_0E27(param_00,param_01,param_02) +{ + if(!isdefined(level.scr_animsound[param_00])) + { + level.scr_animsound[param_00] = []; + } + + level.scr_animsound[param_00][param_01] = param_02; +} + +//Function Number: 97 +addnotetrack_animsound(param_00,param_01,param_02,param_03) +{ + param_02 = tolower(param_02); + param_01 = get_generic_anime(param_01); + var_04 = add_notetrack_and_get_index(param_00,param_02,param_01); + var_05 = []; + level.scr_notetrack[param_01][param_02][param_03][var_05] = var_41; +} + +//Function Number: 98 +func_0E29(param_00,param_01,param_02,param_03,param_04) +{ + param_01 = tolower(param_01); + param_04 = get_generic_anime(param_04); + var_05 = add_notetrack_and_get_index(param_00,param_01,param_04); + var_06 = []; + level.scr_notetrack[param_01][var_05][param_02][var_06] = var_41; +} + +//Function Number: 99 +addnotetrack_detach(param_00,param_01,param_02,param_03,param_04) +{ + param_01 = tolower(param_01); + param_04 = get_generic_anime(param_04); + var_05 = add_notetrack_and_get_index(param_00,param_01,param_04); + var_06 = []; + level.scr_notetrack[param_01][var_05][param_02][var_06] = var_41; +} + +//Function Number: 100 +addnotetrack_detach_gun(param_00,param_01,param_02,param_03) +{ + param_01 = tolower(param_01); + param_02 = get_generic_anime(param_02); + var_04 = add_notetrack_and_get_index(param_00,param_01,param_02); + var_05 = []; + if(isdefined(var_04)) + { + } + + level.scr_notetrack[param_01][param_03][param_02][var_05] = var_41; +} + +//Function Number: 101 +addnotetrack_customfunction(param_00,param_01,param_02,param_03) +{ + param_01 = tolower(param_01); + param_03 = get_generic_anime(param_03); + var_04 = add_notetrack_and_get_index(param_00,param_01,param_03); + var_05 = []; + level.scr_notetrack[param_01][var_04][param_02][var_05] = var_41; +} + +//Function Number: 102 +addnotetrack_startfxontag(param_00,param_01,param_02,param_03,param_04) +{ + common_scripts\utility::func_539(param_03); + param_01 = tolower(param_01); + param_02 = get_generic_anime(param_02); + var_05 = add_notetrack_and_get_index(param_00,param_01,param_02); + var_06 = []; + level.scr_notetrack[param_01][param_03][param_02][var_06] = var_41; +} + +//Function Number: 103 +func_0E2E(param_00,param_01,param_02,param_03,param_04) +{ + common_scripts\utility::func_539(param_03); + param_01 = tolower(param_01); + param_02 = get_generic_anime(param_02); + var_05 = add_notetrack_and_get_index(param_00,param_01,param_02); + var_06 = []; + level.scr_notetrack[param_01][param_03][param_02][var_06] = var_41; +} + +//Function Number: 104 +addnotetrack_flag(param_00,param_01,param_02,param_03) +{ + param_01 = tolower(param_01); + param_03 = get_generic_anime(param_03); + var_04 = add_notetrack_and_get_index(param_00,param_01,param_03); + var_05 = []; + level.scr_notetrack[param_01][var_04][param_02][var_05] = var_41; + if(!isdefined(level.flag) || !isdefined(level.flag[param_03])) + { + common_scripts\utility::flag_init(param_03); + } +} + +//Function Number: 105 +func_0E30(param_00,param_01,param_02,param_03) +{ + param_01 = tolower(param_01); + param_03 = get_generic_anime(param_03); + var_04 = add_notetrack_and_get_index(param_00,param_01,param_03); + var_05 = []; + level.scr_notetrack[param_01][var_04][param_02][var_05] = var_41; + if(!isdefined(level.flag) || !isdefined(level.flag[param_03])) + { + common_scripts\utility::flag_init(param_03); + } +} + +//Function Number: 106 +func_0E31(param_00,param_01,param_02) +{ + param_00 endon("death"); + self endon(param_01); + var_03 = 0.05; + param_00 notify("newLookTarget"); + waittillframeend; + param_00 setanim(%scripted_talking,5,0.2); + param_00 setflaggedanimknobrestart("face_done_" + param_01,param_02,1,0,1); + thread func_0E32(param_00,param_01,param_02); + thread clearfaceanimonanimdone(param_00,"face_done_" + param_01,param_01); +} + +//Function Number: 107 +func_0E32(param_00,param_01,param_02) +{ + param_00 endon("death"); + param_00 endon("stop_loop"); + self endon(param_01); + for(;;) + { + param_00 setanim(%scripted_talking,5,0.4); + param_00 setflaggedanimknoblimited("face_done_" + param_01,param_02,1,0,1); + wait 0.05; + } +} + +//Function Number: 108 +anim_facialfiller(param_00,param_01) +{ + self endon("death"); + var_02 = 0.05; + self notify("newLookTarget"); + self endon("newLookTarget"); + waittillframeend; + if(!isdefined(param_01) && isdefined(self.looktarget)) + { + param_01 = self.looktarget; + } + + var_03 = %generic_talker_allies; + if(self isbadguy()) + { + var_03 = %generic_talker_axis; + } + + self setanimknoblimitedrestart(var_03,1,0,1); + self setanim(%scripted_talking,5,0.4); + set_talker_until_msg(param_00,var_03); + var_02 = 0.3; + self clearanim(%scripted_talking,0.2); +} + +//Function Number: 109 +set_talker_until_msg(param_00,param_01) +{ + self endon(param_00); + for(;;) + { + wait 0.2; + self setanimknoblimited(param_01,1,0,1); + self setanim(%scripted_talking,5,0.4); + } +} + +//Function Number: 110 +talk_for_time(param_00) +{ + self endon("death"); + var_01 = %generic_talker_allies; + if(self isbadguy()) + { + var_01 = %generic_talker_axis; + } + + self setanimknoblimitedrestart(var_01,1,0,1); + self setanim(%scripted_talking,5,0.4); + wait param_00; + var_02 = 0.3; + self clearanim(%scripted_talking,0.2); +} + +//Function Number: 111 +getyawangles(param_00,param_01) +{ + var_02 = param_00[1] - param_01[1]; + var_02 = angleclamp180(var_02); + return var_02; +} + +//Function Number: 112 +lookline(param_00,param_01) +{ + self notify("lookline"); + self endon("lookline"); + self endon(param_01); + self endon("death"); + wait 0.05; +} + +//Function Number: 113 +anim_reach_idle(param_00,param_01,param_02) +{ + var_03 = spawnstruct(); + var_03.count = param_00.size; + foreach(var_05 in param_00) + { + thread reachidle(var_05,param_01,param_02,var_03); + } + + while(var_03.count) + { + var_03 waittill("reached_goal"); + } + + self notify("stopReachIdle"); +} + +//Function Number: 114 +reachidle(param_00,param_01,param_02,param_03) +{ + func_0E12(param_00,param_01); + param_03.count--; + param_03 notify("reached_goal"); + if(param_03.count > 0) + { + func_0E16(param_00,param_02,"stopReachIdle"); + } +} + +//Function Number: 115 +delayeddialogue(param_00,param_01,param_02,param_03) +{ + if(animhasnotetrack(param_03,"dialog")) + { + self waittillmatch("dialog","face_done_" + param_00); + } + + if(param_01) + { + animscripts/face::sayspecificdialogue(undefined,param_02,1); + return; + } + + animscripts/face::sayspecificdialogue(undefined,param_02,1,"single dialogue"); +} + +//Function Number: 116 +clearfaceanimonanimdone(param_00,param_01,param_02) +{ + param_00 endon("death"); + param_00 waittillmatch("end",param_01); + var_03 = 0.3; + param_00 clearanim(%scripted_talking,0.2); +} + +//Function Number: 117 +anim_start_pos(param_00,param_01,param_02) +{ + var_03 = get_anim_position(param_02); + var_04 = var_03["origin"]; + var_05 = var_03["angles"]; + common_scripts\utility::array_thread(param_00,::set_start_pos,param_01,var_04,var_05); +} + +//Function Number: 118 +anim_start_pos_solo(param_00,param_01,param_02) +{ + var_03[0] = param_00; + anim_start_pos(var_03,param_01,param_02); +} + +//Function Number: 119 +set_start_pos(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = undefined; + if(isdefined(param_03)) + { + var_05 = param_03; + } + else + { + var_05 = self.animname; + } + + if(isdefined(param_04) && param_04) + { + var_06 = level.scr_anim[var_05][param_00][0]; + } + else + { + var_06 = level.scr_anim[var_06][param_01]; + } + + if(isai(self)) + { + var_07 = getstartorigin(param_01,param_02,var_06); + var_08 = getstartangles(param_01,param_02,var_06); + if(isdefined(self.anim_start_at_groundpos)) + { + var_07 = maps\_utility::func_E3F(var_07); + } + + self forceteleport(var_07,var_08); + return; + } + + if(self.code_classname == "script_vehicle") + { + self vehicle_teleport(getstartorigin(param_01,param_02,var_06),getstartangles(param_01,param_02,var_06)); + return; + } + + self.origin = getstartorigin(param_01,param_02,var_06); + self.angles = getstartangles(param_01,param_02,var_06); +} + +//Function Number: 120 +anim_at_self(param_00,param_01) +{ + var_02 = []; + return var_41; +} + +//Function Number: 121 +anim_at_entity(param_00,param_01) +{ + var_02 = []; + return var_41; +} + +//Function Number: 122 +add_to_animsound() +{ + if(!isdefined(self.animsounds)) + { + self.animsounds = []; + } + + var_00 = 0; + for(var_01 = 0;var_01 < level.animsounds.size;var_01++) + { + if(self == level.animsounds[var_01]) + { + var_00 = 1; + break; + } + } + + if(!var_00) + { + level.animsounds[level.animsounds.size] = self; + } +} + +//Function Number: 123 +func_0E43(param_00,param_01,param_02) +{ + param_00 thread anim_set_rate_internal(param_01,param_02); +} + +//Function Number: 124 +anim_set_rate(param_00,param_01,param_02) +{ + common_scripts\utility::array_thread(param_00,::anim_set_rate_internal,param_01,param_02); +} + +//Function Number: 125 +anim_set_rate_internal(param_00,param_01,param_02) +{ + var_03 = undefined; + if(isdefined(param_02)) + { + var_03 = param_02; + } + else + { + var_03 = self.animname; + } + + self setflaggedanim("single anim",maps\_utility::getanim_from_animname(param_00,var_03),1,0,param_01); +} + +//Function Number: 126 +anim_set_time(param_00,param_01,param_02) +{ + common_scripts\utility::array_thread(param_00,::func_0E48,param_01,param_02); +} + +//Function Number: 127 +func_0E48(param_00,param_01) +{ + var_02 = maps\_utility::getanim(param_00); + self setanimtime(var_02,param_01); +} + +//Function Number: 128 +last_anim_time_check() +{ + if(!isdefined(self.last_anim_time)) + { + self.last_anim_time = gettime(); + return; + } + + var_00 = gettime(); + if(self.last_anim_time == var_00) + { + self endon("death"); + wait 0.05; + } + + self.last_anim_time = var_00; +} + +//Function Number: 129 +func_0E4C(param_00,param_01) +{ + param_00.var_D8B = ::animscripts/cover_arrival::custommovetransitionfunc; + param_00.startmovetransitionanim = level.scr_anim[param_00.animname][param_01]; +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_animatedmodels.gsc b/MW3/Xbox/SP/maps/_animatedmodels.gsc new file mode 100644 index 0000000..72462f9 --- /dev/null +++ b/MW3/Xbox/SP/maps/_animatedmodels.gsc @@ -0,0 +1 @@ +Failed to decompile this file, open a ticket if you need this fixed. \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_arcademode.gsc b/MW3/Xbox/SP/maps/_arcademode.gsc new file mode 100644 index 0000000..ccd27d0 --- /dev/null +++ b/MW3/Xbox/SP/maps/_arcademode.gsc @@ -0,0 +1,1998 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_arcademode.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 63 + * Decompile Time: 1488 ms + * Timestamp: 10/27/2023 2:33:58 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + precachestring(&"SCRIPT_COLON"); + precachestring(&"SCRIPT_TIME_REMAINING"); + precachestring(&"SCRIPT_TOTAL_SCORE"); + precachestring(&"SCRIPT_EXTRA_LIFE"); + precachestring(&"SCRIPT_CHECKPOINT"); + precachestring(&"SCRIPT_MISSION_SCORE"); + precachestring(&"SCRIPT_ZERO_DEATHS"); + precachestring(&"SCRIPT_PLUS"); + precachestring(&"SCRIPT_TIME_UP"); + precachestring(&"SCRIPT_1UP"); + precachestring(&"SCRIPT_GAME_OVER"); + precachestring(&"SCRIPT_DIFFICULTY_BONUS_ONEANDAHALF"); + precachestring(&"SCRIPT_DIFFICULTY_BONUS_THREE"); + precachestring(&"SCRIPT_DIFFICULTY_BONUS_FOUR"); + precachestring(&"SCRIPT_MISSION_COMPLETE"); + precachestring(&"SCRIPT_NEW_HIGH_SCORE"); + precachestring(&"SCRIPT_STREAK_BONUS_LOST"); + precachestring(&"SCRIPT_STREAK_COMPLETE"); + precachestring(&"SCRIPT_X"); + precacheshader("arcademode_life"); + level.color_cool_green = (0.8,2,0.8); + level.color_cool_green_glow = (0.3,0.6,0.3); + arcademode_init_kill_streak_colors(); + level.arcademode_checkpoint_dvars = []; + level.arcademode_checkpoint_max = 10; + level.arcademode_kills_hud = []; + level.arcademode_kill_streak_ends = 0; + level.arcademode_last_streak_time = 0; + level.arcademode_ramping_score = 0; + level.arcademode_new_kill_streak_allowed = 1; + common_scripts\utility::flag_init("arcadeMode_multiplier_maxed"); + setdvar("arcademode_lives_changed",0); + level.arcademode_kill_streak_current_multiplier = 1; + level.arcademode_kill_streak_multiplier_count = 3; + arcademode_reset_kill_streak(); + for(var_00 = 0;var_00 < level.arcademode_checkpoint_max;var_00++) + { + setdvar("arcademode_checkpoint_" + var_00,""); + } + + level.arcademode_last_multi_kill_sound = 0; + level.arcademode_success = 0; + arcademode_define_damage_multipliers(); + common_scripts\utility::flag_init("arcademode_complete"); + common_scripts\utility::flag_init("arcademode_ending_complete"); + waittillframeend; + level.global_kill_func = ::player_kill; + level.global_damage_func_ads = ::player_damage_ads; + level.var_5D2 = ::player_damage; + level.arcademode_hud_sort = 50; + level.arcademode_maxlives = 10; + level.var_5D5 = 0; + if(getdvar("arcademode_lives") == "" || getdvar("arcademode_full") != "1" || level.script == "cargoship") + { + setdvar("arcademode_lives",2); + level.var_5D5 = 2; + } + + if(getdvar("arcademode_full") == "1" && level.script == "cargoship") + { + setdvar("arcademode_lives",5); + level.var_5D5 = 5; + } + + var_01 = getdvarint("arcadeMode_lives"); + setdvar("arcademode_earned_lives",var_01); + level.arcademode_playthrough = getdvarint("arcademode_playthrough_count"); + level.arcademode_playthrough++; + setdvar("arcademode_playthrough_count",level.arcademode_playthrough); + setdvar("arcademode_died",0); + setdvar("arcademode_score",0); + if(getdvar("arcademode_combined_score") == "" || getdvar("arcademode_full") == "1" && level.script == "cargoship") + { + setdvar("arcademode_combined_score",0); + } + + var_02 = arcademode_get_level_time(); + var_02 = var_02 * 60; + level.arcdemode_starttime = gettime(); + level.arcademode_time = var_02; + level.arcademode_killbase = 50; + level.arcademode_damagebase = 5; + level.arcademode_multikills = []; + var_03 = getarraykeys(level.arcademode_weaponmultiplier); + for(var_00 = 0;var_00 < var_03.size;var_00++) + { + level.arcademode_multikills[var_03[var_00]] = []; + } + + var_04 = level.arcademode_multikills; + thread arcademode_update_lives(); + thread arcademode_update_score(); + thread arcademode_update_timer(); + thread arcademode_death_detection(); + arcademode_redraw_lives(var_01); + for(;;) + { + wait 0.05; + waittillframeend; + waittillframeend; + var_03 = getarraykeys(level.arcademode_multikills); + common_scripts\utility::array_levelthread(var_03,::arcademode_add_points_for_mod); + level.arcademode_multikills = var_04; + } +} + +//Function Number: 2 +arcademode_complete() +{ + if(getdvar("arcademode") != "1") + { + return 0; + } + + return common_scripts\utility::flag("arcademode_complete"); +} + +//Function Number: 3 +arcademode_get_level_time() +{ + var_00 = 20; + var_01 = []; + var_02 = 1; + if(isdefined(var_01[level.script])) + { + var_00 = var_01[level.script]; + } + + level.arcademode_difficultytimerscale = var_02; + return var_00; +} + +//Function Number: 4 +arcademode_death_detection() +{ + level endon("arcademode_complete"); + level maps\_utility::add_wait(::common_scripts\utility::flag_wait,"missionfailed"); + level.player maps\_utility::add_wait(::maps\_utility::waittill_msg,"death"); + maps\_utility::do_wait_any(); + setdvar("arcademode_died",1); + var_00 = getdvarint("arcademode_lives"); + var_01 = getdvarint("arcademode_earned_lives"); + if(var_00 > var_01) + { + var_00 = var_01; + } + + var_00 = var_00 - 1; + setdvar("arcademode_lives",var_00); + setdvar("arcademode_lives_changed",-1); + arcademode_redraw_lives(var_00 + 1); + level.var_5E4 = 1; + updatescoreelemsonce(); + if(var_00 < 0) + { + wait 1.5; + level.arcademode_failurestring = &"SCRIPT_GAME_OVER"; + thread arcademode_ends(); + return; + } + + if(isalive(level.player)) + { + missionfailed(); + } +} + +//Function Number: 5 +arcademode_update_timer() +{ + level.player endon("death"); + var_00 = newhudelem(); + var_00.foreground = 1; + var_00.alignx = "right"; + var_00.aligny = "top"; + var_00.horzalign = "right"; + var_00.vertalign = "top"; + var_00.x = 0; + var_00.y = 60; + var_00.sort = level.arcademode_hud_sort; + var_00.fontscale = 3; + var_00.color = (0.8,1,0.8); + var_00.font = "objective"; + var_00.glowcolor = (0.3,0.6,0.3); + var_00.glowalpha = 1; + var_00.hidewheninmenu = 1; + level.arcademode_hud_timer = var_00; + level endon("arcadeMode_remove_timer"); + var_01 = level.arcademode_time; + var_00 settimer(var_01 - 0.1); + wait var_01; + level.arcademode_failurestring = &"SCRIPT_TIME_UP"; + thread arcademode_ends(); +} + +//Function Number: 6 +arcademode_update_lives() +{ + level.player endon("death"); + level endon("missionfailed"); + level.arcademode_lives_hud = []; + for(var_00 = 0;var_00 < level.arcademode_maxlives;var_00++) + { + arcademode_add_life(var_00,16,78,-18,64,level.arcademode_hud_sort); + } + + for(;;) + { + var_01 = getdvarint("arcademode_lives_changed"); + if(var_01 != 0) + { + var_02 = getdvarint("arcademode_lives"); + if(var_02 < 0) + { + level.arcademode_failurestring = &"SCRIPT_GAME_OVER"; + thread arcademode_ends(); + return; + } + + if(var_01 == -1) + { + level notify("lost_streak"); + level.arcademode_kill_streak_ends = gettime(); + thread arcademode_add_kill_streak_time(0); + level.arcademode_new_kill_streak_allowed = 0; + var_03 = getdvarint("arcademode_earned_lives"); + var_03--; + var_02 = var_03; + setdvar("arcademode_earned_lives",var_03); + setdvar("arcademode_lives",var_03); + } + + arcademode_redraw_lives(var_02); + level.var_5E4 = 1; + setdvar("arcademode_lives_changed",0); + } + + wait 0.05; + } +} + +//Function Number: 7 +arcademode_convert_extra_lives() +{ + var_00 = getdvarint("arcademode_lives"); + var_01 = getdvarint("arcademode_earned_lives"); + if(var_00 > var_01) + { + thread extra_lives_display(var_00 - var_01); + } + + setdvar("arcademode_earned_lives",var_00); + thread arcademode_redraw_lives(var_00); + return var_00 > var_01; +} + +//Function Number: 8 +arcademode_checkpoint_print() +{ + if(!maps\_utility::arcademode()) + { + return; + } + + arcademode_convert_extra_lives(); + var_00 = 800; + var_01 = 0.8; + level.player thread common_scripts\utility::play_sound_in_space("arcademode_checkpoint",level.player geteye()); + thread draw_checkpoint(var_00,var_01,1); + thread draw_checkpoint(var_00,var_01,-1); +} + +//Function Number: 9 +arcademode_redraw_life(param_00,param_01) +{ + if(param_00 >= param_01) + { + self setshader("arcademode_life",64,64); + } + else + { + self setshader("stance_stand",64,64); + } + + self fadeovertime(1); + self.alpha = 1; + self.glowalpha = 1; + self.color = level.color_cool_green; +} + +//Function Number: 10 +arcademode_remove_life(param_00) +{ + if(self.alpha <= 0) + { + return; + } + + self fadeovertime(1); + self.alpha = 0; + self.color = (1,0,0); + self.glowalpha = 0; +} + +//Function Number: 11 +arcademode_redraw_lives(param_00) +{ + if(param_00 > 10) + { + param_00 = 10; + } + + var_01 = getdvarint("arcademode_earned_lives"); + for(var_02 = 0;var_02 < param_00;var_02++) + { + level.arcademode_lives_hud[var_02] arcademode_redraw_life(var_02,var_01); + } + + for(var_02 = param_00;var_02 < level.arcademode_maxlives;var_02++) + { + if(var_02 < 0) + { + continue; + } + + if(var_02 >= 10) + { + continue; + } + + level.arcademode_lives_hud[var_02] arcademode_remove_life(var_02); + } +} + +//Function Number: 12 +arcademode_update_streak_progress() +{ + for(;;) + { + level common_scripts\utility::waittill_either("arcademode_decrement_kill_streak","arcademode_new_kill"); + waittillframeend; + arcademode_redraw_streak_progress(); + } +} + +//Function Number: 13 +arcademode_redraw_streak_progress() +{ + for(var_00 = 0;var_00 < level.arcademode_kill_streak_current_count;var_00++) + { + if(var_00 >= level.arcademode_kills_hud.size) + { + return; + } + + level.arcademode_kills_hud[var_00].color = level.arcademode_streak_color[level.arcademode_kill_streak_current_multiplier - 1]; + level.arcademode_kills_hud[var_00].glowcolor = level.arcademode_streak_glow[level.arcademode_kill_streak_current_multiplier - 1]; + } + + var_01 = 0; + for(;;) + { + var_02 = level.arcademode_kill_streak_current_multiplier + var_01; + if(var_02 >= level.arcademode_streak_color.size) + { + var_02 = level.arcademode_streak_color.size - 1; + } + + for(var_00 = level.arcademode_kill_streak_current_count + var_01 * level.arcademode_kill_streak_multiplier_count;var_00 < level.arcademode_kill_streak_current_count + var_01 + 1 * level.arcademode_kill_streak_multiplier_count;var_00++) + { + if(var_00 >= level.arcademode_kills_hud.size) + { + return; + } + + level.arcademode_kills_hud[var_00].color = level.arcademode_streak_color[var_02]; + level.arcademode_kills_hud[var_00].glowcolor = level.arcademode_streak_glow[var_02]; + } + + var_01++; + } +} + +//Function Number: 14 +arcademode_add_kill(param_00,param_01,param_02,param_03,param_04,param_05) +{ + level endon("arcademode_stop_kill_streak_art"); + var_06 = newhudelem(); + var_06.foreground = 1; + var_06.x = param_01 + param_00 * param_03; + if(level.arcademode_kills_hud.size == 0) + { + level.arcademode_kill_zero_x_location = var_06.x; + } + + var_06.y = param_02; + var_06 setshader("arcademode_kill",param_04,param_04); + var_06.alignx = "right"; + var_06.aligny = "top"; + var_06.horzalign = "right"; + var_06.vertalign = "top"; + var_06.sort = param_05; + var_06.color = level.color_cool_green; + var_06.glowcolor = level.color_cool_green_glow; + var_06.glowalpha = 1; + var_06.hidewheninmenu = 1; + var_07 = 0; + level.arcademode_kills_hud[level.arcademode_kills_hud.size] = var_06; + if(level.arcademode_kills_hud.size == 10) + { + var_07 = 1; + var_06.alpha = 0; + } + else + { + var_06.alpha = 1; + } + + for(;;) + { + if(var_06.x == level.arcademode_kill_zero_x_location) + { + var_08 = 4; + if(level.arcademode_kills_hud.size == 1) + { + wait 3; + } + + var_06 fadeovertime(var_08); + var_06.color = (1,0,0); + var_06.alpha = 0; + wait var_08; + level notify("arcademode_decrement_kill_streak"); + var_06 destroy(); + for(var_09 = 0;var_09 < level.arcademode_kills_hud.size - 1;var_09++) + { + level.arcademode_kills_hud[var_09] = level.arcademode_kills_hud[var_09 + 1]; + } + + level.arcademode_kills_hud[level.arcademode_kills_hud.size - 1] = undefined; + if(!level.arcademode_kills_hud.size) + { + thread arcademode_reset_kill_streak(); + } + + return; + } + + level waittill("arcademode_decrement_kill_streak"); + wait 0.05; + var_08 moveovertime(0.5); + var_08.x = var_08.x - param_05; + if(var_09) + { + var_08 fadeovertime(0.5); + var_08.alpha = 1; + var_09 = 0; + } + } +} + +//Function Number: 15 +get_streak_hud(param_00,param_01,param_02,param_03) +{ + var_04 = newhudelem(); + var_04.foreground = 1; + var_04.x = param_00 + -4; + var_04.y = param_01 + 14; + var_04.alignx = "right"; + var_04.aligny = "top"; + var_04.horzalign = "right"; + var_04.vertalign = "top"; + var_04.color = level.color_cool_green; + var_04.sort = level.arcademode_hud_sort - 1; + var_04.alpha = 0; + var_04.glowcolor = level.color_cool_green_glow; + var_04.glowalpha = 0; + var_04.hidewheninmenu = 1; + var_04 setshader("white",param_02,param_03); + return var_04; +} + +//Function Number: 16 +arcademode_add_kill_streak_time(param_00) +{ + if(!level.arcademode_new_kill_streak_allowed) + { + return; + } + + level notify("arcademode_new_kill_streak_time"); + level endon("arcademode_new_kill_streak_time"); + if(level.arcademode_kill_streak_ends < gettime()) + { + level.arcademode_kill_streak_ends = gettime() + param_00 * 1000; + } + else + { + level.arcademode_kill_streak_ends = level.arcademode_kill_streak_ends + param_00 * 1000; + } + + waittillframeend; + if(isdefined(level.arcademode_hud_streak)) + { + level.arcademode_hud_streak fadeovertime(0.05); + level.arcademode_hud_streak.alpha = 1; + } + + var_01 = 26; + var_02 = 12; + var_03 = 90; + var_04 = level.arcademode_streak_hud; + var_05 = level.arcademode_streak_hud_shadow; + var_06 = level.arcademode_kill_streak_ends - gettime(); + var_06 = var_06 * 0.001; + if(var_06 > var_03) + { + var_06 = var_03; + } + + var_06 = var_06 * var_02; + var_06 = int(var_06); + if(var_06 > 980) + { + var_06 = 980; + } + + if(!isdefined(var_04)) + { + var_04 = get_streak_hud(0,0,var_06,var_01); + var_05 = get_streak_hud(3,3,var_06,var_01); + var_05.sort = var_05.sort - 1; + var_05.alpha = 0; + var_05.color = (0,0,0); + } + else + { + var_04 scaleovertime(1,var_06,var_01); + var_05 scaleovertime(1,var_06,var_01); + wait 1; + } + + level.arcademode_streak_hud = var_04; + level.arcademode_streak_hud_shadow = var_05; + var_04 endon("death"); + param_00 = level.arcademode_kill_streak_ends - gettime(); + param_00 = param_00 * 0.001; + var_07 = int(param_00); + if(var_07 > var_03) + { + var_07 = var_03; + wait param_00 - var_07; + } + + for(;;) + { + var_06 = level.arcademode_kill_streak_ends - gettime(); + var_06 = var_06 * 0.001; + var_08 = var_06; + if(isdefined(level.arcademode_hud_streak)) + { + level.arcademode_hud_streak fadeovertime(1); + level.arcademode_hud_streak.alpha = var_08 - 1 / 5; + } + + var_06 = var_06 * var_02; + var_06 = int(var_06); + if(var_06 <= 0) + { + var_06 = 1; + } + + if(var_06 > 980) + { + var_06 = 980; + } + + var_04 scaleovertime(1,var_06,var_01); + var_05 scaleovertime(1,var_06,var_01); + wait 1; + if(var_06 == 1) + { + break; + } + } + + thread arcademode_reset_kill_streak(); +} + +//Function Number: 17 +arcademode_add_kill_streak() +{ + if(common_scripts\utility::flag("arcadeMode_multiplier_maxed")) + { + return; + } + + level endon("arcadeMode_multiplier_maxed"); + level endon("arcademode_stop_kill_streak"); + level.arcademode_kill_streak_current_count--; + var_00 = gettime(); + if(level.arcademode_kill_streak_current_count <= 0 && var_00 > level.arcademode_last_streak_time) + { + level.arcademode_last_streak_time = var_00; + var_01 = level.arcademode_kill_streak_current_multiplier; + level.arcademode_kill_streak_current_multiplier++; + if(level.arcademode_kill_streak_current_multiplier >= level.arcademode_streak_color.size) + { + level.arcademode_kill_streak_current_multiplier = level.arcademode_streak_color.size; + thread arcademode_multiplier_maxed(); + } + + if(var_01 != level.arcademode_kill_streak_current_multiplier) + { + level notify("arcademode_new_kill_streak"); + level.player playsound("arcademode_" + level.arcademode_kill_streak_current_multiplier + "x"); + thread arcademode_draw_multiplier(); + } + + level.arcademode_kill_streak_current_count = level.arcademode_kill_streak_multiplier_count; + } + + level notify("arcademode_new_kill"); + for(;;) + { + if(level.arcademode_kills_hud.size < 10) + { + arcademode_add_kill_streak_time(5); + return; + } + + level waittill("arcademode_decrement_kill_streak"); + } +} + +//Function Number: 18 +streak_timer_color_pulse() +{ + waittillframeend; + waittillframeend; + level.arcademode_streak_hud endon("death"); + for(;;) + { + var_00 = randomfloatrange(0.1,1); + level.arcademode_streak_hud fadeovertime(var_00); + level.arcademode_streak_hud.color = (randomfloat(1),randomfloat(1),randomfloat(1)); + wait var_00; + } +} + +//Function Number: 19 +arcademode_multiplier_maxed() +{ + waittillframeend; + if(common_scripts\utility::flag("arcadeMode_multiplier_maxed")) + { + return; + } + + common_scripts\utility::flag_set("arcadeMode_multiplier_maxed"); + var_00 = 20; + level.arcademode_kill_streak_ends = gettime() + var_00 * 1000; + thread arcademode_add_kill_streak_time(0); + thread streak_timer_color_pulse(); + musicstop(); + wait 0.05; + musicplay("airplane_alt_maximum_music"); + maps\_utility::add_wait(::maps\_utility::_wait,var_00 + 1); + level maps\_utility::add_wait(::maps\_utility::waittill_msg,"lost_streak"); + maps\_utility::do_wait_any(); + thread arcademode_reset_kill_streak(); + musicstop(); + if(isdefined(level.last_song)) + { + wait 0.05; + musicplay(level.last_song); + } +} + +//Function Number: 20 +get_hud_score() +{ + var_00 = newhudelem(); + var_00.foreground = 1; + var_00.x = 0; + var_00.y = 10; + var_00.alignx = "right"; + var_00.aligny = "top"; + var_00.horzalign = "right"; + var_00.vertalign = "top"; + var_00.score = 0; + var_00.font = "objective"; + var_00.fontscale = 5; + var_00.sort = level.arcademode_hud_sort; + var_00.glowcolor = level.color_cool_green_glow; + var_00.glowalpha = 1; + var_00.hidewheninmenu = 1; + return var_00; +} + +//Function Number: 21 +arcademode_update_score() +{ + level.player endon("death"); + level.var_603 = 10; + level.arcademode_hud_scores = []; + for(var_00 = 0;var_00 < level.var_603;var_00++) + { + level.arcademode_hud_scores[level.arcademode_hud_scores.size] = get_hud_score(); + level.arcademode_hud_scores[level.arcademode_hud_scores.size - 1].x = var_00 * -30; + } + + if(getdvarint("arcademode_full")) + { + var_01 = getdvarint("arcademode_combined_score"); + } + else + { + var_01 = getdvarint("arcademode_score"); + } + + hud_draw_score(var_01); + level.var_5E4 = 0; + for(;;) + { + wait 0.05; + updatescoreelemsonce(); + if(level.var_5E4) + { + level.var_5E4 = 0; + } + } +} + +//Function Number: 22 +updatescoreelemsonce() +{ + if(getdvarint("arcademode_full")) + { + hud_update_score("arcadeMode_combined_score"); + return; + } + + hud_update_score("arcademode_score"); +} + +//Function Number: 23 +hud_update_score(param_00) +{ + var_01 = getdvarint(param_00); + if(level.var_5E4) + { + level.arcademode_ramping_score = var_01; + hud_draw_score(var_01); + return; + } + + if(level.arcademode_ramping_score >= var_01) + { + return; + } + + var_02 = var_01 - level.arcademode_ramping_score; + var_03 = var_02 * 0.2 + 1; + if(var_02 <= 15) + { + var_03 = 1; + } + + level.arcademode_ramping_score = level.arcademode_ramping_score + var_03; + if(level.arcademode_ramping_score > var_01) + { + level.arcademode_ramping_score = var_01; + } + + hud_draw_score(int(level.arcademode_ramping_score)); +} + +//Function Number: 24 +get_digits_from_score(param_00) +{ + var_01 = []; + param_00 = int(param_00); + for(;;) + { + var_01 = int(var_01 * 0.1); + if(var_01 <= 0) + { + break; + } + } + + return var_41; +} + +//Function Number: 25 +hud_draw_score(param_00) +{ + hud_draw_score_for_elements(param_00,level.arcademode_hud_scores); +} + +//Function Number: 26 +hud_draw_score_for_elements(param_00,param_01) +{ + var_02 = get_digits_from_score(param_00); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + if(var_03 >= param_01.size - 1) + { + break; + } + + param_01[var_03] setvalue(var_02[var_03]); + param_01[var_03].alpha = 1; + } + + for(var_03 = var_02.size;var_03 < param_01.size;var_03++) + { + param_01[var_03].alpha = 0; + } + + if(param_00 == 0) + { + param_01[0].alpha = 1; + param_01[0] setvalue(0); + } +} + +//Function Number: 27 +arcademode_add_life(param_00,param_01,param_02,param_03,param_04,param_05) +{ + var_06 = newhudelem(); + var_06.foreground = 1; + var_06.x = param_01 + param_00 * param_03; + var_06.y = param_02; + var_06 setshader("stance_stand",param_04,param_04); + var_06.alignx = "right"; + var_06.aligny = "top"; + var_06.horzalign = "right"; + var_06.vertalign = "top"; + var_06.sort = param_05; + var_06.color = level.color_cool_green; + var_06.glowcolor = level.color_cool_green_glow; + var_06.glowalpha = 0; + var_06.alpha = 0; + var_06.hidewheninmenu = 1; + level.arcademode_lives_hud[level.arcademode_lives_hud.size] = var_06; +} + +//Function Number: 28 +arcademode_define_damage_multipliers() +{ + var_00[0] = 40; + level.arcademode_kills_until_next_extra_life = 10; + level.arcademode_extra_lives_range = var_41; + var_01 = []; + for(var_02 = 0;var_02 < 4;var_02++ = var_41[3]) + { + var_01[var_02] = var_41[var_02] * 0.15; + } + + level.arcademode_extra_lives_base = var_01; +} + +//Function Number: 29 +set_next_extra_life(param_00) +{ +} + +//Function Number: 30 +func_0610(param_00,param_01,param_02,param_03) +{ + var_04 = newhudelem(); + var_04.foreground = 1; + var_04.x = param_02; + var_04.y = param_03; + var_04.alignx = param_00; + var_04.aligny = "middle"; + var_04.horzalign = param_00; + var_04.vertalign = "middle"; + var_04.fontscale = 3; + if(getdvar("widescreen") == "1") + { + var_04.fontscale = 5; + } + + var_04.color = (0.8,1,0.8); + var_04.font = "objective"; + var_04.glowcolor = (0.3,0.6,0.3); + var_04.glowalpha = 1; + var_04.alpha = 0; + var_04 fadeovertime(param_01); + var_04.alpha = 1; + var_04.hidewheninmenu = 1; + var_04.sort = level.arcademode_hud_sort + 10; + return var_04; +} + +//Function Number: 31 +extra_lives_display(param_00) +{ + for(var_01 = 0;var_01 < 5;var_01++) + { + thread extra_lives_sizzle(); + } + + var_02 = func_0610("center",0.2,0,-100); + var_02.label = &"SCRIPT_EXTRA_LIFE"; + var_02 setvalue(param_00); + var_02 setpulsefx(5,3000,1000); + wait 5; + var_02 destroy(); +} + +//Function Number: 32 +fade_out(param_00) +{ + self fadeovertime(param_00); + self.alpha = 0; + wait param_00; + self destroy(); +} + +//Function Number: 33 +extra_lives_sizzle() +{ + var_00 = func_0610("center",0.2,0,-100); + var_00.alpha = randomfloatrange(0.1,0.45); + var_00.sort = var_00.sort - 1; + var_00 settext(&"SCRIPT_EXTRA_LIFE"); + var_00 maps\_utility::func_614(3,::fade_out,1); + var_00 endon("death"); + var_01 = var_00.x; + var_02 = var_00.y; + var_03 = 20; + for(;;) + { + var_04 = randomfloatrange(0.1,0.2); + var_00 moveovertime(var_04); + var_00.x = var_01 + randomfloatrange(var_03 * -1,var_03); + var_00.y = var_02 + randomfloatrange(var_03 * -1,var_03); + wait var_04; + } +} + +//Function Number: 34 +round_up_to_five(param_00) +{ + var_01 = param_00 - param_00 % 5; + if(var_01 < param_00) + { + var_01 = var_01 + 5; + } + + return var_01; +} + +//Function Number: 35 +arcademode_add_points(param_00,param_01,param_02,param_03) +{ + if(param_03 <= 0) + { + return; + } + + if(isdefined(level.arcademode_deathtypes[param_02])) + { + param_02 = level.arcademode_deathtypes[param_02]; + } + + param_03 = int(param_03); + param_03 = round_up_to_five(param_03); + param_03 = param_03 * level.arcademode_kill_streak_current_multiplier; + var_04 = getdvarint("arcademode_score"); + var_04 = var_04 + param_03; + var_05 = getdvarint("arcademode_combined_score"); + var_05 = var_05 + param_03; + setdvar("arcademode_combined_score",var_05); + setdvar("arcademode_score",var_04); + var_06 = 60; + var_07 = 1.5; + var_08 = 0.9 + param_03 - 10 * 0.01; + if(var_08 > 1.4) + { + var_08 = 1.4; + } + + var_09 = (0.75,0,0); + if(param_01) + { + thread arcademode_add_kill_streak(); + thread arcademode_add_point_towards_extra_life(); + var_09 = level.arcademode_killcolors[param_02]; + } + + level.player pointpulse(param_03); +} + +//Function Number: 36 +arcademode_add_point_towards_extra_life() +{ + level.arcademode_kills_until_next_extra_life = level.arcademode_kills_until_next_extra_life - 1; + if(level.arcademode_kills_until_next_extra_life > 0) + { + return; + } + + level.var_5D5++; + var_00 = getdvarint("arcademode_lives"); + var_00++; + if(var_00 >= level.arcademode_maxlives) + { + var_00 = level.arcademode_maxlives; + } + else + { + setdvar("arcademode_lives",var_00); + setdvar("arcademode_lives_changed",1); + } + + level.arcademode_kills_until_next_extra_life = level.arcademode_extra_lives_range[level.gameskill]; +} + +//Function Number: 37 +func_061B() +{ + var_00 = 60; + var_01 = 90; + if(level.player.var_61C > 0) + { + if(level.player.var_61C == 1) + { + var_02 = randomint(1); + level.player.thirdpointpulseside = 1 - var_02; + if(var_02) + { + var_01 = 45; + } + else + { + var_01 = 135; + } + } + else if(level.player.var_61C == 2) + { + var_02 = level.player.thirdpointpulseside; + if(var_02) + { + var_01 = 45; + } + else + { + var_01 = 135; + } + } + else if(level.player.var_61C <= 4) + { + var_01 = randomfloatrange(0,180); + var_00 = randomfloatrange(60,120); + } + else if(level.player.var_61C <= 8) + { + var_01 = randomfloatrange(0,180); + var_00 = randomfloatrange(60,160); + } + else + { + var_01 = randomfloatrange(-30,210); + var_00 = randomfloatrange(60,200); + } + } + + self.x = var_00 * cos(var_01); + self.y = 0 - var_00 * sin(var_01); +} + +//Function Number: 38 +pointpulse(param_00) +{ + if(param_00 == 0) + { + return; + } + + if(!isdefined(level.player.pointpulsecount)) + { + level.player.pointpulsecount = 0; + level.player.var_61C = 0; + } + + var_01 = newhudelem(); + var_01.horzalign = "center"; + var_01.vertalign = "middle"; + var_01.alignx = "center"; + var_01.aligny = "middle"; + var_01 func_061B(); + var_01.font = "objective"; + var_01.fontscale = 2.5; + var_01.archived = 0; + var_01.color = (0.5,0.5,0.5); + var_01.sort = 4; + var_02 = level.arcademode_kill_streak_current_multiplier; + level.player.pointpulsecount++; + level.player.var_61C++; + wait 0.05; + if(param_00 <= 0) + { + var_01.label = &""; + var_01.color = (1,0,0); + var_01.glowcolor = (0,0,0); + var_01.glowalpha = 0; + } + else + { + var_01.label = &"SCRIPT_PLUS"; + var_01.color = (1,1,1); + var_01.glowcolor = level.color_cool_green_glow; + var_01.glowalpha = 1; + } + + var_01 setvalue(param_00); + var_01.alpha = 1; + var_01 changefontscaleovertime(0.15); + var_01.fontscale = 3.5; + wait 0.15; + var_01 moveovertime(1.75); + var_01.y = var_01.y - 40; + var_01 changefontscaleovertime(0.25); + var_01.fontscale = 2.5; + wait 0.25; + wait 0.5; + var_01 fadeovertime(1); + var_01.alpha = 0; + wait 0.5; + level.player.pointpulsecount--; + if(level.player.pointpulsecount == 0) + { + level.player.var_61C = 0; + } + + var_01 destroy(); +} + +//Function Number: 39 +set_circular_origin() +{ + var_00 = 50; + for(;;) + { + var_01 = randomint(var_00); + var_02 = randomint(var_00); + if(distance((0,0,0),(var_01,var_02,0)) < var_00) + { + break; + } + } + + if(common_scripts\utility::cointoss()) + { + var_01 = var_01 * -1; + } + + if(common_scripts\utility::cointoss()) + { + var_02 = var_02 * -1; + } + + self.x = var_01; + self.y = var_02; +} + +//Function Number: 40 +arcademode_add_points_for_mod(param_00) +{ + for(var_01 = 0;var_01 < level.arcademode_multikills[param_00].size;var_01++) + { + arcademode_add_points_for_individual_kill(level.arcademode_multikills[param_00][var_01],param_00,level.arcademode_multikills[param_00].size); + } +} + +//Function Number: 41 +arcademode_add_points_for_individual_kill(param_00,param_01,param_02) +{ + if(param_00["type"] != "melee") + { + var_03 = level.arcademode_killbase + level.var_623[param_00["damage_location"]] + level.var_624[param_00["type"]]; + } + else + { + var_03 = level.arcademode_killbase + level.var_624[param_01["type"]]; + } + + thread arcademode_add_points(param_00["origin"],1,param_01,var_03); +} + +//Function Number: 42 +player_kill(param_00,param_01,param_02) +{ + if(!isdefined(param_01)) + { + param_01 = "none"; + } + + var_03 = level.arcademode_deathtypes[param_00]; + if(!isdefined(var_03)) + { + var_04 = level.arcademode_killbase; + thread arcademode_add_points(param_02,1,"melee",var_04); + return; + } + + var_05["damage_location"] = param_02; + if(var_05 == "explosive") + { + } + + level.arcademode_multikills[var_05][level.arcademode_multikills[var_05].size] = var_41; +} + +//Function Number: 43 +player_damage(param_00,param_01,param_02) +{ + thread arcademode_add_points(param_02,0,param_00,level.arcademode_damagebase); +} + +//Function Number: 44 +player_damage_ads(param_00,param_01,param_02) +{ + thread arcademode_add_points(param_02,0,param_00,level.arcademode_damagebase * 1.25); +} + +//Function Number: 45 +end_mission() +{ + setsaveddvar("ui_nextMission","0"); + for(var_00 = 0;var_00 < level.players.size;var_00++) + { + var_01 = level.players[var_00]; + var_01.maxhealth = 0; + var_01.health = 1; + } + + missionsuccess("killhouse"); +} + +//Function Number: 46 +create_total_score_hud(param_00,param_01) +{ + level.arcademode_hud_total_scores = []; + for(var_02 = 0;var_02 < level.var_603;var_02++) + { + var_03 = get_hud_score(); + level.arcademode_hud_total_scores[level.arcademode_hud_total_scores.size] = var_03; + var_03.x = var_02 * -30 + -150 + param_00; + var_03.y = param_01; + var_03.alignx = "right"; + var_03.aligny = "middle"; + var_03.horzalign = "right"; + var_03.vertalign = "middle"; + var_03.alpha = 0; + var_03.sort = level.arcademode_hud_sort + 10; + } +} + +//Function Number: 47 +set_total_score_hud(param_00) +{ + hud_draw_score_for_elements(param_00,level.arcademode_hud_total_scores); +} + +//Function Number: 48 +arcademode_ends() +{ + if(common_scripts\utility::flag("arcademode_complete")) + { + return; + } + + common_scripts\utility::flag_set("arcademode_complete"); + maps\_utility::slowmo_setlerptime_out(0.05); + maps\_utility::slowmo_lerp_out(); + maps\_utility::slowmo_end(); + if(level.arcademode_success) + { + if(arcademode_convert_extra_lives()) + { + wait 2; + } + } + + var_00 = 0; + if(isdefined(level.arcademode_stoptime)) + { + var_00 = gettime() - level.arcademode_stoptime; + var_00 = var_00 * 0.001; + } + + var_01 = gettime() - level.arcdemode_starttime; + var_01 = var_01 * 0.001; + var_01 = var_01 - var_00; + var_02 = level.arcademode_time - var_01; + var_02 = int(var_02); + if(var_02 == 0) + { + var_02++; + } + + var_03 = 0.5; + level.mission_failed_disabled = 1; + thread player_invul_forever(); + thread black_background(var_03); + wait var_03 + 0.25; + level.player freezecontrols(1); + var_04 = 1; + var_05 = -140; + var_06 = -80; + var_07 = -20; + var_08 = 40; + var_09 = 100; + var_0A = 300; + var_0B = func_0610("center",var_04,0,var_05); + if(level.arcademode_success) + { + var_0B.color = (1,1,1); + var_0B settext(&"SCRIPT_MISSION_COMPLETE"); + } + else + { + var_0B.color = (1,0.4,0.2); + var_0B.glowcolor = (0.75,0.3,0.3); + var_0B settext(level.arcademode_failurestring); + } + + wait 1; + for(var_0C = 0;var_0C < level.arcademode_maxlives;var_0C++) + { + level.arcademode_lives_hud[var_0C] destroy(); + } + + var_0D = 130; + level.arcademode_lives_hud = []; + for(var_0C = 0;var_0C < level.arcademode_maxlives;var_0C++) + { + arcademode_add_life(var_0C,-135 + var_0D,var_0A,-30,96,level.arcademode_hud_sort + 10); + } + + var_0E = getdvarint("arcademode_lives"); + var_0F = level.var_5D5; + if(var_0E > var_0F) + { + var_0E = var_0F; + } + + arcademode_redraw_lives(var_0E); + var_10 = 0; + var_11 = undefined; + if(getdvar("arcademode_full") == "1") + { + var_11 = func_0610("left",var_04,20,var_06); + var_11 settext(&"SCRIPT_TOTAL_SCORE"); + create_total_score_hud(var_0D,var_06); + var_10 = getdvarint("arcademode_combined_score"); + set_total_score_hud(var_10); + } + + var_12 = func_0610("left",var_04,20,var_07); + var_12 settext(&"SCRIPT_MISSION_SCORE"); + for(var_0C = 0;var_0C < level.var_603;var_0C++) + { + var_13 = level.arcademode_hud_scores[var_0C]; + var_13.x = var_0C * -30 + -150 + var_0D; + var_13.y = var_07; + var_13.sort = level.arcademode_hud_sort + 10; + var_13.alignx = "right"; + var_13.aligny = "middle"; + var_13.horzalign = "right"; + var_13.vertalign = "middle"; + } + + hud_draw_score(0); + var_14 = 0; + var_15 = 0; + while(var_02 >= 60) + { + var_14++; + var_02 = var_02 - 60; + } + + var_15 = var_02; + var_16 = func_0610("left",var_04,20,var_08); + var_16 settext(&"SCRIPT_TIME_REMAINING"); + level.arcademode_hud_timer_minutes_tens = func_0610("right",var_04,-265 + var_0D,var_08); + level.arcademode_hud_timer_minutes_ones = func_0610("right",var_04,-235 + var_0D,var_08); + var_17 = func_0610("right",var_04,-215 + var_0D,var_08 - 5); + var_17 settext(&"SCRIPT_COLON"); + level.arcademode_hud_timer_seconds_tens = func_0610("right",var_04,-180 + var_0D,var_08); + level.arcademode_hud_timer_seconds_ones = func_0610("right",var_04,-150 + var_0D,var_08); + ending_set_time(var_14,var_15); + wait var_04; + wait 1; + var_18 = getdvarint("arcadeMode_score"); + var_19 = 0; + var_1A = var_10; + var_1B = 0; + for(;;) + { + var_1C = var_18 - var_19; + var_1D = var_1C * 0.2 + 1; + if(var_1C <= 15) + { + var_1D = 1; + } + + var_1D = int(var_1D); + var_19 = var_19 + var_1D; + if(var_19 > var_18) + { + var_19 = var_18; + } + + hud_draw_score(var_19); + if(var_19 == var_18) + { + break; + } + + var_1B--; + if(var_1B <= 0) + { + level.player thread common_scripts\utility::play_sound_in_space("bullet_ap_dirt",level.player geteye()); + var_1B = 3; + } + + wait 0.05; + } + + wait 1; + var_1E = 0; + var_1F = undefined; + if(level.arcademode_success) + { + var_20 = 5; + var_21 = var_14 * 60 + var_15; + var_22 = ceil(var_21 / 15); + var_23 = ceil(var_21 * var_20); + var_24 = ceil(var_23 / level.arcademode_difficultytimerscale); + var_25 = var_19; + var_26 = var_19 + var_24; + var_27 = var_10; + var_28 = var_10 + var_24; + for(var_0C = 1;var_0C <= var_22;var_0C++) + { + var_29 = var_0C * 1 / var_22; + if(var_0C == var_22) + { + var_29 = 1; + } + + var_19 = int(var_25 * 1 - var_29 + var_26 * var_29); + if(getdvar("arcademode_full") == "1") + { + var_10 = int(var_27 * 1 - var_29 + var_28 * var_29); + set_total_score_hud(var_10); + } + + hud_draw_score(var_19); + var_2A = int(var_21 * 1 - var_29); + ending_set_time(floor(var_2A / 60),var_2A % 60); + var_1B--; + if(var_1B <= 0) + { + level.player thread common_scripts\utility::play_sound_in_space("bullet_ap_metal",level.player geteye()); + var_1B = 3; + } + + wait 0.05; + } + + ending_set_time(0,0); + wait 1; + for(;;) + { + var_2B = 1; + if(var_0E > 10) + { + var_2C = var_0E % 10; + if(var_0E - var_2C >= 10) + { + var_2B = 10; + } + else + { + var_2B = var_2C; + } + + if(var_0E < 20) + { + var_2B = var_2C; + } + } + + var_0E = var_0E - var_2B; + if(var_0E < 0) + { + break; + } + + var_2D = 1000; + var_2D = var_2D * var_2B; + var_1D = int(var_2D); + if(getdvar("arcademode_full") == "1") + { + var_10 = var_10 + var_1D; + set_total_score_hud(var_10); + } + + var_19 = var_19 + var_1D; + level.player thread common_scripts\utility::play_sound_in_space("mortar_explosion",level.player geteye()); + hud_draw_score(int(var_19)); + arcademode_redraw_lives(var_0E); + wait 0.6; + } + + wait 1; + if(getdvarint("arcademode_died") != 1 && level.gameskill >= 2) + { + var_1D = int(var_19); + arcademode_end_boost(var_19,var_10,var_1D,&"SCRIPT_ZERO_DEATHS","bullet_ap_bark",var_09,var_04); + var_19 = var_19 + var_1D; + var_10 = var_10 + var_1D; + } + } + else + { + level.arcademode_hud_timer_seconds_ones setpulsefx(0,0,1000); + level.arcademode_hud_timer_seconds_tens setpulsefx(0,0,1000); + level.arcademode_hud_timer_minutes_ones setpulsefx(0,0,1000); + level.arcademode_hud_timer_minutes_tens setpulsefx(0,0,1000); + var_17 setpulsefx(0,0,1000); + var_16 setpulsefx(0,0,1000); + arcademode_redraw_lives(0); + wait 2; + } + + var_2E = level.arcademode_skillmultiplier[level.gameskill]; + if(var_2E > 1) + { + if(var_2E == 1.5) + { + var_2F = &"SCRIPT_DIFFICULTY_BONUS_ONEANDAHALF"; + } + else if(var_2F == 3) + { + var_2F = &"SCRIPT_DIFFICULTY_BONUS_THREE"; + } + else + { + var_2F = &"SCRIPT_DIFFICULTY_BONUS_FOUR"; + } + + var_1D = int(ceil(var_19 * var_2E) - var_19); + arcademode_end_boost(var_19,var_10,var_1D,var_2F,"bullet_ap_glass",var_09,var_04); + var_19 = var_19 + var_1D; + var_10 = var_10 + var_1D; + } + + var_30 = 0; + if(getdvar("arcademode_full") == "1") + { + var_31 = "s18"; + var_32 = getdvarint(var_31); + if(var_10 > var_32) + { + var_33 = get_digits_from_score(var_10); + var_34 = get_score_string_from_digits(var_33); + setdvar(var_31,var_34); + var_35 = 0; + if(!level.arcademode_success) + { + var_35 = 1; + } + + if(level.script == "airplane") + { + var_35 = 1; + } + + if(var_35) + { + var_30 = 1; + } + } + + level.player uploadscore("LB_FULL",getdvarint(var_31)); + } + else + { + var_36 = []; + } + + if(var_30) + { + if(!level.arcademode_success) + { + updategamerprofile(); + } + + wait 1; + var_37 = func_0610("center",var_04,0,var_09); + var_37 settext(&"SCRIPT_NEW_HIGH_SCORE"); + var_37.alpha = 1; + var_37 fadeovertime(0.05); + var_37 setpulsefx(30,3000,1000); + wait 3.5; + } + + wait 2; + var_0B setpulsefx(0,0,1000); + wait 0.5; + var_12 setpulsefx(0,0,1000); + for(var_0C = 0;var_0C < level.var_603;var_0C++) + { + var_13 = level.arcademode_hud_scores[var_0C]; + var_13 setpulsefx(0,0,1000); + } + + if(getdvar("arcademode_full") == "1") + { + var_11 setpulsefx(0,0,1000); + for(var_0C = 0;var_0C < level.var_603;var_0C++) + { + var_13 = level.arcademode_hud_total_scores[var_0C]; + var_13 setpulsefx(0,0,1000); + } + } + + if(level.arcademode_success) + { + wait 0.5; + level.arcademode_hud_timer_seconds_ones setpulsefx(0,0,1000); + level.arcademode_hud_timer_seconds_tens setpulsefx(0,0,1000); + level.arcademode_hud_timer_minutes_ones setpulsefx(0,0,1000); + level.arcademode_hud_timer_minutes_tens setpulsefx(0,0,1000); + var_17 setpulsefx(0,0,1000); + var_16 setpulsefx(0,0,1000); + } + + wait 1; + if(getdvar("arcademode_full") == "1") + { + logstring("ArcadeMode Score: " + var_19 + ", mission: " + level.script + ", gameskill: " + level.gameskill + ", total: " + var_10); + } + else + { + logstring("ArcadeMode Score: " + var_19 + ", mission: " + level.script + ", gameskill: " + level.gameskill); + } + + setdvar("arcademode_combined_score",var_10); + if(!level.arcademode_success) + { + setdvar("ui_arcade_lost",1); + end_mission(); + } + else + { + setdvar("ui_arcade_lost",0); + } + + common_scripts\utility::flag_set("arcademode_ending_complete"); +} + +//Function Number: 49 +arcademode_end_boost(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + var_07 = func_0610("center",param_06,0,param_05); + var_07 settext(param_03); + var_07.alpha = 1; + var_07 fadeovertime(0.05); + wait 0.05; + wait 1; + var_08 = 0; + var_09 = param_00 + param_02; + var_0A = param_01 + param_02; + for(;;) + { + var_0B = var_09 - param_00; + param_02 = var_0B * 0.2 + 1; + if(var_0B <= 15) + { + param_02 = 1; + } + + param_02 = int(param_02); + param_00 = param_00 + param_02; + if(param_00 > var_09) + { + param_00 = var_09; + } + + hud_draw_score(param_00); + if(getdvar("arcademode_full") == "1") + { + param_01 = param_01 + param_02; + if(param_01 > var_0A) + { + param_01 = var_0A; + } + + set_total_score_hud(param_01); + } + + if(param_00 == var_09) + { + break; + } + + var_08--; + if(var_08 <= 0) + { + level.player thread common_scripts\utility::play_sound_in_space(param_04,level.player geteye()); + var_08 = 3; + } + + wait 0.05; + } + + wait 0.5; + var_07 setpulsefx(0,0,1000); + wait 1; +} + +//Function Number: 50 +black_background(param_00) +{ + var_01 = newhudelem(); + var_01.foreground = 1; + var_01.x = 0; + var_01.y = 0; + var_01 setshader("black",640,480); + var_01.alignx = "left"; + var_01.aligny = "top"; + var_01.horzalign = "fullscreen"; + var_01.vertalign = "fullscreen"; + var_01.sort = level.arcademode_hud_sort + 5; + var_01.alpha = 0; + if(param_00 > 0) + { + var_01 fadeovertime(param_00); + } + + var_01.alpha = 1; +} + +//Function Number: 51 +player_invul_forever() +{ + for(;;) + { + level.player enableinvulnerability(); + level.player.deathinvulnerabletime = 70000; + level.player.ignoreme = 1; + var_00 = getaispeciesarray("all","all"); + common_scripts\utility::array_thread(var_00,::maps\_utility::set_ignoreme,1); + wait 0.05; + } +} + +//Function Number: 52 +ending_set_time(param_00,param_01) +{ + var_02 = 0; + var_03 = 0; + while(param_00 >= 10) + { + var_02++; + param_00 = param_00 - 10; + } + + while(param_01 >= 10) + { + var_03++; + param_01 = param_01 - 10; + } + + level.arcademode_hud_timer_seconds_ones setvalue(param_01); + level.arcademode_hud_timer_seconds_tens setvalue(var_03); + level.arcademode_hud_timer_minutes_ones setvalue(param_00); + level.arcademode_hud_timer_minutes_tens setvalue(var_02); +} + +//Function Number: 53 +draw_checkpoint(param_00,param_01,param_02) +{ + param_00 = param_00 * param_02; + var_03 = func_0610("center",0.1,param_00,90); + var_03 settext(&"SCRIPT_CHECKPOINT"); + var_03 moveovertime(param_01); + var_03.x = 0; + wait param_01; + wait 0.5; + var_03 moveovertime(param_01); + var_03.x = param_00 * -1; + wait param_01; + var_03 destroy(); +} + +//Function Number: 54 +arcademode_checkpoint_getid(param_00) +{ + for(var_01 = 0;var_01 < level.arcademode_checkpoint_dvars.size;var_01++) + { + if(level.arcademode_checkpoint_dvars[var_01] == param_00) + { + return var_01; + } + } + + return undefined; +} + +//Function Number: 55 +arcademode_init_kill_streak_colors() +{ + level.arcademode_streak_color = []; + level.arcademode_streak_glow = []; + level.arcademode_streak_color[level.arcademode_streak_color.size] = level.color_cool_green; + level.arcademode_streak_color[level.arcademode_streak_color.size] = (0.8,0.8,2); + level.arcademode_streak_color[level.arcademode_streak_color.size] = (2,0.8,0); + level.arcademode_streak_color[level.arcademode_streak_color.size] = (0.5,2,2); + level.arcademode_streak_color[level.arcademode_streak_color.size] = (2,0.5,2); + level.arcademode_streak_color[level.arcademode_streak_color.size] = (0.3,0.3,2); + level.arcademode_streak_color[level.arcademode_streak_color.size] = (2,2,0.5); + level.arcademode_streak_color[level.arcademode_streak_color.size] = (2,2,2); + for(var_00 = 0;var_00 < level.arcademode_streak_color.size;var_00++) + { + level.arcademode_streak_glow[var_00] = (level.arcademode_streak_color[var_00][0] * 0.35,level.arcademode_streak_color[var_00][1] * 0.35,level.arcademode_streak_color[var_00][2] * 0.35); + } + + level.arcademode_streak_color[0] = level.color_cool_green_glow; +} + +//Function Number: 56 +arcademode_killstreak_complete_display() +{ + if(level.arcademode_kill_streak_current_multiplier == 1) + { + return; + } + + if(common_scripts\utility::flag("arcademode_complete")) + { + return; + } + + var_00 = func_0610("right",0.2,-10,-57); + var_00 setpulsefx(5,3000,1000); + var_00.fontscale = 2; + if(level.arcademode_kill_streak_current_multiplier >= 8) + { + level.player thread common_scripts\utility::play_sound_in_space("arcademode_kill_streak_won",level.player geteye()); + var_00 settext(&"SCRIPT_STREAK_COMPLETE"); + } + else + { + level.player thread common_scripts\utility::play_sound_in_space("arcademode_kill_streak_lost",level.player geteye()); + var_00 settext(&"SCRIPT_STREAK_BONUS_LOST"); + } + + wait 5; + var_00 destroy(); +} + +//Function Number: 57 +arcademode_reset_kill_streak_art() +{ + if(isdefined(level.arcademode_streak_hud)) + { + level.arcademode_streak_hud destroy(); + level.arcademode_streak_hud = undefined; + level.arcademode_streak_hud_shadow destroy(); + } + + level notify("arcademode_stop_kill_streak_art"); + for(var_00 = 0;var_00 < level.arcademode_kills_hud.size;var_00++) + { + level.arcademode_kills_hud[var_00] destroy(); + } + + level.arcademode_kills_hud = []; +} + +//Function Number: 58 +arcademode_reset_kill_streak() +{ + level.arcademode_new_kill_streak_allowed = 1; + thread arcademode_killstreak_complete_display(); + level notify("arcademode_stop_kill_streak"); + arcademode_reset_kill_streak_art(); + common_scripts\utility::flag_clear("arcadeMode_multiplier_maxed"); + level.arcademode_kill_streak_current_count = level.arcademode_kill_streak_multiplier_count; + level.arcademode_kill_streak_current_multiplier = 1; +} + +//Function Number: 59 +get_hud_multi() +{ + var_00 = newhudelem(); + var_00.alignx = "right"; + var_00.aligny = "top"; + var_00.horzalign = "right"; + var_00.vertalign = "top"; + var_00 thread arcademode_draw_multiplier_kill(); + var_00.x = 0; + var_00.y = 126; + var_00.font = "objective"; + var_00.fontscale = 0.1; + var_00.archived = 0; + var_00.foreground = 1; + var_00.color = level.arcademode_streak_color[level.arcademode_kill_streak_current_multiplier - 1]; + var_00.glowcolor = level.arcademode_streak_glow[level.arcademode_kill_streak_current_multiplier - 1]; + var_00.sort = level.arcademode_hud_sort; + var_00.label = &"SCRIPT_X"; + var_00 setvalue(level.arcademode_kill_streak_current_multiplier); + var_00 changefontscaleovertime(0.5); + var_00.fontscale = 3; + var_00.alpha = 0; + var_00 fadeovertime(0.5); + var_00.alpha = 1; + return var_00; +} + +//Function Number: 60 +arcademode_draw_multiplier() +{ + for(var_00 = 0;var_00 < 40;var_00++) + { + var_01 = get_hud_multi(); + var_01 thread arcademode_draw_mult_sizzle(); + } + + level endon("arcademode_new_kill_streak"); + var_02 = get_hud_multi(); + level.arcademode_hud_streak = var_02; + level waittill("arcademode_stop_kill_streak"); + var_02 setpulsefx(0,0,1000); + wait 1; + var_02 destroy(); + level.arcademode_hud_streak = undefined; +} + +//Function Number: 61 +arcademode_draw_mult_sizzle() +{ + level endon("arcademode_new_kill_streak"); + wait 0.05; + var_00 = 500; + self moveovertime(2); + self.x = self.x + randomintrange(var_00 * -1,var_00); + self.y = self.y + randomintrange(var_00 * -1,var_00); + wait 0.5; + self fadeovertime(1); + self.alpha = 0; + wait 1; + self destroy(); +} + +//Function Number: 62 +arcademode_draw_multiplier_kill() +{ + self endon("death"); + level waittill("arcademode_new_kill_streak"); + self destroy(); +} + +//Function Number: 63 +get_score_string_from_digits(param_00) +{ + var_01 = ""; + for(var_02 = 0;var_02 < param_00.size;var_02++) + { + var_01 = param_00[var_02] + var_01; + } + + return var_01; +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_art.gsc b/MW3/Xbox/SP/maps/_art.gsc new file mode 100644 index 0000000..9082f23 --- /dev/null +++ b/MW3/Xbox/SP/maps/_art.gsc @@ -0,0 +1,1267 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_art.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 40 + * Decompile Time: 696 ms + * Timestamp: 10/27/2023 2:34:06 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(getdvar("scr_cmd_plr_sun") == "") + { + } + + if(getdvar("scr_dof_enable") == "") + { + setsaveddvar("scr_dof_enable","1"); + } + + if(getdvar("scr_cinematic_autofocus") == "") + { + setdvar("scr_cinematic_autofocus","1"); + } + + setdvarifuninitialized("scr_glowTweakEnable",1); + setdvarifuninitialized("scr_glowTweakRadius0",7); + setdvarifuninitialized("scr_glowTweakBloomCutoff",0.99); + setdvarifuninitialized("scr_glowTweakBloomDesaturation",0.65); + setdvarifuninitialized("scr_glowTweakBloomIntensity0",0.36); + setdvarifuninitialized("scr_filmTweakEnable",1); + setdvarifuninitialized("scr_filmTweakContrast",1.45); + setdvarifuninitialized("scr_filmTweakBrightness",0.15); + setdvarifuninitialized("scr_filmTweakDesaturation",0.4); + setdvarifuninitialized("scr_filmTweakDesaturationDark",0.4); + setdvarifuninitialized("scr_filmTweakInvert",0); + setdvarifuninitialized("scr_filmTweakLightTint","1.14 1.07 0.877"); + setdvarifuninitialized("scr_filmTweakMediumTint","1.16 .74 .69"); + setdvarifuninitialized("scr_filmTweakDarkTint","0.7 0.76 0.86"); + setdvarifuninitialized("scr_primaryLightUseTweaks",1); + setdvarifuninitialized("scr_primaryLightTweakDiffuseStrength",1); + setdvarifuninitialized("scr_primaryLightTweakSpecularStrength",1); + level._clearalltextafterhudelem = 0; + level.dofdefault["nearStart"] = 1; + level.dofdefault["nearEnd"] = 1; + level.dofdefault["farStart"] = 500; + level.dofdefault["farEnd"] = 500; + level.dofdefault["nearBlur"] = 4.5; + level.dofdefault["farBlur"] = 0.05; + precachemenu("dev_vision_noloc"); + precachemenu("dev_vision_exec"); + var_00 = getdvarint("scr_dof_enable"); + level.special_weapon_dof_funcs = []; + level.var_167E = []; + if(!isdefined(level.vision_set_vision)) + { + level.vision_set_vision = []; + } + + if(!isdefined(level.vision_set_transition_ent)) + { + level.vision_set_transition_ent = spawnstruct(); + level.vision_set_transition_ent.vision_set = ""; + level.vision_set_transition_ent.time = 0; + } + + if(!isdefined(level.vision_set_fog)) + { + level.vision_set_fog = []; + func_16AF(level.script); + common_scripts\_artcommon::func_166D(); + } + + foreach(var_03, var_02 in level.vision_set_fog) + { + create_vision_set_vision(var_03); + } + + for(var_04 = 0;var_04 < level.players.size;var_04++) + { + var_05 = level.players[var_04]; + var_05.curdof = level.dofdefault["farStart"] - level.dofdefault["nearEnd"] / 2; + if(var_00) + { + var_05 thread adsdof(); + } + } + + thread func_1684(); + if(!isdefined(level.script)) + { + level.script = tolower(getdvar("mapname")); + } +} + +//Function Number: 2 +func_1684() +{ +} + +//Function Number: 3 +button_down(param_00,param_01) +{ + var_02 = level.player buttonpressed(param_00); + if(!var_02) + { + var_02 = level.player buttonpressed(param_01); + } + + if(!isdefined(level.var_167E[param_00])) + { + level.var_167E[param_00] = 0; + } + + if(gettime() < level.var_167E[param_00]) + { + return 0; + } + + level.var_167E[param_00] = gettime() + 400; + return var_02; +} + +//Function Number: 4 +create_vision_set_vision(param_00) +{ + if(!isdefined(level.vision_set_vision)) + { + level.vision_set_vision = []; + } + + var_01 = spawnstruct(); + var_01.name = param_00; + level.vision_set_vision[param_00] = var_01; + return var_01; +} + +//Function Number: 5 +updatefogentfromscript() +{ + if(!isdefined(level.vision_set_fog)) + { + } + + var_00 = level.vision_set_fog[level.vision_set_transition_ent.vision_set]; + if(isdefined(var_00.name)) + { + var_00.var_1688 = level.fognearplane; + var_00.var_1689 = level.fogexphalfplane; + var_00.red = level.fogcolor[0]; + var_00.green = level.fogcolor[1]; + var_00.blue = level.fogcolor[2]; + var_00.maxopacity = level.fogmaxopacity; + var_00.sunfogenabled = 0; + if(level.sunfogenabled) + { + var_00.sunfogenabled = 1; + var_00.var_168E = level.sunfogcolor[0]; + var_00.sungreen = level.sunfogcolor[1]; + var_00.sunblue = level.sunfogcolor[2]; + var_00.sundir = level.var_1675; + var_00.sunbeginfadeangle = level.var_1676; + var_00.var_1693 = level.sunfogendfadeangle; + var_00.normalfogscale = level.sunfogscale; + } + + if(getdvarint("scr_fog_disable")) + { + var_00.var_1688 = 1215752192; + var_00.var_1689 = 1215752193; + var_00.red = 0; + var_00.green = 0; + var_00.blue = 0; + var_00.maxopacity = 0; + } + + maps\_utility::set_fog_to_ent_values(var_00,0); + } +} + +//Function Number: 6 +func_1696() +{ + if(!isdefined(level.vision_set_vision)) + { + return; + } + + if(!isdefined(level.vision_set_transition_ent)) + { + return; + } + + if(!isdefined(level.vision_set_transition_ent.vision_set)) + { + return; + } + + if(!isdefined(level.vision_set_vision[level.vision_set_transition_ent.vision_set])) + { + return; + } + + var_00 = level.vision_set_vision[level.vision_set_transition_ent.vision_set]; + if(!isdefined(var_00.selected)) + { + return; + } + + var_00.r_glow = getdvar("r_glowTweakEnable"); + var_00.r_glowradius0 = getdvar("r_glowTweakRadius0"); + var_00.r_glowbloomcutoff = getdvar("r_glowTweakBloomCutoff"); + var_00.r_glowbloomdesaturation = getdvar("r_glowTweakBloomDesaturation"); + var_00.r_glowbloomintensity0 = getdvar("r_glowTweakBloomIntensity0"); + var_00.r_filmenable = getdvar("r_filmTweakEnable"); + var_00.r_filmcontrast = getdvar("r_filmTweakContrast"); + var_00.var_169F = getdvar("r_filmTweakBrightness"); + var_00.var_16A0 = getdvar("r_filmTweakDesaturation"); + var_00.r_filmdesaturationdark = getdvar("r_filmTweakDesaturationDark"); + var_00.r_filminvert = getdvar("r_filmTweakInvert"); + var_00.var_16A3 = getdvar("r_filmTweakLightTint"); + var_00.r_filmmediumtint = getdvar("r_filmTweakMediumTint"); + var_00.r_filmdarktint = getdvar("r_filmTweakDarkTint"); + var_00.r_primarylightusetweaks = getdvar("r_primaryLightUseTweaks"); + var_00.r_primarylighttweakdiffusestrength = getdvar("r_primaryLightTweakDiffuseStrength"); + var_00.var_16A8 = getdvar("r_primaryLightTweakSpecularStrength"); +} + +//Function Number: 7 +fovslidercheck() +{ + if(level.dofdefault["nearStart"] >= level.dofdefault["nearEnd"]) + { + level.dofdefault["nearStart"] = level.dofdefault["nearEnd"] - 1; + setdvar("scr_dof_nearStart",level.dofdefault["nearStart"]); + } + + if(level.dofdefault["nearEnd"] <= level.dofdefault["nearStart"]) + { + level.dofdefault["nearEnd"] = level.dofdefault["nearStart"] + 1; + setdvar("scr_dof_nearEnd",level.dofdefault["nearEnd"]); + } + + if(level.dofdefault["farStart"] >= level.dofdefault["farEnd"]) + { + level.dofdefault["farStart"] = level.dofdefault["farEnd"] - 1; + setdvar("scr_dof_farStart",level.dofdefault["farStart"]); + } + + if(level.dofdefault["farEnd"] <= level.dofdefault["farStart"]) + { + level.dofdefault["farEnd"] = level.dofdefault["farStart"] + 1; + setdvar("scr_dof_farEnd",level.dofdefault["farEnd"]); + } + + if(level.dofdefault["farBlur"] >= level.dofdefault["nearBlur"]) + { + level.dofdefault["farBlur"] = level.dofdefault["nearBlur"] - 0.1; + setdvar("scr_dof_farBlur",level.dofdefault["farBlur"]); + } + + if(level.dofdefault["farStart"] <= level.dofdefault["nearEnd"]) + { + level.dofdefault["farStart"] = level.dofdefault["nearEnd"] + 1; + setdvar("scr_dof_farStart",level.dofdefault["farStart"]); + } +} + +//Function Number: 8 +fogslidercheck() +{ + if(level.var_1676 >= level.sunfogendfadeangle) + { + level.var_1676 = level.sunfogendfadeangle - 1; + setdvar("scr_sunFogBeginFadeAngle",level.var_1676); + } + + if(level.sunfogendfadeangle <= level.var_1676) + { + level.sunfogendfadeangle = level.var_1676 + 1; + setdvar("scr_sunFogEndFadeAngle",level.sunfogendfadeangle); + } +} + +//Function Number: 9 +construct_vision_ents() +{ + if(!isdefined(level.vision_set_fog)) + { + level.vision_set_fog = []; + } + + var_00 = getentarray("trigger_multiple_visionset","classname"); + foreach(var_02 in var_00) + { + if(isdefined(var_02.script_visionset)) + { + func_16AE(var_02.script_visionset); + } + + if(isdefined(var_02.script_visionset_start)) + { + func_16AE(var_02.script_visionset_start); + } + + if(isdefined(var_02.script_visionset_end)) + { + func_16AE(var_02.script_visionset_end); + } + } +} + +//Function Number: 10 +func_16AE(param_00) +{ + if(isdefined(level.vision_set_fog[param_00])) + { + return; + } + + func_16AF(param_00); + create_vision_set_vision(param_00); + iprintlnbold("new vision: " + param_00); +} + +//Function Number: 11 +func_16AF(param_00) +{ + var_01 = maps\_utility::func_16B0(param_00); + var_01.var_1688 = 3764.17; + var_01.var_1689 = 19391; + var_01.red = 0.661137; + var_01.green = 0.554261; + var_01.blue = 0.454014; + var_01.maxopacity = 0.7; + var_01.transitiontime = 0; +} + +//Function Number: 12 +func_16B2() +{ +} + +//Function Number: 13 +print_current_vision() +{ + var_00 = level.vision_set_vision[level.vision_set_transition_ent.vision_set]; + if(!isdefined(var_00.name)) + { + return; + } + + common_scripts\utility::fileprint_launcher_start_file(); + common_scripts\utility::fileprint_launcher("r_glow \" + getdvar("r_glowTweakEnable") + "\"); + common_scripts\utility::fileprint_launcher("r_glowRadius0 \" + getdvar("r_glowTweakRadius0") + "\"); + common_scripts\utility::fileprint_launcher("r_glowBloomCutoff \" + getdvar("r_glowTweakBloomCutoff") + "\"); + common_scripts\utility::fileprint_launcher("r_glowBloomDesaturation \" + getdvar("r_glowTweakBloomDesaturation") + "\"); + common_scripts\utility::fileprint_launcher("r_glowBloomIntensity0 \" + getdvar("r_glowTweakBloomIntensity0") + "\"); + common_scripts\utility::fileprint_launcher(" "); + common_scripts\utility::fileprint_launcher("r_filmEnable \" + getdvar("r_filmTweakEnable") + "\"); + common_scripts\utility::fileprint_launcher("r_filmContrast \" + getdvar("r_filmTweakContrast") + "\"); + common_scripts\utility::fileprint_launcher("r_filmBrightness \" + getdvar("r_filmTweakBrightness") + "\"); + common_scripts\utility::fileprint_launcher("r_filmDesaturation \" + getdvar("r_filmTweakDesaturation") + "\"); + common_scripts\utility::fileprint_launcher("r_filmDesaturationDark \" + getdvar("r_filmTweakDesaturationDark") + "\"); + common_scripts\utility::fileprint_launcher("r_filmInvert \" + getdvar("r_filmTweakInvert") + "\"); + common_scripts\utility::fileprint_launcher("r_filmLightTint \" + getdvar("r_filmTweakLightTint") + "\"); + common_scripts\utility::fileprint_launcher("r_filmMediumTint \" + getdvar("r_filmTweakMediumTint") + "\"); + common_scripts\utility::fileprint_launcher("r_filmDarkTint \" + getdvar("r_filmTweakDarkTint") + "\"); + common_scripts\utility::fileprint_launcher(" "); + common_scripts\utility::fileprint_launcher("r_primaryLightUseTweaks \" + getdvar("r_primaryLightUseTweaks") + "\"); + common_scripts\utility::fileprint_launcher("r_primaryLightTweakDiffuseStrength \" + getdvar("r_primaryLightTweakDiffuseStrength") + "\"); + common_scripts\utility::fileprint_launcher("r_primaryLightTweakSpecularStrength \" + getdvar("r_primaryLightTweakSpecularStrength") + "\"); + common_scripts\utility::fileprint_launcher_end_file("\\share\\raw\\vision\\" + var_00.name + ".vision",1); +} + +//Function Number: 14 +print_fog_ents() +{ + foreach(var_01 in level.vision_set_fog) + { + if(!isdefined(var_01.name)) + { + continue; + } + + common_scripts\utility::fileprint_launcher("\tent = maps\\_utility::create_vision_set_fog( \" + var_01.name + "\" );"); + if(isdefined(var_01.var_1688)) + { + common_scripts\utility::fileprint_launcher("\tent.startDist = " + var_01.var_1688 + ";"); + } + + if(isdefined(var_01.var_1689)) + { + common_scripts\utility::fileprint_launcher("\tent.halfwayDist = " + var_01.var_1689 + ";"); + } + + if(isdefined(var_01.red)) + { + common_scripts\utility::fileprint_launcher("\tent.red = " + var_01.red + ";"); + } + + if(isdefined(var_01.green)) + { + common_scripts\utility::fileprint_launcher("\tent.green = " + var_01.green + ";"); + } + + if(isdefined(var_01.blue)) + { + common_scripts\utility::fileprint_launcher("\tent.blue = " + var_01.blue + ";"); + } + + if(isdefined(var_01.maxopacity)) + { + common_scripts\utility::fileprint_launcher("\tent.maxOpacity = " + var_01.maxopacity + ";"); + } + + if(isdefined(var_01.transitiontime)) + { + common_scripts\utility::fileprint_launcher("\tent.transitionTime = " + var_01.transitiontime + ";"); + } + + if(isdefined(var_01.sunfogenabled)) + { + common_scripts\utility::fileprint_launcher("\tent.sunFogEnabled = " + var_01.sunfogenabled + ";"); + } + + if(isdefined(var_01.var_168E)) + { + common_scripts\utility::fileprint_launcher("\tent.sunRed = " + var_01.var_168E + ";"); + } + + if(isdefined(var_01.sungreen)) + { + common_scripts\utility::fileprint_launcher("\tent.sunGreen = " + var_01.sungreen + ";"); + } + + if(isdefined(var_01.sunblue)) + { + common_scripts\utility::fileprint_launcher("\tent.sunBlue = " + var_01.sunblue + ";"); + } + + if(isdefined(var_01.sundir)) + { + common_scripts\utility::fileprint_launcher("\tent.sunDir = " + var_01.sundir + ";"); + } + + if(isdefined(var_01.sunbeginfadeangle)) + { + common_scripts\utility::fileprint_launcher("\tent.sunBeginFadeAngle = " + var_01.sunbeginfadeangle + ";"); + } + + if(isdefined(var_01.var_1693)) + { + common_scripts\utility::fileprint_launcher("\tent.sunEndFadeAngle = " + var_01.var_1693 + ";"); + } + + if(isdefined(var_01.normalfogscale)) + { + common_scripts\utility::fileprint_launcher("\tent.normalFogScale = " + var_01.normalfogscale + ";"); + } + + common_scripts\utility::fileprint_launcher(" "); + } +} + +//Function Number: 15 +print_fog_ents_csv() +{ + foreach(var_01 in level.vision_set_fog) + { + if(!isdefined(var_01.name)) + { + continue; + } + + common_scripts\utility::fileprint_launcher("rawfile,vision/" + var_01.name + ".vision"); + } +} + +//Function Number: 16 +cloudlight(param_00,param_01,param_02,param_03) +{ + level.sunlight_bright = param_00; + level.sunlight_dark = param_01; + level.var_16B9 = param_02; + level.var_16BA = param_03; + setdvar("r_lighttweaksunlight",level.sunlight_dark); + setdvar("r_lighttweakdiffusefraction",level.var_16BA); + var_04 = "up"; + for(;;) + { + var_05 = getdvarfloat("r_lighttweaksunlight"); + var_06 = scale(1 + randomint(21)); + var_07 = randomint(2); + if(var_07) + { + var_06 = var_06 * -1; + } + + if(var_04 == "up") + { + var_08 = var_05 + scale(30) + var_06; + } + else + { + var_08 = var_05 - scale(30) + var_06; + } + + if(var_08 >= level.sunlight_bright) + { + var_08 = level.sunlight_bright; + var_04 = "down"; + } + + if(var_08 <= level.sunlight_dark) + { + var_08 = level.sunlight_dark; + var_04 = "up"; + } + + if(var_08 > var_05) + { + brighten(var_08,3 + randomint(3),0.05); + continue; + } + + func_16BC(var_08,3 + randomint(3),0.05); + } +} + +//Function Number: 17 +brighten(param_00,param_01,param_02) +{ + var_03 = getdvarfloat("r_lighttweaksunlight"); + var_04 = param_00 - var_03; + var_05 = var_04 / param_01 / param_02; + while(param_01 > 0) + { + param_01 = param_01 - param_02; + var_03 = var_03 + var_05; + setdvar("r_lighttweaksunlight",var_03); + var_06 = var_03 - level.sunlight_dark / level.sunlight_bright - level.sunlight_dark; + var_07 = level.var_16B9 + level.var_16BA - level.var_16B9 * var_06; + setdvar("r_lighttweakdiffusefraction",var_07); + wait param_02; + } +} + +//Function Number: 18 +func_16BC(param_00,param_01,param_02) +{ + var_03 = getdvarfloat("r_lighttweaksunlight"); + var_04 = var_03 - param_00; + var_05 = var_04 / param_01 / param_02; + while(param_01 > 0) + { + param_01 = param_01 - param_02; + var_03 = var_03 - var_05; + setdvar("r_lighttweaksunlight",var_03); + var_06 = var_03 - level.sunlight_dark / level.sunlight_bright - level.sunlight_dark; + var_07 = level.var_16B9 + level.var_16BA - level.var_16B9 * var_06; + setdvar("r_lighttweakdiffusefraction",var_07); + wait param_02; + } +} + +//Function Number: 19 +scale(param_00) +{ + var_01 = param_00 / 100; + return level.sunlight_dark + var_01 * level.sunlight_bright - level.sunlight_dark - level.sunlight_dark; +} + +//Function Number: 20 +adsdof() +{ + self.dof = level.dofdefault; + var_00 = 0; + for(;;) + { + wait 0.05; + if(level.level_specific_dof) + { + continue; + } + + if(getdvarint("scr_cinematic")) + { + func_16C1(); + continue; + } + + if(getdvarint("scr_dof_enable") && !var_00) + { + func_16C2(); + continue; + } + + setdefaultdepthoffield(); + } +} + +//Function Number: 21 +func_16C1() +{ + var_00 = self playerads(); + if(var_00 == 1 && getdvarint("scr_cinematic_autofocus")) + { + var_01 = vectornormalize(anglestoforward(self getplayerangles())); + var_02 = bullettrace(self geteye(),self geteye() + var_01 * 100000,1,self); + var_03 = getaiarray(); + var_04 = 10000; + var_05 = -1; + var_06 = self geteye(); + var_07 = self getplayerangles(); + var_08 = 0; + var_09 = undefined; + for(var_0A = 0;var_0A < var_03.size;var_0A++) + { + var_0B = var_03[var_0A].origin; + var_0C = vectornormalize(var_0B - var_06); + var_0D = anglestoforward(var_07); + var_0E = vectordot(var_0D,var_0C); + if(var_0E > var_08) + { + var_08 = var_0E; + var_09 = var_03[var_0A].origin; + } + } + + if(var_08 < 0.923) + { + var_0F = distance(var_06,var_02["position"]); + } + else + { + var_0F = distance(var_06,var_09); + } + + changedofvalue("nearStart",1,200); + changedofvalue("nearEnd",var_0F,200); + changedofvalue("farStart",var_0F + 196,200); + changedofvalue("farEnd",var_0F + 196 * 2,200); + changedofvalue("nearBlur",6,0.1); + changedofvalue("farBlur",3.6,0.1); + } + else + { + var_0F = getdvarint("scr_cinematic_doffocus") * 39; + if(self.curdof != var_0F) + { + changedofvalue("nearStart",1,100); + changedofvalue("nearEnd",var_0F,100); + changedofvalue("farStart",var_0F + 196,100); + changedofvalue("farEnd",var_0F + 196 * 2,100); + changedofvalue("nearBlur",6,0.1); + changedofvalue("farBlur",3.6,0.1); + } + } + + self.curdof = self.dof["farStart"] - self.dof["nearEnd"] / 2; + self setdepthoffield(self.dof["nearStart"],self.dof["nearEnd"],self.dof["farStart"],self.dof["farEnd"],self.dof["nearBlur"],self.dof["farBlur"]); +} + +//Function Number: 22 +func_16C2() +{ + var_00 = self playerads(); + if(var_00 == 0) + { + setdefaultdepthoffield(); + return; + } + + var_01 = self geteye(); + var_02 = self getplayerangles(); + var_03 = vectornormalize(anglestoforward(var_02)); + var_04 = bullettrace(var_01,var_01 + var_03 * 8192,1,self,1); + var_05 = getaiarray("axis"); + var_06 = self getcurrentweapon(); + if(isdefined(level.special_weapon_dof_funcs[var_06])) + { + [[ level.special_weapon_dof_funcs[var_06] ]](var_04,var_05,var_01,var_03,var_00); + return; + } + + var_07 = 10000; + var_08 = -1; + for(var_09 = 0;var_09 < var_05.size;var_09++) + { + var_0A = vectornormalize(var_05[var_09].origin - var_01); + var_0B = vectordot(var_03,var_0A); + if(var_0B < 0.923) + { + continue; + } + + var_0C = distance(var_01,var_05[var_09].origin); + if(var_0C - 30 < var_07) + { + var_07 = var_0C - 30; + } + + if(var_0C + 30 > var_08) + { + var_08 = var_0C + 30; + } + } + + if(var_07 > var_08) + { + var_07 = 256; + var_08 = 2500; + } + else + { + if(var_07 < 50) + { + var_07 = 50; + } + else if(var_07 > 512) + { + var_07 = 512; + } + + if(var_08 > 2500) + { + var_08 = 2500; + } + else if(var_08 < 1000) + { + var_08 = 1000; + } + } + + var_0D = distance(var_01,var_04["position"]); + if(var_07 > var_0D) + { + var_07 = var_0D - 30; + } + + if(var_07 < 1) + { + var_07 = 1; + } + + if(var_08 < var_0D) + { + var_08 = var_0D; + } + + setdoftarget(var_00,1,var_07,var_08,var_08 * 4,6,1.8); +} + +//Function Number: 23 +func_16C3(param_00,param_01,param_02,param_03,param_04) +{ + if(param_04 < 0.88) + { + setdefaultdepthoffield(); + return; + } + + var_05 = 10000; + var_06 = -1; + var_05 = 2400; + var_07 = 2400; + for(var_08 = 0;var_08 < param_01.size;var_08++) + { + var_09 = vectornormalize(param_01[var_08].origin - param_02); + var_0A = vectordot(param_03,var_09); + if(var_0A < 0.923) + { + continue; + } + + var_0B = distance(param_02,param_01[var_08].origin); + if(var_0B < 2500) + { + var_0B = 2500; + } + + if(var_0B - 30 < var_05) + { + var_05 = var_0B - 30; + } + + if(var_0B + 30 > var_06) + { + var_06 = var_0B + 30; + } + } + + if(var_05 > var_06) + { + var_05 = 2400; + var_06 = 3000; + } + else + { + if(var_05 < 50) + { + var_05 = 50; + } + + if(var_06 > 2500) + { + var_06 = 2500; + } + else if(var_06 < 1000) + { + var_06 = 1000; + } + } + + var_0C = distance(param_02,param_00["position"]); + if(var_0C < 2500) + { + var_0C = 2500; + } + + if(var_05 > var_0C) + { + var_05 = var_0C - 30; + } + + if(var_05 < 1) + { + var_05 = 1; + } + + if(var_06 < var_0C) + { + var_06 = var_0C; + } + + if(var_07 >= var_05) + { + var_07 = var_05 - 1; + } + + setdoftarget(param_04,var_07,var_05,var_06,var_06 * 4,4,1.8); +} + +//Function Number: 24 +setdoftarget(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + if(param_00 == 1) + { + changedofvalue("nearStart",param_01,50); + changedofvalue("nearEnd",param_02,50); + changedofvalue("farStart",param_03,400); + changedofvalue("farEnd",param_04,400); + changedofvalue("nearBlur",param_05,0.1); + changedofvalue("farBlur",param_06,0.1); + } + else + { + func_16C6("nearStart",param_01,param_00); + func_16C6("nearEnd",param_02,param_00); + func_16C6("farStart",param_03,param_00); + func_16C6("farEnd",param_04,param_00); + func_16C6("nearBlur",param_05,param_00); + func_16C6("farBlur",param_06,param_00); + } + + self setdepthoffield(self.dof["nearStart"],self.dof["nearEnd"],self.dof["farStart"],self.dof["farEnd"],self.dof["nearBlur"],self.dof["farBlur"]); +} + +//Function Number: 25 +changedofvalue(param_00,param_01,param_02) +{ + if(self.dof[param_00] > param_01) + { + var_03 = self.dof[param_00] - param_01 * 0.5; + if(var_03 > param_02) + { + var_03 = param_02; + } + else if(var_03 < 1) + { + var_03 = 1; + } + + if(self.dof[param_00] - var_03 < param_01) + { + self.dof[param_00] = param_01; + return; + } + + self.dof[param_00] = self.dof[param_00] - var_03; + return; + } + + if(self.dof[param_00] < param_01) + { + var_03 = param_01 - self.dof[param_00] * 0.5; + if(var_03 > param_02) + { + var_03 = param_02; + } + else if(var_03 < 1) + { + var_03 = 1; + } + + if(self.dof[param_00] + var_03 > param_01) + { + self.dof[param_00] = param_01; + return; + } + + self.dof[param_00] = self.dof[param_00] + var_03; + return; + } +} + +//Function Number: 26 +func_16C6(param_00,param_01,param_02) +{ + self.dof[param_00] = level.dofdefault[param_00] + param_01 - level.dofdefault[param_00] * param_02; +} + +//Function Number: 27 +dofvarupdate() +{ + level.dofdefault["nearStart"] = getdvarint("scr_dof_nearStart"); + level.dofdefault["nearEnd"] = getdvarint("scr_dof_nearEnd"); + level.dofdefault["farStart"] = getdvarint("scr_dof_farStart"); + level.dofdefault["farEnd"] = getdvarint("scr_dof_farEnd"); + level.dofdefault["nearBlur"] = getdvarfloat("scr_dof_nearBlur"); + level.dofdefault["farBlur"] = getdvarfloat("scr_dof_farBlur"); +} + +//Function Number: 28 +setdefaultdepthoffield() +{ + if(isdefined(self.dofdefault)) + { + self setdepthoffield(self.dofdefault["nearStart"],self.dofdefault["nearEnd"],self.dofdefault["farStart"],self.dofdefault["farEnd"],self.dofdefault["nearBlur"],self.dofdefault["farBlur"]); + return; + } + + self setdepthoffield(level.dofdefault["nearStart"],level.dofdefault["nearEnd"],level.dofdefault["farStart"],level.dofdefault["farEnd"],level.dofdefault["nearBlur"],level.dofdefault["farBlur"]); +} + +//Function Number: 29 +isdofdefault() +{ + if(level.dofdefault["nearStart"] != getdvarint("scr_dof_nearStart")) + { + return 0; + } + + if(level.dofdefault["nearEnd"] != getdvarint("scr_dof_nearEnd")) + { + return 0; + } + + if(level.dofdefault["farStart"] != getdvarint("scr_dof_farStart")) + { + return 0; + } + + if(level.dofdefault["farEnd"] != getdvarint("scr_dof_farEnd")) + { + return 0; + } + + if(level.dofdefault["nearBlur"] != getdvarint("scr_dof_nearBlur")) + { + return 0; + } + + if(level.dofdefault["farBlur"] != getdvarint("scr_dof_farBlur")) + { + return 0; + } + + return 1; +} + +//Function Number: 30 +func_16CA() +{ + var_00 = 7; + var_01 = []; + var_02 = 15; + var_03 = int(var_00 / 2); + var_04 = 240 + var_03 * var_02; + var_05 = 0.5 / var_03; + var_06 = var_05; + for(var_07 = 0;var_07 < var_00;var_07++) + { + var_01[var_07] = _newhudelem(); + var_01[var_07].location = 0; + var_01[var_07].alignx = "left"; + var_01[var_07].aligny = "middle"; + var_01[var_07].foreground = 1; + var_01[var_07].fontscale = 2; + var_01[var_07].sort = 20; + if(var_07 == var_03) + { + var_01[var_07].alpha = 1; + } + else + { + var_01[var_07].alpha = var_06; + } + + var_01[var_07].x = 20; + var_01[var_07].y = var_04; + var_01[var_07] _settext("."); + if(var_07 == var_03) + { + var_05 = var_05 * -1; + } + + var_06 = var_06 + var_05; + var_04 = var_04 - var_02; + } + + level.var_16CB = var_01; + var_08 = _newhudelem(); + var_08.location = 0; + var_08.alignx = "center"; + var_08.aligny = "bottom"; + var_08.foreground = 1; + var_08.fontscale = 2; + var_08.sort = 20; + var_08.alpha = 1; + var_08.x = 320; + var_08.y = 244; + var_08 _settext("."); + level.var_16CC = var_08; + var_08 = _newhudelem(); + var_08.location = 0; + var_08.alignx = "center"; + var_08.aligny = "bottom"; + var_08.foreground = 1; + var_08.fontscale = 2; + var_08.sort = 20; + var_08.alpha = 0; + var_08.x = 320; + var_08.y = 244; + var_08 setvalue(0); + level.crosshair_value = var_08; +} + +//Function Number: 31 +controler_hud_add(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = 520; + var_06 = 120; + var_07 = 18; + var_08 = 0.8; + var_09 = 20; + var_0A = 1.4; + if(!isdefined(param_02)) + { + param_02 = ""; + } + + if(!isdefined(level.hud_controler) || !isdefined(level.hud_controler[param_00])) + { + level.hud_controler[param_00] = _newhudelem(); + var_0B = _newhudelem(); + } + else + { + var_0B = level.hud_controler[param_01].var_16D0; + } + + level.hud_controler[param_00].location = 0; + level.hud_controler[param_00].alignx = "right"; + level.hud_controler[param_00].aligny = "middle"; + level.hud_controler[param_00].foreground = 1; + level.hud_controler[param_00].fontscale = 1.5; + level.hud_controler[param_00].sort = 20; + level.hud_controler[param_00].alpha = var_08; + level.hud_controler[param_00].x = var_05 + var_09; + level.hud_controler[param_00].y = var_06 + param_01 * var_07; + level.hud_controler[param_00] _settext(param_02); + level.hud_controler[param_00].base_button_text = param_02; + var_0B.location = 0; + var_0B.alignx = "left"; + var_0B.aligny = "middle"; + var_0B.foreground = 1; + var_0B.fontscale = var_0A; + var_0B.sort = 20; + var_0B.alpha = var_08; + var_0B.x = var_05 + var_09; + var_0B.y = var_06 + param_01 * var_07; + if(isdefined(param_04)) + { + var_0B setvalue(param_04); + } + + if(isdefined(param_03)) + { + var_0B _settext(param_03); + } + + level.hud_controler[param_00].var_16D0 = var_0B; +} + +//Function Number: 32 +_newhudelem() +{ + if(!isdefined(level.var_16D3)) + { + level.var_16D3 = []; + } + + var_00 = newhudelem(); + level.var_16D3[level.var_16D3.size] = var_00; + return var_00; +} + +//Function Number: 33 +_settext(param_00) +{ + self.realtext = param_00; + self settext("_"); + thread _clearalltextafterhudelem(); + var_01 = 0; + foreach(var_03 in level.var_16D3) + { + if(isdefined(var_03.realtext)) + { + var_01 = var_01 + var_03.realtext.size; + var_03 settext(var_03.realtext); + } + } +} + +//Function Number: 34 +_clearalltextafterhudelem() +{ + if(level._clearalltextafterhudelem) + { + return; + } + + level._clearalltextafterhudelem = 1; + self clearalltextafterhudelem(); + wait 0.05; + level._clearalltextafterhudelem = 0; +} + +//Function Number: 35 +setgroup_up() +{ + func_16D8(); + var_00 = undefined; + var_01 = getarraykeys(level.vision_set_vision); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + if(var_01[var_02] == level.vision_set_transition_ent.vision_set) + { + var_00 = var_02 + 1; + break; + } + } + + if(var_00 == var_01.size) + { + return; + } + + setcurrentgroup(var_01[var_00]); +} + +//Function Number: 36 +setgroup_down() +{ + func_16D8(); + var_00 = undefined; + var_01 = getarraykeys(level.vision_set_vision); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + if(var_01[var_02] == level.vision_set_transition_ent.vision_set) + { + var_00 = var_02 - 1; + break; + } + } + + if(var_00 < 0) + { + return; + } + + setcurrentgroup(var_01[var_00]); +} + +//Function Number: 37 +func_16D8() +{ +} + +//Function Number: 38 +setcurrentgroup(param_00) +{ + level.spam_model_current_group = param_00; + var_01 = getarraykeys(level.vision_set_vision); + var_02 = 0; + var_03 = int(level.var_16CB.size / 2); + for(var_04 = 0;var_04 < var_01.size;var_04++) + { + if(var_01[var_04] == param_00) + { + var_02 = var_04; + break; + } + } + + level.var_16CB[var_03] _settext(var_01[var_02]); + for(var_04 = 1;var_04 < level.var_16CB.size - var_03;var_04++) + { + if(var_02 - var_04 < 0) + { + level.var_16CB[var_03 + var_04] _settext("."); + continue; + } + + level.var_16CB[var_03 + var_04] _settext(var_01[var_02 - var_04]); + } + + for(var_04 = 1;var_04 < level.var_16CB.size - var_03;var_04++) + { + if(var_02 + var_04 > var_01.size - 1) + { + level.var_16CB[var_03 - var_04] _settext("."); + continue; + } + + level.var_16CB[var_03 - var_04] _settext(var_01[var_02 + var_04]); + } + + maps\_utility::vision_set_fog_changes(var_01[var_02],0); +} + +//Function Number: 39 +init_fog_transition() +{ + if(!isdefined(level.fog_transition_ent)) + { + level.fog_transition_ent = spawnstruct(); + level.fog_transition_ent.var_16DE = ""; + level.fog_transition_ent.time = 0; + } +} + +//Function Number: 40 +playerinit() +{ + var_00 = level.vision_set_transition_ent.vision_set; + level.vision_set_transition_ent.vision_set = ""; + level.vision_set_transition_ent.time = ""; + init_fog_transition(); + level.fog_transition_ent.var_16DE = ""; + level.fog_transition_ent.time = ""; + setcurrentgroup(var_00); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_audio.gsc b/MW3/Xbox/SP/maps/_audio.gsc new file mode 100644 index 0000000..75b15a3 --- /dev/null +++ b/MW3/Xbox/SP/maps/_audio.gsc @@ -0,0 +1,3235 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_audio.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 175 + * Decompile Time: 2936 ms + * Timestamp: 10/27/2023 2:32:58 AM +*******************************************************************/ + +//Function Number: 1 +aud_init() +{ + if(!isdefined(level.aud)) + { + if(!isdefined(level.script)) + { + level.script = tolower(getdvar("mapname")); + } + + level.aud = spawnstruct(); + if(!isdefined(level._audio)) + { + level._audio = spawnstruct(); + } + + level._audio.using_string_tables = 0; + level._audio.var_12BF = []; + var_00 = spawnstruct(); + level._audio.index = spawnstruct(); + level._audio.index.local = func_1371(); + level._audio.index.common = func_1371(); + index_common_presets(); + level._audio.var_12C2 = []; + level._audio.progress_trigger_callbacks = []; + level._audio.progress_maps = []; + level._audio.var_12C5 = 0; + level._audio.var_12C6 = ""; + level._audio.current_filter_indices = ["",""]; + level._audio.var_1165 = 0; + level._audio.vo_duck_active = 0; + level._audio.var_12C9 = undefined; + level._audio.player_state = spawnstruct(); + level._audio.player_state.locamote = "idle"; + level._audio.player_state.locamote_prev = "idle"; + level.ambient_reverb = []; + level.var_12CD = []; + level.fxfireloopmod = 1; + level.var_1031 = ""; + level.var_12CE = 0; + level.eq_mix_track = 1; + level.eq_track[level.var_12CE] = ""; + level.eq_track[level.eq_mix_track] = ""; + maps\_audio_stream_manager::sm_init(); + maps\_audio_dynamic_ambi::damb_init(); + maps\_audio_zone_manager::azm_init(); + thread maps\_audio_mix_manager::mm_init(); + maps\_audio_reverb::rvb_init(); + maps\_audio_music::mus_init(); + maps\_audio_whizby::whiz_init(); + maps\_audio_vehicles::vm_init(); + thread aud_level_fadein(); + thread aud_wait_for_mission_fail_music(); + func_1314(::_audio_msg_handler); + } +} + +//Function Number: 2 +audio_presets_dynamic_ambience(param_00,param_01) +{ + aud_print_error("CALLING DYNAMIC_AMBIENCE PRESET USING OLD METHOD!"); +} + +//Function Number: 3 +audio_presets_dynamic_ambience_components(param_00,param_01) +{ + aud_print_error("CALLING DYNAMIC_AMBIENCE_COMPONENTS PRESET USING OLD METHOD!"); +} + +//Function Number: 4 +audio_presets_dynamic_ambience_loop_definitions(param_00,param_01) +{ + aud_print_error("CALLING DYNAMIC_AMBIENCE_LOOP_DEFINITIONS PRESET USING OLD METHOD!"); +} + +//Function Number: 5 +audio_presets_mix(param_00,param_01) +{ + aud_print_error("CALLING MIX PRESET USING OLD METHOD!"); +} + +//Function Number: 6 +audio_presets_occlusion(param_00,param_01) +{ + aud_print_error("CALLING OCCLUSION PRESET USING OLD METHOD!"); +} + +//Function Number: 7 +audio_presets_reverb(param_00,param_01) +{ + aud_print_error("CALLING REVERB PRESET USING OLD METHOD!"); +} + +//Function Number: 8 +audio_presets_whizby(param_00,param_01) +{ + aud_print_error("CALLING WHIZBY PRESET USING OLD METHOD!"); +} + +//Function Number: 9 +audio_presets_zones(param_00,param_01) +{ + aud_print_error("CALLING ZONE PRESET USING OLD METHOD!"); +} + +//Function Number: 10 +aud_prime_stream(param_00,param_01,param_02) +{ + var_03 = 0; + if(isdefined(param_01)) + { + var_03 = param_01; + } + + self endon("release" + param_00); + for(;;) + { + self prefetchsound(param_00,"primed" + param_00); + self waittill("primed" + param_00); + if(!isdefined(self.var_12D4)) + { + self.var_12D4 = []; + } + + self.var_12D4[param_00] = 1; + if(!var_03) + { + return; + } + else if(isdefined(param_02)) + { + wait param_02; + } + } +} + +//Function Number: 11 +aud_is_stream_primed(param_00) +{ + if(isdefined(self.var_12D4) && isdefined(self.var_12D4[param_00]) && self.var_12D4[param_00]) + { + return 1; + } + + return 0; +} + +//Function Number: 12 +aud_error_if_not_primed(param_00) +{ +} + +//Function Number: 13 +func_12D7(param_00,param_01) +{ + var_02 = 0; + if(isdefined(param_01)) + { + var_02 = param_01; + } + + self notify("release" + param_00); + if(var_02 && isdefined(self)) + { + self stopsounds(); + } +} + +//Function Number: 14 +aud_wait_till_primed(param_00) +{ + if(isdefined(self.var_12D4) && isdefined(self.var_12D4[param_00]) && self.var_12D4[param_00]) + { + return; + } + + self waittill("primed" + param_00); + self notify("release" + param_00); +} + +//Function Number: 15 +aud_prime_and_play_internal(param_00,param_01,param_02) +{ + aud_prime_stream(param_00); + if(isdefined(param_02) && param_02) + { + aud_slomo_wait(param_01); + } + else + { + wait param_01; + } + + self playsound(param_00,"sounddone"); + self waittill("sounddone"); + wait 0.05; + self delete(); +} + +//Function Number: 16 +aud_prime_and_play(param_00,param_01,param_02,param_03) +{ + var_04 = level.player.origin; + if(isdefined(param_02)) + { + var_04 = param_02; + } + + var_05 = spawn("script_origin",var_04); + var_05 thread aud_prime_and_play_internal(param_00,param_01,param_03); + return var_05; +} + +//Function Number: 17 +aud_add_progress_map(param_00,param_01) +{ + level._audio.progress_maps[param_00] = param_01; +} + +//Function Number: 18 +aud_get_progress_map(param_00) +{ + if(isdefined(level._audio.progress_maps[param_00])) + { + return level._audio.progress_maps[param_00]; + } +} + +//Function Number: 19 +is_deathsdoor_audio_enabled() +{ + if(!isdefined(level._audio.deathsdoor_enabled)) + { + return 1; + } + + return level._audio.deathsdoor_enabled; +} + +//Function Number: 20 +aud_enable_deathsdoor_audio() +{ + level.player.disable_breathing_sound = 0; + level._audio.deathsdoor_enabled = 1; +} + +//Function Number: 21 +aud_disable_deathsdoor_audio() +{ + level.player.disable_breathing_sound = 1; + level._audio.deathsdoor_enabled = 0; +} + +//Function Number: 22 +func_12E2() +{ + if(is_deathsdoor_audio_enabled() || isdefined(level._audio.in_deathsdoor)) + { + level._audio.in_deathsdoor = undefined; + thread aud_set_occlusion(level._audio.deathsdoor.occlusion); + thread func_1138(level._audio.deathsdoor.filter); + thread maps\_audio_reverb::rvb_start_preset(level._audio.deathsdoor.reverb); + } +} + +//Function Number: 23 +set_deathsdoor() +{ + level._audio.in_deathsdoor = 1; + if(!isdefined(level._audio.deathsdoor)) + { + level._audio.deathsdoor = spawnstruct(); + } + + level._audio.deathsdoor.filter = undefined; + level._audio.deathsdoor.occlusion = undefined; + level._audio.deathsdoor.reverb = undefined; + level._audio.deathsdoor.filter = level._audio.var_12C6; + level._audio.deathsdoor.occlusion = level._audio.var_12E7; + level._audio.deathsdoor.reverb = level._audio.current_reverb; + if(is_deathsdoor_audio_enabled()) + { + thread func_1138("deathsdoor"); + thread maps\_audio_reverb::rvb_start_preset("deathsdoor"); + } +} + +//Function Number: 24 +aud_set_mission_failed_music(param_00) +{ + level._audio.var_12E9 = param_00; +} + +//Function Number: 25 +aud_wait_for_mission_fail_music() +{ + wait 0.05; + while(!common_scripts\utility::flag_exist("missionfailed")) + { + wait 0.05; + } + + var_00 = "shg_mission_failed_stinger"; + common_scripts\utility::flag_wait("missionfailed"); + if(isdefined(level._audio.var_12E9)) + { + var_00 = level._audio.var_12E9; + } + + if(soundexists(var_00)) + { + maps\_audio_music::mus_play(var_00,2,4); + } +} + +//Function Number: 26 +aud_set_filter_internal(param_00,param_01,param_02,param_03) +{ + var_04 = 7; + var_05 = ""; + var_06 = 0; + var_07 = []; + var_08 = []; + var_09 = 0; + var_0A = 0; + param_02 = func_111A("filter",param_00,param_03); + if(param_02 != -1) + { + var_06 = param_02; + } + else if((param_03 && aud_is_common_indexed()) || !param_03 && aud_is_local_indexed()) + { + return 0; + } + + while(var_05 != "EOF" && var_0A < 10) + { + var_05 = tablelookupbyrow(param_01,var_06,0); + if(var_05 != "") + { + var_0A = 0; + } + + while(var_05 == param_00) + { + var_09 = 1; + var_07 = undefined; + for(var_0B = 1;var_0B < var_04;var_0B++) + { + if(!isdefined(var_08[var_0B])) + { + var_08[var_0B] = tablelookupbyrow(param_01,0,var_0B); + } + + var_0C = var_08[var_0B]; + var_0D = tablelookupbyrow(param_01,var_06,var_0B); + if(var_0D != "") + { + switch(var_0C) + { + case "channel_name": + var_07 = spawnstruct(); + var_07.channel = var_0D; + break; + + case "band": + var_07.var_12ED = int(var_0D); + break; + + case "type": + var_07.type = var_0D; + break; + + case "freq": + var_07.var_12EE = float(var_0D); + break; + + case "gain": + var_07.gain = float(var_0D); + break; + + case "q": + var_07.q = float(var_0D); + break; + + default: + break; + } + } + } + + if(!isdefined(level._audio.var_12F1[param_00])) + { + level._audio.var_12F1[param_00] = []; + } + + level._audio.var_12F1[param_00][level._audio.var_12F1[param_00].size] = var_07; + var_06++; + var_05 = tablelookupbyrow(param_01,var_06,0); + } + + var_0A++; + if(var_09) + { + return 1; + } + + var_06++; + } + + return 0; +} + +//Function Number: 27 +aud_set_filter_threaded(param_00,param_01,param_02) +{ + if(!isdefined(level._audio.var_12F1)) + { + level._audio.var_12F1 = []; + } + + var_03 = 0; + if(isdefined(param_01)) + { + var_03 = param_01; + } + + if(!isdefined(level._audio.var_12F1[param_00])) + { + level._audio.var_12F1[param_00] = []; + var_04 = "soundtables/common_filter.csv"; + var_05 = get_filter_stringtable(); + var_06 = 1; + var_06 = aud_set_filter_internal(param_00,var_05,var_03,0); + if(!var_06) + { + var_06 = aud_set_filter_internal(param_00,var_04,var_03,1); + } + + if(!var_06) + { + return; + } + } + + level._audio.var_12C6 = param_00; + if(level._audio.current_filter_indices[var_03] != param_00) + { + level._audio.current_filter_indices[var_03] = param_00; + var_07 = 10; + if(isdefined(param_02)) + { + var_07 = param_02; + } + + var_08 = 0; + foreach(var_0A in level._audio.var_12F1[param_00]) + { + level.player seteq(var_0A.channel,var_03,var_0A.var_12ED,var_0A.type,var_0A.gain,var_0A.var_12EE,var_0A.q); + if(var_08 < var_07) + { + var_08++; + continue; + } + + var_08 = 0; + wait 0.05; + } + } +} + +//Function Number: 28 +aud_clear_filter(param_00) +{ + var_01 = 0; + if(isdefined(param_00)) + { + var_01 = param_00; + } + + level._audio.current_filter_indices[var_01] = ""; + func_1138(undefined,var_01); +} + +//Function Number: 29 +func_12F4() +{ + level._audio.filter_zone_disabled = 1; +} + +//Function Number: 30 +func_12F6() +{ + level._audio.filter_zone_disabled = undefined; +} + +//Function Number: 31 +func_1164() +{ + return !isdefined(level._audio.filter_zone_disabled); +} + +//Function Number: 32 +func_1138(param_00,param_01,param_02,param_03) +{ + if(level._audio.var_12C5) + { + return; + } + + if(isdefined(level.player.ent_flag) && isdefined(level.player.ent_flag["player_has_red_flashing_overlay"]) && level.player maps\_utility::ent_flag("player_has_red_flashing_overlay")) + { + return; + } + + var_04 = 0; + if(isdefined(param_01)) + { + var_04 = param_01; + } + + if(!isdefined(param_00) || isdefined(param_00) && param_00 == "") + { + level._audio.var_12C6 = undefined; + level.player deactivateeq(var_04); + return; + } + + thread aud_set_filter_threaded(param_00,param_01,param_02); +} + +//Function Number: 33 +aud_disable_filter_setting(param_00) +{ + level._audio.var_12C5 = 1; +} + +//Function Number: 34 +func_12F8(param_00) +{ + level._audio.var_12C5 = 0; +} + +//Function Number: 35 +func_12F9(param_00) +{ + var_01 = "soundtables/common_timescale.csv"; + var_02 = 2; + var_03 = ""; + var_04 = 0; + var_05 = []; + var_06 = []; + var_07 = 0; + var_08 = 0; + var_09 = func_111A("timescale",param_00,1); + if(var_09 != -1) + { + var_04 = var_09; + } + else if(aud_is_common_indexed()) + { + return 0; + } + + while(var_03 != "EOF" && var_08 < 10) + { + var_03 = tablelookupbyrow(var_01,var_04,0); + if(var_03 != "") + { + var_08 = 0; + } + + while(var_03 == param_00) + { + var_07 = 1; + var_05 = undefined; + for(var_0A = 1;var_0A < var_02 + 1;var_0A++) + { + if(!isdefined(var_06[var_0A])) + { + var_06[var_0A] = tablelookupbyrow(var_01,0,var_0A); + } + + var_0B = var_06[var_0A]; + var_0C = tablelookupbyrow(var_01,var_04,var_0A); + if(var_0C != "") + { + switch(var_0B) + { + case "channel_name": + var_05 = spawnstruct(); + var_05.channel = var_0C; + break; + + case "scalefactor": + var_05.scalefactor = float(var_0C); + break; + + default: + aud_print_error("In timescale preset table, common_timescale.csv, there is an improperly labeled parameter column, \" + var_0B + "\"."); + break; + } + } + } + + if(isdefined(var_05)) + { + level._audio.var_12FB[param_00][level._audio.var_12FB[param_00].size] = var_05; + } + + var_04++; + var_03 = tablelookupbyrow(var_01,var_04,0); + } + + var_08++; + if(var_07) + { + return 1; + } + + var_04++; + } + + return 0; +} + +//Function Number: 36 +aud_set_timescale_threaded(param_00,param_01) +{ + var_02 = "default"; + if(isdefined(param_00)) + { + var_02 = param_00; + } + + if(!isdefined(level._audio.var_12FB)) + { + level._audio.var_12FB = []; + } + + var_03 = 1; + if(!isdefined(level._audio.var_12FB[var_02])) + { + level._audio.var_12FB[var_02] = []; + var_03 = func_12F9(var_02); + } + + if(!var_03) + { + return; + } + + var_04 = 10; + if(isdefined(param_01)) + { + var_04 = param_01; + } + + var_05 = 0; + foreach(var_07 in level._audio.var_12FB[var_02]) + { + soundsettimescalefactor(var_07.channel,var_07.scalefactor); + if(var_05 < var_04) + { + var_05++; + continue; + } + + var_05 = 0; + wait 0.05; + } +} + +//Function Number: 37 +aud_set_timescale(param_00,param_01) +{ + thread aud_set_timescale_threaded(param_00,param_01); +} + +//Function Number: 38 +aud_set_occlusion_internal(param_00) +{ + if(!isdefined(param_00)) + { + return; + } + + var_01 = "soundtables/common_occlusion.csv"; + var_02 = 5; + var_03 = ""; + var_04 = 0; + var_05 = []; + var_06 = []; + var_07 = 0; + var_08 = 0; + var_09 = func_111A("occlusion",param_00,1); + if(var_09 != -1) + { + var_04 = var_09; + } + else if(aud_is_common_indexed()) + { + return 0; + } + + while(var_03 != "EOF" && var_08 < 10) + { + var_03 = tablelookupbyrow(var_01,var_04,0); + if(var_03 != "") + { + var_08 = 0; + } + + while(var_03 == param_00) + { + var_07 = 1; + var_05 = undefined; + for(var_0A = 1;var_0A < var_02 + 1;var_0A++) + { + if(!isdefined(var_06[var_0A])) + { + var_06[var_0A] = tablelookupbyrow(var_01,0,var_0A); + } + + var_0B = var_06[var_0A]; + var_0C = tablelookupbyrow(var_01,var_04,var_0A); + if(var_0C != "") + { + switch(var_0B) + { + case "channel_name": + var_05 = spawnstruct(); + var_05.channel = var_0C; + break; + + case "frequency": + var_05.var_12EE = float(var_0C); + break; + + case "type": + var_05.type = var_0C; + break; + + case "gain": + var_05.gain = float(var_0C); + break; + + case "q": + var_05.q = float(var_0C); + break; + + default: + aud_print_error("In occlusion preset table, common_occlusion.csv, there is an improperly labeled parameter column, \" + var_0B + "\"."); + break; + } + } + } + + if(!isdefined(var_05.var_12EE)) + { + var_05.var_12EE = 600; + } + + if(!isdefined(var_05.type)) + { + var_05.type = "highshelf"; + } + + if(!isdefined(var_05.gain)) + { + var_05.gain = -12; + } + + if(!isdefined(var_05.q)) + { + var_05.q = 1; + } + + level._audio.occlusion_presets[param_00][level._audio.occlusion_presets[param_00].size] = var_05; + var_04++; + var_03 = tablelookupbyrow(var_01,var_04,0); + } + + var_08++; + if(var_07) + { + return 1; + } + + var_04++; + } + + return 0; +} + +//Function Number: 39 +aud_set_occlusion_threaded(param_00,param_01) +{ + var_02 = "default"; + if(isdefined(param_00)) + { + var_02 = param_00; + } + + if(!isdefined(level._audio.occlusion_presets)) + { + level._audio.occlusion_presets = []; + } + + var_03 = 1; + if(!isdefined(level._audio.occlusion_presets[var_02])) + { + level._audio.occlusion_presets[var_02] = []; + var_03 = aud_set_occlusion_internal(var_02); + } + + if(!var_03) + { + return; + } + + level._audio.var_12E7 = var_02; + if(!isdefined(level._audio.var_1165) && level._audio.var_1165) + { + var_04 = 10; + if(isdefined(param_01)) + { + var_04 = var_04; + } + + var_05 = 0; + foreach(var_07 in level._audio.occlusion_presets[var_02]) + { + level.player setocclusion(var_07.channel,var_07.var_12EE,var_07.type,var_07.gain,var_07.q); + if(var_05 < var_04) + { + var_05++; + continue; + } + + var_05 = 0; + wait 0.05; + } + } +} + +//Function Number: 40 +aud_set_occlusion(param_00,param_01) +{ + if(isdefined(level.player.ent_flag) && isdefined(level.player.ent_flag["player_has_red_flashing_overlay"]) && level.player maps\_utility::ent_flag("player_has_red_flashing_overlay")) + { + return; + } + + if(!isdefined(param_00)) + { + level._audio.var_12C6 = undefined; + return; + } + + thread aud_set_occlusion_threaded(param_00,param_01); +} + +//Function Number: 41 +func_1137(param_00) +{ + var_01 = 10; + if(isdefined(param_00)) + { + var_01 = var_01; + } + + var_02 = 0; + foreach(var_05, var_04 in level._audio.mix.channel_names) + { + level.player deactivateocclusion(var_05); + if(var_02 < var_01) + { + var_02++; + continue; + } + + var_02 = 0; + wait 0.05; + } +} + +//Function Number: 42 +func_1301(param_00) +{ + var_01 = 10; + if(isdefined(param_00)) + { + var_01 = var_01; + } + + func_1138(undefined,0,var_01); + func_1138(undefined,1,var_01); + func_1137(var_01); + level._audio.var_1165 = 1; +} + +//Function Number: 43 +func_1302(param_00) +{ + var_01 = undefined; + var_02 = "default"; + var_03 = 10; + if(isdefined(param_00)) + { + var_03 = var_03; + } + + if(isdefined(level._audio.zone_mgr.current_zone) && isdefined(level._audio.zone_mgr.var_112B[level._audio.zone_mgr.current_zone])) + { + var_04 = maps\_audio_zone_manager::azm_get_current_zone(); + var_05 = level._audio.zone_mgr.var_112B[var_04]; + if(isdefined(var_05["occlusion"]) && var_05["occlusion"] != "none") + { + var_02 = var_05["occlusion"]; + } + + if(isdefined(var_05["filter"]) && var_05["filter"] != "none") + { + var_01 = var_05["filter"]; + } + } + + if(level._audio.var_12E7 != var_02) + { + var_02 = level._audio.var_12E7; + } + + level._audio.var_1165 = 0; + func_1138(var_01,0,var_03); + func_1138(undefined,1,var_03); + aud_set_occlusion(var_02,var_03); +} + +//Function Number: 44 +aud_use_level_zones(param_00) +{ + level._audio.level_audio_zones_function = param_00; +} + +//Function Number: 45 +aud_use_level_reverb(param_00) +{ + level._audio.var_103C = param_00; +} + +//Function Number: 46 +aud_use_level_filters(param_00) +{ + level._audio.level_audio_filter_function = param_00; +} + +//Function Number: 47 +func_1307(param_00) +{ + var_01 = 1; + if(isdefined(param_00)) + { + var_01 = param_00; + } + + level._audio.using_string_tables = 1; + maps\_audio_zone_manager::azm_use_string_table(); + maps\_audio_reverb::rvb_use_string_table(); + maps\_audio_dynamic_ambi::damb_use_string_table(); + maps\_audio_mix_manager::mm_use_string_table(); + maps\_audio_whizby::whiz_use_string_table(); + if(var_01) + { + func_1374(); + } + + maps\_audio_whizby::whiz_set_preset("default"); +} + +//Function Number: 48 +set_stringtable_mapname(param_00) +{ + func_1307(0); + level._audio.var_12BF["map"] = param_00; + func_1374(); +} + +//Function Number: 49 +get_stringtable_mapname() +{ + if(isdefined(level._audio.var_12BF["map"])) + { + return level._audio.var_12BF["map"]; + } + + return common_scripts\utility::get_template_level(); +} + +//Function Number: 50 +func_130A(param_00) +{ + level._audio.var_12BF["mix"] = param_00; +} + +//Function Number: 51 +get_mix_stringtable() +{ + if(!isdefined(level._audio.var_12BF["mix"])) + { + return "soundtables/" + get_stringtable_mapname() + "_mix.csv"; + } + + return "soundtables/" + level._audio.var_12BF["mix"]; +} + +//Function Number: 52 +set_damb_stringtable(param_00) +{ + level._audio.var_12BF["damb"] = param_00; +} + +//Function Number: 53 +get_damb_stringtable() +{ + if(!isdefined(level._audio.var_12BF["damb"])) + { + return "soundtables/" + get_stringtable_mapname() + "_damb.csv"; + } + + return "soundtables/" + level._audio.var_12BF["damb"]; +} + +//Function Number: 54 +set_damb_component_stringtable(param_00) +{ + level._audio.var_12BF["damb_comp"] = param_00; +} + +//Function Number: 55 +get_damb_component_stringtable(param_00) +{ + if(!isdefined(level._audio.var_12BF["damb_comp"])) + { + return "soundtables/" + get_stringtable_mapname() + "_damb_components.csv"; + } + + return "soundtables/" + level._audio.var_12BF["damb_comp"]; +} + +//Function Number: 56 +set_damb_loops_stringtable(param_00) +{ + level._audio.var_12BF["damb_loops"] = param_00; +} + +//Function Number: 57 +get_damb_loops_stringtable(param_00) +{ + if(!isdefined(level._audio.var_12BF["damb_loops"])) + { + return "soundtables/" + get_stringtable_mapname() + "_damb_loops.csv"; + } + + return "soundtables/" + level._audio.var_12BF["damb_loops"]; +} + +//Function Number: 58 +func_130E(param_00) +{ + level._audio.var_12BF["reverb"] = param_00; +} + +//Function Number: 59 +get_reverb_stringtable() +{ + if(!isdefined(level._audio.var_12BF["reverb"])) + { + return "soundtables/" + get_stringtable_mapname() + "_reverb.csv"; + } + + return "soundtables/" + level._audio.var_12BF["reverb"]; +} + +//Function Number: 60 +func_130F(param_00) +{ + level._audio.var_12BF["filter"] = param_00; +} + +//Function Number: 61 +get_filter_stringtable() +{ + if(!isdefined(level._audio.var_12BF["filter"])) + { + return "soundtables/" + get_stringtable_mapname() + "_filter.csv"; + } + + return "soundtables/" + level._audio.var_12BF["filter"]; +} + +//Function Number: 62 +func_1311(param_00) +{ + level._audio.var_12BF["zone"] = param_00; +} + +//Function Number: 63 +get_zone_stringtable() +{ + if(!isdefined(level._audio.var_12BF["zone"])) + { + return "soundtables/" + get_stringtable_mapname() + "_zone.csv"; + } + + return "soundtables/" + level._audio.var_12BF["zone"]; +} + +//Function Number: 64 +set_occlusion_stringtable(param_00) +{ + level._audio.var_12BF["occlusion"] = param_00; +} + +//Function Number: 65 +get_occlusion_stringtable() +{ + if(!isdefined(level._audio.var_12BF["occlusion"])) + { + return "soundtables/" + get_stringtable_mapname() + "_occlusion.csv"; + } + + return "soundtables/" + level._audio.var_12BF["occlusion"]; +} + +//Function Number: 66 +func_1314(param_00) +{ + level._audio.var_12C2[level._audio.var_12C2.size] = param_00; +} + +//Function Number: 67 +func_121F(param_00,param_01,param_02) +{ + thread aud_dispatch_msg(param_00,param_01,param_02); +} + +//Function Number: 68 +aud_dispatch_msg(param_00,param_01,param_02) +{ + var_03 = 0; + var_04 = 0; + foreach(var_06 in level._audio.var_12C2) + { + var_04 = self [[ var_06 ]](param_00,param_01); + if(!var_03 && isdefined(var_04) && var_04 == 1) + { + var_03 = var_04; + continue; + } + + if(!var_03 && !isdefined(var_04)) + { + var_03 = 1; + } + } + + if(isdefined(param_02)) + { + self notify(param_02); + } + + if(!var_03) + { + aud_print_warning("\tAUDIO MESSAGE NOT HANDLED: " + param_00); + } +} + +//Function Number: 69 +aud_get_player_locamote_state() +{ + return level._audio.player_state.locamote; +} + +//Function Number: 70 +func_117A(param_00,param_01,param_02) +{ + var_03 = 0; + var_04 = aud_get_sticky_threat(); + if(isdefined(var_04)) + { + var_03 = var_04; + } + else + { + var_05 = 3; + var_06 = 10; + var_07 = 100; + if(isdefined(param_00)) + { + var_05 = param_00; + } + + if(isdefined(param_02)) + { + var_07 = param_02; + } + + if(isdefined(param_02)) + { + var_06 = param_01; + } + + var_08 = 36 * var_07; + var_09 = 36 * var_06; + var_0A = getaiarray("bad_guys"); + var_0B = 0; + var_0C = 0; + foreach(var_0E in var_0A) + { + if(isdefined(var_0E.alertlevelint) && var_0E.alertlevelint >= var_05) + { + var_0F = distance(level.player.origin,var_0E.origin); + if(var_0F < var_08) + { + var_0B++; + if(var_0F < var_09) + { + var_10 = 1; + } + else + { + var_10 = 1 - var_10 - var_0A / var_09 - var_0A; + } + + var_0C = var_0C + var_10; + } + } + } + + if(var_0B > 0) + { + var_03 = var_0C / var_0B; + } + else + { + var_03 = 0; + } + } + + return var_03; +} + +//Function Number: 71 +aud_get_sticky_threat() +{ + return level._audio.var_12C9; +} + +//Function Number: 72 +aud_set_sticky_threat(param_00) +{ + level._audio.var_12C9 = param_00; +} + +//Function Number: 73 +aud_clear_sticky_threat() +{ + level._audio.var_12C9 = undefined; +} + +//Function Number: 74 +aud_num_alive_enemies(param_00) +{ + var_01 = 0; + var_02 = 3600; + if(isdefined(param_00)) + { + var_02 = 36 * param_00; + } + + var_03 = getaiarray("bad_guys"); + foreach(var_05 in var_03) + { + if(isalive(var_05)) + { + var_06 = distance(level.player.origin,var_05.origin); + if(var_06 < var_02) + { + var_01++; + } + } + } + + return var_01; +} + +//Function Number: 75 +_audio_msg_handler(param_00,param_01) +{ + var_02 = 1; + switch(param_00) + { + case "level_fade_to_black": + var_03 = param_01[0]; + var_04 = param_01[1]; + wait var_03; + maps\_audio_mix_manager::mm_start_preset("mute_all",var_04); + break; + + case "generic_building_bomb_shake": + level.player playsound("sewer_bombs"); + break; + + case "start_player_slide_trigger": + break; + + case "end_player_slide_trigger": + break; + + case "missile_fired": + break; + + case "msg_audio_fx_ambientExp": + break; + + case "aud_play_sound_at": + aud_play_sound_at(param_01.alias,param_01.pos); + break; + + case "aud_play_dynamic_explosion": + if(isdefined(param_01.spread_width)) + { + var_05 = param_01.spread_width; + } + else + { + var_05 = undefined; + } + + if(isdefined(param_01.rear_dist)) + { + var_06 = param_01.rear_dist; + } + else + { + var_06 = undefined; + } + + if(isdefined(param_01.velocity)) + { + var_07 = param_01.velocity; + } + else + { + var_07 = undefined; + } + + aud_play_dynamic_explosion(param_01.explosion_pos,param_01.var_1320,param_01.right_alias,var_05,var_06,var_07); + break; + + case "aud_play_conversation": + aud_play_conversation(param_00,param_01); + break; + + case "xm25_contact_explode": + if(soundexists("xm25_proj_explo")) + { + var_08 = param_01; + thread common_scripts\utility::play_sound_in_space("xm25_proj_explo",var_08); + } + break; + + case "light_flicker_on": + var_09 = param_01; + aud_handle_flickering_light(var_09); + break; + + default: + var_02 = 0; + break; + } + + return var_02; +} + +//Function Number: 76 +aud_handle_flickering_light(param_00) +{ + var_01 = 0; + switch(param_00.model) + { + case "furniture_lamp_table1": + case "com_cafe_light_part1_off": + case "furniture_lamp_floor1_off": + var_01 = 1; + if(soundexists("paris_lamplight_flicker")) + { + thread common_scripts\utility::play_sound_in_space("paris_lamplight_flicker",param_00.origin); + } + break; + + default: + var_01 = 0; + break; + } + + return var_01; +} + +//Function Number: 77 +aud_play_conversation(param_00,param_01) +{ + var_02 = param_01; + var_03 = []; + for(var_04 = 0;var_04 < var_02.size;var_04++) + { + var_03[var_04] = var_02[var_04].ent.battlechatter; + var_02[var_04].ent.battlechatter = 0; + } + + foreach(var_06 in var_02) + { + if(isdefined(var_06.delay)) + { + wait var_06.delay; + } + + var_07 = spawn("script_origin",(0,0,0)); + var_07 linkto(var_06.ent,"",(0,0,0),(0,0,0)); + var_07 playsound(var_06.sound,"sounddone"); + var_07 waittill("sounddone"); + wait 0.05; + var_07 delete(); + } + + for(var_04 = 0;var_04 < var_02.size;var_04++) + { + var_02[var_04].ent.battlechatter = var_03[var_04]; + } +} + +//Function Number: 78 +trigger_multiple_audio_register_callback(param_00) +{ + if(!isdefined(level._audio.var_1017)) + { + level._audio.var_1017 = []; + } + + for(var_01 = 0;var_01 < param_00.size;var_01++) + { + var_02 = param_00[var_01]; + var_03 = var_02[0]; + var_04 = var_02[1]; + level._audio.var_1017[var_03] = var_04; + } + + if(isdefined(level._audio.trigger_function_keys)) + { + foreach(var_03 in level._audio.trigger_function_keys) + { + } + + level._audio.trigger_function_keys = undefined; + } +} + +//Function Number: 79 +get_target_ent_target() +{ + var_00 = common_scripts\utility::get_target_ent(); + return var_00.target; +} + +//Function Number: 80 +get_target_ent_origin() +{ + var_00 = common_scripts\utility::get_target_ent(); + return var_00.origin; +} + +//Function Number: 81 +get_target_ent_target_ent() +{ + var_00 = common_scripts\utility::get_target_ent(); + return var_00 common_scripts\utility::get_target_ent(); +} + +//Function Number: 82 +get_target_ent_target_ent_origin() +{ + var_00 = get_target_ent_target_ent(); + return var_00.origin; +} + +//Function Number: 83 +func_132B(param_00,param_01) +{ + if(!isdefined(param_00) || !isdefined(param_01)) + { + return undefined; + } + + if(param_01) + { + return param_00[1]; + } + + return param_00[0]; +} + +//Function Number: 84 +get_zone_to(param_00,param_01) +{ + if(!isdefined(param_00) || !isdefined(param_01)) + { + return undefined; + } + + if(param_01) + { + return param_00[0]; + } + + return param_00[1]; +} + +//Function Number: 85 +trigger_multiple_audio_trigger(param_00) +{ + if(!isdefined(level._audio)) + { + level._audio = spawnstruct(); + } + + if(!isdefined(level._audio.var_1017)) + { + level._audio.var_1017 = []; + } + + var_01 = undefined; + if(isdefined(param_00) && param_00) + { + if(isdefined(self.ambient)) + { + var_01 = strtok(self.ambient," "); + } + } + else if(isdefined(self.script_audio_zones)) + { + var_01 = strtok(self.script_audio_zones," "); + } + else if(isdefined(self.audio_zones)) + { + var_01 = strtok(self.audio_zones," "); + } + + if(isdefined(var_01) && var_01.size == 2) + { + } + else if(isdefined(var_01) && var_01.size == 1) + { + for(;;) + { + self waittill("trigger",var_02); + maps\_audio_zone_manager::func_1134(var_01[0],self.script_duration); + } + } + + if(isdefined(self.script_audio_progress_map)) + { + if(!isdefined(level._audio.progress_maps[self.script_audio_progress_map])) + { + aud_print_error("Trying to set a progress_map_function without defining the envelope in the level.aud.envs array."); + self.script_audio_progress_map = undefined; + } + } + + if(!isdefined(level._audio.trigger_function_keys)) + { + level._audio.trigger_function_keys = []; + } + + if(isdefined(self.script_audio_enter_func)) + { + level._audio.trigger_function_keys[level._audio.trigger_function_keys.size] = self.script_audio_enter_func; + } + + if(isdefined(self.script_audio_exit_func)) + { + level._audio.trigger_function_keys[level._audio.trigger_function_keys.size] = self.script_audio_exit_func; + } + + if(isdefined(self.script_audio_progress_func)) + { + level._audio.trigger_function_keys[level._audio.trigger_function_keys.size] = self.script_audio_progress_func; + } + + if(isdefined(self.script_audio_point_func)) + { + level._audio.trigger_function_keys[level._audio.trigger_function_keys.size] = self.script_audio_point_func; + } + + if(!isdefined(self.script_audio_blend_mode)) + { + self.script_audio_blend_mode = "blend"; + } + + var_03 = undefined; + var_04 = undefined; + var_05 = undefined; + if(isdefined(self.target)) + { + if(!isdefined(common_scripts\utility::get_target_ent())) + { + aud_print_error("Audo Zone Trigger at " + self.origin + " has defined a target, " + self.target + ", but that target doesn\'t exist."); + return; + } + + if(isdefined(get_target_ent_target())) + { + var_03 = get_target_ent_origin(); + if(!isdefined(get_target_ent_target_ent())) + { + aud_print_error("Audo Zone Trigger at " + self.origin + " has defined a target, " + get_target_ent_target() + ", but that target doesn\'t exist."); + return; + } + + var_04 = get_target_ent_target_ent_origin(); + } + else + { + var_06 = common_scripts\utility::get_target_ent(); + var_07 = 2 * self.origin - var_06.origin; + var_08 = vectortoangles(var_07); + var_03 = get_target_ent_origin(); + var_04 = var_03 + var_07; + if(angleclamp180(var_08[0]) < 45) + { + var_03 = (var_03[0],var_03[1],0); + var_04 = (var_04[0],var_04[1],0); + } + } + + var_05 = distance(var_03,var_04); + } + + var_09 = 0; + for(;;) + { + self waittill("trigger",var_02); + if(aud_is_specops() && var_02 != level.player) + { + continue; + } + + if(isdefined(var_03) && isdefined(var_04)) + { + var_0A = trigger_multiple_audio_progress(var_03,var_04,var_05,var_02.origin); + if(var_0A < 0.5) + { + var_09 = 0; + if(isdefined(self.script_audio_enter_msg)) + { + if(isdefined(var_01) && isdefined(var_01[0])) + { + func_121F(self.script_audio_enter_msg,var_01[0]); + } + else + { + func_121F(self.script_audio_enter_msg,"front"); + } + } + + if(isdefined(self.script_audio_enter_func)) + { + if(isdefined(var_01) && isdefined(var_01[0])) + { + if(isdefined(level._audio.var_1017[self.script_audio_enter_func])) + { + [[ level._audio.var_1017[self.script_audio_enter_func] ]](var_01[0]); + } + } + else if(isdefined(level._audio.var_1017[self.script_audio_enter_func])) + { + [[ level._audio.var_1017[self.script_audio_enter_func] ]]("front"); + } + } + } + else + { + var_09 = 1; + if(isdefined(self.script_audio_enter_msg)) + { + if(isdefined(var_01) && isdefined(var_01[1])) + { + func_121F(self.script_audio_enter_msg,var_01[1]); + } + else + { + func_121F(self.script_audio_enter_msg,"back"); + } + } + + if(isdefined(self.script_audio_enter_func)) + { + if(isdefined(var_01) && isdefined(var_01[1])) + { + if(isdefined(level._audio.var_1017[self.script_audio_enter_func])) + { + [[ level._audio.var_1017[self.script_audio_enter_func] ]](var_01[1]); + } + } + else if(isdefined(level._audio.var_1017[self.script_audio_enter_func])) + { + [[ level._audio.var_1017[self.script_audio_enter_func] ]]("back"); + } + } + } + } + else + { + if(isdefined(self.script_audio_enter_msg)) + { + func_121F(self.script_audio_enter_msg); + } + + if(isdefined(self.script_audio_enter_func)) + { + if(isdefined(level._audio.var_1017[self.script_audio_enter_func])) + { + [[ level._audio.var_1017[self.script_audio_enter_func] ]](); + } + } + } + + var_0B = undefined; + if(isdefined(func_132B(var_01,var_09)) && isdefined(get_zone_to(var_01,var_09))) + { + var_0B = maps\_audio_zone_manager::func_1150(func_132B(var_01,var_09),get_zone_to(var_01,var_09)); + if(!isdefined(var_0B)) + { + return; + } + + var_0B.mode = self.script_audio_blend_mode; + } + + if(isdefined(var_0B) && func_1164()) + { + if(isdefined(var_0B.filter1) || isdefined(var_0B.filter2)) + { + level.player deactivateeq(1); + } + } + + var_0C = -1; + var_0A = -1; + while(var_02 istouching(self)) + { + if(isdefined(self.script_audio_point_func)) + { + var_0D = trigger_multiple_audio_progress_point(var_03,var_04,var_02.origin); + if(isdefined(level._audio.var_1017[self.script_audio_point_func])) + { + [[ level._audio.var_1017[self.script_audio_point_func] ]](var_0D); + } + } + + if(isdefined(var_03) && isdefined(var_04)) + { + var_0A = trigger_multiple_audio_progress(var_03,var_04,var_05,var_02.origin); + if(isdefined(self.script_audio_progress_map)) + { + var_0A = func_117B(var_0A,level._audio.progress_maps[self.script_audio_progress_map]); + } + + if(var_0A != var_0C) + { + if(isdefined(func_132B(var_01,var_09)) && isdefined(get_zone_to(var_01,var_09))) + { + maps\_audio_zone_manager::azm_print_enter_blend(func_132B(var_01,var_09),get_zone_to(var_01,var_09),var_0A); + } + + if(isdefined(self.script_audio_progress_msg)) + { + func_121F(self.script_audio_progress_msg,var_0A); + } + + if(isdefined(self.script_audio_progress_func)) + { + if(isdefined(level._audio.var_1017[self.script_audio_progress_func])) + { + [[ level._audio.var_1017[self.script_audio_progress_func] ]](var_0A); + } + } + + if(isdefined(var_0B)) + { + trigger_multiple_audio_blend(var_0A,var_0B,var_09); + } + + var_0C = var_0A; + maps\_audio_zone_manager::func_1144(var_0A); + } + } + + if(isdefined(self.var_1338)) + { + wait self.var_1338; + continue; + } + + wait 0.1; + } + + if(isdefined(var_03) && isdefined(var_04)) + { + if(var_0A > 0.5) + { + if(isdefined(var_01) && isdefined(var_01[1])) + { + maps\_audio_zone_manager::azm_set_current_zone(var_01[1]); + } + + if(isdefined(self.script_audio_exit_msg)) + { + if(isdefined(var_01) && isdefined(var_01[1])) + { + func_121F(self.script_audio_exit_msg,var_01[1]); + } + else + { + func_121F(self.script_audio_exit_msg,"back"); + } + } + + if(isdefined(self.script_audio_exit_func)) + { + if(isdefined(var_01) && isdefined(var_01[1])) + { + if(isdefined(level._audio.var_1017[self.script_audio_exit_func])) + { + [[ level._audio.var_1017[self.script_audio_exit_func] ]](var_01[1]); + } + } + else if(isdefined(level._audio.var_1017[self.script_audio_exit_func])) + { + [[ level._audio.var_1017[self.script_audio_exit_func] ]]("back"); + } + } + + var_0A = 1; + } + else + { + if(isdefined(var_01) && isdefined(var_01[0])) + { + maps\_audio_zone_manager::azm_set_current_zone(var_01[0]); + } + + if(isdefined(self.script_audio_exit_msg)) + { + if(isdefined(var_01) && isdefined(var_01[0])) + { + func_121F(self.script_audio_exit_msg,var_01[0]); + } + else + { + func_121F(self.script_audio_exit_msg,"front"); + } + } + + if(isdefined(self.script_audio_exit_func)) + { + if(isdefined(var_01) && isdefined(var_01[0])) + { + if(isdefined(level._audio.var_1017[self.script_audio_exit_func])) + { + [[ level._audio.var_1017[self.script_audio_exit_func] ]](var_01[0]); + } + } + else if(isdefined(level._audio.var_1017[self.script_audio_exit_func])) + { + [[ level._audio.var_1017[self.script_audio_exit_func] ]]("front"); + } + } + + var_0A = 0; + } + + if(isdefined(var_0B)) + { + trigger_multiple_audio_blend(var_0A,var_0B,var_09); + } + + continue; + } + + if(isdefined(self.script_audio_exit_msg)) + { + func_121F(self.script_audio_exit_msg); + } + + if(isdefined(self.script_audio_exit_func)) + { + if(isdefined(level._audio.var_1017[self.script_audio_exit_func])) + { + [[ level._audio.var_1017[self.script_audio_exit_func] ]](); + } + } + } +} + +//Function Number: 86 +trigger_multiple_audio_progress(param_00,param_01,param_02,param_03) +{ + var_04 = vectornormalize(param_01 - param_00); + var_05 = param_03 - param_00; + var_06 = vectordot(var_05,var_04); + var_06 = var_06 / param_02; + return clamp(var_06,0,1); +} + +//Function Number: 87 +trigger_multiple_audio_progress_point(param_00,param_01,param_02) +{ + var_03 = vectornormalize(param_01 - param_00); + var_04 = param_02 - param_00; + var_05 = vectordot(var_04,var_03); + return var_03 * var_05 + param_00; +} + +//Function Number: 88 +trigger_multiple_audio_blend(param_00,param_01,param_02) +{ + param_00 = clamp(param_00,0,1); + if(param_02) + { + param_00 = 1 - param_00; + } + + var_03 = param_01.mode; + if(var_03 == "blend") + { + var_04 = 1 - param_00; + var_05 = param_00; + maps\_audio_zone_manager::azmx_blend_zones(var_04,var_05,param_01); + return; + } + + if(param_00 < 0.33) + { + maps\_audio_zone_manager::func_1134(param_01.var_1151); + return; + } + + if(param_00 > 0.66) + { + maps\_audio_zone_manager::func_1134(param_01.var_1152); + return; + } +} + +//Function Number: 89 +aud_play_dynamic_explosion(param_00,param_01,param_02,param_03,param_04,param_05) +{ + var_06 = spawn("script_origin",level.player.origin); + var_07 = spawn("script_origin",param_00); + if(!isdefined(param_03)) + { + param_03 = distance(var_07.origin,var_06.origin); + } + + if(!isdefined(param_04)) + { + var_08 = 30; + param_04 = 36 * var_08; + } + + var_09 = aud_do_dynamic_explosion_math(var_07.origin,var_06.origin,param_03,param_04); + var_0A = distance(var_09.origin,var_41[0]); + if(!isdefined(var_06)) + { + var_06 = 1800; + } + + var_0B = var_0A / var_06; + if(isdefined(var_41) && var_41.size == 2) + { + var_0C = spawn("script_origin",var_09.origin); + var_0D = spawn("script_origin",var_09.origin); + var_0C playsound(param_02); + var_0D playsound(param_03); + var_0C moveto(var_41[0],var_0B,0,0); + var_0D moveto(var_41[1],var_0B,0,0); + } +} + +//Function Number: 90 +aud_do_dynamic_explosion_math(param_00,param_01,param_02,param_03) +{ + var_04 = param_01 - param_00; + var_05 = func_1343(var_04); + var_06 = func_1343(var_04); + var_07 = aud_vector_magnitude_2d(var_05); + var_08 = 0.5 * param_02 / var_07; + var_05 = aud_scale_vector_2d(var_05,var_08); + var_06 = aud_scale_vector_2d(var_06,var_08); + var_05 = func_1342(var_05,90); + var_06 = func_1342(var_06,-90); + var_09 = aud_vector_magnitude_2d(var_04); + var_0A = param_03 / var_09; + var_0B = aud_scale_vector_2d(var_04,var_0A); + var_0B = var_0B + var_04; + var_0B = var_0B + var_04; + var_05 = var_05 + var_0B; + var_06 = var_06 + var_0B; + var_0C = []; + return var_41; +} + +//Function Number: 91 +aud_get_optional_param(param_00,param_01) +{ + var_02 = param_01; + if(isdefined(param_00)) + { + var_02 = param_00; + } + + return var_02; +} + +//Function Number: 92 +aud_scale_vector_2d(param_00,param_01) +{ + return (param_00[0] * param_01,param_00[1] * param_01,param_00[2]); +} + +//Function Number: 93 +func_1341(param_00,param_01) +{ + return (param_00[0] * param_01,param_00[1] * param_01,param_00[2] * param_01); +} + +//Function Number: 94 +func_1342(param_00,param_01) +{ + var_02 = param_00[0] * cos(param_01) - param_00[1] * sin(param_01); + var_03 = param_00[0] * sin(param_01) + param_00[1] * cos(param_01); + return (var_02,var_03,param_00[2]); +} + +//Function Number: 95 +func_1343(param_00) +{ + var_01 = (0,0,0); + var_01 = var_01 + param_00; + return var_01; +} + +//Function Number: 96 +aud_vector_magnitude_2d(param_00) +{ + return sqrt(param_00[0] * param_00[0] + param_00[1] * param_00[1]); +} + +//Function Number: 97 +aud_print_synch(param_00) +{ + aud_print(param_00,"synch_frame"); +} + +//Function Number: 98 +aud_print(param_00,param_01) +{ +} + +//Function Number: 99 +aud_print_warning(param_00) +{ + aud_print(param_00,"warning"); +} + +//Function Number: 100 +aud_print_error(param_00) +{ + aud_print(param_00,"error"); +} + +//Function Number: 101 +aud_print_debug(param_00) +{ + aud_print(param_00); +} + +//Function Number: 102 +func_1135(param_00) +{ + aud_print(param_00,"zone"); +} + +//Function Number: 103 +aud_print_zone_small(param_00) +{ + aud_print(param_00,"zone_small"); +} + +//Function Number: 104 +equal_strings(param_00,param_01) +{ + if(isdefined(param_00) && isdefined(param_01)) + { + return param_00 == param_01; + } + + return !isdefined(param_00) && !isdefined(param_01); +} + +//Function Number: 105 +isundefined(param_00) +{ + return !isdefined(param_00); +} + +//Function Number: 106 +delete_on_sounddone(param_00) +{ + param_00 waittill("sounddone"); + param_00 delete_sound_entity(); +} + +//Function Number: 107 +delete_sound_entity() +{ + common_scripts\utility::delaycall(0.05,::delete); +} + +//Function Number: 108 +aud_fade_out_and_delete(param_00,param_01) +{ + param_00 scalevolume(0,param_01); + param_00 common_scripts\utility::delaycall(param_01 + 0.05,::stopsounds); + param_00 common_scripts\utility::delaycall(param_01 + 0.1,::delete); +} + +//Function Number: 109 +aud_fade_loop_out_and_delete(param_00,param_01) +{ + param_00 scalevolume(0,param_01); + wait param_01 + 0.05; + param_00 stoploopsound(); + wait 0.05; + param_00 delete(); +} + +//Function Number: 110 +aud_min(param_00,param_01) +{ + if(param_00 <= param_01) + { + return param_00; + } + + return param_01; +} + +//Function Number: 111 +aud_max(param_00,param_01) +{ + if(param_00 >= param_01) + { + return param_00; + } + + return param_01; +} + +//Function Number: 112 +aud_clamp(param_00,param_01,param_02) +{ + if(param_00 < param_01) + { + param_00 = param_01; + } + else if(param_00 > param_02) + { + param_00 = param_02; + } + + return param_00; +} + +//Function Number: 113 +aud_fade_sound_in(param_00,param_01,param_02,param_03,param_04) +{ + param_02 = aud_clamp(param_02,0,1); + param_03 = aud_max(0.05,param_03); + var_05 = 0; + if(isdefined(param_04)) + { + var_05 = param_04; + } + + if(var_05) + { + param_00 playloopsound(param_01); + } + else + { + param_00 playsound(param_01); + } + + param_00 scalevolume(0); + param_00 common_scripts\utility::delaycall(0.05,::scalevolume,param_02,param_03); +} + +//Function Number: 114 +func_1351(param_00,param_01) +{ + var_04 = param_01[0][0]; + var_05 = param_01[param_01.size - 1][0]; + var_06 = param_01[0][1]; + var_07 = param_01[param_01.size - 1][1]; + var_08 = undefined; + if(param_00 <= var_04) + { + var_08 = var_06; + } + else if(param_00 >= var_05) + { + var_08 = var_07; + } + else + { + var_09 = undefined; + var_02 = var_04; + var_0A = var_06; + for(var_03 = 0;var_03 < param_01.size;var_03++) + { + var_09 = param_01[var_03][0]; + var_0B = param_01[var_03][1]; + if(param_00 >= var_02 && param_00 < var_09) + { + var_0C = param_00 - var_02 / var_09 - var_02; + var_08 = var_0A + var_0C * var_0B - var_0A; + break; + } + + var_02 = var_09; + var_0A = var_0B; + } + } + + return var_08; +} + +//Function Number: 115 +func_117B(param_00,param_01) +{ + var_02 = 0; + var_03 = param_01.size; + var_04 = param_01[0]; + for(var_05 = 1;var_05 < param_01.size;var_05++) + { + var_06 = param_01[var_05]; + if(param_00 >= var_04[0] && param_00 <= var_06[0]) + { + var_07 = var_04[0]; + var_08 = var_06[0]; + var_09 = var_04[1]; + var_0A = var_06[1]; + var_0B = param_00 - var_07 / var_08 - var_07; + var_02 = var_09 + var_0B * var_0A - var_09; + break; + } + else + { + var_04 = var_06; + } + } + + return var_02; +} + +//Function Number: 116 +aud_map_range(param_00,param_01,param_02,param_03) +{ + var_04 = param_00 - param_01 / param_02 - param_01; + var_04 = clamp(var_04,0,1); + return func_117B(var_04,param_03); +} + +//Function Number: 117 +aud_smooth(param_00,param_01,param_02) +{ + return param_00 + param_02 * param_01 - param_00; +} + +//Function Number: 118 +aud_is_even(param_00) +{ + return param_00 == int(param_00 / 2) * 2; +} + +//Function Number: 119 +func_1354(param_00) +{ + var_01 = maps\_audio_mix_manager::mm_get_channel_names(); + var_02 = []; + foreach(var_04 in param_00) + { + var_01[var_04] = undefined; + } + + foreach(var_04, var_07 in var_01) + { + var_02[var_02.size] = var_04; + } + + return var_02; +} + +//Function Number: 120 +all_mix_channels() +{ + var_00 = maps\_audio_mix_manager::mm_get_channel_names(); + var_01 = []; + foreach(var_04, var_03 in var_00) + { + var_01[var_01.size] = var_04; + } + + return var_01; +} + +//Function Number: 121 +aud_setalltimescalefactors(param_00) +{ + param_00 = clamp(param_00,0,1); + var_01 = all_mix_channels(); + aud_settimescalefactors(var_01,param_00); +} + +//Function Number: 122 +aud_settimescalefactors(param_00,param_01) +{ + thread audx_settimescalefactors(param_00,param_01); +} + +//Function Number: 123 +audx_settimescalefactors(param_00,param_01) +{ + var_02 = 8; + var_03 = 0; + var_04 = 0; + var_05 = 0; + while(var_04 < param_00.size) + { + var_05 = var_04; + for(var_03 = 0;var_03 < var_02 && var_05 < param_00.size;var_03++) + { + soundsettimescalefactor(param_00[var_05],param_01); + var_05++; + } + + wait 0.05; + var_04 = var_04 + var_02; + } +} + +//Function Number: 124 +aud_set_breach_time_scale_factors() +{ + var_00 = all_mix_channels(); + aud_settimescalefactors(var_00,1); + wait 0.5; + soundsettimescalefactor("Music",0); + soundsettimescalefactor("Menu",0); + soundsettimescalefactor("local3",0); + soundsettimescalefactor("Mission",0); + soundsettimescalefactor("Announcer",0); + soundsettimescalefactor("Bulletimpact",0.6); + soundsettimescalefactor("Voice",0.4); + soundsettimescalefactor("effects1",0.2); + soundsettimescalefactor("effects2",0.2); + soundsettimescalefactor("local",0.2); + soundsettimescalefactor("local2",0.2); + soundsettimescalefactor("physics",0.2); + soundsettimescalefactor("ambient",0.5); + soundsettimescalefactor("auto",0.5); +} + +//Function Number: 125 +play_2d_sound_internal(param_00) +{ + self playsound(param_00,"sounddone"); + self waittill("sounddone"); + wait 0.05; + self delete(); +} + +//Function Number: 126 +aud_delay_play_2d_sound_internal(param_00,param_01,param_02) +{ + if(isdefined(param_02) && param_02) + { + aud_slomo_wait(param_01); + } + else + { + wait param_01; + } + + var_03 = spawn("script_origin",level.player.origin); + var_03 thread play_2d_sound_internal(param_00); + return var_03; +} + +//Function Number: 127 +aud_play_2d_sound(param_00) +{ + var_01 = spawn("script_origin",level.player.origin); + var_01 thread play_2d_sound_internal(param_00); + return var_01; +} + +//Function Number: 128 +func_135D(param_00,param_01,param_02) +{ + var_03 = thread aud_delay_play_2d_sound_internal(param_00,param_01,param_02); + return var_03; +} + +//Function Number: 129 +audx_play_linked_sound_internal(param_00,param_01,param_02) +{ + if(param_00 == "loop") + { + level endon(param_02 + "internal"); + self playloopsound(param_01); + level waittill(param_02); + if(isdefined(self)) + { + self stoploopsound(param_01); + wait 0.05; + self delete(); + return; + } + + return; + } + + if(param_00 == "oneshot") + { + self playsound(param_01,"sounddone"); + self waittill("sounddone"); + if(isdefined(self)) + { + self delete(); + return; + } + } +} + +//Function Number: 130 +audx_monitor_linked_entity_health(param_00,param_01) +{ + level endon(param_01); + while(isdefined(self)) + { + wait 0.1; + } + + level notify(param_01 + "internal"); + if(isdefined(param_00)) + { + param_00 stoploopsound(); + wait 0.05; + param_00 delete(); + } +} + +//Function Number: 131 +aud_play_linked_sound(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = "oneshot"; + if(isdefined(param_02)) + { + var_05 = param_02; + } + + var_06 = spawn("script_origin",param_01.origin); + if(isdefined(param_04)) + { + var_06 linkto(param_01,"tag_origin",param_04,(0,0,0)); + } + else + { + var_06 linkto(param_01); + } + + if(var_05 == "loop") + { + param_01 thread audx_monitor_linked_entity_health(var_06,param_03); + } + + var_06 thread audx_play_linked_sound_internal(var_05,param_00,param_03); + return var_06; +} + +//Function Number: 132 +func_1360(param_00,param_01,param_02) +{ + var_03 = spawn("script_origin",param_01.origin); + var_03 linkto(param_01); + var_04 = "oneshot"; + if(isdefined(param_02)) + { + var_04 = param_02; + } + + if(var_04 == "loop") + { + var_03 playloopsound(param_00); + } + else + { + var_03 playsound(param_00); + } + + return var_03; +} + +//Function Number: 133 +aud_play_sound_at_internal(param_00,param_01,param_02) +{ + self playsound(param_00,"sounddone"); + if(isdefined(param_02)) + { + wait param_02; + self stopsounds(); + } + else + { + self waittill("sounddone"); + } + + wait 0.05; + self delete(); +} + +//Function Number: 134 +aud_play_sound_at(param_00,param_01,param_02) +{ + var_03 = spawn("script_origin",param_01); + var_03 thread aud_play_sound_at_internal(param_00,param_01,param_02); + return var_03; +} + +//Function Number: 135 +func_1363(param_00,param_01) +{ + var_02 = spawn("script_origin",param_01); + var_02 thread aud_prime_stream(param_00,1,0.1); + return var_02; +} + +//Function Number: 136 +aud_play_primed_point_source_loop(param_00,param_01,param_02) +{ + var_03 = aud_get_optional_param(param_01,1); + var_04 = aud_get_optional_param(param_02,1); + aud_fade_sound_in(self,param_00,var_03,var_04,1); + func_12D7(param_00); +} + +//Function Number: 137 +aud_play_point_source_loop(param_00,param_01,param_02,param_03) +{ + var_04 = aud_get_optional_param(param_02,1); + var_05 = aud_get_optional_param(param_03,1); + var_06 = spawn("script_origin",param_01); + aud_fade_sound_in(var_06,param_00,var_04,var_05,1); + return var_06; +} + +//Function Number: 138 +aud_stop_point_source_loop(param_00,param_01) +{ + var_02 = aud_get_optional_param(param_01,1); + aud_fade_out_and_delete(param_00,var_02); +} + +//Function Number: 139 +aud_set_point_source_loop_volume(param_00,param_01,param_02) +{ + param_01 = clamp(param_01,0,1); + var_03 = aud_get_optional_param(param_02,1); + param_00 scalevolume(param_01,var_03); +} + +//Function Number: 140 +aud_play_loops_on_destructables_array(param_00,param_01,param_02,param_03) +{ + var_04 = 0.1; + if(isdefined(param_03)) + { + var_04 = param_03; + } + + var_05 = getentarray(param_00,"script_noteworthy"); + var_06 = var_05.size; + foreach(var_08 in var_05) + { + var_08 playloopsound(param_01); + var_08.loop_sound_stopped = 0; + } + + while(var_06 > 0) + { + wait var_04; + foreach(var_08 in var_05) + { + if(var_08.health < 0 && !var_08.loop_sound_stopped) + { + var_06--; + var_08 stoploopsound(); + var_08.loop_sound_stopped = 1; + if(isdefined(param_02)) + { + common_scripts\utility::play_sound_in_space(param_02,var_08.origin); + } + } + } + } +} + +//Function Number: 141 +aud_set_music_submix(param_00,param_01) +{ + var_02 = "music_submix"; + if(!maps\_audio_mix_manager::mm_does_volmod_submix_exist(var_02)) + { + maps\_audio_mix_manager::mm_add_dynamic_volmod_submix(var_02,["music",1],param_01); + maps\_audio_mix_manager::mm_make_submix_sticky(var_02); + } + + maps\_audio_mix_manager::mm_scale_submix(var_02,param_00,param_01); +} + +//Function Number: 142 +aud_set_ambi_submix(param_00,param_01) +{ + var_02 = "ambi_submix"; + if(!maps\_audio_mix_manager::mm_does_volmod_submix_exist(var_02)) + { + maps\_audio_mix_manager::mm_add_dynamic_volmod_submix(var_02,["ambience",1],param_01); + maps\_audio_mix_manager::mm_make_submix_sticky(var_02); + } + + maps\_audio_mix_manager::mm_scale_submix(var_02,param_00,param_01); +} + +//Function Number: 143 +aud_fade_in_music(param_00) +{ + var_01 = 10; + if(isdefined(param_00)) + { + var_01 = param_00; + } + + maps\_audio_mix_manager::mm_add_submix("mute_music",0.1); + wait 0.05; + maps\_audio_mix_manager::mm_clear_submix("mute_music",var_01); +} + +//Function Number: 144 +aud_check_sound_done() +{ + self endon("cleanup"); + if(!isdefined(self.sounddone)) + { + self.sounddone = 0; + } + + self waittill("sounddone"); + if(isdefined(self)) + { + self.sounddone = 1; + self notify("cleanup"); + } +} + +//Function Number: 145 +aud_in_zone(param_00) +{ + return equal_strings(maps\_audio_zone_manager::azm_get_current_zone(),param_00); +} + +//Function Number: 146 +aud_find_exploder(param_00) +{ + if(isdefined(level.createfxexploders)) + { + var_01 = level.createfxexploders["" + param_00]; + if(isdefined(var_01)) + { + return var_01[0]; + } + } + else + { + for(var_02 = 0;var_02 < level.createfxent.size;var_02++) + { + var_03 = level.createfxent[var_02]; + if(!isdefined(var_03)) + { + continue; + } + + if(var_03.v["type"] != "exploder") + { + continue; + } + + if(!isdefined(var_03.v["exploder"])) + { + continue; + } + + if(int(var_03.v["exploder"]) != param_00) + { + continue; + } + + return var_03; + } + } + + return undefined; +} + +//Function Number: 147 +aud_duck(param_00,param_01,param_02,param_03) +{ + thread audx_duck(param_00,param_01,param_02,param_03); +} + +//Function Number: 148 +audx_duck(param_00,param_01,param_02,param_03) +{ + param_01 = clamp(param_01,0,10); + var_04 = 1; + if(isdefined(param_02)) + { + var_04 = param_02; + } + + var_05 = var_04; + if(isdefined(param_03)) + { + var_05 = param_03; + } + + maps\_audio_mix_manager::mm_add_submix(param_00,var_04); + wait param_01; + maps\_audio_mix_manager::mm_clear_submix(param_00,var_05); +} + +//Function Number: 149 +func_1371() +{ + var_00 = spawnstruct(); + var_00.filter = []; + var_00.mix = []; + var_00.occlusion = []; + var_00.var_1372 = []; + var_00.var_1373 = 0; + return var_00; +} + +//Function Number: 150 +func_1374() +{ + level._audio.index.local.mix = func_1377(get_mix_stringtable()); + level._audio.index.local.filter = func_1377(get_filter_stringtable()); + level._audio.index.local.var_1373 = 1; +} + +//Function Number: 151 +aud_is_local_indexed() +{ + return level._audio.index.local.var_1373; +} + +//Function Number: 152 +index_common_presets() +{ + level._audio.index.common.mix = func_1377("soundtables/common_mix.csv"); + level._audio.index.common.occlusion = func_1377("soundtables/common_occlusion.csv"); + level._audio.index.common.var_1372 = func_1377("soundtables/common_timescale.csv"); + level._audio.index.common.filter = func_1377("soundtables/common_filter.csv"); + level._audio.index.common.var_1373 = 1; +} + +//Function Number: 153 +aud_is_common_indexed() +{ + return level._audio.index.common.var_1373; +} + +//Function Number: 154 +func_111A(param_00,param_01,param_02) +{ + var_03 = 1; + if(isdefined(param_02)) + { + var_03 = param_02; + } + + var_04 = undefined; + if(var_03) + { + var_04 = level._audio.index.common; + } + else + { + var_04 = level._audio.index.local; + } + + var_05 = undefined; + switch(param_00) + { + case "mix": + var_05 = var_04.mix[param_01]; + break; + + case "filter": + var_05 = var_04.filter[param_01]; + break; + + case "occlusion": + var_05 = level._audio.index.common.occlusion[param_01]; + break; + + case "timescale": + var_05 = level._audio.index.common.var_1372[param_01]; + break; + + default: + break; + } + + if(!isdefined(var_05)) + { + var_05 = -1; + } + + return var_05; +} + +//Function Number: 155 +get_mix_index(param_00,param_01) +{ + if(param_01) + { + return level._audio.index.common.mix[param_00]; + } + + return level._audio.index.local.mix[param_00]; +} + +//Function Number: 156 +func_1377(param_00) +{ + var_01 = ""; + var_02 = 0; + var_03 = 1; + var_04 = []; + var_05 = ""; + while(var_02 < 10 && var_05 != "EOF") + { + var_05 = tablelookupbyrow(param_00,var_03,0); + if(isdefined(var_05) && var_05 != var_01 && var_05 != "" && var_05 != "EOF") + { + var_02 = 0; + var_01 = var_05; + var_04[var_01] = var_03; + continue; + } + + if(var_05 == "") + { + var_02++; + } + + var_03++; + } + + return var_04; +} + +//Function Number: 157 +aud_percent_chance(param_00) +{ + return randomintrange(1,100) <= param_00; +} + +//Function Number: 158 +aud_start_slow_mo_gunshot_callback(param_00,param_01) +{ + level endon("aud_stop_slow_mo_gunshot"); + var_02 = getaiarray("axis"); + foreach(var_04 in var_02) + { + var_04 thread aud_impact_monitor(param_01); + } + + var_06 = 0; + var_07 = level.player getcurrentweapon(); + for(;;) + { + if(level.player attackbuttonpressed()) + { + if(!var_06) + { + var_06 = 1; + [[ param_00 ]](var_07); + } + } + else + { + var_06 = 0; + } + + wait 0.05; + } +} + +//Function Number: 159 +aud_impact_monitor(param_00) +{ + level endon("aud_stop_slow_mo_gunshot"); + var_01 = level.player getcurrentweapon(); + for(;;) + { + self waittill("damage",var_02,var_03,var_04,var_05,var_06); + if(isdefined(var_05)) + { + [[ param_00 ]](var_01,var_02,var_03,var_05,var_06); + } + } +} + +//Function Number: 160 +aud_stop_slow_mo_gunshot_callback() +{ + level notify("aud_stop_slow_mo_gunshot"); +} + +//Function Number: 161 +func_137C(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + self.var_137D = 1; + self.alias = param_00; + self.points = param_01; + self.edge_spread = param_02; + self.update_rate = param_05; + self.var_1381 = param_03; + self.max_dist = param_04; + self.vol_scale = param_06; + self playloopsound(param_00); + wait 0.1; + thread audx_distributed_sound_update_loop(param_01,param_02,param_05,param_03,param_04,param_06); +} + +//Function Number: 162 +func_1384() +{ + self notify("stop"); +} + +//Function Number: 163 +aud_start_distributed_sound() +{ + if(isdefined(self.var_137D)) + { + self playloopsound(self.alias); + wait 0.1; + thread audx_distributed_sound_update_loop(self.points,self.edge_spread,self.update_rate,self.var_1381,self.max_dist,self.vol_scale); + } +} + +//Function Number: 164 +audx_distributed_sound_update_loop(param_00,param_01,param_02,param_03,param_04,param_05) +{ + self endon("stop"); + var_06 = 0.1; + if(isdefined(param_02)) + { + var_06 = param_02; + } + + var_07 = 1; + if(isdefined(param_05)) + { + var_07 = param_05; + } + + if(isdefined(param_03)) + { + if(!isdefined(param_04)) + { + return; + } + + while(isdefined(self)) + { + self setdistributed2dsound(param_00,param_01,var_06,var_07,param_03,param_04); + wait var_06; + } + + return; + } + + while(isdefined(self)) + { + self setdistributed2dsound(param_00,param_01,var_06,var_07); + wait var_06; + } +} + +//Function Number: 165 +aud_slomo_wait(param_00) +{ + var_01 = spawn("script_origin",(0,0,0)); + var_01 thread aud_slomo_wait_internal(param_00); + var_01 waittill("slo_mo_wait_done"); + var_01 delete(); +} + +//Function Number: 166 +aud_slomo_wait_internal(param_00) +{ + var_01 = 0; + while(var_01 < param_00) + { + var_02 = getdvarfloat("com_timescale"); + var_01 = var_01 + 0.05 / var_02; + wait 0.05; + } + + self notify("slo_mo_wait_done"); +} + +//Function Number: 167 +aud_set_level_fade_time(param_00) +{ + if(!isdefined(level._audio)) + { + level._audio = spawnstruct(); + } + + level._audio.level_fade_time = param_00; +} + +//Function Number: 168 +aud_level_fadein() +{ + if(!isdefined(level._audio.level_fade_time)) + { + level._audio.level_fade_time = 1; + } + + wait 0.05; + levelsoundfade(1,level._audio.level_fade_time); +} + +//Function Number: 169 +aud_is_specops() +{ + return isdefined(level._audio.specops); +} + +//Function Number: 170 +audx_set_spec_ops_internal() +{ + if(!isdefined(level._audio)) + { + level._audio = spawnstruct(); + } + + level._audio.specops = 1; +} + +//Function Number: 171 +aud_set_spec_ops() +{ + thread audx_set_spec_ops_internal(); +} + +//Function Number: 172 +audx_play_line_emitter_internal() +{ + level endon(self.label + "_line_emitter_stop"); + var_00 = self.point2 - self.var_1392; + var_01 = vectornormalize(var_00); + var_02 = distance(self.var_1392,self.point2); + var_03 = 0.1; + for(;;) + { + var_04 = level.player.origin - self.var_1392; + var_05 = vectordot(var_04,var_01); + var_05 = clamp(var_05,0,var_02); + var_06 = self.var_1392 + var_01 * var_05; + if(!self.is_playing) + { + self.origin = var_06; + self playloopsound(self.alias); + self scalevolume(0); + wait 0.05; + self scalevolume(1,self.fade_in); + self.is_playing = 1; + } + else + { + self moveto(var_06,var_03); + } + + wait var_03; + } +} + +//Function Number: 173 +aud_stop_line_emitter(param_00) +{ + level notify(param_00 + "_line_emitter_stop"); +} + +//Function Number: 174 +aud_play_line_emitter(param_00,param_01,param_02,param_03,param_04,param_05) +{ + var_06 = 0.1; + var_07 = 0.1; + if(isdefined(param_04)) + { + var_06 = max(param_04,0); + var_07 = max(param_04,0); + } + + if(isdefined(param_05)) + { + var_07 = max(param_05,0); + } + + var_08 = spawn("script_origin",(0,0,0)); + var_08.alias = param_01; + var_08.is_playing = 0; + var_08.var_1392 = param_02; + var_08.point2 = param_03; + var_08.fade_in = var_06; + var_08.label = param_00; + var_08 thread audx_play_line_emitter_internal(); + level waittill(param_00 + "_line_emitter_stop"); + var_08 scalevolume(0,var_07); + wait var_07; + var_08 stoploopsound(); + wait 0.05; + var_08 delete(); +} + +//Function Number: 175 +aud_print_3d_on_ent(param_00,param_01,param_02) +{ + if(isdefined(self)) + { + var_03 = (1,1,1); + var_04 = (1,0,0); + var_05 = (0,1,0); + var_06 = (0,1,1); + var_07 = 5; + var_08 = var_03; + if(isdefined(param_01)) + { + var_07 = param_01; + } + + if(isdefined(param_02)) + { + var_08 = param_02; + switch(var_08) + { + case "red": + var_08 = var_04; + break; + + case "white": + var_08 = var_03; + break; + + case "blue": + var_08 = var_06; + break; + + case "green": + var_08 = var_05; + break; + + default: + var_08 = var_03; + break; + } + } + + self endon("death"); + while(isdefined(self)) + { + wait 0.05; + } + } +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_audio_dynamic_ambi.gsc b/MW3/Xbox/SP/maps/_audio_dynamic_ambi.gsc new file mode 100644 index 0000000..8c100bb --- /dev/null +++ b/MW3/Xbox/SP/maps/_audio_dynamic_ambi.gsc @@ -0,0 +1,1793 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_audio_dynamic_ambi.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 55 + * Decompile Time: 1583 ms + * Timestamp: 10/27/2023 2:33:04 AM +*******************************************************************/ + +//Function Number: 1 +damb_init() +{ + if(!isdefined(level._audio)) + { + level._audio = spawnstruct(); + } + + if(!isdefined(level._audio.damb)) + { + level._audio.damb = spawnstruct(); + level._audio.damb.loop_handle_index = 0; + level._audio.damb.single_loop_handle_index = 0; + level._audio.damb.oneshot_handle_index = 0; + level._audio.damb.serial_playback_lock = 1; + level._audio.damb.playing = []; + level._audio.damb.playing["zone"] = []; + level._audio.damb.playing["free"] = []; + level._audio.damb.component_weights = []; + level._audio.damb.callbacks = []; + level._audio.damb.preset_cache = []; + level._audio.damb.var_105D = []; + level._audio.damb.var_105E = []; + level._audio.damb.use_string_table_presets = 0; + level._audio.damb.use_iw_presets = 0; + level._audio.damb.entity_ref_count = 0; + level._audio.damb.var_1060 = 0; + level._audio.damb.max_entities = 15; + } +} + +//Function Number: 2 +func_1062(param_00) +{ + level._audio.damb.max_entities = param_00; +} + +//Function Number: 3 +damb_use_string_table() +{ + level._audio.damb.use_string_table_presets = 1; + level._audio.damb.use_iw_presets = 0; +} + +//Function Number: 4 +damb_use_iw_presets() +{ + level._audio.damb.use_iw_presets = 1; + level._audio.damb.use_string_table_presets = 0; +} + +//Function Number: 5 +damb_zone_start_preset(param_00,param_01) +{ + dambx_start_preset("zone",param_00,undefined,param_01); +} + +//Function Number: 6 +damb_start_preset(param_00,param_01,param_02,param_03) +{ + dambx_start_preset("free",param_00,param_01,param_02,undefined,undefined,param_03); +} + +//Function Number: 7 +func_1067(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if(isdefined(param_03)) + { + thread func_106C(param_00,param_01,param_02,param_03,param_04,param_05); + return; + } + + dambx_start_preset("free",param_00,param_02,undefined,param_01,param_05); +} + +//Function Number: 8 +damb_stop_preset_at_point(param_00,param_01,param_02) +{ + if(isstring(param_01)) + { + var_03 = param_01; + } + else + { + var_03 = param_01; + } + + level notify(var_03 + "dist_monitor_stop"); + damb_stop_preset(var_03,param_02); +} + +//Function Number: 9 +damb_make_linked_damb(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = spawnstruct(); + var_05.name = param_00; + var_05.point = param_01; + var_05.label = param_02; + var_05.var_106A = param_03; + var_05.max_delay = param_04; + return var_05; +} + +//Function Number: 10 +func_106C(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if(isstring(param_02)) + { + level endon(param_02 + "dist_monitor_stop"); + } + else + { + level endon(param_00 + "dist_monitor_stop"); + } + + var_06 = 1; + if(isdefined(param_04)) + { + var_06 = param_04; + } + + var_07 = 1; + for(;;) + { + var_08 = distance(level.player.origin,param_01); + if(var_08 < param_03) + { + if(var_07) + { + var_07 = 0; + dambx_start_preset("free",param_00,param_02,undefined,param_01,param_05); + } + } + else if(!var_07) + { + var_07 = 1; + if(isdefined(param_02)) + { + func_107D("free",param_02,var_06); + } + else + { + func_107D("free",param_00,var_06); + } + } + + wait 1; + } +} + +//Function Number: 11 +damb_start_preset_on_entity(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = "attach"; + if(isdefined(param_03)) + { + var_05 = param_03; + } + + dambx_start_preset("free",param_00,param_02,param_04,undefined,param_01,var_05); +} + +//Function Number: 12 +damb_stop(param_00,param_01) +{ + var_02 = 2; + if(isdefined(param_00)) + { + var_02 = param_00; + } + + var_03 = "all"; + if(isdefined(param_01)) + { + var_03 = param_01; + } + + if(var_03 == "free" || var_03 == "all") + { + foreach(var_06, var_05 in level._audio.damb.playing["free"]) + { + damb_stop_preset(var_06,var_02); + } + } + + if(var_03 == "zone" || var_03 == "all") + { + foreach(var_06, var_05 in level._audio.damb.playing["zone"]) + { + damb_zone_stop_preset(var_06,var_02); + } + } +} + +//Function Number: 13 +damb_stop_zone(param_00) +{ + func_107D("zone",undefined,param_00); +} + +//Function Number: 14 +damb_zone_stop_preset(param_00,param_01) +{ + func_107D("zone",param_00,param_01); +} + +//Function Number: 15 +damb_stop_preset(param_00,param_01) +{ + func_107D("free",param_00,param_01); +} + +//Function Number: 16 +damb_prob_mix_damb_presets(param_00,param_01,param_02,param_03) +{ + if(isdefined(param_00) && param_00 != "none") + { + if(param_01 == 0) + { + damb_zone_stop_preset(param_00,2); + } + else + { + damb_zone_start_preset(param_00,param_01); + } + } + + if(isdefined(param_02) && param_02 != "none") + { + if(param_03 == 0) + { + damb_zone_stop_preset(param_02,2); + return; + } + + damb_zone_start_preset(param_02,param_03); + } +} + +//Function Number: 17 +damb_set_oneshot_callback_for_component(param_00,param_01) +{ + if(!isdefined(level._audio.damb.callback)) + { + level._audio.damb.callback = []; + } + + level._audio.damb.callback[param_00] = param_01; +} + +//Function Number: 18 +func_1075(param_00,param_01) +{ + var_02 = []; + if(isdefined(level._audio.damb.preset_cache[param_00])) + { + var_02 = level._audio.damb.preset_cache[param_00]; + } + else if(level._audio.damb.use_string_table_presets) + { + var_02 = dambx_get_preset_from_string_table(param_00,1); + level._audio.damb.preset_cache[param_00] = var_02; + } + else + { + var_02 = dambx_get_preset_from_string_table(param_00,0); + if(var_02.size == 0) + { + var_02 = maps\_audio::audio_presets_dynamic_ambience(param_00,var_02); + } + + level._audio.damb.preset_cache[param_00] = var_02; + } + + foreach(var_04 in var_02["components"]) + { + damb_set_oneshot_callback_for_component(var_04,param_01); + } +} + +//Function Number: 19 +damb_pause_damb(param_00,param_01) +{ + var_02 = "free"; + if(isdefined(param_01)) + { + var_02 = param_01; + } + + if(isdefined(level._audio.damb.playing[var_02][param_00])) + { + level._audio.damb.playing[var_02][param_00]["paused"] = 1; + } +} + +//Function Number: 20 +damb_unpause_damb(param_00,param_01) +{ + var_02 = "free"; + if(isdefined(param_01)) + { + var_02 = param_01; + } + + if(isdefined(level._audio.damb.playing[var_02][param_00])) + { + level._audio.damb.playing[var_02][param_00]["paused"] = 0; + level notify(var_02 + "_" + param_00 + "_event"); + } +} + +//Function Number: 21 +damb_manual_trigger(param_00,param_01) +{ + var_02 = "free"; + if(isdefined(param_01)) + { + var_02 = param_01; + } + + if(isdefined(level._audio.damb.playing[var_02][param_00])) + { + level notify(var_02 + "_" + param_00 + "_event"); + } +} + +//Function Number: 22 +damb_link_to_damb(param_00,param_01,param_02,param_03) +{ + var_04 = "free"; + if(isdefined(level._audio.damb.playing[var_04][param_00]) && isdefined(level._audio.damb.playing[var_04][param_01])) + { + param_02 = min(param_02,param_03); + param_03 = max(param_02,param_03); + if(!isdefined(level._audio.damb.playing[var_04][param_00]["linked_dambs"])) + { + level._audio.damb.playing[var_04][param_00]["linked_dambs"] = []; + } + + var_05 = level._audio.damb.playing[var_04][param_00]["linked_dambs"].size; + level._audio.damb.playing[var_04][param_00]["linked_dambs"][var_05] = spawnstruct(); + level._audio.damb.playing[var_04][param_00]["linked_dambs"][var_05].name = param_01; + level._audio.damb.playing[var_04][param_00]["linked_dambs"][var_05].var_106A = max(param_02,0); + level._audio.damb.playing[var_04][param_00]["linked_dambs"][var_05].max_delay = max(param_03,0); + } +} + +//Function Number: 23 +dambx_start_preset(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07) +{ + var_08 = 1; + if(isdefined(param_03)) + { + var_08 = param_03; + } + + var_09 = param_01; + if(isstring(param_02)) + { + var_09 = param_02; + } + + if(!isdefined(level._audio.damb.playing[param_00][var_09])) + { + var_0A = dambx_get_damb_preset(param_01); + if(!isdefined(var_0A)) + { + return; + } + + level._audio.damb.playing[param_00][var_09] = var_0A; + level._audio.damb.playing[param_00][var_09]["prob_scale"] = var_08; + level._audio.damb.playing[param_00][var_09]["paused"] = 0; + if(isdefined(param_07)) + { + dambx_start_linked_dambs(var_09,param_07); + } + + if(isdefined(param_05)) + { + level._audio.damb.playing[param_00][var_09]["entity"] = param_05; + level._audio.damb.playing[param_00][var_09]["mode"] = param_06; + } + + thread dambx_play(param_00,var_09,param_04); + return; + } + + if(level._audio.damb.playing[param_00][var_09]["prob_scale"] != var_08) + { + level._audio.damb.playing[param_00][var_09]["prob_scale"] = var_08; + } +} + +//Function Number: 24 +dambx_start_linked_dambs(param_00,param_01) +{ + if(isarray(param_01)) + { + foreach(var_03 in param_01) + { + dambx_start_preset("free",var_03.name,var_03.label,undefined,var_03.point); + damb_pause_damb(var_03.label); + damb_link_to_damb(param_00,var_03.label,var_03.var_106A,var_03.max_delay); + } + + return; + } + + dambx_start_preset("free",param_01.name,param_01.label,undefined,param_01.point); + damb_pause_damb(param_01.label); + damb_link_to_damb(param_00,param_01.label,param_01.var_106A,param_01.max_delay); +} + +//Function Number: 25 +func_107D(param_00,param_01,param_02) +{ + var_03 = 2; + if(isdefined(param_02)) + { + var_03 = param_02; + } + + if(param_00 == "zone" && !isdefined(param_01)) + { + if(isdefined(level._audio.damb.playing[param_00])) + { + foreach(param_01, var_05 in level._audio.damb.playing[param_00]) + { + level._audio.damb.playing[param_00][param_01]["fade"] = var_03; + level notify(param_00 + "_" + param_01 + "_stop"); + } + + return; + } + + return; + } + + if(isdefined(level._audio.damb.playing[param_02][var_03])) + { + level._audio.damb.playing[param_02][var_03]["fade"] = var_05; + level notify(param_02 + "_" + var_03 + "_stop"); + } +} + +//Function Number: 26 +dambx_update_serially(param_00,param_01,param_02) +{ + level endon(param_00 + "_" + param_01 + "_stop"); + var_03 = level._audio.damb.playing[param_00][param_01]["event_time"]; + var_04 = min(var_03[0],var_03[1]); + var_05 = max(var_03[0],var_03[1]); + var_06 = undefined; + var_07 = undefined; + if(isdefined(level._audio.damb.playing[param_00][param_01]["first_event"])) + { + var_03 = level._audio.damb.playing[param_00][param_01]["first_event"]; + var_06 = min(var_03[0],var_03[1]); + var_07 = max(var_03[0],var_03[1]); + } + + var_08 = undefined; + if(isdefined(var_06)) + { + var_08 = randomfloatrange(var_06,var_07); + } + else + { + var_08 = randomfloatrange(var_04,var_05); + } + + for(;;) + { + if(level._audio.damb.playing[param_00][param_01]["paused"]) + { + level waittill(param_00 + "_" + param_01 + "_event"); + } + + if(!level._audio.damb.playing[param_00][param_01]["paused"]) + { + wait var_08; + } + + var_09 = func_10AD(param_00,param_01); + if(!isdefined(var_09)) + { + continue; + } + + var_0A = dambx_get_component_data(param_00,param_01,var_09,param_01); + if(var_0A.var_107F) + { + if(var_0A.var_1080 && !isdefined(var_0A.ent)) + { + level notify(param_00 + "_" + param_01 + "_stop"); + break; + } + + var_0B = func_109C(var_0A,param_01,var_09); + if(var_0B.success) + { + if(level._audio.damb.serial_playback_lock) + { + func_10A7(param_00,param_01,var_0B); + } + else + { + thread func_10A7(param_00,param_01,var_0B); + } + } + } + else + { + maps\_audio::aud_print_warning("Dynamic ambience is playing back serially and using components which do not define oneshots or loops"); + } + + var_08 = randomfloatrange(var_04,var_05); + } +} + +//Function Number: 27 +dambx_play_component_loops(param_00,param_01,param_02,param_03,param_04) +{ + if(isdefined(param_02["single_loops"])) + { + foreach(var_06 in param_02["single_loops"]) + { + var_07 = undefined; + if(isdefined(param_04)) + { + var_07 = spawn("script_origin",param_04.origin); + } + else if(isdefined(param_03)) + { + var_07 = spawn("script_origin",param_03); + } + else + { + var_07 = spawn("script_origin",level.player.origin); + } + + level._audio.damb.var_1060++; + var_07 playloopsound(var_06); + if(isdefined(param_04)) + { + var_07 linkto(param_04); + } + + var_08 = level._audio.damb.single_loop_handle_index; + level._audio.damb.playing[param_00][param_01]["single_loops"][var_08] = var_07; + level._audio.damb.single_loop_handle_index++; + } + } +} + +//Function Number: 28 +//Function Number: 29 +func_109B(param_00,param_01,param_02) +{ + for(;;) + { + if(!isdefined(param_02)) + { + level notify(param_00 + "_" + param_01 + "_stop"); + } + + wait 1; + } +} + +//Function Number: 30 +func_109C(param_00,param_01,param_02,param_03) +{ + var_04 = spawnstruct(); + if(randomfloat(1) < param_00.var_109A) + { + var_04.success = 1; + if(isdefined(level._audio.damb.callbacks[param_01])) + { + thread [[ level._audio.damb.callback[param_01] ]](); + } + else + { + var_04.alias = func_10AE(param_02); + var_04.point = param_03; + var_04.ent = param_00.ent; + var_04.mode = param_00.mode; + var_05 = randomfloatrange(param_00.var_1086,param_00.max_radius); + var_06 = undefined; + if(isdefined(param_00.min_start_angle)) + { + var_06 = randomfloatrange(param_00.min_start_angle,param_00.max_start_angle); + } + else + { + var_06 = randomfloatrange(0,360); + } + + var_07 = var_05 * cos(var_06); + var_08 = var_05 * sin(var_06); + var_04.start_position = (var_07,var_08,0); + if(isdefined(param_00.min_trav_time)) + { + var_04.var_109E = randomfloatrange(param_00.min_trav_time,param_00.max_trav_time); + if(isdefined(param_00.var_1091)) + { + var_05 = randomfloatrange(param_00.var_1091,param_00.max_delta); + var_06 = randomfloatrange(0,360); + var_07 = var_05 * cos(var_06); + var_08 = var_05 * sin(var_06); + var_04.end_position = var_04.start_position + (var_07,var_08,0); + } + else + { + var_09 = randomfloatrange(param_00.min_delta_angle,param_00.max_delta_angle); + var_09 = var_09 * 0.5; + var_0A = level.player.origin; + if(isdefined(param_03)) + { + var_0A = param_03; + } + + var_0B = var_04.start_position - var_0A; + var_07 = var_0B[0] * cos(var_09) - var_0B[1] * sin(var_09); + var_08 = var_0B[0] * sin(var_09) + var_0B[1] * cos(var_09); + var_04.end_position = var_04.start_position + (var_07,var_08,0); + } + } + + if(isdefined(param_00.min_pitch)) + { + var_04.start_pitch = randomfloatrange(param_00.min_pitch,param_00.max_pitch); + } + + if(isdefined(param_00.min_pitch_time)) + { + var_04.end_pitch = randomfloatrange(param_00.min_pitch,param_00.max_pitch); + var_04.pitch_time = randomfloatrange(param_00.min_pitch_time,param_00.var_1096); + } + } + } + else + { + var_04.success = 0; + } + + return var_04; +} + +//Function Number: 31 +dambx_trigger_linked_damb(param_00,param_01) +{ + wait param_01; + damb_manual_trigger(param_00); +} + +//Function Number: 32 +dambx_make_first_wait(param_00) +{ + var_01 = undefined; + if(isdefined(param_00.first_event)) + { + var_01 = randomfloatrange(param_00.first_event_min,param_00.first_event_max); + } + else + { + var_01 = randomfloatrange(param_00.var_1088,param_00.max_time); + } + + return var_01; +} + +//Function Number: 33 +dambx_update(param_00,param_01,param_02,param_03) +{ + level endon(param_00 + "_" + param_01 + "_stop"); + var_04 = dambx_get_component_data(param_00,param_01,param_02,param_01); + if(var_04.single_loops) + { + dambx_play_component_loops(param_00,param_01,param_02,param_03,var_04.ent); + if(var_04.var_1080 && !var_04.var_107F) + { + thread func_109B(param_00,param_01,var_04.ent); + } + } + + if(var_04.var_107F) + { + var_05 = dambx_make_first_wait(var_04); + for(;;) + { + if(level._audio.damb.playing[param_00][param_01]["paused"]) + { + level waittill(param_00 + "_" + param_01 + "_event"); + } + + if(!level._audio.damb.playing[param_00][param_01]["paused"]) + { + wait var_05; + } + + if(var_04.var_1080 && !isdefined(var_04.ent)) + { + level notify(param_00 + "_" + param_01 + "_stop"); + break; + } + + if(isdefined(level._audio.damb.playing[param_00][param_01]["linked_dambs"])) + { + foreach(var_07 in level._audio.damb.playing[param_00][param_01]["linked_dambs"]) + { + var_08 = randomfloatrange(var_07.var_106A,var_07.max_delay); + thread dambx_trigger_linked_damb(var_07.name,var_08); + } + } + + var_04.var_109A = level._audio.damb.playing[param_00][param_01]["prob_scale"]; + var_0A = func_109C(var_04,param_01,param_02,param_03); + if(var_0A.success) + { + thread func_10A7(param_00,param_01,var_0A); + } + + var_05 = randomfloatrange(var_04.var_1088,var_04.max_time); + } + } +} + +//Function Number: 34 +func_10A6(param_00,param_01,param_02,param_03) +{ + level endon(param_00 + "_" + param_01 + "_stop"); + param_03 waittill("sounddone"); + if(isdefined(level._audio.damb.playing[param_00][param_01]["oneshots"][param_02])) + { + param_03 delete(); + func_10C3(); + level._audio.damb.playing[param_00][param_01]["oneshots"][param_02] = undefined; + } +} + +//Function Number: 35 +func_10A7(param_00,param_01,param_02) +{ + level endon(param_00 + "_" + param_01 + "_stop"); + if(param_02.alias["type"] == "loop") + { + dambx_perform_loop_event(param_00,param_01,param_02); + return; + } + + dambx_perform_oneshot_event(param_00,param_01,param_02); +} + +//Function Number: 36 +dambx_perform_oneshot_event(param_00,param_01,param_02) +{ + level endon(param_00 + "_" + param_01 + "_stop"); + var_03 = level.player.origin; + if(isdefined(param_02.ent)) + { + var_03 = param_02.ent.origin; + } + else if(isdefined(param_02.point)) + { + var_03 = param_02.point; + } + + if(level._audio.damb.entity_ref_count < level._audio.damb.max_entities) + { + var_04 = spawn("script_origin",var_03 + param_02.start_position); + if(isdefined(param_02.ent) && param_02.mode == "attach") + { + var_04 linkto(param_02.ent); + } + + var_04 playsound(param_02.alias["name"],"sounddone"); + var_04 thread maps\_audio::aud_check_sound_done(); + if(!var_04.sounddone) + { + var_05 = level._audio.damb.oneshot_handle_index; + level._audio.damb.playing[param_00][param_01]["oneshots"][var_05] = var_04; + level._audio.damb.oneshot_handle_index++; + func_10C2(); + if(isdefined(param_02.end_position) && !isdefined(param_02.entity)) + { + var_06 = 0.1 * param_02.var_109E; + var_04 moveto(var_03 + param_02.end_position,param_02.var_109E,var_06,var_06); + } + + if(isdefined(param_02.start_pitch)) + { + var_04 scalepitch(param_02.start_pitch); + } + + if(isdefined(param_02.pitch_time)) + { + wait 0.05; + if(isdefined(var_04) && !var_04.sounddone) + { + var_04 scalepitch(param_02.end_pitch,param_02.pitch_time); + } + } + + thread func_10A6(param_00,param_01,var_05,var_04); + var_04 waittill("sounddone"); + return; + } + + var_04 delete(); + return; + } + + maps\_audio::aud_print_warning("TRYING TO PLAY ONESHOT WITH DAMB REF COUNT AT MAXIMUM!"); +} + +//Function Number: 37 +dambx_perform_loop_event(param_00,param_01,param_02) +{ + level endon(param_00 + "_" + param_01 + "_stop"); + if(level._audio.damb.entity_ref_count < level._audio.damb.max_entities) + { + var_03 = level.player.origin; + if(isdefined(param_02.ent)) + { + var_03 = param_02.ent.origin; + } + else if(isdefined(param_02.point)) + { + var_03 = param_02.point; + } + + var_04 = param_02.alias["name"]; + var_05 = dambx_get_loop_preset(var_04); + if(!isdefined(var_05)) + { + return; + } + + var_06 = min(var_05["duration"][0],var_05["duration"][1]); + var_07 = max(var_05["duration"][0],var_05["duration"][1]); + var_08 = randomfloatrange(var_06,var_07); + var_09 = var_05["loop_alias"]; + var_0A = var_05["fade_in"]; + var_0B = var_05["fade_out"]; + var_0C = undefined; + if(isdefined(var_05["end_alias"])) + { + var_0C = var_05["end_alias"]; + } + + var_0D = spawn("script_origin",var_03 + param_02.start_position); + if(isdefined(param_02.ent) && param_02.mode == "attach") + { + var_0D linkto(param_02.ent); + } + + var_0D playloopsound(var_09); + if(isdefined(var_0A)) + { + var_0D scalevolume(0); + wait 0.05; + var_0D scalevolume(1,var_0A); + } + + var_0D thread maps\_audio::aud_check_sound_done(); + if(!var_0D.sounddone) + { + var_0E = level._audio.damb.loop_handle_index; + level._audio.damb.playing[param_00][param_01]["loops"][var_0E] = var_0D; + func_10C2(); + level._audio.damb.loop_handle_index++; + var_0F = 0; + if(isdefined(param_02.mode) && param_02.mode == "free" && isdefined(param_02.end_position)) + { + var_0F = 1; + } + else if(!isdefined(param_02.mode) && isdefined(param_02.end_position)) + { + var_0F = 1; + } + + if(var_0F) + { + var_10 = 0.1 * param_02.var_109E; + var_0D moveto(var_03 + param_02.end_position,param_02.var_109E,var_10,var_10); + } + + if(isdefined(param_02.start_pitch)) + { + var_0D setpitch(param_02.start_pitch); + } + + if(isdefined(param_02.pitch_time)) + { + wait 0.05; + if(isdefined(var_0D) && !var_0D.sounddone) + { + var_0D setpitch(param_02.end_pitch,param_02.pitch_time); + } + } + + wait var_08; + if(!var_0D.sounddone) + { + if(isdefined(level._audio.damb.playing[param_00][param_01]["loops"][var_0E])) + { + if(isdefined(var_0C)) + { + var_11 = spawn("script_origin",var_0D.origin); + var_11 playsound(var_0C,"sounddone"); + var_12 = level._audio.damb.oneshot_handle_index; + level._audio.damb.oneshot_handle_index++; + level._audio.damb.playing[param_00][param_01]["oneshots"][var_12] = var_11; + func_10C2(); + thread func_10A6(param_00,param_01,var_12,var_11); + } + + if(isdefined(var_0B)) + { + thread maps\_audio::aud_fade_loop_out_and_delete(var_0D,var_0B); + } + else + { + var_0D stoploopsound(); + wait 0.05; + var_0D delete(); + } + + func_10C3(); + level._audio.damb.playing[param_00][param_01]["loops"][var_0E] = undefined; + return; + } + + return; + } + + var_0D stoploopsound(); + var_0D delete(); + func_10C3(); + level._audio.damb.playing[param_00][param_01]["loops"][var_0E] = undefined; + return; + } + + var_0D delete(); + return; + } + + maps\_audio::aud_print_warning("TRYING TO PLAY LOOP WITH DAMB REF COUNT AT MAXIMUM!"); +} + +//Function Number: 38 +func_10AD(param_00,param_01) +{ + var_02 = 0; + foreach(var_04 in level._audio.damb.playing[param_00][param_01]["components"]) + { + var_05 = var_04[1]; + var_02 = var_02 + var_05; + } + + var_07 = randomfloat(var_02); + var_08 = 0; + var_09 = undefined; + foreach(var_04 in level._audio.damb.playing[param_00][param_01]["components"]) + { + var_0B = var_08 + var_04[1]; + if(var_07 >= var_08 && var_07 < var_0B) + { + var_09 = var_04[0]; + break; + } + + var_08 = var_0B; + } + + var_0D = dambx_get_component_preset(var_09); + if(!isdefined(var_0D)) + { + return; + } + + return var_41; +} + +//Function Number: 39 +func_10AE(param_00) +{ + var_01 = param_00["loops"]; + var_02 = param_00["oneshots"]; + var_03 = undefined; + if(!isdefined(level._audio.damb.component_weights[param_00["name"]])) + { + var_03 = 0; + if(isdefined(var_01)) + { + if(isstring(var_01[0])) + { + var_03 = var_03 + var_01[1]; + } + else + { + foreach(var_05 in var_01) + { + var_03 = var_03 + var_05[1]; + } + } + } + + if(isdefined(var_02)) + { + if(isstring(var_02[0])) + { + var_03 = var_03 + var_02[1]; + } + else + { + foreach(var_05 in var_02) + { + var_03 = var_03 + var_05[1]; + } + } + } + + level._audio.damb.component_weights[param_00["name"]] = var_03; + } + else + { + var_03 = level._audio.damb.component_weights[param_00["name"]]; + } + + var_09 = randomfloatrange(0,var_03); + var_0A = undefined; + var_0B = undefined; + var_0C = 0; + if(isdefined(var_01)) + { + if(isstring(var_01[0])) + { + var_0D = var_0C + var_01[1]; + if(var_09 >= var_0C && var_09 < var_0D) + { + var_0A = var_01[0]; + var_0B = "loop"; + } + else + { + var_0C = var_0D; + } + } + else + { + foreach(var_05 in var_02) + { + var_0D = var_0C + var_05[1]; + if(var_09 >= var_0C && var_09 < var_0D) + { + var_0A = var_05[0]; + var_0B = "loop"; + break; + } + else + { + var_0C = var_0D; + } + } + } + } + + if(!isdefined(var_0A) && isdefined(var_02)) + { + if(isarray(var_02)) + { + foreach(var_05 in var_02) + { + var_0D = var_0C + var_05[1]; + if(var_09 >= var_0C && var_09 < var_0D) + { + var_0A = var_05[0]; + var_0B = "oneshot"; + break; + } + else + { + var_0C = var_0D; + } + } + } + else + { + var_0D = var_0D + var_03[1]; + if(var_09 >= var_0C && var_09 < var_0D) + { + var_0A = var_02[0]; + var_0B = "oneshot"; + } + else + { + var_0C = var_0D; + } + } + } + + var_12 = []; + return var_41; +} + +//Function Number: 40 +dambx_get_loop_preset(param_00) +{ + var_01 = []; + if(isdefined(level._audio.damb.var_105E[param_00])) + { + var_01 = level._audio.damb.var_105E[param_00]; + } + else if(level._audio.damb.use_string_table_presets) + { + var_01 = dambx_get_loop_def_from_string_table(param_00,1); + } + else + { + var_01 = dambx_get_loop_def_from_string_table(param_00,0); + if(!isdefined(var_01) || var_01.size == 0) + { + var_01 = maps\_audio::audio_presets_dynamic_ambience_loop_definitions(param_00,var_01); + } + } + + if(!isdefined(var_01) || var_01.size == 0) + { + return; + } + + level._audio.damb.var_105E[param_00] = var_01; + return var_01; +} + +//Function Number: 41 +dambx_get_component_preset(param_00) +{ + if(!isdefined(level._audio.damb.var_105D)) + { + level._audio.damb.var_105D = []; + } + + var_01 = []; + if(isdefined(level._audio.damb.var_105D[param_00])) + { + var_01 = level._audio.damb.var_105D[param_00]; + } + else if(level._audio.damb.use_string_table_presets) + { + var_01 = dambx_get_component_from_string_table(param_00,1); + } + else + { + var_01 = dambx_get_component_from_string_table(param_00,0); + if(!isdefined(var_01) || var_01.size == 0) + { + var_01 = maps\_audio::audio_presets_dynamic_ambience_components(param_00,var_01); + } + } + + if(!isdefined(var_01) || var_01.size == 0) + { + return; + } + + level._audio.damb.var_105D[param_00] = var_01; + return var_01; +} + +//Function Number: 42 +dambx_play(param_00,param_01,param_02) +{ + level._audio.damb.playing[param_00][param_01]["loops"] = []; + level._audio.damb.playing[param_00][param_01]["single_loops"] = []; + level._audio.damb.playing[param_00][param_01]["oneshots"] = []; + if(!isdefined(level._audio.damb.playing[param_00][param_01]["event_time"])) + { + foreach(var_04 in level._audio.damb.playing[param_00][param_01]["components"]) + { + var_05 = dambx_get_component_preset(var_04); + if(!isdefined(var_05)) + { + return; + } + + var_05["name"] = var_04; + thread dambx_update(param_00,param_01,var_05,param_02); + } + } + else + { + thread dambx_update_serially(param_00,param_01,param_02); + } + + level waittill(param_00 + "_" + param_01 + "_stop"); + wait 0.1; + foreach(var_08 in level._audio.damb.playing[param_00][param_01]["loops"]) + { + thread dambx_fade_out_playing_loop(var_08,level._audio.damb.playing[param_00][param_01]["fade"],0); + } + + foreach(var_08 in level._audio.damb.playing[param_00][param_01]["single_loops"]) + { + thread dambx_fade_out_playing_loop(var_08,level._audio.damb.playing[param_00][param_01]["fade"],1); + } + + foreach(var_08 in level._audio.damb.playing[param_00][param_01]["oneshots"]) + { + thread func_10B4(var_08,level._audio.damb.playing[param_00][param_01]["fade"]); + } + + level._audio.damb.playing[param_00][param_01] = undefined; +} + +//Function Number: 43 +func_10B4(param_00,param_01) +{ + if(isdefined(param_00)) + { + param_00 scalevolume(0,param_01); + wait param_01; + param_00 stopsounds(); + wait 0.05; + param_00 delete(); + func_10C3(); + } +} + +//Function Number: 44 +dambx_fade_out_playing_loop(param_00,param_01,param_02) +{ + param_00 scalevolume(0,param_01); + wait param_01; + param_00 stoploopsound(); + wait 0.05; + param_00 delete(); + if(param_02) + { + level._audio.damb.var_1060--; + return; + } + + func_10C3(); +} + +//Function Number: 45 +dambx_get_list_value_from_string_table(param_00,param_01,param_02,param_03) +{ + var_04 = 0; + if(isdefined(param_03)) + { + var_04 = param_03; + } + + var_05 = []; + var_06 = 0; + var_07 = strtok(param_00,"+"); + var_08 = 0; + for(var_09 = 0;var_09 < var_07.size;var_09++) + { + var_0A = strtok(var_07[var_09]," "); + if(var_0A.size == 1 && var_0A[0] != "") + { + var_05[var_05.size] = var_0A[0]; + continue; + } + + var_0B = var_05.size; + var_05[var_0B] = []; + var_05[var_0B][0] = var_0A[0]; + var_05[var_0B][1] = float(var_0A[1]); + } + + if(!var_06 && var_04) + { + var_0C = []; + for(var_09 = 0;var_09 < var_05.size;var_09++) + { + var_0D = var_0C.size; + var_0C[var_0D] = []; + var_0C[var_0D][0] = var_05[var_09]; + var_0C[var_0D][1] = 1; + } + + var_05 = var_0C; + } + + return var_05; +} + +//Function Number: 46 +dambx_get_loop_def_from_string_table(param_00,param_01) +{ + var_02 = "soundtables/common_damb_loops.csv"; + var_03 = maps\_audio::get_damb_loops_stringtable(); + var_04 = []; + if(param_01) + { + var_04 = func_10B9(var_03,param_00); + } + + if(!isdefined(var_04) || var_04.size == 0) + { + var_04 = func_10B9(var_02,param_00); + } + + if(!isdefined(var_04) || var_04.size == 0) + { + return; + } + + return var_04; +} + +//Function Number: 47 +func_10B9(param_00,param_01) +{ + var_02 = []; + var_03 = 8; + var_04 = undefined; + var_05 = undefined; + var_06 = undefined; + var_07 = undefined; + var_08 = []; + for(var_09 = 0;var_09 < var_03;var_09++) + { + var_0A = tablelookup(param_00,0,"loop_defs",var_09); + if(!isdefined(var_0A) || var_0A == "") + { + return; + } + + var_0B = tablelookup(param_00,0,param_01,var_09); + if(var_0B != "" && var_0A != "comments") + { + switch(var_0A) + { + case "loop_alias": + var_04 = var_0B; + break; + + case "fade_in": + if(isdefined(var_0B) && var_0B != "") + { + var_06 = max(float(var_0B),0); + } + break; + + case "fade_out": + if(isdefined(var_0B) && var_0B != "") + { + var_07 = max(float(var_0B),0); + } + break; + + case "end_alias": + if(isdefined(var_0B) && var_0B != "") + { + var_05 = var_0B; + } + break; + + case "duration_min": + if(isdefined(var_0B) && var_0B != "") + { + var_08[0] = float(var_0B); + } + break; + + case "duration_max": + if(isdefined(var_0B) && var_0B != "") + { + var_08[1] = float(var_0B); + } + break; + + default: + break; + } + } + } + + var_02["loop_alias"] = var_04; + if(isdefined(var_06)) + { + var_02["fade_in"] = var_06; + } + + if(isdefined(var_07)) + { + var_02["fade_out"] = var_07; + } + + if(isdefined(var_05)) + { + var_02["end_alias"] = var_05; + } + + if(isdefined(var_08[0])) + { + var_02["duration"] = dambx_get_two_value_float_array(var_08); + } + + return var_02; +} + +//Function Number: 48 +dambx_get_two_value_float_array(param_00) +{ + var_01 = []; + return var_41; +} + +//Function Number: 49 +dambx_get_component_from_string_table_internal(param_00,param_01) +{ + var_02 = []; + var_03 = 21; + var_04 = 8; + var_05 = []; + var_06 = []; + var_07 = []; + var_08 = []; + var_09 = []; + var_0A = []; + var_0B = []; + var_0C = []; + var_0D = []; + var_0E = []; + var_0F = []; + var_10 = 0; + for(var_11 = 1;var_11 < var_03;var_11++) + { + var_12 = tablelookup(param_00,0,"components",var_11); + if(!isdefined(var_12)) + { + return; + } + + var_13 = tablelookup(param_00,0,param_01,var_11); + if(var_13 != "" && var_12 != "comments") + { + var_10++; + switch(var_12) + { + case "oneshots": + var_05 = dambx_get_list_value_from_string_table(var_13,"component definition","oneshots",1); + break; + + case "loops": + var_06 = dambx_get_list_value_from_string_table(var_13,"component definition","loops",1); + break; + + case "single_loops": + var_07 = dambx_get_list_value_from_string_table(var_13,"component definition","single_loops",0); + break; + + case "first_event_min": + var_08[0] = float(var_13); + break; + + case "first_event_max": + var_08[1] = float(var_13); + break; + + case "event_time_min": + var_09[0] = float(var_13); + break; + + case "event_time_max": + var_09[1] = float(var_13); + break; + + case "dist_min": + var_0A[0] = float(var_13); + break; + + case "dist_max": + var_0A[1] = float(var_13); + break; + + case "cone_min": + var_0B[0] = float(var_13); + break; + + case "cone_max": + var_0B[1] = float(var_13); + break; + + case "travel_min": + var_0C[0] = float(var_13); + break; + + case "travel_max": + var_0C[1] = float(var_13); + break; + + case "travel_time_min": + var_0D[0] = float(var_13); + break; + + case "travel_time_max": + var_0D[1] = float(var_13); + break; + + case "pitch_min": + var_0E[0] = float(var_13); + break; + + case "pitch_max": + var_0E[1] = float(var_13); + break; + + case "pitch_time_min": + var_0F[0] = float(var_13); + break; + + case "pitch_time_max": + var_0F[1] = float(var_13); + break; + + default: + break; + } + } + } + + if(var_10 > 0) + { + if(isdefined(var_05[0])) + { + if(isstring(var_05[0])) + { + var_05[1] = 1; + } + + var_02["oneshots"] = var_05; + } + + if(isdefined(var_06[0])) + { + var_02["loops"] = var_06; + } + + if(isdefined(var_07[0])) + { + var_02["single_loops"] = var_07; + } + + if(isdefined(var_08[0])) + { + var_02["first_event"] = dambx_get_two_value_float_array(var_08); + } + + if(isdefined(var_09[0])) + { + var_02["event_time"] = dambx_get_two_value_float_array(var_09); + } + + if(isdefined(var_0A[0])) + { + var_02["radius"] = dambx_get_two_value_float_array(var_0A); + } + + if(isdefined(var_0B[0])) + { + var_02["cone"] = dambx_get_two_value_float_array(var_0B); + } + + if(isdefined(var_0C[0])) + { + var_02["delta"] = dambx_get_two_value_float_array(var_0C); + } + + if(isdefined(var_0D[0])) + { + var_02["travel_time"] = dambx_get_two_value_float_array(var_0D); + } + + if(isdefined(var_0E[0])) + { + var_02["pitch"] = dambx_get_two_value_float_array(var_0E); + } + + if(isdefined(var_0F[0])) + { + var_02["pitch_time"] = dambx_get_two_value_float_array(var_0F); + } + + if(!isdefined(var_02["radius"])) + { + var_02["radius"] = [0,0.01]; + } + } + + return var_02; +} + +//Function Number: 50 +dambx_get_component_from_string_table(param_00,param_01) +{ + var_02 = maps\_audio::get_damb_component_stringtable(); + var_03 = "soundtables/common_damb_components.csv"; + var_04 = []; + if(param_01) + { + var_04 = dambx_get_component_from_string_table_internal(var_02,param_00); + } + + if(!isdefined(var_04) || var_04.size == 0) + { + var_04 = dambx_get_component_from_string_table_internal(var_03,param_00); + } + + if(!isdefined(var_04) || var_04.size == 0) + { + return; + } + + return var_04; +} + +//Function Number: 51 +dambx_get_preset_from_stringtable_internal(param_00,param_01) +{ + var_02 = 7; + var_03 = []; + var_04 = []; + var_05 = []; + var_06 = []; + for(var_07 = 1;var_07 < var_02;var_07++) + { + var_08 = tablelookup(param_00,0,"dynamic_ambience",var_07); + var_09 = tablelookup(param_00,0,param_01,var_07); + var_0A = 0; + if(var_09 != "" && var_08 != "comments") + { + switch(var_08) + { + case "components": + var_04 = dambx_get_list_value_from_string_table(var_09,"preset definition","components"); + break; + + case "first_event_min": + if(isdefined(var_09) && var_09 != "") + { + var_05[0] = float(var_09); + } + break; + + case "first_event_max": + if(isdefined(var_09) && var_09 != "") + { + var_05[1] = float(var_09); + } + break; + + case "event_time_min": + if(isdefined(var_09) && var_09 != "") + { + var_06[0] = float(var_09); + } + break; + + case "event_time_max": + if(isdefined(var_09) && var_09 != "") + { + var_06[1] = float(var_09); + } + + break; + + case "comment": + break; + + default: + break; + } + } + } + + var_0A = 0; + if(isdefined(var_05[0])) + { + var_0A = 1; + var_03["first_event"] = var_05; + } + + if(isdefined(var_06[0])) + { + var_0A = 1; + var_03["event_time"] = var_06; + } + + if(var_0A) + { + if(isdefined(var_04[0][1])) + { + var_03["components"] = var_04; + } + else + { + var_03["components"] = []; + for(var_07 = 0;var_07 < var_04.size;var_07++) + { + var_03["components"][var_03["components"].size] = [var_04[0],1]; + } + + if(var_03["components"].size == 0) + { + var_03["components"] = undefined; + } + } + } + else if(var_04.size != 0) + { + var_03["components"] = var_04; + } + + return var_03; +} + +//Function Number: 52 +dambx_get_preset_from_string_table(param_00,param_01) +{ + var_02 = maps\_audio::get_damb_stringtable(); + var_03 = "soundtables/common_damb.csv"; + var_04 = []; + if(param_01) + { + var_04 = dambx_get_preset_from_stringtable_internal(var_02,param_00); + } + + if(!isdefined(var_04) || var_04.size == 0) + { + var_04 = dambx_get_preset_from_stringtable_internal(var_03,param_00); + } + + if(!isdefined(var_04) || var_04.size == 0) + { + return; + } + + return var_04; +} + +//Function Number: 53 +dambx_get_damb_preset(param_00) +{ + var_01 = []; + if(isdefined(level._audio.damb.preset_cache[param_00])) + { + var_01 = level._audio.damb.preset_cache[param_00]; + } + else + { + var_01 = dambx_get_preset_from_string_table(param_00,1); + } + + if(!isdefined(var_01) || var_01.size == 0) + { + return; + } + + level._audio.damb.preset_cache[param_00] = var_01; + return var_41; +} + +//Function Number: 54 +func_10C2() +{ + level._audio.damb.entity_ref_count++; +} + +//Function Number: 55 +func_10C3() +{ + level._audio.damb.entity_ref_count--; +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_audio_mix_manager.gsc b/MW3/Xbox/SP/maps/_audio_mix_manager.gsc new file mode 100644 index 0000000..bc59fa5 --- /dev/null +++ b/MW3/Xbox/SP/maps/_audio_mix_manager.gsc @@ -0,0 +1,1362 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_audio_mix_manager.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 62 + * Decompile Time: 1056 ms + * Timestamp: 10/27/2023 2:33:08 AM +*******************************************************************/ + +//Function Number: 1 +mm_init() +{ + if(!isdefined(level._audio)) + { + level._audio = spawnstruct(); + } + + if(!isdefined(level._audio.mix)) + { + level._audio.mix = spawnstruct(); + } + + mmx_init_volmods(); + level._audio.mix.use_string_table_presets = 0; + level._audio.mix.use_iw_presets = 0; + level._audio.mix.var_10C6 = 0; + level._audio.mix.debug_mix_mode = 0; + var_00 = 10; + thread mmx_mix_server_throttler(var_00); + thread mmx_volmod_server_throttler(var_00); + level._audio.mix.var_10C8 = ""; + level._audio.mix.var_10C9 = ""; + level._audio.mix.sticky_submixes = []; + if(!isdefined(level._audio.volmod_submixes)) + { + level._audio.volmod_submixes = []; + } + + level._audio.mix.volmod_submixblends = []; + level._audio.mix.preset_cache = []; + level._audio.mix.changed_presets = []; + level._audio.mix.headroom = 0.85; + level._audio.mix.blend_value = 0; + level._audio.mix.blend_name = ""; + thread func_1106(); + waittillframeend; + thread mmx_apply_initial_mix(); +} + +//Function Number: 2 +mm_precache_preset(param_00) +{ + func_111E(param_00); +} + +//Function Number: 3 +mm_set_headroom_mix(param_00,param_01,param_02) +{ + if(!level._audio.mix.debug_mix_mode) + { + var_03 = 1; + if(isdefined(param_02)) + { + var_03 = param_02; + } + + level._audio.mix.headroom = param_01; + var_04 = func_111E(param_00); + if(isdefined(var_04)) + { + level._audio.mix.headroom_preset = var_04; + mmx_update_mix(var_03,param_00); + } + } +} + +//Function Number: 4 +func_10D4() +{ + level._audio.mix.debug_mix_mode = 1; +} + +//Function Number: 5 +mm_disable_debug_mode() +{ + level._audio.mix.debug_mix_mode = 0; +} + +//Function Number: 6 +mm_use_string_table() +{ + level._audio.mix.use_string_table_presets = 1; + level._audio.mix.use_iw_presets = 0; +} + +//Function Number: 7 +mm_start_preset(param_00,param_01) +{ + if(!level._audio.mix.debug_mix_mode && !level._audio.mix.var_10C6) + { + if(param_00 != level._audio.mix.var_10C8) + { + mmx_clear_submixes(0); + mmx_set_mix(param_00,param_01); + } + } +} + +//Function Number: 8 +mm_start_zone_preset(param_00) +{ + if(!level._audio.mix.debug_mix_mode && !level._audio.mix.var_10C6) + { + var_01 = func_111E(param_00); + if(!isdefined(var_01)) + { + return; + } + + if(isdefined(level._audio.mix.volmod_submixes["zone_mix"])) + { + foreach(var_04, var_03 in level._audio.mix.volmod_submixes["zone_mix"]) + { + if(var_04 != "fade_time" && var_04 != "preset_name") + { + level._audio.mix.volmod_submixes["zone_mix"][var_04].current_volume = 1; + } + } + } + else + { + level._audio.mix.volmod_submixes["zone_mix"] = []; + } + + level._audio.mix.volmod_submixes["zone_mix"]["preset_name"] = param_00; + foreach(var_04, var_03 in var_01) + { + if(var_04 != "fade_time" && var_04 != "name") + { + level._audio.mix.volmod_submixes["zone_mix"][var_04] = spawnstruct(); + level._audio.mix.volmod_submixes["zone_mix"][var_04].current_volume = var_03; + level._audio.mix.volmod_submixes["zone_mix"][var_04].var_10DA = var_03; + } + } + + var_06 = 1; + if(isdefined(var_01["fade_time"])) + { + var_06 = var_01["fade_time"]; + } + + mmx_update_mix(var_06,"zone_mix"); + } +} + +//Function Number: 9 +func_10DB(param_00) +{ + var_01 = 1; + if(isdefined(param_00)) + { + var_01 = param_00; + } + + if(isdefined(level._audio.mix.volmod_submixes["zone_mix"])) + { + level._audio.mix.volmod_submixes["zone_mix"]["CLEAR"] = 1; + mmx_update_mix(var_01,"zone_mix"); + } +} + +//Function Number: 10 +mm_clear_submixes(param_00) +{ + mmx_clear_submixes(1,param_00); +} + +//Function Number: 11 +mm_make_submix_sticky(param_00) +{ + level._audio.mix.sticky_submixes[param_00] = 1; +} + +//Function Number: 12 +mm_make_submix_unsticky(param_00) +{ + level._audio.mix.sticky_submixes[param_00] = undefined; +} + +//Function Number: 13 +mm_add_submix(param_00,param_01,param_02) +{ + if(!level._audio.mix.debug_mix_mode && !level._audio.mix.var_10C6) + { + mmx_set_mix(param_00,param_01,param_02); + } +} + +//Function Number: 14 +mm_add_submix_blend_to(param_00,param_01,param_02,param_03) +{ + if(!isdefined(level._audio.mix.volmod_submixblends[param_01])) + { + var_04 = mmx_create_submix_blend(undefined,param_00,param_02); + if(!isdefined(var_04)) + { + return; + } + + level._audio.mix.volmod_submixblends[param_01] = var_04; + mmx_update_mix(param_03,param_00); + } +} + +//Function Number: 15 +mm_add_submix_blend(param_00,param_01,param_02,param_03,param_04) +{ + if(!isdefined(level._audio.mix.volmod_submixblends[param_02])) + { + var_05 = mmx_create_submix_blend(param_00,param_01,param_03); + if(!isdefined(var_05)) + { + return; + } + + level._audio.mix.volmod_submixblends[param_02] = var_05; + mmx_update_mix(param_04,param_02); + } +} + +//Function Number: 16 +mm_set_submix_blend_value(param_00,param_01,param_02) +{ + if(isdefined(level._audio.mix.volmod_submixblends[param_00])) + { + level._audio.mix.volmod_submixblends[param_00].var_10E3 = clamp(param_01,0,1); + mmx_update_mix(param_02,param_00); + } +} + +//Function Number: 17 +func_10E4(param_00,param_01) +{ + if(isdefined(level._audio.mix.volmod_submixblends[param_00])) + { + level._audio.mix.volmod_submixblends[param_00].clear = 1; + mmx_update_mix(param_01,param_00); + } +} + +//Function Number: 18 +mm_scale_submix(param_00,param_01,param_02) +{ + if(!level._audio.mix.debug_mix_mode && !level._audio.mix.var_10C6) + { + if(isdefined(level._audio.mix.volmod_submixes[param_00])) + { + func_10FE(param_00,param_01); + } + else + { + func_10FF(param_00,param_01); + } + + mmx_update_mix(param_02,param_00); + } +} + +//Function Number: 19 +func_10E7(param_00,param_01) +{ + if(!level._audio.mix.debug_mix_mode && !level._audio.mix.var_10C6) + { + if(isdefined(level._audio.mix.volmod_submixes[param_00])) + { + level._audio.mix.volmod_submixes[param_00].current_volume = level._audio.mix.volmod_submixes[param_00].var_10DA; + mmx_update_mix(param_01,param_00); + } + } +} + +//Function Number: 20 +mm_clear_submix(param_00,param_01) +{ + if(!level._audio.mix.debug_mix_mode && !level._audio.mix.var_10C6) + { + if(param_00 == "default") + { + return; + } + + if(!isdefined(level._audio.mix.sticky_submixes[param_00]) && isdefined(level._audio.mix.volmod_submixes[param_00])) + { + level._audio.mix.volmod_submixes[param_00]["CLEAR"] = 1; + mmx_update_mix(param_01,param_00); + } + } +} + +//Function Number: 21 +mm_get_applied_preset_name() +{ + return level._audio.mix.var_10C8; +} + +//Function Number: 22 +mm_add_dynamic_volmod_submix(param_00,param_01,param_02) +{ + if(!level._audio.mix.debug_mix_mode) + { + if(isdefined(level._audio.mix.volmod_submixes[param_00])) + { + return; + } + + level._audio.mix.volmod_submixes[param_00] = []; + var_03 = 0; + var_04 = undefined; + foreach(var_06 in param_01) + { + if(maps\_audio::aud_is_even(var_03)) + { + var_04 = var_06; + } + else + { + if(!mmx_is_volmod_channel(var_04)) + { + level._audio.mix.volmod_submixes[param_00] = undefined; + return; + } + + level._audio.mix.volmod_submixes[param_00][var_04] = spawnstruct(); + level._audio.mix.volmod_submixes[param_00][var_04].current_volume = var_06; + level._audio.mix.volmod_submixes[param_00][var_04].var_10DA = var_06; + var_04 = undefined; + } + + var_03++; + } + + mmx_update_mix(param_02,param_00); + } +} + +//Function Number: 23 +mm_add_dynamic_submix(param_00,param_01,param_02) +{ + if(!level._audio.mix.debug_mix_mode) + { + level._audio.mix.volmod_submixes[param_00] = []; + var_03 = 0; + var_04 = undefined; + foreach(var_06 in param_01) + { + if(maps\_audio::aud_is_even(var_03)) + { + var_04 = var_06; + } + else + { + level._audio.mix.volmod_submixes[param_00][var_04] = spawnstruct(); + level._audio.mix.volmod_submixes[param_00][var_04].current_volume = var_06; + level._audio.mix.volmod_submixes[param_00][var_04].var_10DA = var_06; + var_04 = undefined; + } + + var_03++; + } + + mmx_update_mix(param_02,param_00); + } +} + +//Function Number: 24 +mm_does_volmod_submix_exist(param_00) +{ + return isdefined(level._audio.mix.volmod_submixes[param_00]); +} + +//Function Number: 25 +mm_mute_volmods(param_00,param_01) +{ + if(!level._audio.mix.debug_mix_mode) + { + level._audio.mix.volmod_submixes["mm_mute"] = []; + if(isstring(param_00)) + { + if(!isdefined(level._audio.mix.volmod_submixes["mm_mute"][param_00])) + { + level._audio.mix.volmod_submixes["mm_mute"][param_00] = spawnstruct(); + } + + level._audio.mix.volmod_submixes["mm_mute"][param_00].current_volume = 0; + level._audio.mix.volmod_submixes["mm_mute"][param_00].var_10DA = 1; + } + else + { + foreach(var_03 in param_00) + { + if(!isdefined(level._audio.mix.volmod_submixes["mm_mute"][var_03])) + { + level._audio.mix.volmod_submixes["mm_mute"][var_03] = spawnstruct(); + } + + level._audio.mix.volmod_submixes["mm_mute"][var_03].current_volume = 0; + level._audio.mix.volmod_submixes["mm_mute"][var_03].var_10DA = 1; + } + } + + mmx_update_mix(param_01,"mm_mute"); + } +} + +//Function Number: 26 +mm_clear_volmod_mute_mix(param_00) +{ + if(isdefined(level._audio.volmod_submixes["mm_mute"])) + { + level._audio.volmod_submixes["mm_mute"] = undefined; + mmx_update_mix(param_00,"mm_mute"); + } +} + +//Function Number: 27 +mm_solo_volmods(param_00,param_01) +{ + if(!level._audio.mix.debug_mix_mode) + { + level._audio.mix.volmod_submixes["mm_solo"] = []; + foreach(var_04, var_03 in level._audio.mix.volmod_vals) + { + level._audio.mix.volmod_submixes["mm_solo"][var_04] = spawnstruct(); + level._audio.mix.volmod_submixes["mm_solo"][var_04].current_volume = 0; + level._audio.mix.volmod_submixes["mm_solo"][var_04].var_10DA = 1; + } + + if(isstring(param_00)) + { + level._audio.mix.volmod_submixes["mm_solo"][param_00].current_volume = 1; + } + else + { + foreach(var_06 in param_00) + { + level._audio.mix.volmod_submixes["mm_solo"][var_06].current_volume = 1; + } + } + + mmx_update_mix(param_01,"mm_solo"); + } +} + +//Function Number: 28 +mm_clear_solo_volmods(param_00) +{ + if(isdefined(level._audio.mix.volmod_submixes["mm_solo"])) + { + level._audio.mix.volmod_submixes["mm_solo"] = undefined; + mmx_update_mix(param_00,"mm_solo"); + } +} + +//Function Number: 29 +mm_get_channel_names() +{ + return level._audio.mix.channel_names; +} + +//Function Number: 30 +mm_get_num_volmod_submixes() +{ + return level._audio.mix.volmod_submixes.size; +} + +//Function Number: 31 +mm_get_num_submixes() +{ + return 0; +} + +//Function Number: 32 +func_10F7(param_00) +{ + var_01 = undefined; + if(isdefined(level._audio.mix.volmod_submixes) && param_00 < level._audio.mix.volmod_submixes.size) + { + var_02 = 0; + foreach(var_06, var_04 in level._audio.mix.volmod_submixes) + { + if(var_04.size > 0) + { + if(var_02 == param_00) + { + if(var_06 == "zone_mix") + { + var_05 = level._audio.mix.volmod_submixes["zone_mix"]["preset_name"]; + var_06 = "zone_mix : " + var_05; + } + + var_01 = var_06; + break; + } + + var_02++; + } + } + } + + return var_01; +} + +//Function Number: 33 +mm_get_volmod_submix_by_name(param_00) +{ + var_01 = undefined; + if(getsubstr(param_00,0,8) == "zone_mix") + { + param_00 = "zone_mix"; + } + + if(isdefined(level._audio.mix.volmod_submixes) && isdefined(level._audio.mix.volmod_submixes[param_00])) + { + if(level._audio.mix.volmod_submixes[param_00].size > 0) + { + var_01 = level._audio.mix.volmod_submixes[param_00]; + } + } + + return var_01; +} + +//Function Number: 34 +mm_set_default_volmod(param_00,param_01,param_02) +{ + param_01 = clamp(param_01,0,1); + if(isdefined(level._audio.mix.volmod_submixes["default"])) + { + if(isdefined(level._audio.mix.volmod_submixes["default"][param_00])) + { + level._audio.mix.volmod_submixes["default"][param_00].current_volume = param_01; + mmx_update_mix(param_02,"default"); + return; + } + + maps\_audio::aud_print_error("Trying to set a volmod value on the default submix but the volmod doesn\'t exist: " + param_00); + return; + } + + maps\_audio::aud_print_error("Trying to set a volmod value on the default submix but \"default\" doesn\'t exist."); +} + +//Function Number: 35 +mm_get_original_default_volmod(param_00) +{ + var_01 = undefined; + if(isdefined(level._audio.mix.volmod_submixes["default"])) + { + if(isdefined(level._audio.mix.volmod_submixes["default"][param_00])) + { + var_01 = level._audio.mix.volmod_submixes["default"][param_00].var_10DA; + } + else + { + maps\_audio::aud_print_error("Trying to set a volmod value on the default submix but the volmod doesn\'t exist: " + param_00); + } + } + else + { + maps\_audio::aud_print_error("Trying to set a volmod value on the default submix but \"default\" doesn\'t exist."); + } + + return var_01; +} + +//Function Number: 36 +mm_restore_original_default_volmod(param_00,param_01) +{ + var_02 = mm_get_original_default_volmod(param_00); + if(isdefined(var_02)) + { + mm_set_default_volmod(param_00,var_02,param_01); + } +} + +//Function Number: 37 +mmx_set_mix(param_00,param_01,param_02) +{ + func_10FF(param_00,param_02); + level._audio.mix.var_10C9 = level._audio.mix.var_10C8; + level._audio.mix.var_10C8 = param_00; + mmx_update_mix(param_01,param_00); +} + +//Function Number: 38 +func_10FE(param_00,param_01) +{ + if(isdefined(level._audio.mix.volmod_submixes[param_00])) + { + foreach(var_04, var_03 in level._audio.mix.volmod_submixes[param_00]) + { + level._audio.mix.volmod_submixes[param_00][var_04].current_volume = var_03.var_10DA * param_01; + } + } +} + +//Function Number: 39 +func_10FF(param_00,param_01) +{ + if(param_00 == "default") + { + return; + } + + if(!isdefined(level._audio.mix.volmod_submixes[param_00])) + { + var_02 = func_111E(param_00); + if(!isdefined(var_02)) + { + return; + } + + var_03 = 1; + if(isdefined(param_01)) + { + var_03 = param_01; + var_03 = max(var_03,0); + } + + level._audio.mix.volmod_submixes[param_00] = []; + foreach(var_06, var_05 in var_02) + { + if(var_06 != "name" && var_06 != "fade_time") + { + level._audio.mix.volmod_submixes[param_00][var_06] = spawnstruct(); + level._audio.mix.volmod_submixes[param_00][var_06].current_volume = var_05 * var_03; + level._audio.mix.volmod_submixes[param_00][var_06].var_10DA = var_05; + } + } + } +} + +//Function Number: 40 +mmx_create_submix_blend(param_00,param_01,param_02) +{ + var_03 = 0; + if(isdefined(param_02)) + { + var_03 = clamp(param_02,0,1); + } + + var_04 = spawnstruct(); + var_05 = func_111E(param_01); + if(!isdefined(var_05)) + { + return; + } + + var_04.presetb = var_05; + var_04.presetb["fade_time"] = undefined; + var_04.presetb["name"] = undefined; + if(isdefined(param_00)) + { + var_06 = func_111E(param_00); + if(!isdefined(var_06)) + { + return; + } + + var_04.preseta = var_06; + var_04.preseta["fade_time"] = undefined; + var_04.preseta["name"] = undefined; + } + else + { + var_04.preseta = []; + foreach(var_09, var_08 in var_04.presetb) + { + var_04.preseta[var_09] = 1; + } + } + + var_04.var_10E3 = var_03; + return var_04; +} + +//Function Number: 41 +mmx_clear_submixes(param_00,param_01) +{ + var_02 = 1; + if(isdefined(param_00)) + { + var_02 = param_00; + } + + foreach(var_05, var_04 in level._audio.mix.volmod_submixes) + { + if(var_05 != "default" && var_05 != "zone_mix" && !isdefined(level._audio.mix.sticky_submixes[var_05]) && var_05 != "mm_solo" && var_05 != "mm_mute") + { + level._audio.mix.volmod_submixes[var_05]["CLEAR"] = 1; + level._audio.mix.changed_presets[var_05] = 1; + } + } + + if(var_02) + { + mmx_update_mix(param_01,undefined); + } +} + +//Function Number: 42 +mmx_update_mix(param_00,param_01) +{ + level._audio.mix.last_fade_time = param_00; + if(isdefined(param_01)) + { + level._audio.mix.changed_presets[param_01] = 1; + } + + level notify("mix_update"); +} + +//Function Number: 43 +func_1106() +{ + level waittill("mix_update"); + for(;;) + { + waittillframeend; + var_00 = 0; + if(isdefined(level._audio.mix.last_fade_time)) + { + var_00 = level._audio.mix.last_fade_time; + } + + func_1109(var_00); + level waittill("mix_update"); + } +} + +//Function Number: 44 +mmx_mix_in_non_changed_submixes() +{ + var_00 = []; + foreach(var_03, var_02 in level._audio.mix.volmod_submixes) + { + if(!isdefined(level._audio.mix.changed_presets[var_03])) + { + var_00[var_03] = 1; + } + } + + foreach(var_08, var_05 in level._audio.mix.volume_products) + { + foreach(var_03, var_07 in var_00) + { + if(isdefined(level._audio.mix.volmod_submixes[var_03][var_08])) + { + level._audio.mix.volume_products[var_08] = level._audio.mix.volume_products[var_08] * level._audio.mix.volmod_submixes[var_03][var_08].current_volume; + } + } + } +} + +//Function Number: 45 +func_1109(param_00) +{ + var_01 = 1; + if(isdefined(param_00)) + { + var_01 = param_00; + var_01 = max(var_01,0); + } + + level._audio.mix.volume_products = undefined; + mmx_set_volume_products_volmods(0); + mmx_mix_in_non_changed_submixes(); + var_02 = 0; + foreach(var_05, var_04 in level._audio.mix.volume_products) + { + if(var_05 != "voiceover_critical" && var_05 != "fullvolume") + { + var_04 = var_04 * level._audio.mix.headroom; + } + + if(var_04 != level._audio.mix.volmod_vals[var_05].volume) + { + var_02 = 1; + level._audio.mix.volmod_vals[var_05].volume = var_04; + level._audio.mix.volmod_vals[var_05].fade_time = var_01; + mmx_volmod_setting_enqueue(var_05,var_04,var_01); + } + } + + level._audio.mix.changed_presets = []; + if(var_02) + { + level notify("aud_new_volmod_set"); + } +} + +//Function Number: 46 +mmx_set_volume_products_volmods(param_00) +{ + level._audio.mix.volume_products = []; + var_01 = []; + foreach(var_10, var_03 in level._audio.mix.changed_presets) + { + if(isdefined(level._audio.mix.volmod_submixes[var_10])) + { + var_04 = level._audio.mix.volmod_submixes[var_10]; + var_04["name"] = undefined; + var_04["fade_time"] = undefined; + var_04["preset_name"] = undefined; + var_05 = 0; + if(isdefined(var_04["CLEAR"])) + { + var_05 = 1; + } + + var_04["CLEAR"] = undefined; + foreach(var_08, var_07 in var_04) + { + if(isdefined(level._audio.mix.volume_products[var_08]) && !var_05) + { + level._audio.mix.volume_products[var_08] = level._audio.mix.volume_products[var_08] * var_07.current_volume; + continue; + } + + if(var_05 && !isdefined(level._audio.mix.volume_products[var_08])) + { + level._audio.mix.volume_products[var_08] = 1; + continue; + } + + if(!var_05) + { + level._audio.mix.volume_products[var_08] = var_07.current_volume; + } + } + + if(var_05) + { + level._audio.mix.volmod_submixes[var_10] = undefined; + } + + continue; + } + + if(isdefined(level._audio.mix.volmod_submixblends[var_10])) + { + var_09 = level._audio.mix.volmod_submixblends[var_10]; + var_05 = 0; + if(isdefined(var_09.clear)) + { + var_05 = 1; + } + + foreach(var_08, var_0B in var_09.preseta) + { + if(!isdefined(var_01[var_08])) + { + var_01[var_08] = 1; + } + + if(!var_05) + { + var_0C = var_09.presetb[var_08]; + var_0D = var_09.preseta[var_08]; + var_0E = var_09.var_10E3; + var_0F = var_0E * var_0C - var_0D + var_0D; + var_01[var_08] = var_01[var_08] * var_0F; + } + } + + if(var_05) + { + level._audio.mix.volmod_submixblends[var_10] = undefined; + } + } + } + + foreach(var_12, var_0B in var_01) + { + if(isdefined(level._audio.mix.volume_products[var_12])) + { + level._audio.mix.volume_products[var_12] = level._audio.mix.volume_products[var_12] * var_0B; + continue; + } + + level._audio.mix.volume_products[var_12] = var_0B; + } +} + +//Function Number: 47 +mmx_apply_initial_mix() +{ + var_00 = undefined; + var_01 = undefined; +} + +//Function Number: 48 +mmx_apply_debug_mix(param_00) +{ + if(level._audio.mix.debug_mix_mode) + { + while(!isdefined(level.player)) + { + wait 0.05; + } + + mmx_set_mix(param_00); + } +} + +//Function Number: 49 +mmx_volmod_setting_enqueue(param_00,param_01,param_02) +{ + if(!isdefined(level._audio.mix.volmod_queue)) + { + level._audio.mix.volmod_queue = []; + level._audio.mix.volmod_index = 0; + } + + var_03 = 0; + foreach(var_06, var_05 in level._audio.mix.volmod_queue) + { + if(var_05["volmod"] == param_00) + { + var_03 = 1; + level._audio.mix.volmod_queue[var_06]["volume"] = param_01; + level._audio.mix.volmod_queue[var_06]["fade_time"] = param_02; + break; + } + } + + if(!var_03) + { + var_07 = []; + level._audio.mix.volmod_queue[level._audio.mix.volmod_index] = var_41; + level._audio.mix.volmod_index++ = var_41["fade_time"]; + } +} + +//Function Number: 50 +mmx_mix_setting_enqueue(param_00,param_01,param_02) +{ + if(!isdefined(level._audio.mix.var_1113)) + { + level._audio.mix.var_1113 = []; + level._audio.mix.index = 0; + } + + var_03 = 0; + foreach(var_06, var_05 in level._audio.mix.var_1113) + { + if(var_05["channel"] == param_00) + { + var_03 = 1; + level._audio.mix.var_1113[var_06]["volume"] = param_01; + level._audio.mix.var_1113[var_06]["fade_time"] = param_02; + break; + } + } + + if(!var_03) + { + var_07 = []; + level._audio.mix.var_1113[level._audio.mix.index] = var_41; + level._audio.mix.index++ = var_41["fade_time"]; + } +} + +//Function Number: 51 +mmx_volmod_server_throttler(param_00) +{ + if(!isdefined(level._audio.mix.volmod_queue)) + { + level._audio.mix.volmod_queue = []; + level._audio.mix.volmod_index = 0; + } + + var_01 = 5; + if(isdefined(param_00)) + { + var_01 = param_00; + var_01 = max(var_01,1); + } + + for(;;) + { + level waittill("aud_new_volmod_set"); + while(level._audio.mix.volmod_queue.size > 0) + { + var_02 = 0; + var_03 = []; + foreach(var_0A, var_05 in level._audio.mix.volmod_queue) + { + if(var_02 < var_01) + { + var_02++; + var_03[var_03.size] = var_0A; + var_06 = level._audio.mix.volmod_queue[var_0A]; + var_07 = var_06["volmod"]; + var_08 = var_06["volume"]; + var_09 = var_06["fade_time"]; + var_08 = clamp(var_08,0,1); + level.player setvolmod(var_07,var_08,var_09); + continue; + } + + break; + } + + for(var_0B = 0;var_0B < var_03.size;var_0B++) + { + var_0C = var_03[var_0B]; + level._audio.mix.volmod_queue[var_0C] = undefined; + } + + wait 0.05; + } + } +} + +//Function Number: 52 +mmx_mix_server_throttler(param_00) +{ + if(!isdefined(level._audio.mix.var_1113)) + { + level._audio.mix.var_1113 = []; + level._audio.mix.index = 0; + } + + var_01 = 5; + if(isdefined(param_00)) + { + var_01 = param_00; + var_01 = max(var_01,1); + } + + for(;;) + { + level waittill("aud_new_mix_set"); + while(level._audio.mix.var_1113.size > 0) + { + var_02 = 0; + var_03 = []; + foreach(var_0A, var_05 in level._audio.mix.var_1113) + { + if(var_02 < var_01) + { + var_02++; + var_03[var_03.size] = var_0A; + var_06 = level._audio.mix.var_1113[var_0A]; + var_07 = var_06["channel"]; + var_08 = var_06["volume"]; + var_09 = var_06["fade_time"]; + var_08 = clamp(var_08,0,1); + level.player setchannelvolume(var_07,var_08,var_09); + continue; + } + + break; + } + + for(var_0B = 0;var_0B < var_03.size;var_0B++) + { + var_0C = var_03[var_0B]; + level._audio.mix.var_1113[var_0C] = undefined; + } + + wait 0.05; + } + } +} + +//Function Number: 53 +mmx_get_preset_from_string_table(param_00,param_01) +{ + var_02 = []; + var_03 = maps\_audio::get_mix_stringtable(); + var_04 = "soundtables/common_mix.csv"; + if(!isdefined(level._audio.mix.preset_cache)) + { + level._audio.mix.preset_cache = []; + } + + if(isdefined(level._audio.mix.preset_cache[param_00])) + { + var_02 = level._audio.mix.preset_cache[param_00]; + } + else + { + if(param_01) + { + var_02 = mmx_get_mix_preset_from_stringtable_internal(var_03,param_00,0); + } + + if(!isdefined(var_02) || var_02.size == 0) + { + var_02 = mmx_get_mix_preset_from_stringtable_internal(var_04,param_00,1); + } + + if(!isdefined(var_02) || var_02.size == 0) + { + return; + } + + level._audio.mix.preset_cache[param_00] = var_02; + } + + return var_02; +} + +//Function Number: 54 +mmx_get_mix_preset_from_stringtable_internal(param_00,param_01,param_02) +{ + var_03 = 4; + var_04 = ""; + var_05 = 0; + var_06 = 0; + var_07 = 0; + var_08 = undefined; + var_09 = []; + if(!isdefined(level._audio.mix.var_1119)) + { + level._audio.mix.var_1119 = []; + } + + if(!isdefined(level._audio.mix.var_1119[param_00])) + { + level._audio.mix.var_1119[param_00] = []; + for(var_0A = 1;var_0A < var_03;var_0A++) + { + var_0B = tablelookupbyrow(param_00,0,var_0A); + level._audio.mix.var_1119[param_00][var_0B] = var_0A; + } + } + + var_0C = maps\_audio::func_111A("mix",param_01,param_02); + if(var_0C != -1) + { + var_05 = var_0C; + } + else if((param_02 && maps\_audio::aud_is_common_indexed()) || !param_02 && maps\_audio::aud_is_local_indexed()) + { + return var_09; + } + + var_0D = 0; + while(var_04 != "EOF" && var_07 < 10) + { + var_04 = tablelookupbyrow(param_00,var_05,0); + if(var_04 != "") + { + var_07 = 0; + } + + while(var_04 == param_01) + { + var_06 = 1; + if(!isdefined(var_08)) + { + var_0E = level._audio.mix.var_1119[param_00]["fade_time"]; + var_08 = tablelookupbyrow(param_00,var_05,var_0E); + if(!isdefined(var_08) || isdefined(var_08) && var_08 == "") + { + var_08 = 1; + } + } + + var_0F = level._audio.mix.var_1119[param_00]["channels"]; + var_10 = level._audio.mix.var_1119[param_00]["value"]; + var_11 = tablelookupbyrow(param_00,var_05,var_0F); + var_12 = tablelookupbyrow(param_00,var_05,var_10); + if(var_11 == "set_all" || var_11 == "setall") + { + if(float(var_12) < 1) + { + var_09 = volmod_mix_with_all_channels_at(float(var_12)); + } + } + else + { + if(!isdefined(level._audio.mix.volmodfile[var_11])) + { + maps\_audio::aud_print_error("In soundtable " + param_00 + ", " + param_01 + " uses a volmod group name that doesn\'t exist in the volmodgroups.csv file."); + return; + } + + var_09[var_11] = float(var_12); + } + + var_05++; + var_04 = tablelookupbyrow(param_00,var_05,0); + var_0D++; + } + + var_07++; + if(var_06) + { + break; + } + + var_05++; + } + + if(var_06 && isdefined(var_08)) + { + var_09["fade_time"] = float(var_08); + } + + return var_09; +} + +//Function Number: 55 +func_111E(param_00) +{ + if(!isdefined(level._audio.mix.preset_cache)) + { + level._audio.mix.preset_cache = []; + } + + var_01 = []; + if(isdefined(level._audio.mix.preset_cache[param_00])) + { + var_01 = level._audio.mix.preset_cache[param_00]; + } + else + { + var_01 = undefined; + if(level._audio.mix.use_string_table_presets) + { + var_01 = mmx_get_preset_from_string_table(param_00,1); + } + else + { + var_01 = mmx_get_preset_from_string_table(param_00,0); + if(!isdefined(var_01) || var_01.size == 0) + { + var_01 = maps\_audio::audio_presets_mix(param_00,var_01); + } + } + + if(!isdefined(var_01) || var_01.size == 0) + { + return; + } + + if(!isdefined(var_41["fade_time"])) + { + } + + level._audio.mix.preset_cache[var_01] = var_41; + } + + return var_41; +} + +//Function Number: 56 +mmx_init_volmods() +{ + if(!isdefined(level._audio.mix.volmodfile)) + { + mmx_parse_volumemodgroups_csv(); + } + + level._audio.mix.volmod_vals = []; + foreach(var_02, var_01 in level._audio.mix.volmodfile) + { + level._audio.mix.volmod_vals[var_02] = spawnstruct(); + level._audio.mix.volmod_vals[var_02].volume = var_01; + level._audio.mix.volmod_vals[var_02].fade_time = 0; + } + + mmx_init_channel_names(); +} + +//Function Number: 57 +mmx_init_channel_names() +{ + if(!isdefined(level._audio.mix.channel_names)) + { + var_00 = []; + level._audio.mix.channel_names = var_41; + } +} + +//Function Number: 58 +mmx_get_channel_volumes() +{ + return level._audio.mix.channel_volumes; +} + +//Function Number: 59 +volmod_mix_with_all_channels_at(param_00) +{ + var_01 = []; + foreach(var_04, var_03 in level._audio.mix.volmodfile) + { + if(var_04 != "hud" && var_04 != "interface" && var_04 != "interface_music") + { + var_01[var_04] = param_00; + } + } + + return var_01; +} + +//Function Number: 60 +mmx_parse_volumemodgroups_csv() +{ + var_00 = "soundaliases/volumemodgroups.svmod"; + level._audio.mix.volmodfile = []; + var_01 = 10; + var_02 = 0; + for(var_03 = 0;var_02 < var_01;var_03++) + { + var_04 = tablelookupbyrow(var_00,var_03,0); + if(var_04 == "") + { + var_02++; + continue; + } + + var_05 = getsubstr(var_04,0,0); + if(var_05 == "#") + { + continue; + } + + var_06 = tablelookupbyrow(var_00,var_03,1); + level._audio.mix.volmodfile[var_04] = float(var_06); + } + + if(!isdefined(level._audio.volmod_submixes)) + { + level._audio.volmod_submixes = []; + } + + level._audio.mix.volmod_submixes["default"] = []; + foreach(var_04, var_08 in level._audio.mix.volmodfile) + { + level._audio.mix.volmod_submixes["default"][var_04] = spawnstruct(); + level._audio.mix.volmod_submixes["default"][var_04].current_volume = var_08; + level._audio.mix.volmod_submixes["default"][var_04].var_10DA = var_08; + } +} + +//Function Number: 61 +mmx_is_mix_channel(param_00) +{ + return isdefined(level._audio.mix.channel_names[param_00]); +} + +//Function Number: 62 +mmx_is_volmod_channel(param_00) +{ + return isdefined(level._audio.mix.volmodfile[param_00]); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_audio_music.gsc b/MW3/Xbox/SP/maps/_audio_music.gsc new file mode 100644 index 0000000..84f0372 --- /dev/null +++ b/MW3/Xbox/SP/maps/_audio_music.gsc @@ -0,0 +1,184 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_audio_music.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 12 + * Decompile Time: 186 ms + * Timestamp: 10/27/2023 2:33:20 AM +*******************************************************************/ + +//Function Number: 1 +mus_init() +{ + if(!isdefined(level._audio)) + { + level._audio = spawnstruct(); + } + + level._audio.music = spawnstruct(); + level._audio.music.cue_cash = []; + level._audio.music.curr_cue_name = ""; + level._audio.music.prev_cue_name = ""; + level._audio.music.var_116D = 0; + level._audio.music.var_116E = [[0,0.5],[0.9,1],[1,1]]; + thread musx_monitor_game_vars(); +} + +//Function Number: 2 +mus_play(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = undefined; + var_06 = mus_get_playing_cue_preset(); + var_07 = musx_construct_cue(param_00); + var_08 = var_07["fade_in_time"]; + if(isdefined(param_01)) + { + var_08 = param_01; + } + + var_09 = 2; + if(isdefined(var_06)) + { + if(isdefined(param_02)) + { + var_09 = param_02; + } + else if(isdefined(param_01)) + { + var_09 = param_01; + } + else if(isdefined(var_06["fade_out_time"])) + { + var_09 = var_06["fade_out_time"]; + } + } + + var_0A = var_07["volume"]; + if(isdefined(param_03)) + { + var_0A = param_03; + } + + musx_start_cue(var_07["name"],var_08,var_09,var_0A,param_04); +} + +//Function Number: 3 +func_1170(param_00) +{ + var_01 = 3; + if(mus_is_playing()) + { + var_02 = musx_get_cashed_cue(level._audio.music.curr_cue_name); + var_01 = var_02["fade_out_time"]; + } + + if(isdefined(param_00)) + { + var_01 = param_00; + } + + musx_stop_all_music(var_01); +} + +//Function Number: 4 +mus_is_playing() +{ + return isdefined(level._audio.music.curr_cue_name) && level._audio.music.curr_cue_name != ""; +} + +//Function Number: 5 +mus_get_playing_cue_preset() +{ + var_00 = undefined; + if(mus_is_playing()) + { + var_00 = musx_get_cashed_cue(level._audio.music.curr_cue_name); + } + + return var_00; +} + +//Function Number: 6 +musx_construct_cue(param_00) +{ + var_01 = musx_get_cashed_cue(param_00); + if(!isdefined(var_01)) + { + var_01 = []; + musx_cash_cue(var_41); + } + + return var_41; +} + +//Function Number: 7 +musx_start_cue(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = 0; + if(isdefined(param_04)) + { + var_05 = param_04; + } + + if(param_00 == level._audio.music.curr_cue_name && !var_05) + { + return; + } + + var_06 = level._audio.music.prev_cue_name; + var_07 = level._audio.music.curr_cue_name; + level._audio.music.prev_cue_name = level._audio.music.curr_cue_name; + level._audio.music.curr_cue_name = param_00; + var_08 = musx_get_cashed_cue(level._audio.music.curr_cue_name); + var_09 = musx_get_cashed_cue(level._audio.music.prev_cue_name); + var_0A = undefined; + if(isdefined(var_09)) + { + var_0A = var_09["alias"]; + } + + maps\_audio_stream_manager::func_1048(var_08["alias"],param_01,param_02,param_03,var_0A); +} + +//Function Number: 8 +musx_stop_all_music(param_00) +{ + maps\_audio_stream_manager::sm_stop_music(param_00); +} + +//Function Number: 9 +func_1176() +{ + return level._audio.music.var_116D; +} + +//Function Number: 10 +musx_get_cashed_cue(param_00) +{ + return level._audio.music.cue_cash[param_00]; +} + +//Function Number: 11 +musx_cash_cue(param_00) +{ + level._audio.music.cue_cash[param_00["name"]] = param_00; +} + +//Function Number: 12 +musx_monitor_game_vars() +{ + if(func_1176()) + { + var_00 = 1; + for(;;) + { + wait var_00; + if(func_1176()) + { + var_01 = maps\_audio::func_117A(); + var_02 = maps\_audio::func_117B(var_01,level._audio.music.var_116E); + } + } + } +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_audio_presets_music.gsc b/MW3/Xbox/SP/maps/_audio_presets_music.gsc new file mode 100644 index 0000000..8f1edda --- /dev/null +++ b/MW3/Xbox/SP/maps/_audio_presets_music.gsc @@ -0,0 +1,27 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_audio_presets_music.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 3 + * Decompile Time: 48 ms + * Timestamp: 10/27/2023 2:34:49 AM +*******************************************************************/ + +//Function Number: 1 +audio_presets_music_moods(param_00,param_01) +{ + maps\_audio::aud_print_warning("CALLING MUSIC_MOODS PRESET USING OLD METHOD!"); +} + +//Function Number: 2 +audio_presets_music_cue_groups(param_00,param_01) +{ + maps\_audio::aud_print_warning("CALLING MUSIC_CUE_GROUPS PRESET USING OLD METHOD!"); +} + +//Function Number: 3 +audio_presets_music_cues(param_00,param_01) +{ + maps\_audio::aud_print_warning("CALLING MUSIC_CUES PRESET USING OLD METHOD!"); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_audio_presets_vehicles.gsc b/MW3/Xbox/SP/maps/_audio_presets_vehicles.gsc new file mode 100644 index 0000000..0f046a3 --- /dev/null +++ b/MW3/Xbox/SP/maps/_audio_presets_vehicles.gsc @@ -0,0 +1,339 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_audio_presets_vehicles.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 36 ms + * Timestamp: 10/27/2023 2:33:09 AM +*******************************************************************/ + +//Function Number: 1 +audio_presets_vehicles(param_00,param_01) +{ + switch(param_00) + { + case "nymn_player_hind": + break; + var_41["speed"] + [["hind_move",["pitch","player_hind_move_pitch"],["volume","player_hind_move_volume"]],["hind_hover",["pitch","player_hind_hover_pitch"],["volume","player_hind_hover_volume"]],["updaterate",0.2],["smooth_up",0.3],["smooth_down",0.03],["range",1,40]] + break; + + case "nymn_broad_hind": + break; + var_41["speed"] + [["broad_hind_move",["pitch","player_hind_move_pitch"],["volume","enemy_hind_move_volume"]],["updaterate",0.2],["smooth_up",0.3],["smooth_down",0.03],["range",1,30]] + break; + + case "paris_a_mi17": + break; + var_41["speed"] + [["mi17_engine_high",["pitch","mi17_move_pitch"],["volume","mi17_move_volume"]],["mi17_idle_high",["pitch","mi17_hover_pitch"],["volume","mi17_hover_volume"]],["updaterate",0.2],["smooth_up",0.3],["smooth_down",0.01],["range",1,30]] + break; + + case "dubai_littlebird": + break; + var_41["speed"] + [["dubai_littlebird_engine_high",["pitch","dubai_littlebird_move_pitch"],["volume","dubai_littlebird_move_volume"]],["dubai_littlebird_idle_high",["pitch","dubai_littlebird_hover_pitch"],["volume","dubai_littlebird_hover_volume"]],["updaterate",0.2],["smooth_up",0.3],["smooth_down",0.01],["range",1,30]] + break; + + case "paris_chase_hind": + break; + var_41["speed"] + [["chase_hind_move",["pitch","player_hind_move_pitch"],["volume","enemy_hind_move_volume"]],["updaterate",0.2],["smooth_up",0.3],["smooth_down",0.01],["range",1,30]] + break; + + case "escape_zodiac": + break; + var_41["start_stop"] + [["start","shg_zodiac_plr_rampup",["pitch","zodiac_player_rampup_pitch"],["volume","zodiac_player_rampup_volume"],1],["stop","shg_zodiac_plr_rampdown",["pitch","zodiac_player_rampdown_pitch"],["volume","zodiac_player_rampdown_volume"]],["updaterate",0.1],["offset",-50],["throttle_input","throttle"],["on_threshold",0.3],["off_threshold",-0.3],["smooth_up",0.5],["smooth_down",0.5]] + var_41["speed"] + [["shg_zodiac_plr_motor_slow",["pitch","zodiac_player_slow_pitch"],["volume","zodiac_player_slow_volume"]],["shg_zodiac_plr_motor_med",["pitch","zodiac_player_medium_pitch"],["volume","zodiac_player_medium_volume"]],["shg_zodiac_plr_motor_fast",["pitch","zodiac_player_fast_pitch"],["volume","zodiac_player_fast_volume"]],["offset",-50],["updaterate",0.2],["multiply_by_throttle",1],["smooth_up",0.15],["smooth_down",0.25],["oneshot_duck",0.5],["oneshot_duck_time",1.5],["range",0,45]] + break; + + case "escape_zodiac_water": + break; + var_41["speed"] + [["shg_zodiac_plr_water_idle",["pitch","zodiac_plr_water_idle_pitch"],["volume","zodiac_plr_water_idle_volume"]],["shg_zodiac_plr_water_slow",["pitch","zodiac_plr_water_slow_pitch"],["volume","zodiac_plr_water_slow_volume"]],["shg_zodiac_plr_water_med",["pitch","zodiac_plr_water_med_pitch"],["volume","zodiac_plr_water_med_volume"]],["shg_zodiac_plr_water_fast",["pitch","zodiac_plr_water_fast_pitch"],["volume","zodiac_plr_water_fast_volume"]],["updaterate",0.2],["smooth_up",0.3],["smooth_down",0.3],["range",1,30],["heightmax",25]] + break; + + case "sdv_motor_player": + break; + var_41["start_stop"] + [["start","shg_sdv_plr_startup",["pitch","sdv_plr_rampup_pitch"],["volume","sdv_plr_rampup_volume"]],["stop","shg_sdv_plr_shutdown",["pitch","sdv_plr_rampdown_pitch"],["volume","sdv_plr_rampdown_volume"]],["updaterate",0.1],["throttle_input","throttle"],["on_threshold",0.3],["off_threshold",-0.3],["smooth_up",0.5],["smooth_down",0.5]] + var_41["speed"] + [["shg_sdv_plr_motor_slow",["pitch","sdv_plr_motor_slow_pitch"],["volume","sdv_plr_motor_slow_volume"]],["shg_sdv_plr_motor_med",["pitch","sdv_plr_motor_med_pitch"],["volume","sdv_plr_motor_med_volume"]],["shg_sdv_plr_motor_fast",["pitch","sdv_plr_motor_fast_pitch"],["volume","sdv_plr_motor_fast_volume"]],["updaterate",0.2],["multiply_by_throttle",1],["throttle_input","throttle"],["smooth_up",0.1],["smooth_down",0.3],["range",1,12]] + break; + + case "ugv_motor_player": + break; + var_41["start_stop"] + [["start","null",["pitch","sdv_plr_rampup_pitch"],["volume","sdv_plr_rampup_volume"]],["stop","null",["pitch","sdv_plr_rampdown_pitch"],["volume","sdv_plr_rampdown_volume"]],["updaterate",0.3],["throttle_input","leftstick_abs"],["on_threshold",0.3],["off_threshold",-0.3],["smooth_up",0.2],["smooth_down",0.2]] + var_41["speed"] + [["ugv_plr_motor_slow",["pitch","sdv_plr_motor_slow_pitch"],["volume","sdv_plr_motor_slow_volume"]],["ugv_plr_motor_slow",["pitch","sdv_plr_motor_med_pitch"],["volume","sdv_plr_motor_med_volume"]],["ugv_plr_motor_fast",["pitch","sdv_plr_motor_fast_pitch"],["volume","sdv_plr_motor_fast_volume"]],["updaterate",0.1],["multiply_by_throttle",1],["throttle_input","leftstick_abs"],["smooth_up",0.2],["smooth_down",0.2],["range",1,8]] + break; + + case "ugv_treads_player": + break; + var_41["speed"] + [["ugv_plr_treads_slow",["pitch","sdv_plr_motor_slow_pitch"],["volume","sdv_plr_motor_slow_volume"]],["ugv_plr_treads_slow",["pitch","sdv_plr_motor_med_pitch"],["volume","sdv_plr_motor_med_volume"]],["ugv_plr_treads_fast",["pitch","sdv_plr_motor_fast_pitch"],["volume","sdv_plr_motor_fast_volume"]],["updaterate",0.1],["multiply_by_throttle",1],["throttle_input","leftstick_abs"],["smooth_up",0.1],["smooth_down",0.1],["range",0.5,8]] + break; + + case "ugv_idle_player": + break; + var_41["speed"] + [["ugv_plr_idle",["pitch","so_jeep_idle_pitch"],["volume","so_jeep_idle_volume"]],["updaterate",0.1],["smooth_up",0.2],["smooth_down",0.2],["range",0,25]] + break; + + case "sdv_water_player": + break; + var_41["speed"] + [["shg_sdv_plr_water_slow",["pitch","sdv_plr_water_slow_pitch"],["volume","sdv_plr_water_slow_volume"]],["shg_sdv_plr_water_med",["pitch","sdv_plr_water_med_pitch"],["volume","sdv_plr_water_med_volume"]],["updaterate",0.2],["smooth_up",0.3],["smooth_down",0.1],["range",1,8]] + break; + + case "so_paris_jeep": + break; + var_41["speed"] + [["so_jeep_slow",["pitch","so_jeep_slow_pitch"],["volume","so_jeep_slow_volume"]],["so_jeep_fast",["pitch","so_jeep_medium_pitch"],["volume","so_jeep_medium_volume"]],["so_jeep_idle",["pitch","so_jeep_idle_pitch"],["volume","so_jeep_idle_volume"]],["updaterate",0.1],["smooth_up",0.3],["smooth_down",0.1],["range",0,25]] + break; + } + + return var_41; +} + +//Function Number: 2 +audio_presets_vehicle_maps(param_00,param_01) +{ + switch(param_00) + { + case "so_jeep_idle_pitch": + param_01 = [[0,0.5],[0.02,0.65],[0.1,0.75],[0.2,0.85],[1,1]]; + break; + + case "so_jeep_idle_volume": + param_01 = [[0,1],[0.05,0.9],[0.1,0.85],[0.25,0.45],[0.3,0.15],[0.35,0],[1,0]]; + break; + + case "so_jeep_slow_pitch": + param_01 = [[0,0.38],[0.1,0.4],[0.4,0.45],[0.45,0.5],[0.55,0.55],[0.7,0.6],[1,0.8]]; + break; + + case "so_jeep_slow_volume": + param_01 = [[0,0.01],[0.1,0.5],[0.35,0.75],[0.55,1],[0.7,0.6],[0.8,0.45],[1,0.01]]; + break; + + case "so_jeep_medium_pitch": + param_01 = [[0,0.25],[0.5,0.3],[0.65,0.35],[0.75,0.4],[0.85,0.45],[1,0.5]]; + break; + + case "so_jeep_medium_volume": + param_01 = [[0,0],[0.4,0.2],[0.6,0.6],[0.75,0.9],[1,1]]; + break; + + case "player_hind_move_volume": + param_01 = [[0,0],[0.3,0],[0.6,0.35],[0.7,0.9],[1,1]]; + break; + + case "player_hind_move_pitch": + param_01 = [[0,0.4],[0.5,0.4],[0.75,0.5],[1,0.7]]; + break; + + case "player_hind_hover_volume": + param_01 = [[0,1],[1,1]]; + break; + + case "player_hind_hover_pitch": + param_01 = [[0,0.4],[0.5,0.5],[1,0.7]]; + break; + + case "enemy_hind_move_volume": + param_01 = [[0,1],[1,1]]; + break; + + case "mi17_move_volume": + param_01 = [[0,0.75],[0.3,0.85],[0.6,0.95],[0.7,0.99],[1,1]]; + break; + + case "mi17_move_pitch": + param_01 = [[0,0.4],[0.5,0.6],[1,0.7]]; + break; + + case "mi17_hover_volume": + param_01 = [[0,1],[1,0.75]]; + break; + + case "mi17_hover_pitch": + param_01 = [[0,0.4],[0.5,0.6],[1,0.7]]; + break; + + case "dubai_littlebird_move_volume": + param_01 = [[0,0.75],[0.3,0.85],[0.6,0.95],[0.7,0.99],[1,1]]; + break; + + case "dubai_littlebird_move_pitch": + param_01 = [[0,0.4],[0.5,0.6],[1,0.7]]; + break; + + case "dubai_littlebird_hover_volume": + param_01 = [[0,1],[1,0.75]]; + break; + + case "dubai_littlebird_hover_pitch": + param_01 = [[0,0.4],[0.5,0.6],[1,0.7]]; + break; + + case "zodiac_player_rampup_pitch": + param_01 = [[0,0.45],[0.5,0.5],[1,1]]; + break; + + case "zodiac_player_rampup_volume": + param_01 = [[0,0],[0.25,0.5],[0.85,1],[1,1]]; + break; + + case "zodiac_player_rampdown_pitch": + param_01 = [[0,0.5],[0.25,0.55],[1,0.6]]; + break; + + case "zodiac_player_rampdown_volume": + param_01 = [[0,1],[0.25,0.85],[0.5,0.5],[1,0.25]]; + break; + + case "zodiac_player_idle_pitch": + param_01 = [[0,0.5],[0.02,0.65],[0.1,0.75],[0.2,0.85],[1,1]]; + break; + + case "zodiac_player_idle_volume": + param_01 = [[0,0.75],[0.05,1],[0.1,0.85],[0.25,0.45],[0.3,0.15],[0.35,0],[1,0]]; + break; + + case "zodiac_player_bottom_pitch": + param_01 = [[0,0.35],[0.1,0.4],[0.3,0.5],[0.35,0.6],[0.45,0.65],[0.6,0.7],[1,0.75]]; + break; + + case "zodiac_player_bottom_volume": + param_01 = [[0,0.75],[0.15,0.75],[0.35,1],[0.45,0.35],[0.55,0.25],[0.6,0.2],[0.7,0.15],[1,0]]; + break; + + case "zodiac_player_slow_pitch": + param_01 = [[0,0.2],[0.4,0.35],[0.45,0.45],[0.55,0.5],[0.7,0.6],[1,0.8]]; + break; + + case "zodiac_player_slow_volume": + param_01 = [[0,0.25],[0.1,0.5],[0.35,0.75],[0.55,1],[0.7,0.5],[0.8,0.35],[1,0.2]]; + break; + + case "zodiac_player_medium_pitch": + param_01 = [[0,0.35],[0.5,0.45],[0.65,0.5],[0.75,0.6],[0.85,0.7],[1,0.7]]; + break; + + case "zodiac_player_medium_volume": + param_01 = [[0,0],[0.4,0.2],[0.6,0.5],[0.75,1],[0.8,0.5],[0.9,0.25],[1,0.1]]; + break; + + case "zodiac_player_fast_pitch": + param_01 = [[0,0.45],[0.7,0.45],[0.85,0.5],[0.95,0.55],[1,0.7]]; + break; + + case "zodiac_player_fast_volume": + param_01 = [[0,0],[0.6,0],[0.7,0.25],[0.85,0.5],[0.95,0.5],[1,1]]; + break; + + case "zodiac_plr_water_idle_pitch": + param_01 = [[0,0.5],[1,0.5]]; + break; + + case "zodiac_plr_water_idle_volume": + param_01 = [[0,1],[0.1,0.5],[0.15,0.25],[0.2,0.15],[0.35,0],[1,0]]; + break; + + case "zodiac_plr_water_botm_pitch": + param_01 = [[0,0.45],[0.1,0.5],[0.3,0.5],[1,0.5]]; + break; + + case "zodiac_plr_water_botm_volume": + param_01 = [[0,0],[0.15,0.25],[0.35,1],[0.45,0.35],[0.55,0.25],[0.6,0.2],[0.7,0.15],[1,0]]; + break; + + case "zodiac_plr_water_slow_pitch": + param_01 = [[0,0.45],[0.1,0.5],[0.3,0.5],[1,0.5]]; + break; + + case "zodiac_plr_water_slow_volume": + param_01 = [[0,0],[0.1,0.25],[0.35,0.75],[0.55,1],[0.7,0.5],[0.8,0.35],[1,0.2]]; + break; + + case "zodiac_plr_water_med_pitch": + param_01 = [[0,0.45],[0.1,0.5],[0.3,0.5],[1,0.5]]; + break; + + case "zodiac_plr_water_med_volume": + param_01 = [[0,0],[0.4,0.2],[0.6,0.5],[0.75,1],[0.8,0.5],[0.9,0.25],[1,0.1]]; + break; + + case "zodiac_plr_water_fast_pitch": + param_01 = [[0,0.45],[0.1,0.5],[0.3,0.5],[1,0.5]]; + break; + + case "zodiac_plr_water_fast_volume": + param_01 = [[0,0],[0.6,0],[0.7,0.5],[0.85,1],[1,1]]; + break; + + case "sdv_plr_rampup_pitch": + param_01 = [[0,0.5],[0.5,0.5],[1,0.5]]; + break; + + case "sdv_plr_rampup_volume": + param_01 = [[0,1],[1,1]]; + break; + + case "sdv_plr_rampdown_pitch": + param_01 = [[0,0.5],[0.5,0.5],[1,0.5]]; + break; + + case "sdv_plr_rampdown_volume": + param_01 = [[0,1],[1,1]]; + break; + + case "sdv_plr_motor_slow_pitch": + param_01 = [[0,0.25],[0.15,0.4],[0.3,0.5],[0.6,0.55],[0.75,0.65],[1,0.75]]; + break; + + case "sdv_plr_motor_slow_volume": + param_01 = [[0,0],[0.05,0.5],[0.15,0.75],[0.25,1],[0.35,0.5],[0.45,0.25],[0.55,0.2],[1,0]]; + break; + + case "sdv_plr_motor_med_pitch": + param_01 = [[0,0.5],[0.6,0.5],[0.75,0.65],[1,0.75]]; + break; + + case "sdv_plr_motor_med_volume": + param_01 = [[0,0],[0.25,0.1],[0.35,0.5],[0.45,1],[0.65,1],[0.75,0.75],[0.95,0.25],[1,0.1]]; + break; + + case "sdv_plr_motor_fast_pitch": + param_01 = [[0,0.4],[0.6,0.4],[0.7,0.45],[0.85,0.5],[1,0.5]]; + break; + + case "sdv_plr_motor_fast_volume": + param_01 = [[0,0],[0.6,0.35],[0.7,0.55],[0.85,0.85],[1,1]]; + break; + + case "sdv_plr_water_slow_pitch": + param_01 = [[0,0.45],[0.1,0.5],[0.3,0.5],[1,0.5]]; + break; + + case "sdv_plr_water_slow_volume": + param_01 = [[0,0],[0.1,0.25],[0.45,0.75],[0.65,1],[0.7,0.5],[0.8,0.35],[1,0.2]]; + break; + + case "sdv_plr_water_med_pitch": + param_01 = [[0,0.45],[0.1,0.5],[0.3,0.5],[0.8,0.5],[1,0.55]]; + break; + + case "sdv_plr_water_med_volume": + param_01 = [[0,0],[0.5,0],[0.75,0],[0.85,0.25],[0.95,0.5],[1,1]]; + break; + } + + return param_01; +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_audio_reverb.gsc b/MW3/Xbox/SP/maps/_audio_reverb.gsc new file mode 100644 index 0000000..c2b6500 --- /dev/null +++ b/MW3/Xbox/SP/maps/_audio_reverb.gsc @@ -0,0 +1,303 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_audio_reverb.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 15 + * Decompile Time: 251 ms + * Timestamp: 10/27/2023 2:33:05 AM +*******************************************************************/ + +//Function Number: 1 +rvb_init(param_00) +{ + if(!isdefined(level._audio)) + { + level._audio = spawnstruct(); + } + + level._audio.reverb = spawnstruct(); + level._audio.reverb.use_string_table_presets = 0; + level._audio.reverb.use_iw_presets = 0; + level._audio.reverb.current_reverb = ""; +} + +//Function Number: 2 +rvb_use_string_table() +{ + level._audio.reverb.use_string_table_presets = 1; + level._audio.reverb.use_iw_presets = 0; +} + +//Function Number: 3 +rvb_use_iw_presets() +{ + level._audio.reverb.use_iw_presets = 1; + level._audio.reverb.use_string_table_presets = 0; +} + +//Function Number: 4 +rvb_set_dry_level(param_00,param_01) +{ + param_01 = clamp(param_01,0,1); + param_00.drylevel = param_01; +} + +//Function Number: 5 +rvb_set_wet_level(param_00,param_01) +{ + param_01 = clamp(param_01,0,1); + param_00.wetlevel = param_01; +} + +//Function Number: 6 +rvb_apply_reverb(param_00,param_01) +{ + if(!isdefined(level._audio.reverb.applied_reverb) || level._audio.reverb.applied_reverb != param_00) + { + level._audio.reverb.applied_reverb = param_00; + var_02 = undefined; + if(isdefined(param_01)) + { + var_02 = param_01; + } + else + { + var_02 = param_00.fadetime; + } + + level.player setreverb(param_00.priority,param_00.roomtype,param_00.drylevel,param_00.wetlevel,var_02); + } +} + +//Function Number: 7 +rvb_start_preset(param_00,param_01) +{ + if(level.player maps\_utility::ent_flag("player_has_red_flashing_overlay")) + { + if(isdefined(param_00) && param_00 != "none") + { + var_02 = func_103A(param_00); + if(!isdefined(var_02)) + { + maps\_audio::aud_print_warning("Failed to load reverb preset: " + param_00); + return; + } + + if(param_00 != "deathsdoor") + { + rvbx_store_current_reverb_track(param_00,var_02); + level._audio.deathsdoor.reverb = param_00; + } + } + else + { + rvbx_store_current_reverb_track("none",undefined); + level._audio.deathsdoor.reverb = "none"; + } + + return; + } + + if(((isdefined(param_00) && param_00 == "none") || !isdefined(param_00)) && isdefined(level._audio.current_reverb)) + { + level.player deactivatereverb("snd_enveffectsprio_level",1); + level._audio.current_reverb = undefined; + level._audio.reverb.current_reverb = ""; + return; + } + else if(!isdefined(param_00) || isdefined(param_00) && param_00 == "none") + { + return; + } + + var_02 = func_103A(param_00); + if(!isdefined(var_02)) + { + maps\_audio::aud_print_warning("Failed to load reverb preset: " + param_00); + return; + } + + level._audio.current_reverb = param_00; + if(param_00 != "deathsdoor") + { + rvbx_store_current_reverb_track(param_00,var_02); + } + + if(level._audio.reverb.current_reverb != param_00) + { + level._audio.reverb.current_reverb = param_00; + rvb_apply_reverb(var_02,param_01); + } +} + +//Function Number: 8 +rvbx_store_current_reverb_track(param_00,param_01) +{ + if(param_00 != "deathsdoor") + { + level.var_1031 = param_00; + if(param_00 == "none" && !isdefined(level.ambient_reverb["none"])) + { + level.ambient_reverb["none"] = 1; + return; + } + + if(!isdefined(level.ambient_reverb[param_00])) + { + level.ambient_reverb[param_00] = []; + level.ambient_reverb[param_00]["priority"] = "snd_enveffectsprio_level"; + level.ambient_reverb[param_00]["roomtype"] = param_01.roomtype; + level.ambient_reverb[param_00]["drylevel"] = param_01.drylevel; + level.ambient_reverb[param_00]["wetlevel"] = param_01.wetlevel; + level.ambient_reverb[param_00]["fadetime"] = param_01.fadetime; + return; + } + } +} + +//Function Number: 9 +rvb_deactive_reverb() +{ + level.var_1031 = ""; + level.player deactivatereverb("snd_enveffectsprio_level",2); + level._audio.current_reverb = undefined; + level._audio.reverb.current_reverb = ""; +} + +//Function Number: 10 +rvb_get_applied_reverb() +{ + var_00 = undefined; + if(isdefined(level._audio.reverb.applied_reverb)) + { + var_00 = level._audio.reverb.applied_reverb; + } + + return var_00; +} + +//Function Number: 11 +rvbx_get_preset_from_string_table(param_00,param_01) +{ + var_02 = maps\_audio::get_reverb_stringtable(); + var_03 = "soundtables/common_reverb.csv"; + var_04 = []; + if(param_01) + { + var_04 = rvbx_get_reverb_preset_from_stringtable_internal(var_02,param_00); + } + + if(!isdefined(var_04) || var_04.size == 0) + { + var_04 = rvbx_get_reverb_preset_from_stringtable_internal(var_03,param_00); + } + + if(!isdefined(var_04) || var_04.size == 0) + { + return; + } + + return var_04; +} + +//Function Number: 12 +rvbx_get_reverb_preset_from_stringtable_internal(param_00,param_01) +{ + var_02 = []; + var_03 = ""; + var_04 = ""; + var_05 = 6; + for(var_06 = 1;var_06 < var_05;var_06++) + { + var_03 = tablelookup(param_00,0,"reverb_names",var_06); + var_04 = tablelookup(param_00,0,param_01,var_06); + if(var_03 != "comments" && var_04 != "") + { + if(var_03 != "roomtype") + { + var_02[var_03] = float(var_04); + continue; + } + + var_02[var_03] = var_04; + } + } + + return var_02; +} + +//Function Number: 13 +rvbx_apply_inital_reverb() +{ + while(!isdefined(level.player)) + { + wait 0.5; + } + + rvb_apply_reverb(level._audio.reverb.var_1039); +} + +//Function Number: 14 +func_103A(param_00) +{ + if(!isdefined(level._audio.reverb.preset_cache)) + { + level._audio.reverb.preset_cache = []; + } + + var_01 = rvbx_create(); + var_02 = []; + if(isdefined(level._audio.var_103C)) + { + var_02 = [[ level._audio.var_103C ]](param_00,var_02); + } + else if(isdefined(level._audio.reverb.preset_cache[param_00])) + { + var_02 = level._audio.reverb.preset_cache[param_00]; + } + else if(level._audio.reverb.use_string_table_presets) + { + var_02 = rvbx_get_preset_from_string_table(param_00,1); + if(!isdefined(var_02)) + { + return; + } + + level._audio.reverb.preset_cache[param_00] = var_02; + } + else + { + var_02 = rvbx_get_preset_from_string_table(param_00,0); + if(!isdefined(var_02) || var_02.size == 0) + { + var_02 = maps\_audio::audio_presets_reverb(param_00,var_02); + } + + if(!isdefined(var_02)) + { + return; + } + + level._audio.reverb.preset_cache[param_00] = var_02; + } + + var_01.name = param_00; + var_01.roomtype = var_02["roomtype"]; + var_01.drylevel = var_02["drylevel"]; + var_01.wetlevel = var_02["wetlevel"]; + var_01.fadetime = var_02["fadetime"]; + return var_01; +} + +//Function Number: 15 +rvbx_create() +{ + var_00 = spawnstruct(); + var_00.roomtype = "generic"; + var_00.drylevel = 1; + var_00.wetlevel = 0.5; + var_00.fadetime = 0; + var_00.priority = "snd_enveffectsprio_level"; + return var_00; +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_audio_stream_manager.gsc b/MW3/Xbox/SP/maps/_audio_stream_manager.gsc new file mode 100644 index 0000000..19a2aa5 --- /dev/null +++ b/MW3/Xbox/SP/maps/_audio_stream_manager.gsc @@ -0,0 +1,217 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_audio_stream_manager.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 13 + * Decompile Time: 194 ms + * Timestamp: 10/27/2023 2:32:58 AM +*******************************************************************/ + +//Function Number: 1 +sm_init() +{ + level._audio.stream = spawnstruct(); + level._audio.stream.music = spawnstruct(); + level._audio.stream.music.var_1042 = smx_create_struct(); + level._audio.stream.music.prev = smx_create_struct(); + level._audio.stream.var_1044 = spawnstruct(); + level._audio.stream.var_1044.var_1042 = smx_create_struct(); + level._audio.stream.var_1044.prev = smx_create_struct(); +} + +//Function Number: 2 +func_1045(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = 1; + if(isdefined(param_01)) + { + var_05 = max(param_01,0); + } + + var_06 = 1; + if(isdefined(param_04)) + { + var_06 = max(param_04,0); + } + + smx_set_values_for_struct(level._audio.stream.var_1044.prev,level._audio.stream.var_1044.var_1042.name,level._audio.stream.var_1044.var_1042.vol,level._audio.stream.var_1044.var_1042.fade); + smx_set_values_for_struct(level._audio.stream.var_1044.var_1042,param_00,var_06,var_05); + ambientplay(param_00,var_05,var_06); +} + +//Function Number: 3 +func_1048(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = 1; + if(isdefined(param_01)) + { + var_05 = max(param_01,0); + } + + var_06 = 1; + if(isdefined(param_02)) + { + var_06 = param_02; + } + + var_07 = 1; + if(isdefined(param_03)) + { + var_07 = max(param_03,0); + } + + smx_set_values_for_struct(level._audio.stream.music.prev,level._audio.stream.music.var_1042.name,level._audio.stream.music.var_1042.vol,level._audio.stream.music.var_1042.fade); + smx_set_values_for_struct(level._audio.stream.music.var_1042,param_00,var_07,var_05); + if(isdefined(param_04)) + { + musicstop(var_06,param_04); + musicplay(param_00,var_05,var_07,0); + return; + } + + musicplay(param_00,var_05,var_07); +} + +//Function Number: 4 +sm_stop_ambient_alias(param_00,param_01) +{ + if(param_00 != "none") + { + var_02 = 1; + if(isdefined(param_01)) + { + var_02 = max(param_01,0); + } + + if(level._audio.stream.var_1044.var_1042.name == param_00) + { + level._audio.stream.var_1044.var_1042 = level._audio.stream.var_1044.prev; + smx_clear_struct(level._audio.stream.var_1044.prev); + } + else if(level._audio.stream.var_1044.prev.name == param_00) + { + smx_clear_struct(level._audio.stream.var_1044.prev); + } + + ambientstop(var_02,param_00); + } +} + +//Function Number: 5 +sm_stop_music_alias(param_00,param_01) +{ + var_02 = 1; + if(isdefined(param_01)) + { + var_02 = max(param_01,0); + } + + if(level._audio.stream.music.var_1042.name == param_00) + { + level._audio.stream.music.var_1042 = level._audio.stream.music.prev; + smx_clear_struct(level._audio.stream.music.prev); + } + else if(level._audio.stream.var_1044.prev.name == param_00) + { + smx_clear_struct(level._audio.stream.music.prev); + } + + musicstop(var_02,param_00); +} + +//Function Number: 6 +sm_stop_ambience(param_00) +{ + var_01 = 1; + if(isdefined(param_00)) + { + var_01 = param_00; + } + + ambientstop(var_01); +} + +//Function Number: 7 +sm_stop_music(param_00) +{ + var_01 = 1; + if(isdefined(param_00)) + { + var_01 = param_00; + } + + smx_clear_struct(level._audio.stream.music.var_1042); + smx_clear_struct(level._audio.stream.music.prev); + musicstop(var_01); +} + +//Function Number: 8 +sm_mix_ambience(param_00) +{ + var_01 = 0.009; + if(param_00.size == 1) + { + smx_set_values_for_struct(level._audio.stream.var_1044.var_1042,param_00[0].alias,param_00[0].vol,param_00[0].fade); + } + else if(param_00.size == 2) + { + smx_set_values_for_struct(level._audio.stream.var_1044.prev,param_00[0].alias,param_00[0].vol,param_00[0].fade); + smx_set_values_for_struct(level._audio.stream.var_1044.var_1042,param_00[1].alias,param_00[1].vol,param_00[1].fade); + } + + for(var_06 = 0;var_06 < param_00.size;var_06++) + { + var_07 = param_00[var_06].alias; + var_08 = max(param_00[var_06].vol,0); + var_09 = clamp(param_00[var_06].fade,0,1); + if(var_07 != "none") + { + if(var_08 < var_01) + { + ambientstop(var_09,var_07); + continue; + } + + ambientplay(var_07,var_09,var_08,0); + } + } +} + +//Function Number: 9 +sm_get_current_ambience_name() +{ + return level._audio.stream.var_1044.var_1042.name; +} + +//Function Number: 10 +sm_get_current_music_name() +{ + return level._audio.stream.music.var_1042.name; +} + +//Function Number: 11 +smx_set_values_for_struct(param_00,param_01,param_02,param_03) +{ + param_00.name = param_01; + param_00.vol = param_02; + param_00.fade = param_03; +} + +//Function Number: 12 +smx_create_struct() +{ + var_00 = spawnstruct(); + var_00.name = ""; + var_00.vol = 0; + var_00.fade = 0; + return var_00; +} + +//Function Number: 13 +smx_clear_struct(param_00) +{ + param_00.name = ""; + param_00.vol = 0; + param_00.fade = 0; +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_audio_vehicles.gsc b/MW3/Xbox/SP/maps/_audio_vehicles.gsc new file mode 100644 index 0000000..a582817 --- /dev/null +++ b/MW3/Xbox/SP/maps/_audio_vehicles.gsc @@ -0,0 +1,1468 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_audio_vehicles.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 50 + * Decompile Time: 1159 ms + * Timestamp: 10/27/2023 2:33:24 AM +*******************************************************************/ + +//Function Number: 1 +vm_init() +{ + if(!isdefined(level._audio)) + { + level._audio = spawnstruct(); + } + + if(!isdefined(level._audio.var_118A)) + { + level._audio.var_118A = spawnstruct(); + level._audio.var_118A.minrate = 0.1; + level._audio.var_118A.defrate = 0.5; + level._audio.var_118A.defsmooth = 0.1; + level._audio.var_118A.minpitch = 0.5; + level._audio.var_118A.maxpitch = 1.5; + level._audio.var_118A.fadein_time = 2; + level._audio.var_118A.callbacks = []; + level._audio.var_118A.print_speed = 0; + level._audio.var_118A.var_1192 = 0; + level._audio.var_118A.print_yaw = 0; + level._audio.var_118A.print_roll = 0; + level._audio.var_118A.print_altitude = 0; + level._audio.var_118A.var_1196 = 0; + level._audio.var_118A.presets = []; + level._audio.var_118A.maps = []; + level._audio.var_118A.instances = []; + level._audio.var_118A.ducked_instances = []; + level._audio.var_118A.var_119B = []; + level._audio.var_118A.duck_stops = []; + } +} + +//Function Number: 2 +vm_register_custom_callback(param_00,param_01) +{ + level._audio.var_118A.callbacks[param_00] = param_01; +} + +//Function Number: 3 +vm_start_preset(param_00,param_01,param_02,param_03,param_04,param_05) +{ + wait 0.25; + if(isdefined(level._audio.var_118A.instances[param_00])) + { + vm_stop_preset_instance(param_00); + } + + if(isdefined(param_04)) + { + thread maps\_audio::aud_play_linked_sound(param_04,param_02,undefined,undefined,param_05); + } + + level._audio.var_118A.instances[param_00] = []; + level._audio.var_118A.instances[param_00]["entity"] = param_02; + if(!isdefined(level._audio.var_118A.presets[param_01])) + { + var_06 = []; + var_06 = maps\_audio_presets_vehicles::audio_presets_vehicles(param_01,var_06); + level._audio.var_118A.presets[param_01] = var_06; + } + + level._audio.var_118A.instances[param_00]["entity"] = param_02; + foreach(var_13, var_08 in level._audio.var_118A.presets[param_01]) + { + var_09 = spawnstruct(); + var_09.instance_name = param_00; + var_09.vehicle = param_02; + switch(var_13) + { + case "tilt": + var_09.type = "tilt"; + var_09.callback = ::func_11E5; + var_09.min = -45; + var_09.max = 45; + break; + + case "yaw": + var_09.type = "yaw"; + var_09.callback = ::vmx_get_yaw; + var_09.min = 0; + var_09.max = 360; + break; + + case "roll": + var_09.type = "roll"; + var_09.callback = ::vmx_get_roll; + var_09.min = -45; + var_09.max = 45; + break; + + case "speed": + var_09.type = "speed"; + var_09.callback = ::func_11E6; + var_09.min = 0; + var_09.max = 100; + break; + + case "altitude": + var_09.type = "altitude"; + var_09.callback = ::vmx_get_altitude; + var_09.min = 0; + var_09.max = 100; + break; + + case "start_stop": + var_09.type = "start_stop"; + var_09.callback = ::vmx_get_throttle; + var_09.min = 0; + var_09.max = 1; + break; + + default: + break; + } + + var_09.smoothness = level._audio.var_118A.defsmooth; + var_09.smooth_up = undefined; + var_09.smooth_down = undefined; + var_09.var_11A6 = level._audio.var_118A.defrate; + var_09.alias_data = []; + var_09.var_11A8 = 0.5; + if(isdefined(param_03)) + { + var_09.var_11A8 = param_03; + } + + foreach(var_0B in var_08) + { + switch(var_0B[0]) + { + case "updaterate": + var_09.var_11A6 = var_0B[1]; + break; + + case "smoothness": + var_09.smoothness = var_0B[1]; + break; + + case "smooth_up": + var_09.smooth_up = var_0B[1]; + break; + + case "smooth_down": + var_09.smooth_down = var_0B[1]; + break; + + case "heightmax": + var_09.heightmax = var_0B[1]; + break; + + case "callback": + var_0C = var_0B[1]; + var_09.custom_callback = level._audio.var_118A.callbacks[var_0C]; + break; + + case "range": + var_09.min = min(var_0B[1],var_0B[2]); + var_09.max = max(var_0B[1],var_0B[2]); + break; + + case "multiply_by_throttle": + var_09.multiply_by_throttle = 1; + break; + + case "multiply_by_leftstick": + var_09.multiply_by_leftstick = 1; + break; + + case "start": + var_09.start_alias_data = spawnstruct(); + var_09.start_alias_data.name = var_0B[1]; + for(var_0D = 2;var_0D < var_0B.size;var_0D++) + { + if(isarray(var_0B[var_0D])) + { + var_0E = var_0B[var_0D][0]; + var_0F = var_0B[var_0D][1]; + if(var_0E == "pitch") + { + var_09.start_alias_data.pitch_map_name = var_0F; + } + else if(var_0E == "volume") + { + var_09.start_alias_data.volume_map_name = var_0F; + } + + if(!isdefined(level._audio.var_118A.maps[var_0F])) + { + var_10 = []; + var_10 = maps\_audio_presets_vehicles::audio_presets_vehicle_maps(var_0F,var_10); + level._audio.var_118A.maps[var_0F] = var_10; + } + + continue; + } + + level._audio.var_118A.var_119B[param_00] = var_0B[var_0D]; + } + break; + + case "stop": + var_09.stop_alias_data = spawnstruct(); + var_09.stop_alias_data.name = var_0B[1]; + for(var_0D = 2;var_0D < var_0B.size;var_0D++) + { + if(isarray(var_0B[var_0D])) + { + var_0E = var_0B[var_0D][0]; + var_0F = var_0B[var_0D][1]; + if(var_0E == "pitch") + { + var_09.stop_alias_data.pitch_map_name = var_0F; + } + else if(var_0E == "volume") + { + var_09.stop_alias_data.volume_map_name = var_0F; + } + + if(!isdefined(level._audio.var_118A.maps[var_0F])) + { + var_10 = []; + var_10 = maps\_audio_presets_vehicles::audio_presets_vehicle_maps(var_0F,var_10); + level._audio.var_118A.maps[var_0F] = var_10; + } + + continue; + } + + level._audio.var_118A.duck_stops[param_00] = var_0B[var_0D]; + } + break; + + case "throttle_input": + var_09.throttle_input = var_0B[1]; + break; + + case "on_threshold": + var_09.on_threshold = var_0B[1]; + break; + + case "off_threshold": + var_09.off_threshold = var_0B[1]; + break; + + case "oneshot_duck": + var_09.duck_amount = var_0B[1]; + break; + + case "oneshot_duck_time": + var_09.duck_time = var_0B[1]; + break; + + case "offset": + var_09.offset = var_0B[1]; + break; + + default: + var_11 = spawnstruct(); + var_11.alias_name = var_0B[0]; + for(var_0D = 1;var_0D < var_0B.size;var_0D++) + { + var_0F = var_0B[var_0D][1]; + if(var_0B[var_0D][0] == "pitch") + { + var_11.pitch_map_name = var_0F; + } + else + { + var_11.vol_map_name = var_0F; + } + + if(!isdefined(level._audio.var_118A.maps[var_0F])) + { + var_10 = []; + var_10 = maps\_audio_presets_vehicles::audio_presets_vehicle_maps(var_0F,var_10); + level._audio.var_118A.maps[var_0F] = var_10; + } + } + + var_09.alias_data[var_09.alias_data.size] = var_11; + break; + } + } + + if(var_09.type == "start_stop") + { + thread vmx_do_start_stop_callback(var_09); + continue; + } + + thread vmx_callback(var_09); + } +} + +//Function Number: 4 +vm_stop(param_00) +{ + level notify("aud_veh_stop"); + var_01 = 1; + if(isdefined(param_00)) + { + var_01 = max(0.1,param_00); + } + + foreach(var_03 in level._audio.var_118A.playing_presets) + { + if(var_03.size > 0) + { + foreach(var_05 in var_03) + { + thread maps\_audio::aud_fade_out_and_delete(var_05,var_01); + } + } + } + + level._audio.var_118A.playing_presets = []; +} + +//Function Number: 5 +vm_stop_preset_instance(param_00,param_01) +{ + var_02 = 1; + if(isdefined(param_01)) + { + var_02 = max(0.01,param_01); + } + + if(isdefined(level._audio.var_118A.instances[param_00])) + { + level notify("aud_veh_stop_" + param_00); + if(level._audio.var_118A.instances[param_00].size > 0) + { + foreach(var_05, var_04 in level._audio.var_118A.instances[param_00]) + { + if(var_05 != "entity" && var_05 != "speed" && var_05 != "throttle") + { + var_04 scalevolume(0,var_02); + } + } + } + + wait var_02 + 0.05; + if(level._audio.var_118A.instances[param_00].size > 0) + { + foreach(var_05, var_04 in level._audio.var_118A.instances[param_00]) + { + if(var_05 != "entity" && var_05 != "speed" && var_05 != "throttle") + { + var_04 delete(); + } + } + } + + level._audio.var_118A.instances[param_00] = undefined; + } +} + +//Function Number: 6 +vm_set_range(param_00,param_01,param_02) +{ + if(!isdefined(self.aud_overrides)) + { + self.aud_overrides = []; + } + + self.aud_overrides[param_00] = spawnstruct(); + self.aud_overrides[param_00].min_range = param_01; + self.aud_overrides[param_00].max_range = param_02; +} + +//Function Number: 7 +vmx_monitor_oneshot_ent() +{ + self.sound_playing = 1; + self waittill("sounddone"); + self.sound_playing = 0; +} + +//Function Number: 8 +func_11C3(param_00) +{ + level common_scripts\utility::waittill_any("aud_veh_stop","aud_veh_stop_" + param_00); + if(self.sound_playing) + { + self scalevolume(0,0.1); + wait 0.1; + self stopsounds(); + wait 0.05; + } + + self delete(); +} + +//Function Number: 9 +vmx_stop_sound(param_00) +{ + self scalevolume(0,0.05); + wait 0.05; + self stopsounds(); + wait 0.05; + self.sound_playing = 0; +} + +//Function Number: 10 +func_11C5(param_00) +{ + if(self.sound_playing) + { + vmx_stop_sound(0); + } + + self playsound(param_00,"sounddone"); + thread vmx_monitor_oneshot_ent(); +} + +//Function Number: 11 +vmx_init_oneshot_ents(param_00) +{ + if(!isdefined(level._audio.var_118A.start_ents)) + { + level._audio.var_118A.start_ents = []; + } + + if(!isdefined(level._audio.var_118A.stop_ents)) + { + level._audio.var_118A.stop_ents = []; + } + + if(!isdefined(level._audio.var_118A.start_ent_count)) + { + level._audio.var_118A.start_ent_count = []; + } + + if(!isdefined(level._audio.var_118A.var_11CA)) + { + level._audio.var_118A.var_11CA = []; + } + + level._audio.var_118A.start_ents[param_00] = []; + level._audio.var_118A.start_ent_count[param_00] = 0; + level._audio.var_118A.stop_ents[param_00] = []; + level._audio.var_118A.var_11CA[param_00] = 0; +} + +//Function Number: 12 +func_11CB(param_00) +{ + var_01 = 0; + if(isdefined(level._audio.var_118A.var_119B[param_00]) && level._audio.var_118A.var_119B[param_00] && func_11CC(param_00)) + { + var_01 = 1; + } + + if(isdefined(level._audio.var_118A.duck_stops[param_00]) && level._audio.var_118A.duck_stops[param_00] && vmx_get_stop_sound_playing(param_00)) + { + var_01 = 1; + } + + return var_01; +} + +//Function Number: 13 +func_11CC(param_00) +{ + if(level._audio.var_118A.start_ents[param_00].size > 0) + { + return 1; + } + + return 0; +} + +//Function Number: 14 +vmx_get_stop_sound_playing(param_00) +{ + if(level._audio.var_118A.stop_ents[param_00].size > 0) + { + return 1; + } + + return 0; +} + +//Function Number: 15 +vmx_scale_start_sound_pitch(param_00,param_01,param_02) +{ + foreach(var_04 in level._audio.var_118A.start_ents[param_02]) + { + if(isdefined(var_04)) + { + var_04 setpitch(param_00,param_01); + } + } +} + +//Function Number: 16 +vmx_scale_stop_sound_pitch(param_00,param_01,param_02) +{ + foreach(var_04 in level._audio.var_118A.stop_ents[param_02]) + { + if(isdefined(var_04)) + { + var_04 setpitch(param_00,param_01); + } + } +} + +//Function Number: 17 +vmx_scale_start_sound_volume(param_00,param_01,param_02) +{ + foreach(var_04 in level._audio.var_118A.start_ents[param_02]) + { + if(isdefined(var_04)) + { + var_04 scalevolume(param_00,param_01); + } + } +} + +//Function Number: 18 +vmx_scale_stop_sound_volume(param_00,param_01,param_02) +{ + foreach(var_04 in level._audio.var_118A.stop_ents[param_02]) + { + if(isdefined(var_04)) + { + var_04 scalevolume(param_00,param_01); + } + } +} + +//Function Number: 19 +func_11D2(param_00,param_01,param_02,param_03) +{ + var_04 = 0; + if(isdefined(param_03)) + { + var_04 = param_03; + } + + var_05 = spawn("script_origin",param_01.origin); + var_05 linkto(param_01,"tag_origin",(var_04,0,0),(0,0,0)); + var_05.ref = level._audio.var_118A.start_ent_count[param_02]; + var_05 playsound(param_00,"sounddone"); + var_05 thread vmx_monitor_start_ent(param_02); + level._audio.var_118A.start_ents[param_02][var_05.ref] = var_05; + level._audio.var_118A.start_ent_count[param_02]++; +} + +//Function Number: 20 +vmx_play_stop_sound(param_00,param_01,param_02,param_03) +{ + var_04 = 0; + if(isdefined(param_03)) + { + var_04 = param_03; + } + + var_05 = spawn("script_origin",param_01.origin); + var_05 linkto(param_01,"tag_origin",(var_04,0,0),(0,0,0)); + var_05.ref = level._audio.var_118A.var_11CA[param_02]; + var_05 playsound(param_00,"sounddone"); + level._audio.var_118A.stop_ents[param_02][var_05.ref] = var_05; + level._audio.var_118A.var_11CA[param_02]++; + wait 0.05; + var_05 thread vmx_monitor_stop_ent(param_02); +} + +//Function Number: 21 +vmx_monitor_start_ent(param_00) +{ + self endon("kill"); + self waittill("sounddone"); + level._audio.var_118A.start_ents[param_00][self.ref] = undefined; + if(isdefined(level._audio.var_118A.ducked_instances[param_00])) + { + level._audio.var_118A.ducked_instances[param_00] = undefined; + } + + self delete(); +} + +//Function Number: 22 +vmx_monitor_stop_ent(param_00) +{ + self endon("kill"); + self waittill("sounddone"); + level._audio.var_118A.stop_ents[param_00][self.ref] = undefined; + if(isdefined(level._audio.var_118A.ducked_instances[param_00])) + { + level._audio.var_118A.ducked_instances[param_00] = undefined; + } + + self delete(); +} + +//Function Number: 23 +vmx_stop_stop_ent(param_00,param_01,param_02) +{ + if(isdefined(level._audio.var_118A.ducked_instances[param_02])) + { + level._audio.var_118A.ducked_instances[param_02] = undefined; + } + + var_03 = 0.1; + if(isdefined(param_01)) + { + var_03 = param_01; + } + + level._audio.var_118A.stop_ents[param_02][param_00.ref] = undefined; + param_00 scalevolume(0,var_03 + 0.05); + param_00 notify("kill"); + wait var_03 + 0.05; + param_00 stopsounds(); + wait 0.05; + param_00 delete(); +} + +//Function Number: 24 +vmx_stop_start_ent(param_00,param_01,param_02) +{ + if(isdefined(level._audio.var_118A.ducked_instances[param_02])) + { + level._audio.var_118A.ducked_instances[param_02] = undefined; + } + + var_03 = 0.1; + if(isdefined(param_01)) + { + var_03 = param_01; + } + + level._audio.var_118A.start_ents[param_02][param_00.ref] = undefined; + param_00 scalevolume(0,var_03 + 0.05); + param_00 notify("kill"); + wait var_03 + 0.05; + param_00 stopsounds(); + wait 0.05; + param_00 delete(); +} + +//Function Number: 25 +vmx_do_start_stop_callback(param_00) +{ + var_01 = param_00.instance_name; + level endon("aud_veh_stop"); + level endon("aud_veh_stop_" + var_01); + level._audio.var_118A.instances[var_01]["entity"] endon("death"); + var_02 = 0; + var_03 = 0; + var_04 = -1; + var_05 = "off"; + var_06 = param_00.smoothness; + var_07 = param_00.smooth_up; + var_08 = param_00.smooth_down; + var_09 = param_00.min; + var_0A = param_00.max; + var_0B = 0; + vmx_init_oneshot_ents(var_01); + var_0C = gettime(); + for(;;) + { + var_0D = [[ param_00.callback ]](param_00); + var_0D = var_0D - param_00.min / param_00.max - param_00.min; + var_0D = clamp(var_0D,0,1); + var_0B = var_0D; + if(isdefined(var_07) && var_0D > var_02) + { + var_02 = var_02 + var_07 * var_0D - var_02; + } + else if(isdefined(var_08) && var_0D <= var_02) + { + var_02 = var_02 + var_08 * var_0D - var_02; + } + else + { + var_02 = var_02 + var_06 * var_0D - var_02; + } + + var_0E = var_02 - var_03; + var_03 = var_02; + var_0F = gettime(); + var_10 = var_0F - var_0C; + var_11 = 0; + var_12 = 0; + if((var_0E >= param_00.on_threshold || var_0B >= 0.99) && var_05 == "off" && var_10 > 200) + { + var_0C = var_0F; + var_05 = "on"; + var_11 = 1; + wait 0.05; + var_13 = level._audio.var_118A.instances[var_01]["entity"]; + thread func_11D2(param_00.start_alias_data.name,var_13,param_00.instance_name,param_00.offset); + if(isdefined(level._audio.var_118A.stop_ents[param_00.instance_name])) + { + var_14 = level._audio.var_118A.stop_ents[param_00.instance_name]; + foreach(var_13 in var_14) + { + thread vmx_stop_stop_ent(var_13,undefined,param_00.instance_name); + } + } + } + else if((var_0E <= param_00.off_threshold || var_0B <= 0.01) && var_05 == "on" && var_10 > 200) + { + var_0C = var_0F; + var_05 = "off"; + var_12 = 1; + wait 0.05; + var_13 = level._audio.var_118A.instances[var_01]["entity"]; + thread vmx_play_stop_sound(param_00.stop_alias_data.name,var_13,param_00.instance_name,param_00.offset); + if(isdefined(level._audio.var_118A.start_ents[param_00.instance_name])) + { + var_17 = level._audio.var_118A.start_ents[param_00.instance_name]; + foreach(var_13 in var_17) + { + thread vmx_stop_start_ent(var_13,undefined,param_00.instance_name); + } + } + } + + var_1A = undefined; + var_1B = undefined; + if(func_11CC(param_00.instance_name)) + { + if(var_11) + { + var_11 = 0; + if(isdefined(param_00.start_alias_data.pitch_map_name)) + { + var_1A = maps\_audio::func_117B(var_02,level._audio.var_118A.maps[param_00.start_alias_data.pitch_map_name]); + var_1A = level._audio.var_118A.minpitch + var_1A * level._audio.var_118A.maxpitch - level._audio.var_118A.minpitch; + vmx_scale_start_sound_pitch(var_1A,param_00.var_11A6,param_00.instance_name); + } + } + + if(isdefined(param_00.start_alias_data.vol_map_name)) + { + var_1B = maps\_audio::func_117B(var_02,level._audio.var_118A.maps[param_00.start_alias_data.vol_map_name]); + vmx_scale_start_sound_volume(var_1B,param_00.var_11A6,param_00.instance_name); + } + } + + if(vmx_get_stop_sound_playing(param_00.instance_name)) + { + if(var_12) + { + var_12 = 0; + if(isdefined(param_00.stop_alias_data.pitch_map_name)) + { + var_1A = maps\_audio::func_117B(var_02,level._audio.var_118A.maps[param_00.stop_alias_data.pitch_map_name]); + var_1A = level._audio.var_118A.minpitch + var_1A * level._audio.var_118A.maxpitch - level._audio.var_118A.minpitch; + vmx_scale_stop_sound_pitch(var_1A,param_00.var_11A6,param_00.instance_name); + } + } + + if(isdefined(param_00.stop_alias_data.vol_map_name)) + { + var_1B = maps\_audio::func_117B(var_02,level._audio.var_118A.maps[param_00.stop_alias_data.vol_map_name]); + vmx_scale_stop_sound_volume(var_1B,param_00.var_11A6,param_00.instance_name); + } + } + + var_04 = var_02; + wait param_00.var_11A6; + } +} + +//Function Number: 26 +vm_disablethrottleupdate(param_00) +{ + self.var_11DB = 1; + if(isdefined(param_00)) + { + self.aud_engine_throttle_amount = param_00; + } +} + +//Function Number: 27 +vm_enablethrottleupdate() +{ + self.var_11DB = undefined; +} + +//Function Number: 28 +vmx_callback(param_00) +{ + var_01 = param_00.instance_name; + level endon("aud_veh_stop"); + level endon("aud_veh_stop_" + var_01); + var_02 = undefined; + var_03 = param_00.smoothness; + var_04 = param_00.smooth_up; + var_05 = param_00.smooth_down; + var_06 = param_00.min; + var_07 = param_00.max; + if(isdefined(param_00.heightmax)) + { + var_08 = level._audio.var_118A.instances[var_01]["entity"]; + param_00.init_height = var_08.origin[2]; + } + + var_09 = 1; + for(;;) + { + param_00.smoothness = var_03; + param_00.smooth_up = var_04; + param_00.smooth_down = var_05; + var_08 = level._audio.var_118A.instances[var_01]["entity"]; + if(isdefined(var_08.aud_overrides) && isdefined(var_08.aud_overrides[param_00.type]) && isdefined(var_08.aud_overrides[param_00.type].min_range)) + { + param_00.min = var_08.aud_overrides[param_00.type].min_range; + param_00.max = var_08.aud_overrides[param_00.type].max_range; + } + else + { + param_00.min = var_06; + param_00.max = var_07; + } + + if(!isdefined(var_08)) + { + vm_stop(param_00.instance_name); + return; + } + + var_0A = 0; + var_0B = 0; + if(isdefined(var_08.var_11DB)) + { + var_0A = var_08.var_11DB; + if(isdefined(var_08.aud_engine_throttle_amount)) + { + var_0B = var_08.aud_engine_throttle_amount; + } + } + + var_0C = [[ param_00.callback ]](param_00); + if(isdefined(param_00.multiply_by_throttle)) + { + if(var_0A) + { + var_0D = var_0B; + } + else + { + var_0D = vmx_get_throttle(var_01); + } + + if(level._audio.var_118A.var_1196) + { + iprintln("throttle: " + var_0D); + } + + var_0C = var_0C * var_0D; + } + + var_0C = var_0C - param_00.min / param_00.max - param_00.min; + var_0C = clamp(var_0C,0,1); + if(isdefined(var_02)) + { + if(isdefined(param_00.smooth_up) && var_0C > var_02) + { + var_02 = var_02 + param_00.smooth_up * var_0C - var_02; + } + else if(isdefined(param_00.smooth_down) && var_0C <= var_02) + { + var_02 = var_02 + param_00.smooth_down * var_0C - var_02; + } + else + { + var_02 = var_02 + param_00.smoothness * var_0C - var_02; + } + } + else + { + var_02 = var_0C; + } + + if(isdefined(param_00.custom_callback)) + { + [[ param_00.custom_callback ]](var_08,var_02); + } + + foreach(var_0F in param_00.alias_data) + { + thread func_11E0(var_0F,param_00,var_02,var_01,var_09); + } + + if(var_09) + { + var_09 = 0; + wait param_00.var_11A8; + continue; + } + + wait param_00.var_11A6; + } +} + +//Function Number: 29 +func_11E0(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = undefined; + var_06 = undefined; + if(isdefined(param_00.pitch_map_name)) + { + var_05 = maps\_audio::func_117B(param_02,level._audio.var_118A.maps[param_00.pitch_map_name]); + var_05 = level._audio.var_118A.minpitch + var_05 * level._audio.var_118A.maxpitch - level._audio.var_118A.minpitch; + } + + if(isdefined(param_00.vol_map_name)) + { + var_06 = maps\_audio::func_117B(param_02,level._audio.var_118A.maps[param_00.vol_map_name]); + } + + var_07 = 0; + var_08 = 0; + if(isdefined(level._audio.var_118A.ducked_instances[param_03])) + { + var_09 = level._audio.var_118A.ducked_instances[param_03]; + var_0A = gettime(); + var_0B = 2.5; + if(isdefined(param_01.duck_time)) + { + var_0B = param_01.duck_time; + } + + if(var_0A - var_09 < var_0B * 1000) + { + var_07 = 1; + } + } + + if(!var_07) + { + if(!isdefined(level._audio.var_118A.ducked_instances[param_03]) && func_11CB(param_03)) + { + var_07 = 1; + level._audio.var_118A.ducked_instances[param_03] = gettime(); + } + } + + if(var_07) + { + var_0C = 0.7; + if(isdefined(param_01.duck_amount)) + { + var_0C = param_01.duck_amount; + } + + var_06 = var_06 * var_0C; + } + + if(isdefined(param_01.heightmax)) + { + var_0D = param_01.vehicle.origin[2]; + var_0E = var_0D - param_01.init_height; + if(var_0E > param_01.heightmax) + { + var_06 = 0; + } + } + + if(!isdefined(level._audio.var_118A.instances[param_03][param_00.alias_name])) + { + level._audio.var_118A.instances[param_03][param_00.alias_name] = spawn("script_origin",param_01.vehicle.origin); + var_0F = 0; + if(isdefined(param_01.offset)) + { + var_0F = param_01.offset; + } + + level._audio.var_118A.instances[param_03][param_00.alias_name] linkto(param_01.vehicle,"tag_origin",(var_0F,0,0),(0,0,0)); + level._audio.var_118A.instances[param_03][param_00.alias_name] playloopsound(param_00.alias_name); + level._audio.var_118A.instances[param_03][param_00.alias_name] scalevolume(0); + wait 0.05; + level._audio.var_118A.instances[param_03][param_00.alias_name] scalevolume(var_06,param_01.var_11A8); + return; + } + + if(isdefined(var_05)) + { + level._audio.var_118A.instances[param_03][param_00.alias_name] setpitch(var_05,param_01.var_11A6); + } + + if(isdefined(var_06)) + { + level._audio.var_118A.instances[param_03][param_00.alias_name] scalevolume(var_06,param_01.var_11A6); + } +} + +//Function Number: 30 +func_11E1(param_00,param_01,param_02,param_03) +{ + var_04 = "tag_origin"; + if(isdefined(param_02)) + { + var_04 = "tag_origin"; + } + + var_05 = 0; + if(isdefined(param_03)) + { + var_05 = param_03; + } + + if(isdefined(level._audio.var_118A.instances[param_00])) + { + foreach(var_08, var_07 in level._audio.var_118A.instances[param_00]) + { + if(var_08 != "entity" && var_08 != "speed" && var_08 != "throttle") + { + var_07 unlink(); + var_07 linkto(param_01,var_04,(var_05,0,0),(0,0,0)); + } + } + + level._audio.var_118A.instances[param_00]["entity"] = param_01; + } +} + +//Function Number: 31 +func_11E2(param_00,param_01) +{ + if(isdefined(level._audio.var_118A.instances[param_00])) + { + level._audio.var_118A.instances[param_00]["speed"] = param_01; + } +} + +//Function Number: 32 +func_11E3(param_00,param_01) +{ + if(isdefined(level._audio.var_118A.instances[param_00])) + { + level._audio.var_118A.instances[param_00]["throttle"] = param_01; + } +} + +//Function Number: 33 +func_11E4(param_00,param_01) +{ + if(isdefined(level._audio.var_118A.instances[param_00])) + { + } +} + +//Function Number: 34 +func_11E5(param_00) +{ + var_01 = level._audio.var_118A.instances[param_00.instance_name]["entity"]; + var_02 = var_01.angles[0]; + if(level._audio.var_118A.var_1192) + { + iprintln("tilt: " + var_02); + } + + return var_02; +} + +//Function Number: 35 +func_11E6(param_00) +{ + var_01 = level._audio.var_118A.instances[param_00.instance_name]["entity"]; + var_02 = 0; + if(isdefined(level._audio.var_118A.instances[param_00.instance_name]["speed"])) + { + var_03 = level._audio.var_118A.instances[param_00.instance_name]["speed"]; + var_02 = var_01 [[ var_03 ]](); + } + else + { + var_02 = param_00.vehicle vehicle_getspeed(); + } + + if(level._audio.var_118A.print_speed) + { + iprintln("speed: " + var_02); + } + + return var_02; +} + +//Function Number: 36 +vmx_get_yaw(param_00) +{ + var_01 = level._audio.var_118A.instances[param_00.instance_name]["entity"]; + var_02 = var_01.angles[1]; + if(level._audio.var_118A.print_speed) + { + iprintln("yaw: " + var_02); + } + + return var_02; +} + +//Function Number: 37 +vmx_get_roll(param_00) +{ + var_01 = level._audio.var_118A.instances[param_00.instance_name]["entity"]; + var_02 = var_01.angles[2]; + if(level._audio.var_118A.print_roll) + { + iprintln("roll: " + var_02); + } + + return var_02; +} + +//Function Number: 38 +vmx_get_altitude(param_00) +{ + var_01 = level._audio.var_118A.instances[param_00.instance_name]["entity"]; + return 1; +} + +//Function Number: 39 +vmx_get_throttle(param_00) +{ + var_01 = level._audio.var_118A.instances[param_00.instance_name]["entity"]; + var_02 = 0; + if(isdefined(level._audio.var_118A.instances[param_00.instance_name]["throttle"])) + { + var_03 = level._audio.var_118A.instances[param_00.instance_name]["speed"]; + var_02 = var_01 [[ var_03 ]](); + } + else if(isdefined(param_00.throttle_input) && param_00.throttle_input == "leftstick") + { + var_04 = level.player getnormalizedmovement(); + var_05 = var_04[0]; + var_02 = 0; + if(var_05 >= 0) + { + var_02 = var_05; + } + } + else if(isdefined(param_00.throttle_input) && param_00.throttle_input == "leftstick_abs") + { + var_04 = level.player getnormalizedmovement(); + var_05 = abs(var_04[0]); + var_06 = abs(var_04[1]); + var_02 = 2 * sqrt(var_05 * var_05 + var_06 * var_06); + var_02 = clamp(var_02,0,1); + } + else if(isdefined(param_00.throttle_input) && param_00.throttle_input == "attack") + { + if(level.player attackbuttonpressed()) + { + var_02 = 1; + } + else + { + var_02 = 0; + } + } + else + { + var_02 = var_01 vehicle_getthrottle(); + } + + return var_02; +} + +//Function Number: 40 +vm_ground_vehicle_start(param_00,param_01,param_02,param_03,param_04,param_05) +{ + self endon("death"); + self.var_11EC = spawnstruct(); + self.var_11EC.move_lo_lp = param_00; + self.var_11EC.rolling_lp = param_01; + self.var_11EC.var_11EF = param_02; + self.var_11EC.engine_rev_lo_os = param_03; + self.var_11EC.breaks_os = param_04; + thread vmx_monitor_explosion(param_05); + thread vmx_ground_vehicle_monitor_death(); + thread vmx_cleanup_ents(); + vmx_vehicle_engine(); +} + +//Function Number: 41 +vmx_vehicle_engine() +{ + self endon("death"); + self.do_rev = 1; + self.ents_mixed_in = 0; + self.var_11F5 = 0; + self.has_move_played = 0; + self.has_roll_played = 0; + self.veh_mix_ents = spawnstruct(); + self.veh_mix_ents.idle_ent = spawn("script_origin",self.origin); + self.veh_mix_ents.idle_ent linkto(self); + self.veh_mix_ents.move_ent = spawn("script_origin",self.origin); + self.veh_mix_ents.move_ent linkto(self); + self.veh_mix_ents.roll_ent = spawn("script_origin",self.origin); + self.veh_mix_ents.roll_ent linkto(self); + self.veh_mix_ents.one_shot = spawn("script_origin",self.origin); + self.veh_mix_ents.one_shot linkto(self); + for(;;) + { + var_00 = self vehicle_getspeed(); + if(var_00 > 0.05) + { + self.do_rev = 1; + vmx_ground_speed_watch(var_00); + } + + wait 0.25; + } +} + +//Function Number: 42 +vmx_ground_speed_watch(param_00) +{ + self endon("death"); + var_01 = 0.5; + var_02 = 1.5; + var_03 = 0; + for(;;) + { + var_04 = param_00; + wait 0.1; + var_05 = 0.5 + self vehicle_getspeed(); + if(var_05 >= var_04) + { + if(isdefined(self.var_11EC.var_11EF) && self.var_11F5) + { + self.veh_mix_ents.idle_ent thread vmx_aud_ent_fade_out(0.5); + } + + if(self.do_rev) + { + self.do_rev = 0; + if(isdefined(self.var_11EC.engine_rev_lo_os)) + { + self.veh_mix_ents.one_shot playsound(self.var_11EC.engine_rev_lo_os); + } + } + else + { + if(isdefined(self.var_11EC.rolling_lp) && !self.has_roll_played) + { + self.has_roll_played = 1; + self.veh_mix_ents.roll_ent playloopsound(self.var_11EC.rolling_lp); + } + + if(isdefined(self.var_11EC.move_lo_lp) && !self.has_move_played) + { + self.has_move_played = 1; + self.veh_mix_ents.move_ent playloopsound(self.var_11EC.move_lo_lp); + } + + if(!var_03) + { + if(isdefined(self.var_11EC.move_lo_lp)) + { + self.veh_mix_ents.move_ent thread vmx_aud_ent_fade_in(var_01); + } + + if(isdefined(self.var_11EC.rolling_lp)) + { + self.veh_mix_ents.roll_ent thread vmx_aud_ent_fade_in(var_01); + } + + var_03 = 1; + } + } + } + else if(var_05 < var_04) + { + if(isdefined(self.var_11EC.var_11EF)) + { + if(!self.var_11F5) + { + self.var_11F5 = 1; + self.veh_mix_ents.idle_ent playloopsound(self.var_11EC.var_11EF); + } + + self.veh_mix_ents.idle_ent thread vmx_aud_ent_fade_in(0.5); + } + + if(isdefined(self.var_11EC.breaks_os)) + { + self.veh_mix_ents.one_shot playsound(self.var_11EC.breaks_os); + } + + if(isdefined(self.var_11EC.move_lo_lp)) + { + self.veh_mix_ents.move_ent thread vmx_aud_ent_fade_out(0.5); + } + + if(isdefined(self.var_11EC.move_lo_lp)) + { + self.veh_mix_ents.roll_ent thread vmx_aud_ent_fade_out(0.1); + } + + return; + } + + wait 0.2; + } +} + +//Function Number: 43 +vmx_aud_ent_fade_out(param_00) +{ + self scalevolume(0,param_00); +} + +//Function Number: 44 +vmx_aud_ent_fade_in(param_00,param_01) +{ + var_02 = 1; + if(isdefined(param_01)) + { + var_02 = param_01; + } + + self scalevolume(0); + wait 0.05; + self scalevolume(var_02,param_00); +} + +//Function Number: 45 +vmx_cleanup_ents() +{ + self waittill("cleanup_sound_ents"); + self.veh_mix_ents.idle_ent stoploopsound(); + self.veh_mix_ents.move_ent stoploopsound(); + self.veh_mix_ents.roll_ent stoploopsound(); + self.veh_mix_ents.one_shot stopsounds(); + wait 0.05; + self.veh_mix_ents.idle_ent delete(); + self.veh_mix_ents.move_ent delete(); + self.veh_mix_ents.roll_ent delete(); + self.veh_mix_ents.one_shot delete(); +} + +//Function Number: 46 +vmx_ground_vehicle_monitor_death() +{ + self endon("cleanup_sound_ents"); + self waittill("death"); + self notify("cleanup_sound_ents"); +} + +//Function Number: 47 +vmx_monitor_explosion(param_00) +{ + self endon("cleanup_sound_ents"); + for(;;) + { + if(!isdefined(self)) + { + break; + } + + if(self.health < self.var_1203) + { + break; + } + + wait 0.05; + } + + self notify("died"); + if(isdefined(param_00)) + { + common_scripts\utility::play_sound_in_space(param_00,self.origin); + } + + self notify("ceanup_sound_ents"); +} + +//Function Number: 48 +vm_aud_air_vehicle_flyby(param_00,param_01,param_02,param_03,param_04,param_05) +{ + var_06 = 0; + if(isdefined(param_03)) + { + var_06 = param_03; + } + + var_07 = 0; + if(isdefined(param_04)) + { + var_07 = param_04; + } + + while(isdefined(param_00)) + { + if(var_07) + { + var_08 = distance(param_00.origin,level.player.origin); + } + else + { + var_08 = distance2d(param_00.origin,level.player.origin); + } + + if(var_06) + { + iprintln("Distance: " + var_08); + } + + if(var_08 < param_02) + { + var_09 = spawn("script_origin",param_00.origin); + var_09 linkto(param_00); + var_09 playsound(param_01,"sounddone"); + param_00 notify("flyby_sound_played"); + var_09 thread vmx_waittill_deathspin(param_00); + var_09 thread func_1206(); + var_09 waittill("flyby_ent",var_0A); + if(var_0A == "deathspin") + { + if(isdefined(param_05)) + { + thread common_scripts\utility::play_sound_in_space(param_05,var_09.origin); + } + + var_09 scalevolume(0,0.3); + wait 0.4; + var_09 stopsounds(); + wait 0.05; + var_09 delete(); + return; + } + else if(var_0A == "sounddone") + { + wait 0.1; + var_09 delete(); + return; + } + + continue; + } + + wait 0.05; + } +} + +//Function Number: 49 +vmx_waittill_deathspin(param_00) +{ + self endon("flyby_ent"); + param_00 waittill("deathspin"); + self notify("flyby_ent","deathspin"); +} + +//Function Number: 50 +func_1206() +{ + self endon("flyby_ent"); + self waittill("sounddone"); + self notify("flyby_ent","sounddone"); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_audio_whizby.gsc b/MW3/Xbox/SP/maps/_audio_whizby.gsc new file mode 100644 index 0000000..a79eaeb --- /dev/null +++ b/MW3/Xbox/SP/maps/_audio_whizby.gsc @@ -0,0 +1,162 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_audio_whizby.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 9 + * Decompile Time: 135 ms + * Timestamp: 10/27/2023 2:33:21 AM +*******************************************************************/ + +//Function Number: 1 +whiz_init() +{ + setsaveddvar("snd_newWhizby",1); + level._audio.whiz = spawnstruct(); + level._audio.whiz.use_string_table_presets = 0; +} + +//Function Number: 2 +whiz_use_string_table() +{ + level._audio.whiz.use_string_table_presets = 1; +} + +//Function Number: 3 +whiz_set_preset(param_00) +{ + var_01 = []; + if(level._audio.whiz.use_string_table_presets) + { + var_01 = whizx_get_stringtable_preset(param_00); + } + else + { + var_01 = maps\_audio::audio_presets_whizby(param_00,var_01); + } + + var_02 = var_41["probability"]; + var_03 = var_41["spread"]; + var_04 = var_41["radius"]; + var_05 = var_41["offset"]; + level.player setwhizbyprobabilities(var_02[0],var_02[1],var_02[2]); + level.player setwhizbyspreads(var_03[0],var_03[1],var_03[2]); + level.player setwhizbyradii(var_04[0],var_04[1],var_04[2]); + level.player setwhizbyoffset(var_05); +} + +//Function Number: 4 +whiz_set_probabilities(param_00,param_01,param_02) +{ + level.player setwhizbyprobabilities(param_00,param_01,param_02); +} + +//Function Number: 5 +whiz_set_spreads(param_00,param_01,param_02) +{ + level.player setwhizbyspreads(param_00,param_01,param_02); +} + +//Function Number: 6 +whiz_set_radii(param_00,param_01,param_02) +{ + level.player setwhizbyradii(param_00,param_01,param_02); +} + +//Function Number: 7 +whiz_set_offset(param_00) +{ + level.player setwhizbyoffset(param_00); +} + +//Function Number: 8 +whizx_get_stringtable_preset(param_00) +{ + var_01 = "soundtables/common_whizby.csv"; + var_02 = []; + var_02 = whizx_get_mix_preset_from_stringtable_internal(var_01,param_00); + return var_02; +} + +//Function Number: 9 +whizx_get_mix_preset_from_stringtable_internal(param_00,param_01) +{ + var_02 = []; + var_03 = ""; + var_04 = ""; + var_05 = 12; + var_06 = []; + var_07 = []; + var_08 = []; + var_09 = 0; + var_0A = 0; + for(var_0B = 1;var_0B < var_05;var_0B++) + { + var_03 = tablelookup(param_00,0,"whizby_preset",var_0B); + var_04 = tablelookup(param_00,0,param_01,var_0B); + if(!isdefined(var_04)) + { + break; + } + + if(var_04 != "" && var_04 != "comments") + { + var_0A++; + switch(var_03) + { + case "radius_offset": + var_09 = float(var_04); + break; + + case "near_radius": + var_06[0] = float(var_04); + break; + + case "medium_radius": + var_06[1] = float(var_04); + break; + + case "far_radius": + var_06[2] = float(var_04); + break; + + case "near_spread": + var_07[0] = float(var_04); + break; + + case "medium_spread": + var_07[1] = float(var_04); + break; + + case "far_spread": + var_07[2] = float(var_04); + break; + + case "near_prob": + var_08[0] = float(var_04); + break; + + case "medium_prob": + var_08[1] = float(var_04); + break; + + case "far_prob": + var_08[2] = float(var_04); + break; + } + } + } + + if(var_0A > 0) + { + var_02["radius"] = var_06; + var_02["spread"] = var_07; + var_02["probability"] = var_08; + if(isdefined(var_09)) + { + var_02["offset"] = var_09; + } + } + + return var_02; +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_audio_zone_manager.gsc b/MW3/Xbox/SP/maps/_audio_zone_manager.gsc new file mode 100644 index 0000000..b1a23d4 --- /dev/null +++ b/MW3/Xbox/SP/maps/_audio_zone_manager.gsc @@ -0,0 +1,873 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_audio_zone_manager.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 30 + * Decompile Time: 529 ms + * Timestamp: 10/27/2023 2:33:19 AM +*******************************************************************/ + +//Function Number: 1 +azm_init() +{ + if(!isdefined(level._audio.zone_mgr)) + { + level._audio.zone_mgr = spawnstruct(); + level._audio.zone_mgr.current_zone = ""; + level._audio.zone_mgr.var_112B = []; + level._audio.zone_mgr.overrides = spawnstruct(); + level._audio.zone_mgr.overrides.samb = []; + level._audio.zone_mgr.overrides.damb = []; + level._audio.zone_mgr.overrides.mix = []; + level._audio.zone_mgr.overrides.rev = []; + level._audio.zone_mgr.overrides.var_112F = []; + level._audio.zone_mgr.use_string_table_presets = 0; + level._audio.zone_mgr.use_iw_presets = 0; + } + + if(!isdefined(level._audio.use_level_audio_zones)) + { + level._audio.level_audio_zones_function = undefined; + } +} + +//Function Number: 2 +azm_use_string_table() +{ + level._audio.zone_mgr.use_string_table_presets = 1; + level._audio.zone_mgr.use_iw_presets = 0; +} + +//Function Number: 3 +azm_use_iw_presets() +{ + level._audio.zone_mgr.use_iw_presets = 1; + level._audio.zone_mgr.use_string_table_presets = 0; +} + +//Function Number: 4 +func_1134(param_00,param_01,param_02) +{ + if(level._audio.zone_mgr.current_zone == param_00) + { + return; + } + else if(level._audio.zone_mgr.current_zone != "") + { + func_113F(level._audio.zone_mgr.current_zone,param_01); + } + + level._audio.zone_mgr.current_zone = param_00; + if(isdefined(level._audio.zone_mgr.var_112B[param_00]) && isdefined(level._audio.zone_mgr.var_112B[param_00]["state"]) && level._audio.zone_mgr.var_112B[param_00]["state"] != "stopping") + { + maps\_audio::aud_print_warning("ZONEM_start_zone(\" + param_00 + "\") being called even though audio zone, \" + param_00 + "\", is already started."); + return; + } + + var_03 = 2; + if(isdefined(param_01)) + { + var_03 = param_01; + } + + if(!isdefined(level._audio.zone_mgr.var_112B[param_00])) + { + var_04 = azmx_load_zone(param_00); + if(!isdefined(var_04)) + { + return; + } + + level._audio.zone_mgr.var_112B[param_00] = var_04; + } + + var_04 = level._audio.zone_mgr.var_112B[param_00]; + maps\_audio::func_1135("ZONE START: " + param_00); + level._audio.zone_mgr.var_112B[param_00]["state"] = "playing"; + var_05 = var_04["priority"]; + var_06 = var_04["interrupt_fade"]; + if(isdefined(var_04["streamed_ambience"])) + { + if(var_04["streamed_ambience"] != "none") + { + maps\_audio_stream_manager::func_1045(var_04["streamed_ambience"],var_03,var_05,var_06); + } + else + { + maps\_audio_stream_manager::sm_stop_ambience(var_03); + } + } + + if(isdefined(var_04["dynamic_ambience"])) + { + if(var_04["dynamic_ambience"] != "none") + { + maps\_audio_dynamic_ambi::damb_zone_start_preset(var_04["dynamic_ambience"],1); + } + else + { + maps\_audio_dynamic_ambi::damb_stop_zone(1); + } + } + + if(isdefined(var_04["occlusion"])) + { + if(var_04["occlusion"] != "none") + { + maps\_audio::aud_set_occlusion(var_04["occlusion"]); + } + else + { + maps\_audio::func_1137(); + } + } + + if(isdefined(var_04["filter"])) + { + if(var_04["filter"] != "none") + { + maps\_audio::func_1138(var_04["filter"],0); + level.player seteqlerp(1,0); + } + } + + if(isdefined(var_04["reverb"])) + { + if(var_04["reverb"] != "none") + { + maps\_audio_reverb::rvb_start_preset(var_04["reverb"]); + } + else + { + maps\_audio_reverb::rvb_deactive_reverb(); + } + } + + if(isdefined(var_04["mix"])) + { + if(var_04["mix"] != "none") + { + maps\_audio_mix_manager::mm_start_zone_preset(var_04["mix"]); + return; + } + + maps\_audio_mix_manager::func_10DB(1); + } +} + +//Function Number: 5 +azm_set_zone_streamed_ambience(param_00,param_01,param_02) +{ + var_03 = func_114E(param_00,"streamed_ambience",param_01,::azmx_restart_stream,param_02); + if(!var_03) + { + if(!isdefined(param_01)) + { + param_01 = "none"; + } + + level._audio.zone_mgr.overrides.samb[param_00] = param_01; + } +} + +//Function Number: 6 +azm_set_zone_dynamic_ambience(param_00,param_01,param_02) +{ + if(!isdefined(param_01)) + { + param_01 = "none"; + } + + func_114E(param_00,"dynamic_ambience",param_01,::func_114A,param_02); + level._audio.zone_mgr.overrides.damb[param_00] = param_01; +} + +//Function Number: 7 +func_113B(param_00,param_01,param_02) +{ + if(!isdefined(param_01)) + { + param_01 = "none"; + } + + func_114E(param_00,"reverb",param_01,::azmx_restart_reverb,param_02); + level._audio.zone_mgr.overrides.rev[param_00] = param_01; +} + +//Function Number: 8 +func_113C(param_00,param_01,param_02) +{ + if(!isdefined(param_01)) + { + param_01 = "none"; + } + + func_114E(param_00,"occlusion",param_01,::azmx_restart_occlusion,param_02); + level._audio.zone_mgr.overrides.mix[param_01] = param_01; +} + +//Function Number: 9 +azm_set_zone_mix(param_00,param_01,param_02) +{ + if(!isdefined(param_01)) + { + param_01 = "none"; + } + + func_114E(param_00,"mix",param_01,::func_114D,param_02); + level._audio.zone_mgr.overrides.mix[param_01] = param_01; +} + +//Function Number: 10 +func_113E(param_00) +{ + var_01 = 1; + if(isdefined(param_00)) + { + var_01 = param_00; + } + + maps\_audio::func_1135("ZONE STOP ALL"); + foreach(var_03 in level._audio.zone_mgr.var_112B) + { + func_113F(var_03["name"],var_01,0); + } +} + +//Function Number: 11 +func_113F(param_00,param_01,param_02) +{ + if(isdefined(level._audio.zone_mgr.var_112B[param_00]) && isdefined(level._audio.zone_mgr.var_112B[param_00]["state"]) && level._audio.zone_mgr.var_112B[param_00]["state"] != "stopping") + { + var_03 = 1; + if(isdefined(param_01)) + { + var_03 = param_01; + } + + var_04 = level._audio.zone_mgr.var_112B[param_00]; + var_05 = 0; + if(isdefined(param_02)) + { + var_05 = param_02; + } + + if(var_05) + { + maps\_audio::func_1135("ZONE STOP ZONE: " + param_00); + } + + if(isdefined(var_04["streamed_ambience"])) + { + maps\_audio_stream_manager::sm_stop_ambient_alias(var_04["streamed_ambience"],var_03); + } + + if(isdefined(var_04["dynamic_ambience"])) + { + maps\_audio_dynamic_ambi::damb_zone_stop_preset(var_04["dynamic_ambience"],var_03); + } + + level._audio.zone_mgr.var_112B[param_00]["state"] = "stopping"; + thread azmx_wait_till_fade_done_and_remove_zone(param_00,var_03); + } +} + +//Function Number: 12 +azm_get_current_zone() +{ + return level._audio.zone_mgr.current_zone; +} + +//Function Number: 13 +azm_set_current_zone(param_00) +{ + level._audio.zone_mgr.current_zone = param_00; +} + +//Function Number: 14 +azm_print_enter_blend(param_00,param_01,param_02) +{ +} + +//Function Number: 15 +azm_print_exit_blend(param_00) +{ +} + +//Function Number: 16 +func_1144(param_00) +{ +} + +//Function Number: 17 +azmx_load_zone(param_00) +{ + if(isdefined(level._audio.zone_mgr.var_112B[param_00])) + { + return; + } + + if(!isdefined(level._audio.zone_mgr.preset_cache)) + { + level._audio.zone_mgr.preset_cache = []; + } + + var_01 = []; + if(isdefined(level._audio.zone_mgr.preset_cache[param_00])) + { + var_01 = level._audio.zone_mgr.preset_cache[param_00]; + } + else + { + var_01 = azmx_get_preset_from_string_table(param_00,1); + } + + if(!isdefined(var_01) || var_01.size == 0) + { + return; + } + + level._audio.zone_mgr.preset_cache[param_00] = var_01; + var_02 = 0; + if(isdefined(level._audio.zone_mgr.overrides.samb[param_00])) + { + if(level._audio.zone_mgr.overrides.samb[param_00] == "none") + { + var_01["streamed_ambience"] = undefined; + } + else + { + var_01["streamed_ambience"] = level._audio.zone_mgr.overrides.samb[param_00]; + } + + var_02 = 1; + level._audio.zone_mgr.overrides.samb[param_00] = undefined; + } + + if(isdefined(level._audio.zone_mgr.overrides.damb[param_00])) + { + if(level._audio.zone_mgr.overrides.damb[param_00] == "none") + { + var_01["dynamic_ambience"] = undefined; + } + else + { + var_01["dynamic_ambience"] = level._audio.zone_mgr.overrides.damb[param_00]; + } + + var_02 = 1; + level._audio.zone_mgr.overrides.damb[param_00] = undefined; + } + + if(isdefined(level._audio.zone_mgr.overrides.rev[param_00])) + { + if(level._audio.zone_mgr.overrides.rev[param_00] == "none") + { + var_01["reverb"] = undefined; + } + else + { + var_01["reverb"] = level._audio.zone_mgr.overrides.rev[param_00]; + } + + var_02 = 1; + level._audio.zone_mgr.overrides.rev[param_00] = undefined; + } + + if(isdefined(level._audio.zone_mgr.overrides.var_112F[param_00])) + { + if(level._audio.zone_mgr.overrides.var_112F[param_00] == "none") + { + var_01["occlusion"] = undefined; + } + else + { + var_01["occlusion"] = level._audio.zone_mgr.overrides.var_112F[param_00]; + } + + var_02 = 1; + level._audio.zone_mgr.overrides.var_112F[param_00] = undefined; + } + + if(isdefined(level._audio.zone_mgr.overrides.mix[param_00])) + { + if(level._audio.zone_mgr.overrides.mix[param_00] == "none") + { + var_01["mix"] = undefined; + } + else + { + var_01["mix"] = level._audio.zone_mgr.overrides.mix[param_00]; + } + + var_02 = 1; + level._audio.zone_mgr.overrides.mix[param_00] = undefined; + } + + if(var_02) + { + level._audio.zone_mgr.preset_cache[param_00] = var_01; + } + + var_01["name"] = param_00; + if(!isdefined(var_01["priority"])) + { + var_01["priority"] = 1; + } + + if(!isdefined(var_01["interrupt_fade"])) + { + var_01["interrupt_fade"] = 0.1; + } + + return var_01; +} + +//Function Number: 18 +azmx_get_preset_from_string_table(param_00,param_01) +{ + var_02 = "soundtables/common_zone.csv"; + var_03 = maps\_audio::get_zone_stringtable(); + var_04 = []; + if(param_01) + { + var_04 = azmx_get_zone_preset_from_stringtable_internal(var_03,param_00); + } + + if(!isdefined(var_04) || var_04.size == 0) + { + var_04 = azmx_get_zone_preset_from_stringtable_internal(var_02,param_00); + } + + if(!isdefined(var_04) || var_04.size == 0) + { + return; + } + + return var_04; +} + +//Function Number: 19 +azmx_get_zone_preset_from_stringtable_internal(param_00,param_01) +{ + var_02 = []; + var_03 = ""; + var_04 = ""; + var_05 = 8; + for(var_06 = 1;var_06 < var_05;var_06++) + { + if(var_03 != "comments" && var_04 != "") + { + var_02[var_03] = var_04; + } + + var_03 = tablelookup(param_00,0,"zone_names",var_06); + var_04 = tablelookup(param_00,0,param_01,var_06); + if(var_03 != "comment" && var_03 != "comments" && var_04 != "") + { + switch(var_03) + { + case "streamed_ambience": + var_02["streamed_ambience"] = var_04; + break; + + case "dynamic_ambience": + var_02["dynamic_ambience"] = var_04; + break; + + case "mix": + var_02["mix"] = var_04; + break; + + case "reverb": + var_02["reverb"] = var_04; + break; + + case "filter": + var_02["filter"] = var_04; + break; + + case "occlusion": + var_02["occlusion"] = var_04; + break; + + default: + break; + } + } + } + + return var_02; +} + +//Function Number: 20 +azmx_restart_stream(param_00,param_01) +{ + var_02 = level._audio.zone_mgr.var_112B[param_00]["streamed_ambience"]; + if(isdefined(var_02)) + { + maps\_audio_stream_manager::func_1045(var_02,param_01); + return; + } + + maps\_audio_stream_manager::sm_stop_ambience(param_01); +} + +//Function Number: 21 +func_114A(param_00,param_01) +{ + var_02 = 1; + if(isdefined(param_01)) + { + var_02 = param_01; + } + + var_03 = level._audio.zone_mgr.var_112B[param_00]["dynamic_ambience"]; + if(isdefined(var_03)) + { + maps\_audio_dynamic_ambi::damb_zone_start_preset(var_03,var_02); + return; + } + + maps\_audio_dynamic_ambi::damb_zone_stop_preset(undefined,var_02); +} + +//Function Number: 22 +azmx_restart_reverb(param_00,param_01) +{ + var_02 = level._audio.zone_mgr.var_112B[param_00]["reverb"]; + if(isdefined(var_02)) + { + maps\_audio_reverb::rvb_start_preset(var_02); + } +} + +//Function Number: 23 +azmx_restart_occlusion(param_00,param_01) +{ + var_02 = level._audio.zone_mgr.var_112B[param_00]["occlusion"]; + if(isdefined(var_02)) + { + maps\_audio::aud_set_occlusion(var_02); + } +} + +//Function Number: 24 +func_114D(param_00,param_01) +{ + var_02 = level._audio.zone_mgr.var_112B[param_00]["mix"]; + if(isdefined(var_02)) + { + maps\_audio_mix_manager::mm_start_preset(var_02); + } +} + +//Function Number: 25 +func_114E(param_00,param_01,param_02,param_03,param_04) +{ + if(isdefined(level._audio.zone_mgr.var_112B[param_00])) + { + if((isdefined(level._audio.zone_mgr.var_112B[param_00][param_01]) && level._audio.zone_mgr.var_112B[param_00][param_01] != param_02) || !isdefined(level._audio.zone_mgr.var_112B[param_00][param_01]) && param_02 != "none") + { + if(param_02 == "none") + { + level._audio.zone_mgr.var_112B[param_00][param_01] = undefined; + } + else + { + level._audio.zone_mgr.var_112B[param_00][param_01] = param_02; + } + + if(param_00 == azm_get_current_zone()) + { + [[ param_03 ]](param_00,param_04); + } + } + + return 1; + } + + return 0; +} + +//Function Number: 26 +azmx_wait_till_fade_done_and_remove_zone(param_00,param_01) +{ + wait param_01; + wait 0.05; + if(level._audio.zone_mgr.var_112B[param_00]["state"] == "stopping") + { + } +} + +//Function Number: 27 +func_1150(param_00,param_01) +{ + var_02 = spawnstruct(); + var_02.var_1151 = param_00; + var_02.var_1152 = param_01; + var_02.samb1_name = undefined; + var_02.samb2_name = undefined; + var_02.damb1_name = undefined; + var_02.damb2_name = undefined; + var_02.occlusion1 = undefined; + var_02.var_1158 = undefined; + var_02.filter1 = undefined; + var_02.filter2 = undefined; + var_02.reverb1 = undefined; + var_02.reverb2 = undefined; + var_02.mix1_name = undefined; + var_02.var_115E = undefined; + if(!isdefined(level._audio.zone_mgr.var_112B[param_00])) + { + var_03 = azmx_load_zone(param_00); + if(!isdefined(var_03)) + { + maps\_audio::aud_print_warning("Couldn\'t find zone: " + param_00); + return; + } + + level._audio.zone_mgr.var_112B[param_00] = var_03; + } + + var_04 = level._audio.zone_mgr.var_112B[param_00]; + if(!isdefined(level._audio.zone_mgr.var_112B[param_01])) + { + var_03 = azmx_load_zone(param_01); + if(!isdefined(var_03)) + { + maps\_audio::aud_print_warning("Couldn\'t find zone: " + param_01); + return; + } + + level._audio.zone_mgr.var_112B[param_01] = var_03; + } + + var_05 = level._audio.zone_mgr.var_112B[param_01]; + var_02.occlusion1 = var_04["occlusion"]; + var_02.var_1158 = var_05["occlusion"]; + var_02.filter1 = var_04["filter"]; + var_02.filter2 = var_05["filter"]; + var_02.reverb1 = var_04["reverb"]; + var_02.reverb2 = var_05["reverb"]; + var_02.mix1 = var_04["mix"]; + var_02.mix2 = var_05["mix"]; + var_02.samb1_name = var_04["streamed_ambience"]; + var_02.samb2_name = var_05["streamed_ambience"]; + var_06 = level._audio.damb.playing["zone"].size; + if(var_06 != 1) + { + maps\_audio_dynamic_ambi::damb_stop(1,"zone"); + } + + if(var_06 == 1) + { + foreach(var_09, var_08 in level._audio.damb.playing["zone"]) + { + var_02.damb1_name = var_09; + break; + } + } + + var_02.damb2_name = var_05["dynamic_ambience"]; + return var_02; +} + +//Function Number: 28 +func_1161(param_00,param_01) +{ + var_02 = 0; + if(isdefined(param_00) && isdefined(param_01) && param_00 != param_01) + { + var_02 = 1; + } + else if(isdefined(param_01) && !isdefined(param_00)) + { + var_02 = 1; + } + else if(isdefined(param_00) && !isdefined(param_01)) + { + var_02 = 1; + } + + return var_02; +} + +//Function Number: 29 +func_1162(param_00,param_01) +{ + var_02 = 0; + if(isdefined(param_00) && isdefined(param_01) && param_00 != param_01) + { + var_02 = 1; + } + else if(isdefined(param_01) && !isdefined(param_00)) + { + var_02 = 1; + } + + return var_02; +} + +//Function Number: 30 +azmx_blend_zones(param_00,param_01,param_02) +{ + if(func_1162(param_02.samb1_name,param_02.samb2_name)) + { + var_03 = []; + var_04 = 0; + if(isdefined(param_02.samb1_name) && param_02.samb1_name != "") + { + var_05 = level._audio.zone_mgr.var_112B[param_02.var_1151]; + var_03[var_04] = spawnstruct(); + var_03[var_04].alias = param_02.samb1_name; + var_03[var_04].vol = param_00; + var_03[var_04].fade = var_05["interrupt_fade"]; + var_03[var_04].priority = var_05["priority"]; + var_04++; + } + + if(isdefined(param_02.samb2_name) && param_02.samb2_name != "") + { + var_06 = level._audio.zone_mgr.var_112B[param_02.var_1152]; + var_03[var_04] = spawnstruct(); + var_03[var_04].alias = param_02.samb2_name; + var_03[var_04].vol = param_01; + var_03[var_04].fade = var_06["interrupt_fade"]; + var_03[var_04].priority = var_06["priority"]; + } + + if(var_03.size > 0) + { + maps\_audio_stream_manager::sm_mix_ambience(var_03); + } + } + + if(func_1161(param_02.damb1_name,param_02.damb2_name)) + { + maps\_audio_dynamic_ambi::damb_prob_mix_damb_presets(param_02.damb1_name,param_00,param_02.damb2_name,param_01); + } + + var_07 = 0; + if(maps\_audio::func_1164()) + { + if(isdefined(param_02.filter1)) + { + var_07 = 1; + maps\_audio::func_1138(param_02.filter1,0,0); + } + else + { + maps\_audio::func_1138(undefined,0,0); + } + + if(isdefined(param_02.filter2)) + { + var_07 = 1; + maps\_audio::func_1138(param_02.filter2,1,0); + } + else + { + maps\_audio::func_1138(undefined,1,0); + } + + if(!isdefined(level._audio.var_1165) && level._audio.var_1165) + { + if(isdefined(param_02.filter1) || isdefined(param_02.filter2)) + { + level.player seteqlerp(param_00,0); + } + } + } + + if(param_00 >= 0.75) + { + if(isdefined(param_02.reverb1)) + { + if(param_02.reverb1 == "none") + { + maps\_audio_reverb::rvb_start_preset(undefined); + } + else + { + maps\_audio_reverb::rvb_start_preset(param_02.reverb1); + } + } + + if(isdefined(param_02.mix1)) + { + if(param_02.mix1 == "none") + { + maps\_audio_mix_manager::func_10DB(2); + } + else + { + maps\_audio_mix_manager::mm_start_zone_preset(param_02.mix1); + } + } + + if(maps\_audio::func_1164()) + { + if(isdefined(param_02.occlusion1)) + { + if(param_02.occlusion1 == "none") + { + maps\_audio::func_1137(); + return; + } + + maps\_audio::aud_set_occlusion(param_02.occlusion1); + return; + } + + return; + } + + return; + } + + if(param_01 >= 0.75) + { + if(isdefined(param_02.reverb2)) + { + if(param_02.reverb2 == "none") + { + maps\_audio_reverb::rvb_start_preset(undefined); + } + else + { + maps\_audio_reverb::rvb_start_preset(param_02.reverb2); + } + } + + if(isdefined(param_02.mix2)) + { + if(param_02.mix2 == "none") + { + maps\_audio_mix_manager::func_10DB(2); + } + else + { + maps\_audio_mix_manager::mm_start_zone_preset(param_02.mix2); + } + } + + if(maps\_audio::func_1164()) + { + if(isdefined(param_02.var_1158)) + { + if(param_02.var_1158 == "none") + { + maps\_audio::func_1137(); + return; + } + + maps\_audio::aud_set_occlusion(param_02.var_1158); + return; + } + + return; + } + } +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_autosave.gsc b/MW3/Xbox/SP/maps/_autosave.gsc new file mode 100644 index 0000000..6aacfe6 --- /dev/null +++ b/MW3/Xbox/SP/maps/_autosave.gsc @@ -0,0 +1,777 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_autosave.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 28 + * Decompile Time: 461 ms + * Timestamp: 10/27/2023 2:34:55 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + level.var_17C9 = 0; + common_scripts\utility::flag_init("game_saving"); + common_scripts\utility::flag_init("can_save"); + common_scripts\utility::flag_set("can_save"); + common_scripts\utility::flag_init("disable_autosaves"); + if(!isdefined(level._extra_autosave_checks)) + { + level._extra_autosave_checks = []; + } + + level.autosave_proximity_threat_func = ::autosave_proximity_threat_func; +} + +//Function Number: 2 +getdescription() +{ + return &"AUTOSAVE_AUTOSAVE"; +} + +//Function Number: 3 +getnames(param_00) +{ + if(param_00 == 0) + { + var_01 = &"AUTOSAVE_GAME"; + } + else + { + var_01 = &"AUTOSAVE_NOGAME"; + } + + return var_01; +} + +//Function Number: 4 +beginningoflevelsave() +{ + level waittill("finished final intro screen fadein"); + if(level.var_1291) + { + return; + } + + if(maps\_arcademode::arcademode_complete()) + { + return; + } + + if(common_scripts\utility::flag("game_saving")) + { + return; + } + + common_scripts\utility::flag_set("game_saving"); + var_00 = "levelshots / autosave / autosave_" + level.script + "start"; + savegame("levelstart",&"AUTOSAVE_LEVELSTART",var_00,1); + setdvar("ui_grenade_death","0"); + common_scripts\utility::flag_clear("game_saving"); +} + +//Function Number: 5 +trigger_autosave_stealth(param_00) +{ + param_00 waittill("trigger"); + maps\_utility::autosave_stealth(); +} + +//Function Number: 6 +trigger_autosave_tactical(param_00) +{ + param_00 waittill("trigger"); + maps\_utility::autosave_tactical(); +} + +//Function Number: 7 +func_17D3(param_00) +{ + if(!isdefined(param_00.script_autosave)) + { + param_00.script_autosave = 0; + } + + autosaves_think(param_00); +} + +//Function Number: 8 +autosaves_think(param_00) +{ + var_01 = getnames(param_00.script_autosave); + if(!isdefined(var_01)) + { + return; + } + + param_00 waittill("trigger"); + var_02 = param_00.script_autosave; + var_03 = "levelshots / autosave / autosave_" + level.script + var_02; + tryautosave(var_02,var_01,var_03); + thread maps\_quotes::setdeadquote(); + if(isdefined(param_00)) + { + param_00 delete(); + } +} + +//Function Number: 9 +autosavenamethink(param_00) +{ + if(maps\_utility::func_17D7()) + { + return; + } + + param_00 waittill("trigger"); + if(isdefined(level.customautosavecheck)) + { + if(![[ level.customautosavecheck ]]()) + { + return; + } + } + + var_01 = param_00.script_autosavename; + maps\_utility::autosave_by_name(var_01); + param_00 delete(); +} + +//Function Number: 10 +func_17DA(param_00) +{ + param_00 waittill("trigger"); +} + +//Function Number: 11 +func_17DB(param_00,param_01) +{ + if(isdefined(param_01)) + { + } +} + +//Function Number: 12 +autosave_timeout(param_00) +{ + level endon("trying_new_autosave"); + level endon("autosave_complete"); + wait param_00; + common_scripts\utility::flag_clear("game_saving"); + level notify("autosave_timeout"); +} + +//Function Number: 13 +func_17DD() +{ + var_00 = "levelshots / autosave / autosave_" + level.script + "start"; + savegame("levelstart",&"AUTOSAVE_LEVELSTART",var_00,1); + func_17F7(0); +} + +//Function Number: 14 +func_17DE() +{ + var_00 = "levelshots / autosave / autosave_" + level.script + "start"; + if(getdvarint("g_reloading") == 0) + { + savegame("levelstart",&"AUTOSAVE_LEVELSTART",var_00,1); + func_17F7(0); + } +} + +//Function Number: 15 +_autosave_game_now(param_00) +{ + if(isdefined(level.var_1291) && level.var_1291) + { + return; + } + + if(common_scripts\utility::flag("game_saving")) + { + return 0; + } + + if(maps\_arcademode::arcademode_complete()) + { + return 0; + } + + for(var_01 = 0;var_01 < level.players.size;var_01++) + { + var_02 = level.players[var_01]; + if(!isalive(var_02)) + { + return 0; + } + } + + var_03 = "save_now"; + var_04 = getdescription(); + if(isdefined(param_00)) + { + var_05 = savegamenocommit(var_03,var_04,"$default",1); + } + else + { + var_05 = savegamenocommit(var_04,var_05); + } + + wait 0.05; + if(issaverecentlyloaded()) + { + level.var_17C9 = gettime(); + return 0; + } + + if(var_05 < 0) + { + return 0; + } + + if(!func_17E2()) + { + return 0; + } + + common_scripts\utility::flag_set("game_saving"); + wait 2; + common_scripts\utility::flag_clear("game_saving"); + if(!commitwouldbevalid(var_05)) + { + return 0; + } + + if(func_17E2()) + { + if(!isdefined(param_00)) + { + thread maps\_arcademode::arcademode_checkpoint_print(); + } + + func_17F7(var_05); + commitsave(var_05); + setdvar("ui_grenade_death","0"); + } + + return 1; +} + +//Function Number: 16 +autosave_now_trigger(param_00) +{ + param_00 waittill("trigger"); + maps\_utility::autosave_now(); +} + +//Function Number: 17 +func_17E2() +{ + if(!issavesuccessful()) + { + return 0; + } + + for(var_00 = 0;var_00 < level.players.size;var_00++) + { + var_01 = level.players[var_00]; + if(!var_01 autosavehealthcheck()) + { + return 0; + } + } + + if(!common_scripts\utility::flag("can_save")) + { + return 0; + } + + return 1; +} + +//Function Number: 18 +tryautosave(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if(common_scripts\utility::flag("disable_autosaves")) + { + return 0; + } + + level endon("nextmission"); + level.player endon("death"); + if(maps\_utility::func_E89()) + { + level.player2 endon("death"); + } + + level notify("trying_new_autosave"); + if(common_scripts\utility::flag("game_saving")) + { + return 0; + } + + if(isdefined(level.nextmission)) + { + return 0; + } + + var_06 = 1.25; + var_07 = 1.25; + if(isdefined(param_03) && param_03 < var_06 + var_07) + { + } + + if(!isdefined(param_05)) + { + param_05 = 0; + } + + if(!isdefined(param_02)) + { + param_02 = "$default"; + } + + if(!isdefined(param_04)) + { + param_04 = 0; + } + + common_scripts\utility::flag_set("game_saving"); + var_08 = getdescription(); + var_09 = gettime(); + for(;;) + { + if(autosavecheck(undefined,param_04)) + { + var_0A = savegamenocommit(param_00,var_08,param_02,param_05); + if(var_0A < 0) + { + break; + } + + wait 0.05; + if(issaverecentlyloaded()) + { + level.var_17C9 = gettime(); + break; + } + + wait var_06; + if(extra_autosave_checks_failed()) + { + continue; + } + + if(!autosavecheck(undefined,param_04)) + { + continue; + } + + wait var_07; + if(!func_17E6()) + { + continue; + } + + if(isdefined(param_03)) + { + if(gettime() > var_09 + param_03 * 1000) + { + break; + } + } + + if(!common_scripts\utility::flag("can_save")) + { + break; + } + + if(!commitwouldbevalid(var_0A)) + { + common_scripts\utility::flag_clear("game_saving"); + return 0; + } + + thread maps\_arcademode::arcademode_checkpoint_print(); + func_17F7(var_0A); + commitsave(var_0A); + level.var_17E4 = gettime(); + setdvar("ui_grenade_death","0"); + break; + } + + wait 0.25; + } + + common_scripts\utility::flag_clear("game_saving"); + return 1; +} + +//Function Number: 19 +extra_autosave_checks_failed() +{ + foreach(var_01 in level._extra_autosave_checks) + { + if(![[ var_01["func"] ]]()) + { + func_17DB("autosave failed: " + var_01["msg"]); + return 1; + } + } + + return 0; +} + +//Function Number: 20 +func_17E6() +{ + return autosavecheck(0,0); +} + +//Function Number: 21 +autosavecheck(param_00,param_01) +{ + if(isdefined(level.autosave_check_override)) + { + return [[ level.autosave_check_override ]](); + } + + if(isdefined(level.special_autosavecondition) && ![[ level.special_autosavecondition ]]()) + { + return 0; + } + + if(level.var_1291) + { + return 0; + } + + if(maps\_arcademode::arcademode_complete()) + { + return 0; + } + + if(!isdefined(param_00)) + { + param_00 = level.dopickyautosavechecks; + } + + if(!isdefined(param_01)) + { + param_01 = 0; + } + + if(param_01) + { + if(![[ level.global_callbacks["_autosave_stealthcheck"] ]]()) + { + return 0; + } + } + + for(var_02 = 0;var_02 < level.players.size;var_02++) + { + var_03 = level.players[var_02]; + if(!var_03 autosavehealthcheck()) + { + return 0; + } + + if(param_00 && !var_03 autosaveammocheck()) + { + return 0; + } + } + + if(level.autosave_threat_check_enabled) + { + if(!func_17F4(param_00)) + { + return 0; + } + } + + for(var_02 = 0;var_02 < level.players.size;var_02++) + { + var_03 = level.players[var_02]; + if(!var_03 autosaveplayercheck(param_00)) + { + return 0; + } + } + + if(isdefined(level.savehere) && !level.savehere) + { + return 0; + } + + if(isdefined(level.cansave) && !level.cansave) + { + return 0; + } + + if(!issavesuccessful()) + { + func_17DB("autosave failed: save call was unsuccessful"); + return 0; + } + + return 1; +} + +//Function Number: 22 +autosaveplayercheck(param_00) +{ + if(isdefined(level.ac130gunner) && level.ac130gunner == self) + { + return 1; + } + + if(self ismeleeing() && param_00) + { + func_17DB("autosave failed:player is meleeing"); + return 0; + } + + if(self isthrowinggrenade() && param_00) + { + func_17DB("autosave failed:player is throwing a grenade"); + return 0; + } + + if(self isfiring() && param_00) + { + func_17DB("autosave failed:player is firing"); + return 0; + } + + if(isdefined(self.shellshocked) && self.shellshocked) + { + func_17DB("autosave failed:player is in shellshock"); + return 0; + } + + if(common_scripts\utility::isflashed()) + { + func_17DB("autosave failed:player is flashbanged"); + return 0; + } + + return 1; +} + +//Function Number: 23 +autosaveammocheck() +{ + if(isdefined(level.ac130gunner) && level.ac130gunner == self) + { + return 1; + } + + var_00 = self getweaponslistprimaries(); + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + var_02 = self getfractionmaxammo(var_00[var_01]); + if(var_02 > 0.1) + { + return 1; + } + } + + func_17DB("autosave failed: ammo too low"); + return 0; +} + +//Function Number: 24 +autosavehealthcheck() +{ + if(isdefined(level.ac130gunner) && level.ac130gunner == self) + { + return 1; + } + + if(maps\_utility::ent_flag_exist("laststand_downed") && maps\_utility::ent_flag("laststand_downed")) + { + return 0; + } + + var_00 = self.health / self.maxhealth; + if(var_00 < 0.5) + { + return 0; + } + + if(common_scripts\utility::flag("_radiation_poisoning")) + { + return 0; + } + + if(maps\_utility::ent_flag("player_has_red_flashing_overlay")) + { + return 0; + } + + return 1; +} + +//Function Number: 25 +func_17F4(param_00) +{ + if(isdefined(level.ac130gunner) && level.ac130gunner == self) + { + return 1; + } + + var_01 = getaispeciesarray("bad_guys","all"); + foreach(var_03 in var_01) + { + if(!isdefined(var_03.enemy)) + { + continue; + } + + if(!isplayer(var_03.enemy)) + { + continue; + } + + if(var_03.type == "dog") + { + foreach(var_05 in level.players) + { + if(distance(var_03.origin,var_05.origin) < 384) + { + return 0; + } + } + + continue; + } + + if(isdefined(var_03.melee) && isdefined(var_03.melee.target) && isplayer(var_03.melee.target)) + { + return 0; + } + + var_07 = [[ level.autosave_proximity_threat_func ]](var_03); + if(var_07 == "return_even_if_low_accuracy") + { + return 0; + } + + if(var_03.finalaccuracy < 0.021 && var_03.finalaccuracy > -1) + { + continue; + } + + if(var_07 == "return") + { + return 0; + } + + if(var_07 == "none") + { + continue; + } + + if(var_03.a.lastshoottime > gettime() - 500) + { + if(param_00 || var_03 animscripts/utility::canseeenemy(0) && var_03 canshootenemy(0)) + { + return 0; + } + } + + if(isdefined(var_03.a.aimidlethread) && var_03 animscripts/utility::canseeenemy(0) && var_03 canshootenemy(0)) + { + return 0; + } + } + + if(maps\_utility::func_17F5()) + { + return 0; + } + + var_09 = getentarray("destructible","classname"); + foreach(var_0B in var_09) + { + if(!isdefined(var_0B.healthdrain)) + { + continue; + } + + foreach(var_05 in level.players) + { + if(distance(var_0B.origin,var_05.origin) < 400) + { + return 0; + } + } + } + + return 1; +} + +//Function Number: 26 +enemy_is_a_threat() +{ + if(self.finalaccuracy >= 0.021) + { + return 1; + } + + foreach(var_01 in level.players) + { + if(distance(self.origin,var_01.origin) < 500) + { + return 1; + } + } + + return 0; +} + +//Function Number: 27 +autosave_proximity_threat_func(param_00) +{ + foreach(var_02 in level.players) + { + var_03 = distance(param_00.origin,var_02.origin); + if(var_03 < 200) + { + return "return_even_if_low_accuracy"; + } + else if(var_03 < 360) + { + return "return"; + } + else if(var_03 < 1000) + { + return "threat_exists"; + } + } + + return "none"; +} + +//Function Number: 28 +func_17F7(param_00) +{ + if(!maps\_utility::is_default_start()) + { + return; + } + + var_01 = maps\_utility_code::get_leveltime(); + var_02 = var_01; + if(isdefined(level.recon_checkpoint_lasttime)) + { + var_02 = var_01 - level.recon_checkpoint_lasttime; + } + + level.recon_checkpoint_lasttime = var_01; + reconevent("script_checkpoint: id %d, leveltime %d, deltatime %d",param_00,var_01,var_02); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_bcs_location_trigs.gsc b/MW3/Xbox/SP/maps/_bcs_location_trigs.gsc new file mode 100644 index 0000000..724eb50 --- /dev/null +++ b/MW3/Xbox/SP/maps/_bcs_location_trigs.gsc @@ -0,0 +1,463 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_bcs_location_trigs.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 24 + * Decompile Time: 373 ms + * Timestamp: 10/27/2023 2:31:48 AM +*******************************************************************/ + +//Function Number: 1 +bcs_location_trigs_init() +{ + level.bcs_location_mappings = []; + bcs_location_trigger_mapping(); + bcs_trigs_assign_aliases(); + level.bcs_location_mappings = undefined; +} + +//Function Number: 2 +bcs_trigs_assign_aliases() +{ + anim.bcs_locations = []; + var_00 = getentarray(); + var_01 = []; + foreach(var_03 in var_00) + { + if(isdefined(var_03.classname) && issubstr(var_03.classname,"trigger_multiple_bcs")) + { + var_01[var_01.size] = var_03; + } + } + + foreach(var_03 in var_01) + { + var_06 = parselocationaliases(level.bcs_location_mappings[var_03.classname]); + if(var_06.size > 1) + { + var_06 = maps\_utility::array_randomize(var_06); + } + + var_03.locationaliases = var_06; + } + + anim.bcs_locations = var_01; +} + +//Function Number: 3 +parselocationaliases(param_00) +{ + var_01 = strtok(param_00," "); + return var_01; +} + +//Function Number: 4 +add_bcs_location_mapping(param_00,param_01) +{ + if(isdefined(level.bcs_location_mappings[param_00])) + { + var_02 = level.bcs_location_mappings[param_00]; + var_03 = parselocationaliases(var_02); + var_04 = parselocationaliases(param_01); + foreach(var_06 in var_04) + { + foreach(var_08 in var_03) + { + if(var_06 == var_08) + { + return; + } + } + } + + var_02 = var_02 + " " + param_01; + level.bcs_location_mappings[param_00] = var_02; + return; + } + + level.bcs_location_mappings[var_09] = var_0A; +} + +//Function Number: 5 +bcs_location_trigger_mapping() +{ + generic_locations(); + vehicles(); + landmarks(); + tibet(); + ny_manhattan(); + ny_harbor(); + hijack(); + warlord(); + london(); + payback(); + hamburg(); + paris_a(); + paris_b(); + paris_ac130(); + prague(); + berlin(); + dubai(); +} + +//Function Number: 6 +generic_locations() +{ + add_bcs_location_mapping("trigger_multiple_bcs_uk_building_1stfloor","loc_1st_report"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_building_2ndfloor","loc_2nd_report"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_building_1stfloor_door_left","loc_door_1st_left_report"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_building_1stfloor_door","loc_door_1st_report"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_building_1stfloor_door_right","loc_door_1st_right_report"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_building_2ndfloor_door","loc_door_2nd_report"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_building_door","loc_door_report"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_building_1stfloor_window_left","loc_wndw_1st_left_report"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_building_1stfloor_window","loc_wndw_1st_report"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_building_1stfloor_window_right","loc_wndw_1st_right_report"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_building_2ndfloor_window_left","loc_wndw_2nd_left_report"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_building_2ndfloor_window","loc_wndw_2nd_report"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_building_2ndfloor_window_right","loc_wndw_2nd_right_report"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_callout_loc_door","callout_loc_door_report"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_callout_loc_door_1st","callout_loc_door_1st_report"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_callout_loc_door_1st_right","callout_loc_door_1st_right_report"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_callout_loc_door_1st_left","callout_loc_door_1st_left_report"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_callout_loc_door_2nd","callout_loc_door_2nd_report"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_callout_loc_wndw_1st","callout_loc_wndw_1st_report"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_callout_loc_wndw_1st_left","callout_loc_wndw_1st_left_report"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_callout_loc_wndw_1st_right","callout_loc_wndw_1st_right_report"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_callout_loc_1st","callout_loc_1st_report"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_callout_loc_2nd","callout_loc_2nd_report"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_callout_loc_wndw_2nd","callout_loc_wndw_2nd_report"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_callout_loc_wndw_2nd_left","callout_loc_wndw_2nd_left_report"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_callout_loc_wndw_2nd_right","callout_loc_wndw_2nd_right_report"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_callout_loc_wndw_3rd","callout_loc_wndw_3rd_report"); +} + +//Function Number: 7 +landmarks() +{ + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_ac_generic","loc_ac_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_airdrop_generic","loc_airdrop_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_alley_generic","loc_alley_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_balcony_2nd","loc_balcony_2nd"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_balcony_3rd","loc_balcony_3rd"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_bank_generic","loc_bank_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_bar_generic","loc_bar_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_barrels_generic","loc_barrels_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_barricade_generic","loc_barricade_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_barrier_hesco","loc_barrier_hesco"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_barrier_orange","loc_barrier_orange"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_bin_recycle","loc_bin_recycle"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_bookcase_generic","loc_bookcase_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_building_red","loc_building_red"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_bulkhead_generic","loc_bulkhead_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_bunk_generic","loc_bunk_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_bus_generic","loc_bus_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_bus_inside","loc_bus_inside"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_car_blue","loc_car_blue"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_car_burning","loc_car_burning"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_car_destroyed","loc_car_destroyed"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_car_generic","loc_car_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_car_green","loc_car_green"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_car_overturned","loc_car_overturned"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_car_parked","loc_car_parked"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_car_police","loc_car_police"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_car_yellow","loc_car_yellow"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_catwalk_generic","loc_catwalk_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_chair_blue","loc_chair_blue"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_column_generic","loc_column_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_console_generic","loc_console_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_container_generic","loc_container_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_container_red","loc_container_red"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_couch_blue","loc_couch_blue"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_couch_generic","loc_couch_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_crates_ammo","loc_crates_ammo"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_crates_generic","loc_crates_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_cubicles_left","loc_cubicles_left"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_cubicles_right","loc_cubicles_right"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_deck_generic","loc_deck_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_door_back","loc_door_back"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_door_front","loc_door_front"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_dumpster_generic","loc_dumpster_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_embassy_1st","loc_embassy_1st"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_embassy_3rd","loc_embassy_3rd"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_engine_generic","loc_engine_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_fan_exhaust","loc_fan_exhaust"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_gate_generic","loc_gate_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_hill_generic","loc_hill_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_machine_copy","loc_machine_copy"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_mg_generic","loc_mg_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_patio_generic","loc_patio_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_pipe_generic","loc_pipe_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_planter_generic","loc_planter_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_rack_bike","loc_rack_bike"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_railing_generic","loc_railing_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_ramp_down","loc_ramp_down"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_rooftop_generic","loc_rooftop_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_room_conf","loc_room_conf"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_room_middle","loc_room_middle"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_rubble_generic","loc_rubble_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_sandbags_generic","loc_sandbags_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_scaffolding_generic","loc_scaffolding_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_car_black","loc_car_black"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_shop_book","loc_shop_book"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_shop_cafe","loc_shop_cafe"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_shop_coffee","loc_shop_coffee"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_shop_restaurant","loc_shop_restaurant"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_shop_souvenir","loc_shop_souvenir"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_staircase_generic","loc_staircase_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_stairs_bottom","loc_stairs_bottom"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_stairs_generic","loc_stairs_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_stairs_top","loc_stairs_top"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_stand_hotdog","loc_stand_hotdog"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_stand_news","loc_stand_news"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_stand_trading","loc_stand_trading"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_statue_generic","loc_statue_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_stryker_destroyed","loc_stryker_destroyed"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_subway_entrance","loc_subway_entrance"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_table_computer","loc_table_computer"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_table_generic","loc_table_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_tanks_generic","loc_tanks_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_taxi_destroyed","loc_taxi_destroyed"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_taxi_generic","loc_taxi_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_tires_large","loc_tires_large"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_tower_jamming","loc_tower_jamming"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_truck_white","loc_truck_white"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_van_blue","loc_van_blue"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_vehicle_btr","loc_vehicle_btr"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_vehicle_dumptruck","loc_vehicle_dumptruck"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_vehicle_gaz","loc_vehicle_gaz"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_vehicle_hind","loc_vehicle_hind"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_vehicle_snowcat","loc_vehicle_snowcat"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_vehicle_snowmobile","loc_vehicle_snowmobile"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_wall_low","loc_wall_low"); + add_bcs_location_mapping("trigger_multiple_bcs_df_generic_loc_water_cooler","loc_water_cooler"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_wndw_3rd","callout_loc_wndw_3rd"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_alley_generic","loc_alley_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_arch_generic","loc_arch_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_balcony_2nd","loc_balcony_2nd"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_balcony_3rd","loc_balcony_3rd"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_balcony_generic","loc_balcony_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_barrels_generic","loc_barrels_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_boat_wooden","loc_boat_wooden"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_car_burning","loc_car_burning"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_car_generic","loc_car_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_car_green","loc_car_green"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_car_overturned","loc_car_overturned"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_car_yellow","loc_car_yellow"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_carport_generic","loc_carport_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_cart_generic","loc_cart_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_catwalk_generic","loc_catwalk_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_container_cargo","loc_container_cargo"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_couch_generic","loc_couch_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_counter_generic","loc_counter_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_crates_ammo","loc_crates_ammo"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_crates_generic","loc_crates_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_door_back","loc_door_back"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_door_front","loc_door_front"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_hull_3rd","loc_hull_3rd"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_market_stalls","loc_market_stalls"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_pier_far","loc_pier_far"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_pier_generic","loc_pier_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_rock_big","loc_rock_big"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_rooftop_generic","loc_rooftop_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_stairs_bottom","loc_stairs_bottom"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_stairs_generic","loc_stairs_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_stairs_top","loc_stairs_top"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_tank_welding","loc_tank_welding"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_truck_white","loc_truck_white"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_wall_broken","loc_wall_broken"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_generic_wall_generic","loc_wall_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_generic_1st","callout_loc_1st"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_generic_2nd","callout_loc_2nd"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_generic_door_1st_left","callout_loc_door_1st_left"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_generic_door_1st_right","callout_loc_door_1st_right"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_generic_door_1st","callout_loc_door_1st"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_generic_door_2nd","callout_loc_door_2nd"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_generic_door","callout_loc_door"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_generic_wndw_1st_left","callout_loc_wndw_1st_left"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_generic_wndw_1st_right","callout_loc_wndw_1st_right"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_generic_wndw_1st","callout_loc_wndw_1st"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_generic_wndw_2nd_left","callout_loc_wndw_2nd_left"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_generic_wndw_2nd_right","callout_loc_wndw_2nd_right"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_generic_wndw_2nd","callout_loc_wndw_2nd"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_generic_container_cargo","loc_container_cargo"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_generic_balcony_generic","loc_balcony_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_generic_boat_wooden","loc_boat_wooden"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_generic_tanks_welding","loc_tanks_welding"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_generic_carport_generic","loc_carport_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_generic_rock_big","loc_rock_big"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_generic_wall_broken","loc_wall_broken"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_generic_bin_trash","loc_bin_trash"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_generic_fridge_generic","loc_fridge_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_generic_washing_machine","loc_washing_machine"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_generic_tire_stack","loc_tire_stack"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_generic_mattress_generic","loc_mattress_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_generic_umbrella_generic","loc_umbrella_generic"); +} + +//Function Number: 8 +vehicles() +{ +} + +//Function Number: 9 +tibet() +{ +} + +//Function Number: 10 +ny_manhattan() +{ + add_bcs_location_mapping("trigger_multiple_bcs_df_ny_manhattan_lm_memorial_building","lm_memorial_building"); + add_bcs_location_mapping("trigger_multiple_bcs_df_ny_manhattan_loc_cases_generic","loc_cases_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_df_ny_manhattan_loc_cases_left","loc_cases_left"); + add_bcs_location_mapping("trigger_multiple_bcs_df_ny_manhattan_loc_cases_right","loc_cases_right"); +} + +//Function Number: 11 +ny_harbor() +{ + add_bcs_location_mapping("trigger_multiple_bcs_df_ny_harbor_loc_reactor_generic","loc_reactor_generic"); +} + +//Function Number: 12 +hijack() +{ +} + +//Function Number: 13 +warlord() +{ + add_bcs_location_mapping("trigger_multiple_bcs_tf_warlord_church_generic","loc_church_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_warlord_shop_butcher","loc_shop_butcher"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_warlord_shop_pharmacy","loc_shop_pharmacy"); +} + +//Function Number: 14 +london() +{ + add_bcs_location_mapping("trigger_multiple_bcs_uk_landmark_barrels","loc_barrels_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_landmark_barrier","loc_barrier_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_landmark_bulldozer","loc_bulldozer_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_vehicle_car_black","loc_car_black"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_landmark_catwalk","loc_catwalk_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_landmark_cinder_blocks","loc_cinder_blocks"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_landmark_container","loc_container_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_landmark_container_open","loc_container_open"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_landmark_container_small","loc_container_small"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_landmark_crate_blue","loc_crate_blue"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_landmark_crate","loc_crate_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_landmark_dumpster_red","loc_dumpster_red"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_landmark_flatbed","loc_flatbed_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_landmark_loading_bay","loc_loading_bay"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_landmark_pipe_cement","loc_pipe_cement"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_landmark_platform_left","loc_platform_left"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_landmark_porta_john","loc_porta_john"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_landmark_scaffolding","loc_scaffolding_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_landmark_stairs_down","loc_stairs_down"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_landmark_stairs","loc_stairs_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_landmark_stairs_top","loc_stairs_top"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_vehicle_truck_charity","loc_truck_charity"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_vehicle_truck","loc_truck_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_vehicle_target","loc_vehicle_target"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_landmark_wall_low","loc_wall_low"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_landmark_warehouse","loc_warehouse_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_landmark_warehouse_south","loc_warehouse_south"); + add_bcs_location_mapping("trigger_multiple_bcs_uk_landmark_warehouse_west","loc_warehouse_west"); +} + +//Function Number: 15 +payback() +{ + add_bcs_location_mapping("trigger_multiple_bcs_pc_payback_lm_building_tall","lm_building_tall"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_payback_lm_building_white","lm_building_white"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_payback_ship_cargo","loc_ship_cargo"); + add_bcs_location_mapping("trigger_multiple_bcs_pc_payback_shipwreck_generic","loc_shipwreck_generic"); +} + +//Function Number: 16 +hamburg() +{ +} + +//Function Number: 17 +paris_a() +{ +} + +//Function Number: 18 +paris_b() +{ +} + +//Function Number: 19 +paris_ac130() +{ + add_bcs_location_mapping("trigger_multiple_bcs_df_parisAC130_lm_embassy","lm_embassy"); + add_bcs_location_mapping("trigger_multiple_bcs_df_parisAC130_lm_monument_courtyard","lm_monument_courtyard"); + add_bcs_location_mapping("trigger_multiple_bcs_df_parisAC130_loc_monument_top","loc_monument_top"); +} + +//Function Number: 20 +prague() +{ + add_bcs_location_mapping("trigger_multiple_bcs_tf_prague_sign_large","loc_sign_large"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_prague_car_white","loc_car_white"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_prague_shops_east","loc_shops_east"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_prague_btr_crashed","loc_btr_crashed"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_prague_bldg_west","loc_bldg_west"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_prague_cafe_tables","loc_cafe_tables"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_prague_bldg_north","loc_bldg_north"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_prague_antique_shop","loc_antique_shop"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_prague_pillars","loc_pillars"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_prague_barricades","loc_barricades"); +} + +//Function Number: 21 +berlin() +{ + add_bcs_location_mapping("trigger_multiple_bcs_df_berlin_lm_kitchen_back","lm_kitchen_back"); +} + +//Function Number: 22 +rescue() +{ +} + +//Function Number: 23 +rescue_2() +{ + add_bcs_location_mapping("trigger_multiple_bcs_tf_rescue_snowcat_generic","loc_snowcat_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_rescue_dumptruck_generic","loc_dumptruck_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_rescue_building_red","loc_building_red"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_rescue_snowmobile_generic","loc_snowmobile_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_rescue_scaffolding_generic","loc_scaffolding_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_rescue_container_red","loc_container_red"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_rescue_tires_large","loc_tires_large"); +} + +//Function Number: 24 +dubai() +{ + add_bcs_location_mapping("trigger_multiple_bcs_tf_dubai_arch_generic","loc_arch_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_dubai_bar","loc_bar"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_dubai_barricades","loc_barricades"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_dubai_car_generic","loc_car_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_dubai_chair_generic","loc_chair_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_dubai_couch_generic","loc_couch_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_dubai_counter_generic","loc_counter_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_dubai_doorway","loc_doorway"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_dubai_escalator_coming_down","loc_escalator_coming_down"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_dubai_escalator_near_right","loc_escalator_near_right"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_dubai_escalator_near_left","loc_escalator_near_left"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_dubai_escalator_top","loc_escalator_top"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_dubai_fountain_generic","loc_fountain_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_dubai_lamppost_generic","loc_lamppost_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_dubai_pillar_generic","loc_pillar_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_dubai_pillar_left","loc_pillar_left"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_dubai_pillar_right","loc_pillar_right"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_dubai_planter_generic","loc_planter_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_dubai_sedan_generic","loc_sedan_generic"); + add_bcs_location_mapping("trigger_multiple_bcs_tf_dubai_suv_generic","loc_suv_generic"); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_breach.gsc b/MW3/Xbox/SP/maps/_breach.gsc new file mode 100644 index 0000000..915ac18 --- /dev/null +++ b/MW3/Xbox/SP/maps/_breach.gsc @@ -0,0 +1,744 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_breach.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 24 + * Decompile Time: 437 ms + * Timestamp: 10/27/2023 2:34:12 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + level._effect["_breach_doorbreach_detpack"] = loadfx("explosions/exp_pack_doorbreach"); + level._effect["_breach_doorbreach_kick"] = loadfx("dust/door_kick"); + level.scr_sound["breach_wooden_door"] = "detpack_explo_main"; + level.scr_sound["breach_wood_door_kick"] = "wood_door_kick"; + common_scripts\utility::flag_init("begin_the_breach"); +} + +//Function Number: 2 +func_3B14(param_00,param_01,param_02,param_03,param_04,param_05) +{ + self endon("breach_abort"); + if(isdefined(param_05) && param_05 == 0) + { + level.fire_notetrack_functions["scripted"] = ::func_3B36; + } + + self.var_3B15 = 0; + self.closestai = undefined; + self.var_3B17 = undefined; + self.breached = 0; + self.var_3B19 = 0; + self.var_3B1A = 0; + self.var_3B1B = 0; + self.readytobreach = 0; + self.var_3B1D = 0; + self.var_3B1E = 0; + self.cleared = 0; + self.var_3B20 = 1; + self.var_3B21 = 0; + self.hostilesspawned = 0; + var_06 = getentarray(self.targetname,"targetname"); + var_07 = self.targetname; + self.sbadplacename = "badplace_" + var_07; + self.var_3B24 = getent("badplace_" + var_07,"targetname"); + if(isdefined(self.var_3B24)) + { + } + + self.var_3B25 = getent("trigger_" + var_07,"targetname"); + if(!isdefined(param_04)) + { + param_04 = 1; + } + + if(isdefined(self.var_3B25)) + { + switch(self.var_3B25.classname) + { + case "trigger_use": + self.triggerhintstring = param_02; + break; + + case "trigger_use_touch": + self.triggerhintstring = param_02; + break; + + case "trigger_radius": + break; + + case "trigger_multiple": + break; + + default: + break; + } + } + + switch(param_01) + { + case "explosive_breach_left": + break; + + case "shotgunhinges_breach_left": + break; + + case "flash_breach_no_door_right": + self.var_3B20 = 0; + self.var_3B21 = 1; + break; + + default: + break; + } + + if(self.var_3B20 == 1) + { + self.edoor = getent(self.script_linkto,"script_linkname"); + if(self.edoor.classname == "script_model") + { + self.var_3B17 = spawn("script_origin",self.edoor.origin); + self.var_3B17.angles = self.edoor.angles; + } + else if(self.edoor.classname == "script_brushmodel") + { + self.var_3B17 = getent(self.edoor.target,"targetname"); + self.edoor.vector = anglestoforward(self.var_3B17.angles); + } + + self.var_3B17.type = "Cover Right"; + self.var_3B29 = getent(self.edoor.script_linkto,"script_linkname"); + self.iexplodernum = self.var_3B29.script_exploder; + } + else if(self.var_3B20 == 0) + { + self.var_3B17 = getent(self.script_linkto,"script_linkname"); + } + + if(self.var_3B21 == 1) + { + self.var_3B2B = getent("flashthrow_" + var_07,"targetname"); + self.var_3B2C = getent(self.var_3B2B.target,"targetname"); + } + + thread breach_abort(param_00); + thread func_3B40(param_00); + thread func_3B42(param_01,param_04); + var_08 = 0; + for(var_09 = 0;var_09 < param_00.size;var_09++) + { + if(isdefined(param_00[var_09].firstbreacher)) + { + var_08++; + self.closestai = param_00[var_09]; + } + } + + if(var_08 > 0) + { + } + else + { + self.closestai = maps\_utility::getclosest(self.var_3B17.origin,param_00); + } + + if(param_00.size == 1) + { + self.var_3B1B = 1; + } + + for(var_09 = 0;var_09 < param_00.size;var_09++) + { + param_00[var_09] thread func_3B30(self,param_01,param_05); + } + + while(self.var_3B19 < param_00.size) + { + wait 0.05; + } + + self notify("ready_to_breach"); + self.readytobreach = 1; + if(isdefined(self.var_3B25)) + { + self.var_3B25 thread breach_trigger_think(self); + self waittill("execute_the_breach"); + } + else + { + self notify("execute_the_breach"); + } + + common_scripts\utility::flag_set("begin_the_breach"); + self.var_3B1E = 1; + if(isdefined(param_03) && param_03 == 1) + { + var_0A = getentarray("hostiles_" + var_07,"targetname"); + self waittill("spawn_hostiles"); + spawnbreachhostiles(var_0A); + self.hostilesspawned = 1; + } + + if(isdefined(self.var_3B24)) + { + badplace_cylinder(self.sbadplacename,-1,self.var_3B24.origin,self.var_3B24.radius,200,"bad_guys"); + } + + var_0B = getaiarray("bad_guys"); + var_0C = []; + var_09 = 0; + while(var_09 < var_0B.size) + { + if(var_0B[var_09] istouching(self)) + { + } + + var_0B++ = var_41[var_0C.size]; + } + + if(var_41.size > 0) + { + common_scripts\utility::array_thread(var_41,::func_3B39,self); + } + + while(!self.var_3B1D) + { + wait 0.05; + } + + self notify("breach_complete",var_0B[var_09]); + if(!var_41.size) + { + return; + } + + while(!self.cleared) + { + wait 0.05; + for(var_0B = 0;var_0B < var_41.size;var_0B++) + { + if(!isalive(var_41[var_0B])) + { + var_41 = common_scripts\utility::array_remove(var_41,var_41[var_0B]); + } + + if(var_41.size == 0) + { + self.cleared = 1; + } + } + } +} + +//Function Number: 3 +breach_dont_fire() +{ + while(self.var_3B2F == 1) + { + self waittillmatch("fire","single anim"); + self.a.lastshoottime = gettime(); + } +} + +//Function Number: 4 +func_3B30(param_00,param_01,param_02) +{ + self.var_3B2F = 1; + self.var_3B31 = undefined; + if(!isdefined(param_02)) + { + param_02 = 1; + } + + self pushplayer(1); + thread func_3B45(); + param_00 endon("breach_abort"); + self.ender = "stop_idle_" + self getentitynumber(); + var_03 = undefined; + var_04 = undefined; + var_05 = undefined; + var_06 = undefined; + var_07 = undefined; + if(self == param_00.closestai) + { + var_03 = "01"; + } + else + { + var_03 = "02"; + } + + if(param_00.var_3B1B == 1 && param_01 == "explosive_breach_left") + { + var_03 = "02"; + } + + switch(param_01) + { + case "explosive_breach_left": + if(isdefined(self.usebreachapproach) && self.usebreachapproach == 0) + { + var_04 = "detcord_stack_left_start_no_approach_" + var_03; + } + else + { + var_04 = "detcord_stack_left_start_" + var_03; + } + + var_05 = "detcord_stack_leftidle_" + var_03; + var_06 = "detcord_stack_leftbreach_" + var_03; + break; + + case "shotgunhinges_breach_left": + var_04 = "shotgunhinges_breach_left_stack_start_" + var_03; + var_05 = "shotgunhinges_breach_left_stack_idle_" + var_03; + var_06 = "shotgunhinges_breach_left_stack_breach_" + var_03; + break; + + case "flash_breach_no_door_right": + if(param_00.var_3B1B == 1) + { + var_04 = "flash_stack_right_start_single"; + var_05 = "flash_stack_right_idle_single"; + var_06 = "flash_stack_right_breach_single"; + var_07 = "flash_stack_right_flash_single"; + } + else + { + var_04 = "flash_stack_right_start_" + var_03; + var_05 = "flash_stack_right_idle_" + var_03; + var_06 = "flash_stack_right_breach_" + var_03; + var_07 = "flash_stack_right_flash_" + var_03; + } + break; + + default: + break; + } + + breach_set_goaladius(64); + if(!isdefined(self.usebreachapproach) || self.usebreachapproach) + { + param_00.var_3B17 maps\_anim::anim_generic_reach(self,var_04); + } + else + { + self.scriptedarrivalent = param_00.var_3B17; + param_00.var_3B17 maps\_anim::anim_generic_reach_and_arrive(self,var_04); + } + + param_00.var_3B17 maps\_anim::anim_generic(self,var_04); + param_00.var_3B17 thread maps\_anim::anim_generic_loop(self,var_05,self.ender); + self.var_3B33 = self.origin; + param_00.var_3B19++; + self.scriptedarrivalent = undefined; + param_00 waittill("execute_the_breach"); + if(!param_00.var_3B15 && isdefined(var_07)) + { + param_00.var_3B17 notify(self.ender); + param_00.var_3B17 thread maps\_anim::anim_generic(self,var_07); + wait 1; + if(var_03 == "02" || param_00.var_3B1B == 1) + { + var_08 = "J_Mid_LE_1"; + self attach("projectile_m84_flashbang_grenade",var_08); + var_09 = self.grenadeweapon; + self.grenadeweapon = "flash_grenade"; + self.grenadeammo++; + if(var_03 == "02") + { + self waittillmatch("grenade_throw","single anim"); + } + + if(param_00.var_3B1B == 1 && var_03 == "01") + { + self waittillmatch("fire","single anim"); + } + + self magicgrenade(param_00.var_3B2B.origin,param_00.var_3B2C.origin,level.var_3B34); + self detach("projectile_m84_flashbang_grenade",var_08); + self.grenadeweapon = var_09; + self.grenadeammo = 0; + } + + self waittillmatch("end","single anim"); + param_00.var_3B17 thread maps\_anim::anim_generic_loop(self,var_05,self.ender); + wait 0.1; + } + + param_00.var_3B17 notify(self.ender); + if(param_02 == 0) + { + self.var_3B31 = 1; + } + + param_00.var_3B17 thread maps\_anim::anim_generic(self,var_06); + if(param_01 == "explosive_breach_left") + { + if(var_03 == "02") + { + thread detcord_logic(param_00); + self waittillmatch("pull fuse","single anim"); + wait 1; + param_00 notify("spawn_hostiles"); + param_00 notify("detpack_about_to_blow"); + self waittillmatch("explosion","single anim"); + param_00 notify("detpack_detonated"); + param_00.breached = 1; + param_00.edoor thread door_open("explosive",param_00); + param_00 notify("play_breach_fx"); + } + } + else if(param_01 == "shotgunhinges_breach_left") + { + if(var_03 == "01") + { + param_00 notify("spawn_hostiles"); + self waittillmatch("kick","single anim"); + param_00.edoor thread door_open("shotgun",param_00); + param_00 notify("play_breach_fx"); + } + } + else if(param_01 == "flash_breach_no_door_right") + { + } + + self waittillmatch("end","single anim"); + self notify("breach_complete"); + if(param_02 == 0) + { + self.var_3B31 = undefined; + } + + if(isdefined(level.friendly_breach_thread)) + { + self thread [[ level.friendly_breach_thread ]](param_00); + } + + param_00.var_3B1D = 1; + self pushplayer(0); + breach_reset_animname(); + while(!param_00.cleared) + { + wait 0.05; + } + + self.var_3B2F = 0; +} + +//Function Number: 5 +func_3B36() +{ + if(isdefined(self.var_3B31)) + { + return; + } + + animscripts/notetracks::fire_straight(); +} + +//Function Number: 6 +detcord_logic(param_00) +{ + thread sound_effect_play(param_00); + self waittillmatch("attach prop right","single anim"); + var_01 = "TAG_INHAND"; + self attach("weapon_detcord",var_01); + self waittillmatch("detach prop right","single anim"); + var_02 = self gettagorigin(var_01); + var_03 = self gettagangles(var_01); + self detach("weapon_detcord",var_01); + var_04 = spawn("script_model",var_02); + var_04 setmodel("weapon_detcord"); + var_04.angles = var_03; + param_00 waittill("detpack_detonated"); + radiusdamage(var_04.origin,64,50,25); + var_04 delete(); +} + +//Function Number: 7 +sound_effect_play(param_00) +{ + self waittillmatch("sound effect","single anim"); + thread common_scripts\utility::play_sound_in_space("detpack_plant_arming",param_00.var_3B17.origin); +} + +//Function Number: 8 +func_3B39(param_00) +{ + self endon("death"); + param_00 endon("breach_aborted"); + param_00 waittill("detpack_detonated"); + if(distance(self.origin,param_00.var_3B17.origin) <= level.detpackstunradius) + { + level.stunnedanimnumber++; + if(level.stunnedanimnumber > 2) + { + level.stunnedanimnumber = 1; + } + + var_01 = "exposed_flashbang_v" + level.stunnedanimnumber; + self.allowdeath = 1; + maps\_anim::anim_generic_custom_animmode(self,"gravity",var_01); + breach_reset_animname(); + } +} + +//Function Number: 9 +breach_trigger_think(param_00) +{ + param_00 endon("execute_the_breach"); + param_00 endon("breach_aborted"); + thread func_3B3D(param_00); + self waittill("trigger"); + param_00 notify("execute_the_breach"); +} + +//Function Number: 10 +func_3B3D(param_00) +{ + param_00 waittill("execute_the_breach"); + common_scripts\utility::trigger_off(); + if(isdefined(param_00.var_3B3E)) + { + param_00.var_3B3E delete(); + } +} + +//Function Number: 11 +breach_abort(param_00) +{ + self endon("breach_complete"); + self waittill("breach_abort"); + self.cleared = 1; + thread func_3B40(param_00); +} + +//Function Number: 12 +func_3B40(param_00) +{ + while(!self.cleared) + { + wait 0.05; + } + + if(isdefined(self.var_3B24)) + { + badplace_delete(self.sbadplacename); + } + + while(!self.cleared) + { + wait 0.05; + } + + common_scripts\utility::array_thread(param_00,::func_3B41,self); +} + +//Function Number: 13 +func_3B41(param_00) +{ + self endon("death"); + breach_reset_animname(); + func_3B4D(); + param_00.var_3B17 notify(self.ender); + self notify("stop_infinite_ammo"); + self pushplayer(0); +} + +//Function Number: 14 +func_3B42(param_00,param_01) +{ + self endon("breach_aborted"); + self endon("breach_complete"); + switch(param_00) + { + case "explosive_breach_left": + self waittill("play_breach_fx"); + common_scripts\utility::exploder(self.iexplodernum); + thread common_scripts\utility::play_sound_in_space(level.scr_sound["breach_wooden_door"],self.var_3B29.origin); + if(param_01) + { + playfx(level._effect["_breach_doorbreach_detpack"],self.var_3B29.origin,anglestoforward(self.var_3B29.angles)); + } + break; + + case "shotgunhinges_breach_left": + self waittill("play_breach_fx"); + common_scripts\utility::exploder(self.iexplodernum); + if(param_01) + { + playfx(level._effect["_breach_doorbreach_kick"],self.var_3B29.origin,anglestoforward(self.var_3B29.angles)); + } + break; + + case "flash_breach_no_door_right": + break; + + default: + break; + } +} + +//Function Number: 15 +func_3B43(param_00) +{ + var_01 = param_00 dospawn(); + maps\_utility::func_F77(var_01); + return var_01; +} + +//Function Number: 16 +spawnbreachhostiles(param_00) +{ + var_01 = []; + for(var_02 = 0;var_02 < param_00.size;var_02++) + { + var_03 = func_3B43(param_00[var_02]); + var_01[var_01.size] = var_03; + } + + return var_01; +} + +//Function Number: 17 +func_3B45() +{ + self endon("death"); + self endon("stop_infinite_ammo"); + while(isdefined(self.weapon)) + { + if(isdefined(self.weapon) && self.weapon == "none") + { + break; + } + + self.bulletsinclip = weaponclipsize(self.weapon); + wait 0.5; + } +} + +//Function Number: 18 +door_open(param_00,param_01,param_02) +{ + if(!isdefined(param_02)) + { + param_02 = 1; + } + + if(param_02 == 1) + { + self playsound(level.scr_sound["breach_wood_door_kick"]); + } + + switch(param_00) + { + case "explosive": + thread func_3B4A(param_01.var_3B17); + func_3B49(); + self playsound(level.scr_sound["breach_wooden_door"]); + earthquake(0.4,1,self.origin,1000); + radiusdamage(self.origin,56,level.maxdetpackdamage,level.var_3B47); + break; + + case "shotgun": + thread func_3B4A(param_01.var_3B17); + func_3B49(); + self playsound(level.scr_sound["breach_wooden_door"]); + break; + } +} + +//Function Number: 19 +func_3B49() +{ + if(self.classname == "script_brushmodel") + { + self connectpaths(); + return; + } + + var_00 = getent(self.target,"targetname"); + var_00 hide(); + var_00 notsolid(); + var_00 connectpaths(); +} + +//Function Number: 20 +func_3B4A(param_00) +{ + var_01 = undefined; + if(self.classname == "script_model") + { + var_01 = anglestoforward(self.angles); + } + else if(self.classname == "script_brushmodel") + { + var_01 = self.vector; + } + else + { + } + + var_02 = (var_01[0] * 20,var_01[1] * 20,var_01[2] * 20); + self moveto(self.origin + var_02,0.5,0,0.5); + var_03 = spawn("script_origin",(0,0,0)); + var_03.angles = param_00.angles; + var_03.origin = (self.origin[0],self.origin[1],param_00.origin[2]); + self linkto(var_03); + var_03 rotatepitch(90,0.45,0.4); + wait 0.45; + var_03 rotatepitch(-4,0.2,0,0.2); + wait 0.2; + var_03 rotatepitch(4,0.15,0.15); + wait 0.15; + self unlink(); + var_03 delete(); +} + +//Function Number: 21 +breach_set_goaladius(param_00) +{ + if(!isdefined(self.var_3B4C)) + { + self.var_3B4C = self.goalradius; + } + + self.goalradius = param_00; +} + +//Function Number: 22 +func_3B4D() +{ + if(isdefined(self.var_3B4C)) + { + self.goalradius = self.var_3B4C; + } + + self.var_3B4C = undefined; +} + +//Function Number: 23 +breach_set_animname(param_00) +{ + if(!isdefined(self.old_animname)) + { + self.old_animname = self.animname; + } + + self.animname = param_00; +} + +//Function Number: 24 +breach_reset_animname() +{ + if(isdefined(self.old_animname)) + { + self.animname = self.old_animname; + } + + self.old_animname = undefined; +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_briefing.gsc b/MW3/Xbox/SP/maps/_briefing.gsc new file mode 100644 index 0000000..c5cdcb3 --- /dev/null +++ b/MW3/Xbox/SP/maps/_briefing.gsc @@ -0,0 +1,369 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_briefing.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 15 + * Decompile Time: 261 ms + * Timestamp: 10/27/2023 2:34:16 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + setsaveddvar("hud_drawhud",0); + level.script = tolower(getdvar("mapname")); + if(!isdefined(level.var_3B51)) + { + level.var_3B51 = []; + } + + var_00 = getentarray("player","classname")[0]; + setsaveddvar("g_speed",0); + var_00 setviewmodel("viewmodel_hands_cloth"); + precacheshader("black"); + var_01 = 0; + for(var_02 = 0;var_02 < level.slide.size;var_02++) + { + if(isdefined(level.slide[var_02]["movie"])) + { + var_01 = 1; + break; + } + } + + if(var_01) + { + wait 0.05; + var_00 func_3B68(0); + return; + } + + precachestring(&"SCRIPT_PLATFORM_FIRE_TO_SKIP"); + for(var_03 = 0;var_03 < level.slide.size;var_03++) + { + if(isdefined(level.slide[var_03]["image"])) + { + precacheshader(level.slide[var_03]["image"]); + } + } + + var_00 thread skipthebriefing(); + var_00 dothebriefing(); + var_00 func_3B68(0); +} + +//Function Number: 2 +start(param_00) +{ + level.var_3B53 = 1; + level.var_3B54 = 0; + level.var_3B55 = "A"; + if(isdefined(level.imagea)) + { + level.imagea destroy(); + } + + if(isdefined(level.var_3B57)) + { + level.var_3B57 destroy(); + } + + if(isdefined(level.var_3B58)) + { + level.var_3B58 destroy(); + } + + if(isdefined(level.var_3B59)) + { + level.var_3B59 destroy(); + } + + if(!isdefined(param_00) || !param_00) + { + level.var_3B5A = 0.5; + level.briefing_fadeouttime = 0.5; + } + else + { + level.var_3B5A = param_00; + level.briefing_fadeouttime = param_00; + } + + self endon("briefingskip"); + thread func_3B60(); + level.var_3B58 = newhudelem(); + level.var_3B58.sort = -1; + level.var_3B58.alignx = "left"; + level.var_3B58.aligny = "top"; + level.var_3B58.x = 0; + level.var_3B58.y = 0; + level.var_3B58.horzalign = "fullscreen"; + level.var_3B58.vertalign = "fullscreen"; + level.var_3B58.foreground = 1; + level.var_3B58.alpha = 1; + level.var_3B58 setshader("black",640,480); + level.var_3B59 = newhudelem(); + level.var_3B59.sort = 1; + level.var_3B59.alignx = "center"; + level.var_3B59.aligny = "top"; + level.var_3B59.fontscale = 2; + level.var_3B59.x = 0; + level.var_3B59.y = 60; + level.var_3B59.horzalign = "center"; + level.var_3B59.vertalign = "fullscreen"; + level.var_3B59.foreground = 1; + level.var_3B59 settext(&"SCRIPT_PLATFORM_FIRE_TO_SKIP"); + level.var_3B59.alpha = 0; + thread fadeinfiretoskip(); + level.imagea = newhudelem(); + level.imagea.alignx = "center"; + level.imagea.aligny = "middle"; + level.imagea.x = 320; + level.imagea.y = 240; + level.imagea.alpha = 0; + level.imagea.horzalign = "fullscreen"; + level.imagea.vertalign = "fullscreen"; + level.imagea setshader("black",640,360); + level.imagea.foreground = 1; + level.var_3B57 = newhudelem(); + level.var_3B57.alignx = "center"; + level.var_3B57.aligny = "middle"; + level.var_3B57.x = 320; + level.var_3B57.y = 240; + level.var_3B57.horzalign = "fullscreen"; + level.var_3B57.vertalign = "fullscreen"; + level.var_3B57.alpha = 0; + level.var_3B57 setshader("black",640,360); + level.var_3B57.foreground = 1; + self freezecontrols(1); + wait 0.5; + for(var_01 = 0;var_01 < level.slide.size;var_01++) + { + var_02 = 0; + if(isdefined(level.slide[var_01]["image"])) + { + if(level.script[0] != "m") + { + soundplay("slide_advance"); + } + + wait 0.5; + thread func_3B61(level.slide[var_01]["image"]); + } + + if(isdefined(level.slide[var_01]["dialog_wait"]) && self.var_3B5C[level.slide[var_01]["dialog_wait"]]) + { + self waittill(level.slide[var_01]["dialog_wait"] + "sounddone"); + } + + if(isdefined(level.slide[var_01]["dialog"])) + { + soundplay(level.slide[var_01]["dialog"],level.slide[var_01]["dialog"] + "sounddone"); + var_02 = 1; + } + + if(isdefined(level.slide[var_01]["delay"])) + { + wait level.slide[var_01]["delay"]; + continue; + } + + if(var_02) + { + self waittill(level.slide[var_01]["dialog"] + "sounddone"); + } + } +} + +//Function Number: 3 +fadeinfiretoskip() +{ + wait 1; + thread fadefiretoskip(); + level.var_3B59 fadeovertime(level.briefing_fadeouttime); + level.var_3B59.alpha = 1; +} + +//Function Number: 4 +fadefiretoskip() +{ + wait 7; + level.var_3B59 fadeovertime(level.briefing_fadeouttime); + level.var_3B59.alpha = 0; +} + +//Function Number: 5 +waittillbriefingdone() +{ + self waittill("briefingend"); +} + +//Function Number: 6 +func_3B60() +{ + self endon("briefingend"); + var_00 = getentarray("player","classname")[0]; + wait 0.05; + maps\_utility::set_console_status(); + for(;;) + { + if(level.console) + { + if(var_00 buttonpressed("BUTTON_A")) + { + self notify("briefingskip"); + func_1001(); + return; + } + + wait 0.05; + continue; + } + + if(var_00 attackbuttonpressed()) + { + self notify("briefingskip"); + func_1001(); + return; + } + + wait 0.05; + } +} + +//Function Number: 7 +func_3B61(param_00) +{ + self endon("briefingskip"); + if(level.var_3B55 == "A") + { + level.var_3B55 = "B"; + level.imagea setshader(param_00,640,360); + thread imagefadeout("B"); + level.imagea fadeovertime(level.var_3B5A); + level.imagea.alpha = 1; + return; + } + + if(level.var_3B55 == "B") + { + level.var_3B55 = "A"; + level.var_3B57 setshader(param_00,640,360); + thread imagefadeout("A"); + level.var_3B57 fadeovertime(level.var_3B5A); + level.var_3B57.alpha = 1; + } +} + +//Function Number: 8 +imagefadeout(param_00) +{ + if(param_00 == "A") + { + level.imagea fadeovertime(level.briefing_fadeouttime); + level.imagea.alpha = 0; + return; + } + + if(param_00 == "B") + { + level.var_3B57 fadeovertime(level.briefing_fadeouttime); + level.var_3B57.alpha = 0; + } +} + +//Function Number: 9 +endthread() +{ + if(!level.var_3B53) + { + return; + } + + if(level.var_3B54) + { + return; + } + + self notify("briefingend"); + level.var_3B54 = 1; + if(level.script[0] != "m") + { + self playsound("stop_voice"); + } + + thread imagefadeout("A"); + thread imagefadeout("B"); + wait 1.5; + level.var_3B54 = 0; +} + +//Function Number: 10 +func_1001() +{ + thread endthread(); +} + +//Function Number: 11 +soundplay(param_00,param_01) +{ + if(isdefined(level.var_3B51[param_00])) + { + iprintlnbold(level.var_3B51[param_00]); + } + + if(isdefined(param_01)) + { + thread soundplay_flag(param_00,param_01); + self playsound(param_00,param_01); + return; + } + + self playsound(param_00); +} + +//Function Number: 12 +soundplay_flag(param_00,param_01) +{ + self.var_3B5C[param_00] = 1; + self waittill(param_01); + self.var_3B5C[param_00] = 0; +} + +//Function Number: 13 +dothebriefing() +{ + start(0.5); + if(level.script[0] != "m") + { + soundplay("slide_advance"); + } + + wait 0.5; + func_1001(); +} + +//Function Number: 14 +skipthebriefing() +{ + self waittill("briefingskip"); + func_3B68(1); +} + +//Function Number: 15 +func_3B68(param_00) +{ + if(!param_00) + { + for(var_01 = 0;var_01 < level.slide.size;var_01++) + { + if(isdefined(level.slide[var_01]["movie"])) + { + cinematic(level.slide[var_01]["movie"]); + } + } + } + + changelevel(level.var_3B69,0); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_cagedchickens.gsc b/MW3/Xbox/SP/maps/_cagedchickens.gsc new file mode 100644 index 0000000..abda9b1 --- /dev/null +++ b/MW3/Xbox/SP/maps/_cagedchickens.gsc @@ -0,0 +1,32 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_cagedchickens.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 29 ms + * Timestamp: 10/27/2023 2:34:17 AM +*******************************************************************/ + +//Function Number: 1 +initchickens() +{ + waittillframeend; + var_00 = getentarray("caged_chicken","targetname"); + common_scripts\utility::array_thread(var_00,::spawnchicken); +} + +//Function Number: 2 +spawnchicken() +{ + var_00 = maps\_utility::func_E4F("chicken"); + thread maps\_anim::func_E0E(var_00,"cage_freakout"); + var_01 = var_00 maps\_utility::getanim("cage_freakout"); + var_02 = randomfloatrange(0,1); + var_00 setanimtime(var_01,var_02); + for(;;) + { + var_00 playsound("animal_chicken_idle","sounddone"); + var_00 waittill("sounddone"); + } +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_carry_ai.gsc b/MW3/Xbox/SP/maps/_carry_ai.gsc new file mode 100644 index 0000000..2c0fefb --- /dev/null +++ b/MW3/Xbox/SP/maps/_carry_ai.gsc @@ -0,0 +1,172 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_carry_ai.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 9 + * Decompile Time: 141 ms + * Timestamp: 10/27/2023 2:34:18 AM +*******************************************************************/ + +//Function Number: 1 +initcarry() +{ + func_3B6D(); +} + +//Function Number: 2 +func_3B6D() +{ + level.scr_anim["generic"]["wounded_idle"][0] = %wounded_carry_closet_idle_wounded; + level.scr_anim["generic"]["pickup_wounded"] = %wounded_carry_pickup_closet_wounded_straight; + level.scr_anim["generic"]["pickup_carrier"] = %wounded_carry_pickup_closet_carrier_straight; + level.scr_anim["generic"]["wounded_walk_loop"][0] = %wounded_carry_fastwalk_wounded_relative; + level.scr_anim["generic"]["carrier_walk_loop"] = %wounded_carry_fastwalk_carrier; + level.scr_anim["generic"]["putdown_wounded"] = %wounded_carry_putdown_closet_wounded; + level.scr_anim["generic"]["putdown_carrier"] = %wounded_carry_putdown_closet_carrier; +} + +//Function Number: 3 +setwounded(param_00) +{ + animscripts/shared::dropaiweapon(); + self.var_3B6F = param_00; + self.var_3B6F thread maps\_anim::anim_generic_loop(self,"wounded_idle","stop_wounded_idle"); + self.allowdeath = 1; +} + +//Function Number: 4 +func_3B70(param_00,param_01) +{ + level notify("end_carry_ai_logic"); + setsaveddvar("ai_friendlyFireBlockDuration",2000); + param_00.allowpain = 1; + param_00.disablebulletwhizbyreaction = 0; + param_00.ignoreall = 0; + param_00.grenadeawareness = 1; + param_00 maps\_utility::setflashbangimmunity(0); + param_00.dontmelee = undefined; + param_00.var_C84 = undefined; + param_00.disablearrivals = undefined; + param_00.disableexits = undefined; + param_00.nododgemove = 0; + param_00 pushplayer(0); + param_01 notify("stop_carried_loop"); + param_01 unlink(); + param_00 maps\_utility::clear_generic_run_anim(); + param_01.var_3B6F notify("stop_wounded_idle"); + param_01.var_3B6F = undefined; +} + +//Function Number: 5 +func_3B71(param_00,param_01) +{ + level endon("end_carry_ai_logic"); + goto_and_pickup_wounded(param_00,param_01); + carry_to_and_putdown_wounded(param_00,param_01); +} + +//Function Number: 6 +func_3B72(param_00,param_01) +{ + param_00 forceteleport(self.origin,self.angles); + carry_to_and_putdown_wounded(param_00,param_01); +} + +//Function Number: 7 +goto_and_pickup_wounded(param_00,param_01) +{ + level endon("end_carry_ai_logic"); + self endon("end_carry_ai"); + param_00.var_3B6F maps\_anim::anim_generic_reach(self,"pickup_carrier"); + param_00 notify("stop_wounded_idle"); + param_00.var_3B6F notify("stop_wounded_idle"); + param_00.allowdeath = 1; + param_00.var_3B6F thread maps\_anim::anim_generic(param_00,"pickup_wounded"); + param_00.var_3B6F maps\_anim::anim_generic(self,"pickup_carrier"); + self.dontmelee = 1; + param_00 invisiblenotsolid(); +} + +//Function Number: 8 +link_wounded(param_00) +{ + self endon("death"); + param_00 endon("death"); + param_00 linkto(self,"tag_origin"); + wait 0.05; + param_00 thread maps\_anim::anim_generic_loop(param_00,"wounded_walk_loop","stop_carried_loop"); +} + +//Function Number: 9 +carry_to_and_putdown_wounded(param_00,param_01) +{ + level endon("end_carry_ai_logic"); + self endon("end_carry_ai"); + param_00.var_3B76 = 1; + thread maps\_utility::set_generic_run_anim("carrier_walk_loop",1); + param_00 notify("stop_wounded_idle"); + param_00.var_3B6F notify("stop_wounded_idle"); + wait 0.05; + setsaveddvar("ai_friendlyFireBlockDuration",0); + self animmode("none"); + self.allowpain = 0; + self.disablebulletwhizbyreaction = 1; + self.ignoreall = 1; + self.ignoreme = 1; + self.grenadeawareness = 0; + maps\_utility::setflashbangimmunity(1); + self.var_C84 = 1; + self.disablearrivals = 1; + self.disableexits = 1; + self.nododgemove = 1; + maps\_utility::disable_cqbwalk(); + self.var_3B77 = self.goalradius; + thread link_wounded(param_00); + while(isdefined(param_01.target)) + { + self.ignoresuppression = 1; + self.disablearrivals = 1; + var_02 = getent(param_01.target,"targetname"); + var_02 = common_scripts\utility::ter_op(isdefined(var_02),var_02,getnode(param_01.target,"targetname")); + if(!isdefined(var_02.target)) + { + param_01 = var_02; + break; + } + + self.goalradius = 64; + self setgoalpos(var_02.origin); + self waittill("goal"); + param_01 = var_02; + } + + param_01 maps\_anim::anim_generic_reach(self,"putdown_carrier"); + param_00.var_3B6F = param_01; + param_00 notify("stop_carried_loop"); + param_01 notify("stop_wounded_idle"); + param_00 unlink(); + self.ignoresuppression = 0; + self.disablearrivals = 0; + self.goalradius = self.var_3B77; + thread maps\_utility::clear_run_anim(); + param_00.var_3B6F thread maps\_anim::anim_generic(self,"putdown_carrier"); + param_00.var_3B6F maps\_anim::anim_generic(param_00,"putdown_wounded"); + setsaveddvar("ai_friendlyFireBlockDuration",2000); + self.allowpain = 1; + self.disablebulletwhizbyreaction = 0; + self.ignoreall = 0; + self.grenadeawareness = 1; + maps\_utility::setflashbangimmunity(0); + self.dontmelee = undefined; + self.var_C84 = undefined; + self.disablearrivals = undefined; + self.disableexits = undefined; + self.nododgemove = 0; + self pushplayer(0); + param_00 visiblesolid(); + param_00.var_3B6F thread maps\_anim::anim_generic_loop(param_00,"wounded_idle","stop_wounded_idle"); + param_00.allowdeath = 1; + param_00 notify("stop_putdown"); + param_00.var_3B76 = undefined; +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_colors.gsc b/MW3/Xbox/SP/maps/_colors.gsc new file mode 100644 index 0000000..25e9a93 --- /dev/null +++ b/MW3/Xbox/SP/maps/_colors.gsc @@ -0,0 +1,1582 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_colors.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 72 + * Decompile Time: 1303 ms + * Timestamp: 10/27/2023 2:32:37 AM +*******************************************************************/ + +//Function Number: 1 +func_0F05(param_00) +{ + common_scripts\utility::flag_init("player_looks_away_from_spawner"); + common_scripts\utility::flag_init("friendly_spawner_locked"); + level.var_F06 = []; + level.var_F06["axis"] = []; + level.var_F06["allies"] = []; + level.var_F07 = []; + level.var_F07["axis"] = []; + level.var_F07["allies"] = []; + var_01 = []; + var_01 = common_scripts\utility::array_combine(var_01,getentarray("trigger_multiple","code_classname")); + var_01 = common_scripts\utility::array_combine(var_01,getentarray("trigger_radius","code_classname")); + var_01 = common_scripts\utility::array_combine(var_01,getentarray("trigger_once","code_classname")); + level.var_F08 = []; + level.var_F08["allies"] = "allies"; + level.var_F08["axis"] = "axis"; + level.var_F08["team3"] = "axis"; + level.var_F08["neutral"] = "neutral"; + var_02 = getentarray("info_volume","code_classname"); + foreach(var_04 in param_00) + { + if(isdefined(var_04.script_color_allies)) + { + var_04 add_node_to_global_arrays(var_04.script_color_allies,"allies"); + } + + if(isdefined(var_04.script_color_axis)) + { + var_04 add_node_to_global_arrays(var_04.script_color_axis,"axis"); + } + } + + foreach(var_07 in var_02) + { + if(isdefined(var_07.script_color_allies)) + { + var_07 add_volume_to_global_arrays(var_07.script_color_allies,"allies"); + } + + if(isdefined(var_07.script_color_axis)) + { + var_07 add_volume_to_global_arrays(var_07.script_color_axis,"axis"); + } + } + + foreach(var_0A in var_01) + { + if(isdefined(var_0A.script_color_allies)) + { + var_0A thread trigger_issues_orders(var_0A.script_color_allies,"allies"); + } + + if(isdefined(var_0A.script_color_axis)) + { + var_0A thread trigger_issues_orders(var_0A.script_color_axis,"axis"); + } + } + + level.color_node_type_function = []; + add_cover_node("BAD NODE"); + add_cover_node("Cover Stand"); + add_cover_node("Cover Crouch"); + add_cover_node("Cover Prone"); + add_cover_node("Cover Crouch Window"); + add_cover_node("Cover Right"); + add_cover_node("Cover Left"); + add_cover_node("Cover Wide Left"); + add_cover_node("Cover Wide Right"); + add_cover_node("Conceal Stand"); + add_cover_node("Conceal Crouch"); + add_cover_node("Conceal Prone"); + add_cover_node("Reacquire"); + add_cover_node("Balcony"); + add_cover_node("Scripted"); + add_cover_node("Begin"); + add_cover_node("End"); + add_cover_node("Turret"); + add_path_node("Ambush"); + add_path_node("Guard"); + add_path_node("Path"); + add_path_node("Exposed"); + level.var_F0C = []; + level.var_F0C[level.var_F0C.size] = "r"; + level.var_F0C[level.var_F0C.size] = "b"; + level.var_F0C[level.var_F0C.size] = "y"; + level.var_F0C[level.var_F0C.size] = "c"; + level.var_F0C[level.var_F0C.size] = "g"; + level.var_F0C[level.var_F0C.size] = "p"; + level.var_F0C[level.var_F0C.size] = "o"; + level.colorchecklist["red"] = "r"; + level.colorchecklist["r"] = "r"; + level.colorchecklist["blue"] = "b"; + level.colorchecklist["b"] = "b"; + level.colorchecklist["yellow"] = "y"; + level.colorchecklist["y"] = "y"; + level.colorchecklist["cyan"] = "c"; + level.colorchecklist["c"] = "c"; + level.colorchecklist["green"] = "g"; + level.colorchecklist["g"] = "g"; + level.colorchecklist["purple"] = "p"; + level.colorchecklist["p"] = "p"; + level.colorchecklist["orange"] = "o"; + level.colorchecklist["o"] = "o"; + level.currentcolorforced = []; + level.currentcolorforced["allies"] = []; + level.currentcolorforced["axis"] = []; + level.lastcolorforced = []; + level.lastcolorforced["allies"] = []; + level.lastcolorforced["axis"] = []; + foreach(var_0D in level.var_F0C) + { + level.arrays_of_colorforced_ai["allies"][var_0D] = []; + level.arrays_of_colorforced_ai["axis"][var_0D] = []; + level.currentcolorforced["allies"][var_0D] = undefined; + level.currentcolorforced["axis"][var_0D] = undefined; + } + + thread player_color_node(); + var_0F = getspawnerteamarray("allies"); + level._color_friendly_spawners = []; + foreach(var_11 in var_0F) + { + level._color_friendly_spawners[var_11.classname] = var_11; + } +} + +//Function Number: 2 +convert_color_to_short_string() +{ + self.script_forcecolor = level.colorchecklist[self.script_forcecolor]; +} + +//Function Number: 3 +ai_picks_destination(param_00) +{ + if(isdefined(self.script_forcecolor)) + { + convert_color_to_short_string(); + self.currentcolorcode = param_00; + var_01 = self.script_forcecolor; + level.arrays_of_colorforced_ai[get_team()][var_01] = maps\_utility::array_add(level.arrays_of_colorforced_ai[get_team()][var_01],self); + thread goto_current_colorindex(); + } +} + +//Function Number: 4 +goto_current_colorindex() +{ + if(!isdefined(self.currentcolorcode)) + { + return; + } + + var_00 = level.var_F06[get_team()][self.currentcolorcode]; + func_0F5E(); + if(!isalive(self)) + { + return; + } + + if(!maps\_utility::has_color()) + { + return; + } + + if(!isdefined(var_00)) + { + var_01 = level.var_F07[get_team()][self.currentcolorcode]; + send_ai_to_colorvolume(var_01,self.currentcolorcode); + return; + } + + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + var_03 = var_01[var_02]; + if(isalive(var_03.var_F18) && !isplayer(var_03.var_F18)) + { + continue; + } + + thread ai_sets_goal_with_delay(var_03); + thread decrementcolorusers(var_03); + return; + } + + func_0F19(); +} + +//Function Number: 5 +func_0F19() +{ +} + +//Function Number: 6 +get_color_list() +{ + var_00 = []; + return var_41; +} + +//Function Number: 7 +array_remove_dupes(param_00) +{ + var_01 = []; + foreach(var_03 in param_00) + { + var_01[var_03] = 1; + } + + var_05 = []; + foreach(var_08, var_07 in var_01) + { + var_05[var_05.size] = var_08; + } + + return var_05; +} + +//Function Number: 8 +get_colorcodes_from_trigger(param_00,param_01) +{ + return func_0F1D(param_00,param_01); +} + +//Function Number: 9 +func_0F1D(param_00,param_01) +{ + var_02 = strtok(param_00," "); + var_02 = array_remove_dupes(var_02); + var_03 = []; + var_04 = []; + var_05 = []; + var_06 = get_color_list(); + foreach(var_08 in var_02) + { + var_09 = undefined; + foreach(var_09 in var_06) + { + if(issubstr(var_08,var_09)) + { + break; + } + } + + if(!colorcode_is_used_in_map(param_01,var_08)) + { + continue; + } + + var_04[var_09] = var_08; + var_03[var_03.size] = var_09; + var_05[var_05.size] = var_08; + } + + var_02 = var_05; + var_0D = []; + return var_41; +} + +//Function Number: 10 +colorcode_is_used_in_map(param_00,param_01) +{ + if(isdefined(level.var_F06[param_00][param_01])) + { + return 1; + } + + return isdefined(level.var_F07[param_00][param_01]); +} + +//Function Number: 11 +trigger_issues_orders(param_00,param_01) +{ + var_02 = get_colorcodes_from_trigger(param_00,param_01); + var_03 = var_02["colorCodes"]; + var_04 = var_02["colorCodesByColorIndex"]; + var_05 = var_02["colors"]; + param_00 = undefined; + self endon("death"); + for(;;) + { + self waittill("trigger"); + if(isdefined(self.activated_color_trigger)) + { + self.activated_color_trigger = undefined; + continue; + } + + activate_color_trigger_internal(var_03,var_05,param_01,var_04); + if(isdefined(self.var_F21) && self.var_F21) + { + thread trigger_delete_target_chain(); + } + } +} + +//Function Number: 12 +trigger_delete_target_chain() +{ + var_00 = []; + var_01 = self; + while(isdefined(var_01)) + { + var_00[var_00.size] = var_01; + if(!isdefined(var_01.targetname)) + { + break; + } + + var_01 = getent(var_01.targetname,"target"); + } + + maps\_utility::array_delete(var_00); +} + +//Function Number: 13 +activate_color_trigger(param_00) +{ + if(param_00 == "allies") + { + thread get_colorcodes_and_activate_trigger(self.script_color_allies,param_00); + return; + } + + thread get_colorcodes_and_activate_trigger(self.script_color_axis,param_00); +} + +//Function Number: 14 +get_colorcodes_and_activate_trigger(param_00,param_01) +{ + var_02 = get_colorcodes_from_trigger(param_00,param_01); + var_03 = var_02["colorCodes"]; + var_04 = var_02["colorCodesByColorIndex"]; + var_05 = var_02["colors"]; + activate_color_trigger_internal(var_03,var_05,param_01,var_04); +} + +//Function Number: 15 +activate_color_trigger_internal(param_00,param_01,param_02,param_03) +{ + return activate_color_code_internal(param_00,param_01,param_02,param_03); +} + +//Function Number: 16 +activate_color_code_internal(param_00,param_01,param_02,param_03) +{ + for(var_04 = 0;var_04 < param_00.size;var_04++) + { + if(!isdefined(level.arrays_of_colorcoded_spawners[param_02][param_00[var_04]])) + { + continue; + } + + level.arrays_of_colorcoded_spawners[param_02][param_00[var_04]] = common_scripts\utility::array_removeundefined(level.arrays_of_colorcoded_spawners[param_02][param_00[var_04]]); + for(var_05 = 0;var_05 < level.arrays_of_colorcoded_spawners[param_02][param_00[var_04]].size;var_05++) + { + level.arrays_of_colorcoded_spawners[param_02][param_00[var_04]][var_05].currentcolorcode = param_00[var_04]; + } + } + + foreach(var_07 in param_01) + { + level.arrays_of_colorforced_ai[param_02][var_07] = maps\_utility::array_removedead(level.arrays_of_colorforced_ai[param_02][var_07]); + level.lastcolorforced[param_02][var_07] = level.currentcolorforced[param_02][var_07]; + level.currentcolorforced[param_02][var_07] = param_03[var_07]; + } + + var_0B = []; + for(var_04 = 0;var_04 < param_00.size;var_04++) + { + if(same_color_code_as_last_time(param_02,param_01[var_04])) + { + continue; + } + + var_0C = param_00[var_04]; + if(!isdefined(level.arrays_of_colorcoded_ai[param_02][var_0C])) + { + continue; + } + + var_0B[var_0C] = func_0F37(var_0C,param_01[var_04],param_02); + } + + for(var_04 = 0;var_04 < param_00.size;var_04++) + { + var_0C = param_00[var_04]; + if(!isdefined(var_0B[var_0C])) + { + continue; + } + + if(same_color_code_as_last_time(param_02,param_01[var_04])) + { + continue; + } + + if(!isdefined(level.arrays_of_colorcoded_ai[param_02][var_0C])) + { + continue; + } + + issue_color_order_to_ai(var_0C,param_01[var_04],param_02,var_0B[var_0C]); + } +} + +//Function Number: 17 +same_color_code_as_last_time(param_00,param_01) +{ + if(!isdefined(level.lastcolorforced[param_00][param_01])) + { + return 0; + } + + return level.lastcolorforced[param_00][param_01] == level.currentcolorforced[param_00][param_01]; +} + +//Function Number: 18 +process_cover_node_with_last_in_mind_allies(param_00,param_01) +{ + if(issubstr(param_00.script_color_allies,param_01)) + { + self.cover_nodes_last[self.cover_nodes_last.size] = param_00; + return; + } + + self.cover_nodes_first[self.cover_nodes_first.size] = param_00; +} + +//Function Number: 19 +process_cover_node_with_last_in_mind_axis(param_00,param_01) +{ + if(issubstr(param_00.script_color_axis,param_01)) + { + self.cover_nodes_last[self.cover_nodes_last.size] = param_00; + return; + } + + self.cover_nodes_first[self.cover_nodes_first.size] = param_00; +} + +//Function Number: 20 +process_cover_node(param_00,param_01) +{ + self.cover_nodes_first[self.cover_nodes_first.size] = param_00; +} + +//Function Number: 21 +func_0F31(param_00,param_01) +{ + self.path_nodes[self.path_nodes.size] = param_00; +} + +//Function Number: 22 +prioritize_colorcoded_nodes(param_00,param_01,param_02) +{ + var_03 = level.var_F06[param_00][param_01]; + var_04 = spawnstruct(); + var_04.path_nodes = []; + var_04.cover_nodes_first = []; + var_04.cover_nodes_last = []; + var_05 = isdefined(level.lastcolorforced[param_00][param_02]); + for(var_06 = 0;var_06 < var_03.size;var_06++) + { + var_07 = var_03[var_06]; + var_04 [[ level.color_node_type_function[var_07.type][var_05][param_00] ]](var_07,level.lastcolorforced[param_00][param_02]); + } + + var_04.cover_nodes_first = maps\_utility::array_randomize(var_04.cover_nodes_first); + var_08 = []; + var_03 = []; + foreach(var_0A, var_07 in var_04.cover_nodes_first) + { + if(isdefined(var_07.script_colorlast)) + { + var_08[var_08.size] = var_07; + var_03[var_0A] = undefined; + continue; + } + + var_03[var_03.size] = var_07; + } + + for(var_06 = 0;var_06 < var_04.cover_nodes_last.size;var_06++) + { + var_03[var_03.size] = var_04.cover_nodes_last[var_06]; + } + + for(var_06 = 0;var_06 < var_04.path_nodes.size;var_06++) + { + var_03[var_03.size] = var_04.path_nodes[var_06]; + } + + foreach(var_07 in var_08) + { + var_03[var_03.size] = var_07; + } + + level.var_F06[param_00][param_01] = var_03; +} + +//Function Number: 23 +func_0F35(param_00,param_01,param_02) +{ + return level.var_F06[param_00][param_01]; +} + +//Function Number: 24 +get_colorcoded_volume(param_00,param_01) +{ + return level.var_F07[param_00][param_01]; +} + +//Function Number: 25 +func_0F37(param_00,param_01,param_02) +{ + level.arrays_of_colorcoded_ai[param_02][param_00] = maps\_utility::array_removedead(level.arrays_of_colorcoded_ai[param_02][param_00]); + var_03 = level.arrays_of_colorcoded_ai[param_02][param_00]; + var_03 = common_scripts\utility::array_combine(var_03,level.arrays_of_colorforced_ai[param_02][param_01]); + var_04 = []; + foreach(var_06 in var_03) + { + if(isdefined(var_06.currentcolorcode) && var_06.currentcolorcode == param_00) + { + continue; + } + + var_04[var_04.size] = var_06; + } + + var_03 = var_04; + if(!var_03.size) + { + return; + } + + common_scripts\utility::array_thread(var_03,::func_0F5E); + return var_03; +} + +//Function Number: 26 +send_ai_to_colorvolume(param_00,param_01) +{ + self notify("stop_color_move"); + self.currentcolorcode = param_01; + if(isdefined(param_00.target)) + { + var_02 = getnode(param_00.target,"targetname"); + if(isdefined(var_02)) + { + self setgoalnode(var_02); + } + } + + self.fixednode = 0; + self setgoalvolumeauto(param_00); +} + +//Function Number: 27 +issue_color_order_to_ai(param_00,param_01,param_02,param_03) +{ + var_04 = param_03; + var_05 = []; + if(isdefined(level.var_F06[param_02][param_00])) + { + prioritize_colorcoded_nodes(param_02,param_00,param_01); + var_05 = func_0F35(param_02,param_00,param_01); + } + else + { + var_06 = get_colorcoded_volume(param_02,param_00); + common_scripts\utility::array_thread(param_03,::send_ai_to_colorvolume,var_06,param_00); + } + + var_07 = 0; + var_08 = param_03.size; + for(var_09 = 0;var_09 < var_05.size;var_09++) + { + var_0A = var_05[var_09]; + if(isalive(var_0A.var_F18)) + { + continue; + } + + var_0B = maps\_utility::getclosest(var_0A.origin,param_03); + param_03 = common_scripts\utility::array_remove(param_03,var_0B); + var_0B take_color_node(var_0A,param_00,self,var_07); + var_07++; + if(!param_03.size) + { + return; + } + } +} + +//Function Number: 28 +take_color_node(param_00,param_01,param_02,param_03) +{ + self notify("stop_color_move"); + self.currentcolorcode = param_01; + thread func_0F52(param_00,param_02,param_03); +} + +//Function Number: 29 +player_color_node() +{ + for(;;) + { + var_00 = undefined; + if(!isdefined(level.player.node)) + { + wait 0.05; + continue; + } + + var_01 = level.player.node.var_F18; + var_00 = level.player.node; + var_00.var_F18 = level.player; + for(;;) + { + if(!isdefined(level.player.node)) + { + break; + } + + if(level.player.node != var_00) + { + break; + } + + wait 0.05; + } + + var_00.var_F18 = undefined; + var_00 color_node_finds_a_user(); + } +} + +//Function Number: 30 +color_node_finds_a_user() +{ + if(isdefined(self.script_color_allies)) + { + color_node_finds_user_from_colorcodes(self.script_color_allies,"allies"); + } + + if(isdefined(self.script_color_axis)) + { + color_node_finds_user_from_colorcodes(self.script_color_axis,"axis"); + } +} + +//Function Number: 31 +color_node_finds_user_from_colorcodes(param_00,param_01) +{ + if(isdefined(self.var_F18)) + { + return; + } + + var_02 = strtok(param_00," "); + var_02 = array_remove_dupes(var_02); + common_scripts\utility::array_levelthread(var_02,::color_node_finds_user_for_colorcode,param_01); +} + +//Function Number: 32 +color_node_finds_user_for_colorcode(param_00,param_01) +{ + var_02 = param_00[0]; + if(!isdefined(level.currentcolorforced[param_01][var_02])) + { + return; + } + + if(level.currentcolorforced[param_01][var_02] != param_00) + { + return; + } + + var_03 = maps\_utility::func_F3F(param_01,var_02); + for(var_04 = 0;var_04 < var_03.size;var_04++) + { + var_05 = var_03[var_04]; + if(var_05 occupies_colorcode(param_00)) + { + continue; + } + + var_05 take_color_node(self,param_00); + return; + } +} + +//Function Number: 33 +occupies_colorcode(param_00) +{ + if(!isdefined(self.currentcolorcode)) + { + return 0; + } + + return self.currentcolorcode == param_00; +} + +//Function Number: 34 +ai_sets_goal_with_delay(param_00) +{ + self endon("death"); + var_01 = my_current_node_delays(); + if(var_01) + { + self endon("stop_color_move"); + wait var_01; + } + + thread ai_sets_goal(param_00); +} + +//Function Number: 35 +ai_sets_goal(param_00) +{ + self notify("stop_going_to_node"); + set_goal_and_volume(param_00); + var_01 = level.var_F07[get_team()][self.currentcolorcode]; + if(isdefined(self.script_careful)) + { + thread careful_logic(param_00,var_01); + } +} + +//Function Number: 36 +set_goal_and_volume(param_00) +{ + if(isdefined(self.colornode_func)) + { + self thread [[ self.colornode_func ]](param_00); + } + + if(isdefined(self._colors_go_line)) + { + thread maps\_anim::anim_single_queue(self,self._colors_go_line); + self._colors_go_line = undefined; + } + + if(isdefined(self.colornode_setgoal_func)) + { + self thread [[ self.colornode_setgoal_func ]](param_00); + } + else + { + self setgoalnode(param_00); + } + + if(is_using_forcegoal_radius(param_00)) + { + thread forcegoal_radius(param_00); + } + else if(param_00.radius > 0) + { + self.goalradius = param_00.radius; + } + + var_01 = level.var_F07[get_team()][self.currentcolorcode]; + if(isdefined(var_01)) + { + self setfixednodesafevolume(var_01); + } + else + { + self clearfixednodesafevolume(); + } + + if(isdefined(param_00.fixednodesaferadius)) + { + self.fixednodesaferadius = param_00.fixednodesaferadius; + return; + } + + if(isdefined(level.var_F48)) + { + self.fixednodesaferadius = level.var_F48; + return; + } + + self.fixednodesaferadius = 64; +} + +//Function Number: 37 +is_using_forcegoal_radius(param_00) +{ + if(!isdefined(self.script_forcegoal)) + { + return 0; + } + + if(!self.script_forcegoal) + { + return 0; + } + + if(!isdefined(param_00.fixednodesaferadius)) + { + return 0; + } + + if(self.fixednode) + { + return 0; + } + + return 1; +} + +//Function Number: 38 +forcegoal_radius(param_00) +{ + self endon("death"); + self endon("stop_going_to_node"); + self.goalradius = param_00.fixednodesaferadius; + common_scripts\utility::waittill_either("goal","damage"); + if(param_00.radius > 0) + { + self.goalradius = param_00.radius; + } +} + +//Function Number: 39 +careful_logic(param_00,param_01) +{ + self endon("death"); + self endon("stop_being_careful"); + self endon("stop_going_to_node"); + thread recover_from_careful_disable(param_00); + for(;;) + { + wait_until_an_enemy_is_in_safe_area(param_00,param_01); + func_0F4E(param_00,param_01); + self.fixednode = 1; + set_goal_and_volume(param_00); + } +} + +//Function Number: 40 +recover_from_careful_disable(param_00) +{ + self endon("death"); + self endon("stop_going_to_node"); + self waittill("stop_being_careful"); + self.fixednode = 1; + set_goal_and_volume(param_00); +} + +//Function Number: 41 +func_0F4E(param_00,param_01) +{ + self setgoalpos(self.origin); + self.goalradius = 1024; + self.fixednode = 0; + if(isdefined(param_01)) + { + for(;;) + { + wait 1; + if(self isknownenemyinradius(param_00.origin,self.fixednodesaferadius)) + { + continue; + } + + if(self isknownenemyinvolume(param_01)) + { + continue; + } + + return; + } + + return; + } + + for(;;) + { + if(!isknownenemyinradius_tmp(param_00.origin,self.fixednodesaferadius)) + { + return; + } + + wait 1; + } +} + +//Function Number: 42 +isknownenemyinradius_tmp(param_00,param_01) +{ + var_02 = getaiarray("axis"); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + if(distance2d(var_02[var_03].origin,param_00) < param_01) + { + return 1; + } + } + + return 0; +} + +//Function Number: 43 +wait_until_an_enemy_is_in_safe_area(param_00,param_01) +{ + if(isdefined(param_01)) + { + for(;;) + { + if(self isknownenemyinradius(param_00.origin,self.fixednodesaferadius)) + { + return; + } + + if(self isknownenemyinvolume(param_01)) + { + return; + } + + wait 1; + } + + return; + } + + for(;;) + { + if(isknownenemyinradius_tmp(param_00.origin,self.fixednodesaferadius)) + { + return; + } + + wait 1; + } +} + +//Function Number: 44 +my_current_node_delays() +{ + if(!isdefined(self.node)) + { + return 0; + } + + return self.node maps\_utility::script_delay(); +} + +//Function Number: 45 +func_0F52(param_00,param_01,param_02) +{ + thread decrementcolorusers(param_00); + self endon("stop_color_move"); + self endon("death"); + if(isdefined(param_01)) + { + param_01 maps\_utility::script_delay(); + } + + if(!my_current_node_delays()) + { + if(isdefined(param_02)) + { + wait param_02 * randomfloatrange(0.2,0.35); + } + } + + ai_sets_goal(param_00); + self.color_ordered_node_assignment = param_00; + for(;;) + { + self waittill("node_taken",var_03); + if(isplayer(var_03)) + { + wait 0.05; + } + + param_00 = get_best_available_new_colored_node(); + if(isdefined(param_00)) + { + if(isalive(self.color_node.var_F18) && self.color_node.var_F18 == self) + { + self.color_node.var_F18 = undefined; + } + + self.color_node = param_00; + param_00.var_F18 = self; + ai_sets_goal(param_00); + } + } +} + +//Function Number: 46 +get_best_available_colored_node() +{ + var_00 = level.currentcolorforced[get_team()][self.script_forcecolor]; + var_01 = func_0F35(get_team(),var_00,self.script_forcecolor); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + if(!isalive(var_01[var_02].var_F18)) + { + return var_01[var_02]; + } + } +} + +//Function Number: 47 +get_best_available_new_colored_node() +{ + var_00 = level.currentcolorforced[get_team()][self.script_forcecolor]; + var_01 = func_0F35(get_team(),var_00,self.script_forcecolor); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + if(var_01[var_02] == self.color_node) + { + continue; + } + + if(!isalive(var_01[var_02].var_F18)) + { + return var_01[var_02]; + } + } +} + +//Function Number: 48 +process_stop_short_of_node(param_00) +{ + self endon("stopScript"); + self endon("death"); + if(isdefined(self.node)) + { + return; + } + + if(distance(param_00.origin,self.origin) < 32) + { + reached_node_but_could_not_claim_it(param_00); + return; + } + + var_01 = gettime(); + wait_for_killanimscript_or_time(1); + var_02 = gettime(); + if(var_02 - var_01 >= 1000) + { + reached_node_but_could_not_claim_it(param_00); + } +} + +//Function Number: 49 +wait_for_killanimscript_or_time(param_00) +{ + self endon("killanimscript"); + wait param_00; +} + +//Function Number: 50 +reached_node_but_could_not_claim_it(param_00) +{ + var_01 = getaiarray(); + var_02 = undefined; + for(var_03 = 0;var_03 < var_01.size;var_03++) + { + if(!isdefined(var_01[var_03].node)) + { + continue; + } + + if(var_01[var_03].node != param_00) + { + continue; + } + + var_01[var_03] notify("eject_from_my_node"); + wait 1; + self notify("eject_from_my_node"); + return 1; + } + + return 0; +} + +//Function Number: 51 +decrementcolorusers(param_00) +{ + param_00.var_F18 = self; + self.color_node = param_00; + self endon("stop_color_move"); + self waittill("death"); + self.color_node.var_F18 = undefined; +} + +//Function Number: 52 +colorislegit(param_00) +{ + for(var_01 = 0;var_01 < level.var_F0C.size;var_01++) + { + if(param_00 == level.var_F0C[var_01]) + { + return 1; + } + } + + return 0; +} + +//Function Number: 53 +add_volume_to_global_arrays(param_00,param_01) +{ + var_02 = strtok(param_00," "); + var_02 = array_remove_dupes(var_02); + foreach(var_04 in var_02) + { + level.var_F07[param_01][var_04] = self; + level.arrays_of_colorcoded_ai[param_01][var_04] = []; + level.arrays_of_colorcoded_spawners[param_01][var_04] = []; + } +} + +//Function Number: 54 +add_node_to_global_arrays(param_00,param_01) +{ + self.var_F18 = undefined; + var_02 = strtok(param_00," "); + var_02 = array_remove_dupes(var_02); + foreach(var_04 in var_02) + { + if(isdefined(level.var_F06[param_01]) && isdefined(level.var_F06[param_01][var_04])) + { + level.var_F06[param_01][var_04] = maps\_utility::array_add(level.var_F06[param_01][var_04],self); + continue; + } + + level.var_F06[param_01][var_04][0] = self; + level.arrays_of_colorcoded_ai[param_01][var_04] = []; + level.arrays_of_colorcoded_spawners[param_01][var_04] = []; + } +} + +//Function Number: 55 +func_0F5E() +{ + if(!isdefined(self.color_node)) + { + return; + } + + if(isdefined(self.color_node.var_F18) && self.color_node.var_F18 == self) + { + self.color_node.var_F18 = undefined; + } + + self.color_node = undefined; + self notify("stop_color_move"); +} + +//Function Number: 56 +func_0F5F() +{ + var_00 = []; + if(issubstr(self.classname,"axis") || issubstr(self.classname,"enemy") || issubstr(self.classname,"team3")) + { + } + + if(issubstr(self.classname,"ally") || self.type == "civilian") + { + } + + if(!isdefined(var_41["colorTeam"])) + { + var_41 = undefined; + } + + return var_41; +} + +//Function Number: 57 +removespawnerfromcolornumberarray() +{ + var_00 = func_0F5F(); + if(!isdefined(var_00)) + { + return; + } + + var_01 = var_00["team"]; + var_02 = var_00["colorTeam"]; + var_03 = strtok(var_02," "); + var_03 = array_remove_dupes(var_03); + for(var_04 = 0;var_04 < var_03.size;var_04++) + { + level.arrays_of_colorcoded_spawners[var_01][var_03[var_04]] = common_scripts\utility::array_remove(level.arrays_of_colorcoded_spawners[var_01][var_03[var_04]],self); + } +} + +//Function Number: 58 +add_cover_node(param_00) +{ + level.color_node_type_function[param_00][1]["allies"] = ::process_cover_node_with_last_in_mind_allies; + level.color_node_type_function[param_00][1]["axis"] = ::process_cover_node_with_last_in_mind_axis; + level.color_node_type_function[param_00][0]["allies"] = ::process_cover_node; + level.color_node_type_function[param_00][0]["axis"] = ::process_cover_node; +} + +//Function Number: 59 +add_path_node(param_00) +{ + level.color_node_type_function[param_00][1]["allies"] = ::func_0F31; + level.color_node_type_function[param_00][0]["allies"] = ::func_0F31; + level.color_node_type_function[param_00][1]["axis"] = ::func_0F31; + level.color_node_type_function[param_00][0]["axis"] = ::func_0F31; +} + +//Function Number: 60 +func_0F63(param_00,param_01) +{ + level endon("kill_color_replacements"); + level endon("kill_hidden_reinforcement_waiting"); + var_02 = spawn_hidden_reinforcement(param_00,param_01); + if(isdefined(level.var_F64)) + { + var_02 thread [[ level.var_F64 ]](); + } + + var_02 thread colornode_replace_on_death(); +} + +//Function Number: 61 +colornode_replace_on_death() +{ + level endon("kill_color_replacements"); + self endon("_disable_reinforcement"); + if(isdefined(self.replace_on_death)) + { + return; + } + + self.replace_on_death = 1; + var_00 = self.classname; + var_01 = self.script_forcecolor; + waittillframeend; + if(isalive(self)) + { + self waittill("death"); + } + + var_02 = level.current_color_order; + if(!isdefined(self.script_forcecolor)) + { + return; + } + + thread func_0F63(var_00,self.script_forcecolor); + if(isdefined(self) && isdefined(self.script_forcecolor)) + { + var_01 = self.script_forcecolor; + } + + if(isdefined(self) && isdefined(self.origin)) + { + var_03 = self.origin; + } + + for(;;) + { + if(get_color_from_order(var_01,var_02) == "none") + { + return; + } + + var_04 = maps\_utility::func_F3F("allies",var_02[var_01]); + if(!isdefined(level.color_doesnt_care_about_heroes)) + { + var_04 = maps\_utility::remove_heroes_from_array(var_04); + } + + if(!isdefined(level.color_doesnt_care_about_classname)) + { + var_04 = maps\_utility::remove_without_classname(var_04,var_00); + } + + if(!var_04.size) + { + wait 2; + continue; + } + + var_05 = maps\_utility::getclosest(level.player.origin,var_04); + waittillframeend; + if(!isalive(var_05)) + { + continue; + } + + var_05 maps\_utility::set_force_color(var_01); + if(isdefined(level.friendly_promotion_thread)) + { + var_05 [[ level.friendly_promotion_thread ]](var_01); + } + + var_01 = var_02[var_01]; + } +} + +//Function Number: 62 +get_color_from_order(param_00,param_01) +{ + if(!isdefined(param_00)) + { + return "none"; + } + + if(!isdefined(param_01)) + { + return "none"; + } + + if(!isdefined(param_01[param_00])) + { + return "none"; + } + + return param_01[param_00]; +} + +//Function Number: 63 +friendly_spawner_vision_checker() +{ + level.friendly_respawn_vision_checker_thread = 1; + var_00 = 0; + for(;;) + { + for(;;) + { + if(!respawn_friendlies_without_vision_check()) + { + break; + } + + wait 0.05; + } + + wait 1; + if(!isdefined(level.respawn_spawner_org)) + { + continue; + } + + var_01 = level.player.origin - level.respawn_spawner_org; + if(length(var_01) < 200) + { + player_sees_spawner(); + continue; + } + + var_02 = anglestoforward((0,level.player getplayerangles()[1],0)); + var_03 = vectornormalize(var_01); + var_04 = vectordot(var_02,var_03); + if(var_04 < 0.2) + { + player_sees_spawner(); + continue; + } + + var_00++; + if(var_00 < 3) + { + continue; + } + + common_scripts\utility::flag_set("player_looks_away_from_spawner"); + } +} + +//Function Number: 64 +get_color_spawner(param_00) +{ + if(isdefined(param_00)) + { + if(!isdefined(level._color_friendly_spawners[param_00])) + { + var_01 = getspawnerteamarray("allies"); + foreach(var_03 in var_01) + { + if(var_03.classname != param_00) + { + continue; + } + + level._color_friendly_spawners[param_00] = var_03; + break; + } + } + } + + if(!isdefined(param_00)) + { + var_03 = common_scripts\utility::random(level._color_friendly_spawners); + if(!isdefined(var_03)) + { + var_01 = []; + foreach(var_06, var_03 in level._color_friendly_spawners) + { + if(isdefined(var_03)) + { + var_01[var_06] = var_03; + } + } + + level._color_friendly_spawners = var_01; + return common_scripts\utility::random(level._color_friendly_spawners); + } + + return var_06; + } + + return level._color_friendly_spawners[var_06]; +} + +//Function Number: 65 +respawn_friendlies_without_vision_check() +{ + if(isdefined(level.respawn_friendlies_force_vision_check)) + { + return 0; + } + + return common_scripts\utility::flag("respawn_friendlies"); +} + +//Function Number: 66 +wait_until_vision_check_satisfied_or_disabled() +{ + if(common_scripts\utility::flag("player_looks_away_from_spawner")) + { + return; + } + + level endon("player_looks_away_from_spawner"); + for(;;) + { + if(respawn_friendlies_without_vision_check()) + { + return; + } + + wait 0.05; + } +} + +//Function Number: 67 +spawn_hidden_reinforcement(param_00,param_01) +{ + level endon("kill_color_replacements"); + level endon("kill_hidden_reinforcement_waiting"); + var_02 = undefined; + for(;;) + { + if(!respawn_friendlies_without_vision_check()) + { + if(!isdefined(level.friendly_respawn_vision_checker_thread)) + { + thread friendly_spawner_vision_checker(); + } + + for(;;) + { + wait_until_vision_check_satisfied_or_disabled(); + common_scripts\utility::flag_waitopen("friendly_spawner_locked"); + if(common_scripts\utility::flag("player_looks_away_from_spawner") || respawn_friendlies_without_vision_check()) + { + break; + } + } + + common_scripts\utility::flag_set("friendly_spawner_locked"); + } + + var_03 = get_color_spawner(param_00); + var_03.count = 1; + var_04 = var_03.origin; + var_03.origin = level.respawn_spawner_org; + var_02 = var_03 stalingradspawn(); + var_03.origin = var_04; + if(maps\_utility::func_F77(var_02)) + { + thread lock_spawner_for_awhile(); + wait 1; + continue; + } + + level notify("reinforcement_spawned",var_02); + break; + } + + for(;;) + { + if(!isdefined(param_01)) + { + break; + } + + if(get_color_from_order(param_01,level.current_color_order) == "none") + { + break; + } + + param_01 = level.current_color_order[param_01]; + } + + if(isdefined(param_01)) + { + var_02 maps\_utility::set_force_color(param_01); + } + + thread lock_spawner_for_awhile(); + return var_02; +} + +//Function Number: 68 +lock_spawner_for_awhile() +{ + common_scripts\utility::flag_set("friendly_spawner_locked"); + if(isdefined(level.friendly_respawn_lock_func)) + { + [[ level.friendly_respawn_lock_func ]](); + } + else + { + wait 2; + } + + common_scripts\utility::flag_clear("friendly_spawner_locked"); +} + +//Function Number: 69 +player_sees_spawner() +{ + var_00 = 0; + common_scripts\utility::flag_clear("player_looks_away_from_spawner"); +} + +//Function Number: 70 +kill_color_replacements() +{ + common_scripts\utility::flag_clear("friendly_spawner_locked"); + level notify("kill_color_replacements"); + var_00 = getaiarray(); + common_scripts\utility::array_thread(var_00,::remove_replace_on_death); +} + +//Function Number: 71 +remove_replace_on_death() +{ + self.replace_on_death = undefined; +} + +//Function Number: 72 +get_team(param_00) +{ + if(isdefined(self.team) && !isdefined(param_00)) + { + param_00 = self.team; + } + + return level.var_F08[param_00]; +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_compass.gsc b/MW3/Xbox/SP/maps/_compass.gsc new file mode 100644 index 0000000..3f65b28 --- /dev/null +++ b/MW3/Xbox/SP/maps/_compass.gsc @@ -0,0 +1,97 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_compass.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 2 + * Decompile Time: 28 ms + * Timestamp: 10/27/2023 2:35:37 AM +*******************************************************************/ + +//Function Number: 1 +setupminimap(param_00,param_01) +{ + level.var_1A08 = param_00; + if(!isdefined(level._loadstarted) && !isdefined(param_01)) + { + } + + if(!isdefined(param_01)) + { + param_01 = "minimap_corner"; + } + + var_02 = getdvarfloat("scr_requiredMapAspectRatio",1); + var_03 = getentarray(param_01,"targetname"); + if(var_03.size != 2) + { + return; + } + + var_04 = (var_03[0].origin[0],var_03[0].origin[1],0); + var_05 = (var_03[1].origin[0],var_03[1].origin[1],0); + var_06 = var_05 - var_04; + var_07 = (cos(getnorthyaw()),sin(getnorthyaw()),0); + var_08 = (0 - var_07[1],var_07[0],0); + if(vectordot(var_06,var_08) > 0) + { + if(vectordot(var_06,var_07) > 0) + { + var_09 = var_05; + var_0A = var_04; + } + else + { + var_0B = vecscale(var_09,vectordot(var_08,var_09)); + var_09 = var_05 - var_0B; + var_0A = var_04 + var_0B; + } + } + else if(vectordot(var_08,var_09) > 0) + { + var_0B = vecscale(var_09,vectordot(var_08,var_09)); + var_09 = var_04 + var_0B; + var_0A = var_05 - var_0B; + } + else + { + var_09 = var_06; + var_0A = var_06; + } + + if(var_02 > 0) + { + var_0C = vectordot(var_09 - var_0A,var_07); + var_0D = vectordot(var_09 - var_0A,var_08); + var_0E = var_0D / var_0C; + if(var_0E < var_02) + { + var_0F = var_02 / var_0E; + var_10 = vecscale(var_08,var_0D * var_0F - 1 * 0.5); + } + else + { + var_0F = var_10 / var_04; + var_10 = vecscale(var_08,var_0D * var_10 - 1 * 0.5); + } + + var_09 = var_09 + var_10; + var_0A = var_0A - var_10; + } + + level.var_1A0A = []; + level.var_1A0A["top"] = var_09[1]; + level.var_1A0A["left"] = var_0A[0]; + level.var_1A0A["bottom"] = var_0A[1]; + level.var_1A0A["right"] = var_09[0]; + level.map_width = level.var_1A0A["right"] - level.var_1A0A["left"]; + level.map_height = level.var_1A0A["top"] - level.var_1A0A["bottom"]; + level.mapsize = vectordot(var_09 - var_0A,var_07); + setminimap(param_00,var_09[0],var_09[1],var_0A[0],var_0A[1]); +} + +//Function Number: 2 +vecscale(param_00,param_01) +{ + return (param_00[0] * param_01,param_00[1] * param_01,param_00[2] * param_01); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_coop.gsc b/MW3/Xbox/SP/maps/_coop.gsc new file mode 100644 index 0000000..1f7f72e --- /dev/null +++ b/MW3/Xbox/SP/maps/_coop.gsc @@ -0,0 +1,342 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_coop.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 20 + * Decompile Time: 322 ms + * Timestamp: 10/27/2023 2:33:52 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + common_scripts\utility::flag_init("coop_game"); + if(!maps\_utility::func_E89()) + { + return; + } + + common_scripts\utility::flag_set("coop_game"); + common_scripts\utility::flag_init("coop_show_constant_icon"); + setdvarifuninitialized("coop_show_constant_icon",1); + if(getdvarint("coop_show_constant_icon") == 1) + { + common_scripts\utility::flag_set("coop_show_constant_icon"); + } + + precacheshader("hint_health"); + precacheshader("coop_player_location"); + precacheshader("coop_player_location_fire"); + level.coop_icon_blinktime = 7; + level.coop_icon_blinkcrement = 0.375; + level.coop_revive_nag_hud_refreshtime = 20; + foreach(var_01 in level.players) + { + var_01.var_80D6 = var_01 getlocalplayerprofiledata("colorBlind"); + var_01 thread initialize_colors(var_01.var_80D6); + var_01 thread func_15E2(); + } +} + +//Function Number: 2 +initialize_colors(param_00) +{ + if(param_00) + { + var_01 = (0.35,1,1); + var_02 = (1,0.65,0.2); + var_03 = (1,1,1); + self.coop_icon_color_normal = var_01; + self.coop_icon_color_downed = var_02; + self.coop_icon_color_shoot = var_01; + self.var_15D6 = var_03; + self.coop_icon_color_dying = var_02; + self.var_15D8 = var_03; + return; + } + + var_04 = (0.635,0.929,0.604); + var_05 = (1,1,0.2); + var_02 = (1,0.65,0.2); + var_06 = (1,0.2,0.2); + var_03 = (1,1,1); + self.coop_icon_color_normal = var_04; + self.coop_icon_color_downed = var_05; + self.coop_icon_color_shoot = var_04; + self.var_15D6 = var_02; + self.coop_icon_color_dying = var_06; + self.var_15D8 = var_03; +} + +//Function Number: 3 +func_15D9(param_00,param_01,param_02) +{ + if(isdefined(self.nofriendlyhudicon)) + { + return; + } + + if(!isdefined(self.var_15DB) || self.var_15DB.material != param_01) + { + create_fresh_friendly_icon(param_01); + } + + self.var_15DB.color = param_00; + if(isdefined(param_02) && param_02) + { + self.var_15DB setwaypointedgestyle_rotatingicon(); + } +} + +//Function Number: 4 +create_fresh_friendly_icon(param_00) +{ + if(isdefined(self.var_15DB)) + { + self.var_15DB destroy(); + } + + self.var_15DB = newclienthudelem(self); + self.var_15DB setshader(param_00,1,1); + self.var_15DB setwaypoint(1,1,0); + self.var_15DB setwaypointiconoffscreenonly(); + self.var_15DB settargetent(maps\_utility::get_other_player(self)); + self.var_15DB.material = param_00; + self.var_15DB.hidewheninmenu = 1; + if(common_scripts\utility::flag("coop_show_constant_icon")) + { + self.var_15DB.alpha = 1; + return; + } + + self.var_15DB.alpha = 0; +} + +//Function Number: 5 +friendly_hud_icon_blink_on_fire() +{ + self endon("death"); + for(;;) + { + self waittill("weapon_fired"); + var_00 = maps\_utility::get_other_player(self); + var_00 thread func_15E0(var_00.coop_icon_color_shoot,"coop_player_location_fire",1); + } +} + +//Function Number: 6 +friendly_hud_icon_blink_on_damage() +{ + self endon("death"); + for(;;) + { + self waittill("damage"); + var_00 = maps\_utility::get_other_player(self); + var_00 thread func_15E0(var_00.var_15D6,"coop_player_location",1); + } +} + +//Function Number: 7 +func_15E0(param_00,param_01,param_02) +{ + if(isdefined(self.nofriendlyhudicon)) + { + return; + } + + self endon("death"); + self notify("flash_color_thread"); + self endon("flash_color_thread"); + var_03 = maps\_utility::get_other_player(self); + if(maps\_utility::is_player_down(var_03)) + { + return; + } + + func_15D9(param_00,param_01,param_02); + wait 0.5; + param_01 = friendlyhudicon_currentmaterial(); + var_04 = friendlyhudicon_rotating(); + func_15D9(self.coop_icon_color_normal,param_01,var_04); +} + +//Function Number: 8 +func_15E2() +{ + level endon("special_op_terminated"); + friendlyhudicon_normal(); + thread friendly_hud_icon_blink_on_fire(); + thread friendly_hud_icon_blink_on_damage(); + thread monitor_color_blind_toggle(); + thread func_15E3(); + if(isdefined(self.nofriendlyhudicon)) + { + return; + } + + self.var_15DB.alpha = 0; + for(;;) + { + common_scripts\utility::flag_wait("coop_show_constant_icon"); + self.var_15DB.alpha = 1; + common_scripts\utility::flag_waitopen("coop_show_constant_icon"); + self.var_15DB.alpha = 0; + } +} + +//Function Number: 9 +func_15E3() +{ + level waittill("special_op_terminated"); + foreach(var_01 in level.players) + { + var_01 player_friendly_hud_destroy(); + } +} + +//Function Number: 10 +player_friendly_hud_destroy() +{ + if(isdefined(self.var_15DB)) + { + self.var_15DB destroy(); + } +} + +//Function Number: 11 +func_15E5() +{ + common_scripts\utility::flag_clear("coop_show_constant_icon"); +} + +//Function Number: 12 +friendlyhudicon_showall() +{ + common_scripts\utility::flag_set("coop_show_constant_icon"); +} + +//Function Number: 13 +friendlyhudicon_disable() +{ + self.nofriendlyhudicon = 1; + player_friendly_hud_destroy(); +} + +//Function Number: 14 +friendlyhudicon_enable() +{ + self.nofriendlyhudicon = undefined; + if(!isdefined(self.var_15DB)) + { + friendlyhudicon_normal(); + } +} + +//Function Number: 15 +friendlyhudicon_normal() +{ + if(!common_scripts\utility::flag("coop_game")) + { + return; + } + + self.var_15EA = "ICON_STATE_NORMAL"; + var_00 = friendlyhudicon_currentmaterial(); + var_01 = friendlyhudicon_rotating(); + func_15D9(self.coop_icon_color_normal,var_00,var_01); +} + +//Function Number: 16 +friendlyhudicon_downed() +{ + if(!common_scripts\utility::flag("coop_game")) + { + return; + } + + self.var_15EA = "ICON_STATE_DOWNED"; + var_00 = friendlyhudicon_currentmaterial(); + var_01 = friendlyhudicon_rotating(); + func_15D9(self.coop_icon_color_downed,var_00,var_01); +} + +//Function Number: 17 +friendlyhudicon_update(param_00) +{ + if(!common_scripts\utility::flag("coop_game")) + { + return; + } + + var_01 = friendlyhudicon_currentmaterial(); + var_02 = friendlyhudicon_rotating(); + func_15D9(param_00,var_01,var_02); +} + +//Function Number: 18 +friendlyhudicon_currentmaterial() +{ + var_00 = "coop_player_location"; + switch(self.var_15EA) + { + case "ICON_STATE_NORMAL": + var_00 = "coop_player_location"; + break; + + case "ICON_STATE_DOWNED": + var_00 = "hint_health"; + break; + + default: + break; + } + + return var_00; +} + +//Function Number: 19 +friendlyhudicon_rotating() +{ + var_00 = 0; + switch(self.var_15EA) + { + case "ICON_STATE_NORMAL": + var_00 = 1; + break; + + case "ICON_STATE_DOWNED": + var_00 = 0; + break; + + default: + break; + } + + return var_00; +} + +//Function Number: 20 +monitor_color_blind_toggle() +{ + for(;;) + { + if(self getlocalplayerprofiledata("colorBlind") != self.var_80D6) + { + self.var_80D6 = self getlocalplayerprofiledata("colorBlind"); + initialize_colors(self.var_80D6); + switch(self.var_15EA) + { + case "ICON_STATE_NORMAL": + friendlyhudicon_normal(); + break; + + case "ICON_STATE_DOWNED": + friendlyhudicon_downed(); + break; + } + } + + wait 0.05; + } +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_createfx.gsc b/MW3/Xbox/SP/maps/_createfx.gsc new file mode 100644 index 0000000..325e5fb --- /dev/null +++ b/MW3/Xbox/SP/maps/_createfx.gsc @@ -0,0 +1,52 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_createfx.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 3 + * Decompile Time: 45 ms + * Timestamp: 10/27/2023 2:34:21 AM +*******************************************************************/ + +//Function Number: 1 +createfx() +{ + level.func_position_player = ::func_position_player; + level.func_position_player_get = ::func_position_player_get; + level.func_loopfxthread = ::common_scripts\_fx::loopfxthread; + level.func_oneshotfxthread = ::common_scripts\_fx::oneshotfxthread; + level.func_create_loopsound = ::common_scripts\_fx::create_loopsound; + level.func_updatefx = ::common_scripts\_createfx::restart_fx_looper; + level.func_process_fx_rotater = ::common_scripts\_createfx::process_fx_rotater; + level.mp_createfx = 0; + var_00 = getaiarray(); + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + var_00[var_01] delete(); + } + + thread common_scripts\_createfx::createfxlogic(); + thread common_scripts\_createfx::func_get_level_fx(); + common_scripts\_createfx::createfx_common(); + level waittill("eternity"); +} + +//Function Number: 2 +func_position_player_get(param_00) +{ + if(distance(param_00,level.player.origin) > 64) + { + setdvar("createfx_playerpos_x",level.player.origin[0]); + setdvar("createfx_playerpos_y",level.player.origin[1]); + setdvar("createfx_playerpos_z",level.player.origin[2]); + } + + return level.player.origin; +} + +//Function Number: 3 +func_position_player() +{ + var_00 = []; + level.player setorigin((var_41[0],var_41[1],var_41[2])); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_damagefeedback.gsc b/MW3/Xbox/SP/maps/_damagefeedback.gsc new file mode 100644 index 0000000..801279d --- /dev/null +++ b/MW3/Xbox/SP/maps/_damagefeedback.gsc @@ -0,0 +1,118 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_damagefeedback.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 6 + * Decompile Time: 103 ms + * Timestamp: 10/27/2023 2:33:59 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + precacheshader("damage_feedback"); + common_scripts\utility::array_thread(level.players,::init_damage_feedback); + common_scripts\utility::array_thread(level.players,::monitordamage); +} + +//Function Number: 2 +init_damage_feedback() +{ + self.hud_damagefeedback = newclienthudelem(self); + self.hud_damagefeedback.alignx = "center"; + self.hud_damagefeedback.aligny = "middle"; + self.hud_damagefeedback.horzalign = "center"; + self.hud_damagefeedback.vertalign = "middle"; + self.hud_damagefeedback.alpha = 0; + self.hud_damagefeedback.archived = 1; + self.hud_damagefeedback setshader("damage_feedback",24,48); + self.hud_damagefeedback.y = 12; +} + +//Function Number: 3 +monitordamage() +{ + maps\_utility::add_damage_function(::damagefeedback_took_damage); +} + +//Function Number: 4 +func_15C7() +{ + maps\_utility::remove_damage_function(::damagefeedback_took_damage); +} + +//Function Number: 5 +damagefeedback_took_damage(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + if(!isplayer(param_01)) + { + return; + } + + if(!maps\_utility::is_damagefeedback_enabled()) + { + return; + } + + if(isdefined(self.var_15CB)) + { + var_07 = []; + if(isdefined(var_41[param_05])) + { + if(param_01 <= self.var_15CB) + { + return; + } + } + } + + param_02 updatedamagefeedback(self); +} + +//Function Number: 6 +updatedamagefeedback(param_00) +{ + if(!isplayer(self)) + { + return; + } + + if(!isdefined(param_00.team)) + { + return; + } + + if(param_00.team == self.team || param_00.team == "neutral") + { + return; + } + + if(isdefined(param_00.magic_bullet_shield) && param_00.magic_bullet_shield) + { + return; + } + + if(isdefined(param_00.godmode) && param_00.godmode) + { + return; + } + + if(isdefined(param_00.var_2504) && param_00.var_2504) + { + return; + } + + self playlocalsound("SP_hit_alert"); + var_01 = 1; + if(isdefined(level.slowmo.speed_slow)) + { + var_01 = level.slowmo.speed_slow; + } + + self.hud_damagefeedback.alpha = 1; + self.hud_damagefeedback fadeovertime(var_01); + self.hud_damagefeedback.alpha = 0; + var_02 = getdvarfloat("cg_crosshairVerticalOffset") * 240; + self.hud_damagefeedback.y = 12 - int(var_02); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_deadbody.gsc b/MW3/Xbox/SP/maps/_deadbody.gsc new file mode 100644 index 0000000..a3cf228 --- /dev/null +++ b/MW3/Xbox/SP/maps/_deadbody.gsc @@ -0,0 +1,110 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_deadbody.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 4 + * Decompile Time: 67 ms + * Timestamp: 10/27/2023 2:34:18 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + level.scr_anim["dead_guy"]["death1"] = %exposed_death_nerve; + level.scr_anim["dead_guy"]["death2"] = %exposed_death_falltoknees; + level.scr_anim["dead_guy"]["death3"] = %exposed_death_headtwist; + level.scr_anim["dead_guy"]["death4"] = %exposed_crouch_death_twist; + level.scr_anim["dead_guy"]["death5"] = %exposed_crouch_death_fetal; + level.scr_anim["dead_guy"]["death6"] = %death_sitting_pose_v1; + level.scr_anim["dead_guy"]["death7"] = %death_sitting_pose_v2; + level.scr_anim["dead_guy"]["death8"] = %death_pose_on_desk; + level.scr_anim["dead_guy"]["death9"] = %death_pose_on_window; + level.scr_animtree["ead_guy"] = #animtree; + level.var_3B78 = 1; + var_00 = getdvarint("ragdoll_max_simulating") - 6; + if(var_00 > 0) + { + level.var_3B79 = var_00; + } + else + { + level.var_3B79 = 0; + } + + var_01 = spawnstruct(); + var_01.var_3B7A = []; + common_scripts\utility::run_thread_on_targetname("trigger_body",::func_3B7B,var_01); + common_scripts\utility::run_thread_on_targetname("dead_body",::func_3B7C,var_01); +} + +//Function Number: 2 +func_3B7B(param_00) +{ + self waittill("trigger"); + var_01 = getentarray(self.target,"targetname"); + common_scripts\utility::array_thread(var_01,::func_3B7C,param_00); +} + +//Function Number: 3 +func_3B7C(param_00) +{ + if(!getdvarint("ragdoll_enable") && isdefined(self.script_parameters) && self.script_parameters == "require_ragdoll") + { + return; + } + + if(level.var_3B79 == 0) + { + return; + } + + var_01 = undefined; + if(isdefined(self.script_index)) + { + var_01 = self.script_index; + } + else + { + level.var_3B78++; + if(level.var_3B78 > 3) + { + level.var_3B78 = 1; + } + + var_01 = level.var_3B78; + } + + var_02 = spawn("script_model",(0,0,0)); + var_02.origin = self.origin; + var_02.angles = self.angles; + var_02.animname = "dead_guy"; + var_02 maps\_utility::func_21AB(); + param_00 que_body(var_02); + var_02 [[ level.var_3B7D[var_01] ]](); + if(!isdefined(self.script_trace)) + { + var_03 = bullettrace(var_02.origin + (0,0,5),var_02.origin + (0,0,-64),0,undefined); + var_02.origin = var_03["position"]; + } + + var_02 setflaggedanim("flag",var_02 maps\_utility::getanim(self.script_noteworthy),1,0,1); + var_02 waittillmatch("end","flag"); + if(!isdefined(self.script_start)) + { + var_02 startragdoll(); + } +} + +//Function Number: 4 +que_body(param_00) +{ + self.var_3B7A[self.var_3B7A.size] = param_00; + if(self.var_3B7A.size <= level.var_3B79) + { + return; + } + + self.var_3B7A[0] delete(); + self.var_3B7A = common_scripts\utility::array_removeundefined(self.var_3B7A); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_debug.gsc b/MW3/Xbox/SP/maps/_debug.gsc new file mode 100644 index 0000000..7b4f253 --- /dev/null +++ b/MW3/Xbox/SP/maps/_debug.gsc @@ -0,0 +1,2083 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_debug.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 103 + * Decompile Time: 1700 ms + * Timestamp: 10/27/2023 2:35:01 AM +*******************************************************************/ + +//Function Number: 1 +debugchains() +{ + var_00 = getallnodes(); + var_01 = 0; + var_02 = []; + for(var_03 = 0;var_03 < var_00.size;var_03++) + { + if(!var_00[var_03].spawnflags & 2 && (isdefined(var_00[var_03].target) && getnodearray(var_00[var_03].target,"targetname").size > 0) || isdefined(var_00[var_03].targetname) && getnodearray(var_00[var_03].targetname,"target").size > 0) + { + var_02[var_01] = var_00[var_03]; + var_01++; + } + } + + var_04 = 0; + for(;;) + { + if(getdvar("chain") == "1") + { + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + if(distance(level.player getorigin(),var_02[var_03].origin) < 1500) + { + } + } + + var_05 = getaiarray("allies"); + for(var_03 = 0;var_03 < var_05.size;var_03++) + { + var_06 = var_05[var_03] animscripts/utility::getclaimednode(); + if(isdefined(var_06)) + { + } + } + } + + common_scripts\utility::waitframe(); + } +} + +//Function Number: 2 +func_1539(param_00) +{ + var_01 = getaiarray(); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + if(var_01[var_02] getentitynumber() != param_00) + { + continue; + } + + var_01[var_02] thread debug_enemyposproc(); + break; + } +} + +//Function Number: 3 +debug_stopenemypos(param_00) +{ + var_01 = getaiarray(); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + if(var_01[var_02] getentitynumber() != param_00) + { + continue; + } + + var_01[var_02] notify("stop_drawing_enemy_pos"); + break; + } +} + +//Function Number: 4 +debug_enemyposproc() +{ + self endon("death"); + self endon("stop_drawing_enemy_pos"); + for(;;) + { + wait 0.05; + if(isalive(self.enemy)) + { + } + + if(!animscripts/utility::hasenemysightpos()) + { + continue; + } + + var_00 = animscripts/utility::getenemysightpos(); + } +} + +//Function Number: 5 +debug_enemyposreplay() +{ + var_00 = getaiarray(); + var_01 = undefined; + for(var_02 = 0;var_02 < var_00.size;var_02++) + { + var_01 = var_00[var_02]; + if(!isalive(var_01)) + { + continue; + } + + if(isdefined(var_01.lastenemysightpos)) + { + } + + if(isdefined(var_01.goodshootpos)) + { + if(var_01 isbadguy()) + { + var_03 = (1,0,0); + } + else + { + var_03 = (0,0,1); + } + + var_04 = var_01.origin + (0,0,54); + if(isdefined(var_01.node)) + { + if(var_01.node.type == "Cover Left") + { + var_05 = 1; + var_04 = anglestoright(var_01.node.angles); + var_04 = var_04 * -32; + var_04 = (var_04[0],var_04[1],64); + var_04 = var_01.node.origin + var_04; + } + else if(var_01.node.type == "Cover Right") + { + var_05 = 1; + var_04 = anglestoright(var_01.node.angles); + var_04 = var_04 * 32; + var_04 = (var_04[0],var_04[1],64); + var_04 = var_01.node.origin + var_04; + } + } + + common_scripts\utility::draw_arrow(var_04,var_01.goodshootpos,var_03); + } + } + + if(1) + { + return; + } + + if(!isalive(var_01)) + { + return; + } + + if(isalive(var_01.enemy)) + { + } + + if(isdefined(var_01.lastenemysightpos)) + { + } + + if(isalive(var_01.goodenemy)) + { + } + + if(!var_01 animscripts/utility::hasenemysightpos()) + { + return; + } + + var_06 = var_01 animscripts/utility::getenemysightpos(); + if(isdefined(var_01.goodshootpos)) + { + } +} + +//Function Number: 6 +drawenttag(param_00) +{ +} + +//Function Number: 7 +drawtag(param_00,param_01,param_02) +{ + var_03 = self gettagorigin(param_00); + var_04 = self gettagangles(param_00); + drawarrow(var_03,var_04,param_01,param_02); +} + +//Function Number: 8 +draworgforever(param_00) +{ + var_01 = undefined; + var_02 = undefined; + for(;;) + { + if(isdefined(self)) + { + var_01 = self.origin; + var_02 = self.angles; + } + + drawarrow(var_01,var_02,param_00); + wait 0.05; + } +} + +//Function Number: 9 +drawarrowforever(param_00,param_01) +{ + for(;;) + { + drawarrow(param_00,param_01); + wait 0.05; + } +} + +//Function Number: 10 +draworiginforever() +{ + while(isdefined(self)) + { + drawarrow(self.origin,self.angles); + wait 0.05; + } +} + +//Function Number: 11 +drawarrow(param_00,param_01,param_02,param_03) +{ + var_04 = 10; + var_05 = anglestoforward(param_01); + var_06 = var_05 * var_04; + var_07 = var_05 * var_04 * 0.8; + var_08 = anglestoright(param_01); + var_09 = var_08 * var_04 * -0.2; + var_0A = var_08 * var_04 * 0.2; + var_0B = anglestoup(param_01); + var_08 = var_08 * var_04; + var_0B = var_0B * var_04; + var_0C = (0.9,0.2,0.2); + var_0D = (0.2,0.9,0.2); + var_0E = (0.2,0.2,0.9); + if(isdefined(param_02)) + { + var_0C = param_02; + var_0D = param_02; + var_0E = param_02; + } + + if(!isdefined(param_03)) + { + param_03 = 1; + } +} + +//Function Number: 12 +drawforwardforever(param_00,param_01) +{ + if(!isdefined(param_00)) + { + param_00 = 100; + } + + if(!isdefined(param_01)) + { + param_01 = (0,1,0); + } + + for(;;) + { + if(!isdefined(self)) + { + return; + } + + var_02 = anglestoforward(self.angles); + wait 0.05; + } +} + +//Function Number: 13 +drawplayerviewforever() +{ + for(;;) + { + drawarrow(level.player.origin,level.player getplayerangles(),(1,1,1)); + wait 0.05; + } +} + +//Function Number: 14 +drawtagforever(param_00,param_01) +{ + for(;;) + { + if(!isdefined(self)) + { + return; + } + + drawtag(param_00,param_01); + wait 0.05; + } +} + +//Function Number: 15 +drawtagtrails(param_00,param_01) +{ + for(;;) + { + if(!isdefined(self.origin)) + { + break; + } + + drawtag(param_00,param_01,1000); + wait 0.05; + } +} + +//Function Number: 16 +dragtaguntildeath(param_00,param_01) +{ + self endon("death"); + for(;;) + { + if(!isdefined(self)) + { + break; + } + + if(!isdefined(self.origin)) + { + break; + } + + drawtag(param_00,param_01); + wait 0.05; + } +} + +//Function Number: 17 +viewtag(param_00,param_01) +{ + if(param_00 == "ai") + { + var_02 = getaiarray(); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + var_02[var_03] drawtag(param_01); + } + } +} + +//Function Number: 18 +debug_corner() +{ + level.player.ignoreme = 1; + var_00 = getallnodes(); + var_01 = []; + for(var_02 = 0;var_02 < var_00.size;var_02++) + { + if(var_00[var_02].type == "Cover Left") + { + var_01[var_01.size] = var_00[var_02]; + } + + if(var_00[var_02].type == "Cover Right") + { + var_01[var_01.size] = var_00[var_02]; + } + } + + var_03 = getaiarray(); + for(var_02 = 0;var_02 < var_03.size;var_02++) + { + var_03[var_02] delete(); + } + + level.debugspawners = getspawnerarray(); + level.activenodes = []; + level.completednodes = []; + for(var_02 = 0;var_02 < level.debugspawners.size;var_02++) + { + level.debugspawners[var_02].targetname = "blah"; + } + + var_04 = 0; + for(var_02 = 0;var_02 < 30;var_02++) + { + if(var_02 >= var_01.size) + { + break; + } + + var_01[var_02] thread covertest(); + var_04++; + } + + if(var_01.size <= 30) + { + return; + } + + for(;;) + { + level waittill("debug_next_corner"); + if(var_04 >= var_01.size) + { + var_04 = 0; + } + + var_01[var_04] thread covertest(); + var_04++; + } +} + +//Function Number: 19 +covertest() +{ + func_1550(); +} + +//Function Number: 20 +func_1550() +{ + var_00 = undefined; + var_01 = undefined; + for(;;) + { + for(var_02 = 0;var_02 < level.debugspawners.size;var_02++) + { + wait 0.05; + var_01 = level.debugspawners[var_02]; + var_03 = 0; + for(var_04 = 0;var_04 < level.activenodes.size;var_04++) + { + if(distance(level.activenodes[var_04].origin,self.origin) > 250) + { + continue; + } + + var_03 = 1; + break; + } + + if(var_03) + { + continue; + } + + var_05 = 0; + for(var_04 = 0;var_04 < level.completednodes.size;var_04++) + { + if(level.completednodes[var_04] != self) + { + continue; + } + + var_05 = 1; + break; + } + + if(var_05) + { + continue; + } + + level.activenodes[level.activenodes.size] = self; + var_01.origin = self.origin; + var_01.angles = self.angles; + var_01.count = 1; + var_00 = var_01 stalingradspawn(); + if(maps\_utility::func_F77(var_00)) + { + removeactivespawner(self); + continue; + } + + break; + } + + if(isalive(var_00)) + { + break; + } + } + + wait 1; + if(isalive(var_00)) + { + var_00.ignoreme = 1; + var_00.team = "neutral"; + var_00 setgoalpos(var_00.origin); + thread createline(self.origin); + var_00 thread maps\_utility::func_1551(); + thread createlineconstantly(var_00); + var_00 waittill("death"); + } + + removeactivespawner(self); + level.completednodes[level.completednodes.size] = self; +} + +//Function Number: 21 +removeactivespawner(param_00) +{ + var_01 = []; + for(var_02 = 0;var_02 < level.activenodes.size;var_02++) + { + if(level.activenodes[var_02] == param_00) + { + continue; + } + + var_01[var_01.size] = level.activenodes[var_02]; + } + + level.activenodes = var_01; +} + +//Function Number: 22 +createline(param_00) +{ + wait 0.05; +} + +//Function Number: 23 +createlineconstantly(param_00) +{ + var_01 = undefined; + while(isalive(param_00)) + { + var_01 = param_00.origin; + wait 0.05; + } + + wait 0.05; +} + +//Function Number: 24 +debugmisstime() +{ + self notify("stopdebugmisstime"); + self endon("stopdebugmisstime"); + self endon("death"); + for(;;) + { + if(self.a.var_1556 <= 0) + { + } + else + { + } + + wait 0.05; + } +} + +//Function Number: 25 +func_1557() +{ + self notify("stopdebugmisstime"); +} + +//Function Number: 26 +func_1558(param_00,param_01) +{ +} + +//Function Number: 27 +debugjump(param_00) +{ +} + +//Function Number: 28 +debugdvars() +{ +} + +//Function Number: 29 +remove_reflection_objects() +{ +} + +//Function Number: 30 +create_reflection_objects() +{ +} + +//Function Number: 31 +create_reflection_object() +{ +} + +//Function Number: 32 +func_155E() +{ +} + +//Function Number: 33 +debug_reflection_buttons() +{ +} + +//Function Number: 34 +remove_fxlighting_object() +{ +} + +//Function Number: 35 +create_fxlighting_object() +{ +} + +//Function Number: 36 +play_fxlighting_fx() +{ + self endon("death"); + for(;;) + { + playfxontag(common_scripts\utility::func_539("lighting_fraction"),self,"tag_origin"); + wait 0.1; + } +} + +//Function Number: 37 +debug_fxlighting() +{ +} + +//Function Number: 38 +func_1564() +{ +} + +//Function Number: 39 +func_1565() +{ + var_00 = undefined; + var_01 = undefined; + var_00 = (15.1859,-12.2822,4.071); + var_01 = (947.2,-10918,64.9514); + for(;;) + { + wait 0.05; + var_02 = var_00; + var_03 = var_01; + if(!isdefined(var_00)) + { + var_02 = level.var_1566; + } + + if(!isdefined(var_01)) + { + var_03 = level.player geteye(); + } + + var_04 = bullettrace(var_02,var_03,0,undefined); + } +} + +//Function Number: 40 +func_0ABA() +{ +} + +//Function Number: 41 +debug_character_count() +{ + var_00 = newhudelem(); + var_00.alignx = "left"; + var_00.aligny = "middle"; + var_00.x = 10; + var_00.y = 100; + var_00.label = &"DEBUG_DRONES"; + var_00.alpha = 0; + var_01 = newhudelem(); + var_01.alignx = "left"; + var_01.aligny = "middle"; + var_01.x = 10; + var_01.y = 115; + var_01.label = &"DEBUG_ALLIES"; + var_01.alpha = 0; + var_02 = newhudelem(); + var_02.alignx = "left"; + var_02.aligny = "middle"; + var_02.x = 10; + var_02.y = 130; + var_02.label = &"DEBUG_AXIS"; + var_02.alpha = 0; + var_03 = newhudelem(); + var_03.alignx = "left"; + var_03.aligny = "middle"; + var_03.x = 10; + var_03.y = 145; + var_03.label = &"DEBUG_VEHICLES"; + var_03.alpha = 0; + var_04 = newhudelem(); + var_04.alignx = "left"; + var_04.aligny = "middle"; + var_04.x = 10; + var_04.y = 160; + var_04.label = &"DEBUG_TOTAL"; + var_04.alpha = 0; + var_05 = "off"; + for(;;) + { + var_06 = getdvar("debug_character_count"); + if(var_06 == "off") + { + if(var_06 != var_05) + { + var_00.alpha = 0; + var_01.alpha = 0; + var_02.alpha = 0; + var_03.alpha = 0; + var_04.alpha = 0; + var_05 = var_06; + } + + wait 0.25; + continue; + } + else if(var_06 != var_05) + { + var_00.alpha = 1; + var_01.alpha = 1; + var_02.alpha = 1; + var_03.alpha = 1; + var_04.alpha = 1; + var_05 = var_06; + } + + var_07 = getentarray("drone","targetname").size; + var_00 setvalue(var_07); + var_08 = getaiarray("allies").size; + var_01 setvalue(var_08); + var_09 = getaiarray("bad_guys").size; + var_02 setvalue(var_09); + var_03 setvalue(getentarray("script_vehicle","classname").size); + var_04 setvalue(var_07 + var_08 + var_09); + wait 0.25; + } +} + +//Function Number: 42 +nuke() +{ + if(!self.damageshield) + { + self kill((0,0,-500),level.player,level.player); + } +} + +//Function Number: 43 +debug_nuke() +{ +} + +//Function Number: 44 +debug_misstime() +{ +} + +//Function Number: 45 +camera() +{ + wait 0.05; + var_00 = getentarray("camera","targetname"); + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + var_02 = getent(var_00[var_01].target,"targetname"); + var_00[var_01].var_156C = var_02.origin; + var_00[var_01].angles = vectortoangles(var_02.origin - var_00[var_01].origin); + } + + for(;;) + { + var_03 = getaiarray("axis"); + if(!var_03.size) + { + freeplayer(); + wait 0.5; + continue; + } + + var_04 = []; + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + for(var_05 = 0;var_05 < var_03.size;var_05++) + { + if(distance(var_00[var_01].origin,var_03[var_05].origin) > 256) + { + continue; + } + + var_04[var_04.size] = var_00[var_01]; + break; + } + } + + if(!var_04.size) + { + freeplayer(); + wait 0.5; + continue; + } + + var_06 = []; + for(var_01 = 0;var_01 < var_04.size;var_01++) + { + var_07 = var_04[var_01]; + var_08 = var_07.var_156C; + var_09 = var_07.origin; + var_0A = vectortoangles((var_09[0],var_09[1],var_09[2]) - (var_08[0],var_08[1],var_08[2])); + var_0B = (0,var_0A[1],0); + var_0C = anglestoforward(var_0B); + var_0A = vectornormalize(var_09 - level.player.origin); + var_0D = vectordot(var_0C,var_0A); + if(var_0D < 0.85) + { + continue; + } + + var_06[var_06.size] = var_07; + } + + if(!var_06.size) + { + freeplayer(); + wait 0.5; + continue; + } + + var_0E = distance(level.player.origin,var_06[0].origin); + var_0F = var_06[0]; + for(var_01 = 1;var_01 < var_06.size;var_01++) + { + var_10 = distance(level.player.origin,var_06[var_01].origin); + if(var_10 > var_0E) + { + continue; + } + + var_0F = var_06[var_01]; + var_0E = var_10; + } + + setplayertocamera(var_0F); + wait 3; + } +} + +//Function Number: 46 +freeplayer() +{ + setdvar("cl_freemove","0"); +} + +//Function Number: 47 +setplayertocamera(param_00) +{ + setdvar("cl_freemove","2"); +} + +//Function Number: 48 +anglescheck() +{ + for(;;) + { + if(getdvar("angles","0") == "1") + { + setdvar("angles","0"); + } + + wait 1; + } +} + +//Function Number: 49 +func_1570() +{ + if(!isdefined(level.dollytime)) + { + level.dollytime = 5; + } + + setdvar("dolly",""); + thread dollystart(); + thread dollyend(); + thread dollygo(); +} + +//Function Number: 50 +dollystart() +{ + for(;;) + { + if(getdvar("dolly") == "start") + { + level.dollystart = level.player.origin; + setdvar("dolly",""); + } + + wait 1; + } +} + +//Function Number: 51 +dollyend() +{ + for(;;) + { + if(getdvar("dolly") == "end") + { + level.dollyend = level.player.origin; + setdvar("dolly",""); + } + + wait 1; + } +} + +//Function Number: 52 +dollygo() +{ + for(;;) + { + wait 1; + if(getdvar("dolly") == "go") + { + setdvar("dolly",""); + if(!isdefined(level.dollystart)) + { + continue; + } + + if(!isdefined(level.dollyend)) + { + continue; + } + + var_00 = spawn("script_origin",(0,0,0)); + var_00.origin = level.dollystart; + level.player setorigin(var_00.origin); + level.player linkto(var_00); + var_00 moveto(level.dollyend,level.dollytime); + wait level.dollytime; + var_00 delete(); + } + } +} + +//Function Number: 53 +deathspawnerpreview() +{ + waittillframeend; + for(var_00 = 0;var_00 < 50;var_00++) + { + if(!isdefined(level.deathspawnerents[var_00])) + { + continue; + } + + var_01 = level.deathspawnerents[var_00]; + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + var_03 = var_01[var_02]; + if(isdefined(var_03.var_1577)) + { + continue; + } + } + } +} + +//Function Number: 54 +lastsightposwatch() +{ +} + +//Function Number: 55 +watchminimap() +{ + precacheitem("defaultweapon"); + for(;;) + { + updateminimapsetting(); + wait 0.25; + } +} + +//Function Number: 56 +updateminimapsetting() +{ + var_00 = getdvarfloat("scr_requiredMapAspectRatio",1); + if(!isdefined(level.var_157B)) + { + setdvar("scr_minimap_corner_targetname","minimap_corner"); + level.var_157B = "minimap_corner"; + } + + if(!isdefined(level.minimapheight)) + { + setdvar("scr_minimap_height","0"); + level.minimapheight = 0; + } + + var_01 = getdvarfloat("scr_minimap_height"); + var_02 = getdvar("scr_minimap_corner_targetname"); + if(var_01 != level.minimapheight || var_02 != level.var_157B) + { + if(isdefined(level.var_157D)) + { + level.minimapplayer unlink(); + level.var_157D delete(); + level notify("end_draw_map_bounds"); + } + + if(var_01 > 0) + { + level.minimapheight = var_01; + level.var_157B = var_02; + var_03 = level.player; + var_04 = getentarray(var_02,"targetname"); + if(var_04.size == 2) + { + var_05 = var_04[0].origin + var_04[1].origin; + var_05 = (var_05[0] * 0.5,var_05[1] * 0.5,var_05[2] * 0.5); + var_06 = (var_04[0].origin[0],var_04[0].origin[1],var_05[2]); + var_07 = (var_04[0].origin[0],var_04[0].origin[1],var_05[2]); + if(var_04[1].origin[0] > var_04[0].origin[0]) + { + var_06 = (var_04[1].origin[0],var_06[1],var_06[2]); + } + else + { + var_07 = (var_04[1].origin[0],var_07[1],var_07[2]); + } + + if(var_04[1].origin[1] > var_04[0].origin[1]) + { + var_06 = (var_06[0],var_04[1].origin[1],var_06[2]); + } + else + { + var_07 = (var_07[0],var_04[1].origin[1],var_07[2]); + } + + var_08 = var_06 - var_05; + var_05 = (var_05[0],var_05[1],var_05[2] + var_01); + var_09 = spawn("script_origin",var_03.origin); + var_0A = (cos(getnorthyaw()),sin(getnorthyaw()),0); + var_0B = (var_0A[1],0 - var_0A[0],0); + var_0C = vectordot(var_0A,var_08); + if(var_0C < 0) + { + var_0C = 0 - var_0C; + } + + var_0D = vectordot(var_0B,var_08); + if(var_0D < 0) + { + var_0D = 0 - var_0D; + } + + if(var_00 > 0) + { + var_0E = var_0D / var_0C; + if(var_0E < var_00) + { + var_0F = var_00 / var_0E; + var_0D = var_0D * var_0F; + var_10 = vecscale(var_0B,vectordot(var_0B,var_06 - var_05) * var_0F - 1); + var_07 = var_07 - var_10; + var_06 = var_06 + var_10; + } + else + { + var_0F = var_10 / var_02; + var_0D = var_0D * var_10; + var_10 = vecscale(var_0B,vectordot(var_0B,var_07 - var_06) * var_10 - 1); + var_07 = var_07 - var_10; + var_06 = var_06 + var_10; + } + } + + if(level.console) + { + var_11 = 1.777778; + var_12 = 2 * atan(var_0D * 0.8 / var_01); + var_13 = 2 * atan(var_0C * var_11 * 0.8 / var_01); + } + else + { + var_11 = 1.333333; + var_12 = 2 * atan(var_12 * 1.05 / var_03); + var_13 = 2 * atan(var_0D * var_12 * 1.05 / var_02); + } + + if(var_12 > var_13) + { + var_14 = var_12; + } + else + { + var_14 = var_14; + } + + var_15 = var_01 - 1000; + if(var_15 < 16) + { + var_15 = 16; + } + + if(var_15 > 10000) + { + var_15 = 10000; + } + + var_03 playerlinktoabsolute(var_09); + var_09.origin = var_05 + (0,0,-62); + var_09.angles = (90,getnorthyaw(),0); + var_03 giveweapon("defaultweapon"); + setsaveddvar("cg_fov",var_14); + level.minimapplayer = var_03; + level.var_157D = var_09; + thread drawminimapbounds(var_05,var_07,var_06); + return; + } + + return; + } + } +} + +//Function Number: 57 +getchains() +{ + var_00 = []; + var_00 = getentarray("minimap_line","script_noteworthy"); + var_01 = []; + for(var_02 = 0;var_02 < var_00.size;var_02++) + { + var_01[var_02] = var_00[var_02] func_1580(); + } + + return var_01; +} + +//Function Number: 58 +func_1580() +{ + var_00 = []; + var_01 = self; + while(isdefined(var_01)) + { + var_00[var_00.size] = var_01; + if(!isdefined(var_01) || !isdefined(var_01.target)) + { + break; + } + + var_01 = getent(var_01.target,"targetname"); + if(isdefined(var_01) && var_01 == var_00[0]) + { + var_00[var_00.size] = var_01; + break; + } + } + + var_02 = []; + for(var_03 = 0;var_03 < var_00.size;var_03++) + { + var_02[var_03] = var_00[var_03].origin; + } + + return var_02; +} + +//Function Number: 59 +vecscale(param_00,param_01) +{ + return (param_00[0] * param_01,param_00[1] * param_01,param_00[2] * param_01); +} + +//Function Number: 60 +drawminimapbounds(param_00,param_01,param_02) +{ + level notify("end_draw_map_bounds"); + level endon("end_draw_map_bounds"); + var_03 = param_00[2] - param_02[2]; + var_04 = length(param_01 - param_02); + var_05 = param_01 - param_00; + var_05 = vectornormalize((var_05[0],var_05[1],0)); + param_01 = param_01 + vecscale(var_05,var_04 * 1 / 800 * 0); + var_06 = param_02 - param_00; + var_06 = vectornormalize((var_06[0],var_06[1],0)); + param_02 = param_02 + vecscale(var_06,var_04 * 1 / 800 * 0); + var_07 = (cos(getnorthyaw()),sin(getnorthyaw()),0); + var_08 = param_02 - param_01; + var_09 = vecscale(var_07,vectordot(var_08,var_07)); + var_0A = vecscale(var_07,abs(vectordot(var_08,var_07))); + var_0B = param_01; + var_0C = param_01 + var_09; + var_0D = param_02; + var_0E = param_02 - var_09; + var_0F = vecscale(param_01 + param_02,0.5) + vecscale(var_0A,0.51); + var_10 = var_04 * 0.003; + var_11 = getchains(); + for(;;) + { + common_scripts\utility::array_levelthread(var_11,::common_scripts\utility::plot_points); + wait 0.05; + } +} + +//Function Number: 61 +islookingatorigin(param_00) +{ + var_01 = vectornormalize(param_00 - self getshootatpos()); + var_02 = vectornormalize(param_00 - (0,0,24) - self getshootatpos()); + var_03 = vectordot(var_01,var_02); + var_04 = anglestoforward(self getplayerangles()); + var_05 = vectordot(var_04,var_01); + if(var_05 > var_03) + { + return 1; + } + + return 0; +} + +//Function Number: 62 +debug_colornodes() +{ + wait 0.05; + var_00 = getaiarray(); + var_01 = []; + for(var_02 = 0;var_02 < var_01.size;var_02++ = var_41["neutral"]) + { + var_03 = var_01[var_02]; + if(!isdefined(var_03.currentcolorcode)) + { + continue; + } + + var_41[var_03.team][var_03.currentcolorcode] = 1; + var_04 = (1,1,1); + if(isdefined(var_03.script_forcecolor)) + { + var_04 = level.var_1585[var_03.script_forcecolor]; + } + + if(var_03.team == "axis") + { + continue; + } + + var_03 try_to_draw_line_to_node(); + } + + draw_colornodes(var_41,"allies"); + draw_colornodes(var_41,"axis"); +} + +//Function Number: 63 +draw_colornodes(param_00,param_01) +{ + var_02 = getarraykeys(param_00[param_01]); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + var_04 = (1,1,1); + var_04 = level.var_1585[getsubstr(var_02[var_03],0,1)]; + if(isdefined(level.colornodes_debug_array[param_01][var_02[var_03]])) + { + var_05 = level.colornodes_debug_array[param_01][var_02[var_03]]; + for(var_06 = 0;var_06 < var_05.size;var_06++) + { + } + } + } +} + +//Function Number: 64 +get_team_substr() +{ + if(self.team == "allies") + { + if(!isdefined(self.node.script_color_allies)) + { + return; + } + + return self.node.script_color_allies; + } + + if(self.team == "axis") + { + if(!isdefined(self.node.script_color_axis)) + { + return; + } + + return self.node.script_color_axis; + } +} + +//Function Number: 65 +try_to_draw_line_to_node() +{ + if(!isdefined(self.node)) + { + return; + } + + if(!isdefined(self.script_forcecolor)) + { + return; + } + + var_00 = get_team_substr(); + if(!isdefined(var_00)) + { + return; + } + + if(!issubstr(var_00,self.script_forcecolor)) + { + } +} + +//Function Number: 66 +fogcheck() +{ + if(getdvar("depth_close") == "") + { + setdvar("depth_close","0"); + } + + if(getdvar("depth_far") == "") + { + setdvar("depth_far","1500"); + } + + var_00 = getdvarint("depth_close"); + var_01 = getdvarint("depth_far"); + setexpfog(var_00,var_01,1,1,1,1,0); +} + +//Function Number: 67 +debugthreat() +{ + level.last_threat_debug = gettime(); + thread func_158D(); +} + +//Function Number: 68 +func_158D() +{ +} + +//Function Number: 69 +func_158E(param_00,param_01) +{ + if(self.team == param_00.team) + { + return; + } + + var_02 = 0; + var_02 = var_02 + self.threatbias; + var_03 = 0; + var_03 = var_03 + param_00.threatbias; + var_04 = undefined; + if(isdefined(param_01)) + { + var_04 = self getthreatbiasgroup(); + if(isdefined(var_04)) + { + var_03 = var_03 + getthreatbias(param_01,var_04); + var_02 = var_02 + getthreatbias(var_04,param_01); + } + } + + if(param_00.ignoreme || var_03 < -900000) + { + var_03 = "Ignore"; + } + + if(self.ignoreme || var_02 < -900000) + { + var_02 = "Ignore"; + } + + var_05 = 20; + var_06 = (1,0.5,0.2); + var_07 = (0.2,0.5,1); + var_08 = !isplayer(self) && self.pacifist; + for(var_09 = 0;var_09 <= var_05;var_09++) + { + if(isdefined(param_01)) + { + } + + if(isdefined(var_04)) + { + } + + if(var_08) + { + } + + wait 0.05; + } +} + +//Function Number: 70 +debugcolorfriendlies() +{ + level.var_F92 = []; + level.debug_color_huds = []; + for(;;) + { + level waittill("updated_color_friendlies"); + draw_color_friendlies(); + } +} + +//Function Number: 71 +draw_color_friendlies() +{ + level endon("updated_color_friendlies"); + var_00 = getarraykeys(level.var_F92); + var_01 = []; + var_02 = []; + var_03 = maps\_utility::get_script_palette(); + var_04 = 0; + while(var_04 < var_41.size) + { + var_02[var_41[var_04]] = 0; + var_04++ = var_41[var_41.size]; + } + + var_04 = 0; + while(var_04 < var_01.size) + { + var_05 = level.var_F92[var_01[var_04]]; + var_02[var_05]++ = "p"; + var_04++ = var_41[var_41.size]; + } + + for(var_04 = 0;var_04 < level.debug_color_huds.size;var_04++ = "b") + { + level.debug_color_huds[var_04] destroy(); + } + + level.debug_color_huds = []; + var_06 = 15; + var_07 = 365; + var_08 = 25; + var_09 = 25; + for(var_04 = 0;var_04 < var_41.size;var_04++ = "c") + { + if(var_02[var_41[var_04]] <= 0) + { + continue; + } + + var_0A = 0; + while(var_0A < var_02[var_41[var_04]]) + { + var_0B = newhudelem(); + var_0B.x = var_06 + 25 * var_0A; + var_0B.y = var_07; + var_0B setshader("white",16,16); + var_0B.alignx = "left"; + var_0B.aligny = "bottom"; + var_0B.alpha = 1; + var_0B.color = var_03[var_41[var_04]]; + level.debug_color_huds[level.debug_color_huds.size] = var_0B; + var_0A++ = var_41[var_41.size]; + } + + var_07 = var_07 + var_09; + } +} + +//Function Number: 72 +playernode() +{ + for(;;) + { + if(isdefined(level.player.node)) + { + } + + wait 0.05; + } +} + +//Function Number: 73 +drawusers() +{ + if(isalive(self.var_F18)) + { + } +} + +//Function Number: 74 +debuggoalpos() +{ + for(;;) + { + var_00 = getaiarray(); + common_scripts\utility::array_thread(var_00,::func_1596); + wait 0.05; + } +} + +//Function Number: 75 +func_1596() +{ + if(!isdefined(self.goalpos)) + { + } +} + +//Function Number: 76 +colordebug() +{ + wait 0.5; + var_00 = []; + for(;;) + { + var_01 = 0; + while(var_01 < var_41.size) + { + var_02 = level.currentcolorforced["allies"][var_41[var_01]]; + if(isdefined(var_02)) + { + draw_colored_nodes(var_02); + } + + var_01++ = var_41[var_41.size]; + } + + wait 0.05; + } +} + +//Function Number: 77 +draw_colored_nodes(param_00) +{ + var_01 = level.var_F06["allies"][param_00]; + common_scripts\utility::array_thread(var_01,::drawusers); +} + +//Function Number: 78 +func_1599() +{ + level.animsounds = []; + level.animsound_aliases = []; + waittillframeend; + waittillframeend; + var_00 = getarraykeys(level.scr_notetrack); + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + func_159B(var_00[var_01]); + } + + var_00 = getarraykeys(level.scr_animsound); + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + init_animsounds_for_animname(var_00[var_01]); + } +} + +//Function Number: 79 +func_159B(param_00) +{ + foreach(var_0A, var_02 in level.scr_notetrack[param_00]) + { + foreach(var_09, var_04 in var_02) + { + foreach(var_06 in var_04) + { + var_07 = var_06["sound"]; + if(!isdefined(var_07)) + { + continue; + } + + level.animsound_aliases[param_00][var_0A][var_09]["soundalias"] = var_07; + if(isdefined(var_06["created_by_animSound"])) + { + level.animsound_aliases[param_00][var_0A][var_09]["created_by_animSound"] = 1; + } + } + } + } +} + +//Function Number: 80 +init_animsounds_for_animname(param_00) +{ + var_01 = getarraykeys(level.scr_animsound[param_00]); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + var_03 = var_01[var_02]; + var_04 = level.scr_animsound[param_00][var_03]; + level.animsound_aliases[param_00][var_03]["#" + var_03]["soundalias"] = var_04; + level.animsound_aliases[param_00][var_03]["#" + var_03]["created_by_animSound"] = 1; + } +} + +//Function Number: 81 +add_hud_line(param_00,param_01,param_02) +{ + var_03 = newhudelem(); + var_03.alignx = "left"; + var_03.aligny = "middle"; + var_03.x = param_00; + var_03.y = param_01; + var_03.alpha = 1; + var_03.fontscale = 1; + var_03.label = param_02; + level.animsound_hud_extralines[level.animsound_hud_extralines.size] = var_03; + return var_03; +} + +//Function Number: 82 +debug_animsound() +{ +} + +//Function Number: 83 +draw_animsounds_in_hud() +{ + var_00 = level.animsound_tagged; + var_01 = var_00.animsounds; + var_02 = "generic"; + if(isdefined(var_00.animname)) + { + var_02 = var_00.animname; + } + + level.animsound_hud_animname.label = "Actor: " + var_02; + if(level.player buttonpressed("f12")) + { + if(!level.var_15A3) + { + level.var_15A4 = !level.var_15A4; + level.var_15A3 = 1; + } + } + else + { + level.var_15A3 = 0; + } + + if(level.player buttonpressed("UPARROW")) + { + if(level.animsound_input != "up") + { + level.var_15A6--; + } + + level.animsound_input = "up"; + } + else if(level.player buttonpressed("DOWNARROW")) + { + if(level.animsound_input != "down") + { + level.var_15A6++; + } + + level.animsound_input = "down"; + } + else + { + level.animsound_input = "none"; + } + + for(var_03 = 0;var_03 < level.animsound_hudlimit;var_03++) + { + var_04 = level.var_15A7[var_03]; + var_04.label = ""; + var_04.color = (1,1,1); + var_04 = level.var_15A8[var_03]; + var_04.label = ""; + var_04.color = (1,1,1); + var_04 = level.animsound_hud_alias[var_03]; + var_04.label = ""; + var_04.color = (1,1,1); + } + + var_05 = getarraykeys(var_01); + var_06 = -1; + for(var_03 = 0;var_03 < var_05.size;var_03++) + { + if(var_05[var_03] > var_06) + { + var_06 = var_05[var_03]; + } + } + + if(var_06 == -1) + { + return; + } + + if(level.var_15A6 > var_06) + { + level.var_15A6 = var_06; + } + + if(level.var_15A6 < 0) + { + level.var_15A6 = 0; + } + + for(;;) + { + if(isdefined(var_01[level.var_15A6])) + { + break; + } + + level.var_15A6--; + if(level.var_15A6 < 0) + { + level.var_15A6 = var_06; + } + } + + level.animsound_hud_anime.label = "Anim: " + var_01[level.var_15A6].anime; + level.var_15A7[level.var_15A6].color = (1,1,0); + level.var_15A8[level.var_15A6].color = (1,1,0); + level.animsound_hud_alias[level.var_15A6].color = (1,1,0); + var_07 = gettime(); + for(var_03 = 0;var_03 < var_05.size;var_03++) + { + var_08 = var_05[var_03]; + var_09 = var_01[var_08]; + var_04 = level.var_15A7[var_08]; + var_0A = get_alias_from_stored(var_09); + var_04.label = var_08 + 1 + ". " + var_09.notetrack; + var_04 = level.var_15A8[var_08]; + var_04.label = int(var_07 - var_09.end_time - -5536 * 0.001); + if(isdefined(var_0A)) + { + var_04 = level.animsound_hud_alias[var_08]; + var_04.label = var_0A; + if(!is_from_animsound(var_09.animname,var_09.anime,var_09.notetrack)) + { + var_04.color = (0.7,0.7,0.7); + } + } + } + + if(level.player buttonpressed("del")) + { + var_09 = var_01[level.var_15A6]; + var_0A = get_alias_from_stored(var_09); + if(!isdefined(var_0A)) + { + return; + } + + if(!is_from_animsound(var_09.animname,var_09.anime,var_09.notetrack)) + { + return; + } + + level.animsound_aliases[var_09.animname][var_09.anime][var_09.notetrack] = undefined; + debug_animsoundsave(); + } +} + +//Function Number: 84 +get_alias_from_stored(param_00) +{ + if(!isdefined(level.animsound_aliases[param_00.animname])) + { + return; + } + + if(!isdefined(level.animsound_aliases[param_00.animname][param_00.anime])) + { + return; + } + + if(!isdefined(level.animsound_aliases[param_00.animname][param_00.anime][param_00.notetrack])) + { + return; + } + + return level.animsound_aliases[param_00.animname][param_00.anime][param_00.notetrack]["soundalias"]; +} + +//Function Number: 85 +is_from_animsound(param_00,param_01,param_02) +{ + return isdefined(level.animsound_aliases[param_00][param_01][param_02]["created_by_animSound"]); +} + +//Function Number: 86 +display_animsound() +{ + if(distance(level.player.origin,self.origin) > 1500) + { + return; + } + + level.animsounds_thisframe[level.animsounds_thisframe.size] = self; +} + +//Function Number: 87 +func_15AF(param_00) +{ +} + +//Function Number: 88 +func_15B0() +{ +} + +//Function Number: 89 +func_15B1(param_00,param_01) +{ + if(!isdefined(level.animsound_tagged)) + { + return; + } + + if(!isdefined(level.animsound_tagged.animsounds[param_01])) + { + return; + } + + var_02 = level.animsound_tagged.animsounds[param_01]; + var_03 = get_alias_from_stored(var_02); + if(!isdefined(var_03) || is_from_animsound(var_02.animname,var_02.anime,var_02.notetrack)) + { + level.animsound_aliases[var_02.animname][var_02.anime][var_02.notetrack]["soundalias"] = param_00; + level.animsound_aliases[var_02.animname][var_02.anime][var_02.notetrack]["created_by_animSound"] = 1; + debug_animsoundsave(); + } +} + +//Function Number: 90 +debug_animsoundsave() +{ +} + +//Function Number: 91 +print_aliases_to_file(param_00) +{ + var_01 = " "; + var_02 = getarraykeys(level.animsound_aliases); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + var_04 = getarraykeys(level.animsound_aliases[var_02[var_03]]); + for(var_05 = 0;var_05 < var_04.size;var_05++) + { + var_06 = var_04[var_05]; + var_07 = getarraykeys(level.animsound_aliases[var_02[var_03]][var_06]); + for(var_08 = 0;var_08 < var_07.size;var_08++) + { + var_09 = var_07[var_08]; + if(!is_from_animsound(var_02[var_03],var_06,var_09)) + { + continue; + } + + var_0A = level.animsound_aliases[var_02[var_03]][var_06][var_09]["soundalias"]; + if(var_09 == "#" + var_06) + { + continue; + } + } + } + } +} + +//Function Number: 92 +tostr(param_00) +{ + var_01 = "\"; + for(var_02 = 0;var_02 < param_00.size;var_02++) + { + if(param_00[var_02] == "\") + { + var_01 = var_01 + "\\"; + var_01 = var_01 + "\"; + continue; + } + + var_01 = var_01 + param_00[var_02]; + } + + var_01 = var_01 + "\"; + return var_01; +} + +//Function Number: 93 +linedraw(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if(!isdefined(param_02)) + { + param_02 = (1,1,1); + } + + if(isdefined(param_05)) + { + param_05 = param_05 * 20; + for(var_06 = 0;var_06 < param_05;var_06++) + { + wait 0.05; + } + + return; + } + + wait 0.05; +} + +//Function Number: 94 +print3ddraw(param_00,param_01,param_02) +{ + wait 0.05; +} + +//Function Number: 95 +complete_me() +{ + if(getdvar("credits_active") == "1") + { + wait 7; + setdvar("credits_active","0"); + maps\_endmission::credits_end(); + return; + } + + wait 7; + maps\_utility::nextmission(); +} + +//Function Number: 96 +func_15B8(param_00) +{ +} + +//Function Number: 97 +func_15B9(param_00) +{ + if(!isdefined(level.chase_cam_last_num)) + { + level.chase_cam_last_num = -1; + } + + if(level.chase_cam_last_num == param_00) + { + return; + } + + func_15B8(param_00); + if(!isdefined(level.chase_cam_target)) + { + return; + } + + level.chase_cam_last_num = param_00; + if(!isdefined(level.chase_cam_ent)) + { + level.chase_cam_ent = level.chase_cam_target common_scripts\utility::spawn_tag_origin(); + } + + thread chasecam_onent(level.chase_cam_target); +} + +//Function Number: 98 +chasecam_onent(param_00) +{ + level notify("new_chasecam"); + level endon("new_chasecam"); + param_00 endon("death"); + level.player unlink(); + level.player playerlinktoblend(level.chase_cam_ent,"tag_origin",2,0.5,0.5); + wait 2; + level.player playerlinktodelta(level.chase_cam_ent,"tag_origin",1,180,180,180,180); + for(;;) + { + wait 0.2; + if(!isdefined(level.chase_cam_target)) + { + return; + } + + var_01 = level.chase_cam_target.origin; + var_02 = level.chase_cam_target.angles; + var_03 = anglestoforward(var_02); + var_03 = var_03 * 200; + var_01 = var_01 + var_03; + var_02 = level.player getplayerangles(); + var_03 = anglestoforward(var_02); + var_03 = var_03 * -200; + level.chase_cam_ent moveto(var_01 + var_03,0.2); + } +} + +//Function Number: 99 +viewfx() +{ + foreach(var_01 in level.createfxent) + { + if(isdefined(var_01.looper)) + { + } + } +} + +//Function Number: 100 +func_15BF(param_00,param_01) +{ +} + +//Function Number: 101 +print_vehicle_info(param_00) +{ + if(!isdefined(level.vnum)) + { + level.vnum = 9500; + } + + level.vnum++; + var_01 = "bridge_helpers"; + func_15BF("origin",self.origin[0] + " " + self.origin[1] + " " + self.origin[2]); + func_15BF("angles",self.angles[0] + " " + self.angles[1] + " " + self.angles[2]); + func_15BF("targetname","helper_model"); + func_15BF("model",self.model); + func_15BF("classname","script_model"); + func_15BF("spawnflags","4"); + func_15BF("_color","0.443137 0.443137 1.000000"); + if(isdefined(param_00)) + { + func_15BF("script_noteworthy",param_00); + } +} + +//Function Number: 102 +draw_dot_for_ent(param_00) +{ +} + +//Function Number: 103 +draw_dot_for_guy() +{ + var_00 = level.player getplayerangles(); + var_01 = anglestoforward(var_00); + var_02 = level.player geteye(); + var_03 = self geteye(); + var_04 = vectortoangles(var_03 - var_02); + var_05 = anglestoforward(var_04); + var_06 = vectordot(var_05,var_01); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_detonategrenades.gsc b/MW3/Xbox/SP/maps/_detonategrenades.gsc new file mode 100644 index 0000000..6388c44 --- /dev/null +++ b/MW3/Xbox/SP/maps/_detonategrenades.gsc @@ -0,0 +1,620 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_detonategrenades.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 30 + * Decompile Time: 924 ms + * Timestamp: 10/27/2023 2:34:38 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level._effect["c4_light_blink"] = loadfx("misc/light_c4_blink"); + level._effect["claymore_laser"] = loadfx("misc/claymore_laser"); + for(var_00 = 0;var_00 < level.players.size;var_00++) + { + level.players[var_00] thread watchgrenadeusage(); + } +} + +//Function Number: 2 +watchgrenadeusage() +{ + level.c4explodethisframe = 0; + self endon("death"); + self.c4array = []; + self.throwinggrenade = 0; + thread watchc4(); + thread func_17B5(); + thread func_17B6(); + thread watchclaymores(); + thread func_179F(); + for(;;) + { + self waittill("grenade_pullback",var_00); + self.throwinggrenade = 1; + if(var_00 == "c4") + { + beginc4tracking(); + continue; + } + + if(var_00 == "smoke_grenade_american") + { + beginsmokegrenadetracking(); + continue; + } + + func_17A7(); + } +} + +//Function Number: 3 +beginsmokegrenadetracking() +{ + self waittill("grenade_fire",var_00,var_01); + if(!isdefined(level.smokegrenades)) + { + level.smokegrenades = 0; + } + + var_00 thread smoke_grenade_death(); +} + +//Function Number: 4 +func_179F() +{ + for(;;) + { + self waittill("grenade_fire",var_00,var_01); + if(var_01 == "semtex_grenade") + { + thread func_17A0(var_00); + var_00 thread func_17A2(self); + } + } +} + +//Function Number: 5 +func_17A0(param_00) +{ + self.throwinggrenade = 0; + if(!isdefined(level.var_17A1)) + { + level.var_17A1 = 1; + } + else + { + level.var_17A1++; + } + + param_00 waittill("death"); + waittillframeend; + level.var_17A1--; +} + +//Function Number: 6 +func_17A2(param_00) +{ + self waittill("missile_stuck",var_01); + if(!isdefined(var_01)) + { + return; + } + + if(var_01.code_classname != "script_vehicle") + { + return; + } + + var_01.has_semtex_on_it = 1; + self waittill("explode"); + if(!isdefined(var_01) || !isalive(var_01)) + { + return; + } + + if(var_01 maps\_vehicle::func_17A4() || var_01 maps\_vehicle::attacker_isonmyteam(param_00)) + { + var_01.has_semtex_on_it = undefined; + return; + } + + var_01 kill(var_01.origin,param_00); +} + +//Function Number: 7 +smoke_grenade_death() +{ + level.smokegrenades++; + wait 50; + level.smokegrenades--; +} + +//Function Number: 8 +func_17A7() +{ + self endon("death"); + self waittill("grenade_fire",var_00,var_01); + if(var_01 == "fraggrenade") + { + var_00 thread maps\_utility::grenade_earthquake(); + } + else if(var_01 == "ninebang_grenade") + { + self.threw_ninebang = 1; + } + + self.throwinggrenade = 0; +} + +//Function Number: 9 +beginc4tracking() +{ + self endon("death"); + common_scripts\utility::waittill_any("grenade_fire","weapon_change"); + self.throwinggrenade = 0; +} + +//Function Number: 10 +watchc4() +{ + for(;;) + { + self waittill("grenade_fire",var_00,var_01); + if(var_01 == "c4") + { + if(!self.c4array.size) + { + thread watchc4altdetonate(); + } + + self.c4array[self.c4array.size] = var_00; + var_00.owner = self; + var_00 thread func_17B8(); + thread c4death(var_00); + var_00 thread playc4effects(); + } + } +} + +//Function Number: 11 +c4death(param_00) +{ + param_00 waittill("death"); + self.c4array = maps\_utility::array_remove_nokeys(self.c4array,param_00); +} + +//Function Number: 12 +watchclaymores() +{ + self endon("spawned_player"); + self endon("disconnect"); + for(;;) + { + self waittill("grenade_fire",var_00,var_01); + if(var_01 == "claymore" || var_01 == "claymore_mp") + { + var_00.owner = self; + var_00 thread func_17B8(); + var_00 thread claymoredetonation(); + var_00 thread playclaymoreeffects(); + var_00 thread func_17AF(self.team); + } + } +} + +//Function Number: 13 +func_17AF(param_00) +{ + self endon("death"); + wait 1; + if(isdefined(level.claymoresentientfunc)) + { + self thread [[ level.claymoresentientfunc ]](param_00); + return; + } + + self makeentitysentient(param_00,1); + self.attackeraccuracy = 2; + self.maxvisibledist = 750; + self.threatbias = -1000; +} + +//Function Number: 14 +claymoredetonation() +{ + self endon("death"); + self waittill("missile_stuck"); + var_00 = 192; + if(isdefined(self.detonateradius)) + { + var_00 = self.detonateradius; + } + + var_01 = spawn("trigger_radius",self.origin + (0,0,0 - var_00),9,var_00,var_00 * 2); + thread deleteondeath(var_01); + if(!isdefined(level.claymores)) + { + level.claymores = []; + } + + level.claymores = maps\_utility::array_add(level.claymores,self); + if(!maps\_utility::is_specialop() && level.claymores.size > 15) + { + level.claymores[0] delete(); + } + + for(;;) + { + var_01 waittill("trigger",var_02); + if(isdefined(self.owner) && var_02 == self.owner) + { + continue; + } + + if(isplayer(var_02)) + { + continue; + } + + if(var_02 damageconetrace(self.origin,self) > 0) + { + self playsound("claymore_activated_SP"); + wait 0.4; + if(isdefined(self.owner)) + { + self detonate(self.owner); + } + else + { + self detonate(undefined); + } + + return; + } + } +} + +//Function Number: 15 +deleteondeath(param_00) +{ + self waittill("death"); + level.claymores = maps\_utility::array_remove_nokeys(level.claymores,self); + wait 0.05; + if(isdefined(param_00)) + { + param_00 delete(); + } +} + +//Function Number: 16 +func_17B5() +{ + self endon("death"); + for(;;) + { + self waittill("detonate"); + var_00 = self getcurrentweapon(); + if(var_00 == "c4") + { + for(var_01 = 0;var_01 < self.c4array.size;var_01++) + { + if(isdefined(self.c4array[var_01])) + { + self.c4array[var_01] thread func_17B7(0.1); + } + } + + self.c4array = []; + } + } +} + +//Function Number: 17 +func_17B6() +{ + self endon("death"); + self endon("disconnect"); + for(;;) + { + self waittill("alt_detonate"); + var_00 = self getcurrentweapon(); + if(var_00 != "c4") + { + var_01 = []; + for(var_02 = 0;var_02 < self.c4array.size;var_02++) + { + var_03 = self.c4array[var_02]; + if(isdefined(self.c4array[var_02])) + { + var_03 thread func_17B7(0.1); + } + } + + self.c4array = var_01; + self notify("detonated"); + } + } +} + +//Function Number: 18 +func_17B7(param_00) +{ + self endon("death"); + wait param_00; + self detonate(); +} + +//Function Number: 19 +func_17B8() +{ + self.health = 100; + self setcandamage(1); + self.maxhealth = 100000; + self.health = self.maxhealth; + var_00 = undefined; + for(;;) + { + self waittill("damage",var_01,var_00); + break; + } + + self playsound("claymore_activated_SP"); + if(level.c4explodethisframe) + { + wait 0.1 + randomfloat(0.4); + } + else + { + wait 0.05; + } + + if(!isdefined(self)) + { + return; + } + + level.c4explodethisframe = 1; + thread resetc4explodethisframe(); + if(isplayer(var_00)) + { + self detonate(var_00); + return; + } + + self detonate(); +} + +//Function Number: 20 +resetc4explodethisframe() +{ + wait 0.05; + level.c4explodethisframe = 0; +} + +//Function Number: 21 +saydamaged(param_00,param_01) +{ + for(var_02 = 0;var_02 < 60;var_02++) + { + wait 0.05; + } +} + +//Function Number: 22 +playc4effects() +{ + self endon("death"); + self waittill("missile_stuck"); + playfxontag(common_scripts\utility::func_539("c4_light_blink"),self,"tag_fx"); +} + +//Function Number: 23 +playclaymoreeffects() +{ + self endon("death"); + self waittill("missile_stuck"); + playfxontag(common_scripts\utility::func_539("claymore_laser"),self,"tag_fx"); +} + +//Function Number: 24 +clearfxondeath(param_00) +{ + self waittill("death"); + param_00 delete(); +} + +//Function Number: 25 +func_17BE(param_00,param_01,param_02,param_03) +{ + var_04 = []; + if(!isdefined(param_02)) + { + param_02 = 0; + } + + if(!isdefined(param_03)) + { + param_03 = 0; + } + + for(var_05 = 0;var_05 < level.players.size;var_05++) + { + if(!isalive(level.players[var_05]) || level.players[var_05].sessionstate != "playing") + { + continue; + } + + var_06 = level.players[var_05].origin + (0,0,32); + var_07 = distance(param_00,var_06); + if(var_07 < param_01 && !param_02 || weapondamagetracepassed(param_00,var_06,param_03,undefined)) + { + var_08 = spawnstruct(); + var_08.isplayer = 1; + var_08.isadestructable = 0; + var_08.entity = level.players[var_05]; + var_08.damagecenter = var_06; + var_04[var_04.size] = var_08; + } + } + + var_09 = getentarray("grenade","classname"); + for(var_05 = 0;var_05 < var_09.size;var_05++) + { + var_0A = var_09[var_05].origin; + var_07 = distance(param_00,var_0A); + if(var_07 < param_01 && !param_02 || weapondamagetracepassed(param_00,var_0A,param_03,var_09[var_05])) + { + var_08 = spawnstruct(); + var_08.isplayer = 0; + var_08.isadestructable = 0; + var_08.entity = var_09[var_05]; + var_08.damagecenter = var_0A; + var_04[var_04.size] = var_08; + } + } + + var_0B = getentarray("destructable","targetname"); + for(var_05 = 0;var_05 < var_0B.size;var_05++) + { + var_0A = var_0B[var_05].origin; + var_07 = distance(param_00,var_0A); + if(var_07 < param_01 && !param_02 || weapondamagetracepassed(param_00,var_0A,param_03,var_0B[var_05])) + { + var_08 = spawnstruct(); + var_08.isplayer = 0; + var_08.isadestructable = 1; + var_08.entity = var_0B[var_05]; + var_08.damagecenter = var_0A; + var_04[var_04.size] = var_08; + } + } + + return var_04; +} + +//Function Number: 26 +weapondamagetracepassed(param_00,param_01,param_02,param_03) +{ + var_04 = undefined; + var_05 = param_01 - param_00; + if(lengthsquared(var_05) < param_02 * param_02) + { + var_04 = param_01; + } + + var_06 = vectornormalize(var_05); + var_04 = param_00 + (var_06[0] * param_02,var_06[1] * param_02,var_06[2] * param_02); + var_07 = bullettrace(var_04,param_01,0,param_03); + if(getdvarint("scr_damage_debug") != 0) + { + if(var_07["fraction"] == 1) + { + thread debugline(var_04,param_01,(1,1,1)); + } + else + { + thread debugline(var_04,var_07["position"],(1,0.9,0.8)); + thread debugline(var_07["position"],param_01,(1,0.4,0.3)); + } + } + + return var_07["fraction"] == 1; +} + +//Function Number: 27 +damageent(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + if(self.isplayer) + { + self.damageorigin = param_05; + self.entity thread [[ level.callbackplayerdamage ]](param_00,param_01,param_02,0,param_03,param_04,param_05,param_06,"none",0); + return; + } + + if(self.isadestructable && param_04 == "artillery_mp" || param_04 == "claymore_mp") + { + return; + } + + self.entity notify("damage",param_02,param_01); +} + +//Function Number: 28 +debugline(param_00,param_01,param_02) +{ + for(var_03 = 0;var_03 < 600;var_03++) + { + wait 0.05; + } +} + +//Function Number: 29 +onweapondamage(param_00,param_01,param_02,param_03) +{ + self endon("death"); + switch(param_01) + { + case "concussion_grenade_mp": + var_04 = 512; + var_05 = 1 - distance(self.origin,param_00.origin) / var_04; + var_06 = 1 + 4 * var_05; + wait 0.05; + self shellshock("concussion_grenade_mp",var_06); + break; + + default: + break; + } +} + +//Function Number: 30 +watchc4altdetonate() +{ + self endon("death"); + self endon("disconnect"); + self endon("detonated"); + level endon("game_ended"); + var_00 = 0; + for(;;) + { + if(self usebuttonpressed()) + { + var_00 = 0; + while(self usebuttonpressed()) + { + var_00 = var_00 + 0.05; + wait 0.05; + } + + if(var_00 >= 0.5) + { + continue; + } + + var_00 = 0; + while(!self usebuttonpressed() && var_00 < 0.5) + { + var_00 = var_00 + 0.05; + wait 0.05; + } + + if(var_00 >= 0.5) + { + continue; + } + + if(!self.c4array.size) + { + return; + } + + self notify("alt_detonate"); + } + + wait 0.05; + } +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_drone.gsc b/MW3/Xbox/SP/maps/_drone.gsc new file mode 100644 index 0000000..c08e3c3 --- /dev/null +++ b/MW3/Xbox/SP/maps/_drone.gsc @@ -0,0 +1,1024 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_drone.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 25 + * Decompile Time: 442 ms + * Timestamp: 10/27/2023 2:35:39 AM +*******************************************************************/ + +//Function Number: 1 +func_1B95() +{ + if(getdvar("debug_drones") == "") + { + setdvar("debug_drones","0"); + } + + if(!isdefined(level.lookahead_value)) + { + level.drone_lookahead_value = 200; + } + + if(!isdefined(level.max_drones)) + { + level.max_drones = []; + } + + if(!isdefined(level.max_drones["allies"])) + { + level.max_drones["allies"] = 99999; + } + + if(!isdefined(level.max_drones["axis"])) + { + level.max_drones["axis"] = 99999; + } + + if(!isdefined(level.max_drones["team3"])) + { + level.max_drones["team3"] = 99999; + } + + if(!isdefined(level.max_drones["neutral"])) + { + level.max_drones["neutral"] = 99999; + } + + if(!isdefined(level.drones)) + { + level.drones = []; + } + + if(!isdefined(level.drones["allies"])) + { + level.drones["allies"] = maps\_utility::struct_arrayspawn(); + } + + if(!isdefined(level.drones["axis"])) + { + level.drones["axis"] = maps\_utility::struct_arrayspawn(); + } + + if(!isdefined(level.drones["team3"])) + { + level.drones["team3"] = maps\_utility::struct_arrayspawn(); + } + + if(!isdefined(level.drones["neutral"])) + { + level.drones["neutral"] = maps\_utility::struct_arrayspawn(); + } + + level.drone_spawn_func = ::drone_init; +} + +//Function Number: 2 +drone_give_soul() +{ + self useanimtree(#animtree); + self startusingheroonlylighting(); + if(isdefined(self.script_moveplaybackrate)) + { + self.moveplaybackrate = self.script_moveplaybackrate; + } + else + { + self.moveplaybackrate = 1; + } + + if(self.team == "llies") + { + maps\_names::get_name(); + self setlookattext(self.name,&""); + } + + if(isdefined(level.dronecallbackthread)) + { + self thread [[ level.dronecallbackthread ]](); + } + + if(!isdefined(self.var_1B9F)) + { + level thread maps\_friendlyfire::friendly_fire_think(self); + } + + if(!isdefined(level.ai_dont_glow_in_thermal)) + { + self thermaldrawenable(); + } +} + +//Function Number: 3 +drone_init() +{ + if(level.drones[self.team].array.size >= level.max_drones[self.team]) + { + self delete(); + return; + } + + thread drone_array_handling(self); + level notify("new_drone"); + self setcandamage(1); + drone_give_soul(); + if(isdefined(self.var_1BA2)) + { + return; + } + + thread drone_death_thread(); + if(isdefined(self.target)) + { + if(!isdefined(self.script_moveoverride)) + { + thread drone_move(); + } + else + { + thread drone_wait_move(); + } + } + + if(isdefined(self.var_1BA4) && self.var_1BA4 == 0) + { + return; + } + + thread func_1BB3(); +} + +//Function Number: 4 +drone_array_handling(param_00) +{ + maps\_utility::structarray_add(level.drones[param_00.team],param_00); + var_01 = param_00.team; + param_00 waittill("death"); + if(isdefined(param_00) && isdefined(param_00.struct_array_index)) + { + maps\_utility::func_1BA7(level.drones[var_01],param_00.struct_array_index); + return; + } + + maps\_utility::func_1BA8(level.drones[var_01]); +} + +//Function Number: 5 +drone_death_thread() +{ + drone_wait_for_death(); + if(!isdefined(self)) + { + return; + } + + var_00 = "stand"; + if(isdefined(self.animset) && isdefined(level.var_1BAB[self.team][self.animset]) && isdefined(level.var_1BAB[self.team][self.animset]["death"])) + { + var_00 = self.animset; + } + + var_01 = level.var_1BAB[self.team][var_00]["death"]; + if(isdefined(self.var_93B)) + { + var_01 = self.var_93B; + } + + self notify("death"); + if(isdefined(level.drone_death_handler)) + { + self thread [[ level.drone_death_handler ]](var_01); + return; + } + + if(!isdefined(self.noragdoll) && isdefined(self.skipdeathanim)) + { + if(isdefined(self.noragdoll)) + { + func_1BB1(var_01,"deathplant"); + } + else if(isdefined(self.skipdeathanim)) + { + self startragdoll(); + func_1BB1(var_01,"deathplant"); + } + else + { + func_1BB1(var_01,"deathplant"); + self startragdoll(); + } + } + + self notsolid(); + thread drone_thermal_draw_disable(2); + if(isdefined(self) && isdefined(self.nocorpsedelete)) + { + return; + } + + wait 10; + while(isdefined(self)) + { + if(!maps\_utility::within_fov(level.player.origin,level.player.angles,self.origin,0.5)) + { + self delete(); + } + + wait 5; + } +} + +//Function Number: 6 +drone_wait_for_death() +{ + self endon("death"); + while(isdefined(self)) + { + self waittill("damage"); + if(isdefined(self.damageshield) && self.damageshield) + { + self.health = 100000; + continue; + } + + if(self.health <= 0) + { + break; + } + } +} + +//Function Number: 7 +drone_thermal_draw_disable(param_00) +{ + wait param_00; + if(isdefined(self)) + { + self thermaldrawdisable(); + } +} + +//Function Number: 8 +func_1BB0(param_00,param_01) +{ + self clearanim(%body,0.2); + self stopanimscripted(); + self setflaggedanimknoballrestart("drone_anim",param_00,%body,1,0.2,param_01); +} + +//Function Number: 9 +func_1BB1(param_00,param_01) +{ + self clearanim(%body,0.2); + self stopanimscripted(); + var_02 = "normal"; + if(isdefined(param_01)) + { + var_02 = "deathplant"; + } + + var_03 = "drone_anim"; + self animscripted(var_03,self.origin,self.angles,param_00,var_02); + self waittillmatch("end","drone_anim"); +} + +//Function Number: 10 +drone_drop_real_weapon_on_death() +{ + if(!isdefined(self)) + { + return; + } + + self waittill("death"); + if(!isdefined(self)) + { + return; + } + + var_00 = getweaponmodel(self.weapon); + var_01 = self.weapon; + if(isdefined(var_00)) + { + self detach(var_00,"tag_weapon_right"); + var_02 = self gettagorigin("tag_weapon_right"); + var_03 = self gettagangles("tag_weapon_right"); + var_04 = spawn("weapon_" + var_01,(0,0,0)); + var_04.angles = var_03; + var_04.origin = var_02; + } +} + +//Function Number: 11 +func_1BB3(param_00,param_01) +{ + if(isdefined(self.drone_idle_custom)) + { + [[ self.drone_idle_override ]](); + return; + } + + if(isdefined(param_00) && isdefined(param_00["script_noteworthy"]) && isdefined(level.var_1BAB[self.team][param_00["script_noteworthy"]])) + { + thread func_1BB8(param_00["script_noteworthy"],param_00,param_01); + return; + } + + if(isdefined(self.idleanim)) + { + func_1BB0(self.idleanim,1); + return; + } + + func_1BB0(level.var_1BAB[self.team]["stand"]["idle"],1); +} + +//Function Number: 12 +drone_get_goal_loc_with_arrival(param_00,param_01) +{ + var_02 = param_01["script_noteworthy"]; + if(!isdefined(level.var_1BAB[self.team][var_02]["arrival"])) + { + return param_00; + } + + var_03 = getmovedelta(level.var_1BAB[self.team][var_02]["arrival"],0,1); + var_03 = length(var_03); + param_00 = param_00 - var_03; + return param_00; +} + +//Function Number: 13 +func_1BB8(param_00,param_01,param_02) +{ + self endon("death"); + self endon("stop_drone_fighting"); + self.animset = param_00; + self.weaponsound = undefined; + var_03 = randomintrange(1,4); + if(self.team == "axis") + { + if(var_03 == 1) + { + self.weaponsound = "drone_ak47_fire_npc"; + } + else if(var_03 == 2) + { + self.weaponsound = "drone_g36c_fire_npc"; + } + + if(var_03 == 3) + { + self.weaponsound = "drone_fnp90_fire_npc"; + } + } + else + { + if(var_03 == 1) + { + self.weaponsound = "drone_m4carbine_fire_npc"; + } + else if(var_03 == 2) + { + self.weaponsound = "drone_m16_fire_npc"; + } + + if(var_03 == 3) + { + self.weaponsound = "drone_m249saw_fire_npc"; + } + } + + self.angles = (0,self.angles[1],self.angles[2]); + if(param_00 == "coverprone") + { + self moveto(self.origin + (0,0,8),0.05); + } + + self.noragdoll = 1; + var_04 = level.var_1BAB[self.team][param_00]; + self.var_93B = var_04["death"]; + while(isdefined(self)) + { + func_1BB1(var_04["idle"][randomint(var_04["idle"].size)]); + if(common_scripts\utility::cointoss() && !isdefined(self.ignoreall)) + { + var_05 = 1; + if(isdefined(var_04["pop_up_chance"])) + { + var_05 = var_04["pop_up_chance"]; + } + + var_05 = var_05 * 100; + var_06 = 1; + if(randomfloat(100) > var_05) + { + var_06 = 0; + } + + if(var_06 == 1) + { + func_1BB1(var_04["hide_2_aim"]); + wait getanimlength(var_04["hide_2_aim"]) - 0.5; + } + + if(isdefined(var_04["fire"])) + { + if(param_00 == "coverprone" && var_06 == 1) + { + thread func_1BB0(var_04["fire_exposed"],1); + } + else + { + thread func_1BB0(var_04["fire"],1); + } + + drone_fire_randomly(); + } + else + { + drone_shoot(); + wait 0.15; + drone_shoot(); + wait 0.15; + drone_shoot(); + wait 0.15; + drone_shoot(); + } + + if(var_06 == 1) + { + func_1BB1(var_04["aim_2_hide"]); + } + + func_1BB1(var_04["reload"]); + } + } +} + +//Function Number: 14 +drone_fire_randomly() +{ + self endon("death"); + if(common_scripts\utility::cointoss()) + { + drone_shoot(); + wait 0.1; + drone_shoot(); + wait 0.1; + drone_shoot(); + if(common_scripts\utility::cointoss()) + { + wait 0.1; + drone_shoot(); + } + + if(common_scripts\utility::cointoss()) + { + wait 0.1; + drone_shoot(); + wait 0.1; + drone_shoot(); + wait 0.1; + } + + if(common_scripts\utility::cointoss()) + { + wait randomfloatrange(1,2); + return; + } + + return; + } + + drone_shoot(); + wait randomfloatrange(0.25,0.75); + drone_shoot(); + wait randomfloatrange(0.15,0.75); + drone_shoot(); + wait randomfloatrange(0.15,0.75); + drone_shoot(); + wait randomfloatrange(0.15,0.75); +} + +//Function Number: 15 +drone_shoot() +{ + self endon("death"); + self notify("firing"); + self endon("firing"); + drone_shoot_fx(); + var_00 = %exposed_crouch_shoot_auto_v2; + self setanimknobrestart(var_00,1,0.2,1); + common_scripts\utility::delaycall(0.25,::clearanim,var_00,0); +} + +//Function Number: 16 +drone_shoot_fx() +{ + var_00 = common_scripts\utility::func_539("ak47_muzzleflash"); + if(self.team == "allies") + { + var_00 = common_scripts\utility::func_539("m16_muzzleflash"); + } + + thread drone_play_weapon_sound(self.weaponsound); + playfxontag(var_00,self,"tag_flash"); +} + +//Function Number: 17 +drone_play_weapon_sound(param_00) +{ + self playsound(param_00); +} + +//Function Number: 18 +drone_wait_move() +{ + self endon("death"); + self waittill("move"); + thread drone_move(); +} + +//Function Number: 19 +func_1BBF() +{ + if(!isdefined(self.target)) + { + return; + } + + if(isdefined(level.drone_paths[self.target])) + { + return; + } + + level.drone_paths[self.target] = 1; + var_00 = self.target; + var_01 = common_scripts\utility::getstruct(var_00,"targetname"); + if(!isdefined(var_01)) + { + return; + } + + var_02 = []; + var_03 = []; + var_04 = var_01; + for(;;) + { + var_01 = var_04; + var_05 = 0; + for(;;) + { + if(!isdefined(var_01.target)) + { + break; + } + + var_06 = common_scripts\utility::getstructarray(var_01.target,"targetname"); + if(var_06.size) + { + break; + } + + var_07 = undefined; + foreach(var_09 in var_06) + { + if(isdefined(var_03[var_09.origin + ""])) + { + continue; + } + + var_07 = var_09; + break; + } + + if(!isdefined(var_07)) + { + break; + } + + var_03[var_07.origin + ""] = 1; + var_02[var_01.targetname] = var_07.origin - var_01.origin; + var_01.angles = vectortoangles(var_02[var_01.targetname]); + var_01 = var_07; + var_05 = 1; + } + + if(!var_05) + { + break; + } + } + + var_00 = self.target; + var_01 = common_scripts\utility::getstruct(var_00,"targetname"); + var_0B = var_01; + var_03 = []; + for(;;) + { + var_01 = var_04; + var_05 = 0; + for(;;) + { + if(!isdefined(var_01.target)) + { + return; + } + + if(!isdefined(var_02[var_01.targetname])) + { + return; + } + + var_06 = common_scripts\utility::getstructarray(var_01.target,"targetname"); + if(var_06.size) + { + break; + } + + var_07 = undefined; + foreach(var_09 in var_06) + { + if(isdefined(var_03[var_09.origin + ""])) + { + continue; + } + + var_07 = var_09; + break; + } + + if(!isdefined(var_07)) + { + break; + } + + if(isdefined(var_01.radius)) + { + var_0E = var_02[var_0B.targetname]; + var_0F = var_02[var_01.targetname]; + var_10 = var_0E + var_0F * 0.5; + var_01.angles = vectortoangles(var_10); + } + + var_05 = 1; + var_0B = var_01; + var_01 = var_07; + } + + if(!var_05) + { + break; + } + } +} + +//Function Number: 20 +func_1BC0(param_00) +{ + var_01 = 170; + var_02 = 1; + var_03 = getanimlength(param_00); + var_04 = getmovedelta(param_00,0,1); + var_05 = length(var_04); + if(var_03 > 0 && var_05 > 0) + { + var_01 = var_05 / var_03; + var_02 = 0; + } + + if(isdefined(self.var_1BC1)) + { + var_01 = self.var_1BC1; + } + + var_06 = spawnstruct(); + var_06.anim_relative = var_02; + var_06.run_speed = var_01; + var_06.anim_time = var_03; + return var_06; +} + +//Function Number: 21 +drone_move() +{ + self endon("death"); + self endon("drone_stop"); + wait 0.05; + var_00 = func_1BCC(self.target,self.origin); + var_01 = level.var_1BAB[self.team]["stand"]["run"]; + if(isdefined(self.runanim)) + { + var_01 = self.runanim; + } + + var_02 = func_1BC0(var_01); + var_03 = var_02.run_speed; + var_04 = var_02.anim_relative; + if(isdefined(self.var_1BC7)) + { + var_02 = [[ self.var_1BC7 ]](); + if(isdefined(var_02)) + { + var_01 = var_02.runanim; + var_03 = var_02.run_speed; + var_04 = var_02.anim_relative; + } + + var_02 = undefined; + } + + if(!var_04) + { + thread func_1BCB(var_03); + } + + func_1BB0(var_01,self.moveplaybackrate); + var_05 = 0.5; + var_06 = 0; + self.started_moving = 1; + self.var_1BC9 = var_00[var_06]; + for(;;) + { + if(!isdefined(var_00[var_06])) + { + break; + } + + var_07 = var_00[var_06]["vec"]; + var_08 = self.origin - var_00[var_06]["origin"]; + var_09 = vectordot(vectornormalize(var_07),var_08); + if(!isdefined(var_00[var_06]["dist"])) + { + break; + } + + var_0A = var_09 + level.drone_lookahead_value; + while(var_0A > var_00[var_06]["dist"]) + { + var_0A = var_0A - var_00[var_06]["dist"]; + var_06++; + self.var_1BC9 = var_00[var_06]; + if(!isdefined(var_00[var_06]["dist"])) + { + self rotateto(vectortoangles(var_00[var_00.size - 1]["vec"]),var_05); + var_0B = distance(self.origin,var_00[var_00.size - 1]["origin"]); + var_0C = var_0B / var_03 * self.moveplaybackrate; + var_0D = var_00[var_00.size - 1]["origin"] + (0,0,100); + var_0E = var_00[var_00.size - 1]["origin"] - (0,0,100); + var_0F = physicstrace(var_0D,var_0E); + if(getdvar("debug_drones") == "1") + { + thread common_scripts\utility::draw_line_for_time(var_0D,var_0E,1,1,1,var_05); + thread common_scripts\utility::draw_line_for_time(self.origin,var_0F,0,0,1,var_05); + } + + self moveto(var_0F,var_0C); + wait var_0C; + self notify("goal"); + thread func_1BCF(); + thread func_1BB3(var_00[var_00.size - 1],var_0F); + return; + } + + if(!isdefined(var_03[var_09])) + { + self notify("goal"); + thread func_1BB3(); + return; + } + } + + if(isdefined(self.var_1BC7)) + { + var_05 = [[ self.var_1BC7 ]](); + if(isdefined(var_05)) + { + var_04 = var_05.runanim; + if(var_05.runanim != var_04) + { + var_06 = var_05.run_speed; + var_07 = var_05.anim_relative; + if(!var_07) + { + thread func_1BCB(var_06); + } + else + { + self notify("drone_move_z"); + } + + func_1BB0(var_04,self.moveplaybackrate); + } + } + } + + self.var_1BC9 = var_03[var_09]; + var_0E = var_03[var_09]["vec"] * var_0D; + var_0E = var_0E + var_03[var_09]["origin"]; + var_12 = var_0E; + var_13 = var_12 + (0,0,100); + var_14 = var_12 - (0,0,100); + var_12 = physicstrace(var_13,var_14); + if(!var_07) + { + self.var_1BCA = var_12; + } + + if(getdvar("debug_drones") == "1") + { + thread common_scripts\utility::draw_line_for_time(var_13,var_14,1,1,1,var_08); + thread draw_point(var_12,1,0,0,16,var_08); + } + + var_0B = vectortoangles(var_12 - self.origin); + self rotateto((0,var_0B[1],0),var_08); + var_0C = var_06 * var_08 * self.moveplaybackrate; + var_0F = vectornormalize(var_12 - self.origin); + var_0E = var_0F * var_0C; + var_0E = var_0E + self.origin; + if(getdvar("debug_drones") == "1") + { + thread common_scripts\utility::draw_line_for_time(self.origin,var_0E,0,0,1,var_08); + } + + self moveto(var_0E,var_08); + wait var_08; + } + + thread func_1BB3(); +} + +//Function Number: 22 +func_1BCB(param_00) +{ + self endon("death"); + self endon("drone_stop"); + self notify("drone_move_z"); + self endon("drone_move_z"); + var_01 = 0.05; + for(;;) + { + if(isdefined(self.var_1BCA) && param_00 > 0) + { + var_02 = self.var_1BCA[2] - self.origin[2]; + var_03 = distance2d(self.var_1BCA,self.origin); + var_04 = var_03 / param_00; + if(var_04 > 0 && var_02 != 0) + { + var_05 = abs(var_02) / var_04; + var_06 = var_05 * var_01; + if(var_02 >= var_05) + { + self.origin = (self.origin[0],self.origin[1],self.origin[2] + var_06); + } + else if(var_02 <= var_05 * -1) + { + self.origin = (self.origin[0],self.origin[1],self.origin[2] - var_06); + } + } + } + + wait var_01; + } +} + +//Function Number: 23 +func_1BCC(param_00,param_01) +{ + var_02 = 1; + var_03 = []; + var_29[0] = "origin"; + var_29[0] = "dist"; + var_04 = undefined; + var_04 = param_01; + param_00["entity"] = ::maps\_spawner::get_target_ents; + var_06 = undefined; + var_07 = [[ var_41["entity"] ]](var_04); + var_08 = [[ var_41["node"] ]](var_04); + var_09 = [[ var_41["struct"] ]](var_04); + if(var_07.size) + { + var_06 = "entity"; + } + else if(var_08.size) + { + var_06 = "node"; + } + else if(var_09.size) + { + var_06 = "struct"; + } + + for(;;) + { + var_0A = var_29.size; + var_0B = [[ var_41[var_06] ]](var_04); + var_0C = common_scripts\utility::random(var_0B); + var_0D = var_0C.origin; + if(isdefined(var_0C.radius)) + { + if(!isdefined(self.var_1BCD)) + { + self.var_1BCD = -1 + randomfloat(2); + } + + if(!isdefined(var_0C.angles)) + { + var_0C.angles = (0,0,0); + } + + var_0E = anglestoforward(var_0C.angles); + var_0F = anglestoright(var_0C.angles); + var_10 = anglestoup(var_0C.angles); + var_11 = (0,self.var_1BCD * var_0C.radius,0); + var_0D = var_0D + var_0E * var_11[0]; + var_0D = var_0D + var_0F * var_11[1]; + var_0D = var_0D + var_10 * var_11[2]; + } + + var_29[var_0A]["origin"] = var_0D; + var_29[var_0A]["target"] = var_0C.target; + if(isdefined(self.script_parameters) && self.script_parameters == "use_last_node_angles" && isdefined(var_0C.angles)) + { + var_29[var_0A]["angles"] = var_0C.angles; + } + + if(isdefined(var_0C.script_noteworthy)) + { + var_29[var_0A]["script_noteworthy"] = var_0C.script_noteworthy; + } + + var_29[var_0A - 1]["dist"] = distance(var_29[var_0A]["origin"],var_29[var_0A - 1]["origin"]); + var_29[var_0A - 1]["vec"] = vectornormalize(var_29[var_0A]["origin"] - var_29[var_0A - 1]["origin"]); + if(!isdefined(var_29[var_0A - 1]["target"])) + { + var_29[var_0A - 1]["target"] = var_0C.targetname; + } + + if(!isdefined(var_29[var_0A - 1]["script_noteworthy"]) && isdefined(var_0C.script_noteworthy)) + { + var_29[var_0A - 1]["script_noteworthy"] = var_0C.script_noteworthy; + } + + if(!isdefined(var_0C.target)) + { + break; + } + + var_04 = var_0C.target; + } + + if(isdefined(self.script_parameters) && self.script_parameters == "use_last_node_angles" && isdefined(var_29[var_0A]["angles"])) + { + var_29[var_0A]["vec"] = anglestoforward(var_29[var_0A]["angles"]); + } + else + { + var_29[var_0A]["vec"] = var_29[var_0A - 1]["vec"]; + } + + var_0C = undefined; + return var_29; +} + +//Function Number: 24 +draw_point(param_00,param_01,param_02,param_03,param_04,param_05) +{ + var_06 = param_00 + (param_04,0,0); + var_07 = param_00 - (param_04,0,0); + thread common_scripts\utility::draw_line_for_time(var_06,var_07,param_01,param_02,param_03,param_05); + var_06 = param_00 + (0,param_04,0); + var_07 = param_00 - (0,param_04,0); + thread common_scripts\utility::draw_line_for_time(var_06,var_07,param_01,param_02,param_03,param_05); + var_06 = param_00 + (0,0,param_04); + var_07 = param_00 - (0,0,param_04); + thread common_scripts\utility::draw_line_for_time(var_06,var_07,param_01,param_02,param_03,param_05); +} + +//Function Number: 25 +func_1BCF() +{ + if(!isdefined(self)) + { + return; + } + + if(!isdefined(self.script_noteworthy)) + { + return; + } + + switch(self.script_noteworthy) + { + case "delete_on_goal": + self delete(); + break; + + case "die_on_goal": + self kill(); + break; + } +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_drone_ai.gsc b/MW3/Xbox/SP/maps/_drone_ai.gsc new file mode 100644 index 0000000..c4ce063 --- /dev/null +++ b/MW3/Xbox/SP/maps/_drone_ai.gsc @@ -0,0 +1,190 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_drone_ai.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 1 + * Decompile Time: 36 ms + * Timestamp: 10/27/2023 2:34:19 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level.var_1BAB["allies"]["stand"]["idle"] = %casual_stand_idle; + level.var_1BAB["allies"]["stand"]["run"] = %run_lowready_f_relative; + level.var_1BAB["allies"]["stand"]["death"] = %exposed_death; + level.var_1BAB["allies"]["covercrouch"]["idle"][0] = %covercrouch_hide_idle; + level.var_1BAB["allies"]["covercrouch"]["idle"][1] = %covercrouch_twitch_1; + level.var_1BAB["allies"]["covercrouch"]["idle"][2] = %covercrouch_twitch_2; + level.var_1BAB["allies"]["covercrouch"]["idle"][3] = %covercrouch_twitch_3; + level.var_1BAB["allies"]["covercrouch"]["idle"][4] = %covercrouch_hide_look; + level.var_1BAB["allies"]["covercrouch"]["hide_2_aim"] = %covercrouch_hide_2_aim; + level.var_1BAB["allies"]["covercrouch"]["aim_2_hide"] = %covercrouch_aim_2_hide; + level.var_1BAB["allies"]["covercrouch"]["reload"] = %covercrouch_reload_hide; + level.var_1BAB["allies"]["covercrouch"]["fire"] = %covercrouch_aim5; + level.var_1BAB["allies"]["covercrouch"]["death"] = %covercrouch_death_1; + level.var_1BAB["allies"]["covercrouch"]["pop_up_chance"] = 1; + level.var_1BAB["allies"]["coverstand"]["idle"][0] = %coverstand_hide_idle; + level.var_1BAB["allies"]["coverstand"]["idle"][1] = %coverstand_look_quick; + level.var_1BAB["allies"]["coverstand"]["idle"][2] = %coverstand_look_quick_v2; + level.var_1BAB["allies"]["coverstand"]["idle"][3] = %coverstand_hide_idle_twitch04; + level.var_1BAB["allies"]["coverstand"]["idle"][4] = %coverstand_hide_idle_twitch05; + level.var_1BAB["allies"]["coverstand"]["hide_2_aim"] = %coverstand_hide_2_aim; + level.var_1BAB["allies"]["coverstand"]["aim_2_hide"] = %coverstand_aim_2_hide; + level.var_1BAB["allies"]["coverstand"]["reload"] = %coverstand_reloada; + level.var_1BAB["allies"]["coverstand"]["fire"] = %exposed_aim_5; + level.var_1BAB["allies"]["coverstand"]["death"] = %coverstand_death_left; + level.var_1BAB["allies"]["coverstand"]["pop_up_chance"] = 1; + level.var_1BAB["allies"]["coverleftstand"]["idle"][0] = %corner_standl_alert_idle; + level.var_1BAB["allies"]["coverleftstand"]["idle"][1] = %corner_standl_alert_twitch01; + level.var_1BAB["allies"]["coverleftstand"]["idle"][2] = %corner_standl_alert_twitch02; + level.var_1BAB["allies"]["coverleftstand"]["idle"][3] = %corner_standl_alert_twitch03; + level.var_1BAB["allies"]["coverleftstand"]["idle"][4] = %corner_standl_alert_twitch04; + level.var_1BAB["allies"]["coverleftstand"]["hide_2_aim"] = %corner_standl_trans_alert_2_b_v2; + level.var_1BAB["allies"]["coverleftstand"]["aim_2_hide"] = %corner_standl_trans_b_2_alert_v2; + level.var_1BAB["allies"]["coverleftstand"]["reload"] = %corner_standl_reload_v1; + level.var_1BAB["allies"]["coverleftstand"]["fire"] = %exposed_aim_5; + level.var_1BAB["allies"]["coverleftstand"]["death"] = %corner_standl_deathb; + level.var_1BAB["allies"]["coverleftstand"]["pop_up_chance"] = 1; + level.var_1BAB["allies"]["coverrightstand"]["idle"][0] = %corner_standr_alert_idle; + level.var_1BAB["allies"]["coverrightstand"]["idle"][1] = %corner_standr_alert_twitch01; + level.var_1BAB["allies"]["coverrightstand"]["idle"][2] = %corner_standr_alert_twitch02; + level.var_1BAB["allies"]["coverrightstand"]["idle"][3] = %corner_standr_alert_twitch04; + level.var_1BAB["allies"]["coverrightstand"]["hide_2_aim"] = %corner_standr_trans_alert_2_b; + level.var_1BAB["allies"]["coverrightstand"]["aim_2_hide"] = %corner_standr_trans_b_2_alert; + level.var_1BAB["allies"]["coverrightstand"]["reload"] = %corner_standr_reload_v1; + level.var_1BAB["allies"]["coverrightstand"]["fire"] = %exposed_aim_5; + level.var_1BAB["allies"]["coverrightstand"]["death"] = %corner_standr_deathb; + level.var_1BAB["allies"]["coverrightstand"]["pop_up_chance"] = 1; + level.var_1BAB["allies"]["coverrightcrouch"]["idle"][0] = %cornercrr_alert_idle; + level.var_1BAB["allies"]["coverrightcrouch"]["idle"][1] = %cornercrr_alert_twitch_v1; + level.var_1BAB["allies"]["coverrightcrouch"]["idle"][2] = %cornercrr_alert_twitch_v2; + level.var_1BAB["allies"]["coverrightcrouch"]["idle"][3] = %cornercrr_alert_twitch_v3; + level.var_1BAB["allies"]["coverrightcrouch"]["hide_2_aim"] = %cornercrr_alert_2_lean; + level.var_1BAB["allies"]["coverrightcrouch"]["aim_2_hide"] = %cornercrr_lean_2_alert; + level.var_1BAB["allies"]["coverrightcrouch"]["reload"] = %cornercrr_reloada; + level.var_1BAB["allies"]["coverrightcrouch"]["death"] = %exposed_crouch_death_fetal; + level.var_1BAB["allies"]["coverrightcrouch"]["pop_up_chance"] = 1; + level.var_1BAB["allies"]["coverguard"]["idle"][0] = %exposed_crouch_idle_twitch_v2; + level.var_1BAB["allies"]["coverguard"]["idle"][1] = %exposed_crouch_idle_twitch_v3; + level.var_1BAB["allies"]["coverguard"]["reload"] = %exposed_crouch_reload; + level.var_1BAB["allies"]["coverguard"]["fire"] = %exposed_crouch_aim_5; + level.var_1BAB["allies"]["coverguard"]["death"] = %exposed_crouch_death_fetal; + level.var_1BAB["allies"]["coverguard"]["pop_up_chance"] = 0; + level.var_1BAB["allies"]["coverprone"]["idle"][0] = %prone_reaction_a; + level.var_1BAB["allies"]["coverprone"]["idle"][1] = %prone_twitch_ammocheck; + level.var_1BAB["allies"]["coverprone"]["idle"][2] = %prone_twitch_scan; + level.var_1BAB["allies"]["coverprone"]["idle"][3] = %prone_twitch_look; + level.var_1BAB["allies"]["coverprone"]["idle"][4] = %prone_twitch_lookup; + level.var_1BAB["allies"]["coverprone"]["hide_2_aim"] = %prone_2_crouch; + level.var_1BAB["allies"]["coverprone"]["aim_2_hide"] = %crouch_2_prone; + level.var_1BAB["allies"]["coverprone"]["reload"] = %prone_reload; + level.var_1BAB["allies"]["coverprone"]["fire"] = %prone_fire_1; + level.var_1BAB["allies"]["coverprone"]["fire_exposed"] = %exposed_crouch_aim_5; + level.var_1BAB["allies"]["coverprone"]["death"] = %saw_gunner_prone_death; + level.var_1BAB["allies"]["coverprone"]["pop_up_chance"] = 0.5; + level.var_1BAB["allies"]["coverprone_no_pop"]["idle"][0] = %prone_reaction_a; + level.var_1BAB["allies"]["coverprone_no_pop"]["idle"][1] = %prone_twitch_ammocheck; + level.var_1BAB["allies"]["coverprone_no_pop"]["idle"][2] = %prone_twitch_scan; + level.var_1BAB["allies"]["coverprone_no_pop"]["idle"][3] = %prone_twitch_look; + level.var_1BAB["allies"]["coverprone_no_pop"]["idle"][4] = %prone_twitch_lookup; + level.var_1BAB["allies"]["coverprone_no_pop"]["hide_2_aim"] = %prone_2_crouch; + level.var_1BAB["allies"]["coverprone_no_pop"]["aim_2_hide"] = %crouch_2_prone; + level.var_1BAB["allies"]["coverprone_no_pop"]["reload"] = %prone_reload; + level.var_1BAB["allies"]["coverprone_no_pop"]["fire"] = %prone_fire_1; + level.var_1BAB["allies"]["coverprone_no_pop"]["fire_exposed"] = %exposed_crouch_aim_5; + level.var_1BAB["allies"]["coverprone_no_pop"]["death"] = %saw_gunner_prone_death; + level.var_1BAB["allies"]["coverprone_no_pop"]["pop_up_chance"] = 0; + level.var_1BAB["axis"]["stand"]["idle"] = %casual_stand_idle; + level.var_1BAB["axis"]["stand"]["run"] = %run_lowready_f_relative; + level.var_1BAB["axis"]["stand"]["death"] = %exposed_death; + level.var_1BAB["axis"]["covercrouch"]["idle"][0] = %covercrouch_hide_idle; + level.var_1BAB["axis"]["covercrouch"]["idle"][1] = %covercrouch_twitch_1; + level.var_1BAB["axis"]["covercrouch"]["idle"][2] = %covercrouch_twitch_2; + level.var_1BAB["axis"]["covercrouch"]["idle"][3] = %covercrouch_twitch_3; + level.var_1BAB["axis"]["covercrouch"]["idle"][4] = %covercrouch_hide_look; + level.var_1BAB["axis"]["covercrouch"]["hide_2_aim"] = %covercrouch_hide_2_aim; + level.var_1BAB["axis"]["covercrouch"]["aim_2_hide"] = %covercrouch_aim_2_hide; + level.var_1BAB["axis"]["covercrouch"]["reload"] = %covercrouch_reload_hide; + level.var_1BAB["axis"]["covercrouch"]["fire"] = %covercrouch_aim5; + level.var_1BAB["axis"]["covercrouch"]["death"] = %covercrouch_death_1; + level.var_1BAB["axis"]["covercrouch"]["pop_up_chance"] = 1; + level.var_1BAB["axis"]["coverstand"]["idle"][0] = %coverstand_hide_idle; + level.var_1BAB["axis"]["coverstand"]["idle"][1] = %coverstand_look_quick; + level.var_1BAB["axis"]["coverstand"]["idle"][2] = %coverstand_look_quick_v2; + level.var_1BAB["axis"]["coverstand"]["idle"][3] = %coverstand_hide_idle_twitch04; + level.var_1BAB["axis"]["coverstand"]["idle"][4] = %coverstand_hide_idle_twitch05; + level.var_1BAB["axis"]["coverstand"]["hide_2_aim"] = %coverstand_hide_2_aim; + level.var_1BAB["axis"]["coverstand"]["aim_2_hide"] = %coverstand_aim_2_hide; + level.var_1BAB["axis"]["coverstand"]["reload"] = %coverstand_reloada; + level.var_1BAB["axis"]["coverstand"]["fire"] = %exposed_aim_5; + level.var_1BAB["axis"]["coverstand"]["death"] = %coverstand_death_left; + level.var_1BAB["axis"]["coverstand"]["pop_up_chance"] = 1; + level.var_1BAB["axis"]["coverleftstand"]["idle"][0] = %corner_standl_alert_idle; + level.var_1BAB["axis"]["coverleftstand"]["idle"][1] = %corner_standl_alert_twitch01; + level.var_1BAB["axis"]["coverleftstand"]["idle"][2] = %corner_standl_alert_twitch02; + level.var_1BAB["axis"]["coverleftstand"]["idle"][3] = %corner_standl_alert_twitch03; + level.var_1BAB["axis"]["coverleftstand"]["idle"][4] = %corner_standl_alert_twitch04; + level.var_1BAB["axis"]["coverleftstand"]["hide_2_aim"] = %corner_standl_trans_alert_2_b_v2; + level.var_1BAB["axis"]["coverleftstand"]["aim_2_hide"] = %corner_standl_trans_b_2_alert_v2; + level.var_1BAB["axis"]["coverleftstand"]["reload"] = %corner_standl_reload_v1; + level.var_1BAB["axis"]["coverleftstand"]["fire"] = %exposed_aim_5; + level.var_1BAB["axis"]["coverleftstand"]["death"] = %corner_standl_deathb; + level.var_1BAB["axis"]["coverleftstand"]["pop_up_chance"] = 1; + level.var_1BAB["axis"]["coverrightstand"]["idle"][0] = %corner_standr_alert_idle; + level.var_1BAB["axis"]["coverrightstand"]["idle"][1] = %corner_standr_alert_twitch01; + level.var_1BAB["axis"]["coverrightstand"]["idle"][2] = %corner_standr_alert_twitch02; + level.var_1BAB["axis"]["coverrightstand"]["idle"][3] = %corner_standr_alert_twitch04; + level.var_1BAB["axis"]["coverrightstand"]["hide_2_aim"] = %corner_standr_trans_alert_2_b; + level.var_1BAB["axis"]["coverrightstand"]["aim_2_hide"] = %corner_standr_trans_b_2_alert; + level.var_1BAB["axis"]["coverrightstand"]["reload"] = %corner_standr_reload_v1; + level.var_1BAB["axis"]["coverrightstand"]["fire"] = %exposed_aim_5; + level.var_1BAB["axis"]["coverrightstand"]["death"] = %corner_standr_deathb; + level.var_1BAB["axis"]["coverrightstand"]["pop_up_chance"] = 1; + level.var_1BAB["axis"]["coverrightcrouch"]["idle"][0] = %cornercrr_alert_idle; + level.var_1BAB["axis"]["coverrightcrouch"]["idle"][1] = %cornercrr_alert_twitch_v1; + level.var_1BAB["axis"]["coverrightcrouch"]["idle"][2] = %cornercrr_alert_twitch_v2; + level.var_1BAB["axis"]["coverrightcrouch"]["idle"][3] = %cornercrr_alert_twitch_v3; + level.var_1BAB["axis"]["coverrightcrouch"]["hide_2_aim"] = %cornercrr_alert_2_lean; + level.var_1BAB["axis"]["coverrightcrouch"]["aim_2_hide"] = %cornercrr_lean_2_alert; + level.var_1BAB["axis"]["coverrightcrouch"]["reload"] = %cornercrr_reloada; + level.var_1BAB["axis"]["coverrightcrouch"]["death"] = %exposed_crouch_death_fetal; + level.var_1BAB["axis"]["coverrightcrouch"]["pop_up_chance"] = 1; + level.var_1BAB["axis"]["coverguard"]["idle"][0] = %exposed_crouch_idle_twitch_v2; + level.var_1BAB["axis"]["coverguard"]["idle"][1] = %exposed_crouch_idle_twitch_v3; + level.var_1BAB["axis"]["coverguard"]["reload"] = %exposed_crouch_reload; + level.var_1BAB["axis"]["coverguard"]["fire"] = %exposed_crouch_aim_5; + level.var_1BAB["axis"]["coverguard"]["death"] = %exposed_crouch_death_fetal; + level.var_1BAB["axis"]["coverguard"]["pop_up_chance"] = 0; + level.var_1BAB["axis"]["coverprone"]["idle"][0] = %prone_reaction_a; + level.var_1BAB["axis"]["coverprone"]["idle"][1] = %prone_twitch_ammocheck; + level.var_1BAB["axis"]["coverprone"]["idle"][2] = %prone_twitch_scan; + level.var_1BAB["axis"]["coverprone"]["idle"][3] = %prone_twitch_look; + level.var_1BAB["axis"]["coverprone"]["idle"][4] = %prone_twitch_lookup; + level.var_1BAB["axis"]["coverprone"]["hide_2_aim"] = %prone_2_crouch; + level.var_1BAB["axis"]["coverprone"]["aim_2_hide"] = %crouch_2_prone; + level.var_1BAB["axis"]["coverprone"]["reload"] = %prone_reload; + level.var_1BAB["axis"]["coverprone"]["fire"] = %prone_fire_1; + level.var_1BAB["axis"]["coverprone"]["fire_exposed"] = %exposed_crouch_aim_5; + level.var_1BAB["axis"]["coverprone"]["death"] = %saw_gunner_prone_death; + level.var_1BAB["axis"]["coverprone"]["pop_up_chance"] = 0.5; + level.var_1BAB["axis"]["coverprone_no_pop"]["idle"][0] = %prone_reaction_a; + level.var_1BAB["axis"]["coverprone_no_pop"]["idle"][1] = %prone_twitch_ammocheck; + level.var_1BAB["axis"]["coverprone_no_pop"]["idle"][2] = %prone_twitch_scan; + level.var_1BAB["axis"]["coverprone_no_pop"]["idle"][3] = %prone_twitch_look; + level.var_1BAB["axis"]["coverprone_no_pop"]["idle"][4] = %prone_twitch_lookup; + level.var_1BAB["axis"]["coverprone_no_pop"]["hide_2_aim"] = %prone_2_crouch; + level.var_1BAB["axis"]["coverprone_no_pop"]["aim_2_hide"] = %crouch_2_prone; + level.var_1BAB["axis"]["coverprone_no_pop"]["reload"] = %prone_reload; + level.var_1BAB["axis"]["coverprone_no_pop"]["fire"] = %prone_fire_1; + level.var_1BAB["axis"]["coverprone_no_pop"]["fire_exposed"] = %exposed_crouch_aim_5; + level.var_1BAB["axis"]["coverprone_no_pop"]["death"] = %saw_gunner_prone_death; + level.var_1BAB["axis"]["coverprone_no_pop"]["pop_up_chance"] = 0; + level.var_1BAB["team3"]["stand"]["idle"] = %casual_stand_idle; + level.var_1BAB["team3"]["stand"]["run"] = %run_lowready_f_relative; + level.var_1BAB["team3"]["stand"]["death"] = %exposed_death; + level._effect["ak47_muzzleflash"] = loadfx("muzzleflashes/ak47_flash_wv"); + level._effect["m16_muzzleflash"] = loadfx("muzzleflashes/m16_flash_wv"); + maps\_drone::func_1B95(); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_drone_civilian.gsc b/MW3/Xbox/SP/maps/_drone_civilian.gsc new file mode 100644 index 0000000..d34971e --- /dev/null +++ b/MW3/Xbox/SP/maps/_drone_civilian.gsc @@ -0,0 +1,19 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_drone_civilian.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 1 + * Decompile Time: 15 ms + * Timestamp: 10/27/2023 2:34:19 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + level.var_1BAB["neutral"]["stand"]["idle"] = %casual_stand_idle; + level.var_1BAB["neutral"]["stand"]["run"] = %unarmed_scared_run; + level.var_1BAB["neutral"]["stand"]["death"] = %exposed_death; + level.var_3B91 = ::animscripts/civilian/civilian_init::func_3B87; + maps\_drone::func_1B95(); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_endmission.gsc b/MW3/Xbox/SP/maps/_endmission.gsc new file mode 100644 index 0000000..d859b83 --- /dev/null +++ b/MW3/Xbox/SP/maps/_endmission.gsc @@ -0,0 +1,1095 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_endmission.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 52 + * Decompile Time: 839 ms + * Timestamp: 10/27/2023 2:33:35 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + var_00 = []; + var_00 = createmission("THE_BEST_OF_THE_BEST"); + var_00 addlevel("sp_intro",0,"BACK_IN_THE_FIGHT",1,"THE_BIG_APPLE",0.1); + var_00 addlevel("sp_ny_manhattan",0,"TOO_BIG_TO_FAIL",1,"THE_BIG_APPLE",undefined); + var_00 addlevel("sp_ny_harbor",0,"WET_WORK",1,"THE_BIG_APPLE",undefined); + var_00 addlevel("sp_intro",0,"CARPE_DIEM",1,"OUT_OF_THE_FRYING_PAN",undefined); + var_00 addlevel("hijack",0,"FREQUENT_FLIER",1,"OUT_OF_THE_FRYING_PAN",undefined); + var_00 addlevel("sp_warlord",0,"UP_TO_NO_GOOD",1,"OUT_OF_THE_FRYING_PAN",undefined); + var_00 addlevel("london",1,undefined,1,"EUROPEAN_VACATION",1); + var_00 addlevel("innocent",0,"ONE_WAY_TICKET",1,"EUROPEAN_VACATION",0.1); + var_00 addlevel("hamburg",0,"WELCOME_TO_WW3",1,"EUROPEAN_VACATION",undefined); + var_00 addlevel("sp_payback",0,"SANDSTORM",1,"EUROPEAN_VACATION",undefined); + var_00 addlevel("sp_paris_a",1,undefined,1,"CITY_OF_LIGHTS",undefined); + var_00 addlevel("sp_paris_b",0,"BACK_SEAT_DRIVER",1,"CITY_OF_LIGHTS",undefined); + var_00 addlevel("paris_ac130",0,"WELL_ALWAYS_HAVE_PARIS",1,"CITY_OF_LIGHTS",undefined); + var_00 addlevel("sp_prague",0,"VIVE_LA_REVOLUTION",1,"THE_DARKEST_HOUR",undefined); + var_00 addlevel("prague_escape",0,"REQUIEM",1,"THE_DARKEST_HOUR",undefined); + var_00 addlevel("castle",0,"STORM_THE_CASTLE",1,"THE_DARKEST_HOUR",undefined); + var_00 addlevel("sp_berlin",0,"BAD_FIRST_DATE",1,"THIS_IS_THE_END",undefined); + var_00 addlevel("rescue_2",0,"DIAMOND_IN_THE_ROUGH",1,"THIS_IS_THE_END",undefined); + var_00 addlevel("sp_dubai",0,"WHO_DARES_WINS",1,"THIS_IS_THE_END",undefined); + if(maps\_utility::is_specialop()) + { + level.specopsgroups = []; + for(var_01 = 0;var_01 < 100;var_01++) + { + var_02 = tablelookup("sp/specopstable.csv",0,var_01,1); + if(var_02 != "") + { + setupsogroup(var_02); + continue; + } + + break; + } + + var_03 = createmission("SPECIAL_OPS"); + var_04 = int(tablelookup("sp/specopstable.csv",0,"survival_count",1)); + for(var_01 = 100;var_01 < 200;var_01++) + { + var_05 = var_01 - 100; + var_02 = tablelookup("sp/specopstable.csv",0,var_01,1); + if(var_02 != "") + { + var_03 addspecoplevel(var_02,var_05); + continue; + } + + break; + } + + for(var_01 = 200;var_01 < 300;var_01++) + { + var_05 = var_01 - 200 + var_04; + var_02 = tablelookup("sp/specopstable.csv",0,var_01,1); + if(var_02 != "") + { + var_03 addspecoplevel(var_02,var_05); + continue; + } + + break; + } + + level.specopssettings = var_03; + } + + level.missionsettings = var_00; +} + +//Function Number: 2 +debug_test_next_mission() +{ + wait 10; + while(getdvarint("test_next_mission") < 1) + { + wait 3; + } + + _nextmission(); +} + +//Function Number: 3 +setupsogroup(param_00) +{ + level.specopsgroups[param_00] = spawnstruct(); + level.specopsgroups[param_00].ref = param_00; + level.specopsgroups[param_00].unlock = int(tablelookup("sp/specopstable.csv",1,param_00,5)); +} + +//Function Number: 4 +_nextmission() +{ + if(maps\_utility::func_14F5()) + { + setsaveddvar("ui_nextMission","0"); + if(isdefined(level.nextmission_exit_time)) + { + changelevel("",0,level.nextmission_exit_time); + } + else + { + changelevel("",0); + } + + return; + } + + level notify("nextmission"); + level.nextmission = 1; + level.player enableinvulnerability(); + var_00 = undefined; + setsaveddvar("ui_nextMission","1"); + setdvar("ui_showPopup","0"); + setdvar("ui_popupString",""); + setdvar("ui_prev_map",level.script); + if(level.script == "london") + { + game["previous_map"] = "london"; + } + else + { + game["previous_map"] = undefined; + } + + var_00 = level.missionsettings func_1452(level.script); + if(level.script == "sp_intro" && !getdvarint("prologue_select")) + { + for(var_01 = var_00 + 1;var_01 < level.missionsettings.var_14AA.size - 1;var_01++) + { + if(level.missionsettings.var_14AA[var_01].name == "sp_intro") + { + var_00 = var_01; + break; + } + } + } + + setdvar("prologue_select","0"); + maps\_gameskill::auto_adust_zone_complete("aa_main_" + level.script); + if(!isdefined(var_00)) + { + missionsuccess(level.script); + return; + } + + if(level.script != "sp_dubai") + { + maps\_utility::level_end_save(); + } + + level.missionsettings setlevelcompleted(var_00); + if(level.player getlocalplayerprofiledata("highestMission") < var_00 + 1 && level.script == "sp_dubai" && getdvarint("mis_cheat") == 0) + { + setdvar("ui_sp_unlock","0"); + setdvar("ui_sp_unlock","1"); + } + + var_02 = updatesppercent(); + updategamerprofile(); + if(level.missionsettings hasachievement(var_00)) + { + maps\_utility::giveachievement_wrapper(level.missionsettings getachievement(var_00)); + } + + if(level.missionsettings haslevelveteranaward(var_00) && getlevelcompleted(var_00) == 4 && level.missionsettings check_other_haslevelveteranachievement(var_00)) + { + maps\_utility::giveachievement_wrapper(level.missionsettings getlevelveteranaward(var_00)); + } + + if(level.missionsettings hasmissionhardenedaward() && level.missionsettings getlowestskill() > 2) + { + maps\_utility::giveachievement_wrapper(level.missionsettings gethardenedaward()); + } + + if(level.script == "sp_dubai") + { + return; + } + + var_03 = var_00 + 1; + if(maps\_utility::arcademode()) + { + if(!getdvarint("arcademode_full")) + { + setsaveddvar("ui_nextMission","0"); + missionsuccess(level.script); + return; + } + } + + if(level.missionsettings skipssuccess(var_00)) + { + if(isdefined(level.missionsettings getfadetime(var_00))) + { + changelevel(level.missionsettings func_151F(var_03),level.missionsettings getkeepweapons(var_00),level.missionsettings getfadetime(var_00)); + return; + } + + changelevel(level.missionsettings func_151F(var_03),level.missionsettings getkeepweapons(var_00)); + return; + } + + missionsuccess(level.missionsettings func_151F(var_03),level.missionsettings getkeepweapons(var_00)); +} + +//Function Number: 5 +updatesppercent() +{ + var_00 = int(gettotalpercentcompletesp() * 100); + if(getdvarint("mis_cheat") == 0) + { + level.player setlocalplayerprofiledata("percentCompleteSP",var_00); + } + + return var_00; +} + +//Function Number: 6 +gettotalpercentcompletesp() +{ + var_00 = max(getstat_easy(),getstat_regular()); + var_01 = 0.5; + var_02 = getstat_hardened(); + var_03 = 0.25; + var_04 = getstat_veteran(); + var_05 = 0.1; + var_06 = getstat_intel(); + var_07 = 0.15; + var_08 = 0; + var_08 = var_08 + var_01 * var_00; + var_08 = var_08 + var_03 * var_02; + var_08 = var_08 + var_05 * var_04; + var_08 = var_08 + var_07 * var_06; + return var_08; +} + +//Function Number: 7 +getstat_progression(param_00) +{ + var_01 = level.player getlocalplayerprofiledata("missionHighestDifficulty"); + var_02 = 0; + var_03 = []; + var_04 = 0; + for(var_05 = 0;var_05 < level.missionsettings.var_14AA.size - 1;var_05++) + { + if(int(var_01[var_05]) >= param_00) + { + var_02++; + } + } + + var_06 = var_02 / level.missionsettings.var_14AA.size - 1 * 100; + return var_06; +} + +//Function Number: 8 +getstat_easy() +{ + var_00 = 1; + return getstat_progression(var_00); +} + +//Function Number: 9 +getstat_regular() +{ + var_00 = 2; + return getstat_progression(var_00); +} + +//Function Number: 10 +getstat_hardened() +{ + var_00 = 3; + return getstat_progression(var_00); +} + +//Function Number: 11 +getstat_veteran() +{ + var_00 = 4; + return getstat_progression(var_00); +} + +//Function Number: 12 +getstat_intel() +{ + var_00 = 45; + var_01 = level.player getlocalplayerprofiledata("cheatPoints") / var_00 * 100; + return var_01; +} + +//Function Number: 13 +getlevelcompleted(param_00) +{ + return int(level.player getlocalplayerprofiledata("missionHighestDifficulty")[param_00]); +} + +//Function Number: 14 +getsolevelcompleted(param_00) +{ + return int(level.player getlocalplayerprofiledata("missionSOHighestDifficulty")[param_00]); +} + +//Function Number: 15 +func_14B1(param_00) +{ + foreach(var_02 in level.players) + { + if(isdefined(var_02.var_14AC) && var_02.var_14AC) + { + continue; + } + + var_03 = var_02 getlocalplayerprofiledata("missionSOHighestDifficulty"); + if(!isdefined(var_03)) + { + continue; + } + + if(isdefined(var_02.award_no_stars)) + { + continue; + } + + var_04 = 0; + for(var_05 = 0;var_05 < var_03.size;var_05++) + { + var_04 = var_04 + max(0,int(var_03[var_05]) - 1); + } + + if(var_03.size == 0) + { + var_03 = "00000000000000000000000000000000000000000000000000"; + } + + while(param_00 >= var_03.size) + { + var_03 = var_03 + "0"; + } + + var_06 = 0; + if(maps\_utility::is_survival()) + { + var_06 = 0; + } + else + { + var_06 = level.specops_reward_gameskill; + if(isdefined(var_02.var_1507)) + { + var_06 = var_02.var_1507; + } + } + + if(int(var_03[param_00]) > var_06) + { + continue; + } + + var_07 = ""; + for(var_08 = 0;var_08 < var_03.size;var_08++) + { + if(var_08 != param_00) + { + var_07 = var_07 + var_03[var_08]; + continue; + } + + var_07 = var_07 + var_06 + 1; + } + + var_09 = 0; + for(var_05 = 0;var_05 < var_07.size;var_05++) + { + var_09 = var_09 + max(0,int(var_07[var_05]) - 1); + } + + var_0A = var_09 - var_04; + if(var_0A > 0) + { + var_02.var_1508 = func_150D(var_07); + var_02.eog_newstar = 1; + var_02.eog_newstar_value = var_0A; + foreach(var_0C in level.specopsgroups) + { + if(var_0C.unlock == 0) + { + continue; + } + + if(level.ps3 && issplitscreen() && isdefined(level.player2) && var_02 == level.player2) + { + continue; + } + + if(var_04 < var_0C.unlock && var_09 >= var_0C.unlock) + { + var_02.eog_unlock = 1; + var_02.eog_unlock_value = var_0C.ref; + } + } + + if(var_09 >= 48) + { + var_02.eog_unlock = 1; + var_02.eog_unlock_value = "so_completed"; + maps\_utility::music_stop(1); + } + } + + if(var_02 maps\_specialops_code::func_14A6() || issplitscreen() && level.ps3 && isdefined(level.player2) && var_02 == level.player2) + { + var_02 setlocalplayerprofiledata("missionSOHighestDifficulty",var_07); + } + } +} + +//Function Number: 16 +func_150D(param_00) +{ + if(!maps\_utility::is_survival()) + { + if(int(tablelookup("sp/specOpsTable.csv",1,level.script,14)) == 0) + { + return 0; + } + } + + var_01 = int(tablelookup("sp/specopstable.csv",0,"survival_count",1)); + var_02 = int(tablelookup("sp/specopstable.csv",0,"mission_count",1)); + var_03 = var_01 + var_02; + var_04 = 0; + if(maps\_utility::is_survival()) + { + for(var_05 = 0;var_05 < var_01;var_05++) + { + var_04 = var_04 + int(max(0,int(param_00[var_05]) - 1)); + } + } + else + { + for(var_05 = var_02;var_05 < var_03;var_05++) + { + var_04 = var_04 + int(max(0,int(param_00[var_05]) - 1)); + } + } + + return var_04 == 1; +} + +//Function Number: 17 +setlevelcompleted(param_00) +{ + var_01 = level.player getlocalplayerprofiledata("missionHighestDifficulty"); + var_02 = ""; + for(var_03 = 0;var_03 < var_01.size;var_03++) + { + if(var_03 != param_00) + { + var_02 = var_02 + var_01[var_03]; + continue; + } + + if(level.gameskill + 1 > int(var_01[param_00])) + { + var_02 = var_02 + level.gameskill + 1; + continue; + } + + var_02 = var_02 + var_01[var_03]; + } + + var_04 = ""; + var_05 = 0; + var_06 = 0; + for(var_07 = 0;var_07 < var_02.size;var_07++) + { + if(int(var_02[var_07]) == 0 || var_05) + { + var_04 = var_04 + "0"; + var_05 = 1; + continue; + } + + var_04 = var_04 + var_02[var_07]; + var_06++; + } + + _sethighestmissionifnotcheating(var_06); + func_1510(var_04); +} + +//Function Number: 18 +_sethighestmissionifnotcheating(param_00) +{ + if(getdvar("mis_cheat") == "1") + { + return; + } + + level.player setlocalplayerprofiledata("highestMission",param_00); +} + +//Function Number: 19 +func_1510(param_00) +{ + if(getdvar("mis_cheat") == "1") + { + return; + } + + level.player setlocalplayerprofiledata("missionHighestDifficulty",param_00); +} + +//Function Number: 20 +func_1511(param_00) +{ + var_01 = level.player getlocalplayerprofiledata("missionHighestDifficulty"); + return int(var_01[param_00]); +} + +//Function Number: 21 +getmissiondvarstring(param_00) +{ + if(param_00 < 9) + { + return "mis_0" + param_00 + 1; + } + + return "mis_" + param_00 + 1; +} + +//Function Number: 22 +getlowestskill() +{ + var_00 = level.player getlocalplayerprofiledata("missionHighestDifficulty"); + var_01 = 4; + for(var_02 = 0;var_02 < self.var_14AA.size;var_02++) + { + if(int(var_00[var_02]) < var_01) + { + var_01 = int(var_00[var_02]); + } + } + + return var_01; +} + +//Function Number: 23 +createmission(param_00) +{ + var_01 = spawnstruct(); + var_01.var_14AA = []; + var_01.var_1515 = []; + var_01.hardenedaward = param_00; + return var_01; +} + +//Function Number: 24 +addlevel(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + var_07 = self.var_14AA.size; + self.var_14AA[var_07] = spawnstruct(); + self.var_14AA[var_07].name = param_00; + self.var_14AA[var_07].keepweapons = param_01; + self.var_14AA[var_07].achievement = param_02; + self.var_14AA[var_07].skipssuccess = param_03; + self.var_14AA[var_07].veteran_achievement = param_04; + if(isdefined(param_05)) + { + self.var_14AA[var_07].fade_time = param_05; + } +} + +//Function Number: 25 +addspecoplevel(param_00,param_01) +{ + if(isdefined(param_01)) + { + var_02 = param_01; + } + else + { + var_02 = self.var_14AA.size; + } + + self.var_14AA[var_02] = spawnstruct(); + self.var_14AA[var_02].name = param_00; + var_03 = tablelookup("sp/specopstable.csv",1,param_00,13); + if(var_03 == "") + { + return; + } + + if(!isdefined(level.specopsgroups[var_03].group_members)) + { + level.specopsgroups[var_03].group_members = []; + } + + var_04 = level.specopsgroups[var_03].group_members.size; + level.specopsgroups[var_03].group_members[var_04] = param_00; +} + +//Function Number: 26 +addprereq(param_00) +{ + var_01 = self.var_1515.size; + self.var_1515[var_01] = param_00; +} + +//Function Number: 27 +func_1452(param_00) +{ + foreach(var_03, var_02 in self.var_14AA) + { + if(var_02.name == param_00) + { + return var_03; + } + } + + return undefined; +} + +//Function Number: 28 +func_151F(param_00) +{ + return self.var_14AA[param_00].name; +} + +//Function Number: 29 +getkeepweapons(param_00) +{ + return self.var_14AA[param_00].keepweapons; +} + +//Function Number: 30 +getachievement(param_00) +{ + return self.var_14AA[param_00].achievement; +} + +//Function Number: 31 +getlevelveteranaward(param_00) +{ + return self.var_14AA[param_00].veteran_achievement; +} + +//Function Number: 32 +getfadetime(param_00) +{ + if(!isdefined(self.var_14AA[param_00].fade_time)) + { + return undefined; + } + + return self.var_14AA[param_00].fade_time; +} + +//Function Number: 33 +haslevelveteranaward(param_00) +{ + if(isdefined(self.var_14AA[param_00].veteran_achievement)) + { + return 1; + } + + return 0; +} + +//Function Number: 34 +hasachievement(param_00) +{ + if(isdefined(self.var_14AA[param_00].achievement)) + { + return 1; + } + + return 0; +} + +//Function Number: 35 +check_other_haslevelveteranachievement(param_00) +{ + for(var_01 = 0;var_01 < self.var_14AA.size;var_01++) + { + if(var_01 == param_00) + { + continue; + } + + if(!haslevelveteranaward(var_01)) + { + continue; + } + + if(self.var_14AA[var_01].veteran_achievement == self.var_14AA[param_00].veteran_achievement) + { + if(getlevelcompleted(var_01) < 4) + { + return 0; + } + } + } + + return 1; +} + +//Function Number: 36 +skipssuccess(param_00) +{ + if(!isdefined(self.var_14AA[param_00].skipssuccess)) + { + return 0; + } + + return 1; +} + +//Function Number: 37 +gethardenedaward() +{ + return self.hardenedaward; +} + +//Function Number: 38 +hasmissionhardenedaward() +{ + if(isdefined(self.hardenedaward)) + { + return 1; + } + + return 0; +} + +//Function Number: 39 +getnextlevelindex() +{ + for(var_00 = 0;var_00 < self.var_14AA.size;var_00++) + { + if(!func_1511(var_00)) + { + return var_00; + } + } + + return 0; +} + +//Function Number: 40 +func_152A() +{ + var_00 = level.player getlocalplayerprofiledata("missionHighestDifficulty"); + var_01 = ""; + for(var_02 = 0;var_02 < var_00.size;var_02++) + { + if(var_02 < 20) + { + var_01 = var_01 + 2; + continue; + } + + var_01 = var_01 + 0; + } + + level.player setlocalplayerprofiledata("missionHighestDifficulty",var_01); + level.player setlocalplayerprofiledata("highestMission",20); +} + +//Function Number: 41 +func_152B() +{ + level.player setlocalplayerprofiledata("missionHighestDifficulty","00000000000000000000000000000000000000000000000000"); + level.player setlocalplayerprofiledata("highestMission",1); +} + +//Function Number: 42 +credits_end() +{ + changelevel("airplane",0); +} + +//Function Number: 43 +so_eog_summary_calculate(param_00) +{ + if(!isdefined(self.var_128E)) + { + self.var_128E = []; + } + + if(!isdefined(level.challenge_start_time)) + { + level.challenge_start_time = 0; + level.challenge_end_time = 0; + } + + var_01 = min(level.challenge_end_time - level.challenge_start_time,86400000); + var_01 = maps\_utility::round_millisec_on_sec(var_01,1,0); + foreach(var_03 in level.players) + { + var_03.var_128E["time"] = var_01; + var_03.var_128E["name"] = var_03.playername; + var_03.var_128E["difficulty"] = var_03 maps\_utility::func_152D(); + if(isdefined(var_03.var_1507)) + { + var_03.var_128E["difficulty"] = var_03.var_1507; + } + } + + level.session_score = 0; + if(maps\_utility::is_survival()) + { + foreach(var_03 in level.players) + { + var_03.var_128E["score"] = [[ level.so_survival_score_func ]](); + var_03.var_128E["wave"] = [[ level.so_survival_wave_func ]](); + var_03.var_128E["kills"] = var_03.game_performance["kill"]; + } + + level.session_score = [[ level.so_survival_score_func ]](); + } + else + { + var_07 = 300000; + if(isdefined(level.so_mission_worst_time)) + { + var_07 = level.so_mission_worst_time; + } + + var_08 = 0; + if(var_01 < var_07) + { + var_08 = int(var_07 - var_01 / var_07 * 10000); + } + + level.session_score = int(level.specops_reward_gameskill * 10000) + var_08; + foreach(var_03 in level.players) + { + var_03.var_128E["kills"] = var_03.stats["kills"]; + var_03.var_128E["score"] = level.session_score; + } + } + + if(!isdefined(level.custom_eog_no_defaults) || !level.custom_eog_no_defaults) + { + foreach(var_03 in level.players) + { + if(maps\_utility::func_E89()) + { + var_03.eog_line = 4; + continue; + } + + var_03.eog_line = 3; + } + } + + if(isdefined(level.eog_summary_callback)) + { + [[ level.eog_summary_callback ]](); + } + + if(param_00) + { + common_scripts\utility::flag_set("special_op_final_xp_given"); + foreach(var_03 in level.players) + { + var_0E = func_80E0(var_03.var_128E["score"]); + var_0F = 0; + if(isdefined(level.var_14AE) && level.var_14AE) + { + var_03 thread maps\_utility::func_E86("completion_xp"); + var_0F = maps\_rank::getscoreinfovalue("completion_xp"); + } + else + { + var_10 = undefined; + var_11 = tablelookup("sp/specOpsTable.csv",1,level.script,9); + if(isdefined(var_11) && var_11 != "") + { + var_10 = var_03 getlocalplayerprofiledata(var_11); + } + + if(isdefined(var_10) && var_10 == 0 && !maps\_utility::is_survival()) + { + var_03 thread maps\_utility::func_E86("completion_xp"); + var_0F = maps\_rank::getscoreinfovalue("completion_xp"); + } + } + + if(!maps\_utility::is_survival()) + { + var_12 = var_0F + var_0E; + if(var_03.var_E96["rankxp"] < level.var_80DF) + { + if(var_0F != 0) + { + var_03 thread maps\_utility::func_128F("@SPECIAL_OPS_UI_XP_COMPLETION_FRIST_TIME","^8+" + var_0F,"@SPECIAL_OPS_UI_XP_COMPLETION","^8+" + var_12); + } + else + { + var_03 thread maps\_utility::func_128F("@SPECIAL_OPS_UI_XP_COMPLETION","","^8+" + var_12); + } + } + + var_03 thread maps\_utility::func_E86("final_score_xp",var_0E); + } + } + } + + if(!isdefined(level.custom_eog_no_defaults) || !level.custom_eog_no_defaults) + { + add_eog_default_stats(); + } +} + +//Function Number: 44 +func_80E0(param_00) +{ + return int(param_00 / 10); +} + +//Function Number: 45 +so_eog_summary_display() +{ + if(isdefined(level.eog_summary_delay) && level.eog_summary_delay > 0) + { + wait level.eog_summary_delay; + } + + thread maps\_ambient::use_eq_settings("specialop_fadeout",level.eq_mix_track); + thread maps\_ambient::blend_to_eq_track(level.eq_mix_track,10); + reset_eog_popup_dvars(); + if(isdefined(level.player.var_1508) && level.player.var_1508) + { + setdvar("ui_first_star_player1",level.player.var_1508); + } + + if(isdefined(level.player.eog_newstar) && level.player.eog_newstar) + { + setdvar("ui_eog_player1_stars",level.player.eog_newstar_value); + } + + if(isdefined(level.player.eog_unlock) && level.player.eog_unlock) + { + setdvar("ui_eog_player1_unlock",level.player.eog_unlock_value); + } + + if(isdefined(level.player.eog_bestscore) && level.player.eog_bestscore) + { + setdvar("ui_eog_player1_bestscore",level.player.eog_bestscore_value); + } + + if(maps\_utility::func_E89()) + { + if(isdefined(level.player.var_14AC) && level.player.var_14AC) + { + setdvar("ui_eog_player1_noreward",level.player.var_14AC); + } + + if(isdefined(level.player2.var_1508) && level.player2.var_1508) + { + setdvar("ui_first_star_player2",level.player2.var_1508); + } + + if(isdefined(level.player2.eog_newstar) && level.player2.eog_newstar) + { + setdvar("ui_eog_player2_stars",level.player2.eog_newstar_value); + } + + if(isdefined(level.player2.eog_unlock) && level.player2.eog_unlock) + { + setdvar("ui_eog_player2_unlock",level.player2.eog_unlock_value); + } + + if(isdefined(level.player2.var_14AC) && level.player2.var_14AC) + { + setdvar("ui_eog_player2_noreward",level.player2.var_14AC); + } + + if(isdefined(level.player2.eog_bestscore) && level.player2.eog_bestscore) + { + setdvar("ui_eog_player2_bestscore",level.player2.eog_bestscore_value); + } + + wait 0.05; + level.player openpopupmenu("coop_eog_summary"); + level.player2 openpopupmenu("coop_eog_summary2"); + return; + } + + wait 0.05; + level.player openpopupmenu("sp_eog_summary"); +} + +//Function Number: 46 +reset_eog_popup_dvars() +{ + setdvar("ui_eog_player1_stars",""); + setdvar("ui_eog_player1_unlock",""); + setdvar("ui_eog_player1_besttime",""); + setdvar("ui_eog_player1_bestscore",""); + setdvar("ui_eog_player1_noreward",""); + setdvar("ui_eog_player2_stars",""); + setdvar("ui_eog_player2_unlock",""); + setdvar("ui_eog_player2_besttime",""); + setdvar("ui_eog_player2_bestscore",""); + setdvar("ui_eog_player2_noreward",""); +} + +//Function Number: 47 +add_eog_default_stats() +{ + foreach(var_01 in level.players) + { + var_01 so_eog_default_playerlabel(); + var_01 func_1534(); + var_01 so_eog_default_time(); + var_01 func_1535(); + if(!level.var_1291) + { + var_01 so_eog_default_score(); + } + } +} + +//Function Number: 48 +so_eog_default_playerlabel() +{ + if(maps\_utility::func_E89()) + { + maps\_utility::func_128F("","@SPECIAL_OPS_PERFORMANCE_YOU","@SPECIAL_OPS_PERFORMANCE_PARTNER",undefined,1); + } +} + +//Function Number: 49 +func_1534() +{ + var_00 = self.var_128E["kills"]; + if(maps\_utility::func_E89()) + { + var_01 = maps\_utility::get_other_player(self).var_128E["kills"]; + maps\_utility::func_128F("@SPECIAL_OPS_UI_KILLS",var_00,var_01,undefined,2); + return; + } + + maps\_utility::func_128F("@SPECIAL_OPS_UI_KILLS",var_00,undefined,undefined,1); +} + +//Function Number: 50 +func_1535() +{ + var_00[0] = "@MENU_RECRUIT"; + var_01 = maps\_utility::func_152D(); + maps\_utility::func_128F("@SPECIAL_OPS_UI_DIFFICULTY",var_01,undefined,undefined,2 + int(maps\_utility::func_E89())); +} + +//Function Number: 51 +so_eog_default_time() +{ + var_00 = self.var_128E["time"] * 0.001; + var_01 = maps\_utility::convert_to_time_string(var_00,1); + maps\_utility::func_128F("@SPECIAL_OPS_UI_TIME",var_01,undefined,undefined,3 + int(maps\_utility::func_E89())); +} + +//Function Number: 52 +so_eog_default_score() +{ + if(maps\_utility::func_E89()) + { + var_00 = "@SPECIAL_OPS_UI_TEAM_SCORE"; + } + else + { + var_00 = "@SPECIAL_OPS_UI_SCORE"; + } + + var_01 = self.var_128E["score"]; + maps\_utility::func_128F(var_00,var_01); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_escalator.gsc b/MW3/Xbox/SP/maps/_escalator.gsc new file mode 100644 index 0000000..8dccc7e --- /dev/null +++ b/MW3/Xbox/SP/maps/_escalator.gsc @@ -0,0 +1,99 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_escalator.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 4 + * Decompile Time: 60 ms + * Timestamp: 10/27/2023 2:35:24 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + common_scripts\utility::flag_init("_escalator_on"); + common_scripts\utility::flag_set("_escalator_on"); + level.var_1973 = 0.5; + var_00 = getentarray("escalator","targetname"); + common_scripts\utility::array_thread(var_00,::func_1974); +} + +//Function Number: 2 +func_1974() +{ + var_00 = self; + while(isdefined(var_00.target)) + { + var_00 startusinglessfrequentlighting(); + var_00.var_1975 = var_00.origin; + var_00.var_1976 = getent(var_00.target,"targetname"); + var_00 = var_00.var_1976; + } + + var_00.var_1975 = var_00.origin; + var_00.var_1977 = 1; + var_00.var_1976 = self; + thread escalator_move(self); +} + +//Function Number: 3 +escalator_move(param_00) +{ + var_01 = param_00; + var_02 = var_01.origin; + while(common_scripts\utility::flag("_escalator_on")) + { + var_03 = level.var_1973; + var_04 = var_01.var_1976; + var_01 show(); + if(var_04 != param_00) + { + var_01 moveto(var_04.var_1975,var_03); + } + else + { + var_01.origin = var_02; + } + + if(var_04 == param_00) + { + var_01 hide(); + var_01.var_1975 = var_02; + param_00 = var_01; + wait var_03; + continue; + } + + var_01.var_1975 = var_04.var_1975; + var_01 = var_04; + } + + var_01 = param_00; + for(;;) + { + var_03 = 2; + var_04 = var_01.var_1976; + var_01 show(); + var_01 thread final_move(var_03,var_04); + if(var_04 == param_00) + { + var_01 hide(); + var_01.var_1975 = var_02; + } + + var_01.var_1975 = var_04.var_1975; + var_01 = var_04; + if(var_01 == param_00) + { + return; + } + } +} + +//Function Number: 4 +final_move(param_00,param_01) +{ + self moveto(param_01.var_1975,param_00,0,param_00); + wait param_00; + self moveto(self.origin,0.05); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_flare.gsc b/MW3/Xbox/SP/maps/_flare.gsc new file mode 100644 index 0000000..baaaa61 --- /dev/null +++ b/MW3/Xbox/SP/maps/_flare.gsc @@ -0,0 +1,230 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_flare.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 13 + * Decompile Time: 203 ms + * Timestamp: 10/27/2023 2:34:20 AM +*******************************************************************/ + +//Function Number: 1 +main(param_00,param_01) +{ + if(!isdefined(level._effect)) + { + level._effect = []; + } + + level._effect["flare_runner_intro"] = loadfx("misc/flare_start"); + level._effect["flare_runner"] = loadfx("misc/flare"); + level._effect["flare_runner_fizzout"] = loadfx("misc/flare_end"); + maps\_vehicle::build_template("flare",param_00,param_01,"script_vehicle"); + maps\_vehicle::build_localinit(::func_269F); + maps\_vehicle::build_life(9999); +} + +//Function Number: 2 +func_269F() +{ +} + +//Function Number: 3 +func_3B92(param_00,param_01,param_02,param_03) +{ + wait param_00; + param_01 = param_01 * 20; + var_04 = []; + for(var_05 = 0;var_05 < param_01;var_05++) + { + var_06 = var_05 / param_01; + level.var_3B93 = var_06; + var_07 = []; + for(var_08 = 0;var_08 < 3;var_08++) + { + var_07[var_08] = param_03[var_08] * var_06 + param_02[var_08] * 1 - var_06; + } + + level.sun_color = (var_07[0],var_07[1],var_07[2]); + wait 0.05; + } +} + +//Function Number: 4 +merge_sunsingledvar(param_00,param_01,param_02,param_03,param_04) +{ + setsaveddvar(param_00,param_03); + wait param_01; + param_02 = param_02 * 20; + var_05 = []; + for(var_06 = 0;var_06 < param_02;var_06++) + { + var_07 = var_06 / param_02; + level.var_3B93 = var_07; + var_08 = param_04 * var_07 + param_03 * 1 - var_07; + setsaveddvar(param_00,var_08); + wait 0.05; + } + + setsaveddvar(param_00,param_04); +} + +//Function Number: 5 +func_3B96(param_00,param_01,param_02,param_03) +{ + wait param_00; + param_01 = param_01 * 20; + var_04 = []; + for(var_05 = 0;var_05 < param_01;var_05++) + { + var_06 = var_05 / param_01; + level.var_3B93 = var_06; + var_07 = param_03 * var_06 + param_02 * 1 - var_06; + level.var_3B97 = var_07; + wait 0.05; + } + + level.var_3B97 = param_03; +} + +//Function Number: 6 +func_3B98() +{ + level endon("stop_combining_sunlight_and_brightness"); + wait 0.05; + for(;;) + { + var_00 = level.var_3B97; + if(var_00 > 1) + { + var_00 = var_00 + randomfloat(0.2); + } + + var_01 = level.sun_color * var_00; + setsunlight(var_01[0],var_01[1],var_01[2]); + wait 0.05; + } +} + +//Function Number: 7 +flare_path() +{ + thread maps\_vehicle::func_1B44(self); + common_scripts\utility::flag_wait("flare_stop_setting_sundir"); + self delete(); +} + +//Function Number: 8 +flare_initial_fx() +{ + var_00 = spawn("script_model",(0,0,0)); + var_00 setmodel("tag_origin"); + var_00 linkto(self,"tag_origin",(0,0,0),(0,0,0)); + playfxontag(level._effect["flare_runner_intro"],var_00,"tag_origin"); + self waittillmatch("flare_intro_node","noteworthy"); + var_00 delete(); +} + +//Function Number: 9 +flare_explodes() +{ + common_scripts\utility::flag_set("flare_start_setting_sundir"); + level.var_3B97 = 1; + level.red_suncolor = (0.8,0.4,0.4); + level.original_suncolor = getmapsunlight(); + level.sun_color = level.original_suncolor; + thread merge_sunsingledvar("sm_sunSampleSizeNear",0,0.25,0.25,1); + thread func_3B98(); + thread func_3B92(0,0.25,level.original_suncolor,level.red_suncolor); + thread func_3B96(0,0.25,1,3); + var_00 = spawn("script_model",(0,0,0)); + var_00 setmodel("tag_origin"); + var_00 linkto(self,"tag_origin",(0,0,0),(0,0,0)); + playfxontag(level._effect["flare_runner"],var_00,"tag_origin"); + self waittillmatch("flare_fade_node","noteworthy"); + var_00 delete(); +} + +//Function Number: 10 +func_3B9E() +{ + var_00 = spawn("script_model",(0,0,0)); + var_00 setmodel("tag_origin"); + var_00 linkto(self,"tag_origin",(0,0,0),(0,0,0)); + playfxontag(level._effect["flare_runner_fizzout"],var_00,"tag_origin"); + thread merge_sunsingledvar("sm_sunSampleSizeNear",0,1,1,0.25); + thread func_3B96(0,1,3,0); + thread func_3B92(0,1,level.red_suncolor,level.original_suncolor); + thread func_3B96(1,1,0,1); + var_00 delete(); + wait 1; + common_scripts\utility::flag_set("flare_stop_setting_sundir"); + resetsundirection(); + wait 1; + level notify("stop_combining_sunlight_and_brightness"); + waittillframeend; + resetsunlight(); + common_scripts\utility::flag_set("flare_complete"); +} + +//Function Number: 11 +func_23DC() +{ + flare_initial_fx(); + flare_explodes(); + func_3B9E(); +} + +//Function Number: 12 +flag_flare(param_00) +{ + if(!isdefined(level.flag[param_00])) + { + common_scripts\utility::flag_init(param_00); + } +} + +//Function Number: 13 +func_3BA0(param_00) +{ + var_01 = maps\_vehicle::spawn_vehicle_from_targetname(param_00); + flag_flare("flare_in_use"); + flag_flare("flare_complete"); + flag_flare("flare_stop_setting_sundir"); + flag_flare("flare_start_setting_sundir"); + common_scripts\utility::flag_waitopen("flare_in_use"); + common_scripts\utility::flag_set("flare_in_use"); + resetsunlight(); + resetsundirection(); + var_01 thread flare_path(); + var_01 thread func_23DC(); + var_02 = getmapsundirection(); + var_03 = var_02; + var_04 = var_03 * -100; + common_scripts\utility::flag_wait("flare_start_setting_sundir"); + var_05 = getent(var_01.script_linkto,"script_linkname").origin; + var_03 = vectortoangles(var_01.origin - var_05); + var_06 = anglestoforward(var_03); + for(;;) + { + wait 0.05; + if(common_scripts\utility::flag("flare_stop_setting_sundir")) + { + break; + } + + var_03 = vectortoangles(var_01.origin - var_05); + var_07 = anglestoforward(var_03); + lerpsundirection(var_06,var_07,0.05); + var_06 = var_07; + } + + common_scripts\utility::flag_wait("flare_complete"); + waittillframeend; + common_scripts\utility::flag_clear("flare_complete"); + common_scripts\utility::flag_clear("flare_stop_setting_sundir"); + common_scripts\utility::flag_clear("flare_start_setting_sundir"); + resetsunlight(); + resetsundirection(); + common_scripts\utility::flag_clear("flare_in_use"); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_float.gsc b/MW3/Xbox/SP/maps/_float.gsc new file mode 100644 index 0000000..b4082cc --- /dev/null +++ b/MW3/Xbox/SP/maps/_float.gsc @@ -0,0 +1,120 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_float.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 5 + * Decompile Time: 78 ms + * Timestamp: 10/27/2023 2:34:20 AM +*******************************************************************/ + +//Function Number: 1 +main(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = getentarray("script_floater","targetname"); + if(!var_05.size) + { + return; + } + + var_06 = 10; + var_07 = 0.5; + var_08 = 50; + var_09 = (0,0,0); + var_0A = 10; + if(isdefined(param_00)) + { + var_06 = param_00; + } + + if(isdefined(param_01)) + { + var_07 = param_01; + } + + if(isdefined(param_02)) + { + var_08 = param_02; + } + + if(isdefined(param_04)) + { + var_09 = param_04; + } + + if(isdefined(param_03)) + { + var_0A = param_03; + } + + for(var_0B = 0;var_0B < var_05.size;var_0B++) + { + var_05[var_0B] thread func_3BA1(var_06,var_07,var_08,var_0A,var_09); + } +} + +//Function Number: 2 +func_3BA1(param_00,param_01,param_02,param_03,param_04) +{ + self.range = param_00; + self.time = 1 / param_01; + self.var_3BA2 = self.time * 0.25; + var_05 = self getorigin(); + var_06 = 360 / param_02; + var_07 = distance(var_05,param_04); + var_08 = var_07 * var_06; + var_09 = sin(var_08); + if(cos(var_08) < 0) + { + self.range = -1 * self.range; + } + + var_0A = spawn("script_origin",var_05); + self linkto(var_0A); + var_0B = vectortoangles(var_05 - param_04); + self.var_3BA3 = var_0A.angles; + var_0A.angles = var_0A.angles + (param_03,param_03 * 0.25,var_0B[2]); + self.var_3BA4 = var_0A.angles; + thread func_3BA6(var_09,var_0A); + thread func_3BA5(var_09,var_0A); +} + +//Function Number: 3 +func_3BA5(param_00,param_01) +{ + self endon("death"); + self endon("stop_float_script"); + wait func_3BA7(self.time * param_00); + for(;;) + { + self.var_3BA4 = self.var_3BA4 * -1; + param_01 rotateto(self.var_3BA4,self.time,self.var_3BA2,self.var_3BA2); + param_01 waittill("rotatedone"); + } +} + +//Function Number: 4 +func_3BA6(param_00,param_01) +{ + self endon("death"); + self endon("stop_float_script"); + wait func_3BA7(self.time * param_00); + param_01 movez(self.range * 0.5,self.time * 0.5,self.var_3BA2,self.var_3BA2); + for(;;) + { + param_01 waittill("movedone"); + self.range = -1 * self.range; + param_01 movez(self.range,self.time,self.var_3BA2,self.var_3BA2); + } +} + +//Function Number: 5 +func_3BA7(param_00) +{ + if(param_00 < 0) + { + return -1 * param_00; + } + + return param_00; +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_friendlyfire.gsc b/MW3/Xbox/SP/maps/_friendlyfire.gsc new file mode 100644 index 0000000..1289988 --- /dev/null +++ b/MW3/Xbox/SP/maps/_friendlyfire.gsc @@ -0,0 +1,444 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_friendlyfire.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 15 + * Decompile Time: 251 ms + * Timestamp: 10/27/2023 2:35:26 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + level.friendlyfire["min_participation"] = -200; + level.friendlyfire["max_participation"] = 1000; + level.friendlyfire["enemy_kill_points"] = 250; + level.friendlyfire["friend_kill_points"] = -650; + level.friendlyfire["point_loss_interval"] = 1.25; + level.player.participation = 0; + level.friendlyfiredisabled = 0; + level.friendlyfiredisabledfordestructible = 0; + setdvarifuninitialized("friendlyfire_dev_disabled","0"); + common_scripts\utility::flag_init("friendly_fire_warning"); + thread debug_friendlyfire(); + thread participation_point_flattenovertime(); +} + +//Function Number: 2 +debug_friendlyfire() +{ +} + +//Function Number: 3 +friendly_fire_think(param_00) +{ + if(!isdefined(param_00)) + { + return; + } + + if(!isdefined(param_00.team)) + { + param_00.team = "allies"; + } + + if(isdefined(level.no_friendly_fire_penalty)) + { + return; + } + + level endon("mission failed"); + level thread func_1B91(param_00); + level thread notifydamagenotdone(param_00); + level thread notifydeath(param_00); + for(;;) + { + if(!isdefined(param_00)) + { + return; + } + + if(param_00.health <= 0) + { + return; + } + + var_01 = undefined; + var_02 = undefined; + var_03 = undefined; + var_04 = undefined; + var_05 = undefined; + var_06 = undefined; + var_07 = undefined; + param_00 waittill("friendlyfire_notify",var_01,var_02,var_03,var_04,var_05,var_06); + if(!isdefined(param_00)) + { + return; + } + + if(!isdefined(var_02)) + { + continue; + } + + var_08 = 0; + if(!isdefined(var_06)) + { + var_06 = param_00.damageweapon; + } + + if(isdefined(level.var_80E1)) + { + if(isdefined(var_02.damageowner)) + { + var_07 = 1; + var_02 = var_02.damageowner; + } + } + + if(isplayer(var_02)) + { + var_08 = 1; + if(isdefined(var_06) && var_06 == "none") + { + var_08 = 0; + } + + if(var_02 isusingturret()) + { + var_08 = 1; + } + + if(isdefined(var_07)) + { + var_08 = 1; + } + } + else if(isdefined(var_02.code_classname) && var_02.code_classname == "script_vehicle") + { + var_09 = var_02 getvehicleowner(); + if(isdefined(var_09) && isplayer(var_09)) + { + var_08 = 1; + } + } + + if(!var_08) + { + continue; + } + + if(!isdefined(param_00.team)) + { + continue; + } + + var_0A = param_00.team == level.player.team; + var_0B = undefined; + if(level.script == "airport") + { + var_0B = 0; + } + else if(isdefined(param_00.type) && param_00.type == "civilian") + { + var_0B = 1; + } + else + { + var_0B = issubstr(param_00.classname,"civilian"); + } + + var_0C = var_01 == -1; + if(!var_0A && !var_0B) + { + if(var_0C) + { + level.player.participation = level.player.participation + level.friendlyfire["enemy_kill_points"]; + participation_point_cap(); + return; + } + + continue; + } + + if(isdefined(param_00.no_friendly_fire_penalty)) + { + continue; + } + + if(var_05 == "MOD_PROJECTILE_SPLASH" && isdefined(level.no_friendly_fire_splash_damage)) + { + continue; + } + + if(isdefined(var_06) && var_06 == "claymore") + { + continue; + } + + if(var_0C) + { + if(isdefined(param_00.var_1B84)) + { + level.player.participation = level.player.participation + param_00.var_1B84; + } + else + { + level.player.participation = level.player.participation + level.friendlyfire["friend_kill_points"]; + } + } + else + { + level.player.participation = level.player.participation - var_01; + } + + participation_point_cap(); + if(func_1B88(param_00,var_05) && func_1B89()) + { + if(var_0C) + { + return; + } + else + { + continue; + } + } + + if(isdefined(level.var_1B85)) + { + [[ level.var_1B85 ]](param_00,var_01,var_02,var_03,var_04,var_05,var_06); + continue; + } + + friendly_fire_checkpoints(var_0B); + } +} + +//Function Number: 4 +friendly_fire_checkpoints(param_00) +{ + if(isdefined(level.failonfriendlyfire) && level.failonfriendlyfire) + { + level thread func_1B8E(param_00); + return; + } + + var_01 = level.friendlyfiredisabledfordestructible; + if(isdefined(level.var_80E1) && param_00) + { + var_01 = 0; + } + + if(var_01) + { + return; + } + + if(level.friendlyfiredisabled == 1) + { + return; + } + + if(level.player.participation <= level.friendlyfire["min_participation"]) + { + level thread func_1B8E(param_00); + } +} + +//Function Number: 5 +func_1B88(param_00,param_01) +{ + if(!isdefined(param_00)) + { + return 0; + } + + var_02 = 0; + if(isdefined(param_00.damageweapon) && param_00.damageweapon == "none") + { + var_02 = 1; + } + + if(isdefined(param_01) && param_01 == "MOD_GRENADE_SPLASH") + { + var_02 = 1; + } + + return var_02; +} + +//Function Number: 6 +func_1B89() +{ + var_00 = gettime(); + if(var_00 < 4500) + { + return 1; + } + else if(var_00 - level.var_17C9 < 4500) + { + return 1; + } + + return 0; +} + +//Function Number: 7 +participation_point_cap() +{ + if(level.player.participation > level.friendlyfire["max_participation"]) + { + level.player.participation = level.friendlyfire["max_participation"]; + } + + if(level.player.participation < level.friendlyfire["min_participation"]) + { + level.player.participation = level.friendlyfire["min_participation"]; + } +} + +//Function Number: 8 +participation_point_flattenovertime() +{ + level endon("mission failed"); + for(;;) + { + if(level.player.participation > 0) + { + level.player.participation--; + } + else if(level.player.participation < 0) + { + level.player.participation++; + } + + wait level.friendlyfire["point_loss_interval"]; + } +} + +//Function Number: 9 +turnbackon() +{ + level.friendlyfiredisabled = 0; +} + +//Function Number: 10 +func_1B8D() +{ + level.friendlyfiredisabled = 1; +} + +//Function Number: 11 +func_1B8E(param_00) +{ + if(!isdefined(param_00)) + { + param_00 = 0; + } + + if(level.script == "airport") + { + if(param_00) + { + return; + } + + common_scripts\utility::flag_set("friendly_fire_warning"); + return; + } + + if(getdvar("friendlyfire_dev_disabled") == "1") + { + return; + } + + level.player endon("death"); + if(!isalive(level.player)) + { + return; + } + + level endon("mine death"); + level notify("mission failed"); + level notify("friendlyfire_mission_fail"); + waittillframeend; + setsaveddvar("hud_missionFailed",1); + if(isdefined(level.player.var_1A92)) + { + return; + } + + if(param_00) + { + setdvar("ui_deadquote",&"SCRIPT_MISSIONFAIL_CIVILIAN_KILLED"); + } + else if(isdefined(level.custom_friendly_fire_message)) + { + setdvar("ui_deadquote",level.custom_friendly_fire_message); + } + else if(level.campaign == "british") + { + setdvar("ui_deadquote",&"SCRIPT_MISSIONFAIL_KILLTEAM_BRITISH"); + } + else if(level.campaign == "russian") + { + setdvar("ui_deadquote",&"SCRIPT_MISSIONFAIL_KILLTEAM_RUSSIAN"); + } + else + { + setdvar("ui_deadquote",&"SCRIPT_MISSIONFAIL_KILLTEAM_AMERICAN"); + } + + if(isdefined(level.var_1B90)) + { + thread maps\_load::special_death_indicator_hudelement(level.var_1B90,64,64,0); + } + + reconspatialevent(level.player.origin,"script_friendlyfire: civilian %d",param_00); + maps\_utility::func_13EE(); +} + +//Function Number: 12 +func_1B91(param_00) +{ + level endon("mission failed"); + param_00 endon("death"); + for(;;) + { + var_01 = undefined; + var_02 = undefined; + var_03 = undefined; + var_04 = undefined; + var_05 = undefined; + var_06 = undefined; + var_07 = undefined; + var_08 = undefined; + var_09 = undefined; + var_0A = undefined; + param_00 waittill("damage",var_01,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09,var_0A); + param_00 notify("friendlyfire_notify",var_01,var_02,var_03,var_04,var_05,var_0A); + } +} + +//Function Number: 13 +notifydamagenotdone(param_00) +{ + level endon("mission failed"); + param_00 waittill("damage_notdone",var_01,var_02,var_03,var_04,var_05); + param_00 notify("friendlyfire_notify",-1,var_02,undefined,undefined,var_05); +} + +//Function Number: 14 +notifydeath(param_00) +{ + level endon("mission failed"); + param_00 waittill("death",var_01,var_02,var_03); + param_00 notify("friendlyfire_notify",-1,var_01,undefined,undefined,var_02,var_03); +} + +//Function Number: 15 +detectfriendlyfireonentity(param_00) +{ +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_fx.gsc b/MW3/Xbox/SP/maps/_fx.gsc new file mode 100644 index 0000000..540bfc0 --- /dev/null +++ b/MW3/Xbox/SP/maps/_fx.gsc @@ -0,0 +1,223 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_fx.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 10 + * Decompile Time: 159 ms + * Timestamp: 10/27/2023 2:35:35 AM +*******************************************************************/ + +//Function Number: 1 +script_print_fx() +{ + if(!isdefined(self.script_fxid) || !isdefined(self.script_fxcommand) || !isdefined(self.script_delay)) + { + self delete(); + return; + } + + if(isdefined(self.target)) + { + var_00 = getent(self.target).origin; + } + else + { + var_00 = "undefined"; + } + + if(self.script_fxcommand == "OneShotfx") + { + } + + if(self.script_fxcommand == "loopfx") + { + } + + if(self.script_fxcommand == "loopsound") + { + } +} + +//Function Number: 2 +script_playfx(param_00,param_01,param_02) +{ + if(!param_00) + { + return; + } + + if(isdefined(param_02)) + { + playfx(param_00,param_01,param_02); + return; + } + + playfx(param_00,param_01); +} + +//Function Number: 3 +script_playfxontag(param_00,param_01,param_02) +{ + if(!param_00) + { + return; + } + + playfxontag(param_00,param_01,param_02); +} + +//Function Number: 4 +grenadeexplosionfx(param_00) +{ + playfx(level._effect["mechanical explosion"],param_00); + earthquake(0.15,0.5,param_00,250); +} + +//Function Number: 5 +soundfx(param_00,param_01,param_02) +{ + var_03 = spawn("script_origin",(0,0,0)); + var_03.origin = param_01; + var_03 playloopsound(param_00); + if(isdefined(param_02)) + { + var_03 thread soundfxdelete(param_02); + } +} + +//Function Number: 6 +soundfxdelete(param_00) +{ + level waittill(param_00); + self delete(); +} + +//Function Number: 7 +rainfx(param_00,param_01,param_02) +{ + var_03 = spawn("script_origin",(0,0,0)); + var_03.origin = param_02; + var_03 thread rainloop(param_00,param_01); +} + +//Function Number: 8 +rainloop(param_00,param_01) +{ + self endon("death"); + var_02 = spawn("sound_blend",(0,0,0)); + var_02.origin = self.origin; + thread blenddelete(var_02); + var_03 = spawn("sound_blend",(0,0,0)); + var_03.origin = self.origin; + thread blenddelete(var_03); + var_02 setsoundblend(param_01 + "_null",param_01,0); + var_03 setsoundblend(param_00 + "_null",param_00,1); + var_04 = "hard"; + var_05 = undefined; + for(;;) + { + level waittill("rain_change",var_06,var_05); + var_05 = var_05 * 20; + if(var_06 == "hard") + { + if(var_04 == "none") + { + var_05 = var_05 * 0.5; + for(var_07 = 0;var_07 < var_05;var_07++) + { + var_02 setsoundblend(param_01 + "_null",param_01,var_07 / var_05); + wait 0.05; + } + + var_04 = "light"; + } + + if(var_04 == "light") + { + for(var_07 = 0;var_07 < var_05;var_07++) + { + var_02 setsoundblend(param_01 + "_null",param_01,1 - var_07 / var_05); + var_03 setsoundblend(param_00 + "_null",param_00,var_07 / var_05); + wait 0.05; + } + } + } + + if(var_06 == "none") + { + if(var_04 == "hard") + { + var_05 = var_05 * 0.5; + for(var_07 = 0;var_07 < var_05;var_07++) + { + var_02 setsoundblend(param_01 + "_null",param_01,var_07 / var_05); + var_03 setsoundblend(param_00 + "_null",param_00,1 - var_07 / var_05); + wait 0.05; + } + + var_04 = "light"; + } + + if(var_04 == "light") + { + for(var_07 = 0;var_07 < var_05;var_07++) + { + var_02 setsoundblend(param_01 + "_null",param_01,1 - var_07 / var_05); + wait 0.05; + } + } + } + + if(var_06 == "light") + { + if(var_04 == "none") + { + for(var_07 = 0;var_07 < var_05;var_07++) + { + var_02 setsoundblend(param_01 + "_null",param_01,var_07 / var_05); + wait 0.05; + } + } + + if(var_04 == "hard") + { + for(var_07 = 0;var_07 < var_05;var_07++) + { + var_02 setsoundblend(param_01 + "_null",param_01,var_07 / var_05); + var_03 setsoundblend(param_00 + "_null",param_00,1 - var_07 / var_05); + wait 0.05; + } + } + } + + var_04 = var_06; + } +} + +//Function Number: 9 +blenddelete(param_00) +{ + self waittill("death"); + param_00 delete(); +} + +//Function Number: 10 +watersheeting(param_00) +{ + var_01 = 3; + if(isdefined(param_00.script_duration)) + { + var_01 = param_00.script_duration; + } + + for(;;) + { + param_00 waittill("trigger",var_02); + if(isplayer(var_02)) + { + var_02 setwatersheeting(1,var_01); + wait var_01 * 0.2; + } + } +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_gameskill.gsc b/MW3/Xbox/SP/maps/_gameskill.gsc new file mode 100644 index 0000000..a23d8b9 --- /dev/null +++ b/MW3/Xbox/SP/maps/_gameskill.gsc @@ -0,0 +1,2319 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_gameskill.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 109 + * Decompile Time: 4447 ms + * Timestamp: 10/27/2023 2:32:09 AM +*******************************************************************/ + +//Function Number: 1 +setskill(param_00) +{ + if(!isdefined(level.script)) + { + level.script = tolower(getdvar("mapname")); + } + + if(!isdefined(param_00) || param_00 == 0) + { + if(isdefined(level.gameskill)) + { + return; + } + + if(!isdefined(level.var_1E5D)) + { + level.var_1E5D = ::return_false; + } + + level.global_damage_func_ads = ::empty_kill_func; + level.var_5D2 = ::empty_kill_func; + level.global_kill_func = ::empty_kill_func; + if(getdvar("arcademode") == "1") + { + thread maps\_arcademode::main(); + } + + maps\_utility::set_console_status(); + foreach(var_02 in level.players) + { + var_02 maps\_utility::ent_flag_init("player_has_red_flashing_overlay"); + var_02 maps\_utility::ent_flag_init("player_is_invulnerable"); + var_02 maps\_utility::ent_flag_init("player_zero_attacker_accuracy"); + var_02 maps\_utility::ent_flag_init("player_no_auto_blur"); + var_02 maps\_utility::ent_flag_init("near_death_vision_enabled"); + var_02 maps\_utility::func_FA4("near_death_vision_enabled"); + var_02.var_1C74 = spawnstruct(); + var_02 func_1E68(); + var_02.a = spawnstruct(); + var_02.damage_functions = []; + var_02 maps\_player_stats::init_stats(); + var_02 maps\_utility::ent_flag_init("global_hint_in_use"); + var_02.pers = []; + if(!isdefined(var_02.baseignorerandombulletdamage)) + { + var_02.baseignorerandombulletdamage = 0; + } + + var_02.disabledweapon = 0; + var_02.disabledweaponswitch = 0; + var_02.disabledusability = 0; + var_02 setoffhandprimaryclass("frag"); + } + + level.var_1E5F[0] = "easy"; + level.var_1E5F[1] = "normal"; + level.var_1E5F[2] = "hardened"; + level.var_1E5F[3] = "veteran"; + level.var_1E60["easy"] = &"GAMESKILL_EASY"; + level.var_1E60["normal"] = &"GAMESKILL_NORMAL"; + level.var_1E60["hardened"] = &"GAMESKILL_HARDENED"; + level.var_1E60["veteran"] = &"GAMESKILL_VETERAN"; + thread gameskill_change_monitor(); + } + + setdvarifuninitialized("autodifficulty_playerDeathTimer",0); + anim.var_1E61 = 0.5; + anim.var_1E62 = 0.8; + setdvar("autodifficulty_frac",0); + level.difficultysettings_frac_data_points = []; + foreach(var_02 in level.players) + { + var_02 init_take_cover_warnings(); + var_02 thread increment_take_cover_warnings_on_death(); + } + + level.var_1E64 = 8; + level.mg42badplace_maxtime = 16; + level.difficultysettings["playerGrenadeBaseTime"]["easy"] = -25536; + level.difficultysettings["playerGrenadeBaseTime"]["normal"] = -30536; + level.difficultysettings["playerGrenadeBaseTime"]["hardened"] = 25000; + level.difficultysettings["playerGrenadeBaseTime"]["veteran"] = 25000; + level.difficultysettings["playerGrenadeRangeTime"]["easy"] = 20000; + level.difficultysettings["playerGrenadeRangeTime"]["normal"] = 15000; + level.difficultysettings["playerGrenadeRangeTime"]["hardened"] = 10000; + level.difficultysettings["playerGrenadeRangeTime"]["veteran"] = 10000; + level.difficultysettings["playerDoubleGrenadeTime"]["easy"] = 3600000; + level.difficultysettings["playerDoubleGrenadeTime"]["normal"] = 150000; + level.difficultysettings["playerDoubleGrenadeTime"]["hardened"] = 90000; + level.difficultysettings["playerDoubleGrenadeTime"]["veteran"] = 90000; + level.difficultysettings["double_grenades_allowed"]["easy"] = 0; + level.difficultysettings["double_grenades_allowed"]["normal"] = 1; + level.difficultysettings["double_grenades_allowed"]["hardened"] = 1; + level.difficultysettings["double_grenades_allowed"]["veteran"] = 1; + level.difficultysettings["threatbias"]["easy"] = 100; + level.difficultysettings["threatbias"]["normal"] = 150; + level.difficultysettings["threatbias"]["hardened"] = 200; + level.difficultysettings["threatbias"]["veteran"] = 400; + level.difficultysettings["base_enemy_accuracy"]["easy"] = 0.9; + level.difficultysettings["base_enemy_accuracy"]["normal"] = 1; + level.difficultysettings["base_enemy_accuracy"]["hardened"] = 1.15; + level.difficultysettings["base_enemy_accuracy"]["veteran"] = 1.15; + level.difficultysettings["accuracyDistScale"]["easy"] = 1; + level.difficultysettings["accuracyDistScale"]["normal"] = 1; + level.difficultysettings["accuracyDistScale"]["hardened"] = 0.6; + level.difficultysettings["accuracyDistScale"]["veteran"] = 0.8; + level.difficultysettings["min_sniper_burst_delay_time"]["easy"] = 3; + level.difficultysettings["min_sniper_burst_delay_time"]["normal"] = 2; + level.difficultysettings["min_sniper_burst_delay_time"]["hardened"] = 1.5; + level.difficultysettings["min_sniper_burst_delay_time"]["veteran"] = 1.1; + level.difficultysettings["max_sniper_burst_delay_time"]["easy"] = 4; + level.difficultysettings["max_sniper_burst_delay_time"]["normal"] = 3; + level.difficultysettings["max_sniper_burst_delay_time"]["hardened"] = 2; + level.difficultysettings["max_sniper_burst_delay_time"]["veteran"] = 1.5; + level.difficultysettings["dog_health"]["easy"] = 0.25; + level.difficultysettings["dog_health"]["normal"] = 0.75; + level.difficultysettings["dog_health"]["hardened"] = 1; + level.difficultysettings["dog_health"]["veteran"] = 1; + level.difficultysettings["dog_presstime"]["easy"] = 415; + level.difficultysettings["dog_presstime"]["normal"] = 375; + level.difficultysettings["dog_presstime"]["hardened"] = 250; + level.difficultysettings["dog_presstime"]["veteran"] = 225; + level.difficultysettings["dog_hits_before_kill"]["easy"] = 2; + level.difficultysettings["dog_hits_before_kill"]["normal"] = 1; + level.difficultysettings["dog_hits_before_kill"]["hardened"] = 0; + level.difficultysettings["dog_hits_before_kill"]["veteran"] = 0; + level.difficultysettings["pain_test"]["easy"] = ::func_1E8F; + level.difficultysettings["pain_test"]["normal"] = ::func_1E8F; + level.difficultysettings["pain_test"]["hardened"] = ::pain_protection; + level.difficultysettings["pain_test"]["veteran"] = ::pain_protection; + level.difficultysettings["missTimeConstant"]["easy"] = 1; + level.difficultysettings["missTimeConstant"]["normal"] = 0.05; + level.difficultysettings["missTimeConstant"]["hardened"] = 0; + level.difficultysettings["missTimeConstant"]["veteran"] = 0; + level.difficultysettings["missTimeDistanceFactor"]["easy"] = 0.0008; + level.difficultysettings["missTimeDistanceFactor"]["normal"] = 0.0001; + level.difficultysettings["missTimeDistanceFactor"]["hardened"] = 5E-05; + level.difficultysettings["missTimeDistanceFactor"]["veteran"] = 0; + level.difficultysettings["flashbangedInvulFactor"]["easy"] = 0.25; + level.difficultysettings["flashbangedInvulFactor"]["normal"] = 0; + level.difficultysettings["flashbangedInvulFactor"]["hardened"] = 0; + level.difficultysettings["flashbangedInvulFactor"]["veteran"] = 0; + level.difficultysettings["player_criticalBulletDamageDist"]["easy"] = 0; + level.difficultysettings["player_criticalBulletDamageDist"]["normal"] = 0; + level.difficultysettings["player_criticalBulletDamageDist"]["hardened"] = 0; + level.difficultysettings["player_criticalBulletDamageDist"]["veteran"] = 0; + level.difficultysettings["player_deathInvulnerableTime"]["easy"] = 4000; + level.difficultysettings["player_deathInvulnerableTime"]["normal"] = 2500; + level.difficultysettings["player_deathInvulnerableTime"]["hardened"] = 600; + level.difficultysettings["player_deathInvulnerableTime"]["veteran"] = 100; + level.difficultysettings["invulTime_preShield"]["easy"] = 0.6; + level.difficultysettings["invulTime_preShield"]["normal"] = 0.5; + level.difficultysettings["invulTime_preShield"]["hardened"] = 0.3; + level.difficultysettings["invulTime_preShield"]["veteran"] = 0; + level.difficultysettings["invulTime_onShield"]["easy"] = 1.6; + level.difficultysettings["invulTime_onShield"]["normal"] = 1; + level.difficultysettings["invulTime_onShield"]["hardened"] = 0.5; + level.difficultysettings["invulTime_onShield"]["veteran"] = 0.25; + level.difficultysettings["invulTime_postShield"]["easy"] = 0.5; + level.difficultysettings["invulTime_postShield"]["normal"] = 0.4; + level.difficultysettings["invulTime_postShield"]["hardened"] = 0.3; + level.difficultysettings["invulTime_postShield"]["veteran"] = 0; + level.difficultysettings["playerHealth_RegularRegenDelay"]["easy"] = 4000; + level.difficultysettings["playerHealth_RegularRegenDelay"]["normal"] = 4000; + level.difficultysettings["playerHealth_RegularRegenDelay"]["hardened"] = 3000; + level.difficultysettings["playerHealth_RegularRegenDelay"]["veteran"] = 1200; + level.difficultysettings["worthyDamageRatio"]["easy"] = 0; + level.difficultysettings["worthyDamageRatio"]["normal"] = 0.1; + level.difficultysettings["worthyDamageRatio"]["hardened"] = 0.3; + level.difficultysettings["worthyDamageRatio"]["veteran"] = 0.3; + level.difficultysettings["playerDifficultyHealth"]["easy"] = 475; + level.difficultysettings["playerDifficultyHealth"]["normal"] = 275; + level.difficultysettings["playerDifficultyHealth"]["hardened"] = 165; + level.difficultysettings["playerDifficultyHealth"]["veteran"] = 115; + level.difficultysettings["longRegenTime"]["easy"] = 5000; + level.difficultysettings["longRegenTime"]["normal"] = 5000; + level.difficultysettings["longRegenTime"]["hardened"] = 3200; + level.difficultysettings["longRegenTime"]["veteran"] = 3200; + level.difficultysettings["healthOverlayCutoff"]["easy"] = 0.02; + level.difficultysettings["healthOverlayCutoff"]["normal"] = 0.02; + level.difficultysettings["healthOverlayCutoff"]["hardened"] = 0.02; + level.difficultysettings["healthOverlayCutoff"]["veteran"] = 0.02; + level.difficultysettings["health_regenRate"]["easy"] = 0.02; + level.difficultysettings["health_regenRate"]["normal"] = 0.02; + level.difficultysettings["health_regenRate"]["hardened"] = 0.02; + level.difficultysettings["health_regenRate"]["veteran"] = 0.02; + level.difficultysettings["explosivePlantTime"]["easy"] = 10; + level.difficultysettings["explosivePlantTime"]["normal"] = 10; + level.difficultysettings["explosivePlantTime"]["hardened"] = 5; + level.difficultysettings["explosivePlantTime"]["veteran"] = 5; + level.difficultysettings["player_downed_buffer_time"]["normal"] = 2; + level.difficultysettings["player_downed_buffer_time"]["hardened"] = 1.5; + level.difficultysettings["player_downed_buffer_time"]["veteran"] = 0; + level.lastplayersighted = 0; + setsaveddvar("player_meleeDamageMultiplier",0.4); + if(isdefined(level.custom_gameskill_func)) + { + [[ level.custom_gameskill_func ]](); + } + + if(coop_with_one_player_downed()) + { + func_1E6B(); + } + + updategameskill(); + updatealldifficulty(); + setdvar("autodifficulty_original_setting",level.gameskill); +} + +//Function Number: 2 +func_1E68() +{ + self.var_1C74.screeneffect = []; + var_00 = ["bottom","left","right"]; + var_01 = ["bloodsplat","dirt"]; + foreach(var_03 in var_01) + { + foreach(var_05 in var_00) + { + self.var_1C74.screeneffect[var_03][var_05] = 0; + self.var_1C74.screeneffect[var_03 + "_count"][var_05] = 0; + } + } +} + +//Function Number: 3 +coop_player_in_special_ops_survival() +{ + setsaveddvar("player_meleeDamageMultiplier",0.26); +} + +//Function Number: 4 +solo_player_in_special_ops() +{ + if(!maps\_utility::is_survival()) + { + setsaveddvar("player_deathInvulnerableToMelee","1"); + setsaveddvar("ai_accuracy_attackercountDecrease","0.6"); + } + + level.difficultysettings["playerHealth_RegularRegenDelay"]["normal"] = 2000; + level.difficultysettings["playerHealth_RegularRegenDelay"]["hardened"] = 2000; + level.difficultysettings["playerHealth_RegularRegenDelay"]["veteran"] = 900; + if(!maps\_utility::is_survival()) + { + level.difficultysettings["invulTime_onShield"]["normal"] = 2.5; + } + else + { + level.difficultysettings["invulTime_onShield"]["normal"] = 1.5; + } + + level.difficultysettings["player_deathInvulnerableTime"]["normal"] = 3000; + level.difficultysettings["player_deathInvulnerableTime"]["hardened"] = 1300; + level.difficultysettings["player_deathInvulnerableTime"]["veteran"] = 800; + level.difficultysettings["longRegenTime"]["normal"] = 4500; + level.difficultysettings["longRegenTime"]["hardened"] = 4500; + level.difficultysettings["longRegenTime"]["veteran"] = 4500; + level.difficultysettings["playerDifficultyHealth"]["normal"] = 350; + level.difficultysettings["playerDifficultyHealth"]["hardened"] = 205; + level.difficultysettings["playerDifficultyHealth"]["veteran"] = 205; + if(!maps\_utility::is_survival()) + { + setsaveddvar("player_meleeDamageMultiplier",0.5); + return; + } + + setsaveddvar("player_meleeDamageMultiplier",0.26); +} + +//Function Number: 5 +func_1E6A() +{ + level.difficultysettings["player_deathInvulnerableTime"]["normal"] = 2500; + level.difficultysettings["player_deathInvulnerableTime"]["hardened"] = 1200; + level.difficultysettings["player_deathInvulnerableTime"]["veteran"] = 200; + var_00 = 1.35; + level.difficultysettings["playerDifficultyHealth"]["normal"] = int(275 * var_00); + level.difficultysettings["playerDifficultyHealth"]["hardened"] = int(165 * var_00); + level.difficultysettings["playerDifficultyHealth"]["veteran"] = int(138); +} + +//Function Number: 6 +func_1E6B() +{ + level.difficultysettings["player_deathInvulnerableTime"]["normal"] = 2500; + level.difficultysettings["player_deathInvulnerableTime"]["hardened"] = 1000; + var_00 = 1.25; + level.difficultysettings["playerDifficultyHealth"]["normal"] = int(275 * var_00); + level.difficultysettings["playerDifficultyHealth"]["hardened"] = int(165 * var_00); +} + +//Function Number: 7 +updatealldifficulty() +{ + setglobaldifficulty(); + for(var_00 = 0;var_00 < level.players.size;var_00++) + { + level.players[var_00] func_139A(); + } +} + +//Function Number: 8 +func_139A() +{ + set_difficulty_from_locked_settings(); +} + +//Function Number: 9 +setglobaldifficulty() +{ + var_00 = ::get_locked_difficulty_val_global; + var_01 = func_1E73(level.gameskill); + anim.dog_health = [[ var_00 ]]("dog_health",level.gameskill); + anim.pain_test = level.difficultysettings["pain_test"][var_01]; + level.explosiveplanttime = level.difficultysettings["explosivePlantTime"][var_01]; + anim.min_sniper_burst_delay_time = [[ var_00 ]]("min_sniper_burst_delay_time",level.gameskill); + anim.max_sniper_burst_delay_time = [[ var_00 ]]("max_sniper_burst_delay_time",level.gameskill); + setsaveddvar("ai_accuracyDistScale",[[ var_00 ]]("accuracyDistScale",level.gameskill)); + if(maps\_utility::laststand_enabled()) + { + level.player_downed_death_buffer_time = level.difficultysettings["player_downed_buffer_time"][var_01]; + } + + maps\_mgturret::func_139A(); +} + +//Function Number: 10 +updategameskill() +{ + foreach(var_01 in level.players) + { + if(maps\_utility::is_survival()) + { + var_01.gameskill = 1; + continue; + } + + var_01.gameskill = var_01 maps\_utility::func_152D(); + } + + level.gameskill = level.player.gameskill; + if(maps\_utility::func_E89() && level.player2.gameskill > level.gameskill) + { + level.gameskill = level.player2.gameskill; + } + + level.specops_reward_gameskill = level.player.gameskill; + if(maps\_utility::func_E89() && level.player2.gameskill < level.specops_reward_gameskill) + { + level.specops_reward_gameskill = level.player2.gameskill; + } + + if(isdefined(level.var_1507)) + { + level.gameskill = level.var_1507; + } + + return level.gameskill; +} + +//Function Number: 11 +gameskill_change_monitor() +{ + var_00 = level.gameskill; + for(;;) + { + if(!isdefined(var_00)) + { + wait 1; + var_00 = level.gameskill; + continue; + } + + if(var_00 != updategameskill()) + { + var_00 = level.gameskill; + updatealldifficulty(); + } + + wait 1; + } +} + +//Function Number: 12 +func_1E73(param_00) +{ + return level.var_1E5F[param_00]; +} + +//Function Number: 13 +aa_should_start_fresh() +{ + if(level.script == "killhouse") + { + return 1; + } + + return level.gameskill == getdvarint("autodifficulty_original_setting"); +} + +//Function Number: 14 +func_1E75(param_00,param_01) +{ + self.var_1C74.invultime_preshield = [[ param_00 ]]("invulTime_preShield",param_01); + self.var_1C74.invultime_onshield = [[ param_00 ]]("invulTime_onShield",param_01); + self.var_1C74.invultime_postshield = [[ param_00 ]]("invulTime_postShield",param_01); + self.var_1C74.playerhealth_regularregendelay = [[ param_00 ]]("playerHealth_RegularRegenDelay",param_01); + self.var_1C74.worthydamageratio = [[ param_00 ]]("worthyDamageRatio",param_01); + self.threatbias = int([[ param_00 ]]("threatbias",param_01)); + self.var_1C74.longregentime = [[ param_00 ]]("longRegenTime",param_01); + self.var_1C74.healthoverlaycutoff = [[ param_00 ]]("healthOverlayCutoff",param_01); + self.var_1C74.regenrate = [[ param_00 ]]("health_regenRate",param_01); + self.var_1C74.player_attacker_accuracy = [[ param_00 ]]("base_enemy_accuracy",param_01); + update_player_attacker_accuracy(); + self.var_1C74.playergrenadebasetime = int([[ param_00 ]]("playerGrenadeBaseTime",param_01)); + self.var_1C74.var_1C75 = int([[ param_00 ]]("playerGrenadeRangeTime",param_01)); + self.var_1C74.var_1C76 = int([[ param_00 ]]("playerDoubleGrenadeTime",param_01)); + self.var_1C74.min_sniper_burst_delay_time = [[ param_00 ]]("min_sniper_burst_delay_time",param_01); + self.var_1C74.max_sniper_burst_delay_time = [[ param_00 ]]("max_sniper_burst_delay_time",param_01); + self.var_1C74.var_1E80 = [[ param_00 ]]("dog_presstime",param_01); + self.deathinvulnerabletime = int([[ param_00 ]]("player_deathInvulnerableTime",param_01)); + self.criticalbulletdamagedist = int([[ param_00 ]]("player_criticalBulletDamageDist",param_01)); + self.damagemultiplier = 100 / [[ param_00 ]]("playerDifficultyHealth",param_01); +} + +//Function Number: 15 +update_player_attacker_accuracy() +{ + if(maps\_utility::ent_flag("player_zero_attacker_accuracy")) + { + return; + } + + self.ignorerandombulletdamage = self.baseignorerandombulletdamage; + self.attackeraccuracy = self.var_1C74.player_attacker_accuracy; +} + +//Function Number: 16 +apply_difficulty_step_with_func(param_00,param_01) +{ + self.var_1C74.misstimeconstant = [[ param_00 ]]("missTimeConstant",param_01); + self.var_1C74.misstimedistancefactor = [[ param_00 ]]("missTimeDistanceFactor",param_01); + self.var_1C74.dog_hits_before_kill = [[ param_00 ]]("dog_hits_before_kill",param_01); + self.var_1C74.double_grenades_allowed = [[ param_00 ]]("double_grenades_allowed",param_01); +} + +//Function Number: 17 +set_difficulty_from_locked_settings() +{ + func_1E75(::get_locked_difficulty_val_player,1); + apply_difficulty_step_with_func(::func_1E88,1); +} + +//Function Number: 18 +func_1E88(param_00,param_01) +{ + return level.difficultysettings[param_00][func_1E73(self.gameskill)]; +} + +//Function Number: 19 +func_1E89(param_00,param_01) +{ + return level.difficultysettings[param_00][func_1E73(level.gameskill)]; +} + +//Function Number: 20 +get_blended_difficulty(param_00,param_01) +{ + var_02 = level.difficultysettings_frac_data_points[param_00]; + var_03 = 1; + while(var_03 < var_02.size) + { + var_04 = var_02[var_03]["frac"]; + var_05 = var_02[var_03]["val"]; + if(param_01 <= var_04) + { + var_06 = var_02[var_03 - 1]["frac"]; + var_07 = var_02[var_03 - 1]["val"]; + var_08 = var_04 - var_06; + var_09 = var_05 - var_07; + var_0A = param_01 - var_06; + var_0B = var_0A / var_08; + return var_07 + var_0B * var_09; + } + + var_09++; + } + + return var_08[var_08.size - 1]["val"]; +} + +//Function Number: 21 +getcurrentdifficultysetting(param_00) +{ + return level.difficultysettings[param_00][func_1E73(self.gameskill)]; +} + +//Function Number: 22 +func_1E8C(param_00,param_01,param_02) +{ + return level.difficultysettings[param_00][level.var_1E5F[param_01]] * 100 - getdvarint("autodifficulty_frac") + level.difficultysettings[param_00][level.var_1E5F[param_02]] * getdvarint("autodifficulty_frac") * 0.01; +} + +//Function Number: 23 +get_locked_difficulty_val_player(param_00,param_01) +{ + return level.difficultysettings[param_00][func_1E73(self.gameskill)]; +} + +//Function Number: 24 +get_locked_difficulty_val_global(param_00,param_01) +{ + return level.difficultysettings[param_00][func_1E73(level.gameskill)]; +} + +//Function Number: 25 +func_1E8F() +{ + return 0; +} + +//Function Number: 26 +pain_protection() +{ + if(!pain_protection_check()) + { + return 0; + } + + return randomint(100) > 25; +} + +//Function Number: 27 +pain_protection_check() +{ + if(!isalive(self.enemy)) + { + return 0; + } + + if(!isplayer(self.enemy)) + { + return 0; + } + + if(!isalive(level.painai) || level.painai.script != "pain") + { + level.painai = self; + } + + if(self == level.painai) + { + return 0; + } + + if(self.damageweapon != "none" && weaponisboltaction(self.damageweapon)) + { + return 0; + } + + return 1; +} + +//Function Number: 28 +func_1E92() +{ + if(animscripts/combat_utility::issniper() && isalive(self.enemy)) + { + setsniperaccuracy(); + return; + } + + if(isplayer(self.enemy)) + { + resetmissdebouncetime(); + if(self.a.var_1556 > gettime()) + { + self.accuracy = 0; + return; + } + } + + if(self.script == "move") + { + if(animscripts/utility::iscqbwalkingorfacingenemy()) + { + self.accuracy = level.var_1E62 * self.baseaccuracy; + } + else + { + self.accuracy = level.var_1E61 * self.baseaccuracy; + } + + return; + } + + self.accuracy = self.baseaccuracy; + if(isdefined(self.isrambo) && isdefined(self.ramboaccuracymult)) + { + self.accuracy = self.accuracy * self.ramboaccuracymult; + } +} + +//Function Number: 29 +setsniperaccuracy() +{ + if(!isdefined(self.var_8F5)) + { + self.var_8F5 = 0; + self.sniperhitcount = 0; + } + + self.var_8F5++; + var_00 = level.gameskill; + if(isplayer(self.enemy)) + { + var_00 = self.enemy.gameskill; + } + + if(func_1E96()) + { + self.accuracy = 0; + if(var_00 > 0 || self.var_8F5 > 1) + { + self.lastmissedenemy = self.enemy; + } + + return; + } + + self.accuracy = 1 + 1 * self.sniperhitcount * self.baseaccuracy; + self.sniperhitcount++; + if(var_00 < 1 && self.sniperhitcount == 1) + { + self.lastmissedenemy = undefined; + } +} + +//Function Number: 30 +func_1E96() +{ + if(isdefined(self.neverforcesnipermissenemy) && self.neverforcesnipermissenemy) + { + return 0; + } + + if(self.team == "allies") + { + return 0; + } + + if(isdefined(self.lastmissedenemy) && self.enemy == self.lastmissedenemy) + { + return 0; + } + + if(distancesquared(self.origin,self.enemy.origin) > 250000) + { + return 0; + } + + return 1; +} + +//Function Number: 31 +func_1E98() +{ + return 1 + randomfloat(4); +} + +//Function Number: 32 +didsomethingotherthanshooting() +{ + self.a.var_1C32 = 0; +} + +//Function Number: 33 +func_1E99() +{ + resetmisstime(); +} + +//Function Number: 34 +waittimeifplayerishit() +{ + var_00 = 0; + waittillframeend; + if(!isalive(self.enemy)) + { + return var_00; + } + + if(!isplayer(self.enemy)) + { + return var_00; + } + + if(self.enemy maps\_utility::ent_flag("player_is_invulnerable")) + { + var_00 = 0.3 + randomfloat(0.4); + } + + return var_00; +} + +//Function Number: 35 +func_1E9B(param_00,param_01,param_02,param_03) +{ + param_03 = param_03 * 20; + for(var_04 = 0;var_04 < param_03;var_04++) + { + wait 0.05; + } +} + +//Function Number: 36 +resetmisstime() +{ + if(!self isbadguy()) + { + return; + } + + if(self.weapon == "none") + { + return; + } + + if(!animscripts/weaponlist::usingautomaticweapon() && !animscripts/weaponlist::usingsemiautoweapon()) + { + self.var_1556 = 0; + return; + } + + if(!isalive(self.enemy)) + { + return; + } + + if(!isplayer(self.enemy)) + { + self.accuracy = self.baseaccuracy; + return; + } + + var_00 = distance(self.enemy.origin,self.origin); + setmisstime(self.enemy.var_1C74.misstimeconstant + var_00 * self.enemy.var_1C74.misstimedistancefactor); +} + +//Function Number: 37 +resetmissdebouncetime() +{ + self.a.var_1C32 = gettime() + 3000; +} + +//Function Number: 38 +setmisstime(param_00) +{ + if(self.a.var_1C32 > gettime()) + { + return; + } + + if(param_00 > 0) + { + self.accuracy = 0; + } + + param_00 = param_00 * 1000; + self.a.var_1556 = gettime() + param_00; + self.a.accuracygrowthmultiplier = 1; +} + +//Function Number: 39 +func_1E9F() +{ + self endon("death"); + self notify("playeraim"); + self endon("playeraim"); + for(;;) + { + var_00 = (0,1,0); + if(self.a.var_1556 > gettime()) + { + var_00 = (1,0,0); + } + + wait 0.05; + } +} + +//Function Number: 40 +func_1EA0(param_00,param_01,param_02) +{ + var_03 = randomfloatrange(-15,15); + var_04 = randomfloatrange(-15,15); + self scaleovertime(0.1,int(2048 * param_01),int(1152 * param_01)); + self.y = 100 + var_04; + self moveovertime(0.08); + self.y = 0 + var_04; + self.x = self.x + var_03; + if(isdefined(param_02)) + { + return; + } + + func_1EA2(); +} + +//Function Number: 41 +screen_effect_on_open_side(param_00,param_01,param_02) +{ + var_03 = 1; + if(param_02) + { + var_03 = -1; + } + + var_04 = randomfloatrange(-15,15); + var_05 = randomfloatrange(-15,15); + self scaleovertime(0.1,int(2048 * param_01),int(1152 * param_01)); + self.x = 1000 * var_03 + var_04; + self moveovertime(0.1); + self.x = 0 + var_04; + self.y = self.y + var_05; + func_1EA2(); +} + +//Function Number: 42 +func_1EA2() +{ + self endon("death"); + var_00 = gettime(); + var_01 = 1; + var_02 = 0.05; + self.alpha = 0; + self fadeovertime(var_02); + self.alpha = 1; + wait var_02; + maps\_utility::wait_for_buffer_time_to_pass(var_00,2); + self fadeovertime(var_01); + self.alpha = 0; + wait var_01; + self destroy(); +} + +//Function Number: 43 +screen_detailed_alpha() +{ + var_00 = 0.2; + self.alpha = 0.7; + self fadeovertime(var_00); + self.alpha = 0; + wait var_00; + self destroy(); +} + +//Function Number: 44 +func_1EA4(param_00) +{ + var_01 = "fullscreen_dirt_" + param_00; + var_02 = undefined; + if(param_00 == "bottom") + { + var_02 = "fullscreen_dirt_bottom_b"; + } + + thread display_screen_effect("dirt",param_00,var_01,var_02,randomfloatrange(0.55,0.66)); +} + +//Function Number: 45 +blood_splat_on_screen(param_00) +{ + var_01 = "fullscreen_bloodsplat_" + param_00; + thread display_screen_effect("bloodsplat",param_00,var_01,undefined,randomfloatrange(0.45,0.56)); +} + +//Function Number: 46 +display_screen_effect(param_00,param_01,param_02,param_03,param_04) +{ + if(!isalive(self)) + { + return; + } + + if(isdefined(self.var_1DDB)) + { + return; + } + + var_05 = gettime(); + if(self.var_1C74.screeneffect[param_00][param_01] == var_05) + { + return; + } + + if(self.var_1C74.screeneffect[param_00 + "_count"][param_01] == 1) + { + return; + } + + self.var_1C74.screeneffect[param_00 + "_count"][param_01]++; + self.var_1C74.screeneffect[param_00][param_01] = var_05; + self endon("death"); + switch(param_01) + { + case "bottom": + var_06 = int(640); + var_07 = int(480); + if(param_00 == "dirt") + { + var_08 = maps\_hud_util::create_client_overlay_custom_size(param_02,1,var_06,var_07); + var_08 thread func_1EA0(param_00,param_04,1); + var_08 screen_detailed_alpha(); + } + else + { + var_08 = maps\_hud_util::create_client_overlay_custom_size(param_03,0,var_07,var_08); + var_08 func_1EA0(param_00,param_04); + } + + if(isdefined(param_03)) + { + var_09 = maps\_hud_util::create_client_overlay_custom_size(param_03,0,var_06,var_07); + var_09 func_1EA0(param_00,param_04); + } + break; + + case "left": + var_08 = maps\_hud_util::create_client_overlay_custom_size(param_02,0,1,1); + var_08 screen_effect_on_open_side(param_00,param_04,1); + break; + + case "right": + var_08 = maps\_hud_util::create_client_overlay_custom_size(param_02,0,1,1); + var_08 screen_effect_on_open_side(param_00,param_04,0); + break; + + default: + break; + } + + self.var_1C74.screeneffect[param_00 + "_count"][param_01]--; +} + +//Function Number: 47 +playerhurtcheck() +{ + var_00 = ::maps\_utility::dirt_on_screen_from_position; + var_01 = ::maps\_utility::bloodsplateffect; + var_02 = []; + self.hurtagain = 0; + for(;;) + { + self waittill(var_00,var_41["MOD_GRENADE"],var_01,var_41["MOD_GRENADE_SPLASH"],var_01,var_41["MOD_PROJECTILE"],var_01,var_41["MOD_PROJECTILE_SPLASH"],var_01,var_41["MOD_EXPLOSIVE"],var_02,var_41["MOD_PISTOL_BULLET"],var_02,var_41["MOD_RIFLE_BULLET"],var_02,var_41["MOD_EXPLOSIVE_BULLET"],"damage",var_03,var_04,var_05,var_06,var_07); + self.hurtagain = 1; + self.damagepoint = var_06; + self.var_1EAC = var_04; + var_08 = undefined; + if(isdefined(self.mods_override)) + { + var_08 = self.mods_override[var_07]; + } + + if(!isdefined(var_08) && isdefined(var_41[var_07])) + { + var_08 = var_41[var_07]; + } + + if(isdefined(var_08)) + { + waittillframeend; + [[ var_08 ]](var_06); + } + } +} + +//Function Number: 48 +player_health_packets() +{ + self.player_health_packets = 3; +} + +//Function Number: 49 +func_1A32() +{ + wait 0.05; + level.strings["take_cover"] = spawnstruct(); + level.strings["take_cover"].text = &"GAME_GET_TO_COVER"; + level.strings["get_back_up"] = spawnstruct(); + level.strings["get_back_up"].text = &"GAME_LAST_STAND_GET_BACK_UP"; +} + +//Function Number: 50 +playerhealthregen() +{ + thread func_1EB6(); + var_00 = 1; + var_01 = 0; + thread player_health_packets(); + var_02 = 0; + var_03 = 0; + thread func_1EB5(self.maxhealth * 0.35); + var_04 = 0; + var_05 = 0; + var_06 = 0; + var_07 = 1; + thread playerhurtcheck(); + self.var_1EB0 = 0; + for(;;) + { + wait 0.05; + waittillframeend; + if(maps\_utility::laststand_enabled()) + { + thread maps\_laststand::player_laststand_proc(); + } + + if(self.health == self.maxhealth) + { + if(maps\_utility::ent_flag("player_has_red_flashing_overlay")) + { + func_1EC7(); + } + + var_07 = 1; + var_03 = 0; + var_02 = 0; + continue; + } + + if(self.health <= 0) + { + return; + } + + var_08 = var_02; + var_09 = self.health / self.maxhealth; + if(var_09 <= self.var_1C74.healthoverlaycutoff && self.player_health_packets > 1) + { + var_02 = 1; + if(!var_08) + { + var_05 = gettime(); + if(maps\_utility::ent_flag("near_death_vision_enabled")) + { + thread func_1EB4(3.6,2); + thread maps\_audio::set_deathsdoor(); + self painvisionon(); + } + + maps\_utility::func_FA4("player_has_red_flashing_overlay"); + var_03 = 1; + } + } + + if(self.hurtagain) + { + var_05 = gettime(); + self.hurtagain = 0; + } + + if(self.health / self.maxhealth >= var_00) + { + if(gettime() - var_05 < self.var_1C74.playerhealth_regularregendelay) + { + continue; + } + + if(var_02) + { + var_06 = var_09; + if(gettime() > var_05 + self.var_1C74.longregentime) + { + var_06 = var_06 + self.var_1C74.regenrate; + } + + if(var_06 >= 1) + { + reducetakecoverwarnings(); + } + } + else + { + var_06 = 1; + } + + if(var_06 > 1) + { + var_06 = 1; + } + + if(var_06 <= 0) + { + return; + } + + self setnormalhealth(var_06); + var_00 = self.health / self.maxhealth; + continue; + } + + var_00 = var_07; + var_0A = self.var_1C74.worthydamageratio; + if(self.attackercount == 1) + { + var_0A = var_0A * 3; + } + + var_0B = var_00 - var_09 >= var_0A; + if(self.health <= 1) + { + self setnormalhealth(2 / self.maxhealth); + var_0B = 1; + } + + var_00 = self.health / self.maxhealth; + self notify("hit_again"); + var_01 = 0; + var_05 = gettime(); + thread func_1EB4(3,0.8); + if(!var_0B) + { + continue; + } + + if(maps\_utility::ent_flag("player_is_invulnerable")) + { + continue; + } + + maps\_utility::func_FA4("player_is_invulnerable"); + level notify("player_becoming_invulnerable"); + if(var_03) + { + var_04 = self.var_1C74.invultime_onshield; + var_03 = 0; + } + else if(var_02) + { + var_04 = self.var_1C74.invultime_postshield; + } + else + { + var_04 = self.var_1C74.invultime_preshield; + } + + var_07 = self.health / self.maxhealth; + thread func_1EB2(var_04); + } +} + +//Function Number: 51 +reducetakecoverwarnings() +{ + if(!take_cover_warnings_enabled()) + { + return; + } + + if(isalive(self)) + { + var_00 = self getlocalplayerprofiledata("takeCoverWarnings"); + if(var_00 > 0) + { + var_00--; + self setlocalplayerprofiledata("takeCoverWarnings",var_00); + } + } +} + +//Function Number: 52 +func_1EB2(param_00) +{ + if(isdefined(self.flashendtime) && self.flashendtime > gettime()) + { + param_00 = param_00 * getcurrentdifficultysetting("flashbangedInvulFactor"); + } + + if(param_00 > 0) + { + if(!isdefined(self.noplayerinvul)) + { + self.attackeraccuracy = 0; + } + + self.ignorerandombulletdamage = 1; + wait param_00; + } + + update_player_attacker_accuracy(); + maps\_utility::ent_flag_clear("player_is_invulnerable"); +} + +//Function Number: 53 +func_1CEF() +{ + if(self.team == "allies") + { + self.var_C8E = 0.6; + } + + if(self isbadguy()) + { + if(level.gameskill >= 2) + { + self.var_C8E = 0.8; + return; + } + + self.var_C8E = 0.6; + } +} + +//Function Number: 54 +grenadeawareness() +{ + if(self.team == "allies") + { + self.grenadeawareness = 0.9; + return; + } + + if(self isbadguy()) + { + if(level.gameskill >= 2) + { + if(randomint(100) < 33) + { + self.grenadeawareness = 0.2; + return; + } + + self.grenadeawareness = 0.5; + return; + } + + if(randomint(100) < 33) + { + self.grenadeawareness = 0; + return; + } + + self.grenadeawareness = 0.2; + return; + } +} + +//Function Number: 55 +func_1EB4(param_00,param_01) +{ + if(maps\_utility::ent_flag("player_no_auto_blur")) + { + return; + } + + self notify("blurview_stop"); + self endon("blurview_stop"); + self setblurforplayer(param_00,0); + wait 0.05; + self setblurforplayer(0,param_01); +} + +//Function Number: 56 +func_1EB5(param_00) +{ + wait 2; + for(;;) + { + wait 0.2; + if(self.health <= 0) + { + return; + } + + var_01 = self.health / self.maxhealth; + if(var_01 > self.var_1C74.healthoverlaycutoff) + { + continue; + } + + if(isdefined(self.disable_breathing_sound) && self.disable_breathing_sound) + { + continue; + } + + self playlocalsound("breathing_hurt"); + wait 0.1 + randomfloat(0.8); + } +} + +//Function Number: 57 +func_1EB6() +{ + self endon("noHealthOverlay"); + var_00 = newclienthudelem(self); + var_00.x = 0; + var_00.y = 0; + if(issplitscreen()) + { + var_00 setshader("splatter_alt_sp",640,960); + if(self == level.players[0]) + { + var_00.y = var_00.y - 120; + } + } + else + { + var_00 setshader("splatter_alt_sp",640,480); + } + + var_00.splatter = 1; + var_00.alignx = "left"; + var_00.aligny = "top"; + var_00.sort = 1; + var_00.foreground = 0; + var_00.horzalign = "fullscreen"; + var_00.vertalign = "fullscreen"; + var_00.alpha = 0; + thread healthoverlay_remove(var_00); + thread func_1EB7(); + var_01 = 0; + var_02 = 0.05; + var_03 = 0.3; + while(isalive(self)) + { + wait var_02; + var_04 = 1 - self.health / self.maxhealth; + var_05 = var_04 * var_04 * 1.2; + var_05 = clamp(var_05,0,1); + if(var_01 > var_05) + { + var_01 = var_01 - var_03 * var_02; + } + + if(var_01 < var_05) + { + var_01 = var_05; + } + + var_00.alpha = var_01; + } +} + +//Function Number: 58 +func_1EB7() +{ + while(isalive(self)) + { + maps\_utility::func_121C("player_has_red_flashing_overlay"); + func_1EC6(); + } +} + +//Function Number: 59 +func_1EB8(param_00) +{ + if(level.console) + { + self.fontscale = 2; + } + else + { + self.fontscale = 1.6; + } + + self.x = 0; + self.y = -36; + self.alignx = "center"; + self.aligny = "bottom"; + self.horzalign = "center"; + self.vertalign = "middle"; + if(!isdefined(self.background)) + { + return; + } + + self.background.x = 0; + self.background.y = -40; + self.background.alignx = "center"; + self.background.aligny = "middle"; + self.background.horzalign = "center"; + self.background.vertalign = "middle"; + if(level.console) + { + self.background setshader("popmenu_bg",650,52); + } + else + { + self.background setshader("popmenu_bg",650,42); + } + + self.background.alpha = 0.5; +} + +//Function Number: 60 +create_warning_elem() +{ + var_00 = newclienthudelem(self); + var_00 func_1EB8(); + thread func_1EBC(var_00); + var_00 thread destroy_warning_elem_when_mission_failed(); + if(maps\_utility::is_player_down(self)) + { + var_00 settext(level.strings["get_back_up"].text); + } + else + { + var_00 settext(level.strings["take_cover"].text); + } + + var_00.fontscale = 2; + var_00.alpha = 1; + var_00.color = (1,0.9,0.9); + var_00.sort = 1; + var_00.foreground = 1; + return var_00; +} + +//Function Number: 61 +func_1EBB() +{ + self endon("hit_again"); + self endon("player_downed"); + self waittill("damage"); +} + +//Function Number: 62 +func_1EBC(param_00) +{ + param_00 endon("being_destroyed"); + func_1EBB(); + var_01 = !isalive(self); + param_00 thread func_1EBE(var_01); +} + +//Function Number: 63 +destroy_warning_elem_when_mission_failed() +{ + self endon("being_destroyed"); + common_scripts\utility::flag_wait("missionfailed"); + thread func_1EBE(1); +} + +//Function Number: 64 +func_1EBE(param_00) +{ + self notify("being_destroyed"); + self.var_1EBF = 1; + if(param_00) + { + self fadeovertime(0.5); + self.alpha = 0; + wait 0.5; + } + + self notify("death"); + self destroy(); +} + +//Function Number: 65 +may_change_cover_warning_alpha(param_00) +{ + if(!isdefined(param_00)) + { + return 0; + } + + if(isdefined(param_00.var_1EBF)) + { + return 0; + } + + return 1; +} + +//Function Number: 66 +fontscaler(param_00,param_01) +{ + self endon("death"); + param_00 = param_00 * 2; + var_02 = param_00 - self.fontscale; + self changefontscaleovertime(param_01); + self.fontscale = self.fontscale + var_02; +} + +//Function Number: 67 +func_1EC2(param_00,param_01,param_02,param_03) +{ + var_04 = 0.8; + var_05 = 0.5; + var_06 = var_04 * 0.1; + var_07 = var_04 * 0.1 + param_01 * 0.2; + var_08 = var_04 * 0.1 + param_01 * 0.1; + var_09 = var_04 * 0.3; + var_0A = var_04 - var_06 - var_07 - var_08 - var_09; + if(var_0A < 0) + { + var_0A = 0; + } + + var_0B = 0.8 + param_01 * 0.1; + var_0C = 0.5 + param_01 * 0.3; + if(may_change_cover_warning_alpha(param_00)) + { + if(!param_03) + { + param_00 fadeovertime(var_06); + param_00.alpha = param_02 * 1; + } + } + + if(isdefined(param_00)) + { + param_00 thread fontscaler(1,var_06); + } + + wait var_06 + var_07; + if(may_change_cover_warning_alpha(param_00)) + { + if(!param_03) + { + param_00 fadeovertime(var_08); + param_00.alpha = param_02 * var_0B; + } + } + + wait var_08; + if(may_change_cover_warning_alpha(param_00)) + { + if(!param_03) + { + param_00 fadeovertime(var_09); + param_00.alpha = param_02 * var_0C; + } + } + + if(isdefined(param_00)) + { + param_00 thread fontscaler(0.9,var_09); + } + + wait var_09; + wait var_0A; +} + +//Function Number: 68 +take_cover_warnings_enabled() +{ + if(isdefined(level.cover_warnings_disabled)) + { + return 0; + } + + if(isdefined(self.vehicle)) + { + return 0; + } + + return 1; +} + +//Function Number: 69 +func_1EC5() +{ + if(!isalive(self)) + { + return 0; + } + + if(self islinked()) + { + return 0; + } + + if(self.ignoreme) + { + return 0; + } + + if(level.var_1291) + { + return 0; + } + + if(!take_cover_warnings_enabled()) + { + return 0; + } + + if(self.gameskill > 1 && !maps\_load::map_is_early_in_the_game()) + { + return 0; + } + + var_00 = self getlocalplayerprofiledata("takeCoverWarnings"); + if(var_00 <= 3) + { + return 0; + } + + return 1; +} + +//Function Number: 70 +func_1EC6() +{ + self endon("hit_again"); + self endon("damage"); + var_00 = undefined; + if(func_1EC5()) + { + var_00 = create_warning_elem(); + } + + var_01 = gettime() + self.var_1C74.longregentime; + func_1EC2(var_00,1,1,0); + while(gettime() < var_01 && isalive(self) && maps\_utility::ent_flag("player_has_red_flashing_overlay")) + { + func_1EC2(var_00,0.9,1,0); + } + + if(isalive(self)) + { + func_1EC2(var_00,0.65,0.8,0); + } + + if(may_change_cover_warning_alpha(var_00)) + { + var_00 fadeovertime(1); + var_00.alpha = 0; + } + + func_1EC2(var_00,0,0.6,1); + wait 0.5; + self notify("take_cover_done"); + self notify("hit_again"); +} + +//Function Number: 71 +func_1EC7() +{ + maps\_utility::ent_flag_clear("player_has_red_flashing_overlay"); + if(maps\_utility::ent_flag("near_death_vision_enabled")) + { + self painvisionoff(); + thread maps\_audio::func_12E2(); + } + + if(!isdefined(self.disable_breathing_sound) || !self.disable_breathing_sound) + { + self playlocalsound("breathing_better"); + } + + self notify("take_cover_done"); +} + +//Function Number: 72 +healthoverlay_remove(param_00) +{ + self waittill("noHealthOverlay"); + param_00 destroy(); +} + +//Function Number: 73 +func_1604() +{ + waittillframeend; + setskill(1); +} + +//Function Number: 74 +init_take_cover_warnings() +{ + var_00 = level.script == "sp_intro" || level.script == "ny_manhattan"; + if(self getlocalplayerprofiledata("takeCoverWarnings") == -1 || var_00) + { + self setlocalplayerprofiledata("takeCoverWarnings",9); + } +} + +//Function Number: 75 +increment_take_cover_warnings_on_death() +{ + self notify("new_cover_on_death_thread"); + self endon("new_cover_on_death_thread"); + self waittill("death"); + if(!maps\_utility::ent_flag("player_has_red_flashing_overlay")) + { + return; + } + + if(!take_cover_warnings_enabled()) + { + return; + } + + var_00 = self getlocalplayerprofiledata("takeCoverWarnings"); + if(var_00 < 10) + { + self setlocalplayerprofiledata("takeCoverWarnings",var_00 + 1); + } +} + +//Function Number: 76 +auto_adjust_difficulty_player_positioner() +{ + var_00 = self.origin; + wait 5; + if(autospot_is_close_to_player(var_00)) + { + level.var_1ECC[level.var_1ECC.size] = var_00; + } +} + +//Function Number: 77 +autospot_is_close_to_player(param_00) +{ + return distancesquared(self.origin,param_00) < 19600; +} + +//Function Number: 78 +auto_adjust_difficulty_player_movement_check() +{ + level.var_1ECC = []; + level.player.movedrecently = 1; + wait 1; + for(;;) + { + level.player thread auto_adjust_difficulty_player_positioner(); + level.player.movedrecently = 1; + var_00 = []; + var_01 = level.var_1ECC.size - 5; + if(var_01 < 0) + { + var_01 = 0; + } + + for(var_02 = var_01;var_02 < level.var_1ECC.size;var_02++) + { + if(!level.player autospot_is_close_to_player(level.var_1ECC[var_02])) + { + continue; + } + + var_00[var_00.size] = level.var_1ECC[var_02]; + level.player.movedrecently = 0; + } + + level.var_1ECC = var_00; + wait 1; + } +} + +//Function Number: 79 +auto_adjust_difficulty_track_player_death() +{ + level.player waittill("death"); + var_00 = getdvarint("autodifficulty_playerDeathTimer"); + var_00 = var_00 - 60; + setdvar("autodifficulty_playerDeathTimer",var_00); +} + +//Function Number: 80 +auto_adjust_difficulty_track_player_shots() +{ + var_00 = gettime(); + for(;;) + { + if(level.player attackbuttonpressed()) + { + var_00 = gettime(); + } + + level.timebetweenshots = gettime() - var_00; + wait 0.05; + } +} + +//Function Number: 81 +hud_debug_add_frac(param_00,param_01) +{ + hud_debug_add_display(param_00,param_01 * 100,1); +} + +//Function Number: 82 +hud_debug_add(param_00,param_01) +{ + hud_debug_add_display(param_00,param_01,0); +} + +//Function Number: 83 +func_1ED5() +{ + level.hudnum = 0; + if(isdefined(level.huddebugnum)) + { + for(var_00 = 0;var_00 < level.huddebugnum.size;var_00++) + { + level.huddebugnum[var_00] destroy(); + } + } + + level.huddebugnum = []; +} + +//Function Number: 84 +hud_debug_add_message(param_00) +{ + if(!isdefined(level.hudmsgshare)) + { + level.hudmsgshare = []; + } + + if(!isdefined(level.hudmsgshare[param_00])) + { + var_01 = newhudelem(); + var_01.x = level.debugleft; + var_01.y = level.var_1EDB + level.hudnum * 15; + var_01.foreground = 1; + var_01.sort = 100; + var_01.alpha = 1; + var_01.alignx = "left"; + var_01.horzalign = "left"; + var_01.fontscale = 1; + var_01 settext(param_00); + level.hudmsgshare[param_00] = 1; + } +} + +//Function Number: 85 +hud_debug_add_display(param_00,param_01,param_02) +{ + hud_debug_add_message(param_00); + param_01 = int(param_01); + var_03 = 0; + if(param_01 < 0) + { + var_03 = 1; + param_01 = param_01 * -1; + } + + var_04 = 0; + var_05 = 0; + var_06 = 0; + var_07 = 0; + while(param_01 >= 10000) + { + param_01 = param_01 - 10000; + } + + while(param_01 >= 1000) + { + param_01 = param_01 - 1000; + var_04++; + } + + while(param_01 >= 100) + { + param_01 = param_01 - 100; + var_05++; + } + + while(param_01 >= 10) + { + param_01 = param_01 - 10; + var_06++; + } + + while(param_01 >= 1) + { + param_01 = param_01 - 1; + var_07++; + } + + var_08 = 0; + var_09 = 10; + if(var_04 > 0) + { + hud_debug_add_num(var_04,var_08); + var_08 = var_08 + var_09; + hud_debug_add_num(var_05,var_08); + var_08 = var_08 + var_09; + hud_debug_add_num(var_06,var_08); + var_08 = var_08 + var_09; + hud_debug_add_num(var_07,var_08); + var_08 = var_08 + var_09; + } + else if(var_05 > 0 || param_02) + { + hud_debug_add_num(var_05,var_08); + var_08 = var_08 + var_09; + hud_debug_add_num(var_06,var_08); + var_08 = var_08 + var_09; + hud_debug_add_num(var_07,var_08); + var_08 = var_08 + var_09; + } + else if(var_06 > 0) + { + hud_debug_add_num(var_06,var_08); + var_08 = var_08 + var_09; + hud_debug_add_num(var_07,var_08); + var_08 = var_08 + var_09; + } + else + { + hud_debug_add_num(var_07,var_08); + var_08 = var_08 + var_09; + } + + if(param_02) + { + var_0A = newhudelem(); + var_0A.x = 204.5; + var_0A.y = level.var_1EDB + level.hudnum * 15; + var_0A.foreground = 1; + var_0A.sort = 100; + var_0A.alpha = 1; + var_0A.alignx = "left"; + var_0A.horzalign = "left"; + var_0A.fontscale = 1; + var_0A settext("."); + level.huddebugnum[level.huddebugnum.size] = var_0A; + } + + if(var_03) + { + var_0B = newhudelem(); + var_0B.x = 195.5; + var_0B.y = level.var_1EDB + level.hudnum * 15; + var_0B.foreground = 1; + var_0B.sort = 100; + var_0B.alpha = 1; + var_0B.alignx = "left"; + var_0B.horzalign = "left"; + var_0B.fontscale = 1; + var_0B settext(" - "); + level.huddebugnum[level.hudnum] = var_0B; + } + + level.hudnum++; +} + +//Function Number: 86 +hud_debug_add_string(param_00,param_01) +{ + hud_debug_add_message(param_00); + hud_debug_add_second_string(param_01,0); + level.hudnum++; +} + +//Function Number: 87 +hud_debug_add_num(param_00,param_01) +{ + var_02 = newhudelem(); + var_02.x = 200 + param_01 * 0.65; + var_02.y = level.var_1EDB + level.hudnum * 15; + var_02.foreground = 1; + var_02.sort = 100; + var_02.alpha = 1; + var_02.alignx = "left"; + var_02.horzalign = "left"; + var_02.fontscale = 1; + var_02 settext(param_00 + ""); + level.huddebugnum[level.huddebugnum.size] = var_02; +} + +//Function Number: 88 +hud_debug_add_second_string(param_00,param_01) +{ + var_02 = newhudelem(); + var_02.x = 200 + param_01 * 0.65; + var_02.y = level.var_1EDB + level.hudnum * 15; + var_02.foreground = 1; + var_02.sort = 100; + var_02.alpha = 1; + var_02.alignx = "left"; + var_02.horzalign = "left"; + var_02.fontscale = 1; + var_02 settext(param_00); + level.huddebugnum[level.huddebugnum.size] = var_02; +} + +//Function Number: 89 +func_1A1C() +{ + level.sp_stat_tracking_func = ::func_1EE6; + setdvar("aa_player_kills","0"); + setdvar("aa_enemy_deaths","0"); + setdvar("aa_enemy_damage_taken","0"); + setdvar("aa_player_damage_taken","0"); + setdvar("aa_player_damage_dealt","0"); + setdvar("aa_ads_damage_dealt","0"); + setdvar("aa_time_tracking","0"); + setdvar("aa_deaths","0"); + setdvar("player_cheated",0); + level.auto_adjust_results = []; + thread func_1EE2(); + thread aa_player_health_tracking(); + thread func_1EE3(); + common_scripts\utility::flag_set("auto_adjust_initialized"); + common_scripts\utility::flag_init("aa_main_" + level.script); + common_scripts\utility::flag_set("aa_main_" + level.script); +} + +//Function Number: 90 +command_used(param_00) +{ + var_01 = getkeybinding(param_00); + if(var_01["count"] <= 0) + { + return 0; + } + + for(var_02 = 1;var_02 < var_01["count"] + 1;var_02++) + { + if(self buttonpressed(var_01["key" + var_02])) + { + return 1; + } + } + + return 0; +} + +//Function Number: 91 +func_1EE2() +{ + waittillframeend; + wait 0.2; +} + +//Function Number: 92 +func_1EE3() +{ + level.player endon("death"); + level.player_ads_time = 0; + for(;;) + { + if(level.player maps\_utility::isads()) + { + level.player_ads_time = gettime(); + while(level.player maps\_utility::isads()) + { + wait 0.05; + } + + continue; + } + + wait 0.05; + } +} + +//Function Number: 93 +aa_player_health_tracking() +{ + for(;;) + { + level.player waittill("damage",var_00,var_01,var_02,var_03,var_04,var_05,var_06); + aa_add_event("aa_player_damage_taken",var_00); + if(!isalive(level.player)) + { + aa_add_event("aa_deaths",1); + return; + } + } +} + +//Function Number: 94 +func_1EE6(param_00) +{ + if(!isdefined(level.var_1EE7)) + { + level.var_1EE7 = []; + } + + common_scripts\utility::flag_wait("auto_adjust_initialized"); + level.auto_adjust_results[param_00] = []; + level.var_1EE7[param_00] = 0; + common_scripts\utility::flag_wait(param_00); + if(getdvar("aa_zone" + param_00) == "") + { + setdvar("aa_zone" + param_00,"on"); + level.var_1EE7[param_00] = 1; + aa_update_flags(); + setdvar("start_time" + param_00,getdvar("aa_time_tracking")); + setdvar("starting_player_kills" + param_00,getdvar("aa_player_kills")); + setdvar("starting_deaths" + param_00,getdvar("aa_deaths")); + setdvar("starting_ads_damage_dealt" + param_00,getdvar("aa_ads_damage_dealt")); + setdvar("starting_player_damage_dealt" + param_00,getdvar("aa_player_damage_dealt")); + setdvar("starting_player_damage_taken" + param_00,getdvar("aa_player_damage_taken")); + setdvar("starting_enemy_damage_taken" + param_00,getdvar("aa_enemy_damage_taken")); + setdvar("starting_enemy_deaths" + param_00,getdvar("aa_enemy_deaths")); + } + else if(getdvar("aa_zone" + param_00) == "done") + { + return; + } + + common_scripts\utility::flag_waitopen(param_00); + auto_adust_zone_complete(param_00); +} + +//Function Number: 95 +auto_adust_zone_complete(param_00) +{ + setdvar("aa_zone" + param_00,"done"); + var_01 = getdvarfloat("start_time" + param_00); + var_02 = getdvarint("starting_player_kills" + param_00); + var_03 = getdvarint("aa_enemy_deaths" + param_00); + var_04 = getdvarint("aa_enemy_damage_taken" + param_00); + var_05 = getdvarint("aa_player_damage_taken" + param_00); + var_06 = getdvarint("aa_player_damage_dealt" + param_00); + var_07 = getdvarint("aa_ads_damage_dealt" + param_00); + var_08 = getdvarint("aa_deaths" + param_00); + level.var_1EE7[param_00] = 0; + aa_update_flags(); + var_09 = getdvarfloat("aa_time_tracking") - var_01; + var_0A = getdvarint("aa_player_kills") - var_02; + var_0B = getdvarint("aa_enemy_deaths") - var_03; + var_0C = 0; + if(var_0B > 0) + { + var_0C = var_0A / var_0B; + var_0C = var_0C * 100; + var_0C = int(var_0C); + } + + var_0D = getdvarint("aa_enemy_damage_taken") - var_04; + var_0E = getdvarint("aa_player_damage_dealt") - var_06; + var_0F = 0; + var_10 = 0; + if(var_0D > 0 && var_09 > 0) + { + var_0F = var_0E / var_0D; + var_0F = var_0F * 100; + var_0F = int(var_0F); + var_10 = var_0E / var_09; + var_10 = var_10 * 60; + var_10 = int(var_10); + } + + var_11 = getdvarint("aa_ads_damage_dealt") - var_07; + var_12 = 0; + if(var_0E > 0) + { + var_12 = var_11 / var_0E; + var_12 = var_12 * 100; + var_12 = int(var_12); + } + + var_13 = getdvarint("aa_player_damage_taken") - var_05; + var_14 = 0; + if(var_09 > 0) + { + var_14 = var_13 / var_09; + } + + var_15 = var_14 * 60; + var_15 = int(var_15); + var_16 = getdvarint("aa_deaths") - var_08; + var_17 = []; + level.auto_adjust_results[var_01] = var_41; + var_18 = "Completed AA sequence: "; + var_18 = var_18 + level.script + "/" + var_01; + var_19 = getarraykeys(var_41); + for(var_1A = 0;var_1A < var_19.size;var_1A++ = var_41["gameskill"]) + { + var_18 = var_18 + ", " + var_19[var_1A] + ": " + var_41[var_19[var_1A]]; + } + + logstring(var_18); +} + +//Function Number: 96 +func_1EE8(param_00,param_01) +{ + logstring(param_00 + ": " + param_01[param_00]); +} + +//Function Number: 97 +aa_update_flags() +{ +} + +//Function Number: 98 +aa_add_event(param_00,param_01) +{ + var_02 = getdvarint(param_00); + setdvar(param_00,var_02 + param_01); +} + +//Function Number: 99 +aa_add_event_float(param_00,param_01) +{ + var_02 = getdvarfloat(param_00); + setdvar(param_00,var_02 + param_01); +} + +//Function Number: 100 +return_false(param_00) +{ + return 0; +} + +//Function Number: 101 +player_attacker(param_00) +{ + if([[ level.var_1E5D ]](param_00)) + { + return 1; + } + + if(isplayer(param_00)) + { + return 1; + } + + if(!isdefined(param_00.car_damage_owner_recorder)) + { + return 0; + } + + return param_00 player_did_most_damage(); +} + +//Function Number: 102 +player_did_most_damage() +{ + return self.player_damage * 1.75 > self.non_player_damage; +} + +//Function Number: 103 +empty_kill_func(param_00,param_01,param_02) +{ +} + +//Function Number: 104 +func_1EF0(param_00,param_01,param_02,param_03) +{ + aa_add_event("aa_enemy_deaths",1); + if(!isdefined(param_01)) + { + return; + } + + if(!player_attacker(param_01)) + { + return; + } + + [[ level.global_kill_func ]](param_02,self.damagelocation,param_03); + aa_add_event("aa_player_kills",1); +} + +//Function Number: 105 +//Function Number: 106 +func_1EF1(param_00,param_01,param_02) +{ + aa_add_event("aa_player_damage_dealt",param_00); + if(!level.player maps\_utility::isads()) + { + [[ level.var_5D2 ]](param_01,self.damagelocation,param_02); + return 0; + } + + if(!bullet_attack(param_01)) + { + [[ level.var_5D2 ]](param_01,self.damagelocation,param_02); + return 0; + } + + [[ level.global_damage_func_ads ]](param_01,self.damagelocation,param_02); + aa_add_event("aa_ads_damage_dealt",param_00); + return 1; +} + +//Function Number: 107 +bullet_attack(param_00) +{ + if(param_00 == "MOD_PISTOL_BULLET") + { + return 1; + } + + return param_00 == "MOD_RIFLE_BULLET"; +} + +//Function Number: 108 +func_1EF3(param_00,param_01,param_02) +{ + if(!isdefined(level.difficultysettings_frac_data_points[param_00])) + { + level.difficultysettings_frac_data_points[param_00] = []; + } + + var_03 = []; + level.difficultysettings_frac_data_points[param_01][level.difficultysettings_frac_data_points[param_01].size] = var_41; +} + +//Function Number: 109 +coop_with_one_player_downed() +{ + return maps\_utility::func_E89() && maps\_utility::func_1608().size == 1; +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_global_fx.gsc b/MW3/Xbox/SP/maps/_global_fx.gsc new file mode 100644 index 0000000..109514e --- /dev/null +++ b/MW3/Xbox/SP/maps/_global_fx.gsc @@ -0,0 +1,119 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_global_fx.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 3 + * Decompile Time: 46 ms + * Timestamp: 10/27/2023 2:34:33 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(!isdefined(level.global_fx)) + { + level.global_fx = []; + } + + level._global_fx_ents = []; + var_00 = randomfloatrange(-20,-15); + global_fx("barrel_fireFX_origin","global_barrel_fire","fire/firelp_barrel_pm",var_00,"fire_barrel_small"); + global_fx("ch_streetlight_02_FX_origin","ch_streetlight_02_FX","misc/lighthaze",var_00); + global_fx("me_streetlight_01_FX_origin","me_streetlight_01_FX","misc/lighthaze_bog_a",var_00); + global_fx("ch_street_light_01_on","lamp_glow_FX","misc/lighthaze",var_00); + global_fx("com_wall_streetlamp_on","com_wall_streetlamp_on_FX","misc/light_glow_white_dim",var_00); + global_fx("lamp_post_globe_on","lamp_glow_FX","misc/light_glow_white",var_00); + global_fx("highway_lamp_post","ch_streetlight_02_FX","misc/lighthaze_villassault",var_00); + global_fx("cs_cargoship_spotlight_on_FX_origin","cs_cargoship_spotlight_on_FX","misc/lighthaze",var_00); + global_fx("me_dumpster_fire_FX_origin","me_dumpster_fire_FX","fire/firelp_med_pm",var_00,"fire_dumpster_medium"); + global_fx("com_tires_burning01_FX_origin","com_tires_burning01_FX","fire/tire_fire_med",var_00); + global_fx("icbm_powerlinetower_FX_origin","icbm_powerlinetower_FX","misc/power_tower_light_red_blink",var_00); + global_fx("icbm_mainframe_FX_origin","icbm_mainframe_FX","props/icbm_mainframe_lightblink",var_00); + global_fx("light_pulse_red_FX_origin","light_pulse_red_FX","misc/light_glow_red_generic_pulse",-2); + global_fx("light_pulse_red_FX_origin","light_pulse_red_FX","misc/light_glow_red_generic_pulse",-2); + global_fx("light_pulse_orange_FX_origin","light_pulse_orange_FX","misc/light_glow_orange_generic_pulse",-2); + global_fx("light_red_blink_FX_origin","light_red_blink","misc/power_tower_light_red_blink",-2); + global_fx("lighthaze_oilrig_FX_origin","lighthaze_oilrig","misc/lighthaze_oilrig",var_00); + global_fx("lighthaze_white_FX_origin","lighthaze_white","misc/lighthaze_white",var_00); + global_fx("light_glow_walllight_white_FX_origin","light_glow_walllight_white","misc/light_glow_walllight_white",var_00); + global_fx("fluorescent_glow_FX_origin","fluorescent_glow","misc/fluorescent_glow",var_00); + global_fx("light_glow_industrial_FX_origin","light_glow_industrial","misc/light_glow_industrial",var_00); + global_fx("light_red_steady_FX_origin","light_red_steady","misc/tower_light_red_steady",-2); + global_fx("light_blue_steady_FX_origin","light_blue_steady","misc/tower_light_blue_steady",-2); + global_fx("light_orange_steady_FX_origin","light_orange_steady","misc/tower_light_orange_steady",-2); + global_fx("glow_stick_pile_FX_origin","glow_stick_pile","misc/glow_stick_glow_pile",-2); + global_fx("highrise_blinky_tower","highrise_blinky_tower_FX","misc/power_tower_light_red_blink_large",var_00,undefined,1.5); + global_fx("flare_ambient_FX_origin","flare_ambient_FX","misc/flare_ambient",var_00,"emt_road_flare_burn",1.5); + global_fx("light_glow_white_bulb_FX_origin","light_glow_white_bulb_FX","misc/light_glow_white_bulb",var_00); + global_fx("light_glow_white_lamp_FX_origin","light_glow_white_lamp_FX","misc/light_glow_white_lamp",var_00); +} + +//Function Number: 2 +global_fx(param_00,param_01,param_02,param_03,param_04,param_05) +{ + level.global_fx[param_00] = param_01; + var_06 = maps\_utility::getstructarray_delete(param_00,"targetname"); + if(!isdefined(var_06)) + { + return; + } + + if(var_06.size <= 0) + { + return; + } + + for(var_07 = 0;var_07 < var_06.size;var_07++) + { + var_08 = var_06[var_07] func_1798(param_01,param_02,param_03,param_04,param_05); + if(!isdefined(var_06[var_07].script_noteworthy)) + { + continue; + } + + var_09 = var_06[var_07].script_noteworthy; + if(!isdefined(level._global_fx_ents[var_09])) + { + level._global_fx_ents[var_09] = []; + } + + level._global_fx_ents[var_09][level._global_fx_ents[var_09].size] = var_08; + } +} + +//Function Number: 3 +func_1798(param_00,param_01,param_02,param_03,param_04) +{ + if(!isdefined(level._effect)) + { + level._effect = []; + } + + if(!isdefined(level._effect[param_00])) + { + level._effect[param_00] = loadfx(param_01); + } + + if(isdefined(param_04)) + { + param_02 = param_02 + randomfloat(param_04); + } + + if(!isdefined(self.angles)) + { + self.angles = (0,0,0); + } + + var_05 = common_scripts\utility::createoneshoteffect(param_00); + var_05.v["origin"] = self.origin; + var_05.v["angles"] = self.angles; + var_05.v["fxid"] = param_00; + var_05.v["delay"] = param_02; + if(isdefined(param_03)) + { + var_05.v["soundalias"] = param_03; + } + + return var_05; +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_heli_ride.gsc b/MW3/Xbox/SP/maps/_heli_ride.gsc new file mode 100644 index 0000000..73bf8f3 --- /dev/null +++ b/MW3/Xbox/SP/maps/_heli_ride.gsc @@ -0,0 +1,167 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_heli_ride.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 5 + * Decompile Time: 73 ms + * Timestamp: 10/27/2023 2:34:21 AM +*******************************************************************/ + +//Function Number: 1 +func_3BA8(param_00,param_01) +{ + maps\_vehicle::func_2594(); + maps\_vehicle_aianim::getout_rigspawn(maps\_vehicle_aianim::getanimatemodel(),3); + if(!isdefined(param_01)) + { + param_01 = level.players; + } + + foreach(var_03 in param_01) + { + thread func_3BA9(var_03,3); + } + + var_05 = 95; + if(isdefined(param_00.speed)) + { + var_05 = param_00.speed; + } + + self setairresistance(30); + self vehicle_setspeed(var_05,40,level.var_2475); + maps\_vehicle::vehicle_paths(param_00); +} + +//Function Number: 2 +func_3BA9(param_00,param_01,param_02) +{ + param_00 thread func_3BAB(self); + if(getdvar("fastrope_arms") == "") + { + setdvar("fastrope_arms","0"); + } + + if(!isdefined(param_02)) + { + param_02 = 0; + } + + var_03 = undefined; + for(var_04 = 0;var_04 < self.riders.size;var_04++) + { + if(self.riders[var_04].var_1DD4 == param_01) + { + var_03 = self.riders[var_04]; + var_03.drone_delete_on_unload = 1; + var_03.playerpiggyback = 1; + break; + } + } + + var_05 = maps\_vehicle_aianim::anim_pos(self,param_01); + var_03 notify("newanim"); + var_03 detachall(); + var_03 setmodel("fastrope_arms"); + var_03 useanimtree(var_05.player_animtree); + thread maps\_vehicle_aianim::func_20CB(var_03,param_01); + wait 0.1; + if(isdefined(level.var_3BAA)) + { + param_00 playerlinkto(var_03,"tag_player",0.35,120,28,30,30,0); + } + else + { + param_00 playerlinkto(var_03,"tag_player",0.35,60,28,30,30,0); + } + + param_00 freezecontrols(0); + var_03 hide(); + var_06 = getanimlength(var_05.var_20FE); + var_06 = var_06 - param_02; + self waittill("unloading"); + if(getdvar("fastrope_arms") != "0") + { + var_03 show(); + } + + param_00 disableweapons(); + wait var_06; + param_00 unlink(); + param_00 enableweapons(); + setsaveddvar("hud_drawhud","1"); + level notify("stop_draw_hud_on_death"); +} + +//Function Number: 3 +func_3BAB(param_00) +{ + setsaveddvar("g_friendlyNameDist",0); + setsaveddvar("g_friendlyfireDist",0); + maps\_utility::hide_player_model(); + self allowsprint(0); + self allowprone(0); + self allowstand(0); + self enableinvulnerability(); + self.ignoreme = 1; + wait 0.05; + self setplayerangles((0,35,0)); + param_00 waittill("unloading"); + self notify("stop_quake"); + wait 6; + maps\_utility::autosave_by_name("on_the_ground"); + self allowprone(0); + self allowstand(1); + self allowcrouch(0); + wait 0.05; + self allowprone(1); + self allowcrouch(1); + self disableinvulnerability(); + self.ignoreme = 0; + self allowsprint(1); + wait 4; + maps\_utility::show_player_model(); + if(self == level.player) + { + for(var_01 = 0;var_01 < 24;var_01++) + { + self setorigin(self.origin + (2,0,0)); + wait 0.05; + } + } + + setsaveddvar("g_friendlyNameDist",15000); + setsaveddvar("g_friendlyfireDist",128); +} + +//Function Number: 4 +player_heli_ropeanimoverride_idle(param_00,param_01,param_02) +{ + self endon("unloading"); + maps\_vehicle_aianim::func_2120(param_00,param_01,param_02); +} + +//Function Number: 5 +func_3BAD(param_00,param_01) +{ + var_02 = "heli_ride_in"; + var_03 = getentarray(var_02,"targetname"); + if(!var_03.size) + { + var_03 = common_scripts\utility::getstructarray("heli_ride_in","targetname"); + if(!var_03.size) + { + } + } + + var_03 = var_03[0]; + if(isdefined(param_01)) + { + maps\_vehicle::func_2677(level.gag_heliride_spawner.var_208D,param_01); + } + + var_04 = maps\_vehicle::vehicle_spawn(level.gag_heliride_spawner); + var_04 thread func_3BA8(var_03,param_00); + return var_04; +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_helicopter_ai.gsc b/MW3/Xbox/SP/maps/_helicopter_ai.gsc new file mode 100644 index 0000000..9597764 --- /dev/null +++ b/MW3/Xbox/SP/maps/_helicopter_ai.gsc @@ -0,0 +1,287 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_helicopter_ai.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 10 + * Decompile Time: 152 ms + * Timestamp: 10/27/2023 2:35:45 AM +*******************************************************************/ + +//Function Number: 1 +func_23C7(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"); + func_23C9(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 = []; + return evasive_createmaneuvers(param_01,var_41[randomint(var_41.size)]); + var_41[3] + "360_counter_clockwise" + var_41[2] + "360_clockwise" + var_41[1] + "strafe_right_left" + var_41[0] + "strafe_left_right" + break; + } + + var_03 = func_23CE(var_02); + return var_03; +} + +//Function Number: 3 +func_23C9(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::func_23CA(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 +func_23CE(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 +func_23D0(param_00) +{ + param_00 endon("death"); + level.var_23D1 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.var_23D1.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.var_23D1.origin,var_0C,0,1,0,var_04); + thread common_scripts\utility::draw_line_for_time(level.var_23D1.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.var_23D1.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.var_23D1.angles)); + var_04 = anglestoright(common_scripts\utility::flat_angle(level.var_23D1.angles)); + var_05 = level.var_23D1.origin + var_03 * param_00 + var_04 * param_01 + (0,0,param_02); + return var_05; +} + +//Function Number: 10 +getplayerhelispeed() +{ + return level.var_23D1 vehicle_getspeed(); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_helicopter_globals.gsc b/MW3/Xbox/SP/maps/_helicopter_globals.gsc new file mode 100644 index 0000000..99dd90d --- /dev/null +++ b/MW3/Xbox/SP/maps/_helicopter_globals.gsc @@ -0,0 +1,785 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_helicopter_globals.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 15 + * Decompile Time: 252 ms + * Timestamp: 10/27/2023 2:35:46 AM +*******************************************************************/ + +//Function Number: 1 +func_23D4() +{ + if(!isdefined(self.vehicletype)) + { + return; + } + + var_00 = 0; + if(self.vehicletype == "hind" || self.vehicletype == "ny_harbor_hind") + { + var_00 = 1; + } + + if(self.vehicletype == "cobra" || self.vehicletype == "cobra_player") + { + thread attachmissiles("chopperpilot_hellfire","cobra_Sidewinder"); + if(isdefined(self.fullmodel)) + { + self.fullmodel thread attachmissiles("chopperpilot_hellfire","cobra_Sidewinder"); + } + + var_00 = 1; + } + + if(!var_00) + { + return; + } + + level thread func_23D8(self); + level thread maps\_helicopter_ai::func_23C7(self); + if(getdvar("cobrapilot_wingman_enabled") == "1") + { + if(isdefined(self.script_wingman)) + { + level.wingman = self; + level thread maps\_helicopter_ai::func_23D0(self); + } + } +} + +//Function Number: 2 +func_23D8(param_00) +{ + param_00 endon("death"); + notifyoncommand("flare_button","+frag"); + notifyoncommand("flare_button","+usereload"); + notifyoncommand("flare_button","+activate"); + while(param_00.health > 0) + { + if(isdefined(param_00.playercontrolled)) + { + param_00.var_23DA waittill("flare_button"); + } + else + { + param_00 waittill("incomming_missile",var_01); + if(!isdefined(var_01)) + { + continue; + } + + if(randomint(3) == 0) + { + continue; + } + + wait randomfloatrange(0.5,1); + } + + thread flares_fire(param_00); + wait 3; + } +} + +//Function Number: 3 +func_23DB(param_00,param_01,param_02,param_03) +{ + var_04 = 1; + for(var_05 = 0;var_05 < param_01;var_05++) + { + playfx(level.var_23DC[param_00.vehicletype],param_00 gettagorigin("tag_flare")); + if(isdefined(param_00.playercontrolled)) + { + level.stats["flares_used"]++; + param_00 notify("dropping_flares"); + if(var_04) + { + param_00 playsound("cobra_flare_fire"); + } + + var_04 = !var_04; + } + + if(var_05 <= param_02 - 1) + { + thread func_23E2(param_00,param_03); + } + + wait 0.1; + } +} + +//Function Number: 4 +flares_fire(param_00) +{ + param_00 endon("death"); + var_01 = 5; + if(isdefined(param_00.var_23DE)) + { + var_01 = param_00.var_23DE; + } + + func_23DB(param_00,8,1,var_01); +} + +//Function Number: 5 +func_23DF() +{ + if(isdefined(self.var_23E0)) + { + missile_deleteattractor(self.var_23E0); + } + + self.var_23E0 = missile_createattractorent(self.centeraimpoint,10000,10000); +} + +//Function Number: 6 +func_23E2(param_00,param_01) +{ + param_00 notify("flares_out"); + param_00 endon("death"); + param_00 endon("flares_out"); + if(!isdefined(param_01)) + { + param_01 = 5; + } + + var_02 = flares_get_vehicle_velocity(param_00); + var_03 = spawn("script_origin",param_00 gettagorigin("tag_flare")); + var_03 movegravity(var_02,param_01); + var_04 = undefined; + if(isdefined(param_00.playercontrolled)) + { + if(isdefined(param_00.var_23E0)) + { + missile_deleteattractor(param_00.var_23E0); + } + + var_04 = missile_createattractorent(var_03,10000,10000); + } + + if(isdefined(param_00.var_23E3)) + { + for(var_05 = 0;var_05 < param_00.var_23E3.size;var_05++) + { + param_00.var_23E3[var_05] missile_settargetent(var_03); + } + } + + wait param_01; + if(isdefined(param_00.playercontrolled)) + { + if(isdefined(var_04)) + { + missile_deleteattractor(var_04); + } + + param_00 thread func_23DF(); + } + + if(!isdefined(param_00.script_targetoffset_z)) + { + param_00.script_targetoffset_z = 0; + } + + var_06 = (0,0,param_00.script_targetoffset_z); + if(!isdefined(param_00.var_23E3)) + { + return; + } + + for(var_05 = 0;var_05 < param_00.var_23E3.size;var_05++) + { + param_00.var_23E3[var_05] missile_settargetent(param_00,var_06); + } +} + +//Function Number: 7 +flares_get_vehicle_velocity(param_00) +{ + var_01 = param_00.origin; + wait 0.05; + var_02 = param_00.origin - var_01; + return var_02 * 20; +} + +//Function Number: 8 +missile_deathwait(param_00,param_01) +{ + param_01 endon("death"); + param_00 waittill("death"); + if(!isdefined(param_01.var_23E3)) + { + return; + } + + param_01.var_23E3 = common_scripts\utility::array_remove(param_01.var_23E3,param_00); +} + +//Function Number: 9 +getenemytarget(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + if(!isdefined(param_02)) + { + param_02 = 0; + } + + if(!isdefined(param_03)) + { + param_03 = 0; + } + + if(!isdefined(param_04)) + { + param_04 = 1; + } + + if(!isdefined(param_05)) + { + param_05 = 0; + } + + var_07 = []; + var_08 = undefined; + var_09 = common_scripts\utility::get_enemy_team(self.script_team); + var_0A = []; + if(param_04) + { + for(var_0B = 0;var_0B < level.vehicles[var_09].size;var_0B++) + { + var_0A[var_0A.size] = level.vehicles[var_09][var_0B]; + } + } + + if(param_02) + { + var_0C = getaiarray(var_09); + for(var_0B = 0;var_0B < var_0C.size;var_0B++) + { + if(isdefined(var_0C[var_0B].ignored_by_attack_heli)) + { + continue; + } + + var_0A[var_0A.size] = var_0C[var_0B]; + } + + if(var_09 == "allies") + { + for(var_0B = 0;var_0B < level.players.size;var_0B++) + { + var_0A[var_0A.size] = level.players[var_0B]; + } + } + } + + if(isdefined(param_06)) + { + var_0A = maps\_utility::array_exclude(var_0A,param_06); + } + + if(param_05) + { + var_0A = maps\_utility::array_randomize(var_0A); + } + + var_0D = anglestoforward(self.angles); + for(var_0B = 0;var_0B < var_0A.size;var_0B++) + { + if(issentient(var_0A[var_0B]) && issentient(self) && self getthreatbiasgroup() != "") + { + var_0E = getthreatbias(var_0A[var_0B] getthreatbiasgroup(),self getthreatbiasgroup()); + if(var_0E <= -1000000) + { + continue; + } + } + + if(isdefined(param_00) && param_00 > 0) + { + if(distance(self.origin,var_0A[var_0B].origin) > param_00) + { + continue; + } + } + + if(isdefined(param_01)) + { + var_0F = vectornormalize(var_0A[var_0B].origin - self.origin); + var_10 = vectordot(var_0D,var_0F); + if(var_10 <= param_01) + { + continue; + } + } + + if(param_03) + { + var_11 = 0; + if(isai(var_0A[var_0B])) + { + var_12 = 48; + } + else + { + var_12 = 150; + } + + var_11 = sighttracepassed(self.origin,var_0A[var_0B].origin + (0,0,var_12),0,self); + if(!var_11) + { + continue; + } + } + + var_07[var_07.size] = var_0A[var_0B]; + } + + self notify("gunner_new_target"); + if(var_07.size == 0) + { + return var_08; + } + + if(var_07.size == 1) + { + return var_07[0]; + } + + var_13 = maps\_utility::getclosest(self.origin,var_07); + return var_13; +} + +//Function Number: 10 +shootenemytarget_bullets(param_00) +{ + self endon("death"); + self endon("mg_off"); + param_00 endon("death"); + self endon("gunner_new_target"); + if(isdefined(self.playercontrolled)) + { + self endon("gunner_stop_firing"); + } + + var_01 = (0,0,0); + if(isdefined(param_00.script_targetoffset_z)) + { + var_01 = var_01 + (0,0,param_00.script_targetoffset_z); + } + else if(issentient(param_00)) + { + var_01 = (0,0,32); + } + + self setturrettargetent(param_00,var_01); + while(self.health > 0) + { + var_02 = randomintrange(1,25); + if(getdvar("cobrapilot_debug") == "1") + { + iprintln("randomShots = " + var_02); + } + + for(var_03 = 0;var_03 < var_02;var_03++) + { + if(isdefined(self.playercontrolled)) + { + if(isdefined(level.cobraweapon) && level.cobraweapon.size > 0) + { + self setvehweapon(level.gunnerweapon); + } + } + + thread shootenemytarget_bullets_debugline(self,"tag_turret",param_00,var_01,(1,1,0),0.05); + self fireweapon("tag_flash"); + if(isdefined(self.playercontrolled)) + { + self setvehweapon(level.cobraweapon[self.var_23DA.currentweapon].v["weapon"]); + } + + wait 0.05; + } + + wait randomfloatrange(0.25,2.5); + } +} + +//Function Number: 11 +shootenemytarget_bullets_debugline(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if(getdvar("cobrapilot_debug") != "1") + { + return; + } + + if(!isdefined(param_04)) + { + param_04 = (0,0,0); + } + + param_02 endon("death"); + self endon("gunner_new_target"); + if(!isdefined(param_03)) + { + param_03 = (0,0,0); + } + + if(isdefined(param_05)) + { + param_05 = gettime() + param_05 * 1000; + while(gettime() < param_05) + { + wait 0.05; + } + + return; + } + + wait 0.05; +} + +//Function Number: 12 +attachmissiles(param_00,param_01,param_02,param_03) +{ + self.hasattachedweapons = 1; + var_04 = []; + if(isdefined(param_02)) + { + } + + if(isdefined(param_03)) + { + } + + if(isdefined(var_04)) + { + } + + for(var_05 = 0;var_05 < var_41.size;var_05++ = var_04) + { + for(var_06 = 0;var_06 < level.var_23F0[var_41[var_05]].size;var_06++ = var_41[3]) + { + self attach(level.cobra_missile_models[var_41[var_05]],level.var_23F0[var_41[var_05]][var_06]); + } + } +} + +//Function Number: 13 +func_23F2(param_00,param_01,param_02,param_03,param_04) +{ + if(!isdefined(param_01)) + { + param_01 = 1; + } + + var_05 = undefined; + var_06 = undefined; + var_07 = "cobra_20mm"; + var_08 = []; + switch(param_00) + { + case "f15_missile": + var_05 = "cobra_Sidewinder"; + break; + var_41[1] + "ri_side_wing_jnt" + var_41[0] + "le_side_wing_jnt" + break; + + case "mi28_seeker": + var_06 = "cobra_seeker"; + break; + var_41[3] + "tag_store_R_2_a" + var_41[2] + "tag_store_L_2_a" + var_41[1] + "tag_store_R_1_a" + var_41[0] + "tag_store_L_1_a" + break; + + case "ffar": + var_06 = "cobra_FFAR"; + break; + var_41[0] + "tag_store_r_2" + break; + + case "seeker": + var_06 = "cobra_seeker"; + break; + var_41[0] + "tag_store_r_2" + break; + + case "ffar_bog_a_lite": + var_06 = "cobra_FFAR_bog_a_lite"; + break; + var_41[0] + "tag_store_r_2" + break; + + case "ffar_airlift": + var_06 = "cobra_FFAR_airlift"; + break; + var_41[1] + "tag_store_R_wing" + var_41[0] + "tag_store_L_wing" + break; + + case "ffar_airlift_nofx": + var_06 = "cobra_FFAR_airlift_nofx"; + break; + var_41[1] + "tag_store_R_wing" + var_41[0] + "tag_store_L_wing" + break; + + case "cobra_zippy": + var_06 = "zippy_rockets"; + break; + var_41[1] + "tag_store_R_wing" + var_41[0] + "tag_store_L_wing" + break; + + case "apache_zippy": + var_06 = "zippy_rockets_apache"; + break; + var_41[1] + "tag_flash_3" + var_41[0] + "tag_flash_2" + break; + + case "apache_zippy_nd": + var_06 = "zippy_rockets_apache_nodamage"; + break; + var_41[1] + "tag_flash_3" + var_41[0] + "tag_flash_2" + break; + + case "mi28_zippy": + var_06 = "zippy_rockets_apache"; + break; + var_41[1] + "tag_store_R_wing" + var_41[0] + "tag_store_L_wing" + break; + + case "mi28_zippy_cheap": + var_06 = "zippy_rockets_apache_cheap"; + break; + var_41[1] + "tag_store_R_wing" + var_41[0] + "tag_store_L_wing" + break; + + case "cobra_turret": + var_06 = "hind_turret_penetration"; + break; + var_41[1] + "tag_store_R_wing" + var_41[0] + "tag_store_L_wing" + break; + + case "ffar_hind": + var_08 = "hind_turret"; + var_06 = "hind_FFAR"; + break; + var_41[1] + "tag_missile_right" + var_41[0] + "tag_missile_left" + break; + + case "hind_zippy": + var_08 = "hind_turret"; + var_06 = "zippy_rockets"; + break; + var_41[1] + "tag_missile_right" + var_41[0] + "tag_missile_left" + break; + + case "hind_rpg": + var_08 = "hind_turret"; + var_06 = "rpg"; + break; + var_41[1] + "tag_missile_right" + var_41[0] + "tag_missile_left" + break; + + case "hind_rpg_cheap": + var_08 = "hind_turret"; + var_06 = "rpg_cheap"; + break; + var_41[1] + "tag_missile_right" + var_41[0] + "tag_missile_left" + break; + + case "ffar_hind_nodamage": + var_08 = "hind_turret"; + var_06 = "hind_FFAR_nodamage"; + break; + var_41[1] + "tag_missile_right" + var_41[0] + "tag_missile_left" + break; + + case "ffar_mi28_village_assault": + var_08 = "hind_turret"; + var_06 = "mi28_ffar_village_assault"; + break; + var_41[7] + "tag_store_R_2_d" + var_41[6] + "tag_store_L_2_d" + var_41[5] + "tag_store_R_2_c" + var_41[4] + "tag_store_L_2_c" + var_41[3] + "tag_store_R_2_b" + var_41[2] + "tag_store_L_2_b" + var_41[1] + "tag_store_R_2_a" + var_41[0] + "tag_store_L_2_a" + break; + + case "ffar_co_rescue": + var_06 = "cobra_FFAR_bog_a_lite"; + break; + var_41[1] + "tag_store_L_2_a" + var_41[0] + "tag_store_R_2_a" + break; + + default: + break; + } + + var_07 = weaponfiretime(var_06); + if(isdefined(self.var_23F3)) + { + var_09 = self.var_23F3; + } + else + { + var_09 = -1; + } + + for(var_0A = 0;var_0A < param_02;var_0A++) + { + var_09++; + var_09 = var_09 % var_41.size; + if(param_01 == "ffar_mi28_village_assault") + { + if(isdefined(param_03) && isdefined(param_03.origin)) + { + magicbullet(var_06,self gettagorigin(var_41[var_09]),param_03.origin); + if(isdefined(level._effect["ffar_mi28_muzzleflash"])) + { + playfxontag(common_scripts\utility::func_539("ffar_mi28_muzzleflash"),self,var_41[var_09]); + } + + thread delayed_earthquake(0.1,0.5,0.2,param_03.origin,1600); + } + } + else + { + self setvehweapon(var_06); + if(isdefined(param_03)) + { + var_0B = self fireweapon(var_41[var_09],param_03); + maps\_audio::func_121F("missile_fired",var_0B); + switch(param_01) + { + case "ffar_airlift": + case "ffar_bog_a_lite": + case "ffar": + var_0B thread func_23F5(0.1); + break; + + case "apache_zippy_wall": + case "mi28_zippy_cheap": + case "mi28_zippy": + case "apache_zippy_nd": + case "apache_zippy": + if(!isdefined(var_05)) + { + var_0B thread func_23F5(0.6); + } + else + { + var_0B thread func_23F5(var_05); + } + break; + + default: + break; + } + } + else + { + var_0B = self fireweapon(var_09[var_0A]); + } + + self notify("missile_fired",var_0B); + } + + self.var_23F3 = var_09; + if(var_0A < param_02 - 1) + { + wait var_07; + } + + if(isdefined(param_04)) + { + wait param_04; + } + } + + self setvehweapon(var_08); +} + +//Function Number: 14 +delayed_earthquake(param_00,param_01,param_02,param_03,param_04) +{ + wait param_00; + earthquake(param_01,param_02,param_03,param_04); +} + +//Function Number: 15 +func_23F5(param_00) +{ + self endon("death"); + wait param_00; + if(isdefined(self)) + { + self missile_cleartarget(); + } +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_hiding_door.gsc b/MW3/Xbox/SP/maps/_hiding_door.gsc new file mode 100644 index 0000000..fdc5230 --- /dev/null +++ b/MW3/Xbox/SP/maps/_hiding_door.gsc @@ -0,0 +1,466 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_hiding_door.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 13 + * Decompile Time: 239 ms + * Timestamp: 10/27/2023 2:35:38 AM +*******************************************************************/ + +//Function Number: 1 +hiding_door_spawner() +{ + var_00 = getentarray("hiding_door_guy_org","targetname"); + var_01 = maps\_utility::getclosest(self.origin,var_00); + var_01.targetname = undefined; + var_02 = getentarray(var_01.target,"targetname"); + var_03 = undefined; + var_04 = undefined; + var_05 = undefined; + if(isdefined(var_01.script_linkto)) + { + var_05 = var_01 common_scripts\utility::get_linked_ent(); + } + + if(var_02.size == 1) + { + var_03 = var_02[0]; + } + else + { + foreach(var_07 in var_02) + { + if(var_07.code_classname == "script_brushmodel") + { + var_04 = var_07; + continue; + } + + if(var_07.code_classname == "script_model") + { + var_03 = var_07; + } + } + } + + var_09 = getent(var_03.target,"targetname"); + var_0A = undefined; + if(isdefined(var_09.target)) + { + var_0A = getent(var_09.target,"targetname"); + } + + if(isdefined(var_0A)) + { + var_01 thread hiding_door_guy_pushplayer(var_0A); + if(!isdefined(level._hiding_door_pushplayer_clips)) + { + level._hiding_door_pushplayer_clips = []; + } + + level._hiding_door_pushplayer_clips[level._hiding_door_pushplayer_clips.size] = var_0A; + } + + var_03 delete(); + var_0B = maps\_utility::func_E4F("hiding_door"); + var_01 thread maps\_anim::anim_first_frame_solo(var_0B,"fire_3"); + if(isdefined(var_04)) + { + var_04 linkto(var_0B,"door_hinge_jnt"); + var_0B hide(); + } + + if(isdefined(var_09)) + { + var_09 linkto(var_0B,"door_hinge_jnt"); + var_09 disconnectpaths(); + } + + var_0C = undefined; + if(isdefined(self.target)) + { + var_0C = getent(self.target,"targetname"); + if(!issubstr(var_0C.classname,"trigger")) + { + var_0C = undefined; + } + } + + if(!isdefined(self.script_flag_wait) && !isdefined(var_0C)) + { + var_0D = 200; + if(isdefined(self.radius)) + { + var_0D = self.radius; + } + + var_0C = spawn("trigger_radius",var_01.origin,0,var_0D,48); + } + + if(isdefined(var_05)) + { + badplace_brush(var_05 getentitynumber(),0,var_05,"allies"); + } + + maps\_utility::add_spawn_function(::hiding_door_guy,var_01,var_0C,var_0B,var_09,var_05); +} + +//Function Number: 2 +hiding_door_guy(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = hiding_door_starts_open(param_00); + self.animname = "hiding_door_guy"; + self endon("death"); + self endon("damage"); + self.grenadeammo = 2; + maps\_utility::set_deathanim("death_2"); + self.allowdeath = 1; + self.health = -15536; + var_06 = []; + thread func_0E5A(param_01,self,param_03,param_04,var_05); + thread hiding_door_death(param_03,param_01,self,param_04,var_05); + if(var_06) + { + param_01 thread maps\_anim::func_DC1(var_41,"idle"); + } + else + { + param_01 thread maps\_anim::anim_first_frame(var_41,"fire_3"); + } + + if(isdefined(param_02)) + { + wait 0.05; + param_02 waittill(param_02,var_41[var_06.size],self,var_41[var_41.size],"trigger"); + } + else + { + common_scripts\utility::flag_wait(self.script_flag_wait); + } + + if(var_06) + { + param_01 notify("stop_loop"); + param_01 maps\_anim::anim_single(var_41,"close"); + } + + var_07 = 0; + var_08 = 0; + for(;;) + { + var_09 = level.player; + if(isdefined(self.enemy)) + { + var_09 = self.enemy; + } + + var_0A = func_0E59(param_03.angles,self.origin,var_09.origin); + if(player_entered_backdoor(var_0A)) + { + if(quit_door_behavior()) + { + return; + } + } + + if(var_07 >= 2) + { + if(quit_door_behavior(1)) + { + return; + } + } + + var_0B = undefined; + if(var_0A == "left" || var_0A == "front") + { + var_0B = "fire_3"; + } + else if(var_0A == "right") + { + var_0B = "fire_1"; + if(common_scripts\utility::cointoss()) + { + var_0B = "fire_2"; + } + } + else + { + param_01 maps\_anim::anim_single(var_41,"open"); + param_01 maps\_anim::anim_single(var_41,"close"); + var_07++; + continue; + } + + if(hiding_door_guy_should_charge(var_0A,var_09,var_08)) + { + var_0B = "jump"; + if(common_scripts\utility::cointoss()) + { + if(self maymovetopoint(animscripts/utility::getanimendpos(level.scr_anim[self.animname]["kick"]))) + { + var_0B = "kick"; + } + } + + thread hiding_door_death_door_connections(param_04,var_05); + param_01 notify("push_player"); + self notify("charge"); + self.allowdeath = 1; + self.health = 100; + maps\_utility::clear_deathanim(); + param_01 maps\_anim::anim_single(var_41,var_0B); + quit_door_behavior(); + return; + } + + if(hiding_door_guy_should_throw_grenade(var_0A,var_08)) + { + self.grenadeammo--; + var_0B = "grenade"; + } + + var_07 = 0; + var_08++; + param_01 thread maps\_anim::anim_single(var_41,var_0B); + maps\_utility::func_614(0.05,::maps\_anim::anim_set_time,var_41,var_0B,0.3); + param_01 waittill(var_0B); + param_01 thread maps\_anim::anim_first_frame(var_41,"open"); + wait randomfloatrange(0.2,1); + param_01 notify("stop_loop"); + } +} + +//Function Number: 3 +quit_door_behavior(param_00,param_01) +{ + if(!isdefined(param_00)) + { + param_00 = 0; + } + + if(param_00) + { + if(!sighttracepassed(level.player geteye(),self geteye(),0,self)) + { + return 0; + } + } + + self.health = 100; + maps\_utility::clear_deathanim(); + self.goalradius = 512; + self setgoalpos(self.origin); + self notify("quit_door_behavior"); + self stopanimscripted(); + self notify("killanimscript"); + return 1; +} + +//Function Number: 4 +player_entered_backdoor(param_00) +{ + if(param_00 != "behind") + { + return 0; + } + + var_01 = distance(self.origin,level.player.origin); + if(var_01 > 250) + { + return 0; + } + + if(!sighttracepassed(level.player geteye(),self geteye(),0,self)) + { + return 0; + } + + return 1; +} + +//Function Number: 5 +hiding_door_guy_should_charge(param_00,param_01,param_02) +{ + var_03 = 3; + var_04 = 100; + var_05 = 600; + if(param_02 < var_03) + { + return 0; + } + + if(param_01 != level.player) + { + return 0; + } + + if(param_00 != "front") + { + return 0; + } + + var_06 = distance(self.origin,level.player.origin); + if(var_06 < var_04) + { + return 0; + } + + if(var_06 > var_05) + { + return 0; + } + + return common_scripts\utility::cointoss(); +} + +//Function Number: 6 +hiding_door_guy_should_throw_grenade(param_00,param_01) +{ + if(param_01 < 1) + { + return 0; + } + + if(param_00 == "behind") + { + return 0; + } + + if(randomint(100) < 25 * self.grenadeammo) + { + return 1; + } + + return 0; +} + +//Function Number: 7 +func_0E59(param_00,param_01,param_02) +{ + var_03 = anglestoforward(param_00); + var_04 = vectornormalize(var_03); + var_05 = vectortoangles(var_04); + var_06 = vectortoangles(param_02 - param_01); + var_07 = var_05[1] - var_06[1]; + var_07 = var_07 + 360; + var_07 = int(var_07) % 360; + var_08 = undefined; + if(var_07 >= 90 && var_07 <= 270) + { + var_08 = "behind"; + } + else if(var_07 >= 300 || var_07 <= 45) + { + var_08 = "front"; + } + else if(var_07 < 90) + { + var_08 = "right"; + } + else if(var_07 > 270) + { + var_08 = "left"; + } + + return var_08; +} + +//Function Number: 8 +func_0E5A(param_00,param_01,param_02,param_03,param_04) +{ + param_01 endon("charge"); + param_01 common_scripts\utility::waittill_either("death","quit_door_behavior"); + param_00 notify("stop_loop"); + thread hiding_door_death_door_connections(param_03,param_04); + param_00 notify("push_player"); + if(!isdefined(param_02.var_E5B)) + { + param_02.var_E5B = 1; + param_00 thread maps\_anim::func_E0E(param_02,"death_2"); + } +} + +//Function Number: 9 +hiding_door_guy_pushplayer(param_00) +{ + self waittill("push_player"); + param_00 moveto(self.origin,1.5); + wait 1.5; + param_00 delete(); +} + +//Function Number: 10 +func_0E5D(param_00) +{ + var_01 = param_00 gettagorigin("J_Wrist_RI"); + var_02 = distance(level.player.origin,param_00.origin) * 2; + if(var_02 < 300) + { + var_02 = 300; + } + + if(var_02 > 1000) + { + var_02 = 1000; + } + + var_03 = vectornormalize(level.player.origin - param_00.origin); + var_04 = var_03 * var_02; + param_00 magicgrenademanual(var_01,var_04,randomfloatrange(3,5)); +} + +//Function Number: 11 +hiding_door_death(param_00,param_01,param_02,param_03,param_04) +{ + param_02 endon("charge"); + param_02 endon("quit_door_behavior"); + param_02 waittill("damage",var_05,var_06); + if(!isalive(param_02)) + { + return; + } + + thread hiding_door_death_door_connections(param_03,param_04); + param_01 notify("push_player"); + param_01 thread maps\_anim::func_E0E(param_02,"death_2"); + if(!isdefined(param_00.var_E5B)) + { + param_00.var_E5B = 1; + param_01 thread maps\_anim::func_E0E(param_00,"death_2"); + } + + wait 0.5; + if(isalive(param_02)) + { + if(isdefined(var_06)) + { + param_02 kill((0,0,0),var_06); + return; + } + + param_02 kill((0,0,0)); + } +} + +//Function Number: 12 +hiding_door_death_door_connections(param_00,param_01) +{ + wait 2; + if(isdefined(param_00)) + { + param_00 disconnectpaths(); + } + + if(isdefined(param_01)) + { + badplace_delete(param_01 getentitynumber()); + } +} + +//Function Number: 13 +hiding_door_starts_open(param_00) +{ + return isdefined(param_00.script_noteworthy) && param_00.script_noteworthy == "starts_open"; +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_hiding_door_anims.gsc b/MW3/Xbox/SP/maps/_hiding_door_anims.gsc new file mode 100644 index 0000000..a288dd2 --- /dev/null +++ b/MW3/Xbox/SP/maps/_hiding_door_anims.gsc @@ -0,0 +1,58 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_hiding_door_anims.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 3 + * Decompile Time: 47 ms + * Timestamp: 10/27/2023 2:34:22 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + level.scr_animtree["iding_door"] = #animtree; + level.var_1B2E["hiding_door"] = "com_door_01_handleleft"; + level.scr_anim["hiding_door"]["close"] = %doorpeek_close_door; + level.scr_anim["hiding_door"]["death_1"] = %doorpeek_deatha_door; + level.scr_anim["hiding_door"]["death_2"] = %doorpeek_deathb_door; + level.scr_anim["hiding_door"]["fire_1"] = %doorpeek_firea_door; + level.scr_anim["hiding_door"]["fire_2"] = %doorpeek_fireb_door; + level.scr_anim["hiding_door"]["fire_3"] = %doorpeek_firec_door; + level.scr_anim["hiding_door"]["peek"] = %doorpeek_idle_door; + level.scr_anim["hiding_door"]["grenade"] = %doorpeek_grenade_door; + level.scr_anim["hiding_door"]["idle"][0] = %doorpeek_idle_door; + level.scr_anim["hiding_door"]["jump"] = %doorpeek_jump_door; + level.scr_anim["hiding_door"]["kick"] = %doorpeek_kick_door; + level.scr_anim["hiding_door"]["open"] = %doorpeek_open_door; + precachemodel(level.var_1B2E["hiding_door"]); + maps\_anim::addnotetrack_sound("hiding_door","sound door death","any","scn_doorpeek_door_open_death"); + maps\_anim::addnotetrack_sound("hiding_door","sound door open","any","scn_doorpeek_door_open"); + maps\_anim::addnotetrack_sound("hiding_door","sound door slam","any","scn_doorpeek_door_slam"); + func_3BAE(); + thread notetracks(); +} + +//Function Number: 2 +func_3BAE() +{ + level.scr_anim["hiding_door_guy"]["close"] = %doorpeek_close; + level.scr_anim["hiding_door_guy"]["death_1"] = %doorpeek_deatha; + level.scr_anim["hiding_door_guy"]["death_2"] = %doorpeek_deathb; + level.scr_anim["hiding_door_guy"]["fire_1"] = %doorpeek_firea; + level.scr_anim["hiding_door_guy"]["fire_2"] = %doorpeek_fireb; + level.scr_anim["hiding_door_guy"]["fire_3"] = %doorpeek_firec; + level.scr_anim["hiding_door_guy"]["peek"] = %doorpeek_idle; + level.scr_anim["hiding_door_guy"]["grenade"] = %doorpeek_grenade; + level.scr_anim["hiding_door_guy"]["idle"][0] = %doorpeek_idle; + level.scr_anim["hiding_door_guy"]["jump"] = %doorpeek_jump; + level.scr_anim["hiding_door_guy"]["kick"] = %doorpeek_kick; + level.scr_anim["hiding_door_guy"]["open"] = %doorpeek_open; +} + +//Function Number: 3 +notetracks() +{ + wait 0.05; + maps\_anim::addnotetrack_customfunction("hiding_door_guy","grenade_throw",::maps\_hiding_door::func_E5D); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_hud_util.gsc b/MW3/Xbox/SP/maps/_hud_util.gsc new file mode 100644 index 0000000..c4f4821 --- /dev/null +++ b/MW3/Xbox/SP/maps/_hud_util.gsc @@ -0,0 +1,884 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_hud_util.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 36 + * Decompile Time: 655 ms + * Timestamp: 10/27/2023 2:32:31 AM +*******************************************************************/ + +//Function Number: 1 +setparent(param_00) +{ + if(isdefined(self.parent) && self.parent == param_00) + { + return; + } + + if(isdefined(self.parent)) + { + self.parent removechild(self); + } + + self.parent = param_00; + self.parent addchild(self); + if(isdefined(self.point)) + { + setpoint(self.point,self.relativepoint,self.xoffset,self.yoffset); + return; + } + + setpoint("TOPLEFT"); +} + +//Function Number: 2 +getparent() +{ + return self.parent; +} + +//Function Number: 3 +addchild(param_00) +{ + param_00.index = self.children.size; + self.children[self.children.size] = param_00; +} + +//Function Number: 4 +removechild(param_00) +{ + param_00.parent = undefined; + if(self.children[self.children.size - 1] != param_00) + { + self.children[param_00.index] = self.children[self.children.size - 1]; + self.children[param_00.index].index = param_00.index; + } + + self.children[self.children.size - 1] = undefined; + param_00.index = undefined; +} + +//Function Number: 5 +setpoint(param_00,param_01,param_02,param_03,param_04) +{ + if(!isdefined(param_04)) + { + param_04 = 0; + } + + var_05 = getparent(); + if(param_04) + { + self moveovertime(param_04); + } + + if(!isdefined(param_02)) + { + param_02 = 0; + } + + self.xoffset = param_02; + if(!isdefined(param_03)) + { + param_03 = 0; + } + + self.yoffset = param_03; + self.point = param_00; + self.alignx = "center"; + self.aligny = "middle"; + if(issubstr(param_00,"TOP")) + { + self.aligny = "top"; + } + + if(issubstr(param_00,"BOTTOM")) + { + self.aligny = "bottom"; + } + + if(issubstr(param_00,"LEFT")) + { + self.alignx = "left"; + } + + if(issubstr(param_00,"RIGHT")) + { + self.alignx = "right"; + } + + if(!isdefined(param_01)) + { + param_01 = param_00; + } + + self.relativepoint = param_01; + var_06 = "center"; + var_07 = "middle"; + if(issubstr(param_01,"TOP")) + { + var_07 = "top"; + } + + if(issubstr(param_01,"BOTTOM")) + { + var_07 = "bottom"; + } + + if(issubstr(param_01,"LEFT")) + { + var_06 = "left"; + } + + if(issubstr(param_01,"RIGHT")) + { + var_06 = "right"; + } + + if(var_05 == level.uiparent) + { + self.horzalign = var_06; + self.vertalign = var_07; + } + else + { + self.horzalign = var_05.horzalign; + self.vertalign = var_05.vertalign; + } + + if(var_06 == var_05.alignx) + { + var_08 = 0; + var_09 = 0; + } + else if(var_08 == "center" || var_07.alignx == "center") + { + var_08 = int(var_07.width / 2); + if(var_07 == "left" || var_06.alignx == "right") + { + var_09 = -1; + } + else + { + var_09 = 1; + } + } + else + { + var_08 = var_07.width; + if(var_07 == "left") + { + var_09 = -1; + } + else + { + var_09 = 1; + } + } + + self.x = var_05.x + var_08 * var_09; + if(var_07 == var_05.aligny) + { + var_0A = 0; + var_0B = 0; + } + else if(var_09 == "middle" || var_07.aligny == "middle") + { + var_0A = int(var_07.height / 2); + if(var_08 == "top" || var_06.aligny == "bottom") + { + var_0B = -1; + } + else + { + var_0B = 1; + } + } + else + { + var_0A = var_07.height; + if(var_08 == "top") + { + var_0B = -1; + } + else + { + var_0B = 1; + } + } + + self.y = var_05.y + var_0A * var_0B; + self.x = self.x + self.xoffset; + self.y = self.y + self.yoffset; + switch(self.elemtype) + { + case "bar": + setpointbar(param_00,param_01,param_02,param_03); + break; + } + + updatechildren(); +} + +//Function Number: 6 +setpointbar(param_00,param_01,param_02,param_03) +{ + self.bar.horzalign = self.horzalign; + self.bar.vertalign = self.vertalign; + self.bar.alignx = "left"; + self.bar.aligny = self.aligny; + self.bar.y = self.y; + if(self.alignx == "left") + { + self.bar.x = self.x + self.padding; + } + else if(self.alignx == "right") + { + self.bar.x = self.x - self.width - self.padding; + } + else + { + self.bar.x = self.x - int(self.width - self.padding / 2); + } + + updatebar(self.bar.frac); +} + +//Function Number: 7 +updatebar(param_00) +{ + var_01 = int(self.width - self.padding * 2 * param_00); + if(!var_01) + { + var_01 = 1; + } + + self.bar.frac = param_00; + self.bar setshader(self.bar.shader,var_01,self.height - self.padding * 2); +} + +//Function Number: 8 +hidebar(param_00) +{ + param_00 = common_scripts\utility::ter_op(isdefined(param_00),param_00,1); + if(param_00 || !isdefined(self.orig_alpha) || !isdefined(self.bar.orig_alpha)) + { + self.orig_alpha = self.alpha; + self.bar.orig_alpha = self.bar.alpha; + } + + self.alpha = common_scripts\utility::ter_op(param_00,0,self.orig_alpha); + self.bar.alpha = common_scripts\utility::ter_op(param_00,0,self.bar.orig_alpha); +} + +//Function Number: 9 +createfontstring(param_00,param_01) +{ + var_02 = newhudelem(); + var_02.elemtype = "font"; + var_02.font = param_00; + var_02.fontscale = param_01; + var_02.x = 0; + var_02.y = 0; + var_02.width = 0; + var_02.height = int(level.fontheight * param_01); + var_02.xoffset = 0; + var_02.yoffset = 0; + var_02.children = []; + var_02 setparent(level.uiparent); + return var_02; +} + +//Function Number: 10 +createclientfontstring(param_00,param_01) +{ + var_02 = newclienthudelem(self); + var_02.elemtype = "font"; + var_02.font = param_00; + var_02.fontscale = param_01; + var_02.x = 0; + var_02.y = 0; + var_02.width = 0; + var_02.height = int(level.fontheight * param_01); + var_02.xoffset = 0; + var_02.yoffset = 0; + var_02.children = []; + var_02 setparent(level.uiparent); + return var_02; +} + +//Function Number: 11 +createclienttimer(param_00,param_01) +{ + var_02 = newclienthudelem(self); + var_02.elemtype = "timer"; + var_02.font = param_00; + var_02.fontscale = param_01; + var_02.x = 0; + var_02.y = 0; + var_02.width = 0; + var_02.height = int(level.fontheight * param_01); + var_02.xoffset = 0; + var_02.yoffset = 0; + var_02.children = []; + var_02 setparent(level.uiparent); + return var_02; +} + +//Function Number: 12 +createserverfontstring(param_00,param_01) +{ + var_02 = newhudelem(); + var_02.elemtype = "font"; + var_02.font = param_00; + var_02.fontscale = param_01; + var_02.x = 0; + var_02.y = 0; + var_02.width = 0; + var_02.height = int(level.fontheight * param_01); + var_02.xoffset = 0; + var_02.yoffset = 0; + var_02.children = []; + var_02 setparent(level.uiparent); + return var_02; +} + +//Function Number: 13 +createservertimer(param_00,param_01) +{ + var_02 = newhudelem(); + var_02.elemtype = "timer"; + var_02.font = param_00; + var_02.fontscale = param_01; + var_02.x = 0; + var_02.y = 0; + var_02.width = 0; + var_02.height = int(level.fontheight * param_01); + var_02.xoffset = 0; + var_02.yoffset = 0; + var_02.children = []; + var_02 setparent(level.uiparent); + return var_02; +} + +//Function Number: 14 +createicon(param_00,param_01,param_02) +{ + var_03 = newhudelem(); + return createicon_hudelem(var_03,param_00,param_01,param_02); +} + +//Function Number: 15 +createclienticon(param_00,param_01,param_02) +{ + var_03 = newclienthudelem(self); + return createicon_hudelem(var_03,param_00,param_01,param_02); +} + +//Function Number: 16 +createicon_hudelem(param_00,param_01,param_02,param_03) +{ + param_00.elemtype = "icon"; + param_00.x = 0; + param_00.y = 0; + param_00.width = param_02; + param_00.height = param_03; + param_00.xoffset = 0; + param_00.yoffset = 0; + param_00.children = []; + param_00 setparent(level.uiparent); + if(isdefined(param_01)) + { + param_00 setshader(param_01,param_02,param_03); + } + + return param_00; +} + +//Function Number: 17 +createbar(param_00,param_01,param_02,param_03,param_04) +{ + if(!isdefined(param_00)) + { + param_00 = "white"; + } + + if(!isdefined(param_01)) + { + param_01 = "black"; + } + + if(!isdefined(param_02)) + { + param_02 = 100; + } + + if(!isdefined(param_03)) + { + param_03 = 9; + } + + var_05 = newhudelem(); + var_05.x = 2; + var_05.y = 2; + var_05.frac = 0.25; + var_05.shader = param_00; + var_05.sort = -1; + var_05 setshader(param_00,param_02 - 2,param_03 - 2); + if(isdefined(param_04)) + { + var_05.flashfrac = param_04; + var_05 thread flashthread(); + } + + var_06 = newhudelem(); + var_06.elemtype = "bar"; + var_06.x = 0; + var_06.y = 0; + var_06.width = param_02; + var_06.height = param_03; + var_06.xoffset = 0; + var_06.yoffset = 0; + var_06.bar = var_05; + var_06.children = []; + var_06.padding = 2; + var_06.sort = -2; + var_06.alpha = 0.5; + var_06 setparent(level.uiparent); + var_06 setshader(param_01,param_02,param_03); + return var_06; +} + +//Function Number: 18 +createclientprogressbar(param_00,param_01,param_02,param_03,param_04,param_05) +{ + param_00 = common_scripts\utility::ter_op(isdefined(param_00),param_00,level.player); + param_01 = common_scripts\utility::ter_op(isdefined(param_01),param_01,90); + param_02 = common_scripts\utility::ter_op(isdefined(param_02),param_02,"white"); + param_03 = common_scripts\utility::ter_op(isdefined(param_03),param_03,"black"); + param_04 = common_scripts\utility::ter_op(isdefined(param_04),param_04,100); + param_05 = common_scripts\utility::ter_op(isdefined(param_05),param_05,9); + var_06 = param_00 createclientbar(param_02,param_03,param_04,param_05); + var_06 setpoint("CENTER",undefined,0,param_01); + return var_06; +} + +//Function Number: 19 +createclientbar(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = newclienthudelem(self); + var_05.x = 2; + var_05.y = 2; + var_05.frac = 0.25; + var_05.shader = param_00; + var_05.sort = -1; + var_05 setshader(param_00,param_02 - 2,param_03 - 2); + if(isdefined(param_04)) + { + var_05.flashfrac = param_04; + var_05 thread flashthread(); + } + + var_06 = newclienthudelem(self); + var_06.elemtype = "bar"; + var_06.x = 0; + var_06.y = 0; + var_06.width = param_02; + var_06.height = param_03; + var_06.xoffset = 0; + var_06.yoffset = 0; + var_06.bar = var_05; + var_06.children = []; + var_06.padding = 2; + var_06.sort = -2; + var_06.alpha = 0.5; + var_06 setparent(level.uiparent); + var_06 setshader(param_01,param_02,param_03); + return var_06; +} + +//Function Number: 20 +setflashfrac(param_00) +{ + self.bar.flashfrac = param_00; +} + +//Function Number: 21 +fade_over_time(param_00,param_01) +{ + if(isdefined(param_01) && param_01 > 0) + { + self fadeovertime(param_01); + } + + self.alpha = param_00; + if(isdefined(param_01) && param_01 > 0) + { + wait param_01; + } +} + +//Function Number: 22 +flashthread() +{ + self endon("death"); + self.alpha = 1; + for(;;) + { + if(self.frac >= self.flashfrac) + { + self fadeovertime(0.3); + self.alpha = 0.2; + wait 0.35; + self fadeovertime(0.3); + self.alpha = 1; + wait 0.7; + continue; + } + + self.alpha = 1; + wait 0.05; + } +} + +//Function Number: 23 +destroyelem() +{ + var_00 = []; + for(var_01 = 0;var_01 < self.children.size;var_01++) + { + var_00[var_01] = self.children[var_01]; + } + + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + var_00[var_01] setparent(getparent()); + } + + if(self.elemtype == "bar") + { + self.bar destroy(); + } + + self destroy(); +} + +//Function Number: 24 +seticonshader(param_00) +{ + self setshader(param_00,self.width,self.height); +} + +//Function Number: 25 +func_05B2(param_00) +{ + self.width = param_00; +} + +//Function Number: 26 +setheight(param_00) +{ + self.height = param_00; +} + +//Function Number: 27 +setsize(param_00,param_01) +{ + self.width = param_00; + self.height = param_01; +} + +//Function Number: 28 +updatechildren() +{ + for(var_00 = 0;var_00 < self.children.size;var_00++) + { + var_01 = self.children[var_00]; + var_01 setpoint(var_01.point,var_01.relativepoint,var_01.xoffset,var_01.yoffset); + } +} + +//Function Number: 29 +stance_carry_icon_enable(param_00) +{ + if(isdefined(param_00) && param_00 == 0) + { + stance_carry_icon_disable(); + return; + } + + if(isdefined(level.stance_carry)) + { + level.stance_carry destroy(); + } + + setsaveddvar("hud_showStance","0"); + level.stance_carry = newhudelem(); + level.stance_carry.x = -75; + if(level.console) + { + level.stance_carry.y = -20; + } + else + { + level.stance_carry.y = -10; + } + + level.stance_carry setshader("stance_carry",64,64); + level.stance_carry.alignx = "right"; + level.stance_carry.aligny = "bottom"; + level.stance_carry.horzalign = "right"; + level.stance_carry.vertalign = "bottom"; + level.stance_carry.foreground = 1; + level.stance_carry.alpha = 0; + level.stance_carry fadeovertime(0.5); + level.stance_carry.alpha = 1; +} + +//Function Number: 30 +stance_carry_icon_disable() +{ + if(isdefined(level.stance_carry)) + { + level.stance_carry fadeovertime(0.5); + level.stance_carry.alpha = 0; + level.stance_carry destroy(); + } + + setsaveddvar("hud_showStance","1"); +} + +//Function Number: 31 +create_mantle() +{ + if(level.console) + { + var_00 = createfontstring("default",1.8); + var_00 setpoint("CENTER",undefined,-23,115); + var_00 settext(level.strings["mantle"]); + var_01 = createicon("hint_mantle",40,40); + var_01 setpoint("CENTER",undefined,73,0); + var_01 setparent(var_00); + } + else + { + var_00 = createfontstring("default",1.6); + var_01 setpoint("CENTER",undefined,0,115); + var_01 settext(level.strings["mantle"]); + var_01 = createicon("hint_mantle",40,40); + var_01 setpoint("CENTER",undefined,0,30); + var_01 setparent(var_00); + } + + var_01.alpha = 0; + var_00.alpha = 0; + level.hud_mantle = []; + level.hud_mantle["text"] = var_00; + level.hud_mantle["icon"] = var_01; +} + +//Function Number: 32 +get_countdown_hud(param_00,param_01,param_02,param_03) +{ + if(!isdefined(param_03)) + { + param_03 = 0; + } + + var_04 = undefined; + if(!level.console) + { + var_04 = -250; + } + else if(!isdefined(param_00)) + { + var_04 = -225; + } + else + { + var_04 = param_00; + } + + if(param_03) + { + var_04 = param_00; + } + + if(!isdefined(param_01)) + { + var_05 = 100; + } + else + { + var_05 = param_02; + } + + if(isdefined(param_02)) + { + var_06 = newclienthudelem(param_02); + } + else + { + var_06 = newhudelem(); + } + + var_06.alignx = "left"; + var_06.aligny = "middle"; + var_06.horzalign = "right"; + var_06.vertalign = "top"; + var_06.x = var_04; + var_06.y = var_05; + var_06.fontscale = 1.6; + var_06.color = (0.8,1,0.8); + var_06.font = "objective"; + var_06.glowcolor = (0.3,0.6,0.3); + var_06.glowalpha = 1; + var_06.foreground = 1; + var_06.hidewheninmenu = 1; + var_06.hidewhendead = 1; + return var_06; +} + +//Function Number: 33 +get_download_state_hud(param_00,param_01,param_02,param_03) +{ + if(!isdefined(param_03)) + { + param_03 = 0; + } + + var_04 = undefined; + if(!level.console) + { + var_04 = -250; + } + else if(!isdefined(param_00)) + { + var_04 = -170; + } + else + { + var_04 = param_00; + } + + if(param_03) + { + var_04 = param_00; + } + + if(!isdefined(param_01)) + { + var_05 = 100; + } + else + { + var_05 = param_02; + } + + if(isdefined(param_02)) + { + var_06 = newclienthudelem(param_02); + } + else + { + var_06 = newhudelem(); + } + + var_06.alignx = "right"; + var_06.aligny = "middle"; + var_06.horzalign = "right"; + var_06.vertalign = "top"; + var_06.x = var_04; + var_06.y = var_05; + var_06.fontscale = 1.6; + var_06.color = (0.8,1,0.8); + var_06.font = "objective"; + var_06.glowcolor = (0.3,0.6,0.3); + var_06.glowalpha = 1; + var_06.foreground = 1; + var_06.hidewheninmenu = 1; + var_06.hidewhendead = 1; + return var_06; +} + +//Function Number: 34 +func_05BF(param_00,param_01,param_02) +{ + if(isdefined(param_02)) + { + var_03 = newclienthudelem(param_02); + } + else + { + var_03 = newhudelem(); + } + + var_03.x = 0; + var_03.y = 0; + var_03 setshader(param_00,640,480); + var_03.alignx = "left"; + var_03.aligny = "top"; + var_03.sort = 1; + var_03.horzalign = "fullscreen"; + var_03.vertalign = "fullscreen"; + var_03.alpha = param_01; + var_03.foreground = 1; + return var_03; +} + +//Function Number: 35 +create_client_overlay_custom_size(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = maps\_utility::get_player_from_self(); + var_06 = newclienthudelem(var_05); + if(!isdefined(param_04)) + { + param_04 = 1; + } + + if(!isdefined(param_02)) + { + param_02 = 0; + } + + if(!isdefined(param_03)) + { + param_03 = 0; + } + + var_06.x = param_02; + var_06.y = param_03; + var_06 setshader(param_00,int(640 * param_04),int(480 * param_04)); + var_06.alignx = "center"; + var_06.aligny = "middle"; + var_06.sort = 1; + var_06.horzalign = "center"; + var_06.vertalign = "middle"; + var_06.alpha = param_01; + var_06.foreground = 1; + return var_06; +} + +//Function Number: 36 +create_client_overlay_fullscreen(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = maps\_utility::get_player_from_self(); + var_06 = newclienthudelem(var_05); + if(!isdefined(param_04)) + { + param_04 = 1; + } + + var_06.x = param_02; + var_06.y = param_03; + var_06 setshader(param_00,int(640 * param_04),int(480 * param_04)); + var_06.alignx = "center"; + var_06.aligny = "middle"; + var_06.sort = 1; + var_06.horzalign = "fullscreen"; + var_06.vertalign = "fullscreen"; + var_06.alpha = param_01; + var_06.foreground = 1; + return var_06; +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_hud_weapons.gsc b/MW3/Xbox/SP/maps/_hud_weapons.gsc new file mode 100644 index 0000000..85a035e --- /dev/null +++ b/MW3/Xbox/SP/maps/_hud_weapons.gsc @@ -0,0 +1,342 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_hud_weapons.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 11 + * Decompile Time: 195 ms + * Timestamp: 10/27/2023 2:34:23 AM +*******************************************************************/ + +//Function Number: 1 +registerweaponinfo(param_00,param_01,param_02,param_03) +{ + level.weaponinfo[param_00]["type"] = param_02; + level.weaponinfo[param_00]["clip"] = param_03; + level.weaponinfo[param_00]["string"] = param_01; + precachestring(param_01); +} + +//Function Number: 2 +func_3BB0(param_00) +{ + if(!isdefined(level.weaponinfo[param_00])) + { + return 0; + } + + return 1; +} + +//Function Number: 3 +func_3BB1(param_00) +{ + return level.weaponinfo[param_00]["type"]; +} + +//Function Number: 4 +func_3BB2(param_00) +{ + return level.weaponinfo[param_00]["clip"]; +} + +//Function Number: 5 +getweaponinfostring(param_00) +{ + return level.weaponinfo[param_00]["string"]; +} + +//Function Number: 6 +init() +{ + precacheshader("hud_bullets_rifle"); + precacheshader("hud_bullets_pistol"); + precacheshader("hud_bullets_sniper"); + precacheshader("hud_bullets_spread"); + precacheshader("hud_bullets_support_front"); + precacheshader("hud_bullets_support_back"); + level.bulletalphas = []; + level.bulletalphas[level.bulletalphas.size] = 1; + level.bulletalphas[level.bulletalphas.size] = 0.996; + level.bulletalphas[level.bulletalphas.size] = 0.949; + level.bulletalphas[level.bulletalphas.size] = 0.909; + level.bulletalphas[level.bulletalphas.size] = 0.87; + level.bulletalphas[level.bulletalphas.size] = 0.835; + level.bulletalphas[level.bulletalphas.size] = 0.803; + level.bulletalphas[level.bulletalphas.size] = 0.776; + level.bulletalphas[level.bulletalphas.size] = 0.749; + level.bulletalphas[level.bulletalphas.size] = 0.721; + level.bulletalphas[level.bulletalphas.size] = 0.698; + level.bulletalphas[level.bulletalphas.size] = 0.674; + level.bulletalphas[level.bulletalphas.size] = 0.654; + level.bulletalphas[level.bulletalphas.size] = 0.635; + level.bulletalphas[level.bulletalphas.size] = 0.615; + level.bulletalphas[level.bulletalphas.size] = 0.596; + level.bulletalphas[level.bulletalphas.size] = 0.58; + level.bulletalphas[level.bulletalphas.size] = 0.564; + level.bulletalphas[level.bulletalphas.size] = 0.549; + level.bulletalphas[level.bulletalphas.size] = 0.537; + level.bulletalphas[level.bulletalphas.size] = 0.521; + level.bulletalphas[level.bulletalphas.size] = 0.509; + level.bulletalphas[level.bulletalphas.size] = 0.498; + level.weaponinfo = []; + registerweaponinfo("ak47",&"WEAPON_AK47_FULLAUTO","rifle",30); + registerweaponinfo("ak47_semi",&"WEAPON_AK47_SEMIAUTO","rifle",30); + registerweaponinfo("ak47_grenadier",&"WEAPON_AK47","rifle",30); + registerweaponinfo("ak74u",&"WEAPON_AK74U_FULLAUTO","rifle",30); + registerweaponinfo("ak74u_semi",&"WEAPON_AK74U_SEMIAUTO","rifle",30); + registerweaponinfo("beretta",&"WEAPON_BERETTA","pistol",15); + registerweaponinfo("g36c",&"WEAPON_G36C","rifle",30); + registerweaponinfo("m14_scoped",&"WEAPON_M14","sniper",10); + registerweaponinfo("m16_basic",&"WEAPON_M16A4_FULLAUTO","rifle",30); + registerweaponinfo("m16_basic_semi",&"WEAPON_M16A4_SEMIAUTO","rifle",30); + registerweaponinfo("m16_grenadier",&"WEAPON_M16","rifle",30); + registerweaponinfo("m203",&"WEAPON_M203","grenade",1); + registerweaponinfo("rpg",&"WEAPON_RPG","grenade",5); + registerweaponinfo("saw",&"WEAPON_SAW","support",100); + registerweaponinfo("m4_grunt",&"WEAPON_M4_FULLAUTO","rifle",30); + registerweaponinfo("m4_grunt_semi",&"WEAPON_M4_SEMIAUTO","rifle",30); + registerweaponinfo("m4_grenadier",&"WEAPON_M4","rifle",30); + registerweaponinfo("m40a3",&"WEAPON_M40A3","sniper",10); + registerweaponinfo("mp5",&"WEAPON_MP5","smg",30); + registerweaponinfo("mp5_silencer",&"WEAPON_MP5SD","smg",30); + registerweaponinfo("usp",&"WEAPON_USP","pistol",10); + registerweaponinfo("at4",&"WEAPON_AT4","rocketlauncher",1); + registerweaponinfo("dragunov",&"WEAPON_DRAGUNOV","sniper",10); + registerweaponinfo("g3",&"WEAPON_G3","rifle",30); + registerweaponinfo("winchester1200",&"WEAPON_WINCHESTER1200","shotgun",4); + registerweaponinfo("uzi",&"WEAPON_UZI","smg",32); + level.player func_3BB5(); +} + +//Function Number: 7 +func_3BB5() +{ + if(!isdefined(self.var_3BB6)) + { + self.var_3BB6 = []; + } + + if(!isdefined(self.var_3BB6[0])) + { + self.var_3BB6[0] = maps\_hud_util::createicon(undefined,24,96); + self.var_3BB6[0] maps\_hud_util::setpoint("BOTTOMRIGHT","BOTTOMRIGHT",-6,-47); + self.var_3BB6[0].sort = 10; + } + + if(!isdefined(self.var_3BB6[1])) + { + self.var_3BB6[1] = maps\_hud_util::createicon(undefined,24,96); + self.var_3BB6[1] maps\_hud_util::setpoint("BOTTOMRIGHT","BOTTOMRIGHT",-6,-47); + self.var_3BB6[1].color = (0.7,0.7,0.7); + self.var_3BB6[1].sort = 9; + } + + if(!isdefined(self.var_3BB6[2])) + { + self.var_3BB6[2] = maps\_hud_util::createicon(undefined,24,96); + self.var_3BB6[2] maps\_hud_util::setpoint("BOTTOMRIGHT","BOTTOMRIGHT",-6,-47); + self.var_3BB6[2].sort = 10; + } + + if(!isdefined(self.var_3BB6[3])) + { + self.var_3BB6[3] = maps\_hud_util::createicon(undefined,24,96); + self.var_3BB6[3] maps\_hud_util::setpoint("BOTTOMRIGHT","BOTTOMRIGHT",-6,-47); + self.var_3BB6[3].color = (0.7,0.7,0.7); + self.var_3BB6[3].sort = 9; + } + + if(!isdefined(self.var_3BB6[4])) + { + self.var_3BB6[4] = maps\_hud_util::createicon(undefined,24,96); + self.var_3BB6[4] maps\_hud_util::setpoint("BOTTOMRIGHT","BOTTOMRIGHT",-6,-47); + self.var_3BB6[4].sort = 10; + } + + thread func_3BB7(); +} + +//Function Number: 8 +func_3BB7() +{ + self endon("death"); + var_00 = -1; + var_01 = ""; + var_02 = ""; + for(;;) + { + var_03 = self getcurrentweapon(); + if(func_3BB0(var_03)) + { + var_04 = func_3BB1(var_03); + var_05 = self getweaponammoclip(self getcurrentweapon()); + if(var_03 != var_01 && var_04 != var_02) + { + func_3BB8(var_04); + var_01 = var_03; + var_02 = var_04; + var_00 = -1; + } + + if(var_05 != var_00) + { + updatehudweaponammo(var_03,var_05); + var_00 = var_05; + } + } + + wait 0.05; + } +} + +//Function Number: 9 +func_3BB8(param_00) +{ + self.pers["weaponType"] = param_00; + if(!isdefined(self.var_3BB6)) + { + return; + } + + for(var_01 = 0;var_01 < self.var_3BB6.size;var_01++) + { + self.var_3BB6[var_01].alpha = 0; + } + + switch(param_00) + { + case "pistol": + self.var_3BB6[0] maps\_hud_util::setpoint("BOTTOMRIGHT","BOTTOMRIGHT",-6,-47); + self.var_3BB6[0] maps\_hud_util::seticonshader("hud_bullets_pistol"); + self.var_3BB6[0].alpha = 1; + break; + + case "smg": + self.var_3BB6[0] maps\_hud_util::setpoint("BOTTOMRIGHT","BOTTOMRIGHT",-6,-47); + self.var_3BB6[0] maps\_hud_util::seticonshader("hud_bullets_rifle"); + self.var_3BB6[1] maps\_hud_util::seticonshader("hud_bullets_rifle"); + self.var_3BB6[1] maps\_hud_util::setpoint("BOTTOMRIGHT","BOTTOMRIGHT",-4,-50); + self.var_3BB6[0].alpha = 1; + self.var_3BB6[1].alpha = 1; + break; + + case "rifle": + self.var_3BB6[0] maps\_hud_util::setpoint("BOTTOMRIGHT","BOTTOMRIGHT",-6,-47); + self.var_3BB6[0] maps\_hud_util::seticonshader("hud_bullets_rifle"); + self.var_3BB6[1] maps\_hud_util::seticonshader("hud_bullets_rifle"); + self.var_3BB6[1] maps\_hud_util::setpoint("BOTTOMRIGHT","BOTTOMRIGHT",-4,-50); + self.var_3BB6[0].alpha = 1; + self.var_3BB6[1].alpha = 1; + break; + + case "sniper": + self.var_3BB6[0] maps\_hud_util::setpoint("BOTTOMRIGHT","BOTTOMRIGHT",-6,-47); + self.var_3BB6[0] maps\_hud_util::seticonshader("hud_bullets_sniper"); + self.var_3BB6[0].alpha = 1; + break; + + case "spread": + self.var_3BB6[0] maps\_hud_util::setpoint("BOTTOMRIGHT","BOTTOMRIGHT",-6,-47); + self.var_3BB6[0] maps\_hud_util::seticonshader("hud_bullets_spread"); + self.var_3BB6[0].alpha = 1; + break; + + case "support": + var_02 = 0; + for(var_01 = 0;var_01 < 5;var_01++) + { + self.var_3BB6[var_01] maps\_hud_util::setpoint("BOTTOMRIGHT","BOTTOMRIGHT",-6 + var_02,-70); + self.var_3BB6[var_01].alpha = 1; + if(var_01 % 2) + { + self.var_3BB6[var_01] maps\_hud_util::seticonshader("hud_bullets_support_back"); + } + else + { + self.var_3BB6[var_01] maps\_hud_util::seticonshader("hud_bullets_support_front"); + } + + var_02 = var_02 - 14; + } + break; + } +} + +//Function Number: 10 +gethudweapontype() +{ + return self.pers["weaponType"]; +} + +//Function Number: 11 +updatehudweaponammo(param_00,param_01) +{ + if(!isdefined(self.var_3BB6)) + { + return; + } + + switch(gethudweapontype()) + { + case "pistol": + var_02 = 15 - func_3BB2(param_00); + var_03 = func_3BB2(param_00) - param_01; + self.var_3BB6[0].alpha = level.bulletalphas[var_02 + var_03]; + break; + + case "rifle": + var_03 = func_3BB2(param_00) - param_01; + var_04 = int(var_03 / 2); + var_04 = var_04 + var_03 % 2; + var_05 = int(var_03 / 2); + self.var_3BB6[0].alpha = level.bulletalphas[var_04]; + self.var_3BB6[1].alpha = level.bulletalphas[var_05]; + break; + + case "smg": + var_03 = func_3BB2(param_00) - param_01; + var_04 = int(var_03 / 2); + var_04 = var_04 + var_03 % 2; + var_05 = int(var_03 / 2); + self.var_3BB6[0].alpha = level.bulletalphas[var_04]; + self.var_3BB6[1].alpha = level.bulletalphas[var_05]; + break; + + case "sniper": + var_02 = 15 - func_3BB2(param_00); + var_03 = func_3BB2(param_00) - param_01; + self.var_3BB6[0].alpha = level.bulletalphas[var_02 + var_03]; + break; + + case "spread": + var_02 = 15 - func_3BB2(param_00); + var_03 = func_3BB2(param_00) - param_01; + self.var_3BB6[0].alpha = level.bulletalphas[var_02 + var_03]; + break; + + case "support": + var_02 = 100 - func_3BB2(param_00); + var_03 = func_3BB2(param_00) - param_01; + var_03 = var_02 + var_03; + var_06 = 20; + for(var_07 = 4;var_07 >= 0;var_07--) + { + if(var_03 > var_06) + { + self.var_3BB6[var_07].alpha = 0; + } + else if(var_06 - var_03 <= 20) + { + self.var_3BB6[var_07].alpha = level.bulletalphas[var_03 - var_06 - 20]; + } + else + { + self.var_3BB6[var_07].alpha = 1; + } + + var_06 = var_06 + 20; + } + break; + } +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_intelligence.gsc b/MW3/Xbox/SP/maps/_intelligence.gsc new file mode 100644 index 0000000..96eb53e --- /dev/null +++ b/MW3/Xbox/SP/maps/_intelligence.gsc @@ -0,0 +1,320 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_intelligence.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 16 + * Decompile Time: 324 ms + * Timestamp: 10/27/2023 2:35:29 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(maps\_utility::is_iw4_map_sp()) + { + return; + } + + precachestring(&"SCRIPT_INTELLIGENCE_OF_FOURTYSIX"); + precachestring(&"SCRIPT_INTELLIGENCE_PREV_FOUND"); + level.intel_items = func_19D0(); + setdvar("ui_level_cheatpoints",level.intel_items.size); + level.intel_counter = 0; + setdvar("ui_level_player_cheatpoints",level.intel_counter); + level.table_origins = func_19D2(); + func_19CB(); + if(maps\_utility::is_specialop()) + { + remove_all_intel(); + return; + } + + intel_think(); + wait 0.05; +} + +//Function Number: 2 +remove_all_intel() +{ + foreach(var_01 in level.intel_items) + { + if(!isdefined(var_01.removed)) + { + var_01 remove_intel_item(); + } + } +} + +//Function Number: 3 +remove_intel_item() +{ + self.removed = 1; + self.item hide(); + self.item notsolid(); + common_scripts\utility::trigger_off(); + level.intel_counter++; + setdvar("ui_level_player_cheatpoints",level.intel_counter); + self notify("end_trigger_thread"); +} + +//Function Number: 4 +func_19CB() +{ + foreach(var_01 in level.intel_items) + { + var_02 = var_01.origin; + var_01.var_19CC = func_19DA(var_02); + } +} + +//Function Number: 5 +intel_think() +{ + foreach(var_01 in level.intel_items) + { + if(var_01 func_19CF()) + { + var_01 remove_intel_item(); + continue; + } + + var_01 thread wait_for_pickup(); + var_01 thread poll_for_found(); + } +} + +//Function Number: 6 +poll_for_found() +{ + self endon("end_loop_thread"); + while(!func_19CF()) + { + wait 0.1; + } + + remove_intel_item(); +} + +//Function Number: 7 +func_19CF() +{ + foreach(var_01 in level.players) + { + if(!var_01 getplayerintelisfound(self.var_19CC)) + { + return 0; + } + } + + return 1; +} + +//Function Number: 8 +func_19D0() +{ + var_00 = getentarray("intelligence_item","targetname"); + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + var_00[var_01].item = getent(var_00[var_01].target,"targetname"); + var_00[var_01].var_19D1 = 0; + } + + return var_00; +} + +//Function Number: 9 +func_19D2() +{ + var_00 = []; + for(var_01 = 1;var_01 <= 64;var_01++) + { + var_02 = tablelookup("maps/_intel_items.csv",0,var_01,4); + if(isdefined(var_02) && var_02 != "undefined") + { + var_03 = strtok(var_02,","); + for(var_04 = 0;var_04 < var_03.size;var_04++) + { + var_03[var_04] = int(var_03[var_04]); + } + + var_00[var_01] = (var_03[0],var_03[1],var_03[2]); + continue; + } + + var_00[var_01] = undefined; + } + + return var_00; +} + +//Function Number: 10 +wait_for_pickup() +{ + self endon("end_trigger_thread"); + if(self.classname == "trigger_use") + { + self sethintstring(&"SCRIPT_INTELLIGENCE_PICKUP"); + self usetriggerrequirelookat(); + } + + self waittill("trigger",var_00); + self notify("end_loop_thread"); + intel_feedback(var_00); + save_intel_for_all_players(); + updategamerprofileall(); + waittillframeend; + remove_intel_item(); +} + +//Function Number: 11 +save_intel_for_all_players() +{ + foreach(var_01 in level.players) + { + if(var_01 getplayerintelisfound(self.var_19CC)) + { + continue; + } + + var_01 setplayerintelfound(self.var_19CC); + } + + logstring("found intel item " + self.var_19CC); + maps\_endmission::updatesppercent(); +} + +//Function Number: 12 +func_19D5() +{ + var_00 = self getlocalplayerprofiledata("cheatPoints"); + self setlocalplayerprofiledata("cheatPoints",var_00 + 1); +} + +//Function Number: 13 +intel_feedback(param_00) +{ + self.item hide(); + self.item notsolid(); + level thread common_scripts\utility::play_sound_in_space("intelligence_pickup",self.item.origin); + var_01 = 3000; + var_02 = 700; + var_03 = var_01 + var_02 / 1000; + foreach(var_05 in level.players) + { + if(param_00 != var_05 && var_05 getplayerintelisfound(self.var_19CC)) + { + continue; + } + + var_06 = var_05 maps\_hud_util::createclientfontstring("objective",1.5); + var_06.glowcolor = (0.7,0.7,0.3); + var_06.glowalpha = 1; + var_06 setup_hud_elem(); + var_06.y = -60; + var_06 setpulsefx(60,var_01,var_02); + var_07 = 0; + if(param_00 == var_05 && var_05 getplayerintelisfound(self.var_19CC)) + { + var_06.label = &"SCRIPT_INTELLIGENCE_PREV_FOUND"; + } + else + { + var_06.label = &"SCRIPT_INTELLIGENCE_OF_FOURTYSIX"; + var_05 func_19D5(); + var_07 = var_05 getlocalplayerprofiledata("cheatPoints"); + var_06 setvalue(var_07); + } + + if(var_07 >= 22) + { + var_05 maps\_utility::player_giveachievement_wrapper("INFORMANT"); + } + + if(var_07 == 46) + { + var_05 maps\_utility::player_giveachievement_wrapper("SCOUT_LEADER"); + } + + var_06 common_scripts\utility::delaycall(var_03,::destroy); + } +} + +//Function Number: 14 +setup_hud_elem() +{ + self.color = (1,1,1); + self.alpha = 1; + self.x = 0; + self.alignx = "center"; + self.aligny = "middle"; + self.horzalign = "center"; + self.vertalign = "middle"; + self.foreground = 1; +} + +//Function Number: 15 +assert_if_identical_origins() +{ + var_00 = []; + var_01 = 1; + while(var_01 < 65) + { + var_02 = tablelookup("maps/_intel_items.csv",0,var_01,4); + var_03 = strtok(var_02,","); + var_01 = 0; + while(var_01 < var_03.size) + { + var_02++ = var_41[var_01]; + } + + var_01[var_02] = (var_41[0],var_41[1],var_41[2]); + var_02++ = int(var_03[var_01]); + } + + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + if(!isdefined(var_01[var_02])) + { + continue; + } + + if(var_01[var_02] == "undefined") + { + continue; + } + + for(var_04 = 0;var_04 < var_01.size;var_04++) + { + if(!isdefined(var_01[var_04])) + { + } + else if(var_01[var_04] == "undefined") + { + } + else if(var_02 == var_04) + { + } + else if(var_01[var_02] == var_01[var_04]) + { + } + } + } +} + +//Function Number: 16 +func_19DA(param_00) +{ + for(var_01 = 1;var_01 < level.table_origins.size + 1;var_01++) + { + if(!isdefined(level.table_origins[var_01])) + { + continue; + } + + if(distancesquared(param_00,level.table_origins[var_01]) < squared(75)) + { + return var_01; + } + } +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_interactive_objects.gsc b/MW3/Xbox/SP/maps/_interactive_objects.gsc new file mode 100644 index 0000000..cc99614 --- /dev/null +++ b/MW3/Xbox/SP/maps/_interactive_objects.gsc @@ -0,0 +1,1750 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_interactive_objects.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 36 + * Decompile Time: 691 ms + * Timestamp: 10/27/2023 2:35:28 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + common_scripts\utility::flag_init("no_ai_tv_damage"); + var_00 = 0; + var_01 = getentarray("explodable_barrel","targetname"); + if(var_01.size) + { + var_00 = 1; + } + + var_01 = getentarray("explodable_barrel","script_noteworthy"); + if(var_01.size > 0) + { + var_00 = 1; + } + + if(var_00) + { + level.breakables_fx["barrel"]["explode"] = loadfx("props/barrelExp"); + level.breakables_fx["barrel"]["burn_start"] = loadfx("props/barrel_ignite"); + level.breakables_fx["barrel"]["burn"] = loadfx("props/barrel_fire_top"); + } + + var_02 = getentarray("oil_spill","targetname"); + if(var_02.size) + { + level.breakables_fx["oilspill"]["burn"] = loadfx("props/barrel_fire"); + level.breakables_fx["oilspill"]["spark"] = loadfx("impacts/small_metalhit_1"); + } + + var_03 = getentarray("tincan","targetname"); + if(var_03.size) + { + level.breakables_fx["tincan"] = loadfx("props/tincan_bounce"); + } + + var_04 = 0; + var_05 = getentarray("breakable","targetname"); + if(var_05.size) + { + var_04 = 1; + } + + var_05 = getentarray("breakable_vase","targetname"); + if(var_05.size) + { + var_04 = 1; + } + + var_05 = getentarray("breakable box","targetname"); + if(var_01.size) + { + var_04 = 1; + } + + var_05 = getentarray("breakable box","script_noteworthy"); + if(var_01.size) + { + var_04 = 1; + } + + if(var_04) + { + level.breakables_fx["vase"] = loadfx("props/vase_water"); + level.breakables_fx["bottle"] = loadfx("props/wine_bottle"); + level.breakables_fx["box"][0] = loadfx("props/crateExp_dust"); + level.breakables_fx["box"][1] = loadfx("props/crateExp_dust"); + level.breakables_fx["box"][2] = loadfx("props/crateExp_dust"); + level.breakables_fx["box"][3] = loadfx("props/crateExp_ammo"); + } + + var_06 = getentarray("glass","targetname"); + var_06 = common_scripts\utility::array_combine(var_06,getentarray("glass","script_noteworthy")); + if(var_06.size) + { + level._glass_info = []; + level._glass_info["glass_large"]["breakfx"] = loadfx("props/car_glass_large"); + level._glass_info["glass_large"]["breaksnd"] = "veh_glass_break_large"; + level._glass_info["glass_med"]["breakfx"] = loadfx("props/car_glass_med"); + level._glass_info["glass_med"]["breaksnd"] = "veh_glass_break_small"; + level._glass_info["glass_small"]["breakfx"] = loadfx("props/car_glass_headlight"); + level._glass_info["glass_small"]["breaksnd"] = "veh_glass_break_small"; + } + + var_07 = getentarray("interactive_tv","targetname"); + if(var_07.size) + { + precachemodel("com_tv2_d"); + precachemodel("com_tv1"); + precachemodel("com_tv2"); + precachemodel("com_tv1_testpattern"); + precachemodel("com_tv2_testpattern"); + level.breakables_fx["tv_explode"] = loadfx("explosions/tv_explosion"); + } + + level.tv_lite_array = getentarray("interactive_tv_light","targetname"); + var_08 = getentarray("destroyable_security_camera","script_noteworthy"); + if(var_08.size) + { + precachemodel("com_security_camera"); + precachemodel("com_security_camera_destroyed"); + level.breakables_fx["security_camera_explode"] = loadfx("props/securitycamera_explosion"); + } + + level.barrelexpsound = "barrel_mtl_explode"; + var_09 = 25; + level.var_197E["orange vase"] = 1; + level.var_197E["green vase"] = 1; + level.var_197E["bottle"] = 1; + level.barrelhealth = 150; + level.var_1980 = []; + level.barrelexplodingthisframe = 0; + level.breakables_clip = []; + level.breakables_clip = getentarray("vase_break_remove","targetname"); + level.console_auto_aim = []; + level.console_auto_aim = getentarray("xenon_auto_aim","targetname"); + level.console_auto_aim_2nd = getentarray("xenon_auto_aim_secondary","targetname"); + for(var_0A = 0;var_0A < level.console_auto_aim.size;var_0A++) + { + level.console_auto_aim[var_0A] notsolid(); + } + + for(var_0A = 0;var_0A < level.console_auto_aim_2nd.size;var_0A++) + { + level.console_auto_aim_2nd[var_0A] notsolid(); + } + + maps\_utility::set_console_status(); + if(level.console) + { + level.console_auto_aim = undefined; + level.console_auto_aim_2nd = undefined; + } + + var_0B = getentarray("breakable clip","targetname"); + for(var_0A = 0;var_0A < var_0B.size;var_0A++) + { + level.breakables_clip[level.breakables_clip.size] = var_0B[var_0A]; + } + + level._breakable_utility_modelarray = []; + level.var_1987 = 0; + level._breakable_utility_maxnum = var_09; + common_scripts\utility::array_thread(getentarray("tincan","targetname"),::func_19A5); + common_scripts\utility::array_thread(getentarray("helmet_pop","targetname"),::helmet_pop); + common_scripts\utility::array_thread(getentarray("explodable_barrel","targetname"),::explodable_barrel_think); + common_scripts\utility::array_thread(getentarray("explodable_barrel","script_noteworthy"),::explodable_barrel_think); + common_scripts\utility::array_thread(getentarray("shuddering_entity","targetname"),::shuddering_entity_think); + common_scripts\utility::array_thread(getentarray("breakable box","targetname"),::breakable_think); + common_scripts\utility::array_thread(getentarray("breakable box","script_noteworthy"),::breakable_think); + common_scripts\utility::array_thread(getentarray("breakable","targetname"),::breakable_think); + common_scripts\utility::array_thread(getentarray("breakable_vase","targetname"),::breakable_think); + common_scripts\utility::array_thread(getentarray("oil_spill","targetname"),::oil_spill_think); + common_scripts\utility::array_thread(getentarray("glass","targetname"),::func_1995); + common_scripts\utility::array_thread(getentarray("interactive_tv","targetname"),::func_198A); + common_scripts\utility::array_thread(getentarray("destroyable_security_camera","script_noteworthy"),::security_camera_logic); +} + +//Function Number: 2 +security_camera_logic() +{ + self setcandamage(1); + var_00 = undefined; + switch(self.model) + { + case "com_security_camera": + var_00 = "com_security_camera_destroyed"; + break; + } + + self waittill("damage",var_01,var_02,var_03,var_04,var_05); + self setmodel(var_00); + playfxontag(level.breakables_fx["security_camera_explode"],self,"tag_deathfx"); +} + +//Function Number: 3 +func_198A() +{ + self setcandamage(1); + self.var_198B = undefined; + self.var_198C = undefined; + self.var_198B = "com_tv2_d"; + self.var_198C = "com_tv2"; + self.onmodel = "com_tv2_testpattern"; + if(issubstr(self.model,"1")) + { + self.var_198C = "com_tv1"; + self.onmodel = "com_tv1_testpattern"; + } + + if(isdefined(self.target)) + { + if(isdefined(level.disable_interactive_tv_use_triggers)) + { + var_00 = getent(self.target,"targetname"); + if(isdefined(var_00)) + { + var_00 delete(); + } + } + else + { + self.usetrig = getent(self.target,"targetname"); + self.usetrig usetriggerrequirelookat(); + self.usetrig setcursorhint("HINT_NOICON"); + } + } + + var_01 = maps\_utility::get_array_of_closest(self.origin,level.tv_lite_array,undefined,undefined,64); + if(var_01.size) + { + self.lite = var_01[0]; + level.tv_lite_array = common_scripts\utility::array_remove(level.tv_lite_array,self.lite); + self.liteintensity = self.lite getlightintensity(); + } + + thread tv_damage(); + if(isdefined(self.usetrig)) + { + thread tv_off(); + } +} + +//Function Number: 4 +tv_off() +{ + self.usetrig endon("death"); + for(;;) + { + wait 0.2; + self.usetrig waittill("trigger"); + self notify("off"); + if(self.model == self.var_198C) + { + self setmodel(self.onmodel); + if(isdefined(self.lite)) + { + self.lite setlightintensity(self.liteintensity); + } + + continue; + } + + self setmodel(self.var_198C); + if(isdefined(self.lite)) + { + self.lite setlightintensity(0); + } + } +} + +//Function Number: 5 +tv_damage() +{ + for(;;) + { + self waittill("damage",var_00,var_01,var_02,var_03,var_04); + if(common_scripts\utility::flag("no_ai_tv_damage")) + { + if(!isalive(var_01)) + { + continue; + } + + if(!isplayer(var_01)) + { + continue; + } + } + + break; + } + + if(isdefined(level.tvhook)) + { + [[ level.tvhook ]](); + } + + self notify("off"); + if(isdefined(self.usetrig)) + { + self.usetrig notify("death"); + } + + self setmodel(self.var_198B); + if(isdefined(self.lite)) + { + self.lite setlightintensity(0); + } + + playfxontag(level.breakables_fx["tv_explode"],self,"tag_fx"); + self playsound("tv_shot_burst"); + if(isdefined(self.usetrig)) + { + self.usetrig delete(); + } +} + +//Function Number: 6 +func_1995() +{ + var_00 = undefined; + var_01 = undefined; + var_02 = undefined; + var_03 = 0; + if(isdefined(self.target)) + { + var_02 = getent(self.target,"targetname"); + } + + if(isdefined(self.script_linkto)) + { + var_04 = common_scripts\utility::get_links(); + var_05 = getent(var_04[0],"script_linkname"); + self linkto(var_05); + } + + switch(self.destructible_type) + { + case "glass_large": + break; + + case "glass_med": + break; + + case "glass_small": + break; + + default: + break; + } + + if(isdefined(var_02)) + { + var_03 = 99; + var_02 linkto(self); + var_02 hide(); + var_01 = var_02 setcontents(0); + } + + if(isdefined(self.script_health)) + { + var_03 = self.script_health; + } + else if(isdefined(var_02)) + { + var_03 = 99; + } + else + { + var_03 = 250; + } + + self setcandamage(1); + while(var_03 > 0) + { + self waittill("damage",var_06,var_07,var_00,var_08,var_09); + if(!isdefined(var_00)) + { + var_00 = (0,0,1); + } + + if(!isdefined(var_09)) + { + var_06 = 100000; + continue; + } + + if(var_09 == "MOD_GRENADE_SPLASH") + { + var_06 = var_06 * 1.75; + continue; + } + + if(var_09 == "MOD_IMPACT") + { + var_06 = 100000; + } + + var_03 = var_03 - var_06; + } + + var_0A = var_03 * -1; + self hide(); + self notsolid(); + if(isdefined(var_02)) + { + var_02 show(); + var_02 setcandamage(1); + var_03 = 200 - var_0A; + var_02 setcontents(var_01); + while(var_03 > 0) + { + var_02 waittill("damage",var_06,var_0B,var_00,var_08,var_09); + if(!isdefined(var_00)) + { + var_00 = (0,0,1); + } + + if(!isdefined(var_09)) + { + var_06 = 100000; + continue; + } + + if(var_09 == "MOD_GRENADE_SPLASH") + { + var_06 = var_06 * 1.75; + continue; + } + + if(var_09 == "MOD_IMPACT") + { + break; + } + + var_03 = var_03 - var_06; + } + + var_02 delete(); + } + + func_1997(self getorigin(),self.destructible_type,var_00); + self delete(); +} + +//Function Number: 7 +func_1997(param_00,param_01,param_02) +{ + thread common_scripts\utility::play_sound_in_space(level._glass_info[param_01]["breaksnd"],param_00); + playfx(level._glass_info[param_01]["breakfx"],param_00,param_02); + level notify("glass_shatter"); +} + +//Function Number: 8 +oil_spill_think() +{ + self.var_1001 = common_scripts\utility::getstruct(self.target,"targetname"); + self.start = common_scripts\utility::getstruct(self.var_1001.target,"targetname"); + self.barrel = getclosestent(self.start.origin,getentarray("explodable_barrel","targetname")); + if(isdefined(self.barrel)) + { + self.barrel.var_199A = 1; + thread func_199C(); + } + + self.extra = getent(self.target,"targetname"); + self setcandamage(1); + for(;;) + { + self waittill("damage",var_00,var_01,var_02,var_03,var_04); + if(var_04 == "MOD_MELEE" || var_04 == "MOD_IMPACT") + { + continue; + } + + self.damageowner = var_01; + playfx(level.breakables_fx["oilspill"]["spark"],var_03,var_02); + var_03 = pointonsegmentnearesttopoint(self.start.origin,self.var_1001.origin,var_03); + thread oil_spill_burn_section(var_03); + thread oil_spill_burn(var_03,self.start.origin); + thread oil_spill_burn(var_03,self.var_1001.origin); + break; + } + + if(isdefined(self.barrel)) + { + self.barrel waittill("exploding"); + } + + self.extra delete(); + self hide(); + wait 10; + self delete(); +} + +//Function Number: 9 +func_199C() +{ + for(;;) + { + self.barrel waittill("damage",var_00,var_01,var_02,var_03,var_04); + if(var_04 == "MOD_MELEE" || var_04 == "MOD_IMPACT") + { + continue; + } + + self.damageowner = var_01; + break; + } + + self radiusdamage(self.start.origin,4,10,10,self.damageowner); +} + +//Function Number: 10 +oil_spill_burn(param_00,param_01) +{ + var_02 = vectornormalize(param_01 - param_00); + var_03 = distance(param_00,param_01); + var_04 = 8; + var_05 = var_02 * var_04; + var_06 = vectortoangles(var_02); + var_07 = anglestoright(var_06); + var_08 = getentarray("explodable_barrel","targetname"); + var_09 = 484; + var_0A = spawn("script_origin",param_00); + var_0B = 0; + for(;;) + { + var_03 = var_03 - var_04; + if(var_03 < var_04 * 0.1) + { + break; + } + + param_00 = param_00 + var_05 + var_07 * randomfloatrange(-6,6); + thread oil_spill_burn_section(param_00); + var_0B++; + if(var_0B == 4) + { + badplace_cylinder("",0.5,param_00,64,64); + var_0B = 0; + } + + var_0A.origin = param_00; + var_0C = []; + var_08 = common_scripts\utility::array_removeundefined(var_08); + for(var_0D = 0;var_0D < var_08.size;var_0D++) + { + var_0E = anglestoup(var_08[var_0D].angles); + var_0F = var_08[var_0D].origin + var_0E * 22; + var_10 = physicstrace(var_0F,var_0F + (0,0,-64)); + if(distancesquared(param_00,var_10) < var_09) + { + var_0C[var_0C.size] = var_08[var_0D]; + var_08[var_0D] dodamage(80 + randomfloat(10),param_00); + } + } + + for(var_0D = 0;var_0D < var_0C.size;var_0D++) + { + var_08 = common_scripts\utility::array_remove(var_08,var_0C[var_0D]); + } + + wait 0.1; + } + + if(!isdefined(self.barrel)) + { + return; + } + + if(distance(param_00,self.start.origin) < 32) + { + self.barrel dodamage(80 + randomfloat(10),param_00); + } +} + +//Function Number: 11 +oil_spill_burn_section(param_00) +{ + var_01 = 0; + var_02 = 0; + playfx(level.breakables_fx["oilspill"]["burn"],param_00); +} + +//Function Number: 12 +explodable_barrel_think() +{ + if(self.classname != "script_model") + { + return; + } + + if(!isdefined(level.var_1980["com_barrel_benzin"])) + { + level.var_1980["com_barrel_benzin"] = 1; + precachemodel("com_barrel_piece"); + precachemodel("com_barrel_piece2"); + } + + self endon("exploding"); + breakable_clip(); + xenon_auto_aim(); + self.damagetaken = 0; + self setcandamage(1); + for(;;) + { + var_00 = undefined; + var_01 = undefined; + var_02 = undefined; + var_03 = undefined; + var_04 = undefined; + self waittill("damage",var_00,var_01,var_02,var_03,var_04); + if(var_04 == "MOD_MELEE" || var_04 == "MOD_IMPACT") + { + continue; + } + + self.damageowner = var_01; + if(level.barrelexplodingthisframe) + { + wait randomfloat(1); + } + + self.damagetaken = self.damagetaken + var_00; + if(self.damagetaken == var_00) + { + thread explodable_barrel_burn(); + } + } +} + +//Function Number: 13 +explodable_barrel_burn() +{ + var_00 = 0; + var_01 = 0; + var_02 = anglestoup(self.angles); + var_03 = anglestoup((0,90,0)); + var_04 = vectordot(var_02,var_03); + var_05 = (0,0,0); + var_06 = var_02 * 44; + if(var_04 < 0.5) + { + var_05 = var_02 * 22 - (0,0,30); + var_06 = var_02 * 22 + (0,0,14); + } + + while(self.damagetaken < level.barrelhealth) + { + if(!var_01) + { + playfx(level.breakables_fx["barrel"]["burn_start"],self.origin + var_05); + var_01 = 1; + } + + if(var_00 > 19) + { + var_00 = 0; + } + + playfx(level.breakables_fx["barrel"]["burn"],self.origin + var_06); + if(var_00 == 0) + { + self.damagetaken = self.damagetaken + 10 + randomfloat(10); + badplace_cylinder("",1,self.origin,128,250); + } + + var_00++; + wait 0.05; + if(!isdefined(self)) + { + return; + } + } + + self.damagetaken = undefined; + thread explodable_barrel_explode(); +} + +//Function Number: 14 +explodable_barrel_explode() +{ + self notify("exploding"); + self notify("death"); + var_00 = anglestoup(self.angles); + var_01 = anglestoup((0,90,0)); + var_02 = vectordot(var_00,var_01); + var_03 = (0,0,0); + if(var_02 < 0.5) + { + var_04 = self.origin + var_00 * 22; + var_05 = physicstrace(var_04,var_04 + (0,0,-64)); + var_03 = var_05 - self.origin; + } + + var_03 = var_03 + (0,0,4); + level thread common_scripts\utility::play_sound_in_space(level.barrelexpsound,self.origin); + playfx(level.breakables_fx["barrel"]["explode"],self.origin + var_03); + physicsexplosionsphere(self.origin + var_03,100,80,1); + level.barrelexplodingthisframe = 1; + if(isdefined(self.var_19A2)) + { + if(common_scripts\utility::issp() && self.var_19A2.spawnflags & 1) + { + self.var_19A2 connectpaths(); + } + + self.var_19A2 delete(); + } + + var_06 = 1; + var_07 = 250; + var_08 = 250; + if(isdefined(self.radius)) + { + var_08 = self.radius; + } + + var_09 = undefined; + if(isdefined(self.damageowner)) + { + var_09 = self.damageowner; + if(isplayer(var_09)) + { + maps\_utility::arcademode_kill(self.origin,"rifle",150); + } + + self.damageowner = undefined; + } + + level.lastexplodingbarrel["time"] = gettime(); + level.lastexplodingbarrel["origin"] = self.origin + (0,0,30); + level.lastexplodingbarrel["radius"] = var_08; + self radiusdamage(self.origin + (0,0,30),var_08,var_07,var_06,var_09); + if(randomint(2) == 0) + { + self setmodel("com_barrel_piece"); + } + else + { + self setmodel("com_barrel_piece2"); + } + + if(var_02 < 0.5) + { + var_04 = self.origin + var_00 * 22; + var_0A = physicstrace(var_04,var_04 + (0,0,-64)); + self.origin = var_0A; + self.angles = self.angles + (0,0,90); + } + + wait 0.05; + level.barrelexplodingthisframe = 0; +} + +//Function Number: 15 +shuddering_entity_think() +{ + var_00 = 0; + if(self.model == "prop_helmet_german_normandy") + { + var_00 = 1; + } + + self setcandamage(1); + for(;;) + { + self waittill("damage",var_01,var_02,var_03,var_04); + if(var_00) + { + self vibrate(var_03,20,0.6,0.75); + } + else + { + self vibrate(var_03,0.4,0.4,0.4); + } + + self waittill("rotatedone"); + } +} + +//Function Number: 16 +func_19A5() +{ + if(self.classname != "script_model") + { + return; + } + + self setcandamage(1); + self waittill("damage",var_00,var_01); + if(isai(var_01) || isplayer(var_01)) + { + var_02 = var_01 geteye() - (0,0,randomint(50) + 50); + } + else + { + var_02 = var_02.origin; + } + + var_03 = vectornormalize(self.origin - var_02); + var_03 = var_03 * 0.5 + randomfloat(1); + self notify("death"); + playfx(level.breakables_fx["tincan"],self.origin,var_03); + self delete(); +} + +//Function Number: 17 +helmet_pop() +{ + if(self.classname != "script_model") + { + return; + } + + xenon_auto_aim(); + self setcandamage(1); + thread helmet_logic(); +} + +//Function Number: 18 +helmet_logic() +{ + self waittill("damage",var_00,var_01); + if(isai(var_01)) + { + var_02 = var_01 geteye(); + } + else + { + var_02 = var_02.origin; + } + + var_03 = vectornormalize(self.origin - var_02); + if(!isdefined(self.var_19A8) && isplayer(var_01)) + { + thread animscripts/death::helmetlaunch(var_03); + return; + } + + self notsolid(); + self hide(); + var_04 = spawn("script_model",self.origin + (0,0,5)); + var_04.angles = self.angles; + var_04 setmodel(self.model); + var_04 thread animscripts/death::helmetlaunch(var_03); + self.var_19A8 = 0; + self notify("ok_remove"); +} + +//Function Number: 19 +allowbreak(param_00) +{ + if(!isdefined(level.breakingents)) + { + return 1; + } + + if(level.breakingents.size == 0) + { + return 0; + } + else + { + for(var_01 = 0;var_01 < level.breakingents.size;var_01++) + { + if(param_00 == level.breakingents[var_01]) + { + return 1; + } + } + + return 0; + } + + return 1; +} + +//Function Number: 20 +breakable_think_triggered(param_00) +{ + for(;;) + { + self waittill("trigger",var_01); + param_00 notify("damage",100,var_01); + } +} + +//Function Number: 21 +breakable_think() +{ + if(self.classname != "script_model") + { + return; + } + + if(!isdefined(self.model)) + { + return; + } + + var_00 = undefined; + if(self.model == "egypt_prop_vase1" || self.model == "egypt_prop_vase3" || self.model == "egypt_prop_vase4") + { + if(!isdefined(level.var_1980["egypt_prop_vase_o"])) + { + level.var_1980["egypt_prop_vase_o"] = 1; + precachemodel("egypt_prop_vase_br2"); + precachemodel("egypt_prop_vase_br5"); + precachemodel("egypt_prop_vase_br7"); + } + + var_00 = "orange vase"; + breakable_clip(); + xenon_auto_aim(); + } + else if(self.model == "egypt_prop_vase2" || self.model == "egypt_prop_vase5" || self.model == "egypt_prop_vase6") + { + if(!isdefined(level.var_1980["egypt_prop_vase_g"])) + { + level.var_1980["egypt_prop_vase_g"] = 1; + precachemodel("egypt_prop_vase_br1"); + precachemodel("egypt_prop_vase_br3"); + precachemodel("egypt_prop_vase_br4"); + precachemodel("egypt_prop_vase_br6"); + } + + var_00 = "green vase"; + breakable_clip(); + xenon_auto_aim(); + } + else if(self.model == "prop_crate_dak1" || self.model == "prop_crate_dak2" || self.model == "prop_crate_dak3" || self.model == "prop_crate_dak4" || self.model == "prop_crate_dak5" || self.model == "prop_crate_dak6" || self.model == "prop_crate_dak7" || self.model == "prop_crate_dak8" || self.model == "prop_crate_dak9") + { + if(!isdefined(level.var_1980["prop_crate_dak_shard"])) + { + level.var_1980["prop_crate_dak_shard"] = 1; + precachemodel("prop_crate_dak_shard"); + } + + var_00 = "wood box"; + breakable_clip(); + xenon_auto_aim(); + } + else if(self.model == "prop_winebottle_breakable") + { + if(!isdefined(level.var_1980["prop_winebottle"])) + { + level.var_1980["prop_winebottle"] = 1; + precachemodel("prop_winebottle_broken_top"); + precachemodel("prop_winebottle_broken_bot"); + } + + var_00 = "bottle"; + xenon_auto_aim(); + } + else if(self.model == "prop_diningplate_roundfloral") + { + if(!isdefined(level.var_1980["prop_diningplate_brokenfloral"])) + { + level.var_1980["prop_diningplate_brokenfloral"] = 1; + precachemodel("prop_diningplate_brokenfloral1"); + precachemodel("prop_diningplate_brokenfloral2"); + precachemodel("prop_diningplate_brokenfloral3"); + precachemodel("prop_diningplate_brokenfloral4"); + } + + var_00 = "plate"; + self.plate = "round_floral"; + xenon_auto_aim(); + } + else if(self.model == "prop_diningplate_roundplain") + { + if(!isdefined(level.var_1980["prop_diningplate_brokenplain"])) + { + level.var_1980["prop_diningplate_brokenplain"] = 1; + precachemodel("prop_diningplate_brokenplain1"); + precachemodel("prop_diningplate_brokenplain2"); + precachemodel("prop_diningplate_brokenplain3"); + precachemodel("prop_diningplate_brokenplain4"); + } + + var_00 = "plate"; + self.plate = "round_plain"; + xenon_auto_aim(); + } + else if(self.model == "prop_diningplate_roundstack") + { + if(!isdefined(level.var_1980["prop_diningplate_brokenplain"])) + { + level.var_1980["prop_diningplate_brokenplain"] = 1; + precachemodel("prop_diningplate_brokenplain1"); + precachemodel("prop_diningplate_brokenplain2"); + precachemodel("prop_diningplate_brokenplain3"); + precachemodel("prop_diningplate_brokenplain4"); + } + + if(!isdefined(level.var_1980["prop_diningplate_brokenfloral"])) + { + level.var_1980["prop_diningplate_brokenfloral"] = 1; + precachemodel("prop_diningplate_brokenfloral1"); + precachemodel("prop_diningplate_brokenfloral2"); + precachemodel("prop_diningplate_brokenfloral3"); + precachemodel("prop_diningplate_brokenfloral4"); + } + + var_00 = "plate"; + self.plate = "round_stack"; + xenon_auto_aim(); + } + else if(self.model == "prop_diningplate_ovalfloral") + { + if(!isdefined(level.var_1980["prop_diningplate_brokenfloral"])) + { + level.var_1980["prop_diningplate_brokenfloral"] = 1; + precachemodel("prop_diningplate_brokenfloral1"); + precachemodel("prop_diningplate_brokenfloral2"); + precachemodel("prop_diningplate_brokenfloral3"); + precachemodel("prop_diningplate_brokenfloral4"); + } + + var_00 = "plate"; + self.plate = "oval_floral"; + xenon_auto_aim(); + } + else if(self.model == "prop_diningplate_ovalplain") + { + if(!isdefined(level.var_1980["prop_diningplate_brokenplain"])) + { + level.var_1980["prop_diningplate_brokenplain"] = 1; + precachemodel("prop_diningplate_brokenplain1"); + precachemodel("prop_diningplate_brokenplain2"); + precachemodel("prop_diningplate_brokenplain3"); + precachemodel("prop_diningplate_brokenplain4"); + } + + var_00 = "plate"; + self.plate = "oval_plain"; + xenon_auto_aim(); + } + else if(self.model == "prop_diningplate_ovalstack") + { + if(!isdefined(level.var_1980["prop_diningplate_brokenplain"])) + { + level.var_1980["prop_diningplate_brokenplain"] = 1; + precachemodel("prop_diningplate_brokenplain1"); + precachemodel("prop_diningplate_brokenplain2"); + precachemodel("prop_diningplate_brokenplain3"); + precachemodel("prop_diningplate_brokenplain4"); + } + + if(!isdefined(level.var_1980["prop_diningplate_brokenfloral"])) + { + level.var_1980["prop_diningplate_brokenfloral"] = 1; + precachemodel("prop_diningplate_brokenfloral1"); + precachemodel("prop_diningplate_brokenfloral2"); + precachemodel("prop_diningplate_brokenfloral3"); + precachemodel("prop_diningplate_brokenfloral4"); + } + + var_00 = "plate"; + self.plate = "oval_stack"; + xenon_auto_aim(); + } + + if(!isdefined(var_00)) + { + return; + } + + if(isdefined(self.target)) + { + var_01 = getent(self.target,"targetname"); + if(isdefined(var_01) && var_01.classname == "trigger_multiple") + { + var_01 thread breakable_think_triggered(self); + } + } + + self setcandamage(1); + thread breakable_logic(var_00); +} + +//Function Number: 22 +breakable_logic(param_00) +{ + var_01 = undefined; + for(;;) + { + self waittill("damage",var_02,var_01); + if(isdefined(var_01) && var_01.code_classname == "script_vehicle") + { + var_01 joltbody(self.origin + (0,0,-90),0.2); + } + + if(param_00 == "wood box") + { + if(!allowbreak(var_01)) + { + continue; + } + + if(!isdefined(level.flags) || !isdefined(level.flags["Breakable Boxes"])) + { + break; + } + + if(isdefined(level.flags["Breakable Boxes"]) && level.flags["Breakable Boxes"] == 1) + { + break; + } + + continue; + } + + break; + } + + self notify("death"); + var_03 = undefined; + var_04 = undefined; + var_05 = 0; + switch(param_00) + { + case "green vase": + case "orange vase": + var_03 = "bullet_large_vase"; + var_04 = level.breakables_fx["vase"]; + break; + + case "wood box": + if(isdefined(level.crateimpactsound)) + { + var_03 = level.crateimpactsound; + } + else + { + var_03 = "bullet_large_vase"; + } + + var_04 = level.breakables_fx["box"][randomint(level.breakables_fx["box"].size)]; + var_05 = 1; + break; + + case "bottle": + var_03 = "bullet_small_bottle"; + var_04 = level.breakables_fx["bottle"]; + break; + + case "plate": + var_03 = "bullet_small_plate"; + break; + } + + thread common_scripts\utility::play_sound_in_space(var_03,self.origin); + thread make_broken_peices(self,param_00); + if(isdefined(var_04)) + { + playfx(var_04,self.origin); + } + + if(var_05) + { + var_06 = getentarray("breakable","targetname"); + for(var_07 = 0;var_07 < var_06.size;var_07++) + { + var_08 = var_06[var_07]; + var_09 = abs(self.origin[0] - var_08.origin[0]); + var_0A = abs(self.origin[1] - var_08.origin[1]); + if(var_09 <= 20 && var_0A <= 20) + { + var_0B = self.origin[2] - var_08.origin[2]; + if(var_0B <= 0) + { + var_08 notify("damage",var_02,var_01); + } + } + } + } + + if(isdefined(self.var_19A2)) + { + self.var_19A2 connectpaths(); + self.var_19A2 delete(); + } + + if(!isdefined(self.var_19A8)) + { + self delete(); + } + else + { + self.var_19A8 = 0; + } + + self notify("ok_remove"); +} + +//Function Number: 23 +xenon_auto_aim() +{ + if(isdefined(level.console_auto_aim) && level.console_auto_aim.size > 0) + { + self.autoaim = getclosestaccurantent(self.origin,level.console_auto_aim); + } + + if(isdefined(self.autoaim)) + { + level.console_auto_aim = common_scripts\utility::array_remove(level.console_auto_aim,self.autoaim); + thread func_19B4(); + } +} + +//Function Number: 24 +xenon_auto_aim_stop_logic() +{ + self notify("entered_xenon_auto_aim_stop_logic"); + self endon("entered_xenon_auto_aim_stop_logic"); + self.autoaim waittill("xenon_auto_aim_stop_logic"); + self.var_19A8 = undefined; +} + +//Function Number: 25 +func_19B4(param_00) +{ + thread xenon_auto_aim_stop_logic(); + self endon("xenon_auto_aim_stop_logic"); + self.autoaim endon("xenon_auto_aim_stop_logic"); + self notify("xenon_remove_auto_aim"); + self.autoaim thread func_19B5(param_00); + self.var_19A8 = 1; + self waittill("damage",var_01,var_02); + self.autoaim disableaimassist(); + self.autoaim delete(); + if(self.var_19A8) + { + self waittill("ok_remove"); + } + + self delete(); +} + +//Function Number: 26 +func_19B5(param_00) +{ + self endon("xenon_auto_aim_stop_logic"); + self endon("death"); + if(!isdefined(param_00)) + { + param_00 = 1; + } + + if(isdefined(self.script_noteworthy) && param_00) + { + var_01 = "enable_xenon_autoaim_" + self.script_noteworthy; + level waittill(var_01); + } + + self.wait_message = 0; + if(isdefined(self.var_19B7) && self.var_19B7 == 1) + { + self waittill("recreate"); + } + + self enableaimassist(); +} + +//Function Number: 27 +breakable_clip() +{ + if(isdefined(self.target)) + { + var_00 = getent(self.target,"targetname"); + if(var_00.classname == "script_brushmodel") + { + self.var_19A2 = var_00; + return; + } + } + + if(isdefined(level.breakables_clip) && level.breakables_clip.size > 0) + { + self.var_19A2 = getclosestent(self.origin,level.breakables_clip); + } + + if(isdefined(self.var_19A2)) + { + level.breakables_clip = common_scripts\utility::array_remove(level.breakables_clip,self.var_19A2); + } +} + +//Function Number: 28 +make_broken_peices(param_00,param_01) +{ + var_02 = anglestoright(param_00.angles); + var_03 = anglestoforward(param_00.angles); + var_04 = anglestoup(param_00.angles); + var_05 = []; + switch(param_01) + { + case "orange vase": + break; + var_41[var_41.size] + addpiece(var_03,var_04,var_05,3,2,0,param_01,(0,0,0),"egypt_prop_vase_br5") + var_41[var_41.size] + addpiece(var_03,var_04,var_05,12,10,27,param_01,(0,180,0),"egypt_prop_vase_br7") + var_41[var_41.size] + addpiece(var_03,var_04,var_05,13,-6,28,param_01,(0,245.1,0),"egypt_prop_vase_br7") + var_41[var_05.size] + addpiece(var_02,var_03,var_04,-7,0,22,param_00,(0,0,0),"egypt_prop_vase_br2") + break; + + case "green vase": + break; + var_41[var_41.size] + addpiece(var_03,var_04,var_05,3,1,0,param_01,(0,0,0),"egypt_prop_vase_br4") + var_41[var_41.size] + addpiece(var_03,var_04,var_05,6,13,29,param_01,(0,153.5,0),"egypt_prop_vase_br6") + var_41[var_41.size] + addpiece(var_03,var_04,var_05,12,1,31,param_01,(0,348.5,0),"egypt_prop_vase_br3") + var_41[var_41.size] + addpiece(var_03,var_04,var_05,-6,-1,26,param_01,(0,0,0),"egypt_prop_vase_br1") + break; + + case "wood box": + break; + var_41[var_41.size] + addpiece(var_03,var_04,var_05,-10,10,5,param_01,(180,270,0),"prop_crate_dak_shard") + var_41[var_41.size] + addpiece(var_03,var_04,var_05,-10,-10,5,param_01,(180,180,0),"prop_crate_dak_shard") + var_41[var_41.size] + addpiece(var_03,var_04,var_05,10,-10,5,param_01,(180,90,0),"prop_crate_dak_shard") + var_41[var_41.size] + addpiece(var_03,var_04,var_05,10,10,5,param_01,(180,0,0),"prop_crate_dak_shard") + var_41[var_41.size] + addpiece(var_03,var_04,var_05,-10,-10,25,param_01,(0,270,0),"prop_crate_dak_shard") + var_41[var_41.size] + addpiece(var_03,var_04,var_05,10,-10,25,param_01,(0,180,0),"prop_crate_dak_shard") + var_41[var_41.size] + addpiece(var_03,var_04,var_05,10,10,25,param_01,(0,90,0),"prop_crate_dak_shard") + var_41[var_41.size] + addpiece(var_03,var_04,var_05,-10,10,25,param_01,(0,0,0),"prop_crate_dak_shard") + break; + + case "bottle": + var_41[var_41.size - 1].type = "bottle_top"; + var_41[var_41.size - 1].type = "bottle_bot"; + break; + var_41[var_41.size] + addpiece(var_03,var_04,var_05,0,0,0,param_01,(0,0,0),"prop_winebottle_broken_bot") + var_41[var_41.size] + addpiece(var_03,var_04,var_05,0,0,10,param_01,(0,0,0),"prop_winebottle_broken_top") + break; + + case "plate": + switch(param_01.plate) + { + case "round_floral": + var_41[var_41.size - 1].type = "plate"; + var_41[var_41.size - 1].type = "plate"; + var_41[var_41.size - 1].type = "plate"; + var_41[var_41.size - 1].type = "plate"; + break; + var_41[var_41.size] + addpiece(var_03,var_04,var_05,-4,2,0.5,param_01,(0,146.8,0),"prop_diningplate_brokenfloral4") + var_41[var_41.size] + addpiece(var_03,var_04,var_05,1,2,0.5,param_01,(0,150.2,0),"prop_diningplate_brokenfloral3") + var_41[var_41.size] + addpiece(var_03,var_04,var_05,3,-2,0.5,param_01,(0,149.8,0),"prop_diningplate_brokenfloral2") + var_41[var_41.size] + addpiece(var_03,var_04,var_05,-3,-4,0.5,param_01,(0,150,0),"prop_diningplate_brokenfloral1") + break; + + case "round_plain": + var_41[var_41.size - 1].type = "plate"; + var_41[var_41.size - 1].type = "plate"; + var_41[var_41.size - 1].type = "plate"; + var_41[var_41.size - 1].type = "plate"; + break; + var_41[var_41.size] + addpiece(var_03,var_04,var_05,-4,2,0.5,param_01,(0,146.8,0),"prop_diningplate_brokenplain4") + var_41[var_41.size] + addpiece(var_03,var_04,var_05,1,2,0.5,param_01,(0,150.2,0),"prop_diningplate_brokenplain3") + var_41[var_41.size] + addpiece(var_03,var_04,var_05,3,-2,0.5,param_01,(0,149.8,0),"prop_diningplate_brokenplain2") + var_41[var_41.size] + addpiece(var_03,var_04,var_05,-3,-4,0.5,param_01,(0,150,0),"prop_diningplate_brokenplain1") + break; + + case "round_stack": + var_41[var_41.size - 1].type = "plate"; + var_41[var_41.size - 1].type = "plate"; + var_41[var_41.size - 1].type = "plate"; + var_41[var_41.size - 1].type = "plate"; + var_41[var_41.size - 1].type = "plate"; + var_41[var_41.size - 1].type = "plate"; + var_41[var_41.size - 1].type = "plate"; + var_41[var_41.size - 1].type = "plate"; + var_41[var_41.size - 1].type = "plate"; + var_41[var_41.size - 1].type = "plate"; + var_41[var_41.size - 1].type = "plate"; + var_41[var_41.size - 1].type = "plate"; + break; + var_41[var_41.size] + addpiece(var_03,var_04,var_05,-4,2,4.5,param_01,(0,146.8,0),"prop_diningplate_brokenfloral4") + var_41[var_41.size] + addpiece(var_03,var_04,var_05,1,2,4.5,param_01,(0,150.2,0),"prop_diningplate_brokenfloral3") + var_41[var_41.size] + addpiece(var_03,var_04,var_05,3,-2,4.5,param_01,(0,149.8,0),"prop_diningplate_brokenfloral2") + var_41[var_41.size] + addpiece(var_03,var_04,var_05,-3,-4,4.5,param_01,(0,150,0),"prop_diningplate_brokenfloral1") + var_41[var_41.size] + addpiece(var_03,var_04,var_05,2,4,2.5,param_01,(0,56.8,0),"prop_diningplate_brokenplain4") + var_41[var_41.size] + addpiece(var_03,var_04,var_05,2,-1,2.5,param_01,(0,60.2,0),"prop_diningplate_brokenplain3") + var_41[var_41.size] + addpiece(var_03,var_04,var_05,-1,-3,2.5,param_01,(0,59.8,0),"prop_diningplate_brokenplain2") + var_41[var_41.size] + addpiece(var_03,var_04,var_05,-4,3,2.5,param_01,(0,60,0),"prop_diningplate_brokenplain1") + var_41[var_41.size] + addpiece(var_03,var_04,var_05,-4,2,0.5,param_01,(0,146.8,0),"prop_diningplate_brokenfloral4") + var_41[var_41.size] + addpiece(var_03,var_04,var_05,1,2,0.5,param_01,(0,150.2,0),"prop_diningplate_brokenfloral3") + var_41[var_41.size] + addpiece(var_03,var_04,var_05,3,-2,0.5,param_01,(0,149.8,0),"prop_diningplate_brokenfloral2") + var_41[var_41.size] + addpiece(var_03,var_04,var_05,-3,-4,0.5,param_01,(0,150,0),"prop_diningplate_brokenfloral1") + break; + + case "oval_floral": + var_41[var_41.size - 1].type = "plate"; + var_41[var_41.size - 1].type = "plate"; + var_41[var_41.size - 1].type = "plate"; + var_41[var_41.size - 1].type = "plate"; + var_41[var_41.size - 1].type = "plate"; + break; + var_41[var_41.size] + addpiece(var_03,var_04,var_05,-3,-3,0.5,param_01,(0,246.7,0),"prop_diningplate_brokenfloral4") + var_41[var_41.size] + addpiece(var_03,var_04,var_05,-2,5,0.5,param_01,(0,102.3,0),"prop_diningplate_brokenfloral4") + var_41[var_41.size] + addpiece(var_03,var_04,var_05,4,2,0.5,param_01,(0,150.2,0),"prop_diningplate_brokenfloral3") + var_41[var_41.size] + addpiece(var_03,var_04,var_05,-6,1,0.5,param_01,(0,352.2,0),"prop_diningplate_brokenfloral2") + var_41[var_41.size] + addpiece(var_03,var_04,var_05,4,-4,0.5,param_01,(0,205.9,0),"prop_diningplate_brokenfloral1") + break; + + case "oval_plain": + var_41[var_41.size - 1].type = "plate"; + var_41[var_41.size - 1].type = "plate"; + var_41[var_41.size - 1].type = "plate"; + var_41[var_41.size - 1].type = "plate"; + var_41[var_41.size - 1].type = "plate"; + break; + var_41[var_41.size] + addpiece(var_03,var_04,var_05,-3,-3,0.5,param_01,(0,246.7,0),"prop_diningplate_brokenplain4") + var_41[var_41.size] + addpiece(var_03,var_04,var_05,-2,5,0.5,param_01,(0,102.3,0),"prop_diningplate_brokenplain4") + var_41[var_41.size] + addpiece(var_03,var_04,var_05,4,2,0.5,param_01,(0,150.2,0),"prop_diningplate_brokenplain3") + var_41[var_41.size] + addpiece(var_03,var_04,var_05,-6,1,0.5,param_01,(0,352.2,0),"prop_diningplate_brokenplain2") + var_41[var_41.size] + addpiece(var_03,var_04,var_05,4,-4,0.5,param_01,(0,205.9,0),"prop_diningplate_brokenplain1") + break; + + case "oval_stack": + var_41[var_41.size - 1].type = "plate"; + var_41[var_41.size - 1].type = "plate"; + var_41[var_41.size - 1].type = "plate"; + var_41[var_41.size - 1].type = "plate"; + var_41[var_41.size - 1].type = "plate"; + var_41[var_41.size - 1].type = "plate"; + var_41[var_41.size - 1].type = "plate"; + var_41[var_41.size - 1].type = "plate"; + var_41[var_41.size - 1].type = "plate"; + var_41[var_41.size - 1].type = "plate"; + break; + var_41[var_41.size] + addpiece(var_03,var_04,var_05,3,4,2.5,param_01,(0,66.7,0),"prop_diningplate_brokenplain4") + var_41[var_41.size] + addpiece(var_03,var_04,var_05,2,-4,2.5,param_01,(0,282.3,0),"prop_diningplate_brokenplain4") + var_41[var_41.size] + addpiece(var_03,var_04,var_05,-4,-1,2.5,param_01,(0,330.2,0),"prop_diningplate_brokenplain3") + var_41[var_41.size] + addpiece(var_03,var_04,var_05,6,0,2.5,param_01,(0,172.2,0),"prop_diningplate_brokenplain2") + var_41[var_41.size] + addpiece(var_03,var_04,var_05,-4,5,2.5,param_01,(0,25.9,0),"prop_diningplate_brokenplain1") + var_41[var_41.size] + addpiece(var_03,var_04,var_05,-3,-3,0.5,param_01,(0,246.7,0),"prop_diningplate_brokenfloral4") + var_41[var_41.size] + addpiece(var_03,var_04,var_05,-2,5,0.5,param_01,(0,102.3,0),"prop_diningplate_brokenfloral4") + var_41[var_41.size] + addpiece(var_03,var_04,var_05,4,2,0.5,param_01,(0,150.2,0),"prop_diningplate_brokenfloral3") + var_41[var_41.size] + addpiece(var_03,var_04,var_05,-6,1,0.5,param_01,(0,352.2,0),"prop_diningplate_brokenfloral2") + var_41[var_41.size] + addpiece(var_03,var_04,var_05,4,-4,0.5,param_01,(0,205.9,0),"prop_diningplate_brokenfloral1") + break; + } + break; + + default: + break; + } + + common_scripts\utility::array_thread(var_41,::pieces_move,param_01.origin); + if(isdefined(level.var_197E[var_02]) && level.var_197E[var_02] == 1) + { + var_06 = var_41[0].origin[2]; + for(var_07 = 0;var_07 < var_41.size;var_07++) + { + if(var_06 > var_41[var_07].origin[2]) + { + var_06 = var_41[var_07].origin[2]; + } + } + + common_scripts\utility::array_thread(var_41,::func_19BC,var_06); + return; + } + + wait 2; + for(var_07 = 0;var_07 < var_41.size;var_07++) + { + if(isdefined(var_41[var_07])) + { + var_41[var_07] delete(); + } + } +} + +//Function Number: 29 +list_add(param_00) +{ + if(isdefined(level._breakable_utility_modelarray[level.var_1987])) + { + level._breakable_utility_modelarray[level.var_1987] delete(); + } + + level._breakable_utility_modelarray[level.var_1987] = param_00; + level.var_1987++; + if(!level.var_1987 < level._breakable_utility_maxnum) + { + level.var_1987 = 0; + } +} + +//Function Number: 30 +pieces_move(param_00) +{ + self endon("do not kill"); + if(isdefined(self.type) && self.type == "bottle_bot") + { + return; + } + + var_01 = spawn("script_origin",self.origin); + self linkto(var_01); + var_02 = self.origin + (randomfloat(10) - 5,randomfloat(10) - 5,randomfloat(10) + 5); + var_03 = undefined; + if(isdefined(self.type) && self.type == "bottle_top") + { + var_03 = (randomfloat(40) - 20,randomfloat(40) - 20,70 + randomfloat(15)); + var_04 = 1; + var_05 = 1; + var_06 = 1; + if(randomint(100) > 50) + { + var_04 = -1; + } + + if(randomint(100) > 50) + { + var_05 = -1; + } + + if(randomint(100) > 50) + { + var_06 = -1; + } + + var_01 rotatevelocity((250 * var_04,250 * var_05,randomfloat(100) * var_06),2,0,0.5); + } + else if(isdefined(self.type) && self.type == "plate") + { + var_03 = vectornormalize(var_02 - param_00); + var_03 = var_03 * 125 + randomfloat(25); + if(randomint(100) > 50) + { + var_01 rotateroll(800 + randomfloat(4000) * -1,5,0,0); + } + else + { + var_01 rotateroll(800 + randomfloat(4000),5,0,0); + } + } + else + { + var_03 = vectornormalize(var_02 - param_00); + var_03 = var_03 * 60 + randomfloat(50); + if(randomint(100) > 50) + { + var_01 rotateroll(800 + randomfloat(1000) * -1,5,0,0); + } + else + { + var_01 rotateroll(800 + randomfloat(1000),5,0,0); + } + } + + var_01 movegravity(var_03,5); + wait 5; + if(isdefined(self)) + { + self unlink(); + } + + var_01 delete(); +} + +//Function Number: 31 +func_19BC(param_00) +{ + self endon("death"); + wait 0.1; + var_01 = bullettrace(self.origin,self.origin - (0,0,50000),0,undefined); + var_02 = var_01["position"]; + while(self.origin[2] > var_02[2]) + { + wait 0.05; + } + + self unlink(); + self.origin = (self.origin[0],self.origin[1],var_02[2]); + self notify("do not kill"); + self unlink(); +} + +//Function Number: 32 +addpiece(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08) +{ + var_09 = 1; + var_0A = param_00; + var_0B = param_01; + var_0C = param_02; + var_0A = var_0A * param_04 * var_09; + var_0B = var_0B * param_03 * var_09; + var_0C = var_0C * param_05 * var_09; + var_0D = param_06.origin + var_0A + var_0B + var_0C; + var_0E = spawn("script_model",var_0D); + var_0E setmodel(param_08); + var_0E.var_19BE = var_09; + var_0E.angles = param_06.angles + param_07; + list_add(var_0E); + return var_0E; +} + +//Function Number: 33 +func_19BF(param_00,param_01) +{ + if(param_01.size < 1) + { + return; + } + + var_02 = distance(param_01[0] getorigin(),param_00); + var_03 = param_01[0]; + for(var_04 = 0;var_04 < param_01.size;var_04++) + { + var_05 = distance(param_01[var_04] getorigin(),param_00); + if(var_05 < var_02) + { + continue; + } + + var_02 = var_05; + var_03 = param_01[var_04]; + } + + return var_03; +} + +//Function Number: 34 +getclosestent(param_00,param_01) +{ + if(param_01.size < 1) + { + return; + } + + var_02 = 256; + var_03 = undefined; + for(var_04 = 0;var_04 < param_01.size;var_04++) + { + var_05 = distance(param_01[var_04] getorigin(),param_00); + if(var_05 >= var_02) + { + continue; + } + + var_02 = var_05; + var_03 = param_01[var_04]; + } + + return var_03; +} + +//Function Number: 35 +getclosestaccurantent(param_00,param_01) +{ + if(param_01.size < 1) + { + return; + } + + var_02 = 8; + var_03 = undefined; + for(var_04 = 0;var_04 < param_01.size;var_04++) + { + var_05 = distance(param_01[var_04] getorigin(),param_00); + if(var_05 >= var_02) + { + continue; + } + + var_02 = var_05; + var_03 = param_01[var_04]; + } + + return var_03; +} + +//Function Number: 36 +getclosestaiment(param_00,param_01) +{ + if(param_01.size < 1) + { + return; + } + + var_02 = 1000000; + var_03 = undefined; + for(var_04 = 0;var_04 < param_01.size;var_04++) + { + var_05 = distance(param_01[var_04] getorigin(),param_00); + if(var_05 >= var_02) + { + continue; + } + + var_02 = var_05; + var_03 = param_01[var_04]; + } + + return var_03; +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_introscreen.gsc b/MW3/Xbox/SP/maps/_introscreen.gsc new file mode 100644 index 0000000..4ee37ec --- /dev/null +++ b/MW3/Xbox/SP/maps/_introscreen.gsc @@ -0,0 +1,750 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_introscreen.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 31 + * Decompile Time: 533 ms + * Timestamp: 10/27/2023 2:35:23 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + common_scripts\utility::flag_init("pullup_weapon"); + common_scripts\utility::flag_init("introscreen_complete"); + common_scripts\utility::flag_init("safe_for_objectives"); + common_scripts\utility::flag_init("introscreen_complete"); + maps\_utility::func_614(10,::common_scripts\utility::flag_set,"safe_for_objectives"); + level.linefeed_delay = 16; + precacheshader("black"); + precacheshader("white"); + if(getdvar("introscreen") == "") + { + setdvar("introscreen","1"); + } + + if(isdefined(level.credits_active)) + { + return; + } + + main_old_maps(); + switch(get_introscreen_levelname()) + { + case "london": + precachestring(&"LONDON_INTROSCREEN_LINE_1"); + precachestring(&"LONDON_INTROSCREEN_LINE_2"); + precachestring(&"LONDON_INTROSCREEN_LINE_3"); + precachestring(&"LONDON_INTROSCREEN_LINE_4"); + precachestring(&"LONDON_INTROSCREEN_LINE_5"); + func_193B(); + break; + + case "castle": + precachestring(&"CASTLE_INTROSCREEN_LINE_1"); + precachestring(&"CASTLE_INTROSCREEN_LINE_2"); + precachestring(&"CASTLE_INTROSCREEN_LINE_3"); + precachestring(&"CASTLE_INTROSCREEN_LINE_4"); + precachestring(&"CASTLE_INTROSCREEN_LINE_5"); + func_193B(); + break; + + case "prague": + precachestring(&"PRAGUE_INTROSCREEN_LINE_1"); + precachestring(&"PRAGUE_INTROSCREEN_LINE_2"); + precachestring(&"PRAGUE_INTROSCREEN_LINE_3"); + precachestring(&"PRAGUE_INTROSCREEN_LINE_4"); + precachestring(&"PRAGUE_INTROSCREEN_LINE_5"); + func_193B(); + break; + + case "prague_escape": + precachestring(&"PRAGUE_ESCAPE_INTROSCREEN_LINE_1"); + precachestring(&"PRAGUE_ESCAPE_INTROSCREEN_LINE_2"); + precachestring(&"PRAGUE_ESCAPE_INTROSCREEN_LINE_3"); + precachestring(&"PRAGUE_ESCAPE_INTROSCREEN_LINE_4"); + precachestring(&"PRAGUE_ESCAPE_INTROSCREEN_LINE_5"); + func_193B(); + break; + + case "payback": + precachestring(&"PAYBACK_INTROSCREEN_LINE_1"); + precachestring(&"PAYBACK_INTROSCREEN_LINE_2"); + precachestring(&"PAYBACK_INTROSCREEN_LINE_3"); + precachestring(&"PAYBACK_INTROSCREEN_LINE_4"); + precachestring(&"PAYBACK_INTROSCREEN_LINE_5"); + func_193B(); + break; + + case "example": + break; + + case "hamburg": + precachestring(&"TANKCOMMANDER_INTROSCREEN_LINE_1"); + precachestring(&"TANKCOMMANDER_INTROSCREEN_LINE_2"); + precachestring(&"TANKCOMMANDER_INTROSCREEN_LINE_3"); + precachestring(&"TANKCOMMANDER_INTROSCREEN_LINE_4"); + func_193B(); + break; + + case "rescue_2": + precachestring(&"RESCUE_2_INTROSCREEN_LINE_1"); + precachestring(&"RESCUE_2_INTROSCREEN_LINE_2"); + precachestring(&"RESCUE_2_INTROSCREEN_LINE_3"); + precachestring(&"RESCUE_2_INTROSCREEN_LINE_4"); + func_193B(); + break; + + default: + wait 0.05; + level notify("finished final intro screen fadein"); + wait 0.05; + level notify("starting final intro screen fadeout"); + wait 0.05; + level notify("controls_active"); + wait 0.05; + common_scripts\utility::flag_set("introscreen_complete"); + break; + } +} + +//Function Number: 2 +func_1934(param_00) +{ + var_01 = getarraykeys(param_00); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + var_03 = var_01[var_02]; + var_04 = 1; + var_05 = var_02 * var_04 + 1; + maps\_utility::func_614(var_05,::func_1940,param_00[var_03],param_00.size - var_02 - 1,var_04,var_03); + } +} + +//Function Number: 3 +introscreen_generic_black_fade_in(param_00,param_01,param_02) +{ + introscreen_generic_fade_in("black",param_00,param_01,param_02); +} + +//Function Number: 4 +introscreen_generic_white_fade_in(param_00,param_01,param_02) +{ + introscreen_generic_fade_in("white",param_00,param_01,param_02); +} + +//Function Number: 5 +introscreen_generic_fade_in(param_00,param_01,param_02,param_03) +{ + if(!isdefined(param_02)) + { + param_02 = 1.5; + } + + var_04 = newhudelem(); + var_04.x = 0; + var_04.y = 0; + var_04.horzalign = "fullscreen"; + var_04.vertalign = "fullscreen"; + var_04.foreground = 1; + var_04 setshader(param_00,640,480); + if(isdefined(param_03) && param_03 > 0) + { + var_04.alpha = 0; + var_04 fadeovertime(param_03); + var_04.alpha = 1; + wait param_03; + } + + wait param_01; + if(param_02 > 0) + { + var_04 fadeovertime(param_02); + } + + var_04.alpha = 0; + wait param_02; + setsaveddvar("com_cinematicEndInWhite",0); +} + +//Function Number: 6 +introscreen_create_line(param_00) +{ + var_01 = level.introstring.size; + var_02 = var_01 * 30; + if(level.console) + { + var_02 = var_02 - 60; + } + + level.introstring[var_01] = newhudelem(); + level.introstring[var_01].x = 0; + level.introstring[var_01].y = var_02; + level.introstring[var_01].alignx = "center"; + level.introstring[var_01].aligny = "middle"; + level.introstring[var_01].horzalign = "center"; + level.introstring[var_01].vertalign = "middle"; + level.introstring[var_01].sort = 1; + level.introstring[var_01].foreground = 1; + level.introstring[var_01].fontscale = 1.75; + level.introstring[var_01] settext(param_00); + level.introstring[var_01].alpha = 0; + level.introstring[var_01] fadeovertime(1.2); + level.introstring[var_01].alpha = 1; +} + +//Function Number: 7 +func_193A() +{ + for(var_00 = 0;var_00 < level.introstring.size;var_00++) + { + level.introstring[var_00] fadeovertime(1.5); + level.introstring[var_00].alpha = 0; + } + + wait 1.5; + for(var_00 = 0;var_00 < level.introstring.size;var_00++) + { + level.introstring[var_00] destroy(); + } +} + +//Function Number: 8 +func_193B(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + waittillframeend; + waittillframeend; + if(slamzoom_intro()) + { + return; + } + + if(func_195E()) + { + return; + } + + switch(get_introscreen_levelname()) + { + case "london": + london_intro(); + break; + + case "castle": + func_1942(); + break; + + case "prague": + prague_intro(); + break; + + case "prague_escape": + prague_escape_intro(); + break; + + case "payback": + payback_intro(); + break; + + case "rescue_2": + rescue_2_intro(); + break; + + case "hamburg": + func_1944(); + break; + } + + level.var_193C = newhudelem(); + level.var_193C.x = 0; + level.var_193C.y = 0; + level.var_193C.horzalign = "fullscreen"; + level.var_193C.vertalign = "fullscreen"; + level.var_193C.foreground = 1; + level.var_193C setshader("black",640,480); + level.player freezecontrols(1); + wait 0.05; + level.introstring = []; + if(isdefined(param_00)) + { + introscreen_create_line(param_00); + } + + if(isdefined(param_04)) + { + wait param_04; + } + else + { + wait 2; + } + + if(isdefined(param_01)) + { + introscreen_create_line(param_01); + } + + if(isdefined(param_02)) + { + introscreen_create_line(param_02); + } + + if(isdefined(param_03)) + { + if(isdefined(param_05)) + { + wait param_05; + } + else + { + wait 2; + } + } + + if(isdefined(param_03)) + { + introscreen_create_line(param_03); + } + + level notify("finished final intro screen fadein"); + if(isdefined(param_06)) + { + wait param_06; + } + else + { + wait 3; + } + + level.var_193C fadeovertime(1.5); + level.var_193C.alpha = 0; + level notify("starting final intro screen fadeout"); + level.player freezecontrols(0); + level notify("controls_active"); + func_193A(); + common_scripts\utility::flag_set("introscreen_complete"); +} + +//Function Number: 9 +_cornerlinethread(param_00,param_01,param_02,param_03) +{ + level notify("new_introscreen_element"); + if(!isdefined(level.intro_offset)) + { + level.intro_offset = 0; + } + else + { + level.intro_offset++; + } + + var_04 = func_193F(); + var_05 = newhudelem(); + var_05.x = 20; + var_05.y = var_04; + var_05.alignx = "left"; + var_05.aligny = "bottom"; + var_05.horzalign = "left"; + var_05.vertalign = "bottom"; + var_05.sort = 1; + var_05.foreground = 1; + var_05 settext(param_00); + var_05.alpha = 0; + var_05 fadeovertime(0.2); + var_05.alpha = 1; + var_05.hidewheninmenu = 1; + var_05.fontscale = 2; + var_05.color = (0.8,1,0.8); + var_05.font = "objective"; + var_05.glowcolor = (0.3,0.6,0.3); + var_05.glowalpha = 1; + var_06 = int(param_01 * param_02 * 1000 + 4000); + var_05 setpulsefx(30,var_06,700); + thread func_1941(var_05); + if(!isdefined(param_03)) + { + return; + } + + if(!isstring(param_03)) + { + return; + } + + if(param_03 != "date") + { + } +} + +//Function Number: 10 +func_193F() +{ + return level.intro_offset * 20 - 82; +} + +//Function Number: 11 +func_1940(param_00,param_01,param_02,param_03) +{ + thread _cornerlinethread(param_00,param_01,param_02,param_03); +} + +//Function Number: 12 +func_1941(param_00) +{ + wait level.linefeed_delay; + param_00 notify("destroying"); + level.intro_offset = undefined; + var_01 = 0.5; + param_00 fadeovertime(var_01); + param_00.alpha = 0; + wait var_01; + param_00 notify("destroy"); + param_00 destroy(); +} + +//Function Number: 13 +func_1942() +{ + level.player freezecontrols(1); + savegame("levelstart",&"AUTOSAVE_LEVELSTART","whatever",1); + thread introscreen_generic_black_fade_in(5); + var_00 = []; + func_1934(var_41); + wait 5; + common_scripts\utility::flag_set("introscreen_complete"); + level.player freezecontrols(0); +} + +//Function Number: 14 +london_intro() +{ + level.player freezecontrols(1); + savegame("levelstart",&"AUTOSAVE_LEVELSTART","whatever",1); + thread introscreen_generic_black_fade_in(5); + var_00 = []; + func_1934(var_41); + wait 5; + common_scripts\utility::flag_set("introscreen_complete"); + level.player freezecontrols(0); +} + +//Function Number: 15 +func_1944() +{ + savegame("levelstart",&"AUTOSAVE_LEVELSTART","whatever",1); + thread introscreen_generic_black_fade_in(3.5); + var_00 = []; + func_1934(var_41); + wait 3; + common_scripts\utility::flag_set("introscreen_complete"); +} + +//Function Number: 16 +prague_intro() +{ + level.player freezecontrols(1); + common_scripts\utility::flag_wait("fade_up"); + thread introscreen_generic_black_fade_in(4,5); + var_00 = []; + level.player common_scripts\utility::delaycall(4,::freezecontrols,0); + common_scripts\utility::flag_wait("city_reveal"); + maps\_utility::func_614(9.25,::func_1934,var_41); +} + +//Function Number: 17 +prague_escape_intro() +{ + level.player freezecontrols(1); + thread introscreen_generic_black_fade_in(8,0.5); + var_00 = []; + func_1934(var_41); + wait 8; + common_scripts\utility::flag_set("introscreen_complete"); + level.player freezecontrols(0); +} + +//Function Number: 18 +payback_intro() +{ + level.player freezecontrols(1); + savegame("levelstart",&"AUTOSAVE_LEVELSTART","whatever",1); + level notify("introscreen_prime_audio"); + level notify("introscreen_fade_start"); + wait 2; + level.player freezecontrols(0); + var_00 = 9; + var_01 = 30; + var_02 = 10; + level.hudtimestamp = var_00 * 60 * 60 + var_01 * 60 + var_02; + level.var_194A = gettime(); + var_03 = []; + func_1934(var_41); + wait 2; +} + +//Function Number: 19 +feedline_delay() +{ + wait 2; +} + +//Function Number: 20 +slamzoom_intro() +{ + var_00 = []; + if(!getdvarint("newintro")) + { + } + + var_01 = isdefined(level.customintroangles); + if(!isdefined(var_41[get_introscreen_levelname()])) + { + return 0; + } + + if(!isdefined(level.dontrevivehud)) + { + thread revive_ammo_counter(); + } + + thread hide_hud(); + thread weapon_pullout(); + level.player freezecontrols(1); + var_02 = ::feedline_delay; + var_03 = 16000; + var_04 = 1; + var_05 = 0; + var_06 = 0; + if(var_04) + { + var_07 = []; + switch(get_introscreen_levelname()) + { + case "london": + cinematicingamesync("estate_fade"); + var_07 = []; + var_03 = 4000; + setsaveddvar("sm_sunSampleSizeNear",0.6); + maps\_utility::func_614(0.5,::ramp_out_sunsample_over_time,0.9); + break; + var_41[var_07.size] + &"LONDON_INTROSCREEN_LINE_4" + var_41[var_07.size] + &"LONDON_INTROSCREEN_LINE_3" + var_41[var_07.size] + &"LONDON_INTROSCREEN_LINE_2" + var_41[var_07.size] + &"LONDON_INTROSCREEN_LINE_1" + break; + } + + maps\_utility::add_func(var_02); + maps\_utility::add_func(::func_1934,var_07); + thread maps\_utility::func_1950(); + } + + var_08 = level.player.origin; + level.player playersetstreamorigin(var_08); + level.player.origin = var_08 + (0,0,var_03); + var_09 = spawn("script_model",(69,69,69)); + var_09.origin = level.player.origin; + var_09 setmodel("tag_origin"); + if(var_01) + { + var_09.angles = (0,level.customintroangles[1],0); + } + else + { + var_09.angles = level.player.angles; + } + + level.player playerlinkto(var_09,undefined,1,0,0,0,0); + var_09.angles = (var_09.angles[0] + 89,var_09.angles[1],0); + wait var_05; + var_09 moveto(var_08 + (0,0,0),2,0,2); + wait 1; + wait 0.5; + if(var_01) + { + var_09 rotateto(level.customintroangles,0.5,0.3,0.2); + } + else + { + var_09 rotateto((var_09.angles[0] - 89,var_09.angles[1],0),0.5,0.3,0.2); + } + + if(!var_06) + { + savegame("levelstart",&"AUTOSAVE_LEVELSTART","whatever",1); + } + + wait 0.5; + common_scripts\utility::flag_set("pullup_weapon"); + wait 0.2; + level.player unlink(); + level.player freezecontrols(0); + level.player playerclearstreamorigin(); + thread common_scripts\utility::play_sound_in_space("ui_screen_trans_in",level.player.origin); + wait 0.2; + thread common_scripts\utility::play_sound_in_space("ui_screen_trans_out",level.player.origin); + wait 0.2; + common_scripts\utility::flag_set("introscreen_complete"); + wait 2; + var_09 delete(); + return 1; +} + +//Function Number: 21 +hide_hud() +{ + wait 0.05; + setsaveddvar("compass",0); + setsaveddvar("ammoCounterHide","1"); + setsaveddvar("hud_showstance","0"); + setsaveddvar("actionSlotsHide","1"); +} + +//Function Number: 22 +weapon_pullout() +{ + var_00 = level.player getweaponslistall()[0]; + level.player disableweapons(); + common_scripts\utility::flag_wait("pullup_weapon"); + level.player enableweapons(); +} + +//Function Number: 23 +revive_ammo_counter() +{ + common_scripts\utility::flag_wait("safe_for_objectives"); + if(!isdefined(level.nocompass)) + { + setsaveddvar("compass",1); + } + + setsaveddvar("ammoCounterHide","0"); + setsaveddvar("actionSlotsHide","0"); + setsaveddvar("hud_showstance","1"); +} + +//Function Number: 24 +ramp_out_sunsample_over_time(param_00,param_01) +{ + var_02 = getdvarfloat("sm_sunSampleSizeNear"); + if(!isdefined(param_01)) + { + param_01 = 0.25; + } + + var_03 = var_02 - param_01; + var_04 = param_00 * 20; + for(var_05 = 0;var_05 <= var_04;var_05++) + { + var_06 = var_05 / var_04; + var_06 = 1 - var_06; + var_07 = var_06 * var_03; + var_08 = param_01 + var_07; + setsaveddvar("sm_sunSampleSizeNear",var_08); + wait 0.05; + } +} + +//Function Number: 25 +get_introscreen_levelname() +{ + if(isdefined(level.introscreen_levelname)) + { + return level.introscreen_levelname; + } + + return level.script; +} + +//Function Number: 26 +main_old_maps() +{ + switch(get_introscreen_levelname()) + { + case "dcburning": + precachestring(&"DCBURNING_INTROSCREEN_1"); + precachestring(&"DCBURNING_INTROSCREEN_2"); + precachestring(&"DCBURNING_INTROSCREEN_3"); + precachestring(&"DCBURNING_INTROSCREEN_4"); + precachestring(&"DCBURNING_INTROSCREEN_5"); + func_193B(); + break; + } +} + +//Function Number: 27 +cliffhanger_intro_text() +{ + wait 17; + var_00 = []; + func_1934(var_41); +} + +//Function Number: 28 +func_195A() +{ + level.player disableweapons(); + thread func_195C(); + level.var_195B = 1; + level.player freezecontrols(1); + var_00 = newhudelem(); + var_00.x = 0; + var_00.y = 0; + var_00.horzalign = "fullscreen"; + var_00.vertalign = "fullscreen"; + var_00.foreground = 1; + var_00 setshader("black",640,480); + wait 4.25; + wait 3; + level notify("black_fading"); + level.var_195B = undefined; + var_00 fadeovertime(1.5); + var_00.alpha = 0; + wait 1.5; + common_scripts\utility::flag_set("introscreen_complete"); + level notify("introscreen_complete"); + level.player freezecontrols(0); + level.player enableweapons(); + wait 0.5; + setsaveddvar("compass",1); + setsaveddvar("ammoCounterHide","0"); + setsaveddvar("hud_showStance",1); + common_scripts\utility::flag_wait("player_exiting_start_trench"); + var_01 = []; + func_1934(var_41); +} + +//Function Number: 29 +func_195C() +{ + wait 0.05; + setsaveddvar("compass",0); + setsaveddvar("ammoCounterHide","1"); + setsaveddvar("hud_showStance",0); +} + +//Function Number: 30 +rescue_2_intro() +{ + var_00 = []; + thread introscreen_generic_black_fade_in(5.4,8); + func_1934(var_41); +} + +//Function Number: 31 +func_195E() +{ + switch(get_introscreen_levelname()) + { + case "dcburning": + func_195A(); + return 1; + } + + return 0; +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_inventory.gsc b/MW3/Xbox/SP/maps/_inventory.gsc new file mode 100644 index 0000000..597b1b4 --- /dev/null +++ b/MW3/Xbox/SP/maps/_inventory.gsc @@ -0,0 +1,132 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_inventory.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 6 + * Decompile Time: 92 ms + * Timestamp: 10/27/2023 2:34:23 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + level.inventory = []; +} + +//Function Number: 2 +func_3BBC(param_00,param_01) +{ + if(1) + { + return spawnstruct(); + } + + if(!isdefined(param_01)) + { + param_01 = 0; + } + + var_02 = newhudelem(); + var_02.alignx = "right"; + var_02.aligny = "top"; + var_02.horzalign = "right"; + var_02.vertalign = "top"; + var_02.alpha = 0; + var_02.index = level.inventory.size; + var_02.var_3BBD = param_01; + var_02 setshader(param_00,40,40); + level.inventory[var_02.index] = var_02; + func_3BC0(); + return var_02; +} + +//Function Number: 3 +func_3BBE() +{ + if(1) + { + return; + } + + self.var_3BBD = 0; + func_3BC0(); +} + +//Function Number: 4 +func_3BBF() +{ + if(1) + { + return; + } + + self.var_3BBD = 1; + func_3BC0(); +} + +//Function Number: 5 +func_3BC0() +{ + if(1) + { + return; + } + + var_00 = -18; + var_01 = 8; + var_02 = 42; + var_03 = 0; + for(var_04 = 0;var_04 < level.inventory.size;var_04++) + { + if(level.inventory[var_04].var_3BBD) + { + var_05 = var_01 + var_02 * var_03; + if(var_05 != level.inventory[var_04].y) + { + level.inventory[var_04].x = var_00; + if(level.inventory[var_04].alpha != 0) + { + level.inventory[var_04] moveovertime(0.3); + } + + level.inventory[var_04].y = var_05; + } + + if(level.inventory[var_04].alpha != 1) + { + level.inventory[var_04] fadeovertime(0.3); + level.inventory[var_04].alpha = 1; + } + + var_03++; + continue; + } + + level.inventory[var_04] fadeovertime(0.3); + level.inventory[var_04].alpha = 0; + } +} + +//Function Number: 6 +func_3BC1() +{ + if(1) + { + return; + } + + self destroy(); + var_00 = 0; + var_01 = level.inventory; + level.inventory = []; + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + if(isdefined(var_01[var_02])) + { + level.inventory[level.inventory.size] = var_01[var_02]; + } + } + + func_3BC0(); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_laststand.gsc b/MW3/Xbox/SP/maps/_laststand.gsc new file mode 100644 index 0000000..db0db99 --- /dev/null +++ b/MW3/Xbox/SP/maps/_laststand.gsc @@ -0,0 +1,1800 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_laststand.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 73 + * Decompile Time: 1281 ms + * Timestamp: 10/27/2023 2:34:03 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(isdefined(level.laststand_initialized)) + { + return; + } + + level.laststand_initialized = 1; + common_scripts\utility::flag_init("laststand_on"); + foreach(var_01 in level.players) + { + var_01 maps\_utility::ent_flag_init("laststand_downed"); + var_01 maps\_utility::ent_flag_init("laststand_pause_bleedout_timer"); + var_01 maps\_utility::ent_flag_init("laststand_proc_running"); + var_01.var_EF3 = spawnstruct(); + var_01.var_EF3.type_getup_lives = 0; + } + + precachestring(&"SCRIPT_COOP_BLEEDING_OUT_PARTNER"); + precachestring(&"SCRIPT_COOP_BLEEDING_OUT"); + precachestring(&"SCRIPT_COOP_REVIVING_PARTNER"); + precachestring(&"SCRIPT_COOP_REVIVING"); + precachestring(&"SCRIPT_COOP_REVIVE"); + precacheshellshock("laststand_getup"); + precacheitem("fnfiveseven"); + common_scripts\utility::flag_set("laststand_on"); + level.revive_hud_base_offset = 75; + if(!issplitscreen()) + { + level.revive_hud_base_offset = 120; + } + + level.revive_bar_offset = 15; + level.var_15F4 = 30; + level.laststand_hud_elements = []; + thread laststand_on_load_finished(); +} + +//Function Number: 2 +laststand_on_load_finished() +{ + level waittill("load_finished"); + if(laststand_get_type() == 2) + { + precacheshader("specialty_self_revive"); + } + + thread func_15F7(); + if(common_scripts\utility::flag_exist("slamzoom_finished") && !common_scripts\utility::flag("slamzoom_finished")) + { + common_scripts\utility::flag_wait("slamzoom_finished"); + } + + thread func_1609("laststand_player_state_changed"); + thread laststand_downed_player_manager(); + thread laststand_coop_hud_manager(); + thread laststand_getup_hud_init(); + thread laststand_on_mission_end(); +} + +//Function Number: 3 +func_15F7() +{ + if(laststand_get_type() == 2) + { + maps\_utility::add_global_spawn_function("axis",::ai_laststand_on_death); + } +} + +//Function Number: 4 +player_laststand_proc() +{ + if(!maps\_utility::laststand_enabled()) + { + return; + } + + if(maps\_utility::ent_flag("laststand_proc_running")) + { + return; + } + + if(!isdefined(self.var_15FB)) + { + self.var_15FB = self.maxhealth; + } + + if(!common_scripts\utility::flag("laststand_on")) + { + return; + } + + level endon("laststand_on"); + thread func_1600(); + switch(level.gameskill) + { + case 1: + case 0: + self.var_EF3.bleedout_time_default = 120; + level.laststand_stage2_multiplier = 0.5; + level.laststand_stage3_multiplier = 0.25; + break; + + case 2: + self.var_EF3.bleedout_time_default = 90; + level.laststand_stage2_multiplier = 0.66; + level.laststand_stage3_multiplier = 0.33; + break; + + case 3: + self.var_EF3.bleedout_time_default = 60; + level.laststand_stage2_multiplier = 0.5; + level.laststand_stage3_multiplier = 0.25; + break; + } + + maps\_utility::func_FA4("laststand_proc_running"); + self enabledeathshield(1); + maps\_utility::ent_flag_clear("laststand_downed"); + maps\_utility::ent_flag_clear("laststand_pause_bleedout_timer"); + self endon("death"); + var_00 = self.unique_id; + for(;;) + { + self waittill("deathshield",var_01,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09,var_0A); + if(isdefined(self.var_15FD) && self.var_15FD) + { + continue; + } + + if(maps\_utility::ent_flag("laststand_downed")) + { + continue; + } + + if(isdefined(self.laststand_revive_time) && gettime() - self.laststand_revive_time <= 1750) + { + continue; + } + + var_0B = []; + if(maps\_utility::func_E89() && laststand_downing_will_fail()) + { + var_0C = maps\_utility::get_other_player(self); + if(var_0C maps\_utility::ent_flag("laststand_downed")) + { + self.coop_death_reason = []; + self.coop_death_reason["attacker"] = var_03; + self.coop_death_reason["cause"] = var_06; + self.coop_death_reason["weapon_name"] = var_0B; + } + } + + if(!maps\_utility::func_E89()) + { + self.coop_death_reason = []; + self.coop_death_reason["attacker"] = var_03; + self.coop_death_reason["cause"] = var_06; + self.coop_death_reason["weapon_name"] = var_0B; + } + + level.down_player_requests[self.unique_id] = var_41; + try_crush_player(var_03,var_06); + level notify("request_player_downed",var_41["player"],self,var_41["damage"],var_01); + } +} + +//Function Number: 5 +func_1600() +{ + self endon("death"); + common_scripts\utility::flag_waitopen("laststand_on"); + maps\_utility::ent_flag_clear("laststand_proc_running"); + self enabledeathshield(0); +} + +//Function Number: 6 +laststand_downed_player_manager() +{ + if(maps\_utility::func_E89()) + { + thread func_1605(); + } + + level.laststand_recent_player_downed_time = 0; + for(;;) + { + level.down_player_requests = []; + level waittill("request_player_downed"); + waittillframeend; + var_00 = gettime(); + if(var_00 < level.laststand_recent_player_downed_time + level.player_downed_death_buffer_time * 1000) + { + continue; + } + + level.laststand_recent_player_downed_time = var_00; + var_01 = 0; + var_02 = undefined; + level.down_player_requests = maps\_utility::array_randomize(level.down_player_requests); + foreach(var_04 in level.down_player_requests) + { + if(var_04["damage"] >= var_01) + { + var_02 = var_04["player"]; + } + } + + var_02 thread func_160B(); + thread maps\_gameskill::func_1604(); + } +} + +//Function Number: 7 +func_1605() +{ + if(!maps\_utility::func_E89()) + { + return; + } + + level.var_1606 = getdvarint("player_useradius"); + level endon("special_op_terminated"); + level.var_1607 = []; + foreach(var_01 in level.players) + { + var_02 = spawn("script_model",var_01.origin + (0,0,28)); + var_02 setmodel("tag_origin"); + var_02 linkto(var_01,"tag_origin",(0,0,28),(0,0,0)); + var_02 sethintstring(&"SCRIPT_COOP_REVIVE"); + level.var_1607[var_01.unique_id] = var_02; + var_01 thread player_laststand_on_revive(); + } + + for(;;) + { + level waittill("laststand_player_state_changed"); + foreach(var_01 in level.players) + { + var_01 func_1664(maps\_utility::is_player_down(var_01)); + } + + if(maps\_utility::func_1608().size == level.players.size) + { + setsaveddvar("player_useradius",level.var_1606); + continue; + } + + setsaveddvar("player_useradius",128); + } +} + +//Function Number: 8 +func_1609(param_00) +{ + level endon("special_op_terminated"); + foreach(var_02 in level.players) + { + var_02 endon("death"); + } + + for(;;) + { + foreach(var_02 in level.players) + { + var_02 thread func_160A("laststand_downed",param_00); + } + + level waittill(param_00); + } +} + +//Function Number: 9 +func_160A(param_00,param_01) +{ + level endon("special_op_terminated"); + level endon(param_01); + self endon("death"); + if(maps\_utility::ent_flag(param_00)) + { + maps\_utility::func_FA3(param_00); + } + else + { + maps\_utility::func_121C(param_00); + } + + level notify(param_01); +} + +//Function Number: 10 +func_160B() +{ + if(!isalive(self)) + { + return; + } + + level endon("special_op_terminated"); + self endon("death"); + player_laststand_set_down_attributes(); + if(maps\_utility::func_E89()) + { + thread func_1614(); + thread func_162C(); + thread player_laststand_downed_icon(); + } + + maps\_utility::add_wait(::maps\_utility::func_FA3,"laststand_downed"); + maps\_utility::add_wait(::maps\_utility::waittill_msg,"coop_bled_out"); + maps\_utility::do_wait_any(); + self notify("end_func_player_laststand_downed_icon"); + if(maps\_utility::ent_flag("laststand_downed")) + { + player_laststand_kill(); + return; + } + + player_laststand_set_original_attributes(); +} + +//Function Number: 11 +player_laststand_on_revive() +{ + self endon("death"); + level endon("special_op_terminated"); + var_00 = player_get_revive_ent(); + var_01 = 0; + for(;;) + { + var_00 waittill("trigger",var_02); + if(maps\_utility::is_player_down(var_02)) + { + continue; + } + + self.laststand_savior = var_02; + if(maps\_utility::is_player_down(self) && var_02 player_laststand_is_reviving(self)) + { + laststand_freeze_players(1,var_02,self); + level.laststand_recent_player_downed_time = 0; + wait 0.1; + if(!maps\_utility::is_player_down(self) || !var_02 player_laststand_is_reviving(self)) + { + var_02 player_laststand_revive_buddy_cleanup(self); + continue; + } + + level.bars = []; + level.bars["p1"] = maps\_hud_util::createclientprogressbar(level.player,level.revive_hud_base_offset + level.revive_bar_offset); + level.bars["p2"] = maps\_hud_util::createclientprogressbar(level.player2,level.revive_hud_base_offset + level.revive_bar_offset); + var_03 = randomfloat(1) > 0.33; + if(var_03) + { + var_02 notify("so_reviving"); + } + + var_01 = 0; + var_04 = 1.5; + while(maps\_utility::is_player_down(self) && !maps\_utility::is_player_down(var_02) && var_02 player_laststand_is_reviving(self)) + { + maps\_utility::func_FA4("laststand_pause_bleedout_timer"); + foreach(var_06 in level.bars) + { + var_06 maps\_hud_util::updatebar(var_01 / var_04); + } + + wait 0.05; + var_01 = var_01 + 0.05; + if(maps\_utility::is_player_down(self) && var_01 > var_04) + { + if(!var_03) + { + var_02 notify("so_revived"); + } + + var_02 notify("so_revive_success"); + player_laststand_revive_self(); + break; + } + } + + var_02 player_laststand_revive_buddy_cleanup(self); + } + } +} + +//Function Number: 12 +player_laststand_is_reviving(param_00) +{ + if(!self usebuttonpressed()) + { + return 0; + } + + if(isdefined(param_00.laststand_savior) && param_00.laststand_savior == self) + { + return 1; + } + + return 0; +} + +//Function Number: 13 +player_laststand_revive_self() +{ + self.laststand_revive_time = gettime(); + func_1654(); + maps\_utility::ent_flag_clear("laststand_downed"); + self.coop_death_reason = undefined; + thread maps\_gameskill::func_1604(); + self notify("revived"); +} + +//Function Number: 14 +player_laststand_revive_buddy_cleanup(param_00) +{ + level notify("revive_bars_killed"); + revive_hud_cleanup_bars(); + if(isdefined(param_00) && isalive(param_00)) + { + param_00.laststand_savior = undefined; + param_00 maps\_utility::ent_flag_clear("laststand_pause_bleedout_timer"); + } + + if(isdefined(self) && isalive(self)) + { + laststand_freeze_players(0,self,param_00); + } +} + +//Function Number: 15 +laststand_freeze_players(param_00,param_01,param_02) +{ + param_02 = maps\_utility::get_other_player(self); + if(param_00) + { + param_01 freezecontrols(1); + param_01 disableweapons(); + param_01 disableweaponswitch(); + param_02 freezecontrols(1); + param_02 disableweapons(); + return; + } + + param_01 freezecontrols(0); + param_01 enableweapons(); + param_01 enableweaponswitch(); + param_02 freezecontrols(0); + if(!maps\_utility::is_player_down_and_out(param_02)) + { + param_02 enableweapons(); + } +} + +//Function Number: 16 +func_1614() +{ + self endon("death"); + self endon("revived"); + level endon("special_op_terminated"); + wait 1; + self notify("so_downed"); + thread player_laststand_downed_nag_button(0.05); +} + +//Function Number: 17 +player_laststand_downed_nag_button(param_00) +{ + self endon("death"); + self endon("revived"); + level endon("special_op_terminated"); + if(isdefined(param_00) && param_00 > 0) + { + wait param_00; + } + + self notifyonplayercommand("nag","weapnext"); + for(;;) + { + if(!can_show_nag_prompt()) + { + wait 0.05; + continue; + } + + if(nag_should_draw_hud()) + { + thread nag_prompt_show(); + thread func_161B(); + } + + var_01 = common_scripts\utility::waittill_any_timeout(level.coop_revive_nag_hud_refreshtime,"nag","nag_cancel"); + if(var_01 == "nag") + { + self.lastrevivenagbuttonpresstime = gettime(); + thread func_1667(); + thread maps\_specialops_battlechatter::func_EF1(); + } + + wait 0.05; + } +} + +//Function Number: 18 +nag_should_draw_hud() +{ + var_00 = level.coop_revive_nag_hud_refreshtime * 1000; + if(isdefined(self) && isdefined(self.nag_hud_on)) + { + return 0; + } + else if(!isdefined(self.lastrevivenagbuttonpresstime)) + { + return 1; + } + else if(gettime() - self.lastrevivenagbuttonpresstime < var_00) + { + return 0; + } + + return 1; +} + +//Function Number: 19 +nag_prompt_show() +{ + if(!isdefined(self)) + { + return; + } + + self.nag_hud_on = 1; + var_00 = 0.05; + var_01 = &"SPECIAL_OPS_REVIVE_NAG_HINT"; + var_02 = func_161A(); + var_02.alpha = 0; + var_02 settext(var_01); + var_02 fadeovertime(var_00); + var_02.alpha = 1; + waittill_disable_nag(); + self.nag_hud_on = undefined; + var_02 fadeovertime(var_00); + var_02.alpha = 0; + var_02 common_scripts\utility::delaycall(var_00 + 0.05,::destroy); +} + +//Function Number: 20 +func_161A() +{ + var_00 = newclienthudelem(self); + var_00.x = 0; + var_00.y = 50; + var_00.alignx = "center"; + var_00.aligny = "middle"; + var_00.horzalign = "center"; + var_00.vertalign = "middle"; + var_00.fontscale = 1; + var_00.color = (1,1,1); + var_00.font = "hudsmall"; + var_00.glowcolor = (0.3,0.6,0.3); + var_00.glowalpha = 0; + var_00.foreground = 1; + var_00.hidewheninmenu = 1; + var_00.hidewhendead = 1; + return var_00; +} + +//Function Number: 21 +func_161B() +{ + self endon("nag"); + while(maps\_utility::is_player_down(self) && can_show_nag_prompt()) + { + wait 0.05; + } + + self notify("nag_cancel"); +} + +//Function Number: 22 +can_show_nag_prompt() +{ + if(isdefined(level.hide_nag_prompt) && level.hide_nag_prompt) + { + return 0; + } + + var_00 = maps\_utility::get_other_player(self); + if(var_00 player_laststand_is_reviving(self)) + { + return 0; + } + + if(!maps\_specialops_battlechatter::can_say_current_nag_event_type()) + { + return 0; + } + + return 1; +} + +//Function Number: 23 +laststand_coop_hud_manager() +{ + if(!maps\_utility::func_E89()) + { + return; + } + + level endon("special_op_terminated"); + var_00 = []; + foreach(var_02 in level.players) + { + var_00[var_02.unique_id] = maps\_utility::is_player_down(var_02); + } + + laststand_coop_hud_create(); + for(;;) + { + level waittill("laststand_player_state_changed"); + waittillframeend; + foreach(var_02 in level.players) + { + var_05 = maps\_utility::get_other_player(var_02); + var_06 = var_02 func_1625(var_00); + var_07 = var_05 func_1625(var_00); + if(var_06) + { + if(maps\_utility::is_player_down(var_02)) + { + var_02.revive_text_friend.alpha = 0; + var_02.revive_timer_friend.alpha = 0; + var_02.revive_text_local thread maps\_specialops::func_1419(); + var_02.revive_timer_local thread maps\_specialops::func_1419(); + var_02.revive_text_local.alpha = 1; + var_02.revive_timer_local.alpha = 1; + var_02.revive_text_local thread maps\_specialops::func_1410(); + var_02.revive_timer_local thread maps\_specialops::func_1410(); + } + else if(maps\_utility::is_player_down(var_05)) + { + var_02.revive_text_local.alpha = 0; + var_02.revive_timer_local.alpha = 0; + var_02.revive_text_friend thread maps\_specialops::func_1419(); + var_02.revive_timer_friend thread maps\_specialops::func_1419(); + var_02.revive_text_friend.alpha = 1; + var_02.revive_timer_friend.alpha = 1; + var_02.revive_text_friend thread maps\_specialops::func_1410(); + var_02.revive_timer_friend thread maps\_specialops::func_1410(); + } + else + { + var_02 player_laststand_hud_hide(); + } + } + + if(var_07) + { + if(!maps\_utility::is_player_down(var_02)) + { + if(maps\_utility::is_player_down(var_05)) + { + var_02.revive_text_local.alpha = 0; + var_02.revive_timer_local.alpha = 0; + var_02.revive_text_friend thread maps\_specialops::func_1419(); + var_02.revive_timer_friend thread maps\_specialops::func_1419(); + var_02.revive_text_friend.alpha = 1; + var_02.revive_timer_friend.alpha = 1; + var_02.revive_text_friend thread maps\_specialops::func_1410(); + var_02.revive_timer_friend thread maps\_specialops::func_1410(); + continue; + } + + var_02 player_laststand_hud_hide(); + } + } + } + + foreach(var_02 in level.players) + { + var_00[var_02.unique_id] = maps\_utility::is_player_down(var_02); + } + } +} + +//Function Number: 24 +laststand_coop_hud_create() +{ + foreach(var_01 in level.players) + { + var_01.revive_text_local = var_01 maps\_hud_util::createclientfontstring("hudsmall",1); + var_01.revive_text_local maps\_hud_util::setpoint("CENTER",undefined,0,level.revive_hud_base_offset); + var_01.revive_text_local settext(&"SCRIPT_COOP_BLEEDING_OUT"); + var_01.revive_text_friend = var_01 maps\_hud_util::createclientfontstring("hudsmall",1); + var_01.revive_text_friend maps\_hud_util::setpoint("CENTER",undefined,0,level.revive_hud_base_offset); + var_01.revive_text_friend settext(&"SCRIPT_COOP_BLEEDING_OUT_PARTNER"); + var_01.revive_timer_local = var_01 maps\_hud_util::createclienttimer("hudsmall",1.2); + var_01.revive_timer_local maps\_hud_util::setpoint("CENTER",undefined,0,level.revive_hud_base_offset + level.revive_bar_offset); + var_01.revive_timer_friend = var_01 maps\_hud_util::createclienttimer("hudsmall",1.2); + var_01.revive_timer_friend maps\_hud_util::setpoint("CENTER",undefined,0,level.revive_hud_base_offset + level.revive_bar_offset); + var_01 player_laststand_hud_hide(); + level.laststand_hud_elements[level.laststand_hud_elements.size] = var_01.revive_text_local; + level.laststand_hud_elements[level.laststand_hud_elements.size] = var_01.revive_text_friend; + level.laststand_hud_elements[level.laststand_hud_elements.size] = var_01.revive_timer_local; + level.laststand_hud_elements[level.laststand_hud_elements.size] = var_01.revive_timer_friend; + } +} + +//Function Number: 25 +player_laststand_hud_hide() +{ + self.revive_text_local.alpha = 0; + self.revive_text_friend.alpha = 0; + self.revive_timer_local.alpha = 0; + self.revive_timer_friend.alpha = 0; +} + +//Function Number: 26 +func_1625(param_00) +{ + var_01 = maps\_utility::is_player_down(self); + var_02 = param_00[self.unique_id]; + return var_01 != var_02; +} + +//Function Number: 27 +laststand_getup_hud_init() +{ + if(laststand_get_type() != 2) + { + return; + } + + foreach(var_01 in level.players) + { + var_01.laststand_getup_fast = 0; + } + + func_1628(); +} + +//Function Number: 28 +func_1628() +{ + foreach(var_01 in level.players) + { + var_02 = level.revive_hud_base_offset + level.var_15F4; + var_01.var_1629 = maps\_hud_util::createclientprogressbar(var_01,var_02,"white","black",130,12); + var_01 player_laststand_getup_bar_set_fill(0.5); + level.laststand_hud_elements[level.laststand_hud_elements.size] = var_01.var_1629; + var_01.var_162A = newclienthudelem(var_01); + var_01.var_162A.hidden = 0; + var_01.var_162A.elemtype = "icon"; + var_01.var_162A.hidewheninmenu = 1; + var_01.var_162A.archived = 0; + var_01.var_162A.x = -93; + var_01.var_162A.y = var_02; + var_01.var_162A.alignx = "center"; + var_01.var_162A.aligny = "middle"; + var_01.var_162A.horzalign = "center"; + var_01.var_162A.vertalign = "middle"; + var_01.var_162A.children = []; + var_01.var_162A.elemtype = "icon"; + var_01.var_162A setshader("specialty_self_revive",28,28); + level.laststand_hud_elements[level.laststand_hud_elements.size] = var_01.var_162A; + var_01.var_1629 maps\_hud_util::hidebar(1); + var_01.var_162A.alpha = 0; + } +} + +//Function Number: 29 +func_162C() +{ + self endon("end_func_player_laststand_downed_icon"); + self endon("death"); + self endon("revived"); + level endon("special_op_terminated"); + foreach(var_01 in level.players) + { + if(var_01 == self) + { + var_01.revive_timer_local settimer(self.var_EF3.bleedout_time_default - 1); + continue; + } + + var_01.revive_timer_friend settimer(self.var_EF3.bleedout_time_default - 1); + } + + thread player_laststand_countdown_timer(self.var_EF3.bleedout_time_default); + var_03 = self.var_EF3.bleedout_time_default; + foreach(var_01 in level.players) + { + if(var_01 == self) + { + var_01.revive_text_local.color = self.revive_text_local.color; + var_01.revive_timer_local.color = self.revive_text_local.color; + continue; + } + + var_01.revive_text_friend.color = var_01.revive_text_local.color; + var_01.revive_timer_friend.color = var_01.revive_text_local.color; + } + + waittillframeend; + while(var_03) + { + foreach(var_01 in level.players) + { + if(var_01 == self) + { + var_07 = var_01.revive_text_local; + var_08 = var_01.revive_timer_local; + } + else + { + var_07 = var_01.revive_text_friend; + var_08 = var_01.revive_timer_friend; + } + + var_09 = var_07.color; + var_0A = get_coop_downed_hud_color(self.var_EF3.bleedout_time,self.var_EF3.bleedout_time_default,0,var_01 == self); + var_07.color = var_0A; + var_08.color = var_0A; + if(distance(var_0A,var_09) > 0.001) + { + if(distance(var_0A,var_01.coop_icon_color_dying) <= 0.001) + { + var_07.var_1413 = 1; + var_08.var_1413 = 1; + } + + var_07 thread maps\_specialops::func_1410(); + var_08 thread maps\_specialops::func_1410(); + } + } + + wait 1; + var_03 = var_03 - 1; + } +} + +//Function Number: 30 +player_laststand_downed_icon() +{ + self endon("end_func_player_laststand_downed_icon"); + self endon("death"); + self endon("revived"); + level endon("special_op_terminated"); + waittillframeend; + var_00 = maps\_utility::get_other_player(self); + var_00 maps\_coop::friendlyhudicon_downed(); + while(self.var_EF3.bleedout_time > 0) + { + maps\_utility::func_FA3("laststand_pause_bleedout_timer"); + var_00 maps\_coop::friendlyhudicon_update(get_coop_downed_hud_color(self.var_EF3.bleedout_time,self.var_EF3.bleedout_time_default)); + wait 0.05; + } +} + +//Function Number: 31 +player_laststand_countdown_timer(param_00) +{ + self endon("death"); + self endon("revived"); + level endon("special_op_terminated"); + self.var_EF3.bleedout_time = param_00; + while(self.var_EF3.bleedout_time > 0) + { + if(maps\_utility::ent_flag("laststand_pause_bleedout_timer")) + { + foreach(var_02 in level.players) + { + if(var_02 == self) + { + var_02.revive_timer_local.alpha = 0; + continue; + } + + var_02.revive_timer_friend.alpha = 0; + } + + maps\_utility::func_FA3("laststand_pause_bleedout_timer"); + if(self.var_EF3.bleedout_time >= 1) + { + foreach(var_02 in level.players) + { + if(var_02 == self) + { + var_02.revive_timer_local settimer(self.var_EF3.bleedout_time - 1); + continue; + } + + var_02.revive_timer_friend settimer(self.var_EF3.bleedout_time - 1); + } + } + } + else + { + foreach(var_02 in level.players) + { + if(var_02 == self) + { + var_02.revive_timer_local.alpha = 1; + continue; + } + + if(!maps\_utility::is_player_down(var_02)) + { + var_02.revive_timer_friend.alpha = 1; + } + } + } + + wait 0.05; + self.var_EF3.bleedout_time = self.var_EF3.bleedout_time - 0.05; + } + + self.var_EF3.bleedout_time = 0; + maps\_specialops::func_1407("@DEADQUOTE_SO_BLED_OUT","ui_bled_out"); + thread maps\_specialops::so_dialog_mission_failed_bleedout(); + self notify("coop_bled_out"); +} + +//Function Number: 32 +get_coop_downed_hud_color(param_00,param_01,param_02,param_03) +{ + if(isdefined(param_03) && param_03) + { + var_04 = self; + } + else + { + var_04 = maps\_utility::get_other_player(self); + } + + if(!isdefined(param_02)) + { + param_02 = 1; + } + + if(param_02 && coop_downed_hud_should_blink()) + { + if(self.blinkstate == 1) + { + return var_04.var_15D8; + } + } + + if(param_00 < param_01 * level.laststand_stage3_multiplier) + { + return var_04.coop_icon_color_dying; + } + + if(param_00 < param_01 * level.laststand_stage2_multiplier) + { + return var_04.var_15D6; + } + + return var_04.coop_icon_color_downed; +} + +//Function Number: 33 +coop_downed_hud_should_blink() +{ + var_00 = maps\_utility::get_other_player(self); + if(var_00 player_laststand_is_reviving(self)) + { + return 0; + } + + if(isdefined(self.lastrevivenagbuttonpresstime)) + { + if(gettime() - self.lastrevivenagbuttonpresstime < level.coop_icon_blinktime * 1000) + { + return 1; + } + } + + return 0; +} + +//Function Number: 34 +laststand_hud_destroy() +{ + if(isdefined(level.laststand_hud_elements)) + { + foreach(var_01 in level.laststand_hud_elements) + { + if(isdefined(var_01)) + { + var_01 notify("destroying"); + var_01 maps\_hud_util::destroyelem(); + } + } + } + + level.laststand_hud_elements = undefined; +} + +//Function Number: 35 +player_laststand_set_down_attributes() +{ + self endon("death"); + self notify("player_downed"); + self.ignorerandombulletdamage = 1; + self enableinvulnerability(); + maps\_utility::func_FA4("laststand_downed"); + self.laststand = 1; + self.health = 2; + self.maxhealth = self.var_15FB; + self.ignoreme = 1; + self disableusability(); + self disableweaponswitch(); + self disableoffhandweapons(); + self disableweapons(); + if(!isdefined(self.var_8096)) + { + self.var_8096 = 1; + } + else + { + self.var_8096++; + } + + if(isdefined(self.placingsentry)) + { + self notify("sentry_placement_canceled"); + } + + thread func_163E(); + if(laststand_downing_will_fail()) + { + player_laststand_kill(); + return; + } + + thread player_laststand_set_down_part1(); +} + +//Function Number: 36 +player_laststand_set_original_attributes() +{ + self.ignorerandombulletdamage = 0; + maps\_utility::ent_flag_clear("laststand_downed"); + self.laststand = 0; + self.achieve_downed_kills = undefined; + self.var_1637 = undefined; + if(maps\_utility::func_E89()) + { + var_00 = maps\_utility::get_other_player(self); + var_00 maps\_coop::friendlyhudicon_normal(); + } + + self disableweapons(); + func_1638(); + self.health = self.maxhealth; + self.ignoreme = 0; + self setstance("stand"); + self enableusability(); + self enableoffhandweapons(); + self enableweaponswitch(); + self enableweapons(); + self notify("not_in_last_stand"); + wait 1; + self disableinvulnerability(); +} + +//Function Number: 37 +func_1638() +{ + if(isdefined(self.forced_pistol)) + { + self takeweapon(self.forced_pistol); + self.forced_pistol = undefined; + } + + if(isdefined(self.preincap_pistol)) + { + self setweaponammoclip(self.preincap_pistol,self.var_163B); + self setweaponammostock(self.preincap_pistol,self.var_163C); + } + + if(player_can_restore_weapon(self.var_163D)) + { + self switchtoweapon(self.var_163D); + } + else + { + var_00 = self getweaponslistprimaries(); + self switchtoweapon(var_00[0]); + } + + self.var_163D = undefined; +} + +//Function Number: 38 +func_163E() +{ + self endon("revived"); + self endon("death"); + level endon("special_op_terminated"); + if(common_scripts\utility::flag("special_op_terminated")) + { + return; + } + + if(!isalive(self)) + { + return; + } + + for(;;) + { + var_00 = vehicle_getarray(); + foreach(var_02 in var_00) + { + if(isdefined(var_02.dont_crush_player) && var_02.dont_crush_player) + { + continue; + } + + var_03 = var_02 vehicle_getspeed(); + if(abs(var_03) == 0) + { + continue; + } + + if(self istouching(var_02)) + { + var_02 maps\_specialops::func_144D(self,"MOD_CRUSH"); + return; + } + } + + wait 0.05; + } +} + +//Function Number: 39 +player_laststand_set_down_part1() +{ + self endon("revived"); + self endon("death"); + level endon("special_op_terminated"); + if(laststand_get_type() != 2) + { + wait 0.3; + } + + thread player_laststand_force_switch_to_pistol(); + if(laststand_get_type() == 2) + { + if(get_lives_remaining() > 0) + { + if(!isdefined(self.laststand_count)) + { + self.laststand_count = 1; + } + else + { + self.laststand_count++; + } + + if(self.laststand_count <= 9999) + { + thread func_1642(); + self waittill("laststand_getup_failed"); + } + + if(!maps\_utility::func_E89() || maps\_utility::is_player_down_and_out(maps\_utility::get_other_player(self))) + { + player_laststand_kill(); + return; + } + } + else + { + waittillframeend; + } + } + else + { + wait 0.25; + self disableinvulnerability(); + thread player_laststand_down_draw_attention(); + self waittill("damage"); + } + + thread player_laststand_set_down_part2(); +} + +//Function Number: 40 +func_1642() +{ + self endon("revived"); + self endon("death"); + self endon("laststand_getup_failed"); + level endon("special_op_terminated"); + thread player_laststand_getup_sequence_clean_up(); + thread player_laststand_getup_sequence_catch_kills(); + thread func_1649(); + thread func_164A(); + thread player_laststand_effect(); + thread player_laststand_getup_sequence_ignore(); + var_00 = self.laststand_count - 1 * 0; + var_01 = max(0.5 - var_00,0.2); + player_laststand_getup_bar_set_fill(var_01); + self.var_1629 maps\_hud_util::hidebar(0); + self.var_162A.alpha = 1; + wait 2; + self disableinvulnerability(); + self.last_damage_time = gettime(); + for(;;) + { + var_02 = 0; + if(isdefined(self.laststand_getup_fast) && self.laststand_getup_fast) + { + var_02 = 1; + } + else if(gettime() - self.last_damage_time > 3000) + { + var_02 = 1; + } + + var_03 = common_scripts\utility::ter_op(var_02,0.01,0.0025); + player_laststand_getup_bar_adjust(var_03); + wait 0.05; + } +} + +//Function Number: 41 +player_laststand_getup_sequence_clean_up() +{ + level endon("special_op_terminated"); + self endon("death"); + var_00 = common_scripts\utility::waittill_any_return("player_down_and_out","revived"); + if(isdefined(var_00) && var_00 == "player_down_and_out") + { + self.ignoreme = 1; + } + + update_lives_remaining(0); + thread func_1646(0.5); + self.laststand_getup_fast = 0; + if(isdefined(self.var_1645)) + { + badplace_delete(self.var_1645); + self.var_1645 = undefined; + } +} + +//Function Number: 42 +func_1646(param_00) +{ + level endon("special_op_terminated"); + self endon("player_downed"); + wait param_00; + self.var_1629 maps\_hud_util::hidebar(1); + self.var_162A.alpha = 0; +} + +//Function Number: 43 +player_laststand_getup_sequence_ignore() +{ + self endon("revived"); + self endon("death"); + self endon("laststand_getup_failed"); + level endon("special_op_terminated"); + self.ignoreme = 1; + wait 0.25; + self.ignoreme = 0; +} + +//Function Number: 44 +player_laststand_getup_sequence_catch_kills() +{ + self endon("revived"); + self endon("death"); + self endon("laststand_getup_failed"); + level endon("special_op_terminated"); + for(;;) + { + self waittill("revive_kill"); + player_laststand_getup_bar_adjust(1); + } +} + +//Function Number: 45 +func_1649() +{ + self endon("revived"); + self endon("death"); + self endon("laststand_getup_failed"); + level endon("special_op_terminated"); + for(;;) + { + common_scripts\utility::waittill_any("damage","deathshield"); + player_laststand_getup_bar_adjust(-0.1); + self.last_damage_time = gettime(); + wait 0.2; + } +} + +//Function Number: 46 +func_164A() +{ + self endon("revived"); + self endon("death"); + self endon("laststand_getup_failed"); + level endon("special_op_terminated"); + self.var_1645 = self.unique_id + "_ls_badplace"; + for(;;) + { + badplace_cylinder(self.var_1645,90,self.origin,120,120,"axis"); + wait 90; + badplace_delete(self.var_1645); + } +} + +//Function Number: 47 +player_laststand_getup_bar_adjust(param_00) +{ + param_00 = clamp(param_00,-1,1); + var_01 = clamp(self.var_1629.bar.frac + param_00,0,1); + player_laststand_getup_bar_set_fill(var_01); + if(var_01 == 1) + { + player_laststand_revive_self(); + return; + } + + if(var_01 == 0) + { + self notify("laststand_getup_failed"); + } +} + +//Function Number: 48 +player_laststand_getup_bar_set_fill(param_00) +{ + var_01 = (1,0.4,0.4); + var_02 = (1,0,0); + self.var_1629.bar.color = vectorlerp(var_02,var_01,param_00); + self.var_1629 maps\_hud_util::updatebar(param_00); +} + +//Function Number: 49 +player_laststand_set_down_part2() +{ + self.var_1637 = 1; + self notify("player_down_and_out"); + self disableweapons(); + thread player_dying_effect(); + self.ignoreme = 1; + self.ignorerandombulletdamage = 1; + self enableinvulnerability(); +} + +//Function Number: 50 +player_laststand_force_switch_to_pistol() +{ + self.var_163D = self getcurrentweapon(); + var_00 = func_165F(); + self.preincap_pistol = undefined; + self.var_163C = 0; + self.var_163B = 0; + var_01 = undefined; + if(isdefined(var_00)) + { + self.preincap_pistol = var_00; + self.var_163C = self getweaponammostock(var_00); + self.var_163B = self getweaponammoclip(var_00); + var_01 = var_00; + } + else if(isdefined(level.coop_incap_weapon)) + { + var_02 = isdefined(level.coop_incap_weapon) && self hasweapon(level.coop_incap_weapon); + if(!var_02) + { + self.forced_pistol = level.coop_incap_weapon; + self giveweapon(level.coop_incap_weapon); + } + else + { + self.preincap_pistol = level.coop_incap_weapon; + self.var_163C = self getweaponammostock(var_00); + self.var_163B = self getweaponammoclip(var_00); + } + + var_01 = level.coop_incap_weapon; + } + else + { + var_01 = "fnfiveseven"; + self.forced_pistol = var_01; + self giveweapon(var_01); + } + + self setweaponammoclip(var_01,weaponclipsize(var_01)); + self setweaponammostock(var_01,weaponmaxammo(var_01)); + thread func_1650(); + self switchtoweapon(var_01); + self enableweapons(); +} + +//Function Number: 51 +func_1650() +{ + level endon("special_op_terminated"); + self endon("death"); + self endon("player_down_and_out"); + self endon("not_in_last_stand"); + self endon("revived"); + self endon("weapon_change"); + for(;;) + { + self waittill("reload"); + var_00 = self getcurrentweapon(); + self setweaponammostock(var_00,weaponmaxammo(var_00)); + } +} + +//Function Number: 52 +player_laststand_down_draw_attention() +{ + self endon("death"); + self endon("revived"); + self endon("damage"); + notifyoncommand("draw_attention","+attack"); + notifyoncommand("draw_attention","+attack_akimbo_accessible"); + common_scripts\utility::waittill_any_timeout(4,"draw_attention","player_down_and_out"); + if(maps\_utility::is_player_down_and_out(self)) + { + return; + } + + self.ignoreme = 0; + self.ignorerandombulletdamage = 0; +} + +//Function Number: 53 +ai_laststand_on_death() +{ + level endon("special_op_terminated"); + self waittill("death",var_00,var_01,var_02); + var_03 = 0; + if(isdefined(var_00) && isalive(var_00) && isplayer(var_00) && maps\_utility::is_player_down(var_00)) + { + if(isdefined(var_02) && weaponclass(var_02) == "pistol") + { + var_03 = 1; + } + else if(isdefined(var_01) && var_01 == "MOD_MELEE") + { + var_03 = 1; + } + } + + if(var_03) + { + var_00 notify("revive_kill"); + } +} + +//Function Number: 54 +player_dying_effect() +{ + self endon("death"); + self endon("revived"); + if(!maps\_utility::ent_flag_exist("laststand_dying_effect")) + { + maps\_utility::ent_flag_init("laststand_dying_effect"); + } + else if(maps\_utility::ent_flag("laststand_dying_effect")) + { + return; + } + + maps\_utility::func_FA4("laststand_dying_effect"); + player_shock_effect("default",60,1); +} + +//Function Number: 55 +func_1654() +{ + if(maps\_utility::ent_flag_exist("laststand_dying_effect")) + { + maps\_utility::ent_flag_clear("laststand_dying_effect"); + } + + self stopshellshock(); +} + +//Function Number: 56 +player_laststand_effect() +{ + self endon("death"); + self endon("revived"); + self endon("player_down_and_out"); + self notify("laststand_effect"); + self endon("laststand_effect"); + player_shock_effect("laststand_getup",60,1); +} + +//Function Number: 57 +player_shock_effect(param_00,param_01,param_02,param_03) +{ + self endon("death"); + level endon("special_op_terminated"); + if(!isdefined(param_00) || !isdefined(param_01)) + { + return; + } + + if(isdefined(param_03)) + { + var_04 = strtok(param_03," "); + foreach(var_06 in var_04) + { + self endon(var_06); + } + } + + for(;;) + { + self shellshock(param_00,param_01); + wait param_01; + if(isdefined(param_02) && !param_02) + { + break; + } + } +} + +//Function Number: 58 +laststand_get_type() +{ + var_00 = (isdefined(level.var_1658) && level.var_1658 == 0) || level.var_1658 == 1 || level.var_1658 == 2; + if(var_00) + { + return level.var_1658; + } + + return 0; +} + +//Function Number: 59 +func_1659() +{ + return laststand_get_type() == 2 && get_lives_remaining() > 0; +} + +//Function Number: 60 +laststand_downing_will_fail() +{ + if(maps\_utility::func_E89()) + { + var_00 = maps\_utility::get_other_player(self); + var_01 = (maps\_utility::is_player_down(var_00) && !var_00 func_1659()) || maps\_utility::is_player_down_and_out(var_00); + if(var_01 && !func_1659()) + { + return 1; + } + + return 0; + } + + if(!func_1659()) + { + return 1; + } + + return 0; +} + +//Function Number: 61 +get_lives_remaining() +{ + if(laststand_get_type() == 2 && isdefined(self.var_EF3.type_getup_lives)) + { + return max(0,self.var_EF3.type_getup_lives); + } + + return 0; +} + +//Function Number: 62 +update_lives_remaining(param_00) +{ + param_00 = common_scripts\utility::ter_op(isdefined(param_00),param_00,0); + self.var_EF3.type_getup_lives = max(0,common_scripts\utility::ter_op(param_00,self.var_EF3.type_getup_lives + 1,self.var_EF3.type_getup_lives - 1)); + self notify("laststand_lives_updated"); +} + +//Function Number: 63 +player_laststand_kill() +{ + level endon("special_op_terminated"); + thread func_1654(); + self enabledeathshield(0); + self disableinvulnerability(); + self enablehealthshield(0); + self.achieve_downed_kills = undefined; + waittillframeend; + self kill(); +} + +//Function Number: 64 +try_crush_player(param_00,param_01) +{ + if(!isdefined(param_00)) + { + return; + } + + if(isdefined(param_00.dont_crush_player) && param_00.dont_crush_player) + { + return; + } + + if(!isdefined(param_01)) + { + return; + } + + if(param_01 != "MOD_CRUSH") + { + return; + } + + if(isdefined(param_00.vehicletype)) + { + var_02 = param_00 vehicle_getspeed(); + if(abs(var_02) == 0) + { + return; + } + } + + if(common_scripts\utility::flag("special_op_terminated")) + { + return; + } + + param_00 maps\_specialops::func_144D(self,param_01); +} + +//Function Number: 65 +func_165F(param_00) +{ + var_01 = self getweaponslistprimaries(); + if(isdefined(param_00)) + { + foreach(var_03 in var_01) + { + if(var_03 == param_00) + { + return var_03; + } + } + } + + var_05 = self getcurrentweapon(); + if(weaponclass(var_05) == "pistol") + { + return var_05; + } + + foreach(var_03 in var_01) + { + if(weaponclass(var_03) == "pistol") + { + return var_03; + } + } + + return undefined; +} + +//Function Number: 66 +laststand_on_mission_end() +{ + level waittill("special_op_terminated"); + revive_destroy_use_targets(); + revive_hud_cleanup_bars(); + laststand_hud_destroy(); +} + +//Function Number: 67 +revive_hud_cleanup_bars() +{ + if(isdefined(level.bars)) + { + foreach(var_01 in level.bars) + { + if(isdefined(var_01)) + { + var_01 notify("destroying"); + var_01 maps\_hud_util::destroyelem(); + } + } + + level.bars = undefined; + } +} + +//Function Number: 68 +waittill_disable_nag() +{ + level endon("special_op_terminated"); + common_scripts\utility::waittill_any("nag","nag_cancel","death","revived"); +} + +//Function Number: 69 +player_can_restore_weapon(param_00) +{ + if(!isdefined(param_00)) + { + return 0; + } + + if(param_00 == "none") + { + return 0; + } + + if(!self hasweapon(param_00)) + { + return 0; + } + + return 1; +} + +//Function Number: 70 +func_1664(param_00) +{ + var_01 = player_get_revive_ent(); + if(param_00) + { + var_01 makeusable(); + } + else + { + var_01 makeunusable(); + } + + return var_01; +} + +//Function Number: 71 +player_get_revive_ent() +{ + return level.var_1607[self.unique_id]; +} + +//Function Number: 72 +revive_destroy_use_targets() +{ + if(isdefined(level.var_1607)) + { + foreach(var_01 in level.var_1607) + { + var_01 delete(); + } + } +} + +//Function Number: 73 +func_1667() +{ + self notify("player_downed_hud_blinkstate"); + self endon("player_downed_hud_blinkstate"); + self endon("death"); + self endon("revived"); + self.blinkstate = 1; + for(;;) + { + wait level.coop_icon_blinkcrement; + if(self.blinkstate == 1) + { + self.blinkstate = 0; + continue; + } + + self.blinkstate = 1; + } +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_leak.gsc b/MW3/Xbox/SP/maps/_leak.gsc new file mode 100644 index 0000000..c8f9943 --- /dev/null +++ b/MW3/Xbox/SP/maps/_leak.gsc @@ -0,0 +1,236 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_leak.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 11 + * Decompile Time: 169 ms + * Timestamp: 10/27/2023 2:34:24 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + var_00 = getentarray("leaking","targetname"); + if(!var_00.size) + { + return; + } + + var_00 thread precachefx(); + var_00 thread methodsinit(); + common_scripts\utility::array_thread(var_00,::leak_setup); +} + +//Function Number: 2 +leak_setup() +{ + switch(self.script_noteworthy) + { + case "barrel_oil": + leak_barrel_setup(); + break; + + case "barrel_acid": + leak_barrel_setup(); + break; + + case "barrel_sludge": + leak_barrel_setup(); + break; + + case "barrel_water": + leak_barrel_setup(); + break; + } + + thread func_3BC7(); +} + +//Function Number: 3 +leak_barrel_setup() +{ + self.a = self.origin; + self.up = anglestoup(self.angles); + var_00 = anglestoup((0,90,0)); + self.var_1AE7 = self.a + self.up * 22; + self.a = self.a + self.up * 1.5; + self.b = self.a + self.up * 41.4; + self.volume = 25861.65; + self.curvol = self.volume; + var_01 = vectordot(self.up,var_00); + var_02 = self.b; + if(var_01 < 0) + { + var_02 = self.a; + } + + var_01 = abs(1 - abs(var_01)); + self.lowz = physicstrace(self.var_1AE7,self.var_1AE7 + (0,0,-80))[2]; + self.highz = var_02[2] + var_01 * 14; +} + +//Function Number: 4 +func_3BC7() +{ + self setcandamage(1); + self endon("drained"); + for(;;) + { + self waittill("damage",var_00,var_01,var_02,var_03,var_04); + if(var_04 == "MOD_MELEE" || var_04 == "MOD_IMPACT") + { + continue; + } + + var_03 = self [[ level._leak_methods[var_04] ]](var_03,var_04); + if(!isdefined(var_03)) + { + continue; + } + + thread func_3BC9(var_03); + } +} + +//Function Number: 5 +func_3BC9(param_00) +{ + var_01 = pointonsegmentnearesttopoint(self.a,self.b,param_00); + var_02 = undefined; + if(var_01 == self.a) + { + var_02 = self.up * -1; + } + else if(var_01 == self.b) + { + var_02 = self.up; + } + else + { + var_02 = vectorfromlinetopoint(self.a,self.b,param_00); + } + + var_03 = param_00[2] - self.lowz; + if(var_03 < 0.02) + { + var_03 = 0; + } + + var_04 = var_03 / self.highz - self.lowz * self.volume; + if(self.curvol > var_04) + { + while(self.curvol > var_04) + { + playfx(level._effect["leak_interactive_leak"][self.script_noteworthy],param_00,var_02); + self.curvol = self.curvol - 100; + wait 0.1; + } + + playfx(level._effect["leak_interactive_drain"][self.script_noteworthy],param_00,var_02); + } + + if(self.curvol / self.volume <= 0.05) + { + self notify("drained"); + } +} + +//Function Number: 6 +methodsinit() +{ + level._leak_methods = []; + level._leak_methods["MOD_UNKNOWN"] = ::leak_calc_splash; + level._leak_methods["MOD_PISTOL_BULLET"] = ::leak_calc_ballistic; + level._leak_methods["MOD_RIFLE_BULLET"] = ::leak_calc_ballistic; + level._leak_methods["MOD_GRENADE"] = ::leak_calc_splash; + level._leak_methods["MOD_GRENADE_SPLASH"] = ::leak_calc_splash; + level._leak_methods["MOD_PROJECTILE"] = ::leak_calc_splash; + level._leak_methods["MOD_PROJECTILE_SPLASH"] = ::leak_calc_splash; + level._leak_methods["MOD_MELEE"] = ::func_3BCC; + level._leak_methods["MOD_HEAD_SHOT"] = ::func_3BCC; + level._leak_methods["MOD_CRUSH"] = ::func_3BCC; + level._leak_methods["MOD_TELEFRAG"] = ::func_3BCC; + level._leak_methods["MOD_FALLING"] = ::func_3BCC; + level._leak_methods["MOD_SUICIDE"] = ::func_3BCC; + level._leak_methods["MOD_TRIGGER_HURT"] = ::leak_calc_splash; + level._leak_methods["MOD_EXPLOSIVE"] = ::leak_calc_splash; + level._leak_methods["MOD_IMPACT"] = ::func_3BCC; +} + +//Function Number: 7 +leak_calc_ballistic(param_00,param_01) +{ + return param_00; +} + +//Function Number: 8 +leak_calc_splash(param_00,param_01) +{ + var_02 = vectornormalize(vectorfromlinetopoint(self.a,self.b,param_00)); + param_00 = pointonsegmentnearesttopoint(self.a,self.b,param_00); + return param_00 + var_02 * 4; +} + +//Function Number: 9 +func_3BCC(param_00,param_01) +{ + return undefined; +} + +//Function Number: 10 +func_3BCD(param_00,param_01) +{ +} + +//Function Number: 11 +precachefx() +{ + for(var_00 = 0;var_00 < self.size;var_00++) + { + if(self[var_00].script_noteworthy != "barrel_oil") + { + continue; + } + + level._effect["leak_interactive_leak"][self[var_00].script_noteworthy] = loadfx("impacts/barrel_leak"); + level._effect["leak_interactive_drain"][self[var_00].script_noteworthy] = loadfx("impacts/barrel_drain"); + break; + } + + for(var_00 = 0;var_00 < self.size;var_00++) + { + if(self[var_00].script_noteworthy != "barrel_acid") + { + continue; + } + + level._effect["leak_interactive_leak"][self[var_00].script_noteworthy] = loadfx("impacts/barrel_leak"); + level._effect["leak_interactive_drain"][self[var_00].script_noteworthy] = loadfx("impacts/barrel_drain"); + break; + } + + for(var_00 = 0;var_00 < self.size;var_00++) + { + if(self[var_00].script_noteworthy != "barrel_water") + { + continue; + } + + level._effect["leak_interactive_leak"][self[var_00].script_noteworthy] = loadfx("impacts/barrel_leak"); + level._effect["leak_interactive_drain"][self[var_00].script_noteworthy] = loadfx("impacts/barrel_drain"); + break; + } + + for(var_00 = 0;var_00 < self.size;var_00++) + { + if(self[var_00].script_noteworthy != "barrel_sludge") + { + continue; + } + + level._effect["leak_interactive_leak"][self[var_00].script_noteworthy] = loadfx("impacts/barrel_leak"); + level._effect["leak_interactive_drain"][self[var_00].script_noteworthy] = loadfx("impacts/barrel_drain"); + break; + } +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_lights.gsc b/MW3/Xbox/SP/maps/_lights.gsc new file mode 100644 index 0000000..fc77a9b --- /dev/null +++ b/MW3/Xbox/SP/maps/_lights.gsc @@ -0,0 +1,871 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_lights.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 22 + * Decompile Time: 455 ms + * Timestamp: 10/27/2023 2:33:17 AM +*******************************************************************/ + +//Function Number: 1 +func_1207(param_00) +{ + return param_00.classname == "light_spot" || param_00.classname == "light_omni" || param_00.classname == "light"; +} + +//Function Number: 2 +func_1208(param_00,param_01,param_02,param_03) +{ + self endon("kill_flicker"); + var_04 = param_00; + var_05 = 0; + maps\_utility::ent_flag_init("stop_flicker"); + for(;;) + { + if(maps\_utility::ent_flag("stop_flicker")) + { + wait 0.05; + continue; + } + + var_06 = var_04; + var_04 = param_00 + param_01 - param_00 * randomfloat(1); + if(param_02 != param_03) + { + var_05 = var_05 + randomfloatrange(param_02,param_03); + } + else + { + var_05 = var_05 + param_02; + } + + if(var_05 == 0) + { + var_05 = var_05 + 1E-07; + } + + var_07 = var_06 - var_04 * 1 / var_05; + while(var_05 > 0 && !maps\_utility::ent_flag("stop_flicker")) + { + self setlightcolor(var_04 + var_07 * var_05); + wait 0.05; + var_05 = var_05 - 0.05; + } + } +} + +//Function Number: 3 +kill_flicker_when_damaged(param_00) +{ + var_01 = getentarray(param_00,"script_noteworthy"); + var_02 = undefined; + var_03 = 1E+08; + foreach(var_05 in var_01) + { + var_06 = distance(self.origin,var_05.origin); + if(var_06 < var_03) + { + var_02 = var_05; + var_03 = var_06; + } + } + + if(isdefined(var_02)) + { + var_02 waittill("damage",var_08,var_09,var_0A,var_0B,var_0C,var_0D,var_0E); + self notify("kill_flicker"); + wait 0.05; + self setlightcolor((0,0,0)); + } +} + +//Function Number: 4 +generic_pulsing() +{ + if(getdvar("r_reflectionProbeGenerate") == "1") + { + self setlightintensity(0); + return; + } + + var_00 = self getlightintensity(); + var_01 = 0.05; + var_02 = var_00; + var_03 = 0.3; + var_04 = 0.6; + var_05 = var_00 - var_01 / var_03 / 0.05; + var_06 = var_00 - var_01 / var_04 / 0.05; + for(;;) + { + var_07 = 0; + while(var_07 < var_04) + { + var_02 = var_02 - var_06; + var_02 = clamp(var_02,0,100); + self setlightintensity(var_02); + var_07 = var_07 + 0.05; + wait 0.05; + } + + wait 1; + var_07 = 0; + while(var_07 < var_03) + { + var_02 = var_02 + var_05; + var_02 = clamp(var_02,0,100); + self setlightintensity(var_02); + var_07 = var_07 + 0.05; + wait 0.05; + } + + wait 0.5; + } +} + +//Function Number: 5 +generic_double_strobe() +{ + if(getdvar("r_reflectionProbeGenerate") == "1") + { + self setlightintensity(0); + return; + } + + var_00 = self getlightintensity(); + var_01 = 0.05; + var_02 = 0; + var_03 = undefined; + var_04 = undefined; + var_05 = 0; + var_06 = []; + if(isdefined(self.script_noteworthy)) + { + var_07 = getentarray(self.script_noteworthy,"targetname"); + for(var_08 = 0;var_08 < var_07.size;var_08++) + { + if(func_1207(var_07[var_08])) + { + var_05 = 1; + var_06[var_06.size] = var_07[var_08]; + } + + if(var_07[var_08].classname == "script_model") + { + var_03 = var_07[var_08]; + var_04 = getent(var_03.target,"targetname"); + var_02 = 1; + } + } + } + + for(;;) + { + self setlightintensity(var_01); + if(var_02) + { + var_03 hide(); + var_04 show(); + } + + wait 0.8; + self setlightintensity(var_00); + if(var_02) + { + var_03 show(); + var_04 hide(); + } + + wait 0.1; + self setlightintensity(var_01); + if(var_02) + { + var_03 hide(); + var_04 show(); + } + + wait 0.12; + self setlightintensity(var_00); + if(var_02) + { + var_03 show(); + var_04 hide(); + } + + wait 0.1; + } +} + +//Function Number: 6 +func_120C(param_00) +{ + var_01 = getentarray("light_flicker_model","targetname"); + var_02 = []; + var_03 = maps\_utility::getclosest(param_00,var_01); + if(isdefined(var_03)) + { + var_02[0] = var_03; + } + + return var_02; +} + +//Function Number: 7 +generic_flickering() +{ + if(getdvar("r_reflectionProbeGenerate") == "1") + { + self setlightintensity(0); + return; + } + + self endon("stop_dynamic_light_behavior"); + self endon("death"); + self.linked_models = 0; + self.var_120F = undefined; + self.unlit_models = undefined; + self.linked_lights = 0; + self.linked_light_ents = []; + self.linked_prefab_ents = undefined; + self.linked_things = []; + if(isdefined(self.script_linkto)) + { + self.linked_prefab_ents = common_scripts\utility::get_linked_ents(); + foreach(var_01 in self.linked_prefab_ents) + { + if(isdefined(var_01.script_noteworthy) && var_01.script_noteworthy == "on") + { + if(!isdefined(self.var_120F)) + { + self.var_120F[0] = var_01; + } + else + { + self.var_120F[self.var_120F.size] = var_01; + } + + continue; + } + + if(isdefined(var_01.script_noteworthy) && var_01.script_noteworthy == "off") + { + if(!isdefined(self.unlit_models)) + { + self.unlit_models[0] = var_01; + } + else + { + self.unlit_models[self.unlit_models.size] = var_01; + } + + self.unlit_model = var_01; + continue; + } + + if(func_1207(var_01)) + { + self.linked_lights = 1; + self.linked_light_ents[self.linked_light_ents.size] = var_01; + } + } + + self.linked_models = 1; + } + + if(isdefined(self.script_noteworthy)) + { + self.linked_things = getentarray(self.script_noteworthy,"targetname"); + } + + if(!self.linked_things.size && !isdefined(self.linked_prefab_ents)) + { + self.linked_things = func_120C(self.origin); + } + + for(var_03 = 0;var_03 < self.linked_things.size;var_03++) + { + if(func_1207(self.linked_things[var_03])) + { + self.linked_lights = 1; + self.linked_light_ents[self.linked_light_ents.size] = self.linked_things[var_03]; + } + + if(self.linked_things[var_03].classname == "script_model") + { + var_04 = self.linked_things[var_03]; + if(!isdefined(self.var_120F)) + { + self.var_120F[0] = var_04; + } + else + { + self.var_120F[self.var_120F.size] = var_04; + } + + if(!isdefined(self.unlit_models)) + { + self.unlit_models[0] = getent(var_04.target,"targetname"); + } + else + { + self.unlit_models[self.unlit_models.size] = getent(var_04.target,"targetname"); + } + + self.linked_models = 1; + } + } + + if(isdefined(self.var_120F)) + { + foreach(var_04 in self.var_120F) + { + if(isdefined(var_04) && isdefined(var_04.script_fxid)) + { + var_04.effect = common_scripts\utility::createoneshoteffect(var_04.script_fxid); + var_06 = (0,0,0); + var_07 = (0,0,0); + if(isdefined(var_04.script_parameters)) + { + var_08 = strtok(var_04.script_parameters,", "); + if(var_08.size < 3) + { + } + else if(var_08.size == 6) + { + var_09 = float(var_08[0]); + var_0A = float(var_08[1]); + var_0B = float(var_08[2]); + var_06 = (var_09,var_0A,var_0B); + var_09 = float(var_08[3]); + var_0A = float(var_08[4]); + var_0B = float(var_08[5]); + var_07 = (var_09,var_0A,var_0B); + } + else + { + var_09 = float(var_0B[0]); + var_0A = float(var_0A[1]); + var_0B = float(var_09[2]); + var_06 = (var_09,var_0A,var_0B); + } + } + + var_04.effect.v["origin"] = var_04.origin + var_06; + var_04.effect.v["angles"] = var_04.angles + var_07; + } + } + } + + thread generic_flicker_msg_watcher(); + thread generic_flicker(); +} + +//Function Number: 8 +generic_flicker_msg_watcher() +{ + maps\_utility::ent_flag_init("flicker_on"); + if(isdefined(self.script_light_startnotify) && self.script_light_startnotify != "nil") + { + for(;;) + { + level waittill(self.script_light_startnotify); + maps\_utility::func_FA4("flicker_on"); + if(isdefined(self.script_light_stopnotify) && self.script_light_stopnotify != "nil") + { + level waittill(self.script_light_stopnotify); + maps\_utility::ent_flag_clear("flicker_on"); + } + } + + return; + } + + maps\_utility::func_FA4("flicker_on"); +} + +//Function Number: 9 +func_121B() +{ + var_00 = self getlightintensity(); + if(!maps\_utility::ent_flag("flicker_on")) + { + if(self.linked_models) + { + if(isdefined(self.var_120F)) + { + foreach(var_02 in self.var_120F) + { + var_02 hide(); + if(isdefined(var_02.effect)) + { + var_02.effect common_scripts\utility::pauseeffect(); + } + } + } + + if(isdefined(self.unlit_models)) + { + foreach(var_05 in self.unlit_models) + { + var_05 show(); + } + } + } + + self setlightintensity(0); + if(self.linked_lights) + { + for(var_07 = 0;var_07 < self.linked_light_ents.size;var_07++) + { + self.linked_light_ents[var_07] setlightintensity(0); + } + } + + maps\_utility::func_121C("flicker_on"); + self setlightintensity(var_00); + if(self.linked_lights) + { + for(var_07 = 0;var_07 < self.linked_light_ents.size;var_07++) + { + self.linked_light_ents[var_07] setlightintensity(var_00); + } + } + + if(self.linked_models) + { + if(isdefined(self.var_120F)) + { + foreach(var_02 in self.var_120F) + { + var_02 show(); + if(isdefined(var_02.effect)) + { + var_02.effect maps\_utility::restarteffect(); + } + } + } + + if(isdefined(self.unlit_models)) + { + foreach(var_05 in self.unlit_models) + { + var_05 hide(); + } + + return; + } + } + } +} + +//Function Number: 10 +generic_flicker() +{ + self endon("stop_dynamic_light_behavior"); + self endon("death"); + var_00 = 0.2; + var_01 = 1.5; + var_02 = self getlightintensity(); + var_03 = 0; + var_04 = var_02; + var_05 = 0; + while(isdefined(self)) + { + func_121B(); + for(var_05 = randomintrange(1,10);var_05;var_05--) + { + func_121B(); + wait randomfloatrange(0.05,0.1); + if(var_04 > 0.2) + { + var_04 = randomfloatrange(0,0.3); + if(self.linked_models) + { + foreach(var_07 in self.var_120F) + { + var_07 hide(); + if(isdefined(var_07.effect)) + { + var_07.effect common_scripts\utility::pauseeffect(); + } + } + } + + if(isdefined(self.unlit_models)) + { + foreach(var_0A in self.unlit_models) + { + var_0A show(); + } + } + } + else + { + var_04 = var_02; + if(self.linked_models) + { + if(isdefined(self.var_120F)) + { + foreach(var_07 in self.var_120F) + { + var_07 show(); + if(isdefined(var_07.effect)) + { + var_07.effect maps\_utility::restarteffect(); + } + } + } + + if(isdefined(self.unlit_models)) + { + foreach(var_0A in self.unlit_models) + { + var_0A hide(); + maps\_audio::func_121F("light_flicker_on",var_0A); + } + } + } + } + + self setlightintensity(var_04); + if(self.linked_lights) + { + for(var_10 = 0;var_10 < self.linked_light_ents.size;var_10++) + { + self.linked_light_ents[var_10] setlightintensity(var_04); + } + } + } + + func_121B(); + self setlightintensity(var_02); + if(self.linked_lights) + { + for(var_10 = 0;var_10 < self.linked_light_ents.size;var_10++) + { + self.linked_light_ents[var_10] setlightintensity(var_02); + } + } + + if(self.linked_models) + { + if(isdefined(self.var_120F)) + { + foreach(var_07 in self.var_120F) + { + var_07 show(); + if(isdefined(var_07.effect)) + { + var_07.effect maps\_utility::restarteffect(); + } + } + } + + if(isdefined(self.unlit_models)) + { + foreach(var_0A in self.unlit_models) + { + var_0A hide(); + } + } + } + + wait randomfloatrange(var_00,var_01); + } +} + +//Function Number: 11 +generic_spot() +{ + level common_scripts\utility::waitframe(); +} + +//Function Number: 12 +flickerlightintensity(param_00,param_01) +{ + var_02 = self getlightintensity(); + var_03 = 0; + var_04 = var_02; + var_05 = 0; + for(;;) + { + for(var_05 = randomintrange(1,10);var_05;var_05--) + { + wait randomfloatrange(0.05,0.1); + if(var_04 > 0.2) + { + var_04 = randomfloatrange(0,0.3); + } + else + { + var_04 = var_02; + } + + self setlightintensity(var_04); + } + + self setlightintensity(var_02); + wait randomfloatrange(param_00,param_01); + } +} + +//Function Number: 13 +burning_trash_fire() +{ + var_00 = self getlightintensity(); + var_01 = var_00; + for(;;) + { + var_02 = randomfloatrange(var_00 * 0.7,var_00 * 1.2); + var_03 = randomfloatrange(0.3,0.6); + var_03 = var_03 * 20; + for(var_04 = 0;var_04 < var_03;var_04++) + { + var_05 = var_02 * var_04 / var_03 + var_01 * var_03 - var_04 / var_03; + self setlightintensity(var_05); + wait 0.05; + } + + var_01 = var_02; + } +} + +//Function Number: 14 +strobelight(param_00,param_01,param_02,param_03) +{ + var_04 = 360 / param_02; + var_05 = 0; + for(;;) + { + var_06 = sin(var_05 * var_04) * 0.5 + 0.5; + self setlightintensity(param_00 + param_01 - param_00 * var_06); + wait 0.05; + var_05 = var_05 + 0.05; + if(var_05 > param_02) + { + var_05 = var_05 - param_02; + } + + if(isdefined(param_03)) + { + if(common_scripts\utility::flag(param_03)) + { + return; + } + } + } +} + +//Function Number: 15 +changelightcolorto(param_00,param_01,param_02,param_03) +{ + if(!isdefined(param_02)) + { + param_02 = 0; + } + + if(!isdefined(param_03)) + { + param_03 = 0; + } + + thread changelightcolortoworkerthread(param_00,param_01,param_02,param_03); +} + +//Function Number: 16 +changelightcolortoworkerthread(param_00,param_01,param_02,param_03) +{ + var_04 = self getlightcolor(); + var_05 = 1 / param_01 * 2 - param_02 + param_03; + var_06 = 0; + if(var_06 < param_02) + { + var_07 = var_05 / param_02; + while(var_06 < param_02) + { + var_08 = var_07 * var_06 * var_06; + self setlightcolor(vectorlerp(var_04,param_00,var_08)); + wait 0.05; + var_06 = var_06 + 0.05; + } + } + + while(var_06 < param_01 - param_03) + { + var_08 = var_05 * 2 * var_06 - param_02; + self setlightcolor(vectorlerp(var_04,param_00,var_08)); + wait 0.05; + var_06 = var_06 + 0.05; + } + + var_06 = param_01 - var_06; + if(var_06 > 0) + { + var_07 = var_05 / param_03; + while(var_06 > 0) + { + var_08 = 1 - var_07 * var_06 * var_06; + self setlightcolor(vectorlerp(var_04,param_00,var_08)); + wait 0.05; + var_06 = var_06 - 0.05; + } + } + + self setlightcolor(param_00); +} + +//Function Number: 17 +television() +{ + thread tv_changes_intensity(); + thread tv_changes_color(); +} + +//Function Number: 18 +tv_changes_intensity() +{ + self endon("light_off"); + var_00 = self getlightintensity(); + var_01 = var_00; + for(;;) + { + var_02 = randomfloatrange(var_00 * 0.7,var_00 * 1.2); + var_03 = randomfloatrange(0.3,1.2); + var_03 = var_03 * 20; + for(var_04 = 0;var_04 < var_03;var_04++) + { + var_05 = var_02 * var_04 / var_03 + var_01 * var_03 - var_04 / var_03; + self setlightintensity(var_05); + wait 0.05; + } + + var_01 = var_02; + } +} + +//Function Number: 19 +tv_changes_color() +{ + self endon("light_off"); + var_00 = 0.5; + var_01 = 0.5; + var_02 = []; + var_03 = []; + for(var_04 = 0;var_04 < 3;var_04++) + { + var_02[var_04] = 0; + var_03[var_04] = 0; + } + + for(;;) + { + for(var_04 = 0;var_04 < var_02.size;var_04++) + { + var_03[var_04] = var_02[var_04]; + var_02[var_04] = randomfloat(var_00) + var_01; + } + + var_05 = randomfloatrange(0.3,1.2); + var_05 = var_05 * 20; + for(var_04 = 0;var_04 < var_05;var_04++) + { + var_06 = []; + for(var_07 = 0;var_07 < var_02.size;var_07++) + { + var_06[var_07] = var_02[var_07] * var_04 / var_05 + var_03[var_07] * var_05 - var_04 / var_05; + } + + self setlightcolor((var_06[0],var_06[1],var_06[2])); + wait 0.05; + } + } +} + +//Function Number: 20 +sun_shadow_trigger(param_00) +{ + var_01 = 1; + if(isdefined(param_00.script_duration)) + { + var_01 = param_00.script_duration; + } + + for(;;) + { + param_00 waittill("trigger",var_02); + param_00 set_sun_shadow_params(var_01); + } +} + +//Function Number: 21 +set_sun_shadow_params(param_00) +{ + var_01 = getdvarint("sm_sunenable",1); + var_02 = getdvarfloat("sm_sunshadowscale",1); + var_03 = getdvarint("sm_spotlimit",4); + var_04 = getdvarfloat("sm_sunsamplesizenear",0.25); + var_05 = getdvarfloat("sm_qualityspotshadow",1); + if(isdefined(self.var_122C)) + { + var_01 = self.var_122C; + } + + if(isdefined(self.script_sunshadowscale)) + { + var_02 = self.script_sunshadowscale; + } + + if(isdefined(self.var_122E)) + { + var_03 = self.var_122E; + } + + if(isdefined(self.script_sunsamplesizenear)) + { + var_04 = self.script_sunsamplesizenear; + } + + var_04 = min(max(0.016,var_04),32); + if(isdefined(self.script_qualityspotshadow)) + { + var_05 = self.script_qualityspotshadow; + } + + var_06 = getdvarint("sm_sunenable",1); + var_07 = getdvarfloat("sm_sunshadowscale",1); + var_08 = getdvarint("sm_spotlimit",4); + var_09 = getdvarint("sm_qualityspotshadow",1); + setsaveddvar("sm_sunenable",var_01); + setsaveddvar("sm_sunshadowscale",var_02); + setsaveddvar("sm_spotlimit",var_03); + setsaveddvar("sm_qualityspotshadow",var_05); + lerp_sunsamplesizenear_overtime(var_04,param_00); +} + +//Function Number: 22 +lerp_sunsamplesizenear_overtime(param_00,param_01) +{ + level notify("changing_sunsamplesizenear"); + level endon("changing_sunsamplesizenear"); + var_02 = getdvarfloat("sm_sunSampleSizeNear",0.25); + if(param_00 == var_02) + { + return; + } + + var_03 = param_00 - var_02; + var_04 = param_01 / 0.05; + if(var_04 > 0) + { + var_05 = var_03 / var_04; + var_06 = var_02; + for(var_07 = 0;var_07 < var_04;var_07++) + { + var_06 = var_06 + var_05; + setsaveddvar("sm_sunSampleSizeNear",var_06); + wait 0.05; + } + } + + setsaveddvar("sm_sunSampleSizeNear",param_00); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_load.gsc b/MW3/Xbox/SP/maps/_load.gsc new file mode 100644 index 0000000..30b83c1 --- /dev/null +++ b/MW3/Xbox/SP/maps/_load.gsc @@ -0,0 +1,5046 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_load.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 171 + * Decompile Time: 2904 ms + * Timestamp: 10/27/2023 2:33:49 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(!isdefined(level.func)) + { + level.func = []; + } + + level.func["setsaveddvar"] = ::setsaveddvar; + level.func["useanimtree"] = ::useanimtree; + level.func["setanim"] = ::setanim; + level.func["setanimknob"] = ::setanimknob; + level.func["clearanim"] = ::clearanim; + level.func["kill"] = ::kill; + set_early_level(); + level.global_callbacks = []; + level.global_callbacks["_autosave_stealthcheck"] = ::global_empty_callback; + level.global_callbacks["_patrol_endon_spotted_flag"] = ::global_empty_callback; + level.global_callbacks["_spawner_stealth_default"] = ::global_empty_callback; + level.global_callbacks["_idle_call_idle_func"] = ::global_empty_callback; + if(!isdefined(level.visionthermaldefault)) + { + level.visionthermaldefault = "cheat_bw"; + } + + visionsetthermal(level.visionthermaldefault); + visionsetpain("near_death"); + level.func["damagefeedback"] = ::maps\_damagefeedback::updatedamagefeedback; + common_scripts\utility::array_thread(getentarray("script_model_pickup_claymore","classname"),::claymore_pickup_think_global); + common_scripts\utility::array_thread(getentarray("ammo_cache","targetname"),::ammo_cache_think_global); + maps\_utility::array_delete(getentarray("trigger_multiple_softlanding","classname")); + if(getdvar("debug") == "") + { + setdvar("debug","0"); + } + + if(getdvar("fallback") == "") + { + setdvar("fallback","0"); + } + + if(getdvar("angles") == "") + { + setdvar("angles","0"); + } + + if(getdvar("noai") == "") + { + setdvar("noai","off"); + } + + if(getdvar("scr_RequiredMapAspectratio") == "") + { + setdvar("scr_RequiredMapAspectratio","1"); + } + + setdvar("ac130_player_num",-1); + maps\_utility::clear_custom_eog_summary(); + setdvar("ui_remotemissile_playernum",0); + setdvar("ui_pmc_won",0); + if(!isdefined(level.notetracks)) + { + anim.notetracks = []; + animscripts/notetracks::registernotetracks(); + } + + maps\_utility::add_start("no_game",::start_nogame); + add_no_game_starts(); + level._loadstarted = 1; + level.first_frame = 1; + level.level_specific_dof = 0; + thread remove_level_first_frame(); + level.wait_any_func_array = []; + level.var_1A14 = []; + level.run_call_after_wait_array = []; + level.var_1A16 = []; + level.var_1A17 = []; + level.var_1A18 = []; + if(!isdefined(level.script)) + { + level.script = tolower(getdvar("mapname")); + } + + maps\_specialops::func_13B3(); + if(maps\_utility::is_specialop() && issplitscreen() || getdvar("coop") == "1") + { + setdvar("solo_play",""); + } + + if(issubstr(level.script,"so_survival_")) + { + } + else + { + } + + level.xp_enable = 0; + if(maps\_utility::is_specialop()) + { + level.xp_enable = 1; + if(maps\_utility::is_survival()) + { + level.var_1658 = 2; + } + else + { + level.var_1658 = 1; + } + } + else + { + level.var_1658 = 0; + } + + level.dirteffectmenu["center"] = "dirt_effect_center"; + level.dirteffectmenu["left"] = "dirt_effect_left"; + level.dirteffectmenu["right"] = "dirt_effect_right"; + precachemenu(level.dirteffectmenu["center"]); + precachemenu(level.dirteffectmenu["left"]); + precachemenu(level.dirteffectmenu["right"]); + precacheshader("fullscreen_dirt_bottom_b"); + precacheshader("fullscreen_dirt_bottom"); + precacheshader("fullscreen_dirt_left"); + precacheshader("fullscreen_dirt_right"); + precacheshader("fullscreen_bloodsplat_bottom"); + precacheshader("fullscreen_bloodsplat_left"); + precacheshader("fullscreen_bloodsplat_right"); + level.var_1A1A = 0; + if(!isdefined(level.flag)) + { + common_scripts\utility::init_flags(); + } + else + { + var_00 = getarraykeys(level.flag); + common_scripts\utility::array_levelthread(var_00,::check_flag_for_stat_tracking); + } + + init_level_players(); + if(maps\_utility::func_E89()) + { + maps\_coop::main(); + } + + if(maps\_utility::laststand_enabled()) + { + maps\_laststand::main(); + } + + if(issplitscreen()) + { + setsaveddvar("cg_fovScale","0.75"); + } + else + { + setsaveddvar("cg_fovScale","1"); + } + + level.radiation_totalpercent = 0; + common_scripts\utility::flag_init("missionfailed"); + common_scripts\utility::flag_init("auto_adjust_initialized"); + common_scripts\utility::flag_init("_radiation_poisoning"); + common_scripts\utility::flag_init("gameskill_selected"); + common_scripts\utility::flag_init("battlechatter_on_thread_waiting"); + thread maps\_gameskill::func_1A1C(); + thread player_death_detection(); + level.default_run_speed = 190; + setsaveddvar("g_speed",level.default_run_speed); + if(maps\_utility::is_specialop()) + { + setsaveddvar("sv_saveOnStartMap",0); + } + else if(maps\_utility::arcademode()) + { + setsaveddvar("sv_saveOnStartMap",0); + thread arcademode_save(); + } + else if(isdefined(level.credits_active)) + { + setsaveddvar("sv_saveOnStartMap",0); + } + else + { + setsaveddvar("sv_saveOnStartMap",1); + } + + common_scripts\utility::create_lock("mg42_drones"); + common_scripts\utility::create_lock("mg42_drones_target_trace"); + level.dronestruct = []; + foreach(var_03, var_02 in level.struct) + { + if(!isdefined(var_02.targetname)) + { + continue; + } + + if(var_02.targetname == "delete_on_load") + { + level.struct[var_03] = undefined; + } + } + + common_scripts\utility::struct_class_init(); + common_scripts\utility::flag_init("respawn_friendlies"); + common_scripts\utility::flag_init("player_flashed"); + level.var_1A1E = ::maps\_utility::arcademode_kill; + level.connectpathsfunction = ::connectpaths; + level.disconnectpathsfunction = ::disconnectpaths; + level.badplace_cylinder_func = ::badplace_cylinder; + level.badplace_delete_func = ::badplace_delete; + level.isaifunc = ::isai; + level.createclientfontstring_func = ::maps\_hud_util::createclientfontstring; + level.hudsetpoint_func = ::maps\_hud_util::setpoint; + level.makeentitysentient_func = ::makeentitysentient; + level.freeentitysentient_func = ::freeentitysentient; + level.laseron_func = ::laserforceon; + level.laseroff_func = ::laserforceoff; + level.var_1A25 = ::maps\_player_stats::register_kill; + level.stat_track_damage_func = ::maps\_player_stats::register_shot_hit; + level.dopickyautosavechecks = 1; + level.autosave_threat_check_enabled = 1; + level.getnodefunction = ::getnode; + level.getnodearrayfunction = ::getnodearray; + if(!isdefined(level._notetrackfx)) + { + level._notetrackfx = []; + } + + foreach(var_05 in level.players) + { + var_05.maxhealth = level.player.health; + var_05.shellshocked = 0; + var_05.inwater = 0; + var_05 thread watchweaponchange(); + } + + level.last_mission_sound_time = -5000; + level.hero_list = []; + thread precache_script_models(); + for(var_07 = 0;var_07 < level.players.size;var_07++) + { + var_05 = level.players[var_07]; + var_05 thread maps\_utility::flashmonitor(); + var_05 thread maps\_utility::shock_ondeath(); + } + + precachemodel("fx"); + precachemodel("tag_origin"); + precacheshellshock("victoryscreen"); + precacheshellshock("default"); + precacheshellshock("flashbang"); + precacheshellshock("dog_bite"); + precacherumble("damage_heavy"); + precacherumble("damage_light"); + precacherumble("grenade_rumble"); + precacherumble("artillery_rumble"); + precachestring(&"GAME_GET_TO_COVER"); + precachestring(&"GAME_LAST_STAND_GET_BACK_UP"); + precachestring(&"SCRIPT_GRENADE_DEATH"); + precachestring(&"SCRIPT_GRENADE_SUICIDE_LINE1"); + precachestring(&"SCRIPT_GRENADE_SUICIDE_LINE2"); + precachestring(&"SCRIPT_EXPLODING_VEHICLE_DEATH"); + precachestring(&"SCRIPT_EXPLODING_DESTRUCTIBLE_DEATH"); + precachestring(&"SCRIPT_EXPLODING_BARREL_DEATH"); + precacheshader("hud_grenadeicon"); + precacheshader("hud_grenadepointer"); + precacheshader("hud_burningcaricon"); + precacheshader("death_juggernaut"); + precacheshader("death_friendly_fire"); + precacheshader("hud_destructibledeathicon"); + precacheshader("hud_burningbarrelicon"); + precacheshader("waypoint_ammo"); + level._effect["deathfx_bloodpool_generic"] = loadfx("impacts/deathfx_bloodpool_generic"); + animscripts/pain::initpainfx(); + animscripts/melee::melee_init(); + level.createfx_enabled = getdvar("createfx") != ""; + slowmo_system_init(); + maps\_mgturret::main(); + setupexploders(); + maps\_art::main(); + maps\_noder::main(); + common_scripts\_painter::main(); + maps\_gameskill::setskill(); + maps\_anim::init(); + thread common_scripts\_fx::initfx(); + if(level.createfx_enabled) + { + level.var_1750 = 1; + maps\_createfx::createfx(); + } + + maps\_global_fx::main(); + maps\_detonategrenades::init(); + thread setup_simple_primary_lights(); + maps\_names::setup_names(); + if(isdefined(level.handle_starts_endons)) + { + thread [[ level.handle_starts_endons ]](); + } + else + { + thread func_1AB5(); + } + + if(!isdefined(level.trigger_flags)) + { + common_scripts\utility::init_trigger_flags(); + } + + level.killspawn_groups = []; + init_script_triggers(); + setsaveddvar("ufoHitsTriggers","0"); + func_1B7A(); + if(getdvar("g_connectpaths") == "2") + { + level waittill("eternity"); + } + + maps\_autosave::main(); + if(!isdefined(level.animsounds)) + { + thread maps\_debug::func_1599(); + } + + maps\_anim::init(); + maps\_audio::aud_init(); + if(isdefined(level.audio_stringtable_mapname)) + { + maps\_audio::set_stringtable_mapname(level.audio_stringtable_mapname); + } + + anim.usefacialanims = 0; + if(!isdefined(level.var_1291)) + { + level.var_1291 = 0; + } + + maps\_loadout::init_loadout(); + common_scripts\_destructible::init(); + thread common_scripts\_elevator::init(); + thread common_scripts\_pipes::main(); + thread maps\_vehicle::init_vehicles(); + setobjectivetextcolors(); + common_scripts\_dynamic_world::init(); + setsaveddvar("ui_campaign",level.campaign); + thread maps\_introscreen::main(); + thread maps\_quotes::main(); + thread maps\_shutter::main(); + thread maps\_endmission::main(); + thread maps\_damagefeedback::init(); + thread maps\_escalator::init(); + maps\_friendlyfire::main(); + common_scripts\utility::array_levelthread(getentarray("badplace","targetname"),::badplace_think); + common_scripts\utility::array_levelthread(getentarray("delete_on_load","targetname"),::maps\_utility::deleteent); + common_scripts\utility::array_thread(getnodearray("traverse","targetname"),::func_1A97); + common_scripts\utility::array_thread(getentarray("piano_key","targetname"),::func_1A9A); + common_scripts\utility::array_thread(getentarray("piano_damage","targetname"),::func_1A99); + common_scripts\utility::array_thread(getentarray("water","targetname"),::waterthink); + common_scripts\utility::array_thread(getentarray("kill_all_players","targetname"),::kill_all_players_trigger); + common_scripts\utility::flag_init("allow_ammo_pickups"); + common_scripts\utility::flag_set("allow_ammo_pickups"); + common_scripts\utility::array_thread(getentarray("ammo_pickup_grenade_launcher","targetname"),::ammo_pickup,"grenade_launcher"); + common_scripts\utility::array_thread(getentarray("ammo_pickup_rpg","targetname"),::ammo_pickup,"rpg"); + common_scripts\utility::array_thread(getentarray("ammo_pickup_c4","targetname"),::ammo_pickup,"c4"); + common_scripts\utility::array_thread(getentarray("ammo_pickup_claymore","targetname"),::ammo_pickup,"claymore"); + common_scripts\utility::array_thread(getentarray("ammo_pickup_556","targetname"),::ammo_pickup,"556"); + common_scripts\utility::array_thread(getentarray("ammo_pickup_762","targetname"),::ammo_pickup,"762"); + common_scripts\utility::array_thread(getentarray("ammo_pickup_45","targetname"),::ammo_pickup,"45"); + common_scripts\utility::array_thread(getentarray("ammo_pickup_pistol","targetname"),::ammo_pickup,"pistol"); + thread maps\_interactive_objects::main(); + thread maps\_intelligence::main(); + thread maps\_gameskill::func_1A32(); + for(var_07 = 0;var_07 < level.players.size;var_07++) + { + var_05 = level.players[var_07]; + var_05 thread maps\_gameskill::playerhealthregen(); + var_05 thread playerdamagerumble(); + } + + thread player_special_death_hint(); + thread func_1AA3(); + common_scripts\utility::flag_init("spawning_friendlies"); + common_scripts\utility::flag_init("friendly_wave_spawn_enabled"); + common_scripts\utility::flag_clear("spawning_friendlies"); + level.friendly_spawner["rifleguy"] = getentarray("rifle_spawner","script_noteworthy"); + level.friendly_spawner["smgguy"] = getentarray("smg_spawner","script_noteworthy"); + level.var_1A35 = []; + level.var_1A35["allies"] = []; + level.var_1A35["axis"] = []; + level.var_1A35["team3"] = []; + level.var_1A35["neutral"] = []; + thread maps\_spawner::goalvolumes(); + thread maps\_spawner::func_1A37(); + thread maps\_spawner::friendlychain_ondeath(); + common_scripts\utility::array_thread(getentarray("friendly_spawn","targetname"),::maps\_spawner::friendlyspawnwave); + common_scripts\utility::array_thread(getentarray("flood_and_secure","targetname"),::maps\_spawner::func_1A3A); + common_scripts\utility::array_thread(getentarray("window_poster","targetname"),::func_1B6B); + if(!isdefined(level.trigger_hint_string)) + { + level.trigger_hint_string = []; + level.var_1A3C = []; + } + + level.shared_portable_turrets = []; + level.spawn_groups = []; + maps\_spawner::main(); + common_scripts\utility::array_thread(getentarray("background_block","targetname"),::background_block); + maps\_hud::init(); + thread func_1B2A(); + thread maps\_animatedmodels::main(); + if(maps\_utility::func_E89()) + { + thread maps\_loadout::coop_gamesetup_menu(); + } + + thread weapon_ammo(); + if(maps\_utility::is_specialop()) + { + maps\_specialops::specialops_init(); + } + + if(level.script == level.missionsettings.var_14AA[0].name && !level.player getlocalplayerprofiledata("hasEverPlayed_SP")) + { + level.player setlocalplayerprofiledata("hasEverPlayed_SP",1); + updategamerprofile(); + } + + level notify("load_finished"); +} + +//Function Number: 2 +get_load_trigger_classes() +{ + var_00 = []; + if(!maps\_utility::func_17D7()) + { + } + + return var_41; +} + +//Function Number: 3 +get_load_trigger_funcs() +{ + var_00 = []; + if(!maps\_utility::func_17D7()) + { + } + + if(maps\_utility::func_E89()) + { + } + + return var_41; +} + +//Function Number: 4 +init_script_triggers() +{ + var_00 = get_load_trigger_classes(); + var_01 = get_load_trigger_funcs(); + foreach(var_05, var_03 in var_00) + { + var_04 = getentarray(var_05,"classname"); + common_scripts\utility::array_levelthread(var_04,var_03); + } + + var_06 = getentarray("trigger_multiple","classname"); + var_07 = getentarray("trigger_radius","classname"); + var_04 = maps\_utility::array_merge(var_06,var_07); + var_08 = getentarray("trigger_disk","classname"); + var_04 = maps\_utility::array_merge(var_04,var_08); + var_09 = getentarray("trigger_once","classname"); + var_04 = maps\_utility::array_merge(var_04,var_09); + if(!maps\_utility::func_17D7()) + { + for(var_0A = 0;var_0A < var_04.size;var_0A++) + { + if(var_04[var_0A].spawnflags & 32) + { + thread maps\_spawner::func_1A40(var_04[var_0A]); + } + } + } + + for(var_0B = 0;var_0B < 7;var_0B++) + { + switch(var_0B) + { + case 0: + var_0C = "trigger_multiple"; + break; + + case 1: + var_0C = "trigger_once"; + break; + + case 2: + var_0C = "trigger_use"; + break; + + case 3: + var_0C = "trigger_radius"; + break; + + case 4: + var_0C = "trigger_lookat"; + break; + + case 5: + var_0C = "trigger_disk"; + break; + + default: + var_0C = "trigger_damage"; + break; + } + + var_04 = getentarray(var_0C,"code_classname"); + for(var_0A = 0;var_0A < var_04.size;var_0A++) + { + if(isdefined(var_04[var_0A].script_flag_true)) + { + level thread script_flag_true_trigger(var_04[var_0A]); + } + + if(isdefined(var_04[var_0A].script_flag_false)) + { + level thread func_1AE3(var_04[var_0A]); + } + + if(isdefined(var_04[var_0A].script_autosavename) || isdefined(var_04[var_0A].script_autosave)) + { + level thread maps\_autosave::autosavenamethink(var_04[var_0A]); + } + + if(isdefined(var_04[var_0A].script_fallback)) + { + level thread maps\_spawner::fallback_think(var_04[var_0A]); + } + + if(isdefined(var_04[var_0A].script_mgturretauto)) + { + level thread maps\_mgturret::mgturret_auto(var_04[var_0A]); + } + + if(isdefined(var_04[var_0A].var_13F6)) + { + level thread maps\_spawner::kill_spawner(var_04[var_0A]); + } + + if(isdefined(var_04[var_0A].script_kill_vehicle_spawner)) + { + level thread maps\_vehicle::func_1A53(var_04[var_0A]); + } + + if(isdefined(var_04[var_0A].script_emptyspawner)) + { + level thread maps\_spawner::empty_spawner(var_04[var_0A]); + } + + if(isdefined(var_04[var_0A].script_prefab_exploder)) + { + var_04[var_0A].script_exploder = var_04[var_0A].script_prefab_exploder; + } + + if(isdefined(var_04[var_0A].script_exploder)) + { + level thread exploder_load(var_04[var_0A]); + } + + if(isdefined(var_04[var_0A].ambient)) + { + var_04[var_0A] thread maps\_audio::trigger_multiple_audio_trigger(1); + } + + if(isdefined(var_04[var_0A].script_audio_zones) || isdefined(var_04[var_0A].script_audio_enter_msg) || isdefined(var_04[var_0A].script_audio_exit_msg) || isdefined(var_04[var_0A].script_audio_progress_msg) || isdefined(var_04[var_0A].script_audio_enter_func) || isdefined(var_04[var_0A].script_audio_exit_func) || isdefined(var_04[var_0A].script_audio_progress_func) || isdefined(var_04[var_0A].script_audio_point_func)) + { + var_04[var_0A] thread maps\_audio::trigger_multiple_audio_trigger(); + } + + if(isdefined(var_04[var_0A].script_triggered_playerseek)) + { + level thread triggered_playerseek(var_04[var_0A]); + } + + if(isdefined(var_04[var_0A].script_bctrigger)) + { + level thread func_1A9B(var_04[var_0A]); + } + + if(isdefined(var_04[var_0A].script_trigger_group)) + { + var_04[var_0A] thread trigger_group(); + } + + if(isdefined(var_04[var_0A].script_random_killspawner)) + { + level thread maps\_spawner::func_1A5B(var_04[var_0A]); + } + + if(isdefined(var_04[var_0A].targetname)) + { + var_0D = var_04[var_0A].targetname; + if(isdefined(var_01[var_0D])) + { + level thread [[ var_01[var_0D] ]](var_04[var_0A]); + } + } + } + } +} + +//Function Number: 5 +set_early_level() +{ + level.var_1A5D = []; + level.var_1A5D["intro"] = 1; + level.var_1A5D["sp_ny_harbor"] = 1; + level.var_1A5D["sp_ny_manhattan"] = 1; + level.var_1A5D["warlord"] = 1; + level.var_1A5D["london"] = 1; +} + +//Function Number: 6 +trigger_slide(param_00) +{ + for(;;) + { + param_00 waittill("trigger",var_01); + var_01 thread slidetriggerplayerthink(param_00); + } +} + +//Function Number: 7 +slidetriggerplayerthink(param_00) +{ + if(isdefined(self.vehicle)) + { + return; + } + + if(maps\_utility::func_1A60()) + { + return; + } + + thread maps\_audio::func_121F("start_player_slide_trigger",self); + if(isdefined(self.player_view)) + { + return; + } + + self endon("death"); + if(soundexists("SCN_cliffhanger_player_hillslide")) + { + self playsound("SCN_cliffhanger_player_hillslide"); + } + + var_01 = undefined; + if(isdefined(param_00.script_accel)) + { + var_01 = param_00.script_accel; + } + + maps\_utility::func_1A63(undefined,var_01); + for(;;) + { + if(!self istouching(param_00)) + { + break; + } + + wait 0.05; + } + + if(isdefined(level.end_slide_delay)) + { + wait level.end_slide_delay; + } + + maps\_utility::endsliding(); + thread maps\_audio::func_121F("end_player_slide_trigger",self); +} + +//Function Number: 8 +setup_simple_primary_lights() +{ + var_00 = getentarray("generic_flickering","targetname"); + var_01 = getentarray("generic_pulsing","targetname"); + var_02 = getentarray("generic_double_strobe","targetname"); + common_scripts\utility::array_thread(var_00,::maps\_lights::generic_flickering); + common_scripts\utility::array_thread(var_01,::maps\_lights::generic_pulsing); + common_scripts\utility::array_thread(var_02,::maps\_lights::generic_double_strobe); +} + +//Function Number: 9 +weapon_ammo() +{ + var_00 = getentarray(); + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + if(isdefined(var_00[var_01].classname) && getsubstr(var_00[var_01].classname,0,7) == "weapon_") + { + var_02 = var_00[var_01]; + var_03 = getsubstr(var_02.classname,7); + if(isdefined(var_02.script_ammo_max)) + { + var_04 = weaponclipsize(var_03); + var_05 = weaponmaxammo(var_03); + var_02 itemweaponsetammo(var_04,var_05,var_04,0); + var_06 = weaponaltweaponname(var_03); + if(var_06 != "none") + { + var_07 = weaponclipsize(var_06); + var_08 = weaponmaxammo(var_06); + var_02 itemweaponsetammo(var_07,var_08,var_07,1); + } + + continue; + } + + var_09 = 0; + var_04 = undefined; + var_0A = undefined; + var_0B = 0; + var_0C = undefined; + var_0D = undefined; + if(isdefined(var_02.var_1A69)) + { + var_04 = var_02.var_1A69; + var_09 = 1; + } + + if(isdefined(var_02.script_ammo_extra)) + { + var_0A = var_02.script_ammo_extra; + var_09 = 1; + } + + if(isdefined(var_02.script_ammo_alt_clip)) + { + var_0C = var_02.script_ammo_alt_clip; + var_0B = 1; + } + + if(isdefined(var_02.script_ammo_alt_extra)) + { + var_0D = var_02.script_ammo_alt_extra; + var_0B = 1; + } + + if(var_09) + { + if(!isdefined(var_04)) + { + } + + if(!isdefined(var_0A)) + { + } + + var_02 itemweaponsetammo(var_04,var_0A); + } + + if(var_0B) + { + if(!isdefined(var_0C)) + { + } + + if(!isdefined(var_0D)) + { + } + + var_02 itemweaponsetammo(var_0C,var_0D,0,1); + } + } + } +} + +//Function Number: 10 +trigger_group() +{ + thread trigger_group_remove(); + level endon("trigger_group_" + self.script_trigger_group); + self waittill("trigger"); + level notify("trigger_group_" + self.script_trigger_group,self); +} + +//Function Number: 11 +trigger_group_remove() +{ + level waittill("trigger_group_" + self.script_trigger_group,var_00); + if(self != var_00) + { + self delete(); + } +} + +//Function Number: 12 +exploder_load(param_00) +{ + level endon("killexplodertridgers" + param_00.script_exploder); + param_00 waittill("trigger"); + if(isdefined(param_00.script_chance) && randomfloat(1) > param_00.script_chance) + { + if(!param_00 maps\_utility::script_delay()) + { + wait 4; + } + + level thread exploder_load(param_00); + return; + } + + if(!param_00 maps\_utility::script_delay() && isdefined(param_00.script_exploder_delay)) + { + wait param_00.script_exploder_delay; + } + + common_scripts\utility::exploder(param_00.script_exploder); + level notify("killexplodertridgers" + param_00.script_exploder); +} + +//Function Number: 13 +shock_onpain() +{ + precacheshellshock("pain"); + precacheshellshock("default"); + level.player endon("death"); + setdvarifuninitialized("blurpain","on"); + for(;;) + { + var_00 = level.player.health; + level.player waittill("damage"); + if(getdvar("blurpain") == "on") + { + if(var_00 - level.player.health < 129) + { + continue; + } + + level.player shellshock("default",5); + } + } +} + +//Function Number: 14 +usedanimations() +{ + setdvar("usedanim",""); + for(;;) + { + if(getdvar("usedanim") == "") + { + wait 2; + continue; + } + + var_00 = getdvar("usedanim"); + setdvar("usedanim",""); + if(!isdefined(level.completedanims[var_00])) + { + continue; + } + + for(var_01 = 0;var_01 < level.completedanims[var_00].size;var_01++) + { + } + } +} + +//Function Number: 15 +badplace_think(param_00) +{ + if(!isdefined(level.badplaces)) + { + level.badplaces = 0; + } + + level.badplaces++; + badplace_cylinder("badplace" + level.badplaces,-1,param_00.origin,param_00.radius,1024); +} + +//Function Number: 16 +setup_individual_exploder(param_00) +{ + var_01 = param_00.script_exploder; + if(!isdefined(level.exploders[var_01])) + { + level.exploders[var_01] = []; + } + + var_02 = param_00.targetname; + if(!isdefined(var_02)) + { + var_02 = ""; + } + + level.exploders[var_01][level.exploders[var_01].size] = param_00; + if(maps\_utility::exploder_model_starts_hidden(param_00)) + { + param_00 hide(); + return; + } + + if(maps\_utility::func_1A79(param_00)) + { + param_00 hide(); + param_00 notsolid(); + if(isdefined(param_00.spawnflags) && param_00.spawnflags & 1) + { + if(isdefined(param_00.script_disconnectpaths)) + { + param_00 connectpaths(); + } + } + + return; + } + + if(maps\_utility::func_1A7B(param_00)) + { + param_00 hide(); + param_00 notsolid(); + if(isdefined(param_00.spawnflags) && param_00.spawnflags & 1) + { + param_00 connectpaths(); + } + } +} + +//Function Number: 17 +setupexploders() +{ + level.exploders = []; + var_00 = getentarray("script_brushmodel","classname"); + var_01 = getentarray("script_model","classname"); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + var_00[var_00.size] = var_01[var_02]; + } + + foreach(var_04 in var_00) + { + if(isdefined(var_04.script_prefab_exploder)) + { + var_04.script_exploder = var_04.script_prefab_exploder; + } + + if(isdefined(var_04.masked_exploder)) + { + continue; + } + + if(isdefined(var_04.script_exploder)) + { + setup_individual_exploder(var_04); + } + } + + var_06 = []; + var_07 = getentarray("script_brushmodel","classname"); + for(var_02 = 0;var_02 < var_07.size;var_02++) + { + if(isdefined(var_07[var_02].script_prefab_exploder)) + { + var_07[var_02].script_exploder = var_07[var_02].script_prefab_exploder; + } + + if(isdefined(var_07[var_02].script_exploder)) + { + var_06[var_06.size] = var_07[var_02]; + } + } + + var_07 = getentarray("script_model","classname"); + for(var_02 = 0;var_02 < var_07.size;var_02++) + { + if(isdefined(var_07[var_02].script_prefab_exploder)) + { + var_07[var_02].script_exploder = var_07[var_02].script_prefab_exploder; + } + + if(isdefined(var_07[var_02].script_exploder)) + { + var_06[var_06.size] = var_07[var_02]; + } + } + + var_07 = getentarray("item_health","classname"); + for(var_02 = 0;var_02 < var_07.size;var_02++) + { + if(isdefined(var_07[var_02].script_prefab_exploder)) + { + var_07[var_02].script_exploder = var_07[var_02].script_prefab_exploder; + } + + if(isdefined(var_07[var_02].script_exploder)) + { + var_06[var_06.size] = var_07[var_02]; + } + } + + if(isdefined(level.enable_struct_exploders)) + { + var_07 = level.struct; + for(var_02 = 0;var_02 < var_07.size;var_02++) + { + if(!isdefined(var_07[var_02])) + { + continue; + } + + if(isdefined(var_07[var_02].script_prefab_exploder)) + { + var_07[var_02].script_exploder = var_07[var_02].script_prefab_exploder; + } + + if(isdefined(var_07[var_02].script_exploder)) + { + if(!isdefined(var_07[var_02].angles)) + { + var_07[var_02].angles = (0,0,0); + } + + var_06[var_06.size] = var_07[var_02]; + } + } + } + + if(!isdefined(level.createfxent)) + { + level.createfxent = []; + } + + var_08 = []; + thread setup_flag_exploders(); + var_03 = 0; + while(var_03 < var_07.size) + { + var_09 = var_07[var_03]; + var_05 = common_scripts\utility::createexploder(var_09.script_fxid); + var_05.v = []; + var_05.v["origin"] = var_09.origin; + var_05.v["angles"] = var_09.angles; + var_05.v["delay"] = var_09.script_delay; + var_05.v["delay_post"] = var_09.var_1A7F; + var_05.v["firefx"] = var_09.script_firefx; + var_05.v["firefxdelay"] = var_09.script_firefxdelay; + var_05.v["firefxsound"] = var_09.script_firefxsound; + var_05.v["firefxtimeout"] = var_09.script_firefxtimeout; + var_05.v["earthquake"] = var_09.script_earthquake; + var_05.v["rumble"] = var_09.var_1A80; + var_05.v["damage"] = var_09.script_damage; + var_05.v["damage_radius"] = var_09.script_radius; + var_05.v["soundalias"] = var_09.script_soundalias; + var_05.v["repeat"] = var_09.script_repeat; + var_05.v["delay_min"] = var_09.script_delay_min; + var_05.v["delay_max"] = var_09.script_delay_max; + var_05.v["target"] = var_09.target; + var_05.v["ender"] = var_09.script_ender; + var_05.v["physics"] = var_09.script_physics; + var_05.v["type"] = "exploder"; + if(!isdefined(var_09.script_fxid)) + { + var_05.v["fxid"] = "No FX"; + } + else + { + var_05.v["fxid"] = var_09.script_fxid; + } + + var_05.v["exploder"] = var_09.script_exploder; + if(isdefined(level.createfxexploders)) + { + var_0A = level.createfxexploders[var_05.v["exploder"]]; + if(!isdefined(var_0A)) + { + var_0A = []; + } + + level.createfxexploders[var_05.v["exploder"]] = var_0A; + } + + if(!isdefined(var_05.v["delay"])) + { + var_05.v["delay"] = 0; + } + + if(isdefined(var_09.target)) + { + var_0B = getentarray(var_05.v["target"],"targetname")[0]; + if(isdefined(var_0B)) + { + var_0C = var_0B.origin; + var_05.v["angles"] = vectortoangles(var_0C - var_05.v["origin"]); + } + else + { + var_0B = common_scripts\utility::get_target_ent(var_05.v["target"]); + if(isdefined(var_0B)) + { + var_0C = var_0B.origin; + var_05.v["angles"] = vectortoangles(var_0C - var_05.v["origin"]); + } + } + } + + if(!isdefined(level.enable_struct_exploders)) + { + if(var_09.code_classname == "script_brushmodel" || isdefined(var_09.model)) + { + var_05.model = var_09; + var_05.model.disconnect_paths = var_09.script_disconnectpaths; + } + } + else + { + var_05.model = var_09; + if(isdefined(var_05.model.var_563)) + { + precachemodel(var_05.model.var_563); + } + } + + if(isdefined(var_09.targetname) && isdefined(var_41[var_09.targetname])) + { + var_05.v["exploder_type"] = var_09.targetname; + } + else + { + var_05.v["exploder_type"] = "normal"; + } + + if(isdefined(var_09.masked_exploder)) + { + var_05.v["masked_exploder"] = var_09.model; + var_05.v["masked_exploder_spawnflags"] = var_09.spawnflags; + var_05.v["masked_exploder_script_disconnectpaths"] = var_09.script_disconnectpaths; + var_09 delete(); + } + + var_05 common_scripts\_createfx::post_entity_creation_function(); + var_03++ = var_41[var_0A.size]; + } +} + +//Function Number: 18 +setup_flag_exploders() +{ + waittillframeend; + waittillframeend; + waittillframeend; + var_00 = []; + foreach(var_02 in level.createfxent) + { + if(var_02.v["type"] != "exploder") + { + continue; + } + + var_03 = var_02.v["flag"]; + if(!isdefined(var_03)) + { + continue; + } + + if(var_03 == "nil") + { + var_02.v["flag"] = undefined; + } + + var_00[var_03] = 1; + } + + foreach(var_07, var_06 in var_00) + { + thread exploder_flag_wait(var_07); + } +} + +//Function Number: 19 +exploder_flag_wait(param_00) +{ + if(!common_scripts\utility::flag_exist(param_00)) + { + common_scripts\utility::flag_init(param_00); + } + + common_scripts\utility::flag_wait(param_00); + foreach(var_02 in level.createfxent) + { + if(var_02.v["type"] != "exploder") + { + continue; + } + + var_03 = var_02.v["flag"]; + if(!isdefined(var_03)) + { + continue; + } + + if(var_03 != param_00) + { + continue; + } + + var_02 common_scripts\utility::activate_individual_exploder(); + } +} + +//Function Number: 20 +nearairushesplayer() +{ + if(isalive(level.enemyseekingplayer)) + { + return; + } + + var_00 = maps\_utility::get_closest_ai(level.player.origin,"bad_guys"); + if(!isdefined(var_00)) + { + return; + } + + if(distance(var_00.origin,level.player.origin) > 400) + { + return; + } + + level.enemyseekingplayer = var_00; + var_00 setgoalentity(level.player); + var_00.goalradius = 512; +} + +//Function Number: 21 +playerdamagerumble() +{ + for(;;) + { + self waittill("damage",var_00); + if(isdefined(self.var_1A89)) + { + continue; + } + + self playrumbleonentity("damage_heavy"); + } +} + +//Function Number: 22 +playerdamageshellshock() +{ + for(;;) + { + level.player waittill("damage",var_00,var_01,var_02,var_03,var_04); + if(var_04 == "MOD_EXPLOSIVE" || var_04 == "MOD_GRENADE" || var_04 == "MOD_GRENADE_SPLASH" || var_04 == "MOD_PROJECTILE" || var_04 == "MOD_PROJECTILE_SPLASH") + { + var_05 = 0; + var_06 = level.player.maxhealth / 100; + var_07 = var_00 * var_06; + if(var_07 >= 90) + { + var_05 = 4; + } + else if(var_07 >= 50) + { + var_05 = 3; + } + else if(var_07 >= 25) + { + var_05 = 2; + } + else if(var_07 > 10) + { + var_05 = 1; + } + + if(var_05) + { + level.player shellshock("default",var_05); + } + } + } +} + +//Function Number: 23 +map_is_early_in_the_game() +{ + if(isdefined(level.var_1A5D[level.script])) + { + return level.var_1A5D[level.script]; + } + + return 0; +} + +//Function Number: 24 +func_14D0() +{ + self endon("death"); + self.lastgrenadetime = 0; + for(;;) + { + while(!self isthrowinggrenade()) + { + wait 0.05; + } + + self.lastgrenadetime = gettime(); + while(self isthrowinggrenade()) + { + wait 0.05; + } + } +} + +//Function Number: 25 +player_special_death_hint() +{ + if(maps\_utility::is_specialop()) + { + return; + } + + if(isalive(level.player)) + { + thread maps\_quotes::setdeadquote(); + } + + level.player thread func_14D0(); + level.player waittill("death",var_00,var_01,var_02); + if(var_01 != "MOD_GRENADE" && var_01 != "MOD_GRENADE_SPLASH" && var_01 != "MOD_SUICIDE" && var_01 != "MOD_EXPLOSIVE") + { + return; + } + + if(level.gameskill >= 2) + { + if(!map_is_early_in_the_game()) + { + return; + } + } + + if(var_01 == "MOD_SUICIDE") + { + if(level.player.lastgrenadetime - gettime() > 3500) + { + return; + } + + level notify("new_quote_string"); + thread grenade_death_text_hudelement(&"SCRIPT_GRENADE_SUICIDE_LINE1",&"SCRIPT_GRENADE_SUICIDE_LINE2"); + return; + } + + if(var_01 == "MOD_EXPLOSIVE") + { + if(level.player destructible_death(var_00)) + { + return; + } + + if(level.player exploding_barrel_death_af_chase(var_00)) + { + return; + } + + if(level.player vehicle_death(var_00)) + { + return; + } + + if(level.player exploding_barrel_death(var_00)) + { + return; + } + } + + if(var_01 == "MOD_GRENADE" || var_01 == "MOD_GRENADE_SPLASH") + { + if(isdefined(var_02) && !isweapondetonationtimed(var_02)) + { + return; + } + + level notify("new_quote_string"); + setdvar("ui_deadquote","@SCRIPT_GRENADE_DEATH"); + thread func_1A93(); + } +} + +//Function Number: 26 +vehicle_death(param_00) +{ + if(!isdefined(param_00)) + { + return 0; + } + + if(param_00.code_classname != "script_vehicle") + { + return 0; + } + + level notify("new_quote_string"); + setdvar("ui_deadquote","@SCRIPT_EXPLODING_VEHICLE_DEATH"); + thread special_death_indicator_hudelement("hud_burningcaricon",96,96); + return 1; +} + +//Function Number: 27 +destructible_death(param_00) +{ + if(!isdefined(param_00)) + { + return 0; + } + + if(!isdefined(param_00.destructible_type)) + { + return 0; + } + + level notify("new_quote_string"); + if(issubstr(param_00.destructible_type,"vehicle")) + { + setdvar("ui_deadquote","@SCRIPT_EXPLODING_VEHICLE_DEATH"); + thread special_death_indicator_hudelement("hud_burningcaricon",96,96); + } + else + { + setdvar("ui_deadquote","@SCRIPT_EXPLODING_DESTRUCTIBLE_DEATH"); + thread special_death_indicator_hudelement("hud_destructibledeathicon",96,96); + } + + return 1; +} + +//Function Number: 28 +exploding_barrel_death_af_chase(param_00) +{ + if(level.script != "af_chase") + { + return 0; + } + + return exploding_barrel_death(param_00); +} + +//Function Number: 29 +exploding_barrel_death(param_00) +{ + if(isdefined(level.lastexplodingbarrel)) + { + if(gettime() != level.lastexplodingbarrel["time"]) + { + return 0; + } + + var_01 = distance(self.origin,level.lastexplodingbarrel["origin"]); + if(var_01 > level.lastexplodingbarrel["radius"]) + { + return 0; + } + + level notify("new_quote_string"); + setdvar("ui_deadquote","@SCRIPT_EXPLODING_BARREL_DEATH"); + thread special_death_indicator_hudelement("hud_burningbarrelicon",64,64); + return 1; + } + + return 0; +} + +//Function Number: 30 +grenade_death_text_hudelement(param_00,param_01) +{ + level.player.var_1A92 = 1; + setdvar("ui_deadquote",""); + wait 1.5; + var_02 = newhudelem(); + var_02.elemtype = "font"; + var_02.font = "default"; + var_02.fontscale = 1.5; + var_02.x = 0; + var_02.y = -30; + var_02.alignx = "center"; + var_02.aligny = "middle"; + var_02.horzalign = "center"; + var_02.vertalign = "middle"; + var_02 settext(param_00); + var_02.foreground = 1; + var_02.alpha = 0; + var_02 fadeovertime(1); + var_02.alpha = 1; + if(isdefined(param_01)) + { + var_02 = newhudelem(); + var_02.elemtype = "font"; + var_02.font = "default"; + var_02.fontscale = 1.5; + var_02.x = 0; + var_02.y = -25 + level.fontheight * var_02.fontscale; + var_02.alignx = "center"; + var_02.aligny = "middle"; + var_02.horzalign = "center"; + var_02.vertalign = "middle"; + var_02 settext(param_01); + var_02.foreground = 1; + var_02.alpha = 0; + var_02 fadeovertime(1); + var_02.alpha = 1; + } +} + +//Function Number: 31 +func_1A93() +{ + wait 1.5; + var_00 = newhudelem(); + var_00.x = 0; + var_00.y = 68; + var_00 setshader("hud_grenadeicon",50,50); + var_00.alignx = "center"; + var_00.aligny = "middle"; + var_00.horzalign = "center"; + var_00.vertalign = "middle"; + var_00.foreground = 1; + var_00.alpha = 0; + var_00 fadeovertime(1); + var_00.alpha = 1; + var_00 = newhudelem(); + var_00.x = 0; + var_00.y = 25; + var_00 setshader("hud_grenadepointer",50,25); + var_00.alignx = "center"; + var_00.aligny = "middle"; + var_00.horzalign = "center"; + var_00.vertalign = "middle"; + var_00.foreground = 1; + var_00.alpha = 0; + var_00 fadeovertime(1); + var_00.alpha = 1; +} + +//Function Number: 32 +special_death_indicator_hudelement(param_00,param_01,param_02,param_03) +{ + if(!isdefined(param_03)) + { + param_03 = 1.5; + } + + wait param_03; + var_04 = newhudelem(); + var_04.x = 0; + var_04.y = 40; + var_04 setshader(param_00,param_01,param_02); + var_04.alignx = "center"; + var_04.aligny = "middle"; + var_04.horzalign = "center"; + var_04.vertalign = "middle"; + var_04.foreground = 1; + var_04.alpha = 0; + var_04 fadeovertime(1); + var_04.alpha = 1; +} + +//Function Number: 33 +triggered_playerseek(param_00) +{ + var_01 = param_00.script_triggered_playerseek; + param_00 waittill("trigger"); + var_02 = getaiarray(); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + if(!isalive(var_02[var_03])) + { + continue; + } + + if(isdefined(var_02[var_03].script_triggered_playerseek) && var_02[var_03].script_triggered_playerseek == var_01) + { + var_02[var_03].goalradius = 800; + var_02[var_03] setgoalentity(level.player); + level thread maps\_spawner::func_1A96(var_02[var_03]); + } + } +} + +//Function Number: 34 +func_1A97() +{ + var_00 = getent(self.target,"targetname"); + self.var_1A98 = var_00.origin[2]; + var_00 delete(); +} + +//Function Number: 35 +func_1A99() +{ + var_00 = self getorigin(); + var_01[0] = "large"; + for(;;) + { + self waittill("small",var_41[1],"trigger"); + thread common_scripts\utility::play_sound_in_space("bullet_" + common_scripts\utility::random(var_41) + "_piano",var_01); + } +} + +//Function Number: 36 +func_1A9A() +{ + var_00 = self getorigin(); + var_01 = "piano_" + self.script_noteworthy; + self sethintstring(&"SCRIPT_PLATFORM_PIANO"); + for(;;) + { + self waittill("trigger"); + thread common_scripts\utility::play_sound_in_space(var_01,var_00); + } +} + +//Function Number: 37 +func_1A9B(param_00) +{ + var_01 = undefined; + if(isdefined(param_00.target)) + { + var_02 = getentarray(param_00.target,"targetname"); + if(issubstr(var_02[0].classname,"trigger")) + { + var_01 = var_02[0]; + } + } + + if(isdefined(var_01)) + { + var_01 waittill("trigger",var_03); + } + else + { + var_01 waittill("trigger",var_03); + } + + var_04 = undefined; + if(isdefined(var_01)) + { + if(var_03.team != level.player.team && level.player istouching(param_00)) + { + var_04 = level.player animscripts/battlechatter::getclosestfriendlyspeaker("custom"); + } + else if(var_03.team == level.player.team) + { + var_05 = "axis"; + if(level.player.team == "axis") + { + var_05 = "allies"; + } + + var_06 = animscripts/battlechatter::getspeakers("custom",var_05); + var_06 = maps\_utility::get_array_of_farthest(level.player.origin,var_06); + foreach(var_08 in var_06) + { + if(var_08 istouching(param_00)) + { + var_04 = var_08; + if(bctrigger_validate_distance(var_08.origin)) + { + break; + } + } + } + } + } + else if(isplayer(var_03)) + { + var_04 = var_03 animscripts/battlechatter::getclosestfriendlyspeaker("custom"); + } + else + { + var_04 = var_03; + } + + if(!isdefined(var_04)) + { + return; + } + + if(!bctrigger_validate_distance(var_04.origin)) + { + return; + } + + var_0A = var_04 maps\_utility::func_1A9C(param_00.script_bctrigger); + if(!var_0A) + { + level maps\_utility::func_614(0.25,::func_1A9B,param_00); + return; + } + + param_00 notify("custom_battlechatter_done"); +} + +//Function Number: 38 +bctrigger_validate_distance(param_00) +{ + if(distance(param_00,level.player getorigin()) <= 512) + { + return 1; + } + + return 0; +} + +//Function Number: 39 +waterthink() +{ + var_00 = getent(self.target,"targetname"); + var_01 = var_00.origin[2]; + var_00 = undefined; + level.var_1A9F = 8; + level.var_1AA0 = 33; + level.depth_allow_stand = 50; + var_02 = 0; + for(;;) + { + wait 0.05; + if(!level.player.inwater && var_02) + { + var_02 = 0; + level.player allowprone(1); + level.player allowcrouch(1); + level.player allowstand(1); + thread waterthink_rampspeed(level.default_run_speed); + } + + self waittill("trigger"); + level.player.inwater = 1; + var_02 = 1; + while(level.player istouching(self)) + { + level.player.inwater = 1; + var_03 = level.player getorigin(); + var_04 = var_03[2] - var_01; + if(var_04 > 0) + { + break; + } + + var_05 = int(level.default_run_speed - abs(var_04 * 5)); + if(var_05 < 50) + { + var_05 = 50; + } + + thread waterthink_rampspeed(var_05); + if(abs(var_04) > level.var_1AA0) + { + level.player allowcrouch(0); + } + else + { + level.player allowcrouch(1); + } + + if(abs(var_04) > level.var_1A9F) + { + level.player allowprone(0); + continue; + } + + level.player allowprone(1); + wait 0.5; + } + + level.player.inwater = 0; + wait 0.05; + } +} + +//Function Number: 40 +waterthink_rampspeed(param_00) +{ + level notify("ramping_water_movement_speed"); + level endon("ramping_water_movement_speed"); + var_01 = 0.5; + var_02 = int(var_01 * 20); + var_03 = getdvarint("g_speed"); + var_04 = 0; + if(param_00 < var_03) + { + var_04 = 1; + } + + var_05 = int(abs(var_03 - param_00)); + var_06 = int(var_05 / var_02); + for(var_07 = 0;var_07 < var_02;var_07++) + { + var_03 = getdvarint("g_speed"); + if(var_04) + { + setsaveddvar("g_speed",var_03 - var_06); + } + else + { + setsaveddvar("g_speed",var_03 + var_06); + } + + wait 0.05; + } + + setsaveddvar("g_speed",param_00); +} + +//Function Number: 41 +func_1AA3() +{ + var_00 = getallnodes(); + thread maps\_mgturret::func_1AA4(var_00); + thread maps\_mgturret::saw_mgturretlink(var_00); + thread maps\_colors::func_F05(var_00); +} + +//Function Number: 42 +trigger_unlock(param_00) +{ + var_01 = "not_set"; + if(isdefined(param_00.script_noteworthy)) + { + var_01 = param_00.script_noteworthy; + } + + var_02 = getentarray(param_00.target,"targetname"); + param_00 thread func_1AA8(param_00.target); + for(;;) + { + common_scripts\utility::array_thread(var_02,::common_scripts\utility::trigger_off); + param_00 waittill("trigger"); + common_scripts\utility::array_thread(var_02,::common_scripts\utility::trigger_on); + wait_for_an_unlocked_trigger(var_02,var_01); + maps\_utility::array_notify(var_02,"relock"); + } +} + +//Function Number: 43 +func_1AA8(param_00) +{ + self waittill("death"); + var_01 = getentarray(param_00,"targetname"); + common_scripts\utility::array_thread(var_01,::common_scripts\utility::trigger_off); +} + +//Function Number: 44 +wait_for_an_unlocked_trigger(param_00,param_01) +{ + level endon("unlocked_trigger_hit" + param_01); + var_02 = spawnstruct(); + for(var_03 = 0;var_03 < param_00.size;var_03++) + { + param_00[var_03] thread report_trigger(var_02,param_01); + } + + var_02 waittill("trigger"); + level notify("unlocked_trigger_hit" + param_01); +} + +//Function Number: 45 +report_trigger(param_00,param_01) +{ + self endon("relock"); + level endon("unlocked_trigger_hit" + param_01); + self waittill("trigger"); + param_00 notify("trigger"); +} + +//Function Number: 46 +func_1AAB() +{ + var_00 = []; + var_01 = undefined; + if(isdefined(self.target)) + { + var_02 = getentarray(self.target,"targetname"); + var_03 = []; + foreach(var_05 in var_02) + { + if(var_05.classname == "script_origin") + { + var_03[var_03.size] = var_05; + } + + if(issubstr(var_05.classname,"trigger")) + { + var_00[var_00.size] = var_05; + } + } + + var_02 = common_scripts\utility::getstructarray(self.target,"targetname"); + foreach(var_05 in var_02) + { + var_03[var_03.size] = var_05; + } + + if(var_03.size == 1) + { + var_09 = var_03[0]; + var_01 = var_09.origin; + if(isdefined(var_09.code_classname)) + { + var_09 delete(); + } + } + } + + var_0A = []; + return var_41; +} + +//Function Number: 47 +trigger_lookat(param_00) +{ + trigger_lookat_think(param_00,1); +} + +//Function Number: 48 +trigger_looking(param_00) +{ + trigger_lookat_think(param_00,0); +} + +//Function Number: 49 +func_1AAE(param_00) +{ + var_01 = 3; + if(isdefined(param_00.script_delay)) + { + var_01 = param_00.script_delay; + } + + for(;;) + { + param_00 waittill("trigger"); + maps\_utility::set_vision_set(param_00.script_visionset,var_01); + wait var_01; + } +} + +//Function Number: 50 +trigger_lookat_think(param_00,param_01) +{ + var_02 = 0.78; + if(isdefined(param_00.script_dot)) + { + var_02 = param_00.script_dot; + } + + var_03 = param_00 func_1AAB(); + var_04 = var_03["triggers"]; + var_05 = var_03["target_origin"]; + var_06 = isdefined(param_00.script_flag) || isdefined(param_00.script_noteworthy); + var_07 = undefined; + if(var_06) + { + var_07 = param_00 maps\_utility::func_F89(); + if(!isdefined(level.flag[var_07])) + { + common_scripts\utility::flag_init(var_07); + } + } + else if(!var_04.size) + { + } + + if(param_01 && var_06) + { + level endon(var_07); + } + + param_00 endon("death"); + var_08 = 0; + if(isdefined(param_00.script_parameters)) + { + var_08 = !issubstr("no_sight",param_00.script_parameters); + } + + for(;;) + { + if(var_06) + { + common_scripts\utility::flag_clear(var_07); + } + + param_00 waittill("trigger",var_09); + var_0A = []; + while(var_09 istouching(param_00)) + { + if(var_08 && !sighttracepassed(var_09 geteye(),var_05,0,undefined)) + { + if(var_06) + { + common_scripts\utility::flag_clear(var_07); + } + + wait 0.5; + continue; + } + + var_0B = vectornormalize(var_05 - var_09.origin); + var_0C = var_09 getplayerangles(); + var_0D = anglestoforward(var_0C); + var_0E = vectordot(var_0D,var_0B); + if(var_0E >= var_02) + { + common_scripts\utility::array_thread(var_04,::maps\_utility::send_notify,"trigger"); + if(var_06) + { + common_scripts\utility::flag_set(var_07,var_09); + } + + if(param_01) + { + return; + } + + wait 2; + } + else if(var_06) + { + common_scripts\utility::flag_clear(var_07); + } + + if(var_08) + { + wait 0.5; + continue; + } + + wait 0.05; + } + } +} + +//Function Number: 51 +trigger_cansee(param_00) +{ + var_01 = []; + var_02 = undefined; + var_03 = param_00 func_1AAB(); + var_01 = var_03["triggers"]; + var_02 = var_03["target_origin"]; + var_04 = isdefined(param_00.script_flag) || isdefined(param_00.script_noteworthy); + var_05 = undefined; + if(var_04) + { + var_05 = param_00 maps\_utility::func_F89(); + if(!isdefined(level.flag[var_05])) + { + common_scripts\utility::flag_init(var_05); + } + } + else if(!var_01.size) + { + } + + param_00 endon("death"); + var_06 = 12; + var_07 = []; + for(;;) + { + if(var_05) + { + common_scripts\utility::flag_clear(var_06); + } + + var_01 waittill((0,0,0),var_41[var_07.size],(var_07,0,0),var_41[var_41.size],(var_07 * -1,0,0),var_41[var_41.size],(0,var_07,0),var_41[var_41.size],(0,var_07 * -1,0),var_41[var_41.size],(0,0,var_07),var_41[var_41.size],"trigger",var_08); + while(level.player istouching(var_01)) + { + if(!var_08 cantraceto(var_03,var_41)) + { + if(var_05) + { + common_scripts\utility::flag_clear(var_06); + } + + wait 0.1; + continue; + } + + if(var_05) + { + common_scripts\utility::flag_set(var_06); + } + + common_scripts\utility::array_thread(var_02,::maps\_utility::send_notify,"trigger"); + wait 0.5; + } + } +} + +//Function Number: 52 +cantraceto(param_00,param_01) +{ + for(var_02 = 0;var_02 < param_01.size;var_02++) + { + if(sighttracepassed(self geteye(),param_00 + param_01[var_02],1,self)) + { + return 1; + } + } + + return 0; +} + +//Function Number: 53 +indicate_start(param_00) +{ + var_01 = newhudelem(); + var_01.alignx = "left"; + var_01.aligny = "middle"; + var_01.x = 10; + var_01.y = 400; + var_01 settext(param_00); + var_01.alpha = 0; + var_01.fontscale = 3; + wait 1; + var_01 fadeovertime(1); + var_01.alpha = 1; + wait 5; + var_01 fadeovertime(1); + var_01.alpha = 0; + wait 1; + var_01 destroy(); +} + +//Function Number: 54 +func_1AB5() +{ + common_scripts\utility::create_dvar("start",""); + if(getdvar("scr_generateClipModels") != "" && getdvar("scr_generateClipModels") != "0") + { + return; + } + + if(!isdefined(level.var_1AB6)) + { + level.var_1AB6 = []; + } + + var_00 = tolower(getdvar("start")); + var_01 = get_start_dvars(); + if(isdefined(level.start_point)) + { + var_00 = level.start_point; + } + + var_02 = 0; + for(var_03 = 0;var_03 < var_01.size;var_03++) + { + if(var_00 == var_01[var_03]) + { + var_02 = var_03; + level.start_point = var_01[var_03]; + break; + } + } + + if(isdefined(level.default_start_override) && !isdefined(level.start_point)) + { + foreach(var_06, var_05 in var_01) + { + if(level.default_start_override == var_05) + { + var_02 = var_06; + level.start_point = var_05; + break; + } + } + } + + if(!isdefined(level.start_point)) + { + if(isdefined(level.default_start)) + { + level.start_point = "default"; + } + else if(maps\_utility::level_has_start_points()) + { + level.start_point = level.var_1AB6[0]["name"]; + } + else + { + level.start_point = "default"; + } + } + + waittillframeend; + thread start_menu(); + if(level.start_point == "default") + { + if(isdefined(level.default_start)) + { + level thread [[ level.default_start ]](); + } + } + else + { + var_07 = level.var_1ABB[level.start_point]; + thread [[ var_07["start_func"] ]](); + } + + if(maps\_utility::is_default_start()) + { + var_08 = get_string_for_starts(var_01); + setdvar("start",var_08); + } + + waittillframeend; + var_09 = []; + for(var_03 = var_02;var_03 < level.var_1AB6.size;var_03++) + { + var_07 = level.var_1AB6[var_03]; + if(!isdefined(var_07["logic_func"])) + { + continue; + } + + if(already_ran_function(var_07["logic_func"],var_09)) + { + continue; + } + + [[ var_07["logic_func"] ]](); + var_09[var_09.size] = var_07["logic_func"]; + } +} + +//Function Number: 55 +already_ran_function(param_00,param_01) +{ + foreach(var_03 in param_01) + { + if(var_03 == param_00) + { + return 1; + } + } + + return 0; +} + +//Function Number: 56 +get_string_for_starts(param_00) +{ + var_01 = " ** No starts have been set up for this map with maps_utility::add_start()."; + if(param_00.size) + { + var_01 = " ** "; + for(var_02 = param_00.size - 1;var_02 >= 0;var_02--) + { + var_01 = var_01 + param_00[var_02] + " "; + } + } + + setdvar("start",var_01); + return var_01; +} + +//Function Number: 57 +create_start(param_00,param_01) +{ + var_02 = 1; + var_03 = (0.9,0.9,0.9); + if(param_01 != -1) + { + var_04 = 5; + if(param_01 != var_04) + { + var_02 = 1 - abs(var_04 - param_01) / var_04; + } + else + { + var_03 = (1,1,0); + } + } + + if(var_02 == 0) + { + var_02 = 0.05; + } + + var_05 = newhudelem(); + var_05.alignx = "left"; + var_05.aligny = "middle"; + var_05.x = 80; + var_05.y = 80 + param_01 * 18; + var_05 settext(param_00); + var_05.alpha = 0; + var_05.foreground = 1; + var_05.color = var_03; + var_05.fontscale = 1.75; + var_05 fadeovertime(0.5); + var_05.alpha = var_02; + return var_05; +} + +//Function Number: 58 +start_menu() +{ +} + +//Function Number: 59 +start_nogame() +{ + common_scripts\utility::array_call(getaiarray(),::delete); + common_scripts\utility::array_call(getspawnerarray(),::delete); +} + +//Function Number: 60 +get_start_dvars() +{ + var_00 = []; + for(var_01 = 0;var_01 < level.var_1AB6.size;var_01++) + { + var_00[var_00.size] = level.var_1AB6[var_01]["name"]; + } + + return var_00; +} + +//Function Number: 61 +display_starts() +{ + level.display_starts_pressed = 1; + if(level.var_1AB6.size <= 0) + { + return; + } + + var_00 = get_start_dvars(); + var_01 = start_list_menu(); + var_02 = create_start("Selected Start:",-1); + var_02.color = (1,1,1); + var_03 = []; + var_04 = 0; + while(var_04 < var_41.size) + { + var_05 = var_41[var_04]; + var_06 = "[" + var_41[var_04] + "]"; + if(var_05 != "cancel" && var_05 != "default") + { + if(isdefined(level.var_1ABB[var_05]["start_loc_string"])) + { + var_06 = var_06 + " -> "; + var_06 = var_06 + level.var_1ABB[var_05]["start_loc_string"]; + } + } + + var_03[var_03.size] = var_06; + var_04++ = var_41[var_41.size]; + } + + var_07 = var_41.size - 1; + var_08 = 0; + var_09 = 0; + var_0A = 0; + while(var_07 > 0) + { + if(var_41[var_07] == level.start_point) + { + var_0A = 1; + break; + } + + var_07-- = "cancel"; + } + + if(!var_0A) + { + var_07 = var_41.size - 1; + } + + func_1AC5(var_01,var_03,var_07); + var_0B = var_07; + for(;;) + { + if(!level.player buttonpressed("F10")) + { + level.display_starts_pressed = 0; + } + + if(var_0B != var_07) + { + func_1AC5(var_01,var_03,var_07); + var_0B = var_07; + } + + if(!var_08) + { + if(level.player buttonpressed("UPARROW") || level.player buttonpressed("DPAD_UP") || level.player buttonpressed("APAD_UP")) + { + var_08 = 1; + var_07-- = var_41[var_00.size]; + } + } + else if(!level.player buttonpressed("UPARROW") && !level.player buttonpressed("DPAD_UP") && !level.player buttonpressed("APAD_UP")) + { + var_08 = 0; + } + + if(!var_09) + { + if(level.player buttonpressed("DOWNARROW") || level.player buttonpressed("DPAD_DOWN") || level.player buttonpressed("APAD_DOWN")) + { + var_09 = 1; + var_07++ = "default"; + } + } + else if(!level.player buttonpressed("DOWNARROW") && !level.player buttonpressed("DPAD_DOWN") && !level.player buttonpressed("APAD_DOWN")) + { + var_09 = 0; + } + + if(var_07 < 0) + { + var_07 = var_41.size - 1; + } + + if(var_07 >= var_41.size) + { + var_07 = 0; + } + + if(level.player buttonpressed("BUTTON_B")) + { + start_display_cleanup(var_01,var_02); + break; + } + + if(level.player buttonpressed("kp_enter") || level.player buttonpressed("BUTTON_A") || level.player buttonpressed("enter")) + { + if(var_41[var_07] == "cancel") + { + start_display_cleanup(var_01,var_02); + break; + } + + setdvar("start",var_41[var_07]); + level.player openpopupmenu("start"); + } + + wait 0.05; + } +} + +//Function Number: 62 +start_list_menu() +{ + var_00 = []; + for(var_01 = 0;var_01 < 11;var_01++) + { + var_02 = create_start("",var_01); + var_00[var_00.size] = var_02; + } + + return var_00; +} + +//Function Number: 63 +func_1AC5(param_00,param_01,param_02) +{ + for(var_03 = 0;var_03 < param_00.size;var_03++) + { + var_04 = var_03 + param_02 - 5; + if(isdefined(param_01[var_04])) + { + var_05 = param_01[var_04]; + } + else + { + var_05 = ""; + } + + param_00[var_03] settext(var_05); + } +} + +//Function Number: 64 +start_display_cleanup(param_00,param_01) +{ + param_01 destroy(); + for(var_02 = 0;var_02 < param_00.size;var_02++) + { + param_00[var_02] destroy(); + } +} + +//Function Number: 65 +devhelp_hudelements(param_00,param_01) +{ + for(var_02 = 0;var_02 < param_00.size;var_02++) + { + for(var_03 = 0;var_03 < 5;var_03++) + { + param_00[var_02][var_03].alpha = param_01; + } + } +} + +//Function Number: 66 +func_1AC8() +{ +} + +//Function Number: 67 +flag_set_player_trigger(param_00) +{ + if(maps\_utility::func_E89()) + { + thread func_1AD3(param_00); + return; + } + + var_01 = param_00 maps\_utility::func_F89(); + if(!isdefined(level.flag[var_01])) + { + common_scripts\utility::flag_init(var_01); + } + + for(;;) + { + param_00 waittill("trigger",var_02); + if(!isplayer(var_02)) + { + continue; + } + + param_00 maps\_utility::script_delay(); + common_scripts\utility::flag_set(var_01); + } +} + +//Function Number: 68 +trigger_nobloodpool(param_00) +{ + for(;;) + { + param_00 waittill("trigger",var_01); + if(!isalive(var_01)) + { + continue; + } + + var_01.var_AB6 = 1; + var_01 thread set_wait_then_clear_skipbloodpool(); + } +} + +//Function Number: 69 +set_wait_then_clear_skipbloodpool() +{ + self notify("notify_wait_then_clear_skipBloodPool"); + self endon("notify_wait_then_clear_skipBloodPool"); + self endon("death"); + wait 2; + self.var_AB6 = undefined; +} + +//Function Number: 70 +func_1ACC(param_00) +{ + for(;;) + { + param_00 waittill("trigger",var_01); + if(getdvarint("sm_sunenable") == 1) + { + continue; + } + + setsaveddvar("sm_sunenable",1); + } +} + +//Function Number: 71 +sun_off(param_00) +{ + for(;;) + { + param_00 waittill("trigger",var_01); + if(getdvarint("sm_sunenable") == 0) + { + continue; + } + + setsaveddvar("sm_sunenable",0); + } +} + +//Function Number: 72 +flag_set_trigger(param_00) +{ + var_01 = param_00 maps\_utility::func_F89(); + if(!isdefined(level.flag[var_01])) + { + common_scripts\utility::flag_init(var_01); + } + + for(;;) + { + param_00 waittill("trigger",var_02); + param_00 maps\_utility::script_delay(); + common_scripts\utility::flag_set(var_01,var_02); + } +} + +//Function Number: 73 +flag_set_trigger_specialops(param_00) +{ + var_01 = param_00 maps\_utility::func_F89(); + if(!isdefined(level.flag[var_01])) + { + common_scripts\utility::flag_init(var_01); + } + + param_00.player_touched_arr = level.players; + param_00 thread flag_set_trigger_specialops_clear(var_01); + for(;;) + { + param_00 waittill("trigger",var_02); + param_00.player_touched_arr = common_scripts\utility::array_remove(param_00.player_touched_arr,var_02); + if(param_00.player_touched_arr.size) + { + continue; + } + + param_00 maps\_utility::script_delay(); + common_scripts\utility::flag_set(var_01,var_02); + } +} + +//Function Number: 74 +flag_set_trigger_specialops_clear(param_00) +{ + for(;;) + { + level waittill(param_00); + if(common_scripts\utility::flag(param_00)) + { + self.player_touched_arr = []; + continue; + } + + self.player_touched_arr = level.players; + } +} + +//Function Number: 75 +trigger_damage_player_flag_set(param_00) +{ + var_01 = param_00 maps\_utility::func_F89(); + if(!isdefined(level.flag[var_01])) + { + common_scripts\utility::flag_init(var_01); + } + + for(;;) + { + param_00 waittill("trigger",var_02); + if(!isalive(var_02)) + { + continue; + } + + if(!isplayer(var_02)) + { + continue; + } + + param_00 maps\_utility::script_delay(); + common_scripts\utility::flag_set(var_01,var_02); + } +} + +//Function Number: 76 +func_1AD3(param_00) +{ + var_01 = param_00 maps\_utility::func_F89(); + if(!isdefined(level.flag[var_01])) + { + common_scripts\utility::flag_init(var_01); + } + + var_02 = []; + for(;;) + { + param_00 waittill("trigger",var_03); + if(!isplayer(var_03)) + { + continue; + } + + var_04 = []; + var_03 = maps\_utility::array_merge(var_03,var_41); + if(var_03.size == level.players.size) + { + break; + } + } + + var_01 maps\_utility::script_delay(); + common_scripts\utility::flag_set(var_02); +} + +//Function Number: 77 +flag_unset_trigger(param_00) +{ + var_01 = param_00 maps\_utility::func_F89(); + if(!isdefined(level.flag[var_01])) + { + common_scripts\utility::flag_init(var_01); + } + + for(;;) + { + param_00 waittill("trigger"); + param_00 maps\_utility::script_delay(); + common_scripts\utility::flag_clear(var_01); + } +} + +//Function Number: 78 +eq_trigger(param_00) +{ + level.set_eq_func[1] = ::set_eq_on; + level.set_eq_func[0] = ::set_eq_off; + var_01 = getent(param_00.target,"targetname"); + for(;;) + { + param_00 waittill("trigger"); + var_02 = getaiarray("allies"); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + var_02[var_03] [[ level.set_eq_func[var_02[var_03] istouching(var_01)] ]](); + } + + while(level.player istouching(param_00)) + { + wait 0.05; + } + + var_02 = getaiarray("allies"); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + var_02[var_03] [[ level.set_eq_func[0] ]](); + } + } +} + +//Function Number: 79 +func_1AD7() +{ + self endon("death"); + self.ignoretriggers = 1; + wait 1; + self.ignoretriggers = 0; +} + +//Function Number: 80 +func_1AD8(param_00) +{ + var_01 = []; + for(var_02 = 0;var_02 < level.eq_trigger_table[var_01].size;var_02++ = var_41[0]) + { + var_41[var_41.size] = level.eq_trigger_table[var_01][var_02]; + } + + return var_41; +} + +//Function Number: 81 +player_touched_eq_trigger(param_00,param_01) +{ + self endon("death"); + var_02 = func_1AD8(param_00); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + self.eq_table[var_02[var_03]] = 1; + self.eq_touching[var_02[var_03]] = 1; + } + + thread func_1AD7(); + var_04 = getaiarray(); + for(var_05 = 0;var_05 < var_04.size;var_05++) + { + var_06 = var_04[var_05]; + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + if(var_06.eq_table[var_02[var_03]]) + { + var_06 eqoff(); + break; + } + } + } + + while(self istouching(param_01)) + { + wait 0.05; + } + + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + self.eq_table[var_02[var_03]] = 0; + self.eq_touching[var_02[var_03]] = undefined; + } + + var_04 = getaiarray(); + for(var_05 = 0;var_05 < var_04.size;var_05++) + { + var_06 = var_04[var_05]; + var_07 = 0; + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + if(var_06.eq_table[var_02[var_03]]) + { + var_07 = 1; + } + } + + if(!var_07) + { + continue; + } + + var_08 = getarraykeys(self.eq_touching); + var_09 = 0; + for(var_0A = 0;var_0A < var_08.size;var_0A++) + { + if(!var_06.eq_table[var_08[var_0A]]) + { + continue; + } + + var_09 = 1; + break; + } + + if(!var_09) + { + var_06 eqon(); + } + } +} + +//Function Number: 82 +ai_touched_eq_trigger(param_00,param_01) +{ + self endon("death"); + var_02 = func_1AD8(param_00); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + self.eq_table[var_02[var_03]] = 1; + self.eq_touching[var_02[var_03]] = 1; + } + + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + if(level.player.eq_table[var_02[var_03]]) + { + self eqoff(); + break; + } + } + + self.ignoretriggers = 1; + wait 1; + self.ignoretriggers = 0; + while(self istouching(param_01)) + { + wait 0.5; + } + + var_02 = func_1AD8(param_00); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + self.eq_table[var_02[var_03]] = 0; + self.eq_touching[var_02[var_03]] = undefined; + } + + var_04 = getarraykeys(self.eq_touching); + for(var_05 = 0;var_05 < var_04.size;var_05++) + { + if(level.player.eq_table[var_04[var_05]]) + { + return; + } + } + + self eqon(); +} + +//Function Number: 83 +func_1ADE() +{ + level.set_eq_func[0] = ::set_eq_on; + level.set_eq_func[1] = ::set_eq_off; + var_00 = 0; + for(;;) + { + while(!level.ai_array.size) + { + wait 0.05; + } + + waittillframeend; + waittillframeend; + var_01 = getarraykeys(level.ai_array); + var_00++; + if(var_00 >= var_01.size) + { + var_00 = 0; + } + + var_02 = level.ai_array[var_01[var_00]]; + var_02 [[ level.set_eq_func[sighttracepassed(level.player geteye(),var_02 geteye(),0,undefined)] ]](); + wait 0.05; + } +} + +//Function Number: 84 +set_eq_on() +{ + self eqon(); +} + +//Function Number: 85 +set_eq_off() +{ + self eqoff(); +} + +//Function Number: 86 +add_tokens_to_trigger_flags(param_00) +{ + for(var_01 = 0;var_01 < param_00.size;var_01++) + { + var_02 = param_00[var_01]; + if(!isdefined(level.trigger_flags[var_02])) + { + level.trigger_flags[var_02] = []; + } + + level.trigger_flags[var_02][level.trigger_flags[var_02].size] = self; + } +} + +//Function Number: 87 +func_1AE3(param_00) +{ + var_01 = common_scripts\utility::create_flags_and_return_tokens(param_00.script_flag_false); + param_00 add_tokens_to_trigger_flags(var_01); + param_00 common_scripts\utility::update_trigger_based_on_flags(); +} + +//Function Number: 88 +script_flag_true_trigger(param_00) +{ + var_01 = common_scripts\utility::create_flags_and_return_tokens(param_00.script_flag_true); + param_00 add_tokens_to_trigger_flags(var_01); + param_00 common_scripts\utility::update_trigger_based_on_flags(); +} + +//Function Number: 89 +wait_for_flag(param_00) +{ + for(var_01 = 0;var_01 < param_00.size;var_01++) + { + level endon(param_00[var_01]); + } + + level waittill("foreverrr"); +} + +//Function Number: 90 +func_1AE6(param_00) +{ + var_01 = []; + var_02 = common_scripts\utility::getstructarray(param_00.target,"targetname"); + var_03 = getentarray(param_00.target,"targetname"); + foreach(var_05 in var_03) + { + var_06 = spawnstruct(); + var_06.origin = var_05.origin; + var_06.script_parameters = var_05.script_parameters; + var_06.script_damage = var_05.script_damage; + var_06.radius = var_05.radius; + var_02[var_02.size] = var_06; + var_05 delete(); + } + + param_00.var_1AE7 = var_02[0].origin; + param_00 waittill("trigger"); + param_00 maps\_utility::script_delay(); + foreach(var_06 in var_02) + { + var_09 = var_06.radius; + var_0A = var_06.script_parameters; + var_0B = var_06.script_damage; + if(!isdefined(var_09)) + { + var_09 = 350; + } + + if(!isdefined(var_0A)) + { + var_0A = 0.25; + } + + setdvar("tempdvar",var_0A); + var_0A = getdvarfloat("tempdvar"); + if(isdefined(var_0B)) + { + radiusdamage(var_06.origin,var_09,var_0B,var_0B * 0.5); + } + + physicsexplosionsphere(var_06.origin,var_09,var_09 * 0.5,var_0A); + } +} + +//Function Number: 91 +trigger_multiple_friendly_stop_respawn(param_00) +{ + for(;;) + { + param_00 waittill("trigger"); + common_scripts\utility::flag_clear("respawn_friendlies"); + } +} + +//Function Number: 92 +trigger_multiple_friendly_respawn(param_00) +{ + param_00 endon("death"); + var_01 = getent(param_00.target,"targetname"); + var_02 = undefined; + if(isdefined(var_01)) + { + var_02 = var_01.origin; + var_01 delete(); + } + else + { + var_01 = common_scripts\utility::getstruct(param_00.target,"targetname"); + var_02 = var_01.origin; + } + + for(;;) + { + param_00 waittill("trigger"); + level.respawn_spawner_org = var_02; + common_scripts\utility::flag_set("respawn_friendlies"); + wait 0.5; + } +} + +//Function Number: 93 +func_1AEA(param_00) +{ + for(;;) + { + param_00 waittill("trigger"); + common_scripts\utility::flag_clear("respawn_friendlies"); + wait 0.5; + } +} + +//Function Number: 94 +func_1AEB(param_00) +{ + param_00 waittill("trigger"); + param_00 do_radius_damage_from_target(); +} + +//Function Number: 95 +do_radius_damage_from_target() +{ + var_00 = 80; + if(isdefined(self.radius)) + { + var_00 = self.radius; + } + + var_01 = maps\_utility::func_1AED(); + foreach(var_03 in var_01) + { + radiusdamage(var_03.origin,var_00,5000,5000); + } + + self delete(); +} + +//Function Number: 96 +trigger_damage_do_radius_damage(param_00) +{ + for(;;) + { + param_00 waittill("damage",var_01,var_02,var_03,var_04,var_05,var_06,var_07); + if(!isalive(var_02)) + { + continue; + } + + if(distance(var_02.origin,param_00.origin) > 940) + { + continue; + } + + break; + } + + param_00 do_radius_damage_from_target(); +} + +//Function Number: 97 +func_1AEF(param_00) +{ + param_00 waittill("trigger"); + maps\_utility::func_DDF(param_00.script_noteworthy); +} + +//Function Number: 98 +background_block() +{ + self.origin = self.origin - self.var_1AF1; +} + +//Function Number: 99 +func_1AF2(param_00) +{ + thread func_1AF7(param_00,::maps\_utility::set_ignoreme,::maps\_utility::get_ignoreme); +} + +//Function Number: 100 +trigger_pacifist(param_00) +{ + thread func_1AF7(param_00,::maps\_utility::func_1AF6,::maps\_utility::func_1AF5); +} + +//Function Number: 101 +func_1AF7(param_00,param_01,param_02) +{ + for(;;) + { + param_00 waittill("trigger",var_03); + if(!isalive(var_03)) + { + continue; + } + + if(var_03 [[ param_02 ]]()) + { + continue; + } + + var_03 thread touched_trigger_runs_func(param_00,param_01); + } +} + +//Function Number: 102 +touched_trigger_runs_func(param_00,param_01) +{ + self endon("death"); + self.ignoreme = 1; + [[ param_01 ]](1); + self.ignoretriggers = 1; + wait 1; + self.ignoretriggers = 0; + while(self istouching(param_00)) + { + wait 1; + } + + [[ param_01 ]](0); +} + +//Function Number: 103 +trigger_turns_off(param_00) +{ + param_00 waittill("trigger"); + param_00 common_scripts\utility::trigger_off(); + if(!isdefined(param_00.script_linkto)) + { + return; + } + + var_01 = strtok(param_00.script_linkto," "); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + common_scripts\utility::array_thread(getentarray(var_01[var_02],"script_linkname"),::common_scripts\utility::trigger_off); + } +} + +//Function Number: 104 +set_player_viewhand_model(param_00) +{ + level.var_1AFB = param_00; + precachemodel(level.var_1AFB); +} + +//Function Number: 105 +func_1AFC(param_00) +{ + if(!isdefined(level.var_1AFD)) + { + level.var_1AFD = []; + } + + waittillframeend; + var_01 = param_00.script_hint; + param_00 waittill("trigger",var_02); + if(isdefined(level.var_1AFD[var_01])) + { + return; + } + + level.var_1AFD[var_01] = 1; + var_02 maps\_utility::display_hint(var_01); +} + +//Function Number: 106 +stun_test() +{ + if(getdvar("stuntime") == "") + { + setdvar("stuntime","1"); + } + + level.player.allowads = 1; + for(;;) + { + self waittill("damage"); + if(getdvarint("stuntime") == 0) + { + continue; + } + + thread func_1B02(self playerads()); + } +} + +//Function Number: 107 +func_1B02(param_00) +{ + self notify("stun_player"); + self endon("stun_player"); + if(param_00 > 0.3) + { + if(level.player.allowads == 1) + { + level.player playsound("player_hit_while_ads"); + } + + level.player.allowads = 0; + level.player allowads(0); + } + + level.player setspreadoverride(20); + wait getdvarint("stuntime"); + level.player allowads(1); + level.player.allowads = 1; + level.player resetspreadoverride(); +} + +//Function Number: 108 +func_1B03(param_00) +{ + param_00 endon("death"); + param_00 waittill("trigger"); + maps\_utility::throwgrenadeatplayerasap(); +} + +//Function Number: 109 +func_1B04(param_00) +{ + var_01 = param_00 maps\_utility::func_F89(); + if(!isdefined(level.flag[var_01])) + { + common_scripts\utility::flag_init(var_01); + } + + for(;;) + { + param_00 waittill("trigger"); + wait 1; + if(param_00 found_toucher()) + { + continue; + } + + break; + } + + common_scripts\utility::flag_set(var_01); +} + +//Function Number: 110 +found_toucher() +{ + var_00 = getaiarray("bad_guys"); + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + var_02 = var_00[var_01]; + if(!isalive(var_02)) + { + continue; + } + + if(var_02 istouching(self)) + { + return 1; + } + + wait 0.1; + } + + var_00 = getaiarray("bad_guys"); + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + var_02 = var_00[var_01]; + if(var_02 istouching(self)) + { + return 1; + } + } + + return 0; +} + +//Function Number: 111 +func_1B06(param_00) +{ + for(;;) + { + param_00 waittill("trigger",var_01); + if(isdefined(var_01)) + { + var_01 delete(); + } + } +} + +//Function Number: 112 +flag_set_touching(param_00) +{ + var_01 = param_00 maps\_utility::func_F89(); + if(!isdefined(level.flag[var_01])) + { + common_scripts\utility::flag_init(var_01); + } + + for(;;) + { + param_00 waittill("trigger",var_02); + param_00 maps\_utility::script_delay(); + if(isalive(var_02) && var_02 istouching(param_00) && isdefined(param_00)) + { + common_scripts\utility::flag_set(var_01); + } + + while(isalive(var_02) && var_02 istouching(param_00) && isdefined(param_00)) + { + wait 0.25; + } + + common_scripts\utility::flag_clear(var_01); + } +} + +//Function Number: 113 +setobjectivetextcolors() +{ + var_00 = "1.0 1.0 1.0"; + var_01 = "0.9 0.9 0.9"; + var_02 = "0.85 0.85 0.85"; + if(level.script == "armada") + { + setsaveddvar("con_typewriterColorBase",var_01); + return; + } + + setsaveddvar("con_typewriterColorBase",var_00); +} + +//Function Number: 114 +ammo_pickup(param_00) +{ + var_01 = []; + if(param_00 == "grenade_launcher") + { + } + else if(var_01 == "rpg") + { + } + else if(var_01 == "c4") + { + } + else if(var_01 == "claymore") + { + } + else if(var_01 == "556") + { + } + else if(var_01 == "762") + { + } + else if(var_01 == "45") + { + } + else if(var_01 == "pistol") + { + } + + var_02 = spawn("trigger_radius",self.origin,0,25,32); + for(;;) + { + common_scripts\utility::flag_wait("allow_ammo_pickups"); + var_02 waittill("alt_m4_grenadier",var_41[var_01.size],"alt_m4m203_acog",var_41[var_41.size],"alt_m4m203_acog_payback",var_41[var_41.size],"alt_m4m203_eotech",var_41[var_41.size],"alt_m4m203_motion_tracker",var_41[var_41.size],"alt_m4m203_reflex",var_41[var_41.size],"alt_m4m203_reflex_arctic",var_41[var_41.size],"alt_m4m203_silencer",var_41[var_41.size],"alt_m4m203_silencer_reflex",var_41[var_41.size],"alt_m16_grenadier",var_41[var_41.size],"alt_ak47_grenadier",var_41[var_41.size],"alt_ak47_desert_grenadier",var_41[var_41.size],"alt_ak47_digital_grenadier",var_41[var_41.size],"alt_ak47_fall_grenadier",var_41[var_41.size],"alt_ak47_woodland_grenadier",var_41[var_41.size],"rpg",var_41[var_41.size],"rpg_player",var_41[var_41.size],"rpg_straight",var_41[var_41.size],"c4",var_41[var_41.size],"claymore",var_41[var_41.size],"m4_grenadier",var_41[var_41.size],"m4_grunt",var_41[var_41.size],"m4_sd_cloth",var_41[var_41.size],"m4_shotgun",var_41[var_41.size],"m4_silencer",var_41[var_41.size],"m4_silencer_acog",var_41[var_41.size],"m4m203_acog",var_41[var_41.size],"m4m203_acog_payback",var_41[var_41.size],"m4m203_eotech",var_41[var_41.size],"m4m203_motion_tracker",var_41[var_41.size],"m4m203_reflex",var_41[var_41.size],"m4m203_reflex_arctic",var_41[var_41.size],"m4m203_silencer",var_41[var_41.size],"m4m203_silencer_reflex",var_41[var_41.size],"m4m203_silencer",var_41[var_41.size],"ak47",var_41[var_41.size],"ak47_acog",var_41[var_41.size],"ak47_eotech",var_41[var_41.size],"ak47_grenadier",var_41[var_41.size],"ak47_reflex",var_41[var_41.size],"ak47_shotgun",var_41[var_41.size],"ak47_silencer",var_41[var_41.size],"ak47_thermal",var_41[var_41.size],"ak47_desert",var_41[var_41.size],"ak47_desert_acog",var_41[var_41.size],"ak47_desert_eotech",var_41[var_41.size],"ak47_desert_grenadier",var_41[var_41.size],"ak47_desert_reflex",var_41[var_41.size],"ak47_digital",var_41[var_41.size],"ak47_digital_acog",var_41[var_41.size],"ak47_digital_eotech",var_41[var_41.size],"ak47_digital_grenadier",var_41[var_41.size],"ak47_digital_reflex",var_41[var_41.size],"ak47_fall",var_41[var_41.size],"ak47_fall_acog",var_41[var_41.size],"ak47_fall_eotech",var_41[var_41.size],"ak47_fall_grenadier",var_41[var_41.size],"ak47_fall_reflex",var_41[var_41.size],"ak47_woodland",var_41[var_41.size],"ak47_woodland_acog",var_41[var_41.size],"ak47_woodland_eotech",var_41[var_41.size],"ak47_woodland_grenadier",var_41[var_41.size],"ak47_woodland_reflex",var_41[var_41.size],"ump45",var_41[var_41.size],"ump45_acog",var_41[var_41.size],"ump45_eotech",var_41[var_41.size],"ump45_reflex",var_41[var_41.size],"ump45_silencer",var_41[var_41.size],"ump45_arctic",var_41[var_41.size],"ump45_arctic_acog",var_41[var_41.size],"ump45_arctic_eotech",var_41[var_41.size],"ump45_arctic_reflex",var_41[var_41.size],"ump45_digital",var_41[var_41.size],"ump45_digital_acog",var_41[var_41.size],"ump45_digital_eotech",var_41[var_41.size],"ump45_digital_reflex",var_41[var_41.size],"beretta",var_41[var_41.size],"beretta393",var_41[var_41.size],"usp",var_41[var_41.size],"usp_scripted",var_41[var_41.size],"usp_silencer",var_41[var_41.size],"glock",var_41[var_41.size],"trigger",var_03); + if(!common_scripts\utility::flag("allow_ammo_pickups")) + { + continue; + } + + if(!isdefined(var_03)) + { + continue; + } + + if(!isplayer(var_03)) + { + continue; + } + + var_04 = undefined; + var_05 = undefined; + var_06 = var_03 getweaponslistall(); + for(var_07 = 0;var_07 < var_06.size;var_07++) + { + for(var_08 = 0;var_08 < var_41.size;var_08++) + { + if(var_06[var_07] == var_41[var_08]) + { + var_04 = var_06[var_07]; + } + } + } + + if(!isdefined(var_04) && var_01 == "claymore") + { + var_05 = 1; + var_04 = "claymore"; + break; + } + + if(!isdefined(var_04) && var_01 == "c4") + { + var_05 = 1; + var_04 = "c4"; + break; + } + + if(!isdefined(var_04)) + { + continue; + } + + if(var_03 getfractionmaxammo(var_04) >= 1) + { + continue; + } + + break; + } + + if(isdefined(var_05)) + { + var_03 giveweapon(var_04); + } + else + { + var_09 = 1; + if(var_01 == "556" || var_01 == "762") + { + var_09 = 30; + } + else if(var_01 == "45") + { + var_09 = 25; + } + else if(var_01 == "pistol") + { + var_09 = 15; + } + + var_03 setweaponammostock(var_04,var_03 getweaponammostock(var_04) + var_09); + } + + var_03 playlocalsound("grenade_pickup"); + var_02 delete(); + if(isdefined(self)) + { + self delete(); + } +} + +//Function Number: 115 +get_script_linkto_targets() +{ + var_00 = []; + if(!isdefined(self.script_linkto)) + { + return var_00; + } + + var_01 = strtok(self.script_linkto," "); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + var_03 = var_01[var_02]; + var_04 = getent(var_03,"script_linkname"); + if(isdefined(var_04)) + { + var_00[var_00.size] = var_04; + } + } + + return var_00; +} + +//Function Number: 116 +delete_link_chain(param_00) +{ + param_00 waittill("trigger"); + var_01 = param_00 get_script_linkto_targets(); + common_scripts\utility::array_thread(var_01,::func_1B0C); +} + +//Function Number: 117 +func_1B0C() +{ + var_00 = get_script_linkto_targets(); + common_scripts\utility::array_thread(var_00,::func_1B0C); + self delete(); +} + +//Function Number: 118 +trigger_fog(param_00) +{ + waittillframeend; + var_01 = param_00.script_fogset_start; + var_02 = param_00.script_fogset_end; + param_00.sunfog_enabled = 0; + if(isdefined(var_01) && isdefined(var_02)) + { + var_03 = maps\_utility::get_fog(var_01); + var_04 = maps\_utility::get_fog(var_02); + param_00.var_1B12 = var_03.var_1688; + param_00.start_fardist = var_03.var_1689; + param_00.start_color = (var_03.red,var_03.green,var_03.blue); + param_00.start_opacity = var_03.maxopacity; + param_00.sunfog_enabled = isdefined(var_03.var_168E) || isdefined(var_04.var_168E); + if(isdefined(var_03.var_168E)) + { + param_00.var_1B16 = (var_03.var_168E,var_03.sungreen,var_03.sunblue); + param_00.var_1B17 = var_03.sundir; + param_00.start_sunbeginfadeangle = var_03.sunbeginfadeangle; + param_00.start_sunendfadeangle = var_03.var_1693; + param_00.start_sunfogscale = var_03.normalfogscale; + } + else if(param_00.sunfog_enabled) + { + param_00.var_1B16 = param_00.start_color; + param_00.var_1B17 = (0,0,0); + param_00.start_sunbeginfadeangle = 0; + param_00.start_sunendfadeangle = 90; + param_00.start_sunfogscale = 1; + } + + param_00.end_neardist = var_04.var_1688; + param_00.end_fardist = var_04.var_1689; + param_00.end_color = (var_03.red,var_03.green,var_03.blue); + param_00.end_opacity = var_04.maxopacity; + if(isdefined(var_04.var_168E)) + { + param_00.end_suncolor = (var_04.var_168E,var_04.sungreen,var_04.sunblue); + param_00.end_sundir = var_04.sundir; + param_00.end_sunbeginfadeangle = var_04.sunbeginfadeangle; + param_00.var_1B22 = var_04.var_1693; + param_00.var_1B23 = var_04.normalfogscale; + } + else if(param_00.sunfog_enabled) + { + param_00.end_suncolor = param_00.end_color; + param_00.end_sundir = (0,0,0); + param_00.end_sunbeginfadeangle = 0; + param_00.var_1B22 = 90; + param_00.var_1B23 = 1; + } + } + + var_05 = getent(param_00.target,"targetname"); + var_06 = var_05.origin; + var_07 = undefined; + if(isdefined(var_05.target)) + { + var_08 = getent(var_05.target,"targetname"); + var_07 = var_08.origin; + } + else + { + var_07 = var_06 + param_00.origin - var_06 * 2; + } + + var_09 = distance(var_06,var_07); + for(;;) + { + param_00 waittill("trigger",var_0A); + var_0B = 0; + while(var_0A istouching(param_00)) + { + var_0B = maps\_utility::get_progress(var_06,var_07,var_0A.origin,var_09); + var_0B = clamp(var_0B,0,1); + param_00 set_fog_progress(var_0B); + wait 0.05; + } + + if(var_0B > 0.5) + { + var_0B = 1; + } + else + { + var_0B = 0; + } + + param_00 set_fog_progress(var_0B); + } +} + +//Function Number: 119 +set_fog_progress(param_00) +{ + var_01 = 1 - param_00; + var_02 = self.var_1B12 * var_01 + self.end_neardist * param_00; + var_03 = self.start_fardist * var_01 + self.end_fardist * param_00; + var_04 = self.start_color * var_01 + self.end_color * param_00; + var_05 = self.start_opacity; + var_06 = self.end_opacity; + if(!isdefined(var_05)) + { + var_05 = 1; + } + + if(!isdefined(var_06)) + { + var_06 = 1; + } + + var_07 = var_05 * var_01 + var_06 * param_00; + if(self.sunfog_enabled) + { + var_08 = self.var_1B16 * var_01 + self.end_suncolor * param_00; + var_09 = self.var_1B17 * var_01 + self.end_sundir * param_00; + var_0A = self.start_sunbeginfadeangle * var_01 + self.end_sunbeginfadeangle * param_00; + var_0B = self.start_sunendfadeangle * var_01 + self.var_1B22 * param_00; + var_0C = self.start_sunfogscale * var_01 + self.var_1B23 * param_00; + setexpfog(var_02,var_03,var_04[0],var_04[1],var_04[2],var_07,0.4,var_08[0],var_08[1],var_08[2],var_09,var_0A,var_0B,var_0C); + return; + } + + setexpfog(var_02,var_03,var_04[0],var_04[1],var_04[2],var_07,0.4); +} + +//Function Number: 120 +remove_level_first_frame() +{ + wait 0.05; + level.first_frame = -1; +} + +//Function Number: 121 +no_crouch_or_prone_think(param_00) +{ + common_scripts\utility::array_thread(level.players,::no_crouch_or_prone_think_for_player,param_00); +} + +//Function Number: 122 +no_crouch_or_prone_think_for_player(param_00) +{ + for(;;) + { + param_00 waittill("trigger",var_01); + if(!isdefined(var_01)) + { + continue; + } + + if(var_01 != self) + { + continue; + } + + while(var_01 istouching(param_00)) + { + var_01 allowprone(0); + var_01 allowcrouch(0); + wait 0.05; + } + + var_01 allowprone(1); + var_01 allowcrouch(1); + } +} + +//Function Number: 123 +no_prone_think(param_00) +{ + common_scripts\utility::array_thread(level.players,::func_1B29,param_00); +} + +//Function Number: 124 +func_1B29(param_00) +{ + for(;;) + { + param_00 waittill("trigger",var_01); + if(!isdefined(var_01)) + { + continue; + } + + if(var_01 != self) + { + continue; + } + + while(var_01 istouching(param_00)) + { + var_01 allowprone(0); + wait 0.05; + } + + var_01 allowprone(1); + } +} + +//Function Number: 125 +func_1B2A() +{ + if(isdefined(game["total characters"])) + { + var_00 = game["total characters"]; + } + else + { + return; + } + + var_01 = getaiarray("allies"); + var_02 = var_01.size; + var_03 = 0; + var_04 = getspawnerteamarray("allies"); + var_05 = var_04.size; + var_06 = 0; + for(;;) + { + if((var_02 <= 0 && var_05 <= 0) || var_00 <= 0) + { + return; + } + + if(var_02 > 0) + { + if(isdefined(var_01[var_03].script_friendname)) + { + var_02--; + var_03++; + continue; + } + + var_01[var_03] codescripts\character::func_19FB(); + var_01[var_03] thread codescripts\character::load(game["character" + var_00 - 1]); + var_02--; + var_03++; + var_00--; + continue; + } + + if(var_05 > 0) + { + if(isdefined(var_04[var_06].script_friendname)) + { + var_05--; + var_06++; + continue; + } + + var_07 = game["character" + var_00 - 1]; + maps\_utility::precache(var_07["model"]); + maps\_utility::precache(var_07["model"]); + var_04[var_06] thread maps\_utility::spawn_setcharacter(game["character" + var_00 - 1]); + var_05--; + var_06++; + var_00--; + continue; + } + } +} + +//Function Number: 126 +check_flag_for_stat_tracking(param_00) +{ + if(!common_scripts\utility::issuffix(param_00,"aa_")) + { + return; + } + + [[ level.sp_stat_tracking_func ]](param_00); +} + +//Function Number: 127 +precache_script_models() +{ + waittillframeend; + if(!isdefined(level.var_1B2E)) + { + return; + } + + var_00 = getarraykeys(level.var_1B2E); + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + if(isarray(level.var_1B2E[var_00[var_01]])) + { + for(var_02 = 0;var_02 < level.var_1B2E[var_00[var_01]].size;var_02++) + { + precachemodel(level.var_1B2E[var_00[var_01]][var_02]); + } + + continue; + } + + precachemodel(level.var_1B2E[var_00[var_01]]); + } +} + +//Function Number: 128 +arcademode_save() +{ + var_00 = []; + if(var_41[level.script]) + { + return; + } + + wait 2.5; + var_01 = "levelshots / autosave / autosave_" + level.script + "start"; + savegame("levelstart",&"AUTOSAVE_LEVELSTART",var_01,1); +} + +//Function Number: 129 +player_death_detection() +{ + setdvar("player_died_recently","0"); + thread player_died_recently_degrades(); + level maps\_utility::add_wait(::common_scripts\utility::flag_wait,"missionfailed"); + level.player maps\_utility::add_wait(::maps\_utility::waittill_msg,"death"); + maps\_utility::do_wait_any(); + var_00 = []; + setdvar("player_died_recently",var_41[level.gameskill]); +} + +//Function Number: 130 +player_died_recently_degrades() +{ + for(;;) + { + var_00 = getdvarint("player_died_recently",0); + if(var_00 > 0) + { + var_00 = var_00 - 5; + setdvar("player_died_recently",var_00); + } + + wait 5; + } +} + +//Function Number: 131 +trigger_spawngroup(param_00) +{ + waittillframeend; + var_01 = param_00.var_1B33; + if(!isdefined(level.spawn_groups[var_01])) + { + return; + } + + param_00 waittill("trigger"); + var_02 = common_scripts\utility::random(level.spawn_groups[var_01]); + foreach(var_04 in var_02) + { + var_04 maps\_utility::spawn_ai(); + } +} + +//Function Number: 132 +recon_player() +{ + self notify("new_recon_player"); + self endon("new_recon_player"); + self waittill("death",var_00,var_01,var_02); + if(!isdefined(var_02)) + { + var_02 = "script_kill"; + } + + var_03 = 0; + var_04 = "none"; + var_05 = (0,0,0); + if(isdefined(var_00)) + { + var_04 = var_00.classname; + var_05 = var_00.origin; + var_06 = vectornormalize(var_05 - self.origin); + var_07 = anglestoforward(self getplayerangles()); + var_03 = vectordot(var_06,var_07); + } + + reconspatialevent(self.origin,"script_player_death: playerid %s, enemy %s, enemyposition %v, enemydotproduct %f, cause %s, weapon %s",self.unique_id,var_04,var_05,var_03,var_01,var_02); + if(isdefined(var_00)) + { + reconspatialevent(var_00.origin,"script_player_killer: playerid %s, enemy %s, playerposition %v, enemydotproduct %f, cause %s, weapon %s",self.unique_id,var_04,self.origin,var_03,var_01,var_02); + } +} + +//Function Number: 133 +recon_player_downed() +{ + self notify("new_player_downed_recon"); + self endon("new_player_downed_recon"); + self endon("death"); + for(;;) + { + self waittill("player_downed"); + var_00 = getlevelticks() * 0.05; + var_01 = var_00; + if(isdefined(self.last_downed_time)) + { + var_00 = var_01 - self.last_downed_time; + } + + self.last_downed_time = var_01; + reconspatialevent(self.origin,"script_player_downed: playerid %s, leveltime %d, deltatime %d",self.unique_id,var_01,var_00); + } +} + +//Function Number: 134 +init_level_players() +{ + level.players = getentarray("player","classname"); + for(var_00 = 0;var_00 < level.players.size;var_00++) + { + level.players[var_00].unique_id = "player" + var_00; + } + + level.player = level.players[0]; + if(level.players.size > 1) + { + level.player2 = level.players[1]; + } + + level notify("level.players initialized"); + foreach(var_02 in level.players) + { + var_02 thread recon_player(); + if(maps\_utility::is_specialop()) + { + var_02 thread recon_player_downed(); + } + } +} + +//Function Number: 135 +kill_all_players_trigger() +{ + self waittill("trigger",var_00); + maps\_utility::kill_wrapper(); +} + +//Function Number: 136 +trigger_vehicle_spline_spawn(param_00) +{ + param_00 waittill("trigger"); + var_01 = getentarray(param_00.target,"targetname"); + foreach(var_03 in var_01) + { + var_03 thread maps\_vehicle::spawn_vehicle_and_attach_to_spline_path(70); + wait 0.05; + } +} + +//Function Number: 137 +trigger_vehicle_spawn(param_00) +{ + param_00 waittill("trigger"); + var_01 = getentarray(param_00.target,"targetname"); + foreach(var_03 in var_01) + { + var_03 thread maps\_vehicle::func_1B3C(); + wait 0.05; + } +} + +//Function Number: 138 +trigger_dooropen(param_00) +{ + param_00 waittill("trigger"); + var_01 = getentarray(param_00.target,"targetname"); + var_02 = []; + foreach(var_04 in var_02) + { + var_05 = var_41[var_04.script_noteworthy]; + var_04 connectpaths(); + var_04 rotateyaw(var_05,1,0,0.5); + } +} + +//Function Number: 139 +trigger_glass_break(param_00) +{ + var_01 = getglassarray(param_00.target); + if(!isdefined(var_01) || var_01.size == 0) + { + return; + } + + for(;;) + { + level waittill("glass_break",var_02); + if(var_02 istouching(param_00)) + { + var_03 = var_02.origin; + wait 0.05; + var_04 = var_02.origin; + var_05 = undefined; + if(var_03 != var_04) + { + var_05 = var_04 - var_03; + } + + if(isdefined(var_05)) + { + foreach(var_07 in var_01) + { + destroyglass(var_07,var_05); + } + + break; + } + else + { + foreach(var_07 in var_01) + { + destroyglass(var_07); + } + + break; + } + } + } + + param_00 delete(); +} + +//Function Number: 140 +trigger_vehicle_getin_spawn(param_00) +{ + var_01 = getentarray(param_00.target,"targetname"); + foreach(var_03 in var_01) + { + var_04 = getentarray(var_03.target,"targetname"); + foreach(var_06 in var_04) + { + if(!issubstr(var_06.code_classname,"actor")) + { + continue; + } + + if(!var_06.spawnflags & 1) + { + continue; + } + + var_06.var_1B40 = 1; + } + } + + param_00 waittill("trigger"); + var_01 = getentarray(param_00.target,"targetname"); + common_scripts\utility::array_thread(var_01,::maps\_utility::add_spawn_function,::vehicle_spawns_targets_and_rides); + common_scripts\utility::array_thread(var_01,::maps\_utility::func_1B41); +} + +//Function Number: 141 +vehicle_spawns_targets_and_rides() +{ + var_00 = getentarray(self.target,"targetname"); + var_01 = []; + foreach(var_03 in var_00) + { + if(var_03.code_classname == "info_vehicle_node") + { + continue; + } + + var_01[var_01.size] = var_03; + } + + var_01 = maps\_utility::get_array_of_closest(self.origin,var_01); + foreach(var_07, var_06 in var_01) + { + var_06 thread maps\_utility::add_spawn_function(::guy_spawns_and_gets_in_vehicle,self,var_07); + } + + common_scripts\utility::array_thread(var_01,::maps\_utility::spawn_ai); + self waittill("guy_entered"); + wait 3; + thread maps\_vehicle::vehicle_becomes_crashable(); + if(!self.riders.size) + { + return; + } + + maps\_vehicle::func_1B44(); + maps\_vehicle::func_1B45(); +} + +//Function Number: 142 +guy_spawns_and_gets_in_vehicle(param_00,param_01) +{ + maps\_vehicle::mount_snowmobile(param_00,param_01); +} + +//Function Number: 143 +watchweaponchange() +{ + if(!isdefined(level.friendly_thermal_reflector_effect)) + { + level.friendly_thermal_reflector_effect = loadfx("misc/thermal_tapereflect_inverted"); + } + + self endon("death"); + var_00 = self getcurrentweapon(); + if(weap_has_thermal(var_00)) + { + thread func_1B4B(); + } + + for(;;) + { + self waittill("weapon_change",var_01); + if(weap_has_thermal(var_01)) + { + thread func_1B4B(); + continue; + } + + self notify("acogThermalTracker"); + } +} + +//Function Number: 144 +weap_has_thermal(param_00) +{ + if(!isdefined(param_00)) + { + return 0; + } + + if(param_00 == "none") + { + return 0; + } + + if(weaponhasthermalscope(param_00)) + { + return 1; + } + + return 0; +} + +//Function Number: 145 +func_1B4B() +{ + self endon("death"); + self notify("acogThermalTracker"); + self endon("acogThermalTracker"); + var_00 = 0; + for(;;) + { + var_01 = var_00; + var_00 = self playerads(); + if(turn_thermal_on(var_00,var_01)) + { + thermal_effectson(); + } + else if(turn_thermal_off(var_00,var_01)) + { + func_1B51(); + } + + wait 0.05; + } +} + +//Function Number: 146 +turn_thermal_on(param_00,param_01) +{ + if(param_00 <= param_01) + { + return 0; + } + + if(param_00 <= 0.65) + { + return 0; + } + + return !isdefined(self.is_in_thermal_vision); +} + +//Function Number: 147 +turn_thermal_off(param_00,param_01) +{ + if(param_00 >= param_01) + { + return 0; + } + + if(param_00 >= 0.8) + { + return 0; + } + + return isdefined(self.is_in_thermal_vision); +} + +//Function Number: 148 +thermal_effectson() +{ + self.is_in_thermal_vision = 1; + var_00 = getaiarray("allies"); + foreach(var_02 in var_00) + { + if(isdefined(var_02.has_thermal_fx)) + { + continue; + } + + var_02.has_thermal_fx = 1; + var_02 thread func_1B52(self.unique_id); + } + + if(maps\_utility::func_E89()) + { + var_04 = maps\_utility::get_other_player(self); + if(!isdefined(var_04.has_thermal_fx)) + { + var_04.has_thermal_fx = 1; + var_04 thread func_1B52(self.unique_id,self); + } + } +} + +//Function Number: 149 +func_1B51() +{ + self.is_in_thermal_vision = undefined; + level notify("thermal_fx_off" + self.unique_id); + var_00 = getaiarray("allies"); + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + var_00[var_01].has_thermal_fx = undefined; + } + + if(maps\_utility::func_E89()) + { + var_02 = maps\_utility::get_other_player(self); + var_02.has_thermal_fx = undefined; + } +} + +//Function Number: 150 +func_1B52(param_00,param_01) +{ + if(isdefined(self.has_no_ir)) + { + return; + } + + level endon("thermal_fx_off" + param_00); + self endon("death"); + for(;;) + { + if(isdefined(param_01)) + { + playfxontagforclients(level.friendly_thermal_reflector_effect,self,"J_Spine4",param_01); + } + else + { + playfxontag(level.friendly_thermal_reflector_effect,self,"J_Spine4"); + } + + wait 0.2; + } +} + +//Function Number: 151 +claymore_pickup_think_global() +{ + precacheitem("claymore"); + self endon("deleted"); + self setcursorhint("HINT_NOICON"); + self sethintstring(&"WEAPON_CLAYMORE_PICKUP"); + self makeusable(); + var_00 = weaponmaxammo("claymore") + weaponclipsize("claymore"); + if(isdefined(self.var_1A69)) + { + var_00 = self.var_1A69; + } + + while(var_00 > 0) + { + self waittill("trigger",var_01); + var_01 playsound("weap_pickup"); + var_02 = 0; + if(!var_01 hasweapon("claymore")) + { + var_01 giveweapon("claymore"); + } + else + { + var_02 = var_01 getammocount("claymore"); + } + + if(isdefined(var_00) && var_00 > 0) + { + var_00 = var_02 + var_00; + var_03 = weaponmaxammo("claymore"); + var_04 = weaponclipsize("claymore"); + if(var_00 >= var_04) + { + var_00 = var_00 - var_04; + var_01 setweaponammoclip("claymore",var_04); + } + + if(var_00 >= var_03) + { + var_00 = var_00 - var_03; + var_01 setweaponammostock("claymore",var_03); + } + else if(var_00 > 0) + { + var_01 setweaponammostock("claymore",var_00); + var_00 = 0; + } + } + else + { + var_01 givemaxammo("claymore"); + } + + var_05 = 4; + if(isdefined(var_01.var_1B54) && var_01.var_1B54 == 4) + { + var_05 = 2; + } + + var_01 setactionslot(var_05,"weapon","claymore"); + var_01 switchtoweapon("claymore"); + } + + if(isdefined(self.target)) + { + var_06 = getentarray(self.target,"targetname"); + foreach(var_08 in var_06) + { + var_08 delete(); + } + } + + self makeunusable(); + self delete(); +} + +//Function Number: 152 +ammo_cache_think_global() +{ + self.use_trigger = spawn("script_model",self.origin + (0,0,28)); + self.use_trigger setmodel("tag_origin"); + self.use_trigger makeusable(); + self.use_trigger setcursorhint("HINT_NOICON"); + self.use_trigger sethintstring(&"WEAPON_CACHE_USE_HINT"); + thread func_1B57(); + for(;;) + { + self.use_trigger waittill("trigger",var_00); + self.use_trigger makeunusable(); + var_00 playsound("player_refill_all_ammo"); + var_00 disableweapons(); + var_01 = var_00 getweaponslistall(); + foreach(var_03 in var_01) + { + if(var_03 == "claymore") + { + continue; + } + + if(var_03 == "c4") + { + continue; + } + + var_00 givemaxammo(var_03); + var_04 = weaponclipsize(var_03); + if(isdefined(var_04)) + { + if(var_00 getweaponammoclip(var_03) < var_04) + { + var_00 setweaponammoclip(var_03,var_04); + } + } + } + + wait 1.5; + var_00 enableweapons(); + self.use_trigger makeusable(); + } +} + +//Function Number: 153 +func_1B57() +{ + var_00 = spawn("trigger_radius",self.origin,0,320,72); + var_01 = newhudelem(); + var_01 setshader("waypoint_ammo",1,1); + var_01.alpha = 0; + var_01.color = (1,1,1); + var_01.x = self.origin[0]; + var_01.y = self.origin[1]; + var_01.z = self.origin[2] + 16; + var_01 setwaypoint(1,1); + self.var_1B58 = var_01; + self.ammo_icon_trig = var_00; + if(isdefined(self.var_1B5A) && self.var_1B5A) + { + ammo_icon_fade_in(var_01); + return; + } + + wait 0.05; + for(;;) + { + var_00 waittill("trigger",var_02); + if(!isplayer(var_02)) + { + continue; + } + + while(var_02 istouching(var_00)) + { + var_03 = 1; + var_04 = var_02 getcurrentweapon(); + if(var_04 == "none") + { + var_03 = 0; + } + else if(var_02 getfractionmaxammo(var_04) > 0.9) + { + var_03 = 0; + } + + if(maps\_utility::player_looking_at(self.origin,0.8,1) && var_03) + { + ammo_icon_fade_in(var_01); + continue; + } + + func_1B5D(var_01); + wait 0.25; + } + + func_1B5D(var_01); + } +} + +//Function Number: 154 +ammo_icon_fade_in(param_00) +{ + if(param_00.alpha != 0) + { + return; + } + + param_00 fadeovertime(0.2); + param_00.alpha = 0.3; + wait 0.2; +} + +//Function Number: 155 +func_1B5D(param_00) +{ + if(param_00.alpha == 0) + { + return; + } + + param_00 fadeovertime(0.2); + param_00.alpha = 0; + wait 0.2; +} + +//Function Number: 156 +func_1B5E(param_00) +{ + var_01 = 0; + var_02 = undefined; + var_03 = undefined; + var_04 = undefined; + if(isdefined(param_00.script_visionset_start) && isdefined(param_00.script_visionset_end)) + { + var_01 = 1; + var_03 = getent(param_00.target,"targetname"); + if(!isdefined(var_03)) + { + var_03 = common_scripts\utility::getstruct(param_00.target,"targetname"); + } + + var_04 = getent(var_03.target,"targetname"); + if(!isdefined(var_04)) + { + var_04 = common_scripts\utility::getstruct(var_03.target,"targetname"); + } + + var_03 = var_03.origin; + var_04 = var_04.origin; + var_02 = distance(var_03,var_04); + param_00 init_visionset_progress_trigger(); + } + + var_05 = -1; + for(;;) + { + param_00 waittill("trigger",var_06); + if(isplayer(var_06)) + { + if(var_01) + { + var_07 = 0; + while(var_06 istouching(param_00)) + { + var_07 = maps\_utility::get_progress(var_03,var_04,var_06.origin,var_02); + var_07 = clamp(var_07,0,1); + if(var_07 != var_05) + { + var_05 = var_07; + var_06 func_1B69(param_00,var_07); + } + + wait 0.05; + } + + if(var_07 < 0.5) + { + var_06 maps\_utility::vision_set_fog_changes(param_00.script_visionset_start,param_00.script_delay); + } + else + { + var_06 maps\_utility::vision_set_fog_changes(param_00.script_visionset_end,param_00.script_delay); + } + + continue; + } + + var_06 maps\_utility::vision_set_fog_changes(param_00.script_visionset,param_00.script_delay); + } + } +} + +//Function Number: 157 +init_visionset_progress_trigger() +{ + if(!isdefined(self.script_delay)) + { + self.script_delay = 2; + } + + var_00 = maps\_utility::get_vision_set_fog(self.script_visionset_start); + var_01 = maps\_utility::get_vision_set_fog(self.script_visionset_end); + if(!isdefined(var_00) || !isdefined(var_01)) + { + return; + } + + var_02 = spawnstruct(); + var_02.var_1688 = var_01.var_1688 - var_00.var_1688; + var_02.var_1689 = var_01.var_1689 - var_00.var_1689; + var_02.red = var_01.red - var_00.red; + var_02.blue = var_01.blue - var_00.blue; + var_02.green = var_01.green - var_00.green; + var_02.maxopacity = var_01.maxopacity - var_00.maxopacity; + var_02.sunfogenabled = isdefined(var_00.sunfogenabled) || isdefined(var_01.sunfogenabled); + var_03 = 0; + if(isdefined(var_00.var_168E)) + { + var_03 = var_00.var_168E; + } + + var_04 = 0; + if(isdefined(var_01.var_168E)) + { + var_04 = var_01.var_168E; + } + + var_02.sunred_start = var_03; + var_02.var_168E = var_04 - var_03; + var_05 = 0; + if(isdefined(var_00.sungreen)) + { + var_05 = var_00.sungreen; + } + + var_06 = 0; + if(isdefined(var_01.sungreen)) + { + var_06 = var_01.sungreen; + } + + var_02.sungreen_start = var_05; + var_02.sungreen = var_06 - var_05; + var_07 = 0; + if(isdefined(var_00.sunblue)) + { + var_07 = var_00.sunblue; + } + + var_08 = 0; + if(isdefined(var_01.sunblue)) + { + var_08 = var_01.sunblue; + } + + var_02.sunblue_start = var_07; + var_02.sunblue = var_08 - var_07; + var_09 = (0,0,0); + if(isdefined(var_00.sundir)) + { + var_09 = var_00.sundir; + } + + var_0A = (0,0,0); + if(isdefined(var_01.sundir)) + { + var_0A = var_01.sundir; + } + + var_02.sundir_start = var_09; + var_02.sundir = var_0A - var_09; + var_0B = 0; + if(isdefined(var_00.sunbeginfadeangle)) + { + var_0B = var_00.sunbeginfadeangle; + } + + var_0C = 0; + if(isdefined(var_01.sunbeginfadeangle)) + { + var_0C = var_01.sunbeginfadeangle; + } + + var_02.sunbeginfadeangle_start = var_0B; + var_02.sunbeginfadeangle = var_0C - var_0B; + var_0D = 0; + if(isdefined(var_00.var_1693)) + { + var_0D = var_00.var_1693; + } + + var_0E = 0; + if(isdefined(var_01.var_1693)) + { + var_0E = var_01.var_1693; + } + + var_02.sunendfadeangle_start = var_0D; + var_02.var_1693 = var_0E - var_0D; + var_0F = 0; + if(isdefined(var_00.normalfogscale)) + { + var_0F = var_00.normalfogscale; + } + + var_10 = 0; + if(isdefined(var_01.normalfogscale)) + { + var_10 = var_01.normalfogscale; + } + + var_02.var_1B67 = var_0F; + var_02.normalfogscale = var_10 - var_0F; + self.visionset_diff = var_02; +} + +//Function Number: 158 +func_1B69(param_00,param_01) +{ + maps\_utility::init_self_visionset(); + if(param_01 < 0.5) + { + self.vision_set_transition_ent.vision_set = param_00.script_visionset_start; + } + else + { + self.vision_set_transition_ent.vision_set = param_00.script_visionset_end; + } + + self.vision_set_transition_ent.time = 0; + if(param_00.script_visionset_start == param_00.script_visionset_end) + { + return; + } + + self visionsetnakedforplayer_lerp(param_00.script_visionset_start,param_00.script_visionset_end,param_01); + var_02 = maps\_utility::get_vision_set_fog(param_00.script_visionset_start); + var_03 = maps\_utility::get_vision_set_fog(param_00.script_visionset_end); + var_04 = param_00.visionset_diff; + var_05 = spawnstruct(); + var_05.var_1688 = var_02.var_1688 + var_04.var_1688 * param_01; + var_05.var_1689 = var_02.var_1689 + var_04.var_1689 * param_01; + var_05.var_1689 = max(1,var_05.var_1689); + var_05.red = var_02.red + var_04.red * param_01; + var_05.green = var_02.green + var_04.green * param_01; + var_05.blue = var_02.blue + var_04.blue * param_01; + var_05.maxopacity = var_02.maxopacity + var_04.maxopacity * param_01; + if(var_04.sunfogenabled) + { + var_05.sunfogenabled = 1; + var_05.var_168E = var_04.sunred_start + var_04.var_168E * param_01; + var_05.sungreen = var_04.sungreen_start + var_04.sungreen * param_01; + var_05.sunblue = var_04.sunblue_start + var_04.sunblue * param_01; + var_05.sundir = var_04.sundir_start + var_04.sundir * param_01; + var_05.sunbeginfadeangle = var_04.sunbeginfadeangle_start + var_04.sunbeginfadeangle * param_01; + var_05.var_1693 = var_04.sunendfadeangle_start + var_04.var_1693 * param_01; + var_05.normalfogscale = var_04.var_1B67 + var_04.normalfogscale * param_01; + } + + maps\_utility::set_fog_to_ent_values(var_05,0.05); +} + +//Function Number: 159 +func_1B6B() +{ + var_00 = getglass(self.target); + if(!isdefined(var_00)) + { + return; + } + + level waittillmatch(var_00,"glass_destroyed"); + self delete(); +} + +//Function Number: 160 +global_empty_callback(param_00,param_01,param_02,param_03,param_04) +{ +} + +//Function Number: 161 +trigger_multiple_compass(param_00) +{ + var_01 = param_00.script_parameters; + if(!isdefined(level.var_1A08)) + { + level.var_1A08 = ""; + } + + for(;;) + { + param_00 waittill("trigger"); + if(level.var_1A08 != var_01) + { + maps\_compass::setupminimap(var_01); + } + } +} + +//Function Number: 162 +func_1B6E(param_00,param_01,param_02) +{ + if(isdefined(param_00.v["soundalias"]) && param_00.v["soundalias"] != "nil") + { + if(!isdefined(param_00.v["stopable"]) || !param_00.v["stopable"]) + { + return; + } + } + + param_02.origin = param_00.v["origin"]; + if(param_02 istouching(param_01)) + { + param_01.fx[param_01.fx.size] = param_00; + } +} + +//Function Number: 163 +trigger_multiple_fx_volume(param_00) +{ + var_01 = spawn("script_origin",(0,0,0)); + param_00.fx = []; + foreach(var_03 in level.createfxent) + { + func_1B6E(var_03,param_00,var_01); + } + + var_01 delete(); + if(!isdefined(param_00.target)) + { + return; + } + + var_05 = getentarray(param_00.target,"targetname"); + foreach(var_07 in var_05) + { + switch(var_07.classname) + { + case "trigger_multiple_fx_volume_on": + var_07 thread trigger_multiple_fx_trigger_on_think(param_00); + break; + + case "trigger_multiple_fx_volume_off": + var_07 thread func_1B71(param_00); + break; + + default: + break; + } + } +} + +//Function Number: 164 +trigger_multiple_fx_trigger_on_think(param_00) +{ + for(;;) + { + self waittill("trigger"); + common_scripts\utility::array_thread(param_00.fx,::maps\_utility::restarteffect); + wait 1; + } +} + +//Function Number: 165 +func_1B71(param_00) +{ + wait 1; + common_scripts\utility::array_thread(param_00.fx,::common_scripts\utility::pauseeffect); + for(;;) + { + self waittill("trigger"); + common_scripts\utility::array_thread(param_00.fx,::common_scripts\utility::pauseeffect); + wait 1; + } +} + +//Function Number: 166 +func_1B72() +{ + common_scripts\utility::create_dvar("weaponlist","0"); + if(!getdvarint("weaponlist")) + { + return; + } + + var_00 = getentarray(); + var_01 = []; + foreach(var_03 in var_00) + { + if(!isdefined(var_03.code_classname)) + { + continue; + } + + if(issubstr(var_03.code_classname,"weapon")) + { + var_01[var_03.classname] = 1; + } + } + + foreach(var_06 in var_01) + { + } + + var_08 = getspawnerarray(); + var_09 = []; + foreach(var_0B in var_08) + { + var_09[var_0B.code_classname] = 1; + } + + foreach(var_06 in var_09) + { + } +} + +//Function Number: 167 +slowmo_system_init() +{ + level.slowmo = spawnstruct(); + slowmo_system_defaults(); + notifyoncommand("_cheat_player_press_slowmo","+melee"); + notifyoncommand("_cheat_player_press_slowmo","+melee_breath"); + notifyoncommand("_cheat_player_press_slowmo","+melee_zoom"); +} + +//Function Number: 168 +slowmo_system_defaults() +{ + level.slowmo.var_1B75 = 0; + level.slowmo.lerp_time_out = 0.25; + level.slowmo.speed_slow = 0.4; + level.slowmo.speed_norm = 1; +} + +//Function Number: 169 +add_no_game_starts() +{ + var_00 = getentarray("script_origin_start_nogame","classname"); + if(!var_00.size) + { + return; + } + + foreach(var_02 in var_00) + { + if(!isdefined(var_02.var_1B79)) + { + continue; + } + + maps\_utility::add_start("no_game_" + var_02.var_1B79,::start_nogame); + } +} + +//Function Number: 170 +func_1B7A() +{ + if(!maps\_utility::func_17D7()) + { + return; + } + + setsaveddvar("ufoHitsTriggers","1"); + level.var_1750 = 1; + if(isdefined(level.custom_no_game_setupfunc)) + { + level [[ level.custom_no_game_setupfunc ]](); + } + + maps\_loadout::init_loadout(); + thread maps\_audio::aud_init(); + maps\_global_fx::main(); + do_no_game_start_teleport(); + common_scripts\utility::array_call(getentarray("truckjunk","targetname"),::delete); + common_scripts\utility::array_call(getentarray("truckjunk","script_noteworthy"),::delete); + level waittill("eternity"); +} + +//Function Number: 171 +do_no_game_start_teleport() +{ + var_00 = getentarray("script_origin_start_nogame","classname"); + if(!var_00.size) + { + return; + } + + var_00 = sortbydistance(var_00,level.player.origin); + if(level.start_point == "no_game") + { + level.player maps\_utility::teleport_player(var_00[0]); + return; + } + + var_01 = getsubstr(level.start_point,8); + var_02 = 0; + foreach(var_04 in var_00) + { + if(!isdefined(var_04.var_1B79)) + { + continue; + } + + if(var_01 != var_04.var_1B79) + { + continue; + } + + if(isdefined(var_04.script_visionset)) + { + maps\_utility::vision_set_fog_changes(var_04.script_visionset,0); + } + + level.player maps\_utility::teleport_player(var_04); + var_02 = 1; + break; + } + + if(!var_02) + { + level.player maps\_utility::teleport_player(var_00[0]); + } +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_loadout.gsc b/MW3/Xbox/SP/maps/_loadout.gsc new file mode 100644 index 0000000..972f71c --- /dev/null +++ b/MW3/Xbox/SP/maps/_loadout.gsc @@ -0,0 +1,1742 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_loadout.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 61 + * Decompile Time: 1045 ms + * Timestamp: 10/27/2023 2:35:04 AM +*******************************************************************/ + +//Function Number: 1 +init_loadout() +{ + if(!isdefined(level.dodgeloadout)) + { + give_loadout(); + } + + level.loadoutcomplete = 1; + level notify("loadout complete"); +} + +//Function Number: 2 +setdefaultactionslot() +{ + self setactionslot(1,""); + self setactionslot(2,""); + self setactionslot(3,"altMode"); + self setactionslot(4,""); +} + +//Function Number: 3 +init_player() +{ + setdefaultactionslot(); + self takeallweapons(); +} + +//Function Number: 4 +char_switcher() +{ + level.coop_player1 = level.player; + level.var_17FF = level.player2; + if(isdefined(level.character_switched) && level.character_switched) + { + if(maps\_utility::func_E89()) + { + foreach(var_01 in level.players) + { + var_01 init_player(); + } + + level.coop_player1 = level.player2; + level.var_17FF = level.player; + level.character_switched = 1; + return 1; + } + else + { + level.player init_player(); + level.coop_player1 = undefined; + level.var_17FF = level.player; + level.character_switched = 1; + return 1; + } + } + + return 0; +} + +//Function Number: 5 +func_1801() +{ + if(isdefined(level.loadout)) + { + return level.loadout; + } + + return level.script; +} + +//Function Number: 6 +give_loadout(param_00) +{ + var_01 = func_1801(); + if(!isdefined(param_00)) + { + param_00 = 0; + } + + level.character_selected = param_00; + var_02 = []; + level.player setdefaultactionslot(); + if(maps\_utility::func_E89()) + { + level.player2 setdefaultactionslot(); + } + + if(!isdefined(game["expectedlevel"])) + { + game["expectedlevel"] = ""; + } + + if(!isdefined(level.campaign)) + { + level.campaign = "american"; + } + + if(common_scripts\utility::string_starts_with(level.script,"pmc_")) + { + level.player setviewmodel("viewmodel_base_viewhands"); + if(maps\_utility::func_E89()) + { + precachemodel("weapon_parabolic_knife"); + level.player maps\_utility::setmodelfunc(::so_body_player_ranger); + level.player2 maps\_utility::setmodelfunc(::so_body_player_ranger); + level.player2 setviewmodel("viewmodel_base_viewhands"); + } + + level.campaign = "american"; + return; + } + + if(maps\_utility::is_specialop()) + { + give_loadout_specialops(param_00); + return; + } + + if(level.script == "background") + { + level.player takeallweapons(); + return; + } + + if(level.script == "iw4_credits") + { + level.player takeallweapons(); + return; + } + + if(var_01 == "london") + { + level.player giveweapon("mp5_silencer_eotech"); + level.player giveweapon("usp_silencer"); + level.player giveweapon("fraggrenade"); + level.player giveweapon("flash_grenade"); + level.player setoffhandsecondaryclass("flash"); + level.player switchtoweapon("mp5_silencer_eotech"); + level.player setviewmodel("viewhands_sas"); + level.campaign = "british"; + return; + } + else if(var_01 == "innocent") + { + level.player setviewmodel("viewhands_sas"); + level.campaign = "british"; + if(!isdefined(game["previous_map"])) + { + level.player giveweapon("mp5_silencer_eotech"); + level.player giveweapon("usp_silencer"); + level.player giveweapon("fraggrenade"); + level.player giveweapon("flash_grenade"); + level.player setoffhandsecondaryclass("flash"); + level.player switchtoweapon("mp5_silencer_eotech"); + } + else + { + level.player setoffhandsecondaryclass("flash"); + restoreplayerweaponstatepersistent("london",1); + } + + return; + } + else if(var_01 == "hamburg") + { + level.player giveweapon("m4m203_acog_payback"); + level.player giveweapon("smaw_nolock"); + level.player giveweapon("fraggrenade"); + level.player giveweapon("flash_grenade"); + level.player setoffhandsecondaryclass("flash"); + level.player switchtoweapon("m4m203_acog_payback"); + level.player setviewmodel("viewhands_delta"); + level.campaign = "delta"; + return; + } + else if(var_01 == "prague") + { + level.default_weapon = "rsass_hybrid_silenced"; + level.player giveweapon(level.default_weapon); + level.player giveweapon("usp_silencer"); + level.player giveweapon("fraggrenade"); + level.player giveweapon("flash_grenade"); + level.player setoffhandsecondaryclass("flash"); + level.player switchtoweapon(level.default_weapon); + level.player setviewmodel("viewhands_yuri_europe"); + level.campaign = "delta"; + return; + } + else if(var_01 == "warlord") + { + level.player giveweapon("m14ebr_scoped_silenced_warlord"); + level.player giveweapon("ak47_silencer_reflex"); + level.player giveweapon("fraggrenade"); + level.player giveweapon("flash_grenade"); + level.player setoffhandsecondaryclass("flash"); + level.player switchtoweapon("m14ebr_scoped_silenced_warlord"); + level.player setviewmodel("viewhands_yuri"); + level.campaign = "american"; + return; + } + else if(var_01 == "castle") + { + level.castle_main_weapon = "mp5_silencer_reflex_castle"; + level.castle_side_weapon = "p99_tactical_silencer"; + level.player giveweapon(level.castle_main_weapon); + level.player giveweapon(level.castle_side_weapon); + level.player giveweapon("fraggrenade"); + level.player giveweapon("flash_grenade"); + level.player setoffhandsecondaryclass("flash"); + level.player switchtoweapon(level.castle_main_weapon); + level.player setviewmodel("viewhands_yuri_europe"); + level.campaign = "american"; + return; + } + else if(var_01 == "berlin") + { + level.player giveweapon("m14ebr_scope"); + level.player giveweapon("acr_hybrid_berlin"); + level.player giveweapon("fraggrenade"); + level.player setoffhandsecondaryclass("flash"); + level.player giveweapon("ninebang_grenade"); + level.player switchtoweapon("acr_hybrid_berlin"); + level.player setviewmodel("viewhands_delta"); + level.campaign = "delta"; + return; + } + else if(var_01 == "paris_a") + { + level.player giveweapon("scar_h_acog"); + level.player giveweapon("usp_no_knife"); + level.player giveweapon("fraggrenade"); + level.player setoffhandsecondaryclass("flash"); + level.player giveweapon("ninebang_grenade"); + level.player switchtoweapon("scar_h_acog"); + level.player setviewmodel("viewhands_delta"); + level.campaign = "delta"; + return; + } + else if(var_01 == "paris_b") + { + level.player giveweapon("scar_h_acog"); + level.player giveweapon("usp_no_knife"); + level.player giveweapon("fraggrenade"); + level.player setoffhandsecondaryclass("flash"); + level.player giveweapon("ninebang_grenade"); + level.player switchtoweapon("scar_h_acog"); + level.player setviewmodel("viewhands_delta"); + level.campaign = "delta"; + return; + } + else if(var_01 == "paris_ac130") + { + level.player setviewmodel("viewhands_delta"); + level.player giveweapon("m4m203_reflex"); + level.player givemaxammo("m4m203_reflex"); + level.player setoffhandprimaryclass("frag"); + level.player giveweapon("fraggrenade"); + level.player setoffhandsecondaryclass("flash"); + level.player giveweapon("flash_grenade"); + level.player switchtoweapon("m4m203_reflex"); + level.campaign = "delta"; + return; + } + else if(var_01 == "ny_manhattan") + { + level.player giveweapon("m4_hybrid_grunt_optim"); + level.player giveweapon("xm25"); + level.player giveweapon("fraggrenade"); + level.player giveweapon("flash_grenade"); + level.player setoffhandsecondaryclass("flash"); + level.player switchtoweapon("m4_hybrid_grunt_optim"); + level.player setviewmodel("viewhands_delta_shg"); + level.campaign = "delta"; + return; + } + else if(var_01 == "ny_harbor") + { + level.player giveweapon("mp5_silencer_reflex"); + level.player givemaxammo("mp5_silencer_reflex"); + level.player giveweapon("usp_no_knife"); + level.player givemaxammo("usp_no_knife"); + level.player giveweapon("fraggrenade"); + level.player giveweapon("ninebang_grenade"); + level.player setoffhandsecondaryclass("flash"); + level.player switchtoweapon("mp5_silencer_reflex"); + level.player setviewmodel("viewhands_udt"); + level.campaign = "delta"; + return; + } + else if(var_01 == "dubai") + { + level.dubai_main_weapon = "pecheneg_fastreload"; + level.player giveweapon(level.dubai_main_weapon); + level.player givemaxammo(level.dubai_main_weapon); + level.player giveweapon("m4m203_acog"); + level.player giveweapon("fraggrenade"); + level.player giveweapon("flash_grenade"); + level.player setoffhandsecondaryclass("flash"); + level.player switchtoweapon(level.dubai_main_weapon); + level.player setviewmodel("viewhands_juggernaut_ally"); + level.campaign = "american"; + return; + } + else if(var_01 == "payback") + { + level.player giveweapon("m4m203_acog_payback"); + level.player giveweapon("deserteagle"); + level.player giveweapon("fraggrenade"); + level.player setoffhandsecondaryclass("flash"); + level.player giveweapon("flash_grenade"); + level.player switchtoweapon("m4m203_acog_payback"); + level.player setviewmodel("viewhands_yuri"); + level.campaign = "delta"; + return; + } + else if(var_01 == "hijack") + { + level.player giveweapon("fnfiveseven"); + level.player switchtoweapon("fnfiveseven"); + level.player setviewmodel("viewhands_fso"); + level.campaign = "american"; + return; + } + else if(var_01 == "prague_escape") + { + level.player giveweapon("deserteagle"); + level.player giveweapon("m4m203_reflex"); + level.player giveweapon("fraggrenade"); + level.player giveweapon("flash_grenade"); + level.player setoffhandsecondaryclass("flash"); + level.player switchtoweapon("m4m203_reflex"); + level.player setviewmodel("viewhands_yuri_europe"); + level.campaign = "delta"; + return; + } + else if(var_01 == "intro") + { + level.player giveweapon("ak47_reflex"); + level.player givemaxammo("ak47_reflex"); + level.player giveweapon("deserteagle"); + level.player givemaxammo("deserteagle"); + level.player giveweapon("fraggrenade"); + level.player giveweapon("flash_grenade"); + level.player setoffhandprimaryclass("frag"); + level.player setoffhandsecondaryclass("flash"); + level.player switchtoweapon("ak47_reflex"); + level.player setviewmodel("viewhands_yuri"); + level.campaign = "american"; + return; + } + else if(var_01 == "rescue") + { + level.default_weapon = "acr_hybrid_silenced"; + level.player giveweapon(level.default_weapon); + level.player givemaxammo(level.default_weapon); + level.player giveweapon("usp"); + level.player givemaxammo("usp"); + level.player giveweapon("fraggrenade"); + level.player giveweapon("flash_grenade"); + level.player setoffhandprimaryclass("frag"); + level.player setoffhandsecondaryclass("flash"); + level.player switchtoweapon(level.default_weapon); + level.player setviewmodel("viewmodel_base_viewhands"); + level.campaign = "american"; + return; + } + else if(var_01 == "rescue_2") + { + level.default_weapon = "g36c_reflex"; + level.player giveweapon(level.default_weapon); + level.player givemaxammo(level.default_weapon); + level.player giveweapon("m4_grunt_acog"); + level.player givemaxammo("m4_grunt_acog"); + level.player giveweapon("fraggrenade"); + level.player giveweapon("flash_grenade"); + level.player setoffhandprimaryclass("frag"); + level.player setoffhandsecondaryclass("flash"); + level.player switchtoweapon(level.default_weapon); + level.player setviewmodel("viewhands_yuri_europe"); + level.campaign = "american"; + return; + } + else if(var_01 == "innocent") + { + level.campaign = "british"; + return; + } + + if(issubstr(var_01,"firingrange")) + { + return; + } + + level.testmap = 1; + give_default_loadout(); +} + +//Function Number: 7 +give_loadout_specialops(param_00) +{ + var_01 = func_1801(); + if(var_01 == "so_nyse_ny_manhattan") + { + level.so_campaign = "delta"; + foreach(var_06, var_03 in level.players) + { + so_player_num(var_06); + var_04 = "m4_hybrid_grunt_optim"; + var_05 = "xm25"; + so_player_giveweapon(var_04); + so_player_giveweapon(var_05); + so_player_set_switchtoweapon(var_04); + so_player_giveweapon("fraggrenade"); + so_player_giveweapon("flash_grenade"); + so_player_set_setoffhandsecondaryclass("flash"); + so_player_setup_body(var_06); + } + + so_players_give_loadout(); + return; + } + + if(var_06 == "so_stealth_warlord") + { + level.so_campaign = "delta"; + level.coop_incap_weapon = level.so_warlord_secondary; + foreach(var_06 in level.players) + { + so_player_num(var_07); + so_player_giveweapon(level.so_warlord_primary); + so_player_giveweapon(level.so_warlord_secondary); + so_player_set_switchtoweapon(level.so_warlord_primary); + so_player_giveweapon("fraggrenade"); + so_player_giveweapon("flash_grenade"); + so_player_set_setoffhandsecondaryclass("flash"); + so_player_setup_body(var_07); + } + + so_players_give_loadout(); + return; + } + + if(var_07 == "so_littlebird_payback") + { + level.so_campaign = "delta"; + foreach(var_07 in level.players) + { + so_player_num(var_08); + so_player_giveweapon(level.so_payback_primary); + so_player_giveweapon(level.so_payback_secondary); + so_player_set_switchtoweapon(level.so_payback_primary); + so_player_giveweapon("fraggrenade"); + so_player_giveweapon("flash_grenade"); + so_player_set_setoffhandsecondaryclass("flash"); + so_player_setup_body(var_08); + } + + so_players_give_loadout(); + return; + } + + if(var_08 == "so_ied_berlin") + { + level.so_campaign = "delta"; + if(maps\_utility::func_E89()) + { + if(getdvar("coop_start") == "so_char_host") + { + var_09 = 0; + var_0A = 1; + } + else + { + var_09 = 1; + var_0A = 0; + } + } + else + { + var_09 = 0; + var_0A = 1; + } + + so_player_num(var_09); + so_player_giveweapon("fraggrenade"); + so_player_giveweapon("flash_grenade"); + so_player_set_setoffhandsecondaryclass("flash"); + so_player_giveweapon("sa80lmg_fastreload_reflex"); + so_player_giveweapon("m320"); + so_player_set_switchtoweapon("sa80lmg_fastreload_reflex"); + so_player_setup_body(var_09); + so_player_num(var_0A); + so_player_giveweapon("fraggrenade"); + so_player_giveweapon("semtex_grenade"); + so_player_set_setoffhandsecondaryclass("semtex_grenade"); + so_player_giveweapon("barrett"); + so_player_giveweapon("scar_h_thermal_silencer"); + so_player_set_switchtoweapon("barrett"); + so_player_setup_body(var_0A); + so_players_give_loadout(); + return; + } + + if(var_0A == "so_assault_rescue_2") + { + var_0B = "m4_grunt_acog"; + level.so_campaign = "delta"; + foreach(var_0B in level.players) + { + so_player_num(var_0C); + so_player_giveweapon(var_09); + so_player_set_maxammo(var_09); + so_player_giveweapon("g36c_reflex"); + so_player_set_maxammo("g36c_reflex"); + so_player_giveweapon("fraggrenade"); + so_player_giveweapon("flash_grenade"); + so_player_set_setoffhandsecondaryclass("flash"); + so_player_setup_body(var_0C); + so_player_set_switchtoweapon(var_09); + } + + so_players_give_loadout(); + return; + } + + if(var_0C == "so_heliswitch_berlin") + { + level.so_campaign = "delta"; + foreach(var_0C in level.players) + { + so_player_num(var_0D); + so_player_giveweapon(level.primary_weapon); + so_player_giveweapon(level.secondary_weapon); + so_player_set_switchtoweapon(level.primary_weapon); + so_player_giveweapon("fraggrenade"); + so_player_set_setoffhandsecondaryclass("flash"); + so_player_giveweapon("flash_grenade"); + so_player_setup_body(var_0D); + } + + so_players_give_loadout(); + return; + } + + if(var_0D == "so_killspree_paris_a") + { + level.so_campaign = "ranger"; + so_player_num(0); + so_player_giveweapon("fraggrenade"); + so_player_giveweapon("flash_grenade"); + so_player_set_setoffhandsecondaryclass("flash"); + so_player_giveweapon("pecheneg_so_fastreload"); + so_player_giveweapon("m320"); + so_player_set_switchtoweapon("pecheneg_so_fastreload"); + so_player_setup_body(0); + so_player_num(1); + so_player_giveweapon("fraggrenade"); + so_player_giveweapon("flash_grenade"); + so_player_set_setoffhandsecondaryclass("flash"); + so_player_giveweapon("pecheneg_so_fastreload"); + so_player_giveweapon("m320"); + so_player_set_switchtoweapon("m320"); + so_player_setup_body(1); + so_players_give_loadout(); + return; + } + + if(var_0D == "so_zodiac2_ny_harbor") + { + level.so_campaign = "delta"; + foreach(var_0D in level.players) + { + so_player_num(var_0E); + so_player_giveweapon(level.primary_weapon); + so_player_giveweapon(level.secondary_weapon); + so_player_set_switchtoweapon(level.primary_weapon); + so_player_giveweapon("fraggrenade"); + so_player_set_setoffhandsecondaryclass("flash"); + so_player_giveweapon("flash_grenade"); + so_player_setup_body(var_0E); + } + + so_players_give_loadout(); + return; + } + + if(var_0E == "so_jeep_paris_b") + { + level.so_campaign = "delta"; + foreach(var_0C in level.players) + { + so_player_num(var_0F); + var_0D = "m320"; + var_0E = "scar_h_grenadier_reflex"; + so_player_giveweapon(var_0D); + so_player_giveweapon(var_0E); + so_player_set_switchtoweapon(var_0D); + so_player_giveweapon("fraggrenade"); + so_player_giveweapon("flash_grenade"); + so_player_set_setoffhandsecondaryclass("flash"); + so_player_setup_body(var_0F); + } + + so_players_give_loadout(); + return; + } + + if(var_0F == "so_ac130_paris_ac130") + { + level.so_campaign = "delta"; + foreach(var_0D in level.players) + { + so_player_num(var_10); + var_0E = "m4m203_reflex"; + var_0F = "fnfiveseven"; + so_player_giveweapon(var_0E); + so_player_giveweapon(var_0F); + so_player_set_switchtoweapon(var_0E); + so_player_giveweapon("fraggrenade"); + so_player_giveweapon("flash_grenade"); + so_player_setup_body(var_10); + } + + so_players_give_loadout(); + return; + } + + if(var_10 == "so_stealth_prague") + { + level.so_campaign = "sas"; + level.so_stealth = 1; + level.coop_incap_weapon = "usp_silencer"; + foreach(var_0E in level.players) + { + so_player_num(var_11); + var_0F = "rsass_silenced"; + var_10 = "usp_silencer"; + so_player_giveweapon(var_0F); + so_player_giveweapon(var_10); + so_player_set_switchtoweapon(var_0F); + so_player_giveweapon("fraggrenade"); + so_player_giveweapon("flash_grenade"); + so_player_set_setoffhandsecondaryclass("flash"); + so_player_setup_body(var_11); + } + + so_players_give_loadout(); + return; + } + + if(var_11 == "so_stealth_london") + { + level.so_campaign = "sas"; + foreach(var_0F in level.players) + { + so_player_num(var_12); + var_10 = "mp5_silencer_eotech"; + var_11 = "usp_silencer"; + so_player_giveweapon(var_10); + so_player_giveweapon(var_11); + so_player_set_switchtoweapon(var_10); + so_player_giveweapon("fraggrenade"); + so_player_giveweapon("flash_grenade"); + so_player_set_setoffhandsecondaryclass("flash"); + so_player_setup_body(var_12); + } + + so_players_give_loadout(); + return; + } + + if(var_12 == "so_timetrial_london") + { + level.so_campaign = "sas"; + foreach(var_10 in level.players) + { + so_player_num(var_13); + var_11 = "mp5"; + var_12 = "spas12_silencer"; + so_player_giveweapon(var_11); + so_player_giveweapon(var_12); + so_player_set_switchtoweapon(var_11); + so_player_giveweapon("fraggrenade"); + so_player_giveweapon("flash_grenade"); + so_player_set_setoffhandsecondaryclass("flash"); + so_player_setup_body(var_13); + } + + so_players_give_loadout(); + return; + } + + if(var_13 == "so_assaultmine") + { + level.so_campaign = "delta"; + foreach(var_11 in level.players) + { + so_player_num(var_14); + var_12 = "rsass"; + var_13 = "acr_hybrid"; + so_player_giveweapon(var_12); + so_player_giveweapon(var_13); + so_player_set_switchtoweapon(var_12); + so_player_giveweapon("fraggrenade"); + so_player_giveweapon("flash_grenade"); + so_player_set_setoffhandsecondaryclass("flash"); + so_player_setup_body(var_14); + } + + so_players_give_loadout(); + return; + } + + if(var_14 == "so_deltacamp") + { + level.so_campaign = "delta"; + foreach(var_12 in level.players) + { + so_player_num(var_15); + var_13 = "acr"; + var_14 = "usp"; + so_player_giveweapon(var_13); + so_player_giveweapon(var_14); + so_player_set_switchtoweapon(var_13); + so_player_setup_body(var_15); + } + + so_players_give_loadout(); + return; + } + + if(var_15 == "so_trainer2_so_deltacamp") + { + level.so_campaign = "delta"; + foreach(var_13 in level.players) + { + so_player_num(var_16); + var_14 = "mp5"; + var_15 = "usp"; + so_player_giveweapon(var_14); + so_player_giveweapon(var_15); + so_player_set_switchtoweapon(var_14); + so_player_setup_body(var_16); + } + + so_players_give_loadout(); + return; + } + + if(var_16 == "so_milehigh_hijack") + { + level.so_campaign = "hijack"; + var_06 = 0; + while(var_16 < level.players.size) + { + so_player_num(var_16); + so_player_giveweapon("flash_grenade"); + so_player_set_setoffhandsecondaryclass("flash"); + so_player_giveweapon("ak47"); + so_player_giveweapon("fnfiveseven"); + so_player_set_switchtoweapon("ak47"); + so_player_setup_body(var_16); + var_16++; + } + + so_players_give_loadout(); + return; + } + + if(var_16 == "so_rescue_hijack") + { + level.so_campaign = "fso"; + level.coop_incap_weapon = "usp_silencer_so"; + foreach(var_16 in level.players) + { + so_player_num(var_17); + so_player_giveweapon("fraggrenade"); + so_player_giveweapon("usp_silencer_so"); + so_player_set_switchtoweapon("usp_silencer_so"); + so_player_setup_body(var_17); + } + + so_players_give_loadout(); + return; + } + + if(var_17 == "so_javelin_hamburg") + { + level.so_campaign = "delta"; + foreach(var_15 in level.players) + { + so_player_num(var_18); + var_16 = "javelin"; + var_17 = "scar_h_acog"; + so_player_giveweapon(var_16); + so_player_giveweapon(var_17); + so_player_set_switchtoweapon(var_16); + so_player_giveweapon("fraggrenade"); + so_player_giveweapon("flash_grenade"); + so_player_setup_body(var_18); + } + + so_players_give_loadout(); + return; + } + + if(var_18 == "so_assassin_payback") + { + level.so_campaign = "delta"; + so_player_num(0); + so_player_giveweapon(level.sniper_primary); + so_player_giveweapon(level.sniper_secondary); + so_player_set_switchtoweapon(level.sniper_primary); + so_player_giveweapon("fraggrenade"); + so_player_giveweapon("flash_grenade"); + so_player_setup_body(0); + so_player_num(1); + so_player_giveweapon(level.heavy_primary); + so_player_giveweapon(level.heavy_secondary); + so_player_set_switchtoweapon(level.heavy_primary); + so_player_giveweapon("fraggrenade"); + so_player_giveweapon("flash_grenade"); + so_player_setup_body(1); + so_players_give_loadout(); + return; + } + + if(maps\_utility::is_survival()) + { + level.so_campaign = "delta"; + level.coop_incap_weapon = "fnfiveseven_mp"; + give_default_loadout(); + return; + } + + level.testmap = 1; + level.so_campaign = "ranger"; + give_default_loadout(); +} + +//Function Number: 8 +possible_precache(param_00) +{ + foreach(var_02 in param_00) + { + precacheitem(var_02); + } +} + +//Function Number: 9 +give_default_loadout() +{ + if(maps\_utility::func_E89() || maps\_utility::is_survival()) + { + var_00 = char_switcher(); + foreach(var_03, var_02 in level.players) + { + give_default_loadout_coop(var_03); + } + + so_players_give_loadout(); + return; + } + + level.player giveweapon("fraggrenade"); + level.player setoffhandsecondaryclass("flash"); + level.player giveweapon("flash_grenade"); + if(maps\_utility::is_specialop()) + { + level.player giveweapon("m1014"); + } + + level.player giveweapon("mp5"); + level.player switchtoweapon("mp5"); + level.player setviewmodel("viewmodel_base_viewhands"); +} + +//Function Number: 10 +give_default_loadout_coop(param_00) +{ + so_player_num(param_00); + so_player_giveweapon("fraggrenade"); + so_player_giveweapon("flash_grenade"); + so_player_set_setoffhandsecondaryclass("flash"); + so_player_giveweapon("mp5"); + so_player_giveweapon("m1014"); + if(param_00 == 0) + { + so_player_set_switchtoweapon("mp5"); + } + else + { + so_player_set_switchtoweapon("m1014"); + } + + so_player_setup_body(param_00); +} + +//Function Number: 11 +saveplayerweaponstatepersistent(param_00,param_01) +{ + if(!isdefined(param_01)) + { + param_01 = 0; + } + + level.player endon("death"); + if(level.player.health == 0) + { + return; + } + + var_02 = level.player getcurrentprimaryweapon(); + if(!isdefined(var_02) || var_02 == "none") + { + } + + game["weaponstates"][param_00]["current"] = var_02; + var_03 = level.player getcurrentoffhand(); + game["weaponstates"][param_00]["offhand"] = var_03; + game["weaponstates"][param_00]["list"] = []; + var_04 = common_scripts\utility::array_combine(level.player getweaponslistprimaries(),level.player getweaponslistoffhands()); + for(var_05 = 0;var_05 < var_04.size;var_05++) + { + game["weaponstates"][param_00]["list"][var_05]["name"] = var_04[var_05]; + if(param_01) + { + game["weaponstates"][param_00]["list"][var_05]["clip"] = level.player getweaponammoclip(var_04[var_05]); + game["weaponstates"][param_00]["list"][var_05]["stock"] = level.player getweaponammostock(var_04[var_05]); + } + } +} + +//Function Number: 12 +restoreplayerweaponstatepersistent(param_00,param_01) +{ + if(!isdefined(param_01)) + { + param_01 = 0; + } + + if(!isdefined(game["weaponstates"])) + { + return 0; + } + + if(!isdefined(game["weaponstates"][param_00])) + { + return 0; + } + + level.player takeallweapons(); + for(var_02 = 0;var_02 < game["weaponstates"][param_00]["list"].size;var_02++) + { + var_03 = game["weaponstates"][param_00]["list"][var_02]["name"]; + if(isdefined(level.legit_weapons)) + { + if(!isdefined(level.legit_weapons[var_03])) + { + continue; + } + } + + if(var_03 == "c4") + { + continue; + } + + if(var_03 == "claymore") + { + continue; + } + + level.player giveweapon(var_03); + level.player givemaxammo(var_03); + if(param_01) + { + level.player setweaponammoclip(var_03,game["weaponstates"][param_00]["list"][var_02]["clip"]); + level.player setweaponammostock(var_03,game["weaponstates"][param_00]["list"][var_02]["stock"]); + } + } + + if(isdefined(level.legit_weapons)) + { + var_03 = game["weaponstates"][param_00]["offhand"]; + if(isdefined(level.legit_weapons[var_03])) + { + level.player switchtooffhand(var_03); + } + + var_03 = game["weaponstates"][param_00]["current"]; + if(isdefined(level.legit_weapons[var_03])) + { + level.player switchtoweapon(var_03); + } + } + else + { + level.player switchtooffhand(game["weaponstates"][param_00]["offhand"]); + level.player switchtoweapon(game["weaponstates"][param_00]["current"]); + } + + return 1; +} + +//Function Number: 13 +sniper_escape_initial_secondary_weapon_loadout() +{ + level.player giveweapon("claymore"); + level.player giveweapon("c4"); + if(level.gameskill >= 2) + { + level.player setweaponammoclip("claymore",10); + level.player setweaponammoclip("c4",6); + } + else + { + level.player setweaponammoclip("claymore",8); + level.player setweaponammoclip("c4",3); + } + + level.player setactionslot(4,"weapon","claymore"); + level.player setactionslot(2,"weapon","c4"); + level.player giveweapon("fraggrenade"); + level.player giveweapon("flash_grenade"); + level.player setoffhandsecondaryclass("flash"); + level.player setviewmodel("viewhands_marine_sniper"); +} + +//Function Number: 14 +set_legit_weapons_for_sniper_escape() +{ + var_00 = []; + var_00 = []; + level.legit_weapons = var_41; +} + +//Function Number: 15 +func_181F() +{ + var_00 = []; + level.legit_weapons = var_41; +} + +//Function Number: 16 +func_1821() +{ + var_00 = []; + level.legit_weapons = var_41; +} + +//Function Number: 17 +max_ammo_on_legit_sniper_escape_weapon() +{ + var_00 = level.player getweaponslistall(); + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + var_02 = var_00[var_01]; + if(!isdefined(level.legit_weapons[var_02])) + { + continue; + } + + if(var_02 == "rpg") + { + continue; + } + + level.player givemaxammo(var_02); + } +} + +//Function Number: 18 +func_1824() +{ + var_00 = level.player getweaponslistall(); + var_01 = []; + var_02 = 0; + for(var_03 = 0;var_03 < var_00.size;var_03++) + { + var_04 = var_00[var_03]; + var_01[var_04] = 1; + if(isdefined(level.legit_weapons[var_04])) + { + var_02++; + continue; + } + + level.player takeweapon(var_04); + } + + if(var_02 == 2) + { + return; + } + + if(var_02 == 0) + { + level.player giveweapon("ak47"); + level.player switchtoweapon("ak47"); + } + + if(!isdefined(var_01[level.var_181E]) && !isdefined(var_01["dragunov"])) + { + level.player giveweapon(level.var_181E); + level.player switchtoweapon(level.var_181E); + } +} + +//Function Number: 19 +coop_gamesetup_menu() +{ + maps\_gameskill::setglobaldifficulty(); + foreach(var_01 in level.players) + { + var_01 maps\_gameskill::func_139A(); + } + + level.character_switched = 0; + common_scripts\utility::flag_init("character_selected"); + var_03 = ""; + var_04 = []; + var_04 = strtok(var_03," "); + foreach(var_06 in var_04) + { + if(var_06 == level.script) + { + common_scripts\utility::flag_set("character_selected"); + } + } + + var_08 = "so_ac130_co_hunted co_hunted co_ac130"; + var_09 = []; + var_09 = strtok(var_08," "); + foreach(var_06 in var_09) + { + if(maps\_utility::func_E89() && var_06 == level.script) + { + var_0B = getdvar("ui_ac130_pilot_num"); + if(isdefined(var_0B) && var_0B != "0") + { + level.character_switched = 1; + } + + common_scripts\utility::flag_set("character_selected"); + } + } +} + +//Function Number: 20 +coop_gamesetup_ac130() +{ + if(level.var_1827 == "so_char_host") + { + return level.players[0]; + } + + if(level.var_1827 == "so_char_client") + { + return level.players[1]; + } + + return level.players[0]; +} + +//Function Number: 21 +give_default_loadout_specialops() +{ + foreach(var_02, var_01 in level.players) + { + so_player_num(var_02); + so_player_giveweapon("fraggrenade"); + so_player_giveweapon("flash_grenade"); + so_player_set_setoffhandsecondaryclass("flash"); + so_player_giveweapon("mp5"); + so_player_giveweapon("m1014"); + so_player_set_switchtoweapon("mp5"); + so_player_setup_body(var_02); + } + + so_players_give_loadout(); +} + +//Function Number: 22 +so_player_num(param_00) +{ + level.so_player_num = param_00; + level.so_player_add_player_giveweapon[param_00] = []; + if(!isdefined(level.so_player_set_maxammo)) + { + level.so_player_set_maxammo = []; + } + + if(!isdefined(level.var_182C)) + { + level.var_182C = []; + } + + if(!isdefined(level.so_player_add_player_giveweapon)) + { + level.so_player_add_player_giveweapon = []; + } + + if(!isdefined(level.so_player_set_setoffhandsecondaryclass)) + { + level.so_player_set_setoffhandsecondaryclass = []; + } + + if(!isdefined(level.so_player_set_switchtoweapon)) + { + level.so_player_set_switchtoweapon = []; + } + + if(!isdefined(level.so_player_setmodelfunc)) + { + level.so_player_setmodelfunc = []; + } + + if(!isdefined(level.so_player_setmodelfunc_precache)) + { + level.so_player_setmodelfunc_precache = []; + } + + if(!isdefined(level.so_player_setactionslot)) + { + level.so_player_setactionslot = []; + } + + level.so_player_set_maxammo[param_00] = []; + level.so_player_set_setoffhandsecondaryclass[param_00] = []; + level.so_player_add_player_giveweapon[param_00] = []; +} + +//Function Number: 23 +so_player_giveweapon(param_00) +{ + var_01 = level.so_player_num; + if(!level.character_selected) + { + precacheitem(param_00); + } + + level.so_player_add_player_giveweapon[var_01][param_00] = 1; +} + +//Function Number: 24 +so_player_set_maxammo(param_00) +{ + var_01 = level.so_player_num; + level.so_player_set_maxammo[var_01][param_00] = 1; +} + +//Function Number: 25 +so_player_set_setoffhandsecondaryclass(param_00) +{ + var_01 = level.so_player_num; + level.so_player_set_setoffhandsecondaryclass[var_01] = param_00; +} + +//Function Number: 26 +so_player_set_switchtoweapon(param_00) +{ + var_01 = level.so_player_num; + level.so_player_set_switchtoweapon[var_01] = param_00; +} + +//Function Number: 27 +func_182C(param_00) +{ + var_01 = level.so_player_num; + if(!level.character_selected) + { + precachemodel(param_00); + } + + level.var_182C[var_01] = param_00; +} + +//Function Number: 28 +so_player_setmodelfunc(param_00,param_01) +{ + var_02 = level.so_player_num; + level.so_player_setmodelfunc[var_02] = param_00; + if(!level.character_selected) + { + [[ param_01 ]](); + } +} + +//Function Number: 29 +so_player_setactionslot(param_00,param_01,param_02) +{ + var_03 = level.so_player_num; + var_04 = spawnstruct(); + var_04.slot = param_00; + var_04.parm1 = param_01; + if(isdefined(param_02)) + { + var_04.parm2 = param_02; + } + + if(isdefined(level.so_player_setactionslot[var_03])) + { + var_05 = level.so_player_setactionslot[var_03].size; + } + else + { + var_05 = 0; + } + + level.so_player_setactionslot[var_03][var_05] = var_04; +} + +//Function Number: 30 +so_player_give_loadout(param_00) +{ + var_01 = self; + if(isdefined(level.so_player_setmodelfunc[param_00])) + { + var_01 maps\_utility::setmodelfunc(level.so_player_setmodelfunc[param_00]); + var_01 setanim(%code,1,0); + } + + var_02 = getarraykeys(level.so_player_add_player_giveweapon[param_00]); + foreach(var_04 in var_02) + { + var_01 giveweapon(var_04); + if(isdefined(level.so_player_set_maxammo[param_00][var_04])) + { + var_01 givemaxammo(var_04); + } + } + + if(isdefined(level.so_player_set_setoffhandsecondaryclass[param_00])) + { + var_01 setoffhandsecondaryclass("flash"); + } + + if(isdefined(level.so_player_setactionslot[param_00])) + { + var_01 so_players_give_action(param_00); + } + + if(isdefined(level.so_player_set_switchtoweapon[param_00])) + { + var_01 switchtoweapon(level.so_player_set_switchtoweapon[param_00]); + } + + if(isdefined(level.var_182C[param_00])) + { + var_01 setviewmodel(level.var_182C[param_00]); + } +} + +//Function Number: 31 +so_players_give_action(param_00) +{ + var_01 = self; + foreach(var_03 in level.so_player_setactionslot[param_00]) + { + if(isdefined(var_03.parm2)) + { + var_01 setactionslot(var_03.slot,var_03.parm1,var_03.parm2); + continue; + } + + var_01 setactionslot(var_03.slot,var_03.parm1); + } +} + +//Function Number: 32 +so_players_give_loadout() +{ + foreach(var_02, var_01 in level.players) + { + var_01 so_player_give_loadout(var_02); + } +} + +//Function Number: 33 +updatemodel(param_00) +{ + self notify("newupdatemodel"); + if(!isdefined(param_00)) + { + self detachall(); + self setmodel(""); + return; + } + + self.last_modelfunc = param_00; + if(isdefined(self.is_hidden) && self.is_hidden) + { + return; + } + + self endon("newupdatemodel"); + for(;;) + { + self detachall(); + [[ param_00 ]](); + self updateplayermodelwithweapons(); + common_scripts\utility::waittill_any_return("weapon_change","weaponchange","player_update_model","player_downed","not_in_last_stand"); + } +} + +//Function Number: 34 +so_player_setup_body(param_00) +{ + func_182C(so_player_get_hands()); + if(maps\_utility::func_E89() || maps\_utility::is_survival()) + { + so_player_setmodelfunc(so_player_get_bodyfunc(param_00),so_player_get_bodyfunc_precache(param_00)); + } +} + +//Function Number: 35 +so_player_get_bodyfunc(param_00) +{ + switch(level.so_campaign) + { + case "ranger": + return ::so_body_player_ranger; + + case "seal": + return ::so_body_player_seal; + + case "arctic": + return ::so_body_player_arctic; + + case "woodland": + return ::func_1841; + + case "desert": + return ::so_body_player_desert; + + case "ghillie": + return ::so_body_player_ghillie; + + case "delta": + return ::so_body_player_delta; + + case "sas": + return ::so_body_player_sas; + + case "hijack": + if(param_00 == 0) + { + return ::func_1846; + } + else + { + return ::so_body_player_hijack_2; + } + + break; + + case "fso": + if(param_00 == 0) + { + return ::so_body_player_fso_1; + } + else + { + return ::func_1849; + } + + break; + + default: + break; + } +} + +//Function Number: 36 +so_player_get_bodyfunc_precache(param_00) +{ + switch(level.so_campaign) + { + case "ranger": + return ::func_184A; + + case "seal": + return ::so_body_player_seal_precache; + + case "arctic": + return ::so_body_player_arctic_precache; + + case "woodland": + return ::so_body_player_woodland_precache; + + case "desert": + return ::so_body_player_desert_precache; + + case "ghillie": + return ::so_body_player_ghillie_precache; + + case "delta": + return ::so_body_player_delta_precache; + + case "sas": + return ::so_body_player_sas_precache; + + case "hijack": + if(param_00 == 0) + { + return ::func_1852; + } + else + { + return ::so_body_player_hijack_precache_2; + } + + break; + + case "fso": + if(param_00 == 0) + { + return ::so_body_player_fso_precache_1; + } + else + { + return ::so_body_player_fso_precache_2; + } + + break; + } +} + +//Function Number: 37 +so_player_get_hands() +{ + switch(level.so_campaign) + { + case "ranger": + return "viewmodel_base_viewhands"; + + case "seal": + return "viewhands_udt"; + + case "arctic": + return "viewhands_arctic"; + + case "woodland": + return "viewhands_sas_woodland"; + + case "desert": + return "viewhands_tf141"; + + case "ghillie": + return "viewhands_marine_sniper"; + + case "delta": + return "viewhands_delta"; + + case "sas": + return "viewhands_sas"; + + case "hijack": + return "viewhands_henchmen"; + + case "fso": + return "viewhands_fso"; + } +} + +//Function Number: 38 +so_body_player_ranger() +{ + self setmodel("coop_body_us_army"); + self attach("coop_head_us_army","",1); +} + +//Function Number: 39 +so_body_player_seal() +{ + self setmodel("coop_body_seal_udt"); + self attach("coop_head_seal_udt","",1); +} + +//Function Number: 40 +so_body_player_arctic() +{ + self setmodel("coop_body_tf141_arctic"); + self attach("coop_head_tf141_arctic","",1); +} + +//Function Number: 41 +func_1841() +{ + self setmodel("coop_body_tf141_forest"); + self attach("coop_head_tf141_forest","",1); +} + +//Function Number: 42 +so_body_player_desert() +{ + self setmodel("coop_body_tf141_desert"); + self attach("coop_head_tf141_desert","",1); +} + +//Function Number: 43 +so_body_player_ghillie() +{ + self setmodel("coop_body_ghillie_forest"); + self attach("coop_head_ghillie_forest","",1); +} + +//Function Number: 44 +so_body_player_delta() +{ + self setmodel("mp_body_delta_elite_assault_bb"); + self attach("head_delta_elite_a","",1); +} + +//Function Number: 45 +so_body_player_sas() +{ + self setmodel("body_mp_sas_urban_specops"); +} + +//Function Number: 46 +func_1846() +{ + self setmodel("mp_body_henchmen_assault_d"); + self attach("head_henchmen_a","",1); +} + +//Function Number: 47 +so_body_player_hijack_2() +{ + self setmodel("mp_body_henchmen_shotgun_a"); + self attach("head_henchmen_c","",1); +} + +//Function Number: 48 +so_body_player_fso_1() +{ + self setmodel("mp_body_fso_vest_c_dirty"); + self attach("head_fso_e_dirty","",1); +} + +//Function Number: 49 +func_1849() +{ + self setmodel("mp_body_fso_vest_d_dirty"); + self attach("head_fso_d_dirty","",1); +} + +//Function Number: 50 +func_184A() +{ + precachemodel("coop_body_us_army"); + precachemodel("coop_head_us_army"); +} + +//Function Number: 51 +so_body_player_seal_precache() +{ + precachemodel("coop_body_seal_udt"); + precachemodel("coop_head_seal_udt"); +} + +//Function Number: 52 +so_body_player_arctic_precache() +{ + precachemodel("coop_body_tf141_arctic"); + precachemodel("coop_head_tf141_arctic"); +} + +//Function Number: 53 +so_body_player_woodland_precache() +{ + precachemodel("coop_body_tf141_forest"); + precachemodel("coop_head_tf141_forest"); +} + +//Function Number: 54 +so_body_player_desert_precache() +{ + precachemodel("coop_body_tf141_desert"); + precachemodel("coop_head_tf141_desert"); +} + +//Function Number: 55 +so_body_player_ghillie_precache() +{ + precachemodel("coop_body_ghillie_forest"); + precachemodel("coop_head_ghillie_forest"); +} + +//Function Number: 56 +so_body_player_delta_precache() +{ + precachemodel("mp_body_delta_elite_assault_bb"); + precachemodel("head_delta_elite_a"); +} + +//Function Number: 57 +so_body_player_sas_precache() +{ + precachemodel("body_mp_sas_urban_specops"); +} + +//Function Number: 58 +func_1852() +{ + precachemodel("mp_body_henchmen_assault_d"); + precachemodel("head_henchmen_a"); +} + +//Function Number: 59 +so_body_player_hijack_precache_2() +{ + precachemodel("mp_body_henchmen_shotgun_a"); + precachemodel("head_henchmen_c"); +} + +//Function Number: 60 +so_body_player_fso_precache_1() +{ + precachemodel("mp_body_fso_vest_c_dirty"); + precachemodel("head_fso_e_dirty"); +} + +//Function Number: 61 +so_body_player_fso_precache_2() +{ + precachemodel("mp_body_fso_vest_d_dirty"); + precachemodel("head_fso_d_dirty"); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_menus.gsc b/MW3/Xbox/SP/maps/_menus.gsc new file mode 100644 index 0000000..3323050 --- /dev/null +++ b/MW3/Xbox/SP/maps/_menus.gsc @@ -0,0 +1,952 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_menus.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 41 + * Decompile Time: 623 ms + * Timestamp: 10/27/2023 2:34:26 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + precachemenu("uiScript_startMultiplayer"); + precacheshader("black"); + precacheshader("white"); + precacheshader("menu_button"); + precacheshader("menu_button_selected"); + precacheshader("menu_button_fade"); + precacheshader("menu_button_fade_selected"); + precacheshader("menu_button_faderight"); + precacheshader("menu_button_faderight_selected"); + precacheshader("menu_caret_open"); + precacheshader("menu_caret_closed"); + thread initthumbsticklayout(); + thread initbuttonlayout(); + thread func_3C03(); + thread func_3C04(); + thread func_3C05(); + thread initvibration(); + level.menustack = []; + var_00 = createmenu("levels"); + var_01 = setupaction(::func_3BD2,"cqb_1"); + var_02 = spawnstruct(); + var_02.display = &"MENU_1ST_PASS"; + var_02.var_3BD0 = 240; + var_02.ypos = 100; + var_00 func_3BE1(&"MENU_CQB_TEST",var_01,"loadmap",var_02); + var_01 = setupaction(::func_3BD2,"descent"); + var_02 = spawnstruct(); + var_02.display = &"MENU_1ST_PASS"; + var_02.var_3BD0 = 240; + var_02.ypos = 100; + var_00 func_3BE1(&"MENU_BUNKER",var_01,"loadmap",var_02); + var_01 = setupaction(::func_3BD2,"aftermath"); + var_02 = spawnstruct(); + var_02.display = &"MENU_100_INITIAL_GEO"; + var_02.var_3BD0 = 240; + var_02.ypos = 100; + var_00 func_3BE1(&"MENU_AFTERMATH",var_01,"loadmap",var_02); + var_01 = setupaction(::func_3BD2,"chechnya_escape"); + var_02 = spawnstruct(); + var_02.display = &"MENU_40_INITIAL_GEO"; + var_02.var_3BD0 = 240; + var_02.ypos = 100; + var_00 func_3BE1(&"MENU_CHECHNYA_ESCAPE",var_01,"loadmap",var_02); + var_01 = setupaction(::func_3BD2,"marksman"); + var_02 = spawnstruct(); + var_02.display = &"MENU_25_SCRIPTED"; + var_02.var_3BD0 = 240; + var_02.ypos = 100; + var_00 func_3BE1(&"MENU_MARKSMAN",var_01,"loadmap",var_02); + var_01 = setupaction(::func_3BD2,"seaknight_defend"); + var_02 = spawnstruct(); + var_02.display = &"MENU_PROTOTYPE_LEVEL_30_SCRIPTED"; + var_02.var_3BD0 = 240; + var_02.ypos = 100; + var_00 func_3BE1(&"MENU_SEAKNIGHT_DEFEND",var_01,"loadmap",var_02); + var_01 = setupaction(::func_3BD2,"wetwork"); + var_02 = spawnstruct(); + var_02.display = &"MENU_100_INITIAL_GEO"; + var_02.var_3BD0 = 240; + var_02.ypos = 100; + var_00 func_3BE1(&"MENU_WETWORK",var_01,"loadmap",var_02); + var_01 = setupaction(::func_3BD2,"cargoship"); + var_02 = spawnstruct(); + var_02.display = &"MENU_10_SCRIPTED"; + var_02.var_3BD0 = 240; + var_02.ypos = 100; + var_00 func_3BE1(&"MENU_CARGOSHIP",var_01,"loadmap",var_02); + var_01 = setupaction(::func_3BD2,"bog"); + var_02 = spawnstruct(); + var_02.display = &"MENU_35_INITIAL_GEO"; + var_02.var_3BD0 = 240; + var_02.ypos = 100; + var_00 func_3BE1(&"MENU_BOG",var_01,"loadmap",var_02); + var_01 = setupaction(::func_3BD2,"training"); + var_02 = spawnstruct(); + var_02.display = &"MENU_5_SCRIPTED"; + var_02.var_3BD0 = 240; + var_02.ypos = 100; + var_00 func_3BE1(&"MENU_TRAINING1",var_01,"loadmap",var_02); + var_01 = setupaction(::func_3BD2,"ac130"); + var_02 = spawnstruct(); + var_02.display = &"MENU_30"; + var_02.var_3BD0 = 240; + var_02.ypos = 100; + var_00 func_3BE1(&"MENU_AC130",var_01,"loadmap",var_02); + var_01 = setupaction(::func_3BD2,"seaknight_assault"); + var_02 = spawnstruct(); + var_02.display = &"MENU_INITIAL_GEO_IN_PROGRESS"; + var_02.var_3BD0 = 240; + var_02.ypos = 100; + var_00 func_3BE1(&"MENU_SEAKNIGHT_ASSAULT",var_01,"loadmap",var_02); + var_01 = setupaction(::func_3BD2,"pilotcobra"); + var_02 = spawnstruct(); + var_02.display = &"MENU_INITIAL_GEO_IN_PROGRESS"; + var_02.var_3BD0 = 240; + var_02.ypos = 100; + var_00 func_3BE1(&"MENU_PILOT_COBRA",var_01,"loadmap",var_02); + var_03 = func_3BDE("controls"); + var_04 = spawnstruct(); + var_04.index = 0; + var_04.dvar = "controls_sticksConfig"; + var_04.value[0] = "thumbstick_default"; + var_04.value[1] = "thumbstick_southpaw"; + var_04.value[2] = "thumbstick_legacy"; + var_04.value[3] = "thumbstick_legacysouthpaw"; + var_04.display[0] = "Default"; + var_04.display[1] = "Southpaw"; + var_04.display[2] = "Legacy"; + var_04.display[3] = "Legacy Southpaw"; + var_03 func_3BE7(&"MENU_THUMBSTICK_LAYOUT",undefined,undefined,undefined,var_04); + var_04 = spawnstruct(); + var_04.index = 0; + var_04.dvar = "controls_buttonConfig"; + var_04.value[0] = "buttons_default"; + var_04.value[1] = "buttons_tactical"; + var_04.value[2] = "buttons_lefty"; + var_04.value[3] = "buttons_finesthour"; + var_04.display[0] = "Default"; + var_04.display[1] = "Tactical"; + var_04.display[2] = "Lefty"; + var_04.display[3] = "Finest Hour"; + var_03 func_3BE7(&"MENU_BUTTON_LAYOUT",undefined,undefined,undefined,var_04); + var_04 = spawnstruct(); + var_04.index = 1; + var_04.dvar = "controls_sensitivityConfig"; + var_04.value[0] = "sensitivity_low"; + var_04.value[1] = "sensitivity_medium"; + var_04.value[2] = "sensitivity_high"; + var_04.value[3] = "sensitivity_veryhigh"; + var_04.display[0] = "Low"; + var_04.display[1] = "Medium"; + var_04.display[2] = "High"; + var_04.display[3] = "Very High"; + var_03 func_3BE7(&"MENU_LOOK_SENSITIVITY",undefined,undefined,undefined,var_04); + var_04 = spawnstruct(); + var_04.index = 0; + var_04.dvar = "controls_inversionConfig"; + var_04.value[0] = "inversion_disabled"; + var_04.value[1] = "inversion_enabled"; + var_04.display[0] = "Disabled"; + var_04.display[1] = "Enabled"; + var_03 func_3BE7(&"MENU_LOOK_INVERSION",undefined,undefined,undefined,var_04); + var_04 = spawnstruct(); + var_04.index = 1; + var_04.dvar = "controls_autoaimConfig"; + var_04.value[0] = "autoaim_disabled"; + var_04.value[1] = "autoaim_enabled"; + var_04.display[0] = "Disabled"; + var_04.display[1] = "Enabled"; + var_03 func_3BE7(&"MENU_AUTOAIM",undefined,undefined,undefined,var_04); + var_04 = spawnstruct(); + var_04.index = 1; + var_04.dvar = "controls_vibrationConfig"; + var_04.value[0] = "vibration_disabled"; + var_04.value[1] = "vibration_enabled"; + var_04.display[0] = "Disabled"; + var_04.display[1] = "Enabled"; + var_03 func_3BE7(&"MENU_CONTROLLER_VIBRATION",undefined,undefined,undefined,var_04); + var_05 = createmenu("main"); + var_01 = setupaction(::pushmenu,var_00); + var_05 func_3BE1(&"MENU_SELECT_LEVEL",var_01,"openmenu_levels"); + var_06 = var_05 func_3BE9("options",&"MENU_OPTIONS"); + var_01 = setupaction(::pushmenu,var_03); + var_06 func_3BE1(&"MENU_CONTROLS",var_01); + var_06 func_3BE1(&"MENU_SUBTITLES"); + var_06 func_3BE1(&"MENU_SAVE_DEVICE"); + var_05 func_3BE1(&"MENU_CREDITS"); + var_01 = setupaction(::loadmultiplayer); + var_05 func_3BE1(&"MENU_MULTIPLAYER",var_01); + pushmenu(var_05); + level.player thread menuresponse(); +} + +//Function Number: 2 +void() +{ +} + +//Function Number: 3 +func_3BD2(param_00) +{ + changelevel(param_00); +} + +//Function Number: 4 +loadmultiplayer() +{ + level.player openpopupmenu("uiScript_startMultiplayer"); +} + +//Function Number: 5 +pushmenu(param_00) +{ + level.menustack[level.menustack.size] = param_00; + var_01 = level.var_3BD5; + level.var_3BD5 = param_00; + if(param_00.menutype == "fullScreen") + { + if(isdefined(var_01)) + { + var_01 thread hidemenu(0.2,1); + } + + param_00 thread showmenu(0.2,1); + level notify("open_menu",level.var_3BD5.name); + } + else + { + param_00 thread expandmenu(0.2); + } + + level.player playsound("mouse_click"); +} + +//Function Number: 6 +func_3BD7() +{ + if(level.menustack.size == 1) + { + return; + } + + level.menustack[level.menustack.size - 1] = undefined; + var_00 = level.var_3BD5; + level.var_3BD5 = level.menustack[level.menustack.size - 1]; + if(var_00.menutype == "subMenu") + { + var_00 thread collapsemenu(0.2); + level.var_3BD5 func_3BF6(0.2,1); + } + else + { + var_00 thread hidemenu(0.2,0); + level.var_3BD5 thread showmenu(0.2,0); + level notify("close_menu",level.menustack.size); + } + + level.player playsound("mouse_click"); +} + +//Function Number: 7 +createmenu(param_00) +{ + var_01 = spawnstruct(); + var_01.name = param_00; + var_01.menutype = "fullScreen"; + var_01.itemdefs = []; + var_01.itemwidth = 120; + var_01.var_3BDB = 20; + var_01.var_3BDC = 0; + var_01.var_3BDD = 0; + var_01.var_3BD0 = 80; + var_01.ypos = 100; + var_01.xoffset = 0; + var_01.yoffset = 0; + return var_01; +} + +//Function Number: 8 +func_3BDE(param_00) +{ + var_01 = spawnstruct(); + var_01.name = param_00; + var_01.menutype = "fullScreen"; + var_01.itemdefs = []; + var_01.itemwidth = 420; + var_01.var_3BDB = 20; + var_01.var_3BDC = 0; + var_01.var_3BDD = 0; + var_01.var_3BD0 = 80; + var_01.ypos = 100; + var_01.xoffset = 0; + var_01.yoffset = 0; + return var_01; +} + +//Function Number: 9 +createsubmenu(param_00) +{ + var_01 = spawnstruct(); + var_01.name = param_00; + var_01.menutype = "subMenu"; + var_01.itemdefs = []; + var_01.itemwidth = 120; + var_01.var_3BDB = 20; + var_01.var_3BDC = 0; + var_01.var_3BDD = 0; + var_01.var_3BE0 = 0; + return var_01; +} + +//Function Number: 10 +func_3BE1(param_00,param_01,param_02,param_03) +{ + precachestring(param_00); + var_04 = spawnstruct(); + var_04.itemtype = "item"; + var_04.var_3BE3 = "menu_button_selected"; + var_04.var_3BE4 = param_00; + var_04.var_3BD0 = 0; + var_04.ypos = 0; + var_04.xoffset = 0; + var_04.yoffset = 0; + var_04.action = param_01; + var_04.event = param_02; + var_04.var_16D0 = param_03; + var_04.var_3BE6 = self; + var_04.index = self.itemdefs.size; + self.itemdefs[self.itemdefs.size] = var_04; +} + +//Function Number: 11 +func_3BE7(param_00,param_01,param_02,param_03,param_04) +{ + precachestring(param_00); + var_05 = spawnstruct(); + var_05.itemtype = "settingMenu"; + var_05.var_3BE3 = "menu_button_selected"; + var_05.var_3BE4 = param_00; + var_05.var_3BD0 = 0; + var_05.ypos = 0; + var_05.xoffset = 0; + var_05.yoffset = 0; + var_05.action = param_01; + var_05.event = param_02; + var_05.var_16D0 = param_03; + var_05.setting = param_04; + var_05.var_3BE6 = self; + var_05.index = self.itemdefs.size; + self.itemdefs[self.itemdefs.size] = var_05; +} + +//Function Number: 12 +func_3BE9(param_00,param_01) +{ + var_02 = createsubmenu(param_00); + var_02.itemtype = "subMenu"; + var_02.var_3BE3 = "menu_button_selected"; + var_02.var_3BE4 = param_01; + var_02.var_3BD0 = 0; + var_02.ypos = 0; + var_02.xoffset = 20; + var_02.yoffset = self.var_3BDB + self.var_3BDC; + var_02.var_3BE6 = self; + var_02.index = self.itemdefs.size; + self.itemdefs[self.itemdefs.size] = var_02; + return var_02; +} + +//Function Number: 13 +createitemelems() +{ + self.bgicon = maps\_hud_util::createicon(self.var_3BE3,self.var_3BE6.itemwidth,self.var_3BE6.var_3BDB); + self.bgicon.alpha = 0; + self.bgicon.sort = 0; + self.var_3BEC = maps\_hud_util::createfontstring("default",1.5); + self.var_3BEC.alpha = 0; + self.var_3BEC.sort = 100; + self.var_3BEC settext(self.var_3BE4); + if(self.itemtype == "settingMenu") + { + self.var_3BED = maps\_hud_util::createfontstring("default",1.5); + self.var_3BED.alpha = 0; + self.var_3BED.sort = 100; + updatedisplayvalue(); + } + + if(self.itemtype == "subMenu") + { + self.var_3BEE = maps\_hud_util::createicon("menu_caret_closed",self.var_3BE6.var_3BDB,self.var_3BE6.var_3BDB); + self.var_3BEE.alpha = 0; + self.var_3BEE.sort = 100; + } + + if(isdefined(self.var_16D0)) + { + self.var_3BEF = maps\_hud_util::createfontstring("default",1.5); + self.var_3BEF.alpha = 0; + self.var_3BEF.sort = 100; + self.var_3BEF settext(self.var_16D0.display); + } +} + +//Function Number: 14 +destroyitemelems() +{ + if(self.itemtype == "subMenu") + { + self.var_3BEE maps\_hud_util::destroyelem(); + } + + if(self.itemtype == "settingMenu") + { + self.var_3BED maps\_hud_util::destroyelem(); + } + + if(isdefined(self.var_3BEF)) + { + self.var_3BEF maps\_hud_util::destroyelem(); + } + + self.bgicon maps\_hud_util::destroyelem(); + self.var_3BEC maps\_hud_util::destroyelem(); +} + +//Function Number: 15 +setelempoints(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = 3; + self.bgicon maps\_hud_util::setpoint(param_00,param_01,param_02,param_03,param_04); + if(self.itemtype == "subMenu") + { + self.var_3BEE maps\_hud_util::setpoint(param_00,param_01,param_02,param_03,param_04); + var_05 = var_05 + 16; + } + + if(self.itemtype == "settingMenu") + { + self.var_3BED maps\_hud_util::setpoint("TOPRIGHT",param_01,param_02 + var_05 + 400,param_03,param_04); + } + + if(isdefined(self.var_3BEF)) + { + self.var_3BEF maps\_hud_util::setpoint("TOPLEFT",param_01,self.var_16D0.var_3BD0,self.var_16D0.ypos,param_04); + } + + self.var_3BEC maps\_hud_util::setpoint(param_00,param_01,param_02 + var_05,param_03,param_04); +} + +//Function Number: 16 +showmenu(param_00,param_01) +{ + var_02 = 0; + for(var_03 = 0;var_03 < self.itemdefs.size;var_03++) + { + var_04 = self.itemdefs[var_03]; + var_04 createitemelems(); + if(param_01) + { + var_04 setelempoints("TOPLEFT","TOPRIGHT",self.var_3BD0,self.ypos + var_02); + } + else + { + var_04 setelempoints("TOPRIGHT","TOPLEFT",self.var_3BD0,self.ypos + var_02); + } + + var_04.var_3BD0 = self.var_3BD0; + var_04.ypos = self.ypos + var_02; + var_02 = var_02 + self.var_3BDB + self.var_3BDC; + if(var_04.itemtype == "subMenu" && var_04.var_3BE0) + { + var_02 = var_02 + var_04 func_3BFA(); + } + } + + if(self.menutype == "subMenu") + { + self.var_3BE6 showmenu(param_00,param_01); + } + + func_3BF6(param_00,1); +} + +//Function Number: 17 +hidemenu(param_00,param_01) +{ + var_02 = 0; + for(var_03 = 0;var_03 < self.itemdefs.size;var_03++) + { + var_04 = self.itemdefs[var_03]; + var_05 = -1 * self.itemwidth; + if(param_01) + { + var_04 setelempoints("TOPRIGHT","TOPLEFT",self.var_3BD0,self.ypos + var_02,param_00); + var_04.bgicon fadeovertime(param_00); + var_04.bgicon.alpha = 0; + var_04.var_3BEC fadeovertime(param_00); + var_04.var_3BEC.alpha = 0; + if(var_04.itemtype == "settingMenu") + { + var_04.var_3BED fadeovertime(param_00); + var_04.var_3BED.alpha = 0; + } + + if(var_04.itemtype == "subMenu") + { + var_04.var_3BEE fadeovertime(param_00); + var_04.var_3BEE.alpha = 0; + } + } + else + { + var_04 setelempoints("TOPLEFT","TOPRIGHT",self.var_3BD0,self.ypos + var_02,param_00); + var_04.bgicon fadeovertime(param_00); + var_04.bgicon.alpha = 0; + var_04.var_3BEC fadeovertime(param_00); + var_04.var_3BEC.alpha = 0; + if(var_04.itemtype == "settingMenu") + { + var_04.var_3BED fadeovertime(param_00); + var_04.var_3BED.alpha = 0; + } + + if(var_04.itemtype == "subMenu") + { + var_04.var_3BEE fadeovertime(param_00); + var_04.var_3BEE.alpha = 0; + } + } + + var_04.var_3BD0 = self.var_3BD0; + var_04.ypos = self.ypos + var_02; + var_02 = var_02 + self.var_3BDB + self.var_3BDC; + if(var_04.itemtype == "subMenu" && var_04.var_3BE0) + { + var_02 = var_02 + var_04 func_3BFA(); + } + } + + if(self.menutype == "subMenu") + { + self.var_3BE6 thread hidemenu(param_00,param_01); + } + + wait param_00; + for(var_03 = 0;var_03 < self.itemdefs.size;var_03++) + { + var_04 = self.itemdefs[var_03]; + var_04 destroyitemelems(); + } +} + +//Function Number: 18 +collapsemenu(param_00) +{ + self.var_3BE0 = 0; + self.var_3BEE setshader("menu_caret_closed",self.var_3BE6.var_3BDB,self.var_3BE6.var_3BDB); + var_01 = 0; + for(var_02 = 0;var_02 < self.itemdefs.size;var_02++) + { + var_03 = self.itemdefs[var_02]; + var_03 setelempoints("TOPLEFT","TOPLEFT",self.var_3BD0,self.ypos,param_00); + var_03.bgicon fadeovertime(param_00); + var_03.bgicon.alpha = 0; + var_03.var_3BEC fadeovertime(param_00); + var_03.var_3BEC.alpha = 0; + if(var_03.itemtype == "subMenu") + { + var_03.var_3BEE fadeovertime(param_00); + var_03.var_3BEE.alpha = 0; + } + + var_03.var_3BD0 = self.var_3BD0; + var_03.ypos = self.ypos; + } + + wait param_00; + for(var_02 = 0;var_02 < self.itemdefs.size;var_02++) + { + var_03 = self.itemdefs[var_02]; + var_03.bgicon maps\_hud_util::destroyelem(); + var_03.var_3BEC maps\_hud_util::destroyelem(); + if(var_03.itemtype == "subMenu") + { + var_03.var_3BEE maps\_hud_util::destroyelem(); + } + } +} + +//Function Number: 19 +expandmenu(param_00) +{ + self.var_3BE0 = 1; + self.var_3BEE setshader("menu_caret_open",self.var_3BE6.var_3BDB,self.var_3BE6.var_3BDB); + for(var_01 = 0;var_01 < self.itemdefs.size;var_01++) + { + var_02 = self.itemdefs[var_01]; + var_02 createitemelems(); + var_02 setelempoints("TOPLEFT","TOPLEFT",self.var_3BD0 + self.xoffset,self.ypos + self.yoffset); + var_02.var_3BD0 = self.var_3BD0 + self.xoffset; + var_02.ypos = self.ypos + self.yoffset; + } + + func_3BF6(param_00,1); +} + +//Function Number: 20 +func_3BF6(param_00,param_01) +{ + var_02 = self.xoffset; + var_03 = self.yoffset; + for(var_04 = 0;var_04 < self.itemdefs.size;var_04++) + { + var_05 = self.itemdefs[var_04]; + var_05 setselected(param_00,var_04 == self.var_3BDD); + var_06 = var_05.var_3BD0; + var_07 = var_05.ypos; + if(param_01 || self.var_3BD0 + var_02 != var_06 || self.ypos + var_03 != var_07) + { + var_05 setelempoints("TOPLEFT","TOPLEFT",self.var_3BD0 + var_02,self.ypos + var_03,param_00); + var_05.var_3BD0 = self.var_3BD0 + var_02; + var_05.ypos = self.ypos + var_03; + } + + var_03 = var_03 + self.var_3BDB + self.var_3BDC; + if(var_05.itemtype == "subMenu" && var_05.var_3BE0) + { + var_03 = var_03 + var_05 func_3BFA(); + } + } + + if(isdefined(self.var_3BE6)) + { + self.var_3BE6 thread func_3BF6(param_00,param_01); + } +} + +//Function Number: 21 +setselected(param_00,param_01) +{ + self.bgicon fadeovertime(param_00); + self.var_3BEC fadeovertime(param_00); + if(isdefined(self.var_3BED)) + { + self.var_3BED fadeovertime(param_00); + } + + if(isdefined(self.var_3BEF)) + { + self.var_3BEF fadeovertime(param_00); + } + + if(param_01) + { + if(self.var_3BE6 == level.var_3BD5) + { + func_3BF8(1); + } + else + { + func_3BF8(0.5); + } + + if(isdefined(self.var_3BEF)) + { + self.var_3BEF.alpha = 1; + return; + } + + return; + } + + if(self.var_3BE6 == level.var_3BD5) + { + func_3BF8(0.5); + } + else + { + func_3BF8(0.25); + } + + if(isdefined(self.var_3BEF)) + { + self.var_3BEF.alpha = 0; + } +} + +//Function Number: 22 +func_3BF8(param_00) +{ + self.bgicon.alpha = param_00; + self.var_3BEC.alpha = param_00; + if(self.itemtype == "settingMenu") + { + self.var_3BED.alpha = param_00; + } + + if(self.itemtype == "subMenu") + { + self.var_3BEE.alpha = param_00; + } +} + +//Function Number: 23 +func_3BF9(param_00) +{ + self.var_3BEC.color = param_00; +} + +//Function Number: 24 +func_3BFA() +{ + var_00 = 0; + for(var_01 = 0;var_01 < self.itemdefs.size;var_01++) + { + var_02 = self.itemdefs[var_01]; + var_00 = var_00 + self.var_3BDB + self.var_3BDC; + if(var_02.itemtype == "subMenu" && var_02.var_3BE0) + { + var_00 = var_00 + var_02 func_3BFA(); + } + } + + return var_00; +} + +//Function Number: 25 +func_3BFB() +{ + self.var_3BDD--; + if(self.var_3BDD < 0) + { + self.var_3BDD = self.itemdefs.size - 1; + } + + func_3BF6(0.1,0); + level.player playsound("mouse_over"); +} + +//Function Number: 26 +func_3BFC() +{ + self.var_3BDD++; + if(self.var_3BDD >= self.itemdefs.size) + { + self.var_3BDD = 0; + } + + func_3BF6(0.1,0); + level.player playsound("mouse_over"); +} + +//Function Number: 27 +func_3BFD() +{ + func_3BD7(); +} + +//Function Number: 28 +func_3BFE() +{ + var_00 = self.itemdefs[self.var_3BDD]; + if(var_00.itemtype == "subMenu") + { + pushmenu(var_00); + return; + } + + if(var_00.itemtype == "item") + { + var_00 thread runaction(); + } +} + +//Function Number: 29 +func_3BFF() +{ + var_00 = self.itemdefs[self.var_3BDD]; + if(var_00.itemtype == "settingMenu") + { + var_01 = getdvar(var_00.setting.dvar); + var_02 = var_00.setting.value; + var_03 = 0; + for(var_04 = 0;var_04 < var_02.size;var_04++) + { + var_05 = var_02[var_04]; + if(var_05 != var_01) + { + continue; + } + + var_03 = var_04 - 1; + if(var_03 >= 0) + { + var_00.setting.index = var_03; + setdvar(var_00.setting.dvar,var_02[var_03]); + var_00 updatedisplayvalue(); + level.player playsound("mouse_over"); + } + + break; + } + } +} + +//Function Number: 30 +func_3C00() +{ + var_00 = self.itemdefs[self.var_3BDD]; + if(var_00.itemtype == "settingMenu") + { + var_01 = getdvar(var_00.setting.dvar); + var_02 = var_00.setting.value; + var_03 = 0; + for(var_04 = 0;var_04 < var_02.size;var_04++) + { + var_05 = var_02[var_04]; + if(var_05 != var_01) + { + continue; + } + + var_03 = var_04 + 1; + if(var_03 <= var_00.setting.value.size - 1) + { + var_00.setting.index = var_03; + setdvar(var_00.setting.dvar,var_02[var_03]); + var_00 updatedisplayvalue(); + level.player playsound("mouse_over"); + } + + break; + } + } +} + +//Function Number: 31 +initthumbsticklayout() +{ + setdvar("controls_sticksConfig","thumbstick_default"); +} + +//Function Number: 32 +initbuttonlayout() +{ + setdvar("controls_buttonConfig","buttons_default"); +} + +//Function Number: 33 +func_3C03() +{ + setdvar("controls_sensitivityConfig","sensitivity_medium"); +} + +//Function Number: 34 +func_3C04() +{ + setdvar("controls_inversionConfig","inversion_disabled"); +} + +//Function Number: 35 +func_3C05() +{ + setdvar("controls_autoaimConfig","autoaim_enabled"); +} + +//Function Number: 36 +initvibration() +{ + setdvar("controls_vibrationConfig","vibration_enabled"); +} + +//Function Number: 37 +updatedisplayvalue() +{ + self.var_3BED settext(self.setting.display[self.setting.index]); +} + +//Function Number: 38 +setupaction(param_00,param_01,param_02) +{ + var_03 = spawnstruct(); + var_03.name = param_00; + if(isdefined(param_01)) + { + var_03.var_3C09 = param_01; + } + + if(isdefined(param_02)) + { + var_03.var_3C0A = param_02; + } + + return var_03; +} + +//Function Number: 39 +runaction() +{ + if(isdefined(self.action)) + { + if(isdefined(self.action.var_3C09)) + { + thread [[ self.action.name ]](self.action.var_3C09); + } + else + { + thread [[ self.action.name ]](); + } + } + + if(isdefined(self.event)) + { + level notify(self.event); + } +} + +//Function Number: 40 +testaction() +{ + level.marine setgoalnode(getnode("node2","targetname")); + level.camera attachpath(getvehiclenode("path2","targetname")); + thread maps\_vehicle::func_1B44(level.camera); +} + +//Function Number: 41 +menuresponse() +{ + for(;;) + { + self waittill("menuresponse",var_00,var_01); + switch(var_01) + { + case "DPAD_UP": + level.var_3BD5 func_3BFB(); + break; + + case "DPAD_DOWN": + level.var_3BD5 func_3BFC(); + break; + + case "DPAD_LEFT": + level.var_3BD5 func_3BFF(); + break; + + case "DPAD_RIGHT": + level.var_3BD5 func_3C00(); + break; + + case "BUTTON_A": + level.var_3BD5 func_3BFE(); + break; + + case "BUTTON_B": + level.var_3BD5 func_3BFD(); + break; + } + } +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_mg_penetration.gsc b/MW3/Xbox/SP/maps/_mg_penetration.gsc new file mode 100644 index 0000000..a1228af --- /dev/null +++ b/MW3/Xbox/SP/maps/_mg_penetration.gsc @@ -0,0 +1,356 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_mg_penetration.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 16 + * Decompile Time: 324 ms + * Timestamp: 10/27/2023 2:32:27 AM +*******************************************************************/ + +//Function Number: 1 +gunner_think(param_00) +{ + self endon("death"); + self notify("end_mg_behavior"); + self endon("end_mg_behavior"); + self.can_fire_turret = 1; + self.wants_to_fire = 0; + if(!maps\_mgturret::use_the_turret(param_00)) + { + self notify("continue_cover_script"); + return; + } + + self.var_663 = undefined; + thread record_enemy_sightings(); + var_01 = anglestoforward(param_00.angles); + var_02 = spawn("script_origin",(0,0,0)); + thread target_ent_cleanup(var_02); + var_02.origin = param_00.origin + var_01 * 500; + if(isdefined(self.var_663)) + { + var_02.origin = self.var_663; + } + + param_00 settargetentity(var_02); + var_03 = undefined; + for(;;) + { + if(!isalive(self.current_enemy)) + { + stop_firing(); + self waittill("new_enemy"); + } + + start_firing(); + shoot_enemy_until_he_hides_then_shoot_wall(var_02); + if(!isalive(self.current_enemy)) + { + continue; + } + + if(self cansee(self.current_enemy)) + { + continue; + } + + self waittill("saw_enemy"); + } +} + +//Function Number: 2 +target_ent_cleanup(param_00) +{ + common_scripts\utility::waittill_either("death","end_mg_behavior"); + param_00 delete(); +} + +//Function Number: 3 +shoot_enemy_until_he_hides_then_shoot_wall(param_00) +{ + self endon("death"); + self endon("new_enemy"); + self.current_enemy endon("death"); + var_01 = self.current_enemy; + while(self cansee(var_01)) + { + var_02 = vectortoangles(var_01 geteye() - param_00.origin); + var_02 = anglestoforward(var_02); + param_00 moveto(param_00.origin + var_02 * 12,0.1); + wait 0.1; + } + + if(isplayer(var_01)) + { + self endon("saw_enemy"); + var_03 = var_01 geteye(); + var_02 = vectortoangles(var_03 - param_00.origin); + var_02 = anglestoforward(var_02); + var_04 = 150; + var_05 = distance(param_00.origin,self.var_663) / var_04; + if(var_05 > 0) + { + param_00 moveto(self.var_663,var_05); + wait var_05; + } + + var_06 = param_00.origin + var_02 * 180; + var_07 = get_suppress_point(self geteye(),param_00.origin,var_06); + if(!isdefined(var_07)) + { + var_07 = param_00.origin; + } + + param_00 moveto(param_00.origin + var_02 * 80 + (0,0,randomfloatrange(15,50) * -1),3,1,1); + wait 3.5; + param_00 moveto(var_07 + var_02 * -20,3,1,1); + } + + wait randomfloatrange(2.5,4); + stop_firing(); +} + +//Function Number: 4 +set_firing(param_00) +{ + if(param_00) + { + self.can_fire_turret = 1; + if(self.wants_to_fire) + { + self.turret notify("startfiring"); + return; + } + + return; + } + + self.can_fire_turret = 0; + self.turret notify("stopfiring"); +} + +//Function Number: 5 +stop_firing() +{ + self.wants_to_fire = 0; + self.turret notify("stopfiring"); +} + +//Function Number: 6 +start_firing() +{ + self.wants_to_fire = 1; + if(self.can_fire_turret) + { + self.turret notify("startfiring"); + } +} + +//Function Number: 7 +create_mg_team() +{ + if(isdefined(level.mg_gunner_team)) + { + level.mg_gunner_team[level.mg_gunner_team.size] = self; + return; + } + + level.mg_gunner_team = []; + level.mg_gunner_team[level.mg_gunner_team.size] = self; + waittillframeend; + var_00 = spawnstruct(); + common_scripts\utility::array_thread(level.mg_gunner_team,::mg_gunner_death_notify,var_00); + var_01 = level.mg_gunner_team; + level.mg_gunner_team = undefined; + var_00 waittill("gunner_died"); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + if(!isalive(var_01[var_02])) + { + continue; + } + + var_01[var_02] notify("stop_using_built_in_burst_fire"); + var_01[var_02] thread solo_fires(); + } +} + +//Function Number: 8 +mg_gunner_death_notify(param_00) +{ + self waittill("death"); + param_00 notify("gunner_died"); +} + +//Function Number: 9 +mgteam_take_turns_firing(param_00) +{ + wait 1; + level notify("new_mg_firing_team" + param_00[0].script_noteworthy); + level endon("new_mg_firing_team" + param_00[0].script_noteworthy); + for(;;) + { + dual_firing(param_00); + solo_firing(param_00); + } +} + +//Function Number: 10 +solo_firing(param_00) +{ + var_01 = undefined; + for(var_02 = 0;var_02 < param_00.size;var_02++) + { + if(!isalive(param_00[var_02])) + { + continue; + } + + var_01 = param_00[var_02]; + break; + } + + if(!isdefined(var_01)) + { + } +} + +//Function Number: 11 +solo_fires() +{ + self endon("death"); + for(;;) + { + self.turret startfiring(); + wait randomfloatrange(0.3,0.7); + self.turret stopfiring(); + wait randomfloatrange(0.1,1.1); + } +} + +//Function Number: 12 +dual_firing(param_00) +{ + for(var_01 = 0;var_01 < param_00.size;var_01++) + { + param_00[var_01] endon("death"); + } + + var_02 = 0; + var_03 = 1; + for(;;) + { + if(isalive(param_00[var_02])) + { + param_00[var_02] set_firing(1); + } + + if(isalive(param_00[var_03])) + { + param_00[var_03] set_firing(0); + } + + var_04 = var_02; + var_02 = var_03; + var_03 = var_04; + wait randomfloatrange(2.3,3.5); + } +} + +//Function Number: 13 +func_0672(param_00,param_01) +{ + start_firing(); + self endon("death"); + self endon("new_enemy"); + param_01 endon("death"); + while(self cansee(param_01)) + { + var_02 = vectortoangles(param_01 geteye() - param_00.origin); + var_02 = anglestoforward(var_02); + param_00 moveto(param_00.origin + var_02 * 10,0.2); + wait 0.2; + } + + var_02 = vectortoangles(param_01 geteye() - param_00.origin); + var_02 = anglestoforward(var_02); + var_03 = 150; + var_04 = distance(param_00.origin,self.var_663) / var_03; + param_00 moveto(self.var_663,var_04); + wait var_04; + var_05 = param_00.origin; + param_00 moveto(param_00.origin + var_02 * 80 + (0,0,-25),3,1,1); + wait 3.5; + param_00 moveto(var_05 + var_02 * -20,3,1,1); + wait 1; + stop_firing(); +} + +//Function Number: 14 +get_suppress_point(param_00,param_01,param_02) +{ + var_03 = distance(param_01,param_02) * 0.05; + if(var_03 < 5) + { + var_03 = 5; + } + + if(var_03 > 20) + { + var_03 = 20; + } + + var_04 = param_02 - param_01; + var_04 = (var_04[0] / var_03,var_04[1] / var_03,var_04[2] / var_03); + var_05 = (0,0,0); + var_06 = undefined; + for(var_07 = 0;var_07 < var_03 + 2;var_07++) + { + var_08 = bullettrace(param_00,param_01 + var_05,0,undefined); + if(var_08["fraction"] < 1) + { + var_06 = var_08["position"]; + break; + } + + var_05 = var_05 + var_04; + } + + return var_06; +} + +//Function Number: 15 +record_enemy_sightings() +{ + self endon("death"); + self endon("end_mg_behavior"); + self.current_enemy = undefined; + for(;;) + { + func_0675(); + wait 0.05; + } +} + +//Function Number: 16 +func_0675() +{ + if(!isalive(self.enemy)) + { + return; + } + + if(!self cansee(self.enemy)) + { + return; + } + + self.var_663 = self.enemy geteye(); + self notify("saw_enemy"); + if(!isalive(self.current_enemy) || self.current_enemy != self.enemy) + { + self.current_enemy = self.enemy; + self notify("new_enemy"); + } +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_mgturret.gsc b/MW3/Xbox/SP/maps/_mgturret.gsc new file mode 100644 index 0000000..005ff47 --- /dev/null +++ b/MW3/Xbox/SP/maps/_mgturret.gsc @@ -0,0 +1,2022 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_mgturret.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 71 + * Decompile Time: 1190 ms + * Timestamp: 10/27/2023 2:31:47 AM +*******************************************************************/ + +//Function Number: 1 +init_mgturretsettings() +{ + level.var_1DF1["easy"]["convergenceTime"] = 2.5; + level.var_1DF1["easy"]["suppressionTime"] = 3; + level.var_1DF1["easy"]["accuracy"] = 0.38; + level.var_1DF1["easy"]["aiSpread"] = 2; + level.var_1DF1["easy"]["playerSpread"] = 0.5; + level.var_1DF1["medium"]["convergenceTime"] = 1.5; + level.var_1DF1["medium"]["suppressionTime"] = 3; + level.var_1DF1["medium"]["accuracy"] = 0.38; + level.var_1DF1["medium"]["aiSpread"] = 2; + level.var_1DF1["medium"]["playerSpread"] = 0.5; + level.var_1DF1["hard"]["convergenceTime"] = 0.8; + level.var_1DF1["hard"]["suppressionTime"] = 3; + level.var_1DF1["hard"]["accuracy"] = 0.38; + level.var_1DF1["hard"]["aiSpread"] = 2; + level.var_1DF1["hard"]["playerSpread"] = 0.5; + level.var_1DF1["fu"]["convergenceTime"] = 0.4; + level.var_1DF1["fu"]["suppressionTime"] = 3; + level.var_1DF1["fu"]["accuracy"] = 0.38; + level.var_1DF1["fu"]["aiSpread"] = 2; + level.var_1DF1["fu"]["playerSpread"] = 0.5; +} + +//Function Number: 2 +main() +{ + 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_1DF3() +{ + self detach("weapon_mg42_carry","tag_origin"); + self endon("death"); + self.goalradius = level.default_goalradius; + 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)) + { + return; + } + + if(var_01.type != "Turret") + { + return; + } + + var_02 = func_1E50(); + var_02[self.node.origin + ""] = undefined; + if(isdefined(var_02[var_01.origin + ""])) + { + return; + } + + var_03 = var_01.turret; + if(isdefined(var_03.var_1DF4)) + { + return; + } + + func_1E5C(var_03); + if(var_03.issetup) + { + func_1E44(var_03); + } + else + { + run_to_new_spot_and_setup_gun(var_03); + } + + maps\_mg_penetration::gunner_think(var_01.turret); +} + +//Function Number: 4 +mg42_trigger() +{ + self waittill("trigger"); + level notify(self.targetname); + level.mg42_trigger[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].script_mg42auto) && param_00.script_mg42auto == var_01[var_02].script_mg42auto) + { + 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].script_mg42auto) && param_00.script_mg42auto == var_03[var_02].script_mg42auto) + { + var_03[var_02].ai_mode = "auto_ai"; + } + } + + maps\_spawner::func_1CBC(param_00); +} + +//Function Number: 6 +func_1D3D(param_00) +{ + self endon("death"); + self endon("stop_suppressionFire"); + if(!isdefined(self.var_1DF8)) + { + self.var_1DF8 = 1; + } + + for(;;) + { + while(self.var_1DF8) + { + self settargetentity(param_00[randomint(param_00.size)]); + wait 2 + randomfloat(2); + } + + self cleartargetentity(); + while(!self.var_1DF8) + { + wait 1; + } + } +} + +//Function Number: 7 +manual_think(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_1DFA() +{ + 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_1DFB)) + { + var_02 = self.var_1DFB; + } + else + { + var_02 = burst_fire_settings("burst"); + } + + if(isdefined(self.var_1DFC)) + { + var_03 = self.var_1DFC - var_02; + } + else + { + var_03 = burst_fire_settings("burst_range"); + } + + var_04 = gettime(); + var_05 = "start"; + if(isdefined(self.var_1DFD)) + { + thread func_1DFF(); + } + + for(;;) + { + var_06 = var_04 - gettime() * 0.001; + if(self isfiringturret() && var_06 <= 0) + { + if(var_05 != "fire") + { + var_05 = "fire"; + thread func_1DFE(); + } + + var_06 = var_02 + randomfloat(var_03); + thread turrettimer(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 turrettimer(var_06); + self waittill("turretstatechange"); + } +} + +//Function Number: 10 +func_1DFE() +{ + self endon("death"); + self endon("turretstatechange"); + for(;;) + { + self shootturret(); + wait 0.1; + } +} + +//Function Number: 11 +func_1DFF() +{ + self endon("death"); + self endon("stop_burst_fire_unmanned"); + if(isdefined(self.var_1E00)) + { + self.shell_sound_enabled = 1; + } + + for(;;) + { + self waittill("turret_fire"); + playfxontag(self.var_1DFD,self,"tag_origin"); + if(isdefined(self.shell_sound_enabled) && self.shell_sound_enabled) + { + thread turret_shell_sound(); + } + } +} + +//Function Number: 12 +turret_shell_sound() +{ + self endon("death"); + self.shell_sound_enabled = 0; + var_00 = self gettagorigin("tag_origin"); + var_01 = maps\_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::play_sound_in_space(self.var_1E00,var_01); + wait 1; + self.shell_sound_enabled = 1; +} + +//Function Number: 13 +turrettimer(param_00) +{ + if(param_00 <= 0) + { + return; + } + + self endon("turretstatechange"); + wait param_00; + if(isdefined(self)) + { + self notify("turretstatechange"); + } +} + +//Function Number: 14 +random_spread(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.manual_target getorigin(); + } + else + { + param_00.origin = self.manual_target.origin; + } + + param_00.origin = param_00.origin + (20 - randomfloat(40),20 - randomfloat(40),20 - randomfloat(60)); + wait 0.2; + } +} + +//Function Number: 15 +mg42_firing(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_1E06(param_00); + param_00 startfiring(); + param_00 waittill("stopfiring"); + param_00 stopfiring(); + } +} + +//Function Number: 16 +func_1E06(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_1DFB)) + { + var_04 = param_00.var_1DFB; + } + else + { + var_04 = burst_fire_settings("burst"); + } + + if(isdefined(param_00.var_1DFC)) + { + var_05 = param_00.var_1DFC - var_04; + } + else + { + var_05 = burst_fire_settings("burst_range"); + } + + for(;;) + { + param_00 startfiring(); + if(isdefined(param_01)) + { + param_00 thread random_spread(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.flagged_for_use)) + { + self.flagged_for_use = 0; + } + + if(!isdefined(self.targetname)) + { + return; + } + + var_00 = getnode(self.targetname,"target"); + if(!isdefined(var_00)) + { + return; + } + + if(!isdefined(var_00.script_mg42)) + { + return; + } + + if(!isdefined(var_00.mg42_enabled)) + { + var_00.mg42_enabled = 1; + } + + self.script_mg42 = var_00.script_mg42; + var_01 = 1; + for(;;) + { + if(var_01) + { + var_01 = 0; + if(isdefined(var_00.targetname) || self.flagged_for_use) + { + self waittill("get new user"); + } + } + + if(!var_00.mg42_enabled) + { + var_00 waittill("enable mg42"); + var_00.mg42_enabled = 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].script_mg42) && var_03[var_04].script_mg42 == self.script_mg42) + { + var_05 = 0; + } + + if(isdefined(var_03[var_04].used_an_mg42)) + { + var_05 = 1; + } + + if(var_05) + { + var_02[var_02.size] = var_03[var_04]; + } + } + + if(var_02.size) + { + var_03 = maps\_utility::func_1E0A(var_00.origin,undefined,var_02); + } + else + { + var_03 = maps\_utility::get_closest_ai(var_00.origin,undefined); + } + + var_02 = undefined; + if(isdefined(var_03)) + { + var_03 notify("stop_going_to_node"); + var_03 thread maps\_spawner::func_1D26(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)) + { + return; + } + + var_01 = getent(var_00.target,"targetname"); + var_01.var_1AE7 = var_00.origin; + if(isdefined(var_01.target)) + { + if(!isdefined(level.mg42_trigger) || !isdefined(level.mg42_trigger[var_01.target])) + { + level.mg42_trigger[var_01.target] = 0; + getent(var_01.target,"targetname") thread mg42_trigger(); + } + + var_02 = 1; + } + else + { + var_02 = 0; + } + + for(;;) + { + if(self.count == 0) + { + return; + } + + 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 mg42_firing(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 +kill_objects(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"); + move_use_turret(param_00,"auto_ai"); + self waittill("manual_ai"); + } + + return; + } + + for(;;) + { + move_use_turret(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 +player_safe() +{ + if(!isdefined(level.player_covertrigger)) + { + return 0; + } + + if(level.player getstance() == "prone") + { + return 1; + } + + if(level.player_covertype == "cow" && level.player getstance() == "crouch") + { + return 1; + } + + return 0; +} + +//Function Number: 22 +func_1E11() +{ + 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_1AE7); + self.goalradius = level.magic_distance; + self waittill("goal"); + if(param_01) + { + if(!level.mg42_trigger[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 temp_think(param_00,var_02); + level thread kill_objects(self,"death",var_02,var_03); + level thread kill_objects(self,"auto_ai",var_02,var_03); + param_00.var_1E13 = 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_1E17(var_05); + move_use_turret(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.player_covertrigger)) + { + var_07 = var_02.origin; + if(distance(var_07,var_05[self.var_1E15].origin) > var_08) + { + var_0C = vectornormalize(var_05[self.var_1E15].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_1E11() * var_0D; + if(player_safe()) + { + var_0D = 2; + } + + wait var_09; + } + + var_0E = level.player getorigin(); + while(!player_safe()) + { + var_02.origin = level.player getorigin(); + var_0F = var_02.origin - var_0E; + var_02.origin = var_02.origin + var_0F + func_1E11(); + var_0E = level.player getorigin(); + wait 0.1; + } + + if(player_safe()) + { + var_0B = gettime() + 1500 + randomfloat(4000); + while(player_safe() && isdefined(level.player_covertrigger.target) && gettime() < var_0B) + { + var_10 = getentarray(level.player_covertrigger.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(player_safe()) + { + var_07 = var_02.origin; + if(distance(var_07,var_05[self.var_1E15].origin) > var_08) + { + var_0C = vectornormalize(var_05[self.var_1E15].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; + } + } + + return; + } + + for(;;) + { + move_use_turret(param_00); + while(!isdefined(level.player_covertrigger)) + { + if(!param_00.var_1E13) + { + param_00 settargetentity(level.player); + param_00.var_1E13 = 1; + var_03.var_1E16 = level.player; + } + + wait 0.2; + } + + param_00 setmode("manual_ai"); + move_use_turret(param_00); + param_00 notify("startfiring"); + var_0B = gettime() + 1500 + randomfloat(4000); + while(var_0B > gettime()) + { + if(isdefined(level.player_covertrigger)) + { + var_10 = getentarray(level.player_covertrigger.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_1E16 = var_02; + wait randomfloat(1); + continue; + } + + break; + } + + param_00 notify("stopfiring"); + move_use_turret(param_00); + if(param_00.var_1E13) + { + param_00 setmode("auto_ai"); + param_00 cleartargetentity(); + param_00.var_1E13 = 0; + var_03.var_1E16 = var_03; + var_03.origin = (0,0,0); + } + + while(isdefined(level.player_covertrigger)) + { + wait 0.2; + } + + wait 0.75 + randomfloat(0.2); + } +} + +//Function Number: 24 +func_1E17(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_1E15 = randomint(param_00.size); + self waittill("next_target"); + while(var_01[self.var_1E15]) + { + self.var_1E15++; + if(self.var_1E15 >= param_00.size) + { + self.var_1E15 = 0; + } + } + + var_01[self.var_1E15] = 1; + } + } +} + +//Function Number: 25 +move_use_turret(param_00,param_01,param_02) +{ + self setgoalpos(param_00.var_1AE7); + 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 +temp_think(param_00,param_01) +{ + if(getdvar("mg42") == "off") + { + return; + } + + self.var_1E16 = self; + for(;;) + { + self.origin = param_01.origin; + wait 0.1; + } +} + +//Function Number: 27 +func_1E1A(param_00) +{ + var_01 = getent(param_00.var_1E1B,"targetname"); + var_02 = 0.5; + if(isdefined(var_01.script_turret_reuse_min)) + { + var_02 = var_01.script_turret_reuse_min; + } + + var_03 = 2; + if(isdefined(var_01.script_turret_reuse_max)) + { + var_02 = var_01.script_turret_reuse_max; + } + + for(;;) + { + var_01 waittill("turret_deactivate"); + wait var_02 + randomfloat(var_03 - var_02); + while(!isturretactive(var_01)) + { + turret_find_user(param_00,var_01); + wait 1; + } + } +} + +//Function Number: 28 +turret_find_user(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_139A() +{ + init_mgturretsettings(); + var_00 = getentarray("misc_turret","code_classname"); + var_01 = maps\_utility::getdifficulty(); + for(var_02 = 0;var_02 < var_00.size;var_02++) + { + if(isdefined(var_00[var_02].script_skilloverride)) + { + switch(var_00[var_02].script_skilloverride) + { + 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; + } + } + + func_1E21(var_00[var_02],var_01); + } +} + +//Function Number: 30 +func_1E21(param_00,param_01) +{ + param_00.convergencetime = level.var_1DF1[param_01]["convergenceTime"]; + param_00.var_1E22 = level.var_1DF1[param_01]["suppressionTime"]; + param_00.accuracy = level.var_1DF1[param_01]["accuracy"]; + param_00.var_1E23 = level.var_1DF1[param_01]["aiSpread"]; + param_00.var_1E24 = level.var_1DF1[param_01]["playerSpread"]; +} + +//Function Number: 31 +mg42_target_drones(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.dronefailed = 0; + if(!isdefined(self.script_fireondrones)) + { + self.script_fireondrones = 0; + } + + if(!isdefined(param_00)) + { + param_00 = 0; + } + + self setmode("manual_ai"); + var_03 = maps\_utility::getdifficulty(); + if(!isdefined(level.drones)) + { + 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.oldconvergencetime)) + { + self.oldconvergencetime = 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.drones[var_06].var_1E2B) + { + common_scripts\utility::lock("mg42_drones"); + if(!level.drones[var_06].var_1E2B) + { + common_scripts\utility::unlock("mg42_drones"); + break; + } + + var_07 = get_bestdrone(var_06,param_02); + common_scripts\utility::unlock("mg42_drones"); + if(!isdefined(self.script_fireondrones) || !self.script_fireondrones) + { + 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)); + drone_target(var_07,1,param_02); + self cleartargetentity(); + self stopfiring(); + if(!param_00 && !isdefined(self getturretowner()) && self getturretowner() == var_05) + { + break; + } + } + + self.convergencetime = self.oldconvergencetime; + self.oldconvergencetime = undefined; + self cleartargetentity(); + self stopfiring(); + if(level.drones[var_06].var_1E2B) + { + var_04 = 0; + continue; + } + + var_04 = 1; + } +} + +//Function Number: 32 +drone_target(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::unlock_wait("mg42_drones_target_trace"); + } + + self stopfiring(); + maps\_utility::structarray_shuffle(level.drones[param_00.team],1); +} + +//Function Number: 33 +get_bestdrone(param_00,param_01) +{ + if(level.drones[param_00].var_1E2B < 1) + { + return; + } + + var_02 = undefined; + var_03 = anglestoforward(self.angles); + for(var_04 = 0;var_04 < level.drones[param_00].var_1E2B;var_04++) + { + if(!isdefined(level.drones[param_00].array[var_04])) + { + continue; + } + + var_05 = vectortoangles(level.drones[param_00].array[var_04].origin - self.origin); + var_06 = anglestoforward(var_05); + if(vectordot(var_03,var_06) < param_01) + { + continue; + } + + var_02 = level.drones[param_00].array[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_1E31)) + { + continue; + } + + var_02[var_01[var_03].origin + ""] = var_01[var_03]; + } + + if(!var_02.size) + { + return; + } + + 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_1AA4(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_1DEB)) + { + continue; + } + + if(!isdefined(var_01[var_03].script_dont_link_turret)) + { + var_02[var_01[var_03].origin + ""] = var_01[var_03]; + } + } + + if(!var_02.size) + { + return; + } + + 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 +func_1E33() +{ + self.shared_turrets = []; + self.shared_turrets["connected"] = []; + self.shared_turrets["ambush"] = []; + if(!isdefined(self.var_1DEB)) + { + return; + } + + level.shared_portable_turrets[self.var_1DEB] = self; + if(isdefined(self.var_1E35)) + { + var_00 = strtok(self.var_1E35," "); + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + self.shared_turrets["connected"][var_00[var_01]] = 1; + } + } + + if(isdefined(self.script_turret_ambush)) + { + var_00 = strtok(self.script_turret_ambush," "); + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + self.shared_turrets["ambush"][var_00[var_01]] = 1; + } + } +} + +//Function Number: 37 +func_1E37() +{ + 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 dropturretproc(); +} + +//Function Number: 39 +dropturretproc() +{ + var_00 = spawn("script_model",(0,0,0)); + var_00.origin = self gettagorigin(level.var_1C8D); + var_00.angles = self gettagangles(level.var_1C8D); + var_00 setmodel(self.turretmodel); + var_01 = anglestoforward(self.angles); + var_01 = var_01 * 100; + var_00 movegravity(var_01,0.5); + self detach(self.turretmodel,level.var_1C8D); + self.turretmodel = undefined; + wait 0.7; + var_00 delete(); +} + +//Function Number: 40 +turretdeathdetacher() +{ + self endon("kill_turret_detach_thread"); + self endon("dropped_gun"); + self waittill("death"); + if(!isdefined(self)) + { + return; + } + + dropturret(); +} + +//Function Number: 41 +func_1E3B() +{ + self endon("death"); + self endon("kill_turret_detach_thread"); + self waittill("dropped_gun"); + self detach(self.turretmodel,level.var_1C8D); +} + +//Function Number: 42 +restoredefaults() +{ + self.run_overrideanim = undefined; + common_scripts\utility::set_all_exceptions(::animscripts/init::empty); +} + +//Function Number: 43 +func_1E3C() +{ + self waittill("turret_deactivate"); + self restoredefaultdroppitch(); +} + +//Function Number: 44 +func_1E3D(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_663; + } +} + +//Function Number: 45 +move_target_pos_to_new_turrets_visibility(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 +record_bread_crumbs_for_ambush(param_00) +{ + self endon("death"); + self endon("end_mg_behavior"); + self endon("stop_updating_enemy_target_pos"); + param_00.bread_crumbs = []; + for(;;) + { + param_00.bread_crumbs[param_00.bread_crumbs.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_663; + return; + } + + var_02 = anglestoforward(param_00.angles); + for(var_03 = param_01.bread_crumbs.size - 3;var_03 >= 0;var_03--) + { + var_04 = param_01.bread_crumbs[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 +find_a_new_turret_spot(param_00) +{ + var_01 = func_1E4F(param_00); + var_02 = var_01["spot"]; + var_03 = var_01["type"]; + if(!isdefined(var_02)) + { + return; + } + + func_1E5C(var_02); + thread func_1E3D(param_00); + thread move_target_pos_to_new_turrets_visibility(param_00,var_02); + if(var_03 == "ambush") + { + thread record_bread_crumbs_for_ambush(param_00); + } + + if(var_02.issetup) + { + func_1E44(var_02); + } + else + { + pickup_gun(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 +snap_lock_turret_onto_target(param_00) +{ + param_00 setmode("manual"); + wait 0.5; + param_00 setmode("manual_ai"); +} + +//Function Number: 50 +func_1E44(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"); + use_the_turret(param_00); +} + +//Function Number: 51 +pickup_gun(param_00) +{ + self stopuseturret(); + self.turret func_1E55(); +} + +//Function Number: 52 +get_turret_setup_anim(param_00) +{ + var_01 = []; + return var_41[var_01.weaponinfo]; +} + +//Function Number: 53 +run_to_new_spot_and_setup_gun(param_00) +{ + var_01 = self.health; + param_00 endon("turret_deactivate"); + self.mg42 = param_00; + self endon("death"); + self endon("dropped_gun"); + var_02 = get_turret_setup_anim(param_00); + self.turretmodel = "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.turretmodel,level.var_1C8D); + thread turretdeathdetacher(); + 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::exception_exposed_mg42_portable); + common_scripts\utility::clear_exception("move"); + common_scripts\utility::set_exception("cover_crouch",::func_1E4B); + 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::play_sound_in_space("weapon_setup"); + } + + self animscripted("setup_done",param_00.origin,param_00.angles,var_02); + restoredefaults(); + self waittillmatch("end","setup_done"); + param_00 notify("restore_default_drop_pitch"); + param_00 show_turret(); + animscripts/shared::placeweaponon(self.primaryweapon,"right"); + use_the_turret(param_00); + self detach(self.turretmodel,level.var_1C8D); + common_scripts\utility::set_all_exceptions(::animscripts/init::empty); + self notify("bcs_portable_turret_setup"); +} + +//Function Number: 54 +move_to_run_pos() +{ + self setruntopos(self.runpos); +} + +//Function Number: 55 +func_1E4B() +{ + self endon("killanimscript"); + self waittill("death"); +} + +//Function Number: 56 +func_1E4C() +{ + if(!isdefined(self.turret)) + { + return 0; + } + + return self.turret.owner == self; +} + +//Function Number: 57 +func_1E4D() +{ + if(!func_1E4C()) + { + common_scripts\utility::clear_exception("move"); + return; + } + + var_00 = find_connected_turrets("connected"); + var_01 = var_00["spots"]; + if(!var_01.size) + { + common_scripts\utility::clear_exception("move"); + return; + } + + var_02 = self.node; + if(!isdefined(var_02) || !maps\_utility::func_1E4E(var_01,var_02)) + { + var_03 = func_1E50(); + for(var_04 = 0;var_04 < var_01.size;var_04++) + { + var_02 = common_scripts\utility::random(var_01); + if(isdefined(var_03[var_02.origin + ""])) + { + return; + } + } + } + + var_05 = var_02.turret; + if(isdefined(var_05.var_1DF4)) + { + return; + } + + func_1E5C(var_05); + if(var_05.issetup) + { + func_1E44(var_05); + } + else + { + run_to_new_spot_and_setup_gun(var_05); + } + + maps\_mg_penetration::gunner_think(var_02.turret); +} + +//Function Number: 58 +use_the_turret(param_00) +{ + var_01 = self useturret(param_00); + if(var_01) + { + common_scripts\utility::set_exception("move",::func_1E4D); + self.turret = param_00; + thread mg42_firing(param_00); + param_00 setmode("manual_ai"); + param_00 thread func_1E3C(); + self.turret = param_00; + param_00.owner = self; + return 1; + } + + param_00 restoredefaultdroppitch(); + return 0; +} + +//Function Number: 59 +func_1E4F(param_00) +{ + var_01 = []; + var_41 = maps\_utility::array_randomize(var_41); + for(var_02 = 0;var_02 < var_41.size;var_02++ = var_41["spot"]) + { + var_03 = [[ var_41[var_02] ]](var_01); + if(!isdefined(var_03["spots"])) + { + continue; + } + + return var_03; + } +} + +//Function Number: 60 +func_1E50() +{ + 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.shared_portable_turrets; + var_02 = []; + var_03 = getarraykeys(var_01); + var_04 = func_1E50(); + 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_1DEB + "" != var_07[var_08]) + { + continue; + } + + if(isdefined(var_01[var_06].var_1DF4)) + { + 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 = []; + return var_41; +} + +//Function Number: 62 +find_good_ambush_spot(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) + { + return; + } + + var_03 = []; + for(var_04 = 0;var_04 < var_02.size;var_04++) + { + if(!maps\_utility::within_fov(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 +portable_mg_spot() +{ + func_1E33(); + var_00 = 1; + self.issetup = 1; + self.var_1DF4 = undefined; + if(isdefined(self.var_1E31)) + { + return; + } + + if(self.spawnflags & var_00) + { + return; + } + + func_1E55(); +} + +//Function Number: 65 +func_1E55() +{ + self notify("stop_checking_for_flanking"); + self.issetup = 0; + self hide(); + self.solid = 0; + self makeunusable(); + self setdefaultdroppitch(0); + thread func_1E37(); +} + +//Function Number: 66 +show_turret() +{ + self show(); + self.solid = 1; + self makeusable(); + self.issetup = 1; + thread func_1E58(); +} + +//Function Number: 67 +func_1E58() +{ + self endon("stop_checking_for_flanking"); + self waittill("turret_deactivate"); + if(isalive(self.owner)) + { + self.owner notify("end_mg_behavior"); + } +} + +//Function Number: 68 +func_1E59(param_00) +{ + var_01 = param_00 getturretowner(); + if(!isdefined(var_01)) + { + return 0; + } + + return var_01 == self; +} + +//Function Number: 69 +func_1E5A(param_00) +{ + waittill_turret_is_released(param_00); + param_00.var_1DF4 = undefined; +} + +//Function Number: 70 +waittill_turret_is_released(param_00) +{ + param_00 endon("turret_deactivate"); + self endon("death"); + self waittill("end_mg_behavior"); +} + +//Function Number: 71 +func_1E5C(param_00) +{ + param_00.var_1DF4 = self; + thread func_1E5A(param_00); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_missions.gsc b/MW3/Xbox/SP/maps/_missions.gsc new file mode 100644 index 0000000..21898a0 --- /dev/null +++ b/MW3/Xbox/SP/maps/_missions.gsc @@ -0,0 +1,320 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_missions.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 17 + * Decompile Time: 296 ms + * Timestamp: 10/27/2023 2:32:33 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + foreach(var_01 in level.players) + { + var_01 initnotifymessage(); + } +} + +//Function Number: 2 +monitor_challenges() +{ +} + +//Function Number: 3 +challenge_targetval(param_00,param_01,param_02) +{ + var_03 = tablelookup(param_00,0,param_01,6 + param_02 - 1 * 2); + return int(var_03); +} + +//Function Number: 4 +challenge_rewardval(param_00,param_01,param_02) +{ + var_03 = tablelookup(param_00,0,param_01,7 + param_02 - 1 * 2); + return int(var_03); +} + +//Function Number: 5 +getchallengestatus(param_00) +{ + if(isdefined(self.challengedata[param_00])) + { + return self.challengedata[param_00]; + } + + return 0; +} + +//Function Number: 6 +ch_getprogress(param_00) +{ + return self getplayerdata("challengeProgress",param_00); +} + +//Function Number: 7 +ch_getstate(param_00) +{ + return self getplayerdata("challengeState",param_00); +} + +//Function Number: 8 +ch_setprogress(param_00,param_01) +{ + return self setplayerdata("challengeProgress",param_00,param_01); +} + +//Function Number: 9 +ch_setstate(param_00,param_01) +{ + return self setplayerdata("challengeState",param_00,param_01); +} + +//Function Number: 10 +ch_gettarget(param_00,param_01) +{ + return int(tablelookup("sp/allChallengesTable.csv",0,param_00,6 + param_01 - 1 * 2)); +} + +//Function Number: 11 +func_0E7B(param_00,param_01) +{ + var_02 = 0; + var_03 = tablelookupbyrow(param_00,0,0); + for(var_04 = 1;var_03 != "";var_04++) + { + level.challengeinfo[var_03] = []; + level.challengeinfo[var_03]["targetval"] = []; + level.challengeinfo[var_03]["reward"] = []; + level.challengeinfo[var_03]["type"] = param_01; + for(var_05 = 1;var_05 < 11;var_05++) + { + var_06 = challenge_targetval(param_00,var_03,var_05); + var_07 = challenge_rewardval(param_00,var_03,var_05); + if(var_06 == 0) + { + break; + } + + level.challengeinfo[var_03]["targetval"][var_05] = var_06; + level.challengeinfo[var_03]["reward"][var_05] = var_07; + var_02 = var_02 + var_07; + } + + var_03 = tablelookupbyrow(param_00,var_04,0); + } + + return int(var_02); +} + +//Function Number: 12 +buildchallengeinfo() +{ + level.challengeinfo = []; + var_00 = 0; + var_00 = var_00 + func_0E7B("sp/allchallengesTable.csv",0); + var_01 = tablelookupbyrow("sp/challengeTable.csv",0,4); + for(var_02 = 1;var_01 != "";var_02++) + { + var_03 = tablelookupbyrow(var_01,0,0); + for(var_04 = 1;var_03 != "";var_04++) + { + var_05 = tablelookup(var_01,0,var_03,1); + if(var_05 != "") + { + level.challengeinfo[var_03]["requirement"] = var_05; + } + + var_03 = tablelookupbyrow(var_01,var_04,0); + } + + var_01 = tablelookupbyrow("sp/challengeTable.csv",var_02,4); + } +} + +//Function Number: 13 +challengesplashnotify(param_00) +{ + self endon("disconnect"); + waittillframeend; + wait 0.05; + var_01 = ch_getstate(param_00) - 1; + var_02 = ch_gettarget(param_00,var_01); + if(var_02 == 0) + { + var_02 = 1; + } + + var_03 = spawnstruct(); + var_03.type = "challenge"; + var_03.optionalnumber = var_02; + var_03.name = param_00; + var_03.sound = tablelookup("sp/splashTable.csv",0,var_03.name,9); + var_03.slot = 0; + thread maps\_rank::actionnotify(var_03); +} + +//Function Number: 14 +updatechallenges() +{ + self.challengedata = []; + wait 0.05; + foreach(var_04, var_01 in level.challengeinfo) + { + self.challengedata[var_04] = 0; + if(!self isitemunlocked(var_04)) + { + continue; + } + + if(isdefined(var_01["requirement"]) && !self isitemunlocked(var_01["requirement"])) + { + continue; + } + + var_02 = 0; + var_03 = var_04; + var_02 = ch_getstate(var_04); + if(var_02 == 0) + { + ch_setstate(var_04,1); + var_02 = 1; + } + + self.challengedata[var_04] = var_02; + } +} + +//Function Number: 15 +giverankxpafterwait(param_00,param_01) +{ + self endon("death"); + self endon("disconnect"); + wait 0.25; + maps\_utility::func_E86("challenge",level.challengeinfo[param_00]["reward"][param_01]); +} + +//Function Number: 16 +processchallenge(param_00,param_01,param_02) +{ + if(!isdefined(param_01)) + { + param_01 = 1; + } + + var_03 = getchallengestatus(param_00); + if(var_03 == 0) + { + return; + } + + if(var_03 > level.challengeinfo[param_00]["targetval"].size) + { + return; + } + + var_04 = ch_getprogress(param_00); + if(isdefined(param_02) && param_02) + { + var_05 = param_01; + } + else + { + var_05 = var_05 + param_02; + } + + var_06 = level.challengeinfo[param_00]["targetval"][var_03]; + if(var_05 >= var_06) + { + var_07 = 1; + var_05 = var_06; + } + else + { + var_07 = 0; + } + + if(var_04 < var_05) + { + ch_setprogress(param_00,var_05); + } + + if(var_07) + { + thread giverankxpafterwait(param_00,var_03); + var_03++; + ch_setstate(param_00,var_03); + self.challengedata[param_00] = var_03; + thread challengesplashnotify(param_00); + } +} + +//Function Number: 17 +initnotifymessage() +{ + if(maps\_utility::func_E89()) + { + var_00 = 2.5; + var_01 = 1.75; + var_02 = 24; + var_03 = "objective"; + var_04 = "TOP"; + var_05 = "BOTTOM"; + var_06 = 30; + var_07 = 0; + } + else + { + var_00 = 2.5; + var_01 = 1.75; + var_02 = 30; + var_03 = "objective"; + var_04 = "TOP"; + var_05 = "BOTTOM"; + var_06 = 30; + var_07 = 0; + } + + self.notifytitle = maps\_hud_util::createclientfontstring(var_03,var_00); + self.notifytitle maps\_hud_util::setpoint(var_04,undefined,var_07,var_06); + self.notifytitle.glowcolor = (0.2,0.3,0.7); + self.notifytitle.glowalpha = 1; + self.notifytitle.hidewheninmenu = 1; + self.notifytitle.archived = 0; + self.notifytitle.alpha = 0; + self.notifytext = maps\_hud_util::createclientfontstring(var_03,var_01); + self.notifytext maps\_hud_util::setparent(self.notifytitle); + self.notifytext maps\_hud_util::setpoint(var_04,var_05,0,0); + self.notifytext.glowcolor = (0.2,0.3,0.7); + self.notifytext.glowalpha = 1; + self.notifytext.hidewheninmenu = 1; + self.notifytext.archived = 0; + self.notifytext.alpha = 0; + self.notifytext2 = maps\_hud_util::createclientfontstring(var_03,var_01); + self.notifytext2 maps\_hud_util::setparent(self.notifytitle); + self.notifytext2 maps\_hud_util::setpoint(var_04,var_05,0,0); + self.notifytext2.glowcolor = (0.2,0.3,0.7); + self.notifytext2.glowalpha = 1; + self.notifytext2.hidewheninmenu = 1; + self.notifytext2.archived = 0; + self.notifytext2.alpha = 0; + self.notifyicon = maps\_hud_util::createclienticon("white",var_02,var_02); + self.notifyicon maps\_hud_util::setparent(self.notifytext2); + self.notifyicon maps\_hud_util::setpoint(var_04,var_05,0,0); + self.notifyicon.hidewheninmenu = 1; + self.notifyicon.archived = 0; + self.notifyicon.alpha = 0; + self.doingnotify = 0; + self.var_E8F = []; + self.doingsplash = []; + self.doingsplash[0] = undefined; + self.doingsplash[1] = undefined; + self.doingsplash[2] = undefined; + self.doingsplash[3] = undefined; + self.splashqueue = []; + self.splashqueue[0] = []; + self.splashqueue[1] = []; + self.splashqueue[2] = []; + self.splashqueue[3] = []; +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_mortar.gsc b/MW3/Xbox/SP/maps/_mortar.gsc new file mode 100644 index 0000000..98668a4 --- /dev/null +++ b/MW3/Xbox/SP/maps/_mortar.gsc @@ -0,0 +1,1645 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_mortar.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 44 + * Decompile Time: 740 ms + * Timestamp: 10/27/2023 2:34:29 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ +} + +//Function Number: 2 +func_3C11() +{ + var_00 = getentarray("mortar","targetname"); + var_01 = -1; + for(var_02 = 0;var_02 < var_00.size;var_02++) + { + var_00[var_02] func_3C4A(); + } + + if(!isdefined(level.var_3C12)) + { + common_scripts\utility::error("level.mortar not defined. define in level script"); + } + + level waittill("start_mortars"); + for(;;) + { + wait 1 + randomfloat(2); + var_03 = randomint(var_00.size); + for(var_02 = 0;var_02 < var_00.size;var_02++) + { + var_04 = var_02 + var_03 % var_00.size; + var_05 = distance(level.player getorigin(),var_00[var_04].origin); + var_06 = undefined; + if(isdefined(level.var_3C13)) + { + var_06 = distance(level.var_3C13.origin,var_00[var_04].origin); + } + else + { + var_06 = 360; + } + + if(var_05 < 1600 && var_05 > 400 && var_06 > 350 && var_04 != var_01) + { + var_00[var_04] activate_mortar(400,300,25,undefined,undefined,undefined,0); + var_01 = var_04; + if(var_05 < 500) + { + maps\_shellshock::main(4); + } + + break; + } + } + } +} + +//Function Number: 3 +railyard_style(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A) +{ + if(!isdefined(param_00)) + { + param_00 = 7; + } + + if(!isdefined(param_01)) + { + param_01 = 2200; + } + + if(!isdefined(param_02)) + { + param_02 = 300; + } + + if(!isdefined(level.istopbarrage)) + { + level.istopbarrage = 0; + } + + if(!isdefined(param_09)) + { + param_09 = 0; + } + + var_0B = getentarray("mortar","targetname"); + var_0C = -1; + for(var_0D = 0;var_0D < var_0B.size;var_0D++) + { + if(isdefined(var_0B[var_0D].target) && param_09 == 0) + { + var_0B[var_0D] func_3C4A(); + } + } + + if(!isdefined(level.var_3C12)) + { + common_scripts\utility::error("level.mortar not defined. define in level script"); + } + + if(isdefined(level.var_3C16)) + { + level waittill(level.var_3C16); + } + + for(;;) + { + if(level.istopbarrage != 0) + { + wait 1; + } + + while(level.istopbarrage == 0) + { + if(isdefined(param_0A)) + { + wait param_0A + randomfloat(param_00) + randomfloat(param_00); + } + else + { + wait randomfloat(param_00) + randomfloat(param_00); + } + + var_0E = randomint(var_0B.size); + for(var_0D = 0;var_0D < var_0B.size;var_0D++) + { + var_0F = var_0D + var_0E % var_0B.size; + var_10 = distance(level.player getorigin(),var_0B[var_0F].origin); + if(var_10 < param_01 && var_10 > param_02 && var_0F != var_0C) + { + var_0B[var_0F] activate_mortar(param_03,param_04,param_05,param_06,param_07,param_08,0); + var_0C = var_0F; + break; + } + } + } + } +} + +//Function Number: 4 +func_3C17() +{ + var_00 = []; + var_01 = []; + level.mortars = []; + var_02 = getentarray("script_model","classname"); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + if(isdefined(var_02[var_03].var_3C19)) + { + if(!isdefined(level.mortars[var_02[var_03].var_3C19])) + { + level.mortars[var_02[var_03].var_3C19] = []; + } + + var_04 = spawnstruct(); + var_04.origin = var_02[var_03].origin; + var_04.angles = var_02[var_03].angles; + if(isdefined(var_02[var_03].targetname)) + { + var_04.targetname = var_02[var_03].targetname; + } + + if(isdefined(var_02[var_03].target)) + { + var_04.target = var_02[var_03].target; + } + + level.mortars[var_02[var_03].var_3C19][level.mortars[var_02[var_03].var_3C19].size] = var_04; + var_02[var_03] delete(); + } + } + + for(var_03 = 0;var_03 < var_00.size;var_03++) + { + var_00[var_03] hide(); + var_00[var_03].var_3C1A = 0; + } + + if(!isdefined(level.var_3C12)) + { + level.var_3C12 = loadfx("explosions/artilleryExp_dirt_brown"); + } + + var_05 = common_scripts\utility::array_combine(getentarray("trigger_multiple","classname"),getentarray("trigger_radius","classname")); + for(var_03 = 0;var_03 < var_05.size;var_03++) + { + if(isdefined(var_05[var_03].var_3C19)) + { + if(!isdefined(level.mortars[var_05[var_03].var_3C19])) + { + level.mortars[var_05[var_03].var_3C19] = []; + } + + var_01[var_01.size] = var_05[var_03]; + } + } + + for(var_03 = 0;var_03 < var_01.size;var_03++) + { + var_01[var_03].var_3C1B = 0; + var_01[var_03] thread script_mortargroup_mortar_group(); + } + + var_06 = undefined; + for(;;) + { + level waittill("mortarzone",var_07); + if(isdefined(var_06)) + { + var_06 notify("wait again"); + } + + level.var_3C1C = var_07.var_3C19; + var_07 thread func_3C1D(); + var_06 = var_07; + } +} + +//Function Number: 5 +func_3C1D() +{ + var_00 = []; + var_01 = gettime(); + var_02 = 0; + if(isdefined(self.script_timer)) + { + level notify("timed barrage"); + var_01 = gettime() + self.script_timer * 1000; + var_02 = 1; + } + + if(isdefined(self.script_radius)) + { + var_03 = self.script_radius; + } + else + { + var_03 = 0; + } + + if(isdefined(self.script_delay_min) && isdefined(self.script_delay_max)) + { + var_04 = 1; + } + else + { + var_04 = 0; + } + + var_05 = 0; + var_06 = 2; + var_07 = 4; + var_08 = 0; + while((level.mortars[self.var_3C19].size > 0 && level.var_3C1C == self.var_3C19) || var_02) + { + if(var_04) + { + wait randomfloat(self.script_delay_max - self.script_delay_min) + self.script_delay_min; + } + else if(var_08) + { + if(var_05 < var_07) + { + wait randomfloat(0.5); + var_05++; + } + else + { + var_05 = 0; + var_07 = 2 + randomint(4); + var_08 = 0; + continue; + } + } + else if(var_05 < var_06) + { + var_09 = randomfloat(2) + 1; + wait var_09; + var_05++; + } + else + { + var_06 = 0; + var_0A = 1; + var_07 = randomint(2) + 3; + continue; + } + + var_0A = []; + var_0B = randomint(level.mortars[self.var_3C19].size); + if(randomint(100) < 75) + { + var_0C = anglestoforward(level.player.angles); + var_0D = []; + for(var_0E = 0;var_0E < level.mortars[self.var_3C19].size;var_0E++) + { + if(var_03 > 0 && distance(level.player.origin,level.mortars[self.var_3C19][var_0E].origin) > var_03) + { + continue; + } + + if(func_3C1F(level.mortars[self.var_3C19][var_0E],var_00)) + { + continue; + } + + var_0F = vectornormalize(level.mortars[self.var_3C19][var_0E].origin - level.player.origin); + if(vectordot(var_0C,var_0F) > 0.3) + { + var_0D[var_0D.size] = var_0E; + } + } + + if(var_0D.size > 0) + { + var_0B = var_0D[randomint(var_0D.size)]; + } + } + + if(var_00.size > 3) + { + var_00 = []; + } + + var_00[var_00.size] = level.mortars[self.var_3C19][var_0B]; + level.mortars[self.var_3C19][var_0B] thread func_3C20(); + if(var_02 && gettime() > var_01) + { + if(isdefined(self.target)) + { + var_10 = getent(self.target,"targetname"); + if(isdefined(var_10)) + { + var_10 notify("trigger"); + level notify("timed barrage finished"); + } + } + + break; + } + } +} + +//Function Number: 6 +func_3C1F(param_00,param_01) +{ + for(var_02 = 0;var_02 < param_01.size;var_02++) + { + if(param_00 == param_01[var_02]) + { + return 1; + } + } + + return 0; +} + +//Function Number: 7 +func_3C20() +{ + if(isdefined(self.targetname) && isdefined(level.mortarthread[self.targetname])) + { + level thread [[ level.mortarthread[self.targetname] ]](self); + } + else + { + thread activate_mortar(undefined,undefined,undefined,undefined,undefined,undefined,1); + } + + self waittill("mortar"); + if(isdefined(self.target)) + { + var_00 = getent(self.target,"targetname"); + if(isdefined(var_00)) + { + var_00 notify("trigger"); + } + } +} + +//Function Number: 8 +script_mortargroup_mortar_group() +{ + for(;;) + { + self waittill("trigger"); + if(isdefined(level.var_3C1C) && level.var_3C1C == self.var_3C19) + { + continue; + } + + level notify("mortarzone",self); + self waittill("wait again"); + } +} + +//Function Number: 9 +func_3C23() +{ + level.var_3C24 = getentarray("mortartrigger","targetname"); + level.mortars = getentarray("script_origin","classname"); + for(var_00 = 0;var_00 < level.mortars.size;var_00++) + { + if(isdefined(level.mortars[var_00].var_3C19)) + { + level.mortars[var_00] func_3C4A(); + } + } + + level.var_3C25 = -1; + if(!isdefined(level.var_3C12)) + { + common_scripts\utility::error("level.mortar not defined. define in level script"); + } + + for(var_00 = 0;var_00 < level.var_3C24.size;var_00++) + { + thread func_3C26(var_00); + } +} + +//Function Number: 10 +func_3C26(param_00) +{ + var_01 = getentarray(level.var_3C24[param_00].target,"targetname"); + for(;;) + { + if(level.player istouching(level.var_3C24[param_00])) + { + var_02 = randomint(var_01.size); + while(var_02 == level.var_3C25) + { + var_02 = randomint(var_01.size); + wait 0.1; + } + + var_01[var_02] activate_mortar(undefined,undefined,undefined,undefined,undefined,undefined,0); + level.var_3C25 = var_02; + } + + wait randomfloat(3) + randomfloat(4); + } +} + +//Function Number: 11 +bunker_style_mortar() +{ + var_00 = []; + var_01 = undefined; + var_02 = []; + var_03 = common_scripts\utility::getstructarray("mortar_bunker","targetname"); + var_04 = getentarray("mortar_bunker","targetname"); + if(isdefined(var_04) && var_04.size > 0) + { + var_01 = maps\_utility::array_merge(var_03,var_04); + } + else + { + var_01 = var_03; + } + + for(var_05 = 0;var_05 < var_01.size;var_05++) + { + if(!isdefined(var_01[var_05].var_3C19)) + { + continue; + } + + var_06 = -1; + var_07 = int(var_01[var_05].var_3C19); + for(var_08 = 0;var_08 < var_00.size;var_08++) + { + if(var_07 != var_02[var_08]) + { + continue; + } + + var_06 = var_08; + break; + } + + if(var_06 == -1) + { + var_00[var_00.size] = []; + var_02[var_02.size] = var_07; + var_06 = var_00.size - 1; + } + + var_00[var_06][var_00[var_06].size] = var_01[var_05]; + } + + for(var_05 = 0;var_05 < var_00.size;var_05++) + { + thread func_3C28(var_00[var_05],var_03); + } + + wait 0.05; + common_scripts\utility::array_thread(getentarray("mortar_on","targetname"),::func_3C48,"on"); + common_scripts\utility::array_thread(getentarray("mortar_off","targetname"),::func_3C48,"off"); +} + +//Function Number: 12 +func_3C28(param_00,param_01) +{ + var_02 = undefined; + var_03 = undefined; + if(isdefined(level.var_3C29)) + { + var_02 = level.var_3C29; + } + else + { + var_02 = 4; + } + + if(isdefined(level.var_3C2A)) + { + var_03 = level.var_3C2A; + } + else + { + var_03 = 6; + } + + var_04 = int(param_00[0].var_3C19); + for(;;) + { + level waittill("start_mortars " + var_04); + thread bunker_style_mortar_activate(param_00,var_02,var_03,var_04,param_01); + } +} + +//Function Number: 13 +bunker_style_mortar_activate(param_00,param_01,param_02,param_03,param_04) +{ + level endon("start_mortars " + param_03); + level endon("stop_mortars " + param_03); + for(;;) + { + wait 0.05; + var_05 = maps\_utility::getclosest(level.player.origin,param_04); + if(!isdefined(level.mortarnoincomingsound)) + { + common_scripts\utility::play_sound_in_space("mortar_incoming_bunker",var_05.origin); + } + + var_05 = maps\_utility::getclosest(level.player.origin,param_04); + thread common_scripts\utility::play_sound_in_space("exp_artillery_underground",var_05.origin); + common_scripts\utility::array_thread(param_00,::bunker_style_mortar_explode); + if(!isdefined(level.mortarnoquake)) + { + if(common_scripts\utility::cointoss()) + { + earthquake(0.2,1.5,var_05.origin,1250); + } + else + { + earthquake(0.35,2.75,var_05.origin,1250); + } + } + + level notify("mortar_hit"); + wait randomfloatrange(param_01,param_02); + param_00 = common_scripts\utility::array_removeundefined(param_00); + } +} + +//Function Number: 14 +bunker_style_mortar_explode(param_00,param_01) +{ + if(!isdefined(self)) + { + return; + } + + if(isdefined(level.var_3C2F) && mortar_within_player_fov(level.var_3C2F) == 0) + { + return; + } + + if(isdefined(level.var_195B)) + { + var_02 = level.var_195B; + } + else + { + var_02 = 1024; + } + + var_03 = var_02 * var_02; + var_04 = distancesquared(level.player.origin,self.origin); + if(var_04 > var_03) + { + return; + } + + if(isdefined(self.classname) && self.classname == "trigger_radius") + { + if(!level.player istouching(self) && distance(level.player.origin,self.origin) < level.var_3C30) + { + radiusdamage(self.origin,self.radius,500,500); + self delete(); + return; + } + + return; + } + + playfx(level._effect["mortar"][self.script_fxid],self.origin); + if(var_04 < 262144) + { + thread common_scripts\utility::play_sound_in_space("emt_single_ceiling_debris",self.origin); + } +} + +//Function Number: 15 +func_3C31() +{ + var_00 = []; + var_01 = []; + var_02 = maps\_utility::getstructarray_delete("mortar","targetname"); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + if(!isdefined(var_02[var_03].var_3C19)) + { + continue; + } + + var_04 = -1; + var_05 = int(var_02[var_03].var_3C19); + for(var_06 = 0;var_06 < var_00.size;var_06++) + { + if(var_05 != var_01[var_06]) + { + continue; + } + + var_04 = var_06; + break; + } + + if(var_04 == -1) + { + var_00[var_00.size] = []; + var_01[var_01.size] = var_05; + var_04 = var_00.size - 1; + } + + var_00[var_04][var_00[var_04].size] = var_02[var_03]; + } + + for(var_03 = 0;var_03 < var_00.size;var_03++) + { + thread bog_style_mortar_think(var_00[var_03]); + } + + wait 0.05; + common_scripts\utility::array_thread(getentarray("mortar_on","targetname"),::func_3C42,"on"); + common_scripts\utility::array_thread(getentarray("mortar_off","targetname"),::func_3C42,"off"); +} + +//Function Number: 16 +bog_style_mortar_think(param_00,param_01) +{ + var_02 = undefined; + var_03 = undefined; + if(isdefined(level.var_3C29)) + { + var_02 = level.var_3C29; + } + else + { + var_02 = 0.5; + } + + if(isdefined(level.var_3C2A)) + { + var_03 = level.var_3C2A; + } + else + { + var_03 = 3; + } + + param_01 = int(param_00[0].var_3C19); + for(;;) + { + level waittill("start_mortars " + param_01); + level thread func_3C34(param_00,param_01,var_02,var_03); + if(isdefined(level.bogmortarsgoonce)) + { + return; + } + } +} + +//Function Number: 17 +func_3C34(param_00,param_01,param_02,param_03) +{ + level endon("start_mortars " + param_01); + level endon("stop_mortars " + param_01); + if(isdefined(level.var_195B)) + { + var_04 = level.var_195B; + } + else + { + var_04 = 300; + } + + var_05 = spawn("trigger_radius",(0,0,0),0,var_04,256); + thread bog_style_mortar_cleanup(var_05,param_01); + for(;;) + { + for(;;) + { + wait 0.05; + var_06 = randomint(param_00.size); + if(isdefined(param_00[var_06].var_3C35)) + { + continue; + } + + var_07 = distance(level.player.origin,param_00[var_06].origin); + if(var_07 < var_04) + { + continue; + } + + if(isdefined(level.var_3C36) && level.var_3C36.size > 0) + { + var_05.origin = param_00[var_06].origin; + if(func_3C3B(level.var_3C36,var_05)) + { + continue; + } + } + + if(!isdefined(level.nomaxmortardist) && var_07 > 1000) + { + continue; + } + + if(isdefined(level.mortar_max_dist) && var_07 > level.mortar_max_dist) + { + continue; + } + + if(isdefined(level.var_3C2F) && param_00[var_06] mortar_within_player_fov(level.var_3C2F) == 0) + { + continue; + } + + break; + } + + if(isdefined(level.nomortars) && level.nomortars == 1) + { + return; + } + + param_00[var_06] thread func_3C3E(); + wait param_02 + randomfloat(param_03 - param_02); + } +} + +//Function Number: 18 +bog_style_mortar_cleanup(param_00,param_01) +{ + level waittill("stop_mortars " + param_01); + param_00 delete(); +} + +//Function Number: 19 +func_3C3B(param_00,param_01) +{ + foreach(var_03 in level.var_3C36) + { + if(!isalive(var_03)) + { + continue; + } + + if(!isdefined(var_03)) + { + continue; + } + + if(var_03 istouching(param_01)) + { + return 1; + } + } + + return 0; +} + +//Function Number: 20 +mortar_within_player_fov(param_00) +{ + var_01 = level.player geteye(); + var_02 = (0,0,0); + if(isdefined(level.playermortarfovoffset)) + { + var_02 = level.playermortarfovoffset; + } + + var_03 = maps\_utility::within_fov(var_01,level.player getplayerangles() + var_02,self.origin,param_00); + return var_03; +} + +//Function Number: 21 +func_3C3E(param_00,param_01) +{ + if(!isdefined(level.var_3C3F)) + { + level.var_3C3F = 250; + } + + if(!isdefined(param_00)) + { + param_00 = 0; + } + + thread func_3C41(); + if(!param_00) + { + common_scripts\utility::play_sound_in_space(level.scr_sound["mortar"]["incomming"]); + } + + if(isdefined(param_01)) + { + thread common_scripts\utility::play_sound_in_space(param_01); + } + else + { + thread common_scripts\utility::play_sound_in_space(level.scr_sound["mortar"][self.script_fxid]); + } + + setplayerignoreradiusdamage(1); + radiusdamage(self.origin,level.var_3C3F,150,50); + setplayerignoreradiusdamage(0); + playfx(level._effect["mortar"][self.script_fxid],self.origin); + if(isdefined(level.var_3C40)) + { + earthquake(0.3,1,level.player.origin,2000); + } + + if(getdvarint("bog_camerashake") > 0) + { + if(level.player getcurrentweapon() == "dragunov" && level.player playerads() > 0.8) + { + return; + } + + earthquake(0.25,0.75,self.origin,1250); + } +} + +//Function Number: 22 +func_3C41() +{ + self.var_3C35 = 1; + wait 3 + randomfloat(2); + self.var_3C35 = undefined; +} + +//Function Number: 23 +func_3C42(param_00) +{ + self waittill("trigger"); + if(param_00 == "on") + { + func_3C43(self.var_3C19); + return; + } + + if(param_00 == "off") + { + bog_style_mortar_off(self.var_3C19); + } +} + +//Function Number: 24 +func_3C43(param_00) +{ + level notify("start_mortars " + param_00); +} + +//Function Number: 25 +bog_style_mortar_off(param_00) +{ + level notify("stop_mortars " + param_00); +} + +//Function Number: 26 +func_3C45(param_00) +{ + if(!isdefined(level.var_3C30)) + { + level.var_3C30 = 512; + } + + if(!isdefined(level.var_3C2F)) + { + level.var_3C2F = cos(35); + } + + level notify("start_mortars " + param_00); +} + +//Function Number: 27 +func_3C46(param_00) +{ + level waittill("mortar_hit"); + level notify("stop_mortars " + param_00); +} + +//Function Number: 28 +func_3C47(param_00) +{ + level notify("stop_mortars " + param_00); +} + +//Function Number: 29 +func_3C48(param_00) +{ + self waittill("trigger"); + if(param_00 == "on") + { + func_3C45(self.var_3C19); + return; + } + + if(param_00 == "off") + { + func_3C46(self.var_3C19); + } +} + +//Function Number: 30 +func_3C49() +{ + level endon("stop falling mortars"); + func_3C4A(); + wait randomfloat(0.5) + randomfloat(0.5); + for(;;) + { + if(distance(level.player getorigin(),self.origin) < 600) + { + activate_mortar(undefined,undefined,undefined,undefined,undefined,undefined,0); + break; + } + + wait 1; + } + + wait 7 + randomfloat(20); + for(;;) + { + if(distance(level.player getorigin(),self.origin) < 1200 && distance(level.player getorigin(),self.origin) > 400) + { + activate_mortar(undefined,undefined,undefined,undefined,undefined,undefined,0); + wait 3 + randomfloat(14); + } + + wait 1; + } +} + +//Function Number: 31 +func_3C4A() +{ + self.var_3C1A = 0; + if(isdefined(self.target)) + { + self.var_3C4B = getentarray(self.target,"targetname"); + self.var_3C1A = 1; + } + else + { + } + + if(!isdefined(self.var_3C4B)) + { + } + + if(isdefined(self.var_3C4C)) + { + if(isdefined(self.var_3C4C)) + { + self.var_3C4D = getent(self.var_3C4C,"targetname"); + } + else if(isdefined(self.var_3C4B) && isdefined(self.var_3C4B[0].target)) + { + self.var_3C4D = getent(self.var_3C4B[0].target,"targetname"); + } + + if(isdefined(self.var_3C4D)) + { + self.var_3C4D hide(); + return; + } + + return; + } + + if(isdefined(self.var_3C1A)) + { + if(isdefined(self.var_3C4B) && isdefined(self.var_3C4B[0].target)) + { + self.var_3C4D = getent(self.var_3C4B[0].target,"targetname"); + } + + if(isdefined(self.var_3C4D)) + { + self.var_3C4D hide(); + return; + } + } +} + +//Function Number: 32 +activate_mortar(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + func_3C53(undefined,param_06); + level notify("mortar"); + self notify("mortar"); + if(!isdefined(param_00)) + { + param_00 = 256; + } + + if(!isdefined(param_01)) + { + param_01 = 400; + } + + if(!isdefined(param_02)) + { + param_02 = 25; + } + + radiusdamage(self.origin,param_00,param_01,param_02); + if(isdefined(self.var_3C1A) && self.var_3C1A == 1 && isdefined(self.var_3C4B)) + { + for(var_07 = 0;var_07 < self.var_3C4B.size;var_07++) + { + if(isdefined(self.var_3C4B[var_07])) + { + self.var_3C4B[var_07] delete(); + } + } + } + + if(isdefined(self.var_3C4D)) + { + self.var_3C4D show(); + } + + self.var_3C1A = 0; + func_3C4F(self.origin,param_03,param_04,param_05,undefined,param_06); +} + +//Function Number: 33 +func_3C4F(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if(!isdefined(param_01)) + { + param_01 = 0.15; + } + + if(!isdefined(param_02)) + { + param_02 = 2; + } + + if(!isdefined(param_03)) + { + param_03 = 850; + } + + thread func_3C51(param_05); + if(isdefined(param_04)) + { + playfx(param_04,param_00); + } + else + { + playfx(level.var_3C12,param_00); + } + + earthquake(param_01,param_02,param_00,param_03); + if(level.script != "burnville") + { + return; + } + + if(isdefined(level.var_3C50)) + { + return; + } + + if(distance(level.player.origin,param_00) > 300) + { + return; + } + + if(level.script == "carchase" || level.script == "breakout") + { + return; + } + + level.var_3C50 = 1; + level notify("shell shock player",param_02 * 4); + maps\_shellshock::main(param_02 * 4); +} + +//Function Number: 34 +func_3C51(param_00) +{ + if(!isdefined(level.var_3C52)) + { + level.var_3C52 = -1; + } + + for(var_01 = randomint(3) + 1;var_01 == level.var_3C52;var_01 = randomint(3) + 1) + { + } + + level.var_3C52 = var_01; + if(!param_00) + { + self playsound("mortar_explosion" + var_01); + return; + } + + common_scripts\utility::play_sound_in_space("mortar_explosion" + var_01,self.origin); +} + +//Function Number: 35 +func_3C53(param_00,param_01) +{ + var_02 = gettime(); + if(!isdefined(level.var_3C54)) + { + level.var_3C54 = var_02; + } + else if(var_02 - level.var_3C54 < 1000) + { + wait 1; + return; + } + else + { + level.var_3C54 = var_02; + } + + if(!isdefined(param_00)) + { + param_00 = randomint(3) + 1; + } + + if(param_00 == 1) + { + if(param_01) + { + thread common_scripts\utility::play_sound_in_space("mortar_incoming1",self.origin); + } + else + { + self playsound("mortar_incoming1"); + } + + wait 0.8200001; + return; + } + + if(param_00 == 2) + { + if(param_01) + { + thread common_scripts\utility::play_sound_in_space("mortar_incoming2",self.origin); + } + else + { + self playsound("mortar_incoming2"); + } + + wait 0.42; + return; + } + + if(param_01) + { + thread common_scripts\utility::play_sound_in_space("mortar_incoming3",self.origin); + } + else + { + self playsound("mortar_incoming3"); + } + + wait 1.3; +} + +//Function Number: 36 +func_3C55() +{ + level.var_3C56 = []; + level._explosion_iminrange = []; + level.var_3C58 = []; + level._explosion_idamagemax = []; + level.var_3C5A = []; + level._explosion_fquakepower = []; + level.var_3C5C = []; + level.var_3C5D = []; +} + +//Function Number: 37 +generic_style_setradius(param_00,param_01,param_02) +{ + level._explosion_iminrange[param_00] = param_01; + level.var_3C56[param_00] = param_02; +} + +//Function Number: 38 +generic_style_setdamage(param_00,param_01,param_02,param_03) +{ + level.var_3C58[param_00] = param_01; + level.var_3C5A[param_00] = param_02; + level._explosion_idamagemax[param_00] = param_03; +} + +//Function Number: 39 +generic_style_setquake(param_00,param_01,param_02,param_03) +{ + level._explosion_fquakepower[param_00] = param_01; + level.var_3C5C[param_00] = param_02; + level.var_3C5D[param_00] = param_03; +} + +//Function Number: 40 +func_3C61(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + var_07 = -1; + var_08 = param_05; + var_09 = param_04; + generic_style_setradius(param_00,300,2200); + if(!isdefined(param_01)) + { + param_01 = 7; + } + + if(!isdefined(param_02)) + { + param_02 = 1; + } + + if(!isdefined(param_03)) + { + param_03 = 0; + } + + if(!isdefined(param_06)) + { + param_06 = 0; + } + + if(isdefined(level.explosion_stopnotify) && isdefined(level.explosion_stopnotify[param_00])) + { + level endon(level.explosion_stopnotify[param_00]); + } + + if(!isdefined(level.bstopbarrage) || !isdefined(level.bstopbarrage[param_00])) + { + level.bstopbarrage[param_00] = 0; + } + + var_0A = getentarray(param_00,"targetname"); + for(var_0B = 0;var_0B < var_0A.size;var_0B++) + { + if(isdefined(var_0A[var_0B].target) && !param_06) + { + var_0A[var_0B] func_3C4A(); + } + } + + if(isdefined(level.var_3C64) && isdefined(level.var_3C64[param_00])) + { + level waittill(level.var_3C64[param_00]); + } + + for(;;) + { + while(!level.bstopbarrage[param_00]) + { + for(var_0C = 0;var_0C < param_02;var_0C++) + { + if(!isdefined(param_05)) + { + var_08 = level.var_3C56[param_00]; + } + + if(!isdefined(param_04)) + { + var_09 = level._explosion_iminrange[param_00]; + } + + var_0D = randomint(var_0A.size); + for(var_0B = 0;var_0B < var_0A.size;var_0B++) + { + var_0E = var_0B + var_0D % var_0A.size; + var_0F = distance(level.player getorigin(),var_0A[var_0E].origin); + if(var_0F < var_08 && var_0F > var_09 && var_0E != var_07) + { + var_0A[var_0E].iminrange = var_09; + var_0A[var_0E] explosion_activate(param_00); + var_07 = var_0E; + break; + } + } + + var_07 = -1; + if(isdefined(level.explosion_delay) && isdefined(level.explosion_delay[param_00])) + { + wait level.explosion_delay[param_00]; + continue; + } + + wait randomfloat(param_01) + randomfloat(param_01); + } + + if(isdefined(level.explosion_barrage_delay) && isdefined(level.explosion_barrage_delay[param_00])) + { + wait level.explosion_barrage_delay[param_00]; + continue; + } + + wait randomfloat(param_03) + randomfloat(param_03); + } + + wait 0.05; + } +} + +//Function Number: 41 +explosion_activate(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + generic_style_setdamage(param_00,256,25,400); + generic_style_setquake(param_00,0.15,2,850); + if(!isdefined(param_01)) + { + param_01 = level.var_3C58[param_00]; + } + + if(!isdefined(param_02)) + { + param_02 = level.var_3C5A[param_00]; + } + + if(!isdefined(param_03)) + { + param_03 = level._explosion_idamagemax[param_00]; + } + + if(!isdefined(param_04)) + { + param_04 = level._explosion_fquakepower[param_00]; + } + + if(!isdefined(param_05)) + { + param_05 = level.var_3C5C[param_00]; + } + + if(!isdefined(param_06)) + { + param_06 = level.var_3C5D[param_00]; + } + + func_3C6D(param_00); + level notify("explosion",param_00); + var_07 = 1; + var_08 = undefined; + var_09 = self; + if(isdefined(self.iminrange) && distance(level.player.origin,self.origin) < self.iminrange) + { + var_0A = getentarray(param_00,"targetname"); + for(var_0B = 0;var_0B < var_0A.size;var_0B++) + { + var_0C = distance(level.player getorigin(),var_0A[var_0B].origin); + if(var_0C > self.iminrange) + { + if(!isdefined(var_08) || var_0C < var_08) + { + var_08 = var_0C; + var_09 = var_0A[var_0B]; + } + } + } + + if(!isdefined(var_08)) + { + var_07 = 0; + } + } + + if(var_07) + { + radiusdamage(var_09.origin,param_01,param_03,param_02); + } + + if(isdefined(var_09.var_3C1A) && var_09.var_3C1A == 1 && isdefined(var_09.var_3C4B)) + { + for(var_0D = 0;var_0D < var_09.var_3C4B.size;var_0D++) + { + if(isdefined(var_09.var_3C4B[var_0D])) + { + var_09.var_3C4B[var_0D] delete(); + } + } + } + + if(isdefined(var_09.var_3C4D)) + { + var_09.var_3C4D show(); + } + + var_09.var_3C1A = 0; + var_09 explosion_boom(param_00,param_04,param_05,param_06); +} + +//Function Number: 42 +explosion_boom(param_00,param_01,param_02,param_03) +{ + if(!isdefined(param_01)) + { + param_01 = 0.15; + } + + if(!isdefined(param_02)) + { + param_02 = 2; + } + + if(!isdefined(param_03)) + { + param_03 = 850; + } + + func_3C6A(param_00); + var_04 = self.origin; + playfx(level._effect[param_00],var_04); + earthquake(param_01,param_02,var_04,param_03); + if(distance(level.player.origin,var_04) > 300) + { + return; + } + + if(level.script == "carchase" || level.script == "breakout") + { + return; + } + + level.var_3C50 = 1; + level notify("shell shock player",param_02 * 4); + maps\_shellshock::main(param_02 * 4); +} + +//Function Number: 43 +func_3C6A(param_00) +{ + if(!isdefined(level.var_3C6B)) + { + level.var_3C6B = 0; + } + + for(var_01 = randomint(3) + 1;var_01 == level.var_3C6B;var_01 = randomint(3) + 1) + { + } + + level.var_3C6B = var_01; + if(level._effecttype[param_00] == "mortar") + { + switch(var_01) + { + case 1: + self playsound("mortar_explosion1"); + break; + + case 2: + self playsound("mortar_explosion2"); + break; + + case 3: + self playsound("mortar_explosion3"); + break; + } + + return; + } + + if(level._effecttype[param_00] == "artillery") + { + switch(var_01) + { + case 1: + self playsound("mortar_explosion4"); + break; + + case 2: + self playsound("mortar_explosion5"); + break; + + case 3: + self playsound("mortar_explosion1"); + break; + } + + return; + } + + if(level._effecttype[param_00] == "bomb") + { + switch(var_01) + { + case 1: + self playsound("mortar_explosion1"); + break; + + case 2: + self playsound("mortar_explosion4"); + break; + + case 3: + self playsound("mortar_explosion5"); + break; + } + + return; + } +} + +//Function Number: 44 +func_3C6D(param_00,param_01) +{ + if(!isdefined(level.var_3C6E)) + { + level.var_3C6E = -1; + } + + for(param_01 = randomint(4) + 1;param_01 == level.var_3C6E;param_01 = randomint(4) + 1) + { + } + + level.var_3C6E = param_01; + if(level._effecttype[param_00] == "mortar") + { + switch(param_01) + { + case 1: + self playsound("mortar_incoming1"); + wait 0.8200001; + break; + + case 2: + self playsound("mortar_incoming2"); + wait 0.42; + break; + + case 3: + self playsound("mortar_incoming3"); + wait 1.3; + break; + + default: + wait 1.75; + break; + } + + return; + } + + if(level._effecttype[param_00] == "artillery") + { + switch(param_01) + { + case 1: + self playsound("mortar_incoming4"); + wait 0.8200001; + break; + + case 2: + self playsound("mortar_incoming4_new"); + wait 0.42; + break; + + case 3: + self playsound("mortar_incoming1_new"); + wait 1.3; + break; + + default: + wait 1.75; + break; + } + + return; + } + + if(level._effecttype[param_00] == "bomb") + { + switch(param_01) + { + case 1: + self playsound("mortar_incoming2_new"); + wait 1.75; + break; + + case 2: + self playsound("mortar_incoming3_new"); + wait 1.75; + break; + + case 3: + self playsound("mortar_incoming4_new"); + wait 1.75; + break; + + default: + wait 1.75; + break; + } + + return; + } +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_names.gsc b/MW3/Xbox/SP/maps/_names.gsc new file mode 100644 index 0000000..c9354ed --- /dev/null +++ b/MW3/Xbox/SP/maps/_names.gsc @@ -0,0 +1,831 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_names.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 14 + * Decompile Time: 243 ms + * Timestamp: 10/27/2023 2:34:46 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ +} + +//Function Number: 2 +setup_names() +{ + if(isdefined(level.names)) + { + return; + } + + var_00 = []; + var_01 = 0; + while(var_01 < var_41.size) + { + level.names[var_41[var_01]] = []; + var_01++ = var_41[var_41.size]; + } + + add_name("american","Abbott"); + add_name("american","Abeles"); + add_name("american","Ackrich"); + add_name("american","Alvarez"); + add_name("american","Andaya"); + add_name("american","Andrew"); + add_name("american","Arcovitch"); + add_name("american","Arem"); + add_name("american","Arya"); + add_name("american","Audick"); + add_name("american","Aye"); + add_name("american","Babichenko"); + add_name("american","Baker"); + add_name("american","Bartolucci"); + add_name("american","Beahm"); + add_name("american","Bedi"); + add_name("american","Bein"); + add_name("american","Bell"); + add_name("american","Benitez"); + add_name("american","Berry"); + add_name("american","Blizard"); + add_name("american","Blumel"); + add_name("american","Boon"); + add_name("american","Bowling"); + add_name("american","Boyd"); + add_name("american","Bracamontes"); + add_name("american","Brooks"); + add_name("american","Brown"); + add_name("american","Buchanan"); + add_name("american","Buckles"); + add_name("american","Capen"); + add_name("american","Casey"); + add_name("american","Cecot"); + add_name("american","Centkowski"); + add_name("american","Chan"); + add_name("american","Chang"); + add_name("american","Chen"); + add_name("american","Chew"); + add_name("american","Chu"); + add_name("american","Chyo"); + add_name("american","Cinquegrano"); + add_name("american","Clark"); + add_name("american","Condrey"); + add_name("american","Conteras"); + add_name("american","Cournoyer"); + add_name("american","Curley"); + add_name("american","Daley"); + add_name("american","David"); + add_name("american","Davis"); + add_name("american","DeBolt"); + add_name("american","DeMartini"); + add_name("american","Denny"); + add_name("american","Deonarine"); + add_name("american","DeRidder"); + add_name("american","Desmarais"); + add_name("american","DiMeo"); + add_name("american","Dobbie"); + add_name("american","Dohr"); + add_name("american","Dolan"); + add_name("american","Drinkward"); + add_name("american","Dye"); + add_name("american","Eady"); + add_name("american","Evans"); + add_name("american","Feinberg"); + add_name("american","Felker"); + add_name("american","Field"); + add_name("american","Fong"); + add_name("american","Ganus"); + add_name("american","Gavazza"); + add_name("american","Gavrisheff"); + add_name("american","Gevorkian"); + add_name("american","Giesler"); + add_name("american","Gil"); + add_name("american","Glasco"); + add_name("american","Goldsworthy"); + add_name("american","Griffith"); + add_name("american","Gu"); + add_name("american","Guaman"); + add_name("american","Gunasingam"); + add_name("american","Hall"); + add_name("american","Halon"); + add_name("american","Harmer"); + add_name("american","Harries"); + add_name("american","Harris"); + add_name("american","Haugen"); + add_name("american","Haworth"); + add_name("american","Hazelroth"); + add_name("american","Heath"); + add_name("american","Hirsh"); + add_name("american","Holmes"); + add_name("american","Hook"); + add_name("american","Hudson"); + add_name("american","Imai"); + add_name("american","Jeffries"); + add_name("american","Johnson"); + add_name("american","Katz"); + add_name("american","Keiser"); + add_name("american","Kelvin"); + add_name("american","Kinney"); + add_name("american","Kriegler"); + add_name("american","Kuhn"); + add_name("american","Kuo"); + add_name("american","Kwak"); + add_name("american","Lai"); + add_name("american","Lam"); + add_name("american","Lamperski"); + add_name("american","Lane"); + add_name("american","Leal"); + add_name("american","Lee"); + add_name("american","Liang"); + add_name("american","Lie"); + add_name("american","Lin"); + add_name("american","Lodato"); + add_name("american","Longland"); + add_name("american","Lopez"); + add_name("american","Lor"); + add_name("american","Louie"); + add_name("american","Luo"); + add_name("american","Luyties"); + add_name("american","Madrid"); + add_name("american","Mai"); + add_name("american","McDonald"); + add_name("american","McEntyre"); + add_name("american","McGrath"); + add_name("american","McGree"); + add_name("american","McLeran"); + add_name("american","Mermelstein"); + add_name("american","Miller"); + add_name("american","Munson"); + add_name("american","Myers"); + add_name("american","Naas"); + add_name("american","Nacu"); + add_name("american","Nahashon"); + add_name("american","Neel"); + add_name("american","O\'Connor"); + add_name("american","O\'Hara"); + add_name("american","Onur"); + add_name("american","Pacheco"); + add_name("american","Pavey"); + add_name("american","Pavlich"); + add_name("american","Peacher"); + add_name("american","Peas"); + add_name("american","Pelayo"); + add_name("american","Pennya"); + add_name("american","Pierce"); + add_name("american","Pineda"); + add_name("american","Pitts"); + add_name("american","Porter"); + add_name("american","Proudfoot"); + add_name("american","Reisdorf"); + add_name("american","Robbins"); + add_name("american","Rowell"); + add_name("american","Rubin"); + add_name("american","Ruiz"); + add_name("american","Ryu"); + add_name("american","Sahas"); + add_name("american","Salud"); + add_name("american","Sanborn"); + add_name("american","Sandler"); + add_name("american","Sarkisyan"); + add_name("american","Schmill"); + add_name("american","Schofield"); + add_name("american","Shande"); + add_name("american","Sharp"); + add_name("american","Shellikeri"); + add_name("american","Shepherd"); + add_name("american","Sheu"); + add_name("american","Sidey"); + add_name("american","Silvers"); + add_name("american","Simas"); + add_name("american","Smith"); + add_name("american","Soucy"); + add_name("american","Sperry"); + add_name("american","Staples"); + add_name("american","Stone"); + add_name("american","Stoughton"); + add_name("american","Strickland"); + add_name("american","Suarez"); + add_name("american","SullivanLee"); + add_name("american","Swenson"); + add_name("american","T"); + add_name("american","Taehoon"); + add_name("american","Tang"); + add_name("american","Turner"); + add_name("american","Veca"); + add_name("american","Vitalone"); + add_name("american","Volker"); + add_name("american","Vuong"); + add_name("american","Wapner"); + add_name("american","Wasilczyk"); + add_name("american","Webb"); + add_name("american","West"); + add_name("american","Whelpley"); + add_name("american","Whitney"); + add_name("american","Whitten"); + add_name("american","Wrede"); + add_name("american","Wright"); + add_name("american","Yang"); + add_name("american","Zaiya"); + add_name("american","Zaring"); + add_name("american","Zipkin"); + add_name("seal","Angel"); + add_name("seal","Apex"); + add_name("seal","Bearcat"); + add_name("seal","Bishop"); + add_name("seal","Boomer"); + add_name("seal","Boxer"); + add_name("seal","Canine"); + add_name("seal","Chemist"); + add_name("seal","Chemo"); + add_name("seal","Cherub"); + add_name("seal","Chino"); + add_name("seal","Coffin"); + add_name("seal","Coma"); + add_name("seal","Cyclops"); + add_name("seal","Cypher"); + add_name("seal","Doc"); + add_name("seal","Druid"); + add_name("seal","Exxon"); + add_name("seal","Gator"); + add_name("seal","Hannibal"); + add_name("seal","Hazard"); + add_name("seal","Hitman"); + add_name("seal","Jayhawk"); + add_name("seal","Jester"); + add_name("seal","Justice"); + add_name("seal","Klepto"); + add_name("seal","Kojak"); + add_name("seal","Langley"); + add_name("seal","Neptune"); + add_name("seal","Mamba"); + add_name("seal","Midnight"); + add_name("seal","Neon"); + add_name("seal","Nomad"); + add_name("seal","Ogre"); + add_name("seal","Ozone"); + add_name("seal","Patron"); + add_name("seal","Pharaoh"); + add_name("seal","Pieces"); + add_name("seal","Poet"); + add_name("seal","Preacher"); + add_name("seal","Reaper"); + add_name("seal","Redcell"); + add_name("seal","Roadie"); + add_name("seal","Robot"); + add_name("seal","Rocket"); + add_name("seal","Rooster"); + add_name("seal","Sparrow"); + add_name("seal","Taco"); + add_name("seal","Thumper"); + add_name("seal","Trojan"); + add_name("seal","Twister"); + add_name("seal","Undertone"); + add_name("seal","Utah"); + add_name("seal","Whiskey"); + add_name("seal","Worm"); + add_name("seal","Yankee"); + add_name("seal","Zero"); + copy_names("taskforce","seal"); + copy_names("delta","seal"); + add_name("secretservice","Smith"); + add_name("secretservice","Jones"); + add_name("secretservice","Jackson"); + add_name("secretservice","Johnson"); + add_name("secretservice","Thompson"); + add_name("secretservice","Ash"); + add_name("secretservice","Bird"); + add_name("secretservice","Finn"); + add_name("secretservice","Fine"); + add_name("secretservice","Brown"); + add_name("secretservice","White"); + add_name("secretservice","Gray"); + add_name("secretservice","Black"); + add_name("secretservice","Wylie"); + add_name("secretservice","Rosenhaus"); + add_name("secretservice","Boras"); + add_name("secretservice","McKinnis"); + add_name("secretservice","Duffy"); + add_name("secretservice","Falk"); + add_name("secretservice","Tellem"); + add_name("secretservice","Goodwin"); + add_name("secretservice","Condon"); + add_name("secretservice","Parker"); + add_name("secretservice","McGuire"); + add_name("secretservice","Steinberg"); + add_name("british","Abbot"); + add_name("british","Adams"); + add_name("british","Bartlett"); + add_name("british","Boyd"); + add_name("british","Boyle"); + add_name("british","Bremner"); + add_name("british","Carlyle"); + add_name("british","Carver"); + add_name("british","Cheek"); + add_name("british","Clarke"); + add_name("british","Collins"); + add_name("british","Compton"); + add_name("british","Connolly"); + add_name("british","Cook"); + add_name("british","Dowd"); + add_name("british","Field"); + add_name("british","Fleming"); + add_name("british","Fletcher"); + add_name("british","Flynn"); + add_name("british","Grant"); + add_name("british","Greaves"); + add_name("british","Harris"); + add_name("british","Harrison"); + add_name("british","Heath"); + add_name("british","Henderson"); + add_name("british","Hopkins"); + add_name("british","Hoyt"); + add_name("british","Kent"); + add_name("british","Lewis"); + add_name("british","Lipton"); + add_name("british","Macdonald"); + add_name("british","Maxwell"); + add_name("british","McQuarrie"); + add_name("british","Miller"); + add_name("british","Mitchell"); + add_name("british","Moore"); + add_name("british","Murphy"); + add_name("british","Murray"); + add_name("british","Pearce"); + add_name("british","Plumber"); + add_name("british","Pritchard"); + add_name("british","Rankin"); + add_name("british","Reed"); + add_name("british","Ritchie"); + add_name("british","Ross"); + add_name("british","Roth"); + add_name("british","Smith"); + add_name("british","Stevenson"); + add_name("british","Stuart"); + add_name("british","Sullivan"); + add_name("british","Thompson"); + add_name("british","Veale"); + add_name("british","Wallace"); + add_name("british","Wells"); + add_name("british","Welsh"); + add_name("russian","Sasha Ivanov"); + add_name("russian","Aleksei Vyshinskiy"); + add_name("russian","Boris Ryzhkov"); + add_name("russian","Dima Tikhonov"); + add_name("russian","Oleg Kosygin"); + add_name("russian","Pyotr Bulganin"); + add_name("russian","Petya Malenkov"); + add_name("russian","Alyosha Tarkovsky"); + add_name("russian","Sergei Grombyo"); + add_name("russian","Viktor Kuznetsov"); + add_name("russian","Misha Podgorniy"); + add_name("russian","Borya Mikoyan"); + add_name("russian","Anatoly Voroshilov"); + add_name("russian","Kolya Shvernik"); + add_name("russian","Nikolai Kalinin"); + add_name("russian","Vladimir Brezhnev"); + add_name("russian","Pavel Chernenko"); + add_name("russian","Volodya Andropov"); + add_name("russian","Yuri Nikitin"); + add_name("russian","Dmitri Petrenko"); + add_name("russian","Vanya Gerasimov"); + add_name("russian","Mikhail Zhuravlev"); + add_name("russian","Ivan Lukin"); + add_name("russian","Kostya Golubev"); + add_name("russian","Konstantin Lebedev"); + add_name("russian","Aleksandr Vasilev"); + add_name("russian","Yakov Glushenko"); + add_name("russian","Sasha Semenov"); + add_name("russian","Aleksei Ulyanov"); + add_name("russian","Boris Yefremov"); + add_name("russian","Dima Chernyshenko"); + add_name("russian","Oleg Stepanoshvili"); + add_name("russian","Pyotr Demchenko"); + add_name("russian","Petya Avagimov"); + add_name("russian","Alyosha Murzaev"); + add_name("russian","Sergei Shkuratov"); + add_name("russian","Viktor Yakimenko"); + add_name("russian","Misha Masijashvili"); + add_name("russian","Borya Shapovalov"); + add_name("russian","Anatoly Ivashenko"); + add_name("russian","Kolya Dovzhenko"); + add_name("russian","Nikolai Turdyev"); + add_name("russian","Vladimir Sabgaida"); + add_name("russian","Pavel Svirin"); + add_name("russian","Volodya Sarayev"); + add_name("russian","Yuri Kiselev"); + add_name("russian","Dmitri Bondarenko"); + add_name("russian","Vanya Chernogolov"); + add_name("russian","Mikhail Voronov"); + add_name("russian","Ivan Afanasyev"); + add_name("russian","Kostya Gridin"); + add_name("russian","Konstantin Petrov"); + add_name("russian","Aleksandr Rykov"); + add_name("russian","Yakov Shvedov"); + add_name("arab","Abdulaziz"); + add_name("arab","Abdullah"); + add_name("arab","Ali"); + add_name("arab","Amin"); + add_name("arab","Bassam"); + add_name("arab","Fahd"); + add_name("arab","Faris"); + add_name("arab","Fouad"); + add_name("arab","Habib"); + add_name("arab","Hakem"); + add_name("arab","Hassan"); + add_name("arab","Ibrahim"); + add_name("arab","Imad"); + add_name("arab","Jabbar"); + add_name("arab","Kareem"); + add_name("arab","Khalid"); + add_name("arab","Malik"); + add_name("arab","Muhammad"); + add_name("arab","Nasir"); + add_name("arab","Omar"); + add_name("arab","Rafiq"); + add_name("arab","Rami"); + add_name("arab","Said"); + add_name("arab","Salim"); + add_name("arab","Samir"); + add_name("arab","Talib"); + add_name("arab","Tariq"); + add_name("arab","Youssef"); + add_name("arab","Ziad"); + add_name("portuguese","Carlitos"); + add_name("portuguese","Antonio"); + add_name("portuguese","Gervasio"); + add_name("portuguese","Lois"); + add_name("portuguese","Xesus"); + add_name("shadowcompany","Lestat"); + add_name("shadowcompany","Nosferatu"); + add_name("shadowcompany","Lecter"); + add_name("multilingual","Kugelschreiber"); + add_name("multilingual","Flughafen"); + add_name("french","Astor"); + add_name("french","Beliveau"); + add_name("french","Chaloux"); + add_name("french","Leboeuf"); + add_name("french","Leblanc"); + add_name("french","Navarre"); + add_name("french","Perilloux"); + add_name("french","Philippe"); + add_name("french","Taillon"); + add_name("african","Sulaiman"); + add_name("african","Camara"); + add_name("african","Mustapha"); + add_name("african","Abubakarr"); + add_name("czech","Andrej"); + add_name("czech","Anton"); + add_name("czech","Antonín"); + add_name("czech","Arnost"); + add_name("czech","Augustín"); + add_name("czech","Bartolomej"); + add_name("czech","Beda"); + add_name("czech","Bedrich"); + add_name("czech","Benes"); + add_name("czech","Blaze"); + add_name("czech","Bohdan"); + add_name("czech","Bohuslav"); + add_name("czech","Bonifác"); + add_name("czech","Bozidar"); + add_name("czech","Branislav"); + add_name("czech","Cenek"); + add_name("czech","Ctibor"); + add_name("czech","Dalek"); + add_name("czech","Dalibor"); + add_name("czech","Damek"); + add_name("czech","Danek"); + add_name("czech","Dávid"); + add_name("czech","Dobromil"); + add_name("czech","Dominik"); + add_name("czech","Drahoslav"); + add_name("czech","Dusa"); + add_name("czech","Edvard"); + add_name("czech","Eliás"); + add_name("czech","Evzen"); + add_name("czech","Frantisek"); + add_name("czech","Gabriel"); + add_name("czech","Georg"); + add_name("czech","Holic"); + add_name("czech","Honza"); + add_name("czech","Ignác"); + add_name("czech","Imrich"); + add_name("czech","Ivan"); + add_name("czech","Jakub"); + add_name("czech","Jan"); + add_name("czech","Jarmil"); + add_name("czech","Jaroslav"); + add_name("czech","Jindrich"); + add_name("czech","Jirí"); + add_name("czech","Johan"); + add_name("czech","Josef"); + add_name("czech","Július"); + add_name("czech","Juraj"); + add_name("czech","Kamil"); + add_name("czech","Konstantin"); + add_name("czech","Kopecký"); + add_name("czech","Kornel"); + add_name("czech","Kristof"); + add_name("czech","Ladislav"); + add_name("czech","Leos"); + add_name("czech","Libor"); + add_name("czech","Ludvík"); + add_name("czech","Lukás"); + add_name("czech","Marek"); + add_name("czech","Matej"); + add_name("czech","Matous"); + add_name("czech","Matus"); + add_name("czech","Michal"); + add_name("czech","Mikulás"); + add_name("czech","Milan"); + add_name("czech","Milos"); + add_name("czech","Mirek"); + add_name("czech","Miroslav"); + add_name("czech","Nikola"); + add_name("czech","Oldrich"); + add_name("czech","Ondrej"); + add_name("czech","Otakar"); + add_name("czech","Patrik"); + add_name("czech","Pavel"); + add_name("czech","Petr"); + add_name("czech","Premysl"); + add_name("czech","Radek"); + add_name("czech","Radim"); + add_name("czech","Radoslav"); + add_name("czech","Rehor"); + add_name("czech_surnames","Blumel"); + add_name("czech_surnames","Maly"); + add_name("czech_surnames","Pospisil"); + add_name("czech_surnames","Soukup"); + add_name("czech_surnames","Blazek"); + add_name("czech_surnames","Dolezal"); + add_name("czech_surnames","Fiser"); + add_name("czech_surnames","Kadlec"); + add_name("czech_surnames","Kolar"); + add_name("czech_surnames","Kopecky"); + add_name("czech_surnames","Kriz"); + add_name("czech_surnames","Mares"); + add_name("czech_surnames","Masek"); + add_name("czech_surnames","Polak"); + add_name("czech_surnames","Sedlacek"); + add_name("czech_surnames","Stastny"); + add_name("czech_surnames","Tuma"); + add_name("czech_surnames","Vanek"); + add_name("czech_surnames","Blaha"); + add_name("czech_surnames","Dusek"); + add_name("czech_surnames","Hruska"); + add_name("czech_surnames","Janda"); + add_name("czech_surnames","Kohout"); + add_name("czech_surnames","Matousek"); + add_name("czech_surnames","Moravec"); + add_name("czech_surnames","Mueller"); + add_name("czech_surnames","Riha"); + add_name("czech_surnames","Strnad"); + add_name("czech_surnames","Sykora"); + add_name("czech_surnames","Simek"); + add_name("czech_surnames","Smid"); + add_name("czech_surnames","Stepanek"); + add_name("czech_surnames","Tichy"); + add_name("czech_surnames","Vacek"); + add_name("czech_surnames","Vlcek"); + copy_names("pmc","czech_surnames"); + init_script_friendnames(); + for(var_01 = 0;var_01 < var_41.size;var_01++ = "pmc") + { + remove_script_friendnames_from_list(var_41[var_01]); + randomize_name_list(var_41[var_01]); + level.nameindex[var_41[var_01]] = 0; + } +} + +//Function Number: 3 +copy_names(param_00,param_01) +{ + level.names[param_00] = level.names[param_01]; +} + +//Function Number: 4 +add_name(param_00,param_01) +{ + level.names[param_00][level.names[param_00].size] = param_01; +} + +//Function Number: 5 +remove_name(param_00,param_01) +{ + level.names[param_00] = common_scripts\utility::array_remove(level.names[param_00],param_01); +} + +//Function Number: 6 +init_script_friendnames() +{ + var_00 = []; + var_01 = getspawnerarray(); + var_02 = getaiarray(); + foreach(var_04 in var_01) + { + if(isdefined(var_04.script_friendname) && var_04.script_friendname != "none") + { + var_05 = normalize_script_friendname(var_04.script_friendname); + var_00[var_00.size] = var_05; + } + } + + foreach(var_08 in var_02) + { + if(isdefined(var_08.script_friendname) && var_08.script_friendname != "none") + { + var_05 = normalize_script_friendname(var_08.script_friendname); + var_00[var_00.size] = var_05; + } + } + + level.script_friendnames = var_00; +} + +//Function Number: 7 +normalize_script_friendname(param_00) +{ + var_01 = strtok(param_00," "); + if(var_01.size > 1) + { + param_00 = var_01[1]; + } + + return param_00; +} + +//Function Number: 8 +remove_script_friendnames_from_list(param_00) +{ + foreach(var_02 in level.script_friendnames) + { + foreach(var_04 in level.names[param_00]) + { + if(var_02 == var_04) + { + remove_name(param_00,var_04); + } + } + } +} + +//Function Number: 9 +randomize_name_list(param_00) +{ + var_01 = level.names[param_00].size; + for(var_02 = 0;var_02 < var_01;var_02++) + { + var_03 = randomint(var_01); + var_04 = level.names[param_00][var_02]; + level.names[param_00][var_02] = level.names[param_00][var_03]; + level.names[param_00][var_03] = var_04; + } +} + +//Function Number: 10 +get_name(param_00) +{ + if(isdefined(self.team) && self.team == "neutral") + { + return; + } + + if(!isdefined(param_00) && level.script == "credits") + { + self.airank = "private"; + return; + } + + if(isdefined(self.script_friendname)) + { + if(self.script_friendname == "none") + { + return; + } + + self.name = self.script_friendname; + func_0E6E(self.name); + self notify("set name and rank"); + return; + } + + get_name_for_nationality(self.voice); + self notify("set name and rank"); +} + +//Function Number: 11 +get_name_for_nationality(param_00) +{ + level.nameindex[param_00] = level.nameindex[param_00] + 1 % level.names[param_00].size; + var_01 = level.names[param_00][level.nameindex[param_00]]; + var_02 = randomint(10); + if(nationalityusessurnames(param_00)) + { + var_03 = param_00 + "_surnames"; + level.nameindex[var_03] = level.nameindex[var_03] + 1 % level.names[var_03].size; + var_01 = var_01 + " " + level.names[var_03][level.nameindex[var_03]]; + } + + if(func_0E6F(param_00)) + { + var_04 = var_01; + self.airank = "private"; + } + else if(var_01 == "secretservice") + { + var_04 = "Agent " + var_02; + self.airank = "private"; + } + else if(var_04 > 5) + { + var_04 = "Pvt. " + var_02; + self.airank = "private"; + } + else if(var_04 > 2) + { + var_04 = "Cpl. " + var_02; + self.airank = "private"; + } + else + { + var_04 = "Sgt. " + var_02; + self.airank = "sergeant"; + } + + if(isai(self) && self isbadguy()) + { + self.ainame = var_04; + return; + } + + self.name = var_04; +} + +//Function Number: 12 +func_0E6E(param_00) +{ + if(!isdefined(param_00)) + { + self.airank = "private"; + } + + var_01 = strtok(param_00," "); + var_02 = var_01[0]; + switch(var_02) + { + case "Pvt.": + self.airank = "private"; + break; + + case "Pfc.": + self.airank = "private"; + break; + + case "Agent": + self.airank = "private"; + break; + + case "Cpl.": + self.airank = "corporal"; + break; + + case "Sgt.": + self.airank = "sergeant"; + break; + + case "Lt.": + self.airank = "lieutenant"; + break; + + case "Cpt.": + self.airank = "captain"; + break; + + default: + self.airank = "private"; + break; + } +} + +//Function Number: 13 +func_0E6F(param_00) +{ + switch(param_00) + { + case "seal": + case "taskforce": + case "czech": + case "delta": + return 1; + } + + return 0; +} + +//Function Number: 14 +nationalityusessurnames(param_00) +{ + return isdefined(level.names[param_00 + "_surnames"]); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_noder.gsc b/MW3/Xbox/SP/maps/_noder.gsc new file mode 100644 index 0000000..cd72e65 --- /dev/null +++ b/MW3/Xbox/SP/maps/_noder.gsc @@ -0,0 +1,1486 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_noder.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 77 + * Decompile Time: 1362 ms + * Timestamp: 10/27/2023 2:34:11 AM +*******************************************************************/ + +//Function Number: 1 +main(param_00) +{ + if(!getdvarint("noder")) + { + return; + } + + level.drone_paths = []; + level.scr_anim["generic"]["node_cover_left"][0] = %cornercrl_reloada; + level.scr_anim["generic"]["node_cover_left"][1] = %cornercrl_look_fast; + level.scr_anim["generic"]["node_cover_left"][2] = %corner_standl_grenade_b; + level.scr_anim["generic"]["node_cover_left"][3] = %corner_standl_flinch; + level.scr_anim["generic"]["node_cover_left"][4] = %corner_standl_look_idle; + level.scr_anim["generic"]["node_cover_left"][5] = %corner_standl_look_2_alert; + level.scr_anim["generic"]["node_cover_right"][0] = %cornercrr_reloada; + level.scr_anim["generic"]["node_cover_right"][1] = %corner_standr_grenade_b; + level.scr_anim["generic"]["node_cover_right"][2] = %corner_standr_flinch; + level.scr_anim["generic"]["node_cover_right"][3] = %corner_standr_look_idle; + level.scr_anim["generic"]["node_cover_right"][4] = %corner_standr_look_2_alert; + level.scr_anim["generic"]["node_cover_crouch"][0] = %covercrouch_hide_idle; + level.scr_anim["generic"]["node_cover_crouch"][1] = %covercrouch_twitch_1; + level.scr_anim["generic"]["node_cover_crouch"][2] = %covercrouch_hide_2_aim; + level.scr_anim["generic"]["node_cover_crouch"][3] = %covercrouch_hide_2_aim; + level.scr_anim["generic"]["node_cover_crouch"][4] = %covercrouch_hide_2_aim; + level.scr_anim["generic"]["node_cover_crouch"][5] = %covercrouch_hide_look; + level.scr_anim["generic"]["node_cover_crouch_window"][0] = %covercrouch_hide_idle; + level.scr_anim["generic"]["node_cover_crouch_window"][1] = %covercrouch_twitch_1; + level.scr_anim["generic"]["node_cover_crouch_window"][2] = %covercrouch_hide_2_aim; + level.scr_anim["generic"]["node_cover_crouch_window"][3] = %covercrouch_hide_2_aim; + level.scr_anim["generic"]["node_cover_crouch_window"][4] = %covercrouch_hide_2_aim; + level.scr_anim["generic"]["node_cover_crouch_window"][5] = %covercrouch_hide_look; + level.scr_anim["generic"]["node_cover_prone"][0] = %crouch_2_prone_firing; + level.scr_anim["generic"]["node_cover_prone"][1] = %prone_2_crouch; + level.scr_anim["generic"]["node_cover_prone"][2] = %prone_reload; + level.scr_anim["generic"]["node_cover_stand"][0] = %coverstand_reloada; + level.scr_anim["generic"]["node_concealment_crouch"][0] = %covercrouch_hide_idle; + level.scr_anim["generic"]["node_concealment_crouch"][1] = %covercrouch_twitch_1; + level.scr_anim["generic"]["node_concealment_crouch"][2] = %covercrouch_hide_2_aim; + level.scr_anim["generic"]["node_concealment_crouch"][3] = %covercrouch_hide_2_aim; + level.scr_anim["generic"]["node_concealment_crouch"][4] = %covercrouch_hide_2_aim; + level.scr_anim["generic"]["node_concealment_crouch"][5] = %covercrouch_hide_look; + level.scr_anim["generic"]["node_concealment_prone"][0] = %crouch_2_prone_firing; + level.scr_anim["generic"]["node_concealment_prone"][1] = %prone_2_crouch; + level.scr_anim["generic"]["node_concealment_prone"][2] = %prone_reload; + level.scr_anim["generic"]["node_concealment_stand"][0] = %coverstand_reloada; + level.node_offset = []; + level.node_offset["node_cover_left"] = (0,90,0); + level.node_offset["node_cover_right"] = (0,-90,0); + level.node_offset["node_pathnode"] = (0,0,0); + level.node_offset["node_cover_crouch"] = (0,0,0); + level.node_offset["node_cover_crouch_window"] = (0,0,0); + level.node_offset["node_cover_prone"] = (0,0,0); + level.node_offset["node_cover_stand"] = (0,0,0); + level.node_offset["node_concealment_crouch"] = (0,0,0); + level.node_offset["node_concealment_prone"] = (0,0,0); + level.node_offset["node_concealment_stand"] = (0,0,0); + level.var_16E2 = 0; + level.dronestruct = []; + var_01 = getspawnerarray(); + level.dummyguy_index_max = 0; + level.dummyguy = []; + if(var_01.size) + { + var_02 = var_01[0]; + var_02 maps\_spawner::dronespawner_init(); + for(var_03 = 0;var_03 < 20;var_03++) + { + level.dummyguy[var_03] = maps\_spawner::func_16E7(var_02); + level.dummyguy[var_03] notsolid(); + level.dummyguy[var_03] hide(); + level.dummyguy[var_03].dontdonotetracks = 1; + level.dummyguy[var_03].dummyguyindex = var_03; + level.dummynode[var_03] = spawn("script_origin",(0,0,0)); + level.dummynode[var_03].dummynode = 1; + level.dummyguy_index_max++; + } + } + + level.var_16EA = 0; + maps\_anim::init(); + var_04 = getentarray(); + foreach(var_06 in var_04) + { + if((isdefined(var_06.classname) && var_06.classname == "player") || isdefined(var_06.dontdonotetracks) || isdefined(var_06.dummynode)) + { + continue; + } + + if(isdefined(var_06)) + { + var_06 delete(); + } + } + + var_04 = undefined; + level.place_node_radius = 64; + level.place_node_group = []; + level.var_16ED = "node_pathnode"; + level.placed_nodes = []; + level.noder_heightoffset = (0,0,32); + level.wall_look = 0; + level.node_grid = 256; + level.coliding_node = undefined; + level.node_select_locked = 0; + level.node_animation_preview = 1; + add_node_type("node_pathnode",undefined); + add_node_type("node_cover_crouch"); + add_node_type("node_cover_crouch_window"); + add_node_type("node_cover_left",-1); + add_node_type("node_cover_right",1); + add_node_type("node_cover_prone"); + add_node_type("node_cover_stand"); + add_node_type("node_concealment_crouch"); + add_node_type("node_concealment_prone"); + add_node_type("node_concealment_stand"); + thread hack_start(); + thread func_16CA(); + thread noder_init(); + common_scripts\utility::flag_wait("user_hud_active"); + thread func_1731(); + thread manage_nearnodes(); + level.drone_paths = []; + var_08 = getallnodes(); + if(var_08.size) + { + level.player setorigin(maps\_utility::getclosest(level.player.origin,var_08).origin); + } + + for(;;) + { + wait 0.05; + level.player_view_trace = player_view_trace(); + func_1713(1); + } +} + +//Function Number: 2 +hack_start() +{ + common_scripts\utility::flag_init("user_alive"); + while(!isdefined(get_mp_player())) + { + wait 0.05; + } + + wait 0.05; + level.noder_player = get_mp_player(); + level.noder_player takeallweapons(); + level.noder_player allowcrouch(0); + level.noder_player allowjump(0); + level.noder_player allowprone(0); + common_scripts\utility::flag_set("user_alive"); +} + +//Function Number: 3 +noder_init() +{ + level.preview_node = spawn("script_model",(0,0,0)); + precachemodel("node_preview"); + level.preview_node setmodel("node_preview"); + level.preview_node notsolid(); + level.selector_model = spawn("script_model",(0,0,0)); + level.selector_model setmodel("node_select"); + level.selector_model notsolid(); + level.selector_model hide(); + level.selected_node = undefined; + setcurrentgroup(level.var_16ED); + level.var_16ED = undefined; + playerinit(); +} + +//Function Number: 4 +hud_update_placed_model_count() +{ + level.hud_noder["helppm"].var_16D0 setvalue(level.placed_nodes.size); + var_00 = 256; + if(level.placed_nodes.size < var_00) + { + level.hud_noder["helppm"].var_16D0.color = (1,1,1); + return; + } + + var_01 = 1; + var_02 = 1 - level.placed_nodes.size - var_00 / var_00; + var_03 = var_02; + level.hud_noder["helppm"].var_16D0.color = (var_01,var_02,var_03); +} + +//Function Number: 5 +controler_hud_add(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = 520; + var_06 = 120; + var_07 = 18; + var_08 = 0.8; + var_09 = 20; + var_0A = 1.4; + if(!isdefined(level.hud_noder) || !isdefined(level.hud_noder[param_00])) + { + level.hud_noder[param_00] = _newhudelem(); + var_0B = _newhudelem(); + } + else + { + var_0B = level.hud_noder[param_01].var_16D0; + } + + level.hud_noder[param_00].location = 0; + level.hud_noder[param_00].alignx = "right"; + level.hud_noder[param_00].aligny = "middle"; + level.hud_noder[param_00].foreground = 1; + level.hud_noder[param_00].fontscale = 1.5; + level.hud_noder[param_00].sort = 20; + level.hud_noder[param_00].alpha = var_08; + level.hud_noder[param_00].x = var_05 + var_09; + level.hud_noder[param_00].y = var_06 + param_01 * var_07; + level.hud_noder[param_00] _settext(param_02); + var_0B.location = 0; + var_0B.alignx = "left"; + var_0B.aligny = "middle"; + var_0B.foreground = 1; + var_0B.fontscale = var_0A; + var_0B.sort = 20; + var_0B.alpha = var_08; + var_0B.x = var_05 + var_09; + var_0B.y = var_06 + param_01 * var_07; + if(isdefined(param_04)) + { + var_0B setvalue(param_04); + } + + if(isdefined(param_03)) + { + var_0B _settext(param_03); + } + + level.hud_noder[param_00].var_16D0 = var_0B; +} + +//Function Number: 6 +func_16CA() +{ + common_scripts\utility::flag_init("user_hud_active"); + common_scripts\utility::flag_wait("user_alive"); + var_00 = 17; + var_01 = []; + var_02 = 15; + var_03 = int(var_00 / 2); + var_04 = 240 + var_03 * var_02; + var_05 = 0.7 / var_03; + var_06 = var_05; + for(var_07 = 0;var_07 < var_00;var_07++) + { + var_01[var_07] = _newhudelem(); + var_01[var_07].location = 0; + var_01[var_07].alignx = "left"; + var_01[var_07].aligny = "middle"; + var_01[var_07].foreground = 1; + var_01[var_07].fontscale = 2; + var_01[var_07].sort = 20; + if(var_07 == var_03) + { + var_01[var_07].alpha = 1; + } + else + { + var_01[var_07].alpha = var_06; + } + + var_01[var_07].x = 0; + var_01[var_07].y = var_04; + var_01[var_07] _settext("."); + if(var_07 == var_03) + { + var_05 = var_05 * -1; + } + + var_06 = var_06 + var_05; + var_04 = var_04 - var_02; + } + + level.group_hudelems = var_01; + var_08 = _newhudelem(); + var_08.location = 0; + var_08.alignx = "left"; + var_08.aligny = "bottom"; + var_08.foreground = 1; + var_08.fontscale = 2; + var_08.sort = 20; + var_08.alpha = 1; + var_08.x = 320; + var_08.y = 244; + var_08 _settext("."); + level.var_16CC = var_08; + var_08 = _newhudelem(); + var_08.location = 0; + var_08.alignx = "center"; + var_08.aligny = "bottom"; + var_08.foreground = 1; + var_08.fontscale = 2; + var_08.sort = 20; + var_08.alpha = 0; + var_08.x = 320; + var_08.y = 244; + var_08 setvalue(0); + level.crosshair_value = var_08; + var_09 = _newhudelem(); + var_09.location = 0; + var_09.alignx = "center"; + var_09.aligny = "bottom"; + var_09.foreground = 1; + var_09.fontscale = 2; + var_09.sort = 20; + var_09.alpha = 1; + var_09.x = 320; + var_09.y = 300; + var_09 _settext(""); + level.selection_lock_indicator = var_09; + var_0A = _newhudelem(); + var_0A.location = 0; + var_0A.alignx = "center"; + var_0A.aligny = "bottom"; + var_0A.foreground = 1; + var_0A.fontscale = 2; + var_0A.sort = 20; + var_0A.alpha = 1; + var_0A.x = 320; + var_0A.y = 300; + var_0A _settext(""); + level.node_animation_preview_indicator = var_0A; + var_0B = 550; + var_0C = 120; + var_0D = 18; + var_0E = 1; + var_0F = 0.8; + var_10 = 20; + var_11 = 1.4; + controler_hud_add("helppm",1,"^5Placed Nodes: ",undefined,level.placed_nodes.size); + controler_hud_add("gridsize",2,"^5Grid Size: ",undefined,level.node_grid); + controler_hud_add("helpxy",6,"^4X/^3Y: ",undefined,level.place_node_radius); + controler_hud_add("helpab",7,"^2A/^1B^7: ","-"); + controler_hud_add("helplsrs",8,"^8L^7/R Stick: ","-"); + controler_hud_add("helplbrb",9,"^8L^7/R Shoulder: ","-"); + controler_hud_add("helpdpu",10,"^8DPad U/^7D: ","-"); + controler_hud_add("helpdpl",11,"^8DPad L/^7R: ","-"); + controler_hud_add("helpF",17,"^8W: ","-"); + level.hud_noder["helpF"].x = var_0B - 450; + level.hud_noder["helpF"].var_16D0.x = var_0B - 450; + hint_buttons_main(); + common_scripts\utility::flag_set("user_hud_active"); +} + +//Function Number: 7 +controler_hud_update_text(param_00,param_01) +{ + level.hud_noder[param_00].var_16D0 _settext(param_01); +} + +//Function Number: 8 +controler_hud_update_button(param_00,param_01) +{ + level.hud_noder[param_00] _settext(param_01); +} + +//Function Number: 9 +setcurrentgroup(param_00) +{ + common_scripts\utility::flag_wait("user_hud_active"); + level.place_node_current_group = param_00; + var_01 = getarraykeys(level.place_node_group); + var_02 = 0; + var_03 = int(level.group_hudelems.size / 2); + for(var_04 = 0;var_04 < var_01.size;var_04++) + { + if(var_01[var_04] == param_00) + { + var_02 = var_04; + break; + } + } + + for(var_04 = 0;var_04 < level.group_hudelems.size;var_04++) + { + level.group_hudelems[var_04] clearalltextafterhudelem(); + } + + level.group_hudelems[var_03] _settext("^3" + func_171D(var_01[var_02])); + for(var_04 = 1;var_04 < level.group_hudelems.size - var_03;var_04++) + { + if(var_02 - var_04 < 0) + { + level.group_hudelems[var_03 + var_04] _settext("-- --"); + continue; + } + + level.group_hudelems[var_03 + var_04] _settext(func_171D(var_01[var_02 - var_04])); + } + + for(var_04 = 1;var_04 < level.group_hudelems.size - var_03;var_04++) + { + if(var_02 + var_04 > var_01.size - 1) + { + level.group_hudelems[var_03 - var_04] _settext("-- --"); + continue; + } + + level.group_hudelems[var_03 - var_04] _settext(func_171D(var_01[var_02 + var_04])); + } + + param_00 = getcurrent_groupstruct(); + level.node_grid = param_00.grid_size; + hud_update_gridsize(); +} + +//Function Number: 10 +setgroup_up() +{ + var_00 = undefined; + var_01 = getarraykeys(level.place_node_group); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + if(var_01[var_02] == level.place_node_current_group) + { + var_00 = var_02 + 1; + break; + } + } + + if(var_00 == var_01.size) + { + var_00 = 0; + } + + setcurrentgroup(var_01[var_00]); +} + +//Function Number: 11 +setgroup_down() +{ + var_00 = undefined; + var_01 = getarraykeys(level.place_node_group); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + if(var_01[var_02] == level.place_node_current_group) + { + var_00 = var_02 - 1; + break; + } + } + + if(var_00 < 0) + { + var_00 = var_01.size - 1; + } + + setcurrentgroup(var_01[var_00]); +} + +//Function Number: 12 +add_node_type(param_00,param_01,param_02) +{ + if(!isdefined(param_01)) + { + param_01 = 0; + } + + if(!isdefined(param_02)) + { + param_02 = 0; + } + + precachemodel(param_00); + if(!isdefined(level.place_node_group[param_00])) + { + var_03 = spawnstruct(); + var_03.wall_snap_direction = param_01; + var_03.grid_size = param_02; + level.place_node_group[param_00] = var_03; + } + + level.place_node_group[param_00].model = param_00; +} + +//Function Number: 13 +playerinit() +{ + level.var_1706 = 950; + common_scripts\utility::flag_wait("user_hud_active"); + level.noder_player takeallweapons(); + level.var_1707 = []; + level.var_1708 = []; + level.noder_player thread button_monitor(); + level.noder_player thread button_modifier(); + set_button_funcs_main(); + add_button_modifier_func(::set_button_funcs_quick_select,::func_1744,"BUTTON_LSTICK"); +} + +//Function Number: 14 +button_modifier() +{ + for(;;) + { + foreach(var_02, var_01 in level.var_1707) + { + if(self buttonpressed(var_02)) + { + [[ level.var_1707[var_02] ]](); + while(self buttonpressed(var_02)) + { + wait 0.05; + } + + [[ level.button_modifier_release_func[var_02] ]](); + wait 0.05; + } + } + + wait 0.05; + } +} + +//Function Number: 15 +button_monitor() +{ + for(;;) + { + foreach(var_02, var_01 in level.var_1708) + { + if(self buttonpressed(var_02)) + { + [[ level.var_1708[var_02] ]](); + if(!level.button_func_isflow[var_02]) + { + while(self buttonpressed(var_02)) + { + wait 0.05; + } + } + + break; + } + } + + wait 0.05; + } +} + +//Function Number: 16 +add_button_func(param_00,param_01,param_02) +{ + var_03 = []; + level.var_1708[param_02] = param_00; + level.button_func_isflow[param_02] = param_01; +} + +//Function Number: 17 +add_button_modifier_func(param_00,param_01,param_02) +{ + level.var_1707[param_02] = param_00; + level.button_modifier_release_func[param_02] = param_01; +} + +//Function Number: 18 +deleteme() +{ + self delete(); +} + +//Function Number: 19 +getcurrent_groupstruct() +{ + return level.place_node_group[level.place_node_current_group]; +} + +//Function Number: 20 +get_wall_offset(param_00) +{ + var_01 = level.player_view_trace; + var_02 = var_01["position"]; + var_03 = 16 * vectornormalize(var_01["normal"]); + var_04 = var_02 + var_03; + var_05 = find_corner_snap(var_04,param_00); + if(isdefined(var_05)) + { + var_04 = var_05; + } + + return groundpos_loc(var_04) + level.noder_heightoffset; +} + +//Function Number: 21 +find_corner_snap(param_00,param_01) +{ + var_02 = getcurrent_groupstruct(); + var_03 = var_02.wall_snap_direction; + if(var_03 == 0) + { + return; + } + + var_04 = param_00; + var_05 = var_04; + var_06 = 32; + var_07 = 16 * var_03 * vectornormalize(anglestoright(param_01)); + var_08 = 1; + while(var_08 < 15) + { + var_04 = var_05; + param_00 = var_04; + var_09 = var_08 * var_06 * var_03 * vectornormalize(anglestoright(param_01)); + var_0A = bullettrace_but_not_nodes(param_00,param_00 + var_09,0); + param_00 = param_00 + var_0A["fraction"] * var_09; + if(var_0A["fraction"] < 1) + { + continue; + } + else + { + } + + var_04 = param_00; + var_0B = 32 * vectornormalize(anglestoforward(param_01)); + var_0A = bullettrace_but_not_nodes(param_00,param_00 + var_0B,0); + var_0C = var_0A["fraction"]; + if(var_0A["fraction"] == 1) + { + var_0C = 0.51; + } + + param_00 = param_00 + var_0C * var_0B; + if(var_0A["fraction"] < var_0C) + { + continue; + } + else + { + } + + var_04 = param_00; + var_0D = var_09 * -1 - var_07; + var_0A = bullettrace_but_not_nodes(param_00,param_00 + var_0D,0); + param_00 = param_00 + var_0A["fraction"] * var_0D; + if(var_0A["fraction"] > 0.99) + { + continue; + } + else + { + } + + var_0E = param_00; + var_0F = var_0E + var_07 * -1 + var_0B * var_0C * -1; + var_10 = var_0F + var_07 * 0.9; + var_0A = bullettrace_but_not_nodes(var_10,var_10 + var_0B * 0.5,0); + if(var_0A["fraction"] < 1) + { + var_0F = var_0A["position"] - var_0B * 0.5 + var_07 * -0.9; + } + + return var_0F; + var_0B++; + } + + return undefined; +} + +//Function Number: 22 +func_1713(param_00) +{ + if(!isdefined(param_00)) + { + param_00 = 0; + } + + var_01 = level.player_view_trace; + var_02 = common_scripts\utility::flat_angle(level.player getplayerangles()); + var_03 = var_01["position"] + level.noder_heightoffset; + if(var_01["fraction"] == 1 || level.placed_nodes.size > level.var_1706) + { + level.preview_node hide(); + return; + } + + if(is_player_looking_at_a_wall()) + { + level.preview_node dontinterpolate(); + var_02 = vectortoangles(-1 * var_01["normal"]); + var_03 = get_wall_offset(var_02); + } + else if(level.node_grid) + { + level.preview_node dontinterpolate(); + var_03 = func_1721(var_03); + func_1723(var_03,param_00); + var_02 = (0,0,0); + } + + if(func_1725(var_03)) + { + level.preview_node hide(); + select_coliding_node(); + return; + } + else if(node_is_touching(var_03)) + { + select_coliding_node(); + } + else + { + func_1730(); + level.preview_node show(); + } + + draw_lines_to_connectible_nodes(var_03); + func_1714(var_03,var_02,param_00); +} + +//Function Number: 23 +func_1714(param_00,param_01,param_02) +{ + var_03 = getcurrent_groupstruct(); + if(param_02) + { + var_04 = level.preview_node; + var_04.origin = param_00; + } + else + { + var_04 = spawn("script_model",param_01); + } + + var_04 notsolid(); + if(!param_02) + { + var_04 setmodel(var_03.model); + } + + var_04.angles = param_01; + if(var_03.model == "node_pathnode") + { + var_04.angles = (0,0,0); + } + + if(!param_02) + { + place_new_dummy_guy_and_animate_at_node(var_04); + level.placed_nodes[level.placed_nodes.size] = var_04; + } + + hud_update_placed_model_count(); +} + +//Function Number: 24 +place_node_place_at_feet() +{ + var_00 = common_scripts\utility::flat_angle(level.noder_player getplayerangles()); + var_01 = groundpos_loc(level.noder_player.origin + (0,0,16)) + level.noder_heightoffset; + if(func_1725(var_01)) + { + return; + } + + func_1714(var_01,var_00,0); + hud_update_placed_model_count(); +} + +//Function Number: 25 +get_mp_player() +{ + return getentarray("player","classname")[0]; +} + +//Function Number: 26 +func_1717() +{ + var_00 = undefined; + if(isdefined(level.selected_node)) + { + var_00 = level.selected_node; + } + + if(isdefined(level.player_view_trace["entity"])) + { + var_00 = level.player_view_trace["entity"]; + if(!issubstr(var_00.model,"node_")) + { + var_00 = undefined; + } + } + + if(!isdefined(var_00)) + { + return; + } + + level.var_1718 = common_scripts\utility::array_remove(level.var_1718,var_00); + level.placed_nodes = common_scripts\utility::array_remove(level.placed_nodes,var_00); + if(isdefined(var_00.has_dummy_guy)) + { + var_00.has_dummy_guy hide(); + var_00.has_dummy_guy.is_hidden = 1; + } + + var_00 delete(); + level.var_16E2 = 1; + hud_update_placed_model_count(); +} + +//Function Number: 27 +dump_nodes() +{ +} + +//Function Number: 28 +player_view_trace() +{ + var_00 = 2000; + var_01 = level.noder_player geteye(); + return bullettrace(var_01,var_01 + anglestoforward(level.noder_player getplayerangles()) * var_00,0,level.preview_node); +} + +//Function Number: 29 +is_player_looking_at_a_wall() +{ + if(!isdefined(level.player_view_trace["normal"])) + { + return 0; + } + + if(traces_hitting_node(level.player_view_trace)) + { + return 0; + } + + var_00 = vectortoangles(level.player_view_trace["normal"]); + var_01 = common_scripts\utility::flat_angle(var_00); + if(vectordot(anglestoforward(var_01),anglestoforward(var_00)) == 1) + { + return 1; + } + + return 0; +} + +//Function Number: 30 +func_171D(param_00) +{ + var_01 = ""; + for(var_02 = 5;var_02 < param_00.size;var_02++) + { + var_01 = var_01 + param_00[var_02]; + } + + return var_01; +} + +//Function Number: 31 +bullettrace_but_not_nodes(param_00,param_01,param_02,param_03) +{ + var_04 = bullettrace(param_00,param_01,param_02,param_03); + if(traces_hitting_node(var_04)) + { + var_04 = bullettrace(param_00,param_01,param_02,var_04["entity"]); + } + + return var_04; +} + +//Function Number: 32 +traces_hitting_node(param_00) +{ + return isdefined(param_00["entity"]) && isdefined(param_00["entity"].model) && issubstr(param_00["entity"].model,"node_"); +} + +//Function Number: 33 +groundpos_loc(param_00,param_01) +{ + if(!isdefined(param_01)) + { + param_01 = -100000; + } + + return bullettrace_but_not_nodes(param_00,param_00 + (0,0,param_01),0,self)["position"]; +} + +//Function Number: 34 +func_1721(param_00) +{ + var_01 = level.node_grid; + var_02 = snap_number_to_nearest_grid(param_00[0],var_01); + var_03 = snap_number_to_nearest_grid(param_00[1],var_01); + return groundpos_loc((var_02,var_03,param_00[2] + 32)) + level.noder_heightoffset; +} + +//Function Number: 35 +snap_number_to_nearest_grid(param_00,param_01) +{ + var_02 = param_00 / param_01; + var_03 = int(var_02); + var_04 = var_02 - var_03; + if(var_04 < -0.5) + { + var_03--; + } + else if(var_04 > 0.5) + { + var_03++; + } + + return var_03 * param_01; +} + +//Function Number: 36 +func_1723(param_00,param_01) +{ + var_02 = 1; + var_03 = (0,1,0); + param_00 = groundpos_loc(param_00); + var_04 = param_00 + (0,0,level.node_grid); + for(var_05 = var_02 * -1;var_05 < var_02 + 1;var_05++) + { + for(var_06 = var_02 * -1;var_06 < var_02 + 1;var_06++) + { + if(var_05 != var_02) + { + } + + if(var_06 != var_02) + { + } + } + } +} + +//Function Number: 37 +func_1724(param_00,param_01,param_02,param_03) +{ + var_04 = level.node_grid * -2; + param_00 = groundpos_loc(param_00,var_04); + param_01 = groundpos_loc(param_01,var_04); +} + +//Function Number: 38 +func_1725(param_00) +{ + var_01 = 0; + var_02 = 68; + var_03 = undefined; + foreach(var_05 in level.placed_nodes) + { + var_06 = distance(param_00,var_05.origin); + if(var_06 < 32) + { + var_01++; + if(var_06 < 0.05) + { + var_01 = 6; + } + + if(var_06 < var_02) + { + var_03 = var_05; + } + } + } + + if(!isdefined(var_03)) + { + return 0; + } + + level.coliding_node = var_03; + if(var_01 >= 2) + { + return 1; + } + + return 0; +} + +//Function Number: 39 +node_is_touching(param_00) +{ + foreach(var_02 in level.placed_nodes) + { + if(distance(param_00,var_02.origin) < 32) + { + level.coliding_node = var_02; + return 1; + } + } + + return 0; +} + +//Function Number: 40 +hud_update_gridsize() +{ + var_00 = "^7"; + if(level.node_grid != 0) + { + var_00 = "^1"; + } + + level.hud_noder["gridsize"].var_16D0 _settext(var_00 + level.node_grid); +} + +//Function Number: 41 +grid_up() +{ + if(!level.node_grid) + { + level.node_grid = 64; + } + + level.node_grid = level.node_grid * 2; + if(level.node_grid > 256) + { + level.node_grid = 256; + } + + hud_update_gridsize(); +} + +//Function Number: 42 +grid_down() +{ + if(!level.node_grid) + { + return; + } + + level.node_grid = level.node_grid * 0.5; + if(level.node_grid < 64) + { + level.node_grid = 0; + } + + hud_update_gridsize(); +} + +//Function Number: 43 +grid_toggle() +{ + if(level.node_grid == 256) + { + level.node_grid = 0; + } + else + { + level.node_grid = 256; + } + + hud_update_gridsize(); +} + +//Function Number: 44 +select_traced_node(param_00) +{ + select_node(param_00["entity"]); +} + +//Function Number: 45 +select_node(param_00) +{ + if(level.node_select_locked && isdefined(level.selected_node)) + { + return; + } + + place_new_dummy_guy_and_animate_at_node(param_00); + level.selector_model dontinterpolate(); + level.selector_model.origin = param_00.origin; + level.selector_model.angles = param_00.angles; + level.selector_model show(); + level.selected_node = param_00; +} + +//Function Number: 46 +place_new_dummy_guy_and_animate_at_node(param_00) +{ + if(!level.dummyguy.size || isdefined(param_00.has_dummy_guy) || !node_has_animations(param_00)) + { + return; + } + + var_01 = fifo_dummyguy(); + if(isdefined(var_01.lastnode)) + { + var_01.lastnode.has_dummy_guy = undefined; + } + + var_01 thread func_1746(param_00); +} + +//Function Number: 47 +select_coliding_node() +{ + select_node(level.coliding_node); +} + +//Function Number: 48 +func_1730() +{ + if(level.node_select_locked && isdefined(level.selected_node)) + { + return; + } + + level.selector_model hide(); + level.selected_node = undefined; +} + +//Function Number: 49 +func_1731() +{ + for(;;) + { + if(!isdefined(level.selected_node)) + { + wait 0.05; + continue; + } + + var_00 = level.selected_node.model; + var_01 = anglestoright(level.player getplayerangles()) * var_00.size * -3; + thread maps\_utility::debug_message(var_00,level.selected_node.origin + var_01,0.05); + wait 0.05; + } +} + +//Function Number: 50 +func_1733() +{ + if(level.node_select_locked) + { + level.selection_lock_indicator _settext(""); + level.node_select_locked = 0; + return; + } + + level.selection_lock_indicator _settext("^1Selection Lock On"); + level.node_select_locked = 1; +} + +//Function Number: 51 +set_button_funcs_main() +{ + clear_all_button_funcs(); + add_button_func(::dump_nodes,0,"w"); + add_button_func(::func_1717,0,"BUTTON_LSHLDR"); + add_button_func(::func_1713,0,"BUTTON_RSHLDR"); + add_button_func(::place_node_place_at_feet,0,"BUTTON_RSTICK"); + add_button_func(::setgroup_down,0,"BUTTON_X"); + add_button_func(::setgroup_up,0,"BUTTON_Y"); + add_button_func(::setgroup_down,0,"DPAD_UP"); + add_button_func(::setgroup_up,0,"DPAD_DOWN"); + add_button_func(::grid_toggle,0,"BUTTON_A"); + add_button_func(::toggle_animation_preview,0,"BUTTON_B"); +} + +//Function Number: 52 +clear_all_button_funcs() +{ + level.var_1708 = []; + level.button_func_isflow = []; +} + +//Function Number: 53 +func_1736() +{ + clear_all_button_funcs(); + add_button_func(::dump_nodes,0,"w"); + add_button_func(::select_node_cover_left,0,"BUTTON_LSHLDR"); + add_button_func(::select_node_cover_right,0,"BUTTON_RSHLDR"); + add_button_func(::select_node_pathnode,0,"BUTTON_LTRIG"); + add_button_func(::select_node_pathnode,0,"BUTTON_RTRIG"); + add_button_func(::select_node_pathnode,0,"BUTTON_RSTICK"); + add_button_func(::func_173B,0,"BUTTON_X"); + add_button_func(::select_node_cover_prone,0,"BUTTON_Y"); + add_button_func(::select_node_concealment_stand,0,"DPAD_UP"); + add_button_func(::select_node_concealment_prone,0,"DPAD_DOWN"); + add_button_func(::func_173E,0,"DPAD_RGIHT"); + add_button_func(::func_173D,0,"BUTTON_A"); + add_button_func(::select_node_cover_crouch,0,"BUTTON_B"); +} + +//Function Number: 54 +func_1737() +{ + controler_hud_update_text("helpxy","^4Cover Crouch Window ^7/ ^3Prone"); + controler_hud_update_text("helpab","^2Cover Stand ^7/ ^1Crouch"); + controler_hud_update_text("helplsrs","^8 - ^7/ Pathnode"); + controler_hud_update_text("helplbrb","^8Cover Left ^7/ Right"); + controler_hud_update_text("helpdpl","^8Conceal - ^7/ Crouch"); + controler_hud_update_text("helpdpu","^8Conceal Stand ^7/ Prone"); +} + +//Function Number: 55 +hint_buttons_main() +{ + controler_hud_update_text("helpxy","^4Node Type Up ^7/ ^3Down"); + controler_hud_update_text("helpab","^2Toggle Grid ^7/ ^1Anim Preview "); + controler_hud_update_text("helplsrs","^8Quick Pick ^7/ Place at Player"); + controler_hud_update_text("helplbrb","^8Remove ^7/ Place"); + controler_hud_update_text("helpdpl","^8- ^7/ -"); + controler_hud_update_text("helpdpu","^8Node Type Up ^7/ Down"); + var_00 = "( dump ) ^3map_source / xenon_export/" + level.script + "_nodedump.map"; + controler_hud_update_text("helpF",var_00); +} + +//Function Number: 56 +select_node_cover_crouch() +{ + setcurrentgroup("node_cover_crouch"); +} + +//Function Number: 57 +select_node_pathnode() +{ + setcurrentgroup("node_pathnode"); +} + +//Function Number: 58 +func_173B() +{ + setcurrentgroup("node_cover_crouch_window"); +} + +//Function Number: 59 +select_node_cover_prone() +{ + setcurrentgroup("node_cover_prone"); +} + +//Function Number: 60 +func_173D() +{ + setcurrentgroup("node_cover_stand"); +} + +//Function Number: 61 +func_173E() +{ + setcurrentgroup("node_concealment_crouch"); +} + +//Function Number: 62 +select_node_concealment_prone() +{ + setcurrentgroup("node_concealment_prone"); +} + +//Function Number: 63 +select_node_concealment_stand() +{ + setcurrentgroup("node_concealment_stand"); +} + +//Function Number: 64 +select_node_cover_left() +{ + setcurrentgroup("node_cover_left"); +} + +//Function Number: 65 +select_node_cover_right() +{ + setcurrentgroup("node_cover_right"); +} + +//Function Number: 66 +set_button_funcs_quick_select() +{ + clear_all_button_funcs(); + func_1736(); + func_1737(); +} + +//Function Number: 67 +func_1744() +{ + set_button_funcs_main(); + hint_buttons_main(); +} + +//Function Number: 68 +_newhudelem() +{ + if(!isdefined(level.noder_elems)) + { + level.noder_elems = []; + } + + var_00 = newhudelem(); + level.noder_elems[level.noder_elems.size] = var_00; + return var_00; +} + +//Function Number: 69 +_settext(param_00) +{ + self.realtext = param_00; + foreach(var_02 in level.noder_elems) + { + if(isdefined(var_02.realtext)) + { + var_02 settext(var_02.realtext); + } + } +} + +//Function Number: 70 +func_1746(param_00) +{ + var_01 = param_00.origin + (0,0,-32); + var_02 = param_00.angles + level.node_offset[param_00.model]; + param_00.has_dummy_guy = self; + self.lastnode = param_00; + level.dummynode[self.dummyguyindex] notify("stop_loop"); + level.dummynode[self.dummyguyindex].origin = var_01; + level.dummynode[self.dummyguyindex].angles = var_02; + level.dummynode[self.dummyguyindex] dontinterpolate(); + self dontinterpolate(); + self show(); + self.is_hidden = 0; + level.dummynode[self.dummyguyindex] maps\_anim::anim_generic_loop(self,param_00.model); +} + +//Function Number: 71 +fifo_dummyguy() +{ + level.var_16EA++; + if(level.var_16EA == level.dummyguy_index_max) + { + level.var_16EA = 0; + } + + var_00 = level.dummyguy[level.var_16EA]; + return var_00; +} + +//Function Number: 72 +node_has_animations(param_00) +{ + if(isdefined(level.scr_anim["generic"][param_00.model])) + { + return 1; + } + + return 0; +} + +//Function Number: 73 +toggle_animation_preview() +{ + if(level.node_animation_preview) + { + level.node_animation_preview_indicator _settext("^1Anim Preview Off"); + level.node_animation_preview = 0; + hide_all_dummyguys(); + return; + } + + level.node_animation_preview_indicator _settext(""); + level.node_animation_preview = 1; + show_all_dummyguys(); +} + +//Function Number: 74 +hide_all_dummyguys() +{ + foreach(var_01 in level.dummyguy) + { + if(!isdefined(var_01.is_hidden) || !var_01.is_hidden) + { + var_01 hide(); + } + } +} + +//Function Number: 75 +show_all_dummyguys() +{ + foreach(var_01 in level.dummyguy) + { + if(!isdefined(var_01.is_hidden) || !var_01.is_hidden) + { + var_01 show(); + } + } +} + +//Function Number: 76 +draw_lines_to_connectible_nodes(param_00) +{ + foreach(var_02 in level.var_1718) + { + if(!isdefined(var_02.classname)) + { + continue; + } + } +} + +//Function Number: 77 +manage_nearnodes() +{ + level endon("dump_nodes"); + level.var_1718 = []; + var_00 = getallnodes(); + var_01 = 0; + var_02 = 1000; + var_03 = []; + level.nearnodes_time = 0; + wait 0.05; + for(;;) + { + var_04 = var_00; + foreach(var_06 in level.placed_nodes) + { + var_04[var_04.size] = var_06; + } + + var_08 = level.placed_nodes.size; + foreach(var_06 in var_04) + { + var_03[var_03.size] = var_06; + var_01++; + if(level.placed_nodes.size != var_08) + { + var_03 = []; + var_01 = 0; + break; + } + + if(var_01 > var_02) + { + var_0A = []; + foreach(var_0C in level.var_1718) + { + if(distancesquared((level.preview_node.origin[0],level.preview_node.origin[1],0),(var_0C.origin[0],var_0C.origin[1],0)) <= 65536) + { + var_0A[var_0A.size] = var_0C; + } + } + + var_0E = []; + foreach(var_10 in var_03) + { + if(distancesquared((level.preview_node.origin[0],level.preview_node.origin[1],0),(var_10.origin[0],var_10.origin[1],0)) <= 65536) + { + var_0E[var_0E.size] = var_10; + } + } + + level.var_1718 = maps\_utility::array_merge(var_0E,var_0A); + var_03 = []; + var_01 = 0; + wait 0.05; + waittillframeend; + } + + if(level.var_16E2) + { + level.var_16E2 = 0; + var_03 = []; + var_01 = 0; + break; + } + } + + wait 0.05; + } +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_overheat.gsc b/MW3/Xbox/SP/maps/_overheat.gsc new file mode 100644 index 0000000..0f1fa84 --- /dev/null +++ b/MW3/Xbox/SP/maps/_overheat.gsc @@ -0,0 +1,230 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_overheat.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 8 + * Decompile Time: 132 ms + * Timestamp: 10/27/2023 2:34:30 AM +*******************************************************************/ + +//Function Number: 1 +func_3C6F() +{ + precacheshader("hud_temperature_gauge"); +} + +//Function Number: 2 +overheat_enable(param_00) +{ + if(isdefined(self.var_37C2)) + { + return; + } + + self.var_37C2 = spawnstruct(); + self.var_37C2.turret_heat_status = 1; + self.var_37C2.overheated = 0; + self.var_37C2.var_3C72 = 114; + self.var_37C2.turret_heat_rate = 1; + self.var_37C2.turret_cool_rate = 1; + self.var_37C2.var_3C75 = 2; + self.var_37C2.var_3C76 = 0.2; + self.var_37C2.overheat_flash_time_increment = 0.1; + self.var_37C2.var_3C78 = 2; + thread create_hud(); + thread status_meter_update(param_00); +} + +//Function Number: 3 +overheat_disable() +{ + self notify("disable_overheat"); + level.savehere = undefined; + waittillframeend; + if(isdefined(self.var_37C2.var_3C7A)) + { + self.var_37C2.var_3C7A destroy(); + } + + if(isdefined(self.var_37C2.var_3C7B)) + { + self.var_37C2.var_3C7B destroy(); + } + + self.var_37C2 = undefined; +} + +//Function Number: 4 +status_meter_update(param_00) +{ + self endon("disable_overheat"); + for(;;) + { + if(self.var_37C2.turret_heat_status >= self.var_37C2.var_3C72) + { + wait 0.05; + continue; + } + + if(self attackbuttonpressed() && !self.var_37C2.overheated) + { + self.var_37C2.turret_heat_status = self.var_37C2.turret_heat_status + self.var_37C2.turret_heat_rate; + } + else + { + self.var_37C2.turret_heat_status = self.var_37C2.turret_heat_status - self.var_37C2.turret_cool_rate; + } + + self.var_37C2.turret_heat_status = clamp(self.var_37C2.turret_heat_status,1,self.var_37C2.var_3C72); + func_3C7D(); + thread overheated(param_00); + wait 0.05; + } +} + +//Function Number: 5 +func_3C7D() +{ + self.var_37C2.var_3C7B scaleovertime(0.05,10,int(self.var_37C2.turret_heat_status)); + thread func_3C7F(self.var_37C2.turret_heat_status,0.05); +} + +//Function Number: 6 +create_hud() +{ + self endon("disable_overheat"); + var_00 = 0; + if(maps\_utility::func_E89()) + { + var_00 = 70; + } + + var_01 = -10; + var_02 = -152 + var_00; + if(!isdefined(self.var_37C2.var_3C7A)) + { + self.var_37C2.var_3C7A = newclienthudelem(self); + self.var_37C2.var_3C7A.alignx = "right"; + self.var_37C2.var_3C7A.aligny = "bottom"; + self.var_37C2.var_3C7A.horzalign = "right"; + self.var_37C2.var_3C7A.vertalign = "bottom"; + self.var_37C2.var_3C7A.x = 2; + self.var_37C2.var_3C7A.y = -120 + var_00; + self.var_37C2.var_3C7A setshader("hud_temperature_gauge",35,150); + self.var_37C2.var_3C7A.sort = 4; + } + + if(!isdefined(self.var_37C2.var_3C7B)) + { + self.var_37C2.var_3C7B = newclienthudelem(self); + self.var_37C2.var_3C7B.alignx = "right"; + self.var_37C2.var_3C7B.aligny = "bottom"; + self.var_37C2.var_3C7B.horzalign = "right"; + self.var_37C2.var_3C7B.vertalign = "bottom"; + self.var_37C2.var_3C7B.x = var_01; + self.var_37C2.var_3C7B.y = var_02; + self.var_37C2.var_3C7B setshader("white",10,1); + self.var_37C2.var_3C7B.color = (1,0.9,0); + self.var_37C2.var_3C7B.alpha = 1; + self.var_37C2.var_3C7B.sort = 1; + } +} + +//Function Number: 7 +overheated(param_00) +{ + self endon("disable_overheat"); + if(self.var_37C2.turret_heat_status < self.var_37C2.var_3C72) + { + return; + } + + if(self.var_37C2.overheated) + { + return; + } + + self.var_37C2.overheated = 1; + level.savehere = 0; + thread maps\_utility::play_sound_on_entity("smokegrenade_explode_default"); + self.var_37C2.turret_heat_status = self.var_37C2.var_3C72; + if(isdefined(param_00.mgturret)) + { + param_00.mgturret[0] turretfiredisable(); + } + + var_01 = gettime(); + var_02 = self.var_37C2.var_3C76; + for(;;) + { + self.var_37C2.var_3C7B fadeovertime(var_02); + self.var_37C2.var_3C7B.alpha = 0.2; + wait var_02; + self.var_37C2.var_3C7B fadeovertime(var_02); + self.var_37C2.var_3C7B.alpha = 1; + wait var_02; + var_02 = var_02 + self.var_37C2.overheat_flash_time_increment; + if(gettime() - var_01 >= self.var_37C2.var_3C75 * 1000) + { + break; + } + } + + self.var_37C2.var_3C7B.alpha = 1; + self.var_37C2.turret_heat_status = self.var_37C2.turret_heat_status - self.var_37C2.turret_cool_rate; + wait self.var_37C2.var_3C78; + if(isdefined(param_00.mgturret)) + { + param_00.mgturret[0] turretfireenable(); + } + + level.savehere = undefined; + self.var_37C2.overheated = 0; +} + +//Function Number: 8 +func_3C7F(param_00,param_01) +{ + self endon("disable_overheat"); + var_02 = []; + var_03 = []; + var_04 = []; + var_05 = []; + var_06 = 0; + var_07 = self.var_37C2.var_3C72 / 2; + var_08 = self.var_37C2.var_3C72; + var_09 = undefined; + var_0A = undefined; + var_0B = undefined; + if(param_01 > var_06 && param_01 <= var_07) + { + var_09 = int(param_01 * 100 / var_07); + for(var_0C = 0;var_0C < var_05.size;var_0C++ = var_41[2]) + { + var_0A = var_03[var_0C] - var_41[var_0C]; + var_0B = var_0A / 100; + var_05[var_0C] = var_41[var_0C] + var_0B * var_09; + } + } + else if(param_01 > var_07 && param_01 <= var_08) + { + var_09 = int(param_01 - var_07 * 100 / var_08 - var_07); + for(var_0C = 0;var_0C < var_05.size;var_0C++ = var_41[2]) + { + var_0A = var_04[var_0C] - var_03[var_0C]; + var_0B = var_0A / 100; + var_05[var_0C] = var_03[var_0C] + var_0B * var_09; + } + } + + if(isdefined(var_02)) + { + self.var_37C2.var_3C7B fadeovertime(var_02); + } + + if(isdefined(self.var_37C2.var_3C7B.color)) + { + self.var_37C2.var_3C7B.color = (var_05[0],var_05[1],var_05[2]); + } +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_patrol.gsc b/MW3/Xbox/SP/maps/_patrol.gsc new file mode 100644 index 0000000..0e5d36c --- /dev/null +++ b/MW3/Xbox/SP/maps/_patrol.gsc @@ -0,0 +1,809 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_patrol.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 23 + * Decompile Time: 412 ms + * Timestamp: 10/27/2023 2:35:41 AM +*******************************************************************/ + +//Function Number: 1 +patrol(param_00) +{ + if(isdefined(self.enemy)) + { + return; + } + + self endon("enemy"); + self endon("death"); + self endon("damage"); + self endon("end_patrol"); + waittillframeend; + if(isdefined(self.var_1BD1)) + { + [[ level.global_callbacks["_patrol_endon_spotted_flag"] ]](); + } + + thread waittill_combat(); + thread func_1BEF(); + self.goalradius = 32; + self allowedstances("stand"); + self.disablearrivals = 1; + self.disableexits = 1; + self.allowdeath = 1; + self.script_patroller = 1; + maps\_utility::disable_cqbwalk(); + func_1BF6(); + set_patrol_run_anim_array(); + var_01["ent"][1] = ::get_target_ents; + var_29["ent"] = 0; + var_29["node"] = 1; + var_29["node"] = 0; + var_29["struct"] = 1; + var_29["struct"] = 0; + param_00["ent"] = ::maps\_utility::set_goal_ent; + if(isdefined(var_01)) + { + self.target = var_01; + } + + if(isdefined(self.target)) + { + var_03 = 1; + var_04 = get_target_ents(); + var_05 = get_target_nodes(); + var_06 = func_0FD7(); + if(var_04.size) + { + var_07 = common_scripts\utility::random(var_04); + var_08 = "ent"; + } + else if(var_07.size) + { + var_07 = common_scripts\utility::random(var_07); + var_08 = "node"; + } + else + { + var_07 = common_scripts\utility::random(var_08); + var_08 = "struct"; + } + } + else + { + var_03 = 0; + var_04 = common_scripts\utility::get_linked_ents(); + var_05 = func_1BF4(); + var_06 = maps\_utility::get_linked_structs(); + if(var_06.size) + { + var_07 = common_scripts\utility::random(var_06); + var_08 = "ent"; + } + else if(var_07.size) + { + var_07 = common_scripts\utility::random(var_07); + var_08 = "node"; + } + else + { + var_07 = common_scripts\utility::random(var_08); + var_08 = "struct"; + } + } + + var_09 = []; + var_0A = var_07; + for(;;) + { + while(isdefined(var_0A.var_1BD7)) + { + wait 0.05; + } + + var_07.var_1BD7 = undefined; + var_07 = var_0A; + self notify("release_node",var_41["phone"],"patrol_idle_phone",var_41["checkphone"],"patrol_idle_checkphone",var_41["stretch"],"patrol_idle_stretch",var_41["smoke"],"patrol_idle_smoke",var_41["turn180"],common_scripts\utility::ter_op(isdefined(self.var_1BD6),self.var_1BD6,"patrol_turn180"),var_41["pause"],"patrol_idle_",var_41["struct"],::maps\_utility::set_goal_ent,var_41["node"],::maps\_utility::set_goal_node,::maps\_utility::get_linked_structs,::func_0FD7,::func_1BF4,::get_target_nodes,::common_scripts\utility::get_linked_ents); + var_07.var_1BD7 = 1; + self.var_1BD8 = var_07; + [[ var_41[var_08] ]](var_07); + if(isdefined(var_07.radius) && var_07.radius > 0) + { + self.goalradius = var_07.radius; + } + else + { + self.goalradius = 32; + } + + self waittill("goal"); + var_07 notify("trigger",self); + if(isdefined(var_07.script_flag_set)) + { + common_scripts\utility::flag_set(var_07.script_flag_set); + } + + if(isdefined(var_07.script_ent_flag_set)) + { + maps\_utility::func_FA4(var_07.script_ent_flag_set); + } + + if(isdefined(var_07.script_flag_clear)) + { + common_scripts\utility::flag_clear(var_07.script_flag_clear); + } + + var_0B = var_07 [[ var_29[var_08][var_03] ]](); + if(!var_0B.size) + { + self notify("reached_path_end"); + self notify("_patrol_reached_path_end"); + if(isalive(self.var_1BDC)) + { + self.var_1BDC notify("master_reached_patrol_end"); + } + } + + if(isdefined(var_07.script_flag_wait)) + { + common_scripts\utility::flag_wait(var_07.script_flag_wait); + } + + var_07 maps\_utility::script_delay(); + var_0C = ::animscripts/reactions::reactionscheckloop; + var_0D = var_07.script_animation; + if(isdefined(var_0D)) + { + if(!isdefined(self.patrol_no_stop_transition)) + { + patrol_do_stop_transition_anim(var_0D,var_0C,var_07); + } + + if(isdefined(var_07.script_faceangles)) + { + self orientmode("face angle",var_07.angles[1]); + } + + self.var_1BE0 = 1; + var_0E = var_09[var_0D]; + if(isdefined(var_0E)) + { + if(var_0D == "pause") + { + if(isdefined(self.patrol_scriptedanim) && isdefined(self.patrol_scriptedanim[var_0D])) + { + var_0E = self.patrol_scriptedanim[var_0D][randomint(self.patrol_scriptedanim[var_0D].size)]; + } + else + { + var_0E = var_0E + randomintrange(1,6); + } + } + + maps\_anim::anim_generic_custom_animmode(self,"gravity",var_0E,undefined,var_0C); + if(var_0B.size && var_0D != "turn180") + { + patrol_do_start_transition_anim(var_0D,var_0C); + } + } + + self.var_1BE0 = undefined; + } + + if(!var_0B.size) + { + if(isdefined(self.patrol_end_idle) && !isdefined(var_0D)) + { + patrol_do_stop_transition_anim("path_end_idle",var_0C,var_07); + for(;;) + { + var_0F = self.patrol_end_idle[randomint(self.patrol_end_idle.size)]; + maps\_anim::anim_generic_custom_animmode(self,"gravity",var_0F,undefined,var_0C); + } + } + + break; + } + + var_0A = common_scripts\utility::random(var_0B); + } +} + +//Function Number: 2 +patrol_do_stop_transition_anim(param_00,param_01,param_02) +{ + var_03 = self; + var_04 = 0; + if(isdefined(param_02.script_faceangles)) + { + var_03 = param_02; + self.noteleport = 1; + var_04 = 1; + } + + if(isdefined(self.patrol_stop) && isdefined(self.patrol_stop[param_00])) + { + var_03 maps\_anim::anim_generic_custom_animmode(self,"gravity",self.patrol_stop[param_00],undefined,param_01,var_04); + return; + } + + var_03 maps\_anim::anim_generic_custom_animmode(self,"gravity","patrol_stop",undefined,param_01,var_04); +} + +//Function Number: 3 +patrol_do_start_transition_anim(param_00,param_01) +{ + if(isdefined(self.var_1BE6) && isdefined(self.var_1BE6[param_00])) + { + maps\_anim::anim_generic_custom_animmode(self,"gravity",self.var_1BE6[param_00],undefined,param_01); + return; + } + + maps\_anim::anim_generic_custom_animmode(self,"gravity","patrol_start",undefined,param_01); +} + +//Function Number: 4 +func_1BE7() +{ + if(self.a.var_911 == "crouch" && isdefined(self.a.array)) + { + var_00 = self.a.array["stance_change"]; + if(isdefined(var_00)) + { + self setflaggedanimknoballrestart("stand_up",var_00,%root,1); + animscripts/shared::donotetracks("stand_up"); + } + } +} + +//Function Number: 5 +func_1BE8() +{ + self endon("enemy"); + self animmode("zonly_physics",0); + self orientmode("face current"); + func_1BE7(); + var_00 = level.scr_anim["generic"]["patrol_radio_in_clear"]; + self setflaggedanimknoballrestart("radio",var_00,%root,1); + animscripts/shared::donotetracks("radio"); + turn_180_move_start_func(); +} + +//Function Number: 6 +turn_180_move_start_func() +{ + if(!isdefined(self.pathgoalpos)) + { + return; + } + + var_00 = self.pathgoalpos; + var_01 = var_00 - self.origin; + var_01 = (var_01[0],var_01[1],0); + var_02 = lengthsquared(var_01); + if(var_02 < 1) + { + return; + } + + var_01 = var_01 / sqrt(var_02); + var_03 = anglestoforward(self.angles); + if(vectordot(var_03,var_01) < -0.5) + { + self animmode("zonly_physics",0); + self orientmode("face current"); + func_1BE7(); + var_04 = level.scr_anim["generic"]["patrol_turn180"]; + self setflaggedanimknoballrestart("move",var_04,%root,1); + if(animhasnotetrack(var_04,"code_move")) + { + animscripts/shared::donotetracks("move"); + self orientmode("face motion"); + self animmode("none",0); + } + + animscripts/shared::donotetracks("move"); + } +} + +//Function Number: 7 +set_patrol_run_anim_array() +{ + var_00 = "patrol_walk"; + if(isdefined(self.patrol_walk_anim)) + { + var_00 = self.patrol_walk_anim; + } + + var_01 = undefined; + if(isdefined(self.patrol_walk_twitch)) + { + var_01 = self.patrol_walk_twitch; + } + + maps\_utility::set_generic_run_anim_array(var_00,var_01); +} + +//Function Number: 8 +func_1BED() +{ + self endon("end_patrol"); + if(isdefined(self.var_1BEE)) + { + self.var_1BEE endon("death"); + } + + self waittill("enemy"); +} + +//Function Number: 9 +func_1BEF() +{ + self waittill("death"); + if(!isdefined(self)) + { + return; + } + + self notify("release_node"); + if(!isdefined(self.var_1BD8)) + { + return; + } + + self.var_1BD8.var_1BD7 = undefined; +} + +//Function Number: 10 +waittill_combat() +{ + self endon("death"); + func_1BED(); + var_00 = maps\_utility::ent_flag_exist("_stealth_enabled") && maps\_utility::ent_flag("_stealth_enabled"); + if(!var_00) + { + maps\_utility::clear_run_anim(); + self allowedstances("stand","crouch","prone"); + self.disablearrivals = 0; + self.disableexits = 0; + self stopanimscripted(); + self notify("stop_animmode"); + self.script_nobark = undefined; + self.goalradius = level.default_goalradius; + } + + if(isdefined(self.var_1BF3)) + { + self.interval = self.var_1BF3; + } + + self.moveplaybackrate = 1; + if(!isdefined(self)) + { + return; + } + + self notify("release_node"); + if(!isdefined(self.var_1BD8)) + { + return; + } + + self.var_1BD8.var_1BD7 = undefined; +} + +//Function Number: 11 +get_target_ents() +{ + var_00 = []; + if(isdefined(self.target)) + { + var_00 = getentarray(self.target,"targetname"); + } + + return var_00; +} + +//Function Number: 12 +get_target_nodes() +{ + var_00 = []; + if(isdefined(self.target)) + { + var_00 = getnodearray(self.target,"targetname"); + } + + return var_00; +} + +//Function Number: 13 +func_0FD7() +{ + var_00 = []; + if(isdefined(self.target)) + { + var_00 = common_scripts\utility::getstructarray(self.target,"targetname"); + } + + return var_00; +} + +//Function Number: 14 +func_1BF4() +{ + var_00 = []; + if(isdefined(self.script_linkto)) + { + var_01 = strtok(self.script_linkto," "); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + var_03 = getnode(var_01[var_02],"script_linkname"); + if(isdefined(var_03)) + { + var_00[var_00.size] = var_03; + } + } + } + + return var_00; +} + +//Function Number: 15 +showclaimed(param_00) +{ + self endon("release_node"); +} + +//Function Number: 16 +func_1BF6() +{ + if(isdefined(self.var_1BDC)) + { + self.var_1BDC thread pet_patrol(); + return; + } + + if(!isdefined(self.script_pet)) + { + return; + } + + waittillframeend; + var_00 = getaispeciesarray(self.team,"dog"); + var_01 = undefined; + for(var_02 = 0;var_02 < var_00.size;var_02++) + { + if(!isdefined(var_00[var_02].script_pet)) + { + continue; + } + + if(var_00[var_02].script_pet != self.script_pet) + { + continue; + } + + var_01 = var_00[var_02]; + self.var_1BDC = var_01; + var_01.var_1BEE = self; + break; + } + + if(!isdefined(var_01)) + { + return; + } + + var_01 thread pet_patrol(); +} + +//Function Number: 17 +pet_patrol() +{ + maps\_utility::func_F77(self); + if(isdefined(self.enemy)) + { + return; + } + + self endon("enemy"); + self endon("death"); + self endon("end_patrol"); + if(isdefined(self.var_1BD1)) + { + [[ level.global_callbacks["_patrol_endon_spotted_flag"] ]](); + } + + self.var_1BEE endon("death"); + thread waittill_combat(); + self.goalradius = 4; + self.allowdeath = 1; + var_00 = func_1BFA(); + var_01 = vectornormalize(self.origin - self.var_1BEE.origin); + var_02 = anglestoright(self.var_1BEE.angles); + var_03 = "left"; + if(vectordot(var_01,var_02) > 0) + { + var_03 = "right"; + } + + wait 1; + thread func_1C01(); + thread pet_patrol_handle_movespeed(); + self.var_1BF3 = self.interval; + self.interval = 70; + for(;;) + { + if(isdefined(self.var_1BEE) && !isdefined(self.var_1BEE.var_1BE0)) + { + var_00 = func_1BFC(var_00); + if(var_03 == "null") + { + var_03 = "back"; + } + + var_03 = pet_patrol_get_available_origin(var_00,var_03); + self.patrol_goal_pos = var_00[var_03].origin; + } + else + { + self.patrol_goal_pos = self.origin; + } + + self setgoalpos(self.patrol_goal_pos); + wait 0.05; + } +} + +//Function Number: 18 +func_1BFA() +{ + var_00 = []; + var_01 = spawnstruct(); + var_01.options = []; + var_01.options[var_01.options.size] = "right"; + var_01.options[var_01.options.size] = "back_right"; + var_02 = spawnstruct(); + var_02.options = []; + var_02.options[var_02.options.size] = "right"; + var_02.options[var_02.options.size] = "back_right"; + var_02.options[var_02.options.size] = "back"; + var_03 = spawnstruct(); + var_03.options = []; + var_03.options[var_03.options.size] = "back_right"; + var_03.options[var_03.options.size] = "back_left"; + var_03.options[var_03.options.size] = "back"; + var_04 = spawnstruct(); + var_04.options = []; + var_04.options[var_04.options.size] = "left"; + var_04.options[var_04.options.size] = "back_left"; + var_04.options[var_04.options.size] = "back"; + var_05 = spawnstruct(); + var_05.options = []; + var_05.options[var_05.options.size] = "left"; + var_05.options[var_05.options.size] = "back_left"; + var_06 = spawnstruct(); + var_00["right"] = var_01; + var_00["left"] = var_05; + var_00["back_right"] = var_02; + var_00["back_left"] = var_04; + var_00["back"] = var_03; + var_00["null"] = var_06; + return var_00; +} + +//Function Number: 19 +func_1BFC(param_00) +{ + var_01 = vectortoangles(self.var_1BEE.var_1BD8.origin - self.var_1BEE.origin); + var_02 = self.var_1BEE.origin; + var_03 = anglestoright(var_01); + var_04 = anglestoforward(var_01); + param_00["right"].origin = var_02 + var_03 * 40 + var_04 * 30; + param_00["left"].origin = var_02 + var_03 * -40 + var_04 * 30; + param_00["back_right"].origin = var_02 + var_03 * 32 + var_04 * -16; + param_00["back_left"].origin = var_02 + var_03 * -32 + var_04 * -16; + param_00["back"].origin = var_02 + var_04 * -48; + param_00["null"].origin = self.origin; + var_05 = getarraykeys(param_00); + for(var_06 = 0;var_06 < var_05.size;var_06++) + { + var_07 = var_05[var_06]; + param_00[var_07].var_1BFD = 0; + param_00[var_07].recursed = 0; + } + + return param_00; +} + +//Function Number: 20 +pet_debug_positions(param_00) +{ + var_01 = getarraykeys(param_00); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + var_03 = var_01[var_02]; + if(var_03 == "null") + { + continue; + } + } +} + +//Function Number: 21 +pet_patrol_get_available_origin(param_00,param_01) +{ + param_00[param_01].recursed = 1; + for(var_02 = 0;var_02 < param_00[param_01].options.size;var_02++) + { + var_03 = param_00[param_01].options[var_02]; + if(param_00[var_03].var_1BFD) + { + continue; + } + + if(self maymovetopoint(param_00[var_03].origin)) + { + return var_03; + } + + param_00[var_03].var_1BFD = 1; + } + + for(var_02 = 0;var_02 < param_00[param_01].options.size;var_02++) + { + var_03 = param_00[param_01].options[var_02]; + if(param_00[var_03].recursed) + { + continue; + } + + var_03 = pet_patrol_get_available_origin(param_00,var_03); + return var_03; + } + + return "null"; +} + +//Function Number: 22 +func_1C01(param_00) +{ + if(isdefined(self.enemy)) + { + return; + } + + self endon("enemy"); + self endon("death"); + self endon("end_patrol"); + self.var_1BEE endon("death"); + if(isdefined(self.var_1BEE.script_noteworthy) && self.var_1BEE.script_noteworthy == "cqb_patrol") + { + maps\_utility::set_dog_walk_anim(); + return; + } + + if(!isdefined(param_00)) + { + param_00 = 200; + } + + maps\_utility::set_dog_walk_anim(); + for(;;) + { + wait 0.1; + var_01 = self.patrol_goal_pos; + var_02 = distancesquared(self.origin,self.patrol_goal_pos); + if(var_02 > squared(param_00)) + { + if(self.a.movement == "run") + { + continue; + } + + maps\_anim::anim_generic_custom_animmode(self,"gravity","patrol_dog_start"); + maps\_utility::clear_run_anim(); + self.script_nobark = 1; + continue; + } + + if(self.a.movement != "walk") + { + self notify("stopped_while_patrolling"); + maps\_anim::anim_generic_custom_animmode(self,"gravity","patrol_dog_stop"); + maps\_utility::set_dog_walk_anim(); + } + } +} + +//Function Number: 23 +pet_patrol_handle_movespeed(param_00,param_01) +{ + if(isdefined(self.enemy)) + { + return; + } + + self endon("enemy"); + self endon("death"); + self endon("end_patrol"); + self.var_1BEE endon("death"); + if(isdefined(self.var_1BEE.script_noteworthy) && self.var_1BEE.script_noteworthy == "cqb_patrol") + { + for(;;) + { + wait 0.05; + var_02 = self.patrol_goal_pos; + var_03 = distancesquared(self.origin,self.patrol_goal_pos); + if(var_03 < squared(16)) + { + if(self.moveplaybackrate > 0.4) + { + self.moveplaybackrate = self.moveplaybackrate - 0.05; + } + + continue; + } + + if(var_03 > squared(48)) + { + if(self.moveplaybackrate < 1.8) + { + self.moveplaybackrate = self.moveplaybackrate + 0.05; + } + + continue; + } + + self.moveplaybackrate = 1; + } + } + + if(!isdefined(param_00)) + { + param_00 = 16; + } + + if(!isdefined(param_01)) + { + param_01 = 48; + } + + var_04 = param_00 * param_00; + var_05 = param_01 * param_01; + for(;;) + { + wait 0.05; + var_02 = self.patrol_goal_pos; + var_03 = distancesquared(self.origin,self.patrol_goal_pos); + if(self.a.movement != "walk") + { + self.moveplaybackrate = 1; + continue; + } + + if(var_03 < var_04) + { + if(self.moveplaybackrate > 0.4) + { + self.moveplaybackrate = self.moveplaybackrate - 0.05; + } + + continue; + } + + if(var_03 > var_05) + { + if(self.moveplaybackrate < 0.75) + { + self.moveplaybackrate = self.moveplaybackrate + 0.05; + } + + continue; + } + + self.moveplaybackrate = 0.5; + } +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_player_stats.gsc b/MW3/Xbox/SP/maps/_player_stats.gsc new file mode 100644 index 0000000..42aaea8 --- /dev/null +++ b/MW3/Xbox/SP/maps/_player_stats.gsc @@ -0,0 +1,341 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_player_stats.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 12 + * Decompile Time: 202 ms + * Timestamp: 10/27/2023 2:34:04 AM +*******************************************************************/ + +//Function Number: 1 +init_stats() +{ + self.stats["kills"] = 0; + self.stats["kills_melee"] = 0; + self.stats["kills_explosives"] = 0; + self.stats["kills_juggernaut"] = 0; + self.stats["kills_vehicle"] = 0; + self.stats["kills_sentry"] = 0; + self.stats["headshots"] = 0; + self.stats["shots_fired"] = 0; + self.stats["shots_hit"] = 0; + self.stats["weapon"] = []; + thread shots_fired_recorder(); +} + +//Function Number: 2 +was_headshot() +{ + if(isdefined(self.died_of_headshot) && self.died_of_headshot) + { + return 1; + } + + if(!isdefined(self.damagelocation)) + { + return 0; + } + + return self.damagelocation == "helmet" || self.damagelocation == "head" || self.damagelocation == "neck"; +} + +//Function Number: 3 +register_kill(param_00,param_01,param_02,param_03) +{ + var_04 = self; + if(isdefined(self.owner)) + { + var_04 = self.owner; + } + + if(!isplayer(var_04)) + { + if(isdefined(level.pmc_match) && level.pmc_match) + { + var_04 = level.players[randomint(level.players.size)]; + } + } + + if(!isplayer(var_04)) + { + return; + } + + if(isdefined(level.var_80DE) && isdefined(param_00.drivingvehicle) && param_00.drivingvehicle) + { + return; + } + + var_04.stats["kills"]++; + var_04 career_stat_increment("kills",1); + if(maps\_utility::is_specialop()) + { + level notify("specops_player_kill",var_04,param_00,param_02,param_03); + } + + if(isdefined(param_00)) + { + if(param_00 was_headshot()) + { + var_04.stats["headshots"]++; + var_04 career_stat_increment("headshots",1); + } + + if(isdefined(param_00.juggernaut)) + { + var_04.stats["kills_juggernaut"]++; + var_04 career_stat_increment("kills_juggernaut",1); + } + + if(isdefined(param_00.issentrygun)) + { + var_04.stats["kills_sentry"]++; + } + + if(param_00.code_classname == "script_vehicle") + { + var_04.stats["kills_vehicle"]++; + if(isdefined(param_00.riders)) + { + foreach(var_06 in param_00.riders) + { + if(isdefined(var_06)) + { + var_04 register_kill(var_06,param_01,param_02,param_03); + } + } + } + } + } + + if(cause_is_explosive(param_01)) + { + var_04.stats["kills_explosives"]++; + } + + if(!isdefined(param_02)) + { + param_02 = var_04 getcurrentweapon(); + } + + if(issubstr(tolower(param_01),"melee")) + { + var_04.stats["kills_melee"]++; + if(weaponinventorytype(param_02) == "primary") + { + return; + } + } + + if(var_04 is_new_weapon(param_02)) + { + var_04 func_065B(param_02); + } + + var_04.stats["weapon"][param_02].kills++; +} + +//Function Number: 4 +career_stat_increment(param_00,param_01) +{ + if(!maps\_utility::is_specialop()) + { + return; + } + + var_02 = int(self getplayerdata("career",param_00)) + param_01; + self setplayerdata("career",param_00,var_02); +} + +//Function Number: 5 +register_shot_hit() +{ + if(!isplayer(self)) + { + return; + } + + if(isdefined(self.registeringshothit)) + { + return; + } + + self.registeringshothit = 1; + self.stats["shots_hit"]++; + career_stat_increment("bullets_hit",1); + var_00 = self getcurrentweapon(); + if(is_new_weapon(var_00)) + { + func_065B(var_00); + } + + self.stats["weapon"][var_00].shots_hit++; + waittillframeend; + self.registeringshothit = undefined; +} + +//Function Number: 6 +shots_fired_recorder() +{ + self endon("death"); + for(;;) + { + self waittill("weapon_fired"); + var_00 = self getcurrentweapon(); + if(!isdefined(var_00) || !maps\_utility::isprimaryweapon(var_00)) + { + continue; + } + + self.stats["shots_fired"]++; + career_stat_increment("bullets_fired",1); + if(is_new_weapon(var_00)) + { + func_065B(var_00); + } + + self.stats["weapon"][var_00].shots_fired++; + } +} + +//Function Number: 7 +is_new_weapon(param_00) +{ + if(isdefined(self.stats["weapon"][param_00])) + { + return 0; + } + + return 1; +} + +//Function Number: 8 +cause_is_explosive(param_00) +{ + param_00 = tolower(param_00); + switch(param_00) + { + case "splash": + case "mod_explosive": + case "mod_projectile_splash": + case "mod_projectile": + case "mod_grenade_splash": + case "mod_grenade": + return 1; + + default: + return 0; + } + + return 0; +} + +//Function Number: 9 +func_065B(param_00) +{ + self.stats["weapon"][param_00] = spawnstruct(); + self.stats["weapon"][param_00].name = param_00; + self.stats["weapon"][param_00].shots_fired = 0; + self.stats["weapon"][param_00].shots_hit = 0; + self.stats["weapon"][param_00].kills = 0; +} + +//Function Number: 10 +func_065C() +{ + var_00 = 1; + foreach(var_02 in level.players) + { + setdvar("stats_" + var_00 + "_kills_melee",var_02.stats["kills_melee"]); + setdvar("stats_" + var_00 + "_kills_juggernaut",var_02.stats["kills_juggernaut"]); + setdvar("stats_" + var_00 + "_kills_explosives",var_02.stats["kills_explosives"]); + setdvar("stats_" + var_00 + "_kills_vehicle",var_02.stats["kills_vehicle"]); + setdvar("stats_" + var_00 + "_kills_sentry",var_02.stats["kills_sentry"]); + var_03 = var_02 get_best_weapons(5); + foreach(var_05 in var_03) + { + var_05.accuracy = 0; + if(var_05.shots_fired > 0) + { + var_05.accuracy = int(var_05.shots_hit / var_05.shots_fired * 100); + } + } + + for(var_07 = 1;var_07 < 6;var_07++) + { + setdvar("stats_" + var_00 + "_weapon" + var_07 + "_name"," "); + setdvar("stats_" + var_00 + "_weapon" + var_07 + "_kills"," "); + setdvar("stats_" + var_00 + "_weapon" + var_07 + "_shots"," "); + setdvar("stats_" + var_00 + "_weapon" + var_07 + "_accuracy"," "); + } + + for(var_07 = 0;var_07 < var_03.size;var_07++) + { + if(!isdefined(var_03[var_07])) + { + break; + } + + setdvar("stats_" + var_00 + "_weapon" + var_07 + 1 + "_name",var_03[var_07].name); + setdvar("stats_" + var_00 + "_weapon" + var_07 + 1 + "_kills",var_03[var_07].kills); + setdvar("stats_" + var_00 + "_weapon" + var_07 + 1 + "_shots",var_03[var_07].shots_fired); + setdvar("stats_" + var_00 + "_weapon" + var_07 + 1 + "_accuracy",var_03[var_07].accuracy + "%"); + } + + var_00++; + } +} + +//Function Number: 11 +get_best_weapons(param_00) +{ + var_01 = []; + for(var_02 = 0;var_02 < param_00;var_02++) + { + var_01[var_02] = get_weapon_with_most_kills(var_01); + } + + return var_01; +} + +//Function Number: 12 +get_weapon_with_most_kills(param_00) +{ + if(!isdefined(param_00)) + { + param_00 = []; + } + + var_01 = undefined; + foreach(var_03 in self.stats["weapon"]) + { + var_04 = 0; + foreach(var_06 in param_00) + { + if(var_03.name == var_06.name) + { + var_04 = 1; + break; + } + } + + if(var_04) + { + continue; + } + + if(!isdefined(var_01)) + { + var_01 = var_03; + continue; + } + + if(var_03.kills > var_01.kills) + { + var_01 = var_03; + } + } + + return var_01; +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_props.gsc b/MW3/Xbox/SP/maps/_props.gsc new file mode 100644 index 0000000..b10cdcd --- /dev/null +++ b/MW3/Xbox/SP/maps/_props.gsc @@ -0,0 +1,240 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_props.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 17 + * Decompile Time: 260 ms + * Timestamp: 10/27/2023 2:34:31 AM +*******************************************************************/ + +//Function Number: 1 +prop_notetrack_exist(param_00,param_01) +{ + if(!isdefined(level.prop_notetracks)) + { + level.prop_notetracks = []; + } + + if(!isdefined(level.prop_notetracks[param_00])) + { + level.prop_notetracks[param_00] = []; + } + + if(isdefined(level.prop_notetracks[param_00][param_01])) + { + return 1; + } + + level.prop_notetracks[param_00][param_01] = 1; + return 0; +} + +//Function Number: 2 +func_3C82(param_00) +{ + if(prop_notetrack_exist(param_00,"add_smoking_notetracks")) + { + return; + } + + maps\_anim::addnotetrack_customfunction(param_00,"attach cig",::attach_cig); + maps\_anim::addnotetrack_customfunction(param_00,"detach cig",::detach_cig); + maps\_anim::addnotetrack_customfunction(param_00,"puff",::func_3C92); + maps\_anim::addnotetrack_customfunction(param_00,"exhale",::smoke_exhale); + level._effect["cigar_glow"] = loadfx("fire/cigar_glow_far"); + level._effect["cigar_glow_puff"] = loadfx("fire/cigar_glow_puff"); + level._effect["cigar_smoke_puff"] = loadfx("smoke/cigarsmoke_puff_far"); + level._effect["cigar_exhale"] = loadfx("smoke/cigarsmoke_exhale_far"); + level.var_1B2E["cigar"] = "prop_price_cigar"; +} + +//Function Number: 3 +func_3C83(param_00) +{ + if(isdefined(param_00.var_3C84)) + { + param_00.var_3C84 delete(); + } +} + +//Function Number: 4 +add_sit_load_ak_notetracks(param_00) +{ + if(prop_notetrack_exist(param_00,"add_cellphone_notetracks")) + { + return; + } + + maps\_anim::addnotetrack_customfunction(param_00,"attach clip left",::func_3C86); + maps\_anim::addnotetrack_customfunction(param_00,"detach clip left",::func_3C83); + level.var_1B2E["clip"] = "weapon_ak47_clip"; +} + +//Function Number: 5 +func_3C86(param_00) +{ + param_00 notify("new_prop_rotation"); + var_01 = spawn("script_model",(0,0,0)); + var_01 linkto(param_00,"tag_inhand",(0,0,0),(0,0,0)); + var_01 setmodel(maps\_utility::func_22CC("clip")); + param_00.var_3C84 = var_01; + thread func_3C8E(var_01,param_00); +} + +//Function Number: 6 +func_3C87(param_00) +{ + if(prop_notetrack_exist(param_00,"add_cellphone_notetracks")) + { + return; + } + + maps\_anim::addnotetrack_customfunction(param_00,"attach phone",::func_3C88); + maps\_anim::addnotetrack_customfunction(param_00,"detach phone",::detach_phone); + level.var_1B2E["cellphone"] = "com_cellphone_off"; +} + +//Function Number: 7 +func_3C88(param_00) +{ + param_00 notify("new_phone_rotation"); + var_01 = spawn("script_model",(0,0,0)); + var_01 linkto(param_00,"tag_inhand",(0,0,0),(0,0,0)); + var_01 setmodel(maps\_utility::func_22CC("cellphone")); + param_00.phone = var_01; + thread func_3C8E(var_01,param_00); +} + +//Function Number: 8 +detach_phone(param_00) +{ + if(isdefined(param_00.phone)) + { + param_00.phone delete(); + } +} + +//Function Number: 9 +attach_cig(param_00) +{ + param_00 notify("new_cigar_rotation"); + var_01 = spawn("script_model",(0,0,0)); + var_01 linkto(param_00,"tag_inhand",(0,0,0),(0,0,0)); + var_01 setmodel(maps\_utility::func_22CC("cigar")); + playfxontag(common_scripts\utility::func_539("cigar_glow"),var_01,"tag_cigarglow"); + param_00.cigar = var_01; + thread prop_delete_cig(var_01,param_00); +} + +//Function Number: 10 +detach_cig(param_00) +{ + if(isdefined(param_00.cigar)) + { + param_00.cigar thread func_3C90(); + } +} + +//Function Number: 11 +func_3C8E(param_00,param_01) +{ + param_01 notify("new_prop_rotation" + param_00.model); + param_01 endon("new_prop_rotation" + param_00.model); + param_00 endon("death"); + param_01 maps\_utility::add_endon("new_prop_rotation" + param_00.model); + param_00 maps\_utility::add_endon("death"); + maps\_utility::add_wait(::maps\_utility::waittill_msg,"stop_loop"); + param_01 maps\_utility::add_wait(::maps\_utility::waittill_msg,"death"); + maps\_utility::do_wait_any(); + param_00 delete(); +} + +//Function Number: 12 +prop_delete_cig(param_00,param_01) +{ + param_01 notify("new_prop_rotation" + param_00.model); + param_01 endon("new_prop_rotation" + param_00.model); + param_00 endon("death"); + param_01 maps\_utility::add_endon("new_prop_rotation" + param_00.model); + param_00 maps\_utility::add_endon("death"); + maps\_utility::add_wait(::maps\_utility::waittill_msg,"stop_loop"); + param_01 maps\_utility::add_wait(::maps\_utility::waittill_msg,"death"); + maps\_utility::do_wait_any(); + param_00 thread func_3C90(); +} + +//Function Number: 13 +func_3C90() +{ + self endon("death"); + if(!isdefined(self)) + { + return; + } + + if(isdefined(self.cig_throwing) && self.cig_throwing) + { + return; + } + + self.cig_throwing = 1; + stopfxontag(common_scripts\utility::func_539("cigar_glow"),self,"tag_cigarglow"); + var_00 = 3; + var_01 = anglestoforward(self.angles); + self unlink(); + self movegravity(var_01 * 100,var_00); + self rotatevelocity((400,0,0),var_00,0,var_00); + wait var_00; + self delete(); +} + +//Function Number: 14 +func_3C92(param_00) +{ + if(!isdefined(param_00.cigar)) + { + return; + } + + param_00 endon("death"); + param_00.cigar endon("death"); + playfxontag(common_scripts\utility::func_539("cigar_glow_puff"),param_00.cigar,"tag_cigarglow"); + wait 1; + playfxontag(common_scripts\utility::func_539("cigar_smoke_puff"),param_00,"tag_eye"); +} + +//Function Number: 15 +smoke_exhale(param_00) +{ + if(!isdefined(param_00.cigar)) + { + return; + } + + playfxontag(common_scripts\utility::func_539("cigar_exhale"),param_00,"tag_eye"); +} + +//Function Number: 16 +func_3C94() +{ + var_00 = []; + self endon("death",var_41[var_41.size],"J_Wrist_RI",var_41[var_41.size],"J_Elbow_LE",var_41[var_41.size],"J_Hip_RI",var_41[var_41.size],"J_SpineLower",var_41[var_41.size],"J_HipTwist_LE",var_41[var_41.size],"J_HipTwist_RI",var_41[var_41.size],"J_Knee_LE",var_41[var_41.size],"J_Knee_RI",var_41[var_41.size],"J_SpineUpper",var_41[var_41.size],"J_Ankle_LE",var_41[var_41.size],"J_Ankle_RI",var_41[var_41.size],"J_Knee_Bulge_LE",var_41[var_41.size],"J_Ball_LE",var_41[var_41.size],"J_Clavicle_RI",var_41[var_41.size],"J_Neck",var_41[var_41.size],"J_ShoulderRaise_LE",var_41[var_41.size],"J_Head",var_41[var_41.size],"J_Shoulder_RI",var_41[var_41.size],"J_Brow_LE",var_41[var_41.size],"J_Cheek_RI",var_41[var_41.size],"J_CoatFront_RI",var_41[var_41.size],"J_CoatRear_LE",var_41[var_41.size],"J_CoatRear_RI",var_41[var_41.size],"J_Hip_LE",var_41[var_41.size],"J_CoatFront_LE",var_41[var_00.size],"J_MainRoot"); + for(;;) + { + while(self.movemode != "run") + { + wait 0.2; + continue; + } + + playfxontag(level._effect["ghillie_leaves"],self,common_scripts\utility::random(var_41)); + wait randomfloatrange(0.1,2.5); + } +} + +//Function Number: 17 +func_3C95() +{ + attach_cig(self); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_quotes.gsc b/MW3/Xbox/SP/maps/_quotes.gsc new file mode 100644 index 0000000..434db0a --- /dev/null +++ b/MW3/Xbox/SP/maps/_quotes.gsc @@ -0,0 +1,198 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_quotes.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 7 + * Decompile Time: 110 ms + * Timestamp: 10/27/2023 2:33:50 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + thread setdeadquote(); +} + +//Function Number: 2 +setdeadquote() +{ + level endon("mine death"); + level notify("new_quote_string"); + level endon("new_quote_string"); + if(isalive(level.player)) + { + level.player waittill("death"); + } + + if(!level.var_1291) + { + var_00 = int(tablelookup("sp/deathQuoteTable.csv",1,"size",0)); + var_01 = randomint(var_00); + if(getdvar("cycle_deathquotes") != "") + { + if(getdvar("ui_deadquote_index") == "") + { + setdvar("ui_deadquote_index","0"); + } + + var_01 = getdvarint("ui_deadquote_index"); + setdvar("ui_deadquote",func_1471(var_01)); + var_01++; + if(var_01 > var_00 - 1) + { + var_01 = 0; + } + + setdvar("ui_deadquote_index",var_01); + return; + } + + setdvar("ui_deadquote",func_1471(var_01)); + } +} + +//Function Number: 3 +func_1471(param_00) +{ + var_01 = tablelookup("sp/deathQuoteTable.csv",0,param_00,1); + if(tolower(var_01[0]) != tolower("@")) + { + var_01 = "@" + var_01; + } + + return var_01; +} + +//Function Number: 4 +setdeadquote_so() +{ + level notify("new_quote_string"); + var_00 = []; + var_00 = so_builddeadquote(); + var_00 = maps\_utility::array_randomize(var_00); + var_01 = randomint(var_00.size); + if(!maps\_utility::is_coop_online()) + { + var_02 = var_00.size > 1; + var_03 = var_01; + while(var_02) + { + if(func_1474(var_00[var_01])) + { + var_01++; + if(var_01 >= var_00.size) + { + var_01 = 0; + } + + if(var_01 == var_03) + { + var_02 = 0; + } + + continue; + } + + var_02 = 0; + } + + setdvar("ui_deadquote_v3",getdvar("ui_deadquote_v2")); + setdvar("ui_deadquote_v2",getdvar("ui_deadquote_v1")); + setdvar("ui_deadquote_v1",var_00[var_01]); + } + + switch(var_00[var_01]) + { + case "@DEADQUOTE_SO_ICON_PARTNER": + maps\_specialops_code::so_special_failure_hint_reset_dvars("ui_icon_partner"); + break; + + case "@DEADQUOTE_SO_ICON_OBJ": + maps\_specialops_code::so_special_failure_hint_reset_dvars("ui_icon_obj"); + break; + + case "@DEADQUOTE_SO_ICON_OBJ_OFFSCREEN": + maps\_specialops_code::so_special_failure_hint_reset_dvars("ui_icon_obj_offscreen"); + break; + + case "@DEADQUOTE_SO_STAR_RANKINGS": + maps\_specialops_code::so_special_failure_hint_reset_dvars("ui_icon_stars"); + break; + + case "@DEADQUOTE_SO_CLAYMORE_ENEMIES_SHOOT": + case "@DEADQUOTE_SO_CLAYMORE_POINT_ENEMY": + maps\_specialops_code::so_special_failure_hint_reset_dvars("ui_icon_claymore"); + break; + + case "@DEADQUOTE_SO_STEALTH_STAY_LOW": + maps\_specialops_code::so_special_failure_hint_reset_dvars("ui_icon_stealth_stance"); + break; + } + + setdvar("ui_deadquote",var_00[var_01]); +} + +//Function Number: 5 +func_1474(param_00) +{ + if(param_00 == getdvar("ui_deadquote_v1")) + { + return 1; + } + + if(param_00 == getdvar("ui_deadquote_v2")) + { + return 1; + } + + if(param_00 == getdvar("ui_deadquote_v3")) + { + return 1; + } + + return 0; +} + +//Function Number: 6 +so_builddeadquote() +{ + if(should_use_custom_deadquotes()) + { + return level.var_1408; + } + + var_00 = []; + if(!maps\_utility::is_survival()) + { + } + else + { + } + + if(isdefined(self.so_infohud_toggle_state) && self.so_infohud_toggle_state != "none") + { + } + + if(maps\_utility::func_E89()) + { + } + + return var_41; +} + +//Function Number: 7 +should_use_custom_deadquotes() +{ + if(!isdefined(level.var_1408)) + { + return 0; + } + + if(level.var_1408.size <= 0) + { + return 0; + } + + return level.so_deadquotes_chance >= randomfloat(1); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_radiation.gsc b/MW3/Xbox/SP/maps/_radiation.gsc new file mode 100644 index 0000000..05886f7 --- /dev/null +++ b/MW3/Xbox/SP/maps/_radiation.gsc @@ -0,0 +1,449 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_radiation.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 17 + * Decompile Time: 289 ms + * Timestamp: 10/27/2023 2:34:32 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + precachestring(&"SCOUTSNIPER_MRHR"); + precachestring(&"SCRIPT_RADIATION_DEATH"); + precacheshellshock("radiation_low"); + precacheshellshock("radiation_med"); + precacheshellshock("radiation_high"); + foreach(var_01 in level.players) + { + var_01.var_2719 = spawnstruct(); + var_01.var_2719.super_dose = 0; + var_01.var_2719.inside = 0; + var_01 maps\_utility::ent_flag_init("_radiation_poisoning"); + } + + common_scripts\utility::run_thread_on_targetname("radiation",::func_3C98); + common_scripts\utility::run_thread_on_targetname("super_radiation",::func_3C9B); + common_scripts\utility::array_thread(level.players,::func_3C9C); + common_scripts\utility::array_thread(level.players,::updateradiationdosimeter); + common_scripts\utility::array_thread(level.players,::func_3C9F); + common_scripts\utility::array_thread(level.players,::func_3CA6); + common_scripts\utility::array_thread(level.players,::func_3CA0); + common_scripts\utility::array_thread(level.players,::func_3CA1); + common_scripts\utility::array_thread(level.players,::func_3CA8); +} + +//Function Number: 2 +func_3C98() +{ + self.members = 0; + for(;;) + { + self waittill("trigger",var_00); + thread updateradiationtrigger_perplayer(var_00); + } +} + +//Function Number: 3 +updateradiationtrigger_perplayer(param_00) +{ + if(param_00.var_2719.inside) + { + return; + } + + param_00.var_2719.inside = 1; + param_00.var_2719.var_3C9A[param_00.var_2719.var_3C9A.size] = self; + while(param_00 istouching(self)) + { + wait 0.05; + } + + param_00.var_2719.inside = 0; + param_00.var_2719.var_3C9A = common_scripts\utility::array_remove(param_00.var_2719.var_3C9A,self); +} + +//Function Number: 4 +func_3C9B() +{ + self waittill("trigger",var_00); + var_00.var_2719.super_dose = 1; +} + +//Function Number: 5 +func_3C9C() +{ + self.var_2719.var_3C9A = []; + self.var_2719.var_19E1 = 0; + self.var_2719.var_3C9D = 0; + self.var_2719.var_1D85 = 0; + self.var_2719.var_3C9E = 0; + var_00 = 1; + var_01 = 0; + var_02 = 1100000 / 60 * var_00; + var_03 = 200000; + var_04 = var_02 - var_01; + for(;;) + { + var_05 = []; + for(var_06 = 0;var_06 < self.var_2719.var_3C9A.size;var_06++) + { + var_07 = self.var_2719.var_3C9A[var_06]; + var_08 = distance(self.origin,var_07.origin) - 15; + var_05[var_06] = var_02 - var_02 / var_07.radius * var_08; + } + + var_09 = 0; + for(var_06 = 0;var_06 < var_05.size;var_06++) + { + var_09 = var_09 + var_05[var_06]; + } + + if(var_09 < var_01) + { + var_09 = var_01; + } + + if(var_09 > var_02) + { + var_09 = var_02; + } + + self.var_2719.var_19E1 = var_09; + self.var_2719.var_3C9D = var_09 - var_01 / var_04 * 100; + if(self.var_2719.super_dose) + { + var_09 = var_02; + self.var_2719.var_3C9D = 100; + } + + if(self.var_2719.var_3C9D > 25) + { + self.var_2719.var_1D85 = self.var_2719.var_1D85 + var_09; + self.var_2719.var_3C9E = self.var_2719.var_1D85 / var_03 * 100; + } + else if(self.var_2719.var_3C9D < 1 && self.var_2719.var_1D85 > 0) + { + self.var_2719.var_1D85 = self.var_2719.var_1D85 - 1500; + if(self.var_2719.var_1D85 < 0) + { + self.var_2719.var_1D85 = 0; + } + + self.var_2719.var_3C9E = self.var_2719.var_1D85 / var_03 * 100; + } + + wait var_00; + } +} + +//Function Number: 6 +func_3C9F() +{ + var_00 = 1; + for(;;) + { + if(self.var_2719.var_3C9D >= 75) + { + self shellshock("radiation_high",5); + } + else if(self.var_2719.var_3C9D >= 50) + { + self shellshock("radiation_med",5); + } + else if(self.var_2719.var_3C9D > 25) + { + self shellshock("radiation_low",5); + } + + wait var_00; + } +} + +//Function Number: 7 +func_3CA0() +{ + thread func_3CA2(); + for(;;) + { + if(self.var_2719.var_3C9D >= 75) + { + self.var_2719.sound = "item_geigercouner_level4"; + } + else if(self.var_2719.var_3C9D >= 50) + { + self.var_2719.sound = "item_geigercouner_level3"; + } + else if(self.var_2719.var_3C9D >= 25) + { + self.var_2719.sound = "item_geigercouner_level2"; + } + else if(self.var_2719.var_3C9D > 0) + { + self.var_2719.sound = "item_geigercouner_level1"; + } + else + { + self.var_2719.sound = "none"; + } + + wait 0.05; + } +} + +//Function Number: 8 +func_3CA1() +{ + for(;;) + { + if(self.var_2719.var_3C9D > 25) + { + maps\_utility::func_FA4("_radiation_poisoning"); + } + else + { + maps\_utility::ent_flag_clear("_radiation_poisoning"); + } + + wait 0.05; + } +} + +//Function Number: 9 +func_3CA2() +{ + wait 0.05; + var_00 = spawn("script_origin",(0,0,0)); + var_00.origin = self.origin; + var_00.angles = self.angles; + var_00 linkto(self); + var_01 = self.var_2719.sound; + for(;;) + { + if(var_01 != self.var_2719.sound) + { + var_00 stoploopsound(); + if(isdefined(self.var_2719.sound) && self.var_2719.sound != "none") + { + var_00 playloopsound(self.var_2719.sound); + } + } + + var_01 = self.var_2719.sound; + wait 0.05; + } +} + +//Function Number: 10 +func_3CA3() +{ + var_00 = 0.05; + var_01 = newclienthudelem(self); + var_01.fontscale = 1.2; + var_01.x = 670; + var_01.y = 350; + var_01.alignx = "right"; + var_01.label = ""; + var_01.alpha = 0; + for(;;) + { + var_01.label = self.var_2719.var_3C9D; + wait var_00; + } +} + +//Function Number: 11 +updateradiationdosimeter() +{ + var_00 = 0.028; + var_01 = 100; + var_02 = 1; + var_03 = var_01 - var_00; + var_04 = self.origin; + var_05 = newclienthudelem(self); + var_05.fontscale = 1.2; + var_05.x = 676; + var_05.y = 360; + var_05.alpha = 0; + var_05.alignx = "right"; + var_05.label = &"SCOUTSNIPER_MRHR"; + var_05 thread updateradiationdosimetercolor(self); + for(;;) + { + if(self.var_2719.var_19E1 <= var_00) + { + var_06 = randomfloatrange(-0.001,0.001); + var_05 setvalue(var_00 + var_06); + } + else if(self.var_2719.var_19E1 > var_01) + { + var_05 setvalue(var_01); + } + else + { + var_05 setvalue(self.var_2719.var_19E1); + } + + wait var_02; + } +} + +//Function Number: 12 +updateradiationdosimetercolor(param_00) +{ + var_01 = 0.05; + for(;;) + { + var_02 = 1; + var_03 = 0.13; + while(param_00.var_2719.var_19E1 >= 100) + { + if(var_02 <= 0 || var_02 >= 1) + { + var_03 = var_03 * -1; + } + + var_02 = var_02 + var_03; + if(var_02 <= 0) + { + var_02 = 0; + } + + if(var_02 >= 1) + { + var_02 = 1; + } + + self.color = (1,var_02,var_02); + wait var_01; + } + + self.color = (1,1,1); + wait var_01; + } +} + +//Function Number: 13 +func_3CA6() +{ + level endon("special_op_terminated"); + self endon("death"); + var_00 = newclienthudelem(self); + var_00.x = 0; + var_00.y = 0; + var_00 setshader("black",640,480); + var_00.alignx = "left"; + var_00.aligny = "top"; + var_00.horzalign = "fullscreen"; + var_00.vertalign = "fullscreen"; + var_00.alpha = 0; + var_01 = 1; + var_02 = 4; + var_03 = 0.25; + var_04 = 1; + var_05 = 25; + var_06 = 100; + var_07 = 0; + for(;;) + { + while(self.var_2719.var_3C9E > 25 && self.var_2719.var_3C9D > 25) + { + var_08 = var_06 - var_05; + var_07 = self.var_2719.var_3C9E - var_05 / var_08; + if(var_07 < 0) + { + var_07 = 0; + } + else if(var_07 > 1) + { + var_07 = 1; + } + + var_09 = var_02 - var_01; + var_0A = var_01 + var_09 * 1 - var_07; + var_0B = var_04 - var_03; + var_0C = var_03 + var_0B * var_07; + var_0D = 7.2 * var_0C; + var_0E = var_07 * 0.5; + var_0F = 7.2 * var_0E; + if(var_07 == 1) + { + break; + } + + var_10 = var_0A / 2; + var_00 func_2724(var_10,var_0C,var_0D,self); + var_00 fadeoutblackout(var_10,var_0E,var_0F,self); + wait var_07 * 0.5; + } + + if(var_07 == 1) + { + break; + } + + if(var_00.alpha != 0) + { + var_00 fadeoutblackout(1,0,0,self); + } + + wait 0.05; + } + + var_00 func_2724(2,1,6,self); + thread func_3CA7(); +} + +//Function Number: 14 +func_3CA7() +{ + self.var_1A89 = 1; + self.specialdeath = 1; + self.radiationdeath = 1; + if(!maps\_utility::kill_wrapper()) + { + return; + } + + waittillframeend; + var_00 = &"SCRIPT_RADIATION_DEATH"; + setdvar("ui_deadquote",var_00); +} + +//Function Number: 15 +func_2724(param_00,param_01,param_02,param_03) +{ + self fadeovertime(param_00); + self.alpha = param_01; + param_03 setblurforplayer(param_02,param_00); + wait param_00; +} + +//Function Number: 16 +fadeoutblackout(param_00,param_01,param_02,param_03) +{ + self fadeovertime(param_00); + self.alpha = param_01; + param_03 setblurforplayer(param_02,param_00); + wait param_00; +} + +//Function Number: 17 +func_3CA8() +{ + self endon("death"); + for(;;) + { + maps\_utility::func_121C("_radiation_poisoning"); + if(level.script == "scoutsniper" || level.script == "co_scoutsniper") + { + level thread maps\_utility::func_E1D(::maps\_utility::func_DDF,"scoutsniper_mcm_youdaft"); + } + + level notify("radiation_warning"); + maps\_utility::func_FA3("_radiation_poisoning"); + wait 10; + } +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_rank.gsc b/MW3/Xbox/SP/maps/_rank.gsc new file mode 100644 index 0000000..3912bd9 --- /dev/null +++ b/MW3/Xbox/SP/maps/_rank.gsc @@ -0,0 +1,869 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_rank.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 40 + * Decompile Time: 716 ms + * Timestamp: 10/27/2023 2:32:29 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + maps\_hud::init(); + precachestring(&"RANK_PLAYER_WAS_PROMOTED_N"); + precachestring(&"RANK_PLAYER_WAS_PROMOTED"); + precachestring(&"RANK_PROMOTED"); + precachestring(&"RANK_ROMANI"); + precachestring(&"RANK_ROMANII"); + precachestring(&"RANK_ROMANIII"); + precachestring(&"SCRIPT_PLUS"); + precacheshader("line_horizontal"); + precacheshader("line_vertical"); + precacheshader("gradient_fadein"); + precacheshader("white"); + level.maxrank = int(tablelookup("sp/rankTable.csv",0,"maxrank",1)); + level.var_80DF = int(tablelookup("sp/rankTable.csv",0,level.maxrank,7)); + var_00 = 0; + for(var_00 = 0;var_00 <= level.maxrank;var_00++) + { + precacheshader(tablelookup("sp/rankTable.csv",0,var_00,6)); + } + + var_01 = 0; + var_02 = tablelookup("sp/ranktable.csv",0,var_01,1); + while(isdefined(var_02) && var_02 != "") + { + level.ranktable[var_01][1] = tablelookup("sp/ranktable.csv",0,var_01,1); + level.ranktable[var_01][2] = tablelookup("sp/ranktable.csv",0,var_01,2); + level.ranktable[var_01][3] = tablelookup("sp/ranktable.csv",0,var_01,3); + level.ranktable[var_01][7] = tablelookup("sp/ranktable.csv",0,var_01,7); + precachestring(tablelookupistring("sp/ranktable.csv",0,var_01,10)); + var_01++; + var_02 = tablelookup("sp/ranktable.csv",0,var_01,1); + } + + maps\_missions::buildchallengeinfo(); +} + +//Function Number: 2 +xp_init() +{ + xp_setup(); + foreach(var_01 in level.players) + { + var_01 thread xp_player_init(); + var_01 thread maps\_missions::updatechallenges(); + } +} + +//Function Number: 3 +xp_player_init() +{ + if(!isdefined(self.var_E96)) + { + self.var_E96["rankxp"] = self getplayerdata("experience"); + self.var_E96["rank"] = getrankforxp(self.var_E96["rankxp"]); + } + + self.rankupdatetotal = 0; + self.hud_rankscroreupdate = newclienthudelem(self); + self.hud_rankscroreupdate.horzalign = "center"; + self.hud_rankscroreupdate.vertalign = "middle"; + self.hud_rankscroreupdate.alignx = "center"; + self.hud_rankscroreupdate.aligny = "middle"; + self.hud_rankscroreupdate.x = 0; + self.hud_rankscroreupdate.y = -60; + self.hud_rankscroreupdate.font = "hudbig"; + self.hud_rankscroreupdate.fontscale = 0.75; + self.hud_rankscroreupdate.archived = 0; + self.hud_rankscroreupdate.color = (0.75,1,0.75); + self.hud_rankscroreupdate fontpulseinit(); +} + +//Function Number: 4 +xp_bar_client_elem(param_00) +{ + var_01 = newclienthudelem(param_00); + var_01.x = func_0E9A() / 2 * -1; + var_01.y = 0; + var_01.sort = 5; + var_01.horzalign = "center_adjustable"; + var_01.vertalign = "bottom_adjustable"; + var_01.alignx = "left"; + var_01.aligny = "bottom"; + var_01 setshader("gradient_fadein",get_xpbarwidth(),4); + var_01.color = (1,0.8,0.4); + var_01.alpha = 0.65; + var_01.foreground = 1; + return var_01; +} + +//Function Number: 5 +func_0E9A() +{ + if(issplitscreen()) + { + return 726; + } + + return 540; +} + +//Function Number: 6 +xpbar_update() +{ + if(!get_xpbarwidth()) + { + self.hud_xpbar.alpha = 0; + } + else + { + self.hud_xpbar.alpha = 0.65; + } + + self.hud_xpbar setshader("gradient_fadein",get_xpbarwidth(),4); +} + +//Function Number: 7 +get_xpbarwidth() +{ + var_00 = int(tablelookup("sp/rankTable.csv",0,self.var_E96["rank"],3)); + var_01 = int(self.var_E96["rankxp"] - int(tablelookup("sp/rankTable.csv",0,self.var_E96["rank"],2))); + var_02 = func_0E9A(); + var_03 = int(var_02 * var_01 / var_00); + return var_03; +} + +//Function Number: 8 +xp_setup() +{ + if(!isdefined(level.scoreinfo) || !isdefined(level.scoreinfo.size)) + { + level.scoreinfo = []; + } + + level.xpscale = 1; + if(level.console) + { + level.xpscale = 1; + } + + registerscoreinfo("kill",100); + registerscoreinfo("headshot",100); + registerscoreinfo("assist",20); + registerscoreinfo("suicide",0); + registerscoreinfo("teamkill",0); + registerscoreinfo("completion_xp",5000); + level notify("rank_score_info_defaults_set"); +} + +//Function Number: 9 +givexp_think() +{ + self waittill("death",var_00,var_01,var_02); + if(isdefined(var_00) && isdefined(var_00.classname) && var_00.classname == "worldspawn" && isdefined(self.last_dmg_player)) + { + var_00 = self.last_dmg_player; + } + + givexp_helper(var_00); +} + +//Function Number: 10 +givexp_helper(param_00) +{ + if(!isdefined(param_00)) + { + return; + } + + if(isai(param_00) && param_00 isbadguy()) + { + return; + } + + if(is_special_targetname_attacker(param_00)) + { + if(isdefined(param_00.attacker)) + { + thread givexp_helper(param_00.attacker); + return; + } + + if(isdefined(param_00.damageowner)) + { + thread givexp_helper(param_00.damageowner); + return; + } + } + + if(isplayer(param_00)) + { + if(isdefined(level.givexp_kill_func)) + { + param_00 thread [[ level.givexp_kill_func ]](self); + } + else + { + param_00 thread maps\_utility::func_E86("kill"); + } + } + + if(maps\_utility::is_survival()) + { + if(isai(param_00) && !param_00 isbadguy() && isdefined(param_00.owner) && isplayer(param_00.owner)) + { + if(isdefined(level.givexp_kill_func)) + { + param_00.owner thread [[ level.givexp_kill_func ]](self); + } + else + { + param_00.owner thread maps\_utility::func_E86("kill"); + } + } + } + + if(!isplayer(param_00) && !isai(param_00)) + { + return; + } + + if(!param_00 isbadguy() && isdefined(self.attacker_list) && self.attacker_list.size) + { + for(var_01 = 0;var_01 < self.attacker_list.size;var_01++) + { + if(isplayer(self.attacker_list[var_01]) && self.attacker_list[var_01] != param_00) + { + if(isdefined(self.var_EA6)) + { + self.attacker_list[var_01] thread maps\_utility::func_E86("assist",self.var_EA6); + continue; + } + + self.attacker_list[var_01] thread maps\_utility::func_E86("assist"); + } + } + } +} + +//Function Number: 11 +is_special_targetname_attacker(param_00) +{ + if(!isdefined(param_00.targetname)) + { + return 0; + } + + if(issubstr(param_00.targetname,"destructible")) + { + return 1; + } + + if(common_scripts\utility::string_starts_with(param_00.targetname,"sentry_")) + { + return 1; + } + + return 0; +} + +//Function Number: 12 +ai_xp_init() +{ + thread givexp_think(); + self.attacker_list = []; + self.last_attacked = 0; + maps\_utility::add_damage_function(::xp_took_damage); +} + +//Function Number: 13 +xp_took_damage(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + if(!isdefined(param_01)) + { + return; + } + + if(!isdefined(self)) + { + return; + } + + var_07 = gettime(); + var_08 = var_07 - self.last_attacked; + if(var_08 <= 10000) + { + self.attacker_list = common_scripts\utility::array_remove(self.attacker_list,param_01); + self.attacker_list[self.attacker_list.size] = param_01; + self.last_attacked = gettime(); + return; + } + + self.attacker_list = []; + self.attacker_list[0] = param_01; + self.last_attacked = gettime(); +} + +//Function Number: 14 +updateplayerscore(param_00,param_01) +{ + if(!isdefined(level.xp_enable) || !level.xp_enable) + { + return; + } + + if(!isdefined(param_01)) + { + if(isdefined(level.scoreinfo[param_00])) + { + param_01 = getscoreinfovalue(param_00); + } + else + { + param_01 = getscoreinfovalue("kill"); + } + } + + param_01 = int(param_01 * level.xpscale); + if(param_00 == "assist") + { + if(param_01 > getscoreinfovalue("kill")) + { + param_01 = getscoreinfovalue("kill"); + } + } + + thread print_score_increment(param_01); + self.var_E96["rankxp"] = self.var_E96["rankxp"] + param_01; + if(func_0EB5()) + { + thread updaterankannouncehud(); + } + + if(self.var_E96["rankxp"] <= level.var_80DF) + { + self setplayerdata("experience",self.var_E96["rankxp"]); + } + + if(self.var_E96["rankxp"] > level.var_80DF) + { + self setplayerdata("experience",level.var_80DF); + } + + waittillframeend; + self notify("xp_updated",param_00); +} + +//Function Number: 15 +print_score_increment(param_00) +{ + self notify("update_xp"); + self endon("update_xp"); + self.rankupdatetotal = self.rankupdatetotal + param_00; + self.hud_rankscroreupdate.label = &"SCRIPT_PLUS"; + self.hud_rankscroreupdate setvalue(self.rankupdatetotal); + self.hud_rankscroreupdate.alpha = 0.75; + self.hud_rankscroreupdate thread fontpulse(self); + self.hud_rankscroreupdate.x = 0; + self.hud_rankscroreupdate.y = -60; + wait 1; + self.hud_rankscroreupdate fadeovertime(0.2); + self.hud_rankscroreupdate.alpha = 0; + self.hud_rankscroreupdate moveovertime(0.2); + self.hud_rankscroreupdate.x = -240; + self.hud_rankscroreupdate.y = 160; + wait 0.5; + self.hud_rankscroreupdate.x = 0; + self.hud_rankscroreupdate.y = -60; + self.rankupdatetotal = 0; +} + +//Function Number: 16 +fontpulseinit() +{ + self.basefontscale = self.fontscale; + self.maxfontscale = self.fontscale * 2; + self.inframes = 3; + self.outframes = 5; +} + +//Function Number: 17 +fontpulse(param_00) +{ + self notify("fontPulse"); + self endon("fontPulse"); + var_01 = self.maxfontscale - self.basefontscale; + while(self.fontscale < self.maxfontscale) + { + self.fontscale = min(self.maxfontscale,self.fontscale + var_01 / self.inframes); + wait 0.05; + } + + while(self.fontscale > self.basefontscale) + { + self.fontscale = max(self.basefontscale,self.fontscale - var_01 / self.outframes); + wait 0.05; + } +} + +//Function Number: 18 +func_0EB5() +{ + var_00 = getrank(); + if(var_00 == self.var_E96["rank"]) + { + return 0; + } + + var_01 = self.var_E96["rank"]; + var_02 = self.var_E96["rank"]; + self.var_E96["rank"] = var_00; + while(var_02 <= var_00) + { + self.setpromotion = 1; + var_02++; + } + + return 1; +} + +//Function Number: 19 +updaterankannouncehud() +{ + self endon("disconnect"); + self notify("update_rank"); + self endon("update_rank"); + self notify("reset_outcome"); + var_00 = getrankinfofull(self.var_E96["rank"]); + var_01 = spawnstruct(); + var_01.titletext = &"RANK_PROMOTED"; + var_01.iconname = getrankinfoicon(self.var_E96["rank"]); + var_01.sound = "sp_level_up"; + var_01.duration = 4; + var_02 = level.ranktable[self.var_E96["rank"]][1]; + var_03 = int(var_02[var_02.size - 1]); + var_01.notifytext = var_00; + if(common_scripts\utility::flag_exist("special_op_final_xp_given") && common_scripts\utility::flag("special_op_final_xp_given")) + { + level.eog_summary_delay = int(max(0,var_01.duration - 2)); + } + + thread func_0EBE(var_01); + if(var_03 > 1) + { + } +} + +//Function Number: 20 +func_0EBE(param_00) +{ + self endon("death"); + self endon("disconnect"); + var_01 = 4; + while(self.doingnotify && var_01 > 0) + { + var_01 = var_01 - 0.5; + wait 0.5; + } + + thread shownotifymessage(param_00); +} + +//Function Number: 21 +func_0EBF(param_00) +{ + var_01 = strtok(param_00,"."); + var_02 = int(var_01[0]); + if(isdefined(var_01[1])) + { + var_03 = 1; + for(var_04 = 0;var_04 < var_01[1].size;var_04++) + { + var_03 = var_03 * 0.1; + } + + var_02 = var_02 + int(var_01[1]) * var_03; + } + + return var_02; +} + +//Function Number: 22 +actionnotifymessage(param_00) +{ + self endon("death"); + self endon("disconnect"); + var_01 = param_00.slot; + if(tablelookup("sp/splashTable.csv",0,param_00.name,0) != "") + { + if(isdefined(param_00.optionalnumber)) + { + self showhudsplash(param_00.name,param_00.slot,param_00.optionalnumber); + } + else + { + self showhudsplash(param_00.name,param_00.slot); + } + + self.doingsplash[var_01] = param_00; + var_02 = func_0EBF(tablelookup("sp/splashTable.csv",0,param_00.name,4)); + if(isdefined(param_00.sound)) + { + self playlocalsound(param_00.sound); + } + + self notify("actionNotifyMessage" + var_01); + self endon("actionNotifyMessage" + var_01); + wait var_02 - 0.05; + self.doingsplash[var_01] = undefined; + } + + if(self.splashqueue[var_01].size) + { + thread dispatchnotify(var_01); + } +} + +//Function Number: 23 +removetypefromqueue(param_00,param_01) +{ + var_02 = []; + for(var_03 = 0;var_03 < self.splashqueue[param_01].size;var_03++) + { + if(self.splashqueue[param_01][var_03].type != "killstreak") + { + var_02[var_02.size] = self.splashqueue[param_01][var_03]; + } + } + + self.splashqueue[param_01] = var_02; +} + +//Function Number: 24 +actionnotify(param_00) +{ + self endon("death"); + self endon("disconnect"); + var_01 = param_00.slot; + if(!isdefined(param_00.type)) + { + param_00.type = ""; + } + + if(!isdefined(self.doingsplash[var_01])) + { + thread actionnotifymessage(param_00); + return; + } + else if(param_00.type == "killstreak" && self.doingsplash[var_01].type != "challenge" && self.doingsplash[var_01].type != "rank") + { + self.notifytext.alpha = 0; + self.notifytext2.alpha = 0; + self.notifyicon.alpha = 0; + thread actionnotifymessage(param_00); + return; + } + else if(param_00.type == "challenge" && self.doingsplash[var_01].type != "killstreak" && self.doingsplash[var_01].type != "challenge" && self.doingsplash[var_01].type != "rank") + { + self.notifytext.alpha = 0; + self.notifytext2.alpha = 0; + self.notifyicon.alpha = 0; + thread actionnotifymessage(param_00); + return; + } + + if(param_00.type == "challenge" || param_00.type == "killstreak") + { + if(param_00.type == "killstreak") + { + removetypefromqueue("killstreak",var_01); + } + + for(var_02 = self.splashqueue[var_01].size;var_02 > 0;var_02--) + { + self.splashqueue[var_01][var_02] = self.splashqueue[var_01][var_02 - 1]; + } + + self.splashqueue[var_01][0] = param_00; + return; + } + + self.splashqueue[var_01][self.splashqueue[var_01].size] = param_00; +} + +//Function Number: 25 +shownotifymessage(param_00) +{ + self endon("disconnect"); + self.doingnotify = 1; + func_0EC7(0); + if(isdefined(param_00.duration)) + { + var_01 = param_00.duration; + } + else + { + var_01 = 4; + } + + thread func_0EC6(); + if(isdefined(param_00.sound)) + { + self playlocalsound(param_00.sound); + } + + if(isdefined(param_00.glowcolor)) + { + var_02 = param_00.glowcolor; + } + else + { + var_02 = (0.3,0.6,0.3); + } + + var_03 = self.notifytitle; + if(isdefined(param_00.titletext)) + { + if(isdefined(param_00.titlelabel)) + { + self.notifytitle.label = param_00.titlelabel; + } + else + { + self.notifytitle.label = &""; + } + + if(isdefined(param_00.titlelabel) && !isdefined(param_00.titleisstring)) + { + self.notifytitle setvalue(param_00.titletext); + } + else + { + self.notifytitle settext(param_00.titletext); + } + + self.notifytitle setpulsefx(100,int(var_01 * 1000),1000); + self.notifytitle.glowcolor = var_02; + self.notifytitle.alpha = 1; + } + + if(isdefined(param_00.notifytext)) + { + if(isdefined(param_00.textlabel)) + { + self.notifytext.label = param_00.textlabel; + } + else + { + self.notifytext.label = &""; + } + + if(isdefined(param_00.textlabel) && !isdefined(param_00.textisstring)) + { + self.notifytext setvalue(param_00.notifytext); + } + else + { + self.notifytext settext(param_00.notifytext); + } + + self.notifytext setpulsefx(100,int(var_01 * 1000),1000); + self.notifytext.glowcolor = var_02; + self.notifytext.alpha = 1; + var_03 = self.notifytext; + } + + if(isdefined(param_00.notifytext2)) + { + self.notifytext2 maps\_hud_util::setparent(var_03); + if(isdefined(param_00.text2label)) + { + self.notifytext2.label = param_00.text2label; + } + else + { + self.notifytext2.label = &""; + } + + self.notifytext2 settext(param_00.notifytext2); + self.notifytext2 setpulsefx(100,int(var_01 * 1000),1000); + self.notifytext2.glowcolor = var_02; + self.notifytext2.alpha = 1; + var_03 = self.notifytext2; + } + + if(isdefined(param_00.iconname)) + { + self.notifyicon maps\_hud_util::setparent(var_03); + self.notifyicon setshader(param_00.iconname,60,60); + self.notifyicon.alpha = 0; + self.notifyicon fadeovertime(1); + self.notifyicon.alpha = 1; + func_0EC7(var_01); + self.notifyicon fadeovertime(0.75); + self.notifyicon.alpha = 0; + } + else + { + func_0EC7(var_01); + } + + self notify("notifyMessageDone"); + self.doingnotify = 0; +} + +//Function Number: 26 +func_0EC6() +{ + self notify("resetOnCancel"); + self endon("resetOnCancel"); + self endon("notifyMessageDone"); + self endon("disconnect"); + level waittill("cancel_notify"); + self.notifytitle.alpha = 0; + self.notifytext.alpha = 0; + self.notifyicon.alpha = 0; + self.doingnotify = 0; +} + +//Function Number: 27 +func_0EC7(param_00) +{ + var_01 = 0.05; + while(!canreadtext()) + { + wait var_01; + } + + while(param_00 > 0) + { + wait var_01; + if(canreadtext()) + { + param_00 = param_00 - var_01; + } + } +} + +//Function Number: 28 +canreadtext() +{ + if(isflashbanged()) + { + return 0; + } + + return 1; +} + +//Function Number: 29 +isflashbanged() +{ + return isdefined(self.flashendtime) && gettime() < self.flashendtime; +} + +//Function Number: 30 +dispatchnotify(param_00) +{ + var_01 = self.splashqueue[param_00][0]; + for(var_02 = 1;var_02 < self.splashqueue[param_00].size;var_02++) + { + self.splashqueue[param_00][var_02 - 1] = self.splashqueue[param_00][var_02]; + } + + self.splashqueue[param_00][var_02 - 1] = undefined; + if(isdefined(var_01.name)) + { + actionnotify(var_01); + return; + } + + shownotifymessage(var_01); +} + +//Function Number: 31 +registerscoreinfo(param_00,param_01) +{ + level.scoreinfo[param_00]["value"] = param_01; +} + +//Function Number: 32 +getscoreinfovalue(param_00) +{ + return level.scoreinfo[param_00]["value"]; +} + +//Function Number: 33 +getrankinfominxp(param_00) +{ + return int(level.ranktable[param_00][2]); +} + +//Function Number: 34 +func_0ECE(param_00) +{ + return int(level.ranktable[param_00][3]); +} + +//Function Number: 35 +getrankinfomaxxp(param_00) +{ + return int(level.ranktable[param_00][7]); +} + +//Function Number: 36 +getrankinfofull(param_00) +{ + return tablelookupistring("sp/ranktable.csv",0,param_00,5); +} + +//Function Number: 37 +getrankinfoicon(param_00) +{ + return tablelookup("sp/rankTable.csv",0,param_00,6); +} + +//Function Number: 38 +getrank() +{ + var_00 = self.var_E96["rankxp"]; + var_01 = self.var_E96["rank"]; + if(var_00 < getrankinfominxp(var_01) + func_0ECE(var_01)) + { + return var_01; + } + + return getrankforxp(var_00); +} + +//Function Number: 39 +getrankforxp(param_00) +{ + var_01 = 0; + for(var_02 = level.ranktable[var_01][1];isdefined(var_02) && var_02 != "";var_02 = undefined) + { + if(param_00 < getrankinfominxp(var_01) + func_0ECE(var_01)) + { + return var_01; + } + + var_01++; + if(isdefined(level.ranktable[var_01])) + { + var_02 = level.ranktable[var_01][1]; + continue; + } + } + + var_01--; + return var_01; +} + +//Function Number: 40 +getrankxp() +{ + return self getplayerdata("experience"); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_sea.gsc b/MW3/Xbox/SP/maps/_sea.gsc new file mode 100644 index 0000000..0a38c62 --- /dev/null +++ b/MW3/Xbox/SP/maps/_sea.gsc @@ -0,0 +1,555 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_sea.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 18 + * Decompile Time: 375 ms + * Timestamp: 10/27/2023 2:34:34 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + level.var_3CA9 = 1; + level.var_3CAA = getent("sea","targetname"); + level._sea_org = spawn("script_origin",level.var_3CAA.origin); + level._sea_org.offset = level.var_3CAA.origin * -1; + level._sea_org.var_3CAC = "sway2"; + level.var_3CAD = spawn("script_origin",level.var_3CAA.origin); + level.var_3CAD.offset = level._sea_org.offset; + level.var_3CAA linkto(level.var_3CAD); + level.var_3CAE = getent("sea_foam","targetname"); + if(isdefined(level.var_3CAE)) + { + level.var_3CAE linkto(level.var_3CAD); + level.var_3CAE hide(); + } + + level.var_3CAF = getent("sea_black","targetname"); + if(isdefined(level.var_3CAF)) + { + level.var_3CAF linkto(level.var_3CAD); + } + + common_scripts\utility::flag_init("_sea_waves"); + common_scripts\utility::flag_init("_sea_viewbob"); + common_scripts\utility::flag_init("_sea_bob"); + common_scripts\utility::flag_set("_sea_bob"); + common_scripts\utility::flag_set("_sea_viewbob"); + var_00 = getentarray("boat_sway","script_noteworthy"); + if(isdefined(var_00)) + { + common_scripts\utility::array_thread(var_00,::sea_objectbob,level._sea_org); + } + + thread sea_logic(); +} + +//Function Number: 2 +sea_logic() +{ + wait 0.05; + var_00 = getmapsundirection(); + setsundirection(var_00); + level.lite_settings = vectortoangles(var_00); + level.var_3CB2 = level.lite_settings; + level._sea_org thread func_3CC1(); + level._sea_org thread sea_waves(); + level._sea_org thread func_3CCE(); +} + +//Function Number: 3 +func_3CB3(param_00,param_01) +{ + self.waittime = randomfloatrange(0.5,1); + if(isdefined(self.var_3CB4)) + { + self.scale = self.var_3CB4; + } + else + { + self.scale = randomfloatrange(2,3); + } + + var_02 = 0; + var_03 = 0; + switch(param_01) + { + case "sway1": + var_02 = self.var_3CB5; + break; + + case "sway2": + var_02 = self.var_3CB6; + break; + } + + if(self.var_3CB7) + { + var_04 = param_00.var_3CB8[0] * self.pratio * self.scale + param_00.var_3CB8[2] * self.var_3CBA * self.scale; + if(var_02 < abs(var_04)) + { + if(var_04 < 1) + { + var_03 = var_02 * -1; + } + else + { + var_03 = var_02; + } + } + else + { + var_03 = var_04; + } + + self.ang = (self.angles[0],self.angles[1],var_03); + return; + } + + self.ang = param_00.var_3CB8 * self.scale; +} + +//Function Number: 4 +sea_objectbob(param_00) +{ + if(isdefined(self.targetname)) + { + var_01 = getentarray(self.targetname,"target"); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + var_01[var_02] linkto(self); + } + } + + var_03 = common_scripts\utility::getstructarray(self.target,"targetname"); + var_04 = var_03[0].origin; + var_05 = undefined; + var_06 = spawn("script_origin",(0,0,0)); + var_06.var_3CB7 = 0; + if(isdefined(var_03[1])) + { + var_05 = var_03[1].origin; + var_06.var_3CB7 = 1; + } + else + { + var_07 = anglestoup(var_03[0].angles); + var_07 = var_07 * 10; + var_05 = var_04 + var_07; + } + + var_06.origin = var_04; + var_06.angles = vectortoangles(var_05 - var_04); + var_06.pratio = 1; + var_06.var_3CBA = 1; + var_06.var_3CB5 = 100; + var_06.var_3CB6 = 100; + var_06.var_3CB4 = undefined; + if(isdefined(var_03[0].script_parameters)) + { + var_08 = strtok(var_03[0].script_parameters,":;, "); + for(var_02 = 0;var_02 < var_08.size;var_02++) + { + switch(var_08[var_02]) + { + case "axial": + var_06.var_3CB7 = 1; + break; + + case "sway1": + var_02++; + var_06.var_3CB5 = int(var_08[var_02]); + break; + + case "sway2": + var_02++; + var_06.var_3CB6 = int(var_08[var_02]); + break; + + case "setscale": + var_02++; + if(var_08[var_02] == "randomrange") + { + var_02++; + var_09 = int(var_08[var_02]); + var_02++; + var_0A = int(var_08[var_02]); + var_06.var_3CB4 = randomfloatrange(var_09,var_0A); + } + else + { + var_06.var_3CB4 = int(var_08[var_02]); + } + break; + } + } + } + + if(var_06.var_3CB7) + { + var_0B = undefined; + var_0C = (0,360,0); + if(!isdefined(var_03[1])) + { + var_0B = var_03[0].angles; + } + else + { + var_0B = vectortoangles(var_05 - var_04); + } + + var_06.var_3CBA = vectordot(anglestoright(var_0B),anglestoright(var_0C)); + var_06.pratio = vectordot(anglestoright(var_0B),anglestoforward(var_0C)); + } + + self.link = var_06; + self notify("got_link"); + for(var_02 = 0;var_02 < var_03.size;var_02++) + { + var_03[var_02] thread sea_objectbob_findparent(var_06,param_00); + } + + wait 0.05; + self linkto(var_06); + if(isdefined(self.script_parameters)) + { + } + + thread func_3CBE(param_00,var_06); +} + +//Function Number: 5 +func_3CBE(param_00,param_01) +{ + for(;;) + { + if(param_00.var_3CAC == "sway2") + { + param_00 waittill("sway1"); + } + + param_01 func_3CB3(param_00,"sway1"); + param_01 notify("precalcdone1"); + if(!isdefined(param_01.parent)) + { + wait param_01.waittime; + } + + param_01 rotateto(param_01.ang,param_00.time,param_00.time * 0.5,param_00.time * 0.5); + if(param_00.var_3CAC == "sway1") + { + param_00 waittill("sway2"); + } + + param_01 func_3CB3(param_00,"sway2"); + param_01 notify("precalcdone2"); + if(!isdefined(param_01.parent)) + { + wait param_01.waittime; + } + + param_01 rotateto(param_01.ang,param_00.time,param_00.time * 0.5,param_00.time * 0.5); + } +} + +//Function Number: 6 +func_3CBF(param_00) +{ + for(;;) + { + self moveto(param_00.origin,0.1); + wait 0.1; + } +} + +//Function Number: 7 +sea_objectbob_findparent(param_00,param_01) +{ + if(!isdefined(self.target)) + { + return; + } + + param_00.parent = getent(self.target,"targetname"); + if(!isdefined(param_00.parent.link)) + { + param_00.parent waittill("got_link"); + } + + var_02 = param_00.parent.link; + var_03 = param_00.origin; + var_04 = spawn("script_origin",var_02.origin); + var_04.angles = var_02.angles; + var_05 = spawn("script_origin",param_00.origin); + var_05.angles = param_00.angles; + var_05 linkto(var_04); + param_00 thread func_3CBF(var_05); + for(;;) + { + var_02 waittill("precalcdone1"); + wait var_02.waittime - 0.05; + var_04 rotateto(var_02.ang,param_01.time,param_01.time * 0.5,param_01.time * 0.5); + var_02 waittill("precalcdone2"); + wait var_02.waittime - 0.05; + var_04 rotateto(var_02.ang,param_01.time,param_01.time * 0.5,param_01.time * 0.5); + } +} + +//Function Number: 8 +func_3CC1() +{ + self endon("manual_override"); + common_scripts\utility::flag_wait("_sea_bob"); + thread func_3CC3(); + wait 0.05; + for(;;) + { + var_00 = 0; + var_01 = 0; + var_02 = randomfloatrange(2,4) * level.var_3CA9; + self.time = randomfloatrange(3,4); + self.var_3CB8 = (var_01,var_00,var_02); + self.var_3CAC = "sway1"; + self notify("sway1"); + if(common_scripts\utility::flag("_sea_bob")) + { + level.var_3CAD rotateto(self.var_3CB8,self.time,self.time * 0.5,self.time * 0.5); + } + + self rotateto(self.var_3CB8,self.time,self.time * 0.5,self.time * 0.5); + wait self.time; + self.var_3CB8 = self.var_3CB8 * -1; + self.var_3CAC = "sway2"; + self notify("sway2"); + if(common_scripts\utility::flag("_sea_bob")) + { + level.var_3CAD rotateto(self.var_3CB8,self.time,self.time * 0.5,self.time * 0.5); + } + + self rotateto(self.var_3CB8,self.time,self.time * 0.5,self.time * 0.5); + wait self.time; + } +} + +//Function Number: 9 +sea_bob_reset_loop() +{ + self endon("manual_override"); + common_scripts\utility::flag_wait("_sea_bob"); + thread func_3CC3(); +} + +//Function Number: 10 +func_3CC3() +{ + self endon("manual_override"); + level waittill("_sea_bob"); + thread sea_bob_reset_loop(); + level endon("_sea_bob"); + var_00 = 1.5; + var_01 = (0,0,0); + level.var_3CAD rotateto(var_01,var_00,var_00 * 0.5,var_00 * 0.5); + wait var_00; + wait 0.05; + level.var_3CB2 = level.lite_settings; + level.var_3CAD.angles = (0,0,0); +} + +//Function Number: 11 +sea_waves() +{ + var_00 = sea_waves_setup(); + if(!isdefined(var_00)) + { + return; + } + + self.var_3CC5 = []; + for(;;) + { + common_scripts\utility::flag_wait("_sea_waves"); + self waittill("sway1"); + thread sea_waves_fx(var_00,"right"); + common_scripts\utility::flag_wait("_sea_waves"); + self waittill("sway2"); + thread sea_waves_fx(var_00,"left"); + } +} + +//Function Number: 12 +sea_waves_fx(param_00,param_01) +{ + wait self.time * 0.5; + var_02 = 2; + var_03 = common_scripts\utility::random(sea_closestwavearray(param_00[param_01],var_02)); + if(!isdefined(self.var_3CC5[param_01])) + { + self.var_3CC5[param_01] = var_03; + } + + while(self.var_3CC5[param_01] == var_03) + { + wait 0.05; + var_03 = common_scripts\utility::random(sea_closestwavearray(param_00[param_01],var_02)); + } + + self.var_3CC5[param_01] = var_03; + var_03 thread sea_waves_fx2(); + thread common_scripts\utility::play_sound_in_space("elm_wave_crash_ext",var_03.origin); +} + +//Function Number: 13 +sea_waves_fx2() +{ + wait randomfloat(0.15); + common_scripts\utility::exploder(self.exploder.v["exploder"]); +} + +//Function Number: 14 +sea_closestwavearray(param_00,param_01) +{ + var_02 = []; + for(var_03 = 0;var_03 < param_00.size;var_03++) + { + param_00[var_03].var_3CC9 = distancesquared(param_00[var_03].origin,level.player.origin); + } + + for(var_03 = 0;var_03 < param_00.size;var_03++) + { + var_02 = func_3CCA(var_02,param_00[var_03]); + } + + var_04 = []; + var_03 = 0; + while(var_03 < param_01) + { + var_04++ = var_41[var_03]; + } + + return var_41; +} + +//Function Number: 15 +func_3CCA(param_00,param_01) +{ + if(!param_00.size) + { + param_00[0] = param_01; + return param_00; + } + + for(var_02 = 0;var_02 < param_00.size;var_02++) + { + if(param_00[var_02].var_3CC9 > param_01.var_3CC9) + { + param_00 = maps\_utility::array_insert(param_00,param_01,var_02); + break; + } + } + + if(var_02 == param_00.size) + { + param_00 = maps\_utility::array_add(param_00,param_01); + } + + return param_00; +} + +//Function Number: 16 +sea_waves_setup() +{ + var_00 = common_scripts\utility::getstructarray("wave_fx","targetname"); + var_01 = common_scripts\utility::getstruct("wave_fx_center","targetname"); + if(!var_00.size) + { + return undefined; + } + + var_02 = anglestoforward(var_01.angles); + var_03 = anglestoright(var_01.angles); + var_04 = []; + for(var_05 = 0;var_05 < var_01.size;var_05++ = var_41["left"]) + { + var_01[var_05].forward = anglestoforward(var_01[var_05].angles); + var_01[var_05].up = anglestoup(var_01[var_05].angles); + var_01[var_05].right = anglestoright(var_01[var_05].angles); + } + + for(var_05 = 0;var_05 < var_01.size;var_05++ = []) + { + if(vectordot(var_01[var_05].forward,var_04) > 0) + { + var_41["right"][var_41["right"].size] = var_01[var_05]; + continue; + } + + var_41["left"][var_41["left"].size] = var_01[var_05]; + } + + var_06 = level.var_3CCC; + for(var_05 = 0;var_05 < var_06.size;var_05++ = var_41["right"]) + { + var_06[var_05].origin = var_06[var_05].v["origin"]; + } + + for(var_05 = 0;var_05 < var_41["right"].size;var_05++ = []) + { + var_07 = maps\_utility::getclosest(var_41["right"][var_05].origin,var_06,64); + var_06 = common_scripts\utility::array_remove(var_06,var_07); + if(isdefined(var_41["right"][var_05].angles)) + { + var_07.v["forward"] = anglestoup(var_41["right"][var_05].angles); + } + + var_41["right"][var_05].exploder = var_07; + } + + for(var_05 = 0;var_05 < var_41["left"].size;var_05++) + { + var_07 = maps\_utility::getclosest(var_41["left"][var_05].origin,var_06,64); + var_06 = common_scripts\utility::array_remove(var_06,var_07); + if(isdefined(var_41["left"][var_05].angles)) + { + var_07.v["forward"] = anglestoup(var_41["left"][var_05].angles); + } + + var_41["left"][var_05].exploder = var_07; + } + + return var_41; +} + +//Function Number: 17 +sea_litebob() +{ + for(;;) + { + wait 0.2; + var_00 = self.angles * 2; + var_00 = (var_00[0],var_00[1],var_00[2]); + var_01 = level.var_3CB2; + level.var_3CB2 = combineangles(var_00,level.lite_settings); + var_02 = level.var_3CB2; + var_03 = anglestoforward(var_01); + var_04 = anglestoforward(var_02); + lerpsundirection(var_03,var_04,0.2); + } +} + +//Function Number: 18 +func_3CCE() +{ + for(;;) + { + common_scripts\utility::flag_wait("_sea_viewbob"); + level.player playersetgroundreferenceent(self); + if(common_scripts\utility::flag("_sea_viewbob")) + { + level waittill("_sea_viewbob"); + } + + level.player playersetgroundreferenceent(undefined); + } +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_shellshock.gsc b/MW3/Xbox/SP/maps/_shellshock.gsc new file mode 100644 index 0000000..93b7868 --- /dev/null +++ b/MW3/Xbox/SP/maps/_shellshock.gsc @@ -0,0 +1,90 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_shellshock.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 3 + * Decompile Time: 43 ms + * Timestamp: 10/27/2023 2:34:27 AM +*******************************************************************/ + +//Function Number: 1 +main(param_00,param_01,param_02,param_03,param_04,param_05) +{ + level thread func_3C0F(param_00,param_01,param_02,param_03,param_04,param_05); +} + +//Function Number: 2 +func_3C0F(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if(!isdefined(param_00)) + { + param_00 = 12; + } + else if(param_00 < 7) + { + param_00 = 7; + } + + if(!isdefined(param_01)) + { + param_01 = 150; + } + + if(!isdefined(param_02)) + { + param_02 = 100; + } + + if(!isdefined(param_03)) + { + param_03 = 100; + } + + if(!isdefined(param_05)) + { + var_06 = "default"; + } + else + { + var_06 = var_06; + } + + var_07 = level.player getorigin() + (0,8,2); + var_08 = 320; + var_09 = param_01 + randomint(param_02); + var_0A = param_03; + level.player playsound("weapons_rocket_explosion"); + wait 0.25; + radiusdamage(var_07,var_08,var_09,var_0A); + earthquake(0.75,2,var_07,2250); + if(isalive(level.player)) + { + level.player allowstand(0); + level.player allowcrouch(0); + level.player allowprone(1); + wait 0.15; + level.player viewkick(127,level.player.origin); + level.player shellshock(var_06,param_00); + if(!isdefined(param_04)) + { + level.player thread func_3C10(param_00); + } + + wait 1.5; + level.player allowstand(1); + level.player allowcrouch(1); + } +} + +//Function Number: 3 +func_3C10(param_00) +{ + self.shellshocked = 1; + self.ignoreme = 1; + self notify("player is shell shocked"); + self endon("player is shell shocked"); + wait param_00 - 1; + self.shellshocked = 0; + self.ignoreme = 0; +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_shg_common.gsc b/MW3/Xbox/SP/maps/_shg_common.gsc new file mode 100644 index 0000000..d0fd90e --- /dev/null +++ b/MW3/Xbox/SP/maps/_shg_common.gsc @@ -0,0 +1,1905 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_shg_common.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 82 + * Decompile Time: 1397 ms + * Timestamp: 10/27/2023 2:34:53 AM +*******************************************************************/ + +//Function Number: 1 +func_1232(param_00) +{ + var_01 = common_scripts\utility::getstruct(param_00,"targetname"); + level.player setorigin(var_01.origin); + var_02 = undefined; + if(isdefined(var_01.target)) + { + var_02 = getent(var_01.target,"targetname"); + } + + if(isdefined(var_02)) + { + level.player setplayerangles(vectortoangles(var_02.origin - var_01.origin)); + return; + } + + level.player setplayerangles(var_01.angles); +} + +//Function Number: 2 +tank_fire_at_enemies(param_00) +{ + self endon("death"); + self endon("stop_random_tank_fire"); + var_01 = undefined; + for(;;) + { + if(isdefined(var_01) && var_01.health > 0) + { + self setturrettargetent(var_01,(randomintrange(-64,64),randomintrange(-64,64),randomintrange(-16,100))); + if(sighttracepassed(self.origin + (0,0,100),var_01.origin + (0,0,40),0,self)) + { + self.var_1234++; + self fireweapon(); + if(self.var_1234 >= 3) + { + if((!isdefined(var_01.damageshield) || var_01.damageshield == 0) && !isdefined(var_01.magic_bullet_shield) || var_01.magic_bullet_shield == 0) + { + var_01 notify("death"); + } + } + + wait randomintrange(4,10); + } + else + { + var_01 = undefined; + wait 1; + } + } + else + { + if(!isalive(self)) + { + break; + } + + var_01 = get_tank_target_by_script_noteworthy(param_00); + self.var_1234 = 0; + wait 1; + } + + wait randomfloatrange(0.05,0.5); + } +} + +//Function Number: 3 +get_tank_target_by_script_noteworthy(param_00) +{ + var_01 = getentarray(param_00,"script_noteworthy"); + if(isdefined(var_01)) + { + var_02 = common_scripts\utility::random(var_01); + if(isdefined(var_02) && !isspawner(var_02) && var_02.health > 0) + { + var_03 = var_02; + self notify("new_target"); + return var_03; + } + else + { + return undefined; + } + } + + return undefined; +} + +//Function Number: 4 +func_1236(param_00,param_01,param_02,param_03) +{ + if(!isdefined(param_02)) + { + param_02 = 1; + } + + var_04 = getentarray(param_01,"script_noteworthy"); + var_05 = []; + var_06 = 0; + var_07 = []; + foreach(var_09 in var_04) + { + if(isspawner(var_09)) + { + var_05[var_05.size] = var_09; + } + } + + var_0B = common_scripts\utility::getstruct(param_00,"targetname"); + var_0C = 0; + foreach(var_0E in var_05) + { + var_0F = var_0E maps\_utility::spawn_ai(1); + if(param_02) + { + var_0F thread maps\_utility::replace_on_death(); + } + + var_0F forceteleport(var_0B.origin,var_0B.angles); + var_0F setgoalpos(var_0F.origin); + var_07 = maps\_utility::array_add(var_07,var_0F); + var_0C++; + if(isdefined(param_03) && var_0C >= param_03) + { + return var_07; + } + } + + return var_07; +} + +//Function Number: 5 +setupplayerforanimations() +{ + if(level.player isthrowinggrenade()) + { + wait 1.2; + } + + level.player allowmelee(0); + level.player disableoffhandweapons(); + level.player allowcrouch(0); + level.player allowprone(0); + level.player allowsprint(0); + if(level.player getstance() != "stand") + { + level.player setstance("stand"); + wait 0.4; + } +} + +//Function Number: 6 +func_1239() +{ + level.player allowsprint(1); + level.player allowprone(1); + level.player allowcrouch(1); + level.player enableoffhandweapons(); + level.player allowmelee(1); +} + +//Function Number: 7 +forceplayerweapon_start(param_00) +{ + if(!isdefined(param_00)) + { + param_00 = 1; + } + + level.old_force_weapon = level.player getcurrentweapon(); + level.player giveweapon(level.force_weapon); + level.player givemaxammo(level.force_weapon); + level.player switchtoweaponimmediate(level.force_weapon); + if(param_00) + { + level.player enableweapons(); + } + + level.player disableweaponswitch(); +} + +//Function Number: 8 +forceplayerweapon_end(param_00) +{ + if(!isdefined(param_00)) + { + param_00 = 1; + } + + level.player takeweapon(level.force_weapon); + if(isdefined(level.old_force_weapon)) + { + level.player switchtoweapon(level.old_force_weapon); + } + + if(param_00) + { + level.player enableweapons(); + level.player enableweaponswitch(); + } + + level.old_force_weapon = undefined; +} + +//Function Number: 9 +func_123E() +{ + foreach(var_01 in level.players) + { + if(!isdefined(var_01.sniper_zoom_hint_hud)) + { + var_01.sniper_zoom_hint_hud = var_01 maps\_hud_util::createclientfontstring("default",1.75); + var_01.sniper_zoom_hint_hud.horzalign = "center"; + var_01.sniper_zoom_hint_hud.vertalign = "top"; + var_01.sniper_zoom_hint_hud.alignx = "center"; + var_01.sniper_zoom_hint_hud.aligny = "top"; + var_01.sniper_zoom_hint_hud.x = 0; + var_01.sniper_zoom_hint_hud.y = 20; + var_01.sniper_zoom_hint_hud settext(&"VARIABLE_SCOPE_SNIPER_ZOOM"); + var_01.sniper_zoom_hint_hud.alpha = 0; + var_01.sniper_zoom_hint_hud.sort = 0.5; + var_01.sniper_zoom_hint_hud.foreground = 1; + } + + var_01.var_1241 = 1; + } + + var_03 = 0; + level.players[0].sniper_dvar = "cg_playerFovScale0"; + if(level.players.size == 2) + { + level.players[1].sniper_dvar = "cg_playerFovScale1"; + } + + foreach(var_01 in level.players) + { + var_01 thread func_1248(); + var_01 thread func_1249(); + } + + if(!isdefined(level.variable_scope_weapons)) + { + level.variable_scope_weapons = []; + } + + var_06 = undefined; + var_07 = undefined; + for(;;) + { + var_08 = 0; + var_07 = var_06; + var_06 = undefined; + foreach(var_0A in level.variable_scope_weapons) + { + foreach(var_01 in level.players) + { + if(var_01 getcurrentweapon() == var_0A && isalive(var_01)) + { + var_08 = 1; + var_06 = var_01; + break; + } + } + + if(var_08) + { + break; + } + } + + if(var_08 && !var_06 isreloading() && !var_06 isswitchingweapon()) + { + if(var_06 maps\_utility::isads() && var_06 adsbuttonpressed()) + { + var_06 turnonvariablescopehud(var_03); + var_03 = 1; + if(isdefined(level.variable_scope_shadow_center)) + { + var_0E = undefined; + var_0F = undefined; + var_10 = anglestoforward(var_06 getplayerangles()); + var_11 = var_06.origin; + foreach(var_13 in level.variable_scope_shadow_center) + { + var_14 = anglestoforward(vectortoangles(var_13 - var_11)); + var_15 = vectordot(var_10,var_14); + if(!isdefined(var_0E) || var_15 > var_0F) + { + var_0E = var_13; + var_0F = var_15; + } + } + + if(isdefined(var_0E)) + { + setsaveddvar("sm_sunShadowCenter",var_0E); + } + } + } + else if(var_03) + { + var_03 = 0; + if(isdefined(var_06)) + { + var_06 turnoffvariablescopehud(); + } + + setsaveddvar("sm_sunShadowCenter","0 0 0"); + } + } + else if(var_03) + { + var_03 = 0; + if(isdefined(var_07)) + { + var_07 turnoffvariablescopehud(); + } + + setsaveddvar("sm_sunShadowCenter","0 0 0"); + } + + wait 0.05; + } +} + +//Function Number: 10 +turnonvariablescopehud(param_00) +{ + self disableoffhandweapons(); + setsaveddvar(self.sniper_dvar,self.var_1241); + self.sniper_zoom_hint_hud.alpha = 1; + if(!param_00) + { + level notify("variable_sniper_hud_enter"); + } +} + +//Function Number: 11 +turnoffvariablescopehud() +{ + level notify("variable_sniper_hud_exit"); + self enableoffhandweapons(); + setsaveddvar(self.sniper_dvar,1); + self.sniper_zoom_hint_hud.alpha = 0; +} + +//Function Number: 12 +func_1248() +{ + notifyoncommand("mag_cycle","+melee_zoom"); + notifyoncommand("mag_cycle","+sprint_zoom"); + for(;;) + { + self waittill("mag_cycle"); + if(self.sniper_zoom_hint_hud.alpha) + { + if(self.var_1241 == 0.5) + { + self.var_1241 = 1; + continue; + } + + self.var_1241 = 0.5; + } + } +} + +//Function Number: 13 +func_1249() +{ + self waittill("death"); + turnoffvariablescopehud(); +} + +//Function Number: 14 +convert_fov_string(param_00) +{ + if(param_00 == 0.5) + { + return 10; + } + + if(param_00 == 1) + { + return 5; + } + + return 5; +} + +//Function Number: 15 +worldtolocalcoords(param_00) +{ + var_01 = param_00 - self.origin; + return (vectordot(var_01,anglestoforward(self.angles)),-1 * vectordot(var_01,anglestoright(self.angles)),vectordot(var_01,anglestoup(self.angles))); +} + +//Function Number: 16 +func_124C(param_00,param_01) +{ + return (param_00[1] * param_01[2] - param_00[2] * param_01[1],param_00[2] * param_01[0] - param_00[0] * param_01[2],param_00[0] * param_01[1] - param_00[1] * param_01[0]); +} + +//Function Number: 17 +createdebugtexthud(param_00,param_01,param_02,param_03,param_04,param_05) +{ + var_06 = 2; + if(isdefined(param_05)) + { + var_06 = param_05; + } + + var_07 = level.player maps\_hud_util::createclientfontstring("default",var_06); + var_07.x = param_01; + var_07.y = param_02; + var_07.sort = 1; + var_07.horzalign = "fullscreen"; + var_07.vertalign = "fullscreen"; + var_07.alpha = 1; + if(!isdefined(param_03)) + { + param_03 = (1,1,1); + } + + var_07.color = param_03; + if(isdefined(param_04)) + { + var_07.label = param_04; + } + + level.debug_text_hud[param_00] = var_07; +} + +//Function Number: 18 +printdebugtexthud(param_00,param_01) +{ + level.debug_text_hud[param_00] setvalue(param_01); +} + +//Function Number: 19 +printdebugtextstringhud(param_00,param_01) +{ + level.debug_text_hud[param_00] settext(param_01); +} + +//Function Number: 20 +func_1251(param_00,param_01) +{ + level.debug_text_hud[param_00].color = param_01; +} + +//Function Number: 21 +func_1252(param_00) +{ + level.debug_text_hud[param_00] destroy(); + level.debug_text_hud[param_00] = undefined; +} + +//Function Number: 22 +dialogue_reminder(param_00,param_01,param_02,param_03,param_04) +{ + level endon("stop_reminders"); + level endon("missionfailed"); + var_05 = undefined; + if(!isdefined(param_03)) + { + param_03 = 10; + } + + if(!isdefined(param_04)) + { + param_04 = 20; + } + + while(!common_scripts\utility::flag(param_01)) + { + var_06 = randomfloatrange(param_03,param_04); + var_07 = common_scripts\utility::random(param_02); + if(isdefined(var_05) && var_07 == var_05) + { + continue; + } + else + { + var_05 = var_07; + wait var_06; + if(!common_scripts\utility::flag(param_01)) + { + if(isstring(param_00) && param_00 == "radio") + { + conversation_start(); + maps\_utility::func_DDF(var_07); + conversation_stop(); + continue; + } + + conversation_start(); + param_00 maps\_utility::dialogue_queue(var_07); + conversation_stop(); + } + } + } +} + +//Function Number: 23 +conversation_start() +{ + if(!common_scripts\utility::flag_exist("flag_conversation_in_progress")) + { + common_scripts\utility::flag_init("flag_conversation_in_progress"); + } + + common_scripts\utility::flag_waitopen("flag_conversation_in_progress"); + common_scripts\utility::flag_set("flag_conversation_in_progress"); +} + +//Function Number: 24 +conversation_stop() +{ + common_scripts\utility::flag_clear("flag_conversation_in_progress"); +} + +//Function Number: 25 +array_find(param_00,param_01) +{ + foreach(var_04, var_03 in param_00) + { + if(var_03 == param_01) + { + return var_04; + } + } + + return undefined; +} + +//Function Number: 26 +array_combine_unique(param_00,param_01) +{ + var_02 = []; + foreach(var_04 in param_00) + { + if(!isdefined(array_find(var_02,var_04))) + { + var_02[var_02.size] = var_04; + } + } + + foreach(var_04 in param_01) + { + if(!isdefined(array_find(var_02,var_04))) + { + var_02[var_02.size] = var_04; + } + } + + return var_02; +} + +//Function Number: 27 +func_1259(param_00) +{ + var_01 = getentarray(); + foreach(var_03 in var_01) + { + if(isdefined(var_03.script_flag) && common_scripts\utility::string_starts_with(var_03.script_flag,param_00)) + { + var_03.script_specialops = 1; + } + } +} + +//Function Number: 28 +so_mark_class(param_00) +{ + var_01 = getentarray(); + foreach(var_03 in var_01) + { + if(isdefined(var_03.classname) && var_03.classname == param_00) + { + var_03.script_specialops = 1; + } + } +} + +//Function Number: 29 +laser_targeting_device(param_00) +{ + param_00 endon("remove_laser_targeting_device"); + param_00.var_125E = undefined; + param_00.laserforceon = 0; + param_00 setweaponhudiconoverride("actionslot4","dpad_laser_designator"); + param_00 thread cleanuplasertargetingdevice(); + param_00 notifyonplayercommand("use_laser","+actionslot 4"); + param_00 notifyonplayercommand("fired_laser","+attack"); + param_00 notifyonplayercommand("fired_laser","+attack_akimbo_accessible"); + param_00.laserallowed = 1; + param_00.lasercooldownafterhit = 20; + param_00 childthread monitorlaseroff(); + for(;;) + { + param_00 waittill("use_laser"); + if(param_00.laserforceon || !param_00.laserallowed || param_00 shouldforcedisablelaser()) + { + param_00 notify("cancel_laser"); + param_00 laserforceoff(); + param_00.laserforceon = 0; + param_00 allowads(1); + wait 0.2; + param_00 allowfire(1); + continue; + } + + param_00 laserforceon(); + param_00 allowfire(0); + param_00.laserforceon = 1; + param_00 allowads(0); + param_00 thread laser_designate_target(); + } +} + +//Function Number: 30 +shouldforcedisablelaser() +{ + var_00 = self getcurrentweapon(); + if(var_00 == "rpg") + { + return 1; + } + + if(common_scripts\utility::string_starts_with(var_00,"gl")) + { + return 1; + } + + if(isdefined(level.laser_designator_disable_list) && isarray(level.laser_designator_disable_list)) + { + foreach(var_02 in level.laser_designator_disable_list) + { + if(var_00 == var_02) + { + return 1; + } + } + } + + if(self isreloading()) + { + return 1; + } + + if(self isthrowinggrenade()) + { + return 1; + } + + return 0; +} + +//Function Number: 31 +cleanuplasertargetingdevice() +{ + self waittill("remove_laser_targeting_device"); + self setweaponhudiconoverride("actionslot4","none"); + self notify("cancel_laser"); + self laserforceoff(); + self.laserforceon = undefined; + self allowfire(1); + self allowads(1); +} + +//Function Number: 32 +monitorlaseroff() +{ + for(;;) + { + if(shouldforcedisablelaser() && isdefined(self.laserforceon) && self.laserforceon) + { + self notify("use_laser"); + wait 2; + } + + wait 0.05; + } +} + +//Function Number: 33 +laser_designate_target() +{ + self endon("cancel_laser"); + for(;;) + { + self waittill("fired_laser"); + var_00 = func_126A(); + var_01 = var_00["position"]; + var_02 = var_00["entity"]; + level notify("laser_coordinates_received"); + var_03 = undefined; + if(isdefined(level.laser_targets) && isdefined(var_02) && maps\_utility::func_6E9(level.laser_targets,var_02)) + { + var_03 = var_02; + level.laser_targets = common_scripts\utility::array_remove(level.laser_targets,var_02); + } + else + { + var_03 = gettargettriggerhit(var_01); + } + + if(isdefined(var_03)) + { + thread laser_artillery(var_03); + level notify("laser_target_painted"); + wait 0.5; + self notify("use_laser"); + } + } +} + +//Function Number: 34 +gettargettriggerhit(param_00) +{ + if(!isdefined(level.laser_triggers) || level.laser_triggers.size == 0) + { + return undefined; + } + + foreach(var_02 in level.laser_triggers) + { + var_03 = distance2d(param_00,var_02.origin); + var_04 = param_00[2] - var_02.origin[2]; + if(!isdefined(var_02.radius)) + { + continue; + } + + if(!isdefined(var_02.height)) + { + continue; + } + + if(var_03 <= var_02.radius && var_04 <= var_02.height && var_04 >= 0) + { + level.laser_triggers = common_scripts\utility::array_remove(level.laser_triggers,var_02); + return getent(var_02.target,"script_noteworthy"); + } + } + + return undefined; +} + +//Function Number: 35 +func_126A() +{ + var_00 = self geteye(); + var_01 = self getplayerangles(); + var_02 = anglestoforward(var_01); + var_03 = var_00 + var_02 * 7000; + var_04 = bullettrace(var_00,var_03,1,self); + var_05 = var_04["entity"]; + if(isdefined(var_05)) + { + var_04["position"] = var_05.origin; + } + + return var_04; +} + +//Function Number: 36 +laser_artillery(param_00) +{ + level.player endon("remove_laser_targeting_device"); + level.player.laserallowed = 0; + self setweaponhudiconoverride("actionslot4","dpad_killstreak_hellfire_missile_inactive"); + maps\_utility::flavorbursts_off("allies"); + var_01 = level.player; + wait 2.5; + if(!isdefined(param_00.script_index)) + { + param_00.script_index = 99; + } + + wait 1; + if(isdefined(param_00.script_group)) + { + var_02 = get_geo_group("geo_before",param_00.script_group); + if(var_02.size > 0) + { + common_scripts\utility::array_call(var_02,::hide); + } + + var_03 = get_geo_group("geo_after",param_00.script_group); + if(var_03.size > 0) + { + common_scripts\utility::array_call(var_03,::show); + } + } + + wait level.player.lasercooldownafterhit; + level.player.laserallowed = 1; + self setweaponhudiconoverride("actionslot4","dpad_laser_designator"); +} + +//Function Number: 37 +get_geo_group(param_00,param_01) +{ + var_02 = getentarray(param_00,"targetname"); + var_03 = []; + foreach(var_05 in var_02) + { + if(isdefined(var_05.script_group) && var_05.script_group == param_01) + { + var_03[var_03.size] = var_05; + } + } + + return var_03; +} + +//Function Number: 38 +func_1270(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07) +{ + if(!isdefined(self.inuse) || self.inuse == 0) + { + self.inuse = 1; + } + else + { + wait 0.05; + return 0; + } + + var_08 = 0; + if(!isdefined(param_02)) + { + param_02 = 3; + } + + var_09 = 57; + var_0A = maps\_hud_util::createclientprogressbar(param_00,var_09); + param_00 playerlinkto(self); + param_00 playerlinkedoffsetenable(); + param_00 disableweapons(); + param_00 disableoffhandweapons(); + param_00 allowmelee(0); + var_0B = undefined; + if(isdefined(param_03)) + { + var_0B = param_00 maps\_hud_util::createclientfontstring("default",1.2); + var_0B maps\_hud_util::setpoint("CENTER",undefined,0,45); + var_0B settext(param_03); + } + + var_0C = 0; + while(param_00 usebuttonpressed()) + { + var_0A maps\_hud_util::updatebar(var_08 / param_02); + wait 0.05; + var_08 = var_08 + 0.05; + if(var_08 > param_02) + { + if(isdefined(param_04)) + { + thread func_1275(param_00,param_04); + } + + if(isdefined(param_01)) + { + [[ param_01 ]](); + } + + var_0C = 1; + break; + } + + if(param_00.laststand == 1) + { + break; + } + + if(isdefined(param_07) && common_scripts\utility::flag(param_07)) + { + break; + } + + if(common_scripts\utility::flag("missionfailed")) + { + break; + } + } + + if(!var_0C) + { + if(isdefined(param_06)) + { + thread progress_bar_hud_failure(param_00,param_06); + } + + if(isdefined(param_05)) + { + [[ param_05 ]](); + } + } + + param_00 allowmelee(1); + param_00 enableoffhandweapons(); + if(!isdefined(param_07) && param_07 == "dog_attack" && common_scripts\utility::flag("dog_attack")) + { + param_00 enableweapons(); + param_00 unlink(); + } + + self.inuse = 0; + if(isdefined(var_0B)) + { + var_0B maps\_hud_util::destroyelem(); + } + + var_0A maps\_hud_util::destroyelem(); + return var_0C; +} + +//Function Number: 39 +func_1272(param_00,param_01,param_02,param_03) +{ + if(isdefined(self)) + { + self playsound(param_03,"sound_played",1); + } + + var_04 = newclienthudelem(param_00); + var_04.alignx = "center"; + var_04.aligny = "middle"; + var_04.horzalign = "center"; + var_04.vertalign = "middle"; + var_04.font = "hudsmall"; + var_04.foreground = 1; + var_04.hidewheninmenu = 1; + var_04.hidewhendead = 1; + var_04.sort = 2; + var_04.label = param_01; + var_04 [[ param_02 ]](); + var_04 thread hud_blink(); + wait 2; + var_04 notify("stop_blink"); + wait 0.05; + var_04 destroy(); +} + +//Function Number: 40 +progress_bar_hud_failure(param_00,param_01) +{ + func_1272(param_00,param_01,::maps\_specialops::set_hud_red,"so_sample_not_collected"); +} + +//Function Number: 41 +func_1275(param_00,param_01) +{ + func_1272(param_00,param_01,::maps\_specialops::set_hud_green,"arcademode_2x"); +} + +//Function Number: 42 +hud_blink(param_00) +{ + self endon("stop_blink"); + self endon("death"); + var_01 = 0.1; + var_02 = 0.5; + for(;;) + { + self fadeovertime(var_01); + self.alpha = 1; + wait var_02; + self fadeovertime(var_01); + self.alpha = 0; + wait var_02; + } +} + +//Function Number: 43 +func_1278() +{ + var_00 = getentarray("shg_vision_multiple_trigger","targetname"); + foreach(var_02 in var_00) + { + var_02 thread vision_change_multiple_internal(); + } +} + +//Function Number: 44 +vision_change_multiple_internal() +{ + var_00 = common_scripts\utility::getstructarray(self.target,"targetname"); + foreach(var_02 in var_00) + { + var_03 = vectornormalize(self.origin - var_02.origin); + var_02.forward_for_vision_change = var_03; + } + + for(;;) + { + self waittill("trigger",var_05); + if(isplayer(var_05)) + { + var_06 = anglestoforward(var_05 getplayerangles()); + var_07 = undefined; + var_08 = 0; + foreach(var_02 in var_00) + { + var_0A = vectordot(var_06,var_02.forward_for_vision_change); + if(!isdefined(var_07) || var_0A < var_08) + { + var_07 = var_02; + var_08 = var_0A; + } + } + + var_0C = 1; + if(isdefined(var_07.script_duration)) + { + var_0C = var_07.script_duration; + } + + var_07 maps\_lights::set_sun_shadow_params(var_0C); + wait var_0C; + } + } +} + +//Function Number: 45 +change_character_model(param_00) +{ + self setmodel(param_00); + update_weapon_tag_visibility(self.weapon); +} + +//Function Number: 46 +update_weapon_tag_visibility(param_00,param_01) +{ + if(isdefined(param_00) && param_00 != "none") + { + var_02 = getweaponhidetags(param_00); + var_03 = 0; + var_04 = getweaponmodel(param_00,var_03); + if(isdefined(param_01)) + { + var_04 = param_01; + } + + for(var_05 = 0;var_05 < var_02.size;var_05++) + { + self hidepart(var_02[var_05],var_04); + } + } +} + +//Function Number: 47 +func_127D(param_00,param_01,param_02) +{ + if(issplitscreen()) + { + if(self == level.player) + { + param_00 = param_00 + 2; + } + + param_00 = param_00 / 2; + } + + return maps\_specialops::func_127E(param_00,param_01,param_02,self); +} + +//Function Number: 48 +func_127F(param_00,param_01,param_02,param_03,param_04,param_05) +{ + level.var_1280 = "award_positive"; + level.bonus_2_shader = "award_positive"; + level.challenge_1 = get_challenge_values(param_00,param_01,param_02); + level.challenge_2 = get_challenge_values(param_03,param_04,param_05); + common_scripts\utility::array_thread(level.players,::require_defined_bonuses); + level.custom_eog_no_defaults = 1; + level.eog_summary_callback = ::custom_eog_summary; + handle_bonus_xp(); +} + +//Function Number: 49 +get_challenge_values(param_00,param_01,param_02) +{ + var_03 = []; + if(isdefined(param_00)) + { + } + else + { + var_41["max_successes"] = undefined; + } + + return var_41; +} + +//Function Number: 50 +require_defined_bonuses() +{ + if(!isdefined(self.bonus_1)) + { + self.bonus_1 = 0; + } + + if(!isdefined(self.bonus_2)) + { + self.bonus_2 = 0; + } +} + +//Function Number: 51 +custom_eog_summary() +{ + if(issplitscreen()) + { + setdvar("ui_hide_hint",1); + } + + if(!level.var_1291) + { + setdvar("ui_hide_hint",1); + } + + level.challenge_time_limit = func_1292(); + level.session_score = 0; + foreach(var_01 in level.players) + { + var_01.final_summary = get_final_summary(var_01); + level.session_score = level.session_score + var_01.final_summary["kill_score"]; + level.session_score = level.session_score + var_01.final_summary["challenge_1"]; + level.session_score = level.session_score + var_01.final_summary["challenge_2"]; + } + + level.session_score = level.session_score + level.players[0].final_summary["gameskill_score"]; + level.session_score = level.session_score + level.players[0].final_summary["time_score"]; + level.session_score = int(level.session_score); + foreach(var_01 in level.players) + { + var_01 maps\_specialops::override_summary_score(level.session_score); + if(maps\_utility::func_E89()) + { + var_04 = maps\_utility::get_other_player(var_01); + var_01 maps\_utility::func_128F("","@SPECIAL_OPS_PERFORMANCE_YOU","@SPECIAL_OPS_PERFORMANCE_PARTNER"); + var_01 maps\_utility::func_128F("@SPECIAL_OPS_UI_DIFFICULTY",var_01.final_summary["difficulty"],var_04.final_summary["difficulty"]); + var_01 maps\_utility::func_128F("@SPECIAL_OPS_UI_KILLS",var_01.final_summary["kills_num"],var_04.final_summary["kills_num"]); + var_01 maps\_utility::func_128F(level.challenge_1["description"],var_01.final_summary["ch_1_tally"],var_04.final_summary["ch_1_tally"]); + if(level.challenge_2["value"] > 0) + { + var_01 maps\_utility::func_128F(level.challenge_2["description"],var_01.final_summary["ch_2_tally"],var_04.final_summary["ch_2_tally"]); + } + + var_01 maps\_utility::func_128F(var_01.final_summary["t_message"],"",var_04.final_summary["time_string"]); + if(level.challenge_2["value"] <= 0 || !issplitscreen()) + { + var_01 maps\_utility::add_custom_eog_summary_line_blank(); + } + + if(!level.var_1291) + { + var_01 maps\_utility::func_128F("@SPECIAL_OPS_UI_SCORE","",level.session_score); + } + + continue; + } + + if(!level.var_1291) + { + var_01 maps\_utility::func_128F("","","@SPECIAL_OPS_POINTS"); + var_01 maps\_utility::func_128F("@SPECIAL_OPS_UI_DIFFICULTY",var_01.final_summary["difficulty"],var_01.final_summary["gameskill_score"]); + var_01 maps\_utility::func_128F(var_01.final_summary["t_message"],var_01.final_summary["time_string"],var_01.final_summary["time_score"]); + var_01 maps\_utility::func_128F("@SPECIAL_OPS_UI_KILLS",var_01.final_summary["kills_num"],var_01.final_summary["kill_score"]); + var_01 maps\_utility::func_128F(level.challenge_1["description"],var_01.final_summary["ch_1_tally"],var_01.final_summary["challenge_1"]); + if(level.challenge_2["value"] > 0) + { + var_01 maps\_utility::func_128F(level.challenge_2["description"],var_01.final_summary["ch_2_tally"],var_01.final_summary["challenge_2"]); + } + + if(level.challenge_2["value"] <= 0 || !issplitscreen()) + { + var_01 maps\_utility::add_custom_eog_summary_line_blank(); + } + + var_01 maps\_utility::func_128F("@SPECIAL_OPS_UI_SCORE"," ",level.session_score); + continue; + } + + var_01 maps\_utility::func_128F("@SPECIAL_OPS_UI_DIFFICULTY","",var_01.final_summary["difficulty"]); + var_01 maps\_utility::func_128F(var_01.final_summary["t_message"],"",var_01.final_summary["time_string"]); + var_01 maps\_utility::func_128F("@SPECIAL_OPS_UI_KILLS","",var_01.final_summary["kills_num"]); + var_01 maps\_utility::func_128F(level.challenge_1["description"],"",var_01.final_summary["ch_1_tally"]); + if(level.challenge_2["value"] > 0) + { + var_01 maps\_utility::func_128F(level.challenge_2["description"],"",var_01.final_summary["ch_2_tally"]); + } + } +} + +//Function Number: 52 +func_1292() +{ + if(!isdefined(level.so_mission_worst_time)) + { + level.so_mission_worst_time = 420000; + } + + if(!isdefined(level.so_mission_min_time)) + { + level.so_mission_min_time = 0; + } + + if(!isdefined(level.challenge_time_limit)) + { + level.timed_mission = 0; + level.challenge_time_limit = level.so_mission_worst_time; + } + else + { + level.timed_mission = 1; + } + + level.var_3F17 = level.so_mission_worst_time - level.so_mission_min_time; + return level.challenge_time_limit; +} + +//Function Number: 53 +get_final_summary(param_00,param_01,param_02) +{ + param_00.final_summary = []; + param_00.final_summary["final_score"] = 0; + param_00.final_summary["level_time"] = level.challenge_end_time - level.challenge_start_time; + if(level.challenge_time_limit > param_00.final_summary["level_time"]) + { + param_00.final_summary["t_message"] = get_time_message("bonus"); + param_00.final_summary["remaining_time"] = int(level.challenge_time_limit - param_00.final_summary["level_time"]); + if(!level.var_1291) + { + } + + if(!level.timed_mission) + { + if(level.so_mission_min_time <= param_00.final_summary["level_time"]) + { + param_00.final_summary["time_percent"] = max(level.var_3F17 - param_00.final_summary["level_time"] - level.so_mission_min_time / level.var_3F17,0); + } + else + { + param_00.final_summary["time_percent"] = 1; + } + } + else if(level.so_mission_min_time >= param_00.final_summary["remaining_time"]) + { + param_00.final_summary["time_percent"] = max(param_00.final_summary["remaining_time"] / level.var_3F17,0); + } + else + { + param_00.final_summary["time_percent"] = 1; + } + + param_00.final_summary["time_score"] = int(param_00.final_summary["time_percent"] * 5000); + if(level.timed_mission) + { + param_00.final_summary["time_string"] = maps\_utility::convert_to_time_string(param_00.final_summary["remaining_time"] * 0.001,1); + } + else + { + param_00.final_summary["time_string"] = maps\_utility::convert_to_time_string(param_00.final_summary["level_time"] * 0.001,1); + } + + param_00.final_summary["final_score"] = param_00.final_summary["final_score"] + param_00.final_summary["time_score"]; + } + else + { + param_00.final_summary["t_message"] = get_time_message("no_bonus"); + param_00.final_summary["time_string"] = maps\_utility::convert_to_time_string(param_00.final_summary["level_time"] * 0.001,1); + param_00.final_summary["time_score"] = 0; + } + + param_00.final_summary["gameskill_low"] = level.specops_reward_gameskill; + param_00.final_summary["gameskill_score"] = max(10000 * param_00.final_summary["gameskill_low"],0); + param_00.final_summary["final_score"] = param_00.final_summary["final_score"] + param_00.final_summary["gameskill_score"]; + if(isdefined(level.challenge_1["max_successes"])) + { + param_00.final_summary["challenge_1"] = min(level.challenge_1["value"] * param_00.bonus_1,level.challenge_1["value"] * level.challenge_1["max_successes"]); + } + else + { + param_00.final_summary["challenge_1"] = level.challenge_1["value"] * param_00.bonus_1; + } + + if(isdefined(level.challenge_2["max_successes"])) + { + param_00.final_summary["challenge_2"] = min(level.challenge_2["value"] * param_00.bonus_2,level.challenge_2["value"] * level.challenge_2["max_successes"]); + } + else + { + param_00.final_summary["challenge_2"] = level.challenge_2["value"] * param_00.bonus_2; + } + + param_00.final_summary["final_score"] = param_00.final_summary["final_score"] + param_00.final_summary["challenge_1"] + param_00.final_summary["challenge_2"]; + param_00.final_summary["ch_1_tally"] = get_tally_string(param_00.bonus_1,level.challenge_1["max_successes"]); + param_00.final_summary["ch_2_tally"] = get_tally_string(param_00.bonus_2,level.challenge_2["max_successes"]); + param_00.final_summary["kills_num"] = param_00.stats["kills"]; + param_00.final_summary["kill_score"] = min(param_00.stats["kills"] * 25,2500); + param_00.final_summary["final_score"] = param_00.final_summary["final_score"] + param_00.final_summary["kill_score"]; + param_00.final_summary["final_score"] = func_12A8(param_00,param_00.final_summary["final_score"],param_00.final_summary["gameskill_score"]); + param_00.final_summary["difficulty"] = maps\_specialops::so_get_difficulty_menu_string(param_00.gameskill); + return param_00.final_summary; +} + +//Function Number: 54 +get_tally_string(param_00,param_01) +{ + if(!isdefined(param_01) && param_00 > 0) + { + return param_00; + } + + if(!isdefined(param_01) && param_00 == 0) + { + return "@SPECIAL_OPS_UI_CHALLENGE_FAIL"; + } + + if(isdefined(param_01) && param_01 == 1 && param_00 >= 1) + { + return "@SPECIAL_OPS_UI_CHALLENGE_COMPLETE"; + } + + if(isdefined(param_01) && param_00 == 0) + { + return "@SPECIAL_OPS_UI_CHALLENGE_FAIL"; + } + + if(isdefined(param_01) && param_00 > param_01) + { + param_00 = param_01; + } + + if(maps\_utility::func_E89()) + { + return param_00; + } + + return param_00 + " / " + param_01; +} + +//Function Number: 55 +get_time_message(param_00) +{ + if(param_00 == "bonus") + { + return "@SPECIAL_OPS_UI_TIME"; + } + + if(param_00 == "no_bonus") + { + return "@SPECIAL_OPS_UI_TIME"; + } +} + +//Function Number: 56 +handle_bonus_xp(param_00) +{ + foreach(var_02 in level.players) + { + var_02 thread give_xp_on_success(level.challenge_1["value"],level.challenge_2["value"]); + } +} + +//Function Number: 57 +give_xp_on_success(param_00,param_01) +{ + self.ch_1 = func_12A3(1,level.challenge_1,level.var_1280,param_00,level.var_129F); + self.var_12A2 = func_12A3(2,level.challenge_2,level.bonus_2_shader,param_01,level.var_12A1); + thread func_12A7(); + thread bonus1_icon_text(self.ch_1); + thread bonus2_icon_text(self.var_12A2); + thread monitor_challenges(); +} + +//Function Number: 58 +monitor_challenges(param_00) +{ + var_01 = self.bonus_1; + var_02 = self.bonus_2; + for(;;) + { + if(self.bonus_1 != var_01) + { + calculate_bonus(self.ch_1,var_01,1); + var_01 = self.bonus_1; + } + + if(self.bonus_2 != var_02) + { + calculate_bonus(self.var_12A2,var_02,2); + var_02 = self.bonus_2; + } + + wait 0.05; + } +} + +//Function Number: 59 +func_12A3(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = []; + return var_41; +} + +//Function Number: 60 +get_bonus_number(param_00) +{ + if(param_00 == 1) + { + return self.bonus_1; + } + + if(param_00 == 2) + { + return self.bonus_2; + } +} + +//Function Number: 61 +calculate_bonus(param_00,param_01,param_02) +{ + var_03 = get_bonus_number(param_02); + if(isdefined(param_00["max"]) && var_03 < param_00["max"]) + { + give_bonus(param_00,param_01,param_02); + return; + } + + if(!isdefined(param_00["max"])) + { + give_bonus(param_00,param_01,param_02); + } +} + +//Function Number: 62 +give_bonus(param_00,param_01,param_02) +{ + var_03 = get_bonus_number(param_02); + for(var_04 = 0;var_04 < var_03 - param_01;var_04++) + { + if(param_02 == 1) + { + self notify("bonus1_achieved"); + } + else + { + self notify("bonus2_achieved"); + } + + self notify("bonus_achieved"); + } +} + +//Function Number: 63 +func_12A7() +{ + for(;;) + { + self waittill("bonus_achieved"); + thread common_scripts\utility::play_sound_in_space("arcademode_2x",self geteye()); + wait 0.5; + } +} + +//Function Number: 64 +func_12A8(param_00,param_01,param_02) +{ + var_03 = param_02 + 29999; + param_01 = int(min(param_01,var_03)); + return param_01; +} + +//Function Number: 65 +bonus1_icon_text(param_00) +{ + for(;;) + { + self waittill("bonus1_achieved"); + func_12AB(150,115,1,param_00); + } +} + +//Function Number: 66 +bonus2_icon_text(param_00) +{ + for(;;) + { + self waittill("bonus2_achieved"); + func_12AB(170,135,2,param_00); + } +} + +//Function Number: 67 +func_12AB(param_00,param_01,param_02,param_03) +{ + if(isdefined(param_03["text"])) + { + var_04["bar"] = make_bar_get_basic_placement(59,param_00,"right",0); + var_04["bar"] move_bonus(18); + var_05 = []; + var_41["text"] settext(var_04["text"]); + var_41["text"] thread flash_text(); + var_41["num"] thread flash_text(); + var_06 = get_bonus_number(param_03); + for(var_07 = 0;var_07 < 90;var_07++ = var_41["num"]) + { + var_08 = get_bonus_number(param_03); + var_09 = get_tally_string(var_08,var_04["max"]); + var_41["num"] settext(" " + var_09); + if(var_06 != var_08) + { + var_06 = var_08; + var_41["num"] thread flash_text(); + } + + wait 0.05; + } + + if(isdefined(var_05["bar"])) + { + var_05["bar"] destroy(); + } + + if(isdefined(var_41["text"])) + { + var_41["text"] destroy(); + } + + if(isdefined(var_41["num"])) + { + var_41["num"] destroy(); + } + } +} + +//Function Number: 68 +flash_text() +{ + for(var_00 = 0;var_00 < 2;var_00++) + { + if(isdefined(self)) + { + self changefontscaleovertime(0.25); + self.fontscale = 0.9; + self.color = (0.65,1,0.65); + wait 0.25; + } + + if(isdefined(self)) + { + self changefontscaleovertime(0.25); + self.fontscale = 0.75; + self.color = (1,1,1); + wait 0.25; + } + } +} + +//Function Number: 69 +move_bonus(param_00) +{ + self scaleovertime(0.25,100,param_00); + wait 0.25; +} + +//Function Number: 70 +make_bar_get_basic_placement(param_00,param_01,param_02,param_03) +{ + var_04 = newclienthudelem(self); + var_04 = get_basic_placement(var_04,59,param_01,"right",0); + var_04 setshader("hud_white_box",100,1); + var_04.alpha = 0.5; + var_04.color = (0.7,0.8,0.7); + return var_04; +} + +//Function Number: 71 +make_text_get_basic_placement(param_00,param_01,param_02,param_03) +{ + var_04 = maps\_hud_util::createclientfontstring("hudsmall",0.75); + var_04 = get_basic_placement(var_04,76,param_01,param_02,2); + return var_04; +} + +//Function Number: 72 +get_basic_placement(param_00,param_01,param_02,param_03,param_04) +{ + param_00.x = param_01; + param_00.y = param_02; + param_00.alignx = param_03; + param_00.aligny = "middle"; + param_00.foreground = 1; + param_00.font = "hudsmall"; + param_00.hidewheninmenu = 1; + param_00.hidewhendead = 1; + param_00.sort = param_04; + return param_00; +} + +//Function Number: 73 +multiple_dialogue_queue(param_00) +{ + maps\_utility::bcs_scripted_dialogue_start(); + if(isdefined(self.last_queue_time)) + { + maps\_utility::wait_for_buffer_time_to_pass(self.last_queue_time,0.5); + } + + var_01 = []; + maps\_utility::func_E1D(::func_12B3,var_41,var_01); + if(isalive(self)) + { + self.last_queue_time = gettime(); + } +} + +//Function Number: 74 +func_12B3(param_00,param_01,param_02) +{ + var_03 = self; + var_04 = []; + foreach(var_07, var_06 in param_00) + { + var_04[var_07] = var_06[0]; + } + + foreach(var_09 in var_04) + { + if(!isdefined(var_09)) + { + continue; + } + + if(!isdefined(var_09._animactive)) + { + var_09._animactive = 0; + } + + var_09._animactive++; + } + + var_0B = maps\_anim::get_anim_position(param_02); + var_0C = var_0B["origin"]; + var_0D = var_0B["angles"]; + var_0E = "single anim"; + var_0F = spawnstruct(); + var_10 = 0; + foreach(var_07, var_09 in var_04) + { + var_12 = 0; + var_13 = 0; + var_14 = 0; + var_15 = 0; + var_16 = undefined; + var_17 = undefined; + var_18 = var_09.animname; + if(isdefined(level.scr_face[var_18]) && isdefined(level.scr_face[var_18][param_01])) + { + var_12 = 1; + var_17 = level.scr_face[var_18][param_01]; + } + + if(isdefined(level.scr_sound[var_18]) && isdefined(level.scr_sound[var_18][param_01])) + { + var_13 = 1; + var_16 = level.scr_sound[var_18][param_01]; + } + + if(isdefined(level.scr_anim[var_18]) && isdefined(level.scr_anim[var_18][param_01]) && !isai(var_09) || !var_09 maps\_utility::doinglongdeath()) + { + var_14 = 1; + } + + if(isdefined(level.scr_animsound[var_18]) && isdefined(level.scr_animsound[var_18][param_01])) + { + var_09 playsound(level.scr_animsound[var_18][param_01]); + } + + if(var_14) + { + var_09 maps\_anim::last_anim_time_check(); + if(isplayer(var_09)) + { + var_19 = level.scr_anim[var_18]["root"]; + var_09 setanim(var_19,0,0.2); + var_1A = level.scr_anim[var_18][param_01]; + var_09 setflaggedanim(var_0E,var_1A,1,0.2); + } + else if(var_09.code_classname == "misc_turret") + { + var_1A = level.scr_anim[var_18][param_01]; + var_09 setflaggedanim(var_0E,var_1A,1,0.2); + } + else + { + var_09 animscripted(var_0E,var_0C,var_0D,level.scr_anim[var_18][param_01]); + } + + thread maps\_anim::start_notetrack_wait(var_09,var_0E,param_01,var_18); + thread maps\_anim::animscriptdonotetracksthread(var_09,var_0E,param_01); + } + + if(var_12 || var_13) + { + if(var_12) + { + if(var_13) + { + var_09 thread func_12B8(param_01,var_12,var_16,level.scr_face[var_18][param_01]); + } + + thread maps\_anim::func_E31(var_09,param_01,level.scr_face[var_18][param_01]); + } + else if(isai(var_09)) + { + if(var_14) + { + var_09 animscripts/face::sayspecificdialogue(var_17,var_16,1); + } + else + { + var_09 thread maps\_anim::anim_facialfiller("single dialogue"); + var_09 animscripts/face::sayspecificdialogue(var_17,var_16,1,"single dialogue"); + } + } + else + { + var_09 thread maps\_utility::play_sound_on_entity(var_16,"single dialogue"); + } + } + + if(var_14) + { + var_1B = getanimlength(level.scr_anim[var_18][param_01]); + var_0F thread anim_end_early_deathnotify(var_09,param_01); + var_0F thread anim_end_early_animationendnotify(var_09,param_01,var_1B,param_00[var_07][1]); + var_10++; + continue; + } + + if(var_12) + { + var_0F thread anim_end_early_deathnotify(var_09,param_01); + var_0F thread anim_end_early_facialendnotify(var_09,param_01,var_17); + var_10++; + continue; + } + + if(var_13) + { + var_0F thread anim_end_early_deathnotify(var_09,param_01); + var_0F thread anim_end_early_dialogueendnotify(var_09,param_01); + var_10++; + } + } + + while(var_10 > 0) + { + var_0F waittill(param_01,var_09); + var_10--; + if(!isdefined(var_09)) + { + continue; + } + + if(isplayer(var_09)) + { + var_18 = var_09.animname; + if(isdefined(level.scr_anim[var_18][param_01])) + { + var_19 = level.scr_anim[var_18]["root"]; + var_09 setanim(var_19,1,0.2); + var_1A = level.scr_anim[var_18][param_01]; + var_09 clearanim(var_1A,0.2); + } + } + + var_09._animactive--; + var_09._lastanimtime = gettime(); + } + + self notify(param_01); +} + +//Function Number: 75 +anim_end_early_deathnotify(param_00,param_01) +{ + param_00 endon("kill_anim_end_notify_" + param_01); + param_00 waittill("death"); + self notify(param_01,param_00); + param_00 notify("kill_anim_end_notify_" + param_01); +} + +//Function Number: 76 +anim_end_early_facialendnotify(param_00,param_01,param_02) +{ + param_00 endon("kill_anim_end_notify_" + param_01); + var_03 = getanimlength(param_02); + wait var_03; + self notify(param_01,param_00); + param_00 notify("kill_anim_end_notify_" + param_01); +} + +//Function Number: 77 +anim_end_early_dialogueendnotify(param_00,param_01) +{ + param_00 endon("kill_anim_end_notify_" + param_01); + param_00 waittill("single dialogue"); + self notify(param_01,param_00); + param_00 notify("kill_anim_end_notify_" + param_01); +} + +//Function Number: 78 +anim_end_early_animationendnotify(param_00,param_01,param_02,param_03) +{ + param_00 endon("kill_anim_end_notify_" + param_01); + param_02 = param_02 - param_03; + if(param_03 > 0 && param_02 > 0) + { + param_00 maps\_utility::waittill_match_or_timeout("single anim","end",param_02); + param_00 stopanimscripted(); + } + else + { + param_00 waittillmatch("end","single anim"); + } + + param_00 notify("anim_ended"); + self notify(param_01,param_00); + param_00 notify("kill_anim_end_notify_" + param_01); +} + +//Function Number: 79 +func_12B8(param_00,param_01,param_02,param_03) +{ + if(param_01) + { + thread func_12B9(param_00); + thread warn_facial_dialogue_unspoken(param_00); + thread warn_facial_dialogue_too_many(param_00); + var_04 = []; + if(!isarray(param_02)) + { + } + else + { + var_41 = param_03; + } + + foreach(var_06 in var_41) + { + self waittillmatch(param_02,var_41[0],"dialogue_line","face_done_" + param_01); + animscripts/face::sayspecificdialogue(undefined,var_06,1); + } + + self notify("all_facial_lines_done"); + return; + } + + animscripts/face::sayspecificdialogue(undefined,param_03,1,"single dialogue"); +} + +//Function Number: 80 +func_12B9(param_00) +{ + self endon("death"); + self waittillmatch("end","face_done_" + param_00); + self notify("facial_anim_end_" + param_00); +} + +//Function Number: 81 +warn_facial_dialogue_unspoken(param_00) +{ + self endon("death"); + self endon("all_facial_lines_done"); + self waittill("facial_anim_end_" + param_00); +} + +//Function Number: 82 +warn_facial_dialogue_too_many(param_00) +{ + self endon("death"); + self endon("facial_anim_end_" + param_00); + self waittill("all_facial_lines_done"); + self waittillmatch("dialogue_line","face_done_" + param_00); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_shutter.gsc b/MW3/Xbox/SP/maps/_shutter.gsc new file mode 100644 index 0000000..3c04489 --- /dev/null +++ b/MW3/Xbox/SP/maps/_shutter.gsc @@ -0,0 +1,352 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_shutter.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 12 + * Decompile Time: 191 ms + * Timestamp: 10/27/2023 2:35:24 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(!isdefined(level.windstrength)) + { + level.windstrength = 0.2; + } + + level.animrate["awning"] = 1; + level.animrate["palm"] = 1; + level.var_1961 = level.windstrength - 0.5; + level.animweightmax = level.windstrength + 0.2; + if(level.var_1961 < 0.1) + { + level.var_1961 = 0.1; + } + + if(level.animweightmax > 1) + { + level.animweightmax = 1; + } + + level.inc = 0; + func_196F(); + palmtree_anims(); + thread new_style_shutters(); + common_scripts\utility::array_levelthread(getentarray("wire","targetname"),::wirewander); + common_scripts\utility::array_levelthread(getentarray("awning","targetname"),::awningwander); + common_scripts\utility::array_levelthread(getentarray("palm","targetname"),::func_1972); + var_00 = []; + var_01 = getentarray("shutter_left","targetname"); + var_00 = common_scripts\utility::array_combine(var_00,var_01); + var_01 = getentarray("shutter_right_open","targetname"); + var_00 = common_scripts\utility::array_combine(var_00,var_01); + var_01 = getentarray("shutter_left_closed","targetname"); + var_00 = common_scripts\utility::array_combine(var_00,var_01); + foreach(var_03 in var_00) + { + var_03 addyaw(180); + } + + var_05 = []; + var_01 = getentarray("shutter_right","targetname"); + var_05 = common_scripts\utility::array_combine(var_05,var_01); + var_01 = getentarray("shutter_left_open","targetname"); + var_05 = common_scripts\utility::array_combine(var_05,var_01); + var_01 = getentarray("shutter_right_closed","targetname"); + var_05 = common_scripts\utility::array_combine(var_05,var_01); + wait 0.05; + var_01 = common_scripts\utility::array_combine(var_00,var_05); + foreach(var_03 in var_01) + { + var_03 thread shuttersound(); + var_03.startyaw = var_03.angles[1]; + } + + var_01 = undefined; + var_08 = "left"; + level endon("stop_shutters"); + for(;;) + { + common_scripts\utility::array_levelthread(var_00,::func_196B,var_08); + common_scripts\utility::array_levelthread(var_05,::shutterwanderright,var_08); + level waittill("wind blows",var_08); + } +} + +//Function Number: 2 +windcontroller() +{ + for(;;) + { + var_00 = "left"; + if(randomint(100) > 50) + { + var_00 = "right"; + } + + level notify("wind blows",var_00); + wait 2 + randomfloat(10); + } +} + +//Function Number: 3 +new_style_shutters() +{ + var_00 = getentarray("shutter","targetname"); + foreach(var_02 in var_00) + { + var_03 = getent(var_02.target,"targetname"); + var_04 = spawn("script_origin",var_02.origin); + var_04.angles = var_03.angles; + var_04.startyaw = var_04.angles[1]; + var_02.pivot = var_04; + var_02 linkto(var_04); + var_04 addyaw(randomfloatrange(-90,90)); + var_02 thread shuttersound(); + } + + level endon("stop_shutters"); + var_06 = "left"; + for(;;) + { + common_scripts\utility::array_levelthread(var_00,::shutterwander,var_06); + level waittill("wind blows",var_06); + } +} + +//Function Number: 4 +shutterwander(param_00,param_01) +{ + level endon("stop_shutters"); + level endon("wind blows"); + var_02 = param_00.pivot; + var_03 = randomint(3) + 1; + var_04 = 1; + if(common_scripts\utility::cointoss()) + { + var_04 = var_04 * -1; + } + + var_05 = 80; + var_06 = 80; + if(isdefined(param_00.var_1969)) + { + var_06 = param_00.var_1969; + } + + if(isdefined(param_00.var_196A)) + { + var_05 = param_00.var_196A; + } + + for(;;) + { + param_00 notify("shutterSound"); + var_07 = randomintrange(50,80); + var_03--; + if(!var_03) + { + var_03 = randomint(3) + 1; + var_04 = var_04 * -1; + } + + var_07 = var_07 * var_04; + if(var_04 > 0) + { + if(var_07 > var_05) + { + var_07 = var_05; + } + } + else if(var_07 > var_06) + { + var_07 = var_06; + } + + var_08 = var_02.startyaw + var_07; + var_09 = abs(var_02.angles[1] - var_08); + var_0A = var_09 * 0.05 + randomfloat(1) + 0.25; + if(var_0A < 0.25) + { + var_0A = 0.25; + } + + var_02 rotateto((0,var_08,0),var_0A,var_0A * 0.5,var_0A * 0.5); + wait var_0A; + } +} + +//Function Number: 5 +func_196B(param_00,param_01) +{ + level endon("stop_shutters"); + level.inc++; + level endon("wind blows"); + var_02 = param_00.startyaw; + if(param_01 == "left") + { + var_02 = var_02 + 179.9; + } + + var_03 = 0.2; + param_00 rotateto((param_00.angles[0],var_02,param_00.angles[2]),var_03); + wait var_03 + 0.1; + for(;;) + { + param_00 notify("shutterSound"); + var_04 = randomint(80); + if(common_scripts\utility::cointoss()) + { + var_04 = var_04 * -1; + } + + var_02 = param_00.angles[1] + var_04; + var_05 = param_00.angles[1] + var_04 * -1; + if(var_02 < param_00.startyaw || var_02 > param_00.startyaw + 179) + { + var_02 = var_05; + } + + var_06 = abs(param_00.angles[1] - var_02); + var_03 = var_06 * 0.02 + randomfloat(2); + if(var_03 < 0.3) + { + var_03 = 0.3; + } + + param_00 rotateto((param_00.angles[0],var_02,param_00.angles[2]),var_03,var_03 * 0.5,var_03 * 0.5); + wait var_03; + } +} + +//Function Number: 6 +shutterwanderright(param_00,param_01) +{ + level endon("stop_shutters"); + level.inc++; + level endon("wind blows"); + var_02 = param_00.startyaw; + if(param_01 == "left") + { + var_02 = var_02 + 179.9; + } + + var_03 = 0.2; + param_00 rotateto((param_00.angles[0],var_02,param_00.angles[2]),var_03); + wait var_03 + 0.1; + for(;;) + { + param_00 notify("shutterSound"); + var_04 = randomint(80); + if(randomint(100) > 50) + { + var_04 = var_04 * -1; + } + + var_02 = param_00.angles[1] + var_04; + var_05 = param_00.angles[1] + var_04 * -1; + if(var_02 < param_00.startyaw || var_02 > param_00.startyaw + 179) + { + var_02 = var_05; + } + + var_06 = abs(param_00.angles[1] - var_02); + var_03 = var_06 * 0.02 + randomfloat(2); + if(var_03 < 0.3) + { + var_03 = 0.3; + } + + param_00 rotateto((param_00.angles[0],var_02,param_00.angles[2]),var_03,var_03 * 0.5,var_03 * 0.5); + wait var_03; + } +} + +//Function Number: 7 +shuttersound() +{ + for(;;) + { + self waittill("shutterSound"); + self waittill("sounddone"); + wait randomfloat(2); + } +} + +//Function Number: 8 +wirewander(param_00) +{ + var_01 = getentarray(param_00.target,"targetname"); + var_02 = var_01[0].origin; + var_03 = var_01[1].origin; + var_04 = vectortoangles(var_02 - var_03); + var_05 = spawn("script_model",(0,0,0)); + var_05.origin = var_02 * 0.5 + var_03 * 0.5; + var_05.angles = var_04; + param_00 linkto(var_05); + var_06 = 2; + var_07 = 0.9; + var_08 = 4 + randomfloat(2); + var_05 rotateroll(var_08 * 0.5,0.2); + wait 0.2; + for(;;) + { + var_09 = var_06 + randomfloat(var_07) - var_07 * 0.5; + var_05 rotateroll(var_08,var_09,var_09 * 0.5,var_09 * 0.5); + wait var_09; + var_05 rotateroll(var_08 * -1,var_09,var_09 * 0.5,var_09 * 0.5); + wait var_09; + } +} + +//Function Number: 9 +func_196F() +{ +} + +//Function Number: 10 +awningwander(param_00) +{ +} + +//Function Number: 11 +palmtree_anims() +{ +} + +//Function Number: 12 +func_1972(param_00) +{ + param_00 useanimtree(#animtree); + switch(param_00.model) + { + case "tree_desertpalm01": + param_00.animname = "ree_desertpalm01"; + break; + + case "tree_desertpalm02": + param_00.animname = "tree_desertpalm02"; + break; + + case "tree_desertpalm03": + param_00.animname = "tree_desertpalm03"; + break; + } + + if(!isdefined(param_00.animname)) + { + return; + } + + wait randomfloat(2); + for(;;) + { + var_01 = level.var_1961 + randomfloat(level.animweightmax - level.var_1961); + var_02 = 4; + param_00 setanim(level.scr_anim[param_00.animname]["wind"][0],var_01,var_02,level.animrate["palm"]); + param_00 setanim(level.scr_anim[param_00.animname]["wind"][1],1 - var_01,var_02,level.animrate["palm"]); + wait 1 + randomfloat(3); + } +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_spawner.gsc b/MW3/Xbox/SP/maps/_spawner.gsc new file mode 100644 index 0000000..129d449 --- /dev/null +++ b/MW3/Xbox/SP/maps/_spawner.gsc @@ -0,0 +1,5517 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_spawner.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 204 + * Decompile Time: 3740 ms + * Timestamp: 10/27/2023 2:32:48 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + precachemodel("grenade_bag"); + createthreatbiasgroup("allies"); + createthreatbiasgroup("axis"); + createthreatbiasgroup("team3"); + createthreatbiasgroup("civilian"); + maps\_anim::addnotetrack_customfunction("generic","rappel_pushoff_initial_npc",::maps\_utility::func_1C7D); + maps\_anim::addnotetrack_customfunction("generic","ps_rappel_pushoff_initial_npc",::maps\_utility::func_1C7D); + maps\_anim::addnotetrack_customfunction("generic","feet_on_ground",::maps\_utility::disable_achievement_harder_they_fall_guy); + maps\_anim::addnotetrack_customfunction("generic","ps_rappel_clipout_npc",::maps\_utility::disable_achievement_harder_they_fall_guy); + foreach(var_01 in level.players) + { + var_01 setthreatbiasgroup("allies"); + } + + level.var_1C7F = 0; + level.var_1C80 = []; + level.var_1C81 = 0; + level.ffpoints = 0; + level.var_1291 = 0; + level.var_1C83 = []; + level.smoke_thrown = []; + if(!isdefined(level.deathflags)) + { + level.deathflags = []; + } + + level.spawner_number = 0; + level.go_to_node_arrays = []; + if(!isdefined(level.var_1C88)) + { + level.var_1C88 = []; + } + + level.var_1C88["regular"] = ::func_1CEC; + level.var_1C88["elite"] = ::subclass_elite; + level.team_specific_spawn_functions = []; + level.team_specific_spawn_functions["axis"] = ::func_1CE3; + level.team_specific_spawn_functions["allies"] = ::func_1CE0; + level.team_specific_spawn_functions["team3"] = ::spawn_team_team3; + level.team_specific_spawn_functions["neutral"] = ::spawn_team_neutral; + level.next_health_drop_time = 0; + level.guys_to_die_before_next_health_drop = randomintrange(1,4); + if(!isdefined(level.default_goalradius)) + { + level.default_goalradius = 2048; + } + + if(!isdefined(level.var_1C8C)) + { + level.var_1C8C = 512; + } + + level.var_1C8D = "J_Shoulder_RI"; + level.mg42_hide_distance = 1024; + if(!isdefined(level.maxfriendlies)) + { + level.maxfriendlies = 11; + } + + level._max_script_health = 0; + var_03 = getaispeciesarray(); + common_scripts\utility::array_thread(var_03,::living_ai_prethink); + level.ai_classname_in_level = []; + level.drone_paths = []; + var_04 = getspawnerarray(); + for(var_05 = 0;var_05 < var_04.size;var_05++) + { + var_04[var_05] thread spawn_prethink(); + } + + level.drone_paths = undefined; + thread process_deathflags(); + common_scripts\utility::array_thread(var_03,::spawn_think); + level.ai_classname_in_level_keys = getarraykeys(level.ai_classname_in_level); + for(var_05 = 0;var_05 < level.ai_classname_in_level_keys.size;var_05++) + { + if(!issubstr(tolower(level.ai_classname_in_level_keys[var_05]),"rpg")) + { + continue; + } + + precacheitem("rpg_player"); + break; + } + + level.ai_classname_in_level_keys = undefined; + common_scripts\utility::run_thread_on_noteworthy("hiding_door_spawner",::maps\_hiding_door::hiding_door_spawner); +} + +//Function Number: 2 +func_1C93(param_00) +{ + if(param_00.size <= 16) + { + return; + } + + var_01 = 0; + var_02 = 0; + for(var_03 = 0;var_03 < param_00.size;var_03++) + { + if(!param_00[var_03].team != "axis") + { + continue; + } + + var_01++; + if(!param_00[var_03] func_1C94()) + { + continue; + } + + var_02++; + } +} + +//Function Number: 3 +func_1C94() +{ + if(isdefined(self.var_1A02)) + { + return 1; + } + + return isdefined(self.script_char_index); +} + +//Function Number: 4 +process_deathflags() +{ + foreach(var_02, var_01 in level.deathflags) + { + if(!isdefined(level.flag[var_02])) + { + common_scripts\utility::flag_init(var_02); + } + } +} + +//Function Number: 5 +spawn_guys_until_death_or_no_count() +{ + self endon("death"); + for(;;) + { + if(self.count > 0) + { + self waittill("spawned"); + } + + waittillframeend; + if(!self.count) + { + return; + } + } +} + +//Function Number: 6 +ai_deathflag() +{ + level.deathflags[self.var_1C98]["ai"][self.unique_id] = self; + var_00 = self.unique_id; + var_01 = self.var_1C98; + if(isdefined(self.script_deathflag_longdeath)) + { + waittilldeathorpaindeath(); + } + else + { + self waittill("death"); + } + + level.deathflags[var_01]["ai"][var_00] = undefined; + update_deathflag(var_01); +} + +//Function Number: 7 +func_1C9A() +{ + var_00 = self.unique_id; + var_01 = self.var_1C98; + if(!isdefined(level.deathflags) || !isdefined(level.deathflags[self.var_1C98])) + { + waittillframeend; + if(!isdefined(self)) + { + return; + } + } + + level.deathflags[var_01]["vehicles"][var_00] = self; + self waittill("death"); + level.deathflags[var_01]["vehicles"][var_00] = undefined; + update_deathflag(var_01); +} + +//Function Number: 8 +spawner_deathflag() +{ + level.deathflags[self.var_1C98] = []; + waittillframeend; + if(!isdefined(self) || self.count == 0) + { + return; + } + + self.spawner_number = level.spawner_number; + level.spawner_number++; + level.deathflags[self.var_1C98]["spawners"][self.spawner_number] = self; + var_00 = self.var_1C98; + var_01 = self.spawner_number; + spawn_guys_until_death_or_no_count(); + level.deathflags[var_00]["spawners"][var_01] = undefined; + update_deathflag(var_00); +} + +//Function Number: 9 +func_1C9C() +{ + level.deathflags[self.var_1C98] = []; + waittillframeend; + if(!isdefined(self)) + { + return; + } + + self.spawner_number = level.spawner_number; + level.spawner_number++; + level.deathflags[self.var_1C98]["vehicle_spawners"][self.spawner_number] = self; + var_00 = self.var_1C98; + var_01 = self.spawner_number; + spawn_guys_until_death_or_no_count(); + level.deathflags[var_00]["vehicle_spawners"][var_01] = undefined; + update_deathflag(var_00); +} + +//Function Number: 10 +update_deathflag(param_00) +{ + level notify("updating_deathflag_" + param_00); + level endon("updating_deathflag_" + param_00); + waittillframeend; + foreach(var_02 in level.deathflags[param_00]) + { + if(getarraykeys(var_02).size > 0) + { + return; + } + } + + common_scripts\utility::flag_set(param_00); +} + +//Function Number: 11 +outdoor_think(param_00) +{ + param_00 endon("death"); + for(;;) + { + param_00 waittill("trigger",var_01); + if(!isai(var_01)) + { + continue; + } + + var_01 thread maps\_utility::func_1C9E(0.15); + var_01 maps\_utility::disable_cqbwalk(); + var_01.wantshotgun = 0; + } +} + +//Function Number: 12 +indoor_think(param_00) +{ + param_00 endon("death"); + for(;;) + { + param_00 waittill("trigger",var_01); + if(!isai(var_01)) + { + continue; + } + + var_01 thread maps\_utility::func_1C9E(0.15); + var_01 maps\_utility::enable_cqbwalk(); + var_01.wantshotgun = 1; + } +} + +//Function Number: 13 +doautospawn(param_00) +{ + param_00 endon("death"); + self endon("death"); + for(;;) + { + self waittill("trigger"); + if(!param_00.count) + { + return; + } + + if(self.target != param_00.targetname) + { + return; + } + + if(isdefined(param_00.triggerunlocked)) + { + return; + } + + var_01 = param_00 maps\_utility::spawn_ai(); + if(maps\_utility::func_F77(var_01)) + { + param_00 notify("spawn_failed"); + } + + if(isdefined(self.wait) && self.wait > 0) + { + wait self.wait; + } + } +} + +//Function Number: 14 +func_1A40(param_00) +{ + var_01 = param_00.var_1A5B; + var_02 = param_00.target; + param_00 waittill("trigger"); + param_00 maps\_utility::script_delay(); + if(isdefined(var_01)) + { + waittillframeend; + } + + var_03 = getentarray(var_02,"targetname"); + foreach(var_05 in var_03) + { + if(var_05.code_classname == "script_vehicle") + { + if((isdefined(var_05.script_moveoverride) && var_05.script_moveoverride == 1) || !isdefined(var_05.target)) + { + thread maps\_vehicle::vehicle_spawn(var_05); + } + else + { + var_05 thread maps\_vehicle::func_1B3C(); + } + + continue; + } + + var_05 thread trigger_spawner_spawns_guys(); + } + + if(isdefined(level.spawn_pool_enabled)) + { + trigger_pool_spawners(var_02); + } +} + +//Function Number: 15 +trigger_pool_spawners(param_00) +{ + var_01 = common_scripts\utility::getstructarray(param_00,"targetname"); + if(getentarray(param_00,"target").size <= 1) + { + maps\_utility::deletestructarray_ref(var_01); + } + + var_02 = func_1CA5(var_01); + common_scripts\utility::array_thread(var_02,::trigger_spawner_spawns_guys); +} + +//Function Number: 16 +func_1CA5(param_00) +{ + var_01 = []; + var_02 = []; + foreach(var_04 in param_00) + { + if(!isdefined(var_04.var_1CA6)) + { + continue; + } + + if(!isdefined(var_02[var_04.var_1CA6])) + { + var_02[var_04.var_1CA6] = []; + } + + var_02[var_04.var_1CA6][var_02[var_04.var_1CA6].size] = var_04; + } + + foreach(var_07 in var_02) + { + foreach(var_04 in var_07) + { + var_09 = get_spawner_from_pool(var_04,var_07.size); + var_01[var_01.size] = var_09; + } + } + + return var_01; +} + +//Function Number: 17 +get_spawner_from_pool(param_00,param_01) +{ + if(!isdefined(level.spawner_pool)) + { + level.spawner_pool = []; + } + + if(!isdefined(level.spawner_pool[param_00.var_1CA6])) + { + level.spawner_pool[param_00.var_1CA6] = create_new_spawner_pool(param_00.var_1CA6); + } + + var_02 = level.spawner_pool[param_00.var_1CA6]; + var_03 = var_02.pool[var_02.poolindex]; + var_02.poolindex++; + var_02.poolindex = var_02.poolindex % var_02.pool.size; + var_03.origin = param_00.origin; + if(isdefined(param_00.angles)) + { + var_03.angles = param_00.angles; + } + else if(isdefined(param_00.target)) + { + var_04 = getnode(param_00.target,"targetname"); + if(isdefined(var_04)) + { + var_03.angles = vectortoangles(var_04.origin - var_03.origin); + } + } + + if(isdefined(level.spawn_pool_copy_function)) + { + var_03 [[ level.spawn_pool_copy_function ]](param_00); + } + + if(isdefined(param_00.target)) + { + var_03.target = param_00.target; + } + + var_03.count = 1; + return var_03; +} + +//Function Number: 18 +create_new_spawner_pool(param_00) +{ + var_01 = getspawnerarray(); + var_02 = spawnstruct(); + var_03 = []; + foreach(var_05 in var_01) + { + if(!isdefined(var_05.var_1CA6)) + { + continue; + } + + if(var_05.var_1CA6 != param_00) + { + continue; + } + + var_03[var_03.size] = var_05; + } + + var_02.poolindex = 0; + var_02.pool = var_03; + return var_02; +} + +//Function Number: 19 +trigger_spawner_spawns_guys() +{ + self endon("death"); + maps\_utility::script_delay(); + if(!isdefined(self)) + { + return undefined; + } + + if(isdefined(self.var_1CAE)) + { + var_00 = maps\_utility::dronespawn(self); + return undefined; + } + else if(!issubstr(self.classname,"actor")) + { + return undefined; + } + + var_01 = isdefined(self.var_1CB0) && common_scripts\utility::flag("_stealth_enabled") && !common_scripts\utility::flag("_stealth_spotted"); + if(isdefined(self.script_forcespawn)) + { + var_00 = self stalingradspawn(var_01); + } + else + { + var_00 = self dospawn(var_01); + } + + if(!maps\_utility::func_F77(var_01)) + { + if(isdefined(self.script_combatbehavior)) + { + if(self.script_combatbehavior == "heat") + { + var_01 maps\_utility::enable_heat_behavior(); + } + + if(self.script_combatbehavior == "cqb") + { + var_01 maps\_utility::enable_cqbwalk(); + } + } + } + + return var_01; +} + +//Function Number: 20 +func_1A41(param_00) +{ + var_01 = param_00.target; + var_02 = 0; + var_03 = getentarray(var_01,"targetname"); + foreach(var_05 in var_03) + { + if(!isdefined(var_05.target)) + { + continue; + } + + var_06 = getent(var_05.target,"targetname"); + if(!isdefined(var_06)) + { + if(!isdefined(var_05.script_linkto)) + { + continue; + } + + var_06 = var_05 common_scripts\utility::get_linked_ent(); + if(!isdefined(var_06)) + { + continue; + } + + if(!isspawner(var_06)) + { + continue; + } + } + + var_02 = 1; + break; + } + + param_00 waittill("trigger"); + param_00 maps\_utility::script_delay(); + var_03 = getentarray(var_01,"targetname"); + foreach(var_05 in var_03) + { + var_05 thread func_1CB4(); + } +} + +//Function Number: 21 +func_1CB4() +{ + var_00 = trigger_reinforcement_get_reinforcement_spawner(); + var_01 = trigger_spawner_spawns_guys(); + if(!isdefined(var_01)) + { + self delete(); + if(isdefined(var_00)) + { + var_01 = var_00 trigger_spawner_spawns_guys(); + var_00 delete(); + if(!isdefined(var_01)) + { + return; + } + } + else + { + return; + } + } + + if(!isdefined(var_00)) + { + return; + } + + var_01 waittill("death"); + if(!isdefined(var_00)) + { + return; + } + + if(!isdefined(var_00.count)) + { + var_00.count = 1; + } + + for(;;) + { + if(!isdefined(var_00)) + { + break; + } + + var_02 = var_00 thread trigger_spawner_spawns_guys(); + if(!isdefined(var_02)) + { + var_00 delete(); + break; + } + + var_02 thread reincrement_count_if_deleted(var_00); + var_02 waittill("death",var_03); + if(!player_saw_kill(var_02,var_03)) + { + if(!isdefined(var_00)) + { + break; + } + + var_00.count++; + } + + if(!isdefined(var_02)) + { + continue; + } + + if(!isdefined(var_00)) + { + break; + } + + if(!isdefined(var_00.count)) + { + break; + } + + if(var_00.count <= 0) + { + break; + } + + if(!maps\_utility::func_1CB5()) + { + wait randomfloatrange(1,3); + } + } + + if(isdefined(var_00)) + { + var_00 delete(); + } +} + +//Function Number: 22 +trigger_reinforcement_get_reinforcement_spawner() +{ + if(isdefined(self.target)) + { + var_00 = getent(self.target,"targetname"); + if(isdefined(var_00) && isspawner(var_00)) + { + return var_00; + } + } + + if(isdefined(self.script_linkto)) + { + var_00 = common_scripts\utility::get_linked_ent(); + if(isdefined(var_00) && isspawner(var_00)) + { + return var_00; + } + } + + return undefined; +} + +//Function Number: 23 +func_1CB7(param_00) +{ + common_scripts\utility::array_thread(param_00,::flood_spawner_init); + common_scripts\utility::array_thread(param_00,::func_1DBF); +} + +//Function Number: 24 +reincrement_count_if_deleted(param_00) +{ + param_00 endon("death"); + if(isdefined(self.script_force_count)) + { + if(self.script_force_count) + { + return; + } + } + + self waittill("death"); + if(!isdefined(self)) + { + param_00.count++; + } +} + +//Function Number: 25 +delete_start(param_00) +{ + for(var_01 = 0;var_01 < 2;var_01++) + { + switch(var_01) + { + case 0: + var_02 = "axis"; + break; + + default: + var_02 = "allies"; + break; + } + + var_03 = getentarray(var_02,"team"); + for(var_04 = 0;var_04 < var_03.size;var_04++) + { + if(isdefined(var_03[var_04].script_start)) + { + if(var_03[var_04].script_start == param_00) + { + var_03[var_04] thread delete_me(); + } + } + } + } +} + +//Function Number: 26 +func_1CBC(param_00) +{ + if(!isdefined(param_00)) + { + return; + } + + if(isdefined(param_00.targetname) && param_00.targetname != "flood_spawner") + { + return; + } + + if(level.script == "sniperescape") + { + return; + } + + param_00 delete(); +} + +//Function Number: 27 +func_1A5B(param_00) +{ + param_00 endon("death"); + var_01 = param_00.script_random_killspawner; + waittillframeend; + if(!isdefined(level.killspawn_groups[var_01])) + { + return; + } + + param_00 waittill("trigger"); + func_1CBD(var_01); +} + +//Function Number: 28 +func_1CBD(param_00) +{ + if(!isdefined(level.killspawn_groups[param_00])) + { + return; + } + + var_01 = level.killspawn_groups[param_00]; + var_02 = getarraykeys(var_01); + if(var_02.size <= 1) + { + return; + } + + var_03 = common_scripts\utility::random(var_02); + var_01[var_03] = undefined; + foreach(var_09, var_05 in var_01) + { + foreach(var_07 in var_05) + { + if(isdefined(var_07)) + { + var_07 delete(); + } + } + + level.killspawn_groups[param_00][var_09] = undefined; + } +} + +//Function Number: 29 +func_1CBE(param_00) +{ + var_01 = getspawnerarray(); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + if(isdefined(var_01[var_02].var_13F6) && param_00 == var_01[var_02].var_13F6) + { + var_01[var_02] delete(); + } + } +} + +//Function Number: 30 +kill_spawner(param_00) +{ + var_01 = param_00.var_13F6; + param_00 waittill("trigger"); + waittillframeend; + waittillframeend; + func_1CBE(var_01); + func_1CBC(param_00); +} + +//Function Number: 31 +empty_spawner(param_00) +{ + var_01 = param_00.script_emptyspawner; + param_00 waittill("trigger"); + var_02 = getspawnerarray(); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + if(!isdefined(var_02[var_03].script_emptyspawner)) + { + continue; + } + + if(var_01 != var_02[var_03].script_emptyspawner) + { + continue; + } + + if(isdefined(var_02[var_03].script_flanker)) + { + level notify("stop_flanker_behavior" + var_02[var_03].script_flanker); + } + + var_02[var_03] maps\_utility::set_count(0); + var_02[var_03] notify("emptied spawner"); + } + + param_00 notify("deleted spawners"); +} + +//Function Number: 32 +kill_spawnernum(param_00) +{ + var_01 = getspawnerarray(); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + if(!isdefined(var_01[var_02].var_13F6)) + { + continue; + } + + if(param_00 != var_01[var_02].var_13F6) + { + continue; + } + + var_01[var_02] delete(); + } +} + +//Function Number: 33 +trigger_spawn(param_00) +{ +} + +//Function Number: 34 +spawn_grenade(param_00,param_01) +{ + if(!isdefined(level.grenade_cache) || !isdefined(level.grenade_cache[param_01])) + { + level.grenade_cache_index[param_01] = 0; + level.grenade_cache[param_01] = []; + } + + var_02 = level.grenade_cache_index[param_01]; + var_03 = level.grenade_cache[param_01][var_02]; + if(isdefined(var_03)) + { + var_03 delete(); + } + + var_03 = spawn("weapon_fraggrenade",param_00); + level.grenade_cache[param_01][var_02] = var_03; + level.grenade_cache_index[param_01] = var_02 + 1 % 16; + return var_03; +} + +//Function Number: 35 +waittilldeathorpaindeath() +{ + self endon("death"); + self waittill("pain_death"); +} + +//Function Number: 36 +func_1CC6() +{ + var_00 = self.team; + waittilldeathorpaindeath(); + if(!isdefined(self)) + { + return; + } + + if(isdefined(self.var_1CC7)) + { + return; + } + + self.ignoreforfixednodesafecheck = 1; + if(self.grenadeammo <= 0) + { + return; + } + + level.nextgrenadedrop--; + if(level.nextgrenadedrop > 0) + { + return; + } + + level.nextgrenadedrop = 2 + randomint(2); + var_01 = 25; + var_02 = 12; + var_03 = self.origin + (randomint(var_01) - var_02,randomint(var_01) - var_02,2) + (0,0,42); + var_04 = (0,randomint(360),90); + thread func_1CC8(var_03,var_04,self.team); +} + +//Function Number: 37 +func_1CC8(param_00,param_01,param_02) +{ + var_03 = spawn_grenade(param_00,param_02); + var_03 setmodel("grenade_bag"); + var_03.angles = param_01; + var_03 hide(); + wait 0.7; + if(!isdefined(var_03)) + { + return; + } + + var_03 show(); +} + +//Function Number: 38 +dronespawner_init() +{ + maps\_drone::func_1BBF(); +} + +//Function Number: 39 +empty() +{ +} + +//Function Number: 40 +spawn_prethink() +{ + level.ai_classname_in_level[self.classname] = 1; + if(isdefined(self.script_difficulty)) + { + switch(self.script_difficulty) + { + case "easy": + if(level.gameskill > 1) + { + maps\_utility::set_count(0); + } + break; + + case "hard": + if(level.gameskill < 2) + { + maps\_utility::set_count(0); + } + break; + } + } + + if(isdefined(self.var_1CAE)) + { + thread dronespawner_init(); + } + + if(isdefined(self.script_aigroup)) + { + var_00 = self.script_aigroup; + if(!isdefined(level.var_1C80[var_00])) + { + aigroup_create(var_00); + } + + thread aigroup_spawnerthink(level.var_1C80[var_00]); + } + + if(isdefined(self.script_delete)) + { + var_01 = 0; + if(isdefined(level._ai_delete)) + { + if(isdefined(level._ai_delete[self.script_delete])) + { + var_01 = level._ai_delete[self.script_delete].size; + } + } + + level._ai_delete[self.script_delete][var_01] = self; + } + + if(isdefined(self.script_health)) + { + if(self.script_health > level._max_script_health) + { + level._max_script_health = self.script_health; + } + + var_01 = 0; + if(isdefined(level._ai_health)) + { + if(isdefined(level._ai_health[self.script_health])) + { + var_01 = level._ai_health[self.script_health].size; + } + } + + level._ai_health[self.script_health][var_01] = self; + } + + if(isdefined(self.var_1C98)) + { + thread spawner_deathflag(); + } + + if(isdefined(self.target)) + { + func_1CDF(); + } + + if(isdefined(self.var_1B33)) + { + func_1DEC(); + } + + if(isdefined(self.script_random_killspawner)) + { + add_random_killspawner_to_spawngroup(); + } + + if(!isdefined(self.spawn_functions)) + { + self.spawn_functions = []; + } + + for(;;) + { + var_02 = undefined; + self waittill("spawned",var_02); + if(!isalive(var_02)) + { + continue; + } + + if(isdefined(level.spawnercallbackthread)) + { + self thread [[ level.spawnercallbackthread ]](var_02); + } + + if(isdefined(self.script_delete)) + { + for(var_03 = 0;var_03 < level._ai_delete[self.script_delete].size;var_03++) + { + if(level._ai_delete[self.script_delete][var_03] != self) + { + level._ai_delete[self.script_delete][var_03] delete(); + } + } + } + + var_02.var_1A35 = self.spawn_functions; + var_02.spawner = self; + if(isdefined(self.targetname)) + { + var_02 thread spawn_think(self.targetname); + continue; + } + + var_02 thread spawn_think(); + } +} + +//Function Number: 41 +spawn_think(param_00) +{ + level.ai_classname_in_level[self.classname] = 1; + func_1D0D(param_00); + self endon("death"); + if(shouldnt_spawn_because_of_script_difficulty()) + { + self delete(); + } + + thread func_1CD4(); + self.var_1929 = 1; + self notify("finished spawning"); + if(self.team == "allies" && !isdefined(self.var_1CD2)) + { + thread friendlydeath_thread(); + } +} + +//Function Number: 42 +shouldnt_spawn_because_of_script_difficulty() +{ + if(!isdefined(self.script_difficulty)) + { + return 0; + } + + var_00 = 0; + switch(self.script_difficulty) + { + case "easy": + if(level.gameskill > 1) + { + var_00 = 1; + } + break; + + case "hard": + if(level.gameskill < 2) + { + var_00 = 1; + } + break; + } + + return var_00; +} + +//Function Number: 43 +func_1CD4() +{ + if(!isdefined(self.var_1A35)) + { + self.spawner = undefined; + return; + } + + for(var_00 = 0;var_00 < self.var_1A35.size;var_00++) + { + var_01 = self.var_1A35[var_00]; + if(isdefined(var_01["param5"])) + { + thread [[ var_01["function"] ]](var_01["param1"],var_01["param2"],var_01["param3"],var_01["param4"],var_01["param5"]); + continue; + } + + if(isdefined(var_01["param4"])) + { + thread [[ var_01["function"] ]](var_01["param1"],var_01["param2"],var_01["param3"],var_01["param4"]); + continue; + } + + if(isdefined(var_01["param3"])) + { + thread [[ var_01["function"] ]](var_01["param1"],var_01["param2"],var_01["param3"]); + continue; + } + + if(isdefined(var_01["param2"])) + { + thread [[ var_01["function"] ]](var_01["param1"],var_01["param2"]); + continue; + } + + if(isdefined(var_01["param1"])) + { + thread [[ var_01["function"] ]](var_01["param1"]); + continue; + } + + thread [[ var_01["function"] ]](); + } + + if(isdefined(self.team)) + { + for(var_00 = 0;var_00 < level.var_1A35[self.team].size;var_00++) + { + var_01 = level.var_1A35[self.team][var_00]; + if(isdefined(var_01["param5"])) + { + thread [[ var_01["function"] ]](var_01["param1"],var_01["param2"],var_01["param3"],var_01["param4"],var_01["param5"]); + continue; + } + + if(isdefined(var_01["param4"])) + { + thread [[ var_01["function"] ]](var_01["param1"],var_01["param2"],var_01["param3"],var_01["param4"]); + continue; + } + + if(isdefined(var_01["param3"])) + { + thread [[ var_01["function"] ]](var_01["param1"],var_01["param2"],var_01["param3"]); + continue; + } + + if(isdefined(var_01["param2"])) + { + thread [[ var_01["function"] ]](var_01["param1"],var_01["param2"]); + continue; + } + + if(isdefined(var_01["param1"])) + { + thread [[ var_01["function"] ]](var_01["param1"]); + continue; + } + + thread [[ var_01["function"] ]](); + } + } + + self.var_1A35 = undefined; + self.spawner = undefined; +} + +//Function Number: 44 +specops_think() +{ + if(!maps\_utility::is_specialop()) + { + return; + } + + maps\_utility::add_damage_function(::specops_dmg); + thread multikill_monitor(); +} + +//Function Number: 45 +multikill_monitor() +{ + self waittill("death",var_00,var_01,var_02); + if(!isdefined(self)) + { + return; + } + + if(!self isbadguy()) + { + return; + } + + if(!isdefined(var_00)) + { + return; + } + + if(!isplayer(var_00)) + { + return; + } + + if(!isdefined(var_02)) + { + var_00.multikill_count = undefined; + return; + } + + if(!isdefined(var_00.multikill_count)) + { + var_00.multikill_count = 1; + } + else + { + var_00.multikill_count++; + } + + if(maps\_utility::is_survival() && var_00.multikill_count >= 4) + { + var_00 notify("sur_ch_quadkill"); + } + + waittillframeend; + var_00.multikill_count = undefined; +} + +//Function Number: 46 +specops_dmg(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + if(!isdefined(self)) + { + return; + } + + if(isdefined(param_01) && isplayer(param_01)) + { + self.last_dmg_player = param_01; + self.var_1CD9 = param_04; + } +} + +//Function Number: 47 +deathfunctions() +{ + self waittill("death",var_00,var_01,var_02); + level notify("ai_killed",self); + if(!isdefined(self)) + { + return; + } + + if(isdefined(var_00)) + { + if(self.team == "axis" || self.team == "team3") + { + var_03 = undefined; + if(isdefined(var_00.attacker)) + { + if(isdefined(var_00.issentrygun) && var_00.issentrygun) + { + var_03 = "sentry"; + } + + if(isdefined(var_00.destructible_type)) + { + var_03 = "destructible"; + } + + var_00 = var_00.attacker; + } + else if(isdefined(var_00.owner)) + { + if(isai(var_00) && isplayer(var_00.owner)) + { + var_03 = "friendly"; + } + + var_00 = var_00.owner; + } + else if(isdefined(var_00.damageowner)) + { + if(isdefined(var_00.destructible_type)) + { + var_03 = "destructible"; + } + + var_00 = var_00.damageowner; + } + + var_04 = 0; + if(isplayer(var_00)) + { + var_04 = 1; + } + + if(isdefined(level.pmc_match) && level.pmc_match) + { + var_04 = 1; + } + + if(var_04) + { + var_00 maps\_player_stats::register_kill(self,var_01,var_02,var_03); + } + } + } + + for(var_05 = 0;var_05 < self.deathfuncs.size;var_05++) + { + var_06 = self.deathfuncs[var_05]; + switch(var_06["params"]) + { + case 0: + [[ var_06["func"] ]](var_00); + break; + + case 1: + [[ var_06["func"] ]](var_00,var_06["param1"]); + break; + + case 2: + [[ var_06["func"] ]](var_00,var_06["param1"],var_06["param2"]); + break; + + case 3: + [[ var_06["func"] ]](var_00,var_06["param1"],var_06["param2"],var_06["param3"]); + break; + } + } +} + +//Function Number: 48 +ai_damage_think() +{ + self.damage_functions = []; + for(;;) + { + self waittill("damage",var_00,var_01,var_02,var_03,var_04,var_05,var_06); + if(isdefined(var_01) && isplayer(var_01)) + { + var_07 = var_01 getcurrentweapon(); + if(isdefined(var_07) && maps\_utility::isprimaryweapon(var_07) && isdefined(var_04) && var_04 == "MOD_PISTOL_BULLET" || var_04 == "MOD_RIFLE_BULLET") + { + var_01 thread maps\_player_stats::register_shot_hit(); + } + } + + foreach(var_09 in self.damage_functions) + { + thread [[ var_09 ]](var_00,var_01,var_02,var_03,var_04,var_05,var_06); + } + + if(!isalive(self) || self.delayeddeath) + { + break; + } + } +} + +//Function Number: 49 +living_ai_prethink() +{ + if(isdefined(self.var_1C98)) + { + level.deathflags[self.var_1C98] = 1; + } + + if(isdefined(self.target)) + { + func_1CDF(); + } +} + +//Function Number: 50 +func_1CDF() +{ + var_00 = func_1D32(); + if(isdefined(var_00)) + { + var_01 = var_00["destination"]; + var_02 = var_00["get_target_func"]; + for(var_03 = 0;var_03 < var_01.size;var_03++) + { + crawl_target_and_init_flags(var_01[var_03],var_02); + } + } +} + +//Function Number: 51 +func_1CE0() +{ + self.usechokepoints = 0; + if(isdefined(self.script_followmin)) + { + self.followmin = self.script_followmin; + } + + if(isdefined(self.script_followmax)) + { + self.followmax = self.script_followmax; + } +} + +//Function Number: 52 +func_1CE3() +{ + if(isdefined(level.xp_enable) && level.xp_enable) + { + thread maps\_rank::ai_xp_init(); + } + + if(self.type == "human") + { + thread func_1CC6(); + } + + maps\_utility::add_damage_function(::maps\_gameskill::auto_adjust_enemy_death_detection); + if(isdefined(self.script_combatmode)) + { + self.combatmode = self.script_combatmode; + } +} + +//Function Number: 53 +spawn_team_team3() +{ + func_1CE3(); +} + +//Function Number: 54 +spawn_team_neutral() +{ +} + +//Function Number: 55 +subclass_elite() +{ + self endon("death"); + self.var_1CE9 = 1; + self.var_C8E = 0.5; + if(!isdefined(self.var_1CEA)) + { + self.baseaccuracy = 5; + } + + self.aggressivemode = 1; + if(maps\_utility::func_1CEB()) + { + var_00 = undefined; + switch(level.gameskill) + { + case 0: + var_00 = 0; + break; + + case 1: + var_00 = 2; + break; + + case 2: + var_00 = 3; + break; + + case 3: + var_00 = 4; + break; + } + + if(level.gameskill > 0) + { + self.grenadeweapon = "flash_grenade"; + self.grenadeammo = var_00; + } + } +} + +//Function Number: 56 +func_1CEC() +{ +} + +//Function Number: 57 +pain_resistance(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + self endon("death"); + if(self.health <= 0) + { + return; + } + + if(param_00 >= self.minpaindamage) + { + var_07 = self.minpaindamage; + self.minpaindamage = var_07 * 3; + wait 5; + self.minpaindamage = var_07; + } +} + +//Function Number: 58 +func_15CB(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + if(!isdefined(self) || self.health <= 0) + { + return; + } + + if(isdefined(self.magic_bullet_shield) && self.magic_bullet_shield) + { + return; + } + + if(!issubstr(param_04,"BULLET")) + { + return; + } + + var_07 = self.var_15CB; + if(param_00 < self.var_15CB) + { + var_07 = param_00; + } + + self.health = self.health + var_07; +} + +//Function Number: 59 +func_1CEE() +{ + maps\_gameskill::func_1CEF(); + maps\_gameskill::grenadeawareness(); +} + +//Function Number: 60 +func_1CF0() +{ + if(!isalive(self)) + { + return; + } + + if(self.health <= 1) + { + return; + } + + self laserforceon(); + self waittill("death"); + if(!isdefined(self)) + { + return; + } + + self laserforceoff(); +} + +//Function Number: 61 +func_1CF1() +{ + if(isdefined(self.script_dontshootwhilemoving)) + { + self.dontshootwhilemoving = 1; + } + + if(isdefined(self.var_1C98)) + { + thread ai_deathflag(); + } + + if(isdefined(self.script_attackeraccuracy)) + { + self.attackeraccuracy = self.script_attackeraccuracy; + } + + if(isdefined(self.script_startrunning)) + { + thread func_1DEE(); + } + + if(isdefined(self.var_1CF5)) + { + thread deathtime(); + } + + if(isdefined(self.script_nosurprise)) + { + maps\_utility::disable_surprise(); + } + + if(isdefined(self.script_nobloodpool)) + { + self.var_AB6 = 1; + } + + if(isdefined(self.var_1CF8)) + { + thread func_1CF0(); + } + + if(isdefined(self.script_danger_react)) + { + var_00 = self.script_danger_react; + if(var_00 == 1) + { + var_00 = 8; + } + + maps\_utility::enable_danger_react(var_00); + } + + if(isdefined(self.script_faceenemydist)) + { + self.maxfaceenemydist = self.script_faceenemydist; + } + else + { + self.maxfaceenemydist = 512; + } + + if(isdefined(self.script_forcecolor)) + { + maps\_utility::set_force_color(self.script_forcecolor); + } + + if(isdefined(self.var_1CFC)) + { + self.dropweapon = 0; + } + + if(isdefined(self.script_fixednode)) + { + self.fixednode = self.script_fixednode == 1; + } + else + { + self.fixednode = self.team == "allies"; + } + + self.providecoveringfire = self.team == "allies" && self.fixednode; + if(isdefined(self.script_noteworthy) && self.script_noteworthy == "mgpair") + { + thread maps\_mg_penetration::create_mg_team(); + } + + if(isdefined(self.script_goalvolume) && !(isdefined(self.script_moveoverride) && self.script_moveoverride == 1) || isdefined(self.var_1CB0)) + { + thread set_goal_volume(); + } + + if(isdefined(self.script_threatbiasgroup)) + { + self setthreatbiasgroup(self.script_threatbiasgroup); + } + else if(self.team == "neutral") + { + self setthreatbiasgroup("civilian"); + } + else + { + self setthreatbiasgroup(self.team); + } + + if(isdefined(self.var_1CFF)) + { + maps\_utility::func_95D(self.var_1CFF); + } + + if(isdefined(self.var_1CEA)) + { + self.baseaccuracy = self.var_1CEA; + } + + if(isdefined(self.var_1D00)) + { + self.ignoreme = 1; + } + + if(isdefined(self.var_1D01)) + { + self.ignoresuppression = 1; + } + + if(isdefined(self.script_ignoreall)) + { + self.ignoreall = 1; + self clearenemy(); + } + + if(isdefined(self.script_sightrange)) + { + self.maxsightdistsqrd = self.script_sightrange; + } + + if(isdefined(self.script_favoriteenemy)) + { + if(self.script_favoriteenemy == "player") + { + self.favoriteenemy = level.player; + level.player.targetname = "player"; + } + } + + if(isdefined(self.var_1D05)) + { + self.pathenemyfightdist = self.var_1D05; + } + + if(isdefined(self.script_maxdist)) + { + self.pathenemylookahead = self.script_maxdist; + } + + if(isdefined(self.script_longdeath)) + { + self.a.disablelongdeath = 1; + } + + if(isdefined(self.var_1D08)) + { + self.diequietly = 1; + } + + if(isdefined(self.var_1D09)) + { + self.grenadeweapon = "flash_grenade"; + self.grenadeammo = self.var_1D09; + } + + if(isdefined(self.script_pacifist)) + { + self.pacifist = 1; + } + + if(isdefined(self.var_1D0B)) + { + self.health = self.var_1D0B; + } + + if(isdefined(self.script_nodrop)) + { + self.var_1CC7 = self.script_nodrop; + } +} + +//Function Number: 62 +func_1D0D(param_00) +{ + thread ai_damage_think(); + thread func_1D6B(); + thread func_1DD7(); + thread specops_think(); + if(!isdefined(level.ai_dont_glow_in_thermal)) + { + self thermaldrawenable(); + } + + self.spawner_number = undefined; + if(!isdefined(self.unique_id)) + { + maps\_utility::set_ai_number(); + } + + if(!isdefined(self.deathfuncs)) + { + self.deathfuncs = []; + } + + thread deathfunctions(); + level thread maps\_friendlyfire::friendly_fire_think(self); + self.walkdist = 16; + func_1D19(); + func_1CEE(); + func_1CF1(); + [[ level.team_specific_spawn_functions[self.team] ]](); + thread [[ level.var_1C88[self.var_1D0F] ]](); + thread maps\_damagefeedback::monitordamage(); + common_scripts\_dynamic_world::func_18B9(); + func_1D33(); + if(isdefined(self.script_playerseek)) + { + self setgoalentity(level.player); + return; + } + + if(isdefined(self.var_1CB0)) + { + if(isdefined(self.var_1D11)) + { + var_01 = level.var_1D12[self.var_1D11]; + self thread [[ var_01 ]](); + } + else + { + self thread [[ level.global_callbacks["_spawner_stealth_default"] ]](); + } + } + + if(isdefined(self.var_1D13)) + { + self thread [[ level.global_callbacks["_idle_call_idle_func"] ]](); + return; + } + + if(isdefined(self.var_1D14) && !isdefined(self.script_moveoverride)) + { + self thread [[ level.global_callbacks["_idle_call_idle_func"] ]](); + } + + if(isdefined(self.script_patroller) && !isdefined(self.script_moveoverride)) + { + thread maps\_patrol::patrol(); + return; + } + + if(isdefined(self.script_readystand) && self.script_readystand == 1) + { + maps\_utility::func_1D16(); + } + + if(isdefined(self.var_1D17)) + { + if(!isdefined(self.script_radius)) + { + self.goalradius = 800; + } + + self setgoalentity(level.player); + level thread func_1A96(self); + return; + } + + if(isdefined(self.used_an_mg42)) + { + return; + } + + if(isdefined(self.script_moveoverride) && self.script_moveoverride == 1) + { + set_goal_from_settings(); + self setgoalpos(self.origin); + return; + } + + if(!isdefined(self.var_1CB0)) + { + } + + set_goal_from_settings(); + if(isdefined(self.target)) + { + thread func_1D26(); + } +} + +//Function Number: 63 +func_1D19() +{ + self eqoff(); + maps\_utility::func_1D1A(); + if(isdefined(self.var_1D1B)) + { + self.grenadeammo = self.var_1D1B; + } + else + { + self.grenadeammo = 3; + } + + if(isdefined(self.primaryweapon)) + { + self.noattackeraccuracymod = animscripts/combat_utility::issniper(); + } + + if(!maps\_utility::is_specialop()) + { + self.neversprintforvariation = 1; + } +} + +//Function Number: 64 +scrub_guy() +{ + if(self.team == "neutral") + { + self setthreatbiasgroup("civilian"); + } + else + { + self setthreatbiasgroup(self.team); + } + + func_1D19(); + self.baseaccuracy = 1; + maps\_gameskill::grenadeawareness(); + maps\_utility::clear_force_color(); + self.interval = 96; + self.disablearrivals = undefined; + self.ignoreme = 0; + self.threatbias = 0; + self.pacifist = 0; + self.pacifistwait = 20; + self.ignorerandombulletdamage = 0; + self.pushable = 1; + self.script_pushable = 1; + self.allowdeath = 0; + self.anglelerprate = 540; + self.badplaceawareness = 0.75; + self.chainfallback = 0; + self.dontavoidplayer = 0; + self.drawoncompass = 1; + self.dropweapon = 1; + self.goalradius = level.default_goalradius; + self.goalheight = level.var_1C8C; + self.ignoresuppression = 0; + self pushplayer(0); + if(isdefined(self.magic_bullet_shield) && self.magic_bullet_shield) + { + maps\_utility::stop_magic_bullet_shield(); + } + + maps\_utility::func_1D1E(); + self.maxsightdistsqrd = 67108864; + self.script_forcegrenade = 0; + self.walkdist = 16; + maps\_utility::func_1D1F(); + self.pushable = 1; + self.script_pushable = 1; + animscripts/init::func_1C40(); + self.fixednode = self.team == "allies"; +} + +//Function Number: 65 +func_1A96(param_00) +{ + param_00 endon("death"); + while(isalive(param_00)) + { + if(param_00.goalradius > 200) + { + param_00.goalradius = param_00.goalradius - 200; + } + + wait 6; + } +} + +//Function Number: 66 +flag_turret_for_use(param_00) +{ + self endon("death"); + if(!self.flagged_for_use) + { + param_00.used_an_mg42 = 1; + self.flagged_for_use = 1; + param_00 waittill("death"); + self.flagged_for_use = 0; + self notify("get new user"); + } +} + +//Function Number: 67 +set_goal_volume() +{ + self endon("death"); + waittillframeend; + var_00 = level.goalvolumes[self.script_goalvolume]; + if(!isdefined(var_00)) + { + return; + } + + if(isdefined(var_00.target)) + { + var_01 = getnode(var_00.target,"targetname"); + var_02 = getent(var_00.target,"targetname"); + var_03 = common_scripts\utility::getstruct(var_00.target,"targetname"); + var_04 = undefined; + if(isdefined(var_01)) + { + var_04 = var_01; + self setgoalnode(var_04); + } + else if(isdefined(var_02)) + { + var_04 = var_02; + self setgoalpos(var_04.origin); + } + else if(isdefined(var_03)) + { + var_04 = var_03; + self setgoalpos(var_04.origin); + } + + if(isdefined(var_04.radius) && var_04.radius != 0) + { + self.goalradius = var_04.radius; + } + + if(isdefined(var_04.goalheight) && var_04.goalheight != 0) + { + self.goalheight = var_04.goalheight; + } + } + + if(isdefined(self.target)) + { + self setgoalvolume(var_00); + return; + } + + self setgoalvolumeauto(var_00); +} + +//Function Number: 68 +get_target_ents(param_00) +{ + return getentarray(param_00,"targetname"); +} + +//Function Number: 69 +get_target_nodes(param_00) +{ + return getnodearray(param_00,"targetname"); +} + +//Function Number: 70 +func_0FD7(param_00) +{ + return common_scripts\utility::getstructarray(param_00,"targetname"); +} + +//Function Number: 71 +func_1D23(param_00) +{ + return isdefined(param_00.radius) && param_00.radius != 0; +} + +//Function Number: 72 +go_to_origin(param_00,param_01) +{ + func_1D26(param_00,"origin",param_01); +} + +//Function Number: 73 +func_1D25(param_00,param_01) +{ + func_1D26(param_00,"struct",param_01); +} + +//Function Number: 74 +func_1D26(param_00,param_01,param_02,param_03) +{ + if(isdefined(self.used_an_mg42)) + { + return; + } + + var_04 = func_1D32(param_00,param_01); + if(!isdefined(var_04)) + { + self notify("reached_path_end"); + return; + } + + if(!isdefined(param_02)) + { + param_02 = ::empty_arrived_func; + } + + func_1D29(var_04["destination"],var_04["get_target_func"],var_04["set_goal_func_quits"],param_02,param_03); +} + +//Function Number: 75 +empty_arrived_func(param_00) +{ +} + +//Function Number: 76 +get_least_used_from_array(param_00) +{ + if(param_00.size == 1) + { + return param_00[0]; + } + + var_01 = param_00[0].targetname; + if(!isdefined(level.go_to_node_arrays[var_01])) + { + level.go_to_node_arrays[var_01] = param_00; + } + + param_00 = level.go_to_node_arrays[var_01]; + var_02 = param_00[0]; + var_03 = []; + for(var_04 = 0;var_04 < param_00.size - 1;var_04++) + { + var_03[var_04] = param_00[var_04 + 1]; + } + + var_03[param_00.size - 1] = param_00[0]; + level.go_to_node_arrays[var_01] = var_03; + return var_02; +} + +//Function Number: 77 +func_1D29(param_00,param_01,param_02,param_03,param_04) +{ + self notify("stop_going_to_node"); + self endon("stop_going_to_node"); + self endon("death"); + for(;;) + { + param_00 = get_least_used_from_array(param_00); + var_05 = param_04; + if(isdefined(param_00.var_1D2A)) + { + if(param_00.var_1D2A > 1) + { + var_05 = param_00.var_1D2A; + } + + param_00.var_1D2A = 0; + } + + if(func_1D23(param_00)) + { + self.goalradius = param_00.radius; + } + else + { + self.goalradius = level.default_goalradius; + } + + if(isdefined(param_00.height)) + { + self.goalheight = param_00.height; + } + else + { + self.goalheight = level.var_1C8C; + } + + [[ param_02 ]](param_00); + if(maps\_utility::ent_flag_exist("_stealth_override_goalpos")) + { + for(;;) + { + self waittill("goal"); + if(!maps\_utility::ent_flag("_stealth_override_goalpos")) + { + break; + } + + maps\_utility::func_FA3("_stealth_override_goalpos"); + } + } + else + { + self waittill("goal"); + } + + param_00 notify("trigger",self); + [[ param_03 ]](param_00); + if(isdefined(param_00.script_flag_set)) + { + common_scripts\utility::flag_set(param_00.script_flag_set); + } + + if(isdefined(param_00.script_ent_flag_set)) + { + maps\_utility::func_FA4(param_00.script_ent_flag_set); + } + + if(isdefined(param_00.script_flag_clear)) + { + common_scripts\utility::flag_clear(param_00.script_flag_clear); + } + + if(targets_and_uses_turret(param_00)) + { + return 1; + } + + param_00 maps\_utility::script_delay(); + if(isdefined(param_00.script_flag_wait)) + { + common_scripts\utility::flag_wait(param_00.script_flag_wait); + } + + param_00 maps\_utility::func_1CB5(); + if(isdefined(param_00.var_1A7F)) + { + wait param_00.var_1A7F; + } + + while(isdefined(param_00.var_1D2A)) + { + param_00.var_1D2A = 0; + if(go_to_node_wait_for_player(param_00,param_01,var_05)) + { + param_00.var_1D2A = 1; + param_00 notify("script_requires_player"); + break; + } + + wait 0.1; + } + + if(!isdefined(param_00.target)) + { + break; + } + + var_06 = [[ param_01 ]](param_00.target); + if(!var_06.size) + { + break; + } + + param_00 = var_06; + } + + self notify("reached_path_end"); + if(isdefined(self.script_forcegoal)) + { + return; + } + + if(isdefined(self getgoalvolume())) + { + self setgoalvolumeauto(self getgoalvolume()); + return; + } + + self.goalradius = level.default_goalradius; +} + +//Function Number: 78 +go_to_node_wait_for_player(param_00,param_01,param_02) +{ + foreach(var_04 in level.players) + { + if(distancesquared(var_04.origin,param_00.origin) < distancesquared(self.origin,param_00.origin)) + { + return 1; + } + } + + var_06 = anglestoforward(self.angles); + if(isdefined(param_00.target)) + { + var_07 = [[ param_01 ]](param_00.target); + if(var_07.size == 1) + { + var_06 = vectornormalize(var_07[0].origin - param_00.origin); + } + else if(isdefined(param_00.angles)) + { + var_06 = anglestoforward(param_00.angles); + } + } + else if(isdefined(param_00.angles)) + { + var_06 = anglestoforward(param_00.angles); + } + + var_08 = []; + foreach(var_04 in level.players) + { + var_08[var_08.size] = vectornormalize(var_04.origin - self.origin); + } + + foreach(var_0C in var_08) + { + if(vectordot(var_06,var_0C) > 0) + { + return 1; + } + } + + var_0E = param_02 * param_02; + foreach(var_04 in level.players) + { + if(distancesquared(var_04.origin,self.origin) < var_0E) + { + return 1; + } + } + + return 0; +} + +//Function Number: 79 +go_to_node_set_goal_ent(param_00) +{ + if(param_00.classname == "info_volume") + { + self setgoalvolumeauto(param_00); + self notify("go_to_node_new_goal"); + return; + } + + go_to_node_set_goal_pos(param_00); +} + +//Function Number: 80 +go_to_node_set_goal_pos(param_00) +{ + maps\_utility::set_goal_ent(param_00); + self notify("go_to_node_new_goal"); +} + +//Function Number: 81 +go_to_node_set_goal_node(param_00) +{ + maps\_utility::set_goal_node(param_00); + self notify("go_to_node_new_goal"); +} + +//Function Number: 82 +targets_and_uses_turret(param_00) +{ + if(!isdefined(param_00.target)) + { + return 0; + } + + var_01 = getentarray(param_00.target,"targetname"); + if(!var_01.size) + { + return 0; + } + + var_02 = var_01[0]; + if(var_02.classname != "misc_turret") + { + return 0; + } + + thread use_a_turret(var_02); + return 1; +} + +//Function Number: 83 +remove_crawled(param_00) +{ + waittillframeend; + if(isdefined(param_00)) + { + param_00.crawled = undefined; + } +} + +//Function Number: 84 +crawl_target_and_init_flags(param_00,param_01) +{ + var_02 = 0; + var_03 = []; + var_04 = 0; + for(;;) + { + if(!isdefined(param_00.crawled)) + { + param_00.crawled = 1; + level thread remove_crawled(param_00); + if(isdefined(param_00.script_flag_set)) + { + if(!isdefined(level.flag[param_00.script_flag_set])) + { + common_scripts\utility::flag_init(param_00.script_flag_set); + } + } + + if(isdefined(param_00.script_flag_wait)) + { + if(!isdefined(level.flag[param_00.script_flag_wait])) + { + common_scripts\utility::flag_init(param_00.script_flag_wait); + } + } + + if(isdefined(param_00.script_flag_clear)) + { + if(!isdefined(level.flag[param_00.script_flag_clear])) + { + common_scripts\utility::flag_init(param_00.script_flag_clear); + } + } + + if(isdefined(param_00.target)) + { + var_05 = [[ param_01 ]](param_00.target); + var_03 = common_scripts\utility::add_to_array(var_03,var_05); + } + } + + var_04++; + if(var_04 >= var_03.size) + { + break; + } + + param_00 = var_03[var_04]; + } +} + +//Function Number: 85 +func_1D32(param_00,param_01) +{ + var_02["entity"] = ::get_target_ents; + param_00["entity"] = ::go_to_node_set_goal_ent; + if(!isdefined(param_01)) + { + param_01 = "node"; + } + + var_04 = []; + if(isdefined(param_00)) + { + var_29["destination"] = 0; + } + else + { + param_01 = getentarray(self.target,"targetname"); + if(param_01.size > 0) + { + var_02 = "entity"; + } + + if(var_02 == "node") + { + param_01 = getnodearray(self.target,"targetname"); + if(!param_01.size) + { + param_01 = common_scripts\utility::getstructarray(self.target,"targetname"); + if(!param_01.size) + { + return; + } + + var_02 = "struct"; + } + } + } + + return var_29; +} + +//Function Number: 86 +func_1D33() +{ + if(isdefined(self.script_goalheight)) + { + self.goalheight = self.script_goalheight; + return; + } + + self.goalheight = level.var_1C8C; +} + +//Function Number: 87 +set_goal_from_settings(param_00) +{ + if(isdefined(self.script_radius)) + { + self.goalradius = self.script_radius; + return; + } + + if(isdefined(self.script_forcegoal)) + { + if(isdefined(param_00) && isdefined(param_00.radius)) + { + self.goalradius = param_00.radius; + return; + } + } + + if(!isdefined(self getgoalvolume())) + { + if(self.type == "civilian") + { + self.goalradius = 128; + return; + } + + self.goalradius = level.default_goalradius; + } +} + +//Function Number: 88 +func_1D36(param_00) +{ + for(;;) + { + var_01 = self getturretowner(); + if(!isalive(var_01)) + { + wait 1.5; + continue; + } + + if(!isdefined(var_01.enemy)) + { + self settargetentity(common_scripts\utility::random(param_00)); + self notify("startfiring"); + self startfiring(); + } + + wait 2 + randomfloat(1); + } +} + +//Function Number: 89 +manualtarget(param_00) +{ + for(;;) + { + self settargetentity(common_scripts\utility::random(param_00)); + self notify("startfiring"); + self startfiring(); + wait 2 + randomfloat(1); + } +} + +//Function Number: 90 +use_a_turret(param_00) +{ + if(self isbadguy() && self.health == 150) + { + self.health = 100; + self.a.disablelongdeath = 1; + } + + self useturret(param_00); + if(isdefined(param_00.target) && param_00.target != param_00.targetname) + { + var_01 = getentarray(param_00.target,"targetname"); + var_02 = []; + for(var_03 = 0;var_03 < var_01.size;var_03++) + { + if(var_01[var_03].classname == "script_origin") + { + var_02[var_02.size] = var_01[var_03]; + } + } + + if(isdefined(param_00.script_autotarget)) + { + param_00 thread func_1D36(var_02); + } + else if(isdefined(param_00.script_manualtarget)) + { + param_00 setmode("manual_ai"); + param_00 thread manualtarget(var_02); + } + else if(var_02.size > 0) + { + if(var_02.size == 1) + { + param_00.manual_target = var_02[0]; + param_00 settargetentity(var_02[0]); + thread maps\_mgturret::manual_think(param_00); + } + else + { + param_00 thread maps\_mgturret::func_1D3D(var_02); + } + } + } + + thread maps\_mgturret::mg42_firing(param_00); + param_00 notify("startfiring"); +} + +//Function Number: 91 +func_1D3F(param_00,param_01) +{ + self endon("death"); + level.var_1D40[param_00] = level.var_1D40[param_00] + self.count; + var_02 = 1; + while(self.count > 0) + { + self waittill("spawned",var_03); + if(var_02) + { + if(getdvar("fallback","0") == "1") + { + } + + level notify("fallback_firstspawn" + param_00); + var_02 = 0; + } + + common_scripts\utility::waitframe(); + if(maps\_utility::func_F77(var_03)) + { + level notify("fallbacker_died" + param_00); + level.var_1D40[param_00]--; + continue; + } + + var_03 thread func_1D42(param_00,param_01,"is spawner"); + } +} + +//Function Number: 92 +fallback_ai_think_death(param_00,param_01) +{ + param_00 waittill("death"); + level.var_1D40[param_01]--; + level notify("fallbacker_died" + param_01); +} + +//Function Number: 93 +func_1D42(param_00,param_01,param_02) +{ + if(!isdefined(self.var_1D43) || !isdefined(self.var_1D43[param_00])) + { + self.var_1D43[param_00] = 1; + } + else + { + return; + } + + self.script_fallback = param_00; + if(!isdefined(param_02)) + { + level.var_1D40[param_00]++; + } + + if(isdefined(param_01) && level.fallback_initiated[param_00]) + { + thread fallback_ai(param_00,param_01); + } + + level thread fallback_ai_think_death(self,param_00); +} + +//Function Number: 94 +fallback_death(param_00,param_01) +{ + param_00 waittill("death"); + level notify("fallback_reached_goal" + param_01); +} + +//Function Number: 95 +fallback_goal() +{ + self waittill("goal"); + self.ignoresuppression = 0; + self notify("fallback_notify"); + self notify("stop_coverprint"); +} + +//Function Number: 96 +fallback_ai(param_00,param_01) +{ + self notify("stop_going_to_node"); + self stopuseturret(); + self.ignoresuppression = 1; + self setgoalnode(param_01); + if(param_01.radius != 0) + { + self.goalradius = param_01.radius; + } + + self endon("death"); + level thread fallback_death(self,param_00); + thread fallback_goal(); + if(getdvar("fallback","0") == "1") + { + thread coverprint(param_01.origin); + } + + self waittill("fallback_notify"); + level notify("fallback_reached_goal" + param_00); +} + +//Function Number: 97 +coverprint(param_00) +{ + self endon("fallback_notify"); + self endon("stop_coverprint"); + common_scripts\utility::waitframe(); +} + +//Function Number: 98 +newfallback_overmind(param_00,param_01) +{ + var_02 = undefined; + var_03 = getallnodes(); + for(var_04 = 0;var_04 < var_03.size;var_04++) + { + if(isdefined(var_03[var_04].script_fallback) && var_03[var_04].script_fallback == param_00) + { + var_02 = common_scripts\utility::add_to_array(var_02,var_03[var_04]); + } + } + + if(!isdefined(var_02)) + { + return; + } + + level.var_1D40[param_00] = 0; + level.spawner_fallbackers[param_00] = 0; + level.fallback_initiated[param_00] = 0; + var_05 = getspawnerarray(); + for(var_04 = 0;var_04 < var_05.size;var_04++) + { + if(isdefined(var_05[var_04].script_fallback) && var_05[var_04].script_fallback == param_00) + { + if(var_05[var_04].count > 0) + { + var_05[var_04] thread func_1D3F(param_00,var_02[randomint(var_02.size)]); + level.spawner_fallbackers[param_00]++; + } + } + } + + var_06 = getaiarray(); + for(var_04 = 0;var_04 < var_06.size;var_04++) + { + if(isdefined(var_06[var_04].script_fallback) && var_06[var_04].script_fallback == param_00) + { + var_06[var_04] thread func_1D42(param_00); + } + } + + if(!level.var_1D40[param_00] && !level.spawner_fallbackers[param_00]) + { + return; + } + + var_05 = undefined; + var_06 = undefined; + thread fallback_wait(param_00,param_01); + level waittill("fallbacker_trigger" + param_00); + if(getdvar("fallback","0") == "1") + { + } + + level.fallback_initiated[param_00] = 1; + var_07 = undefined; + var_06 = getaiarray(); + for(var_04 = 0;var_04 < var_06.size;var_04++) + { + if((isdefined(var_06[var_04].script_fallback) && var_06[var_04].script_fallback == param_00) || isdefined(var_06[var_04].var_1D4B) && isdefined(param_01) && var_06[var_04].var_1D4B == param_01) + { + var_07 = common_scripts\utility::add_to_array(var_07,var_06[var_04]); + } + } + + var_06 = undefined; + if(!isdefined(var_07)) + { + return; + } + + var_08 = var_07.size * 0.4; + var_08 = int(var_08); + level notify("fallback initiated " + param_00); + fallback_text(var_07,0,var_08); + for(var_04 = 0;var_04 < var_08;var_04++) + { + var_07[var_04] thread fallback_ai(param_00,var_02[randomint(var_02.size)]); + } + + for(var_04 = 0;var_04 < var_08;var_04++) + { + level waittill("fallback_reached_goal" + param_00); + } + + fallback_text(var_07,var_08,var_07.size); + for(var_04 = var_08;var_04 < var_07.size;var_04++) + { + if(isalive(var_07[var_04])) + { + var_07[var_04] thread fallback_ai(param_00,var_02[randomint(var_02.size)]); + } + } +} + +//Function Number: 99 +fallback_text(param_00,param_01,param_02) +{ + if(gettime() <= level.var_1C7F) + { + return; + } + + var_03 = param_01; + while(var_03 < param_02) + { + if(!isalive(param_00[var_03])) + { + continue; + } + + level.var_1C7F = gettime() + 2500 + randomint(2000); + var_04 = param_00.size; + var_05 = int(var_04 * 0.4); + if(randomint(100) > 50) + { + if(var_04 - var_05 > 1) + { + if(randomint(100) > 66) + { + var_06 = "dawnville_defensive_german_1"; + } + else if(randomint(100) > 66) + { + var_06 = "dawnville_defensive_german_2"; + } + else + { + var_06 = "dawnville_defensive_german_3"; + } + } + else if(randomint(100) > 66) + { + var_06 = "dawnville_defensive_german_4"; + } + else if(randomint(100) > 66) + { + var_06 = "dawnville_defensive_german_5"; + } + else + { + var_06 = "dawnville_defensive_german_1"; + } + } + else if(var_06 > 1) + { + if(randomint(100) > 66) + { + var_06 = "dawnville_defensive_german_2"; + } + else if(randomint(100) > 66) + { + var_06 = "dawnville_defensive_german_3"; + } + else + { + var_06 = "dawnville_defensive_german_4"; + } + } + else if(randomint(100) > 66) + { + var_06 = "dawnville_defensive_german_5"; + } + else if(randomint(100) > 66) + { + var_06 = "dawnville_defensive_german_1"; + } + else + { + var_06 = "dawnville_defensive_german_2"; + } + + param_00[var_03] animscripts/face::sayspecificdialogue(undefined,var_06,1); + return; + var_06++; + } +} + +//Function Number: 100 +fallback_wait(param_00,param_01) +{ + level endon("fallbacker_trigger" + param_00); + if(getdvar("fallback","0") == "1") + { + } + + for(var_02 = 0;var_02 < level.spawner_fallbackers[param_00];var_02++) + { + if(getdvar("fallback","0") == "1") + { + } + + level waittill("fallback_firstspawn" + param_00); + } + + if(getdvar("fallback","0") == "1") + { + } + + var_03 = getaiarray(); + for(var_02 = 0;var_02 < var_03.size;var_02++) + { + if((isdefined(var_03[var_02].script_fallback) && var_03[var_02].script_fallback == param_00) || isdefined(var_03[var_02].var_1D4B) && isdefined(param_01) && var_03[var_02].var_1D4B == param_01) + { + var_03[var_02] thread func_1D42(param_00); + } + } + + var_03 = undefined; + var_04 = level.var_1D40[param_00]; + for(var_05 = 0;level.var_1D40[param_00] > var_04 * 0.5;var_05++) + { + if(getdvar("fallback","0") == "1") + { + } + + level waittill("fallbacker_died" + param_00); + } + + level notify("fallbacker_trigger" + param_00); +} + +//Function Number: 101 +fallback_think(param_00) +{ + if(!isdefined(level.var_1D43) || !isdefined(level.var_1D43[param_00.script_fallback])) + { + level thread newfallback_overmind(param_00.script_fallback,param_00.var_1D4B); + } + + param_00 waittill("trigger"); + level notify("fallbacker_trigger" + param_00.script_fallback); + func_1CBC(param_00); +} + +//Function Number: 102 +func_1D4E(param_00) +{ + self waittill("goal"); + if(param_00.radius != 0) + { + self.goalradius = param_00.radius; + return; + } + + self.goalradius = level.default_goalradius; +} + +//Function Number: 103 +fallback_coverprint() +{ + self endon("fallback"); + self endon("fallback_clear_goal"); + self endon("fallback_clear_death"); + for(;;) + { + if(isdefined(self.var_1D50)) + { + } + + common_scripts\utility::waitframe(); + } +} + +//Function Number: 104 +func_1D51() +{ + self endon("fallback_clear_goal"); + self endon("fallback_clear_death"); + for(;;) + { + if(isdefined(self.var_1D50)) + { + } + + common_scripts\utility::waitframe(); + } +} + +//Function Number: 105 +func_1D43() +{ + var_00 = getnode(self.target,"targetname"); + self.var_1D50 = var_00; + self setgoalnode(var_00); + if(isdefined(self.var_1D52)) + { + thread func_1D4E(var_00); + } + else if(var_00.radius != 0) + { + self.goalradius = var_00.radius; + } + else + { + self.goalradius = level.default_goalradius; + } + + for(;;) + { + self waittill("fallback"); + self.interval = 20; + level thread fallback_death(self); + if(getdvar("fallback","0") == "1") + { + thread func_1D51(); + } + + if(isdefined(var_00.target)) + { + var_00 = getnode(var_00.target,"targetname"); + self.var_1D50 = var_00; + self setgoalnode(var_00); + thread fallback_goal(); + if(var_00.radius != 0) + { + self.goalradius = var_00.radius; + } + + continue; + } + + level notify("fallback_arrived" + self.script_fallback); + } +} + +//Function Number: 106 +delete_me() +{ + common_scripts\utility::waitframe(); + self delete(); +} + +//Function Number: 107 +vlength(param_00,param_01) +{ + var_02 = param_00[0] - param_01[0]; + var_03 = param_00[1] - param_01[1]; + var_04 = param_00[2] - param_01[2]; + var_02 = var_02 * var_02; + var_03 = var_03 * var_03; + var_04 = var_04 * var_04; + var_05 = var_02 + var_03 + var_04; + return var_05; +} + +//Function Number: 108 +specialcheck(param_00) +{ + wait 0.05; +} + +//Function Number: 109 +friendly_wave(param_00) +{ + if(!isdefined(level.var_1D56)) + { + thread func_1D5B(); + } + + for(;;) + { + param_00 waittill("trigger"); + level notify("friendly_died"); + if(param_00.targetname == "friendly_wave") + { + level.friendly_wave_trigger = param_00; + } + else + { + level.friendly_wave_trigger = undefined; + } + + wait 1; + } +} + +//Function Number: 110 +set_spawncount(param_00) +{ + if(!isdefined(self.target)) + { + return; + } + + var_01 = getentarray(self.target,"targetname"); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + var_01[var_02] maps\_utility::set_count(param_00); + } +} + +//Function Number: 111 +friendlydeath_thread() +{ + if(!isdefined(level.totalfriends)) + { + level.totalfriends = 0; + } + + level.totalfriends++; + self waittill("death"); + level notify("friendly_died"); + level.totalfriends--; +} + +//Function Number: 112 +func_1D5B() +{ + level.var_1D56 = 1; + var_00 = getentarray("friendly_wave","targetname"); + common_scripts\utility::array_thread(var_00,::set_spawncount,0); + if(!isdefined(level.maxfriendlies)) + { + level.maxfriendlies = 7; + } + + var_01 = 1; + for(;;) + { + if(isdefined(level.friendly_wave_trigger) && isdefined(level.friendly_wave_trigger.target)) + { + var_02 = level.friendly_wave_trigger; + var_03 = getentarray(level.friendly_wave_trigger.target,"targetname"); + if(!var_03.size) + { + level waittill("friendly_died"); + continue; + } + + var_04 = 0; + var_05 = isdefined(level.friendly_wave_trigger.script_delay); + while(isdefined(level.friendly_wave_trigger) && level.totalfriends < level.maxfriendlies) + { + if(var_02 != level.friendly_wave_trigger) + { + var_05 = isdefined(level.friendly_wave_trigger.script_delay); + var_02 = level.friendly_wave_trigger; + var_03 = getentarray(level.friendly_wave_trigger.target,"targetname"); + } + else if(!var_05) + { + var_04 = randomint(var_03.size); + } + else if(var_04 == var_03.size) + { + var_04 = 0; + } + + var_03[var_04] maps\_utility::set_count(1); + var_06 = isdefined(var_03[var_04].var_1CB0) && common_scripts\utility::flag("_stealth_enabled") && !common_scripts\utility::flag("_stealth_spotted"); + if(isdefined(var_03[var_04].script_forcespawn)) + { + var_07 = var_03[var_04] stalingradspawn(var_06); + } + else + { + var_07 = var_03[var_04] dospawn(var_06); + } + + var_03[var_04] maps\_utility::set_count(0); + if(maps\_utility::func_F77(var_07)) + { + wait 0.2; + continue; + } + + if(isdefined(var_03[var_04].script_combatbehavior)) + { + if(var_03[var_04].combatbehavior == "heat") + { + var_07 maps\_utility::enable_heat_behavior(); + } + + if(var_03[var_04].combatbehavior == "cqb") + { + var_07 maps\_utility::enable_cqbwalk(); + } + } + + if(isdefined(level.friendlywave_thread)) + { + level thread [[ level.friendlywave_thread ]](var_07); + } + else + { + var_07 setgoalentity(level.player); + } + + if(var_05) + { + if(level.friendly_wave_trigger.script_delay == 0) + { + waittillframeend; + } + else + { + wait level.friendly_wave_trigger.script_delay; + } + + var_04++; + continue; + } + + wait randomfloat(5); + } + } + + level waittill("friendly_died"); + } +} + +//Function Number: 113 +func_1A44(param_00) +{ + var_01 = getnode(param_00.target,"targetname"); + var_02 = getent(var_01.target,"targetname"); + var_02 setmode("auto_ai"); + var_02 cleartargetentity(); + var_03 = 0; + for(;;) + { + param_00 waittill("trigger",var_04); + if(!isai(var_04)) + { + continue; + } + + if(!isdefined(var_04.team)) + { + continue; + } + + if(var_04.team != "allies") + { + continue; + } + + if(isdefined(var_04.script_usemg42) && var_04.script_usemg42 == 0) + { + continue; + } + + if(var_04 thread func_1D62(var_02,var_01)) + { + var_04 thread func_1D68(var_02,var_01); + var_02 waittill("friendly_finished_using_mg42"); + if(isalive(var_04)) + { + var_04.turret_use_time = gettime() + 10000; + } + } + + wait 1; + } +} + +//Function Number: 114 +friendly_mg42_death_notify(param_00,param_01) +{ + param_01 endon("friendly_finished_using_mg42"); + param_00 waittill("death"); + param_01 notify("friendly_finished_using_mg42"); +} + +//Function Number: 115 +friendly_mg42_wait_for_use(param_00) +{ + param_00 endon("friendly_finished_using_mg42"); + self.useable = 1; + self setcursorhint("HINT_NOICON"); + self sethintstring(&"PLATFORM_USEAIONMG42"); + self waittill("trigger"); + self.useable = 0; + self sethintstring(""); + self stopuseturret(); + self notify("stopped_use_turret"); + param_00 notify("friendly_finished_using_mg42"); +} + +//Function Number: 116 +func_1D62(param_00,param_01) +{ + if(self.useable) + { + return 0; + } + + if(isdefined(self.turret_use_time) && gettime() < self.turret_use_time) + { + return 0; + } + + if(distance(level.player.origin,param_01.origin) < 100) + { + return 0; + } + + if(isdefined(self.chainnode)) + { + if(distance(level.player.origin,self.chainnode.origin) > 1100) + { + return 0; + } + } + + return 1; +} + +//Function Number: 117 +func_1D63(param_00,param_01) +{ + param_00 endon("friendly_finished_using_mg42"); + self waittill("trigger"); + param_00 notify("friendly_finished_using_mg42"); +} + +//Function Number: 118 +func_1D64() +{ + if(!isdefined(self.friendly_mg42)) + { + return; + } + + self.friendly_mg42 notify("friendly_finished_using_mg42"); +} + +//Function Number: 119 +nofour() +{ + self endon("death"); + self waittill("goal"); + self.goalradius = self.oldradius; + if(self.goalradius < 32) + { + self.goalradius = 400; + } +} + +//Function Number: 120 +func_1D68(param_00,param_01) +{ + self endon("death"); + param_00 endon("friendly_finished_using_mg42"); + level thread friendly_mg42_death_notify(self,param_00); + self.oldradius = self.goalradius; + self.goalradius = 28; + thread nofour(); + self setgoalnode(param_01); + self.ignoresuppression = 1; + self waittill("goal"); + self.goalradius = self.oldradius; + if(self.goalradius < 32) + { + self.goalradius = 400; + } + + self.ignoresuppression = 0; + self.goalradius = self.oldradius; + if(distance(level.player.origin,param_01.origin) < 32) + { + param_00 notify("friendly_finished_using_mg42"); + return; + } + + self.friendly_mg42 = param_00; + thread friendly_mg42_wait_for_use(param_00); + thread func_1D69(param_00); + self useturret(param_00); + if(isdefined(param_00.target)) + { + var_02 = getent(param_00.target,"targetname"); + if(isdefined(var_02)) + { + var_02 thread func_1D63(param_00,self); + } + } + + for(;;) + { + if(distance(self.origin,param_01.origin) < 32) + { + self useturret(param_00); + } + else + { + break; + } + + if(isdefined(self.chainnode)) + { + if(distance(self.origin,self.chainnode.origin) > 1100) + { + break; + } + } + + wait 1; + } + + param_00 notify("friendly_finished_using_mg42"); +} + +//Function Number: 121 +func_1D69(param_00) +{ + self endon("death"); + param_00 waittill("friendly_finished_using_mg42"); + friendly_mg42_doneusingturret(); +} + +//Function Number: 122 +friendly_mg42_doneusingturret() +{ + self endon("death"); + var_00 = self.friendly_mg42; + self.friendly_mg42 = undefined; + self stopuseturret(); + self notify("stopped_use_turret"); + self.useable = 0; + self.goalradius = self.oldradius; + if(!isdefined(var_00)) + { + return; + } + + if(!isdefined(var_00.target)) + { + return; + } + + var_01 = getnode(var_00.target,"targetname"); + var_02 = self.goalradius; + self.goalradius = 8; + self setgoalnode(var_01); + wait 2; + self.goalradius = 384; + self waittill("goal"); + if(isdefined(self.target)) + { + var_01 = getnode(self.target,"targetname"); + if(isdefined(var_01.target)) + { + var_01 = getnode(var_01.target,"targetname"); + } + + if(isdefined(var_01)) + { + self setgoalnode(var_01); + } + } + + self.goalradius = var_02; +} + +//Function Number: 123 +func_1D6B() +{ + if(isdefined(level.notanksquish)) + { + return; + } + + if(isdefined(level.levelhasvehicles) && !level.levelhasvehicles) + { + return; + } + + maps\_utility::add_damage_function(::tanksquish_damage_check); +} + +//Function Number: 124 +tanksquish_damage_check(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + if(!isdefined(self)) + { + return; + } + + if(isalive(self)) + { + return; + } + + if(!isalive(param_01)) + { + return; + } + + if(!isdefined(param_01.vehicletype)) + { + return; + } + + if(param_01 maps\_vehicle::func_1D6F()) + { + return; + } + + if(!isdefined(self.noragdoll)) + { + self startragdoll(); + } + + if(!isdefined(self)) + { + return; + } + + maps\_utility::remove_damage_function(::tanksquish_damage_check); +} + +//Function Number: 125 +func_1D70(param_00,param_01,param_02,param_03,param_04) +{ + param_00 endon("death"); + param_00.var_1D71 = param_01; + if(isdefined(param_01.script_delay)) + { + param_00.var_1D72 = param_01.script_delay; + } + + if(isdefined(param_03) && isdefined(param_04)) + { + param_00.var_1D73 = param_03; + param_00.panzer_ent_offset = param_04; + } + else + { + param_00.panzer_pos = param_02; + } + + param_00 setgoalpos(param_00.origin); + param_00 setgoalnode(param_01); + param_00.goalradius = 12; + param_00 waittill("goal"); + param_00.goalradius = 28; + param_00 waittill("shot_at_target"); + param_00.var_1D73 = undefined; + param_00.panzer_pos = undefined; + param_00.var_1D72 = undefined; +} + +//Function Number: 126 +showstart(param_00,param_01,param_02) +{ + var_03 = getstartorigin(param_00,param_01,param_02); + wait 0.05; +} + +//Function Number: 127 +spawnwaypointfriendlies() +{ + maps\_utility::set_count(1); + if(isdefined(self.script_forcespawn)) + { + var_00 = self stalingradspawn(); + } + else + { + var_00 = self dospawn(); + } + + if(maps\_utility::func_F77(var_00)) + { + return; + } + + if(isdefined(self.script_combatbehavior)) + { + if(self.script_combatbehavior == "heat") + { + var_00 maps\_utility::enable_heat_behavior(); + } + + if(self.script_combatbehavior == "cqb") + { + var_00 maps\_utility::enable_cqbwalk(); + } + } + + var_00.var_1D78 = 1; +} + +//Function Number: 128 +waittilldeathorleavesquad() +{ + self endon("death"); + self waittill("leaveSquad"); +} + +//Function Number: 129 +friendlyspawnwave() +{ + common_scripts\utility::array_thread(getentarray(self.target,"targetname"),::friendlyspawnwave_triggerthink,self); + for(;;) + { + self waittill("trigger",var_02); + if(activefriendlyspawn() && getfriendlyspawntrigger() == self) + { + func_1DA2(); + } + + self waittill("friendly_wave_start",var_03); + func_1DA6(var_03,self); + if(!isdefined(var_03.target)) + { + continue; + } + + var_04 = getent(var_03.target,"targetname"); + var_04 thread func_1DA8(self); + } +} + +//Function Number: 130 +func_1A3A(param_00) +{ + if(!isdefined(param_00)) + { + param_00 = 0; + } + + if(isdefined(self.script_noteworthy) && self.script_noteworthy == "instant_respawn") + { + param_00 = 1; + } + + level.spawnerwave = []; + var_01 = getentarray(self.target,"targetname"); + common_scripts\utility::array_thread(var_01,::func_1D7F,param_00); + var_02 = 0; + var_03 = 0; + for(;;) + { + self waittill("trigger",var_04); + if(!objectiveisallowed()) + { + continue; + } + + if(!var_03) + { + var_03 = 1; + maps\_utility::script_delay(); + } + + if(self istouching(level.player)) + { + var_02 = 1; + } + else + { + if(!isalive(var_04)) + { + continue; + } + + if(isplayer(var_04)) + { + var_02 = 1; + } + else if(!isdefined(var_04.issquad) || !var_04.issquad) + { + continue; + } + } + + var_01 = getentarray(self.target,"targetname"); + if(isdefined(var_01[0])) + { + if(isdefined(var_01[0].script_randomspawn)) + { + func_1CBD(var_01[0].script_randomspawn); + } + } + + var_01 = getentarray(self.target,"targetname"); + for(var_05 = 0;var_05 < var_01.size;var_05++) + { + var_01[var_05].var_1D7D = var_02; + var_01[var_05] notify("flood_begin"); + } + + if(var_02) + { + wait 5; + continue; + } + + wait 0.1; + } +} + +//Function Number: 131 +func_1D7E(param_00) +{ + var_01 = []; + for(var_02 = 0;var_02 < param_00.size;var_02++) + { + var_01[param_00[var_02].script_randomspawn] = 1; + } + + var_03 = getarraykeys(var_01); + var_04 = common_scripts\utility::random(var_03); + for(var_02 = 0;var_02 < param_00.size;var_02++) + { + if(param_00[var_02].script_randomspawn != var_04) + { + param_00[var_02] delete(); + } + } +} + +//Function Number: 132 +func_1D7F(param_00) +{ + if(isdefined(self.securestarted)) + { + return; + } + + self.securestarted = 1; + self.triggerunlocked = 1; + var_01 = self.target; + var_02 = self.targetname; + if(!isdefined(var_01) && !isdefined(self.script_moveoverride)) + { + waittillframeend; + } + + var_03 = []; + if(isdefined(var_01)) + { + var_04 = getentarray(var_01,"targetname"); + for(var_05 = 0;var_05 < var_04.size;var_05++) + { + if(!issubstr(var_04[var_05].classname,"actor")) + { + continue; + } + + var_03[var_03.size] = var_04[var_05]; + } + } + + var_06 = spawnstruct(); + var_07 = self.origin; + flood_and_secure_spawner_think(var_06,var_03.size > 0,param_00); + if(isalive(var_06.ai)) + { + var_06.ai waittill("death"); + } + + if(!isdefined(var_01)) + { + return; + } + + var_04 = getentarray(var_01,"targetname"); + if(!var_04.size) + { + return; + } + + for(var_05 = 0;var_05 < var_04.size;var_05++) + { + if(!issubstr(var_04[var_05].classname,"actor")) + { + continue; + } + + var_04[var_05].targetname = var_02; + var_08 = var_01; + if(isdefined(var_04[var_05].target)) + { + var_09 = getent(var_04[var_05].target,"targetname"); + if(!isdefined(var_09) || !issubstr(var_09.classname,"actor")) + { + var_08 = var_04[var_05].target; + } + } + + var_04[var_05].target = var_08; + var_04[var_05] thread func_1D7F(param_00); + var_04[var_05].var_1D7D = 1; + var_04[var_05] notify("flood_begin"); + } +} + +//Function Number: 133 +flood_and_secure_spawner_think(param_00,param_01,param_02) +{ + self endon("death"); + var_03 = self.count; + if(!param_01) + { + param_01 = isdefined(self.script_noteworthy) && self.script_noteworthy == "delete"; + } + + maps\_utility::set_count(2); + if(isdefined(self.script_delay)) + { + var_04 = self.script_delay; + } + else + { + var_04 = 0; + } + + for(;;) + { + self waittill("flood_begin"); + if(self.var_1D7D) + { + break; + } + + if(var_04) + { + continue; + } + + break; + } + + var_05 = distance(level.player.origin,self.origin); + while(var_03) + { + self.var_1577 = var_03; + maps\_utility::set_count(2); + wait var_04; + var_06 = isdefined(self.var_1CB0) && common_scripts\utility::flag("_stealth_enabled") && !common_scripts\utility::flag("_stealth_spotted"); + if(isdefined(self.script_forcespawn)) + { + var_07 = self stalingradspawn(var_06); + } + else + { + var_07 = self dospawn(var_06); + } + + if(maps\_utility::func_F77(var_07)) + { + var_08 = 0; + if(var_04 < 2) + { + wait 2; + } + + continue; + } + else + { + if(isdefined(self.script_combatbehavior)) + { + if(self.script_combatbehavior == "heat") + { + var_07 maps\_utility::enable_heat_behavior(); + } + + if(self.script_combatbehavior == "cqb") + { + var_07 maps\_utility::enable_cqbwalk(); + } + } + + thread addtowavespawner(var_07); + var_07 thread flood_and_secure_spawn(self); + if(isdefined(self.var_1CEA)) + { + var_07.baseaccuracy = self.var_1CEA; + } + + param_00.ai = var_07; + param_00 notify("got_ai"); + self waittill("spawn_died",var_09,var_08); + if(var_04 > 2) + { + var_04 = randomint(4) + 2; + } + else + { + var_04 = 0.5 + randomfloat(0.5); + } + } + + if(var_09) + { + waittillrestartordistance(var_05); + continue; + } + + if(playerwasnearby(var_08 || param_01,param_00.ai)) + { + var_03--; + } + + if(!param_02) + { + func_1D88(); + } + } + + self delete(); +} + +//Function Number: 134 +func_1D83(param_00) +{ + self endon("death"); + param_00 waittill("death"); +} + +//Function Number: 135 +addtowavespawner(param_00) +{ + var_01 = self.targetname; + if(!isdefined(level.spawnerwave[var_01])) + { + level.spawnerwave[var_01] = spawnstruct(); + level.spawnerwave[var_01] maps\_utility::set_count(0); + level.spawnerwave[var_01].var_1D85 = 0; + } + + if(!isdefined(self.addedtowave)) + { + self.addedtowave = 1; + level.spawnerwave[var_01].var_1D85++; + } + + level.spawnerwave[var_01].count++; + func_1D83(param_00); + level.spawnerwave[var_01].count--; + if(!isdefined(self)) + { + level.spawnerwave[var_01].var_1D85--; + } + + if(level.spawnerwave[var_01].var_1D85) + { + if(level.spawnerwave[var_01].count / level.spawnerwave[var_01].var_1D85 < 0.32) + { + level.spawnerwave[var_01] notify("waveReady"); + } + } +} + +//Function Number: 136 +func_1D87(param_00) +{ + self endon("debug_stop"); + self endon("death"); + wait 0.05; +} + +//Function Number: 137 +func_1D88() +{ + var_00 = self.targetname; + if(level.spawnerwave[var_00].count) + { + level.spawnerwave[var_00] waittill("waveReady"); + } +} + +//Function Number: 138 +playerwasnearby(param_00,param_01) +{ + if(param_00) + { + return 1; + } + + if(isdefined(param_01) && isdefined(param_01.origin)) + { + var_02 = param_01.origin; + } + else + { + var_02 = self.origin; + } + + if(distance(level.player.origin,var_02) < 700) + { + return 1; + } + + return bullettracepassed(level.player geteye(),param_01 geteye(),0,undefined); +} + +//Function Number: 139 +waittillrestartordistance(param_00) +{ + self endon("flood_begin"); + param_00 = param_00 * 0.75; + while(distance(level.player.origin,self.origin) > param_00) + { + wait 1; + } +} + +//Function Number: 140 +flood_and_secure_spawn(param_00) +{ + thread flood_and_secure_spawn_goal(); + self waittill("death",var_01); + var_02 = isalive(var_01) && isplayer(var_01); + if(!var_02 && isdefined(var_01) && var_01.classname == "worldspawn") + { + var_02 = 1; + } + + var_03 = !isdefined(self); + param_00 notify("spawn_died",var_03,var_02); +} + +//Function Number: 141 +flood_and_secure_spawn_goal() +{ + if(isdefined(self.script_moveoverride)) + { + return; + } + + self endon("death"); + var_00 = getnode(self.target,"targetname"); + if(isdefined(var_00)) + { + self setgoalnode(var_00); + } + else + { + var_00 = getent(self.target,"targetname"); + if(isdefined(var_00)) + { + self setgoalpos(var_00.origin); + } + } + + if(isdefined(level.fightdist)) + { + self.pathenemyfightdist = level.fightdist; + self.pathenemylookahead = level.maxdist; + } + + if(isdefined(var_00.radius) && var_00.radius >= 0) + { + self.goalradius = var_00.radius; + } + else + { + self.goalradius = 256; + } + + self waittill("goal"); + while(isdefined(var_00.target)) + { + var_01 = getnode(var_00.target,"targetname"); + if(isdefined(var_01)) + { + var_00 = var_01; + } + else + { + break; + } + + self setgoalnode(var_00); + if(var_00.radius) + { + self.goalradius = var_00.radius; + } + else + { + self.goalradius = 256; + } + + self waittill("goal"); + } + + if(isdefined(self.script_noteworthy)) + { + if(self.script_noteworthy == "delete") + { + self kill(); + return; + } + } + + if(isdefined(var_00.target)) + { + var_02 = getent(var_00.target,"targetname"); + if(isdefined(var_02) && var_02.code_classname == "misc_mgturret" || var_02.code_classname == "misc_turret") + { + self setgoalnode(var_00); + self.goalradius = 4; + self waittill("goal"); + if(!isdefined(self.script_forcegoal)) + { + self.goalradius = level.default_goalradius; + } + + use_a_turret(var_02); + } + } + + if(isdefined(self.script_noteworthy)) + { + if(isdefined(self.script_noteworthy2)) + { + if(self.script_noteworthy2 == "furniture_push") + { + thread func_1D8F(); + } + } + + if(self.script_noteworthy == "hide") + { + thread maps\_utility::func_95D(0); + return; + } + } + + if(!isdefined(self.script_forcegoal) && !isdefined(self getgoalvolume())) + { + self.goalradius = level.default_goalradius; + } +} + +//Function Number: 142 +func_1D8F() +{ + var_00 = getent(self.target,"targetname").origin; + common_scripts\utility::play_sound_in_space("furniture_slide",var_00); + wait 0.9; + if(isdefined(level.whisper)) + { + common_scripts\utility::play_sound_in_space(common_scripts\utility::random(level.whisper),var_00); + } +} + +//Function Number: 143 +friendlychain() +{ + waittillframeend; + var_00 = getentarray(self.target,"targetname"); + if(!var_00.size) + { + var_01 = getnode(self.target,"targetname"); + for(;;) + { + self waittill("trigger"); + if(isdefined(level.lastfriendlytrigger) && level.lastfriendlytrigger == self) + { + wait 0.5; + continue; + } + + if(!objectiveisallowed()) + { + wait 0.5; + continue; + } + + level notify("new_friendly_trigger"); + level.lastfriendlytrigger = self; + var_02 = !isdefined(self.script_baseoffire) || self.script_baseoffire == 0; + setnewplayerchain(var_01,var_02); + } + } + + for(;;) + { + self waittill("trigger"); + while(level.player istouching(self)) + { + wait 0.05; + } + + if(!objectiveisallowed()) + { + wait 0.05; + continue; + } + + if(isdefined(level.lastfriendlytrigger) && level.lastfriendlytrigger == self) + { + continue; + } + + level notify("new_friendly_trigger"); + level.lastfriendlytrigger = self; + common_scripts\utility::array_thread(var_00,::func_1D99); + wait 0.5; + } +} + +//Function Number: 144 +objectiveisallowed() +{ + var_00 = 1; + if(isdefined(self.var_1D95)) + { + var_00 = 0; + for(var_01 = 0;var_01 < level.active_objective.size;var_01++) + { + if(!issubstr(self.var_1D95,level.active_objective[var_01])) + { + continue; + } + + var_00 = 1; + break; + } + + if(!var_00) + { + return 0; + } + } + + if(!isdefined(self.var_1D97)) + { + return var_00; + } + + var_02 = 0; + for(var_01 = 0;var_01 < level.inactive_objective.size;var_01++) + { + if(!issubstr(self.var_1D97,level.inactive_objective[var_01])) + { + continue; + } + + var_02++; + } + + var_03 = strtok(self.var_1D97," "); + return var_02 == var_03.size; +} + +//Function Number: 145 +func_1D99(param_00) +{ + level endon("new_friendly_trigger"); + self waittill("trigger"); + param_00 = getnode(self.target,"targetname"); + var_01 = !isdefined(self.script_baseoffire) || self.script_baseoffire == 0; + setnewplayerchain(param_00,var_01); +} + +//Function Number: 146 +func_1D9A() +{ + self endon("death"); + var_00 = self.script_deathchain; + while(self.count) + { + self waittill("spawned",var_01); + var_01 thread deathchainainotify(var_00); + } +} + +//Function Number: 147 +deathchainainotify(param_00) +{ + level.deathspawner[param_00]++; + self waittill("death"); + level.deathspawner[param_00]--; + level notify("spawner_expired" + param_00); +} + +//Function Number: 148 +deathchainspawnerlogic() +{ + var_00 = self.script_deathchain; + level.deathspawner[var_00]++; + var_01 = self.origin; + func_1D9A(); + level notify("spawner dot" + var_01); + level.deathspawner[var_00]--; + level notify("spawner_expired" + var_00); +} + +//Function Number: 149 +friendlychain_ondeath() +{ + var_00 = getentarray("friendly_chain_on_death","targetname"); + var_01 = getspawnerarray(); + level.deathspawner = []; + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + if(!isdefined(var_01[var_02].script_deathchain)) + { + continue; + } + + var_03 = var_01[var_02].script_deathchain; + if(!isdefined(level.deathspawner[var_03])) + { + level.deathspawner[var_03] = 0; + } + + var_01[var_02] thread deathchainspawnerlogic(); + } + + for(var_02 = 0;var_02 < var_00.size;var_02++) + { + if(!isdefined(var_00[var_02].script_deathchain)) + { + return; + } + + var_00[var_02] thread friendlychain_ondeaththink(); + } +} + +//Function Number: 150 +friendlychain_ondeaththink() +{ + while(level.deathspawner[self.script_deathchain] > 0) + { + level waittill("spawner_expired" + self.script_deathchain); + } + + level endon("start_chain"); + var_00 = getnode(self.target,"targetname"); + for(;;) + { + self waittill("trigger"); + setnewplayerchain(var_00,1); + iprintlnbold("Area secured, move up!"); + wait 5; + } +} + +//Function Number: 151 +setnewplayerchain(param_00,param_01) +{ + level.player maps\_utility::set_friendly_chain_wrapper(param_00); + level notify("new_escort_trigger"); + level notify("new_escort_debug"); + level notify("start_chain",param_01); +} + +//Function Number: 152 +func_1A37() +{ + level.friendlyspawnorg = []; + level.friendlyspawntrigger = []; + common_scripts\utility::array_thread(getentarray("friendlychain","targetname"),::friendlychain); +} + +//Function Number: 153 +func_1DA2() +{ + var_00 = []; + var_01 = []; + for(var_02 = 0;var_02 < level.friendlyspawnorg.size;var_02++) + { + var_00[var_00.size] = level.friendlyspawnorg[var_02]; + var_01[var_01.size] = level.friendlyspawntrigger[var_02]; + } + + level.friendlyspawnorg = var_00; + level.friendlyspawntrigger = var_01; + if(activefriendlyspawn()) + { + return; + } + + common_scripts\utility::flag_clear("spawning_friendlies"); +} + +//Function Number: 154 +getfriendlyspawnstart() +{ + return level.friendlyspawnorg[level.friendlyspawnorg.size - 1]; +} + +//Function Number: 155 +activefriendlyspawn() +{ + return level.friendlyspawnorg.size > 0; +} + +//Function Number: 156 +getfriendlyspawntrigger() +{ + return level.friendlyspawntrigger[level.friendlyspawntrigger.size - 1]; +} + +//Function Number: 157 +func_1DA6(param_00,param_01) +{ + level.friendlyspawnorg[level.friendlyspawnorg.size] = param_00.origin; + level.friendlyspawntrigger[level.friendlyspawntrigger.size] = param_01; + common_scripts\utility::flag_set("spawning_friendlies"); +} + +//Function Number: 158 +func_1DA7() +{ + self endon("death"); + self endon("leaveSquad"); + wait 0.5; + self setgoalentity(level.player); +} + +//Function Number: 159 +func_1DA8(param_00) +{ + self notify("stopTrigger"); + self endon("stopTrigger"); + self waittill("trigger"); + if(getfriendlyspawntrigger() != param_00) + { + return; + } + + func_1DA2(); +} + +//Function Number: 160 +friendlyspawnwave_triggerthink(param_00) +{ + var_01 = getent(self.target,"targetname"); + for(;;) + { + self waittill("trigger"); + param_00 notify("friendly_wave_start",var_01); + if(!isdefined(var_01.target)) + { + continue; + } + } +} + +//Function Number: 161 +goalvolumes() +{ + var_00 = getentarray("info_volume","classname"); + level.deathchain_goalvolume = []; + level.goalvolumes = []; + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + var_02 = var_00[var_01]; + if(isdefined(var_02.script_deathchain)) + { + level.deathchain_goalvolume[var_02.script_deathchain] = var_02; + } + + if(isdefined(var_02.script_goalvolume)) + { + level.goalvolumes[var_02.script_goalvolume] = var_02; + } + } +} + +//Function Number: 162 +debugprint(param_00,param_01,param_02) +{ + if(1) + { + return; + } + + var_03 = self getorigin(); + var_04 = 40 * sin(var_03[0] + var_03[1]) - 40; + var_03 = (var_03[0],var_03[1],var_03[2] + var_04); + level endon(param_01); + self endon("new_color"); + if(!isdefined(param_02)) + { + param_02 = (0,0.8,0.6); + } + + var_05 = 0; + for(;;) + { + var_05 = var_05 + 12; + var_06 = sin(var_05) * 0.4; + if(var_06 < 0) + { + var_06 = var_06 * -1; + } + + var_06 = var_06 + 1; + wait 0.05; + } +} + +//Function Number: 163 +aigroup_create(param_00) +{ + level.var_1C80[param_00] = spawnstruct(); + level.var_1C80[param_00].aicount = 0; + level.var_1C80[param_00].var_1DAE = 0; + level.var_1C80[param_00].ai = []; + level.var_1C80[param_00].spawners = []; +} + +//Function Number: 164 +aigroup_spawnerthink(param_00) +{ + self endon("death"); + self.decremented = 0; + param_00.var_1DAE++; + thread func_1DB2(param_00); + thread func_1DB3(param_00); + while(self.count) + { + self waittill("spawned",var_01); + if(maps\_utility::func_F77(var_01)) + { + continue; + } + + var_01 thread aigroup_soldierthink(param_00); + } + + waittillframeend; + if(self.decremented) + { + return; + } + + self.decremented = 1; + param_00.var_1DAE--; +} + +//Function Number: 165 +func_1DB2(param_00) +{ + self waittill("death"); + if(self.decremented) + { + return; + } + + param_00.var_1DAE--; +} + +//Function Number: 166 +func_1DB3(param_00) +{ + self endon("death"); + self waittill("emptied spawner"); + waittillframeend; + if(self.decremented) + { + return; + } + + self.decremented = 1; + param_00.var_1DAE--; +} + +//Function Number: 167 +aigroup_soldierthink(param_00) +{ + param_00.aicount++; + param_00.ai[param_00.ai.size] = self; + if(isdefined(self.script_deathflag_longdeath)) + { + waittilldeathorpaindeath(); + } + else + { + self waittill("death"); + } + + param_00.aicount--; +} + +//Function Number: 168 +camper_trigger_think(param_00) +{ + var_01 = strtok(param_00.script_linkto," "); + var_02 = []; + var_03 = []; + for(var_04 = 0;var_04 < var_01.size;var_04++) + { + var_05 = var_01[var_04]; + var_06 = getent(var_05,"script_linkname"); + if(isdefined(var_06)) + { + var_02 = common_scripts\utility::add_to_array(var_02,var_06); + continue; + } + + var_07 = getnode(var_05,"script_linkname"); + if(!isdefined(var_07)) + { + continue; + } + + var_03 = common_scripts\utility::add_to_array(var_03,var_07); + } + + param_00 waittill("trigger"); + var_03 = maps\_utility::array_randomize(var_03); + for(var_04 = 0;var_04 < var_03.size;var_04++) + { + var_03[var_04].claimed = 0; + } + + var_08 = 0; + for(var_04 = 0;var_04 < var_02.size;var_04++) + { + var_09 = var_02[var_04]; + if(!isdefined(var_09)) + { + continue; + } + + if(isdefined(var_09.script_spawn_here)) + { + continue; + } + + while(isdefined(var_03[var_08].script_noteworthy) && var_03[var_08].script_noteworthy == "dont_spawn") + { + var_08++; + } + + var_09.origin = var_03[var_08].origin; + var_09.angles = var_03[var_08].angles; + var_09 maps\_utility::add_spawn_function(::claim_a_node,var_03[var_08]); + var_08++; + } + + common_scripts\utility::array_thread(var_02,::maps\_utility::add_spawn_function,::camper_guy); + common_scripts\utility::array_thread(var_02,::maps\_utility::add_spawn_function,::move_when_enemy_hides,var_03); + common_scripts\utility::array_thread(var_02,::maps\_utility::spawn_ai); +} + +//Function Number: 169 +camper_guy() +{ + self.goalradius = 8; + self.fixednode = 1; +} + +//Function Number: 170 +move_when_enemy_hides(param_00) +{ + self endon("death"); + var_01 = 0; + for(;;) + { + if(!isalive(self.enemy)) + { + self waittill("enemy"); + var_01 = 0; + continue; + } + + if(isplayer(self.enemy)) + { + if(self.enemy maps\_utility::ent_flag("player_has_red_flashing_overlay") || common_scripts\utility::flag("player_flashed")) + { + self.fixednode = 0; + for(;;) + { + self.goalradius = 180; + self setgoalpos(level.player.origin); + wait 1; + } + + return; + } + } + + if(var_01) + { + if(self cansee(self.enemy)) + { + wait 0.05; + continue; + } + + var_01 = 0; + } + else + { + if(self cansee(self.enemy)) + { + var_01 = 1; + } + + wait 0.05; + continue; + } + + if(randomint(3) > 0) + { + var_02 = find_unclaimed_node(param_00); + if(isdefined(var_02)) + { + claim_a_node(var_02,self.claimed_node); + self waittill("goal"); + } + } + } +} + +//Function Number: 171 +claim_a_node(param_00,param_01) +{ + self setgoalnode(param_00); + self.claimed_node = param_00; + param_00.claimed = 1; + if(isdefined(param_01)) + { + param_01.claimed = 0; + } +} + +//Function Number: 172 +find_unclaimed_node(param_00) +{ + for(var_01 = 0;var_01 < param_00.size;var_01++) + { + if(param_00[var_01].claimed) + { + continue; + } + else + { + return param_00[var_01]; + } + } + + return undefined; +} + +//Function Number: 173 +flood_trigger_think(param_00) +{ + var_01 = getentarray(param_00.target,"targetname"); + common_scripts\utility::array_thread(var_01,::flood_spawner_init); + param_00 waittill("trigger"); + var_01 = getentarray(param_00.target,"targetname"); + common_scripts\utility::array_thread(var_01,::func_1DBF,param_00); +} + +//Function Number: 174 +flood_spawner_init(param_00) +{ +} + +//Function Number: 175 +trigger_requires_player(param_00) +{ + if(!isdefined(param_00)) + { + return 0; + } + + return isdefined(param_00.var_1D2A); +} + +//Function Number: 176 +two_stage_spawner_think(param_00) +{ + var_01 = getent(param_00.target,"targetname"); + waittillframeend; + var_02 = getentarray(var_01.target,"targetname"); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + var_02[var_03].script_moveoverride = 1; + var_02[var_03] maps\_utility::add_spawn_function(::func_1DBE,var_01); + } + + param_00 waittill("trigger"); + var_02 = getentarray(var_01.target,"targetname"); + common_scripts\utility::array_thread(var_02,::maps\_utility::spawn_ai); +} + +//Function Number: 177 +func_1DBE(param_00) +{ + param_00 endon("death"); + self endon("death"); + self.goalradius = 8; + param_00 waittill("trigger"); + thread func_1D26(); +} + +//Function Number: 178 +func_1DBF(param_00) +{ + self endon("death"); + self notify("stop current floodspawner"); + self endon("stop current floodspawner"); + if(func_1DC2()) + { + pyramid_spawn(param_00); + return; + } + + var_01 = trigger_requires_player(param_00); + maps\_utility::script_delay(); + while(self.count > 0) + { + while(var_01 && !level.player istouching(param_00)) + { + wait 0.5; + } + + var_02 = isdefined(self.var_1CB0) && common_scripts\utility::flag("_stealth_enabled") && !common_scripts\utility::flag("_stealth_spotted"); + if(isdefined(self.script_forcespawn)) + { + var_03 = self stalingradspawn(var_02); + } + else + { + var_03 = self dospawn(var_02); + } + + if(maps\_utility::func_F77(var_03)) + { + wait 2; + continue; + } + + if(isdefined(self.script_combatbehavior)) + { + if(self.script_combatbehavior == "heat") + { + var_03 maps\_utility::enable_heat_behavior(); + } + + if(self.script_combatbehavior == "cqb") + { + var_03 maps\_utility::enable_cqbwalk(); + } + } + + var_03 thread reincrement_count_if_deleted(self); + var_03 thread expand_goalradius(param_00); + var_03 waittill("death",var_04); + if(!player_saw_kill(var_03,var_04)) + { + self.count++; + } + else if(isdefined(level.var_1DC0)) + { + if(isdefined(level.ac130gunner) && var_04 == level.ac130gunner) + { + if(randomint(2) == 0) + { + self.count++; + } + } + } + + if(!isdefined(var_03)) + { + continue; + } + + if(!maps\_utility::func_1CB5()) + { + wait randomfloatrange(5,9); + } + } +} + +//Function Number: 179 +player_saw_kill(param_00,param_01) +{ + if(isdefined(self.script_force_count)) + { + if(self.script_force_count) + { + return 1; + } + } + + if(!isdefined(param_00)) + { + return 0; + } + + if(isalive(param_01)) + { + if(isplayer(param_01)) + { + return 1; + } + + if(distance(param_01.origin,level.player.origin) < 200) + { + return 1; + } + } + else if(isdefined(param_01)) + { + if(param_01.classname == "worldspawn") + { + return 0; + } + + if(distance(param_01.origin,level.player.origin) < 200) + { + return 1; + } + } + + if(distance(param_00.origin,level.player.origin) < 200) + { + return 1; + } + + return bullettracepassed(level.player geteye(),param_00 geteye(),0,undefined); +} + +//Function Number: 180 +func_1DC2() +{ + if(!isdefined(self.target)) + { + return 0; + } + + var_00 = getentarray(self.target,"targetname"); + if(!var_00.size) + { + return 0; + } + + return issubstr(var_00[0].classname,"actor"); +} + +//Function Number: 181 +pyramid_death_report(param_00) +{ + param_00.spawn waittill("death"); + self notify("death_report"); +} + +//Function Number: 182 +pyramid_spawn(param_00) +{ + self endon("death"); + var_01 = trigger_requires_player(param_00); + maps\_utility::script_delay(); + if(var_01) + { + while(!level.player istouching(param_00)) + { + wait 0.5; + } + } + + var_02 = getentarray(self.target,"targetname"); + self.spawners = 0; + common_scripts\utility::array_thread(var_02,::pyramid_spawner_reports_death,self); + var_04 = randomint(var_02.size); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + if(self.count <= 0) + { + return; + } + + var_04++; + if(var_04 >= var_02.size) + { + var_04 = 0; + } + + var_05 = var_02[var_04]; + var_05 maps\_utility::set_count(1); + var_06 = var_05 maps\_utility::spawn_ai(); + if(maps\_utility::func_F77(var_06)) + { + wait 2; + continue; + } + + self.count--; + var_05.spawn = var_06; + var_06 thread reincrement_count_if_deleted(self); + var_06 thread expand_goalradius(param_00); + thread pyramid_death_report(var_05); + } + + var_07 = 0.01; + while(self.count > 0) + { + self waittill("death_report"); + maps\_utility::func_1CB5(); + wait var_07; + var_07 = var_07 + 2.5; + var_04 = randomint(var_02.size); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + var_02 = common_scripts\utility::array_removeundefined(var_02); + if(!var_02.size) + { + if(isdefined(self)) + { + self delete(); + } + + return; + } + + var_04++; + if(var_04 >= var_02.size) + { + var_04 = 0; + } + + var_05 = var_02[var_04]; + if(isalive(var_05.spawn)) + { + continue; + } + + if(isdefined(var_05.target)) + { + self.target = var_05.target; + } + else + { + self.target = undefined; + } + + var_06 = maps\_utility::spawn_ai(); + if(maps\_utility::func_F77(var_06)) + { + wait 2; + continue; + } + + var_06 thread reincrement_count_if_deleted(self); + var_06 thread expand_goalradius(param_00); + var_05.spawn = var_06; + thread pyramid_death_report(var_05); + if(self.count <= 0) + { + return; + } + } + } +} + +//Function Number: 183 +pyramid_spawner_reports_death(param_00) +{ + param_00 endon("death"); + param_00.spawners++; + self waittill("death"); + param_00.spawners--; + if(!param_00.spawners) + { + param_00 delete(); + } +} + +//Function Number: 184 +expand_goalradius(param_00) +{ + if(isdefined(self.script_forcegoal)) + { + return; + } + + var_01 = level.default_goalradius; + if(isdefined(param_00)) + { + if(isdefined(param_00.script_radius)) + { + if(param_00.script_radius == -1) + { + return; + } + + var_01 = param_00.script_radius; + } + } + + if(isdefined(self.script_forcegoal)) + { + return; + } + + self endon("death"); + self waittill("goal"); + self.goalradius = var_01; +} + +//Function Number: 185 +drop_health_timeout_thread() +{ + self endon("death"); + wait 95; + self notify("timeout"); +} + +//Function Number: 186 +func_1DC9() +{ + self endon("timeout"); + thread drop_health_timeout_thread(); + self waittill("trigger"); + maps\_utility::func_1DCA(1); +} + +//Function Number: 187 +traceshow(param_00) +{ + wait 0.05; +} + +//Function Number: 188 +show_bad_path() +{ +} + +//Function Number: 189 +random_spawn(param_00) +{ + param_00 waittill("trigger"); + var_01 = getentarray(param_00.target,"targetname"); + if(!var_01.size) + { + return; + } + + var_02 = common_scripts\utility::random(var_01); + var_01 = []; + var_01[var_01.size] = var_02; + if(isdefined(var_02.script_linkto)) + { + var_03 = strtok(var_02.script_linkto," "); + for(var_04 = 0;var_04 < var_03.size;var_04++) + { + var_01[var_01.size] = getent(var_03[var_04],"script_linkname"); + } + } + + waittillframeend; + common_scripts\utility::array_thread(var_01,::maps\_utility::add_spawn_function,::func_1DCD); + common_scripts\utility::array_thread(var_01,::maps\_utility::spawn_ai); +} + +//Function Number: 190 +func_1DCD() +{ + if(isdefined(self.script_forcegoal)) + { + return; + } + + self endon("death"); + self waittill("reached_path_end"); + if(!isdefined(self getgoalvolume())) + { + self.goalradius = level.default_goalradius; + } +} + +//Function Number: 191 +objective_event_init(param_00) +{ + var_01 = param_00 maps\_utility::func_F89(); + common_scripts\utility::flag_init(var_01); + while(level.deathspawner[param_00.script_deathchain] > 0) + { + level waittill("spawner_expired" + param_00.script_deathchain); + } + + common_scripts\utility::flag_set(var_01); +} + +//Function Number: 192 +func_1DCE() +{ + self endon("death"); + waittillframeend; + self.is_the_player = isplayer(self); + self.eq_table = []; + self.eq_touching = []; + for(var_00 = 0;var_00 < level.var_1DD0;var_00++) + { + self.eq_table[var_00] = 0; + } +} + +//Function Number: 193 +ai_array() +{ + level.ai_array[level.unique_id] = self; + self waittill("death"); + waittillframeend; + level.ai_array[level.unique_id] = undefined; +} + +//Function Number: 194 +func_16E7(param_00) +{ + var_01 = param_00 spawndrone(); + var_01 useanimtree(#animtree); + if(var_01.weapon != "one") + { + var_02 = getweaponmodel(var_01.weapon); + var_01 attach(var_02,"tag_weapon_right"); + var_03 = getweaponhidetags(var_01.weapon); + for(var_04 = 0;var_04 < var_03.size;var_04++) + { + var_01 hidepart(var_03[var_04],var_02); + } + } + + var_01.spawner = param_00; + var_01.drone_delete_on_unload = isdefined(param_00.script_noteworthy) && param_00.script_noteworthy == "drone_delete_on_unload"; + param_00 notify("drone_spawned",var_01); + return var_01; +} + +//Function Number: 195 +spawner_makerealai(param_00) +{ + if(!isdefined(param_00.spawner)) + { + } + + var_01 = param_00.spawner.origin; + var_02 = param_00.spawner.angles; + param_00.spawner.origin = param_00.origin; + param_00.spawner.angles = param_00.angles; + var_03 = param_00.spawner stalingradspawn(); + var_04 = maps\_utility::func_F77(var_03); + if(var_04) + { + } + + var_03.vehicle_idling = param_00.vehicle_idling; + var_03.var_1DD4 = param_00.var_1DD4; + var_03.var_1DD5 = param_00.var_1DD5; + var_03.var_1DD6 = param_00.var_1DD6; + param_00.spawner.origin = var_01; + param_00.spawner.angles = var_02; + param_00 delete(); + return var_03; +} + +//Function Number: 196 +func_1DD7() +{ + self waittill("death",var_00,var_01,var_02); + if(!isdefined(self)) + { + return; + } + + if(!self isbadguy()) + { + return; + } + + if(!isdefined(var_00)) + { + return; + } + + if(!isplayer(var_00)) + { + return; + } + + thread achieve_strike(var_00,var_01,var_02); + thread achieve_jack_the_ripper(var_00,var_01,var_02); + thread func_80D7(var_00,var_01,var_02); + if(isdefined(self.var_1CD9)) + { + var_01 = self.var_1CD9; + } +} + +//Function Number: 197 +achieve_strike(param_00,param_01,param_02) +{ + if(param_01 != "MOD_GRENADE_SPLASH") + { + param_00.achieve_strike = undefined; + return; + } + + if(!isdefined(param_02)) + { + param_00.achieve_strike = undefined; + return; + } + + if(weaponinventorytype(param_02) != "offhand") + { + param_00.achieve_strike = undefined; + return; + } + + if(!isdefined(param_00.achieve_strike)) + { + param_00.achieve_strike = 1; + } + else + { + param_00.achieve_strike++; + } + + if(param_00.achieve_strike == 5) + { + param_00 maps\_utility::player_giveachievement_wrapper("STRIKE"); + } + + waittillframeend; + param_00.achieve_strike = undefined; +} + +//Function Number: 198 +achieve_jack_the_ripper(param_00,param_01,param_02) +{ + if(param_01 == "MOD_MELEE") + { + if(!isdefined(param_00.achieve_jack_the_ripper)) + { + param_00.achieve_jack_the_ripper = 1; + } + else + { + param_00.achieve_jack_the_ripper++; + } + + if(param_00.achieve_jack_the_ripper == 5) + { + param_00 maps\_utility::player_giveachievement_wrapper("JACK_THE_RIPPER"); + return; + } + + return; + } + + param_00.achieve_jack_the_ripper = undefined; +} + +//Function Number: 199 +func_80D7(param_00,param_01,param_02) +{ + if(isdefined(self.juggernaut) && self.juggernaut && param_01 == "MOD_MELEE" && !isdefined(param_02) || !issubstr(param_02,"riotshield") && !issubstr(param_02,"riot_shield")) + { + param_00 maps\_utility::player_giveachievement_wrapper("SERRATED_EDGE"); + } +} + +//Function Number: 200 +func_1DD8(param_00) +{ +} + +//Function Number: 201 +add_random_killspawner_to_spawngroup() +{ + var_00 = self.script_random_killspawner; + var_01 = self.script_randomspawn; + if(!isdefined(level.killspawn_groups[var_00])) + { + level.killspawn_groups[var_00] = []; + } + + if(!isdefined(level.killspawn_groups[var_00][var_01])) + { + level.killspawn_groups[var_00][var_01] = []; + } + + level.killspawn_groups[var_00][var_01][self.var_1DEB] = self; +} + +//Function Number: 202 +func_1DEC() +{ + var_00 = self.var_1B33; + var_01 = self.var_1DED; + if(!isdefined(level.spawn_groups[var_00])) + { + level.spawn_groups[var_00] = []; + } + + if(!isdefined(level.spawn_groups[var_00][var_01])) + { + level.spawn_groups[var_00][var_01] = []; + } + + level.spawn_groups[var_00][var_01][self.var_1DEB] = self; +} + +//Function Number: 203 +func_1DEE() +{ + self endon("death"); + self.disableexits = 1; + wait 3; + self.disableexits = 0; +} + +//Function Number: 204 +deathtime() +{ + self endon("death"); + wait self.var_1CF5; + wait randomfloat(10); + self kill(); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_specialops.gsc b/MW3/Xbox/SP/maps/_specialops.gsc new file mode 100644 index 0000000..78d1fc7 --- /dev/null +++ b/MW3/Xbox/SP/maps/_specialops.gsc @@ -0,0 +1,2585 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_specialops.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 132 + * Decompile Time: 2136 ms + * Timestamp: 10/27/2023 2:33:15 AM +*******************************************************************/ + +//Function Number: 1 +specialops_init() +{ + foreach(var_01 in level.players) + { + var_01 thread roundstat_init(); + } + + if(maps\_utility::func_E89()) + { + maps\_gameskill::setglobaldifficulty(); + foreach(var_01 in level.players) + { + var_01 maps\_gameskill::func_139A(); + } + } + + if(!isdefined(level.so_override)) + { + level.so_override = []; + } + + if(!isdefined(level.friendlyfire_warnings)) + { + level.friendlyfire_warnings = 1; + } + + level.no_friendly_fire_penalty = 1; + precacheminimapsentrycodeassets(); + precachemenu("sp_eog_summary"); + precachemenu("coop_eog_summary"); + precachemenu("coop_eog_summary2"); + precachemenu("surHUD_display"); + precacheshellshock("so_finished"); + precacheshader("hud_show_timer"); + precacheshader("specops_ui_equipmentstore"); + precacheshader("specops_ui_weaponstore"); + precacheshader("specops_ui_airsupport"); + so_precache_strings(); + foreach(var_01 in level.players) + { + var_01.so_hud_show_time = gettime() + so_standard_wait() * 1000; + var_01 maps\_utility::ent_flag_init("so_hud_can_toggle"); + } + + level.challenge_time_nudge = 30; + level.challenge_time_hurry = 10; + level.func_destructible_crush_player = ::func_144D; + setsaveddvar("g_friendlyfireDamageScale",2); + setsaveddvar("turretSentryRestrictUsageToOwner",0); + if(isdefined(level.so_compass_zoom)) + { + var_07 = 0; + switch(level.so_compass_zoom) + { + case "close": + var_07 = 1500; + break; + + case "far": + var_07 = 6000; + break; + + default: + var_07 = 3000; + break; + } + + if(!issplitscreen()) + { + var_07 = var_07 + var_07 * 0.1; + } + + setsaveddvar("compassmaxrange",var_07); + } + + common_scripts\utility::flag_init("challenge_timer_passed"); + common_scripts\utility::flag_init("challenge_timer_expired"); + common_scripts\utility::flag_init("special_op_succeeded"); + common_scripts\utility::flag_init("special_op_failed"); + common_scripts\utility::flag_init("special_op_terminated"); + common_scripts\utility::flag_init("special_op_p1ready"); + common_scripts\utility::flag_init("special_op_p2ready"); + common_scripts\utility::flag_init("special_op_no_unlink"); + common_scripts\utility::flag_init("special_op_final_xp_given"); + thread maps\_specialops_code::disable_saving(); + thread maps\_specialops_code::func_13A1(); + maps\_specialops_code::specialops_dialog_init(); + if(maps\_utility::func_E89()) + { + maps\_specialops_battlechatter::init(); + } + + if(!isdefined(level.var_80E5)) + { + level.var_80E5 = []; + } + + if(!maps\_utility::func_E89()) + { + maps\_utility::set_custom_gameskill_func(::maps\_gameskill::solo_player_in_special_ops); + } + else if(maps\_utility::is_survival()) + { + maps\_utility::set_custom_gameskill_func(::maps\_gameskill::coop_player_in_special_ops_survival); + } + + common_scripts\utility::array_thread(getentarray("trigger_multiple_SO_escapewarning","classname"),::maps\_specialops_code::enable_escape_warning_auto); + common_scripts\utility::array_thread(getentarray("trigger_multiple_SO_escapefailure","classname"),::maps\_specialops_code::enable_escape_failure_auto); + level.so_deadquotes_chance = 0.5; + setdvar("ui_deadquote",""); + thread maps\_specialops_code::so_special_failure_hint(); + setdvar("ui_skip_level_select","1"); + setdvar("ui_opensummary",0); + var_08 = "LB_" + level.script; + var_09 = ""; + if(maps\_utility::func_E89()) + { + var_08 = var_08 + "_TEAM"; + } + + if(maps\_utility::is_survival()) + { + var_09 = " LB_EXT_" + level.script; + if(maps\_utility::func_E89()) + { + var_09 = var_09 + "_TEAM"; + } + } + + precacheleaderboards(var_08 + var_09); + maps\_specialops_code::pick_starting_location_so(); + level thread func_13B0(); + maps\_audio::aud_set_spec_ops(); + maps\_specialops_code::register_level_unlock("so_mw3_mission_2","mission"); + maps\_specialops_code::register_level_unlock("so_mw3_mission_3","mission"); + maps\_specialops_code::register_level_unlock("so_mw3_mission_4","mission"); + maps\_specialops_code::register_survival_unlock(); + maps\_rank::init(); + maps\_missions::init(); + maps\_utility::enable_damagefeedback(); + maps\_utility::add_global_spawn_function("axis",::maps\_specialops_code::func_8093); + thread maps\_specialops_code::setup_xp(); + thread unlock_hint(); + thread func_80E7(); +} + +//Function Number: 2 +roundstat_init() +{ + wait 0.05; + self setplayerdata("round","kills",0); + self setplayerdata("round","killStreak",0); + self setplayerdata("round","deaths",0); + self setplayerdata("round","difficulty",0); + self setplayerdata("round","score",0); + self setplayerdata("round","timePlayed",0); + self setplayerdata("round","wave",0); + self setplayerdata("round","xuidTeammate","0"); + self setplayerdata("round","totalXp",0); + self setplayerdata("round","scoreXp",0); + self setplayerdata("round","challengeXp",0); +} + +//Function Number: 3 +func_13B0() +{ + setsaveddvar("hud_fade_ammodisplay",30); + setsaveddvar("hud_fade_stance",30); + setsaveddvar("hud_fade_offhand",30); + setsaveddvar("hud_fade_compass",0); +} + +//Function Number: 4 +so_precache_strings() +{ + precachestring(&"SPECIAL_OPS_TIME_NULL"); + precachestring(&"SPECIAL_OPS_TIME"); + precachestring(&"SPECIAL_OPS_WAITING_P1"); + precachestring(&"SPECIAL_OPS_WAITING_P2"); + precachestring(&"SPECIAL_OPS_REVIVE_NAG_HINT"); + precachestring(&"SPECIAL_OPS_CHALLENGE_SUCCESS"); + precachestring(&"SPECIAL_OPS_CHALLENGE_FAILURE"); + precachestring(&"SPECIAL_OPS_FAILURE_HINT_TIME"); + precachestring(&"SPECIAL_OPS_ESCAPE_WARNING"); + precachestring(&"SPECIAL_OPS_ESCAPE_SPLASH"); + precachestring(&"SPECIAL_OPS_WAITING_OTHER_PLAYER"); + precachestring(&"SPECIAL_OPS_STARTING_IN"); + precachestring(&"SPECIAL_OPS_UI_TIME"); + precachestring(&"SPECIAL_OPS_UI_KILLS"); + precachestring(&"SPECIAL_OPS_UI_DIFFICULTY"); + precachestring(&"SPECIAL_OPS_UI_PLAY_AGAIN"); + precachestring(&"SPECIAL_OPS_DASHDASH"); + precachestring(&"SPECIAL_OPS_HOSTILES"); + precachestring(&"SPECIAL_OPS_INTERMISSION_WAVENUM"); + precachestring(&"SPECIAL_OPS_INTERMISSION_WAVEFINAL"); + precachestring(&"SPECIAL_OPS_WAVENUM"); + precachestring(&"SPECIAL_OPS_WAVEFINAL"); + precachestring(&"SPECIAL_OPS_PRESS_TO_CANCEL"); + precachestring(&"SPECIAL_OPS_PLAYER_IS_READY"); + precachestring(&"SPECIAL_OPS_PRESS_TO_START"); + precachestring(&"SPECIAL_OPS_PLAYER_IS_NOT_READY"); + precachestring(&"SPECIAL_OPS_EMPTY"); +} + +//Function Number: 5 +so_standard_wait() +{ + return 4; +} + +//Function Number: 6 +func_13B3() +{ + var_00 = getentarray(); + if(!isdefined(var_00)) + { + return; + } + + var_01 = maps\_utility::is_specialop(); + foreach(var_03 in var_00) + { + if(var_03 maps\_specialops_code::specialops_remove_entity_check(var_01)) + { + var_03 delete(); + } + } + + maps\_specialops_code::so_special_failure_hint_reset_dvars(); +} + +//Function Number: 7 +enable_triggered_start(param_00) +{ + level endon("challenge_timer_expired"); + var_01 = getent(param_00,"script_noteworthy"); + var_01 waittill("trigger"); + common_scripts\utility::flag_set(param_00); +} + +//Function Number: 8 +enable_triggered_complete(param_00,param_01,param_02) +{ + level endon("challenge_timer_expired"); + common_scripts\utility::flag_set(param_00); + if(!isdefined(param_02)) + { + param_02 = "freeze"; + } + + var_03 = getent(param_00,"script_noteworthy"); + thread maps\_specialops_code::disable_mission_end_trigger(var_03); + switch(param_02) + { + case "all": + maps\_specialops_code::wait_all_players_are_touching(var_03); + break; + + case "any": + maps\_specialops_code::wait_all_players_have_touched(var_03,param_02); + break; + + case "freeze": + maps\_specialops_code::wait_all_players_have_touched(var_03,param_02); + break; + } + + level.challenge_end_time = gettime(); + common_scripts\utility::flag_set(param_01); +} + +//Function Number: 9 +fade_challenge_in(param_00,param_01) +{ + if(!maps\_utility::is_survival()) + { + foreach(var_03 in level.players) + { + var_03 thread enable_kill_counter(); + } + } + + if(!isdefined(param_00)) + { + param_00 = 0.5; + } + + var_05 = 1; + if(isdefined(level.so_waiting_for_players_alpha)) + { + var_05 = level.so_waiting_for_players_alpha; + } + + var_06 = maps\_hud_util::func_5BF("black",var_05); + wait param_00; + level notify("challenge_fading_in"); + var_07 = 1; + var_06 thread maps\_hud_util::fade_over_time(0,var_07); + level thread maps\_utility::func_FEC("challenge_fadein_complete",var_07); + if(common_scripts\utility::flag_exist("slamzoom_finished")) + { + common_scripts\utility::flag_wait("slamzoom_finished"); + } + + wait 0.75; + if(!isdefined(param_01) || param_01) + { + thread func_143A(); + } +} + +//Function Number: 10 +fade_challenge_out(param_00,param_01) +{ + if(!isdefined(param_01)) + { + param_01 = 0; + } + + if(isdefined(param_00)) + { + common_scripts\utility::flag_wait(param_00); + } + + var_02 = undefined; + if(maps\_utility::is_survival()) + { + var_02 = 1; + if(!param_01) + { + param_01 = level.var_13BE < level.congrat_min_wave; + } + } + + if(!param_01) + { + thread so_dialog_mission_success(var_02); + } + + maps\_endmission::so_eog_summary_calculate(1); + maps\_specialops_code::specialops_mission_over_setup(1); + maps\_specialops_code::func_8094(); + if(maps\_utility::is_survival()) + { + level notify("so_generate_deathquote"); + } + + maps\_endmission::so_eog_summary_display(); +} + +//Function Number: 11 +override_summary_time(param_00) +{ + self.var_128E["time"] = maps\_utility::round_millisec_on_sec(param_00,1,0); +} + +//Function Number: 12 +func_13C5(param_00) +{ + self.var_128E["kills"] = param_00; +} + +//Function Number: 13 +override_summary_score(param_00) +{ + self.var_128E["score"] = param_00; +} + +//Function Number: 14 +enable_countdown_timer(param_00,param_01,param_02,param_03) +{ + level endon("special_op_terminated"); + if(!isdefined(param_02)) + { + param_02 = &"SPECIAL_OPS_STARTING_IN"; + } + + var_04 = func_127E(0,func_1423(),param_02); + var_04 setpulsefx(50,param_00 * 1000,500); + var_05 = func_127E(0,func_1423()); + var_05 thread show_countdown_timer_time(param_00,param_03); + wait param_00; + level.player playsound("arcademode_zerodeaths"); + if(isdefined(param_01) && param_01) + { + level.challenge_start_time = gettime(); + } + + thread func_13C8(var_04,var_05); +} + +//Function Number: 15 +func_13C8(param_00,param_01) +{ + wait 1; + param_00 destroy(); + param_01 destroy(); +} + +//Function Number: 16 +show_countdown_timer_time(param_00,param_01) +{ + self.alignx = "left"; + self settenthstimer(param_00); + self.alpha = 0; + if(!isdefined(param_01)) + { + param_01 = 0.625; + } + + wait param_01; + param_00 = int(param_00 - param_01 * 1000); + self setpulsefx(50,param_00,500); + self.alpha = 1; +} + +//Function Number: 17 +enable_challenge_timer(param_00,param_01,param_02,param_03) +{ + if(isdefined(param_00)) + { + if(!common_scripts\utility::flag_exist(param_00)) + { + common_scripts\utility::flag_init(param_00); + } + + level.start_flag = param_00; + } + + if(isdefined(param_01)) + { + if(!common_scripts\utility::flag_exist(param_01)) + { + common_scripts\utility::flag_init(param_01); + } + + level.passed_flag = param_01; + } + + if(!isdefined(param_02)) + { + param_02 = &"SPECIAL_OPS_TIME"; + } + + if(!isdefined(level.challenge_time_beep_start)) + { + level.challenge_time_beep_start = level.challenge_time_hurry; + } + + level.so_challenge_time_beep = level.challenge_time_beep_start + 1; + foreach(var_05 in level.players) + { + var_05 thread maps\_specialops_code::challenge_timer_player_setup(param_00,param_01,param_02,param_03); + } +} + +//Function Number: 18 +enable_challenge_counter(param_00,param_01,param_02) +{ + if(!isdefined(self.hud_so_counter_messages)) + { + self.hud_so_counter_messages = []; + } + + if(!isdefined(self.hud_so_counter_values)) + { + self.hud_so_counter_values = []; + } + + thread enable_challenge_counter_think(param_00,param_01,param_02); +} + +//Function Number: 19 +enable_challenge_counter_think(param_00,param_01,param_02) +{ + level endon("special_op_terminated"); + disable_challenge_counter(param_00); + self endon(func_13D6(param_00)); + var_03 = func_1423(); + self.hud_so_counter_messages[param_00] = func_127E(param_00,var_03,param_01,self); + self.hud_so_counter_values[param_00] = func_127E(param_00,var_03,undefined,self); + self.hud_so_counter_values[param_00] settext(0); + self.hud_so_counter_values[param_00].alignx = "left"; + childthread info_hud_handle_fade(self.hud_so_counter_messages[param_00]); + childthread info_hud_handle_fade(self.hud_so_counter_values[param_00]); + if(!isdefined(level.var_8095) || !level.var_8095) + { + common_scripts\utility::flag_wait(level.start_flag); + } + + for(;;) + { + self waittill(param_02,var_04); + self.hud_so_counter_values[param_00] settext(var_04); + } +} + +//Function Number: 20 +disable_challenge_counter(param_00) +{ + param_00 = int(param_00); + self notify(func_13D6(param_00)); + if(isdefined(self.hud_so_counter_messages[param_00])) + { + self.hud_so_counter_messages[param_00] destroy(); + } + + if(isdefined(self.hud_so_counter_values[param_00])) + { + self.hud_so_counter_values[param_00] destroy(); + } +} + +//Function Number: 21 +disable_challenge_counter_all() +{ + if(isdefined(self.hud_so_counter_messages)) + { + foreach(var_02, var_01 in self.hud_so_counter_messages) + { + disable_challenge_counter(var_02); + } + + self.hud_so_counter_messages = []; + self.hud_so_counter_values = []; + } +} + +//Function Number: 22 +func_13D6(param_00) +{ + param_00 = int(param_00); + return "challenge_counter_disable" + param_00; +} + +//Function Number: 23 +enable_kill_counter() +{ + level.var_13D8 = 2; + level endon("special_op_terminated"); + self notify("enabling_kill_counter"); + self endon("enabling_kill_counter"); + thread enable_challenge_counter(level.var_13D8,&"SPECIAL_OPS_KILL_COUNT","ui_kill_count"); + thread enable_kill_counter_think(level.var_13D8); +} + +//Function Number: 24 +enable_kill_counter_think(param_00) +{ + level endon("special_op_terminated"); + self endon(func_13D6(param_00)); + for(;;) + { + level waittill("specops_player_kill",var_01,var_02); + if(self == var_01) + { + self notify("ui_kill_count",var_01.stats["kills"]); + } + } +} + +//Function Number: 25 +func_13DA() +{ + if(!isdefined(level.var_13D8)) + { + return; + } + + disable_challenge_counter(level.var_13D8); +} + +//Function Number: 26 +disable_challenge_timer() +{ + level notify("stop_challenge_timer_thread"); +} + +//Function Number: 27 +so_get_difficulty_menu_string(param_00) +{ + param_00 = common_scripts\utility::ter_op(isdefined(param_00),param_00,level.specops_reward_gameskill); + var_01 = ""; + switch(int(param_00)) + { + case 0: + var_01 = "@MENU_RECRUIT"; + break; + + case 1: + var_01 = "@MENU_REGULAR"; + break; + + case 2: + var_01 = "@MENU_HARDENED"; + break; + + case 3: + var_01 = "@MENU_VETERAN"; + break; + + default: + var_01 = "@MENU_REGULAR"; + break; + } + + return var_01; +} + +//Function Number: 28 +func_13DC() +{ + if(!isdefined(level.var_13DD)) + { + return; + } + + if(!maps\_utility::func_E89() || issplitscreen()) + { + return; + } + + level.so_waiting_for_players = 1; + level.so_waiting_for_players_alpha = 0.85; + level.player thread so_wait_for_player_ready("special_op_p1ready",2); + level.player2 thread so_wait_for_player_ready("special_op_p2ready",3.25); + var_00 = maps\_hud_util::func_5BF("black",1); + var_00 maps\_hud_util::fade_over_time(level.so_waiting_for_players_alpha,1); + while(!common_scripts\utility::flag("special_op_p1ready") || !common_scripts\utility::flag("special_op_p2ready")) + { + wait 0.05; + } + + var_01 = 1; + level.player thread so_wait_for_player_ready_cleanup(var_01); + level.player2 thread so_wait_for_player_ready_cleanup(var_01); + wait var_01; + var_00 destroy(); + level.so_waiting_for_players = undefined; +} + +//Function Number: 29 +so_wait_for_player_ready(param_00,param_01) +{ + self endon("stop_waiting_start"); + self freezecontrols(1); + self disableweapons(); + self.waiting_to_start_hud = func_127E(0,0,&"SPECIAL_OPS_PRESS_TO_START",self,1); + self.waiting_to_start_hud.alignx = "center"; + self.waiting_to_start_hud.horzalign = "center"; + self.ready_indication_hud = func_127E(param_01,0,&"SPECIAL_OPS_PLAYER_IS_NOT_READY",undefined,1); + self.ready_indication_hud.alignx = "center"; + self.ready_indication_hud.horzalign = "center"; + self.ready_indication_hud settext(self.playername); + self.ready_indication_hud set_hud_yellow(); + wait 0.05; + self setblurforplayer(6,0); + notifyoncommand(self.unique_id + "_is_ready","+gostand"); + notifyoncommand(self.unique_id + "_is_not_ready","+stance"); + for(;;) + { + self waittill(self.unique_id + "_is_ready"); + common_scripts\utility::flag_set(param_00); + self playsound("so_player_is_ready"); + self.waiting_to_start_hud.label = &"SPECIAL_OPS_PRESS_TO_CANCEL"; + self.ready_indication_hud func_141C(&"SPECIAL_OPS_PLAYER_IS_READY"); + self waittill(self.unique_id + "_is_not_ready"); + common_scripts\utility::flag_clear(param_00); + self playsound("so_player_not_ready"); + self.waiting_to_start_hud.label = &"SPECIAL_OPS_PRESS_TO_START"; + self.ready_indication_hud so_hud_pulse_warning(&"SPECIAL_OPS_PLAYER_IS_NOT_READY"); + } +} + +//Function Number: 30 +so_wait_for_player_ready_cleanup(param_00) +{ + self notify("stop_waiting_start"); + self.waiting_to_start_hud thread so_remove_hud_item(1); + wait param_00; + self.ready_indication_hud thread so_remove_hud_item(0,1); + self freezecontrols(0); + self enableweapons(); + self setblurforplayer(0,0.5); +} + +//Function Number: 31 +attacker_is_p1(param_00) +{ + if(!isdefined(param_00)) + { + return 0; + } + + return param_00 == level.player; +} + +//Function Number: 32 +attacker_is_p2(param_00) +{ + if(!maps\_utility::func_E89()) + { + return 0; + } + + if(!isdefined(param_00)) + { + return 0; + } + + return param_00 == level.player2; +} + +//Function Number: 33 +func_13E5() +{ + level endon("special_op_terminated"); + level.escape_warning_triggers = getentarray("player_trying_to_escape","script_noteworthy"); + maps\_utility::func_13E8("player_escape_warning",&"SPECIAL_OPS_EMPTY",::maps\_specialops_code::disable_escape_warning); + for(;;) + { + wait 0.05; + foreach(var_01 in level.escape_warning_triggers) + { + foreach(var_03 in level.players) + { + if(!isdefined(var_03.escape_hint_active)) + { + if(var_03 istouching(var_01)) + { + var_03.escape_hint_active = 1; + var_03 thread maps\_specialops_code::ping_escape_warning(); + var_03 maps\_utility::display_hint_timeout("player_escape_warning"); + } + + continue; + } + + if(!isdefined(var_03.ping_escape_splash)) + { + var_03 thread maps\_specialops_code::ping_escape_warning(); + } + } + } + } +} + +//Function Number: 34 +enable_escape_failure() +{ + level endon("special_op_terminated"); + common_scripts\utility::flag_wait("player_has_escaped"); + level.challenge_end_time = gettime(); + func_1407("@DEADQUOTE_SO_LEFT_PLAY_AREA"); + maps\_utility::func_13EE(); +} + +//Function Number: 35 +so_delete_all_by_type(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if(!isdefined(param_05)) + { + param_05 = 0; + } + + var_06 = [param_00,param_01,param_02,param_03,param_04]; + var_06 = common_scripts\utility::array_removeundefined(var_06); + var_07 = getentarray(); + foreach(var_09 in var_07) + { + if(!isdefined(var_09.code_classname)) + { + continue; + } + + var_0A = isdefined(var_09.script_specialops) && var_09.script_specialops == 1; + if(var_0A) + { + continue; + } + + var_0B = isdefined(var_09.targetname) && var_09.targetname == "intelligence_item"; + if(var_0B) + { + continue; + } + + foreach(var_0D in var_06) + { + if(var_09 [[ var_0D ]]()) + { + if(param_05) + { + var_09 notify("delete"); + } + + var_09 delete(); + } + } + } +} + +//Function Number: 36 +func_13F0() +{ + if(!isdefined(self.code_classname)) + { + return 0; + } + + return issubstr(self.code_classname,"actor_"); +} + +//Function Number: 37 +type_vehicle() +{ + if(!isdefined(self.code_classname)) + { + return 0; + } + + if(self.code_classname == "script_vehicle_collmap") + { + return 0; + } + + return issubstr(self.code_classname,"script_vehicle"); +} + +//Function Number: 38 +type_spawn_trigger() +{ + if(!isdefined(self.classname)) + { + return 0; + } + + if(self.classname == "trigger_multiple_spawn") + { + return 1; + } + + if(self.classname == "trigger_multiple_spawn_reinforcement") + { + return 1; + } + + if(self.classname == "trigger_multiple_friendly_respawn") + { + return 1; + } + + if(isdefined(self.targetname) && self.targetname == "flood_spawner") + { + return 1; + } + + if(isdefined(self.targetname) && self.targetname == "friendly_respawn_trigger") + { + return 1; + } + + if(isdefined(self.spawnflags) && self.spawnflags & 32) + { + return 1; + } + + return 0; +} + +//Function Number: 39 +type_trigger() +{ + if(!isdefined(self.code_classname)) + { + return 0; + } + + var_00 = []; + return isdefined(var_41[self.code_classname]); +} + +//Function Number: 40 +type_flag_trigger() +{ + if(!isdefined(self.classname)) + { + return 0; + } + + var_00 = []; + return isdefined(var_41[self.classname]); +} + +//Function Number: 41 +type_killspawner_trigger() +{ + if(!type_trigger()) + { + return 0; + } + + if(isdefined(self.var_13F6)) + { + return 1; + } + + return 0; +} + +//Function Number: 42 +type_goalvolume() +{ + if(!isdefined(self.classname)) + { + return 0; + } + + if(self.classname == "info_volume" && isdefined(self.script_goalvolume)) + { + return 1; + } + + return 0; +} + +//Function Number: 43 +type_infovolume() +{ + if(!isdefined(self.classname)) + { + return 0; + } + + return self.classname == "info_volume"; +} + +//Function Number: 44 +func_13FA() +{ + if(!isdefined(self.classname)) + { + return 0; + } + + return self.classname == "misc_turret"; +} + +//Function Number: 45 +type_weapon_placed() +{ + if(!isdefined(self.classname) || !isdefined(self.model)) + { + return 0; + } + + if(strtok(self.classname,"_")[0] == "weapon") + { + return 1; + } + + return 0; +} + +//Function Number: 46 +func_13FC() +{ + so_delete_all_by_type(::type_spawn_trigger); +} + +//Function Number: 47 +so_delete_all_triggers() +{ + so_delete_all_by_type(::type_trigger,::type_spawn_trigger,::type_flag_trigger,::type_killspawner_trigger); + animscripts/battlechatter::update_bcs_locations(); +} + +//Function Number: 48 +so_delete_all_vehicles() +{ + so_delete_all_by_type(::type_vehicle,undefined,undefined,undefined,undefined,1); +} + +//Function Number: 49 +func_13FF() +{ + so_delete_all_by_type(::func_13F0); +} + +//Function Number: 50 +so_make_specialops_ent(param_00,param_01,param_02) +{ + var_03 = getentarray(param_00,param_01); + so_array_make_specialops(var_03,param_02); +} + +//Function Number: 51 +so_make_bcslocations_specialops_ent() +{ + so_array_make_specialops(level.bcs_locations); +} + +//Function Number: 52 +so_array_make_specialops(param_00,param_01) +{ + if(!isdefined(param_01)) + { + param_01 = 0; + } + + level.so_traversed_list = []; + func_1404(param_00,param_01); + level.so_traversed_list = undefined; +} + +//Function Number: 53 +func_1404(param_00,param_01) +{ + foreach(var_03 in param_00) + { + if(maps\_utility::func_6E9(level.so_traversed_list,var_03)) + { + continue; + } + + level.so_traversed_list[level.so_traversed_list.size] = var_03; + var_03.script_specialops = 1; + if(param_01) + { + if(isdefined(var_03.target)) + { + var_04 = getentarray(var_03.target,"targetname"); + func_1404(var_04,param_01); + } + + if(isdefined(var_03.linkto)) + { + var_04 = var_03 common_scripts\utility::get_linked_ents(); + func_1404(var_04,param_01); + } + } + } +} + +//Function Number: 54 +so_delete_breach_ents() +{ + var_00 = getentarray("breach_solid","targetname"); + foreach(var_02 in var_00) + { + var_02 connectpaths(); + var_02 delete(); + } +} + +//Function Number: 55 +func_1407(param_00,param_01) +{ + level.var_1408 = []; + level.var_1408[0] = param_00; + level.so_deadquotes_chance = 1; + maps\_specialops_code::so_special_failure_hint_reset_dvars(param_01); +} + +//Function Number: 56 +so_force_deadquote_array(param_00,param_01) +{ + level.var_1408 = param_00; + level.so_deadquotes_chance = 1; + maps\_specialops_code::so_special_failure_hint_reset_dvars(param_01); +} + +//Function Number: 57 +so_include_deadquote_array(param_00) +{ + if(!isdefined(level.var_1408)) + { + level.var_1408 = []; + } + + level.var_1408 = maps\_utility::array_merge(level.var_1408,param_00); +} + +//Function Number: 58 +func_127E(param_00,param_01,param_02,param_03,param_04) +{ + if(isdefined(param_03)) + { + } + + if(!isdefined(param_00)) + { + param_00 = 0; + } + + if(!isdefined(param_01)) + { + param_01 = 0; + } + + param_00 = param_00 + 2; + var_05 = undefined; + if(isdefined(param_03)) + { + var_05 = newclienthudelem(param_03); + } + else + { + var_05 = newhudelem(); + } + + var_05.alignx = "right"; + var_05.aligny = "middle"; + var_05.horzalign = "right"; + var_05.vertalign = "middle"; + var_05.x = param_01; + var_05.y = -100 + 15 * param_00; + var_05.font = "hudsmall"; + var_05.foreground = 1; + var_05.hidewheninmenu = 1; + var_05.hidewhendead = 1; + var_05.sort = 2; + var_05 set_hud_white(); + if(isdefined(param_02)) + { + var_05.label = param_02; + } + + if(!isdefined(param_04) || !param_04) + { + if(isdefined(param_03)) + { + if(!param_03 maps\_specialops_code::so_hud_can_show()) + { + param_03 thread maps\_specialops_code::so_create_hud_item_delay_draw(var_05); + } + else if(!maps\_utility::ent_flag("so_hud_can_toggle")) + { + maps\_utility::func_FA4("so_hud_can_toggle"); + } + } + } + + return var_05; +} + +//Function Number: 59 +so_create_hud_item_data(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = func_127E(param_00,param_01,param_02,param_03,param_04); + var_05.alignx = "left"; + return var_05; +} + +//Function Number: 60 +so_create_hud_item_debug(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = func_127E(param_00,param_01,param_02,param_03,param_04); + var_05.alignx = "left"; + var_05.horzalign = "left"; + return var_05; +} + +//Function Number: 61 +func_1410(param_00) +{ + if(!maps\_specialops_code::func_1411()) + { + return; + } + + self notify("update_hud_pulse"); + self endon("update_hud_pulse"); + self endon("destroying"); + if(isdefined(param_00)) + { + self.label = param_00; + } + + if(isdefined(self.var_1412)) + { + level.player playsound(self.var_1412); + } + + if(isdefined(self.var_1413) && self.var_1413) + { + maps\_specialops_code::so_hud_pulse_loop(); + return; + } + + maps\_specialops_code::func_1418(self.pulse_scale_big,self.pulse_scale_normal,self.pulse_time); +} + +//Function Number: 62 +func_1419(param_00) +{ + if(!maps\_specialops_code::func_1411()) + { + return; + } + + self notify("update_hud_pulse"); + self endon("update_hud_pulse"); + self endon("destroying"); + if(isdefined(param_00)) + { + self.label = param_00; + } + + self.var_1413 = 0; + maps\_specialops_code::func_1418(self.fontscale,self.pulse_scale_normal,self.pulse_time); +} + +//Function Number: 63 +func_141A(param_00) +{ + set_hud_white(); + self.var_1413 = 0; + func_1410(param_00); +} + +//Function Number: 64 +func_141B(param_00) +{ + set_hud_green(); + self.var_1413 = 1; + func_1410(param_00); +} + +//Function Number: 65 +func_141C(param_00) +{ + set_hud_green(); + self.var_1413 = 0; + func_1410(param_00); +} + +//Function Number: 66 +so_hud_pulse_warning(param_00) +{ + set_hud_yellow(); + self.var_1413 = 0; + func_1410(param_00); +} + +//Function Number: 67 +so_hud_pulse_alarm(param_00) +{ + set_hud_red(); + self.var_1413 = 1; + func_1410(param_00); +} + +//Function Number: 68 +so_hud_pulse_failure(param_00) +{ + set_hud_red(); + self.var_1413 = 0; + func_1410(param_00); +} + +//Function Number: 69 +so_hud_pulse_disabled(param_00) +{ + set_hud_grey(); + self.var_1413 = 0; + func_1410(param_00); +} + +//Function Number: 70 +func_1421(param_00,param_01) +{ + if(!isdefined(self.pulse_bounds)) + { + func_141A(param_01); + return; + } + + foreach(var_04, var_03 in self.pulse_bounds) + { + if(param_00 <= var_03) + { + switch(var_04) + { + case "pulse_disabled": + so_hud_pulse_disabled(param_01); + break; + + case "pulse_failure": + so_hud_pulse_failure(param_01); + break; + + case "pulse_alarm": + so_hud_pulse_alarm(param_01); + break; + + case "pulse_warning": + so_hud_pulse_warning(param_01); + break; + + case "pulse_default": + func_141A(param_01); + break; + + case "pulse_close": + func_141B(param_01); + break; + + case "pulse_success": + func_141C(param_01); + break; + } + } + } + + func_141A(param_01); +} + +//Function Number: 71 +func_1423() +{ + return -72; +} + +//Function Number: 72 +so_remove_hud_item(param_00,param_01) +{ + if(isdefined(param_00) && param_00) + { + self notify("destroying"); + self destroy(); + return; + } + + thread func_1419(); + if(isdefined(param_01) && param_01) + { + self setpulsefx(0,0,500); + wait 0.5; + } + else + { + self setpulsefx(0,1500,500); + wait 2; + } + + self notify("destroying"); + self destroy(); +} + +//Function Number: 73 +set_hud_white(param_00) +{ + if(isdefined(param_00)) + { + self.alpha = param_00; + self.glowalpha = param_00; + } + + self.color = (1,1,1); + self.glowcolor = (0.6,0.6,0.6); +} + +//Function Number: 74 +set_hud_blue(param_00) +{ + if(isdefined(param_00)) + { + self.alpha = param_00; + self.glowalpha = param_00; + } + + self.color = (0.8,0.8,1); + self.glowcolor = (0.301961,0.301961,0.6); +} + +//Function Number: 75 +set_hud_green(param_00) +{ + if(isdefined(param_00)) + { + self.alpha = param_00; + self.glowalpha = param_00; + } + + self.color = (0.8,1,0.8); + self.glowcolor = (0.301961,0.6,0.301961); +} + +//Function Number: 76 +set_hud_yellow(param_00) +{ + if(isdefined(param_00)) + { + self.alpha = param_00; + self.glowalpha = param_00; + } + + self.color = (1,1,0.5); + self.glowcolor = (0.7,0.7,0.2); +} + +//Function Number: 77 +set_hud_red(param_00) +{ + if(isdefined(param_00)) + { + self.alpha = param_00; + self.glowalpha = param_00; + } + + self.color = (1,0.4,0.4); + self.glowcolor = (0.7,0.2,0.2); +} + +//Function Number: 78 +set_hud_grey(param_00) +{ + if(isdefined(param_00)) + { + self.alpha = param_00; + self.glowalpha = param_00; + } + + self.color = (0.4,0.4,0.4); + self.glowcolor = (0.2,0.2,0.2); +} + +//Function Number: 79 +info_hud_wait_for_player(param_00) +{ + if(isdefined(self.so_infohud_toggle_state)) + { + return; + } + + level endon("challenge_timer_expired"); + level endon("challenge_timer_passed"); + level endon("special_op_terminated"); + self endon("death"); + if(isdefined(param_00)) + { + level endon(param_00); + } + + self setweaponhudiconoverride("actionslot1","hud_show_timer"); + notifyoncommand("toggle_challenge_timer","+actionslot 1"); + self.so_infohud_toggle_state = info_hud_start_state(); + if(!maps\_specialops_code::so_hud_can_show()) + { + thread info_hud_wait_force_on(); + maps\_utility::func_121C("so_hud_can_toggle"); + } + + self notify("so_hud_toggle_available"); + for(;;) + { + self waittill("toggle_challenge_timer"); + switch(self.so_infohud_toggle_state) + { + case "on": + self.so_infohud_toggle_state = "off"; + setdvar("so_ophud_" + self.unique_id,"0"); + break; + + case "off": + self.so_infohud_toggle_state = "on"; + setdvar("so_ophud_" + self.unique_id,"1"); + break; + } + + self notify("update_challenge_timer"); + } +} + +//Function Number: 80 +info_hud_wait_force_on() +{ + self endon("so_hud_toggle_available"); + notifyoncommand("force_challenge_timer","+actionslot 1"); + self waittill("force_challenge_timer"); + self.so_hud_show_time = gettime(); + self.so_infohud_toggle_state = "on"; + setdvar("so_ophud_" + self.unique_id,"1"); +} + +//Function Number: 81 +info_hud_start_state() +{ + if(getdvarint("so_ophud_" + self.unique_id) == 1) + { + self.so_hud_show_time = gettime() + 1000; + return "on"; + } + + if(isdefined(level.challenge_time_limit)) + { + return "on"; + } + + if(isdefined(level.var_142D) && level.var_142D) + { + return "on"; + } + + return "off"; +} + +//Function Number: 82 +info_hud_handle_fade(param_00,param_01) +{ + level endon("new_challenge_timer"); + level endon("challenge_timer_expired"); + level endon("challenge_timer_passed"); + level endon("special_op_terminated"); + self endon("death"); + if(isdefined(param_01)) + { + level endon(param_01); + } + + param_00.var_142F = 1; + maps\_utility::func_121C("so_hud_can_toggle"); + func_1430(param_00); + for(;;) + { + self waittill("update_challenge_timer"); + param_00 fadeovertime(0.25); + func_1430(param_00); + } +} + +//Function Number: 83 +func_1430(param_00) +{ + switch(self.so_infohud_toggle_state) + { + case "on": + param_00.alpha = 1; + break; + + case "off": + param_00.alpha = 0; + break; + } +} + +//Function Number: 84 +func_1431(param_00) +{ + if(!isdefined(level.challenge_time_limit)) + { + return; + } + + if(common_scripts\utility::flag("challenge_timer_expired") || common_scripts\utility::flag("challenge_timer_passed")) + { + return; + } + + level.so_challenge_time_left = level.so_challenge_time_left - param_00; + if(level.so_challenge_time_left < 0) + { + level.so_challenge_time_left = 0.01; + } + + var_01 = (0.6,0.2,0.2); + var_02 = (0.4,0.1,0.1); + foreach(var_04 in level.players) + { + var_04.hud_so_timer_time settenthstimer(level.so_challenge_time_left); + } + + thread maps\_specialops_code::challenge_timer_thread(); +} + +//Function Number: 85 +is_dvar_character_switcher(param_00) +{ + var_01 = getdvar(param_00); + return var_01 == "so_char_client" || var_01 == "so_char_host"; +} + +//Function Number: 86 +func_1436() +{ + var_00 = tablelookup("sp/specOpsTable.csv",1,level.script,9); + if(var_00 == "") + { + return 0; + } + + foreach(var_02 in level.players) + { + var_03 = var_02 getlocalplayerprofiledata(var_00); + if(!isdefined(var_03)) + { + continue; + } + + if(var_03 != 0) + { + return 1; + } + } + + return 0; +} + +//Function Number: 87 +is_best_wave(param_00) +{ + return 0; +} + +//Function Number: 88 +is_best_time(param_00,param_01,param_02) +{ + if(!isdefined(param_00)) + { + if(isdefined(level.challenge_start_time)) + { + param_00 = level.challenge_start_time; + } + else + { + param_00 = 300; + } + } + + if(!isdefined(param_01)) + { + param_01 = gettime(); + } + + if(!isdefined(param_02)) + { + param_02 = 0; + } + + var_03 = param_01 - param_00; + var_03 = int(min(var_03,86400000)); + var_04 = tablelookup("sp/specOpsTable.csv",1,level.script,9); + if(var_04 == "") + { + return 0; + } + + foreach(var_06 in level.players) + { + var_07 = var_06 getlocalplayerprofiledata(var_04); + if(!isdefined(var_07)) + { + continue; + } + + var_08 = var_07 == 0; + if(var_08) + { + continue; + } + + var_07 = var_07 - var_07 * param_02; + if(var_03 < var_07) + { + return 1; + } + } + + return 0; +} + +//Function Number: 89 +is_poor_time(param_00,param_01,param_02) +{ + if(!isdefined(param_00)) + { + if(isdefined(level.challenge_start_time)) + { + param_00 = level.challenge_start_time; + } + else + { + param_00 = 300; + } + } + + if(!isdefined(param_01)) + { + param_01 = gettime(); + } + + if(!isdefined(param_02)) + { + param_02 = 0; + } + + var_03 = param_01 - param_00; + var_04 = level.challenge_time_limit * 1000; + var_04 = var_04 - var_04 * param_02; + return var_03 > var_04; +} + +//Function Number: 90 +func_143A() +{ + if(isdefined(level.var_80E5["ready_up"])) + { + [[ level.var_80E5["ready_up"] ]](); + return; + } + + maps\_specialops_code::func_143B("so_tf_1_plyr_prep",0,1); +} + +//Function Number: 91 +so_dialog_mission_success(param_00) +{ + if(!maps\_utility::is_survival() && is_best_time(level.challenge_start_time,level.challenge_end_time)) + { + if(isdefined(level.var_80E5["success_best"])) + { + thread [[ level.var_80E5["success_best"] ]](); + return; + } + + thread maps\_specialops_code::func_143B("so_tf_1_success_best",0.5,1); + return; + } + + if(!isdefined(param_00)) + { + param_00 = 0; + if(level.gameskill >= 3) + { + if(func_1436()) + { + param_00 = common_scripts\utility::cointoss(); + } + } + } + + if(isdefined(level.var_80E5["success_generic"])) + { + [[ level.var_80E5["success_generic"] ]](param_00); + return; + } + + if(param_00) + { + maps\_specialops_code::func_143B("so_tf_1_success_jerk",0.5,1); + return; + } + + maps\_specialops_code::func_143B("so_tf_1_success_generic",0.5,1); +} + +//Function Number: 92 +func_143D(param_00) +{ + if(isdefined(level.failed_dialog_played) && level.failed_dialog_played) + { + return; + } + + level.failed_dialog_played = 1; + maps\_specialops_code::func_143B(param_00,0.5,1); +} + +//Function Number: 93 +so_dialog_mission_failed_generic() +{ + if(isdefined(level.var_80E5["failed_generic"])) + { + [[ level.var_80E5["failed_generic"] ]](); + return; + } + + if(level.gameskill <= 2 || common_scripts\utility::cointoss()) + { + func_143D("so_tf_1_fail_generic"); + return; + } + + func_143D("so_tf_1_fail_generic_jerk"); +} + +//Function Number: 94 +so_dialog_mission_failed_time() +{ + if(isdefined(level.var_80E5["failed_time"])) + { + [[ level.var_80E5["failed_time"] ]](); + return; + } + + func_143D("so_tf_1_fail_time"); +} + +//Function Number: 95 +so_dialog_mission_failed_bleedout() +{ + if(isdefined(level.var_80E5["failed_bleedout"])) + { + [[ level.var_80E5["failed_bleedout"] ]](); + return; + } + + func_143D("so_tf_1_fail_bleedout"); +} + +//Function Number: 96 +func_1442() +{ + if(isdefined(level.var_80E5["time_low_normal"])) + { + [[ level.var_80E5["time_low_normal"] ]](); + return; + } + + maps\_specialops_code::func_143B("so_tf_1_time_generic"); +} + +//Function Number: 97 +so_dialog_time_low_hurry() +{ + if(isdefined(level.var_80E5["time_low_hurry"])) + { + [[ level.var_80E5["time_low_hurry"] ]](); + return; + } + + maps\_specialops_code::func_143B("so_tf_1_time_hurry"); +} + +//Function Number: 98 +so_dialog_killing_civilians() +{ + if(!isdefined(level.civilian_warning_time)) + { + level.civilian_warning_time = gettime(); + if(!isdefined(level.civilian_warning_throttle)) + { + level.civilian_warning_throttle = 5000; + } + } + else if(gettime() - level.civilian_warning_time < level.civilian_warning_throttle) + { + return; + } + + var_00 = 0.5; + level.civilian_warning_time = gettime() + var_00 * 1000; + if(isdefined(level.var_80E5["killing_civilians"])) + { + [[ level.var_80E5["killing_civilians"] ]](); + return; + } + + maps\_specialops_code::func_143B("so_tf_1_civ_kill_warning",0.5); +} + +//Function Number: 99 +so_dialog_progress_update(param_00,param_01) +{ + if(!isdefined(param_00)) + { + return; + } + + if(!isdefined(param_01)) + { + return; + } + + if(!isdefined(level.so_progress_goal_status)) + { + level.so_progress_goal_status = "none"; + } + + var_02 = undefined; + switch(level.so_progress_goal_status) + { + case "none": + var_02 = 0.75; + break; + + case "3quarter": + var_02 = 0.5; + break; + + case "half": + var_02 = 0.25; + break; + + default: + break; + } + + var_03 = param_01 * var_02; + if(param_00 > var_03) + { + return; + } + + var_04 = undefined; + switch(level.so_progress_goal_status) + { + case "none": + level.so_progress_goal_status = "3quarter"; + var_04 = "so_tf_1_progress_3quarter"; + break; + + case "3quarter": + level.so_progress_goal_status = "half"; + var_04 = "so_tf_1_progress_half"; + break; + + case "half": + level.so_progress_goal_status = "quarter"; + var_04 = "so_tf_1_progress_quarter"; + break; + } + + if(isdefined(level.var_80E5["progress_goal_status"])) + { + [[ level.var_80E5["progress_goal_status"] ]](); + return; + } + + maps\_specialops_code::func_143B(var_04,0.5); +} + +//Function Number: 100 +so_dialog_progress_update_time_quality(param_00) +{ + if(isdefined(level.challenge_time_limit)) + { + if(is_poor_time(level.challenge_start_time,gettime(),param_00)) + { + if(isdefined(level.var_80E5["time_status_late"])) + { + [[ level.var_80E5["time_status_late"] ]](); + return; + } + + maps\_specialops_code::func_143B("so_tf_1_time_status_late",0.2); + return; + } + } + + if(is_best_time(level.challenge_start_time,gettime(),param_00)) + { + if(isdefined(level.var_80E5["time_status_good"])) + { + [[ level.var_80E5["time_status_good"] ]](); + return; + } + + maps\_specialops_code::func_143B("so_tf_1_time_status_good",0.2); + } +} + +//Function Number: 101 +so_dialog_counter_update(param_00,param_01,param_02) +{ + if(!isdefined(level.so_counter_dialog_time)) + { + level.so_counter_dialog_time = 0; + } + + if(gettime() < level.so_counter_dialog_time) + { + return; + } + + if(!isdefined(param_00)) + { + return; + } + + if(!isdefined(param_02)) + { + param_02 = 1; + } + + var_03 = int(param_00 / param_02); + if(var_03 > 5) + { + if(!isdefined(level.challenge_progress_manual_update) || !level.challenge_progress_manual_update) + { + thread so_dialog_progress_update(param_00,param_01); + level.so_counter_dialog_time = gettime() + 800; + } + + return; + } + + if(isdefined(level.var_80E5["progress"])) + { + thread [[ level.var_80E5["progress"] ]](var_03); + } + else + { + switch(var_03) + { + case 5: + thread maps\_specialops_code::func_143B("so_tf_1_progress_5more",0.5); + break; + + case 4: + thread maps\_specialops_code::func_143B("so_tf_1_progress_4more",0.5); + break; + + case 3: + thread maps\_specialops_code::func_143B("so_tf_1_progress_3more",0.5); + break; + + case 2: + thread maps\_specialops_code::func_143B("so_tf_1_progress_2more",0.5); + break; + + case 1: + thread maps\_specialops_code::func_143B("so_tf_1_progress_1more",0.5); + break; + } + } + + level.so_counter_dialog_time = gettime() + 800; +} + +//Function Number: 102 +func_144D(param_00,param_01) +{ + if(!isdefined(param_00.coop_death_reason)) + { + param_00.coop_death_reason = []; + } + + if(!isdefined(param_01)) + { + param_01 = "MOD_EXPLOSIVE"; + } + + param_00.coop_death_reason["attacker"] = self; + param_00.coop_death_reason["cause"] = param_01; + param_00.coop_death_reason["weapon_name"] = "none"; + param_00 maps\_utility::kill_wrapper(); +} + +//Function Number: 103 +get_previously_completed_difficulty() +{ + var_00 = level.specopssettings maps\_endmission::func_1452(level.script); + var_01 = int(self getlocalplayerprofiledata("missionSOHighestDifficulty")[var_00]); + var_01 = int(max(0,var_01)); + return var_01; +} + +//Function Number: 104 +func_1453() +{ + precacheshader("difficulty_star"); +} + +//Function Number: 105 +so_hud_stars_init(param_00,param_01,param_02,param_03,param_04,param_05) +{ + level.race_times = []; + level.race_times["regular"] = param_02; + level.race_times["hardened"] = param_03; + level.race_times["veteran"] = param_04; + param_05 = common_scripts\utility::ter_op(isdefined(param_05),param_05,4); + self.stars_removed = []; + thread so_hud_stars_single_think(param_00,param_01,0,level.race_times["regular"],"regular",param_05); + thread so_hud_stars_single_think(param_00,param_01,1,level.race_times["hardened"],"hardened",param_05); + thread so_hud_stars_single_think(param_00,param_01,2,level.race_times["veteran"],"veteran",param_05); +} + +//Function Number: 106 +so_hud_stars_single_think(param_00,param_01,param_02,param_03,param_04,param_05) +{ + level endon("special_op_terminated"); + level endon(param_01); + if(!isdefined(self.so_hud_star_count)) + { + self.so_hud_star_count = 0; + } + + self.so_hud_star_count++; + var_06 = 25; + var_07 = func_1423(); + var_08 = func_127E(param_05,var_07,undefined,self); + var_08.x = var_08.x - param_02 * var_06 - 30; + var_08.y = var_08.y + 5; + var_08 setshader("difficulty_star",25,25); + common_scripts\utility::flag_wait(param_00); + thread so_hud_stars_single_force_alpha_end(var_08,param_01); + if(param_03 < 0) + { + return; + } + + thread so_hud_stars_sound_and_flash(var_08,param_03,param_01); + level common_scripts\utility::waittill_any_timeout(param_03,"star_hud_remove_" + param_04); + waittillframeend; + if(common_scripts\utility::flag(param_01)) + { + return; + } + + self.so_hud_star_count--; + var_08 destroy(); +} + +//Function Number: 107 +so_hud_stars_remove(param_00) +{ + foreach(var_02 in level.players) + { + if(!isdefined(param_00)) + { + if(!isdefined(var_02.stars_removed["veteran"])) + { + param_00 = "veteran"; + } + else if(!isdefined(var_02.stars_removed["hardened"])) + { + param_00 = "hardened"; + } + else if(!isdefined(var_02.stars_removed["regular"])) + { + param_00 = "regular"; + } + } + + if(isdefined(var_02.stars_removed[param_00])) + { + return; + } + + if(param_00 == "hardened" && !isdefined(var_02.stars_removed["veteran"])) + { + return; + } + else if(param_00 == "regular" && !isdefined(var_02.stars_removed["veteran"]) || !isdefined(var_02.stars_removed["hardened"])) + { + return; + } + + var_02.stars_removed[param_00] = 1; + level notify("star_hud_remove_" + param_00); + } +} + +//Function Number: 108 +so_hud_stars_validate_difficulty(param_00) +{ + switch(param_00) + { + case "regular": + case "veteran": + case "hardened": + break; + + default: + break; + } +} + +//Function Number: 109 +so_hud_stars_sound_and_flash(param_00,param_01,param_02) +{ + param_00 endon("death"); + level endon(param_02); + level endon("special_op_terminated"); + var_03 = 5; + var_04 = param_01 - var_03; + wait var_04; + for(var_05 = 0;var_05 < var_03;var_05++) + { + self playlocalsound("star_tick"); + param_00.alpha = 1; + wait 0.5; + param_00.alpha = 0.3; + wait 0.5; + } + + self playlocalsound("star_lost"); +} + +//Function Number: 110 +so_hud_stars_single_force_alpha_end(param_00,param_01) +{ + param_00 endon("death"); + common_scripts\utility::flag_wait(param_01); + waittillframeend; + param_00.alpha = 1; +} + +//Function Number: 111 +unlock_hint() +{ + wait 0.05; + foreach(var_01 in level.players) + { + var_01 thread unlock_hint_think(); + } +} + +//Function Number: 112 +unlock_hint_think() +{ + surhud_disable("unlock"); + for(var_00 = 0;var_00 < 3;var_00++) + { + unlock_hint_reset(var_00); + } + + for(;;) + { + self waittill("update_rank"); + waittillframeend; + if(!isdefined(self)) + { + return; + } + + var_01 = maps\_rank::getrank(); + var_02 = level.unlock_array[var_01]; + if(isdefined(var_02)) + { + for(var_00 = 0;var_00 < 3;var_00++) + { + var_03 = var_02[var_00]; + if(isdefined(var_03)) + { + register_recent_unlock(var_03); + func_146F("surHUD_unlock_hint_" + var_00,"name",var_03.name); + func_146F("surHUD_unlock_hint_" + var_00,"icon",var_03.icon); + func_146F("surHUD_unlock_hint_" + var_00,"mode",var_03.mode); + continue; + } + + unlock_hint_reset(var_00); + } + + func_1466("unlock"); + } + } +} + +//Function Number: 113 +register_recent_unlock(param_00) +{ + if(!param_00.var_80E2) + { + var_01 = tablelookup("sp/survival_armories.csv",1,param_00.ref,2); + var_02 = int(1 + var_01 == "weapon"); + var_03 = tablelookup("sp/survival_armories.csv",1,param_00.ref,6); + var_04 = param_00.desc; + pass_recent_item_unlock("recent_item_2","recent_item_3"); + pass_recent_item_unlock("recent_item_1","recent_item_2"); + func_146F("recent_item_1","name",param_00.name); + func_146F("recent_item_1","icon",var_03); + func_146F("recent_item_1","desc",var_04); + func_146F("recent_item_1","icon_width_ratio",var_02); + return; + } + + var_05 = self getplayerdata("recent_feature_1","name"); + func_146F("recent_feature_2","name",var_05); + func_146F("recent_feature_1","name",param_00.name); +} + +//Function Number: 114 +pass_recent_item_unlock(param_00,param_01) +{ + var_02 = self getplayerdata(param_00,"name"); + var_03 = self getplayerdata(param_00,"desc"); + var_04 = self getplayerdata(param_00,"icon"); + var_05 = self getplayerdata(param_00,"icon_width_ratio"); + func_146F(param_01,"name",var_02); + func_146F(param_01,"desc",var_03); + func_146F(param_01,"icon",var_04); + func_146F(param_01,"icon_width_ratio",var_05); +} + +//Function Number: 115 +unlock_hint_reset(param_00) +{ + func_146F("surHUD_unlock_hint_" + param_00,"name",""); + func_146F("surHUD_unlock_hint_" + param_00,"icon",""); + func_146F("surHUD_unlock_hint_" + param_00,"mode",""); +} + +//Function Number: 116 +func_1466(param_00) +{ + level endon("special_op_terminated"); + self endon("stop_animate_" + param_00); + thread func_80E6("stop_animate_" + param_00); + if(!isdefined(self.var_1467)) + { + self.var_1467 = 0; + } + + while(self.var_1467) + { + wait 0.05; + } + + self.var_1467 = 1; + if(!func_146B(param_00)) + { + surhud_enable(param_00); + } + + _setplayerdata_single("surHUD_set_animate",param_00); + wait 0.05; + self openmenu("surHUD_display"); + wait 0.05; + self.var_1467 = 0; + self notify("surHUD_free"); +} + +//Function Number: 117 +func_80E6(param_00) +{ + self endon("surHUD_free"); + self waittill(param_00); + self.var_1467 = 0; +} + +//Function Number: 118 +surhud_challenge_label(param_00,param_01) +{ + if(isdefined(self)) + { + func_146F("surHUD_challenge_label","slot_" + param_00,param_01); + } +} + +//Function Number: 119 +surhud_challenge_progress(param_00,param_01) +{ + if(isdefined(self)) + { + func_146F("surHUD_challenge_progress","slot_" + param_00,param_01); + } +} + +//Function Number: 120 +surhud_challenge_reward(param_00,param_01) +{ + if(isdefined(self)) + { + func_146F("surHUD_challenge_reward","slot_" + param_00,param_01); + } +} + +//Function Number: 121 +func_146B(param_00) +{ + if(isdefined(self) && self getplayerdata("surHUD",param_00)) + { + return 1; + } + + return 0; +} + +//Function Number: 122 +surhud_enable(param_00) +{ + if(isdefined(self)) + { + func_146F("surHUD",param_00,1); + } +} + +//Function Number: 123 +surhud_disable(param_00) +{ + if(isdefined(self)) + { + func_146F("surHUD",param_00,0); + } +} + +//Function Number: 124 +_setplayerdata_single(param_00,param_01) +{ + self setplayerdata(param_00,param_01); +} + +//Function Number: 125 +func_146F(param_00,param_01,param_02) +{ + self setplayerdata(param_00,param_01,param_02); +} + +//Function Number: 126 +func_80E7() +{ + wait 0.05; + foreach(var_01 in level.players) + { + var_01 thread func_80E8(); + } +} + +//Function Number: 127 +func_80E8() +{ + if(!isdefined(self.achievement_completed)) + { + self.achievement_completed = []; + } + + self.achievement_completed["ARMS_DEALER"] = 0; + self.achievement_completed["DANGER_ZONE"] = 0; + self.achievement_completed["DEFENSE_SPENDING"] = 0; + self.achievement_completed["SURVIVOR"] = 0; + self.achievement_completed["UNSTOPPABLE"] = 0; +} + +//Function Number: 128 +func_80E4(param_00,param_01) +{ + if(maps\_utility::is_survival()) + { + switch(param_00) + { + case "DEFENSE_SPENDING": + case "DANGER_ZONE": + case "ARMS_DEALER": + thread func_80EA(param_00,param_01); + break; + + case "SURVIVOR": + thread func_80EC(param_00,9); + break; + + case "UNSTOPPABLE": + thread func_80EC(param_00,14); + break; + + case "GET_RICH_OR_DIE_TRYING": + case "I_LIVE": + thread maps\_utility::player_giveachievement_wrapper(param_00); + break; + } + + return; + } + + switch(param_00) + { + case "BRAG_RAGS": + thread maps\_utility::player_giveachievement_wrapper(param_00); + break; + + case "TACTICIAN": + thread func_80ED(param_00,1); + break; + + case "OVERACHIEVER": + thread func_80ED(param_00,3); + break; + } +} + +//Function Number: 129 +func_80EA(param_00,param_01) +{ + if(self.achievement_completed[param_00]) + { + return; + } + + var_02 = level.armory_all_items[param_01].type; + if(self getplayerdata(var_02 + "_purchased",param_01) == 0) + { + self setplayerdata(var_02 + "_purchased",param_01,1); + } + else + { + return; + } + + var_03 = 0; + if(var_02 == "weapon" || var_02 == "weaponupgrade") + { + var_03 = func_80EB("weapon","weapon_purchased") && func_80EB("weaponupgrade","weaponupgrade_purchased"); + } + else + { + var_03 = func_80EB(var_02,var_02 + "_purchased"); + } + + if(var_03) + { + maps\_utility::player_giveachievement_wrapper(param_00); + self.achievement_completed[param_00] = 1; + } +} + +//Function Number: 130 +func_80EB(param_00,param_01) +{ + foreach(var_03 in level.var_3892[param_00]) + { + if(self getplayerdata(param_01,var_03.ref) == 0) + { + return 0; + } + } + + return 1; +} + +//Function Number: 131 +func_80EC(param_00,param_01) +{ + if(self.achievement_completed[param_00]) + { + return; + } + + for(var_02 = 0;var_02 < 16;var_02++) + { + var_03 = level.specopssettings.var_14AA[var_02].name; + var_04 = tablelookup("sp/specOpsTable.csv",1,var_03,9); + var_05 = int(self getlocalplayerprofiledata(var_04) / 1000); + if(var_03 == level.script) + { + var_05 = level.var_13BE; + } + + if(var_05 < param_01) + { + return; + } + } + + maps\_utility::player_giveachievement_wrapper(param_00); + self.achievement_completed[param_00] = 1; + if(param_00 == "UNSTOPPABLE") + { + self setplayerdata("challengeState","ch_unstoppable",2); + } +} + +//Function Number: 132 +func_80ED(param_00,param_01) +{ + for(var_02 = 16;var_02 < 32;var_02++) + { + var_03 = level.specopssettings.var_14AA[var_02].name; + var_04 = int(self getlocalplayerprofiledata("missionSOHighestDifficulty")[var_02]); + var_04 = int(max(0,var_04)) - 1; + if(var_04 < param_01) + { + return; + } + } + + maps\_utility::player_giveachievement_wrapper(param_00); + if(param_00 == "OVERACHIEVER") + { + self setplayerdata("challengeState","ch_overachiever",2); + } +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_specialops_battlechatter.gsc b/MW3/Xbox/SP/maps/_specialops_battlechatter.gsc new file mode 100644 index 0000000..94a87c0 --- /dev/null +++ b/MW3/Xbox/SP/maps/_specialops_battlechatter.gsc @@ -0,0 +1,627 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_specialops_battlechatter.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 32 + * Decompile Time: 627 ms + * Timestamp: 10/27/2023 2:33:32 AM +*******************************************************************/ + +//Function Number: 1 +init() +{ + anim.so = spawnstruct(); + level.so.eventtypes = []; + level.so.eventtypes["check_fire"] = "threat_friendly_fire"; + level.so.eventtypes["reload"] = "inform_reload_generic"; + level.so.eventtypes["frag_out"] = "inform_attack_grenade"; + level.so.eventtypes["flash_out"] = "inform_attack_flashbang"; + level.so.eventtypes["smoke_out"] = "inform_attack_smoke"; + level.so.eventtypes["c4_plant"] = "inform_attack_c4"; + level.so.eventtypes["claymore_plant"] = "inform_plant_claymore"; + level.so.eventtypes["downed"] = "inform_suppressed"; + level.so.eventtypes["bleedout"] = "inform_bleedout"; + level.so.eventtypes["reviving"] = "inform_reviving"; + level.so.eventtypes["revived"] = "inform_revived"; + level.so.eventtypes["sentry_out"] = "inform_place_sentry"; + level.so.eventtypes["area_secure"] = "inform_area_secure"; + level.so.eventtypes["kill_generic"] = "inform_kill_generic"; + level.so.eventtypes["kill_infantry"] = "inform_kill_infantry"; + level.so.eventtypes["affirmative"] = "inform_roger"; + level.so.eventtypes["negative"] = "inform_negative"; + level.so.eventtypes["on_comms"] = "inform_comms"; + level.so.eventtypes["mark_dropzone"] = "inform_markdz"; + level.so.eventtypes["glowstick_out"] = "inform_use_glowstick"; + level.so.eventtypeminwait = []; + level.so.eventtypeminwait["check_fire"] = 4; + level.so.eventtypeminwait["reload"] = 8; + level.so.eventtypeminwait["frag_out"] = 3; + level.so.eventtypeminwait["flash_out"] = 3; + level.so.eventtypeminwait["smoke_out"] = 3; + level.so.eventtypeminwait["c4_plant"] = 2; + level.so.eventtypeminwait["claymore_plant"] = 2; + level.so.eventtypeminwait["downed"] = 0.5; + level.so.eventtypeminwait["bleedout"] = 0.5; + level.so.eventtypeminwait["reviving"] = 2; + level.so.eventtypeminwait["revived"] = 2; + level.so.eventtypeminwait["sentry_out"] = 3; + level.so.eventtypeminwait["kill_generic"] = 2; + level.so.eventtypeminwait["kill_infantry"] = 2; + level.so.eventtypeminwait["area_secure"] = 0.5; + level.so.eventtypeminwait["affirmative"] = 2; + level.so.eventtypeminwait["negative"] = 2; + level.so.eventtypeminwait["on_comms"] = 0.5; + level.so.eventtypeminwait["mark_dropzone"] = 0.5; + level.so.eventtypeminwait["glowstick_out"] = 3; + level.so.skipdistancecheck = []; + level.so.skipdistancecheck[level.so.skipdistancecheck.size] = "affirmative"; + level.so.skipdistancecheck[level.so.skipdistancecheck.size] = "negative"; + level.so.skipdistancecheck[level.so.skipdistancecheck.size] = "area_secure"; + level.so.skipdistancecheck[level.so.skipdistancecheck.size] = "on_comms"; + level.so.skipdistancecheck[level.so.skipdistancecheck.size] = "mark_dropzone"; + level.so.skipdistancecheck[level.so.skipdistancecheck.size] = "downed"; + level.so.skipdistancecheck[level.so.skipdistancecheck.size] = "bleedout"; + level.so.skipdistancecheck[level.so.skipdistancecheck.size] = "check_fire"; + level.so.noreloadcalloutweapons = []; + level.so.noreloadcalloutweapons[level.so.noreloadcalloutweapons.size] = "m79"; + level.so.noreloadcalloutweapons[level.so.noreloadcalloutweapons.size] = "ranger"; + level.so.noreloadcalloutweapons[level.so.noreloadcalloutweapons.size] = "claymore"; + level.so.noreloadcalloutweapons[level.so.noreloadcalloutweapons.size] = "rpg"; + level.so.noreloadcalloutweapons[level.so.noreloadcalloutweapons.size] = "rpg_player"; + level.so.bcmaxdistsqd = 640000; + level.so.bcprintfailprefix = "^3***** BCS FAILURE: "; + common_scripts\utility::array_thread(level.players,::enable_chatter_on_player); + enable_chatter(); +} + +//Function Number: 2 +enable_chatter() +{ + level.so_player_chatter_enabled = 1; +} + +//Function Number: 3 +disable_chatter() +{ + level.so_player_chatter_enabled = 0; +} + +//Function Number: 4 +enable_chatter_on_player() +{ + self.so_isspeaking = 0; + self.bc_eventtypelastusedtime = []; + thread revive_tracking(); + thread claymore_tracking(); + thread reload_tracking(); + thread grenade_tracking(); + thread friendlyfire_tracking(); + thread friendlyfire_whizby_tracking(); + thread sentry_tracking(); + thread kill_generic_tracking(); + thread kill_infantry_tracking(); + thread area_secure_tracking(); + thread affirmative_tracking(); + thread negative_tracking(); + thread on_comms_tracking(); + thread mark_dropzone_tracking(); + thread glowstick_tracking(); +} + +//Function Number: 5 +revive_tracking() +{ + level endon("special_op_terminated"); + self endon("death"); + for(;;) + { + var_00 = common_scripts\utility::waittill_any_return("so_downed","so_bleedingout","so_reviving","so_revived"); + if(var_00 == "so_downed") + { + play_so_chatter("downed"); + continue; + } + + if(var_00 == "so_bleedingout") + { + play_so_chatter("bleedout"); + continue; + } + + if(var_00 == "so_reviving") + { + play_so_chatter("reviving"); + continue; + } + + if(var_00 == "so_revived") + { + play_so_chatter("revived"); + } + } +} + +//Function Number: 6 +claymore_tracking() +{ + level endon("special_op_terminated"); + self endon("death"); + for(;;) + { + self waittill("begin_firing"); + var_00 = self getcurrentweapon(); + if(var_00 == "claymore") + { + play_so_chatter("claymore_plant"); + } + } +} + +//Function Number: 7 +sentry_tracking() +{ + level endon("special_op_terminated"); + self endon("death"); + for(;;) + { + self waittill("sentry_placement_finished"); + play_so_chatter("sentry_out"); + } +} + +//Function Number: 8 +kill_generic_tracking() +{ + level endon("special_op_terminated"); + self endon("death"); + for(;;) + { + self waittill("so_bcs_kill_generic"); + play_so_chatter("kill_generic"); + } +} + +//Function Number: 9 +kill_infantry_tracking() +{ + level endon("special_op_terminated"); + self endon("death"); + for(;;) + { + self waittill("so_bcs_kill_infantry"); + play_so_chatter("kill_infantry"); + } +} + +//Function Number: 10 +area_secure_tracking() +{ + level endon("special_op_terminated"); + self endon("death"); + for(;;) + { + self waittill("so_bcs_area_secure"); + play_so_chatter("area_secure"); + } +} + +//Function Number: 11 +affirmative_tracking() +{ + level endon("special_op_terminated"); + self endon("death"); + for(;;) + { + self waittill("so_bcs_affirmative"); + play_so_chatter("area_secure"); + } +} + +//Function Number: 12 +negative_tracking() +{ + level endon("special_op_terminated"); + self endon("death"); + for(;;) + { + self waittill("so_bcs_negative"); + play_so_chatter("negative"); + } +} + +//Function Number: 13 +on_comms_tracking() +{ + level endon("special_op_terminated"); + self endon("death"); + for(;;) + { + self waittill("so_bcs_on_comms"); + play_so_chatter("on_comms"); + } +} + +//Function Number: 14 +mark_dropzone_tracking() +{ + level endon("special_op_terminated"); + self endon("death"); + for(;;) + { + self waittill("so_bcs_mark_dropzone"); + play_so_chatter("mark_dropzone"); + } +} + +//Function Number: 15 +glowstick_tracking() +{ +} + +//Function Number: 16 +reload_tracking() +{ + level endon("special_op_terminated"); + self endon("death"); + for(;;) + { + self waittill("reload_start"); + var_00 = self getcurrentweapon(); + if(weapon_no_reload_callout(var_00)) + { + continue; + } + + if(is_downed()) + { + continue; + } + + play_so_chatter("reload"); + } +} + +//Function Number: 17 +weapon_no_reload_callout(param_00) +{ + foreach(var_02 in level.so.noreloadcalloutweapons) + { + if(param_00 == var_02) + { + return 1; + } + } + + return 0; +} + +//Function Number: 18 +grenade_tracking() +{ + level endon("special_op_terminated"); + self endon("death"); + for(;;) + { + self waittill("grenade_fire",var_00,var_01); + var_02 = undefined; + if(var_01 == "fraggrenade") + { + var_02 = "frag_out"; + } + else if(var_01 == "semtex_grenade") + { + var_02 = "frag_out"; + } + else if(var_01 == "flash_grenade") + { + var_02 = "flash_out"; + } + else if(var_01 == "smoke_grenade_american") + { + var_02 = "smoke_out"; + } + else if(var_01 == "c4") + { + var_02 = "c4_plant"; + } + + if(isdefined(var_02)) + { + play_so_chatter(var_02); + } + } +} + +//Function Number: 19 +friendlyfire_tracking() +{ + level endon("special_op_terminated"); + self endon("death"); + for(;;) + { + self waittill("damage",var_00,var_01,var_02,var_03,var_04); + if(!friendlyfire_is_valid(var_00,var_01,var_04)) + { + continue; + } + + play_so_chatter("check_fire"); + } +} + +//Function Number: 20 +friendlyfire_is_valid(param_00,param_01,param_02) +{ + if(param_00 <= 0) + { + return 0; + } + + if(!isplayer(param_01)) + { + return 0; + } + + if(param_01 == self) + { + return 0; + } + + if(param_02 == "MOD_MELEE") + { + return 0; + } + + if(isdefined(level.friendlyfire_warnings) && !level.friendlyfire_warnings) + { + return 0; + } + + return 1; +} + +//Function Number: 21 +friendlyfire_whizby_tracking() +{ + level endon("special_op_terminated"); + self endon("death"); + self addaieventlistener("bulletwhizby"); + for(;;) + { + self waittill("ai_event",var_00,var_01,var_02); + if(var_00 == "bulletwhizby") + { + if(!friendlyfire_whizby_is_valid(var_01,var_02)) + { + continue; + } + + play_so_chatter("check_fire"); + } + } +} + +//Function Number: 22 +friendlyfire_whizby_is_valid(param_00,param_01) +{ + if(!isplayer(param_00)) + { + return 0; + } + + if(param_00 == self) + { + return 0; + } + + if(is_downed()) + { + return 0; + } + + if(abs(param_01[2] - self.origin[2] > 128)) + { + return 0; + } + + var_02 = distance2d(self.origin,param_01); + if(!animscripts/battlechatter_ai::friendlyfire_whizby_distances_valid(param_00,var_02)) + { + return 0; + } + + if(isdefined(level.friendlyfire_warnings) && !level.friendlyfire_warnings) + { + return 0; + } + + return 1; +} + +//Function Number: 23 +func_0EF1() +{ + var_00 = func_0EF2(); + play_so_chatter(var_00); +} + +//Function Number: 24 +func_0EF2() +{ + var_00 = "downed"; + var_01 = self.var_EF3.bleedout_time; + var_02 = self.var_EF3.bleedout_time_default; + if(var_01 < var_02 * level.laststand_stage2_multiplier) + { + var_00 = "bleedout"; + } + + return var_00; +} + +//Function Number: 25 +can_say_current_nag_event_type() +{ + var_00 = func_0EF2(); + return can_say_event_type(var_00); +} + +//Function Number: 26 +play_so_chatter(param_00) +{ + level endon("special_op_terminated"); + self endon("death"); + if(!can_say_event_type(param_00)) + { + return; + } + + if(!func_0F01(param_00)) + { + return; + } + + var_01 = get_player_team_prefix(self) + level.so.eventtypes[param_00]; + var_01 = check_overrides(param_00,var_01); + if(!isdefined(var_01)) + { + return; + } + + if(!soundexists(var_01)) + { + return; + } + + self.so_isspeaking = 1; + self playsound(var_01,"bc_done",1); + self waittill("bc_done"); + self.so_isspeaking = 0; + func_0EFA(param_00); +} + +//Function Number: 27 +can_say_event_type(param_00) +{ + if(!isdefined(level.so_player_chatter_enabled) || !level.so_player_chatter_enabled) + { + return 0; + } + + if(self.so_isspeaking) + { + return 0; + } + + if(!isdefined(self.bc_eventtypelastusedtime[param_00])) + { + return 1; + } + + var_01 = self.bc_eventtypelastusedtime[param_00]; + var_02 = level.so.eventtypeminwait[param_00] * 1000; + if(gettime() - var_01 >= var_02) + { + return 1; + } + + return 0; +} + +//Function Number: 28 +func_0EFA(param_00) +{ + self.bc_eventtypelastusedtime[param_00] = gettime(); +} + +//Function Number: 29 +check_overrides(param_00,param_01) +{ + if(param_00 == "reload") + { + if(isdefined(level.so_override["skip_inform_reloading"]) && level.so_override["skip_inform_reloading"]) + { + return undefined; + } + + if(isdefined(level.so_override["inform_reloading"])) + { + return level.so_override["inform_reloading"]; + } + } + + return param_01; +} + +//Function Number: 30 +get_player_team_prefix(param_00) +{ + var_01 = ""; + if(isdefined(level.so_stealth) && level.so_stealth) + { + var_01 = "STEALTH_"; + } + + var_02 = "1"; + if(param_00 == level.player2) + { + var_02 = "2"; + } + + switch(level.so_campaign) + { + case "fso": + case "hijack": + case "delta": + case "ranger": + return "SO_US_" + var_02 + "_" + var_01; + + case "seal": + return "SO_NS_" + var_02 + "_" + var_01; + + case "sas": + case "ghillie": + case "woodland": + case "desert": + case "arctic": + return "SO_UK_" + var_02 + "_" + var_01; + + default: + break; + } +} + +//Function Number: 31 +func_0F01(param_00) +{ + if(isdefined(param_00)) + { + foreach(var_02 in level.so.skipdistancecheck) + { + if(var_02 == param_00) + { + return 1; + } + } + } + + var_04 = maps\_utility::get_other_player(self); + if(distancesquared(var_04.origin,self.origin) > level.so.bcmaxdistsqd) + { + return 0; + } + + return 1; +} + +//Function Number: 32 +is_downed() +{ + if(maps\_utility::ent_flag_exist("laststand_downed") && maps\_utility::ent_flag("laststand_downed")) + { + return 1; + } + + return 0; +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_specialops_code.gsc b/MW3/Xbox/SP/maps/_specialops_code.gsc new file mode 100644 index 0000000..f80b7dd --- /dev/null +++ b/MW3/Xbox/SP/maps/_specialops_code.gsc @@ -0,0 +1,2181 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_specialops_code.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 98 + * Decompile Time: 1772 ms + * Timestamp: 10/27/2023 2:33:30 AM +*******************************************************************/ + +//Function Number: 1 +setup_xp() +{ + wait 0.05; + maps\_rank::xp_init(); +} + +//Function Number: 2 +register_level_unlock(param_00,param_01) +{ + var_02 = int(tablelookup("sp/specOpsTable.csv",1,param_00,5)); + var_03 = tablelookup("sp/specOpsTable.csv",1,param_00,6); + var_04 = 1; + func_1478(param_00,var_02,var_03,"","",param_01,var_04); +} + +//Function Number: 3 +register_survival_unlock() +{ + register_level_unlock("so_survival_2","survival"); + register_level_unlock("so_survival_3","survival"); + register_level_unlock("so_survival_4","survival"); + register_survival_armory_unlock(100,120,"weaponupgrade"); + register_survival_armory_unlock(0,64,"weapon"); + register_survival_armory_unlock(1000,1020,"equipment"); + register_survival_armory_unlock(10000,10020,"airsupport"); +} + +//Function Number: 4 +register_survival_armory_unlock(param_00,param_01,param_02) +{ + for(var_03 = param_00;var_03 <= param_01;var_03++) + { + var_04 = tablelookup("sp/survival_armories.csv",0,var_03,1); + if(!isdefined(var_04) || var_04 == "") + { + continue; + } + + var_05 = var_03; + var_06 = var_04; + var_07 = param_02; + var_08 = tablelookup("sp/survival_armories.csv",1,var_04,4); + var_09 = tablelookup("sp/survival_armories.csv",1,var_04,5); + var_0A = int(tablelookup("sp/survival_armories.csv",1,var_04,7)); + if(var_0A > 0) + { + var_0B = "weapon_missing_image"; + if(var_07 == "airsupport") + { + var_0B = "specops_ui_airsupport"; + } + + if(var_07 == "equipment") + { + var_0B = "specops_ui_equipmentstore"; + } + + if(var_07 == "weapon" || var_07 == "weaponupgrade") + { + var_0B = "specops_ui_weaponstore"; + } + + var_0C = 0; + func_1478(var_06,var_0A,var_08,var_09,var_0B,"survival",var_0C); + } + } +} + +//Function Number: 5 +func_1478(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + var_07 = spawnstruct(); + var_07.ref = param_00; + var_07.name = param_02; + var_07.desc = param_03; + var_07.icon = param_04; + var_07.unlocklvl = param_01; + var_07.mode = param_05; + var_07.var_80E2 = param_06; + if(!isdefined(level.unlock_array)) + { + level.unlock_array = []; + } + + if(!isdefined(level.unlock_array[param_01])) + { + level.unlock_array[param_01] = []; + } + + level.unlock_array[param_01][level.unlock_array[param_01].size] = var_07; +} + +//Function Number: 6 +pick_starting_location_so(param_00) +{ + if(isdefined(param_00) && param_00) + { + if(isdefined(level.skip_playersetstreamorigin) && level.skip_playersetstreamorigin) + { + return undefined; + } + } + + if(isdefined(level.pmc_match) && level.pmc_match) + { + return pick_starting_location_pmc(param_00); + } + + var_01 = getentarray("info_player_start_so","classname"); + if(var_01.size <= 0) + { + var_01 = getentarray("info_player_start","classname"); + } + + var_02 = common_scripts\utility::random(var_01); + if(isdefined(param_00) && param_00) + { + return var_02.origin; + } + + func_147F(level.player,var_02); + if(maps\_utility::func_E89()) + { + var_03 = getentarray("info_player_start_soPlayer2","classname"); + if(var_03.size > 0) + { + var_04 = maps\_utility::getclosest(var_02.origin,var_03); + func_147F(level.player2,var_04); + return; + } + + place_player2_near_player1(); + } +} + +//Function Number: 7 +isdefendmatch() +{ + return level.pmc_gametype == "mode_defend"; +} + +//Function Number: 8 +pick_starting_location_pmc(param_00) +{ + if(isdefendmatch()) + { + var_01 = getentarray("info_player_start_pmcDefend","classname"); + } + else + { + var_01 = getentarray("info_player_start_pmc","classname"); + } + + var_02 = []; + var_03 = undefined; + foreach(var_05 in level.players) + { + if(!var_02.size) + { + var_03 = common_scripts\utility::random(var_01); + } + else + { + var_03 = maps\_utility::get_closest_exclude(var_03.origin,var_01,var_02); + } + + if(isdefined(param_00) && param_00) + { + return var_03.origin; + } + + var_05 setorigin(var_03.origin); + var_05 setplayerangles(var_03.angles); + var_02[var_02.size] = var_03; + } +} + +//Function Number: 9 +func_147F(param_00,param_01) +{ + param_00 setorigin(param_01.origin); + if(isdefined(param_01.angles)) + { + param_00 setplayerangles(param_01.angles); + } +} + +//Function Number: 10 +place_player2_near_player1() +{ + level.player2 setplayerangles(level.player.angles + (0,-25,0)); + level.player2 setorigin(level.player.origin); + var_00 = spawnstruct(); + var_00.entity = level.player2; + var_00.right = -20; + var_00.forward = -50; + var_00 maps\_utility::translate_local(); + level.player2 setorigin(level.player2.origin); +} + +//Function Number: 11 +specialops_remove_entity_check(param_00) +{ + if(specialops_remove_flag_check(param_00)) + { + return 1; + } + + if(specialops_remove_name_check(param_00)) + { + return 1; + } + + return 0; +} + +//Function Number: 12 +specialops_remove_flag_check(param_00) +{ + if(!isdefined(self.script_specialops)) + { + return 0; + } + + if(self.script_specialops == param_00) + { + return 0; + } + + return 1; +} + +//Function Number: 13 +specialops_remove_name_check(param_00) +{ + if(!isdefined(self.var_1484)) + { + return 0; + } + + if(param_00 == 0) + { + return 1; + } + + var_01 = strtok(self.var_1484,":;, "); + var_02 = 1; + foreach(var_04 in var_01) + { + if(var_04 == level.script) + { + var_02 = 0; + break; + } + } + + return var_02; +} + +//Function Number: 14 +so_create_hud_item_delay_draw(param_00) +{ + param_00.alpha = 0; + while(!so_hud_can_show()) + { + wait 0.5; + } + + if(!isdefined(param_00)) + { + return; + } + + if(so_hud_can_toggle(param_00)) + { + switch(self.so_infohud_toggle_state) + { + case "on": + case "none": + param_00 maps\_hud_util::fade_over_time(1,0.5); + break; + + case "off": + param_00 maps\_hud_util::fade_over_time(0,0.5); + break; + + default: + break; + } + } + else + { + param_00 maps\_hud_util::fade_over_time(1,0.5); + } + + if(!maps\_utility::ent_flag("so_hud_can_toggle")) + { + maps\_utility::func_FA4("so_hud_can_toggle"); + } +} + +//Function Number: 15 +so_hud_can_show() +{ + if(isdefined(level.so_waiting_for_players) && level.so_waiting_for_players) + { + return 0; + } + + if(isdefined(level.var_142D) && level.var_142D) + { + return 1; + } + + if(!isdefined(self.so_hud_show_time)) + { + return 1; + } + + return gettime() > self.so_hud_show_time; +} + +//Function Number: 16 +so_hud_can_toggle(param_00) +{ + if(!isdefined(param_00.var_142F) || !param_00.var_142F) + { + return 0; + } + + if(!isdefined(self.so_infohud_toggle_state)) + { + return 0; + } + + return 1; +} + +//Function Number: 17 +challenge_timer_player_setup(param_00,param_01,param_02,param_03) +{ + level endon("challenge_timer_expired"); + level endon("new_challenge_timer"); + level endon("special_op_terminated"); + var_04 = undefined; + if(isdefined(param_03) && param_03) + { + var_04 = 1; + } + + var_05 = maps\_specialops::func_1423(); + self.hud_so_timer_msg = maps\_specialops::func_127E(1,var_05,param_02,self,var_04); + if(isdefined(level.challenge_time_limit)) + { + self.hud_so_timer_time = maps\_specialops::func_127E(1,var_05,undefined,self,var_04); + self.hud_so_timer_time settenthstimerstatic(level.challenge_time_limit); + } + else + { + self.hud_so_timer_time = maps\_specialops::func_127E(1,var_05,&"SPECIAL_OPS_TIME_NULL",self,var_04); + } + + self.hud_so_timer_time.alignx = "left"; + if(!isdefined(param_03) || param_03 == 0) + { + thread maps\_specialops::info_hud_wait_for_player(); + thread maps\_specialops::info_hud_handle_fade(self.hud_so_timer_msg); + thread maps\_specialops::info_hud_handle_fade(self.hud_so_timer_time); + } + else + { + self.so_infohud_toggle_state = "none"; + self.hud_so_timer_msg.alpha = 0; + self.hud_so_timer_time.alpha = 0; + } + + challenge_timer_wait_start(self.hud_so_timer_msg,self.hud_so_timer_time,param_00); + if(isdefined(level.challenge_time_limit)) + { + level.so_challenge_time_left = level.challenge_time_limit; + thread challenge_timer_show_nudge(self.hud_so_timer_msg,self.hud_so_timer_time); + thread challenge_timer_show_hurry(self.hud_so_timer_msg,self.hud_so_timer_time); + thread func_1492(self.hud_so_timer_msg,self.hud_so_timer_time); + thread challenge_timer_destroy_prematurely(self.hud_so_timer_msg,self.hud_so_timer_time); + } + + thread func_1494(self.hud_so_timer_msg,self.hud_so_timer_time,param_01); +} + +//Function Number: 18 +challenge_timer_detect_3quarter() +{ + if(!common_scripts\utility::flag_exist("so_challenge_is_3quarter")) + { + common_scripts\utility::flag_init("so_challenge_is_3quarter"); + } + + common_scripts\utility::flag_wait("so_challenge_is_3quarter"); + maps\_specialops::so_dialog_progress_update(3,4); +} + +//Function Number: 19 +challenge_timer_detect_halfway() +{ + if(!common_scripts\utility::flag_exist("so_challenge_is_halfway")) + { + common_scripts\utility::flag_init("so_challenge_is_halfway"); + } + + common_scripts\utility::flag_wait("so_challenge_is_halfway"); + maps\_specialops::so_dialog_progress_update(2,4); +} + +//Function Number: 20 +func_1489() +{ + if(!common_scripts\utility::flag_exist("so_challenge_is_quarter")) + { + common_scripts\utility::flag_init("so_challenge_is_quarter"); + } + + common_scripts\utility::flag_wait("so_challenge_is_quarter"); + maps\_specialops::so_dialog_progress_update(1,4); +} + +//Function Number: 21 +challenge_timer_wait_start(param_00,param_01,param_02) +{ + level endon("special_op_terminated"); + if(isdefined(param_02)) + { + common_scripts\utility::flag_wait(param_02); + } + + foreach(var_04 in level.players) + { + if(!var_04 so_hud_can_show()) + { + var_04.so_hud_show_time = gettime(); + } + } + + if(!isdefined(level.challenge_start_time)) + { + if(challenge_timer_should_play_alarm()) + { + level.player playsound("arcademode_zerodeaths"); + } + + level.challenge_start_time = gettime(); + } + else + { + level.var_80E3 = gettime(); + } + + param_01.label = ""; + if(isdefined(level.challenge_time_limit)) + { + param_01 settenthstimer(level.challenge_time_limit); + return; + } + + param_01 settenthstimerup(0); +} + +//Function Number: 22 +challenge_timer_should_play_alarm() +{ + if(isdefined(level.challenge_time_limit)) + { + return 1; + } + + foreach(var_01 in level.players) + { + if(var_01.so_infohud_toggle_state != "off") + { + return 1; + } + } + + return 0; +} + +//Function Number: 23 +challenge_timer_show_nudge(param_00,param_01) +{ + if(!validate_timer(level.challenge_time_nudge)) + { + return; + } + + level endon("challenge_timer_passed"); + level endon("new_challenge_timer"); + level endon("special_op_terminated"); + while(level.so_challenge_time_left > level.challenge_time_nudge) + { + wait 0.1; + } + + param_00 set_hudelem_yellow(); + param_01 set_hudelem_yellow(); + if(!challenge_timer_be_silent()) + { + thread maps\_specialops::func_1442(); + } +} + +//Function Number: 24 +challenge_timer_show_hurry(param_00,param_01) +{ + if(!validate_timer(level.challenge_time_hurry)) + { + return; + } + + level endon("challenge_timer_passed"); + level endon("new_challenge_timer"); + level endon("special_op_terminated"); + while(level.so_challenge_time_left > level.challenge_time_hurry) + { + wait 0.1; + } + + param_00 set_hudelem_red(); + param_01 set_hudelem_red(); + if(!challenge_timer_be_silent()) + { + thread maps\_specialops::so_dialog_time_low_hurry(); + } +} + +//Function Number: 25 +challenge_timer_be_silent() +{ + if(self != level.player) + { + return 1; + } + + if(!isdefined(level.challenge_time_silent)) + { + return 0; + } + + return level.challenge_time_silent; +} + +//Function Number: 26 +challenge_timer_thread() +{ + level endon("special_op_terminated"); + level notify("stop_challenge_timer_thread"); + level endon("stop_challenge_timer_thread"); + while(level.so_challenge_time_left > 0) + { + wait 0.05; + level.so_challenge_time_left = level.so_challenge_time_left - 0.05; + thread challenge_timer_give_alert(); + } + + level notify("challenge_timer_failed"); +} + +//Function Number: 27 +challenge_timer_give_alert() +{ + if(challenge_timer_should_pulse()) + { + foreach(var_01 in level.players) + { + var_01.hud_so_timer_msg thread maps\_specialops::func_1410(); + var_01.hud_so_timer_time thread maps\_specialops::func_1410(); + } + + if(level.so_challenge_time_beep < 0) + { + level.player playsound("arcademode_kill_streak_lost"); + return; + } + + level.player playsound("so_countdown_beep"); + } +} + +//Function Number: 28 +challenge_timer_should_pulse() +{ + if(level.so_challenge_time_left > level.so_challenge_time_beep) + { + return 0; + } + + for(var_00 = 0;var_00 <= level.challenge_time_beep_start;var_00++) + { + if(level.so_challenge_time_left > var_00) + { + if(level.so_challenge_time_beep < var_00) + { + level.so_challenge_time_beep = var_00 + 1; + } + + continue; + } + + level.so_challenge_time_beep = var_00 - 1; + return 1; + } + + return 0; +} + +//Function Number: 29 +func_1492(param_00,param_01) +{ + if(!validate_timer(level.challenge_time_limit)) + { + return; + } + + level endon("challenge_timer_passed"); + level endon("new_challenge_timer"); + level endon("special_op_terminated"); + thread challenge_timer_thread(); + level waittill("challenge_timer_failed"); + common_scripts\utility::flag_set("challenge_timer_expired"); + challenge_timer_destroy(param_00,param_01); + if(self == level.player) + { + thread maps\_specialops::so_dialog_mission_failed_time(); + } + + var_02 = "@SPECIAL_OPS_FAILURE_HINT_TIME"; + if(isdefined(level.so_deadquote_time)) + { + var_02 = level.so_deadquote_time; + } + + maps\_specialops::func_1407(var_02,"ui_time_failure"); + if(self == level.player) + { + maps\_utility::func_13EE(); + } +} + +//Function Number: 30 +func_1494(param_00,param_01,param_02) +{ + level endon("challenge_timer_expired"); + level endon("new_challenge_timer"); + if(common_scripts\utility::flag_exist("individual_timers") && common_scripts\utility::flag("individual_timers")) + { + maps\_utility::func_121C(param_02); + } + else + { + common_scripts\utility::flag_wait(param_02); + } + + common_scripts\utility::flag_set("challenge_timer_passed"); + level.challenge_end_time = gettime(); + var_03 = common_scripts\utility::ter_op(isdefined(level.var_80E3),level.var_80E3,level.challenge_start_time); + var_04 = maps\_utility::round_millisec_on_sec(level.challenge_end_time - var_03,1,0); + var_05 = var_04 / 1000; + if(isdefined(level.challenge_time_limit)) + { + var_05 = level.challenge_time_limit - var_05; + } + + if(var_05 <= 0) + { + var_05 = 0.1; + } + + param_01 settenthstimerstatic(var_05); + if(!common_scripts\utility::flag_exist("individual_timers")) + { + return; + } + + if(common_scripts\utility::flag("individual_timers")) + { + return; + } + + challenge_timer_destroy(param_00,param_01); +} + +//Function Number: 31 +challenge_timer_destroy_prematurely(param_00,param_01) +{ + level waittill("new_challenge_timer"); + challenge_timer_destroy(param_00,param_01,1); +} + +//Function Number: 32 +challenge_timer_destroy(param_00,param_01,param_02) +{ + if(isdefined(param_00)) + { + param_00 thread maps\_specialops::so_remove_hud_item(param_02); + } + + if(isdefined(param_01)) + { + param_01 thread maps\_specialops::so_remove_hud_item(param_02); + } +} + +//Function Number: 33 +validate_timer(param_00) +{ + if(!isdefined(param_00)) + { + return 0; + } + + if(param_00 <= 0) + { + return 0; + } + + return 1; +} + +//Function Number: 34 +func_1498() +{ + if(getdvarint("so_nofail")) + { + return; + } + + thread maps\_specialops::so_dialog_mission_failed_generic(); + missionfailed(); + maps\_endmission::so_eog_summary_calculate(0); + specialops_mission_over_setup(0); + level notify("so_generate_deathquote"); + maps\_endmission::so_eog_summary_display(); +} + +//Function Number: 35 +specialops_mission_over_setup(param_00) +{ + setdvar("ui_opensummary",1); + if(param_00) + { + setdvar("ui_mission_success",1); + } + else + { + setdvar("ui_mission_success",0); + } + + if(common_scripts\utility::flag("special_op_terminated")) + { + } + + if(!isdefined(level.challenge_start_time)) + { + level.challenge_start_time = gettime(); + } + + if(!isdefined(level.challenge_end_time)) + { + level.challenge_end_time = gettime(); + } + + common_scripts\utility::flag_set("special_op_terminated"); + level notify("stop_music"); + thread maps\_utility_code::mission_recon(param_00); + var_01 = undefined; + if(isdefined(level.var_1499) && level.var_1499) + { + var_01 = pick_starting_location_pmc(1); + } + else + { + var_01 = pick_starting_location_so(1); + } + + if(isdefined(var_01)) + { + foreach(var_03 in level.players) + { + var_03 playersetstreamorigin(var_01); + } + } + + ambientstop(2); + maps\_utility::music_stop(1); + if(param_00) + { + thread func_14A1(); + } + else + { + thread specialops_mission_over_setup_failure(); + } + + foreach(var_03 in level.players) + { + var_03 allowjump(0); + var_03 disableweapons(); + var_03 disableusability(); + var_03 enableinvulnerability(); + var_03.ignoreme = 1; + } + + thread specialops_blur_player_screen(); + if(param_00) + { + wait 0.5; + foreach(var_03 in level.players) + { + var_03 setup_leaderboard_data(); + } + + wait 2.5; + foreach(var_03 in level.players) + { + var_03 uploadleaderboards(); + } + } + else + { + wait 3; + } + + thread specialops_mission_over_remove_ai(); + if(!common_scripts\utility::flag("special_op_no_unlink")) + { + foreach(var_03 in level.players) + { + var_03 unlink(); + } + } + + foreach(var_03 in level.players) + { + var_03 freezecontrols(1); + } + + func_14AB(param_00); +} + +//Function Number: 36 +setup_leaderboard_data() +{ + if(maps\_utility::func_E89() && level.players.size == 2) + { + self setplayerdata("round","xuidTeammate",maps\_utility::get_other_player(self) getxuid()); + } + + self setplayerdata("round","timePlayed",self.var_128E["time"]); + self setplayerdata("round","kills",self.var_128E["kills"]); + var_00 = 0; + if(maps\_utility::is_survival()) + { + self setplayerdata("round","score",self.var_128E["score"]); + self setplayerdata("round","wave",self.var_128E["wave"]); + var_01 = 0; + var_02 = 0; + if(self.stats["weapon"].size > 0) + { + foreach(var_04 in self.stats["weapon"]) + { + var_01 = var_01 + var_04.shots_fired; + var_02 = var_02 + var_04.shots_hit; + } + } + + self setplayerdata("round","bulletsFired",var_01); + self setplayerdata("round","bulletsHit",var_02); + self setplayerdata("round","headshots",self.game_performance["headshot"]); + self setplayerdata("round","revives",self.game_performance["revives"]); + self setplayerdata("round","credits",self.game_performance["credits"]); + self setplayerdata("round","totalXp",self.game_performance["credits"]); + return; + } + + var_06 = level.specops_reward_gameskill; + if(isdefined(self.var_1507)) + { + var_06 = self.var_1507; + } + + self setplayerdata("round","difficulty",var_06); + self setplayerdata("round","score",self.var_128E["score"]); +} + +//Function Number: 37 +specialops_blur_player_screen() +{ + foreach(var_01 in level.players) + { + wait 0.1; + var_01 setblurforplayer(6,1); + } +} + +//Function Number: 38 +specialops_mission_over_remove_ai() +{ + wait 0.25; + var_00 = getaiarray(); + var_00 = maps\_utility::array_merge(var_00,getaispeciesarray("axis","dog")); + foreach(var_02 in var_00) + { + if(isdefined(var_02.var_149F) && var_02.var_149F == 1) + { + continue; + } + + if(isdefined(var_02.magic_bullet_shield)) + { + var_02 maps\_utility::stop_magic_bullet_shield(); + } + + var_02 delete(); + } +} + +//Function Number: 39 +func_14A1() +{ + common_scripts\utility::flag_set("special_op_succeeded"); + foreach(var_01 in level.players) + { + var_02 = maps\_hud_util::func_5BF("white",0,var_01); + var_02.color = (0.7,0.7,1); + var_02 thread maps\_hud_util::fade_over_time(0.25,2); + } + + if(isdefined(level.suppress_challenge_success_print)) + { + return; + } + + var_04 = maps\_specialops::func_127E(3,0,&"SPECIAL_OPS_CHALLENGE_SUCCESS"); + var_04.alignx = "center"; + var_04.horzalign = "center"; + var_04 func_14C6(); + var_04 setpulsefx(60,2500,500); + wait 1.5; + var_05 = level.so_campaign; + if(var_05 == "hijack" || var_05 == "fso") + { + var_05 = "delta"; + } + + maps\_utility::music_play("so_victory_" + var_05,undefined,0,1); +} + +//Function Number: 40 +specialops_mission_over_setup_failure() +{ + common_scripts\utility::flag_set("special_op_failed"); + var_00 = maps\_specialops::func_127E(3,0,&"SPECIAL_OPS_CHALLENGE_FAILURE"); + var_00.hidewhendead = 0; + var_00.alignx = "center"; + var_00.horzalign = "center"; + var_00 set_hudelem_red(); + var_00 setpulsefx(60,2500,500); + foreach(var_02 in level.players) + { + var_03 = maps\_hud_util::func_5BF("white",0,var_02); + var_03.color = (1,0.4,0.4); + var_03 thread maps\_hud_util::fade_over_time(0.25,2); + } + + wait 1.5; + var_05 = level.so_campaign; + if(var_05 == "hijack" || var_05 == "fso") + { + var_05 = "delta"; + } + + maps\_utility::music_play("so_defeat_" + var_05,undefined,0,1); +} + +//Function Number: 41 +is_current_level_locked() +{ + var_00 = tablelookup("sp/specOpsTable.csv",1,level.script,13); + var_01 = int(tablelookup("sp/specOpsTable.csv",1,var_00,5)); + var_02 = maps\_rank::getrank(); + return var_02 < var_01; +} + +//Function Number: 42 +func_14A5() +{ + return 1; +} + +//Function Number: 43 +func_14A6() +{ + return func_14A5() && !is_current_level_locked(); +} + +//Function Number: 44 +specialops_achievement_by_stars(param_00) +{ + if(maps\_utility::is_survival()) + { + } +} + +//Function Number: 45 +func_14A8(param_00,param_01,param_02) +{ + var_03 = 0; + for(var_04 = param_01;var_04 < param_02;var_04++) + { + var_03 = var_03 + int(max(0,int(param_00[var_04]) - 1)); + } + + return var_03; +} + +//Function Number: 46 +get_num_of_levels_with_star(param_00,param_01) +{ + var_02 = param_00.size; + if(var_02 > level.specopssettings.var_14AA.size) + { + var_02 = level.specopssettings.var_14AA.size; + } + + var_03 = 0; + for(var_04 = 0;var_04 < var_02;var_04++) + { + if(max(0,int(param_00[var_04]) - 1) >= param_01) + { + var_03++; + } + } + + return var_03; +} + +//Function Number: 47 +func_14AB(param_00) +{ + if(!isdefined(param_00) || !param_00) + { + return; + } + + foreach(var_02 in level.players) + { + if(!var_02 func_14A6()) + { + var_02.var_14AC = 1; + } + } + + if(issplitscreen() && level.ps3) + { + level.player2.var_14AC = 0; + } + + var_04 = tablelookup("sp/specOpsTable.csv",1,level.script,9); + if(isdefined(var_04) && var_04 != "") + { + foreach(var_02 in level.players) + { + if(isdefined(var_02.var_14AC) && var_02.var_14AC) + { + continue; + } + + var_06 = var_02 getlocalplayerprofiledata(var_04); + if(!isdefined(var_06)) + { + continue; + } + + var_07 = var_06 == 0; + level.var_14AE = 0; + if(var_07) + { + level.var_14AE = 1; + } + + var_08 = var_02.var_128E["score"]; + if(var_07 || var_08 > var_06) + { + var_02 setlocalplayerprofiledata(var_04,var_08); + } + + if(!var_07 && var_08 > var_06) + { + var_02.eog_bestscore = 1; + var_02.eog_bestscore_value = var_08; + } + } + } + + var_0A = level.specopssettings maps\_endmission::func_1452(level.script); + if(!isdefined(var_0A)) + { + missionsuccess(level.script); + return; + } + + level.specopssettings maps\_endmission::func_14B1(var_0A); + foreach(var_02 in level.players) + { + if(isdefined(var_02.var_14AC) && var_02.var_14AC) + { + continue; + } + + var_0C = var_02 getlocalplayerprofiledata("missionSOHighestDifficulty"); + if(!isdefined(var_0C)) + { + continue; + } + + var_0D = int(tablelookup("sp/specopstable.csv",0,"survival_count",1)); + var_0E = int(tablelookup("sp/specopstable.csv",0,"mission_count",1)); + var_0F = 0; + var_10 = 0; + if(maps\_utility::is_survival()) + { + var_0F = func_14A8(var_0C,0,var_0D); + var_11 = 100 * var_0F / var_0D * 3; + } + else + { + var_0F = func_14A8(var_0C,var_0D,var_0D + var_0E); + var_11 = 100 * var_0F / var_0E * 3; + } + + if(int(var_11 * 100) % 100 >= 0.5) + { + var_10 = int(var_11) + 1; + } + else + { + var_10 = int(var_11); + } + + var_02 thread maps\_specialops::func_80E4("BRAG_RAGS"); + var_02 thread maps\_specialops::func_80E4("TACTICIAN"); + var_02 thread maps\_specialops::func_80E4("OVERACHIEVER"); + var_16 = var_02 getlocalplayerprofiledata("percentCompleteSO"); + var_17 = var_16; + var_18 = int(var_16 / 100); + var_19 = int(var_16 % 100); + if(maps\_utility::is_survival()) + { + var_17 = var_18 * 100 + var_0F; + } + else + { + var_17 = var_19 + var_0F * 100; + } + + var_02 setlocalplayerprofiledata("percentCompleteSO",var_17); + } + + updategamerprofileall(); +} + +//Function Number: 48 +wait_all_players_are_touching(param_00) +{ + for(;;) + { + param_00 waittill("trigger"); + if(!maps\_utility::func_E89()) + { + return; + } + + level.player thread waiting_message_hide(); + level.player2 thread waiting_message_hide(); + if(!level.player istouching(param_00)) + { + level.player2 thread display_waiting_message(); + continue; + } + + if(!level.player2 istouching(param_00)) + { + level.player thread display_waiting_message(); + continue; + } + + break; + } +} + +//Function Number: 49 +wait_all_players_have_touched(param_00,param_01) +{ + var_02 = 0; + var_03 = 0; + for(;;) + { + param_00 waittill("trigger"); + if(!maps\_utility::func_E89()) + { + return; + } + + level.player thread waiting_message_hide(); + level.player2 thread waiting_message_hide(); + if(level.player istouching(param_00)) + { + var_02 = 1; + if(!var_03 && !level.player2 istouching(param_00)) + { + thread determine_waiting_message(level.player,param_01); + continue; + } + } + + if(level.player2 istouching(param_00)) + { + var_03 = 1; + if(!var_02 && !level.player istouching(param_00)) + { + thread determine_waiting_message(level.player2,param_01); + continue; + } + } + + break; + } +} + +//Function Number: 50 +disable_mission_end_trigger(param_00) +{ + level waittill("special_op_terminated"); + param_00 common_scripts\utility::trigger_off(); +} + +//Function Number: 51 +determine_waiting_message(param_00,param_01) +{ + switch(param_01) + { + case "all": + param_00 display_waiting_message(); + break; + + case "any": + param_00 display_waiting_message(); + break; + + case "freeze": + param_00 display_frozen_message(); + break; + } +} + +//Function Number: 52 +display_waiting_message() +{ + self endon("death"); + level endon("challenge_timer_passed"); + level endon("challenge_timer_expired"); + level endon("special_op_terminated"); + level notify("players_touching_hint"); + level endon("players_touching_hint"); + if(!isdefined(self)) + { + return; + } + + if(!isdefined(self.waiting_hud)) + { + self.waiting_hud = create_waiting_message(self); + } + else + { + self.waiting_hud.alpha = 1; + } + + wait 0.05; + self.waiting_hud fadeovertime(0.25); + self.waiting_hud.alpha = 0; +} + +//Function Number: 53 +display_frozen_message() +{ + if(!isdefined(self)) + { + return; + } + + if(isdefined(self.frozen_and_waiting) && self.frozen_and_waiting) + { + return; + } + + self.frozen_and_waiting = 1; + self enableinvulnerability(); + self freezecontrols(1); + self.ignoreme = 1; + self setblurforplayer(6,1); + self.waiting_hud = create_waiting_message(self); +} + +//Function Number: 54 +create_waiting_message(param_00) +{ + self notify("rebuilding_waiting_hud"); + self endon("rebuilding_waiting_hud"); + var_01 = maps\_specialops::func_127E(3,0,&"SPECIAL_OPS_WAITING_OTHER_PLAYER",param_00); + var_01.alignx = "center"; + var_01.horzalign = "center"; + var_01 func_14C6(); + thread waiting_message_delete_on_so_end(var_01); + return var_01; +} + +//Function Number: 55 +waiting_message_hide() +{ + if(!isdefined(self)) + { + return; + } + + if(!isdefined(self.waiting_hud)) + { + return; + } + + if(isdefined(self.frozen_and_waiting) && self.frozen_and_waiting) + { + return; + } + + self.waiting_hud fadeovertime(0.25); + self.waiting_hud.alpha = 0; +} + +//Function Number: 56 +waiting_message_delete_on_so_end(param_00) +{ + self endon("rebuilding_waiting_hud"); + level waittill("special_op_terminated"); + if(isdefined(param_00)) + { + param_00 destroy(); + } +} + +//Function Number: 57 +disable_saving() +{ + common_scripts\utility::flag_set("disable_autosaves"); + for(;;) + { + common_scripts\utility::flag_wait("can_save"); + common_scripts\utility::flag_clear("can_save"); + } +} + +//Function Number: 58 +disable_escape_warning() +{ + if(common_scripts\utility::flag("player_has_escaped")) + { + return 1; + } + + if(is_touching_escape_trigger()) + { + return 0; + } + + return 1; +} + +//Function Number: 59 +is_touching_escape_trigger() +{ + if(!isdefined(level.escape_warning_triggers)) + { + return 0; + } + + foreach(var_01 in level.escape_warning_triggers) + { + if(self istouching(var_01)) + { + return 1; + } + } + + return 0; +} + +//Function Number: 60 +ping_escape_warning() +{ + if(isdefined(self.ping_escape_splash)) + { + return; + } + + self endon("death"); + self.ping_escape_splash = maps\_specialops::func_127E(3.5,0,&"SPECIAL_OPS_ESCAPE_WARNING",self); + self.ping_escape_splash.alignx = "center"; + self.ping_escape_splash.horzalign = "center"; + while(func_14BB()) + { + self.ping_escape_splash.alpha = 1; + self.ping_escape_splash fadeovertime(1); + self.ping_escape_splash.alpha = 0.5; + self.ping_escape_splash.fontscale = 1.5; + self.ping_escape_splash changefontscaleovertime(1); + self.ping_escape_splash.fontscale = 1; + wait 1; + } + + self.ping_escape_splash.alpha = 0.5; + self.ping_escape_splash fadeovertime(0.25); + self.ping_escape_splash.alpha = 0; + wait 0.25; + self.escape_hint_active = undefined; + if(isdefined(self.ping_escape_splash)) + { + self.ping_escape_splash destroy(); + } +} + +//Function Number: 61 +func_14BB() +{ + if(common_scripts\utility::flag("special_op_terminated")) + { + return 0; + } + + if(!is_touching_escape_trigger()) + { + return 0; + } + + return 1; +} + +//Function Number: 62 +enable_escape_failure_auto() +{ + level endon("special_op_terminated"); + for(;;) + { + self waittill("trigger",var_00); + if(!isplayer(var_00)) + { + continue; + } + + if(isdefined(var_00.var_14BC) && var_00.var_14BC) + { + continue; + } + + break; + } + + maps\_specialops::func_1407("@DEADQUOTE_SO_LEFT_PLAY_AREA"); + maps\_utility::func_13EE(); +} + +//Function Number: 63 +enable_escape_warning_auto_init() +{ + if(common_scripts\utility::flag_exist("so_escape_warning") && common_scripts\utility::flag("so_escape_warning")) + { + return; + } + + common_scripts\utility::flag_init("so_escape_warning"); + foreach(var_01 in level.players) + { + var_01 maps\_utility::ent_flag_init("so_escape_hint_active"); + } +} + +//Function Number: 64 +enable_escape_warning_auto() +{ + level endon("special_op_terminated"); + enable_escape_warning_auto_init(); + for(;;) + { + self waittill("trigger",var_00); + if(!isplayer(var_00)) + { + continue; + } + + if(isdefined(var_00.var_14BC) && var_00.var_14BC) + { + continue; + } + + var_00 thread show_escape_warning_auto(self); + } +} + +//Function Number: 65 +show_escape_warning_auto(param_00) +{ + if(maps\_utility::ent_flag("so_escape_hint_active")) + { + return; + } + + maps\_utility::func_FA4("so_escape_hint_active"); + thread ping_escape_warning_auto(param_00); +} + +//Function Number: 66 +ping_escape_warning_auto(param_00) +{ + self notify("so_escape_hint_ping"); + self endon("so_escape_hint_ping"); + thread remove_escape_warning_auto(param_00); + if(!isdefined(self.var_14C0)) + { + self.var_14C0 = maps\_specialops::func_127E(3.5,0,&"SPECIAL_OPS_ESCAPE_WARNING",self); + self.var_14C0.alignx = "center"; + self.var_14C0.horzalign = "center"; + if(isdefined(level.so_escape_warning_colorfunc)) + { + self.var_14C0 thread [[ level.so_escape_warning_colorfunc ]](); + } + } + + while(ping_escape_warning_auto_valid()) + { + self.var_14C0.alpha = 1; + self.var_14C0 fadeovertime(1); + self.var_14C0.alpha = 0.5; + self.var_14C0.fontscale = 1.5; + self.var_14C0 changefontscaleovertime(1); + self.var_14C0.fontscale = 1; + wait 1; + } + + self.var_14C0.alpha = 0.5; + self.var_14C0 fadeovertime(0.25); + self.var_14C0.alpha = 0; + wait 0.25; + self.var_14C0 destroy(); +} + +//Function Number: 67 +remove_escape_warning_auto(param_00) +{ + while(self istouching(param_00)) + { + wait 0.05; + } + + maps\_utility::ent_flag_clear("so_escape_hint_active"); +} + +//Function Number: 68 +ping_escape_warning_auto_valid() +{ + if(!isalive(self)) + { + return 0; + } + + if(common_scripts\utility::flag("special_op_terminated")) + { + return 0; + } + + return maps\_utility::ent_flag("so_escape_hint_active"); +} + +//Function Number: 69 +func_143B(param_00,param_01,param_02) +{ + if(isdefined(param_01)) + { + wait param_01; + } + + if(isdefined(param_02) && param_02) + { + maps\_utility::func_14C4(); + } + + maps\_utility::func_DDF(param_00); +} + +//Function Number: 70 +specialops_dialog_init() +{ + level.scr_radio["so_tf_1_plyr_prep"] = "so_tf_1_plyr_prep"; + level.scr_radio["so_tf_1_success_generic"] = "so_tf_1_success_generic"; + level.scr_radio["so_tf_1_success_jerk"] = "so_tf_1_success_jerk"; + level.scr_radio["so_tf_1_success_best"] = "so_tf_1_success_best"; + level.scr_radio["so_tf_1_fail_generic"] = "so_tf_1_fail_generic"; + level.scr_radio["so_tf_1_fail_generic_jerk"] = "so_tf_1_fail_generic_jerk"; + level.scr_radio["so_tf_1_fail_time"] = "so_tf_1_fail_time"; + level.scr_radio["so_tf_1_fail_bleedout"] = "so_tf_1_fail_bleedout"; + level.scr_radio["so_tf_1_time_generic"] = "so_tf_1_time_generic"; + level.scr_radio["so_tf_1_time_hurry"] = "so_tf_1_time_hurry"; + level.scr_radio["so_tf_1_civ_kill_warning"] = "so_tf_1_civ_kill_warning"; + level.scr_radio["so_tf_1_progress_5more"] = "so_tf_1_progress_5more"; + level.scr_radio["so_tf_1_progress_4more"] = "so_tf_1_progress_4more"; + level.scr_radio["so_tf_1_progress_3more"] = "so_tf_1_progress_3more"; + level.scr_radio["so_tf_1_progress_2more"] = "so_tf_1_progress_2more"; + level.scr_radio["so_tf_1_progress_1more"] = "so_tf_1_progress_1more"; + level.scr_radio["so_tf_1_time_status_late"] = "so_tf_1_time_status_late"; + level.scr_radio["so_tf_1_time_status_good"] = "so_tf_1_time_status_good"; + level.scr_radio["so_tf_1_progress_3quarter"] = "so_tf_1_progress_3quarter"; + level.scr_radio["so_tf_1_progress_half"] = "so_tf_1_progress_half"; + level.scr_radio["so_tf_1_progress_quarter"] = "so_tf_1_progress_quarter"; +} + +//Function Number: 71 +set_hudelem_white() +{ + maps\_specialops::set_hud_white(); +} + +//Function Number: 72 +func_14C6() +{ + maps\_specialops::set_hud_blue(); +} + +//Function Number: 73 +set_hudelem_green() +{ + maps\_specialops::set_hud_green(); +} + +//Function Number: 74 +set_hudelem_yellow() +{ + maps\_specialops::set_hud_yellow(); +} + +//Function Number: 75 +set_hudelem_red() +{ + maps\_specialops::set_hud_red(); +} + +//Function Number: 76 +set_hudelem_grey() +{ + maps\_specialops::set_hud_grey(); +} + +//Function Number: 77 +func_1418(param_00,param_01,param_02) +{ + self endon("update_hud_pulse"); + self endon("destroying"); + self endon("death"); + self.fontscale = param_00; + self changefontscaleovertime(param_02); + self.fontscale = param_01; + wait param_02; +} + +//Function Number: 78 +so_hud_pulse_loop() +{ + self endon("update_hud_pulse"); + self endon("destroying"); + self endon("death"); + if(self.pulse_start_big) + { + func_1418(self.pulse_scale_big,self.var_14CC,self.pulse_time); + } + + while(isdefined(self.var_1413) && self.var_1413) + { + func_1418(self.var_14CC,self.var_14CE,self.pulse_time_loop); + func_1418(self.var_14CE,self.var_14CC,self.pulse_time_loop); + } +} + +//Function Number: 79 +func_1411() +{ + if(!isdefined(self)) + { + return 0; + } + + if(!isdefined(self.pulse_time)) + { + self.pulse_time = 0.5; + } + + if(!isdefined(self.pulse_scale_normal)) + { + self.pulse_scale_normal = 1; + } + + if(!isdefined(self.pulse_scale_big)) + { + self.pulse_scale_big = 1.6; + } + + if(!isdefined(self.var_1413)) + { + self.var_1413 = 0; + } + + if(!isdefined(self.pulse_time_loop)) + { + self.pulse_time_loop = 1; + } + + if(!isdefined(self.var_14CC)) + { + self.var_14CC = 1; + } + + if(!isdefined(self.var_14CE)) + { + self.var_14CE = 1.15; + } + + if(!isdefined(self.pulse_start_big)) + { + self.pulse_start_big = 1; + } + + return 1; +} + +//Function Number: 80 +func_13A1() +{ + level endon("special_op_terminated"); + common_scripts\utility::flag_init("so_player_death_nofail"); + common_scripts\utility::array_thread(level.players,::func_14CF); + level waittill("so_player_has_died"); + if(common_scripts\utility::flag("so_player_death_nofail")) + { + return; + } + + maps\_utility::func_13EE(); +} + +//Function Number: 81 +func_14CF() +{ + level endon("special_op_terminated"); + self waittill("death"); + level notify("so_player_has_died"); +} + +//Function Number: 82 +so_special_failure_hint_reset_dvars(param_00) +{ + setdvar("ui_dog_death",0); + setdvar("ui_vehicle_death",0); + setdvar("ui_destructible_death",0); + setdvar("ui_barrel_death",0); + setdvar("ui_grenade_death",0); + setdvar("ui_time_failure",0); + setdvar("ui_ff_death",0); + setdvar("ui_juggernaut_death",0); + setdvar("ui_bled_out",0); + setdvar("ui_icon_partner",0); + setdvar("ui_icon_obj",0); + setdvar("ui_icon_obj_offscreen",0); + setdvar("ui_icon_stars",0); + setdvar("ui_icon_claymore",0); + setdvar("ui_icon_stealth_stance",0); + if(isdefined(param_00)) + { + setdvar(param_00,1); + } +} + +//Function Number: 83 +so_special_failure_hint() +{ + so_special_failure_hint_reset_dvars(); + foreach(var_01 in level.players) + { + var_01 thread maps\_load::func_14D0(); + var_01 thread so_special_death_hint_tracker(); + } + + level waittill("so_generate_deathquote"); + maps\_quotes::setdeadquote_so(); +} + +//Function Number: 84 +so_special_death_hint_tracker() +{ + level endon("so_special_failure_hint_set"); + self waittill("death",var_00,var_01,var_02); + if(isdefined(self.coop_death_reason)) + { + var_00 = self.coop_death_reason["attacker"]; + var_01 = self.coop_death_reason["cause"]; + var_02 = self.coop_death_reason["weapon_name"]; + } + + if(func_14D2(var_01,var_02)) + { + return; + } + + if(so_friendly_fire_death(var_00)) + { + return; + } + + if(so_radiation_death(var_00)) + { + return; + } + + if(so_dog_death(var_00)) + { + return; + } + + if(so_juggernaut_death(var_00)) + { + return; + } + + if(so_grenade_suicide_death(var_01)) + { + return; + } + + if(so_destructible_death(var_00,var_01)) + { + return; + } + + if(so_exploding_barrel_death(var_01)) + { + return; + } + + if(so_grenade_regular_death(var_01)) + { + return; + } + + if(func_14DF(var_00,var_01)) + { + } +} + +//Function Number: 85 +func_14D2(param_00,param_01) +{ + if(!isdefined(param_00)) + { + return 0; + } + + if(!isdefined(param_01) || isdefined(param_01) && param_01 != "claymore") + { + return 0; + } + + return 1; +} + +//Function Number: 86 +so_friendly_fire_death(param_00) +{ + if(!maps\_utility::func_E89()) + { + return 0; + } + + if(!isdefined(param_00)) + { + return 0; + } + + var_01 = maps\_utility::get_other_player(self); + if(var_01 != param_00) + { + return 0; + } + + func_14E0("@DEADQUOTE_SO_FRIENDLY_FIRE_KILL","ui_ff_death"); + return 1; +} + +//Function Number: 87 +so_radiation_death(param_00) +{ + if(!isdefined(param_00) || param_00.classname != "worldspawn") + { + return 0; + } + + if(!isdefined(self.radiationdeath) || !self.radiationdeath) + { + return 0; + } + + func_14E0("@SCRIPT_RADIATION_DEATH"); + return 1; +} + +//Function Number: 88 +so_dog_death(param_00) +{ + if(!isdefined(param_00)) + { + return 0; + } + + if(!isdefined(param_00.weapon)) + { + return 0; + } + + if(param_00.weapon != "dog_bite") + { + return 0; + } + + common_scripts\utility::flag_set("special_op_no_unlink"); + func_14E0(level.var_14D7,"ui_dog_death"); + return 1; +} + +//Function Number: 89 +so_juggernaut_death(param_00) +{ + if(!isdefined(param_00)) + { + return 0; + } + + if(!isdefined(param_00.juggernaut)) + { + return 0; + } + + var_01 = []; + so_special_failure_hint_set_array(var_41,"ui_juggernaut_death"); + return 1; +} + +//Function Number: 90 +so_destructible_death(param_00,param_01) +{ + if(!isdefined(param_01)) + { + return 0; + } + + if(!isdefined(param_00)) + { + return 0; + } + + if(param_01 != "MOD_EXPLOSIVE") + { + return 0; + } + + if(!isdefined(param_00.destructible_type)) + { + return 0; + } + + if(issubstr(param_00.destructible_type,"vehicle")) + { + func_14E0("@SCRIPT_EXPLODING_VEHICLE_DEATH","ui_vehicle_death"); + } + else + { + func_14E0("@SCRIPT_EXPLODING_DESTRUCTIBLE_DEATH","ui_destructible_death"); + } + + return 1; +} + +//Function Number: 91 +so_exploding_barrel_death(param_00) +{ + if(!isdefined(param_00)) + { + return 0; + } + + if(param_00 != "MOD_EXPLOSIVE") + { + return 0; + } + + if(!isdefined(level.lastexplodingbarrel)) + { + return 0; + } + + if(gettime() != level.lastexplodingbarrel["time"]) + { + return 0; + } + + var_01 = distance(self.origin,level.lastexplodingbarrel["origin"]); + if(var_01 > level.lastexplodingbarrel["radius"]) + { + return 0; + } + + func_14E0("@SCRIPT_EXPLODING_BARREL_DEATH","ui_barrel_death"); + return 1; +} + +//Function Number: 92 +so_grenade_suicide_death(param_00) +{ + if(!isdefined(param_00)) + { + return 0; + } + + if(param_00 != "MOD_SUICIDE") + { + return 0; + } + + if(self.lastgrenadetime - gettime() > 3500) + { + return 0; + } + + func_14E0("@SCRIPT_GRENADE_SUICIDE_COMBINED"); + return 1; +} + +//Function Number: 93 +so_grenade_regular_death(param_00) +{ + if(!isdefined(param_00)) + { + return 0; + } + + if(param_00 != "MOD_GRENADE" && param_00 != "MOD_GRENADE_SPLASH") + { + return 0; + } + + func_14E0("@SCRIPT_GRENADE_DEATH","ui_grenade_death"); + return 1; +} + +//Function Number: 94 +func_14DF(param_00,param_01) +{ + if(!isdefined(param_01)) + { + return 0; + } + + if(!isdefined(param_00)) + { + return 0; + } + + if(param_01 != "MOD_CRUSH") + { + return 0; + } + + if(param_00.code_classname != "script_vehicle") + { + return 0; + } + + func_14E0("@DEADQUOTE_SO_RUN_OVER_BY_VEHICLE"); + return 1; +} + +//Function Number: 95 +func_14E0(param_00,param_01) +{ + maps\_specialops::func_1407(param_00,param_01); + level notify("so_special_failure_hint_set"); +} + +//Function Number: 96 +so_special_failure_hint_set_array(param_00,param_01) +{ + maps\_specialops::so_force_deadquote_array(param_00,param_01); + level notify("so_special_failure_hint_set"); +} + +//Function Number: 97 +func_8093() +{ + self endon("death"); + level endon("special_op_terminated"); + for(;;) + { + self waittill("flashbang",var_00,var_01,var_02,var_03); + if(!maps\_utility::is_damagefeedback_enabled()) + { + continue; + } + + if(isdefined(var_03) && isplayer(var_03)) + { + var_03 maps\_damagefeedback::updatedamagefeedback(self); + } + } +} + +//Function Number: 98 +func_8094() +{ + if(!maps\_utility::is_survival() && level.players.size == 2 && level.players[0].var_128E["kills"] > 0 && level.players[0].var_128E["kills"] == level.players[1].var_128E["kills"]) + { + level.players[0] maps\_utility::player_giveachievement_wrapper("FIFTY_FIFTY"); + level.players[1] maps\_utility::player_giveachievement_wrapper("FIFTY_FIFTY"); + } + + if(level.players.size >= 2 && level.specops_reward_gameskill >= 2) + { + var_00 = 0; + foreach(var_02 in level.players) + { + if(isdefined(var_02.var_8096) && var_02.var_8096 > 0) + { + var_00 = 1; + } + + if(var_02 maps\_utility::func_152D() < 2) + { + var_00 = 1; + } + } + + if(!var_00) + { + foreach(var_02 in level.players) + { + var_02 maps\_utility::player_giveachievement_wrapper("NO_ASSISTANCE_REQUIRED"); + } + } + } +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_stealth_vehicle.gsc b/MW3/Xbox/SP/maps/_stealth_vehicle.gsc new file mode 100644 index 0000000..41f32a0 --- /dev/null +++ b/MW3/Xbox/SP/maps/_stealth_vehicle.gsc @@ -0,0 +1,409 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_stealth_vehicle.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 24 + * Decompile Time: 482 ms + * Timestamp: 10/27/2023 2:34:40 AM +*******************************************************************/ + +//Function Number: 1 +flags_init() +{ + level._effect["lighthaze_snow_headlights"] = loadfx("misc/lighthaze_snow_headlights"); + level._effect["car_taillight_uaz_l"] = loadfx("misc/car_taillight_uaz_l"); + common_scripts\utility::flag_init("truck_guys_alerted"); + common_scripts\utility::flag_init("jeep_blown_up"); + common_scripts\utility::flag_init("jeep_stopped"); +} + +//Function Number: 2 +func_3E4A() +{ + self endon("death"); + self endon("enemy"); + for(;;) + { + if(func_3E4B()) + { + self.fovcosine = 0.01; + return; + } + + wait 0.5; + } +} + +//Function Number: 3 +func_3E4B() +{ + foreach(var_01 in level.players) + { + if(distancesquared(self.origin,var_01.origin) < squared(self.footstepdetectdistsprint)) + { + return 1; + } + } + + return 0; +} + +//Function Number: 4 +stealth_truck_think() +{ + thread func_3E59(); + thread truck_headlights(); + self waittill("death"); + common_scripts\utility::flag_set("jeep_blown_up"); +} + +//Function Number: 5 +func_3E4D() +{ + self endon("death"); + level endon("_stealth_spotted"); + self endon("_stealth_attack"); + maps\_utility::ent_flag_init("jumped_out"); + thread func_3E51(); + var_00 = []; + var_01 = []; + var_02 = []; + maps\_stealth_shared_utilities::ai_create_behavior_function("animation","wrapper",::func_3E53); + maps\_stealth_utility::stealth_threat_behavior_custom(var_01); + maps\_stealth_utility::stealth_corpse_behavior_custom(var_41); + foreach(var_05, var_04 in var_02) + { + maps\_stealth_event_enemy::func_3DC5(var_05,var_04); + } + + maps\_utility::func_FA4("_stealth_behavior_reaction_anim"); +} + +//Function Number: 6 +func_3E4E(param_00) +{ + self endon("_stealth_enemy_alert_level_change"); + level endon("_stealth_spotted"); + self endon("_stealth_attack"); + self endon("death"); + self endon("pain_death"); + thread func_3E4F(); + self.disablearrivals = 0; + self.disableexits = 0; + var_01 = distance(param_00.origin,self.origin); + self setgoalnode(param_00); + self.goalradius = var_01 * 0.5; + wait 0.05; + maps\_utility::set_generic_run_anim("_stealth_patrol_cqb"); + self waittill("goal"); + if(!common_scripts\utility::flag("_stealth_spotted") && !isdefined(self.enemy) || !self cansee(self.enemy)) + { + func_3E50(); + maps\_stealth_shared_utilities::enemy_runto_and_lookaround(param_00); + } +} + +//Function Number: 7 +func_3E4F() +{ + self endon("death"); + self endon("_stealth_attack"); + level endon("_stealth_spotted"); + wait 2; + self waittill("_stealth_bad_event_listener"); + maps\_stealth_shared_utilities::func_3CEF(); + maps\_utility::func_FA4("not_first_attack"); +} + +//Function Number: 8 +func_3E50() +{ + maps\_utility::disable_cqbwalk(); + maps\_utility::set_generic_run_anim("patrol_cold_gunup_search",1); + self.disablearrivals = 1; + self.disableexits = 1; +} + +//Function Number: 9 +func_3E51() +{ + self endon("death"); + self endon("pain_death"); + for(;;) + { + self waittill("jumpedout"); + maps\_stealth_shared_utilities::enemy_set_original_goal(self.origin); + self.got_off_truck_origin = self.origin; + maps\_utility::func_FA4("jumped_out"); + self waittill("enteredvehicle"); + wait 0.15; + maps\_utility::ent_flag_clear("jumped_out"); + maps\_utility::func_FA4("_stealth_behavior_reaction_anim"); + } +} + +//Function Number: 10 +func_3E53(param_00) +{ + self endon("death"); + self endon("pain_death"); + common_scripts\utility::flag_set("truck_guys_alerted"); + maps\_utility::func_121C("jumped_out"); + maps\_stealth_shared_utilities::func_3D04(param_00); +} + +//Function Number: 11 +func_3E54(param_00) +{ + self endon("death"); + self endon("pain_death"); + level endon("_stealth_spotted"); + self endon("_stealth_attack"); + common_scripts\utility::flag_set("truck_guys_alerted"); + maps\_utility::func_121C("jumped_out"); + if(!common_scripts\utility::flag("truck_guys_alerted")) + { + return; + } + + if(common_scripts\utility::flag_exist("truck_guys_not_going_back") && common_scripts\utility::flag("truck_guys_not_going_back")) + { + return; + } + + if(!common_scripts\utility::flag("_stealth_spotted") && !maps\_utility::ent_flag("_stealth_attack")) + { + var_01 = maps\_utility::func_218A(self.origin); + var_02 = maps\_stealth_shared_utilities::func_3CF7(var_01.origin,1500,128); + if(isdefined(var_02)) + { + thread func_3E4E(var_02); + } + } + + var_03 = maps\_stealth_shared_utilities::func_3CDF("_stealth_spotted"); + if(common_scripts\utility::flag(var_03)) + { + common_scripts\utility::flag_waitopen(var_03); + return; + } + + self waittill("normal"); +} + +//Function Number: 12 +truck_guys_no_enemy_reaction_behavior(param_00) +{ + self endon("death"); + self endon("pain_death"); + level endon("_stealth_spotted"); + self endon("_stealth_attack"); + common_scripts\utility::flag_set("truck_guys_alerted"); + maps\_utility::func_121C("jumped_out"); + if(!common_scripts\utility::flag("truck_guys_alerted")) + { + return; + } + + if(common_scripts\utility::flag_exist("truck_guys_not_going_back") && common_scripts\utility::flag("truck_guys_not_going_back")) + { + return; + } + + if(!common_scripts\utility::flag("_stealth_spotted") && !maps\_utility::ent_flag("_stealth_attack")) + { + var_01 = self._stealth.var_3CF1.event.awareness_param[param_00]; + var_02 = maps\_stealth_shared_utilities::func_3CF7(var_01,300,40); + thread maps\_stealth_shared_utilities::func_3CF8(); + if(isdefined(var_02)) + { + thread func_3E4E(var_02); + } + } + + var_03 = maps\_stealth_shared_utilities::func_3CDF("_stealth_spotted"); + if(common_scripts\utility::flag(var_03)) + { + common_scripts\utility::flag_waitopen(var_03); + return; + } + + self waittill("normal"); +} + +//Function Number: 13 +func_3E56(param_00) +{ + self endon("death"); + self endon("pain_death"); + common_scripts\utility::flag_set("truck_guys_alerted"); + maps\_utility::func_121C("jumped_out"); +} + +//Function Number: 14 +set_alert_cold_patrol_anims() +{ + self.patrol_walk_anim = "patrol_cold_gunup"; + self.patrol_walk_twitch = "patrol_gunup_twitch_weights"; +} + +//Function Number: 15 +func_3E58() +{ + var_00 = distance(self.origin,maps\_utility::func_218A(self.origin).origin); + var_01 = var_00 - 200 / 1000; + var_01 = clamp(var_01,0,0.5); + wait var_01; +} + +//Function Number: 16 +func_3E59() +{ + self endon("death"); + thread func_3E5E(); + thread func_3E62(); + thread unload_and_attack_if_stealth_broken_and_close(); + common_scripts\utility::flag_wait("truck_guys_alerted"); + var_00 = maps\_utility::get_living_ai_array("truck_guys","script_noteworthy"); + if(var_00.size == 0) + { + self vehicle_setspeed(0,15); + return; + } + + var_01 = common_scripts\utility::random(var_00); + var_01 maps\_stealth_shared_utilities::func_3CF8(); + self waittill("safe_to_unload"); + self vehicle_setspeed(0,15); + wait 1; + maps\_vehicle::vehicle_unload(); + common_scripts\utility::flag_set("jeep_stopped"); +} + +//Function Number: 17 +unload_and_attack_if_stealth_broken_and_close() +{ + self endon("truck_guys_alerted"); + for(;;) + { + common_scripts\utility::flag_wait("_stealth_spotted"); + foreach(var_01 in level.players) + { + thread waittill_player_in_range(var_01); + } + + self waittill("player_in_range"); + if(!common_scripts\utility::flag("_stealth_spotted")) + { + continue; + } + else + { + break; + } + } + + common_scripts\utility::flag_set("truck_guys_alerted"); +} + +//Function Number: 18 +waittill_player_in_range(param_00) +{ + self endon("player_in_range"); + param_00 maps\_utility::waittill_entity_in_range(self,800); + self notify("player_in_range"); +} + +//Function Number: 19 +truck_headlights() +{ + playfxontag(level._effect["lighthaze_snow_headlights"],self,"TAG_LIGHT_RIGHT_FRONT"); + playfxontag(level._effect["lighthaze_snow_headlights"],self,"TAG_LIGHT_LEFT_FRONT"); + playfxontag(level._effect["car_taillight_uaz_l"],self,"TAG_LIGHT_LEFT_TAIL"); + playfxontag(level._effect["car_taillight_uaz_l"],self,"TAG_LIGHT_RIGHT_TAIL"); + self waittill("death"); + if(isdefined(self)) + { + func_3E5D(); + } +} + +//Function Number: 20 +func_3E5D() +{ + stopfxontag(level._effect["lighthaze_snow_headlights"],self,"TAG_LIGHT_RIGHT_FRONT"); + stopfxontag(level._effect["lighthaze_snow_headlights"],self,"TAG_LIGHT_LEFT_FRONT"); + stopfxontag(level._effect["car_taillight_uaz_l"],self,"TAG_LIGHT_LEFT_TAIL"); + stopfxontag(level._effect["car_taillight_uaz_l"],self,"TAG_LIGHT_RIGHT_TAIL"); +} + +//Function Number: 21 +func_3E5E() +{ + level endon("special_op_terminated"); + level endon("jeep_stopped"); + level endon("jeep_blown_up"); + var_00 = 1; + for(;;) + { + func_3E60(); + var_01 = maps\_utility::within_fov(self.origin,self.angles,self.var_3E5F.origin,cos(45)); + if(var_01) + { + if(!var_00 && common_scripts\utility::cointoss()) + { + maps\_utility::func_DDF("cliff_pri_truckcomingback"); + } + else + { + maps\_utility::func_DDF("cliff_pri_truckiscoming"); + } + + var_00 = 0; + wait 10; + } + + wait 1; + } +} + +//Function Number: 22 +func_3E60() +{ + self.var_3E5F = undefined; + foreach(var_01 in level.players) + { + var_01 thread func_3E61(self); + } + + level waittill("player_in_truck_range"); +} + +//Function Number: 23 +func_3E61(param_00) +{ + level endon("player_in_truck_range"); + param_00 maps\_utility::waittill_entity_in_range(self,1200); + param_00.var_3E5F = self; + level notify("player_in_truck_range"); +} + +//Function Number: 24 +func_3E62() +{ + level endon("special_op_terminated"); + self waittill("unloading"); + if(common_scripts\utility::flag("_stealth_spotted")) + { + return; + } + + maps\_utility::func_DDF("cliff_pri_headsup"); + if(common_scripts\utility::flag("_stealth_spotted")) + { + return; + } + + maps\_utility::func_DDF("cliff_pri_lookingaround"); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_treadfx.gsc b/MW3/Xbox/SP/maps/_treadfx.gsc new file mode 100644 index 0000000..ddd262e --- /dev/null +++ b/MW3/Xbox/SP/maps/_treadfx.gsc @@ -0,0 +1,185 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_treadfx.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 3 + * Decompile Time: 52 ms + * Timestamp: 10/27/2023 2:35:52 AM +*******************************************************************/ + +//Function Number: 1 +main(param_00) +{ + if(!isdefined(param_00)) + { + return; + } + + level.var_2470[param_00] = 1; + switch(param_00) + { + case "script_vehicle_m1a1_abrams_player_tm": + case "script_vehicle_m1a1_abrams_minigun": + setallvehiclefx(param_00,"treadfx/tread_dust_hamburg_cheap"); + setvehiclefx(param_00,"water"); + setvehiclefx(param_00,"paintedmetal"); + setvehiclefx(param_00,"riotshield"); + break; + + case "script_vehicle_uk_utility_truck_no_rail_player": + case "script_vehicle_uk_utility_truck_no_rail": + case "script_vehicle_uk_utility_truck": + setallvehiclefx(param_00,"treadfx/tread_dust_default"); + setvehiclefx(param_00,"water"); + setvehiclefx(param_00,"rock"); + setvehiclefx(param_00,"metal"); + setvehiclefx(param_00,"brick"); + setvehiclefx(param_00,"plaster"); + setvehiclefx(param_00,"asphalt"); + setvehiclefx(param_00,"paintedmetal"); + setvehiclefx(param_00,"riotshield"); + setvehiclefx(param_00,"snow","treadfx/tread_snow_default"); + setvehiclefx(param_00,"slush","treadfx/tread_snow_default"); + setvehiclefx(param_00,"ice","treadfx/tread_ice_default"); + break; + + case "script_vehicle_b2": + case "script_vehicle_pavelow_noai": + case "script_vehicle_pavelow": + case "script_vehicle_mi28_flying_low": + case "script_vehicle_osprey_fly": + case "script_vehicle_osprey": + case "script_vehicle_mi28_flying": + case "script_vehicle_ch46e_ny_harbor": + case "script_vehicle_ch46e_low": + case "script_vehicle_ch46e_notsolid": + case "script_vehicle_ch46e": + case "script_vehicle_mi17_woodland_landing_noai": + case "script_vehicle_mi17_woodland_fly_cheap_noai": + case "script_vehicle_mi17_woodland_fly_noai": + case "script_vehicle_mi17_woodland_noai": + case "script_vehicle_mi17_woodland_landing_so": + case "script_vehicle_mi17_woodland_landing": + case "script_vehicle_mi17_woodland_fly_cheap": + case "script_vehicle_mi17_woodland_fly": + case "script_vehicle_mi17_woodland": + case "script_vehicle_harrier": + case "script_vehicle_blackhawk_minigun_low": + case "script_vehicle_blackhawk_hero_hamburg": + case "script_vehicle_blackhawk_low_thermal": + case "script_vehicle_blackhawk_low": + case "script_vehicle_blackhawk_hero_sas_night": + case "script_vehicle_blackhawk": + case "script_vehicle_littlebird_player": + case "script_vehicle_littlebird_bench": + case "script_vehicle_cobra_helicopter_fly_player": + case "script_vehicle_cobra_helicopter_player": + case "script_vehicle_cobra_helicopter_low": + case "script_vehicle_cobra_helicopter_fly_low": + case "script_vehicle_cobra_helicopter_fly": + case "script_vehicle_cobra_helicopter": + case "script_vehicle_apache_dark": + case "script_vehicle_apache_mg": + case "script_vehicle_apache": + case "script_vehicle_mi24p_hind_woodland_opened_door": + case "script_vehicle_ny_harbor_hind": + case "script_vehicle_ny_blackhawk": + case "script_vehicle_littlebird_md500": + case "script_vehicle_littlebird_armed": + case "b2": + case "mig29": + case "blackhawk_minigun_so": + case "harrier": + case "pavelow": + case "mi28": + case "littlebird": + case "littlebird_player": + case "cobra_player": + case "cobra": + case "mi17_noai": + case "mi17": + case "ny_harbor_hind": + case "hind": + case "seaknight": + case "apache": + case "blackhawk_minigun": + case "blackhawk": + setallvehiclefx(param_00,"treadfx/heli_dust_default"); + setvehiclefx(param_00,"water","treadfx/heli_water"); + setvehiclefx(param_00,"snow","treadfx/heli_snow_default"); + setvehiclefx(param_00,"slush","treadfx/heli_snow_default"); + setvehiclefx(param_00,"ice","treadfx/heli_snow_default"); + break; + + default: + setallvehiclefx(param_00,"treadfx/tread_dust_default"); + setvehiclefx(param_00,"water"); + setvehiclefx(param_00,"concrete"); + setvehiclefx(param_00,"rock"); + setvehiclefx(param_00,"metal"); + setvehiclefx(param_00,"brick"); + setvehiclefx(param_00,"plaster"); + setvehiclefx(param_00,"asphalt"); + setvehiclefx(param_00,"paintedmetal"); + setvehiclefx(param_00,"riotshield"); + setvehiclefx(param_00,"snow","treadfx/tread_snow_default"); + setvehiclefx(param_00,"slush","treadfx/tread_snow_default"); + setvehiclefx(param_00,"ice","treadfx/tread_ice_default"); + break; + } +} + +//Function Number: 2 +setvehiclefx(param_00,param_01,param_02) +{ + if(!isdefined(level.var_2472)) + { + level.var_2472 = []; + } + + if(!isdefined(param_02)) + { + level.var_2472[param_00][param_01] = -1; + return; + } + + level.var_2472[param_00][param_01] = loadfx(param_02); +} + +//Function Number: 3 +setallvehiclefx(param_00,param_01) +{ + setvehiclefx(param_00,"brick",param_01); + setvehiclefx(param_00,"bark",param_01); + setvehiclefx(param_00,"carpet",param_01); + setvehiclefx(param_00,"cloth",param_01); + setvehiclefx(param_00,"concrete",param_01); + setvehiclefx(param_00,"dirt",param_01); + setvehiclefx(param_00,"flesh",param_01); + setvehiclefx(param_00,"foliage",param_01); + setvehiclefx(param_00,"glass",param_01); + setvehiclefx(param_00,"grass",param_01); + setvehiclefx(param_00,"gravel",param_01); + setvehiclefx(param_00,"ice",param_01); + setvehiclefx(param_00,"metal",param_01); + setvehiclefx(param_00,"mud",param_01); + setvehiclefx(param_00,"paper",param_01); + setvehiclefx(param_00,"plaster",param_01); + setvehiclefx(param_00,"rock",param_01); + setvehiclefx(param_00,"sand",param_01); + setvehiclefx(param_00,"snow",param_01); + setvehiclefx(param_00,"water",param_01); + setvehiclefx(param_00,"wood",param_01); + setvehiclefx(param_00,"asphalt",param_01); + setvehiclefx(param_00,"ceramic",param_01); + setvehiclefx(param_00,"plastic",param_01); + setvehiclefx(param_00,"rubber",param_01); + setvehiclefx(param_00,"cushion",param_01); + setvehiclefx(param_00,"fruit",param_01); + setvehiclefx(param_00,"paintedmetal",param_01); + setvehiclefx(param_00,"riotshield",param_01); + setvehiclefx(param_00,"slush",param_01); + setvehiclefx(param_00,"default",param_01); + setvehiclefx(param_00,"none"); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_treeburst.gsc b/MW3/Xbox/SP/maps/_treeburst.gsc new file mode 100644 index 0000000..d1d1788 --- /dev/null +++ b/MW3/Xbox/SP/maps/_treeburst.gsc @@ -0,0 +1,116 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_treeburst.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 4 + * Decompile Time: 73 ms + * Timestamp: 10/27/2023 2:34:40 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + var_00 = getentarray("treeburst","script_noteworthy"); + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + var_00[var_01] thread func_3E63(); + } +} + +//Function Number: 2 +func_3E63() +{ + self waittill("treeburst"); + if(isdefined(self.var_3E64)) + { + var_00 = self.var_3E64; + } + else + { + var_00 = randomint(360); + } + + var_01 = (self.angles[0],var_00,self.angles[2]); + var_02 = anglestoforward(var_01); + var_02 = var_02 * 100; + var_03 = self.origin + var_02 + (0,0,512); + var_04 = var_03 + (0,0,-1024); + var_05 = bullettrace(var_03,var_04,0,self); + var_06 = self.origin + var_02 - var_05["position"]; + var_07 = var_06[2]; + var_08 = 0; + var_09 = 0; + var_0A = var_09; + var_0B = 0; + var_0C = var_0B; + while(var_09 < var_07) + { + var_08 = var_08 + 340; + var_0A = var_09; + var_09 = var_09 + var_08; + var_0C = var_0B; + var_0B++; + } + + var_0D = var_0A - var_07; + if(var_0D < 0) + { + var_0D = var_0D * -1; + } + + var_0E = var_0C + var_0D / var_08; + self movegravity(var_02,var_0E); + self waittill("movedone"); + var_0F = vectornormalize(var_02); + var_0F = var_0F * 320; + var_03 = self.origin + var_0F + (0,0,512); + var_04 = var_03 + (0,0,-1024); + var_05 = bullettrace(var_03,var_04,0,self); + var_10 = var_05["position"]; + var_11 = anglestoup(self.angles); + var_12 = vectortoangles(var_11); + var_13 = var_10 - self.origin; + var_14 = vectortoangles(var_13); + var_15 = spawn("script_origin",self.origin); + var_15.origin = self.origin; + var_15.angles = (var_12[0],var_14[1],var_14[2]); + self linkto(var_15); + var_15 rotateto(var_14,1.15,0.5,0); + var_15 waittill("rotatedone"); + var_15 rotatepitch(-2.5,0.21,0.05,0.15); + var_15 waittill("rotatedone"); + var_15 rotatepitch(2.5,0.26,0.15,0.1); + var_15 waittill("rotatedone"); + self unlink(); + var_15 delete(); +} + +//Function Number: 3 +drawline(param_00,param_01,param_02,param_03) +{ + wait 0.05; +} + +//Function Number: 4 +draworigin(param_00,param_01,param_02) +{ + if(!isdefined(param_02)) + { + param_02 = 1; + } + + if(isdefined(param_01)) + { + wait 0.05; + return; + } + + for(;;) + { + var_03 = (1,0,0); + var_04 = (0,1,0); + var_05 = (0,0,1); + wait 0.05; + } +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_utility.gsc b/MW3/Xbox/SP/maps/_utility.gsc new file mode 100644 index 0000000..758a12b --- /dev/null +++ b/MW3/Xbox/SP/maps/_utility.gsc @@ -0,0 +1,12313 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_utility.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 787 + * Decompile Time: 12769 ms + * Timestamp: 10/27/2023 2:31:43 AM +*******************************************************************/ + +//Function Number: 1 +func_0E89() +{ + if(issplitscreen() || getdvar("coop") == "1") + { + return 1; + } + + return 0; +} + +//Function Number: 2 +is_coop_online() +{ + if(issplitscreen()) + { + return 0; + } + + if(!func_0E89()) + { + return 0; + } + + return 1; +} + +//Function Number: 3 +is_player_down(param_00) +{ + if(param_00 ent_flag_exist("laststand_downed")) + { + return param_00 ent_flag("laststand_downed"); + } + + if(isdefined(param_00.laststand)) + { + return param_00.laststand; + } + + return !isalive(param_00); +} + +//Function Number: 4 +is_player_down_and_out(param_00) +{ + if(!isdefined(param_00.var_1637)) + { + return 0; + } + + return param_00.var_1637; +} + +//Function Number: 5 +func_215C(param_00) +{ + if(laststand_enabled()) + { + return param_00 maps\_laststand::laststand_downing_will_fail() == 0; + } + + return 0; +} + +//Function Number: 6 +clear_custom_eog_summary() +{ + for(var_00 = 1;var_00 <= 2;var_00++) + { + for(var_01 = 1;var_01 <= 4;var_01++) + { + for(var_02 = 1;var_02 <= 9;var_02++) + { + setdvar("ui_eog_r" + var_02 + "c" + var_01 + "_player" + var_00,""); + setdvar("ui_eog_r" + var_02 + "c" + var_01 + "_player" + var_00,""); + } + } + + setdvar("ui_eog_success_heading_player" + var_00,""); + } +} + +//Function Number: 7 +set_custom_eog_summary(param_00,param_01,param_02) +{ + var_03 = int(param_00); + var_04 = int(param_01); + var_05 = ""; + if(level.players.size > 1) + { + if(self == level.player) + { + var_05 = "ui_eog_r" + var_03 + "c" + var_04 + "_player1"; + } + else if(self == level.player2) + { + var_05 = "ui_eog_r" + var_03 + "c" + var_04 + "_player2"; + } + else + { + } + } + else + { + var_05 = "ui_eog_r" + var_03 + "c" + var_04 + "_player1"; + } + + setdvar(var_05,param_02); +} + +//Function Number: 8 +func_128F(param_00,param_01,param_02,param_03,param_04) +{ + if(!isdefined(self.eog_line)) + { + self.eog_line = 0; + } + + var_05 = undefined; + if(isdefined(param_04)) + { + var_05 = param_04; + if(param_04 > self.eog_line) + { + self.eog_line = param_04; + } + } + else + { + self.eog_line++; + var_05 = self.eog_line; + } + + set_custom_eog_summary(var_05,1,param_00); + var_06 = []; + if(isdefined(param_03)) + { + } + + if(isdefined(param_03)) + { + } + + if(isdefined(param_02)) + { + } + + var_07 = 0; + while(var_07 < var_41.size) + { + set_custom_eog_summary(var_06,4 - var_07,var_41[var_07]); + var_07++ = var_41[var_41.size]; + } +} + +//Function Number: 9 +add_custom_eog_summary_line_blank() +{ + if(!isdefined(self.eog_line)) + { + self.eog_line = 0; + } + + self.eog_line++; +} + +//Function Number: 10 +set_eog_success_heading(param_00) +{ + var_01 = ""; + if(level.players.size > 1) + { + if(self == level.player) + { + var_01 = "ui_eog_success_heading_player1"; + } + else if(self == level.player2) + { + var_01 = "ui_eog_success_heading_player2"; + } + else + { + } + } + else + { + var_01 = "ui_eog_success_heading_player1"; + } + + setdvar(var_01,param_00); +} + +//Function Number: 11 +is_survival() +{ + return is_specialop() && getdvarint("so_survival") > 0; +} + +//Function Number: 12 +laststand_enabled() +{ + return isdefined(level.var_1658) && level.var_1658 > 0; +} + +//Function Number: 13 +is_specialop() +{ + return getdvarint("specialops") >= 1; +} + +//Function Number: 14 +convert_to_time_string(param_00,param_01) +{ + var_02 = ""; + if(param_00 < 0) + { + var_02 = var_02 + "-"; + } + + param_00 = round_float(param_00,1,0); + var_03 = param_00 * 100; + var_03 = int(var_03); + var_03 = abs(var_03); + var_04 = var_03 / 6000; + var_04 = int(var_04); + var_02 = var_02 + var_04; + var_05 = var_03 / 100; + var_05 = int(var_05); + var_05 = var_05 - var_04 * 60; + if(var_05 < 10) + { + var_02 = var_02 + ":0" + var_05; + } + else + { + var_02 = var_02 + ":" + var_05; + } + + if(isdefined(param_01) && param_01) + { + var_06 = var_03; + var_06 = var_06 - var_04 * 6000; + var_06 = var_06 - var_05 * 100; + var_06 = int(var_06 / 10); + var_02 = var_02 + "." + var_06; + } + + return var_02; +} + +//Function Number: 15 +round_float(param_00,param_01,param_02) +{ + param_01 = int(param_01); + if(param_01 < 0 || param_01 > 4) + { + return param_00; + } + + var_03 = 1; + for(var_04 = 1;var_04 <= param_01;var_04++) + { + var_03 = var_03 * 10; + } + + var_05 = param_00 * var_03; + if(!isdefined(param_02) || param_02) + { + var_05 = floor(var_05); + } + else + { + var_05 = ceil(var_05); + } + + param_00 = var_05 / var_03; + return param_00; +} + +//Function Number: 16 +round_millisec_on_sec(param_00,param_01,param_02) +{ + var_03 = param_00 / 1000; + var_03 = round_float(var_03,param_01,param_02); + param_00 = var_03 * 1000; + return int(param_00); +} + +//Function Number: 17 +func_2160(param_00,param_01,param_02) +{ + if(!isdefined(param_00)) + { + return 0; + } + + if(!isdefined(param_01)) + { + return 1; + } + + if(!isdefined(param_02)) + { + param_02 = "=="; + } + + switch(param_02) + { + case "==": + return param_00 == param_01; + + case "<": + return param_00 < param_01; + + case ">": + return param_00 > param_01; + + case "<=": + return param_00 <= param_01; + + case ">=": + return param_00 >= param_01; + } + + return 1; +} + +//Function Number: 18 +set_vision_set(param_00,param_01) +{ + if(maps\_utility_code::init_vision_set(param_00)) + { + return; + } + + if(!isdefined(param_01)) + { + param_01 = 1; + } + + visionsetnaked(param_00,param_01); + setdvar("vision_set_current",param_00); +} + +//Function Number: 19 +func_2161(param_00,param_01) +{ + if(maps\_utility_code::init_vision_set(param_00)) + { + return; + } + + if(!isdefined(param_01)) + { + param_01 = 1; + } + + self visionsetnakedforplayer(param_00,param_01); +} + +//Function Number: 20 +set_nvg_vision(param_00,param_01) +{ + if(!isdefined(param_01)) + { + param_01 = 1; + } + + visionsetnight(param_00,param_01); +} + +//Function Number: 21 +sun_light_fade(param_00,param_01,param_02) +{ + param_02 = int(param_02 * 20); + var_03 = []; + for(var_04 = 0;var_04 < 3;var_04++) + { + var_03[var_04] = param_00[var_04] - param_01[var_04] / param_02; + } + + var_05 = []; + for(var_04 = 0;var_04 < param_02;var_04++) + { + wait 0.05; + for(var_06 = 0;var_06 < 3;var_06++) + { + var_05[var_06] = param_00[var_06] - var_03[var_06] * var_04; + } + + setsunlight(var_05[0],var_05[1],var_05[2]); + } + + setsunlight(param_01[0],param_01[1],param_01[2]); +} + +//Function Number: 22 +func_121C(param_00) +{ + while(isdefined(self) && !self.ent_flag[param_00]) + { + self waittill(param_00); + } +} + +//Function Number: 23 +ent_flag_wait_vehicle_node(param_00) +{ + while(isdefined(self) && !self.ent_flag[param_00]) + { + self waittill(param_00); + } +} + +//Function Number: 24 +ent_flag_wait_either(param_00,param_01) +{ + while(isdefined(self)) + { + if(ent_flag(param_00)) + { + return; + } + + if(ent_flag(param_01)) + { + return; + } + + common_scripts\utility::waittill_either(param_00,param_01); + } +} + +//Function Number: 25 +func_2166(param_00,param_01) +{ + var_02 = gettime(); + while(isdefined(self)) + { + if(self.ent_flag[param_00]) + { + break; + } + + if(gettime() >= var_02 + param_01 * 1000) + { + break; + } + + maps\_utility_code::func_F9B(param_00,param_01); + } +} + +//Function Number: 26 +func_0FA3(param_00) +{ + while(isdefined(self) && self.ent_flag[param_00]) + { + self waittill(param_00); + } +} + +//Function Number: 27 +func_2167(param_00) +{ +} + +//Function Number: 28 +func_2168(param_00,param_01) +{ + while(isdefined(self)) + { + if(!ent_flag(param_00)) + { + return; + } + + if(!ent_flag(param_01)) + { + return; + } + + common_scripts\utility::waittill_either(param_00,param_01); + } +} + +//Function Number: 29 +ent_flag_init(param_00) +{ + if(!isdefined(self.ent_flag)) + { + self.ent_flag = []; + self.var_2169 = []; + } + + self.ent_flag[param_00] = 0; +} + +//Function Number: 30 +ent_flag_exist(param_00) +{ + if(isdefined(self.ent_flag) && isdefined(self.ent_flag[param_00])) + { + return 1; + } + + return 0; +} + +//Function Number: 31 +func_216A(param_00,param_01) +{ + self endon("death"); + wait param_01; + func_0FA4(param_00); +} + +//Function Number: 32 +func_0FA4(param_00) +{ + self.ent_flag[param_00] = 1; + self notify(param_00); +} + +//Function Number: 33 +ent_flag_clear(param_00) +{ + if(self.ent_flag[param_00]) + { + self.ent_flag[param_00] = 0; + self notify(param_00); + } +} + +//Function Number: 34 +ent_flag_clear_delayed(param_00,param_01) +{ + wait param_01; + ent_flag_clear(param_00); +} + +//Function Number: 35 +ent_flag(param_00) +{ + return self.ent_flag[param_00]; +} + +//Function Number: 36 +func_216C(param_00,param_01,param_02,param_03) +{ + if(!param_00.size) + { + return; + } + + if(!isdefined(param_01)) + { + param_01 = level.player; + } + + if(!isdefined(param_03)) + { + param_03 = -1; + } + + var_04 = param_01.origin; + if(isdefined(param_02) && param_02) + { + var_04 = param_01 geteye(); + } + + var_05 = undefined; + var_06 = param_01 getplayerangles(); + var_07 = anglestoforward(var_06); + var_08 = -1; + foreach(var_0A in param_00) + { + var_0B = vectortoangles(var_0A.origin - var_04); + var_0C = anglestoforward(var_0B); + var_0D = vectordot(var_07,var_0C); + if(var_0D < var_08) + { + continue; + } + + if(var_0D < param_03) + { + continue; + } + + var_08 = var_0D; + var_05 = var_0A; + } + + return var_05; +} + +//Function Number: 37 +get_closest_index_to_player_view(param_00,param_01,param_02) +{ + if(!param_00.size) + { + return; + } + + if(!isdefined(param_01)) + { + param_01 = level.player; + } + + var_03 = param_01.origin; + if(isdefined(param_02) && param_02) + { + var_03 = param_01 geteye(); + } + + var_04 = undefined; + var_05 = param_01 getplayerangles(); + var_06 = anglestoforward(var_05); + var_07 = -1; + for(var_08 = 0;var_08 < param_00.size;var_08++) + { + var_09 = vectortoangles(param_00[var_08].origin - var_03); + var_0A = anglestoforward(var_09); + var_0B = vectordot(var_06,var_0A); + if(var_0B < var_07) + { + continue; + } + + var_07 = var_0B; + var_04 = var_08; + } + + return var_04; +} + +//Function Number: 38 +func_216E(param_00,param_01,param_02) +{ + common_scripts\utility::flag_init(param_00); + if(!isdefined(param_02)) + { + param_02 = 0; + } + + param_01 thread func_2172(param_00,param_02); + return param_01; +} + +//Function Number: 39 +flag_triggers_init(param_00,param_01,param_02) +{ + common_scripts\utility::flag_init(param_00); + if(!isdefined(param_02)) + { + param_02 = 0; + } + + for(var_03 = 0;var_03 < param_01.size;var_03++) + { + param_01[var_03] thread func_2172(param_00,0); + } + + return param_01; +} + +//Function Number: 40 +flag_set_delayed(param_00,param_01) +{ + wait param_01; + common_scripts\utility::flag_set(param_00); +} + +//Function Number: 41 +func_2171(param_00,param_01) +{ + wait param_01; + common_scripts\utility::flag_clear(param_00); +} + +//Function Number: 42 +func_2172(param_00,param_01) +{ + self endon("death"); + for(;;) + { + self waittill("trigger",var_02); + common_scripts\utility::flag_set(param_00); + if(!param_01) + { + return; + } + + while(var_02 istouching(self)) + { + wait 0.05; + } + + common_scripts\utility::flag_clear(param_00); + } +} + +//Function Number: 43 +level_end_save() +{ + if(arcademode()) + { + return; + } + + if(level.var_1291) + { + return; + } + + if(common_scripts\utility::flag("game_saving")) + { + return; + } + + for(var_00 = 0;var_00 < level.players.size;var_00++) + { + var_01 = level.players[var_00]; + if(!isalive(var_01)) + { + return; + } + } + + common_scripts\utility::flag_set("game_saving"); + var_02 = "levelshots / autosave / autosave_" + level.script + "end"; + savegame("levelend",&"AUTOSAVE_AUTOSAVE",var_02,1); + common_scripts\utility::flag_clear("game_saving"); +} + +//Function Number: 44 +func_2173(param_00,param_01,param_02) +{ + level._extra_autosave_checks[param_00] = []; + level._extra_autosave_checks[param_00]["func"] = param_01; + level._extra_autosave_checks[param_00]["msg"] = param_02; +} + +//Function Number: 45 +func_2174(param_00) +{ + level._extra_autosave_checks[param_00] = undefined; +} + +//Function Number: 46 +autosave_stealth() +{ + thread autosave_by_name_thread("autosave_stealth",8,1); +} + +//Function Number: 47 +autosave_tactical() +{ + maps\_utility_code::autosave_tactical_setup(); + thread maps\_utility_code::autosave_tactical_proc(); +} + +//Function Number: 48 +autosave_by_name(param_00) +{ + thread autosave_by_name_thread(param_00); +} + +//Function Number: 49 +autosave_by_name_silent(param_00) +{ + thread autosave_by_name_thread(param_00,undefined,undefined,1); +} + +//Function Number: 50 +autosave_by_name_thread(param_00,param_01,param_02,param_03) +{ + if(!isdefined(level.var_2177)) + { + level.var_2177 = 1; + } + + var_04 = "levelshots/autosave/autosave_" + level.script + level.var_2177; + var_05 = level maps\_autosave::tryautosave(level.var_2177,"autosave",var_04,param_01,param_02,param_03); + if(isdefined(var_05) && var_05) + { + level.var_2177++; + } +} + +//Function Number: 51 +func_2178(param_00,param_01) +{ + thread autosave_by_name_thread(param_00,param_01); +} + +//Function Number: 52 +debug_message(param_00,param_01,param_02,param_03) +{ + if(!isdefined(param_02)) + { + param_02 = 5; + } + + if(isdefined(param_03)) + { + param_03 endon("death"); + param_01 = param_03.origin; + } + + for(var_04 = 0;var_04 < param_02 * 20;var_04++) + { + if(!isdefined(param_03)) + { + } + else + { + } + + wait 0.05; + } +} + +//Function Number: 53 +debug_message_ai(param_00,param_01) +{ + self notify("debug_message_ai"); + self endon("debug_message_ai"); + self endon("death"); + if(!isdefined(param_01)) + { + param_01 = 5; + } + + for(var_02 = 0;var_02 < param_01 * 20;var_02++) + { + wait 0.05; + } +} + +//Function Number: 54 +func_217A(param_00,param_01,param_02,param_03) +{ + if(isdefined(param_03)) + { + level notify(param_00 + param_03); + level endon(param_00 + param_03); + } + else + { + level notify(param_00); + level endon(param_00); + } + + if(!isdefined(param_02)) + { + param_02 = 5; + } + + for(var_04 = 0;var_04 < param_02 * 20;var_04++) + { + wait 0.05; + } +} + +//Function Number: 55 +func_217B(param_00) +{ + var_01 = getentarray("trigger_friendlychain","classname"); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + if(isdefined(var_01[var_02].script_chain) && var_01[var_02].script_chain == param_00) + { + if(isdefined(var_01[var_02].var_217D)) + { + var_01[var_02].origin = var_01[var_02].var_217D; + } + else + { + var_01[var_02].var_217D = var_01[var_02].origin; + } + + var_01[var_02].origin = var_01[var_02].origin + (0,0,-5000); + } + } +} + +//Function Number: 56 +chain_on(param_00) +{ + var_01 = getentarray("trigger_friendlychain","classname"); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + if(isdefined(var_01[var_02].script_chain) && var_01[var_02].script_chain == param_00) + { + if(isdefined(var_01[var_02].var_217D)) + { + var_01[var_02].origin = var_01[var_02].var_217D; + } + } + } +} + +//Function Number: 57 +precache(param_00) +{ + var_01 = spawn("script_model",(0,0,0)); + var_01.origin = level.player getorigin(); + var_01 setmodel(param_00); + var_01 delete(); +} + +//Function Number: 58 +closerfunc(param_00,param_01) +{ + return param_00 >= param_01; +} + +//Function Number: 59 +fartherfunc(param_00,param_01) +{ + return param_00 <= param_01; +} + +//Function Number: 60 +getclosest(param_00,param_01,param_02) +{ + if(!isdefined(param_02)) + { + param_02 = 500000; + } + + var_03 = undefined; + foreach(var_05 in param_01) + { + var_06 = distance(var_05.origin,param_00); + if(var_06 >= param_02) + { + continue; + } + + param_02 = var_06; + var_03 = var_05; + } + + return var_03; +} + +//Function Number: 61 +func_2181(param_00,param_01,param_02) +{ + if(!isdefined(param_02)) + { + param_02 = 500000; + } + + var_03 = 0; + var_04 = undefined; + foreach(var_06 in param_01) + { + var_07 = distance(var_06.origin,param_00); + if(var_07 <= var_03 || var_07 >= param_02) + { + continue; + } + + var_03 = var_07; + var_04 = var_06; + } + + return var_04; +} + +//Function Number: 62 +getclosestfx(param_00,param_01,param_02) +{ + return maps\_utility_code::comparesizesfx(param_00,param_01,param_02,::closerfunc); +} + +//Function Number: 63 +func_2183(param_00,param_01,param_02) +{ + var_03 = param_01[0]; + var_04 = distance(param_00,var_03); + for(var_05 = 0;var_05 < param_01.size;var_05++) + { + var_06 = distance(param_00,param_01[var_05]); + if(var_06 >= var_04) + { + continue; + } + + var_04 = var_06; + var_03 = param_01[var_05]; + } + + if(!isdefined(param_02) || var_04 <= param_02) + { + return var_03; + } + + return undefined; +} + +//Function Number: 64 +func_2184(param_00,param_01) +{ + if(param_01.size < 1) + { + return; + } + + var_02 = distance(param_01[0] getorigin(),param_00); + var_03 = param_01[0]; + for(var_04 = 0;var_04 < param_01.size;var_04++) + { + var_05 = distance(param_01[var_04] getorigin(),param_00); + if(var_05 < var_02) + { + continue; + } + + var_02 = var_05; + var_03 = param_01[var_04]; + } + + return var_03; +} + +//Function Number: 65 +get_within_range(param_00,param_01,param_02) +{ + var_03 = []; + for(var_04 = 0;var_04 < param_01.size;var_04++) + { + if(distance(param_01[var_04].origin,param_00) <= param_02) + { + var_03[var_03.size] = param_01[var_04]; + } + } + + return var_03; +} + +//Function Number: 66 +func_2186(param_00,param_01,param_02) +{ + var_03 = []; + for(var_04 = 0;var_04 < param_01.size;var_04++) + { + if(distance(param_01[var_04].origin,param_00) > param_02) + { + var_03[var_03.size] = param_01[var_04]; + } + } + + return var_03; +} + +//Function Number: 67 +get_closest_living(param_00,param_01,param_02) +{ + if(!isdefined(param_02)) + { + param_02 = 9999999; + } + + if(param_01.size < 1) + { + return; + } + + var_03 = undefined; + for(var_04 = 0;var_04 < param_01.size;var_04++) + { + if(!isalive(param_01[var_04])) + { + continue; + } + + var_05 = distance(param_01[var_04].origin,param_00); + if(var_05 >= param_02) + { + continue; + } + + param_02 = var_05; + var_03 = param_01[var_04]; + } + + return var_03; +} + +//Function Number: 68 +func_2188(param_00,param_01,param_02) +{ + if(!param_02.size) + { + return; + } + + var_03 = undefined; + var_04 = vectortoangles(param_01 - param_00); + var_05 = anglestoforward(var_04); + var_06 = -1; + foreach(var_08 in param_02) + { + var_04 = vectortoangles(var_08.origin - param_00); + var_09 = anglestoforward(var_04); + var_0A = vectordot(var_05,var_09); + if(var_0A < var_06) + { + continue; + } + + var_06 = var_0A; + var_03 = var_08; + } + + return var_03; +} + +//Function Number: 69 +get_closest_index(param_00,param_01,param_02) +{ + if(!isdefined(param_02)) + { + param_02 = 9999999; + } + + if(param_01.size < 1) + { + return; + } + + var_03 = undefined; + foreach(var_07, var_05 in param_01) + { + var_06 = distance(var_05.origin,param_00); + if(var_06 >= param_02) + { + continue; + } + + param_02 = var_06; + var_03 = var_07; + } + + return var_03; +} + +//Function Number: 70 +get_closest_exclude(param_00,param_01,param_02) +{ + if(!isdefined(param_01)) + { + return undefined; + } + + var_03 = 0; + if(isdefined(param_02) && param_02.size) + { + var_04 = []; + var_05 = 0; + while(var_05 < param_01.size) + { + var_04++ = var_41[var_05]; + } + + for(var_04 = 0;var_04 < param_02.size;var_04++) + { + for(var_06 = 0;var_06 < var_03.size;var_06++ = 0) + { + if(param_02[var_04] == var_03[var_06]) + { + var_41[var_04] = 1; + } + } + } + + var_07 = 0; + for(var_04 = 0;var_04 < param_02.size;var_04++) + { + if(!var_41[var_04] && isdefined(param_02[var_04])) + { + var_07 = 1; + var_05 = distance(param_01,param_02[var_04].origin); + var_08 = var_04; + var_04 = param_02.size + 1; + } + } + + if(!var_07) + { + return undefined; + } + } + else + { + var_05 = 0; + while(var_04 < param_02.size) + { + if(isdefined(param_02[var_04])) + { + var_05 = distance(param_01,param_02[0].origin); + var_08 = var_04; + var_04 = param_02.size + 1; + } + + var_04++; + } + } + + var_08 = undefined; + for(var_04 = 0;var_04 < param_02.size;var_04++) + { + if(isdefined(param_02[var_04])) + { + var_04 = 0; + if(isdefined(param_02)) + { + for(var_06 = 0;var_06 < param_02.size;var_06++) + { + if(param_01[var_05] == param_02[var_06]) + { + var_08 = 1; + } + } + } + + if(!var_08) + { + var_09 = distance(param_00,param_01[var_05].origin); + if(var_09 <= var_03) + { + var_03 = var_09; + var_04 = var_05; + } + } + } + } + + if(isdefined(var_08)) + { + return param_02[var_08]; + } + + return undefined; +} + +//Function Number: 71 +func_218A(param_00) +{ + if(level.players.size == 1) + { + return level.player; + } + + var_01 = getclosest(param_00,level.players); + return var_01; +} + +//Function Number: 72 +func_218B(param_00) +{ + if(level.players.size == 1) + { + return level.player; + } + + var_01 = func_1608(); + var_02 = getclosest(param_00,var_01); + return var_02; +} + +//Function Number: 73 +func_1608() +{ + var_00 = []; + foreach(var_02 in level.players) + { + if(is_player_down(var_02)) + { + continue; + } + + var_00[var_00.size] = var_02; + } + + return var_00; +} + +//Function Number: 74 +get_closest_ai(param_00,param_01,param_02) +{ + if(isdefined(param_01)) + { + var_03 = getaiarray(param_01); + } + else + { + var_03 = getaiarray(); + } + + if(var_03.size == 0) + { + return undefined; + } + + if(isdefined(param_02)) + { + var_03 = common_scripts\utility::array_remove_array(var_03,param_02); + } + + return getclosest(param_00,var_03); +} + +//Function Number: 75 +get_array_of_farthest(param_00,param_01,param_02,param_03,param_04,param_05) +{ + var_06 = get_array_of_closest(param_00,param_01,param_02,param_03,param_04,param_05); + var_06 = func_2198(var_06); + return var_06; +} + +//Function Number: 76 +get_array_of_closest(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if(!isdefined(param_03)) + { + param_03 = param_01.size; + } + + if(!isdefined(param_02)) + { + param_02 = []; + } + + var_06 = undefined; + if(isdefined(param_04)) + { + var_06 = param_04 * param_04; + } + + var_07 = 0; + if(isdefined(param_05)) + { + var_07 = param_05 * param_05; + } + + if(param_02.size == 0 && param_03 >= param_01.size && var_07 == 0 && !isdefined(var_06)) + { + return sortbydistance(param_01,param_00); + } + + var_08 = []; + foreach(var_0A in param_01) + { + var_0B = 0; + foreach(var_0D in param_02) + { + if(var_0A == var_0D) + { + var_0B = 1; + break; + } + } + + if(var_0B) + { + continue; + } + + var_0F = distancesquared(param_00,var_0A.origin); + if(isdefined(var_06) && var_0F > var_06) + { + continue; + } + + if(var_0F < var_07) + { + continue; + } + + var_08[var_08.size] = var_0A; + } + + var_08 = sortbydistance(var_08,param_00); + if(param_03 >= var_08.size) + { + return var_08; + } + + var_11 = []; + for(var_12 = 0;var_12 < param_03;var_12++) + { + var_11[var_12] = var_08[var_12]; + } + + return var_11; +} + +//Function Number: 77 +func_1E0A(param_00,param_01,param_02) +{ + if(isdefined(param_01)) + { + var_03 = getaiarray(param_01); + } + else + { + var_03 = getaiarray(); + } + + if(var_03.size == 0) + { + return undefined; + } + + return get_closest_exclude(param_00,var_03,param_02); +} + +//Function Number: 78 +get_progress(param_00,param_01,param_02,param_03) +{ + var_04 = param_03; + if(!isdefined(var_04)) + { + var_04 = distance(param_00,param_01); + } + + var_04 = max(0.01,var_04); + var_05 = vectornormalize(param_01 - param_00); + var_06 = param_02 - param_00; + var_07 = vectordot(var_06,var_05); + var_07 = var_07 / var_04; + var_07 = clamp(var_07,0,1); + return var_07; +} + +//Function Number: 79 +can_see_origin(param_00,param_01) +{ + if(!isdefined(param_01)) + { + param_01 = 1; + } + + if(!func_218D(param_00)) + { + return 0; + } + + if(!sighttracepassed(self geteye(),param_00,param_01,self)) + { + return 0; + } + + return 1; +} + +//Function Number: 80 +func_218D(param_00) +{ + var_01 = anglestoforward(self.angles); + var_02 = vectornormalize(param_00 - self.origin); + var_03 = vectordot(var_01,var_02); + return var_03 > 0.766; +} + +//Function Number: 81 +stop_magic_bullet_shield() +{ + self notify("stop_magic_bullet_shield"); + if(isai(self)) + { + self.attackeraccuracy = 1; + } + + self.magic_bullet_shield = undefined; + self.damageshield = 0; + self notify("internal_stop_magic_bullet_shield"); +} + +//Function Number: 82 +func_218E() +{ +} + +//Function Number: 83 +magic_bullet_shield(param_00) +{ + if(isai(self)) + { + } + else + { + self.health = 100000; + } + + self endon("internal_stop_magic_bullet_shield"); + if(isai(self)) + { + self.attackeraccuracy = 0.1; + } + + self.magic_bullet_shield = 1; + self.damageshield = 1; +} + +//Function Number: 84 +disable_long_death() +{ + self.a.disablelongdeath = 1; +} + +//Function Number: 85 +func_2190() +{ + self.a.disablelongdeath = 0; +} + +//Function Number: 86 +func_2191() +{ + self.var_AB6 = undefined; +} + +//Function Number: 87 +func_2192() +{ + self.var_AB6 = 1; +} + +//Function Number: 88 +deletable_magic_bullet_shield() +{ + magic_bullet_shield(1); +} + +//Function Number: 89 +get_ignoreme() +{ + return self.ignoreme; +} + +//Function Number: 90 +set_ignoreme(param_00) +{ + self.ignoreme = param_00; +} + +//Function Number: 91 +set_ignoreall(param_00) +{ + self.ignoreall = param_00; +} + +//Function Number: 92 +func_2195(param_00) +{ + self.favoriteenemy = param_00; +} + +//Function Number: 93 +func_1AF5() +{ + return self.pacifist; +} + +//Function Number: 94 +func_1AF6(param_00) +{ + self.pacifist = param_00; +} + +//Function Number: 95 +func_2196(param_00) +{ + self notify("new_ignore_me_timer"); + self endon("new_ignore_me_timer"); + self endon("death"); + if(!isdefined(self.var_2197)) + { + self.var_2197 = self.ignoreme; + } + + var_01 = getaiarray("bad_guys"); + foreach(var_03 in var_01) + { + if(!isalive(var_03.enemy)) + { + continue; + } + + if(var_03.enemy != self) + { + continue; + } + + var_03 clearenemy(); + } + + self.ignoreme = 1; + wait param_00; + self.ignoreme = self.var_2197; + self.var_2197 = undefined; +} + +//Function Number: 96 +array_randomize(param_00) +{ + for(var_01 = 0;var_01 < param_00.size;var_01++) + { + var_02 = randomint(param_00.size); + var_03 = param_00[var_01]; + param_00[var_01] = param_00[var_02]; + param_00[var_02] = var_03; + } + + return param_00; +} + +//Function Number: 97 +func_2198(param_00) +{ + var_01 = []; + for(var_02 = param_00.size - 1;var_02 >= 0;var_02--) + { + var_01[var_01.size] = param_00[var_02]; + } + + return var_01; +} + +//Function Number: 98 +func_2199(param_00) +{ + param_00 = param_00 + ""; + if(isdefined(level.createfxexploders)) + { + var_01 = level.createfxexploders[param_00]; + if(isdefined(var_01)) + { + foreach(var_03 in var_01) + { + if(isdefined(var_03.model)) + { + var_03.model delete(); + } + } + } + } + else + { + for(var_05 = 0;var_05 < level.createfxent.size;var_05++) + { + var_03 = level.createfxent[var_05]; + if(!isdefined(var_03)) + { + continue; + } + + if(var_03.v["type"] != "exploder") + { + continue; + } + + if(!isdefined(var_03.v["exploder"])) + { + continue; + } + + if(var_03.v["exploder"] + "" != param_00) + { + continue; + } + + if(isdefined(var_03.model)) + { + var_03.model delete(); + } + } + } + + level notify("killexplodertridgers" + param_00); +} + +//Function Number: 99 +hide_exploder_models(param_00) +{ + param_00 = param_00 + ""; + if(isdefined(level.createfxexploders)) + { + var_01 = level.createfxexploders[param_00]; + if(isdefined(var_01)) + { + foreach(var_03 in var_01) + { + if(isdefined(var_03.model)) + { + var_03.model hide(); + } + } + + return; + } + + return; + } + + var_05 = 0; + while(var_03 < level.createfxent.size) + { + var_05 = level.createfxent[var_03]; + if(!isdefined(var_05)) + { + continue; + } + + if(var_05.v["type"] != "exploder") + { + continue; + } + + if(!isdefined(var_05.v["exploder"])) + { + continue; + } + + if(var_05.v["exploder"] + "" != var_02) + { + continue; + } + + if(isdefined(var_05.model)) + { + var_05.model hide(); + } + + var_03++; + } +} + +//Function Number: 100 +func_219B(param_00) +{ + param_00 = param_00 + ""; + if(isdefined(level.createfxexploders)) + { + var_01 = level.createfxexploders[param_00]; + if(isdefined(var_01)) + { + foreach(var_03 in var_01) + { + if(!exploder_model_starts_hidden(var_03.model) && !func_1A79(var_03.model) && !func_1A7B(var_03.model)) + { + var_03.model show(); + } + + if(isdefined(var_03.brush_shown)) + { + var_03.model show(); + } + } + + return; + } + + return; + } + + var_05 = 0; + while(var_03 < level.createfxent.size) + { + var_05 = level.createfxent[var_03]; + if(!isdefined(var_05)) + { + continue; + } + + if(var_05.v["type"] != "exploder") + { + continue; + } + + if(!isdefined(var_05.v["exploder"])) + { + continue; + } + + if(var_05.v["exploder"] + "" != var_02) + { + continue; + } + + if(isdefined(var_05.model)) + { + if(!exploder_model_starts_hidden(var_05.model) && !func_1A79(var_05.model) && !func_1A7B(var_05.model)) + { + var_05.model show(); + } + + if(isdefined(var_05.brush_shown)) + { + var_05.model show(); + } + } + + var_03++; + } +} + +//Function Number: 101 +func_1A79(param_00) +{ + return isdefined(param_00.targetname) && param_00.targetname == "exploder"; +} + +//Function Number: 102 +exploder_model_starts_hidden(param_00) +{ + return param_00.model == "fx" && !isdefined(param_00.targetname) || param_00.targetname != "exploderchunk"; +} + +//Function Number: 103 +func_1A7B(param_00) +{ + return isdefined(param_00.targetname) && param_00.targetname == "exploderchunk"; +} + +//Function Number: 104 +func_219C(param_00) +{ + param_00 = param_00 + ""; + if(isdefined(level.createfxexploders)) + { + var_01 = level.createfxexploders[param_00]; + if(isdefined(var_01)) + { + foreach(var_03 in var_01) + { + if(!isdefined(var_03.looper)) + { + continue; + } + + var_03.looper delete(); + } + + return; + } + + return; + } + + var_05 = 0; + while(var_03 < level.createfxent.size) + { + var_05 = level.createfxent[var_03]; + if(!isdefined(var_05)) + { + continue; + } + + if(var_05.v["type"] != "exploder") + { + continue; + } + + if(!isdefined(var_05.v["exploder"])) + { + continue; + } + + if(var_05.v["exploder"] + "" != var_02) + { + continue; + } + + if(!isdefined(var_05.looper)) + { + continue; + } + + var_05.looper delete(); + var_03++; + } +} + +//Function Number: 105 +func_219D(param_00) +{ + param_00 = param_00 + ""; + var_01 = []; + if(isdefined(level.createfxexploders)) + { + var_02 = level.createfxexploders[param_00]; + if(isdefined(var_02)) + { + var_01 = var_02; + } + } + else + { + foreach(var_04 in level.createfxent) + { + if(var_04.v["type"] != "exploder") + { + continue; + } + + if(!isdefined(var_04.v["exploder"])) + { + continue; + } + + if(var_04.v["exploder"] + "" != param_00) + { + continue; + } + + var_01[var_01.size] = var_04; + } + } + + return var_01; +} + +//Function Number: 106 +func_219E(param_00) +{ + maps\_spawner::func_1CB7(param_00); +} + +//Function Number: 107 +set_ambient(param_00,param_01) +{ + maps\_audio_zone_manager::func_1134(param_00,param_01); +} + +//Function Number: 108 +force_crawling_death(param_00,param_01,param_02,param_03) +{ + if(!isdefined(param_01)) + { + param_01 = 4; + } + + thread func_21A4(param_00,param_01,param_02,param_03); +} + +//Function Number: 109 +func_21A0() +{ + if(isdefined(self.a.custom_crawling_death_array)) + { + self.a.array["crawl"] = self.a.custom_crawling_death_array["crawl"]; + self.a.array["death"] = self.a.custom_crawling_death_array["death"]; + self.a.crawl_fx_rate = self.a.custom_crawling_death_array["blood_fx_rate"]; + if(isdefined(self.a.custom_crawling_death_array["blood_fx"])) + { + self.a.crawl_fx = self.a.custom_crawling_death_array["blood_fx"]; + } + } + + self.a.array["stand_2_crawl"] = []; + self.a.array["stand_2_crawl"][0] = %dying_stand_2_crawl_v3; + if(isdefined(self.nofallanim)) + { + self.a.var_911 = "prone"; + } + + self orientmode("face angle",self.a.force_crawl_angle); + self.a.force_crawl_angle = undefined; +} + +//Function Number: 110 +func_21A4(param_00,param_01,param_02,param_03) +{ + self.forcelongdeath = 1; + self.a.force_num_crawls = param_01; + self.noragdoll = 1; + self.nofallanim = param_03; + self.a.custom_crawling_death_array = param_02; + self.var_934 = ::func_21A0; + self.maxhealth = 100000; + self.health = 100000; + func_2190(); + if(!isdefined(param_03) || param_03 == 0) + { + self.a.force_crawl_angle = param_00 + 181.02; + return; + } + + self.a.force_crawl_angle = param_00; + thread animscripts/notetracks::func_1F6E(); +} + +//Function Number: 111 +get_friendly_chain_node(param_00) +{ + var_01 = undefined; + var_02 = getentarray("trigger_friendlychain","classname"); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + if(isdefined(var_02[var_03].script_chain) && var_02[var_03].script_chain == param_00) + { + var_01 = var_02[var_03]; + break; + } + } + + if(!isdefined(var_01)) + { + return undefined; + } + + var_04 = getnode(var_01.target,"targetname"); + return var_04; +} + +//Function Number: 112 +shock_ondeath() +{ + precacheshellshock("default"); + self waittill("death"); + if(isdefined(self.specialdeath)) + { + return; + } + + if(getdvar("r_texturebits") == "16") + { + return; + } + + self shellshock("default",3); +} + +//Function Number: 113 +func_21A6(param_00,param_01) +{ + param_00 endon("death"); + self waittill("death"); + if(isdefined(param_00)) + { + if(param_00 iswaitingonsound()) + { + param_00 waittill(param_01); + } + + param_00 delete(); + } +} + +//Function Number: 114 +func_21A7() +{ + return issentient(self) && !isalive(self); +} + +//Function Number: 115 +play_sound_on_tag(param_00,param_01,param_02,param_03,param_04) +{ + if(func_21A7()) + { + return; + } + + var_05 = spawn("script_origin",(0,0,0)); + var_05 endon("death"); + thread func_21A6(var_05,"sounddone"); + if(isdefined(param_01)) + { + var_05 linkto(self,param_01,(0,0,0),(0,0,0)); + } + else + { + var_05.origin = self.origin; + var_05.angles = self.angles; + var_05 linkto(self); + } + + var_05 playsound(param_00,"sounddone"); + if(isdefined(param_02)) + { + if(!isdefined(maps\_utility_code::wait_for_sounddone_or_death(var_05))) + { + var_05 stopsounds(); + } + + wait 0.05; + } + else + { + var_05 waittill("sounddone"); + } + + if(isdefined(param_03)) + { + self notify(param_03); + } + + var_05 delete(); +} + +//Function Number: 116 +func_1F5B(param_00,param_01) +{ + play_sound_on_tag(param_00,param_01,1); +} + +//Function Number: 117 +play_sound_on_entity(param_00,param_01) +{ + play_sound_on_tag(param_00,undefined,undefined,param_01); +} + +//Function Number: 118 +play_loop_sound_on_tag(param_00,param_01,param_02) +{ + var_03 = spawn("script_origin",(0,0,0)); + var_03 endon("death"); + if(!isdefined(param_02)) + { + param_02 = 1; + } + + if(param_02) + { + thread common_scripts\utility::delete_on_death(var_03); + } + + if(isdefined(param_01)) + { + var_03 linkto(self,param_01,(0,0,0),(0,0,0)); + } + else + { + var_03.origin = self.origin; + var_03.angles = self.angles; + var_03 linkto(self); + } + + var_03 playloopsound(param_00); + self waittill("stop sound" + param_00); + var_03 stoploopsound(param_00); + var_03 delete(); +} + +//Function Number: 119 +func_21A8() +{ + var_00 = getaiarray("allies"); + var_01 = 0; + for(var_02 = 0;var_02 < var_00.size;var_02++) + { + if(isdefined(var_00[var_02].script_friendname)) + { + continue; + } + + game["character" + var_01] = var_00[var_02] codescripts\character::save(); + var_01++; + } + + game["total characters"] = var_01; +} + +//Function Number: 120 +func_0F77(param_00) +{ + if(!isalive(param_00)) + { + return 1; + } + + if(!isdefined(param_00.var_1929)) + { + param_00 common_scripts\utility::waittill_either("finished spawning","death"); + } + + if(isalive(param_00)) + { + return 0; + } + + return 1; +} + +//Function Number: 121 +spawn_setcharacter(param_00) +{ + codescripts\character::precache(param_00); + self waittill("spawned",var_01); + if(func_0F77(var_01)) + { + return; + } + + var_01 codescripts\character::func_19FB(); + var_01 codescripts\character::load(param_00); +} + +//Function Number: 122 +func_21A9(param_00,param_01) +{ + iprintlnbold(param_00,param_01["key1"]); +} + +//Function Number: 123 +view_tag(param_00) +{ + self endon("death"); + for(;;) + { + maps\_debug::drawtag(param_00); + wait 0.05; + } +} + +//Function Number: 124 +func_21AB(param_00) +{ + if(isdefined(param_00)) + { + self.animname = param_00; + } + + self useanimtree(level.scr_animtree[self.animname]); +} + +//Function Number: 125 +func_21AC() +{ + if(isarray(level.var_1B2E[self.animname])) + { + var_00 = randomint(level.var_1B2E[self.animname].size); + self setmodel(level.var_1B2E[self.animname][var_00]); + return; + } + + self setmodel(level.var_1B2E[self.animname]); +} + +//Function Number: 126 +func_0E4F(param_00,param_01) +{ + if(!isdefined(param_01)) + { + param_01 = (0,0,0); + } + + var_02 = spawn("script_model",param_01); + var_02.animname = param_00; + var_02 func_21AB(); + var_02 func_21AC(); + return var_02; +} + +//Function Number: 127 +trigger_wait(param_00,param_01) +{ + var_02 = getent(param_00,param_01); + if(!isdefined(var_02)) + { + return; + } + + var_02 waittill("trigger",var_03); + level notify(param_00,var_03); + return var_03; +} + +//Function Number: 128 +func_21AE(param_00) +{ + var_01 = getent(param_00,"targetname"); + if(!isdefined(var_01)) + { + return; + } + + var_01 waittill("trigger",var_02); + level notify(param_00,var_02); + return var_02; +} + +//Function Number: 129 +set_flag_on_dead(param_00,param_01) +{ + thread set_flag_on_func_wait_proc(param_00,param_01,::func_21B7,"set_flag_on_dead"); +} + +//Function Number: 130 +set_flag_on_dead_or_dying(param_00,param_01) +{ + thread set_flag_on_func_wait_proc(param_00,param_01,::waittill_dead_or_dying,"set_flag_on_dead_or_dying"); +} + +//Function Number: 131 +set_flag_on_spawned(param_00,param_01) +{ + thread set_flag_on_func_wait_proc(param_00,param_01,::empty_func,"set_flag_on_spawned"); +} + +//Function Number: 132 +empty_func(param_00) +{ +} + +//Function Number: 133 +set_flag_on_spawned_ai_proc(param_00,param_01) +{ + self waittill("spawned",var_02); + if(func_0F77(var_02)) + { + return; + } + + param_00.ai[param_00.ai.size] = var_02; + func_0FA4(param_01); +} + +//Function Number: 134 +set_flag_on_func_wait_proc(param_00,param_01,param_02,param_03) +{ + var_04 = spawnstruct(); + var_04.ai = []; + foreach(var_06 in param_00) + { + var_06 ent_flag_init(param_03); + } + + common_scripts\utility::array_thread(param_00,::set_flag_on_spawned_ai_proc,var_04,param_03); + foreach(var_06 in param_00) + { + var_06 func_121C(param_03); + } + + [[ param_02 ]](var_04.ai); + common_scripts\utility::flag_set(param_01); +} + +//Function Number: 135 +func_21B5(param_00,param_01) +{ + if(!common_scripts\utility::flag(param_01)) + { + param_00 waittill("trigger",var_02); + common_scripts\utility::flag_set(param_01); + return var_02; + } +} + +//Function Number: 136 +set_flag_on_targetname_trigger(param_00) +{ + if(common_scripts\utility::flag(param_00)) + { + return; + } + + var_01 = getent(param_00,"targetname"); + var_01 waittill("trigger"); + common_scripts\utility::flag_set(param_00); +} + +//Function Number: 137 +func_1E4E(param_00,param_01) +{ + for(var_02 = 0;var_02 < param_00.size;var_02++) + { + if(param_00[var_02] == param_01) + { + return 1; + } + } + + return 0; +} + +//Function Number: 138 +func_21B7(param_00,param_01,param_02) +{ + var_0A = spawnstruct(); + if(isdefined(param_02)) + { + var_0A endon("thread_timed_out"); + var_0A thread func_21BB(param_02); + } + + var_0A.count = param_00.size; + if(isdefined(param_01) && param_01 < var_0A.count) + { + var_0A.count = param_01; + } + + common_scripts\utility::array_thread(param_00,::waittill_dead_thread,var_0A); + while(var_0A.count > 0) + { + var_0A waittill("waittill_dead guy died"); + } +} + +//Function Number: 139 +waittill_dead_or_dying(param_00,param_01,param_02) +{ + var_03 = []; + foreach(var_05 in param_00) + { + if(isalive(var_05) && !var_05.ignoreforfixednodesafecheck) + { + var_03[var_03.size] = var_05; + } + } + + param_00 = var_03; + var_07 = spawnstruct(); + if(isdefined(param_02)) + { + var_07 endon("thread_timed_out"); + var_07 thread func_21BB(param_02); + } + + var_07.count = param_00.size; + if(isdefined(param_01) && param_01 < var_07.count) + { + var_07.count = param_01; + } + + common_scripts\utility::array_thread(param_00,::waittill_dead_or_dying_thread,var_07); + while(var_07.count > 0) + { + var_07 waittill("waittill_dead_guy_dead_or_dying"); + } +} + +//Function Number: 140 +waittill_dead_thread(param_00) +{ + self waittill("death"); + param_00.count--; + param_00 notify("waittill_dead guy died"); +} + +//Function Number: 141 +waittill_dead_or_dying_thread(param_00) +{ + common_scripts\utility::waittill_either("death","pain_death"); + param_00.count--; + param_00 notify("waittill_dead_guy_dead_or_dying"); +} + +//Function Number: 142 +func_21BB(param_00) +{ + wait param_00; + self notify("thread_timed_out"); +} + +//Function Number: 143 +func_21BC(param_00) +{ + while(level.var_1C80[param_00].var_1DAE || level.var_1C80[param_00].aicount) + { + wait 0.25; + } +} + +//Function Number: 144 +func_21BD(param_00,param_01) +{ + while(level.var_1C80[param_00].var_1DAE + level.var_1C80[param_00].aicount > param_01) + { + wait 0.25; + } +} + +//Function Number: 145 +get_ai_group_count(param_00) +{ + return level.var_1C80[param_00].var_1DAE + level.var_1C80[param_00].aicount; +} + +//Function Number: 146 +func_21BF(param_00) +{ + return level.var_1C80[param_00].aicount; +} + +//Function Number: 147 +func_21C0(param_00) +{ + var_01 = []; + for(var_02 = 0;var_02 < level.var_1C80[param_00].ai.size;var_02++) + { + if(!isalive(level.var_1C80[param_00].ai[var_02])) + { + continue; + } + + var_01[var_01.size] = level.var_1C80[param_00].ai[var_02]; + } + + return var_01; +} + +//Function Number: 148 +waittill_notetrack_or_damage(param_00) +{ + self endon("damage"); + self endon("death"); + self waittillmatch(param_00,"single anim"); +} + +//Function Number: 149 +get_living_ai(param_00,param_01) +{ + var_02 = get_living_ai_array(param_00,param_01); + if(var_02.size > 1) + { + return undefined; + } + + return var_02[0]; +} + +//Function Number: 150 +get_living_ai_array(param_00,param_01) +{ + var_02 = getaispeciesarray("all","all"); + var_03 = []; + foreach(var_05 in var_02) + { + if(!isalive(var_05)) + { + continue; + } + + switch(param_01) + { + case "targetname": + if(isdefined(var_05.targetname) && var_05.targetname == param_00) + { + var_03[var_03.size] = var_05; + } + break; + + case "script_noteworthy": + if(isdefined(var_05.script_noteworthy) && var_05.script_noteworthy == param_00) + { + var_03[var_03.size] = var_05; + } + break; + } + } + + return var_03; +} + +//Function Number: 151 +get_vehicle(param_00,param_01) +{ + var_02 = get_vehicle_array(param_00,param_01); + if(!var_02.size) + { + return undefined; + } + + return var_02[0]; +} + +//Function Number: 152 +get_vehicle_array(param_00,param_01) +{ + var_02 = getentarray(param_00,param_01); + var_03 = []; + var_04 = []; + foreach(var_06 in var_02) + { + if(var_06.code_classname != "script_vehicle") + { + continue; + } + + var_04[0] = var_06; + if(isspawner(var_06)) + { + if(isdefined(var_06.var_21C6)) + { + var_04[0] = var_06.var_21C6; + var_03 = array_merge(var_03,var_04); + } + + continue; + } + + var_03 = array_merge(var_03,var_04); + } + + return var_03; +} + +//Function Number: 153 +get_living_aispecies(param_00,param_01,param_02) +{ + var_03 = get_living_ai_array(param_00,param_01,param_02); + if(var_03.size > 1) + { + return undefined; + } + + return var_03[0]; +} + +//Function Number: 154 +get_living_aispecies_array(param_00,param_01,param_02) +{ + if(!isdefined(param_02)) + { + param_02 = "all"; + } + + var_03 = getaispeciesarray("allies",param_02); + var_03 = common_scripts\utility::array_combine(var_03,getaispeciesarray("axis",param_02)); + var_04 = []; + for(var_05 = 0;var_05 < var_03.size;var_05++) + { + switch(param_01) + { + case "targetname": + if(isdefined(var_03[var_05].targetname) && var_03[var_05].targetname == param_00) + { + var_04[var_04.size] = var_03[var_05]; + } + break; + + case "script_noteworthy": + if(isdefined(var_03[var_05].script_noteworthy) && var_03[var_05].script_noteworthy == param_00) + { + var_04[var_04.size] = var_03[var_05]; + } + break; + } + } + + return var_04; +} + +//Function Number: 155 +gather_delay_proc(param_00,param_01) +{ + if(isdefined(level.var_1C83[param_00])) + { + if(level.var_1C83[param_00]) + { + wait 0.05; + if(isalive(self)) + { + self notify("gather_delay_finished" + param_00 + param_01); + } + + return; + } + + level waittill(param_00); + if(isalive(self)) + { + self notify("gather_delay_finished" + param_00 + param_01); + } + + return; + } + + level.var_1C83[param_00] = 0; + wait param_01; + level.var_1C83[param_00] = 1; + level notify(param_00); + if(isalive(self)) + { + self notify("gather_delay_finished" + param_00 + param_01); + } +} + +//Function Number: 156 +func_1C83(param_00,param_01) +{ + thread gather_delay_proc(param_00,param_01); + self waittill("gather_delay_finished" + param_00 + param_01); +} + +//Function Number: 157 +func_21CA(param_00) +{ + animscripts/utility::func_1C4E(param_00); +} + +//Function Number: 158 +death_waiter(param_00) +{ + self waittill("death"); + level notify(param_00); +} + +//Function Number: 159 +getchar(param_00) +{ + if(param_00 == 0) + { + return "0"; + } + + if(param_00 == 1) + { + return "1"; + } + + if(param_00 == 2) + { + return "2"; + } + + if(param_00 == 3) + { + return "3"; + } + + if(param_00 == 4) + { + return "4"; + } + + if(param_00 == 5) + { + return "5"; + } + + if(param_00 == 6) + { + return "6"; + } + + if(param_00 == 7) + { + return "7"; + } + + if(param_00 == 8) + { + return "8"; + } + + if(param_00 == 9) + { + return "9"; + } +} + +//Function Number: 160 +getlinks_array(param_00,param_01) +{ + var_02 = []; + for(var_03 = 0;var_03 < param_00.size;var_03++) + { + var_04 = param_00[var_03]; + var_05 = var_04.script_linkname; + if(!isdefined(var_05)) + { + continue; + } + + if(!isdefined(param_01[var_05])) + { + continue; + } + + var_02[var_02.size] = var_04; + } + + return var_02; +} + +//Function Number: 161 +array_merge_links(param_00,param_01) +{ + if(!param_00.size) + { + return param_01; + } + + if(!param_01.size) + { + return param_00; + } + + var_02 = []; + for(var_03 = 0;var_03 < param_00.size;var_03++) + { + var_04 = param_00[var_03]; + var_02[var_04.script_linkname] = 1; + } + + for(var_03 = 0;var_03 < param_01.size;var_03++) + { + var_04 = param_01[var_03]; + if(isdefined(var_02[var_04.script_linkname])) + { + continue; + } + + var_02[var_04.script_linkname] = 1; + param_00[param_00.size] = var_04; + } + + return param_00; +} + +//Function Number: 162 +array_merge(param_00,param_01) +{ + if(param_00.size == 0) + { + return param_01; + } + + if(param_01.size == 0) + { + return param_00; + } + + var_02 = param_00; + foreach(var_04 in param_01) + { + var_05 = 0; + foreach(var_07 in param_00) + { + if(var_07 == var_04) + { + var_05 = 1; + break; + } + } + + if(var_05) + { + continue; + } + else + { + var_02[var_02.size] = var_04; + } + } + + return var_02; +} + +//Function Number: 163 +array_exclude(param_00,param_01) +{ + var_02 = param_00; + for(var_03 = 0;var_03 < param_01.size;var_03++) + { + if(func_1E4E(param_00,param_01[var_03])) + { + var_02 = common_scripts\utility::array_remove(var_02,param_01[var_03]); + } + } + + return var_02; +} + +//Function Number: 164 +array_compare(param_00,param_01) +{ + if(param_00.size != param_01.size) + { + return 0; + } + + foreach(var_05, var_03 in param_00) + { + if(!isdefined(param_01[var_05])) + { + return 0; + } + + var_04 = param_01[var_05]; + if(var_04 != var_03) + { + return 0; + } + } + + return 1; +} + +//Function Number: 165 +func_06E9(param_00,param_01) +{ + if(param_00.size <= 0) + { + return 0; + } + + foreach(var_03 in param_00) + { + if(var_03 == param_01) + { + return 1; + } + } + + return 0; +} + +//Function Number: 166 +func_21D1() +{ + var_00 = []; + if(isdefined(self.script_linkto)) + { + var_01 = common_scripts\utility::get_links(); + foreach(var_03 in var_01) + { + var_04 = getvehiclenodearray(var_03,"script_linkname"); + var_00 = common_scripts\utility::array_combine(var_00,var_04); + } + } + + return var_00; +} + +//Function Number: 167 +draw_line(param_00,param_01,param_02,param_03,param_04) +{ + wait 0.05; +} + +//Function Number: 168 +draw_line_to_ent_for_time(param_00,param_01,param_02,param_03,param_04,param_05) +{ + param_05 = gettime() + param_05 * 1000; + while(gettime() < param_05) + { + wait 0.05; + if(!isdefined(param_01) || !isdefined(param_01.origin)) + { + return; + } + } +} + +//Function Number: 169 +draw_line_from_ent_for_time(param_00,param_01,param_02,param_03,param_04,param_05) +{ + draw_line_to_ent_for_time(param_01,param_00,param_02,param_03,param_04,param_05); +} + +//Function Number: 170 +func_21D5(param_00,param_01,param_02,param_03,param_04,param_05) +{ + param_00 endon("death"); + param_01 endon("death"); + param_05 = gettime() + param_05 * 1000; + while(gettime() < param_05) + { + wait 0.05; + } +} + +//Function Number: 171 +func_21D6(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + param_00 endon("death"); + param_01 endon("death"); + param_05 endon(param_06); + wait 0.05; +} + +//Function Number: 172 +draw_line_until_notify(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + param_05 endon(param_06); + common_scripts\utility::draw_line_for_time(param_00,param_01,param_02,param_03,param_04,0.05); +} + +//Function Number: 173 +func_21D8(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + param_06 = gettime() + param_06 * 1000; + param_01 = param_01 * param_02; + while(gettime() < param_06) + { + wait 0.05; + if(!isdefined(param_00) || !isdefined(param_00.origin)) + { + return; + } + } +} + +//Function Number: 174 +func_21D9(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + var_07 = 16; + var_08 = 360 / var_07; + var_09 = []; + for(var_0A = 0;var_0A < var_07;var_0A++) + { + var_0B = var_08 * var_0A; + var_0C = cos(var_0B) * param_01; + var_0D = sin(var_0B) * param_01; + var_0E = param_00[0] + var_0C; + var_0F = param_00[1] + var_0D; + var_10 = param_00[2]; + var_09[var_09.size] = (var_0E,var_0F,var_10); + } + + thread draw_circle_lines_until_notify(var_09,param_02,param_03,param_04,param_05,param_06); +} + +//Function Number: 175 +draw_circle_lines_until_notify(param_00,param_01,param_02,param_03,param_04,param_05) +{ + for(var_06 = 0;var_06 < param_00.size;var_06++) + { + var_07 = param_00[var_06]; + if(var_06 + 1 >= param_00.size) + { + var_08 = param_00[0]; + } + else + { + var_08 = param_00[var_06 + 1]; + } + + thread draw_line_until_notify(var_07,var_08,param_01,param_02,param_03,param_04,param_05); + } +} + +//Function Number: 176 +clear_enemy_passthrough() +{ + self notify("enemy"); + self clearenemy(); +} + +//Function Number: 177 +battlechatter_off(param_00) +{ + level notify("battlechatter_off_thread"); + animscripts/battlechatter::bcs_setup_chatter_toggle_array(); + if(isdefined(param_00)) + { + set_battlechatter_variable(param_00,0); + var_01 = getaiarray(param_00); + } + else + { + foreach(param_00 in level.teams) + { + set_battlechatter_variable(param_00,0); + } + + var_01 = getaiarray(); + } + + if(!isdefined(level.chatinitialized) || !level.chatinitialized) + { + return; + } + + for(var_04 = 0;var_04 < var_01.size;var_04++) + { + var_01[var_04].battlechatter = 0; + } + + for(var_04 = 0;var_04 < var_01.size;var_04++) + { + var_05 = var_01[var_04]; + if(!isalive(var_05)) + { + continue; + } + + if(!var_05.chatinitialized) + { + continue; + } + + if(!var_05.isspeaking) + { + continue; + } + + var_05 maps\_utility_code::func_F8A(); + } + + var_06 = gettime() - level.lastteamspeaktime["allies"]; + if(var_06 < 1500) + { + wait var_06 / 1000; + } + + if(isdefined(param_00)) + { + level notify(param_00 + " done speaking"); + return; + } + + level notify("done speaking"); +} + +//Function Number: 178 +func_21DD(param_00) +{ + thread func_21DE(param_00); +} + +//Function Number: 179 +func_21DE(param_00) +{ + level endon("battlechatter_off_thread"); + animscripts/battlechatter::bcs_setup_chatter_toggle_array(); + while(!isdefined(level.chatinitialized)) + { + wait 0.05; + } + + common_scripts\utility::flag_set("battlechatter_on_thread_waiting"); + wait 1.5; + common_scripts\utility::flag_clear("battlechatter_on_thread_waiting"); + if(isdefined(param_00)) + { + set_battlechatter_variable(param_00,1); + var_01 = getaiarray(param_00); + } + else + { + foreach(param_00 in level.teams) + { + set_battlechatter_variable(param_00,1); + } + + var_01 = getaiarray(); + } + + for(var_04 = 0;var_04 < var_01.size;var_04++) + { + var_01[var_04] func_095D(1); + } +} + +//Function Number: 180 +func_095D(param_00) +{ + if(!level.chatinitialized) + { + return; + } + + if(self.type == "dog") + { + return; + } + + if(param_00) + { + if(isdefined(self.var_1CFF) && !self.var_1CFF) + { + self.battlechatter = 0; + return; + } + + self.battlechatter = 1; + return; + } + + self.battlechatter = 0; + if(isdefined(self.isspeaking) && self.isspeaking) + { + self waittill("done speaking"); + } +} + +//Function Number: 181 +set_team_bcvoice(param_00,param_01) +{ + if(!level.chatinitialized) + { + return; + } + + var_02 = getarraykeys(level.countryids); + var_03 = func_06E9(var_02,param_01); + if(!var_03) + { + return; + } + + var_04 = getaiarray(param_00); + foreach(var_06 in var_04) + { + var_06 set_ai_bcvoice(param_01); + } +} + +//Function Number: 182 +set_ai_bcvoice(param_00) +{ + if(!level.chatinitialized) + { + return; + } + + var_01 = getarraykeys(level.countryids); + var_02 = func_06E9(var_01,param_00); + if(!var_02) + { + return; + } + + if(self.type == "dog") + { + return; + } + + if(isdefined(self.isspeaking) && self.isspeaking) + { + self waittill("done speaking"); + wait 0.1; + } + + animscripts/battlechatter_ai::removefromsystem(); + wait 0.1; + self.voice = param_00; + animscripts/battlechatter_ai::addtosystem(); +} + +//Function Number: 183 +flavorbursts_on(param_00) +{ + thread set_flavorbursts_team_state(1,param_00); +} + +//Function Number: 184 +flavorbursts_off(param_00) +{ + thread set_flavorbursts_team_state(0,param_00); +} + +//Function Number: 185 +set_flavorbursts_team_state(param_00,param_01) +{ + if(!isdefined(param_01)) + { + param_01 = "allies"; + } + + if(!level.chatinitialized) + { + return; + } + + wait 1.5; + level.flavorbursts[param_01] = param_00; + var_02 = []; + var_02 = getaiarray(param_01); + common_scripts\utility::array_thread(var_02,::set_flavorbursts,param_00); +} + +//Function Number: 186 +set_flavorbursts(param_00) +{ + self.flavorbursts = param_00; +} + +//Function Number: 187 +friendlyfire_warnings_off() +{ + var_00 = getaiarray("allies"); + foreach(var_02 in var_00) + { + if(isalive(var_02)) + { + var_02 func_06EC(0); + } + } + + level.friendlyfire_warnings = 0; +} + +//Function Number: 188 +friendlyfire_warnings_on() +{ + var_00 = getaiarray("allies"); + foreach(var_02 in var_00) + { + if(isalive(var_02)) + { + var_02 func_06EC(1); + } + } + + level.friendlyfire_warnings = 1; +} + +//Function Number: 189 +func_06EC(param_00) +{ + if(param_00) + { + self.friendlyfire_warnings_disable = undefined; + return; + } + + self.friendlyfire_warnings_disable = 1; +} + +//Function Number: 190 +set_friendly_chain_wrapper(param_00) +{ + level.player setfriendlychain(param_00); + level notify("newFriendlyChain",param_00.script_noteworthy); +} + +//Function Number: 191 +func_21E6(param_00) +{ + var_01 = getentarray("objective","targetname"); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + if(var_01[var_02].script_noteworthy == param_00) + { + return var_01[var_02].origin; + } + } +} + +//Function Number: 192 +get_obj_event(param_00) +{ + var_01 = getentarray("objective_event","targetname"); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + if(var_01[var_02].script_noteworthy == param_00) + { + return var_01[var_02]; + } + } +} + +//Function Number: 193 +func_21E8() +{ + maps\_utility_code::waittill_objective_event_proc(1); +} + +//Function Number: 194 +waittill_objective_event_notrigger() +{ + maps\_utility_code::waittill_objective_event_proc(0); +} + +//Function Number: 195 +obj_set_chain_and_enemies() +{ + var_00 = getnode(self.target,"targetname"); + var_01 = getentarray(self.target,"targetname"); + func_21EC(var_01); + level notify("new_friendly_trigger"); + level.player set_friendly_chain_wrapper(var_00); +} + +//Function Number: 196 +func_21EB() +{ + self notify("flood_begin"); +} + +//Function Number: 197 +func_21EC(param_00,param_01) +{ + if(!isdefined(param_01)) + { + param_01 = 0; + } + + if(!isdefined(level.spawnerwave)) + { + level.spawnerwave = []; + } + + common_scripts\utility::array_thread(param_00,::maps\_spawner::func_1D7F,param_01); + for(var_02 = 0;var_02 < param_00.size;var_02++) + { + param_00[var_02].var_1D7D = 1; + param_00[var_02] notify("flood_begin"); + } +} + +//Function Number: 198 +func_1551() +{ + self notify("Debug origin"); + self endon("Debug origin"); + self endon("death"); + for(;;) + { + var_00 = anglestoforward(self.angles); + var_01 = var_00 * 30; + var_02 = var_00 * 20; + var_03 = anglestoright(self.angles); + var_04 = var_03 * -10; + var_03 = var_03 * 10; + wait 0.05; + } +} + +//Function Number: 199 +get_linked_structs() +{ + var_00 = []; + if(isdefined(self.script_linkto)) + { + var_01 = common_scripts\utility::get_links(); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + var_03 = common_scripts\utility::getstruct(var_01[var_02],"script_linkname"); + if(isdefined(var_03)) + { + var_00[var_00.size] = var_03; + } + } + } + + return var_00; +} + +//Function Number: 200 +get_last_ent_in_chain(param_00) +{ + var_01 = self; + while(isdefined(var_01.target)) + { + wait 0.05; + if(isdefined(var_01.target)) + { + switch(param_00) + { + case "vehiclenode": + var_01 = getvehiclenode(var_01.target,"targetname"); + break; + + case "pathnode": + var_01 = getnode(var_01.target,"targetname"); + break; + + case "ent": + var_01 = getent(var_01.target,"targetname"); + break; + + case "struct": + var_01 = common_scripts\utility::getstruct(var_01.target,"targetname"); + break; + + default: + break; + } + + continue; + } + + break; + } + + var_02 = var_01; + return var_02; +} + +//Function Number: 201 +player_seek(param_00) +{ + var_01 = spawn("script_origin",level.player.origin); + var_01 linkto(level.player); + if(isdefined(param_00)) + { + thread timeout(param_00); + } + + self setgoalentity(var_01); + if(!isdefined(self.oldgoalradius)) + { + self.oldgoalradius = self.goalradius; + } + + self.goalradius = 300; + common_scripts\utility::waittill_any("goal","timeout"); + if(isdefined(self.oldgoalradius)) + { + self.goalradius = self.oldgoalradius; + self.oldgoalradius = undefined; + } + + var_01 delete(); +} + +//Function Number: 202 +timeout(param_00) +{ + self endon("death"); + wait param_00; + self notify("timeout"); +} + +//Function Number: 203 +set_forcegoal() +{ + if(isdefined(self.set_forcedgoal)) + { + return; + } + + self.var_21F0 = self.pathenemyfightdist; + self.oldmaxdist = self.pathenemylookahead; + self.oldmaxsight = self.maxsightdistsqrd; + self.pathenemyfightdist = 8; + self.pathenemylookahead = 8; + self.maxsightdistsqrd = 1; + self.set_forcedgoal = 1; +} + +//Function Number: 204 +unset_forcegoal() +{ + if(!isdefined(self.set_forcedgoal)) + { + return; + } + + self.pathenemyfightdist = self.var_21F0; + self.pathenemylookahead = self.oldmaxdist; + self.maxsightdistsqrd = self.oldmaxsight; + self.set_forcedgoal = undefined; +} + +//Function Number: 205 +array_add(param_00,param_01) +{ + param_00[param_00.size] = param_01; + return param_00; +} + +//Function Number: 206 +array_removedead_keepkeys(param_00) +{ + var_01 = []; + var_02 = getarraykeys(param_00); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + var_04 = var_02[var_03]; + if(!isalive(param_00[var_04])) + { + continue; + } + + var_01[var_04] = param_00[var_04]; + } + + return var_01; +} + +//Function Number: 207 +array_removedead(param_00) +{ + var_01 = []; + foreach(var_03 in param_00) + { + if(!isalive(var_03)) + { + continue; + } + + var_01[var_01.size] = var_03; + } + + return var_01; +} + +//Function Number: 208 +array_removedead_or_dying(param_00) +{ + var_01 = []; + foreach(var_03 in param_00) + { + if(!isalive(var_03)) + { + continue; + } + + if(var_03 doinglongdeath()) + { + continue; + } + + var_01[var_01.size] = var_03; + } + + return var_01; +} + +//Function Number: 209 +array_insert(param_00,param_01,param_02) +{ + if(param_02 == param_00.size) + { + var_03 = param_00; + return var_41; + } + + var_03 = []; + var_04 = 0; + var_05 = 0; + while(var_05 < param_01.size) + { + if(var_05 == var_03) + { + var_41[var_05] = param_02; + var_04 = 1; + } + + var_41[var_05 + var_04] = param_01[var_05]; + var_05++ = var_41[var_03.size]; + } + + return var_41; +} + +//Function Number: 210 +array_remove_nokeys(param_00,param_01) +{ + var_02 = []; + for(var_03 = 0;var_03 < param_00.size;var_03++) + { + if(param_00[var_03] != param_01) + { + var_02[var_02.size] = param_00[var_03]; + } + } + + return var_02; +} + +//Function Number: 211 +array_remove_index(param_00,param_01) +{ + for(var_02 = 0;var_02 < param_00.size - 1;var_02++) + { + if(var_02 == param_01) + { + param_00[var_02] = param_00[var_02 + 1]; + param_01++; + } + } + + param_00[param_00.size - 1] = undefined; + return param_00; +} + +//Function Number: 212 +array_notify(param_00,param_01,param_02) +{ + foreach(var_04 in param_00) + { + var_04 notify(param_01,param_02); + } +} + +//Function Number: 213 +struct_arrayspawn() +{ + var_00 = spawnstruct(); + var_00.array = []; + var_00.var_1E2B = 0; + return var_00; +} + +//Function Number: 214 +structarray_add(param_00,param_01) +{ + param_00.array[param_00.var_1E2B] = param_01; + param_01.struct_array_index = param_00.var_1E2B; + param_00.var_1E2B++; +} + +//Function Number: 215 +func_21F7(param_00,param_01) +{ + structarray_swaptolast(param_00,param_01); + param_00.array[param_00.var_1E2B - 1] = undefined; + param_00.var_1E2B--; +} + +//Function Number: 216 +func_1BA7(param_00,param_01) +{ + if(isdefined(param_00.array[param_00.var_1E2B - 1])) + { + param_00.array[param_01] = param_00.array[param_00.var_1E2B - 1]; + param_00.array[param_01].struct_array_index = param_01; + param_00.array[param_00.var_1E2B - 1] = undefined; + param_00.var_1E2B = param_00.array.size; + return; + } + + param_00.array[param_01] = undefined; + func_1BA8(param_00); +} + +//Function Number: 217 +func_1BA8(param_00) +{ + var_01 = []; + foreach(var_03 in param_00.array) + { + if(!isdefined(var_03)) + { + continue; + } + + var_01[var_01.size] = var_03; + } + + param_00.array = var_01; + foreach(var_06, var_03 in param_00.array) + { + var_03.struct_array_index = var_06; + } + + param_00.var_1E2B = param_00.array.size; +} + +//Function Number: 218 +structarray_swaptolast(param_00,param_01) +{ + param_00 maps\_utility_code::structarray_swap(param_00.array[param_00.var_1E2B - 1],param_01); +} + +//Function Number: 219 +structarray_shuffle(param_00,param_01) +{ + for(var_02 = 0;var_02 < param_01;var_02++) + { + param_00 maps\_utility_code::structarray_swap(param_00.array[var_02],param_00.array[randomint(param_00.var_1E2B)]); + } +} + +//Function Number: 220 +set_ambient_alias(param_00,param_01) +{ + var_02 = param_00; + maps\_audio_zone_manager::azm_set_zone_streamed_ambience(var_02,param_01); +} + +//Function Number: 221 +get_use_key() +{ + if(level.console) + { + return " + usereload"; + } + + return " + activate"; +} + +//Function Number: 222 +doom() +{ + self teleport((0,0,-15000)); + self kill((0,0,0)); +} + +//Function Number: 223 +func_1A9C(param_00) +{ + return animscripts/battlechatter_ai::custom_battlechatter_internal(param_00); +} + +//Function Number: 224 +get_stop_watch(param_00,param_01) +{ + var_02 = newhudelem(); + if(level.console) + { + var_02.x = 68; + var_02.y = 35; + } + else + { + var_02.x = 58; + var_02.y = 95; + } + + var_02.alignx = "center"; + var_02.aligny = "middle"; + var_02.horzalign = "left"; + var_02.vertalign = "middle"; + if(isdefined(param_01)) + { + var_03 = param_01; + } + else + { + var_03 = level.explosiveplanttime; + } + + var_02 setclock(var_03,param_00,"hudStopwatch",64,64); + return var_02; +} + +//Function Number: 225 +func_21FD(param_00) +{ + var_01 = 0; + for(var_02 = 0;var_02 < level.active_objective.size;var_02++) + { + if(level.active_objective[var_02] != param_00) + { + continue; + } + + var_01 = 1; + break; + } + + return var_01; +} + +//Function Number: 226 +func_21FE(param_00) +{ + var_01 = 0; + for(var_02 = 0;var_02 < level.inactive_objective.size;var_02++) + { + if(level.inactive_objective[var_02] != param_00) + { + continue; + } + + var_01 = 1; + break; + } + + return var_01; +} + +//Function Number: 227 +func_21FF(param_00) +{ + var_01 = []; + for(var_02 = 0;var_02 < level.active_objective.size;var_02++) + { + if(level.active_objective[var_02] == param_00) + { + continue; + } + + var_01[var_01.size] = level.active_objective[var_02]; + } + + level.active_objective = var_01; + var_03 = 0; + for(var_02 = 0;var_02 < level.inactive_objective.size;var_02++) + { + if(level.inactive_objective[var_02] != param_00) + { + continue; + } + + var_03 = 1; + } + + if(!var_03) + { + level.inactive_objective[level.inactive_objective.size] = param_00; + } +} + +//Function Number: 228 +set_objective_active(param_00) +{ + var_01 = []; + for(var_02 = 0;var_02 < level.inactive_objective.size;var_02++) + { + if(level.inactive_objective[var_02] == param_00) + { + continue; + } + + var_01[var_01.size] = level.inactive_objective[var_02]; + } + + level.inactive_objective = var_01; + var_03 = 0; + for(var_02 = 0;var_02 < level.active_objective.size;var_02++) + { + if(level.active_objective[var_02] != param_00) + { + continue; + } + + var_03 = 1; + } + + if(!var_03) + { + level.active_objective[level.active_objective.size] = param_00; + } +} + +//Function Number: 229 +func_2201() +{ + level thread maps\_friendlyfire::detectfriendlyfireonentity(self); +} + +//Function Number: 230 +func_13EE() +{ + if(level.var_1291) + { + return; + } + + if(isdefined(level.nextmission)) + { + return; + } + + level.var_1291 = 1; + common_scripts\utility::flag_set("missionfailed"); + if(arcademode()) + { + return; + } + + if(getdvar("failure_disabled") == "1") + { + return; + } + + if(is_specialop()) + { + level.challenge_end_time = gettime(); + thread maps\_specialops_code::func_1498(); + return; + } + + maps\_utility_code::mission_recon(0); + missionfailed(); +} + +//Function Number: 231 +script_delay() +{ + if(isdefined(self.script_delay)) + { + wait self.script_delay; + return 1; + } + else if(isdefined(self.script_delay_min) && isdefined(self.script_delay_max)) + { + wait randomfloatrange(self.script_delay_min,self.script_delay_max); + return 1; + } + + return 0; +} + +//Function Number: 232 +func_1CB5() +{ + var_00 = gettime(); + if(isdefined(self.var_1CB5)) + { + wait self.var_1CB5; + if(isdefined(self.script_wait_add)) + { + self.var_1CB5 = self.var_1CB5 + self.script_wait_add; + } + } + else if(isdefined(self.var_2203) && isdefined(self.var_2204)) + { + wait randomfloatrange(self.var_2203,self.var_2204); + if(isdefined(self.script_wait_add)) + { + self.var_2203 = self.var_2203 + self.script_wait_add; + self.var_2204 = self.var_2204 + self.script_wait_add; + } + } + + return gettime() - var_00; +} + +//Function Number: 233 +func_2205(param_00) +{ + maps\_vehicle_aianim::func_2067(param_00); +} + +//Function Number: 234 +guy_runtovehicle_load(param_00,param_01) +{ + maps\_vehicle_aianim::guy_runtovehicle(param_00,param_01); +} + +//Function Number: 235 +func_0F3F(param_00,param_01) +{ + var_02 = getaiarray(param_00); + var_03 = []; + for(var_04 = 0;var_04 < var_02.size;var_04++) + { + var_05 = var_02[var_04]; + if(!isdefined(var_05.script_forcecolor)) + { + continue; + } + + if(var_05.script_forcecolor != param_01) + { + continue; + } + + var_03[var_03.size] = var_05; + } + + return var_03; +} + +//Function Number: 236 +func_2207() +{ + var_00 = getaiarray("allies"); + var_01 = []; + for(var_02 = 0;var_02 < var_00.size;var_02++) + { + var_03 = var_00[var_02]; + if(!isdefined(var_03.script_forcecolor)) + { + continue; + } + + var_01[var_01.size] = var_03; + } + + return var_01; +} + +//Function Number: 237 +func_1AED(param_00) +{ + if(!isdefined(param_00)) + { + param_00 = self.target; + } + + var_01 = []; + var_02 = getentarray(param_00,"targetname"); + var_01 = common_scripts\utility::array_combine(var_01,var_02); + var_02 = getnodearray(param_00,"targetname"); + var_01 = common_scripts\utility::array_combine(var_01,var_02); + var_02 = common_scripts\utility::getstructarray(param_00,"targetname"); + var_01 = common_scripts\utility::array_combine(var_01,var_02); + var_02 = getvehiclenodearray(param_00,"targetname"); + var_01 = common_scripts\utility::array_combine(var_01,var_02); + return var_01; +} + +//Function Number: 238 +enable_ai_color() +{ + if(isdefined(self.script_forcecolor)) + { + return; + } + + if(!isdefined(self.old_forcecolor)) + { + return; + } + + set_force_color(self.old_forcecolor); + self.old_forcecolor = undefined; +} + +//Function Number: 239 +enable_ai_color_dontmove() +{ + self.dontcolormove = 1; + enable_ai_color(); +} + +//Function Number: 240 +func_0E03() +{ + if(isdefined(self.new_force_color_being_set)) + { + self endon("death"); + self waittill("done_setting_new_color"); + } + + self clearfixednodesafevolume(); + if(!isdefined(self.script_forcecolor)) + { + return; + } + + self.old_forcecolor = self.script_forcecolor; + level.arrays_of_colorforced_ai[maps\_colors::get_team()][self.script_forcecolor] = common_scripts\utility::array_remove(level.arrays_of_colorforced_ai[maps\_colors::get_team()][self.script_forcecolor],self); + maps\_colors::func_F5E(); + self.script_forcecolor = undefined; + self.currentcolorcode = undefined; +} + +//Function Number: 241 +clear_force_color() +{ + func_0E03(); +} + +//Function Number: 242 +check_force_color(param_00) +{ + var_01 = level.colorchecklist[tolower(param_00)]; + if(isdefined(self.script_forcecolor) && var_01 == self.script_forcecolor) + { + return 1; + } + + return 0; +} + +//Function Number: 243 +get_force_color() +{ + var_00 = self.script_forcecolor; + return var_00; +} + +//Function Number: 244 +func_220D(param_00) +{ + return level.colorchecklist[tolower(param_00)]; +} + +//Function Number: 245 +set_force_color(param_00) +{ + var_01 = func_220D(param_00); + if(!isai(self)) + { + set_force_color_spawner(var_01); + return; + } + + if(self.team == "allies") + { + self.fixednode = 1; + self.fixednodesaferadius = 64; + self.pathenemyfightdist = 0; + self.pathenemylookahead = 0; + } + + self.script_color_axis = undefined; + self.script_color_allies = undefined; + self.old_forcecolor = undefined; + var_02 = maps\_colors::get_team(); + if(isdefined(self.script_forcecolor)) + { + level.arrays_of_colorforced_ai[var_02][self.script_forcecolor] = common_scripts\utility::array_remove(level.arrays_of_colorforced_ai[var_02][self.script_forcecolor],self); + } + + self.script_forcecolor = var_01; + level.arrays_of_colorforced_ai[var_02][var_01] = array_removedead(level.arrays_of_colorforced_ai[var_02][var_01]); + level.arrays_of_colorforced_ai[var_02][self.script_forcecolor] = array_add(level.arrays_of_colorforced_ai[var_02][self.script_forcecolor],self); + thread maps\_utility_code::new_color_being_set(var_01); +} + +//Function Number: 246 +set_force_color_spawner(param_00) +{ + self.script_forcecolor = param_00; + self.old_forcecolor = undefined; +} + +//Function Number: 247 +issue_color_orders(param_00,param_01) +{ + var_02 = strtok(param_00," "); + var_03 = []; + var_04 = []; + for(var_05 = 0;var_05 < var_02.size;var_05++) + { + var_06 = undefined; + if(issubstr(var_02[var_05],"r")) + { + var_06 = "r"; + } + else if(issubstr(var_02[var_05],"b")) + { + var_06 = "b"; + } + else if(issubstr(var_02[var_05],"y")) + { + var_06 = "y"; + } + else if(issubstr(var_02[var_05],"c")) + { + var_06 = "c"; + } + else if(issubstr(var_02[var_05],"g")) + { + var_06 = "g"; + } + else if(issubstr(var_02[var_05],"p")) + { + var_06 = "p"; + } + else if(issubstr(var_02[var_05],"o")) + { + var_06 = "o"; + } + else + { + } + + var_04[var_06] = var_02[var_05]; + var_03[var_03.size] = var_06; + } + + for(var_05 = 0;var_05 < var_02.size;var_05++) + { + level.arrays_of_colorcoded_spawners[param_01][var_02[var_05]] = common_scripts\utility::array_removeundefined(level.arrays_of_colorcoded_spawners[param_01][var_02[var_05]]); + for(var_07 = 0;var_07 < level.arrays_of_colorcoded_spawners[param_01][var_02[var_05]].size;var_07++) + { + level.arrays_of_colorcoded_spawners[param_01][var_02[var_05]][var_07].currentcolorcode = var_02[var_05]; + } + } + + for(var_05 = 0;var_05 < var_03.size;var_05++) + { + level.arrays_of_colorforced_ai[param_01][var_03[var_05]] = array_removedead(level.arrays_of_colorforced_ai[param_01][var_03[var_05]]); + level.currentcolorforced[param_01][var_03[var_05]] = var_04[var_03[var_05]]; + } + + for(var_05 = 0;var_05 < var_02.size;var_05++) + { + thread maps\_colors::issue_color_order_to_ai(var_02[var_05],var_03[var_05],param_01); + } +} + +//Function Number: 248 +func_2210(param_00) +{ + var_01 = gettime() + param_00 * 1000; + while(gettime() < var_01) + { + self playrumbleonentity("damage_heavy"); + wait 0.05; + } +} + +//Function Number: 249 +func_2211(param_00) +{ + self endon("death"); + self endon("flashed"); + wait 0.2; + self enablehealthshield(0); + wait param_00 + 2; + self enablehealthshield(1); +} + +//Function Number: 250 +ninebanghandler(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = [0.8,0.7,0.7,0.6]; + var_06 = [1,0.8,0.6,0.6]; + foreach(var_0C, var_08 in var_06) + { + var_09 = param_01 - 0.85 / 0.15; + if(var_09 > param_02) + { + param_02 = var_09; + } + + if(param_02 < 0.25) + { + param_02 = 0.25; + } + + var_0A = 0.3; + if(param_01 > 1 - var_0A) + { + param_01 = 1; + } + else + { + param_01 = param_01 / 1 - var_0A; + } + + if(param_04 != self.team) + { + var_0B = param_01 * param_02 * 6; + } + else + { + var_0B = param_01 * param_02 * 3; + } + + if(var_0B < 0.25) + { + continue; + } + + var_0B = var_08 * var_0B; + if(isdefined(self.var_2213) && var_0B > self.var_2213) + { + var_0B = self.var_2213; + } + + self.flashingteam = param_04; + self notify("flashed"); + self.flashendtime = gettime() + var_0B * 1000; + self shellshock("flashbang",var_0B); + common_scripts\utility::flag_set("player_flashed"); + if(param_01 * param_02 > 0.5) + { + thread func_2211(var_0B); + } + + wait var_05[var_0C]; + } + + thread maps\_utility_code::unflash_flag(0.05); +} + +//Function Number: 251 +flashmonitor() +{ + self endon("death"); + for(;;) + { + self waittill("flashbang",var_00,var_01,var_02,var_03,var_04); + if("1" == getdvar("noflash")) + { + continue; + } + + if(is_player_down(self)) + { + continue; + } + + if(isdefined(self.threw_ninebang)) + { + var_05 = 0.8; + var_06 = 1 - var_05; + self.threw_ninebang = undefined; + if(var_01 < var_06) + { + continue; + } + + var_01 = var_01 - var_06 / var_05; + } + + var_07 = var_01 - 0.85 / 0.15; + if(var_07 > var_02) + { + var_02 = var_07; + } + + if(var_02 < 0.25) + { + var_02 = 0.25; + } + + var_08 = 0.3; + if(var_01 > 1 - var_08) + { + var_01 = 1; + } + else + { + var_01 = var_01 / 1 - var_08; + } + + if(var_04 != self.team) + { + var_09 = var_01 * var_02 * 6; + } + else + { + var_09 = var_01 * var_02 * 3; + } + + if(var_09 < 0.25) + { + continue; + } + + if(isdefined(self.var_2213) && var_09 > self.var_2213) + { + var_09 = self.var_2213; + } + + self.flashingteam = var_04; + self notify("flashed"); + self.flashendtime = gettime() + var_09 * 1000; + self shellshock("flashbang",var_09); + common_scripts\utility::flag_set("player_flashed"); + thread maps\_utility_code::unflash_flag(var_09); + if(var_01 * var_02 > 0.5) + { + thread func_2211(var_09); + } + + if(var_09 > 2) + { + thread func_2210(0.75); + } + else + { + thread func_2210(0.25); + } + + if(var_04 != "allies") + { + thread flashnearbyallies(var_09,var_04); + } + } +} + +//Function Number: 252 +flashnearbyallies(param_00,param_01) +{ + wait 0.05; + var_02 = getaiarray("allies"); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + if(distancesquared(var_02[var_03].origin,self.origin) < 122500) + { + var_04 = param_00 + randomfloatrange(-1000,1500); + if(var_04 > 4.5) + { + var_04 = 4.5; + } + else if(var_04 < 0.25) + { + continue; + } + + var_05 = gettime() + var_04 * 1000; + if(!isdefined(var_02[var_03].flashendtime) || var_02[var_03].flashendtime < var_05) + { + var_02[var_03].flashingteam = param_01; + var_02[var_03] func_1F3D(var_04); + } + } + } +} + +//Function Number: 253 +restarteffect() +{ + common_scripts\_createfx::restart_fx_looper(); +} + +//Function Number: 254 +pauseexploder(param_00) +{ + param_00 = param_00 + ""; + if(isdefined(level.createfxexploders)) + { + var_01 = level.createfxexploders[param_00]; + if(isdefined(var_01)) + { + foreach(var_03 in var_01) + { + var_03 common_scripts\utility::pauseeffect(); + } + + return; + } + + return; + } + + foreach(var_06 in level.createfxent) + { + if(!isdefined(var_06.v["exploder"])) + { + continue; + } + + if(var_06.v["exploder"] != var_03) + { + continue; + } + + var_06 common_scripts\utility::pauseeffect(); + } +} + +//Function Number: 255 +restartexploder(param_00) +{ + param_00 = param_00 + ""; + if(isdefined(level.createfxexploders)) + { + var_01 = level.createfxexploders[param_00]; + if(isdefined(var_01)) + { + foreach(var_03 in var_01) + { + var_03 restarteffect(); + } + + return; + } + + return; + } + + foreach(var_06 in level.createfxent) + { + if(!isdefined(var_06.v["exploder"])) + { + continue; + } + + if(var_06.v["exploder"] != var_03) + { + continue; + } + + var_06 restarteffect(); + } +} + +//Function Number: 256 +getfxarraybyid(param_00) +{ + var_01 = []; + if(isdefined(level.createfxbyfxid)) + { + var_02 = level.createfxbyfxid[param_00]; + if(isdefined(var_02)) + { + var_01 = var_02; + } + } + else + { + for(var_03 = 0;var_03 < level.createfxent.size;var_03++) + { + if(level.createfxent[var_03].v["fxid"] == param_00) + { + var_01[var_01.size] = level.createfxent[var_03]; + } + } + } + + return var_01; +} + +//Function Number: 257 +func_2218(param_00) +{ + self notify("ignoreAllEnemies_threaded"); + self endon("ignoreAllEnemies_threaded"); + if(param_00) + { + self.var_2219 = self getthreatbiasgroup(); + var_01 = undefined; + createthreatbiasgroup("ignore_everybody"); + self setthreatbiasgroup("ignore_everybody"); + var_02 = []; + var_03 = getaiarray(var_41[self.team]); + var_04 = []; + for(var_05 = 0;var_05 < var_03.size;var_05++ = var_41["allies"]) + { + var_04[var_03[var_05] getthreatbiasgroup()] = 1; + } + + var_06 = getarraykeys(var_04); + for(var_05 = 0;var_05 < var_06.size;var_05++ = "axis") + { + setthreatbias(var_06[var_05],"ignore_everybody",0); + } + + return; + } + + var_01 = undefined; + if(self.var_2219 != "") + { + self setthreatbiasgroup(self.var_2219); + } + + self.var_2219 = undefined; +} + +//Function Number: 258 +func_221A() +{ + maps\_vehicle::func_221B(); +} + +//Function Number: 259 +vehicle_resumepath() +{ + thread maps\_vehicle::vehicle_resumepathvehicle(); +} + +//Function Number: 260 +vehicle_land(param_00) +{ + maps\_vehicle::func_221F(param_00); +} + +//Function Number: 261 +func_2220(param_00) +{ + maps\_vehicle::vehicle_liftoffvehicle(param_00); +} + +//Function Number: 262 +vehicle_dynamicpath(param_00,param_01) +{ + maps\_vehicle::vehicle_paths(param_00,param_01); +} + +//Function Number: 263 +func_0E3F(param_00) +{ + return bullettrace(param_00,param_00 + (0,0,-100000),0,self)["position"]; +} + +//Function Number: 264 +func_1DCA(param_00) +{ + self.player_health_packets = self.player_health_packets + param_00; + self notify("update_health_packets"); + if(self.player_health_packets >= 3) + { + self.player_health_packets = 3; + } +} + +//Function Number: 265 +func_2224(param_00) +{ + var_01 = func_2225(param_00); + return var_01[0]; +} + +//Function Number: 266 +func_2225(param_00) +{ + return maps\_vehicle::_getvehiclespawnerarray(param_00); +} + +//Function Number: 267 +func_2227(param_00,param_01,param_02,param_03) +{ + func_222A(); + if(!isdefined(level.var_2228)) + { + level.var_2228 = []; + } + + level.var_2228[param_00] = add_start_construct(param_00,param_01,param_02,param_03); +} + +//Function Number: 268 +add_start(param_00,param_01,param_02,param_03) +{ + func_222A(); + param_00 = tolower(param_00); + if(isdefined(level.var_2228) && isdefined(level.var_2228[param_00])) + { + var_05 = level.var_2228[param_00]; + } + else + { + var_05 = add_start_construct(param_01,param_02,param_03,var_05); + } + + if(!isdefined(param_01)) + { + if(!isdefined(level.var_2228)) + { + } + else if(!issubstr(param_00,"no_game")) + { + if(!isdefined(level.var_2228[param_00])) + { + return; + } + } + } + + level.var_1AB6[level.var_1AB6.size] = var_05; + level.var_1ABB[param_00] = var_05; +} + +//Function Number: 269 +func_17D7() +{ + return issubstr(level.start_point,"no_game"); +} + +//Function Number: 270 +add_start_construct(param_00,param_01,param_02,param_03) +{ + var_04 = []; + return var_41; +} + +//Function Number: 271 +func_222A() +{ + if(!isdefined(level.var_1AB6)) + { + level.var_1AB6 = []; + } +} + +//Function Number: 272 +level_has_start_points() +{ + return level.var_1AB6.size > 1; +} + +//Function Number: 273 +set_default_start(param_00) +{ + level.default_start_override = param_00; +} + +//Function Number: 274 +default_start(param_00) +{ + level.default_start = param_00; +} + +//Function Number: 275 +func_222C(param_00,param_01,param_02,param_03) +{ + thread maps\_utility_code::linetime_proc(param_00,param_01,param_02,param_03); +} + +//Function Number: 276 +within_fov(param_00,param_01,param_02,param_03) +{ + var_04 = vectornormalize(param_02 - param_00); + var_05 = anglestoforward(param_01); + var_06 = vectordot(var_05,var_04); + return var_06 >= param_03; +} + +//Function Number: 277 +func_222D(param_00,param_01,param_02,param_03) +{ + param_00 = func_2329(param_00,0); + param_02 = func_2329(param_02,0); + param_01 = (0,param_01[1],0); + var_04 = vectornormalize(param_02 - param_00); + var_05 = anglestoforward(param_01); + var_06 = vectordot(var_05,var_04); + return var_06 >= param_03; +} + +//Function Number: 278 +func_222E(param_00,param_01,param_02) +{ + var_03 = vectornormalize(param_02 - param_00); + var_04 = anglestoforward(param_01); + var_05 = vectordot(var_04,var_03); + return var_05; +} + +//Function Number: 279 +within_fov_of_players(param_00,param_01) +{ + var_02 = undefined; + for(var_03 = 0;var_03 < level.players.size;var_03++) + { + var_04 = level.players[var_03] geteye(); + var_02 = within_fov(var_04,level.players[var_03] getplayerangles(),param_00,param_01); + if(!var_02) + { + return 0; + } + } + + return 1; +} + +//Function Number: 280 +func_2230(param_00,param_01) +{ + if(!isdefined(param_01)) + { + param_01 = param_00; + param_00 = 0; + } + + wait randomfloatrange(param_00,param_01); + if(1) + { + return; + } + + var_02 = undefined; + if(!isdefined(level.active_wait_spread)) + { + level.active_wait_spread = 1; + level.wait_spreaders = 0; + var_02 = level.wait_spreaders; + level.wait_spreaders++; + thread maps\_utility_code::waitspread_code(param_00,param_01); + } + else + { + var_02 = level.wait_spreaders; + level.wait_spreaders++; + waittillframeend; + } + + waittillframeend; + wait level.wait_spreader_allotment[var_02]; +} + +//Function Number: 281 +wait_for_buffer_time_to_pass(param_00,param_01) +{ + var_02 = param_01 * 1000 - gettime() - param_00; + var_02 = var_02 * 0.001; + if(var_02 > 0) + { + wait var_02; + } +} + +//Function Number: 282 +bcs_scripted_dialogue_start() +{ + anim.scripteddialoguestarttime = gettime(); +} + +//Function Number: 283 +dialogue_queue(param_00) +{ + bcs_scripted_dialogue_start(); + maps\_anim::anim_single_queue(self,param_00); +} + +//Function Number: 284 +func_2231(param_00,param_01) +{ + bcs_scripted_dialogue_start(); + maps\_anim::anim_generic_queue(self,param_00,undefined,undefined,param_01); +} + +//Function Number: 285 +func_0DDF(param_00,param_01) +{ + if(!isdefined(level.player_radio_emitter)) + { + var_02 = spawn("script_origin",(0,0,0)); + var_02 linkto(level.player,"",(0,0,0),(0,0,0)); + level.player_radio_emitter = var_02; + } + + bcs_scripted_dialogue_start(); + var_03 = 0; + if(!isdefined(param_01)) + { + var_03 = level.player_radio_emitter func_0E1D(::play_sound_on_tag,level.scr_radio[param_00],undefined,1); + } + else + { + var_03 = level.player_radio_emitter function_stack_timeout(param_01,::play_sound_on_tag,level.scr_radio[param_00],undefined,1); + } + + return var_03; +} + +//Function Number: 286 +radio_dialogue_overlap(param_00) +{ + level.player_radio_emitter play_sound_on_tag(level.scr_radio[param_00],undefined,1); +} + +//Function Number: 287 +func_14C4() +{ + if(!isdefined(level.player_radio_emitter)) + { + return; + } + + level.player_radio_emitter delete(); +} + +//Function Number: 288 +radio_dialogue_clear_stack() +{ + if(!isdefined(level.player_radio_emitter)) + { + return; + } + + level.player_radio_emitter function_stack_clear(); +} + +//Function Number: 289 +radio_dialogue_interupt(param_00) +{ + if(!isdefined(level.player_radio_emitter)) + { + var_01 = spawn("script_origin",(0,0,0)); + var_01 linkto(level.player,"",(0,0,0),(0,0,0)); + level.player_radio_emitter = var_01; + } + + level.player_radio_emitter play_sound_on_tag(level.scr_radio[param_00],undefined,1); +} + +//Function Number: 290 +radio_dialogue_safe(param_00) +{ + return func_0DDF(param_00,0.05); +} + +//Function Number: 291 +func_0FE1(param_00) +{ + func_0DDF(param_00); +} + +//Function Number: 292 +func_2237(param_00,param_01,param_02) +{ + var_03 = spawnstruct(); + if(isdefined(param_01) && param_01 == 1) + { + var_03.var_2238 = newhudelem(); + } + + var_03.var_2239 = newhudelem(); + var_03 hint_position_internal(param_02); + var_03.var_2239 settext(param_00); + return var_03; +} + +//Function Number: 293 +hint_delete() +{ + self notify("death"); + if(isdefined(self.var_2239)) + { + self.var_2239 destroy(); + } + + if(isdefined(self.var_2238)) + { + self.var_2238 destroy(); + } +} + +//Function Number: 294 +hint_position_internal(param_00) +{ + if(level.console) + { + self.var_2239.fontscale = 2; + } + else + { + self.var_2239.fontscale = 1.6; + } + + self.var_2239.x = 0; + self.var_2239.y = -40; + self.var_2239.alignx = "center"; + self.var_2239.aligny = "bottom"; + self.var_2239.horzalign = "center"; + self.var_2239.vertalign = "middle"; + self.var_2239.sort = 1; + self.var_2239.alpha = 0.8; + if(!isdefined(self.var_2238)) + { + return; + } + + self.var_2238.x = 0; + self.var_2238.y = -40; + self.var_2238.alignx = "center"; + self.var_2238.aligny = "middle"; + self.var_2238.horzalign = "center"; + self.var_2238.vertalign = "middle"; + self.var_2238.sort = -1; + if(level.console) + { + self.var_2238 setshader("popmenu_bg",650,52); + } + else + { + self.var_2238 setshader("popmenu_bg",650,42); + } + + if(!isdefined(param_00)) + { + param_00 = 0.5; + } + + self.var_2238.alpha = param_00; +} + +//Function Number: 295 +string(param_00) +{ + return "" + param_00; +} + +//Function Number: 296 +func_223C(param_00,param_01) +{ + setignoremegroup(param_00,param_01); + setignoremegroup(param_01,param_00); +} + +//Function Number: 297 +add_global_spawn_function(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = []; + level.var_1A35[param_01][level.var_1A35[param_01].size] = var_41; +} + +//Function Number: 298 +remove_global_spawn_function(param_00,param_01) +{ + var_02 = []; + for(var_03 = 0;var_03 < level.var_1A35[param_00].size;var_03++) + { + if(level.var_1A35[param_00][var_03]["function"] != param_01) + { + var_02[var_02.size] = level.var_1A35[param_00][var_03]; + } + } + + level.var_1A35[param_00] = var_02; +} + +//Function Number: 299 +func_223E(param_00,param_01) +{ + if(!isdefined(level.var_1A35)) + { + return 0; + } + + for(var_02 = 0;var_02 < level.var_1A35[param_00].size;var_02++) + { + if(level.var_1A35[param_00][var_02]["function"] == param_01) + { + return 1; + } + } + + return 0; +} + +//Function Number: 300 +func_223F(param_00) +{ + var_01 = []; + foreach(var_03 in self.spawn_functions) + { + if(var_03["function"] == param_00) + { + continue; + } + + var_01[var_01.size] = var_03; + } + + self.spawn_functions = var_01; +} + +//Function Number: 301 +add_spawn_function(param_00,param_01,param_02,param_03,param_04,param_05) +{ + foreach(var_07 in self.spawn_functions) + { + if(var_07["function"] == param_00) + { + return; + } + } + + var_09 = []; + self.spawn_functions[self.spawn_functions.size] = var_41; +} + +//Function Number: 302 +array_delete(param_00) +{ + for(var_01 = 0;var_01 < param_00.size;var_01++) + { + param_00[var_01] delete(); + } +} + +//Function Number: 303 +array_kill(param_00) +{ + for(var_01 = 0;var_01 < param_00.size;var_01++) + { + param_00[var_01] kill(); + } +} + +//Function Number: 304 +func_1C9E(param_00) +{ + self endon("death"); + self.ignoretriggers = 1; + if(isdefined(param_00)) + { + wait param_00; + } + else + { + wait 0.5; + } + + self.ignoretriggers = 0; +} + +//Function Number: 305 +activate_trigger_with_targetname(param_00) +{ + var_01 = getent(param_00,"targetname"); + var_01 activate_trigger(); +} + +//Function Number: 306 +activate_trigger_with_noteworthy(param_00) +{ + var_01 = getent(param_00,"script_noteworthy"); + var_01 activate_trigger(); +} + +//Function Number: 307 +disable_trigger_with_targetname(param_00) +{ + var_01 = getent(param_00,"targetname"); + var_01 common_scripts\utility::trigger_off(); +} + +//Function Number: 308 +disable_trigger_with_noteworthy(param_00) +{ + var_01 = getent(param_00,"script_noteworthy"); + var_01 common_scripts\utility::trigger_off(); +} + +//Function Number: 309 +enable_trigger_with_targetname(param_00) +{ + var_01 = getent(param_00,"targetname"); + var_01 common_scripts\utility::trigger_on(); +} + +//Function Number: 310 +enable_trigger_with_noteworthy(param_00) +{ + var_01 = getent(param_00,"script_noteworthy"); + var_01 common_scripts\utility::trigger_on(); +} + +//Function Number: 311 +func_2247() +{ + return isdefined(level.hero_list[get_ai_number()]); +} + +//Function Number: 312 +get_ai_number() +{ + if(!isdefined(self.unique_id)) + { + set_ai_number(); + } + + return self.unique_id; +} + +//Function Number: 313 +set_ai_number() +{ + self.unique_id = "ai" + level.var_1A1A; + level.var_1A1A++; +} + +//Function Number: 314 +func_2249() +{ + level.hero_list[self.unique_id] = 1; +} + +//Function Number: 315 +func_1D1F() +{ + level.hero_list[self.unique_id] = undefined; +} + +//Function Number: 316 +func_224A() +{ + var_00 = []; + var_01 = getaiarray("allies"); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + if(var_01[var_02] func_2247()) + { + var_00[var_00.size] = var_01[var_02]; + } + } + + return var_00; +} + +//Function Number: 317 +set_team_pacifist(param_00,param_01) +{ + var_02 = getaiarray(param_00); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + var_02[var_03].pacifist = param_01; + } +} + +//Function Number: 318 +replace_on_death() +{ + maps\_colors::colornode_replace_on_death(); +} + +//Function Number: 319 +func_224C(param_00,param_01) +{ + maps\_colors::func_F63(param_00,param_01); +} + +//Function Number: 320 +func_224D() +{ + level.current_color_order = []; +} + +//Function Number: 321 +set_promotion_order(param_00,param_01) +{ + if(!isdefined(level.current_color_order)) + { + level.current_color_order = []; + } + + param_00 = func_220D(param_00); + param_01 = func_220D(param_01); + level.current_color_order[param_00] = param_01; + if(!isdefined(level.current_color_order[param_01])) + { + set_empty_promotion_order(param_01); + } +} + +//Function Number: 322 +set_empty_promotion_order(param_00) +{ + if(!isdefined(level.current_color_order)) + { + level.current_color_order = []; + } + + level.current_color_order[param_00] = "none"; +} + +//Function Number: 323 +remove_dead_from_array(param_00) +{ + var_01 = []; + foreach(var_03 in param_00) + { + if(!isalive(var_03)) + { + continue; + } + + var_01[var_01.size] = var_03; + } + + return var_01; +} + +//Function Number: 324 +remove_heroes_from_array(param_00) +{ + var_01 = []; + for(var_02 = 0;var_02 < param_00.size;var_02++) + { + if(param_00[var_02] func_2247()) + { + continue; + } + + var_01[var_01.size] = param_00[var_02]; + } + + return var_01; +} + +//Function Number: 325 +func_2250(param_00) +{ + var_01 = []; + for(var_02 = 0;var_02 < param_00.size;var_02++) + { + if(isdefined(param_00[var_02].animname)) + { + continue; + } + + var_01[var_01.size] = param_00[var_02]; + } + + return var_01; +} + +//Function Number: 326 +func_2251(param_00,param_01) +{ + var_02 = []; + for(var_03 = 0;var_03 < param_00.size;var_03++) + { + var_04 = param_00[var_03]; + if(!isdefined(var_04.script_forcecolor)) + { + continue; + } + + if(var_04.script_forcecolor == param_01) + { + continue; + } + + var_02[var_02.size] = var_04; + } + + return var_02; +} + +//Function Number: 327 +remove_noteworthy_from_array(param_00,param_01) +{ + var_02 = []; + for(var_03 = 0;var_03 < param_00.size;var_03++) + { + var_04 = param_00[var_03]; + if(!isdefined(var_04.script_noteworthy)) + { + continue; + } + + if(var_04.script_noteworthy == param_01) + { + continue; + } + + var_02[var_02.size] = var_04; + } + + return var_02; +} + +//Function Number: 328 +get_closest_colored_friendly(param_00,param_01) +{ + var_02 = func_0F3F("allies",param_00); + var_02 = remove_heroes_from_array(var_02); + if(!isdefined(param_01)) + { + var_03 = level.player.origin; + } + else + { + var_03 = var_02; + } + + return getclosest(var_03,var_02); +} + +//Function Number: 329 +remove_without_classname(param_00,param_01) +{ + var_02 = []; + for(var_03 = 0;var_03 < param_00.size;var_03++) + { + if(!issubstr(param_00[var_03].classname,param_01)) + { + continue; + } + + var_02[var_02.size] = param_00[var_03]; + } + + return var_02; +} + +//Function Number: 330 +func_2254(param_00,param_01) +{ + var_02 = []; + for(var_03 = 0;var_03 < param_00.size;var_03++) + { + if(!issubstr(param_00[var_03].model,param_01)) + { + continue; + } + + var_02[var_02.size] = param_00[var_03]; + } + + return var_02; +} + +//Function Number: 331 +func_2255(param_00,param_01,param_02) +{ + var_03 = func_0F3F("allies",param_00); + var_03 = remove_heroes_from_array(var_03); + if(!isdefined(param_02)) + { + var_04 = level.player.origin; + } + else + { + var_04 = var_03; + } + + var_03 = remove_without_classname(var_03,param_01); + return getclosest(var_04,var_03); +} + +//Function Number: 332 +func_2256(param_00,param_01) +{ + for(;;) + { + var_02 = get_closest_colored_friendly(param_00); + if(!isalive(var_02)) + { + wait 1; + continue; + } + + var_02 set_force_color(param_01); + } +} + +//Function Number: 333 +func_2257(param_00,param_01) +{ + for(;;) + { + var_02 = get_closest_colored_friendly(param_00); + if(!isalive(var_02)) + { + return; + } + + var_02 set_force_color(param_01); + } +} + +//Function Number: 334 +instantly_promote_nearest_friendly_with_classname(param_00,param_01,param_02) +{ + for(;;) + { + var_03 = func_2255(param_00,param_02); + if(!isalive(var_03)) + { + return; + } + + var_03 set_force_color(param_01); + } +} + +//Function Number: 335 +promote_nearest_friendly_with_classname(param_00,param_01,param_02) +{ + for(;;) + { + var_03 = func_2255(param_00,param_02); + if(!isalive(var_03)) + { + wait 1; + continue; + } + + var_03 set_force_color(param_01); + } +} + +//Function Number: 336 +riotshield_lock_orientation(param_00) +{ + self orientmode("face angle",param_00); + self.lockorientation = 1; +} + +//Function Number: 337 +riotshield_unlock_orientation() +{ + self.lockorientation = 0; +} + +//Function Number: 338 +instantly_set_color_from_array_with_classname(param_00,param_01,param_02) +{ + var_03 = 0; + var_04 = []; + for(var_05 = 0;var_05 < param_00.size;var_05++) + { + var_06 = param_00[var_05]; + if(var_03 || !issubstr(var_06.classname,param_02)) + { + var_04[var_04.size] = var_06; + continue; + } + + var_03 = 1; + var_06 set_force_color(param_01); + } + + return var_04; +} + +//Function Number: 339 +instantly_set_color_from_array(param_00,param_01) +{ + var_02 = 0; + var_03 = []; + for(var_04 = 0;var_04 < param_00.size;var_04++) + { + var_05 = param_00[var_04]; + if(var_02) + { + var_03[var_03.size] = var_05; + continue; + } + + var_02 = 1; + var_05 set_force_color(param_01); + } + + return var_03; +} + +//Function Number: 340 +wait_for_script_noteworthy_trigger(param_00) +{ + maps\_utility_code::wait_for_trigger(param_00,"script_noteworthy"); +} + +//Function Number: 341 +wait_for_targetname_trigger(param_00) +{ + maps\_utility_code::wait_for_trigger(param_00,"targetname"); +} + +//Function Number: 342 +wait_for_flag_or_timeout(param_00,param_01) +{ + if(common_scripts\utility::flag(param_00)) + { + return; + } + + var_02 = spawnstruct(); + var_02 thread maps\_utility_code::ent_waits_for_level_notify(param_00); + var_02 thread maps\_utility_code::ent_times_out(param_01); + var_02 waittill("done"); +} + +//Function Number: 343 +wait_for_notify_or_timeout(param_00,param_01) +{ + var_02 = spawnstruct(); + var_02 thread maps\_utility_code::ent_waits_for_notify(self,param_00); + var_02 thread maps\_utility_code::ent_times_out(param_01); + var_02 waittill("done"); +} + +//Function Number: 344 +func_2262(param_00) +{ + var_01 = spawnstruct(); + var_01 thread maps\_utility_code::ent_waits_for_trigger(self); + var_01 thread maps\_utility_code::ent_times_out(param_00); + var_01 waittill("done"); +} + +//Function Number: 345 +wait_for_either_trigger(param_00,param_01) +{ + var_02 = spawnstruct(); + var_03 = []; + var_03 = common_scripts\utility::array_combine(var_03,getentarray(param_00,"targetname")); + var_03 = common_scripts\utility::array_combine(var_03,getentarray(param_01,"targetname")); + for(var_04 = 0;var_04 < var_03.size;var_04++) + { + var_02 thread maps\_utility_code::ent_waits_for_trigger(var_03[var_04]); + } + + var_02 waittill("done"); +} + +//Function Number: 346 +func_2264(param_00) +{ + var_01 = maps\_spawner::func_16E7(param_00); + return var_01; +} + +//Function Number: 347 +dronespawn(param_00) +{ + if(!isdefined(param_00)) + { + param_00 = self; + } + + var_01 = maps\_spawner::func_16E7(param_00); + var_01 [[ level.drone_spawn_func ]](); + var_01.var_1A35 = param_00.spawn_functions; + var_01 thread maps\_spawner::func_1CD4(); + return var_01; +} + +//Function Number: 348 +func_20B3(param_00) +{ + return maps\_spawner::spawner_makerealai(param_00); +} + +//Function Number: 349 +func_0F89() +{ + if(isdefined(self.script_flag)) + { + return self.script_flag; + } + + if(isdefined(self.script_noteworthy)) + { + return self.script_noteworthy; + } +} + +//Function Number: 350 +func_1D1A() +{ + self.pathenemylookahead = 192; + self.pathenemyfightdist = 192; +} + +//Function Number: 351 +func_2265(param_00) +{ + if(param_00 == "on") + { + enable_cqbwalk(); + return; + } + + disable_cqbwalk(); +} + +//Function Number: 352 +enable_cqbwalk(param_00) +{ + if(!isdefined(param_00)) + { + self.cqbenabled = 1; + } + + self.cqbwalking = 1; + self.turnrate = 0.2; + level thread animscripts/cqb::func_C67(); +} + +//Function Number: 353 +disable_cqbwalk() +{ + self.cqbwalking = undefined; + self.cqbenabled = undefined; + self.turnrate = 0.3; + self.cqb_point_of_interest = undefined; +} + +//Function Number: 354 +func_1D16() +{ + self.busereadyidle = 1; +} + +//Function Number: 355 +disable_readystand() +{ + self.busereadyidle = undefined; +} + +//Function Number: 356 +func_2267(param_00) +{ + if(!isdefined(param_00)) + { + self.cqb_target = undefined; + return; + } + + self.cqb_target = param_00; + if(!isdefined(param_00.origin)) + { + } +} + +//Function Number: 357 +func_2268(param_00) +{ + if(isdefined(param_00) && param_00) + { + self.forcesuppression = 1; + return; + } + + self.forcesuppression = undefined; +} + +//Function Number: 358 +do_in_order(param_00,param_01,param_02,param_03) +{ + if(isdefined(param_01)) + { + [[ param_00 ]](param_01); + } + else + { + [[ param_00 ]](); + } + + if(isdefined(param_03)) + { + [[ param_02 ]](param_03); + return; + } + + [[ param_02 ]](); +} + +//Function Number: 359 +func_226A() +{ + maps\_spawner::scrub_guy(); +} + +//Function Number: 360 +send_notify(param_00,param_01) +{ + if(isdefined(param_01)) + { + self notify(param_00,param_01); + return; + } + + self notify(param_00); +} + +//Function Number: 361 +waittill_match_or_timeout(param_00,param_01,param_02) +{ + var_03 = spawnstruct(); + var_03 endon("complete"); + var_03 func_0614(param_02,::send_notify,"complete"); + self waittillmatch(param_01,param_00); +} + +//Function Number: 362 +deleteent(param_00) +{ + param_00 notify("deleted"); + param_00 delete(); +} + +//Function Number: 363 +func_226B(param_00) +{ + if(!isdefined(self.touched)) + { + self.touched = []; + } + + if(isdefined(self.touched[param_00.unique_id])) + { + return 0; + } + + self.touched[param_00.unique_id] = 1; + return 1; +} + +//Function Number: 364 +getanim(param_00) +{ + return level.scr_anim[self.animname][param_00]; +} + +//Function Number: 365 +func_226D(param_00) +{ + return isdefined(level.scr_anim[self.animname][param_00]); +} + +//Function Number: 366 +getanim_from_animname(param_00,param_01) +{ + return level.scr_anim[param_01][param_00]; +} + +//Function Number: 367 +getanim_generic(param_00) +{ + return level.scr_anim["generic"][param_00]; +} + +//Function Number: 368 +func_13E8(param_00,param_01,param_02) +{ + if(!isdefined(level.trigger_hint_string)) + { + level.trigger_hint_string = []; + level.var_1A3C = []; + } + + level.trigger_hint_string[param_00] = param_01; + precachestring(param_01); + if(isdefined(param_02)) + { + level.var_1A3C[param_00] = param_02; + } +} + +//Function Number: 369 +show_hint(param_00) +{ + thread maps\_utility_code::showhintprint_struct(param_00); +} + +//Function Number: 370 +hide_hint(param_00) +{ + param_00.timeout = 1; +} + +//Function Number: 371 +fire_radius(param_00,param_01) +{ + var_02 = spawn("trigger_radius",param_00,0,param_01,48); + for(;;) + { + var_02 waittill("trigger",var_03); + level.player dodamage(5,param_00); + } +} + +//Function Number: 372 +clearthreatbias(param_00,param_01) +{ + setthreatbias(param_00,param_01,0); + setthreatbias(param_01,param_00,0); +} + +//Function Number: 373 +func_2273(param_00) +{ +} + +//Function Number: 374 +throwgrenadeatplayerasap() +{ + animscripts/combat_utility::throwgrenadeatplayerasap_combat_utility(); +} + +//Function Number: 375 +func_2274(param_00,param_01) +{ + if(!param_00.size) + { + return param_01; + } + + var_02 = getarraykeys(param_01); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + param_00[var_02[var_03]] = param_01[var_02[var_03]]; + } + + return param_00; +} + +//Function Number: 376 +func_2275(param_00) +{ + self.ignoresuppression = param_00; +} + +//Function Number: 377 +set_goalradius(param_00) +{ + self.goalradius = param_00; +} + +//Function Number: 378 +try_forever_spawn() +{ + var_00 = self.var_1DEB; + for(;;) + { + var_01 = self dospawn(); + if(func_0F77(var_01)) + { + wait 1; + continue; + } + + return var_01; + } +} + +//Function Number: 379 +set_allowdeath(param_00) +{ + self.allowdeath = param_00; +} + +//Function Number: 380 +set_run_anim(param_00,param_01) +{ + if(isdefined(param_01)) + { + self.alwaysrunforward = param_01; + } + else + { + self.alwaysrunforward = 1; + } + + disable_turnanims(); + self.run_overrideanim = level.scr_anim[self.animname][param_00]; + self.walk_overrideanim = self.run_overrideanim; +} + +//Function Number: 381 +set_dog_walk_anim() +{ + self.a.movement = "walk"; + self.disablearrivals = 1; + self.disableexits = 1; + self.script_nobark = 1; +} + +//Function Number: 382 +func_227A(param_00,param_01,param_02,param_03) +{ + animscripts/animset::init_animset_custom_stand(param_00,param_01,param_02,param_03); +} + +//Function Number: 383 +func_227B(param_00,param_01,param_02) +{ + var_03 = level.animsets.move[param_00]; + if(isarray(param_01)) + { + } + else + { + } + + if(isdefined(var_03)) + { + } + + self.custommoveanimset[param_01] = var_41; +} + +//Function Number: 384 +set_generic_idle_anim(param_00) +{ + var_01 = level.scr_anim["generic"][param_00]; + if(isarray(var_01)) + { + self.specialidleanim = var_01; + return; + } + + self.specialidleanim[0] = var_01; +} + +//Function Number: 385 +set_idle_anim(param_00) +{ + var_01 = level.scr_anim[self.animname][param_00]; + if(isarray(var_01)) + { + self.specialidleanim = var_01; + return; + } + + self.specialidleanim[0] = var_01; +} + +//Function Number: 386 +func_227E() +{ + self.specialidleanim = undefined; + self notify("stop_specialidle"); +} + +//Function Number: 387 +set_generic_run_anim(param_00,param_01) +{ + set_generic_run_anim_array(param_00,undefined,param_01); +} + +//Function Number: 388 +clear_generic_run_anim() +{ + self notify("movemode"); + enable_turnanims(); + self.run_overrideanim = undefined; + self.walk_overrideanim = undefined; +} + +//Function Number: 389 +set_generic_run_anim_array(param_00,param_01,param_02) +{ + self notify("movemode"); + if(!isdefined(param_02) || param_02) + { + self.alwaysrunforward = 1; + } + else + { + self.alwaysrunforward = undefined; + } + + disable_turnanims(); + self.run_overrideanim = level.scr_anim["generic"][param_00]; + self.walk_overrideanim = self.run_overrideanim; + if(isdefined(param_01)) + { + self.var_BA8 = level.scr_anim["generic"][param_01]; + self.walk_override_weights = self.var_BA8; + return; + } + + self.var_BA8 = undefined; + self.walk_override_weights = undefined; +} + +//Function Number: 390 +set_run_anim_array(param_00,param_01,param_02) +{ + self notify("movemode"); + if(!isdefined(param_02) || param_02) + { + self.alwaysrunforward = 1; + } + else + { + self.alwaysrunforward = undefined; + } + + disable_turnanims(); + self.run_overrideanim = level.scr_anim[self.animname][param_00]; + self.walk_overrideanim = self.run_overrideanim; + if(isdefined(param_01)) + { + self.var_BA8 = level.scr_anim[self.animname][param_01]; + self.walk_override_weights = self.var_BA8; + return; + } + + self.var_BA8 = undefined; + self.walk_override_weights = undefined; +} + +//Function Number: 391 +clear_run_anim() +{ + self notify("clear_run_anim"); + self notify("movemode"); + if(self.type == "dog") + { + self.a.movement = "run"; + self.disablearrivals = 0; + self.disableexits = 0; + self.script_nobark = undefined; + return; + } + + if(!isdefined(self.var_2281)) + { + enable_turnanims(); + } + + self.alwaysrunforward = undefined; + self.run_overrideanim = undefined; + self.walk_overrideanim = undefined; + self.var_BA8 = undefined; + self.walk_override_weights = undefined; +} + +//Function Number: 392 +debugvar(param_00,param_01) +{ + setdvarifuninitialized(param_00,param_01); + return getdvarfloat(param_00); +} + +//Function Number: 393 +physicsjolt_proximity(param_00,param_01,param_02) +{ + self endon("death"); + self endon("stop_physicsjolt"); + if(!isdefined(param_00) || !isdefined(param_01) || !isdefined(param_02)) + { + param_00 = 400; + param_01 = 256; + param_02 = (0,0,0.075); + } + + var_03 = param_00 * param_00; + var_04 = 3; + var_05 = param_02; + for(;;) + { + wait 0.1; + param_02 = var_05; + if(self.code_classname == "script_vehicle") + { + var_06 = self vehicle_getspeed(); + if(var_06 < var_04) + { + var_07 = var_06 / var_04; + param_02 = var_05 * var_07; + } + } + + var_08 = distancesquared(self.origin,level.player.origin); + var_07 = var_03 / var_08; + if(var_07 > 1) + { + var_07 = 1; + } + + param_02 = param_02 * var_07; + var_09 = param_02[0] + param_02[1] + param_02[2]; + if(var_09 > 0.025) + { + physicsjitter(self.origin,param_00,param_01,param_02[2],param_02[2] * 2); + } + } +} + +//Function Number: 394 +set_goal_entity(param_00) +{ + self setgoalentity(param_00); +} + +//Function Number: 395 +activate_trigger(param_00,param_01,param_02) +{ + if(!isdefined(param_00)) + { + activate_trigger_process(param_02); + return; + } + + common_scripts\utility::array_thread(getentarray(param_00,param_01),::activate_trigger_process,param_02); +} + +//Function Number: 396 +activate_trigger_process(param_00) +{ + if(isdefined(self.script_color_allies)) + { + self.activated_color_trigger = 1; + maps\_colors::activate_color_trigger("allies"); + } + + if(isdefined(self.script_color_axis)) + { + self.activated_color_trigger = 1; + maps\_colors::activate_color_trigger("axis"); + } + + self notify("trigger",param_00); +} + +//Function Number: 397 +self_delete() +{ + self delete(); +} + +//Function Number: 398 +remove_nocolor_from_array(param_00) +{ + var_01 = []; + for(var_02 = 0;var_02 < param_00.size;var_02++) + { + var_03 = param_00[var_02]; + if(var_03 has_color()) + { + var_01[var_01.size] = var_03; + } + } + + return var_01; +} + +//Function Number: 399 +has_color() +{ + if(maps\_colors::get_team() == "axis") + { + return isdefined(self.script_color_axis) || isdefined(self.script_forcecolor); + } + + return isdefined(self.script_color_allies) || isdefined(self.script_forcecolor); +} + +//Function Number: 400 +clear_colors() +{ + clear_team_colors("axis"); + clear_team_colors("allies"); +} + +//Function Number: 401 +clear_team_colors(param_00) +{ + level.currentcolorforced[param_00]["r"] = undefined; + level.currentcolorforced[param_00]["b"] = undefined; + level.currentcolorforced[param_00]["c"] = undefined; + level.currentcolorforced[param_00]["y"] = undefined; + level.currentcolorforced[param_00]["p"] = undefined; + level.currentcolorforced[param_00]["o"] = undefined; + level.currentcolorforced[param_00]["g"] = undefined; +} + +//Function Number: 402 +get_script_palette() +{ + var_00 = []; + return var_41; +} + +//Function Number: 403 +func_0FEC(param_00,param_01) +{ + self endon("death"); + if(param_01 > 0) + { + wait param_01; + } + + if(!isdefined(self)) + { + return; + } + + self notify(param_00); +} + +//Function Number: 404 +gun_remove() +{ + if(isai(self)) + { + animscripts/shared::placeweaponon(self.weapon,"none"); + return; + } + + self detach(getweaponmodel(self.weapon),"tag_weapon_right"); +} + +//Function Number: 405 +gun_recall() +{ + if(isai(self)) + { + animscripts/shared::placeweaponon(self.weapon,"right"); + return; + } + + self attach(getweaponmodel(self.weapon),"tag_weapon_right"); +} + +//Function Number: 406 +place_weapon_on(param_00,param_01) +{ + if(!animscripts/utility::aihasweapon(param_00)) + { + animscripts/init::func_1C1A(param_00); + } + + animscripts/shared::placeweaponon(param_00,param_01); +} + +//Function Number: 407 +forceuseweapon(param_00,param_01) +{ + if(!animscripts/init::isweaponinitialized(param_00)) + { + animscripts/init::func_1C1A(param_00); + } + + var_02 = self.weapon != "none"; + var_03 = animscripts/utility::usingsidearm(); + var_04 = param_01 == "sidearm"; + var_05 = param_01 == "secondary"; + if(var_02 && var_03 != var_04) + { + if(var_03) + { + var_06 = "none"; + } + else if(var_06) + { + var_06 = "back"; + } + else + { + var_06 = "chest"; + } + + animscripts/shared::placeweaponon(self.weapon,var_06); + self.lastweapon = self.weapon; + } + else + { + self.lastweapon = param_00; + } + + animscripts/shared::placeweaponon(param_00,"right"); + if(var_04) + { + self.sidearm = param_00; + } + else if(var_05) + { + self.secondaryweapon = param_00; + } + else + { + self.primaryweapon = param_00; + } + + self.weapon = param_00; + self.bulletsinclip = weaponclipsize(self.weapon); + self notify("weapon_switch_done"); +} + +//Function Number: 408 +func_228C(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07) +{ + maps\_utility_code::lerp_player_view_to_tag_internal(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,0); +} + +//Function Number: 409 +func_228D(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07) +{ + maps\_utility_code::lerp_player_view_to_tag_internal(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,1); +} + +//Function Number: 410 +lerp_player_view_to_position(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09) +{ + param_09 = get_player_from_self(); + var_0A = spawn("script_origin",(0,0,0)); + var_0A.origin = param_09.origin; + var_0A.angles = param_09 getplayerangles(); + if(isdefined(param_08) && param_08) + { + param_09 playerlinkto(var_0A,"",param_03,param_04,param_05,param_06,param_07,param_08); + } + else if(isdefined(param_04)) + { + param_09 playerlinkto(var_0A,"",param_03,param_04,param_05,param_06,param_07); + } + else if(isdefined(param_03)) + { + param_09 playerlinkto(var_0A,"",param_03); + } + else + { + param_09 playerlinkto(var_0A); + } + + var_0A moveto(param_00,param_02,param_02 * 0.25); + var_0A rotateto(param_01,param_02,param_02 * 0.25); + wait param_02; + var_0A delete(); +} + +//Function Number: 411 +lerp_player_view_to_tag_oldstyle(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07) +{ + maps\_utility_code::lerp_player_view_to_tag_oldstyle_internal(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,0); +} + +//Function Number: 412 +func_0FAC(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08) +{ + var_09 = get_player_from_self(); + var_0A = spawn("script_origin",(0,0,0)); + var_0A.origin = var_09 func_22B7(); + var_0A.angles = var_09 getplayerangles(); + if(isdefined(param_08)) + { + var_09 playerlinktodelta(var_0A,"",param_03,param_04,param_05,param_06,param_07,param_08); + } + else if(isdefined(param_04)) + { + var_09 playerlinktodelta(var_0A,"",param_03,param_04,param_05,param_06,param_07); + } + else if(isdefined(param_03)) + { + var_09 playerlinktodelta(var_0A,"",param_03); + } + else + { + var_09 playerlinktodelta(var_0A); + } + + var_0A moveto(param_00,param_02,param_02 * 0.25); + var_0A rotateto(param_01,param_02,param_02 * 0.25); + wait param_02; + var_0A delete(); +} + +//Function Number: 413 +player_moves(param_00) +{ + var_01 = level.player.origin; + for(;;) + { + if(distance(var_01,level.player.origin) > param_00) + { + break; + } + + wait 0.05; + } +} + +//Function Number: 414 +waittill_either_function(param_00,param_01,param_02,param_03) +{ + var_04 = spawnstruct(); + thread maps\_utility_code::waittill_either_function_internal(var_04,param_00,param_01); + thread maps\_utility_code::waittill_either_function_internal(var_04,param_02,param_03); + var_04 waittill("done"); +} + +//Function Number: 415 +waittill_msg(param_00) +{ + self waittill(param_00); +} + +//Function Number: 416 +display_hint(param_00,param_01,param_02,param_03) +{ + var_04 = get_player_from_self(); + if(isdefined(level.var_1A3C[param_00])) + { + if(var_04 [[ level.var_1A3C[param_00] ]]()) + { + return; + } + + var_04 thread maps\_utility_code::hintprint(level.trigger_hint_string[param_00],level.var_1A3C[param_00],param_01,param_02,param_03,30); + return; + } + + var_04 thread maps\_utility_code::hintprint(level.trigger_hint_string[param_00],undefined,undefined,undefined,undefined,30); +} + +//Function Number: 417 +display_hint_timeout(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = get_player_from_self(); + if(var_05 [[ level.var_1A3C[param_00] ]]()) + { + return; + } + + var_05 thread maps\_utility_code::hintprint(level.trigger_hint_string[param_00],level.var_1A3C[param_00],param_02,param_03,param_04,param_01); +} + +//Function Number: 418 +func_2291(param_00) +{ + return level.scr_anim["generic"][param_00]; +} + +//Function Number: 419 +enable_careful() +{ + self.script_careful = 1; +} + +//Function Number: 420 +disable_careful() +{ + self.script_careful = 0; + self notify("stop_being_careful"); +} + +//Function Number: 421 +enable_sprint() +{ + self.sprint = 1; +} + +//Function Number: 422 +disable_sprint() +{ + self.sprint = undefined; +} + +//Function Number: 423 +disable_bulletwhizbyreaction() +{ + self.disablebulletwhizbyreaction = 1; +} + +//Function Number: 424 +func_2297() +{ + self.disablebulletwhizbyreaction = undefined; +} + +//Function Number: 425 +clear_dvar(param_00) +{ + setdvar(param_00,""); +} + +//Function Number: 426 +func_2299(param_00) +{ + return level.script == param_00; +} + +//Function Number: 427 +set_fixednode_true() +{ + self.fixednode = 1; +} + +//Function Number: 428 +func_229B() +{ + self.fixednode = 0; +} + +//Function Number: 429 +spawn_ai(param_00,param_01) +{ + if(isdefined(self.script_delay_spawn)) + { + self endon("death"); + wait self.script_delay_spawn; + } + + var_02 = undefined; + var_03 = isdefined(self.var_1CB0) && common_scripts\utility::flag("_stealth_enabled") && !common_scripts\utility::flag("_stealth_spotted"); + if(isdefined(self.script_forcespawn) || isdefined(param_00)) + { + if(!isdefined(self.var_1CAE)) + { + var_02 = self stalingradspawn(var_03); + } + else + { + var_02 = dronespawn(self); + } + } + else if(!isdefined(self.var_1CAE)) + { + var_02 = self dospawn(var_03); + } + else + { + var_02 = dronespawn(self); + } + + if(isdefined(param_01) && param_01 && isalive(var_02)) + { + var_02 magic_bullet_shield(); + } + + if(!isdefined(self.var_1CAE)) + { + func_0F77(var_02); + } + + if(isdefined(self.var_229D)) + { + self delete(); + } + + return var_02; +} + +//Function Number: 430 +func_0E1D(param_00,param_01,param_02,param_03,param_04,param_05) +{ + var_06 = spawnstruct(); + var_06 thread maps\_utility_code::function_stack_proc(self,param_00,param_01,param_02,param_03,param_04,param_05); + return maps\_utility_code::function_stack_wait_finish(var_06); +} + +//Function Number: 431 +function_stack_timeout(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + var_07 = spawnstruct(); + var_07 thread maps\_utility_code::function_stack_proc(self,param_01,param_02,param_03,param_04,param_05,param_06); + if(isdefined(var_07.function_stack_func_begun) || var_07 common_scripts\utility::waittill_any_timeout(param_00,"function_stack_func_begun") != "timeout") + { + return maps\_utility_code::function_stack_wait_finish(var_07); + } + + var_07 notify("death"); + return 0; +} + +//Function Number: 432 +function_stack_clear() +{ + var_00 = []; + if(isdefined(self.var_E1D[0]) && isdefined(self.var_E1D[0].function_stack_func_begun)) + { + } + + self.var_E1D = undefined; + self notify("clear_function_stack",var_41[0],self.var_E1D[0]); + waittillframeend; + if(!var_41.size) + { + return; + } + + if(!var_41[0].function_stack_func_begun) + { + return; + } + + self.var_E1D = var_41; +} + +//Function Number: 433 +geo_off() +{ + if(isdefined(self.geo_off)) + { + return; + } + + self.realorigin = self getorigin(); + self moveto(self.realorigin + (0,0,-10000),0.2); + self.geo_off = 1; +} + +//Function Number: 434 +func_22A0() +{ + if(!isdefined(self.geo_off)) + { + return; + } + + self moveto(self.realorigin,0.2); + self waittill("movedone"); + self.geo_off = undefined; +} + +//Function Number: 435 +disable_exits() +{ + self.disableexits = 1; +} + +//Function Number: 436 +enable_exits() +{ + self.disableexits = undefined; +} + +//Function Number: 437 +disable_turnanims() +{ + self.noturnanims = 1; +} + +//Function Number: 438 +enable_turnanims() +{ + self.noturnanims = undefined; +} + +//Function Number: 439 +disable_arrivals() +{ + self.disablearrivals = 1; +} + +//Function Number: 440 +enable_arrivals() +{ + self endon("death"); + waittillframeend; + self.disablearrivals = undefined; +} + +//Function Number: 441 +set_blur(param_00,param_01) +{ + setblur(param_00,param_01); +} + +//Function Number: 442 +func_22A6(param_00) +{ + self.goalradius = param_00; +} + +//Function Number: 443 +set_goal_node(param_00) +{ + self.last_set_goalnode = param_00; + self.var_22A7 = undefined; + self.last_set_goalent = undefined; + self setgoalnode(param_00); +} + +//Function Number: 444 +set_goal_node_targetname(param_00) +{ + var_01 = getnode(param_00,"targetname"); + set_goal_node(var_01); +} + +//Function Number: 445 +set_goal_pos(param_00) +{ + self.last_set_goalnode = undefined; + self.var_22A7 = param_00; + self.last_set_goalent = undefined; + self setgoalpos(param_00); +} + +//Function Number: 446 +set_goal_ent(param_00) +{ + set_goal_pos(param_00.origin); + self.last_set_goalent = param_00; +} + +//Function Number: 447 +objective_complete(param_00) +{ + maps\_utility_code::objective_recon(param_00); + objective_state(param_00,"done"); + level notify("objective_complete" + param_00); +} + +//Function Number: 448 +handsignal(param_00,param_01,param_02,param_03) +{ + var_04 = 1; + if(isdefined(param_01)) + { + var_04 = !param_01; + } + + if(isdefined(param_02)) + { + level endon(param_02); + } + + if(isdefined(param_03)) + { + level waittill(param_03); + } + + var_05 = "signal_" + param_00; + if(self.a.var_911 == "crouch") + { + var_05 = var_05 + "_crouch"; + } + else if(self.script == "cover_right") + { + var_05 = var_05 + "_coverR"; + } + else if(animscripts/utility::iscqbwalking()) + { + var_05 = var_05 + "_cqb"; + } + + if(var_04) + { + self setanimrestart(func_2291(var_05),1,0,1.1); + return; + } + + maps\_anim::anim_generic(self,var_05); +} + +//Function Number: 449 +get_guy_with_script_noteworthy_from_spawner(param_00) +{ + var_01 = getentarray(param_00,"script_noteworthy"); + var_02 = array_spawn(var_01); + return var_02[0]; +} + +//Function Number: 450 +get_guy_with_targetname_from_spawner(param_00) +{ + var_01 = getentarray(param_00,"targetname"); + var_02 = array_spawn(var_01); + return var_02[0]; +} + +//Function Number: 451 +get_guys_with_targetname_from_spawner(param_00) +{ + var_01 = getentarray(param_00,"targetname"); + return array_spawn(var_01); +} + +//Function Number: 452 +array_spawn(param_00,param_01,param_02) +{ + if(!isdefined(param_02)) + { + param_02 = 0; + } + + var_03 = []; + foreach(var_05 in param_00) + { + var_05.count = 1; + if(getsubstr(var_05.classname,7,10) == "veh") + { + var_06 = var_05 func_1B41(); + if(isdefined(var_06.target) && !isdefined(var_06.script_moveoverride)) + { + var_06 thread maps\_vehicle::func_1B44(); + } + + var_03[var_03.size] = var_06; + continue; + } + + var_06 = var_05 spawn_ai(param_01); + if(!param_02) + { + } + + var_03[var_03.size] = var_06; + } + + if(!param_02) + { + } + + return var_03; +} + +//Function Number: 453 +func_22AE(param_00,param_01,param_02,param_03) +{ + var_04 = getentarray(param_00,"targetname"); + if(isdefined(level.spawn_pool_enabled)) + { + var_05 = common_scripts\utility::getstructarray(param_00,"targetname"); + if(isdefined(param_03) && param_03) + { + deletestructarray_ref(var_05); + } + + var_06 = maps\_spawner::func_1CA5(var_05); + var_04 = common_scripts\utility::array_combine(var_04,var_06); + } + + return array_spawn(var_04,param_01,param_02); +} + +//Function Number: 454 +array_spawn_noteworthy(param_00,param_01,param_02,param_03) +{ + var_04 = getentarray(param_00,"script_noteworthy"); + if(isdefined(level.spawn_pool_enabled)) + { + var_05 = common_scripts\utility::getstructarray(param_00,"script_noteworthy"); + if(isdefined(param_03) && param_03) + { + deletestructarray_ref(var_05); + } + + var_06 = maps\_spawner::func_1CA5(var_05); + var_04 = common_scripts\utility::array_combine(var_04,var_06); + } + + return array_spawn(var_04,param_01,param_02); +} + +//Function Number: 455 +func_22B0(param_00,param_01) +{ + var_02 = getent(param_00,"script_noteworthy"); + var_03 = var_02 spawn_ai(param_01); + return var_03; +} + +//Function Number: 456 +spawn_targetname(param_00,param_01) +{ + var_02 = getent(param_00,"targetname"); + var_03 = var_02 spawn_ai(param_01); + return var_03; +} + +//Function Number: 457 +add_dialogue_line(param_00,param_01,param_02) +{ + if(getdvarint("loc_warnings",0)) + { + return; + } + + if(!isdefined(level.dialogue_huds)) + { + level.dialogue_huds = []; + } + + var_03 = 0; + for(;;) + { + if(!isdefined(level.dialogue_huds[var_03])) + { + break; + } + + var_03++; + } + + var_04 = "^3"; + if(isdefined(param_02)) + { + switch(param_02) + { + case "red": + case "r": + var_04 = "^1"; + break; + + case "green": + case "g": + var_04 = "^2"; + break; + + case "yellow": + case "y": + var_04 = "^3"; + break; + + case "blue": + case "b": + var_04 = "^4"; + break; + + case "cyan": + case "c": + var_04 = "^5"; + break; + + case "purple": + case "p": + var_04 = "^6"; + break; + + case "white": + case "w": + var_04 = "^7"; + break; + + case "black": + case "bl": + var_04 = "^8"; + break; + } + } + + level.dialogue_huds[var_03] = 1; + var_05 = maps\_hud_util::createfontstring("default",1.5); + var_05.location = 0; + var_05.alignx = "left"; + var_05.aligny = "top"; + var_05.foreground = 1; + var_05.sort = 20; + var_05.alpha = 0; + var_05 fadeovertime(0.5); + var_05.alpha = 1; + var_05.x = 40; + var_05.y = 260 + var_03 * 18; + var_05.label = " " + var_04 + "< " + param_00 + " > ^7" + param_01; + var_05.color = (1,1,1); + wait 2; + var_06 = 40; + var_05 fadeovertime(6); + var_05.alpha = 0; + for(var_07 = 0;var_07 < var_06;var_07++) + { + var_05.color = (1,1,0 / var_06 - var_07); + wait 0.05; + } + + wait 4; + var_05 destroy(); + level.dialogue_huds[var_03] = undefined; +} + +//Function Number: 458 +destructible_disable_explosion() +{ + common_scripts\_destructible::disable_explosion(); +} + +//Function Number: 459 +destructible_force_explosion() +{ + common_scripts\_destructible::force_explosion(); +} + +//Function Number: 460 +func_22B6(param_00) +{ + self.grenadeammo = param_00; +} + +//Function Number: 461 +func_22B7() +{ + var_00 = self.origin; + var_01 = anglestoup(self getplayerangles()); + var_02 = self getplayerviewheight(); + var_03 = var_00 + (0,0,var_02); + var_04 = var_00 + var_01 * var_02; + var_05 = var_03 - var_04; + var_06 = var_00 + var_05; + return var_06; +} + +//Function Number: 462 +set_baseaccuracy(param_00) +{ + self.baseaccuracy = param_00; +} + +//Function Number: 463 +set_console_status() +{ + if(!isdefined(level.console)) + { + level.console = getdvar("consoleGame") == "true"; + } + else + { + } + + if(!isdefined(level.xenon)) + { + level.xenon = getdvar("xenonGame") == "true"; + } + else + { + } + + if(!isdefined(level.ps3)) + { + level.ps3 = getdvar("ps3Game") == "true"; + } +} + +//Function Number: 464 +autosave_now(param_00) +{ + return maps\_autosave::_autosave_game_now(param_00); +} + +//Function Number: 465 +func_22BA() +{ + return maps\_autosave::_autosave_game_now(1); +} + +//Function Number: 466 +func_22BB(param_00) +{ + self.var_93B = func_2291(param_00); +} + +//Function Number: 467 +set_deathanim(param_00) +{ + self.var_93B = getanim(param_00); +} + +//Function Number: 468 +clear_deathanim() +{ + self.var_93B = undefined; +} + +//Function Number: 469 +hunted_style_door_open(param_00) +{ + wait 1.75; + if(isdefined(param_00)) + { + self playsound(param_00); + } + else + { + self playsound("door_wood_slow_open"); + } + + self rotateto(self.angles + (0,70,0),2,0.5,0); + self connectpaths(); + self waittill("rotatedone"); + self rotateto(self.angles + (0,40,0),2,0,2); +} + +//Function Number: 470 +func_22BD(param_00) +{ + wait 1.35; + if(isdefined(param_00)) + { + self playsound(param_00); + } + else + { + self playsound("door_wood_slow_open"); + } + + self rotateto(self.angles + (0,70,0),2,0.5,0); + self connectpaths(); + self waittill("rotatedone"); + self rotateto(self.angles + (0,40,0),2,0,2); +} + +//Function Number: 471 +lerp_fov_overtime(param_00,param_01) +{ + foreach(var_03 in level.players) + { + var_03 lerpfov(param_01,param_00); + } + + wait param_00; +} + +//Function Number: 472 +lerp_fovscale_overtime(param_00,param_01) +{ + var_02 = getdvarfloat("cg_fovscale"); + var_03 = int(param_00 / 0.05); + var_04 = param_01 - var_02 / var_03; + var_05 = var_02; + for(var_06 = 0;var_06 < var_03;var_06++) + { + var_05 = var_05 + var_04; + setsaveddvar("cg_fovscale",var_05); + wait 0.05; + } + + setsaveddvar("cg_fovscale",param_01); +} + +//Function Number: 473 +putgunaway() +{ + animscripts/shared::placeweaponon(self.weapon,"none"); + self.weapon = "none"; +} + +//Function Number: 474 +apply_fog() +{ + maps\_load::set_fog_progress(0); +} + +//Function Number: 475 +apply_end_fog() +{ + maps\_load::set_fog_progress(1); +} + +//Function Number: 476 +anim_stopanimscripted() +{ + self stopanimscripted(); + self notify("stop_loop"); + self notify("single anim","end"); + self notify("looping anim","end"); +} + +//Function Number: 477 +disable_pain() +{ + self.a.disablepain = 1; + self.allowpain = 0; +} + +//Function Number: 478 +enable_pain() +{ + self.a.disablepain = 0; + self.allowpain = 1; +} + +//Function Number: 479 +_delete() +{ + self delete(); +} + +//Function Number: 480 +_kill() +{ + self kill(); +} + +//Function Number: 481 +kill_wrapper() +{ + if(isplayer(self)) + { + if(common_scripts\utility::flag_exist("special_op_terminated") && common_scripts\utility::flag("special_op_terminated")) + { + return 0; + } + + if(is_player_down(self)) + { + self disableinvulnerability(); + } + } + + self enabledeathshield(0); + self kill(); + return 1; +} + +//Function Number: 482 +_setentitytarget(param_00) +{ + self setentitytarget(param_00); +} + +//Function Number: 483 +_clearentitytarget() +{ + self clearentitytarget(); +} + +//Function Number: 484 +_unlink() +{ + self unlink(); +} + +//Function Number: 485 +disable_oneshotfx_with_noteworthy(param_00) +{ + var_01 = getarraykeys(level._global_fx_ents[param_00]); + for(var_02 = 0;var_02 < var_01.size;var_02++) + { + level._global_fx_ents[param_00][var_01[var_02]].looper delete(); + level._global_fx_ents[param_00][var_01[var_02]] = undefined; + } +} + +//Function Number: 486 +_setlightintensity(param_00) +{ + self setlightintensity(param_00); +} + +//Function Number: 487 +_linkto(param_00,param_01,param_02,param_03) +{ + if(isdefined(param_03)) + { + self linkto(param_00,param_01,param_02,param_03); + return; + } + + if(isdefined(param_02)) + { + self linkto(param_00,param_01,param_02); + return; + } + + if(isdefined(param_01)) + { + self linkto(param_00,param_01); + return; + } + + self linkto(param_00); +} + +//Function Number: 488 +array_wait(param_00,param_01,param_02) +{ + var_03 = getarraykeys(param_00); + var_04 = []; + for(var_05 = 0;var_05 < var_03.size;var_05++) + { + var_06 = var_03[var_05]; + } + + for(var_05 = 0;var_05 < var_03.size;var_05++) + { + var_06 = var_03[var_05]; + var_04[var_06] = spawnstruct(); + var_04[var_06].var_FB9 = 1; + var_04[var_06] thread maps\_utility_code::array_waitlogic1(param_00[var_06],param_01,param_02); + } + + for(var_05 = 0;var_05 < var_03.size;var_05++) + { + var_06 = var_03[var_05]; + if(isdefined(param_00[var_06]) && var_04[var_06].var_FB9) + { + var_04[var_06] waittill("_array_wait"); + } + } +} + +//Function Number: 489 +func_22CB() +{ + self kill((0,0,0)); +} + +//Function Number: 490 +func_22CC(param_00) +{ + return level.var_1B2E[param_00]; +} + +//Function Number: 491 +isads() +{ + return self playerads() > 0.5; +} + +//Function Number: 492 +enable_auto_adjust_threatbias() +{ + level.auto_adjust_threatbias = 1; + if(level.gameskill >= 2) + { + level.player.threatbias = int(maps\_gameskill::get_locked_difficulty_val_player("threatbias",1)); + return; + } + + level.auto_adjust_difficulty_frac = getdvarint("autodifficulty_frac"); + var_00 = level.auto_adjust_difficulty_frac * 0.01; + level.player.threatbias = int(maps\_gameskill::get_blended_difficulty("threatbias",var_00)); +} + +//Function Number: 493 +disable_auto_adjust_threatbias() +{ + level.auto_adjust_threatbias = 0; +} + +//Function Number: 494 +func_1D1E() +{ + self.replace_on_death = undefined; + self notify("_disable_reinforcement"); +} + +//Function Number: 495 +waittill_player_lookat(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if(!isdefined(param_05)) + { + param_05 = level.player; + } + + var_06 = spawnstruct(); + if(isdefined(param_03)) + { + var_06 thread func_0FEC("timeout",param_03); + } + + var_06 endon("timeout"); + if(!isdefined(param_00)) + { + param_00 = 0.92; + } + + if(!isdefined(param_01)) + { + param_01 = 0; + } + + var_07 = int(param_01 * 20); + var_08 = var_07; + self endon("death"); + var_09 = isai(self); + var_0A = undefined; + for(;;) + { + if(var_09) + { + var_0A = self geteye(); + } + else + { + var_0A = self.origin; + } + + if(param_05 player_looking_at(var_0A,param_00,param_02,param_04)) + { + var_08--; + if(var_08 <= 0) + { + return 1; + } + } + else + { + var_08 = var_07; + } + + wait 0.05; + } +} + +//Function Number: 496 +func_22D2(param_00,param_01,param_02,param_03) +{ + waittill_player_lookat(param_01,param_00,param_02,undefined,param_03); +} + +//Function Number: 497 +player_looking_at(param_00,param_01,param_02,param_03) +{ + if(!isdefined(param_01)) + { + param_01 = 0.8; + } + + var_04 = 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_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: 498 +players_looking_at(param_00,param_01,param_02,param_03) +{ + for(var_04 = 0;var_04 < level.players.size;var_04++) + { + if(!level.players[var_04] player_looking_at(param_00,param_01,param_02,param_03)) + { + return 0; + } + } + + return 1; +} + +//Function Number: 499 +either_player_looking_at(param_00,param_01,param_02,param_03) +{ + for(var_04 = 0;var_04 < level.players.size;var_04++) + { + if(level.players[var_04] player_looking_at(param_00,param_01,param_02,param_03)) + { + return 1; + } + } + + return 0; +} + +//Function Number: 500 +player_can_see_ai(param_00,param_01) +{ + var_02 = gettime(); + if(!isdefined(param_01)) + { + param_01 = 0; + } + + if(isdefined(param_00.var_22D5) && param_00.var_22D5 + param_01 >= var_02) + { + return param_00.var_22D6; + } + + param_00.var_22D5 = var_02; + if(!within_fov(level.player.origin,level.player.angles,param_00.origin,0.766)) + { + param_00.var_22D6 = 0; + return 0; + } + + var_03 = level.player geteye(); + var_04 = param_00.origin; + if(sighttracepassed(var_03,var_04,1,level.player,param_00)) + { + param_00.var_22D6 = 1; + return 1; + } + + var_05 = param_00 geteye(); + if(sighttracepassed(var_03,var_05,1,level.player,param_00)) + { + param_00.var_22D6 = 1; + return 1; + } + + var_06 = var_05 + var_04 * 0.5; + if(sighttracepassed(var_03,var_06,1,level.player,param_00)) + { + param_00.var_22D6 = 1; + return 1; + } + + param_00.var_22D6 = 0; + return 0; +} + +//Function Number: 501 +players_within_distance(param_00,param_01) +{ + var_02 = param_00 * param_00; + for(var_03 = 0;var_03 < level.players.size;var_03++) + { + if(distancesquared(param_01,level.players[var_03].origin) < var_02) + { + return 1; + } + } + + return 0; +} + +//Function Number: 502 +ai_delete_when_out_of_sight(param_00,param_01) +{ + if(!isdefined(param_00)) + { + return; + } + + var_02 = 0.75; + if(issplitscreen()) + { + var_02 = 0.65; + } + + while(param_00.size > 0) + { + wait 1; + for(var_03 = 0;var_03 < param_00.size;var_03++) + { + if(!isdefined(param_00[var_03]) || !isalive(param_00[var_03])) + { + param_00 = common_scripts\utility::array_remove(param_00,param_00[var_03]); + continue; + } + + if(players_within_distance(param_01,param_00[var_03].origin)) + { + continue; + } + + if(either_player_looking_at(param_00[var_03].origin + (0,0,48),var_02,1)) + { + continue; + } + + if(isdefined(param_00[var_03].magic_bullet_shield)) + { + param_00[var_03] stop_magic_bullet_shield(); + } + + param_00[var_03] delete(); + param_00 = common_scripts\utility::array_remove(param_00,param_00[var_03]); + } + } +} + +//Function Number: 503 +add_wait(param_00,param_01,param_02,param_03) +{ + var_04 = spawnstruct(); + var_04.var_FBD = self; + var_04.func = param_00; + var_04.parms = []; + if(isdefined(param_01)) + { + var_04.parms[var_04.parms.size] = param_01; + } + + if(isdefined(param_02)) + { + var_04.parms[var_04.parms.size] = param_02; + } + + if(isdefined(param_03)) + { + var_04.parms[var_04.parms.size] = param_03; + } + + level.wait_any_func_array[level.wait_any_func_array.size] = var_04; +} + +//Function Number: 504 +add_abort(param_00,param_01,param_02,param_03) +{ + var_04 = spawnstruct(); + var_04.var_FBD = self; + var_04.func = param_00; + var_04.parms = []; + if(isdefined(param_01)) + { + var_04.parms[var_04.parms.size] = param_01; + } + + if(isdefined(param_02)) + { + var_04.parms[var_04.parms.size] = param_02; + } + + if(isdefined(param_03)) + { + var_04.parms[var_04.parms.size] = param_03; + } + + level.var_1A18[level.var_1A18.size] = var_04; +} + +//Function Number: 505 +add_func(param_00,param_01,param_02,param_03,param_04,param_05) +{ + var_06 = spawnstruct(); + var_06.var_FBD = self; + var_06.func = param_00; + var_06.parms = []; + if(isdefined(param_01)) + { + var_06.parms[var_06.parms.size] = param_01; + } + + if(isdefined(param_02)) + { + var_06.parms[var_06.parms.size] = param_02; + } + + if(isdefined(param_03)) + { + var_06.parms[var_06.parms.size] = param_03; + } + + if(isdefined(param_04)) + { + var_06.parms[var_06.parms.size] = param_04; + } + + if(isdefined(param_05)) + { + var_06.parms[var_06.parms.size] = param_05; + } + + level.var_1A14[level.var_1A14.size] = var_06; +} + +//Function Number: 506 +func_22DA(param_00,param_01,param_02,param_03,param_04,param_05) +{ + var_06 = spawnstruct(); + var_06.var_FBD = self; + var_06.func = param_00; + var_06.parms = []; + if(isdefined(param_01)) + { + var_06.parms[var_06.parms.size] = param_01; + } + + if(isdefined(param_02)) + { + var_06.parms[var_06.parms.size] = param_02; + } + + if(isdefined(param_03)) + { + var_06.parms[var_06.parms.size] = param_03; + } + + if(isdefined(param_04)) + { + var_06.parms[var_06.parms.size] = param_04; + } + + if(isdefined(param_05)) + { + var_06.parms[var_06.parms.size] = param_05; + } + + level.run_call_after_wait_array[level.run_call_after_wait_array.size] = var_06; +} + +//Function Number: 507 +add_noself_call(param_00,param_01,param_02,param_03,param_04,param_05) +{ + var_06 = spawnstruct(); + var_06.func = param_00; + var_06.parms = []; + if(isdefined(param_01)) + { + var_06.parms[var_06.parms.size] = param_01; + } + + if(isdefined(param_02)) + { + var_06.parms[var_06.parms.size] = param_02; + } + + if(isdefined(param_03)) + { + var_06.parms[var_06.parms.size] = param_03; + } + + if(isdefined(param_04)) + { + var_06.parms[var_06.parms.size] = param_04; + } + + if(isdefined(param_05)) + { + var_06.parms[var_06.parms.size] = param_05; + } + + level.var_1A16[level.var_1A16.size] = var_06; +} + +//Function Number: 508 +add_endon(param_00) +{ + var_01 = spawnstruct(); + var_01.var_FBD = self; + var_01.ender = param_00; + level.var_1A17[level.var_1A17.size] = var_01; +} + +//Function Number: 509 +do_wait_any() +{ + do_wait(level.wait_any_func_array.size - 1); +} + +//Function Number: 510 +do_wait(param_00) +{ + if(!isdefined(param_00)) + { + param_00 = 0; + } + + var_01 = spawnstruct(); + var_02 = level.wait_any_func_array; + var_03 = level.var_1A17; + var_04 = level.var_1A14; + var_05 = level.run_call_after_wait_array; + var_06 = level.var_1A16; + var_07 = level.var_1A18; + level.wait_any_func_array = []; + level.var_1A14 = []; + level.var_1A17 = []; + level.var_1A18 = []; + level.run_call_after_wait_array = []; + level.var_1A16 = []; + var_01.count = var_02.size; + var_01 common_scripts\utility::array_levelthread(var_02,::maps\_utility_code::waittill_func_ends,var_03); + var_01 thread maps\_utility_code::do_abort(var_07); + var_01 endon("any_funcs_aborted"); + for(;;) + { + if(var_01.count <= param_00) + { + break; + } + + var_01 waittill("func_ended"); + } + + var_01 notify("all_funcs_ended"); + common_scripts\utility::array_levelthread(var_04,::maps\_utility_code::exec_func,[]); + common_scripts\utility::array_levelthread(var_05,::maps\_utility_code::func_FBB); + common_scripts\utility::array_levelthread(var_06,::maps\_utility_code::exec_call_noself); +} + +//Function Number: 511 +func_1950() +{ + var_00 = spawnstruct(); + var_01 = level.var_1A14; + level.var_1A14 = []; + foreach(var_03 in var_01) + { + level maps\_utility_code::exec_func(var_03,[]); + } + + var_00 notify("all_funcs_ended"); +} + +//Function Number: 512 +is_default_start() +{ + if(isdefined(level.forced_start_catchup) && level.forced_start_catchup == 1) + { + return 0; + } + + if(isdefined(level.default_start_override) && level.default_start_override == level.start_point) + { + return 1; + } + + if(isdefined(level.default_start)) + { + return level.start_point == "default"; + } + + if(level_has_start_points()) + { + return level.start_point == level.var_1AB6[0]["name"]; + } + + return level.start_point == "default"; +} + +//Function Number: 513 +func_22DF() +{ + level.forced_start_catchup = 1; +} + +//Function Number: 514 +func_22E0() +{ + if(!level_has_start_points()) + { + return 1; + } + + return level.start_point == level.var_1AB6[0]["name"]; +} + +//Function Number: 515 +is_after_start(param_00) +{ + var_01 = 0; + if(level.start_point == param_00) + { + return 0; + } + + for(var_02 = 0;var_02 < level.var_1AB6.size;var_02++) + { + if(level.var_1AB6[var_02]["name"] == param_00) + { + var_01 = 1; + continue; + } + + if(level.var_1AB6[var_02]["name"] == level.start_point) + { + return var_01; + } + } +} + +//Function Number: 516 +_earthquake(param_00,param_01,param_02,param_03) +{ + earthquake(param_00,param_01,param_02,param_03); +} + +//Function Number: 517 +waterfx(param_00,param_01) +{ + self endon("death"); + var_02 = 0; + if(isdefined(param_01)) + { + var_02 = 1; + } + + if(isdefined(param_00)) + { + common_scripts\utility::flag_assert(param_00); + level endon(param_00); + } + + for(;;) + { + wait randomfloatrange(0.15,0.3); + var_03 = self.origin + (0,0,150); + var_04 = self.origin - (0,0,150); + var_05 = bullettrace(var_03,var_04,0,undefined); + if(var_05["surfacetype"] != "water") + { + continue; + } + + var_06 = "water_movement"; + if(isplayer(self)) + { + if(distance(self getvelocity(),(0,0,0)) < 5) + { + var_06 = "water_stop"; + } + } + else if(isdefined(level._effect["water_" + self.a.movement])) + { + var_06 = "water_" + self.a.movement; + } + + var_07 = common_scripts\utility::func_539(var_06); + var_03 = var_05["position"]; + var_08 = (0,self.angles[1],0); + var_09 = anglestoforward(var_08); + var_0A = anglestoup(var_08); + playfx(var_07,var_03,var_0A,var_09); + if(var_06 != "water_stop" && var_02) + { + thread common_scripts\utility::play_sound_in_space(param_01,var_03); + } + } +} + +//Function Number: 518 +func_22E4(param_00) +{ + if(isdefined(param_00)) + { + common_scripts\utility::flag_assert(param_00); + level endon(param_00); + } + + for(;;) + { + wait randomfloatrange(0.25,0.5); + var_01 = self.origin + (0,0,0); + var_02 = self.origin - (0,0,5); + var_03 = bullettrace(var_01,var_02,0,undefined); + var_04 = anglestoforward(self.angles); + var_05 = distance(self getvelocity(),(0,0,0)); + if(isdefined(self.vehicle)) + { + continue; + } + + if(var_03["surfacetype"] != "snow") + { + continue; + } + + if(var_05 <= 10) + { + continue; + } + + var_06 = "snow_movement"; + if(distance(self getvelocity(),(0,0,0)) <= 154) + { + playfx(common_scripts\utility::func_539("footstep_snow_small"),var_03["position"],var_03["normal"],var_04); + } + + if(distance(self getvelocity(),(0,0,0)) > 154) + { + playfx(common_scripts\utility::func_539("footstep_snow"),var_03["position"],var_03["normal"],var_04); + } + } +} + +//Function Number: 519 +mix_up(param_00) +{ + var_01 = 60; + for(var_02 = 0;var_02 < var_01;var_02++) + { + self setsoundblend(param_00,param_00 + "_off",var_01 - var_02 / var_01); + wait 0.05; + } +} + +//Function Number: 520 +mix_down(param_00) +{ + var_01 = 60; + for(var_02 = 0;var_02 < var_01;var_02++) + { + self setsoundblend(param_00,param_00 + "_off",var_02 / var_01); + wait 0.05; + } +} + +//Function Number: 521 +func_22E7(param_00,param_01) +{ + param_00 endon("death"); + self endon("death"); + if(!isdefined(param_01)) + { + param_01 = (0,0,0); + } + + for(;;) + { + self.origin = param_00.origin + param_01; + self.angles = param_00.angles; + wait 0.05; + } +} + +//Function Number: 522 +nextmission() +{ + maps\_utility_code::mission_recon(); + maps\_endmission::_nextmission(); +} + +//Function Number: 523 +func_22E8(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = []; + if(isdefined(param_02)) + { + } + + if(isdefined(param_03)) + { + } + + if(isdefined(param_04)) + { + } + + if(isdefined(var_05)) + { + } + + return var_41; +} + +//Function Number: 524 +fail_on_friendly_fire() +{ + level.failonfriendlyfire = 1; +} + +//Function Number: 525 +normal_friendly_fire_penalty() +{ + level.failonfriendlyfire = 0; +} + +//Function Number: 526 +getplayerclaymores() +{ + var_00 = self getweaponslistall(); + var_01 = []; + for(var_02 = 0;var_02 < var_00.size;var_02++) + { + var_03 = var_00[var_02]; + var_01[var_03] = self getweaponammoclip(var_03); + } + + var_04 = 0; + if(isdefined(var_01["claymore"]) && var_01["claymore"] > 0) + { + var_04 = var_01["claymore"]; + } + + return var_04; +} + +//Function Number: 527 +getplayerc4() +{ + var_00 = self getweaponslistall(); + var_01 = []; + for(var_02 = 0;var_02 < var_00.size;var_02++) + { + var_03 = var_00[var_02]; + var_01[var_03] = self getweaponammoclip(var_03); + } + + var_04 = 0; + if(isdefined(var_01["c4"]) && var_01["c4"] > 0) + { + var_04 = var_01["c4"]; + } + + return var_04; +} + +//Function Number: 528 +_wait(param_00) +{ + wait param_00; +} + +//Function Number: 529 +_waittillmatch(param_00,param_01) +{ + self waittillmatch(param_01,param_00); +} + +//Function Number: 530 +func_22EE(param_00,param_01) +{ + setsaveddvar(param_00,param_01); +} + +//Function Number: 531 +func_22EF(param_00,param_01,param_02) +{ + var_03 = getdvarfloat(param_00); + var_04 = param_01 - var_03; + var_05 = 0.05; + var_06 = int(param_02 / var_05); + var_07 = var_04 / var_06; + while(var_06) + { + var_03 = var_03 + var_07; + setsaveddvar(param_00,var_03); + wait var_05; + var_06--; + } + + setsaveddvar(param_00,param_01); +} + +//Function Number: 532 +giveachievement_wrapper(param_00) +{ + if(func_14F5()) + { + return; + } + + if(level.script == "ending" && isdefined(level.var_14F7) && level.var_14F7 == "free") + { + return; + } + + foreach(var_02 in level.players) + { + var_02 giveachievement(param_00); + } +} + +//Function Number: 533 +player_giveachievement_wrapper(param_00) +{ + if(func_14F5()) + { + return; + } + + if(level.script == "ending" && isdefined(level.var_14F7) && level.var_14F7 == "free") + { + return; + } + + self giveachievement(param_00); +} + +//Function Number: 534 +add_jav_glow(param_00) +{ + var_01 = spawn("script_model",(0,0,0)); + var_01 setcontents(0); + var_01 setmodel("weapon_javelin_obj"); + var_01.origin = self.origin; + var_01.angles = self.angles; + add_wait(::delete_on_not_defined); + if(isdefined(param_00)) + { + common_scripts\utility::flag_assert(param_00); + add_wait(::common_scripts\utility::flag_wait,param_00); + } + + do_wait_any(); + var_01 delete(); +} + +//Function Number: 535 +func_22F1(param_00) +{ + var_01 = spawn("script_model",(0,0,0)); + var_01 setcontents(0); + var_01 setmodel("weapon_c4_obj"); + var_01.origin = self.origin; + var_01.angles = self.angles; + add_wait(::delete_on_not_defined); + if(isdefined(param_00)) + { + common_scripts\utility::flag_assert(param_00); + add_wait(::common_scripts\utility::flag_wait,param_00); + } + + do_wait_any(); + var_01 delete(); +} + +//Function Number: 536 +delete_on_not_defined() +{ + for(;;) + { + if(!isdefined(self)) + { + return; + } + + wait 0.05; + } +} + +//Function Number: 537 +func_22F3() +{ +} + +//Function Number: 538 +slowmo_end() +{ +} + +//Function Number: 539 +func_22F4(param_00) +{ + level.slowmo.speed_slow = param_00; +} + +//Function Number: 540 +slowmo_setspeed_norm(param_00) +{ + level.slowmo.speed_norm = param_00; +} + +//Function Number: 541 +slowmo_setlerptime_in(param_00) +{ + level.slowmo.var_1B75 = param_00; +} + +//Function Number: 542 +slowmo_setlerptime_out(param_00) +{ + level.slowmo.lerp_time_out = param_00; +} + +//Function Number: 543 +slowmo_lerp_in() +{ + if(isdefined(level.var_80EE) && level.var_80EE) + { + return; + } + + setslowmotion(level.slowmo.speed_norm,level.slowmo.speed_slow,level.slowmo.var_1B75); +} + +//Function Number: 544 +slowmo_lerp_out() +{ + if(isdefined(level.var_80EE) && level.var_80EE) + { + return; + } + + setslowmotion(level.slowmo.speed_slow,level.slowmo.speed_norm,level.slowmo.lerp_time_out); +} + +//Function Number: 545 +func_22F8(param_00,param_01,param_02,param_03) +{ + level.earthquake[param_00]["magnitude"] = param_01; + level.earthquake[param_00]["duration"] = param_02; + level.earthquake[param_00]["radius"] = param_03; +} + +//Function Number: 546 +arcademode_kill(param_00,param_01,param_02) +{ + if(getdvar("arcademode") != "1") + { + return; + } + + thread maps\_arcademode::arcademode_add_points(param_00,1,param_01,param_02); +} + +//Function Number: 547 +func_22F9(param_00,param_01,param_02) +{ + if(getdvar("arcademode") != "1") + { + return; + } + + thread maps\_arcademode::arcademode_add_points(param_00,0,param_01,param_02); +} + +//Function Number: 548 +func_22FA(param_00,param_01) +{ + if(1) + { + return; + } + + if(getdvar("arcademode") != "1") + { + return; + } + + var_02 = maps\_arcademode::arcademode_checkpoint_getid(param_01); + if(!isdefined(var_02)) + { + var_02 = level.arcademode_checkpoint_dvars.size; + level.arcademode_checkpoint_dvars[level.arcademode_checkpoint_dvars.size] = param_01; + } + + if(getdvar("arcademode_checkpoint_" + var_02) == "1") + { + return; + } + + setdvar("arcademode_checkpoint_" + var_02,"1"); + if(getdvar("arcademode_full") == "1") + { + if(level.gameskill == 2) + { + param_00 = param_00 * 2; + } + + if(level.gameskill == 3) + { + param_00 = param_00 * 2.5; + } + } + + var_03 = getdvarint("arcademode_time"); + var_04 = getdvarint("arcademode_stored_time"); + var_04 = var_04 + var_03; + setdvar("arcademode_stored_time",var_04); + setdvar("arcademode_time",param_00 * 60); + var_05 = 800; + var_06 = 0.8; + level.player thread common_scripts\utility::play_sound_in_space("arcademode_checkpoint",level.player geteye()); + thread maps\_arcademode::draw_checkpoint(var_05,var_06,1); + thread maps\_arcademode::draw_checkpoint(var_05,var_06,-1); +} + +//Function Number: 549 +arcademode() +{ + return getdvar("arcademode") == "1"; +} + +//Function Number: 550 +arcademode_stop_timer() +{ + if(!isdefined(level.arcademode_hud_timer)) + { + return; + } + + level notify("arcadeMode_remove_timer"); + level.arcademode_stoptime = gettime(); + level.arcademode_hud_timer destroy(); + level.arcademode_hud_timer = undefined; +} + +//Function Number: 551 +musicplaywrapper(param_00,param_01,param_02) +{ + level.last_song = param_00; + if(!arcademode() || !common_scripts\utility::flag("arcadeMode_multiplier_maxed")) + { + if(!isdefined(param_01)) + { + param_01 = 1; + } + + if(!isdefined(param_02)) + { + param_02 = 0; + } + + musicstop(0); + musicplay(param_00,0,1,1,param_02); + } +} + +//Function Number: 552 +music_loop(param_00,param_01,param_02,param_03,param_04) +{ + thread maps\_utility_code::music_loop_internal(param_00,param_01,param_02,param_03,param_04); +} + +//Function Number: 553 +music_loop_stealth(param_00,param_01,param_02,param_03,param_04) +{ + thread maps\_utility_code::music_loop_internal(param_00,param_01,param_02,param_03,param_04,1); +} + +//Function Number: 554 +music_play(param_00,param_01,param_02,param_03) +{ + if(isdefined(param_01) && param_01 > 0) + { + thread maps\_utility_code::music_play_internal_stop_with_fade_then_call(param_00,param_01,param_02,param_03); + return; + } + + music_stop(); + musicplaywrapper(param_00,param_02,param_03); +} + +//Function Number: 555 +music_stop(param_00) +{ + if(!isdefined(param_00) || param_00 <= 0) + { + musicstop(); + } + else + { + musicstop(param_00); + } + + level notify("stop_music"); +} + +//Function Number: 556 +func_17F5() +{ + var_00 = getentarray("grenade","classname"); + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + var_02 = var_00[var_01]; + if(var_02.model == "weapon_claymore") + { + continue; + } + + for(var_03 = 0;var_03 < level.players.size;var_03++) + { + var_04 = level.players[var_03]; + if(distancesquared(var_02.origin,var_04.origin) < 75625) + { + return 1; + } + } + } + + return 0; +} + +//Function Number: 557 +func_1F1A() +{ + return getdvarint("player_died_recently","0") > 0; +} + +//Function Number: 558 +all_players_istouching(param_00) +{ + foreach(var_02 in level.players) + { + if(!var_02 istouching(param_00)) + { + return 0; + } + } + + return 1; +} + +//Function Number: 559 +any_players_istouching(param_00) +{ + foreach(var_02 in level.players) + { + if(var_02 istouching(param_00)) + { + return 1; + } + } + + return 0; +} + +//Function Number: 560 +get_ent_closest_to_flag_trig(param_00,param_01) +{ + if(param_01.size == 1) + { + return param_01[0]; + } + + var_02 = undefined; + var_03 = undefined; + var_04 = getentarray("trigger_multiple","classname"); + for(var_05 = 0;var_05 < var_04.size;var_05++) + { + if(isdefined(var_04[var_05].script_flag) && var_04[var_05].script_flag == param_00) + { + var_02 = var_04[var_05]; + break; + } + } + + var_03 = getclosest(var_02.origin,param_01); + return var_03; +} + +//Function Number: 561 +getdifficulty() +{ + if(level.gameskill < 1) + { + return "easy"; + } + + if(level.gameskill < 2) + { + return "medium"; + } + + if(level.gameskill < 3) + { + return "hard"; + } + + return "fu"; +} + +//Function Number: 562 +func_2300(param_00) +{ + for(var_01 = 0;var_01 < level.players.size;var_01++) + { + if(param_00 == 1) + { + level.players[var_01] hide(); + continue; + } + + level.players[var_01] show(); + } +} + +//Function Number: 563 +setmodelfunc(param_00,param_01) +{ + if(!isdefined(param_01)) + { + param_01 = 0; + } + + thread maps\_loadout::updatemodel(param_00); +} + +//Function Number: 564 +func_2301() +{ + var_00 = 0; + var_01 = 0; + var_02 = 0; + foreach(var_04 in level.players) + { + var_00 = var_00 + var_04.origin[0]; + var_01 = var_01 + var_04.origin[1]; + var_02 = var_02 + var_04.origin[2]; + } + + var_00 = var_00 / level.players.size; + var_01 = var_01 / level.players.size; + var_02 = var_02 / level.players.size; + return (var_00,var_01,var_02); +} + +//Function Number: 565 +get_average_origin(param_00) +{ + var_01 = (0,0,0); + foreach(var_03 in param_00) + { + var_01 = var_01 + var_03.origin; + } + + return var_01 * 1 / param_00.size; +} + +//Function Number: 566 +generic_damage_think() +{ + self.damage_functions = []; + for(;;) + { + self waittill("damage",var_00,var_01,var_02,var_03,var_04,var_05,var_06); + foreach(var_08 in self.damage_functions) + { + thread [[ var_08 ]](var_00,var_01,var_02,var_03,var_04,var_05,var_06); + } + } +} + +//Function Number: 567 +add_damage_function(param_00) +{ + self.damage_functions[self.damage_functions.size] = param_00; +} + +//Function Number: 568 +remove_damage_function(param_00) +{ + var_01 = []; + foreach(var_03 in self.damage_functions) + { + if(var_03 == param_00) + { + continue; + } + + var_01[var_01.size] = var_03; + } + + self.damage_functions = var_01; +} + +//Function Number: 569 +func_0E86(param_00,param_01) +{ + maps\_rank::updateplayerscore(param_00,param_01); +} + +//Function Number: 570 +playlocalsoundwrapper(param_00) +{ + self playlocalsound(param_00); +} + +//Function Number: 571 +func_2305(param_00) +{ + if(level.players.size < 1) + { + return; + } + + foreach(var_02 in level.players) + { + if(param_00 == 1) + { + var_02 enableweapons(); + continue; + } + + var_02 disableweapons(); + } +} + +//Function Number: 572 +teleport_players(param_00) +{ + var_01 = undefined; + var_02 = undefined; + var_03 = undefined; + foreach(var_05 in param_00) + { + if(isdefined(var_05.script_noteworthy) && var_05.script_noteworthy == "player1") + { + var_01 = var_05; + continue; + } + + if(isdefined(var_05.script_noteworthy) && var_05.script_noteworthy == "player2") + { + var_02 = var_05; + continue; + } + + if(!isdefined(var_01)) + { + var_01 = var_05; + } + + if(!isdefined(var_02)) + { + var_02 = var_05; + } + } + + foreach(var_08 in level.players) + { + if(var_08 == level.player) + { + var_03 = var_01; + } + else if(var_08 == level.player2) + { + var_03 = var_02; + } + + var_08 setorigin(var_03.origin); + var_08 setplayerangles(var_03.angles); + } +} + +//Function Number: 573 +teleport_player(param_00) +{ + level.player setorigin(param_00.origin); + if(isdefined(param_00.angles)) + { + level.player setplayerangles(param_00.angles); + } +} + +//Function Number: 574 +hide_player_model() +{ + if(!func_0E89()) + { + return; + } + + self.is_hidden = 1; + thread maps\_loadout::updatemodel(undefined); +} + +//Function Number: 575 +show_player_model() +{ + if(!func_0E89()) + { + return; + } + + self.is_hidden = 0; + thread maps\_loadout::updatemodel(self.last_modelfunc); +} + +//Function Number: 576 +translate_local() +{ + var_00 = []; + if(isdefined(self.entities)) + { + var_00 = self.entities; + } + + if(isdefined(self.entity)) + { + } + + common_scripts\utility::array_levelthread(var_41,::maps\_utility_code::func_FC5); +} + +//Function Number: 577 +open_up_fov(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + level.player endon("stop_opening_fov"); + wait param_00; + level.player playerlinktodelta(param_01,param_02,1,param_03,param_04,param_05,param_06,1); +} + +//Function Number: 578 +get_ai_touching_volume(param_00,param_01,param_02) +{ + if(!isdefined(param_00)) + { + param_00 = "all"; + } + + if(!isdefined(param_01)) + { + param_01 = "all"; + } + + var_03 = getaispeciesarray(param_00,param_01); + var_04 = []; + foreach(var_06 in var_03) + { + if(var_06 istouching(self)) + { + var_04[var_04.size] = var_06; + } + } + + return var_04; +} + +//Function Number: 579 +get_drones_touching_volume(param_00) +{ + if(!isdefined(param_00)) + { + param_00 = "all"; + } + + var_01 = []; + if(param_00 == "all") + { + var_01 = array_merge(level.drones["allies"].array,level.drones["axis"].array); + var_01 = array_merge(var_01,level.drones["neutral"].array); + } + else + { + var_01 = level.drones[param_00].array; + } + + var_02 = []; + foreach(var_04 in var_01) + { + if(!isdefined(var_04)) + { + continue; + } + + if(var_04 istouching(self)) + { + var_02[var_02.size] = var_04; + } + } + + return var_02; +} + +//Function Number: 580 +get_drones_with_targetname(param_00) +{ + var_01 = array_merge(level.drones["allies"].array,level.drones["axis"].array); + var_01 = array_merge(var_01,level.drones["neutral"].array); + var_02 = []; + foreach(var_04 in var_01) + { + if(!isdefined(var_04)) + { + continue; + } + + if(isdefined(var_04.targetname) && var_04.targetname == param_00) + { + var_02[var_02.size] = var_04; + } + } + + return var_02; +} + +//Function Number: 581 +get_other_player(param_00) +{ + foreach(var_02 in level.players) + { + if(param_00 == var_02) + { + continue; + } + + return var_02; + } +} + +//Function Number: 582 +is_other_player_downed(param_00) +{ + var_01 = get_other_player(param_00); + return is_player_down(var_01); +} + +//Function Number: 583 +set_count(param_00) +{ + self.count = param_00; +} + +//Function Number: 584 +follow_path(param_00,param_01,param_02) +{ + self notify("_utility::follow_path"); + self endon("_utility::follow_path"); + self endon("death"); + var_03 = undefined; + if(!isdefined(param_00.classname)) + { + if(!isdefined(param_00.type)) + { + var_03 = "struct"; + } + else + { + var_03 = "node"; + } + } + else + { + var_03 = "entity"; + } + + if(!isdefined(param_01)) + { + param_01 = 300; + } + + var_04 = self.script_forcegoal; + self.script_forcegoal = 1; + maps\_spawner::func_1D26(param_00,var_03,param_02,param_01); + self.script_forcegoal = var_04; +} + +//Function Number: 585 +func_2310(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if(!isdefined(param_00)) + { + param_00 = 250; + } + + if(!isdefined(param_01)) + { + param_01 = 100; + } + + if(!isdefined(param_02)) + { + param_02 = param_00 * 2; + } + + if(!isdefined(param_03)) + { + param_03 = param_00 * 1.25; + } + + if(!isdefined(param_05)) + { + param_05 = 0; + } + + self.var_FD0 = param_05; + thread maps\_utility_code::dynamic_run_speed_proc(param_00,param_01,param_02,param_03,param_04); +} + +//Function Number: 586 +func_2311() +{ + self notify("stop_dynamic_run_speed"); +} + +//Function Number: 587 +player_seek_enable() +{ + self endon("death"); + self endon("stop_player_seek"); + var_00 = 1200; + if(func_1CEB()) + { + var_00 = 250; + } + + var_01 = distance(self.origin,level.player.origin); + for(;;) + { + wait 2; + self.goalradius = var_01; + var_02 = func_218A(self.origin); + self setgoalentity(var_02); + var_01 = var_01 - 175; + if(var_01 < var_00) + { + var_01 = var_00; + return; + } + } +} + +//Function Number: 588 +player_seek_disable() +{ + self notify("stop_player_seek"); +} + +//Function Number: 589 +waittill_entity_in_range_or_timeout(param_00,param_01,param_02) +{ + self endon("death"); + param_00 endon("death"); + if(!isdefined(param_02)) + { + param_02 = 5; + } + + var_03 = gettime() + param_02 * 1000; + while(isdefined(param_00)) + { + if(distance(param_00.origin,self.origin) <= param_01) + { + break; + } + + if(gettime() > var_03) + { + break; + } + + wait 0.1; + } +} + +//Function Number: 590 +waittill_entity_in_range(param_00,param_01) +{ + self endon("death"); + param_00 endon("death"); + while(isdefined(param_00)) + { + if(distance(param_00.origin,self.origin) <= param_01) + { + break; + } + + wait 0.1; + } +} + +//Function Number: 591 +func_2316(param_00,param_01) +{ + self endon("death"); + param_00 endon("death"); + while(isdefined(param_00)) + { + if(distance(param_00.origin,self.origin) > param_01) + { + break; + } + + wait 0.1; + } +} + +//Function Number: 592 +func_1CEB() +{ + self endon("death"); + if(!isdefined(self.weapon)) + { + return 0; + } + + if(self.weapon == "winchester1200" || self.weapon == "m1014" || self.weapon == "striker" || self.weapon == "ranger" || self.weapon == "aa12") + { + return 1; + } + + return 0; +} + +//Function Number: 593 +isprimaryweapon(param_00) +{ + if(param_00 == "none") + { + return 0; + } + + if(weaponinventorytype(param_00) != "primary") + { + return 0; + } + + switch(weaponclass(param_00)) + { + case "rifle": + case "sniper": + case "smg": + case "spread": + case "rocketlauncher": + case "pistol": + case "mg": + return 1; + + default: + return 0; + } +} + +//Function Number: 594 +player_has_thermal() +{ + var_00 = self getweaponslistall(); + if(!isdefined(var_00)) + { + return 0; + } + + foreach(var_02 in var_00) + { + if(issubstr(var_02,"thermal")) + { + return 1; + } + } + + return 0; +} + +//Function Number: 595 +waittill_true_goal(param_00,param_01) +{ + self endon("death"); + if(!isdefined(param_01)) + { + param_01 = self.goalradius; + } + + for(;;) + { + self waittill("goal"); + if(distance(self.origin,param_00) < param_01 + 10) + { + break; + } + } +} + +//Function Number: 596 +player_speed_percent(param_00,param_01) +{ + var_02 = int(getdvar("g_speed")); + if(!isdefined(level.player.g_speed)) + { + level.player.g_speed = var_02; + } + + var_03 = int(level.player.g_speed * param_00 * 0.01); + level.player func_231C(var_03,param_01); +} + +//Function Number: 597 +blend_movespeedscale_percent(param_00,param_01) +{ + var_02 = self; + if(!isplayer(var_02)) + { + var_02 = level.player; + } + + if(!isdefined(var_02.movespeedscale)) + { + var_02.movespeedscale = 1; + } + + var_03 = param_00 * 0.01; + var_02 func_231D(var_03,param_01); +} + +//Function Number: 598 +func_231C(param_00,param_01) +{ + var_02 = int(getdvar("g_speed")); + if(!isdefined(level.player.g_speed)) + { + level.player.g_speed = var_02; + } + + var_03 = ::maps\_utility_code::g_speed_get_func; + var_04 = ::maps\_utility_code::g_speed_set_func; + level.player thread func_231E(param_00,param_01,var_03,var_04,"player_speed_set"); +} + +//Function Number: 599 +func_231D(param_00,param_01) +{ + var_02 = self; + if(!isplayer(var_02)) + { + var_02 = level.player; + } + + if(!isdefined(var_02.movespeedscale)) + { + var_02.movespeedscale = 1; + } + + var_03 = ::maps\_utility_code::movespeed_get_func; + var_04 = ::maps\_utility_code::movespeed_set_func; + var_02 thread func_231E(param_00,param_01,var_03,var_04,"blend_movespeedscale"); +} + +//Function Number: 600 +func_231E(param_00,param_01,param_02,param_03,param_04) +{ + self notify(param_04); + self endon(param_04); + var_05 = [[ param_02 ]](); + var_06 = param_00; + if(isdefined(param_01)) + { + var_07 = var_06 - var_05; + var_08 = 0.05; + var_09 = param_01 / var_08; + var_0A = var_07 / var_09; + while(abs(var_06 - var_05) > abs(var_0A * 1.1)) + { + var_05 = var_05 + var_0A; + [[ param_03 ]](var_05); + wait var_08; + } + } + + [[ param_03 ]](var_06); +} + +//Function Number: 601 +player_speed_default(param_00) +{ + if(!isdefined(level.player.g_speed)) + { + return; + } + + level.player func_231C(level.player.g_speed,param_00); + waittillframeend; + level.player.g_speed = undefined; +} + +//Function Number: 602 +blend_movespeedscale_default(param_00) +{ + var_01 = self; + if(!isplayer(var_01)) + { + var_01 = level.player; + } + + if(!isdefined(var_01.movespeedscale)) + { + return; + } + + var_01 func_231D(1,param_00); + waittillframeend; + var_01.movespeedscale = undefined; +} + +//Function Number: 603 +drop_to_ground(param_00,param_01,param_02) +{ + if(!isdefined(param_01)) + { + param_01 = 1500; + } + + if(!isdefined(param_02)) + { + param_02 = -12000; + } + + return physicstrace(param_00 + (0,0,param_01),param_00 + (0,0,param_02)); +} + +//Function Number: 604 +func_2321(param_00) +{ + if(isplayer(self)) + { + self setorigin(param_00.origin); + self setplayerangles(param_00.angles); + return; + } + + self forceteleport(param_00.origin,param_00.angles); +} + +//Function Number: 605 +func_2322(param_00,param_01) +{ + var_02 = param_00 gettagorigin(param_01); + var_03 = param_00 gettagangles(param_01); + self dontinterpolate(); + if(isplayer(self)) + { + self setorigin(var_02); + self setplayerangles(var_03); + return; + } + + if(isai(self)) + { + self forceteleport(var_02,var_03); + return; + } + + self.origin = var_02; + self.angles = var_03; +} + +//Function Number: 606 +func_2323(param_00) +{ + self forceteleport(param_00.origin,param_00.angles); + self setgoalpos(self.origin); + self setgoalnode(param_00); +} + +//Function Number: 607 +move_all_fx(param_00) +{ + foreach(var_02 in level.createfxent) + { + var_02.v["origin"] = var_02.v["origin"] + param_00; + } +} + +//Function Number: 608 +func_1A60() +{ + return isdefined(self.var_2325); +} + +//Function Number: 609 +func_1A63(param_00,param_01,param_02) +{ + var_03 = self; + var_03 thread play_sound_on_entity("foot_slide_plr_start"); + var_03 thread play_loop_sound_on_tag("foot_slide_plr_loop"); + var_04 = isdefined(level.custom_linkto_slide); + if(!isdefined(param_00)) + { + param_00 = var_03 getvelocity() + (0,0,-10); + } + + if(!isdefined(param_01)) + { + param_01 = 10; + } + + if(!isdefined(param_02)) + { + param_02 = 0.035; + } + + var_05 = spawn("script_origin",var_03.origin); + var_05.angles = var_03.angles; + var_03.var_2325 = var_05; + var_05 moveslide((0,0,15),15,param_00); + if(var_04) + { + var_03 playerlinktoblend(var_05,undefined,1); + } + else + { + var_03 playerlinkto(var_05); + } + + var_03 disableweapons(); + var_03 allowprone(0); + var_03 allowcrouch(1); + var_03 allowstand(0); + var_03 thread maps\_utility_code::doslide(var_05,param_01,param_02); +} + +//Function Number: 610 +endsliding() +{ + var_00 = self; + var_00 notify("stop soundfoot_slide_plr_loop"); + var_00 thread play_sound_on_entity("foot_slide_plr_end"); + var_00 unlink(); + var_00 setvelocity(var_00.var_2325.slidevelocity); + var_00.var_2325 delete(); + var_00 enableweapons(); + var_00 allowprone(1); + var_00 allowcrouch(1); + var_00 allowstand(1); + var_00 notify("stop_sliding"); +} + +//Function Number: 611 +func_1B41() +{ + return maps\_vehicle::vehicle_spawn(self); +} + +//Function Number: 612 +getentwithflag(param_00) +{ + var_01 = maps\_load::get_load_trigger_classes(); + var_02 = []; + foreach(var_06, var_04 in var_01) + { + if(!issubstr(var_06,"flag")) + { + continue; + } + + var_05 = getentarray(var_06,"classname"); + var_02 = common_scripts\utility::array_combine(var_02,var_05); + } + + var_07 = maps\_load::get_load_trigger_funcs(); + foreach(var_09, var_04 in var_07) + { + if(!issubstr(var_09,"flag")) + { + continue; + } + + var_05 = getentarray(var_09,"targetname"); + var_02 = common_scripts\utility::array_combine(var_02,var_05); + } + + var_0A = undefined; + foreach(var_0C in var_02) + { + if(var_0C.script_flag == param_00) + { + return var_0C; + } + } +} + +//Function Number: 613 +getentarraywithflag(param_00) +{ + var_01 = maps\_load::get_load_trigger_classes(); + var_02 = []; + foreach(var_06, var_04 in var_01) + { + if(!issubstr(var_06,"flag")) + { + continue; + } + + var_05 = getentarray(var_06,"classname"); + var_02 = common_scripts\utility::array_combine(var_02,var_05); + } + + var_07 = maps\_load::get_load_trigger_funcs(); + foreach(var_09, var_04 in var_07) + { + if(!issubstr(var_09,"flag")) + { + continue; + } + + var_05 = getentarray(var_09,"targetname"); + var_02 = common_scripts\utility::array_combine(var_02,var_05); + } + + var_0A = []; + foreach(var_0C in var_02) + { + if(var_0C.script_flag == param_00) + { + var_0A[var_0A.size] = var_0C; + } + } + + return var_0A; +} + +//Function Number: 614 +func_2329(param_00,param_01) +{ + return (param_00[0],param_00[1],param_01); +} + +//Function Number: 615 +func_232A(param_00,param_01) +{ + return (param_00[0],param_01,param_00[2]); +} + +//Function Number: 616 +func_232B(param_00,param_01) +{ + return (param_01,param_00[1],param_00[2]); +} + +//Function Number: 617 +func_232C() +{ + var_00 = self getcurrentweapon(); + if(!isdefined(var_00)) + { + return 0; + } + + if(issubstr(tolower(var_00),"rpg")) + { + return 1; + } + + if(issubstr(tolower(var_00),"stinger")) + { + return 1; + } + + if(issubstr(tolower(var_00),"at4")) + { + return 1; + } + + if(issubstr(tolower(var_00),"javelin")) + { + return 1; + } + + return 0; +} + +//Function Number: 618 +doinglongdeath() +{ + return isdefined(self.a.doinglongdeath); +} + +//Function Number: 619 +get_rumble_ent(param_00) +{ + if(func_0E89()) + { + } + + var_01 = get_player_from_self(); + if(!isdefined(param_00)) + { + param_00 = "steady_rumble"; + } + + var_02 = spawn("script_origin",var_01 geteye()); + var_02.intensity = 1; + var_02 thread maps\_utility_code::update_rumble_intensity(var_01,param_00); + return var_02; +} + +//Function Number: 620 +set_rumble_intensity(param_00) +{ + self.intensity = param_00; +} + +//Function Number: 621 +rumble_ramp_on(param_00) +{ + thread rumble_ramp_to(1,param_00); +} + +//Function Number: 622 +rumble_ramp_off(param_00) +{ + thread rumble_ramp_to(0,param_00); +} + +//Function Number: 623 +rumble_ramp_to(param_00,param_01) +{ + self notify("new_ramp"); + self endon("new_ramp"); + self endon("death"); + var_02 = param_01 * 20; + var_03 = param_00 - self.intensity; + var_04 = var_03 / var_02; + for(var_05 = 0;var_05 < var_02;var_05++) + { + self.intensity = self.intensity + var_04; + wait 0.05; + } + + self.intensity = param_00; +} + +//Function Number: 624 +get_player_from_self() +{ + if(isdefined(self)) + { + if(!func_1E4E(level.players,self)) + { + return level.player; + } + + return self; + } + + return level.player; +} + +//Function Number: 625 +func_152D() +{ + return int(self getplayersetting("gameskill")); +} + +//Function Number: 626 +glow(param_00) +{ + if(isdefined(self.non_glow_model)) + { + return; + } + + self.non_glow_model = self.model; + if(!isdefined(param_00)) + { + param_00 = self.model + "_obj"; + } + + self setmodel(param_00); +} + +//Function Number: 627 +func_2334(param_00) +{ + if(!isdefined(self.non_glow_model)) + { + return; + } + + self setmodel(self.non_glow_model); + self.non_glow_model = undefined; +} + +//Function Number: 628 +array_delete_evenly(param_00,param_01,param_02) +{ + var_03 = []; + param_01 = param_02 - param_01; + foreach(var_05 in param_00) + { + var_03[var_03.size] = var_05; + if(var_03.size == param_02) + { + var_03 = array_randomize(var_03); + for(var_06 = param_01;var_06 < var_03.size;var_06++) + { + var_03[var_06] delete(); + } + + var_03 = []; + } + } + + var_08 = []; + foreach(var_05 in param_00) + { + if(!isdefined(var_05)) + { + continue; + } + + var_08[var_08.size] = var_05; + } + + return var_08; +} + +//Function Number: 629 +func_2336(param_00,param_01,param_02) +{ + if(!isdefined(param_02)) + { + param_02 = 0.5; + } + + self endon("death"); + while(isdefined(self)) + { + if(distance(param_00,self.origin) <= param_01) + { + break; + } + + wait param_02; + } +} + +//Function Number: 630 +func_2337(param_00) +{ + var_01 = spawnstruct(); + var_01 thread maps\_utility_code::func_1004(param_00); + return var_01; +} + +//Function Number: 631 +tracefx_on_tag(param_00,param_01,param_02) +{ + var_03 = self gettagorigin(param_01); + var_04 = self gettagangles(param_01); + func_2339(param_00,var_03,var_04,param_02); +} + +//Function Number: 632 +func_2339(param_00,param_01,param_02,param_03) +{ + var_04 = anglestoforward(param_02); + var_05 = bullettrace(param_01,param_01 + var_04 * param_03,0,undefined); + if(var_05["fraction"] >= 1) + { + return; + } + + var_06 = var_05["surfacetype"]; + if(!isdefined(level.trace_fx[param_00][var_06])) + { + var_06 = "default"; + } + + var_07 = level.trace_fx[param_00][var_06]; + if(isdefined(var_07["fx"])) + { + playfx(var_07["fx"],var_05["position"],var_05["normal"]); + } + + if(isdefined(var_07["fx_array"])) + { + foreach(var_09 in var_07["fx_array"]) + { + playfx(var_09,var_05["position"],var_05["normal"]); + } + } + + if(isdefined(var_07["sound"])) + { + level thread common_scripts\utility::play_sound_in_space(var_07["sound"],var_05["position"]); + } + + if(isdefined(var_07["rumble"])) + { + var_0B = get_player_from_self(); + var_0B playrumbleonentity(var_07["rumble"]); + } +} + +//Function Number: 633 +disable_surprise() +{ + self.newenemyreactiondistsq = 0; +} + +//Function Number: 634 +enable_surprise() +{ + self.newenemyreactiondistsq = squared(512); +} + +//Function Number: 635 +enable_heat_behavior(param_00) +{ + self.heat = 1; + self.no_pistol_switch = 1; + self.usecombatscriptatcover = 1; + if(!isdefined(param_00) || !param_00) + { + self.dontshootwhilemoving = 1; + self.maxfaceenemydist = 64; + self.pathenemylookahead = 2048; + disable_surprise(); + } + + self.specialreloadanimfunc = ::animscripts/animset::heat_reload_anim; + self.custommoveanimset["run"] = level.animsets.move["heat_run"]; +} + +//Function Number: 636 +disable_heat_behavior() +{ + self.heat = undefined; + self.no_pistol_switch = undefined; + self.dontshootwhilemoving = undefined; + self.usecombatscriptatcover = 0; + self.maxfaceenemydist = 512; + self.specialreloadanimfunc = undefined; + self.custommoveanimset = undefined; +} + +//Function Number: 637 +getvehiclearray() +{ + return vehicle_getarray(); +} + +//Function Number: 638 +hint(param_00,param_01,param_02) +{ + if(!isdefined(param_02)) + { + param_02 = 0; + } + + var_03 = 0.5; + level endon("clearing_hints"); + if(isdefined(level.var_233E)) + { + level.var_233E maps\_hud_util::destroyelem(); + } + + level.var_233E = maps\_hud_util::createfontstring("default",1.5); + level.var_233E maps\_hud_util::setpoint("MIDDLE",undefined,0,30 + param_02); + level.var_233E.color = (1,1,1); + level.var_233E settext(param_00); + level.var_233E.alpha = 0; + level.var_233E fadeovertime(0.5); + level.var_233E.alpha = 1; + wait 0.5; + level.var_233E endon("death"); + if(isdefined(param_01)) + { + wait param_01; + } + else + { + return; + } + + level.var_233E fadeovertime(var_03); + level.var_233E.alpha = 0; + wait var_03; + level.var_233E maps\_hud_util::destroyelem(); +} + +//Function Number: 639 +func_233F() +{ + var_00 = 1; + if(isdefined(level.var_233E)) + { + level notify("clearing_hints"); + level.var_233E fadeovertime(var_00); + level.var_233E.alpha = 0; + wait var_00; + } +} + +//Function Number: 640 +func_2340(param_00,param_01) +{ + if(!isdefined(level.flag[param_00])) + { + return; + } + + if(!isdefined(param_01)) + { + param_01 = 0; + } + + foreach(var_03 in level.deathflags[param_00]) + { + foreach(var_05 in var_03) + { + if(isalive(var_05)) + { + var_05 thread maps\_utility_code::kill_deathflag_proc(param_01); + continue; + } + + var_05 delete(); + } + } +} + +//Function Number: 641 +get_player_view_controller(param_00,param_01,param_02,param_03) +{ + if(!isdefined(param_03)) + { + param_03 = "player_view_controller"; + } + + if(!isdefined(param_02)) + { + param_02 = (0,0,0); + } + + var_04 = param_00 gettagorigin(param_01); + var_05 = spawnturret("misc_turret",var_04,param_03); + var_05.angles = param_00 gettagangles(param_01); + var_05 setmodel("tag_turret"); + var_05 linkto(param_00,param_01,param_02,(0,0,0)); + var_05 makeunusable(); + var_05 hide(); + var_05 setmode("manual"); + return var_05; +} + +//Function Number: 642 +blend_dof(param_00,param_01,param_02) +{ + var_03 = level func_2343(::maps\_utility_code::blend_default_dof,param_00,param_01); + var_03.time = param_02; +} + +//Function Number: 643 +func_2343(param_00,param_01,param_02,param_03) +{ + var_04 = spawnstruct(); + var_04 childthread maps\_utility_code::process_blend(param_00,self,param_01,param_02,param_03); + return var_04; +} + +//Function Number: 644 +store_players_weapons(param_00) +{ + if(!isdefined(self.stored_weapons)) + { + self.stored_weapons = []; + } + + var_01 = []; + var_02 = self getweaponslistall(); + foreach(var_04 in var_02) + { + var_01[var_04] = []; + var_01[var_04]["clip_left"] = self getweaponammoclip(var_04,"left"); + var_01[var_04]["clip_right"] = self getweaponammoclip(var_04,"right"); + var_01[var_04]["stock"] = self getweaponammostock(var_04); + } + + if(!isdefined(param_00)) + { + param_00 = "default"; + } + + self.stored_weapons[param_00] = []; + self.stored_weapons[param_00]["current_weapon"] = self getcurrentweapon(); + self.stored_weapons[param_00]["inventory"] = var_01; +} + +//Function Number: 645 +func_2346(param_00) +{ + if(!isdefined(param_00)) + { + param_00 = "default"; + } + + if(!isdefined(self.stored_weapons) || !isdefined(self.stored_weapons[param_00])) + { + return; + } + + self takeallweapons(); + foreach(var_03, var_02 in self.stored_weapons[param_00]["inventory"]) + { + if(weaponinventorytype(var_03) != "altmode") + { + self giveweapon(var_03); + } + + self setweaponammoclip(var_03,var_02["clip_left"],"left"); + self setweaponammoclip(var_03,var_02["clip_right"],"right"); + self setweaponammostock(var_03,var_02["stock"]); + } + + var_04 = self.stored_weapons[param_00]["current_weapon"]; + if(var_04 != "none") + { + self switchtoweapon(var_04); + } +} + +//Function Number: 646 +func_2347() +{ + switch(self.code_classname) + { + case "light_spot": + case "script_vehicle": + case "script_model": + self hide(); + break; + + case "script_brushmodel": + self hide(); + self notsolid(); + if(self.spawnflags & 1) + { + self connectpaths(); + } + break; + + case "trigger_multiple_flag_looking": + case "trigger_multiple_flag_lookat": + case "trigger_multiple_breachIcon": + case "trigger_multiple_flag_set": + case "trigger_use_touch": + case "trigger_use": + case "trigger_multiple": + case "trigger_radius": + common_scripts\utility::trigger_off(); + break; + + default: + break; + } +} + +//Function Number: 647 +show_entity() +{ + switch(self.code_classname) + { + case "light_spot": + case "script_vehicle": + case "script_model": + self show(); + break; + + case "script_brushmodel": + self show(); + self solid(); + if(self.spawnflags & 1) + { + self disconnectpaths(); + } + break; + + case "trigger_multiple_flag_looking": + case "trigger_multiple_flag_lookat": + case "trigger_multiple_breachIcon": + case "trigger_multiple_flag_set": + case "trigger_use_touch": + case "trigger_use": + case "trigger_multiple": + case "trigger_radius": + common_scripts\utility::trigger_on(); + break; + + default: + break; + } +} + +//Function Number: 648 +func_2349(param_00,param_01,param_02,param_03) +{ + if(isdefined(param_03)) + { + self rotateyaw(param_00,param_01,param_02,param_03); + return; + } + + if(isdefined(param_02)) + { + self rotateyaw(param_00,param_01,param_02); + return; + } + + self rotateyaw(param_00,param_01); +} + +//Function Number: 649 +set_moveplaybackrate(param_00,param_01) +{ + self notify("set_moveplaybackrate"); + self endon("set_moveplaybackrate"); + if(isdefined(param_01)) + { + var_02 = param_00 - self.moveplaybackrate; + var_03 = 0.05; + var_04 = param_01 / var_03; + var_05 = var_02 / var_04; + while(abs(param_00 - self.moveplaybackrate) > abs(var_05 * 1.1)) + { + self.moveplaybackrate = self.moveplaybackrate + var_05; + wait var_03; + } + } + + self.moveplaybackrate = param_00; +} + +//Function Number: 650 +array_spawn_function(param_00,param_01,param_02,param_03,param_04,param_05) +{ + foreach(var_07 in param_00) + { + var_07 thread add_spawn_function(param_01,param_02,param_03,param_04,param_05); + } +} + +//Function Number: 651 +array_spawn_function_targetname(param_00,param_01,param_02,param_03,param_04,param_05) +{ + var_06 = getentarray(param_00,"targetname"); + array_spawn_function(var_06,param_01,param_02,param_03,param_04,param_05); +} + +//Function Number: 652 +func_234D(param_00,param_01,param_02,param_03,param_04,param_05) +{ + var_06 = getentarray(param_00,"script_noteworthy"); + array_spawn_function(var_06,param_01,param_02,param_03,param_04,param_05); +} + +//Function Number: 653 +enable_dontevershoot() +{ + self.dontevershoot = 1; +} + +//Function Number: 654 +disable_dontevershoot() +{ + self.dontevershoot = undefined; +} + +//Function Number: 655 +func_16B0(param_00) +{ + if(!isdefined(level.vision_set_fog)) + { + level.vision_set_fog = []; + } + + var_01 = spawnstruct(); + var_01.name = param_00; + level.vision_set_fog[param_00] = var_01; + return var_01; +} + +//Function Number: 656 +get_vision_set_fog(param_00) +{ + if(!isdefined(level.vision_set_fog)) + { + level.vision_set_fog = []; + } + + var_01 = level.vision_set_fog[param_00]; + return var_01; +} + +//Function Number: 657 +create_fog(param_00) +{ + if(!isdefined(level.var_2351)) + { + level.var_2351 = []; + } + + var_01 = spawnstruct(); + var_01.name = param_00; + level.var_2351[param_00] = var_01; + return var_01; +} + +//Function Number: 658 +get_fog(param_00) +{ + if(!isdefined(level.var_2351)) + { + level.var_2351 = []; + } + + var_01 = level.var_2351[param_00]; + return var_01; +} + +//Function Number: 659 +func_2352() +{ + if(!isdefined(self.fog_transition_ent)) + { + self.fog_transition_ent = spawnstruct(); + self.fog_transition_ent.var_16DE = ""; + self.fog_transition_ent.time = 0; + } +} + +//Function Number: 660 +func_2353(param_00,param_01) +{ + if(!isplayer(self)) + { + maps\_art::init_fog_transition(); + } + else + { + func_2352(); + } + + if(!isdefined(level.var_2351)) + { + level.var_2351 = []; + } + + var_02 = level.var_2351[param_00]; + if(!isdefined(var_02)) + { + var_02 = level.vision_set_fog[param_00]; + } + + if(!isdefined(param_01)) + { + param_01 = var_02.transitiontime; + } + + if(getdvarint("scr_art_tweak") != 0) + { + func_2354(var_02); + param_01 = 0; + } + + if(!isplayer(self)) + { + if(level.fog_transition_ent.var_16DE == param_00 && level.fog_transition_ent.time == param_01) + { + return; + } + + set_fog_to_ent_values(var_02,param_01); + level.fog_transition_ent.var_16DE = param_00; + level.fog_transition_ent.time = param_01; + return; + } + + if(self.fog_transition_ent.var_16DE == param_00 && self.fog_transition_ent.time == param_01) + { + return; + } + + set_fog_to_ent_values(var_02,param_01); + self.fog_transition_ent.var_16DE = param_00; + self.fog_transition_ent.time = param_01; +} + +//Function Number: 661 +func_2354(param_00) +{ +} + +//Function Number: 662 +set_fog_to_ent_values(param_00,param_01) +{ + if(isdefined(param_00.sunfogenabled) && param_00.sunfogenabled) + { + if(!isplayer(self)) + { + setexpfog(param_00.var_1688,param_00.var_1689,param_00.red,param_00.green,param_00.blue,param_00.maxopacity,param_01,param_00.var_168E,param_00.sungreen,param_00.sunblue,param_00.sundir,param_00.sunbeginfadeangle,param_00.var_1693,param_00.normalfogscale); + return; + } + + self playersetexpfog(param_00.var_1688,param_00.var_1689,param_00.red,param_00.green,param_00.blue,param_00.maxopacity,param_01,param_00.var_168E,param_00.sungreen,param_00.sunblue,param_00.sundir,param_00.sunbeginfadeangle,param_00.var_1693,param_00.normalfogscale); + return; + } + + if(!isplayer(self)) + { + setexpfog(param_00.var_1688,param_00.var_1689,param_00.red,param_00.green,param_00.blue,param_00.maxopacity,param_01); + return; + } + + self playersetexpfog(param_00.var_1688,param_00.var_1689,param_00.red,param_00.green,param_00.blue,param_00.maxopacity,param_01); +} + +//Function Number: 663 +vision_set_fog_changes(param_00,param_01) +{ + var_02 = vision_set_changes(param_00,param_01); + if(var_02 && isdefined(get_vision_set_fog(param_00))) + { + func_2353(param_00,param_01); + } +} + +//Function Number: 664 +init_self_visionset() +{ + if(!isdefined(self.vision_set_transition_ent)) + { + self.vision_set_transition_ent = spawnstruct(); + self.vision_set_transition_ent.vision_set = ""; + self.vision_set_transition_ent.time = 0; + } +} + +//Function Number: 665 +vision_set_changes(param_00,param_01) +{ + if(!isplayer(self)) + { + var_02 = 1; + if(!isdefined(level.vision_set_transition_ent)) + { + level.vision_set_transition_ent = spawnstruct(); + level.vision_set_transition_ent.vision_set = ""; + level.vision_set_transition_ent.time = 0; + var_02 = 0; + } + + if(level.vision_set_transition_ent.vision_set == param_00 && level.vision_set_transition_ent.time == param_01) + { + return 0; + } + + level.vision_set_transition_ent.vision_set = param_00; + level.vision_set_transition_ent.time = param_01; + if(var_02 && getdvarint("scr_art_tweak") != 0) + { + } + else + { + visionsetnaked(param_00,param_01); + } + + level.lvl_visionset = param_00; + setdvar("vision_set_current",param_00); + } + else + { + init_self_visionset(); + if(self.vision_set_transition_ent.vision_set == param_00 && self.vision_set_transition_ent.time == param_01) + { + return 0; + } + + self.vision_set_transition_ent.vision_set = param_00; + self.vision_set_transition_ent.time = param_01; + self visionsetnakedforplayer(param_00,param_01); + } + + return 1; +} + +//Function Number: 666 +set_art_tweaked_vision_set() +{ +} + +//Function Number: 667 +func_2357() +{ + thread enable_teamflashbangimmunity_proc(); +} + +//Function Number: 668 +enable_teamflashbangimmunity_proc() +{ + self endon("death"); + for(;;) + { + self.var_C76 = 1; + wait 0.05; + } +} + +//Function Number: 669 +func_2359() +{ + self.var_C76 = undefined; +} + +//Function Number: 670 +func_235A(param_00,param_01,param_02,param_03,param_04) +{ + if(!isdefined(param_04)) + { + radiusdamage(param_00,param_01,param_02,param_03); + return; + } + + radiusdamage(param_00,param_01,param_02,param_03,param_04); +} + +//Function Number: 671 +func_235B(param_00) +{ + var_01 = getentarray("interactive_tv","targetname"); + foreach(var_03 in param_00) + { + var_03.interactives = []; + } + + foreach(var_06 in var_01) + { + foreach(var_03 in param_00) + { + if(!var_03 istouching(var_06)) + { + continue; + } + + var_03 maps\_utility_code::func_100A(var_06); + break; + } + } +} + +//Function Number: 672 +activate_interactives_in_volume() +{ + if(!isdefined(self.interactives)) + { + return; + } + + foreach(var_01 in self.interactives) + { + var_02 = spawn("script_model",(0,0,0)); + var_02 setmodel(var_01.toy_model); + var_02.origin = var_01.origin; + var_02.angles = var_01.angles; + var_02.script_noteworthy = var_01.script_noteworthy; + var_02.target = var_01.target; + var_02.targetname = var_01.targetname; + var_02 thread maps\_interactive_objects::func_198A(); + } + + self.interactives = []; +} + +//Function Number: 673 +func_235D(param_00) +{ + var_01 = getentarray("destructible_toy","targetname"); + var_02 = getentarray("destructible_vehicle","targetname"); + var_03 = common_scripts\utility::array_combine(var_01,var_02); + foreach(var_05 in param_00) + { + var_05.destructibles = []; + } + + foreach(var_08 in var_03) + { + foreach(var_05 in param_00) + { + if(!var_05 istouching(var_08)) + { + continue; + } + + var_05 maps\_utility_code::put_toy_in_volume(var_08); + break; + } + } +} + +//Function Number: 674 +func_235E(param_00) +{ + if(getdvar("createfx") != "") + { + return; + } + + var_01 = getentarray("script_brushmodel","classname"); + var_02 = getentarray("script_model","classname"); + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + var_01[var_01.size] = var_02[var_03]; + } + + foreach(var_05 in param_00) + { + foreach(var_07 in var_01) + { + if(isdefined(var_07.script_prefab_exploder)) + { + var_07.script_exploder = var_07.script_prefab_exploder; + } + + if(!isdefined(var_07.script_exploder)) + { + continue; + } + + if(!isdefined(var_07.model)) + { + continue; + } + + if(var_07.code_classname != "script_model") + { + continue; + } + + if(!var_07 istouching(var_05)) + { + continue; + } + + var_07.masked_exploder = 1; + } + } +} + +//Function Number: 675 +activate_exploders_in_volume() +{ + var_00 = spawn("script_origin",(0,0,0)); + foreach(var_02 in level.createfxent) + { + if(!isdefined(var_02.v["masked_exploder"])) + { + continue; + } + + var_00.origin = var_02.v["origin"]; + var_00.angles = var_02.v["angles"]; + if(!var_00 istouching(self)) + { + continue; + } + + var_03 = var_02.v["masked_exploder"]; + var_04 = var_02.v["masked_exploder_spawnflags"]; + var_05 = var_02.v["masked_exploder_script_disconnectpaths"]; + var_06 = spawn("script_model",(0,0,0),var_04); + var_06 setmodel(var_03); + var_06.origin = var_02.v["origin"]; + var_06.angles = var_02.v["angles"]; + var_02.v["masked_exploder"] = undefined; + var_02.v["masked_exploder_spawnflags"] = undefined; + var_02.v["masked_exploder_script_disconnectpaths"] = undefined; + var_06.disconnect_paths = var_05; + var_06.script_exploder = var_02.v["exploder"]; + maps\_load::setup_individual_exploder(var_06); + var_02.model = var_06; + } + + var_00 delete(); +} + +//Function Number: 676 +precache_destructible(param_00) +{ + var_01 = common_scripts\_destructible_types::getinfoindex(param_00); + if(var_01 != -1) + { + return; + } + + var_02 = spawnstruct(); + var_02.destructibleinfo = common_scripts\_destructible_types::maketype(param_00); + var_02 thread common_scripts\_destructible::precache_destructibles(); + var_02 thread common_scripts\_destructible::add_destructible_fx(); +} + +//Function Number: 677 +delete_destructibles_in_volumes(param_00,param_01) +{ + foreach(var_03 in param_00) + { + var_03.destructibles = []; + } + + var_05 = ["destructible_toy","destructible_vehicle"]; + var_06 = 0; + if(!isdefined(param_01)) + { + param_01 = 0; + } + + foreach(var_08 in var_05) + { + var_09 = getentarray(var_08,"targetname"); + foreach(var_0B in var_09) + { + foreach(var_03 in param_00) + { + if(param_01) + { + var_06++; + var_06 = var_06 % 5; + if(var_06 == 1) + { + wait 0.05; + } + } + + if(!var_03 istouching(var_0B)) + { + continue; + } + + var_0B delete(); + break; + } + } + } +} + +//Function Number: 678 +func_2361(param_00,param_01) +{ + var_02 = getentarray("interactive_tv","targetname"); + foreach(var_04 in param_00) + { + var_04.interactives = []; + } + + var_06 = 0; + if(!isdefined(param_01)) + { + param_01 = 0; + } + + foreach(var_08 in var_02) + { + foreach(var_04 in param_00) + { + if(param_01) + { + var_06++; + var_06 = var_06 % 5; + if(var_06 == 1) + { + wait 0.05; + } + } + + if(!var_04 istouching(var_08)) + { + continue; + } + + var_08 delete(); + break; + } + } +} + +//Function Number: 679 +delete_exploders_in_volumes(param_00,param_01) +{ + var_02 = getentarray("script_brushmodel","classname"); + var_03 = getentarray("script_model","classname"); + for(var_04 = 0;var_04 < var_03.size;var_04++) + { + var_02[var_02.size] = var_03[var_04]; + } + + var_05 = []; + var_06 = spawn("script_origin",(0,0,0)); + var_07 = 0; + if(!isdefined(param_01)) + { + param_01 = 0; + } + + foreach(var_09 in param_00) + { + foreach(var_0B in var_02) + { + if(!isdefined(var_0B.script_exploder)) + { + continue; + } + + var_06.origin = var_0B getorigin(); + if(!var_09 istouching(var_06)) + { + continue; + } + + var_05[var_05.size] = var_0B; + } + } + + array_delete(var_05); + var_06 delete(); +} + +//Function Number: 680 +func_2363() +{ + if(!isdefined(self.destructibles)) + { + return; + } + + foreach(var_01 in self.destructibles) + { + var_02 = spawn("script_model",(0,0,0)); + var_02 setmodel(var_01.toy_model); + var_02.origin = var_01.origin; + var_02.angles = var_01.angles; + var_02.script_noteworthy = var_01.script_noteworthy; + var_02.targetname = var_01.targetname; + var_02.target = var_01.target; + var_02.script_linkto = var_01.script_linkto; + var_02.destructible_type = var_01.destructible_type; + var_02.script_noflip = var_01.script_noflip; + var_02 common_scripts\_destructible::func_A2A(1); + } + + self.destructibles = []; +} + +//Function Number: 681 +setflashbangimmunity(param_00) +{ + self.flashbangimmunity = param_00; +} + +//Function Number: 682 +func_1C16() +{ + var_00 = self.flashendtime - gettime(); + if(var_00 < 0) + { + return 0; + } + + return var_00 * 0.001; +} + +//Function Number: 683 +func_2364() +{ + return func_1C16() > 0; +} + +//Function Number: 684 +func_1F3D(param_00) +{ + if(isdefined(self.flashbangimmunity) && self.flashbangimmunity) + { + return; + } + + var_01 = gettime() + param_00 * 1000; + if(isdefined(self.flashendtime)) + { + self.flashendtime = max(self.flashendtime,var_01); + } + else + { + self.flashendtime = var_01; + } + + self notify("flashed"); + self setflashbanged(1); +} + +//Function Number: 685 +waittill_volume_dead() +{ + for(;;) + { + var_00 = getaispeciesarray("axis","all"); + var_01 = 0; + foreach(var_03 in var_00) + { + if(!isalive(var_03)) + { + continue; + } + + if(var_03 istouching(self)) + { + var_01 = 1; + break; + } + + wait 0.0125; + } + + if(!var_01) + { + var_05 = get_ai_touching_volume("axis"); + if(!var_05.size) + { + break; + } + } + + wait 0.05; + } +} + +//Function Number: 686 +func_2366() +{ + var_00 = 0; + for(;;) + { + var_01 = getaispeciesarray("axis","all"); + var_02 = 0; + foreach(var_04 in var_01) + { + if(!isalive(var_04)) + { + continue; + } + + if(var_04 istouching(self)) + { + if(var_04 doinglongdeath()) + { + continue; + } + + var_02 = 1; + var_00 = 1; + break; + } + + wait 0.0125; + } + + if(!var_02) + { + var_06 = get_ai_touching_volume("axis"); + if(!var_06.size) + { + break; + } + else + { + var_00 = 1; + } + } + + wait 0.05; + } + + return var_00; +} + +//Function Number: 687 +waittill_volume_dead_then_set_flag(param_00) +{ + waittill_volume_dead(); + common_scripts\utility::flag_set(param_00); +} + +//Function Number: 688 +waittill_targetname_volume_dead_then_set_flag(param_00,param_01) +{ + var_02 = getent(param_00,"targetname"); + var_02 waittill_volume_dead_then_set_flag(param_01); +} + +//Function Number: 689 +func_2369() +{ + level.player ent_flag_clear("player_zero_attacker_accuracy"); + level.player.ignorerandombulletdamage = 0; + level.player maps\_gameskill::update_player_attacker_accuracy(); +} + +//Function Number: 690 +player_cant_be_shot() +{ + level.player func_0FA4("player_zero_attacker_accuracy"); + level.player.attackeraccuracy = 0; + level.player.ignorerandombulletdamage = 1; +} + +//Function Number: 691 +func_236B(param_00) +{ + var_01 = get_player_from_self(); + var_01.var_1C74.player_attacker_accuracy = param_00; + var_01 maps\_gameskill::update_player_attacker_accuracy(); +} + +//Function Number: 692 +array_index_by_parameters(param_00) +{ + var_01 = []; + foreach(var_03 in param_00) + { + var_01[var_03.script_parameters] = var_03; + } + + return var_01; +} + +//Function Number: 693 +func_236D(param_00) +{ + var_01 = []; + foreach(var_03 in param_00) + { + var_01[var_03.classname] = var_03; + } + + return var_01; +} + +//Function Number: 694 +func_236E(param_00) +{ + var_01 = []; + foreach(var_03 in param_00) + { + var_04 = var_03.script_index; + if(isdefined(var_04)) + { + var_01[var_04] = var_03; + } + } + + return var_01; +} + +//Function Number: 695 +func_236F(param_00) +{ + if(isdefined(param_00)) + { + self.pivot = param_00; + } + else + { + self.pivot = getent(self.target,"targetname"); + } + + self linkto(self.pivot); +} + +//Function Number: 696 +func_2370() +{ + var_00 = maps\_utility_code::get_color_info_from_trigger(); + var_01 = var_00["team"]; + foreach(var_03 in var_00["codes"]) + { + var_04 = level.var_F07[var_01][var_03]; + if(isdefined(var_04)) + { + return var_04; + } + } + + return undefined; +} + +//Function Number: 697 +func_2371() +{ + var_00 = maps\_utility_code::get_color_info_from_trigger(); + var_01 = var_00["team"]; + foreach(var_03 in var_00["codes"]) + { + var_04 = level.var_F06[var_01][var_03]; + if(isdefined(var_04)) + { + return var_04; + } + } + + return undefined; +} + +//Function Number: 698 +flashbangstop() +{ + self.flashendtime = undefined; + self setflashbanged(0); +} + +//Function Number: 699 +func_2373(param_00,param_01) +{ + var_02 = getent(param_00,param_01); + if(isdefined(var_02)) + { + return var_02; + } + + return common_scripts\utility::getstruct(param_00,param_01); +} + +//Function Number: 700 +grenade_earthquake() +{ + thread func_2374(); + self endon("end_explode"); + self waittill("explode",var_00); + dirt_on_screen_from_position(var_00); +} + +//Function Number: 701 +func_2374() +{ + self waittill("death"); + waittillframeend; + self notify("end_explode"); +} + +//Function Number: 702 +dirt_on_screen_from_position(param_00) +{ + playrumbleonposition("grenade_rumble",param_00); + earthquake(0.3,0.5,param_00,400); + foreach(var_02 in level.players) + { + if(distance(param_00,var_02.origin) > 600) + { + continue; + } + + if(var_02 damageconetrace(param_00)) + { + var_02 thread dirteffect(param_00); + } + } +} + +//Function Number: 703 +func_2375(param_00,param_01,param_02,param_03) +{ + return player_rides_in_humvee("shotgun",level.player,param_00,param_01,param_02,param_03); +} + +//Function Number: 704 +player_rides_in_humvee(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if(!isdefined(param_01)) + { + param_01 = level.player; + } + + param_01 allowcrouch(0); + param_01 allowprone(0); + param_01 disableweapons(); + var_06 = common_scripts\utility::spawn_tag_origin(); + var_06 linkto(self,"tag_passenger",func_2379(param_00),(0,0,0)); + var_06.player_dismount = common_scripts\utility::spawn_tag_origin(); + var_06.player_dismount linkto(self,"tag_body",player_rides_humvee_offset_dismount(param_00),(0,0,0)); + if(!isdefined(param_02)) + { + param_02 = 90; + } + + if(!isdefined(param_03)) + { + param_03 = 90; + } + + if(!isdefined(param_04)) + { + param_04 = 40; + } + + if(!isdefined(param_05)) + { + param_05 = 40; + } + + param_01 disableweapons(); + param_01 playerlinkto(var_06,"tag_origin",0.8,param_02,param_03,param_04,param_05); + param_01.var_2378 = var_06; + return var_06; +} + +//Function Number: 705 +func_2379(param_00) +{ + switch(param_00) + { + case "shotgun": + return (-5,10,-34); + + case "backleft": + return (-45,45,-34); + + case "backright": + return (-45,5,-34); + } +} + +//Function Number: 706 +player_rides_humvee_offset_dismount(param_00) +{ + switch(param_00) + { + case "shotgun": + return (-8,-90,-12.6); + + case "backleft": + return (-58,85,-12.6); + + case "backright": + return (-58,-95,-12.6); + } +} + +//Function Number: 707 +player_leaves_humvee(param_00) +{ + if(!isdefined(param_00)) + { + param_00 = 0; + } + + var_01 = self; + var_02 = level.player; + if(isplayer(self)) + { + var_02 = self; + var_01 = var_02.var_2378; + } + + var_01 unlink(); + if(!param_00) + { + var_03 = 0.6; + var_01 moveto(var_01.player_dismount.origin,var_03,var_03 * 0.5,var_03 * 0.5); + wait var_03; + } + + var_02 unlink(); + var_02 enableweapons(); + var_02 allowcrouch(1); + var_02 allowprone(1); + var_02.var_2378 = undefined; + var_01.player_dismount delete(); + var_01 delete(); +} + +//Function Number: 708 +dirteffect(param_00,param_01) +{ + var_02 = screen_effect_sides(param_00); + foreach(var_05, var_04 in var_02) + { + thread maps\_gameskill::func_1EA4(var_05); + } +} + +//Function Number: 709 +bloodsplateffect(param_00) +{ + if(!isdefined(self.var_1EAC)) + { + return; + } + + var_01 = screen_effect_sides(self.var_1EAC.origin); + foreach(var_04, var_03 in var_01) + { + thread maps\_gameskill::blood_splat_on_screen(var_04); + } +} + +//Function Number: 710 +screen_effect_sides(param_00) +{ + var_01 = vectornormalize(anglestoforward(self.angles)); + var_02 = vectornormalize(anglestoright(self.angles)); + var_03 = vectornormalize(param_00 - self.origin); + var_04 = vectordot(var_03,var_01); + var_05 = vectordot(var_03,var_02); + var_06 = []; + var_07 = self getcurrentweapon(); + if(var_04 > 0 && var_04 > 0.5 && weapontype(var_07) != "riotshield") + { + var_06["bottom"] = 1; + } + + if(abs(var_04) < 0.866) + { + if(var_05 > 0) + { + var_06["right"] = 1; + } + else + { + var_06["left"] = 1; + } + } + + return var_06; +} + +//Function Number: 711 +pathrandompercent_set(param_00) +{ + if(!isdefined(self.old_pathrandompercent)) + { + self.old_pathrandompercent = self.pathrandompercent; + } + + self.pathrandompercent = param_00; +} + +//Function Number: 712 +pathrandompercent_zero() +{ + if(isdefined(self.old_pathrandompercent)) + { + return; + } + + self.old_pathrandompercent = self.pathrandompercent; + self.pathrandompercent = 0; +} + +//Function Number: 713 +pathrandompercent_reset() +{ + self.pathrandompercent = self.old_pathrandompercent; + self.old_pathrandompercent = undefined; +} + +//Function Number: 714 +func_2382() +{ + if(isdefined(self.var_2383)) + { + return; + } + + self.old_walkdist = self.walkdist; + self.var_2383 = self.walkdistfacingmotion; + self.walkdist = 0; + self.walkdistfacingmotion = 0; +} + +//Function Number: 715 +func_2385() +{ + self.walkdist = self.old_walkdist; + self.walkdistfacingmotion = self.var_2383; + self.old_walkdist = undefined; + self.var_2383 = undefined; +} + +//Function Number: 716 +func_2386() +{ + thread ignorerandombulletdamage_drone_proc(); +} + +//Function Number: 717 +ignorerandombulletdamage_drone_proc() +{ + self endon("disable_ignorerandombulletdamage_drone"); + self endon("death"); + self.ignorerandombulletdamage = 1; + self.fakehealth = self.health; + self.health = 1000000; + for(;;) + { + self waittill("damage",var_00,var_01); + if(!isplayer(var_01) && issentient(var_01)) + { + if(isdefined(var_01.enemy) && var_01.enemy != self) + { + continue; + } + } + + self.fakehealth = self.fakehealth - var_00; + if(self.fakehealth <= 0) + { + break; + } + } + + self kill(); +} + +//Function Number: 718 +func_2389() +{ + if(!isdefined(self.var_238A)) + { + self.var_238A = self setcontents(0); + } + + self hide(); +} + +//Function Number: 719 +func_238B() +{ + if(!isai(self)) + { + self solid(); + } + + if(isdefined(self.var_238A)) + { + self setcontents(self.var_238A); + } + + self show(); +} + +//Function Number: 720 +set_brakes(param_00) +{ + self.veh_brake = param_00; +} + +//Function Number: 721 +disable_ignorerandombulletdamage_drone() +{ + if(!isalive(self)) + { + return; + } + + if(!isdefined(self.ignorerandombulletdamage)) + { + return; + } + + self notify("disable_ignorerandombulletdamage_drone"); + self.ignorerandombulletdamage = undefined; + self.health = self.fakehealth; +} + +//Function Number: 722 +func_238E(param_00) +{ + var_01 = spawnstruct(); + var_01 func_0614(param_00,::send_notify,"timeout"); + return var_01; +} + +//Function Number: 723 +func_0614(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07) +{ + thread maps\_utility_code::delaythread_proc(param_01,param_00,param_02,param_03,param_04,param_05,param_06,param_07); +} + +//Function Number: 724 +enable_danger_react(param_00) +{ + param_00 = param_00 * 1000; + self.dodangerreact = 1; + self.dangerreactduration = param_00; + self.neversprintforvariation = undefined; +} + +//Function Number: 725 +disable_danger_react() +{ + self.dodangerreact = 0; + self.neversprintforvariation = 1; +} + +//Function Number: 726 +func_2390(param_00,param_01) +{ + level.advancetoenemyinterval = param_00; + level.advancetoenemygroupmax = param_01; +} + +//Function Number: 727 +reset_group_advance_to_enemy_timer(param_00) +{ + level.var_1C6B[param_00] = gettime(); +} + +//Function Number: 728 +set_custom_gameskill_func(param_00) +{ + level.custom_gameskill_func = param_00; + thread maps\_gameskill::func_1604(); +} + +//Function Number: 729 +func_2392() +{ + level.custom_gameskill_func = undefined; + thread maps\_gameskill::func_1604(); +} + +//Function Number: 730 +func_2393(param_00,param_01,param_02) +{ + maps\_animatedmodels::init_wind_if_uninitialized(); + if(isdefined(param_02)) + { + level.var_19E0.variance = param_02; + } + + level.var_19E0.var_19E1 = param_01; + level.var_19E0.weight = param_00; + level notify("windchange","strong"); +} + +//Function Number: 731 +func_2394(param_00) +{ + if(param_00.size > 1) + { + return 0; + } + + var_01 = []; + if(isdefined(var_41[var_01])) + { + return 1; + } + + return 0; +} + +//Function Number: 732 +set_battlechatter_variable(param_00,param_01) +{ + level.battlechatter[param_00] = param_01; + maps\_utility_code::func_1012(); +} + +//Function Number: 733 +objective_clearadditionalpositions(param_00) +{ + for(var_01 = 0;var_01 < 8;var_01++) + { + objective_additionalposition(param_00,var_01,(0,0,0)); + } +} + +//Function Number: 734 +func_2396(param_00) +{ + var_01 = []; + while(var_41["seconds"] >= 60) + { + var_7D["minutes"] = var_41["seconds"]; + } + + if(var_7D["seconds"] < 10) + { + } + + return var_7D; +} + +//Function Number: 735 +func_2397(param_00) +{ + var_01 = level.player getweaponslistprimaries(); + foreach(var_03 in var_01) + { + if(var_03 == param_00) + { + return 1; + } + } + + return 0; +} + +//Function Number: 736 +func_2398(param_00) +{ + if(!isdefined(level.var_2399)) + { + level.var_2399 = []; + } + + if(!isdefined(level.var_2399[param_00])) + { + level.var_2399[param_00] = level.var_2399.size + 1; + } + + return level.var_2399[param_00]; +} + +//Function Number: 737 +musicloop(param_00,param_01) +{ + if(!isdefined(param_01)) + { + param_01 = 0; + } + + var_02 = musiclength(param_00); + level notify("stop_music"); + level endon("stop_music"); + for(;;) + { + musicplaywrapper(param_00); + wait var_02; + wait param_01; + } +} + +//Function Number: 738 +player_mount_vehicle(param_00) +{ + self mountvehicle(param_00); + self.drivingvehicle = param_00; +} + +//Function Number: 739 +player_dismount_vehicle() +{ + self dismountvehicle(); + self.drivingvehicle = undefined; +} + +//Function Number: 740 +func_239D(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = param_04 - param_02; + var_06 = param_03 - param_01; + var_07 = var_05 / var_06; + param_00 = param_00 - param_03; + param_00 = var_07 * param_00; + param_00 = param_00 + param_04; + return param_00; +} + +//Function Number: 741 +enable_achievement_harder_they_fall() +{ + self.rappeller = 1; +} + +//Function Number: 742 +func_211B() +{ + self.rappeller = undefined; +} + +//Function Number: 743 +func_1C7D(param_00) +{ + param_00 enable_achievement_harder_they_fall(); +} + +//Function Number: 744 +disable_achievement_harder_they_fall_guy(param_00) +{ + param_00 func_211B(); +} + +//Function Number: 745 +musiclength(param_00) +{ + var_01 = tablelookup("sound/soundlength.csv",0,param_00,1); + if(!isdefined(var_01) || var_01 == "") + { + return -1; + } + + var_01 = int(var_01); + var_01 = var_01 * 0.001; + return var_01; +} + +//Function Number: 746 +func_239E(param_00) +{ + var_01 = getkeybinding(param_00); + return var_01["count"]; +} + +//Function Number: 747 +func_239F(param_00,param_01,param_02) +{ + var_03 = param_02 - param_01; + var_04 = param_00 * var_03; + var_05 = param_01 + var_04; + return var_05; +} + +//Function Number: 748 +is_iw4_map_sp() +{ + switch(level.script) + { + case "bog_b": + case "invasion": + case "contingency": + case "so_civilrescue": + case "so_killspree_trainer": + case "so_takeover_oilrig": + case "so_assault_oilrig": + case "so_defense_invasion": + case "so_killspree_invasion": + case "so_chopper_invasion": + case "so_ac130_co_hunted": + case "co_hunted": + case "so_showers_gulag": + case "so_hidden_so_ghillies": + case "so_ghillies": + case "so_killspree_favela": + case "so_juggernauts_favela": + case "so_takeover_estate": + case "so_defuse_favela_escape": + case "so_forest_contingency": + case "so_rooftop_contingency": + case "so_snowrace2_cliffhanger": + case "so_snowrace1_cliffhanger": + case "so_sabotage_cliffhanger": + case "so_demo_so_bridge": + case "so_crossing_so_bridge": + case "so_bridge": + case "so_intel_boneyard": + case "so_download_arcadia": + case "so_escape_airport": + case "iw4_credits": + case "dc_whitehouse": + case "dcemp": + case "af_caves": + case "arcadia": + case "roadkill": + case "af_chase": + case "favela_escape": + case "trainer": + case "gulag": + case "favela": + case "airport": + case "estate": + case "dcburning": + case "cliffhanger": + case "boneyard": + case "oilrig": + case "ending": + return 1; + + default: + return 0; + } +} + +//Function Number: 749 +func_23A0(param_00) +{ + level.loadout = param_00; +} + +//Function Number: 750 +func_23A1(param_00) +{ + func_23A0(param_00); + define_introscreen(param_00); + level.template_script = param_00; +} + +//Function Number: 751 +template_so_level(param_00) +{ + level.audio_stringtable_mapname = param_00; +} + +//Function Number: 752 +define_introscreen(param_00) +{ + level.introscreen_levelname = param_00; +} + +//Function Number: 753 +func_23A4(param_00,param_01) +{ + thread func_23A5(param_00,param_01); +} + +//Function Number: 754 +func_23A5(param_00,param_01) +{ + var_02 = getent(param_00,"script_noteworthy"); + var_02 notify("new_volume_command"); + var_02 endon("new_volume_command"); + wait 0.05; + fx_volume_pause(var_02,param_01); +} + +//Function Number: 755 +fx_volume_pause(param_00,param_01) +{ + param_00.var_23A7 = 1; + if(!isdefined(param_01)) + { + param_01 = 0; + } + + if(param_01) + { + array_thread_mod_delayed(param_00.fx,::common_scripts\utility::pauseeffect); + return; + } + + common_scripts\utility::array_thread(param_00.fx,::common_scripts\utility::pauseeffect); +} + +//Function Number: 756 +array_thread_mod_delayed(param_00,param_01,param_02) +{ + var_03 = 0; + if(!isdefined(param_02)) + { + param_02 = 5; + } + + var_04 = []; + foreach(var_06 in param_00) + { + var_04[var_04.size] = var_06; + var_03++; + var_03 = var_03 % param_02; + if(param_02 == 0) + { + common_scripts\utility::array_thread(var_04,param_01); + wait 0.05; + var_04 = []; + } + } +} + +//Function Number: 757 +fx_volume_restart_noteworthy(param_00) +{ + thread func_23A9(param_00); +} + +//Function Number: 758 +func_23A9(param_00) +{ + var_01 = getent(param_00,"script_noteworthy"); + var_01 notify("new_volume_command"); + var_01 endon("new_volume_command"); + wait 0.05; + if(!isdefined(var_01.var_23A7)) + { + return; + } + + var_01.var_23A7 = undefined; + fx_volume_restart(var_01); +} + +//Function Number: 759 +fx_volume_restart(param_00) +{ + common_scripts\utility::array_thread(param_00.fx,::restarteffect); +} + +//Function Number: 760 +flag_count_increment(param_00) +{ + if(!isdefined(level.var_23AC)) + { + level.var_23AC = []; + } + + if(!isdefined(level.var_23AC[param_00])) + { + level.var_23AC[param_00] = 1; + return; + } + + level.var_23AC[param_00]++; +} + +//Function Number: 761 +flag_count_decrement(param_00) +{ + level.var_23AC[param_00]--; + level.var_23AC[param_00] = int(max(0,level.var_23AC[param_00])); + if(level.var_23AC[param_00]) + { + return; + } + + common_scripts\utility::flag_set(param_00); +} + +//Function Number: 762 +flag_count_set(param_00,param_01) +{ + level.var_23AC[param_00] = param_01; +} + +//Function Number: 763 +add_cleanup_ent(param_00,param_01) +{ + if(!isdefined(level.cleanup_ents)) + { + level.cleanup_ents = []; + } + + if(!isdefined(level.cleanup_ents[param_01])) + { + level.cleanup_ents[param_01] = []; + } + + level.cleanup_ents[param_01][level.cleanup_ents[param_01].size] = param_00; +} + +//Function Number: 764 +cleanup_ents(param_00) +{ + var_01 = level.cleanup_ents[param_00]; + var_01 = common_scripts\utility::array_removeundefined(var_01); + array_delete(var_01); + level.cleanup_ents[param_00] = undefined; +} + +//Function Number: 765 +func_23B1(param_00) +{ + if(!isdefined(level.cleanup_ents)) + { + return; + } + + if(!isdefined(level.cleanup_ents[param_00])) + { + return; + } + + var_01 = level.cleanup_ents[param_00]; + var_01 = common_scripts\utility::array_removeundefined(var_01); + foreach(var_03 in var_01) + { + if(!isai(var_03)) + { + continue; + } + + if(!isalive(var_03)) + { + continue; + } + + if(!isdefined(var_03.magic_bullet_shield)) + { + continue; + } + + if(!var_03.magic_bullet_shield) + { + continue; + } + + var_03 stop_magic_bullet_shield(); + } + + array_delete(var_01); + level.cleanup_ents[param_00] = undefined; +} + +//Function Number: 766 +add_trigger_function(param_00) +{ + if(!isdefined(self.var_1017)) + { + thread maps\_utility_code::add_trigger_func_thread(); + } + + self.var_1017[self.var_1017.size] = param_00; +} + +//Function Number: 767 +getallweapons() +{ + var_00 = []; + var_01 = getentarray(); + foreach(var_03 in var_01) + { + if(!isdefined(var_03.classname)) + { + continue; + } + + if(issubstr(var_03.classname,"weapon_")) + { + var_00[var_00.size] = var_03; + } + } + + return var_00; +} + +//Function Number: 768 +func_23B4(param_00) +{ + level.scr_radio[param_00] = param_00; +} + +//Function Number: 769 +move_with_rate(param_00,param_01,param_02) +{ + self notify("newmove"); + self endon("newmove"); + if(!isdefined(param_02)) + { + param_02 = 200; + } + + var_03 = distance(self.origin,param_00); + var_04 = var_03 / param_02; + var_05 = vectornormalize(param_00 - self.origin); + self moveto(param_00,var_04,0,0); + self rotateto(param_01,var_04,0,0); + wait var_04; + if(!isdefined(self)) + { + return; + } + + self.velocity = var_05 * var_03 / var_04; +} + +//Function Number: 770 +flag_on_death(param_00) +{ + level endon(param_00); + self waittill("death"); + common_scripts\utility::flag_set(param_00); +} + +//Function Number: 771 +enable_damagefeedback() +{ + level.damagefeedback = 1; +} + +//Function Number: 772 +disable_damagefeedback() +{ + level.damagefeedback = 0; +} + +//Function Number: 773 +is_damagefeedback_enabled() +{ + return isdefined(level.damagefeedback) && level.damagefeedback; +} + +//Function Number: 774 +add_damagefeedback() +{ + maps\_damagefeedback::monitordamage(); +} + +//Function Number: 775 +func_23BA() +{ + maps\_damagefeedback::func_15C7(); +} + +//Function Number: 776 +func_14F5() +{ + if(getdvar("e3demo") == "1") + { + return 1; + } + + return 0; +} + +//Function Number: 777 +deletestructarray(param_00,param_01,param_02) +{ + var_03 = common_scripts\utility::getstructarray(param_00,param_01); + deletestructarray_ref(var_03,param_02); +} + +//Function Number: 778 +deletestruct_ref(param_00) +{ + if(!isdefined(param_00)) + { + return; + } + + var_01 = param_00.script_linkname; + if(isdefined(var_01) && isdefined(level.struct_class_names["script_linkname"]) && isdefined(level.struct_class_names["script_linkname"][var_01])) + { + foreach(var_04, var_03 in level.struct_class_names["script_linkname"][var_01]) + { + if(isdefined(var_03) && param_00 == var_03) + { + level.struct_class_names["script_linkname"][var_01][var_04] = undefined; + } + } + + if(level.struct_class_names["script_linkname"][var_01].size == 0) + { + level.struct_class_names["script_linkname"][var_01] = undefined; + } + } + + var_01 = param_00.script_noteworthy; + if(isdefined(var_01) && isdefined(level.struct_class_names["script_noteworthy"]) && isdefined(level.struct_class_names["script_noteworthy"][var_01])) + { + foreach(var_04, var_03 in level.struct_class_names["script_noteworthy"][var_01]) + { + if(isdefined(var_03) && param_00 == var_03) + { + level.struct_class_names["script_noteworthy"][var_01][var_04] = undefined; + } + } + + if(level.struct_class_names["script_noteworthy"][var_01].size == 0) + { + level.struct_class_names["script_noteworthy"][var_01] = undefined; + } + } + + var_01 = param_00.target; + if(isdefined(var_01) && isdefined(level.struct_class_names["target"]) && isdefined(level.struct_class_names["target"][var_01])) + { + foreach(var_04, var_03 in level.struct_class_names["target"][var_01]) + { + if(isdefined(var_03) && param_00 == var_03) + { + level.struct_class_names["target"][var_01][var_04] = undefined; + } + } + + if(level.struct_class_names["target"][var_01].size == 0) + { + level.struct_class_names["target"][var_01] = undefined; + } + } + + var_01 = param_00.targetname; + if(isdefined(var_01) && isdefined(level.struct_class_names["targetname"]) && isdefined(level.struct_class_names["targetname"][var_01])) + { + foreach(var_04, var_03 in level.struct_class_names["targetname"][var_01]) + { + if(isdefined(var_03) && param_00 == var_03) + { + level.struct_class_names["targetname"][var_01][var_04] = undefined; + } + } + + if(level.struct_class_names["targetname"][var_01].size == 0) + { + level.struct_class_names["targetname"][var_01] = undefined; + } + } + + if(isdefined(level.struct)) + { + foreach(var_04, var_03 in level.struct) + { + if(param_00 == var_03) + { + level.struct[var_04] = undefined; + } + } + } +} + +//Function Number: 779 +deletestructarray_ref(param_00,param_01) +{ + if(!isdefined(param_00) || !isarray(param_00) || param_00.size == 0) + { + return; + } + + param_01 = common_scripts\utility::ter_op(isdefined(param_01),param_01,0); + param_01 = common_scripts\utility::ter_op(param_01 > 0,param_01,0); + if(param_01 > 0) + { + foreach(var_03 in param_00) + { + deletestruct_ref(var_03); + wait param_01; + } + + return; + } + + foreach(var_03 in param_01) + { + deletestruct_ref(var_03); + } +} + +//Function Number: 780 +func_23BD(param_00,param_01) +{ + var_02 = common_scripts\utility::getstruct(param_00,param_01); + deletestruct_ref(var_02); + return var_02; +} + +//Function Number: 781 +getstructarray_delete(param_00,param_01,param_02) +{ + var_03 = common_scripts\utility::getstructarray(param_00,param_01); + deletestructarray_ref(var_03,param_02); + return var_03; +} + +//Function Number: 782 +func_23BE(param_00,param_01) +{ + var_02 = func_2373(param_00,param_01); + if(!isdefined(var_02)) + { + var_02 = getnode(param_00,param_01); + } + + if(!isdefined(var_02)) + { + var_02 = getvehiclenode(param_00,param_01); + } + + return var_02; +} + +//Function Number: 783 +setentityheadicon(param_00,param_01,param_02,param_03,param_04) +{ + if(isdefined(param_03)) + { + self.entityheadiconoffset = param_03; + } + else + { + self.entityheadiconoffset = (0,0,0); + } + + if(isdefined(param_04)) + { + self.entityheadiconreferencefunc = param_04; + } + + self notify("new_head_icon"); + var_05 = newhudelem(); + var_05.archived = 1; + var_05.alpha = 0.8; + var_05 setshader(param_00,param_01,param_02); + var_05 setwaypoint(0,0,0,1); + self.entityheadicon = var_05; + func_23C5(); + thread updateentityheadicon(); + thread destroyentityheadiconondeath(); +} + +//Function Number: 784 +func_23C3() +{ + if(!isdefined(self.entityheadicon)) + { + return; + } + + self.entityheadicon destroy(); +} + +//Function Number: 785 +updateentityheadicon() +{ + self endon("new_head_icon"); + self endon("death"); + var_00 = self.origin; + for(;;) + { + if(var_00 != self.origin) + { + func_23C5(); + var_00 = self.origin; + } + + wait 0.05; + } +} + +//Function Number: 786 +func_23C5() +{ + if(isdefined(self.entityheadiconreferencefunc)) + { + var_00 = self [[ self.entityheadiconreferencefunc ]](); + if(isdefined(var_00)) + { + self.entityheadicon.x = self.entityheadiconoffset[0] + var_00[0]; + self.entityheadicon.y = self.entityheadiconoffset[1] + var_00[1]; + self.entityheadicon.z = self.entityheadiconoffset[2] + var_00[2]; + return; + } + } + + self.entityheadicon.x = self.origin[0] + self.entityheadiconoffset[0]; + self.entityheadicon.y = self.origin[1] + self.entityheadiconoffset[1]; + self.entityheadicon.z = self.origin[2] + self.entityheadiconoffset[2]; +} + +//Function Number: 787 +destroyentityheadiconondeath() +{ + self endon("new_head_icon"); + self waittill("death"); + if(!isdefined(self.entityheadicon)) + { + return; + } + + self.entityheadicon destroy(); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_utility_code.gsc b/MW3/Xbox/SP/maps/_utility_code.gsc new file mode 100644 index 0000000..612e3ca --- /dev/null +++ b/MW3/Xbox/SP/maps/_utility_code.gsc @@ -0,0 +1,1819 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_utility_code.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 80 + * Decompile Time: 1381 ms + * Timestamp: 10/27/2023 2:33:40 AM +*******************************************************************/ + +//Function Number: 1 +linetime_proc(param_00,param_01,param_02,param_03) +{ + for(var_04 = 0;var_04 < param_03 * 20;var_04++) + { + wait 0.05; + } +} + +//Function Number: 2 +structarray_swap(param_00,param_01) +{ + var_02 = param_00.struct_array_index; + var_03 = param_01.struct_array_index; + self.array[var_03] = param_00; + self.array[var_02] = param_01; + self.array[var_02].struct_array_index = var_02; + self.array[var_03].struct_array_index = var_03; +} + +//Function Number: 3 +waitspread_code(param_00,param_01) +{ + waittillframeend; + var_02 = []; + if(level.wait_spreaders == 1) + { + level.wait_spreader_allotment = var_41; + level.active_wait_spread = undefined; + return; + } + + var_03 = 1; + while(var_03 < level.wait_spreaders - 1) + { + var_41 = waitspread_insert(var_41); + var_03++ = var_41[var_41.size]; + } + + level.wait_spreader_allotment = maps\_utility::array_randomize(var_41); + level.active_wait_spread = undefined; +} + +//Function Number: 4 +waitspread_insert(param_00) +{ + var_01 = -1; + var_02 = 0; + for(var_03 = 0;var_03 < param_00.size - 1;var_03++) + { + var_04 = param_00[var_03 + 1] - param_00[var_03]; + if(var_04 <= var_02) + { + continue; + } + + var_02 = var_04; + var_01 = var_03; + } + + var_05 = []; + for(var_06 = 0;var_06 < param_00.size;var_06++) + { + if(var_01 == var_06 - 1) + { + var_05[var_05.size] = randomfloatrange(param_00[var_01],param_00[var_01 + 1]); + } + + var_05[var_05.size] = param_00[var_06]; + } + + return var_05; +} + +//Function Number: 5 +waittill_objective_event_proc(param_00) +{ + while(level.deathspawner[self.script_deathchain] > 0) + { + level waittill("spawner_expired" + self.script_deathchain); + } + + if(param_00) + { + self waittill("trigger"); + } + + var_01 = maps\_utility::func_F89(); + common_scripts\utility::flag_set(var_01); +} + +//Function Number: 6 +func_0F8A() +{ + self endon("death"); + while(self.isspeaking) + { + wait 0.05; + } +} + +//Function Number: 7 +wait_for_trigger_think(param_00) +{ + self endon("death"); + param_00 endon("trigger"); + self waittill("trigger"); + param_00 notify("trigger"); +} + +//Function Number: 8 +wait_for_trigger(param_00,param_01) +{ + var_02 = getentarray(param_00,param_01); + var_03 = spawnstruct(); + common_scripts\utility::array_thread(var_02,::wait_for_trigger_think,var_03); + var_03 waittill("trigger"); +} + +//Function Number: 9 +ent_waits_for_level_notify(param_00) +{ + level waittill(param_00); + self notify("done"); +} + +//Function Number: 10 +ent_waits_for_notify(param_00,param_01) +{ + param_00 waittill(param_01); + self notify("done"); +} + +//Function Number: 11 +ent_waits_for_trigger(param_00) +{ + param_00 waittill("trigger"); + self notify("done"); +} + +//Function Number: 12 +ent_times_out(param_00) +{ + wait param_00; + self notify("done"); +} + +//Function Number: 13 +update_debug_friendlycolor_on_death() +{ + self notify("debug_color_update"); + self endon("debug_color_update"); + var_00 = self.unique_id; + self waittill("death"); + level.var_F92[var_00] = undefined; + level notify("updated_color_friendlies"); +} + +//Function Number: 14 +update_debug_friendlycolor(param_00) +{ + thread update_debug_friendlycolor_on_death(); + if(isdefined(self.script_forcecolor)) + { + level.var_F92[param_00] = self.script_forcecolor; + } + else + { + level.var_F92[param_00] = undefined; + } + + level notify("updated_color_friendlies"); +} + +//Function Number: 15 +insure_player_does_not_set_forcecolor_twice_in_one_frame() +{ +} + +//Function Number: 16 +new_color_being_set(param_00) +{ + self notify("new_color_being_set"); + self.new_force_color_being_set = 1; + maps\_colors::func_F5E(); + self endon("new_color_being_set"); + self endon("death"); + waittillframeend; + waittillframeend; + if(isdefined(self.script_forcecolor)) + { + self.currentcolorcode = level.currentcolorforced[maps\_colors::get_team()][self.script_forcecolor]; + if(isdefined(self.dontcolormove)) + { + self.dontcolormove = undefined; + } + else + { + thread maps\_colors::goto_current_colorindex(); + } + } + + self.new_force_color_being_set = undefined; + self notify("done_setting_new_color"); +} + +//Function Number: 17 +func_0F98(param_00) +{ + var_01 = gettime(); + for(;;) + { + if(!isdefined(self._radio_queue)) + { + break; + } + + self waittill("finished_radio"); + if(gettime() > var_01 + 7500) + { + return; + } + } + + self._radio_queue = 1; + maps\_utility::wait_for_buffer_time_to_pass(level.last_mission_sound_time,0.5); + level.player maps\_utility::play_sound_on_entity(level.scr_radio[param_00]); + self._radio_queue = undefined; + level.last_mission_sound_time = gettime(); + self notify("finished_radio"); +} + +//Function Number: 18 +func_0F9B(param_00,param_01) +{ + self endon(param_00); + wait param_01; +} + +//Function Number: 19 +waittill_either_function_internal(param_00,param_01,param_02) +{ + param_00 endon("done"); + [[ param_01 ]](param_02); + param_00 notify("done"); +} + +//Function Number: 20 +hintprintwait(param_00,param_01) +{ + if(!isdefined(param_01)) + { + wait param_00; + return; + } + + var_02 = param_00 * 20; + for(var_03 = 0;var_03 < var_02;var_03++) + { + if([[ param_01 ]]()) + { + break; + } + + wait 0.05; + } +} + +//Function Number: 21 +hint_timeout(param_00) +{ + wait param_00; + self.timed_out = 1; +} + +//Function Number: 22 +hintprint(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if(!isalive(self)) + { + return; + } + + var_06 = 1; + var_07 = 0.75; + var_08 = 0.95; + var_09 = 0.4; + var_0A = 2; + if(isdefined(level.hint_fontscale)) + { + var_0A = level.hint_fontscale; + } + + if(isdefined(self.current_global_hint)) + { + if(self.current_global_hint == param_00) + { + return; + } + } + + maps\_utility::func_FA3("global_hint_in_use"); + if(isdefined(self.current_global_hint)) + { + if(self.current_global_hint == param_00) + { + return; + } + } + + maps\_utility::func_FA4("global_hint_in_use"); + self.current_global_hint = param_00; + var_0B = maps\_hud_util::createclientfontstring("default",var_0A); + level.current_hint = var_0B; + thread func_0FA7(var_0B); + level endon("friendlyfire_mission_fail"); + var_0B.alpha = 0.9; + var_0B.x = 0; + var_0B.y = -68; + var_0B.alignx = "center"; + var_0B.aligny = "middle"; + var_0B.horzalign = "center"; + var_0B.vertalign = "middle"; + var_0B.foreground = 0; + var_0B.hidewhendead = 1; + var_0B.hidewheninmenu = 1; + var_0B settext(param_00); + var_0B.alpha = 0; + var_0B fadeovertime(var_06); + var_0B.alpha = var_08; + hintprintwait(var_06,param_01); + var_0C = 0; + if(isdefined(param_04)) + { + var_0C = 3; + } + else if(isdefined(param_03)) + { + var_0C = 2; + } + else if(isdefined(param_02)) + { + var_0C = 1; + } + + var_0D = spawnstruct(); + var_0D.timed_out = 0; + if(isdefined(param_05)) + { + var_0D thread hint_timeout(param_05); + } + + if(isdefined(param_01)) + { + for(;;) + { + var_0B fadeovertime(var_07); + var_0B.alpha = var_09; + hintprintwait(var_07,param_01); + if(var_0C == 3) + { + if([[ param_01 ]](param_02,param_03,param_04)) + { + break; + } + } + else if(var_0C == 2) + { + if([[ param_01 ]](param_02,param_03)) + { + break; + } + } + else if(var_0C == 1) + { + if([[ param_01 ]](param_02)) + { + break; + } + } + else if([[ param_01 ]]()) + { + break; + } + + var_0B fadeovertime(var_07); + var_0B.alpha = var_08; + hintprintwait(var_07,param_01); + if(var_0D.timed_out) + { + break; + } + + if(var_0C == 3) + { + if([[ param_01 ]](param_02,param_03,param_04)) + { + break; + } + + continue; + } + + if(var_0C == 2) + { + if([[ param_01 ]](param_02,param_03)) + { + break; + } + + continue; + } + + if(var_0C == 1) + { + if([[ param_01 ]](param_02)) + { + break; + } + + continue; + } + + if([[ param_01 ]]()) + { + break; + } + } + } + else + { + for(var_0E = 0;var_0E < 1;var_0E++) + { + var_0B fadeovertime(var_07); + var_0B.alpha = var_09; + hintprintwait(var_07,param_01); + var_0B fadeovertime(var_07); + var_0B.alpha = var_08; + hintprintwait(var_07,param_01); + } + } + + var_0B notify("destroying"); + self.current_global_hint = undefined; + var_0B destroy(); + level.current_hint = undefined; + maps\_utility::ent_flag_clear("global_hint_in_use"); +} + +//Function Number: 23 +func_0FA7(param_00) +{ + param_00 endon("destroying"); + level waittill("friendlyfire_mission_fail"); + if(!isdefined(param_00)) + { + return; + } + + self.current_global_hint = undefined; + param_00 destroy(); + maps\_utility::ent_flag_clear("global_hint_in_use"); +} + +//Function Number: 24 +showhintprint_struct(param_00) +{ + param_00.timed_out = 0; + if(!isalive(self)) + { + return; + } + + var_01 = 1; + var_02 = 0.75; + var_03 = 0.95; + var_04 = 0.4; + maps\_utility::func_FA3("global_hint_in_use"); + maps\_utility::func_FA4("global_hint_in_use"); + if(param_00.timed_out) + { + return; + } + + if(isdefined(param_00.timeout)) + { + param_00 thread hint_timeout(param_00.timeout); + } + + var_05 = maps\_hud_util::createclientfontstring("objective",2); + var_05.alpha = 0.9; + var_05.x = 0; + var_05.y = -38; + var_05.alignx = "center"; + var_05.aligny = "middle"; + var_05.horzalign = "center"; + var_05.vertalign = "middle"; + var_05.foreground = 0; + var_05.hidewhendead = 1; + var_05 settext(param_00.string); + var_05.alpha = 0; + var_05 fadeovertime(var_01); + var_05.alpha = var_03; + hintprintwait(var_01); + for(;;) + { + var_05 fadeovertime(var_02); + var_05.alpha = var_04; + hintprintwait(var_02); + if(param_00.timed_out) + { + break; + } + + var_05 fadeovertime(var_02); + var_05.alpha = var_03; + hintprintwait(var_02); + if(param_00.timed_out) + { + break; + } + } + + var_05 destroy(); + maps\_utility::ent_flag_clear("global_hint_in_use"); +} + +//Function Number: 25 +lerp_player_view_to_tag_internal(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08) +{ + if(isdefined(self.first_frame_time) && self.first_frame_time == gettime()) + { + wait 0.1; + } + + var_09 = self gettagorigin(param_01); + var_0A = self gettagangles(param_01); + param_00 maps\_utility::lerp_player_view_to_position(var_09,var_0A,param_02,param_03,param_04,param_05,param_06,param_07,param_08); + if(param_08) + { + return; + } + + param_00 playerlinkto(self,param_01,param_03,param_04,param_05,param_06,param_07,0); +} + +//Function Number: 26 +lerp_player_view_to_tag_oldstyle_internal(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08) +{ + if(isdefined(self.first_frame_time) && self.first_frame_time == gettime()) + { + wait 0.1; + } + + var_09 = self gettagorigin(param_01); + var_0A = self gettagangles(param_01); + param_00 maps\_utility::func_FAC(var_09,var_0A,param_02,param_03,param_04,param_05,param_06,param_07,1); + if(param_08) + { + return; + } + + param_00 playerlinktodelta(self,param_01,param_03,param_04,param_05,param_06,param_07,0); +} + +//Function Number: 27 +function_stack_wait(param_00) +{ + self endon("death"); + param_00 common_scripts\utility::waittill_either("function_done","death"); +} + +//Function Number: 28 +function_stack_wait_finish(param_00) +{ + function_stack_wait(param_00); + if(!isdefined(self)) + { + return 0; + } + + if(!issentient(self)) + { + return 1; + } + + if(isalive(self)) + { + return 1; + } + + return 0; +} + +//Function Number: 29 +function_stack_proc(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + self endon("death"); + if(!isdefined(param_00.var_E1D)) + { + param_00.var_E1D = []; + } + + param_00.var_E1D[param_00.var_E1D.size] = self; + thread function_stack_self_death(param_00); + func_0FB2(param_00); + if(isdefined(param_00) && isdefined(param_00.var_E1D)) + { + self.function_stack_func_begun = 1; + self notify("function_stack_func_begun"); + if(isdefined(param_06)) + { + param_00 [[ param_01 ]](param_02,param_03,param_04,param_05,param_06); + } + else if(isdefined(param_05)) + { + param_00 [[ param_01 ]](param_02,param_03,param_04,param_05); + } + else if(isdefined(param_04)) + { + param_00 [[ param_01 ]](param_02,param_03,param_04); + } + else if(isdefined(param_03)) + { + param_00 [[ param_01 ]](param_02,param_03); + } + else if(isdefined(param_02)) + { + param_00 [[ param_01 ]](param_02); + } + else + { + param_00 [[ param_01 ]](); + } + + if(isdefined(param_00) && isdefined(param_00.var_E1D)) + { + param_00.var_E1D = common_scripts\utility::array_remove(param_00.var_E1D,self); + param_00 notify("level_function_stack_ready"); + } + } + + if(isdefined(self)) + { + self.function_stack_func_begun = 0; + self notify("function_done"); + } +} + +//Function Number: 30 +function_stack_self_death(param_00) +{ + self endon("function_done"); + self waittill("death"); + if(isdefined(param_00)) + { + param_00.var_E1D = common_scripts\utility::array_remove(param_00.var_E1D,self); + param_00 notify("level_function_stack_ready"); + } +} + +//Function Number: 31 +func_0FB2(param_00) +{ + param_00 endon("death"); + self endon("death"); + param_00 endon("clear_function_stack"); + while(param_00.var_E1D[0] != self) + { + param_00 waittill("level_function_stack_ready"); + } +} + +//Function Number: 32 +unflash_flag(param_00) +{ + level endon("player_flashed"); + wait param_00; + common_scripts\utility::flag_clear("player_flashed"); +} + +//Function Number: 33 +wait_for_sounddone_or_death(param_00) +{ + self endon("death"); + param_00 waittill("sounddone"); + return 1; +} + +//Function Number: 34 +init_vision_set(param_00) +{ + level.lvl_visionset = param_00; + if(!isdefined(level.vision_cheat_enabled)) + { + level.vision_cheat_enabled = 0; + } + + return level.vision_cheat_enabled; +} + +//Function Number: 35 +array_waitlogic1(param_00,param_01,param_02) +{ + array_waitlogic2(param_00,param_01,param_02); + self.var_FB9 = 0; + self notify("_array_wait"); +} + +//Function Number: 36 +array_waitlogic2(param_00,param_01,param_02) +{ + param_00 endon(param_01); + param_00 endon("death"); + if(isdefined(param_02)) + { + wait param_02; + return; + } + + param_00 waittill(param_01); +} + +//Function Number: 37 +func_0FBB(param_00) +{ + if(param_00.parms.size == 0) + { + param_00.var_FBD [[ param_00.func ]](); + } + else if(param_00.parms.size == 1) + { + param_00.var_FBD [[ param_00.func ]](param_00.parms[0]); + } + else if(param_00.parms.size == 2) + { + param_00.var_FBD [[ param_00.func ]](param_00.parms[0],param_00.parms[1]); + } + else if(param_00.parms.size == 3) + { + param_00.var_FBD [[ param_00.func ]](param_00.parms[0],param_00.parms[1],param_00.parms[2]); + } + + if(param_00.parms.size == 4) + { + param_00.var_FBD [[ param_00.func ]](param_00.parms[0],param_00.parms[1],param_00.parms[2],param_00.parms[3]); + } + + if(param_00.parms.size == 5) + { + param_00.var_FBD [[ param_00.func ]](param_00.parms[0],param_00.parms[1],param_00.parms[2],param_00.parms[3],param_00.parms[4]); + } +} + +//Function Number: 38 +exec_call_noself(param_00) +{ + if(param_00.parms.size == 0) + { + [[ param_00.func ]](); + } + else if(param_00.parms.size == 1) + { + [[ param_00.func ]](param_00.parms[0]); + } + else if(param_00.parms.size == 2) + { + [[ param_00.func ]](param_00.parms[0],param_00.parms[1]); + } + else if(param_00.parms.size == 3) + { + [[ param_00.func ]](param_00.parms[0],param_00.parms[1],param_00.parms[2]); + } + + if(param_00.parms.size == 4) + { + [[ param_00.func ]](param_00.parms[0],param_00.parms[1],param_00.parms[2],param_00.parms[3]); + } + + if(param_00.parms.size == 5) + { + [[ param_00.func ]](param_00.parms[0],param_00.parms[1],param_00.parms[2],param_00.parms[3],param_00.parms[4]); + } +} + +//Function Number: 39 +exec_func(param_00,param_01) +{ + if(!isdefined(param_00.var_FBD)) + { + return; + } + + for(var_02 = 0;var_02 < param_01.size;var_02++) + { + param_01[var_02].var_FBD endon(param_01[var_02].ender); + } + + if(param_00.parms.size == 0) + { + param_00.var_FBD [[ param_00.func ]](); + } + else if(param_00.parms.size == 1) + { + param_00.var_FBD [[ param_00.func ]](param_00.parms[0]); + } + else if(param_00.parms.size == 2) + { + param_00.var_FBD [[ param_00.func ]](param_00.parms[0],param_00.parms[1]); + } + else if(param_00.parms.size == 3) + { + param_00.var_FBD [[ param_00.func ]](param_00.parms[0],param_00.parms[1],param_00.parms[2]); + } + + if(param_00.parms.size == 4) + { + param_00.var_FBD [[ param_00.func ]](param_00.parms[0],param_00.parms[1],param_00.parms[2],param_00.parms[3]); + } + + if(param_00.parms.size == 5) + { + param_00.var_FBD [[ param_00.func ]](param_00.parms[0],param_00.parms[1],param_00.parms[2],param_00.parms[3],param_00.parms[4]); + } +} + +//Function Number: 40 +waittill_func_ends(param_00,param_01) +{ + self endon("all_funcs_ended"); + self endon("any_funcs_aborted"); + exec_func(param_00,param_01); + self.count--; + self notify("func_ended"); +} + +//Function Number: 41 +waittill_abort_func_ends(param_00,param_01) +{ + self endon("all_funcs_ended"); + self endon("any_funcs_aborted"); + exec_func(param_00,param_01); + self.abort_count--; + self notify("abort_func_ended"); +} + +//Function Number: 42 +do_abort(param_00) +{ + self endon("all_funcs_ended"); + if(!param_00.size) + { + return; + } + + var_01 = 0; + self.abort_count = param_00.size; + var_02 = []; + common_scripts\utility::array_levelthread(param_00,::waittill_abort_func_ends,var_02); + for(;;) + { + if(self.abort_count <= var_01) + { + break; + } + + self waittill("abort_func_ended"); + } + + self notify("any_funcs_aborted"); +} + +//Function Number: 43 +func_0FC5(param_00) +{ + if(isdefined(self.forward)) + { + var_01 = anglestoforward(param_00.angles); + param_00.origin = param_00.origin + var_01 * self.forward; + } + + if(isdefined(self.right)) + { + var_02 = anglestoright(param_00.angles); + param_00.origin = param_00.origin + var_02 * self.right; + } + + if(isdefined(self.up)) + { + var_03 = anglestoup(param_00.angles); + param_00.origin = param_00.origin + var_03 * self.up; + } + + if(isdefined(self.yaw)) + { + param_00 addyaw(self.yaw); + } + + if(isdefined(self.pitch)) + { + param_00 addpitch(self.pitch); + } + + if(isdefined(self.roll)) + { + param_00 addroll(self.roll); + } +} + +//Function Number: 44 +dynamic_run_speed_proc(param_00,param_01,param_02,param_03,param_04) +{ + self notify("start_dynamic_run_speed"); + self endon("death"); + self endon("stop_dynamic_run_speed"); + self endon("start_dynamic_run_speed"); + level endon("_stealth_spotted"); + if(maps\_utility::ent_flag_exist("_stealth_custom_anim")) + { + maps\_utility::func_FA3("_stealth_custom_anim"); + } + + if(!maps\_utility::ent_flag_exist("dynamic_run_speed_stopped")) + { + maps\_utility::ent_flag_init("dynamic_run_speed_stopped"); + maps\_utility::ent_flag_init("dynamic_run_speed_stopping"); + } + else + { + maps\_utility::ent_flag_clear("dynamic_run_speed_stopping"); + maps\_utility::ent_flag_clear("dynamic_run_speed_stopped"); + } + + self.var_FCB = ""; + self.var_FCC = self.moveplaybackrate; + thread func_0FD1(); + var_05 = param_00 * param_00; + var_06 = param_01 * param_01; + var_07 = param_02 * param_02; + var_08 = param_03 * param_03; + for(;;) + { + wait 0.05; + var_09 = level.players[0]; + foreach(var_0B in level.players) + { + if(distancesquared(var_09.origin,self.origin) > distancesquared(var_0B.origin,self.origin)) + { + var_09 = var_0B; + } + } + + var_0D = anglestoforward(self.angles); + var_0E = vectornormalize(var_09.origin - self.origin); + var_0F = vectordot(var_0D,var_0E); + var_10 = distancesquared(self.origin,var_09.origin); + var_11 = var_10; + if(isdefined(param_04)) + { + var_12 = maps\_utility::getclosest(var_09.origin,param_04); + var_11 = distancesquared(var_12.origin,var_09.origin); + } + + var_13 = 0; + if(isdefined(self.last_set_goalent)) + { + var_13 = [[ level.drs_ahead_test ]](self.last_set_goalent,param_01); + } + else if(isdefined(self.last_set_goalnode)) + { + var_13 = [[ level.drs_ahead_test ]](self.last_set_goalnode,param_01); + } + + if(isdefined(self.cqbwalking) && self.cqbwalking && !self.var_FD0) + { + self.moveplaybackrate = 1; + } + + if(var_10 < var_06 || var_0F > -0.25 || var_13) + { + dynamic_run_set("sprint"); + wait 0.5; + continue; + } + else if(var_10 < var_05 || var_0F > -0.25) + { + dynamic_run_set("run"); + wait 0.5; + continue; + } + else if(var_11 > var_07) + { + if(self.a.movement != "stop") + { + dynamic_run_set("stop"); + wait 0.5; + } + + continue; + } + else if(var_10 > var_08) + { + dynamic_run_set("jog"); + wait 0.5; + continue; + } + } +} + +//Function Number: 45 +func_0FD1() +{ + self endon("start_dynamic_run_speed"); + self endon("death"); + func_0FD5(); + if(!self.var_FD0) + { + self.moveplaybackrate = self.var_FCC; + } + + if(isdefined(level.scr_anim["generic"]["DRS_run"])) + { + if(isarray(level.scr_anim["generic"]["DRS_run"])) + { + maps\_utility::set_generic_run_anim_array("DRS_run"); + } + else + { + maps\_utility::set_generic_run_anim("DRS_run"); + } + } + else + { + maps\_utility::clear_run_anim(); + } + + self notify("stop_loop"); + maps\_utility::ent_flag_clear("dynamic_run_speed_stopping"); + maps\_utility::ent_flag_clear("dynamic_run_speed_stopped"); +} + +//Function Number: 46 +func_0FD5() +{ + level endon("_stealth_spotted"); + self waittill("stop_dynamic_run_speed"); +} + +//Function Number: 47 +func_0FD6(param_00,param_01) +{ + if(!isdefined(param_00.classname)) + { + if(!isdefined(param_00.type)) + { + var_02 = ::maps\_spawner::func_FD7; + } + else + { + var_02 = ::maps\_spawner::get_target_nodes; + } + } + else + { + var_02 = ::maps\_spawner::get_target_ents; + } + + return maps\_spawner::go_to_node_wait_for_player(param_00,var_02,param_01); +} + +//Function Number: 48 +dynamic_run_set(param_00) +{ + if(self.var_FCB == param_00) + { + return; + } + + self.var_FCB = param_00; + switch(param_00) + { + case "sprint": + if(isdefined(self.cqbwalking) && self.cqbwalking && !self.var_FD0) + { + self.moveplaybackrate = 1; + } + else if(!self.var_FD0) + { + self.moveplaybackrate = 1.15; + } + + if(isarray(level.scr_anim["generic"]["DRS_sprint"])) + { + maps\_utility::set_generic_run_anim_array("DRS_sprint"); + } + else + { + maps\_utility::set_generic_run_anim("DRS_sprint"); + } + + self notify("stop_loop"); + maps\_utility::anim_stopanimscripted(); + maps\_utility::ent_flag_clear("dynamic_run_speed_stopped"); + break; + + case "run": + if(!self.var_FD0) + { + self.moveplaybackrate = self.var_FCC; + } + + if(isdefined(level.scr_anim["generic"]["DRS_run"])) + { + if(isarray(level.scr_anim["generic"]["DRS_run"])) + { + maps\_utility::set_generic_run_anim_array("DRS_run"); + } + else + { + maps\_utility::set_generic_run_anim("DRS_run"); + } + } + else + { + maps\_utility::clear_run_anim(); + } + + self notify("stop_loop"); + maps\_utility::anim_stopanimscripted(); + maps\_utility::ent_flag_clear("dynamic_run_speed_stopped"); + break; + + case "stop": + thread dynamic_run_speed_stopped(); + break; + + case "jog": + if(!self.var_FD0) + { + self.moveplaybackrate = self.var_FCC; + } + + if(isdefined(level.scr_anim["generic"]["DRS_combat_jog"])) + { + if(isarray(level.scr_anim["generic"]["DRS_combat_jog"])) + { + maps\_utility::set_generic_run_anim_array("DRS_combat_jog"); + } + else + { + maps\_utility::set_generic_run_anim("DRS_combat_jog"); + } + } + else + { + maps\_utility::clear_run_anim(); + } + + self notify("stop_loop"); + maps\_utility::anim_stopanimscripted(); + maps\_utility::ent_flag_clear("dynamic_run_speed_stopped"); + break; + + case "crouch": + break; + } +} + +//Function Number: 49 +dynamic_run_speed_stopped() +{ + self endon("death"); + if(maps\_utility::ent_flag("dynamic_run_speed_stopped")) + { + return; + } + + if(maps\_utility::ent_flag("dynamic_run_speed_stopping")) + { + return; + } + + self endon("stop_dynamic_run_speed"); + maps\_utility::func_FA4("dynamic_run_speed_stopping"); + maps\_utility::func_FA4("dynamic_run_speed_stopped"); + self endon("dynamic_run_speed_stopped"); + var_00 = "DRS_run_2_stop"; + maps\_anim::anim_generic_custom_animmode(self,"gravity",var_00); + maps\_utility::ent_flag_clear("dynamic_run_speed_stopping"); + if(isdefined(self.loops) && self.loops > 0) + { + return; + } + + while(maps\_utility::ent_flag("dynamic_run_speed_stopped")) + { + var_01 = "DRS_stop_idle"; + thread maps\_anim::anim_generic_loop(self,var_01); + if(isdefined(level.scr_anim["generic"]["signal_go"])) + { + maps\_utility::handsignal("go"); + } + + wait randomfloatrange(12,20); + if(maps\_utility::ent_flag_exist("_stealth_stance_handler")) + { + maps\_utility::func_FA3("_stealth_stance_handler"); + } + + self notify("stop_loop"); + if(!maps\_utility::ent_flag("dynamic_run_speed_stopped")) + { + return; + } + + if(isdefined(level.dynamic_run_speed_dialogue)) + { + var_02 = common_scripts\utility::random(level.dynamic_run_speed_dialogue); + level thread maps\_utility::func_FE1(var_02); + } + + if(isdefined(level.scr_anim["generic"]["signal_go"])) + { + maps\_utility::handsignal("go"); + } + } +} + +//Function Number: 50 +g_speed_get_func() +{ + return int(getdvar("g_speed")); +} + +//Function Number: 51 +g_speed_set_func(param_00) +{ + setsaveddvar("g_speed",int(param_00)); +} + +//Function Number: 52 +movespeed_get_func() +{ + return self.movespeedscale; +} + +//Function Number: 53 +movespeed_set_func(param_00) +{ + self.movespeedscale = param_00; + self setmovespeedscale(param_00); +} + +//Function Number: 54 +autosave_tactical_setup() +{ + if(common_scripts\utility::flag_exist("autosave_tactical_player_nade")) + { + return; + } + + common_scripts\utility::flag_init("autosave_tactical_player_nade"); + level.autosave_tactical_player_nades = 0; + notifyoncommand("autosave_player_nade","+frag"); + notifyoncommand("autosave_player_nade","-smoke"); + notifyoncommand("autosave_player_nade","+smoke"); + common_scripts\utility::array_thread(level.players,::autosave_tactical_grenade_check); +} + +//Function Number: 55 +autosave_tactical_grenade_check() +{ + for(;;) + { + self waittill("autosave_player_nade"); + common_scripts\utility::flag_set("autosave_tactical_player_nade"); + self waittill("grenade_fire",var_00); + thread autosave_tactical_grenade_check_dieout(var_00); + } +} + +//Function Number: 56 +autosave_tactical_grenade_check_dieout(param_00) +{ + level.autosave_tactical_player_nades++; + param_00 common_scripts\utility::waittill_notify_or_timeout("death",10); + level.autosave_tactical_player_nades--; + waittillframeend; + if(!level.autosave_tactical_player_nades) + { + common_scripts\utility::flag_clear("autosave_tactical_player_nade"); + } +} + +//Function Number: 57 +autosave_tactical_proc() +{ + level notify("autosave_tactical_proc"); + level endon("autosave_tactical_proc"); + level thread maps\_utility::func_FEC("kill_save",5); + level endon("kill_save"); + level endon("autosave_tactical_player_nade"); + if(common_scripts\utility::flag("autosave_tactical_player_nade")) + { + common_scripts\utility::flag_waitopen_or_timeout("autosave_tactical_player_nade",4); + if(common_scripts\utility::flag("autosave_tactical_player_nade")) + { + return; + } + } + + var_00 = getaiarray("axis"); + foreach(var_02 in var_00) + { + if(isdefined(var_02.enemy) && isplayer(var_02.enemy)) + { + return; + } + } + + waittillframeend; + maps\_utility::autosave_by_name(); +} + +//Function Number: 58 +music_play_internal_stop_with_fade_then_call(param_00,param_01,param_02,param_03) +{ + maps\_utility::music_stop(param_01); + level endon("stop_music"); + wait param_01; + thread maps\_utility::music_play(param_00,undefined,param_02,param_03); +} + +//Function Number: 59 +music_loop_internal_stop_with_fade_then_call(param_00,param_01,param_02,param_03,param_04,param_05) +{ + maps\_utility::music_stop(param_02); + level endon("stop_music"); + wait param_02; + thread music_loop_internal(param_00,param_01,undefined,param_03,param_04,param_05); +} + +//Function Number: 60 +music_loop_internal(param_00,param_01,param_02,param_03,param_04,param_05) +{ + if(isdefined(param_02) && param_02 > 0) + { + thread music_loop_internal_stop_with_fade_then_call(param_00,param_01,param_02,param_03,param_04,param_05); + return; + } + + maps\_utility::music_stop(); + level endon("stop_music"); + maps\_utility::musicplaywrapper(param_00,param_03,param_04); + if(isdefined(param_05) && param_05 == 1 && common_scripts\utility::flag_exist("_stealth_spotted")) + { + level endon("_stealth_spotted"); + thread music_loop_stealth_pause(param_00,param_01,param_02); + } + + var_06 = maps\_utility::musiclength(param_00); + if(!isdefined(param_01)) + { + param_01 = 1; + } + + if(param_01 <= 10) + { + var_06 = var_06 + param_01; + } + + wait var_06; + maps\_utility::music_loop(param_00,param_01,param_02,param_03,param_04); +} + +//Function Number: 61 +music_loop_stealth_pause(param_00,param_01,param_02) +{ + level endon("stop_music"); + common_scripts\utility::flag_wait("_stealth_spotted"); + musicstop(0.5); + while(common_scripts\utility::flag("_stealth_spotted")) + { + common_scripts\utility::flag_waitopen("_stealth_spotted"); + wait 1; + } + + thread maps\_utility::music_loop(param_00,param_01,param_02); +} + +//Function Number: 62 +doslide(param_00,param_01,param_02) +{ + self endon("death"); + self endon("stop_sliding"); + var_03 = self; + var_04 = undefined; + for(;;) + { + var_05 = var_03 getnormalizedmovement(); + var_06 = anglestoforward(var_03.angles); + var_07 = anglestoright(var_03.angles); + var_05 = (var_05[1] * var_07[0] + var_05[0] * var_06[0],var_05[1] * var_07[1] + var_05[0] * var_06[1],0); + param_00.slidevelocity = param_00.slidevelocity + var_05 * param_01; + wait 0.05; + param_00.slidevelocity = param_00.slidevelocity * 1 - param_02; + } +} + +//Function Number: 63 +kill_deathflag_proc(param_00) +{ + self endon("death"); + if(isdefined(param_00)) + { + wait randomfloat(param_00); + } + + playfxontag(common_scripts\utility::func_539("flesh_hit"),self,"tag_eye"); + self kill(level.player.origin); +} + +//Function Number: 64 +update_rumble_intensity(param_00,param_01) +{ + self endon("death"); + var_02 = 0; + for(;;) + { + if(self.intensity > 0.0001 && gettime() > 300) + { + if(!var_02) + { + self playrumblelooponentity(param_01); + var_02 = 1; + } + } + else if(var_02) + { + self stoprumble(param_01); + var_02 = 0; + } + + var_03 = 1 - self.intensity; + var_03 = var_03 * 1000; + self.origin = param_00 geteye() + (0,0,var_03); + wait 0.05; + } +} + +//Function Number: 65 +start_glow(param_00) +{ + var_01 = spawn("script_model",self.origin); + self.glow_model = var_01; + var_01.angles = self.angles; + var_01 setmodel(param_00); + var_01 endon("death"); + self waittill("death"); + var_01 delete(); +} + +//Function Number: 66 +blend_default_dof(param_00,param_01,param_02) +{ + foreach(var_05, var_04 in level.dofdefault) + { + level.dofdefault[var_05] = param_01[var_05] * 1 - param_00 + param_02[var_05] * param_00; + } +} + +//Function Number: 67 +process_blend(param_00,param_01,param_02,param_03,param_04) +{ + waittillframeend; + if(!isdefined(self.start)) + { + self.start = 0; + } + + if(!isdefined(self.var_1001)) + { + self.var_1001 = 1; + } + + if(!isdefined(self.base)) + { + self.base = 0; + } + + var_05 = self.time * 20; + var_06 = self.var_1001 - self.start; + if(isdefined(param_04)) + { + for(var_07 = 0;var_07 <= var_05;var_07++) + { + var_08 = self.base + var_07 * var_06 / var_05; + param_01 thread [[ param_00 ]](var_08,param_02,param_03,param_04); + wait 0.05; + } + + return; + } + + if(isdefined(var_05)) + { + for(var_07 = 0;var_07 <= var_05;var_07++) + { + var_08 = self.base + var_07 * var_06 / var_05; + param_01 thread [[ param_00 ]](var_08,param_02,param_03); + wait 0.05; + } + + return; + } + + if(isdefined(param_04)) + { + for(var_07 = 0;var_07 <= var_05;var_07++) + { + var_08 = self.base + var_07 * var_06 / var_05; + param_01 thread [[ param_00 ]](var_08,param_02); + wait 0.05; + } + + return; + } + + for(var_07 = 0;var_07 <= var_05;var_07++) + { + var_08 = self.base + var_07 * var_06 / var_05; + param_01 thread [[ param_00 ]](var_08); + wait 0.05; + } +} + +//Function Number: 68 +func_1004(param_00) +{ + waittillframeend; + if(!isdefined(level.trace_fx)) + { + level.trace_fx = []; + } + + if(!isdefined(level.trace_fx)) + { + level.trace_fx[param_00] = []; + } + + if(isdefined(self.fx)) + { + level.trace_fx[param_00][self.surface]["fx"] = self.fx; + } + + if(isdefined(self.fx_array)) + { + level.trace_fx[param_00][self.surface]["fx_array"] = self.fx_array; + } + + if(isdefined(self.sound)) + { + level.trace_fx[param_00][self.surface]["sound"] = self.sound; + } + + if(isdefined(self.rumble)) + { + level.trace_fx[param_00][self.surface]["rumble"] = self.rumble; + } + + if(!isdefined(level.trace_fx[param_00]["default"])) + { + level.trace_fx[param_00]["default"] = level.trace_fx[param_00][self.surface]; + } +} + +//Function Number: 69 +func_100A(param_00) +{ + var_01 = spawnstruct(); + precachemodel(param_00.model); + var_01.toy_model = param_00.model; + var_01.origin = param_00.origin; + var_01.angles = param_00.angles; + var_01.script_noteworthy = param_00.script_noteworthy; + var_01.target = param_00.target; + var_01.targetname = param_00.targetname; + self.interactives[self.interactives.size] = var_01; + param_00 delete(); +} + +//Function Number: 70 +put_toy_in_volume(param_00) +{ + var_01 = spawnstruct(); + precachemodel(param_00.model); + var_01.toy_model = param_00.model; + var_01.origin = param_00.origin; + var_01.angles = param_00.angles; + var_01.script_noteworthy = param_00.script_noteworthy; + var_01.script_linkto = param_00.script_linkto; + var_01.targetname = param_00.targetname; + var_01.target = param_00.target; + var_01.destructible_type = param_00.destructible_type; + var_01.script_noflip = param_00.script_noflip; + param_00 maps\_utility::precache_destructible(param_00.destructible_type); + self.destructibles[self.destructibles.size] = var_01; + param_00 notify("masking_destructible"); + param_00 delete(); +} + +//Function Number: 71 +get_color_info_from_trigger() +{ + var_00 = "allies"; + if(isdefined(self.script_color_axis)) + { + var_00 = "axis"; + } + + var_00 = maps\_colors::get_team(var_00); + var_01 = []; + if(var_00 == "allies") + { + var_02 = maps\_colors::get_colorcodes_from_trigger(self.script_color_allies,"allies"); + var_01 = var_02["colorCodes"]; + } + else + { + var_02 = maps\_colors::get_colorcodes_from_trigger(self.script_color_axis,"axis"); + var_01 = var_02["colorCodes"]; + } + + var_03 = []; + return var_41; +} + +//Function Number: 72 +delaythread_proc(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07) +{ + self endon("death"); + wait param_01; + if(!isdefined(param_02)) + { + thread [[ param_00 ]](); + return; + } + + if(!isdefined(param_03)) + { + thread [[ param_00 ]](param_02); + return; + } + + if(!isdefined(param_04)) + { + thread [[ param_00 ]](param_02,param_03); + return; + } + + if(!isdefined(param_05)) + { + thread [[ param_00 ]](param_02,param_03,param_04); + return; + } + + if(!isdefined(param_06)) + { + thread [[ param_00 ]](param_02,param_03,param_04,param_05); + return; + } + + if(!isdefined(param_07)) + { + thread [[ param_00 ]](param_02,param_03,param_04,param_05,param_06); + return; + } + + thread [[ param_00 ]](param_02,param_03,param_04,param_05,param_06,param_07); +} + +//Function Number: 73 +add_wait_asserter() +{ + level notify("kill_add_wait_asserter"); + level endon("kill_add_wait_asserter"); + for(var_00 = 0;var_00 < 20;var_00++) + { + waittillframeend; + } +} + +//Function Number: 74 +func_1012() +{ +} + +//Function Number: 75 +comparesizesfx(param_00,param_01,param_02,param_03) +{ + if(!param_01.size) + { + return undefined; + } + + if(isdefined(param_02)) + { + var_04 = undefined; + var_05 = getarraykeys(param_01); + for(var_06 = 0;var_06 < var_05.size;var_06++) + { + var_07 = distance(param_01[var_05[var_06]].v["origin"],param_00); + if([[ param_03 ]](var_07,param_02)) + { + continue; + } + + param_02 = var_07; + var_04 = param_01[var_05[var_06]]; + } + + return var_04; + } + + var_05 = getarraykeys(var_05); + var_04 = var_04[var_07[0]]; + var_04 = distance(var_07.v["origin"],param_02); + for(var_06 = 1;var_06 < var_04.size;var_06++) + { + var_07 = distance(param_01[var_04[var_06]].v["origin"],param_00); + if([[ param_03 ]](var_07,param_02)) + { + continue; + } + + param_02 = var_07; + var_05 = param_01[var_04[var_06]]; + } + + return var_05; +} + +//Function Number: 76 +waittill_triggered_current() +{ + for(;;) + { + self waittill("trigger",var_00); + waittillframeend; + if(var_00.currentnode == self) + { + return var_00; + } + } +} + +//Function Number: 77 +add_trigger_func_thread() +{ + self.var_1017 = []; + self waittill("trigger",var_00); + var_01 = self.var_1017; + self.var_1017 = undefined; + foreach(var_03 in var_01) + { + thread [[ var_03 ]](var_00); + } +} + +//Function Number: 78 +objective_recon(param_00) +{ + if(!maps\_utility::is_default_start()) + { + return; + } + + var_01 = get_leveltime(); + var_02 = var_01; + if(isdefined(level.recon_objective_lasttime)) + { + var_02 = var_01 - level.recon_objective_lasttime; + } + + level.recon_objective_lasttime = var_01; + reconevent("script_objective: objective %d, leveltime %d, deltatime %d",param_00,var_01,var_02); +} + +//Function Number: 79 +mission_recon(param_00) +{ + if(maps\_utility::is_default_start()) + { + if(!isdefined(param_00)) + { + param_00 = 1; + } + + var_01 = get_leveltime(); + var_02 = var_01; + reconevent("script_level: leveltime %d, deltatime %d, success %d",var_02,var_01,param_00); + } +} + +//Function Number: 80 +get_leveltime() +{ + return getlevelticks() * 0.05; +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_vehicle.gsc b/MW3/Xbox/SP/maps/_vehicle.gsc new file mode 100644 index 0000000..72462f9 --- /dev/null +++ b/MW3/Xbox/SP/maps/_vehicle.gsc @@ -0,0 +1 @@ +Failed to decompile this file, open a ticket if you need this fixed. \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_vehicle_aianim.gsc b/MW3/Xbox/SP/maps/_vehicle_aianim.gsc new file mode 100644 index 0000000..72462f9 --- /dev/null +++ b/MW3/Xbox/SP/maps/_vehicle_aianim.gsc @@ -0,0 +1 @@ +Failed to decompile this file, open a ticket if you need this fixed. \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_vehicle_missile.gsc b/MW3/Xbox/SP/maps/_vehicle_missile.gsc new file mode 100644 index 0000000..4cf2bc7 --- /dev/null +++ b/MW3/Xbox/SP/maps/_vehicle_missile.gsc @@ -0,0 +1,236 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_vehicle_missile.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 8 + * Decompile Time: 133 ms + * Timestamp: 10/27/2023 2:34:41 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + if(getdvar("cobrapilot_surface_to_air_missiles_enabled") == "") + { + setdvar("cobrapilot_surface_to_air_missiles_enabled","1"); + } + + func_3E6F(); + thread firemissile(); + thread func_1E1A(); + thread func_3E66(); +} + +//Function Number: 2 +func_3E66() +{ + self waittill("death"); + self detachall(); +} + +//Function Number: 3 +func_1E1A() +{ + self endon("death"); + if(!isdefined(self.var_252C)) + { + return; + } + + if(self.var_252C == 0) + { + return; + } + + self.attackradius = 30000; + if(isdefined(self.radius)) + { + self.attackradius = self.radius; + } + + while(!isdefined(level.cobrapilot_difficulty)) + { + wait 0.05; + } + + var_00 = 1; + if(level.cobrapilot_difficulty == "easy") + { + var_00 = 0.5; + } + else if(level.cobrapilot_difficulty == "medium") + { + var_00 = 1.7; + } + else if(level.cobrapilot_difficulty == "hard") + { + var_00 = 1; + } + else if(level.cobrapilot_difficulty == "insane") + { + var_00 = 1.5; + } + + self.attackradius = self.attackradius * var_00; + if(getdvar("cobrapilot_debug") == "1") + { + iprintln("surface-to-air missile range difficultyScaler = " + var_00); + } + + for(;;) + { + wait 2 + randomfloat(1); + var_01 = undefined; + var_01 = maps\_helicopter_globals::getenemytarget(self.attackradius,undefined,0,1); + if(!isdefined(var_01)) + { + continue; + } + + var_02 = var_01.origin; + if(isdefined(var_01.script_targetoffset_z)) + { + var_02 = var_02 + (0,0,var_01.script_targetoffset_z); + } + + self setturrettargetvec(var_02); + level thread func_3E69(self,5); + self waittill("turret_rotate_stopped"); + self clearturrettarget(); + if(distance(self.origin,var_01.origin) > self.attackradius) + { + continue; + } + + var_03 = 0; + var_03 = sighttracepassed(self.origin,var_01.origin + (0,0,150),0,self); + if(!var_03) + { + continue; + } + + if(getdvar("cobrapilot_surface_to_air_missiles_enabled") == "1") + { + self notify("shoot_target",var_01); + self waittill("missile_fired",var_04); + if(isdefined(var_04)) + { + if(level.cobrapilot_difficulty == "hard") + { + wait 1 + randomfloat(2); + continue; + } + else if(level.cobrapilot_difficulty == "insane") + { + continue; + } + else + { + var_04 waittill("death"); + } + } + + continue; + } + } +} + +//Function Number: 4 +func_3E69(param_00,param_01) +{ + param_00 endon("death"); + param_00 endon("turret_rotate_stopped"); + wait param_01; + param_00 notify("turret_rotate_stopped"); +} + +//Function Number: 5 +func_3E6A(param_00) +{ + var_01 = distance((self.origin[0],self.origin[1],0),(param_00.origin[0],param_00.origin[1],0)); + var_02 = param_00.origin[2] - self.origin[2]; + if(var_02 <= 750) + { + return 0; + } + + var_03 = var_02 * 2.5; + if(var_01 <= self.attackradius + var_03) + { + return 1; + } + + return 0; +} + +//Function Number: 6 +firemissile() +{ + self endon("death"); + for(;;) + { + self waittill("shoot_target",var_00); + var_01 = undefined; + if(!isdefined(var_00.script_targetoffset_z)) + { + var_00.script_targetoffset_z = 0; + } + + var_02 = (0,0,var_00.script_targetoffset_z); + var_01 = self fireweapon(self.var_3983[self.missilelaunchnexttag],var_00,var_02); + if(getdvar("cobrapilot_debug") == "1") + { + level thread draw_missile_target_line(var_01,var_00,var_02); + } + + if(!isdefined(var_00.var_23E3)) + { + var_00.var_23E3 = []; + } + + var_00.var_23E3 = maps\_utility::array_add(var_00.var_23E3,var_01); + thread maps\_helicopter_globals::missile_deathwait(var_01,var_00); + self detach(self.var_3E6C,self.var_3983[self.missilelaunchnexttag]); + self.missilelaunchnexttag++; + self.var_3E6D--; + var_00 notify("incomming_missile",var_01); + func_3E6F(); + wait 0.05; + self notify("missile_fired",var_01); + } +} + +//Function Number: 7 +draw_missile_target_line(param_00,param_01,param_02) +{ + param_00 endon("death"); + wait 0.05; +} + +//Function Number: 8 +func_3E6F() +{ + if(!isdefined(self.var_3E6D)) + { + self.var_3E6D = 0; + } + + if(!isdefined(self.missilelaunchnexttag)) + { + self.missilelaunchnexttag = 0; + } + + if(self.var_3E6D > 0) + { + return; + } + + for(var_00 = 0;var_00 < self.var_3983.size;var_00++) + { + self attach(self.var_3E6C,self.var_3983[var_00]); + } + + self.var_3E6D = self.var_3983.size; + self.missilelaunchnexttag = 0; +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_vehicle_spline.gsc b/MW3/Xbox/SP/maps/_vehicle_spline.gsc new file mode 100644 index 0000000..3575c8c --- /dev/null +++ b/MW3/Xbox/SP/maps/_vehicle_spline.gsc @@ -0,0 +1,1618 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_vehicle_spline.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 61 + * Decompile Time: 1083 ms + * Timestamp: 10/27/2023 2:34:45 AM +*******************************************************************/ + +//Function Number: 1 +func_3E70() +{ + common_scripts\utility::create_dvar("vehicle_spline_debug",0); + level.var_3E71 = -2000; + level.var_3E72 = 6; + level.var_3E73 = spawn("script_origin",level.player.origin + (0,0,88)); + level.var_3E73 linkto(level.player); + level.var_267E = func_3E75(); + common_scripts\utility::flag_init("ai_snowmobiles_ram_player"); + common_scripts\utility::flag_set("ai_snowmobiles_ram_player"); + var_00 = getentarray("enable_spline_path","targetname"); + common_scripts\utility::array_thread(var_00,::func_3E74); +} + +//Function Number: 2 +func_3E74() +{ + for(;;) + { + self waittill("trigger",var_00); + var_00 notify("enable_spline_path"); + } +} + +//Function Number: 3 +func_3E75() +{ + level.var_25D2 = ::bike_drives_path; + var_00 = func_3E7B(); + common_scripts\utility::flag_init("race_complete"); + level.var_3E76 = spawn("script_model",(0,0,0)); + level.var_3E76 setmodel("tag_origin"); + level.var_267F = []; + level.bike_score = 0; + level.player thread bike_death_score(); + return var_00; +} + +//Function Number: 4 +bike_death_score() +{ + self waittill("death"); +} + +//Function Number: 5 +func_3E79() +{ + var_00 = getent("spawner","targetname"); + var_00.count = 1; + var_00.origin = self.origin; + var_00.angles = (0,self.angles[1],0); + return var_00 stalingradspawn(); +} + +//Function Number: 6 +func_3E7A(param_00) +{ + for(;;) + { + if(!isdefined(self)) + { + return; + } + + self orientmode("face angle",param_00); + wait 0.05; + } +} + +//Function Number: 7 +func_3E7B() +{ + var_00 = func_3E88(); + level.var_267E = var_00; + func_3E8F(var_00); + return var_00; +} + +//Function Number: 8 +func_3E7C(param_00,param_01,param_02,param_03,param_04,param_05) +{ + param_00 = maps\_utility::drop_to_ground(param_00); + param_01 = maps\_utility::drop_to_ground(param_01); + thread maps\_debug::linedraw(param_00,param_01,param_02,param_03,param_04,param_05); +} + +//Function Number: 9 +func_3E7D(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + param_01 = (param_01[0],param_01[1],param_00); + param_01 = maps\_utility::drop_to_ground(param_01); + param_02 = (param_02[0],param_02[1],param_00); + param_02 = maps\_utility::drop_to_ground(param_02); + thread maps\_debug::linedraw(param_01,param_02,param_03,param_04,param_05,param_06); +} + +//Function Number: 10 +func_3E7E(param_00) +{ + var_01 = undefined; + var_02 = undefined; + for(var_03 = 0;var_03 < param_00.size;var_03++) + { + var_04 = param_00[var_03]; + var_05 = vectortoangles(var_04.next_node.midpoint - var_04.midpoint); + var_06 = anglestoforward(var_05) * var_04.var_3E81; + var_07 = var_04.road_width * 0.5; + var_08 = get_position_from_spline(var_04,0,var_07); + var_09 = get_position_from_spline(var_04,var_04.var_3E81,var_07); + func_3E7D(var_04.z,var_08,var_09,(0,0.5,1),1,1,-15536); + var_0A = get_position_from_spline(var_04,0,var_07 * -1); + var_0B = get_position_from_spline(var_04,var_04.var_3E81,var_07 * -1); + func_3E7D(var_04.z,var_0A,var_0B,(0,0.5,1),1,1,-15536); + func_3E7D(var_04.z,var_08,var_0A,(0,0.5,1),1,1,-15536); + func_3E7D(var_04.z,var_09,var_0B,(0,0.5,1),1,1,-15536); + foreach(var_0D in var_04.col_volumes) + { + var_04 draw_col_vol(var_04.z,var_0D); + } + + foreach(var_10 in var_04.var_3E84) + { + var_11 = var_10.origin; + var_12 = var_10.var_3E85.origin; + func_3E7D(var_04.z,var_11,var_12,(1,0,0),1,1,-15536); + } + } +} + +//Function Number: 11 +draw_col_vol(param_00,param_01) +{ + var_02 = get_position_from_spline(self,param_01["min"],param_01["left_offset"]); + var_03 = get_position_from_spline(self,param_01["max"],param_01["left_offset"]); + func_3E7D(param_00,var_02,var_03,(0.5,0,1),1,1,-15536); + var_02 = get_position_from_spline(self,param_01["min"],param_01["right_offset"]); + var_03 = get_position_from_spline(self,param_01["max"],param_01["right_offset"]); + func_3E7D(param_00,var_02,var_03,(0.5,0,1),1,1,-15536); + var_02 = get_position_from_spline(self,param_01["min"],param_01["right_offset"]); + var_03 = get_position_from_spline(self,param_01["min"],param_01["left_offset"]); + func_3E7D(param_00,var_02,var_03,(0.5,0,1),1,1,-15536); + var_02 = get_position_from_spline(self,param_01["max"],param_01["right_offset"]); + var_03 = get_position_from_spline(self,param_01["max"],param_01["left_offset"]); + func_3E7D(param_00,var_02,var_03,(0.5,0,1),1,1,-15536); +} + +//Function Number: 12 +func_3E87(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = self; + var_06 = get_position_from_spline(var_05,param_01["min"],param_01[param_02]); + var_07 = get_position_from_spline(var_05,param_01["max"],param_01[param_02]); + func_3E7D(param_00,var_06,var_07,(0.5,0,1),1,1,-15536); +} + +//Function Number: 13 +func_3E88() +{ + var_00 = common_scripts\utility::getstruct("road_path_left","targetname"); + var_01 = []; + var_00.origin = (var_00.origin[0],var_00.origin[1],0); + var_02 = 0; + var_03 = var_00; + for(;;) + { + var_04 = var_00; + if(isdefined(var_00.target)) + { + var_04 = common_scripts\utility::getstruct(var_00.target,"targetname"); + } + + var_04.origin = (var_04.origin[0],var_04.origin[1],0); + var_01[var_01.size] = var_00; + var_00.next_node = var_04; + var_00.prev_node = var_03; + var_04.var_3E8A = var_00; + var_00.var_3E84 = []; + var_00.col_volumes = []; + var_00.col_radiuses = []; + var_00.var_3E8C = []; + var_00.dist_to_next_targs = []; + var_00.var_3E8C["left"] = var_00.origin; + var_00.index = var_02; + var_02++; + if(var_00 == var_04) + { + break; + } + + var_03 = var_00; + var_00 = var_04; + } + + var_00 = common_scripts\utility::getstruct("road_path_right","targetname"); + var_00.origin = (var_00.origin[0],var_00.origin[1],0); + var_05 = 0; + for(;;) + { + var_04 = var_00; + if(isdefined(var_00.target)) + { + var_04 = common_scripts\utility::getstruct(var_00.target,"targetname"); + } + + var_04.origin = (var_04.origin[0],var_04.origin[1],0); + var_06 = var_01[var_05]; + var_06.var_3E8C["right"] = var_00.origin; + var_06.road_width = distance(var_06.var_3E8C["right"],var_06.var_3E8C["left"]); + var_05++; + if(var_00 == var_04) + { + break; + } + + var_00 = var_04; + } + + foreach(var_08 in var_01) + { + var_08.midpoint = var_08.var_3E8C["left"] + var_08.var_3E8C["right"] * 0.5; + } + + foreach(var_08 in var_01) + { + var_0B = var_08.midpoint; + var_0C = var_08.next_node.midpoint; + var_0D = vectortoangles(var_0B - var_0C); + var_0E = anglestoright(var_0D); + var_0F = var_08.road_width * 0.5; + var_08.var_3E8C["left"] = var_08.midpoint + var_0E * var_0F; + var_08.var_3E8C["right"] = var_08.midpoint + var_0E * var_0F * -1; + } + + var_08 = var_01[var_01.size - 1].next_node; + var_08.midpoint = var_08.var_3E8C["left"] + var_08.var_3E8C["right"] * 0.5; + foreach(var_08 in var_01) + { + var_08.var_3E81 = distance(var_08.midpoint,var_08.next_node.midpoint); + var_08.dist_to_next_targs["left"] = distance(var_08.var_3E8C["left"],var_08.next_node.var_3E8C["left"]); + var_08.dist_to_next_targs["right"] = distance(var_08.var_3E8C["right"],var_08.next_node.var_3E8C["right"]); + } + + return var_01; +} + +//Function Number: 14 +func_3E8E(param_00) +{ + var_01 = self; + foreach(var_03 in param_00) + { + var_03.origin = var_03.origin + (0,0,20); + var_04 = physicstrace(var_03.origin,var_03.origin + (0,0,-100)); + var_03.origin = var_04; + } +} + +//Function Number: 15 +func_3E8F(param_00) +{ + var_01 = common_scripts\utility::getstructarray("moto_line","targetname"); + foreach(var_03 in var_01) + { + var_03.origin = (var_03.origin[0],var_03.origin[1],0); + var_04 = common_scripts\utility::getstruct(var_03.target,"targetname"); + var_03.var_3E85 = var_04; + var_04.var_3E85 = var_03; + } + + foreach(var_03 in var_01) + { + } + + var_08 = self; + foreach(var_0A in param_00) + { + foreach(var_03 in var_01) + { + func_3E91(var_0A,var_03); + } + } + + var_0E = getentarray("moto_collision","targetname"); + foreach(var_10 in var_0E) + { + var_11 = maps\_utility::get_array_of_closest(var_10.origin,param_00,undefined,2); + foreach(var_0A in var_11) + { + var_0A.col_radiuses[var_0A.col_radiuses.size] = var_10; + } + } +} + +//Function Number: 16 +get_offset_percent(param_00,param_01,param_02,param_03) +{ + var_04 = distance(param_00.midpoint,param_01.midpoint); + var_05 = 1 - param_02 / var_04; + var_06 = "left"; + if(param_03 > 0) + { + var_06 = "right"; + } + + var_07 = param_00.var_3E8C[var_06]; + var_08 = param_01.var_3E8C[var_06]; + var_09 = var_07 * var_05 + var_08 * 1 - var_05; + var_0A = param_00.midpoint; + var_0B = param_01.midpoint; + var_0C = var_0A * var_05 + var_0B * 1 - var_05; + var_0D = distance(var_0C,var_09); + return param_03 / var_0D; +} + +//Function Number: 17 +func_3E91(param_00,param_01) +{ + if(param_00 == param_00.next_node) + { + return; + } + + var_02 = param_00.road_width; + if(param_00.var_3E81 > var_02) + { + var_02 = param_00.var_3E81; + } + + if(distance(param_01.origin,param_00.next_node.midpoint) > var_02 * 1.5) + { + return; + } + + var_03 = common_scripts\utility::getstruct(param_01.target,"targetname"); + var_04 = func_3E96(param_01.origin,param_00.midpoint,param_00.next_node.midpoint); + var_05 = var_04["progress"]; + var_06 = func_3E96(var_03.origin,param_00.midpoint,param_00.next_node.midpoint); + var_07 = var_06["progress"]; + if(var_05 < 0 || var_07 < 0) + { + return; + } + + if(var_05 > param_00.var_3E81 && var_07 > param_00.var_3E81) + { + return; + } + + param_01.claimed = 1; + var_03.claimed = 1; + param_01.var_3A46 = var_05; + param_01.offset = var_04["offset"]; + param_01.var_3E92 = get_offset_percent(param_00,param_00.next_node,var_05,var_04["offset"]); + var_03.var_3A46 = var_07; + var_03.offset = var_06["offset"]; + var_03.var_3E92 = get_offset_percent(param_00,param_00.next_node,var_07,var_06["offset"]); + param_01.origin = (param_01.origin[0],param_01.origin[1],param_00.midpoint[2] + 40); + var_03.origin = (var_03.origin[0],var_03.origin[1],param_00.midpoint[2] + 40); + if(var_05 < var_07) + { + func_3E93(param_00,param_01,var_03); + param_00.var_3E84[param_00.var_3E84.size] = param_01; + return; + } + + func_3E93(param_00,var_03,param_01); + param_00.var_3E84[param_00.var_3E84.size] = var_03; +} + +//Function Number: 18 +func_3E93(param_00,param_01,param_02) +{ + var_03 = param_02.var_3A46 + 500; + var_04 = param_01.var_3A46 - level.var_3E94; + var_05 = undefined; + var_06 = undefined; + var_07 = undefined; + var_08 = undefined; + if(param_02.offset > param_01.offset) + { + var_05 = param_02.offset; + var_06 = param_01.offset; + var_07 = param_02.var_3E92; + var_08 = param_01.var_3E92; + } + else + { + var_05 = param_01.offset; + var_06 = param_02.offset; + var_07 = param_01.var_3E92; + var_08 = param_02.var_3E92; + } + + var_09 = param_00; + var_0A = var_03; + var_0B = var_04; + for(;;) + { + func_3E95(param_00,var_03,var_04,var_05,var_06,var_07,var_08); + if(!isdefined(param_00.next_node)) + { + break; + } + + if(param_00.var_3E81 >= var_03) + { + break; + } + + var_03 = var_03 - param_00.var_3E81; + param_00 = param_00.next_node; + var_04 = 0; + } + + param_00 = var_09; + var_03 = var_0A; + var_04 = var_0B; + for(;;) + { + if(!isdefined(param_00.var_3E8A)) + { + break; + } + + if(var_04 > 0) + { + break; + } + + param_00 = param_00.var_3E8A; + var_03 = param_00.var_3E81; + var_04 = param_00.var_3E81 + var_04; + func_3E95(param_00,var_03,var_04,var_05,var_06,var_07,var_08); + } +} + +//Function Number: 19 +func_3E95(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + var_07 = []; + if(var_41["max"] > param_01.var_3E81) + { + } + + if(var_41["min"] < 0) + { + } + + param_01.col_volumes[param_01.col_volumes.size] = var_41; +} + +//Function Number: 20 +func_3E96(param_00,param_01,param_02) +{ + param_01 = (param_01[0],param_01[1],0); + param_02 = (param_02[0],param_02[1],0); + param_00 = (param_00[0],param_00[1],0); + var_03 = []; + var_04 = vectortoangles(param_02 - param_01); + var_05 = anglestoforward(var_04); + var_06 = param_01; + var_07 = vectornormalize(var_06 - param_00); + var_08 = vectordot(var_05,var_07); + var_09 = vectornormalize(param_02 - param_01); + var_0A = param_00 - param_01; + var_0B = vectordot(var_0A,var_09); + var_0C = param_01 + var_05 * var_0B; + var_03["progress"] = var_0B; + var_03["offset"] = distance(var_0C,param_00); + var_0D = anglestoright(var_04); + var_07 = vectornormalize(var_0C - param_00); + var_08 = vectordot(var_0D,var_07); + var_03["dot"] = var_08; + if(var_08 > 0) + { + var_03["offset"] = var_03["offset"] * -1; + } + + return var_03; +} + +//Function Number: 21 +func_3E97(param_00) +{ + foreach(var_02 in self.var_3E98.col_radiuses) + { + var_03 = (self.origin[0],self.origin[1],0); + if(distance((var_02.origin[0],var_02.origin[1],0),var_03) < var_02.radius) + { + return 1; + } + } + + if(param_00.health >= 100) + { + return 0; + } + + level.bike_score++; + return 1; +} + +//Function Number: 22 +vehicle_line(param_00) +{ + self endon("death"); + param_00 endon("death"); + wait 0.05; +} + +//Function Number: 23 +spawner_random_team() +{ + waittillframeend; + if(!isdefined(self.riders)) + { + return; + } + + var_00 = "axis"; + if(common_scripts\utility::cointoss()) + { + var_00 = "allies"; + } + + foreach(var_02 in self.riders) + { + var_02.team = var_00; + } +} + +//Function Number: 24 +get_spawn_position(param_00,param_01) +{ + var_02 = func_3EBF(param_00,param_01); + var_03 = var_02.var_3A46; + var_04 = var_02.var_3E98; + var_05 = var_04.road_width * 0.5; + var_06 = undefined; + if(isdefined(level.player.offset)) + { + var_07 = 500; + if(common_scripts\utility::cointoss()) + { + var_07 = var_07 * -1; + } + + var_06 = level.player.offset + var_07; + } + else + { + var_06 = randomfloatrange(var_05 * -1,var_05); + } + + var_08 = get_obstacle_dodge_amount(var_04,var_03,var_06); + if(isdefined(var_08["dodge"])) + { + var_06 = var_08["dodge"]; + } + + var_09 = get_position_from_spline_unlimited(var_04,var_03,var_06); + var_0A = []; + return var_41; +} + +//Function Number: 25 +debug_enemy_vehicles() +{ +} + +//Function Number: 26 +func_3E9D() +{ + self endon("death"); + level endon("stop_debugging_enemy_vehicles"); + wait 0.05; +} + +//Function Number: 27 +func_3E9E() +{ + if(level.var_267F.size >= level.var_3E72) + { + return; + } + + var_00 = func_3ED5(); + var_01 = func_3ED4(); + var_02 = "forward"; + var_03 = get_spawn_position(var_00,var_01 - 1000 - level.var_3E9F); + var_04 = var_03["spawn_pos"]; + var_05 = maps\_utility::within_fov(level.player.origin,level.player.angles,var_04,0); + if(var_05) + { + var_03 = get_spawn_position(var_00,var_01 + 1000); + var_04 = var_03["spawn_pos"]; + var_02 = "backward"; + var_05 = maps\_utility::within_fov(level.player.origin,level.player.angles,var_04,0); + if(var_05) + { + return; + } + } + + var_04 = maps\_utility::drop_to_ground(var_04); + var_06 = getent("snowmobile_spawner","targetname"); + var_07 = var_03["targ"]; + var_06.origin = var_04; + var_06.angles = vectortoangles(var_07.next_node.midpoint - var_07.midpoint); + var_08 = var_06 maps\_vehicle::get_vehicle_ai_spawners(); + foreach(var_0A in var_08) + { + var_0A.origin = var_06.origin; + } + + var_0C = maps\_vehicle::vehicle_spawn(var_06); + var_0C.var_3E92 = var_03["offset"]; + var_0C vehphys_setspeed(90); + var_0C thread crash_detection(); + var_0C.var_3EA0 = gettime() - 3000; + waittillframeend; + if(!isalive(var_0C)) + { + return; + } + + var_07 bike_drives_path(var_0C); +} + +//Function Number: 28 +crash_detection() +{ + self waittill("veh_collision",var_00,var_01); + func_3EA3("collision!"); +} + +//Function Number: 29 +func_3EA2(param_00) +{ + self waittill("death"); + if(isdefined(param_00)) + { + param_00 func_3EA3("driver died!"); + } +} + +//Function Number: 30 +func_3EA3(param_00) +{ + self.var_3EA3 = 1; +} + +//Function Number: 31 +func_3EA4(param_00) +{ + var_01 = []; + foreach(var_03 in level.var_267F) + { + if(!isalive(var_03)) + { + continue; + } + + if(var_03.var_3EA3) + { + continue; + } + + var_01[var_01.size] = var_03; + } + + level.var_267F = var_01; + if(isalive(param_00) && !param_00.var_3EA3) + { + var_05 = 0; + foreach(var_03 in level.var_267F) + { + if(var_03 == param_00) + { + var_05 = 1; + continue; + } + } + + if(!var_05) + { + level.var_267F[level.var_267F.size] = param_00; + } + } + + var_08 = 0; + foreach(var_03 in level.var_267F) + { + var_03.var_3EA5 = var_08; + var_08 = var_08 + 75; + } +} + +//Function Number: 32 +bike_drives_path(param_00) +{ + if(!isdefined(param_00.var_3EA0)) + { + param_00.var_3EA0 = gettime(); + } + + param_00.var_3EA3 = 0; + func_3EA4(param_00); + if(!isdefined(param_00.var_3EA7)) + { + param_00.var_3EA7 = 250; + } + + param_00.var_2078 = 0; + var_01 = randomfloatrange(0,1); + if(!isdefined(param_00.var_3E92)) + { + param_00.var_3E92 = var_01 * 2 - 1; + } + + var_02 = self; + var_03 = spawnstruct(); + var_03.origin = self.midpoint; + var_03.var_3A46 = 0; + var_03.var_3EA8 = 0; + var_03.speed = 100; + var_03 maps\_utility::ent_flag_init("biker_reaches_path_end"); + param_00 notify("enable_spline_path"); + if(!param_00.riders.size) + { + param_00 vehphys_crash(); + return; + } + + common_scripts\utility::array_thread(param_00.riders,::func_3EA2,param_00); + var_03.bike = param_00; + param_00.health = 100; + var_04 = 0; + var_03 thread func_3EC3(param_00); + param_00.progress_targ = var_02; + param_00.offset_modifier = 0; + param_00.var_3EAC = 0; + param_00.var_33F2 = "forward"; + param_00.var_3EAD = param_00.origin; + for(;;) + { + if(!isalive(param_00)) + { + break; + } + + set_bike_position(var_03); + if(!isalive(param_00)) + { + break; + } + + if(abs(param_00.var_3EAE) > 6000 && gettime() > param_00.var_3EA0 + 4000) + { + param_00 func_3EA3("left behind!"); + } + + waittillframeend; + if(param_00.var_3EA3) + { + if(isdefined(param_00.var_3EAF)) + { + continue; + } + + param_00 vehphys_crash(); + foreach(var_06 in param_00.riders) + { + if(isalive(var_06)) + { + var_06 kill(); + } + } + + wait 5; + if(isdefined(param_00)) + { + param_00 delete(); + } + + func_3EA4(); + return; + } + + if(var_06 maps\_utility::ent_flag("biker_reaches_path_end") || common_scripts\utility::flag("race_complete")) + { + break; + } + } + + func_3EA4(); + var_06 notify("stop_bike"); + level notify("biker_dies"); + if(var_03.var_3EA3 && !common_scripts\utility::flag("race_complete")) + { + wait 5; + } + + var_06 maps\_utility::ent_flag_clear("biker_reaches_path_end"); +} + +//Function Number: 33 +get_obstacle_dodge_amount(param_00,param_01,param_02) +{ + var_03["near_obstacle"] = 0; + foreach(var_05 in param_00.col_volumes) + { + if(param_01 < var_05["min"]) + { + continue; + } + + if(param_01 > var_05["max"]) + { + continue; + } + + var_03["near_obstacle"] = 1; + if(param_02 < var_05["left_offset"]) + { + continue; + } + + if(param_02 > var_05["right_offset"]) + { + continue; + } + + var_06 = param_00.midpoint + param_00.next_node.midpoint * 0.5; + if(param_02 > var_05["mid_offset"]) + { + var_03["dodge"] = var_05["right_offset"]; + } + else + { + var_03["dodge"] = var_05["left_offset"]; + } + + break; + } + + return var_03; +} + +//Function Number: 34 +func_3EB1() +{ + for(;;) + { + self waittill("trigger",var_00); + if(!isdefined(var_00.script_noteworthy)) + { + continue; + } + + if(var_00.script_noteworthy != "sweepable") + { + continue; + } + + var_01 = randomfloatrange(0,1); + var_00 thread maps\_utility::func_FEC("enable_spline_path",var_01); + } +} + +//Function Number: 35 +func_3EB2() +{ + for(;;) + { + if(isdefined(level.player.vehicle)) + { + var_00 = self vehicle_getspeed(); + var_01 = level.player.vehicle vehicle_getspeed(); + level.difference = var_00 - var_01; + } + + wait 0.05; + } +} + +//Function Number: 36 +func_3EB4() +{ +} + +//Function Number: 37 +func_3EB5() +{ + thread func_3EB4(); + self.var_3E98 = maps\_vehicle::get_my_spline_node(self.origin); + self.var_3EB6 = 1; + self endon("stop_modulating_speed"); + var_00 = undefined; + for(;;) + { + wait 0.05; + var_01 = self.var_3E98; + if(var_01 == var_01.next_node) + { + return; + } + + var_02 = func_3E96(self.origin,self.var_3E98.midpoint,self.var_3E98.next_node.midpoint); + var_03 = var_02["progress"]; + var_03 = var_03 + level.var_3E9F; + var_04 = func_3EBF(self.var_3E98,var_03); + var_03 = var_04.var_3A46; + self.var_3E98 = var_04.var_3E98; + self.var_3A46 = var_03; + var_05 = func_3ED5(); + var_06 = func_3ED4(); + var_07 = func_3EAE(self.var_3E98,self.var_3A46,var_05,var_06); + level.var_3EAE = var_07; + if(!isdefined(level.player.vehicle)) + { + self vehicle_setspeed(65,1,1); + continue; + } + + if(abs(var_07 > 3500)) + { + var_08 = 65; + var_07 = var_07 * -1; + var_07 = var_07 + 750; + var_08 = level.player.vehicle.veh_speed + var_07 * 0.05; + var_09 = level.player.vehicle.veh_speed; + if(var_09 < 100) + { + var_09 = 100; + } + + if(var_08 > var_09) + { + var_08 = var_09; + } + else if(var_08 < self.var_3EB6) + { + var_08 = self.var_3EB6; + } + + level.desired_speed = var_08; + self vehicle_setspeed(var_08,90,20); + continue; + } + + price_match_player_speed(10,10); + } +} + +//Function Number: 38 +price_match_player_speed(param_00,param_01) +{ + var_02 = self.angles; + var_02 = (0,var_02[1],0); + var_03 = anglestoforward(var_02); + var_04 = func_3E96(level.player.vehicle.origin,self.origin + var_03 * 1,self.origin - var_03 * 1); + var_05 = var_04["progress"]; + if(var_05 > 4000) + { + self vehicle_setspeed(0,90,20); + return; + } + + var_06 = maps\_utility::func_222E(self.origin,self.angles,level.player.origin); + var_07 = 1; + if(var_05 > 0) + { + var_07 = 1; + } + else + { + if(var_05 > -500) + { + var_07 = 1.25; + } + + if(var_07 > 0.95 && var_06 > 0.97) + { + var_07 = 0.95; + } + } + + var_08 = 70 * var_07; + if(var_08 < self.var_3EB6) + { + var_08 = self.var_3EB6; + } + + if(var_08 < 25) + { + var_08 = 25; + } + + level.price_desired_speed = var_08; + self vehicle_setspeed(var_08,param_00,param_01); +} + +//Function Number: 39 +func_3EB9(param_00,param_01) +{ + var_02 = self.angles; + var_02 = (0,var_02[1],0); + var_03 = anglestoforward(var_02); + var_04 = func_3E96(level.player.vehicle.origin,self.origin + var_03 * 1,self.origin - var_03 * 1); + var_05 = var_04["progress"]; + if(var_05 > 4000) + { + self vehicle_setspeed(0,90,20); + return; + } + + if(var_05 < level.var_3E71 && gettime() > self.var_3EA0 + 4000) + { + func_3EA3("low progress!"); + } + + var_05 = var_05 - 750; + var_05 = var_05 + self.var_3EA5; + var_06 = 1; + if(var_05 > 150) + { + var_06 = 0.6; + } + else if(var_05 > 100) + { + var_06 = 1; + } + else if(var_05 < -100) + { + var_06 = 1.5; + } + + if(isdefined(level.player.offset)) + { + if(var_05 > 250) + { + } + } + + var_07 = level.player.vehicle.veh_speed * var_06; + if(var_07 < 25) + { + var_07 = 25; + } + + self vehicle_setspeed(var_07,param_00,param_01); +} + +//Function Number: 40 +track_player_progress(param_00) +{ + self notify("track_player_progress"); + self endon("track_player_progress"); + self.var_3E98 = maps\_vehicle::get_my_spline_node(param_00); + self.var_3A46 = 0; + var_01 = getent("player_sweep_trigger","targetname"); + var_02 = isdefined(var_01); + if(var_02) + { + var_01 thread func_3EB1(); + } + + for(;;) + { + if(self.var_3E98 == self.var_3E98.next_node) + { + return; + } + + var_03 = func_3E96(self.origin,self.var_3E98.midpoint,self.var_3E98.next_node.midpoint); + var_04 = var_03["progress"]; + var_04 = var_04 + level.var_3E9F; + var_05 = func_3EBF(self.var_3E98,var_04); + var_04 = var_05.var_3A46; + self.var_3E98 = var_05.var_3E98; + self.var_3A46 = var_04; + self.offset = var_03["offset"]; + if(var_02) + { + var_06 = get_position_from_spline_unlimited(self.var_3E98,var_04 + 2000,0); + var_06 = (var_06[0],var_06[1],self.origin[2] - 500); + var_01.origin = var_06; + var_07 = get_position_from_spline_unlimited(self.var_3E98,var_04 + 3000,0); + var_08 = vectortoangles(var_01.origin - var_07); + var_01.angles = (0,var_08[1],0); + } + + if(common_scripts\utility::flag("ai_snowmobiles_ram_player")) + { + level.closest_enemy_snowmobile_to_player = maps\_utility::getclosest(self.origin,level.var_267F); + } + else + { + level.closest_enemy_snowmobile_to_player = undefined; + } + + wait 0.05; + } +} + +//Function Number: 41 +func_3EAE(param_00,param_01,param_02,param_03) +{ + while(param_00.index > param_02.index) + { + param_00 = param_00.prev_node; + param_01 = param_01 + param_00.var_3E81; + } + + while(param_02.index > param_00.index) + { + param_02 = param_02.prev_node; + param_03 = param_03 + param_02.var_3E81; + } + + return param_01 - param_03; +} + +//Function Number: 42 +set_bike_position(param_00) +{ + var_01 = param_00.bike; + var_02 = 0.1; + var_03 = 0; + var_04 = 0; + var_05 = var_01.progress_targ; + if(var_05 == var_05.next_node) + { + var_01 delete(); + return; + } + + var_06 = func_3E96(var_01.origin,var_05.midpoint,var_05.next_node.midpoint); + var_07 = func_3E96(var_01.origin,var_05.next_node.midpoint,var_05.next_node.next_node.midpoint); + if(var_07["progress"] > 0 && var_07["progress"] < var_05.next_node.var_3E81) + { + var_06 = var_07; + var_05 = var_05.next_node; + } + + var_04 = var_06["offset"]; + var_08 = 0; + var_03 = var_06["progress"]; + var_01.var_3A46 = var_03; + var_09 = get_obstacle_dodge_amount(var_05,var_03,var_04); + var_0A = var_09["near_obstacle"]; + var_0B = func_3EAE(var_05,var_03,func_3ED5(),func_3ED4()); + var_01.var_3EAE = var_0B; + if(var_01.var_33F2 == "forward") + { + var_03 = var_03 + level.var_3E9F; + } + else + { + var_03 = var_03 - level.var_3E9F; + if(var_0B < 500) + { + var_01.var_33F2 = "forward"; + } + } + + var_0C = 60; + var_0D = 90; + var_0E = 100; + var_0F = 200; + if(var_0B > var_0F) + { + var_10 = var_0C; + } + else if(var_0C < var_0F) + { + var_10 = var_0E; + } + else + { + var_11 = var_10 - var_0F; + var_12 = var_0D - var_0C; + var_10 = var_0B - var_0E; + var_10 = var_11 - var_10; + var_10 = var_10 * var_12 / var_11; + var_10 = var_10 + var_0C; + } + + if(var_10 > 0) + { + if(var_01 vehicle_getspeed() < 2) + { + var_01.var_3EAC++; + if(var_01.var_3EAC > 10) + { + var_01 func_3EA3("move fail!"); + return; + } + } + else + { + var_01.var_3EAC = 0; + } + } + else + { + var_01.var_3EAC = 0; + } + + var_13 = randomfloatrange(0,100); + var_13 = var_13 * 0.001; + var_14 = 0; + var_15 = var_05.road_width; + param_00 = func_3EBF(var_05,var_03); + var_03 = param_00.var_3A46; + var_05 = param_00.var_3E98; + var_16 = var_05.midpoint + var_05.next_node.midpoint * 0.5; + var_04 = var_04 * var_05.road_width / var_15; + var_09 = get_obstacle_dodge_amount(var_05,var_03,var_04); + if(isdefined(var_09["dodge"])) + { + var_04 = var_09["dodge"]; + } + else if(isdefined(var_01.var_3EBD)) + { + var_04 = var_01.var_3EBD; + } + + var_17 = 0.95; + var_18 = var_05.road_width * 0.5; + var_18 = var_18 - 50; + if(var_04 > var_18) + { + var_04 = var_18; + } + else if(var_04 < -1 * var_18) + { + var_04 = -1 * var_18; + } + + if(var_05 != var_05.next_node) + { + var_19 = var_01 func_3EBE(var_05,var_03,var_04,var_01.origin[2]); + var_1A = maps\_utility::func_222E(var_01.origin,var_01.angles,var_19); + if(var_1A < 0.97) + { + var_10 = 50; + } + else if(var_1A < 0.96) + { + var_10 = 25; + } + else if(var_1A < 0.95) + { + var_10 = 15; + } + + var_01 vehicledriveto(var_19,var_10); + if(!isdefined(level.player.vehicle)) + { + var_01 vehicle_setspeed(65,1,1); + } + else + { + var_01.veh_topspeed = level.player.vehicle.veh_topspeed * 1.3; + var_01 func_3EB9(45,30); + } + } + + var_01.progress_targ = var_05; + var_01.offset = var_04; + wait var_02; +} + +//Function Number: 43 +func_3EBE(param_00,param_01,param_02,param_03) +{ + var_04 = get_position_from_spline(param_00,param_01,param_02); + var_04 = maps\_utility::func_2329(var_04,param_03); + return physicstrace(var_04 + (0,0,200),var_04 + (0,0,-200)); +} + +//Function Number: 44 +func_3EBF(param_00,param_01) +{ + var_02 = spawnstruct(); + for(;;) + { + if(param_00 == param_00.next_node) + { + break; + } + + if(param_01 > param_00.var_3E81) + { + param_01 = param_01 - param_00.var_3E81; + param_00 = param_00.next_node; + continue; + } + + if(param_01 < 0) + { + param_01 = param_01 + param_00.var_3E81; + param_00 = param_00.prev_node; + continue; + } + + break; + } + + var_02.var_3E98 = param_00; + var_02.var_3A46 = param_01; + return var_02; +} + +//Function Number: 45 +get_position_from_spline_unlimited(param_00,param_01,param_02) +{ + for(;;) + { + if(param_00 == param_00.next_node) + { + return param_00.midpoint; + } + + if(param_01 > param_00.var_3E81) + { + param_01 = param_01 - param_00.var_3E81; + param_00 = param_00.next_node; + continue; + } + + break; + } + + return get_position_from_spline(param_00,param_01,param_02); +} + +//Function Number: 46 +get_position_from_spline(param_00,param_01,param_02) +{ + var_03 = vectortoangles(param_00.next_node.midpoint - param_00.midpoint); + var_04 = anglestoforward(var_03); + var_05 = anglestoright(var_03); + return param_00.midpoint + var_04 * param_01 + var_05 * param_02; +} + +//Function Number: 47 +get_position_from_progress(param_00,param_01) +{ + var_02 = 1 - param_01 / param_00.var_3E81; + return param_00.midpoint * var_02 + param_00.next_node.midpoint * 1 - var_02; +} + +//Function Number: 48 +func_3EC3(param_00) +{ + self endon("stop_bike"); + for(;;) + { + self.var_3EA3 = 0; + if(self.var_3EA3) + { + break; + } + + wait 0.05; + } +} + +//Function Number: 49 +func_3EC4() +{ + for(;;) + { + waittillframeend; + wait 0.05; + } +} + +//Function Number: 50 +track_progress() +{ + self endon("stop_bike"); + for(;;) + { + var_00 = (self.origin[0],self.origin[1],0); + var_01 = (self.var_3E98.midpoint[0],self.var_3E98.midpoint[1],0); + var_02 = (self.var_3EC6.midpoint[0],self.var_3EC6.midpoint[1],0); + var_03 = vectornormalize(var_01 - var_00); + var_04 = anglestoforward(self.angles); + var_05 = vectordot(var_04,var_03); + var_06 = vectornormalize(var_02 - var_01); + var_07 = var_00 - var_01; + self.var_3A46 = vectordot(var_07,var_06); + wait 0.05; + } +} + +//Function Number: 51 +func_3EC7(param_00) +{ + self.right_offset = param_00.road_width * 0.5; + self.var_3EC9 = self.right_offset - 100; +} + +//Function Number: 52 +bike_avoids_obstacles(param_00) +{ + self endon("stop_bike"); + self endon("end_path"); + self.var_3ECB = 0; + thread func_3ECC(); + bike_turns(); +} + +//Function Number: 53 +func_3ECC() +{ + self endon("stop_bike"); + self endon("end_path"); + for(;;) + { + if(self.var_3E98.col_volumes.size == 0 && self.dodge_dir == 0) + { + if(common_scripts\utility::cointoss()) + { + self.var_3ECB++; + } + else + { + self.var_3ECB--; + } + + if(self.var_3ECB > 1) + { + self.var_3ECB = self.var_3ECB - 3; + } + else if(self.var_3ECB < -1) + { + self.var_3ECB = self.var_3ECB + 3; + } + } + + wait randomfloatrange(1,3); + } +} + +//Function Number: 54 +should_stabilize() +{ + if(self.var_3ECB == 0) + { + return 1; + } + + if(self.var_3ECB == 1 && self.offset > self.var_3EC9) + { + return 1; + } + + if(self.var_3ECB == -1 && self.offset < self.var_3EC9 * -1) + { + return 1; + } + + return 0; +} + +//Function Number: 55 +bike_turns() +{ + self.var_3EA8 = 0; + var_00 = 12; + var_01 = 3; + var_02 = 130; + for(;;) + { + if(should_stabilize()) + { + if(self.tilt > 0) + { + self.var_3EA8 = self.var_3EA8 - var_01; + } + else if(self.tilt < 0) + { + self.var_3EA8 = self.var_3EA8 + var_01; + } + } + else if(self.var_3ECB == 1) + { + self.var_3EA8 = self.var_3EA8 + var_01; + } + else if(self.var_3ECB == -1) + { + self.var_3EA8 = self.var_3EA8 - var_01; + } + + if(self.var_3EA8 > var_00) + { + self.var_3EA8 = var_00; + } + else if(self.var_3EA8 < -1 * var_00) + { + self.var_3EA8 = -1 * var_00; + } + + self.tilt = self.tilt + self.var_3EA8; + if(self.tilt > var_02) + { + self.tilt = var_02; + self.var_3EA8 = 1; + } + else if(self.tilt < var_02 * -1) + { + self.tilt = var_02 * -1; + self.var_3EA8 = -1; + } + + wait 0.05; + } +} + +//Function Number: 56 +func_3ED1(param_00,param_01) +{ + if(self.tilt > 0) + { + self.tilt = self.tilt - param_01; + } + else + { + self.tilt = self.tilt + param_01; + } + + if(abs(self.tilt) < param_01) + { + self.tilt = param_01; + } +} + +//Function Number: 57 +func_3ED2(param_00,param_01) +{ + if(self.offset >= self.var_3EC9) + { + self.var_3ECB = 0; + return; + } + + self.tilt = self.tilt + param_01; + if(self.tilt >= param_00) + { + self.tilt = param_00; + } +} + +//Function Number: 58 +func_3ED3(param_00,param_01) +{ + if(self.offset < self.var_3EC9 * -1) + { + self.var_3ECB = 0; + return; + } + + self.tilt = self.tilt - param_01; + if(self.tilt < param_00 * -1) + { + self.tilt = param_00 * -1; + } +} + +//Function Number: 59 +func_3ED4() +{ + if(isdefined(level.player.var_3A46)) + { + return level.player.var_3A46; + } + + return 0; +} + +//Function Number: 60 +func_3ED5() +{ + if(isdefined(level.player.var_3E98)) + { + return level.player.var_3E98; + } + + return level.var_267E[0]; +} + +//Function Number: 61 +debug_bike_line() +{ + var_00 = (0.2,0.2,1); + if(isdefined(level.player.vehicle) && self.veh_speed > level.player.vehicle.veh_speed) + { + var_00 = (1,0.2,0.2); + } + + self.var_3EAD = self.origin; +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_vehicledrive.gsc b/MW3/Xbox/SP/maps/_vehicledrive.gsc new file mode 100644 index 0000000..da1a8a3 --- /dev/null +++ b/MW3/Xbox/SP/maps/_vehicledrive.gsc @@ -0,0 +1,403 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_vehicledrive.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 14 + * Decompile Time: 240 ms + * Timestamp: 10/27/2023 2:34:47 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + setdvarifuninitialized("debug_vehiclegod","off"); + setdvarifuninitialized("debug_vehicleplayerhealth","off"); + setdvarifuninitialized("player_vehicle_dismountable","off"); + precacheshader("tank_shell"); + level.var_3ED7 = 0; +} + +//Function Number: 2 +func_3ED8(param_00) +{ + if(!isdefined(param_00)) + { + param_00 = 0; + } + else if(param_00) + { + if(getdvar("player_vehicle_dismountable") == "off") + { + self makeunusable(); + } + } + + self endon("death"); + self endon("stop_vehicle_wait"); + while(self.health > 0) + { + if(!param_00) + { + self waittill("trigger"); + } + else + { + param_00 = 0; + self useby(level.player); + } + + var_01 = self getvehicleowner(); + if(isdefined(var_01) && isplayer(var_01)) + { + thread vehicle_enter(); + } + else + { + thread func_3ED9(); + } + + if(param_00) + { + break; + } + + wait 0.05; + } +} + +//Function Number: 3 +func_3ED9() +{ + level.var_3ED7 = 0; + level.var_23D1 = level.var_25D3; + level notify("player exited vehicle"); + if(isdefined(level.player.oldthreatbias)) + { + level.player.threatbias = level.player.oldthreatbias; + level.player.oldthreatbias = undefined; + } + + if(isdefined(level.var_3EDB)) + { + level.var_3EDB destroy(); + } + + if(isdefined(level.vehiclehud2)) + { + level.vehiclehud2 destroy(); + } + + if(isdefined(level.var_3EDD)) + { + level.var_3EDD destroy(); + } +} + +//Function Number: 4 +vehicle_enter() +{ + level.var_3ED7 = 1; + level.var_23D1 = self; + thread vehicle_ridehandle(); +} + +//Function Number: 5 +func_3EDF() +{ + func_3EE1(); +} + +//Function Number: 6 +setup_vehicle_other() +{ + func_3EE1(); +} + +//Function Number: 7 +func_3EE1() +{ + var_00 = maps\_utility::getdifficulty(); + if(var_00 == "easy") + { + self.health = 3000; + } + else if(var_00 == "medium") + { + self.health = 2500; + } + else if(var_00 == "hard") + { + self.health = 2000; + } + else if(var_00 == "fu") + { + self.health = 1300; + } + else + { + self.health = 2000; + } + + if(isdefined(self.var_1203)) + { + self.health = self.health + self.var_1203; + self.var_2523 = self.health; + self.maxhealth = self.health; + } +} + +//Function Number: 8 +func_3EE2() +{ + level endon("player exited vehicle"); + self endon("death"); + var_00 = level.player.health; + while(isalive(level.player)) + { + level.player waittill("damage",var_01); + if(self.health <= 0) + { + level.player kill((0,0,0)); + } + + level.player.health = level.player.health + int(var_01 * 0.2); + } +} + +//Function Number: 9 +vehicle_ridehandle() +{ + level endon("player exited vehicle"); + self endon("no_regen_health"); + self endon("death"); + thread func_3EE6(); + self.var_3EE4 = self.health; + switch(maps\_utility::getdifficulty()) + { + case "gimp": + var_00 = 100; + var_01 = 2700; + break; + + case "easy": + var_00 = 75; + var_01 = 2700; + break; + + case "medium": + var_00 = 50; + var_01 = 2700; + break; + + case "hard": + var_00 = 30; + var_01 = 3700; + break; + + case "fu": + var_00 = 20; + var_01 = 4700; + break; + + default: + var_00 = 50; + var_01 = 2700; + break; + } + + if(self.vehicletype == "crusader_player") + { + self setmodel("vehicle_crusader2_viewmodel"); + } + + var_02 = gettime(); + if(getdvar("debug_vehiclegod") != "off") + { + for(;;) + { + self waittill("damage"); + self.health = self.maxhealth; + } + } + + thread func_3EE7(); + var_03 = gettime(); + for(;;) + { + if(self.var_3EE5) + { + if(getdvar("debug_vehicleplayerhealth") != "off") + { + iprintlnbold("playervehicles health: ",self.health - self.var_1203); + } + + self.var_3EE5 = 0; + var_02 = gettime() + var_01; + } + + var_04 = gettime(); + if(self.health < self.var_3EE4 && var_04 > var_02 && var_04 > var_03) + { + if(self.health + var_00 > self.var_3EE4) + { + self.health = self.var_3EE4; + } + else + { + self.health = self.health + var_00; + } + + var_03 = gettime() + 250; + if(getdvar("debug_vehicleplayerhealth") != "off") + { + iprintlnbold("playervehicles health: ",self.health - self.var_1203); + } + } + + wait 0.05; + } +} + +//Function Number: 10 +func_3EE6() +{ + level endon("player exited vehicle"); + self waittill("death"); + level.player enablehealthshield(0); + for(;;) + { + level.player kill(); + wait 0.1; + } + + wait 0.5; + level.player enablehealthshield(1); +} + +//Function Number: 11 +func_3EE7() +{ + self.var_3EE5 = 0; + self endon("death"); + for(;;) + { + self waittill("damage",var_00); + self.var_3EE5 = 1; + } +} + +//Function Number: 12 +vehicle_reloadsound() +{ + for(;;) + { + self waittill("turret_fire"); + wait 0.5; + self playsound("tank_reload"); + } +} + +//Function Number: 13 +func_3EE9() +{ + if(getdvar("player_vehicle_dismountable") != "off") + { + return; + } + + level endon("player exited vehicle"); + level.player endon("death"); + self endon("death"); + if(isdefined(level.var_3EDD)) + { + level.var_3EDD destroy(); + } + + level.var_3EDD = newhudelem(); + level.var_3EDD.x = -32; + level.var_3EDD.y = -64; + level.var_3EDD.alignx = "center"; + level.var_3EDD.aligny = "middle"; + level.var_3EDD.horzalign = "right"; + level.var_3EDD.vertalign = "bottom"; + level.var_3EDD setshader("tank_shell",64,64); + var_00 = 1; + level.var_3EDD.alpha = var_00; + for(;;) + { + if(var_00) + { + if(!self isturretready()) + { + var_00 = 0; + level.var_3EDD.alpha = var_00; + } + } + else if(self isturretready()) + { + var_00 = 1; + level.var_3EDD.alpha = var_00; + } + + wait 0.05; + } +} + +//Function Number: 14 +func_1EB6() +{ + self endon("death"); + var_00 = newhudelem(); + var_00.x = 0; + var_00.y = 0; + var_00 setshader("splatter_alt_sp",640,480); + var_00.alignx = "left"; + var_00.aligny = "top"; + var_00.horzalign = "fullscreen"; + var_00.vertalign = "fullscreen"; + var_00.alpha = 0; + var_01 = self.health - self.var_1203; + var_02 = 0; + var_03 = 0.3; + for(;;) + { + var_04 = self.health - self.var_1203 / var_01; + var_05 = 0.5 + 0.5 * var_04; + if(var_04 < 0.75 || var_02) + { + if(!var_02) + { + var_02 = 1; + } + + var_06 = 1 - var_04 + var_03; + var_00 fadeovertime(0.05); + var_00.alpha = var_06; + wait 0.1; + var_00 fadeovertime(var_05 * 0.2); + var_00.alpha = var_06 * 0.5; + wait var_05 * 0.2; + var_00 fadeovertime(var_05 * 0.3); + var_00.alpha = var_06 * 0.3; + wait var_05 * 0.3; + var_04 = self.health - self.var_1203 / var_01; + var_05 = 0.3 + 0.7 * var_04; + if(var_04 > 0.9) + { + var_02 = 0; + var_00 fadeovertime(0.5); + var_00.alpha = 0; + wait var_05 * 0.5 - 0.1; + } + else + { + wait var_05 * 0.5 - 0.1; + } + + continue; + } + + wait 0.05; + } +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_weather.gsc b/MW3/Xbox/SP/maps/_weather.gsc new file mode 100644 index 0000000..3f410db --- /dev/null +++ b/MW3/Xbox/SP/maps/_weather.gsc @@ -0,0 +1,402 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_weather.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 15 + * Decompile Time: 261 ms + * Timestamp: 10/27/2023 2:34:48 AM +*******************************************************************/ + +//Function Number: 1 +func_3EEA(param_00) +{ + level notify("rain_change","hard",param_00); + level thread func_3EF2(10,param_00); + wait param_00 * 0.5; + level.ambient_modifier["rain"] = ""; + wait param_00 * 0.5; +} + +//Function Number: 2 +rainmedium(param_00) +{ + level notify("rain_change","hard",param_00); + level thread func_3EF2(8,param_00); + wait param_00 * 0.5; + level.ambient_modifier["rain"] = ""; + wait param_00 * 0.5; +} + +//Function Number: 3 +rainlight(param_00) +{ + level notify("rain_change","light",param_00); + level thread func_3EF2(5,param_00); + wait param_00 * 0.5; + level.ambient_modifier["rain"] = "light"; + wait param_00 * 0.5; +} + +//Function Number: 4 +rainnone(param_00) +{ + level notify("rain_change","none",param_00); + level thread func_3EF2(0,param_00); + wait param_00 * 0.5; + level.ambient_modifier["rain"] = "norain"; + wait param_00 * 0.5; +} + +//Function Number: 5 +func_3EEF(param_00) +{ + common_scripts\utility::flag_init("_weather_lightning_enabled"); + common_scripts\utility::flag_set("_weather_lightning_enabled"); + if(param_00 == "none") + { + level.var_3EF0 = 0; + level._effect["rain_drops"] = level._effect["rain_" + level.var_3EF0]; + rainnone(0.1); + return; + } + + if(param_00 == "light") + { + level.var_3EF0 = 5; + level._effect["rain_drops"] = level._effect["rain_" + level.var_3EF0]; + rainlight(0.1); + return; + } + + level.var_3EF0 = 10; + level._effect["rain_drops"] = level._effect["rain_" + level.var_3EF0]; + func_3EEA(0.1); +} + +//Function Number: 6 +lightning(param_00,param_01) +{ + [[ param_00 ]](); + waittillframeend; + func_3EF9(param_00,param_01); +} + +//Function Number: 7 +func_3EF2(param_00,param_01) +{ + level notify("rain_level_change"); + level endon("rain_level_change"); + if(level.var_3EF0 > param_00) + { + var_02 = level.var_3EF0 - param_00; + param_01 = param_01 / var_02; + for(var_03 = 0;var_03 < var_02;var_03++) + { + wait param_01; + level.var_3EF0--; + level._effect["rain_drops"] = level._effect["rain_" + level.var_3EF0]; + } + } + + if(level.var_3EF0 < param_00) + { + var_02 = param_00 - level.var_3EF0; + param_01 = param_01 / var_02; + for(var_03 = 0;var_03 < var_02;var_03++) + { + wait param_01; + level.var_3EF0++; + level._effect["rain_drops"] = level._effect["rain_" + level.var_3EF0]; + } + } +} + +//Function Number: 8 +func_3EF3(param_00) +{ + if(!isdefined(level.var_3EF4)) + { + level.var_3EF4 = []; + level.lightningexploderindex = 0; + } + + level.var_3EF4[level.var_3EF4.size] = param_00; +} + +//Function Number: 9 +func_3EF6() +{ + var_00 = getentarray("player","classname")[0]; + for(;;) + { + playfx(level._effect["rain_drops"],var_00.origin + (0,0,650),var_00.origin + (0,0,680)); + wait 0.3; + } +} + +//Function Number: 10 +rainlevelrandomwait() +{ + if(level.var_3EF0 == 0) + { + return randomfloat(30); + } + + if(level.var_3EF0 == 1) + { + return randomfloat(24); + } + + if(level.var_3EF0 == 2) + { + return randomfloat(20); + } + + if(level.var_3EF0 == 3) + { + return randomfloat(15); + } + + if(level.var_3EF0 == 4) + { + return randomfloat(12); + } + + if(level.var_3EF0 == 5) + { + return randomfloat(9); + } + + if(level.var_3EF0 == 6) + { + return randomfloat(8); + } + + if(level.var_3EF0 == 7) + { + return randomfloat(8); + } + + if(level.var_3EF0 == 8) + { + return randomfloat(7); + } + + if(level.var_3EF0 == 9) + { + return randomfloat(6); + } + + if(level.var_3EF0 == 10) + { + return randomfloat(5); + } +} + +//Function Number: 11 +func_3EF8() +{ + if(level.var_3EF0 == 0) + { + return 20; + } + + if(level.var_3EF0 == 1) + { + return 18; + } + + if(level.var_3EF0 == 2) + { + return 16; + } + + if(level.var_3EF0 == 3) + { + return 14; + } + + if(level.var_3EF0 == 4) + { + return 12; + } + + if(level.var_3EF0 == 5) + { + return 10; + } + + if(level.var_3EF0 == 6) + { + return 9; + } + + if(level.var_3EF0 == 7) + { + return 8; + } + + if(level.var_3EF0 == 8) + { + return 7; + } + + if(level.var_3EF0 == 9) + { + return 6; + } + + if(level.var_3EF0 == 10) + { + return 5; + } +} + +//Function Number: 12 +func_3EF9(param_00,param_01) +{ + level endon("rain_change"); + var_02 = gettime() + func_3EF8() + rainlevelrandomwait() * 1000; + if(var_02 < level.var_3EFA) + { + level.var_3EFA = var_02; + } + + for(;;) + { + common_scripts\utility::flag_wait("_weather_lightning_enabled"); + var_03 = level.var_3EFA - gettime() * 0.001; + if(var_03 > 0) + { + wait var_03; + } + + if(!common_scripts\utility::flag("_weather_lightning_enabled")) + { + continue; + } + + func_3EFC(param_00,param_01); + level.var_3EFA = gettime() + func_3EF8() + rainlevelrandomwait() * 1000; + } +} + +//Function Number: 13 +func_3EFB(param_00) +{ + if(isdefined(level.lightningexploderindex)) + { + common_scripts\utility::exploder(level.var_3EF4[level.lightningexploderindex]); + } + + [[ param_00 ]](); +} + +//Function Number: 14 +func_3EFC(param_00,param_01,param_02) +{ + var_03[0] = "quick"; + thread thunder(); + if(!isdefined(var_03)) + { + var_03 = randomint(var_41.size); + } + + var_04 = 0; + if(isdefined(level.lightningexploderindex)) + { + while(var_04 == level.lightningexploderindex) + { + var_04 = randomint(level.var_3EF4.size); + } + + level.lightningexploderindex = var_04; + } + + switch(var_41[var_03]) + { + case "quick": + func_3EFB(param_02); + break; + + case "double": + func_3EFB(param_02); + wait 0.05; + func_3EFB(param_02); + break; + + case "triple": + func_3EFB(param_02); + wait 0.05; + func_3EFB(param_02); + wait 0.5; + func_3EFB(param_02); + break; + } +} + +//Function Number: 15 +thunder() +{ + if(level.var_3EF0 == 0) + { + wait 6 + randomfloat(2); + } + else if(level.var_3EF0 == 1) + { + wait 5 + randomfloat(1.8); + } + else if(level.var_3EF0 == 2) + { + wait 4.5 + randomfloat(1.6); + } + else if(level.var_3EF0 == 3) + { + wait 4 + randomfloat(1.6); + } + else if(level.var_3EF0 == 4) + { + wait 3.5 + randomfloat(1.5); + } + else if(level.var_3EF0 == 5) + { + wait 3 + randomfloat(1.5); + } + else if(level.var_3EF0 == 6) + { + wait 2.5 + randomfloat(1.2); + } + else if(level.var_3EF0 == 7) + { + wait 2 + randomfloat(1); + } + else if(level.var_3EF0 == 8) + { + wait 1.9 + randomfloat(0.5); + } + else if(level.var_3EF0 == 9) + { + wait 1.5; + } + else if(level.var_3EF0 == 10) + { + wait 1; + } + + var_00 = spawn("script_origin",(0,0,0)); + var_00.origin = level.player.origin + (0,0,60); + var_00 linkto(level.player); + if(level.var_3EF0 <= 8) + { + var_00 playsound("elm_thunder_distant","sounddone"); + } + else + { + var_00 playsound("elm_thunder_distant","sounddone"); + var_00 thread maps\_utility::play_sound_on_entity("elm_thunder_strike"); + } + + var_00 waittill("sounddone"); + var_00 delete(); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/_wood.gsc b/MW3/Xbox/SP/maps/_wood.gsc new file mode 100644 index 0000000..1294554 --- /dev/null +++ b/MW3/Xbox/SP/maps/_wood.gsc @@ -0,0 +1,197 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\_wood.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 5 + * Decompile Time: 90 ms + * Timestamp: 10/27/2023 2:34:48 AM +*******************************************************************/ + +//Function Number: 1 +main() +{ + maps\_utility::precache("woodgib_medium"); + maps\_utility::precache("woodgib_big"); + maps\_utility::precache("woodgib_small1"); + maps\_utility::precache("woodgib_small2"); + maps\_utility::precache("wood_plank2"); + maps\_utility::precache("gib_woodplank"); + var_00 = getentarray("wood_splinter","targetname"); + maps\_utility::array_thread(var_00,::func_3EFE); +} + +//Function Number: 2 +func_3EFE() +{ + if(!isdefined(self.target)) + { + return; + } + + var_00 = getentarray(self.target,"targetname"); + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + if(isdefined(var_00[var_01].script_noteworthy) && var_00[var_01].script_noteworthy == "notsolid") + { + var_00[var_01] notsolid(); + } + + if(!isdefined(var_00[var_01].target)) + { + continue; + } + + var_00[var_01].var_3EFF = getentarray(var_00[var_01].target,"targetname"); + for(var_02 = 0;var_02 < var_00[var_01].var_3EFF.size;var_02++) + { + if(isdefined(var_00[var_01].var_3EFF[var_02])) + { + var_00[var_01].var_3EFF[var_02] hide(); + } + } + } + + if(isdefined(self.script_noteworthy)) + { + level waittill(self.script_noteworthy); + } + + self waittill("trigger",var_03); + if(isplayer(var_03)) + { + var_04 = var_03 getorigin(); + } + else + { + var_04 = var_04.origin; + } + + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + if(!isdefined(var_00[var_01].target)) + { + continue; + } + + var_00[var_01].var_3EFF = getentarray(var_00[var_01].target,"targetname"); + for(var_02 = 0;var_02 < var_00[var_01].var_3EFF.size;var_02++) + { + if(isdefined(var_00[var_01].var_3EFF[var_02])) + { + var_00[var_01].var_3EFF[var_02] show(); + } + } + } + + for(var_01 = 0;var_01 < var_00.size;var_01++) + { + if(!isdefined(var_00[var_01])) + { + continue; + } + + var_00[var_01] playsound("wood_break"); + var_00[var_01] thread func_3F00(var_04); + var_00[var_01] delete(); + } +} + +//Function Number: 3 +func_3F00(param_00) +{ + var_01 = spawn("script_model",(0,0,0)); + if(randomint(100) > 25) + { + if(isdefined(self.script_noteworthy) && self.script_noteworthy == "dark") + { + if(randomint(100) > 50) + { + var_01 setmodel("wood_plank2"); + } + else + { + var_01 setmodel("gib_woodplank"); + } + } + else if(randomint(100) > 50) + { + var_01 setmodel("woodgib_big"); + } + else + { + var_01 setmodel("woodgib_medium"); + } + } + + var_01.origin = self getorigin(); + var_01 thread go(param_00); + if(isdefined(self.script_noteworthy) && self.script_noteworthy == "dark") + { + return; + } + + small_gibs(var_01.origin,param_00); +} + +//Function Number: 4 +go(param_00) +{ + var_01 = vectornormalize(self.origin - param_00); + var_01 = var_01 * 250 + randomint(100); + var_02 = var_01[0]; + var_03 = var_01[1]; + var_04 = 200 + randomint(100); + if(var_02 > 0) + { + self rotateroll(1500 + randomfloat(2500) * -1,5,0,0); + } + else + { + self rotateroll(1500 + randomfloat(2500),5,0,0); + } + + self movegravity((var_02,var_03,var_04),12); + wait 6; + self delete(); +} + +//Function Number: 5 +small_gibs(param_00,param_01) +{ + var_02 = []; + for(var_03 = 0;var_03 < randomint(6) + 1;var_03++) + { + var_02[var_03] = spawn("script_model",param_00); + var_02[var_03].origin = var_02[var_03].origin + (randomfloat(10) - 5,0,randomfloat(30) - 15); + if(randomint(100) > 50) + { + var_02[var_03] setmodel("woodgib_small1"); + } + else + { + var_02[var_03] setmodel("woodgib_small2"); + } + + param_01 = param_01 + (50 - randomint(100),50 - randomint(100),0); + var_04 = vectornormalize(param_00 - param_01); + var_04 = var_04 * 300 + randomint(150); + var_05 = var_04[0]; + var_06 = var_04[1]; + var_07 = 120 + randomint(200); + var_02[var_03] movegravity((var_05,var_06,var_07),12); + if(var_05 > 0) + { + var_02[var_03] rotateroll(1500 + randomfloat(2500) * -1,5,0,0); + continue; + } + + var_02[var_03] rotateroll(1500 + randomfloat(2500),5,0,0); + } + + wait 6; + for(var_03 = 0;var_03 < var_02.size;var_03++) + { + var_02[var_03] delete(); + } +} \ No newline at end of file diff --git a/MW3/Xbox/SP/maps/so_aud.gsc b/MW3/Xbox/SP/maps/so_aud.gsc new file mode 100644 index 0000000..cf4f049 --- /dev/null +++ b/MW3/Xbox/SP/maps/so_aud.gsc @@ -0,0 +1,329 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: maps\so_aud.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 15 + * Decompile Time: 285 ms + * Timestamp: 10/27/2023 2:31:04 AM +*******************************************************************/ + +//Function Number: 1 +main(param_00) +{ + maps\_audio::func_1314(::so_msg_handler); + thread func_3F03(param_00); +} + +//Function Number: 2 +func_3F03(param_00) +{ + if(!isdefined(param_00)) + { + return; + } + + switch(param_00) + { + case "so_nyse_ny_manhattan": + func_3F05(); + break; + } +} + +//Function Number: 3 +so_msg_handler(param_00,param_01) +{ + var_02 = 1; + switch(param_00) + { + case "so_berlin_intro_littlebird_spawn": + var_03 = param_01; + var_03 thread common_scripts\utility::play_loop_sound_on_entity("so_littlebird_move"); + break; + + case "so_ied_littlebird": + var_03 = param_01; + var_03 thread common_scripts\utility::play_loop_sound_on_entity("so_littlebird_move"); + var_03 thread func_3F09(); + break; + + case "so_ied_wave4_littlebird": + var_04 = param_01; + var_04 thread common_scripts\utility::play_loop_sound_on_entity("so_littlebird_move_distant"); + var_04 thread func_3F09(); + break; + + case "so_ied_wave3_tank": + var_05 = param_01; + var_05 thread aud_run_tank_system(); + break; + + case "so_paris_start_jeep": + var_06 = param_01; + thread maps\_audio_vehicles::vm_start_preset("so_paris_jeep_01","so_paris_jeep",var_06,2); + break; + + case "so_nyse_littlebird_spawn": + var_03 = param_01; + var_03 common_scripts\utility::play_loop_sound_on_entity("so_nymn_littlebird_move"); + break; + + case "so_start_harbor_player_hind": + var_07 = param_01; + var_07 common_scripts\utility::play_loop_sound_on_entity("so_hind_player"); + break; + + case "so_harbor_ally_helis": + var_08 = param_01; + foreach(var_03 in var_08) + { + var_03 thread common_scripts\utility::play_loop_sound_on_entity("so_hind_allies"); + } + break; + + case "so_harbor_kill_helis": + var_08 = param_01; + foreach(var_03 in var_08) + { + var_03 common_scripts\utility::stop_loop_sound_on_entity("so_hind_allies"); + } + break; + + case "so_start_harbor_exit_hind": + var_0D = param_01; + var_0D common_scripts\utility::play_loop_sound_on_entity("so_exit_hind_player"); + break; + + case "so_harbor_enemy_chopper_flyover": + var_0E = param_01; + var_0E maps\_utility::play_sound_on_entity("so_sub_hind_flyover"); + break; + + case "so_sub_missile_launch": + var_0F = param_01; + func_3F06(var_0F); + break; + + default: + var_02 = 0; + break; + } + + return var_02; +} + +//Function Number: 4 +func_3F05() +{ + maps\_audio_dynamic_ambi::func_1067("fire_wood_med",(-945,-2847,262),"steff_01",1000,1); + maps\_audio_dynamic_ambi::func_1067("fire_wood_med",(-1181,-2926,55),"steff_02",1000,1); + maps\_audio_dynamic_ambi::func_1067("fire_wood_med_tight",(-1004,-2927,42),"steff_03",1000,1); + maps\_audio_dynamic_ambi::func_1067("fire_crackle_med_tight",(-902,-2716,66),"steff_04",1000,1); + maps\_audio_dynamic_ambi::func_1067("fire_wood_med_tight",(-909,-2636,36),"steff_05",1000,1); + maps\_audio_dynamic_ambi::func_1067("fire_wood_med",(-686,-2120,91),"steff_car",1000,1); + common_scripts\utility::play_loopsound_in_space("road_flare_lp_tight",(-141,271,2)); + common_scripts\utility::play_loopsound_in_space("road_flare_lp_tight",(-259,579,2)); + common_scripts\utility::play_loopsound_in_space("road_flare_lp_tight",(-475,980,10)); + common_scripts\utility::play_loopsound_in_space("road_flare_lp_tight",(-704,311,-7)); + maps\_audio_dynamic_ambi::func_1067("fire_crackle_med_tight",(-471,1856,-22),"pre_stock_01",1000,1); +} + +//Function Number: 5 +func_3F06(param_00) +{ + if(!isdefined(param_00)) + { + return; + } + + if(!isdefined(level.aud.var_3F07)) + { + level.aud.var_3F07 = 0; + } + + var_01 = maps\_audio_zone_manager::azm_get_current_zone(); + if((var_01 == "nyhb_sub_interior_controlroom" || var_01 == "nyhb_sub_interior_missileroom2") && !level.aud.var_3F07) + { + level.aud.var_3F07 = 1; + maps\_audio::func_12F4(); + level.player seteq("grondo3d",0,0,"lowpass",0,400,2); + level.player seteq("norestrict2d",0,0,"lowpass",0,400,2); + level.player seteqlerp(1,0); + thread func_3F08(); + } + + wait 0.05; + param_00 playsound("russian_sub_missile_launch"); + wait 1.25; + param_00 playsound("russian_sub_missile_launch_boom"); +} + +//Function Number: 6 +func_3F08() +{ + for(;;) + { + var_00 = maps\_audio_zone_manager::azm_get_current_zone(); + if(var_00 != "nyhb_sub_interior_controlroom" && var_00 != "nyhb_sub_interior_missileroom2") + { + maps\_audio::func_12F6(); + level.player deactivateeq(0,"grondo3d",0); + level.player deactivateeq(0,"norestrict2d",0); + level.aud.var_3F07 = 0; + return; + } + + level.player seteqlerp(1,0); + wait 0.1; + } +} + +//Function Number: 7 +func_3F09() +{ + level.aud.var_3F0A = (0,0,0); + self waittill("deathspin"); + thread func_3F0B(); + thread common_scripts\utility::play_loop_sound_on_entity("so_littlebird_helicopter_dying_loop"); + common_scripts\utility::waittill_either("death","crash_done"); + thread common_scripts\utility::play_sound_in_space("so_littlebird_helicopter_crash",level.aud.var_3F0A); +} + +//Function Number: 8 +func_3F0B() +{ + self endon("death"); + for(;;) + { + if(isdefined(self)) + { + self.origin = level.aud.var_3F0A; + wait 0.05; + } + } +} + +//Function Number: 9 +aud_run_tank_system() +{ + func_3F0D("ied_tank_01","us_tank_treads_lp_02","us_tank_move_low_lp","us_tank_idle_lp"); + func_3F12(); +} + +//Function Number: 10 +func_3F0D(param_00,param_01,param_02,param_03) +{ + if(isdefined(self)) + { + level.aud.instance_name = spawn("script_origin",self.origin); + var_04 = spawn("script_origin",self.origin); + var_05 = spawn("script_origin",self.origin); + var_06 = spawn("script_origin",self.origin); + level.aud.instance_name.fade_in = 1; + var_07 = level.aud.instance_name; + var_08 = level.aud.instance_name.fade_in; + var_04 linkto(self); + var_06 linkto(self); + var_05 linkto(self); + if(isdefined(var_04) || isdefined(param_01)) + { + var_04 playloopsound(param_01); + } + + if(isdefined(var_05) || isdefined(param_02)) + { + var_05 playloopsound(param_02); + } + + if(isdefined(var_06) || isdefined(param_03)) + { + var_06 playloopsound(param_03); + } + + var_04 scalevolume(0); + var_05 scalevolume(0); + var_06 scalevolume(0); + wait 0.3; + func_3F0E(var_07,var_04,var_05,var_06,1,5,var_08); + } +} + +//Function Number: 11 +func_3F0E(param_00,param_01,param_02,param_03,param_04,param_05,param_06) +{ + param_04 = 1; + param_05 = 5; + thread aud_ground_veh_deathwatch(param_00,param_01,param_02,param_03); + thread aud_create_drive_envs(); + param_00 endon("instance_killed"); + var_07 = 0; + for(;;) + { + if(isdefined(self)) + { + var_08 = self vehicle_getspeed(); + var_08 = min(var_08,param_05); + var_08 = maps\_audio::aud_smooth(var_07,var_08,0.1); + var_09 = maps\_audio::aud_map_range(var_08,param_04,param_05,level.aud.envs["veh_drive_vol"]); + var_0A = maps\_audio::aud_map_range(var_08,param_04,param_05,level.aud.envs["veh_idle_vol"]); + param_02 scalevolume(var_09,0.1); + param_01 scalevolume(var_09,0.1); + param_03 scalevolume(var_0A,0.1); + var_07 = var_08; + wait 0.1; + } + } +} + +//Function Number: 12 +aud_create_drive_envs() +{ + level.aud.envs["veh_drive_vol"] = [[0,0],[0.05,0.1],[0.1,0.1],[0.2,0.2],[0.3,0.3],[0.4,0.4],[0.5,0.5],[0.6,0.6],[0.8,0.8],[1,1]]; + level.aud.envs["veh_idle_vol"] = [[0,1],[0.05,0.85],[0.1,0.6],[0.2,0.5],[0.3,0.4],[0.4,0.1],[0.5,0],[0.6,0],[0.8,0],[1,0]]; +} + +//Function Number: 13 +aud_ground_veh_deathwatch(param_00,param_01,param_02,param_03) +{ + if(isdefined(self)) + { + self waittill("death"); + param_00 notify("instance_killed"); + thread aud_fade_loop_out_and_delete_temp(param_01,5); + thread aud_fade_loop_out_and_delete_temp(param_02,5); + thread aud_fade_loop_out_and_delete_temp(param_03,5); + } +} + +//Function Number: 14 +func_3F12() +{ + self endon("death"); + if(isdefined(self)) + { + for(;;) + { + self waittill("weapon_fired"); + var_00 = randomfloatrange(0.2,0.4); + thread common_scripts\utility::play_sound_in_space("us_tank_big_boom",self.origin); + thread common_scripts\utility::play_sound_in_space("us_tank_fire_dist",self.origin); + thread common_scripts\utility::play_sound_in_space("us_tank_fire_close",self.origin); + thread common_scripts\utility::play_sound_in_space("us_tank_fire_hi_ring",self.origin); + thread common_scripts\utility::play_sound_in_space("us_tank_fire_lfe",self.origin); + wait 0.2; + thread common_scripts\utility::play_sound_in_space("us_tank_dist_verb",self.origin); + wait var_00; + } + } +} + +//Function Number: 15 +aud_fade_loop_out_and_delete_temp(param_00,param_01) +{ + param_00 scalevolume(0,param_01); + wait param_01 + 0.05; + param_00 stoploopsound(); + wait 0.05; + param_00 delete(); +} \ No newline at end of file diff --git a/MW3/Xbox/SP/vehicle_scripts/_attack_heli.gsc b/MW3/Xbox/SP/vehicle_scripts/_attack_heli.gsc new file mode 100644 index 0000000..d9a63ad --- /dev/null +++ b/MW3/Xbox/SP/vehicle_scripts/_attack_heli.gsc @@ -0,0 +1,1854 @@ +/******************************************************************* + * Decompiled By: Bog + * Decompiled File: vehicle_scripts\_attack_heli.gsc + * Game: Call of Duty: Modern Warfare 3 + * Platform: Console + * Function Count: 71 + * Decompile Time: 1219 ms + * Timestamp: 10/27/2023 2:35:50 AM +*******************************************************************/ + +//Function Number: 1 +func_23F6() +{ + precacheitem("turret_attackheli"); + precacheitem("missile_attackheli"); + attack_heli_fx(); + thread init(); +} + +//Function Number: 2 +attack_heli_fx() +{ + if(getdvarint("sm_enable") && getdvar("r_zfeather") != "0") + { + level._effect["_attack_heli_spotlight"] = loadfx("misc/hunted_spotlight_model"); + return; + } + + level._effect["_attack_heli_spotlight"] = loadfx("misc/spotlight_large"); +} + +//Function Number: 3 +init() +{ + if(isdefined(level.attackheliaiburstsize)) + { + return; + } + + while(!isdefined(level.gameskill)) + { + wait 0.05; + } + + if(!isdefined(level.cosine)) + { + level.cosine = []; + } + + if(!isdefined(level.cosine["25"])) + { + level.cosine["25"] = cos(25); + } + + if(!isdefined(level.cosine["35"])) + { + level.cosine["35"] = cos(35); + } + + if(!isdefined(level.attackhelirange)) + { + level.attackhelirange = 3500; + } + + if(!isdefined(level.attackhelikillsai)) + { + level.attackhelikillsai = 0; + } + + if(!isdefined(level.attackhelifov)) + { + level.attackhelifov = cos(30); + } + + level.attackheliaiburstsize = 1; + level.var_23FD = 3; + level.attackhelitargetreaquire = 6; + level.attackhelimovetime = 3; + switch(level.gameskill) + { + case 0: + level.attackheliplayerbreak = 9; + level.attackhelitimeout = 1; + break; + + case 1: + level.attackheliplayerbreak = 7; + level.attackhelitimeout = 2; + break; + + case 2: + level.attackheliplayerbreak = 5; + level.attackhelitimeout = 3; + break; + + case 3: + level.attackheliplayerbreak = 3; + level.attackhelitimeout = 5; + break; + } +} + +//Function Number: 4 +start_attack_heli(param_00) +{ + if(!isdefined(param_00)) + { + param_00 = "kill_heli"; + } + + var_01 = maps\_vehicle::spawn_vehicle_from_targetname_and_drive(param_00); + var_01 = func_2404(var_01); + return var_01; +} + +//Function Number: 5 +func_2404(param_00,param_01) +{ + param_00 endon("death"); + param_00 endon("heli_players_dead"); + if(level.gameskill == 0 || level.gameskill == 1) + { + var_02 = spawn("script_origin",param_00.origin + (0,0,-20)); + var_02 linkto(param_00); + param_00 thread common_scripts\utility::delete_on_death(var_02); + var_03 = undefined; + if(level.gameskill == 0) + { + var_03 = 2800; + } + else + { + var_03 = 2200; + } + + if(!isdefined(param_00.no_attractor)) + { + param_00.attractor = missile_createattractorent(var_02,var_03,10000,level.player); + if(maps\_utility::func_E89()) + { + param_00.attractor2 = missile_createattractorent(var_02,var_03,10000,level.player2); + } + } + } + + param_00 enableaimassist(); + param_00.startingorigin = spawn("script_origin",param_00.origin); + param_00 thread common_scripts\utility::delete_on_death(param_00.startingorigin); + if(!isdefined(param_00.circling)) + { + param_00.circling = 0; + } + + param_00.allowshoot = 1; + param_00.var_240B = 0; + param_00.moving = 1; + param_00.istakingdamage = 0; + param_00.var_240E = undefined; + param_00 thread notify_disable(); + param_00 thread notify_enable(); + thread kill_heli_logic(param_00,param_01); + param_00.turrettype = undefined; + param_00 func_2415(); + param_00 thread detect_player_death(); + switch(param_00.vehicletype) + { + case "ny_harbor_hind": + case "hind": + param_00.turrettype = "default"; + break; + + case "mi28": + param_00.turrettype = "default"; + break; + + case "littlebird": + param_00 setyawspeed(90,30,20); + param_00 setmaxpitchroll(40,40); + param_00 sethoverparams(100,20,5); + param_00 setup_miniguns(); + break; + + default: + break; + } + + param_00.etarget = param_00.targetdefault; + if(isdefined(param_00.script_spotlight) && param_00.script_spotlight == 1 && !isdefined(param_00.spotlight)) + { + param_00 thread heli_spotlight_on(undefined,1); + } + + param_00 thread func_245B(); + return param_00; +} + +//Function Number: 6 +detect_player_death() +{ + foreach(var_01 in level.players) + { + var_01 maps\_utility::add_wait(::maps\_utility::waittill_msg,"death"); + } + + maps\_utility::do_wait_any(); + self notify("heli_players_dead"); +} + +//Function Number: 7 +func_2415() +{ + var_00 = undefined; + var_01 = undefined; + switch(self.vehicletype) + { + case "ny_harbor_hind": + case "hind": + var_01 = 600; + var_00 = -100; + break; + + case "mi28": + var_01 = 600; + var_00 = -100; + break; + + case "littlebird": + var_01 = 600; + var_00 = -204; + break; + + default: + break; + } + + self.targetdefault = spawn("script_origin",self.origin); + self.targetdefault.angles = self.angles; + self.targetdefault.origin = self.origin; + var_02 = spawnstruct(); + var_02.entity = self.targetdefault; + var_02.forward = var_01; + var_02.up = var_00; + var_02 maps\_utility::translate_local(); + self.targetdefault linkto(self); + self.targetdefault thread func_241B(self); +} + +//Function Number: 8 +func_2416() +{ + if(isdefined(self.turrets)) + { + return self.turrets; + } + + setup_miniguns(); + return self.turrets; +} + +//Function Number: 9 +setup_miniguns() +{ + self.turrettype = "miniguns"; + self.var_2419 = 0; + self.var_241A = 0; + if(!isdefined(self.mgturret)) + { + return; + } + + self.turrets = self.mgturret; + common_scripts\utility::array_thread(self.turrets,::littlebird_turrets_think,self); +} + +//Function Number: 10 +func_241B(param_00) +{ + param_00 common_scripts\utility::waittill_either("death","crash_done"); + if(isdefined(self)) + { + self delete(); + } +} + +//Function Number: 11 +func_241C(param_00,param_01) +{ + if(!isdefined(param_00)) + { + param_00 = "kill_heli"; + } + + var_02 = maps\_vehicle::spawn_vehicle_from_targetname_and_drive(param_00); + var_02.startingorigin = spawn("script_origin",var_02.origin); + var_02 thread common_scripts\utility::delete_on_death(var_02.startingorigin); + var_02.circling = 1; + var_02.allowshoot = 1; + var_02.var_240B = 0; + var_02 thread notify_disable(); + var_02 thread notify_enable(); + thread kill_heli_logic(var_02,param_01); + return var_02; +} + +//Function Number: 12 +kill_heli_logic(param_00,param_01) +{ + if(!isdefined(param_00)) + { + param_00 = maps\_vehicle::spawn_vehicle_from_targetname_and_drive("kill_heli"); + param_00.allowshoot = 1; + param_00.var_240B = 0; + param_00 thread notify_disable(); + param_00 thread notify_enable(); + } + + var_02 = undefined; + if(!isdefined(param_00.script_airspeed)) + { + var_02 = 40; + } + else + { + var_02 = param_00.script_airspeed; + } + + if(!isdefined(level.enemy_heli_killed)) + { + level.enemy_heli_killed = 0; + } + + if(!isdefined(level.commander_speaking)) + { + level.commander_speaking = 0; + } + + if(!isdefined(level.var_2421)) + { + level.var_2421 = 0; + } + + level.attack_heli_safe_volumes = undefined; + var_03 = getentarray("attack_heli_safe_volume","script_noteworthy"); + if(var_03.size > 0) + { + level.attack_heli_safe_volumes = var_03; + } + + if(!level.enemy_heli_killed) + { + thread func_244E(param_00); + } + + if(!isdefined(param_00.var_2423)) + { + switch(param_00.vehicletype) + { + case "mi28": + target_set(param_00,(0,0,-80)); + break; + + case "ny_harbor_hind": + case "hind": + target_set(param_00,(0,0,-96)); + break; + + case "littlebird": + target_set(param_00,(0,0,-80)); + break; + + default: + break; + } + + target_setjavelinonly(param_00,1); + } + + param_00 thread func_2447(); + param_00 thread func_244D(); + param_00 endon("death"); + param_00 endon("heli_players_dead"); + param_00 endon("returning_home"); + param_00 setvehweapon("turret_attackheli"); + if(!isdefined(param_00.circling)) + { + param_00.circling = 0; + } + + if(!param_00.circling) + { + param_00 setneargoalnotifydist(100); + if(!isdefined(param_00.dontwaitforpathend)) + { + param_00 waittill("reached_dynamic_path_end"); + } + } + else + { + param_00 setneargoalnotifydist(500); + param_00 waittill("near_goal"); + } + + param_00 thread heli_shoot_think(); + if(param_00.circling) + { + param_00 thread heli_circling_think(param_01,var_02); + return; + } + + param_00 thread heli_goal_think(var_02); +} + +//Function Number: 13 +heli_circling_think(param_00,param_01) +{ + if(!isdefined(param_00)) + { + param_00 = "attack_heli_circle_node"; + } + + var_02 = getentarray(param_00,"targetname"); + if(!isdefined(var_02) || var_02.size < 1) + { + var_02 = common_scripts\utility::getstructarray(param_00,"targetname"); + } + + var_03 = self; + var_03 endon("stop_circling"); + var_03 endon("death"); + var_03 endon("returning_home"); + var_03 endon("heli_players_dead"); + for(;;) + { + var_03 vehicle_setspeed(param_01,param_01 / 4,param_01 / 4); + var_03 setneargoalnotifydist(100); + var_04 = maps\_utility::func_218B(var_03.origin); + var_05 = var_04.origin; + var_03 setlookatent(var_04); + var_06 = maps\_utility::getclosest(var_05,var_02); + var_07 = getentarray(var_06.target,"targetname"); + if(!isdefined(var_07) || var_07.size < 1) + { + var_07 = common_scripts\utility::getstructarray(var_06.target,"targetname"); + } + + var_08 = var_07[randomint(var_07.size)]; + var_03 setvehgoalpos(var_08.origin,1); + var_03 waittill("near_goal"); + if(!isdefined(var_04.var_1DDB)) + { + wait 1; + wait randomfloatrange(0.8,1.3); + } + } +} + +//Function Number: 14 +heli_goal_think(param_00) +{ + self endon("death"); + var_01 = getentarray("kill_heli_spot","targetname"); + var_02 = self; + var_03 = maps\_utility::getclosest(var_02.origin,var_01); + var_04 = var_03; + var_02 endon("death"); + var_02 endon("returning_home"); + var_02 endon("heli_players_dead"); + var_05 = undefined; + for(;;) + { + wait 0.05; + var_02 vehicle_setspeed(param_00,param_00 / 2,param_00 / 10); + var_02 setneargoalnotifydist(100); + var_06 = maps\_utility::func_218B(var_02.origin); + var_07 = var_06.origin; + if(var_03 == var_04 && var_02.istakingdamage) + { + var_08 = func_2446(var_02,var_03,var_01,var_06,var_07); + var_03 = maps\_utility::getclosest(var_07,var_08); + } + + var_02 setvehgoalpos(var_03.origin,1); + var_02.moving = 1; + var_06 = maps\_utility::func_218B(var_02.origin); + if(isdefined(self.etarget) && isdefined(self.etarget.classname) && self.etarget.classname == "script_origin") + { + var_05 = var_06; + } + else if(isdefined(self.etarget)) + { + var_05 = self.etarget; + } + else + { + var_05 = self.targetdefault; + } + + var_02 setlookatent(var_05); + var_02 waittill("near_goal"); + var_02.moving = 0; + if(!maps\_utility::func_E89()) + { + if(level.gameskill == 0 || level.gameskill == 1) + { + while(player_is_aiming_with_rocket(var_02)) + { + wait 0.5; + } + + wait 3; + } + } + + var_06 = maps\_utility::func_218B(var_02.origin); + var_07 = var_06.origin; + var_08 = func_2446(var_02,var_03,var_01,var_06,var_07); + var_08[var_08.size] = var_03; + var_04 = var_03; + var_09 = maps\_utility::getclosest(var_07,var_01); + var_0A = maps\_utility::getclosest(var_07,var_08); + foreach(var_0C in var_08) + { + if(var_06 sightconetrace(var_0C.origin,var_02) != 1) + { + var_08 = common_scripts\utility::array_remove(var_08,var_0C); + continue; + } + } + + var_0E = maps\_utility::getclosest(var_07,var_08); + if(var_08.size < 2) + { + var_03 = var_0A; + } + else if(var_0E != var_09) + { + var_03 = var_0E; + } + else + { + var_0F = []; + var_09 = maps\_utility::get_array_of_closest(var_08,var_09,var_41,2); + var_10 = randomint(var_09.size); + if(randomint(100) > 50) + { + var_04 = var_09[var_10]; + } + else + { + var_04 = var_0A; + } + } + + var_0F = randomfloatrange(level.attackhelimovetime - 0.5,level.attackhelimovetime + 0.5); + common_scripts\utility::waittill_notify_or_timeout("damage_by_player",var_0F); + } +} + +//Function Number: 15 +player_is_aiming_with_rocket(param_00) +{ + if(!level.player func_2450()) + { + return 0; + } + + if(!level.player adsbuttonpressed()) + { + return 0; + } + + var_01 = level.player geteye(); + if(sighttracepassed(var_01,param_00.origin,0,level.player)) + { + return 1; + } + + return 0; +} + +//Function Number: 16 +heli_shoot_think() +{ + self endon("stop_shooting"); + self endon("death"); + self endon("heli_players_dead"); + thread func_2432(); + var_00 = level.attackhelirange * level.attackhelirange; + level.var_2429 = 0; + while(isdefined(self)) + { + wait randomfloatrange(0.8,1.3); + if(!heli_has_target() || !heli_has_player_target()) + { + var_01 = heli_get_target_player_only(); + if(isplayer(var_01)) + { + self.etarget = var_01; + } + } + + if(heli_has_player_target() && level.players.size > 1) + { + var_02 = maps\_utility::func_218B(self.origin); + if(self.etarget != var_02) + { + var_01 = heli_get_target_player_only(); + if(isplayer(var_01)) + { + self.etarget = var_01; + } + } + } + + if(heli_has_player_target()) + { + if(!heli_can_see_target() || level.var_2429 == 1) + { + var_01 = heli_get_target_ai_only(); + self.etarget = var_01; + } + } + + if(isdefined(self.var_240E) && isplayer(self.var_240E)) + { + self.etarget = self.var_240E; + } + else if(!heli_has_target()) + { + var_01 = heli_get_target_ai_only(); + self.etarget = var_01; + } + + if(!heli_has_target()) + { + continue; + } + + if(self.etarget func_244B(self)) + { + continue; + } + + if(heli_has_target() && distancesquared(self.etarget.origin,self.origin) > var_00) + { + continue; + } + + if(self.turrettype == "default" && heli_has_player_target()) + { + func_2444(self.etarget); + wait randomfloatrange(0.8,1.3); + func_2444(self.etarget); + wait randomfloatrange(0.8,1.3); + while(can_see_player(self.etarget) && !self.etarget func_244B(self)) + { + fire_guns(); + wait randomfloatrange(2,4); + } + + continue; + } + + if(isplayer(self.etarget) || isai(self.etarget)) + { + fire_guns(); + } + + if(isplayer(self.etarget)) + { + thread player_grace_period(self); + } + + common_scripts\utility::waittill_notify_or_timeout("damage_by_player",level.attackhelitargetreaquire); + } +} + +//Function Number: 17 +player_grace_period(param_00) +{ + level notify("player_is_heli_target"); + level endon("player_is_heli_target"); + level.var_2429 = 1; + param_00 common_scripts\utility::waittill_notify_or_timeout("damage_by_player",level.attackheliplayerbreak); + level.var_2429 = 0; +} + +//Function Number: 18 +heli_can_see_target() +{ + if(!isdefined(self.etarget)) + { + return 0; + } + + var_00 = self.etarget.origin + (0,0,32); + if(isplayer(self.etarget)) + { + var_00 = self.etarget geteye(); + } + + var_01 = self gettagorigin("tag_flash"); + var_02 = sighttracepassed(var_01,var_00,0,self); + return var_02; +} + +//Function Number: 19 +heli_has_player_target() +{ + if(!isdefined(self.etarget)) + { + return 0; + } + + if(isplayer(self.etarget)) + { + return 1; + } + + return 0; +} + +//Function Number: 20 +heli_has_target() +{ + if(!isdefined(self.etarget)) + { + return 0; + } + + if(!isalive(self.etarget)) + { + return 0; + } + + if(self.etarget == self.targetdefault) + { + return 0; + } + + return 1; +} + +//Function Number: 21 +func_242E() +{ + var_00 = maps\_helicopter_globals::getenemytarget(level.attackhelirange,level.attackhelifov,1,1,0,1,level.var_242F); + if(isdefined(var_00) && isplayer(var_00)) + { + var_00 = self.targetdefault; + } + + if(!isdefined(var_00)) + { + var_00 = self.targetdefault; + } + + return var_00; +} + +//Function Number: 22 +heli_get_target_player_only() +{ + var_00 = getaiarray("allies"); + var_01 = maps\_helicopter_globals::getenemytarget(level.attackhelirange,level.attackhelifov,1,0,0,0,var_00); + if(!isdefined(var_01)) + { + var_01 = self.targetdefault; + } + + return var_01; +} + +//Function Number: 23 +heli_get_target_ai_only() +{ + var_00 = maps\_helicopter_globals::getenemytarget(level.attackhelirange,level.attackhelifov,1,1,0,1,level.players); + if(!isdefined(var_00)) + { + var_00 = self.targetdefault; + } + + return var_00; +} + +//Function Number: 24 +func_2432() +{ + if(!isdefined(self.var_2433)) + { + return; + } + + self endon("death"); + self endon("heli_players_dead"); + self endon("stop_shooting"); + var_00 = undefined; + var_01 = "turret_attackheli"; + var_02 = "missile_attackheli"; + var_03 = undefined; + var_04 = undefined; + var_05 = []; + switch(self.vehicletype) + { + case "mi28": + var_00 = 1; + var_03 = 1; + var_04 = 0.5; + break; + var_41[7] + "tag_store_R_2_d" + var_41[6] + "tag_store_L_2_d" + var_41[5] + "tag_store_R_2_c" + var_41[4] + "tag_store_L_2_c" + var_41[3] + "tag_store_R_2_b" + var_41[2] + "tag_store_L_2_b" + var_41[1] + "tag_store_R_2_a" + var_41[0] + "tag_store_L_2_a" + break; + + case "littlebird": + var_01 = 1; + var_04 = 1; + var_05 = 0.5; + break; + var_41[1] + "tag_missile_right" + var_41[0] + "tag_missile_left" + break; + + default: + break; + } + + var_06 = -1; + for(;;) + { + wait 0.05; + self waittill("fire_missiles",var_07); + if(!isplayer(var_07)) + { + continue; + } + + var_08 = var_07; + if(!func_2434(var_08)) + { + continue; + } + + for(var_09 = 0;var_09 < var_01;var_09++) + { + var_06++; + if(var_06 >= var_41.size) + { + var_06 = 0; + } + + self setvehweapon(var_03); + self.var_240B = 1; + var_0A = self fireweapon(var_41[var_06],var_08); + var_0A thread func_23F5(var_05); + var_0A thread func_2435(); + if(var_09 < var_01 - 1) + { + wait var_04; + } + } + + self.var_240B = 0; + self setvehweapon(var_02); + wait 10; + } +} + +//Function Number: 25 +func_2434(param_00) +{ + if(self.moving) + { + return 0; + } + + return 1; +} + +//Function Number: 26 +func_2435() +{ + if(distancesquared(self.origin,level.player.origin) > 9000000) + { + return; + } + + var_00 = self.origin; + while(isdefined(self)) + { + var_00 = self.origin; + wait 0.1; + } + + earthquake(0.7,1.5,var_00,1600); +} + +//Function Number: 27 +func_23F5(param_00) +{ + self endon("death"); + self endon("heli_players_dead"); + wait param_00; + if(isdefined(self)) + { + self missile_cleartarget(); + } +} + +//Function Number: 28 +get_different_player(param_00) +{ + for(var_01 = 0;var_01 < level.players.size;var_01++) + { + if(param_00 != level.players[var_01]) + { + return level.players[var_01]; + } + } + + return level.players[0]; +} + +//Function Number: 29 +notify_disable() +{ + self notify("notify_disable_thread"); + self endon("notify_disable_thread"); + self endon("death"); + self endon("heli_players_dead"); + for(;;) + { + self waittill("disable_turret"); + self.allowshoot = 0; + } +} + +//Function Number: 30 +notify_enable() +{ + self notify("notify_enable_thread"); + self endon("notify_enable_thread"); + self endon("death"); + self endon("heli_players_dead"); + for(;;) + { + self waittill("enable_turret"); + self.allowshoot = 1; + } +} + +//Function Number: 31 +fire_guns() +{ + switch(self.turrettype) + { + case "default": + var_00 = randomintrange(5,10); + var_01 = weaponfiretime("turret_attackheli"); + turret_default_fire(self.etarget,var_00,var_01); + break; + + case "miniguns": + var_00 = func_243A(self.etarget); + if(self.allowshoot && !self.var_240B) + { + turret_minigun_fire(self.etarget,var_00); + } + break; + + default: + break; + } +} + +//Function Number: 32 +func_243A(param_00) +{ + var_01 = undefined; + if(!isplayer(param_00)) + { + var_01 = level.attackheliaiburstsize; + return var_01; + } + + switch(level.gameskill) + { + case 3: + case 2: + case 1: + case 0: + var_01 = randomintrange(2,3); + break; + } + + return var_01; +} + +//Function Number: 33 +func_243B(param_00) +{ + self endon("death"); + self endon("heli_players_dead"); + wait param_00; + if(!isplayer(self.etarget)) + { + return; + } + + self notify("fire_missiles",self.etarget); +} + +//Function Number: 34 +turret_default_fire(param_00,param_01,param_02) +{ + thread func_243B(randomfloatrange(0.2,2)); + for(var_03 = 0;var_03 < param_01;var_03++) + { + self setturrettargetent(param_00,common_scripts\utility::randomvector(50) + (0,0,32)); + if(self.allowshoot && !self.var_240B) + { + self fireweapon(); + } + + wait param_02; + } +} + +//Function Number: 35 +turret_minigun_fire(param_00,param_01,param_02) +{ + self endon("death"); + self endon("heli_players_dead"); + self notify("firing_miniguns"); + self endon("firing_miniguns"); + var_03 = func_2416(); + common_scripts\utility::array_thread(var_03,::func_2440,param_00,self); + if(!self.var_2419) + { + self.var_241A = 1; + thread maps\_utility::play_sound_on_tag("littlebird_gatling_spinup","tag_flash"); + wait 2.1; + thread maps\_utility::play_loop_sound_on_tag("littlebird_minigun_spinloop","tag_flash"); + } + + self.var_2419 = 1; + if(!isdefined(param_02)) + { + param_02 = 3; + } + + var_04 = 0.5; + if(var_04 > param_02) + { + var_04 = param_02; + } + + if(var_04 > 0) + { + wait randomfloatrange(var_04,param_02); + } + + minigun_fire(param_00,param_01); + var_03 = func_2416(); + common_scripts\utility::array_call(var_03,::stopfiring); + thread minigun_spindown(param_00); + self notify("stopping_firing"); +} + +//Function Number: 36 +minigun_fire(param_00,param_01) +{ + self endon("death"); + self endon("heli_players_dead"); + if(isplayer(param_00)) + { + self endon("cant_see_player"); + } + + var_02 = func_2416(); + common_scripts\utility::array_call(var_02,::startfiring); + wait randomfloatrange(1,2); + if(isplayer(param_00)) + { + thread target_track(param_00); + } + + if(isplayer(param_00)) + { + var_03 = randomfloatrange(0.5,3); + thread func_243B(var_03); + } + + wait param_01; +} + +//Function Number: 37 +target_track(param_00) +{ + self endon("death"); + self endon("heli_players_dead"); + self endon("stopping_firing"); + self notify("tracking_player"); + self endon("tracking_player"); + for(;;) + { + if(!can_see_player(param_00)) + { + break; + } + + wait 0.5; + } + + wait level.attackhelitimeout; + self notify("cant_see_player"); +} + +//Function Number: 38 +func_2440(param_00,param_01) +{ + param_01 endon("death"); + param_01 endon("heli_players_dead"); + self notify("miniguns_have_new_target"); + self endon("miniguns_have_new_target"); + if(!isplayer(param_00) && isai(param_00) && level.attackhelikillsai == 0) + { + var_02 = spawn("script_origin",param_00.origin + (0,0,100)); + var_02 linkto(param_00); + thread minigun_ai_target_cleanup(var_02); + param_00 = var_02; + } + + for(;;) + { + wait 0.5; + self settargetentity(param_00); + } +} + +//Function Number: 39 +minigun_ai_target_cleanup(param_00) +{ + common_scripts\utility::waittill_either("death","miniguns_have_new_target"); + param_00 delete(); +} + +//Function Number: 40 +minigun_spindown(param_00) +{ + self endon("death"); + self endon("heli_players_dead"); + self endon("firing_miniguns"); + if(isplayer(param_00)) + { + wait randomfloatrange(3,4); + } + else + { + wait randomfloatrange(1,2); + } + + thread func_2443(); + self.var_241A = 0; +} + +//Function Number: 41 +func_2443() +{ + self notify("stop soundlittlebird_minigun_spinloop"); + self.var_2419 = 0; + maps\_utility::play_sound_on_tag("littlebird_gatling_cooldown","tag_flash"); +} + +//Function Number: 42 +func_2444(param_00) +{ + var_01 = anglestoforward(level.player.angles); + var_02 = var_01 * 400; + var_03 = var_02 + common_scripts\utility::randomvector(50); + var_04 = randomintrange(10,20); + var_05 = weaponfiretime("turret_attackheli"); + for(var_06 = 0;var_06 < var_04;var_06++) + { + var_03 = var_02 + common_scripts\utility::randomvector(50); + self setturrettargetent(param_00,var_03); + if(self.allowshoot) + { + self fireweapon(); + } + + wait var_05; + } +} + +//Function Number: 43 +can_see_player(param_00) +{ + self endon("death"); + self endon("heli_players_dead"); + var_01 = self gettagorigin("tag_flash"); + if(sighttracepassed(var_01,param_00 geteye(),0,undefined)) + { + return 1; + } + + return 0; +} + +//Function Number: 44 +func_2446(param_00,param_01,param_02,param_03,param_04) +{ + var_05 = []; + var_06 = strtok(param_01.script_linkto," "); + for(var_07 = 0;var_07 < param_02.size;var_07++) + { + for(var_08 = 0;var_08 < var_06.size;var_08++) + { + if(param_02[var_07].script_linkname == var_06[var_08]) + { + var_05[var_05.size] = param_02[var_07]; + } + } + } + + foreach(var_0A in var_05) + { + if(var_0A.origin[2] < param_04[2]) + { + var_05 = common_scripts\utility::array_remove(var_05,var_0A); + continue; + } + } + + return var_05; +} + +//Function Number: 45 +func_2447() +{ + self endon("death"); + self endon("heli_players_dead"); + self endon("crashing"); + self endon("leaving"); + self.damagetaken = 0; + self.seen_attacker = undefined; + for(;;) + { + self waittill("damage",var_00,var_01,var_02,var_03,var_04); + if(!isdefined(var_01) || !isplayer(var_01)) + { + continue; + } + + self notify("damage_by_player"); + thread heli_damage_update(); + thread func_244A(var_01); + if(maps\_utility::is_damagefeedback_enabled()) + { + var_01 thread updatedamagefeedback(); + } + } +} + +//Function Number: 46 +heli_damage_update() +{ + self notify("taking damage"); + self endon("taking damage"); + self endon("death"); + self endon("heli_players_dead"); + self.istakingdamage = 1; + wait 1; + self.istakingdamage = 0; +} + +//Function Number: 47 +func_244A(param_00) +{ + self notify("attacker_seen"); + self endon("attacker_seen"); + self.seen_attacker = param_00; + self.var_240E = param_00; + wait level.var_23FD; + self.var_240E = undefined; + self.seen_attacker = undefined; +} + +//Function Number: 48 +func_244B(param_00) +{ + if(isdefined(param_00.seen_attacker)) + { + if(param_00.seen_attacker == self) + { + return 0; + } + } + + if(isdefined(level.attack_heli_safe_volumes)) + { + foreach(var_02 in level.attack_heli_safe_volumes) + { + if(self istouching(var_02)) + { + return 1; + } + } + } + + return 0; +} + +//Function Number: 49 +updatedamagefeedback() +{ + if(!isplayer(self)) + { + return; + } + + self.hud_damagefeedback setshader("damage_feedback",24,48); + self playlocalsound("player_feedback_hit_alert"); + self.hud_damagefeedback.alpha = 1; + self.hud_damagefeedback fadeovertime(1); + self.hud_damagefeedback.alpha = 0; +} + +//Function Number: 50 +func_244C() +{ + for(var_00 = 0;var_00 < level.players.size;var_00++) + { + var_01 = level.players[var_00]; + var_01.hud_damagefeedback = newclienthudelem(var_01); + var_01.hud_damagefeedback.horzalign = "center"; + var_01.hud_damagefeedback.vertalign = "middle"; + var_01.hud_damagefeedback.x = -12; + var_01.hud_damagefeedback.y = -12; + var_01.hud_damagefeedback.alpha = 0; + var_01.hud_damagefeedback.archived = 1; + var_01.hud_damagefeedback setshader("damage_feedback",24,48); + } +} + +//Function Number: 51 +func_244D() +{ + self waittill("death"); + level notify("attack_heli_destroyed"); + level.enemy_heli_killed = 1; + wait 15; + level.var_2421 = 0; +} + +//Function Number: 52 +func_244E(param_00) +{ + param_00 endon("death"); + param_00 endon("heli_players_dead"); + wait 30; + if(!level.var_2421) + { + return; + } + + func_244F("co_cf_cmd_heli_small_fire"); + if(!level.var_2421) + { + return; + } + + func_244F("co_cf_cmd_rpg_stinger"); + wait 30; + if(!level.var_2421) + { + return; + } + + func_244F("co_cf_cmd_heli_wonders"); +} + +//Function Number: 53 +func_244F(param_00) +{ + while(level.commander_speaking) + { + wait 1; + } + + level.commander_speaking = 1; + level.player playsound(param_00,"sounddone"); + level.player waittill("sounddone"); + wait 0.5; + level.commander_speaking = 0; +} + +//Function Number: 54 +func_2450() +{ + var_00 = self getcurrentweapon(); + if(!isdefined(var_00)) + { + return 0; + } + + if(issubstr(tolower(var_00),"rpg")) + { + return 1; + } + + if(issubstr(tolower(var_00),"stinger")) + { + return 1; + } + + if(issubstr(tolower(var_00),"at4")) + { + return 1; + } + + return 0; +} + +//Function Number: 55 +func_2451(param_00) +{ + common_scripts\utility::waittill_any("death","crash_done","turn_off_spotlight"); + self.spotlight = undefined; + if(isdefined(self)) + { + stopfxontag(common_scripts\utility::func_539("_attack_heli_spotlight"),self,param_00); + } +} + +//Function Number: 56 +func_2452() +{ + self endon("death"); + self endon("heli_players_dead"); + if(self.vehicletype != "littlebird") + { + return; + } + + thread heli_spotlight_think(); + var_00 = undefined; + for(;;) + { + wait 0.05; + switch(self.vehicletype) + { + case "littlebird": + var_00 = self.var_2453; + break; + + default: + var_00 = self.etarget; + break; + } + + if(isdefined(var_00)) + { + self setturrettargetent(var_00,(0,0,0)); + } + } +} + +//Function Number: 57 +heli_spotlight_think() +{ + self endon("death"); + self endon("heli_players_dead"); + var_00 = self.targetdefault; + var_00.targetname = "original_ent"; + self.left_ent = spawn("script_origin",var_00.origin); + self.left_ent.origin = var_00.origin; + self.left_ent.angles = var_00.angles; + self.left_ent.targetname = "left_ent"; + self.right_ent = spawn("script_origin",var_00.origin); + self.right_ent.origin = var_00.origin; + self.right_ent.angles = var_00.angles; + self.right_ent.targetname = "right_ent"; + var_01 = spawnstruct(); + var_01.entity = self.left_ent; + var_01.right = 250; + var_01 maps\_utility::translate_local(); + self.left_ent linkto(self); + var_02 = spawnstruct(); + var_02.entity = self.right_ent; + var_02.right = -250; + var_02 maps\_utility::translate_local(); + self.right_ent linkto(self); + var_03 = []; + self.var_2453 = var_01; + common_scripts\utility::array_thread(var_41,::func_2458,self); + for(;;) + { + wait randomfloatrange(1,3); + if(heli_has_player_target() && !within_player_fov()) + { + self.var_2453 = self.etarget; + continue; + } + + var_04 = randomint(var_41.size); + self.targetdefault = var_41[var_04]; + self.var_2453 = self.targetdefault; + } +} + +//Function Number: 58 +within_player_fov() +{ + self endon("death"); + self endon("heli_players_dead"); + if(!isdefined(self.etarget)) + { + return 0; + } + + if(!isplayer(self.etarget)) + { + return 0; + } + + var_00 = self.etarget; + var_01 = maps\_utility::within_fov(var_00 geteye(),var_00 getplayerangles(),self.origin,level.cosine["35"]); + return var_01; +} + +//Function Number: 59 +func_2458(param_00) +{ + param_00 common_scripts\utility::waittill_either("death","crash_done"); + if(isdefined(self)) + { + self delete(); + } +} + +//Function Number: 60 +littlebird_turrets_think(param_00) +{ + var_01 = self; + var_01 maps\_vehicle::func_245A("manual"); + if(isdefined(param_00.targetdefault)) + { + var_01 settargetentity(param_00.targetdefault); + } + + var_01 setmode("manual"); + param_00 waittill("death"); + if(isdefined(param_00.var_241A) && param_00.var_241A == 1) + { + thread func_2443(); + } +} + +//Function Number: 61 +func_245B() +{ + common_scripts\utility::waittill_either("death","crash_done"); + if(isdefined(self.attractor)) + { + missile_deleteattractor(self.attractor); + } + + if(isdefined(self.attractor2)) + { + missile_deleteattractor(self.attractor2); + } +} + +//Function Number: 62 +func_245C(param_00) +{ + self endon("death"); + self endon("heli_players_dead"); + self endon("stop_default_heli_missiles"); + self.preferredtarget = undefined; + while(isdefined(self)) + { + wait 0.05; + var_01 = undefined; + var_02 = undefined; + var_03 = undefined; + self.preferredtarget = undefined; + var_04 = undefined; + if(isdefined(self.currentnode) && isdefined(self.currentnode.target)) + { + var_04 = maps\_utility::func_2373(self.currentnode.target,"targetname"); + } + + if(isdefined(var_04) && isdefined(var_04.script_linkto)) + { + self.preferredtarget = maps\_utility::func_2373(var_04.script_linkto,"script_linkname"); + } + + if(isdefined(self.preferredtarget)) + { + var_01 = self.preferredtarget; + var_02 = var_01.script_shotcount; + var_03 = var_01.script_delay; + var_04 waittill("trigger"); + continue; + } + + common_scripts\utility::waittill_any("near_goal","goal"); + if(isdefined(var_01)) + { + thread func_2464(var_01,var_02,var_03,param_00); + } + } +} + +//Function Number: 63 +heli_default_missiles_off() +{ + self notify("stop_default_heli_missiles"); +} + +//Function Number: 64 +heli_spotlight_on(param_00,param_01) +{ + if(!isdefined(param_00)) + { + param_00 = "tag_barrel"; + } + + if(!isdefined(param_01)) + { + param_01 = 0; + } + + playfxontag(common_scripts\utility::func_539("_attack_heli_spotlight"),self,param_00); + self.spotlight = 1; + thread func_2451(param_00); + if(param_01) + { + self endon("death"); + self endon("heli_players_dead"); + var_02 = self gettagorigin("tag_origin"); + if(!isdefined(self.targetdefault)) + { + func_2415(); + } + + self setturrettargetent(self.targetdefault); + thread func_2452(); + } +} + +//Function Number: 65 +heli_spotlight_off() +{ + self notify("turn_off_spotlight"); +} + +//Function Number: 66 +heli_spotlight_random_targets_on() +{ + self endon("death"); + self endon("heli_players_dead"); + self endon("stop_spotlight_random_targets"); + if(!isdefined(self.targetdefault)) + { + thread func_2415(); + } + + if(!isdefined(self.left_ent)) + { + thread heli_spotlight_think(); + } + + while(isdefined(self)) + { + wait 0.05; + self setturrettargetent(self.targetdefault,(0,0,0)); + } +} + +//Function Number: 67 +heli_spotlight_random_targets_off() +{ + self notify("stop_spotlight_random_targets"); +} + +//Function Number: 68 +func_2464(param_00,param_01,param_02,param_03) +{ + self endon("death"); + self endon("heli_players_dead"); + if(isdefined(self.var_2465)) + { + var_04 = self.var_2465; + } + else + { + var_04 = "turret_attackheli"; + } + + var_05 = "missile_attackheli"; + if(isdefined(param_03)) + { + var_05 = param_03; + } + + var_06 = undefined; + var_07 = []; + self setvehweapon(var_04); + if(!isdefined(param_01)) + { + param_01 = 1; + } + + if(!isdefined(param_02)) + { + param_02 = 1; + } + + if(!isdefined(param_00.classname)) + { + if(!isdefined(self.var_2466)) + { + self.var_2466 = spawn("script_origin",param_00.origin); + thread common_scripts\utility::delete_on_death(self.var_2466); + } + + self.var_2466.origin = param_00.origin; + param_00 = self.var_2466; + } + + switch(self.vehicletype) + { + case "mi28": + var_06 = 0.5; + break; + var_41[7] + "tag_store_R_2_d" + var_41[6] + "tag_store_L_2_d" + var_41[5] + "tag_store_R_2_c" + var_41[4] + "tag_store_L_2_c" + var_41[3] + "tag_store_R_2_b" + var_41[2] + "tag_store_L_2_b" + var_41[1] + "tag_store_R_2_a" + var_41[0] + "tag_store_L_2_a" + break; + + case "littlebird": + var_07 = 0.5; + break; + var_41[1] + "tag_missile_right" + var_41[0] + "tag_missile_left" + break; + + default: + break; + } + + var_08 = -1; + for(var_09 = 0;var_09 < param_02;var_09++) + { + var_08++; + if(var_08 >= var_41.size) + { + var_08 = 0; + } + + self setvehweapon(var_06); + self.var_240B = 1; + var_0A = self fireweapon(var_41[var_08],param_01); + var_0A thread func_2435(); + if(var_09 < param_02 - 1) + { + wait param_03; + } + } + + self.var_240B = 0; + self setvehweapon(var_05); +} + +//Function Number: 69 +boneyard_style_heli_missile_attack() +{ + self waittill("trigger",var_00); + var_01 = common_scripts\utility::getstructarray(self.target,"targetname"); + var_01 = maps\_utility::func_236E(var_01); + boneyard_fire_at_targets(var_00,var_01); +} + +//Function Number: 70 +func_2468() +{ + self waittill("trigger",var_00); + var_01 = maps\_utility::get_linked_structs(); + var_01 = maps\_utility::func_236E(var_01); + boneyard_fire_at_targets(var_00,var_01); +} + +//Function Number: 71 +boneyard_fire_at_targets(param_00,param_01) +{ + var_02 = []; + if(level.script == "roadkill") + { + } + + if(param_01.vehicletype == "cobra") + { + } + + var_03 = []; + for(var_04 = 0;var_04 < var_02.size;var_04++ = var_41[1]) + { + var_03[var_04] = spawn("script_origin",var_02[var_04].origin); + param_01 setvehweapon("littlebird_FFAR"); + param_01 setturrettargetent(var_03[var_04]); + var_05 = param_01 fireweapon(var_41[var_04 % var_41.size],var_03[var_04],(0,0,0)); + var_05 common_scripts\utility::delaycall(1,::missile_cleartarget); + wait randomfloatrange(0.2,0.3); + } + + wait 2; + foreach(var_07 in var_03) + { + var_07 delete(); + } +} \ No newline at end of file